Changeset 1851:aa8ea42e2c8d in orange-bioinformatics


Ignore:
Timestamp:
10/01/13 18:11:03 (7 months ago)
Author:
Ales Erjavec <ales.erjavec@…>
Branch:
default
Message:

Added an option to order instances by the selected gene names.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • _bioinformatics/widgets/OWSelectGenes.py

    r1850 r1851  
    11import re 
    22import unicodedata 
     3from collections import defaultdict 
     4 
    35from contextlib import contextmanager 
    46 
     
    3335    } 
    3436 
    35     settingsList = ["autoCommit"] 
     37    settingsList = ["autoCommit", "preserveOrder"] 
    3638 
    3739    def __init__(self, parent=None, signalManager=None, title=NAME): 
     
    4244        self.geneIndex = None 
    4345        self.autoCommit = False 
     46        self.preserveOrder = True 
    4447 
    4548        self.loadSettings() 
     
    8083 
    8184        box = OWGUI.widgetBox(self.controlArea, "Output") 
    82  
     85        OWGUI.checkBox(box, self, "preserveOrder", "Preserve input order", 
     86                       tooltip="Preserve the order of the input data " 
     87                               "instances.", 
     88                       callback=self.invalidateOutput) 
    8389        cb = OWGUI.checkBox(box, self, "autoCommit", "Auto commit") 
    8490        button = OWGUI.button(box, self, "Commit", callback=self.commit) 
     
    130136 
    131137        if gene is not None: 
    132             selection = set(self.selection) 
    133  
    134             sel = [inst for inst in self.data 
    135                    if str(inst[gene]) in selection] 
     138            if self.preserveOrder: 
     139                selection = set(self.selection) 
     140                sel = [inst for inst in self.data 
     141                       if str(inst[gene]) in selection] 
     142            else: 
     143                by_genes = defaultdict(list) 
     144                for inst in self.data: 
     145                    by_genes[str(inst[gene])].append(inst) 
     146 
     147                sel = [] 
     148                for name in self.selection: 
     149                    sel.extend(by_genes.get(name, [])) 
    136150 
    137151            if sel: 
Note: See TracChangeset for help on using the changeset viewer.