// SPDX-FileCopyrightText: 2025 Filip Leonarski, Paul Scherrer Institute // SPDX-License-Identifier: GPL-3.0-only #ifndef JFJOCHIMAGEREADER_H #define JFJOCHIMAGEREADER_H #include #include #include #include "../common/JFJochMessages.h" #include "../common/Plot.h" #include "../common/ROIBox.h" #include "JFJochReaderDataset.h" #include "JFJochReaderImage.h" class JFJochReader { private: std::unique_ptr roi; mutable std::mutex current_image_mutex; std::shared_ptr current_image; mutable std::mutex start_message_mutex; std::shared_ptr start_message; // Following functions assume that current_image is protected via mutex void CalcROI(); virtual std::shared_ptr LoadImageInternal(int64_t image_number) = 0; protected: void SetStartMessage(const std::shared_ptr &val); public: virtual ~JFJochReader() = default; std::shared_ptr GetStartMessage() const; [[nodiscard]] virtual uint64_t GetNumberOfImages() const = 0; virtual void Close() = 0; void LoadImage(int64_t image_number, int64_t summation_factor = 1); std::shared_ptr CopyImage(); // Analysis functions void SetROI(const ROIBox& input); void SetROI(const ROICircle& input); void ClearROI(); }; #endif //JFJOCHIMAGEREADER_H