openmmtools.integrators.NoseHooverChainVelocityVerletIntegrator¶

class
openmmtools.integrators.
NoseHooverChainVelocityVerletIntegrator
(system=None, temperature=Quantity(value=298, unit=kelvin), collision_frequency=Quantity(value=50, unit=/picosecond), timestep=Quantity(value=0.001, unit=picosecond), chain_length=5, num_mts=5, num_yoshidasuzuki=5)[source]¶  NoséHoover chain thermostat, using the reversible multi time step velocity Verlet algorithm
 detailed in the papers below.
Notes
The velocity Verlet integrator is taken verbatim from Peter Eastman’s example in the CustomIntegrator header file documentation.
Useful tests of the NHC integrator can be performed by monitoring the instantaneous temperature during the simulation and confirming that conserved energy is constant to about 1 part in 10^5. The instantanous temperature and particle kinetic and potential energies can already be extracted from a snapshot, for example see the OpenMM StateDataReporter implementation for more details. This integrator also provides heat bath energies (kJ/mol) through the following mechanism:
>>> waterbox = testsystems.WaterBox() >>> system = waterbox.system >>> integrator = NoseHooverChainVelocityVerletIntegrator(system) >>> heat_bath_kinetic_energy = integrator.getGlobalVariableByName('bathKE') >>> heat_bath_potential_energy = integrator.getGlobalVariableByName('bathPE')
From here, the conserved energy is the sum of the potential and kinetic energies for both the system and the heat bath.
References
G. J. Martyna, M. E. Tuckerman, D. J. Tobias, and Michael L. Klein “Explicit reversible integrators for extended systems dynamics”, Molecular Physics, 87 11171157 (1996) http://dx.doi.org/10.1080/00268979600100761
G. J. Martyna, M. L. Klein, and M. Tuckerman “Nosé–Hoover chains: The canonical ensemble via continuous dynamics”, Journal of Chemical Physics 97, 26352643 (1992) http://dx.doi.org/10.1063/1.463940
Examples
Create a velocity Verlet integrator with NoséHoover chain thermostat.
>>> from openmmtools import testsystems >>> waterbox = testsystems.WaterBox() >>> system = waterbox.system >>> timestep = 1.0 * unit.femtoseconds >>> temperature = 300 * unit.kelvin >>> chain_length = 10 >>> collision_frequency = 50 / unit.picoseconds >>> num_mts = 5 >>> num_yoshidasuzuki = 5
>>> integrator = NoseHooverChainVelocityVerletIntegrator(system, temperature, collision_frequency, timestep, chain_length, num_mts, num_yoshidasuzuki)
Attributes: kT
The thermal energy in simtk.openmm.Quantity
Methods
addComputeGlobal
(self, variable, expression)Add a step to the integration algorithm that computes a global value. addComputePerDof
(self, variable, expression)Add a step to the integration algorithm that computes a perDOF value. addComputeSum
(self, variable, expression)Add a step to the integration algorithm that computes a sum over degrees of freedom. addComputeTemperatureDependentConstants
(…)Wrap the ComputePerDof into an ifblock executed only when kT changes. addConstrainPositions
(self)Add a step to the integration algorithm that updates particle positions so all constraints are satisfied. addConstrainVelocities
(self)Add a step to the integration algorithm that updates particle velocities so the net velocity along all constraints is 0. addGlobalVariable
(self, name, initialValue)Define a new global variable. addPerDofVariable
(self, name, initialValue)Define a new perDOF variable. addTabulatedFunction
(self, name, function)Add a tabulated function that may appear in expressions. addUpdateContextState
(self)Add a step to the integration algorithm that allows Forces to update the context state. beginIfBlock
(self, condition)Add a step which begins a new “if” block. beginWhileBlock
(self, condition)Add a step which begins a new “while” block. computeEnergies
()Computes kinetic and potential energies for the heat bath deserialize_xml
(xml_serialization)Shortcut to deserialize the XML representation and the restore interface. endBlock
(self)Add a step which marks the end of the most recently begun “if” or “while” block. getComputationStep
(self, index)Get the details of a computation step that has been added to the integration algorithm. getConstraintTolerance
(self)Get the distance tolerance within which constraints are maintained, as a fraction of the constrained distance. getGlobalVariable
(self, index)Get the current value of a global variable. getGlobalVariableByName
(self, name)Get the current value of a global variable, specified by name. getGlobalVariableName
(self, index)Get the name of a global variable. getKineticEnergyExpression
(self)Get the expression to use for computing the kinetic energy. getNumComputations
(self)Get the number of computation steps that have been added. getNumGlobalVariables
(self)Get the number of global variables that have been defined. getNumPerDofVariables
(self)Get the number of perDOF variables that have been defined. getNumTabulatedFunctions
(self)Get the number of tabulated functions that have been defined. getPerDofVariable
(self, index)getPerDofVariable(self, index) > PyObject * getPerDofVariableByName
(self, name)Get the value of a perDOF variable, specified by name. getPerDofVariableName
(self, index)Get the name of a perDOF variable. getRandomNumberSeed
(self)Get the random number seed. getStepSize
(self)Get the size of each time step, in picoseconds. getTabulatedFunction
(self, index)getTabulatedFunction(self, index) > TabulatedFunction getTabulatedFunctionName
(self, index)Get the name of a tabulated function that may appear in expressions. getTemperature
()Return the temperature of the heat bath. is_restorable
(openmm_object)Check if the custom integrator or force has a restorable interface. is_thermostated
(integrator)Return true if the integrator is a ThermostatedIntegrator. pretty_format
([as_list, step_types_to_highlight])Generate a humanreadable version of each integrator step. pretty_print
()Prettyprint the computation steps of this integrator. propagateNHC
()Propagate the NoséHoover chain restore_interface
(integrator)Restore the original interface of a CustomIntegrator. setConstraintTolerance
(self, tol)Set the distance tolerance within which constraints are maintained, as a fraction of the constrained distance. setGlobalVariable
(self, index, value)Set the value of a global variable. setGlobalVariableByName
(self, name, value)Set the value of a global variable, specified by name. setKineticEnergyExpression
(self, expression)Set the expression to use for computing the kinetic energy. setPerDofVariable
(self, index, values)Set the value of a perDOF variable. setPerDofVariableByName
(self, name, values)Set the value of a perDOF variable, specified by name. setRandomNumberSeed
(self, seed)Set the random number seed. setStepSize
(self, size)Set the size of each time step, in picoseconds. setTemperature
(temperature)Set the temperature of the heat bath. step
(self, steps)Advance a simulation through time by taking a series of time steps. 
__init__
(system=None, temperature=Quantity(value=298, unit=kelvin), collision_frequency=Quantity(value=50, unit=/picosecond), timestep=Quantity(value=0.001, unit=picosecond), chain_length=5, num_mts=5, num_yoshidasuzuki=5)[source]¶ Construct a velocity Verlet integrator with NoséHoover chain thermostat implemented with massive collisions.
Methods
__init__
([system, temperature, unit, …])Construct a velocity Verlet integrator with NoséHoover chain thermostat implemented with massive collisions. addComputeGlobal
(self, variable, expression)Add a step to the integration algorithm that computes a global value. addComputePerDof
(self, variable, expression)Add a step to the integration algorithm that computes a perDOF value. addComputeSum
(self, variable, expression)Add a step to the integration algorithm that computes a sum over degrees of freedom. addComputeTemperatureDependentConstants
(…)Wrap the ComputePerDof into an ifblock executed only when kT changes. addConstrainPositions
(self)Add a step to the integration algorithm that updates particle positions so all constraints are satisfied. addConstrainVelocities
(self)Add a step to the integration algorithm that updates particle velocities so the net velocity along all constraints is 0. addGlobalVariable
(self, name, initialValue)Define a new global variable. addPerDofVariable
(self, name, initialValue)Define a new perDOF variable. addTabulatedFunction
(self, name, function)Add a tabulated function that may appear in expressions. addUpdateContextState
(self)Add a step to the integration algorithm that allows Forces to update the context state. beginIfBlock
(self, condition)Add a step which begins a new “if” block. beginWhileBlock
(self, condition)Add a step which begins a new “while” block. computeEnergies
()Computes kinetic and potential energies for the heat bath deserialize_xml
(xml_serialization)Shortcut to deserialize the XML representation and the restore interface. endBlock
(self)Add a step which marks the end of the most recently begun “if” or “while” block. getComputationStep
(self, index)Get the details of a computation step that has been added to the integration algorithm. getConstraintTolerance
(self)Get the distance tolerance within which constraints are maintained, as a fraction of the constrained distance. getGlobalVariable
(self, index)Get the current value of a global variable. getGlobalVariableByName
(self, name)Get the current value of a global variable, specified by name. getGlobalVariableName
(self, index)Get the name of a global variable. getKineticEnergyExpression
(self)Get the expression to use for computing the kinetic energy. getNumComputations
(self)Get the number of computation steps that have been added. getNumGlobalVariables
(self)Get the number of global variables that have been defined. getNumPerDofVariables
(self)Get the number of perDOF variables that have been defined. getNumTabulatedFunctions
(self)Get the number of tabulated functions that have been defined. getPerDofVariable
(self, index)getPerDofVariable(self, index) > PyObject * getPerDofVariableByName
(self, name)Get the value of a perDOF variable, specified by name. getPerDofVariableName
(self, index)Get the name of a perDOF variable. getRandomNumberSeed
(self)Get the random number seed. getStepSize
(self)Get the size of each time step, in picoseconds. getTabulatedFunction
(self, index)getTabulatedFunction(self, index) > TabulatedFunction getTabulatedFunctionName
(self, index)Get the name of a tabulated function that may appear in expressions. getTemperature
()Return the temperature of the heat bath. is_restorable
(openmm_object)Check if the custom integrator or force has a restorable interface. is_thermostated
(integrator)Return true if the integrator is a ThermostatedIntegrator. pretty_format
([as_list, step_types_to_highlight])Generate a humanreadable version of each integrator step. pretty_print
()Prettyprint the computation steps of this integrator. propagateNHC
()Propagate the NoséHoover chain restore_interface
(integrator)Restore the original interface of a CustomIntegrator. setConstraintTolerance
(self, tol)Set the distance tolerance within which constraints are maintained, as a fraction of the constrained distance. setGlobalVariable
(self, index, value)Set the value of a global variable. setGlobalVariableByName
(self, name, value)Set the value of a global variable, specified by name. setKineticEnergyExpression
(self, expression)Set the expression to use for computing the kinetic energy. setPerDofVariable
(self, index, values)Set the value of a perDOF variable. setPerDofVariableByName
(self, name, values)Set the value of a perDOF variable, specified by name. setRandomNumberSeed
(self, seed)Set the random number seed. setStepSize
(self, size)Set the size of each time step, in picoseconds. setTemperature
(temperature)Set the temperature of the heat bath. step
(self, steps)Advance a simulation through time by taking a series of time steps. Attributes
BlockEnd
ComputeGlobal
ComputePerDof
ComputeSum
ConstrainPositions
ConstrainVelocities
IfBlockStart
UpdateContextState
WhileBlockStart
YSWeights
kT
The thermal energy in simtk.openmm.Quantity 
addComputeGlobal
(self, variable, expression) → int¶ Add a step to the integration algorithm that computes a global value.
Parameters:  variable : string
the global variable to store the computed value into
 expression : string
