Example #1
0
 def test_short_and_long_peak(self):
     intervals = [obg.Interval(0, 1, [1, 3]),
                  obg.Interval(2, 3, [6, -7, 9, 10])]
     self.intervals = intervals
     self.correct_intervals = [obg.Interval(0, 3, [1]),
                               intervals[1]]
     self.do_asserts()
Example #2
0
 def test_subgraph_covered(self):
     self.intervals = [
         obg.Interval(1, 2, [3, 4, 8]),
         obg.Interval(0, 3, [2, 5])
     ]
     self.correct_intervals = self.intervals
     self.do_asserts()
Example #3
0
 def test_peak_over_different_edges(self):
     self.intervals = [
         obg.Interval(0, 3, [-1, -11]),
         obg.Interval(0, 2, [7]),
     ]
     self.correct_intervals = self.intervals
     self.do_asserts()
Example #4
0
    def test_from_intervals2(self):
        graph = obg.GraphWithReversals(
            {
                1: obg.Block(10),
                2: obg.Block(10),
                3: obg.Block(10)
            }, {
                1: [2],
                2: [3]
            })
        intervals = [
            obg.Interval(1, 5, [1]),
            obg.Interval(3, 7, [1]),
            obg.Interval(5, 3, [1, 2]),
            obg.Interval(5, 6, [2]),
            obg.Interval(8, 8, [1, 2, 3])
        ]

        pileup = SparsePileup.from_intervals(graph, intervals)
        data = pileup.data
        self.assertEqual(data[1].start_value, False)
        self.assertEqual(data[2].start_value, 2)
        self.assertEqual(data[3].start_value, 1)

        self.assertTrue(np.all([1, 3, 5, 7, 8] == data[1].indexes))
        #print("data 1 values")
        #print(data[2].values)
        self.assertTrue(np.all([1, 2, 2, 1, 2] == data[1].values))

        self.assertTrue(np.all([3, 5, 6] == data[2].indexes))
        self.assertTrue(np.all([1, 2, 1] == data[2].values))

        self.assertTrue(np.all([8] == data[3].indexes))
        self.assertTrue(np.all([0] == data[3].values))
Example #5
0
 def test_edge_holes(self):
     self.intervals = [obg.Interval(0, 2, [i]) for i in [2, 4, 6]]
     self.intervals.append(obg.Interval(1, 2, [5]))
     self.correct_holes = [
         obg.Interval(2, 1, [4, -5]),
         obg.Interval(2, 1, [2, 5]),
     ]
     self.do_asserts()
Example #6
0
 def test_multiple_rps(self):
     intervals = [obg.Interval(4, 6, [1]), obg.Interval(6, 4, [1, 2])]
     values = [1, 2]
     self.pileup.set_sorted_interval_values(intervals, values)
     correct = {}
     correct[1] = ValuedIndexes([4, 6], [1, 2], 0, 10)
     correct[2] = ValuedIndexes([4], [0], 2, 10)
     self.assertEqual(self.pileup.data[1], correct[1])
     self.assertEqual(self.pileup.data[2], correct[2])
Example #7
0
    def test_simple(self):
        intervals = [obg.Interval(4, 6, [1]), obg.Interval(6, 8, [1])]
        values = [1, 2]

        self.pileup.set_sorted_interval_values(intervals, values)
        correct = ValuedIndexes([4, 6, 8], [1, 2, 0], 0, 10)
        print(correct)
        print(self.pileup.data[1])
        self.assertEqual(self.pileup.data[1], correct)
Example #8
0
 def test_cycle(self):
     start_intervals = [
         obg.Interval(0, 100, [1], graph=self.padded_graph),
         obg.Interval(0, 100, [3], graph=self.padded_graph)]
     pileup = SparsePileup.from_intervals(
         self.padded_graph, start_intervals)
     pileup.threshold(1)
     cleaner = HolesCleaner(pileup, 40)
     areas = cleaner.run()
     true_areas = Areas(self.padded_graph, {})
     self.assertEqual(areas, true_areas)
