Hi Xiwen,

you can generate molecules outside the unit cell with the translate parameter of the symmetric_molecule() method if you want explicit control of the symmety operator, or you can generate expanded representations of the crystal through methods such as packing_shell() and molecular_shell(). So, for example, you could use the molecular shell:

mol = crystal.molecular_shell()

atoms_of_interest = [a for a in mol.atoms if a.label == 'Te1']

min_dist = min(MolecularDescriptors.atom_distance(a, b) for a in atoms_of_interest for b in atoms_of_interest if a != b)

or by hand you can calculate all translated symmetric molecules:

expansions = [

crystal.symmetric_molecule(symmop, (i, j, k))

for symmop in cry.symmetry_operators

for i in range(-2, 3)

for j in range(-2, 3)

for k in range(-2, 3)

]

min_dist = min(

MolecularDescriptors.atom_distance(expansions[i].atom('Te1'), expansions[j].atom('Te1'))

for i in range(len(expansions)) for j in range(len(expansions))

if i != j

)

Is either of these solutions what you are after?

Best wishes

Richard