Commit 5a06df78 authored by tic20's avatar tic20
Browse files
parents 8dd60914 a9223eea
...@@ -91,6 +91,8 @@ def run_tests(): ...@@ -91,6 +91,8 @@ def run_tests():
if errorsOk: if errorsOk:
print() print()
print('All differences are within tolerance.') print('All differences are within tolerance.')
else:
raise Exception("Large differences observed. See messages above.")
def main(): def main():
...@@ -105,7 +107,7 @@ def main(): ...@@ -105,7 +107,7 @@ def main():
run_tests() run_tests()
except Exception as err: except Exception as err:
print('Problem with OpenMM installation ' print('Problem with OpenMM installation '
'encountered. OpenMM will not work until the problem ' 'encountered. OpenMM will not work correctly until the problem '
'has been fixed.\n\n', 'has been fixed.\n\n',
file=sys.stderr) file=sys.stderr)
print('Error message: %s' % str(err), file=sys.stderr) print('Error message: %s' % str(err), file=sys.stderr)
......
...@@ -21,6 +21,9 @@ except ImportError: ...@@ -21,6 +21,9 @@ except ImportError:
INDENT = " " INDENT = " "
docTags = {'emphasis':'i', 'bold':'b', 'itemizedlist':'ul', 'listitem':'li', 'preformatted':'pre', 'computeroutput':'tt', 'subscript':'sub'} docTags = {'emphasis':'i', 'bold':'b', 'itemizedlist':'ul', 'listitem':'li', 'preformatted':'pre', 'computeroutput':'tt', 'subscript':'sub'}
def is_method_abstract(argstring):
return argstring.split(")")[-1].find("=0") >= 0
def striphtmltags(s): def striphtmltags(s):
"""Strip a couple html tags used inside docstrings in the C++ source """Strip a couple html tags used inside docstrings in the C++ source
to produce something more easily read as plain text. to produce something more easily read as plain text.
...@@ -511,7 +514,7 @@ class SwigInputBuilder: ...@@ -511,7 +514,7 @@ class SwigInputBuilder:
mArgsstring = getText("argsstring", memberNode) mArgsstring = getText("argsstring", memberNode)
if self.fOutPythonprepend and \ if self.fOutPythonprepend and \
len(paramList) and \ len(paramList) and \
mArgsstring.find('=0') < 0: not is_method_abstract(mArgsstring):
text = ''' text = '''
%pythonprepend OpenMM::{shortClassName}::{methName}{mArgsstring} %{{{{{{0}} %pythonprepend OpenMM::{shortClassName}::{methName}{mArgsstring} %{{{{{{0}}
%}}}}'''.format(shortClassName=shortClassName, methName=methName, mArgsstring=mArgsstring) %}}}}'''.format(shortClassName=shortClassName, methName=methName, mArgsstring=mArgsstring)
...@@ -529,6 +532,7 @@ class SwigInputBuilder: ...@@ -529,6 +532,7 @@ class SwigInputBuilder:
% self.__class__.__name__) % self.__class__.__name__)
raise Exception(s)'''.format(argName=argName) raise Exception(s)'''.format(argName=argName)
# Convert input arguments to the proper units, if specified. # Convert input arguments to the proper units, if specified.
if key not in methodsWithOutputArgs: if key not in methodsWithOutputArgs:
if key in self.configModule.UNITS: if key in self.configModule.UNITS:
...@@ -563,9 +567,10 @@ class SwigInputBuilder: ...@@ -563,9 +567,10 @@ class SwigInputBuilder:
# write pythonappend blocks # write pythonappend blocks
if self.fOutPythonappend \ if self.fOutPythonappend \
and mArgsstring.find('=0') < 0: and not is_method_abstract(mArgsstring):
key = (shortClassName, methName) key = (shortClassName, methName)
#print "key %s %s \n" % (shortClassName, methName) #sys.stdout.write("key %s %s \n" % (shortClassName, methName))
addText='' addText=''
returnType = getText("type", memberNode) returnType = getText("type", memberNode)
...@@ -619,8 +624,15 @@ class SwigInputBuilder: ...@@ -619,8 +624,15 @@ class SwigInputBuilder:
pType = getText('type', pNode) pType = getText('type', pNode)
except IndexError: except IndexError:
pType = getText('type/ref', pNode) pType = getText('type/ref', pNode)
# parse default arguments
try:
defaultValue = getText('defval', pNode)
except:
defaultValue = ""
if defaultValue != "":
defaultValue = "=%s" %defaultValue
pName = getText('declname', pNode) pName = getText('declname', pNode)
self.fOutPythonappend.write("%s%s %s" % (sepChar, pType, pName)) self.fOutPythonappend.write("%s%s %s%s" % (sepChar, pType, pName, defaultValue))
sepChar=', ' sepChar=', '
if pType.find('&')>=0 and \ if pType.find('&')>=0 and \
......
...@@ -66,6 +66,8 @@ SKIP_METHODS = [('State', 'getPositions'), ...@@ -66,6 +66,8 @@ SKIP_METHODS = [('State', 'getPositions'),
('IntegrateVariableLangevinStepKernel',), ('IntegrateVariableLangevinStepKernel',),
('IntegrateVariableVerletStepKernel',), ('IntegrateVariableVerletStepKernel',),
('IntegrateVerletStepKernel',), ('IntegrateVerletStepKernel',),
('IntegrateVelocityVerletStepKernel',),
('NoseHooverChainKernel',),
('IntegrateCustomStepKernel',), ('IntegrateCustomStepKernel',),
('Kernel',), ('Kernel',),
('KernelFactory',), ('KernelFactory',),
...@@ -112,6 +114,8 @@ SKIP_METHODS = [('State', 'getPositions'), ...@@ -112,6 +114,8 @@ SKIP_METHODS = [('State', 'getPositions'),
('LocalCoordinatesSite', 'getOriginWeights', 0), ('LocalCoordinatesSite', 'getOriginWeights', 0),
('LocalCoordinatesSite', 'getXWeights', 0), ('LocalCoordinatesSite', 'getXWeights', 0),
('LocalCoordinatesSite', 'getYWeights', 0), ('LocalCoordinatesSite', 'getYWeights', 0),
("NoseHooverIntegrator", "getAllThermostatedIndividualParticles"),
("NoseHooverIntegrator", "getAllThermostatedPairs"),
] ]
# The build script assumes method args that are non-const references are # The build script assumes method args that are non-const references are
...@@ -180,6 +184,7 @@ UNITS = { ...@@ -180,6 +184,7 @@ UNITS = {
("*", "setDefaultSurfaceTension") : (None, ("unit.bar*unit.nanometer",)), ("*", "setDefaultSurfaceTension") : (None, ("unit.bar*unit.nanometer",)),
("*", "getDefaultTemperature") : ("unit.kelvin", ()), ("*", "getDefaultTemperature") : ("unit.kelvin", ()),
("*", "setDefaultTemperature") : (None, ("unit.kelvin",)), ("*", "setDefaultTemperature") : (None, ("unit.kelvin",)),
("*", "getRelativeTemperature") : ("unit.kelvin", ()),
("*", "getErrorTolerance") : (None, ()), ("*", "getErrorTolerance") : (None, ()),
("*", "getEwaldErrorTolerance") : (None, ()), ("*", "getEwaldErrorTolerance") : (None, ()),
("*", "getFriction") : ("1/unit.picosecond", ()), ("*", "getFriction") : ("1/unit.picosecond", ()),
...@@ -213,6 +218,9 @@ UNITS = { ...@@ -213,6 +218,9 @@ UNITS = {
("*", "getTabulatedFunction") : (None, ()), ("*", "getTabulatedFunction") : (None, ()),
("*", "getUseDispersionCorrection") : (None, ()), ("*", "getUseDispersionCorrection") : (None, ()),
("*", "getTemperature") : ("unit.kelvin", ()), ("*", "getTemperature") : ("unit.kelvin", ()),
("*", "getRelativeTemperature") : ("unit.kelvin", ()),
("*", "getCollisionFrequency") : ( "1/unit.picosecond", ()),
("*", "getRelativeCollisionFrequency") : ( "1/unit.picosecond", ()),
("*", "getUseDispersionCorrection") : (None, ()), ("*", "getUseDispersionCorrection") : (None, ()),
("*", "getWeight") : (None, ()), ("*", "getWeight") : (None, ()),
("*", "getWeight12") : (None, ()), ("*", "getWeight12") : (None, ()),
...@@ -339,9 +347,11 @@ UNITS = { ...@@ -339,9 +347,11 @@ UNITS = {
("HippoNonbondedForce", "getInducedDipoles") : ( None, ()), ("HippoNonbondedForce", "getInducedDipoles") : ( None, ()),
("HippoNonbondedForce", "getLabFramePermanentDipoles") : ( None, ()), ("HippoNonbondedForce", "getLabFramePermanentDipoles") : ( None, ()),
("Context", "getParameter") : (None, ()), ("Context", "getParameter") : (None, ()),
("Context", "getParameters") : (None, ()), ("Context", "getParameters") : (None, ()),
("Context", "getMolecules") : (None, ()), ("Context", "getMolecules") : (None, ()),
("Context", "getState") : (None, (None, None, None)),
("CMAPTorsionForce", "getMapParameters") : (None, (None, 'unit.kilojoule_per_mole')), ("CMAPTorsionForce", "getMapParameters") : (None, (None, 'unit.kilojoule_per_mole')),
("CMAPTorsionForce", "getTorsionParameters") : (None, ()), ("CMAPTorsionForce", "getTorsionParameters") : (None, ()),
("CMMotionRemover", "getFrequency") : (None, ()), ("CMMotionRemover", "getFrequency") : (None, ()),
...@@ -465,11 +475,28 @@ UNITS = { ...@@ -465,11 +475,28 @@ UNITS = {
("MonteCarloMembraneBarostat", "MonteCarloMembraneBarostat") : (None, ("unit.bar", "unit.bar*unit.nanometer", "unit.kelvin", None, None, None)), ("MonteCarloMembraneBarostat", "MonteCarloMembraneBarostat") : (None, ("unit.bar", "unit.bar*unit.nanometer", "unit.kelvin", None, None, None)),
("MonteCarloMembraneBarostat", "getXYMode") : (None, ()), ("MonteCarloMembraneBarostat", "getXYMode") : (None, ()),
("MonteCarloMembraneBarostat", "getZMode") : (None, ()), ("MonteCarloMembraneBarostat", "getZMode") : (None, ()),
("DrudeLangevinIntegrator", "getDrudeFriction") : ("1/unit.picosecond", ()), ("DrudeLangevinIntegrator", "getDrudeFriction") : ("unit.picosecond**-1", ()),
("DrudeSCFIntegrator", "getMinimizationErrorTolerance") : ("unit.kilojoules_per_mole/unit.nanometer", ()), ("DrudeSCFIntegrator", "getMinimizationErrorTolerance") : ("unit.kilojoules_per_mole/unit.nanometer", ()),
("RPMDIntegrator", "getContractions") : (None, ()), ("RPMDIntegrator", "getContractions") : (None, ()),
("RPMDIntegrator", "getTotalEnergy") : ("unit.kilojoules_per_mole", ()), ("RPMDIntegrator", "getTotalEnergy") : ("unit.kilojoules_per_mole", ()),
("RPMDIntegrator", "getState"): (None,(None, None, None, None)),
("RMSDForce", "getReferencePositions") : ("unit.nanometer", ()), ("RMSDForce", "getReferencePositions") : ("unit.nanometer", ()),
("RMSDForce", "getParticles") : (None, ()), ("RMSDForce", "getParticles") : (None, ()),
("NoseHooverChain", "getThermostatedPairs") : (None, ()),
("NoseHooverChain", "getThermostatedAtoms") : (None, ()),
("NoseHooverChain", "getYoshidaSuzukiWeights") : (None, ()),
("NoseHooverIntegrator", "setTemperature") : (None, ("unit.kelvin", None)),
("NoseHooverIntegrator", "setRelativeTemperature") : (None, ("unit.kelvin", None) ),
("NoseHooverIntegrator", "setCollisionFrequency") : (None, ("unit.picosecond**-1", None)),
("NoseHooverIntegrator", "setRelativeCollisionFrequency") : (None, ("unit.picosecond**-1", None)),
("NoseHooverIntegrator", "computeHeatBathEnergy") : ( "unit.kilojoules_per_mole", ()),
("NoseHooverIntegrator", "addThermostat"): (None, ("unit.kelvin", "unit.picosecond**-1", None, None, None)),
("NoseHooverIntegrator", "addSubsystemThermostat"):
(None, (None, None, "unit.kelvin", "unit.picosecond**-1", "unit.kelvin", "unit.picosecond**-1", None, None, None)),
("NoseHooverIntegrator", "getNumThermostats") : (None, ()),
("NoseHooverIntegrator", "getThermostat") : (None, ()),
("NoseHooverIntegrator", "getMaximumPairDistance") : ("unit.nanometer", ()),
("NoseHooverIntegrator", "setMaximumPairDistance") : (None, ("unit.nanometer",)),
("DrudeNoseHooverIntegrator", "getMaxDrudeDistance") : ("unit.nanometer", ()),
("DrudeNoseHooverIntegrator", "setMaxDrudeDistance") : (None, ("unit.nanometer",)),
} }
...@@ -682,7 +682,7 @@ class TestAPIUnits(unittest.TestCase): ...@@ -682,7 +682,7 @@ class TestAPIUnits(unittest.TestCase):
force.setSolventDielectric(80) force.setSolventDielectric(80)
self.assertEqual(force.getSolventDielectric(), 80) self.assertEqual(force.getSolventDielectric(), 80)
self.assertEqual(force.getSurfaceAreaFactor(), self.assertAlmostEqualUnit(force.getSurfaceAreaFactor(),
-170.35173066268223*kilojoule_per_mole/nanometer**2) # default -170.35173066268223*kilojoule_per_mole/nanometer**2) # default
force.setSurfaceAreaFactor(-1.0*kilocalorie_per_mole/angstrom**2) force.setSurfaceAreaFactor(-1.0*kilocalorie_per_mole/angstrom**2)
self.assertAlmostEqualUnit(force.getSurfaceAreaFactor(), self.assertAlmostEqualUnit(force.getSurfaceAreaFactor(),
...@@ -1165,6 +1165,60 @@ class TestAPIUnits(unittest.TestCase): ...@@ -1165,6 +1165,60 @@ class TestAPIUnits(unittest.TestCase):
self.assertAlmostEqualUnit(integrator.getFriction(), 0.1/microsecond) self.assertAlmostEqualUnit(integrator.getFriction(), 0.1/microsecond)
self.assertEqual(integrator.getStepSize(), 1*femtosecond) self.assertEqual(integrator.getStepSize(), 1*femtosecond)
def testNoseHooverIntegrator(self):
""" Tests the NoseHooverIntegrator API features """
integrator = NoseHooverIntegrator(300, 0.1, 1)
self.assertEqual(integrator.getTemperature(0), 300*kelvin)
self.assertEqual(integrator.getCollisionFrequency(), 0.1/picosecond)
self.assertEqual(integrator.getStepSize(), 1*picosecond)
integrator = NoseHooverIntegrator(300*kelvin, 0.1/microsecond, 1*femtosecond)
self.assertEqual(integrator.getTemperature(), 300*kelvin)
self.assertAlmostEqualUnit(integrator.getCollisionFrequency(), 0.1/microsecond)
self.assertEqual(integrator.getStepSize(), 1*femtosecond)
self.assertEqual(integrator.computeHeatBathEnergy(), 0.0*kilojoule_per_mole)
# Test setters
integrator.setTemperature(200*kelvin)
self.assertEqual(integrator.getTemperature(), 200*kelvin)
integrator.setCollisionFrequency(0.1/picosecond)
self.assertEqual(integrator.getCollisionFrequency(), 0.1/picosecond)
integrator.setRelativeTemperature(200*kelvin)
self.assertEqual(integrator.getRelativeTemperature(), 200*kelvin)
integrator.setRelativeCollisionFrequency(0.1/picosecond)
self.assertEqual(integrator.getRelativeCollisionFrequency(), 0.1/picosecond)
# Test bare consructor and addThermostat
integrator = NoseHooverIntegrator(1*femtosecond)
self.assertEqual(integrator.getStepSize(), 1*femtosecond)
integrator.addThermostat(300*kelvin, 0.1/microsecond, 3, 3, 3)
self.assertAlmostEqualUnit(integrator.getTemperature(), 300*kelvin)
self.assertAlmostEqualUnit(integrator.getCollisionFrequency(), 0.1/microsecond)
integrator = NoseHooverIntegrator(1*femtosecond)
integrator.addSubsystemThermostat([0], [], 300*kelvin, 0.1/microsecond, 1.0*kelvin, 1.0/microsecond, 3, 3, 3)
self.assertAlmostEqualUnit(integrator.getTemperature(), 300*kelvin)
self.assertAlmostEqualUnit(integrator.getCollisionFrequency(), 0.1/microsecond)
self.assertAlmostEqualUnit(integrator.getRelativeTemperature(), 1.0*kelvin)
self.assertAlmostEqualUnit(integrator.getRelativeCollisionFrequency(), 1.0/microsecond)
def testDrudeNoseHooverIntegrator(self):
""" Tests the DrudeNoseHooverIntegrator API features """
integrator = DrudeNoseHooverIntegrator(300, 0.1, 1.0, 1.0, 1)
self.assertEqual(integrator.getTemperature(0), 300*kelvin)
self.assertEqual(integrator.getCollisionFrequency(), 0.1/picosecond)
self.assertEqual(integrator.getRelativeTemperature(0), 1.0*kelvin)
self.assertEqual(integrator.getRelativeCollisionFrequency(), 1.0/picosecond)
self.assertEqual(integrator.getStepSize(), 1*picosecond)
integrator = DrudeNoseHooverIntegrator(300*kelvin, 0.1/microsecond, 5.0*kelvin, 0.01/microsecond, 1*femtosecond)
self.assertEqual(integrator.getTemperature(), 300*kelvin)
self.assertAlmostEqualUnit(integrator.getCollisionFrequency(), 0.1/microsecond)
self.assertEqual(integrator.getRelativeTemperature(), 5.0*kelvin)
self.assertAlmostEqualUnit(integrator.getRelativeCollisionFrequency(), 0.01/microsecond)
self.assertEqual(integrator.getStepSize(), 1*femtosecond)
def testAndersenThermostat(self): def testAndersenThermostat(self):
""" Tests the AndersenThermostat API features """ """ Tests the AndersenThermostat API features """
force = AndersenThermostat(300*kelvin, 1/microsecond) force = AndersenThermostat(300*kelvin, 1/microsecond)
......
...@@ -284,7 +284,7 @@ class TestCharmmFiles(unittest.TestCase): ...@@ -284,7 +284,7 @@ class TestCharmmFiles(unittest.TestCase):
+ ["H{}".format(i) for i in range(1,12)] + ["H{}".format(i) for i in range(1,12)]
+ ["N{}".format(i) for i in range(1,4)] + ["N{}".format(i) for i in range(1,4)]
) )
tip3 = ["OH2", "H1", "H2"] hoh = ["O", "H1", "H2"]
pot = ["POT"] pot = ["POT"]
cla = ["CLA"] cla = ["CLA"]
psf = CharmmPsfFile('systems/charmm-solvated/isa_wat.3_kcl.m14.psf') psf = CharmmPsfFile('systems/charmm-solvated/isa_wat.3_kcl.m14.psf')
...@@ -292,8 +292,8 @@ class TestCharmmFiles(unittest.TestCase): ...@@ -292,8 +292,8 @@ class TestCharmmFiles(unittest.TestCase):
atoms = [atom.name for atom in residue.atoms()] atoms = [atom.name for atom in residue.atoms()]
if residue.name == "M14": if residue.name == "M14":
self.assertEqual(sorted(m14), sorted(atoms)) self.assertEqual(sorted(m14), sorted(atoms))
elif residue.name == "TIP3": elif residue.name == "HOH":
self.assertEqual(sorted(tip3), sorted(atoms)) self.assertEqual(sorted(hoh), sorted(atoms))
elif residue.name == "POT": elif residue.name == "POT":
self.assertEqual(sorted(pot), sorted(atoms)) self.assertEqual(sorted(pot), sorted(atoms))
elif residue.name == "CLA": elif residue.name == "CLA":
...@@ -349,6 +349,18 @@ class TestCharmmFiles(unittest.TestCase): ...@@ -349,6 +349,18 @@ class TestCharmmFiles(unittest.TestCase):
energy = context.getState(getEnergy=True).getPotentialEnergy().value_in_unit(kilocalories_per_mole) energy = context.getState(getEnergy=True).getPotentialEnergy().value_in_unit(kilocalories_per_mole)
self.assertAlmostEqual(energy, modeEnergy[abs(nbxmod)], delta=1e-3*abs(energy)) self.assertAlmostEqual(energy, modeEnergy[abs(nbxmod)], delta=1e-3*abs(energy))
def test_Nonbonded_Exclusion(self):
"""Test that the 1-2, 1-3 and 1-4 pairs are correctly excluded or scaled."""
psf = CharmmPsfFile('systems/MoS2.psf')
pdb = PDBFile('systems/MoS2.pdb')
params = CharmmParameterSet('systems/MoS2.prm')
system = psf.createSystem(params, nonbondedMethod=NoCutoff)
context = Context(system, VerletIntegrator(1*femtoseconds), Platform.getPlatformByName('Reference'))
context.setPositions(pdb.positions)
energy = context.getState(getEnergy=True).getPotentialEnergy().value_in_unit(kilocalories_per_mole)
# Compare with value computed with NAMD.
self.assertAlmostEqual(energy, -2154.5539, delta=1e-3*abs(energy))
if __name__ == '__main__': if __name__ == '__main__':
unittest.main() unittest.main()
......
...@@ -165,12 +165,12 @@ class TestForceField(unittest.TestCase): ...@@ -165,12 +165,12 @@ class TestForceField(unittest.TestCase):
topology = self.pdb1.topology topology = self.pdb1.topology
for constraints_value in [None, HBonds, AllBonds, HAngles]: for constraints_value in [None, HBonds, AllBonds, HAngles]:
for rigidWater_value in [True, False]: for rigidWater_value in [True, False, None]:
system = self.forcefield1.createSystem(topology, system = self.forcefield1.createSystem(topology,
constraints=constraints_value, constraints=constraints_value,
rigidWater=rigidWater_value) rigidWater=rigidWater_value)
validateConstraints(self, topology, system, validateConstraints(self, topology, system,
constraints_value, rigidWater_value) constraints_value, rigidWater_value != False)
def test_flexibleConstraints(self): def test_flexibleConstraints(self):
""" Test the flexibleConstraints keyword """ """ Test the flexibleConstraints keyword """
...@@ -907,6 +907,55 @@ class TestForceField(unittest.TestCase): ...@@ -907,6 +907,55 @@ class TestForceField(unittest.TestCase):
self.assertEqual(system1_indexes, [51, 56, 54, 55]) self.assertEqual(system1_indexes, [51, 56, 54, 55])
self.assertEqual(system2_indexes, [51, 55, 54, 56]) self.assertEqual(system2_indexes, [51, 55, 54, 56])
def test_ImpropersOrdering_smirnoff(self):
"""Test correctness of the ordering of atom indexes in improper torsions
and the torsion.ordering parameter when using the 'smirnoff' mode.
"""
# SMIRNOFF parameters for formaldehyde
xml = """
<ForceField>
<AtomTypes>
<Type name="[H]C(=O)[H]$C1#0" element="C" mass="12.01078" class="[H]C(=O)[H]$C1#0"/>
<Type name="[H]C(=O)[H]$O1#1" element="O" mass="15.99943" class="[H]C(=O)[H]$O1#1"/>
<Type name="[H]C(=O)[H]$H1#2" element="H" mass="1.007947" class="[H]C(=O)[H]$H1#2"/>
<Type name="[H]C(=O)[H]$H2#3" element="H" mass="1.007947" class="[H]C(=O)[H]$H2#3"/>
</AtomTypes>
<PeriodicTorsionForce ordering="smirnoff">
<Improper class1="[H]C(=O)[H]$C1#0" class2="[H]C(=O)[H]$O1#1" class3="[H]C(=O)[H]$H1#2" class4="[H]C(=O)[H]$H2#3" periodicity1="2" phase1="3.141592653589793" k1="1.5341333333333336"/>
<Improper class1="[H]C(=O)[H]$C1#0" class2="[H]C(=O)[H]$H1#2" class3="[H]C(=O)[H]$H2#3" class4="[H]C(=O)[H]$O1#1" periodicity1="2" phase1="3.141592653589793" k1="1.5341333333333336"/>
<Improper class1="[H]C(=O)[H]$C1#0" class2="[H]C(=O)[H]$H2#3" class3="[H]C(=O)[H]$O1#1" class4="[H]C(=O)[H]$H1#2" periodicity1="2" phase1="3.141592653589793" k1="1.5341333333333336"/>
</PeriodicTorsionForce>
<Residues>
<Residue name="[H]C(=O)[H]">
<Atom name="C1" type="[H]C(=O)[H]$C1#0" charge="0.5632799863815308"/>
<Atom name="O1" type="[H]C(=O)[H]$O1#1" charge="-0.514739990234375"/>
<Atom name="H1" type="[H]C(=O)[H]$H1#2" charge="-0.02426999807357788"/>
<Atom name="H2" type="[H]C(=O)[H]$H2#3" charge="-0.02426999807357788"/>
<Bond atomName1="C1" atomName2="O1"/>
<Bond atomName1="C1" atomName2="H1"/>
<Bond atomName1="C1" atomName2="H2"/>
</Residue>
</Residues>
</ForceField>
"""
pdb = PDBFile('systems/formaldehyde.pdb')
# ff1 uses default ordering of impropers, ff2 uses "amber" for the one
# problematic improper
ff = ForceField(StringIO(xml))
system = ff.createSystem(pdb.topology)
# Check that impropers are applied in the correct three-fold trefoil pattern
forces = { force.__class__.__name__ : force for force in system.getForces() }
force = forces['PeriodicTorsionForce']
created_torsions = set()
for index in range(force.getNumTorsions()):
i,j,k,l,_,_,_ = force.getTorsionParameters(index)
created_torsions.add((i,j,k,l))
expected_torsions = set([(0,3,1,2), (0,1,2,3), (0,2,3,1)])
self.assertEqual(expected_torsions, created_torsions)
def test_Disulfides(self): def test_Disulfides(self):
"""Test that various force fields handle disulfides correctly.""" """Test that various force fields handle disulfides correctly."""
pdb = PDBFile('systems/bpti.pdb') pdb = PDBFile('systems/bpti.pdb')
...@@ -1012,6 +1061,15 @@ class AmoebaTestForceField(unittest.TestCase): ...@@ -1012,6 +1061,15 @@ class AmoebaTestForceField(unittest.TestCase):
self.assertAlmostEqual(constraints[(0,1)], hoDist) self.assertAlmostEqual(constraints[(0,1)], hoDist)
self.assertAlmostEqual(constraints[(0,2)], hoDist) self.assertAlmostEqual(constraints[(0,2)], hoDist)
self.assertAlmostEqual(constraints[(1,2)], hohDist) self.assertAlmostEqual(constraints[(1,2)], hohDist)
# Check that all values of rigidWater are interpreted correctly.
numWaters = 215
self.assertEqual(3*numWaters, system.getNumConstraints())
system = self.forcefield1.createSystem(self.pdb1.topology, rigidWater=False)
self.assertEqual(0, system.getNumConstraints())
system = self.forcefield1.createSystem(self.pdb1.topology, rigidWater=None)
self.assertEqual(0, system.getNumConstraints())
def test_Forces(self): def test_Forces(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."""
......
...@@ -93,6 +93,20 @@ class TestGromacsTopFile(unittest.TestCase): ...@@ -93,6 +93,20 @@ class TestGromacsTopFile(unittest.TestCase):
cutoff_distance = force.getCutoffDistance() cutoff_distance = force.getCutoffDistance()
self.assertEqual(cutoff_distance, cutoff_check) self.assertEqual(cutoff_distance, cutoff_check)
def test_SwitchingFunction(self):
"""Test using a switching function."""
for filename in ('systems/implicit.top', 'systems/ionic.top'):
top = GromacsTopFile(filename)
for distance in (None, 0.8*nanometers):
system = top.createSystem(nonbondedMethod=CutoffNonPeriodic, switchDistance=distance)
for f in system.getForces():
if isinstance(f, NonbondedForce) or isinstance(f, CustomNonbondedForce):
if distance is None:
self.assertFalse(f.getUseSwitchingFunction())
else:
self.assertTrue(f.getUseSwitchingFunction())
self.assertEqual(distance, f.getSwitchingDistance())
def test_EwaldErrorTolerance(self): def test_EwaldErrorTolerance(self):
"""Test to make sure the ewaldErrorTolerance parameter is passed correctly.""" """Test to make sure the ewaldErrorTolerance parameter is passed correctly."""
......
import unittest import unittest
import warnings
import tempfile import tempfile
from datetime import datetime, timedelta from datetime import datetime, timedelta
from simtk.openmm import * from simtk.openmm import *
...@@ -120,5 +121,36 @@ class TestIntegrators(unittest.TestCase): ...@@ -120,5 +121,36 @@ class TestIntegrators(unittest.TestCase):
context.setPositions(pdb.positions) context.setPositions(pdb.positions)
integrator.step(10) integrator.step(10)
def testNoseHooverIntegrator(self):
"""Test partial thermostating in the NoseHooverIntegrator (only API)"""
pdb = PDBFile('systems/alanine-dipeptide-explicit.pdb')
ff = ForceField('amber99sbildn.xml', 'tip3p.xml')
system = ff.createSystem(pdb.topology, cutoffMethod=PME)
integrator = NoseHooverIntegrator(1.0*femtosecond)
integrator.addSubsystemThermostat(list(range(5)), [], 200*kelvin, 1/picosecond, 200*kelvin, 1/picosecond, 3,3,3)
con = Context(system, integrator)
con.setPositions(pdb.positions)
integrator.step(5)
self.assertNotEqual(integrator.computeHeatBathEnergy(), 0.0*kilojoule_per_mole)
def testDrudeNoseHooverIntegrator(self):
"""Test the DrudeNoseHooverIntegrator"""
warnings.filterwarnings('ignore', category=CharmmPSFWarning)
psf = CharmmPsfFile('systems/ala3_solv_drude.psf')
crd = CharmmCrdFile('systems/ala3_solv_drude.crd')
params = CharmmParameterSet('systems/toppar_drude_master_protein_2013e.str')
# Box dimensions (cubic box)
psf.setBox(33.2*angstroms, 33.2*angstroms, 33.2*angstroms)
system = psf.createSystem(params, nonbondedMethod=PME, ewaldErrorTolerance=0.0005)
integrator = DrudeNoseHooverIntegrator(300*kelvin, 1.0/picosecond, 1*kelvin, 10/picosecond, 0.001*picoseconds)
con = Context(system, integrator)
con.setPositions(crd.positions)
integrator.step(5)
self.assertNotEqual(integrator.computeHeatBathEnergy(), 0.0*kilojoule_per_mole)
if __name__ == '__main__': if __name__ == '__main__':
unittest.main() unittest.main()
...@@ -171,5 +171,18 @@ class TestPdbxFile(unittest.TestCase): ...@@ -171,5 +171,18 @@ class TestPdbxFile(unittest.TestCase):
for chain1, chain2 in zip(cif_ori.topology.chains(), cif_new.topology.chains()): for chain1, chain2 in zip(cif_ori.topology.chains(), cif_new.topology.chains()):
self.assertEqual(chain1.id, chain2.id) self.assertEqual(chain1.id, chain2.id)
def testInsertionCodes(self):
"""Test reading a file that uses insertion codes."""
pdbx = PDBxFile('systems/insertions.pdbx')
residues = list(pdbx.topology.residues())
self.assertEqual(7, len(residues))
names = ['PHE', 'ASP', 'LYS', 'ILE', 'LYS', 'ASN', 'TRP']
ids = ['59', '60', '60', '60', '60', '60', '61']
codes = ['', '', 'A', 'B', 'C', 'D', '']
for res, name, id, code in zip(residues, names, ids, codes):
self.assertEqual(name, res.name)
self.assertEqual(id, res.id)
self.assertEqual(code, res.insertionCode)
if __name__ == '__main__': if __name__ == '__main__':
unittest.main() unittest.main()
timestep 1.0 # fs
# initial config
coordinates MoS2.pdb
temperature 300K
outputname out
# force field params
structure MoS2.psf
parameters MoS2.prm
paraTypeCharmm on
vdwGeometricSigma no
LJcorrection no
exclude scaled1-4
1-4scaling 1.0
switching off
cutoff 100 # A. actually no cutoff
pairlistdist 100
run 20
TITLE created by fftool
REMARK SIMBOX
CRYST1 50.000 50.000 50.000 90.00 90.00 90.00 P 1 1
ATOM 1 Mo01 MoS2 1 36.632 11.332 15.080 1.00 0.00 Mo
ATOM 2 Mo02 MoS2 1 48.105 10.837 4.221 1.00 0.00 Mo
ATOM 3 Mo03 MoS2 1 48.501 1.004 16.589 1.00 0.00 Mo
ATOM 4 Mo04 MoS2 1 39.006 9.266 15.382 1.00 0.00 Mo
ATOM 5 Mo05 MoS2 1 45.811 10.936 6.393 1.00 0.00 Mo
ATOM 6 Mo06 MoS2 1 48.422 2.971 14.116 1.00 0.00 Mo
ATOM 7 Mo07 MoS2 1 48.184 8.870 6.695 1.00 0.00 Mo
ATOM 8 Mo08 MoS2 1 38.927 11.233 12.909 1.00 0.00 Mo
ATOM 9 Mo09 MoS2 1 46.127 3.070 16.287 1.00 0.00 Mo
ATOM 10 Mo10 MoS2 1 41.380 7.201 15.684 1.00 0.00 Mo
ATOM 11 Mo11 MoS2 1 43.516 11.035 8.565 1.00 0.00 Mo
ATOM 12 Mo12 MoS2 1 48.343 4.937 11.642 1.00 0.00 Mo
ATOM 13 Mo13 MoS2 1 48.264 6.904 9.168 1.00 0.00 Mo
ATOM 14 Mo14 MoS2 1 41.221 11.134 10.737 1.00 0.00 Mo
ATOM 15 Mo15 MoS2 1 43.754 5.135 15.986 1.00 0.00 Mo
ATOM 16 Mo16 MoS2 1 36.553 13.298 12.607 1.00 0.00 Mo
ATOM 17 Mo17 MoS2 1 36.237 21.164 2.712 1.00 0.00 Mo
ATOM 18 Mo18 MoS2 1 45.732 12.902 3.919 1.00 0.00 Mo
ATOM 19 Mo19 MoS2 1 41.301 9.167 13.210 1.00 0.00 Mo
ATOM 20 Mo20 MoS2 1 45.890 8.969 8.867 1.00 0.00 Mo
ATOM 21 Mo21 MoS2 1 46.048 5.036 13.814 1.00 0.00 Mo
ATOM 22 Mo22 MoS2 1 43.674 7.102 13.512 1.00 0.00 Mo
ATOM 23 Mo23 MoS2 1 43.595 9.068 11.038 1.00 0.00 Mo
ATOM 24 Mo24 MoS2 1 45.969 7.003 11.340 1.00 0.00 Mo
ATOM 25 Mo25 MoS2 1 36.474 15.265 10.133 1.00 0.00 Mo
ATOM 26 Mo26 MoS2 1 38.610 19.099 3.014 1.00 0.00 Mo
ATOM 27 Mo27 MoS2 1 43.437 13.001 6.091 1.00 0.00 Mo
ATOM 28 Mo28 MoS2 1 43.358 14.968 3.618 1.00 0.00 Mo
ATOM 29 Mo29 MoS2 1 36.316 19.198 5.186 1.00 0.00 Mo
ATOM 30 Mo30 MoS2 1 38.848 13.199 10.435 1.00 0.00 Mo
ATOM 31 Mo31 MoS2 1 36.395 17.231 7.660 1.00 0.00 Mo
ATOM 32 Mo32 MoS2 1 40.984 17.033 3.316 1.00 0.00 Mo
ATOM 33 Mo33 MoS2 1 41.142 13.100 8.263 1.00 0.00 Mo
ATOM 34 Mo34 MoS2 1 38.769 15.166 7.961 1.00 0.00 Mo
ATOM 35 Mo35 MoS2 1 38.689 17.132 5.488 1.00 0.00 Mo
ATOM 36 Mo36 MoS2 1 41.063 15.067 5.790 1.00 0.00 Mo
ATOM 37 S01 MoS2 1 48.074 13.199 4.080 1.00 0.00 S
ATOM 38 S02 MoS2 1 36.601 13.694 14.939 1.00 0.00 S
ATOM 39 S03 MoS2 1 36.205 23.526 2.571 1.00 0.00 S
ATOM 40 S04 MoS2 1 46.502 11.163 2.512 1.00 0.00 S
ATOM 41 S05 MoS2 1 35.029 11.658 13.371 1.00 0.00 S
ATOM 42 S06 MoS2 1 34.633 21.490 1.003 1.00 0.00 S
ATOM 43 S07 MoS2 1 45.700 15.264 3.778 1.00 0.00 S
ATOM 44 S08 MoS2 1 38.895 13.595 12.767 1.00 0.00 S
ATOM 45 S09 MoS2 1 36.284 21.560 5.045 1.00 0.00 S
ATOM 46 S10 MoS2 1 44.128 13.228 2.210 1.00 0.00 S
ATOM 47 S11 MoS2 1 37.323 11.559 11.199 1.00 0.00 S
ATOM 48 S12 MoS2 1 34.712 19.524 3.477 1.00 0.00 S
ATOM 49 S13 MoS2 1 36.522 15.660 12.466 1.00 0.00 S
ATOM 50 S14 MoS2 1 45.779 13.298 6.252 1.00 0.00 S
ATOM 51 S15 MoS2 1 38.579 21.461 2.873 1.00 0.00 S
ATOM 52 S16 MoS2 1 34.950 13.624 10.898 1.00 0.00 S
ATOM 53 S17 MoS2 1 44.207 11.262 4.684 1.00 0.00 S
ATOM 54 S18 MoS2 1 37.007 19.425 1.305 1.00 0.00 S
ATOM 55 S19 MoS2 1 43.326 17.330 3.477 1.00 0.00 S
ATOM 56 S20 MoS2 1 41.190 13.496 10.596 1.00 0.00 S
ATOM 57 S21 MoS2 1 36.363 19.593 7.519 1.00 0.00 S
ATOM 58 S22 MoS2 1 41.754 15.294 1.909 1.00 0.00 S
ATOM 59 S23 MoS2 1 39.618 11.460 9.028 1.00 0.00 S
ATOM 60 S24 MoS2 1 34.791 17.557 5.951 1.00 0.00 S
ATOM 61 S25 MoS2 1 36.442 17.627 9.992 1.00 0.00 S
ATOM 62 S26 MoS2 1 43.484 13.397 8.424 1.00 0.00 S
ATOM 63 S27 MoS2 1 40.952 19.395 3.175 1.00 0.00 S
ATOM 64 S28 MoS2 1 34.870 15.591 8.424 1.00 0.00 S
ATOM 65 S29 MoS2 1 41.912 11.361 6.856 1.00 0.00 S
ATOM 66 S30 MoS2 1 39.380 17.359 1.607 1.00 0.00 S
ATOM 67 S31 MoS2 1 48.153 11.232 6.554 1.00 0.00 S
ATOM 68 S32 MoS2 1 48.469 3.366 16.448 1.00 0.00 S
ATOM 69 S33 MoS2 1 38.974 11.628 15.241 1.00 0.00 S
ATOM 70 S34 MoS2 1 46.581 9.196 4.986 1.00 0.00 S
ATOM 71 S35 MoS2 1 46.897 1.331 14.880 1.00 0.00 S
ATOM 72 S36 MoS2 1 37.402 9.593 13.673 1.00 0.00 S
ATOM 73 S37 MoS2 1 43.405 15.363 5.950 1.00 0.00 S
ATOM 74 S38 MoS2 1 38.816 15.561 10.294 1.00 0.00 S
ATOM 75 S39 MoS2 1 38.658 19.494 5.347 1.00 0.00 S
ATOM 76 S40 MoS2 1 41.833 13.327 4.382 1.00 0.00 S
ATOM 77 S41 MoS2 1 37.244 13.525 8.726 1.00 0.00 S
ATOM 78 S42 MoS2 1 37.086 17.458 3.779 1.00 0.00 S
ATOM 79 S43 MoS2 1 41.032 17.429 5.648 1.00 0.00 S
ATOM 80 S44 MoS2 1 41.111 15.462 8.122 1.00 0.00 S
ATOM 81 S45 MoS2 1 38.737 17.528 7.820 1.00 0.00 S
ATOM 82 S46 MoS2 1 39.460 15.393 4.080 1.00 0.00 S
ATOM 83 S47 MoS2 1 39.539 13.426 6.554 1.00 0.00 S
ATOM 84 S48 MoS2 1 37.165 15.492 6.252 1.00 0.00 S
ATOM 85 S49 MoS2 1 48.232 9.266 9.027 1.00 0.00 S
ATOM 86 S50 MoS2 1 46.096 5.432 16.146 1.00 0.00 S
ATOM 87 S51 MoS2 1 41.269 11.529 13.069 1.00 0.00 S
ATOM 88 S52 MoS2 1 46.660 7.230 7.459 1.00 0.00 S
ATOM 89 S53 MoS2 1 44.524 3.396 14.578 1.00 0.00 S
ATOM 90 S54 MoS2 1 39.697 9.494 11.501 1.00 0.00 S
ATOM 91 S55 MoS2 1 41.348 9.563 15.543 1.00 0.00 S
ATOM 92 S56 MoS2 1 48.390 5.333 13.974 1.00 0.00 S
ATOM 93 S57 MoS2 1 45.858 11.331 8.726 1.00 0.00 S
ATOM 94 S58 MoS2 1 39.776 7.527 13.975 1.00 0.00 S
ATOM 95 S59 MoS2 1 46.818 3.297 12.406 1.00 0.00 S
ATOM 96 S60 MoS2 1 44.286 9.296 7.158 1.00 0.00 S
ATOM 97 S61 MoS2 1 48.311 7.299 11.501 1.00 0.00 S
ATOM 98 S62 MoS2 1 43.722 7.497 15.845 1.00 0.00 S
ATOM 99 S63 MoS2 1 43.564 11.430 10.897 1.00 0.00 S
ATOM 100 S64 MoS2 1 46.739 5.264 9.933 1.00 0.00 S
ATOM 101 S65 MoS2 1 42.150 5.462 14.277 1.00 0.00 S
ATOM 102 S66 MoS2 1 41.992 9.395 9.329 1.00 0.00 S
ATOM 103 S67 MoS2 1 45.937 9.365 11.199 1.00 0.00 S
ATOM 104 S68 MoS2 1 46.017 7.398 13.673 1.00 0.00 S
ATOM 105 S69 MoS2 1 43.643 9.464 13.371 1.00 0.00 S
ATOM 106 S70 MoS2 1 44.365 7.329 9.631 1.00 0.00 S
ATOM 107 S71 MoS2 1 44.445 5.363 12.105 1.00 0.00 S
ATOM 108 S72 MoS2 1 42.071 7.428 11.803 1.00 0.00 S
END
* CHARMM FORCE FIELD GENERATED BY fftool
*
ATOMS
MASS 1 MoS 95.9370
MASS 2 SMo 32.0640
BONDS
MoS SMo 51.422084 2.410000
ANGLES
SMo MoS SMo 141.933556 83.800000
MoS SMo MoS 244.980880 83.800000
DIHEDRALS
NONBONDED
!VLJ = Eps,i,j[(Rmin,i,j/ri,j)**12 - 2(Rmin,i,j/ri,j)**6]
!epsilon: kcal/mole, Eps,i,j = sqrt(eps,i * eps,j)
!Rmin/2: A, Rmin,i,j = Rmin/2,i + Rmin/2,j
!atom ignored epsilon Rmin/2 ignored eps,1-4 Rmin/2,1-4
MoS 0.000000 -0.115918 2.486253 0.000000 -0.057959 2.486253
SMo 0.000000 -0.498327 1.874512 0.000000 -0.249163 1.874512
END
PSF
1 !NTITLE
REMARKS Created by fftool
108 !NATOM
1 S 1 MoS2 Mo MoS 0.500000 95.9370 0 0.0000 0.0000
2 S 1 MoS2 Mo MoS 0.500000 95.9370 0 0.0000 0.0000
3 S 1 MoS2 Mo MoS 0.500000 95.9370 0 0.0000 0.0000
4 S 1 MoS2 Mo MoS 0.500000 95.9370 0 0.0000 0.0000
5 S 1 MoS2 Mo MoS 0.500000 95.9370 0 0.0000 0.0000
6 S 1 MoS2 Mo MoS 0.500000 95.9370 0 0.0000 0.0000
7 S 1 MoS2 Mo MoS 0.500000 95.9370 0 0.0000 0.0000
8 S 1 MoS2 Mo MoS 0.500000 95.9370 0 0.0000 0.0000
9 S 1 MoS2 Mo MoS 0.500000 95.9370 0 0.0000 0.0000
10 S 1 MoS2 Mo MoS 0.500000 95.9370 0 0.0000 0.0000
11 S 1 MoS2 Mo MoS 0.500000 95.9370 0 0.0000 0.0000
12 S 1 MoS2 Mo MoS 0.500000 95.9370 0 0.0000 0.0000
13 S 1 MoS2 Mo MoS 0.500000 95.9370 0 0.0000 0.0000
14 S 1 MoS2 Mo MoS 0.500000 95.9370 0 0.0000 0.0000
15 S 1 MoS2 Mo MoS 0.500000 95.9370 0 0.0000 0.0000
16 S 1 MoS2 Mo MoS 0.500000 95.9370 0 0.0000 0.0000
17 S 1 MoS2 Mo MoS 0.500000 95.9370 0 0.0000 0.0000
18 S 1 MoS2 Mo MoS 0.500000 95.9370 0 0.0000 0.0000
19 S 1 MoS2 Mo MoS 0.500000 95.9370 0 0.0000 0.0000
20 S 1 MoS2 Mo MoS 0.500000 95.9370 0 0.0000 0.0000
21 S 1 MoS2 Mo MoS 0.500000 95.9370 0 0.0000 0.0000
22 S 1 MoS2 Mo MoS 0.500000 95.9370 0 0.0000 0.0000
23 S 1 MoS2 Mo MoS 0.500000 95.9370 0 0.0000 0.0000
24 S 1 MoS2 Mo MoS 0.500000 95.9370 0 0.0000 0.0000
25 S 1 MoS2 Mo MoS 0.500000 95.9370 0 0.0000 0.0000
26 S 1 MoS2 Mo MoS 0.500000 95.9370 0 0.0000 0.0000
27 S 1 MoS2 Mo MoS 0.500000 95.9370 0 0.0000 0.0000
28 S 1 MoS2 Mo MoS 0.500000 95.9370 0 0.0000 0.0000
29 S 1 MoS2 Mo MoS 0.500000 95.9370 0 0.0000 0.0000
30 S 1 MoS2 Mo MoS 0.500000 95.9370 0 0.0000 0.0000
31 S 1 MoS2 Mo MoS 0.500000 95.9370 0 0.0000 0.0000
32 S 1 MoS2 Mo MoS 0.500000 95.9370 0 0.0000 0.0000
33 S 1 MoS2 Mo MoS 0.500000 95.9370 0 0.0000 0.0000
34 S 1 MoS2 Mo MoS 0.500000 95.9370 0 0.0000 0.0000
35 S 1 MoS2 Mo MoS 0.500000 95.9370 0 0.0000 0.0000
36 S 1 MoS2 Mo MoS 0.500000 95.9370 0 0.0000 0.0000
37 S 1 MoS2 S SMo -0.250000 32.0640 0 0.0000 0.0000
38 S 1 MoS2 S SMo -0.250000 32.0640 0 0.0000 0.0000
39 S 1 MoS2 S SMo -0.250000 32.0640 0 0.0000 0.0000
40 S 1 MoS2 S SMo -0.250000 32.0640 0 0.0000 0.0000
41 S 1 MoS2 S SMo -0.250000 32.0640 0 0.0000 0.0000
42 S 1 MoS2 S SMo -0.250000 32.0640 0 0.0000 0.0000
43 S 1 MoS2 S SMo -0.250000 32.0640 0 0.0000 0.0000
44 S 1 MoS2 S SMo -0.250000 32.0640 0 0.0000 0.0000
45 S 1 MoS2 S SMo -0.250000 32.0640 0 0.0000 0.0000
46 S 1 MoS2 S SMo -0.250000 32.0640 0 0.0000 0.0000
47 S 1 MoS2 S SMo -0.250000 32.0640 0 0.0000 0.0000
48 S 1 MoS2 S SMo -0.250000 32.0640 0 0.0000 0.0000
49 S 1 MoS2 S SMo -0.250000 32.0640 0 0.0000 0.0000
50 S 1 MoS2 S SMo -0.250000 32.0640 0 0.0000 0.0000
51 S 1 MoS2 S SMo -0.250000 32.0640 0 0.0000 0.0000
52 S 1 MoS2 S SMo -0.250000 32.0640 0 0.0000 0.0000
53 S 1 MoS2 S SMo -0.250000 32.0640 0 0.0000 0.0000
54 S 1 MoS2 S SMo -0.250000 32.0640 0 0.0000 0.0000
55 S 1 MoS2 S SMo -0.250000 32.0640 0 0.0000 0.0000
56 S 1 MoS2 S SMo -0.250000 32.0640 0 0.0000 0.0000
57 S 1 MoS2 S SMo -0.250000 32.0640 0 0.0000 0.0000
58 S 1 MoS2 S SMo -0.250000 32.0640 0 0.0000 0.0000
59 S 1 MoS2 S SMo -0.250000 32.0640 0 0.0000 0.0000
60 S 1 MoS2 S SMo -0.250000 32.0640 0 0.0000 0.0000
61 S 1 MoS2 S SMo -0.250000 32.0640 0 0.0000 0.0000
62 S 1 MoS2 S SMo -0.250000 32.0640 0 0.0000 0.0000
63 S 1 MoS2 S SMo -0.250000 32.0640 0 0.0000 0.0000
64 S 1 MoS2 S SMo -0.250000 32.0640 0 0.0000 0.0000
65 S 1 MoS2 S SMo -0.250000 32.0640 0 0.0000 0.0000
66 S 1 MoS2 S SMo -0.250000 32.0640 0 0.0000 0.0000
67 S 1 MoS2 S SMo -0.250000 32.0640 0 0.0000 0.0000
68 S 1 MoS2 S SMo -0.250000 32.0640 0 0.0000 0.0000
69 S 1 MoS2 S SMo -0.250000 32.0640 0 0.0000 0.0000
70 S 1 MoS2 S SMo -0.250000 32.0640 0 0.0000 0.0000
71 S 1 MoS2 S SMo -0.250000 32.0640 0 0.0000 0.0000
72 S 1 MoS2 S SMo -0.250000 32.0640 0 0.0000 0.0000
73 S 1 MoS2 S SMo -0.250000 32.0640 0 0.0000 0.0000
74 S 1 MoS2 S SMo -0.250000 32.0640 0 0.0000 0.0000
75 S 1 MoS2 S SMo -0.250000 32.0640 0 0.0000 0.0000
76 S 1 MoS2 S SMo -0.250000 32.0640 0 0.0000 0.0000
77 S 1 MoS2 S SMo -0.250000 32.0640 0 0.0000 0.0000
78 S 1 MoS2 S SMo -0.250000 32.0640 0 0.0000 0.0000
79 S 1 MoS2 S SMo -0.250000 32.0640 0 0.0000 0.0000
80 S 1 MoS2 S SMo -0.250000 32.0640 0 0.0000 0.0000
81 S 1 MoS2 S SMo -0.250000 32.0640 0 0.0000 0.0000
82 S 1 MoS2 S SMo -0.250000 32.0640 0 0.0000 0.0000
83 S 1 MoS2 S SMo -0.250000 32.0640 0 0.0000 0.0000
84 S 1 MoS2 S SMo -0.250000 32.0640 0 0.0000 0.0000
85 S 1 MoS2 S SMo -0.250000 32.0640 0 0.0000 0.0000
86 S 1 MoS2 S SMo -0.250000 32.0640 0 0.0000 0.0000
87 S 1 MoS2 S SMo -0.250000 32.0640 0 0.0000 0.0000
88 S 1 MoS2 S SMo -0.250000 32.0640 0 0.0000 0.0000
89 S 1 MoS2 S SMo -0.250000 32.0640 0 0.0000 0.0000
90 S 1 MoS2 S SMo -0.250000 32.0640 0 0.0000 0.0000
91 S 1 MoS2 S SMo -0.250000 32.0640 0 0.0000 0.0000
92 S 1 MoS2 S SMo -0.250000 32.0640 0 0.0000 0.0000
93 S 1 MoS2 S SMo -0.250000 32.0640 0 0.0000 0.0000
94 S 1 MoS2 S SMo -0.250000 32.0640 0 0.0000 0.0000
95 S 1 MoS2 S SMo -0.250000 32.0640 0 0.0000 0.0000
96 S 1 MoS2 S SMo -0.250000 32.0640 0 0.0000 0.0000
97 S 1 MoS2 S SMo -0.250000 32.0640 0 0.0000 0.0000
98 S 1 MoS2 S SMo -0.250000 32.0640 0 0.0000 0.0000
99 S 1 MoS2 S SMo -0.250000 32.0640 0 0.0000 0.0000
100 S 1 MoS2 S SMo -0.250000 32.0640 0 0.0000 0.0000
101 S 1 MoS2 S SMo -0.250000 32.0640 0 0.0000 0.0000
102 S 1 MoS2 S SMo -0.250000 32.0640 0 0.0000 0.0000
103 S 1 MoS2 S SMo -0.250000 32.0640 0 0.0000 0.0000
104 S 1 MoS2 S SMo -0.250000 32.0640 0 0.0000 0.0000
105 S 1 MoS2 S SMo -0.250000 32.0640 0 0.0000 0.0000
106 S 1 MoS2 S SMo -0.250000 32.0640 0 0.0000 0.0000
107 S 1 MoS2 S SMo -0.250000 32.0640 0 0.0000 0.0000
108 S 1 MoS2 S SMo -0.250000 32.0640 0 0.0000 0.0000
192 !NBOND: bonds
38 1 41 1 69 1 72 1
37 2 40 2 67 2 70 2
68 3 71 3 69 4 72 4
91 4 94 4 50 5 53 5
67 5 70 5 93 5 96 5
68 6 71 6 92 6 95 6
67 7 70 7 85 7 88 7
44 8 47 8 69 8 72 8
87 8 90 8 68 9 71 9
86 9 89 9 91 10 94 10
98 10 101 10 62 11 65 11
93 11 96 11 99 11 102 11
92 12 95 12 97 12 100 12
85 13 88 13 97 13 100 13
56 14 59 14 87 14 90 14
99 14 102 14 86 15 89 15
98 15 101 15 38 16 41 16
44 16 47 16 49 16 52 16
39 17 42 17 45 17 48 17
51 17 54 17 37 18 40 18
43 18 46 18 50 18 53 18
87 19 90 19 91 19 94 19
105 19 108 19 85 20 88 20
93 20 96 20 103 20 106 20
86 21 89 21 92 21 95 21
104 21 107 21 98 22 101 22
104 22 105 22 107 22 108 22
99 23 102 23 103 23 105 23
106 23 108 23 97 24 100 24
103 24 104 24 106 24 107 24
49 25 52 25 61 25 64 25
74 25 77 25 51 26 54 26
63 26 66 26 75 26 78 26
50 27 53 27 62 27 65 27
73 27 76 27 43 28 46 28
55 28 58 28 73 28 76 28
45 29 48 29 57 29 60 29
75 29 78 29 44 30 47 30
56 30 59 30 74 30 77 30
57 31 60 31 61 31 64 31
81 31 84 31 55 32 58 32
63 32 66 32 79 32 82 32
56 33 59 33 62 33 65 33
80 33 83 33 74 34 77 34
80 34 81 34 83 34 84 34
75 35 78 35 79 35 81 35
82 35 84 35 73 36 76 36
79 36 80 36 82 36 83 36
436 !NTHETA: angles
38 1 41 38 1 69 41 1 72
69 1 72 37 2 40 37 2 67
40 2 70 67 2 70 68 3 71
69 4 72 69 4 91 72 4 94
91 4 94 50 5 53 50 5 67
50 5 93 53 5 70 53 5 96
67 5 70 67 5 93 70 5 96
93 5 96 68 6 71 68 6 92
71 6 95 92 6 95 67 7 70
67 7 85 70 7 88 85 7 88
44 8 47 44 8 69 44 8 87
47 8 72 47 8 90 69 8 72
69 8 87 72 8 90 87 8 90
68 9 71 68 9 86 71 9 89
86 9 89 91 10 94 91 10 98
94 10 101 98 10 101 62 11 65
62 11 93 62 11 99 65 11 96
65 11 102 93 11 96 93 11 99
96 11 102 99 11 102 92 12 95
92 12 97 95 12 100 97 12 100
85 13 88 85 13 97 88 13 100
97 13 100 56 14 59 56 14 87
56 14 99 59 14 90 59 14 102
87 14 90 87 14 99 90 14 102
99 14 102 86 15 89 86 15 98
89 15 101 98 15 101 38 16 41
38 16 44 38 16 49 41 16 47
41 16 52 44 16 47 44 16 49
47 16 52 49 16 52 39 17 42
39 17 45 39 17 51 42 17 48
42 17 54 45 17 48 45 17 51
48 17 54 51 17 54 37 18 40
37 18 43 37 18 50 40 18 46
40 18 53 43 18 46 43 18 50
46 18 53 50 18 53 87 19 90
87 19 91 87 19 105 90 19 94
90 19 108 91 19 94 91 19 105
94 19 108 105 19 108 85 20 88
85 20 93 85 20 103 88 20 96
88 20 106 93 20 96 93 20 103
96 20 106 103 20 106 86 21 89
86 21 92 86 21 104 89 21 95
89 21 107 92 21 95 92 21 104
95 21 107 104 21 107 98 22 101
98 22 104 98 22 105 101 22 107
101 22 108 104 22 105 104 22 107
105 22 108 107 22 108 99 23 102
99 23 103 99 23 105 102 23 106
102 23 108 103 23 105 103 23 106
105 23 108 106 23 108 97 24 100
97 24 103 97 24 104 100 24 106
100 24 107 103 24 104 103 24 106
104 24 107 106 24 107 49 25 52
49 25 61 49 25 74 52 25 64
52 25 77 61 25 64 61 25 74
64 25 77 74 25 77 51 26 54
51 26 63 51 26 75 54 26 66
54 26 78 63 26 66 63 26 75
66 26 78 75 26 78 50 27 53
50 27 62 50 27 73 53 27 65
53 27 76 62 27 65 62 27 73
65 27 76 73 27 76 43 28 46
43 28 55 43 28 73 46 28 58
46 28 76 55 28 58 55 28 73
58 28 76 73 28 76 45 29 48
45 29 57 45 29 75 48 29 60
48 29 78 57 29 60 57 29 75
60 29 78 75 29 78 44 30 47
44 30 56 44 30 74 47 30 59
47 30 77 56 30 59 56 30 74
59 30 77 74 30 77 57 31 60
57 31 61 57 31 81 60 31 64
60 31 84 61 31 64 61 31 81
64 31 84 81 31 84 55 32 58
55 32 63 55 32 79 58 32 66
58 32 82 63 32 66 63 32 79
66 32 82 79 32 82 56 33 59
56 33 62 56 33 80 59 33 65
59 33 83 62 33 65 62 33 80
65 33 83 80 33 83 74 34 77
74 34 80 74 34 81 77 34 83
77 34 84 80 34 81 80 34 83
81 34 84 83 34 84 75 35 78
75 35 79 75 35 81 78 35 82
78 35 84 79 35 81 79 35 82
81 35 84 82 35 84 73 36 76
73 36 79 73 36 80 76 36 82
76 36 83 79 36 80 79 36 82
80 36 83 82 36 83 2 37 18
1 38 16 2 40 18 1 41 16
18 43 28 8 44 16 8 44 30
16 44 30 17 45 29 18 46 28
8 47 16 8 47 30 16 47 30
17 48 29 16 49 25 5 50 18
5 50 27 18 50 27 17 51 26
16 52 25 5 53 18 5 53 27
18 53 27 17 54 26 28 55 32
14 56 30 14 56 33 30 56 33
29 57 31 28 58 32 14 59 30
14 59 33 30 59 33 29 60 31
25 61 31 11 62 27 11 62 33
27 62 33 26 63 32 25 64 31
11 65 27 11 65 33 27 65 33
26 66 32 2 67 5 2 67 7
5 67 7 3 68 6 3 68 9
6 68 9 1 69 4 1 69 8
4 69 8 2 70 5 2 70 7
5 70 7 3 71 6 3 71 9
6 71 9 1 72 4 1 72 8
4 72 8 27 73 28 27 73 36
28 73 36 25 74 30 25 74 34
30 74 34 26 75 29 26 75 35
29 75 35 27 76 28 27 76 36
28 76 36 25 77 30 25 77 34
30 77 34 26 78 29 26 78 35
29 78 35 32 79 35 32 79 36
35 79 36 33 80 34 33 80 36
34 80 36 31 81 34 31 81 35
34 81 35 32 82 35 32 82 36
35 82 36 33 83 34 33 83 36
34 83 36 31 84 34 31 84 35
34 84 35 7 85 13 7 85 20
13 85 20 9 86 15 9 86 21
15 86 21 8 87 14 8 87 19
14 87 19 7 88 13 7 88 20
13 88 20 9 89 15 9 89 21
15 89 21 8 90 14 8 90 19
14 90 19 4 91 10 4 91 19
10 91 19 6 92 12 6 92 21
12 92 21 5 93 11 5 93 20
11 93 20 4 94 10 4 94 19
10 94 19 6 95 12 6 95 21
12 95 21 5 96 11 5 96 20
11 96 20 12 97 13 12 97 24
13 97 24 10 98 15 10 98 22
15 98 22 11 99 14 11 99 23
14 99 23 12 100 13 12 100 24
13 100 24 10 101 15 10 101 22
15 101 22 11 102 14 11 102 23
14 102 23 20 103 23 20 103 24
23 103 24 21 104 22 21 104 24
22 104 24 19 105 22 19 105 23
22 105 23 20 106 23 20 106 24
23 106 24 21 107 22 21 107 24
22 107 24 19 108 22 19 108 23
22 108 23
0 !NPHI: dihedrals
0 !NIMPHI: impropers
0 !NDON: donors
0 !NACC: acceptors
0 !NNB
REMARK 1 CREATED WITH OPENMM 7.4, 2020-01-04
HETATM 1 A 1 0.095 0.011 0.000 1.00 0.00 C
HETATM 2 A 1 0.513 -1.098 -0.004 1.00 0.00 O
HETATM 3 A 1 -1.098 0.149 0.015 1.00 0.00 H
HETATM 4 A 1 0.590 0.938 -0.011 1.00 0.00 H
TER 5 A 1
CONECT 1 2 3 4
CONECT 2 1
CONECT 3 1
CONECT 4 1
END
# extract from 4X8U involving insertion codes
#
data_4X8U
#
_entry.id 4X8U
#
loop_
_atom_site.group_PDB
_atom_site.id
_atom_site.type_symbol
_atom_site.label_atom_id
_atom_site.label_alt_id
_atom_site.label_comp_id
_atom_site.label_asym_id
_atom_site.label_entity_id
_atom_site.label_seq_id
_atom_site.pdbx_PDB_ins_code
_atom_site.Cartn_x
_atom_site.Cartn_y
_atom_site.Cartn_z
_atom_site.occupancy
_atom_site.B_iso_or_equiv
_atom_site.pdbx_formal_charge
_atom_site.auth_seq_id
_atom_site.auth_comp_id
_atom_site.auth_asym_id
_atom_site.auth_atom_id
_atom_site.pdbx_PDB_model_num
ATOM 315 N N . PHE A 1 43 ? 6.537 37.168 14.751 1.00 16.93 ? 59 PHE H N 1
ATOM 316 C CA . PHE A 1 43 ? 6.141 37.813 13.496 1.00 16.64 ? 59 PHE H CA 1
ATOM 317 C C . PHE A 1 43 ? 4.851 38.633 13.566 1.00 21.61 ? 59 PHE H C 1
ATOM 318 O O . PHE A 1 43 ? 4.428 39.140 12.532 1.00 22.06 ? 59 PHE H O 1
ATOM 319 C CB . PHE A 1 43 ? 6.074 36.749 12.371 1.00 17.35 ? 59 PHE H CB 1
ATOM 320 C CG . PHE A 1 43 ? 7.366 35.948 12.334 1.00 17.99 ? 59 PHE H CG 1
ATOM 321 C CD1 . PHE A 1 43 ? 8.485 36.434 11.667 1.00 21.29 ? 59 PHE H CD1 1
ATOM 322 C CD2 . PHE A 1 43 ? 7.494 34.770 13.064 1.00 18.58 ? 59 PHE H CD2 1
ATOM 323 C CE1 . PHE A 1 43 ? 9.699 35.741 11.709 1.00 22.04 ? 59 PHE H CE1 1
ATOM 324 C CE2 . PHE A 1 43 ? 8.706 34.079 13.107 1.00 20.43 ? 59 PHE H CE2 1
ATOM 325 C CZ . PHE A 1 43 ? 9.803 34.575 12.437 1.00 18.31 ? 59 PHE H CZ 1
ATOM 326 N N . ASP A 1 44 ? 4.265 38.799 14.760 1.00 19.41 ? 60 ASP H N 1
ATOM 327 C CA . ASP A 1 44 ? 3.019 39.561 14.964 1.00 21.98 ? 60 ASP H CA 1
ATOM 328 C C . ASP A 1 44 ? 3.076 41.011 14.488 1.00 31.37 ? 60 ASP H C 1
ATOM 329 O O . ASP A 1 44 ? 2.061 41.541 14.068 1.00 32.54 ? 60 ASP H O 1
ATOM 330 C CB . ASP A 1 44 ? 2.633 39.555 16.453 1.00 23.09 ? 60 ASP H CB 1
ATOM 331 C CG . ASP A 1 44 ? 1.999 38.275 16.944 1.00 28.33 ? 60 ASP H CG 1
ATOM 332 O OD1 . ASP A 1 44 ? 1.911 37.306 16.147 1.00 29.31 ? 60 ASP H OD1 1
ATOM 333 O OD2 . ASP A 1 44 ? 1.619 38.224 18.133 1.00 29.53 ? 60 ASP H OD2 1
ATOM 334 N N . LYS A 1 45 A 4.240 41.656 14.575 1.00 30.66 ? 60 LYS H N 1
ATOM 335 C CA . LYS A 1 45 A 4.388 43.071 14.222 1.00 31.68 ? 60 LYS H CA 1
ATOM 336 C C . LYS A 1 45 A 5.294 43.324 13.023 1.00 38.11 ? 60 LYS H C 1
ATOM 337 O O . LYS A 1 45 A 5.726 44.457 12.828 1.00 39.40 ? 60 LYS H O 1
ATOM 338 C CB . LYS A 1 45 A 4.853 43.870 15.449 1.00 33.51 ? 60 LYS H CB 1
ATOM 339 C CG . LYS A 1 45 A 3.731 44.096 16.449 1.00 48.38 ? 60 LYS H CG 1
ATOM 340 C CD . LYS A 1 45 A 4.257 44.404 17.833 1.00 64.54 ? 60 LYS H CD 1
ATOM 341 C CE . LYS A 1 45 A 3.124 44.673 18.792 1.00 76.49 ? 60 LYS H CE 1
ATOM 342 N N . ILE A 1 46 B 5.552 42.303 12.196 1.00 34.95 ? 60 ILE H N 1
ATOM 343 C CA . ILE A 1 46 B 6.382 42.504 11.005 1.00 35.67 ? 60 ILE H CA 1
ATOM 344 C C . ILE A 1 46 B 5.550 43.159 9.885 1.00 40.88 ? 60 ILE H C 1
ATOM 345 O O . ILE A 1 46 B 4.442 42.696 9.581 1.00 39.95 ? 60 ILE H O 1
ATOM 346 C CB . ILE A 1 46 B 7.097 41.190 10.495 1.00 38.06 ? 60 ILE H CB 1
ATOM 347 C CG1 . ILE A 1 46 B 7.974 40.487 11.586 1.00 37.99 ? 60 ILE H CG1 1
ATOM 348 C CG2 . ILE A 1 46 B 7.916 41.436 9.212 1.00 37.97 ? 60 ILE H CG2 1
ATOM 349 C CD1 . ILE A 1 46 B 9.078 41.330 12.278 1.00 43.63 ? 60 ILE H CD1 1
ATOM 350 N N . LYS A 1 47 C 6.112 44.208 9.256 1.00 38.12 ? 60 LYS H N 1
ATOM 351 C CA . LYS A 1 47 C 5.533 44.859 8.069 1.00 39.21 ? 60 LYS H CA 1
ATOM 352 C C . LYS A 1 47 C 6.548 44.763 6.937 1.00 45.85 ? 60 LYS H C 1
ATOM 353 O O . LYS A 1 47 C 6.177 44.543 5.787 1.00 46.49 ? 60 LYS H O 1
ATOM 354 C CB . LYS A 1 47 C 5.139 46.313 8.343 1.00 41.67 ? 60 LYS H CB 1
ATOM 355 C CG . LYS A 1 47 C 3.789 46.433 9.040 1.00 58.21 ? 60 LYS H CG 1
ATOM 356 N N . ASN A 1 48 D 7.844 44.865 7.289 1.00 43.92 ? 60 ASN H N 1
ATOM 357 C CA . ASN A 1 48 D 8.992 44.777 6.384 1.00 43.65 ? 60 ASN H CA 1
ATOM 358 C C . ASN A 1 48 D 9.414 43.301 6.208 1.00 44.11 ? 60 ASN H C 1
ATOM 359 O O . ASN A 1 48 D 10.515 42.927 6.608 1.00 42.37 ? 60 ASN H O 1
ATOM 360 C CB . ASN A 1 48 D 10.151 45.643 6.923 1.00 45.00 ? 60 ASN H CB 1
ATOM 361 N N . TRP A 1 49 ? 8.528 42.473 5.599 1.00 39.73 ? 61 TRP H N 1
ATOM 362 C CA . TRP A 1 49 ? 8.763 41.044 5.361 1.00 39.08 ? 61 TRP H CA 1
ATOM 363 C C . TRP A 1 49 ? 10.028 40.746 4.537 1.00 42.50 ? 61 TRP H C 1
ATOM 364 O O . TRP A 1 49 ? 10.652 39.719 4.780 1.00 44.39 ? 61 TRP H O 1
ATOM 365 C CB . TRP A 1 49 ? 7.534 40.355 4.762 1.00 37.55 ? 61 TRP H CB 1
ATOM 366 C CG . TRP A 1 49 ? 6.391 40.245 5.727 1.00 38.53 ? 61 TRP H CG 1
ATOM 367 C CD1 . TRP A 1 49 ? 5.337 41.106 5.851 1.00 41.76 ? 61 TRP H CD1 1
ATOM 368 C CD2 . TRP A 1 49 ? 6.204 39.232 6.731 1.00 37.95 ? 61 TRP H CD2 1
ATOM 369 N NE1 . TRP A 1 49 ? 4.486 40.675 6.847 1.00 41.50 ? 61 TRP H NE1 1
ATOM 370 C CE2 . TRP A 1 49 ? 5.002 39.534 7.413 1.00 42.54 ? 61 TRP H CE2 1
ATOM 371 C CE3 . TRP A 1 49 ? 6.950 38.109 7.140 1.00 38.20 ? 61 TRP H CE3 1
ATOM 372 C CZ2 . TRP A 1 49 ? 4.534 38.758 8.486 1.00 41.36 ? 61 TRP H CZ2 1
ATOM 373 C CZ3 . TRP A 1 49 ? 6.468 37.325 8.175 1.00 38.85 ? 61 TRP H CZ3 1
ATOM 374 C CH2 . TRP A 1 49 ? 5.277 37.648 8.837 1.00 39.68 ? 61 TRP H CH2 1
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