63 LOG(info) <<
"Setup experimental run...";
68 LOG(error) <<
"Could not load geometry '" << setupTag <<
"' from the Geometry Database";
76 auto magneticFieldVoltage = currentRun->GetFieldVoltage();
77 if (!magneticFieldVoltage) {
78 LOG(error) <<
"No field voltage was found for run " <<
fRunPeriod <<
":" << runNumber;
84 if (*magneticFieldVoltage < 10) {
85 magneticFieldScale = 0;
87 magneticFieldScale = (*magneticFieldVoltage) / mapCurrent;
90 auto magneticField =
new BmnNewFieldMap(
"FieldMap_1900_extrap_noPed.root");
91 magneticField->SetScale(magneticFieldScale);
92 magneticField->Init();
93 fRunAna->SetField(magneticField);
96 if (currentRun->GetTargetParticle() !=
"")
97 target = currentRun->GetTargetParticle();
99 auto beam = currentRun->GetBeamParticle();
101 LOG(info) <<
"Complete!";
103 LOG(info) <<
"Experimental run summary:";
105 LOG(info) <<
"\tNumber: " << runNumber;
106 LOG(info) <<
"\tBeam: " << beam;
107 LOG(info) <<
"\tTarget: " << target;
108 LOG(info) <<
"\tMagnetic field scale: " << setprecision(4) << magneticFieldScale;
109 LOG(info) <<
"\tGeometry setup: " << setupTag;
118 auto branches = inputTree->GetListOfBranches();
119 for (
Long64_t branchIndex = 0; branchIndex < branches->GetEntriesFast(); branchIndex++) {
120 auto branch =
static_cast<TBranchElement*
>(branches->At(branchIndex));
121 if (strcmp(branch->GetClassName(),
"TClonesArray") == 0) {
122 fRegisteredBranches[branch->GetName()] = std::make_unique<TClonesArray>(branch->GetClonesName());
127 FairRootManager::Instance()->RegisterInputObject(branch.first.c_str(), branch.second.get());
146 LOG(info) <<
"Initializing reconstruction tasks...";
158 auto triggerInfo = std::make_unique<BmnFillTrigInfoDst>(
kTRUE);
159 fTasks.push_back(std::move(triggerInfo));
162 auto sibtHM = std::make_unique<BmnSiBTHitMaker>(
fRunPeriod, runNumber,
kTRUE);
163 sibtHM->SetHitMatching(
kFALSE);
164 fTasks.push_back(std::move(sibtHM));
167 auto siliconHM = std::make_unique<BmnSiliconHitMaker>(
fRunPeriod, runNumber,
kTRUE);
168 siliconHM->SetHitMatching(
kFALSE);
169 fTasks.push_back(std::move(siliconHM));
172 auto gemHM = std::make_unique<BmnGemStripHitMaker>(
fRunPeriod, runNumber,
kTRUE);
173 gemHM->SetHitMatching(
kFALSE);
174 fTasks.push_back(std::move(gemHM));
177 auto cscHM = std::make_unique<BmnCSCHitMaker>(
fRunPeriod, runNumber,
kTRUE);
178 cscHM->SetHitMatching(
kFALSE);
179 fTasks.push_back(std::move(cscHM));
182 auto tof1HP = std::make_unique<BmnTof1HitProducer>(
"TOF400",
kTOF1,
kFALSE, 0,
kFALSE);
184 fTasks.push_back(std::move(tof1HP));
187 auto tof700HP = std::make_unique<BmnTof1HitProducer>(
"TOF700",
kTOF701,
kFALSE, 0,
kFALSE);
188 tof700HP->SetPeriodRun(
fRunPeriod, runNumber);
189 fTasks.push_back(std::move(tof700HP));
211 auto fhcalReco = std::make_unique<BmnFHCalReconstructor>(
kTRUE,
kTRUE);
212 fhcalReco->SetRecoCutsFile(
"FHCAL_reco_cuts_period8.txt");
213 fTasks.push_back(std::move(fhcalReco));
231 auto innerTrackBranchName =
"StsVector";
232 auto hitConverter = std::make_unique<BmnToCbmHitConverter>(0,
kTRUE);
233 hitConverter->EnableAlignment(
kFALSE);
234 hitConverter->SetFixedErrors(0.08 /
sqrt(12) * 1.2, 0.1234, 0.01 /
sqrt(12), 0.1234);
235 fTasks.push_back(std::move(hitConverter));
237 auto kalmanFilter = std::make_unique<CbmKF>();
238 fTasks.push_back(std::move(kalmanFilter));
240 auto l1Tracking = std::make_unique<CbmL1>();
241 l1Tracking->SetMaterialBudgetFileName(
"");
242 fTasks.push_back(std::move(l1Tracking));
244 auto vectorFinder = std::make_unique<BmnStsVectorFinder>();
245 vectorFinder->SetMatBudgetFileName(
"$VMCWORKDIR/parameters/sts_matbudget_run8.root");
275 auto glTF = std::make_unique<BmnGlobalTracking>();
276 glTF->SetInnerTracksBranchName(innerTrackBranchName);
277 fTasks.push_back(std::move(glTF));
279 for (
auto&& task :
fTasks) {
284 LOG(info) <<
"Complete!";
289 std::unique_ptr<TTree> inputTree(
nullptr);
290 RootSerializer().Deserialize(*inputMessage, inputTree);
293 Int_t runNumber = -1;
304 auto resultTree = std::make_unique<TTree>();
305 for (
auto&& task :
fTasks) {
307 task->OnlineWrite(resultTree);
310 auto message = NewMessage();
311 RootSerializer().Serialize(*message, resultTree);
314 LOG(error) <<
"Sending message failed!";