1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 """The molecule user function definitions."""
24
25
26 from graphics import WIZARD_IMAGE_PATH
27 from pipe_control import pipes
28 from pipe_control.mol_res_spin import ALLOWED_MOL_TYPES, copy_molecule, create_molecule, delete_molecule, display_molecule, get_molecule_ids, id_string_doc, name_molecule, type_molecule
29 from user_functions.data import Uf_info; uf_info = Uf_info()
30 from user_functions.objects import Desc_container
31
32
33
34 uf_class = uf_info.add_class('molecule')
35 uf_class.title = "Class for manipulating the molecule data."
36 uf_class.menu_text = "&molecule"
37 uf_class.gui_icon = "relax.molecule"
38
39
40
41 uf = uf_info.add_uf('molecule.copy')
42 uf.title = "Copy all data associated with a molecule."
43 uf.title_short = "Molecule copying."
44 uf.display = True
45 uf.add_keyarg(
46 name = "pipe_from",
47 basic_types = ["str"],
48 desc_short = "source data pipe",
49 desc = "The data pipe containing the molecule from which the data will be copied. This defaults to the current data pipe.",
50 wiz_element_type = 'combo',
51 wiz_combo_iter = pipes.pipe_names,
52 wiz_read_only = True,
53 can_be_none = True
54 )
55 uf.add_keyarg(
56 name = "mol_from",
57 basic_types = ["str"],
58 desc_short = "source molecule ID",
59 desc = "The name of the molecule from which to copy data from.",
60 wiz_element_type = 'combo',
61 wiz_combo_iter = get_molecule_ids,
62 wiz_read_only = True
63 )
64 uf.add_keyarg(
65 name = "pipe_to",
66 basic_types = ["str"],
67 desc_short = "destination data pipe",
68 desc = "The data pipe to copy the data to. This defaults to the current data pipe.",
69 wiz_element_type = 'combo',
70 wiz_combo_iter = pipes.pipe_names,
71 wiz_read_only = True,
72 can_be_none = True
73 )
74 uf.add_keyarg(
75 name = "mol_to",
76 basic_types = ["str"],
77 desc_short = "destination molecule ID",
78 desc = "The name of the new molecule. If left blank, the new molecule will have the same name as the old. This needs to be a molecule ID string, starting with '#'.",
79 can_be_none = True
80 )
81
82 uf.desc.append(Desc_container())
83 uf.desc[-1].add_paragraph("This will copy all the data associated with a molecule to a second molecule. This includes all residue and spin system information. The new molecule name must be unique in the destination data pipe.")
84 uf.desc.append(id_string_doc)
85
86 uf.desc.append(Desc_container("Prompt examples"))
87 uf.desc[-1].add_paragraph("To copy the molecule data from the molecule 'GST' to the new molecule 'wt-GST', type:")
88 uf.desc[-1].add_prompt("relax> molecule.copy('#GST', '#wt-GST')")
89 uf.desc[-1].add_prompt("relax> molecule.copy(mol_from='#GST', mol_to='#wt-GST')")
90 uf.desc[-1].add_paragraph("To copy the molecule data of the molecule 'Ap4Aase' from the data pipe 'm1' to 'm2', assuming the current data pipe is 'm1', type:")
91 uf.desc[-1].add_prompt("relax> molecule.copy(mol_from='#ApAase', pipe_to='m2')")
92 uf.desc[-1].add_prompt("relax> molecule.copy(pipe_from='m1', mol_from='#ApAase', pipe_to='m2', mol_to='#ApAase')")
93 uf.backend = copy_molecule
94 uf.menu_text = "©"
95 uf.gui_icon = "oxygen.actions.list-add"
96 uf.wizard_height_desc = 600
97 uf.wizard_size = (1000, 750)
98 uf.wizard_image = WIZARD_IMAGE_PATH + 'molecule.png'
99
100
101
102 uf = uf_info.add_uf('molecule.create')
103 uf.title = "Create a new molecule."
104 uf.title_short = "Molecule creation."
105 uf.display = True
106 uf.add_keyarg(
107 name = "mol_name",
108 basic_types = ["str"],
109 desc_short = "molecule name",
110 desc = "The name of the new molecule."
111 )
112 uf.add_keyarg(
113 name = "mol_type",
114 basic_types = ["str"],
115 desc_short = "molecule type",
116 desc = "The type of molecule.",
117 wiz_element_type = "combo",
118 wiz_combo_choices = ALLOWED_MOL_TYPES,
119 wiz_read_only = True,
120 can_be_none = True
121 )
122
123 uf.desc.append(Desc_container())
124 text = "This adds a new molecule data container to the relax data storage object. The same molecule name cannot be used more than once. The molecule type need not be specified. However, if given, it should be one of"
125 for i in range(len(ALLOWED_MOL_TYPES)-1):
126 text += " '%s'," % ALLOWED_MOL_TYPES[i]
127 text += " or '%s'." % ALLOWED_MOL_TYPES[-1]
128 uf.desc[-1].add_paragraph(text)
129
130 uf.desc.append(Desc_container("Prompt examples"))
131 uf.desc[-1].add_paragraph("To create the molecules 'Ap4Aase', 'ATP', and 'MgF4', type:")
132 uf.desc[-1].add_prompt("relax> molecule.create('Ap4Aase')")
133 uf.desc[-1].add_prompt("relax> molecule.create('ATP')")
134 uf.desc[-1].add_prompt("relax> molecule.create('MgF4')")
135 uf.backend = create_molecule
136 uf.menu_text = "c&reate"
137 uf.gui_icon = "oxygen.actions.list-add-relax-blue"
138 uf.wizard_size = (700, 500)
139 uf.wizard_image = WIZARD_IMAGE_PATH + 'molecule.png'
140
141
142
143 uf = uf_info.add_uf('molecule.delete')
144 uf.title = "Deleting molecules from the relax data store."
145 uf.title_short = "Molecule deletion."
146 uf.add_keyarg(
147 name = "mol_id",
148 basic_types = ["str"],
149 desc_short = "molecule ID string",
150 desc = "The molecule ID string.",
151 wiz_element_type = 'combo',
152 wiz_combo_iter = get_molecule_ids,
153 wiz_read_only = True
154 )
155
156 uf.desc.append(Desc_container())
157 uf.desc[-1].add_paragraph("This can be used to delete a single or sets of molecules from the relax data store. The molecule will be deleted from the current data pipe.")
158 uf.desc.append(id_string_doc)
159 uf.backend = delete_molecule
160 uf.menu_text = "&delete"
161 uf.gui_icon = "oxygen.actions.list-remove"
162 uf.wizard_height_desc = 550
163 uf.wizard_size = (900, 750)
164 uf.wizard_image = WIZARD_IMAGE_PATH + 'molecule.png'
165
166
167
168 uf = uf_info.add_uf('molecule.display')
169 uf.title = "Display the molecule information."
170 uf.title_short = "Molecule information."
171 uf.display = True
172 uf.add_keyarg(
173 name = "mol_id",
174 basic_types = ["str"],
175 desc_short = "molecule ID string",
176 desc = "The molecule ID string.",
177 wiz_element_type = 'combo',
178 wiz_combo_iter = get_molecule_ids,
179 wiz_read_only = True,
180 can_be_none = True
181 )
182 uf.desc.append(id_string_doc)
183 uf.backend = display_molecule
184 uf.menu_text = "dis&play"
185 uf.gui_icon = "oxygen.actions.document-preview"
186 uf.wizard_height_desc = 400
187 uf.wizard_size = (900, 600)
188 uf.wizard_apply_button = False
189 uf.wizard_image = WIZARD_IMAGE_PATH + 'molecule.png'
190
191
192
193 uf = uf_info.add_uf('molecule.name')
194 uf.title = "Name a molecule."
195 uf.add_keyarg(
196 name = "mol_id",
197 basic_types = ["str"],
198 desc_short = "molecule ID string",
199 desc = "The molecule ID string corresponding to one or more molecules.",
200 wiz_element_type = 'combo',
201 wiz_combo_iter = get_molecule_ids,
202 wiz_read_only = True,
203 can_be_none = True
204 )
205 uf.add_keyarg(
206 name = "name",
207 basic_types = ["str"],
208 desc_short = "new molecule name",
209 desc = "The new molecule name."
210 )
211 uf.add_keyarg(
212 name = "force",
213 default = False,
214 arg_type = "force flag",
215 desc_short = "force flag",
216 desc = "A flag which if True will cause the molecule to be renamed."
217 )
218
219 uf.desc.append(Desc_container())
220 uf.desc[-1].add_paragraph("This simply allows molecules to be named (or renamed).")
221
222 uf.desc.append(Desc_container("Prompt examples"))
223 uf.desc[-1].add_paragraph("To rename the molecule 'Ap4Aase' to 'Inhib Ap4Aase', type one of:")
224 uf.desc[-1].add_prompt("relax> molecule.name('#Ap4Aase', 'Inhib Ap4Aase', True)")
225 uf.desc[-1].add_prompt("relax> molecule.name(mol_id='#Ap4Aase', name='Inhib Ap4Aase', force=True)")
226 uf.desc[-1].add_paragraph("This assumes the molecule 'Ap4Aase' already exists.")
227 uf.desc.append(id_string_doc)
228 uf.backend = name_molecule
229 uf.menu_text = "&name"
230 uf.gui_icon = "oxygen.actions.edit-rename"
231 uf.wizard_height_desc = 550
232 uf.wizard_size = (1000, 720)
233 uf.wizard_image = WIZARD_IMAGE_PATH + 'molecule.png'
234
235
236
237 uf = uf_info.add_uf('molecule.type')
238 uf.title = "Set the molecule type."
239 uf.title_short = "Setting molecule type."
240 uf.add_keyarg(
241 name = "mol_id",
242 basic_types = ["str"],
243 desc_short = "molecule ID string",
244 desc = "The molecule ID string corresponding to one or more molecules.",
245 wiz_element_type = 'combo',
246 wiz_combo_iter = get_molecule_ids,
247 wiz_read_only = True,
248 can_be_none = True
249 )
250 uf.add_keyarg(
251 name = "type",
252 basic_types = ["str"],
253 desc_short = "molecule type",
254 desc = "The molecule type.",
255 wiz_element_type = "combo",
256 wiz_combo_choices = ALLOWED_MOL_TYPES,
257 wiz_read_only = True
258 )
259 uf.add_keyarg(
260 name = "force",
261 default = False,
262 arg_type = "force flag",
263 desc_short = "force flag",
264 desc = "A flag which if True will cause the molecule to type to be overwritten."
265 )
266
267 uf.desc.append(Desc_container())
268 uf.desc[-1].add_paragraph("This allows the type of the molecule to be specified. It can be one of:")
269 for i in range(len(ALLOWED_MOL_TYPES)-1):
270 uf.desc[-1].add_list_element("'%s'," % ALLOWED_MOL_TYPES[i])
271 uf.desc[-1].add_list_element("'%s'." % ALLOWED_MOL_TYPES[-1])
272
273 uf.desc.append(Desc_container("Prompt examples"))
274 uf.desc[-1].add_paragraph("To set the molecule 'Ap4Aase' to the 'protein' type, type one of:")
275 uf.desc[-1].add_prompt("relax> molecule.type('#Ap4Aase', 'protein', True)")
276 uf.desc[-1].add_prompt("relax> molecule.type(mol_id='#Ap4Aase', type='protein', force=True)")
277 uf.desc.append(id_string_doc)
278 uf.backend = type_molecule
279 uf.menu_text = "&type"
280 uf.gui_icon = "oxygen.actions.edit-rename"
281 uf.wizard_height_desc = 600
282 uf.wizard_size = (1000, 750)
283 uf.wizard_image = WIZARD_IMAGE_PATH + 'molecule.png'
284