IMP logo
IMP Reference Guide  develop.7400db2aee,2024/11/24
The Integrative Modeling Platform
pmi/symmetry.py
1 ## \example pmi/symmetry.py
2 """Clone molecules and use a symmetry constraint
3 """
4 
5 import IMP
6 import IMP.atom
7 import IMP.rmf
8 import IMP.pmi
9 import IMP.pmi.topology
10 import IMP.pmi.dof
11 import IMP.pmi.macros
13 import math
14 import sys
15 
16 IMP.setup_from_argv(sys.argv, "Symmetry constraint example")
17 
18 # Create System and State
19 mdl = IMP.Model()
21 st = s.create_state()
22 
23 # Create a simple all-bead molecule
24 mol = st.create_molecule("mymol", sequence='A'*10, chain_id='A')
25 mol.add_representation(mol, resolutions=[1])
26 
27 # Clone the molecule multiple times
28 # Calling molecule.create_clone makes a new molecule with the same name,
29 # sequence, initial structure, and choice of representations
30 # Note: another function, molecule.create_copy(), just copies the name
31 # and sequence
32 mols = [mol]
33 chains = 'BCDEFGHI'
34 for nc in range(7):
35  clone = mol.create_clone(chains[nc])
36  mols.append(clone)
37 
38 hier = s.build()
39 
40 # Create a symmetry constraint
41 # A constraint is invariant: IMP will automatically move all clones to
42 # match the reference
43 # If instead you want some more flexibility, consider
44 # IMP.pmi.restraints.stereochemistry.SymmetryRestraint
46 center = IMP.algebra.Vector3D([50, 0, 0])
47 for nc in range(7):
48  rot = IMP.algebra.get_rotation_about_axis([0, 0, 1], 2*math.pi*(nc+1)/8)
49  transform = IMP.algebra.get_rotation_about_point(center, rot)
50  dof.constrain_symmetry(mols[0], mols[nc+1], transform)
51 mdl.update() # propagates coordinates
52 
53 
54 # ########### Make stuff look cool with restraints ###########
55 
56 # set up the original molecule as flexible beads
57 dof.create_flexible_beads(mols[0])
58 
59 # Create a connectivity restraint for the first molecule
61 cr.add_to_model()
62 
63 # Create excluded volume for all particles
65  included_objects=mols)
66 evr.add_to_model()
67 
68 # Quickly move all flexible beads into place
69 dof.optimize_flexible_beads(100)
70 
71 # write a single-frame RMF to view the helix
73 out.init_rmf("example_symmetry.rmf3", hierarchies=[hier])
74 out.write_rmf("example_symmetry.rmf3")
Simplify creation of constraints and movers for an IMP Hierarchy.
Restraints for keeping correct stereochemistry.
Set of Python classes to create a multi-state, multi-resolution IMP hierarchy.
Strings setup_from_argv(const Strings &argv, std::string description, std::string positional_description, int num_positional)
Protocols for sampling structures and analyzing them.
Definition: macros.py:1
Represent the root node of the global IMP.atom.Hierarchy.
Transformation3D get_rotation_about_point(const Vector3D &point, const Rotation3D &rotation)
Generate a Transformation3D object from a rotation around a point.
Rotation3D get_rotation_about_axis(const Vector3D &axis, double angle)
Generate a Rotation3D object from a rotation around an axis.
Definition: Rotation3D.h:417
Class for storing model, its restraints, constraints, and particles.
Definition: Model.h:86
Class for easy writing of PDBs, RMFs, and stat files.
Definition: output.py:199
Create a restraint between consecutive TempResidue objects or an entire PMI Molecule object...
Create movers and set up constraints for PMI objects.
A class to create an excluded volume restraint for a set of particles at a given resolution.
VectorD< 3 > Vector3D
Definition: VectorD.h:408
Python classes to represent, score, sample and analyze models.
Functionality for loading, creating, manipulating and scoring atomic structures.
Support for the RMF file format for storing hierarchical molecular data and markup.