def test_load_psf(): top = psf.load_psf(get_fn('ala_ala_ala.psf')) ref_top = md.load(get_fn('ala_ala_ala.pdb')).topology eq(top, ref_top) # Test the XPLOR psf format parsing top2 = psf.load_psf(get_fn('ala_ala_ala.xpsf')) eq(top2, ref_top)
def test_seek(): reference = TRRTrajectoryFile(get_fn("frame0.trr")).read()[0] with TRRTrajectoryFile(get_fn("frame0.trr")) as f: eq(len(f), len(reference)) eq(len(f.offsets), len(reference)) eq(f.tell(), 0) eq(f.read(1)[0][0], reference[0]) eq(f.tell(), 1) xyz = f.read(1)[0][0] eq(xyz, reference[1]) eq(f.tell(), 2) f.seek(0) eq(f.tell(), 0) xyz = f.read(1)[0][0] eq(f.tell(), 1) eq(xyz, reference[0]) f.seek(5) eq(f.read(1)[0][0], reference[5]) eq(f.tell(), 6) f.seek(-5, 1) eq(f.tell(), 1) eq(f.read(1)[0][0], reference[1])
def test_iterload_skip(): files = [ "frame0.nc", "frame0.h5", "frame0.xtc", "frame0.trr", "frame0.dcd", "frame0.binpos", "frame0.xyz", "frame0.lammpstrj", ] if not (on_win and on_py3): files.append("legacy_msmbuilder_trj0.lh5") err_msg = "failed for file %s with chunksize %i and skip %i" for file in files: for cs in [0, 1, 11, 100]: for skip in [0, 1, 20, 101]: print("testing file %s with skip=%i" % (file, skip)) t_ref = md.load(get_fn(file), top=get_fn("native.pdb")) t = functools.reduce( lambda a, b: a.join(b), md.iterload(get_fn(file), skip=skip, top=get_fn("native.pdb"), chunk=cs) ) eq(t_ref.xyz[skip:], t.xyz, err_msg=err_msg % (file, cs, skip)) eq(t_ref.time[skip:], t.time, err_msg=err_msg % (file, cs, skip)) eq(t_ref.topology, t.topology, err_msg=err_msg % (file, cs, skip))
def test_dihedral_pbc(): traj_uncorrected = md.load(get_fn('1am7_uncorrected.xtc'), top=get_fn('1am7_protein.pdb')) traj_corrected = md.load(get_fn('1am7_corrected.xtc'), top=get_fn('1am7_protein.pdb')) epsilon = 6E-3 ang1 = md.geometry.compute_phi(traj_uncorrected, opt=False, periodic=True)[1] ang2 = md.geometry.compute_phi(traj_corrected, opt=False, periodic=True)[1] assert np.max(np.abs(ang1 - ang2)) < epsilon ang1 = md.geometry.compute_phi(traj_uncorrected, opt=True, periodic=True)[1] ang2 = md.geometry.compute_phi(traj_corrected, opt=True, periodic=True)[1] assert np.max(np.abs(ang1 - ang2)) < epsilon ang1 = md.geometry.compute_phi(traj_uncorrected, opt=True, periodic=True)[1] ang2 = md.geometry.compute_phi(traj_corrected, opt=True, periodic=False)[1] assert np.max(np.abs(ang1 - ang2)) < epsilon ang1 = md.geometry.compute_phi(traj_uncorrected, opt=False, periodic=True)[1] ang2 = md.geometry.compute_phi(traj_corrected, opt=False, periodic=False)[1] assert np.max(np.abs(ang1 - ang2)) < epsilon ang1 = md.geometry.compute_phi(traj_uncorrected, opt=True, periodic=True)[1] ang2 = md.geometry.compute_phi(traj_corrected, opt=False, periodic=False)[1] assert np.max(np.abs(ang1 - ang2)) < epsilon ang1 = md.geometry.compute_phi(traj_uncorrected, opt=False, periodic=True)[1] ang2 = md.geometry.compute_phi(traj_corrected, opt=True, periodic=True)[1] assert np.max(np.abs(ang1 - ang2)) < epsilon ang1 = md.geometry.compute_phi(traj_uncorrected, opt=False, periodic=True)[1] ang2 = md.geometry.compute_phi(traj_corrected, opt=True, periodic=False)[1] assert np.max(np.abs(ang1 - ang2)) < epsilon
def test_seek(): reference = XTCTrajectoryFile(get_fn('frame0.xtc')).read()[0] with XTCTrajectoryFile(get_fn('frame0.xtc')) as f: eq(f.tell(), 0) eq(f.read(1)[0][0], reference[0]) eq(f.tell(), 1) xyz = f.read(1)[0][0] eq(xyz, reference[1]) eq(f.tell(), 2) f.seek(0) eq(f.tell(), 0) xyz = f.read(1)[0][0] eq(f.tell(), 1) eq(xyz, reference[0]) f.seek(5) eq(f.read(1)[0][0], reference[5]) eq(f.tell(), 6) f.seek(-5, 1) eq(f.tell(), 1) eq(f.read(1)[0][0], reference[1])
def test_kappa(): traj = md.load(get_fn("tip3p_300K_1ATM.xtc"), top=get_fn("tip3p_300K_1ATM.pdb")) kappa = md.geometry.isothermal_compressability_kappa_T(traj, temperature) reference = 2.05427E-10 * 1E5 # m^3 / J to 1 / bar. Data from gromacs. See above comment # 20% tolerance. assert abs((kappa - reference) / reference) < 2E-1, "Compressability tolerance not met!"
def test_load(): filenames = [ "frame0.xtc", "frame0.trr", "frame0.dcd", "frame0.binpos", "traj.h5", "frame0.nc", "traj.h5", "frame0.lammpstrj", "frame0.xyz", ] num_block = 3 for filename in filenames: t0 = md.load(get_fn(filename), top=nat, discard_overlapping_frames=True) t1 = md.load(get_fn(filename), top=nat, discard_overlapping_frames=False) t2 = md.load([get_fn(filename) for i in xrange(num_block)], top=nat, discard_overlapping_frames=False) t3 = md.load([get_fn(filename) for i in xrange(num_block)], top=nat, discard_overlapping_frames=True) # these don't actually overlap, so discard_overlapping_frames should # have no effect. the overlap is between the last frame of one and the # first frame of the next. yield lambda: eq(t0.n_frames, t1.n_frames) yield lambda: eq(t0.n_frames * num_block, t2.n_frames) yield lambda: eq(t3.n_frames, t2.n_frames)
def test_lprmsd_5(): t = md.load(get_fn('frame0.h5')) t1 = md.load(get_fn('frame0.h5')) r = md.rmsd(t, t1, 0) a = md.lprmsd(t, t1, 0, permute_groups=[[]], superpose=True) eq(a, r, decimal=3)
def test_seek(): reference = BINPOSTrajectoryFile(get_fn('frame0.binpos')).read() with BINPOSTrajectoryFile(get_fn('frame0.binpos')) as f: xyz = f.read(1)[0] eq(xyz, reference[0]) eq(f.tell(), 1) xyz = f.read(1)[0] eq(xyz, reference[1]) eq(f.tell(), 2) f.seek(0) eq(f.tell(), 0) xyz = f.read(1)[0] eq(f.tell(), 1) eq(xyz, reference[0]) f.seek(5) eq(f.read(1)[0], reference[5]) eq(f.tell(), 6) f.seek(-5, 1) eq(f.tell(), 1) xyz = f.read(1)[0] eq(xyz, reference[1]) f.seek(0, 2) eq(f.tell(), len(reference))
def deprecated_test_fah_core17_1(): from mdtraj.utils import six from mdtraj.testing import get_fn, eq filename = get_fn('frame0.xtc') tempdir = tempfile.mkdtemp() tar_filename = os.path.join(tempdir, "results-000.tar.bz2") archive = tarfile.open(tar_filename, mode='w:bz2') tar = tarfile.open(tar_filename, "w:bz2") tar.add(filename, arcname="positions.xtc") tar.close() shutil.copy(tar_filename, os.path.join(tempdir, "results-001.tar.bz2")) trj0 = md.load(get_fn("frame0.xtc"), top=get_fn("frame0.h5")) output_filename = os.path.join(tempdir, "traj.h5") fah.concatenate_core17(tempdir, trj0, output_filename) trj = md.load(output_filename) eq(trj.n_atoms, trj0.n_atoms) eq(trj.n_frames, trj0.n_frames * 2) shutil.copy(tar_filename, os.path.join(tempdir, "results-002.tar.bz2")) fah.concatenate_core17(tempdir, trj0, output_filename) # Should notice the new file and append it to the HDF file. trj = md.load(output_filename) eq(trj.n_atoms, trj0.n_atoms) eq(trj.n_frames, trj0.n_frames * 3)
def test_seek(): reference = XTCTrajectoryFile(get_fn('frame0.xtc')).read()[0] with XTCTrajectoryFile(get_fn('frame0.xtc')) as f: eq(f.tell(), 0) eq(f.read(1)[0][0], reference[0]) eq(f.tell(), 1) xyz = f.read(1)[0][0] eq(xyz, reference[1]) eq(f.tell(), 2) f.seek(0) eq(f.tell(), 0) xyz = f.read(1)[0][0] eq(f.tell(), 1) eq(xyz, reference[0]) f.seek(5) # offset array is going to be built assert len(f.offsets) == len(reference) eq(f.read(1)[0][0], reference[5]) eq(f.tell(), 6) f.seek(-5, 1) eq(f.tell(), 1) eq(f.read(1)[0][0], reference[1])
def test_seek_read_mode(): # Test the seek/tell capacity of the different TrajectoryFile objects in # read mode. Basically, we just seek around the files and read different # segments, keeping track of our location manually and checking with both # tell() and by checking that the right coordinates are actually returned files = [(md.formats.NetCDFTrajectoryFile, 'frame0.nc'), (md.formats.HDF5TrajectoryFile, 'frame0.h5'), (md.formats.XTCTrajectoryFile, 'frame0.xtc'), (md.formats.TRRTrajectoryFile, 'frame0.trr'), (md.formats.DCDTrajectoryFile, 'frame0.dcd'), (md.formats.MDCRDTrajectoryFile, 'frame0.mdcrd'), (md.formats.BINPOSTrajectoryFile, 'frame0.binpos'), (md.formats.LH5TrajectoryFile, 'legacy_msmbuilder_trj0.lh5'), (md.formats.DTRTrajectoryFile,'frame0.dtr/clickme.dtr'),] for a, b in files: point = 0 xyz = md.load(get_fn(b), top=get_fn('native.pdb')).xyz length = len(xyz) kwargs = {} if a is md.formats.MDCRDTrajectoryFile: kwargs = {'n_atoms': 22} with a(get_fn(b), **kwargs) as f: for i in range(100): r = np.random.rand() if r < 0.25: offset = np.random.randint(-5, 5) if 0 < point + offset < length: point += offset f.seek(offset, 1) else: f.seek(0) point = 0 if r < 0.5: offset = np.random.randint(1, 10) if point + offset < length: read = f.read(offset) if a not in [md.formats.BINPOSTrajectoryFile, md.formats.LH5TrajectoryFile]: read = read[0] readlength = len(read) read = mdtraj.utils.in_units_of(read, f.distance_unit, 'nanometers') eq(xyz[point:point+offset], read) point += readlength elif r < 0.75: offset = np.random.randint(low=-100, high=0) try: f.seek(offset, 2) point = length + offset except NotImplementedError: # not all of the *TrajectoryFiles currently support # seeking from the end, so we'll let this pass if they # say that they dont implement this. pass else: offset = np.random.randint(100) f.seek(offset, 0) point = offset eq(f.tell(), point)
def test_lprmsd_3(): # resolve rotation and permutation togetehr t1 = md.load(get_fn('alanine-dipeptide-explicit.pdb'))[0] t2 = md.load(get_fn('alanine-dipeptide-explicit.pdb'))[0] h2o_o_indices = [a.index for a in t1.topology.atoms if a.residue.name == 'HOH' and a.element.symbol == 'O'][0:20] h2o_h_indices = [a.index for a in t1.topology.atoms if a.residue.name == 'HOH' and a.element.symbol == 'H'][0:20] backbone_indices = [a.index for a in t1.topology.atoms if a.element.symbol in ['C', 'N']][:5] # scramble two groups of indices t2.xyz[:, random.permutation(h2o_o_indices)] = t2.xyz[:, h2o_o_indices] t2.xyz[:, random.permutation(h2o_h_indices)] = t2.xyz[:, h2o_h_indices] # offset the backbone indices slightly t2.xyz[:, backbone_indices] += 0.001 * random.randn(len(backbone_indices), 3) # rotate everything rot = rotation_matrix_from_quaternion(uniform_quaternion()) t2.xyz[0].dot(rot) print('raw distinguishable indices', backbone_indices) atom_indices = np.concatenate((h2o_o_indices, backbone_indices)) value = md.lprmsd(t2, t1, atom_indices=atom_indices, permute_groups=[h2o_o_indices]) t1.xyz[:, h2o_o_indices] += random.randn(len(h2o_o_indices), 3) print('final value', value) assert value[0] < 1e-2
def test_atom_indices_1(): atom_indices = np.arange(10) top = md.load(get_fn("native.pdb")) t0 = md.load(get_fn("frame0.mdcrd"), top=top) t1 = md.load(get_fn("frame0.mdcrd"), top=top, atom_indices=atom_indices) eq(t0.xyz[:, atom_indices], t1.xyz)
def test_read_1(): with MDCRDTrajectoryFile(get_fn("frame0.mdcrd"), n_atoms=22) as f: xyz, _ = f.read() with MDCRDTrajectoryFile(get_fn("frame0.mdcrd"), n_atoms=22) as f: xyz3, _ = f.read(stride=3) eq(xyz[::3], xyz3)
def test_atom_indices_0(): atom_indices = np.arange(10) with MDCRDTrajectoryFile(get_fn("frame0.mdcrd"), n_atoms=22) as f: xyz0, box0 = f.read(n_frames=1) with MDCRDTrajectoryFile(get_fn("frame0.mdcrd"), n_atoms=22) as f: xyz1, box1 = f.read(n_frames=1, atom_indices=atom_indices) eq(xyz0[:, atom_indices], xyz1)
def test_multiread(): reference = md.load(get_fn('frame0.xyz'), top=get_fn('native.pdb')) with XYZTrajectoryFile(get_fn('frame0.xyz')) as f: xyz0 = f.read(n_frames=1) xyz1 = f.read(n_frames=1) eq(reference.xyz[0], xyz0[0]/10) eq(reference.xyz[1], xyz1[0]/10)
def test_load_mol2(): trj = md.load(get_fn('imatinib.mol2')) ref_trj = md.load(get_fn('imatinib.pdb')) eq(trj.xyz, ref_trj.xyz) ref_top, ref_bonds = ref_trj.top.to_dataframe() top, bonds = trj.top.to_dataframe() eq(bonds, ref_bonds)
def test_load(): t = load(get_fn('test_hoomdxml.dcd'), top=get_fn('well-mixed.hoomdxml')) top = load(get_fn('well-mixed.hoomdxml')).topology eq(t.topology, top) eq(top.n_atoms, 6600) eq(top.n_bonds, 3200) eq(top.n_chains, 4000) eq(top.n_chains, top.n_residues) # hoomdxml assumes each chain is 1 residue
def test_read_0(): with MDCRDTrajectoryFile(get_fn("frame0.mdcrd"), n_atoms=22) as f: xyz, box = f.read() assert box is None with MDCRDTrajectoryFile(get_fn("frame0.mdcrdbox"), n_atoms=22) as f: xyz2, box = f.read() eq(box.shape, (1002, 3)) eq(xyz, xyz2)
def test_multiread(): reference = md.load(get_fn("frame0.mdcrd"), top=get_fn("native.pdb")) with MDCRDTrajectoryFile(get_fn("frame0.mdcrd"), n_atoms=22) as f: xyz0, box0 = f.read(n_frames=1) xyz1, box1 = f.read(n_frames=1) eq(reference.xyz[0], xyz0[0] / 10) eq(reference.xyz[1], xyz1[0] / 10)
def test_sasa_3(): traj_ref = np.loadtxt(get_fn('gmx_sasa.dat')) traj = md.load(get_fn('frame0.h5')) traj_sasa = md.geometry.shrake_rupley(traj, probe_radius=0.14, n_sphere_points = 960) # the algorithm used by gromacs' g_sas is slightly different than the one # used here, so the results are not exactly the same assert_array_almost_equal(traj_sasa, traj_ref, decimal=1)
def test_multiread(): reference = md.load(get_fn('frame0.lammpstrj'), top=get_fn('native.pdb')) with LAMMPSTrajectoryFile(get_fn('frame0.lammpstrj')) as f: xyz0, _, _ = f.read(n_frames=1) xyz1, _, _ = f.read(n_frames=1) eq(reference.xyz[0], xyz0[0]/10) eq(reference.xyz[1], xyz1[0]/10)
def test_compute_neighbors_3(): traj = md.load(get_fn('test_good.nc'), top=get_fn('test.parm7')) query_indices = traj.top.select('residue 1') cutoff = 1.0 value = md.compute_neighbors(traj, cutoff, query_indices) reference = compute_neighbors_reference(traj, cutoff, query_indices) for i in range(traj.n_frames): eq(value[i], reference[i])
def test_load(): t = load(get_fn("test_hoomdxml.dcd"), top=get_fn("well-mixed.hoomdxml")) top = load(get_fn("well-mixed.hoomdxml")).topology eq(t.topology, top) eq(top.n_atoms, 6600) eq(top.n_bonds, 3200) eq(top.n_chains, 4000) eq(top.n_chains, top.n_residues) # hoomdxml makes each chain 1 residue
def test_load_unknown_topology(): try: md.load(get_fn('frame0.dcd'), top=get_fn('frame0.dcd')) except IOError as e: # we want to make sure there's a nice error message than includes # a list of the supported topology formats. assert all(s in str(e) for s in ('.pdb', '.psf', '.prmtop')) else: assert False # fail
def test_chunk0_iterload(): filename = 'frame0.h5' trj0 = md.load(get_fn(filename)) for trj in md.iterload(get_fn(filename), chunk=0): pass eq(trj0.n_frames, trj.n_frames)
def test_read_stride(): with TRRTrajectoryFile(get_fn('frame0.trr')) as f: xyz, time, step, box, lambd = f.read() with TRRTrajectoryFile(get_fn('frame0.trr')) as f: xyz3, time3, step3, box3, lambd3 = f.read(stride=3) yield lambda: eq(xyz[::3], xyz3) yield lambda: eq(step[::3], step3) yield lambda: eq(box[::3], box3) yield lambda: eq(time[::3], time3)
def test_dihedral_pbc_fails2(): traj_uncorrected = md.load(get_fn("1am7_uncorrected.xtc"), top=get_fn("1am7_protein.pdb")) traj_corrected = md.load(get_fn("1am7_corrected.xtc"), top=get_fn("1am7_protein.pdb")) epsilon = 1e-2 ang1 = md.geometry.compute_phi(traj_uncorrected, opt=True, periodic=False)[1] ang2 = md.geometry.compute_phi(traj_corrected, opt=True, periodic=False)[1] assert np.max(np.abs(ang1 - ang2)) < epsilon
def test_0(): t1 = load(get_fn('native2.xml'), top=get_fn('native2.pdb')) t2 = load(get_fn('native2.pdb')) t1.center_coordinates() t2.center_coordinates() yield lambda: eq(t1.xyz, t2.xyz) yield lambda: eq(t1.unitcell_vectors, t2.unitcell_vectors)
def test_select_pairs_args(): traj = md.load(get_fn('tip3p_300K_1ATM.pdb')) assert len(traj.top.select_pairs(selection1='name O', selection2='name O')) == 258 * (258 - 1) // 2 assert (eq(traj.top.select_pairs(selection1="(name O) or (name =~ 'H.*')", selection2="(name O) or (name =~ 'H.*')").sort(), traj.top.select_pairs(selection1='all', selection2='all').sort())) assert (eq(traj.top.select_pairs(selection1="name O", selection2="name H1").sort(), traj.top.select_pairs(selection1="name H1", selection2="name O").sort())) assert (eq(traj.top.select_pairs(selection1=range(traj.n_atoms), selection2="(name O) or (name =~ 'H.*')").sort(), traj.top.select_pairs(selection1='all', selection2='all').sort()))
def test_shape_when_none(): t = md.load(get_fn('frame0.h5')) np.hstack((md.compute_phi(t)[1], md.compute_psi(t)[1], md.compute_chi1(t)[1], md.compute_chi2(t)[1], md.compute_chi3(t)[1], md.compute_chi1(t)[1], md.compute_omega(t)[1]))
def test_n_bonds(): t = md.load(get_fn('2EQQ.pdb')) for atom in t.top.atoms: if atom.element.symbol == 'H': assert atom.n_bonds == 1 elif atom.element.symbol == 'C': assert atom.n_bonds in [3, 4] elif atom.element.symbol == 'O': assert atom.n_bonds in [1, 2]
def test_read_after_close(): f = NetCDFTrajectoryFile(get_fn('mdcrd.nc')) yield lambda: eq(f.n_atoms, 223) yield lambda: eq(f.n_frames, 101) f.close() # should be an ioerror if you read a file that's closed assert_raises(IOError, lambda: f.read())
def test_load_multiframe(): from mdtraj.pdb.pdbstructure import PdbStructure with open(get_fn('multiframe.pdb')) as f: pdb = PdbStructure(f) yield lambda: eq(len(pdb.models), 2) yield lambda: eq(len(pdb.models[0].chains), 1) yield lambda: eq(len(pdb.models[0].chains[0].residues), 3) yield lambda: eq(ilen(pdb.models[0].iter_atoms()), 22) yield lambda: eq(len(pdb.models[1].chains), 1) yield lambda: eq(len(pdb.models[1].chains[0].residues), 3) yield lambda: eq(ilen(pdb.models[1].iter_atoms()), 22) t = load(get_fn('multiframe.pdb')) yield lambda: eq(t.n_frames, 2) yield lambda: eq(t.n_atoms, 22) yield lambda: eq(t.xyz[0], t.xyz[1])
def test_binpos(): t = md.load(get_fn('frame0.binpos'), top=nat) for e in [tmpfns['xtc'], tmpfns['dcd'], tmpfns['binpos'], tmpfns['trr'], tmpfns['h5'], tmpfns['pdb'], tmpfns['pdb.gz'], tmpfns['nc']]: def f(): t.save(e) t2 = md.load(e, top=nat) eq(t.xyz, t2.xyz, err_msg=e) eq(t.time, t2.time, err_msg=e) yield f
def test_box_load_save(): t = md.load(get_fn('native2.pdb')) # these four tempfile have extensions (dcd, xtc, trr, h5) that # should store the box information. lets make sure than through a load/save # cycle, the box information is preserved: for temp_fn in [tmpfns['xtc'], tmpfns['dcd'], tmpfns['trr'], tmpfns['h5']]: t.save(temp_fn) if temp_fn.endswith('.h5'): t2 = md.load(temp_fn) else: t2 = md.load(temp_fn, top=get_fn('native.pdb')) assert t.unitcell_vectors is not None yield lambda: eq(t.xyz, t2.xyz, decimal=3) yield lambda: eq(t.unitcell_vectors, t2.unitcell_vectors) yield lambda: eq(t.unitcell_angles, t2.unitcell_angles) yield lambda: eq(t.unitcell_lengths, t2.unitcell_lengths)
def test_segment_id(): top = md.load(get_fn('ala_ala_ala.pdb')).topology assert next( top.residues ).segment_id == "AAL", "Segment id is not being assigned correctly for ala_ala_ala.psf" df = top.to_dataframe()[0] assert len(df["segmentID"] == "AAL") == len( df ), "Segment id is not being assigned correctly to topology data frame ala_ala_ala.psf"
def test_read_stride_2(): "read xtc with stride with n_frames" iofile = io.loadh(get_fn('frame0.xtc.h5'), deferred=False) with XTCTrajectoryFile(fn_xtc) as f: xyz, time, step, box = f.read(n_frames=1000, stride=3) yield lambda: eq(xyz, iofile['xyz'][::3]) yield lambda: eq(step, iofile['step'][::3]) yield lambda: eq(box, iofile['box'][::3]) yield lambda: eq(time, iofile['time'][::3])
def test_read_chunk1(): with XTCTrajectoryFile(fn_xtc, 'r', chunk_size_multiplier=0.5) as f: xyz, time, step, box = f.read() iofile = io.loadh(get_fn('frame0.xtc.h5'), deferred=False) yield lambda: eq(xyz, iofile['xyz']) yield lambda: eq(step, iofile['step']) yield lambda: eq(box, iofile['box']) yield lambda: eq(time, iofile['time'])
def test_tell(): with XTCTrajectoryFile(get_fn('frame0.xtc')) as f: eq(f.tell(), 0) f.read(101) eq(f.tell(), 101) f.read(3) eq(f.tell(), 104)
def test_topology_pandas(): topology = md.load(get_fn('native.pdb')).topology atoms, bonds = topology.to_dataframe() topology2 = md.Topology.from_dataframe(atoms, bonds) eq(topology, topology2) topology3 = md.Topology.from_dataframe( atoms) # Make sure you default arguement of None works, see issue #774
def test_6(): t = md.load(get_fn('alanine-dipeptide-explicit.pdb')) a = md.compute_dssp(t, simplified=True) protein_residues = np.array([ set(a.name for a in r.atoms).issuperset(('C', 'N', 'O', 'CA')) for r in t.topology.residues ]) assert np.unique(a[:, protein_residues]) == "C" assert np.unique(a[:, np.logical_not(protein_residues)]) == 'NA'
def test_iterload_skip(): files = ['frame0.nc', 'frame0.h5', 'frame0.xtc', 'frame0.trr', 'frame0.dcd', 'frame0.binpos', 'legacy_msmbuilder_trj0.lh5', 'frame0.xyz', 'frame0.lammpstrj'] err_msg = "failed for file %s with chunksize %i and skip %i" for file in files: for cs in [0, 1, 11, 100]: for skip in [0, 1, 20, 101]: print("testing file %s with skip=%i" % (file, skip)) t_ref = md.load(get_fn(file), top=get_fn('native.pdb')) t = functools.reduce(lambda a, b: a.join(b), md.iterload(get_fn(file), skip=skip, top=get_fn('native.pdb'), chunk=cs)) eq(t_ref.xyz[skip:], t.xyz, err_msg=err_msg % (file, cs, skip)) eq(t_ref.time[skip:], t.time, err_msg=err_msg % (file, cs, skip)) eq(t_ref.topology, t.topology, err_msg=err_msg % (file, cs, skip))
def test_float_atom_indices_exception(): "Is an informative error message given when you supply floats for atom_indices?" top = md.load(get_fn('native.pdb')).topology for ext in md._FormatRegistry.loaders.keys(): try: fn = get_fn('frame0' + ext) except: continue try: md.load(fn, atom_indices=[0.5, 1.3], top=top) except ValueError as e: if six.PY3: assert e.args[0] == 'indices must be of an integer type. float64 is not an integer type' else: assert e.message == 'indices must be of an integer type. float64 is not an integer type' except Exception as e: raise
def test_array_vs_matrix(): top = md.load(get_fn('native.pdb')).topology xyz = np.random.randn(1, 22, 3) xyz_mat = np.matrix(xyz) t1 = md.Trajectory(xyz, top) t2 = md.Trajectory(xyz_mat, top) eq(t1.xyz, xyz) eq(t2.xyz, xyz)
def test_load(): tref = md.load(get_fn('4waters.pdb')) with GroTrajectoryFile(temp, 'w') as f: f.write(tref.xyz, tref.topology) t = md.load(temp) eq(t.xyz, tref.xyz, decimal=3) eq(list(t.top.atoms), list(tref.top.atoms))
def test_dtr(): t = md.load(get_fn('ala_dipeptide_trj/clickme.dtr'), top=get_fn('ala_dipeptide.pdb')) for e in [ tmpfns['xtc'], tmpfns['dcd'], tmpfns['binpos'], tmpfns['trr'], tmpfns['h5'], tmpfns['pdb'], tmpfns['pdb.gz'], tmpfns['nc'] ]: def f(): t.save(e) t2 = md.load(e, top=get_fn('ala_dipeptide.pdb')) # change decimal to 3 since the precision is different in different trajectory # format eq(t.xyz, t2.xyz, decimal=3, err_msg=e) #eq(t.time, t2.time, err_msg=e) yield f
def test_load_freesolv_gaffmol2_vs_sybylmol2_vs_obabelpdb(): with enter_temp_directory(): tar_filename = "freesolve_v0.3.tar.bz2" tar = tarfile.open(get_fn(tar_filename), mode="r:bz2") tar.extractall() tar.close() database = pickle.load(open("./v0.3/database.pickle")) for key in database: gaff_filename = "./v0.3/mol2files_gaff/%s.mol2" % key pdb_filename = "./v0.3/mol2files_gaff/%s.pdb" % key sybyl_filename = "./v0.3/mol2files_sybyl/%s.mol2" % key cmd = "obabel -imol2 %s -opdb > %s 2>/dev/null" % (sybyl_filename, pdb_filename) assert os.system(cmd) == 0 t_pdb = md.load(pdb_filename) t_gaff = md.load(gaff_filename) t_sybyl = md.load(sybyl_filename) eq(t_pdb.n_atoms, t_gaff.n_atoms) eq(t_pdb.n_atoms, t_sybyl.n_atoms) eq(t_pdb.n_frames, t_gaff.n_frames) eq(t_pdb.n_frames, t_gaff.n_frames) eq(t_pdb.xyz, t_gaff.xyz, decimal=4) eq(t_pdb.xyz, t_sybyl.xyz, decimal=4) top_pdb, bonds_pdb = t_pdb.top.to_dataframe() top_gaff, bonds_gaff = t_gaff.top.to_dataframe() top_sybyl, bonds_sybyl = t_sybyl.top.to_dataframe() eq(top_sybyl.name.values, top_pdb.name.values) # eq(top_gaff.name.values, top_sybyl.name.values) # THEY CAN HAVE DIFFERENT NAMES, so this isn't TRUE! def make_bonds_comparable(bond_array): """Create a bond connectivity matrix from a numpy array of atom pairs. Avoids having to compare the order in which bonds are listed.""" n_bonds = len(bond_array) data = np.ones(n_bonds) i = bond_array[:, 0] j = bond_array[:, 1] matrix = scipy.sparse.coo_matrix( (data, (i, j)), shape=(t_pdb.n_atoms, t_pdb.n_atoms)).toarray() return matrix + matrix.T # Symmetrize to account for (a ~ b) versus (b ~ a) bond_matrix_pdb = make_bonds_comparable(bonds_pdb) bond_matrix_gaff = make_bonds_comparable(bonds_gaff) bond_matrix_sybyl = make_bonds_comparable(bonds_sybyl) eq(bond_matrix_pdb, bond_matrix_gaff) eq(bond_matrix_pdb, bond_matrix_sybyl)
def test_rmsd_ref_ainds(): native = md.load(get_fn('native.pdb')) t1 = md.load(get_fn('traj.h5')) atom_indices = np.arange(10) dist1 = md.rmsd(t1, native, atom_indices=atom_indices, ref_atom_indices=atom_indices) bad_atom_indices = np.arange(10, 20) t2 = md.load(get_fn('traj.h5')) dist2 = md.rmsd(t2, native, atom_indices=atom_indices, ref_atom_indices=bad_atom_indices) assert np.all(dist2 > dist1)
def test_tell(): with BINPOSTrajectoryFile(get_fn('frame0.binpos')) as f: eq(f.tell(), 0) f.read(101) eq(f.tell(), 101) f.read(3) eq(f.tell(), 104)
def test_binpos(): t = md.load(get_fn('frame0.binpos'), top=nat) for e in [temp1, temp2, temp3, temp4, temp5, temp6, temp7]: def f(): t.save(e) t2 = md.load(e, top=nat) eq(t.xyz, t2.xyz, err_msg=e) eq(t.time, t2.time, err_msg=e) yield f
def test_read_2(): with BINPOSTrajectoryFile(fn_binpos, chunk_size_multiplier=10) as f: xyz = f.read() with DCDTrajectoryFile(fn_dcd) as f: xyz2 = f.read()[0] xyz3 = io.loadh(get_fn('frame0.binpos.h5'), 'xyz') yield lambda: eq(xyz[1:], xyz2) yield lambda: eq(xyz, xyz3)
def test_chain(): top = md.load(get_fn('bpti.pdb')).topology chain = top.chain(0) assert chain.n_residues == len(list(chain.residues)) atoms = list(chain.atoms) assert chain.n_atoms == len(atoms) for i in range(chain.n_atoms): assert atoms[i] == chain.atom(i)
def test_box(): t = md.load(get_fn('native.pdb')) yield lambda: eq(t.unitcell_vectors, None) yield lambda: eq(t.unitcell_lengths, None) yield lambda: eq(t.unitcell_angles, None) t.unitcell_vectors = np.array([[1, 0, 0], [0, 1, 0], [0, 0, 1]]).reshape(1, 3, 3) yield lambda: eq(np.array([1.0, 1.0, 1.0]), t.unitcell_lengths[0]) yield lambda: eq(np.array([90.0, 90.0, 90.0]), t.unitcell_angles[0])
def test_3nch_conect(): # This has conect entries that use all available digits, good failure case. t1 = load_pdb(get_fn('3nch.pdb.gz')) top, bonds = t1.top.to_dataframe() bonds = dict(((a, b), 1) for (a, b) in bonds) eq(bonds[19782, 19783], 1) # Check that last SO4 molecule has right bonds eq(bonds[19782, 19784], 1) # Check that last SO4 molecule has right bonds eq(bonds[19782, 19785], 1) # Check that last SO4 molecule has right bonds eq(bonds[19782, 19786], 1) # Check that last SO4 molecule has right bonds
def _run_amber_traj(trajname, ext_ref): # Test triclinic case where simple approach in Tuckerman text does not # always work traj = md.load(get_fn(trajname), top=get_fn('test.parm7')) distopt = md.compute_distances(traj, [[0, 9999]], opt=True) distslw = md.compute_distances(traj, [[0, 9999]], opt=False) dispopt = md.compute_displacements(traj, [[0, 9999]], opt=True) dispslw = md.compute_displacements(traj, [[0, 9999]], opt=False) eq(distopt, distslw, decimal=5) eq(dispopt, dispslw, decimal=5) assert_allclose(distopt.flatten(), ext_ref, atol=2e-5) # Make sure distances from displacements are the same eq(np.sqrt((dispopt.squeeze()**2).sum(axis=1)), distopt.squeeze()) eq(np.sqrt((dispslw.squeeze()**2).sum(axis=1)), distslw.squeeze()) eq(dispopt, dispslw, decimal=5)
def test_order_from_traj(): """Made a perfectly aligned monolayer, should have S2 = 1 """ traj = md.load(get_fn('alkane-monolayer.pdb')) indices = [ list(range(1900 + x, 1900 + x + 36)) for x in range(0, 64 * 36, 36) ] s2 = md.compute_nematic_order(traj, indices=indices) assert_allclose(1.0, s2)
def test_rmsd_cluster_fixed_k_kcenters(): expected_size = (2, 501) expected_k = 10 runhelper([ '--trajectories', get_fn('frame0.xtc'), get_fn('frame0.xtc'), '--topology', get_fn('native.pdb'), '--n-clusters', str(expected_k), '--atoms', '(name N or name C or name CA or name H or name O)', '--algorithm', 'kcenters' ], expected_size=expected_size, algorithm='kcenters', expected_k=expected_k)
def test_trajectory_rmsd(): t = md.load(get_fn('traj.h5')) for parallel in [True, False]: calculated = md.rmsd(t, t, 0, parallel=parallel) reference = np.zeros(t.n_frames) for i in range(t.n_frames): reference[i] = rmsd_qcp(t.xyz[0], t.xyz[i]) eq(calculated, reference, decimal=3)