Next changeset 1:631b2a62d500 (2020-10-28) |
Commit message:
"planemo upload for repository https://github.com/galaxycomputationalchemistry/galaxy-tools-compchem/ commit 1b23e024af45cc0999d9142d07de6897d4189ec2" |
added:
angle.py dihedrals.py distance_multiple.py distance_single.py end-to-end.py extract_rmsd.py hbonds.py macros.xml pca_cosine.py ramachandran_auto_protein.py ramachandran_auto_protein.xml ramachandran_auto_protein_html.j2 ramachandran_plots.py rdf.py test-data/Angle_Analysis_Plot.png test-data/Angle_Analysis_raw_data.tabular test-data/Dihedral_Analysis_Plot.png test-data/Dihedral_analysis_raw_data.tabular test-data/Distance_Analysis_Plot.png test-data/Distance_Analysis_raw_data.tabular test-data/RDF_Analysis_Plot.png test-data/RDF_raw_data.tabular test-data/Ramachandran_Plot_raw_data.tabular test-data/Ramachandran_Plot_raw_data_gmx.tabular test-data/list1.txt test-data/list2.txt test-data/test.dcd test-data/test.gro test-data/test.pdb test-data/test.xtc test-data/test.yml |
b |
diff -r 000000000000 -r 0f270722aca6 angle.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/angle.py Mon Aug 24 16:27:56 2020 -0400 |
[ |
@@ -0,0 +1,75 @@ +#!/usr/bin/env python + +import argparse +import csv +import sys + +import MDAnalysis as mda + +import matplotlib +import matplotlib.pyplot as plt + +import numpy as np +from numpy.linalg import norm + +matplotlib.use('Agg') # noqa + + +def parse_command_line(argv): + parser = argparse.ArgumentParser() + parser.add_argument('--itraj', help='input traj') + parser.add_argument('--istr', help='input str') + parser.add_argument('--itrajext', help='input traj ext') + parser.add_argument('--istrext', help='input str ext') + parser.add_argument('--isegid1', help='segid 1') + parser.add_argument('--iresid1', help='resid 1') + parser.add_argument('--iname1', help='name 1') + parser.add_argument('--isegid2', help='segid 2') + parser.add_argument('--iresid2', help='resid 2') + parser.add_argument('--iname2', help='name 2') + parser.add_argument('--isegid3', help='segid 3') + parser.add_argument('--iresid3', help='resid 3') + parser.add_argument('--iname3', help='name 3') + parser.add_argument('--output', help='output') + parser.add_argument('--oangle_plot', help='angle plot') + return parser.parse_args() + + +args = parse_command_line(sys.argv) + +atom1 = "(segid %s and resid %s and name %s)" % \ + (args.isegid1, args.iresid1, args.iname1) +atom2 = "(segid %s and resid %s and name %s)" % \ + (args.isegid2, args.iresid2, args.iname2) +atom3 = "(segid %s and resid %s and name %s)" % \ + (args.isegid3, args.iresid3, args.iname3) + + +def theta(u): + A = u.select_atoms(atom1).center_of_geometry() + B = u.select_atoms(atom2).center_of_geometry() + C = u.select_atoms(atom3).center_of_geometry() + BA = A - B + BC = C - B + theta = np.arccos(np.dot(BA, BC)/(norm(BA)*norm(BC))) + return np.rad2deg(theta) + + +u = mda.Universe(args.istr, args.itraj, + topology_format=args.istrext, format=args.itrajext) +data = np.array([(u.trajectory.frame, theta(u)) for ts in u.trajectory]) +frame, theta = data.T + +with open(args.output, 'w') as f: + writer = csv.writer(f, delimiter='\t') + writer.writerows(zip(frame, theta)) + +with open(args.output) as f: + g = [xtmp.strip() for xtmp in f] + data = [tuple(map(float, xtmp.split())) for xtmp in g[0:]] + time = [xtmp[0] for xtmp in data] + angle = [xtmp[1] for xtmp in data] + plt.plot(time, angle) + plt.xlabel('Frame No.') + plt.ylabel('Angle (degrees)') + plt.savefig(args.oangle_plot, format='png') |
b |
diff -r 000000000000 -r 0f270722aca6 dihedrals.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dihedrals.py Mon Aug 24 16:27:56 2020 -0400 |
[ |
@@ -0,0 +1,82 @@ +#!/usr/bin/env python + +import argparse +import csv +import sys + +import MDAnalysis as mda +from MDAnalysis.lib.distances import calc_dihedrals + +import matplotlib +import matplotlib.pyplot as plt + +import numpy as np + +matplotlib.use('Agg') # noqa + + +def parse_command_line(argv): + parser = argparse.ArgumentParser() + parser.add_argument('--itraj', help='input traj') + parser.add_argument('--istr', help='input str') + parser.add_argument('--itrajext', help='input traj ext') + parser.add_argument('--istrext', help='input str ext') + parser.add_argument('--isegid1', help='segid 1') + parser.add_argument('--iresid1', help='resid 1') + parser.add_argument('--iname1', help='name 1') + parser.add_argument('--isegid2', help='segid 2') + parser.add_argument('--iresid2', help='resid 2') + parser.add_argument('--iname2', help='name 2') + parser.add_argument('--isegid3', help='segid 3') + parser.add_argument('--iresid3', help='resid 3') + parser.add_argument('--iname3', help='name 3') + parser.add_argument('--isegid4', help='segid 4') + parser.add_argument('--iresid4', help='resid 4') + parser.add_argument('--iname4', help='name 4') + parser.add_argument('--output', help='output') + parser.add_argument('--odihedral_plot', help='dihedral plot') + return parser.parse_args() + + +args = parse_command_line(sys.argv) + +atom1 = "(segid %s and resid %s and name %s)" % \ + (args.isegid1, args.iresid1, args.iname1) +atom2 = "(segid %s and resid %s and name %s)" % \ + (args.isegid2, args.iresid2, args.iname2) +atom3 = "(segid %s and resid %s and name %s)" % \ + (args.isegid3, args.iresid3, args.iname3) +atom4 = "(segid %s and resid %s and name %s)" % \ + (args.isegid4, args.iresid4, args.iname4) + + +def psi(u): + A = u.select_atoms(atom1).positions + B = u.select_atoms(atom2).positions + C = u.select_atoms(atom3).positions + D = u.select_atoms(atom4).positions + psi = calc_dihedrals(A, B, C, D) + return np.rad2deg(psi) + + +u = mda.Universe(args.istr, args.itraj, + topology_format=args.istrext, format=args.itrajext) +data = np.array([(u.trajectory.frame, psi(u)) for ts in u.trajectory]) +frame, psi = data.T +PSI = np.concatenate(psi, axis=0) + +zip(frame, PSI) + +with open(args.output, 'w') as f: + writer = csv.writer(f, delimiter='\t') + writer.writerows(zip(frame, PSI)) + +with open(args.output) as f: + g = [xtmp.strip() for xtmp in f] + data = [tuple(map(float, xtmp.split())) for xtmp in g[0:]] + time = [xtmp[0] for xtmp in data] + dihedral = [xtmp[1] for xtmp in data] + plt.plot(time, dihedral) + plt.xlabel('Frame No.') + plt.ylabel('Dihedral (degrees)') + plt.savefig(args.odihedral_plot, format='png') |
b |
diff -r 000000000000 -r 0f270722aca6 distance_multiple.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/distance_multiple.py Mon Aug 24 16:27:56 2020 -0400 |
[ |
@@ -0,0 +1,56 @@ +import argparse +import sys + +import MDAnalysis as mda +from MDAnalysis.analysis import distances + +import numpy as np + + +def parse_command_line(argv): + parser = argparse.ArgumentParser() + parser.add_argument('--itraj', help='input traj') + parser.add_argument('--istr', help='input str') + parser.add_argument('--itrajext', help='input traj ext') + parser.add_argument('--istrext', help='input str ext') + parser.add_argument('--list1', help='list 2') + parser.add_argument('--list2', help='list 2') + parser.add_argument('--output', help='output') + parser.add_argument('--header', dest='header', action='store_true') + return parser.parse_args() + + +args = parse_command_line(sys.argv) + +u = mda.Universe(args.istr, args.itraj, + topology_format=args.istrext, format=args.itrajext) + +list1 = np.loadtxt(args.list1, dtype=str, delimiter="\t", ndmin=1) +list2 = np.loadtxt(args.list2, dtype=str, delimiter="\t", ndmin=1) + +sel1 = [u.select_atoms(selection) for selection in list1] +sel2 = [u.select_atoms(selection) for selection in list2] + +d = np.empty((u.trajectory.n_frames, list1.shape[0], list2.shape[0]),) + +for ts in u.trajectory: + c_o_m1 = np.array([selection.center_of_mass() for selection in sel1]) + c_o_m2 = np.array([selection.center_of_mass() for selection in sel2]) + distances.distance_array(c_o_m1, c_o_m2, result=d[ts.frame]) + +d = np.hstack(( + np.array(np.reshape(np.arange( + 0, d.shape[0]), (d.shape[0], 1)), dtype=int), # add column w frame + np.reshape(d, (d.shape[0], d.shape[1] * d.shape[2])) +)) + +if args.header: + header = 'Frame\t' + '\t'.join( + ['-'.join(pair) for pair in zip( + sum([[n, ] * len(list2) for n in list1], []), + list(list2) * len(list1),)]).replace(' ', '_') +else: + header = '' + +np.savetxt(args.output, d, header=header, comments='', + fmt=['%d'] + ['%f'] * (d.shape[1] - 1), delimiter='\t') |
b |
diff -r 000000000000 -r 0f270722aca6 distance_single.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/distance_single.py Mon Aug 24 16:27:56 2020 -0400 |
[ |
@@ -0,0 +1,63 @@ +#!/usr/bin/env python + +import argparse +import sys + +import MDAnalysis as mda + +import matplotlib +import matplotlib.pyplot as plt + +import numpy as np + +matplotlib.use('Agg') # noqa + + +def parse_command_line(argv): + parser = argparse.ArgumentParser() + parser.add_argument('--itraj', help='input traj') + parser.add_argument('--istr', help='input str') + parser.add_argument('--itrajext', help='input traj ext') + parser.add_argument('--istrext', help='input str ext') + parser.add_argument('--isegid1', help='segid 1') + parser.add_argument('--iresid1', help='resid 1') + parser.add_argument('--iname1', help='name 1') + parser.add_argument('--isegid2', help='segid 2') + parser.add_argument('--iresid2', help='resid 2') + parser.add_argument('--iname2', help='name 2') + parser.add_argument('--output', help='output') + parser.add_argument('--odistance_plot', help='odistance plot') + parser.add_argument('--header', dest='header', action='store_true') + return parser.parse_args() + + +args = parse_command_line(sys.argv) + +atom1 = "(segid %s and resid %s and name %s)" % \ + (args.isegid1, args.iresid1, args.iname1) +atom2 = "(segid %s and resid %s and name %s)" % \ + (args.isegid2, args.iresid2, args.iname2) + +u = mda.Universe(args.istr, args.itraj, + topology_format=args.istrext, format=args.itrajext) +x = u.select_atoms(atom1) +y = u.select_atoms(atom2) + +with open(args.output, 'w') as f: + if args.header: + f.write('Frame\tDistance') + for t in u.trajectory: + r = x.positions - y.positions + d = np.linalg.norm(r) + f.write(str(t.frame) + '\t ') + f.write(str(d) + '\n') + +with open(args.output) as f: + g = [xtmp.strip() for xtmp in f] + data = [tuple(map(float, xtmp.split())) for xtmp in g[0:]] + time = [xtmp[0] for xtmp in data] + distance = [xtmp[1] for xtmp in data] + plt.plot(time, distance) + plt.xlabel('Frame No.') + plt.ylabel(r'Distance ($\AA$)') + plt.savefig(args.odistance_plot, format='png') |
b |
diff -r 000000000000 -r 0f270722aca6 end-to-end.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/end-to-end.py Mon Aug 24 16:27:56 2020 -0400 |
[ |
@@ -0,0 +1,96 @@ +#!/usr/bin/env python + +import argparse +import itertools +import sys + +import MDAnalysis as mda + +import matplotlib +import matplotlib.pyplot as plt + +import numpy as np +import numpy.linalg + +matplotlib.use('Agg') # noqa + + +def parse_command_line(argv): + parser = argparse.ArgumentParser() + parser.add_argument('--itraj', help='input traj') + parser.add_argument('--istr', help='input str') + parser.add_argument('--itrajext', help='input traj ext') + parser.add_argument('--istrext', help='input str ext') + parser.add_argument('--isegid1', help='segid 1') + parser.add_argument('--ilabel', help='plot label') + parser.add_argument('--ititle1', help='plot title') + parser.add_argument('--output1', help='output1 - timeseries') + parser.add_argument('--o_plot', help='End to End plot') + return parser.parse_args() + + +args = parse_command_line(sys.argv) + + +u = mda.Universe(args.istr, args.itraj, + topology_format=args.istrext, format=args.itrajext) + +ntermatoms = "(segid %s and name N)" % \ + (args.isegid1) +ctermatoms = "(segid %s and name C)" % \ + (args.isegid1) +# not sure how robust this selection really is +nterm = u.select_atoms(ntermatoms)[0] # first atom named N +cterm = u.select_atoms(ctermatoms)[-1] # takes the last atom named 'C' + +enddist = [] + +for ts in u.trajectory: # iterate through all frames + r = cterm.position - nterm.position # e-to-e vector from atom positions + d = numpy.linalg.norm(r) # end-to-end distance + enddist.append((ts.frame, d)) + +enddist = np.array(enddist) + + +color = itertools.cycle(['r', 'b', 'gold']) + +fig, axs = plt.subplots(1, 2, sharex=False, sharey=False, tight_layout=True) + +params = { + 'axes.labelsize': 8, + 'legend.fontsize': 10, + 'xtick.labelsize': 10, + 'ytick.labelsize': 10, + 'text.usetex': False, + 'figure.figsize': [4.5, 4.5], + 'figure.dpi': 300 +} +plt.rcParams.update(params) + +axs[0].plot(enddist[:, 0], enddist[:, 1], 'r-', lw=2, label=args.ilabel) +axs[0].set_xlabel("number of frames") +axs[0].set_ylabel(r"End to end distance ($\AA$)") +axs[0].legend() + +n, bins, patches = axs[1].hist(enddist[:, 1], color=next( + color), label=args.ilabel, alpha=0.5, density=True, stacked=True) + +axs[1].legend() +axs[1].set_ylabel('Density Normalised Frequency') +axs[1].set_xlabel(r'End to end distance ($\AA$)') +fig.suptitle(args.ititle1, fontsize=12, fontweight='bold') +fig.subplots_adjust(top=0.45) + +print( + " \n".join( + [ + 'The End to End distance is measured between the following atoms:', + str(nterm), + str(cterm)])) + +# svg is better but sticking with png for now +plt.savefig(args.o_plot, format='png') + + +np.savetxt(args.output1, enddist, delimiter='\t') |
b |
diff -r 000000000000 -r 0f270722aca6 extract_rmsd.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/extract_rmsd.py Mon Aug 24 16:27:56 2020 -0400 |
[ |
@@ -0,0 +1,129 @@ +import argparse +import json + +import MDAnalysis as m +from MDAnalysis.analysis import align, rms +from MDAnalysis.analysis.base import AnalysisFromFunction +from MDAnalysis.coordinates.memory import MemoryReader + +import numpy as np + + +def calc_rmsd(str_files, traj_files, ref_str, str_format, traj_format, + ref_str_format, filepath_out, group, start, end, step, + fitting_atoms): + """ + the function will cycle through range 0 to no_t and load all files found. + + str_files: text file with filepaths for structures, one on each line + traj_files: text file with filepaths for trajectories, one on each line + ref_str: reference structure for fitting + filepath_in: directory where the files are located + filepath_out: pickle file where results (3D matrix) should be saved to + + group: atoms for which RMSD should be calculated; + use the MDAnalysis selection language + fitting_atoms: atoms used for str alignment prior to RMSD calculation; + use the MDAnalysis selection language + + start: first trajectory frame to calculate RMSD + end: last trajectory frame to calculate RMSD + step: how frequently frames are sampled between start and end; obviously, + the larger the step, the quicker the script finishes + """ + + # open list of files + with open(str_files) as f1, open(traj_files) as f2: + str_file_list = f1.read().strip().split('\n') + traj_file_list = f2.read().strip().split('\n') + + if sum(1 for line in f1) != sum(1 for line in f2): + raise IOError('Number of structure and trajectory files unequal.') + + no_t = len(traj_file_list) + + data = np.zeros((no_t, no_t, + int((end - start)/step + ((end - start) % step > 0)))) + + # load files + universes = {} + + for traj in range(no_t): + mobile = m.Universe(str_file_list[traj], traj_file_list[traj], + format=traj_format, topology_format=str_format) + ref = m.Universe(ref_str, topology_format=ref_str_format) + + mobile.trajectory[-1] # set mobile trajectory to last frame + ref.trajectory[0] # set reference trajectory to first frame + + # perform alignment + align.AlignTraj(mobile, ref, select=fitting_atoms, + in_memory=True).run() + + grp = mobile.select_atoms(group) + universes[traj] = m.core.universe.Merge(grp) # create Universe w grp + coordinates = AnalysisFromFunction(lambda ag: ag.positions.copy(), + grp).run().results # write to uv + universes[traj].load_new(coordinates, format=MemoryReader) + + print("All trajs loaded by MDAnalysis") + + # calculate differences + for traj1 in range(no_t): + print("Calculating differences for traj {}".format(traj1)) + for traj2 in range(traj1): + + u1 = universes[traj1] + u2 = universes[traj2] + + l1 = u1.select_atoms(group) + l2 = u2.select_atoms(group) + + rmsd = rms.RMSD(l1, l2) + + rmsd.run() + + data[traj1, traj2] = rmsd.rmsd[:, 2] + data[traj2, traj1] = rmsd.rmsd[:, 2] + + with open(filepath_out, 'w') as f: + json.dump(data.tolist(), f, indent=4, sort_keys=True) + + print("Done!") + return + + +def main(): + parser = argparse.ArgumentParser() + parser.add_argument('--trajs', required=True, + help='File containing trajectory filepaths.') + parser.add_argument("--strs", + help='File containing structure filepaths.') + parser.add_argument("--ref-str", + help='File containing reference structure.') + parser.add_argument('--traj-format', required=True, + help='Trajectory format.') + parser.add_argument("--str-format", help='Structure format.') + parser.add_argument("--ref-str-format", + help='Reference structure format.') + parser.add_argument('-o', '--outfile', + help="Path to the output JSON file") + parser.add_argument('--group', help="Atoms for which RMSD should be" + "calculated in MDAnalysis selection language") + parser.add_argument('--fitting', help="Fitting atoms for alignment" + "prior to RMSD calculation") + parser.add_argument('--start', type=int, + help="First trajectory frame to calculate RMSD") + parser.add_argument('--end', type=int, + help="Last trajectory frame to calculate RMSD") + parser.add_argument('--step', type=int, + help="Frame sampling frequency for RMSD calculation") + args = parser.parse_args() + + calc_rmsd(args.strs, args.trajs, args.ref_str, args.str_format, + args.traj_format, args.ref_str_format, args.outfile, + args.group, args.start, args.end, args.step, args.fitting) + + +if __name__ == "__main__": + main() |
b |
diff -r 000000000000 -r 0f270722aca6 hbonds.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hbonds.py Mon Aug 24 16:27:56 2020 -0400 |
b |
@@ -0,0 +1,72 @@ +#!/usr/bin/env python + +import argparse +import csv +import sys + +import MDAnalysis as mda +import MDAnalysis.analysis.hbonds + +import pandas as pd + + +def parse_command_line(argv): + parser = argparse.ArgumentParser() + parser.add_argument('--itraj', help='input traj') + parser.add_argument('--istr', help='input str') + parser.add_argument('--itrajext', help='input traj ext') + parser.add_argument('--istrext', help='input str ext') + parser.add_argument('--isegid1', help='segid 1') + parser.add_argument('--isegid2', help='segid 2') + parser.add_argument('--idistance', help='cutoff distance') + parser.add_argument('--iangle', help='ctoff angle') + parser.add_argument('--output', help='output') + parser.add_argument('--ofreq_output', help='frequency output') + parser.add_argument('--onumber_output', help='number of hbond output') + parser.add_argument('--otime_output', help='time steps output') + return parser.parse_args() + + +args = parse_command_line(sys.argv) + +selection1 = "segid %s" % args.isegid1 +selection2 = "segid %s" % args.isegid2 +distance = float(args.idistance) +angle = float(args.iangle) + +u = mda.Universe(args.istr, args.itraj, + topology_format=args.istrext, format=args.itrajext) + +h = MDAnalysis.analysis.hbonds.HydrogenBondAnalysis( + u, selection1, selection2, distance=distance, angle=angle) +h.run() +h.generate_table() + +df = pd.DataFrame.from_records(h.table) +df.to_csv(args.output, sep='\t') + +t1 = list(h.count_by_type()) +t2 = list(h.count_by_time()) +t3 = list(h.timesteps_by_type()) + +with open(args.ofreq_output, 'w') as f: + f.write("donor_index\tacceptor_index\t\ + donor_resname\tdonor_resid\tdonor_atom\t\ + hydrogen_atom\tacceptor_reansme\tacceptor_resid\t\ + acceptor_atom\tfrequency\n") + writer = csv.writer(f, delimiter='\t') + writer.writerows(t1) + + +with open(args.onumber_output, 'w') as f1: + f1.write("time_step\tno_of_h_bonds\n") + writer = csv.writer(f1, delimiter='\t') + writer.writerows(t2) + +with open(args.otime_output, 'w') as f2: + f2.write("donor_index\tacceptor_index\t\ + donor_resname\tdonor_resid\tdonor_atom\t\ + hydrogen_atom\tacceptor_reansme\tacceptor_resid\t\ + acceptor_atom\ttime_step\n") + writer = csv.writer(f2, delimiter='\t') + writer.writerows(t3) |
b |
diff -r 000000000000 -r 0f270722aca6 macros.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/macros.xml Mon Aug 24 16:27:56 2020 -0400 |
b |
@@ -0,0 +1,43 @@ +<macros> + <token name="@TOOL_VERSION@">1.0.0</token> + <xml name="requirements"> + <requirements> + <requirement type="package" version="@TOOL_VERSION@">mdanalysis</requirement> + <yield/> + </requirements> + </xml> + <xml name="analysis_inputs"> + <param format="dcd,xtc" name="trajin" type="data" label="DCD/XTC trajectory input" /> + <param format="pdb,gro" name="strin" type="data" label="PDB/GRO input" /> + <yield/> + </xml> + <xml name="sanitizer"> + <sanitizer invalid_char=""> + <valid initial="string.ascii_letters,string.digits" /> + </sanitizer> + <yield/> + </xml> + <xml name="sanitizer_resids"> + <sanitizer invalid_char=""> + <valid initial="string.digits" /> + </sanitizer> + <yield/> + </xml> + <xml name="tests_inputs"> + <param name="trajin" value="test.dcd" ftype="dcd" /> + <param name="strin" value="test.pdb" ftype="pdb" /> + <yield/> + </xml> + <xml name="tests_inputs_gmx"> + <param name="trajin" value="test.xtc" ftype="xtc" /> + <param name="strin" value="test.gro" ftype="gro" /> + <yield/> + </xml> + <xml name="citations"> + <citations> + <citation type="doi">10.1093/bioinformatics/btz107</citation> + <citation type="doi">10.1002/jcc.21787</citation> + <yield/> + </citations> + </xml> +</macros> |
b |
diff -r 000000000000 -r 0f270722aca6 pca_cosine.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pca_cosine.py Mon Aug 24 16:27:56 2020 -0400 |
[ |
@@ -0,0 +1,49 @@ +#!/usr/bin/env python + +import argparse +import csv +import sys + +import MDAnalysis as mda +import MDAnalysis.analysis.pca as pca + +import numpy as np + + +def parse_command_line(argv): + parser = argparse.ArgumentParser() + parser.add_argument('--itraj', help='input traj') + parser.add_argument('--istr', help='input str') + parser.add_argument('--itrajext', help='input traj ext') + parser.add_argument('--istrext', help='input str ext') + parser.add_argument('--icomponents', help='number of principle components') + parser.add_argument('--iindex', help='index of the PC') + parser.add_argument('--output', help='output') + parser.add_argument('--cosout', help='cosine output') + return parser.parse_args() + + +args = parse_command_line(sys.argv) + +u = mda.Universe(args.istr, args.itraj, + topology_format=args.istrext, format=args.itrajext) + +components = int(args.icomponents) +pca_index = int(args.iindex) + +PSF_pca = pca.PCA(u, select='backbone') +PSF_pca.run() +n_pcs = np.where(PSF_pca.cumulated_variance > 0.95)[0][0] +atomgroup = u.select_atoms('backbone') + +pca_space = PSF_pca.transform(atomgroup, n_components=components) +cosine = mda.analysis.pca.cosine_content(pca_space, pca_index) + +PCA = list(pca_space) + +with open(args.output, 'w') as f: + writer = csv.writer(f, delimiter='\t') + writer.writerows(PCA) + +with open(args.cosout, 'w') as f1: + f1.write(str(cosine)) |
b |
diff -r 000000000000 -r 0f270722aca6 ramachandran_auto_protein.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ramachandran_auto_protein.py Mon Aug 24 16:27:56 2020 -0400 |
[ |
@@ -0,0 +1,163 @@ +#!/usr/bin/env python + +import argparse +import base64 +import importlib +import sys + +import MDAnalysis as mda +from MDAnalysis.analysis.dihedrals import Ramachandran + +import h5py + +from jinja2 import Environment, FileSystemLoader + +import matplotlib +import matplotlib.pyplot as plt +import matplotlib.ticker as ticker + +import numpy as np +import numpy.linalg + +import seaborn as sns + + +matplotlib.use('Agg') # noqa + + +def parse_command_line(argv): + parser = argparse.ArgumentParser() + parser.add_argument('--itraj', help='input traj') + parser.add_argument('--istr', help='input str') + parser.add_argument('--itrajext', help='input traj ext') + parser.add_argument('--istrext', help='input str ext') + parser.add_argument('--isegid1', help='segid 1') + parser.add_argument('--iresid1', help='resid start') + parser.add_argument('--iresid2', help='resid end') + parser.add_argument('--iresname', help='resname e.g. ALA') + parser.add_argument('--igroupby', help='groupby names or ids') + parser.add_argument('--itemplatepath', help='template path') + parser.add_argument('--o_plot1', help='MDA Ramachandran plot') + parser.add_argument('--o_plot2', help='Seaborn Ramachandran plot') + parser.add_argument('--o_data1', help='Timeseries in HDF5 format') + parser.add_argument('--o_html1', help='Html overview output of all plots') + return parser.parse_args() + + +args = parse_command_line(sys.argv) + +currentpath = "." +if args.itemplatepath is not None: + currentpath = args.itemplatepath + + +u = mda.Universe(args.istr, args.itraj, + topology_format=args.istrext, format=args.itrajext) +selection = "(segid %s)" % \ + (args.isegid1) + +if args.iresname is not None: + selection = "(segid %s and resname %s)" % \ + (args.isegid1, args.iresname) + +if args.iresid1 is not None and args.iresid2 is not None: + assert(int(args.iresid1) > 0), "ResID numbering starts at 1 for this tool." + assert(int(args.iresid2) > 0), "ResID numbering starts at 1 for this tool." + assert(int(args.iresid2) > int(args.iresid1) + ), "ResID2 must be at least ResID1+1" + selection = "(segid %s and resid %s-%s)" % \ + (args.isegid1, int(args.iresid1), int(args.iresid2)) + if args.iresname is not None: + selection = "(segid %s and resid %s-%s and resname %s)" % \ + (args.isegid1, int(args.iresid1), int(args.iresid2), args.iresname) + +r = u.select_atoms(selection) + +assert(r != u.select_atoms('name thiscannotpossiblyexist') + ), \ + """The selection you specified returns an empty result. + Check segment names and residue ID's. Also check the + structure and trajectory file selected are the correct ones""" + +if args.igroupby is not None: + group_selections = {} # dictionary of selections + if args.igroupby == 'name': + groupby = sorted(list(set(r.resnames))) + for e in groupby: + s = r & u.select_atoms("resname %s" % e) + this_sel = "%s and resname %s" % (selection, e) + group_selections[this_sel] = s + elif args.igroupby == 'id': + groupby = sorted(list(set(r.resids))) + for e in groupby: + s = r & u.select_atoms("resid %s" % e) + this_sel = "%s and resid %s" % (selection, e) + group_selections[this_sel] = s + else: + assert False, ("Invalid argument for igroupby. " + "Only name and id are valid options.") + + +def ramachandran_plot(atomgroup, selection, outputfile1, outputfile2, + image_format='png'): + # plot standard mdanalysis and seaborn 2D with kde + R = Ramachandran(atomgroup).run() + fig, ax = plt.subplots(figsize=plt.figaspect(1)) + R.plot(ax=ax, color='k', marker='.', ref=True) + + a = R.angles.reshape(np.prod(R.angles.shape[:2]), 2) + # open hdf file + with h5py.File(args.o_data1, 'a') as f: + setname = "%s" % (selection) + f["/" + setname + "/ramachandran/phi"] = a[:, 0] + f["/" + setname + "/ramachandran/psi"] = a[:, 1] + plt.tight_layout() + # svg is better but sticking with png for now + plt.savefig(outputfile1, format=image_format) + + sns.reset_defaults() + importlib.reload(plt) + importlib.reload(sns) + with sns.axes_style("white"): + h = sns.jointplot(x=a[:, 0], y=a[:, 1], + kind="kde", space=0) + h.set_axis_labels(r'$\phi$ (deg)', r'$\psi$ (deg)') + h.ax_joint.set_xlim(-180, 180) + h.ax_joint.set_ylim(-180, 180) + h.ax_joint.xaxis.set_major_locator(ticker.MultipleLocator(60)) + h.ax_joint.yaxis.set_major_locator(ticker.MultipleLocator(60)) + plt.savefig(outputfile2, format=image_format, bbox_inches='tight') + + +def get_base64_encoded_image(image_path): + """ encode image to string for use in html later""" + with open(image_path, "rb") as img_file: + return base64.b64encode(img_file.read()).decode('utf-8') + + +plots = [] +if args.igroupby is not None: + for k, v in group_selections.items(): + print(k, v) + try: + ramachandran_plot(v, str(k), "ramachandran1" + + str(k), "ramachandran2" + str(k)) + plots.append({'Name': "%s" % (k), 'plot1': + get_base64_encoded_image("ramachandran1" + str(k)), + 'plot2': get_base64_encoded_image("ramachandran2" + + str(k))}) + except Exception as einstance: + print(type(einstance)) + print(einstance.args) + print(einstance) + +ramachandran_plot(r, selection, args.o_plot1, args.o_plot2) +plots.insert(0, {'Name': selection, 'plot1': get_base64_encoded_image( + args.o_plot1), 'plot2': get_base64_encoded_image(args.o_plot2)}) + +template_environment = Environment(loader=FileSystemLoader( + currentpath), lstrip_blocks=True, trim_blocks=True) +template = template_environment.get_template( + 'ramachandran_auto_protein_html.j2') +with open(args.o_html1, 'w+') as f: + f.write(template.render(title="Ramachandran Plots", plots=plots)) |
b |
diff -r 000000000000 -r 0f270722aca6 ramachandran_auto_protein.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ramachandran_auto_protein.xml Mon Aug 24 16:27:56 2020 -0400 |
[ |
@@ -0,0 +1,127 @@ +<tool id="mdanalysis_ramachandran_protein" name="Ramachandran Analysis" version="@TOOL_VERSION@+galaxy@GALAXY_VERSION@"> + <description>- Ramachandran plot for proteins</description> + <macros> + <import>macros.xml</import> + <token name="@GALAXY_VERSION@">0</token> + </macros> + <expand macro="requirements"> + <requirement type="package" version="0.10.0">seaborn</requirement> + <requirement type="package" version="2.10.0">h5py</requirement> + <requirement type="package" version="2.11.1">jinja2</requirement> + </expand> + <command detect_errors="exit_code"><![CDATA[ + python '$__tool_directory__/ramachandran_auto_protein.py' + --itraj '$trajin' + --istr '$strin' + --itrajext '$trajin.ext' + --istrext '$strin.ext' + --isegid1 '$segid1' + #if $resid1 and $resid2: + --iresid1 '$resid1' + --iresid2 '$resid2' + #end if + #if $resname: + --iresname '$resname' + #end if + --itemplatepath '$__tool_directory__' + #if $groupby: + --igroupby '$groupby' + #end if + --o_plot1 '$o_plot1' + --o_plot2 '$o_plot2' + --o_data1 '$o_data1' + --o_html1 '$o_html1' + 2>&1 +]]></command> + <inputs> + <expand macro="analysis_inputs" /> + <param name="segid1" type="text" value="PROA" label="Segment ID of the protein" help="A valid segment ID selection for the current molecular system"> + <validator type="regex" message="Maximum of 8 characters allowed.">^[a-zA-Z0-9]{1,8}$</validator> + </param> + <param name="groupby" type="select" optional="true" label="Groupby analysis" help="Optional, create a groupby of the selection using residue name or id"> + <option value="name">ResidueName</option> + <option value="id">ResidueID</option> + </param> + <param name="resname" optional="true" type="text" label="Residue Name" help="Optional, choose a residue name to refine the selection, e.g. ALA"> + <validator type="regex" message="Maximum of 8 characters allowed.">^[a-zA-Z0-9]{1,8}$</validator> + </param> + <param name="resid1" optional="true" type="text" label="start Residue ID" help="Optional, choose a residue ID to refine the selection, e.g. 5"> + <validator type="regex" message="Maximum of 6 digits allowed.">^[0-9]{1,6}$</validator> + </param> + <param name="resid2" optional="true" type="text" label="end Residue ID" help="Optional, choose a residue ID to refine the selection, e.g. 10"> + <validator type="regex" message="Maximum of 6 digits allowed.">^[0-9]{1,6}$</validator> + </param> + </inputs> + <outputs> + <data format="png" name="o_plot1" label="MDAnalysis Ramachandran plot" /> + <data format="png" name="o_plot2" label="Seaborn Ramachandran plot" /> + <data format="h5" name="o_data1" label="Ramachandran in HDF5 format" /> + <data format="html" name="o_html1" label="Ramachandran plot summary" /> + </outputs> + <tests> + <test> + <param name="trajin" value="test.dcd" ftype="dcd" /> + <param name="strin" value="test.pdb" ftype="pdb" /> + <param name="segid1" value="PRO" /> + <param name="groupby" value="name" /> + <output name="o_html1"> + <assert_contents> + <has_text text="table" /> + <has_text text="(segid PRO) and resname MET" /> + <has_text text="(segid PRO) and resname VAL" /> + </assert_contents> + </output> + <output name="o_plot1"> + <assert_contents> + <has_size value="53682" delta="3000" /> + </assert_contents> + </output> + <output name="o_plot2"> + <assert_contents> + <has_size value="31740" delta="3000" /> + </assert_contents> + </output> + <output name="o_data1"> + <assert_contents> + <has_size value="293824" delta="3000" /> + </assert_contents> + </output> + </test> + </tests> + <help><![CDATA[ +.. class:: infomark + +**What it does** + +Creates a Ramachandran plot for proteins. All protein [φ,ψ] angles for a given segment ID are automatically selected for an entire trajectory and an averaged Ramachandran plot is returned. Optionally the selection can be refined by residue ID or residue name. Optionally the average Ramachandran plot can be deconvoluted and returned grouped by residue name or residue ID. + + +_____ + + +.. class:: infomark + +**Input** + + - Structure file (PDB) + - Trajectory file (DCD). + - Segment ID + - Optionally: Group data by residue name or residue ID + - Optionally: refine selection by residue ID range or residue name (e.g. ALA) + +Note that a MDAnalysis 'segment' is a larger organizational unit, for example one protein or all the solvent molecules or simply the whole system. + +_____ + + +.. class:: infomark + +**Output** + + - Image (as png) of the Ramachandran from MDanalyis with the allowed regions as a background. + - Image (as png) of the Ramachandran plot as a distribution. + - Data (H5 format). All phi, psi timeseries raw data in HDF5 format. + - All plot images tabulated (in html). To view the HTML in Galaxy this tool must be added to the allowlist by a Galaxy Admin. + ]]></help> + <expand macro="citations" /> +</tool> |
b |
diff -r 000000000000 -r 0f270722aca6 ramachandran_auto_protein_html.j2 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ramachandran_auto_protein_html.j2 Mon Aug 24 16:27:56 2020 -0400 |
[ |
@@ -0,0 +1,25 @@ +<html> + +<head> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> + <title>{{ title }}</title> +</head> + +<body> + <table> + <tr> + <th>Selection</th> + <th>Ramachandran scatter plot</th> + <th>Ramachandran histogram </th> + </tr> + {% for plot in plots %} + <tr> + <td>{{ plot['Name'] }}</td> + <td style="vertical-align:center"><img src="data:image/png;base64,{{plot['plot1']}}" /> </td> + <td style="vertical-align:center"><img src="data:image/png;base64,{{plot['plot2']}}" /> </td> + </tr> + {% endfor %} + </table> +</body> + +</html> |
b |
diff -r 000000000000 -r 0f270722aca6 ramachandran_plots.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ramachandran_plots.py Mon Aug 24 16:27:56 2020 -0400 |
[ |
@@ -0,0 +1,112 @@ +#!/usr/bin/env python + +import argparse +import csv +import sys +from collections import namedtuple + +import MDAnalysis as mda +from MDAnalysis.lib.distances import calc_dihedrals + +import matplotlib +import matplotlib.pyplot as plt +import matplotlib.ticker as ticker + + +import numpy as np + +import seaborn as sns + + +import yaml + +matplotlib.use('Agg') # noqa + + +def parse_command_line(argv): + parser = argparse.ArgumentParser() + parser.add_argument('--itraj', help='input traj') + parser.add_argument('--istr', help='input str') + parser.add_argument('--itrajext', help='input traj ext') + parser.add_argument('--istrext', help='input str ext') + parser.add_argument('--iyml', help='input in yml format') + parser.add_argument('--output', help='output') + parser.add_argument('--oramachandran_plot', help='dihedral plot') + return parser.parse_args() + + +args = parse_command_line(sys.argv) + +with open(args.iyml) as file: + params = yaml.load(file, Loader=yaml.FullLoader) + +Dihedral = namedtuple( + 'Dihedral', ['atom1', 'atom2', 'atom3', 'atom4']) + +for k, v in params.items(): + for a in ['phi', 'psi']: + assert (a in v), "Key %s is missing in inputs: %s " % (a, k) + atoms = [] + for b in ['atom1', 'atom2', 'atom3', 'atom4']: + assert (b in v[a]), "Key %s is missing in inputs: %s %s" % ( + b, k, a) + for c in ['segid', 'resid', 'name']: + assert (c in v[a][b]), \ + "Key %s is missing in inputs: %s %s %s " % (c, k, a, b) + atoms.append("(segid %s and resid %s and name %s)" % + (v[a][b]['segid'], v[a][b]['resid'], v[a][b]['name'])) + print(atoms) + if a == 'phi': + dihe_phi = Dihedral(atoms[0], atoms[1], atoms[2], atoms[3]) + if a == 'psi': + dihe_psi = Dihedral(atoms[0], atoms[1], atoms[2], atoms[3]) + +# order of dihedral atom is the crystallographic definition +# (see glycanstructure.org) + +assert(dihe_phi), "phi dihedral doesn't exist" +assert(dihe_psi), "psi dihedral doesn't exist" + + +def calc_torsion(dihedral): + """atom 1 -4 are valid atom selections. torsion in degrees is returned""" + A = u.select_atoms(dihedral.atom1).positions + B = u.select_atoms(dihedral.atom2).positions + C = u.select_atoms(dihedral.atom3).positions + D = u.select_atoms(dihedral.atom4).positions + + dihe = calc_dihedrals(A, B, C, D) + return np.rad2deg(dihe) + + +u = mda.Universe(args.istr, args.itraj, + topology_format=args.istrext, format=args.itrajext) + +phi_trajdata = np.array( + [(u.trajectory.frame, calc_torsion(dihe_phi)) for ts in u.trajectory]) +psi_trajdata = np.array( + [(u.trajectory.frame, calc_torsion(dihe_psi)) for ts in u.trajectory]) + +print(phi_trajdata, psi_trajdata) + +phi_frame, phi_series = phi_trajdata.T +psi_frame, psi_series = psi_trajdata.T + +phi_series = np.concatenate(phi_series, axis=0) +psi_series = np.concatenate(psi_series, axis=0) + +zip(phi_frame, phi_series, psi_series) + +with open(args.output, 'w') as f: + writer = csv.writer(f, delimiter='\t') + writer.writerows(zip(phi_frame, phi_series, psi_series)) + +with sns.axes_style("white"): + h = sns.jointplot(x=phi_series, y=psi_series, + kind="kde", space=0, legend=True) + h.set_axis_labels(r'$\phi$ (degrees)', r'$\psi$ (degrees)') + h.ax_joint.set_xlim(-180, 180) + h.ax_joint.set_ylim(-180, 180) + h.ax_joint.xaxis.set_major_locator(ticker.MultipleLocator(60)) + h.ax_joint.yaxis.set_major_locator(ticker.MultipleLocator(60)) + plt.savefig(args.oramachandran_plot, format='png', bbox_inches='tight') |
b |
diff -r 000000000000 -r 0f270722aca6 rdf.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/rdf.py Mon Aug 24 16:27:56 2020 -0400 |
[ |
@@ -0,0 +1,72 @@ +#!/usr/bin/env python + +import argparse +import csv +import sys + +import MDAnalysis as mda +from MDAnalysis.analysis.rdf import InterRDF + +import matplotlib +import matplotlib.pyplot as plt + +import numpy as np + +matplotlib.use('Agg') # noqa + + +def parse_command_line(argv): + parser = argparse.ArgumentParser() + parser.add_argument('--itraj', help='input traj') + parser.add_argument('--istr', help='input str') + parser.add_argument('--itrajext', help='input traj ext') + parser.add_argument('--istrext', help='input str ext') + parser.add_argument('--isegid1', help='segid 1') + parser.add_argument('--iresid1', help='resid 1') + parser.add_argument('--iname1', help='name 1') + parser.add_argument('--isegid2', help='segid 2') + parser.add_argument('--iresid2', help='resid 2') + parser.add_argument('--iname2', help='name 2') + parser.add_argument('--inbins', help='Number of bins in the histogram') + parser.add_argument('--istart', help='Starting Point') + parser.add_argument('--iend', help='End point') + parser.add_argument('--output', help='output') + parser.add_argument('--ordf_plot', help='RDF plot') + return parser.parse_args() + + +args = parse_command_line(sys.argv) + +atom1 = "(segid %s and resid %s and name %s)" % \ + (args.isegid1, args.iresid1, args.iname1) +atom2 = "(segid %s and resid %s and name %s)" % \ + (args.isegid2, args.iresid2, args.iname2) +bins = int(args.inbins) +start = float(args.istart) +end = float(args.iend) + +u = mda.Universe(args.istr, args.itraj, + topology_format=args.istrext, format=args.itrajext) +x = u.select_atoms(atom1) +y = u.select_atoms(atom2) + +rdf = InterRDF(x, y, nbins=bins, range=(start, end)) +rdf.run() +bins = rdf.bins +bins = np.around(bins, decimals=3) +RDF = rdf.rdf +zip(bins, RDF) + +with open(args.output, 'w') as f: + writer = csv.writer(f, delimiter='\t') + writer.writerows(zip(bins, RDF)) + +with open(args.output) as f: + g = [xtmp.strip() for xtmp in f] + data = [tuple(map(float, xtmp.split())) for xtmp in g[0:]] + time = [xtmp[0] for xtmp in data] + rdf = [xtmp[1] for xtmp in data] + plt.plot(time, rdf) + plt.xlabel(r'r ($\AA$)') + plt.ylabel('g(r)') + plt.savefig(args.ordf_plot, format='png') |
b |
diff -r 000000000000 -r 0f270722aca6 test-data/Angle_Analysis_Plot.png |
b |
Binary file test-data/Angle_Analysis_Plot.png has changed |
b |
diff -r 000000000000 -r 0f270722aca6 test-data/Angle_Analysis_raw_data.tabular --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/Angle_Analysis_raw_data.tabular Mon Aug 24 16:27:56 2020 -0400 |
b |
@@ -0,0 +1,15 @@ +0.0 70.84919180880273 +1.0 70.97155495136695 +2.0 70.37097279938007 +3.0 70.12692388497567 +4.0 71.15946406922332 +5.0 71.91362565497833 +6.0 71.91268728348935 +7.0 71.97418402125982 +8.0 72.1521609490865 +9.0 72.3083065219282 +10.0 71.5291313235259 +11.0 81.56576116363512 +12.0 73.46330915394758 +13.0 67.04185741201445 +14.0 70.0710549275429 |
b |
diff -r 000000000000 -r 0f270722aca6 test-data/Dihedral_Analysis_Plot.png |
b |
Binary file test-data/Dihedral_Analysis_Plot.png has changed |
b |
diff -r 000000000000 -r 0f270722aca6 test-data/Dihedral_analysis_raw_data.tabular --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/Dihedral_analysis_raw_data.tabular Mon Aug 24 16:27:56 2020 -0400 |
b |
@@ -0,0 +1,15 @@ +0 -61.75347431106646 +1 -63.57940223575045 +2 -64.3468375822089 +3 -64.2932006449013 +4 -66.17815780069928 +5 -64.57418410935712 +6 -63.95470182210953 +7 -63.215898370961455 +8 -63.05227933072821 +9 -63.350881174296354 +10 -64.12889787645014 +11 -59.11099982465991 +12 -76.10678081593274 +13 -74.55530125465415 +14 -71.01850912317343 |
b |
diff -r 000000000000 -r 0f270722aca6 test-data/Distance_Analysis_Plot.png |
b |
Binary file test-data/Distance_Analysis_Plot.png has changed |
b |
diff -r 000000000000 -r 0f270722aca6 test-data/Distance_Analysis_raw_data.tabular --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/Distance_Analysis_raw_data.tabular Mon Aug 24 16:27:56 2020 -0400 |
b |
@@ -0,0 +1,15 @@ +0 3.8900816 +1 3.7835152 +2 3.7693398 +3 3.7851014 +4 3.6331043 +5 3.6525042 +6 3.684632 +7 3.7285593 +8 3.7090275 +9 3.6880326 +10 3.7261977 +11 3.4300115 +12 3.3902843 +13 3.3456264 +14 3.2583153 |
b |
diff -r 000000000000 -r 0f270722aca6 test-data/RDF_Analysis_Plot.png |
b |
Binary file test-data/RDF_Analysis_Plot.png has changed |
b |
diff -r 000000000000 -r 0f270722aca6 test-data/RDF_raw_data.tabular --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/RDF_raw_data.tabular Mon Aug 24 16:27:56 2020 -0400 |
b |
@@ -0,0 +1,100 @@ +0.025 0.0 +0.075 0.0 +0.125 0.0 +0.175 0.0 +0.225 0.0 +0.275 0.0 +0.325 0.0 +0.375 0.0 +0.425 0.0 +0.475 0.0 +0.525 0.0 +0.575 0.0 +0.625 0.0 +0.675 0.0 +0.725 0.0 +0.775 0.0 +0.825 0.0 +0.875 0.0 +0.925 0.0 +0.975 0.0 +1.025 0.0 +1.075 0.0 +1.125 0.0 +1.175 0.0 +1.225 0.0 +1.275 0.0 +1.325 0.0 +1.375 0.0 +1.425 0.0 +1.475 0.0 +1.525 0.0 +1.575 0.0 +1.625 0.0 +1.675 0.0 +1.725 0.0 +1.775 0.0 +1.825 0.0 +1.875 0.0 +1.925 0.0 +1.975 0.0 +2.025 0.0 +2.075 0.0 +2.125 0.0 +2.175 0.0 +2.225 0.0 +2.275 0.0 +2.325 0.0 +2.375 0.0 +2.425 0.0 +2.475 0.0 +2.525 0.0 +2.575 0.0 +2.625 0.0 +2.675 0.0 +2.725 0.0 +2.775 0.0 +2.825 0.0 +2.875 0.0 +2.925 0.0 +2.975 0.0 +3.025 0.0 +3.075 0.0 +3.125 0.0 +3.175 0.0 +3.225 0.0 +3.275 6336.434022284689 +3.325 6147.300995012225 +3.375 5966.511251797981 +3.425 5793.58118212878 +3.475 0.0 +3.525 0.0 +3.575 0.0 +3.625 5171.934954710286 +3.675 15096.484661102078 +3.725 14693.935913907942 +3.775 14307.27600154838 +3.825 0.0 +3.875 4526.124773895681 +3.925 0.0 +3.975 0.0 +4.025 0.0 +4.075 0.0 +4.125 0.0 +4.175 0.0 +4.225 0.0 +4.275 0.0 +4.325 0.0 +4.375 0.0 +4.425 0.0 +4.475 0.0 +4.525 0.0 +4.575 0.0 +4.625 0.0 +4.675 0.0 +4.725 0.0 +4.775 0.0 +4.825 0.0 +4.875 0.0 +4.925 0.0 +4.975 0.0 |
b |
diff -r 000000000000 -r 0f270722aca6 test-data/Ramachandran_Plot_raw_data.tabular --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/Ramachandran_Plot_raw_data.tabular Mon Aug 24 16:27:56 2020 -0400 |
b |
@@ -0,0 +1,15 @@ +0 -144.50369390751567 97.28315803510958 +1 -140.8182020539229 98.03359173250509 +2 -140.72994628351444 97.24540656140032 +3 -139.74848490172678 96.50804547826581 +4 -134.87886646306 95.11565955448816 +5 -133.72523437825183 98.27907111162767 +6 -132.95986510869454 98.00598700434969 +7 -132.83978048218802 97.90284983563569 +8 -132.446606581017 97.95362964393432 +9 -132.8171707044048 98.22639981540117 +10 -129.18708154562577 93.19031937895272 +11 -138.70826130463465 99.35902431554985 +12 -134.31372026825582 86.39732109628024 +13 -135.62845675103858 89.17557531169159 +14 -151.1966272020228 101.09732806451846 |
b |
diff -r 000000000000 -r 0f270722aca6 test-data/Ramachandran_Plot_raw_data_gmx.tabular --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/Ramachandran_Plot_raw_data_gmx.tabular Mon Aug 24 16:27:56 2020 -0400 |
b |
@@ -0,0 +1,15 @@ +0 -144.6049403672638 97.68547741778757 +1 -141.28378752267525 97.77436430526272 +2 -140.5507581701893 96.64897577753301 +3 -139.80360840706982 96.77167935748881 +4 -134.73236008867292 95.35031471736332 +5 -133.2788812847167 97.90764978970712 +6 -132.85758534848696 97.74270020478778 +7 -132.92861986639113 98.03936669749623 +8 -132.36160579612704 97.75307833579126 +9 -133.24942867028537 98.47767719548273 +10 -129.07281864740457 93.50325320406353 +11 -138.52555276641212 98.65922847590556 +12 -134.17197735904452 86.3334209333448 +13 -135.7743412592041 89.34890663035344 +14 -151.15173106037906 101.47282449338631 |
b |
diff -r 000000000000 -r 0f270722aca6 test-data/list1.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/list1.txt Mon Aug 24 16:27:56 2020 -0400 |
b |
@@ -0,0 +1,1 @@ +resid 212 and name OE2 |
b |
diff -r 000000000000 -r 0f270722aca6 test-data/list2.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/list2.txt Mon Aug 24 16:27:56 2020 -0400 |
b |
@@ -0,0 +1,1 @@ +resid 3 and name C1 |
b |
diff -r 000000000000 -r 0f270722aca6 test-data/test.dcd |
b |
Binary file test-data/test.dcd has changed |
b |
diff -r 000000000000 -r 0f270722aca6 test-data/test.gro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/test.gro Mon Aug 24 16:27:56 2020 -0400 |
b |
b'@@ -0,0 +1,61652 @@\n+Glycine aRginine prOline Methionine Alanine Cystine Serine\n+61649\n+ 2SER N 1 2.371 0.440 0.529\n+ 2SER HT1 2 2.277 0.401 0.505\n+ 2SER HT2 3 2.399 0.406 0.623\n+ 2SER HT3 4 2.441 0.402 0.461\n+ 2SER CA 5 2.369 0.591 0.523\n+ 2SER HA 6 2.305 0.626 0.603\n+ 2SER CB 7 2.513 0.648 0.547\n+ 2SER HB1 8 2.550 0.611 0.645\n+ 2SER HB2 9 2.511 0.759 0.552\n+ 2SER OG 10 2.603 0.606 0.444\n+ 2SER HG1 11 2.693 0.638 0.465\n+ 2SER C 12 2.309 0.645 0.394\n+ 2SER O 13 2.229 0.574 0.331\n+ 3ALA N 14 2.342 0.767 0.352\n+ 3ALA HN 15 2.411 0.824 0.396\n+ 3ALA CA 16 2.294 0.828 0.229\n+ 3ALA HA 17 2.242 0.755 0.168\n+ 3ALA CB 18 2.201 0.948 0.258\n+ 3ALA HB1 19 2.251 1.022 0.324\n+ 3ALA HB2 20 2.109 0.913 0.308\n+ 3ALA HB3 21 2.172 0.998 0.164\n+ 3ALA C 22 2.415 0.875 0.151\n+ 3ALA O 23 2.517 0.908 0.207\n+ 4CYS N 24 2.401 0.875 0.017\n+ 4CYS HN 25 2.314 0.848 -0.026\n+ 4CYS CA 26 2.503 0.915 -0.077\n+ 4CYS HA 27 2.577 0.976 -0.027\n+ 4CYS CB 28 2.570 0.795 -0.148\n+ 4CYS HB1 29 2.626 0.829 -0.238\n+ 4CYS HB2 30 2.491 0.726 -0.185\n+ 4CYS SG 31 2.689 0.708 -0.041\n+ 4CYS C 32 2.434 1.003 -0.177\n+ 4CYS O 33 2.310 1.011 -0.185\n+ 5THR N 34 2.513 1.082 -0.251\n+ 5THR HN 35 2.612 1.073 -0.243\n+ 5THR CA 36 2.463 1.189 -0.334\n+ 5THR HA 37 2.359 1.168 -0.361\n+ 5THR CB 38 2.471 1.327 -0.267\n+ 5THR HB 39 2.436 1.406 -0.337\n+ 5THR OG1 40 2.605 1.358 -0.227\n+ 5THR HG1 41 2.654 1.352 -0.310\n+ 5THR CG2 42 2.379 1.330 -0.145\n+ 5THR HG21 43 2.413 1.259 -0.066\n+ 5THR HG22 44 2.276 1.300 -0.175\n+ 5THR HG23 45 2.375 1.431 -0.100\n+ 5THR C 46 2.539 1.190 -0.465\n+ 5THR O 47 2.581 1.296 -0.511\n+ 6LEU N 48 2.559 1.072 -0.527\n+ 6LEU HN 49 2.522 0.985 -0.489\n+ 6LEU CA 50 2.613 1.064 -0.662\n+ 6LEU HA 51 2.693 1.135 -0.673\n+ 6LEU CB 52 2.664 0.921 -0.694\n+ 6LEU HB1 53 2.704 0.919 -0.798\n+ 6LEU HB2 54 2.578 0.850 -0.687\n+ 6LEU CG 55 2.774 0.867 -0.600\n+ 6LEU HG 56 2.733 0.865 -0.496\n+ 6LEU CD1 57 2.810 0.722 -0.638\n+ 6LEU HD11 58 2.849 0.716 -0.741\n+ 6LEU HD12 59 2.718 0.658 -0.631\n+ 6LEU HD13 60 2.885 0.680 -0.568\n+ 6LEU CD2 61 2.900 0.954 -0.602\n+ 6LEU HD21 62 2.877 1.056 -0.564\n+ 6LEU HD22 63 2.939 0.964 -0.705\n+ 6LEU HD23 64 2.979 0.910 -0.538\n+ 6LEU C 65 2.505 1.102 -0.763\n+ 6LEU O 66 2.529 1.158 -0.868\n+ 7GLN N 67 2.378 1.075 -0.725\n+ 7GLN HN 68 2.357 1.024 -0.641\n+ 7GLN CA 69 2.262 1.113 -0.801\n+ 7GLN HA 70 2.291 1.166 -0.890\n+ 7GLN CB 71 2.178 0.990 -0.840\n+ 7GLN HB1 72 2.098 1.021 -0.910\n+ 7GLN HB2 73 2.128 0.948 -0.749\n+ 7GLN CG 74 2.265 0.878 -0.901\n+ 7GLN HG1 75 2.333 0.834 -0.825\n+ 7GLN HG2 76 2.327 0.921 -0.984\n+ 7GLN CD 77 2.181 0.767 -0.962\n+ 7GLN OE1 78 2.190 0.744 -1.082\n+ 7GLN NE2 79 2.097 0.701 -0.879\n+ 7GLN HE21 80 2.085 0.731 -0.785\n+ 7GLN HE22 81 2.035 0.634 -0.921\n+ 7GLN C 82 2.183 1.207 -0.712\n+ 7GLN O 83 2.176 1.194 -0.590\n+ 8SER N 84 2.125 1.313 -0.770\n+ 8SER HN 85 2.120 1.326 -0.868\n+ '..b'68 1.454\n+ 42SOD SOD61564 -0.047 2.795 -1.594\n+ 43SOD SOD61565 -3.119 1.785 -0.175\n+ 44SOD SOD61566 3.692 3.565 2.568\n+ 45SOD SOD61567 1.160 -2.677 0.405\n+ 46SOD SOD61568 2.182 2.098 -4.358\n+ 47SOD SOD61569 2.499 -3.552 3.622\n+ 48SOD SOD61570 -3.150 2.637 2.545\n+ 49SOD SOD61571 -3.611 -1.369 -0.304\n+ 50SOD SOD61572 3.179 4.217 -1.914\n+ 51SOD SOD61573 -1.544 3.385 3.985\n+ 52SOD SOD61574 3.906 3.226 3.286\n+ 53SOD SOD61575 -1.400 1.258 -2.542\n+ 54SOD SOD61576 0.624 4.043 2.421\n+ 55SOD SOD61577 -0.572 -3.952 2.807\n+ 56SOD SOD61578 -2.287 2.496 -1.486\n+ 57SOD SOD61579 -4.296 -1.353 4.117\n+ 58SOD SOD61580 4.009 2.333 -1.543\n+ 59SOD SOD61581 3.981 3.781 -3.393\n+ 60SOD SOD61582 -2.801 -0.902 2.131\n+ 61SOD SOD61583 0.054 2.141 -3.123\n+ 62SOD SOD61584 1.742 -1.695 -3.684\n+ 63SOD SOD61585 -1.328 3.677 3.172\n+ 64SOD SOD61586 2.023 -1.550 1.871\n+ 65SOD SOD61587 -3.781 1.811 2.706\n+ 66SOD SOD61588 -1.564 0.724 2.624\n+ 67SOD SOD61589 -1.457 -1.438 1.916\n+ 68SOD SOD61590 3.938 -1.495 -0.104\n+ 69SOD SOD61591 -4.177 0.685 -3.156\n+ 70SOD SOD61592 -3.475 -2.557 3.364\n+ 71SOD SOD61593 3.843 -1.704 1.945\n+ 72SOD SOD61594 -3.065 1.131 -3.142\n+ 73SOD SOD61595 2.911 3.091 3.254\n+ 74SOD SOD61596 -0.146 -3.447 -3.468\n+ 75SOD SOD61597 4.142 1.150 2.128\n+ 1CLA CLA61598 3.723 3.931 -0.432\n+ 2CLA CLA61599 0.598 -3.410 -1.411\n+ 3CLA CLA61600 0.305 -4.033 0.027\n+ 4CLA CLA61601 -2.918 -1.991 -2.129\n+ 5CLA CLA61602 3.212 2.681 -1.461\n+ 6CLA CLA61603 -1.276 3.890 3.970\n+ 7CLA CLA61604 -4.135 -0.631 -2.109\n+ 8CLA CLA61605 -4.010 1.992 2.188\n+ 9CLA CLA61606 -3.787 -1.064 -2.665\n+ 10CLA CLA61607 -2.251 4.155 1.278\n+ 11CLA CLA61608 3.522 3.373 -3.509\n+ 12CLA CLA61609 -4.010 0.565 -0.240\n+ 13CLA CLA61610 3.902 -1.240 -4.037\n+ 14CLA CLA61611 1.826 -3.945 2.374\n+ 15CLA CLA61612 0.618 4.143 -3.510\n+ 16CLA CLA61613 2.436 1.511 3.939\n+ 17CLA CLA61614 0.689 2.163 -1.864\n+ 18CLA CLA61615 2.174 0.614 3.695\n+ 19CLA CLA61616 3.731 -0.836 3.639\n+ 20CLA CLA61617 -0.300 -2.083 2.310\n+ 21CLA CLA61618 0.286 1.863 -2.782\n+ 22CLA CLA61619 0.444 -1.592 4.280\n+ 23CLA CLA61620 -3.682 -0.965 2.751\n+ 24CLA CLA61621 3.059 -2.653 -1.385\n+ 25CLA CLA61622 0.268 1.480 3.096\n+ 26CLA CLA61623 2.985 -1.145 -1.289\n+ 27CLA CLA61624 4.257 -1.638 3.915\n+ 28CLA CLA61625 2.109 2.268 2.707\n+ 29CLA CLA61626 3.148 2.184 -0.946\n+ 30CLA CLA61627 -4.279 3.311 -4.200\n+ 31CLA CLA61628 4.121 2.646 2.804\n+ 32CLA CLA61629 3.133 -2.321 3.087\n+ 33CLA CLA61630 -1.188 2.475 1.768\n+ 34CLA CLA61631 4.251 4.197 2.967\n+ 35CLA CLA61632 -2.115 -2.591 4.099\n+ 36CLA CLA61633 -1.664 3.340 -2.049\n+ 37CLA CLA61634 2.401 1.685 0.376\n+ 38CLA CLA61635 -0.304 -2.623 -0.695\n+ 39CLA CLA61636 -2.524 -2.953 -1.453\n+ 40CLA CLA61637 3.494 -2.888 -3.669\n+ 41CLA CLA61638 -3.591 -0.671 0.327\n+ 42CLA CLA61639 -3.097 0.461 -3.295\n+ 43CLA CLA61640 -0.581 1.524 4.242\n+ 44CLA CLA61641 3.940 1.881 -1.383\n+ 45CLA CLA61642 -1.581 2.921 -3.738\n+ 46CLA CLA61643 0.009 -3.649 -3.486\n+ 47CLA CLA61644 -1.288 -4.010 3.837\n+ 48CLA CLA61645 -2.419 1.919 3.696\n+ 49CLA CLA61646 1.622 -1.819 -2.941\n+ 50CLA CLA61647 3.465 -0.771 -3.287\n+ 51CLA CLA61648 -2.032 -3.900 0.685\n+ 52CLA CLA61649 -2.845 0.061 -2.584\n+ 0.00000 0.00000 0.00000\n' |
b |
diff -r 000000000000 -r 0f270722aca6 test-data/test.pdb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/test.pdb Mon Aug 24 16:27:56 2020 -0400 |
b |
b'@@ -0,0 +1,61655 @@\n+REMARK FILENAME: MINIMIZE.INP \n+REMARK PURPOSE: SETUP PERIODIC BOUNDARY CONDITIONS AND ENERGY MINIMIZATION \n+REMARK AUTHOR: THARINDU SENAPATHI \n+REMARK DATE: 9/25/18 11:16:58 CREATED BY USER: galaxy \n+ATOM 1 N SER 2 23.711 4.396 5.292 1.00 0.00 PRO \n+ATOM 2 HT1 SER 2 22.774 4.012 5.048 1.00 0.00 PRO \n+ATOM 3 HT2 SER 2 23.993 4.056 6.233 1.00 0.00 PRO \n+ATOM 4 HT3 SER 2 24.412 4.016 4.606 1.00 0.00 PRO \n+ATOM 5 CA SER 2 23.692 5.909 5.232 1.00 0.00 PRO \n+ATOM 6 HA SER 2 23.045 6.255 6.026 1.00 0.00 PRO \n+ATOM 7 CB SER 2 25.129 6.479 5.468 1.00 0.00 PRO \n+ATOM 8 HB1 SER 2 25.502 6.112 6.451 1.00 0.00 PRO \n+ATOM 9 HB2 SER 2 25.108 7.590 5.522 1.00 0.00 PRO \n+ATOM 10 OG SER 2 26.032 6.062 4.445 1.00 0.00 PRO \n+ATOM 11 HG1 SER 2 26.928 6.382 4.649 1.00 0.00 PRO \n+ATOM 12 C SER 2 23.087 6.445 3.945 1.00 0.00 PRO \n+ATOM 13 O SER 2 22.287 5.741 3.315 1.00 0.00 PRO \n+ATOM 14 N ALA 3 23.417 7.674 3.515 1.00 0.00 PRO \n+ATOM 15 HN ALA 3 24.112 8.236 3.961 1.00 0.00 PRO \n+ATOM 16 CA ALA 3 22.937 8.280 2.293 1.00 0.00 PRO \n+ATOM 17 HA ALA 3 22.421 7.554 1.681 1.00 0.00 PRO \n+ATOM 18 CB ALA 3 22.012 9.476 2.583 1.00 0.00 PRO \n+ATOM 19 HB1 ALA 3 22.509 10.220 3.241 1.00 0.00 PRO \n+ATOM 20 HB2 ALA 3 21.086 9.125 3.082 1.00 0.00 PRO \n+ATOM 21 HB3 ALA 3 21.718 9.984 1.638 1.00 0.00 PRO \n+ATOM 22 C ALA 3 24.147 8.753 1.509 1.00 0.00 PRO \n+ATOM 23 O ALA 3 25.174 9.077 2.073 1.00 0.00 PRO \n+ATOM 24 N CYS 4 24.005 8.749 0.169 1.00 0.00 PRO \n+ATOM 25 HN CYS 4 23.142 8.478 -0.258 1.00 0.00 PRO \n+ATOM 26 CA CYS 4 25.025 9.149 -0.766 1.00 0.00 PRO \n+ATOM 27 HA CYS 4 25.769 9.761 -0.272 1.00 0.00 PRO \n+ATOM 28 CB CYS 4 25.700 7.948 -1.484 1.00 0.00 PRO \n+ATOM 29 HB1 CYS 4 26.256 8.290 -2.382 1.00 0.00 PRO \n+ATOM 30 HB2 CYS 4 24.907 7.257 -1.851 1.00 0.00 PRO \n+ATOM 31 SG CYS 4 26.887 7.076 -0.411 1.00 0.00 PRO \n+ATOM 32 C CYS 4 24.341 10.034 -1.774 1.00 0.00 PRO \n+ATOM 33 O CYS 4 23.104 10.106 -1.853 1.00 0.00 PRO \n+ATOM 34 N THR 5 25.135 10.817 -2.507 1.00 0.00 PRO \n+ATOM 35 HN THR 5 26.125 10.731 -2.426 1.00 0.00 PRO \n+ATOM 36 CA THR 5 24.625 11.886 -3.343 1.00 0.00 PRO \n+ATOM 37 HA THR 5 23.595 11.683 -3.608 1.00 0.00 PRO \n+ATOM 38 CB THR 5 24.715 13.266 -2.674 1.00 0.00 PRO \n+ATOM 39 HB THR 5 24.358 14.060 -3.371 1.00 0.00 PRO \n+ATOM 40 OG1 THR 5 26.051 13.580 -2.272 1.00 0.00 PRO \n+ATOM 41 HG1 THR 5 26.535 13.523 -3.104 1.00 0.00 PRO \n+ATOM 42 CG2 THR 5 23.787 13.298 -1.447 1.00 0.00 PRO \n+ATOM 43 HG21 THR 5 24.126 12.589 -0.663 1.00 0.00 PRO \n+ATOM 44 HG22 THR 5 22.759 13.003 -1.749 1.00 0.00 PRO \n+ATOM 45 HG23 THR 5 23.752 14.313 -1.003 1.00 0.00 PRO \n+ATOM 46 C THR 5 25.385 11.902 -4.645 1.00 0.00 PRO \n+ATOM 47 O THR 5 25.810'..b' CLA CLA 2 5.975 -34.097 -14.115 1.00 0.00 CLA \n+ATOM 61600 CLA CLA 3 3.049 -40.330 0.268 1.00 0.00 CLA \n+ATOM 61601 CLA CLA 4 -29.182 -19.908 -21.287 1.00 0.00 CLA \n+ATOM 61602 CLA CLA 5 32.119 26.809 -14.613 1.00 0.00 CLA \n+ATOM 61603 CLA CLA 6 -12.762 38.902 39.703 1.00 0.00 CLA \n+ATOM 61604 CLA CLA 7 -41.352 -6.310 -21.092 1.00 0.00 CLA \n+ATOM 61605 CLA CLA 8 -40.105 19.915 21.883 1.00 0.00 CLA \n+ATOM 61606 CLA CLA 9 -37.875 -10.640 -26.651 1.00 0.00 CLA \n+ATOM 61607 CLA CLA 10 -22.511 41.548 12.784 1.00 0.00 CLA \n+ATOM 61608 CLA CLA 11 35.216 33.731 -35.093 1.00 0.00 CLA \n+ATOM 61609 CLA CLA 12 -40.102 5.647 -2.397 1.00 0.00 CLA \n+ATOM 61610 CLA CLA 13 39.024 -12.398 -40.371 1.00 0.00 CLA \n+ATOM 61611 CLA CLA 14 18.261 -39.450 23.742 1.00 0.00 CLA \n+ATOM 61612 CLA CLA 15 6.178 41.435 -35.101 1.00 0.00 CLA \n+ATOM 61613 CLA CLA 16 24.358 15.109 39.388 1.00 0.00 CLA \n+ATOM 61614 CLA CLA 17 6.888 21.632 -18.643 1.00 0.00 CLA \n+ATOM 61615 CLA CLA 18 21.744 6.136 36.952 1.00 0.00 CLA \n+ATOM 61616 CLA CLA 19 37.313 -8.363 36.386 1.00 0.00 CLA \n+ATOM 61617 CLA CLA 20 -2.999 -20.832 23.104 1.00 0.00 CLA \n+ATOM 61618 CLA CLA 21 2.857 18.626 -27.815 1.00 0.00 CLA \n+ATOM 61619 CLA CLA 22 4.436 -15.917 42.798 1.00 0.00 CLA \n+ATOM 61620 CLA CLA 23 -36.824 -9.651 27.515 1.00 0.00 CLA \n+ATOM 61621 CLA CLA 24 30.595 -26.534 -13.854 1.00 0.00 CLA \n+ATOM 61622 CLA CLA 25 2.683 14.798 30.965 1.00 0.00 CLA \n+ATOM 61623 CLA CLA 26 29.848 -11.446 -12.895 1.00 0.00 CLA \n+ATOM 61624 CLA CLA 27 42.574 -16.385 39.148 1.00 0.00 CLA \n+ATOM 61625 CLA CLA 28 21.090 22.680 27.072 1.00 0.00 CLA \n+ATOM 61626 CLA CLA 29 31.477 21.841 -9.460 1.00 0.00 CLA \n+ATOM 61627 CLA CLA 30 -42.789 33.106 -42.003 1.00 0.00 CLA \n+ATOM 61628 CLA CLA 31 41.212 26.460 28.038 1.00 0.00 CLA \n+ATOM 61629 CLA CLA 32 31.330 -23.211 30.873 1.00 0.00 CLA \n+ATOM 61630 CLA CLA 33 -11.882 24.746 17.676 1.00 0.00 CLA \n+ATOM 61631 CLA CLA 34 42.509 41.966 29.673 1.00 0.00 CLA \n+ATOM 61632 CLA CLA 35 -21.155 -25.909 40.988 1.00 0.00 CLA \n+ATOM 61633 CLA CLA 36 -16.645 33.397 -20.493 1.00 0.00 CLA \n+ATOM 61634 CLA CLA 37 24.008 16.848 3.761 1.00 0.00 CLA \n+ATOM 61635 CLA CLA 38 -3.042 -26.229 -6.954 1.00 0.00 CLA \n+ATOM 61636 CLA CLA 39 -25.242 -29.525 -14.531 1.00 0.00 CLA \n+ATOM 61637 CLA CLA 40 34.942 -28.883 -36.691 1.00 0.00 CLA \n+ATOM 61638 CLA CLA 41 -35.913 -6.707 3.266 1.00 0.00 CLA \n+ATOM 61639 CLA CLA 42 -30.968 4.607 -32.953 1.00 0.00 CLA \n+ATOM 61640 CLA CLA 43 -5.809 15.242 42.418 1.00 0.00 CLA \n+ATOM 61641 CLA CLA 44 39.399 18.809 -13.827 1.00 0.00 CLA \n+ATOM 61642 CLA CLA 45 -15.805 29.210 -37.376 1.00 0.00 CLA \n+ATOM 61643 CLA CLA 46 0.091 -36.491 -34.859 1.00 0.00 CLA \n+ATOM 61644 CLA CLA 47 -12.875 -40.099 38.366 1.00 0.00 CLA \n+ATOM 61645 CLA CLA 48 -24.191 19.188 36.959 1.00 0.00 CLA \n+ATOM 61646 CLA CLA 49 16.215 -18.186 -29.406 1.00 0.00 CLA \n+ATOM 61647 CLA CLA 50 34.647 -7.708 -32.869 1.00 0.00 CLA \n+ATOM 61648 CLA CLA 51 -20.320 -38.996 6.847 1.00 0.00 CLA \n+ATOM 61649 CLA CLA 52 -28.453 0.614 -25.838 1.00 0.00 CLA \n+TER 61650 CLA 52\n+END\n' |
b |
diff -r 000000000000 -r 0f270722aca6 test-data/test.xtc |
b |
Binary file test-data/test.xtc has changed |
b |
diff -r 000000000000 -r 0f270722aca6 test-data/test.yml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/test.yml Mon Aug 24 16:27:56 2020 -0400 |
b |
@@ -0,0 +1,36 @@ +ramachandran1: + phi: + atom1: + segid: HET + resid: 3 + name: O5 + atom2: + segid: HET + resid: 3 + name: C1 + atom3: + segid: HET + resid: 2 + name: O4 + atom4: + segid: HET + resid: 2 + name: C4 + psi: + atom1: + segid: HET + resid: 3 + name: C1 + atom2: + segid: HET + resid: 2 + name: O4 + atom3: + segid: HET + resid: 2 + name: C4 + atom4: + segid: HET + resid: 2 + name: C5 + comment: pick visually using VMD using labels. Go to labels, dihedral to see the information about resname resid and atomname and then lookup the segname for ach atom. |