// SPDX-FileCopyrightText: 2024 Filip Leonarski, Paul Scherrer Institute // SPDX-License-Identifier: GPL-3.0-only #ifndef JUNGFRAUJOCH_MXANALYZER_H #define JUNGFRAUJOCH_MXANALYZER_H #include "../common/DiffractionExperiment.h" #include "bragg_integration/BraggPrediction.h" #include "indexing/IndexerThreadPool.h" #include "spot_finding/StrongPixelSet.h" #include "IndexAndRefine.h" class MXAnalysisAfterFPGA { mutable std::mutex read_from_cpu_mutex; const DiffractionExperiment &experiment; IndexAndRefine &indexer; std::unique_ptr prediction; bool find_spots = false; std::vector spots; constexpr static const float spot_distance_threshold_pxl = 2.0f; std::vector arr_mean; std::vector arr_sttdev; std::vector arr_valid_count; std::vector arr_strong_pixel; public: MXAnalysisAfterFPGA(const DiffractionExperiment& experiment, IndexAndRefine &indexer); void ReadFromFPGA(const DeviceOutput* output, const SpotFindingSettings& settings, size_t module_number); void ReadFromCPU(DeviceOutput *output, const SpotFindingSettings &settings, size_t module_number); void Process(DataMessage &message, const SpotFindingSettings& settings); }; #endif //JUNGFRAUJOCH_MXANALYZER_H