def test_save_SaveTrajs_multipass(self): # Without the "inmemory" option, i.e. multipass __ = save_trajs(self.reader, self.sets, outfiles=self.n_pass_files) sets_frag = [] for i in range(len(self.sets)): sets_frag.append([]) for traj_ix, frame_ix in self.sets[i]: sets_frag[-1].append([0, traj_ix * 33 + frame_ix]) save_trajs(self.frag_reader, [np.array(sets_frag[0]), np.array(sets_frag[1])], outfiles=self.frag_pass_files) # Reload the object to memory traj_n_pass = single_traj_from_n_files(self.n_pass_files, top=self.pdbfile) traj_frag = single_traj_from_n_files(self.frag_pass_files, top=self.pdbfile) # Check for diffs (found_diff, errmsg) = compare_coords_md_trajectory_objects(traj_n_pass, self.traj_ref, atom=0) self.assertFalse(found_diff, errmsg) (found_diff, errmsg) = compare_coords_md_trajectory_objects(traj_frag, self.traj_ref, atom=0) self.assertFalse(found_diff, errmsg)
def test_save_SaveTrajs_IO(self): # Test that we're saving to disk alright flist = save_trajs(self.reader, self.sets, prefix=self.subdir) exist = True for f in flist: exist = exist and os.stat(f) self.assertTrue(exist, "Could not write to disk")
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_save_SaveDtrajs_IO(self): # Test that we're saving to disk alright flist = save_trajs(self.reader, self.sets, prefix=self.subdir) exist = True for f in flist: exist = exist and os.stat(f) self.assertTrue(exist, "Could not write to disk")
def test_save_SaveDtrajs_precision(self): # Test without the "inmemory" option __ = save_trajs(self.reader, self.sets, outfiles=self.n_pass_files) # Test with the inmemory option = True __ = save_trajs(self.reader, self.sets, outfiles=self.one_pass_files, inmemory=True) # Reload the objects to memory traj_n_pass = single_traj_from_n_files(self.n_pass_files, top=self.pdbfile) traj_1_pass = single_traj_from_n_files(self.one_pass_files, top=self.pdbfile) R = np.zeros((2, traj_1_pass.n_frames, 3)) atom_index = 0 # Artificially mess the the coordinates # traj_1_pass.xyz [0, atom_index, 2] +=1e-5 for ii, traj in enumerate([traj_n_pass, traj_1_pass]): R[ii, :] = traj.xyz[:, atom_index] # Compare the R-trajectories among themselves found_diff = False first_diff = None errmsg = '' for ii, iR in enumerate(R): # Norm of the difference vector norm_diff = np.sqrt(((iR - R) ** 2).sum(2)) # Any differences? if (norm_diff > self.eps).any(): first_diff = np.argwhere(norm_diff > self.eps)[0] found_diff = True errmsg = "Delta R_%u at frame %u: [%2.1e, %2.1e]" % (atom_index, first_diff[1], norm_diff[0, first_diff[1]], norm_diff[1, first_diff[1]]) errmsg2 = "\nThe position of atom %u differs by > %2.1e for the same frame between trajectories" % ( atom_index, self.eps) errmsg += errmsg2 break self.assertFalse(found_diff, errmsg)
def test_save_SaveTrajs_onepass(self): # With the inmemory option = True __ = save_trajs(self.reader, self.sets, outfiles=self.one_pass_files, inmemory=True) traj_1_pass = single_traj_from_n_files(self.one_pass_files, top=self.pdbfile) # Check for diffs (found_diff, errmsg) = compare_coords_md_trajectory_objects(traj_1_pass, self.traj_ref, atom=0) self.assertFalse(found_diff, errmsg)
def test_save_SaveTrajs_multipass(self): # Without the "inmemory" option, i.e. multipass __ = save_trajs(self.reader, self.sets, outfiles=self.n_pass_files) # Reload the object to memory traj_n_pass = single_traj_from_n_files(self.n_pass_files, top=self.pdbfile) # Check for diffs (found_diff, errmsg) = compare_coords_md_trajectory_objects(traj_n_pass, self.traj_ref, atom=0) self.assertFalse(found_diff, errmsg)
def test_out_of_bound_indexes(self): # assert ValueError with index info is raised for faulty input self.sets[0][:,1] *= 100000 with self.assertRaises(ValueError) as raised: save_trajs(self.reader, self.sets, outfiles=self.one_pass_files)