// SPDX-FileCopyrightText: 2024 Filip Leonarski, Paul Scherrer Institute // SPDX-License-Identifier: GPL-3.0-only #ifndef JUNGFRAUJOCH_PIXELMASK_H #define JUNGFRAUJOCH_PIXELMASK_H #include "DetectorSetup.h" #include "DiffractionExperiment.h" #include "../jungfrau/JFCalibration.h" struct PixelMaskStatistics { uint32_t user_mask; uint32_t noisy_pixel; uint32_t error_pixel; uint32_t chip_gap_pixel; uint32_t total_masked; uint32_t module_gap_pixel; }; class PixelMask { std::vector mask; uint32_t LoadMask(const std::vector& mask, uint8_t bit); public: // NXmx bits constexpr static const uint8_t ModuleGapPixelBit = 0; constexpr static const uint8_t ErrorPixelBit = 1; constexpr static const uint8_t NoisyPixelBit = 4; constexpr static const uint8_t UserMaskedPixelBit = 8; constexpr static const uint8_t ChipGapPixelBit = 31; constexpr static const uint8_t ModuleEdgePixelBit = 30; PixelMask(); explicit PixelMask(size_t width, size_t height); explicit PixelMask(const DiffractionExperiment& experiment); explicit PixelMask(const std::vector &mask); void CalcEdgePixels(const DiffractionExperiment& experiment); void LoadUserMask(const DiffractionExperiment& experiment, const std::vector& mask); void LoadDECTRISBadPixelMask(const std::vector& mask); void LoadDarkBadPixelMask(const std::vector& mask); void LoadDetectorBadPixelMask(const DiffractionExperiment& experiment, const JFCalibration *calib); [[nodiscard]] std::vector GetMaskRaw(const DiffractionExperiment& experiment) const; [[nodiscard]] std::vector GetMask(const DiffractionExperiment& experiment) const; [[nodiscard]] std::vector GetUserMask(const DiffractionExperiment& experiment) const; [[nodiscard]] const std::vector &GetMask() const; [[nodiscard]] std::vector GetUserMask() const; [[nodiscard]] PixelMaskStatistics GetStatistics() const; }; #endif //JUNGFRAUJOCH_PIXELMASK_H