Changeset 1364:387e03225529 in orange-bioinformatics


Ignore:
Timestamp:
04/08/11 18:34:36 (3 years ago)
Author:
ales_erjavec <ales.erjavec@…>
Branch:
default
Convert:
2b092d7d402c2cb20a635c1e6ca7bad5263bec30
Message:

Added commit button.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • widgets/prototypes/OWGenotypeDistances.py

    r1363 r1364  
    121121        items = set(items) 
    122122        saved_items = set(getattr(context, "items", [])) 
    123         print "Saved Context", saved_items   
    124123        if imperfect: 
    125124            return len(items.intersection(saved_items))/len(items.union(saved_items)) 
     
    155154         
    156155        self.distance_measure = 0 
     156        self.auto_commit = False 
     157        self.changed_flag = False 
    157158         
    158159        self.loadSettings() 
     
    184185                                            items=[d[0] for d in self.DISTANCE_FUNCTIONS]) 
    185186         
     187        OWGUI.rubber(self.controlArea) 
     188         
     189        box = OWGUI.widgetBox(self.controlArea, "Commit") 
     190        cb = OWGUI.checkBox(box, self, "auto_commit", "Commit on any change", 
     191                            tooltip="Compute and send the distances on any change.", 
     192                            callback=self.commit_if) 
     193         
     194        b = OWGUI.button(box, self, "Commit", 
     195                         tooltip="Compute and send the distances.", 
     196                         callback=self.commit) 
     197         
     198        OWGUI.setStopper(self, b, cb, "changed_flag", callback=self.commit) 
     199         
    186200        self.groups_box = OWGUI.widgetBox(self.mainArea, "Groups") 
    187201        self.groups_scroll_area = QScrollArea() 
     
    189203         
    190204        self.data = None 
     205        self.partitions = [] 
     206        self.matrix = None 
    191207        self._disable_updates = False 
    192208         
     
    194210         
    195211    def clear(self): 
    196         pass 
     212        self.data = None 
     213        self.partitions = [] 
     214        self.matrix = None 
    197215         
    198216    def set_data(self, data=None): 
     
    207225            self.split_data() 
    208226        else: 
     227            self.separate_view.setModel(PyListModel([])) 
     228            self.relevant_view.setModel(PyListModel([])) 
     229            self.groups_scroll_area.setWidget(QWidget()) 
    209230            self.info_box.setText("No data on input.\n\n") 
     231             
     232        self.commit_if() 
    210233             
    211234    def update_control(self): 
     
    294317            return 
    295318        partitions = separate_by(self.data, separate_keys, consider=relevant_keys).items() 
    296         print partitions 
     319#        print partitions 
    297320         
    298321        split_data = [] 
     
    310333            if attr_index is None: 
    311334                attr = Orange.data.variable.Continuous("missing") 
    312                 attr.attributes.update(relevant_items[i]) 
     335                attr.attributes.update(relevant_items.get(i, [])) 
    313336                return attr 
    314337            else: 
     
    323346        self.set_groups(separate_keys, split_data, relevant_keys) 
    324347         
    325         self.update_distances(separate_keys, partitions, self.data) 
     348        self.partitions = partitions 
     349#        self.update_distances(separate_keys, partitions, self.data) 
    326350         
    327351    def set_groups(self, keys, groups, relevant_keys): 
     
    340364                item = QStandardItem() 
    341365                if attr.name != "missing": 
    342                     header_text = ["{0}={1}".format(key, attr.attributes[key]) \ 
     366                    header_text = ["{0}={1}".format(key, attr.attributes.get(key, "?")) \ 
    343367                                   for key in relevant_keys] 
    344368                    header_text = "\n".join(header_text) 
     
    348372                else: 
    349373#                    header_text = "\n".join("{0}=?".format(key) for key in relevant_keys) 
    350                     header_text = ["{0}={1}".format(key, attr.attributes[key]) \ 
     374                    header_text = ["{0}={1}".format(key, attr.attributes.get(key, "?")) \ 
    351375                                   for key in relevant_keys] 
    352376                    header_text = "\n".join(header_text) 
     
    401425        self.groups_scroll_area.setWidget(widget) 
    402426         
    403     def update_distances(self, separate_keys, partitions, data): 
     427    def compute_distances(self, separate_keys, partitions, data): 
    404428        """ Compute the distances between genotypes. 
    405429        """ 
    406         matrix = Orange.core.SymMatrix(len(partitions)) 
    407         profiles = [linearize(data, indices) for _, indices in partitions] 
    408         dist_func = self.DISTANCE_FUNCTIONS[self.distance_measure][1] 
    409         from Orange.misc import progressBarMilestones 
    410         count = (len(profiles) * len(profiles) - 1) / 2 
    411         milestones = progressBarMilestones(count) 
    412         iter_count = 0 
    413         self.progressBarInit() 
    414         for i in range(len(profiles)): 
    415             for j in range(i + 1, len(profiles)): 
    416                 matrix[i, j] = dist_func(profiles[i], profiles[j]) 
    417                 iter_count += 1 
    418                 if iter_count in milestones: 
    419                     self.progressBarSet(100.0 * iter_count / count) 
    420         self.progressBarFinished() 
    421          
    422         items = [["{0}={1}".format(key, value) for key, value in zip(separate_keys, values)] \ 
    423                   for values, _ in partitions] 
    424         items = [" | ".join(item) for item in items] 
    425         matrix.items = items 
    426          
    427         self.send("Distances", matrix) 
     430        if separate_keys and partitions: 
     431            matrix = Orange.core.SymMatrix(len(partitions)) 
     432            profiles = [linearize(data, indices) for _, indices in partitions] 
     433            dist_func = self.DISTANCE_FUNCTIONS[self.distance_measure][1] 
     434            from Orange.misc import progressBarMilestones 
     435            count = (len(profiles) * len(profiles) - 1) / 2 
     436            milestones = progressBarMilestones(count) 
     437            iter_count = 0 
     438            self.progressBarInit() 
     439            for i in range(len(profiles)): 
     440                for j in range(i + 1, len(profiles)): 
     441                    matrix[i, j] = dist_func(profiles[i], profiles[j]) 
     442                    iter_count += 1 
     443                    if iter_count in milestones: 
     444                        self.progressBarSet(100.0 * iter_count / count) 
     445            self.progressBarFinished() 
     446             
     447            items = [["{0}={1}".format(key, value) for key, value in zip(separate_keys, values)] \ 
     448                      for values, _ in partitions] 
     449            items = [" | ".join(item) for item in items] 
     450            matrix.items = items 
     451        else: 
     452            matrix = None 
     453             
     454        self.matrix = matrix 
     455         
     456    def commit_if(self): 
     457        if self.auto_commit and self.changed_flag: 
     458            self.commit() 
     459        else: 
     460            self.changed_flag = True 
     461             
     462    def commit(self): 
     463        self.compute_distances(self.selected_separeate_by_keys(), 
     464                               self.partitions, 
     465                               self.data) 
     466        self.send("Distances", self.matrix) 
     467        self.changed_flag = False 
    428468     
    429469 
Note: See TracChangeset for help on using the changeset viewer.