a mathematical expression involving only global variables. In each integration step, its value is computed and stored into the specified variable.
Returns:  int
the index of the step that was added

addComputePerDof
(self, variable, expression) → int¶ Add a step to the integration algorithm that computes a perDOF value.
Parameters:  variable : string
the perDOF variable to store the computed value into
 expression : string
a mathematical expression involving both global and perDOF variables. In each integration step, its value is computed for every degree of freedom and stored into the specified variable.
Returns:  int
the index of the step that was added

addComputeSum
(self, variable, expression) → int¶ Add a step to the integration algorithm that computes a sum over degrees of freedom.
Parameters:  variable : string
the global variable to store the computed value into
 expression : string
a mathematical expression involving both global and perDOF variables. In each integration step, its value is computed for every degree of freedom. Those values are then added together, and the sum is stored in the specified variable.
Returns:  int
the index of the step that was added

addComputeTemperatureDependentConstants
(compute_per_dof)¶ Wrap the ComputePerDof into an ifblock executed only when kT changes.
Parameters:  compute_per_dof : dict of str: str
A dictionary of variable_name: expression.

addConstrainPositions
(self) → int¶ Add a step to the integration algorithm that updates particle positions so all constraints are satisfied.
Returns:  int
the index of the step that was added

addConstrainVelocities
(self) → int¶ Add a step to the integration algorithm that updates particle velocities so the net velocity along all constraints is 0.
Returns:  int
the index of the step that was added

