From 3c6eb097c82ba9aaffa4bb41c412e8f4a3247bf1 Mon Sep 17 00:00:00 2001 From: hannahbaumann Date: Wed, 30 Jul 2025 16:37:05 +0200 Subject: [PATCH 1/2] Update restraint settings (force constant and min/max distance --- openfe/protocols/restraint_utils/settings.py | 31 ++++++++++++-------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/openfe/protocols/restraint_utils/settings.py b/openfe/protocols/restraint_utils/settings.py index 4e5e4f540..5f8c17d50 100644 --- a/openfe/protocols/restraint_utils/settings.py +++ b/openfe/protocols/restraint_utils/settings.py @@ -108,46 +108,51 @@ class BoreschRestraintSettings(BaseRestraintSettings): ---------- [1] Baumann, Hannah M., et al. "Broadening the scope of binding free energy calculations using a Separated Topologies approach." (2023). + [2] Wu, Zhiyi, et al. "Optimizing Absolute Binding Free Energy + Calculations for Production Usage." + (2025; DOI 10.26434/chemrxiv-2025-q08ld-v2) """ K_r: FloatQuantity["kilojoule_per_mole / nm ** 2"] = ( - 8368.0 * unit.kilojoule_per_mole / unit.nm**2 + 418.4 * unit.kilojoule_per_mole / unit.nm**2 ) """ - The bond spring constant between H0 and G0. + The bond spring constant between H0 and G0. Default 1 kcal/mol/Ų """ K_thetaA: FloatQuantity["kilojoule_per_mole / radians ** 2"] = ( - 83.68 * unit.kilojoule_per_mole / unit.radians**2 + 334.72 * unit.kilojoule_per_mole / unit.radians**2 ) """ - The spring constant for the angle formed by H1-H0-G0. + The spring constant for the angle formed by H1-H0-G0. + Default 80 kcal/mol/rad² """ K_thetaB: FloatQuantity["kilojoule_per_mole / radians ** 2"] = ( - 83.68 * unit.kilojoule_per_mole / unit.radians**2 + 334.72 * unit.kilojoule_per_mole / unit.radians**2 ) """ The spring constant for the angle formed by H0-G0-G1. + Default 80 kcal/mol/rad² """ K_phiA: FloatQuantity["kilojoule_per_mole / radians ** 2"] = ( - 83.68 * unit.kilojoule_per_mole / unit.radians**2 + 334.72 * unit.kilojoule_per_mole / unit.radians**2 ) """ The equilibrium force constant for the dihedral formed by - H2-H1-H0-G0. + H2-H1-H0-G0. Default 80 kcal/mol/rad² """ K_phiB: FloatQuantity["kilojoule_per_mole / radians ** 2"] = ( - 83.68 * unit.kilojoule_per_mole / unit.radians**2 + 334.72 * unit.kilojoule_per_mole / unit.radians**2 ) """ The equilibrium force constant for the dihedral formed by - H1-H0-G0-G1. + H1-H0-G0-G1. Default 80 kcal/mol/rad² """ K_phiC: FloatQuantity["kilojoule_per_mole / radians ** 2"] = ( - 83.68 * unit.kilojoule_per_mole / unit.radians**2 + 334.72 * unit.kilojoule_per_mole / unit.radians**2 ) """ The equilibrium force constant for the dihedral formed by - H0-G0-G1-G2. + H0-G0-G1-G2. Default 80 kcal/mol/rad² """ host_selection: str = "backbone" """ @@ -164,12 +169,12 @@ class BoreschRestraintSettings(BaseRestraintSettings): Boresch-like restraint search parameter. The cutoff value for filtering atoms by their root mean square fluctuation. Atoms with values above this cutoff will be disregarded. """ - host_min_distance: FloatQuantity["nanometer"] = 1.0 * unit.nanometer + host_min_distance: FloatQuantity["nanometer"] = 0.5 * unit.nanometer """ Boresch-like restraint search parameter. The minimum distance between any host atom and the guest G0 atom. Must be in units compatible with nanometer. """ - host_max_distance: FloatQuantity["nanometer"] = 3.0 * unit.nanometer + host_max_distance: FloatQuantity["nanometer"] = 1.5 * unit.nanometer """ Boresch-like restraint search parameter. The maximum distance between any host atom and the guest G0 atom. Must be in units compatible with nanometer. From 3b939cbdaea02abb08d46de33643eb00ade803f7 Mon Sep 17 00:00:00 2001 From: hannahbaumann Date: Thu, 31 Jul 2025 14:08:31 +0200 Subject: [PATCH 2/2] Change Boresch standard state correction in test after changing the force constant --- openfe/tests/protocols/restraints/test_omm_restraints.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openfe/tests/protocols/restraints/test_omm_restraints.py b/openfe/tests/protocols/restraints/test_omm_restraints.py index 3079be554..a83036a00 100644 --- a/openfe/tests/protocols/restraints/test_omm_restraints.py +++ b/openfe/tests/protocols/restraints/test_omm_restraints.py @@ -366,5 +366,5 @@ def test_get_boresch_state_correction(tyk2_protein_ligand_system, tyk2_rdkit_lig thermodynamic_state=state, geometry=geometry ) assert ( - pytest.approx(correction.to(unit.kilocalorie_per_mole).m) == -7.424692312779209 + pytest.approx(correction.to(unit.kilocalorie_per_mole).m) == -8.597860066626481 )