// 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 "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 { const 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; 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); const DataMessage &ImageData() const; DataMessage &MutableImageData(); 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; void CalcROI(const ROIElement *input); const std::optional &GetROI() const; void AddImage(const JFJochReaderImage& other); }; #endif //JFJOCH_JFJOCHREADERIMAGE_H