// 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(); 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; }; class StatusMultiVector { std::mutex m; std::map> status; public: void Clear(); void AddElement(const std::string& s, uint32_t id, float val); void AddElement(const std::string& s, uint32_t id, std::optional val); [[nodiscard]] MultiLinePlotStruct GetMeanPerBin(const std::string& in_key, int64_t bin_size, float x_start, float x_incr, const std::optional &fill_value = {}) const; [[nodiscard]] MultiLinePlot GetMeanPlot(int64_t bin_size, float x_start, float x_incr, const std::optional &fill_value = {}) const; [[nodiscard]] std::vector ExportArray(const std::string& s) const; }; #endif //JUNGFRAUJOCH_STATUSVECTOR_H