4#include <FairParRootFileIo.h>
5#include <FairRootManager.h>
7#include <FairRuntimeDb.h>
12 template <
typename EngineType,
typename... Args>
13 void FillEngine(EngineType& engine,
R3B::FTType type,
unsigned int ftValue, Args&&... args)
15 engine.Fill(type, ftValue, std::forward<Args>(args)...);
24 cal_strategy_.Set_cycle_period(1000. / coarse_time_frequency_);
37 trigMappedData_.init();
40 R3BLOG(info,
"TrigIDMap is automatically determined!");
44 R3BLOG(info,
"TrigIDMap is read from the base par file!");
50 calibrationPar_->SetTrigEnabled(is_trig_enabled_);
62 RecordTrigMappingID();
73 void Map2CalParTask::RecordTrigMappingID()
75 for (
const auto& planeSignals : mappedData_)
77 auto planeNum = planeSignals.plane_num;
78 for (
const auto& [barID, barSignals] : planeSignals.bars)
81 for (
const auto& [trigID, trigSignal] : trigMappedData_)
83 trigIDMappingFinder_.add_id_pair(
84 std::make_pair(moduleID, trigID),
Side::left, barSignals.left.size());
85 trigIDMappingFinder_.add_id_pair(
86 std::make_pair(moduleID, trigID),
Side::right, barSignals.right.size());
92 void Map2CalParTask::FillMapData()
94 for (
const auto& planeSignals : mappedData_)
96 auto planeID = planeSignals.plane_num;
97 for (
const auto& [barNum, barSignals] : planeSignals.bars)
99 auto barNum_tmp = barNum;
101 fmt::format(
"Calibrating with the map-level bar signal: {}, barNum: {}", barSignals, barNum));
102 auto FillData = [&](
FTType type,
auto value)
103 { FillEngine(mapCalEngine_, type, value, planeID, barNum_tmp); };
104 for (
const auto& signal : barSignals.left)
109 for (
const auto& signal : barSignals.right)
118 void Map2CalParTask::FillTrigMapData()
120 for (
const auto& [moduleNum, moduleSignals] : trigMappedData_)
123 fmt::format(
"Calibrating with the map-level bar trig signal: {}, module num: {}",
124 moduleSignals.signal,
126 FillEngine(trigMapCalEngine_,
FTType::trigger, moduleSignals.signal.fine, moduleNum);
130 void Map2CalParTask::write_parameter()
132 R3BLOG(debug,
"Starting to write calibration parameter...");
133 mapCalEngine_.Writer_to_TCalPar(cal_strategy_, *calibrationPar_);
136 GetBasePar()->SetTrigIDMap(trigIDMappingFinder_.extract_trigIDMap());
138 calibrationPar_->SetSlowClockFrequency(coarse_time_frequency_);
140 trigMapCalEngine_.Writer_to_TCalPar(cal_strategy_, *calibrationTrigPar_);
141 R3BLOG(debug,
"Calibration parameter written complete.");
144 void Map2CalParTask::WriteHists()
146 auto old_dir = gDirectory;
147 auto* runDb = FairRuntimeDb::instance();
148 if (
auto* parRootFileIo =
dynamic_cast<FairParRootFileIo*
>(runDb->getOutput()); parRootFileIo !=
nullptr)
150 auto* parRootFile = parRootFileIo->getParRootFile();
151 if (!parRootFile->IsOpen() || !parRootFile->IsWritable())
153 throw R3B::runtime_error(
"parRootFile is either closed or unable to be written!");
156 auto* new_dir = gDirectory->mkdir(
"CalParHistograms",
"",
true);
157 if (new_dir ==
nullptr)
159 throw R3B::runtime_error(
"Cannot create a directory for the histrogams!");
161 mapCalEngine_.WriteHist2File(new_dir);
162 if (is_trig_enabled_)
164 trigMapCalEngine_.WriteHist2File(new_dir);
170 throw R3B::runtime_error(
"unable to obtain the FairParRootFileIo object!");
#define R3BLOG(severity, x)
auto GetBasePar() -> auto *
void TriggeredExec() override
void ExtraInit(FairRootManager *rootMan) override
void EndOfTask() override
Simulation of NeuLAND Bar/Paddle.
constexpr auto Neuland_PlaneBar2ModuleNum(unsigned int planeNum, unsigned int barNum) -> unsigned int