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