Skip to content

Commit a21f0c5

Browse files
Merge pull request #53 from wiederm/support_charmm_openmm
supporting charmm_openmm
2 parents 4ddac8c + 255a10e commit a21f0c5

10 files changed

+282
-170
lines changed

transformato/analysis.py

+7-10
Original file line numberDiff line numberDiff line change
@@ -263,11 +263,7 @@ def _parse_CHARMM_energy_output(path: str, env: str) -> list:
263263
import math
264264

265265
pot_energies = []
266-
file_name = ""
267-
if env == "waterbox":
268-
file_name = f"{path}/ener_solv.log"
269-
elif env == "vacuum":
270-
file_name = f"{path}/ener_vac.log"
266+
file_name = f"{path}/ener_{env}.log"
271267

272268
with open(file_name, "r") as f:
273269
for line in f.readlines():
@@ -307,13 +303,13 @@ def calculate_dG_using_mbar(self, u_kn: np.array, N_k: dict, env: str):
307303
def _evaluate_traj_with_CHARMM(
308304
self, path: str, env: str, volumn_list: list = []
309305
) -> list:
310-
306+
charmm_exe = "charmm"
311307
script_name = ""
312-
if env == "waterbox":
313-
script_name = "charmm_evaluate_energy_in_solv.inp"
308+
if env == "waterbox" or env == "complex":
309+
script_name = f"charmm_evaluate_energy_in_{env}.inp"
314310
assert len(volumn_list) > 1
315311
elif env == "vacuum":
316-
script_name = "charmm_evaluate_energy_in_vac.inp"
312+
script_name = "charmm_evaluate_energy_in_{env}.inp"
317313

318314
top = self.configuration["system"][self.structure][env]["intermediate-filename"]
319315

@@ -324,6 +320,7 @@ def _evaluate_traj_with_CHARMM(
324320
str(path),
325321
str(top),
326322
str(script_name),
323+
str(charmm_exe),
327324
],
328325
check=True,
329326
capture_output=True,
@@ -363,7 +360,7 @@ def _evaluate_traj_with_CHARMM(
363360
def _evaluate_e_on_all_snapshots_CHARMM(
364361
self, snapshots: mdtraj.Trajectory, lambda_state: int, env: str
365362
):
366-
if env == "waterbox":
363+
if env == "waterbox" or env == "complex":
367364
unitcell_lengths = [
368365
(
369366
snapshots.unitcell_lengths[ts][0],
+6-8
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,12 @@
1-
#$ -S /bin/bash
2-
3-
#$ -m e
4-
#$ -j y
5-
#$ -p -500
6-
#$ -o /data/shared/projects/SGE_LOG/
7-
#$ -l gpu=1
1+
#!/bin/bash
2+
#SBATCH -p lgpu
3+
#SBATCH --gres=gpu
4+
85

96
path=$1 # path in which the simulation will start
107
top=$2 # top file to use
118
script=$3 # which script is called
9+
charmm=$4 # name of the charmm executable
1210

1311
cd ${path}
1412
pwd
@@ -18,4 +16,4 @@ echo 'Path: ' ${path}
1816
echo 'top: ' ${top}
1917
echo 'script: ' ${script}
2018

21-
OMP_NUM_THREADS=8 ${CHARMM} top:${top} path:${path} -i ${script}
19+
${charmm} top:${top} path:${path} -i ${script}
+7-26
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,18 @@
1-
#$ -S /bin/bash
2-
3-
#$ -m e
4-
#$ -j y
5-
#$ -p -500
6-
#$ -o /data/shared/projects/SGE_LOG/
7-
#$ -l gpu=1
1+
#!/bin/bash
2+
#SBATCH -p lgpu
3+
#SBATCH --gres=gpu
4+
#SBATCH --exclude='n00[20-26]'
85

96

107
path=$1
11-
SWITCH=$2
8+
charmm=$2
129

1310
cd ${path}
14-
pwd
15-
hostname
1611

1712

18-
run_complex () {
1913
input=charmm_run_complex
20-
OMP_NUM_THREADS=8 ${CHARMM} -i ${input}.inp > log_complex.out
21-
}
14+
OMP_NUM_THREADS=8 ${charmm} -i ${input}.inp > log_complex.out
2215

23-
run_waterbox () {
2416
input=charmm_run_waterbox
25-
OMP_NUM_THREADS=8 ${CHARMM} -i ${input}.inp > log_solv.out
26-
}
17+
OMP_NUM_THREADS=8 ${charmm} -i ${input}.inp > log_solv.out
2718

28-
29-
case ${SWITCH} in
30-
1)
31-
run_complex
32-
;;
33-
2)
34-
run_complex
35-
run_waterbox
36-
;;
37-
esac
+5-23
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,6 @@
1-
#$ -S /bin/bash
2-
3-
#$ -m e
4-
#$ -j y
5-
#$ -p -500
6-
#$ -o /data/shared/projects/SGE_LOG/
7-
#$ -l gpu=1
1+
#!/bin/bash
2+
#SBATCH -p lgpu
3+
#SBATCH --gres=gpu
84

95

106
path=$1
@@ -15,23 +11,9 @@ pwd
1511
hostname
1612

1713

18-
run_vacuum () {
1914
input=charmm_run_vacuum
20-
${CHARMM} -i ${input}.inp > log_vac.out
21-
}
15+
charmm_openmm_domdec -i ${input}.inp > log_vac.out
2216

23-
run_waterbox () {
2417
input=charmm_run_waterbox
25-
OMP_NUM_THREADS=8 ${CHARMM} -i ${input}.inp > log_solv.out
26-
}
18+
charmm_openmm_domdec -i ${input}.inp > log_solv.out
2719

28-
29-
case ${SWITCH} in
30-
1)
31-
run_vacuum
32-
;;
33-
2)
34-
run_vacuum
35-
run_waterbox
36-
;;
37-
esac

