IMP logo
IMP Reference Guide  2.15.0
The Integrative Modeling Platform
core/symmetry.py

Show how to use the code in core to enforce symmetry.

1 ## \example core/symmetry.py
2 # Show how to use the code in core to enforce symmetry.
3 
4 import IMP.core
5 import IMP.container
6 import sys
7 
8 IMP.setup_from_argv(sys.argv, "symmetry example")
9 
10 m = IMP.Model()
11 m.set_log_level(IMP.SILENT)
12 ps = []
13 # create 4 xyz particles
14 for i in range(0, 4):
15  p = IMP.Particle(m)
16  ps.append(p)
19 
20 # set the 0 particle as the reference particle for the others as
21 # they will get their positions from it
22 for i, p in enumerate(ps[1:]):
23  # the other 3 particles are all symmetric copies of the first
25  # the symmetry operation is rotation around the z axis
27  IMP.algebra.get_rotation_about_axis(IMP.algebra.get_basis_vector_3d(2),
28  3.14 / 2.0 * (
29  i + 1)),
30  IMP.algebra.Vector3D(0, 0, 0))
32  # set up a constraint for the one particle, if you have more than one with the same symmetry
33  # transform, you should use an IMP.container.SingletonsConstraint.
34  c = IMP.core.SingletonConstraint(sm, None, m, p)
35  m.add_score_state(c)
39 
40 d0 = IMP.core.XYZ(ps[0])
41 # print only optimize the main particle
42 d0.set_coordinates_are_optimized(True)
43 
45 opt.set_scoring_function(sf)
46 opt.optimize(10)
47 print("score is ", sf.evaluate(False))
48 for p in ps:
49  print(p.get_name(), IMP.core.XYZ(p).get_coordinates())