Skip to content

Commit 2986713

Browse files
fix: allow leading deletions in read_pos method of CigarStringView. (#447)
* fix: allow leading deletions in read_pos method of CigarStringView. * fix testcase --------- Co-authored-by: Felix Mölder <[email protected]>
1 parent 01fb5b8 commit 2986713

File tree

2 files changed

+10
-5
lines changed

2 files changed

+10
-5
lines changed

src/bam/mod.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -2997,7 +2997,7 @@ CCCCCCCCCCCCCCCCCCC"[..],
29972997
fn test_bam_header_sync() {
29982998
let reader = Reader::from_path("test/test_issue_156_no_text.bam").unwrap();
29992999
let header_hashmap = Header::from_template(reader.header()).to_hashmap();
3000-
let header_refseqs = header_hashmap.get("SQ".into()).unwrap();
3000+
let header_refseqs = header_hashmap.get("SQ").unwrap();
30013001
assert_eq!(header_refseqs[0].get("SN").unwrap(), "ref_1",);
30023002
assert_eq!(header_refseqs[0].get("LN").unwrap(), "10000000",);
30033003
}

src/bam/record.rs

+9-4
Original file line numberDiff line numberDiff line change
@@ -2097,10 +2097,15 @@ impl CigarStringView {
20972097
}
20982098
break;
20992099
},
2100-
Cigar::Del(_) => {
2101-
return Err(Error::BamUnexpectedCigarOperation {
2102-
msg: "'deletion' (D) found before any operation describing read sequence".to_owned()
2103-
});
2100+
Cigar::Del(l) => {
2101+
// METHOD: leading deletions can happen in case of trimmed reads where
2102+
// a primer has been removed AFTER read mapping.
2103+
// Example: 24M8I8D18M9S before trimming, 32H8D18M9S after trimming
2104+
// with fgbio. While leading deletions should be impossible with
2105+
// normal read mapping, they make perfect sense with primer trimming
2106+
// because the mapper still had the evidence to decide in favor of
2107+
// the deletion via the primer sequence.
2108+
rpos += l;
21042109
},
21052110
Cigar::RefSkip(_) => {
21062111
return Err(Error::BamUnexpectedCigarOperation {

0 commit comments

Comments
 (0)