IMP logo
IMP Reference Guide  develop.b3a5ae88fa,2024/04/30
The Integrative Modeling Platform
chain.py
1 ## \example kernel/chain.py
2 # This example shows how to set up an optimization involving several
3 # particles constrained to be connected in a loop. It uses non bonded
4 # lists and a variety of restraints.
5 
6 from __future__ import print_function
7 import IMP.atom
8 import IMP.core
9 import RMF
10 import IMP.container
11 import IMP.rmf
12 import sys
13 
14 IMP.setup_from_argv(sys.argv, "Chain example")
15 
16 # A trivial example that constructs a set of particles which are restrained
17 # to form a chain via bonds between successive particles. In addition
18 # the head and the tail of the chain are restrained to be close to one
19 # another.
20 
21 IMP.set_log_level(IMP.TERSE)
22 m = IMP.Model()
23 m.set_log_level(IMP.SILENT)
24 h = IMP.atom.Hierarchy.setup_particle(m, m.add_particle("root"))
25 # The particles in the chain
26 ps = IMP.core.create_xyzr_particles(m, 10, 1.0)
27 for p in ps:
28  # build a hierarchy with all the particles
29  h.add_child(IMP.atom.Hierarchy.setup_particle(p))
30  # things are expected to have mass
32 chain = IMP.container.ListSingletonContainer(m, ps, "chain")
33 
34 restraints = []
35 # create a spring between successive particles
38 chainr = IMP.container.PairsRestraint(hdps, bonds)
39 chainr.set_name("The chain restraint")
40 restraints.append(chainr)
41 
42 # Prevent non-bonded particles from penetrating one another
43 nbl = IMP.container.ClosePairContainer(chain, 0, 2)
44 bpc = IMP.container.ConsecutivePairFilter(bonds) # exclude existing bonds
45 nbl.add_pair_filter(bpc)
47  "excluded volume")
48 restraints.append(lr)
49 
50 # Tie the ends of the chain
52  (ps[0].get_particle_index(),
53  ps[-1].get_particle_index()))
54 tie.set_name("tie ends")
55 restraints.append(tie)
56 
57 s = IMP.core.MCCGSampler(m) # sample using MC and CG
58 for r in restraints:
59  # set a criteria for what makes a good score
60  r.set_maximum_score(.1)
61 s.set_scoring_function(restraints)
62 s.set_number_of_attempts(10)
63 
64 confs = s.create_sample()
65 print("Found", confs.get_number_of_configurations(), "configurations")
66 fh = RMF.create_rmf_file("solutions.rmfz")
68 for i in range(0, confs.get_number_of_configurations()):
69  confs.load_configuration(i)
70  IMP.rmf.save_frame(fh, str(i))
RMF::FrameID save_frame(RMF::FileHandle file, std::string name="")
Save the current state of the linked objects as a new RMF frame.
Strings setup_from_argv(const Strings &argv, std::string description, std::string positional_description, int num_positional)
Various classes to hold sets of particles.
XYZRs create_xyzr_particles(Model *m, unsigned int num, Float radius, Float box_side=10)
Create a set of particles with random coordinates.
A container which contains all consecutive particle pairs from an input list.
Return all close unordered pairs of particles taken from the SingletonContainer.
Score distance between two particle centers using a harmonic function.
Class for storing model, its restraints, constraints, and particles.
Definition: Model.h:86
static Hierarchy setup_particle(Model *m, ParticleIndex pi, ParticleIndexesAdaptor children=ParticleIndexesAdaptor())
Create a Hierarchy of level t by adding the needed attributes.
void add_hierarchy(RMF::FileHandle fh, atom::Hierarchy hs)
Store a list of ParticleIndexes.
static Mass setup_particle(Model *m, ParticleIndex pi, Float mass)
Definition: Mass.h:48
A simple sampler.
Definition: MCCGSampler.h:40
void set_log_level(LogLevel l)
Set the current global log level.
Basic functionality that is expected to be used by a wide variety of IMP users.
Applies a PairScore to a Pair.
Definition: PairRestraint.h:31
Functionality for loading, creating, manipulating and scoring atomic structures.
Support for the RMF file format for storing hierarchical molecular data and markup.
Applies a PairScore to each Pair in a list.