diff --git a/src/cljam/twobit.clj b/src/cljam/twobit.clj index 66ce88a0..1eda65b2 100644 --- a/src/cljam/twobit.clj +++ b/src/cljam/twobit.clj @@ -108,8 +108,8 @@ (.readFully ^RandomAccessFile (.reader rdr) ba) (dotimes [out-pos (inc (- end' start'))] (let [ref-pos (+ out-pos start') - ba-pos (quot (- ref-pos (max 1 start')) 4) - bit-pos (mod (- ref-pos (max 1 start')) 4)] + ba-pos (- (quot (dec ref-pos) 4) start-offset) + bit-pos (mod (dec ref-pos) 4)] (if (<= 1 ref-pos len) (.put cb (.charAt ^String (twobit-to-str (+ (aget ba ba-pos) 128)) bit-pos)) (.put cb \N)))) diff --git a/test/cljam/t_twobit.clj b/test/cljam/t_twobit.clj index bd512b7b..b42b1e13 100644 --- a/test/cljam/t_twobit.clj +++ b/test/cljam/t_twobit.clj @@ -8,6 +8,10 @@ (tb/read-sequence r {:chr "ref"}) => "AGCATGTTAGATAAGATAGCTGTGCTAGTAGGCAGTCAGCGCCAT" (tb/read-sequence r {:chr "ref2"}) => "AGGTTTTATAAAACAATTAAGTCTACAGAGCAACTACGCG" (tb/read-sequence r {:chr "ref2" :mask? true}) => "aggttttataaaacaattaagtctacagagcaactacgcg" + (for [i (range 1 45) j (range i 46)] + (tb/read-sequence r {:chr "ref" :start i :end j})) + => (for [i (range 1 45) j (range i 46)] + (subs "AGCATGTTAGATAAGATAGCTGTGCTAGTAGGCAGTCAGCGCCAT" (dec i) j)) (tb/read-sequence r {:chr "ref" :start 1 :end 4}) => "AGCA" (tb/read-sequence r {:chr "ref" :start 0 :end 4}) => "NAGCA" (tb/read-sequence r {:chr "ref" :start 41 :end 50}) => "GCCATNNNNN" @@ -22,6 +26,10 @@ (tb/read-sequence r {:chr "ref"}) => "NNNNNGTTAGATAAGATAGCNNTGCTAGTAGGCAGTCNNNNCCAT" (tb/read-sequence r {:chr "ref2"}) => "AGNNNTTATAAAACAATTANNNCTACAGAGCAACTANNNN" (tb/read-sequence r {:chr "ref2" :mask? true}) => "agNNNttataaaacaattaNNNctacagagcaactaNNNN" + (for [i (range 1 45) j (range i 46)] + (tb/read-sequence r {:chr "ref" :start i :end j})) + => (for [i (range 1 45) j (range i 46)] + (subs "NNNNNGTTAGATAAGATAGCNNTGCTAGTAGGCAGTCNNNNCCAT" (dec i) j)) (tb/read-sequence r {:chr "ref" :start 1 :end 4}) => "NNNN" (tb/read-sequence r {:chr "ref" :start 0 :end 4}) => "NNNNN" (tb/read-sequence r {:chr "ref" :start 41 :end 50}) => "NCCATNNNNN"