Ignore:
Timestamp:
01/26/12 16:13:31 (2 years ago)
Author:
mstajdohar
Branch:
default
Message:

Bug fixes.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • orange/OrangeWidgets/OWNxHist.py

    r9421 r9577  
    1515 
    1616class OWNxHist(): 
    17      
     17 
    1818    def __init__(self, parent=None, type=0): 
    1919        self.parent = parent 
    20          
     20 
    2121    def addHistogramControls(self, parent=None): 
    2222        # set default settings 
     
    3232        self.excludeLimit = 1 
    3333        self.percentil = 0 
    34          
     34 
    3535        if parent is None: 
    3636            parent = self.controlArea 
    37              
    38         boxGeneral = OWGUI.widgetBox(parent, box = "Distance boundaries") 
    39          
    40         ribg = OWGUI.widgetBox(boxGeneral, None, orientation="horizontal", addSpace = False) 
     37 
     38        boxGeneral = OWGUI.widgetBox(parent, box="Distance boundaries") 
     39 
     40        ribg = OWGUI.widgetBox(boxGeneral, None, orientation="horizontal", addSpace=False) 
    4141        OWGUI.lineEdit(ribg, self, "spinLowerThreshold", "Lower", orientation='horizontal', callback=self.changeLowerSpin, valueType=float, enterPlaceholder=True, controlWidth=100) 
    42         OWGUI.lineEdit(ribg, self, "spinUpperThreshold", "Upper    ", orientation='horizontal', callback=self.changeUpperSpin, valueType=float, enterPlaceholder=True,controlWidth=100) 
     42        OWGUI.lineEdit(ribg, self, "spinUpperThreshold", "Upper    ", orientation='horizontal', callback=self.changeUpperSpin, valueType=float, enterPlaceholder=True, controlWidth=100) 
    4343        ribg.layout().addStretch(1) 
    4444        #ribg = OWGUI.radioButtonsInBox(boxGeneral, self, "andor", [], orientation='horizontal', callback = self.generateGraph) 
     
    4747        #b.setEnabled(False) 
    4848        #ribg.hide(False) 
    49          
    50         ribg = OWGUI.widgetBox(boxGeneral, None, orientation="horizontal", addSpace = False) 
     49 
     50        ribg = OWGUI.widgetBox(boxGeneral, None, orientation="horizontal", addSpace=False) 
    5151        OWGUI.spin(ribg, self, "kNN", 0, 1000, 1, label="kNN   ", orientation='horizontal', callback=self.generateGraph, callbackOnReturn=1, controlWidth=100) 
    5252        OWGUI.doubleSpin(ribg, self, "percentil", 0, 100, 0.1, label="Percentil", orientation='horizontal', callback=self.setPercentil, callbackOnReturn=1, controlWidth=100) 
     
    5454        # Options 
    5555        self.attrColor = "" 
    56         ribg = OWGUI.radioButtonsInBox(parent, self, "netOption", [], "Options", callback = self.generateGraph) 
    57         OWGUI.appendRadioButton(ribg, self, "netOption", "All vertices", callback = self.generateGraph) 
    58         hb = OWGUI.widgetBox(ribg, None, orientation="horizontal", addSpace = False) 
    59         OWGUI.appendRadioButton(ribg, self, "netOption", "Exclude components with less nodes than:", insertInto=hb, callback=self.generateGraph) 
    60         OWGUI.spin(hb, self, "excludeLimit", 1, 100, 1, callback = (lambda h=True: self.generateGraph(h))) 
    61         OWGUI.appendRadioButton(ribg, self, "netOption", "Largest connected component only", callback = self.generateGraph) 
     56        ribg = OWGUI.radioButtonsInBox(parent, self, "netOption", [], "Options", callback=self.generateGraph) 
     57        OWGUI.appendRadioButton(ribg, self, "netOption", "All vertices", callback=self.generateGraph) 
     58        hb = OWGUI.widgetBox(ribg, None, orientation="horizontal", addSpace=False) 
     59        OWGUI.appendRadioButton(ribg, self, "netOption", "Large components only. Min nodes:", insertInto=hb, callback=self.generateGraph) 
     60        OWGUI.spin(hb, self, "excludeLimit", 1, 100, 1, callback=(lambda h=True: self.generateGraph(h))) 
     61        OWGUI.appendRadioButton(ribg, self, "netOption", "Largest connected component only", callback=self.generateGraph) 
    6262        OWGUI.appendRadioButton(ribg, self, "netOption", "Connected component with vertex") 
    6363        self.attribute = None 
    6464        self.attributeCombo = OWGUI.comboBox(parent, self, "attribute", box="Filter attribute", orientation='horizontal')#, callback=self.setVertexColor) 
    65          
     65 
    6666        ribg = OWGUI.radioButtonsInBox(parent, self, "dstWeight", [], "Distance -> Weight", callback=self.generateGraph) 
    67         hb = OWGUI.widgetBox(ribg, None, orientation="horizontal", addSpace = False) 
     67        hb = OWGUI.widgetBox(ribg, None, orientation="horizontal", addSpace=False) 
    6868        OWGUI.appendRadioButton(ribg, self, "dstWeight", "Weight := distance", insertInto=hb, callback=self.generateGraph) 
    6969        OWGUI.appendRadioButton(ribg, self, "dstWeight", "Weight := 1 - distance", insertInto=hb, callback=self.generateGraph) 
    70          
     70 
    7171        self.label = '' 
    7272        self.searchString = OWGUI.lineEdit(self.attributeCombo.box, self, "label", callback=self.setSearchStringTimer, callbackOnType=True) 
    7373        self.searchStringTimer = QTimer(self) 
    7474        self.connect(self.searchStringTimer, SIGNAL("timeout()"), self.generateGraph) 
    75          
     75 
    7676        if str(self.netOption) != '3': 
    7777            self.attributeCombo.box.setEnabled(False) 
    78              
     78 
    7979    def setPercentil(self): 
    8080        self.spinLowerThreshold = self.histogram.minValue 
    81         net = orngNetwork.Network(self.matrix.dim, 0) 
    82         lower, upper = net.getDistanceMatrixThreshold(self.matrix, self.percentil/100) 
    83         self.spinUpperThreshold = upper 
    84         self.generateGraph() 
    85          
     81        # flatten matrix, sort values and remove identities (self.matrix[i][i]) 
     82        vals = sorted(sum(self.matrix, ()))[self.matrix.dim:] 
     83        ind = int(len(vals) * self.percentil / 100) 
     84        self.spinUpperThreshold = vals[ind] 
     85        self.generateGraph() 
     86 
    8687    def enableAttributeSelection(self): 
    8788        self.attributeCombo.box.setEnabled(True) 
    88          
     89 
    8990    def setSearchStringTimer(self): 
    9091        self.searchStringTimer.stop() 
     
    9394    def setMatrix(self, data): 
    9495        if data == None: return 
    95          
     96 
    9697        self.matrix = data 
    9798        # draw histogram 
     
    100101        #print "values:",values 
    101102        self.histogram.setValues(values) 
    102          
     103 
    103104        low = min(values) 
    104105        upp = max(values) 
     
    109110        if (self.matrix != None): 
    110111            if hasattr(self.matrix, "items"): 
    111                   
     112 
    112113                if isinstance(self.matrix.items, orange.ExampleTable): 
    113114                    vars = list(self.matrix.items.domain.variables) 
    114                  
     115 
    115116                    metas = self.matrix.items.domain.getmetas(0) 
    116117                    for i, var in metas.iteritems(): 
    117118                        vars.append(var) 
    118                          
     119 
    119120        self.icons = self.createAttributeIconDict() 
    120                       
     121 
    121122        for var in vars: 
    122123            try: 
     
    127128    def changeLowerSpin(self): 
    128129        self.percentil = 0 
    129          
     130 
    130131        if self.spinLowerThreshold < self.histogram.minValue: 
    131132            self.spinLowerThreshold = self.histogram.minValue 
    132133        elif self.spinLowerThreshold > self.histogram.maxValue: 
    133134            self.spinLowerThreshold = self.histogram.maxValue 
    134              
     135 
    135136        if self.spinLowerThreshold >= self.spinUpperThreshold: 
    136137            self.spinUpperThreshold = self.spinLowerThreshold 
    137              
    138         self.generateGraph() 
    139          
     138 
     139        self.generateGraph() 
     140 
    140141    def changeUpperSpin(self): 
    141142        self.percentil = 0 
    142          
     143 
    143144        if self.spinUpperThreshold < self.histogram.minValue: 
    144145            self.spinUpperThreshold = self.histogram.minValue 
    145146        elif self.spinUpperThreshold > self.histogram.maxValue: 
    146147            self.spinUpperThreshold = self.histogram.maxValue 
    147              
     148 
    148149        if self.spinUpperThreshold <= self.spinLowerThreshold: 
    149150            self.spinLowerThreshold = self.spinUpperThreshold 
    150          
    151         self.generateGraph() 
    152          
    153     def generateGraph(self, N_changed = False): 
     151 
     152        self.generateGraph() 
     153 
     154    def generateGraph(self, N_changed=False): 
    154155        self.searchStringTimer.stop() 
    155156        self.attributeCombo.box.setEnabled(False) 
     
    157158        matrix = None 
    158159        self.warning('') 
    159          
     160 
    160161        if N_changed: 
    161162            self.netOption = 1 
    162              
     163 
    163164        if self.matrix == None: 
    164165            self.infoa.setText("No data loaded.") 
    165166            self.infob.setText("") 
    166167            return 
    167          
     168 
    168169        #print len(self.histogram.yData), len(self.histogram.xData) 
    169         nEdgesEstimate = 2 * sum([self.histogram.yData[i] for i,e in enumerate(self.histogram.xData) if self.spinLowerThreshold <= e <= self.spinUpperThreshold]) 
    170          
     170        nEdgesEstimate = 2 * sum([self.histogram.yData[i] for i, e in enumerate(self.histogram.xData) if self.spinLowerThreshold <= e <= self.spinUpperThreshold]) 
     171 
    171172        if nEdgesEstimate > 200000: 
    172173            self.graph = None 
     
    178179            graph.add_nodes_from(range(self.matrix.dim)) 
    179180            matrix = self.matrix 
    180              
    181             if hasattr(self.matrix, "items"):                
     181 
     182            if hasattr(self.matrix, "items"): 
    182183                if type(self.matrix.items) == Orange.data.Table: 
    183184                    graph.set_items(self.matrix.items) 
     
    186187                    items = Orange.data.Table(Orange.data.Domain(Orange.data.variable.String('label'), 0), data) 
    187188                    graph.set_items(items) 
    188                  
     189 
    189190            # set the threshold 
    190191            # set edges where distance is lower than threshold 
     
    195196            edge_list = Orange.network.GraphLayout().edges_from_distance_matrix(self.matrix, self.spinLowerThreshold, self.spinUpperThreshold, min(self.kNN, self.matrix.dim - 1)) 
    196197            if self.dstWeight == 1: 
    197                 graph.add_edges_from(((u,v,{'weight':1-d}) for u,v,d in edge_list)) 
     198                graph.add_edges_from(((u, v, {'weight':1 - d}) for u, v, d in edge_list)) 
    198199            else: 
    199                 graph.add_edges_from(((u,v,{'weight':d}) for u,v,d in edge_list)) 
    200              
     200                graph.add_edges_from(((u, v, {'weight':d}) for u, v, d in edge_list)) 
     201 
    201202            # exclude unconnected 
    202203            if str(self.netOption) == '1': 
    203204                components = [x for x in Orange.network.nx.algorithms.components.connected_components(graph) if len(x) > self.excludeLimit] 
    204205                if len(components) > 0: 
    205                     include = reduce(lambda x,y: x+y, components) 
     206                    include = reduce(lambda x, y: x + y, components) 
    206207                    if len(include) > 1: 
    207208                        self.graph = graph.subgraph(include) 
     
    230231                if self.attributeCombo.currentText() != '' and self.label != '': 
    231232                    components = Orange.network.nx.algorithms.components.connected_components(graph) 
    232                          
     233 
    233234                    txt = self.label.lower() 
    234235                    #print 'txt:',txt 
     
    242243                                    if len(component) > 0: 
    243244                                        vertices.extend(component) 
    244                                          
     245 
    245246                        if len(vertices) > 0: 
    246247                            #print "n vertices:", len(vertices), "n set vertices:", len(set(vertices)) 
     
    250251            else: 
    251252                self.graph = graph 
    252          
     253 
    253254        if matrix != None: 
    254             matrix.items  = self.graph.items() 
     255            matrix.items = self.graph.items() 
    255256            self.graph_matrix = matrix 
    256              
     257 
    257258        self.pconnected = self.graph.number_of_nodes() 
    258259        self.nedges = self.graph.number_of_edges() 
     
    263264        if hasattr(self, "infoc"): 
    264265            self.infoc.setText("Graph edges: %d (%.2f edges/node)" % (self.nedges, self.nedges / float(self.pconnected))) 
    265          
     266 
    266267        #print 'self.graph:',self.graph+ 
    267268        if hasattr(self, "sendSignals"): 
    268269            self.sendSignals() 
    269          
     270 
    270271        self.histogram.setBoundary(self.spinLowerThreshold, self.spinUpperThreshold) 
    271          
     272 
Note: See TracChangeset for help on using the changeset viewer.