def boss2opmTorsion(bnd_df, num2opls, st_no, molecule_data, itpf): dhd = [] for line in molecule_data.MolData['TORSIONS']: # dt = np.genfromtxt(line, dtype='f8') dt = [float(f) for f in line] dhd.append(dt) dhd = np.array(dhd) dhd = dhd * 4.184 # kcal to kj conversion dhd = dhd # Komm = Vopls/2 dhd_df = pd.DataFrame(dhd, columns=['V1', 'V2', 'V3', 'V4']) ats = [] for line in molecule_data.MolData['ATOMS'][3:]: dt = [ line.split()[0], line.split()[4], line.split()[6], line.split()[8] ] # dt = map(int, dt) dt = [int(d) for d in dt] ats.append(dt) for line in molecule_data.MolData['ADD_DIHED']: # dt = map(int, line) dt = [int(l) for l in line] ats.append(dt) assert len(ats) == len( dhd), 'Number of Dihedral angles in Zmatrix and Out file dont match' ats = np.array(ats) - st_no for i in range(len(ats)): for j in range(len(ats[0])): if ats[i][j] < 0: ats[i][j] = 0 at_df = pd.DataFrame(ats, columns=['I', 'J', 'K', 'L']) final_df = pd.concat([dhd_df, at_df], axis=1, join_axes=[at_df.index]) bndlist = list(bnd_df.UR) + (list(bnd_df.UR)) final_df['TY'] = [ 'Proper' if ucomb( list([final_df.I[n], final_df.J[n], final_df.K[n], final_df.L[n]]), bndlist) == 3 else 'Improper' for n in range(len(final_df.I)) ] final_df['SumV'] = np.abs(final_df.V1) + np.abs(final_df.V2) + np.abs( final_df.V3) + np.abs(final_df.V4) # final_df = final_df[final_df['SumV'] != 0.00] final_df['TI'] = [num2opls[j] for j in final_df.I] final_df['TJ'] = [num2opls[j] for j in final_df.J] final_df['TK'] = [num2opls[j] for j in final_df.K] final_df['TL'] = [num2opls[j] for j in final_df.L] if len(final_df.index) > 0: final_df['NAME'] = final_df.TI + '-' + final_df.TJ + \ '-' + final_df.TK + '-' + final_df.TL final_df = final_df.sort_values(['NAME']) # final_df.to_csv('bos_torsions.csv', index=False) tor_bos = final_df.drop(['I', 'J', 'K', 'L', 'TI', 'TJ', 'TK', 'TL'], 1) tor_bos = tor_bos.drop_duplicates() df = final_df.ix[tor_bos.index] return final_df, df else: return final_df, final_df
def Boss2CharmmTorsion(bnd_df, num2opls, st_no, molecule_data, num2typ2symb): # print num2opls dhd = [] for line in molecule_data.MolData['TORSIONS']: dt = [float(l) for l in line] dhd.append(dt) dhd = np.array(dhd) dhd = dhd # kcal to kj conversion dhd = dhd / 2.0 # Komm = Vopls/2 dhd_df = pd.DataFrame(dhd, columns=['V1', 'V2', 'V3', 'V4']) ats = [] for line in molecule_data.MolData['ATOMS'][3:]: dt = [ line.split()[0], line.split()[4], line.split()[6], line.split()[8] ] dt = [int(d) for d in dt] ats.append(dt) for line in molecule_data.MolData['ADD_DIHED']: dt = [int(l) for l in line] ats.append(dt) assert len(ats) == len( dhd), 'Number of Dihedral angles in Zmatrix and Out file dont match' ats = np.array(ats) - st_no for i in range(len(ats)): for j in range(len(ats[0])): if ats[i][j] < 0: ats[i][j] = 0 at_df = pd.DataFrame(ats, columns=['I', 'J', 'K', 'L']) final_df = pd.concat([dhd_df, at_df], axis=1, join_axes=[at_df.index]) bndlist = list(bnd_df.UR) + (list(bnd_df.UR)) final_df['TY'] = [ 'Proper' if ucomb( list([final_df.I[n], final_df.J[n], final_df.K[n], final_df.L[n]]), bndlist) == 3 else 'Improper' for n in range(len(final_df.I)) ] # final_df['SumV'] = np.abs( # final_df.V1) + np.abs(final_df.V2) + np.abs(final_df.V3) + np.abs(final_df.V4) # final_df = final_df[final_df['SumV'] != 0.00] final_df['TI'] = [num2typ2symb[j][2] for j in final_df.I] final_df['TJ'] = [num2typ2symb[j][2] for j in final_df.J] final_df['TK'] = [num2typ2symb[j][2] for j in final_df.K] final_df['TL'] = [num2typ2symb[j][2] for j in final_df.L] final_df['SYMB'] = [ ' '.join([ num2typ2symb[final_df.I[i]][0], num2typ2symb[final_df.J[i]][0], num2typ2symb[final_df.K[i]][0], num2typ2symb[final_df.L[i]][0] ]) for i in final_df.index ] if len(final_df.index) > 0: final_df['NAME'] = final_df.TI + '-' + final_df.TJ + \ '-' + final_df.TK + '-' + final_df.TL return final_df
def boss2opmTorsion(bnd_df, num2opls, st_no, molecule_data, xmlf): dhd = [] for line in molecule_data.MolData['TORSIONS']: dt = [float(l) for l in line] dhd.append(dt) dhd = np.array(dhd) dhd = dhd * 4.184 # kcal to kj conversion dhd = dhd / 2.0 # Komm = Vopls/2 dhd_df = pd.DataFrame(dhd, columns=['V1', 'V2', 'V3', 'V4']) ats = [] for line in molecule_data.MolData['ATOMS'][3:]: dt = [ line.split()[0], line.split()[4], line.split()[6], line.split()[8] ] dt = [int(d) for d in dt] ats.append(dt) for line in molecule_data.MolData['ADD_DIHED']: dt = [int(l) for l in line] ats.append(dt) assert len(ats) == len( dhd), 'Number of Dihedral angles in Zmatrix and Out file dont match' ats = np.array(ats) - st_no for i in range(len(ats)): for j in range(len(ats[0])): if ats[i][j] < 0: ats[i][j] = 0 at_df = pd.DataFrame(ats, columns=['I', 'J', 'K', 'L']) final_df = pd.concat([dhd_df, at_df], axis=1, join_axes=[at_df.index]) bndlist = list(bnd_df.UR) + (list(bnd_df.UR)) final_df['TY'] = [ 'Proper' if ucomb( list([final_df.I[n], final_df.J[n], final_df.K[n], final_df.L[n]]), bndlist) == 3 else 'Improper' for n in range(len(final_df.I)) ] final_df['SumV'] = np.abs(final_df.V1) + np.abs(final_df.V2) + np.abs( final_df.V3) + np.abs(final_df.V4) if len(final_df.index) >= 1: final_df['TI'] = [num2opls[j] for j in final_df.I] final_df['TJ'] = [num2opls[j] for j in final_df.J] final_df['TK'] = [num2opls[j] for j in final_df.K] final_df['TL'] = [num2opls[j] for j in final_df.L] final_df['NAME'] = final_df.TI + '-' + final_df.TJ + \ '-' + final_df.TK + '-' + final_df.TL final_df = final_df.sort_values(['NAME']) final_df.to_csv('bos_torsions.csv', index=False) tor_bos = final_df.drop(['I', 'J', 'K', 'L', 'TI', 'TJ', 'TK', 'TL'], 1) tor_bos = tor_bos.drop_duplicates() df = final_df.ix[tor_bos.index][[ 'TI', 'TJ', 'TK', 'TL', 'V1', 'V2', 'V3', 'V4', 'TY', 'I', 'J', 'K', 'L' ]] torlist = [] for row in df[df.TY == 'Proper'].iterrows(): index, dat = row data = dat.tolist() torlist.append(printDihed(data[0:-4])) for row in df[df.TY == 'Improper'].iterrows(): index, dat = row ndata = tor_cent([dat.I, dat.J, dat.K, dat.L], bndlist) sdata = [num2opls[j] for j in ndata] vdata = [dat.V1, dat.V2, dat.V3, dat.V4, dat.TY] if len(set([dat.TI, dat.TJ, dat.TK, dat.TL])) > 3: torlist.append(printDihed(sdata + vdata)) # fin_list = list(set(torlist)) xmlf.write('<PeriodicTorsionForce>\n') for npt in torlist: xmlf.write("%s\n" % npt) xmlf.write('</PeriodicTorsionForce>\n') return None