addGlobalVariable
(self, name, initialValue) → int¶ Define a new global variable.
Parameters:  name : string
the name of the variable
 initialValue : double
the variable will initially be set to this value
Returns:  int
the index of the variable that was added

addPerDofVariable
(self, name, initialValue) → int¶ Define a new perDOF variable.
Parameters:  name : string
the name of the variable
 initialValue : double
the variable will initially be set to this value for all degrees of freedom
Returns:  int
the index of the variable that was added

addTabulatedFunction
(self, name, function) → int¶ Add a tabulated function that may appear in expressions.
Parameters:  name : string
the name of the function as it appears in expressions
 function : TabulatedFunction *
a TabulatedFunction object defining the function. The TabulatedFunction should have been created on the heap with the “new” operator. The integrator takes over ownership of it, and deletes it when the integrator itself is deleted.
Returns:  int
the index of the function that was added

addUpdateContextState
(self) → int¶ Add a step to the integration algorithm that allows Forces to update the context state.
Returns:  int
the index of the step that was added

beginIfBlock
(self, condition) → int¶ Add a step which begins a new “if” block.
Parameters:  condition : string
a mathematical expression involving a comparison operator and global variables. All steps between this one and the end of the block are executed only if the condition is true.
Returns:  int
the index of the step that was added

