Commit 918d17ac authored by Jason Swails's avatar Jason Swails
Browse files

Fix AmberPrmtopFile for building with IFBOX != 1 or 2. Also Add tests for a

truncated octahedron inpcrd and prmtop file.
parent 0746deda
......@@ -709,9 +709,6 @@ def readAmberSystem(prmtop_filename=None, prmtop_loader=None, shake=None, gbmode
if prmtop.getIfPert()>0:
raise Exception("perturbation not currently supported")
if prmtop.getIfBox()>1:
raise Exception("only standard periodic boxes are currently supported")
if prmtop.has_scee_scnb and (scee is not None or scnb is not None):
warnings.warn("1-4 scaling parameters in topology file are being ignored. "
"This is not recommended unless you know what you are doing.")
......
......@@ -60,5 +60,29 @@ class TestAmberInpcrdFile(unittest.TestCase):
self.assertTrue(inpcrd.boxVectors is None)
self.assertTrue(inpcrd.velocities is None)
def test_CrdBoxTruncoct(self):
# Check that the box vectors come out correct.
inpcrd = AmberInpcrdFile('systems/tz2.truncoct.rst7')
ac = Vec3(42.4388485, 0.0, 0.0) * angstroms
bc = Vec3(-14.146281691908937, 40.011730483685835, 0.0) * angstroms
cc = Vec3(-14.146281691908937, -20.0058628205162, 34.651176446201672) * angstroms
a, b, c = inpcrd.getBoxVectors()
diffa = ac - a
diffb = bc - b
diffc = cc - c
self.assertAlmostEqual(norm(diffa)/angstroms, 0)
self.assertAlmostEqual(norm(diffb)/angstroms, 0)
self.assertAlmostEqual(norm(diffc)/angstroms, 0)
# Make sure angles and lengths come out about right
la = norm(a).in_units_of(angstroms)
lb = norm(b).in_units_of(angstroms)
lc = norm(c).in_units_of(angstroms)
self.assertAlmostEqual(la/angstroms, 42.4388485, 6)
self.assertAlmostEqual(lb/angstroms, 42.4388485, 6)
self.assertAlmostEqual(lc/angstroms, 42.4388485, 6)
self.assertAlmostEqual(dot(a,b)/la/lb, cos(109.4712190*degrees), 6)
self.assertAlmostEqual(dot(a,c)/la/lc, cos(109.4712190*degrees), 6)
self.assertAlmostEqual(dot(b,c)/lc/lb, cos(109.4712190*degrees), 6)
if __name__ == '__main__':
unittest.main()
......@@ -9,6 +9,7 @@ prmtop1 = AmberPrmtopFile('systems/alanine-dipeptide-explicit.prmtop')
prmtop2 = AmberPrmtopFile('systems/alanine-dipeptide-implicit.prmtop')
prmtop3 = AmberPrmtopFile('systems/ff14ipq.parm7')
prmtop4 = AmberPrmtopFile('systems/Mg_water.prmtop')
prmtop5 = AmberPrmtopFile('systems/tz2.truncoct.parm7')
inpcrd3 = AmberInpcrdFile('systems/ff14ipq.rst7')
inpcrd4 = AmberInpcrdFile('systems/Mg_water.inpcrd')
......@@ -229,7 +230,32 @@ class TestAmberPrmtopFile(unittest.TestCase):
# Make sure the energy is relatively close to the value we get with
# Amber using this force field.
self.assertAlmostEqual(-7307.2735621/ene, 1, places=3)
def test_triclinicParm(self):
""" Check that triclinic unit cells work correctly """
system = prmtop5.createSystem(nonbondedMethod=PME)
refa = Vec3(4.48903851, 0.0, 0.0) * nanometer
refb = Vec3(-1.4963460492639706, 4.232306137924705, 0.0) * nanometer
refc = Vec3(-1.4963460492639706, -2.116152812842565, 3.6652847799064165) * nanometer
a, b, c = system.getDefaultPeriodicBoxVectors()
la = norm(a)
lb = norm(b)
lc = norm(c)
diffa = a - refa
diffb = b - refb
diffc = c - refc
self.assertAlmostEqual(norm(diffa)/nanometers, 0)
self.assertAlmostEqual(norm(diffb)/nanometers, 0)
self.assertAlmostEqual(norm(diffc)/nanometers, 0)
self.assertAlmostEqual(dot(a, b)/la/lb, cos(109.4712190*degrees))
self.assertAlmostEqual(dot(a, c)/la/lc, cos(109.4712190*degrees))
self.assertAlmostEqual(dot(c, b)/lc/lb, cos(109.4712190*degrees))
self.assertAlmostEqual(la/nanometers, 4.48903851)
self.assertAlmostEqual(lb/nanometers, 4.48903851)
self.assertAlmostEqual(lc/nanometers, 4.48903851)
# Now make sure that the context builds correctly; then we can bail
self.assertTrue(Context(system, VerletIntegrator(1*femtoseconds)))
def test_ImplicitSolventForces(self):
"""Compute forces for different implicit solvent types, and compare them to ones generated with a previous version of OpenMM to ensure they haven't changed."""
......
This diff is collapsed.
This source diff could not be displayed because it is too large. You can view the blob instead.
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