Changeset 1797:43f9097a0bc8 in orange-bioinformatics


Ignore:
Timestamp:
05/21/13 09:44:09 (11 months ago)
Author:
Flashpoint <vid.flashpoint@…>
Branch:
default
Message:

obiOMIM.py is now correctly updated

File:
1 edited

Legend:

Unmodified
Added
Removed
  • _bioinformatics/obiOMIM.py

    r1796 r1797  
    33import shutil 
    44import re 
     5import Orange 
    56 
    67from collections import defaultdict 
    78 
    8 from Orange.orng import orngServerFiles 
    9  
    109class disease(object): 
    11     """ A class representing a disease in the OMIM database 
    12     """ 
    13     regex = re.compile(r'(?P<name>.*?),? (?P<id>[0-9]{3,6} )?(?P<m1>\([123?]\) )?(?P<m2>\([123?]\) )? *$') 
    14     __slots__ = ["name", "id", "mapping"] 
    15     def __init__(self, morbidmap_line): 
    16         string = morbidmap_line.split("|", 1)[0] 
    17         match = self.regex.match(string) 
    18         print string 
    19         print match.groups() 
    20         self.name, self.id, self.mapping = [s.strip() if s else s for s in match.groups()[:3]] 
    21         if match.group("m2"): 
    22             self.mapping += " " + match.group("m2").strip() 
    23          
     10        """ A class representing a disease in the OMIM database 
     11        """ 
     12        regex = re.compile(r'(?P<name>.*?),? (?P<id>[0-9]{3,6} )?(?P<m1>\([123?]\) )?(?P<m2>\([123?]\) )? *$') 
     13        __slots__ = ["name", "id", "mapping"] 
     14        def __init__(self, morbidmap_line): 
     15            string = morbidmap_line.split("|", 1)[0] 
     16            match = self.regex.match(string) 
     17    #        print string 
     18    #        print match.groups() 
     19            self.name, self.id, self.mapping = [s.strip() if s else s for s in match.groups()[:3]] 
     20            if match.group("m2"): 
     21                self.mapping += " " + match.group("m2").strip() 
     22                                                                                     
    2423class OMIM(object): 
    2524    VERSION = 1 
    26     DEFAULT_DATABASE_PATH = orngServerFiles.localpath("OMIM") 
     25    DEFAULT_DATABASE_PATH = Orange.utils.serverfiles.localpath("OMIM") 
    2726    def __init__(self, local_database_path=None): 
    2827        self.local_database_path = local_database_path if local_database_path is not None else self.DEFAULT_DATABASE_PATH 
    29          
    30         if not os.path.exists(self.local_database_path): 
    31             os.makedirs(self.local_database_path) 
    32              
    33         filename = os.path.join(self.local_database_path, "morbidmap") 
    34         print filename 
    35         if not os.path.exists(filename): 
    36             stream = urllib2.urlopen("ftp://ftp.ncbi.nih.gov/repository/OMIM/ARCHIVE/morbidmap") 
    37             with open(filename, "wb") as file: 
    38                 shutil.copyfileobj(stream, file, length=10) 
    39              
    40              
     28   
     29        if self.local_database_path == self.DEFAULT_DATABASE_PATH: 
     30            filename = Orange.utils.serverfiles.localpath_download("OMIM", "morbidmap") 
     31        else: 
     32            filename = os.path.join(self.local_database_path, "morbidmap") 
     33 
    4134        self.load(filename) 
    42      
     35                                                                                                                                                                                     
    4336    @classmethod 
    4437    def download_from_NCBI(cls, file=None): 
    45         data = urllib2.urlopen("ftp://ftp.ncbi.nih.gov/repository/OMIM/ARCHIVE/morbidmap").read() 
    46         if file is None: 
    47             if not os.path.exists(cls.DEFAULT_DATABASE_PATH): 
    48                 os.mkdir(cls.DEFAULT_DATABASE_PATH) 
    49             file = open(os.path.join(cls.DEFAULT_DATABASE_PATH, "morbidmap"), "wb") 
    50         elif isinstance(file, basestring): 
     38        if isinstance(file, basestring): 
    5139            file = open(file, "wb") 
    52         file.write(data) 
     40        stream = urllib2.urlopen("ftp://ftp.ncbi.nih.gov/repository/OMIM/ARCHIVE/morbidmap") 
     41        shutil.copyfileobj(stream, file, length=10) 
    5342        file.close() 
    54          
     43                                                                                                                                                                                                                                                         
    5544    @classmethod 
    5645    def get_instance(cls): 
     
    6150        instance.__dict__ = cls._shared_dict 
    6251        return instance  
    63      
     52                                                                                                                                                                                                                                                                                                                                     
    6453    def load(self, filename): 
    6554        file = open(filename, "rb") 
    6655        lines = file.read().splitlines() 
    6756        self._disease_dict = dict([(disease(line), line) for line in lines if line]) 
    68          
     57                                                                                                                                                                                                                                                                                                                                                                     
    6958    def diseases(self): 
    7059        return self._disease_dict.keys() 
    71      
     60                                                                                                                                                                                                                                                                                                                                                                                     
    7261    def genes(self): 
    7362        return sorted(set(reduce(list.__add__, [self.disease_genes(disease) for disease in self.diseases()], []))) 
    74      
     63                                                                                                                                                                                                                                                                                                                                                                                                 
    7564    def disease_genes(self, disease): 
    7665        return self._disease_dict[disease].split("|")[1].split(", ") 
    77      
     66                                                                                                                                                                                                                                                                                                                                                                                                             
    7867    def gene_diseases(self): 
    7968        d = defaultdict(set) 
     
    8271                d[gene].add(disease) 
    8372        return d 
    84      
     73                                                                                                                                                                                                                                                                                                                                                                                                                                                                             
    8574def diseases(): 
    8675    """ Return all disease objects 
    8776    """ 
    8877    return OMIM.get_instance().diseases() 
    89          
     78                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             
    9079def genes(): 
    9180    """ Return a set of all genes referenced in OMIM  
     
    10392    return OMIM.get_instance().gene_diseases() 
    10493 
    105 if __name__ == "__main__": 
    106     print genes() 
Note: See TracChangeset for help on using the changeset viewer.