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