Skip to content

Commit 85c3d10

Browse files
authored
Merge pull request #163 from talagayev/Charm2024_implementation
Charm2024 implementation
2 parents b6b254d + dacdf86 commit 85c3d10

File tree

5 files changed

+62
-8
lines changed

5 files changed

+62
-8
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ The rules for this file:
2121
talagayev
2222

2323
### Added
24+
- Addition of `CHARM2024` forcefield (2025-11-03, PR #163)
2425

2526
### Fixed
2627
- Fixes import error in `visualization.ipynb` (2025-10-14, PR #159)

environment.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ dependencies:
1919
- pdbfixer
2020
- openff-toolkit
2121
- openmmforcefields
22-
- openmm>=8.3.0
22+
- openmm>=8.3.1
2323
- cuda-toolkit
2424
- cuda-python>=11.7.1
2525
- mdanalysis>=2.3.0

openmmdl/openmmdl_setup/templates/configurePdbFile.html

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
<option value="AMBER03">AMBER03</option>
3434
<option value="AMBER10">AMBER10</option>
3535
<option value="CHARMM36">CHARMM36</option>
36+
<option value="CHARMM2024">CHARMM36 2024</option>
3637
</select></div>
3738
</div>
3839
<div id="waterModelRow" class="form-group">
@@ -83,7 +84,7 @@
8384
["OPC", "OPC", false],
8485
]
8586

86-
var charmm36WaterModels = [
87+
var charmmWaterModels = [
8788
["CHARMM default", "CHARMM default", true],
8889
["TIP3P-PME-B", "TIP3P-PME-B", false],
8990
["TIP3P-PME-F", "TIP3P-PME-F", false],
@@ -124,7 +125,9 @@
124125
else if (forcefield == "AMBER19")
125126
models = newAmberWaterModels;
126127
else if (forcefield == "CHARMM36")
127-
models = charmm36WaterModels;
128+
models = charmmWaterModels;
129+
else if (forcefield == "CHARMM2024")
130+
models = charmmWaterModels;
128131
else if (forcefield == "AMOEBA2018")
129132
models = amoebaWaterModels;
130133
else

openmmdl/openmmdl_simulation/scripts/forcefield_water.py

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ def ff_selection(ff):
2121
"AMBER03": "amber03.xml",
2222
"AMBER10": "amber10.xml",
2323
"CHARMM36": "charmm36.xml",
24+
"CHARMM2024": "charmm36_2024.xml",
2425
}
2526

2627
return forcefield_dict.get(ff, None)
@@ -83,6 +84,16 @@ def water_forcefield_selection(water, forcefield_selection):
8384
"TIP5P": "charmm36/tip5p.xml",
8485
"TIP5P-Ew": "charmm36/tip5pew.xml",
8586
},
87+
"charmm36_2024.xml": {
88+
"CHARMM default": "charmm36_2024/water.xml",
89+
"TIP3P-PME-B": "charmm36_2024/tip3p-pme-b.xml",
90+
"TIP3P-PME-F": "charmm36_2024/tip3p-pme-f.xml",
91+
"SPC/E": "charmm36_2024/spce.xml",
92+
"TIP4P-Ew": "charmm36_2024/tip4pew.xml",
93+
"TIP4P-2005": "charmm36_2024/tip4p2005.xml",
94+
"TIP5P": "charmm36_2024/tip5p.xml",
95+
"TIP5P-Ew": "charmm36_2024/tip5pew.xml",
96+
},
8697
}
8798
water_model = water_forcefields.get(forcefield_selection, {}).get(water, None)
8899

@@ -122,14 +133,14 @@ def water_model_selection(water, forcefield_selection):
122133
if water == "TIP5P":
123134
return None # 'TIP5P' is not available in 'amber19-all.xml'
124135
water_model = water_model_mapping.get(water)
125-
elif forcefield_selection == "charmm36.xml":
136+
elif forcefield_selection == "charmm36.xml" or forcefield_selection == "charmm36_2024.xml":
126137
charmm_water_mapping = {
127138
"CHARMM default": "charmm",
128139
"TIP3P-PME-B": "charmm",
129140
"TIP3P-PME-F": "charmm",
130141
"SPC/E": "charmm",
131-
"TIP4P-Ew": "tip4pew",
132-
"TIP4P-2005": "tip4pew",
142+
"TIP4P-Ew": "charmm_tip4pew",
143+
"TIP4P-2005": "charmm_tip4pew",
133144
"TIP5P": "tip5p",
134145
"TIP5P-Ew": "tip5p",
135146
}

