source: orange-bioinformatics/_bioinformatics/obiDictyMutants.py @ 1776:e7da84795108

Revision 1776:e7da84795108, 4.4 KB checked in by Flashpoint <vid.flashpoint@…>, 11 months ago (diff)

obiDictyMutants now functional

Line 
1import os
2import urllib2
3import shutil
4
5from collections import defaultdict
6
7from Orange.orng import orngServerFiles
8
9class DictyMutant(object):
10
11    def __init__(self, mutant_line):
12        mutant = mutant_line.split("\t")
13        self.name = mutant[0]
14        self.descriptor = set(mutant[1].split("/"))
15        self.genes = mutant[2].split(" | ")
16        self.phenotypes = mutant[3].split(" | ")
17        self.null = False
18        self.overexp = False
19        self.multiple = False
20        self.develop = False
21        self.other = False
22 
23class DictyMutants(object):
24    VERSION=1
25    DEFAULT_DATABASE_PATH = orngServerFiles.localpath("DictyMutants") #use a default folder for storing the genesets
26
27    def __init__(self, local_database_path=None):
28        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.mkdir(self.local_database_path)
32           
33        _mutants = self.prepare_mutants()
34 
35    def update_file(self, name):
36        url = "http://dictybase.org/db/cgi-bin/dictyBase/download/download.pl?area=mutant_phenotypes&ID="
37        filename = os.path.join(self.local_database_path, name)
38        temp_file = os.path.join(self.local_database_path, name + "_temp")
39        stream = urllib2.urlopen(url + name)
40   
41        with open(temp_file, "wb") as file:
42            shutil.copyfileobj(stream, file)
43   
44        os.rename(temp_file, filename)
45        return filename
46   
47    def load_mutants(self, file):
48        data = open(file)
49        data_header = data.readline()
50        data = data.read()
51        return data.splitlines()
52       
53    def prepare_mutants(self):   
54        all_mutants = self.load_mutants(self.update_file("all-mutants.txt"))
55        null_mutants = self.load_mutants(self.update_file("null-mutants.txt"))
56        overexp_mutants = self.load_mutants(self.update_file("overexpression-mutants.txt"))
57        multiple_mutants = self.load_mutants(self.update_file("multiple-mutants.txt"))
58        develop_mutants = self.load_mutants(self.update_file("developmental-mutants.txt"))
59        other_mutants = self.load_mutants(self.update_file("other-mutants.txt"))
60   
61        _mutants = [DictyMutant(mutant) for mutant in all_mutants]
62       
63        the_nulls = set([DictyMutant(line).name for line in null_mutants])
64        the_overexps = set([DictyMutant(line).name for line in overexp_mutants])
65        the_multiples = set([DictyMutant(line).name for line in multiple_mutants])
66        the_develops = set([DictyMutant(line).name for line in develop_mutants])
67        the_others = set([DictyMutant(line).name for line in other_mutants])
68
69        for mutant in _mutants:
70            if mutant.name in the_nulls: mutant.null = True
71            if mutant.name in the_overexps: mutant.overexp = True 
72            if mutant.name in the_multiples: mutant.multiple = True
73            if mutant.name in the_develops: mutant.develop = True
74            if mutant.name in the_others: mutant.other = True
75       
76        self._mutants = {x: x for x in _mutants}
77
78    @classmethod
79    def get_instance(cls):
80        if not hasattr(cls, "_shared_dict"):
81            dicty = DictyMutants()
82            cls._shared_dict = dicty.__dict__
83        instance = DictyMutants.__new__(DictyMutants)
84        instance.__dict__ = cls._shared_dict
85        return instance
86
87    def mutants(self):
88        return self._mutants.keys()
89
90    def genes(self):
91        return sorted(set(reduce(list.__add__, [self.mutant_genes(mutant) for mutant in self.mutants()], [])))
92
93    def mutant_genes(self, mutant):
94        return self._mutants[mutant].genes
95
96    def gene_mutants(self):
97        d = defaultdict(set)
98        for mutant, genes in [(mutant, self.mutant_genes(mutant)) for mutant in self.mutants()]:
99            for gene in genes:
100                d[gene].add(mutant)
101        return d
102
103def mutants():
104    """ Return all mutant objects
105    """
106    return DictyMutants.get_instance().mutants()
107
108def genes():
109    """ Return a set of all genes referenced in dictybase
110    """
111    return DictyMutants.get_instance().genes()
112
113def mutant_genes(mutant):
114    """ Return a set of all genes referenced by a mutant in dictybase
115    """
116    return DictyMutants.get_instance().mutant_genes(mutant)
117
118def gene_mutants():
119    """ Return a dictionary {gene: set(mutant_objects for mutant), ...}
120    """
121    return DictyMutants.get_instance().gene_mutants()
122
123if  __name__  == "__main__":
124    print(mutants())   
Note: See TracBrowser for help on using the repository browser.