diff --git a/core/base/CbmHistManager.cxx b/core/base/CbmHistManager.cxx old mode 100644 new mode 100755 index 19dc3be1cc63057f927edcc103cd712561dd8a3c..86d702c24fefe560ba86b0ae9017391bd75b4b8b --- 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 65e39fd098b1de946d74d84979f527eb54cd1fe7..037b2208c77bf3a233f86d67963d73da61c58879 --- 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.