From ec10ca3dfb1c4880983069614cd25ae82c90fe78 Mon Sep 17 00:00:00 2001 From: nburmaso Date: Wed, 3 Nov 2021 10:11:06 +0100 Subject: [PATCH 1/5] Add metadata to AOD --- Detectors/AOD/CMakeLists.txt | 17 +++++-- .../AODProducerWorkflowSpec.h | 10 +++- Detectors/AOD/src/AODProducerWorkflowSpec.cxx | 50 +++++++++++++++++-- Detectors/AOD/src/aod-producer-workflow.cxx | 3 +- 4 files changed, 69 insertions(+), 11 deletions(-) diff --git a/Detectors/AOD/CMakeLists.txt b/Detectors/AOD/CMakeLists.txt index 7174760a64e6b..1cdb3aaf4c630 100644 --- a/Detectors/AOD/CMakeLists.txt +++ b/Detectors/AOD/CMakeLists.txt @@ -9,10 +9,11 @@ # granted to it by virtue of its status as an Intergovernmental Organization # or submit itself to any jurisdiction. -o2_add_library( +add_library(AODProducerWorkflow INTERFACE) + +target_link_libraries( AODProducerWorkflow - SOURCES src/AODProducerWorkflowSpec.cxx - PUBLIC_LINK_LIBRARIES + INTERFACE O2::DetectorsVertexing O2::FT0Workflow O2::FDDWorkflow @@ -30,12 +31,18 @@ o2_add_library( O2::Steer O2::TPCWorkflow ) + +target_include_directories(AODProducerWorkflow INTERFACE include) + +add_library(internal::AODProducerWorkflow ALIAS AODProducerWorkflow) + o2_add_executable( workflow COMPONENT_NAME aod-producer - SOURCES src/aod-producer-workflow.cxx - PUBLIC_LINK_LIBRARIES O2::AODProducerWorkflow + SOURCES src/aod-producer-workflow.cxx src/AODProducerWorkflowSpec.cxx + PUBLIC_LINK_LIBRARIES internal::AODProducerWorkflow O2::Version ) + o2_add_executable( standalone-aod-producer COMPONENT_NAME reco diff --git a/Detectors/AOD/include/AODProducerWorkflow/AODProducerWorkflowSpec.h b/Detectors/AOD/include/AODProducerWorkflow/AODProducerWorkflowSpec.h index dfc295f6ae2d9..297fe21a45699 100644 --- a/Detectors/AOD/include/AODProducerWorkflow/AODProducerWorkflowSpec.h +++ b/Detectors/AOD/include/AODProducerWorkflow/AODProducerWorkflowSpec.h @@ -34,6 +34,7 @@ #include "ReconstructionDataFormats/VtxTrackIndex.h" #include "SimulationDataFormat/MCCompLabel.h" #include "Steer/MCKinematicsReader.h" +#include "TMap.h" #include "TStopwatch.h" #include @@ -191,7 +192,7 @@ typedef boost::unordered_map Triple class AODProducerWorkflowDPL : public Task { public: - AODProducerWorkflowDPL(GID::mask_t src, std::shared_ptr dataRequest) : mInputSources(src), mDataRequest(dataRequest) {} + AODProducerWorkflowDPL(GID::mask_t src, std::shared_ptr dataRequest, std::string resFile) : mInputSources(src), mDataRequest(dataRequest), mResFile(resFile) {} ~AODProducerWorkflowDPL() override = default; void init(InitContext& ic) final; void run(ProcessingContext& pc) final; @@ -204,6 +205,8 @@ class AODProducerWorkflowDPL : public Task int64_t mTFNumber{-1}; int mTruncate{1}; int mRecoOnly{0}; + TString mResFile{"AO2D"}; + std::string mProdTags{"LHC21Axx,pass1,LHC15o,pass1"}; TStopwatch mTimer; // unordered map connects global indices and table indices of barrel tracks @@ -213,6 +216,9 @@ class AODProducerWorkflowDPL : public Task TripletsMap_t mToStore; + // MC production metadata holder + TMap mMetaData; + std::shared_ptr mDataRequest; // truncation is enabled by default @@ -352,7 +358,7 @@ class AODProducerWorkflowDPL : public Task }; /// create a processor spec -framework::DataProcessorSpec getAODProducerWorkflowSpec(GID::mask_t src, bool useMC); +framework::DataProcessorSpec getAODProducerWorkflowSpec(GID::mask_t src, bool useMC, std::string resFile); } // namespace o2::aodproducer diff --git a/Detectors/AOD/src/AODProducerWorkflowSpec.cxx b/Detectors/AOD/src/AODProducerWorkflowSpec.cxx index 59d756d3e9c86..652d42ad06d83 100644 --- a/Detectors/AOD/src/AODProducerWorkflowSpec.cxx +++ b/Detectors/AOD/src/AODProducerWorkflowSpec.cxx @@ -52,10 +52,13 @@ #include "SimulationDataFormat/MCEventLabel.h" #include "SimulationDataFormat/MCTrack.h" #include "SimulationDataFormat/MCTruthContainer.h" +#include "O2Version.h" #include "TMath.h" #include "MathUtils/Utils.h" #include "Math/SMatrix.h" -#include +#include "TMatrixD.h" +#include "TString.h" +#include "TObjString.h" #include #include #include @@ -857,6 +860,7 @@ uint8_t AODProducerWorkflowDPL::getTRDPattern(const o2::trd::TrackTRD& track) void AODProducerWorkflowDPL::init(InitContext& ic) { mTimer.Stop(); + mProdTags = ic.options().get("prod-tags"); mTFNumber = ic.options().get("aod-timeframe-id"); mRecoOnly = ic.options().get("reco-mctracks-only"); mTruncate = ic.options().get("enable-truncation"); @@ -903,6 +907,45 @@ void AODProducerWorkflowDPL::init(InitContext& ic) // Needed by MCH track extrapolation o2::base::GeometryManager::loadGeometry(); + // writing metadata if it's not yet in AOD file + // note: `--aod-writer-resmode "UPDATE"` have to be used, + // so that metadata is not overwritten + mResFile += ".root"; + auto* fResFile = TFile::Open(mResFile, "UPDATE"); + if (fResFile) { + if (!fResFile->FindObjectAny("metaData")) { + std::vector vTags; + std::stringstream ss(mProdTags); + while (ss.good()) { + std::string substr; + std::getline(ss, substr, ','); + vTags.emplace_back(substr); + } + // assuming all tags passed as in `prod-tags` description + TString LPMProdTag = vTags[0]; + TString anchorPass = vTags[1]; + TString anchorProd = vTags[2]; + TString recoPass = vTags[3]; + // populating metadata map + mMetaData.Add(new TObjString("DataType"), new TObjString("MC")); + mMetaData.Add(new TObjString("Run"), new TObjString("3")); + TString converterVersion = "o2 "; + converterVersion += o2::fullVersion(); + converterVersion += " ; root "; + converterVersion += ROOT_RELEASE; + mMetaData.Add(new TObjString("Run3ConverterVersion"), new TObjString(converterVersion)); + mMetaData.Add(new TObjString("RecoPassName"), new TObjString(recoPass)); + mMetaData.Add(new TObjString("AnchorProduction"), new TObjString(anchorProd)); + mMetaData.Add(new TObjString("AnchorPassName"), new TObjString(anchorPass)); + mMetaData.Add(new TObjString("LPMProductionTag"), new TObjString(LPMProdTag)); + LOGF(info, "Metadata: writing into %s", mResFile); + fResFile->WriteObject(&mMetaData, "metaData"); + } else { + LOGF(info, "Metadata: target file not found or metadata is already written"); + } + fResFile->Close(); + } + mTimer.Reset(); } @@ -1324,7 +1367,7 @@ void AODProducerWorkflowDPL::endOfStream(EndOfStreamContext& ec) mTimer.CpuTime(), mTimer.RealTime(), mTimer.Counter() - 1); } -DataProcessorSpec getAODProducerWorkflowSpec(GID::mask_t src, bool useMC) +DataProcessorSpec getAODProducerWorkflowSpec(GID::mask_t src, bool useMC, std::string resFile) { std::vector outputs; auto dataRequest = std::make_shared(); @@ -1363,10 +1406,11 @@ DataProcessorSpec getAODProducerWorkflowSpec(GID::mask_t src, bool useMC) "aod-producer-workflow", dataRequest->inputs, outputs, - AlgorithmSpec{adaptFromTask(src, dataRequest)}, + AlgorithmSpec{adaptFromTask(src, dataRequest, resFile)}, Options{ ConfigParamSpec{"aod-timeframe-id", VariantType::Int64, -1L, {"Set timeframe number"}}, ConfigParamSpec{"enable-truncation", VariantType::Int, 1, {"Truncation parameter: 1 -- on, != 1 -- off"}}, + ConfigParamSpec{"prod-tags", VariantType::String, "LHC21Axx,pass1,LHC15o,pass1", {"Comma separated list of production tags: `LPMProductionTag,AnchorPassName,AnchorProduction,RecoPassName`"}}, ConfigParamSpec{"reco-mctracks-only", VariantType::Int, 0, {"Store only reconstructed MC tracks and their mothers/daughters. 0 -- off, != 0 -- on"}}}}; } diff --git a/Detectors/AOD/src/aod-producer-workflow.cxx b/Detectors/AOD/src/aod-producer-workflow.cxx index 16c6ac8641ccd..5870875a56efd 100644 --- a/Detectors/AOD/src/aod-producer-workflow.cxx +++ b/Detectors/AOD/src/aod-producer-workflow.cxx @@ -42,12 +42,13 @@ WorkflowSpec defineDataProcessing(ConfigContext const& configcontext) { o2::conf::ConfigurableParam::updateFromString(configcontext.options().get("configKeyValues")); auto useMC = !configcontext.options().get("disable-mc"); + auto resFile = configcontext.options().get("aod-writer-resfile"); GID::mask_t allowedSrc = GID::getSourcesMask("ITS,MFT,MCH,TPC,ITS-TPC,ITS-TPC-TOF,TPC-TOF,MFT-MCH,FT0,FV0,FDD,TPC-TRD,ITS-TPC-TRD,FT0,FV0,FDD,ZDC"); GID::mask_t src = allowedSrc & GID::getSourcesMask(configcontext.options().get("info-sources")); WorkflowSpec specs; - specs.emplace_back(o2::aodproducer::getAODProducerWorkflowSpec(src, useMC)); + specs.emplace_back(o2::aodproducer::getAODProducerWorkflowSpec(src, useMC, resFile)); o2::globaltracking::InputHelper::addInputSpecs(configcontext, specs, src, src, src, useMC, src); o2::globaltracking::InputHelper::addInputSpecsPVertex(configcontext, specs, useMC); From 8652cb1025e8bbb01ca6118c087dcf8fd965dcb2 Mon Sep 17 00:00:00 2001 From: nburmaso Date: Wed, 3 Nov 2021 10:25:11 +0100 Subject: [PATCH 2/5] Add metadata to AOD: pass production tags using separate configurables --- .../AODProducerWorkflowSpec.h | 5 +++- Detectors/AOD/src/AODProducerWorkflowSpec.cxx | 30 ++++++++----------- 2 files changed, 16 insertions(+), 19 deletions(-) diff --git a/Detectors/AOD/include/AODProducerWorkflow/AODProducerWorkflowSpec.h b/Detectors/AOD/include/AODProducerWorkflow/AODProducerWorkflowSpec.h index 297fe21a45699..a8f6cff608fca 100644 --- a/Detectors/AOD/include/AODProducerWorkflow/AODProducerWorkflowSpec.h +++ b/Detectors/AOD/include/AODProducerWorkflow/AODProducerWorkflowSpec.h @@ -206,7 +206,10 @@ class AODProducerWorkflowDPL : public Task int mTruncate{1}; int mRecoOnly{0}; TString mResFile{"AO2D"}; - std::string mProdTags{"LHC21Axx,pass1,LHC15o,pass1"}; + TString mLPMProdTag{"LHC21Axx"}; + TString mAnchorPass{"pass1"}; + TString mAnchorProd{"LHC15o"}; + TString mRecoPass{"pass1"}; TStopwatch mTimer; // unordered map connects global indices and table indices of barrel tracks diff --git a/Detectors/AOD/src/AODProducerWorkflowSpec.cxx b/Detectors/AOD/src/AODProducerWorkflowSpec.cxx index 652d42ad06d83..3671a4b9c5067 100644 --- a/Detectors/AOD/src/AODProducerWorkflowSpec.cxx +++ b/Detectors/AOD/src/AODProducerWorkflowSpec.cxx @@ -860,7 +860,10 @@ uint8_t AODProducerWorkflowDPL::getTRDPattern(const o2::trd::TrackTRD& track) void AODProducerWorkflowDPL::init(InitContext& ic) { mTimer.Stop(); - mProdTags = ic.options().get("prod-tags"); + mLPMProdTag = ic.options().get("lpmp-prod-tag"); + mAnchorPass = ic.options().get("anchor-pass"); + mAnchorProd = ic.options().get("anchor-prod"); + mRecoPass = ic.options().get("reco-pass"); mTFNumber = ic.options().get("aod-timeframe-id"); mRecoOnly = ic.options().get("reco-mctracks-only"); mTruncate = ic.options().get("enable-truncation"); @@ -914,18 +917,6 @@ void AODProducerWorkflowDPL::init(InitContext& ic) auto* fResFile = TFile::Open(mResFile, "UPDATE"); if (fResFile) { if (!fResFile->FindObjectAny("metaData")) { - std::vector vTags; - std::stringstream ss(mProdTags); - while (ss.good()) { - std::string substr; - std::getline(ss, substr, ','); - vTags.emplace_back(substr); - } - // assuming all tags passed as in `prod-tags` description - TString LPMProdTag = vTags[0]; - TString anchorPass = vTags[1]; - TString anchorProd = vTags[2]; - TString recoPass = vTags[3]; // populating metadata map mMetaData.Add(new TObjString("DataType"), new TObjString("MC")); mMetaData.Add(new TObjString("Run"), new TObjString("3")); @@ -934,10 +925,10 @@ void AODProducerWorkflowDPL::init(InitContext& ic) converterVersion += " ; root "; converterVersion += ROOT_RELEASE; mMetaData.Add(new TObjString("Run3ConverterVersion"), new TObjString(converterVersion)); - mMetaData.Add(new TObjString("RecoPassName"), new TObjString(recoPass)); - mMetaData.Add(new TObjString("AnchorProduction"), new TObjString(anchorProd)); - mMetaData.Add(new TObjString("AnchorPassName"), new TObjString(anchorPass)); - mMetaData.Add(new TObjString("LPMProductionTag"), new TObjString(LPMProdTag)); + mMetaData.Add(new TObjString("RecoPassName"), new TObjString(mRecoPass)); + mMetaData.Add(new TObjString("AnchorProduction"), new TObjString(mAnchorProd)); + mMetaData.Add(new TObjString("AnchorPassName"), new TObjString(mAnchorPass)); + mMetaData.Add(new TObjString("LPMProductionTag"), new TObjString(mLPMProdTag)); LOGF(info, "Metadata: writing into %s", mResFile); fResFile->WriteObject(&mMetaData, "metaData"); } else { @@ -1410,7 +1401,10 @@ DataProcessorSpec getAODProducerWorkflowSpec(GID::mask_t src, bool useMC, std::s Options{ ConfigParamSpec{"aod-timeframe-id", VariantType::Int64, -1L, {"Set timeframe number"}}, ConfigParamSpec{"enable-truncation", VariantType::Int, 1, {"Truncation parameter: 1 -- on, != 1 -- off"}}, - ConfigParamSpec{"prod-tags", VariantType::String, "LHC21Axx,pass1,LHC15o,pass1", {"Comma separated list of production tags: `LPMProductionTag,AnchorPassName,AnchorProduction,RecoPassName`"}}, + ConfigParamSpec{"lpmp-prod-tag", VariantType::String, "LHC21Axx", {"LPMProductionTag"}}, + ConfigParamSpec{"anchor-pass", VariantType::String, "pass1", {"AnchorPassName"}}, + ConfigParamSpec{"anchor-prod", VariantType::String, "LHC15o", {"AnchorProduction"}}, + ConfigParamSpec{"reco-pass", VariantType::String, "LHC15o", {"RecoPassName"}}, ConfigParamSpec{"reco-mctracks-only", VariantType::Int, 0, {"Store only reconstructed MC tracks and their mothers/daughters. 0 -- off, != 0 -- on"}}}}; } From 1a5e08efa25c1c2298ea717497340fa259c45d44 Mon Sep 17 00:00:00 2001 From: nburmaso Date: Thu, 4 Nov 2021 23:01:07 +0100 Subject: [PATCH 3/5] Add metadata to AOD: set data type --- Detectors/AOD/src/AODProducerWorkflowSpec.cxx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Detectors/AOD/src/AODProducerWorkflowSpec.cxx b/Detectors/AOD/src/AODProducerWorkflowSpec.cxx index c82c243f8d59c..ab45d624b7167 100644 --- a/Detectors/AOD/src/AODProducerWorkflowSpec.cxx +++ b/Detectors/AOD/src/AODProducerWorkflowSpec.cxx @@ -916,7 +916,8 @@ void AODProducerWorkflowDPL::init(InitContext& ic) if (fResFile) { if (!fResFile->FindObjectAny("metaData")) { // populating metadata map - mMetaData.Add(new TObjString("DataType"), new TObjString("MC")); + TString dataType = mUseMC ? "MC" : "RAW"; + mMetaData.Add(new TObjString("DataType"), new TObjString(dataType)); mMetaData.Add(new TObjString("Run"), new TObjString("3")); TString converterVersion = "o2 "; converterVersion += o2::fullVersion(); From 25e9f1c8447f71135dce66a8da7243295ffcc551 Mon Sep 17 00:00:00 2001 From: nburmaso Date: Thu, 4 Nov 2021 23:10:53 +0100 Subject: [PATCH 4/5] Add metadata to AOD: forgotten initializers --- .../AOD/include/AODProducerWorkflow/AODProducerWorkflowSpec.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Detectors/AOD/include/AODProducerWorkflow/AODProducerWorkflowSpec.h b/Detectors/AOD/include/AODProducerWorkflow/AODProducerWorkflowSpec.h index d674f771c040f..abe0891159f6e 100644 --- a/Detectors/AOD/include/AODProducerWorkflow/AODProducerWorkflowSpec.h +++ b/Detectors/AOD/include/AODProducerWorkflow/AODProducerWorkflowSpec.h @@ -192,7 +192,7 @@ typedef boost::unordered_map Triple class AODProducerWorkflowDPL : public Task { public: - AODProducerWorkflowDPL(GID::mask_t src, std::shared_ptr dataRequest, std::string resFile, bool useMC = true) : mInputSources(src), mDataRequest(dataRequest) {} + AODProducerWorkflowDPL(GID::mask_t src, std::shared_ptr dataRequest, std::string resFile, bool useMC = true) : mInputSources(src), mDataRequest(dataRequest), mResFile{resFile}, mUseMC(useMC) {} ~AODProducerWorkflowDPL() override = default; void init(InitContext& ic) final; void run(ProcessingContext& pc) final; From de720e77f304f6e1f19b0751783f25eb5c018d8f Mon Sep 17 00:00:00 2001 From: nburmaso Date: Fri, 5 Nov 2021 12:46:50 +0100 Subject: [PATCH 5/5] Add metadata to AOD: fix code according to comments --- .../AODProducerWorkflowSpec.h | 8 +-- Detectors/AOD/src/AODProducerWorkflowSpec.cxx | 54 +++++++++---------- 2 files changed, 31 insertions(+), 31 deletions(-) diff --git a/Detectors/AOD/include/AODProducerWorkflow/AODProducerWorkflowSpec.h b/Detectors/AOD/include/AODProducerWorkflow/AODProducerWorkflowSpec.h index abe0891159f6e..919be44256834 100644 --- a/Detectors/AOD/include/AODProducerWorkflow/AODProducerWorkflowSpec.h +++ b/Detectors/AOD/include/AODProducerWorkflow/AODProducerWorkflowSpec.h @@ -208,10 +208,10 @@ class AODProducerWorkflowDPL : public Task int mTruncate{1}; int mRecoOnly{0}; TString mResFile{"AO2D"}; - TString mLPMProdTag{"LHC21Axx"}; - TString mAnchorPass{"pass1"}; - TString mAnchorProd{"LHC15o"}; - TString mRecoPass{"pass1"}; + TString mLPMProdTag{""}; + TString mAnchorPass{""}; + TString mAnchorProd{""}; + TString mRecoPass{""}; TStopwatch mTimer; // unordered map connects global indices and table indices of barrel tracks diff --git a/Detectors/AOD/src/AODProducerWorkflowSpec.cxx b/Detectors/AOD/src/AODProducerWorkflowSpec.cxx index ab45d624b7167..63b2cae8019d3 100644 --- a/Detectors/AOD/src/AODProducerWorkflowSpec.cxx +++ b/Detectors/AOD/src/AODProducerWorkflowSpec.cxx @@ -909,32 +909,32 @@ void AODProducerWorkflowDPL::init(InitContext& ic) o2::base::GeometryManager::loadGeometry(); // writing metadata if it's not yet in AOD file - // note: `--aod-writer-resmode "UPDATE"` have to be used, + // note: `--aod-writer-resmode "UPDATE"` has to be used, // so that metadata is not overwritten mResFile += ".root"; auto* fResFile = TFile::Open(mResFile, "UPDATE"); - if (fResFile) { - if (!fResFile->FindObjectAny("metaData")) { - // populating metadata map - TString dataType = mUseMC ? "MC" : "RAW"; - mMetaData.Add(new TObjString("DataType"), new TObjString(dataType)); - mMetaData.Add(new TObjString("Run"), new TObjString("3")); - TString converterVersion = "o2 "; - converterVersion += o2::fullVersion(); - converterVersion += " ; root "; - converterVersion += ROOT_RELEASE; - mMetaData.Add(new TObjString("Run3ConverterVersion"), new TObjString(converterVersion)); - mMetaData.Add(new TObjString("RecoPassName"), new TObjString(mRecoPass)); - mMetaData.Add(new TObjString("AnchorProduction"), new TObjString(mAnchorProd)); - mMetaData.Add(new TObjString("AnchorPassName"), new TObjString(mAnchorPass)); - mMetaData.Add(new TObjString("LPMProductionTag"), new TObjString(mLPMProdTag)); - LOGF(info, "Metadata: writing into %s", mResFile); - fResFile->WriteObject(&mMetaData, "metaData"); - } else { - LOGF(info, "Metadata: target file not found or metadata is already written"); - } - fResFile->Close(); + if (!fResFile) { + LOGF(fatal, "Could not open file %s", mResFile); + } + if (!fResFile->FindObjectAny("metaData")) { + // populating metadata map + TString dataType = mUseMC ? "MC" : "RAW"; + mMetaData.Add(new TObjString("DataType"), new TObjString(dataType)); + mMetaData.Add(new TObjString("Run"), new TObjString("3")); + TString O2Version = o2::fullVersion(); + TString ROOTVersion = ROOT_RELEASE; + mMetaData.Add(new TObjString("O2Version"), new TObjString(O2Version)); + mMetaData.Add(new TObjString("ROOTVersion"), new TObjString(ROOTVersion)); + mMetaData.Add(new TObjString("RecoPassName"), new TObjString(mRecoPass)); + mMetaData.Add(new TObjString("AnchorProduction"), new TObjString(mAnchorProd)); + mMetaData.Add(new TObjString("AnchorPassName"), new TObjString(mAnchorPass)); + mMetaData.Add(new TObjString("LPMProductionTag"), new TObjString(mLPMProdTag)); + LOGF(info, "Metadata: writing into %s", mResFile); + fResFile->WriteObject(&mMetaData, "metaData"); + } else { + LOGF(fatal, "Metadata: target file %s already has metadata", mResFile); } + fResFile->Close(); mTimer.Reset(); } @@ -1026,7 +1026,7 @@ void AODProducerWorkflowDPL::run(ProcessingContext& pc) int runNumber = int(dh->runNumber); if (mTFNumber == -1L) { // TODO has to be made globally unique (by using absolute time of TF). For now is unique within the run - tfNumber = dh->tfCounter; //getTFNumber(startIR, runNumber); + tfNumber = dh->tfCounter; // getTFNumber(startIR, runNumber); } else { tfNumber = mTFNumber; } @@ -1405,10 +1405,10 @@ DataProcessorSpec getAODProducerWorkflowSpec(GID::mask_t src, bool useMC, std::s Options{ ConfigParamSpec{"aod-timeframe-id", VariantType::Int64, -1L, {"Set timeframe number"}}, ConfigParamSpec{"enable-truncation", VariantType::Int, 1, {"Truncation parameter: 1 -- on, != 1 -- off"}}, - ConfigParamSpec{"lpmp-prod-tag", VariantType::String, "LHC21Axx", {"LPMProductionTag"}}, - ConfigParamSpec{"anchor-pass", VariantType::String, "pass1", {"AnchorPassName"}}, - ConfigParamSpec{"anchor-prod", VariantType::String, "LHC15o", {"AnchorProduction"}}, - ConfigParamSpec{"reco-pass", VariantType::String, "LHC15o", {"RecoPassName"}}, + ConfigParamSpec{"lpmp-prod-tag", VariantType::String, "", {"LPMProductionTag"}}, + ConfigParamSpec{"anchor-pass", VariantType::String, "", {"AnchorPassName"}}, + ConfigParamSpec{"anchor-prod", VariantType::String, "", {"AnchorProduction"}}, + ConfigParamSpec{"reco-pass", VariantType::String, "", {"RecoPassName"}}, ConfigParamSpec{"reco-mctracks-only", VariantType::Int, 0, {"Store only reconstructed MC tracks and their mothers/daughters. 0 -- off, != 0 -- on"}}}}; }