1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 """The relax_data user function definitions."""
25
26
27 from os import sep
28 import wx
29
30
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
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
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
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
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
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
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 = "©"
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
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
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
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
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
177 uf.desc.append(Desc_container())
178 uf.desc[-1].add_paragraph("This will display the relaxation data corresponding to the given ID.")
179
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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