19void Data::Init(std::shared_ptr<HistogramSender> histSender)
21 size_t nHistograms = 0;
28 L_(warn) <<
"no histograms were provided to a qa::Data instance (running in an idle mode)";
35 std::stringstream msg;
36 msg <<
"a qa::Data instance was not initialized properly: no task was registered. The list of the histograms:\n";
37 auto ShowName = [&](
const auto&
h) { msg <<
" - " <<
h.GetName() <<
'\n'; };
42 msg <<
"Please, insure that you either instantiate the qa::Data with the Data(std::string_view name) constructor";
43 msg <<
", or provide a task name explicitly with the function Data::RegisterNewTask(std::string_view name)";
44 throw std::runtime_error(msg.str());
48 std::vector<std::pair<std::string, std::string>> vHistCfgs;
50 vHistCfgs.reserve(nHistograms);
53 auto RegHist = [&](
const auto&
h) {
54 if (!
h.GetMetadata().CheckFlags()) {
55 std::stringstream msg;
56 msg <<
"attempt to pass a histogram " <<
h.GetName()
57 <<
" with inconsistent flags (see HistogramMetadata::CheckFlags for detailes)";
58 throw std::runtime_error(msg.str());
60 L_(info) <<
" - task: " << task.fsName <<
", histogram: " <<
h.GetName();
61 vHistCfgs.emplace_back(
h.GetName() +
"!" +
h.GetMetadataString(), task.fsName);
64 std::for_each(task.fRangeH1.first, task.fRangeH1.second, RegHist);
65 std::for_each(task.fRangeH2.first, task.fRangeH2.second, RegHist);
66 std::for_each(task.fRangeP1.first, task.fRangeP1.second, RegHist);
67 std::for_each(task.fRangeP2.first, task.fRangeP2.second, RegHist);
71 std::vector<std::pair<std::string, std::string>> vCanvCfgs;
74 vCanvCfgs.emplace_back(std::make_pair(canv.substr(0, canv.find_first_of(
';')), canv));
77 histSender->PrepareAndSendMsg(std::pair<uint32_t, uint32_t>(vHistCfgs.size(), vCanvCfgs.size()),
78 zmq::send_flags::sndmore);
80 auto RegCfg = [&](
const auto& cfg) { histSender->PrepareAndSendMsg(cfg, zmq::send_flags::sndmore); };
82 std::for_each(vHistCfgs.begin(), vHistCfgs.end(), RegCfg);
83 std::for_each(vCanvCfgs.begin(), vCanvCfgs.end(), RegCfg);
89catch (
const std::exception& err) {
90 L_(fatal) <<
"cbm::algo::qa::Data for " << fsTaskNames <<
" fatally aborted. Reason " << err.what();
103 .fRangeH1 = std::make_pair(itH1, itH1),
104 .fRangeH2 = std::make_pair(itH2, itH2),
105 .fRangeP1 = std::make_pair(itP1, itP1),
106 .fRangeP2 = std::make_pair(itP2, itP2)});