Changeset 1360:fc9ab2505af0 in orange-bioinformatics


Ignore:
Timestamp:
04/06/11 13:51:20 (3 years ago)
Author:
ales_erjavec <ales.erjavec@…>
Branch:
default
Convert:
e77aa6af0d5bef63659e991a970633a22ffa1045
Message:

Bug fixes in Gene Selection widget.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • widgets/OWFeatureSelection.py

    r1226 r1360  
    6060        self.master.CommitIf() 
    6161             
     62def disable_controls(method): 
     63    """ Disable the widget's control area during the duration of this call. 
     64    """ 
     65    @wraps(method) 
     66    def f(self, *args, **kwargs): 
     67        self.controlArea.setDisabled(True) 
     68        qApp.processEvents() 
     69        try: 
     70            return method(self, *args, **kwargs) 
     71        finally: 
     72            self.controlArea.setDisabled(False) 
     73    return f 
    6274         
    6375class OWFeatureSelection(OWWidget): 
     
    102114        self.histogram.show() 
    103115         
    104         box = OWGUI.widgetBox(self.controlArea, "Info") #, addSpace=True) 
     116        box = OWGUI.widgetBox(self.controlArea, "Info") 
    105117        self.dataInfoLabel = OWGUI.widgetLabel(box, "\n\n") 
    106118        self.selectedInfoLabel = OWGUI.widgetLabel(box, "") 
    107119 
    108         #self.testRadioBox = OWGUI.radioButtonsInBox(self.controlArea, self, "methodIndex", [sm[0] for sm in self.scoreMethods], box="Scoring Method", callback=self.Update, addSpace=True) 
    109         # OWGUI.comboBoxWithCaption(box, self, "ptype", items=nth(self.permutationTypes, 0), \ 
    110         #             tooltip="Permutation type.", label="Permutate") 
    111120        box1 = OWGUI.widgetBox(self.controlArea, "Scoring Method") 
    112         self.testRadioBox = OWGUI.comboBox(box1, self, "methodIndex", items=[sm[0] for sm in self.scoreMethods], callback=self.Update) 
    113         self.dataLabelComboBox = OWGUI.comboBox(box1, self, "dataLabelIndex", "Attribute labels", callback=self.Update, tooltip="Use attribute labels for score computation") 
    114 ##        self.useClassCheck = OWGUI.checkBox(box1, self, "useClass", "Use class information", callback=self.Update, tooltip="Use class information for score computation", disables=[self.da) 
    115      
    116         ZoomSelectToolbar(self, self.controlArea, self.histogram, buttons=[ZoomSelectToolbar.IconSelect, ZoomSelectToolbar.IconZoom, ZoomSelectToolbar.IconPan]) 
    117 #        OWGUI.separator(self.controlArea) 
    118          
    119         box = OWGUI.widgetBox(self.controlArea, "Selection") #, addSpace=True) 
     121        self.testRadioBox = OWGUI.comboBox(box1, self, "methodIndex", 
     122                                    items=[sm[0] for sm in self.scoreMethods], 
     123                                    callback=self.Update) 
     124         
     125        self.dataLabelComboBox = OWGUI.comboBox(box1, self, "dataLabelIndex", "Attribute labels", 
     126                                                callback=self.Update, 
     127                                                tooltip="Use attribute labels for score computation") 
     128     
     129        ZoomSelectToolbar(self, self.controlArea, self.histogram, 
     130                          buttons=[ZoomSelectToolbar.IconSelect, 
     131                                   ZoomSelectToolbar.IconZoom, 
     132                                   ZoomSelectToolbar.IconPan]) 
     133         
     134        box = OWGUI.widgetBox(self.controlArea, "Selection") 
    120135        box.layout().setSpacing(0) 
    121136        callback = self.SetBoundary 
    122         self.upperBoundarySpin = OWGUI.doubleSpin(box, self, "histogram.upperBoundary", min=-1e6, max=1e6, step= 1e-6, label="Upper threshold:", callback=callback, callbackOnReturn=True) 
    123         self.lowerBoundarySpin = OWGUI.doubleSpin(box, self, "histogram.lowerBoundary", min=-1e6, max=1e6, step= 1e-6, label="Lower threshold:", callback=callback, callbackOnReturn=True) 
    124         check = OWGUI.checkBox(box, self, "computeNullDistribution", "Compute null distribution", callback=self.Update) 
    125  
    126         check.disables.append(OWGUI.spin(box, self, "permutationsCount", min=1, max=10, label="Permutations:", callback=self.Update, callbackOnReturn=True)) 
     137        self.upperBoundarySpin = OWGUI.doubleSpin(box, self, "histogram.upperBoundary", 
     138                                                  min=-1e6, max=1e6, step= 1e-6, 
     139                                                  label="Upper threshold:",  
     140                                                  callback=callback,  
     141                                                  callbackOnReturn=True) 
     142         
     143        self.lowerBoundarySpin = OWGUI.doubleSpin(box, self, "histogram.lowerBoundary",  
     144                                                  min=-1e6, max=1e6, step= 1e-6,  
     145                                                  label="Lower threshold:",  
     146                                                  callback=callback,  
     147                                                  callbackOnReturn=True) 
     148         
     149        check = OWGUI.checkBox(box, self, "computeNullDistribution", "Compute null distribution", 
     150                               callback=self.Update) 
     151 
     152        check.disables.append(OWGUI.spin(box, self, "permutationsCount", min=1, max=10,  
     153                                         label="Permutations:", callback=self.Update,  
     154                                         callbackOnReturn=True)) 
    127155 
    128156        box1 = OWGUI.widgetBox(box, orientation='horizontal') 
    129         check.disables.append(OWGUI.doubleSpin(box1, self, "selectPValue" , min=2e-7, max=1.0, step=1e-7, label="P-value:")) 
     157        check.disables.append(OWGUI.doubleSpin(box1, self, "selectPValue",  
     158                                               min=2e-7, max=1.0, step=1e-7,  
     159                                               label="P-value:")) 
    130160        check.disables.append(OWGUI.button(box1, self, "Select", callback=self.SelectPBest)) 
    131161        check.makeConsistent() 
     
    139169        cb = OWGUI.checkBox(box, self, "autoCommit", "Commit on change") 
    140170        OWGUI.setStopper(self, b, cb, "dataChangedFlag", self.Commit) 
    141         OWGUI.checkBox(box, self, "addScoresToOutput", "Add gene scores to output", callback=self.CommitIf)  
     171        OWGUI.checkBox(box, self, "addScoresToOutput", "Add gene scores to output", 
     172                       callback=self.CommitIf)  
    142173         
    143174        OWGUI.rubber(self.controlArea) 
     
    185216        self.dataLabelIndex = max(min(self.dataLabelIndex, len(self.dataLabels) - 1), 0) 
    186217         
    187         if not self.dataLabels: 
     218        if self.data and not self.dataLabels: 
    188219            self.error(1, "Cannot compute gene scores! Gene Selection widget requires a data-set with a discrete class variable or attribute labels!") 
    189220            self.data = None 
     
    207238        return [score for run in dist for k, score in run if score is not ma.masked] 
    208239         
    209     def disable_controls(method): 
    210         @wraps(method) 
    211         def f(self, *args, **kwargs): 
    212             self.controlArea.setDisabled(True) 
    213             qApp.processEvents() 
    214             try: 
    215                 return method(self, *args, **kwargs) 
    216             finally: 
    217                 self.controlArea.setDisabled(False) 
    218         return f 
    219                  
    220     @disable_controls 
    221     def Update(self):         
     240    def Update(self): 
    222241        if not self.data: 
    223242            self.histogram.removeDrawingCurves() 
    224243            self.histogram.clear() 
    225             return 
     244            self.histogram.replot() 
     245        else: 
     246            self.UpdateScores() 
     247             
     248    @disable_controls 
     249    def UpdateScores(self): 
     250        """ Compute the scores and update the histogram. 
     251        """ 
    226252        targetLabel = self.dataLabels[self.dataLabelIndex] 
    227253        if targetLabel == "(None)": 
Note: See TracChangeset for help on using the changeset viewer.