Commit 7abba925 authored by Evan Pretti's avatar Evan Pretti
Browse files

Add check for consistent force field/solvent model version

parent 166c5963
...@@ -103763,4 +103763,12 @@ ...@@ -103763,4 +103763,12 @@
<NBFixPair epsilon="0.8631592000000001" sigma="0.25134925534893393" type1="MG" type2="SO"/> <NBFixPair epsilon="0.8631592000000001" sigma="0.25134925534893393" type1="MG" type2="SO"/>
<NBFixPair epsilon="0.8414024" sigma="0.25219560913116723" type1="MG" type2="SS1"/> <NBFixPair epsilon="0.8414024" sigma="0.25219560913116723" type1="MG" type2="SS1"/>
</LennardJonesForce> </LennardJonesForce>
<InitializationScript>
EXPECTED_VERSION = "charmm36"
if hasattr(self, "_charmm_ff_version"):
if self._charmm_ff_version != EXPECTED_VERSION:
raise RuntimeError(f"CHARMM force field versions ({self._charmm_ff_version} and {EXPECTED_VERSION}) incompatible")
else:
self._charmm_ff_version = EXPECTED_VERSION
</InitializationScript>
</ForceField> </ForceField>
...@@ -121,4 +121,12 @@ ...@@ -121,4 +121,12 @@
<NBFixPair epsilon="0.31388368000000005" sigma="0.28419669108676826" type1="OC2D2" type2="SOD"/> <NBFixPair epsilon="0.31388368000000005" sigma="0.28419669108676826" type1="OC2D2" type2="SOD"/>
<NBFixPair epsilon="0.31388368000000005" sigma="0.28419669108676826" type1="OG2D2" type2="SOD"/> <NBFixPair epsilon="0.31388368000000005" sigma="0.28419669108676826" type1="OG2D2" type2="SOD"/>
</LennardJonesForce> </LennardJonesForce>
<InitializationScript>
EXPECTED_VERSION = "charmm36"
if hasattr(self, "_charmm_ff_version"):
if self._charmm_ff_version != EXPECTED_VERSION:
raise RuntimeError(f"CHARMM force field versions ({self._charmm_ff_version} and {EXPECTED_VERSION}) incompatible")
else:
self._charmm_ff_version = EXPECTED_VERSION
</InitializationScript>
</ForceField> </ForceField>
...@@ -121,4 +121,12 @@ ...@@ -121,4 +121,12 @@
<NBFixPair epsilon="0.31388368000000005" sigma="0.28419669108676826" type1="OC2D2" type2="SOD"/> <NBFixPair epsilon="0.31388368000000005" sigma="0.28419669108676826" type1="OC2D2" type2="SOD"/>
<NBFixPair epsilon="0.31388368000000005" sigma="0.28419669108676826" type1="OG2D2" type2="SOD"/> <NBFixPair epsilon="0.31388368000000005" sigma="0.28419669108676826" type1="OG2D2" type2="SOD"/>
</LennardJonesForce> </LennardJonesForce>
<InitializationScript>
EXPECTED_VERSION = "charmm36"
if hasattr(self, "_charmm_ff_version"):
if self._charmm_ff_version != EXPECTED_VERSION:
raise RuntimeError(f"CHARMM force field versions ({self._charmm_ff_version} and {EXPECTED_VERSION}) incompatible")
else:
self._charmm_ff_version = EXPECTED_VERSION
</InitializationScript>
</ForceField> </ForceField>
...@@ -121,4 +121,12 @@ ...@@ -121,4 +121,12 @@
<NBFixPair epsilon="0.31388368000000005" sigma="0.28419669108676826" type1="OC2D2" type2="SOD"/> <NBFixPair epsilon="0.31388368000000005" sigma="0.28419669108676826" type1="OC2D2" type2="SOD"/>
<NBFixPair epsilon="0.31388368000000005" sigma="0.28419669108676826" type1="OG2D2" type2="SOD"/> <NBFixPair epsilon="0.31388368000000005" sigma="0.28419669108676826" type1="OG2D2" type2="SOD"/>
</LennardJonesForce> </LennardJonesForce>
<InitializationScript>
EXPECTED_VERSION = "charmm36"
if hasattr(self, "_charmm_ff_version"):
if self._charmm_ff_version != EXPECTED_VERSION:
raise RuntimeError(f"CHARMM force field versions ({self._charmm_ff_version} and {EXPECTED_VERSION}) incompatible")
else:
self._charmm_ff_version = EXPECTED_VERSION
</InitializationScript>
</ForceField> </ForceField>
...@@ -127,4 +127,12 @@ ...@@ -127,4 +127,12 @@
<NBFixPair epsilon="0.31388368000000005" sigma="0.28419669108676826" type1="OC2D2" type2="SOD"/> <NBFixPair epsilon="0.31388368000000005" sigma="0.28419669108676826" type1="OC2D2" type2="SOD"/>
<NBFixPair epsilon="0.31388368000000005" sigma="0.28419669108676826" type1="OG2D2" type2="SOD"/> <NBFixPair epsilon="0.31388368000000005" sigma="0.28419669108676826" type1="OG2D2" type2="SOD"/>
</LennardJonesForce> </LennardJonesForce>
<InitializationScript>
EXPECTED_VERSION = "charmm36"
if hasattr(self, "_charmm_ff_version"):
if self._charmm_ff_version != EXPECTED_VERSION:
raise RuntimeError(f"CHARMM force field versions ({self._charmm_ff_version} and {EXPECTED_VERSION}) incompatible")
else:
self._charmm_ff_version = EXPECTED_VERSION
</InitializationScript>
</ForceField> </ForceField>
...@@ -127,4 +127,12 @@ ...@@ -127,4 +127,12 @@
<NBFixPair epsilon="0.31388368000000005" sigma="0.28419669108676826" type1="OC2D2" type2="SOD"/> <NBFixPair epsilon="0.31388368000000005" sigma="0.28419669108676826" type1="OC2D2" type2="SOD"/>
<NBFixPair epsilon="0.31388368000000005" sigma="0.28419669108676826" type1="OG2D2" type2="SOD"/> <NBFixPair epsilon="0.31388368000000005" sigma="0.28419669108676826" type1="OG2D2" type2="SOD"/>
</LennardJonesForce> </LennardJonesForce>
<InitializationScript>
EXPECTED_VERSION = "charmm36"
if hasattr(self, "_charmm_ff_version"):
if self._charmm_ff_version != EXPECTED_VERSION:
raise RuntimeError(f"CHARMM force field versions ({self._charmm_ff_version} and {EXPECTED_VERSION}) incompatible")
else:
self._charmm_ff_version = EXPECTED_VERSION
</InitializationScript>
</ForceField> </ForceField>
...@@ -129,4 +129,12 @@ ...@@ -129,4 +129,12 @@
<NBFixPair epsilon="0.31388368000000005" sigma="0.28419669108676826" type1="OC2D2" type2="SOD"/> <NBFixPair epsilon="0.31388368000000005" sigma="0.28419669108676826" type1="OC2D2" type2="SOD"/>
<NBFixPair epsilon="0.31388368000000005" sigma="0.28419669108676826" type1="OG2D2" type2="SOD"/> <NBFixPair epsilon="0.31388368000000005" sigma="0.28419669108676826" type1="OG2D2" type2="SOD"/>
</LennardJonesForce> </LennardJonesForce>
<InitializationScript>
EXPECTED_VERSION = "charmm36"
if hasattr(self, "_charmm_ff_version"):
if self._charmm_ff_version != EXPECTED_VERSION:
raise RuntimeError(f"CHARMM force field versions ({self._charmm_ff_version} and {EXPECTED_VERSION}) incompatible")
else:
self._charmm_ff_version = EXPECTED_VERSION
</InitializationScript>
</ForceField> </ForceField>
...@@ -129,4 +129,12 @@ ...@@ -129,4 +129,12 @@
<NBFixPair epsilon="0.31388368000000005" sigma="0.28419669108676826" type1="OC2D2" type2="SOD"/> <NBFixPair epsilon="0.31388368000000005" sigma="0.28419669108676826" type1="OC2D2" type2="SOD"/>
<NBFixPair epsilon="0.31388368000000005" sigma="0.28419669108676826" type1="OG2D2" type2="SOD"/> <NBFixPair epsilon="0.31388368000000005" sigma="0.28419669108676826" type1="OG2D2" type2="SOD"/>
</LennardJonesForce> </LennardJonesForce>
<InitializationScript>
EXPECTED_VERSION = "charmm36"
if hasattr(self, "_charmm_ff_version"):
if self._charmm_ff_version != EXPECTED_VERSION:
raise RuntimeError(f"CHARMM force field versions ({self._charmm_ff_version} and {EXPECTED_VERSION}) incompatible")
else:
self._charmm_ff_version = EXPECTED_VERSION
</InitializationScript>
</ForceField> </ForceField>
...@@ -127,4 +127,12 @@ ...@@ -127,4 +127,12 @@
<NBFixPair epsilon="0.31388368000000005" sigma="0.2877602859593296" type1="OG2D2" type2="SOD"/> <NBFixPair epsilon="0.31388368000000005" sigma="0.2877602859593296" type1="OG2D2" type2="SOD"/>
<NBFixPair epsilon="0.31388368000000005" sigma="0.28152399493234725" type1="OG2P1" type2="SOD"/> <NBFixPair epsilon="0.31388368000000005" sigma="0.28152399493234725" type1="OG2P1" type2="SOD"/>
</LennardJonesForce> </LennardJonesForce>
<InitializationScript>
EXPECTED_VERSION = "charmm36"
if hasattr(self, "_charmm_ff_version"):
if self._charmm_ff_version != EXPECTED_VERSION:
raise RuntimeError(f"CHARMM force field versions ({self._charmm_ff_version} and {EXPECTED_VERSION}) incompatible")
else:
self._charmm_ff_version = EXPECTED_VERSION
</InitializationScript>
</ForceField> </ForceField>
...@@ -259418,4 +259418,12 @@ if harmonic_impropers: ...@@ -259418,4 +259418,12 @@ if harmonic_impropers:
harmonic_force.addTorsion(*improper) harmonic_force.addTorsion(*improper)
   
