"""This module defines useful geometry related functions for ase.Atomsinstances."""fromitertoolsimportproductimportmathimportasefromnumpy.linalgimportnorm
[docs]defcalculate_separation(structure1:ase.Atoms,structure2:ase.Atoms)->float:"""Calculates the separation between two ase.Atoms instances defined as the smallest distance between an atom in one structure and an atom in the second structure. Args: structure1: An ase.Atoms instance. structure2: An ase.Atoms instance. Returns: A float representing the separation between the two structures. """minimum_separation=math.infstructures=product(structure1.positions,structure2.positions)forposition1,position2instructures:separation=norm(position1-position2)ifseparation<minimum_separation:minimum_separation=separationreturnminimum_separation