Changeset 1468:13f7c83ffda0 in orange-bioinformatics


Ignore:
Timestamp:
09/05/11 15:03:49 (3 years ago)
Author:
ales_erjavec <ales.erjavec@…>
Branch:
default
Convert:
376d8844e4283fb4c62a7f71c6860b3a48414e19
Message:

Added EnsembleGeneInfo class.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • obiGene.py

    r1438 r1468  
    211211        return [cls.TAX_MAP.get(id, id) for id in taxids if cls.TAX_MAP.get(id, id)] 
    212212 
     213 
     214class EnsembleGeneInfo(object): 
     215#    BIO_MART_DATASETS = {"9606": "hsapiens"} 
     216    DEF_ATTRS = ["ensembl_gene_id", "external_gene_id", "entrezgene"] 
     217    BIOMART_CONF = {"9606": ("hsapiens_gene_ensembl", DEF_ATTRS) # + ["hgnc_symbol"]) 
     218                    } 
     219    def __init__(self, organism, gene_matcher=None): 
     220        self.organism = self.organism_name_search(organism)  
     221        self.load() 
     222        if gene_matcher is None: 
     223            self.gene_matcher = matcher([GMEnsembl(self.organism), GMNCBI(self.organism)]) 
     224        else: 
     225            self.gene_matcher = gene_matcher 
     226         
     227    @classmethod 
     228    def organism_name_search(cls, name): 
     229        taxids = obiTaxonomy.to_taxid(name, mapTo=cls.common_taxids()) 
     230        if len(taxids) == 1: 
     231            return taxids[0] 
     232        else: 
     233            raise ValueError(name) 
     234         
     235    @classmethod 
     236    def common_taxids(cls): 
     237        return ["3702", "9913", "6239", "7955", "9606", "7227", 
     238                "10090", "10116", "4932", "4896", "8355"] 
     239     
     240    @classmethod 
     241    def version(cls): 
     242        return "v1.0" 
     243         
     244    def filename(self): 
     245        return "ensembl_" + self.organism 
     246     
     247    def create_info(self): 
     248        import obiBioMart 
     249        if self.organism in self.BIOMART_CONF: 
     250            dset_name, attrs = self.BIOMART_CONF[self.organism] 
     251        else: 
     252            dset_name, attrs = self.default_biomart_conf(self.organism) 
     253         
     254        dataset = obiBioMart.BioMartDataset("ensembl", dset_name) 
     255        table = dataset.get_example_table(attributes=attrs, unique=True) 
     256        print len(table) 
     257        table.save(dset_name + ".tab") 
     258        from collections import defaultdict 
     259        names = defaultdict(set) 
     260        for ex in table: 
     261            row = [str(v) for v in ex if not v.isSpecial() and str(v)] 
     262            names[row[0]].update(row) 
     263        return names 
     264         
     265    def default_biomart_conf(self, taxid): 
     266        name = obiTaxonomy.name(self.organism).lower() 
     267        name1, name2 = name.split(" ")[: 2] 
     268        dset_name = name1[0] + name2 + "_gene_ensembl" 
     269        return dset_name, self.DEF_ATTRS 
     270     
     271    def load(self): 
     272        import cPickle 
     273        dir = orngServerFiles.localpath("EnsembleGeneInfo") 
     274        if not os.path.exists(dir): 
     275            os.makedirs(dir) 
     276         
     277        try: 
     278            filename = orngServerFiles.localpath_download("EnsembleGeneInfo", self.filename()) 
     279            info = cPickle.load(open(filename, "rb")) 
     280        except Exception, ex:     
     281            filename = orngServerFiles.localpath("EnsembleGeneInfo", self.filename()) 
     282            info = self.create_info() 
     283            cPickle.dump(info, open(filename, "wb")) 
     284             
     285        self.info = info 
     286         
     287    def __getitem__(self, key): 
     288        return self.info[key] 
     289    def __contains__(self, key): 
     290        return key in self.info 
     291    def __len__(self): 
     292        return len(self.info) 
     293    def __iter__(self): 
     294        return iter(self.info) 
     295    def keys(self): 
     296        return self.info.keys() 
     297    def values(self): 
     298        return self.info.values() 
     299    def items(self): 
     300        return self.info.items() 
     301    def get(self, key, default=None): 
     302        return self.info.get(key, default) 
     303     
     304    def genes(self): 
     305        return self.info.keys() 
     306     
     307    def aliases(self): 
     308        return [(key,) + tuple(value) for key, value in self.items()] 
     309     
     310    def ensembl_id(self, name): 
     311        return self.gene_matcher.umatch(name) 
     312         
    213313""" 
    214314Gene matcher. 
     
    671771        for ex in table: 
    672772            row = [str(v) for v in ex if not v.isSpecial() and str(v)] 
    673             names[row[1]].update(row) 
     773            names[row[0]].update(row) 
    674774        return names.values() 
    675775         
Note: See TracChangeset for help on using the changeset viewer.