Example #9
0
 def test_loop_with_start_and_end_intervals(self):
     start_intervals = [
         obg.Interval(
             90, 10, [1, 2],
             graph=self.padded_graph),
         obg.Interval(
             90, 100, [2],
             graph=self.padded_graph)]
     pileup = SparsePileup.from_intervals(
         self.padded_graph, start_intervals)
     pileup.threshold(1)
     cleaner = PeaksCleaner(pileup, 400)
     areas = cleaner.run()
     self.assertEqual(areas.areas, {})
Example #10
0
 def test_simple(self):
     start_intervals = [
         obg.Interval(10, 40, [2], graph=self.padded_graph),
         obg.Interval(50, 90, [2], graph=self.padded_graph)]
     pileup = SparsePileup.from_intervals(
         self.padded_graph, start_intervals)
     pileup.threshold(1)
     cleaner = HolesCleaner(pileup, 40)
     areas = cleaner.run()
     self.assertEqual(areas, Areas(self.padded_graph,
                                   {2: [0, 10, 40, 50, 90, 100]}))
     pileup.fill_small_wholes(40)
     true_pileup = SparsePileup.from_intervals(
         self.padded_graph,
         [obg.Interval(0, 100, [2], graph=self.padded_graph)])
     true_pileup.threshold(1)
     self.assertEqual(pileup, true_pileup)
Example #11
0
 def test_mid_interval(self):
     start_intervals = [
         obg.Interval(10, 90, [2], graph=self.padded_graph)]
     pileup = SparsePileup.from_intervals(
         self.lin_graph, start_intervals)
     pileup.threshold(1)
     cleaner = HolesCleaner(pileup, 20)
     areas = cleaner.run()
     self.assertEqual(areas, Areas(self.lin_graph))
