Esempio n. 1
0
    def test_complex_alignment(self):
        cigar = [
            (CIGAR.M, 137),
            (CIGAR.D, 14823),
            (CIGAR.M, 19),
            (CIGAR.D, 1),
            (CIGAR.M, 5),
            (CIGAR.I, 18),
            (CIGAR.D, 18),
            (CIGAR.M, 16),
            (CIGAR.I, 1),
            (CIGAR.D, 120),
            (CIGAR.M, 22),
            (CIGAR.S, 147),
        ]
        read = Mock(cigar=cigar, query_sequence='A' * 365, reference_start=88217410)

        with pytest.raises(NotImplementedError):
            _read.convert_events_to_softclipping(read, ORIENT.LEFT, 50, 50)

        read.cigar = [(CIGAR.EQ if x == CIGAR.M else x, y) for x, y in read.cigar]
        converted = _read.convert_events_to_softclipping(read, ORIENT.LEFT, 50, 50)
        assert converted.cigar == [(CIGAR.EQ, 137), (CIGAR.S, 365 - 137)]

        converted = _read.convert_events_to_softclipping(read, ORIENT.RIGHT, 50, 100)
        assert converted.cigar == read.cigar
Esempio n. 2
0
 def test_left_combined_small_events(self):
     read = Mock(cigar=[(CIGAR.EQ, 10), (CIGAR.D, 6), (CIGAR.I, 5),
                        (CIGAR.EQ, 35)],
                 query_sequence='A' * 50)
     converted = _read.convert_events_to_softclipping(
         read, ORIENT.LEFT, 10, 10)
     self.assertEqual([(CIGAR.EQ, 10), (CIGAR.S, 40)], converted.cigar)
Esempio n. 3
0
 def test_left_anchor_after_event(self):
     read = Mock(
         cigar=[(CIGAR.EQ, 4), (CIGAR.D, 10), (CIGAR.EQ, 40), (CIGAR.D, 10), (CIGAR.EQ, 6)],
         query_sequence='A' * 50,
     )
     converted = _read.convert_events_to_softclipping(read, ORIENT.LEFT, 5, 5)
     assert converted.cigar == [(CIGAR.EQ, 4), (CIGAR.D, 10), (CIGAR.EQ, 40), (CIGAR.S, 6)]
Esempio n. 4
0
 def test_right_large_deletion(self):
     read = Mock(cigar=[(CIGAR.EQ, 10), (CIGAR.D, 10), (CIGAR.EQ, 40)],
                 query_sequence='A' * 50,
                 reference_start=100)
     converted = _read.convert_events_to_softclipping(
         read, ORIENT.RIGHT, 5, 5)
     self.assertEqual([(CIGAR.S, 10), (CIGAR.EQ, 40)], converted.cigar)
     self.assertEqual(read.reference_start + 20, converted.reference_start)
Esempio n. 5
0
 def test_right_anchor_after_event(self):
     read = Mock(
         cigar=[(CIGAR.EQ, 6), (CIGAR.D, 10), (CIGAR.EQ, 40), (CIGAR.D, 10), (CIGAR.EQ, 4)],
         query_sequence='A' * 50,
         reference_start=100,
     )
     converted = _read.convert_events_to_softclipping(read, ORIENT.RIGHT, 5, 5)
     assert converted.cigar == [(CIGAR.S, 6), (CIGAR.EQ, 40), (CIGAR.D, 10), (CIGAR.EQ, 4)]
     assert converted.reference_start == read.reference_start + 16
Esempio n. 6
0
 def test_multiple_events(self):
     cigar = [(CIGAR.EQ, 18), (CIGAR.X, 1), (CIGAR.EQ, 30), (CIGAR.D, 8146),
              (CIGAR.EQ, 10), (CIGAR.D, 62799), (CIGAR.EQ, 28),
              (CIGAR.D, 2), (CIGAR.EQ, 27), (CIGAR.S, 77)]
     qlen = sum([v for c, v in cigar if c in _cigar.QUERY_ALIGNED_STATES])
     read = Mock(cigar=cigar,
                 query_sequence=('N' * qlen),
                 reference_start=1000)
     converted = _read.convert_events_to_softclipping(
         read, ORIENT.RIGHT, 50, 50)
     exp = [(CIGAR.S, 59), (CIGAR.EQ, 28), (CIGAR.D, 2), (CIGAR.EQ, 27),
            (CIGAR.S, 77)]
     self.assertEqual(exp, converted.cigar)
Esempio n. 7
0
 def test_multiple_left_with_ins(self):
     cigar = [(4, 94), (7, 1), (8, 1), (7, 10), (8, 1), (7, 4), (1, 2),
              (7, 40), (1, 1), (2, 714), (7, 7), (1, 38), (7, 1), (8, 1),
              (7, 17), (2, 1), (7, 1), (8, 1), (7, 26), (2, 17), (7, 10),
              (4, 4)]
     exp = [(4, 94), (7, 1), (8, 1), (7, 10), (8, 1), (7, 4), (1, 2),
            (7, 40), (4, 38 + 8 + 20 + 1 + 26 + 10 + 4)]
     qlen = sum([v for c, v in cigar if c in _cigar.QUERY_ALIGNED_STATES])
     read = Mock(cigar=cigar,
                 query_sequence=('N' * qlen),
                 reference_start=1000)
     converted = _read.convert_events_to_softclipping(
         read, ORIENT.LEFT, 50, 50)
     self.assertEqual(exp, converted.cigar)
Esempio n. 8
0
 def test_left_all_mismatch_error(self):
     read = Mock(cigar=[(CIGAR.X, 10), (CIGAR.D, 10), (CIGAR.X, 40)],
                 query_sequence='A' * 50)
     converted = _read.convert_events_to_softclipping(
         read, ORIENT.LEFT, 5, 5)
     self.assertEqual(read, converted)
Esempio n. 9
0
 def test_left_large_deletion(self):
     read = Mock(cigar=[(CIGAR.EQ, 10), (CIGAR.D, 10), (CIGAR.EQ, 40)],
                 query_sequence='A' * 50)
     converted = _read.convert_events_to_softclipping(
         read, ORIENT.LEFT, 5, 5)
     self.assertEqual([(CIGAR.EQ, 10), (CIGAR.S, 40)], converted.cigar)