3030#include < iostream>
3131#include < list>
3232#include < memory>
33+ #include < span>
3334#include < vector>
3435using namespace std ;
3536
@@ -49,11 +50,8 @@ HistogramManager::HistogramManager() : TNamed("", ""),
4950 fMainList(nullptr ),
5051 fNVars(0 ),
5152 fUsedVars(nullptr ),
52-
5353 fUseDefaultVariableNames(false ),
54- fBinsAllocated(0 ),
55- fVariableNames(nullptr ),
56- fVariableUnits(nullptr )
54+ fBinsAllocated(0 )
5755{
5856 //
5957 // Constructor
@@ -67,9 +65,7 @@ HistogramManager::HistogramManager(const char* name, const char* title, const in
6765 fUsedVars(new bool [maxNVars]),
6866
6967 fUseDefaultVariableNames(kFALSE ),
70- fBinsAllocated(0 ),
71- fVariableNames(),
72- fVariableUnits()
68+ fBinsAllocated(0 )
7369{
7470 //
7571 // Constructor
@@ -81,8 +77,8 @@ HistogramManager::HistogramManager(const char* name, const char* title, const in
8177 for (int i = 0 ; i < maxNVars; ++i) {
8278 fUsedVars [i] = false ;
8379 }
84- fVariableNames = new TString[ maxNVars] ;
85- fVariableUnits = new TString[ maxNVars] ;
80+ fVariableNames . resize ( maxNVars) ;
81+ fVariableUnits . resize ( maxNVars) ;
8682}
8783
8884// _______________________________________________________________________________
@@ -101,9 +97,11 @@ void HistogramManager::SetDefaultVarNames(TString* vars, TString* units)
10197 //
10298 // Set default variable names
10399 //
100+ std::span<TString> varNames{vars, fNVars };
101+ std::span<TString> varUnits{units, fNVars };
104102 for (int i = 0 ; i < fNVars ; ++i) {
105- fVariableNames [i] = vars [i];
106- fVariableUnits [i] = units [i];
103+ fVariableNames [i] = varNames [i];
104+ fVariableUnits [i] = varUnits [i];
107105 }
108106};
109107
@@ -630,6 +628,11 @@ void HistogramManager::AddHistogram(const char* histClass, const char* hname, co
630628 }
631629 h->Sumw2 ();
632630
631+ std::span<TString> axisLabels{};
632+ if (axLabels) {
633+ axisLabels = std::span<TString>{axLabels, nDimensions};
634+ }
635+
633636 // configure the THn histogram and count the allocated bins
634637 for (int idim = 0 ; idim < nDimensions; ++idim) {
635638 nbins *= (nBins[idim] + 2 );
@@ -641,8 +644,8 @@ void HistogramManager::AddHistogram(const char* histClass, const char* hname, co
641644 if (arr->At (1 + idim)) {
642645 axis->SetTitle (arr->At (1 + idim)->GetName ());
643646 }
644- if (axLabels && !axLabels [idim].IsNull ()) {
645- MakeAxisLabels (axis, axLabels [idim].Data ());
647+ if (!axisLabels. empty () && !axisLabels [idim].IsNull ()) {
648+ MakeAxisLabels (axis, axisLabels [idim].Data ());
646649 }
647650
648651 fUsedVars [vars[idim]] = kTRUE ;
@@ -714,10 +717,13 @@ void HistogramManager::AddHistogram(const char* histClass, const char* hname, co
714717 auto * xmin = new double [nDimensions];
715718 auto * xmax = new double [nDimensions];
716719 int * nBins = new int [nDimensions];
720+ std::span<const TArrayD> limits{binLimits, nDimensions};
717721 for (int idim = 0 ; idim < nDimensions; ++idim) {
718- nBins[idim] = binLimits[idim].GetSize () - 1 ;
719- xmin[idim] = binLimits[idim][0 ];
720- xmax[idim] = binLimits[idim][nBins[idim]];
722+ const TArrayD& dimLimits = limits[idim];
723+ const double * dimBins = dimLimits.GetArray ();
724+ nBins[idim] = dimLimits.GetSize () - 1 ;
725+ xmin[idim] = dimBins[0 ];
726+ xmax[idim] = dimBins[nBins[idim]];
721727 }
722728
723729 // initialize the THn with equal spaced bins
@@ -738,10 +744,15 @@ void HistogramManager::AddHistogram(const char* histClass, const char* hname, co
738744 // rebin the axes according to the user requested binning
739745 for (int idim = 0 ; idim < nDimensions; ++idim) {
740746 TAxis* axis = h->GetAxis (idim);
741- axis->Set (nBins[idim], binLimits [idim].GetArray ());
747+ axis->Set (nBins[idim], limits [idim].GetArray ());
742748 }
743749 h->Sumw2 ();
744750
751+ std::span<TString> axisLabels{};
752+ if (axLabels) {
753+ axisLabels = std::span<TString>{axLabels, nDimensions};
754+ }
755+
745756 uint32_t bins = 1 ;
746757 for (int idim = 0 ; idim < nDimensions; ++idim) {
747758 bins *= (nBins[idim] + 2 );
@@ -753,8 +764,8 @@ void HistogramManager::AddHistogram(const char* histClass, const char* hname, co
753764 if (arr->At (1 + idim)) {
754765 axis->SetTitle (arr->At (1 + idim)->GetName ());
755766 }
756- if (axLabels && !axLabels [idim].IsNull ()) {
757- MakeAxisLabels (axis, axLabels [idim].Data ());
767+ if (!axisLabels. empty () && !axisLabels [idim].IsNull ()) {
768+ MakeAxisLabels (axis, axisLabels [idim].Data ());
758769 }
759770 fUsedVars [vars[idim]] = kTRUE ;
760771 }
0 commit comments