Source code for taurenmd.libs.libmdt

"""
Functions that wrap around `MDTraj library`_.

Functions contained in this module operate with MDTraj functionalities,
wither by using MDTraj to access Molecular Dynamics data or by receiving
MDTraj data structures and parsing them in some way.

`Simtk OpenMM`_ is also used in some functions.

Read our `citing documentation`_ to understand how to cite multiple
libraries.

.. _MDTraj library: http://mdtraj.org/1.9.3/index.html
.. _citing documentation: https://taurenmd.readthedocs.io/en/latest/citing.html
.. _Simtk OpenMM: http://openmm.org/
"""
import os

import mdtraj

from taurenmd import Path
from taurenmd import core as tcore
from taurenmd import log
from taurenmd.libs import libio, libopenmm
from taurenmd.logger import S, T


[docs]@tcore.add_reference(tcore.ref_mdt) def load_traj(topology, trajectories, insort=False): """ Load trajectory with `MDTraj <http://mdtraj.org/1.9.3/index.html>`_. Uses `mdtraj.load <http://mdtraj.org/1.9.3/api/generated/mdtraj.load.html?highlight=load#mdtraj.load>`_. Example ------- >>> libmdt.load_traj('bigtopology.cif', 'trajectory.dcd') Parameters ---------- topology : str or Path or list Path to the topology file. Accepts MDTraj compatible `topology files <http://mdtraj.org/1.9.3/load_functions.html#trajectory-reference>`_. mmCIF format is loaded using `OpenMM <http://mdtraj.org/1.9.3/api/generated/mdtraj.Topology.html?highlight=from_openmm#mdtraj.Topology.from_openmm>`_. trajectory : str or Path Path to the trajectory file. Accepts MDTraj compatible `files <http://mdtraj.org/1.9.3/load_functions.html#trajectory-reference>`_ Returns ------- MDTraj trajectory `Trajectory object <http://mdtraj.org/1.9.3/api/generated/mdtraj.Trajectory.html#mdtraj-trajectory>`_. """ # noqa: E501 if insort: trajectories = libio.sort_numbered_input(*trajectories) try: # just in case Paths arrive trajs = [os.fspath(t) for t in trajectories] except TypeError: trajs = os.fspath(trajectories) libio.report_input(topology, trajs) if Path(topology).suffix == '.cif': _top = libopenmm.attempt_to_load_top_from_simtk(topology) top = mdtraj.Topology.from_openmm(_top.topology) else: top = Path(topology).str() mdtrajectory = mdtraj.load(trajs, top=top) return mdtrajectory
[docs]@tcore.add_reference(tcore.ref_mdt) def imagemol_protocol1(traj): """Attempt to image molecules acting on the whole traj.""" log.info(T('running reimage protocol #1')) log.info(S('finding molecules')) mols = traj.top.find_molecules() log.info(S('done')) log.info(T('reimaging')) reimaged = traj.image_molecules( inplace=False, anchor_molecules=mols[:1], other_molecules=mols[1:], ) log.info(S('done')) return reimaged
[docs]@tcore.add_reference(tcore.ref_mdt) def imagemol_protocol2(traj): """Attempt to image molecules frame by frame.""" reimaged = [] for frame in range(len(traj)): log.info(S('reimaging frame: {}', frame)) mols = traj[frame].top.find_molecules() reimaged.append( traj[frame].image_molecules( inplace=False, anchor_molecules=mols[:1], other_molecules=mols[1:], ) ) log.info(S('concatenating traj frames')) # http://mdtraj.org/1.9.3/api/generated/mdtraj.join.html#mdtraj.join reimaged_traj = reimaged[0].join(reimaged[1:]) return reimaged_traj