Example #1
0
def trajectory_from_mdtraj(mdtrajectory,
                           simple_topology=False,
                           velocities=None):
    """
    Construct a Trajectory object from an mdtraj.Trajectory object

    Parameters
    ----------
    mdtrajectory : mdtraj.Trajectory
        Input mdtraj.Trajectory
    simple_topology : bool
        if `True` only a simple topology with n_atoms will be created.
        This cannot be used with complex CVs but loads and stores very fast
    velocities : np.array
        velocities in units of nm/ps

    Returns
    -------
    openpathsampling.engines.Trajectory
        the constructed Trajectory instance
    """
    trajectory = Trajectory()
    vel_unit = u.nanometer / u.picosecond

    if simple_topology:
        topology = Topology(*mdtrajectory.xyz[0].shape)
    else:
        topology = MDTrajTopology(mdtrajectory.topology)

    if velocities is None:
        empty_vel = u.Quantity(np.zeros(mdtrajectory.xyz[0].shape), vel_unit)

    if mdtrajectory.unitcell_vectors is not None:
        box_vects = u.Quantity(mdtrajectory.unitcell_vectors, u.nanometers)
    else:
        box_vects = [None] * len(mdtrajectory)

    engine = TopologyEngine(topology)

    for frame_num in range(len(mdtrajectory)):
        # mdtraj trajectories only have coordinates and box_vectors
        coord = u.Quantity(mdtrajectory.xyz[frame_num], u.nanometers)
        if velocities is not None:
            vel = u.Quantity(velocities[frame_num], vel_unit)
        else:
            vel = empty_vel

        box_v = box_vects[frame_num]

        statics = Snapshot.StaticContainer(coordinates=coord,
                                           box_vectors=box_v)
        kinetics = Snapshot.KineticContainer(velocities=vel)

        snap = Snapshot(statics=statics, kinetics=kinetics, engine=engine)
        trajectory.append(snap)

    return trajectory
Example #2
0
def trajectory_from_mdtraj(mdtrajectory, simple_topology=False):
    """
    Construct a Trajectory object from an mdtraj.Trajectory object

    Parameters
    ----------
    mdtrajectory : mdtraj.Trajectory
        Input mdtraj.Trajectory
    simple_topology : bool
        if `True` only a simple topology with n_atoms will be created.
        This cannot be used with complex CVs but loads and stores very fast

    Returns
    -------
    openpathsampling.engines.Trajectory
        the constructed Trajectory instance
    """

    trajectory = Trajectory()
    empty_kinetics = Snapshot.KineticContainer(
        velocities=u.Quantity(
            np.zeros(mdtrajectory.xyz[0].shape), u.nanometer / u.picosecond)
    )
    if simple_topology:
        topology = Topology(*mdtrajectory.xyz[0].shape)
    else:
        topology = MDTrajTopology(mdtrajectory.topology)

    engine = TopologyEngine(topology)

    for frame_num in range(len(mdtrajectory)):
        # mdtraj trajectories only have coordinates and box_vectors
        coord = u.Quantity(mdtrajectory.xyz[frame_num], u.nanometers)
        if mdtrajectory.unitcell_vectors is not None:
            box_v = u.Quantity(mdtrajectory.unitcell_vectors[frame_num],
                               u.nanometers)
        else:
            box_v = None

        statics = Snapshot.StaticContainer(
            coordinates=coord,
            box_vectors=box_v
        )

        snap = Snapshot(
            statics=statics,
            kinetics=empty_kinetics,
            engine=engine
        )
        trajectory.append(snap)

    return trajectory