// 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::vector> valid_pixel; constexpr static float auto_foreground_range = 0.001f; int32_t auto_foreground; void CalcAutoContrast(); 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::vector> &ValidPixels() const; const JFJochReaderDataset &Dataset() const; void AddImage(const JFJochReaderImage& other); std::vector GetAzInt1D() const; std::vector GetAzInt1D_BinToQ() const; std::shared_ptr CreateMutableDataset(); int32_t GetAutoContrastValue() const; }; #endif //JFJOCH_JFJOCHREADERIMAGE_H