Example #1
0
def get_atoms_num(filepath, file_type, ext=None):

    if file_type == 'coor':
        if ext is None:
            traj = mdtraj_load(filepath)
        else:
            ext2 = ext.lower()
            if ext2 == 'pdb':
                traj = mdtraj_load_pdb(filepath)
            else:
                raise ValueError('Extension "' + ext2 + '" not implemented.')
        numatoms = traj.n_atoms
    elif file_type == 'traj':

        if ext is None:
            trajfile = mdtraj_open(filepath)
        else:
            ext2 = ext.lower()
            if ext2 == 'dcd':
                trajfile = DCDTrajectoryFile(filepath)
            elif ext2 == 'xtc':
                trajfile = XTCTrajectoryFile(filepath)
            else:
                raise ValueError('Extension "' + ext + '" not implemented.')
        res = trajfile.read(1)
        xyz = res[0]
        numatoms = xyz.shape[1]
        trajfile.close()
    return numatoms
Example #2
0
def test_read_4():
    "DCDReader: check streaming read followed by reading the 'rest'"
    xyz_ref, box_lengths_ref, box_angles_ref = DCDTrajectoryFile(fn_dcd).read()

    reader = DCDTrajectoryFile(fn_dcd)
    for i in range(int(len(xyz_ref) / 2)):
        xyz, box_lenths, box_angles = reader.read(1)
        eq(xyz_ref[np.newaxis, i], xyz)
        eq(box_lengths_ref[np.newaxis, i], box_lenths)
        eq(box_angles_ref[np.newaxis, i], box_angles)

    xyz_rest, box_rest, angles_rest = reader.read()
    yield lambda: eq(xyz_ref[i + 1 :], xyz_rest)
    yield lambda: eq(box_lengths_ref[i + 1 :], box_rest)
    yield lambda: eq(box_angles_ref[i + 1 :], angles_rest)

    yield lambda: len(xyz_ref) == i + len(xyz_rest)
Example #3
0
def test_read_4():
    "DCDReader: check streaming read followed by reading the 'rest'"
    xyz_ref, box_lengths_ref, box_angles_ref = DCDTrajectoryFile(fn_dcd).read()

    reader = DCDTrajectoryFile(fn_dcd)
    for i in range(int(len(xyz_ref) / 2)):
        xyz, box_lenths, box_angles = reader.read(1)
        eq(xyz_ref[np.newaxis, i], xyz)
        eq(box_lengths_ref[np.newaxis, i], box_lenths)
        eq(box_angles_ref[np.newaxis, i], box_angles)

    xyz_rest, box_rest, angles_rest = reader.read()
    yield lambda: eq(xyz_ref[i + 1:], xyz_rest)
    yield lambda: eq(box_lengths_ref[i + 1:], box_rest)
    yield lambda: eq(box_angles_ref[i + 1:], angles_rest)

    yield lambda: len(xyz_ref) == i + len(xyz_rest)
