Calculating Periodic Bond Chains¶
The class ccdc.crystal.Crystal.PeriodicBondChain allows calculation of Periodic Bond Chains (PBC) for a crystal structure.
- PBCs were first introduced by Hartman and Perdok as a way to find a connection between crystal structure and crystal morphology, as described in their series of articles published in 1955:
According to Hartman and Perdok’s theory, PBCs can help to identify directions of preferential growth of a crystal by considering uninterrupted chains of strong bonds (or intermolecular interactions) between the crystal’s building units, which can be atoms or, like in our case, molecules.
Each PBC is identified with a vector indicating its direction, as well as information about the molecules that form part of the PBC.
- Following Hartman and Perdok’s definition, a crystal plane (or face) can be defined as:
Kinked (K) if it contains no PBC vector.
Stepped (S) if it contains one coplanar PBC vector.
Flat (F) if it contains two or more coplanar PBC vectors.
Here, we will see a few examples of how PBCs can be calculated for a crystal structure, and how they can be used to interrogate patterns of intermolecular interactions that are responsible for crystal growth.
As usual, we start by selecting a CSD refcode to initialise our crystal structure:
>>> from ccdc import io
>>> from ccdc.crystal import Crystal
>>> csd_refcode = 'ACSALA01'
>>> csd_reader = io.EntryReader("CSD")
>>> crystal = csd_reader.entry(csd_refcode).crystal
We can then calculate the PBCs for our structure:
>>> periodic_bond_chains = crystal.periodic_bond_chains()
Hydrogens normalised for the crystal for the periodic bond chain finding.
>>> len(periodic_bond_chains)
1120
If we want to look at a PBC in more detail, we can access its various attributes.
>>> first_pbc = periodic_bond_chains[0]
>>> print(f"This PBC runs along the {first_pbc.direction} direction and it is formed by {first_pbc.length} interactions")
This PBC runs along the (0, 1, 0) direction and it is formed by 2 interactions
>>> print(f"The strongest intermolecular interaction forming this PBC has a strength of {round(first_pbc.max_strength)} kJ/mol")
The strongest intermolecular interaction forming this PBC has a strength of -49.5 kJ/mol
>>> print(f"The weakest intermolecular interaction forming this PBC has a strength of {round(first_pbc.min_strength)} kJ/mol")
The weakest intermolecular interaction forming this PBC has a strength of -23.7 kJ/mol