IMP logo
IMP Reference Guide  develop.731656d855,2020/02/16
The Integrative Modeling Platform
pmi/automatic.py
1 ## \example pmi/automatic.py
2 """This script shows how to use the BuildSystem macro to construct large systems with minimal code
3 """
4 
5 from __future__ import print_function
6 import IMP
7 import IMP.atom
8 import IMP.rmf
9 import IMP.pmi
10 import IMP.pmi.topology
11 import IMP.pmi.dof
12 import IMP.pmi.macros
13 import IMP.pmi.restraints
15 import tempfile,os
16 import sys
17 
18 IMP.setup_from_argv(sys.argv, "Automatic setup of a large system")
20  print("This example is too slow to test in debug mode - run without")
21  print("internal tests enabled, or without the --run-quick-test flag")
22  sys.exit(0)
23 
24 # This is the topology table format.
25 # It allows you to create many components in a simple way
26 # By default it sets up each molecule as a rigid body, filling in missing pieces with beads
27 # You can create multiple domains by specifying different segments, as in Rpb1 below
28 # You can also create copies of molecules by appending '.X' to the name, as in Rpb4 below
29 topology='''
30 |molecule_name|color|fasta_fn|fasta_id|pdb_fn|chain|residue_range|pdb_offset|bead_size|em_residues_per_gaussian|rigid_body|super_rigid_body|chain_of_super_rigid_bodies|
31 |Rpb1 |blue |1WCM.fasta|1WCM:A|1WCM_fitted.pdb|A|1,100 |0 |5|0 |1|1,2| |
32 |Rpb1 |cyan |1WCM.fasta|1WCM:A|BEADS |A|101,150|0 |5|0 |2|1,2| |
33 |Rpb2 |red |1WCM.fasta|1WCM:B|1WCM_fitted.pdb|B|1,END |0 |5|0 |3|1 | |
34 |Rpb3 |green |1WCM.fasta|1WCM:C|1WCM_fitted.pdb|C|1,END |0 |5|0 |4|1 | |
35 |Rpb4 |orange |1WCM.fasta|1WCM:D|1WCM_fitted.pdb|D|1,END |0 |5|0 |5|1,3| |
36 |Rpb4.1|yellow |1WCM.fasta|1WCM:D|1WCM_fitted.pdb|D|1,END |0 |5|0 |6|1,3| |
37 |Rpb4.2|salmon |1WCM.fasta|1WCM:D|1WCM_fitted.pdb|D|1,END |0 |5|0 |7|1,3| |
38 |Rpb5 |gold |1WCM.fasta|1WCM:E|BEADS | |1,50 | |5|0 |8|1 | |
39 |Rpb5 |pink |1WCM.fasta|1WCM:E|IDEAL_HELIX | |51,100 | |5|0 |8|1 | |
40 '''
41 
42 # Normally the topology table is kept in a text file but here we just write it to a temporary one
43 tf = tempfile.NamedTemporaryFile(delete=False, mode='w')
44 tf.write(topology)
45 tf.close()
46 
47 # The TopologyReader reads the text file, and the BuildSystem macro constructs it
48 mdl = IMP.Model()
49 reader = IMP.pmi.topology.TopologyReader(tf.name,
50  pdb_dir = IMP.pmi.get_example_path('data/'),
51  fasta_dir = IMP.pmi.get_example_path('data/'),
52  gmm_dir = IMP.pmi.get_example_path('data/'))
54 bs.add_state(reader) # note you can call this multiple times to create a multi-state system
55 hier, dof = bs.execute_macro()
56 
57 ###################### RESTRAINTS #####################
58 output_objects = [] # keep a list of functions that need to be reported
59 
60 # Connectivity keeps things connected along the backbone (ignores if inside same rigid body)
61 crs = []
62 moldict = bs.get_molecules()[0]
63 mols = []
64 for molname in moldict:
65  for mol in moldict[molname]:
67  cr.add_to_model()
68  output_objects.append(cr)
69  crs.append(cr)
70  mols.append(mol)
71 
72 # Excluded volume - automatically more efficient due to rigid bodies
74 evr.add_to_model()
75 output_objects.append(evr)
76 
77 
78 ###################### SAMPLING #####################
79 
80 
81 # mix it up so it looks cool
83 
84 # Quickly move all flexible beads into place
85 dof.optimize_flexible_beads(100)
86 
88  root_hier=hier,
89  monte_carlo_sample_objects=dof.get_movers(),
90  global_output_directory='auto_output/',
91  output_objects=output_objects,
92  monte_carlo_steps=10,
93  number_of_best_scoring_models=0,
94  number_of_frames=5)
95 rex.execute_macro()
96 
97 
98 
99 os.remove(tf.name)