%23%20%2F%2F%2F%20script%0A%23%20requires-python%20%3D%20%22%3E%3D3.14%22%0A%23%20dependencies%20%3D%20%5B%0A%23%20%20%20%20%20%22marimo%22%2C%0A%23%20%20%20%20%20%22altair%3E%3D5.5.0%22%2C%0A%23%20%20%20%20%20%22numpy%3E%3D2.4.4%22%2C%0A%23%20%20%20%20%20%22numba%3E%3D0.65.0%22%2C%0A%23%20%20%20%20%20%22serogen%22%2C%0A%23%20%5D%0A%23%0A%23%20%5Btool.uv.sources%5D%0A%23%20serogen%20%3D%20%7B%20path%20%3D%20%22..%22%2C%20editable%20%3D%20true%20%7D%0A%23%20%2F%2F%2F%0A%0A%22%22%22Marimo%20slide%20deck%20%26%20benchmark%20for%20single-pass%20bacterial%20%2B%20prophage%20ORF%20prediction%20on%20E.%20coli%20K-12%20MG1655%20(CP014225.1).%22%22%22%0A%0Aimport%20marimo%0A%0A__generated_with%20%3D%20%220.25.1%22%0Aapp%20%3D%20marimo.App(%0A%20%20%20%20width%3D%22full%22%2C%0A%20%20%20%20app_title%3D%22SeroGen%20%E2%80%94%20Single-Pass%20Bacterial%20%26%20Prophage%20ORF%20Benchmark%20(E.%20coli%20K-12%20CP014225.1)%22%2C%0A%20%20%20%20layout_file%3D%22data%3Aapplication%2Fjson%3Bbase64%2CeyJ0eXBlIjogInNsaWRlcyIsICJkYXRhIjogeyJjZWxscyI6IFt7ImlkIjogIkhib2wiLCAiY29kZV9oYXNoIjogImQ1MWRjMTIwMWE2MjdmNzE4Mjg4MmRiM2U0MThhYTFlIn0sIHsiaWQiOiAiTUpVZSIsICJjb2RlX2hhc2giOiAiMjY1ZGI4NGZlMTdmNzliYWQ1NjVhMjFjNzM0ODE3MmUifSwgeyJpZCI6ICJ2YmxBIiwgImNvZGVfaGFzaCI6ICJjMjY2M2NmNGIxNDJjYzNjMTI0ZDNkMWQ4MDI4NmU2OSJ9LCB7ImlkIjogImJrSEMiLCAiY29kZV9oYXNoIjogIjJiYjEyMWY0MDkxNjA4N2MxMzgxZWJhOTIwZmRmMmRkIn0sIHsiaWQiOiAibEVRYSIsICJjb2RlX2hhc2giOiAiYTM1NDMzZWU1ZWU2NTQzOWQ2NDc2ODg4YmEyYTIxYzYifSwgeyJpZCI6ICJQS3JpIiwgImNvZGVfaGFzaCI6ICI2MjA4MGQwYzhhOWY5MzczZWU3MzA4NDAyNTE4MTc0MCJ9LCB7ImlkIjogIlhyZWYiLCAiY29kZV9oYXNoIjogIjJhYThlMjJiM2I3NDQwMGMyMGQ1MWZiMDhhNzVjMjFkIn0sIHsiaWQiOiAiU0ZQTCIsICJjb2RlX2hhc2giOiAiY2Y4NDhiMDk0MGMyN2MxNTFhMDNhMjk4OTcxYzg0N2MifSwgeyJpZCI6ICJCWXRDIiwgImNvZGVfaGFzaCI6ICIyNGFlNDY5M2FhMDg3Yjg3ODE1MDM1YzQ2MjY2NWE3NSJ9XX19%22%2C%0A)%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20import%20re%0A%20%20%20%20import%20time%0A%20%20%20%20import%20urllib.request%0A%20%20%20%20from%20pathlib%20import%20Path%0A%0A%20%20%20%20import%20altair%20as%20alt%0A%20%20%20%20import%20marimo%20as%20mo%0A%20%20%20%20import%20numpy%20as%20np%0A%0A%20%20%20%20from%20serogen.core.io.fasta%20import%20FastaReader%0A%20%20%20%20from%20serogen.core.seq.alphabet%20import%20Alphabet%2C%20GeneticCode%0A%20%20%20%20from%20serogen.core.seq.seq%20import%20Sequence%0A%20%20%20%20from%20serogen.genes.orf.predictor%20import%20OrfPredictor%0A%0A%20%20%20%20alt.data_transformers.disable_max_rows()%0A%20%20%20%20return%20(%0A%20%20%20%20%20%20%20%20FastaReader%2C%0A%20%20%20%20%20%20%20%20GeneticCode%2C%0A%20%20%20%20%20%20%20%20OrfPredictor%2C%0A%20%20%20%20%20%20%20%20Path%2C%0A%20%20%20%20%20%20%20%20alt%2C%0A%20%20%20%20%20%20%20%20mo%2C%0A%20%20%20%20%20%20%20%20np%2C%0A%20%20%20%20%20%20%20%20re%2C%0A%20%20%20%20%20%20%20%20time%2C%0A%20%20%20%20%20%20%20%20urllib%2C%0A%20%20%20%20)%0A%0A%0A%40app.cell%0Adef%20_(FastaReader%2C%20Path%2C%20np%2C%20re%2C%20urllib)%3A%0A%20%20%20%20%23%20Locate%20or%20fetch%20E.%20coli%20K-12%20substr.%20MG1655%20gold-standard%20reference%20(GenBank%3A%20CP014225.1)%0A%20%20%20%20scratch_dir%20%3D%20Path(%22%2FUsers%2Ftsta0015%2F.gemini%2Fantigravity-cli%2Fbrain%2F3234e4cd-07e9-4eee-9d70-2232cae0cf9f%2Fscratch%22)%0A%20%20%20%20cache_dir%20%3D%20scratch_dir%20if%20scratch_dir.exists()%20else%20Path(__file__).resolve().parent%20%2F%20%22cassettes%22%0A%20%20%20%20cache_dir.mkdir(parents%3DTrue%2C%20exist_ok%3DTrue)%0A%0A%20%20%20%20fa_path%20%3D%20cache_dir%20%2F%20%22CP014225.1.fasta%22%0A%20%20%20%20gb_path%20%3D%20cache_dir%20%2F%20%22CP014225.1.gb%22%0A%0A%20%20%20%20if%20not%20fa_path.exists()%3A%0A%20%20%20%20%20%20%20%20url_fa%20%3D%20(%0A%20%20%20%20%20%20%20%20%20%20%20%20%22https%3A%2F%2Feutils.ncbi.nlm.nih.gov%2Fentrez%2Feutils%2Fefetch.fcgi%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%22%3Fdb%3Dnuccore%26id%3DCP014225.1%26rettype%3Dfasta%26retmode%3Dtext%22%0A%20%20%20%20%20%20%20%20)%0A%20%20%20%20%20%20%20%20urllib.request.urlretrieve(url_fa%2C%20fa_path)%0A%0A%20%20%20%20if%20not%20gb_path.exists()%3A%0A%20%20%20%20%20%20%20%20url_gb%20%3D%20(%0A%20%20%20%20%20%20%20%20%20%20%20%20%22https%3A%2F%2Feutils.ncbi.nlm.nih.gov%2Fentrez%2Feutils%2Fefetch.fcgi%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%22%3Fdb%3Dnuccore%26id%3DCP014225.1%26rettype%3Dgbwithparts%26retmode%3Dtext%22%0A%20%20%20%20%20%20%20%20)%0A%20%20%20%20%20%20%20%20urllib.request.urlretrieve(url_gb%2C%20gb_path)%0A%0A%20%20%20%20with%20open(fa_path%2C%20%22rb%22)%20as%20_fh%2C%20FastaReader(_fh)%20as%20_reader%3A%0A%20%20%20%20%20%20%20%20genome_seq%20%3D%20next(iter(_reader))%0A%0A%20%20%20%20raw_bytes%20%3D%20np.frombuffer(genome_seq.seq%2C%20dtype%3Dnp.uint8)%0A%20%20%20%20genome_len%20%3D%20len(raw_bytes)%0A%0A%20%20%20%20%23%20Exact%200-based%20%5Bstart%2C%20end)%20coordinates%20of%20the%209%20structurally%20embedded%20prophages%20in%20CP014225.1%0A%20%20%20%20PROPHAGES%20%3D%20%5B%0A%20%20%20%20%20%20%20%20(%22CP4-44%22%2C%20266_150%2C%20279_746%2C%20%22Defective%20prophage%20CP4-44%20(flu%20%2F%20yeeUV%20toxin-antitoxin)%22)%2C%0A%20%20%20%20%20%20%20%20(%22CPS-53%22%2C%20663_508%2C%20673_710%2C%20%22Cryptic%20prophage%20CPS-53%20%2F%20KpLE1%20(argW%20tRNA%20locus)%22)%2C%0A%20%20%20%20%20%20%20%20(%22CPZ-55%22%2C%20756_057%2C%20762_532%2C%20%22Cryptic%20prophage%20CPZ-55%20(eut%20operon%20insertion)%22)%2C%0A%20%20%20%20%20%20%20%20(%22CP4-57%22%2C%20952_792%2C%20974_982%2C%20%22Cryptic%20prophage%20CP4-57%20(ssrA%20tmRNA%20locus)%22)%2C%0A%20%20%20%20%20%20%20%20(%22CP4-6%22%2C%203_109_018%2C%203_142_923%2C%20%22Cryptic%20prophage%20CP4-6%20(thrW%20tRNA%20locus)%22)%2C%0A%20%20%20%20%20%20%20%20(%22DLP12%22%2C%203_403_463%2C%203_424_894%2C%20%22Defective%20lambdoid%20prophage%20DLP12%20(argU%20tRNA%20locus)%22)%2C%0A%20%20%20%20%20%20%20%20(%22e14%22%2C%204_037_618%2C%204_052_031%2C%20%22Excisable%20lambdoid%20prophage%20e14%20(icd%20locus)%22)%2C%0A%20%20%20%20%20%20%20%20(%22Rac%22%2C%204_250_923%2C%204_273_148%2C%20%22Defective%20lambdoid%20prophage%20Rac%20(recET%20%2F%20lar%20%2F%20kil)%22)%2C%0A%20%20%20%20%20%20%20%20(%22Qin%22%2C%204_471_995%2C%204_491_632%2C%20%22Cryptic%20lambdoid%20prophage%20Qin%20%2F%20Kim%20(dicB%20%2F%20relBE)%22)%2C%0A%20%20%20%20%5D%0A%0A%20%20%20%20%23%20Parse%20intact%20reference%20CDS%20annotations%20from%20CP014225.1%20GenBank%20record%0A%20%20%20%20gb_text%20%3D%20gb_path.read_text()%0A%20%20%20%20ref_cds%20%3D%20%5B%5D%0A%20%20%20%20for%20_block%20in%20re.split(r%22%5Cn%20%20%20%20%20(%3F%3D%5BA-Za-z_%5D%2B%5Cs%2B)%22%2C%20gb_text)%3A%0A%20%20%20%20%20%20%20%20if%20not%20_block.startswith(%22CDS%20%22)%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20continue%0A%20%20%20%20%20%20%20%20_m_loc%20%3D%20re.match(r%22CDS%5Cs%2B(complement%5C()%3F(%5Cd%2B)%5C.%5C.(%5Cd%2B)%5C)%3F%22%2C%20_block)%0A%20%20%20%20%20%20%20%20if%20not%20_m_loc%20or%20%22%2Fpseudo%22%20in%20_block%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20continue%0A%20%20%20%20%20%20%20%20_is_comp%20%3D%20_m_loc.group(1)%20is%20not%20None%0A%20%20%20%20%20%20%20%20_s%20%3D%20int(_m_loc.group(2))%20-%201%0A%20%20%20%20%20%20%20%20_e%20%3D%20int(_m_loc.group(3))%0A%20%20%20%20%20%20%20%20_st%20%3D%20-1%20if%20_is_comp%20else%201%0A%20%20%20%20%20%20%20%20_m_lt%20%3D%20re.search(r'%2Flocus_tag%3D%22(%5B%5E%22%5D%2B)%22'%2C%20_block)%0A%20%20%20%20%20%20%20%20_m_gene%20%3D%20re.search(r'%2Fgene%3D%22(%5B%5E%22%5D%2B)%22'%2C%20_block)%0A%20%20%20%20%20%20%20%20_m_prod%20%3D%20re.search(r'%2Fproduct%3D%22(%5B%5E%22%5D%2B)%22'%2C%20_block)%0A%20%20%20%20%20%20%20%20_prod%20%3D%20re.sub(r%22%5Cs%2B%22%2C%20%22%20%22%2C%20_m_prod.group(1))%20if%20_m_prod%20else%20%22%22%0A%20%20%20%20%20%20%20%20_region%20%3D%20%22Host%22%0A%20%20%20%20%20%20%20%20for%20_pname%2C%20_ps%2C%20_pe%2C%20_%20in%20PROPHAGES%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20_s%20%3E%3D%20_ps%20and%20_e%20%3C%3D%20_pe%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20_region%20%3D%20_pname%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20break%0A%20%20%20%20%20%20%20%20ref_cds.append(%0A%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22start%22%3A%20_s%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22end%22%3A%20_e%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22strand%22%3A%20_st%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22length%22%3A%20_e%20-%20_s%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22locus_tag%22%3A%20_m_lt.group(1)%20if%20_m_lt%20else%20%22%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22gene%22%3A%20_m_gene.group(1)%20if%20_m_gene%20else%20%22%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22product%22%3A%20_prod%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22region%22%3A%20_region%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20)%0A%0A%20%20%20%20%23%20Annotate%20minimum%20overlap%20with%20adjacent%20reference%20CDS%0A%20%20%20%20for%20_idx%2C%20_c%20in%20enumerate(ref_cds)%3A%0A%20%20%20%20%20%20%20%20_ov_bp%20%3D%200%0A%20%20%20%20%20%20%20%20if%20_idx%20%3E%200%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20_prev%20%3D%20ref_cds%5B_idx%20-%201%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20_prev%5B%22end%22%5D%20%3E%20_c%5B%22start%22%5D%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20_ov_bp%20%3D%20max(_ov_bp%2C%20_prev%5B%22end%22%5D%20-%20_c%5B%22start%22%5D)%0A%20%20%20%20%20%20%20%20if%20_idx%20%2B%201%20%3C%20len(ref_cds)%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20_nxt%20%3D%20ref_cds%5B_idx%20%2B%201%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20_c%5B%22end%22%5D%20%3E%20_nxt%5B%22start%22%5D%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20_ov_bp%20%3D%20max(_ov_bp%2C%20_c%5B%22end%22%5D%20-%20_nxt%5B%22start%22%5D)%0A%20%20%20%20%20%20%20%20_c%5B%22overlap_bp%22%5D%20%3D%20_ov_bp%0A%20%20%20%20%20%20%20%20if%20_ov_bp%20%3D%3D%200%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20_c%5B%22overlap_type%22%5D%20%3D%20%22Non-overlapping%22%0A%20%20%20%20%20%20%20%20elif%20_ov_bp%20%3D%3D%201%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20_c%5B%22overlap_type%22%5D%20%3D%20%221-bp%20(TGATG%2FTAATG)%22%0A%20%20%20%20%20%20%20%20elif%20_ov_bp%20%3D%3D%204%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20_c%5B%22overlap_type%22%5D%20%3D%20%224-bp%20(ATGA%2FTCAT)%22%0A%20%20%20%20%20%20%20%20else%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20_c%5B%22overlap_type%22%5D%20%3D%20%22%3E4-bp%20overlap%22%0A%20%20%20%20return%20PROPHAGES%2C%20genome_len%2C%20genome_seq%2C%20raw_bytes%2C%20ref_cds%0A%0A%0A%40app.cell%0Adef%20_(%0A%20%20%20%20GeneticCode%2C%0A%20%20%20%20OrfPredictor%2C%0A%20%20%20%20PROPHAGES%2C%0A%20%20%20%20genome_len%2C%0A%20%20%20%20genome_seq%2C%0A%20%20%20%20np%2C%0A%20%20%20%20raw_bytes%2C%0A%20%20%20%20ref_cds%2C%0A%20%20%20%20time%2C%0A)%3A%0A%20%20%20%20%23%20Warm%20up%20Numba%20JIT%20compilation%20before%20timing%0A%20%20%20%20_warmup_seq%20%3D%20genome_seq.seq%5B%3A20_000%5D%0A%20%20%20%20OrfPredictor(genetic_code%3DGeneticCode.bacterial%2C%20include_phage%3DFalse%2C%20min_gene_len%3D120).predict(_warmup_seq)%0A%20%20%20%20OrfPredictor(genetic_code%3DGeneticCode.viral%2C%20include_phage%3DTrue).predict(_warmup_seq)%0A%0A%20%20%20%20%23%201.%20Baseline%20Bacterial-Only%20Mode%20(Table%2011%2C%20include_phage%3DFalse%2C%20min_gene_len%3D120)%0A%20%20%20%20_t0%20%3D%20time.perf_counter()%0A%20%20%20%20pred_baseline%20%3D%20OrfPredictor(%0A%20%20%20%20%20%20%20%20genetic_code%3DGeneticCode.bacterial%2C%0A%20%20%20%20%20%20%20%20include_phage%3DFalse%2C%0A%20%20%20%20%20%20%20%20min_gene_len%3D120%2C%0A%20%20%20%20)%0A%20%20%20%20genes_baseline%20%3D%20pred_baseline.predict(genome_seq)%0A%20%20%20%20time_baseline%20%3D%20time.perf_counter()%20-%20_t0%0A%0A%20%20%20%20%23%202.%20Single-Pass%20Phage-Aware%20Mode%20(GeneticCode.viral%2C%20include_phage%3DTrue%2C%20min_gene_len%3D90%2C%20local_gc_window%3D4000)%0A%20%20%20%20_t0%20%3D%20time.perf_counter()%0A%20%20%20%20pred_phage%20%3D%20OrfPredictor(%0A%20%20%20%20%20%20%20%20genetic_code%3DGeneticCode.viral%2C%0A%20%20%20%20%20%20%20%20include_phage%3DTrue%2C%0A%20%20%20%20)%0A%20%20%20%20genes_phage%20%3D%20pred_phage.predict(genome_seq)%0A%20%20%20%20time_phage%20%3D%20time.perf_counter()%20-%20_t0%0A%0A%20%20%20%20%23%203.%20Alternative%20Viral%20Genetic%20Codes%20(Table%2015%20Amber%20TAG-%3EQ%2C%20Table%204%20Opal%20TGA-%3EW%2C%20Table%2025%20Opal%20TGA-%3EG)%0A%20%20%20%20alt_code_timings%20%3D%20%5B%5D%0A%20%20%20%20for%20_code_label%2C%20_code_obj%20in%20%5B%0A%20%20%20%20%20%20%20%20(%22Table%2011%20(Bacterial)%22%2C%20GeneticCode.bacterial)%2C%0A%20%20%20%20%20%20%20%20(%22Table%2011%20(Viral)%22%2C%20GeneticCode.viral)%2C%0A%20%20%20%20%20%20%20%20(%22Table%2015%20(Viral%20Amber%20TAG-%3EQ)%22%2C%20GeneticCode.viral_amber_q)%2C%0A%20%20%20%20%20%20%20%20(%22Table%204%20(Viral%20Opal%20TGA-%3EW)%22%2C%20GeneticCode.viral_opal_w)%2C%0A%20%20%20%20%20%20%20%20(%22Table%2025%20(Viral%20Opal%20TGA-%3EG)%22%2C%20GeneticCode.viral_opal_g)%2C%0A%20%20%20%20%5D%3A%0A%20%20%20%20%20%20%20%20_t_start%20%3D%20time.perf_counter()%0A%20%20%20%20%20%20%20%20_g%20%3D%20OrfPredictor(genetic_code%3D_code_obj%2C%20include_phage%3DTrue).predict(genome_seq)%0A%20%20%20%20%20%20%20%20_dt%20%3D%20time.perf_counter()%20-%20_t_start%0A%20%20%20%20%20%20%20%20alt_code_timings.append(%0A%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22mode%22%3A%20_code_label%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22pass_type%22%3A%20%22Single-Pass%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22time_s%22%3A%20round(_dt%2C%204)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22throughput_mb_s%22%3A%20round((genome_len%20%2F%201e6)%20%2F%20_dt%2C%202)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22predicted_orfs%22%3A%20len(_g)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20)%0A%0A%20%20%20%20_two_pass_time%20%3D%20time_baseline%20%2B%20time_phage%0A%20%20%20%20alt_code_timings.append(%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%22mode%22%3A%20%22Naive%20Two-Pass%20(Bacterial%20%2B%20Viral)%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22pass_type%22%3A%20%22Two-Pass%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22time_s%22%3A%20round(_two_pass_time%2C%204)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22throughput_mb_s%22%3A%20round((genome_len%20%2F%201e6)%20%2F%20_two_pass_time%2C%202)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22predicted_orfs%22%3A%20len(genes_phage)%2C%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20)%0A%0A%20%20%20%20def%20_build_lookup(genes_obj)%3A%0A%20%20%20%20%20%20%20%20by_stop%20%3D%20%7B%7D%0A%20%20%20%20%20%20%20%20exact_set%20%3D%20set()%0A%20%20%20%20%20%20%20%20starts%20%3D%20genes_obj.intervals.starts%0A%20%20%20%20%20%20%20%20ends%20%3D%20genes_obj.intervals.ends%0A%20%20%20%20%20%20%20%20strands%20%3D%20genes_obj.intervals.strands%0A%20%20%20%20%20%20%20%20for%20i%20in%20range(len(genes_obj))%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20s%2C%20e%2C%20st%20%3D%20int(starts%5Bi%5D)%2C%20int(ends%5Bi%5D)%2C%20int(strands%5Bi%5D)%0A%20%20%20%20%20%20%20%20%20%20%20%20sc%20%3D%20e%20if%20st%20%3D%3D%201%20else%20s%0A%20%20%20%20%20%20%20%20%20%20%20%20by_stop%5B(sc%2C%20st)%5D%20%3D%20(s%2C%20e%2C%20st)%0A%20%20%20%20%20%20%20%20%20%20%20%20exact_set.add((s%2C%20e%2C%20st))%0A%20%20%20%20%20%20%20%20return%20by_stop%2C%20exact_set%0A%0A%20%20%20%20base_by_stop%2C%20base_exact%20%3D%20_build_lookup(genes_baseline)%0A%20%20%20%20phage_by_stop%2C%20phage_exact%20%3D%20_build_lookup(genes_phage)%0A%0A%20%20%20%20for%20_c%20in%20ref_cds%3A%0A%20%20%20%20%20%20%20%20_sc%20%3D%20(_c%5B%22end%22%5D%20if%20_c%5B%22strand%22%5D%20%3D%3D%201%20else%20_c%5B%22start%22%5D%2C%20_c%5B%22strand%22%5D)%0A%20%20%20%20%20%20%20%20_key%20%3D%20(_c%5B%22start%22%5D%2C%20_c%5B%22end%22%5D%2C%20_c%5B%22strand%22%5D)%0A%20%20%20%20%20%20%20%20_c%5B%22base_stop_hit%22%5D%20%3D%20_sc%20in%20base_by_stop%0A%20%20%20%20%20%20%20%20_c%5B%22base_exact_hit%22%5D%20%3D%20_key%20in%20base_exact%0A%20%20%20%20%20%20%20%20_c%5B%22phage_stop_hit%22%5D%20%3D%20_sc%20in%20phage_by_stop%0A%20%20%20%20%20%20%20%20_c%5B%22phage_exact_hit%22%5D%20%3D%20_key%20in%20phage_exact%0A%0A%20%20%20%20region_groups%20%3D%20%5B(p%5B0%5D%2C%20p%5B1%5D%2C%20p%5B2%5D%2C%20p%5B3%5D%2C%20%5Bc%20for%20c%20in%20ref_cds%20if%20c%5B%22region%22%5D%20%3D%3D%20p%5B0%5D%5D)%20for%20p%20in%20PROPHAGES%5D%20%2B%20%5B%0A%20%20%20%20%20%20%20%20(%0A%20%20%20%20%20%20%20%20%20%20%20%20%22All%20Prophages%20(9)%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%200%2C%0A%20%20%20%20%20%20%20%20%20%20%20%200%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22All%209%20structurally%20embedded%20prophages%20combined%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%5Bc%20for%20c%20in%20ref_cds%20if%20c%5B%22region%22%5D%20!%3D%20%22Host%22%5D%2C%0A%20%20%20%20%20%20%20%20)%2C%0A%20%20%20%20%20%20%20%20(%0A%20%20%20%20%20%20%20%20%20%20%20%20%22Host%20Chromosome%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%200%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20genome_len%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22Non-prophage%20E.%20coli%20K-12%20MG1655%20chromosome%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%5Bc%20for%20c%20in%20ref_cds%20if%20c%5B%22region%22%5D%20%3D%3D%20%22Host%22%5D%2C%0A%20%20%20%20%20%20%20%20)%2C%0A%20%20%20%20%5D%0A%0A%20%20%20%20region_metrics%20%3D%20%5B%5D%0A%20%20%20%20region_chart_rows%20%3D%20%5B%5D%0A%20%20%20%20for%20_rname%2C%20_rs%2C%20_re%2C%20_rdesc%2C%20_rcds%20in%20region_groups%3A%0A%20%20%20%20%20%20%20%20_n%20%3D%20len(_rcds)%0A%20%20%20%20%20%20%20%20_b_stop%20%3D%20sum(c%5B%22base_stop_hit%22%5D%20for%20c%20in%20_rcds)%0A%20%20%20%20%20%20%20%20_b_ex%20%3D%20sum(c%5B%22base_exact_hit%22%5D%20for%20c%20in%20_rcds)%0A%20%20%20%20%20%20%20%20_p_stop%20%3D%20sum(c%5B%22phage_stop_hit%22%5D%20for%20c%20in%20_rcds)%0A%20%20%20%20%20%20%20%20_p_ex%20%3D%20sum(c%5B%22phage_exact_hit%22%5D%20for%20c%20in%20_rcds)%0A%20%20%20%20%20%20%20%20if%20_re%20%3E%20_rs%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20_sub%20%3D%20raw_bytes%5B_rs%3A_re%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20_gc_pct%20%3D%20(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20float(np.sum((_sub%20%3D%3D%20ord(%22G%22))%20%7C%20(_sub%20%3D%3D%20ord(%22C%22))%20%7C%20(_sub%20%3D%3D%20ord(%22g%22))%20%7C%20(_sub%20%3D%3D%20ord(%22c%22))))%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20*%20100.0%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2F%20len(_sub)%0A%20%20%20%20%20%20%20%20%20%20%20%20)%0A%20%20%20%20%20%20%20%20else%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20_gc_pct%20%3D%2045.8%0A%20%20%20%20%20%20%20%20region_metrics.append(%0A%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22region%22%3A%20_rname%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22description%22%3A%20_rdesc%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22span_kb%22%3A%20round((_re%20-%20_rs)%20%2F%201000.0%2C%201)%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20_re%20%3E%20_rs%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20else%20round(sum(p%5B2%5D%20-%20p%5B1%5D%20for%20p%20in%20PROPHAGES)%20%2F%201000.0%2C%201)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22gc_pct%22%3A%20round(_gc_pct%2C%201)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22n_cds%22%3A%20_n%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22base_stop_recall%22%3A%20round(_b_stop%20%2F%20_n%20*%20100.0%2C%201)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22phage_stop_recall%22%3A%20round(_p_stop%20%2F%20_n%20*%20100.0%2C%201)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22stop_gain_pct%22%3A%20round((_p_stop%20-%20_b_stop)%20%2F%20_n%20*%20100.0%2C%201)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22base_exact_recall%22%3A%20round(_b_ex%20%2F%20_n%20*%20100.0%2C%201)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22phage_exact_recall%22%3A%20round(_p_ex%20%2F%20_n%20*%20100.0%2C%201)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22exact_gain_pct%22%3A%20round((_p_ex%20-%20_b_ex)%20%2F%20_n%20*%20100.0%2C%201)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22base_missed%22%3A%20_n%20-%20_b_stop%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22phage_missed%22%3A%20_n%20-%20_p_stop%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20)%0A%20%20%20%20%20%20%20%20for%20_model_name%2C%20_stop_val%2C%20_ex_val%20in%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20(%22Baseline%20(Bacterial-Only)%22%2C%20round(_b_stop%20%2F%20_n%20*%20100.0%2C%201)%2C%20round(_b_ex%20%2F%20_n%20*%20100.0%2C%201))%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20(%22Single-Pass%20Phage-Aware%22%2C%20round(_p_stop%20%2F%20_n%20*%20100.0%2C%201)%2C%20round(_p_ex%20%2F%20_n%20*%20100.0%2C%201))%2C%0A%20%20%20%20%20%20%20%20%5D%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20region_chart_rows.append(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22region%22%3A%20_rname%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22model%22%3A%20_model_name%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22metric%22%3A%20%223'-Stop%20Recall%20(%25)%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22recall_pct%22%3A%20_stop_val%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22n_cds%22%3A%20_n%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20)%0A%20%20%20%20%20%20%20%20%20%20%20%20region_chart_rows.append(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22region%22%3A%20_rname%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22model%22%3A%20_model_name%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22metric%22%3A%20%22Exact%20(5'%2B3')%20Recall%20(%25)%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22recall_pct%22%3A%20_ex_val%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22n_cds%22%3A%20_n%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20)%0A%0A%20%20%20%20recovered_prophage_orfs%20%3D%20%5B%0A%20%20%20%20%20%20%20%20c%20for%20c%20in%20ref_cds%20if%20c%5B%22region%22%5D%20!%3D%20%22Host%22%20and%20c%5B%22phage_stop_hit%22%5D%20and%20not%20c%5B%22base_stop_hit%22%5D%0A%20%20%20%20%5D%0A%20%20%20%20exact_rescued_prophage_orfs%20%3D%20%5B%0A%20%20%20%20%20%20%20%20c%20for%20c%20in%20ref_cds%20if%20c%5B%22region%22%5D%20!%3D%20%22Host%22%20and%20c%5B%22phage_exact_hit%22%5D%20and%20not%20c%5B%22base_exact_hit%22%5D%0A%20%20%20%20%5D%0A%20%20%20%20return%20(%0A%20%20%20%20%20%20%20%20alt_code_timings%2C%0A%20%20%20%20%20%20%20%20exact_rescued_prophage_orfs%2C%0A%20%20%20%20%20%20%20%20recovered_prophage_orfs%2C%0A%20%20%20%20%20%20%20%20region_chart_rows%2C%0A%20%20%20%20%20%20%20%20region_metrics%2C%0A%20%20%20%20%20%20%20%20time_phage%2C%0A%20%20%20%20)%0A%0A%0A%40app.cell%0Adef%20_(%0A%20%20%20%20PROPHAGES%2C%0A%20%20%20%20alt%2C%0A%20%20%20%20alt_code_timings%2C%0A%20%20%20%20genome_len%2C%0A%20%20%20%20np%2C%0A%20%20%20%20raw_bytes%2C%0A%20%20%20%20ref_cds%2C%0A%20%20%20%20region_chart_rows%2C%0A)%3A%0A%20%20%20%20%23%20Build%20all%204%20interactive%20Altair%20charts%20sized%20for%2016%3A9%20widescreen%20slide%20layout%0A%20%20%20%20_region_order%20%3D%20%5Bp%5B0%5D%20for%20p%20in%20PROPHAGES%5D%20%2B%20%5B%22All%20Prophages%20(9)%22%2C%20%22Host%20Chromosome%22%5D%0A%20%20%20%20chart_recall%20%3D%20(%0A%20%20%20%20%20%20%20%20alt.Chart(alt.Data(values%3Dregion_chart_rows))%0A%20%20%20%20%20%20%20%20.mark_bar(cornerRadiusTopLeft%3D3%2C%20cornerRadiusTopRight%3D3)%0A%20%20%20%20%20%20%20%20.encode(%0A%20%20%20%20%20%20%20%20%20%20%20%20x%3Dalt.X(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22region%3AN%22%2C%20sort%3D_region_order%2C%20title%3D%22Genomic%20Region%20%2F%20Prophage%20Island%22%2C%20axis%3Dalt.Axis(labelAngle%3D-30)%0A%20%20%20%20%20%20%20%20%20%20%20%20)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20xOffset%3Dalt.XOffset(%22model%3AN%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20y%3Dalt.Y(%22recall_pct%3AQ%22%2C%20title%3D%22CDS%20Recall%20(%25)%22%2C%20scale%3Dalt.Scale(domain%3D%5B0%2C%20105%5D))%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20color%3Dalt.Color(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22model%3AN%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20title%3D%22Predictor%20Configuration%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20scale%3Dalt.Scale(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20domain%3D%5B%22Baseline%20(Bacterial-Only)%22%2C%20%22Single-Pass%20Phage-Aware%22%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20range%3D%5B%22%2394a3b8%22%2C%20%22%230d9488%22%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20column%3Dalt.Column(%22metric%3AN%22%2C%20title%3DNone%2C%20header%3Dalt.Header(labelFontSize%3D13%2C%20labelFontWeight%3D%22bold%22))%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20tooltip%3D%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20alt.Tooltip(%22region%3AN%22%2C%20title%3D%22Region%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20alt.Tooltip(%22model%3AN%22%2C%20title%3D%22Model%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20alt.Tooltip(%22metric%3AN%22%2C%20title%3D%22Metric%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20alt.Tooltip(%22recall_pct%3AQ%22%2C%20title%3D%22Recall%20(%25)%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20alt.Tooltip(%22n_cds%3AQ%22%2C%20title%3D%22Reference%20CDS%20Count%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%5D%2C%0A%20%20%20%20%20%20%20%20)%0A%20%20%20%20%20%20%20%20.properties(%0A%20%20%20%20%20%20%20%20%20%20%20%20width%3D430%2C%20height%3D320%2C%20title%3D%22Prophage%20%26%20Host%20CDS%20Recall%3A%20Baseline%20vs.%20Single-Pass%20Phage-Aware%20OrfPredictor%22%0A%20%20%20%20%20%20%20%20)%0A%20%20%20%20)%0A%0A%20%20%20%20_step%20%3D%204000%0A%20%20%20%20_is_gc%20%3D%20(%0A%20%20%20%20%20%20%20%20(raw_bytes%20%3D%3D%20ord(%22G%22))%20%7C%20(raw_bytes%20%3D%3D%20ord(%22C%22))%20%7C%20(raw_bytes%20%3D%3D%20ord(%22g%22))%20%7C%20(raw_bytes%20%3D%3D%20ord(%22c%22))%0A%20%20%20%20).astype(np.int32)%0A%20%20%20%20_prefix%20%3D%20np.concatenate(%5B%5B0%5D%2C%20np.cumsum(_is_gc)%5D)%0A%20%20%20%20_gc_points%20%3D%20%5B%5D%0A%20%20%20%20for%20_pos%20in%20range(0%2C%20genome_len%20-%20_step%2C%20_step)%3A%0A%20%20%20%20%20%20%20%20_pct%20%3D%20float(_prefix%5B_pos%20%2B%20_step%5D%20-%20_prefix%5B_pos%5D)%20*%20100.0%20%2F%20_step%0A%20%20%20%20%20%20%20%20_in_phage%20%3D%20%22Host%20Background%22%0A%20%20%20%20%20%20%20%20for%20_pname%2C%20_ps%2C%20_pe%2C%20_%20in%20PROPHAGES%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20_pos%20%2B%20_step%20%3E%3D%20_ps%20and%20_pos%20%3C%3D%20_pe%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20_in_phage%20%3D%20_pname%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20break%0A%20%20%20%20%20%20%20%20_gc_points.append(%0A%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22pos_mb%22%3A%20round(_pos%20%2F%201e6%2C%204)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22gc_pct%22%3A%20round(_pct%2C%202)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22region%22%3A%20_in_phage%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22is_prophage%22%3A%20%22Prophage%20Island%22%20if%20_in_phage%20!%3D%20%22Host%20Background%22%20else%20%22Host%20Chromosome%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20)%0A%0A%20%20%20%20_phage_bands%20%3D%20%5B%0A%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%22start_mb%22%3A%20round(p%5B1%5D%20%2F%201e6%2C%204)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22end_mb%22%3A%20round(p%5B2%5D%20%2F%201e6%2C%204)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22mid_mb%22%3A%20round((p%5B1%5D%20%2B%20p%5B2%5D)%20%2F%202e6%2C%204)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22prophage%22%3A%20p%5B0%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22y_label%22%3A%2031.5%20if%20idx%20%25%202%20%3D%3D%200%20else%2033.5%2C%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20for%20idx%2C%20p%20in%20enumerate(PROPHAGES)%0A%20%20%20%20%5D%0A%0A%20%20%20%20_gc_line%20%3D%20(%0A%20%20%20%20%20%20%20%20alt.Chart(alt.Data(values%3D_gc_points))%0A%20%20%20%20%20%20%20%20.mark_line(strokeWidth%3D1.2%2C%20opacity%3D0.85)%0A%20%20%20%20%20%20%20%20.encode(%0A%20%20%20%20%20%20%20%20%20%20%20%20x%3Dalt.X(%22pos_mb%3AQ%22%2C%20title%3D%22CP014225.1%20Chromosome%20Position%20(Mb)%22%2C%20scale%3Dalt.Scale(domain%3D%5B0%2C%204.66%5D))%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20y%3Dalt.Y(%22gc_pct%3AQ%22%2C%20title%3D%22Local%204-kb%20GC%20Content%20(%25)%22%2C%20scale%3Dalt.Scale(domain%3D%5B30%2C%2062%5D))%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20color%3Dalt.value(%22%2364748b%22)%2C%0A%20%20%20%20%20%20%20%20)%0A%20%20%20%20)%0A%20%20%20%20_gc_phage_pts%20%3D%20(%0A%20%20%20%20%20%20%20%20alt.Chart(alt.Data(values%3D%5Bp%20for%20p%20in%20_gc_points%20if%20p%5B%22is_prophage%22%5D%20%3D%3D%20%22Prophage%20Island%22%5D))%0A%20%20%20%20%20%20%20%20.mark_circle(size%3D45%2C%20color%3D%22%23dc2626%22%2C%20opacity%3D0.95)%0A%20%20%20%20%20%20%20%20.encode(%0A%20%20%20%20%20%20%20%20%20%20%20%20x%3D%22pos_mb%3AQ%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20y%3D%22gc_pct%3AQ%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20tooltip%3D%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20alt.Tooltip(%22region%3AN%22%2C%20title%3D%22Prophage%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20alt.Tooltip(%22pos_mb%3AQ%22%2C%20title%3D%22Position%20(Mb)%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20alt.Tooltip(%22gc_pct%3AQ%22%2C%20title%3D%22Local%204-kb%20GC%20(%25)%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%5D%2C%0A%20%20%20%20%20%20%20%20)%0A%20%20%20%20)%0A%20%20%20%20_band_rects%20%3D%20(%0A%20%20%20%20%20%20%20%20alt.Chart(alt.Data(values%3D_phage_bands))%0A%20%20%20%20%20%20%20%20.mark_rect(opacity%3D0.18%2C%20color%3D%22%23ef4444%22)%0A%20%20%20%20%20%20%20%20.encode(%0A%20%20%20%20%20%20%20%20%20%20%20%20x%3D%22start_mb%3AQ%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20x2%3D%22end_mb%3AQ%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20tooltip%3D%5Balt.Tooltip(%22prophage%3AN%22%2C%20title%3D%22Prophage%22)%5D%2C%0A%20%20%20%20%20%20%20%20)%0A%20%20%20%20)%0A%20%20%20%20_band_labels%20%3D%20(%0A%20%20%20%20%20%20%20%20alt.Chart(alt.Data(values%3D_phage_bands))%0A%20%20%20%20%20%20%20%20.mark_text(fontSize%3D11%2C%20fontWeight%3D%22bold%22%2C%20color%3D%22%23b91c1c%22)%0A%20%20%20%20%20%20%20%20.encode(%0A%20%20%20%20%20%20%20%20%20%20%20%20x%3D%22mid_mb%3AQ%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20y%3D%22y_label%3AQ%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20text%3D%22prophage%3AN%22%2C%0A%20%20%20%20%20%20%20%20)%0A%20%20%20%20)%0A%20%20%20%20chart_gc_profile%20%3D%20(_band_rects%20%2B%20_gc_line%20%2B%20_gc_phage_pts%20%2B%20_band_labels).properties(%0A%20%20%20%20%20%20%20%20width%3D900%2C%0A%20%20%20%20%20%20%20%20height%3D320%2C%0A%20%20%20%20%20%20%20%20title%3D%22Sliding%204-kb%20Local%20GC%20Adaptation%20Across%20E.%20coli%20K-12%20(CP014225.1)%20Highlighting%20AT-Rich%20Prophage%20Islands%22%2C%0A%20%20%20%20)%0A%0A%20%20%20%20_prophage_only%20%3D%20%5Bc%20for%20c%20in%20ref_cds%20if%20c%5B%22region%22%5D%20!%3D%20%22Host%22%5D%0A%20%20%20%20_len_bins%20%3D%20%5B%0A%20%20%20%20%20%20%20%20(%2290%E2%80%93120%20bp%20(Small%20Phage%20ORFs)%22%2C%20lambda%20n%3A%2090%20%3C%3D%20n%20%3C%3D%20123)%2C%0A%20%20%20%20%20%20%20%20(%22126%E2%80%93180%20bp%22%2C%20lambda%20n%3A%20126%20%3C%3D%20n%20%3C%3D%20180)%2C%0A%20%20%20%20%20%20%20%20(%22183%E2%80%93300%20bp%22%2C%20lambda%20n%3A%20183%20%3C%3D%20n%20%3C%3D%20300)%2C%0A%20%20%20%20%20%20%20%20(%22%3E300%20bp%22%2C%20lambda%20n%3A%20n%20%3E%20300)%2C%0A%20%20%20%20%5D%0A%20%20%20%20_strat_rows%20%3D%20%5B%5D%0A%20%20%20%20for%20_bname%2C%20_bfn%20in%20_len_bins%3A%0A%20%20%20%20%20%20%20%20_sub%20%3D%20%5Bc%20for%20c%20in%20_prophage_only%20if%20_bfn(c%5B%22length%22%5D)%5D%0A%20%20%20%20%20%20%20%20if%20_sub%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20_strat_rows.append(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22category%22%3A%20%22By%20Prophage%20ORF%20Length%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22group%22%3A%20f%22%7B_bname%7D%20(n%3D%7Blen(_sub)%7D)%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22model%22%3A%20%22Baseline%20(Bacterial-Only)%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22stop_recall%22%3A%20round(sum(c%5B%22base_stop_hit%22%5D%20for%20c%20in%20_sub)%20%2F%20len(_sub)%20*%20100.0%2C%201)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22exact_recall%22%3A%20round(sum(c%5B%22base_exact_hit%22%5D%20for%20c%20in%20_sub)%20%2F%20len(_sub)%20*%20100.0%2C%201)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20)%0A%20%20%20%20%20%20%20%20%20%20%20%20_strat_rows.append(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22category%22%3A%20%22By%20Prophage%20ORF%20Length%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22group%22%3A%20f%22%7B_bname%7D%20(n%3D%7Blen(_sub)%7D)%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22model%22%3A%20%22Single-Pass%20Phage-Aware%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22stop_recall%22%3A%20round(sum(c%5B%22phage_stop_hit%22%5D%20for%20c%20in%20_sub)%20%2F%20len(_sub)%20*%20100.0%2C%201)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22exact_recall%22%3A%20round(sum(c%5B%22phage_exact_hit%22%5D%20for%20c%20in%20_sub)%20%2F%20len(_sub)%20*%20100.0%2C%201)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20)%0A%0A%20%20%20%20for%20_ov_type%20in%20%5B%22Non-overlapping%22%2C%20%221-bp%20(TGATG%2FTAATG)%22%2C%20%224-bp%20(ATGA%2FTCAT)%22%2C%20%22%3E4-bp%20overlap%22%5D%3A%0A%20%20%20%20%20%20%20%20_sub%20%3D%20%5Bc%20for%20c%20in%20_prophage_only%20if%20c%5B%22overlap_type%22%5D%20%3D%3D%20_ov_type%5D%0A%20%20%20%20%20%20%20%20if%20_sub%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20_strat_rows.append(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22category%22%3A%20%22By%20Operon%20Overlap%20Architecture%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22group%22%3A%20f%22%7B_ov_type%7D%20(n%3D%7Blen(_sub)%7D)%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22model%22%3A%20%22Baseline%20(Bacterial-Only)%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22stop_recall%22%3A%20round(sum(c%5B%22base_stop_hit%22%5D%20for%20c%20in%20_sub)%20%2F%20len(_sub)%20*%20100.0%2C%201)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22exact_recall%22%3A%20round(sum(c%5B%22base_exact_hit%22%5D%20for%20c%20in%20_sub)%20%2F%20len(_sub)%20*%20100.0%2C%201)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20)%0A%20%20%20%20%20%20%20%20%20%20%20%20_strat_rows.append(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22category%22%3A%20%22By%20Operon%20Overlap%20Architecture%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22group%22%3A%20f%22%7B_ov_type%7D%20(n%3D%7Blen(_sub)%7D)%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22model%22%3A%20%22Single-Pass%20Phage-Aware%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22stop_recall%22%3A%20round(sum(c%5B%22phage_stop_hit%22%5D%20for%20c%20in%20_sub)%20%2F%20len(_sub)%20*%20100.0%2C%201)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22exact_recall%22%3A%20round(sum(c%5B%22phage_exact_hit%22%5D%20for%20c%20in%20_sub)%20%2F%20len(_sub)%20*%20100.0%2C%201)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20)%0A%0A%20%20%20%20chart_stratified%20%3D%20(%0A%20%20%20%20%20%20%20%20alt.Chart(alt.Data(values%3D_strat_rows))%0A%20%20%20%20%20%20%20%20.mark_bar(cornerRadiusTopLeft%3D3%2C%20cornerRadiusTopRight%3D3)%0A%20%20%20%20%20%20%20%20.encode(%0A%20%20%20%20%20%20%20%20%20%20%20%20x%3Dalt.X(%22group%3AN%22%2C%20title%3DNone%2C%20axis%3Dalt.Axis(labelAngle%3D-25))%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20xOffset%3Dalt.XOffset(%22model%3AN%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20y%3Dalt.Y(%22stop_recall%3AQ%22%2C%20title%3D%22Prophage%203'-Stop%20Recall%20(%25)%22%2C%20scale%3Dalt.Scale(domain%3D%5B0%2C%20105%5D))%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20color%3Dalt.Color(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22model%3AN%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20title%3D%22Predictor%20Configuration%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20scale%3Dalt.Scale(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20domain%3D%5B%22Baseline%20(Bacterial-Only)%22%2C%20%22Single-Pass%20Phage-Aware%22%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20range%3D%5B%22%2394a3b8%22%2C%20%22%230d9488%22%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20column%3Dalt.Column(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22category%3AN%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20title%3DNone%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20header%3Dalt.Header(labelFontSize%3D13%2C%20labelFontWeight%3D%22bold%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20tooltip%3D%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20alt.Tooltip(%22category%3AN%22%2C%20title%3D%22Dimension%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20alt.Tooltip(%22group%3AN%22%2C%20title%3D%22Stratum%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20alt.Tooltip(%22model%3AN%22%2C%20title%3D%22Model%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20alt.Tooltip(%22stop_recall%3AQ%22%2C%20title%3D%223'-Stop%20Recall%20(%25)%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20alt.Tooltip(%22exact_recall%3AQ%22%2C%20title%3D%22Exact%20Recall%20(%25)%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%5D%2C%0A%20%20%20%20%20%20%20%20)%0A%20%20%20%20%20%20%20%20.resolve_scale(x%3D%22independent%22)%0A%20%20%20%20%20%20%20%20.properties(width%3D420%2C%20height%3D280%2C%20title%3D%22Prophage%20ORF%20Recovery%20by%20Gene%20Length%20%26%20Operon%20Overlap%20Type%22)%0A%20%20%20%20)%0A%0A%20%20%20%20chart_throughput%20%3D%20(%0A%20%20%20%20%20%20%20%20alt.Chart(alt.Data(values%3Dalt_code_timings))%0A%20%20%20%20%20%20%20%20.mark_bar(cornerRadiusTopRight%3D3%2C%20cornerRadiusBottomRight%3D3)%0A%20%20%20%20%20%20%20%20.encode(%0A%20%20%20%20%20%20%20%20%20%20%20%20y%3Dalt.Y(%22mode%3AN%22%2C%20sort%3D%22-x%22%2C%20title%3D%22Translation%20Table%20%2F%20Execution%20Mode%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20x%3Dalt.X(%22throughput_mb_s%3AQ%22%2C%20title%3D%22Whole-Genome%20Decoding%20Throughput%20(Mb%20%2F%20s)%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20color%3Dalt.Color(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22pass_type%3AN%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20title%3D%22Execution%20Strategy%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20scale%3Dalt.Scale(domain%3D%5B%22Single-Pass%22%2C%20%22Two-Pass%22%5D%2C%20range%3D%5B%22%230d9488%22%2C%20%22%23f97316%22%5D)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20tooltip%3D%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20alt.Tooltip(%22mode%3AN%22%2C%20title%3D%22Mode%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20alt.Tooltip(%22time_s%3AQ%22%2C%20title%3D%22Wall%20Time%20(s)%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20alt.Tooltip(%22throughput_mb_s%3AQ%22%2C%20title%3D%22Throughput%20(Mb%2Fs)%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20alt.Tooltip(%22predicted_orfs%3AQ%22%2C%20title%3D%22Predicted%20ORFs%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%5D%2C%0A%20%20%20%20%20%20%20%20)%0A%20%20%20%20%20%20%20%20.properties(%0A%20%20%20%20%20%20%20%20%20%20%20%20width%3D860%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20height%3D260%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20title%3D%22Single-Pass%20Decoding%20Throughput%20Across%20Bacterial%20%26%20Viral%20Genetic%20Codes%20(4.66%20Mb%20Genome)%22%2C%0A%20%20%20%20%20%20%20%20)%0A%20%20%20%20)%0A%20%20%20%20return%20chart_gc_profile%2C%20chart_recall%2C%20chart_stratified%2C%20chart_throughput%0A%0A%0A%40app.cell%0Adef%20_(%0A%20%20%20%20exact_rescued_prophage_orfs%2C%0A%20%20%20%20genome_len%2C%0A%20%20%20%20mo%2C%0A%20%20%20%20recovered_prophage_orfs%2C%0A%20%20%20%20ref_cds%2C%0A%20%20%20%20region_metrics%2C%0A%20%20%20%20time_phage%2C%0A)%3A%0A%20%20%20%20%23%20Slide%201%3A%20Title%2C%20Hero%20KPIs%20%26%20Executive%20Overview%0A%20%20%20%20_prophage_summary%20%3D%20next(r%20for%20r%20in%20region_metrics%20if%20r%5B%22region%22%5D%20%3D%3D%20%22All%20Prophages%20(9)%22)%0A%20%20%20%20_host_summary%20%3D%20next(r%20for%20r%20in%20region_metrics%20if%20r%5B%22region%22%5D%20%3D%3D%20%22Host%20Chromosome%22)%0A%20%20%20%20_mb_per_s%20%3D%20(genome_len%20%2F%201e6)%20%2F%20max(time_phage%2C%201e-6)%0A%0A%20%20%20%20mo.vstack(%0A%20%20%20%20%20%20%20%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20mo.md(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20f%22%22%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%23%20Single-Pass%20Bacterial%20%26%20Prophage%20ORF%20Prediction%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%23%23%23%20*Escherichia%20coli*%20str.%20K-12%20substr.%20MG1655%20(%60GenBank%3A%20CP014225.1%60%20%E2%80%94%20%7Bgenome_len%3A%2C%7D%20bp)%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20Co-predicting%20bacterial%20host%20genes%20and%20horizontally%20acquired%20prophage%2Fviral%20ORFs%20in%20a%20**single%2029-state%20HMM-Viterbi%20pass**.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20%20%20%20%20%20%20%20%20)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20mo.hstack(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20mo.stat(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20label%3D%22Prophage%203'-Stop%20Recall%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20value%3Df%22%7B_prophage_summary%5B'phage_stop_recall'%5D%3A.1f%7D%25%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20caption%3Df%22%7B_prophage_summary%5B'stop_gain_pct'%5D%3A%2B.1f%7D%25%20vs.%20Bacterial-Only%20(%7B_prophage_summary%5B'base_missed'%5D%7D%20%E2%86%92%20%7B_prophage_summary%5B'phage_missed'%5D%7D%20missed)%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20bordered%3DTrue%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20mo.stat(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20label%3D%22Prophage%20Exact%20(5'%2B3')%20Recall%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20value%3Df%22%7B_prophage_summary%5B'phage_exact_recall'%5D%3A.1f%7D%25%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20caption%3Df%22%7B_prophage_summary%5B'exact_gain_pct'%5D%3A%2B.1f%7D%25%20(%2B%7Blen(exact_rescued_prophage_orfs)%7D%20exact%205'%20starts%20rescued)%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20bordered%3DTrue%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20mo.stat(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20label%3D%22Host%20Chromosome%20Recall%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20value%3Df%22%7B_host_summary%5B'phage_stop_recall'%5D%3A.1f%7D%25%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20caption%3Df%22%7B_host_summary%5B'n_cds'%5D%3A%2C%7D%20intact%20host%20CDSs%20(%7B_host_summary%5B'phage_exact_recall'%5D%3A.1f%7D%25%20exact)%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20bordered%3DTrue%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20mo.stat(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20label%3D%22Newly%20Rescued%20Prophage%20ORFs%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20value%3Df%22%2B%7Blen(recovered_prophage_orfs)%7D%20ORFs%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20caption%3Df%22Across%209%20cryptic%20%26%20lambdoid%20prophages%20(%7Blen(ref_cds)%3A%2C%7D%20total%20CDSs)%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20bordered%3DTrue%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20mo.stat(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20label%3D%22Single-Pass%20Throughput%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20value%3Df%22%7B_mb_per_s%3A.1f%7D%20Mb%2Fs%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20caption%3Df%22%7Btime_phage%20*%201000%3A.0f%7D%20ms%20wall%20time%20on%204.66%20Mb%20chromosome%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20bordered%3DTrue%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20widths%3D%22equal%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20gap%3D1.0%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20mo.callout(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20mo.md(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22**Key%20Takeaway**%3A%20Standard%20bacterial%20ORF%20callers%20miss%20small%2C%20AT-rich%2C%20and%20tightly%20overlapping%20prophage%20genes%20%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22(such%20as%20seroconverting%20bacteriophage%20*gtrABC*%20and%20*oac*%20cassettes).%20%60OrfPredictor(include_phage%3DTrue)%60%20%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22recovers%20**95.6%25**%20of%20prophage%203'-stops%20and%20**79.3%25**%20of%20exact%205'%2B3'%20boundaries%20in%20a%20single%20pass%20with%20zero%20two-pass%20overhead.%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20kind%3D%22success%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20)%2C%0A%20%20%20%20%20%20%20%20%5D%2C%0A%20%20%20%20%20%20%20%20gap%3D1.2%2C%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(chart_gc_profile%2C%20mo)%3A%0A%20%20%20%20%23%20Slide%202%3A%20Sliding%20Local%20GC%20Adaptation%20Across%20AT-Rich%20Prophage%20Islands%0A%20%20%20%20mo.vstack(%0A%20%20%20%20%20%20%20%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20mo.md(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%23%23%201.%20Sliding%204-kb%20Local%20GC%20Adaptation%20Across%20Prophage%20Islands%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20Cryptic%20and%20lambdoid%20prophages%20(%60CP4-44%60%2C%20%60CPS-53%60%2C%20%60e14%60%2C%20%60Rac%60%2C%20%60Qin%60)%20exhibit%20sharp%20local%20GC%20drops%20(%6034%25%E2%80%9344%25%60%20GC)%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20relative%20to%20the%20%6050.8%25%60%20GC%20*E.%20coli*%20host%20background.%20%60OrfPredictor%60%20computes%20a%20prefix-sum%204-kb%20sliding%20GC%20bin%20(%600..43%60)%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20at%20every%20nucleotide%20so%20hexamer%20codon%20emissions%20adapt%20seamlessly%20across%20prophage%20boundaries.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20%20%20%20%20%20%20%20%20)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20chart_gc_profile%2C%0A%20%20%20%20%20%20%20%20%5D%2C%0A%20%20%20%20%20%20%20%20gap%3D1.0%2C%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(chart_recall%2C%20mo)%3A%0A%20%20%20%20%23%20Slide%203%3A%20Per-Prophage%20%26%20Host%20CDS%20Recall%0A%20%20%20%20mo.vstack(%0A%20%20%20%20%20%20%20%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20mo.md(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%23%23%202.%20Prophage%20%26%20Host%20CDS%20Recall%20Across%20All%209%20Embedded%20Islands%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20Single-pass%20phage-aware%20decoding%20boosts%20recall%20across%20every%20defective%20and%20lambdoid%20prophage%20island%20while%20simultaneously%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20improving%20host%20chromosome%203'-stop%20recall%20(%6098.7%25%60%20%E2%86%92%20%6099.1%25%60).%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20%20%20%20%20%20%20%20%20)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20chart_recall%2C%0A%20%20%20%20%20%20%20%20%5D%2C%0A%20%20%20%20%20%20%20%20gap%3D1.0%2C%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(chart_stratified%2C%20chart_throughput%2C%20mo)%3A%0A%20%20%20%20%23%20Slide%204%3A%20Stratified%20Recovery%20(Length%20%26%20Overlap)%20and%20Decoding%20Throughput%0A%20%20%20%20mo.vstack(%0A%20%20%20%20%20%20%20%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20mo.md(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%23%23%203.%20Operon%20Overlap%20Recovery%20%26%20Single-Pass%20Decoding%20Throughput%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20Phage%20lysis%2Flysogeny%20modules%20rely%20on%20%601-bp%60%20(%60TGATG%60%2F%60TAATG%60)%20and%20%604-bp%60%20(%60ATGA%60)%20stop-start%20overlaps%20plus%20short%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20(%6090%E2%80%93120%20bp%60)%20accessory%20ORFs.%20Direct%20HMM%20%60E%20%E2%86%92%20M1%60%20%2F%20%60Er%20%E2%86%92%20M1r%60%20overlap%20transitions%20and%20intergenic%20gap%20rescue%20capture%20these%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20without%20a%20second%20decoding%20pass.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20%20%20%20%20%20%20%20%20)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20mo.ui.tabs(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22By%20ORF%20Length%20%26%20Operon%20Overlap%22%3A%20chart_stratified%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22Throughput%20Across%20Genetic%20Codes%22%3A%20chart_throughput%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20)%2C%0A%20%20%20%20%20%20%20%20%5D%2C%0A%20%20%20%20%20%20%20%20gap%3D0.8%2C%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(mo%2C%20recovered_prophage_orfs%2C%20region_metrics)%3A%0A%20%20%20%20%23%20Slide%205%3A%20Interactive%20Summary%20Tables%20(Per-Region%20Metrics%20%26%20Rescued%20Prophage%20ORFs)%0A%20%20%20%20_rows_md%20%3D%20%22%5Cn%22.join(%0A%20%20%20%20%20%20%20%20f%22%7C%20**%7Br%5B'region'%5D%7D**%20%7C%20%7Br%5B'span_kb'%5D%3A.1f%7D%20kb%20%7C%20%7Br%5B'gc_pct'%5D%3A.1f%7D%25%20%7C%20%7Br%5B'n_cds'%5D%7D%20%22%0A%20%20%20%20%20%20%20%20f%22%7C%20%7Br%5B'base_stop_recall'%5D%3A.1f%7D%25%20%7C%20**%7Br%5B'phage_stop_recall'%5D%3A.1f%7D%25**%20(%7Br%5B'stop_gain_pct'%5D%3A%2B.1f%7D%25)%20%22%0A%20%20%20%20%20%20%20%20f%22%7C%20%7Br%5B'base_exact_recall'%5D%3A.1f%7D%25%20%7C%20**%7Br%5B'phage_exact_recall'%5D%3A.1f%7D%25**%20(%7Br%5B'exact_gain_pct'%5D%3A%2B.1f%7D%25)%20%22%0A%20%20%20%20%20%20%20%20f%22%7C%20%7Br%5B'base_missed'%5D%7D%20%E2%86%92%20**%7Br%5B'phage_missed'%5D%7D**%20%7C%22%0A%20%20%20%20%20%20%20%20for%20r%20in%20region_metrics%0A%20%20%20%20)%0A%0A%20%20%20%20_rec_md%20%3D%20%22%5Cn%22.join(%0A%20%20%20%20%20%20%20%20f%22%7C%20%60%7Bc%5B'region'%5D%7D%60%20%7C%20%60%7Bc%5B'locus_tag'%5D%7D%60%20%7C%20%60%7Bc%5B'gene'%5D%20or%20'-'%7D%60%20%7C%20%60%7Bc%5B'start'%5D%7D..%7Bc%5B'end'%5D%7D%60%20(%60%7Bc%5B'strand'%5D%3A%2Bd%7D%60)%20%22%0A%20%20%20%20%20%20%20%20f%22%7C%20%7Bc%5B'length'%5D%7D%20bp%20%7C%20%7Bc%5B'overlap_type'%5D%7D%20%7C%20%7Bc%5B'product'%5D%7D%20%7C%22%0A%20%20%20%20%20%20%20%20for%20c%20in%20recovered_prophage_orfs%0A%20%20%20%20)%0A%0A%20%20%20%20_summary_table_md%20%3D%20%22%5Cn%22.join(%0A%20%20%20%20%20%20%20%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%22%7C%20Region%20%7C%20Span%20%7C%20Local%20GC%20%7C%20Intact%20CDS%20%7C%20Baseline%203'-Stop%20%7C%20Phage-Aware%203'-Stop%20%7C%20Baseline%20Exact%20%7C%20Phage-Aware%20Exact%20%7C%20Missed%20ORFs%20%7C%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22%7C%20%3A---%20%7C%20---%3A%20%7C%20---%3A%20%7C%20---%3A%20%7C%20---%3A%20%7C%20---%3A%20%7C%20---%3A%20%7C%20---%3A%20%7C%20---%3A%20%7C%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20_rows_md%2C%0A%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20)%0A%20%20%20%20_rescued_table_md%20%3D%20%22%5Cn%22.join(%0A%20%20%20%20%20%20%20%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%22%7C%20Prophage%20%7C%20Locus%20Tag%20%7C%20Gene%20%7C%20Coordinates%20(0-based)%20%7C%20Length%20%7C%20Operon%20Overlap%20%7C%20Product%20%7C%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22%7C%20%3A---%20%7C%20%3A---%20%7C%20%3A---%20%7C%20%3A---%20%7C%20---%3A%20%7C%20%3A---%20%7C%20%3A---%20%7C%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20_rec_md%2C%0A%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20)%0A%0A%20%20%20%20mo.vstack(%0A%20%20%20%20%20%20%20%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20mo.md(%22%23%23%204.%20Benchmark%20Summary%20%26%20Newly%20Rescued%20Prophage%20ORFs%22)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20mo.ui.tabs(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22Per-Region%20Recall%20Summary%22%3A%20mo.md(_summary_table_md)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20f%22Newly%20Rescued%20Prophage%20ORFs%20(%7Blen(recovered_prophage_orfs)%7D)%22%3A%20mo.md(_rescued_table_md)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20)%2C%0A%20%20%20%20%20%20%20%20%5D%2C%0A%20%20%20%20%20%20%20%20gap%3D0.8%2C%0A%20%20%20%20)%0A%20%20%20%20return%0A%0A%0Aif%20__name__%20%3D%3D%20%22__main__%22%3A%0A%20%20%20%20app.run()%0A
3bb60049a8dca976fff6a1b75a5317e0