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 <fmt/core.h>
13#include <range/v3/algorithm/find_if.hpp>
14#include <range/v3/algorithm/for_each.hpp>
15#include <string_view>
16
17namespace R3B::Neuland
18{
19
20 CalibrationTask::CalibrationTask(std::string_view name, int iVerbose)
21 : FairTask(name.data(), iVerbose)
22 {
23 }
24
26 : CalibrationTask("NeulandCalibrationReader", 1)
27 {
28 }
29
31 {
32 if (auto* rtdb = FairRuntimeDb::instance(); rtdb != nullptr)
33 {
34 SetExtraPar(rtdb);
35 }
36 else
37 {
38 throw R3B::runtime_error("Fail to get a non-nullptr FairRuntimeDb!");
39 }
40 }
41
42 auto CalibrationTask::Init() -> InitStatus
43 {
44 if (auto* rootMan = FairRootManager::Instance(); rootMan != nullptr)
45 {
46 if (eventHeader_ = dynamic_cast<R3BEventHeader*>(rootMan->GetObject("EventHeader."));
47 eventHeader_ == nullptr)
48 {
49 throw R3B::logic_error("R3BEventHeader is required. But it's nullptr!");
50 }
51
53 offspill_tpat_bit_ = base_par_->get_offspill_tpat_pos();
54
55 ExtraInit(rootMan);
56
57 if (not is_hist_disabled_)
58 {
60 }
61
62 R3BLOG(info,
63 fmt::format("Neuland calibration task \"{}\" has event trigger type: {}",
64 GetName(),
66 return kSUCCESS;
67 }
68 return kFATAL;
69 }
70
71 void CalibrationTask::Exec(Option_t* /*option*/)
72 {
74 R3BLOG(debug,
75 fmt::format("Event number: {}, tpat: {:016b}", eventHeader_->GetEventno(), eventHeader_->GetTpat()));
77 }
78
80 {
81 if (!check_trigger())
82 {
83 hist_trig_check_->Fill(fmt::format("{:016b}", eventHeader_->GetTpat()).c_str(), 1);
84 return;
85 }
86 hist_trig_check_->Fill("triggered", 1);
87 if (!CheckConditions())
88 {
89 hist_condition_check_->Fill("failure", 1);
90 return;
91 }
92 hist_condition_check_->Fill("success", 1);
95 }
96
98 {
100 {
103 }
104 }
105
107 {
108 EndOfTask();
109 R3BLOG(info,
110 fmt::format(R"(Passed events with the trigger type "{}" in task "{}": {})",
112 GetName(),
115 {
116 histograms_.save_to_sink(GetName());
117 }
118 else
119 {
120 R3BLOG(info,
121 fmt::format(
122 "Figures not saved due to current configuration: hist_disabled = {}, write_hist_disabled = {}",
125 }
126 ranges::for_each(output_pars_, [](FairParSet* par) { par->setChanged(); });
127 reset();
128 }
129
131 {
132 R3BLOG(debug2,
133 fmt::format(R"(From task "{}": tpat {}. Trig type {})",
134 GetName(),
135 eventHeader_->GetTpat(),
138 }
139
141 {
142 hist_trig_check_ = histograms_.add_hist<TH1I>("trig_check", "check the triggered or passed events", 1, 0., 0.);
143 hist_condition_check_ = histograms_.add_hist<TH1I>("condition_check", "check the condition", 1, 0., 0.);
145 }
146
148 {
149 auto par_not_changed = ranges::find_if(input_pars_, [](auto* par) { return !par->hasChanged(); });
150 if (par_not_changed != input_pars_.end())
151 {
152 throw R3B::runtime_error(fmt::format(R"(Calibration parameter "{}" is not initiated from the root file!)",
153 (*par_not_changed)->GetName()));
154 }
155 }
157 {
159 histograms_.reset_all_hists();
160 }
161} // namespace R3B::Neuland
#define R3BLOG(severity, x)
Definition R3BLogger.h:32
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
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 >