]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGCF/FEMTOSCOPY/AliFemtoUser/AliFemtoCorrFctnDEtaDPhiCorrections.cxx
Fix for memory leak
[u/mrichter/AliRoot.git] / PWGCF / FEMTOSCOPY / AliFemtoUser / AliFemtoCorrFctnDEtaDPhiCorrections.cxx
CommitLineData
70c54bac 1////////////////////////////////////////////////////////////////////////////////
2// //
3// AliFemtoCorrFctnDEtaDPhiCorrections - A correlation function that analyzes //
4// two particle correlations with respect to the azimuthal angle (phi) //
5// and pseudorapidity (eta) difference //
6// //
7// Authors: Adam Kisiel Adam.Kisiel@cern.ch //
8// //
9////////////////////////////////////////////////////////////////////////////////
10
11#include "AliFemtoCorrFctnDEtaDPhiCorrections.h"
12#include "AliFemtoModelHiddenInfo.h"
13//#include "AliFemtoHisto.hh"
14#include <cstdio>
15#include <TMath.h>
16
17#ifdef __ROOT__
18ClassImp(AliFemtoCorrFctnDEtaDPhiCorrections)
19#endif
20
21#define PIH 1.57079632679489656
22#define PIT 6.28318530717958623
23
24//____________________________
25AliFemtoCorrFctnDEtaDPhiCorrections::AliFemtoCorrFctnDEtaDPhiCorrections(char* title, const int& aPhiBins=20, const int& aEtaBins=20):
26 AliFemtoCorrFctn(),
27 fDPhiDEtaNumerator(0),
28 fDPhiDEtaDenominator(0),
29 fDPhiNumerator(0),
30 fDPhiDenominator(0),
31 fDCosNumerator(0),
32 fDCosDenominator(0),
33 fDoPtAnalysis(0),
34 fDPhiPtNumerator(0),
35 fDPhiPtDenominator(0),
36 fDCosPtNumerator(0),
37 fDCosPtDenominator(0),
38 fPhi(0),
39 fEta(0),
40 fYtYtNumerator(0),
41 fYtYtDenominator(0),
42 fIfCorrectionHist(kNone),
43 fIfCorrection(0),
44 fPtCorrectionsNum(0),
45 fPtCorrectionsDen(0),
46 fEtaCorrectionsNum(0),
47 fEtaCorrectionsDen(0),
48 fCorrFactorTab(0),
49 fpTab(0),
50 fPartType(kNoCorrection),
51 fphiL(0),
52 fphiT(0)
53{
54
55 fphiL = (-(int)(aPhiBins/4)+0.5)*2.*TMath::Pi()/aPhiBins;
56 fphiT = 2*TMath::Pi()+(-(int)(aPhiBins/4)+0.5)*2.*TMath::Pi()/aPhiBins;
57
58 // set up numerator
59 char tTitNumD[101] = "NumDPhiDEta";
60 strncat(tTitNumD,title, 100);
61 fDPhiDEtaNumerator = new TH2D(tTitNumD,title,aPhiBins,fphiL,fphiT,aEtaBins,-2.0,2.0);
62 // set up denominator
63 char tTitDenD[101] = "DenDPhiDEta";
64 strncat(tTitDenD,title, 100);
65 fDPhiDEtaDenominator = new TH2D(tTitDenD,title,aPhiBins,fphiL,fphiT,aEtaBins,-2.0,2.0);
66
67 // set up numerator
68 char tTitNumDPhi[101] = "NumDPhi";
69 strncat(tTitNumDPhi,title, 100);
70 fDPhiNumerator = new TH1D(tTitNumDPhi,title,aPhiBins*2,fphiL, fphiT);
71 // set up denominator
72 char tTitDenDPhi[101] = "DenDPhi";
73 strncat(tTitDenDPhi,title, 100);
74 fDPhiDenominator = new TH1D(tTitDenDPhi,title,aPhiBins*2,fphiL, fphiT);
75
76 // set up numerator
77 char tTitNumDCos[101] = "NumDCos";
78 strncat(tTitNumDCos,title, 100);
79 fDCosNumerator = new TH1D(tTitNumDCos,title,aPhiBins*2,-1.0,1.0);
80 // set up denominator
81 char tTitDenDCos[101] = "DenDCos";
82 strncat(tTitDenDCos,title, 100);
83 fDCosDenominator = new TH1D(tTitDenDCos,title,aPhiBins*2,-1.0,1.0);
84
85 char tTitPhi[101] = "Phi";
86 strncat(tTitPhi,title, 100);
87 fPhi = new TH1D(tTitPhi,title,90,-TMath::Pi(),TMath::Pi());
88
89 char tTitEta[101] = "Eta";
90 strncat(tTitEta,title, 100);
91 fEta = new TH1D(tTitEta,title,90,-1.2,1.2);
92
93 // set up numerator
94 char tTitYtNum[101] = "NumYtYt";
95 strncat(tTitYtNum,title, 100);
96 fYtYtNumerator = new TH2D(tTitYtNum,title,aPhiBins,1,5,aEtaBins,1,5);
97 // set up denominator
98 char tTitYtYtDen[101] = "DenYtYt";
99 strncat(tTitYtYtDen,title, 100);
100 fYtYtDenominator = new TH2D(tTitYtYtDen,title,aPhiBins,1,5,aEtaBins,1,5);
101
102
103 char tTitPtCorrectionsNum[101] = "NumpT1pT2EtaPhi";
104 strncat(tTitPtCorrectionsNum,title, 100);
105 char tTitPtCorrectionsDen[101] = "DenpT1pT2EtaPhi";
106 strncat(tTitPtCorrectionsDen,title, 100);
107
108 Int_t nbins[4] = {20,20,aPhiBins,aEtaBins};
109 Double_t xmin[4] = {0,0,-0.5*TMath::Pi(),-2.0};
110 Double_t xmax[4] = {4,4,1.5*TMath::Pi(),2.0};
111
112
113 fPtCorrectionsNum = new THnSparseF(tTitPtCorrectionsNum,title,4,nbins,xmin,xmax);
114 fPtCorrectionsDen = new THnSparseF(tTitPtCorrectionsDen,title,4,nbins,xmin,xmax);
115
116 char tTitEtaCorrectionsNum[101] = "NumEta1Eta2EtaPhi";
117 strncat(tTitEtaCorrectionsNum,title, 100);
118 char tTitEtaCorrectionsDen[101] = "DenEta1Eta2EtaPhi";
119 strncat(tTitEtaCorrectionsDen,title, 100);
120
121 Double_t xmineta[4] = {-1,1,-0.5*TMath::Pi(),-2.0};
122 Double_t xmaxeta[4] = {-1,1,1.5*TMath::Pi(),2.0};
123
124 fEtaCorrectionsNum = new THnSparseF(tTitEtaCorrectionsNum,title,4,nbins,xmineta,xmaxeta);
125 fEtaCorrectionsDen = new THnSparseF(tTitEtaCorrectionsDen,title,4,nbins,xmineta,xmaxeta);
126
127 // THnSparse(const char* name, const char* title, Int_t dim,
128 // const Int_t* nbins, const Double_t* xmin, const Double_t* xmax,
129 // Int_t chunksize);
130
131 // to enable error bar calculation...
132 fDPhiDEtaNumerator->Sumw2();
133 fDPhiDEtaDenominator->Sumw2();
134 fDPhiNumerator->Sumw2();
135 fDPhiDenominator->Sumw2();
136 fDCosNumerator->Sumw2();
137 fDCosDenominator->Sumw2();
138 fPhi->Sumw2();
139 fEta->Sumw2();
140 fYtYtNumerator->Sumw2();
141 fYtYtDenominator->Sumw2();
142 fPtCorrectionsNum->Sumw2();
143 fPtCorrectionsDen->Sumw2();
144
145
146
147}
148
149//____________________________
150AliFemtoCorrFctnDEtaDPhiCorrections::AliFemtoCorrFctnDEtaDPhiCorrections(const AliFemtoCorrFctnDEtaDPhiCorrections& aCorrFctn) :
151 AliFemtoCorrFctn(),
152 fDPhiDEtaNumerator(0),
153 fDPhiDEtaDenominator(0),
154 fDPhiNumerator(0),
155 fDPhiDenominator(0),
156 fDCosNumerator(0),
157 fDCosDenominator(0),
158 fDoPtAnalysis(0),
159 fDPhiPtNumerator(0),
160 fDPhiPtDenominator(0),
161 fDCosPtNumerator(0),
162 fDCosPtDenominator(0),
163 fPhi(0),
164 fEta(0),
165 fYtYtNumerator(0),
166 fYtYtDenominator(0),
167 fIfCorrectionHist(kNone),
168 fIfCorrection(0),
169 fPtCorrectionsNum(0),
170 fPtCorrectionsDen(0),
171 fEtaCorrectionsNum(0),
172 fEtaCorrectionsDen(0),
173 fCorrFactorTab(0),
174 fpTab(0),
175 fPartType(kNoCorrection),
176 fphiL(0),
177 fphiT(0)
178{
179 // copy constructor
180 if (aCorrFctn.fDPhiDEtaNumerator)
181 fDPhiDEtaNumerator = new TH2D(*aCorrFctn.fDPhiDEtaNumerator);
182 else
183 fDPhiDEtaNumerator = 0;
184 if (aCorrFctn.fDPhiDEtaDenominator)
185 fDPhiDEtaDenominator = new TH2D(*aCorrFctn.fDPhiDEtaDenominator);
186 else
187 fDPhiDEtaDenominator = 0;
188
189 if (aCorrFctn.fDPhiNumerator)
190 fDPhiNumerator = new TH1D(*aCorrFctn.fDPhiNumerator);
191 else
192 fDPhiNumerator = 0;
193 if (aCorrFctn.fDPhiDenominator)
194 fDPhiDenominator = new TH1D(*aCorrFctn.fDPhiDenominator);
195 else
196 fDPhiDenominator = 0;
197
198 if (aCorrFctn.fDCosNumerator)
199 fDCosNumerator = new TH1D(*aCorrFctn.fDCosNumerator);
200 else
201 fDCosNumerator = 0;
202 if (aCorrFctn.fDCosDenominator)
203 fDCosDenominator = new TH1D(*aCorrFctn.fDCosDenominator);
204 else
205 fDCosDenominator = 0;
206
207 if (aCorrFctn.fDPhiPtNumerator)
208 fDPhiPtNumerator = new TH2D(*aCorrFctn.fDPhiPtNumerator);
209 else
210 fDPhiPtNumerator = 0;
211 if (aCorrFctn.fDPhiPtDenominator)
212 fDPhiPtDenominator = new TH2D(*aCorrFctn.fDPhiPtDenominator);
213 else
214 fDPhiPtDenominator = 0;
215
216 if (aCorrFctn.fDCosPtNumerator)
217 fDCosPtNumerator = new TH2D(*aCorrFctn.fDCosPtNumerator);
218 else
219 fDCosPtNumerator = 0;
220 if (aCorrFctn.fDCosPtDenominator)
221 fDCosPtDenominator = new TH2D(*aCorrFctn.fDCosPtDenominator);
222 else
223 fDCosPtDenominator = 0;
224 if (aCorrFctn.fPhi)
225 fPhi = new TH1D(*aCorrFctn.fPhi);
226 else
227 fPhi = 0;
228 if (aCorrFctn.fEta)
229 fEta = new TH1D(*aCorrFctn.fEta);
230 else
231 fEta = 0;
232
233 if (aCorrFctn.fYtYtNumerator)
234 fYtYtNumerator = new TH2D(*aCorrFctn.fDPhiDEtaDenominator);
235 else
236 fYtYtNumerator = 0;
237
238 if (aCorrFctn.fYtYtDenominator)
239 fYtYtDenominator = new TH2D(*aCorrFctn.fDPhiDEtaDenominator);
240 else
241 fYtYtDenominator = 0;
242
243 fphiL = aCorrFctn.fphiL;
244 fphiT = aCorrFctn.fphiT;
245
246 fPartType = aCorrFctn.fPartType;
247
248// if (aCorrFctn.fPtCorrectionsNum)
249// fPtCorrectionsNum = new THnSparseF(*aCorrFctn.fPtCorrectionsNum);
250// else
251// fPtCorrectionsNum = 0;
252
253// if (aCorrFctn.fPtCorrectionsDen)
254// fPtCorrectionsDen = new THnSparseF(*aCorrFctn.fPtCorrectionsDen);
255// else
256// fPtCorrectionsDen = 0;
257
258
259
260}
261//____________________________
262AliFemtoCorrFctnDEtaDPhiCorrections::~AliFemtoCorrFctnDEtaDPhiCorrections(){
263 // destructor
264 delete fDPhiDEtaNumerator;
265 delete fDPhiDEtaDenominator;
266 delete fDPhiNumerator;
267 delete fDPhiDenominator;
268 delete fDCosNumerator;
269 delete fDCosDenominator;
270 if (fDoPtAnalysis) {
271 delete fDPhiPtNumerator;
272 delete fDPhiPtDenominator;
273 delete fDCosPtNumerator;
274 delete fDCosPtDenominator;
275 }
276 delete fPhi;
277 delete fEta;
278
279 delete fYtYtNumerator;
280 delete fYtYtDenominator;
281
282 delete fPtCorrectionsNum;
283 delete fPtCorrectionsDen;
284 delete fEtaCorrectionsNum;
285 delete fEtaCorrectionsDen;
286}
287//_________________________
288AliFemtoCorrFctnDEtaDPhiCorrections& AliFemtoCorrFctnDEtaDPhiCorrections::operator=(const AliFemtoCorrFctnDEtaDPhiCorrections& aCorrFctn)
289{
290 // assignment operator
291 if (this == &aCorrFctn)
292 return *this;
293
294 if (aCorrFctn.fDPhiDEtaNumerator)
295 fDPhiDEtaNumerator = new TH2D(*aCorrFctn.fDPhiDEtaNumerator);
296 else
297 fDPhiDEtaNumerator = 0;
298 if (aCorrFctn.fDPhiDEtaDenominator)
299 fDPhiDEtaDenominator = new TH2D(*aCorrFctn.fDPhiDEtaDenominator);
300 else
301 fDPhiDEtaDenominator = 0;
302
303 if (aCorrFctn.fDPhiNumerator)
304 fDPhiNumerator = new TH1D(*aCorrFctn.fDPhiNumerator);
305 else
306 fDPhiNumerator = 0;
307 if (aCorrFctn.fDPhiDenominator)
308 fDPhiDenominator = new TH1D(*aCorrFctn.fDPhiDenominator);
309 else
310 fDPhiDenominator = 0;
311
312 if (aCorrFctn.fDCosNumerator)
313 fDCosNumerator = new TH1D(*aCorrFctn.fDCosNumerator);
314 else
315 fDCosNumerator = 0;
316 if (aCorrFctn.fDCosDenominator)
317 fDCosDenominator = new TH1D(*aCorrFctn.fDCosDenominator);
318 else
319 fDCosDenominator = 0;
320
321 if (aCorrFctn.fDPhiPtNumerator)
322 fDPhiPtNumerator = new TH2D(*aCorrFctn.fDPhiPtNumerator);
323 else
324 fDPhiPtNumerator = 0;
325 if (aCorrFctn.fDPhiPtDenominator)
326 fDPhiPtDenominator = new TH2D(*aCorrFctn.fDPhiPtDenominator);
327 else
328 fDPhiPtDenominator = 0;
329
330 if (aCorrFctn.fDCosPtNumerator)
331 fDCosPtNumerator = new TH2D(*aCorrFctn.fDCosPtNumerator);
332 else
333 fDCosPtNumerator = 0;
334 if (aCorrFctn.fDCosPtDenominator)
335 fDCosPtDenominator = new TH2D(*aCorrFctn.fDCosPtDenominator);
336 else
337 fDCosPtDenominator = 0;
338 if (aCorrFctn.fPhi)
339 fPhi = new TH1D(*aCorrFctn.fPhi);
340 else
341 fPhi = 0;
342 if (aCorrFctn.fEta)
343 fEta = new TH1D(*aCorrFctn.fEta);
344 else
345 fEta = 0;
346
347 if (aCorrFctn.fYtYtNumerator)
348 fYtYtNumerator = new TH2D(*aCorrFctn.fDPhiDEtaDenominator);
349 else
350 fYtYtNumerator = 0;
351
352 if (aCorrFctn.fYtYtDenominator)
353 fYtYtDenominator = new TH2D(*aCorrFctn.fDPhiDEtaDenominator);
354 else
355 fYtYtDenominator = 0;
356
357 fIfCorrectionHist = kNone;
358 fIfCorrection = 0;
359
360 fphiL = aCorrFctn.fphiL;
361 fphiT = aCorrFctn.fphiT;
362
363 fPartType = aCorrFctn.fPartType;
364
365// if (aCorrFctn.fPtCorrectionsNum)
366// fPtCorrectionsNum = new THnSparseF(*aCorrFctn.fPtCorrectionsNum);
367// else
368// fPtCorrectionsNum = 0;
369
370// if (aCorrFctn.fPtCorrectionsDen)
371// fPtCorrectionsDen = new THnSparseF(*aCorrFctn.fPtCorrectionsDen);
372// else
373// fPtCorrectionsDen = 0;
374
375
376
377 return *this;
378}
379//_________________________
380void AliFemtoCorrFctnDEtaDPhiCorrections::Finish(){
381 // here is where we should normalize, fit, etc...
382 // we should NOT Draw() the histos (as I had done it below),
383 // since we want to insulate ourselves from root at this level
384 // of the code. Do it instead at root command line with browser.
385 // mShareNumerator->Draw();
386 //mShareDenominator->Draw();
387 //mRatio->Draw();
388
389}
390
391//____________________________
392AliFemtoString AliFemtoCorrFctnDEtaDPhiCorrections::Report(){
393 // create report
394 string stemp = "TPC Ncls Correlation Function Report:\n";
395 char ctemp[100];
396 snprintf(ctemp , 100, "Number of entries in numerator:\t%E\n",fDPhiDEtaNumerator->GetEntries());
397 stemp += ctemp;
398 snprintf(ctemp , 100, "Number of entries in denominator:\t%E\n",fDPhiDEtaDenominator->GetEntries());
399 stemp += ctemp;
400 // stemp += mCoulombWeight->Report();
401 AliFemtoString returnThis = stemp;
402 return returnThis;
403}
404//____________________________
405void AliFemtoCorrFctnDEtaDPhiCorrections::AddRealPair( AliFemtoPair* pair){
406 // add real (effect) pair
407 if (fPairCut)
408 if (!fPairCut->Pass(pair)) return;
409
410 /*double phi1 = pair->Track1()->Track()->P().Phi();
411 double phi2 = pair->Track2()->Track()->P().Phi();
412 double eta1 = pair->Track1()->Track()->P().PseudoRapidity();
413 double eta2 = pair->Track2()->Track()->P().PseudoRapidity();*/
414
415 double phi1 = pair->Track1()->FourMomentum().Phi();
416 double phi2 = pair->Track2()->FourMomentum().Phi();
417 double eta1 = pair->Track1()->FourMomentum().PseudoRapidity();
418 double eta2 = pair->Track2()->FourMomentum().PseudoRapidity();
419
420 double dphi = phi1 - phi2;
421 while (dphi<fphiL) dphi+=PIT;
422 while (dphi>fphiT) dphi-=PIT;
423
424 double deta = eta1 - eta2;
425
426 double px1 = pair->Track1()->Track()->P().x();
427 double py1 = pair->Track1()->Track()->P().y();
428 //double pz1 = pair->Track1()->Track()->P().z();
429
430 double px2 = pair->Track2()->Track()->P().x();
431 double py2 = pair->Track2()->Track()->P().y();
432 //double pz2 = pair->Track2()->Track()->P().z();
433
434 double pt1 = TMath::Hypot(px1, py1);
435 double pt2 = TMath::Hypot(px2, py2);
436
437 double corrweight;
438 if (fIfCorrection) corrweight = CalculateCorrectionWeight(pt1, pt2);
439/* double ptmin = pt1>pt2 ? pt2 : pt1;
440
441 double cosphi = (px1*px2 + py1*py2 + pz1*pz2)/
442 sqrt((px1*px1 + py1*py1 + pz1*pz1)*(px2*px2 + py2*py2 + pz2*pz2));
443*/
444 if (fIfCorrection)
445 fDPhiDEtaNumerator->Fill(dphi, deta, corrweight);
446 else
447 fDPhiDEtaNumerator->Fill(dphi, deta);
448
449 fDPhiNumerator->Fill(dphi);
450// fDCosNumerator->Fill(cosphi);
451
452 if (fDoPtAnalysis) {
453// fDPhiPtNumerator->Fill(dphi, ptmin);
454// fDCosPtNumerator->Fill(cosphi, ptmin);
455 }
456
457 fPhi->Fill(phi1);
458 fEta->Fill(eta1);
459
460 double PionMass = 0.13956995;
461 double yt1 = TMath::Log(sqrt(1+(pt1/PionMass)*(pt1/PionMass))+(pt1/PionMass));
462 double yt2 = TMath::Log(sqrt(1+(pt2/PionMass)*(pt2/PionMass))+(pt2/PionMass));
463 fYtYtNumerator->Fill(yt1,yt2);
464
465 if(fIfCorrectionHist)
466 {
467 if(fIfCorrectionHist == kPt){
468 Double_t val[] = {pt1,pt2,dphi,deta};
469 fPtCorrectionsNum->Fill(val);
470 }
471 if(fIfCorrectionHist == kEta){
472 Double_t val[] = {eta1,eta2,dphi,deta};
473 fEtaCorrectionsNum->Fill(val);
474 }
475
476 }
477
478}
479//____________________________
480void AliFemtoCorrFctnDEtaDPhiCorrections::AddMixedPair( AliFemtoPair* pair){
481 // add mixed (background) pair
482 if (fPairCut)
483 if (!fPairCut->Pass(pair)) return;
484
485 /*double phi1 = pair->Track1()->Track()->P().Phi();
486 double phi2 = pair->Track2()->Track()->P().Phi();
487 double eta1 = pair->Track1()->Track()->P().PseudoRapidity();
488 double eta2 = pair->Track2()->Track()->P().PseudoRapidity();*/
489
490 double phi1 = pair->Track1()->FourMomentum().Phi();
491 double phi2 = pair->Track2()->FourMomentum().Phi();
492 double eta1 = pair->Track1()->FourMomentum().PseudoRapidity();
493 double eta2 = pair->Track2()->FourMomentum().PseudoRapidity();
494
495 double dphi = phi1 - phi2;
496 while (dphi<fphiL) dphi+=PIT;
497 while (dphi>fphiT) dphi-=PIT;
498
499 double deta = eta1 - eta2;
500
501 double px1 = pair->Track1()->Track()->P().x();
502 double py1 = pair->Track1()->Track()->P().y();
503 //double pz1 = pair->Track1()->Track()->P().z();
504
505 double px2 = pair->Track2()->Track()->P().x();
506 double py2 = pair->Track2()->Track()->P().y();
507 //double pz2 = pair->Track2()->Track()->P().z();
508
509 double pt1 = TMath::Hypot(px1, py1);
510 double pt2 = TMath::Hypot(px2, py2);
511// double ptmin = pt1>pt2 ? pt2 : pt1;
512
513// double cosphi = (px1*px2 + py1*py2 + pz1*pz2)/
514// sqrt((px1*px1 + py1*py1 + pz1*pz1)*(px2*px2 + py2*py2 + pz2*pz2));
515
516
517 double corrweight=-999;
518 if (fIfCorrection) corrweight = CalculateCorrectionWeight(pt1, pt2);
519
520 if(fIfCorrection)
521 fDPhiDEtaDenominator->Fill(dphi, deta, corrweight);
522 else
523 fDPhiDEtaDenominator->Fill(dphi, deta);
524
525 fDPhiDenominator->Fill(dphi);
526// fDCosDenominator->Fill(cosphi);
527
528 //if (fDoPtAnalysis) {
529 // fDPhiPtDenominator->Fill(dphi, ptmin);
530 // fDCosPtDenominator->Fill(cosphi, ptmin);
531 //}
532
533 double PionMass = 0.13956995;
534 double yt1 = TMath::Log(sqrt(1+(pt1/PionMass)*(pt1/PionMass))+(pt1/PionMass));
535 double yt2 = TMath::Log(sqrt(1+(pt2/PionMass)*(pt2/PionMass))+(pt2/PionMass));
536 fYtYtDenominator->Fill(yt1,yt2);
537
538 if(fIfCorrectionHist)
539 {
540 if(fIfCorrectionHist == kPt){
541 Double_t val[] = {pt1,pt2,dphi,deta};
542 fPtCorrectionsDen->Fill(val);
543 }
544 if(fIfCorrectionHist == kEta){
545 Double_t val[] = {eta1,eta2,dphi,deta};
546 fEtaCorrectionsDen->Fill(val);
547 }
548 }
549
550}
551
552
553void AliFemtoCorrFctnDEtaDPhiCorrections::WriteHistos()
554{
555 // Write out result histograms
556 fDPhiDEtaNumerator->Write();
557 fDPhiDEtaDenominator->Write();
558 /*fDPhiNumerator->Write();
559 fDPhiDenominator->Write();
560 fDCosNumerator->Write();
561 fDCosDenominator->Write();
562 if (fDoPtAnalysis) {
563 fDPhiPtNumerator->Write();
564 fDPhiPtDenominator->Write();
565 fDCosPtNumerator->Write();
566 fDCosPtDenominator->Write();
567 }*/
568 fPhi->Write();
569 fEta->Write();
570
571 if(fIfCorrectionHist){
572 if(fIfCorrectionHist==kPt){
573 fPtCorrectionsNum->Write();
574 fPtCorrectionsDen->Write();}
575 if(fIfCorrectionHist==kEta){
576 fEtaCorrectionsNum->Write();
577 fEtaCorrectionsDen->Write();}
578 }
579}
580
581TList* AliFemtoCorrFctnDEtaDPhiCorrections::GetOutputList()
582{
583 // Prepare the list of objects to be written to the output
584 TList *tOutputList = new TList();
585
586 tOutputList->Add(fDPhiDEtaNumerator);
587 tOutputList->Add(fDPhiDEtaDenominator);
588 /*tOutputList->Add(fDPhiNumerator);
589 tOutputList->Add(fDPhiDenominator);
590 tOutputList->Add(fDCosNumerator);
591 tOutputList->Add(fDCosDenominator);
592 if (fDoPtAnalysis) {
593 tOutputList->Add(fDPhiPtNumerator);
594 tOutputList->Add(fDPhiPtDenominator);
595 tOutputList->Add(fDCosPtNumerator);
596 tOutputList->Add(fDCosPtDenominator);
597 }*/
598 tOutputList->Add(fPhi);
599 tOutputList->Add(fEta);
600 tOutputList->Add(fYtYtNumerator);
601 tOutputList->Add(fYtYtDenominator);
602
603 if(fIfCorrectionHist){
604 if(fIfCorrection==kPt){
605 tOutputList->Add(fPtCorrectionsNum);
606 tOutputList->Add(fPtCorrectionsDen);
607 }
608 if(fIfCorrectionHist==kEta){
609 tOutputList->Add(fEtaCorrectionsNum);
610 tOutputList->Add(fEtaCorrectionsDen);
611 }
612 }
613 return tOutputList;
614
615}
616
617void AliFemtoCorrFctnDEtaDPhiCorrections::SetDoPtAnalysis(int do2d)
618{
619 fDoPtAnalysis = do2d;
620
621 int aPhiBins = fDPhiDEtaNumerator->GetNbinsX();
622 const char *title = fDPhiDEtaNumerator->GetTitle();
623
624 // set up numerator
625 char tTitNumDPhiPt[101] = "NumDPhiPt";
626 strncat(tTitNumDPhiPt,title, 100);
627 fDPhiPtNumerator = new TH2D(tTitNumDPhiPt,title,aPhiBins*2,-0.5*TMath::Pi(),3./2.*TMath::Pi(), 30, 0.0, 3.0);
628 // set up denominator
629 char tTitDenDPhiPt[101] = "DenDPhiPt";
630 strncat(tTitDenDPhiPt,title, 100);
631 fDPhiPtDenominator = new TH2D(tTitDenDPhiPt,title,aPhiBins*2,-0.5*TMath::Pi(),3./2.*TMath::Pi(), 30, 0.0, 3.0);
632
633 // set up numerator
634 char tTitNumDCosPt[101] = "NumDCosPt";
635 strncat(tTitNumDCosPt,title, 100);
636 fDCosPtNumerator = new TH2D(tTitNumDCosPt,title,aPhiBins*2,-1.0,1.0, 30, 0.0, 3.0);
637 // set up denominator
638 char tTitDenDCosPt[101] = "DenDCosPt";
639 strncat(tTitDenDCosPt,title, 100);
640 fDCosPtDenominator = new TH2D(tTitDenDCosPt,title,aPhiBins*2,-1.0,1.0, 30, 0.0, 3.0);
641
642 fDPhiPtNumerator->Sumw2();
643 fDPhiPtDenominator->Sumw2();
644 fDCosPtNumerator->Sumw2();
645 fDCosPtDenominator->Sumw2();
646
647}
648
649void AliFemtoCorrFctnDEtaDPhiCorrections::SetDoCorrections(bool doCorr)
650{
651 fIfCorrection = doCorr;
652}
653
654void AliFemtoCorrFctnDEtaDPhiCorrections::SetDoCorrectionsHist(CorrectionType doCorr)
655{
656 fIfCorrectionHist = doCorr;
657}
658
659void AliFemtoCorrFctnDEtaDPhiCorrections::LoadCorrectionTabFromFile(const char *pTtab, const char *corrTab)
660{
661
662 double val=-10000;
663
664 ifstream ifile1;
665 ifile1.open(pTtab);
666 if(ifile1)
667 {
668 int nrEntries1;
669 ifile1>>nrEntries1;
670 fpTab = new double[nrEntries1];
671 int i=0;
672 while(ifile1>>val)
673 {
674 fpTab[i] = val;
675 i++;
676 }
677 }
678 else
679 {
680 cout<<"No pT values file open!"<<endl;
681 }
682 ifile1.close();
683
684
685 ifstream ifile2;
686 ifile2.open(corrTab);
687 if(ifile2)
688 {
689 int nrEntries2;
690 ifile2>>nrEntries2;
691 fCorrFactorTab = new double[nrEntries2];
692 int i=0;
693 while(ifile2>>val)
694 {
695 fCorrFactorTab[i] = val;
696 cout<<"fCorrFactorTab: "<<fCorrFactorTab[i]<<endl;
697 i++;
698 }
699 }
700 else
701 {
702 cout<<"No corrections file open!"<<endl;
703 }
704 ifile2.close();
705}
706
707
708double AliFemtoCorrFctnDEtaDPhiCorrections::CalculateCorrectionWeight(double pT1, double pT2)
709{
710
711 double w1=0., w2=0.;
712 if(pT1>0 && pT1<5 && pT2>0 && pT2<5)
713 {
714 if(pT1<pT2)
715 {
716 for (int piter = 0 ; piter<200 ; piter++)
717 {
718
719 if(pT1>= fpTab[piter] && pT1< fpTab[piter+1])
720 {
721 w1=fCorrFactorTab[piter];
722 }
723 if(pT2>= fpTab[piter] && pT2< fpTab[piter+1])
724 {
725 w2=fCorrFactorTab[piter];
726 break;
727 }
728 }
729 }
730 else if(pT1>pT2)
731 {
732 for (int piter = 0 ; piter<200 ; piter++)
733 {
734 if(pT2>= fpTab[piter] && pT2< fpTab[piter+1])
735 w2=fCorrFactorTab[piter];
736 if(pT1>= fpTab[piter] && pT1< fpTab[piter+1])
737 {
738 w1=fCorrFactorTab[piter];
739 break;
740 }
741 }
742 }
743 else //pT1==pT2
744 {
745 for (int piter = 0 ; piter<200 ; piter++)
746 {
747 if(pT1>= fpTab[piter] && pT1< fpTab[piter+1])
748 {
749 w1=fCorrFactorTab[piter];
750 w2=fCorrFactorTab[piter];
751 break;
752 }
753 }
754 }
755 return w1*w2;
756 }
757 else
758 return 0;
759 return 0;
760}