def test_timecorr(): with tempfolder(): # center of mass trajin = """ parm {} trajin {} vector center v0 timecorr vec1 v0 """.format(tc5b_top, tc5b_trajin) state = pt.load_cpptraj_state(trajin) state.run() cpptraj_output = state.data traj = pt.iterload(tc5b_trajin, tc5b_top) dslist0 = pt.center_of_mass(traj) data = pt.timecorr(dslist0, dslist0) aa_eq(data, cpptraj_output[-1].values) # 2 vectors cm = """ parm {} trajin {} vector v0 :2 :5 vector v1 :3 :7 timecorr vec1 v0 vec2 v1 """.format(tc5b_top, tc5b_trajin) state = pt.load_cpptraj_state(cm) state.run() cpptraj_output = state.data dslist0 = pt.vector.vector(traj, [':2 :5', ':3 :7']) data = pt.timecorr(dslist0[0], dslist0[1]) aa_eq(data, cpptraj_output[-1].values) # corrplane cm = """ parm {} trajin {} vector v0 @2,@5,@9 corrplane vector v1 @3,@7,@20 corrplane timecorr vec1 v0 vec2 v1 """.format(tc5b_top, tc5b_trajin) state = pt.load_cpptraj_state(cm) state.run() cpptraj_output = state.data dslist0 = pt.vector.vector(traj, ['@2,@5,@9 corrplane', '@3,@7,@20 corrplane']) dslist1 = pt.vector.corrplane(traj, ['@2,@5,@9', '@3,@7,@20']) data0 = pt.timecorr(dslist0[0], dslist0[1]) data1 = pt.timecorr(dslist1[0], dslist1[1]) aa_eq(data0, cpptraj_output[-1].values) aa_eq(data1, cpptraj_output[-1].values)
def test_superpose_different_mask_with_mass(self): traj_on_disk = pt.iterload(fn('Tc5b.x'), fn('Tc5b.top')) traj_on_mem = pt.load(fn('Tc5b.x'), fn('Tc5b.top')) ref = pt.load(fn('tz2.nc'), fn('tz2.parm7'))[:1] mask = ':3-12@CA' ref_mask = ':1-10@CA' traj_on_disk.superpose(mask=mask, ref=ref, ref_mask=ref_mask) traj_on_mem.superpose(mask=mask, ref=ref, ref_mask=ref_mask) aa_eq(traj_on_disk.xyz, traj_on_mem.xyz) # cpptraj cm = """ parm {parm_tc5b} [Tc5b] trajin {tc5b} parm [Tc5b] createcrd mycrd0 parm {parm_tz2} [tz2] reference {tz2} 1 1 parm [tz2] align reference {mask} {refmask} createcrd mycrd """.format(parm_tc5b=tc5b_top, parm_tz2=fn('tz2.parm7'), tz2=fn('tz2.nc'), tc5b=tc5b_trajin, mask=mask, refmask=ref_mask) state = pt.load_cpptraj_state(cm) state.run() cm2 = """ parm {parm_tc5b} [Tc5b] trajin {tc5b} parm [Tc5b] createcrd mycrd0 parm {parm_tz2} [tz2] reference {tz2} 1 1 parm [tz2] rms reference {mask} {refmask} createcrd mycrd """.format(parm_tc5b=tc5b_top, parm_tz2=fn('tz2.parm7'), tz2=fn('tz2.nc'), tc5b=tc5b_trajin, mask=mask, refmask=ref_mask) state2 = pt.load_cpptraj_state(cm2) state2.run() aa_eq(state.data['mycrd'].xyz, state2.data['mycrd'].xyz) aa_eq(state.data['mycrd'].xyz, traj_on_disk.xyz) aa_eq(state.data['mycrd'].xyz, traj_on_mem.xyz)
def test_volmap(self): traj = pt.iterload("./data/tz2.ortho.nc", "./data/tz2.ortho.parm7")[:1] size = '' center = '' state = pt.load_cpptraj_state(txt.format(cm, size, center)) state.run() cpp_data = state.data[-1].values traj = traj.superpose(mask=':1-13').center(':1-13 mass origin') ds = pt.volmap(traj, mask=':WAT@O', grid_spacing=(0.5, 0.5, 0.5), buffer=2.0, centermask='!:1-13', radscale=1.36) aa_eq(cpp_data, ds) # assert self.assertRaises(AssertionError, lambda: pt.volmap(traj, mask=':WAT@O', grid_spacing='0.5 0.5 0.5')) self.assertRaises(AssertionError, lambda: pt.volmap(traj, mask=':WAT@O', grid_spacing=(0.5, 0.5))) self.assertRaises(ValueError, lambda: pt.volmap(traj, mask=':WAT@O', grid_spacing=(0.5, 0.5, 0.5), size='20 20 20')) # test size cm_no_buffer = cm.replace('buffer 2.0', '') state = pt.load_cpptraj_state(txt.format(cm_no_buffer, 'size 20,20,20', '')) state.run() cpp_data = state.data[-1].values ds = volmap(traj, mask=':WAT@O', grid_spacing=(0.5, 0.5, 0.5), size=(20, 20, 20), buffer=2.0, centermask='!:1-13', radscale=1.36) aa_eq(cpp_data, ds) # test center state = pt.load_cpptraj_state(txt.format(cm_no_buffer, 'size 20,20,20', 'center 0.5,0.5,0.5')) state.run() cpp_data = state.data[-1].values ds = volmap(traj, mask=':WAT@O', grid_spacing=(0.5, 0.5, 0.5), size=(20, 20, 20), center=(0.5, 0.5, 0.5), buffer=2.0, centermask='!:1-13', radscale=1.36) aa_eq(cpp_data, ds) # raise RuntimeError dry_traj = pt.iterload('data/tz2.nc', 'data/tz2.parm7') self.assertRaises(RuntimeError, lambda: pt.volmap(dry_traj, mask=':WAT@O', grid_spacing=(0.5, 0.5, 0.5)))
def test_0(self): # center of mass trajin = """ parm data/Tc5b.top trajin data/Tc5b.x vector center v0 timecorr vec1 v0 """ state = pt.load_cpptraj_state(trajin) state.run() cpptraj_output = state.data traj = pt.iterload("./data/Tc5b.x", "./data/Tc5b.top") dslist0 = pt.center_of_mass(traj) data = pt.timecorr(dslist0, dslist0) aa_eq(data, cpptraj_output[-1].values) # 2 vectors cm = """ parm data/Tc5b.top trajin data/Tc5b.x vector v0 :2 :5 vector v1 :3 :7 timecorr vec1 v0 vec2 v1 """ state = pt.load_cpptraj_state(cm) state.run() cpptraj_output = state.data dslist0 = pt.calc_vector(traj, [':2 :5', ':3 :7']) data = pt.timecorr(dslist0[0], dslist0[1]) aa_eq(data, cpptraj_output[-1].values) # corrplane cm = """ parm data/Tc5b.top trajin data/Tc5b.x vector v0 @2,@5,@9 corrplane vector v1 @3,@7,@20 corrplane timecorr vec1 v0 vec2 v1 """ state = pt.load_cpptraj_state(cm) state.run() cpptraj_output = state.data dslist0 = pt.calc_vector(traj, ['@2,@5,@9 corrplane', '@3,@7,@20 corrplane']) dslist1 = pt.vector.corrplane(traj, ['@2,@5,@9', '@3,@7,@20']) data0 = pt.timecorr(dslist0[0], dslist0[1]) data1 = pt.timecorr(dslist1[0], dslist1[1]) aa_eq(data0, cpptraj_output[-1].values) aa_eq(data1, cpptraj_output[-1].values)
def test_0(self): # center of mass trajin = """ parm data/Tc5b.top trajin data/Tc5b.x vector center v0 timecorr vec1 v0 """ state = pt.load_cpptraj_state(trajin) state.run() cpptraj_output = state.data traj = pt.iterload("./data/Tc5b.x", "./data/Tc5b.top") dslist0 = pt.center_of_mass(traj) data = pt.timecorr(dslist0, dslist0) aa_eq(data, cpptraj_output[-1].values) # 2 vectors cm = """ parm data/Tc5b.top trajin data/Tc5b.x vector v0 :2 :5 vector v1 :3 :7 timecorr vec1 v0 vec2 v1 """ state = pt.load_cpptraj_state(cm) state.run() cpptraj_output = state.data dslist0 = pt.calc_vector(traj, [':2 :5', ':3 :7']) data = pt.timecorr(dslist0[0], dslist0[1]) aa_eq(data, cpptraj_output[-1].values) # corrplane cm = """ parm data/Tc5b.top trajin data/Tc5b.x vector v0 @2,@5,@9 corrplane vector v1 @3,@7,@20 corrplane timecorr vec1 v0 vec2 v1 """ state = pt.load_cpptraj_state(cm) state.run() cpptraj_output = state.data dslist0 = pt.calc_vector(traj, ['@2,@5,@9 corrplane', '@3,@7,@20 corrplane']) dslist1 = pt.vector.corrplane(traj, ['@2,@5,@9', '@3,@7,@20']) data0 = pt.timecorr(dslist0[0], dslist0[1]) data1 = pt.timecorr(dslist1[0], dslist1[1]) aa_eq(data0, cpptraj_output[-1].values) aa_eq(data1, cpptraj_output[-1].values)
def test_pairdist(): traj = pt.iterload(fn("tz2.crd"), fn("tz2.parm7")) for (mask, delta) in [('*', 0.1), ('@CA', '0.2')]: data = pt.pairdist(traj, delta=delta, mask=mask, dtype='ndarray') data0 = data[0].T data1 = data[1].T txt = ''' parm {0} trajin {1} pairdist out test.out mask {2} delta {3} '''.format(fn('tz2.parm7'), fn('tz2.crd'), mask, delta) # take data, skip DatasetTopology state = pt.load_cpptraj_state(txt) with tempfolder(): state.run() cpp_data = state.data[1:].values cpp_distance, cpp_Pr = cpp_data[0].T _, cpp_std = cpp_data[1].T aa_eq(data0[0], cpp_distance) # distance aa_eq(data1[0], cpp_distance) # distance aa_eq(data0[1], cpp_Pr, decimal=2) # Pr aa_eq(data1[1], cpp_std, decimal=2) # std
def test_analyze_modes(): for mask in ['@CA', '@N,CA', '@CA,H']: command = ''' matrix mwcovar name tz2 {} diagmatrix tz2 name my_modes vecs 20 modes fluct name my_modes '''.format(mask) traj = pt.iterload(fn('tz2.nc'), fn('tz2.parm7')) # cpptraj state = pt.load_cpptraj_state(command, traj) # pt._verbose() state.run() pt._verbose(False) state.run() cpp_dict = state.data[1:].to_dict() c_dslist = state.data[1:] cpp_modes = c_dslist[1] # pytraj mat = pt.matrix.mwcovar(traj, mask) indices = traj.top.select(mask) dslist = pt.matrix.diagonalize(mat, n_vecs=20, scalar_type='mwcovar', mass=traj.top.mass[indices], dtype='dataset') evecs, evals = dslist[0].eigenvectors, dslist[0].eigenvalues aa_eq(cpp_dict['tz2'], mat) aa_eq(evals, cpp_modes.eigenvalues) aa_eq(evecs, cpp_modes.eigenvectors) with pytest.raises(AssertionError): # wrong mass dslist = pt.matrix.diagonalize( mat, n_vecs=20, scalar_type='mwcovar', mass=traj.top.mass[indices].tolist() + [1], dtype='dataset') with pytest.raises(AssertionError): # mass is None dslist = pt.matrix.diagonalize(mat, n_vecs=20, scalar_type='mwcovar', mass=None, dtype='dataset') # pt._verbose() fluct = pt.analyze_modes('fluct', evecs, evals, scalar_type='mwcovar', dtype='dataset') # pt._verbose(False) p_rms = fluct['FLUCT_00001[rms]'].values c_rms = c_dslist['FLUCT_00003[rms]'].values aa_eq(p_rms, c_rms)
def test_gist(): traj = pt.iterload(tz2_ortho_trajin, tz2_ortho_top, frame_slice=(0, 10)) traj.autoimage('origin') command = "doorder doeij refdens 0.033422885325 gridcntr 1.44 0.67 0.29 \ griddim 10 12 10 gridspacn 2.0" data = pt.all_actions.gist(traj, do_order=True, do_eij=True, reference_density=0.033422885325, grid_center=(1.44, 0.67, 0.29), grid_dim=(10, 12, 10), grid_spacing=2.0, dtype='cpptraj_dataset') state_command = """ parm {} trajin {} autoimage origin gist {} """.format(tz2_ortho_top, tz2_ortho_trajin, command) state = pt.load_cpptraj_state(state_command) with capture_stdout() as (out, _): state.run() data_dict = data.to_dict() data_state_dict = state.data[1:].to_dict() for key, state_key in zip(sorted(data_dict.keys()), sorted(data_state_dict.keys())): aa_eq(data_dict[key], data_state_dict[state_key])
def test_state(): print('cpptraj') state = pt.load_cpptraj_state(''' parm GAAC.parm7 trajin GAAC3.1000frames.nc 1 1000 {0}'''.format(cpp_mask)) state.run()
def test_pca_with_ref_with_different_mask_from_matrix(self): '''test_pca_with_ref_with_different_mask_from_matrix has reference. Use !@H= for ref_mask and use * for covariance matrix and projection from drroe: "You should be able to supply separate masks for fitting and creating the covariance matrix It is common enough for example to only perform rms-fitting on heavy atoms while still wanting all atoms in eigenvectors." pytraj: pt.pca(traj, mask=mask_matrix, n_vecs=2, ref=ref, ref_mask=mask_ref) ''' command_ref_provided = ''' parm {} trajin {} 1 3 reference {} # only perform fitting on heavy atoms rms reference !@H= # all atoms matrix covar name MyMatrix * createcrd CRD1 run # Step three. Diagonalize matrix. runanalysis diagmatrix MyMatrix vecs 2 name MyEvecs # Step four. Project saved fit coordinates along eigenvectors 1 and 2 # all atoms crdaction CRD1 projection evecs MyEvecs * out project.dat beg 1 end 2 '''.format(tz2_top, tz2_trajin, fn('tz2.rst7')) traj = pt.load(fn('tz2.nc'), fn('tz2.parm7'), frame_indices=range(0, 3)) traj_on_disk = pt.iterload(fn('tz2.nc'), fn('tz2.parm7'), frame_slice=[(0, 3)]) ref = pt.load(fn('tz2.rst7'), traj.top) state = pt.load_cpptraj_state(command_ref_provided) state.run() mask_ref = '!@H=' mask_matrix = '*' data = pt.pca(traj, mask=mask_matrix, n_vecs=2, ref=ref, ref_mask=mask_ref) data2 = pt.pca(traj_on_disk, mask=mask_matrix, n_vecs=2, ref=ref, ref_mask=mask_ref) cpp_data = state.data[-2:].values # use absolute values aa_eq(np.abs(data[0]), np.abs(cpp_data), decimal=3) aa_eq(np.abs(data2[0]), np.abs(cpp_data), decimal=3)
def test_state(): print('cpptraj') state = pt.load_cpptraj_state(''' parm GAAC.parm7 trajin GAAC3.1000frames.nc 1 1000 {0}'''.format(cpp_mask)) state.run()
def test_symmrmsd(self): tyr_trajin = cpptraj_test_dir + '/Test_SymmRmsd/TYR.nc' tn = cpptraj_test_dir + '/Test_SymmRmsd/TYR.parm7' saved_traj = pt.iterload( cpptraj_test_dir + '/Test_SymmRmsd/TYR.remap.crd.save', tn) traj_on_disk = pt.iterload(tyr_trajin, tn) traj_on_mem = pt.load(tyr_trajin, tn) aa_eq(traj_on_disk.xyz, traj_on_mem.xyz) data = pt.symmrmsd(traj_on_mem, remap=True) cm = """ parm {} trajin {} symmrmsd first remap myrmsd createcrd mycrd """.format(tn, tyr_trajin) state = pt.load_cpptraj_state(cm) with tempfolder(): state.run() # rmsd aa_eq(state.data['myrmsd'].values, data) # coordinates aa_eq(state.data['mycrd'].xyz, saved_traj.xyz, decimal=3) aa_eq(state.data['mycrd'].xyz, traj_on_mem.xyz, decimal=3)
def test_cluster_kmeans(tmpdir): kmeans = cluster.kmeans traj = pt.iterload(tz2_trajin, tz2_top) cm = 'cluster kmeans clusters 10 @CA rms randompoint kseed 2 {0} noinfo' for sieve in [2, 3, 4]: sieve_str = "sieve {0} sieveseed 12".format(sieve) command = cm.format( sieve_str) + ' cpopvtime cpptraj_cpopvtime.agr normframe' state = pt.load_cpptraj_state(command, traj) state.run() data = kmeans(traj, n_clusters=10, kseed=2, random_point=True, metric='rms', mask='@CA', options=sieve_str + ' cpopvtime pytraj_cpopvtime.agr normframe') assert data.n_frames == traj.n_frames assert os.path.exists('cpptraj_cpopvtime.agr') # Make sure pytraj could write data file. assert os.path.exists('pytraj_cpopvtime.agr')
def test_volmap(self): traj = pt.iterload(fn('tz2.ortho.nc'), fn('tz2.ortho.parm7'))[:1] size = '' center = '' state = pt.load_cpptraj_state( txt.format(fn('tz2.ortho.parm7'), fn('tz2.ortho.nc'), cm, size, center)) state.run() cpp_data = state.data[-2].values # last one is totalvolume traj = traj.superpose(mask=':1-13').center(':1-13 mass origin') ds = pt.volmap(traj, mask=':WAT@O', grid_spacing=(0.5, 0.5, 0.5), buffer=2.0, centermask='!:1-13', radscale=1.36) aa_eq(cpp_data, ds) # assert self.assertRaises( AssertionError, lambda: pt.volmap(traj, mask=':WAT@O', grid_spacing='0.5 0.5 0.5')) self.assertRaises( AssertionError, lambda: pt.volmap(traj, mask=':WAT@O', grid_spacing=(0.5, 0.5))) self.assertRaises( ValueError, lambda: pt.volmap(traj, mask=':WAT@O', grid_spacing=(0.5, 0.5, 0.5), size='20 20 20'))
def testTwoTrajTypes(self): '''test different metrics with different traj objects ''' funclist = [pt.iterload, pt.load] txt = ''' parm {} trajin {} rms2d @CA metric_holder rmsout tmp.out '''.format(tc5b_top, tc5b_trajin) for func in funclist: traj = func(tc5b_trajin, tc5b_top) for metric in ['rms', 'nofit', 'dme']: d0 = pt.pairwise_rmsd(traj(mask='@CA'), metric=metric) d1 = pt.pairwise_rmsd(traj, mask='@CA', metric=metric) d2 = pt.pairwise_rmsd(traj(), mask='@CA', metric=metric) txt0 = txt.replace('metric_holder', metric) state = pt.load_cpptraj_state(txt0) with tempfolder(): state.run() d3 = state.data[-1].values aa_eq(d0, d1) aa_eq(d0, d2) aa_eq(d0, d3)
def test_closest_compared_to_cpptraj(self): trajin = fn('tz2.ortho.nc') parm = fn('tz2.ortho.parm7') traj = pt.iterload(trajin, parm, frame_slice=[ (0, 2), ]) state = pt.load_cpptraj_state(''' parm {} trajin {} 1 2 autoimage closest 100 :1-13 createcrd mycrd'''.format(parm, trajin)) state.run() fi, top = pt.closest(traj(autoimage=True), mask=':1-13', n_solvents=100) xyz = pt.get_coordinates(fi) t0 = pt.Trajectory(xyz=xyz, top=top) aa_eq(state.data['mycrd'].xyz, t0.xyz) # dtype = 'trajectory' t1 = pt.closest(traj(autoimage=True), mask=':1-13', n_solvents=100, dtype='trajectory') aa_eq(state.data['mycrd'].xyz, t1.xyz)
def test_projection_with_None_average_coord(self): cm = ''' matrix name correlmat {scalar_type} @CA diagmatrix correlmat name evecs vecs 5 run projection P1 modes evecs beg 1 end 2 @CA ''' scalar_type = 'covar' cm2 = cm.format(scalar_type=scalar_type) traj = pt.iterload(fn('tz2.nc'), fn('tz2.parm7')) state = pt.load_cpptraj_state(cm2, traj) state.run() mat = pt.matrix.covar(traj, '@CA') eigenvalues, eigenvectors = pt.matrix.diagonalize(mat, 2, dtype='tuple') data = pt.all_actions.projection(traj, '@CA', eigenvalues, eigenvectors, scalar_type=scalar_type) aa_eq(np.abs(state.data['Mode1'].values), np.abs(data[0])) aa_eq(np.abs(state.data['Mode2'].values), np.abs(data[1])) assert data.shape == (2, traj.n_frames)
def test_hbonds_from_pdb(self): traj = pt.load(fn('1L2Y.pdb')) hb = pt.search_hbonds(traj) state = pt.load_cpptraj_state(''' parm {pdb} trajin {pdb} hbond series '''.format(pdb=fn('1L2Y.pdb'))) state.run() for data_p, data_cpp in zip(hb.data, state.data[1:]): assert len( data_p) == traj.n_frames == 38, 'size of dataset must be 38' aa_eq(data_p, data_cpp.values) # make sure distances are smaller than cutoff distance_cutoff = 2.5 angle_cutoff = 135. hb = pt.search_hbonds(traj) distances = pt.distance(traj, hb.get_amber_mask()[0]) angles = pt.angles(traj, hb.get_amber_mask()[1]) dist_indices = np.where(distances > distance_cutoff) angle_indices = np.where(angles < angle_cutoff) saved_donor_acceptors = [ 'ASP9_OD2-ARG16_NH1-HH12', 'ASP9_OD2-ARG16_NH2-HH22', 'ASP9_OD2-ARG16_NE-HE', 'ASP9_OD2-ARG16_NH2-HH21', 'ASP9_OD2-ARG16_NH1-HH11' ] donor_acceptors = pt.search_hbonds(traj, ':9,16').donor_acceptor assert saved_donor_acceptors == donor_acceptors, 'saved_donor_acceptors' aa_eq(hb.total_solute_hbonds(), hb.data['total_solute_hbonds'])
def test_distance_rmsd(): traj = pt.iterload(tz2_trajin, tz2_top) txt = ''' parm {} trajin {} drmsd drms_nofit out drmsd.dat rms rms_nofit out drmsd.dat nofit rms rms_fit out drmsd.dat drmsd drms_fit out drmsd.dat '''.format(tz2_top, tz2_trajin) state = pt.load_cpptraj_state(txt) with tempfolder(): state.run() cpp_data = state.data[1:] # distance_rmsd data_drmsd = pt.distance_rmsd(traj) aa_eq(data_drmsd, cpp_data[0]) aa_eq(pt.drmsd(traj), cpp_data[0]) # rms_nofit aa_eq(cpp_data[1], pt.rmsd(traj, nofit=True)) # rms_fit aa_eq(cpp_data[2], pt.rmsd(traj, nofit=False)) # drmsd with rmsfit aa_eq(cpp_data[3], pt.distance_rmsd(traj(rmsfit=0), ref=traj[0]))
def test_makestructure_with_reference(self): tz2_parm7 = cpptraj_test_dir + '/tz2.parm7' ref_rst7 = cpptraj_test_dir + '/tz2.rst7' trajin_rst7 = cpptraj_test_dir + '/Test_MakeStructure/pp2.rst7.save' # cpptraj command = """ parm {} reference {} trajin {} makestructure "ref:1-13:tz2.rst7" rmsd reference createcrd mycrd """.format(tz2_parm7, ref_rst7, trajin_rst7) state = pt.load_cpptraj_state(command) state.run() cpp_traj = state.data['mycrd'] # pytraj traj = pt.load(trajin_rst7, top=tz2_parm7) ref = pt.load(ref_rst7, top=tz2_parm7) pt.make_structure(traj, "ref:1-13:1-13", ref=ref) pt.rmsd(traj, ref=ref) aa_eq(traj.xyz, cpp_traj.xyz)
def test_iterload_and_load_remd(): # iterload_remd traj = pt.iterload_remd(fn("Test_RemdTraj/rem.nc.000"), fn("Test_RemdTraj/ala2.99sb.mbondi2.parm7"), T=300.0) for frame in traj: assert frame.temperature == 300.0, 'frame temperature must be 300.0 K' dist = pt.distance(traj, '@10 @20') trajin_text = ''' parm {} trajin {} remdtraj remdtrajtemp 300. distance @10 @20 '''.format(fn('Test_RemdTraj/ala2.99sb.mbondi2.parm7'), fn('Test_RemdTraj/rem.nc.000 ')) state = pt.load_cpptraj_state(trajin_text) state.run() aa_eq(dist, state.data[-1].values) # load_remd traj2 = pt.load_remd(fn("Test_RemdTraj/rem.nc.000"), fn("Test_RemdTraj/ala2.99sb.mbondi2.parm7"), T=300.0) aa_eq(traj.xyz, traj2.xyz) # with Topology traj2 = pt.iterload_remd(fn("Test_RemdTraj/rem.nc.000"), top=traj.top, T=300.0) aa_eq(traj.xyz, traj2.xyz)
def test_distance_to_point_or_reference(self): tz2_pdb = os.path.join(cpptraj_test_dir, 'tz2.pdb') traj = pt.iterload(fn('tz2.nc'), fn('tz2.parm7')) ref_traj = pt.load(tz2_pdb) ref = ref_traj[0] ref.top = ref_traj.top cmd = """ parm {parm} reference {reference} name myref trajin {trajin} distance EndToEnd :1 :13 distance ToRef @1 @1 reference distance Point :1 point 0.0 0.0 0.0 """.format(parm=fn("tz2.parm7"), reference=tz2_pdb, trajin=fn("tz2.nc")) state = pt.load_cpptraj_state(cmd) state.run() # ensure same reference aa_eq(ref.xyz, state.data.to_dict()['myref:1'], decimal=3) dist_point = pt.distance_to_point(traj, ':1', point=[0., 0., 0.]) aa_eq(dist_point, state.data['Point']) dist_ref = pt.distance_to_reference(traj, '@1 @1', ref=ref) aa_eq(dist_ref, state.data['ToRef'].values)
def test_crdframes(self): '''test crdframes in cpptraj ''' max_frames = 50 traj = pt.iterload('data/tz2.nc', 'data/tz2.parm7', frame_slice=(0, max_frames, 2)) state = pt.load_cpptraj_state(''' parm {0} trajin {1} 1 {2} 2 trajin {1} 1 {2} 2 loadtraj name traj crdaction traj rms crdframes 1,10 crdaction traj rms crdframes 1,30,2 '''.format(traj.top.filename, traj.filename, max_frames)) state.run() rmsd_0 = pt.rmsd(traj, ref=0, frame_indices=range(10)) rmsd_crdframes = state.data[2].values aa_eq(rmsd_0, rmsd_crdframes) traj2 = traj.copy() assert traj2.n_frames == traj.n_frames, 'must have the same n_frames' traj2._load(traj.filename, frame_slice=(0, max_frames, 2)) assert traj2.n_frames == 2 * traj.n_frames, 'n_frames must be doubled after reload' rmsd_1 = pt.rmsd(traj2, ref=0, frame_indices=range(0, 30, 2)) rmsd_crdframes = state.data[3].values aa_eq(rmsd_1, rmsd_crdframes)
def test_crdframes(self): '''test crdframes in cpptraj ''' max_frames = 50 traj = pt.iterload(fn('tz2.nc'), fn('tz2.parm7'), frame_slice=(0, max_frames, 2)) state = pt.load_cpptraj_state(''' parm {0} trajin {1} 1 {2} 2 trajin {1} 1 {2} 2 loadtraj name traj crdaction traj rms crdframes 1,10 crdaction traj rms crdframes 1,30,2 '''.format(traj.top.filename, traj.filename, max_frames)) state.run() rmsd_0 = pt.rmsd(traj, ref=0, frame_indices=range(10)) rmsd_crdframes = state.data[2].values aa_eq(rmsd_0, rmsd_crdframes) traj2 = traj.copy() assert traj2.n_frames == traj.n_frames, 'must have the same n_frames' traj2._load(traj.filename, frame_slice=(0, max_frames, 2)) assert traj2.n_frames == 2 * traj.n_frames, 'n_frames must be doubled after reload' rmsd_1 = pt.rmsd(traj2, ref=0, frame_indices=range(0, 30, 2)) rmsd_crdframes = state.data[3].values aa_eq(rmsd_1, rmsd_crdframes)
def test_projection_for_pca(self): traj = pt.load("./data/tz2.nc", "./data/tz2.parm7") state = pt.load_cpptraj_state(command) state.run() cpp_modes = state.data['MyEvecs'] cpp_arr_crd = np.array(cpp_modes._get_avg_crd()) cpp_arr_crd = cpp_arr_crd.reshape(117, 3) mask = '!@H=' pt.superpose(traj, mask=mask) avg = pt.mean_structure(traj) atom_indices = traj.top(mask).indices strip_avg_coords = avg.xyz[atom_indices] pt.superpose(traj, mask=mask, ref=avg) avg2 = pt.mean_structure(traj, mask=mask) mat = pt.matrix.covar(traj, mask) modes = pt.matrix.diagonalize(mat, n_vecs=2, dtype='dataset')[0] aa_eq(cpp_arr_crd, avg2.xyz) aa_eq(np.abs(modes.eigenvalues), np.abs(state.data['MyEvecs'].eigenvalues)) aa_eq(np.abs(modes.eigenvectors), np.abs(state.data['MyEvecs'].eigenvectors)) projection_data = pt.all_actions.projection(traj, mask=mask, average_coords=avg2.xyz, eigenvalues=modes.eigenvalues, eigenvectors=modes.eigenvectors, scalar_type='covar') aa_eq(np.abs(projection_data), np.abs(state.data[-2:].values), decimal=3)
def test_drmsd(self): traj = pt.iterload("./data/tz2.nc", "./data/tz2.parm7") txt = ''' parm data/tz2.parm7 trajin data/tz2.nc drmsd drms_nofit out drmsd.dat rms rms_nofit out drmsd.dat nofit rms rms_fit out drmsd.dat drmsd drms_fit out drmsd.dat ''' state = pt.load_cpptraj_state(txt) state.run() cpp_data = state.data[1:] # distance_rmsd data_drmsd = pt.distance_rmsd(traj) aa_eq(data_drmsd, cpp_data[0]) aa_eq(pt.drmsd(traj), cpp_data[0]) # rms_nofit aa_eq(cpp_data[1], pt.rmsd(traj, nofit=True)) # rms_fit aa_eq(cpp_data[2], pt.rmsd(traj, nofit=False)) # drmsd with rmsfit aa_eq(cpp_data[3], pt.distance_rmsd(traj(rmsfit=0), ref=traj[0]))
def test_volume(self): traj = pt.iterload(fn('tz2.ortho.nc'), fn('tz2.ortho.parm7')) state = pt.load_cpptraj_state(''' volume''', traj) state.run() vol = pt.volume(traj) aa_eq(state.data[-1], vol)
def test_radgyr_default(): traj = pt.iterload(fn("tz2.truncoct.nc"), fn("tz2.truncoct.parm7")) state = pt.load_cpptraj_state(""" radgyr :1-13 """, traj) state.run() np.testing.assert_almost_equal( pt.radgyr(traj, ':1-13'), state.data['RoG_00001'].values)
def test_crank(self): traj = pt.iterload("data/tz2.nc", "data/tz2.parm7") dihedrals = pt.dihedral(traj, [':1@C :2@N :2@CA :2@C', ':2@C :3@N :3@CA :3@C']) state = pt.load_cpptraj_state(cm) state.run() # TODO: assert please # cpptraj does not dump data to Dataset pt.crank(dihedrals[0], dihedrals[1], mode='angle')
def test_volume(self): traj = pt.iterload("data/tz2.ortho.nc", "data/tz2.ortho.parm7") state = pt.load_cpptraj_state(''' volume''', traj) state.run() vol = pt.volume(traj) aa_eq(state.data[-1], vol)
def rms2d_(): state = pt.load_cpptraj_state(''' parm {0} loadcrd md.trj 0 {1} crd_ #crdaction crd_ rms2d rms2d crdset crd_ out test.dat '''.format(traj.top.filename, str(n_frames))) state.run() return state
def test_crank(self): traj = pt.iterload("data/tz2.nc", "data/tz2.parm7") dihedrals = pt.dihedral( traj, [':1@C :2@N :2@CA :2@C', ':2@C :3@N :3@CA :3@C']) state = pt.load_cpptraj_state(cm) state.run() # TODO: assert please # cpptraj does not dump data to Dataset pt.crank(dihedrals[0], dihedrals[1], mode='angle')
def rms2d_(): state = pt.load_cpptraj_state(''' parm {0} loadcrd md.trj 0 {1} crd_ #crdaction crd_ rms2d rms2d crdset crd_ out test.dat '''.format(traj.top.filename, str(n_frames))) state.run() return state
def test_crank(self): traj = pt.iterload(fn('tz2.nc'), fn('tz2.parm7')) dihedrals = pt.dihedral( traj, [':1@C :2@N :2@CA :2@C', ':2@C :3@N :3@CA :3@C']) state = pt.load_cpptraj_state(cm) with capture_stdout() as (out, _): state.run() data = pt.crank(dihedrals[0], dihedrals[1], mode='angle') assert out.read() == data
def test_density(self): rst7 = fn('DOPC.rst7') tn = fn('DOPC.parm7') traj = pt.load(fn('DOPC.rst7'), fn('DOPC.parm7')) delta = '0.25' masks = [":PC@P31", ":PC@N31", ":PC@C2", ":PC | :OL | :OL2"] keys_no_space = [''.join(m.split()) for m in masks] mask_str = ' '.join(['"' + m + '"' for m in masks]) density_types = ['number', 'mass', 'charge', 'electron'] state_data_dict = dict() for density_type in density_types: command = """ parm {parm} trajin {trajin} center ":PC | :OL | :OL2" origin density {density_type} delta {delta} {mask} """.format( parm=tn, trajin=rst7, delta=delta, mask=mask_str, density_type=density_type) state = pt.load_cpptraj_state(command) state.run() state_data_dict[density_type] = state.data[1:].to_dict() pt.center(traj, '":PC | :OL | :OL2" origin') density_dict = {} for density_type in density_types: density_data = pt.density( traj, mask=masks, delta=delta, density_type=density_type) density_dict[density_type] = density_data # compate to cpptraj for density_type in density_types: for key in keys_no_space: aa_eq(state_data_dict[density_type][key], density_dict[density_type][key]) # assert raise: wrong density_type def func(): pt.density(traj, mask=':WAT', density_type='hello') with pytest.raises(AssertionError): func() # test 'z' value saved_z_values = np.linspace(-24.1250, 23.8750, 193) aa_eq(density_data['z'], saved_z_values)
def test_matrix(self): import numpy as np from pytraj import ArgList from pytraj import matrix as ma traj = pt.iterload(crd_file, top_file) with tempfolder(): state = pt.load_cpptraj_state(all_commands) state.run() state_byres = pt.load_cpptraj_state(byres_cm) state_byres.run() byres_matlist = [] # no byres keyword for idx, line in enumerate(command_list): arg = ArgList(line) # get function act_key = arg.get_string_key("matrix") slist = arg.get_string_key('out').split(".") arg.get_next_mask() ".".join((slist[0], slist[-1], slist[1])) # get correct name func = ma.__dict__[act_key] # get command command = line.split(act_key)[1] matout = func(traj, command, dtype='ndarray') # cpptraj output has only 3 digits after decimal if 'byres' not in command: aa_eq(matout, state.data[idx + 1].values) else: # save data for asserting later byres_matlist.append(matout) byres_arr = np.array(byres_matlist, dtype='f8') # only take byres datasets saved_matbyres = state_byres.data[[1, 3]].values aa_eq(byres_arr, saved_matbyres)
def test_rotdif(self): traj = pt.load(trajin, parm) ref = pt.load(reference, parm) mat = pt.rotation_matrix(traj, ref=ref, mask='@CA,C,N,O') data = pt.all_actions.rotdif(mat, short_cm) state = pt.load_cpptraj_state(cm) with capture_stdout() as (out, _): state.run() assert data == out.read()
def test_check_structure(): traj = pt.iterload(fn('DPDP.nc'), fn('DPDP.parm7')) out_dict = pt.check_chirality(traj) state = pt.load_cpptraj_state(cm) state.run() cpp_out_dict = state.data[1:].to_dict() for ((key, value), (cpp_key, cpp_value)) in zip(out_dict.items(), cpp_out_dict.items()): aa_eq(value, cpp_value)
def test_vs_cpptraj(self): traj = pt.iterload("./data/tz2.ortho.nc", "./data/tz2.ortho.parm7") txt = ''' parm ./data/tz2.ortho.parm7 trajin ./data/tz2.ortho.nc replicatecell name test all ''' t0 = pt.replicate_cell(traj, direction='all') state = pt.load_cpptraj_state(txt) state.run() saved_t0 = state.data[1] aa_eq(saved_t0.xyz, t0.xyz)
def test_combine_nofit_mass_nomod(self): cm = ''' parm data/tz2.parm7 trajin data/tz2.nc rms @CA nofit mass nomod ''' state = pt.load_cpptraj_state(cm) state.run() unmut_traj = pt.iterload('data/tz2.nc', 'data/tz2.parm7') mut_traj = unmut_traj[:] data = pt.rmsd(mut_traj, mask='@CA', mass=True, nofit=True, update_coordinate=False) aa_eq(data, state.data[-1])
def test_align_principal_axis(self): traj = pt.iterload("./data/tz2.ortho.nc", "./data/tz2.ortho.parm7") t0 = traj[:] t1 = traj[:] aa_eq(t0.align_principal_axis().xyz, pt.align_principal_axis(t1).xyz) # compare to cpptraj cm = ''' principal dorotation createcrd mycrd ''' state = pt.load_cpptraj_state(cm, traj) state.run() aa_eq(state.data['mycrd'].xyz, t1.xyz)
def test_closest_compared_to_cpptraj(self): traj = pt.iterload("./data/tz2.ortho.nc", "./data/tz2.ortho.parm7") state = pt.load_cpptraj_state(''' autoimage closest 100 :1-13 createcrd mycrd''', traj) state.run() fi, top = pt.closest(traj(autoimage=True), mask=':1-13', n_solvents=100) xyz = pt.get_coordinates(fi) t0 = pt.Trajectory(xyz=xyz, top=top) aa_eq(state.data['mycrd'].xyz, t0.xyz) # dtype = 'trajectory' t1 = pt.closest(traj(autoimage=True), mask=':1-13', n_solvents=100, dtype='trajectory') aa_eq(state.data['mycrd'].xyz, t1.xyz)
def test_reference(self): traj = pt.iterload("./data/tz2.nc", "./data/tz2.parm7") text = ''' parm {0} trajin {1} reference {1} 3 3 [ref0] reference {1} 2 2 [ref1] rms ref [ref0] @CA rms ref [ref1] @CA '''.format(traj.top.filename, traj.filename) state = pt.load_cpptraj_state(text) state.run() rmsd_0 = pt.rmsd(traj, ref=2, mask='@CA')
def test_ired_need_lapack_cpptraj(self): state = pt.load_cpptraj_state(txt) state.run() xyz = state.data['CRD1'].xyz top = state.data['CRD1'].top traj = pt.Trajectory(xyz=xyz, top=top) state_vecs = state.data[1:-3].values h_indices = pt.select_atoms('@H', traj.top) n_indices = pt.select_atoms('@H', traj.top) - 1 nh_indices = list(zip(n_indices, h_indices)) mat_ired = pt.ired_vector_and_matrix(traj, mask=nh_indices, order=2)[-1] mat_ired /= mat_ired[0, 0] # matired: make sure to reproduce cpptraj output aa_eq(mat_ired, state.data['matired'].values) # get modes modes = state.data[-2] cpp_eigenvalues = modes.eigenvalues cpp_eigenvectors = modes.eigenvectors evals, evecs = np.linalg.eigh(mat_ired) # need to sort a bit evals = evals[::-1] # cpptraj's eigvenvalues aa_eq(evals, cpp_eigenvalues) # cpptraj's eigvenvectors # use absolute values to avoid flipped sign # from Dan Roe # In practice, the "sign" of an eigenvector depends on the math library used to calculate it. # This is in fact why the modes command displacement test is disabled for cpptraj. # I bet if you use a different math library (e.g. use your system BLAS/LAPACK instead of the one bundled with Amber # or vice versa) you will get different signs. # Bottom line is that eigenvector sign doesn't matter. aa_eq(np.abs(evecs[:, ::-1].T), np.abs(cpp_eigenvectors), decimal=4) data = _ired(state_vecs, modes=(cpp_eigenvalues, cpp_eigenvectors)) order_s2 = data['IRED_00127[S2]'] # load cpptraj's output and compare to pytraj' values for S2 order paramters cpp_order_s2 = np.loadtxt(os.path.join(cpptraj_test_dir, 'Test_IRED', 'orderparam.save')).T[-1] aa_eq(order_s2, cpp_order_s2, decimal=5)
def test_calc_atomicfluct_with_unitcell(self): # use iterload for load_batch traj = pt.iterload("./data/tz2.ortho.nc", "./data/tz2.ortho.parm7") state = pt.load_cpptraj_state(''' distance :3 :7 atomicfluct @CA out output/test.agr distance :3 :7''', traj) state.run() # use `load` method t0 = pt.load("./data/tz2.ortho.nc", "./data/tz2.ortho.parm7") data = pt.atomicfluct(traj, '@CA') aa_eq(data, state.data[-2].values) # make sure that traj's coordinates were not altered # https://github.com/Amber-MD/pytraj/issues/1166 aa_eq(pt.distance(t0, ':3 :7'), state.data[-1]) aa_eq(traj.xyz, t0.xyz)
def test_pca_with_ref_with_different_mask_from_matrix(self): '''has reference. Use !@H= for ref_mask and use * for covariance matrix and projection from drroe: "You should be able to supply separate masks for fitting and creating the covariance matrix It is common enough for example to only perform rms-fitting on heavy atoms while still wanting all atoms in eigenvectors." pytraj: pt.pca(traj, mask=mask_matrix, n_vecs=2, ref=ref, ref_mask=mask_ref) ''' command_ref_provided = ''' parm data/tz2.parm7 trajin data/tz2.nc reference data/tz2.rst7 # only perform fitting on heavy atoms rms reference !@H= # all atoms matrix covar name MyMatrix * createcrd CRD1 run # Step three. Diagonalize matrix. runanalysis diagmatrix MyMatrix vecs 2 name MyEvecs # Step four. Project saved fit coordinates along eigenvectors 1 and 2 # all atoms crdaction CRD1 projection evecs MyEvecs * out project.dat beg 1 end 2 ''' traj = pt.load("data/tz2.nc", "data/tz2.parm7") ref = pt.load('data/tz2.rst7', traj.top) state = pt.load_cpptraj_state(command_ref_provided) state.run() mask_ref = '!@H=' mask_matrix = '*' data = pt.pca(traj, mask=mask_matrix, n_vecs=2, ref=ref, ref_mask=mask_ref) cpp_data = state.data[-2:].values # use absolute values aa_eq(np.abs(data[0]), np.abs(cpp_data), decimal=3)
def test_reference_with_different_topology_basic(self): traj1 = pt.iterload(filename="./data/Tc5b.x", top="./data/Tc5b.top") traj2 = pt.iterload('data/tz2.nc', 'data/tz2.parm7') # re-establish ActionList dslist = CpptrajDatasetList() dslist.add('reference', name='myref') dslist[0].top = traj2.top dslist[0].add_frame(traj2[0]) actlist = pt.ActionList(['rmsd @1-11 @CB ref myref'], top=traj1.top, dslist=dslist) for frame in traj1: actlist.compute(frame) # raise if ref_mask is given but not mask self.assertRaises(ValueError, lambda: pt.rmsd(traj1, ref=3, ref_mask='@CB')) self.assertRaises(ValueError, lambda: pt.rmsd(traj1, ref=traj2[:1], ref_mask='@CB')) # assert to cpptraj tc5b_traj = traj1[:] tz2_traj = traj2[:1] cm = ''' parm data/Tc5b.top [tc5b] trajin data/Tc5b.x [tc5b] parm data/tz2.parm7 [tz2] reference data/tz2.nc parm [tz2] 1 [myref] rms myrmsd ref [myref] @1-10 @11-20 ''' state = pt.load_cpptraj_state(cm) state.run() expected_rmsd = state.data[-1].values rmsd_data = pt.rmsd(tc5b_traj, mask='@1-10', ref=tz2_traj, ref_mask='@11-20') aa_eq(expected_rmsd, rmsd_data)
def test_pca_noref(self): '''no reference pytraj: pt.pca(traj, mask, n_vecs=2) ''' command = ''' # Step one. Generate average structure. # RMS-Fit to first frame to remove global translation/rotation. parm data/tz2.parm7 trajin data/tz2.nc rms first !@H= average crdset AVG run # Step two. RMS-Fit to average structure. Calculate covariance matrix. # Save the fit coordinates. rms ref AVG !@H= matrix covar name MyMatrix !@H= createcrd CRD1 run # Step three. Diagonalize matrix. runanalysis diagmatrix MyMatrix vecs 2 name MyEvecs # Step four. Project saved fit coordinates along eigenvectors 1 and 2 crdaction CRD1 projection evecs MyEvecs !@H= out project.dat beg 1 end 2 ''' traj = pt.load("data/tz2.nc", "data/tz2.parm7") # no reference state = pt.load_cpptraj_state(command) state.run() mask = '!@H=' data = pt.pca(traj, mask, n_vecs=2) cpp_data = state.data[-2:].values # use absolute values aa_eq(np.abs(data[0]), np.abs(cpp_data), decimal=3)
def test_dihedral(self): import numpy as np traj = mdio.iterload("./data/Tc5b.x", "./data/Tc5b.top") fa = traj[:] mask = ':2@CA :14@CA :15@CA :16@CA' txt = ''' parm ./data/Tc5b.top trajin ./data/Tc5b.x dihedral %s ''' % mask d0 = pt.dihedral(traj, mask, dtype='dataset').to_ndarray() d1 = pt.dihedral(traj, mask) d2 = pt.calc_dihedral(fa, mask) state = pt.load_cpptraj_state(txt) state.run() dcpp = state.data[1:].values aa_eq(d0, d1) aa_eq(d0, d2) aa_eq(d0, dcpp) Nsize = 10 np.random.seed(1) arr = np.random.randint(0, 300, size=Nsize * 4).reshape(Nsize, 4) d3 = pt.calc_dihedral(fa, arr) d4 = pt.dihedral(traj, arr) d5 = pt.dihedral(traj, arr) d6 = pt.dihedral(fa, arr) d7 = pt.dihedral([fa, traj], arr, n_frames=2 * fa.n_frames) aa_eq(d3, d4) aa_eq(d3, d5) aa_eq(d3, d6) aa_eq(d3.T, d7.T[:fa.n_frames]) aa_eq(d3.T, d7.T[fa.n_frames:]) d8 = pt.dihedral(traj, mask, dtype='dataset') d9 = pt.tools.dict_to_ndarray(pt.dihedral(traj, mask, dtype='dict')) aa_eq(d0, d8.values) aa_eq(d0, d9) # raise self.assertRaises(ValueError, lambda: pt.dihedrals(traj, [[0, 3, 2]]))
def test_do_rotation(self): traj = pt.iterload("./data/Tc5b.x", "./data/Tc5b.top") cm = ''' principal * dorotation mass name pout createcrd myname ''' state = pt.load_cpptraj_state(cm, traj) state.run() mut_traj_0 = traj[:] mut_traj_1 = traj[:] data = pt.principal_axes(mut_traj_0, mask='*', dorotation=True, mass=True) pt.align_principal_axis(mut_traj_1, mask='*', mass=True) aa_eq(data[0], state.data[1].values) aa_eq(data[1], state.data[2].values) aa_eq(state.data[-1].xyz, mut_traj_0.xyz) aa_eq(state.data[-1].xyz, mut_traj_1.xyz)
def test_nupars(self): fn = "./data/Test_NAstruct/adh026.3.pdb" traj = pt.iterload(fn, fn) data = pt.nastruct(traj) # default text = ''' parm "./data/Test_NAstruct/adh026.3.pdb" trajin "./data/Test_NAstruct/adh026.3.pdb" nastruct groovecalc 3dna ''' state = pt.load_cpptraj_state(text) state.run() for key in ['major', 'minor', 'twist']: cpp_data = np.array([x.values for x in state.data if x.aspect == key]) # need to transpose to get shape=(n_frames, n_pairs) cpp_data = cpp_data.T aa_eq(data[key][1], cpp_data) # TODO: assert data._summary(np.mean, indices=None) data._summary(np.mean, indices=[1, ]) data._summary(np.mean, keys=['major', 'twist'], indices=[1, ]) data._summary(np.mean, keys='major', indices=[1, ]) data._summary(np.std, indices=[1, ]) data._summary([np.std, np.mean], indices=[1, ]) data._explain() dir(data) # pickle pt.to_pickle(data, 'data/na.pk') na2 = pt.read_pickle('data/na.pk') for key in data.keys(): aa_eq(data[key][1], na2[key][1]) # raise self.assertRaises(ValueError, lambda: pt.nastruct(traj, dtype='ndarray'))
def test_pca_with_ref(self): '''has reference from drroe: "If the user provides their own reference structure, do not create an average structure" pytraj: pt.pca(traj, mask, n_vecs=2, ref=ref) ''' command_ref_provided = ''' parm data/tz2.parm7 trajin data/tz2.nc reference data/tz2.rst7 rms reference !@H= matrix covar name MyMatrix !@H= createcrd CRD1 run # Step three. Diagonalize matrix. runanalysis diagmatrix MyMatrix vecs 2 name MyEvecs # Step four. Project saved fit coordinates along eigenvectors 1 and 2 crdaction CRD1 projection evecs MyEvecs !@H= out project.dat beg 1 end 2 ''' traj = pt.load("data/tz2.nc", "data/tz2.parm7") ref = pt.load('data/tz2.rst7', traj.top) state = pt.load_cpptraj_state(command_ref_provided) state.run() mask = '!@H=' data = pt.pca(traj, mask, n_vecs=2, ref=ref) cpp_data = state.data[-2:].values # use absolute values aa_eq(np.abs(data[0]), np.abs(cpp_data), decimal=3)
def test_pca_noref_nofit(self): '''no reference and do not do fitting from drroe: " Also, not fitting at all should be considered a legitimate option - you may want to include global rotational and translational motion in your eigenvectors." pytraj: pt.pca(traj, mask, n_vecs=2, fit=False) ''' command = ''' parm data/tz2.parm7 trajin data/tz2.nc matrix covar name MyMatrix !@H= createcrd CRD1 run # Step three. Diagonalize matrix. runanalysis diagmatrix MyMatrix vecs 2 name MyEvecs # Step four. Project saved fit coordinates along eigenvectors 1 and 2 crdaction CRD1 projection evecs MyEvecs !@H= out project.dat beg 1 end 2 ''' traj = pt.load("data/tz2.nc", "data/tz2.parm7") # no reference state = pt.load_cpptraj_state(command) state.run() mask = '!@H=' data = pt.pca(traj, mask, n_vecs=2, fit=False) data_ref = pt.pca(traj, mask, n_vecs=2, fit=False, ref=3, ref_mask='@CA') cpp_data = state.data[-2:].values # use absolute values aa_eq(np.abs(data[0]), np.abs(cpp_data), decimal=3) # if fit=True, ref will be ignored aa_eq(np.abs(data_ref[0]), np.abs(cpp_data), decimal=3)
def test_dihcovar(self): traj = pt.iterload("./data/tz2.nc", "./data/tz2.parm7") txt = ''' parm data/tz2.parm7 trajin data/tz2.nc # Generation of phi/psi dihedral data multidihedral BB phi psi resrange 2 run # Calculate dihedral covariance matrix and obtain eigenvectors matrix dihcovar dihedrals BB[*] name DIH diagmatrix DIH vecs 4 name DIHMODES run # Project along eigenvectors projection evecs DIHMODES beg 1 end 4 dihedrals BB[*] ''' state = pt.load_cpptraj_state(txt) state.run() modes = state.data['DIHMODES']
def test_projection_with_None_average_coord(self): cm = ''' matrix name correlmat {scalar_type} @CA diagmatrix correlmat name evecs vecs 5 run projection P1 modes evecs beg 1 end 2 @CA ''' scalar_type = 'covar' cm2 = cm.format(scalar_type=scalar_type) traj = pt.iterload("data/tz2.nc", "data/tz2.parm7") state = pt.load_cpptraj_state(cm2, traj) state.run() mat = pt.matrix.covar(traj, '@CA') eigenvalues, eigenvectors = pt.matrix.diagonalize(mat, 2, dtype='tuple') data = pt.all_actions.projection(traj, '@CA', eigenvalues, eigenvectors, scalar_type=scalar_type) aa_eq(np.abs(state.data['Mode1'].values), np.abs(data[0])) aa_eq(np.abs(state.data['Mode2'].values), np.abs(data[1])) assert data.shape == (2, traj.n_frames)
def test_hbonds_from_pdb(self): traj = pt.load('data/1L2Y.pdb') hb = pt.search_hbonds(traj) state = pt.load_cpptraj_state(''' parm data/1L2Y.pdb trajin data/1L2Y.pdb hbond series ''') state.run() for data_p, data_cpp in zip(hb.data, state.data[1:]): assert len( data_p) == traj.n_frames == 38, 'size of dataset must be 38' aa_eq(data_p, data_cpp) # make sure distances are smaller than cutoff distance_cutoff = 2.5 angle_cutoff = 135. hb = pt.search_hbonds(traj) distances = pt.distance(traj, hb.get_amber_mask()[0]) angles = pt.angles(traj, hb.get_amber_mask()[1]) dist_indices = np.where(distances > distance_cutoff) angle_indices = np.where(angles < angle_cutoff) print('FILL ME', dist_indices, angle_indices) saved_donor_acceptors = ['ASP9_OD2-ARG16_NH1-HH12', 'ASP9_OD2-ARG16_NH2-HH22', 'ASP9_OD2-ARG16_NE-HE', 'ASP9_OD2-ARG16_NH2-HH21', 'ASP9_OD2-ARG16_NH1-HH11'] donor_acceptors = pt.search_hbonds(traj, ':9,16').donor_acceptor assert saved_donor_acceptors == donor_acceptors, 'saved_donor_acceptors' aa_eq(hb.total_solute_hbonds(), hb.data['total_solute_hbonds'])
def test_iterload_and_load_remd(self): # iterload_remd traj = pt.iterload_remd("data/Test_RemdTraj/rem.nc.000", "data/Test_RemdTraj/ala2.99sb.mbondi2.parm7", T=300.0) for frame in traj: assert frame.temperature == 300.0, 'frame temperature must be 300.0 K' dist = pt.distance(traj, '@10 @20') state = pt.load_cpptraj_state(self.trajin_text) state.run() aa_eq(dist, state.data[-1]) # load_remd traj2 = pt.load_remd("data/Test_RemdTraj/rem.nc.000", "data/Test_RemdTraj/ala2.99sb.mbondi2.parm7", T=300.0) aa_eq(traj.xyz, traj2.xyz) # with Topology traj2 = pt.iterload_remd("data/Test_RemdTraj/rem.nc.000", top=traj.top, T=300.0) aa_eq(traj.xyz, traj2.xyz)
def test_load_cpptraj_state_from_text(self): traj = pt.iterload("./data/tz2.nc", "./data/tz2.parm7") text = ''' parm data/Test_RemdTraj/ala2.99sb.mbondi2.parm7 trajin data/Test_RemdTraj/rem.nc.000 remdtraj remdtrajtemp 300. distance @10 @20 ''' input_file = 'data/Test_RemdTraj/traj.in' state_from_file = pt.load_cpptraj_state(input_file) state_from_file.run() # remove DatasetTopology data = state_from_file.data data.remove_set(data[0]) data_0 = state_from_file.data.values state_from_text = pt.datafiles.load_cpptraj_state(text) state_from_text.run() data = state_from_text.data data.remove_set(data[0]) data_1 = state_from_text.data.values aa_eq(data_0, data_1)