From 172082af59152be0aab0b73006a01ef0a8fcd5e4 Mon Sep 17 00:00:00 2001 From: "s.zharko@gsi.de" <s.zharko@gsi.de> Date: Tue, 11 Feb 2025 05:59:27 +0100 Subject: [PATCH] online: Adding BMON hit-finder to event reconstruction --- algo/global/Reco.cxx | 41 +++++++++++++++++++++++-------------- algo/global/RecoResults.h | 2 ++ algo/kfp/KfpV0FinderChain.h | 1 + 3 files changed, 29 insertions(+), 15 deletions(-) diff --git a/algo/global/Reco.cxx b/algo/global/Reco.cxx index e9d10bdd3..0f933400d 100644 --- a/algo/global/Reco.cxx +++ b/algo/global/Reco.cxx @@ -212,21 +212,6 @@ void Reco::Init(const Options& opts) fStsHitFinder->SetParameters(hitFinderPars); } - // BMON Hitfinder - if (Opts().Has(fles::Subsystem::BMON) && Opts().Has(Step::LocalReco)) { - auto calibSetup = yaml::ReadFromFile<bmon::CalibrateSetup>(opts.ParamsDir() / parFiles.bmon.calibrate); - fBmonCalibrator = std::make_unique<bmon::Calibrate>(calibSetup); - - auto hitfindSetup = yaml::ReadFromFile<bmon::HitfindSetup>(opts.ParamsDir() / parFiles.bmon.hitfinder); - fBmonHitFinder = std::make_unique<bmon::Hitfind>(hitfindSetup); - - if (fQaManager != nullptr && Opts().Has(QaStep::RecoBmon)) { - fBmonHitFinderQa = std::make_unique<bmon::HitfindQa>(fQaManager, "BmonHitfindEvent"); - fBmonHitFinderQa->InitParameters(calibSetup, hitfindSetup); - fBmonHitFinderQa->Init(); - } - } - // TOF Hitfinder if (Opts().Has(fles::Subsystem::TOF) && Opts().Has(Step::LocalReco)) { auto calibSetup = yaml::ReadFromFile<tof::CalibrateSetup>(opts.ParamsDir() / parFiles.tof.calibrate); @@ -249,6 +234,7 @@ void Reco::Init(const Options& opts) fbReconstructDigiEvents &= Opts().Has(fles::Subsystem::STS); fbReconstructDigiEvents &= Opts().Has(fles::Subsystem::TRD); fbReconstructDigiEvents &= Opts().Has(fles::Subsystem::TOF); + fbReconstructDigiEvents &= Opts().Has(fles::Subsystem::BMON); } // Tracking @@ -267,6 +253,18 @@ void Reco::Init(const Options& opts) if (fbReconstructDigiEvents) { fEvSelectingMonitor.Reset(); + // BMON hit finding in event reconstruction + auto bmonCalSetup = yaml::ReadFromFile<bmon::CalibrateSetup>(opts.ParamsDir() / parFiles.bmon.calibrate); + auto bmonHitSetup = yaml::ReadFromFile<bmon::HitfindSetup>(opts.ParamsDir() / parFiles.bmon.hitfinder); + fBmonCalibrator = std::make_unique<bmon::Calibrate>(bmonCalSetup); + fBmonHitFinder = std::make_unique<bmon::Hitfind>(bmonHitSetup); + if (fQaManager != nullptr && Opts().Has(QaStep::RecoBmon)) { + fBmonHitFinderQa = std::make_unique<bmon::HitfindQa>(fQaManager, "BmonHitfindEvent"); + fBmonHitFinderQa->InitParameters(bmonCalSetup, bmonHitSetup); + fBmonHitFinderQa->Init(); + } + + // Tracking in event reconstruction if (fQaManager != nullptr && Opts().Has(QaStep::Tracking)) { fTracking = std::make_unique<TrackingChain>(ECbmRecoMode::EventByEvent, fQaManager, "CaEvent"); } @@ -524,6 +522,19 @@ void Reco::PrintTimings(xpu::timings& timings) bool Reco::ReconstructEvent(const DigiEvent& digiEvent) { RecoResults recoEvent; + //* BMON hit reconstruction + { + auto [calDigis, calMonitor] = (*fBmonCalibrator)(recoEvent.fBmon); + auto [hits, hitMonitor, digiIndices] = (*fBmonHitFinder)(calDigis); + if (fBmonHitFinderQa != nullptr) { + fBmonHitFinderQa->RegisterDigis(&calDigis); + fBmonHitFinderQa->RegisterHits(&hits); + fBmonHitFinderQa->RegisterDigiIndices(&digiIndices); + fBmonHitFinderQa->Exec(); + } + recoEvent.bmonHits = std::move(hits); + } + //* STS hit reconstruction { fEvSelectingMonitor.StartTimer(evselect::ETimer::StsHitFinder); diff --git a/algo/global/RecoResults.h b/algo/global/RecoResults.h index 670927953..25a3f73a2 100644 --- a/algo/global/RecoResults.h +++ b/algo/global/RecoResults.h @@ -12,6 +12,7 @@ #include "DigiData.h" #include "PartitionedSpan.h" #include "PartitionedVector.h" +#include "bmon/Hit.h" #include "ca/core/data/CaTrack.h" #include "ca/core/utils/CaVector.h" #include "sts/Cluster.h" @@ -41,6 +42,7 @@ namespace cbm::algo PartitionedSpan<sts::Hit> stsHits; PartitionedVector<tof::Hit> tofHits; PartitionedVector<trd::Hit> trdHits; + PartitionedVector<bmon::Hit> bmonHits; ca::Vector<ca::Track> tracks; ca::Vector<std::vector<std::pair<uint32_t, uint32_t>>> trackStsHitIndices; diff --git a/algo/kfp/KfpV0FinderChain.h b/algo/kfp/KfpV0FinderChain.h index 2be7ddf5d..c328750aa 100644 --- a/algo/kfp/KfpV0FinderChain.h +++ b/algo/kfp/KfpV0FinderChain.h @@ -59,5 +59,6 @@ namespace cbm::algo private: kfp::V0Finder fFinder; ///< Instance of the V0-finding algorithm kfp::V0FinderMonitor fMonitorRun; ///< Monitor per run + uint32_t fBmonAddress; ///< Address of selected BMON }; } // namespace cbm::algo -- GitLab