Package user_functions :: Module model_free
[hide private]
[frames] | no frames]

Source Code for Module user_functions.model_free

  1  ############################################################################### 
  2  #                                                                             # 
  3  # Copyright (C) 2003-2014 Edward d'Auvergne                                   # 
  4  #                                                                             # 
  5  # This file is part of the program relax (http://www.nmr-relax.com).          # 
  6  #                                                                             # 
  7  # This program is free software: you can redistribute it and/or modify        # 
  8  # it under the terms of the GNU General Public License as published by        # 
  9  # the Free Software Foundation, either version 3 of the License, or           # 
 10  # (at your option) any later version.                                         # 
 11  #                                                                             # 
 12  # This program is distributed in the hope that it will be useful,             # 
 13  # but WITHOUT ANY WARRANTY; without even the implied warranty of              # 
 14  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the               # 
 15  # GNU General Public License for more details.                                # 
 16  #                                                                             # 
 17  # You should have received a copy of the GNU General Public License           # 
 18  # along with this program.  If not, see <http://www.gnu.org/licenses/>.       # 
 19  #                                                                             # 
 20  ############################################################################### 
 21   
 22  # Module docstring. 
 23  """The model_free user function definitions for model-free analysis.""" 
 24   
 25  # Python module imports. 
 26  from os import sep 
 27   
 28  # relax module imports. 
 29  from graphics import ANALYSIS_IMAGE_PATH 
 30  from lib.text.gui import csa, local_tm, r, rex, s2, s2f, te, tf, ts 
 31  from specific_analyses.model_free.uf import create_model, delete, remove_tm, select_model 
 32  from user_functions.data import Uf_info; uf_info = Uf_info() 
 33  from user_functions.objects import Desc_container 
 34   
 35   
 36  # The user function class. 
 37  uf_class = uf_info.add_class('model_free') 
 38  uf_class.title = "Class for model-free analysis." 
 39  uf_class.menu_text = "&model_free" 
 40  uf_class.gui_icon = "relax.model-free" 
 41   
 42   
 43  # The model_free.create_model user function. 
 44  uf = uf_info.add_uf('model_free.create_model') 
 45  uf.title = "Create a model-free model." 
 46  uf.title_short = "Model-free model creation." 
 47  uf.display = True 
 48  uf.add_keyarg( 
 49      name = "model", 
 50      py_type = "str", 
 51      desc_short = "model name", 
 52      desc = "The new name of the model-free model." 
 53  ) 
 54  uf.add_keyarg( 
 55      name = "equation", 
 56      py_type = "str", 
 57      desc_short = "model-free equation", 
 58      desc = "The model-free equation.", 
 59      wiz_element_type = "combo", 
 60      wiz_combo_choices = [ 
 61          "Original model-free equation {S2, te}", 
 62          "Extended model-free equation {S2f, tf, S2, ts}", 
 63          "Extended model-free equation {S2f, tf, S2s, ts}" 
 64      ], 
 65      wiz_combo_data = [ 
 66          "mf_orig", 
 67          "mf_ext", 
 68          "mf_ext2" 
 69      ], 
 70      wiz_read_only = True 
 71  ) 
 72  uf.add_keyarg( 
 73      name = "params", 
 74      py_type = "str_list", 
 75      desc_short = "model-free parameters", 
 76      desc = "The array of parameter names of the model.", 
 77      wiz_element_type = "combo_list", 
 78      wiz_combo_choices = [ 
 79          "S2 - generalised order parameter (single motion)", 
 80          "te - effective correlation time (single motion)", 
 81          "S2f - generalised order parameter (faster motion)", 
 82          "S2s - generalised order parameter (slower motion)", 
 83          "tf - effective correlation time (faster motion)", 
 84          "ts - effective correlation time (slower motion)", 
 85          "Rex - chemical exchange relaxation", 
 86          "r - average bond length <r>", 
 87          "CSA - chemical shift anisotropy" 
 88      ], 
 89      wiz_combo_data = [ 
 90          "s2", 
 91          "te", 
 92          "s2f", 
 93          "s2s", 
 94          "tf", 
 95          "ts", 
 96          "rex", 
 97          "r", 
 98          "csa" 
 99      ], 
100      wiz_read_only = True 
101  ) 
102  uf.add_keyarg( 
103      name = "spin_id", 
104      py_type = "str", 
105      desc_short = "spin identification string", 
106      desc = "The spin identification string.", 
107      can_be_none = True 
108  ) 
109  # Description. 
110  uf.desc.append(Desc_container()) 
111  uf.desc[-1].add_paragraph("This user function should almost never be used.  It is provided for academic reasons for the study of old analyses and published results.  If you are looking for a normal model-free model, use the model_free.select_model user function instead.") 
112  # Model-free equation. 
113  uf.desc.append(Desc_container("Model-free equation")) 
114  uf.desc[-1].add_paragraph("The model-free equation can be one of the following:") 
115  uf.desc[-1].add_list_element("'mf_orig' selects the original model-free equations with parameters {S2, te}.") 
116  uf.desc[-1].add_list_element("'mf_ext' selects the extended model-free equations with parameters {S2f, tf, S2, ts}.") 
117  uf.desc[-1].add_list_element("'mf_ext2' selects the extended model-free equations with parameters {S2f, tf, S2s, ts}.") 
118  # Model-free parameters. 
119  uf.desc.append(Desc_container("Model-free parameters")) 
120  uf.desc[-1].add_paragraph("The following parameters are accepted for the original model-free equation:") 
121  uf.desc[-1].add_item_list_element("'s2'", " The square of the generalised order parameter.") 
122  uf.desc[-1].add_item_list_element("'te'", " The effective correlation time.") 
123  uf.desc[-1].add_paragraph("The following parameters are accepted for the extended model-free equation:") 
124  uf.desc[-1].add_item_list_element("'s2f'", "The square of the generalised order parameter of the faster motion.") 
125  uf.desc[-1].add_item_list_element("'tf'", " The effective correlation time of the faster motion.") 
126  uf.desc[-1].add_item_list_element("'s2'", " The square of the generalised order parameter S2 = S2f * S2s.") 
127  uf.desc[-1].add_item_list_element("'ts'", " The effective correlation time of the slower motion.") 
128  uf.desc[-1].add_paragraph("The following parameters are accepted for the extended 2 model-free equation:") 
129  uf.desc[-1].add_item_list_element("'s2f'", "The square of the generalised order parameter of the faster motion.") 
130  uf.desc[-1].add_item_list_element("'tf'", " The effective correlation time of the faster motion.") 
131  uf.desc[-1].add_item_list_element("'s2s'", "The square of the generalised order parameter of the slower motion.") 
132  uf.desc[-1].add_item_list_element("'ts'", " The effective correlation time of the slower motion.") 
133  uf.desc[-1].add_paragraph("The following parameters are accepted for all equations:") 
134  uf.desc[-1].add_item_list_element("'rex'", "The chemical exchange relaxation.") 
135  uf.desc[-1].add_item_list_element("'r'", "  The average bond length <r>.") 
136  uf.desc[-1].add_item_list_element("'csa'", "The chemical shift anisotropy.") 
137  # Spin identification string. 
138  uf.desc.append(Desc_container("Spin identification string")) 
139  uf.desc[-1].add_paragraph("If 'spin_id' is supplied then the model will only be created for the corresponding spins.  Otherwise the model will be created for all spins.") 
140  # Prompt examples. 
141  uf.desc.append(Desc_container("Prompt examples")) 
142  uf.desc[-1].add_paragraph("The following commands will create the model-free model 'm1' which is based on the original model-free equation and contains the single parameter 's2'.") 
143  uf.desc[-1].add_prompt("relax> model_free.create_model('m1', 'mf_orig', ['s2'])") 
144  uf.desc[-1].add_prompt("relax> model_free.create_model(model='m1', params=['s2'], equation='mf_orig')") 
145  uf.desc[-1].add_paragraph("The following commands will create the model-free model 'large_model' which is based on the extended model-free equation and contains the seven parameters 's2f', 'tf', 's2', 'ts', 'rex', 'csa', 'r'.") 
146  uf.desc[-1].add_prompt("relax> model_free.create_model('large_model', 'mf_ext', ['s2f', 'tf', 's2', 'ts', 'rex', 'csa', 'r'])") 
147  uf.desc[-1].add_prompt("relax> model_free.create_model(model='large_model', params=['s2f', 'tf', 's2', 'ts', 'rex', 'csa', 'r'], equation='mf_ext')") 
148  uf.backend = create_model 
149  uf.menu_text = "&create_model" 
150  uf.gui_icon = "oxygen.actions.list-add-relax-blue" 
151  uf.wizard_height_desc = 450 
152  uf.wizard_size = (1000, 750) 
153  uf.wizard_apply_button = False 
154  uf.wizard_image = ANALYSIS_IMAGE_PATH + 'model_free' + sep + 'model_free_200x200.png' 
155   
156   
157  # The model_free.delete user function. 
158  uf = uf_info.add_uf('model_free.delete') 
159  uf.title = "Delete all model-free data from the current data pipe." 
160  uf.title_short = "Model-free data deletion." 
161  uf.display = True 
162  # Description. 
163  uf.desc.append(Desc_container()) 
164  uf.desc[-1].add_paragraph("This will delete all of the model-free data - parameters, model, etc. - from the current data pipe.") 
165  # Prompt examples. 
166  uf.desc.append(Desc_container("Prompt examples")) 
167  uf.desc[-1].add_paragraph("To delete all model-free data, type:") 
168  uf.desc[-1].add_prompt("relax> model_free.delete()") 
169  uf.backend = delete 
170  uf.menu_text = "&delete" 
171  uf.gui_icon = "oxygen.actions.list-remove" 
172  uf.wizard_size = (600, 300) 
173  uf.wizard_apply_button = False 
174  uf.wizard_image = ANALYSIS_IMAGE_PATH + 'model_free' + sep + 'model_free_200x200.png' 
175   
176   
177  # The model_free.remove_tm user function. 
178  uf = uf_info.add_uf('model_free.remove_tm') 
179  uf.title = "Remove the local tm parameter from a model." 
180  uf.title_short = "Local tm parameter removal." 
181  uf.display = True 
182  uf.add_keyarg( 
183      name = "spin_id", 
184      py_type = "str", 
185      desc_short = "spin ID string", 
186      desc = "The spin identification string.", 
187      can_be_none = True 
188  ) 
189  # Description. 
190  uf.desc.append(Desc_container()) 
191  uf.desc[-1].add_paragraph("This function will remove the local tm parameter from the model-free parameter set.  If there is no local tm parameter within the set nothing will happen.") 
192  uf.desc[-1].add_paragraph("If no spin identification string is given, then the function will apply to all spins.") 
193  # Prompt examples. 
194  uf.desc.append(Desc_container("Prompt examples")) 
195  uf.desc[-1].add_paragraph("The following command will remove the parameter 'tm':") 
196  uf.desc[-1].add_prompt("relax> model_free.remove_tm()") 
197  uf.backend = remove_tm 
198  uf.menu_text = "&remove_tm" 
199  uf.gui_icon = "oxygen.actions.list-remove" 
200  uf.wizard_height_desc = 300 
201  uf.wizard_size = (700, 400) 
202  uf.wizard_apply_button = False 
203  uf.wizard_image = ANALYSIS_IMAGE_PATH + 'model_free' + sep + 'model_free_200x200.png' 
204   
205   
206  # The model_free.select_model user function. 
207  uf = uf_info.add_uf('model_free.select_model') 
208  uf.title = "Select a preset model-free model." 
209  uf.title_short = "Model-free model choice." 
210  uf.display = True 
211  uf.add_keyarg( 
212      name = "model", 
213      py_type = "str", 
214      desc_short = "preset model name", 
215      desc = "The name of the preset model.", 
216      wiz_element_type = "combo", 
217      wiz_combo_choices = [ 
218          "m0:  {}", 
219          "m1:  {%s}" % s2, 
220          "m2:  {%s, %s}" % (s2, te), 
221          "m3:  {%s, %s}" % (s2, rex), 
222          "m4:  {%s, %s, %s}" % (s2, te, rex), 
223          "m5:  {%s, %s, %s}" % (s2, s2f, ts), 
224          "m6:  {%s, %s, %s, %s}" % (s2, tf, s2f, ts), 
225          "m7:  {%s, %s, %s, %s}" % (s2, s2f, ts, rex), 
226          "m8:  {%s, %s, %s, %s, %s}" % (s2, tf, s2f, ts, rex), 
227          "m9:  {%s}" % rex, 
228          "", 
229          "tm0:  {%s}" % local_tm, 
230          "tm1:  {%s, %s}" % (local_tm, s2), 
231          "tm2:  {%s, %s, %s}" % (local_tm, s2, te), 
232          "tm3:  {%s, %s, %s}" % (local_tm, s2, rex), 
233          "tm4:  {%s, %s, %s, %s}" % (local_tm, s2, te, rex), 
234          "tm5:  {%s, %s, %s, %s}" % (local_tm, s2, s2f, ts), 
235          "tm6:  {%s, %s, %s, %s, %s}" % (local_tm, s2, tf, s2f, ts), 
236          "tm7:  {%s, %s, %s, %s, %s}" % (local_tm, s2, s2f, ts, rex), 
237          "tm8:  {%s, %s, %s, %s, %s, %s}" % (local_tm, s2, tf, s2f, ts, rex), 
238          "tm9:  {%s, %s}" % (local_tm, rex), 
239          "", 
240          "m10:  {%s}" % csa, 
241          "m11:  {%s, %s}" % (csa, s2), 
242          "m12:  {%s, %s, %s}" % (csa, s2, te), 
243          "m13:  {%s, %s, %s}" % (csa, s2, rex), 
244          "m14:  {%s, %s, %s, %s}" % (csa, s2, te, rex), 
245          "m15:  {%s, %s, %s, %s}" % (csa, s2, s2f, ts), 
246          "m16:  {%s, %s, %s, %s, %s}" % (csa, s2, tf, s2f, ts), 
247          "m17:  {%s, %s, %s, %s, %s}" % (csa, s2, s2f, ts, rex), 
248          "m18:  {%s, %s, %s, %s, %s, %s}" % (csa, s2, tf, s2f, ts, rex), 
249          "m19:  {%s, %s}" % (csa, rex), 
250          "", 
251          "tm10:  {%s, %s}" % (local_tm, csa), 
252          "tm11:  {%s, %s, %s}" % (local_tm, csa, s2), 
253          "tm12:  {%s, %s, %s, %s}" % (local_tm, csa, s2, te), 
254          "tm13:  {%s, %s, %s, %s}" % (local_tm, csa, s2, rex), 
255          "tm14:  {%s, %s, %s, %s, %s}" % (local_tm, csa, s2, te, rex), 
256          "tm15:  {%s, %s, %s, %s, %s}" % (local_tm, csa, s2, s2f, ts), 
257          "tm16:  {%s, %s, %s, %s, %s, %s}" % (local_tm, csa, s2, tf, s2f, ts), 
258          "tm17:  {%s, %s, %s, %s, %s, %s}" % (local_tm, csa, s2, s2f, ts, rex), 
259          "tm18:  {%s, %s, %s, %s, %s, %s, %s}" % (local_tm, csa, s2, tf, s2f, ts, rex), 
260          "tm19:  {%s, %s, %s}" % (local_tm, csa, rex), 
261          "", 
262          "m20:  {%s}" % r, 
263          "m21:  {%s, %s}" % (r, s2), 
264          "m22:  {%s, %s, %s}" % (r, s2, te), 
265          "m23:  {%s, %s, %s}" % (r, s2, rex), 
266          "m24:  {%s, %s, %s, %s}" % (r, s2, te, rex), 
267          "m25:  {%s, %s, %s, %s}" % (r, s2, s2f, ts), 
268          "m26:  {%s, %s, %s, %s, %s}" % (r, s2, tf, s2f, ts), 
269          "m27:  {%s, %s, %s, %s, %s}" % (r, s2, s2f, ts, rex), 
270          "m28:  {%s, %s, %s, %s, %s, %s}" % (r, s2, tf, s2f, ts, rex), 
271          "m29:  {%s, %s}" % (r, rex), 
272          "", 
273          "tm20:  {%s, %s}" % (local_tm, r), 
274          "tm21:  {%s, %s, %s}" % (local_tm, r, s2), 
275          "tm22:  {%s, %s, %s, %s}" % (local_tm, r, s2, te), 
276          "tm23:  {%s, %s, %s, %s}" % (local_tm, r, s2, rex), 
277          "tm24:  {%s, %s, %s, %s, %s}" % (local_tm, r, s2, te, rex), 
278          "tm25:  {%s, %s, %s, %s, %s}" % (local_tm, r, s2, s2f, ts), 
279          "tm26:  {%s, %s, %s, %s, %s, %s}" % (local_tm, r, s2, tf, s2f, ts), 
280          "tm27:  {%s, %s, %s, %s, %s, %s}" % (local_tm, r, s2, s2f, ts, rex), 
281          "tm28:  {%s, %s, %s, %s, %s, %s, %s}" % (local_tm, r, s2, tf, s2f, ts, rex), 
282          "tm29:  {%s, %s, %s}" % (local_tm, r, rex), 
283          "", 
284          "m30:  {%s, %s}" % (r, csa), 
285          "m31:  {%s, %s, %s}" % (r, csa, s2), 
286          "m32:  {%s, %s, %s, %s}" % (r, csa, s2, te), 
287          "m33:  {%s, %s, %s, %s}" % (r, csa, s2, rex), 
288          "m34:  {%s, %s, %s, %s, %s}" % (r, csa, s2, te, rex), 
289          "m35:  {%s, %s, %s, %s, %s}" % (r, csa, s2, s2f, ts), 
290          "m36:  {%s, %s, %s, %s, %s, %s}" % (r, csa, s2, tf, s2f, ts), 
291          "m37:  {%s, %s, %s, %s, %s, %s}" % (r, csa, s2, s2f, ts, rex), 
292          "m38:  {%s, %s, %s, %s, %s, %s, %s}" % (r, csa, s2, tf, s2f, ts, rex), 
293          "m39:  {%s, %s, %s}" % (r, csa, rex), 
294          "", 
295          "tm30:  {%s, %s, %s}" % (local_tm, r, csa), 
296          "tm31:  {%s, %s, %s, %s}" % (local_tm, r, csa, s2), 
297          "tm32:  {%s, %s, %s, %s, %s}" % (local_tm, r, csa, s2, te), 
298          "tm33:  {%s, %s, %s, %s, %s}" % (local_tm, r, csa, s2, rex), 
299          "tm34:  {%s, %s, %s, %s, %s, %s}" % (local_tm, r, csa, s2, te, rex), 
300          "tm35:  {%s, %s, %s, %s, %s, %s}" % (local_tm, r, csa, s2, s2f, ts), 
301          "tm36:  {%s, %s, %s, %s, %s, %s, %s}" % (local_tm, r, csa, s2, tf, s2f, ts), 
302          "tm37:  {%s, %s, %s, %s, %s, %s, %s}" % (local_tm, r, csa, s2, s2f, ts, rex), 
303          "tm38:  {%s, %s, %s, %s, %s, %s, %s, %s}" % (local_tm, r, csa, s2, tf, s2f, ts, rex), 
304          "tm39:  {%s, %s, %s, %s}" % (local_tm, r, csa, rex) 
305      ], 
306      wiz_combo_data = [ 
307          "m0", 
308          "m1", 
309          "m2", 
310          "m3", 
311          "m4", 
312          "m5", 
313          "m6", 
314          "m7", 
315          "m8", 
316          "m9", 
317          None, 
318          "tm0", 
319          "tm1", 
320          "tm2", 
321          "tm3", 
322          "tm4", 
323          "tm5", 
324          "tm6", 
325          "tm7", 
326          "tm8", 
327          "tm9", 
328          None, 
329          "m10", 
330          "m11", 
331          "m12", 
332          "m13", 
333          "m14", 
334          "m15", 
335          "m16", 
336          "m17", 
337          "m18", 
338          "m19", 
339          None, 
340          "tm10", 
341          "tm11", 
342          "tm12", 
343          "tm13", 
344          "tm14", 
345          "tm15", 
346          "tm16", 
347          "tm17", 
348          "tm18", 
349          "tm19", 
350          None, 
351          "m20", 
352          "m21", 
353          "m22", 
354          "m23", 
355          "m24", 
356          "m25", 
357          "m26", 
358          "m27", 
359          "m28", 
360          "m29", 
361          None, 
362          "tm20", 
363          "tm21", 
364          "tm22", 
365          "tm23", 
366          "tm24", 
367          "tm25", 
368          "tm26", 
369          "tm27", 
370          "tm28", 
371          "tm29", 
372          None, 
373          "m30", 
374          "m31", 
375          "m32", 
376          "m33", 
377          "m34", 
378          "m35", 
379          "m36", 
380          "m37", 
381          "m38", 
382          "m39", 
383          None, 
384          "tm30", 
385          "tm31", 
386          "tm32", 
387          "tm33", 
388          "tm34", 
389          "tm35", 
390          "tm36", 
391          "tm37", 
392          "tm38", 
393          "tm39" 
394      ], 
395      wiz_read_only = True 
396  ) 
397  uf.add_keyarg( 
398      name = "spin_id", 
399      py_type = "str", 
400      desc_short = "spin ID string", 
401      desc = "The spin identification string.", 
402      can_be_none = True 
403  ) 
404  # Description. 
405  uf.desc.append(Desc_container()) 
406  uf.desc[-1].add_paragraph("This allows a standard model-free model to be selected from a long list of models.") 
407  # The preset models. 
408  uf.desc.append(Desc_container("The preset models")) 
409  uf.desc[-1].add_paragraph("The standard preset model-free models are") 
410  uf.desc[-1].add_item_list_element("'m0'", "{},") 
411  uf.desc[-1].add_item_list_element("'m1'", "{S2},") 
412  uf.desc[-1].add_item_list_element("'m2'", "{S2, te},") 
413  uf.desc[-1].add_item_list_element("'m3'", "{S2, Rex},") 
414  uf.desc[-1].add_item_list_element("'m4'", "{S2, te, Rex},") 
415  uf.desc[-1].add_item_list_element("'m5'", "{S2f, S2, ts},") 
416  uf.desc[-1].add_item_list_element("'m6'", "{S2f, tf, S2, ts},") 
417  uf.desc[-1].add_item_list_element("'m7'", "{S2f, S2, ts, Rex},") 
418  uf.desc[-1].add_item_list_element("'m8'", "{S2f, tf, S2, ts, Rex},") 
419  uf.desc[-1].add_item_list_element("'m9'", "{Rex}.") 
420  uf.desc[-1].add_paragraph("The preset model-free models with optimisation of the CSA value are") 
421  uf.desc[-1].add_item_list_element("'m10'", "{CSA},") 
422  uf.desc[-1].add_item_list_element("'m11'", "{CSA, S2},") 
423  uf.desc[-1].add_item_list_element("'m12'", "{CSA, S2, te},") 
424  uf.desc[-1].add_item_list_element("'m13'", "{CSA, S2, Rex},") 
425  uf.desc[-1].add_item_list_element("'m14'", "{CSA, S2, te, Rex},") 
426  uf.desc[-1].add_item_list_element("'m15'", "{CSA, S2f, S2, ts},") 
427  uf.desc[-1].add_item_list_element("'m16'", "{CSA, S2f, tf, S2, ts},") 
428  uf.desc[-1].add_item_list_element("'m17'", "{CSA, S2f, S2, ts, Rex},") 
429  uf.desc[-1].add_item_list_element("'m18'", "{CSA, S2f, tf, S2, ts, Rex},") 
430  uf.desc[-1].add_item_list_element("'m19'", "{CSA, Rex}.") 
431  uf.desc[-1].add_paragraph("The preset model-free models with optimisation of the bond length are") 
432  uf.desc[-1].add_item_list_element("'m20'", "{r},") 
433  uf.desc[-1].add_item_list_element("'m21'", "{r, S2},") 
434  uf.desc[-1].add_item_list_element("'m22'", "{r, S2, te},") 
435  uf.desc[-1].add_item_list_element("'m23'", "{r, S2, Rex},") 
436  uf.desc[-1].add_item_list_element("'m24'", "{r, S2, te, Rex},") 
437  uf.desc[-1].add_item_list_element("'m25'", "{r, S2f, S2, ts},") 
438  uf.desc[-1].add_item_list_element("'m26'", "{r, S2f, tf, S2, ts},") 
439  uf.desc[-1].add_item_list_element("'m27'", "{r, S2f, S2, ts, Rex},") 
440  uf.desc[-1].add_item_list_element("'m28'", "{r, S2f, tf, S2, ts, Rex},") 
441  uf.desc[-1].add_item_list_element("'m29'", "{r, CSA, Rex}.") 
442  uf.desc[-1].add_paragraph("The preset model-free models with both optimisation of the bond length and CSA are") 
443  uf.desc[-1].add_item_list_element("'m30'", "{r, CSA},") 
444  uf.desc[-1].add_item_list_element("'m31'", "{r, CSA, S2},") 
445  uf.desc[-1].add_item_list_element("'m32'", "{r, CSA, S2, te},") 
446  uf.desc[-1].add_item_list_element("'m33'", "{r, CSA, S2, Rex},") 
447  uf.desc[-1].add_item_list_element("'m34'", "{r, CSA, S2, te, Rex},") 
448  uf.desc[-1].add_item_list_element("'m35'", "{r, CSA, S2f, S2, ts},") 
449  uf.desc[-1].add_item_list_element("'m36'", "{r, CSA, S2f, tf, S2, ts},") 
450  uf.desc[-1].add_item_list_element("'m37'", "{r, CSA, S2f, S2, ts, Rex},") 
451  uf.desc[-1].add_item_list_element("'m38'", "{r, CSA, S2f, tf, S2, ts, Rex},") 
452  uf.desc[-1].add_item_list_element("'m39'", "{r, CSA, Rex}.") 
453  uf.desc[-1].add_paragraph("Warning:  The models in the thirties range fail when using standard R1, R2, and NOE relaxation data.  This is due to the extreme flexibly of these models where a change in the parameter 'r' is compensated by a corresponding change in the parameter 'csa' and vice versa.") 
454  uf.desc.append(Desc_container("The preset local tm models")) 
455  uf.desc[-1].add_paragraph("Additional preset model-free models, which are simply extensions of the above models with the addition of a local tm parameter are:") 
456  uf.desc[-1].add_item_list_element("'tm0'", "{tm},") 
457  uf.desc[-1].add_item_list_element("'tm1'", "{tm, S2},") 
458  uf.desc[-1].add_item_list_element("'tm2'", "{tm, S2, te},") 
459  uf.desc[-1].add_item_list_element("'tm3'", "{tm, S2, Rex},") 
460  uf.desc[-1].add_item_list_element("'tm4'", "{tm, S2, te, Rex},") 
461  uf.desc[-1].add_item_list_element("'tm5'", "{tm, S2f, S2, ts},") 
462  uf.desc[-1].add_item_list_element("'tm6'", "{tm, S2f, tf, S2, ts},") 
463  uf.desc[-1].add_item_list_element("'tm7'", "{tm, S2f, S2, ts, Rex},") 
464  uf.desc[-1].add_item_list_element("'tm8'", "{tm, S2f, tf, S2, ts, Rex},") 
465  uf.desc[-1].add_item_list_element("'tm9'", "{tm, Rex}.") 
466  uf.desc[-1].add_paragraph("The preset model-free models with optimisation of the CSA value are") 
467  uf.desc[-1].add_item_list_element("'tm10'", "{tm, CSA},") 
468  uf.desc[-1].add_item_list_element("'tm11'", "{tm, CSA, S2},") 
469  uf.desc[-1].add_item_list_element("'tm12'", "{tm, CSA, S2, te},") 
470  uf.desc[-1].add_item_list_element("'tm13'", "{tm, CSA, S2, Rex},") 
471  uf.desc[-1].add_item_list_element("'tm14'", "{tm, CSA, S2, te, Rex},") 
472  uf.desc[-1].add_item_list_element("'tm15'", "{tm, CSA, S2f, S2, ts},") 
473  uf.desc[-1].add_item_list_element("'tm16'", "{tm, CSA, S2f, tf, S2, ts},") 
474  uf.desc[-1].add_item_list_element("'tm17'", "{tm, CSA, S2f, S2, ts, Rex},") 
475  uf.desc[-1].add_item_list_element("'tm18'", "{tm, CSA, S2f, tf, S2, ts, Rex},") 
476  uf.desc[-1].add_item_list_element("'tm19'", "{tm, CSA, Rex}.") 
477  uf.desc[-1].add_paragraph("The preset model-free models with optimisation of the bond length are") 
478  uf.desc[-1].add_item_list_element("'tm20'", "{tm, r},") 
479  uf.desc[-1].add_item_list_element("'tm21'", "{tm, r, S2},") 
480  uf.desc[-1].add_item_list_element("'tm22'", "{tm, r, S2, te},") 
481  uf.desc[-1].add_item_list_element("'tm23'", "{tm, r, S2, Rex},") 
482  uf.desc[-1].add_item_list_element("'tm24'", "{tm, r, S2, te, Rex},") 
483  uf.desc[-1].add_item_list_element("'tm25'", "{tm, r, S2f, S2, ts},") 
484  uf.desc[-1].add_item_list_element("'tm26'", "{tm, r, S2f, tf, S2, ts},") 
485  uf.desc[-1].add_item_list_element("'tm27'", "{tm, r, S2f, S2, ts, Rex},") 
486  uf.desc[-1].add_item_list_element("'tm28'", "{tm, r, S2f, tf, S2, ts, Rex},") 
487  uf.desc[-1].add_item_list_element("'tm29'", "{tm, r, CSA, Rex}.") 
488  uf.desc[-1].add_paragraph("The preset model-free models with both optimisation of the bond length and CSA are") 
489  uf.desc[-1].add_item_list_element("'tm30'", "{tm, r, CSA},") 
490  uf.desc[-1].add_item_list_element("'tm31'", "{tm, r, CSA, S2},") 
491  uf.desc[-1].add_item_list_element("'tm32'", "{tm, r, CSA, S2, te},") 
492  uf.desc[-1].add_item_list_element("'tm33'", "{tm, r, CSA, S2, Rex},") 
493  uf.desc[-1].add_item_list_element("'tm34'", "{tm, r, CSA, S2, te, Rex},") 
494  uf.desc[-1].add_item_list_element("'tm35'", "{tm, r, CSA, S2f, S2, ts},") 
495  uf.desc[-1].add_item_list_element("'tm36'", "{tm, r, CSA, S2f, tf, S2, ts},") 
496  uf.desc[-1].add_item_list_element("'tm37'", "{tm, r, CSA, S2f, S2, ts, Rex},") 
497  uf.desc[-1].add_item_list_element("'tm38'", "{tm, r, CSA, S2f, tf, S2, ts, Rex},") 
498  uf.desc[-1].add_item_list_element("'tm39'", "{tm, r, CSA, Rex}.") 
499  # Spin identification string. 
500  uf.desc.append(Desc_container("Spin identification string")) 
501  uf.desc[-1].add_paragraph("If 'spin_id' is supplied then the model will only be selected for the corresponding spins.  Otherwise the model will be selected for all spins.") 
502  # Prompt examples. 
503  uf.desc.append(Desc_container("Prompt examples")) 
504  uf.desc[-1].add_paragraph("To pick model 'm1' for all selected spins, type:") 
505  uf.desc[-1].add_prompt("relax> model_free.select_model('m1')") 
506  uf.desc[-1].add_prompt("relax> model_free.select_model(model='m1')") 
507  uf.backend = select_model 
508  uf.menu_text = "&select_model" 
509  uf.gui_icon = "oxygen.actions.list-add" 
510  uf.wizard_height_desc = 450 
511  uf.wizard_size = (1000, 750) 
512  uf.wizard_apply_button = False 
513  uf.wizard_image = ANALYSIS_IMAGE_PATH + 'model_free' + sep + 'model_free_200x200.png' 
514