def setUp(self): self.eps = 1e-10 path = pkg_resources.resource_filename(__name__, 'data') + os.path.sep self.pdbfile = os.path.join(path, 'bpti_ca.pdb') self.trajfiles = [os.path.join(path, 'bpti_001-033.xtc'), os.path.join(path, 'bpti_034-066.xtc'), os.path.join(path, 'bpti_067-100.xtc') ] # Create random sets of files and frames to be retrieved from trajfiles n_members_set1 = 10 n_members_set2 = 20 set_1 = np.vstack((np.random.permutation([0, 2] * n_members_set1)[:n_members_set1], np.random.randint(32, size=n_members_set1))).T set_2 = np.vstack((np.random.permutation([0, 2] * n_members_set2)[:n_members_set2], np.random.randint(32, size=n_members_set2))).T self.sets = [set_1, set_2] self.subdir = tempfile.mkdtemp(suffix='save_trajs_test/') # Instantiate the reader self.reader = coor.source(self.trajfiles, top=self.pdbfile) self.reader.chunksize = 30 self.n_pass_files = [self.subdir + 'n_pass.set_%06u.xtc' % ii for ii in range(len(self.sets))] self.one_pass_files = [self.subdir + '1_pass.set_%06u.xtc' % ii for ii in range(len(self.sets))] self.traj_ref = save_traj_w_md_load_frame(self.reader, self.sets) self.strides = [2, 3, 5]
def test_reader_input_save_correct_frames_with_stride_in_memory(self): # With the inmemory option = True for stride in self.strides[:]: # Since none of the trajfiles have more than 30 frames, the frames have to be re-drawn for every stride sets = np.copy(self.sets) sets[0][:, 1] = np.random.randint(0, high=30 / stride, size=np.shape(sets[0])[0]) sets[1][:, 1] = np.random.randint(0, high=30 / stride, size=np.shape(sets[1])[0]) traj = save_traj(self.reader, sets, None, stride=stride, verbose=False) # Also the reference has to be re-drawn using the stride. For this, we use the re-scale the strided # frame-indexes to the unstrided value sets[0][:, 1] *= stride sets[1][:, 1] *= stride traj_ref = save_traj_w_md_load_frame(self.reader, sets) # Check for diffs (found_diff, errmsg) = compare_coords_md_trajectory_objects(traj, traj_ref, atom=0) self.assertFalse(found_diff, errmsg)
def test_save_SaveTrajs_multipass_with_stride(self): # With the inmemory option = True for stride in self.strides[:]: # Since none of the trajfiles have more than 30 frames, the frames have to be re-drawn for every stride sets = np.copy(self.sets) sets[0][:, 1] = np.random.randint(0, high=30 / stride, size=np.shape(sets[0])[0]) sets[1][:, 1] = np.random.randint(0, high=30 / stride, size=np.shape(sets[1])[0]) __ = save_trajs(self.reader, sets, outfiles=self.one_pass_files, inmemory=False, stride=stride) traj_1_pass = single_traj_from_n_files(self.one_pass_files, top=self.pdbfile) # Also the reference has to be re-drawn using the stride. For this, we use the re-scale the strided # frame-indexes to the unstrided value sets[0][:, 1] *= stride sets[1][:, 1] *= stride traj_ref = save_traj_w_md_load_frame(self.reader, sets) # Check for diffs (found_diff, errmsg) = compare_coords_md_trajectory_objects(traj_1_pass, traj_ref, atom=0) self.assertFalse(found_diff, errmsg)
def test_with_fragmented_reader(self): # intenionally group bpti dataset to a fake fragmented traj frag_traj = [[self.trajfiles[0], self.trajfiles[1]], self.trajfiles[2]] reader = coor.source(frag_traj, top=self.pdbfile) traj = save_traj(reader, self.sets, None) traj_ref = save_traj_w_md_load_frame(self.reader, self.sets) # Check for diffs (found_diff, errmsg) = compare_coords_md_trajectory_objects(traj, traj_ref, atom=0) self.assertFalse(found_diff, errmsg)
def test_with_fragmented_reader_chunksize_0(self): # intentionally group bpti dataset to a fake fragmented traj frag_traj = [[self.trajfiles[0], self.trajfiles[1]], self.trajfiles[2], self.trajfiles[2]] reader = coor.source(frag_traj, top=self.pdbfile, chunk_size=0) assert reader.chunksize == 0 traj = save_traj(reader, self.sets, None) traj_ref = save_traj_w_md_load_frame(self.reader, self.sets) # Check for diffs (found_diff, errmsg) = compare_coords_md_trajectory_objects(traj, traj_ref, atom=0) np.testing.assert_equal(traj.xyz, traj_ref.xyz) self.assertFalse(found_diff, errmsg)