IMP  2.4.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 
8 m.set_log_level(IMP.base.SILENT)
9 ps = []
10 # create 4 xyz particles
11 for i in range(0, 4):
12  p = IMP.kernel.Particle(m)
13  ps.append(p)
16 
17 # set the 0 particle as the reference particle for the others as
18 # they will get their positions from it
19 for i, p in enumerate(ps[1:]):
20  # the other 3 particles are all symmetric copies of the first
22  # the symmetry operation is rotation around the z axis
24  IMP.algebra.get_rotation_about_axis(IMP.algebra.get_basis_vector_3d(2),
25  3.14 / 2.0 * (
26  i + 1)),
27  IMP.algebra.Vector3D(0, 0, 0))
29  # set up a constraint for the one particle, if you have more than one with the same symmetry
30  # transform, you should use an IMP.container.SingletonsConstraint.
31  c = IMP.core.SingletonConstraint(sm, None, p)
32  m.add_score_state(c)
34  1)
35 m.add_restraint(r)
36 
37 d0 = IMP.core.XYZ(ps[0])
38 # print only optimize the main particle
39 d0.set_coordinates_are_optimized(True)
40 
42 opt.optimize(10)
43 print("score is ", m.evaluate(False))
44 for p in ps:
45  print(p.get_name(), IMP.core.XYZ(p).get_coordinates())