Release 0.9.4 - Nonequilibrium integrators overhaul
Pre-release
Pre-release
Major changes
- Overhaul of
LangevinIntegrator
and subclasses to better support nonequilibrium integrators - Add true reaction-field support to
AlchemicalFactory
- Add some alchemical test systems
Updates to openmmtools.integrators.LangevinIntegrator
and friends
API-breaking changes:
- The nonequilibrium integrators are now called
AlchemicalNonequilibriumLangevinIntegrator
andExternalPerturbationLangevinIntegrator
, and both are subclasses of a commonNonequilibriumLangevinIntegrator
that provides a consistent interface to setting and gettingprotocol_work
AlchemicalNonequilibriumLangevinIntegrator
now has a defaultalchemical_functions
to eliminate need for every test to treat it as a special case (#180)- The
get_protocol_work()
method allows you to retrieve the protocol work from anyNonequilibriumLangevinIntegrator
subclass and returns a unit-bearing work. The optionaldimensionless=True
argument returns a dimensionless float in units ofkT
. - Integrator global variables now store all energies in natural OpenMM units (kJ/mol) but the new accessor methods (see below) should b used instead of getting integrator global variables for work and heat. (#181)
- Any private methods for adding steps to the integrator have been prepended with
_
to hide them from the public API.
New features
- Order of arguments for all
LangevinIntegrator
derivatives matchesopenmm.LangevinIntegrator
so it can act as a drop-in replacement. (#176) - The
get_shadow_work()
andget_heat()
methods are now available for anyLangevinIntegrator
subclass, as well as the corresponding propertiesshadow_work
andheat
. The functions also supportdimensionless=True
. (#163) - The
shadow_work
andheat
properties were added to allLangevinIntegrator
subclasses, returning the values of these properties (if the integrator was constructed with the appropriatemeasure_shadow_work=True
ormeasure_heat=True
flags) as unit-bearing quantities - The
get_protocol_work()
andget_total_work()
methods are now available for anyNonequilibriumLangevinIntegrator
, returning unit-bearing quantities unlessdimensionless=True
is provided in which case they return the work in implicit units of kT.get_total_work()
requires the integrator to have been constructed withmeasure_shadow_work=True
. - The
protocol_work
andtotal_work
properties were added to allNonequilibriumLangevinIntegrator
subclasses, and return the unit-bearing work quantities.total_work
requires the integrator to have been constructed withmeasure_shadow_work=True
. - The subclasses have been reworked to support any
kwargs
that the base classes support, and defaults have all been made consistent. - Various
reset()
methods have been added to reset statistics for allLangevinIntegrator
subclasses. - All custom integrators support
.pretty_format()
and.pretty_print()
with optional highlighting of specific step types.
Bugfixes
- Zero-step perturbations now work correctly (#177)
AlchemicalNonequilibriumLangevinIntegrator
now correctly supports multipleH
steps.
Internal changes
- Adding new
LangevinIntegrator
step methods now uses aself._register_step_method(step_string, callback_function, supports_force_groups=False)
call to simplify this process. - Code duplication has been reduced through the use of calling base class methods whenever possible.
run_nonequilibrium_switching()
test now uses BAR to test dragging a harmonic oscillator and tests a variety of integrator splittings (["O { V R H R V } O", "O V R H R V O", "R V O H O V R", "H R V O V R H"]
).- Integrator tests use deterministic PME and mixed precision when able.
Updates to openmmtools.alchemy.AlchemicalFactory
Reaction field electrostatics now removes the shift, setting c_rf = 0
.
A convenience method AlchemicalFactory.replace_reaction_field()
has been added to allow fully-interacting systems to be modified to force c_rf = 0
by recoding reaction-field electrostatics as a CustomNonbondedForce
New openmmtools.testsystems
classes
AlchemicalWaterBox
was added, which has the first water molecule in the system alchemically modified