]>
Commit | Line | Data |
---|---|---|
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 | ||
43 | ClassImp(AliBalanceTriggered) | |
44 | ||
45 | //____________________________________________________________________// | |
46 | AliBalanceTriggered::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 | //____________________________________________________________________// | |
63 | AliBalanceTriggered::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 | //____________________________________________________________________// | |
78 | AliBalanceTriggered::~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 | //____________________________________________________________________// | |
92 | void 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 | //____________________________________________________________________// | |
249 | void 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 | 300 | TH1D* 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 | ||
366 | TH2D* 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 | |
433 | TH1D* 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 | ||
521 | TH2D* 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 | } |