R3BROOT
R3B analysis software
Loading...
Searching...
No Matches
R3BNeulandCalibrationTask.cxx
Go to the documentation of this file.
3#include <FairParSet.h>
4#include <FairRootManager.h>
5#include <FairRuntimeDb.h>
6#include <R3BEventHeader.h>
7#include <R3BException.h>
8#include <R3BLogger.h>
9#include <R3BNeulandCommon.h>
10#include <range/v3/all.hpp>
11
12namespace R3B::Neuland
13{
14
15 CalibrationTask::CalibrationTask(std::string_view name, int iVerbose)
16 : FairTask(name.data(), iVerbose)
17 {
18 }
19
21 : CalibrationTask("NeulandCalibrationReader", 1)
22 {
23 }
24
26 {
27 if (auto* rtdb = FairRuntimeDb::instance(); rtdb != nullptr)
28 {
29 SetExtraPar(rtdb);
30 }
31 else
32 {
33 throw R3B::runtime_error("Fail to get a non-nullptr FairRuntimeDb!");
34 }
35 }
36
37 auto CalibrationTask::Init() -> InitStatus
38 {
39 if (auto* rootMan = FairRootManager::Instance(); rootMan != nullptr)
40 {
41 if (eventHeader_ = dynamic_cast<R3BEventHeader*>(rootMan->GetObject("EventHeader."));
42 eventHeader_ == nullptr)
43 {
44 throw R3B::logic_error("R3BEventHeader is required. But it's nullptr!");
45 }
46
47 check_input_par();
48 offspill_tpat_bit_ = base_par_->GetOffSpillTpatPos();
49
50 ExtraInit(rootMan);
51
52 if (not is_hist_disabled_)
53 {
54 init_histogram();
55 }
56
57 R3BLOG(info,
58 fmt::format("Neuland calibration task \"{}\" has event trigger type: {}",
59 GetName(),
60 CalTrigger2Str(trig_type_)));
61 return kSUCCESS;
62 }
63 return kFATAL;
64 }
65
66 void CalibrationTask::Exec(Option_t* /*option*/)
67 {
69 R3BLOG(debug,
70 fmt::format("Event number: {}, tpat: {:016b}", eventHeader_->GetEventno(), eventHeader_->GetTpat()));
71 (is_hist_disabled_) ? execute_no_hist() : execute_with_hist();
72 }
73
74 void CalibrationTask::execute_with_hist()
75 {
76 if (!check_trigger())
77 {
78 hist_trig_check_->Fill(fmt::format("{:016b}", eventHeader_->GetTpat()).c_str(), 1);
79 return;
80 }
81 hist_trig_check_->Fill("triggered", 1);
82 if (!CheckConditions())
83 {
84 hist_condition_check_->Fill("failure", 1);
85 return;
86 }
87 hist_condition_check_->Fill("success", 1);
88 passed_num_of_events++;
90 }
91
92 void CalibrationTask::execute_no_hist()
93 {
94 if (check_trigger() and CheckConditions())
95 {
96 passed_num_of_events++;
98 }
99 }
100
102 {
103 EndOfTask();
104 R3BLOG(info,
105 fmt::format(R"(Passed events with the trigger type "{}" in task "{}": {})",
106 CalTrigger2Str(trig_type_),
107 GetName(),
108 passed_num_of_events));
109 if (not is_hist_disabled_ and not is_write_hist_disabled_)
110 {
111 histograms_.save_to_sink(GetName());
112 }
113 else
114 {
115 R3BLOG(info,
116 fmt::format(
117 "Figures not saved due to current configuration: hist_disabled = {}, write_hist_disabled = {}",
118 is_hist_disabled_,
119 is_write_hist_disabled_));
120 }
121 ranges::for_each(output_pars_, [](FairParSet* par) { par->setChanged(); });
122 reset();
123 }
124
125 auto CalibrationTask::check_trigger() const -> bool
126 {
127 R3BLOG(debug2,
128 fmt::format(R"(From task "{}": tpat {}. Trig type {})",
129 GetName(),
130 eventHeader_->GetTpat(),
131 CalTrigger2Tpat(trig_type_, offspill_tpat_bit_).to_string()));
132 return CheckTriggerWithTpat(trig_type_, eventHeader_->GetTpat(), offspill_tpat_bit_);
133 }
134
135 void CalibrationTask::init_histogram()
136 {
137 hist_trig_check_ = histograms_.add_hist<TH1I>("trig_check", "check the triggered or passed events", 1, 0., 0.);
138 hist_condition_check_ = histograms_.add_hist<TH1I>("condition_check", "check the condition", 1, 0., 0.);
139 HistogramInit(histograms_);
140 }
141
142 void CalibrationTask::check_input_par()
143 {
144 auto par_not_changed = ranges::find_if(input_pars_, [](auto* par) { return !par->hasChanged(); });
145 if (par_not_changed != input_pars_.end())
146 {
147 throw R3B::runtime_error(fmt::format(R"(Calibration parameter "{}" is not initiated from the root file!)",
148 (*par_not_changed)->GetName()));
149 }
150 }
151 void CalibrationTask::reset()
152 {
153 passed_num_of_events = 0;
154 histograms_.reset_all_hists();
155 }
156} // namespace R3B::Neuland
#define R3BLOG(severity, x)
Definition R3BLogger.h:35
auto add_hist(std::unique_ptr< TH1 > hist) -> TH1 *
virtual void SetExtraPar(FairRuntimeDb *rtdb)
virtual void ExtraInit(FairRootManager *rootMan)
virtual auto CheckConditions() const -> bool
virtual void HistogramInit(DataMonitor &histograms)
auto Init() -> InitStatus override
virtual void TriggeredExec()=0
void Exec(Option_t *option) override
int GetTpat() const
Simulation of NeuLAND Bar/Paddle.
auto CheckTriggerWithTpat(CalTrigger trigger, int tpat, int off_spill_bit) -> bool
auto CalTrigger2Str(CalTrigger cal_trigger) -> std::string
constexpr auto CalTrigger2Tpat(CalTrigger cal_trigger, int off_spill_bit) -> std::bitset< TPAT_BITSIZE >