]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGCF/EBYE/BalanceFunctions/AliBalanceTriggered.cxx
coverity fixes + changed to full loop over second particle
[u/mrichter/AliRoot.git] / PWGCF / EBYE / BalanceFunctions / AliBalanceTriggered.cxx
CommitLineData
f8b2d882 1/**************************************************************************
2 * Author: Panos Christakoglou. *
3 * Contributors are mentioned in the code where appropriate. *
4 * *
5 * Permission to use, copy, modify and distribute this software and its *
6 * documentation strictly for non-commercial purposes is hereby granted *
7 * without fee, provided that the above copyright notice appears in all *
8 * copies and that both the copyright notice and this permission notice *
9 * appear in the supporting documentation. The authors make no claims *
10 * about the suitability of this software for any purpose. It is *
11 * provided "as is" without express or implied warranty. *
12 **************************************************************************/
13
14//-----------------------------------------------------------------
15// Balance Function class
16// This is the class to deal with the Balance Function analysis
17// Origin: Panos Christakoglou, UOA-CERN, Panos.Christakoglou@cern.ch
18// Modified: Michael Weber, m.weber@cern.ch
19//-----------------------------------------------------------------
20
21
22//ROOT
23#include <Riostream.h>
24#include <TMath.h>
25#include <TAxis.h>
26#include <TH1D.h>
bf7a73c8 27#include <TH2D.h>
f8b2d882 28
29
30#include <AliTHn.h>
31#include <TLorentzVector.h>
32#include <TObjArray.h>
33#include <TGraphErrors.h>
34#include <TString.h>
35
36#include "AliVParticle.h"
37#include "AliMCParticle.h"
38#include "AliESDtrack.h"
39#include "AliAODTrack.h"
40
41#include "AliBalanceTriggered.h"
42
43ClassImp(AliBalanceTriggered)
44
45//____________________________________________________________________//
46AliBalanceTriggered::AliBalanceTriggered() :
47 TObject(),
48 bShuffle(kFALSE),
49 fAnalysisLevel("AOD"),
50 fHistP(0x0),
51 fHistN(0x0),
52 fHistPN(0x0),
53 fHistNP(0x0),
54 fHistPP(0x0),
55 fHistNN(0x0)
56{
57 // Default constructor
58
59}
60
61
62//____________________________________________________________________//
63AliBalanceTriggered::AliBalanceTriggered(const AliBalanceTriggered& balance):
64 TObject(balance), bShuffle(balance.bShuffle),
65 fAnalysisLevel(balance.fAnalysisLevel),
66 fHistP(balance.fHistP),
67 fHistN(balance.fHistN),
68 fHistPN(balance.fHistPN),
69 fHistNP(balance.fHistNP),
70 fHistPP(balance.fHistPP),
71 fHistNN(balance.fHistNN)
72{
73 //copy constructor
74
75}
76
77//____________________________________________________________________//
78AliBalanceTriggered::~AliBalanceTriggered() {
79 // Destructor
80
81 delete fHistP;
82 delete fHistN;
83 delete fHistPN;
84 delete fHistNP;
85 delete fHistPP;
86 delete fHistNN;
87
88
89}
90
91//____________________________________________________________________//
92void AliBalanceTriggered::InitHistograms() {
93
94 //Initialize the histograms
95
96 TString title = ""; // histogram title
97 Int_t anaSteps = 1; // analysis steps
98
99 // single particle histograms
100 Int_t iBinSingle[nTrackVarsSingle]; // binning for track variables
101 Double_t* dBinsSingle[nTrackVarsSingle]; // bins for track variables
102 TString axisTitleSingle[nTrackVarsSingle]; // axis titles for track variables
103
104 // two particle histograms
105 Int_t iBinPair[nTrackVarsPair]; // binning for track variables
106 Double_t* dBinsPair[nTrackVarsPair]; // bins for track variables
107 TString axisTitlePair[nTrackVarsPair]; // axis titles for track variables
108
109
110 //-----------------------------------------------------------
111 // histogram settings (hard coded!)
112 //-----------------------------------------------------------
113
114 // eta
115 const Int_t kNEtaBins = 40;
116 Double_t etaBins[kNEtaBins+1];
117 for(Int_t i = 0; i < kNEtaBins+1; i++){
118 etaBins[i] = -1.0 + i * 0.05;
119 }
120 iBinSingle[0] = kNEtaBins;
121 dBinsSingle[0] = etaBins;
122 axisTitleSingle[0] = "#eta";
123
124 // delta eta
125 const Int_t kNDeltaEtaBins = 40;
126 Double_t deltaEtaBins[kNDeltaEtaBins+1];
127 for(Int_t i = 0; i < kNDeltaEtaBins+1; i++){
128 deltaEtaBins[i] = -2.0 + i * 0.1;
129 }
130 iBinPair[0] = kNDeltaEtaBins;
131 dBinsPair[0] = deltaEtaBins;
132 axisTitlePair[0] = "#Delta #eta";
133
134 // phi
135 const Int_t kNPhiBins = 72;
136 Double_t phiBins[kNPhiBins+1];
137 for(Int_t i = 0; i < kNPhiBins+1; i++){
138 phiBins[i] = 0.0 + i * 5.;
139 }
140 iBinSingle[1] = kNPhiBins;
141 dBinsSingle[1] = phiBins;
142 axisTitleSingle[1] = "#phi (#circ)";
143
144 // delta phi
145 const Int_t kNDeltaPhiBins = 72;
146 Double_t deltaPhiBins[kNDeltaPhiBins+1];
147 for(Int_t i = 0; i < kNDeltaPhiBins+1; i++){
148 deltaPhiBins[i] = -180.0 + i * 5.;
149 }
150 iBinPair[1] = kNDeltaPhiBins;
151 dBinsPair[1] = deltaPhiBins;
152 axisTitlePair[1] = "#Delta #phi (#circ)";
153
154 // pT
155 const Int_t kNPtBins = 22;
156 Double_t pTBins[kNPtBins+1] = {0.15, 0.2, 0.3, 0.4, 0.5, 0.75, 1.0, 1.5, 2.0, 2.5, 3.0, 3.5, 4.0, 4.5, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 12.0, 15.0, 20.0};
157 iBinSingle[2] = kNPtBins;
158 dBinsSingle[2] = pTBins;
159 axisTitleSingle[2] = "p_{T,trig} (GeV/c)";
160
161 iBinPair[2] = kNPtBins;
162 dBinsPair[2] = pTBins;
163 axisTitlePair[2] = "p_{T} (GeV/c)";
164
165 iBinPair[3] = kNPtBins;
166 dBinsPair[3] = pTBins;
167 axisTitlePair[3] = "p_{T,trig} (GeV/c)";
168
169 // centrality
170 const Int_t kNCentBins = 9;
171 Double_t centBins[kNCentBins+1] = {0.,5.,10.,20.,30.,40.,50.,60.,70.,80.};
172
173 iBinSingle[3] = kNCentBins;
174 dBinsSingle[3] = centBins;
175 axisTitleSingle[3] = "centrality";
176
177 iBinPair[4] = kNCentBins;
178 dBinsPair[4] = centBins;
179 axisTitlePair[4] = "centrality";
180
181 //-----------------------------------------------------------
182
183
184
185 // User settings (depending on the analysis settings [only one at the moment])
186 if(fAnalysisLevel == "AOD"){
187 title = "hdEtaVsdPhi";
188 }
189
190 //-----------------------------------------------------------
191 //-----------------------------------------------------------
192 // Histogram creation
193
194 // histogram for negative particles
195 fHistN = new AliTHn(Form("fHistN"), Form("%s_N",title.Data()), anaSteps, nTrackVarsSingle, iBinSingle);
196 for (Int_t j=0; j<nTrackVarsSingle; j++)
197 {
198 fHistN->SetBinLimits(j, dBinsSingle[j]);
199 fHistN->SetVarTitle(j, axisTitleSingle[j]);
200 }
201
202 // histogram for positive particles
203 fHistP = new AliTHn(Form("fHistP"), Form("%s_P",title.Data()), anaSteps, nTrackVarsSingle, iBinSingle);
204 for (Int_t j=0; j<nTrackVarsSingle; j++)
205 {
206 fHistP->SetBinLimits(j, dBinsSingle[j]);
207 fHistP->SetVarTitle(j, axisTitleSingle[j]);
208 }
209
210 // histogram for +- pairs
211 fHistPN = new AliTHn(Form("fHistPN"), Form("%s_PN",title.Data()), anaSteps, nTrackVarsPair, iBinPair);
212 for (Int_t j=0; j<nTrackVarsPair; j++)
213 {
214 fHistPN->SetBinLimits(j, dBinsPair[j]);
215 fHistPN->SetVarTitle(j, axisTitlePair[j]);
216 }
217
218 // histogram for -+ pairs
219 fHistNP = new AliTHn(Form("fHistNP"), Form("%s_NP",title.Data()), anaSteps, nTrackVarsPair, iBinPair);
220 for (Int_t j=0; j<nTrackVarsPair; j++)
221 {
222 fHistNP->SetBinLimits(j, dBinsPair[j]);
223 fHistNP->SetVarTitle(j, axisTitlePair[j]);
224 }
225
226 // histogram for ++ pairs
227 fHistPP = new AliTHn(Form("fHistPP"), Form("%s_PP",title.Data()), anaSteps, nTrackVarsPair, iBinPair);
228 for (Int_t j=0; j<nTrackVarsPair; j++)
229 {
230 fHistPP->SetBinLimits(j, dBinsPair[j]);
231 fHistPP->SetVarTitle(j, axisTitlePair[j]);
232 }
233
234 // histogram for -- pairs
235 fHistNN = new AliTHn(Form("fHistNN"), Form("%s_NN",title.Data()), anaSteps, nTrackVarsPair, iBinPair);
236 for (Int_t j=0; j<nTrackVarsPair; j++)
237 {
238 fHistNN->SetBinLimits(j, dBinsPair[j]);
239 fHistNN->SetVarTitle(j, axisTitlePair[j]);
240 }
241
242 //-----------------------------------------------------------
243 //-----------------------------------------------------------
244
245
246}
247
248//____________________________________________________________________//
249void AliBalanceTriggered::FillBalance(Float_t fCentrality,vector<Double_t> **chargeVector) {
250 // Calculates the balance function
251
252
253 // Initialize histograms if not done yet
254 if(!fHistPN){
255 AliWarning("Histograms not yet initialized! --> Will be done now");
256 AliWarning("This works only in local mode --> Add 'gBalance->InitHistograms()' in your configBalanceFunction");
257 InitHistograms();
258 }
259
260 Int_t gNtrack = chargeVector[0]->size();
261 Double_t trackVarsSingle[nTrackVarsSingle];
262 Double_t trackVarsPair[nTrackVarsPair];
263
264 // 1st particle loop
265 for(Int_t i = 0; i < gNtrack;i++){
266
267 Short_t charge = (Short_t) chargeVector[0]->at(i);
268 trackVarsSingle[0] = chargeVector[2]->at(i); //eta
269 trackVarsSingle[1] = chargeVector[3]->at(i); //phi
270 trackVarsSingle[2] = chargeVector[7]->at(i); //pt trigger
271 trackVarsSingle[3] = fCentrality; //centrality (really as variable here????)
272
273 //fill single particle histograms
274 if(charge > 0) fHistP->Fill(trackVarsSingle,0,1.);
275 else fHistN->Fill(trackVarsSingle,0,1.);
276
bf7a73c8 277 // 2nd particle loop (now over all particles except the same!)
278 for(Int_t j = 0; j < gNtrack; j++) {
f8b2d882 279
bf7a73c8 280 if( j == i ) continue;
f8b2d882 281
282 Short_t charge2 = (Short_t) chargeVector[0]->at(j);
283 trackVarsPair[0] = chargeVector[2]->at(i) - chargeVector[2]->at(j) ; //delta eta
284 trackVarsPair[1] = chargeVector[3]->at(i) - chargeVector[3]->at(j); //delta phi
285 trackVarsPair[2] = chargeVector[7]->at(j); //pt
286 trackVarsPair[3] = chargeVector[7]->at(i); //pt trigger
287 trackVarsPair[4] = fCentrality; //centrality (really as variable here????)
bf7a73c8 288
289 if( charge > 0 && charge2 < 0) fHistPN->Fill(trackVarsPair,0,1.);
290 else if( charge < 0 && charge2 > 0) fHistNP->Fill(trackVarsPair,0,1.);
291 else if( charge > 0 && charge2 > 0) fHistPP->Fill(trackVarsPair,0,1.);
292 else if( charge < 0 && charge2 < 0) fHistNN->Fill(trackVarsPair,0,1.);
293 else AliWarning("Wrong charge combination!");
294
f8b2d882 295 }//end of 2nd particle loop
296 }//end of 1st particle loop
297}
298
299
bf7a73c8 300TH1D* AliBalanceTriggered::GetBalanceFunctionHistogram1D(Int_t var, Double_t pTMinTrigger, Double_t pTMaxTrigger, Double_t pTMin, Double_t pTMax, Double_t centrMin, Double_t centrMax){
f8b2d882 301
302 // check which variable should be analyzed
303 // 0 = Delta eta
304 // 1 = Delta phi
305
306 if( var < 0 || var > 1){
307 AliError("Only Variable 0 (= Delta eta) or 1 (= Delta phi) allowed");
308 return NULL;
309 }
310
311
312 // Choose region to analyze
313 // for Single Histograms (P,N): 2 = pT,trigger; 3 = centrality
314 // for Pair Histograms (PN,NP,NN,PP): 2 = pT; 3 = pT,trigger; 4 = centrality
315
316 // pT trigger
bf7a73c8 317 fHistP->GetGrid(0)->GetGrid()->GetAxis(2)->SetRange(pTMinTrigger,pTMaxTrigger);
318 fHistN->GetGrid(0)->GetGrid()->GetAxis(2)->SetRange(pTMinTrigger,pTMaxTrigger);
319 fHistPN->GetGrid(0)->GetGrid()->GetAxis(2)->SetRange(pTMinTrigger,pTMaxTrigger);
320 fHistNP->GetGrid(0)->GetGrid()->GetAxis(2)->SetRange(pTMinTrigger,pTMaxTrigger);
321 fHistPP->GetGrid(0)->GetGrid()->GetAxis(2)->SetRange(pTMinTrigger,pTMaxTrigger);
322 fHistNN->GetGrid(0)->GetGrid()->GetAxis(2)->SetRange(pTMinTrigger,pTMaxTrigger);
f8b2d882 323
324 // pT
325 fHistPN->GetGrid(0)->GetGrid()->GetAxis(3)->SetRange(pTMin,pTMax);
326 fHistNP->GetGrid(0)->GetGrid()->GetAxis(3)->SetRange(pTMin,pTMax);
327 fHistPP->GetGrid(0)->GetGrid()->GetAxis(3)->SetRange(pTMin,pTMax);
328 fHistNN->GetGrid(0)->GetGrid()->GetAxis(3)->SetRange(pTMin,pTMax);
329
330 // centrality
331 fHistP->GetGrid(0)->GetGrid()->GetAxis(3)->SetRange(centrMin,centrMax);
332 fHistN->GetGrid(0)->GetGrid()->GetAxis(3)->SetRange(centrMin,centrMax);
333 fHistPN->GetGrid(0)->GetGrid()->GetAxis(4)->SetRange(centrMin,centrMax);
334 fHistNP->GetGrid(0)->GetGrid()->GetAxis(4)->SetRange(centrMin,centrMax);
335 fHistPP->GetGrid(0)->GetGrid()->GetAxis(4)->SetRange(centrMin,centrMax);
336 fHistNN->GetGrid(0)->GetGrid()->GetAxis(4)->SetRange(centrMin,centrMax);
337
338
339 // Project into the wanted space (1st: analysis step, 2nd: axis)
340 TH1D* hTemp1 = (TH1D*)fHistPN->Project(0,var);
341 TH1D* hTemp2 = (TH1D*)fHistNP->Project(0,var);
342 TH1D* hTemp3 = (TH1D*)fHistPP->Project(0,var);
343 TH1D* hTemp4 = (TH1D*)fHistNN->Project(0,var);
344 TH1D* hTemp5 = (TH1D*)fHistP->Project(0,var);
345 TH1D* hTemp6 = (TH1D*)fHistN->Project(0,var);
346
bf7a73c8 347 TH1D* gHistBalanceFunctionHistogram = NULL;
348
349 // Calculate BF
350 if((hTemp1)&&(hTemp2)&&(hTemp3)&&(hTemp4)&&(hTemp5)&&(hTemp6)) {
351
352 gHistBalanceFunctionHistogram = (TH1D*)hTemp1->Clone();
353 gHistBalanceFunctionHistogram->Reset();
354
355 // Calculate BF
356 hTemp1->Add(hTemp3,-1.);
357 hTemp1->Scale(1./hTemp5->GetEntries());
358 hTemp2->Add(hTemp4,-1.);
359 hTemp2->Scale(1./hTemp6->GetEntries());
360 gHistBalanceFunctionHistogram->Add(hTemp1,hTemp2,1.,1.);
361 }
362
363 return gHistBalanceFunctionHistogram;
364}
365
366TH2D* AliBalanceTriggered::GetBalanceFunctionHistogram2D(Int_t var1, Int_t var2, Double_t pTMinTrigger, Double_t pTMaxTrigger, Double_t pTMin, Double_t pTMax, Double_t centrMin, Double_t centrMax){
367
368 // check which variable should be analyzed
369 // 0 = Delta eta
370 // 1 = Delta phi
371
372 if( var1 < 0 || var1 > 1 || var2 < 0 || var2 > 1){
373 AliError("Only Variable 0 (= Delta eta) or 1 (= Delta phi) allowed");
374 return NULL;
375 }
376
377
378 // Choose region to analyze
379 // for Single Histograms (P,N): 2 = pT,trigger; 3 = centrality
380 // for Pair Histograms (PN,NP,NN,PP): 2 = pT; 3 = pT,trigger; 4 = centrality
381
382 // pT trigger
383 fHistP->GetGrid(0)->GetGrid()->GetAxis(2)->SetRange(pTMinTrigger,pTMaxTrigger);
384 fHistN->GetGrid(0)->GetGrid()->GetAxis(2)->SetRange(pTMinTrigger,pTMaxTrigger);
385 fHistPN->GetGrid(0)->GetGrid()->GetAxis(2)->SetRange(pTMinTrigger,pTMaxTrigger);
386 fHistNP->GetGrid(0)->GetGrid()->GetAxis(2)->SetRange(pTMinTrigger,pTMaxTrigger);
387 fHistPP->GetGrid(0)->GetGrid()->GetAxis(2)->SetRange(pTMinTrigger,pTMaxTrigger);
388 fHistNN->GetGrid(0)->GetGrid()->GetAxis(2)->SetRange(pTMinTrigger,pTMaxTrigger);
389
390 // pT
391 fHistPN->GetGrid(0)->GetGrid()->GetAxis(3)->SetRange(pTMin,pTMax);
392 fHistNP->GetGrid(0)->GetGrid()->GetAxis(3)->SetRange(pTMin,pTMax);
393 fHistPP->GetGrid(0)->GetGrid()->GetAxis(3)->SetRange(pTMin,pTMax);
394 fHistNN->GetGrid(0)->GetGrid()->GetAxis(3)->SetRange(pTMin,pTMax);
395
396 // centrality
397 fHistP->GetGrid(0)->GetGrid()->GetAxis(3)->SetRange(centrMin,centrMax);
398 fHistN->GetGrid(0)->GetGrid()->GetAxis(3)->SetRange(centrMin,centrMax);
399 fHistPN->GetGrid(0)->GetGrid()->GetAxis(4)->SetRange(centrMin,centrMax);
400 fHistNP->GetGrid(0)->GetGrid()->GetAxis(4)->SetRange(centrMin,centrMax);
401 fHistPP->GetGrid(0)->GetGrid()->GetAxis(4)->SetRange(centrMin,centrMax);
402 fHistNN->GetGrid(0)->GetGrid()->GetAxis(4)->SetRange(centrMin,centrMax);
f8b2d882 403
bf7a73c8 404
405 // Project into the wanted space (1st: analysis step, 2nd: axis1, 3rd: axis2)
406 TH2D* hTemp1 = (TH2D*)fHistPN->Project(0,var1,var2);
407 TH2D* hTemp2 = (TH2D*)fHistNP->Project(0,var1,var2);
408 TH2D* hTemp3 = (TH2D*)fHistPP->Project(0,var1,var2);
409 TH2D* hTemp4 = (TH2D*)fHistNN->Project(0,var1,var2);
410 TH2D* hTemp5 = (TH2D*)fHistP->Project(0,var1,var2);
411 TH2D* hTemp6 = (TH2D*)fHistN->Project(0,var1,var2);
412
413 TH2D* gHistBalanceFunctionHistogram = NULL;
414
f8b2d882 415 // Calculate BF
bf7a73c8 416 if((hTemp1)&&(hTemp2)&&(hTemp3)&&(hTemp4)&&(hTemp5)&&(hTemp6)) {
417
418 gHistBalanceFunctionHistogram = (TH2D*)hTemp1->Clone();
419 gHistBalanceFunctionHistogram->Reset();
420
421 // Calculate BF
f8b2d882 422 hTemp1->Add(hTemp3,-1.);
423 hTemp1->Scale(1./hTemp5->GetEntries());
424 hTemp2->Add(hTemp4,-1.);
425 hTemp2->Scale(1./hTemp6->GetEntries());
426 gHistBalanceFunctionHistogram->Add(hTemp1,hTemp2,1.,1.);
f8b2d882 427 }
428
429 return gHistBalanceFunctionHistogram;
430}
431
bf7a73c8 432
433TH1D* AliBalanceTriggered::GetHistogram1D(Int_t histo, Int_t var, Double_t pTMinTrigger, Double_t pTMaxTrigger, Double_t pTMin, Double_t pTMax, Double_t centrMin, Double_t centrMax){
f8b2d882 434
435 // check which variable should be analyzed
436 //
437 // pair histograms:
438 // 0 = Delta eta
439 // 1 = Delta phi
440 // 2 = pT, trigger
441 // 3 = centrality
442 //
443 // pair histograms:
444 // 0 = Delta eta
445 // 1 = Delta phi
446 // 2 = pT
447 // 3 = pT, trigger
448 // 4 = centrality
449
450 if(histo < 0 || histo > 5){
451 AliError("Only 6 histograms available: 0(P), 1(N), 2(PN), 3(NP), 4(PP), 5(NN)");
452 return NULL;
453 }
454
455 if( histo > 1 && (var < 0 || var > 5)){
456 AliError("Only Variable 0 to 4 allowed for pair histograms (histo > 1)");
457 return NULL;
458 }
459 if( histo < 2 && (var < 0 || var > 4)){
460 AliError("Only Variable 0 to 3 allowed for single histograms (histo < 2)");
461 return NULL;
462 }
463
464 // get the histogram
465 AliTHn *gTHn = NULL;
466 switch(histo){
467
468 case 0:
469 gTHn = fHistP;
470 break;
471
472 case 1:
473 gTHn = fHistN;
474 break;
475
476 case 2:
477 gTHn = fHistPN;
478 break;
479
480 case 3:
481 gTHn = fHistNP;
482 break;
483
484 case 4:
485 gTHn = fHistPP;
486 break;
487
488 case 5:
489 gTHn = fHistNN;
490 break;
bf7a73c8 491
492 }
493
494 if(!gTHn){
495 AliError(Form("AliTHn number %d = NULL",histo));
496 return NULL;
497 }
498
499 // Choose region to analyze
500 // for Single Histograms (P,N): 2 = pT,trigger; 3 = centrality
501 // for Pair Histograms (PN,NP,NN,PP): 2 = pT; 3 = pT,trigger; 4 = centrality
f8b2d882 502
bf7a73c8 503 // pT trigger
504 gTHn->GetGrid(0)->GetGrid()->GetAxis(2)->SetRange(pTMinTrigger,pTMaxTrigger);
505
506 // pT
507 if(histo > 1) gTHn->GetGrid(0)->GetGrid()->GetAxis(3)->SetRange(pTMin,pTMax);
508
509 // centrality
510 if(histo < 2) gTHn->GetGrid(0)->GetGrid()->GetAxis(3)->SetRange(centrMin,centrMax);
511 else gTHn->GetGrid(0)->GetGrid()->GetAxis(4)->SetRange(centrMin,centrMax);
512
513
514 // Project into the wanted space (1st: analysis step, 2nd: axis)
515 TH1D* gHisto = (TH1D*)gTHn->Project(0,var);
516
517 return gHisto;
518}
519
520
521TH2D* AliBalanceTriggered::GetHistogram2D(Int_t histo, Int_t var1, Int_t var2, Double_t pTMinTrigger, Double_t pTMaxTrigger, Double_t pTMin, Double_t pTMax, Double_t centrMin, Double_t centrMax){
522
523 // check which variable should be analyzed
524 //
525 // pair histograms:
526 // 0 = Delta eta
527 // 1 = Delta phi
528 // 2 = pT, trigger
529 // 3 = centrality
530 //
531 // pair histograms:
532 // 0 = Delta eta
533 // 1 = Delta phi
534 // 2 = pT
535 // 3 = pT, trigger
536 // 4 = centrality
537
538 if(histo < 0 || histo > 5){
539 AliError("Only 6 histograms available: 0(P), 1(N), 2(PN), 3(NP), 4(PP), 5(NN)");
540 return NULL;
541 }
542
543 if( histo > 1 && (var1 < 0 || var1 > 5 || var2 < 0 || var2 > 5)){
544 AliError("Only Variable 0 to 4 allowed for pair histograms (histo > 1)");
545 return NULL;
546 }
547 if( histo < 2 && (var1 < 0 || var1 > 4 || var2 < 0 || var2 > 4)){
548 AliError("Only Variable 0 to 3 allowed for single histograms (histo < 2)");
549 return NULL;
550 }
551
552 // get the histogram
553 AliTHn *gTHn = NULL;
554 switch(histo){
555
556 case 0:
557 gTHn = fHistP;
558 break;
559
560 case 1:
561 gTHn = fHistN;
f8b2d882 562 break;
563
bf7a73c8 564 case 2:
565 gTHn = fHistPN;
566 break;
567
568 case 3:
569 gTHn = fHistNP;
570 break;
571
572 case 4:
573 gTHn = fHistPP;
574 break;
575
576 case 5:
577 gTHn = fHistNN;
578 break;
579
f8b2d882 580 }
581
582 if(!gTHn){
583 AliError(Form("AliTHn number %d = NULL",histo));
584 return NULL;
585 }
586
587 // Choose region to analyze
588 // for Single Histograms (P,N): 2 = pT,trigger; 3 = centrality
589 // for Pair Histograms (PN,NP,NN,PP): 2 = pT; 3 = pT,trigger; 4 = centrality
590
591 // pT trigger
bf7a73c8 592 gTHn->GetGrid(0)->GetGrid()->GetAxis(2)->SetRange(pTMinTrigger,pTMaxTrigger);
f8b2d882 593
594 // pT
595 if(histo > 1) gTHn->GetGrid(0)->GetGrid()->GetAxis(3)->SetRange(pTMin,pTMax);
596
597 // centrality
598 if(histo < 2) gTHn->GetGrid(0)->GetGrid()->GetAxis(3)->SetRange(centrMin,centrMax);
599 else gTHn->GetGrid(0)->GetGrid()->GetAxis(4)->SetRange(centrMin,centrMax);
600
601
602 // Project into the wanted space (1st: analysis step, 2nd: axis)
bf7a73c8 603 TH2D* gHisto = (TH2D*)gTHn->Project(0,var1,var2);
f8b2d882 604
605 return gHisto;
606}