Changeset 1395:ac363dd23d69 in orange-bioinformatics


Ignore:
Timestamp:
05/17/11 12:43:27 (3 years ago)
Author:
ales_erjavec <ales.erjavec@…>
Branch:
default
Convert:
275bde0d6476a2c5e56f1a494308c21abf2d3dc8
Message:

Fixed auto commit functionality.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • widgets/OWVulcanoPlot.py

    r1390 r1395  
    2525 
    2626class GraphSelections(QObject): 
     27    """ Selection manager using a union of rectangle areas  
     28    """ 
    2729    def __init__(self, parent): 
    2830        QObject.__init__(self, parent) 
     
    6567         
    6668class SymetricSelections(GraphSelections): 
     69    """ Selection manager using two symmetric areas extending to 'infinity'   
     70    """ 
    6771    def __init__(self, parent, x=3, y=3): 
    6872        GraphSelections.__init__(self, parent) 
    69         max = 10000 
     73        max = 100000 
    7074        self.selection = [(QPointF(-max, max), QPointF(-x, y)), (QPointF(max, max), QPointF(x, y))] 
    7175        self.updateAxes = None 
     
    315319    def onSelectionChanged(self): 
    316320        self.replot_() 
     321        self.emit(SIGNAL("selectionChanged()")) 
    317322         
    318323    def splitSelected(self): 
     
    350355             
    351356            selected, unselected = self.splitSelected() 
    352             getData = lambda keys, dim: [self.plotValues[attr][dim] for attr in keys] 
    353357             
    354358            self.selectedCurve.setData(selected[:,0], selected[:,1]) 
     
    422426 
    423427class OWVulcanoPlot(OWWidget): 
    424     settingsList =["targetClass", "graph.cutoffX", "graph.cutoffY", "graph.symbolSize", "graph.symetricSelections", "showXTitle", "showYTitle"] 
     428    settingsList = ["graph.cutoffX", "graph.cutoffY", "graph.symbolSize", "graph.symetricSelections", "showXTitle", "showYTitle"] 
    425429    contextHandlers = {"":DomainContextHandler("", [ContextField("graph.symbolSize"), ContextField("graph.cutoffX"), 
    426430                                                    ContextField("graph.cutoffY")]), 
     
    432436        self.outputs =[("Examples with selected attributes", ExampleTable)] 
    433437 
    434         self.genesInColumns = False 
    435         self.targetClass = 0 
     438        self.genes_in_columns = False 
    436439 
    437440        self.showXTitle = True 
    438441        self.showYTitle = True 
    439442 
    440         self.autoCommit = False 
    441         self.selectionChangedFlag = False 
     443        self.auto_commit = False 
     444        self.selection_changed_flag = False 
    442445        self.target_group = None, [] 
    443446        self.label_selections = [] 
    444447 
    445448        self.graph = VulcanoGraph(self) 
     449        self.connect(self.graph, SIGNAL("selectionChanged()"), self.on_selection_changed) 
    446450        self.mainArea.layout().addWidget(self.graph) 
    447  
     451         
    448452        self.loadSettings() 
    449453         
     
    467471        box.layout().addWidget(self.target_widget) 
    468472         
    469         self.genesInColumnsCheck = OWGUI.checkBox(box, self, "genesInColumns", 
     473        self.genesInColumnsCheck = OWGUI.checkBox(box, self, "genes_in_columns", 
    470474                                    "Genes in columns",  
    471475                                    callback=[self.init_from_data, self.plot]) 
     
    492496        box = OWGUI.widgetBox(self.controlArea, "Commit") 
    493497        b = OWGUI.button(box, self, "Commit", callback=self.commit, default=True) 
    494         cb = OWGUI.checkBox(box, self, "autoCommit", "Commit automatically") 
    495         OWGUI.setStopper(self, b, cb, "selectionChangedFlag", self.commitIf) 
     498        cb = OWGUI.checkBox(box, self, "auto_commit", "Commit automatically") 
     499        OWGUI.setStopper(self, b, cb, "selection_changed_flag", self.commit_if) 
    496500 
    497501        self.connect(self.graphButton, SIGNAL("clicked()"), self.graph.saveToFile) 
     
    501505        self.data = None 
    502506        self.target_group = None, [] 
     507        self.current_selection = [] 
    503508         
    504509        self.resize(800, 600) 
     
    524529        self.warning([0,1]) 
    525530        if data: 
    526             self.genesInColumns = not bool(data.domain.classVar) 
     531            self.genes_in_columns = not bool(data.domain.classVar) 
    527532            self.genesInColumnsCheck.setDisabled(not bool(data.domain.classVar)) 
    528             if self.genesInColumns: 
    529                 self.genesInColumns = not data_hints.get_hint(data, "genesinrows", not self.genesInColumns) 
     533            if self.genes_in_columns: 
     534                self.genes_in_columns = not data_hints.get_hint(data, "genesinrows", not self.genes_in_columns) 
    530535            self.openContext("", data) 
    531536        else: 
     
    540545        if self.data: 
    541546            if not self.targets: 
    542                 if self.genesInColumns: 
     547                if self.genes_in_columns: 
    543548                    self.error(0, "Data set with no column labels (attribute tags)") 
    544549                else: 
     
    562567    def update_target_labels(self): 
    563568        if self.data: 
    564             if self.genesInColumns: 
     569            if self.genes_in_columns: 
    565570                items = [a.attributes.items() for a in self.data.domain.attributes] 
    566571                items = reduce(add, items, []) 
     
    620625    def plot(self): 
    621626        self.values = {} 
     627        self.current_selection = [] 
    622628        target_label, target_values = self.target_group 
    623629        self.warning([0, 1]) 
     
    625631        if self.data and target_values: 
    626632            target_label, target_values = self.target_group 
    627             if self.genesInColumns: 
     633            if self.genes_in_columns: 
    628634                target = set([(target_label, value) for value in target_values]) 
    629635            else: 
    630636                target = set(target_values) 
    631637             
    632             ttest = obiExpression.ExpressionSignificance_TTest(self.data, useAttributeLabels=self.genesInColumns) 
     638            ttest = obiExpression.ExpressionSignificance_TTest(self.data, useAttributeLabels=self.genes_in_columns) 
    633639            ind1, ind2 = ttest.test_indices(target) 
    634640             
     
    643649                tt = ttest(target) 
    644650                self.progressBarSet(25) 
    645                 fold = obiExpression.ExpressionSignificance_FoldChange(self.data, useAttributeLabels=self.genesInColumns)(target) 
     651                fold = obiExpression.ExpressionSignificance_FoldChange(self.data, useAttributeLabels=self.genes_in_columns)(target) 
    646652                self.progressBarSet(50) 
    647653            except ZeroDivisionError, ex: 
     
    671677        for key, (logratio, logpval) in self.values.items(): 
    672678            self.graph.tips.addToolTip(logratio, logpval, "<b>%s</b><hr>log<sub>2</sub>(ratio): %.5f<br>p-value: %.5f" \ 
    673                                        %(str(key) if self.genesInColumns else key.name, logratio, math.pow(10, -logpval))) 
    674  
     679                                       %(str(key) if self.genes_in_columns else key.name, logratio, math.pow(10, -logpval))) 
     680             
     681    def selection(self, items=None): 
     682        """ Return the current selection. 
     683        """ 
     684        if items is None: 
     685            items = sorted(self.values.items()) 
     686        values = [val for key, val in items] 
     687        test = self.graph.selection.testSelection(values) 
     688        return test 
     689     
     690    def on_selection_changed(self): 
     691        """ Called when user changes the selection area on the plot. 
     692        """ 
     693        if self.auto_commit: 
     694            selection = list(self.selection()) 
     695            # Did the selection actually change 
     696            if selection != self.current_selection:  
     697                self.current_selection = selection 
     698                self.commit() 
     699        else: 
     700            self.selection_changed_flag = True 
     701     
    675702    def commit(self): 
    676         if self.data and self.genesInColumns: 
     703        if self.data and self.genes_in_columns: 
    677704            items = sorted(self.values.items()) 
    678             test = self.graph.selection.testSelection([val for key, val in items]) 
     705            test = self.selection(items) 
    679706            selected = [self.data[i] for t, (i, value) in zip(test, items) if t] 
    680707            if selected: 
     
    682709            else: 
    683710                data = None 
     711            self.current_selection = list(test) # For testing in on_selection_changed 
    684712        elif self.data: 
    685713            attrs = [(attr, self.values[attr])  for attr in self.data.domain.attributes if attr in self.values] 
    686             test = self.graph.selection.testSelection([val for attr, val in attrs]) 
     714            test = self.selection(attrs) 
     715#            test = self.graph.selection.testSelection([val for attr, val in attrs]) 
    687716            selected = [attr for t, (attr, val) in zip(test, attrs) if t] 
    688717            newdomain = orange.Domain(selected + [self.data.domain.classVar]) 
    689718            newdomain.addmetas(self.data.domain.getmetas()) 
    690719            data = orange.ExampleTable(newdomain, self.data) 
     720            self.current_selection = list(test) # For testing in on_selection_changed 
    691721        else: 
    692722            data = None 
    693723         
    694724        self.send("Examples with selected attributes", data) 
    695         self.selectionChangedFlag = False 
    696  
    697     def commitIf(self): 
    698         if self.autoCommit: 
     725        self.selection_changed_flag = False 
     726 
     727    def commit_if(self): 
     728        if self.auto_commit: 
    699729            self.commit() 
    700730        else: 
    701             self.selectionChangedFlag = True 
     731            self.selection_changed_flag = True 
    702732             
    703733    def settingsToWidgetCallbacktargets(self, handler, context): 
Note: See TracChangeset for help on using the changeset viewer.