IMP Reference Guide
2.17.0
The Integrative Modeling Platform
|
Simple Brownian dynamics simulator. More...
#include <IMP/atom/BrownianDynamics.h>
Simple Brownian dynamics simulator.
This is an implementation of a Brownian Dynamics simulator.
Input particles and score
Each optimized particle must have x,y,z attributes that are optimizable. In addition, each optimized particle must be decorated with the Diffusion decorator. Optionally, the RigidBodyDiffusion decorator can be used to specify a rotational diffusion coefficient for core::RigidBody particles. The optimizer assumes the scoring function to be energy in kcal/mol, and the xyz coordinates to be in angstroms and the diffusion coefficient of each particle be in \(A^2/fs\) (or \(Radian^2/fs\) for rotational diffusion coefficient). Particles without optimized x,y,z and nonoptimized D are skipped.
The optimizer can either automatically determine which particles to use from the model or be passed a SingletonContainer for the particles. If such a container is passed, particles added to it during optimization state updates are handled properly.
Simulation
At each simulation time step, each particle is translated in the direction of the sum of a random diffusion vector and the gradient of the scoring function (force field) at the particle coordinates. The translation is proportional to the particle diffusion coefficient, the time step size, and the inverse of kT. Note that particle masses are not considered, only their diffusion coefficients.
Similarly, rigid bodies are rotated by the sum of a random torque and a force field torque, proportionally to the rotational diffusion coefficient and the time step size, and inversely proportional to kT.
Time step
The time step is always equal precisely to Simulator::get_maximum_time_step() when using either Simulator::simulate() or Optimizer::optimize()
For more information and a demonstration of using this class, see the Brownian dynamics tutorial.
Definition at line 80 of file BrownianDynamics.h.
Public Member Functions | |
BrownianDynamics (Model *m, std::string name="BrownianDynamics%1%", double wave_factor=1.0, unsigned int random_pool_size=10000) | |
Create the optimizer. More... | |
virtual std::string | get_type_name () const override |
virtual ::IMP::VersionInfo | get_version_info () const override |
Get information about the module and version of the object. More... | |
void | set_maximum_move (double ms_in_A) |
sets the maximum move in A along either x,y or z axes More... | |
void | set_use_stochastic_runge_kutta (bool tf) |
Set whether to use the stochastic Runge Kutta scheme. More... | |
Public Member Functions inherited from IMP::atom::Simulator | |
Simulator (Model *m, std::string name="Simulator %1%", double wave_factor=1.0) | |
double | get_current_time () const |
double | get_kt () const |
ParticleIndexes | get_simulation_particle_indexes () const |
ParticlesTemp | get_simulation_particles () const |
Returns the set of particles used in the simulation. More... | |
double | get_temperature () const |
Return the simulator temperature in kelvin. More... | |
void | set_current_time (double ct) |
Sets the current simulation time in femtoseconds to ct. More... | |
void | set_temperature (double d) |
Set the temperature of the simulator to d in kelvin units. More... | |
double | simulate (double time_in_fs) |
Simulate for a given time in fs. More... | |
double | simulate_wave (double time_in_fs, double max_time_step_factor=10.0, double base=1.5) |
void | set_maximum_time_step (double ts) |
double | get_maximum_time_step () const |
Get the maximum allowed time step in fs. More... | |
double | get_last_time_step () const |
void | remove_particle (Particle *d) |
void | remove_particles (const Particles &d) |
void | set_particles (const Particles &ps) |
void | set_particles_order (const Particles &objs) |
unsigned int | add_particle (Particle *obj) |
void | add_particles (const Particles &objs) |
void | clear_particles () |
unsigned int | get_number_of_particles () const |
bool | get_has_particles () |
Particle * | get_particle (unsigned int i) const |
Particles | get_particles () const |
void | reserve_particles (unsigned int sz) |
Public Member Functions inherited from IMP::Optimizer | |
Optimizer (Model *m, std::string name="Optimizer %1%") | |
double | get_last_score () const |
Return the score found in the last evaluate. More... | |
ScoringFunction * | get_scoring_function () const |
Return the scoring function that is being used. More... | |
bool | get_stop_on_good_score () const |
double | optimize (unsigned int max_steps) |
Optimize the model for up to max_steps iterations. More... | |
virtual void | set_scoring_function (ScoringFunctionAdaptor sf) |
Set the scoring function to use. More... | |
void | set_stop_on_good_score (bool tf) |
void | remove_optimizer_state (OptimizerState *d) |
void | remove_optimizer_states (const OptimizerStates &d) |
void | set_optimizer_states (const OptimizerStates &ps) |
void | set_optimizer_states_order (const OptimizerStates &objs) |
unsigned int | add_optimizer_state (OptimizerState *obj) |
void | add_optimizer_states (const OptimizerStates &objs) |
void | clear_optimizer_states () |
unsigned int | get_number_of_optimizer_states () const |
bool | get_has_optimizer_states () |
OptimizerState * | get_optimizer_state (unsigned int i) const |
OptimizerStates | get_optimizer_states () const |
void | reserve_optimizer_states (unsigned int sz) |
Public Member Functions inherited from IMP::ModelObject | |
ModelObject (Model *m, std::string name) | |
bool | get_has_dependencies () const |
Return whether this object has dependencies computed. More... | |
bool | get_has_required_score_states () const |
Return whether score states are computed. More... | |
ModelObjectsTemp | get_inputs () const |
ModelObjectsTemps | get_interactions () const |
Get the interacting sets induced by this ModelObject. More... | |
Model * | get_model () const |
ModelObjectsTemp | get_outputs () const |
const ScoreStatesTemp & | get_required_score_states () const |
Get the score states that are ancestors of this in the dependency graph. More... | |
void | set_has_dependencies (bool tf) |
Either invalidate the dependencies or ensure they are correct. More... | |
void | set_has_required_score_states (bool tf) |
Compute the required score states. More... | |
Public Member Functions inherited from IMP::Object | |
virtual void | clear_caches () |
CheckLevel | get_check_level () const |
LogLevel | get_log_level () const |
void | set_check_level (CheckLevel l) |
void | set_log_level (LogLevel l) |
Set the logging level used in this object. More... | |
void | set_was_used (bool tf) const |
void | show (std::ostream &out=std::cout) const |
const std::string & | get_name () const |
void | set_name (std::string name) |
Protected Member Functions | |
virtual void | do_advance_chunk (double dtfs, double ikt, const ParticleIndexes &ps, unsigned int begin, unsigned int end) |
advances a chunk of ps from index begin to end More... | |
virtual double | do_step (const ParticleIndexes &sc, double dt_fs) override |
Calls do_advance_chunk() to advance ps in chunks. More... | |
algebra::Vector3D const & | get_force (unsigned int i) const |
get the force felt on particle i in kCal/mol/A More... | |
algebra::Vector3Ds const & | get_forces () const |
get the force vectors felt on each particle in kCal/mol/A More... | |
virtual bool | get_is_simulation_particle (ParticleIndex p) const override |
Return true if the passed particle is appropriate for the simulation. More... | |
bool | get_is_srk () const |
double | get_max_step () const |
double | get_sample (double sigma) |
void | reset_random_pool () |
regenerate internal cached pool of random numbers More... | |
void | set_force (unsigned int i, algebra::Vector3D const &f) |
set the force felt on particle i to f More... | |
virtual void | setup (const ParticleIndexes &ps) override |
a set of setup operations before a series of simulation steps More... | |
Protected Member Functions inherited from IMP::atom::Simulator | |
virtual Float | do_optimize (unsigned int max_steps) override |
override this function to do actual optimization More... | |
virtual double | do_simulate (double time) |
virtual double | do_simulate_wave (double time_in_fs, double max_time_step_factor=10.0, double base=1.5) |
Protected Member Functions inherited from IMP::Optimizer | |
virtual ModelObjectsTemp | do_get_inputs () const override |
virtual ModelObjectsTemp | do_get_outputs () const override |
don't return anything here to avoid pointless dependencies More... | |
ModelObjectsTemp | get_optimizer_state_inputs () const |
void | update_states () const |
Update optimizer states, should be called at each successful step. More... | |
Protected Member Functions inherited from IMP::ModelObject | |
virtual ModelObjectsTemps | do_get_interactions () const |
virtual void | handle_set_has_required_score_states (bool) |
Protected Member Functions inherited from IMP::Object | |
Object (std::string name) | |
Construct an object with the given name. More... | |
virtual void | do_destroy () |
IMP::atom::BrownianDynamics::BrownianDynamics | ( | Model * | m, |
std::string | name = "BrownianDynamics%1%" , |
||
double | wave_factor = 1.0 , |
||
unsigned int | random_pool_size = 10000 |
||
) |
Create the optimizer.
If sc is not null, that container will be used to find particles to move, otherwise the model will be searched.
m | model associated with bd |
name | name of bd object |
wave_factor | for wave step function, see Simulator object, if >1.001 or so, creates a wave of time steps that are larger by up to wave_factor from formal maximal time step |
random_pool_size | number of random numbers in internal pool used to accelerate random number generation. Memory requirement scales accordingly. |
|
protectedvirtual |
advances a chunk of ps from index begin to end
dtfs | time step in femtoseconds |
ikt | inverse kT for current chunk step |
ps | particle indexes to advance |
begin | beginning index of chunk of ps |
end | end index of chunk of ps |
Reimplemented in IMP::atom::BrownianDynamicsTAMD, and IMP::npctransport::BrownianDynamicsTAMDWithSlabSupport.
|
overrideprotectedvirtual |
Calls do_advance_chunk() to advance ps in chunks.
sc | particles to simulate in this step |
dt_fs | step size in femtoseconds |
Implements IMP::atom::Simulator.
|
protected |
get the force felt on particle i in kCal/mol/A
Definition at line 183 of file BrownianDynamics.h.
|
protected |
get the force vectors felt on each particle in kCal/mol/A
Definition at line 179 of file BrownianDynamics.h.
|
overrideprotectedvirtual |
Return true if the passed particle is appropriate for the simulation.
Implements IMP::atom::Simulator.
|
protected |
returns true if implementing the Stochastic Runga-Kutta Brownian Dynamics variant
Definition at line 155 of file BrownianDynamics.h.
|
protected |
returns the maximal step size allowed in this simulation in A along x, y or z axes
Definition at line 151 of file BrownianDynamics.h.
|
protected |
returns a normally distributed sample with mean zero and std-dev sigma
Definition at line 163 of file BrownianDynamics.h.
|
overridevirtual |
Get information about the module and version of the object.
Reimplemented from IMP::Object.
Definition at line 116 of file BrownianDynamics.h.
|
protected |
regenerate internal cached pool of random numbers
|
protected |
set the force felt on particle i to f
Definition at line 174 of file BrownianDynamics.h.
void IMP::atom::BrownianDynamics::set_maximum_move | ( | double | ms_in_A | ) |
sets the maximum move in A along either x,y or z axes
Definition at line 111 of file BrownianDynamics.h.
void IMP::atom::BrownianDynamics::set_use_stochastic_runge_kutta | ( | bool | tf | ) |
Set whether to use the stochastic Runge Kutta scheme.
Definition at line 114 of file BrownianDynamics.h.
|
overrideprotectedvirtual |
a set of setup operations before a series of simulation steps
Reimplemented from IMP::atom::Simulator.