diff --git a/Analysis/EventFiltering/cefpTask.cxx b/Analysis/EventFiltering/cefpTask.cxx index 7fcf06ac2b6ff..b6992e9620c03 100644 --- a/Analysis/EventFiltering/cefpTask.cxx +++ b/Analysis/EventFiltering/cefpTask.cxx @@ -118,10 +118,8 @@ struct centralEventFilterTask { } LOG(INFO) << "Middle init, total number of columns " << nCols; - scalers.add("mScalers", "", HistType::kTH1F, {{nCols + 1, -0.5, 0.5 + nCols, ";;Number of events"}}); - scalers.add("mFiltered", "", HistType::kTH1F, {{nCols + 1, -0.5, 0.5 + nCols, ";;Number of filtered events"}}); - auto mScalers = scalers.get(HIST("mScalers")); - auto mFiltered = scalers.get(HIST("mFiltered")); + auto mScalers = std::get>(scalers.add("mScalers", ";;Number of events", HistType::kTH1F, {{nCols + 1, -0.5, 0.5 + nCols}})); + auto mFiltered = std::get>(scalers.add("mFiltered", ";;Number of filtered events", HistType::kTH1F, {{nCols + 1, -0.5, 0.5 + nCols}})); mScalers->GetXaxis()->SetBinLabel(1, "Total number of events"); mFiltered->GetXaxis()->SetBinLabel(1, "Total number of events"); @@ -143,13 +141,15 @@ struct centralEventFilterTask { void run(ProcessingContext& pc) { + auto mScalers{scalers.get(HIST("mScalers"))}; + auto mFiltered{scalers.get(HIST("mFiltered"))}; - auto mScalers = scalers.get(HIST("mScalers")); - auto mFiltered = scalers.get(HIST("mFiltered")); int64_t nEvents{-1}; for (auto& tableName : mDownscaling) { + if (!pc.inputs().isValid(tableName.first)) { + LOG(FATAL) << tableName.first << " table is not valid."; + } auto tableConsumer = pc.inputs().get(tableName.first); - auto tablePtr{tableConsumer->asArrowTable()}; int64_t nRows{tablePtr->num_rows()}; nEvents = nEvents < 0 ? nRows : nEvents; diff --git a/Analysis/EventFiltering/nucleiFilter.cxx b/Analysis/EventFiltering/nucleiFilter.cxx index 34b158bf0751e..106085223c8ef 100644 --- a/Analysis/EventFiltering/nucleiFilter.cxx +++ b/Analysis/EventFiltering/nucleiFilter.cxx @@ -80,7 +80,11 @@ struct nucleiFilter { spectra.add("fCollZpos", "collision z position", HistType::kTH1F, {{600, -20., +20., "z position (cm)"}}); spectra.add("fTPCsignal", "Specific energy loss", HistType::kTH2F, {{600, 0., 3, "#it{p} (GeV/#it{c})"}, {1400, 0, 1400, "d#it{E} / d#it{X} (a. u.)"}}); spectra.add("fTPCcounts", "n-sigma TPC", HistType::kTH2F, {ptAxis, {200, -100., +100., "n#sigma_{He} (a. u.)"}}); - spectra.add("fProcessedEvents", "Nuclei - event filtered", HistType::kTH1F, {{4, -0.5, 3.5, "Event counter"}}); + + auto scalers{std::get>(spectra.add("fProcessedEvents", ";;Number of filtered events", HistType::kTH1F, {{4, -0.5, 3.5}}))}; + for (uint32_t iS{1}; iS <= nucleiNames.size(); ++iS) { + scalers->GetXaxis()->SetBinLabel(iS, nucleiNames[iS - 1].data()); + } } Filter collisionFilter = nabs(aod::collision::posZ) < cfgCutVertex; @@ -95,7 +99,7 @@ struct nucleiFilter { spectra.fill(HIST("fCollZpos"), collision.posZ()); // - for (auto track : tracks) { // start loop over tracks + for (auto& track : tracks) { // start loop over tracks const float nSigmaTPC[nNuclei]{ track.tpcNSigmaDe(), track.tpcNSigmaTr(), track.tpcNSigmaHe(), track.tpcNSigmaAl()}; diff --git a/Framework/Core/include/Framework/HistogramRegistry.h b/Framework/Core/include/Framework/HistogramRegistry.h index fa02f43377ed9..eb528e6ab5039 100644 --- a/Framework/Core/include/Framework/HistogramRegistry.h +++ b/Framework/Core/include/Framework/HistogramRegistry.h @@ -90,9 +90,9 @@ class HistogramRegistry HistogramRegistry(char const* const name, std::vector histSpecs = {}, OutputObjHandlingPolicy policy = OutputObjHandlingPolicy::AnalysisObject, bool sortHistos = true, bool createRegistryDir = false); // functions to add histograms to the registry - void add(const HistogramSpec& histSpec); - void add(char const* const name, char const* const title, const HistogramConfigSpec& histConfigSpec, bool callSumw2 = false); - void add(char const* const name, char const* const title, HistType histType, std::vector axes, bool callSumw2 = false); + HistPtr add(const HistogramSpec& histSpec); + HistPtr add(char const* const name, char const* const title, const HistogramConfigSpec& histConfigSpec, bool callSumw2 = false); + HistPtr add(char const* const name, char const* const title, HistType histType, std::vector axes, bool callSumw2 = false); void addClone(const std::string& source, const std::string& target); // function to query if name is already in use @@ -137,11 +137,11 @@ class HistogramRegistry private: // create histogram from specification and insert it into the registry - void insert(const HistogramSpec& histSpec); + HistPtr insert(const HistogramSpec& histSpec); // clone an existing histogram and insert it into the registry template - void insertClone(const HistName& histName, const std::shared_ptr& originalHist); + HistPtr insertClone(const HistName& histName, const std::shared_ptr& originalHist); // helper function that checks if histogram name can be used in registry void validateHistName(const char* name, const uint32_t hash); @@ -345,7 +345,7 @@ auto& HistogramRegistry::operator()(const HistName& histName) } template -void HistogramRegistry::insertClone(const HistName& histName, const std::shared_ptr& originalHist) +HistPtr HistogramRegistry::insertClone(const HistName& histName, const std::shared_ptr& originalHist) { validateHistName(histName.str, histName.hash); for (auto i = 0u; i < MAX_REGISTRY_SIZE; ++i) { @@ -356,10 +356,11 @@ void HistogramRegistry::insertClone(const HistName& histName, const std::shared_ mRegistryKey[imask(histName.idx + i)] = histName.hash; mRegistryValue[imask(histName.idx + i)] = std::shared_ptr(static_cast(originalHist->Clone(histName.str))); lookup += i; - return; + return mRegistryValue[imask(histName.idx + i)]; } } LOGF(FATAL, R"(Internal array of HistogramRegistry "%s" is full.)", mName); + return HistPtr(); } template diff --git a/Framework/Core/src/HistogramRegistry.cxx b/Framework/Core/src/HistogramRegistry.cxx index 9ee925f93a06f..f34063c83591b 100644 --- a/Framework/Core/src/HistogramRegistry.cxx +++ b/Framework/Core/src/HistogramRegistry.cxx @@ -57,7 +57,7 @@ void HistogramRegistry::setHash(uint32_t hash) } // create histogram from specification and insert it into the registry -void HistogramRegistry::insert(const HistogramSpec& histSpec) +HistPtr HistogramRegistry::insert(const HistogramSpec& histSpec) { validateHistName(histSpec.name.data(), histSpec.hash); const uint32_t idx = imask(histSpec.hash); @@ -69,10 +69,11 @@ void HistogramRegistry::insert(const HistogramSpec& histSpec) mRegistryKey[imask(idx + i)] = histSpec.hash; mRegistryValue[imask(idx + i)] = HistFactory::createHistVariant(histSpec); lookup += i; - return; + return mRegistryValue[imask(idx + i)]; } } LOGF(FATAL, R"(Internal array of HistogramRegistry "%s" is full.)", mName); + return HistPtr(); } // helper function that checks if histogram name can be used in registry @@ -95,19 +96,19 @@ void HistogramRegistry::validateHistName(const char* name, const uint32_t hash) */ } -void HistogramRegistry::add(const HistogramSpec& histSpec) +HistPtr HistogramRegistry::add(const HistogramSpec& histSpec) { - insert(histSpec); + return insert(histSpec); } -void HistogramRegistry::add(char const* const name, char const* const title, const HistogramConfigSpec& histConfigSpec, bool callSumw2) +HistPtr HistogramRegistry::add(char const* const name, char const* const title, const HistogramConfigSpec& histConfigSpec, bool callSumw2) { - insert({name, title, histConfigSpec, callSumw2}); + return insert({name, title, histConfigSpec, callSumw2}); } -void HistogramRegistry::add(char const* const name, char const* const title, HistType histType, std::vector axes, bool callSumw2) +HistPtr HistogramRegistry::add(char const* const name, char const* const title, HistType histType, std::vector axes, bool callSumw2) { - insert({name, title, {histType, axes}, callSumw2}); + return insert({name, title, {histType, axes}, callSumw2}); } // store a copy of an existing histogram (or group of histograms) under a different name