diff --git a/algo/base/Definitions.h b/algo/base/Definitions.h index e77cbea124c2dd87a8f423b207a06f84b566d8ac..dee31c8dcee4d8256f1c570e18dde9573676389c 100644 --- a/algo/base/Definitions.h +++ b/algo/base/Definitions.h @@ -54,6 +54,31 @@ namespace cbm::algo mCBM2024_05, }; + enum class QaStep + { + BeamBmon, + UnpackBmon, + UnpackSts, + UnpackMvd, + UnpackRich, + UnpackTrd1d, + UnpackTrd2d, + UnpackMuch, + UnpackTof, + UnpackFsd, + EventBuilding, + RecoBmon, + RecoSts, + RecoMvd, + RecoRich, + RecoTrd1d, + RecoTrd2d, + RecoMuch, + RecoTof, + RecoFsd, + Tracking, + }; + } // namespace cbm::algo CBM_ENUM_DICT(fles::Subsystem, @@ -100,4 +125,28 @@ CBM_ENUM_DICT(cbm::algo::Setup, {"mCBM2024_05", cbm::algo::Setup::mCBM2024_05} ); +CBM_ENUM_DICT(cbm::algo::QaStep, + {"BeamBmon", cbm::algo::QaStep::BeamBmon}, + {"UnpackBmon", cbm::algo::QaStep::UnpackBmon}, + {"UnpackSts", cbm::algo::QaStep::UnpackSts}, + {"UnpackMvd", cbm::algo::QaStep::UnpackMvd}, + {"UnpackRich", cbm::algo::QaStep::UnpackRich}, + {"UnpackTrd1d", cbm::algo::QaStep::UnpackTrd1d}, + {"UnpackTrd2d", cbm::algo::QaStep::UnpackTrd2d}, + {"UnpackMuch", cbm::algo::QaStep::UnpackMuch}, + {"UnpackTof", cbm::algo::QaStep::UnpackTof}, + {"UnpackFsd", cbm::algo::QaStep::UnpackFsd}, + {"EventBuilding", cbm::algo::QaStep::EventBuilding}, + {"RecoBmon", cbm::algo::QaStep::RecoBmon}, + {"RecoSts", cbm::algo::QaStep::RecoSts}, + {"RecoMvd", cbm::algo::QaStep::RecoMvd}, + {"RecoRich", cbm::algo::QaStep::RecoRich}, + {"RecoTrd1d", cbm::algo::QaStep::RecoTrd1d}, + {"RecoTrd2d", cbm::algo::QaStep::RecoTrd2d}, + {"RecoMuch", cbm::algo::QaStep::RecoMuch}, + {"RecoTof", cbm::algo::QaStep::RecoTof}, + {"RecoFsd", cbm::algo::QaStep::RecoFsd}, + {"Tracking", cbm::algo::QaStep::Tracking} +); + #endif diff --git a/algo/base/Options.cxx b/algo/base/Options.cxx index d289178361a80f60abb168d37adb49588a67cd64..662b21080bd8e240f3334216f3dc3319f7b00248 100644 --- a/algo/base/Options.cxx +++ b/algo/base/Options.cxx @@ -77,15 +77,17 @@ Options::Options(int argc, char** argv) " 0 = no buffering, num = nb updates kept in buffer if not pulled by server \n" " Tune to avoid too high memory usage but also adapt to server load!") ("aux-data", po::value(&fCollectAuxData)->implicit_value(true), "Enables collecting of auxiliary data from algorithms") + ("qa", po::value(&fQaSteps)->multitoken()->default_value({QaStep::UnpackSts, QaStep::EventBuilding, QaStep::Tracking})->value_name("<qa steps>"), + "space separated list of QA Steps to enable (BeamBmon, UnpackSts, EventBuilding, Tracking, ...)") ("log-file,L", po::value(&fLogFile)->value_name("<file>"), "write log messages to file") ("output-types,O", po::value(&fOutputTypes)->multitoken()->value_name("<types>"), "space separated list of reconstruction output types (Hit, Tracks, DigiTimeslice, DigiEvent, ...)") ("compress-archive", po::bool_switch(&fCompressArchive)->default_value(false), "Enable compression for output archives") ("steps", po::value(&fRecoSteps)->multitoken()->default_value({Step::Unpack, Step::DigiTrigger, Step::LocalReco, Step::Tracking})->value_name("<steps>"), - "space seperated list of reconstruction steps (unpack, digitrigger, localreco, ...)") + "space separated list of reconstruction steps (unpack, digitrigger, localreco, ...)") ("systems,s", po::value(&fDetectors)->multitoken()->default_value({Subsystem::STS, Subsystem::TOF, Subsystem::BMON, Subsystem::MUCH, Subsystem::RICH, Subsystem::TRD, Subsystem::TRD2D})->value_name("<detectors>"), - "space seperated list of detectors to process (sts, mvd, ...)") + "space separated list of detectors to process (sts, mvd, ...)") ("child-id,c", po::value(&fChildId)->default_value("00")->value_name("<id>"), "online process id on node") ("run-id,r", po::value(&fRunId)->default_value(2391)->value_name("<RunId>"), "Run ID, for now flesctl run index, later run start time") ("num-ts,n", po::value(&fNumTimeslices)->default_value(-1)->value_name("<num>"), @@ -143,3 +145,5 @@ bool Options::HasOutput(RecoData recoData) const { return Contains(fOutputTypes, bool Options::Has(fles::Subsystem detector) const { return Contains(fDetectors, detector); } bool Options::Has(Step step) const { return Contains(fRecoSteps, step); } + +bool Options::Has(QaStep qastep) const { return Contains(fQaSteps, qastep); } diff --git a/algo/base/Options.h b/algo/base/Options.h index bb67de3defd5d9f6b9550b2b6009b89bd8eab855..d6e693d1569000cf596cdc51a6dc3783b4cf2a7b 100644 --- a/algo/base/Options.h +++ b/algo/base/Options.h @@ -62,6 +62,8 @@ namespace cbm::algo bool Has(Step step) const; + bool Has(QaStep qastep) const; + private: // members std::string fParamsDir; // TODO: can we make this a std::path? std::string fInputLocator; @@ -72,6 +74,7 @@ namespace cbm::algo std::string fMonitorUri; std::string fHistogramUri; int32_t fHistogramHwm; + std::vector<QaStep> fQaSteps; bool fDumpArchive = false; bool fReleaseMode = false; ProfilingLevel fProfilingLevel = ProfilingNone; diff --git a/algo/global/Reco.cxx b/algo/global/Reco.cxx index faa3a29d466f5049cbcd0002d8c8277e7cecec65..c200260f4433c21b5bfe713be9593a5c11d3040a 100644 --- a/algo/global/Reco.cxx +++ b/algo/global/Reco.cxx @@ -128,7 +128,7 @@ void Reco::Init(const Options& opts) sts::ReadoutConfig readout{readoutSetup, chanMask}; sts::Unpack::Config cfg{.readout = readout, .walkMap = walkMap, .bCollectAuxData = bCollectAux}; fStsUnpack = std::make_unique<sts::Unpack>(cfg); - if (fSender != nullptr) { + if (fSender != nullptr && Opts().Has(QaStep::UnpackSts)) { fStsDigiQa = std::make_unique<sts::DigiQa>(fSender); fStsDigiQa->SetUseAuxData(bCollectAux); fStsDigiQa->RegisterReadoutSetup(readoutSetup); @@ -164,7 +164,8 @@ void Reco::Init(const Options& opts) 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); + fEventBuild = + std::make_unique<evbuild::EventbuildChain>(config, (Opts().Has(QaStep::EventBuilding) ? fSender : nullptr)); fEventBuild->RegisterTrackingSetup(pTrackingSetup); } @@ -199,7 +200,7 @@ void Reco::Init(const Options& opts) // Tracking if (Opts().Has(Step::Tracking)) { - fTracking = std::make_unique<TrackingChain>(fSender); + fTracking = std::make_unique<TrackingChain>(Opts().Has(QaStep::Tracking) ? fSender : nullptr); fTracking->RegisterSetup(pTrackingSetup); fTracking->SetContext(&fContext); fTracking->Init();