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