From b1b0ea4ea3b5a1516059efbdf5070286be86667e Mon Sep 17 00:00:00 2001 From: Shogo Ohta Date: Wed, 15 May 2024 18:17:03 +0900 Subject: [PATCH] Reset position of CRAM reader channel for each region read --- src/cljam/io/cram/core.clj | 25 ++++++++++++++----------- src/cljam/io/cram/reader.clj | 3 ++- 2 files changed, 16 insertions(+), 12 deletions(-) diff --git a/src/cljam/io/cram/core.clj b/src/cljam/io/cram/core.clj index a5f61ada..beb739e1 100644 --- a/src/cljam/io/cram/core.clj +++ b/src/cljam/io/cram/core.clj @@ -1,6 +1,6 @@ (ns cljam.io.cram.core (:require [cljam.io.crai :as crai] - [cljam.io.cram.reader :as reader.core] + [cljam.io.cram.reader :as reader] [cljam.io.cram.seq-resolver :as resolver] [cljam.io.sam.util.refs :as util.refs] [cljam.io.util.byte-buffer :as bb] @@ -25,14 +25,16 @@ seq-resolver (some-> reference resolver/seq-resolver) header (volatile! nil) refs (delay (vec (util.refs/make-refs @header))) + offset (volatile! nil) idx (delay (try (crai/read-index (str f ".crai") @refs) (catch FileNotFoundException _ nil))) - rdr (reader.core/->CRAMReader url ch bb header refs idx seq-resolver)] - (reader.core/read-file-definition rdr) - (vreset! header (reader.core/read-header rdr)) + rdr (reader/->CRAMReader url ch bb header refs offset idx seq-resolver)] + (reader/read-file-definition rdr) + (vreset! header (reader/read-header rdr)) + (vreset! offset (.position ch)) rdr)) (defn clone-reader @@ -44,11 +46,12 @@ (into-array OpenOption [StandardOpenOption/READ])) bb (bb/allocate-lsb-byte-buffer 256) seq-resolver (some-> (.-seq-resolver rdr) resolver/clone-seq-resolver) - rdr' (reader.core/->CRAMReader url ch bb - (delay @(.-header rdr)) - (delay @(.-refs rdr)) - (delay @(.-index rdr)) - seq-resolver)] - (reader.core/read-file-definition rdr') - (reader.core/skip-container rdr') + rdr' (reader/->CRAMReader url ch bb + (delay @(.-header rdr)) + (delay @(.-refs rdr)) + (delay @(.-offset rdr)) + (delay @(.-index rdr)) + seq-resolver)] + (reader/read-file-definition rdr') + (reader/skip-container rdr') rdr')) diff --git a/src/cljam/io/cram/reader.clj b/src/cljam/io/cram/reader.clj index 6ddb0686..6a5734d9 100644 --- a/src/cljam/io/cram/reader.clj +++ b/src/cljam/io/cram/reader.clj @@ -11,7 +11,7 @@ (declare read-alignments read-alignments-in-region) -(deftype CRAMReader [url channel buffer header refs index seq-resolver] +(deftype CRAMReader [url channel buffer header refs offset index seq-resolver] Closeable (close [_] (when seq-resolver @@ -194,6 +194,7 @@ (if (identical? alns ::skipped) (recur) (concat alns (lazy-seq (step)))))))] + (.position ch (long @(.-offset rdr))) (filter-overlapping-records chr start end (step))))) (defn- read-alignments-in-region