Reduced cell searching


Reduced cell searching of crystal structures is of practical use when collecting crystallographic data. Before collecting a full data set one can use a reduced cell search using the pre-experiment unit cell against the CSD for the purpose of:

  • Matching a known crystal structure against the cell dimensions previously published.
  • Checking that a new crystal sample you are looking to collect has not been published before.
  • Helping to check that starting materials or a reaction by-product have not been crystallised by accident.

The reduced cell searching functionality is located in the module.

>>> from import ReducedCellSearch

Let us also get access to the AACMHX10 crystal.

>>> from import EntryReader
>>> entry_reader = EntryReader('CSD')
>>> aacmhx10 = entry_reader.crystal('AACMHX10')

Use of the Niggli reduced cell (commonly termed “the reduced cell”) is problematic due to numerical instabilities. While the reduced cell can be uniquely specified for any given crystal lattice, the reduced cell angles can change greatly with only small changes in the lattice parameters. A reduced unit cell search algorithm does not suffer from this problem. The reduced cell search algorithm employed by the CSD Python API is the same as that used in WebCSD which relies on “nearly Buerger reduced cells”. In this method the reduced cells and a set of closely related cells are determined and this extended set of cell parameters is used to evaluate whether any pair of crystals share the same, or essentially the same, reduced cell.

Performing reduced cell searches

Here we will illustrate the reduced cell searching functionality using the cell parameters from AACMHX10.

>>> print(aacmhx10.cell_lengths)
CellLengths(a=24.157, b=16.758, c=8.535)
>>> print(aacmhx10.cell_angles)
CellAngles(alpha=90.0, beta=90.0, gamma=90.0)
>>> print(aacmhx10.lattice_centring)

To perform a reduced cell search let us create an instance of

>>> query = ReducedCellSearch.Query(aacmhx10.cell_lengths,
...                                 aacmhx10.cell_angles,
...                                 aacmhx10.lattice_centring)
>>> searcher = ReducedCellSearch(query)
>>> hits =

Let us analyse the hits.

>>> print(len(hits))
>>> h = hits[0]
>>> print(h.identifier)
>>> print(h.crystal.cell_lengths)
CellLengths(a=24.157, b=16.758, c=8.535)
>>> print(h.crystal.cell_angles)
CellAngles(alpha=90.0, beta=90.0, gamma=90.0)
>>> print(h.crystal.lattice_centring)

It is also possible to set up reduced cell searches from a ccdc.crystal.Crystal instance using the class, as well as from CellCheckCSD XML files using either the class or the function.

See also

More information about CellCheckCSD can be found on the CCDC website


The settings used in the reduced cell search can be modified in the

Reduced cell searches allow all forms of search filter given by See Search filters for examples of use.