Changeset 1328:3f31a534a2c2 in orange-bioinformatics


Ignore:
Timestamp:
02/21/11 15:43:53 (3 years ago)
Author:
ales_erjavec <ales.erjavec@…>
Branch:
default
Convert:
09e6fbc838588fbc8d0318e29c4ce891a0a80232
Message:
  • code cleanup
  • disable Add GO Term as class check box for 'All selected genes' and 'Common term genes'
File:
1 edited

Legend:

Unmodified
Added
Removed
  • widgets/OWGOEnrichmentAnalysis.py

    r1272 r1328  
    110110        self.selectionChanging = 0 
    111111         
    112         self.loadSettings() 
    113          
    114112        # check usage of all evidences 
    115113        for etype in obiGO.evidenceTypesOrdered: 
    116             varName = "useEvidence" + etype  
    117 ##            self.settingsList.append( varName) 
     114            varName = "useEvidence" + etype 
     115            if varName not in self.settingsList:  
     116                self.settingsList.append(varName) 
    118117            code = compile("self.%s = True" % (varName), ".", "single") 
    119118            exec(code) 
    120 #        self.progressBarInit() 
    121 #        with orngServerFiles.DownloadProgress.setredirect(self.progressBarSet): 
    122 #            self.annotationFiles = listAvailable() 
    123 #        self.progressBarFinished() 
    124 #        self.annotationCodes = sorted(self.annotationFiles.keys()) 
    125 #        if not self.annotationCodes: 
    126 #            self.error(0, "No downloaded annotations!!\nUse the Update Genomics Databases widget and download annotations for at least one organism!") 
    127 #        else: 
    128 #            self.error(0) 
    129119        self.annotationCodes = [] 
     120         
     121        self.loadSettings() 
    130122         
    131123        ############# 
     
    138130        self.infoLabel = OWGUI.widgetLabel(box, "No data on input\n") 
    139131         
    140         OWGUI.button(box, self, "Ontology/Annotation Info", callback=self.ShowInfo, tooltip="Show information on loaded ontology and annotations", debuggingEnabled=0) 
     132        OWGUI.button(box, self, "Ontology/Annotation Info", callback=self.ShowInfo, 
     133                     tooltip="Show information on loaded ontology and annotations", 
     134                     debuggingEnabled=0) 
    141135        box = OWGUI.widgetBox(self.inputTab, "Organism", addSpace=True) 
    142         self.annotationComboBox = OWGUI.comboBox(box, self, "annotationIndex", items = self.annotationCodes, callback=self.Update, tooltip="Select organism", debuggingEnabled=0) 
    143          
    144         self.signalManager.freeze(self).push() #(self.signalManager.freezing + 1) ## freeze until annotation combo box is updateded with available annotations. 
     136        self.annotationComboBox = OWGUI.comboBox(box, self, "annotationIndex", 
     137                            items = self.annotationCodes, callback=self.Update, 
     138                            tooltip="Select organism", debuggingEnabled=0) 
     139         
     140        # freeze until annotation combo box is updateded with available annotations. 
     141        self.signalManager.freeze(self).push() 
    145142        QTimer.singleShot(0, self.UpdateOrganismComboBox) 
    146143         
    147         self.geneAttrIndexCombo = OWGUI.comboBox(self.inputTab, self, "geneAttrIndex", box="Gene names", callback=self.Update, tooltip="Use this attribute to extract gene names from input data") 
    148         OWGUI.checkBox(self.geneAttrIndexCombo.box, self, "useAttrNames", "Use data attributes names", disables=[(-1, self.geneAttrIndexCombo)], callback=self.Update, tooltip="Use attribute names for gene names") 
    149         OWGUI.button(self.geneAttrIndexCombo.box, self, "Gene matcher settings", callback=self.UpdateGeneMatcher, tooltip="Open gene matching settings dialog", debuggingEnabled=0) 
    150          
    151         self.referenceRadioBox = OWGUI.radioButtonsInBox(self.inputTab, self, "useReferenceDataset", ["Entire genome", "Reference set (input)"], tooltips=["Use entire genome for reference", "Use genes from Referece Examples input signal as reference"], box="Reference", callback=self.Update) 
     144        self.geneAttrIndexCombo = OWGUI.comboBox(self.inputTab, self, "geneAttrIndex", 
     145                            box="Gene names", callback=self.Update, 
     146                            tooltip="Use this attribute to extract gene names from input data") 
     147        OWGUI.checkBox(self.geneAttrIndexCombo.box, self, "useAttrNames", "Use data attributes names", 
     148                       disables=[(-1, self.geneAttrIndexCombo)], callback=self.Update,  
     149                       tooltip="Use attribute names for gene names") 
     150        OWGUI.button(self.geneAttrIndexCombo.box, self, "Gene matcher settings",  
     151                     callback=self.UpdateGeneMatcher,  
     152                     tooltip="Open gene matching settings dialog",  
     153                     debuggingEnabled=0) 
     154         
     155        self.referenceRadioBox = OWGUI.radioButtonsInBox(self.inputTab, self, "useReferenceDataset",  
     156                                                         ["Entire genome", "Reference set (input)"], 
     157                                                         tooltips=["Use entire genome for reference", 
     158                                                                   "Use genes from Referece Examples input signal as reference"], 
     159                                                         box="Reference", callback=self.Update) 
    152160        self.referenceRadioBox.buttons[1].setDisabled(True) 
    153         OWGUI.radioButtonsInBox(self.inputTab, self, "aspectIndex", ["Biological process", "Cellular component", "Molecular function"], box="Aspect", callback=self.Update) 
     161        OWGUI.radioButtonsInBox(self.inputTab, self, "aspectIndex", ["Biological process", 
     162                                                                     "Cellular component", 
     163                                                                     "Molecular function"],  
     164                                box="Aspect", callback=self.Update) 
     165         
    154166        self.geneAttrIndexCombo.setDisabled(bool(self.useAttrNames)) 
    155 ##        self.geneInfoLabel = OWGUI.label(self.geneAttrIndexCombo.box, self, "0 genes on input signal") 
    156         
    157 ##        box = OWGUI.widgetBox(self.inputTab, "GO update") 
    158 ##        b = OWGUI.button(box, self, "Update", callback = self.UpdateGOAndAnnotation) 
    159 ##        box.setMaximumWidth(150) 
    160167         
    161168        ##Filter tab 
    162169        self.filterTab = OWGUI.createTabPage(self.tabs, "Filter") 
    163170        box = OWGUI.widgetBox(self.filterTab, "Filter GO Term Nodes", addSpace=True) 
    164         OWGUI.checkBox(box, self, "filterByNumOfInstances", "Genes", callback=self.FilterAndDisplayGraph, tooltip="Filter by number of input genes mapped to a term") 
    165 ##        OWGUI.qwtHSlider(box, self, 'minNumOfInstances', label='#:', labelWidth=5, minValue=1, maxValue=100, step=1.0, precision=1, ticks=0, maxWidth=60, callback=self.FilterAndDisplayGraph) 
    166         OWGUI.spin(OWGUI.indentedBox(box), self, 'minNumOfInstances', 1, 100, step=1, label='#:', labelWidth=15, callback=self.FilterAndDisplayGraph, callbackOnReturn=True, tooltip="Min. number of input genes mapped to a term") 
    167         OWGUI.checkBox(box, self, "filterByPValue", "Significance",callback=self.FilterAndDisplayGraph, tooltip="Filter by term p-value") 
    168 ##        OWGUI.qwtHSlider(box, self, 'maxPValue', label='p:', labelWidth=5, minValue=0.001, maxValue=1, step=0.001, precision=3, ticks=0, logarithmic=True, maxWidth=60, callback=self.FilterAndDisplayGraph) 
    169         OWGUI.doubleSpin(OWGUI.indentedBox(box), self, 'maxPValue', 1e-8, 1, step=1e-8,  label='p:', labelWidth=15, callback=self.FilterAndDisplayGraph, callbackOnReturn=True, tooltip="Max term p-value") 
     171        OWGUI.checkBox(box, self, "filterByNumOfInstances", "Genes", 
     172                       callback=self.FilterAndDisplayGraph,  
     173                       tooltip="Filter by number of input genes mapped to a term") 
     174        OWGUI.spin(OWGUI.indentedBox(box), self, 'minNumOfInstances', 1, 100,  
     175                   step=1, label='#:', labelWidth=15,  
     176                   callback=self.FilterAndDisplayGraph,  
     177                   callbackOnReturn=True,  
     178                   tooltip="Min. number of input genes mapped to a term") 
     179         
     180        OWGUI.checkBox(box, self, "filterByPValue", "Significance", 
     181                       callback=self.FilterAndDisplayGraph,  
     182                       tooltip="Filter by term p-value") 
     183        OWGUI.doubleSpin(OWGUI.indentedBox(box), self, 'maxPValue', 1e-8, 1,  
     184                         step=1e-8,  label='p:', labelWidth=15,  
     185                         callback=self.FilterAndDisplayGraph,  
     186                         callbackOnReturn=True,  
     187                         tooltip="Max term p-value") 
    170188        box = OWGUI.widgetBox(box, "Significance test") 
    171         OWGUI.radioButtonsInBox(box, self, "probFunc", ["Binomial", "Hypergeometric"], tooltips=["Use binomial distribution test", "Use hypergeometric distribution test"], callback=self.Update) 
    172         OWGUI.checkBox(box, self, "useFDR", "Use FDR (False Discovery Rate)", callback=self.Update, tooltip="Use False Discovery Rate correction") 
    173         box = OWGUI.widgetBox(self.filterTab, "Evidence codes in annotation", addSpace=True) 
    174 ##        box.setMaximumWidth(150) 
     189        OWGUI.radioButtonsInBox(box, self, "probFunc", ["Binomial", "Hypergeometric"],  
     190                                tooltips=["Use binomial distribution test",  
     191                                          "Use hypergeometric distribution test"],  
     192                                callback=self.Update) 
     193        OWGUI.checkBox(box, self, "useFDR", "Use FDR (False Discovery Rate)",  
     194                       callback=self.Update,  
     195                       tooltip="Use False Discovery Rate correction") 
     196        box = OWGUI.widgetBox(self.filterTab, "Evidence codes in annotation",  
     197                              addSpace=True) 
    175198        self.evidenceCheckBoxDict = {} 
    176199        for etype in obiGO.evidenceTypesOrdered: 
    177             self.evidenceCheckBoxDict[etype] = OWGUI.checkBox(box, self, "useEvidence"+etype, etype, callback=self.Update, tooltip=obiGO.evidenceTypes[etype]) 
     200            self.evidenceCheckBoxDict[etype] = OWGUI.checkBox(box, self, "useEvidence"+etype, etype, 
     201                                            callback=self.Update, tooltip=obiGO.evidenceTypes[etype]) 
    178202         
    179203        ##Select tab 
    180204        self.selectTab = OWGUI.createTabPage(self.tabs, "Select") 
    181         #box = OWGUI.widgetBox(self.selectTab, "Annotated genes", addSpace=True) 
    182         box = OWGUI.radioButtonsInBox(self.selectTab, self, "selectionDirectAnnotation", ["Directly or Indirectly", "Directly"], box="Annotated genes", callback=self.ExampleSelection) 
     205        box = OWGUI.radioButtonsInBox(self.selectTab, self, "selectionDirectAnnotation",  
     206                                      ["Directly or Indirectly", "Directly"],  
     207                                      box="Annotated genes",  
     208                                      callback=self.ExampleSelection) 
     209         
    183210        box = OWGUI.widgetBox(self.selectTab, "Output", addSpace=True) 
    184 ##        OWGUI.checkBox(box, self, "selectionDisjoint", "Disjoint/Inclusive", callback=self.ExampleSelection) 
    185         OWGUI.radioButtonsInBox(box, self, "selectionDisjoint", btnLabels=["All selected genes", "Term-specific genes", "Common term genes"], tooltips=["Outputs genes annotated to all selected GO terms", "Outputs genes that appear in only one of selected GO terms", "Outputs genes common to all selected GO terms"], callback=self.ExampleSelection) 
    186         OWGUI.checkBox(box, self, "selectionAddTermAsClass", "Add GO Term as class", callback=self.ExampleSelection) 
     211        OWGUI.radioButtonsInBox(box, self, "selectionDisjoint",  
     212                                btnLabels=["All selected genes",  
     213                                           "Term-specific genes",  
     214                                           "Common term genes"],  
     215                                tooltips=["Outputs genes annotated to all selected GO terms",  
     216                                          "Outputs genes that appear in only one of selected GO terms",  
     217                                          "Outputs genes common to all selected GO terms"],  
     218                                callback=[self.ExampleSelection, 
     219                                          self.UpdateAddClassButton]) 
     220        self.addClassCB = OWGUI.checkBox(box, self, "selectionAddTermAsClass", 
     221                                         "Add GO Term as class",  
     222                                         callback=self.ExampleSelection) 
    187223 
    188224        # ListView for DAG, and table for significant GOIDs 
    189225        self.DAGcolumns = ['GO term', 'Cluster', 'Reference', 'p value', 'Genes', 'Enrichment'] 
    190         #self.layout=QVBoxLayout(self.mainArea) 
     226         
    191227        self.splitter = QSplitter(Qt.Vertical, self.mainArea) 
    192228        self.mainArea.layout().addWidget(self.splitter) 
     
    250286            self.progressBarFinished() 
    251287            self.annotationCodes = sorted(self.annotationFiles.keys()) 
    252     #        if not self.annotationCodes: 
    253     #            self.error(0, "No downloaded annotations!!\nUse the Update Genomics Databases widget and download annotations for at least one organism!") 
    254     #        else: 
    255     #            self.error(0) 
    256288            self.annotationComboBox.clear() 
    257289            self.annotationComboBox.addItems(self.annotationCodes) 
    258 #            self.annotationIndex = self.annotationCodes.index(currAnnotationCode) if currAnnotationCode in self.annotationCodes else 0 
    259290            self.annotationComboBox.setCurrentIndex(self.annotationIndex) 
    260 #            print "update", self.annotationIndex, currAnnotationCode 
    261291        finally: 
    262             self.signalManager.freeze(self).pop() #setFreeze(self.signalManager.freezing - 1) 
     292            self.signalManager.freeze(self).pop() 
    263293             
    264294    def UpdateGeneMatcher(self): 
     
    285315        w.show() 
    286316        self.UpdateAnnotationComboBox() 
    287 ##        self.connect(w, SIGNAL("closed()"), self.UpdateAnnotationComboBox) 
    288317 
    289318    def UpdateAnnotationComboBox(self): 
     
    298327        self.annotationComboBox.addItems(self.annotationCodes) 
    299328        self.annotationComboBox.setCurrentIndex(index) 
    300 ##        print "updated annotations" 
    301329        if not self.annotationCodes: 
    302330            self.error(0, "No downloaded annotations!!\nClick the update button and update annotationa for at least one organism!") 
     
    306334    def SetGenesComboBox(self): 
    307335        self.candidateGeneAttrs = self.clusterDataset.domain.variables + self.clusterDataset.domain.getmetas().values() 
    308         self.candidateGeneAttrs = filter(lambda v: v.varType==orange.VarTypes.String or v.varType==orange.VarTypes.Other or v.varType==orange.VarTypes.Discrete, self.candidateGeneAttrs) 
     336        self.candidateGeneAttrs = filter(lambda v: v.varType in [orange.VarTypes.String, 
     337                                                                 orange.VarTypes.Other, 
     338                                                                 orange.VarTypes.Discrete],  
     339                                         self.candidateGeneAttrs) 
    309340        self.geneAttrIndexCombo.clear() 
    310341        self.geneAttrIndexCombo.addItems([a.name for a in  self.candidateGeneAttrs]) 
     
    324355            organismGenes = {currCode: set(geneNames)} 
    325356        candidateGeneAttrs = self.clusterDataset.domain.attributes + self.clusterDataset.domain.getmetas().values() 
    326         candidateGeneAttrs = filter(lambda v: v.varType==orange.VarTypes.String or v.varType==orange.VarTypes.Other or v.varType==orange.VarTypes.Discrete, candidateGeneAttrs) 
     357        candidateGeneAttrs = filter(lambda v: v.varType in [orange.VarTypes.String,  
     358                                                            orange.VarTypes.Other,  
     359                                                            orange.VarTypes.Discrete],  
     360                                    candidateGeneAttrs) 
    327361        attrNames = [v.name for v in self.clusterDataset.domain.variables] 
    328362        cn = {} 
     
    341375        cn.sort(lambda a,b:-cmp(a[1],b[1])) 
    342376        ((bestAttr, organism), count) = cn[0] 
    343 ##        print "match count:", count 
    344377        if bestAttr=="_var_names_" and count<=len(attrNames)/10.0 or \ 
    345378           bestAttr!="_var_names_" and count<=len(self.clusterDataset)/10.0: 
     
    349382        if bestAttr=="_var_names_": 
    350383            self.useAttrNames = True 
    351 ##            self.geneAttrIndexCombo.setDisabled(True) 
    352384            self.geneAttrIndex = 0 
    353385        else: 
    354386            self.useAttrNames = False 
    355 ##            self.geneAttrIndexCombo.setDisabled(False) 
    356387            self.geneAttrIndex = candidateGeneAttrs.index(bestAttr) 
    357388     
    358389    def SetClusterDataset(self, data=None): 
    359390        if not self.annotationCodes: 
    360             #this is a hack setFreeze(1) should prevent signal processing before we initialize annotationCodes 
    361391            QTimer.singleShot(200, lambda: self.SetClusterDataset(data)) 
    362392            return 
     
    366396        if data: 
    367397            self.SetGenesComboBox() 
    368 #            id = getattr(data, "taxid", None) 
    369398            try: 
    370399                taxid = data_hints.get_hint(data, "taxid", "") 
     
    376405            except Exception: 
    377406                pass 
    378 #            self.useAttrNames = getattr(data, "genesinrows", self.useAttrNames) 
    379407            self.useAttrNames = data_hints.get_hint(data, "genesinrows", self.useAttrNames) 
    380408            self.openContext("", data) 
    381 #            if not self.ontology: 
    382 #                self.LoadOntology() 
    383 #            if not self.annotations or self.annotationCodes[min(self.annotationIndex, len(self.annotationCodes)-1)]!= self.loadedAnnotationCode: 
    384 #                self.LoadAnnotation() 
    385 #             
    386 #            self.Load() 
    387 #            self.FilterUnknownGenes() 
    388 #            graph = self.Enrichment() 
    389 #            self.SetGraph(graph) 
    390409            self.Update() 
    391410        else: 
     
    469488            count += 1 
    470489        pb.iter += count*100 
    471 #        self.progressBarInit() 
     490         
    472491        for i, args in enumerate(calls): 
    473 #            with orngServerFiles.DownloadProgress.setredirect(lambda value: self.progressBarSet(100.0 * i / count + value/count)): 
    474 #                print args 
    475492            orngServerFiles.localpath_download(*args, **dict(callback=pb.advance)) 
    476493             
    477494        i = len(calls) 
    478495        if not self.ontology: 
    479             self.ontology = obiGO.Ontology(progressCallback=lambda value: pb.advance()) #self.progressBarSet(100.0 * i / count + value/count)) 
     496            self.ontology = obiGO.Ontology(progressCallback=lambda value: pb.advance()) 
    480497            i+=1 
    481498        if org != self.loadedAnnotationCode: 
    482499            code = self.annotationFiles[org].split(".")[-3] 
    483             self.annotations = obiGO.Annotations(code, genematcher=obiGene.GMDirect(), progressCallback=lambda value: pb.advance())#self.progressBarSet(100.0 * i / count + value/count)) 
     500            self.annotations = obiGO.Annotations(code, genematcher=obiGene.GMDirect(), progressCallback=lambda value: pb.advance()) 
    484501            i+=1 
    485502            self.loadedAnnotationCode = org 
     
    495512        if finish: 
    496513            pb.finish() 
    497 #        self.progressBarFinished() 
    498514             
    499515    def SetGeneMatcher(self): 
     
    511527                        print ex 
    512528            matchers.reverse() 
    513 #            print matchers 
    514529            self.annotations.genematcher = obiGene.matcher(matchers) 
    515 #            self.progressBarInit() 
    516 #            with orngServerFiles.DownloadProgress.setredirect(self.progressBarSet): 
    517530            self.annotations.genematcher.set_targets(self.annotations.geneNames) 
    518 #            self.progressBarFinished() 
    519531             
    520532    def Enrichment(self, pb=None): 
     
    590602                evidences.append(etype) 
    591603        aspect = ["P", "C", "F"][self.aspectIndex] 
    592 #        self.progressBarInit() 
     604         
    593605        if clusterGenes: 
    594606            self.terms = terms = self.annotations.GetEnrichedTerms(clusterGenes, referenceGenes, evidences, aspect=aspect, 
    595607                                                                   prob=self.probFunctions[self.probFunc], useFDR=self.useFDR, 
    596                                                                    progressCallback=lambda value:pb.advance() )#self.progressBarSet) 
    597 #            if self.useFDR: 
    598 #                terms = sorted(terms.items(), key=lambda (_1, (_2, p, _3)): p) 
    599 #                p_vals = obiProb.FDR([p for _, (_, p, _) in terms]) 
    600 #                self.terms = terms = dict([(id, (genes, p, ref)) for p, (id, (genes, _, ref)) in zip(p_vals, terms)]) 
     608                                                                   progressCallback=lambda value:pb.advance() ) 
    601609        else: 
    602610            self.terms = terms = {} 
     
    605613        else: 
    606614            self.warning(0) 
    607 #        self.progressBarFinished() 
     615             
    608616        pb.finish() 
    609617        self.treeStructDict = {} 
     
    647655        self.listViewItems=[] 
    648656        self.sigTerms.clear() 
    649         #self.sigTableItems=[] 
    650657 
    651658    def DisplayGraph(self): 
     
    680687        terms.sort(lambda a,b:cmp(a[1][1],b[1][1])) 
    681688        self.sigTableTermsSorted = [t[0] for t in terms] 
    682 ##        self.sigTermsTable.setRowCount(len(terms)) 
     689         
    683690        self.sigTerms.clear() 
    684691        for i, (id, (genes, p_value, refCount)) in enumerate(terms): 
    685 ##            text = [go.loadedGO.termDict[id].name, str(len(genes)), str(refCount), "%.4f" % p_value, " ,".join(genes), "%.2f" % enrichment((genes, p_value, refCount))] 
    686692            text = [self.ontology[id].name, str(len(genes)), str(refCount), "%.4f" % p_value, " ,".join(genes), "%.2f" % enrichment((genes, p_value, refCount))] 
    687693            item = GOTreeWidgetItem(self.ontology[id], (genes, p_value, refCount), len(self.clusterGenes), 
    688694                                    len(self.referenceGenes), maxFoldEnrichment, self.sigTerms) 
    689695            item.goId = id 
    690 ##            for j,t in enumerate(text): 
    691 ##                self.sigTermsTable.setItem(i, j, QTableWidgetItem(t)) 
    692696                 
    693697        self.listView.expandAll() 
     
    696700            self.sigTerms.resizeColumnToContents(i) 
    697701        self.sigTerms.resizeColumnToContents(5) 
    698 ##        print [item.sizeHint(0).width() for item in self.listViewItems] 
    699702        width = min(self.listView.columnWidth(0), 350) 
    700703        self.listView.setColumnWidth(0, width) 
     
    707710        self.selectionChanging = 1 
    708711        self.selectedTerms = [] 
    709         #selected = filter(lambda lvi: lvi.isSelected(), self.listViewItems) 
    710712        selected = self.listView.selectedItems() 
    711713        self.selectedTerms = list(set([lvi.term.id for lvi in selected])) 
     
    725727            item = self.sigTerms.topLevelItem(i) 
    726728            selected = item.goId in selectedIds 
    727 ##            term = self.sigTableTermsSorted[row] 
    728729            term = item.goId 
    729730             
     
    734735                try: 
    735736                    lvi.setSelected(selected) 
    736                     #self.listView.repaintItem(lvi) 
    737737                    if selected: lvi.setExpanded(True) 
    738738                except RuntimeError:    ##Underlying C/C++ object deleted (why??) 
    739 ##                    print "error 11" 
    740739                    pass 
    741740                 
    742         #self.listView.triggerUpdate() 
    743741        self.ExampleSelection() 
    744742        self.selectionChanging = 0 
    745743             
    746744     
     745    def UpdateAddClassButton(self): 
     746        self.addClassCB.setEnabled(self.selectionDisjoint == 1) 
     747         
    747748    def ExampleSelection(self): 
    748749        selectedExamples = [] 
     
    759760            if getattr(self, "useEvidence"+etype): 
    760761                evidences.append(etype) 
    761         allTerms = self.annotations.GetAnnotatedTerms(selectedGenes, directAnnotationOnly=self.selectionDirectAnnotation, evidenceCodes=evidences) 
     762        allTerms = self.annotations.GetAnnotatedTerms(selectedGenes,  
     763                          directAnnotationOnly=self.selectionDirectAnnotation,  
     764                          evidenceCodes=evidences) 
    762765             
    763766        if self.selectionDisjoint: 
    764             ##count = dict([(g, 0) for g in self.clusterGenes]) 
    765767            count = defaultdict(int) 
    766768            for term in self.selectedTerms: 
    767                 ##for g in self.graph[term][0]: 
    768769                for g in allTerms.get(term, []): 
    769770                    count[g]+=1 
     
    781782        elif self.candidateGeneAttrs: 
    782783            geneAttr = self.candidateGeneAttrs[min(self.geneAttrIndex, len(self.candidateGeneAttrs)-1)] 
    783             newClass = orange.EnumVariable("GO Term", values=list(self.selectedTerms)) 
    784             newDomain = orange.Domain(self.clusterDataset.domain.variables, newClass) 
     784            if self.selectionDisjoint == 1: 
     785                goVar = orange.EnumVariable("GO Term", values=list(self.selectedTerms)) 
     786                newDomain = orange.Domain(self.clusterDataset.domain.variables, goVar) 
     787                newDomain.addmetas(self.clusterDataset.domain.getmetas()) 
     788#            else: 
     789#                goVar = orange.StringVariable("GO Terms") 
     790#                newDomain = orange.Domain(self.clusterDataset.domain) 
     791#                newDomain.addmeta(orange.newmetaid(), goVar) 
     792             
     793             
    785794            for ex in self.clusterDataset: 
    786795                if not ex[geneAttr].isSpecial() and any(gene in selectedGenes for gene in str(ex[geneAttr]).split(",")): 
    787                     if self.selectionDisjoint and self.selectionAddTermAsClass: 
    788                         c = filter(lambda term: any(gene in self.graph[term][0] for gene in str(ex[geneAttr]).split(",")) , self.selectedTerms)[0] 
     796                    if self.selectionDisjoint == 1 and self.selectionAddTermAsClass: 
     797                        terms = filter(lambda term: any(gene in self.graph[term][0] for gene in str(ex[geneAttr]).split(",")) , self.selectedTerms) 
     798                        term = sorted(terms)[0] 
    789799                        ex =  orange.Example(newDomain, ex) 
    790                         ex.setclass(newClass(c)) 
     800                        ex[goVar] = goVar(term) 
     801#                        ex.setclass(newClass(term)) 
    791802                    selectedExamples.append(ex) 
    792803                else: 
     
    846857            item = self.sigTerms.topLevelItem(index) 
    847858            tableText += printTree(item, 0, 1)  
    848 ###            text += '<tr>' + ''.join('<td>%s</td>' % item.text(i) for i in (range(4) + [5])) + '</tr>' 
    849859        tableText += '</table>'  
    850860         
     
    875885        self.setText(0, term.name) 
    876886        fmt = "%" + str(-int(math.log(nClusterGenes))) + "i (%.2f%%)" 
    877 ##        self.setText(1, "%i (%.2f%%)" % (len(enrichmentResult[0]), 100.0*len(self.enrichmentResult[0])/nClusterGenes)) 
    878887        self.setText(1, fmt % (len(enrichmentResult[0]), 100.0*len(self.enrichmentResult[0])/nClusterGenes)) 
    879888        fmt = "%" + str(-int(math.log(nRefGenes))) + "i (%.2f%%)" 
    880 ##        self.setText(2, "%i (%.2f%%)" % (enrichmentResult[2], 100.0*enrichmentResult[2]/nRefGenes)) 
    881889        self.setText(2, fmt % (enrichmentResult[2], 100.0*enrichmentResult[2]/nRefGenes)) 
    882890        self.setText(3, "%.4f" % enrichmentResult[1]) 
    883891        self.setText(4, ", ".join(enrichmentResult[0])) 
    884         self.setText(5, "%.2f" % (enrichment(enrichmentResult))) #(float(len(self.graph[term][0]))/self.graph[term][2])) 
     892        self.setText(5, "%.2f" % (enrichment(enrichmentResult))) 
    885893        self.setToolTip(0, "<p>" + term.__repr__()[6:].strip().replace("\n", "<br>")) 
    886894        self.sortByData = [term.name, len(self.enrichmentResult[0]), enrichmentResult[2], enrichmentResult[1], ", ".join(enrichmentResult[0]), enrichment(enrichmentResult)] 
Note: See TracChangeset for help on using the changeset viewer.