예제 #1
0
    def read_frame_data(self, filename, frame_num):
        """
        Returns pos, vel, box or raises error
        """
        # if self._last_filename != filename:
        # try:
        # self._file.close()
        # except AttributeError:
        # pass  # first time thru, self._file is None
        # self._file = TRRTrajectoryFile(filename)
        # f = self._file
        # do we need to reopen the TRR each time to avoid problems with the
        # fiel length changing?
        trr = TRRTrajectoryFile(filename)
        f = trr
        logger.debug("Reading file %s frame %d (of %d)", filename, frame_num,
                     len(f))
        # logger.debug("File length: %d", len(f))
        try:
            f.seek(offset=frame_num)
            data = f._read(n_frames=1, atom_indices=None, get_velocities=True)
        finally:
            trr.close()

        return data[0][0], data[5][0], data[3][0]
예제 #2
0
    def write_frame_to_file(self, filename, snapshot, mode='w'):
        if os.path.isfile(filename):
            # stop if we already have this file; could also happen because
            # of a weird behavior in a mover. You must remove the files if
            # you don't want them.
            raise RuntimeError("File " + str(filename) + " exists. " +
                               "Preventing overwrite.")
        # type control before passing things to Cython code
        xyz = np.asarray([snapshot.xyz], dtype=np.float32)
        time = np.asarray([0.0], dtype=np.float32)
        step = np.asarray([0], dtype=np.int32)
        box = np.asarray([snapshot.box_vectors], dtype=np.float32)
        lambd = np.asarray([0.0], dtype=np.float32)
        vel = np.asarray([snapshot.velocities], dtype=np.float32)

        try:
            trr = TRRTrajectoryFile(filename, mode)
            trr._write(xyz, time, step, box, lambd, vel)
        finally:
            trr.close()
            close_file_descriptors(filename)