diff --git a/dorado/alignment/Minimap2Aligner.cpp b/dorado/alignment/Minimap2Aligner.cpp index f7346576..217625e5 100644 --- a/dorado/alignment/Minimap2Aligner.cpp +++ b/dorado/alignment/Minimap2Aligner.cpp @@ -223,7 +223,7 @@ std::vector Minimap2Aligner::align(bam1_t* irecord, mm_tbuf_t* buf) { add_sa_tag(record, reg, hits, j, static_cast(l_seq), mm_index, use_hard_clip); // Remove MM/ML/MN tags if secondary alignment and soft clipping is not enabled. - if ((flag & BAM_FSUPPLEMENTARY) && !(mm_map_opts.flag & MM_F_SOFTCLIP)) { + if ((flag & (BAM_FSUPPLEMENTARY | BAM_FSECONDARY)) && !(mm_map_opts.flag & MM_F_SOFTCLIP)) { if (auto tag = bam_aux_get(record, "MM"); tag != nullptr) { bam_aux_del(record, tag); } diff --git a/tests/AlignerTest.cpp b/tests/AlignerTest.cpp index 96c306bd..b0e81026 100644 --- a/tests/AlignerTest.cpp +++ b/tests/AlignerTest.cpp @@ -197,19 +197,33 @@ TEST_CASE("AlignerTest: Check modbase tags are removed for secondary alignments" options.soft_clipping = GENERATE(true, false); dorado::HtsReader reader(query.string(), std::nullopt); auto bam_records = RunAlignmentPipeline(reader, ref.string(), options, 10); - REQUIRE(bam_records.size() == 2); + REQUIRE(bam_records.size() == 3); - bam1_t* rec = bam_records[1].get(); + bam1_t* primary_rec = bam_records[0].get(); + bam1_t* secondary_rec = bam_records[1].get(); + bam1_t* supplementary_rec = bam_records[2].get(); // Check aux tags. if (options.soft_clipping) { - CHECK(bam_aux_get(rec, "MM") != nullptr); - CHECK(bam_aux_get(rec, "ML") != nullptr); - CHECK(bam_aux_get(rec, "MN") != nullptr); + CHECK(bam_aux_get(primary_rec, "MM") != nullptr); + CHECK(bam_aux_get(primary_rec, "ML") != nullptr); + CHECK(bam_aux_get(primary_rec, "MN") != nullptr); + CHECK(bam_aux_get(secondary_rec, "MM") != nullptr); + CHECK(bam_aux_get(secondary_rec, "ML") != nullptr); + CHECK(bam_aux_get(secondary_rec, "MN") != nullptr); + CHECK(bam_aux_get(supplementary_rec, "MM") != nullptr); + CHECK(bam_aux_get(supplementary_rec, "ML") != nullptr); + CHECK(bam_aux_get(supplementary_rec, "MN") != nullptr); } else { - CHECK(bam_aux_get(rec, "MM") == nullptr); - CHECK(bam_aux_get(rec, "ML") == nullptr); - CHECK(bam_aux_get(rec, "MN") == nullptr); + CHECK(bam_aux_get(primary_rec, "MM") != nullptr); + CHECK(bam_aux_get(primary_rec, "ML") != nullptr); + CHECK(bam_aux_get(primary_rec, "MN") != nullptr); + CHECK(bam_aux_get(secondary_rec, "MM") == nullptr); + CHECK(bam_aux_get(secondary_rec, "ML") == nullptr); + CHECK(bam_aux_get(secondary_rec, "MN") == nullptr); + CHECK(bam_aux_get(supplementary_rec, "MM") == nullptr); + CHECK(bam_aux_get(supplementary_rec, "ML") == nullptr); + CHECK(bam_aux_get(supplementary_rec, "MN") == nullptr); } } diff --git a/tests/data/aligner_test/supplementary_basecall_target.fa b/tests/data/aligner_test/supplementary_basecall_target.fa index adecdce6..4282443c 100644 --- a/tests/data/aligner_test/supplementary_basecall_target.fa +++ b/tests/data/aligner_test/supplementary_basecall_target.fa @@ -1,4 +1,6 @@ >read1 999 CCCTTTTTGCCCCTTTACGCCGCACCTAGCATATGCGCCTGCCACTTGCAGCTTTCCCGCCCCTGCCCGCCTGCCCACCCCTTGCCGCCTCCTTATGCGCCGCCCCGCCCACCCCCGCCCACCCACCGCCCCACGCTTCCCCCACCCGCCGCCCACGCGCATCGCCCGCCCCCCCCGCCCCACCCGCCCACCGCCCTGTCCAAAGCCCGCCCCACGCCCGGCCCGCGCCCGCCAGCCCCGCCCCGTGGCCGCCGCCCCCGCCCGCCCCCCACCCGCCCCCCTACCTGCCCGCCTGGCCGCCGCCTCCCATCCCACCCGCCACCCGCCCCCTGTGCCCCACTTCCAGCCCGGCCGCCCATCCCCGCCCCCCCCCCCCACCCACCGCCCCCCGGCCAGCCCCCGCCCCCGCCCCGCCCGCCCGGCGCCGGCCCCATGCCCCCACCCCGCTGCCCCGCGCCCCCGCCCAGCCACACCCACCCCGCCGCCCCACCCGCCCCCACCGGCCCCGCCCGGCGCAGCCCGGCAGCTTCCCCCGCCCACGCCGCCCCCTTGCCAGCCCACCCCGCAGCTCACCCACCAGCCCATCCCGCTCCCCCGGCGCCCCAGCCGCCCGCCCACCCGCCGCGCACCCGCCCCCGCCCGCTCCCCCCCGCCCACCCGCCCGCCTCGCCCATCTGCTCCCCCCACCCACCCCCGCGCCCATGCGCCCCCCGCCCACCCCGCGCCCACCCGCCCCCCGCCCCACCCACCCACCCCGCCCCGCCCCACTTGCCCCCACGCCCCCGCCCCCCGCCGCCGCCCTCCCACACACGCTTCCCAGCCCGCTTCGCACAGCGCCTACCGCCGCCCCACCCGCCCCTTAAAAGCCACCGGCGCCCGCGCACCCACCCCGCCATCCAGCAGCCAACCAGCCCTTGCTTCCCCATACTTGTAAAGCTTCCCCGCACCCGCCCGCCTTCCACCCACCCACCGCCCCCCCGGCCCGCCGCCCGGCCTCGC +>read3 999 +CCCTTTTTGCCCCTTTACGCCGCACCTAGCATATGCGCCTGCCACTTGCAGCTTTCCCGCCCCTGCCCGCCTGCCCACCCCTTGCCGCCTCCTTATGCGCCGCCCCGCCCACCCCCGCCCACCCACCGCCCCACGCTTCCCCCACCCGCCGCCCACGCGCATCGCCCGCCCCCCCCGCCCCACCCGCCCACCGCCCTGTCCAAAGCCCGCCCCACGCCCGGCCCGCGCCCGCCAGCCCCGCCCCGTGGCCGCCGCCCCCGCCCGCCCCCCACCCGCCCCCCTACCTGCCCGCCTGGCCGCCGCCTCCCATCCCACCCGCCACCCGCCCCCTGTGCCCCACTTCCAGCCCGGCCGCCCATCCCCGCCCCCCCCCCCCACCCACCGCCCCCCGGCCAGCCCCCGCCCCCGCCCCGCCCGCCCGGCGCCGGCCCCATGCCCCCACCCCGCTGCCCCGCGCCCCCGCCCAGCCACACCCACCCCGCCGCCCCACCCGCCCCCACCGGCCCCGCCCGGCGCAGCCCGGCAGCTTCCCCCGCCCACGCCGCCCCCTTGCCAGCCCACCCCGCAGCTCACCCACCAGCCCATCCCGCTCCCCCGGCGCCCCAGCCGCCCGCCCACCCGCCGCGCACCCGCCCCCGCCCGCTCCCCCCCGCCCACCCGCCCGCCTCGCCCATCTGCTCCCCCCACCCACCCCCGCGCCCATGCGCCCCCCGCCCACCCCGCGCCCACCCGCCCCCCGCCCCACCCACCCACCCCGCCCCGCCCCACTTGCCCCCACGCCCCCGCCCCCCGCCGCCGCCCTCCCACACACGCTTCCCAGCCCGCTTCGCACAGCGCCTACCGCCGCCCCACCCGCCCCTTAAAAGCCACCGGCGCCCGCGCACCCACCCCGCCATCCAGCAGCCAACCAGCCCTTGCTTCCCCATACTTGTAAAGCTTCCCCGCACCCGCCCGCCTTCCACCCACCCACCGCCCCCCCGGCCCGCCGCCCGGCCTCGC >read2 899 CCGGCCCCGGCCCAGCCTTGCCCGCCTTCTCGAAGCGCCGCCGCGCCTCCAGCCCAGCCCGCCCACCCTCGCCCGCTTGCCCCCGGCTCGCGCTCCAGGCGCCCGGCCCCGGCCCCGCCCGCGCTCTGCCATTTCCACTTCCCACCGGCCAAAGCCCGCCGGCATCCCGCGCGCCCGCACAAGCCAAGCTTCCCCGGCTTGGCGCCATTTAAGCAAAAGCCGCCCGCCAACGCCAGCGCCCGGCGCCCGGCCCGCCACCGGCAGCGCCGCCCTTTCCAGCCCGGCGCTGGCCATCGGCCAGCGCACCACGAAGCCAGCCCACCGCCAGCCCGCCAAAGCCGCTCCCACAAGCCAAAGCCCGCCCACCCCCAGCCACCCATACCCCGCTCGCCCGCCAGCTTCTGTATGCCCACCCAGCGCACTTGCTTTCCACCCCCACCCCCGCCCCGCGCCCGCCCGCCCGCCACCCCTGCCCCGCCCCCCGCCGCTGCCTTACCGCTGCCCCAAAGCGCCCTTCCAGCACTTCCTTAGCCACCCTTTTTAGCTTCACTTCCACCTACCGCTTGCCGCCGGCTGCTTCCCCGCCCATCCCACCGCACCCGCCCGCGCCTTATGCGCACCGCCCGCGCCCGGCCTGCAAGCCAGCTTCGCGCGCCCGCTTCCACCACCCCCGCCAGCCCGCTTCCTGCTTGCCCCCGCCGCACCGCCCACCCACCCCCACCGGCCAGCGCTCATATGCCCCCGCCGCACCAGCACGCCACCGCCCGCCTCCTTCGCCAGCCCGCCCACCCGCCGCCCAGCCACCGCACCCACTCAAGGGGTCGCCTCTCATGCGCATCATGCGCAAAAAAAAAAACGGGGGGGGGGGGGGAAAAAAAAAAAAAAAAAAAAAAAAAAAA