Changeset 1489:9b78d97eb300 in orange-bioinformatics


Ignore:
Timestamp:
10/11/11 16:27:35 (3 years ago)
Author:
markotoplak
Branch:
default
Convert:
5c684ef452212d599f8889a28c0045ddba8071cd
Message:

OWGenotypeDistances: chips are in red when they are possibly ambiguous

File:
1 edited

Legend:

Unmodified
Added
Removed
  • widgets/OWGenotypeDistances.py

    r1485 r1489  
    8989 
    9090    ngroups = {} 
     91    uniquepos = {} #which positions are unique 
    9192    for g in groups: 
    9293        elements = list(groups[g]) 
     94 
     95        rv2 = lambda x: relevant_vals(annotations[x] if isinstance(x,int) else x) 
     96 
    9397        ngroups[g] = map(lambda x: x if isinstance(x,int) else None, 
    94             sorted(elements, key=lambda x: relevant_vals(annotations[x] if isinstance(x,int) else x))) 
    95          
    96     return ngroups 
     98            sorted(elements, key=rv2)) 
     99 
     100        d = defaultdict(int) #get groups of different relevant values 
     101        for i in elements: 
     102            d[rv2(i)] += 1 
     103         
     104        uniquepos[g] = map(lambda x: not d[rv2(x)] > 1, 
     105             sorted(elements, key=rv2)) 
     106     
     107    return ngroups, uniquepos 
    97108 
    98109def float_or_none(value): 
     
    397408            self.warning(0, "No separate by attribute selected.") 
    398409 
    399         partitions = separate_by(self.data, separate_keys, consider=relevant_keys).items() 
     410        partitions,uniquepos = separate_by(self.data, separate_keys, consider=relevant_keys) 
     411        partitions = partitions.items() 
    400412 
    401413        all_values = defaultdict(set) 
     
    449461#            newdata = Orange.data.Table(domain) 
    450462            split_groups.append((keys, domain)) 
    451              
    452         self.set_groups(separate_keys, split_groups, relevant_keys, relevant_items, all_values) 
     463          
     464        self.set_groups(separate_keys, split_groups, relevant_keys, relevant_items, all_values, uniquepos) 
    453465         
    454466        self.partitions = partitions 
     
    458470#        self.update_distances(separate_keys, partitions, self.data) 
    459471         
    460     def set_groups(self, keys, groups, relevant_keys, relevant_items, all_values): 
     472    def set_groups(self, keys, groups, relevant_keys, relevant_items, all_values, uniquepos): 
    461473        """ Set the current data groups and update the Group widget 
    462474        """ 
     
    475487            return Orange.data.Domain(attrs, None) 
    476488 
    477         for ann_vals, domain in [ (None, for_print(relevant_items)) ] + groups: 
     489        for separatev, domain in [ (None, for_print(relevant_items)) ] + groups: 
    478490            label = None 
    479             if ann_vals != None: 
     491            if separatev != None: 
    480492                ann_vals = " <b>|</b> ".join(["<b>{0}</ b> = {1}".format(key,val) \ 
    481                      for key, val in zip(keys, ann_vals)]) 
     493                     for key, val in zip(keys, separatev)]) 
    482494                label = QLabel(ann_vals) 
    483495             
     
    485497            for i, attr in enumerate(domain.attributes): 
    486498                item = QStandardItem() 
     499                if separatev != None: 
     500                    up = uniquepos[separatev][i] 
     501                else: 
     502                    up = False if False in [ a[i] for a in uniquepos.values() ] else True 
    487503                if str(attr.name).startswith("!!missing "): ## TODO: Change this to not depend on name 
    488504                    header_text = ["{0}={1}".format(key, attr.attributes.get(key, "?")) \ 
    489505                                   for key in all_values if key not in relevant_items[i]] 
    490                     header_text = "\n".join(header_text) 
     506                    header_text = "\n".join(header_text) if header_text else "Empty" 
    491507                    item.setData(QVariant(header_text), Qt.DisplayRole) 
    492508                    item.setFlags(Qt.NoItemFlags) 
     
    497513                    header_text = ["{0}={1}".format(key, attr.attributes.get(key, "?")) \ 
    498514                                   for key in all_values if key in relevant_items[i]] 
    499                     header_text = "\n".join(header_text) 
     515                    header_text = "\n".join(header_text) if header_text else "No descriptor" 
    500516                    item.setData(QVariant(header_text), Qt.DisplayRole) 
    501517                    item.setData(QVariant(palette.color(QPalette.Disabled, QPalette.Window)), Qt.BackgroundRole) 
     
    503519                    header_text = ["{0}={1}".format(key, attr.attributes.get(key, "?")) \ 
    504520                                   for key in all_values if key not in relevant_items[i]] 
    505                     header_text = "\n".join(header_text) 
     521                    header_text = "\n".join(header_text) if header_text else "Empty" 
    506522                    item.setData(QVariant(header_text), Qt.DisplayRole) 
    507523                    item.setData(QVariant(attr.name), Qt.ToolTipRole) 
     524 
     525                if up == False: 
     526                    item.setData(QVariant(QColor(Qt.red)), Qt.ForegroundRole) 
    508527                     
    509528                model.setHorizontalHeaderItem(i, item) 
Note: See TracChangeset for help on using the changeset viewer.