IMP
2.3.1
The Integrative Modeling Platform
IMP Mainpage
Modules
Applications
Related Pages
Groups
Classes
Files
Examples
Indexes
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
7
m =
IMP.kernel.Model
()
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)
14
d =
IMP.core.XYZ.setup_particle
(p,
IMP.algebra.Vector3D
(.5, 0, 0))
15
IMP.core.XYZR.setup_particle
(p, 1)
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
21
IMP.core.Reference.setup_particle
(p, ps[0])
22
# the symmetry operation is rotation around the z axis
23
tr =
IMP.algebra.Transformation3D
(
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))
28
sm =
IMP.core.TransformationSymmetry
(tr)
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)
33
r =
IMP.core.ExcludedVolumeRestraint
(
IMP.container.ListSingletonContainer
(ps),
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
41
opt =
IMP.core.ConjugateGradients
(m)
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()