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_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_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_cluster_hieragglo(): command = """ parm {} trajin {} createcrd crd1 cluster crdset crd1 C0 !@H hieragglo epsilon 0.8 averagelinkage """.format(tz2_top, tz2_trajin) with tempfolder(): state = pt.load_cpptraj_state(command) with capture_stdout() as (cpp_out, _): state.run() traj = pt.iterload(tz2_trajin, tz2_top) data = pt.cluster.hieragglo(traj, mask='!@H=', options='epsilon 0.8 averagelinkage') aa_eq(state.data[-2], data.cluster_index)
def test_cluster_dbscan(): command = """ parm {} trajin {} createcrd crd1 cluster crdset crd1 C0 @CA dbscan epsilon 1.7 minpoints 5 """.format(tz2_top, tz2_trajin) with tempfolder(): state = pt.load_cpptraj_state(command) with capture_stdout() as (out, _): state.run() traj = pt.iterload(tz2_trajin, tz2_top) data = pt.cluster.dbscan(traj, mask='@CA', options='epsilon 1.7 minpoints 5') aa_eq(state.data[-2], data.cluster_index)
def _cluster(traj, algorithm, mask="", frame_indices=None, dtype='dataset', top=None, options=''): """clustering. Limited support. Parameters ---------- traj : Trajectory-like or any iterable that produces Frame mask : str atom mask dtype : str return data type top : Topology, optional options: str more cpptraj option Notes ----- Call `pytraj._verbose()` to see more output. Turn it off by `pytraj._verbose(False)` cpptraj manual:: Algorithms: [hieragglo [epsilon <e>] [clusters <n>] [linkage|averagelinkage|complete] [epsilonplot <file>]] [dbscan minpoints <n> epsilon <e> [sievetoframe] [kdist <k> [kfile <prefix>]]] [dpeaks epsilon <e> [noise] [dvdfile <density_vs_dist_file>] [choosepoints {manual | auto}] [distancecut <distcut>] [densitycut <densitycut>] [runavg <runavg_file>] [deltafile <file>] [gauss]] [kmeans clusters <n> [randompoint [kseed <seed>]] [maxit <iterations>] [{readtxt|readinfo} infofile <file>] Distance metric options: {rms | srmsd | dme | data} { [[rms | srmsd] [<mask>] [mass] [nofit]] | [dme [<mask>]] | [data <dset0>[,<dset1>,...]] } [sieve <#> [random [sieveseed <#>]]] [loadpairdist] [savepairdist] [pairdist <name>] [pairwisecache {mem | none}] Output options: [out <cnumvtime>] [gracecolor] [summary <summaryfile>] [info <infofile>] [summarysplit <splitfile>] [splitframe <comma-separated frame list>] [clustersvtime <filename> cvtwindow <window size>] [cpopvtime <file> [normpop | normframe]] [lifetime] [sil <silhouette file prefix>] Coordinate output options: [ clusterout <trajfileprefix> [clusterfmt <trajformat>] ] [ singlerepout <trajfilename> [singlerepfmt <trajformat>] ] [ repout <repprefix> [repfmt <repfmt>] [repframe] ] [ avgout <avgprefix> [avgfmt <avgfmt>] ] Experimental options: [[drawgraph | drawgraph3d] [draw_tol <tolerance>] [draw_maxit <iterations]] Cluster structures based on coordinates (RMSD/DME) or given data set(s). <crd set> can be created with the 'createcrd' command. """ # Note: do not use super_dispatch here. We use get_iterator_from_dslist ana = c_analysis.Analysis_Clustering() # need to creat `dslist` here so that every time `do_clustering` is called, # we will get a fresh one (or will get segfault) crdname = 'DEFAULT_NAME' dslist, _top, mask2 = get_iterator_from_dslist(traj, mask, frame_indices, top, crdname=crdname) if 'summary' not in options.split(): options += ' summary' # do not output cluster info to STDOUT command = ' '.join( (algorithm, mask2, "crdset {0}".format(crdname), options)) with capture_stdout() as (out, _): ana(command, dslist) # remove frames in dslist to save memory dslist.remove_set(dslist[crdname]) return ClusteringDataset( (get_data_from_dtype(dslist[:1], dtype='ndarray'), out.read()))