1 ////////////////////////////////////////////////////////////////////////////////
3 // AliFemtoModelCorrFctnDEtaDPhi - A correlation function that analyzes //
4 // two particle correlations with respect to the azimuthal angle (phi) //
5 // and pseudorapidity (eta) difference //
7 // Authors: Adam Kisiel Adam.Kisiel@cern.ch //
9 ////////////////////////////////////////////////////////////////////////////////
11 #include "AliFemtoModelCorrFctnDEtaDPhi.h"
12 //#include "AliFemtoHisto.hh"
17 ClassImp(AliFemtoModelCorrFctnDEtaDPhi)
20 /*And some Model libraries..*/
22 //#include "AliFemtoModelGausLCMSFreezeOutGenerator.h"
23 //#include "AliFemtoModelHiddenInfo.h"
25 #include "AliFemtoModelGausLCMSFreezeOutGenerator.h"
26 #include "AliFemtoModelHiddenInfo.h"
27 #include "AliFemtoPair.h"
28 #include "AliFemtoModelManager.h"
31 //____________________________
32 AliFemtoModelCorrFctnDEtaDPhi::AliFemtoModelCorrFctnDEtaDPhi(char* title, const int& aPhiBins=20, const int& aEtaBins=20):
33 AliFemtoModelCorrFctn(),
34 fDPhiDEtaNumeratorTrue(0),
35 fDPhiDEtaNumeratorFake(0),
36 fDPhiDEtaDenominator(0),
37 fDPhiDEtaColNumerator(0),
38 fDPhiDEtaColDenominator(0),
39 fDPhiNumeratorTrue(0),
40 fDPhiNumeratorFake(0),
42 fDCosNumeratorTrue(0),
43 fDCosNumeratorFake(0),
46 fDPhiPtDenominator(0),
51 char tTitNumDT[101] = "NumDPhiDEtaTrue";
52 strncat(tTitNumDT,title, 100);
53 fDPhiDEtaNumeratorTrue = new TH2D(tTitNumDT,title,aPhiBins,-0.5*TMath::Pi(),1.5*TMath::Pi(),aEtaBins,-2.0,2.0);
55 char tTitNumDF[101] = "NumDPhiDEtaFake";
56 strncat(tTitNumDF,title, 100);
57 fDPhiDEtaNumeratorFake = new TH2D(tTitNumDF,title,aPhiBins,-0.5*TMath::Pi(),1.5*TMath::Pi(),aEtaBins,-2.0,2.0);
61 char tTitDenD[101] = "DenDPhiDEta";
62 strncat(tTitDenD,title, 100);
63 fDPhiDEtaDenominator = new TH2D(tTitDenD,title,aPhiBins,-0.5*TMath::Pi(),1.5*TMath::Pi(),aEtaBins,-2.0,2.0);
66 char tTitNumR[101] = "NumDPhiDEtaCol";
67 strncat(tTitNumR,title, 100);
68 fDPhiDEtaColNumerator = new TH2D(tTitNumR,title,aPhiBins,-0.5*TMath::Pi(),1.5*TMath::Pi(),aEtaBins,-2.0,2.0);
70 char tTitDenR[101] = "DenDPhiDEtaCol";
71 strncat(tTitDenR,title, 100);
72 fDPhiDEtaColDenominator = new TH2D(tTitDenR,title,aPhiBins,-0.5*TMath::Pi(),1.5*TMath::Pi(),aEtaBins,-2.0,2.0);
75 char tTitNumDPhiT[101] = "NumDPhiTrue";
76 strncat(tTitNumDPhiT,title, 100);
77 fDPhiNumeratorTrue = new TH1D(tTitNumDPhiT,title,aPhiBins*2,-0.5*TMath::Pi(),1.5*TMath::Pi());
79 char tTitNumDPhiF[101] = "NumDPhiFake";
80 strncat(tTitNumDPhiF,title, 100);
81 fDPhiNumeratorFake = new TH1D(tTitNumDPhiF,title,aPhiBins*2,-0.5*TMath::Pi(),1.5*TMath::Pi());
84 char tTitDenDPhi[101] = "DenDPhi";
85 strncat(tTitDenDPhi,title, 100);
86 fDPhiDenominator = new TH1D(tTitDenDPhi,title,aPhiBins*2,-0.5*TMath::Pi(),1.5*TMath::Pi());
89 char tTitNumDCosT[101] = "NumDCosTrue";
90 strncat(tTitNumDCosT,title, 100);
91 fDCosNumeratorTrue = new TH1D(tTitNumDCosT,title,aPhiBins*2,-1.0,1.0);
93 char tTitNumDCosF[101] = "NumDCosFake";
94 strncat(tTitNumDCosF,title, 100);
95 fDCosNumeratorFake = new TH1D(tTitNumDCosF,title,aPhiBins*2,-1.0,1.0);
98 char tTitDenDCos[101] = "DenDCos";
99 strncat(tTitDenDCos,title, 100);
100 fDCosDenominator = new TH1D(tTitDenDCos,title,aPhiBins*2,-1.0,1.0);
103 char tTitNumDPhiPt[101] = "NumDPhiPt";
104 strncat(tTitNumDPhiPt,title, 100);
105 fDPhiPtNumerator = new TH2D(tTitNumDPhiPt,title,aPhiBins*2,-0.5*TMath::Pi(),1.5*TMath::Pi(), 30, 0.0, 3.0);
106 // set up denominator
107 char tTitDenDPhiPt[101] = "DenDPhiPt";
108 strncat(tTitDenDPhiPt,title, 100);
109 fDPhiPtDenominator = new TH2D(tTitDenDPhiPt,title,aPhiBins*2,-0.5*TMath::Pi(),1.5*TMath::Pi(), 30, 0.0, 3.0);
112 char tTitNumDCosPt[101] = "NumDCosPt";
113 strncat(tTitNumDCosPt,title, 100);
114 fDCosPtNumerator = new TH2D(tTitNumDCosPt,title,aPhiBins*2,-1.0,1.0, 30, 0.0, 3.0);
115 // set up denominator
116 char tTitDenDCosPt[101] = "DenDCosPt";
117 strncat(tTitDenDCosPt,title, 100);
118 fDCosPtDenominator = new TH2D(tTitDenDCosPt,title,aPhiBins*2,-1.0,1.0, 30, 0.0, 3.0);
120 // to enable error bar calculation...
121 fDPhiDEtaNumeratorTrue->Sumw2();
122 fDPhiDEtaNumeratorFake->Sumw2();
123 fDPhiDEtaDenominator->Sumw2();
124 fDPhiDEtaColNumerator->Sumw2();
125 fDPhiDEtaColDenominator->Sumw2();
126 fDPhiNumeratorTrue->Sumw2();
127 fDPhiNumeratorFake->Sumw2();
128 fDPhiDenominator->Sumw2();
129 fDCosNumeratorTrue->Sumw2();
130 fDCosNumeratorFake->Sumw2();
131 fDCosDenominator->Sumw2();
132 fDPhiPtNumerator->Sumw2();
133 fDPhiPtDenominator->Sumw2();
134 fDCosPtNumerator->Sumw2();
135 fDCosPtDenominator->Sumw2();
139 //____________________________
140 AliFemtoModelCorrFctnDEtaDPhi::AliFemtoModelCorrFctnDEtaDPhi(const AliFemtoModelCorrFctnDEtaDPhi& aCorrFctn) :
141 AliFemtoModelCorrFctn(),
142 fDPhiDEtaNumeratorTrue(0),
143 fDPhiDEtaNumeratorFake(0),
144 fDPhiDEtaDenominator(0),
145 fDPhiDEtaColNumerator(0),
146 fDPhiDEtaColDenominator(0),
147 fDPhiNumeratorTrue(0),
148 fDPhiNumeratorFake(0),
150 fDCosNumeratorTrue(0),
151 fDCosNumeratorFake(0),
154 fDPhiPtDenominator(0),
156 fDCosPtDenominator(0)
159 if (aCorrFctn.fDPhiDEtaNumeratorTrue)
160 fDPhiDEtaNumeratorTrue = new TH2D(*aCorrFctn.fDPhiDEtaNumeratorTrue);
162 fDPhiDEtaNumeratorTrue = 0;
163 if (aCorrFctn.fDPhiDEtaNumeratorFake)
164 fDPhiDEtaNumeratorFake = new TH2D(*aCorrFctn.fDPhiDEtaNumeratorFake);
166 fDPhiDEtaNumeratorFake = 0;
168 if (aCorrFctn.fDPhiDEtaDenominator)
169 fDPhiDEtaDenominator = new TH2D(*aCorrFctn.fDPhiDEtaDenominator);
171 fDPhiDEtaDenominator = 0;
173 if (aCorrFctn.fDPhiDEtaColNumerator)
174 fDPhiDEtaColNumerator = new TH2D(*aCorrFctn.fDPhiDEtaColNumerator);
176 fDPhiDEtaColNumerator = 0;
177 if (aCorrFctn.fDPhiDEtaColDenominator)
178 fDPhiDEtaColDenominator = new TH2D(*aCorrFctn.fDPhiDEtaColDenominator);
180 fDPhiDEtaColDenominator = 0;
182 if (aCorrFctn.fDPhiNumeratorTrue)
183 fDPhiNumeratorTrue = new TH1D(*aCorrFctn.fDPhiNumeratorTrue);
185 fDPhiNumeratorTrue = 0;
187 if (aCorrFctn.fDPhiNumeratorFake)
188 fDPhiNumeratorFake = new TH1D(*aCorrFctn.fDPhiNumeratorFake);
190 fDPhiNumeratorFake = 0;
192 if (aCorrFctn.fDPhiDenominator)
193 fDPhiDenominator = new TH1D(*aCorrFctn.fDPhiDenominator);
195 fDPhiDenominator = 0;
197 if (aCorrFctn.fDCosNumeratorTrue)
198 fDCosNumeratorTrue = new TH1D(*aCorrFctn.fDCosNumeratorTrue);
200 fDCosNumeratorTrue = 0;
201 if (aCorrFctn.fDCosNumeratorFake)
202 fDCosNumeratorFake = new TH1D(*aCorrFctn.fDCosNumeratorFake);
204 fDCosNumeratorFake = 0;
206 if (aCorrFctn.fDCosDenominator)
207 fDCosDenominator = new TH1D(*aCorrFctn.fDCosDenominator);
209 fDCosDenominator = 0;
211 if (aCorrFctn.fDPhiPtNumerator)
212 fDPhiPtNumerator = new TH2D(*aCorrFctn.fDPhiPtNumerator);
214 fDPhiPtNumerator = 0;
215 if (aCorrFctn.fDPhiPtDenominator)
216 fDPhiPtDenominator = new TH2D(*aCorrFctn.fDPhiPtDenominator);
218 fDPhiPtDenominator = 0;
220 if (aCorrFctn.fDCosPtNumerator)
221 fDCosPtNumerator = new TH2D(*aCorrFctn.fDCosPtNumerator);
223 fDCosPtNumerator = 0;
224 if (aCorrFctn.fDCosPtDenominator)
225 fDCosPtDenominator = new TH2D(*aCorrFctn.fDCosPtDenominator);
227 fDCosPtDenominator = 0;
229 //____________________________
230 AliFemtoModelCorrFctnDEtaDPhi::~AliFemtoModelCorrFctnDEtaDPhi(){
232 if(fDPhiDEtaNumeratorTrue) delete fDPhiDEtaNumeratorTrue;
233 if(fDPhiDEtaNumeratorFake) delete fDPhiDEtaNumeratorFake;
234 if(fDPhiDEtaDenominator) delete fDPhiDEtaDenominator;
235 if(fDPhiDEtaColNumerator) delete fDPhiDEtaColNumerator;
236 if(fDPhiDEtaColDenominator) delete fDPhiDEtaColDenominator;
237 if(fDPhiNumeratorTrue) delete fDPhiNumeratorTrue;
238 if(fDPhiNumeratorFake) delete fDPhiNumeratorFake;
239 if(fDPhiDenominator) delete fDPhiDenominator;
240 if(fDCosNumeratorTrue) delete fDCosNumeratorTrue;
241 if(fDCosNumeratorFake) delete fDCosNumeratorFake;
242 if(fDCosDenominator) delete fDCosDenominator;
243 if(fDPhiPtNumerator) delete fDPhiPtNumerator;
244 if(fDPhiPtDenominator) delete fDPhiPtDenominator;
245 if(fDCosPtNumerator) delete fDCosPtNumerator;
246 if(fDCosPtDenominator) delete fDCosPtDenominator;
248 //_________________________
249 AliFemtoModelCorrFctnDEtaDPhi& AliFemtoModelCorrFctnDEtaDPhi::operator=(const AliFemtoModelCorrFctnDEtaDPhi& aCorrFctn)
251 // assignment operator
252 if (this == &aCorrFctn)
255 if (aCorrFctn.fDPhiDEtaNumeratorTrue)
256 fDPhiDEtaNumeratorTrue = new TH2D(*aCorrFctn.fDPhiDEtaNumeratorTrue);
258 fDPhiDEtaNumeratorTrue = 0;
260 if (aCorrFctn.fDPhiDEtaNumeratorFake)
261 fDPhiDEtaNumeratorFake = new TH2D(*aCorrFctn.fDPhiDEtaNumeratorFake);
263 fDPhiDEtaNumeratorFake = 0;
265 if (aCorrFctn.fDPhiDEtaDenominator)
266 fDPhiDEtaDenominator = new TH2D(*aCorrFctn.fDPhiDEtaDenominator);
268 fDPhiDEtaDenominator = 0;
270 if (aCorrFctn.fDPhiDEtaColNumerator)
271 fDPhiDEtaColNumerator = new TH2D(*aCorrFctn.fDPhiDEtaColNumerator);
273 fDPhiDEtaColNumerator = 0;
274 if (aCorrFctn.fDPhiDEtaColDenominator)
275 fDPhiDEtaColDenominator = new TH2D(*aCorrFctn.fDPhiDEtaColDenominator);
277 fDPhiDEtaColDenominator = 0;
279 if (aCorrFctn.fDPhiNumeratorTrue)
280 fDPhiNumeratorTrue = new TH1D(*aCorrFctn.fDPhiNumeratorTrue);
282 fDPhiNumeratorTrue = 0;
283 if (aCorrFctn.fDPhiNumeratorFake)
284 fDPhiNumeratorFake = new TH1D(*aCorrFctn.fDPhiNumeratorFake);
286 fDPhiNumeratorFake = 0;
288 if (aCorrFctn.fDPhiDenominator)
289 fDPhiDenominator = new TH1D(*aCorrFctn.fDPhiDenominator);
291 fDPhiDenominator = 0;
293 if (aCorrFctn.fDCosNumeratorTrue)
294 fDCosNumeratorTrue = new TH1D(*aCorrFctn.fDCosNumeratorTrue);
296 fDCosNumeratorTrue = 0;
297 if (aCorrFctn.fDCosNumeratorFake)
298 fDCosNumeratorFake = new TH1D(*aCorrFctn.fDCosNumeratorFake);
300 fDCosNumeratorFake = 0;
302 if (aCorrFctn.fDCosDenominator)
303 fDCosDenominator = new TH1D(*aCorrFctn.fDCosDenominator);
305 fDCosDenominator = 0;
307 if (aCorrFctn.fDPhiPtNumerator)
308 fDPhiPtNumerator = new TH2D(*aCorrFctn.fDPhiPtNumerator);
310 fDPhiPtNumerator = 0;
311 if (aCorrFctn.fDPhiPtDenominator)
312 fDPhiPtDenominator = new TH2D(*aCorrFctn.fDPhiPtDenominator);
314 fDPhiPtDenominator = 0;
316 if (aCorrFctn.fDCosPtNumerator)
317 fDCosPtNumerator = new TH2D(*aCorrFctn.fDCosPtNumerator);
319 fDCosPtNumerator = 0;
320 if (aCorrFctn.fDCosPtDenominator)
321 fDCosPtDenominator = new TH2D(*aCorrFctn.fDCosPtDenominator);
323 fDCosPtDenominator = 0;
327 //_________________________
328 void AliFemtoModelCorrFctnDEtaDPhi::Finish(){
329 // here is where we should normalize, fit, etc...
330 // we should NOT Draw() the histos (as I had done it below),
331 // since we want to insulate ourselves from root at this level
332 // of the code. Do it instead at root command line with browser.
333 // mShareNumerator->Draw();
334 //mShareDenominator->Draw();
339 //____________________________
340 AliFemtoString AliFemtoModelCorrFctnDEtaDPhi::Report(){
342 string stemp = "TPC Ncls Correlation Function Report:\n";
344 snprintf(ctemp,100,"Number of entries in numerator true:\t%E\n",fDPhiDEtaNumeratorTrue->GetEntries());
345 snprintf(ctemp,100,"Number of entries in numerator fake:\t%E\n",fDPhiDEtaNumeratorFake->GetEntries());
347 snprintf(ctemp,100,"Number of entries in denominator:\t%E\n",fDPhiDEtaDenominator->GetEntries());
349 // stemp += mCoulombWeight->Report();
350 AliFemtoString returnThis = stemp;
353 //____________________________
354 void AliFemtoModelCorrFctnDEtaDPhi::AddRealPair( AliFemtoPair* pair){
355 // add real (effect) pair
356 double phi1 = pair->Track1()->Track()->P().Phi();
357 double phi2 = pair->Track2()->Track()->P().Phi();
358 double eta1 = pair->Track1()->Track()->P().PseudoRapidity();
359 double eta2 = pair->Track2()->Track()->P().PseudoRapidity();
361 double dphi = phi1 - phi2;
362 while (dphi<-TMath::Pi()/2) dphi+=TMath::Pi()*2;
363 while (dphi>3*TMath::Pi()/2) dphi-=TMath::Pi()*2;
365 double deta = eta1 - eta2;
367 double px1 = pair->Track1()->Track()->P().x();
368 double py1 = pair->Track1()->Track()->P().y();
369 double pz1 = pair->Track1()->Track()->P().z();
371 double px2 = pair->Track2()->Track()->P().x();
372 double py2 = pair->Track2()->Track()->P().y();
373 double pz2 = pair->Track2()->Track()->P().z();
375 double pt1 = TMath::Hypot(px1, py1);
376 double pt2 = TMath::Hypot(px2, py2);
377 double ptmin = pt1>pt2 ? pt2 : pt1;
379 double cosphi = (px1*px2 + py1*py2 + pz1*pz2)/
380 sqrt((px1*px1 + py1*py1 + pz1*pz1)*(px2*px2 + py2*py2 + pz2*pz2));
383 Double_t weight = fManager->GetWeight(pair);
384 fDPhiDEtaNumeratorTrue->Fill(dphi, deta,weight);
387 fDPhiDEtaColNumerator->Fill(dphi, deta);
390 fDPhiDEtaColNumerator->Fill(dphi, -eta1-eta2);
393 fDPhiNumeratorTrue->Fill(dphi,weight);
394 fDCosNumeratorTrue->Fill(cosphi,weight);
396 fDPhiPtNumerator->Fill(dphi, ptmin);
397 fDCosPtNumerator->Fill(cosphi, ptmin);
400 //____________________________
401 void AliFemtoModelCorrFctnDEtaDPhi::AddMixedPair( AliFemtoPair* pair){
402 // add mixed (background) pair
403 double phi1 = pair->Track1()->Track()->P().Phi();
404 double phi2 = pair->Track2()->Track()->P().Phi();
405 double eta1 = pair->Track1()->Track()->P().PseudoRapidity();
406 double eta2 = pair->Track2()->Track()->P().PseudoRapidity();
408 double dphi = phi1 - phi2;
409 while (dphi<-TMath::Pi()/2) dphi+=TMath::Pi()*2;
410 while (dphi>3*TMath::Pi()/2) dphi-=TMath::Pi()*2;
412 double deta = eta1 - eta2;
414 double px1 = pair->Track1()->Track()->P().x();
415 double py1 = pair->Track1()->Track()->P().y();
416 double pz1 = pair->Track1()->Track()->P().z();
418 double px2 = pair->Track2()->Track()->P().x();
419 double py2 = pair->Track2()->Track()->P().y();
420 double pz2 = pair->Track2()->Track()->P().z();
422 double pt1 = TMath::Hypot(px1, py1);
423 double pt2 = TMath::Hypot(px2, py2);
424 double ptmin = pt1>pt2 ? pt2 : pt1;
426 double cosphi = (px1*px2 + py1*py2 + pz1*pz2)/
427 sqrt((px1*px1 + py1*py1 + pz1*pz1)*(px2*px2 + py2*py2 + pz2*pz2));
430 Double_t weight = fManager->GetWeight(pair);
431 fDPhiDEtaNumeratorFake->Fill(dphi, deta,weight);
433 fDPhiDEtaDenominator->Fill(dphi, deta,1.0);
436 fDPhiDEtaColDenominator->Fill(dphi, deta);
439 fDPhiDEtaColDenominator->Fill(dphi, -eta1-eta2);
442 fDPhiNumeratorFake->Fill(dphi,weight);
443 fDCosNumeratorFake->Fill(cosphi,weight);
445 fDPhiDenominator->Fill(dphi,1.0);
446 fDCosDenominator->Fill(cosphi,1.0);
448 fDPhiPtDenominator->Fill(dphi, ptmin);
449 fDCosPtDenominator->Fill(cosphi, ptmin);
453 void AliFemtoModelCorrFctnDEtaDPhi::WriteHistos()
455 // Write out result histograms
456 fDPhiDEtaNumeratorTrue->Write();
457 fDPhiDEtaNumeratorFake->Write();
458 fDPhiDEtaDenominator->Write();
459 fDPhiDEtaColNumerator->Write();
460 fDPhiDEtaColDenominator->Write();
461 fDPhiNumeratorTrue->Write();
462 fDPhiNumeratorFake->Write();
463 fDPhiDenominator->Write();
464 fDCosNumeratorTrue->Write();
465 fDCosNumeratorFake->Write();
466 fDCosDenominator->Write();
467 fDPhiPtNumerator->Write();
468 fDPhiPtDenominator->Write();
469 fDCosPtNumerator->Write();
470 fDCosPtDenominator->Write();
473 TList* AliFemtoModelCorrFctnDEtaDPhi::GetOutputList()
475 // Prepare the list of objects to be written to the output
476 TList *tOutputList = new TList();
478 tOutputList->Add(fDPhiDEtaNumeratorTrue);
479 tOutputList->Add(fDPhiDEtaNumeratorFake);
480 tOutputList->Add(fDPhiDEtaDenominator);
481 tOutputList->Add(fDPhiDEtaColNumerator);
482 tOutputList->Add(fDPhiDEtaColDenominator);
483 tOutputList->Add(fDPhiNumeratorTrue);
484 tOutputList->Add(fDPhiNumeratorFake);
485 tOutputList->Add(fDPhiDenominator);
486 tOutputList->Add(fDCosNumeratorTrue);
487 tOutputList->Add(fDCosNumeratorFake);
488 tOutputList->Add(fDCosDenominator);
489 tOutputList->Add(fDPhiPtNumerator);
490 tOutputList->Add(fDPhiPtDenominator);
491 tOutputList->Add(fDCosPtNumerator);
492 tOutputList->Add(fDCosPtDenominator);