From cc6731585c515c823d1da64fdc65b5ad9ac787e7 Mon Sep 17 00:00:00 2001 From: mlesch Date: Thu, 15 May 2025 15:31:26 +0200 Subject: [PATCH] TPC Update SAC QC Task to new SAC format --- Modules/TPC/include/TPC/SACs.h | 3 +- Modules/TPC/run/tpcQCSACs.json | 13 ++++--- Modules/TPC/src/SACs.cxx | 65 +++++++++++++++++++++------------- 3 files changed, 49 insertions(+), 32 deletions(-) diff --git a/Modules/TPC/include/TPC/SACs.h b/Modules/TPC/include/TPC/SACs.h index 84a72acb49..815b53c1c8 100644 --- a/Modules/TPC/include/TPC/SACs.h +++ b/Modules/TPC/include/TPC/SACs.h @@ -11,7 +11,7 @@ /// /// \file SACs.h -/// \author Thomas Klemenz +/// \author Thomas Klemenz, Marcel Lesch /// #ifndef QUALITYCONTROL_SACS_H @@ -86,6 +86,7 @@ class SACs : public quality_control::postprocessing::PostProcessingInterface bool mRejectOutliersSACZeroScale; float mSACZeroMaxDeviation; + bool mDoSACFourierCoeffs; }; } // namespace o2::quality_control_modules::tpc diff --git a/Modules/TPC/run/tpcQCSACs.json b/Modules/TPC/run/tpcQCSACs.json index 5074c112e0..571a30e671 100644 --- a/Modules/TPC/run/tpcQCSACs.json +++ b/Modules/TPC/run/tpcQCSACs.json @@ -17,7 +17,7 @@ "url": "" }, "conditionDB": { - "url": "http://alice-ccdb.cern.ch" + "url": "http://ccdb-test.cern.ch:8080" }, "postprocessing": { "matchAnyRunNumber": "true" @@ -29,10 +29,11 @@ "className": "o2::quality_control_modules::tpc::SACs", "moduleName": "QcTPC", "detectorName": "TPC", - "dataSourceURL": "http://alice-ccdb.cern.ch", - "doLatest": "false", + "dataSourceURL": "http://ccdb-test.cern.ch:8080", + "doLatest": "true", "rejectOutliersSACZeroScale": "true", "maxDeviationOutlierSACZero": "2.", + "doSACFourierCoeffs": "false", "timestamps_comment": [ "Put the timestamp of the corresponding file you want to look for in the timestamps array.", "You can either put a timestamp for every object or leave the array empty to take the latest file from the CCDB.", "An empty array to get the the latest version will be the main use case.", @@ -40,9 +41,7 @@ "If you want to pick the latest file in the CCDB manually, you can use -1." ], "timestamps": [ - { "SACZero":"1686390443945" }, - { "SACOne":"-1" }, - { "SACDelta":"-1" }, + { "SACContainer":"-1" }, { "SACFourierCoeffs":"-1" } ], "lookupMetaData_comment": [ "Not used in the current version" ], @@ -68,7 +67,7 @@ ], "updateTrigger_comment": "To trigger on a specific file being updated, use e.g. 'newobject:ccdb:TPC/Calib/Noise'", "updateTrigger": [ - "once" + "foreachlatest:ccdb:TPC/Calib/SAC" ], "stopTrigger": [ "userorcontrol" diff --git a/Modules/TPC/src/SACs.cxx b/Modules/TPC/src/SACs.cxx index 435528462c..7bcbae28da 100644 --- a/Modules/TPC/src/SACs.cxx +++ b/Modules/TPC/src/SACs.cxx @@ -11,7 +11,7 @@ /// /// \file SACs.cxx -/// \author Thomas Klemenz +/// \author Thomas Klemenz, Marcel Lesch /// // O2 includes @@ -129,6 +129,10 @@ void SACs::configure(const boost::property_tree::ptree& config) ILOG(Warning, Support) << "No rejection for outliers in SAC Zero Scale!" << ENDM; } mSACZeroMaxDeviation = config.get("qc.postprocessing." + id + ".maxDeviationOutlierSACZero", 3.); + mDoSACFourierCoeffs = config.get("qc.postprocessing." + id + ".doSACFourierCoeffs", false); + if (mDoSACFourierCoeffs) { + ILOG(Warning, Support) << "SAC Fourier Coeffs activated, these are currently not in use!" << ENDM; + } } void SACs::initialize(Trigger, framework::ServiceRegistryRef) @@ -147,11 +151,13 @@ void SACs::initialize(Trigger, framework::ServiceRegistryRef) getObjectsManager()->startPublishing(mSACZeroSides.get()); getObjectsManager()->startPublishing(mSACDeltaSides.get()); getObjectsManager()->startPublishing(mSACOneSides.get()); - getObjectsManager()->startPublishing(mFourierCoeffsA.get()); - getObjectsManager()->startPublishing(mFourierCoeffsC.get()); getObjectsManager()->startPublishing(mSACZeroSidesScaled.get()); getObjectsManager()->startPublishing(mSACZeroScale.get()); getObjectsManager()->startPublishing(mSACZeroOutliers.get()); + if (mDoSACFourierCoeffs) { + getObjectsManager()->startPublishing(mFourierCoeffsA.get()); + getObjectsManager()->startPublishing(mFourierCoeffsC.get()); + } } void SACs::update(Trigger, framework::ServiceRegistryRef) @@ -165,26 +171,34 @@ void SACs::update(Trigger, framework::ServiceRegistryRef) mSACZeroScale.get()->Clear(); mSACZeroOutliers.get()->Clear(); - o2::tpc::SACZero* sacZero = nullptr; - o2::tpc::SACDelta* sacDelta = nullptr; - o2::tpc::SACOne* sacOne = nullptr; + o2::tpc::SAC* sacContainer = nullptr; o2::tpc::FourierCoeffSAC* sacFFT = nullptr; if (mDoLatest) { - std::vector availableTimestampsSACZero = getDataTimestamps(mCdbApi, CDBTypeMap.at(CDBType::CalSAC0), 1, mTimestamps["SACZero"]); - std::vector availableTimestampsSACDelta = getDataTimestamps(mCdbApi, CDBTypeMap.at(CDBType::CalSACDelta), 1, mTimestamps["SACDelta"]); - std::vector availableTimestampsSACOne = getDataTimestamps(mCdbApi, CDBTypeMap.at(CDBType::CalSAC1), 1, mTimestamps["SACOne"]); + std::vector availableTimestampsSACContainer = getDataTimestamps(mCdbApi, CDBTypeMap.at(CDBType::CalSAC), 1, mTimestamps["SACContainer"]); std::vector availableTimestampsSACFourierCoeffs = getDataTimestamps(mCdbApi, CDBTypeMap.at(CDBType::CalSACFourier), 1, mTimestamps["SACFourierCoeffs"]); - sacZero = mCdbApi.retrieveFromTFileAny(CDBTypeMap.at(CDBType::CalSAC0), std::map{}, availableTimestampsSACZero[0]); - sacDelta = mCdbApi.retrieveFromTFileAny>(CDBTypeMap.at(CDBType::CalSACDelta), std::map{}, availableTimestampsSACDelta[0]); - sacOne = mCdbApi.retrieveFromTFileAny(CDBTypeMap.at(CDBType::CalSAC1), std::map{}, availableTimestampsSACOne[0]); - sacFFT = mCdbApi.retrieveFromTFileAny(CDBTypeMap.at(CDBType::CalSACFourier), std::map{}, availableTimestampsSACFourierCoeffs[0]); + sacContainer = mCdbApi.retrieveFromTFileAny>(CDBTypeMap.at(CDBType::CalSAC), std::map{}, availableTimestampsSACContainer[0]); + if (mDoSACFourierCoeffs) { + sacFFT = mCdbApi.retrieveFromTFileAny(CDBTypeMap.at(CDBType::CalSACFourier), std::map{}, availableTimestampsSACFourierCoeffs[0]); + } } else { - sacZero = mCdbApi.retrieveFromTFileAny(CDBTypeMap.at(CDBType::CalSAC0), std::map{}, mTimestamps["SACZero"]); - sacDelta = mCdbApi.retrieveFromTFileAny>(CDBTypeMap.at(CDBType::CalSACDelta), std::map{}, mTimestamps["SACDelta"]); - sacOne = mCdbApi.retrieveFromTFileAny(CDBTypeMap.at(CDBType::CalSAC1), std::map{}, mTimestamps["SACOne"]); - sacFFT = mCdbApi.retrieveFromTFileAny(CDBTypeMap.at(CDBType::CalSACFourier), std::map{}, mTimestamps["SACFourierCoeffs"]); + sacContainer = mCdbApi.retrieveFromTFileAny>(CDBTypeMap.at(CDBType::CalSAC), std::map{}, mTimestamps["SACContainer"]); + if (mDoSACFourierCoeffs) { + sacFFT = mCdbApi.retrieveFromTFileAny(CDBTypeMap.at(CDBType::CalSACFourier), std::map{}, mTimestamps["SACFourierCoeffs"]); + } + } + + o2::tpc::SACZero* sacZero = nullptr; + o2::tpc::SACDelta* sacDelta = nullptr; + o2::tpc::SACOne* sacOne = nullptr; + + if (!sacContainer) { + ILOG(Error, Support) << "No SAC Container fetched" << ENDM; + } else { + sacZero = &(sacContainer->mSACZero); + sacDelta = &(sacContainer->mSACDelta); + sacOne = &(sacContainer->mSACOne); } if (sacZero) { @@ -211,9 +225,7 @@ void SACs::update(Trigger, framework::ServiceRegistryRef) mSACs.drawFourierCoeffSAC(Side::C, mRanges["SACFourierCoeffs"].at(0), mRanges["SACFourierCoeffs"].at(1), mRanges["SACFourierCoeffs"].at(2), mFourierCoeffsC.get()); } - delete sacZero; - delete sacDelta; - delete sacOne; + delete sacContainer; delete sacFFT; mSACs.setSACZero(nullptr); @@ -228,20 +240,25 @@ void SACs::finalize(Trigger, framework::ServiceRegistryRef) getObjectsManager()->stopPublishing(mSACZeroSides.get()); getObjectsManager()->stopPublishing(mSACOneSides.get()); getObjectsManager()->stopPublishing(mSACDeltaSides.get()); - getObjectsManager()->stopPublishing(mFourierCoeffsA.get()); - getObjectsManager()->stopPublishing(mFourierCoeffsC.get()); getObjectsManager()->stopPublishing(mSACZeroSidesScaled.get()); getObjectsManager()->stopPublishing(mSACZeroScale.get()); getObjectsManager()->stopPublishing(mSACZeroOutliers.get()); + if (mDoSACFourierCoeffs) { + getObjectsManager()->stopPublishing(mFourierCoeffsA.get()); + getObjectsManager()->stopPublishing(mFourierCoeffsC.get()); + } + mSACZeroSides.reset(); mSACOneSides.reset(); mSACDeltaSides.reset(); - mFourierCoeffsA.reset(); - mFourierCoeffsC.reset(); mSACZeroSidesScaled.reset(); mSACZeroScale.reset(); mSACZeroOutliers.reset(); + if (mDoSACFourierCoeffs) { + mFourierCoeffsA.reset(); + mFourierCoeffsC.reset(); + } } } // namespace o2::quality_control_modules::tpc