beginWhileBlock
(self, condition) → int¶ Add a step which begins a new “while” block.
Parameters:  condition : string
a mathematical expression involving a comparison operator and global variables. All steps between this one and the end of the block are executed repeatedly as long as the condition remains true.
Returns:  int
the index of the step that was added

classmethod
deserialize_xml
(xml_serialization)¶ Shortcut to deserialize the XML representation and the restore interface.
Parameters:  xml_serialization : str
The XML representation of the OpenMM custom force/integrator.
Returns:  openmm_object
The deserialized OpenMM force/integrator with the original interface restored (if restorable).

endBlock
(self) → int¶ Add a step which marks the end of the most recently begun “if” or “while” block.
Returns:  int
the index of the step that was added

getComputationStep
(self, index)¶ Get the details of a computation step that has been added to the integration algorithm.
Parameters:  index : int
the index of the computation step to get
Returns:  type : ComputationType
the type of computation this step performs
 variable : string
the variable into which this step stores its result. If this step does not store a result in a variable, this will be an empty string.
 expression : string
the expression this step evaluates. If this step does not evaluate an expression, this will be an empty string.

getConstraintTolerance
(self) → double¶ Get the distance tolerance within which constraints are maintained, as a fraction of the constrained distance.

getGlobalVariable
(self, index) → double¶ Get the current value of a global variable.
Parameters:  index : int
the index of the variable to get
Returns:  double
the current value of the variable

getGlobalVariableByName
(self, name) → double¶ Get the current value of a global variable, specified by name.
Parameters:  name : string
the name of the variable to get
Returns:  double
the current value of the parameter

getGlobalVariableName
(self, index) → std::string const &¶ Get the name of a global variable.
Parameters:  index : int
the index of the variable to get
Returns:  string
the name of the variable

getKineticEnergyExpression
(self) → std::string const &¶ Get the expression to use for computing the kinetic energy. The expression is evaluated for every degree of freedom. Those values are then added together, and the sum is reported as the current kinetic energy.

getNumComputations
(self) → int¶ Get the number of computation steps that have been added.

getNumGlobalVariables
(self) → int¶ Get the number of global variables that have been defined.

getNumPerDofVariables
(self) → int¶ Get the number of perDOF variables that have been defined.

getNumTabulatedFunctions
(self) → int¶ Get the number of tabulated functions that have been defined.

getPerDofVariable
(self, index)¶ getPerDofVariable(self, index) > PyObject *

getPerDofVariableByName
(self, name)¶ Get the value of a perDOF variable, specified by name.
Parameters:  name : string
the name of the variable to get
Returns:  values : vector< Vec3 >
the values of the variable for all degrees of freedom are stored into this

getPerDofVariableName
(self, index) → std::string const &¶ Get the name of a perDOF variable.
Parameters:  index : int
the index of the variable to get
Returns:  string
the name of the variable

getRandomNumberSeed
(self) → int¶ Get the random number seed. See setRandomNumberSeed() for details.

getStepSize
(self) → double¶ Get the size of each time step, in picoseconds. If this integrator uses variable time steps, the size of the most recent step is returned.
Returns:  double
the step size, measured in ps

