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