transformato/charmm_factory.py

+39-42
Original file line numberDiff line numberDiff line change
@@ -39,15 +39,10 @@ def generate_CHARMM_postprocessing_files(self, env: str) -> str:
3939
charmm_postprocessing_script += (
4040
self._get_CHARMM_vacuum_postprocessing_body()
4141
)
42-
elif env == "waterbox":
42+
elif env == "waterbox" or env == "complex":
4343
charmm_postprocessing_script += (
44-
self._get_CHARMM_waterbox_postprocessing_body()
44+
self._get_CHARMM_waterbox_postprocessing_body(env)
4545
)
46-
elif env == "complex":
47-
charmm_postprocessing_script += (
48-
self._get_CHARMM_waterbox_postprocessing_body()
49-
) ### needs to be adapted from waterbox to complex
50-
5146
else:
5247
raise NotImplementedError(f"Something went wrong with {env}.")
5348

@@ -60,10 +55,10 @@ def generate_CHARMM_production_files(self, env: str) -> str:
6055
if env == "vacuum":
6156
charmm_production_script += self._get_CHARMM_vacuum_production_body()
6257
elif env == "waterbox":
63-
charmm_production_script += self._get_CHARMM_waterbox_production_body()
58+
charmm_production_script += self._get_CHARMM_waterbox_production_body(env)
6459

6560
elif env == "complex": ###needs to be adaptet from waterbox to complex
66-
charmm_production_script += self._get_CHARMM_waterbox_production_body()
61+
charmm_production_script += self._get_CHARMM_waterbox_production_body(env)
6762
else:
6863
raise NotImplementedError(f"Something went wrong with {env}.")
6964

