1   
  2   
  3   
  4   
  5   
  6   
  7   
  8   
  9   
 10   
 11   
 12   
 13   
 14   
 15   
 16   
 17   
 18   
 19   
 20   
 21   
 22   
 23   
 24   
 25  from os import sep, system 
 26  import time 
 27  import wx 
 28  import wx.grid 
 29   
 30   
 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   
 36  from gui.fonts import font 
 37  from gui.paths import IMAGE_PATH 
 38   
 39   
 41      """Create PyMol Macro for NOE colouring.""" 
 42   
 43       
 44      file = open(target_dir + sep + 'noe.pml', 'w') 
 45   
 46       
 47      if pdb_file: 
 48          file.write("load " + pdb_file + '\n') 
 49   
 50       
 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       
 57      for spin, mol_name, res_num, res_name in spin_loop(full_info=True): 
 58           
 59          if not spin.select: 
 60              continue 
 61   
 62           
 63          if not hasattr(spin, 'noe') or spin.noe == None: 
 64              continue 
 65   
 66           
 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           
 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       
 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       
 84      file.close() 
  85   
 86   
 88      """Create the model-free results.""" 
 89   
 90       
 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       
 98      pipename = 'Data_extraction ' + str(time.asctime(time.localtime())) 
 99      interpreter.pipe.create(pipename, 'mf') 
100      interpreter.results.read(directory+sep+'results') 
101   
102       
103   
104      residue = [] 
105      model = [] 
106      s2 = [] 
107      rex = [] 
108      te = [] 
109   
110       
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       
119      for spin, spin_id in spin_loop(return_id=True): 
120           
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           
126          if not spin.select: 
127              file.write("\n") 
128              continue 
129   
130           
131          if hasattr(spin, 'model'): 
132               
133              if 'tm' in spin.model: 
134                  spin.model = spin.model[2:3] 
135               
136              else: 
137                  spin.model = spin.model[1:2] 
138              file.write(";" + spin.model) 
139              model.append(spin.model) 
140   
141           
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           
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           
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           
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           
187          file.write("\n") 
188   
189      file.close() 
190   
191       
192   
193       
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       
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       
225      try: 
226           
227          interpreter.diffusion_tensor.display() 
228   
229           
230          tensor_file = 'tensor.pdb' 
231          interpreter.structure.create_diff_tensor_pdb(file=tensor_file, dir=str(directory) + sep, force=True) 
232   
233           
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       
246      except: 
247          print "\nModel without diffusion tensor was selected (local TM)!\nNo diffusion tensor was created!\n\n" 
248   
249       
250   
251       
252   
253       
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           
265          spin_no = spin_id[spin_id.index(':')+1:spin_id.index('&')] 
266   
267           
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  
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       
289   
290       
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       
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           
312          spin_no = spin_id[spin_id.index(':')+1:spin_id.index('&')] 
313   
314           
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  
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  
 340   
341   
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   
362 -    def __init__(self, results, *args, **kwds): 
 363           
364   
365           
366          self.results = results 
367   
368           
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   
384           
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   
394           
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   
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   
424          self.Destroy() 
425          event.Skip() 
426