Skip to content

Commit e071678

Browse files
committed
Optimize CustomLJ operations
1 parent 05fcd7f commit e071678

File tree

1 file changed

+16
-18
lines changed

1 file changed

+16
-18
lines changed

src/fes_ml/alchemical/modifications/custom_lj.py

Lines changed: 16 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -76,29 +76,27 @@ def apply(
7676

7777
# Create a dictionary with the optimized Lennard-Jones parameters for each atom type
7878
force_field_opt = _ForceField(lj_offxml)
79-
opt_params = {}
80-
for p in force_field_opt.get_parameter_handler("vdW"):
81-
opt_params[p.id] = {
82-
"epsilon": p.epsilon.to_openmm().value_in_unit(
83-
_unit.kilojoules_per_mole
84-
),
79+
opt_params = {
80+
p.id: {
81+
"epsilon": p.epsilon.to_openmm().value_in_unit(_unit.kilojoules_per_mole),
8582
"sigma": p.sigma.to_openmm().value_in_unit(_unit.nanometer),
8683
}
84+
for p in force_field_opt.get_parameter_handler("vdW")
85+
}
8786

8887
# Update the Lennard-Jones parameters in the CustomNonbondedForce
8988
force_field = _ForceField(*original_offxml)
9089
labels = force_field.label_molecules(topology_off)
91-
index = 0
92-
for mol in labels:
93-
for _, val in mol["vdW"].items():
94-
atom_type = val.id
95-
# Get the original Lennard-Jones parameters
96-
parameters = [
97-
opt_params[atom_type]["sigma"],
98-
opt_params[atom_type]["epsilon"],
99-
]
100-
# Update the Lennard-Jones parameters
101-
custom_nb_force.setParticleParameters(index, parameters)
102-
index += 1
90+
91+
# Flatten the vdW parameters for all molecules
92+
vdw_parameters = [
93+
(opt_params[val.id]["sigma"], opt_params[val.id]["epsilon"])
94+
for mol in labels
95+
for _, val in mol["vdW"].items()
96+
]
97+
98+
# Update the Lennard-Jones parameters in a single loop
99+
for index, parameters in enumerate(vdw_parameters):
100+
custom_nb_force.setParticleParameters(index, parameters)
103101

104102
return system

0 commit comments

Comments
 (0)