OpenMM Separated Topologies Protocol#

This section provides details about the OpenMM Separated Topologies Protocol implemented in OpenFE.

Protocol API specification#

SepTopProtocol

SepTop RBFE calculations using OpenMM and OpenMMTools.

SepTopComplexSetupUnit

Protocol Unit for the complex phase of a SepTop free energy calculation

SepTopComplexRunUnit

Protocol Unit for the complex phase of an relative SepTop free energy

SepTopSolventSetupUnit

Protocol Unit for the solvent phase of a relative SepTop free energy

SepTopSolventRunUnit

Protocol Unit for the solvent phase of an relative SepTop free energy

SepTopProtocolResult

Dict-like container for the output of a SepTopProtocol

Protocol Settings#

Below are the settings which can be tweaked in the protocol. The default settings (accessed using SepTopProtocol.default_settings()) will automatically populate settings which we have found to be useful for running a Separated Topologies free energy calculation. There will however be some cases (such as when calculating difficult to converge systems) where you will need to tweak some of the following settings.

pydantic model openfe.protocols.openmm_septop.equil_septop_settings.SepTopSettings#

Configuration object for SepTopProtocol.

See also

openfe.protocols.openmm_septop.SepTopProtocol

Create a new model by parsing and validating input data from keyword arguments.

Raises [ValidationError][pydantic_core.ValidationError] if the input data cannot be validated to form a valid model.

self is explicitly positional-only to allow self as a field name.

field protocol_repeats: int [Required]#

The number of completely independent repeats of the entire sampling process. The mean of the repeats defines the final estimate of FE difference, while the variance between repeats is used as the uncertainty.

field forcefield_settings: OpenMMSystemGeneratorFFSettings [Required]#

Parameters to set up the force field with OpenMM Force Fields

field thermo_settings: ThermoSettings [Required]#

Settings for thermodynamic parameters

field solvent_solvation_settings: OpenMMSolvationSettings [Required]#

Settings for solvating the solvent system.

field complex_solvation_settings: OpenMMSolvationSettings [Required]#

Settings for solvating the complex system.

field alchemical_settings: AlchemicalSettings [Required]#

Alchemical protocol settings.

field solvent_lambda_settings: LambdaSettings [Required]#

Settings for controlling the lambda schedule for the different components (vdw, elec, restraints) in the solvent.

field complex_lambda_settings: LambdaSettings [Required]#

Settings for controlling the lambda schedule for the different components (vdw, elec, restraints) in the complex.

field engine_settings: OpenMMEngineSettings [Required]#

Settings specific to the OpenMM engine, such as the compute platform.

field integrator_settings: IntegratorSettings [Required]#

Settings for controlling the integrator, such as the timestep and barostat settings.

field complex_equil_simulation_settings: MDSimulationSettings [Required]#

Pre-alchemical complex simulation control settings.

field complex_simulation_settings: MultiStateSimulationSettings [Required]#

Simulation control settings, including simulation lengths for the complex transformation.

field solvent_equil_simulation_settings: MDSimulationSettings [Required]#

Pre-alchemical solvent simulation control settings.

field solvent_simulation_settings: MultiStateSimulationSettings [Required]#

Simulation control settings, including simulation lengths for the solvent transformation.

field complex_equil_output_settings: SepTopEquilOutputSettings [Required]#

Simulation output settings for the complex non-alchemical equilibration.

field complex_output_settings: MultiStateOutputSettings [Required]#

Simulation output settings for the complex transformation.

field solvent_equil_output_settings: SepTopEquilOutputSettings [Required]#

Simulation output settings for the solvent non-alchemical equilibration.

field solvent_output_settings: MultiStateOutputSettings [Required]#

Simulation output settings for the solvent transformation.

field partial_charge_settings: OpenFFPartialChargeSettings [Required]#

Settings for controlling how to assign partial charges, including the partial charge assignment method, and the number of conformers used to generate the partial charges.

field solvent_restraint_settings: BaseRestraintSettings [Required]#

Settings for the harmonic restraint in the solvent

field complex_restraint_settings: BaseRestraintSettings [Required]#

Settings for the Boresch restraints in the complex

Protocol Specific Settings Classes#

Below are Settings classes which are unique to the SepTopProtocol.

pydantic model openfe.protocols.openmm_septop.equil_septop_settings.AlchemicalSettings#

Settings for the alchemical protocol

Empty place holder for right now.

Create a new model by parsing and validating input data from keyword arguments.

Raises [ValidationError][pydantic_core.ValidationError] if the input data cannot be validated to form a valid model.

self is explicitly positional-only to allow self as a field name.

pydantic model openfe.protocols.openmm_septop.equil_septop_settings.LambdaSettings#

Lambda schedule settings.

Defines lists of floats to control various aspects of the alchemical transformation.

Notes

  • In all cases a lambda value of 0 defines a fully interacting state A and a non-interacting state B, whilst a value of 1 defines a fully interacting state B and a non-interacting state A.

  • lambda_elec, lambda_vdw`, and lambda_restraints must all be of the same length, defining all the windows of the transformation.

Create a new model by parsing and validating input data from keyword arguments.

Raises [ValidationError][pydantic_core.ValidationError] if the input data cannot be validated to form a valid model.

self is explicitly positional-only to allow self as a field name.

field lambda_elec_A: list[float] = [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.25, 0.5, 0.75, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0]#

List of floats of the lambda values for the electrostatics of ligand A. Zero means fully interacting and 1 means fully decoupled. Length of this list needs to match length of lambda_vdw and lambda_restraints.

field lambda_elec_B: list[float] = [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.75, 0.5, 0.25, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]#

List of floats of the lambda values for the electrostatics of ligand B. Zero means fully interacting and 1 means fully decoupled. Length of this list needs to match length of lambda_vdw and lambda_restraints.

field lambda_vdw_A: list[float] = [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.14285714285714285, 0.2857142857142857, 0.42857142857142855, 0.5714285714285714, 0.7142857142857142, 0.8571428571428571, 1.0]#

List of floats of lambda values for the van der Waals of ligand A. Zero means fully interacting and 1 means fully decoupled. Length of this list needs to match length of lambda_elec and lambda_restraints.

field lambda_vdw_B: list[float] = [1.0, 0.8571428571428572, 0.7142857142857143, 0.5714285714285714, 0.4285714285714286, 0.2857142857142858, 0.1428571428571429, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]#

List of floats of lambda values for the van der Waals of ligand B. Zero means fully interacting and 1 means fully decoupled. Length of this list needs to match length of lambda_elec and lambda_restraints.

field lambda_restraints_A: list[float] = [0.0, 0.05, 0.1, 0.3, 0.5, 0.75, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0]#

List of floats of lambda values for the restraints of ligand A. Zero means no restraints are applied and 1 means restraints are fully applied. Length of this list needs to match length of lambda_vdw and lambda_elec.

field lambda_restraints_B: list[float] = [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.75, 0.5, 0.3, 0.1, 0.05, 0.0]#

List of floats of lambda values for the restraints of ligand B. Zero means no restraints are applied and 1 means restraints are fully applied. Length of this list needs to match length of lambda_vdw and lambda_elec.

pydantic model openfe.protocols.openmm_septop.equil_septop_settings.SepTopEquilOutputSettings#

Create a new model by parsing and validating input data from keyword arguments.

Raises [ValidationError][pydantic_core.ValidationError] if the input data cannot be validated to form a valid model.

self is explicitly positional-only to allow self as a field name.

field output_indices: str = 'all'#

Selection string for which part of the system to write coordinates for. The SepTop protocol enforces “all” since the full system output is required in the complex leg. Default “all”.

field production_trajectory_filename: str | None = 'simulation'#

Basename for the path to the storage file for analysis. The protocol will append a ‘_stateA.xtc’ and a ‘_stateB.xtc’ for the output files of the respective endstates. Default ‘simulation’.

field trajectory_write_interval: Quantity = <Quantity(20.0, 'picosecond')>#

Frequency to write the xtc file. Default 20 * offunit.picosecond.

Constraints:
  • func = functools.partial(<function _has_compatible_dimensionality at 0x7f3c566e99e0>, unit=’picosecond’, convert=True)

  • json_schema_input_type = typing.Any

  • json_schema = {‘type’: ‘number’}

  • return_type = PydanticUndefined

  • when_used = always

field preminimized_structure: str | None = 'system'#

Basename for the path to the pdb file of the full pre-minimized systems. The protocol will append a ‘_stateA.pdb’ and a ‘_stateB.pdb’ for the output files of the respective endstates. Default ‘system’.

field minimized_structure: str | None = 'minimized'#

Basename for the path to the pdb file of the systems after minimization. The protocol will append a ‘_stateA.pdb’ and a ‘_stateB.pdb’ for the output files of the respective endstates. Default ‘minimized’.

field equil_nvt_structure: str | None = 'equil_nvt'#

Basename for the path to the pdb file of the systems after NVT equilibration. The protocol will append a ‘_stateA’ and a ‘_stateB’ for the output files of the respective endstates. Default ‘equil_nvt.pdb’.

field equil_npt_structure: str | None = 'equil_npt'#

Basename for the path to the pdb file of the systems after NPT equilibration. The protocol will append a ‘_stateA.pdb’ and a ‘_stateB.pdb’ for the output files of the respective endstates. Default ‘equil_npt’.

field log_output: str | None = 'simulation'#

Basename for the filename for writing the log of the MD simulation, including timesteps, energies, density, etc. The protocol will append a ‘_stateA.pdb’ and a ‘_stateB.pdb’ for the output files of the respective endstates. Default ‘simulation’.

field checkpoint_interval: NanosecondQuantity = <Quantity(1.0, 'nanosecond')>#

Frequency to write the checkpoint file. Default 1 * unit.nanosecond.

Constraints:
  • func = functools.partial(<function _has_compatible_dimensionality at 0x7f3c566e99e0>, unit=’nanosecond’, convert=True)

  • json_schema_input_type = typing.Any

  • json_schema = {‘type’: ‘number’}

  • return_type = PydanticUndefined

  • when_used = always

field checkpoint_storage_filename: str = 'checkpoint.chk'#

Separate filename for the checkpoint file. Note, this should not be a full path, just a filename. Default ‘checkpoint.chk’.

field forcefield_cache: str | None = 'db.json'#

Filename for caching small molecule residue templates so they can be later reused.