def write_gro(strucC,data_file): """ Write gromacs structure file """ # latvec = strucC.getLatVec() gro_lines = " com2gro \n" gro_lines += " %-2i \n" %( int(len(strucC.ptclC)) ) atom_indx = 0 for pid, pt_i in strucC.ptclC: atom_indx += 1 if( atom_indx > 10000): atom_indx = 1 r_i = pt_i.position r_i_nm = [units.convert_angstroms_nm(r_i[0]) ,units.convert_angstroms_nm(r_i[1]) ,units.convert_angstroms_nm(r_i[2]) ] gro_lines += "%5d%-5s%5s%5d%8.3f%8.3f%8.3f\n" % ( pt_i.tagsDict["residue"],pt_i.tagsDict["resname"][:5],pt_i.tagsDict["gtype"][:5],atom_indx,r_i_nm[0],r_i_nm[1],r_i_nm[2] ) gro_lines += " %8.5f %8.5f %8.5f %8.5f %8.5f %8.5f %8.5f %8.5f %8.5f \n" % (units.convert_angstroms_nm(latvec[0][0]),units.convert_angstroms_nm(latvec[1][1]),units.convert_angstroms_nm(latvec[2][2]),units.convert_angstroms_nm(latvec[0][1]),units.convert_angstroms_nm(latvec[0][2]),units.convert_angstroms_nm(latvec[1][0]),units.convert_angstroms_nm(latvec[1][2]),units.convert_angstroms_nm(latvec[2][0]),units.convert_angstroms_nm(latvec[2][1])) F = open( data_file, 'w' ) F.write(gro_lines) F.close()
def write_itp(paramC, out_itp): """" Write gromacs parameter file """ F = open(out_itp, 'w') F.write('; new ff parameters \n') F.write(' \n ') F.write(' \n [ defaults ] ') F.write( ' \n ; nbfunc comb-rule gen-pairs fudgeLJ fudgeQQ ') nbfunc = paramC.get_nbfunc() combmixrule = paramC.get_combmixrule() genpairs = paramC.get_genpairs() fudgeLJ = paramC.get_fudgeLJ() fudgeQQ = paramC.get_fudgeQQ() F.write(' \n %d %d %s %f %f ' % (nbfunc, combmixrule, genpairs, fudgeLJ, fudgeQQ)) F.write(' \n ') F.write(' \n ') ljtypC_p = paramC.ljtypC btypC_p = paramC.btypC atypC_p = paramC.atypC dtypC_p = paramC.dtypC imptypC_p = paramC.imptypC # # Write particle types # F.write('\n [ atomtypes ] ') for lj_p, ljObj_p in ljtypC_p: sigma = units.convert_angstroms_nm(ljObj_p.sigma) epsilon = units.convert_kcalmol_kJmol(ljObj_p.epsilon) out_line = "\n %s %d %f %f %s %f %f " % ( ljObj_p.ptype1, ljObj_p.pid, ljObj_p.get_mass(), ljObj_p.charge, ljObj_p.ptype, sigma, epsilon) F.write(out_line) F.write(' \n ') # # Write bond types # F.write('\n [ bondtypes ] ') for b_p, btypeObj_p in btypC_p: g_type = btypeObj_p.get_g_indx() if (g_type == 1): r0 = units.convert_angstroms_nm(btypeObj_p.get_r0()) kb = units.convert_kb_g_bond(btypeObj_p.get_kb()) out_line = "\n %s %s %d %f %f " % (btypeObj_p.get_ptype1(), btypeObj_p.get_ptype2(), g_type, r0, kb) else: print " unknown gromacs bond type index ", g_type sys.exit(" error in printing itp file ") F.write(out_line) F.write(' \n ') # # Write angle types # F.write('\n [ angletypes ] ') for a_p, atypeObj_p in atypC_p: g_type = atypeObj_p.get_g_indx() if (g_type == 1): theta0 = atypeObj_p.get_theta0() kb = units.convert_kb_g_angle(atypeObj_p.get_kb()) out_line = "\n %s %s %s %d %f %f " % ( atypeObj_p.get_ptype1(), atypeObj_p.get_ptype2(), atypeObj_p.get_ptype3(), g_type, theta0, kb) else: print " unknown gromacs angle type index ", g_type sys.exit(" error in printing itp file ") F.write(out_line) F.write(' \n ') # # Write dihedral types # F.write('\n [ dihedraltypes ] ') for d_p, dtypObj_p in dtypC_p: g_type = dtypObj_p.get_g_indx() if (g_type == 1 or g_type == 4 or g_type == 9): theat_s = dtypObj_p.get_theat_s() kb = units.convert_kcalmol_kJmol(dtypObj_p.get_kb()) mult = dtypObj_p.get_mult() #print " theat_s , kb ,mult ",theat_s , kb ,mult out_line = "\n %s %s %s %s %d %f %f %d " % ( dtypObj_p.get_ptype1(), dtypObj_p.get_ptype2(), dtypObj_p.get_ptype3(), dtypObj_p.get_ptype4(), g_type, theat_s, kb, mult) elif (g_type == 2): e0, ke_kcalmol = dtypObj_p.getimp() ke = units.convert_kcalmol_kJmol(ke_kcalmol) out_line = "\n %s %s %s %s %d %f %f " % ( dtypObj_p.get_ptype1(), dtypObj_p.get_ptype2(), dtypObj_p.get_ptype3(), dtypObj_p.get_ptype4(), g_type, e0, ke) error_line = "No impropers should be in dihedral type container " sys.exit(error_line) elif (g_type == 3): Clist_kcalmol = dtypObj_p.get_rbClist() Clist = [] for Cindx in Clist_kcalmol: Clist.append(units.convert_kcalmol_kJmol(Cindx)) out_line = "\n %s %s %s %s %d %f %f %f %f %f %f " % ( dtypObj_p.get_ptype1(), dtypObj_p.get_ptype2(), dtypObj_p.get_ptype3(), dtypObj_p.get_ptype4(), g_type, Clist[0], Clist[1], Clist[2], Clist[3], Clist[4], Clist[5]) else: print " unknown gromacs dihedral type index ", g_type sys.exit(" error in printing itp file ") F.write(out_line) for d_p, imptypObj_p in imptypC_p: g_type = imptypObj_p.get_g_indx() if (g_type == 2): e0, ke_kcalmol = imptypObj_p.getimp() ke = units.convert_kb_g_angle(ke_kcalmol) out_line = "\n %s %s %s %s %d %f %f " % ( imptypObj_p.get_ptype1(), imptypObj_p.get_ptype2(), imptypObj_p.get_ptype3(), imptypObj_p.get_ptype4(), g_type, e0, ke) elif (g_type == 3): e0, ke_kcalmol = imptypObj_p.getimp() pn = imptypObj_p.get_pn() ke = units.convert_kb_g_angle(ke_kcalmol) out_line = "\n %s %s %s %s %d %f %f %d " % ( imptypObj_p.get_ptype1(), imptypObj_p.get_ptype2(), imptypObj_p.get_ptype3(), imptypObj_p.get_ptype4(), g_type, e0, ke, np) else: print " unknown gromacs improper dihedral type index ", g_type sys.exit(" error in printing itp file ") F.write(out_line) F.write(' \n ') F.close()
def write_gro(strucC, data_file): """ Write gromacs structure file """ # latvec = strucC.getLatVec() gro_lines = " com2gro \n" gro_lines += " %-2i \n" % (int(len(strucC.ptclC))) atom_indx = 0 for pid, pt_i in strucC.ptclC: atom_indx += 1 if (atom_indx > 10000): atom_indx = 1 r_i = pt_i.position r_i_nm = [ units.convert_angstroms_nm(r_i[0]), units.convert_angstroms_nm(r_i[1]), units.convert_angstroms_nm(r_i[2]) ] gro_lines += "%5d%-5s%5s%5d%8.3f%8.3f%8.3f\n" % ( pt_i.tagsDict["residue"], pt_i.tagsDict["resname"][:5], pt_i.tagsDict["gtype"][:5], atom_indx, r_i_nm[0], r_i_nm[1], r_i_nm[2]) gro_lines += " %8.5f %8.5f %8.5f %8.5f %8.5f %8.5f %8.5f %8.5f %8.5f \n" % ( units.convert_angstroms_nm( latvec[0][0]), units.convert_angstroms_nm( latvec[1][1]), units.convert_angstroms_nm( latvec[2][2]), units.convert_angstroms_nm(latvec[0][1]), units.convert_angstroms_nm( latvec[0][2]), units.convert_angstroms_nm( latvec[1][0]), units.convert_angstroms_nm( latvec[1][2]), units.convert_angstroms_nm(latvec[2][0]), units.convert_angstroms_nm(latvec[2][1])) F = open(data_file, 'w') F.write(gro_lines) F.close()
def write_itp(paramC,out_itp): """" Write gromacs parameter file """ F = open( out_itp,'w') F.write('; new ff parameters \n') F.write(' \n ') F.write(' \n [ defaults ] ') F.write(' \n ; nbfunc comb-rule gen-pairs fudgeLJ fudgeQQ ') nbfunc = paramC.get_nbfunc() combmixrule = paramC.get_combmixrule() genpairs = paramC.get_genpairs() fudgeLJ = paramC.get_fudgeLJ() fudgeQQ = paramC.get_fudgeQQ() F.write(' \n %d %d %s %f %f ' % ( nbfunc,combmixrule,genpairs,fudgeLJ,fudgeQQ )) F.write(' \n ') F.write(' \n ') ljtypC_p = paramC.ljtypC btypC_p = paramC.btypC atypC_p = paramC.atypC dtypC_p = paramC.dtypC imptypC_p = paramC.imptypC # # Write particle types # F.write('\n [ atomtypes ] ') for lj_p, ljObj_p in ljtypC_p: sigma = units.convert_angstroms_nm( ljObj_p.sigma ) epsilon = units.convert_kcalmol_kJmol( ljObj_p.epsilon ) out_line = "\n %s %d %f %f %s %f %f "%(ljObj_p.ptype1,ljObj_p.pid,ljObj_p.get_mass(),ljObj_p.charge,ljObj_p.ptype,sigma,epsilon) F.write(out_line) F.write(' \n ') # # Write bond types # F.write('\n [ bondtypes ] ') for b_p, btypeObj_p in btypC_p: g_type = btypeObj_p.get_g_indx() if( g_type == 1 ): r0 = units.convert_angstroms_nm( btypeObj_p.get_r0() ) kb = units.convert_kb_g_bond( btypeObj_p.get_kb()) out_line = "\n %s %s %d %f %f "%(btypeObj_p.get_ptype1(),btypeObj_p.get_ptype2(),g_type,r0,kb) else: print " unknown gromacs bond type index ",g_type sys.exit(" error in printing itp file ") F.write(out_line) F.write(' \n ') # # Write angle types # F.write('\n [ angletypes ] ') for a_p,atypeObj_p in atypC_p: g_type = atypeObj_p.get_g_indx() if( g_type == 1 ): theta0 = atypeObj_p.get_theta0() kb = units.convert_kb_g_angle( atypeObj_p.get_kb()) out_line = "\n %s %s %s %d %f %f "%(atypeObj_p.get_ptype1(),atypeObj_p.get_ptype2(),atypeObj_p.get_ptype3(),g_type,theta0,kb) else: print " unknown gromacs angle type index ",g_type sys.exit(" error in printing itp file ") F.write(out_line) F.write(' \n ') # # Write dihedral types # F.write('\n [ dihedraltypes ] ') for d_p,dtypObj_p in dtypC_p: g_type = dtypObj_p.get_g_indx() if( g_type == 1 or g_type == 4 or g_type == 9 ): theat_s = dtypObj_p.get_theat_s() kb = units.convert_kcalmol_kJmol( dtypObj_p.get_kb() ) mult = dtypObj_p.get_mult() #print " theat_s , kb ,mult ",theat_s , kb ,mult out_line = "\n %s %s %s %s %d %f %f %d "%(dtypObj_p.get_ptype1(),dtypObj_p.get_ptype2(),dtypObj_p.get_ptype3(),dtypObj_p.get_ptype4(),g_type,theat_s,kb,mult) elif( g_type == 2 ): e0, ke_kcalmol = dtypObj_p.getimp() ke = units.convert_kcalmol_kJmol( ke_kcalmol ) out_line = "\n %s %s %s %s %d %f %f "%(dtypObj_p.get_ptype1(),dtypObj_p.get_ptype2(),dtypObj_p.get_ptype3(),dtypObj_p.get_ptype4(),g_type,e0, ke) error_line = "No impropers should be in dihedral type container " sys.exit(error_line) elif( g_type == 3 ): Clist_kcalmol = dtypObj_p.get_rbClist() Clist = [] for Cindx in Clist_kcalmol: Clist.append( units.convert_kcalmol_kJmol(Cindx)) out_line = "\n %s %s %s %s %d %f %f %f %f %f %f "%(dtypObj_p.get_ptype1(),dtypObj_p.get_ptype2(),dtypObj_p.get_ptype3(),dtypObj_p.get_ptype4(),g_type,Clist[0],Clist[1],Clist[2],Clist[3],Clist[4],Clist[5]) else: print " unknown gromacs dihedral type index ",g_type sys.exit(" error in printing itp file ") F.write(out_line) for d_p,imptypObj_p in imptypC_p: g_type = imptypObj_p.get_g_indx() if( g_type == 2 ): e0, ke_kcalmol = imptypObj_p.getimp() ke = units.convert_kb_g_angle( ke_kcalmol ) out_line = "\n %s %s %s %s %d %f %f "%(imptypObj_p.get_ptype1(),imptypObj_p.get_ptype2(),imptypObj_p.get_ptype3(),imptypObj_p.get_ptype4(),g_type,e0, ke) elif( g_type == 3 ): e0, ke_kcalmol = imptypObj_p.getimp() pn = imptypObj_p.get_pn() ke = units.convert_kb_g_angle( ke_kcalmol ) out_line = "\n %s %s %s %s %d %f %f %d "%(imptypObj_p.get_ptype1(),imptypObj_p.get_ptype2(),imptypObj_p.get_ptype3(),imptypObj_p.get_ptype4(),g_type,e0, ke, np) else: print " unknown gromacs improper dihedral type index ",g_type sys.exit(" error in printing itp file ") F.write(out_line) F.write(' \n ') F.close()