@@ -112,61 +107,63 @@ def build_reduced_toppar(tlc: str) -> str:
112107
read para card unit 20 append flex
113108
114109
! Interface FF
115-
open read card unit 10 name ../../toppar/top_interface.rtf
116-
read rtf card unit 10 append
110+
!open read card unit 10 name ../../toppar/top_interface.rtf
111+
!read rtf card unit 10 append
117112
118-
open read card unit 10 name ../../toppar/par_interface.prm
119-
read para card unit 10 append flex
113+
!open read card unit 10 name ../../toppar/par_interface.prm
114+
!read para card unit 10 append flex
120115
121-
stream ../../toppar/toppar_all36_nano_lig.str
122-
stream ../../toppar/toppar_all36_nanolig_patch.str
116+
!stream ../../toppar/toppar_all36_nano_lig.str
117+
!stream ../../toppar/toppar_all36_nanolig_patch.str
123118
124119
! Additional topologies and parameters for synthetic polymer
125-
stream ../../toppar/toppar_all36_synthetic_polymer.str
126-
stream ../../toppar/toppar_all36_synthetic_polymer_patch.str
127-
stream ../../toppar/toppar_all36_polymer_solvent.str
120+
!stream ../../toppar/toppar_all36_synthetic_polymer.str
121+
!stream ../../toppar/toppar_all36_synthetic_polymer_patch.str
122+
!stream ../../toppar/toppar_all36_polymer_solvent.str
128123
129124
! Additional topologies and parameters for water and ions
130125
stream ../../toppar/toppar_water_ions.str
131126
stream ../../toppar/toppar_dum_noble_gases.str
132-
stream ../../toppar/toppar_ions_won.str
127+
!stream ../../toppar/toppar_ions_won.str
133128
134129
! Additional topologies and parameters for protein
135-
stream ../../toppar/toppar_all36_prot_arg0.str
130+
!stream ../../toppar/toppar_all36_prot_arg0.str
136131
stream ../../toppar/toppar_all36_prot_c36m_d_aminoacids.str
137132
stream ../../toppar/toppar_all36_prot_fluoro_alkanes.str
138133
stream ../../toppar/toppar_all36_prot_heme.str
139134
stream ../../toppar/toppar_all36_prot_retinol.str
140-
stream ../../toppar/toppar_all36_prot_modify_res.str
135+
!stream ../../toppar/toppar_all36_prot_modify_res.str
141136
142137
! Additional topologies and parameters for nucleic acids
143138
stream ../../toppar/toppar_all36_na_nad_ppi.str
144-
stream ../../toppar/toppar_all36_na_rna_modified.str
139+
!stream ../../toppar/toppar_all36_na_rna_modified.str
145140
146141
! Additional topologies and parameters for lipids
147142
!stream ../../toppar/toppar_all36_lipid_archaeal.str
148143
stream ../../toppar/toppar_all36_lipid_bacterial.str
149144
stream ../../toppar/toppar_all36_lipid_cardiolipin.str
150145
stream ../../toppar/toppar_all36_lipid_cholesterol.str
151-
stream ../../toppar/toppar_all36_lipid_dag.str
146+
!stream ../../toppar/toppar_all36_lipid_dag.str
152147
stream ../../toppar/toppar_all36_lipid_inositol.str
153148
!stream ../../toppar/toppar_all36_lipid_lnp.str
154149
stream ../../toppar/toppar_all36_lipid_lps.str
155-
!stream ../../toppar/toppar_all36_lipid_mycobacterial.str
150+
!!stream ../../toppar/toppar_all36_lipid_mycobacterial.str
156151
stream ../../toppar/toppar_all36_lipid_miscellaneous.str
157152
stream ../../toppar/toppar_all36_lipid_model.str
158153
stream ../../toppar/toppar_all36_lipid_prot.str
159154
stream ../../toppar/toppar_all36_lipid_sphingo.str
160155
!stream ../../toppar/toppar_all36_lipid_tag.str
161-
stream ../../toppar/toppar_all36_lipid_yeast.str
162-
stream ../../toppar/toppar_all36_lipid_hmmm.str
163-
stream ../../toppar/toppar_all36_lipid_detergent.str
164-
stream ../../toppar/toppar_all36_lipid_ether.str
156+
!stream ../../toppar/toppar_all36_lipid_yeast.str
157+
!stream ../../toppar/toppar_all36_lipid_hmmm.str
158+
!stream ../../toppar/toppar_all36_lipid_detergent.str
159+
!stream ../../toppar/toppar_all36_lipid_ether.str
160+
stream ../../toppar/toppar_all36_prot_na_combined.str
161+
165162
166163
! Additional topologies and parameters for carbohydrates
167-
stream ../../toppar/toppar_all36_carb_glycolipid.str
168-
stream ../../toppar/toppar_all36_carb_glycopeptide.str
169-
stream ../../toppar/toppar_all36_carb_imlab.str
164+
!stream ../../toppar/toppar_all36_carb_glycolipid.str
165+
!stream ../../toppar/toppar_all36_carb_glycopeptide.str
166+
!stream ../../toppar/toppar_all36_carb_imlab.str
170167
171168
! Additional topologies and parameters for spin/fluorophore labels
172169
stream ../../toppar/toppar_all36_label_spin.str
@@ -284,7 +281,7 @@ def _get_CHARMM_vacuum_production_body(self) -> str:
284281
energy inbfrq 1
285282
energy inbfrq 0
286283
287-
mini sd nstep 200
284+
mini sd nstep 100
288285
289286
set nstep = {nstep}
290287
set temp = {temperature.value_in_unit(unit.kelvin)}
@@ -302,7 +299,7 @@ def _get_CHARMM_vacuum_production_body(self) -> str:
302299
stop"""
303300
return body
304301

305-
def _get_CHARMM_waterbox_postprocessing_body(self):
302+
def _get_CHARMM_waterbox_postprocessing_body(self, env: str):
306303
##### solv phase ######
307304
switch = self.vdw_switching_keyword
308305
if (
@@ -322,13 +319,13 @@ def _get_CHARMM_waterbox_postprocessing_body(self):
322319
GPU_domdec = ""
323320

324321
body = f"""
325-
stream charmm_step3_pbcsetup.str
322+
stream charmm_{env}_step3_pbcsetup.str
326323
327324
!
328325
! Image Setup
329326
!
330327
331-
open read unit 10 card name charmm_crystal_image.str
328+
open read unit 10 card name charmm_{env}_crystal_image.str
332329
CRYSTAL DEFINE @XTLtype @A @B @C @alpha @beta @gamma
333330
CRYSTAL READ UNIT 10 CARD
334331
@@ -363,7 +360,7 @@ def _get_CHARMM_waterbox_postprocessing_body(self):
363360
set nframes @nframes !?nfile
364361
traj firstu 41 nunit 1 begi @start skip @skip stop @nframes
365362
366-
open form writ unit 51 name ener_solv.log
363+
open form writ unit 51 name ener_{env}.log
367364
echu 51
368365
set idx 0
369366
label loop
@@ -377,7 +374,7 @@ def _get_CHARMM_waterbox_postprocessing_body(self):
377374
stop"""
378375
return body
379376

380-
def _get_CHARMM_waterbox_production_body(self):
377+
def _get_CHARMM_waterbox_production_body(self, env):
381378
##### waterbox ######
382379
switch = self.vdw_switching_keyword
383380

@@ -423,13 +420,13 @@ def _get_CHARMM_waterbox_production_body(self):
423420
! Setup PBC (Periodic Boundary Condition)
424421
!
425422
426-
stream charmm_step3_pbcsetup.str
423+
stream charmm_{env}_step3_pbcsetup.str
427424
428425
!
429426
! Image Setup
430427
!
431428
432-
open read unit 10 card name charmm_crystal_image.str
429+
open read unit 10 card name charmm_{env}_crystal_image.str
433430
CRYSTAL DEFINE @XTLtype @A @B @C @alpha @beta @gamma
434431
CRYSTAL READ UNIT 10 CARD
435432
@@ -455,8 +452,8 @@ def _get_CHARMM_waterbox_production_body(self):
455452
456453
shak bonh para fast sele segi SOLV end
457454
458-
mini SD nstep 500
459-
mini ABNR nstep 500
455+
mini SD nstep 100
456+
mini ABNR nstep 100
460457
461458
!
462459
! NPT dynamics:
@@ -479,7 +476,7 @@ def _get_CHARMM_waterbox_production_body(self):
479476
set temp = {temperature.value_in_unit(unit.kelvin)}
480477
481478
scalar fbeta set 5. sele all end
482-
open write unit 13 file name lig_in_waterbox.dcd
479+
open write unit 13 file name lig_in_{env}.dcd
483480
484481
DYNA CPT leap start time 0.001 nstep @nstep -
485482
nprint {nstout} iprfrq {nstout} -

0 commit comments

Comments
 (0)