import unittest from validateConstraints import * from openmm.app import * from openmm import * from openmm.unit import * import openmm.app.element as elem import openmm.app.forcefield as forcefield import math try: from cStringIO import StringIO except ImportError: from io import StringIO import os import warnings class TestGenerators(unittest.TestCase): """Test the various generators found in forcefield.py.""" def setUp(self): # alanine dipeptide with implicit water self.pdb1 = PDBFile('systems/alanine-dipeptide-implicit.pdb') def test_CustomHbondGenerator(self): """Test the generator for CustomHbondForce.""" for bondCutoff in range(4): xml = """ 0 1 2 3 4 5 """ % bondCutoff ff = ForceField('amber99sb.xml', StringIO(xml)) system = ff.createSystem(self.pdb1.topology) hbond = [f for f in system.getForces() if isinstance(f, CustomHbondForce)][0] self.assertEqual(1, hbond.getNumPerDonorParameters()) self.assertEqual(1, hbond.getNumPerAcceptorParameters()) self.assertEqual('a', hbond.getPerDonorParameterName(0)) self.assertEqual('b', hbond.getPerAcceptorParameterName(0)) self.assertEqual(1, hbond.getNumTabulatedFunctions()) expectedDonors = [(4,6,7), (14,16,17)] expectedAcceptors = [(4,5,-1), (14,15,-1)] self.assertEqual(len(expectedDonors), hbond.getNumDonors()) self.assertEqual(len(expectedAcceptors), hbond.getNumAcceptors()) for i in range(hbond.getNumDonors()): atom1, atom2, atom3, params = hbond.getDonorParameters(i) self.assertTrue((atom1, atom2, atom3) in expectedDonors) self.assertEqual((3.0,), params) for i in range(hbond.getNumAcceptors()): atom1, atom2, atom3, params = hbond.getAcceptorParameters(i) self.assertTrue((atom1, atom2, atom3) in expectedAcceptors) self.assertEqual((2.0,), params) expectedExclusions = [(0,0), (1,1)] if bondCutoff >= 2: expectedExclusions.append((0,1)) if bondCutoff >= 3: expectedExclusions.append((1,0)) self.assertEqual(len(expectedExclusions), hbond.getNumExclusions()) for i in range(hbond.getNumExclusions()): self.assertTrue(tuple(hbond.getExclusionParticles(i)) in expectedExclusions) def test_CustomHbondGenerator2(self): """Test the generator for CustomHbondForce with different parameters.""" xml = """ """ ff = ForceField('amber99sb.xml', StringIO(xml)) system = ff.createSystem(self.pdb1.topology) hbond = [f for f in system.getForces() if isinstance(f, CustomHbondForce)][0] self.assertEqual(1, hbond.getNumPerDonorParameters()) self.assertEqual(1, hbond.getNumPerAcceptorParameters()) self.assertEqual('a', hbond.getPerDonorParameterName(0)) self.assertEqual('b', hbond.getPerAcceptorParameterName(0)) expectedDonors = [(6,7,-1), (16,17,-1)] expectedAcceptors = [(5,-1,-1), (15,-1,-1)] self.assertEqual(len(expectedDonors), hbond.getNumDonors()) self.assertEqual(len(expectedAcceptors), hbond.getNumAcceptors()) for i in range(hbond.getNumDonors()): atom1, atom2, atom3, params = hbond.getDonorParameters(i) self.assertTrue((atom1, atom2, atom3) in expectedDonors) self.assertEqual((3.0,), params) for i in range(hbond.getNumAcceptors()): atom1, atom2, atom3, params = hbond.getAcceptorParameters(i) self.assertTrue((atom1, atom2, atom3) in expectedAcceptors) self.assertEqual((2.0,), params) if __name__ == '__main__': unittest.main()