Changeset 1710:b36fc0b5814c in orange-bioinformatics


Ignore:
Timestamp:
08/17/12 10:50:42 (21 months ago)
Author:
Ales Erjavec <ales.erjavec@…>
Branch:
default
Message:

Added 'Enrichment Report' output to the GO Browser widget.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • _bioinformatics/widgets/OWGOEnrichmentAnalysis.py

    r1701 r1710  
    8181            painter.end() 
    8282 
     83 
    8384class OWGOEnrichmentAnalysis(OWWidget): 
    84     settingsList=["annotationIndex", "useReferenceDataset", "aspectIndex", "geneAttrIndex", "geneMatcherSettings", 
    85                     "filterByNumOfInstances", "minNumOfInstances", "filterByPValue", "maxPValue", "selectionDirectAnnotation", "selectionDisjoint", "selectionType", 
    86                     "selectionAddTermAsClass", "useAttrNames", "probFunc", "useFDR"] 
    87     contextHandlers = {"": DomainContextHandler("", ["geneAttrIndex", "useAttrNames", "annotationIndex", "geneMatcherSettings"], matchValues=1)} 
     85    settingsList = ["annotationIndex", "useReferenceDataset", "aspectIndex", 
     86                    "geneAttrIndex", "geneMatcherSettings", 
     87                    "filterByNumOfInstances", "minNumOfInstances", 
     88                    "filterByPValue", "maxPValue", "selectionDirectAnnotation", 
     89                    "selectionDisjoint", "selectionType", 
     90                    "selectionAddTermAsClass", "useAttrNames", "probFunc", 
     91                    "useFDR" 
     92                    ] 
     93 
     94    contextHandlers = {"": DomainContextHandler( 
     95                                "", 
     96                                ["geneAttrIndex", "useAttrNames", 
     97                                 "annotationIndex", "geneMatcherSettings"], 
     98                                matchValues=1) 
     99                       } 
     100 
    88101    def __init__(self, parent=None, signalManager=None, name="GO Browser"): 
    89102        OWWidget.__init__(self, parent, signalManager, name) 
    90         self.inputs = [("Cluster Examples", ExampleTable, self.SetClusterDataset, Default), ("Reference Examples", ExampleTable, self.SetReferenceDataset, Single + NonDefault)] #, ("Structured Data", DataFiles, self.chipdata, Single + NonDefault)] 
    91         self.outputs = [("Selected Examples", ExampleTable, Default), ("Unselected Examples", ExampleTable, Default), ("Example With Unknown Genes", ExampleTable, Default)] #, ("Selected Structured Data", DataFiles, Single + NonDefault)] 
     103        self.inputs = [("Cluster Examples", ExampleTable, 
     104                        self.SetClusterDataset, Default), 
     105                       ("Reference Examples", ExampleTable, 
     106                        self.SetReferenceDataset, Single + NonDefault)] 
     107 
     108        self.outputs = [("Selected Examples", ExampleTable, Default), 
     109                        ("Unselected Examples", ExampleTable, Default), 
     110                        ("Example With Unknown Genes", ExampleTable, Default), 
     111                        ("Enrichment Report", ExampleTable)] 
    92112 
    93113        self.annotationIndex = 0 
    94114        self.autoFindBestOrg = False 
    95         self.useReferenceDataset  = 0 
     115        self.useReferenceDataset = 0 
    96116        self.aspectIndex = 0 
    97117        self.geneAttrIndex = 0 
     
    385405            self.useAttrNames = False 
    386406            self.geneAttrIndex = candidateGeneAttrs.index(bestAttr) 
    387      
     407 
    388408    def SetClusterDataset(self, data=None): 
    389409        if not self.annotationCodes: 
     
    400420                filename = "gene_association.%s.tar.gz" % code 
    401421                if filename in self.annotationFiles.values(): 
    402                     self.annotationIndex = [i for i, name in enumerate(self.annotationCodes) \ 
    403                                             if self.annotationFiles[name] ==  filename].pop() 
     422                    self.annotationIndex = \ 
     423                            [i for i, name in enumerate(self.annotationCodes) \ 
     424                             if self.annotationFiles[name] == filename].pop() 
    404425            except Exception: 
    405426                pass 
    406             self.useAttrNames = data_hints.get_hint(data, "genesinrows", self.useAttrNames) 
     427            self.useAttrNames = data_hints.get_hint(data, "genesinrows", 
     428                                                    self.useAttrNames) 
    407429            self.openContext("", data) 
    408430            self.Update() 
     
    416438            self.send("Unselected Examples", None) 
    417439            self.send("Example With Unknown Genes", None) 
     440            self.send("Enrichment Report", None) 
    418441 
    419442    def SetReferenceDataset(self, data=None): 
    420         self.referenceDataset=data 
     443        self.referenceDataset = data 
    421444        self.referenceRadioBox.buttons[1].setDisabled(not bool(data)) 
    422445        self.referenceRadioBox.buttons[1].setText("Reference set") 
     
    427450        elif self.clusterDataset: 
    428451            self.UpdateReferenceSetButton() 
    429              
     452 
    430453    def UpdateReferenceSetButton(self): 
    431454        allgenes, refgenes = None, None 
     
    670693        fromParentDict = {} 
    671694        self.termListViewItemDict = {} 
    672         self.listViewItems=[] 
     695        self.listViewItems = [] 
    673696        enrichment = lambda t:float(len(t[0])) / t[2] * (float(len(self.referenceGenes))/len(self.clusterGenes)) 
    674697        maxFoldEnrichment = max([enrichment(term) for term in self.graph.values()] or [1]) 
     698 
    675699        def addNode(term, parent, parentDisplayNode): 
    676700            if (parent, term) in fromParentDict: 
     
    688712            else: 
    689713                displayNode = parentDisplayNode 
    690              
     714 
    691715            for c in self.treeStructDict[term].children: 
    692716                addNode(c, parent, displayNode) 
    693                  
     717 
    694718        if self.treeStructDict: 
    695719            addNode(self.treeStructRootKey, None, self.listView) 
     
    698722        terms = sorted(terms, key=lambda item: item[1][1]) 
    699723        self.sigTableTermsSorted = [t[0] for t in terms] 
    700          
     724 
    701725        self.sigTerms.clear() 
    702         for i, (id, (genes, p_value, refCount)) in enumerate(terms): 
    703             text = [self.ontology[id].name, str(len(genes)), str(refCount), "%.4f" % p_value, " ,".join(genes), "%.2f" % enrichment((genes, p_value, refCount))] 
    704             item = GOTreeWidgetItem(self.ontology[id], (genes, p_value, refCount), len(self.clusterGenes), 
    705                                     len(self.referenceGenes), maxFoldEnrichment, self.sigTerms) 
    706             item.goId = id 
    707                  
     726        for i, (t_id, (genes, p_value, refCount)) in enumerate(terms): 
     727            item = GOTreeWidgetItem(self.ontology[t_id], 
     728                                    (genes, p_value, refCount), 
     729                                    len(self.clusterGenes), 
     730                                    len(self.referenceGenes), 
     731                                    maxFoldEnrichment, 
     732                                    self.sigTerms) 
     733            item.goId = t_id 
     734 
    708735        self.listView.expandAll() 
    709736        for i in range(4): 
     
    714741        self.listView.setColumnWidth(0, width) 
    715742        self.sigTerms.setColumnWidth(0, width) 
    716          
     743 
     744        # Create and send the enrichemnt report table. 
     745        termsDomain = orange.Domain( 
     746            [orange.StringVariable("GO Term Id"), 
     747             orange.StringVariable("GO Term Name"), 
     748             orange.FloatVariable("Cluster Frequency"), 
     749             orange.FloatVariable("Reference Frequency"), 
     750             orange.FloatVariable("P-value"), 
     751             orange.FloatVariable("Enrichment"), 
     752             orange.StringVariable("Genes") 
     753             ], None) 
     754 
     755        terms = [[t_id, 
     756                  self.ontology[t_id].name, 
     757                  float(len(genes)) / len(self.clusterGenes), 
     758                  float(r_count) / len(self.referenceGenes), 
     759                  p_value, 
     760                  float(len(genes)) / len(self.clusterGenes) * \ 
     761                  float(len(self.referenceGenes)) / r_count, 
     762                  ",".join(genes) 
     763                  ] 
     764                 for t_id, (genes, p_value, r_count) in terms] 
     765 
     766        if terms: 
     767            termsTable = orange.ExampleTable(termsDomain, terms) 
     768        else: 
     769            termsTable = orange.ExampleTable(termsDomain) 
     770        self.send("Enrichment Report", termsTable) 
     771 
    717772    def ViewSelectionChanged(self): 
    718773        if self.selectionChanging: 
    719774            return 
    720          
     775 
    721776        self.selectionChanging = 1 
    722777        self.selectedTerms = [] 
     
    725780        self.ExampleSelection() 
    726781        self.selectionChanging = 0 
    727          
    728          
     782 
    729783    def TableSelectionChanged(self): 
    730784        if self.selectionChanging: 
     
    824878            else: 
    825879                unselectedExamples = None 
    826              
     880 
    827881            self.send("Selected Examples", selectedExamples) 
    828882            self.send("Unselected Examples", unselectedExamples) 
Note: See TracChangeset for help on using the changeset viewer.