diff --git a/file_io/include/aare/file_io/File.hpp b/file_io/include/aare/file_io/File.hpp index ee00714..b51c5c7 100644 --- a/file_io/include/aare/file_io/File.hpp +++ b/file_io/include/aare/file_io/File.hpp @@ -26,6 +26,7 @@ class File { void write(Frame &frame); Frame read(); Frame iread(size_t frame_number); + std::vector iread(size_t frame_number, size_t n_frames); std::vector read(size_t n_frames); void read_into(std::byte *image_buf); void read_into(std::byte *image_buf, size_t n_frames); diff --git a/file_io/include/aare/file_io/FileInterface.hpp b/file_io/include/aare/file_io/FileInterface.hpp index 123fa72..631eeaf 100644 --- a/file_io/include/aare/file_io/FileInterface.hpp +++ b/file_io/include/aare/file_io/FileInterface.hpp @@ -134,28 +134,14 @@ class FileInterface { * @param frame_number frame number to read * @return frame */ - Frame iread(size_t frame_number) { - auto old_pos = tell(); - seek(frame_number); - Frame tmp = read(); - seek(old_pos); - return tmp; - }; - + virtual Frame iread(size_t frame_number)=0; /** * @brief read n_frames from the file starting at the given frame number * @param frame_number frame number to start reading from * @param n_frames number of frames to read * @return vector of frames */ - std::vector iread(size_t frame_number, size_t n_frames) { - auto old_pos = tell(); - seek(frame_number); - std::vector tmp = read(n_frames); - seek(old_pos); - return tmp; - } - + virtual std::vector iread(size_t frame_number, size_t n_frames)=0; // function to query the data type of the file /*virtual DataType dtype = 0; */ diff --git a/file_io/include/aare/file_io/NumpyFile.hpp b/file_io/include/aare/file_io/NumpyFile.hpp index 5a72179..969a597 100644 --- a/file_io/include/aare/file_io/NumpyFile.hpp +++ b/file_io/include/aare/file_io/NumpyFile.hpp @@ -72,6 +72,21 @@ class NumpyFile : public FileInterface { } return arr; } + Frame iread(size_t frame_number) { + auto old_pos = tell(); + seek(frame_number); + Frame tmp = read(); + seek(old_pos); + return tmp; + }; + + std::vector iread(size_t frame_number, size_t n_frames) { + auto old_pos = tell(); + seek(frame_number); + std::vector tmp = read(n_frames); + seek(old_pos); + return tmp; + } ~NumpyFile() noexcept override; diff --git a/file_io/include/aare/file_io/RawFile.hpp b/file_io/include/aare/file_io/RawFile.hpp index 4cfe77d..31a3c12 100644 --- a/file_io/include/aare/file_io/RawFile.hpp +++ b/file_io/include/aare/file_io/RawFile.hpp @@ -26,8 +26,8 @@ class RawFile : public FileInterface { */ void write([[maybe_unused]] Frame &frame) override { throw std::runtime_error("Not implemented"); }; Frame read() override { - return get_frame(frame_number(this->current_frame++)); - }; + std::cout << "Reading frame " << this->current_frame << std::endl; + return get_frame(frame_number(this->current_frame++)); }; std::vector read(size_t n_frames) override; void read_into(std::byte *image_buf) override { return get_frame_into(frame_number(this->current_frame++), image_buf); @@ -48,10 +48,13 @@ class RawFile : public FileInterface { size_t pixels_per_frame() override { return m_rows * m_cols; } // goto frame number - void seek(size_t frame_number) override { this->current_frame = frame_number; }; + void seek(size_t frame_number) override { this->current_frame = frame_number + m_starting_frame; + std::cout<<"Seeking to frame "<current_frame<current_frame; }; + size_t tell() override { return this->current_frame - m_starting_frame; }; /** * @brief check if the file is a master file @@ -98,6 +101,21 @@ class RawFile : public FileInterface { size_t rows() const override { return m_rows; } size_t cols() const override { return m_cols; } size_t bitdepth() const override { return m_bitdepth; } + Frame iread(size_t frame_number) override { + auto old_pos = tell(); + seek(frame_number); + Frame tmp = read(); + seek(old_pos); + return tmp; + } + + std::vector iread(size_t frame_number, size_t n_frames) override { + auto old_pos = tell(); + seek(frame_number); + std::vector tmp = read(n_frames); + seek(old_pos); + return tmp; + } private: /** diff --git a/file_io/include/aare/file_io/SubFile.hpp b/file_io/include/aare/file_io/SubFile.hpp index f82af39..b286a8a 100644 --- a/file_io/include/aare/file_io/SubFile.hpp +++ b/file_io/include/aare/file_io/SubFile.hpp @@ -45,7 +45,8 @@ class SubFile { * @param bitdepth bitdepth of the subfile * @throws std::invalid_argument if the detector,type pair is not supported */ - SubFile(const std::filesystem::path &fname, DetectorType detector, size_t rows, size_t cols, size_t bitdepth,int subfile_id); + SubFile(const std::filesystem::path &fname, DetectorType detector, size_t rows, size_t cols, size_t bitdepth, + int subfile_id); /** * @brief read the subfile into a buffer diff --git a/file_io/src/File.cpp b/file_io/src/File.cpp index 8848be8..ca3b811 100644 --- a/file_io/src/File.cpp +++ b/file_io/src/File.cpp @@ -45,6 +45,9 @@ size_t File::bitdepth() const { return file_impl->bitdepth(); } File::~File() { delete file_impl; } Frame File::iread(size_t frame_number) { return file_impl->iread(frame_number); } +std::vector File::iread(size_t frame_number, size_t n_frames) { + return file_impl->iread(frame_number, n_frames); +} File::File(File &&other) noexcept : file_impl(other.file_impl) { other.file_impl = nullptr; } diff --git a/file_io/src/RawFile.cpp b/file_io/src/RawFile.cpp index 543c9b7..5f85cab 100644 --- a/file_io/src/RawFile.cpp +++ b/file_io/src/RawFile.cpp @@ -24,7 +24,9 @@ RawFile::RawFile(const std::filesystem::path &fname, const std::string &mode, co } else { throw std::runtime_error(LOCATION + "Unsupported mode"); } + aare::logger::error("axxxsdasda", m_starting_frame); m_starting_frame = this->frame_number(0); + aare::logger::error("asdasda", m_starting_frame); } void RawFile::open_subfiles() {