// SPDX-FileCopyrightText: 2025 Filip Leonarski, Paul Scherrer Institute // SPDX-License-Identifier: GPL-3.0-only #ifndef JFJOCH_JFJOCHREADERIMAGE_H #define JFJOCH_JFJOCHREADERIMAGE_H #include #include #include #include #include "JFJochReaderDataset.h" #include "../common/CrystalLattice.h" constexpr static int32_t GAP_PXL_VALUE = INT32_MIN + 1; constexpr static int32_t ERROR_PXL_VALUE = INT32_MIN; constexpr static int32_t SATURATED_PXL_VALUE = INT32_MAX; class JFJochReaderImage { std::shared_ptr dataset; std::vector image; // Image in the reader must be 32-bit signed, uncompressed DataMessage message; std::unordered_set saturated_pixel; std::unordered_set error_pixel; std::map valid_pixel; std::optional roi; mutable std::mutex roi_mutex; template void ProcessInputImage(const void* image, size_t npixel, int64_t sat_value, int64_t special_value); void ProcessInputImage(const CompressedImage& image); public: JFJochReaderImage(const DataMessage &msg, const std::shared_ptr &dataset); JFJochReaderImage(const JFJochReaderImage &other); const DataMessage &ImageData() const; DataMessage &ImageData(); const std::vector &Image() const; const std::unordered_set &SaturatedPixels() const; const std::unordered_set &ErrorPixels() const; const std::map &ValidPixels() const; const JFJochReaderDataset &Dataset() const; const std::optional &GetROI() const; void AddImage(const JFJochReaderImage& other); std::vector GetAzInt1D() const; std::vector GetAzInt1D_BinToQ() const; // Functions that change the content void CalcROI(const ROIElement *input); std::shared_ptr CreateMutableDataset(); }; #endif //JFJOCH_JFJOCHREADERIMAGE_H