Example #4
0
def test_read_4(get_fn):
    # Check streaming read followed by reading the 'rest'
    fn_dcd = get_fn('frame0.dcd')
    xyz_ref, box_lengths_ref, box_angles_ref = DCDTrajectoryFile(fn_dcd).read()

    reader = DCDTrajectoryFile(fn_dcd)
    for i in range(len(xyz_ref) // 2):
        xyz, box_lenths, box_angles = reader.read(1)
        eq(xyz_ref[np.newaxis, i], xyz)
        eq(box_lengths_ref[np.newaxis, i], box_lenths)
        eq(box_angles_ref[np.newaxis, i], box_angles)

    xyz_rest, box_rest, angles_rest = reader.read()
    i = len(xyz_ref) // 2
    assert eq(xyz_ref[i:], xyz_rest)
    assert eq(box_lengths_ref[i:], box_rest)
    assert eq(box_angles_ref[i:], angles_rest)

    assert len(xyz_ref) == i + len(xyz_rest)
Example #5
0
def test_read_3():
    "DCDReader: check streaming read of frames 1 at a time"
    xyz_ref, box_lengths_ref, box_angles_ref = DCDTrajectoryFile(fn_dcd).read()

    reader = DCDTrajectoryFile(fn_dcd)
    for i in range(len(xyz_ref)):
        xyz, box_lenths, box_angles = reader.read(1)
        eq(xyz_ref[np.newaxis, i], xyz)
        eq(box_lengths_ref[np.newaxis, i], box_lenths)
        eq(box_angles_ref[np.newaxis, i], box_angles)
Example #6
0
def test_read_3():
    "DCDReader: check streaming read of frames 1 at a time"
    xyz_ref, box_lengths_ref, box_angles_ref = DCDTrajectoryFile(fn_dcd).read()

    reader = DCDTrajectoryFile(fn_dcd)
    for i in range(len(xyz_ref)):
        xyz, box_lenths, box_angles = reader.read(1)
        eq(xyz_ref[np.newaxis, i], xyz)
        eq(box_lengths_ref[np.newaxis, i], box_lenths)
        eq(box_angles_ref[np.newaxis, i], box_angles)
Example #7
0
def test_read_4(get_fn):
    # Check streaming read followed by reading the 'rest'
    fn_dcd = get_fn('frame0.dcd')
    xyz_ref, box_lengths_ref, box_angles_ref = DCDTrajectoryFile(fn_dcd).read()

    reader = DCDTrajectoryFile(fn_dcd)
    for i in range(len(xyz_ref) // 2):
        xyz, box_lenths, box_angles = reader.read(1)
        eq(xyz_ref[np.newaxis, i], xyz)
        eq(box_lengths_ref[np.newaxis, i], box_lenths)
        eq(box_angles_ref[np.newaxis, i], box_angles)

    xyz_rest, box_rest, angles_rest = reader.read()
    i = len(xyz_ref) // 2
    assert eq(xyz_ref[i:], xyz_rest)
    assert eq(box_lengths_ref[i:], box_rest)
    assert eq(box_angles_ref[i:], angles_rest)

    assert len(xyz_ref) == i + len(xyz_rest)
Example #8
0
def test_read_3(get_fn):
    # Check streaming read of frames 1 at a time
    fn_dcd = get_fn('frame0.dcd')
    xyz_ref, box_lengths_ref, box_angles_ref = DCDTrajectoryFile(fn_dcd).read()

    reader = DCDTrajectoryFile(fn_dcd)
    for i in range(len(xyz_ref)):
        xyz, box_lenths, box_angles = reader.read(1)
        eq(xyz_ref[np.newaxis, i], xyz)
        eq(box_lengths_ref[np.newaxis, i], box_lenths)
        eq(box_angles_ref[np.newaxis, i], box_angles)
Example #9
0
def test_read_3(get_fn):
    # Check streaming read of frames 1 at a time
    fn_dcd = get_fn('frame0.dcd')
    xyz_ref, box_lengths_ref, box_angles_ref = DCDTrajectoryFile(fn_dcd).read()

    reader = DCDTrajectoryFile(fn_dcd)
    for i in range(len(xyz_ref)):
        xyz, box_lenths, box_angles = reader.read(1)
        eq(xyz_ref[np.newaxis, i], xyz)
        eq(box_lengths_ref[np.newaxis, i], box_lenths)
        eq(box_angles_ref[np.newaxis, i], box_angles)
Example #10
0
def test_write_2():
    xyz = np.array(np.random.randn(500, 10, 3), dtype=np.float32)
    box_lengths = 25 * np.ones((500, 3), dtype=np.float32)
    box_angles = 90 * np.ones((500, 3), dtype=np.float32)
    box_lengths[0, 0] = 10.0

    f = DCDTrajectoryFile(temp, "w")
    f.write(xyz, box_lengths, box_angles)
    f.close()

    f = DCDTrajectoryFile(temp)
    xyz2, box_lengths2, box_angles2 = f.read()
    f.close()

    yield lambda: eq(xyz, xyz2)
    yield lambda: eq(box_lengths, box_lengths2)
    yield lambda: eq(box_angles, box_angles2)
Example #11
0
def test_write_2():
    xyz = np.array(np.random.randn(500, 10, 3), dtype=np.float32)
    box_lengths = 25 * np.ones((500, 3), dtype=np.float32)
    box_angles = 90 * np.ones((500, 3), dtype=np.float32)
    box_lengths[0, 0] = 10.0

    f = DCDTrajectoryFile(temp, 'w')
    f.write(xyz, box_lengths, box_angles)
    f.close()

    f = DCDTrajectoryFile(temp)
    xyz2, box_lengths2, box_angles2 = f.read()
    f.close()

    yield lambda: eq(xyz, xyz2)
    yield lambda: eq(box_lengths, box_lengths2)
    yield lambda: eq(box_angles, box_angles2)
Example #12
0
def test_write_2(tmpdir):
    fn = '{}/x.dcd'.format(tmpdir)
    xyz = np.array(np.random.randn(500, 10, 3), dtype=np.float32)
    box_lengths = 25 * np.ones((500, 3), dtype=np.float32)
    box_angles = 90 * np.ones((500, 3), dtype=np.float32)
    box_lengths[0, 0] = 10.0

    f = DCDTrajectoryFile(fn, 'w')
    f.write(xyz, box_lengths, box_angles)
    f.close()

    f = DCDTrajectoryFile(fn)
    xyz2, box_lengths2, box_angles2 = f.read()
    f.close()

    assert eq(xyz, xyz2)
    assert eq(box_lengths, box_lengths2)
    assert eq(box_angles, box_angles2)
Example #13
0
def test_write_2(tmpdir):
    fn = '{}/x.dcd'.format(tmpdir)
    xyz = np.array(np.random.randn(500, 10, 3), dtype=np.float32)
    box_lengths = 25 * np.ones((500, 3), dtype=np.float32)
    box_angles = 90 * np.ones((500, 3), dtype=np.float32)
    box_lengths[0, 0] = 10.0

    f = DCDTrajectoryFile(fn, 'w')
    f.write(xyz, box_lengths, box_angles)
    f.close()

    f = DCDTrajectoryFile(fn)
    xyz2, box_lengths2, box_angles2 = f.read()
    f.close()

    assert eq(xyz, xyz2)
    assert eq(box_lengths, box_lengths2)
    assert eq(box_angles, box_angles2)
Example #14
0
def test_read_closed(get_fn):
    fn_dcd = get_fn('frame0.dcd')
    with pytest.raises(IOError):
        f = DCDTrajectoryFile(fn_dcd)
        f.close()
        f.read()
Example #15
0
def test_read_closed():
    f = DCDTrajectoryFile(fn_dcd)
    f.close()
    f.read()
Example #16
0
def test_read_closed(get_fn):
    fn_dcd = get_fn('frame0.dcd')
    with pytest.raises(IOError):
        f = DCDTrajectoryFile(fn_dcd)
        f.close()
        f.read()
Example #17
0
def test_read_closed():
    f = DCDTrajectoryFile(fn_dcd)
    f.close()
    f.read()
Example #18
0
class Dcd(TrjHandler):
    '''
    Read and write cell and positions from/to DCD file.

    Velocities, step and time are ignored.

    Currently mstools use mdtraj to support DCD file.
    Therefore, appending is not supported.
    '''

    def __init__(self, file, mode='r'):
        super().__init__()

        try:
            from mdtraj.formats import DCDTrajectoryFile
        except:
            raise ImportError('Currently mstools use mdtraj to parse DCD format. Cannot import mdtraj')

        if mode == 'r':
            self._dcd = DCDTrajectoryFile(file, mode='r')
        elif mode == 'w':
            self._dcd = DCDTrajectoryFile(file, mode='w')
        else:
            raise Exception('Appending not supported for DCD')

    def close(self):
        try:
            self._dcd.close()
        except:
            pass

    def get_info(self):
        self.n_frame = len(self._dcd)
        if self.n_frame == 0:
            raise Exception('Empty DCD file')
        positions, lengths, angles = self._dcd.read(1)
        _, self.n_atom, _ = positions.shape

        return self.n_atom, self.n_frame

    def read_frame(self, i_frame, frame):
        self._dcd.seek(i_frame)
        positions, box_lengths, box_angles = self._dcd.read(1)
        angle = box_angles[0]
        angle[np.abs(angle - 90) < 1E-4] = 90  # in case precision issue
        frame.positions = positions[0] / 10  # convert A to nm
        frame.cell.set_box([box_lengths[0] / 10, angle])  # convert A to nm

    def write_frame(self, frame, subset=None, **kwargs):
        '''
        Write a frame into the opened DCD file

        Parameters
        ----------
        frame : Frame
        subset : list of int, optional
        kwargs : dict
            Ignored
        '''
        if subset is None:
            positions = frame.positions
        else:
            positions = frame.positions[subset]
        self._dcd.write(positions * 10, frame.cell.lengths * 10, frame.cell.angles)  # convert nm to A