sys.addForce(harmonic_force)</Script> sys.addForce(harmonic_force)</Script>
<InitializationScript>
EXPECTED_VERSION = "charmm36_2024"
if hasattr(self, "_charmm_ff_version"):
if self._charmm_ff_version != EXPECTED_VERSION:
raise RuntimeError(f"CHARMM force field versions ({self._charmm_ff_version} and {EXPECTED_VERSION}) incompatible")
else:
self._charmm_ff_version = EXPECTED_VERSION
</InitializationScript>
</ForceField> </ForceField>
\ No newline at end of file
...@@ -449,4 +449,12 @@ ...@@ -449,4 +449,12 @@
<NBFixPair class1="OC2D2" class2="SOD" epsilon="0.31388368000000005" sigma="0.28419669108676826" /> <NBFixPair class1="OC2D2" class2="SOD" epsilon="0.31388368000000005" sigma="0.28419669108676826" />
<NBFixPair class1="OG2D2" class2="SOD" epsilon="0.31388368000000005" sigma="0.28419669108676826" /> <NBFixPair class1="OG2D2" class2="SOD" epsilon="0.31388368000000005" sigma="0.28419669108676826" />
</LennardJonesForce> </LennardJonesForce>
<InitializationScript>
EXPECTED_VERSION = "charmm36_2024"
if hasattr(self, "_charmm_ff_version"):
if self._charmm_ff_version != EXPECTED_VERSION:
raise RuntimeError(f"CHARMM force field versions ({self._charmm_ff_version} and {EXPECTED_VERSION}) incompatible")
else:
self._charmm_ff_version = EXPECTED_VERSION
</InitializationScript>
</ForceField> </ForceField>
\ No newline at end of file
...@@ -449,4 +449,12 @@ ...@@ -449,4 +449,12 @@
<NBFixPair class1="OC2D2" class2="SOD" epsilon="0.31388368000000005" sigma="0.28419669108676826" /> <NBFixPair class1="OC2D2" class2="SOD" epsilon="0.31388368000000005" sigma="0.28419669108676826" />
<NBFixPair class1="OG2D2" class2="SOD" epsilon="0.31388368000000005" sigma="0.28419669108676826" /> <NBFixPair class1="OG2D2" class2="SOD" epsilon="0.31388368000000005" sigma="0.28419669108676826" />
</LennardJonesForce> </LennardJonesForce>
<InitializationScript>
EXPECTED_VERSION = "charmm36_2024"
if hasattr(self, "_charmm_ff_version"):
if self._charmm_ff_version != EXPECTED_VERSION:
raise RuntimeError(f"CHARMM force field versions ({self._charmm_ff_version} and {EXPECTED_VERSION}) incompatible")
else:
self._charmm_ff_version = EXPECTED_VERSION
</InitializationScript>
</ForceField> </ForceField>
\ No newline at end of file
...@@ -449,4 +449,12 @@ ...@@ -449,4 +449,12 @@
<NBFixPair class1="OC2D2" class2="SOD" epsilon="0.31388368000000005" sigma="0.28419669108676826" /> <NBFixPair class1="OC2D2" class2="SOD" epsilon="0.31388368000000005" sigma="0.28419669108676826" />
<NBFixPair class1="OG2D2" class2="SOD" epsilon="0.31388368000000005" sigma="0.28419669108676826" /> <NBFixPair class1="OG2D2" class2="SOD" epsilon="0.31388368000000005" sigma="0.28419669108676826" />
</LennardJonesForce> </LennardJonesForce>
<InitializationScript>
EXPECTED_VERSION = "charmm36_2024"
if hasattr(self, "_charmm_ff_version"):
if self._charmm_ff_version != EXPECTED_VERSION:
raise RuntimeError(f"CHARMM force field versions ({self._charmm_ff_version} and {EXPECTED_VERSION}) incompatible")
else:
self._charmm_ff_version = EXPECTED_VERSION
</InitializationScript>
</ForceField> </ForceField>
\ No newline at end of file
...@@ -455,4 +455,12 @@ ...@@ -455,4 +455,12 @@
<NBFixPair class1="OC2D2" class2="SOD" epsilon="0.31388368000000005" sigma="0.28419669108676826" /> <NBFixPair class1="OC2D2" class2="SOD" epsilon="0.31388368000000005" sigma="0.28419669108676826" />
<NBFixPair class1="OG2D2" class2="SOD" epsilon="0.31388368000000005" sigma="0.28419669108676826" /> <NBFixPair class1="OG2D2" class2="SOD" epsilon="0.31388368000000005" sigma="0.28419669108676826" />
</LennardJonesForce> </LennardJonesForce>
<InitializationScript>
EXPECTED_VERSION = "charmm36_2024"
if hasattr(self, "_charmm_ff_version"):
if self._charmm_ff_version != EXPECTED_VERSION:
raise RuntimeError(f"CHARMM force field versions ({self._charmm_ff_version} and {EXPECTED_VERSION}) incompatible")
else:
self._charmm_ff_version = EXPECTED_VERSION
</InitializationScript>
</ForceField> </ForceField>
\ No newline at end of file
...@@ -455,4 +455,12 @@ ...@@ -455,4 +455,12 @@
<NBFixPair class1="OC2D2" class2="SOD" epsilon="0.31388368000000005" sigma="0.28419669108676826" /> <NBFixPair class1="OC2D2" class2="SOD" epsilon="0.31388368000000005" sigma="0.28419669108676826" />
<NBFixPair class1="OG2D2" class2="SOD" epsilon="0.31388368000000005" sigma="0.28419669108676826" /> <NBFixPair class1="OG2D2" class2="SOD" epsilon="0.31388368000000005" sigma="0.28419669108676826" />
</LennardJonesForce> </LennardJonesForce>
<InitializationScript>
EXPECTED_VERSION = "charmm36_2024"
if hasattr(self, "_charmm_ff_version"):
if self._charmm_ff_version != EXPECTED_VERSION:
raise RuntimeError(f"CHARMM force field versions ({self._charmm_ff_version} and {EXPECTED_VERSION}) incompatible")
else:
self._charmm_ff_version = EXPECTED_VERSION
</InitializationScript>
</ForceField> </ForceField>
\ No newline at end of file
...@@ -458,4 +458,12 @@ ...@@ -458,4 +458,12 @@
<NBFixPair class1="OC2D2" class2="SOD" epsilon="0.31388368000000005" sigma="0.28419669108676826" /> <NBFixPair class1="OC2D2" class2="SOD" epsilon="0.31388368000000005" sigma="0.28419669108676826" />
<NBFixPair class1="OG2D2" class2="SOD" epsilon="0.31388368000000005" sigma="0.28419669108676826" /> <NBFixPair class1="OG2D2" class2="SOD" epsilon="0.31388368000000005" sigma="0.28419669108676826" />
</LennardJonesForce> </LennardJonesForce>
<InitializationScript>
EXPECTED_VERSION = "charmm36_2024"
if hasattr(self, "_charmm_ff_version"):
if self._charmm_ff_version != EXPECTED_VERSION:
raise RuntimeError(f"CHARMM force field versions ({self._charmm_ff_version} and {EXPECTED_VERSION}) incompatible")
else:
self._charmm_ff_version = EXPECTED_VERSION
</InitializationScript>
</ForceField> </ForceField>
\ No newline at end of file
...@@ -458,4 +458,12 @@ ...@@ -458,4 +458,12 @@
<NBFixPair class1="OC2D2" class2="SOD" epsilon="0.31388368000000005" sigma="0.28419669108676826" /> <NBFixPair class1="OC2D2" class2="SOD" epsilon="0.31388368000000005" sigma="0.28419669108676826" />
<NBFixPair class1="OG2D2" class2="SOD" epsilon="0.31388368000000005" sigma="0.28419669108676826" /> <NBFixPair class1="OG2D2" class2="SOD" epsilon="0.31388368000000005" sigma="0.28419669108676826" />
</LennardJonesForce> </LennardJonesForce>
<InitializationScript>
EXPECTED_VERSION = "charmm36_2024"
if hasattr(self, "_charmm_ff_version"):
if self._charmm_ff_version != EXPECTED_VERSION:
raise RuntimeError(f"CHARMM force field versions ({self._charmm_ff_version} and {EXPECTED_VERSION}) incompatible")
else:
self._charmm_ff_version = EXPECTED_VERSION
</InitializationScript>
</ForceField> </ForceField>
\ No newline at end of file
...@@ -491,4 +491,12 @@ ...@@ -491,4 +491,12 @@
<NBFixPair class1="CAL" class2="OC2D2" epsilon="0.50208" sigma="0.28793846570295767" /> <NBFixPair class1="CAL" class2="OC2D2" epsilon="0.50208" sigma="0.28793846570295767" />
<NBFixPair class1="CAL" class2="OG2D2" epsilon="0.50208" sigma="0.28793846570295767" /> <NBFixPair class1="CAL" class2="OG2D2" epsilon="0.50208" sigma="0.28793846570295767" />
</LennardJonesForce> </LennardJonesForce>
<InitializationScript>
EXPECTED_VERSION = "charmm36_2024"
if hasattr(self, "_charmm_ff_version"):
if self._charmm_ff_version != EXPECTED_VERSION:
raise RuntimeError(f"CHARMM force field versions ({self._charmm_ff_version} and {EXPECTED_VERSION}) incompatible")
else:
self._charmm_ff_version = EXPECTED_VERSION
</InitializationScript>
</ForceField> </ForceField>
\ No newline at end of file
...@@ -1391,6 +1391,9 @@ END""")) ...@@ -1391,6 +1391,9 @@ END"""))
"""Tests that the CHARMM force fields are capable of parameterizing systems.""" """Tests that the CHARMM force fields are capable of parameterizing systems."""
charmm_models = ("charmm36", "charmm36_2024") charmm_models = ("charmm36", "charmm36_2024")
water_models_3 = ("water", "spce", "tip3p-pme-b", "tip3p-pme-f")
water_models_4 = ("tip4p2005", "tip4pew")
water_models_5 = ("tip5p", "tip5pew")
# Checks that the numbers of various types of terms in a system matches expected counts. # Checks that the numbers of various types of terms in a system matches expected counts.
def check_system(system, particle_count, site_count, constraint_count, bond_count, angle_count, cmap_count, exception_count, override_count, drude_count, screen_count): def check_system(system, particle_count, site_count, constraint_count, bond_count, angle_count, cmap_count, exception_count, override_count, drude_count, screen_count):
...@@ -1420,13 +1423,30 @@ END""")) ...@@ -1420,13 +1423,30 @@ END"""))
pdb_peptide_4 = PDBFile("systems/test_charmm_peptide_4.pdb") pdb_peptide_4 = PDBFile("systems/test_charmm_peptide_4.pdb")
pdb_peptide_5 = PDBFile("systems/test_charmm_peptide_5.pdb") pdb_peptide_5 = PDBFile("systems/test_charmm_peptide_5.pdb")
for charmm_model in charmm_models: for charmm_model in charmm_models:
for water_model in ("water", "spce", "tip3p-pme-b", "tip3p-pme-f"): for water_model in water_models_3:
check_system(ForceField(f"{charmm_model}.xml", f"{charmm_model}/{water_model}.xml").createSystem(pdb_peptide_3.topology), 1136, 0, 984, 234, 249, 8, 1727, 353, 0, 0) check_system(ForceField(f"{charmm_model}.xml", f"{charmm_model}/{water_model}.xml").createSystem(pdb_peptide_3.topology), 1136, 0, 984, 234, 249, 8, 1727, 353, 0, 0)
for water_model in ("tip4p2005", "tip4pew"): for water_model in water_models_4:
check_system(ForceField(f"{charmm_model}.xml", f"{charmm_model}/{water_model}.xml").createSystem(pdb_peptide_4.topology), 1464, 328, 984, 234, 249, 8, 2711, 353, 0, 0) check_system(ForceField(f"{charmm_model}.xml", f"{charmm_model}/{water_model}.xml").createSystem(pdb_peptide_4.topology), 1464, 328, 984, 234, 249, 8, 2711, 353, 0, 0)
for water_model in ("tip5p", "tip5pew"): for water_model in water_models_5:
check_system(ForceField(f"{charmm_model}.xml", f"{charmm_model}/{water_model}.xml").createSystem(pdb_peptide_5.topology), 1792, 656, 984, 234, 249, 8, 4023, 353, 0, 0) check_system(ForceField(f"{charmm_model}.xml", f"{charmm_model}/{water_model}.xml").createSystem(pdb_peptide_5.topology), 1792, 656, 984, 234, 249, 8, 4023, 353, 0, 0)
def test_CharmmVersionMismatchCheck(self):
"""
Tests that CHARMM force fields cannot be loaded with the wrong water model versions.
"""
charmm_models = ("charmm36", "charmm36_2024")
water_models = ("water", "spce", "tip3p-pme-b", "tip3p-pme-f", "tip4p2005", "tip4pew", "tip5p", "tip5pew")
for base_charmm_model in charmm_models:
for water_charmm_model in charmm_models:
if base_charmm_model != water_charmm_model:
for water_model in water_models:
with self.assertRaises(Exception):
ForceField(f"{base_charmm_model}.xml", f"{water_charmm_model}/{water_model}.xml")
with self.assertRaises(Exception):
ForceField(f"{water_charmm_model}/{water_model}.xml", f"{base_charmm_model}.xml")
def test_CharmmPolar(self): def test_CharmmPolar(self):
"""Test the CHARMM polarizable force field.""" """Test the CHARMM polarizable force field."""
pdb = PDBFile('systems/ala_ala_ala_drude.pdb') pdb = PDBFile('systems/ala_ala_ala_drude.pdb')
......
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