// Copyright (2019-2023) Paul Scherrer Institute #ifndef JUNGFRAUJOCH_STRONGPIXELSET_H #define JUNGFRAUJOCH_STRONGPIXELSET_H #include #include #include #include "../common/DiffractionExperiment.h" #include "../common/Coord.h" #include "../common/DiffractionSpot.h" #include "../acquisition_device/AcquisitionDevice.h" #include "SpotFindingSettings.h" struct strong_pixel { uint16_t col; uint16_t line; int32_t counts; }; void FilterSpotsByResolution(const DiffractionExperiment& experiment, const std::vector &input, std::vector &output); void FilterSpotsByCount(const DiffractionExperiment& experiment, const std::vector &input, std::vector &output); class StrongPixelSet { std::vector pixels; std::vector L; static const constexpr size_t max_strong_pixel_per_module = 4000; static const constexpr uint32_t xpixel = RAW_MODULE_COLS; static const constexpr uint32_t ypixel = RAW_MODULE_LINES; uint32_t strong_pixel_count; uint16_t find_root(uint16_t e); uint16_t make_union(uint16_t e1, uint16_t e2); std::vector sparseccl(); public: void ReadFPGAOutput(const DiffractionExperiment& experiment, const DeviceOutput& output); StrongPixelSet(); void AddStrongPixel(uint16_t col, uint16_t line, int32_t photons = 1); void FindSpots(const DiffractionExperiment &experiment, const SpotFindingSettings &settings, std::vector &spots, uint16_t module_number); uint32_t GetStrongPixelCount() const; }; #endif //JUNGFRAUJOCH_STRONGPIXELSET_H