Changes in [1754:56ba93b2b1e1:1755:418d0e7f330a] in orange-bioinformatics


Ignore:
Location:
_bioinformatics
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • _bioinformatics/obiKEGG/__init__.py

    r1747 r1750  
    1 """\ 
     1""" 
    22============================================== 
    33KEGG - Kyoto Encyclopedia of Genes and Genomes 
     
    5656import sys 
    5757import urllib2 
     58import threading 
    5859 
    5960from collections import defaultdict 
    6061from itertools import chain 
    6162from datetime import datetime 
     63from contextlib import contextmanager 
    6264 
    6365from Orange.utils import lru_cache 
     
    307309    @classmethod 
    308310    def organism_name_search(cls, name): 
    309         genome = KEGGGenome() 
    310         try: 
    311             name = genome.org_code_to_entry_key(name) 
    312         except ValueError: 
    313             pass 
    314  
    315         if name not in genome: 
    316             ids = genome.search(name) 
    317             if ids: 
    318                 name = ids.pop(0) if ids else name 
    319             else: 
    320                 raise OrganismNotFoundError(name) 
    321  
    322         try: 
    323             return genome[name].organism_code 
    324         except KeyError: 
    325             raise OrganismNotFoundError(name) 
     311        return organism_name_search(name) 
    326312 
    327313    @classmethod 
    328314    def organism_version(cls, name): 
    329315        name = cls.organism_name_search(name) 
    330         genome = KEGGGenome() 
    331         info = genome.api.info(name) 
    332         return info.release 
     316        with _global_genome_instance() as genome: 
     317            info = genome.api.info(name) 
     318            return info.release 
    333319 
    334320    def _set_genematcher(self, genematcher): 
     
    358344def organism_name_search(name): 
    359345    """ 
    360     Search and organism by `name` and return an KEGG organism code. 
    361     """ 
    362     return KEGGOrganism.organism_name_search(name) 
     346    Search for a organism by `name` and return it's KEGG organism code. 
     347    """ 
     348    with _global_genome_instance() as genome: 
     349        try: 
     350            name = genome.org_code_to_entry_key(name) 
     351        except ValueError: 
     352            pass 
     353 
     354        if name not in genome: 
     355            ids = genome.search(name) 
     356            if ids: 
     357                name = ids.pop(0) if ids else name 
     358            else: 
     359                raise OrganismNotFoundError(name) 
     360 
     361        try: 
     362            return genome[name].organism_code 
     363        except KeyError: 
     364            raise OrganismNotFoundError(name) 
    363365 
    364366 
     
    370372 
    371373 
    372 def organisms(): 
    373     """ 
    374     Return a list of all KEGG organisms. 
    375     """ 
    376     return KEGGOrganism.organisms() 
    377  
    378  
    379374def from_taxid(taxid): 
    380375    """ 
    381376    Return a KEGG organism code for a an NCBI Taxonomy id string `taxid`. 
    382377    """ 
    383     genome = KEGGGenome() 
    384     res = genome.search(taxid) 
    385     for r in res: 
    386         e = genome[r] 
    387  
    388         if e.taxid in [taxid, genome.TAXID_MAP.get(taxid, taxid)]: 
    389             return e.org_code() 
    390  
    391     return None 
     378    with _global_genome_instance() as genome: 
     379        res = genome.search(taxid) 
     380        for r in res: 
     381            e = genome[r] 
     382 
     383            if e.taxid in [taxid, genome.TAXID_MAP.get(taxid, taxid)]: 
     384                return e.org_code() 
     385 
     386        return None 
    392387 
    393388 
     
    396391    Return a NCBI Taxonomy id for a given KEGG Organism name 
    397392    """ 
    398     genome = KEGGGenome() 
    399     if name in genome: 
    400         return genome[name].taxid 
    401  
    402     keys = genome.search(name) 
    403     if keys: 
    404         return genome[keys[0]].taxid 
    405     else: 
    406         return None 
     393    with _global_genome_instance() as genome: 
     394        if name in genome: 
     395            return genome[name].taxid 
     396 
     397        keys = genome.search(name) 
     398        if keys: 
     399            return genome[keys[0]].taxid 
     400        else: 
     401            return None 
     402 
     403 
     404def _global_genome_instance(): 
     405    genome = getattr(_global_genome_instance, "_genome", None) 
     406    if genome is None: 
     407        genome = KEGGGenome() 
     408        genome._lock = threading.RLock() 
     409        _global_genome_instance._genome = genome 
     410 
     411    @contextmanager 
     412    def instance_locked(instance, lock): 
     413        lock.acquire() 
     414        try: 
     415            yield instance 
     416        finally: 
     417            lock.release() 
     418 
     419    return instance_locked(genome, genome._lock) 
    407420 
    408421 
  • _bioinformatics/widgets/OWGOEnrichmentAnalysis.py

    r1726 r1748  
    158158         
    159159        # freeze until annotation combo box is updateded with available annotations. 
    160         self.signalManager.freeze(self).push() 
     160        if self.signalManager: 
     161            self.signalManager.freeze(self).push() 
    161162        QTimer.singleShot(0, self.UpdateOrganismComboBox) 
    162163         
     
    309310            self.annotationComboBox.setCurrentIndex(self.annotationIndex) 
    310311        finally: 
    311             self.signalManager.freeze(self).pop() 
    312              
     312            if self.signalManager: 
     313                self.signalManager.freeze(self).pop() 
     314 
    313315    def UpdateGeneMatcher(self): 
    314316        dialog = GeneMatcherDialog(self, defaults=self.geneMatcherSettings, modal=True) 
     
    10171019    app = QApplication(sys.argv) 
    10181020    w=OWGOEnrichmentAnalysis() 
    1019     data = orange.ExampleTable("../../../doc/datasets/brown-selected.tab") 
     1021    data = orange.ExampleTable("brown-selected.tab") 
    10201022    w.show() 
    10211023    w.SetClusterDataset(data) 
  • _bioinformatics/widgets/OWGsea.py

    r1726 r1749  
    255255    def UpdateOrganismComboBox(self): 
    256256        try: 
    257             self.progressBarInit() 
    258             with orngServerFiles.DownloadProgress.setredirect(self.progressBarSet): 
    259                 genome = obiKEGG.KEGGGenome() 
    260             self.progressBarFinished() 
    261              
    262             self.allOrganismCodes = genome  
    263      
     257            genome = obiKEGG.KEGGGenome() 
     258 
     259            self.allOrganismCodes = genome 
     260 
    264261            essential = genome.essential_organisms() 
    265              
    266             local = [name.split(".")[0].split("_")[-1] for name in orngServerFiles.listfiles("KEGG") if "kegg_genes" in name] 
    267             self.organismCodes = [(code, organism.definition) for code, organism in self.allOrganismCodes.items() if code in local or code in essential] 
    268             self.organismCodes.sort() 
    269             items = [desc for code, desc in self.organismCodes] 
    270             self.organismCodes = [obiKEGG.to_taxid(code) for code, desc in self.organismCodes] 
    271              
     262 
     263            local = [name.split(".")[0].split("_")[-1] 
     264                     for name in orngServerFiles.listfiles("KEGG") 
     265                     if "kegg_genes" in name] 
     266 
     267            entry_keys = map(genome.org_code_to_entry_key, 
     268                             essential + local) 
     269 
     270            entries = genome.batch_get(entry_keys) 
     271 
     272            items = [entry.definition for entry in entries] 
     273 
     274            self.organismTaxids = [entry.taxid for entry in entries] 
     275 
     276            self.organismComboBox.clear() 
    272277            self.organismComboBox.addItems(items) 
    273278        finally: 
    274             self.signalManager.freeze(self).pop() #setFreeze(0) 
     279            if self.signalManager: 
     280                self.signalManager.freeze(self).pop() 
    275281 
    276282 
     
    316322        #FROM KEGG WIDGET - organism selection 
    317323        self.allOrganismCodes = {} 
    318         self.organismCodes = [] 
     324        self.organismTaxids = [] 
    319325        self.organismComboBox = cb = OWGUI.comboBox(box, self, "organismIndex", items=[], debuggingEnabled=0) #changed 
    320326        cb.setMaximumWidth(200) 
    321         self.signalManager.freeze(self).push() #setFreeze(1) 
     327 
     328        if self.signalManager: 
     329            self.signalManager.freeze(self).push() 
    322330        QTimer.singleShot(100, self.UpdateOrganismComboBox) 
    323331  
     
    566574        collectionNames = [ self.geneSel[a] for a in self.gridSel ] 
    567575 
    568         organism = self.organismCodes[self.organismIndex] 
     576        organism = self.organismTaxids[self.organismIndex] 
    569577 
    570578        if self.gsgo: 
     
    688696            taxid = data_hints.get_hint(data, "taxid", None) 
    689697            try: 
    690                 code = obiKEGG.from_taxid(taxid) 
    691                 self.organismIndex = self.organismCodes.index(code) 
     698                self.organismIndex = self.organismTaxids.index(taxid) 
    692699            except Exception, ex: 
    693700                pass 
    694              
     701 
    695702            if obiGsea.already_have_correlations(data): 
    696703 
     
    800807    #d = orange.ExampleTable('tmp.tab') 
    801808    #d = orange.ExampleTable('../gene_three_lines_log.tab') 
    802     ow.setData(d) 
     809 
     810    QTimer.singleShot(1000, lambda : ow.setData(d)) 
    803811 
    804812    a.exec_() 
  • _bioinformatics/widgets/OWKEGGPathwayBrowser.py

    r1740 r1751  
    300300            tooltip="Select the organism of the input genes") 
    301301 
    302         self.signalManager.freeze(self).push() 
     302        if self.signalManager: 
     303            self.signalManager.freeze(self).push() 
    303304 
    304305        # Selection of genes attribute 
     
    387388 
    388389        self.setEnabled(False) 
     390        self.infoLabel.setText("Fetching organism definitions\n") 
    389391        QTimer.singleShot(100, self.UpdateOrganismComboBox) 
    390392 
     
    413415            # in the common list. 
    414416 
    415             self.infoLabel.setText("Fetching organism definitions\n") 
    416  
    417417            keys = map(genome.org_code_to_entry_key, essential + common) 
    418418 
     
    428428 
    429429            self.organismCodes = [code for code, desc in codes] 
     430            self.organismComboBox.clear() 
    430431            self.organismComboBox.addItems(items) 
     432            self.organismComboBox.setCurrentIndex(self.organismIndex) 
    431433        finally: 
    432434            self.setEnabled(True) 
    433435            self.infoLabel.setText("No data on input\n") 
    434             self.signalManager.freeze(self).pop() 
     436            if self.signalManager: 
     437                self.signalManager.freeze(self).pop() 
    435438 
    436439    def Clear(self): 
     
    921924if __name__ == "__main__": 
    922925    app = QApplication(sys.argv) 
     926    w = OWKEGGPathwayBrowser() 
     927    w.show() 
     928 
    923929    data = Orange.data.Table("brown-selected.tab") 
    924     w = OWKEGGPathwayBrowser() 
    925     w.UpdateOrganismComboBox() 
    926     w.show() 
    927     w.SetData(Orange.data.Table(data[:])) 
    928     QTimer.singleShot(10, w.handleNewSignals) 
     930 
     931    QTimer.singleShot(1000, lambda: w.SetData(data)) 
     932    QTimer.singleShot(1500, w.handleNewSignals) 
    929933 
    930934    app.exec_() 
  • _bioinformatics/widgets/OWPIPA.py

    r1726 r1748  
    554554 
    555555    def UpdateExperimentTypes(self): 
    556         self.signalManager.freeze(self).push() #setFreeze(1) 
     556        if self.signalManager: 
     557            self.signalManager.freeze(self).push() 
    557558        try: 
    558559            self.expressionTypesCB.clear() 
     
    562563            pass 
    563564        finally: 
    564             self.signalManager.freeze(self).pop() #setFreeze(0) 
     565            if self.signalManager: 
     566                self.signalManager.freeze(self).pop() 
     567 
    565568        self.ctypei = max(0, min(self.ctypei, len(self.exTypes)-1)) 
    566569 
  • _bioinformatics/widgets/OWSetEnrichment.py

    r1726 r1748  
    8484        self.loadSettings() 
    8585         
    86         self.signalManager.freeze(self).push() 
     86        if self.signalManager: 
     87            self.signalManager.freeze(self).push() 
    8788        QTimer.singleShot(50, self.updateHierarchy) 
    8889         
     
    211212            self.genesets = all 
    212213        finally: 
    213             self.signalManager.freeze(self).pop() #setFreeze(self.signalManager.freezing - 1) 
     214            if self.signalManager: 
     215                self.signalManager.freeze(self).pop() 
    214216         
    215217    def setData(self, data=None): 
     
    574576    w = OWSetEnrichment() 
    575577    w.updateHierarchy() 
    576     data = orange.ExampleTable("../../../doc/datasets/brown-selected") 
     578    data = orange.ExampleTable("brown-selected") 
    577579#    data = orange.ExampleTable("../human") 
    578580#    print cProfile.runctx("w.setData(data)", globals(), locals()) 
Note: See TracChangeset for help on using the changeset viewer.