CbmRoot
Loading...
Searching...
No Matches
QaData.h
Go to the documentation of this file.
1/* Copyright (C) 2024 GSI Helmholtzzentrum fuer Schwerionenforschung, Darmstadt
2 SPDX-License-Identifier: GPL-3.0-only
3 Authors: Sergei Zharko [committer] */
4
9
10#pragma once
11
14#include "qa/CanvasConfig.h"
16#include "qa/TaskProperties.h"
17
18#include <boost/serialization/forward_list.hpp>
19
20#include <memory>
21#include <string_view>
22#include <type_traits>
23#include <vector>
24
25namespace cbm::algo::qa
26{
29 class Data {
30 public:
32 Data() = default;
33
36 Data(std::string_view name) { RegisterNewTask(name); }
37
39 Data(const Data&) = default;
40
42 Data(Data&&) = default;
43
45 Data& operator=(const Data&) = default;
46
48 Data& operator=(Data&&) = default;
49
51 ~Data() = default;
52
55 void AddCanvasConfig(const CanvasConfig& canvas) { fvsCanvCfgs.push_back(canvas.ToString()); }
56
59 void Init(std::shared_ptr<HistogramSender> histoSender);
60
65 template<class Obj, typename... Args>
66 Obj* MakeObj(Args... args);
67
69 void Reset() { fHistograms.Reset(); }
70
74 void Send(std::shared_ptr<HistogramSender> histoSender);
75
78 void SetTimesliceId(uint64_t timesliceId) { fHistograms.fTimesliceId = timesliceId; }
79
82 void RegisterNewTask(std::string_view name);
83
84 private:
86 std::string fsTaskNames;
87 std::vector<qa::TaskProperties> fvTaskProperties;
88 std::vector<std::string> fvsCanvCfgs = {};
89
90 uint32_t fNofH1{0};
91 uint32_t fNofH2{0};
92 uint32_t fNofP1{0};
93 uint32_t fNofP2{0};
94 bool fbNotEmpty{true};
95 };
96
97 // -------------------------------------------------------------------------------------------------------------------
98 //
99 template<class Obj, typename... Args>
100 Obj* Data::MakeObj(Args... args)
101 {
102 if constexpr (std::is_same_v<Obj, cbm::algo::qa::H1D>) {
103 Obj* res = &(fHistograms.fvH1.emplace_front(args...));
104 ++fNofH1;
105 fvTaskProperties.back().fRangeH1.first = fHistograms.fvH1.begin();
106 return res;
107 }
108 else if constexpr (std::is_same_v<Obj, cbm::algo::qa::H2D>) {
109 Obj* res = &(fHistograms.fvH2.emplace_front(args...));
110 ++fNofH2;
111 fvTaskProperties.back().fRangeH2.first = fHistograms.fvH2.begin();
112 return res;
113 }
114 else if constexpr (std::is_same_v<Obj, cbm::algo::qa::Prof1D>) {
115 Obj* res = &(fHistograms.fvP1.emplace_front(args...));
116 ++fNofP1;
117 fvTaskProperties.back().fRangeP1.first = fHistograms.fvP1.begin();
118 return res;
119 }
120 else if constexpr (std::is_same_v<Obj, cbm::algo::qa::Prof2D>) {
121 Obj* res = &(fHistograms.fvP2.emplace_front(args...));
122 ++fNofP2;
123 fvTaskProperties.back().fRangeP2.first = fHistograms.fvP2.begin();
124 return res;
125 }
126 return nullptr;
127 }
128} // 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.
Class to handle QA-objects in the online reconstruction.
Definition QaData.h:29
void AddCanvasConfig(const CanvasConfig &canvas)
Adds a canvas to the canvas config list.
Definition QaData.h:55
bool fbNotEmpty
false: if no histograms were provided, do not perform initialization and sending
Definition QaData.h:94
void RegisterNewTask(std::string_view name)
Registers a new QA task.
Definition QaData.cxx:96
Data(const Data &)=default
Copy constructor.
~Data()=default
Destructor.
std::string fsTaskNames
A string containing names of tasks.
Definition QaData.h:86
Data & operator=(Data &&)=default
Move assignment operator.
void Send(std::shared_ptr< HistogramSender > histoSender)
Sends QA data to the HistogramSender.
Definition QaData.cxx:111
uint32_t fNofH1
Number of 1D-histograms.
Definition QaData.h:90
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:78
uint32_t fNofP1
Number of 1D-profiles.
Definition QaData.h:92
void Reset()
Resets the histograms.
Definition QaData.h:69
uint32_t fNofP2
Number of 2D-profiles.
Definition QaData.h:93
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:100
qa::HistogramContainer fHistograms
A container of histograms, which forms a zmq message.
Definition QaData.h:85
std::vector< std::string > fvsCanvCfgs
Vector of canvas configs.
Definition QaData.h:88
uint32_t fNofH2
Number of 2D-histograms.
Definition QaData.h:91
Data(std::string_view name)
Constructor.
Definition QaData.h:36
Data()=default
Default constructor.
std::vector< qa::TaskProperties > fvTaskProperties
A vector to store properties for multiple QA-tasks.
Definition QaData.h:87
Structure to keep the histograms for sending them on the histogram server.
void Reset()
Resets the histograms.
std::forward_list< qa::Prof1D > fvP1
List of 1D-profiles.
std::forward_list< qa::Prof2D > fvP2
List of 2D-profiles.
std::forward_list< qa::H1D > fvH1
List of 1D-histograms.
uint64_t fTimesliceId
Index of the timeslice.
std::forward_list< qa::H2D > fvH2
List of 2D-histograms.