Coverage for PyRx.analyzePage : 48%
Hot-keys on this page
r m x p toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
|
#$Id: analyzePage.py 287 2017-01-14 16:48:16Z sarkiss $ """
#conformations.table_editor.editable = False #remove sizer. See enthought/traits/ui/wx/table_editor.TableEditor._create_toolbar #grid.control.Children[0].Children[0].Sizer.Children[0].GetSizer().Remove(0)
#this part is needed to add tooltip self.wxgrid = grid.control.Children[0].Children[0].Children[4] else:
row, col = evt.GetRow(), evt.GetCol() # A row value of -1 means this click happened on a column. # vice versa, a col value of -1 means a row click. if row == -1: self.grid._editors[0].grid._column_sort( col )
self.frame.log.error("No docked conformation found in "+filename+"\n Please open that dlg file with a text editor to find out why.") return #self.frame.molNav.AddMolecule(docking.ligMol, resetCamera=False)
except Exception,e: print str(e) # ki = conformation.inhib_constant, intermol_energy = conformation.intermol_energy, internal_energy = conformation.total_internal, torsional_energy = conformation.torsional_energy, binding_energy = conformation.binding_energy, unbound_energy = conformation.unbound_energy, rmsd = conformation.refRMS, index = index ) else: strftime("%Y.%m.%d %H:%M:%S"), "Autodock "+str(docking.version)) #self.frame.view.SetSelection(self.frame.view.GetPageIndex(self.frame.canvas3D))
"This method is bound to wx.EVT_SHOW, i.e., invoked when this page is shown" #self.grid.control.Children[0].Children[0].Children[0].SetPosition((0,0))
"Updates conformation of the ligand" else: self.frame.molNav.UpdateConformation(self.dockings[name].ligMol, self.dockings[name].ch.conformations[conformation.index]) else: #self.frame.molNav.AddBonds(molecule, aName, force=True)
self.conformations.items = [] self.dockings = {}
"Modified from http://wiki.wxpython.org/wxGrid_ToolTips"
self.editor.set_selection(self.conformations.items[event.Row]) menu = wx.Menu() saveComplexAsMenu = menu.Append(wx.ID_ANY, "Save Docked Complex as PDB ...") self.Bind(wx.EVT_MENU, self.OnSaveComplex, saveComplexAsMenu) menu.AppendSeparator() showHistogramMenu = menu.Append(wx.ID_ANY, "Create Clustering Histogram") self.Bind(wx.EVT_MENU, self.showHistogram, showHistogramMenu) menu.AppendSeparator() DelMenu = menu.Append(wx.ID_ANY, "Delete All") self.Bind(wx.EVT_MENU, self.Clear, DelMenu)
docking = self.dockings[self.editor.selected_row.name] try: rms = docking.clusterer.clustering_dict.keys()[0] except Exception, inst: self.frame.log.error("Error in showHistogram:\n"+str(inst)) clusters = docking.clusterer.clustering_dict[rms] x = [] y = [] for item in clusters: energy = item[0].binding_energy x.append(energy) y.append(len(item)) titleTxt = "Clustering (rms = "+str(rms)+")" width = 0.05 if len(x) > 1: width = (x[1] - x[0])/10. if width < 0.05: width = 0.05
page = self.frame.matplot.add(self.conformation.name) axes = page.figure.gca() axes.bar(x,y, width=width, picker=True) axes.set_title(titleTxt) axes.set_ylabel("Conformations") axes.set_xlabel("Energy") self.frame.view.SetSelection(self.frame.view.GetPageIndex(self.frame.matplot)) if self.frame.matplot.firstPlot: self.frame.matplot.nb.DeletePage(0) index = self.frame.view.GetPageIndex(self.frame.matplot) self.frame.view.Split(index,1) self.frame.matplot.firstPlot = False page.canvas.mpl_connect('pick_event', self.OnPick)
energy = event.artist.get_x() clusters = event.canvas.clusters name = clusters[0][0].mol.name selectedCluster = None for cluster in clusters: if cluster[0].binding_energy == energy: selectedCluster = cluster for item in self.conformations.items: if item.name == name and item.binding_energy == selectedCluster[0].binding_energy: selectConformation = item break self.editor.set_selection(selectConformation) index = self.conformations.items.index(selectConformation)
dlg = wx.FileDialog(self, "Save as CVS", os.getcwd(), "", "Comma Separated Values (*.csv)|*.csv", style=wx.SAVE) if dlg.ShowModal() == wx.ID_OK: fileName = dlg.GetPath() if fileName[-3:].lower() != 'csv': fileName = fileName +".csv" if os.path.exists(fileName): dlg1 = wx.MessageDialog(self, fileName +" already exists. Overwrite File?", 'Overwrite File?', wx.YES_NO | wx.ICON_INFORMATION ) if dlg1.ShowModal() != wx.ID_YES: dlg1.Destroy() dlg.Destroy() return outFile = open(fileName, 'w') outFile.write('Ligand,Binding Energy,Intermol Energy,Internal Energy,Torsional Energy,Unbound Energy,RMSD\n') for item in self.conformations.items: txt = item.name +","+str(item.binding_energy)+","+str(item.intermol_energy)+","+str(item.internal_energy)+\ ","+str(item.torsional_energy)+","+str(item.unbound_energy)+","+str(item.rmsd) outFile.write(txt+"\n") outFile.close()
"Saves docked ligand and macromolecule complex as pdb" conformation = self.editor.selected_row last_saveComplexFolder = self.frame.wxcfg.Read("last_saveComplexFolder") dlg = wx.FileDialog(self, "Save Docked Complex as PDB", last_saveComplexFolder, "", "PDB Format (*.pdb)|*.pdb", style=wx.SAVE) if dlg.ShowModal() == wx.ID_OK: fileName = dlg.GetPath() if fileName[-3:].lower() != 'pdb': fileName = fileName +".pdb" if os.path.exists(fileName): dlg1 = wx.MessageDialog(self, fileName +" already exists. Overwrite File?", 'Overwrite File?', wx.YES_NO | wx.ICON_INFORMATION ) if dlg1.ShowModal() != wx.ID_YES: dlg1.Destroy() dlg.Destroy() return self.frame.wxcfg.Write("last_saveComplexFolder", os.path.split(fileName)[0]) from MolKit.pdbWriter import PdbWriter writer = PdbWriter() writer.write(fileName, self.dockings[conformation.name].ligMol, records=['ATOM', 'HETATM', 'CONECT']) #get macromolecule's path macroFile = self.dockings[conformation.name].dlo_list[0].macroFile head = os.path.split(os.path.split(self.dockings[conformation.name].dlo_list[0].filename)[0])[0] receptorPath = os.path.join(head, os.path.basename(macroFile)) mol = self.frame.pmv.mv.readMolecule(receptorPath) writer = PdbWriter() writer.write("pyrx_tmpfile.pdb", mol, records=['ATOM', 'HETATM']) compexFile = open(fileName,'a') txt = open("pyrx_tmpfile.pdb").read() compexFile.write(txt) compexFile.close() os.remove("pyrx_tmpfile.pdb")
if not self.conformations.items: dlg = wx.MessageDialog(self, 'Results table is empty. Please insert new items.', 'A Message Box', wx.OK | wx.ICON_INFORMATION ) dlg.ShowModal() dlg.Destroy() return last_saveSDFFolder = self.frame.wxcfg.Read("last_saveSDFFolder") dlg = wx.FileDialog(self, "Save as SDF", last_saveSDFFolder, "", "Structure Data Format (*.sdf)|*.sdf", style=wx.SAVE) if dlg.ShowModal() == wx.ID_OK: fileName = dlg.GetPath() if fileName[-3:].lower() != 'sdf': fileName = fileName +".sdf" if os.path.exists(fileName): dlg1 = wx.MessageDialog(self, fileName +" already exists. Overwrite File?", 'Overwrite File?', wx.YES_NO | wx.ICON_INFORMATION ) if dlg1.ShowModal() != wx.ID_YES: dlg1.Destroy() dlg.Destroy() return self.frame.wxcfg.Write("last_saveSDFFolder", os.path.split(fileName)[0]) outputfile = pybel.Outputfile("sdf", str(fileName), overwrite=True) if openbabelAutoDockParameters.numberOfPoses == 0: for item in self.conformations.items: self.dockings[item.name].ch.conformations[item.index].coords mol = self.frame.openBabel.ConvertToOB_withCoords(self.dockings[item.name].ligMol, self.dockings[item.name].ch.conformations[item.index].coords) pairdata = openbabel.OBPairData() pairdata.SetAttribute("Binding_Energy") pairdata.SetValue(str(item.binding_energy)) mol.CloneData(pairdata) mol.SetTitle(str(item.name+"_"+str(item.index))) outputfile.write(pybel.Molecule(mol)) else: self.conformations.items.sort(key=lambda x: x.binding_energy) for item in self.conformations.items[0:openbabelAutoDockParameters.numberOfPoses]: self.dockings[item.name].ch.conformations[item.index].coords mol = self.frame.openBabel.ConvertToOB_withCoords(self.dockings[item.name].ligMol, self.dockings[item.name].ch.conformations[item.index].coords) pairdata = openbabel.OBPairData() pairdata.SetAttribute("Binding_Energy") pairdata.SetValue(str(item.binding_energy)) mol.CloneData(pairdata) mol.SetTitle(str(item.name+"_"+str(item.index))) outputfile.write(pybel.Molecule(mol)) outputfile.close()
last_dlgFolder = self.frame.wxcfg.Read("last_dlgFolder") test = None dlg = wx.FileDialog(self, "Choose Docking Log File", last_dlgFolder, '', "Docking Log File (*.dlg)|*.dlg", wx.OPEN) if dlg.ShowModal() == wx.ID_OK: filename = dlg.GetPath() test = self.frame.TryCommand(self.AddDocking, filename) self.frame.wxcfg.Write("last_dlgFolder", os.path.split(filename)[0]) dlg.Destroy() if test: self.frame.controls.SetSelection(self.frame.controls.GetPageIndex(self.frame.autodockWiz))
RuleFilterTemplate, RuleTableFilter, MenuTableFilter #ki = Float
"on_add_new is called to add new element"
columns = [ ObjectColumn(name='name', editable = False, label='Ligand'), # ObjectColumn(name='ki', label='Ki (mM)'), ObjectColumn(name='binding_energy', label='Binding Energy (kcal/mol)=(1)+(2)+(3)-(4)', editable = False), ObjectColumn(name='intermol_energy', label='(1) Intermol Energy', editable = False), ObjectColumn(name='internal_energy', label='(2) Internal Energy', editable = False), ObjectColumn(name='torsional_energy', label='(3) Torsional Energy', editable = False), ObjectColumn(name='unbound_energy', label='(4) Unbound Energy', editable = False), ObjectColumn(name='rmsd', label='RMSD', editable = False), ], reorderable = False, sort_model = True, auto_size = False, on_select = parent.OnSelect, editable = True, show_toolbar = True, row_factory = my_row_factory, filters = [FilterTemplate] , deletable = True, ) Group( Item( 'items', show_label = False, editor = table_editor ), ) ) |