Skip to content
Snippets Groups Projects

online reco: Only initialize steps if they are enabled

Merged Felix Weiglhofer requested to merge fweig/cbmroot:cbmreco-step-init into master
Files
3
+ 43
23
@@ -17,7 +17,10 @@
#include "much/Unpack.h"
#include "rich/Unpack.h"
#include "sts/ChannelMaskSet.h"
#include "sts/HitfinderChain.h"
#include "sts/Unpack.h"
#include "tof/CalibratorChain.h"
#include "tof/HitfinderChain.h"
#include "tof/Unpack.h"
#include "trd/Unpack.h"
#include "trd2d/Unpack.h"
@@ -72,9 +75,6 @@ void Reco::Init(const Options& opts)
fContext.opts = opts;
SetContext(&fContext);
fStsHitFinder.SetContext(&fContext);
fTofCalibrator.SetContext(&fContext);
fTofHitFinder.SetContext(&fContext);
if (Opts().HistogramUri() != "") {
fSender = std::make_shared<HistogramSender>(Opts().HistogramUri());
@@ -139,26 +139,42 @@ void Reco::Init(const Options& opts)
}
// --- Event building
fs::path configFile = opts.ParamsDir() / "EventbuildConfig.yaml";
evbuild::Config config(YAML::LoadFile(configFile.string()));
fEventBuild = std::make_unique<evbuild::EventbuildChain>(config, fSender);
if (Opts().Has(Step::DigiTrigger)) {
fs::path configFile = opts.ParamsDir() / "EventbuildConfig.yaml";
evbuild::Config config(YAML::LoadFile(configFile.string()));
fEventBuild = std::make_unique<evbuild::EventbuildChain>(config, fSender);
}
// STS Hitfinder
sts::HitfinderPars hitFinderSetup = yaml::ReadFromFile<sts::HitfinderPars>(opts.ParamsDir() / "StsHitfinder.yaml");
hitFinderSetup.landauTable = sts::LandauTable::FromFile(opts.ParamsDir() / "LandauWidthTable.txt");
sts::HitfinderChainPars hitFinderPars;
hitFinderPars.setup = std::move(hitFinderSetup);
hitFinderPars.memory = Params().sts.memory;
fStsHitFinder.SetParameters(hitFinderPars);
if (Opts().Has(fles::Subsystem::STS) && Opts().Has(Step::LocalReco)) {
sts::HitfinderPars hitFinderSetup = yaml::ReadFromFile<sts::HitfinderPars>(opts.ParamsDir() / "StsHitfinder.yaml");
hitFinderSetup.landauTable = sts::LandauTable::FromFile(opts.ParamsDir() / "LandauWidthTable.txt");
sts::HitfinderChainPars hitFinderPars;
hitFinderPars.setup = std::move(hitFinderSetup);
hitFinderPars.memory = Params().sts.memory;
fStsHitFinder = std::make_unique<sts::HitfinderChain>();
fStsHitFinder->SetContext(&fContext);
fStsHitFinder->SetParameters(hitFinderPars);
}
// TOF Hitfinder
fTofHitFinder.Init();
fTofCalibrator.Init();
if (Opts().Has(fles::Subsystem::TOF) && Opts().Has(Step::LocalReco)) {
fTofCalibrator = std::make_unique<tof::CalibratorChain>();
fTofCalibrator->SetContext(&fContext);
fTofCalibrator->Init();
fTofHitFinder = std::make_unique<tof::HitfinderChain>();
fTofHitFinder->SetContext(&fContext);
fTofHitFinder->Init();
}
// Tracking
fTracking = std::make_unique<TrackingChain>(fSender);
fTracking->SetContext(&fContext);
fTracking->Init();
if (Opts().Has(Step::Tracking)) {
fTracking = std::make_unique<TrackingChain>(fSender);
fTracking->SetContext(&fContext);
fTracking->Init();
}
fInitialized = true;
@@ -229,9 +245,9 @@ RecoResults Reco::Run(const fles::Timeslice& ts)
sts::HitfinderMonitor stsHitfinderMonitor;
PartitionedSpan<sts::Hit> stsHits;
PartitionedVector<sts::Cluster> stsClusters;
if (Opts().Has(Step::LocalReco) && Opts().Has(fles::Subsystem::STS)) {
if (fStsHitFinder) {
bool storeClusters = Opts().HasOutput(RecoData::Cluster);
auto stsResults = fStsHitFinder(digis.fSts, storeClusters);
auto stsResults = (*fStsHitFinder)(digis.fSts, storeClusters);
stsHits = stsResults.hits;
stsClusters = std::move(stsResults.clusters);
stsHitfinderMonitor = stsResults.monitor;
@@ -240,8 +256,8 @@ RecoResults Reco::Run(const fles::Timeslice& ts)
PartitionedVector<tof::Hit> tofHits;
if (Opts().Has(Step::LocalReco) && Opts().Has(fles::Subsystem::TOF)) {
auto [caldigis, calmonitor] = fTofCalibrator.Run(digis.fTof);
auto [hits, hitmonitor, digiindices] = fTofHitFinder.Run(caldigis);
auto [caldigis, calmonitor] = fTofCalibrator->Run(digis.fTof);
auto [hits, hitmonitor, digiindices] = fTofHitFinder->Run(caldigis);
tofHits = std::move(hits);
QueueTofCalibMetrics(calmonitor);
QueueTofRecoMetrics(hitmonitor);
@@ -282,8 +298,12 @@ RecoResults Reco::Run(const fles::Timeslice& ts)
void Reco::Finalize()
{
fStsHitFinder.Finalize();
fTracking->Finalize();
if (fStsHitFinder) {
fStsHitFinder->Finalize();
}
if (fTracking) {
fTracking->Finalize();
}
// Pop timer that was started in Init()
xpu::timings t = xpu::pop_timer();
Loading