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 <FairTask.h>
7#include <R3BEventHeader.h>
8#include <R3BException.h>
9#include <R3BLogger.h>
10#include <RtypesCore.h>
11#include <TH1.h>
12#include <fairlogger/Logger.h>
13#include <fmt/core.h>
14#include <fmt/format.h>
15#include <range/v3/algorithm/find_if.hpp>
16#include <range/v3/algorithm/for_each.hpp>
17#include <string_view>
18
19namespace R3B::Neuland
20{
21
22 CalibrationTask::CalibrationTask(std::string_view name, int iVerbose)
23 : FairTask(name.data(), iVerbose)
24 {
25 LOGP(info, "Calibration task {:?} is enable!", name);
26 }
27
29 : CalibrationTask("NeulandCalibrationReader", 1)
30 {
31 }
32
34 {
35 if (auto* rtdb = FairRuntimeDb::instance(); rtdb != nullptr)
36 {
37 SetExtraPar(rtdb);
38 }
39 else
40 {
41 throw R3B::runtime_error("Fail to get a non-nullptr FairRuntimeDb!");
42 }
43 }
44
45 auto CalibrationTask::Init() -> InitStatus
46 {
47 if (auto* rootMan = FairRootManager::Instance(); rootMan != nullptr)
48 {
49 if (eventHeader_ = dynamic_cast<R3BEventHeader*>(rootMan->GetObject("EventHeader."));
50 eventHeader_ == nullptr)
51 {
52 throw R3B::logic_error("R3BEventHeader is required. But it's nullptr!");
53 }
54
56 offspill_tpat_bit_ = base_par_->get_offspill_tpat_pos();
57
58 ExtraInit(rootMan);
59
60 if (not is_hist_disabled_)
61 {
63 }
64
65 LOGP(info,
66 "Neuland calibration task \"{}\" has event trigger type: {}",
67 GetName(),
69 return kSUCCESS;
70 }
71 return kFATAL;
72 }
73
74 void CalibrationTask::Exec(Option_t* /*option*/)
75 {
77 LOGP(debug, "Event number: {}, tpat: {:016b}", eventHeader_->GetEventno(), eventHeader_->GetTpat());
79 }
80
82 {
83 hist_condition_check_->Fill("total", 1);
85 {
86 hist_trig_check_->Fill(fmt::format("{:016b}", eventHeader_->GetTpat()).c_str(), 1);
87 return;
88 }
89 hist_condition_check_->Fill("triggered", 1);
90 hist_trig_check_->Fill(fmt::format("*{:016b}", eventHeader_->GetTpat()).c_str(), 1);
92 {
93 hist_condition_check_->Fill("failure", 1);
94 return;
95 }
96 hist_condition_check_->Fill("success", 1);
99 }
100
101 void CalibrationTask::ConditionFillToHist(TH1L* hist_condition, std::string_view condition)
102 {
103 if (condition == "failure" or condition == "success" or condition == "triggered" or condition == "total")
104 {
105 LOGP(warn, R"("failure", "success", "triggered" and "total" are reserved conditions!)");
106 }
107 hist_condition->Fill(condition.data(), 1);
108 }
109
110 void CalibrationTask::ConditionFillToHist(std::string_view condition)
111 {
112
114 }
115
124
126 {
127 EndOfTask();
128 LOGP(info,
129 R"(Passed events with the trigger type "{}" in task "{}": {})",
131 GetName(),
134 {
135 histograms_.save_to_sink(GetName());
136 }
137 else
138 {
139 LOGP(info,
140
141 "Figures not saved due to current configuration: hist_disabled = {}, write_hist_disabled = {}",
144 }
145 ranges::for_each(output_pars_, [](FairParSet* par) -> void { par->setChanged(); });
146 reset();
147 }
148
150 {
151 LOGP(debug2,
152 R"(From task "{}": tpat {}. Trig type {})",
153 GetName(),
154 eventHeader_->GetTpat(),
157 }
158
160 {
161 hist_trig_check_ = histograms_.add_hist<TH1I>("trig_check", "check the triggered or passed events", 1, 0., 0.);
162 hist_trig_check_->GetYaxis()->SetTitle("Entries");
163 hist_trig_check_->GetXaxis()->SetTitle("TPAT");
164 hist_condition_check_ = histograms_.add_hist<TH1L>("condition_check", "check the condition", 1, 0., 0.);
165 hist_condition_check_->GetYaxis()->SetTitle("Entries");
166 hist_condition_check_->GetXaxis()->SetTitle("Condition");
168 }
169
171 {
172 auto par_not_changed = ranges::find_if(input_pars_, [](auto* par) -> bool { return !par->hasChanged(); });
173 if (par_not_changed != input_pars_.end())
174 {
175 auto par_name = std::string_view{ (*par_not_changed)->GetName() };
176 throw R3B::runtime_error(
177 fmt::format(R"(Calibration parameter "{}" is not initiated from the root file!)", par_name));
178 }
179 }
181 {
183 histograms_.reset_all_hists();
184 }
185} // namespace R3B::Neuland
virtual void SetExtraPar(FairRuntimeDb *rtdb)
virtual void ExtraInit(FairRootManager *rootMan)
virtual void HistogramInit(DataMonitor &histograms)
auto Init() -> InitStatus override
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)
std::vector< FairParSet * > output_pars_
std::vector< FairParSet * > input_pars_
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 >