source: orange-bioinformatics/_bioinformatics/obiDictyMutants.py @ 1761:d8f3d4bb64fa

Revision 1761:d8f3d4bb64fa, 3.4 KB checked in by Flashpoint <vid.flashpoint@…>, 12 months ago (diff)

Added obiDictyMutants.py

RevLine 
[1761]1import sys, os
2import urllib2
3import shutil
4import re
5
6from collections import defaultdict
7
8from Orange.orng import orngServerFiles
9
10class dicty_mutant(object):
11
12    def __init__(self, mutant_line):
13        mutant = mutant_line.split("\t")
14        self.id = mutant[0]
15        self.descriptor = set(mutant[1].split("/"))
16        self.genes = mutant[2].split(" | ")
17        self.phenotypes = mutant[3].split(" | ")
18
19
20class dicty_mutants(object):
21    VERSION=1
22    DEFAULT_DATABASE_PATH = orngServerFiles.localpath("DictyMutants") #use a default folder for storing the genesets
23
24    def __init__(self, local_database_path=None):
25        self.local_database_path = local_database_path if local_database_path is not None else self.DEFAULT_DATABASE_PATH
26
27        if not os.path.exists(self.local_database_path):
28            download_from_dictybase(self, self.local_database_path)
29
30        filename = os.path.join(cls.local_database_path, "DictyMutants")
31        self.load(filename)
32
33    @classmethod
34    def download_from_dictybase(cls, local_database_path=None):
35        cls.local_database_path = local_database_path if local_database_path is not None else cls.DEFAULT_DATABASE_PATH
36
37        if not os.path.exists(cls.local_database_path):
38            os.mkdir(cls.local_database_path)
39
40        filename = os.path.join(cls.local_database_path, "DictyMutants")
41        temp_file = os.path.join(cls.local_database_path, "DictyMutantsTemp")
42        stream = urllib2.urlopen("http://dictybase.org/db/cgi-bin/dictyBase/download/download.pl?area=mutant_phenotypes&ID=all-mutants.txt")
43
44        if not os.path.exists(filename):
45            with open(filename, "wb") as file:
46                shutil.copyfileobj(stream, file)
47        else:
48            toremove = False
49            with open(temp_file, "wb") as file:
50                shutil.copyfileobj(stream, file)
51            current = open(filename, "rb")
52            temporary = open(temp_file, "rb")
53            if current.read() == temporary.read():
54                toremove = True
55            current.close()
56            temporary.close()
57
58            if toremove:
59                os.remove(temp_file)
60            else:
61                os.rename(temp_file, filename)
62
63    def load(self, filename):
64        file = open(filename, "rb")
65        header = file.readline().rstrip()
66        lines = file.read().splitlines()
67        self._dicty_mutants = dict([(dicty_mutant(line), line) for line in lines if line])
68
69    def mutants(self):
70        return self._dicty_mutants.keys()
71
72    def genes(self):
73        return sorted(set(reduce(list.__add__, [self.mutant_genes(mutant) for mutant in self.mutants()], [])))
74
75    def mutant_genes(self, mutant):
76        return dicty_mutant(self._dicty_mutants[mutant]).genes
77
78    def gene_mutants(self):
79        d = defaultdict(set)
80        for mutant, genes in [(mutant, self.mutant_genes(mutant)) for mutant in self.mutants()]:
81            for gene in genes:
82                d[gene].add(mutant)
83        return d
84
85def mutants():
86    """ Return all mutant objects
87    """
88    return dicty_mutants.get_instance().mutants()
89
90def genes():
91    """ Return a set of all genes referenced in dictybase
92    """
93    return dicty_mutants.get_instance().genes()
94
95def mutant_genes(mutant):
96    """ Return a set of all genes referenced by a mutant in dictybase
97    """
98    return OMIM.get_instance().mutant_genes(mutant)
99
100def gene_mutants():
101    """ Return a dictionary {gene: set(disease_objects for gene), ...}
102    """
103    return OMIM.get_instance().gene_diseases()
104
105
Note: See TracBrowser for help on using the repository browser.