openmmdl/tests/openmmdl_simulation/forcefield_water_test.py

Lines changed: 41 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,34 @@ def test_water_forcefield_selection():
117117
assert water_forcefield_selection("NonexistentFF", "charmm36.xml") is None
118118

119119

120+
# Test cases for 'charmm36_2024.xml' force field
121+
assert (
122+
water_forcefield_selection("CHARMM default", "charmm36_2024.xml")
123+
== "charmm36_2024/water.xml"
124+
)
125+
assert (
126+
water_forcefield_selection("TIP3P-PME-B", "charmm36_2024.xml")
127+
== "charmm36_2024/tip3p-pme-b.xml"
128+
)
129+
assert (
130+
water_forcefield_selection("TIP3P-PME-F", "charmm36_2024.xml")
131+
== "charmm36_2024/tip3p-pme-f.xml"
132+
)
133+
assert water_forcefield_selection("SPC/E", "charmm36_2024.xml") == "charmm36_2024/spce.xml"
134+
assert (
135+
water_forcefield_selection("TIP4P-Ew", "charmm36_2024.xml") == "charmm36_2024/tip4pew.xml"
136+
)
137+
assert (
138+
water_forcefield_selection("TIP4P-2005", "charmm36_2024.xml")
139+
== "charmm36_2024/tip4p2005.xml"
140+
)
141+
assert water_forcefield_selection("TIP5P", "charmm36_2024.xml") == "charmm36_2024/tip5p.xml"
142+
assert (
143+
water_forcefield_selection("TIP5P-Ew", "charmm36_2024.xml") == "charmm36_2024/tip5pew.xml"
144+
)
145+
assert water_forcefield_selection("NonexistentWater", "charmm36_2024.xml") is None
146+
assert water_forcefield_selection("NonexistentFF", "charmm36_2024.xml") is None
147+
120148
def test_water_model_selection():
121149
assert water_model_selection("TIP3P", "amber99sb.xml") == "tip3p"
122150
assert water_model_selection("TIP3P", "amber99sbildn.xml") == "tip3p"
@@ -162,11 +190,22 @@ def test_water_model_selection():
162190
assert water_model_selection("TIP3P-PME-B", "charmm36.xml") == "charmm"
163191
assert water_model_selection("TIP3P-PME-F", "charmm36.xml") == "charmm"
164192
assert water_model_selection("SPC/E", "charmm36.xml") == "charmm"
165-
assert water_model_selection("TIP4P-Ew", "charmm36.xml") == "tip4pew"
166-
assert water_model_selection("TIP4P-2005", "charmm36.xml") == "tip4pew"
193+
assert water_model_selection("TIP4P-Ew", "charmm36.xml") == "charmm_tip4pew"
194+
assert water_model_selection("TIP4P-2005", "charmm36.xml") == "charmm_tip4pew"
167195
assert water_model_selection("TIP5P", "charmm36.xml") == "tip5p"
168196
assert water_model_selection("TIP5P-Ew", "charmm36.xml") == "tip5p"
169197

198+
#Test new CHARMM36 2024 models
199+
assert water_model_selection("CHARMM default", "charmm36_2024.xml") == "charmm"
200+
assert water_model_selection("TIP3P-PME-B", "charmm36_2024.xml") == "charmm"
201+
assert water_model_selection("TIP3P-PME-F", "charmm36_2024.xml") == "charmm"
202+
assert water_model_selection("SPC/E", "charmm36_2024.xml") == "charmm"
203+
assert water_model_selection("TIP4P-Ew", "charmm36_2024.xml") == "charmm_tip4pew"
204+
assert water_model_selection("TIP4P-2005", "charmm36_2024.xml") == "charmm_tip4pew"
205+
assert water_model_selection("TIP5P", "charmm36_2024.xml") == "tip5p"
206+
assert water_model_selection("TIP5P-Ew", "charmm36_2024.xml") == "tip5p"
207+
208+
170209
assert water_model_selection("TIP3P", "NonexistentFF") is None
171210

172211

0 commit comments

Comments
 (0)