def parallelParser( pdbFrameName ): #arg: list with universe, start and stop frame, distance and angle to calculate hbond sys.stdout = open(outputFolder + "/.temp_RIP-MD/temp_hbond", 'a') sys.stderr = open(outputFolder + "/.temp_RIP-MD/temp_hbond", 'a') edges_file = open(outputFolder + "/RIP-MD_Results/Edges/" + pdbFrameName[0] + ".edges", "a") #0 contains the frame_number edges_file.write( "Hydrogen Bonds\nSource Node\tTarget Node\tEdge Name\tDistance\tAngle\n" ) u = MDAnalysis.Universe(pdbFrameName[1]) h = hbonds.HydrogenBondAnalysis(u, "protein", "protein", distance=Distance, angle=Angle) h.run() h.generate_table() for hbond in h.table: node1 = str(hbond[5]) + ":" + dictAtom[hbond[1]] + ":" + str(hbond[6]) node2 = str(hbond[8]) + ":" + dictAtom[hbond[2]] + ":" + str(hbond[9]) if nodes.has_key(node1) and nodes.has_key(node2): name = node1 + ":" + str(hbond[7]) + "-(HB)-" + node2 + ":" + str( hbond[10]) distance = str(round(float(str(hbond[11])), 3)) angle = str(round(float(str(hbond[12])), 3)) edges_file.write( str(nodes[node1]) + "\t" + str(nodes[node2]) + "\t" + name + "\t" + distance + "\t" + angle + "\n") edges_file.write("\n") edges_file.close()
if len(pdbfile) == 0: with open('gmx_pdb.log', 'w') as outfile: p = subProcess.Popen( 'gmx trjconv -f {0} -s {1} -o {2} -conect -pbc mol'.format( grofile, tprfile, pdbfile), shell=True, stdout=outfile, stderr=outfile) p.wait() # Compute hbonds for every tracer and output to a different file for tracer_index, tracer in enumerate(tracers): u = mda.Universe(pdbfile) hbond_analysis = hbonds.HydrogenBondAnalysis( u, 'resid {}'.format(tracer), 'resname HOH or resname SOL', distance=2.5, angle=150) hbond_analysis.run() hbond_analysis.generate_table() hbond_info = pd.DataFrame.from_records(hbond_analysis.table) hbond_dict = {} for donor, acceptor in zip(hbond_info['donor_resnm'], hbond_info['acceptor_resnm']): key = donor + '-' + acceptor if key in hbond_dict: hbond_dict[key] += 1 else: hbond_dict[key] = 1 file_index = (tracer_index * n_sims) + sim_index
#!/bin/python import MDAnalysis as mda, sys from MDAnalysis.analysis import hbonds from datetime import datetime now = datetime.now() traj = 'prot_debug.xtc' #sys.argv[1] top = 'prot.tpr' #sys.argv[2] outfile = 'hbond_original.dat' #sys.argv[3] u = mda.Universe(top,traj) nframe = len(u.trajectory) start = 0 for iframe in range(start,nframe): sys.stdout.flush() sys.stdout.write('%d\r'%iframe) h = [] h = hbonds.HydrogenBondAnalysis(u, 'protein or resname NH2', 'protein or resname NH2', distance = 3.0, angle = 120.0, pbc = True) # h = hbonds.HydrogenBondAnalysis(u, 'resname NH2', 'protein or resname NH2', distance = 3.0, angle = 120.0, pbc = True) h.run(start = iframe, stop = iframe+1) h.generate_table() outf = open(outfile,'a') for hbond in h.table: outf.write('%d %d %d %s %d %s %s %d %s %.8f %.8f\n'%(hbond[0],hbond[1],hbond[2],hbond[3],hbond[4],hbond[5],hbond[6],hbond[7],hbond[8],hbond[9],hbond[10])) outf.close() print(datetime.now()-now)
])) } if __name__ == '__main__': argparser = argparse.ArgumentParser( description="Script to count hydrogen bonds") argparser.add_argument('-f', '--file', help="the trajectory file.") argparser.add_argument('-s', '--struct', help="a structure file") args = argparser.parse_args() u = MDAnalysis.Universe(args.struct, args.file) h_all = hbonds.HydrogenBondAnalysis(u, "protein", "protein", update_selection1=False, update_selection2=False) results_all = h_all.run() cnt = h_all.count_by_time().count print "All:\t%.3f\t%.3f" % (cnt.mean(), cnt.std()) h_main = HydrogenBondAnalysis_mainchain(u, "protein", "protein", update_selection1=False, update_selection2=False) results_main = h_main.run() cnt = h_main.count_by_time().count print "Main:\t%.3f\t%.3f" % (cnt.mean(), cnt.std())
us.append(u17) us.append(u18) us.append(u19) us.append(u20) us.append(u21) ns = [] dists = [] ave_dists = [] tabs = [] ind = 0 for i in us: print(ind) h = hb.HydrogenBondAnalysis(i, 'resid 1-6', 'resid 8-12', distance = 3) h.run() h.generate_table() tab = h.table tabs.append(tab) ns.append(len(tab)) ds = np.empty(len(tab)) for j in range(len(tab)): bonds = tab[j] ds[j] = bonds[-2] ave = np.sum(ds)/len(ds) dists.append(ds) ave_dists.append(ave) ind += 1
#!/bin/python import MDAnalysis as mda, sys from MDAnalysis.analysis import hbonds traj = sys.argv[1] top = sys.argv[2] outfile = sys.argv[3] u = mda.Universe(traj, top) nframe = len(u.trajectory) start = 0 #for iframe in range(start,nframe): # sys.stdout.flush() # sys.stdout.write('%d\r'%iframe) # h = [] h = hbonds.HydrogenBondAnalysis(u, 'protein', 'resname SOL', distance=3.0, angle=120.0, pbc=True, verbose=True) h.run(verbose=True) print h.count_by_time()
local_hbonds_array = np.zeros((local_n, timesteps), dtype=np.float) ## Do smth folder = 'data/charmm36m/2us/' for i, j in enumerate(range(ind_start, ind_end)): struct = folder + 'chain.pdb' traj = folder + 'chain_{}.xtc'.format(j + 1) print(traj) sys.stdout.flush() #local_hbonds_array[i] = np.zeros(timesteps, dtype=np.float) + rank system = md.Universe(struct, traj) ## compute information about hbonds and write it to the 'hb.timeseries' hb = hbonds.HydrogenBondAnalysis(system) hb.run(step=step) ## go through the 'hb.timeseries' file and calculate number of bonds for each time frame ## (it's the length of array frame) hb_number = [] for frame in hb.timeseries: hb_number.append(len(frame)) hb_number = np.array(hb_number) local_hbonds_array[i] = hb_number comm.barrier() ## Gather data comm.Gather(local_hbonds_array, hbonds_array, root=0)