Package gui :: Package analyses :: Module results_analysis
[hide private]
[frames] | no frames]

Source Code for Module gui.analyses.results_analysis

  1  ############################################################################### 
  2  #                                                                             # 
  3  # Copyright (C) 2009 Michael Bieri                                            # 
  4  # Copyright (C) 2010-2011 Edward d'Auvergne                                   # 
  5  #                                                                             # 
  6  # This file is part of the program relax.                                     # 
  7  #                                                                             # 
  8  # relax is free software; you can redistribute it and/or modify               # 
  9  # it under the terms of the GNU General Public License as published by        # 
 10  # the Free Software Foundation; either version 2 of the License, or           # 
 11  # (at your option) any later version.                                         # 
 12  #                                                                             # 
 13  # relax is distributed in the hope that it will be useful,                    # 
 14  # but WITHOUT ANY WARRANTY; without even the implied warranty of              # 
 15  # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the               # 
 16  # GNU General Public License for more details.                                # 
 17  #                                                                             # 
 18  # You should have received a copy of the GNU General Public License           # 
 19  # along with relax; if not, write to the Free Software                        # 
 20  # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA   # 
 21  #                                                                             # 
 22  ############################################################################### 
 23   
 24  # Python module imports. 
 25  from os import sep, system 
 26  import time 
 27  import wx 
 28  import wx.grid 
 29   
 30  # relax module imports. 
 31  from prompt.interpreter import Interpreter 
 32  from generic_fns.mol_res_spin import spin_loop 
 33  from status import Status; status = Status() 
 34   
 35  # relax GUI module imports. 
 36  from gui.fonts import font 
 37  from gui.paths import IMAGE_PATH 
 38   
 39   
