diff --git a/Detectors/MUON/MCH/Tracking/src/TrackFinderSpec.cxx b/Detectors/MUON/MCH/Tracking/src/TrackFinderSpec.cxx index 6239186309dc3..88202fc40a5ae 100644 --- a/Detectors/MUON/MCH/Tracking/src/TrackFinderSpec.cxx +++ b/Detectors/MUON/MCH/Tracking/src/TrackFinderSpec.cxx @@ -25,12 +25,15 @@ #include #include +#include +#include #include "Framework/CallbackService.h" #include "Framework/ConcreteDataMatcher.h" #include "Framework/ConfigParamRegistry.h" #include "Framework/ControlService.h" #include "Framework/DataProcessorSpec.h" +#include "Framework/DeviceSpec.h" #include "Framework/Lifetime.h" #include "Framework/Output.h" #include "Framework/Task.h" @@ -47,6 +50,7 @@ #include "DetectorsBase/Propagator.h" #include "MCHBase/Error.h" #include "MCHBase/ErrorMap.h" +#include "MCHBase/TrackerParam.h" #include "MCHTracking/TrackParam.h" #include "MCHTracking/Track.h" #include "MCHTracking/TrackFinder.h" @@ -130,6 +134,7 @@ class TrackFinderTask if (mCCDBRequest) { base::GRPGeomHelper::instance().checkUpdates(pc); } + storeConfigs(pc); uint32_t firstTForbit = pc.services().get().firstTForbit; @@ -268,6 +273,23 @@ class TrackFinderTask } } + //_________________________________________________________________________________________________ + void storeConfigs(ProcessingContext& pc) + { + static bool first = true; + if (first) { + first = false; + if (pc.services().get().inputTimesliceId == 0) { + const auto& conf = TrackerParam::Instance(); + o2::conf::ConfigurableParam::write(o2::base::NameConf::getConfigOutputFileName(pc.services().get().name, conf.getName()), conf.getName()); + TMap md; + md.SetOwnerKeyValue(); + md.Add(new TObjString(conf.getName().c_str()), new TObjString(o2::conf::ConfigurableParam::asJSON(conf.getName()).c_str())); + pc.outputs().snapshot(Output{"META", "MCHTRACKER", 0}, md); + } + } + } + bool mComputeTime = false; ///< compute the track time from the associated digits bool mDigits = false; ///< send to associated digits std::shared_ptr mCCDBRequest{}; ///< pointer to the CCDB requests @@ -296,6 +318,7 @@ o2::framework::DataProcessorSpec getTrackFinderSpec(const char* specName, bool c outputSpecs.emplace_back(OutputSpec{{"trackdigits"}, "MCH", "TRACKDIGITS", 0, Lifetime::Timeframe}); } outputSpecs.emplace_back(OutputSpec{{"trackerrors"}, "MCH", "TRACKERRORS", 0, Lifetime::Timeframe}); + outputSpecs.emplace_back("META", "MCHTRACKER", 0, Lifetime::Sporadic); auto ccdbRequest = disableCCDBMagField ? nullptr : std::make_shared(false, // orbitResetTime diff --git a/Detectors/MUON/MID/Workflow/src/TrackerSpec.cxx b/Detectors/MUON/MID/Workflow/src/TrackerSpec.cxx index 28536bdbf570e..5b6ea6002ca33 100644 --- a/Detectors/MUON/MID/Workflow/src/TrackerSpec.cxx +++ b/Detectors/MUON/MID/Workflow/src/TrackerSpec.cxx @@ -17,6 +17,8 @@ #include "MIDWorkflow/TrackerSpec.h" #include +#include +#include #include "Framework/DataRefUtils.h" #include "Framework/CCDBParamSpec.h" #include "Framework/ConfigParamRegistry.h" @@ -24,6 +26,7 @@ #include "Framework/Logger.h" #include "Framework/Output.h" #include "Framework/Task.h" +#include "Framework/DeviceSpec.h" #include "DataFormatsMID/Cluster.h" #include "DataFormatsMID/ROFRecord.h" #include "DataFormatsMID/Track.h" @@ -31,6 +34,7 @@ #include "DetectorsBase/GeometryManager.h" #include "MIDTracking/HitMapBuilder.h" #include "MIDTracking/Tracker.h" +#include "MIDTracking/TrackerParam.h" #include "MIDSimulation/TrackLabeler.h" #include "CommonUtils/NameConf.h" #include "DetectorsBase/GRPGeomHelper.h" @@ -63,6 +67,7 @@ class TrackerDeviceDPL { auto tStart = std::chrono::high_resolution_clock::now(); updateTimeDependentParams(pc); + storeConfigs(pc); auto clusters = pc.inputs().get>("mid_clusters"); @@ -142,6 +147,22 @@ class TrackerDeviceDPL pc.inputs().get*>("mid_rejectlist_forTracks"); } + void storeConfigs(of::ProcessingContext& pc) + { + static bool first = true; + if (first) { + first = false; + if (pc.services().get().inputTimesliceId == 0) { + const auto& conf = TrackerParam::Instance(); + o2::conf::ConfigurableParam::write(o2::base::NameConf::getConfigOutputFileName(pc.services().get().name, conf.getName()), conf.getName()); + TMap md; + md.SetOwnerKeyValue(); + md.Add(new TObjString(conf.getName().c_str()), new TObjString(o2::conf::ConfigurableParam::asJSON(conf.getName()).c_str())); + pc.outputs().snapshot(of::Output{"META", "MIDTRACKER", 0}, md); + } + } + } + bool mIsMC = false; bool mKeepAll = false; bool mCheckMasked = false; @@ -184,6 +205,7 @@ framework::DataProcessorSpec getTrackerSpec(bool isMC, bool checkMasked) outputSpecs.emplace_back(of::OutputSpec{header::gDataOriginMID, "TRACKLABELS"}); outputSpecs.emplace_back(of::OutputSpec{header::gDataOriginMID, "TRCLUSLABELS"}); } + outputSpecs.emplace_back("META", "MIDTRACKER", 0, of::Lifetime::Sporadic); return of::DataProcessorSpec{ "MIDTracker",