Simple Brownian dynamics optimizer.
The particles to be optimized must have optimizable x,y,z attributes and a non-optimizable "Stokes radius"; this optimizer assumes the score to be energy in kcal/mol, the xyz coordinates to be in angstroms and the diffusion coefficent be in cm^2/s
Particles without optimized x,y,z and nonoptimized D are skipped.
Currently, rigid bodies are not supported. The necessary information can be found at the wikipedia.
BrownianDynamics uses a SimulationParameters particle to store the parameters of the simulation. Such a particle must be passed on creation. The BrownianDynamics object will at least see updates to the SimulationParamters particle which occur before the call to BrownianDynamics::optimize() or BrownianDynamics::simulate(), changing the the parameters during optimization has undefined results.
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.
Examples: rigid brownian dynamics
Inheritance diagram for IMP::atom::BrownianDynamics:Public Member Functions | |
| BrownianDynamics (Model *m) | |
| Create the optimizer. | |
| void | set_maximum_move (double ms) |
| void | set_use_stochastic_runge_kutta (bool tf) |
| IMP::atom::BrownianDynamics::BrownianDynamics | ( | Model * | m | ) |
Create the optimizer.
If sc is not null, that container will be used to find particles to move, otherwise the model will be searched.