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

Source Code for Module user_functions.grace

  1  ############################################################################### 
  2  #                                                                             # 
  3  # Copyright (C) 2004-2015 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 grace user function definitions for controlling the Grace data viewing software.""" 
 24   
 25  # Python module imports. 
 26  import dep_check 
 27  if dep_check.wx_module: 
 28      from wx import FD_OPEN, FD_SAVE 
 29  else: 
 30      FD_OPEN = -1 
 31      FD_SAVE = -1 
 32   
 33  # relax module imports. 
 34  from graphics import WIZARD_IMAGE_PATH 
 35  from pipe_control import grace 
 36  from pipe_control.plotting import write_xy 
 37  from specific_analyses.consistency_tests.parameter_object import Consistency_tests_params; consistency_test_params = Consistency_tests_params() 
 38  from specific_analyses.jw_mapping.parameter_object import Jw_mapping_params; jw_mapping_params = Jw_mapping_params() 
 39  from specific_analyses.model_free.parameter_object import Model_free_params; model_free_params = Model_free_params() 
 40  from specific_analyses.noe.parameter_object import Noe_params; noe_params = Noe_params() 
 41  from specific_analyses.relax_disp.parameter_object import Relax_disp_params; relax_disp_params = Relax_disp_params() 
 42  from specific_analyses.relax_fit.parameter_object import Relax_fit_params; relax_fit_params = Relax_fit_params() 
 43  from user_functions.data import Uf_info; uf_info = Uf_info() 
 44  from user_functions.objects import Desc_container 
 45  from user_functions.wildcards import WILDCARD_GRACE_ALL 
 46   
 47   
 48  # The user function class. 
 49  uf_class = uf_info.add_class('grace') 
 50  uf_class.title = "Class for interfacing with Grace." 
 51  uf_class.menu_text = "&grace" 
 52  uf_class.gui_icon = "relax.grace_icon" 
 53   
 54   
 55  # The grace.view user function. 
 56  uf = uf_info.add_uf('grace.view') 
 57  uf.title = "Visualise the file within Grace." 
 58  uf.title_short = "Grace execution." 
 59  uf.add_keyarg( 
 60      name = "file", 
 61      py_type = "str", 
 62      arg_type = "file sel", 
 63      desc_short = "file name", 
 64      desc = "The name of the file.", 
 65      wiz_filesel_wildcard = WILDCARD_GRACE_ALL, 
 66      wiz_filesel_style = FD_OPEN 
 67  ) 
 68  uf.add_keyarg( 
 69      name = "dir", 
 70      default = "grace", 
 71      py_type = "str", 
 72      arg_type = "dir", 
 73      desc_short = "directory name", 
 74      desc = "The directory name.", 
 75      can_be_none = True 
 76  ) 
 77  uf.add_keyarg( 
 78      name = "grace_exe", 
 79      default = "xmgrace", 
 80      py_type = "str", 
 81      arg_type = "file sel", 
 82      desc_short = "Grace executable file", 
 83      desc = "The Grace executable file.", 
 84      wiz_filesel_style = FD_OPEN, 
 85      wiz_filesel_preview = False 
 86  ) 
 87  # Description. 
 88  uf.desc.append(Desc_container()) 
 89  uf.desc[-1].add_paragraph("This can be used to view the specified Grace '*.agr' file by opening it with the Grace program.") 
 90  # Prompt examples. 
 91  uf.desc.append(Desc_container("Prompt examples")) 
 92  uf.desc[-1].add_paragraph("To view the file 's2.agr' in the directory 'grace', type:") 
 93  uf.desc[-1].add_prompt("relax> grace.view(file='s2.agr')") 
 94  uf.desc[-1].add_prompt("relax> grace.view(file='s2.agr', dir='grace')") 
 95  uf.backend = grace.view 
 96  uf.menu_text = "&view" 
 97  uf.gui_icon = "relax.grace_icon" 
 98  uf.wizard_size = (900, 500) 
 99  uf.wizard_image = WIZARD_IMAGE_PATH + 'grace.png' 
