Reduced cell searching

Introduction

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 ccdc.search module.

>>> from ccdc.search import ReducedCellSearch

Let us also get access to the AACMHX10 crystal.

>>> from ccdc.io 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)
primitive

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

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

Let us analyse the hits.

>>> print(len(hits))
29
>>> h = hits[0]
>>> print(h.identifier)
AACMHX10
>>> 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)
primitive

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

See also

More information about CellCheckCSD can be found on the CCDC website www.ccdc.cam.ac.uk/Solutions/FreeSoftware/Pages/CellCheckCSD.aspx

Note

The settings used in the reduced cell search can be modified in the ccdc.search.ReducedCellSearch.Settings.

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