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
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