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