source: orange-bioinformatics/_bioinformatics/obiDictyMutants.py @ 1763:896de921cd4b

Revision 1763:896de921cd4b, 3.5 KB checked in by Flashpoint <vid.flashpoint@…>, 12 months ago (diff)

Fixed several syntax errors

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