// SPDX-FileCopyrightText: 2024 Filip Leonarski, Paul Scherrer Institute // SPDX-License-Identifier: GPL-3.0-only #ifndef JUNGFRAUJOCH_STATUSVECTOR_H #define JUNGFRAUJOCH_STATUSVECTOR_H #include #include #include #include #include #include #include "JFJochException.h" #include "MultiLinePlot.h" class StatusVector { mutable std::mutex m; std::vector content; float mean = NAN; size_t count = 0; double sum = 0; public: void Clear(size_t reserve = 0); void AddElement(uint32_t id, std::optional val); void AddElement(uint32_t id, float val); std::optional GetElement(uint32_t id) const; size_t GetImageNumber() const; bool empty() const; int32_t GetActualBinning(int32_t bin_size) const; [[nodiscard]] std::vector ExportArray() const; [[nodiscard]] float Mean() const; MultiLinePlotStruct GetMeanPerBin(int32_t bin_size, float x_start, float x_incr, const std::optional &fill_value = {}) const; [[nodiscard]] MultiLinePlotStruct GetMaxPerBin(int32_t bin_size, float x_start, float x_incr, const std::optional &fill_value = {}) const; MultiLinePlot GetMeanPlot(int64_t bin_size, float x_start, float x_incr, const std::optional &fill_value = {}) const; MultiLinePlot GetMaxPlot(int64_t bin_size, float x_start, float x_incr, const std::optional &fill_value = {}) const; }; #endif //JUNGFRAUJOCH_STATUSVECTOR_H