def write(self, filename, start=0, end=None): ''' Writes the cofasu out to the specified trajectory file. The neccessary topology data is taken from the first fasu - note that since not every fasu in a cofasu has to have the same topology, this needs some caution from the user. The optional start and end arguments specify the range of frames to write (from start to end-1 inclusive). >>> topfile = '../../../test/2ozq.pdb' >>> trjfile1 = '../../../test/2ozq.dcd' >>> trjfile2 = '../../../test/2ozq.xtc' >>> f1 = Fasu(topfile, trjfile1) >>> f2 = Fasu(topfile, trjfile2) >>> c = Cofasu([f1, f2]) >>> c.write('/tmp/cofasuwritetest.dcd', end=40) >>> f3 = Fasu(topfile, '/tmp/cofasuwritetest.dcd') >>> c3 = Cofasu(f3) >>> print c3.numframes() 40 ''' if end is None: end = self.numframes() else: end = min(self.numframes(),end) if rank == self.fasulist[0].owner: w = mda.Writer(filename, self.natoms) kw = {'dt':1.0} ts = Timestep(self.natoms, **kw) for ts_index in xrange(start,end): ts._pos=self.coords(ts_index) if rank == self.fasulist[0].owner: w.write(ts) if rank == self.fasulist[0].owner: w.close()
def test_different_precision(self, ref, tempdir): out = self.tmp_file('precision-test', ref, tempdir) # store more then 9 atoms to enable compression n_atoms = 40 with ref.writer(out, n_atoms, precision=5) as w: ts = Timestep(n_atoms=n_atoms) ts.positions = np.random.random(size=(n_atoms, 3)) w.write(ts) xtc = mda.lib.formats.libmdaxdr.XTCFile(out) frame = xtc.read() assert_equal(len(xtc), 1) assert_equal(xtc.n_atoms, n_atoms) assert_equal(frame.prec, 10.0**5)
def __init__(self): self.trajectory = None self.n_atoms = 5 self.n_frames = 5 # default for the numpy test functions self.prec = 6 self.container_format = False self.changing_dimensions = False self.first_frame = Timestep(self.n_atoms) self.first_frame.positions = np.arange( 3 * self.n_atoms).reshape(self.n_atoms, 3) self.first_frame.frame = 0 self.second_frame = self.first_frame.copy() self.second_frame.positions = 2 ** 1 * self.first_frame.positions self.second_frame.frame = 1 self.last_frame = self.first_frame.copy() self.last_frame.positions = 2 ** 4 * self.first_frame.positions self.last_frame.frame = self.n_frames - 1 # remember frames are 0 indexed self.jump_to_frame = self.first_frame.copy() self.jump_to_frame.positions = 2 ** 3 * self.first_frame.positions self.jump_to_frame.frame = 3 self.dimensions = np.array([81.1, 82.2, 83.3, 75, 80, 85], dtype=np.float32) self.dimensions_second_frame = np.array([82.1, 83.2, 84.3, 75.1, 80.1, 85.1], dtype=np.float32) self.volume = mda.lib.mdamath.box_volume(self.dimensions) self.time = 0 self.dt = 1 self.totaltime = 5
class BaseReference(object): def __init__(self): self.trajectory = None self.n_atoms = 5 self.n_frames = 5 # default for the numpy test functions self.prec = 6 self.container_format = False self.first_frame = Timestep(self.n_atoms) self.first_frame.positions = np.arange( 3 * self.n_atoms).reshape(self.n_atoms, 3) self.first_frame.frame = 0 self.second_frame = self.first_frame.copy() self.second_frame.positions = 2 ** 1 * self.first_frame.positions self.second_frame.frame = 1 self.last_frame = self.first_frame.copy() self.last_frame.positions = 2 ** 4 * self.first_frame.positions self.last_frame.frame = self.n_frames - 1 # remember frames are 0 indexed self.jump_to_frame = self.first_frame.copy() self.jump_to_frame.positions = 2 ** 3 * self.first_frame.positions self.jump_to_frame.frame = 3 self.dimensions = np.array([80, 80, 80, 60, 60, 90], dtype=np.float32) self.volume = mda.lib.mdamath.box_volume(self.dimensions) self.time = 0 self.dt = 1 self.totaltime = 5 def iter_ts(self, i): ts = self.first_frame.copy() ts.positions = 2**i * self.first_frame.positions ts.time = i ts.frame = i return ts
def _read_first_frame(self): self.n_atoms = 10 self.ts = Timestep(self.n_atoms) self.ts.frame = 0
def __init__(self): self.trajectory = None self.n_atoms = 5 self.n_frames = 5 # default for the numpy test functions self.prec = 6 self.container_format = False self.changing_dimensions = False # for testing auxiliary addition self.aux_lowf = AUX_XVG_LOWF # test auxiliary with lower frequency self.aux_lowf_dt = 2 # has steps at 0ps, 2ps, 4ps # representative data for each trajectory frame, assuming 'closest' option self.aux_lowf_data = [ [2**0], # frame 0 = 0ps = step 0 [np.nan], # frame 1 = 1ps = no step [2**1], # frame 2 = 2ps = step 1 [np.nan], # frame 3 = 3ps = no step [2**2], # frame 4 = 4ps = step 2 ] self.aux_lowf_frames_with_steps = [0, 2, 4] # trajectory frames with # corresponding auxiliary steps self.aux_highf = AUX_XVG_HIGHF # test auxiliary with higher frequency self.aux_highf_dt = 0.5 # has steps at 0, 0.5, 1, ... 3.5, 4ps self.aux_highf_data = [ [2**0], # frame 0 = 0ps = step 0 [2**2], # frame 1 = 1ps = step 2 [2**4], # frame 2 = 2ps = step 4 [2**6], # frame 3 = 3ps = step 6 [2**8], # frame 4 = 4ps = step 8 ] self.aux_highf_n_steps = 10 self.aux_highf_all_data = [[2**i] for i in range(self.aux_highf_n_steps)] self.aux_offset_by = 0.25 self.first_frame = Timestep(self.n_atoms) self.first_frame.positions = np.arange(3 * self.n_atoms).reshape( self.n_atoms, 3) self.first_frame.frame = 0 self.first_frame.aux.lowf = self.aux_lowf_data[0] self.first_frame.aux.highf = self.aux_highf_data[0] self.second_frame = self.first_frame.copy() self.second_frame.positions = 2**1 * self.first_frame.positions self.second_frame.frame = 1 self.second_frame.aux.lowf = self.aux_lowf_data[1] self.second_frame.aux.highf = self.aux_highf_data[1] self.last_frame = self.first_frame.copy() self.last_frame.positions = 2**4 * self.first_frame.positions self.last_frame.frame = self.n_frames - 1 self.last_frame.aux.lowf = self.aux_lowf_data[-1] self.last_frame.aux.highf = self.aux_highf_data[-1] # remember frames are 0 indexed self.jump_to_frame = self.first_frame.copy() self.jump_to_frame.positions = 2**3 * self.first_frame.positions self.jump_to_frame.frame = 3 self.jump_to_frame.aux.lowf = self.aux_lowf_data[3] self.jump_to_frame.aux.highf = self.aux_highf_data[3] self.dimensions = np.array([81.1, 82.2, 83.3, 75, 80, 85], dtype=np.float32) self.dimensions_second_frame = np.array( [82.1, 83.2, 84.3, 75.1, 80.1, 85.1], dtype=np.float32) self.volume = mda.lib.mdamath.box_volume(self.dimensions) self.time = 0 self.dt = 1 self.totaltime = 4
def __init__(self): self.trajectory = None self.n_atoms = 5 self.n_frames = 5 # default for the numpy test functions self.prec = 6 self.container_format = False self.changing_dimensions = False # for testing auxiliary addition self.aux_lowf = AUX_XVG_LOWF # test auxiliary with lower frequency self.aux_lowf_dt = 2 # has steps at 0ps, 2ps, 4ps # representative data for each trajectory frame, assuming 'closest' option self.aux_lowf_data = [[2 ** 0], # frame 0 = 0ps = step 0 [np.nan], # frame 1 = 1ps = no step [2 ** 1], # frame 2 = 2ps = step 1 [np.nan], # frame 3 = 3ps = no step [2 ** 2], # frame 4 = 4ps = step 2 ] self.aux_lowf_frames_with_steps = [0, 2, 4] # trajectory frames with # corresponding auxiliary steps self.aux_highf = AUX_XVG_HIGHF # test auxiliary with higher frequency self.aux_highf_dt = 0.5 # has steps at 0, 0.5, 1, ... 3.5, 4ps self.aux_highf_data = [[2 ** 0], # frame 0 = 0ps = step 0 [2 ** 2], # frame 1 = 1ps = step 2 [2 ** 4], # frame 2 = 2ps = step 4 [2 ** 6], # frame 3 = 3ps = step 6 [2 ** 8], # frame 4 = 4ps = step 8 ] self.aux_highf_n_steps = 10 self.aux_highf_all_data = [[2 ** i] for i in range(self.aux_highf_n_steps)] self.aux_offset_by = 0.25 self.first_frame = Timestep(self.n_atoms) self.first_frame.positions = np.arange( 3 * self.n_atoms).reshape(self.n_atoms, 3) self.first_frame.frame = 0 self.first_frame.aux.lowf = self.aux_lowf_data[0] self.first_frame.aux.highf = self.aux_highf_data[0] self.second_frame = self.first_frame.copy() self.second_frame.positions = 2 ** 1 * self.first_frame.positions self.second_frame.frame = 1 self.second_frame.aux.lowf = self.aux_lowf_data[1] self.second_frame.aux.highf = self.aux_highf_data[1] self.last_frame = self.first_frame.copy() self.last_frame.positions = 2 ** 4 * self.first_frame.positions self.last_frame.frame = self.n_frames - 1 self.last_frame.aux.lowf = self.aux_lowf_data[-1] self.last_frame.aux.highf = self.aux_highf_data[-1] # remember frames are 0 indexed self.jump_to_frame = self.first_frame.copy() self.jump_to_frame.positions = 2 ** 3 * self.first_frame.positions self.jump_to_frame.frame = 3 self.jump_to_frame.aux.lowf = self.aux_lowf_data[3] self.jump_to_frame.aux.highf = self.aux_highf_data[3] self.dimensions = np.array([81.1, 82.2, 83.3, 75, 80, 85], dtype=np.float32) self.dimensions_second_frame = np.array([82.1, 83.2, 84.3, 75.1, 80.1, 85.1], dtype=np.float32) self.volume = mda.lib.mdamath.box_volume(self.dimensions) self.time = 0 self.dt = 1 self.totaltime = 4