def test_fit(self): traj = mdio.load("./data/md1_prod.Tc5b.x", "./data/Tc5b.top") trajnew = mdio.load("./data/md1_prod.fit_to_first.Tc5b.x", "./data/Tc5b.top") # make sure 0-th frame does not change frame0 = traj[0] frame0new = trajnew[0] assert (frame0.coords == frame0new.coords) == True print frame0[:10] print frame0new[:10] frame1 = traj[1] frame1new = trajnew[1] print frame1[:10] print frame1new[:10] assert (frame1.coords == frame1new.coords) == False # try do-fitting from Python # not right yet rmsd, mat, v1, v2 = frame1.rmsd(frame0, get_mvv=True) print rmsd frame1.trans_rot_trans(v1, mat, v2) #frame1.trans_rot_trans(v1, mat, Vec3(0, 0, 0)) #assert frame1[:10] == frame1new[:10] print frame1.rmsd_nofit(frame1new) print arr_rmsd(np.asarray(frame1.coords), np.asarray(frame1new.coords)) print frame1.rmsd(frame1new) assert frame1.rmsd(frame1new) < 1E-3 assert frame1new.rmsd(frame1, top=trajnew.top, mask="@CA") < 1E-3
def test_load_and_save_0(self): print "test_load_and_save" # need to load to FrameArray to save traj = mdio.load(filename="./data/md1_prod.Tc5b.x", top="./data/Tc5b.top")[:] trajiter = mdio.iterload(filename="./data/md1_prod.Tc5b.x", top="./data/Tc5b.top", chunk=100) print trajiter print traj.size indices = range(20, 30, 5) + [103, 78, 90, 82] print type(indices) print indices mdio.writetraj(filename="./output/test_io_saved_.x", traj=traj[:], top="./data/Tc5b.top", indices=indices, overwrite=True) # check frames traj2 = mdio.load(filename="./output/test_io_saved_.x", top="./data/Tc5b.top") print "test_load_and_save_0" print traj2.size print traj2.is_empty() print len(indices) assert traj2.size == len(indices)
def test_0(self): flist = glob("./data/Test_RemdTraj/rem.nc.*") trajlist = [] for fh in flist: topfile = "./data/Test_RemdTraj/ala2.99sb.mbondi2.parm7" trajlist.append(mdio.load(fh, topfile)) Tset = Set([]) f4922 = FrameArray() f4922.resize(trajlist[0].n_frames) print f4922.n_frames f4922.top = trajlist[0].top.copy() for traj in trajlist: for idx, frame in enumerate(traj): if frame.temperature == 492.2: f4922[idx] = frame print f4922.temperatures print f4922[0, 0, :] # make sure we reproduce cpptraj output cpptraj = mdio.load("./data/Test_RemdTraj/temp0.crd.492.20", topfile) for idx, framepy in enumerate(f4922): assert_almost_equal(framepy.coords, cpptraj[idx].coords) print "YES"
def test_fancy_save(self): traj = mdio.load("./data/md1_prod.Tc5b.x", "./data/Tc5b.top") traj[10:20].save("test_fancy_save_frame11_21.x", overwrite=True) fanew = mdio.load("./test_fancy_save_frame11_21.x", traj.top) for idx, f0 in enumerate(traj[10:20]): f0new = fanew[idx] assert_almost_equal(f0.coords, f0new.coords)
def test_0(self): traj = mdio.load("./data/md1_prod.Tc5b.x", "./data/Tc5b.top") frame0 = traj[0] frame0.save(filename="test_saveFrame.pdb", top=traj.top, overwrite=True) fnew = mdio.load("test_saveFrame.pdb", traj.top)[0] print frame0.coords[:20] print fnew.coords[:20] assert_almost_equal(frame0.coords, fnew.coords)
def test_blindload(self): top = mdio.load("./data/Tc5b.top") assert isinstance(top, Topology) == True traj = mdio.load(filename="./data/md1_prod.Tc5b.x", top="./data/Tc5b.top") print traj # TODO : add more classes here is_traj = (isinstance(traj, TrajReadOnly) or isinstance(traj, FrameArray)) assert is_traj == True
def test_1(self): traj = mdio.load("./data/md1_prod.Tc5b.x", "./data/Tc5b.top") trajnew = mdio.load("./data/md1_prod.fit_to_first.Tc5b.x", "./data/Tc5b.top") frame0 = traj[0] assert frame0[0, 2] == frame0.atoms(0)[2] assert_almost_equal(frame0[0, :], frame0.atoms(0)) print frame0[0, :] print frame0.atoms(0) print frame0[:, 2] framesub = frame0.get_subframe("@CA", traj.top) assert framesub.n_atoms == 20 print framesub[19, :]
def test_save_traj_from_file(self): Trajout().help() traj = mdio.load("./data/md1_prod.Tc5b.x", "./data/Tc5b.top")[:5] print traj.size mdio.writetraj(filename="test_0.binpos", traj=traj, top="./data/Tc5b.top", fmt="BINPOS", overwrite=True) savedtraj = mdio.load("./test_0.binpos", traj.top) print "test_0.binpos size = ", savedtraj.size print traj.size assert savedtraj.size == traj.size
def test_readpdb(self): print "test_readpdb +++++++++++++++++++++++++++++++" pdbtop = mdio.readparm("./test_0_after.pdb") assert pdbtop.n_atoms == 304 print pdbtop.n_atoms top2 = pdbtop.copy() top2.strip_atoms("!@CA") print top2.n_atoms assert top2.n_atoms == 20 # make sure that making Topology instance from pdb file is FINE traj0 = mdio.load("./data/md1_prod.Tc5b.x", "./data/Tc5b.top") traj1 = mdio.load("./data/md1_prod.Tc5b.x", "./test_0_after.pdb") assert traj0[0].coords == traj1[0].coords assert traj0[999].coords == traj1[999].coords
def main(): # set frame index IDX0 = 99 IDX1 = 98 # load traj traj = mdio.load("./data/md1_prod.Tc5b.x", "./data/Tc5b.top") # write pdb files for TMalign program so we can compare our results to TMalign # ./TMalign -A test_gdt_0.pdb -B test_gdt_1.pdb # turn off those if you don't like mdio.writetraj(filename="test_gdt_0.pdb", traj=traj[IDX0], top=traj.top, overwrite=True) mdio.writetraj(filename="test_gdt_1.pdb", traj=traj[IDX1], top=traj.top, overwrite=True) # do our calculation # option: # score = 'gdtscore', 'tmscore' or 'maxsub' # "@CA" : follow AMBER mask, change it if needed score = 'tmscore' print '%s = %s ' % ( score, calc_score(traj[IDX0], traj[IDX1], "@CA", traj.top, score=score) / 1000.) print calc_score(traj[IDX1], traj[IDX0], "@CA", traj.top, score=score) / 1000.
def test_0(self): traj = mdio.load("./data/md1_prod.Tc5b.x", "./data/Tc5b.top")[:] arr0 = traj[:, :, :] print arr0.shape arr0[0, 0, 0] = 105. print traj print traj[0, 0, 0]
def test_0(self): traj = mdio.load("./data/md1_prod.Tc5b.x", "./data/Tc5b.top")[:] traj2 = traj.get_frames(indices=(1, 3, 5, 4, 8), copy=True, update_top=True) print traj2 print traj2[0, 0, :]
def test_0(self): farray = FrameArray(filename="./data/tz2.truncoct.nc", top="./data/tz2.truncoct.parm7")[:2] fold = farray.copy() print "old file: ", fold[0, 0, :] act = allactions.Action_Image() ptrajin = """ center :2-11 image center familiar com :6 """ act.read_input(ptrajin, farray.top) act.process(farray.top) f2 = FrameArray() f2.top = farray.top.copy() act.do_action(0, farray) print farray[0, 0, :] print fold[0, 0, :] if file_exist("./CpptrajTest/Test_Image/image4.crd"): fnew = mdio.load("./CpptrajTest/Test_Image/image4.crd", "./data/tz2.truncoct.parm7") assert fnew.size == 2 # make sure that pycpptraj reproduce cpptraj outputo # TODO : not yet. double-check print fnew[0].same_coords_as(farray[0]) print fnew[0, 0, :] print fold[0].same_coords_as(farray[0]) print fnew[0].rmsd(farray[0])
def test_0(self): IDX0 = 99 IDX1 = 98 traj = mdio.load("./data/md1_prod.Tc5b.x", "./data/Tc5b.top") # write pdb files for TMalign program so we can compare our result to TMalign # ./TMalign -A test_gdt_0.pdb -B test_gdt_1.pdb mdio.writetraj(filename="test_gdt_0.pdb", traj=traj[IDX0], top=traj.top, overwrite=True) mdio.writetraj(filename="test_gdt_1.pdb", traj=traj[IDX1], top=traj.top, overwrite=True) # do our calculation # score = 'gdtscore', 'tmscore' or 'maxsub' score = 'tmscore' print '%s = %s ' % ( score, calc_score(traj[IDX0], traj[IDX1], "@CA", traj.top, score=score) / 1000.) print calc_score(traj[IDX1], traj[IDX0], "@CA", traj.top, score=score) / 1000. # calculate RMSD print "rmsd = ", traj[IDX0].rmsd(traj[IDX1])
def get_frames_same_T(): # create a list of all remd trajs flist = glob("../tests/data/Test_RemdTraj/rem.nc.*") # make a list of TrajReadOnly instances trajlist = [] for fh in flist: topfile = "../tests/data/Test_RemdTraj/ala2.99sb.mbondi2.parm7" # load trajectory and append to trajlist trajlist.append(mdio.load(fh, topfile)) # make FrameArray instance that holds 492.2 T frames # we need to reserve n_frames to hold the data f4922 = FrameArray(n_frames=trajlist[0].n_frames) assert f4922.n_frames == trajlist[0].n_frames f4922.top = trajlist[0].top.copy() # extract frames having T = 492.2 # use iteration for nested loops for traj in trajlist: for idx, frame in enumerate(traj): if frame.temperature == 492.2: # we don't use `append` method since we want to make sure # frames are in the order of simulation time f4922[idx] = frame # make sure f4922 only hold frames having T = 492.2 K arr0 = array( 'd', [492.2, 492.2, 492.2, 492.2, 492.2, 492.2, 492.2, 492.2, 492.2, 492.2]) assert f4922.temperatures == arr0 # make sure we reproduce cpptraj output cpptraj = mdio.load("../tests/data/Test_RemdTraj/temp0.crd.492.20", topfile) for idx, framepy in enumerate(f4922): assert_almost_equal(framepy.coords, cpptraj[idx].coords) print "rmsd between pycpptraj Frame and cpptraj Frame = %s " % framepy.rmsd( cpptraj[idx]) print f4922[5].coords[:10] print cpptraj[5].coords[:10] print "YES, we can reproduce cpptraj output"
def randions(): # get `traj` instance (FrameArray) traj = load(filename="./Test_RandomizeIons/adh206.tip3p.rst7.gz", top="./Test_RandomizeIons/adh206.ff10.tip3p.parm7.gz") # get 1st frame from `traj` frame0 = traj[0] # randomize ions for frame0 randomize_ions( frame0, traj.top, command="randomizeions @Na+ around :1-16 by 5.0 overlap 3.0", ) # make sure to reproduce cpptraj output savedframe = load(filename="./Test_RandomizeIons/random.crd.save", top="./Test_RandomizeIons/adh206.ff10.tip3p.parm7.gz")[0] assert frame0.rmsd(savedframe) < 1E-3
def test_1(self): traj = mdio.load("./data/md1_prod.Tc5b.x", "./data/Tc5b.top") frame0 = traj[0] print frame0[1:5, 2] print np.asarray(frame0.buffer3d[1:5, :]) frame0[1:5, 2] = range(100, 104) frame0[0, :] = range(3) print frame0.buffer3d[1:5, :] print np.asarray(frame0[1:5, :]) print list(frame0[1:5, :])
def test_load_and_save_0(self): traj = mdio.load(filename="./data/md1_prod.Tc5b.x", top="./data/Tc5b.top")[:110] indices = range(20, 30, 5) + [103, 78, 90, 82] print indices #for i in indices: # print traj[i] mdio.writetraj(filename="./output/test_io_saved_.x", traj=traj, top="./data/Tc5b.top", indices=indices, overwrite=True) # check frames traj2 = mdio.load(filename="./output/test_io_saved_.x", top="./data/Tc5b.top") # TODO : check error assert traj2.size == len(indices)
def test_0(self): # TODO : not right yet. traj = mdio.load("./data/md1_prod.Tc5b.x", "./data/Tc5b.top") # this command actually write Amber restart file #mdio.writetraj("test_1.pdb", traj[0], top=traj.top, fmt='CHARMM') print dir(Trajout) print Trajout.writeframe #with Trajout("test_1.pdb", fmt='PDBFILE', overwrite=True) as trajout: #with Trajout("test_1.x", fmt='MOL2FILE', overwrite=True) as trajout: with Trajout("test_1", fmt="PDBFILE", overwrite=True) as trajout: trajout.writeframe(frame=traj[0], top=traj.top)
def test_0(self): traj = mdio.load("./data/md1_prod.Tc5b.x", "./data/Tc5b.top") # FrameArray() fa = traj[:] fname = "test_savemethod.x" fname2 = "test_savemethod_2.x" fa.save(fname, overwrite=True) traj.save(fname2, overwrite=True) # load fanew = mdio.load(fname, fa.top) fanew2 = mdio.load(fname2, fa.top) assert fanew.size == fa.size == fanew2.size for idx, f0 in enumerate(fa): f0new = fanew[idx] f0new2 = fanew2[idx] assert_almost_equal(f0.coords, f0new.coords) assert_almost_equal(f0.coords, f0new2.coords)
def test_2(self): """test write FrameArray""" farray = FrameArray("data/md1_prod.Tc5b.x", "./data/Tc5b.top", indices=range(10)) writetraj("test_write_output.x", farray, farray.top, overwrite=True) writetraj("test_pdb_1.dummyext", farray[0], farray.top, overwrite=True, fmt='pdb') # test 'save' print farray farray.save("test_write_output_save_method.x", overwrite=True) # reproduce result? f0 = mdio.load("test_write_output.x", "./data/Tc5b.top") f1 = mdio.load("test_write_output_save_method.x", "./data/Tc5b.top") from numpy.testing import assert_almost_equal as assert_ae assert_ae(f0[:, :, :], f1[:, :, :])
def test_load_and_save_1(self): traj = mdio.load(filename="./data/md1_prod.Tc5b.x", top="./data/Tc5b.top") trajiter = mdio.iterload(filename="./data/md1_prod.Tc5b.x", top="./data/Tc5b.top", chunk=100) print trajiter indices = range(20, 30, 5) + [103, 78, 90, 82] mdio.writetraj(filename="./output/test_io_saved.pdb", traj=traj, top="./data/Tc5b.top", fmt='pdbfile', indices=indices, overwrite=True) # check frames traj = mdio.load(filename="./output/test_io_saved.pdb", top="./data/Tc5b.top") assert traj.size == len(indices) assert traj.top.n_atoms == 304
def test_0(self): trajcpp = mdio.load("./data/md1_prod.Tc5b.x", "./data/Tc5b.top") farray = trajcpp[:] print farray[0, 0, 0] # bugs: trajcpp[0, 0, 0] != farray[0, 0, 0] (must be equal) assert farray[0][0, 0] == trajcpp[0][0, 0] farray[0, 0, 0] = 100.10 print farray print farray[0, 0, 0] assert farray[0, 0, 0] == 100.10 farray[0, 0, :] = [100.10, 101.1, 102.1] assert_almost_equal(farray[0, 0, :], [100.10, 101.1, 102.1])
def test_0(self): traj = mdio.load("./data/md1_prod.Tc5b.x", "./data/Tc5b.top") frame0 = traj[0] assert frame0.has_box() == False box = frame0.get_box() print box assert frame0.get_box().btype == 'nobox' print box.bname bview = frame0.boxview bview[3:] = np.asarray([109.471220634, 109.471220634, 109.471220634]) print frame0.has_box() print frame0.get_box().btype assert frame0.get_box().btype == 'truncoct' assert frame0.get_box().bname == 'Trunc. Oct.' print frame0.get_box().help()
def test_0(self): traj = mdio.load("./data/md1_prod.Tc5b.x", "./data/Tc5b.top") # we could generate new traj.top from pdb file too #traj.top = Topology("./test_0_after.pdb") tm_0 = tm_score(traj[0], traj[1]) #print tm_0 #print tm_score(traj[0], traj[0]) # == 1. #print tm_score(traj[0], traj[1], mask="!@CA", top=traj.top) for idx, frame in enumerate(traj[490:501] + traj[-1:-10:-1]): score = tm_score(frame, traj[0], mask1="!:2-10@CA", top1=traj.top, mask2="!:2-10@CA", top2=traj.top) print "%s : %s" % (idx, score)
def test_0(self): traj = mdio.load("./data/md1_prod.Tc5b.x", "./data/Tc5b.top") frame0 = traj[0] #arr0 = np.asarray(frame0) print frame0[0, :] assert frame0.buffer3d[0, 0] == frame0[0, 0] assert frame0.buffer3d[0, 1] == frame0[0, 1] assert frame0.buffer3d[0, 2] == frame0[0, 2] assert frame0.buffer3d[1, 0] == frame0[1, 0] assert frame0.buffer3d[19, 0] == frame0[19, 0] frame0.buffer3d[19, 0] = 1000. # make sure changing buffer3d will update frame0.coords too assert frame0.buffer3d[19, 0] == frame0[19, 0] arr0 = np.asarray(frame0.buffer3d) print arr0.shape arr0[19] = [200, 300, 400.] assert frame0.buffer3d[19, 0] == frame0[19, 0] == arr0[19, 0] # try to strip atoms frame1 = frame0.copy() frame1.strip_atoms("!@CA", traj.top) print frame1.buffer3d.shape CA_2 = frame0.get_subframe("@CA", traj.top)[2, :] assert_almost_equal(CA_2, frame1[2, :]) assert_almost_equal(frame1.coords[6:9], frame1[2, :]) frame0[:] == frame0.coords print frame0.buffer3d[:, 2] print array('d', frame0.buffer3d[2:4, 0]) print array('d', frame0.buffer3d[2:4, 1]) #print CA_2 assert frame0.buffer1d.shape == (912, ) assert frame0.buffer3d.shape == (304, 3) assert frame0.buffer1d.is_c_contig() == True print array('d', frame0.buffer3d[0, :]) frame0.buffer3d[1:3, 0] = array('d', [1., 2.]) #assert frame0[1:3, 0] == array('d', frame0.buffer3d[1:3, 0]) print array('d', frame0.buffer3d[1:3, 0]) print frame0[1:3, 0] assert_almost_equal(frame0[1:3, 0], array('d', frame0.buffer3d[1:3, 0])) assert_almost_equal(frame0.buffer3d[1:3, 0], array('d', frame0.buffer3d[1:3, 0]))
def test_0(self): traj = mdio.load("./data/md1_prod.Tc5b.x", "./data/Tc5b.top") s = AtomSelect(traj=traj, top=traj.top, frameidx=500) # make sure to use `property` properly assert s.frameidx == 500 s.frameidx = 10 print s.selected_frame[:1] assert s.frameidx == s._frameidx == 10 s.frameidx = 100 assert s.frameidx == s._frameidx == 100 print s.selected_frame.coords[:10] print traj[100].coords[:10] assert_almost_equal(s.selected_frame.coords, traj[100].coords) s.frameidx = 999 for i in xrange(999): s.frameidx = i assert_almost_equal(s.selected_frame.coords, traj[i].coords)
def test_action(self): action_help() action_help("PairDist") print action_help("Dihedral") dslist = DataSetList() traj = mdio.load("./data/md1_prod.Tc5b.x", "./data/Tc5b.top") act = allactions.Action_Dihedral() act.read_input("dihedral :4@C :5@N :5@CA :5@C range360 mass ", current_top=traj.top, dslist=dslist) print traj.top act.process(current_top=traj.top) print act.process.__doc__ for i, frame in enumerate(traj): act.do_action(i, frame) d0 = cast_dataset(dslist[0]) print d0[:10]
def main(): traj = FrameArray("./data/md1_prod.Tc5b.x", "./data/Tc5b.top") top = traj.top frame = traj[0] # indexing frame print frame[top("@CA")] # using AtomMask instance atm = AtomMask("@CA") top.set_integer_mask(atm) print frame[atm] # using AtomSelect asl = AtomSelect() asl.top = traj.top asl.selected_frame = frame print asl.select("@CA") # timing # TODO : not reproduce cpptraj output from time import time t0 = time() ref = mdio.load("./data/Tc5b.crd", "./data/Tc5b.top")[0].get_subframe(":2-12@CA :12-16@H", top=traj.top) arrrmsd = np.empty(traj.size) for idx, frame in enumerate(traj): arr0 = frame[top(":2-12@CA :12-16@H")] framenew = Frame(arr0.shape[0]) framenew.set_from_crd(arr0.flatten()) arrrmsd[idx] = ref.rmsd(framenew) print "time = %s" % (time() - t0) print len(arrrmsd) print arrrmsd[:10]
def test_strip_atoms(self): traj = mdio.load("./data/md1_prod.Tc5b.x", "./data/Tc5b.top") frame0 = traj[0] frame1 = traj[1] frame2 = traj[2] frame3 = traj[3] frame1 = frame0.strip_atoms("!@CA", traj.top, copy=True) frame2 = Frame(frame0) print frame2.n_atoms print frame1.n_atoms print frame1 assert frame1.n_atoms == 20 assert frame0.n_atoms == 304 frame0.strip_atoms("!@CA", traj.top, copy=False) assert frame0.n_atoms == 20 _, mat, v1, v2 = frame2.rmsd(frame3, get_mvv=True) print mat, v1, v2 print frame2[:10] print mdio.writetraj("./test_0_before.pdb", traj=frame2, top=traj.top, overwrite=True) frame2.trans_rot_trans(v1, mat, v2) print frame2[:10] print mdio.writetraj("./test_0_afeter.pdb", traj=frame2, top=traj.top, overwrite=True) print Trajout().help()