From d265d5e11e23ee62bd07cb3368236d6c27483a26 Mon Sep 17 00:00:00 2001 From: Cornelius Feier-Riesen <cornelius.riesen@physik.uni-giessen.de> Date: Fri, 1 Sep 2023 14:24:44 +0200 Subject: [PATCH] Add methods for THnSparse histograms in CbmHistManager --- core/base/CbmHistManager.cxx | 2 +- core/base/CbmHistManager.h | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+), 1 deletion(-) mode change 100644 => 100755 core/base/CbmHistManager.cxx mode change 100644 => 100755 core/base/CbmHistManager.h diff --git a/core/base/CbmHistManager.cxx b/core/base/CbmHistManager.cxx old mode 100644 new mode 100755 index 19dc3be1cc..86d702c24f --- a/core/base/CbmHistManager.cxx +++ b/core/base/CbmHistManager.cxx @@ -144,7 +144,7 @@ void CbmHistManager::ReadFromFile(TFile* file) void CbmHistManager::AddTNamedObject(TObject* obj) { if (obj->IsA()->InheritsFrom(TH1::Class()) || obj->IsA()->InheritsFrom(TGraph::Class()) - || obj->IsA()->InheritsFrom(TGraph2D::Class())) { + || obj->IsA()->InheritsFrom(TGraph2D::Class()) || obj->IsA()->InheritsFrom(THnBase::Class())) { TNamed* h = (TNamed*) obj; //TNamed* h1 = (TNamed*)file->Get(h->GetName()); Add(string(h->GetName()), h); diff --git a/core/base/CbmHistManager.h b/core/base/CbmHistManager.h old mode 100644 new mode 100755 index 65e39fd098..037b2208c7 --- a/core/base/CbmHistManager.h +++ b/core/base/CbmHistManager.h @@ -22,6 +22,7 @@ #include <TH1.h> // for TH1 #include <TH2.h> // for TH2 #include <TH3.h> // for TH3 +#include <THnSparse.h> // for THnSparse #include <TNamed.h> // for TNamed #include <TObject.h> // for TObject #include <TProfile.h> // for TProfile @@ -166,6 +167,25 @@ public: Add(name, h); } + /** + * \brief Helper function for creation of THnSparse objects. + * Template argument is a real object type that has to be created, for example, + * CreateSparse<THnSparseD>("name", "title", nDim, nBins, minVals, maxVals); + * \param[in] name Object name. + * \param[in] title Object title. + * \param[in] nDim Number of dimensions. + * \param[in] nBins Array with number of bins for each dimension. + * \param[in] minVals Array with minimum values for each dimension. + * \param[in] maxVals Array with maximum values for each dimension. + */ + template<class T> + void CreateSparse(const std::string& name, const std::string& title, Int_t nDim, const Int_t* nBins, + const Double_t* minVals, const Double_t* maxVals) + { + T* h = new T(name.c_str(), title.c_str(), nDim, nBins, minVals, maxVals); + Add(name, h); + } + TNamed* GetObject(const std::string& name) const { if (fMap.count(name) == 0) { // Temporarily used for debugging @@ -267,6 +287,20 @@ public: */ TH3* H3Clone(const std::string& name) const { return static_cast<TH3*>(H3(name)->Clone()); } + /** + * \brief Return pointer to THnSparse histogram. + * \param[in] name Name of THnSparse histogram. + * \return pointer to THnSparse histogram. + */ + THnSparse* HnSparse(const std::string& name) const + { + if (fMap.count(name) == 0) { // Temporarily used for debugging + LOG(error) << "CbmHistManager::HnSparse(name): name=" << name; + } + assert(fMap.count(name) != 0); + return dynamic_cast<THnSparse*>(fMap.find(name)->second); + } + /** * \brief Return pointer to TGraph. * \param[in] name Name of TGraph. -- GitLab