def test_softclip_start_of_alignment_by_query_masking_qualities() -> None: for new_qual in None, 0, 2: rec = r(10, "50M", "+") clipping.softclip_start_of_alignment_by_query(rec, 10, clipped_base_quality=new_qual) quals = rec.query_qualities for i in range(0, 10): assert quals[i] == (30 if new_qual is None else new_qual)
def test_softclip_start_of_alignment_by_query_clips_10_aligned_bases() -> None: rec = r(10, "50M", "+") info = clipping.softclip_start_of_alignment_by_query(rec, 10) assert info.query_bases_clipped == 10 assert info.ref_bases_clipped == 10 assert rec.reference_start == 20 assert rec.cigarstring == "10S40M"
def test_softclip_start_of_alignment_by_query_unmaps_read_when_clipping_all_bases() -> None: rec = r(10, "50M") assert not rec.is_unmapped info = clipping.softclip_start_of_alignment_by_query(rec, 50) assert info.query_bases_clipped == 50 assert info.ref_bases_clipped == 50 assert rec.is_unmapped
def test_softclip_start_of_alignment_by_query_removes_deletion_following_clipping() -> None: for strand in "+", "-": rec = r(10, "10M4D40M", strand) info = clipping.softclip_start_of_alignment_by_query(rec, 10) assert info.query_bases_clipped == 10 assert info.ref_bases_clipped == 14 assert rec.reference_start == 24 assert rec.cigarstring == "10S40M"
def test_softclip_start_of_alignment_by_query_preserves_deletions_post_clipping_region() -> None: for strand in "+", "-": rec = r(10, "25M4D25M", strand) info = clipping.softclip_start_of_alignment_by_query(rec, 10) assert info.query_bases_clipped == 10 assert info.ref_bases_clipped == 10 assert rec.reference_start == 20 assert rec.cigarstring == "10S15M4D25M"
def test_softclip_start_of_alignment_by_query_preserves_insertion_adjacent_to_clipping() -> None: for strand in "+", "-": rec = r(10, "10M4I36M", strand) info = clipping.softclip_start_of_alignment_by_query(rec, 10) assert info.query_bases_clipped == 10 assert info.ref_bases_clipped == 10 assert rec.reference_start == 20 assert rec.cigarstring == "10S4I36M"
def test_softclip_start_of_alignment_by_query_consumes_rest_of_insertion() -> None: for strand in "+", "-": rec = r(10, "8M4I38M", strand) info = clipping.softclip_start_of_alignment_by_query(rec, 10) assert info.query_bases_clipped == 12 assert info.ref_bases_clipped == 8 assert rec.reference_start == 18 assert rec.cigarstring == "12S38M"
def test_softclip_start_of_alignment_by_query_with_complicated_cigar() -> None: for strand in "+", "-": rec = r(10, "2H4S16M10I5M5I10M", strand) info = clipping.softclip_start_of_alignment_by_query(rec, 10) assert info.query_bases_clipped == 10 assert info.ref_bases_clipped == 10 assert rec.reference_start == 20 assert rec.cigarstring == "2H14S6M10I5M5I10M"
def test_softclip_start_of_alignment_by_query_clips_10_more_bases() -> None: for strand in "+", "-": rec = r(10, "10S40M", strand) info = clipping.softclip_start_of_alignment_by_query(rec, 10) assert info.query_bases_clipped == 10 assert info.ref_bases_clipped == 10 assert rec.reference_start == 20 assert rec.cigarstring == "20S30M"
def test_soft_clip_start_of_alignment_by_query_clips_10_aligned_and_inserted_bases() -> None: for strand in "+", "-": rec = r(10, "4M2I44M", strand) info = clipping.softclip_start_of_alignment_by_query(rec, 10) assert info.query_bases_clipped == 10 assert info.ref_bases_clipped == 8 assert rec.reference_start == 18 assert rec.cigarstring == "10S40M"
def test_softclip_start_of_alignment_by_query_unmapped_reads_ok() -> None: rec = r(start=None, cigar=None) info = clipping.softclip_start_of_alignment_by_query(rec, 10) assert info.query_bases_clipped == 0 assert info.ref_bases_clipped == 0