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 [[nodiscard]] auto GetBasePar() const -> auto* { return base_par_; }
54 // void SetOnline()
55
56 template <typename ParType>
57 auto AddInputPar(std::string_view par_name, FairRuntimeDb* rtdb = FairRuntimeDb::instance()) -> ParType*
58 {
59 LOGP(debug, "Adding parameter {} into the inputs.", par_name);
60 return add_par<ParType>(par_name, input_pars_, rtdb);
61 }
62
63 template <typename ParType>
64 auto AddOutputPar(std::string_view par_name, FairRuntimeDb* rtdb = FairRuntimeDb::instance()) -> ParType*
65 {
66 return add_par<ParType>(par_name, output_pars_, rtdb);
67 }
68
69 private:
70 bool is_hist_disabled_ = false;
72 int32_t offspill_tpat_bit_ = 0;
76 std::vector<FairParSet*> input_pars_;
77 std::vector<FairParSet*> output_pars_;
78
80 TH1I* hist_trig_check_ = nullptr;
81 TH1I* hist_condition_check_ = nullptr;
82
83 // helpers:
85
86 // virtual functions:
87 virtual void HistogramInit(DataMonitor& histograms) {}
88 virtual void ExtraInit(FairRootManager* rootMan) {}
89 virtual void SetExtraPar(FairRuntimeDb* rtdb) {}
90 virtual void BeginOfEvent() {};
91 virtual void TriggeredExec() = 0;
92 virtual void EndOfTask() {};
93 [[nodiscard]] virtual auto CheckConditions() const -> bool { return true; }
94
95 // overriden functions:
96 auto Init() -> InitStatus override;
97 void SetParContainers() override;
98 void Exec(Option_t* option) override;
99 void FinishTask() override;
100
101 // private functions:
102 void init_histogram();
103 void check_input_par();
104 void execute_no_hist();
105 void execute_with_hist();
106 void reset();
107
108 [[nodiscard]] auto check_trigger() const -> bool;
109 template <typename ParType>
110 [[nodiscard]] auto add_par(std::string_view par_name,
111 std::vector<FairParSet*>& pars,
112 FairRuntimeDb* rtdb) -> ParType*;
113 };
114
115 template <typename ParType>
116 auto CalibrationTask::add_par(std::string_view par_name,
117 std::vector<FairParSet*>& pars,
118 FairRuntimeDb* rtdb) -> 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)
virtual auto CheckConditions() const -> bool
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 void TriggeredExec()=0
void Exec(Option_t *option) override
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.