Ejemplo n.º 1
0
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
Ejemplo n.º 2
0
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
Ejemplo n.º 3
0
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