[docs]deftranslate(vector):""" Translates the coordinates of a given :class:`~MDAnalysis.coordinates.base.Timestep` instance by a given vector. Example ------- ts = MDAnalysis.transformations.translate([1,2,3])(ts) Parameters ---------- vector: array-like coordinates of the vector to which the coordinates will be translated Returns ------- :class:`~MDAnalysis.coordinates.base.Timestep` object """iflen(vector)>2:vector=np.float32(vector)else:raiseValueError("{} vector is too short".format(vector))defwrapped(ts):ts.positions+=vectorreturntsreturnwrapped

[docs]defcenter_in_box(ag,center='geometry',point=None,wrap=False):""" Translates the coordinates of a given :class:`~MDAnalysis.coordinates.base.Timestep` instance so that the center of geometry/mass of the given :class:`~MDAnalysis.core.groups.AtomGroup` is centered on the unit cell. The unit cell dimensions are taken from the input Timestep object. If a point is given, the center of the atomgroup will be translated to this point instead. Example ------- .. code-block:: python ag = u.residues[1].atoms ts = MDAnalysis.transformations.center(ag,center='mass')(ts) Parameters ---------- ag: AtomGroup atom group to be centered on the unit cell. center: str, optional used to choose the method of centering on the given atom group. Can be 'geometry' or 'mass' point: array-like, optional overrides the unit cell center - the coordinates of the Timestep are translated so that the center of mass/geometry of the given AtomGroup is aligned to this position instead. Defined as an array of size 3. wrap: bool, optional If `True`, all the atoms from the given AtomGroup will be moved to the unit cell before calculating the center of mass or geometry. Default is `False`, no changes to the atom coordinates are done before calculating the center of the AtomGroup. Returns ------- :class:`~MDAnalysis.coordinates.base.Timestep` object """pbc_arg=wrapifpoint:point=np.asarray(point,np.float32)ifpoint.shape!=(3,)andpoint.shape!=(1,3):raiseValueError('{} is not a valid point'.format(point))try:ifcenter=='geometry':center_method=partial(ag.center_of_geometry,pbc=pbc_arg)elifcenter=='mass':center_method=partial(ag.center_of_mass,pbc=pbc_arg)else:raiseValueError('{} is not a valid argument for center'.format(center))exceptAttributeError:ifcenter=='mass':raiseAttributeError('{} is not an AtomGroup object with masses'.format(ag))else:raiseValueError('{} is not an AtomGroup object'.format(ag))defwrapped(ts):ifpointisNone:boxcenter=np.sum(ts.triclinic_dimensions,axis=0)/2else:boxcenter=pointag_center=center_method()vector=boxcenter-ag_centerts.positions+=vectorreturntsreturnwrapped