Structure comparison

The client decides a match

job = structure_comparison reads matter1.con and matter2.con. It writes results.dat with match, distance, and per_atom_norm.

match follows this section. Leave check_rotation off and set indistinguishable_atoms. Same-element atoms may then pair in any order inside distance_difference. The pairing is one-to-one. A crossed pair can match. Two atoms cannot take one site. Set check_rotation alone and the client removes the centroids. It then rotates with its Kabsch routine and compares atoms in file order. Set both flags and the client compares sorted neighbor-distance lists.

remove_translation defaults to true. Leave check_rotation off. Leave no atom fixed on all three Cartesian components. The client then shifts the first structure onto the second. The shift equals the mean minimum-image displacement. A periodic cell that drifted as a whole still matches. check_rotation skips the shift. A fully fixed atom skips it too. The adaptive kinetic Monte Carlo server uses the same test for a repeated saddle and for a state it already stores.

eon.atoms.rot_match is a separate helper. It calls iterative rotations and assignments through pyeonclient when that routine is present. A missing routine selects the helper’s own Kabsch test. An error from the call selects that test too. eon.atoms.crystal_spacegroup reads the cell and the atoms. It returns an international symbol, an international number, and a Hall number. The function does not decide whether two clusters match.

Configuration

[Structure Comparison]
pydantic model eon.schema.StructureComparisonConfig[source]
Fields:
  • energy_difference (float)

  • distance_difference (float)

  • indistinguishable_atoms (bool)

  • check_rotation (bool)

  • brute_neighbors (bool)

  • neighbor_cutoff (float)

  • use_covalent (bool)

  • covalent_scale (float)

  • remove_translation (bool)

field energy_difference: float = 0.01

How different in energy two configurations must be to be considered different structures.

field distance_difference: float = 0.1

The maximum distance two mapped atoms may be for two configurations to be considered equivalent.

field indistinguishable_atoms: bool = True

Use an algorithm to compare structures that does not distinguish between atoms of the same element. The numbering of the atoms does not affect the structural comparison.

field check_rotation: bool = False

Finds optimal overlap of structures via rotation before comparing them. Use this option in systems where structures can become rotated, such as nanoparticles.

field brute_neighbors: bool = False

Determine neighbors by brute force (use this with nonorthogonal boxes).

field neighbor_cutoff: float = 3.3

Atoms within this distance of each other are considered neighbors.

field use_covalent: bool = False

Use the covalent radii of atoms to determine neighbors.

field covalent_scale: float = 1.3

Scale factor for covalent radii when determining neighbors.

field remove_translation: bool = True

Remove translational components when comparing structures.

References