Package user_functions :: Module relax_data'
[hide private]
[frames] | no frames]

Source Code for Module user_functions.relax_data'

  1  ############################################################################### 
  2  #                                                                             # 
  3  # Copyright (C) 2003-2012 Edward d'Auvergne                                   # 
  4  #                                                                             # 
  5  # This file is part of the program relax.                                     # 
  6  #                                                                             # 
  7  # relax 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 2 of the License, or           # 
 10  # (at your option) any later version.                                         # 
 11  #                                                                             # 
 12  # relax 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 relax; if not, write to the Free Software                        # 
 19  # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA   # 
 20  #                                                                             # 
 21  ############################################################################### 
 22   
 23  # Module docstring. 
 24  """The relax_data user function definitions.""" 
 25   
 26  # Python module imports. 
 27  from os import sep 
 28  import wx 
 29   
 30  # relax module imports. 
 31  from generic_fns import pipes, relax_data 
 32  from graphics import WIZARD_IMAGE_PATH 
 33  from user_functions.data import Uf_info; uf_info = Uf_info() 
 34  from user_functions.objects import Desc_container 
 35   
 36   
 37  # The user function class. 
 38  uf_class = uf_info.add_class('relax_data') 
 39  uf_class.title = "Class for manipulating R1, R2, and NOE relaxation data." 
 40  uf_class.menu_text = "&relax_data" 
 41  uf_class.gui_icon = "relax.fid" 
 42   
 43   
 44  # The relax_data.back_calc user function. 
 45  uf = uf_info.add_uf('relax_data.back_calc') 
 46  uf.title = "Back calculate the relaxation data at the given frequency." 
 47  uf.title_short = "Relaxation data back calculation." 
 48  uf.add_keyarg( 
 49      name = "ri_id", 
 50      py_type = "str", 
 51      desc_short = "relaxation ID string", 
 52      desc = "The relaxation data ID string.", 
 53      can_be_none = True 
 54  ) 
 55  uf.add_keyarg( 
 56      name = "ri_type", 
 57      py_type = "str", 
 58      desc_short = "relaxation type", 
 59      desc = "The relaxation data type, ie 'R1', 'R2', or 'NOE'.", 
 60      wiz_element_type = "combo", 
 61      wiz_combo_choices = ["R1", "R2", "NOE"], 
 62      wiz_read_only = True, 
 63      can_be_none = True 
 64  ) 
 65  uf.add_keyarg( 
 66      name = "frq", 
 67      py_type = "num", 
 68      desc_short = "frequency", 
 69      desc = "The spectrometer frequency in Hz.", 
 70      can_be_none = True 
 71  ) 
 72  # Description. 
 73  uf.desc.append(Desc_container()) 
 74  uf.desc[-1].add_paragraph("This allows relaxation data of the given type and frequency to be back calculated from the model parameter values.  If the relaxation data ID, type and frequency are not given, then relaxation data matching that currently loaded in the relax data store will be back-calculated.") 
 75  uf.backend = relax_data.back_calc 
 76  uf.menu_text = "&back_calc" 
 77  uf.gui_icon = "oxygen.categories.applications-education" 
 78  uf.wizard_image = WIZARD_IMAGE_PATH + 'fid.png' 
 79   
 80   
 81  # The relax_data.copy user function. 
 82  uf = uf_info.add_uf('relax_data.copy') 
 83  uf.title = "Copy relaxation data from one pipe to another." 
 84  uf.title_short = "Relaxation data copying." 
 85  uf.add_keyarg( 
 86      name = "pipe_from", 
 87      py_type = "str", 
 88      desc_short = "source data pipe", 
 89      desc = "The name of the pipe to copy the relaxation data from.", 
 90      wiz_element_type = 'combo', 
 91      wiz_combo_iter = pipes.pipe_names, 
 92      wiz_read_only = True, 
 93      can_be_none = True 
 94  ) 
 95  uf.add_keyarg( 
 96      name = "pipe_to", 
 97      py_type = "str", 
 98      desc_short = "destination data pipe", 
 99      desc = "The name of the pipe to copy the relaxation data to.", 
100      wiz_element_type = 'combo', 
101      wiz_combo_iter = pipes.pipe_names, 
102      wiz_read_only = True, 
103      can_be_none = True 
104  ) 
105  uf.add_keyarg( 
106      name = "ri_id", 
107      py_type = "str", 
108      desc_short = "relaxation data ID string", 
109      desc = "The relaxation data ID string.", 
110      wiz_element_type = 'combo', 
111      wiz_combo_iter = relax_data.get_ids, 
112      wiz_read_only = True, 
113      can_be_none = True 
114  ) 
115  # Description. 
116  uf.desc.append(Desc_container()) 
117  uf.desc[-1].add_paragraph("This will copy relaxation data from one data pipe to another.  If the relaxation ID data string is not given then all relaxation data will be copied, otherwise only a specific data set will be copied.") 
118  # Prompt examples. 
119  uf.desc.append(Desc_container("Prompt examples")) 
120  uf.desc[-1].add_paragraph("To copy all relaxation data from pipe 'm1' to pipe 'm9', type one of:") 
121  uf.desc[-1].add_prompt("relax> relax_data.copy('m1', 'm9')") 
122  uf.desc[-1].add_prompt("relax> relax_data.copy(pipe_from='m1', pipe_to='m9')") 
123  uf.desc[-1].add_prompt("relax> relax_data.copy('m1', 'm9', None)") 
124  uf.desc[-1].add_prompt("relax> relax_data.copy(pipe_from='m1', pipe_to='m9', ri_id=None)") 
125  uf.desc[-1].add_paragraph("To copy only the NOE relaxation data with the ID string of 'NOE_800' from 'm3' to 'm6', type one of:") 
126  uf.desc[-1].add_prompt("relax> relax_data.copy('m3', 'm6', 'NOE_800')") 
127  uf.desc[-1].add_prompt("relax> relax_data.copy(pipe_from='m3', pipe_to='m6', ri_id='NOE_800')") 
128  uf.backend = relax_data.copy 
129  uf.menu_text = "&copy" 
130  uf.gui_icon = "oxygen.actions.list-add" 
131  uf.wizard_size = (700, 500) 
132  uf.wizard_image = WIZARD_IMAGE_PATH + 'fid.png' 
133   
134   
135  # The relax_data.delete user function. 
136  uf = uf_info.add_uf('relax_data.delete') 
137  uf.title = "Delete the data corresponding to the relaxation data ID string." 
138  uf.title_short = "Relaxation data deletion." 
139  uf.add_keyarg( 
140      name = "ri_id", 
141      py_type = "str", 
142      desc_short = "relaxation data ID string", 
143      desc = "The relaxation data ID string.", 
144      wiz_element_type = 'combo', 
145      wiz_combo_iter = relax_data.get_ids, 
146      wiz_read_only = True 
147  ) 
148  # Description. 
149  uf.desc.append(Desc_container()) 
150  uf.desc[-1].add_paragraph("The relaxation data corresponding to the given relaxation data ID string will be removed from the current data pipe.") 
151  # Prompt examples. 
152  uf.desc.append(Desc_container("Prompt examples")) 
153  uf.desc[-1].add_paragraph("To delete the relaxation data corresponding to the ID 'NOE_600', type:") 
154  uf.desc[-1].add_prompt("relax> relax_data.delete('NOE_600')") 
155  uf.backend = relax_data.delete 
156  uf.menu_text = "&delete" 
157  uf.gui_icon = "oxygen.actions.list-remove" 
158  uf.wizard_size = (700, 400) 
159  uf.wizard_image = WIZARD_IMAGE_PATH + 'fid.png' 
160   
161   
162  # The relax_data.display user function. 
163  uf = uf_info.add_uf('relax_data.display') 
164  uf.title = "Display the data corresponding to the relaxation data ID string." 
165  uf.title_short = "Displaying relaxation data." 
166  uf.display = True 
167  uf.add_keyarg( 
168      name = "ri_id", 
169      py_type = "str", 
170      desc_short = "relaxation data ID string", 
171      desc = "The relaxation data ID string.", 
172      wiz_element_type = 'combo', 
173      wiz_combo_iter = relax_data.get_ids, 
174      wiz_read_only = True 
175  ) 
176  # Description. 
177  uf.desc.append(Desc_container()) 
178  uf.desc[-1].add_paragraph("This will display the relaxation data corresponding to the given ID.") 
179  # Prompt examples. 
180  uf.desc.append(Desc_container("Prompt examples")) 
181  uf.desc[-1].add_paragraph("To display the NOE relaxation data at 600 MHz with the ID string 'NOE_600', type:") 
182  uf.desc[-1].add_prompt("relax> relax_data.display('NOE_600')") 
183  uf.backend = relax_data.display 
184  uf.menu_text = "dis&play" 
185  uf.gui_icon = "oxygen.actions.document-preview" 
186  uf.wizard_size = (700, 400) 
187  uf.wizard_height_desc = 140 
188  uf.wizard_image = WIZARD_IMAGE_PATH + 'fid.png' 
189   
190   
191  # The relax_data.frq user function. 
192  uf = uf_info.add_uf('relax_data.frq') 
193  uf.title = "Set the spectrometer proton frequency of the relaxation data in Hz." 
194  uf.title_short = "Relaxation data frequency setting." 
195  uf.add_keyarg( 
196      name = "ri_id", 
197      py_type = "str", 
198      desc_short = "relaxation ID string", 
199      desc = "The relaxation data ID string of the data to set the frequency of.", 
200      wiz_element_type = 'combo', 
201      wiz_combo_iter = relax_data.get_ids, 
202      wiz_read_only = True 
203  ) 
204  uf.add_keyarg( 
205      name = "frq", 
206      py_type = "num", 
207      desc_short = "frequency in Hz", 
208      desc = "The exact proton frequency of the spectrometer in Hertz.  See the 'sfrq' parameter in the Varian procpar file or the 'SFO1' parameter in the Bruker acqus file." 
209  ) 
210  # Description. 
211  uf.desc.append(Desc_container()) 
212  uf.desc[-1].add_paragraph("This allows the relaxation data type to be either set or reset.  The frequency must be the that of the proton in Hertz.  This value must be exact and match that of the 'sfrq' parameter in the Varian procpar file or the 'SFO1' parameter in the Bruker acqus file.") 
213  uf.backend = relax_data.frq 
214  uf.menu_text = "&frq" 
215  uf.gui_icon = "relax.frq" 
216  uf.wizard_size = (700, 500) 
217  uf.wizard_image = WIZARD_IMAGE_PATH + 'fid.png' 
218   
219   
220   
221  # The relax_data.peak_intensity_type user function. 
222  uf = uf_info.add_uf('relax_data.peak_intensity_type') 
223  uf.title = "Specify if heights or volumes were used to measure the peak intensities." 
224  uf.title_short = "How were peak intensities measured?" 
225  uf.add_keyarg( 
226      name = "ri_id", 
227      py_type = "str", 
228      desc_short = "relaxation data ID string", 
229      desc = "The relaxation data ID string.", 
230      wiz_element_type = 'combo', 
231      wiz_combo_iter = relax_data.get_ids, 
232      wiz_read_only = True 
233  ) 
234  uf.add_keyarg( 
235      name = "type", 
236      default = "height", 
237      py_type = "str", 
238      desc_short = "peak intensity type", 
239      desc = "The peak intensity type.", 
240      wiz_element_type = "combo", 
241      wiz_combo_choices = ["height", "volume"], 
242      wiz_read_only = True 
243  ) 
244  # Description. 
245  uf.desc.append(Desc_container()) 
246  uf.desc[-1].add_paragraph("This is essential for BMRB data deposition.  It is used to specify whether peak heights or peak volumes were measured.  The two currently allowed values for the peak intensity type are 'height' and 'volume'.") 
247  uf.backend = relax_data.peak_intensity_type 
248  uf.menu_text = "peak_&intensity_type" 
249  uf.gui_icon = "oxygen.actions.edit-rename" 
250  uf.wizard_height_desc = 300 
251  uf.wizard_size = (800, 600) 
252  uf.wizard_image = WIZARD_IMAGE_PATH + 'spectrum' + sep + 'spectrum_200.png' 
253   
254   
255  # The relax_data.read user function. 
256  uf = uf_info.add_uf('relax_data.read') 
257  uf.title = "Read R1, R2, or NOE relaxation data from a file." 
258  uf.title_short = "Reading relaxation data from file." 
259  uf.add_keyarg( 
260      name = "ri_id", 
261      py_type = "str", 
262      desc_short = "relaxation ID string", 
263      desc = "The relaxation data ID string.  This must be a unique identifier." 
264  ) 
265  uf.add_keyarg( 
266      name = "ri_type", 
267      py_type = "str", 
268      desc_short = "relaxation type", 
269      desc = "The relaxation data type, i.e. 'R1', 'R2', or 'NOE'.", 
270      wiz_element_type = "combo", 
271      wiz_combo_choices = ["R1", "R2", "NOE"], 
272      wiz_read_only = True 
273  ) 
274  uf.add_keyarg( 
275      name = "frq", 
276      py_type = "num", 
277      desc_short = "frequency in Hz", 
278      desc = "The exact proton frequency of the spectrometer in Hertz.  See the 'sfrq' parameter in the Varian procpar file or the 'SFO1' parameter in the Bruker acqus file." 
279  ) 
280  uf.add_keyarg( 
281      name = "file", 
282      py_type = "str", 
283      arg_type = "file sel", 
284      desc_short = "file name", 
285      desc = "The name of the file containing the relaxation data.", 
286      wiz_filesel_style = wx.FD_OPEN 
287  ) 
288  uf.add_keyarg( 
289      name = "dir", 
290      py_type = "str", 
291      arg_type = "dir", 
292      desc_short = "directory name", 
293      desc = "The directory where the file is located.", 
294      can_be_none = True 
295  ) 
296  uf.add_keyarg( 
297      name = "spin_id_col", 
298      py_type = "int", 
299      arg_type = "free format", 
300      desc_short = "spin ID string column", 
301      desc = "The spin ID string column (an alternative to the mol, res, and spin name and number columns).", 
302      can_be_none = True 
303  ) 
304  uf.add_keyarg( 
305      name = "mol_name_col", 
306      py_type = "int", 
307      arg_type = "free format", 
308      desc_short = "molecule name column", 
309      desc = "The molecule name column (alternative to the spin_id_col).", 
310      can_be_none = True 
311  ) 
312  uf.add_keyarg( 
313      name = "res_num_col", 
314      py_type = "int", 
315      arg_type = "free format", 
316      desc_short = "residue number column", 
317      desc = "The residue number column (alternative to the spin_id_col).", 
318      can_be_none = True 
319  ) 
320  uf.add_keyarg( 
321      name = "res_name_col", 
322      py_type = "int", 
323      arg_type = "free format", 
324      desc_short = "residue name column", 
325      desc = "The residue name column (alternative to the spin_id_col).", 
326      can_be_none = True 
327  ) 
328  uf.add_keyarg( 
329      name = "spin_num_col", 
330      py_type = "int", 
331      arg_type = "free format", 
332      desc_short = "spin number column", 
333      desc = "The spin number column (alternative to the spin_id_col).", 
334      can_be_none = True 
335  ) 
336  uf.add_keyarg( 
337      name = "spin_name_col", 
338      py_type = "int", 
339      arg_type = "free format", 
340      desc_short = "spin name column", 
341      desc = "The spin name column (alternative to the spin_id_col).", 
342      can_be_none = True 
343  ) 
344  uf.add_keyarg( 
345      name = "data_col", 
346      py_type = "int", 
347      arg_type = "free format", 
348      desc_short = "data column", 
349      desc = "The relaxation data column." 
350  ) 
351  uf.add_keyarg( 
352      name = "error_col", 
353      py_type = "int", 
354      arg_type = "free format", 
355      desc_short = "error column", 
356      desc = "The experimental error column." 
357  ) 
358  uf.add_keyarg( 
359      name = "sep", 
360      py_type = "str", 
361      arg_type = "free format", 
362      desc_short = "column separator", 
363      desc = "The column separator (the default is white space).", 
364      can_be_none = True 
365  ) 
366  uf.add_keyarg( 
367      name = "spin_id", 
368      py_type = "str", 
369      arg_type = "spin ID", 
370      desc_short = "spin ID string", 
371      desc = "The spin ID string to restrict the loading of data to certain spin subsets.", 
372      can_be_none = True 
373  ) 
374  # Description. 
375  uf.desc.append(Desc_container()) 
376  uf.desc[-1].add_paragraph("This will load the relaxation data into the relax data store.  The data is associated with the spectrometer frequency in Hertz.  For subsequent analysis, this frequency must be set to the exact field strength.  This value is stored in the 'sfrq' parameter in the Varian procpar file or the 'SFO1' parameter in the Bruker acqus file.") 
377  uf.desc[-1].add_paragraph("The spin system can be identified in the file using two different formats.  The first is the spin ID string column which can include the molecule name, the residue name and number, and the spin name and number.  Alternatively the molecule name, residue number, residue name, spin number and/or spin name columns can be supplied allowing this information to be in separate columns.  Note that the numbering of columns starts at one.  The spin ID string can be used to restrict the reading to certain spin types, for example only 15N spins when only residue information is in the file.") 
378  # Prompt examples. 
379  uf.desc.append(Desc_container("Prompt examples")) 
380  uf.desc[-1].add_paragraph("The following commands will read the protein NOE relaxation data collected at 600 MHz out of a file called 'noe.600.out' where the residue numbers, residue names, data, errors are in the first, second, third, and forth columns respectively.") 
381  uf.desc[-1].add_prompt("relax> relax_data.read('NOE_600', 'NOE', 599.7 * 1e6, 'noe.600.out', res_num_col=1, res_name_col=2, data_col=3, error_col=4)") 
382  uf.desc[-1].add_prompt("relax> relax_data.read(ri_id='NOE_600', ri_type='NOE', frq=600.0 * 1e6, file='noe.600.out', res_num_col=1, res_name_col=2, data_col=3, error_col=4)") 
383  uf.desc[-1].add_paragraph("The following commands will read the R2 data out of the file 'r2.out' where the residue numbers, residue names, data, errors are in the second, third, fifth, and sixth columns respectively.  The columns are separated by commas.") 
384  uf.desc[-1].add_prompt("relax> relax_data.read('R2_800', 'R2', 8.0 * 1e8, 'r2.out', res_num_col=2, res_name_col=3, data_col=5, error_col=6, sep=',')") 
385  uf.desc[-1].add_prompt("relax> relax_data.read(ri_id='R2_800', ri_type='R2', frq=8.0*1e8, file='r2.out', res_num_col=2, res_name_col=3, data_col=5, error_col=6, sep=',')") 
386  uf.desc[-1].add_paragraph("The following commands will read the R1 data out of the file 'r1.out' where the columns are separated by the symbol '%'") 
387  uf.desc[-1].add_prompt("relax> relax_data.read('R1_300', 'R1', 300.1 * 1e6, 'r1.out', sep='%')") 
388  uf.backend = relax_data.read 
389  uf.menu_text = "&read" 
390  uf.gui_icon = "oxygen.actions.document-open" 
391  uf.wizard_height_desc = 140 
392  uf.wizard_size = (1000, 700) 
393  uf.wizard_image = WIZARD_IMAGE_PATH + 'fid.png' 
394   
395   
396  # The relax_data.temp_calibration user function. 
397  uf = uf_info.add_uf('relax_data.temp_calibration') 
398  uf.title = "Specify the per-experiment temperature calibration method used." 
399  uf.title_short = "The per-experiment temperature calibration method." 
400  uf.add_keyarg( 
401      name = "ri_id", 
402      py_type = "str", 
403      desc_short = "relaxation data ID string", 
404      desc = "The relaxation data ID string.", 
405      wiz_element_type = 'combo', 
406      wiz_combo_iter = relax_data.get_ids, 
407      wiz_read_only = True 
408  ) 
409  uf.add_keyarg( 
410      name = "method", 
411      py_type = "str", 
412      desc_short = "per-experiment calibration method", 
413      desc = "The per-experiment temperature calibration method.", 
414      wiz_element_type = 'combo', 
415      wiz_combo_choices = [ 
416          'methanol', 
417          'monoethylene glycol', 
418          'no calibration applied' 
419      ] 
420  ) 
421  # Description. 
422  uf.desc.append(Desc_container()) 
423  uf.desc[-1].add_paragraph("For the proper measurement of relaxation data, per-experiment temperature calibration is essential.  This user function is not for inputting standard MeOH/ethylene glycol/etc. calibration of a spectrometer - this temperature setting is of no use when you are running experiments which pump in large amounts of power into the probe head.") 
424  uf.desc[-1].add_paragraph("The R1 experiment should be about the same temperature as a HSQC and hence be close to the standard MeOH/ethylene glycol sepectrometer calibration.  However the R2 CPMG or spin lock and, to a lesser extent, the NOE pre-saturation pump a lot more power into the probe head.  The power differences can either cause the temperature in the sample to be too high or too low.  This is unpredictable as the thermometer used by the VT unit is next to the coils in the probe head and not inside the NMR sample.  So the VT unit tries to control the temperature inside the probe head rather than in the NMR sample.  However between the thermometer and the sample is the water of the sample, the glass of the NMR tube, the air gap where the VT unit controls air flow and the outside components of the probe head protecting the electronics.  If the sample, the probe head or the VT unit is changed, this will have a different affect on the per-experiment temperature.  The VT unit responds differently under different conditions and may sometimes over or under compensate by a couple of degrees.  Therefore each relaxation data set from each spectrometer requires a per-experiment calibration.") 
425  uf.desc[-1].add_paragraph("Specifying the per-experiment calibration method is needed for BMRB data deposition.  The currently allowed methods are:") 
426  uf.desc[-1].add_list_element("'methanol',") 
427  uf.desc[-1].add_list_element("'monoethylene glycol',") 
428  uf.desc[-1].add_list_element("'no calibration applied'.") 
429  uf.desc[-1].add_paragraph("Other methods will be accepted if supplied.") 
430  uf.backend = relax_data.temp_calibration 
431  uf.menu_text = "&temp_calibration" 
432  uf.gui_icon = "oxygen.status.weather-clear" 
433  uf.wizard_height_desc = 550 
434  uf.wizard_size = (1000, 750) 
435  uf.wizard_image = WIZARD_IMAGE_PATH + 'oxygen-icon-weather-clear.png' 
436   
437   
438  # The relax_data.temp_control user function. 
439  uf = uf_info.add_uf('relax_data.temp_control') 
440  uf.title = "Specify the temperature control method used." 
441  uf.title_short = "The temperature control method." 
442  uf.add_keyarg( 
443      name = "ri_id", 
444      py_type = "str", 
445      desc_short = "relaxation data ID string", 
446      desc = "The relaxation data ID string.", 
447      wiz_element_type = 'combo', 
448      wiz_combo_iter = relax_data.get_ids, 
449      wiz_read_only = True 
450  ) 
451  uf.add_keyarg( 
452      name = "method", 
453      py_type = "str", 
454      desc_short = "temperature control method", 
455      desc = "The control method.", 
456      wiz_element_type = 'combo', 
457      wiz_combo_choices = [ 
458          'single scan interleaving', 
459          'temperature compensation block', 
460          'single scan interleaving and temperature compensation block', 
461          'single fid interleaving', 
462          'single experiment interleaving', 
463          'no temperature control applied' 
464      ], 
465      wiz_read_only = True 
466  ) 
467  # Description. 
468  uf.desc.append(Desc_container()) 
469  uf.desc[-1].add_paragraph("For the proper measurement of relaxation data, explicit temperature control techniques are essential.  A number of factors can cause significant temperature fluctuations between individual relaxation experiments.  This includes the daily temperature cycle of the room housing the spectrometer, different amounts of power for the individual experiments, .  The best methods for eliminating such problems are single scan interleaving and the application of off-resonance temperature compensation") 
470  uf.desc[-1].add_paragraph("The best methods for eliminating such problems are single scan interleaving and temperature compensation block.  Single scan interleaving is the most powerful technique for averaging the temperature fluctuations not only across different experiments, but also across the entire measurement time.  The application of off-resonance temperature compensation blocks at the start of the experiment is useful for the R2 and will normalise the temperature between the individual experiments, but single scan or single fid interleaving is nevertheless required for normalising the temperature across the entire measurement.") 
471  uf.desc[-1].add_paragraph("Specifying the temperature control method is needed for BMRB data deposition.  The currently allowed methods are:") 
472  uf.desc[-1].add_list_element("'single scan interleaving',") 
473  uf.desc[-1].add_list_element("'temperature compensation block',") 
474  uf.desc[-1].add_list_element("'single scan interleaving and temperature compensation block',") 
475  uf.desc[-1].add_list_element("'single fid interleaving',") 
476  uf.desc[-1].add_list_element("'single experiment interleaving',") 
477  uf.desc[-1].add_list_element("'no temperature control applied'.") 
478  uf.backend = relax_data.temp_control 
479  uf.menu_text = "temp_contro&l" 
480  uf.gui_icon = "oxygen.status.weather-clear" 
481  uf.wizard_size = (1000, 750) 
482  uf.wizard_height_desc = 500 
483  uf.wizard_image = WIZARD_IMAGE_PATH + 'oxygen-icon-weather-clear.png' 
484   
485   
486  # The relax_data.type user function. 
487  uf = uf_info.add_uf('relax_data.type') 
488  uf.title = "Set the type of relaxation data." 
489  uf.title_short = "Relaxation data type setting." 
490  uf.add_keyarg( 
491      name = "ri_id", 
492      py_type = "str", 
493      desc_short = "relaxation ID string", 
494      desc = "The relaxation data ID string of the data to set the frequency of.", 
495      wiz_element_type = 'combo', 
496      wiz_combo_iter = relax_data.get_ids, 
497      wiz_read_only = True 
498  ) 
499  uf.add_keyarg( 
500      name = "ri_type", 
501      py_type = "str", 
502      desc_short = "relaxation type", 
503      desc = "The relaxation data type, i.e. 'R1', 'R2', or 'NOE'.", 
504      wiz_element_type = "combo", 
505      wiz_combo_choices = ["R1", "R2", "NOE"], 
506      wiz_read_only = True 
507  ) 
508  # Description. 
509  uf.desc.append(Desc_container()) 
510  uf.desc[-1].add_paragraph("This allows the type associated with the relaxation data to be either set or reset.  This type must be one of 'R1', 'R2', or 'NOE'.") 
511  uf.backend = relax_data.type 
512  uf.menu_text = "&type" 
513  uf.gui_icon = "oxygen.actions.edit-rename" 
514  uf.wizard_image = WIZARD_IMAGE_PATH + 'fid.png' 
515   
516   
517   
518  # The relax_data.write user function. 
519  uf = uf_info.add_uf('relax_data.write') 
520  uf.title = "Write relaxation data to a file." 
521  uf.title_short = "Relaxation data writing." 
522  uf.add_keyarg( 
523      name = "ri_id", 
524      py_type = "str", 
525      desc_short = "relaxation data ID string", 
526      desc = "The relaxation data ID string.", 
527      wiz_element_type = 'combo', 
528      wiz_combo_iter = relax_data.get_ids, 
529      wiz_read_only = True 
530  ) 
531  uf.add_keyarg( 
532      name = "file", 
533      py_type = "str", 
534      arg_type = "file sel", 
535      desc_short = "file name", 
536      desc = "The name of the file.", 
537      wiz_filesel_style = wx.FD_SAVE 
538  ) 
539  uf.add_keyarg( 
540      name = "dir", 
541      py_type = "str", 
542      arg_type = "dir", 
543      desc_short = "directory name", 
544      desc = "The directory name.", 
545      can_be_none = True 
546  ) 
547  uf.add_keyarg( 
548      name = "bc", 
549      default = False, 
550      py_type = "bool", 
551      desc_short = "back calculated data flag", 
552      desc = "A flag which if True will cause the back-calculated data to be written to the file." 
553  ) 
554  uf.add_keyarg( 
555      name = "force", 
556      default = False, 
557      py_type = "bool", 
558      desc_short = "force flag", 
559      desc = "A flag which if True will cause the file to be overwritten." 
560  ) 
561  # Description. 
562  uf.desc.append(Desc_container()) 
563  uf.desc[-1].add_paragraph("If no directory name is given, the file will be placed in the current working directory.  The relaxation data ID string is required for selecting which relaxation data to write to file.") 
564  uf.backend = relax_data.write 
565  uf.menu_text = "&write" 
566  uf.gui_icon = "oxygen.actions.document-save" 
567  uf.wizard_size = (800, 600) 
568  uf.wizard_image = WIZARD_IMAGE_PATH + 'fid.png' 
569