From 423a43bcf41f201e4b2c9e412d0396faba37df9d Mon Sep 17 00:00:00 2001 From: Felix Schlepper Date: Thu, 23 Apr 2026 14:27:12 +0200 Subject: [PATCH] ITSMFT: ensure backward comptability for MC2ROF Signed-off-by: Felix Schlepper --- Detectors/ITSMFT/common/workflow/src/ClusterReaderSpec.cxx | 4 ++++ Detectors/ITSMFT/common/workflow/src/ClusterWriterSpec.cxx | 6 ++++++ Detectors/ITSMFT/common/workflow/src/ClustererSpec.cxx | 4 ++++ Detectors/ITSMFT/common/workflow/src/DigitReaderSpec.cxx | 4 ++++ Detectors/ITSMFT/common/workflow/src/DigitWriterSpec.cxx | 5 +++++ .../ITSMFT/common/workflow/src/digit-reader-workflow.cxx | 2 +- Steer/DigitizerWorkflow/src/ITSMFTDigitizerSpec.cxx | 4 ++++ 7 files changed, 28 insertions(+), 1 deletion(-) diff --git a/Detectors/ITSMFT/common/workflow/src/ClusterReaderSpec.cxx b/Detectors/ITSMFT/common/workflow/src/ClusterReaderSpec.cxx index bd24c9d2591d5..6174938171336 100644 --- a/Detectors/ITSMFT/common/workflow/src/ClusterReaderSpec.cxx +++ b/Detectors/ITSMFT/common/workflow/src/ClusterReaderSpec.cxx @@ -69,6 +69,9 @@ void ClusterReader::run(ProcessingContext& pc) } if (mUseMC) { pc.outputs().snapshot(Output{Origin, "CLUSTERSMCTR", iLayer}, *mClusterMCTruth[iLayer]); + // read dummy MC2ROF vector to keep writer/readers backward compatible + static std::vector dummyMC2ROF; + pc.outputs().snapshot(Output{Origin, "CLUSTERSMC2ROF", iLayer}, dummyMC2ROF); } } if (mTriggerOut) { @@ -141,6 +144,7 @@ std::vector makeOutChannels(o2::header::DataOrigin detOrig, bool mct } if (mctruth) { outputs.emplace_back(detOrig, "CLUSTERSMCTR", iLayer, Lifetime::Timeframe); + outputs.emplace_back(detOrig, "CLUSTERSMC2ROF", iLayer, Lifetime::Timeframe); } } if (triggerOut) { diff --git a/Detectors/ITSMFT/common/workflow/src/ClusterWriterSpec.cxx b/Detectors/ITSMFT/common/workflow/src/ClusterWriterSpec.cxx index e1857cbf2f775..52520194537b8 100644 --- a/Detectors/ITSMFT/common/workflow/src/ClusterWriterSpec.cxx +++ b/Detectors/ITSMFT/common/workflow/src/ClusterWriterSpec.cxx @@ -37,6 +37,7 @@ using CompClusType = std::vector; using PatternsType = std::vector; using ROFrameRType = std::vector; using LabelsType = o2::dataformats::MCTruthContainer; +using ROFRecLblT = std::vector; using namespace o2::header; template @@ -105,6 +106,11 @@ DataProcessorSpec getClusterWriterSpec(bool useMC, bool doStag) (detName + "ClusterMCTruth").c_str(), "cluster-label-branch", (useMC ? nLayers : 0), getIndex, + getName}, + BranchDefinition{InputSpec{"MC2ROframes", ConcreteDataTypeMatcher{Origin, "CLUSTERSMC2ROF"}}, + (detName + "ClustersMC2ROF").c_str(), "cluster-mc2rof-branch", + (useMC ? nLayers : 0), + getIndex, getName})(); } diff --git a/Detectors/ITSMFT/common/workflow/src/ClustererSpec.cxx b/Detectors/ITSMFT/common/workflow/src/ClustererSpec.cxx index 0672f7d13bed2..b3954c5c22ad1 100644 --- a/Detectors/ITSMFT/common/workflow/src/ClustererSpec.cxx +++ b/Detectors/ITSMFT/common/workflow/src/ClustererSpec.cxx @@ -190,6 +190,9 @@ void ClustererDPL::run(ProcessingContext& pc) if (mUseMC) { pc.outputs().snapshot(Output{Origin, "CLUSTERSMCTR", iLayer}, *clusterLabels); // at the moment requires snapshot + // write dummy MC2ROF vector to keep writer/readers backward compatible + static std::vector dummyMC2ROF; + pc.outputs().snapshot(Output{Origin, "CLUSTERSMC2ROF", iLayer}, dummyMC2ROF); } reader.reset(); @@ -306,6 +309,7 @@ DataProcessorSpec getClustererSpec(bool useMC, bool doStag) outputs.emplace_back(Origin, "CLUSTERSROF", iLayer, Lifetime::Timeframe); if (useMC) { outputs.emplace_back(Origin, "CLUSTERSMCTR", iLayer, Lifetime::Timeframe); + outputs.emplace_back(Origin, "CLUSTERSMC2ROF", iLayer, Lifetime::Timeframe); } } return DataProcessorSpec{ diff --git a/Detectors/ITSMFT/common/workflow/src/DigitReaderSpec.cxx b/Detectors/ITSMFT/common/workflow/src/DigitReaderSpec.cxx index 6a57933f18048..b6c3ab5386179 100644 --- a/Detectors/ITSMFT/common/workflow/src/DigitReaderSpec.cxx +++ b/Detectors/ITSMFT/common/workflow/src/DigitReaderSpec.cxx @@ -112,6 +112,9 @@ void DigitReader::run(ProcessingContext& pc) mPLabels[iLayer]->copyandflatten(sharedlabels); delete mPLabels[iLayer]; mPLabels[iLayer] = nullptr; + // read dummy MC2ROF vector to keep writer/readers backward compatible + static std::vector dummyMC2ROF; + pc.outputs().snapshot(Output{Origin, "DIGITSMC2ROF", iLayer}, dummyMC2ROF); } } if (mUseCalib) { @@ -267,6 +270,7 @@ std::vector makeOutChannels(bool mctruth, bool doStag, bool useCalib outputs.emplace_back(Origin, "DIGITS", iLayer, Lifetime::Timeframe); outputs.emplace_back(Origin, "DIGITSROF", iLayer, Lifetime::Timeframe); if (mctruth) { + outputs.emplace_back(Origin, "DIGITSMC2ROF", iLayer, Lifetime::Timeframe); outputs.emplace_back(Origin, "DIGITSMCTR", iLayer, Lifetime::Timeframe); } } diff --git a/Detectors/ITSMFT/common/workflow/src/DigitWriterSpec.cxx b/Detectors/ITSMFT/common/workflow/src/DigitWriterSpec.cxx index d409356c6846f..944432196881e 100644 --- a/Detectors/ITSMFT/common/workflow/src/DigitWriterSpec.cxx +++ b/Detectors/ITSMFT/common/workflow/src/DigitWriterSpec.cxx @@ -141,6 +141,11 @@ DataProcessorSpec getDigitWriterSpec(bool mctruth, bool doStag, bool dec, bool c fillLabels, getIndex, getName}, + BranchDefinition>{InputSpec{detStr + "_digitsMC2ROF", ConcreteDataTypeMatcher{Origin, "DIGITSMC2ROF"}}, + detStr + "DigitMC2ROF", "digit-mc2rof-branch", + (mctruth ? mLayers : 0), + getIndex, + getName}, BranchDefinition>{InputSpec{detStr + "calib", ConcreteDataTypeMatcher{Origin, "GBTCALIB"}}, detStr + "Calib", "digit-calib-branch", (calib ? 1 : 0)})(); diff --git a/Detectors/ITSMFT/common/workflow/src/digit-reader-workflow.cxx b/Detectors/ITSMFT/common/workflow/src/digit-reader-workflow.cxx index 04453abe464b7..f44a730525016 100644 --- a/Detectors/ITSMFT/common/workflow/src/digit-reader-workflow.cxx +++ b/Detectors/ITSMFT/common/workflow/src/digit-reader-workflow.cxx @@ -57,7 +57,7 @@ WorkflowSpec defineDataProcessing(ConfigContext const& cfgc) bool doStag = o2::itsmft::DPLAlpideParamInitializer::isMFTStaggeringEnabled(cfgc); wf.emplace_back(o2::itsmft::getMFTDigitReaderSpec(useMC, doStag, calib, withTriggers)); } else { - bool doStag = o2::itsmft::DPLAlpideParamInitializer::isMFTStaggeringEnabled(cfgc); + bool doStag = o2::itsmft::DPLAlpideParamInitializer::isITSStaggeringEnabled(cfgc); wf.emplace_back(o2::itsmft::getITSDigitReaderSpec(useMC, doStag, calib, withTriggers)); } o2::raw::HBFUtilsInitializer hbfIni(cfgc, wf); diff --git a/Steer/DigitizerWorkflow/src/ITSMFTDigitizerSpec.cxx b/Steer/DigitizerWorkflow/src/ITSMFTDigitizerSpec.cxx index a4c401bbf8b42..fbdc74c11d7a4 100644 --- a/Steer/DigitizerWorkflow/src/ITSMFTDigitizerSpec.cxx +++ b/Steer/DigitizerWorkflow/src/ITSMFTDigitizerSpec.cxx @@ -228,6 +228,9 @@ class ITSMFTDPLDigitizerTask : BaseDPLDigitizer // free space of existing label containers mLabels[iLayer].clear_andfreememory(); mLabelsAccum[iLayer].clear_andfreememory(); + // write dummy MC2ROF vector to keep writer/readers backward compatible + static std::vector dummyMC2ROF; + pc.outputs().snapshot(Output{Origin, "DIGITSMC2ROF", iLayer}, dummyMC2ROF); } } @@ -404,6 +407,7 @@ std::vector makeOutChannels(o2::header::DataOrigin detOrig, bool mct outputs.emplace_back(detOrig, "DIGITS", iLayer, Lifetime::Timeframe); outputs.emplace_back(detOrig, "DIGITSROF", iLayer, Lifetime::Timeframe); if (mctruth) { + outputs.emplace_back(detOrig, "DIGITSMC2ROF", iLayer, Lifetime::Timeframe); outputs.emplace_back(detOrig, "DIGITSMCTR", iLayer, Lifetime::Timeframe); } }