IMP  2.1.0
The Integrative Modeling Platform
randomize_rigid_body.py
1 ## \example core/randomize_rigid_body.py
2 # This fragments shows how to either perturb or set the orientation of a rigid
3 # body randomly.
4 
5 import IMP.core
6 import IMP.algebra
7 import IMP
8 from IMP.algebra import ReferenceFrame3D
9 from IMP.algebra import Transformation3D
10 
11 m = IMP.kernel.Model()
13 rbd = IMP.core.RigidBody.setup_particle(p, ReferenceFrame3D())
15  IMP.algebra.get_unit_bounding_box_3d())
16 
17 # we don't yet have python code to generate a nearby rotation
19 transformation = Transformation3D(rotation, translation)
20 # Option 1:
21 # note, this overwrites the existing position
22 # The True is to transform the members now rather than wait for a
23 # score state
24 rbd.set_reference_frame(ReferenceFrame3D(transformation))
25 # Option 2:
26 # perturb the existing transformation
27 composed_tr = IMP.algebra.compose \
28  (rbd.get_reference_frame().get_transformation_to(),
29  transformation)
30 rbd.set_reference_frame(ReferenceFrame3D(composed_tr))
31 # Alternative to Option 2:
32 IMP.core.transform(rbd, transformation)
static RigidBody setup_particle(kernel::Model *m, ParticleIndex pi, kernel::ParticleIndexesAdaptor ps)
Definition: rigid_bodies.h:125
Rotation3D get_random_rotation_3d(const Rotation3D &center, double distance)
Pick a rotation at random near the provided one.
Vector3D get_random_vector_in(const Cylinder3D &c)
Generate a random vector in a cylinder with uniform density.
void transform(XYZ a, const algebra::Transformation3D &tr)
Apply a transformation to the particle.
Class to handle individual model particles.
See IMP.core for more information.
See IMP.algebra for more information.
Class for storing model, its restraints, constraints, and particles.