def test_codon_finder_negative_3(self): gtf_lines = """Chr5 TAIR10 mRNA 5335 5769 . - . transcript_id "AT5G01015.1"; gene_id "AT5G01015"; Chr5 TAIR10 CDS 5697 5769 . - 0 transcript_id "AT5G01015.1"; gene_id "AT5G01015";; Chr5 TAIR10 exon 5697 5769 . - . transcript_id "AT5G01015.1"; gene_id "AT5G01015"; Chr5 TAIR10 CDS 5335 5576 . - 1 transcript_id "AT5G01015.1"; gene_id "AT5G01015"; Chr5 TAIR10 exon 5335 5576 . - . transcript_id "AT5G01015.1"; gene_id "AT5G01015";""" gtf_lines = [GtfLine(_) for _ in gtf_lines.split("\n")] t = Transcript(gtf_lines[0]) t.add_exons(gtf_lines[1:]) t.finalize() seq = self.genome[t.chrom][t.start - 1:t.end] correct_seq = "".join( """ATGGAGTCTAGCTTGCATAGTGTGATTTTCTTAGGTTTGCTTGCGACGATTCTGGTTACG ACCAATGGCCAAGGAGACGGGACGGGGCTAAATGCAGAAGAAATGTGGCCAGTGGAGGTG GGGATGGAGTATAGAGTATGGAGGAGAAAGCTGATGACGCCATTGGAGCTGTGCTTGGAG TGCAAATGCTGCTCCTCCACCACTTGTGCCACCATGCCTTGCTGTTTCGGCATCAATTGC CAGCTTCCCAACAAGCCATTTGGCGTTTGTGCCTTTGTTCCCAAGTCATGCCATTGTAAT TCTTGCTCCATTTGA""".split("\n")) logger = create_default_logger("test_codon_finder_negative_3", level="WARNING") tc = TranscriptChecker(t, seq, logger=logger) tc.finalize() correct_length = (5576 - 5335 + 1) + (5769 - 5697 + 1) self.assertEqual(correct_length, len(correct_seq), (correct_length, len(correct_seq))) self.assertEqual(tc.cdna_length, correct_length, (correct_length, tc.cdna_length)) self.assertEqual(len(tc.cdna), tc.cdna_length) self.assertEqual(correct_seq, tc.cdna) tc.check_orf() tc_orfs = tc.find_overlapping_cds(tc.get_internal_orf_beds()) self.assertEqual(1, len(tc_orfs)) self.assertTrue(tc_orfs[0].has_stop_codon, (tc_orfs[0], tc_orfs[0].stop_codon)) self.assertTrue(tc_orfs[0].has_start_codon, (tc_orfs[0], tc_orfs[0].start_codon)) self.assertTrue(tc.is_coding) self.assertIn("has_stop_codon", tc.attributes) self.assertIn("has_start_codon", tc.attributes) self.assertTrue(tc.has_start_codon, tc.cdna) self.assertTrue(tc.has_stop_codon, tc.cdna)
def test_codon_finder_negative_strip_cds(self): gtf_lines = """Chr5 TAIR10 mRNA 5335 5769 . - . transcript_id "AT5G01015.1"; gene_id "AT5G01015"; Chr5 TAIR10 CDS 5697 5769 . - 0 transcript_id "AT5G01015.1"; gene_id "AT5G01015";; Chr5 TAIR10 exon 5697 5769 . - . transcript_id "AT5G01015.1"; gene_id "AT5G01015"; Chr5 TAIR10 CDS 5335 5576 . - 1 transcript_id "AT5G01015.1"; gene_id "AT5G01015"; Chr5 TAIR10 exon 5335 5576 . - . transcript_id "AT5G01015.1"; gene_id "AT5G01015";""" gtf_lines = [GtfLine(_) for _ in gtf_lines.split("\n")] t = Transcript(gtf_lines[0]) t.add_exons(gtf_lines[1:]) t.finalize() seq = str(self.genome[t.chrom][t.start - 1:t.end]) # Basically insert an internal stop codon. This will make the ORF tests fail, leading to the ORF being stripped seq = seq[:72] + Bio.Seq.reverse_complement("TAG") + seq[75:] correct_seq = "".join( """ATGGAGTCTAGCTTGCATAGTGTGATTTTCTTAGGTTTGCTTGCGACGATTCTGGTTACG ACCAATGGCCAAGGAGACGGGACGGGGCTAAATGCAGAAGAAATGTGGCCAGTGGAGGTG GGGATGGAGTATAGAGTATGGAGGAGAAAGCTGATGACGCCATTGGAGCTGTGCTTGGAG TGCAAATGCTGCTCCTCCACCACTTGTGCCACCATGCCTTGCTGTTTCGGCATCAATTGC TAGCTTCCCAACAAGCCATTTGGCGTTTGTGCCTTTGTTCCCAAGTCATGCCATTGTAAT TCTTGCTCCATTTGA""".split("\n")) logger = create_default_logger("test_codon_finder_negative_3", level="WARNING") with self.assertRaises(InvalidTranscript): for lenient in (False, True): tc = TranscriptChecker(t, seq, logger=logger, lenient=lenient, strip_faulty_cds=False) tc.finalize() tc.check_orf() for lenient in (False, True): tc = TranscriptChecker(t, seq, logger=logger, lenient=lenient, strip_faulty_cds=True) tc.finalize() correct_length = (5576 - 5335 + 1) + (5769 - 5697 + 1) self.assertEqual(correct_length, len(correct_seq), (correct_length, len(correct_seq))) self.assertEqual(tc.cdna_length, correct_length, (correct_length, tc.cdna_length)) self.assertEqual(len(tc.cdna), tc.cdna_length) self.assertEqual(correct_seq, tc.cdna) tc.check_orf() self.assertFalse(tc.is_coding) tc_orfs = tc.find_overlapping_cds(tc.get_internal_orf_beds()) self.assertEqual(1, len(tc_orfs)) self.assertFalse(tc_orfs[0].has_stop_codon, (tc_orfs[0], tc_orfs[0].stop_codon)) self.assertFalse(tc_orfs[0].has_start_codon, (tc_orfs[0], tc_orfs[0].start_codon)) self.assertFalse(tc.is_coding) self.assertNotIn("has_stop_codon", tc.attributes) self.assertNotIn("has_start_codon", tc.attributes) self.assertFalse(tc.has_start_codon, tc.cdna) self.assertFalse(tc.has_stop_codon, tc.cdna)