From 7c46d60c87a4639a16749ead0de5292cc555dd56 Mon Sep 17 00:00:00 2001 From: lietava Date: Tue, 12 Nov 2024 16:12:36 +0100 Subject: [PATCH 01/18] fix: +1 for L1 latency --- Detectors/CTP/reconstruction/src/RawDataDecoder.cxx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Detectors/CTP/reconstruction/src/RawDataDecoder.cxx b/Detectors/CTP/reconstruction/src/RawDataDecoder.cxx index 4e3d480e463cd..4839d1cb6b752 100644 --- a/Detectors/CTP/reconstruction/src/RawDataDecoder.cxx +++ b/Detectors/CTP/reconstruction/src/RawDataDecoder.cxx @@ -529,7 +529,7 @@ int RawDataDecoder::shiftInputs(std::map& digit int nTwoI = 0; std::map digitsMapShifted; auto L0shift = o2::ctp::TriggerOffsetsParam::Instance().LM_L0; - auto L1shift = L0shift + o2::ctp::TriggerOffsetsParam::Instance().L0_L1; + auto L1shift = L0shift + o2::ctp::TriggerOffsetsParam::Instance().L0_L1+1; for (auto const& dig : digitsMap) { auto inpmask = dig.second.CTPInputMask; auto inpmaskLM = inpmask & LMMASKInputs; From f1eaeb2aeb798b53f924cdd83fbb96c400f6c9f6 Mon Sep 17 00:00:00 2001 From: lietava Date: Tue, 12 Nov 2024 16:17:09 +0100 Subject: [PATCH 02/18] fix: +1 for L1 latency --- Detectors/CTP/reconstruction/src/RawDataDecoder.cxx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Detectors/CTP/reconstruction/src/RawDataDecoder.cxx b/Detectors/CTP/reconstruction/src/RawDataDecoder.cxx index 4839d1cb6b752..aeb2c21900df7 100644 --- a/Detectors/CTP/reconstruction/src/RawDataDecoder.cxx +++ b/Detectors/CTP/reconstruction/src/RawDataDecoder.cxx @@ -529,7 +529,7 @@ int RawDataDecoder::shiftInputs(std::map& digit int nTwoI = 0; std::map digitsMapShifted; auto L0shift = o2::ctp::TriggerOffsetsParam::Instance().LM_L0; - auto L1shift = L0shift + o2::ctp::TriggerOffsetsParam::Instance().L0_L1+1; + auto L1shift = L0shift + o2::ctp::TriggerOffsetsParam::Instance().L0_L1 + 1; for (auto const& dig : digitsMap) { auto inpmask = dig.second.CTPInputMask; auto inpmaskLM = inpmask & LMMASKInputs; From e4efba29ea07cb8f14d95530ae376ef81e8985af Mon Sep 17 00:00:00 2001 From: lietava Date: Wed, 13 Nov 2024 17:47:49 +0100 Subject: [PATCH 03/18] dev: decoder: checking only trigger class bits which belongs to run --- Detectors/CTP/macro/PlotPbLumi.C | 120 +++++++++++++----- Detectors/CTP/macro/TestConfig.C | 18 ++- Detectors/CTP/macro/TestFetcher.C | 6 +- .../CTPReconstruction/RawDataDecoder.h | 5 +- .../CTP/reconstruction/src/RawDataDecoder.cxx | 8 +- .../include/CTPWorkflow/RawDecoderSpec.h | 1 + Detectors/CTP/workflow/src/RawDecoderSpec.cxx | 16 ++- 7 files changed, 125 insertions(+), 49 deletions(-) diff --git a/Detectors/CTP/macro/PlotPbLumi.C b/Detectors/CTP/macro/PlotPbLumi.C index 6ffa1dd4cee2b..4225bb501a052 100644 --- a/Detectors/CTP/macro/PlotPbLumi.C +++ b/Detectors/CTP/macro/PlotPbLumi.C @@ -20,37 +20,56 @@ #include "CCDB/BasicCCDBManager.h" #include "DataFormatsCTP/Scalers.h" #include "DataFormatsCTP/Configuration.h" +#include +#include "TGraph.h" +#include "TGraphErrors.h" +#include "TCanvas.h" +#include "TMath.h" +#include "TStyle.h" +#include "TF1.h" #include #include #include #endif using namespace o2::ctp; -void PlotPbLumi(int runNumber, int fillN, std::string ccdbHost = "http://ccdb-test.cern.ch:8080") -{ // - // what = 1: znc rate - // what = 2: (TCE+TSC)/ZNC - // what = 3: TCE/ZNC +using namespace std::chrono; +// +// if fillN = 0: pileup correction not done +// QCDB =1 : use for ongoing run +// +void PlotPbLumi(int runNumber, int fillN = 0, int QCDB = 0, std::string ccdbHost = "http://alice-ccdb.cern.ch" ) +{ // "http://ccdb-test.cern.ch:8080" std::string mCCDBPathCTPScalers = "CTP/Calib/Scalers"; + std::string mQCDBPathCTPScalers = "qc/CTP/Scalers"; std::string mCCDBPathCTPConfig = "CTP/Config/Config"; auto& ccdbMgr = o2::ccdb::BasicCCDBManager::instance(); + ccdbMgr.setURL(ccdbHost); // Timestamp auto soreor = ccdbMgr.getRunDuration(runNumber); uint64_t timeStamp = (soreor.second - soreor.first) / 2 + soreor.first; std::cout << "Timestamp:" << timeStamp << std::endl; // Filling - std::string sfill = std::to_string(fillN); std::map metadata; - metadata["fillNumber"] = sfill; - auto lhcifdata = ccdbMgr.getSpecific("GLO/Config/GRPLHCIF", timeStamp, metadata); - auto bfilling = lhcifdata->getBunchFilling(); - std::vector bcs = bfilling.getFilledBCs(); - int nbc = bcs.size(); - std::cout << "Number of interacting bc:" << nbc << std::endl; + int nbc = 0; + if(fillN) { + std::string sfill = std::to_string(fillN); + metadata["fillNumber"] = sfill; + auto lhcifdata = ccdbMgr.getSpecific("GLO/Config/GRPLHCIF", timeStamp, metadata); + auto bfilling = lhcifdata->getBunchFilling(); + std::vector bcs = bfilling.getFilledBCs(); + nbc = bcs.size(); + std::cout << "Number of interacting bc:" << nbc << std::endl; + } + if(QCDB) { // use this option for ongoing run + mCCDBPathCTPScalers = mQCDBPathCTPScalers; + ccdbMgr.setURL("http://ccdb-test.cern.ch:8080"); + timeStamp = duration_cast< milliseconds >(system_clock::now().time_since_epoch()).count(); + std::cout << "For scalers using Current time:" << timeStamp << std::endl; + } // Scalers std::string srun = std::to_string(runNumber); metadata.clear(); // can be empty metadata["runNumber"] = srun; - ccdbMgr.setURL("http://ccdb-test.cern.ch:8080"); auto scl = ccdbMgr.getSpecific(mCCDBPathCTPScalers, timeStamp, metadata); if (scl == nullptr) { LOG(info) << "CTPRunScalers not in database, timestamp:" << timeStamp; @@ -105,8 +124,6 @@ void PlotPbLumi(int runNumber, int fillN, std::string ccdbHost = "http://ccdb-te return; } // - // Anal - // // Times double_t frev = 11245; double_t time0 = recs[0].epochTime; @@ -114,39 +131,65 @@ void PlotPbLumi(int runNumber, int fillN, std::string ccdbHost = "http://ccdb-te double_t Trun = timeL - time0; double_t orbit0 = recs[0].intRecord.orbit; int n = recs.size() - 1; + if(runNumber == 559143) { + n = 400; + } + if(runNumber == 559561 ) { + n = n - 3; // rate drops at the end + } + if(runNumber == 559575){ + n = n - 6; + } + if(runNumber == 559617) { + n = n - 5; + } + if(runNumber == 559632) { + n = n - 6; + } std::cout << " Run duration:" << Trun << " Scalers size:" << n + 1 << std::endl; - Double_t x[n], znc[n], zncpp[n]; + Double_t x[n], znc[n], zncpp[n], ex[n], eznc[n]; Double_t tcetsctoznc[n], tcetoznc[n], vchtoznc[n]; + Double_t etcetsctoznc[n], etcetoznc[n], evchtoznc[n]; + for (int i = 0; i < n; i++) { + ex[i] = 0; x[i] = (double_t)(recs[i + 1].intRecord.orbit + recs[i].intRecord.orbit) / 2. - orbit0; x[i] *= 88e-6; // x[i] = (double_t)(recs[i+1].epochTime + recs[i].epochTime)/2.; double_t tt = (double_t)(recs[i + 1].intRecord.orbit - recs[i].intRecord.orbit); tt = tt * 88e-6; // - // std::cout << recs[i+1].scalersInps[25] << std::endl; double_t znci = (double_t)(recs[i + 1].scalersInps[25] - recs[i].scalersInps[25]); - double_t mu = -TMath::Log(1. - znci / tt / nbc / frev); - double_t zncipp = mu * nbc * frev; + double_t zncipp = znci; + double_t mu = 0; + if(fillN) { + mu = -TMath::Log(1. - znci / tt / nbc / frev); + zncipp = mu * nbc * frev * tt; + } zncpp[i] = zncipp / 28.; - znc[i] = znci / 28. / tt; - // - auto had = recs[i + 1].scalers[tce].lmBefore - recs[i].scalers[tce].lmBefore; - // std::cout << recs[i+1].scalers[tce].lmBefore << std::endl; - had += recs[i + 1].scalers[tsc].lmBefore - recs[i].scalers[tsc].lmBefore; - // rat = (double_t)(had)/double_t(recs[i+1].scalersInps[25] - recs[i].scalersInps[25])*28; - tcetsctoznc[i] = (double_t)(had) / zncpp[i] / tt; - had = recs[i + 1].scalers[tce].lmBefore - recs[i].scalers[tce].lmBefore; - // rat = (double_t)(had)/double_t(recs[i+1].scalersInps[25] - recs[i].scalersInps[25])*28; - tcetoznc[i] = (double_t)(had) / zncpp[i] / tt; - had = recs[i + 1].scalers[vch].lmBefore - recs[i].scalers[vch].lmBefore; - // rat = (double_t)(had)/double_t(recs[i+1].scalersInps[25] - recs[i].scalersInps[25])*28; - vchtoznc[i] = (double_t)(had) / zncpp[i] / tt; + znc[i] = zncipp / 28. / tt; + eznc[i] = TMath::Sqrt(zncipp) / 28. / tt; + if(1){ + // + auto had = recs[i + 1].scalers[tsc].lmBefore - recs[i].scalers[tsc].lmBefore; + had += recs[i + 1].scalers[tce].lmBefore - recs[i].scalers[tce].lmBefore; + tcetsctoznc[i] = (double_t)(had) / zncpp[i]; + etcetsctoznc[i] = TMath::Sqrt(tcetsctoznc[i]*(1-tcetsctoznc[i])/ zncpp[i]); + had = recs[i + 1].scalers[tce].lmBefore - recs[i].scalers[tce].lmBefore; + double_t tcec = had; + tcetoznc[i] = (double_t)(had) / zncpp[i]; + had = recs[i + 1].scalers[vch].lmBefore - recs[i].scalers[vch].lmBefore; + vchtoznc[i] = (double_t)(had) / zncpp[i] ; + //std::cout << "mu:" << mu << " zncpp corr:" << zncipp << " zncraw:" << znci << " tce:" << tcec << " tce/had" << tcec/zncpp[i] << std::endl; + } } // + TFile myfile("file.root","RECREATE"); gStyle->SetMarkerSize(0.5); - TGraph* gr1 = new TGraph(n, x, znc); + //TGraph* gr1 = new TGraph(n, x, znc); + TGraphErrors* gr1 = new TGraphErrors(n, x, znc, ex, eznc); TGraph* gr2 = new TGraph(n, x, tcetsctoznc); + //TGraphErrors* gr2 = new TGraphErrors(n, x, tcetsctoznc, ex, etcetsctoznc); // nom and denom are strongly correlated TGraph* gr3 = new TGraph(n, x, tcetoznc); TGraph* gr4 = new TGraph(n, x, vchtoznc); gr1->SetMarkerStyle(20); @@ -155,6 +198,7 @@ void PlotPbLumi(int runNumber, int fillN, std::string ccdbHost = "http://ccdb-te gr4->SetMarkerStyle(23); gr1->SetTitle("R=ZNC/28 rate [Hz]; time[sec]; R"); gr2->SetTitle("R=(TSC+TCE)*TVTX*B*28/ZNC; time[sec]; R"); + //gr2->SetTitle("R=TSC*TVTX*B*28/ZNC; time[sec]; R"); // gr2->GetHistogram()->SetMaximum(1.1); // gr2->GetHistogram()->SetMinimum(0.9); gr3->SetTitle("R=(TCE)*TVTX*B*28/ZNC; time[sec]; R"); @@ -164,14 +208,20 @@ void PlotPbLumi(int runNumber, int fillN, std::string ccdbHost = "http://ccdb-te // gr4->GetHistogram()->SetMaximum(0.6); // gr4->GetHistogram()->SetMinimum(0.4); TCanvas* c1 = new TCanvas("c1", srun.c_str(), 200, 10, 800, 500); + TF1 *fun = new TF1("poly0","[0]+x*[1]"); c1->Divide(2, 2); c1->cd(1); gr1->Draw("AP"); c1->cd(2); + fun->SetParameter(0,1); + gr2->Fit("poly0","FM"); gr2->Draw("AP"); c1->cd(3); + fun->SetParameter(0,0.5); + gr3->Fit("poly0"); gr3->Draw("AP"); c1->cd(4); + gr4->Fit("poly0"); gr4->Draw("AP"); // getRate test: double tt = timeStamp / 1000.; @@ -179,4 +229,8 @@ void PlotPbLumi(int runNumber, int fillN, std::string ccdbHost = "http://ccdb-te std::cout << "ZDC input getRateGivetT:" << r1.first / 28. << " " << r1.second / 28. << std::endl; std::pair r2 = scl->getRateGivenT(tt, tce, 1); std::cout << "LM before TCE class getRateGivetT:" << r2.first << " " << r2.second << std::endl; + gr1->Write(); + gr2->Write(); + gr3->Write(); + gr4->Write(); } diff --git a/Detectors/CTP/macro/TestConfig.C b/Detectors/CTP/macro/TestConfig.C index 38da821ea4807..ad3397406b547 100644 --- a/Detectors/CTP/macro/TestConfig.C +++ b/Detectors/CTP/macro/TestConfig.C @@ -16,13 +16,13 @@ #endif using namespace o2::ctp; -void TestConfig(bool test = 0) +void TestConfig(bool test = 1) { if (test == 0) { return; } - uint64_t timestamp = 1660196771632; - std::string run = "523148"; + uint64_t timestamp = 1660276134898+10000; + std::string run = "523186"; o2::ctp::ctpCCDBManager::setCCDBHost("https://alice-ccdb.cern.ch"); bool ok; auto ctpcfg = o2::ctp::ctpCCDBManager::getConfigFromCCDB(timestamp, run, ok); @@ -31,13 +31,17 @@ void TestConfig(bool test = 0) } CTPConfiguration ctpconfig; ctpconfig.loadConfigurationRun3(ctpcfg.getConfigString()); - // ctpconfig.printStream(std::cout); - // return; - // ctpconfig.assignDescriptors(); - // ctpconfig.createInputsInDecriptorsFromNames(); ctpconfig.printStream(std::cout); auto& triggerclasses = ctpconfig.getCTPClasses(); std::cout << "Found " << triggerclasses.size() << " trigger classes" << std::endl; + for (const auto& trg : triggerclasses) { + if (trg.cluster->maskCluster[o2::detectors::DetID::EMC]) { + // Class triggering EMCAL cluster + LOG(info) << "Found trigger class for EMCAL cluster: " << trg.name << " with input mask " << std::bitset<64>(trg.descriptor->getInputsMask()); + trg.descriptor->getInputsMask(); + } + } + return; int indexInList = 0; for (const auto& trgclass : triggerclasses) { uint64_t inputmask = 0; diff --git a/Detectors/CTP/macro/TestFetcher.C b/Detectors/CTP/macro/TestFetcher.C index 2d73b83cd174e..40458909b4728 100644 --- a/Detectors/CTP/macro/TestFetcher.C +++ b/Detectors/CTP/macro/TestFetcher.C @@ -16,7 +16,7 @@ #endif using namespace o2::ctp; -void TestFetcher(int runNumber = 557251) +void TestFetcher(int runNumber = 559456) { auto& ccdb = o2::ccdb::BasicCCDBManager::instance(); std::pair pp = ccdb.getRunDuration(runNumber); @@ -25,7 +25,9 @@ void TestFetcher(int runNumber = 557251) // Opening run CTPRateFetcher fetcher; fetcher.setupRun(runNumber, &ccdb, ts, 0); - ccdb.setURL("http://ali-qcdb-gpn.cern.ch:8083/"); + //ccdb.setURL("http://ali-qcdb-gpn.cern.ch:8083/"); + ccdb.setURL("http://ccdb-test.cern.ch:8080/"); + std::string QCDBPathCTPScalers = "qc/CTP/Scalers"; map metadata; // can be empty std::string run = std::to_string(runNumber); diff --git a/Detectors/CTP/reconstruction/include/CTPReconstruction/RawDataDecoder.h b/Detectors/CTP/reconstruction/include/CTPReconstruction/RawDataDecoder.h index c50079f9f8717..53a419b38106a 100644 --- a/Detectors/CTP/reconstruction/include/CTPReconstruction/RawDataDecoder.h +++ b/Detectors/CTP/reconstruction/include/CTPReconstruction/RawDataDecoder.h @@ -22,6 +22,7 @@ #include "Framework/InputRecord.h" #include "DataFormatsCTP/Digits.h" #include "DataFormatsCTP/LumiInfo.h" +#include "DataFormatsCTP/Configuration.h" namespace o2 { @@ -43,6 +44,7 @@ class RawDataDecoder void setVerbose(bool v) { mVerbose = v; } void setMAXErrors(int m) { mErrorMax = m; } int setLumiInp(int lumiinp, std::string inp); + void setCTPConfig( CTPConfiguration cfg) { mCTPConfig = std::move(cfg); }; uint32_t getIRRejected() const { return mIRRejected; } uint32_t getTCRRejected() const { return mTCRRejected; } std::vector& getTFOrbits() { return mTFOrbits; } @@ -50,7 +52,7 @@ class RawDataDecoder int getErrorTCR() { return mErrorTCR; } int init(); static int shiftNew(const o2::InteractionRecord& irin, uint32_t TFOrbit, std::bitset<48>& inpmask, int64_t shift, int level, std::map& digmap); - static int shiftInputs(std::map& digitsMap, o2::pmr::vector& digits, uint32_t TFOrbit); + static int shiftInputs(std::map& digitsMap, o2::pmr::vector& digits, uint32_t TFOrbit, uint64_t trgclassmask = 0xffffffffffffffff); private: static constexpr uint32_t TF_TRIGGERTYPE_MASK = 0x800; @@ -79,6 +81,7 @@ class RawDataDecoder int mErrorTCR = 0; int mErrorMax = 3; bool mStickyError = false; + CTPConfiguration mCTPConfig; }; } // namespace ctp } // namespace o2 diff --git a/Detectors/CTP/reconstruction/src/RawDataDecoder.cxx b/Detectors/CTP/reconstruction/src/RawDataDecoder.cxx index aeb2c21900df7..946bd77d86f22 100644 --- a/Detectors/CTP/reconstruction/src/RawDataDecoder.cxx +++ b/Detectors/CTP/reconstruction/src/RawDataDecoder.cxx @@ -293,7 +293,9 @@ int RawDataDecoder::decodeRaw(o2::framework::InputRecord& inputs, std::vector& digitsMap, o2::pmr::vector& digits, uint32_t TFOrbit) +int RawDataDecoder::shiftInputs(std::map& digitsMap, o2::pmr::vector& digits, uint32_t TFOrbit, uint64_t trgclassmask) { // int nClasswoInp = 0; // counting classes without input which should never happen int nLM = 0; @@ -594,7 +596,7 @@ int RawDataDecoder::shiftInputs(std::map& digit if ((d.CTPInputMask & L1MASKInputs).count()) { nL1++; } - if (d.CTPClassMask.count()) { + if ((d.CTPClassMask).to_ulong() & trgclassmask) { if (d.CTPInputMask.count()) { nTwI++; } else { diff --git a/Detectors/CTP/workflow/include/CTPWorkflow/RawDecoderSpec.h b/Detectors/CTP/workflow/include/CTPWorkflow/RawDecoderSpec.h index 607491b5cb48a..e7ef954777cb7 100644 --- a/Detectors/CTP/workflow/include/CTPWorkflow/RawDecoderSpec.h +++ b/Detectors/CTP/workflow/include/CTPWorkflow/RawDecoderSpec.h @@ -68,6 +68,7 @@ class RawDecoderSpec : public framework::Task uint32_t mNTFToIntegrate = 1; uint32_t mNHBIntegratedT = 0; uint32_t mNHBIntegratedV = 0; + bool mDecodeinputs = 0; std::deque mHistoryT; std::deque mHistoryV; RawDataDecoder mDecoder; diff --git a/Detectors/CTP/workflow/src/RawDecoderSpec.cxx b/Detectors/CTP/workflow/src/RawDecoderSpec.cxx index 415dbe2a1ffe3..23146cac6e4fa 100644 --- a/Detectors/CTP/workflow/src/RawDecoderSpec.cxx +++ b/Detectors/CTP/workflow/src/RawDecoderSpec.cxx @@ -20,13 +20,15 @@ #include "CommonUtils/VerbosityConfig.h" #include "Framework/InputRecord.h" #include "DataFormatsCTP/TriggerOffsetsParam.h" +#include "Framework/CCDBParamSpec.h" +#include "DataFormatsCTP/Configuration.h" using namespace o2::ctp::reco_workflow; void RawDecoderSpec::init(framework::InitContext& ctx) { - bool decodeinps = ctx.options().get("ctpinputs-decoding"); - mDecoder.setDecodeInps(decodeinps); + mDecodeinputs = ctx.options().get("ctpinputs-decoding"); + mDecoder.setDecodeInps(mDecodeinputs); mNTFToIntegrate = ctx.options().get("ntf-to-average"); mVerbose = ctx.options().get("use-verbose-mode"); int maxerrors = ctx.options().get("print-errors-num"); @@ -42,7 +44,7 @@ void RawDecoderSpec::init(framework::InitContext& ctx) mOutputLumiInfo.inp2 = inp2; mMaxInputSize = ctx.options().get("max-input-size"); mMaxInputSizeFatal = ctx.options().get("max-input-size-fatal"); - LOG(info) << "CTP reco init done. Inputs decoding here:" << decodeinps << " DoLumi:" << mDoLumi << " DoDigits:" << mDoDigits << " NTF:" << mNTFToIntegrate << " Lumi inputs:" << lumiinp1 << ":" << inp1 << " " << lumiinp2 << ":" << inp2 << " Max errors:" << maxerrors << " Max input size:" << mMaxInputSize << " MaxInputSizeFatal:" << mMaxInputSizeFatal; + LOG(info) << "CTP reco init done. Inputs decoding here:" << mDecodeinputs << " DoLumi:" << mDoLumi << " DoDigits:" << mDoDigits << " NTF:" << mNTFToIntegrate << " Lumi inputs:" << lumiinp1 << ":" << inp1 << " " << lumiinp2 << ":" << inp2 << " Max errors:" << maxerrors << " Max input size:" << mMaxInputSize << " MaxInputSizeFatal:" << mMaxInputSizeFatal; // mOutputLumiInfo.printInputs(); } void RawDecoderSpec::endOfStream(framework::EndOfStreamContext& ec) @@ -135,6 +137,11 @@ void RawDecoderSpec::run(framework::ProcessingContext& ctx) if (fatal_flag) { ret = mDecoder.decodeRawFatal(inputs, filter); } else { + if(mDecodeinputs) { + const auto ctpcfg = inputs.get("ctpconfig"); + //ctpcfg->printStream(std::cout); + mDecoder.setCTPConfig(*ctpcfg); + } ret = mDecoder.decodeRaw(inputs, filter, mOutputDigits, lumiPointsHBF1); } if (ret == 1) { @@ -176,6 +183,8 @@ void RawDecoderSpec::run(framework::ProcessingContext& ctx) mOutputLumiInfo.orbit = lumiPointsHBF1[0].orbit; } mOutputLumiInfo.counts = mCountsT; + + mOutputLumiInfo.countsFV0 = mCountsV; mOutputLumiInfo.nHBFCounted = mNHBIntegratedT; mOutputLumiInfo.nHBFCountedFV0 = mNHBIntegratedV; @@ -199,6 +208,7 @@ o2::framework::DataProcessorSpec o2::ctp::reco_workflow::getRawDecoderSpec(bool std::vector outputs; if (digits) { + inputs.emplace_back("ctpconfig", "CTP", "CTPCONFIG", 0, o2::framework::Lifetime::Condition, o2::framework::ccdbParamSpec("CTP/Config/Config", 1)); outputs.emplace_back("CTP", "DIGITS", 0, o2::framework::Lifetime::Timeframe); } if (lumi) { From 5b3513ddafaf31a68d73de391f023184f4b8106a Mon Sep 17 00:00:00 2001 From: lietava Date: Wed, 13 Nov 2024 17:48:55 +0100 Subject: [PATCH 04/18] clang --- Detectors/CTP/macro/PlotPbLumi.C | 56 +++++++++---------- Detectors/CTP/macro/TestConfig.C | 12 ++-- Detectors/CTP/macro/TestFetcher.C | 2 +- .../CTPReconstruction/RawDataDecoder.h | 2 +- Detectors/CTP/workflow/src/RawDecoderSpec.cxx | 9 ++- 5 files changed, 40 insertions(+), 41 deletions(-) diff --git a/Detectors/CTP/macro/PlotPbLumi.C b/Detectors/CTP/macro/PlotPbLumi.C index 4225bb501a052..c6e45e8e4a1ba 100644 --- a/Detectors/CTP/macro/PlotPbLumi.C +++ b/Detectors/CTP/macro/PlotPbLumi.C @@ -37,7 +37,7 @@ using namespace std::chrono; // if fillN = 0: pileup correction not done // QCDB =1 : use for ongoing run // -void PlotPbLumi(int runNumber, int fillN = 0, int QCDB = 0, std::string ccdbHost = "http://alice-ccdb.cern.ch" ) +void PlotPbLumi(int runNumber, int fillN = 0, int QCDB = 0, std::string ccdbHost = "http://alice-ccdb.cern.ch") { // "http://ccdb-test.cern.ch:8080" std::string mCCDBPathCTPScalers = "CTP/Calib/Scalers"; std::string mQCDBPathCTPScalers = "qc/CTP/Scalers"; @@ -51,7 +51,7 @@ void PlotPbLumi(int runNumber, int fillN = 0, int QCDB = 0, std::string ccdbHos // Filling std::map metadata; int nbc = 0; - if(fillN) { + if (fillN) { std::string sfill = std::to_string(fillN); metadata["fillNumber"] = sfill; auto lhcifdata = ccdbMgr.getSpecific("GLO/Config/GRPLHCIF", timeStamp, metadata); @@ -60,10 +60,10 @@ void PlotPbLumi(int runNumber, int fillN = 0, int QCDB = 0, std::string ccdbHos nbc = bcs.size(); std::cout << "Number of interacting bc:" << nbc << std::endl; } - if(QCDB) { // use this option for ongoing run + if (QCDB) { // use this option for ongoing run mCCDBPathCTPScalers = mQCDBPathCTPScalers; ccdbMgr.setURL("http://ccdb-test.cern.ch:8080"); - timeStamp = duration_cast< milliseconds >(system_clock::now().time_since_epoch()).count(); + timeStamp = duration_cast(system_clock::now().time_since_epoch()).count(); std::cout << "For scalers using Current time:" << timeStamp << std::endl; } // Scalers @@ -131,20 +131,20 @@ void PlotPbLumi(int runNumber, int fillN = 0, int QCDB = 0, std::string ccdbHos double_t Trun = timeL - time0; double_t orbit0 = recs[0].intRecord.orbit; int n = recs.size() - 1; - if(runNumber == 559143) { + if (runNumber == 559143) { n = 400; } - if(runNumber == 559561 ) { - n = n - 3; // rate drops at the end + if (runNumber == 559561) { + n = n - 3; // rate drops at the end } - if(runNumber == 559575){ + if (runNumber == 559575) { n = n - 6; } - if(runNumber == 559617) { + if (runNumber == 559617) { n = n - 5; } - if(runNumber == 559632) { - n = n - 6; + if (runNumber == 559632) { + n = n - 6; } std::cout << " Run duration:" << Trun << " Scalers size:" << n + 1 << std::endl; Double_t x[n], znc[n], zncpp[n], ex[n], eznc[n]; @@ -162,34 +162,34 @@ void PlotPbLumi(int runNumber, int fillN = 0, int QCDB = 0, std::string ccdbHos double_t znci = (double_t)(recs[i + 1].scalersInps[25] - recs[i].scalersInps[25]); double_t zncipp = znci; double_t mu = 0; - if(fillN) { - mu = -TMath::Log(1. - znci / tt / nbc / frev); + if (fillN) { + mu = -TMath::Log(1. - znci / tt / nbc / frev); zncipp = mu * nbc * frev * tt; } zncpp[i] = zncipp / 28.; znc[i] = zncipp / 28. / tt; eznc[i] = TMath::Sqrt(zncipp) / 28. / tt; - if(1){ + if (1) { // auto had = recs[i + 1].scalers[tsc].lmBefore - recs[i].scalers[tsc].lmBefore; had += recs[i + 1].scalers[tce].lmBefore - recs[i].scalers[tce].lmBefore; tcetsctoznc[i] = (double_t)(had) / zncpp[i]; - etcetsctoznc[i] = TMath::Sqrt(tcetsctoznc[i]*(1-tcetsctoznc[i])/ zncpp[i]); + etcetsctoznc[i] = TMath::Sqrt(tcetsctoznc[i] * (1 - tcetsctoznc[i]) / zncpp[i]); had = recs[i + 1].scalers[tce].lmBefore - recs[i].scalers[tce].lmBefore; double_t tcec = had; tcetoznc[i] = (double_t)(had) / zncpp[i]; had = recs[i + 1].scalers[vch].lmBefore - recs[i].scalers[vch].lmBefore; - vchtoznc[i] = (double_t)(had) / zncpp[i] ; - //std::cout << "mu:" << mu << " zncpp corr:" << zncipp << " zncraw:" << znci << " tce:" << tcec << " tce/had" << tcec/zncpp[i] << std::endl; - } + vchtoznc[i] = (double_t)(had) / zncpp[i]; + // std::cout << "mu:" << mu << " zncpp corr:" << zncipp << " zncraw:" << znci << " tce:" << tcec << " tce/had" << tcec/zncpp[i] << std::endl; + } } // - TFile myfile("file.root","RECREATE"); + TFile myfile("file.root", "RECREATE"); gStyle->SetMarkerSize(0.5); - //TGraph* gr1 = new TGraph(n, x, znc); + // TGraph* gr1 = new TGraph(n, x, znc); TGraphErrors* gr1 = new TGraphErrors(n, x, znc, ex, eznc); TGraph* gr2 = new TGraph(n, x, tcetsctoznc); - //TGraphErrors* gr2 = new TGraphErrors(n, x, tcetsctoznc, ex, etcetsctoznc); // nom and denom are strongly correlated + // TGraphErrors* gr2 = new TGraphErrors(n, x, tcetsctoznc, ex, etcetsctoznc); // nom and denom are strongly correlated TGraph* gr3 = new TGraph(n, x, tcetoznc); TGraph* gr4 = new TGraph(n, x, vchtoznc); gr1->SetMarkerStyle(20); @@ -198,9 +198,9 @@ void PlotPbLumi(int runNumber, int fillN = 0, int QCDB = 0, std::string ccdbHos gr4->SetMarkerStyle(23); gr1->SetTitle("R=ZNC/28 rate [Hz]; time[sec]; R"); gr2->SetTitle("R=(TSC+TCE)*TVTX*B*28/ZNC; time[sec]; R"); - //gr2->SetTitle("R=TSC*TVTX*B*28/ZNC; time[sec]; R"); - // gr2->GetHistogram()->SetMaximum(1.1); - // gr2->GetHistogram()->SetMinimum(0.9); + // gr2->SetTitle("R=TSC*TVTX*B*28/ZNC; time[sec]; R"); + // gr2->GetHistogram()->SetMaximum(1.1); + // gr2->GetHistogram()->SetMinimum(0.9); gr3->SetTitle("R=(TCE)*TVTX*B*28/ZNC; time[sec]; R"); // gr3->GetHistogram()->SetMaximum(0.6); // gr3->GetHistogram()->SetMinimum(0.4); @@ -208,16 +208,16 @@ void PlotPbLumi(int runNumber, int fillN = 0, int QCDB = 0, std::string ccdbHos // gr4->GetHistogram()->SetMaximum(0.6); // gr4->GetHistogram()->SetMinimum(0.4); TCanvas* c1 = new TCanvas("c1", srun.c_str(), 200, 10, 800, 500); - TF1 *fun = new TF1("poly0","[0]+x*[1]"); + TF1* fun = new TF1("poly0", "[0]+x*[1]"); c1->Divide(2, 2); c1->cd(1); gr1->Draw("AP"); c1->cd(2); - fun->SetParameter(0,1); - gr2->Fit("poly0","FM"); + fun->SetParameter(0, 1); + gr2->Fit("poly0", "FM"); gr2->Draw("AP"); c1->cd(3); - fun->SetParameter(0,0.5); + fun->SetParameter(0, 0.5); gr3->Fit("poly0"); gr3->Draw("AP"); c1->cd(4); diff --git a/Detectors/CTP/macro/TestConfig.C b/Detectors/CTP/macro/TestConfig.C index ad3397406b547..c520464f3ca9b 100644 --- a/Detectors/CTP/macro/TestConfig.C +++ b/Detectors/CTP/macro/TestConfig.C @@ -21,7 +21,7 @@ void TestConfig(bool test = 1) if (test == 0) { return; } - uint64_t timestamp = 1660276134898+10000; + uint64_t timestamp = 1660276134898 + 10000; std::string run = "523186"; o2::ctp::ctpCCDBManager::setCCDBHost("https://alice-ccdb.cern.ch"); bool ok; @@ -35,12 +35,12 @@ void TestConfig(bool test = 1) auto& triggerclasses = ctpconfig.getCTPClasses(); std::cout << "Found " << triggerclasses.size() << " trigger classes" << std::endl; for (const auto& trg : triggerclasses) { - if (trg.cluster->maskCluster[o2::detectors::DetID::EMC]) { - // Class triggering EMCAL cluster - LOG(info) << "Found trigger class for EMCAL cluster: " << trg.name << " with input mask " << std::bitset<64>(trg.descriptor->getInputsMask()); - trg.descriptor->getInputsMask(); - } + if (trg.cluster->maskCluster[o2::detectors::DetID::EMC]) { + // Class triggering EMCAL cluster + LOG(info) << "Found trigger class for EMCAL cluster: " << trg.name << " with input mask " << std::bitset<64>(trg.descriptor->getInputsMask()); + trg.descriptor->getInputsMask(); } + } return; int indexInList = 0; for (const auto& trgclass : triggerclasses) { diff --git a/Detectors/CTP/macro/TestFetcher.C b/Detectors/CTP/macro/TestFetcher.C index 40458909b4728..fb949c92d6c6a 100644 --- a/Detectors/CTP/macro/TestFetcher.C +++ b/Detectors/CTP/macro/TestFetcher.C @@ -25,7 +25,7 @@ void TestFetcher(int runNumber = 559456) // Opening run CTPRateFetcher fetcher; fetcher.setupRun(runNumber, &ccdb, ts, 0); - //ccdb.setURL("http://ali-qcdb-gpn.cern.ch:8083/"); + // ccdb.setURL("http://ali-qcdb-gpn.cern.ch:8083/"); ccdb.setURL("http://ccdb-test.cern.ch:8080/"); std::string QCDBPathCTPScalers = "qc/CTP/Scalers"; diff --git a/Detectors/CTP/reconstruction/include/CTPReconstruction/RawDataDecoder.h b/Detectors/CTP/reconstruction/include/CTPReconstruction/RawDataDecoder.h index 53a419b38106a..94f7766b9abeb 100644 --- a/Detectors/CTP/reconstruction/include/CTPReconstruction/RawDataDecoder.h +++ b/Detectors/CTP/reconstruction/include/CTPReconstruction/RawDataDecoder.h @@ -44,7 +44,7 @@ class RawDataDecoder void setVerbose(bool v) { mVerbose = v; } void setMAXErrors(int m) { mErrorMax = m; } int setLumiInp(int lumiinp, std::string inp); - void setCTPConfig( CTPConfiguration cfg) { mCTPConfig = std::move(cfg); }; + void setCTPConfig(CTPConfiguration cfg) { mCTPConfig = std::move(cfg); }; uint32_t getIRRejected() const { return mIRRejected; } uint32_t getTCRRejected() const { return mTCRRejected; } std::vector& getTFOrbits() { return mTFOrbits; } diff --git a/Detectors/CTP/workflow/src/RawDecoderSpec.cxx b/Detectors/CTP/workflow/src/RawDecoderSpec.cxx index 23146cac6e4fa..26135d717dab3 100644 --- a/Detectors/CTP/workflow/src/RawDecoderSpec.cxx +++ b/Detectors/CTP/workflow/src/RawDecoderSpec.cxx @@ -137,10 +137,10 @@ void RawDecoderSpec::run(framework::ProcessingContext& ctx) if (fatal_flag) { ret = mDecoder.decodeRawFatal(inputs, filter); } else { - if(mDecodeinputs) { - const auto ctpcfg = inputs.get("ctpconfig"); - //ctpcfg->printStream(std::cout); - mDecoder.setCTPConfig(*ctpcfg); + if (mDecodeinputs) { + const auto ctpcfg = inputs.get("ctpconfig"); + // ctpcfg->printStream(std::cout); + mDecoder.setCTPConfig(*ctpcfg); } ret = mDecoder.decodeRaw(inputs, filter, mOutputDigits, lumiPointsHBF1); } @@ -184,7 +184,6 @@ void RawDecoderSpec::run(framework::ProcessingContext& ctx) } mOutputLumiInfo.counts = mCountsT; - mOutputLumiInfo.countsFV0 = mCountsV; mOutputLumiInfo.nHBFCounted = mNHBIntegratedT; mOutputLumiInfo.nHBFCountedFV0 = mNHBIntegratedV; From ba4bea3220a22962cfa68259a0b819820d460db2 Mon Sep 17 00:00:00 2001 From: lietava Date: Sat, 16 Nov 2024 12:34:41 +0100 Subject: [PATCH 05/18] dev: ctp config added also to CTF decoder --- Detectors/CTP/macro/TestConfig.C | 1 + .../include/CTPReconstruction/CTFCoder.h | 11 ++++++++++- .../CTP/reconstruction/src/RawDataDecoder.cxx | 17 ++++++++++++++--- .../CTP/workflow/src/EntropyDecoderSpec.cxx | 9 ++++++++- Detectors/CTP/workflow/src/RawDecoderSpec.cxx | 5 +++-- 5 files changed, 36 insertions(+), 7 deletions(-) diff --git a/Detectors/CTP/macro/TestConfig.C b/Detectors/CTP/macro/TestConfig.C index c520464f3ca9b..fe39bd04cbe9a 100644 --- a/Detectors/CTP/macro/TestConfig.C +++ b/Detectors/CTP/macro/TestConfig.C @@ -13,6 +13,7 @@ #include #include #include "CTPWorkflowScalers/ctpCCDBManager.h" +#include "Framework/Logger.h" #endif using namespace o2::ctp; diff --git a/Detectors/CTP/reconstruction/include/CTPReconstruction/CTFCoder.h b/Detectors/CTP/reconstruction/include/CTPReconstruction/CTFCoder.h index 6ffb3575207e5..96e91a5f9368f 100644 --- a/Detectors/CTP/reconstruction/include/CTPReconstruction/CTFCoder.h +++ b/Detectors/CTP/reconstruction/include/CTPReconstruction/CTFCoder.h @@ -25,6 +25,7 @@ #include "DetectorsBase/CTFCoderBase.h" #include "CTPReconstruction/CTFHelper.h" #include "CTPReconstruction/RawDataDecoder.h" +#include "DataFormatsCTP/Configuration.h" class TTree; @@ -53,6 +54,8 @@ class CTFCoder : public o2::ctf::CTFCoderBase void createCoders(const std::vector& bufVec, o2::ctf::CTFCoderBase::OpType op) final; void setDecodeInps(bool decodeinps) { mDecodeInps = decodeinps; } + void setCTPConfig(CTPConfiguration cfg) { mCTPConfig = std::move(cfg); } + bool getDecodeInps() { return mDecodeInps; } bool canApplyBCShiftInputs(const o2::InteractionRecord& ir) const { return canApplyBCShift(ir, mBCShiftInputs); } private: @@ -62,6 +65,7 @@ class CTFCoder : public o2::ctf::CTFCoderBase void appendToTree(TTree& tree, CTF& ec); void readFromTree(TTree& tree, int entry, std::vector& data, LumiInfo& lumi); std::vector mDataFilt; + CTPConfiguration mCTPConfig; int mBCShiftInputs = 0; bool mDecodeInps = false; }; @@ -215,8 +219,13 @@ o2::ctf::CTFIOSize CTFCoder::decode(const CTF::base& ec, VTRG& data, LumiInfo& l } } if (mDecodeInps) { + uint64_t trgclassmask = 0xffffffffffffffff; + if(mCTPConfig.getRunNumber() != 0) { + trgclassmask = mCTPConfig.getTriggerClassMask(); + } + std::cout << "trgclassmask:" << std::hex << trgclassmask << std::dec << std::endl; o2::pmr::vector digits; - o2::ctp::RawDataDecoder::shiftInputs(digitsMap, digits, mFirstTFOrbit); + o2::ctp::RawDataDecoder::shiftInputs(digitsMap, digits, mFirstTFOrbit, trgclassmask); for (auto const& dig : digits) { data.emplace_back(dig); } diff --git a/Detectors/CTP/reconstruction/src/RawDataDecoder.cxx b/Detectors/CTP/reconstruction/src/RawDataDecoder.cxx index 946bd77d86f22..6f08e163496f9 100644 --- a/Detectors/CTP/reconstruction/src/RawDataDecoder.cxx +++ b/Detectors/CTP/reconstruction/src/RawDataDecoder.cxx @@ -293,7 +293,10 @@ int RawDataDecoder::decodeRaw(o2::framework::InputRecord& inputs, std::vector& digit int nL1 = 0; int nTwI = 0; int nTwoI = 0; + int nTwoIlost = 0; std::map digitsMapShifted; auto L0shift = o2::ctp::TriggerOffsetsParam::Instance().LM_L0; auto L1shift = L0shift + o2::ctp::TriggerOffsetsParam::Instance().L0_L1 + 1; @@ -600,13 +604,20 @@ int RawDataDecoder::shiftInputs(std::map& digit if (d.CTPInputMask.count()) { nTwI++; } else { - nTwoI++; + if(d.intRecord.bc == (o2::constants::lhc::LHCMaxBunches - L1shift)) { // input can be lost because latency class-l1input = 1 + nTwoIlost++; + } else { + LOG(error) << d.intRecord << " " << d.CTPClassMask << " " << d.CTPInputMask; + //std::cout << std::hex << d.CTPClassMask << " " << d.CTPInputMask << std::dec << std::endl; + nTwoI++; + } } } digits.push_back(dig.second); } - if (nTwoI) { // Trigger class wo Input + if (nTwoI || nTwoIlost) { // Trigger class wo Input LOG(error) << "LM:" << nLM << " L0:" << nL0 << " L1:" << nL1 << " TwI:" << nTwI << " Trigger classes wo input:" << nTwoI; + LOG(warn) << " Trigger classes wo input from diff latency 1:" << nTwoIlost; } return 0; } diff --git a/Detectors/CTP/workflow/src/EntropyDecoderSpec.cxx b/Detectors/CTP/workflow/src/EntropyDecoderSpec.cxx index 8f3da5f439f80..b5657ef921c49 100644 --- a/Detectors/CTP/workflow/src/EntropyDecoderSpec.cxx +++ b/Detectors/CTP/workflow/src/EntropyDecoderSpec.cxx @@ -57,13 +57,20 @@ void EntropyDecoderSpec::run(ProcessingContext& pc) mCTFCoder.updateTimeDependentParams(pc, true); auto buff = pc.inputs().get>("ctf_CTP"); - + + const auto ctpcfg = pc.inputs().get("ctpconfig"); auto& digits = pc.outputs().make>(OutputRef{"digits"}); auto& lumi = pc.outputs().make(OutputRef{"CTPLumi"}); // since the buff is const, we cannot use EncodedBlocks::relocate directly, instead we wrap its data to another flat object if (buff.size()) { const auto ctfImage = o2::ctp::CTF::getImage(buff.data()); + if(mCTFCoder.getDecodeInps()){ + const auto ctpcfg = pc.inputs().get("ctpconfig"); + if(ctpcfg != nullptr) { + mCTFCoder.setCTPConfig(*ctpcfg); + } + } iosize = mCTFCoder.decode(ctfImage, digits, lumi); } pc.outputs().snapshot({"ctfrep", 0}, iosize); diff --git a/Detectors/CTP/workflow/src/RawDecoderSpec.cxx b/Detectors/CTP/workflow/src/RawDecoderSpec.cxx index 26135d717dab3..47d8cb9188494 100644 --- a/Detectors/CTP/workflow/src/RawDecoderSpec.cxx +++ b/Detectors/CTP/workflow/src/RawDecoderSpec.cxx @@ -139,8 +139,9 @@ void RawDecoderSpec::run(framework::ProcessingContext& ctx) } else { if (mDecodeinputs) { const auto ctpcfg = inputs.get("ctpconfig"); - // ctpcfg->printStream(std::cout); - mDecoder.setCTPConfig(*ctpcfg); + if(ctpcfg != nullptr) { + mDecoder.setCTPConfig(*ctpcfg); + } } ret = mDecoder.decodeRaw(inputs, filter, mOutputDigits, lumiPointsHBF1); } From 0de363f5596be5488cdad3cd3fa58172dd51c23a Mon Sep 17 00:00:00 2001 From: lietava Date: Sat, 16 Nov 2024 12:35:22 +0100 Subject: [PATCH 06/18] clang --- .../reconstruction/include/CTPReconstruction/CTFCoder.h | 2 +- Detectors/CTP/reconstruction/src/RawDataDecoder.cxx | 8 ++++---- Detectors/CTP/workflow/src/EntropyDecoderSpec.cxx | 6 +++--- Detectors/CTP/workflow/src/RawDecoderSpec.cxx | 2 +- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/Detectors/CTP/reconstruction/include/CTPReconstruction/CTFCoder.h b/Detectors/CTP/reconstruction/include/CTPReconstruction/CTFCoder.h index 96e91a5f9368f..fa01e4fc6eeb1 100644 --- a/Detectors/CTP/reconstruction/include/CTPReconstruction/CTFCoder.h +++ b/Detectors/CTP/reconstruction/include/CTPReconstruction/CTFCoder.h @@ -220,7 +220,7 @@ o2::ctf::CTFIOSize CTFCoder::decode(const CTF::base& ec, VTRG& data, LumiInfo& l } if (mDecodeInps) { uint64_t trgclassmask = 0xffffffffffffffff; - if(mCTPConfig.getRunNumber() != 0) { + if (mCTPConfig.getRunNumber() != 0) { trgclassmask = mCTPConfig.getTriggerClassMask(); } std::cout << "trgclassmask:" << std::hex << trgclassmask << std::dec << std::endl; diff --git a/Detectors/CTP/reconstruction/src/RawDataDecoder.cxx b/Detectors/CTP/reconstruction/src/RawDataDecoder.cxx index 6f08e163496f9..a72b784378d46 100644 --- a/Detectors/CTP/reconstruction/src/RawDataDecoder.cxx +++ b/Detectors/CTP/reconstruction/src/RawDataDecoder.cxx @@ -294,7 +294,7 @@ int RawDataDecoder::decodeRaw(o2::framework::InputRecord& inputs, std::vector& digit if (d.CTPInputMask.count()) { nTwI++; } else { - if(d.intRecord.bc == (o2::constants::lhc::LHCMaxBunches - L1shift)) { // input can be lost because latency class-l1input = 1 + if (d.intRecord.bc == (o2::constants::lhc::LHCMaxBunches - L1shift)) { // input can be lost because latency class-l1input = 1 nTwoIlost++; } else { - LOG(error) << d.intRecord << " " << d.CTPClassMask << " " << d.CTPInputMask; - //std::cout << std::hex << d.CTPClassMask << " " << d.CTPInputMask << std::dec << std::endl; + LOG(error) << d.intRecord << " " << d.CTPClassMask << " " << d.CTPInputMask; + // std::cout << std::hex << d.CTPClassMask << " " << d.CTPInputMask << std::dec << std::endl; nTwoI++; } } diff --git a/Detectors/CTP/workflow/src/EntropyDecoderSpec.cxx b/Detectors/CTP/workflow/src/EntropyDecoderSpec.cxx index b5657ef921c49..b61c7265f2489 100644 --- a/Detectors/CTP/workflow/src/EntropyDecoderSpec.cxx +++ b/Detectors/CTP/workflow/src/EntropyDecoderSpec.cxx @@ -57,7 +57,7 @@ void EntropyDecoderSpec::run(ProcessingContext& pc) mCTFCoder.updateTimeDependentParams(pc, true); auto buff = pc.inputs().get>("ctf_CTP"); - + const auto ctpcfg = pc.inputs().get("ctpconfig"); auto& digits = pc.outputs().make>(OutputRef{"digits"}); auto& lumi = pc.outputs().make(OutputRef{"CTPLumi"}); @@ -65,9 +65,9 @@ void EntropyDecoderSpec::run(ProcessingContext& pc) // since the buff is const, we cannot use EncodedBlocks::relocate directly, instead we wrap its data to another flat object if (buff.size()) { const auto ctfImage = o2::ctp::CTF::getImage(buff.data()); - if(mCTFCoder.getDecodeInps()){ + if (mCTFCoder.getDecodeInps()) { const auto ctpcfg = pc.inputs().get("ctpconfig"); - if(ctpcfg != nullptr) { + if (ctpcfg != nullptr) { mCTFCoder.setCTPConfig(*ctpcfg); } } diff --git a/Detectors/CTP/workflow/src/RawDecoderSpec.cxx b/Detectors/CTP/workflow/src/RawDecoderSpec.cxx index 47d8cb9188494..82f06f3784879 100644 --- a/Detectors/CTP/workflow/src/RawDecoderSpec.cxx +++ b/Detectors/CTP/workflow/src/RawDecoderSpec.cxx @@ -139,7 +139,7 @@ void RawDecoderSpec::run(framework::ProcessingContext& ctx) } else { if (mDecodeinputs) { const auto ctpcfg = inputs.get("ctpconfig"); - if(ctpcfg != nullptr) { + if (ctpcfg != nullptr) { mDecoder.setCTPConfig(*ctpcfg); } } From 08537a42b55dce6741684c7ec464e6012c996bdf Mon Sep 17 00:00:00 2001 From: lietava Date: Fri, 22 Nov 2024 18:51:15 +0100 Subject: [PATCH 07/18] fix: getting ctpconfig --- Detectors/CTP/macro/TestConfig.C | 3 ++- Detectors/CTP/reconstruction/src/RawDataDecoder.cxx | 8 +++++--- Detectors/CTP/workflow/src/EntropyDecoderSpec.cxx | 2 +- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/Detectors/CTP/macro/TestConfig.C b/Detectors/CTP/macro/TestConfig.C index fe39bd04cbe9a..66af8393bb4ff 100644 --- a/Detectors/CTP/macro/TestConfig.C +++ b/Detectors/CTP/macro/TestConfig.C @@ -13,8 +13,9 @@ #include #include #include "CTPWorkflowScalers/ctpCCDBManager.h" -#include "Framework/Logger.h" #endif + +#include "Framework/Logger.h" using namespace o2::ctp; void TestConfig(bool test = 1) diff --git a/Detectors/CTP/reconstruction/src/RawDataDecoder.cxx b/Detectors/CTP/reconstruction/src/RawDataDecoder.cxx index a72b784378d46..c0b6d417cd904 100644 --- a/Detectors/CTP/reconstruction/src/RawDataDecoder.cxx +++ b/Detectors/CTP/reconstruction/src/RawDataDecoder.cxx @@ -607,16 +607,18 @@ int RawDataDecoder::shiftInputs(std::map& digit if (d.intRecord.bc == (o2::constants::lhc::LHCMaxBunches - L1shift)) { // input can be lost because latency class-l1input = 1 nTwoIlost++; } else { - LOG(error) << d.intRecord << " " << d.CTPClassMask << " " << d.CTPInputMask; - // std::cout << std::hex << d.CTPClassMask << " " << d.CTPInputMask << std::dec << std::endl; + //LOG(error) << d.intRecord << " " << d.CTPClassMask << " " << d.CTPInputMask; + //std::cout << "ERROR:" << std::hex << d.CTPClassMask << " " << d.CTPInputMask << std::dec << std::endl; nTwoI++; } } } digits.push_back(dig.second); } - if (nTwoI || nTwoIlost) { // Trigger class wo Input + if (nTwoI) { // Trigger class wo Input LOG(error) << "LM:" << nLM << " L0:" << nL0 << " L1:" << nL1 << " TwI:" << nTwI << " Trigger classes wo input:" << nTwoI; + } + if(nTwoIlost) { LOG(warn) << " Trigger classes wo input from diff latency 1:" << nTwoIlost; } return 0; diff --git a/Detectors/CTP/workflow/src/EntropyDecoderSpec.cxx b/Detectors/CTP/workflow/src/EntropyDecoderSpec.cxx index b61c7265f2489..c7b890f03d421 100644 --- a/Detectors/CTP/workflow/src/EntropyDecoderSpec.cxx +++ b/Detectors/CTP/workflow/src/EntropyDecoderSpec.cxx @@ -95,7 +95,7 @@ DataProcessorSpec getEntropyDecoderSpec(int verbosity, unsigned int sspec) inputs.emplace_back("ctf_CTP", "CTP", "CTFDATA", sspec, Lifetime::Timeframe); inputs.emplace_back("ctfdict_CTP", "CTP", "CTFDICT", 0, Lifetime::Condition, ccdbParamSpec("CTP/Calib/CTFDictionaryTree")); inputs.emplace_back("trigoffset", "CTP", "Trig_Offset", 0, Lifetime::Condition, ccdbParamSpec("CTP/Config/TriggerOffsets")); - + inputs.emplace_back("ctpconfig", "CTP", "CTPCONFIG", 0, Lifetime::Condition, ccdbParamSpec("CTP/Config/Config", 1)); return DataProcessorSpec{ "ctp-entropy-decoder", inputs, From d2f967dbded171fd4a163f19a472e88275f4bbee Mon Sep 17 00:00:00 2001 From: lietava Date: Fri, 22 Nov 2024 18:51:59 +0100 Subject: [PATCH 08/18] clang --- Detectors/CTP/reconstruction/src/RawDataDecoder.cxx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Detectors/CTP/reconstruction/src/RawDataDecoder.cxx b/Detectors/CTP/reconstruction/src/RawDataDecoder.cxx index c0b6d417cd904..41b2556162561 100644 --- a/Detectors/CTP/reconstruction/src/RawDataDecoder.cxx +++ b/Detectors/CTP/reconstruction/src/RawDataDecoder.cxx @@ -607,8 +607,8 @@ int RawDataDecoder::shiftInputs(std::map& digit if (d.intRecord.bc == (o2::constants::lhc::LHCMaxBunches - L1shift)) { // input can be lost because latency class-l1input = 1 nTwoIlost++; } else { - //LOG(error) << d.intRecord << " " << d.CTPClassMask << " " << d.CTPInputMask; - //std::cout << "ERROR:" << std::hex << d.CTPClassMask << " " << d.CTPInputMask << std::dec << std::endl; + // LOG(error) << d.intRecord << " " << d.CTPClassMask << " " << d.CTPInputMask; + // std::cout << "ERROR:" << std::hex << d.CTPClassMask << " " << d.CTPInputMask << std::dec << std::endl; nTwoI++; } } @@ -618,7 +618,7 @@ int RawDataDecoder::shiftInputs(std::map& digit if (nTwoI) { // Trigger class wo Input LOG(error) << "LM:" << nLM << " L0:" << nL0 << " L1:" << nL1 << " TwI:" << nTwI << " Trigger classes wo input:" << nTwoI; } - if(nTwoIlost) { + if (nTwoIlost) { LOG(warn) << " Trigger classes wo input from diff latency 1:" << nTwoIlost; } return 0; From 6709adb246646a15958b0276b473eb42f4e6ebff Mon Sep 17 00:00:00 2001 From: lietava Date: Fri, 22 Nov 2024 18:59:30 +0100 Subject: [PATCH 09/18] fix: removing std:;cout --- .../CTP/reconstruction/include/CTPReconstruction/CTFCoder.h | 2 +- Detectors/CTP/reconstruction/src/RawDataDecoder.cxx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Detectors/CTP/reconstruction/include/CTPReconstruction/CTFCoder.h b/Detectors/CTP/reconstruction/include/CTPReconstruction/CTFCoder.h index fa01e4fc6eeb1..3cdd8481822c4 100644 --- a/Detectors/CTP/reconstruction/include/CTPReconstruction/CTFCoder.h +++ b/Detectors/CTP/reconstruction/include/CTPReconstruction/CTFCoder.h @@ -223,7 +223,7 @@ o2::ctf::CTFIOSize CTFCoder::decode(const CTF::base& ec, VTRG& data, LumiInfo& l if (mCTPConfig.getRunNumber() != 0) { trgclassmask = mCTPConfig.getTriggerClassMask(); } - std::cout << "trgclassmask:" << std::hex << trgclassmask << std::dec << std::endl; + //std::cout << "trgclassmask:" << std::hex << trgclassmask << std::dec << std::endl; o2::pmr::vector digits; o2::ctp::RawDataDecoder::shiftInputs(digitsMap, digits, mFirstTFOrbit, trgclassmask); for (auto const& dig : digits) { diff --git a/Detectors/CTP/reconstruction/src/RawDataDecoder.cxx b/Detectors/CTP/reconstruction/src/RawDataDecoder.cxx index 41b2556162561..f656d129f8a5d 100644 --- a/Detectors/CTP/reconstruction/src/RawDataDecoder.cxx +++ b/Detectors/CTP/reconstruction/src/RawDataDecoder.cxx @@ -297,7 +297,7 @@ int RawDataDecoder::decodeRaw(o2::framework::InputRecord& inputs, std::vector Date: Fri, 22 Nov 2024 18:59:50 +0100 Subject: [PATCH 10/18] clang --- .../CTP/reconstruction/include/CTPReconstruction/CTFCoder.h | 2 +- Detectors/CTP/reconstruction/src/RawDataDecoder.cxx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Detectors/CTP/reconstruction/include/CTPReconstruction/CTFCoder.h b/Detectors/CTP/reconstruction/include/CTPReconstruction/CTFCoder.h index 3cdd8481822c4..8542cf75ec270 100644 --- a/Detectors/CTP/reconstruction/include/CTPReconstruction/CTFCoder.h +++ b/Detectors/CTP/reconstruction/include/CTPReconstruction/CTFCoder.h @@ -223,7 +223,7 @@ o2::ctf::CTFIOSize CTFCoder::decode(const CTF::base& ec, VTRG& data, LumiInfo& l if (mCTPConfig.getRunNumber() != 0) { trgclassmask = mCTPConfig.getTriggerClassMask(); } - //std::cout << "trgclassmask:" << std::hex << trgclassmask << std::dec << std::endl; + // std::cout << "trgclassmask:" << std::hex << trgclassmask << std::dec << std::endl; o2::pmr::vector digits; o2::ctp::RawDataDecoder::shiftInputs(digitsMap, digits, mFirstTFOrbit, trgclassmask); for (auto const& dig : digits) { diff --git a/Detectors/CTP/reconstruction/src/RawDataDecoder.cxx b/Detectors/CTP/reconstruction/src/RawDataDecoder.cxx index f656d129f8a5d..ff76865abda6f 100644 --- a/Detectors/CTP/reconstruction/src/RawDataDecoder.cxx +++ b/Detectors/CTP/reconstruction/src/RawDataDecoder.cxx @@ -297,7 +297,7 @@ int RawDataDecoder::decodeRaw(o2::framework::InputRecord& inputs, std::vector Date: Sun, 24 Nov 2024 15:37:59 +0100 Subject: [PATCH 11/18] removing macro's modification to have cleaner PR --- Detectors/CTP/macro/PlotPbLumi.C | 124 +++++++++--------------------- Detectors/CTP/macro/TestConfig.C | 20 ++--- Detectors/CTP/macro/TestFetcher.C | 6 +- 3 files changed, 44 insertions(+), 106 deletions(-) diff --git a/Detectors/CTP/macro/PlotPbLumi.C b/Detectors/CTP/macro/PlotPbLumi.C index c6e45e8e4a1ba..6ffa1dd4cee2b 100644 --- a/Detectors/CTP/macro/PlotPbLumi.C +++ b/Detectors/CTP/macro/PlotPbLumi.C @@ -20,56 +20,37 @@ #include "CCDB/BasicCCDBManager.h" #include "DataFormatsCTP/Scalers.h" #include "DataFormatsCTP/Configuration.h" -#include -#include "TGraph.h" -#include "TGraphErrors.h" -#include "TCanvas.h" -#include "TMath.h" -#include "TStyle.h" -#include "TF1.h" #include #include #include #endif using namespace o2::ctp; -using namespace std::chrono; -// -// if fillN = 0: pileup correction not done -// QCDB =1 : use for ongoing run -// -void PlotPbLumi(int runNumber, int fillN = 0, int QCDB = 0, std::string ccdbHost = "http://alice-ccdb.cern.ch") -{ // "http://ccdb-test.cern.ch:8080" +void PlotPbLumi(int runNumber, int fillN, std::string ccdbHost = "http://ccdb-test.cern.ch:8080") +{ // + // what = 1: znc rate + // what = 2: (TCE+TSC)/ZNC + // what = 3: TCE/ZNC std::string mCCDBPathCTPScalers = "CTP/Calib/Scalers"; - std::string mQCDBPathCTPScalers = "qc/CTP/Scalers"; std::string mCCDBPathCTPConfig = "CTP/Config/Config"; auto& ccdbMgr = o2::ccdb::BasicCCDBManager::instance(); - ccdbMgr.setURL(ccdbHost); // Timestamp auto soreor = ccdbMgr.getRunDuration(runNumber); uint64_t timeStamp = (soreor.second - soreor.first) / 2 + soreor.first; std::cout << "Timestamp:" << timeStamp << std::endl; // Filling + std::string sfill = std::to_string(fillN); std::map metadata; - int nbc = 0; - if (fillN) { - std::string sfill = std::to_string(fillN); - metadata["fillNumber"] = sfill; - auto lhcifdata = ccdbMgr.getSpecific("GLO/Config/GRPLHCIF", timeStamp, metadata); - auto bfilling = lhcifdata->getBunchFilling(); - std::vector bcs = bfilling.getFilledBCs(); - nbc = bcs.size(); - std::cout << "Number of interacting bc:" << nbc << std::endl; - } - if (QCDB) { // use this option for ongoing run - mCCDBPathCTPScalers = mQCDBPathCTPScalers; - ccdbMgr.setURL("http://ccdb-test.cern.ch:8080"); - timeStamp = duration_cast(system_clock::now().time_since_epoch()).count(); - std::cout << "For scalers using Current time:" << timeStamp << std::endl; - } + metadata["fillNumber"] = sfill; + auto lhcifdata = ccdbMgr.getSpecific("GLO/Config/GRPLHCIF", timeStamp, metadata); + auto bfilling = lhcifdata->getBunchFilling(); + std::vector bcs = bfilling.getFilledBCs(); + int nbc = bcs.size(); + std::cout << "Number of interacting bc:" << nbc << std::endl; // Scalers std::string srun = std::to_string(runNumber); metadata.clear(); // can be empty metadata["runNumber"] = srun; + ccdbMgr.setURL("http://ccdb-test.cern.ch:8080"); auto scl = ccdbMgr.getSpecific(mCCDBPathCTPScalers, timeStamp, metadata); if (scl == nullptr) { LOG(info) << "CTPRunScalers not in database, timestamp:" << timeStamp; @@ -124,6 +105,8 @@ void PlotPbLumi(int runNumber, int fillN = 0, int QCDB = 0, std::string ccdbHost return; } // + // Anal + // // Times double_t frev = 11245; double_t time0 = recs[0].epochTime; @@ -131,65 +114,39 @@ void PlotPbLumi(int runNumber, int fillN = 0, int QCDB = 0, std::string ccdbHost double_t Trun = timeL - time0; double_t orbit0 = recs[0].intRecord.orbit; int n = recs.size() - 1; - if (runNumber == 559143) { - n = 400; - } - if (runNumber == 559561) { - n = n - 3; // rate drops at the end - } - if (runNumber == 559575) { - n = n - 6; - } - if (runNumber == 559617) { - n = n - 5; - } - if (runNumber == 559632) { - n = n - 6; - } std::cout << " Run duration:" << Trun << " Scalers size:" << n + 1 << std::endl; - Double_t x[n], znc[n], zncpp[n], ex[n], eznc[n]; + Double_t x[n], znc[n], zncpp[n]; Double_t tcetsctoznc[n], tcetoznc[n], vchtoznc[n]; - Double_t etcetsctoznc[n], etcetoznc[n], evchtoznc[n]; - for (int i = 0; i < n; i++) { - ex[i] = 0; x[i] = (double_t)(recs[i + 1].intRecord.orbit + recs[i].intRecord.orbit) / 2. - orbit0; x[i] *= 88e-6; // x[i] = (double_t)(recs[i+1].epochTime + recs[i].epochTime)/2.; double_t tt = (double_t)(recs[i + 1].intRecord.orbit - recs[i].intRecord.orbit); tt = tt * 88e-6; // + // std::cout << recs[i+1].scalersInps[25] << std::endl; double_t znci = (double_t)(recs[i + 1].scalersInps[25] - recs[i].scalersInps[25]); - double_t zncipp = znci; - double_t mu = 0; - if (fillN) { - mu = -TMath::Log(1. - znci / tt / nbc / frev); - zncipp = mu * nbc * frev * tt; - } + double_t mu = -TMath::Log(1. - znci / tt / nbc / frev); + double_t zncipp = mu * nbc * frev; zncpp[i] = zncipp / 28.; - znc[i] = zncipp / 28. / tt; - eznc[i] = TMath::Sqrt(zncipp) / 28. / tt; - if (1) { - // - auto had = recs[i + 1].scalers[tsc].lmBefore - recs[i].scalers[tsc].lmBefore; - had += recs[i + 1].scalers[tce].lmBefore - recs[i].scalers[tce].lmBefore; - tcetsctoznc[i] = (double_t)(had) / zncpp[i]; - etcetsctoznc[i] = TMath::Sqrt(tcetsctoznc[i] * (1 - tcetsctoznc[i]) / zncpp[i]); - had = recs[i + 1].scalers[tce].lmBefore - recs[i].scalers[tce].lmBefore; - double_t tcec = had; - tcetoznc[i] = (double_t)(had) / zncpp[i]; - had = recs[i + 1].scalers[vch].lmBefore - recs[i].scalers[vch].lmBefore; - vchtoznc[i] = (double_t)(had) / zncpp[i]; - // std::cout << "mu:" << mu << " zncpp corr:" << zncipp << " zncraw:" << znci << " tce:" << tcec << " tce/had" << tcec/zncpp[i] << std::endl; - } + znc[i] = znci / 28. / tt; + // + auto had = recs[i + 1].scalers[tce].lmBefore - recs[i].scalers[tce].lmBefore; + // std::cout << recs[i+1].scalers[tce].lmBefore << std::endl; + had += recs[i + 1].scalers[tsc].lmBefore - recs[i].scalers[tsc].lmBefore; + // rat = (double_t)(had)/double_t(recs[i+1].scalersInps[25] - recs[i].scalersInps[25])*28; + tcetsctoznc[i] = (double_t)(had) / zncpp[i] / tt; + had = recs[i + 1].scalers[tce].lmBefore - recs[i].scalers[tce].lmBefore; + // rat = (double_t)(had)/double_t(recs[i+1].scalersInps[25] - recs[i].scalersInps[25])*28; + tcetoznc[i] = (double_t)(had) / zncpp[i] / tt; + had = recs[i + 1].scalers[vch].lmBefore - recs[i].scalers[vch].lmBefore; + // rat = (double_t)(had)/double_t(recs[i+1].scalersInps[25] - recs[i].scalersInps[25])*28; + vchtoznc[i] = (double_t)(had) / zncpp[i] / tt; } // - TFile myfile("file.root", "RECREATE"); gStyle->SetMarkerSize(0.5); - // TGraph* gr1 = new TGraph(n, x, znc); - TGraphErrors* gr1 = new TGraphErrors(n, x, znc, ex, eznc); + TGraph* gr1 = new TGraph(n, x, znc); TGraph* gr2 = new TGraph(n, x, tcetsctoznc); - // TGraphErrors* gr2 = new TGraphErrors(n, x, tcetsctoznc, ex, etcetsctoznc); // nom and denom are strongly correlated TGraph* gr3 = new TGraph(n, x, tcetoznc); TGraph* gr4 = new TGraph(n, x, vchtoznc); gr1->SetMarkerStyle(20); @@ -198,9 +155,8 @@ void PlotPbLumi(int runNumber, int fillN = 0, int QCDB = 0, std::string ccdbHost gr4->SetMarkerStyle(23); gr1->SetTitle("R=ZNC/28 rate [Hz]; time[sec]; R"); gr2->SetTitle("R=(TSC+TCE)*TVTX*B*28/ZNC; time[sec]; R"); - // gr2->SetTitle("R=TSC*TVTX*B*28/ZNC; time[sec]; R"); - // gr2->GetHistogram()->SetMaximum(1.1); - // gr2->GetHistogram()->SetMinimum(0.9); + // gr2->GetHistogram()->SetMaximum(1.1); + // gr2->GetHistogram()->SetMinimum(0.9); gr3->SetTitle("R=(TCE)*TVTX*B*28/ZNC; time[sec]; R"); // gr3->GetHistogram()->SetMaximum(0.6); // gr3->GetHistogram()->SetMinimum(0.4); @@ -208,20 +164,14 @@ void PlotPbLumi(int runNumber, int fillN = 0, int QCDB = 0, std::string ccdbHost // gr4->GetHistogram()->SetMaximum(0.6); // gr4->GetHistogram()->SetMinimum(0.4); TCanvas* c1 = new TCanvas("c1", srun.c_str(), 200, 10, 800, 500); - TF1* fun = new TF1("poly0", "[0]+x*[1]"); c1->Divide(2, 2); c1->cd(1); gr1->Draw("AP"); c1->cd(2); - fun->SetParameter(0, 1); - gr2->Fit("poly0", "FM"); gr2->Draw("AP"); c1->cd(3); - fun->SetParameter(0, 0.5); - gr3->Fit("poly0"); gr3->Draw("AP"); c1->cd(4); - gr4->Fit("poly0"); gr4->Draw("AP"); // getRate test: double tt = timeStamp / 1000.; @@ -229,8 +179,4 @@ void PlotPbLumi(int runNumber, int fillN = 0, int QCDB = 0, std::string ccdbHost std::cout << "ZDC input getRateGivetT:" << r1.first / 28. << " " << r1.second / 28. << std::endl; std::pair r2 = scl->getRateGivenT(tt, tce, 1); std::cout << "LM before TCE class getRateGivetT:" << r2.first << " " << r2.second << std::endl; - gr1->Write(); - gr2->Write(); - gr3->Write(); - gr4->Write(); } diff --git a/Detectors/CTP/macro/TestConfig.C b/Detectors/CTP/macro/TestConfig.C index 66af8393bb4ff..38da821ea4807 100644 --- a/Detectors/CTP/macro/TestConfig.C +++ b/Detectors/CTP/macro/TestConfig.C @@ -14,17 +14,15 @@ #include #include "CTPWorkflowScalers/ctpCCDBManager.h" #endif - -#include "Framework/Logger.h" using namespace o2::ctp; -void TestConfig(bool test = 1) +void TestConfig(bool test = 0) { if (test == 0) { return; } - uint64_t timestamp = 1660276134898 + 10000; - std::string run = "523186"; + uint64_t timestamp = 1660196771632; + std::string run = "523148"; o2::ctp::ctpCCDBManager::setCCDBHost("https://alice-ccdb.cern.ch"); bool ok; auto ctpcfg = o2::ctp::ctpCCDBManager::getConfigFromCCDB(timestamp, run, ok); @@ -33,17 +31,13 @@ void TestConfig(bool test = 1) } CTPConfiguration ctpconfig; ctpconfig.loadConfigurationRun3(ctpcfg.getConfigString()); + // ctpconfig.printStream(std::cout); + // return; + // ctpconfig.assignDescriptors(); + // ctpconfig.createInputsInDecriptorsFromNames(); ctpconfig.printStream(std::cout); auto& triggerclasses = ctpconfig.getCTPClasses(); std::cout << "Found " << triggerclasses.size() << " trigger classes" << std::endl; - for (const auto& trg : triggerclasses) { - if (trg.cluster->maskCluster[o2::detectors::DetID::EMC]) { - // Class triggering EMCAL cluster - LOG(info) << "Found trigger class for EMCAL cluster: " << trg.name << " with input mask " << std::bitset<64>(trg.descriptor->getInputsMask()); - trg.descriptor->getInputsMask(); - } - } - return; int indexInList = 0; for (const auto& trgclass : triggerclasses) { uint64_t inputmask = 0; diff --git a/Detectors/CTP/macro/TestFetcher.C b/Detectors/CTP/macro/TestFetcher.C index fb949c92d6c6a..2d73b83cd174e 100644 --- a/Detectors/CTP/macro/TestFetcher.C +++ b/Detectors/CTP/macro/TestFetcher.C @@ -16,7 +16,7 @@ #endif using namespace o2::ctp; -void TestFetcher(int runNumber = 559456) +void TestFetcher(int runNumber = 557251) { auto& ccdb = o2::ccdb::BasicCCDBManager::instance(); std::pair pp = ccdb.getRunDuration(runNumber); @@ -25,9 +25,7 @@ void TestFetcher(int runNumber = 559456) // Opening run CTPRateFetcher fetcher; fetcher.setupRun(runNumber, &ccdb, ts, 0); - // ccdb.setURL("http://ali-qcdb-gpn.cern.ch:8083/"); - ccdb.setURL("http://ccdb-test.cern.ch:8080/"); - + ccdb.setURL("http://ali-qcdb-gpn.cern.ch:8083/"); std::string QCDBPathCTPScalers = "qc/CTP/Scalers"; map metadata; // can be empty std::string run = std::to_string(runNumber); From a48ba08f22cc08d82c35b8f3c32542feb015e780 Mon Sep 17 00:00:00 2001 From: lietava Date: Sun, 24 Nov 2024 16:54:33 +0100 Subject: [PATCH 12/18] dec: two latency vars, rew-decoder accessing ccdb --- .../CTP/include/DataFormatsCTP/TriggerOffsetsParam.h | 3 ++- Detectors/CTP/reconstruction/src/RawDataDecoder.cxx | 4 ++-- Detectors/CTP/workflow/src/RawDecoderSpec.cxx | 1 + 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/DataFormats/Detectors/CTP/include/DataFormatsCTP/TriggerOffsetsParam.h b/DataFormats/Detectors/CTP/include/DataFormatsCTP/TriggerOffsetsParam.h index f931e9eaa8360..79fa16f07b648 100644 --- a/DataFormats/Detectors/CTP/include/DataFormatsCTP/TriggerOffsetsParam.h +++ b/DataFormats/Detectors/CTP/include/DataFormatsCTP/TriggerOffsetsParam.h @@ -24,9 +24,10 @@ namespace ctp struct TriggerOffsetsParam : public o2::conf::ConfigurableParamHelper { static constexpr int MaxNDet = 32; // take with margin to account for possible changes / upgrades int64_t LM_L0 = 15; - int64_t L0_L1 = 280; + int64_t L0_L1_classes = 280; // trigger class latency int64_t globalInputsShift = 0; // Global shift of inps; customOffset[CTP] is global shift of classes int64_t customOffset[MaxNDet] = {}; + int64_t L0_L1_inputs = 281; // trigger input latency O2ParamDef(TriggerOffsetsParam, "TriggerOffsetsParam"); // boilerplate stuff + make principal key }; } // namespace ctp diff --git a/Detectors/CTP/reconstruction/src/RawDataDecoder.cxx b/Detectors/CTP/reconstruction/src/RawDataDecoder.cxx index ff76865abda6f..91a5841691e37 100644 --- a/Detectors/CTP/reconstruction/src/RawDataDecoder.cxx +++ b/Detectors/CTP/reconstruction/src/RawDataDecoder.cxx @@ -89,7 +89,7 @@ int RawDataDecoder::addCTPDigit(uint32_t linkCRU, uint32_t orbit, gbtword80_t& d } } else if (linkCRU == o2::ctp::GBTLinkIDClassRec) { int32_t BCShiftCorrection = -o2::ctp::TriggerOffsetsParam::Instance().customOffset[o2::detectors::DetID::CTP]; - int32_t offset = BCShiftCorrection + o2::ctp::TriggerOffsetsParam::Instance().LM_L0 + o2::ctp::TriggerOffsetsParam::Instance().L0_L1 - 1; + int32_t offset = BCShiftCorrection + o2::ctp::TriggerOffsetsParam::Instance().LM_L0 + o2::ctp::TriggerOffsetsParam::Instance().L0_L1_classes - 1; LOG(debug) << "tcr ir ori:" << ir; if ((ir.orbit <= mTFOrbit) && ((int32_t)ir.bc < offset)) { // LOG(warning) << "Loosing tclass:" << ir; @@ -535,7 +535,7 @@ int RawDataDecoder::shiftInputs(std::map& digit int nTwoIlost = 0; std::map digitsMapShifted; auto L0shift = o2::ctp::TriggerOffsetsParam::Instance().LM_L0; - auto L1shift = L0shift + o2::ctp::TriggerOffsetsParam::Instance().L0_L1 + 1; + auto L1shift = L0shift + o2::ctp::TriggerOffsetsParam::Instance().L0_L1_inputs; for (auto const& dig : digitsMap) { auto inpmask = dig.second.CTPInputMask; auto inpmaskLM = inpmask & LMMASKInputs; diff --git a/Detectors/CTP/workflow/src/RawDecoderSpec.cxx b/Detectors/CTP/workflow/src/RawDecoderSpec.cxx index 82f06f3784879..788c90e7d3418 100644 --- a/Detectors/CTP/workflow/src/RawDecoderSpec.cxx +++ b/Detectors/CTP/workflow/src/RawDecoderSpec.cxx @@ -209,6 +209,7 @@ o2::framework::DataProcessorSpec o2::ctp::reco_workflow::getRawDecoderSpec(bool std::vector outputs; if (digits) { inputs.emplace_back("ctpconfig", "CTP", "CTPCONFIG", 0, o2::framework::Lifetime::Condition, o2::framework::ccdbParamSpec("CTP/Config/Config", 1)); + inputs.emplace_back("trigoffset", "CTP", "Trig_Offset", 0, o2::framework::Lifetime::Condition, o2::framework::ccdbParamSpec("CTP/Config/TriggerOffsets")); outputs.emplace_back("CTP", "DIGITS", 0, o2::framework::Lifetime::Timeframe); } if (lumi) { From 5f6de5a05e3e172e7c0971176b39b2d410b51faf Mon Sep 17 00:00:00 2001 From: lietava Date: Sun, 24 Nov 2024 16:55:18 +0100 Subject: [PATCH 13/18] clang --- .../CTP/include/DataFormatsCTP/TriggerOffsetsParam.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/DataFormats/Detectors/CTP/include/DataFormatsCTP/TriggerOffsetsParam.h b/DataFormats/Detectors/CTP/include/DataFormatsCTP/TriggerOffsetsParam.h index 79fa16f07b648..078f971e717d6 100644 --- a/DataFormats/Detectors/CTP/include/DataFormatsCTP/TriggerOffsetsParam.h +++ b/DataFormats/Detectors/CTP/include/DataFormatsCTP/TriggerOffsetsParam.h @@ -24,10 +24,10 @@ namespace ctp struct TriggerOffsetsParam : public o2::conf::ConfigurableParamHelper { static constexpr int MaxNDet = 32; // take with margin to account for possible changes / upgrades int64_t LM_L0 = 15; - int64_t L0_L1_classes = 280; // trigger class latency + int64_t L0_L1_classes = 280; // trigger class latency int64_t globalInputsShift = 0; // Global shift of inps; customOffset[CTP] is global shift of classes int64_t customOffset[MaxNDet] = {}; - int64_t L0_L1_inputs = 281; // trigger input latency + int64_t L0_L1_inputs = 281; // trigger input latency O2ParamDef(TriggerOffsetsParam, "TriggerOffsetsParam"); // boilerplate stuff + make principal key }; } // namespace ctp From 61219d7f5fc9c2f5a4696bf38efbc29e4c41de36 Mon Sep 17 00:00:00 2001 From: lietava Date: Sun, 24 Nov 2024 17:35:09 +0100 Subject: [PATCH 14/18] TriggerParams old variable same name --- .../Detectors/CTP/include/DataFormatsCTP/TriggerOffsetsParam.h | 2 +- Detectors/CTP/reconstruction/src/RawDataDecoder.cxx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/DataFormats/Detectors/CTP/include/DataFormatsCTP/TriggerOffsetsParam.h b/DataFormats/Detectors/CTP/include/DataFormatsCTP/TriggerOffsetsParam.h index 078f971e717d6..692afbb74dc2c 100644 --- a/DataFormats/Detectors/CTP/include/DataFormatsCTP/TriggerOffsetsParam.h +++ b/DataFormats/Detectors/CTP/include/DataFormatsCTP/TriggerOffsetsParam.h @@ -24,7 +24,7 @@ namespace ctp struct TriggerOffsetsParam : public o2::conf::ConfigurableParamHelper { static constexpr int MaxNDet = 32; // take with margin to account for possible changes / upgrades int64_t LM_L0 = 15; - int64_t L0_L1_classes = 280; // trigger class latency + int64_t L0_L1 = 280; // trigger class latency int64_t globalInputsShift = 0; // Global shift of inps; customOffset[CTP] is global shift of classes int64_t customOffset[MaxNDet] = {}; int64_t L0_L1_inputs = 281; // trigger input latency diff --git a/Detectors/CTP/reconstruction/src/RawDataDecoder.cxx b/Detectors/CTP/reconstruction/src/RawDataDecoder.cxx index 91a5841691e37..67008f683b5a5 100644 --- a/Detectors/CTP/reconstruction/src/RawDataDecoder.cxx +++ b/Detectors/CTP/reconstruction/src/RawDataDecoder.cxx @@ -89,7 +89,7 @@ int RawDataDecoder::addCTPDigit(uint32_t linkCRU, uint32_t orbit, gbtword80_t& d } } else if (linkCRU == o2::ctp::GBTLinkIDClassRec) { int32_t BCShiftCorrection = -o2::ctp::TriggerOffsetsParam::Instance().customOffset[o2::detectors::DetID::CTP]; - int32_t offset = BCShiftCorrection + o2::ctp::TriggerOffsetsParam::Instance().LM_L0 + o2::ctp::TriggerOffsetsParam::Instance().L0_L1_classes - 1; + int32_t offset = BCShiftCorrection + o2::ctp::TriggerOffsetsParam::Instance().LM_L0 + o2::ctp::TriggerOffsetsParam::Instance().L0_L1 - 1; LOG(debug) << "tcr ir ori:" << ir; if ((ir.orbit <= mTFOrbit) && ((int32_t)ir.bc < offset)) { // LOG(warning) << "Loosing tclass:" << ir; From 4fb5a0fdde5b79caa72279d1ec10865cfb8b1f88 Mon Sep 17 00:00:00 2001 From: lietava Date: Sun, 24 Nov 2024 17:35:50 +0100 Subject: [PATCH 15/18] clang --- .../Detectors/CTP/include/DataFormatsCTP/TriggerOffsetsParam.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DataFormats/Detectors/CTP/include/DataFormatsCTP/TriggerOffsetsParam.h b/DataFormats/Detectors/CTP/include/DataFormatsCTP/TriggerOffsetsParam.h index 692afbb74dc2c..fcc2ea35216ec 100644 --- a/DataFormats/Detectors/CTP/include/DataFormatsCTP/TriggerOffsetsParam.h +++ b/DataFormats/Detectors/CTP/include/DataFormatsCTP/TriggerOffsetsParam.h @@ -24,7 +24,7 @@ namespace ctp struct TriggerOffsetsParam : public o2::conf::ConfigurableParamHelper { static constexpr int MaxNDet = 32; // take with margin to account for possible changes / upgrades int64_t LM_L0 = 15; - int64_t L0_L1 = 280; // trigger class latency + int64_t L0_L1 = 280; // trigger class latency int64_t globalInputsShift = 0; // Global shift of inps; customOffset[CTP] is global shift of classes int64_t customOffset[MaxNDet] = {}; int64_t L0_L1_inputs = 281; // trigger input latency From 0c89e30c217c534ec672fe7829467ed7c42be47b Mon Sep 17 00:00:00 2001 From: lietava Date: Tue, 26 Nov 2024 18:44:50 +0100 Subject: [PATCH 16/18] dev: reading of CCDB offset paraams in rawdatadecoder --- .../CTP/include/DataFormatsCTP/TriggerOffsetsParam.h | 4 ++-- Detectors/CTP/reconstruction/src/RawDataDecoder.cxx | 4 ++-- .../CTP/workflow/include/CTPWorkflow/RawDecoderSpec.h | 3 ++- Detectors/CTP/workflow/src/RawDecoderSpec.cxx | 11 ++++++++++- 4 files changed, 16 insertions(+), 6 deletions(-) diff --git a/DataFormats/Detectors/CTP/include/DataFormatsCTP/TriggerOffsetsParam.h b/DataFormats/Detectors/CTP/include/DataFormatsCTP/TriggerOffsetsParam.h index fcc2ea35216ec..ebd770fdb7bc3 100644 --- a/DataFormats/Detectors/CTP/include/DataFormatsCTP/TriggerOffsetsParam.h +++ b/DataFormats/Detectors/CTP/include/DataFormatsCTP/TriggerOffsetsParam.h @@ -24,10 +24,10 @@ namespace ctp struct TriggerOffsetsParam : public o2::conf::ConfigurableParamHelper { static constexpr int MaxNDet = 32; // take with margin to account for possible changes / upgrades int64_t LM_L0 = 15; - int64_t L0_L1 = 280; // trigger class latency + int64_t L0_L1 = 281; // trigger input latency int64_t globalInputsShift = 0; // Global shift of inps; customOffset[CTP] is global shift of classes int64_t customOffset[MaxNDet] = {}; - int64_t L0_L1_inputs = 281; // trigger input latency + int64_t L0_L1_classes = 280; // trigger input latency O2ParamDef(TriggerOffsetsParam, "TriggerOffsetsParam"); // boilerplate stuff + make principal key }; } // namespace ctp diff --git a/Detectors/CTP/reconstruction/src/RawDataDecoder.cxx b/Detectors/CTP/reconstruction/src/RawDataDecoder.cxx index 67008f683b5a5..74e5b7481163d 100644 --- a/Detectors/CTP/reconstruction/src/RawDataDecoder.cxx +++ b/Detectors/CTP/reconstruction/src/RawDataDecoder.cxx @@ -89,7 +89,7 @@ int RawDataDecoder::addCTPDigit(uint32_t linkCRU, uint32_t orbit, gbtword80_t& d } } else if (linkCRU == o2::ctp::GBTLinkIDClassRec) { int32_t BCShiftCorrection = -o2::ctp::TriggerOffsetsParam::Instance().customOffset[o2::detectors::DetID::CTP]; - int32_t offset = BCShiftCorrection + o2::ctp::TriggerOffsetsParam::Instance().LM_L0 + o2::ctp::TriggerOffsetsParam::Instance().L0_L1 - 1; + int32_t offset = BCShiftCorrection + o2::ctp::TriggerOffsetsParam::Instance().LM_L0 + o2::ctp::TriggerOffsetsParam::Instance().L0_L1_classes - 1; LOG(debug) << "tcr ir ori:" << ir; if ((ir.orbit <= mTFOrbit) && ((int32_t)ir.bc < offset)) { // LOG(warning) << "Loosing tclass:" << ir; @@ -535,7 +535,7 @@ int RawDataDecoder::shiftInputs(std::map& digit int nTwoIlost = 0; std::map digitsMapShifted; auto L0shift = o2::ctp::TriggerOffsetsParam::Instance().LM_L0; - auto L1shift = L0shift + o2::ctp::TriggerOffsetsParam::Instance().L0_L1_inputs; + auto L1shift = L0shift + o2::ctp::TriggerOffsetsParam::Instance().L0_L1; for (auto const& dig : digitsMap) { auto inpmask = dig.second.CTPInputMask; auto inpmaskLM = inpmask & LMMASKInputs; diff --git a/Detectors/CTP/workflow/include/CTPWorkflow/RawDecoderSpec.h b/Detectors/CTP/workflow/include/CTPWorkflow/RawDecoderSpec.h index e7ef954777cb7..f8a41cb6ebd43 100644 --- a/Detectors/CTP/workflow/include/CTPWorkflow/RawDecoderSpec.h +++ b/Detectors/CTP/workflow/include/CTPWorkflow/RawDecoderSpec.h @@ -16,6 +16,7 @@ #include #include "Framework/DataProcessorSpec.h" #include "Framework/Task.h" +#include "Framework/WorkflowSpec.h" #include "DataFormatsCTP/Digits.h" #include "DataFormatsCTP/LumiInfo.h" #include "CTPReconstruction/RawDataDecoder.h" @@ -50,7 +51,7 @@ class RawDecoderSpec : public framework::Task /// Input RawData: {"ROUT", "RAWDATA", 0, Lifetime::Timeframe} /// Output HW errors: {"CTP", "RAWHWERRORS", 0, Lifetime::Timeframe} -later void run(framework::ProcessingContext& ctx) final; - + void updateTimeDependentParams(framework::ProcessingContext& pc); protected: private: // for digits diff --git a/Detectors/CTP/workflow/src/RawDecoderSpec.cxx b/Detectors/CTP/workflow/src/RawDecoderSpec.cxx index 788c90e7d3418..ebab280305a31 100644 --- a/Detectors/CTP/workflow/src/RawDecoderSpec.cxx +++ b/Detectors/CTP/workflow/src/RawDecoderSpec.cxx @@ -13,7 +13,6 @@ #include #include "Framework/InputRecordWalker.h" #include "Framework/DataRefUtils.h" -#include "Framework/WorkflowSpec.h" #include "Framework/ConfigParamRegistry.h" #include "DetectorsRaw/RDHUtils.h" #include "CTPWorkflow/RawDecoderSpec.h" @@ -75,6 +74,7 @@ void RawDecoderSpec::endOfStream(framework::EndOfStreamContext& ec) } void RawDecoderSpec::run(framework::ProcessingContext& ctx) { + updateTimeDependentParams(ctx); mOutputDigits.clear(); std::map digits; using InputSpec = o2::framework::InputSpec; @@ -143,6 +143,7 @@ void RawDecoderSpec::run(framework::ProcessingContext& ctx) mDecoder.setCTPConfig(*ctpcfg); } } + const auto& trigOffsParam = o2::ctp::TriggerOffsetsParam::Instance(); ret = mDecoder.decodeRaw(inputs, filter, mOutputDigits, lumiPointsHBF1); } if (ret == 1) { @@ -230,3 +231,11 @@ o2::framework::DataProcessorSpec o2::ctp::reco_workflow::getRawDecoderSpec(bool {"max-input-size-fatal", o2::framework::VariantType::Bool, false, {"If true issue fatal error otherwise error on;y"}}, {"ctpinputs-decoding", o2::framework::VariantType::Bool, false, {"Inputs alignment: true - raw decoder - has to be compatible with CTF decoder: allowed options: 10,01,00"}}}}; } + void RawDecoderSpec::updateTimeDependentParams(framework::ProcessingContext& pc) + { + if (pc.services().get().globalRunNumberChanged) { + pc.inputs().get("trigoffset"); + const auto& trigOffsParam = o2::ctp::TriggerOffsetsParam::Instance(); + LOG(info) << "updateing TroggerOffsetsParam: inputs L0_L1:" << trigOffsParam.L0_L1 << " classes L0_L1:" << trigOffsParam.L0_L1_classes; + } + } From c425e86c1e0a703b492ce186c303b15e15da7164 Mon Sep 17 00:00:00 2001 From: lietava Date: Tue, 26 Nov 2024 18:45:37 +0100 Subject: [PATCH 17/18] clang --- .../CTP/include/DataFormatsCTP/TriggerOffsetsParam.h | 2 +- .../CTP/workflow/include/CTPWorkflow/RawDecoderSpec.h | 1 + Detectors/CTP/workflow/src/RawDecoderSpec.cxx | 8 ++++---- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/DataFormats/Detectors/CTP/include/DataFormatsCTP/TriggerOffsetsParam.h b/DataFormats/Detectors/CTP/include/DataFormatsCTP/TriggerOffsetsParam.h index ebd770fdb7bc3..063336e5461ce 100644 --- a/DataFormats/Detectors/CTP/include/DataFormatsCTP/TriggerOffsetsParam.h +++ b/DataFormats/Detectors/CTP/include/DataFormatsCTP/TriggerOffsetsParam.h @@ -27,7 +27,7 @@ struct TriggerOffsetsParam : public o2::conf::ConfigurableParamHelper().globalRunNumberChanged) { pc.inputs().get("trigoffset"); const auto& trigOffsParam = o2::ctp::TriggerOffsetsParam::Instance(); - LOG(info) << "updateing TroggerOffsetsParam: inputs L0_L1:" << trigOffsParam.L0_L1 << " classes L0_L1:" << trigOffsParam.L0_L1_classes; + LOG(info) << "updateing TroggerOffsetsParam: inputs L0_L1:" << trigOffsParam.L0_L1 << " classes L0_L1:" << trigOffsParam.L0_L1_classes; } - } +} From f8c8b975bfeb475b549b5a9f6a9b155556b53f81 Mon Sep 17 00:00:00 2001 From: lietava Date: Wed, 27 Nov 2024 18:33:54 +0100 Subject: [PATCH 18/18] dev: config done only if run changed --- .../include/CTPReconstruction/CTFCoder.h | 1 + .../CTPReconstruction/RawDataDecoder.h | 1 + .../include/CTPWorkflow/EntropyDecoderSpec.h | 1 + .../CTP/workflow/src/EntropyDecoderSpec.cxx | 24 ++++++++++++------- Detectors/CTP/workflow/src/RawDecoderSpec.cxx | 14 +++++------ 5 files changed, 25 insertions(+), 16 deletions(-) diff --git a/Detectors/CTP/reconstruction/include/CTPReconstruction/CTFCoder.h b/Detectors/CTP/reconstruction/include/CTPReconstruction/CTFCoder.h index 8542cf75ec270..9189df5d12685 100644 --- a/Detectors/CTP/reconstruction/include/CTPReconstruction/CTFCoder.h +++ b/Detectors/CTP/reconstruction/include/CTPReconstruction/CTFCoder.h @@ -56,6 +56,7 @@ class CTFCoder : public o2::ctf::CTFCoderBase void setDecodeInps(bool decodeinps) { mDecodeInps = decodeinps; } void setCTPConfig(CTPConfiguration cfg) { mCTPConfig = std::move(cfg); } bool getDecodeInps() { return mDecodeInps; } + CTPConfiguration& getCTPConfig() { return mCTPConfig; } bool canApplyBCShiftInputs(const o2::InteractionRecord& ir) const { return canApplyBCShift(ir, mBCShiftInputs); } private: diff --git a/Detectors/CTP/reconstruction/include/CTPReconstruction/RawDataDecoder.h b/Detectors/CTP/reconstruction/include/CTPReconstruction/RawDataDecoder.h index 94f7766b9abeb..16a8ec6a6bef1 100644 --- a/Detectors/CTP/reconstruction/include/CTPReconstruction/RawDataDecoder.h +++ b/Detectors/CTP/reconstruction/include/CTPReconstruction/RawDataDecoder.h @@ -50,6 +50,7 @@ class RawDataDecoder std::vector& getTFOrbits() { return mTFOrbits; } int getErrorIR() { return mErrorIR; } int getErrorTCR() { return mErrorTCR; } + CTPConfiguration& getCTPConfig() { return mCTPConfig; } int init(); static int shiftNew(const o2::InteractionRecord& irin, uint32_t TFOrbit, std::bitset<48>& inpmask, int64_t shift, int level, std::map& digmap); static int shiftInputs(std::map& digitsMap, o2::pmr::vector& digits, uint32_t TFOrbit, uint64_t trgclassmask = 0xffffffffffffffff); diff --git a/Detectors/CTP/workflow/include/CTPWorkflow/EntropyDecoderSpec.h b/Detectors/CTP/workflow/include/CTPWorkflow/EntropyDecoderSpec.h index 4596fe12cb31d..eee7abb08d16c 100644 --- a/Detectors/CTP/workflow/include/CTPWorkflow/EntropyDecoderSpec.h +++ b/Detectors/CTP/workflow/include/CTPWorkflow/EntropyDecoderSpec.h @@ -34,6 +34,7 @@ class EntropyDecoderSpec : public o2::framework::Task void init(o2::framework::InitContext& ic) final; void endOfStream(o2::framework::EndOfStreamContext& ec) final; void finaliseCCDB(o2::framework::ConcreteDataMatcher& matcher, void* obj) final; + void updateTimeDependentParams(framework::ProcessingContext& pc); private: o2::ctp::CTFCoder mCTFCoder; diff --git a/Detectors/CTP/workflow/src/EntropyDecoderSpec.cxx b/Detectors/CTP/workflow/src/EntropyDecoderSpec.cxx index c7b890f03d421..8c2f5d05aa031 100644 --- a/Detectors/CTP/workflow/src/EntropyDecoderSpec.cxx +++ b/Detectors/CTP/workflow/src/EntropyDecoderSpec.cxx @@ -55,22 +55,14 @@ void EntropyDecoderSpec::run(ProcessingContext& pc) mTimer.Start(false); o2::ctf::CTFIOSize iosize; - mCTFCoder.updateTimeDependentParams(pc, true); + updateTimeDependentParams(pc); auto buff = pc.inputs().get>("ctf_CTP"); - - const auto ctpcfg = pc.inputs().get("ctpconfig"); auto& digits = pc.outputs().make>(OutputRef{"digits"}); auto& lumi = pc.outputs().make(OutputRef{"CTPLumi"}); // since the buff is const, we cannot use EncodedBlocks::relocate directly, instead we wrap its data to another flat object if (buff.size()) { const auto ctfImage = o2::ctp::CTF::getImage(buff.data()); - if (mCTFCoder.getDecodeInps()) { - const auto ctpcfg = pc.inputs().get("ctpconfig"); - if (ctpcfg != nullptr) { - mCTFCoder.setCTPConfig(*ctpcfg); - } - } iosize = mCTFCoder.decode(ctfImage, digits, lumi); } pc.outputs().snapshot({"ctfrep", 0}, iosize); @@ -83,6 +75,20 @@ void EntropyDecoderSpec::endOfStream(EndOfStreamContext& ec) LOGF(info, "CTP Entropy Decoding total timing: Cpu: %.3e Real: %.3e s in %d slots", mTimer.CpuTime(), mTimer.RealTime(), mTimer.Counter() - 1); } +void EntropyDecoderSpec::updateTimeDependentParams(framework::ProcessingContext& pc) +{ + mCTFCoder.updateTimeDependentParams(pc, true); + if (pc.services().get().globalRunNumberChanged) { + const auto ctpcfg = pc.inputs().get("ctpconfig"); + if (mCTFCoder.getDecodeInps()) { + const auto ctpcfg = pc.inputs().get("ctpconfig"); + if (ctpcfg != nullptr) { + mCTFCoder.setCTPConfig(*ctpcfg); + LOG(info) << "ctpconfig for run done:" << mCTFCoder.getCTPConfig().getRunNumber(); + } + } + } +} DataProcessorSpec getEntropyDecoderSpec(int verbosity, unsigned int sspec) { diff --git a/Detectors/CTP/workflow/src/RawDecoderSpec.cxx b/Detectors/CTP/workflow/src/RawDecoderSpec.cxx index fb0f1e1e32c2a..81a927b3caee1 100644 --- a/Detectors/CTP/workflow/src/RawDecoderSpec.cxx +++ b/Detectors/CTP/workflow/src/RawDecoderSpec.cxx @@ -137,13 +137,6 @@ void RawDecoderSpec::run(framework::ProcessingContext& ctx) if (fatal_flag) { ret = mDecoder.decodeRawFatal(inputs, filter); } else { - if (mDecodeinputs) { - const auto ctpcfg = inputs.get("ctpconfig"); - if (ctpcfg != nullptr) { - mDecoder.setCTPConfig(*ctpcfg); - } - } - const auto& trigOffsParam = o2::ctp::TriggerOffsetsParam::Instance(); ret = mDecoder.decodeRaw(inputs, filter, mOutputDigits, lumiPointsHBF1); } if (ret == 1) { @@ -237,5 +230,12 @@ void RawDecoderSpec::updateTimeDependentParams(framework::ProcessingContext& pc) pc.inputs().get("trigoffset"); const auto& trigOffsParam = o2::ctp::TriggerOffsetsParam::Instance(); LOG(info) << "updateing TroggerOffsetsParam: inputs L0_L1:" << trigOffsParam.L0_L1 << " classes L0_L1:" << trigOffsParam.L0_L1_classes; + if (mDecodeinputs) { + const auto ctpcfg = pc.inputs().get("ctpconfig"); + if (ctpcfg != nullptr) { + mDecoder.setCTPConfig(*ctpcfg); + LOG(info) << "ctpconfig for run done:" << mDecoder.getCTPConfig().getRunNumber(); + } + } } }