@@ -86,6 +86,8 @@ CorrelationContainer::CorrelationContainer(const char* name, const char* objTitl
8686{
8787 // Constructor
8888
89+ using BinList = std::vector<Double_t>;
90+
8991 if (strlen (reqHist) == 0 )
9092 return ;
9193
@@ -96,12 +98,12 @@ CorrelationContainer::CorrelationContainer(const char* name, const char* objTitl
9698 // track level
9799 Int_t nTrackVars = 4 ; // eta vs pT vs pT,lead (vs delta phi) vs multiplicity
98100 Int_t iTrackBin[7 ];
99- Double_t* trackBins[7 ];
101+ BinList trackBins[7 ];
100102 const char * trackAxisTitle[7 ];
101103
102104 // eta
103105 Int_t nEtaBins = -1 ;
104- Double_t* etaBins = getBinning (binning, " eta" , nEtaBins);
106+ BinList etaBins = getBinning (binning, " eta" , nEtaBins);
105107 const char * etaTitle = " #eta" ;
106108
107109 iTrackBin[0 ] = nEtaBins;
@@ -110,41 +112,41 @@ CorrelationContainer::CorrelationContainer(const char* name, const char* objTitl
110112
111113 // delta eta
112114 Int_t nDeltaEtaBins = -1 ;
113- Double_t* deltaEtaBins = getBinning (binning, " delta_eta" , nDeltaEtaBins);
115+ BinList deltaEtaBins = getBinning (binning, " delta_eta" , nDeltaEtaBins);
114116
115117 // pT
116118 trackBins[1 ] = getBinning (binning, " p_t_assoc" , iTrackBin[1 ]);
117119 trackAxisTitle[1 ] = " p_{T} (GeV/c)" ;
118120
119121 // pT, fine
120122 Int_t npTBinsFine = -1 ;
121- Double_t* pTBinsFine = getBinning (binning, " p_t_eff" , npTBinsFine);
123+ BinList pTBinsFine = getBinning (binning, " p_t_eff" , npTBinsFine);
122124
123125 // pT,lead binning 1
124126 Int_t nLeadingpTBins = -1 ;
125- Double_t* leadingpTBins = getBinning (binning, " p_t_leading" , nLeadingpTBins);
127+ BinList leadingpTBins = getBinning (binning, " p_t_leading" , nLeadingpTBins);
126128
127129 // pT,lead binning 2
128130 Int_t nLeadingpTBins2 = -1 ;
129- Double_t* leadingpTBins2 = getBinning (binning, " p_t_leading_course" , nLeadingpTBins2);
131+ BinList leadingpTBins2 = getBinning (binning, " p_t_leading_course" , nLeadingpTBins2);
130132
131133 // phi,lead
132134 Int_t nLeadingPhiBins = -1 ;
133- Double_t* leadingPhiBins = getBinning (binning, " delta_phi" , nLeadingPhiBins);
135+ BinList leadingPhiBins = getBinning (binning, " delta_phi" , nLeadingPhiBins);
134136
135137 trackBins[3 ] = getBinning (binning, " multiplicity" , iTrackBin[3 ]);
136138 trackAxisTitle[3 ] = " multiplicity" ;
137139
138140 // particle species
139141 const Int_t kNSpeciesBins = 4 ; // pi, K, p, rest
140- Double_t speciesBins[] = {-0.5 , 0.5 , 1.5 , 2.5 , 3.5 };
142+ BinList speciesBins = {-0.5 , 0.5 , 1.5 , 2.5 , 3.5 };
141143
142144 // vtx-z axis
143145 const char * vertexTitle = " z-vtx (cm)" ;
144146 Int_t nVertexBins = -1 ;
145- Double_t* vertexBins = getBinning (binning, " vertex" , nVertexBins);
147+ BinList vertexBins = getBinning (binning, " vertex" , nVertexBins);
146148 Int_t nVertexBinsEff = -1 ;
147- Double_t* vertexBinsEff = getBinning (binning, " vertex_eff" , nVertexBinsEff);
149+ BinList vertexBinsEff = getBinning (binning, " vertex_eff" , nVertexBinsEff);
148150
149151 Int_t useVtxAxis = 0 ;
150152 Int_t useAliTHn = 1 ; // 0 = don't use | 1 = with float | 2 = with double
@@ -258,7 +260,7 @@ CorrelationContainer::CorrelationContainer(const char* name, const char* objTitl
258260 // event level
259261 Int_t nEventVars = 2 ;
260262 Int_t iEventBin[4 ] = {0 };
261- Double_t* eventBins[4 ] = { nullptr } ;
263+ BinList eventBins[4 ];
262264 const char * eventAxisTitle[4 ] = {nullptr };
263265
264266 // track 3rd and 4th axis --> event 1st and 2nd axis
@@ -305,15 +307,7 @@ CorrelationContainer::CorrelationContainer(const char* name, const char* objTitl
305307
306308 mTrackHistEfficiency = new StepTHnD (" mTrackHistEfficiency" , " Tracking efficiency" , 6 , 5 , iTrackBin, trackBins, trackAxisTitle);
307309
308- mEventCount = new TH2F (" mEventCount" , " ;step;centrality;count" , fgkCFSteps + 2 , -2.5 , -0.5 + fgkCFSteps, iEventBin[1 ], eventBins[1 ]);
309-
310- delete[] deltaEtaBins;
311- delete[] pTBinsFine;
312- delete[] leadingpTBins;
313- delete[] leadingpTBins2;
314- delete[] leadingPhiBins;
315- delete[] vertexBins;
316- delete[] vertexBinsEff;
310+ mEventCount = new TH2F (" mEventCount" , " ;step;centrality;count" , fgkCFSteps + 2 , -2.5 , -0.5 + fgkCFSteps, iEventBin[1 ], &(eventBins[1 ])[0 ]);
317311}
318312
319313TString CorrelationContainer::combineBinning (TString defaultBinning, TString customBinning)
@@ -338,29 +332,38 @@ TString CorrelationContainer::combineBinning(TString defaultBinning, TString cus
338332 return binningStr;
339333}
340334
341- Double_t* CorrelationContainer::getBinning (const char * configuration, const char * tag, Int_t& nBins)
335+ std::vector< Double_t> CorrelationContainer::getBinning (const char * configuration, const char * tag, Int_t& nBins)
342336{
343337 // takes the binning from <configuration> identified by <tag>
344338 // configuration syntax example:
345- // eta: 2.4, -2.3, -2.2, -2.1, -2.0, -1.9, -1.8, -1.7, -1.6, -1.5, -1.4, -1.3, -1.2, -1.1, -1.0, -0.9, -0.8, -0.7, -0.6, -0.5, -0.4, -0.3, -0.2, -0.1, 0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2.0, 2.1, 2.2, 2.3, 2.4
346- // phi: .....
339+ // equidistant binning:
340+ // eta: 48 | -2.4, 2.4
341+ // variable-width binning:
342+ // eta: -2.4, -2.3, -2.2, -2.1, -2.0, -1.9, -1.8, -1.7, -1.6, -1.5, -1.4, -1.3, -1.2, -1.1, -1.0, -0.9, -0.8, -0.7, -0.6, -0.5, -0.4, -0.3, -0.2, -0.1, 0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2.0, 2.1, 2.2, 2.3, 2.4
347343 //
348344 // returns bin edges which have to be deleted by the caller
349345
346+ std::vector<Double_t> bins;
350347 TString config (configuration);
351348 TObjArray* lines = config.Tokenize (" \n " );
352349 for (Int_t i = 0 ; i < lines->GetEntriesFast (); i++) {
353350 TString line (lines->At (i)->GetName ());
354351 if (line.BeginsWith (TString (tag) + " :" )) {
355352 line.Remove (0 , strlen (tag) + 1 );
356353 line.ReplaceAll (" " , " " );
354+ if (line.Contains (" |" )) {
355+ // equidistant binning
356+ nBins = TString (line (0 , line.Index (" |" ))).Atoi ();
357+ line.Remove (0 , line.Index (" |" ) + 1 );
358+ } else {
359+ // variable-width binning
360+ nBins = line.CountChar (' ,' );
361+ }
357362 TObjArray* binning = line.Tokenize (" ," );
358- Double_t* bins = new Double_t[binning->GetEntriesFast ()];
359- for (Int_t j = 0 ; j < binning->GetEntriesFast (); j++)
360- bins[j] = TString (binning->At (j)->GetName ()).Atof ();
361-
362- nBins = binning->GetEntriesFast () - 1 ;
363-
363+ // Double_t* bins = new Double_t[binning->GetEntriesFast()];
364+ for (Int_t j = 0 ; j < binning->GetEntriesFast (); j++) {
365+ bins.push_back (TString (binning->At (j)->GetName ()).Atof ());
366+ }
364367 delete binning;
365368 delete lines;
366369 return bins;
@@ -369,7 +372,7 @@ Double_t* CorrelationContainer::getBinning(const char* configuration, const char
369372
370373 delete lines;
371374 LOGF (fatal, " Tag %s not found in %s" , tag, configuration);
372- return nullptr ;
375+ return bins ;
373376}
374377
375378// _____________________________________________________________________________
@@ -1906,21 +1909,7 @@ THnBase* CorrelationContainer::changeToThn(THnBase* sparse)
19061909{
19071910 // change the object to THn for faster processing
19081911
1909- // convert to THn (SEGV's for some strange reason...)
1910- // x = THn::CreateHn("a", "a", sparse);
1911-
1912- // own implementation
1913- Int_t nBins[10 ];
1914- for (Int_t i = 0 ; i < sparse->GetNdimensions (); i++)
1915- nBins[i] = sparse->GetAxis (i)->GetNbins ();
1916- THn* tmpTHn = new THnF (Form (" %s_thn" , sparse->GetName ()), sparse->GetTitle (), sparse->GetNdimensions (), nBins, nullptr , nullptr );
1917- for (Int_t i = 0 ; i < sparse->GetNdimensions (); i++) {
1918- tmpTHn->SetBinEdges (i, sparse->GetAxis (i)->GetXbins ()->GetArray ());
1919- tmpTHn->GetAxis (i)->SetTitle (sparse->GetAxis (i)->GetTitle ());
1920- }
1921- tmpTHn->RebinnedAdd (sparse);
1922-
1923- return tmpTHn;
1912+ return THn::CreateHn (Form (" %s_thn" , sparse->GetName ()), sparse->GetTitle (), sparse);
19241913}
19251914
19261915void CorrelationContainer::fillEvent (Float_t centrality, CFStep step)
0 commit comments