Miscellaneous

Fingerprints of finite point sets

AMDs and PDDs also work for finite point sets. amd.AMD_finite() and amd.PDD_finite() accept a NumPy array containing the points and return the AMD/PDD. Unlike amd.AMD() and amd.PDD() no integer k is passed; instead the distances to all neighbours are found (number of columns = no of points - 1).

# Compare AMDs of trapezium and kite shaped finite point sets
trapezium = np.array([[0,0],[1,1],[3,1],[4,0]])
kite      = np.array([[0,0],[1,1],[1,-1],[4,0]])

trap_amd = amd.AMD_finite(trapezium)
kite_amd = amd.AMD_finite(kite)

amd_dist = np.amax(np.abs(trap_amd - kite_amd))

Reconstruction of a periodic set from its PDD

It is possible to reconstruct a periodic set up to isometry from its PDD if the periodic set satisfies certain conditions (a ‘general position’) and the PDD has enough columns. This is implemented via the functions amd.PDD_reconstructable(), which returns the PDD of a periodic set with enough columns, and amd.reconstruct.reconstruct() which returns the motif given the PDD and unit cell. Reconstruction is not optimised and very slow for most real crystals, it’s also not well tested and may not work for some crystals.