R3BROOT
R3B analysis software
Loading...
Searching...
No Matches
R3BNeulandSimCalToCal.cxx
Go to the documentation of this file.
2
3#include <FairMCEventHeader.h>
4#include <R3BEventHeader.h>
5#include <R3BNeulandBasePar.h>
6
7namespace R3B::Neuland
8{
9 namespace
10 {
11 void convert_event_header(FairMCEventHeader* mc_header, R3BEventHeader* header)
12 {
13 if (mc_header == nullptr)
14 {
15 throw R3B::runtime_error("MCEventHeader is nullptr!");
16 }
17 if (header == nullptr)
18 {
19 throw R3B::runtime_error("EventHeader is nullptr!");
20 }
21 header->SetRunId(mc_header->GetRunID());
22 header->SetEventno(mc_header->GetEventID());
23 }
24 } // namespace
25
26 SimCal2Cal::SimCal2Cal(std::string_view sim_cal_data_name, std::string_view cal_data_name)
27 : sim_cal_data_{ sim_cal_data_name }
28 , cal_data_{ cal_data_name }
29 {
30 init_base_par();
31 }
32 auto SimCal2Cal::Init() -> InitStatus
33 {
34 sim_cal_data_.init();
35 cal_data_.init();
36 init_event_header();
37 return kSUCCESS;
38 }
39
40 void SimCal2Cal::init_event_header()
41 {
42 auto* root_manager = FairRootManager::Instance();
43 if (event_header_ = dynamic_cast<R3BEventHeader*>(root_manager->GetObject("EventHeader."));
44 event_header_ == nullptr)
45 {
46 throw R3B::logic_error("Event header was not set before the init!");
47 }
48 if (mc_event_header_ = dynamic_cast<FairMCEventHeader*>(root_manager->GetObject("MCEventHeader."));
49 mc_event_header_ == nullptr)
50 {
51 throw R3B::logic_error("Cannot find MCEventHeader from the input simulated data file.");
52 }
53 }
54
55 void SimCal2Cal::init_base_par()
56 {
57 auto* rtdb = FairRuntimeDb::instance();
58 base_par_ = std::make_unique<CalibrationBasePar>().release();
59 base_par_->set_num_of_planes(number_of_dp_ * 2);
60 if (rtdb->addContainer(base_par_); base_par_ == nullptr)
61 {
62 throw R3B::runtime_error("Calibration parameter becomes nullptr!");
63 }
64 }
65
66 void SimCal2Cal::Exec(Option_t* /*option*/)
67 {
68 const auto& sim_cal_data = sim_cal_data_.get();
69 auto& cal_data = cal_data_.get();
70 cal_data.clear();
71
72 convert_event_header(mc_event_header_, event_header_);
73 convert(sim_cal_data, cal_data);
74 }
75
76 void SimCal2Cal::FinishTask() { base_par_->setChanged(); }
77
79
80 void SimCal2Cal::convert(const std::vector<R3B::Neuland::SimCalData>& sim_cal_data,
81 std::vector<BarCalData>& cal_data)
82 {
83 bar_map_data_.clear();
84 for (const auto& sim_data : sim_cal_data)
85 {
86 auto module_id = sim_data.bar_module;
87 auto [iter, _] = bar_map_data_.try_emplace(module_id, static_cast<unsigned int>(module_id));
88
89 auto left_signal = CalDataSignal{};
90 left_signal.leading_time = ValueError<double>{ sim_data.let_l, 0 };
91 left_signal.time_over_threshold = ValueError<double>{ sim_data.tot_l, 0 };
92
93 auto right_signal = CalDataSignal{};
94 right_signal.leading_time = ValueError<double>{ sim_data.let_r, 0 };
95 right_signal.time_over_threshold = ValueError<double>{ sim_data.tot_r, 0 };
96
97 auto& obj = iter->second;
98 obj.left.push_back(left_signal);
99 obj.right.push_back(right_signal);
100 }
101 for (const auto& pair : bar_map_data_)
102 {
103 cal_data.push_back(pair.second);
104 }
105 }
106
107} // namespace R3B::Neuland
auto Init() -> InitStatus override
SimCal2Cal(std::string_view sim_cal_data_name="NeulandSimCal", std::string_view cal_data_name="NeulandCalData")
void Exec(Option_t *) override
void SetEventno(const uint64_t eventno)
Simulation of NeuLAND Bar/Paddle.
ValueError< double > leading_time