Пример #1
0
    def test_combo__reverse_operations(self):
        """Tests a combination of insertions and deletions, similar to above,
        but with operations applied in reverse order.
        """
        before_deletion = 'AAAAA'
        deleted_bases = 'TTT'
        after_deletion = 'GGGGGGGGGGG'
        insertion = 'AAA'
        after_insertion = 'TTTTT'
        raw_seq_str = (before_deletion + deleted_bases + after_deletion +
                       after_insertion)
        seq = Seq(raw_seq_str, generic_dna)
        seq_record = SeqRecord(seq)
        maker = VCFToGenbankMaker(seq_record, None, None)

        insertion_start = (len(before_deletion) + len(deleted_bases) +
                           len(after_deletion))
        insertion_1_data = {'position': insertion_start, 'sequence': insertion}
        maker.handle_insertion(insertion_1_data)

        deletion_data = {
            'interval':
            (len(before_deletion), len(before_deletion) + len(deleted_bases))
        }
        maker.handle_deletion(deletion_data)

        EXPECTED_SEQ = (before_deletion + after_deletion + insertion +
                        after_insertion)
        self.assertEqual(len(EXPECTED_SEQ), len(seq_record.seq))
        self.assertEqual(EXPECTED_SEQ, str(seq_record.seq))
Пример #2
0
    def test_deletion__greater_than_one_base__3_bases(self):
        """Tests a deletion of 3 bases.
        """
        before_deletion = 'AAAAA'
        deleted_bases = 'TTT'
        after_deletion = 'GGGGGGGGGGG'
        raw_seq_str = before_deletion + deleted_bases + after_deletion
        seq = Seq(raw_seq_str, generic_dna)
        seq_record = SeqRecord(seq)
        maker = VCFToGenbankMaker(seq_record, None, None)

        deletion_data = {
            'interval':
            (len(before_deletion), len(before_deletion) + len(deleted_bases))
        }
        maker.handle_deletion(deletion_data)

        # Assert the sequence is correct.
        EXPECTED_SEQ = before_deletion + after_deletion
        self.assertEqual(len(EXPECTED_SEQ), len(seq_record.seq))
        self.assertEqual(EXPECTED_SEQ, str(seq_record.seq))

        # Assert the liftover is correct.
        EXPECTED_LIFTOVER = [((0, 4), (0, 4)), ((8, 18), (5, 15))]
        self.assertEqual(EXPECTED_LIFTOVER,
                         maker.runtime_liftover._interval_mapping)
Пример #3
0
    def test_deletion__multiple_positions(self):
        """Tests multiple deletions.
        """
        before_deletion = 'AAAAA'
        deleted_bases = 'TTT'
        after_deletion = 'GGGGGGGGGGG'
        other_deletion = 'C'
        after_other_deletion = 'TTTTT'
        raw_seq_str = (before_deletion + deleted_bases + after_deletion +
                       other_deletion + after_other_deletion)
        seq = Seq(raw_seq_str, generic_dna)
        seq_record = SeqRecord(seq)
        maker = VCFToGenbankMaker(seq_record, None, None)

        deletion_data = {
            'interval':
            (len(before_deletion), len(before_deletion) + len(deleted_bases))
        }
        maker.handle_deletion(deletion_data)

        other_deletion_start = (len(before_deletion) + len(deleted_bases) +
                                len(after_deletion))
        other_deletion_end = other_deletion_start + len(other_deletion)
        other_deletion_data = {
            'interval': (other_deletion_start, other_deletion_end)
        }
        maker.handle_deletion(other_deletion_data)

        EXPECTED_SEQ = before_deletion + after_deletion + after_other_deletion
        self.assertEqual(len(EXPECTED_SEQ), len(seq_record.seq))
        self.assertEqual(EXPECTED_SEQ, str(seq_record.seq))
Пример #4
0
    def test_combo(self):
        """Tests a combination of insertions, deletions, and snps.
        """
        before_deletion = 'AAAAA'
        deleted_bases = 'TTT'
        after_deletion = 'GGGGGGGGGGG'
        after_deletion_with_snp = 'GGGCGGGGGGG'
        insertion = 'AAA'
        after_insertion = 'TTTTT'
        raw_seq_str = (before_deletion + deleted_bases + after_deletion +
                       after_insertion)
        seq = Seq(raw_seq_str, generic_dna)
        seq_record = SeqRecord(seq)
        maker = VCFToGenbankMaker(seq_record, None, None)

        # Make deletion.
        deletion_data = {
            'interval':
            (len(before_deletion), len(before_deletion) + len(deleted_bases))
        }
        maker.handle_deletion(deletion_data)

        # Make insertion.
        insertion_start = (len(before_deletion) + len(deleted_bases) +
                           len(after_deletion))
        insertion_1_data = {'position': insertion_start, 'sequence': insertion}
        maker.handle_insertion(insertion_1_data)

        # Make SNP.
        insertion_start = (len(before_deletion) + len(deleted_bases) +
                           after_deletion_with_snp.index('C'))
        snp_data = {'position': insertion_start, 'ref': 'G', 'alt': 'C'}
        maker.handle_snp(snp_data)

        EXPECTED_SEQ = (before_deletion + after_deletion_with_snp + insertion +
                        after_insertion)
        self.assertEqual(len(EXPECTED_SEQ), len(seq_record.seq))
        self.assertEqual(EXPECTED_SEQ, str(seq_record.seq))
Пример #5
0
    def test_deletion__simple(self):
        """Tests a single deletion.
        """
        before_deletion = 'AAAAA'
        deleted_base = 'T'
        after_deletion = 'GGGGGGGGGGG'
        raw_seq_str = before_deletion + deleted_base + after_deletion
        seq = Seq(raw_seq_str, generic_dna)
        seq_record = SeqRecord(seq)
        maker = VCFToGenbankMaker(seq_record, None, None)

        deletion_data = {
            'interval': (len(before_deletion), len(before_deletion) + 1)
        }
        maker.handle_deletion(deletion_data)

        # Assert the sequence is correct.
        EXPECTED_SEQ = before_deletion + after_deletion
        self.assertEqual(EXPECTED_SEQ, str(seq_record.seq))

        # Assert the liftover is correct.
        EXPECTED_LIFTOVER = [((0, 4), (0, 4)), ((6, 16), (5, 15))]
        self.assertEqual(EXPECTED_LIFTOVER,
                         maker.runtime_liftover._interval_mapping)