|
|
@@ -382,10 +382,14 @@ impl Sam {
|
|
|
let mut sequence = sequence;
|
|
|
let (mut ref_range, query_range, ref_cigar) = matched_range(&cigar, &flag, &mut sequence);
|
|
|
|
|
|
-
|
|
|
+ // sam is 1-based
|
|
|
+ // the range frames the sequence
|
|
|
+
|
|
|
+ // the last position is excluded in rust ranges
|
|
|
+ // [ref_range.start, ref_range.end[
|
|
|
+ // in bam the positions are inclusives [start, end]
|
|
|
if is_reverse(flag) {
|
|
|
let len = ref_range.len();
|
|
|
- // +1 because the range exclude the last [ref_range.start, ref_range.end[
|
|
|
ref_range.end = (ref_pos as usize) + 1;
|
|
|
ref_range.start = ref_pos as usize + len ;
|
|
|
} else {
|
|
|
@@ -673,7 +677,7 @@ fn matched_range (cigar: &str, flag: &i32, matched_seq: &mut str) -> (Range<usiz
|
|
|
if is_reverse(*flag) {
|
|
|
let query_len = range_query.len();
|
|
|
range_query.start = query_pos - range_query.end;
|
|
|
- range_query.end = range_query.start + query_len;
|
|
|
+ range_query.end = range_query.start + query_len - 1;
|
|
|
}
|
|
|
|
|
|
assert_eq!(range_ref.len(), ref_cigar_string.len());
|