@@ -310,9 +310,11 @@ struct AnalysisEventSelection {
310310 Configurable<std::string> fConfigCcdbUrl {" ccdb-url" , " http://alice-ccdb.cern.ch" , " url of the ccdb repository" };
311311 Configurable<int64_t > fConfigNoLaterThan {" ccdb-no-later-than" , std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now ().time_since_epoch ()).count (), " latest acceptable timestamp of creation for the object" };
312312
313- Configurable<bool > cfgUseRCT{" cfgUseRCT" , false , " Apply RCT quality selection" };
314- Configurable<std::string> cfgRCTLabel{" cfgRCTLabel" , " CBT" , " RCT selection label" };
315- Configurable<bool > cfgCheckZDC{" cfgCheckZDC" , false , " Also check ZDC quality" };
313+ o2::framework::Configurable<bool > cfgUseRCT{" cfgUseRCT" , false , " Apply RCT quality selection" };
314+ o2::framework::Configurable<std::string> cfgRCTPath{" cfgRCTPath" , " RCT/Flags/RunFlags" , " CCDB path to the RCT run flags" };
315+ o2::framework::Configurable<std::string> cfgRCTLabel{" cfgRCTLabel" , " CBT" , " RCT selection label" };
316+ o2::framework::Configurable<bool > cfgCheckZDC{" cfgCheckZDC" , false , " Also check ZDC quality" };
317+ o2::framework::Configurable<std::string> cfgRCTPassName{" cfgRCTPassName" , " " , " Reconstruction pass; leave empty for run-only lookup" };
316318
317319 HistogramManager* fHistMan = nullptr ;
318320 MixingHandler* fMixHandler = nullptr ;
@@ -389,10 +391,14 @@ struct AnalysisEventSelection {
389391 fCCDBApi .init (fConfigCcdbUrl .value );
390392
391393 if (cfgUseRCT.value ) {
394+ if (cfgRCTLabel.value != " CBT" && cfgRCTLabel.value != " CBT_hadronPID" && cfgRCTLabel.value != " CBT_electronPID" && cfgRCTLabel.value != " CBT_calo" && cfgRCTLabel.value != " CBT_muon" && cfgRCTLabel.value != " CBT_muon_glo" ) {
395+ LOGF (fatal, " RCT Label \" %s\" is unknown." , cfgRCTLabel.value .c_str ());
396+ }
397+
392398 rctChecker.init (cfgRCTLabel.value , cfgCheckZDC.value );
393399
394400 if (!rctChecker.any ()) {
395- LOGF (fatal, " Empty RCT mask: check cfgRCTLabel" );
401+ LOGF (fatal, " Empty RCT mask: check cfgRCTLabel. " );
396402 }
397403 }
398404 }
@@ -401,12 +407,21 @@ struct AnalysisEventSelection {
401407 {
402408 std::map<std::string, std::string> metadata{{" run" , std::to_string (run)}};
403409
404- auto * flags = fCCDB ->getSpecific <std::map<uint64_t , uint32_t >>(" RCT/Flags/RunFlags" , timestamp, metadata);
405- if (flags == nullptr || flags->empty ()) {
406- LOGF (fatal, " Missing or empty RCT flags for run " + std::to_string (run));
410+ LOG (info) << " Requesting " << cfgRCTPath.value << " run=" << run << " timestamp=" << timestamp;
411+
412+ if (!cfgRCTPassName.value .empty ()) {
413+ metadata[" passName" ] = cfgRCTPassName.value ;
407414 }
408415
409- LOG (info) << " Requesting RCT/Flags/RunFlags" << " run=" << run << " timestamp=" << timestamp;
416+ auto * flags = fCCDB ->getSpecific <std::map<uint64_t , uint32_t >>(cfgRCTPath.value , timestamp, metadata);
417+ if (flags == nullptr && !cfgRCTPassName.value .empty ()) {
418+ metadata.erase (" passName" );
419+ flags = fCCDB ->getSpecific <std::map<uint64_t , uint32_t >>(cfgRCTPath.value , timestamp, metadata);
420+ }
421+
422+ if (flags == nullptr || flags->empty ()) {
423+ LOGF (fatal, " Missing or empty RCT flags for run %d." , run);
424+ }
410425
411426 rctFlags = *flags;
412427 rctRun = run;
0 commit comments