R3BROOT
R3B analysis software
Loading...
Searching...
No Matches
R3BNeulandCalibrationTask.h
Go to the documentation of this file.
1#pragma once
2/******************************************************************************
3 * Copyright (C) 2019 GSI Helmholtzzentrum für Schwerionenforschung GmbH *
4 * Copyright (C) 2019-2023 Members of R3B Collaboration *
5 * *
6 * This software is distributed under the terms of the *
7 * GNU General Public Licence (GPL) version 3, *
8 * copied verbatim in the file "LICENSE". *
9 * *
10 * In applying this license GSI does not waive the privileges and immunities *
11 * granted to it by virtue of its status as an Intergovernmental Organization *
12 * or submit itself to any jurisdiction. *
13 ******************************************************************************/
14
15#include "R3BDataMonitor.h"
16#include "R3BException.h"
17#include "R3BNeulandBasePar.h"
19#include <FairRun.h>
20#include <FairRuntimeDb.h>
21#include <FairTask.h>
22#include <R3BEventHeader.h>
23#include <RtypesCore.h>
24#include <TH1.h>
25#include <cstdint>
26#include <fairlogger/Logger.h>
27#include <string_view>
28#include <vector>
29
30class FairParSet;
31
32namespace R3B::Neuland
33{
34 class CalibrationTask : public FairTask
35 {
36 public:
38 explicit CalibrationTask(std::string_view name, int iVerbose = 1);
39
40 // Getters:
41 [[nodiscard]] auto GetEventHeader() const -> auto* { return eventHeader_; }
42 [[nodiscard]] auto GetHistMonitor() -> DataMonitor& { return histograms_; }
43 [[nodiscard]] auto IsHistDisabled() const -> bool { return is_hist_disabled_; }
44 [[nodiscard]] auto GetTrigger() const -> CalTrigger { return trig_type_; }
45
47 void SetDisableHist(bool is_hist_disabled = true) { is_hist_disabled_ = is_hist_disabled; }
48 void SetDisableHistWrite(bool is_write_hist_disabled = true)
49 {
50 is_write_hist_disabled_ = is_write_hist_disabled;
51 }
52
53 static void ConditionFillToHist(TH1L* hist_condition, std::string_view condition);
54 void ConditionFillToHist(std::string_view condition);
55 [[nodiscard]] auto GetBasePar() const -> auto* { return base_par_; }
56 // void SetOnline()
57
58 template <typename ParType>
59 auto AddInputPar(std::string_view par_name, FairRuntimeDb* rtdb = FairRuntimeDb::instance()) -> ParType*
60 {
61 LOGP(debug, "Adding parameter {} into the inputs.", par_name);
62 return add_par<ParType>(par_name, input_pars_, rtdb);
63 }
64
65 template <typename ParType>
66 auto AddOutputPar(std::string_view par_name, FairRuntimeDb* rtdb = FairRuntimeDb::instance()) -> ParType*
67 {
68 return add_par<ParType>(par_name, output_pars_, rtdb);
69 }
70
71 private:
72 bool is_hist_disabled_ = false;
74 int32_t offspill_tpat_bit_ = 0;
78 std::vector<FairParSet*> input_pars_;
79 std::vector<FairParSet*> output_pars_;
80
82 TH1I* hist_trig_check_ = nullptr;
83 TH1L* hist_condition_check_ = nullptr;
84
85 // helpers:
87
88 // virtual functions:
89 virtual void HistogramInit(DataMonitor& histograms) {}
90 virtual void ExtraInit(FairRootManager* rootMan) {}
91 virtual void SetExtraPar(FairRuntimeDb* rtdb) {}
92 virtual void BeginOfEvent() {};
93 virtual void TriggeredExec() = 0;
94 virtual void EndOfTask() {};
95 [[nodiscard]] virtual auto CheckConditions([[maybe_unused]] TH1L* hist_condition) const -> bool { return true; }
96
97 // overriden functions:
98 auto Init() -> InitStatus override;
99 void SetParContainers() override;
100 void Exec(Option_t* option) override;
101 void FinishTask() override;
102
103 // private functions:
104 void init_histogram();
105 void check_input_par();
106 void execute_no_hist();
107 void execute_with_hist();
108 void reset();
109
110 [[nodiscard]] auto check_offspill_trigger() const -> bool;
111 template <typename ParType>
112 [[nodiscard]] auto add_par(std::string_view par_name, std::vector<FairParSet*>& pars, FairRuntimeDb* rtdb)
113 -> ParType*;
114 };
115
116 template <typename ParType>
117 auto CalibrationTask::add_par(std::string_view par_name, std::vector<FairParSet*>& pars, FairRuntimeDb* rtdb)
118 -> ParType*
119 {
120 auto* par = dynamic_cast<ParType*>(rtdb->findContainer(par_name.data()));
121 if (par == nullptr)
122 {
123 par = std::make_unique<ParType>(par_name.data()).release();
124 if (rtdb->addContainer(par); par == nullptr)
125 {
126 throw R3B::runtime_error("Calibration parameter becomes nullptr!");
127 }
128 }
129 pars.push_back(par);
130 return par;
131 }
132
133}; // namespace R3B::Neuland
virtual void SetExtraPar(FairRuntimeDb *rtdb)
virtual void ExtraInit(FairRootManager *rootMan)
auto AddOutputPar(std::string_view par_name, FairRuntimeDb *rtdb=FairRuntimeDb::instance()) -> ParType *
auto GetTrigger() const -> CalTrigger
virtual void HistogramInit(DataMonitor &histograms)
auto Init() -> InitStatus override
auto add_par(std::string_view par_name, std::vector< FairParSet * > &pars, FairRuntimeDb *rtdb) -> ParType *
void SetDisableHist(bool is_hist_disabled=true)
virtual auto CheckConditions(TH1L *hist_condition) const -> bool
virtual void TriggeredExec()=0
void Exec(Option_t *option) override
static void ConditionFillToHist(TH1L *hist_condition, std::string_view condition)
void SetDisableHistWrite(bool is_write_hist_disabled=true)
std::vector< FairParSet * > output_pars_
auto AddInputPar(std::string_view par_name, FairRuntimeDb *rtdb=FairRuntimeDb::instance()) -> ParType *
std::vector< FairParSet * > input_pars_
Simulation of NeuLAND Bar/Paddle.