IMP  2.1.0
The Integrative Modeling Platform
symmetry/RigidBodyMover.h
Go to the documentation of this file.
1 /**
2  * \file symmetry/RigidBodyMover.h
3  * \brief A mover that keeps a rigid body in a box
4  *
5  * Copyright 2013 IMP Inventors. All rights reserved.
6  *
7  */
8 
9 #ifndef IMPSYMMETRY_RIGID_BODY_MOVER_H
10 #define IMPSYMMETRY_RIGID_BODY_MOVER_H
11 
12 #include "symmetry_config.h"
13 #include <IMP/core/MonteCarlo.h>
15 #include <IMP/algebra/Vector3D.h>
17 #include <IMP/SingletonContainer.h>
18 #include <IMP/core/rigid_bodies.h>
19 
20 IMPSYMMETRY_BEGIN_NAMESPACE
21 
22 //! Move a rigid body and keep it in the primitive cell of a periodic lattice
23 class IMPSYMMETRYEXPORT RigidBodyMover : public core::MonteCarloMover
24 {
25 public:
26  /** The rigid body is rotated and translated to move
27  \param[in] d is the master rigid body decorator
28  \param[in] ps are the slave particles
29  \param[in] max_tr is the maximum translation during a step
30  \param[in] max_ang is the maximum rotation angle in radians
31  \param[in] ctrs is a list of all cell centers
32  \param[in] trs is the list of transformations from primitive to all cells
33  */
36 
37  protected:
38  virtual kernel::ModelObjectsTemp do_get_inputs() const IMP_OVERRIDE;
39  virtual core::MonteCarloMoverResult do_propose() IMP_OVERRIDE;
40  virtual void do_reject() IMP_OVERRIDE;
42 private:
43  core::RigidBody d_;
45  Float max_tr_;
46  Float max_ang_;
47  algebra::Vector3Ds ctrs_;
49  kernel::Particles ps_norb_;
50  std::vector<core::RigidBody> rbs_;
52  algebra::Vector3Ds oldcoords_;
54 
56  std::vector<core::RigidBody> get_rigid_bodies(kernel::Particles ps);
57 };
58 
59 IMPSYMMETRY_END_NAMESPACE
60 
61 #endif /* IMPSYMMETRY_RIGID_BODY_MOVER_H */
Simple 3D transformation class.
Move a rigid body and keep it in the primitive cell of a periodic lattice.
Import IMP/kernel/SingletonContainer.h in the namespace.
Simple Monte Carlo optimizer.
ParticlesTemp get_particles(kernel::Model *m, const ParticleIndexes &ps)
virtual void do_reject()=0
Implement reset_proposed_move()
A base class for classes which perturb particles.
functionality for defining rigid bodies
The base class for movers for MC optimization.
virtual MonteCarloMoverResult do_propose()=0
Implement propose_move()
#define IMP_OBJECT_METHODS(Name)
Define the basic things needed by any Object.
Simple 3D transformation class.
virtual ModelObjectsTemp do_get_inputs() const =0
double Float
Basic floating-point value (could be float, double...)
Definition: base/types.h:20
Simple 3D vector class.
A decorator for a rigid body.
Definition: rigid_bodies.h:75