Changeset 1438:90a65dce88f0 in orange-bioinformatics


Ignore:
Timestamp:
06/24/11 17:51:22 (3 years ago)
Author:
ales_erjavec <ales.erjavec@…>
Branch:
default
Convert:
c220010b7b031e139a978013086673f3c1709831
Message:

Added ensembl gene matcher.

Files:
2 edited

Legend:

Unmodified
Added
Removed
  • obiGene.py

    r1333 r1438  
    214214Gene matcher. 
    215215 
    216 "Database" for each oranism is a list of sets of gene aliases. 
     216"Database" for each organism is a list of sets of gene aliases. 
    217217""" 
    218218 
     
    640640        self.organism = organism 
    641641        MatcherAliasesPickled.__init__(self, **kwargs) 
     642     
     643         
     644class MatcherAliasesEnsembl(MatcherAliasesPickled): 
     645    """ A matcher for Ensemble ids 
     646    """ 
     647    DEF_ATTRS = ["ensembl_gene_id", "external_gene_id", "entrezgene"] 
     648    # taxid: (dataset_name, [name_attr1, name_attr2 ...]) 
     649    BIOMART_CONF = {} 
     650    def __init__(self, organism, **kwargs): 
     651        self.organism = organism 
     652        MatcherAliasesPickled.__init__(self, **kwargs) 
     653         
     654    def filename(self): 
     655        return "ensembl_" + self.organism 
     656     
     657    def create_aliases_version(self): 
     658        return "v1" 
     659     
     660    def create_aliases(self): 
     661        import obiBioMart 
     662        if self.organism in self.BIOMART_CONF: 
     663            dset_name, attrs = self.BIOMART_CONF[self.organism] 
     664        else: 
     665            dset_name, attrs = self.default_biomart_conf(self.organism) 
     666         
     667        dataset = obiBioMart.BioMartDataset("ensembl", dset_name) 
     668        table = dataset.get_example_table(attributes=attrs) 
     669        from collections import defaultdict 
     670        names = defaultdict(set) 
     671        for ex in table: 
     672            row = [str(v) for v in ex if not v.isSpecial() and str(v)] 
     673            names[row[1]].update(row) 
     674        return names.values() 
     675         
     676    def default_biomart_conf(self, taxid): 
     677        name = obiTaxonomy.name(self.organism).lower() 
     678        name1, name2 = name.split(" ")[: 2] 
     679        dset_name = name1[0] + name2 + "_gene_ensembl" 
     680        return dset_name, self.DEF_ATTRS 
     681         
    642682 
    643683class MatcherAliasesPickledJoined(MatcherAliasesPickled): 
     
    737777GMDicty = MatcherAliasesDictyBase 
    738778GMAffy = MatcherAliasesAffy 
     779GMEnsembl = MatcherAliasesEnsembl 
    739780 
    740781def issequencens(x): 
  • widgets/prototypes/OWGeneAtlasTissueExpression.py

    r1436 r1438  
    1313 
    1414import orngDataCaching 
     15import obiGene 
    1516 
    1617# Mapping for common taxids from obiTaxonomy 
     
    3334     } 
    3435 
     36def construct_matcher(taxid): 
     37    return obiGene.matcher([obiGene.GMEnsembl(taxid), obiGene.GMNCBI(taxid)]) 
     38 
    3539class OWGeneAtlasTissueExpression(OWWidget): 
    3640    contextHandlers = {"": DomainContextHandler("", ["selected_organism", 
     
    128132        self.results = {}, {}, {} 
    129133         
     134        self.gene_matcher = obiGene.GMDirect() 
     135        self.query_genes = [] 
     136         
    130137        # Cached get_atlas_summary  
    131138        @lru_cache(maxsize=20) 
     
    133140            return obiArrayExpress.get_atlas_summary(list(genes), organism) 
    134141         
    135         self.get_atlas_summary = get_atlas_summary  
    136          
     142        self.get_atlas_summary = get_atlas_summary 
     143         
     144        #Cached construct_matcher 
     145        self.construct_matcher = lru_cache(maxsize=3)(construct_matcher) 
    137146         
    138147    def set_data(self, data=None): 
     
    154163                 
    155164            self.openContext("", data) 
     165            self.update_gene_matcher() 
    156166            self.update_info_box() 
    157167            self.run_query() 
     
    194204        """ Called when the user changes the organism. 
    195205        """ 
     206        self.update_gene_matcher() 
    196207        self.run_query() 
    197208        self.update_ef_values_box() 
     
    266277                self.controlArea.setEnabled(True) 
    267278                self.update_info_box(query_running=False) 
     279             
     280            self.query_genes = genes 
     281         
     282    def update_gene_matcher(self): 
     283        taxid = dict((v,k) for v,k in TAXID_TO_ORG.items()).get(self.selected_organism) 
     284        if taxid: 
     285            self.gene_matcher = self.construct_matcher(taxid) 
     286        else: 
     287            self.gene_matcher = obiGene.GMDirect() 
     288             
    268289         
    269290    def update_ef_values_box(self): 
     
    336357    def commit(self): 
    337358        genes = set(self.selected_report_genes()) 
     359        self.gene_matcher.set_targets(genes) 
     360         
    338361        genes = [gene.lower() for gene in genes] 
    339362        if self.genes_in_columns: 
    340363            attrs = [a for a in self.data.domain.attributes \ 
    341                      if a.name.lower() in genes] 
     364                     if a.name.lower() in genes or self.gene_matcher.umatch(a.name)] 
    342365            domain = Orange.data.Domain(attrs, self.data.domain.class_var) 
    343366            domain.add_metas(self.data.domain.get_metas()) 
     
    347370            examples = [] 
    348371            for ex in self.data: 
    349                 if str(ex[attr]).lower() in genes: 
     372                if str(ex[attr]).lower() in genes or self.gene_matcher.umatch(str(ex[attr])): 
    350373                    examples.append(ex) 
    351374            if examples: 
     
    357380    def handle_assync_error(self, *args): 
    358381        pass 
    359              
     382         
     383         
    360384class StandardPyItem(QStandardItem): 
    361385    def __lt__(self, other): 
Note: See TracChangeset for help on using the changeset viewer.