CbmRoot
Loading...
Searching...
No Matches
QaData.h
Go to the documentation of this file.
1/* Copyright (C) 2024-2025 GSI Helmholtzzentrum fuer Schwerionenforschung, Darmstadt
2 SPDX-License-Identifier: GPL-3.0-only
3 Authors: Sergei Zharko [committer] */
4
9
10#pragma once
11
17
18#include <memory>
19#include <string_view>
20#include <type_traits>
21#include <vector>
22
23namespace cbm::algo::qa
24{
27 class Data {
28 public:
30 Data() = default;
31
34 Data(std::string_view name) { RegisterNewTask(name); }
35
37 Data(const Data&) = default;
38
40 Data(Data&&) = default;
41
43 Data& operator=(const Data&) = default;
44
46 Data& operator=(Data&&) = default;
47
49 ~Data() = default;
50
53 void AddCanvasConfig(const CanvasConfig& canvas) { fvsCanvCfgs.push_back(canvas.ToString()); }
54
56 const HistogramContainer& Histograms() const { return fHistograms; }
57
60 void Init(std::shared_ptr<HistogramSender> histoSender);
61
66 template<class Obj, typename... Args>
67 Obj* MakeObj(Args... args);
68
70 void Reset() { fHistograms.Reset(); }
71
75 void Send(std::shared_ptr<HistogramSender> histoSender);
76
79 void SetTimesliceId(uint64_t timesliceId) { fHistograms.fTimesliceId = timesliceId; }
80
83 void SetTimesliceTimeInRun(uint64_t timesliceTime) { fHistograms.fTimesliceTimeInRun = timesliceTime; }
84
87 void RegisterNewTask(std::string_view name);
88
89 private:
91 std::string fsTaskNames;
92 std::vector<qa::TaskProperties> fvTaskProperties;
93 std::vector<std::string> fvsCanvCfgs = {};
94
95 uint32_t fNofH1{0};
96 uint32_t fNofH2{0};
97 uint32_t fNofP1{0};
98 uint32_t fNofP2{0};
99 bool fbNotEmpty{true};
100 };
101
102 // -------------------------------------------------------------------------------------------------------------------
103 //
104 template<class Obj, typename... Args>
105 Obj* Data::MakeObj(Args... args)
106 {
107 if constexpr (std::is_same_v<Obj, cbm::algo::qa::H1D>) {
108 Obj* res = &(fHistograms.fvH1.emplace_front(args...));
109 ++fNofH1;
110 fvTaskProperties.back().fRangeH1.first = fHistograms.fvH1.begin();
111 return res;
112 }
113 else if constexpr (std::is_same_v<Obj, cbm::algo::qa::H2D>) {
114 Obj* res = &(fHistograms.fvH2.emplace_front(args...));
115 ++fNofH2;
116 fvTaskProperties.back().fRangeH2.first = fHistograms.fvH2.begin();
117 return res;
118 }
119 else if constexpr (std::is_same_v<Obj, cbm::algo::qa::Prof1D>) {
120 Obj* res = &(fHistograms.fvP1.emplace_front(args...));
121 ++fNofP1;
122 fvTaskProperties.back().fRangeP1.first = fHistograms.fvP1.begin();
123 return res;
124 }
125 else if constexpr (std::is_same_v<Obj, cbm::algo::qa::Prof2D>) {
126 Obj* res = &(fHistograms.fvP2.emplace_front(args...));
127 ++fNofP2;
128 fvTaskProperties.back().fRangeP2.first = fHistograms.fvP2.begin();
129 return res;
130 }
131 return nullptr;
132 }
133} // namespace cbm::algo
A class representing a canvas in the message for the Histogram server.
A histogram container for the histogram server (header)
QA-task properties structure.
A canvas configuration for the histogram server.
std::string ToString() const
Returns message config.
void AddCanvasConfig(const CanvasConfig &canvas)
Adds a canvas to the canvas config list.
Definition QaData.h:53
bool fbNotEmpty
false: if no histograms were provided, do not perform initialization and sending
Definition QaData.h:99
void RegisterNewTask(std::string_view name)
Registers a new QA task.
Definition QaData.cxx:118
void SetTimesliceTimeInRun(uint64_t timesliceTime)
Updates the timeslice start time relative to run start time.
Definition QaData.h:83
Data(const Data &)=default
Copy constructor.
~Data()=default
Destructor.
std::string fsTaskNames
A string containing names of tasks.
Definition QaData.h:91
Data & operator=(Data &&)=default
Move assignment operator.
const HistogramContainer & Histograms() const
Constant accessor to the histogram container.
Definition QaData.h:56
void Send(std::shared_ptr< HistogramSender > histoSender)
Sends QA data to the HistogramSender.
Definition QaData.cxx:133
uint32_t fNofH1
Number of 1D-histograms.
Definition QaData.h:95
void Init(std::shared_ptr< HistogramSender > histoSender)
Sends QA initialization information to the HistogramSender.
Definition QaData.cxx:19
void SetTimesliceId(uint64_t timesliceId)
Updates the timeslice index.
Definition QaData.h:79
uint32_t fNofP1
Number of 1D-profiles.
Definition QaData.h:97
void Reset()
Resets the histograms.
Definition QaData.h:70
uint32_t fNofP2
Number of 2D-profiles.
Definition QaData.h:98
Data & operator=(const Data &)=default
Copy assignment operator.
Data(Data &&)=default
Move constructor.
Obj * MakeObj(Args... args)
Creates a QA-object and returns the pointer to it.
Definition QaData.h:105
qa::HistogramContainer fHistograms
A container of histograms, which forms a zmq message.
Definition QaData.h:90
std::vector< std::string > fvsCanvCfgs
Vector of canvas configs.
Definition QaData.h:93
uint32_t fNofH2
Number of 2D-histograms.
Definition QaData.h:96
Data(std::string_view name)
Constructor.
Definition QaData.h:34
Data()=default
Default constructor.
std::vector< qa::TaskProperties > fvTaskProperties
A vector to store properties for multiple QA-tasks.
Definition QaData.h:92
Structure to keep the histograms for sending them on the histogram server.