getTabulatedFunction
(self, index) → TabulatedFunction¶ getTabulatedFunction(self, index) > TabulatedFunction
Get a reference to a tabulated function that may appear in expressions.
Parameters:  index : int
the index of the function to get
Returns:  TabulatedFunction
the TabulatedFunction object defining the function

getTabulatedFunctionName
(self, index) → std::string const &¶ Get the name of a tabulated function that may appear in expressions.
Parameters:  index : int
the index of the function to get
Returns:  string
the name of the function as it appears in expressions

getTemperature
()¶ Return the temperature of the heat bath.
Returns:  temperature : unit.Quantity
The temperature of the heat bath in kelvins.

classmethod
is_restorable
(openmm_object)¶ Check if the custom integrator or force has a restorable interface.
Parameters:  openmm_object : object
The custom integrator or force to check.
Returns:  True if the object has a restorable interface, False otherwise.

classmethod
is_thermostated
(integrator)¶ Return true if the integrator is a ThermostatedIntegrator.
This can be useful when you only have access to the Context CustomIntegrator, which loses all extra function during serialization.
Parameters:  integrator : simtk.openmm.Integrator
The integrator to check.
Returns:  True if the original CustomIntegrator class inherited from
 ThermostatedIntegrator, False otherwise.

kT
¶ The thermal energy in simtk.openmm.Quantity

pretty_format
(as_list=False, step_types_to_highlight=None)¶ Generate a humanreadable version of each integrator step.
Parameters:  as_list : bool, optional, default=False
If True, a list of humanreadable strings will be returned. If False, these will be concatenated into a single humanreadable string.
 step_types_to_highlight : list of int, optional, default=None
If specified, these step types will be highlighted.
Returns:  readable_lines : list of str
A list of humanreadable versions of each step of the integrator

pretty_print
()¶ Prettyprint the computation steps of this integrator.

classmethod
restore_interface
(integrator)¶ Restore the original interface of a CustomIntegrator.
The function restore the methods of the original class that inherited from ThermostatedIntegrator. Return False if the interface could not be restored.
Parameters:  integrator : simtk.openmm.CustomIntegrator
The integrator to which add methods.
Returns:  True if the original class interface could be restored, False otherwise.

setConstraintTolerance
(self, tol)¶ Set the distance tolerance within which constraints are maintained, as a fraction of the constrained distance.

setGlobalVariable
(self, index, value)¶ Set the value of a global variable.
Parameters:  index : int
the index of the variable to set
 value : double
the new value of the variable

setGlobalVariableByName
(self, name, value)¶ Set the value of a global variable, specified by name.
Parameters:  name : string
the name of the variable to set
 value : double
the new value of the variable

setKineticEnergyExpression
(self, expression)¶ Set the expression to use for computing the kinetic energy. The expression is evaluated for every degree of freedom. Those values are then added together, and the sum is reported as the current kinetic energy.

setPerDofVariable
(self, index, values)¶ Set the value of a perDOF variable.
Parameters:  index : int
the index of the variable to set
 values : vector< Vec3 >
the new values of the variable for all degrees of freedom

setPerDofVariableByName
(self, name, values)¶ Set the value of a perDOF variable, specified by name.
Parameters:  name : string
the name of the variable to set
 values : vector< Vec3 >
the new values of the variable for all degrees of freedom

setRandomNumberSeed
(self, seed)¶ Set the random number seed. The precise meaning of this parameter is undefined, and is left up to each Platform to interpret in an appropriate way. It is guaranteed that if two simulations are run with different random number seeds, the sequence of random numbers will be different. On the other hand, no guarantees are made about the behavior of simulations that use the same seed. In particular, Platforms are permitted to use nondeterministic algorithms which produce different results on successive runs, even if those runs were initialized identically.
If seed is set to 0 (which is the default value assigned), a unique seed is chosen when a Context is created from this Force. This is done to ensure that each Context receives unique random seeds without you needing to set them explicitly.

setStepSize
(self, size)¶ Set the size of each time step, in picoseconds. If this integrator uses variable time steps, the effect of calling this method is undefined, and it may simply be ignored.
Parameters:  size : double
the step size, measured in ps

setTemperature
(temperature)¶ Set the temperature of the heat bath.
Parameters:  temperature : unit.Quantity
The new temperature of the heat bath (temperature units).

step
(self, steps)¶ Advance a simulation through time by taking a series of time steps.
Parameters:  steps : int
the number of time steps to take