Example #12
0
    def to_simple_intervals(self):
        intervals = []
        for node, area in self.areas.items():
            for i in range(0, len(area) // 2):
                start = int(area[i * 2])
                end = int(area[i * 2 + 1])
                interval = obg.Interval(start, end, [node], self.graph)
                intervals.append(interval)

        return intervals
Example #13
0
    def test_lin(self):
        intervals = [
            obg.Interval(80, 20, [1, 2]),
            obg.Interval(41, 90, [2]),
            obg.Interval(10, 50, [3]),
            obg.Interval(70, 100, [3]),
            obg.Interval(20, 50, [4])]

        for i in intervals:
            i.graph = self.lin_graph
        pileup = SparsePileup.from_intervals(self.lin_graph, intervals)
        pileup.threshold(1)
        cleaner = HolesCleaner(pileup, 20)
        areas = cleaner.run()
        true_areas = Areas(self.lin_graph,
                           {2: [90, 100],
                            3: [0, 10, 50, 70],
                            4: [0, 20]})
        self.assertEqual(areas, true_areas)
Example #14
0
 def test_loop_with_surrounding(self):
     start_intervals = [obg.Interval(
         90, 100, [1, 2],
         graph=self.padded_graph)]
     pileup = SparsePileup.from_intervals(
         self.padded_graph, start_intervals)
     pileup.threshold(1)
     cleaner = PeaksCleaner(pileup, 400)
     areas = cleaner.run()
     self.assertIntervalsGiveSamePileup(areas, start_intervals)
Example #15
0
def test_map_interval_collection(hierarchical_map):
    interval_rps = [[100, 101], [100, 102], [101, 105], [102, 103], [102, 104],
                    [103, 105], [104, 105]]
    intervals = [obg.Interval(5, 5, rps) for rps in interval_rps]
    linear_intervals = hierarchical_map.map_interval_collection(intervals)
    true_starts = [
        5, 5, 10 + 5 * 26 / 11, 10 + 5, 10 + 5, 22 + 5 * 14 / 13, 22 + 5
    ]

    true_ends = [
        10 + 5 * 26 / 11, 10 + 5, 36 + 5, 22 + 5 * 14 / 13, 22 + 5, 36 + 5,
        36 + 5
    ]
    true_linear = LinearIntervalCollection(true_starts, true_ends)
    assert linear_intervals == true_linear
Example #16
0
    def test_intervals_to_start_and_ends(self):
        graph = obg.GraphWithReversals({
            1: obg.Block(10),
            2: obg.Block(10)
        }, {1: [2]})
        intervals = [
            obg.Interval(1, 5, [1]),
            obg.Interval(3, 7, [1]),
            obg.Interval(5, 3, [1, 2]),
            obg.Interval(5, 6, [2])
        ]

        correct_starts = {1: [1, 3, 5], 2: [0, 5]}
        correct_ends = {1: [5, 7, 10], 2: [3, 6]}

        starts, ends = intervals_to_start_and_ends(graph, intervals)
        #print("Starts")
        #print(starts)
        #print("Ends")
        #print(ends)

        for rp in graph.blocks:
            self.assertTrue(np.all(correct_starts[rp] == starts[rp]))
            self.assertTrue(np.all(correct_ends[rp] == ends[rp]))
Example #17
0
    def setUpRandomIntervals(self, with_hole=False):
         # Create random interval
        start_rp = randrange(1, self.n_blocks + 1)
        start_offset = randrange(0, 3)
        end_offset = max(randrange(0, 3), start_offset + 1)
        rps = [start_rp]
        prev_rp = start_rp
        for i in range(0, self.n_blocks):
            edges = self.graph.adj_list[prev_rp]
            if len(edges) == 0:
                break
            rp = edges[randrange(0, len(edges))]
            prev_rp = rp
            if rp in rps:
                break

            rps.append(rp)

        self.intervals = [obg.Interval(start_offset, end_offset, rps, self.graph)]

        if with_hole:
            # Split interval at random position
            split_rp = randrange(0, len(rps))
            if split_rp > 0:
                split_pos = randrange(0, 2)
            else:
                split_pos = start_offset + 1

            split_end = split_pos
            first_interval_rps = rps[0:split_rp + 1]
            if split_pos == 0:
                first_interval_rps = first_interval_rps[0:split_rp]
                split_end = 2

            start_interval = obg.Interval(start_offset, split_end, first_interval_rps, self.graph)
            end_interval = obg.Interval(split_pos, end_offset, rps[split_rp:], self.graph)
            self.intervals = [start_interval, end_interval]
            hole_rps = [first_interval_rps[-1]]
            hole_end = split_pos
            if rps[split_rp] != hole_rps[0]:
                hole_rps.append(rps[split_rp])

            if hole_end == 0:
                hole_end = 3
                hole_rps = hole_rps[:-1]

            self.hole_interval = obg.Interval(split_end, hole_end, hole_rps, self.graph)
            if start_interval.contains(self.hole_interval) or end_interval.contains(self.hole_interval) \
                    or start_interval.contains(self.hole_interval.get_reverse()) \
                    or end_interval.contains(self.hole_interval.get_reverse()):
                self.hole_interval = obg.Interval(0, 0, [1], self.graph)  # Use empty hole

            self.intervals_without_holes = [obg.Interval(start_offset, end_offset, rps, self.graph)]
 def extend_peak_to_reference(self, peak):
     if peak.region_paths[0] < 0:
         peak.graph = self.graph
         peak = peak.get_reverse()
     start_node = peak.region_paths[0]
     end_node = peak.region_paths[-1]
     start_offset = peak.start_position.offset
     end_offset = peak.end_position.offset
     rps = peak.region_paths
     if start_node not in self.indexed_interval.nodes_in_interval():
         start_node = min(
             -node for node in self.graph.reverse_adj_list[-start_node]
             if -node in self.indexed_interval.nodes_in_interval())
         start_offset = self.graph.node_size(start_node) - 1
         rps = [start_node] + rps
     if end_node not in self.indexed_interval.nodes_in_interval():
         end_node = max(
             node for node in self.graph.adj_list[end_node]
             if node in self.indexed_interval.nodes_in_interval())
         end_offset = 1
         rps = rps + [end_node]
     return obg.Interval(start_offset, end_offset, rps)
Example #19
0
 def test_single_long_interval(self):
     self.intervals = [obg.Interval(0, 3, [1, 3, 4, 6, -7, 9, 10])]
     self.correct_intervals = [obg.Interval(0, 3, [1, 3, 4, 6, -7, 9, 10])]
     self.do_asserts()
def diff_expr():
    main_path = obg.Interval(3, 2, [1, 3, 4])
    var_path = obg.Interval(3, 2, [1, 2, 4])
    return DiffExpression("peak1", main_path, var_path, 14, 4)
Example #21
0
 def test_middle_hole(self):
     self.intervals = [obg.Interval(0, 1, [2]),
                       obg.Interval(2, 3, [2]),
                       obg.Interval(0, 3, [5])]
     self.correct_holes = [obg.Interval(1, 2, [2])]
     self.do_asserts()
Example #22
0
 def test_single_hole(self):
     self.intervals = [obg.Interval(0, 3, [2]),
                       obg.Interval(1, 3, [4])]
     self.correct_holes = [obg.Interval(0, 1, [4])]
     self.do_asserts()
Example #23
0
 def test_single_interval_on_reversed_nodes(self):
     self.intervals = [obg.Interval(0, 3, [6, -7, -1, -11])]
     self.correct_intervals = self.intervals
     self.do_asserts()
Example #24
0
 def test_single_peak_positive_and_negative_node(self):
     self.intervals = [obg.Interval(0, 3, [6, -7])]
     self.correct_intervals = self.intervals
     self.do_asserts()
Example #25
0
edits = [Edit(4, 4, None), Edit(1, 1, "N")]

mapping_jsons = [{
    "position": position_jsons[0],
    "edit": edit_jsons
}, {
    "position": position_jsons[1],
    "edit": edit_jsons
}]

mappings = [Mapping(positions[0], edits), Mapping(positions[1], edits)]

path_jsons = [{"name": "path1", "mapping": mapping_jsons[:1]}]

paths = [Path("path1", mappings[:1])]
intervals = [offsetbasedgraph.Interval(10, 15, [0])]

nodes = [
    Node("_", 0, 10),
    Node("_", 1, 20),
    Node("_", 2, 30),
    Node("_", 3, 40)
]

edges = [Edge(0, 1), Edge(0, 2), Edge(1, 3), Edge(2, 3)]

vg_graphs = [Graph(nodes, edges, [])]
ob_graphs = [graph.get_offset_based_graph() for graph in vg_graphs]

pileup_intervals = [
    offsetbasedgraph.Interval(5, 5, [0, 1]),
Example #26
0
 def test_whole_graph_covered(self):
     self.intervals = [
         obg.Interval(0, 3, [i]) for i in range(1, 12)
     ]
     self.correct_intervals = self.intervals
     self.do_asserts()
Example #27
0
def get_sequence(sequence_graph, node_ids):
    interval = obg.Interval(
        0, sequence_graph._node_sizes[node_ids[-1]], node_ids)
    return sequence_graph.get_interval_sequence(interval)
Example #28
0
 def test_splitted_long_interval(self):
     intervals = [obg.Interval(0, 1, [1, 3, 4]),
                  obg.Interval(2, 3, [6, -7, 9, 10])]
     self.intervals = intervals
     self.correct_intervals = intervals
     self.do_asserts()
Example #29
0
 def test_cleans_all(self):
     self.intervals = [obg.Interval(0, 3, [1]), obg.Interval(3, 2, [4, 6])]
     self.correct_intervals = []
     self.do_asserts()