@@ -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