From 9984c6ada24a03f10ec0c6c6bec2037a366cb797 Mon Sep 17 00:00:00 2001 From: Maximiliano Puccio Date: Mon, 29 Jul 2024 16:38:44 +0200 Subject: [PATCH 1/2] Improve histogram handling in Zorro --- EventFiltering/Zorro.cxx | 51 ++++++++++++++++++++++++++++++---------- EventFiltering/Zorro.h | 9 +++++-- 2 files changed, 45 insertions(+), 15 deletions(-) diff --git a/EventFiltering/Zorro.cxx b/EventFiltering/Zorro.cxx index 0c364ebf25d..fade4759ea5 100644 --- a/EventFiltering/Zorro.cxx +++ b/EventFiltering/Zorro.cxx @@ -12,46 +12,64 @@ #include "Zorro.h" +#include #include -#include "TList.h" - #include "CCDB/BasicCCDBManager.h" #include "CommonDataFormat/InteractionRecord.h" using o2::InteractionRecord; -void Zorro::populateHistRegistry(o2::framework::HistogramRegistry& histRegistry, std::string prefix) -{ - TList* list = histRegistry.getListOfHistograms(); - if (mSelections && list->FindObject((std::to_string(mRunNumber) + "/" + prefix + "Selections").data()) == nullptr) { - mAnalysedTriggers = histRegistry.add((std::to_string(mRunNumber) + "/" + prefix + "AnalysedTriggers").data(), "", o2::framework::HistType::kTH1D, {{mSelections->GetNbinsX() - 2, -0.5, mSelections->GetNbinsX() - 2.5}}); +namespace { + int findBin(TH1* hist, const std::string& label) { // Find bin by label, avoiding the axis extention from the native ROOT implementation + for (int iBin{1}; iBin <= hist->GetNbinsX(); ++iBin) { + if (label == hist->GetXaxis()->GetBinLabel(iBin)) { + return iBin; + } + } + return -1; + } +} + +void Zorro::populateHistRegistry(o2::framework::HistogramRegistry& histRegistry, int runNumber, std::string prefix) { + if (mRunNumberHistos == runNumber) { + return; + } + mRunNumberHistos = runNumber; + if (mSelections) { + mAnalysedTriggers = histRegistry.add((std::to_string(mRunNumberHistos) + "/" + prefix + "AnalysedTriggers").data(), "", o2::framework::HistType::kTH1D, {{mSelections->GetNbinsX() - 2 , -0.5, mSelections->GetNbinsX() - 2.5}}); for (int iBin{2}; iBin < mSelections->GetNbinsX(); ++iBin) { // Exclude first and last bins as they are total number of analysed and selected events, respectively mAnalysedTriggers->GetXaxis()->SetBinLabel(iBin - 1, mSelections->GetXaxis()->GetBinLabel(iBin)); } - std::shared_ptr selections = histRegistry.add((std::to_string(mRunNumber) + "/" + prefix + "Selections").data(), "", o2::framework::HistType::kTH1D, {{mSelections->GetNbinsX(), -0.5, static_cast(mSelections->GetNbinsX() - 0.5)}}); + std::shared_ptr selections = histRegistry.add((std::to_string(mRunNumberHistos) + "/" + prefix + "Selections").data(), "", o2::framework::HistType::kTH1D, {{mSelections->GetNbinsX(), -0.5, static_cast(mSelections->GetNbinsX() - 0.5)}}); for (int iBin{1}; iBin <= mSelections->GetNbinsX(); ++iBin) { selections->GetXaxis()->SetBinLabel(iBin, mSelections->GetXaxis()->GetBinLabel(iBin)); selections->SetBinContent(iBin, mSelections->GetBinContent(iBin)); selections->SetBinError(iBin, mSelections->GetBinError(iBin)); } } - if (mScalers && list->FindObject((std::to_string(mRunNumber) + "/" + prefix + "Scalers").data()) == nullptr) { - std::shared_ptr scalers = histRegistry.add((std::to_string(mRunNumber) + "/" + prefix + "Scalers").data(), "", o2::framework::HistType::kTH1D, {{mScalers->GetNbinsX(), -0.5, static_cast(mScalers->GetNbinsX() - 0.5)}}); + if (mScalers) { + std::shared_ptr scalers = histRegistry.add((std::to_string(mRunNumberHistos) + "/" + prefix + "Scalers").data(), "", o2::framework::HistType::kTH1D, {{mScalers->GetNbinsX(), -0.5, static_cast(mScalers->GetNbinsX() - 0.5)}}); for (int iBin{1}; iBin <= mScalers->GetNbinsX(); ++iBin) { scalers->GetXaxis()->SetBinLabel(iBin, mScalers->GetXaxis()->GetBinLabel(iBin)); scalers->SetBinContent(iBin, mScalers->GetBinContent(iBin)); scalers->SetBinError(iBin, mScalers->GetBinError(iBin)); } } - if (mInspectedTVX && list->FindObject((std::to_string(mRunNumber) + "/" + prefix + "InspectedTVX").data()) == nullptr) { - std::shared_ptr inspectedTVX = histRegistry.add((std::to_string(mRunNumber) + "/" + prefix + "InspectedTVX").data(), "", o2::framework::HistType::kTH1D, {{mInspectedTVX->GetNbinsX(), -0.5, static_cast(mInspectedTVX->GetNbinsX() - 0.5)}}); + if (mInspectedTVX) { + std::shared_ptr inspectedTVX = histRegistry.add((std::to_string(mRunNumberHistos) + "/" + prefix + "InspectedTVX").data(), "", o2::framework::HistType::kTH1D, {{mInspectedTVX->GetNbinsX(), -0.5, static_cast(mInspectedTVX->GetNbinsX() - 0.5)}}); for (int iBin{1}; iBin <= mInspectedTVX->GetNbinsX(); ++iBin) { inspectedTVX->GetXaxis()->SetBinLabel(iBin, mInspectedTVX->GetXaxis()->GetBinLabel(iBin)); inspectedTVX->SetBinContent(iBin, mInspectedTVX->GetBinContent(iBin)); inspectedTVX->SetBinError(iBin, mInspectedTVX->GetBinError(iBin)); } } + if (mTOIs.size()) { + mAnalysedTriggersOfInterest = histRegistry.add((std::to_string(mRunNumberHistos) + "/" + prefix + "AnalysedTriggersOfInterest").data(), "", o2::framework::HistType::kTH1D, {{static_cast(mTOIs.size()), -0.5, static_cast(mTOIs.size() - 0.5)}}); + for (size_t i{0}; i < mTOIs.size(); ++i) { + mAnalysedTriggersOfInterest->GetXaxis()->SetBinLabel(i + 1, mTOIs[i].data()); + } + } } std::vector Zorro::initCCDB(o2::ccdb::BasicCCDBManager* ccdb, int runNumber, uint64_t timestamp, std::string tois, int bcRange) @@ -85,12 +103,16 @@ std::vector Zorro::initCCDB(o2::ccdb::BasicCCDBManager* ccdb, int runNumber // Trim leading and trailing whitespaces from the token token.erase(0, token.find_first_not_of(" ")); token.erase(token.find_last_not_of(" ") + 1); - int bin = mScalers->GetXaxis()->FindBin(token.c_str()) - 2; + int bin = findBin(mSelections, token) - 2; mTOIs.push_back(token); mTOIidx.push_back(bin); tois = tois.erase(0, pos + 1); } mTOIcounts.resize(mTOIs.size(), 0); + LOGF(info, "Zorro initialized for run %d, triggers of interest:", runNumber); + for (size_t i{0}; i < mTOIs.size(); ++i) { + LOGF(info, ">>> %s : %i", mTOIs[i].data(), mTOIidx[i]); + } return mTOIidx; } @@ -134,6 +156,9 @@ bool Zorro::isSelected(uint64_t bcGlobalId, uint64_t tolerance) continue; } else if (mLastResult.test(mTOIidx[i])) { mTOIcounts[i] += (lastSelectedIdx != mLastSelectedIdx); /// Avoid double counting + if (mAnalysedTriggersOfInterest && lastSelectedIdx != mLastSelectedIdx) { + mAnalysedTriggersOfInterest->Fill(i); + } return true; } } diff --git a/EventFiltering/Zorro.h b/EventFiltering/Zorro.h index fdcb200d1d0..da5f249be79 100644 --- a/EventFiltering/Zorro.h +++ b/EventFiltering/Zorro.h @@ -15,6 +15,7 @@ #define EVENTFILTERING_ZORRO_H_ #include +#include #include #include @@ -22,6 +23,7 @@ #include "CommonDataFormat/IRFrame.h" #include "Framework/HistogramRegistry.h" + namespace o2 { namespace ccdb @@ -30,7 +32,8 @@ class BasicCCDBManager; }; }; // namespace o2 -struct ZorroHelper { +struct ZorroHelper +{ uint64_t bcAOD, bcEvSel, trigMask[2], selMask[2]; ClassDefNV(ZorroHelper, 1); }; @@ -43,7 +46,7 @@ class Zorro std::bitset<128> fetch(uint64_t bcGlobalId, uint64_t tolerance = 100); bool isSelected(uint64_t bcGlobalId, uint64_t tolerance = 100); - void populateHistRegistry(o2::framework::HistogramRegistry& histRegistry, std::string prefix = ""); + void populateHistRegistry(o2::framework::HistogramRegistry& histRegistry, int runNumber, std::string prefix = ""); TH1D* getScalers() const { return mScalers; } TH1D* getSelections() const { return mSelections; } @@ -58,6 +61,7 @@ class Zorro private: std::string mBaseCCDBPath = "Users/m/mpuccio/EventFiltering/OTS/"; int mRunNumber = 0; + int mRunNumberHistos = 0; int mBCtolerance = 100; uint64_t mLastBCglobalId = 0; uint64_t mLastSelectedIdx = 0; @@ -65,6 +69,7 @@ class Zorro TH1D* mSelections = nullptr; TH1D* mInspectedTVX = nullptr; std::shared_ptr mAnalysedTriggers; + std::shared_ptr mAnalysedTriggersOfInterest; std::bitset<128> mLastResult; std::vector mBCranges; std::vector* mZorroHelpers = nullptr; From a090ba279a0ceb1ae7d1e41b91f405d2de16e976 Mon Sep 17 00:00:00 2001 From: ALICE Builder Date: Mon, 29 Jul 2024 16:39:57 +0200 Subject: [PATCH 2/2] Please consider the following formatting changes (#7038) --- EventFiltering/Zorro.cxx | 21 ++++++++++++--------- EventFiltering/Zorro.h | 4 +--- 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/EventFiltering/Zorro.cxx b/EventFiltering/Zorro.cxx index fade4759ea5..1cda45241fd 100644 --- a/EventFiltering/Zorro.cxx +++ b/EventFiltering/Zorro.cxx @@ -20,24 +20,27 @@ using o2::InteractionRecord; -namespace { - int findBin(TH1* hist, const std::string& label) { // Find bin by label, avoiding the axis extention from the native ROOT implementation - for (int iBin{1}; iBin <= hist->GetNbinsX(); ++iBin) { - if (label == hist->GetXaxis()->GetBinLabel(iBin)) { - return iBin; - } +namespace +{ +int findBin(TH1* hist, const std::string& label) +{ // Find bin by label, avoiding the axis extention from the native ROOT implementation + for (int iBin{1}; iBin <= hist->GetNbinsX(); ++iBin) { + if (label == hist->GetXaxis()->GetBinLabel(iBin)) { + return iBin; } - return -1; } + return -1; } +} // namespace -void Zorro::populateHistRegistry(o2::framework::HistogramRegistry& histRegistry, int runNumber, std::string prefix) { +void Zorro::populateHistRegistry(o2::framework::HistogramRegistry& histRegistry, int runNumber, std::string prefix) +{ if (mRunNumberHistos == runNumber) { return; } mRunNumberHistos = runNumber; if (mSelections) { - mAnalysedTriggers = histRegistry.add((std::to_string(mRunNumberHistos) + "/" + prefix + "AnalysedTriggers").data(), "", o2::framework::HistType::kTH1D, {{mSelections->GetNbinsX() - 2 , -0.5, mSelections->GetNbinsX() - 2.5}}); + mAnalysedTriggers = histRegistry.add((std::to_string(mRunNumberHistos) + "/" + prefix + "AnalysedTriggers").data(), "", o2::framework::HistType::kTH1D, {{mSelections->GetNbinsX() - 2, -0.5, mSelections->GetNbinsX() - 2.5}}); for (int iBin{2}; iBin < mSelections->GetNbinsX(); ++iBin) { // Exclude first and last bins as they are total number of analysed and selected events, respectively mAnalysedTriggers->GetXaxis()->SetBinLabel(iBin - 1, mSelections->GetXaxis()->GetBinLabel(iBin)); } diff --git a/EventFiltering/Zorro.h b/EventFiltering/Zorro.h index da5f249be79..34e8ef0bb33 100644 --- a/EventFiltering/Zorro.h +++ b/EventFiltering/Zorro.h @@ -23,7 +23,6 @@ #include "CommonDataFormat/IRFrame.h" #include "Framework/HistogramRegistry.h" - namespace o2 { namespace ccdb @@ -32,8 +31,7 @@ class BasicCCDBManager; }; }; // namespace o2 -struct ZorroHelper -{ +struct ZorroHelper { uint64_t bcAOD, bcEvSel, trigMask[2], selMask[2]; ClassDefNV(ZorroHelper, 1); };