Thomas 3 年 前
コミット
166e913c58
1 ファイル変更7 行追加3 行削除
  1. 7 3
      src/lib.rs

+ 7 - 3
src/lib.rs

@@ -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());