Next changeset 1:8f6ad93973cb (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 extract_rmsd.xml hbonds.py macros.xml pca_cosine.py ramachandran_auto_protein.py 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 743bd6aa3c7a angle.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/angle.py Mon Aug 24 16:41:41 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 743bd6aa3c7a dihedrals.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dihedrals.py Mon Aug 24 16:41:41 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 743bd6aa3c7a distance_multiple.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/distance_multiple.py Mon Aug 24 16:41:41 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 743bd6aa3c7a distance_single.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/distance_single.py Mon Aug 24 16:41:41 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 743bd6aa3c7a end-to-end.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/end-to-end.py Mon Aug 24 16:41:41 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 743bd6aa3c7a extract_rmsd.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/extract_rmsd.py Mon Aug 24 16:41:41 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 743bd6aa3c7a extract_rmsd.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/extract_rmsd.xml Mon Aug 24 16:41:41 2020 -0400 |
[ |
@@ -0,0 +1,109 @@ +<tool id="mdanalysis_extract_rmsd" name="Extract RMSD distance matrix data" version="@TOOL_VERSION@+galaxy@GALAXY_VERSION@"> + <description>from MD ensemble with MDAnalysis</description> + <macros> + <import>macros.xml</import> + <token name="@GALAXY_VERSION@">0</token> + </macros> + <expand macro="requirements"/> + <command detect_errors="exit_code"><![CDATA[ + #for t in $strs: + echo $t &>> ./strs.txt && + #end for + #for t in $trajs: + echo $t &>> ./trajs.txt && + #end for + + python '$__tool_directory__/extract_rmsd.py' + --trajs trajs.txt + --strs strs.txt + --ref-str '$refstr' + --traj-format '$trajs[0].ext' + --str-format '$strs[0].ext' + --ref-str-format '${refstr.ext}' + --outfile '$output' + --group '$group' + --fitting '$fitting' + --start '$start' + --end '$end' + --step '$step' + +]]></command> + <inputs> + <param type="data_collection" name="strs" label="Input structures" format="pdb,gro"/> + <param type="data_collection" name="trajs" label="Input trajectories" format="xtc,dcd,trr"/> + <param name="refstr" type="data" format="pdb,gro" label="Reference structure" help="Structure for aligning all trajectories against."/> + <param name='group' type='text' label='Group for RMSD calculation' /> + <param name='fitting' type='text' label='Group for alignment prior to RMSD calculation' /> + <param name="start" type="integer" min="0" value="0" label="First trajectory frame for RMSD calculation" /> + <param name="end" type="integer" min="0" value="0" label="End trajectory frame for RMSD calculation" /> + <param name="step" type="integer" min="1" value="1" label="Frequency of trajectory frame sampling for RMSD calculation" /> + </inputs> + <outputs> + <data name="output" format="json" /> + </outputs> + <tests> + <test> + <param name="strs"> + <collection type="list"> + <element name="str1" ftype="gro" value="test.gro" /> + <element name="str2" ftype="gro" value="test.gro" /> + </collection> + </param> + <param name="trajs"> + <collection type="list"> + <element name="traj1" ftype="xtc" value="test.xtc" /> + <element name="traj2" ftype="xtc" value="test.xtc" /> + </collection> + </param> + + <param name="refstr" ftype="pdb" value="test.pdb" /> + <param name="fitting" value="protein" /> + <param name="group" value="resname BGLC" /> + <param name="start" value="0" /> + <param name="end" value="15" /> + <param name="step" value="1" /> + <output name="output"> + <assert_contents> + <has_text text="0.0" n="20"/> + <has_size value="1588" /> + <has_n_lines n="74" /> + </assert_contents> + </output> + </test> + </tests> + <help><![CDATA[ +.. class:: infomark + +**What it does** + +This tool takes collections of MD structures and trajectories and inputs and performs the following steps: + - aligns them to a reference structure + - calculates RMSD differences for a selected group of atoms between all possible pairs of trajectories at all time points + - returns RMSD data as a three-dimensional tensor. + +_____ + + +.. class:: infomark + +**Input** + + - Collection of structure files (PDB, GRO). + - Collection of trajectory files (DCD, XTC, TRR). + - Single structure file for alignment. + - User selection of fitting group, alignment group, start and end frames of the trajectory, and a frame step for the calculation. + +_____ + + +.. class:: infomark + +**Output** + +The output consists of a three-dimensional numpy array saved in JSON format, with dimensions N x N x t, where N is the number of trajectories and t is the number of time frames. Thus, the file effectively contains multiple distance matrices (one for each time step) representing the RMSD between all pairs of trajectories for a chosen group of atoms. + +It may be more useful to flatten the tensor to a two-dimensional matrix by averaging or slicing on the time axis; this can be achieved using the 'Hierarchical clustering' tool. + + ]]></help> + <expand macro="citations" /> +</tool> \ No newline at end of file |
b |
diff -r 000000000000 -r 743bd6aa3c7a hbonds.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/hbonds.py Mon Aug 24 16:41:41 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 743bd6aa3c7a macros.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/macros.xml Mon Aug 24 16:41:41 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 743bd6aa3c7a pca_cosine.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pca_cosine.py Mon Aug 24 16:41:41 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 743bd6aa3c7a ramachandran_auto_protein.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ramachandran_auto_protein.py Mon Aug 24 16:41:41 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 743bd6aa3c7a 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:41:41 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 743bd6aa3c7a ramachandran_plots.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ramachandran_plots.py Mon Aug 24 16:41:41 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 743bd6aa3c7a rdf.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/rdf.py Mon Aug 24 16:41:41 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 743bd6aa3c7a test-data/Angle_Analysis_Plot.png |
b |
Binary file test-data/Angle_Analysis_Plot.png has changed |
b |
diff -r 000000000000 -r 743bd6aa3c7a 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:41:41 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 743bd6aa3c7a test-data/Dihedral_Analysis_Plot.png |
b |
Binary file test-data/Dihedral_Analysis_Plot.png has changed |
b |
diff -r 000000000000 -r 743bd6aa3c7a 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:41:41 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 743bd6aa3c7a test-data/Distance_Analysis_Plot.png |
b |
Binary file test-data/Distance_Analysis_Plot.png has changed |
b |
diff -r 000000000000 -r 743bd6aa3c7a 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:41:41 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 743bd6aa3c7a test-data/RDF_Analysis_Plot.png |
b |
Binary file test-data/RDF_Analysis_Plot.png has changed |
b |
diff -r 000000000000 -r 743bd6aa3c7a 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:41:41 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 743bd6aa3c7a 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:41:41 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 743bd6aa3c7a 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:41:41 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 743bd6aa3c7a test-data/list1.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/list1.txt Mon Aug 24 16:41:41 2020 -0400 |
b |
@@ -0,0 +1,1 @@ +resid 212 and name OE2 |
b |
diff -r 000000000000 -r 743bd6aa3c7a test-data/list2.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/list2.txt Mon Aug 24 16:41:41 2020 -0400 |
b |
@@ -0,0 +1,1 @@ +resid 3 and name C1 |
b |
diff -r 000000000000 -r 743bd6aa3c7a test-data/test.dcd |
b |
Binary file test-data/test.dcd has changed |
b |
diff -r 000000000000 -r 743bd6aa3c7a test-data/test.gro --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/test.gro Mon Aug 24 16:41:41 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 743bd6aa3c7a test-data/test.pdb --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/test.pdb Mon Aug 24 16:41:41 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 743bd6aa3c7a test-data/test.xtc |
b |
Binary file test-data/test.xtc has changed |
b |
diff -r 000000000000 -r 743bd6aa3c7a test-data/test.yml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/test-data/test.yml Mon Aug 24 16:41:41 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. |