Source code for schrodinger.application.matsci.nano.tools

"""
Tools for periodic systems (crystals, slabs) manipulation.

Copyright Schrodinger, LLC. All rights reserved."""

import numpy

from schrodinger.application.matsci.nano import xtal
from schrodinger.structutils import transform


[docs]def origin_shift_maestro(struct, atom_index, shift_to_origin=True): """ Shift origin of the structure to origin or center. :param schrodinger.structure.Structure struct: Input structure :param int atom_index: Atom index to shift to :param bool shift_to_origin: If True, shift to origin, if False shift to middle of the cell ([0.5, 0.5, 0.5]) """ # This function is called by maestro, don't raise or return anything except # structure object no matter what. struct = struct.copy() if not (1 <= atom_index <= struct.atom_total): return struct if not xtal.sync_pbc2(struct): return struct vecs = xtal.get_vectors_from_chorus(struct) xyz = struct.atom[atom_index].xyz fracs = xtal.trans_cart_to_frac_from_vecs(xyz, *vecs) if shift_to_origin: origin = numpy.zeros(3) else: origin = numpy.array([0.5, 0.5, 0.5]) oshift = origin - fracs oshift = xtal.trans_frac_to_cart_from_vecs(oshift, *vecs) transform.translate_structure(struct, *oshift) struct = xtal.move_atoms_into_cell(struct, preserve_bonding=True) return struct