示例#1
0
文件: find_RI.py 项目: babonis/gimme
def add_intervals(graph, exonsDb):
    iv_tree = IntervalTree()
    for node in graph.nodes():
        exon = exonsDb[node]
        iv_tree.add_interval(exon)

    return iv_tree
示例#2
0
class TestFindRI(unittest.TestCase):
    def setUp(self):
        self.exonsDB = {}
        self.ex1 = Exon('chrX', 1000, 2000, 'ex1.1', '+')
        self.ex2 = Exon('chrX', 3000, 4000, 'ex1.1', '+')
        self.ex3 = Exon('chrX', 5000, 6000, 'ex1.1', '+')
        self.ex4 = Exon('chrX', 7000, 8000, 'ex1.1', '+')
        self.exonsDB[str(self.ex1)] = self.ex1
        self.exonsDB[str(self.ex2)] = self.ex2
        self.exonsDB[str(self.ex3)] = self.ex3
        self.exonsDB[str(self.ex4)] = self.ex4
        self.tree = IntervalTree()
        self.tree.add_interval(self.ex1)
        self.tree.add_interval(self.ex2)
        self.tree.add_interval(self.ex3)
        self.tree.add_interval(self.ex4)
        self.graph = nx.DiGraph()

    def test_no_retained_introns(self):
        self.path1 = [str(self.ex1), str(self.ex2), str(self.ex3)]
        self.path2 = [str(self.ex1), str(self.ex3), str(self.ex4)]
        self.graph.add_path(self.path1)
        self.graph.add_path(self.path2)
        self.events = list(find_RI(self.graph, self.tree, self.exonsDB))

        self.assertEqual(len(self.events), 0)

    def test_one_retained_introns(self):
        self.ex5 = Exon('chrX', 3000, 6000, 'ex1.1', '+')
        self.exonsDB[str(self.ex5)] = self.ex5
        self.tree.add_interval(self.ex5)

        self.path1 = [str(self.ex1), str(self.ex2),
                        str(self.ex3), str(self.ex4)]
        self.path2 = [str(self.ex1), str(self.ex5), str(self.ex4)]
        self.graph.add_path(self.path1)
        self.graph.add_path(self.path2)
        self.events = list(find_RI(self.graph, self.tree, self.exonsDB))

        self.assertEqual(len(self.events), 1)

    def test_two_retained_introns(self):
        self.ex5 = Exon('chrX', 1000, 4000, 'ex1.1', '+')
        self.exonsDB[str(self.ex5)] = self.ex5
        self.tree.add_interval(self.ex5)

        self.ex6 = Exon('chrX', 5000, 8000, 'ex1.1', '+')
        self.exonsDB[str(self.ex6)] = self.ex6
        self.tree.add_interval(self.ex6)

        self.path1 = [str(self.ex1), str(self.ex2),
                        str(self.ex3), str(self.ex4)]
        self.path2 = [str(self.ex5), str(self.ex6)]
        self.graph.add_path(self.path1)
        self.graph.add_path(self.path2)
        self.events = list(find_RI(self.graph, self.tree, self.exonsDB))

        self.assertEqual(len(self.events), 2)
示例#3
0
文件: find_MXE.py 项目: babonis/gimme
def remove_overlaps(events, exonsDB):
    tree = IntervalTree()
    all_nodes = set()
    for path in events:
        for node in path:
            all_nodes.add(node)
            exon = exonsDB[node]
            tree.add_interval(exon)

    overlapped_exons = set()
    for node in all_nodes:
        exon = exonsDB[node]
        for overlap in tree.find(exon.start, exon.end):
            if (overlap.start != exon.start or
                    overlap.end != exon.end):
                overlapped_exons.add(node)

    new_events = []
    for path in events:
        if len(set(path).intersection(overlapped_exons)) == 0:
            new_events.append(path)
    return new_events