40 -def color_code_noe(target_dir, pdb_file):
41 """Create PyMol Macro for NOE colouring.""" 42 43 # Open the macro file. 44 file = open(target_dir + sep + 'noe.pml', 'w') 45 46 # PDB loading. 47 if pdb_file: 48 file.write("load " + pdb_file + '\n') 49 50 # PyMOL set up commands. 51 file.write("bg_color white\n") 52 file.write("color gray90\n") 53 file.write("hide all\n") 54 file.write("show ribbon\n") 55 56 # Loop over the spins. 57 for spin, mol_name, res_num, res_name in spin_loop(full_info=True): 58 # Skip deselected spins. 59 if not spin.select: 60 continue 61 62 # Skip spins with no data. 63 if not hasattr(spin, 'noe') or spin.noe == None: 64 continue 65 66 # Ribbon colour. 67 width = ((1.0 - spin.noe) * 2.0) 68 colour = 1.0 - ((spin.noe)**3) 69 colour = colour ** 3 70 colour = 1.0 - colour 71 72 # Write out the PyMOL commands. 73 file.write("set_color resicolor%s, [0, %s, 1]\n" % (res_num, colour)) 74 file.write("color resicolor%s, resi %s\n" % (res_num, res_num)) 75 file.write("set_bond stick_radius, %s, resi %s\n" % (width, res_num)) 76 77 # Final PyMOL commands. 78 file.write("hide all\n") 79 file.write("show sticks, name C+N+CA\n") 80 file.write("set stick_quality, 10\n") 81 file.write("ray\n") 82 83 # Close the macro. 84 file.close()
85 86
87 -def model_free_results(directory, pdbfile):
88 """Create the model-free results.""" 89 90 # Load the interpreter. 91 interpreter = Interpreter(show_script=False, quit=False, raise_relax_error=True) 92 interpreter.populate_self() 93 interpreter.on(verbose=False) 94 95 directory = directory + sep + 'final' 96 97 #Read results 98 pipename = 'Data_extraction ' + str(time.asctime(time.localtime())) 99 interpreter.pipe.create(pipename, 'mf') 100 interpreter.results.read(directory+sep+'results') 101 102 #create a table file and variables for results table 103 104 residue = [] 105 model = [] 106 s2 = [] 107 rex = [] 108 te = [] 109 110 #create file 111 file = open(str(directory) + sep + 'Model-free_Results.csv', 'w') 112 file.write('Data Extraction by relaxGUI, (C) 2009 Michael Bieri') 113 file.write("\n") 114 file.write("\n") 115 file.write("Residue;Model;S2;Rex [1/s];Te;Relaxation Parameters\n") 116 file.write("\n") 117 118 #loop over residues 119 for spin, spin_id in spin_loop(return_id=True): 120 # The spin ID string. 121 spin_no = spin_id[spin_id.index(':')+1:spin_id.index('&')] 122 spin_res = spin_id[spin_id.index('&')+2:spin_id.index('@')] 123 file.write((spin_res) + " " + (spin_no)) 124 residue.append(spin_res) 125 # The spin is not selected. 126 if not spin.select: 127 file.write("\n") 128 continue 129 130 # The model-free model. 131 if hasattr(spin, 'model'): 132 # Tm0-9 models 133 if 'tm' in spin.model: 134 spin.model = spin.model[2:3] 135 # m0-9 136 else: 137 spin.model = spin.model[1:2] 138 file.write(";" + spin.model) 139 model.append(spin.model) 140 141 # S2. 142 if hasattr(spin, 's2'): 143 s2_value = str(spin.s2) 144 s2_err = str(spin.s2_err) 145 if spin.s2 == None: 146 file.write(";") 147 s2.append('') 148 else: 149 file.write(";" + s2_value[0:5]+ " +/- " + s2_err[0:4]) 150 s2.append(s2_value[0:5]+ " +/- " + s2_err[0:4]) 151 152 # Rex. 153 if hasattr(spin, 'rex'): 154 rex_value = str(spin.rex) 155 rex_err = str(spin.rex_err) 156 if spin.rex == None: 157 file.write(";") 158 rex.append('') 159 else: 160 rex_eff = float(spin.rex) * (int(spin.frq_labels[1]) * 1000000 * 2 * 3.14159)**2 161 rex_value = str(rex_eff) 162 rex_err_eff = float(spin.rex_err) * (int(spin.frq_labels[1]) * 1000000 * 2 * 3.14159)**2 163 rex_err = str(rex_err_eff) 164 file.write(";" + rex_value[0:5]+ " +/- " + rex_err[0:4]) 165 rex.append(rex_value[0:5]+ " +/- " + rex_err[0:4]) 166 167 # Te 168 if hasattr(spin, 'te'): 169 if spin.te == None: 170 file.write(";") 171 te.append('') 172 else: 173 te_ps = spin.te * 1e-12 174 te_value = str(te_ps) 175 te_err = str(spin.te_err) 176 file.write(";" + te_value[0:5]+ " +/- " + te_err[0:4]) 177 te.append(te_value[0:5]+ " +/- " + te_err[0:4]) 178 179 # Parameters. 180 if hasattr(spin, 'params'): 181 file.write(";" + str(spin.params[0:len(spin.params)])) 182 else: 183 file.write(";\n") 184 continue 185 186 # Start a new line. 187 file.write("\n") 188 189 file.close() 190 191 ################################################################################################## 192 193 #Create Single Data Files 194 195 interpreter.value.write(param='rex', file='rex.txt', dir=str(directory) + sep + 'final_results', force=True) 196 interpreter.value.write(param='s2', file='s2.txt', dir=str(directory) + sep + 'final_results', force=True) 197 interpreter.value.write(param='s2f', file='s2f.txt', dir=str(directory) + sep + 'final_results', force=True) 198 interpreter.value.write(param='s2s', file='s2s.txt', dir=str(directory) + sep + 'final_results', force=True) 199 interpreter.value.write(param='te', file='te.txt', dir=str(directory) + sep + 'final_results', force=True) 200 interpreter.value.write(param='tf', file='tf.txt', dir=str(directory) + sep + 'final_results', force=True) 201 interpreter.value.write(param='ts', file='ts.txt', dir=str(directory) + sep + 'final_results', force=True) 202 interpreter.value.write(param='rex', file='rex.txt', dir=str(directory) + sep + 'final_results', force=True) 203 interpreter.value.write(param='r', file='r.txt', dir=str(directory) + sep + 'final_results', force=True) 204 interpreter.value.write(param='rex', file='rex.txt', dir=str(directory) + sep + 'final_results', force=True) 205 interpreter.value.write(param='csa', file='csa.txt', dir=str(directory) + sep + 'final_results', force=True) 206 interpreter.value.write(param='rex', file='rex.txt', dir=str(directory) + sep + 'final_results', force=True) 207 interpreter.value.write(param='local_tm', file='local_tm.txt', dir=str(directory) + sep + 'final_results', force=True) 208 209 ################################################################################################## 210 211 #Create Grace Plots 212 213 interpreter.grace.write(x_data_type='spin', y_data_type='s2', file='s2.agr', dir=str(directory) + sep + 'grace', force=True) 214 interpreter.grace.write(x_data_type='spin', y_data_type='te', file='te.agr', dir=str(directory) + sep + 'grace', force=True) 215 interpreter.grace.write(x_data_type='spin', y_data_type='s2f', file='s2f.agr', dir=str(directory) + sep + 'grace', force=True) 216 interpreter.grace.write(x_data_type='spin', y_data_type='s2s', file='s2s.agr', dir=str(directory) + sep + 'grace', force=True) 217 interpreter.grace.write(x_data_type='spin', y_data_type='ts', file='ts.agr', dir=str(directory) + sep + 'grace', force=True) 218 interpreter.grace.write(x_data_type='spin', y_data_type='tf', file='tf.agr', dir=str(directory) + sep + 'grace', force=True) 219 interpreter.grace.write(x_data_type='spin', y_data_type='csa', file='csa.agr', dir=str(directory) + sep + 'grace', force=True) 220 interpreter.grace.write(x_data_type='te', y_data_type='s2', file='s2-te.agr', dir=str(directory) + sep + 'grace', force=True) 221 222 ################################################################################################## 223 224 #Create Diffusion Tensor 225 try: 226 # Display the diffusion tensor. 227 interpreter.diffusion_tensor.display() 228 229 # Create the tensor PDB file. 230 tensor_file = 'tensor.pdb' 231 interpreter.structure.create_diff_tensor_pdb(file=tensor_file, dir=str(directory) + sep, force=True) 232 233 # create diffusion tensor macro 234 file = open(str(directory) + sep + 'diffusion_tensor.pml', 'w') 235 file.write('load ' + pdbfile + '\n') 236 file.write('color red, ss h\n') 237 file.write('color yellow, ss s\n') 238 file.write('color green, ss l+''\n') 239 file.write('set cartoon_discrete_colors, 1\n') 240 file.write('hide all\n') 241 file.write('show cartoon\n') 242 file.write('load ' + str(directory) + sep + 'tensor.pdb' + '\n') 243 file.close() 244 245 # No diffusion tensor (local tm model was selected) 246 except: 247 print "\nModel without diffusion tensor was selected (local TM)!\nNo diffusion tensor was created!\n\n" 248 249 ################################################################################################## 250 251 # Create S2 Macro for PyMol 252 253 #create file 254 255 file = open(str(directory) +sep + 's2.pml', 'w') 256 if pdbfile: 257 file.write("load " + pdbfile + '\n') 258 file.write("bg_color white\n") 259 file.write("color gray90\n") 260 file.write("hide all\n") 261 file.write("show ribbon\n") 262 263 for spin, spin_id in spin_loop(return_id=True): 264 #select residue 265 spin_no = spin_id[spin_id.index(':')+1:spin_id.index('&')] 266 267 #ribbon color 268 if hasattr(spin, 's2'): 269 if spin.s2 == None: 270 file.write("") 271 else: 272 width = ((1-spin.s2) * 2) 273 green = 1 - ((spin.s2)**3) 274 green = green * green * green #* green * green 275 green = 1 - green 276 file.write("set_color resicolor" + spin_no + ", [1," + str(green) + ",0]\n") 277 file.write("color resicolor" + spin_no + ", resi " + spin_no + "\n") 278 file.write("set_bond stick_radius, " + str(width) + ", resi " + spin_no + "\n") 279 280 file.write("hide all\n") 281 file.write("show sticks, name C+N+CA\n") 282 file.write("set stick_quality, 10\n") 283 file.write("ray\n") 284 file.close() 285 286 ################################################################################################## 287 288 # Create Rex Macro for PyMol 289 290 #create file 291 292 file = open(str(directory) + sep + 'rex.pml', 'w') 293 if pdbfile: 294 file.write("load " + pdbfile + '\n') 295 file.write("bg_color white\n") 296 file.write("color gray90\n") 297 file.write("hide all\n") 298 file.write("show ribbon\n") 299 300 max_rex = 0 301 302 #find max Rex 303 for spin, spin_id in spin_loop(return_id=True): 304 if hasattr(spin, 'rex'): 305 if not spin.rex == None: 306 if spin.rex > max_rex: 307 max_rex = spin.rex 308 309 310 for spin, spin_id in spin_loop(return_id=True): 311 #select residue 312 spin_no = spin_id[spin_id.index(':')+1:spin_id.index('&')] 313 314 #ribbon color 315 if hasattr(spin, 'rex'): 316 if spin.rex == None: 317 file.write("") 318 else: 319 rel_rex = spin.rex / max_rex 320 width = ((rel_rex) * 2) 321 green = ((rel_rex)) 322 green = green * green * green #* green * green 323 green = 1 - green 324 file.write("set_color resicolor" + spin_no + ", [1," + str(green) + ",0]\n") 325 file.write("color resicolor" + spin_no + ", resi " + spin_no + "\n") 326 file.write("set_bond stick_radius, " + str(width) + ", resi " + spin_no + "\n") 327 328 file.write("hide all\n") 329 file.write("show sticks, name C+N+CA\n") 330 file.write("set stick_quality, 10\n") 331 file.write("ray\n") 332 file.close() 333 334 ################################################################################################## 335 336 print '\n\n__________________________________________________________\n\nSuccessfully generated model-free results files\nsee results tab\n__________________________________________________________' 337 338 returnstring = [residue, model, s2, rex, te] 339 return returnstring # return data for results table dialog
340 341
342 -def see_results(openfile, import_results):
343 """Open results.""" 344 345 if '.agr' in openfile: 346 system('xmgrace ' + openfile + ' &') 347 348 if '.csv' in openfile: 349 system('gedit ' + openfile + ' &') 350 351 if '.pml' in openfile: 352 system('pymol ' + openfile + ' &') 353 354 if 'Table_of_Results' in openfile: 355 summary = Final_results(import_results, None, -1, "") 356 if status.show_gui: 357 summary.Show()
358 359 360
361 -class Final_results(wx.Frame): # Dialog that displays relax results in window
362 - def __init__(self, results, *args, **kwds):
363 # begin final_results.__init__ 364 365 # Load results. 366 self.results = results 367 368 # Create Frame. 369 kwds["style"] = wx.DEFAULT_FRAME_STYLE 370 wx.Frame.__init__(self, *args, **kwds) 371 self.label_1 = wx.StaticText(self, -1, "Results of relax Analysis") 372 self.grid_1 = wx.grid.Grid(self, -1, size=(1, 1)) 373 self.close_button = wx.Button(self, -1, "Close") 374 self.close_button.SetFont(font.normal) 375 376 self.__set_properties() 377 self.__do_layout() 378 self._fill_values() 379 380 self.Bind(wx.EVT_BUTTON, self.close_table, self.close_button)
381 382
383 - def __do_layout(self):
384 # begin final_results.__do_layout 385 sizer_2 = wx.BoxSizer(wx.VERTICAL) 386 sizer_2.Add(self.label_1, 0, wx.ALL|wx.ALIGN_CENTER_HORIZONTAL, 10) 387 sizer_2.Add(self.grid_1, 1, wx.EXPAND|wx.ALIGN_CENTER_HORIZONTAL, 0) 388 sizer_2.Add(self.close_button, 0, wx.ALIGN_CENTER_HORIZONTAL, 0) 389 self.SetSizer(sizer_2) 390 self.Layout()
391 392
393 - def __set_properties(self):
394 # begin final_results.__set_properties 395 self.SetTitle("relaxGUI") 396 _icon = wx.EmptyIcon() 397 _icon.CopyFromBitmap(wx.Bitmap(IMAGE_PATH+'relax_start.gif', wx.BITMAP_TYPE_ANY)) 398 self.SetIcon(_icon) 399 self.SetSize((700, 600)) 400 self.label_1.SetFont(wx.Font(12, wx.DEFAULT, wx.NORMAL, wx.BOLD, 0, "")) 401 self.grid_1.CreateGrid(len(self.results[0]), 5) 402 self.grid_1.SetColLabelValue(0, "Residue") 403 self.grid_1.SetColSize(0, 80) 404 self.grid_1.SetColLabelValue(1, "Model") 405 self.grid_1.SetColSize(1, 70) 406 self.grid_1.SetColLabelValue(2, "S2") 407 self.grid_1.SetColSize(2, 150) 408 self.grid_1.SetColLabelValue(3, "Rex [1/s]") 409 self.grid_1.SetColSize(3, 150) 410 self.grid_1.SetColLabelValue(4, "te") 411 self.grid_1.SetColSize(4, 150)
412 413
414 - def _fill_values(self): # fill entries in table
415 for i in range(0, len(self.results[0])): 416 self.grid_1.SetCellValue(i, 0, self.results[0][i]) 417 self.grid_1.SetCellValue(i, 1, self.results[1][i]) 418 self.grid_1.SetCellValue(i, 2, self.results[2][i]) 419 self.grid_1.SetCellValue(i, 3, self.results[3][i]) 420 self.grid_1.SetCellValue(i, 4, self.results[4][i]) 421 422
423 - def close_table(self, event): # close
424 self.Destroy() 425 event.Skip() 426