Continuous symmetry measures
A continuous symmetry measure (CSM) quantifies how much a coordination polyhedron deviates from an ideal reference geometry. A CSM of zero indicates perfect agreement; larger values indicate greater distortion.
The CSM is computed using the approach of Pinsky and Avnir [1], which finds the optimal rotation, scaling, and vertex permutation to minimise the distance between the observed and reference vertex positions via SVD-based Procrustes analysis.
Computing symmetry measures
Every CoordinationPolyhedron
has a symmetry_measure
property that returns the CSM against all reference geometries defined
for its coordination number:
poly = config.polyhedra[0]
poly.symmetry_measure
# {'Octahedron': 1.2e-30, 'Trigonal prism': 16.7, ...}
The keys are geometry names and the values are CSM values.
Best-fit geometry
The
best_fit_geometry
property returns the reference geometry with the smallest CSM:
poly.best_fit_geometry
# {'geometry': 'Octahedron', 'symmetry_measure': 1.2e-30}
Available reference geometries
The following reference geometries are available, grouped by coordination number:
CN |
Geometries |
|---|---|
4 |
Tetrahedron |
5 |
Trigonal bipyramid, Square pyramid |
6 |
Octahedron, Trigonal prism |
7 |
Pentagonal bipyramid, Square-face capped trigonal prism, Face-capped octahedron |
8 |
Cube, Square antiprism, Square-face bicapped trigonal prism, Triangular-face bicapped trigonal prism, Dodecahedron with triangular faces, Hexagonal bipyramid, Bicapped octahedron (opposed cap faces), Bicapped octahedron (cap faces with one atom in common), Bicapped octahedron (cap faces with one edge in common) |
Reference coordinates are defined in
polyhedral_analysis.reference_geometries.
Using SymmetryMeasure directly
For lower-level control, you can construct a
SymmetryMeasure and
compute the CSM against custom vertex coordinates:
from polyhedral_analysis.symmetry_measure import SymmetryMeasure
sm = SymmetryMeasure.from_name('Octahedron')
csm_value = sm.minimum_symmetry_measure(vertex_vectors)
The minimum_symmetry_measure()
method searches over all symmetry-inequivalent vertex permutations,
using the point-group symmetry of the reference geometry to reduce the
number of permutations that must be tested.