Changeset 1735:50499d1dc55a in orange-bioinformatics


Ignore:
Timestamp:
04/05/13 19:43:32 (13 months ago)
Author:
Ales Erjavec <ales.erjavec@…>
Branch:
default
Message:

Changed the Organism.gene_aliases method.

Location:
_bioinformatics
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • _bioinformatics/obiGene.py

    r1716 r1735  
    644644        self.filename() # test if valid filename can be built 
    645645 
    646 from Orange.utils import ConsoleProgressBar 
    647646 
    648647class MatcherAliasesKEGG(MatcherAliasesPickled): 
     
    652651 
    653652    def create_aliases(self): 
    654         organism = self._organism_name(self.organism) 
    655653        org = obiKEGG.KEGGOrganism(self.organism, genematcher=GMDirect()) 
    656         osets = org._gm_gene_aliases() 
     654        osets = org.gene_aliases() 
    657655        return osets 
    658656 
    659657    def create_aliases_version(self): 
    660         return obiKEGG.KEGGOrganism.organism_version(self.organism) + ".1" 
     658        # use KEGG short release string (e.g. '66.0+') 
     659        release = obiKEGG.KEGGOrganism.organism_version(self.organism) + ".2" 
     660        release, _ = release.split("/") 
     661        return release 
    661662 
    662663    def filename(self): 
    663         return "kegg_2_" + self._organism_name(self.organism)  
     664        return "kegg_2_" + self._organism_name(self.organism) 
    664665 
    665666    def __init__(self, organism, ignore_case=True): 
    666667        self.organism = organism 
    667668        MatcherAliasesPickled.__init__(self, ignore_case=ignore_case) 
     669 
    668670 
    669671class MatcherAliasesFile(MatcherAliasesPickled): 
  • _bioinformatics/obiKEGG/__init__.py

    r1734 r1735  
    2020 
    2121from collections import defaultdict 
    22  
     22from itertools import chain 
    2323from datetime import datetime 
    2424 
     
    9494    def gene_aliases(self): 
    9595        """ 
    96         Return known gene aliases (synonyms in other databases). 
    97         """ 
    98         return self.genes.gene_aliases() 
     96        Return a list of sets of equal genes (synonyms) in KEGG for 
     97        this organism. 
     98 
     99        .. note:: 
     100 
     101            This only includes 'ncbi-geneid' and 'ncbi-gi' records 
     102            from the KEGG Genes DBLINKS entries. 
     103 
     104        """ 
     105        definitions = self.api.list(self.org_code) 
     106        ncbi_geneid = self.api.conv(self.org_code, "ncbi-geneid") 
     107        ncbi_gi = self.api.conv(self.org_code, "ncbi-gi") 
     108 
     109        aliases = defaultdict(set) 
     110 
     111        for entry_id, definition in definitions: 
     112            # genes entry id without the organism code 
     113            aliases[entry_id].add(entry_id.split(":", 1)[1]) 
     114            # all names in the NAME field (KEGG API list returns 
     115            # 'NAME; DEFINITION') fields for genes 
     116            names = definition.split(";")[0].split(",") 
     117            aliases[entry_id].update([name.strip() for name in names]) 
     118 
     119        for source_id, target_id in chain(ncbi_geneid, ncbi_gi): 
     120            aliases[target_id].add(source_id.split(":", 1)[1]) 
     121 
     122        return [set([entry_id]).union(names) 
     123                for entry_id, names in aliases.iteritems()] 
    99124 
    100125    def pathways(self, with_ids=None): 
     
    119144    def enzymes(self, genes=None): 
    120145        raise NotImplementedError() 
    121  
    122     def _gm_gene_aliases(self): 
    123         """ 
    124         Return a list of sets of equal genes. This is a hack for 
    125         gene matchers to work faster until the whole implementations 
    126         transitions to REST. Does not include links to DBs. 
    127         """ 
    128         s1 = urllib2.urlopen("http://rest.kegg.jp/list/%s" % self.org_code).read() 
    129         out = [] 
    130         for l in s1.split('\n'): 
    131             if l: 
    132                 tabs = l.split("\t") 
    133                 cset = set([tabs[0]]) 
    134  
    135                 if ":" in tabs[0]: 
    136                     # also add 'identifier' from 'org_code:identifier' 
    137                     cset.add(tabs[0].split(":", 1)[-1]) 
    138  
    139                 try: 
    140                     rest = tabs[1].split(";")[0] 
    141                     cset |= set(rest.split(", ")) 
    142                 except: 
    143                     pass  # do not crash if a line does not conform 
    144                 out.append(cset) 
    145         return out 
    146146 
    147147    def get_enriched_pathways(self, genes, reference=None, 
  • _bioinformatics/obiKEGG/api.py

    r1734 r1735  
    109109        return self.service.get(ids).get() 
    110110 
    111     def conv(self, ids): 
    112         raise NotImplementedError() 
     111    def conv(self, target_db, source): 
     112        """ 
     113        Return a mapping from source to target_db ids as a list of two 
     114        tuples [(source_id, target_id), ...]. 
     115 
     116        """ 
     117        if not isinstance(source, basestring): 
     118            source = "+".join(source) 
     119 
     120        res = self.service.conv(target_db)(source).get() 
     121        return [tuple(line.split("\t")) for line in res.splitlines()] 
    113122 
    114123    def link(self, target_db, source_db=None, ids=None): 
     
    431440 
    432441    @cached_method 
    433     def conv(self, ids): 
    434         return KeggApi.conv(self, ids) 
     442    def conv(self, target_db, source): 
     443        return KeggApi.conv(self, target_db, source) 
    435444 
    436445    ######## 
Note: See TracChangeset for help on using the changeset viewer.