Unverified Commit eaf56f96 authored by João Morado's avatar João Morado Committed by GitHub
Browse files

Update AMOEBA XML, .prm files, and parsing of Tinker files (#5086)

* Correct AmoebaAngleTorsion in test_Amoeba18Nucleic of TestForceField

* Update processTinkerForceField to handle latest .prm Tinker files

* Update amoeba2018 XML files

* Update amoeba2013 XML files

* Update amoeba2009 XML files

* Adapt addTorTor to new format in the .prm files

* Fix TorsionTorsion

* Also update the total energy in test_Amoeba18Nucleic

* Update amoebabio18.prm

* Fix nucleic acid test energies

* Correct AmoebaAngleTorsionForce params

* Add new addTorTor to TinkerFiles

* Revert unit fix

* Change to .pdb file which Tinker likes

* Update test_Amoeba18BPTI

* Remove trailing zeros from XML files

* Leave trailing zeros only on 2018 ff

* New element names in 2018

* More digits for surfaceAreaFactor

* More digits for surfaceAreaFactor

* More digits

* Remove debugging print

* Add support to 2009 and 2013 AMOEBA ffs to processTinkerForceField.py

* Add FF specific residues XML files

* Delete old residuesFinal.xml

* Update AMOEBA XML ffs

* Update FFs

* Fix some formatting issues

* Fix "." in scientific notation

* Remove old assertions
parent 85e0efb6
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
...@@ -268,13 +268,25 @@ class TinkerFiles: ...@@ -268,13 +268,25 @@ class TinkerFiles:
forces["tortors"] = [] forces["tortors"] = []
fields = allLines[lineIndex] fields = allLines[lineIndex]
tortorInfo = fields[1:] tortorInfo = fields[1:]
lastGridLine = lineIndex + int(fields[6]) * int(fields[7]) nx = int(fields[6])
ny = int(fields[7])
totalGridPoints = nx * ny
grid = [] grid = []
while lineIndex < lastGridLine: currentLineIndex = lineIndex + 1
lineIndex += 1 gridPointsProcessed = 0
grid.append(allLines[lineIndex]) while gridPointsProcessed < totalGridPoints and currentLineIndex < len(allLines):
forces["tortors"].append([tortorInfo, grid]) lineFields = allLines[currentLineIndex]
return lineIndex i = 0
while i + 3 <= len(lineFields) and gridPointsProcessed < totalGridPoints:
angle1 = lineFields[i]
angle2 = lineFields[i + 1]
f = lineFields[i + 2]
grid.append([angle1, angle2, f])
gridPointsProcessed += 1
i += 3
currentLineIndex += 1
forces['tortors'].append( [ tortorInfo, grid ] )
return (currentLineIndex - 1)
RECOGNIZED_FORCES = { RECOGNIZED_FORCES = {
"bond": 1, "bond": 1,
......
...@@ -1953,7 +1953,24 @@ class AmoebaTestForceField(unittest.TestCase): ...@@ -1953,7 +1953,24 @@ class AmoebaTestForceField(unittest.TestCase):
return energies return energies
def test_Amoeba18BPTI(self): def test_Amoeba18BPTI(self):
"""Test that AMOEBA18 computes energies correctly for BPTI.""" """
Test that AMOEBA18 computes energies correctly for BPTI.
Total Potential Energy : -259.8636 Kcal/mole
Energy Component Breakdown : Kcal/mole Interactions
Bond Stretching 290.2445 906
Angle Bending 496.4300 1626
Stretch-Bend 5.7695 1455
Out-of-Plane Bend 51.2913 597
Torsional Angle 75.6890 2391
Pi-Orbital Torsion 19.3364 109
Torsion-Torsion -32.6689 6
Van der Waals 383.8705 394854
Atomic Multipoles -1325.1825 394854
Polarization -224.6434 394854
"""
energies = self.computeAmoeba18Energies('systems/bpti.pdb') energies = self.computeAmoeba18Energies('systems/bpti.pdb')
# Compare to values computed with Tinker. # Compare to values computed with Tinker.
...@@ -1966,8 +1983,8 @@ class AmoebaTestForceField(unittest.TestCase): ...@@ -1966,8 +1983,8 @@ class AmoebaTestForceField(unittest.TestCase):
self.assertAlmostEqual(19.3364, energies['AmoebaPiTorsionForce'], 4) self.assertAlmostEqual(19.3364, energies['AmoebaPiTorsionForce'], 4)
self.assertAlmostEqual(-32.6689, energies['AmoebaTorsionTorsionForce'], 4) self.assertAlmostEqual(-32.6689, energies['AmoebaTorsionTorsionForce'], 4)
self.assertAlmostEqual(383.8705, energies['AmoebaVdwForce'], 4) self.assertAlmostEqual(383.8705, energies['AmoebaVdwForce'], 4)
self.assertAlmostEqual(-1323.5640-225.3660, energies['AmoebaMultipoleForce'], 2) self.assertAlmostEqual(-1325.1825-224.6434, energies['AmoebaMultipoleForce'], 2)
self.assertAlmostEqual(-258.9676, sum(list(energies.values())), 2) self.assertAlmostEqual(-259.8636, sum(list(energies.values())), 2)
def test_Amoeba18Nucleic(self): def test_Amoeba18Nucleic(self):
"""Test that AMOEBA18 computes energies correctly for DNA and RNA.""" """Test that AMOEBA18 computes energies correctly for DNA and RNA."""
...@@ -1985,7 +2002,7 @@ class AmoebaTestForceField(unittest.TestCase): ...@@ -1985,7 +2002,7 @@ class AmoebaTestForceField(unittest.TestCase):
self.assertAlmostEqual(-5.0402, energies['AmoebaAngleTorsionForce'], 4) self.assertAlmostEqual(-5.0402, energies['AmoebaAngleTorsionForce'], 4)
self.assertAlmostEqual(187.1103, energies['AmoebaVdwForce'], 4) self.assertAlmostEqual(187.1103, energies['AmoebaVdwForce'], 4)
self.assertAlmostEqual(1635.1289-236.1484, energies['AmoebaMultipoleForce'], 3) self.assertAlmostEqual(1635.1289-236.1484, energies['AmoebaMultipoleForce'], 3)
self.assertAlmostEqual(3146.3046, sum(list(energies.values())), 3) self.assertAlmostEqual(3146.3045, sum(list(energies.values())), 3)
if __name__ == '__main__': if __name__ == '__main__':
unittest.main() unittest.main()
...@@ -175,7 +175,7 @@ class TestTinkerFiles(unittest.TestCase): ...@@ -175,7 +175,7 @@ class TestTinkerFiles(unittest.TestCase):
Intermolecular Energy : 896.3435 Kcal/mole Intermolecular Energy : 896.3435 Kcal/mole
Total Potential Energy : 3151.2568 Kcal/mole Total Potential Energy : 3146.3045 Kcal/mole
Energy Component Breakdown : Kcal/mole Interactions Energy Component Breakdown : Kcal/mole Interactions
...@@ -186,7 +186,7 @@ class TestTinkerFiles(unittest.TestCase): ...@@ -186,7 +186,7 @@ class TestTinkerFiles(unittest.TestCase):
Torsional Angle 166.7233 2197 Torsional Angle 166.7233 2197
Pi-Orbital Torsion 57.2066 142 Pi-Orbital Torsion 57.2066 142
Stretch-Torsion -4.2538 68 Stretch-Torsion -4.2538 68
Angle-Torsion -0.0880 112 Angle-Torsion -5.0402 112
Van der Waals 187.1103 291451 Van der Waals 187.1103 291451
Atomic Multipoles 1635.1289 291451 Atomic Multipoles 1635.1289 291451
Polarization -236.1484 291451 Polarization -236.1484 291451
...@@ -229,10 +229,10 @@ class TestTinkerFiles(unittest.TestCase): ...@@ -229,10 +229,10 @@ class TestTinkerFiles(unittest.TestCase):
self.assertEnergyEqual(166.7233, energies["PeriodicTorsionForce"]) self.assertEnergyEqual(166.7233, energies["PeriodicTorsionForce"])
self.assertEnergyEqual(57.2066, energies["AmoebaPiTorsionForce"]) self.assertEnergyEqual(57.2066, energies["AmoebaPiTorsionForce"])
self.assertEnergyEqual(-4.2538, energies["AmoebaStretchTorsionForce"]) self.assertEnergyEqual(-4.2538, energies["AmoebaStretchTorsionForce"])
self.assertEnergyEqual(-0.0880, energies["AmoebaAngleTorsionForce"], 1e-4) self.assertEnergyEqual(-5.0402, energies["AmoebaAngleTorsionForce"], 1e-3)
self.assertEnergyEqual(187.1103, energies["AmoebaVdwForce"]) self.assertEnergyEqual(187.1103, energies["AmoebaVdwForce"])
self.assertEnergyEqual(1635.1289 - 236.1484, energies["AmoebaMultipoleForce"]) self.assertEnergyEqual(1635.1289 - 236.1484, energies["AmoebaMultipoleForce"])
self.assertEnergyEqual(3151.2568, sum(list(energies.values()))) self.assertEnergyEqual(3146.3045, sum(list(energies.values())))
def test_Amoeba13ForcesImplicit(self): def test_Amoeba13ForcesImplicit(self):
"""Compute forces and compare them to ones generated with a previous version of OpenMM to ensure they haven't changed.""" """Compute forces and compare them to ones generated with a previous version of OpenMM to ensure they haven't changed."""
......
This diff is collapsed.
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment