As may be expected, most of the workflows used to estimate the physical properties within the framework make use of very similar workflows. This page aims to document the built-in 'template' workflows from which the more complex physical property estimation workflows are constructed.
Properties being estimated using the direct simulation <../layers/simulationlayer>
calculation layer typically base their workflows off of the :py~openff.evaluator.protocols.utils.generate_simulation_protocols
template.
Note
This template currently assumes that a liquid phase property is being computed.
The workflow produced by this template proceeds as follows:
spaced-list
- 1000 molecules are inserted into a simulation box with an approximate density of 0.95 g / mL using packmol (:py
~openff.evaluator.protocols.coordinates.BuildCoordinatesPackmol
). - the system is parameterized using either the OpenFF toolkit, TLeap or LigParGen depending on the force field being employed (:py
~openff.evaluator.protocols.forcefield.BuildSmirnoffSystem
, :py~openff.evaluator.protocols.forcefield.BuildTLeapSystem
or :py~openff.evaluator.protocols.forcefield.BuildLigParGenSystem
). - an energy minimization is performed using the default OpenMM energy minimizer (:py
~openff.evaluator.protocols.openmm.OpenMMEnergyMinimisation
). - the system is equilibrated by running a short NPT simulation for 100000 steps using a timestep of 2 fs and using the OpenMM simulation engine (:py
~openff.evaluator.protocols.openmm.OpenMMSimulation
). while the uncertainty in the average observable is greater than the requested tolerance (if specified):
5a) a longer NPT production simulation is run for 1000000 steps with a timestep of 2 fs and using the OpenMM simulation protocol (:py
~openff.evaluator.protocols.openmm.OpenMMSimulation
) with its default Langevin integrator and Monte Carlo barostat.5b) the correlated samples are removed from the simulation outputs and the average value of the observable of interest and its uncertainty are computed by bootstrapping with replacement for 250 iterations (:py
~openff.evaluator.protocols.analysis.AverageObservable
). See2016:chodera
for details of the decorrelation procedure.5c) steps 5a) and 5b) are repeated until the uncertainty condition (if applicable) is met.
The decorrelated simulation outputs are then made available ready to be cached by a storage backend <../storage/storagebackend>
(:py~openff.evaluator.protocols.analysis.DecorrelateObservables
, :py~openff.evaluator.protocols.analysis.DecorrelateTrajectory
).
Properties being estimated using the MBAR reweighting <../layers/reweightinglayer>
calculation layer typically base their workflows off of the :py~openff.evaluator.protocols.utils.generate_reweighting_protocols
template.
The workflow produced by this template proceeds as follows:
spaced-list
for each stored simulation data:
1a) the cached data is retrieved from disk (:py
~openff.evaluator.protocols.storage.UnpackStoredSimulationData
)- the cached data from is concatenated together to form a single trajectory of configurations and observables (:py
~openff.evaluator.protocols.reweighting.ConcatenateTrajectories
, :py~openff.evaluator.protocols.reweighting.ConcatenateStatistics
). for each stored simulation data:
3a) the system is parameterized using the force field parameters which were used when originally generating the cached data i.e. one of the reference states (:py
~openff.evaluator.protocols.forcefield.BuildSmirnoffSystem
, :py~openff.evaluator.protocols.forcefield.BuildTLeapSystem
or :py~openff.evaluator.protocols.forcefield.BuildLigParGenSystem
).3b) the reduced potential of each configuration in the concatenated trajectory is evaluated using the parameterized system (:py
~openff.evaluator.protocols.openmm.OpenMMEvaluateEnergies
).the system is parameterized using the force field parameters with which the property of interest should be calculated using i.e. of the target state (:py
~openff.evaluator.protocols.forcefield.BuildSmirnoffSystem
, :py~openff.evaluator.protocols.forcefield.BuildTLeapSystem
or :py~openff.evaluator.protocols.forcefield.BuildLigParGenSystem
) and the reduced potential of each configuration in the concatenated trajectory is evaluated using the parameterized system (:py~openff.evaluator.protocols.openmm.OpenMMEvaluateEnergies
).4a) (optional) if the observable of interest is a function of the force field parameters it is recomputed using the target state parameters. These recomputed values then replace the original concatenated observables loaded from the cached data.
- the reference potentials, target potentials and the joined observables are sub-sampled to only retain equilibrated, uncorrelated samples (:py
~openff.evaluator.protocols.analysis.AverageObservable
, :py~openff.evaluator.protocols.analysis.DecorrelateObservables
, :py~openff.evaluator.protocols.analysis.DecorrelateTrajectory
). See2016:chodera
for details of the decorrelation procedure. - the MBAR method is employed to compute the average value of the observable of interest and its uncertainty at the target state, taking the reference state reduced potentials as input. See
2018:messerly-a
for the theory behind this approach. An exception is raised if there are not enough effective samples to reweight (:py~openff.evaluator.protocols.reweighting.ReweightObservable
).
In more specialised cases the :py~openff.evaluator.protocols.utils.generate_base_reweighting_protocols
template (which :py~openff.evaluator.protocols.utils.generate_reweighting_protocols
is built off of) is instead used due to its greater flexibility.
commonworkflows.bib