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))
34
>>> 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.