100   
101   
102  # The grace.write user function. 
103  uf = uf_info.add_uf('grace.write') 
104  uf.title = "Create a grace '.agr' file to visualise the 2D data." 
105  uf.title_short = "Grace file creation." 
106  uf.add_keyarg( 
107      name = "x_data_type", 
108      default = "res_num", 
109      py_type = "str", 
110      desc_short = "x data type", 
111      desc = "The data type for the X-axis (no regular expression is allowed).", 
112      wiz_element_type = 'combo', 
113      wiz_combo_iter = grace.get_data_types 
114  ) 
115  uf.add_keyarg( 
116      name = "y_data_type", 
117      py_type = "str", 
118      desc_short = "y data type", 
119      desc = "The data type for the Y-axis (no regular expression is allowed).", 
120      wiz_element_type = 'combo', 
121      wiz_combo_iter = grace.get_data_types 
122  ) 
123  uf.add_keyarg( 
124      name = "spin_id", 
125      py_type = "str", 
126      desc_short = "spin ID string", 
127      desc = "The spin ID string.", 
128      can_be_none = True 
129  ) 
130  uf.add_keyarg( 
131      name = "plot_data", 
132      default = "value", 
133      py_type = "str", 
134      desc_short = "plot data", 
135      desc = "The data to use for the plot.", 
136      wiz_element_type = "combo", 
137      wiz_combo_choices = [ 
138          "Values", 
139          "Errors", 
140          "Simulation values" 
141      ], 
142      wiz_combo_data = [ 
143          "value", 
144          "error", 
145          "sims" 
146      ], 
147      wiz_read_only = True 
148  ) 
149  uf.add_keyarg( 
150      name = "norm_type", 
151      default = "first", 
152      py_type = "str", 
153      desc_short = "normalisation point", 
154      desc = "How the graph should be normalised, if the norm flag is set.", 
155      wiz_element_type = "combo", 
156      wiz_combo_choices = [ 
157          "First point normalisation", 
158          "Last point normalisation" 
159      ], 
160      wiz_combo_data = [ 
161          "first", 
162          "last" 
163      ], 
164      wiz_read_only = True 
165  ) 
166  uf.add_keyarg( 
167      name = "file", 
168      py_type = "str", 
169      arg_type = "file sel", 
170      desc_short = "file name", 
171      desc = "The name of the file.", 
172      wiz_filesel_wildcard = WILDCARD_GRACE_ALL, 
173      wiz_filesel_style = FD_SAVE 
174  ) 
175  uf.add_keyarg( 
176      name = "dir", 
177      default = "grace", 
178      py_type = "str", 
179      arg_type = "dir", 
180      desc_short = "directory name", 
181      desc = "The directory name.", 
182      can_be_none = True 
183  ) 
184  uf.add_keyarg( 
185      name = "force", 
186      default = False, 
187      py_type = "bool", 
188      desc_short = "force flag", 
189      desc = "A flag which, if set to True, will cause the file to be overwritten." 
190  ) 
191  uf.add_keyarg( 
192      name = "norm", 
193      default = False, 
194      py_type = "bool", 
195      desc_short = "normalisation flag", 
196      desc = "A flag which, if set to True, will cause all graphs to be normalised to 1.  This is for the normalisation of series type data.  The point for normalisation is set with the norm_type argument." 
197  ) 
198  # Description. 
199  uf.desc.append(Desc_container()) 
200  uf.desc[-1].add_paragraph("This is designed to be as flexible as possible so that any combination of data can be plotted.  The output is in the format of a Grace plot (also known as ACE/gr, Xmgr, and xmgrace) which only supports two dimensional plots.  Three types of information can be used to create various types of plot.  These include the x-axis and y-axis data types, the spin ID string, and the type of data plot.") 
201  uf.desc[-1].add_paragraph("The x-axis and y-axis data types should be plain strings, regular expression is not allowed.  The two axes of the Grace plot can be any of the data types listed in the tables below.  The only limitation is that the data must belong to the same data pipe.") 
202  uf.desc[-1].add_paragraph("If the x-axis data type is not given, the plot will default to having the residue numbering along the x-axis.Two special data types for the axes are:") 
203  uf.desc[-1].add_item_list_element("'res_num'", "The axis will consist of the residue numbering.") 
204  uf.desc[-1].add_item_list_element("'spin_num'", "The axis will consist of the spin numbering.") 
205  uf.desc[-1].add_paragraph("The spin ID string can be used to limit which spins are used in the plot.  The default is that all spins will be used, however, the ID string can be used to select a subset of all spins, or a single spin for plots of Monte Carlo simulations, etc.") 
206  uf.desc[-1].add_paragraph("The property which is actually plotted can be controlled by the plot data setting.  This can be one of the following:") 
207  uf.desc[-1].add_item_list_element("'value'", "Plot values (with errors if they exist).") 
208  uf.desc[-1].add_item_list_element("'error'", "Plot errors.") 
209  uf.desc[-1].add_item_list_element("'sims'", "Plot the simulation values.") 
210  uf.desc[-1].add_paragraph("Normalisation is only allowed for series type data, for example the R2 exponential curves, and will be ignored for all other data types.  If the norm flag is set to True then the y-value of the first point of the series will be set to 1.  This normalisation is useful for highlighting errors in the data sets.") 
211  uf.desc.append(relax_fit_params.uf_doc(label="table: curve-fit parameters and min stats")) 
212  uf.desc.append(noe_params.uf_doc(label="table: NOE parameters")) 
213  uf.desc.append(model_free_params.uf_doc(label="table: model-free parameters and min stats")) 
214  uf.desc.append(jw_mapping_params.uf_doc(label="table: J(w) parameters")) 
215  uf.desc.append(consistency_test_params.uf_doc(label="table: consistency testing parameters")) 
216  uf.desc.append(relax_disp_params.uf_doc(label="table: dispersion parameters and min stats")) 
217  # Prompt examples. 
218  uf.desc.append(Desc_container("Prompt examples")) 
219  uf.desc[-1].add_paragraph("To write the NOE values for all spins to the Grace file 'noe.agr', type one of:") 
220  uf.desc[-1].add_prompt("relax> grace.write('res_num', 'noe', file='noe.agr')") 
221  uf.desc[-1].add_prompt("relax> grace.write(y_data_type='noe', file='noe.agr')") 
222  uf.desc[-1].add_prompt("relax> grace.write(x_data_type='res_num', y_data_type='noe', file='noe.agr')") 
223  uf.desc[-1].add_prompt("relax> grace.write(y_data_type='noe', file='noe.agr', force=True)") 
224  uf.desc[-1].add_paragraph("To create a Grace file of 's2' vs. 'te' for all spins, type one of:") 
225  uf.desc[-1].add_prompt("relax> grace.write('s2', 'te', file='s2_te.agr')") 
226  uf.desc[-1].add_prompt("relax> grace.write(x_data_type='s2', y_data_type='te', file='s2_te.agr')") 
227  uf.desc[-1].add_prompt("relax> grace.write(x_data_type='s2', y_data_type='te', file='s2_te.agr', force=True)") 
228  uf.desc[-1].add_paragraph("To create a Grace file of the Monte Carlo simulation values of 'rex' vs. 'te' for residue 123, type one of:") 
229  uf.desc[-1].add_prompt("relax> grace.write('rex', 'te', spin_id=':123', plot_data='sims', file='s2_te.agr')") 
230  uf.desc[-1].add_prompt("relax> grace.write(x_data_type='rex', y_data_type='te', spin_id=':123', plot_data='sims', file='s2_te.agr')") 
231  uf.desc[-1].add_paragraph("By plotting the peak intensities, the integrity of exponential relaxation curves can be checked and anomalies searched for prior to model-free analysis or reduced spectral density mapping.  For example the normalised average peak intensities can be plotted verses the relaxation time periods for the relaxation curves of all residues of a protein.  The normalisation, whereby the initial peak intensity of each residue I(0) is set to 1, emphasises any problems.  To produce this Grace file, type:") 
232  uf.desc[-1].add_prompt("relax> grace.write(x_data_type='relax_times', y_data_type='ave_int', file='intensities_norm.agr', force=True, norm=True)") 
233  uf.backend = write_xy 
234  uf.menu_text = "&write" 
235  uf.gui_icon = "oxygen.actions.document-save" 
236  uf.wizard_size = (1000, 700) 
237  uf.wizard_image = WIZARD_IMAGE_PATH + 'grace.png' 
238