Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
tsoc
openmm
Commits
7abba925
Commit
7abba925
authored
Jul 03, 2025
by
Evan Pretti
Browse files
Add check for consistent force field/solvent model version
parent
166c5963
Changes
19
Show whitespace changes
Inline
Side-by-side
Showing
19 changed files
with
167 additions
and
3 deletions
+167
-3
wrappers/python/openmm/app/data/charmm36.xml
wrappers/python/openmm/app/data/charmm36.xml
+8
-0
wrappers/python/openmm/app/data/charmm36/spce.xml
wrappers/python/openmm/app/data/charmm36/spce.xml
+8
-0
wrappers/python/openmm/app/data/charmm36/tip3p-pme-b.xml
wrappers/python/openmm/app/data/charmm36/tip3p-pme-b.xml
+8
-0
wrappers/python/openmm/app/data/charmm36/tip3p-pme-f.xml
wrappers/python/openmm/app/data/charmm36/tip3p-pme-f.xml
+8
-0
wrappers/python/openmm/app/data/charmm36/tip4p2005.xml
wrappers/python/openmm/app/data/charmm36/tip4p2005.xml
+8
-0
wrappers/python/openmm/app/data/charmm36/tip4pew.xml
wrappers/python/openmm/app/data/charmm36/tip4pew.xml
+8
-0
wrappers/python/openmm/app/data/charmm36/tip5p.xml
wrappers/python/openmm/app/data/charmm36/tip5p.xml
+8
-0
wrappers/python/openmm/app/data/charmm36/tip5pew.xml
wrappers/python/openmm/app/data/charmm36/tip5pew.xml
+8
-0
wrappers/python/openmm/app/data/charmm36/water.xml
wrappers/python/openmm/app/data/charmm36/water.xml
+8
-0
wrappers/python/openmm/app/data/charmm36_2024.xml
wrappers/python/openmm/app/data/charmm36_2024.xml
+8
-0
wrappers/python/openmm/app/data/charmm36_2024/spce.xml
wrappers/python/openmm/app/data/charmm36_2024/spce.xml
+8
-0
wrappers/python/openmm/app/data/charmm36_2024/tip3p-pme-b.xml
...pers/python/openmm/app/data/charmm36_2024/tip3p-pme-b.xml
+8
-0
wrappers/python/openmm/app/data/charmm36_2024/tip3p-pme-f.xml
...pers/python/openmm/app/data/charmm36_2024/tip3p-pme-f.xml
+8
-0
wrappers/python/openmm/app/data/charmm36_2024/tip4p2005.xml
wrappers/python/openmm/app/data/charmm36_2024/tip4p2005.xml
+8
-0
wrappers/python/openmm/app/data/charmm36_2024/tip4pew.xml
wrappers/python/openmm/app/data/charmm36_2024/tip4pew.xml
+8
-0
wrappers/python/openmm/app/data/charmm36_2024/tip5p.xml
wrappers/python/openmm/app/data/charmm36_2024/tip5p.xml
+8
-0
wrappers/python/openmm/app/data/charmm36_2024/tip5pew.xml
wrappers/python/openmm/app/data/charmm36_2024/tip5pew.xml
+8
-0
wrappers/python/openmm/app/data/charmm36_2024/water.xml
wrappers/python/openmm/app/data/charmm36_2024/water.xml
+8
-0
wrappers/python/tests/TestForceField.py
wrappers/python/tests/TestForceField.py
+23
-3
No files found.
wrappers/python/openmm/app/data/charmm36.xml
View file @
7abba925
...
...
@@ -103763,4 +103763,12 @@
<NBFixPair epsilon="0.8631592000000001" sigma="0.25134925534893393" type1="MG" type2="SO"/>
<NBFixPair epsilon="0.8414024" sigma="0.25219560913116723" type1="MG" type2="SS1"/>
</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>
wrappers/python/openmm/app/data/charmm36/spce.xml
View file @
7abba925
...
...
@@ -121,4 +121,12 @@
<NBFixPair
epsilon=
"0.31388368000000005"
sigma=
"0.28419669108676826"
type1=
"OC2D2"
type2=
"SOD"
/>
<NBFixPair
epsilon=
"0.31388368000000005"
sigma=
"0.28419669108676826"
type1=
"OG2D2"
type2=
"SOD"
/>
</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>
wrappers/python/openmm/app/data/charmm36/tip3p-pme-b.xml
View file @
7abba925
...
...
@@ -121,4 +121,12 @@
<NBFixPair
epsilon=
"0.31388368000000005"
sigma=
"0.28419669108676826"
type1=
"OC2D2"
type2=
"SOD"
/>
<NBFixPair
epsilon=
"0.31388368000000005"
sigma=
"0.28419669108676826"
type1=
"OG2D2"
type2=
"SOD"
/>
</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>
wrappers/python/openmm/app/data/charmm36/tip3p-pme-f.xml
View file @
7abba925
...
...
@@ -121,4 +121,12 @@
<NBFixPair
epsilon=
"0.31388368000000005"
sigma=
"0.28419669108676826"
type1=
"OC2D2"
type2=
"SOD"
/>
<NBFixPair
epsilon=
"0.31388368000000005"
sigma=
"0.28419669108676826"
type1=
"OG2D2"
type2=
"SOD"
/>
</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>
wrappers/python/openmm/app/data/charmm36/tip4p2005.xml
View file @
7abba925
...
...
@@ -127,4 +127,12 @@
<NBFixPair
epsilon=
"0.31388368000000005"
sigma=
"0.28419669108676826"
type1=
"OC2D2"
type2=
"SOD"
/>
<NBFixPair
epsilon=
"0.31388368000000005"
sigma=
"0.28419669108676826"
type1=
"OG2D2"
type2=
"SOD"
/>
</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>
wrappers/python/openmm/app/data/charmm36/tip4pew.xml
View file @
7abba925
...
...
@@ -127,4 +127,12 @@
<NBFixPair
epsilon=
"0.31388368000000005"
sigma=
"0.28419669108676826"
type1=
"OC2D2"
type2=
"SOD"
/>
<NBFixPair
epsilon=
"0.31388368000000005"
sigma=
"0.28419669108676826"
type1=
"OG2D2"
type2=
"SOD"
/>
</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>
wrappers/python/openmm/app/data/charmm36/tip5p.xml
View file @
7abba925
...
...
@@ -129,4 +129,12 @@
<NBFixPair
epsilon=
"0.31388368000000005"
sigma=
"0.28419669108676826"
type1=
"OC2D2"
type2=
"SOD"
/>
<NBFixPair
epsilon=
"0.31388368000000005"
sigma=
"0.28419669108676826"
type1=
"OG2D2"
type2=
"SOD"
/>
</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>
wrappers/python/openmm/app/data/charmm36/tip5pew.xml
View file @
7abba925
...
...
@@ -129,4 +129,12 @@
<NBFixPair
epsilon=
"0.31388368000000005"
sigma=
"0.28419669108676826"
type1=
"OC2D2"
type2=
"SOD"
/>
<NBFixPair
epsilon=
"0.31388368000000005"
sigma=
"0.28419669108676826"
type1=
"OG2D2"
type2=
"SOD"
/>
</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>
wrappers/python/openmm/app/data/charmm36/water.xml
View file @
7abba925
...
...
@@ -127,4 +127,12 @@
<NBFixPair
epsilon=
"0.31388368000000005"
sigma=
"0.2877602859593296"
type1=
"OG2D2"
type2=
"SOD"
/>
<NBFixPair
epsilon=
"0.31388368000000005"
sigma=
"0.28152399493234725"
type1=
"OG2P1"
type2=
"SOD"
/>
</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>
wrappers/python/openmm/app/data/charmm36_2024.xml
View file @
7abba925
...
...
@@ -259418,4 +259418,12 @@ if harmonic_impropers:
harmonic_force.addTorsion(*improper)
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>
\ No newline at end of file
wrappers/python/openmm/app/data/charmm36_2024/spce.xml
View file @
7abba925
...
...
@@ -449,4 +449,12 @@
<NBFixPair
class1=
"OC2D2"
class2=
"SOD"
epsilon=
"0.31388368000000005"
sigma=
"0.28419669108676826"
/>
<NBFixPair
class1=
"OG2D2"
class2=
"SOD"
epsilon=
"0.31388368000000005"
sigma=
"0.28419669108676826"
/>
</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>
\ No newline at end of file
wrappers/python/openmm/app/data/charmm36_2024/tip3p-pme-b.xml
View file @
7abba925
...
...
@@ -449,4 +449,12 @@
<NBFixPair
class1=
"OC2D2"
class2=
"SOD"
epsilon=
"0.31388368000000005"
sigma=
"0.28419669108676826"
/>
<NBFixPair
class1=
"OG2D2"
class2=
"SOD"
epsilon=
"0.31388368000000005"
sigma=
"0.28419669108676826"
/>
</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>
\ No newline at end of file
wrappers/python/openmm/app/data/charmm36_2024/tip3p-pme-f.xml
View file @
7abba925
...
...
@@ -449,4 +449,12 @@
<NBFixPair
class1=
"OC2D2"
class2=
"SOD"
epsilon=
"0.31388368000000005"
sigma=
"0.28419669108676826"
/>
<NBFixPair
class1=
"OG2D2"
class2=
"SOD"
epsilon=
"0.31388368000000005"
sigma=
"0.28419669108676826"
/>
</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>
\ No newline at end of file
wrappers/python/openmm/app/data/charmm36_2024/tip4p2005.xml
View file @
7abba925
...
...
@@ -455,4 +455,12 @@
<NBFixPair
class1=
"OC2D2"
class2=
"SOD"
epsilon=
"0.31388368000000005"
sigma=
"0.28419669108676826"
/>
<NBFixPair
class1=
"OG2D2"
class2=
"SOD"
epsilon=
"0.31388368000000005"
sigma=
"0.28419669108676826"
/>
</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>
\ No newline at end of file
wrappers/python/openmm/app/data/charmm36_2024/tip4pew.xml
View file @
7abba925
...
...
@@ -455,4 +455,12 @@
<NBFixPair
class1=
"OC2D2"
class2=
"SOD"
epsilon=
"0.31388368000000005"
sigma=
"0.28419669108676826"
/>
<NBFixPair
class1=
"OG2D2"
class2=
"SOD"
epsilon=
"0.31388368000000005"
sigma=
"0.28419669108676826"
/>
</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>
\ No newline at end of file
wrappers/python/openmm/app/data/charmm36_2024/tip5p.xml
View file @
7abba925
...
...
@@ -458,4 +458,12 @@
<NBFixPair
class1=
"OC2D2"
class2=
"SOD"
epsilon=
"0.31388368000000005"
sigma=
"0.28419669108676826"
/>
<NBFixPair
class1=
"OG2D2"
class2=
"SOD"
epsilon=
"0.31388368000000005"
sigma=
"0.28419669108676826"
/>
</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>
\ No newline at end of file
wrappers/python/openmm/app/data/charmm36_2024/tip5pew.xml
View file @
7abba925
...
...
@@ -458,4 +458,12 @@
<NBFixPair
class1=
"OC2D2"
class2=
"SOD"
epsilon=
"0.31388368000000005"
sigma=
"0.28419669108676826"
/>
<NBFixPair
class1=
"OG2D2"
class2=
"SOD"
epsilon=
"0.31388368000000005"
sigma=
"0.28419669108676826"
/>
</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>
\ No newline at end of file
wrappers/python/openmm/app/data/charmm36_2024/water.xml
View file @
7abba925
...
...
@@ -491,4 +491,12 @@
<NBFixPair
class1=
"CAL"
class2=
"OC2D2"
epsilon=
"0.50208"
sigma=
"0.28793846570295767"
/>
<NBFixPair
class1=
"CAL"
class2=
"OG2D2"
epsilon=
"0.50208"
sigma=
"0.28793846570295767"
/>
</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>
\ No newline at end of file
wrappers/python/tests/TestForceField.py
View file @
7abba925
...
...
@@ -1391,6 +1391,9 @@ END"""))
"""Tests that the CHARMM force fields are capable of parameterizing systems."""
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.
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"""))
pdb_peptide_4
=
PDBFile
(
"systems/test_charmm_peptide_4.pdb"
)
pdb_peptide_5
=
PDBFile
(
"systems/test_charmm_peptide_5.pdb"
)
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
)
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
)
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
)
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
):
"""Test the CHARMM polarizable force field."""
pdb
=
PDBFile
(
'systems/ala_ala_ala_drude.pdb'
)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment