1 ////////////////////////////////////////////////////////////////////////////////
3 // AliFemtoCorrFctnDEtaDPhi - 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 "AliFemtoCorrFctnDEtaDPhi.h"
12 //#include "AliFemtoHisto.hh"
17 ClassImp(AliFemtoCorrFctnDEtaDPhi)
20 //____________________________
21 AliFemtoCorrFctnDEtaDPhi::AliFemtoCorrFctnDEtaDPhi(char* title, const int& aPhiBins=20, const int& aEtaBins=20):
23 fDPhiDEtaNumerator(0),
24 fDPhiDEtaDenominator(0),
25 fDPhiDEtaColNumerator(0),
26 fDPhiDEtaColDenominator(0),
32 fDPhiPtDenominator(0),
37 char tTitNumD[100] = "NumDPhiDEta";
38 strcat(tTitNumD,title);
39 fDPhiDEtaNumerator = new TH2D(tTitNumD,title,aPhiBins,-0.5*TMath::Pi(),1.5*TMath::Pi(),aEtaBins,-2.0,2.0);
41 char tTitDenD[100] = "DenDPhiDEta";
42 strcat(tTitDenD,title);
43 fDPhiDEtaDenominator = new TH2D(tTitDenD,title,aPhiBins,-0.5*TMath::Pi(),1.5*TMath::Pi(),aEtaBins,-2.0,2.0);
46 char tTitNumR[100] = "NumDPhiDEtaCol";
47 strcat(tTitNumR,title);
48 fDPhiDEtaColNumerator = new TH2D(tTitNumR,title,aPhiBins,-0.5*TMath::Pi(),1.5*TMath::Pi(),aEtaBins,-2.0,2.0);
50 char tTitDenR[100] = "DenDPhiDEtaCol";
51 strcat(tTitDenR,title);
52 fDPhiDEtaColDenominator = new TH2D(tTitDenR,title,aPhiBins,-0.5*TMath::Pi(),1.5*TMath::Pi(),aEtaBins,-2.0,2.0);
55 char tTitNumDPhi[100] = "NumDPhi";
56 strcat(tTitNumDPhi,title);
57 fDPhiNumerator = new TH1D(tTitNumDPhi,title,aPhiBins*2,-0.5*TMath::Pi(),1.5*TMath::Pi());
59 char tTitDenDPhi[100] = "DenDPhi";
60 strcat(tTitDenDPhi,title);
61 fDPhiDenominator = new TH1D(tTitDenDPhi,title,aPhiBins*2,-0.5*TMath::Pi(),1.5*TMath::Pi());
64 char tTitNumDCos[100] = "NumDCos";
65 strcat(tTitNumDCos,title);
66 fDCosNumerator = new TH1D(tTitNumDCos,title,aPhiBins*2,-1.0,1.0);
68 char tTitDenDCos[100] = "DenDCos";
69 strcat(tTitDenDCos,title);
70 fDCosDenominator = new TH1D(tTitDenDCos,title,aPhiBins*2,-1.0,1.0);
73 char tTitNumDPhiPt[100] = "NumDPhiPt";
74 strcat(tTitNumDPhiPt,title);
75 fDPhiPtNumerator = new TH2D(tTitNumDPhiPt,title,aPhiBins*2,-0.5*TMath::Pi(),1.5*TMath::Pi(), 30, 0.0, 3.0);
77 char tTitDenDPhiPt[100] = "DenDPhiPt";
78 strcat(tTitDenDPhiPt,title);
79 fDPhiPtDenominator = new TH2D(tTitDenDPhiPt,title,aPhiBins*2,-0.5*TMath::Pi(),1.5*TMath::Pi(), 30, 0.0, 3.0);
82 char tTitNumDCosPt[100] = "NumDCosPt";
83 strcat(tTitNumDCosPt,title);
84 fDCosPtNumerator = new TH2D(tTitNumDCosPt,title,aPhiBins*2,-1.0,1.0, 30, 0.0, 3.0);
86 char tTitDenDCosPt[100] = "DenDCosPt";
87 strcat(tTitDenDCosPt,title);
88 fDCosPtDenominator = new TH2D(tTitDenDCosPt,title,aPhiBins*2,-1.0,1.0, 30, 0.0, 3.0);
90 // to enable error bar calculation...
91 fDPhiDEtaNumerator->Sumw2();
92 fDPhiDEtaDenominator->Sumw2();
93 fDPhiDEtaColNumerator->Sumw2();
94 fDPhiDEtaColDenominator->Sumw2();
95 fDPhiNumerator->Sumw2();
96 fDPhiDenominator->Sumw2();
97 fDCosNumerator->Sumw2();
98 fDCosDenominator->Sumw2();
99 fDPhiPtNumerator->Sumw2();
100 fDPhiPtDenominator->Sumw2();
101 fDCosPtNumerator->Sumw2();
102 fDCosPtDenominator->Sumw2();
106 //____________________________
107 AliFemtoCorrFctnDEtaDPhi::AliFemtoCorrFctnDEtaDPhi(const AliFemtoCorrFctnDEtaDPhi& aCorrFctn) :
109 fDPhiDEtaNumerator(0),
110 fDPhiDEtaDenominator(0),
111 fDPhiDEtaColNumerator(0),
112 fDPhiDEtaColDenominator(0),
118 fDPhiPtDenominator(0),
120 fDCosPtDenominator(0)
123 if (aCorrFctn.fDPhiDEtaNumerator)
124 fDPhiDEtaNumerator = new TH2D(*aCorrFctn.fDPhiDEtaNumerator);
126 fDPhiDEtaNumerator = 0;
127 if (aCorrFctn.fDPhiDEtaDenominator)
128 fDPhiDEtaDenominator = new TH2D(*aCorrFctn.fDPhiDEtaDenominator);
130 fDPhiDEtaDenominator = 0;
132 if (aCorrFctn.fDPhiDEtaColNumerator)
133 fDPhiDEtaColNumerator = new TH2D(*aCorrFctn.fDPhiDEtaColNumerator);
135 fDPhiDEtaColNumerator = 0;
136 if (aCorrFctn.fDPhiDEtaColDenominator)
137 fDPhiDEtaColDenominator = new TH2D(*aCorrFctn.fDPhiDEtaColDenominator);
139 fDPhiDEtaColDenominator = 0;
141 if (aCorrFctn.fDPhiNumerator)
142 fDPhiNumerator = new TH1D(*aCorrFctn.fDPhiNumerator);
145 if (aCorrFctn.fDPhiDenominator)
146 fDPhiDenominator = new TH1D(*aCorrFctn.fDPhiDenominator);
148 fDPhiDenominator = 0;
150 if (aCorrFctn.fDCosNumerator)
151 fDCosNumerator = new TH1D(*aCorrFctn.fDCosNumerator);
154 if (aCorrFctn.fDCosDenominator)
155 fDCosDenominator = new TH1D(*aCorrFctn.fDCosDenominator);
157 fDCosDenominator = 0;
159 if (aCorrFctn.fDPhiPtNumerator)
160 fDPhiPtNumerator = new TH2D(*aCorrFctn.fDPhiPtNumerator);
162 fDPhiPtNumerator = 0;
163 if (aCorrFctn.fDPhiPtDenominator)
164 fDPhiPtDenominator = new TH2D(*aCorrFctn.fDPhiPtDenominator);
166 fDPhiPtDenominator = 0;
168 if (aCorrFctn.fDCosPtNumerator)
169 fDCosPtNumerator = new TH2D(*aCorrFctn.fDCosPtNumerator);
171 fDCosPtNumerator = 0;
172 if (aCorrFctn.fDCosPtDenominator)
173 fDCosPtDenominator = new TH2D(*aCorrFctn.fDCosPtDenominator);
175 fDCosPtDenominator = 0;
177 //____________________________
178 AliFemtoCorrFctnDEtaDPhi::~AliFemtoCorrFctnDEtaDPhi(){
180 delete fDPhiDEtaNumerator;
181 delete fDPhiDEtaDenominator;
182 delete fDPhiDEtaColNumerator;
183 delete fDPhiDEtaColDenominator;
184 delete fDPhiNumerator;
185 delete fDPhiDenominator;
186 delete fDCosNumerator;
187 delete fDCosDenominator;
188 delete fDPhiPtNumerator;
189 delete fDPhiPtDenominator;
190 delete fDCosPtNumerator;
191 delete fDCosPtDenominator;
193 //_________________________
194 AliFemtoCorrFctnDEtaDPhi& AliFemtoCorrFctnDEtaDPhi::operator=(const AliFemtoCorrFctnDEtaDPhi& aCorrFctn)
196 // assignment operator
197 if (this == &aCorrFctn)
200 if (aCorrFctn.fDPhiDEtaNumerator)
201 fDPhiDEtaNumerator = new TH2D(*aCorrFctn.fDPhiDEtaNumerator);
203 fDPhiDEtaNumerator = 0;
204 if (aCorrFctn.fDPhiDEtaDenominator)
205 fDPhiDEtaDenominator = new TH2D(*aCorrFctn.fDPhiDEtaDenominator);
207 fDPhiDEtaDenominator = 0;
209 if (aCorrFctn.fDPhiDEtaColNumerator)
210 fDPhiDEtaColNumerator = new TH2D(*aCorrFctn.fDPhiDEtaColNumerator);
212 fDPhiDEtaColNumerator = 0;
213 if (aCorrFctn.fDPhiDEtaColDenominator)
214 fDPhiDEtaColDenominator = new TH2D(*aCorrFctn.fDPhiDEtaColDenominator);
216 fDPhiDEtaColDenominator = 0;
218 if (aCorrFctn.fDPhiNumerator)
219 fDPhiNumerator = new TH1D(*aCorrFctn.fDPhiNumerator);
222 if (aCorrFctn.fDPhiDenominator)
223 fDPhiDenominator = new TH1D(*aCorrFctn.fDPhiDenominator);
225 fDPhiDenominator = 0;
227 if (aCorrFctn.fDCosNumerator)
228 fDCosNumerator = new TH1D(*aCorrFctn.fDCosNumerator);
231 if (aCorrFctn.fDCosDenominator)
232 fDCosDenominator = new TH1D(*aCorrFctn.fDCosDenominator);
234 fDCosDenominator = 0;
236 if (aCorrFctn.fDPhiPtNumerator)
237 fDPhiPtNumerator = new TH2D(*aCorrFctn.fDPhiPtNumerator);
239 fDPhiPtNumerator = 0;
240 if (aCorrFctn.fDPhiPtDenominator)
241 fDPhiPtDenominator = new TH2D(*aCorrFctn.fDPhiPtDenominator);
243 fDPhiPtDenominator = 0;
245 if (aCorrFctn.fDCosPtNumerator)
246 fDCosPtNumerator = new TH2D(*aCorrFctn.fDCosPtNumerator);
248 fDCosPtNumerator = 0;
249 if (aCorrFctn.fDCosPtDenominator)
250 fDCosPtDenominator = new TH2D(*aCorrFctn.fDCosPtDenominator);
252 fDCosPtDenominator = 0;
256 //_________________________
257 void AliFemtoCorrFctnDEtaDPhi::Finish(){
258 // here is where we should normalize, fit, etc...
259 // we should NOT Draw() the histos (as I had done it below),
260 // since we want to insulate ourselves from root at this level
261 // of the code. Do it instead at root command line with browser.
262 // mShareNumerator->Draw();
263 //mShareDenominator->Draw();
268 //____________________________
269 AliFemtoString AliFemtoCorrFctnDEtaDPhi::Report(){
271 string stemp = "TPC Ncls Correlation Function Report:\n";
273 sprintf(ctemp,"Number of entries in numerator:\t%E\n",fDPhiDEtaNumerator->GetEntries());
275 sprintf(ctemp,"Number of entries in denominator:\t%E\n",fDPhiDEtaDenominator->GetEntries());
277 // stemp += mCoulombWeight->Report();
278 AliFemtoString returnThis = stemp;
281 //____________________________
282 void AliFemtoCorrFctnDEtaDPhi::AddRealPair( AliFemtoPair* pair){
283 // add real (effect) pair
284 double phi1 = pair->Track1()->Track()->P().phi();
285 double phi2 = pair->Track2()->Track()->P().phi();
286 double eta1 = pair->Track1()->Track()->P().pseudoRapidity();
287 double eta2 = pair->Track2()->Track()->P().pseudoRapidity();
289 double dphi = phi1 - phi2;
290 while (dphi<-TMath::Pi()/2) dphi+=TMath::Pi()*2;
291 while (dphi>3*TMath::Pi()/2) dphi-=TMath::Pi()*2;
293 double deta = eta1 - eta2;
295 double px1 = pair->Track1()->Track()->P().x();
296 double py1 = pair->Track1()->Track()->P().y();
297 double pz1 = pair->Track1()->Track()->P().z();
299 double px2 = pair->Track2()->Track()->P().x();
300 double py2 = pair->Track2()->Track()->P().y();
301 double pz2 = pair->Track2()->Track()->P().z();
303 double pt1 = TMath::Hypot(px1, py1);
304 double pt2 = TMath::Hypot(px2, py2);
305 double ptmin = pt1>pt2 ? pt2 : pt1;
307 double cosphi = (px1*px2 + py1*py2 + pz1*pz2)/
308 sqrt((px1*px1 + py1*py1 + pz1*pz1)*(px2*px2 + py2*py2 + pz2*pz2));
310 fDPhiDEtaNumerator->Fill(dphi, deta);
313 fDPhiDEtaColNumerator->Fill(dphi, deta);
316 fDPhiDEtaColNumerator->Fill(dphi, -eta1-eta2);
319 fDPhiNumerator->Fill(dphi);
320 fDCosNumerator->Fill(cosphi);
322 fDPhiPtNumerator->Fill(dphi, ptmin);
323 fDCosPtNumerator->Fill(cosphi, ptmin);
326 //____________________________
327 void AliFemtoCorrFctnDEtaDPhi::AddMixedPair( AliFemtoPair* pair){
328 // add mixed (background) pair
329 double phi1 = pair->Track1()->Track()->P().phi();
330 double phi2 = pair->Track2()->Track()->P().phi();
331 double eta1 = pair->Track1()->Track()->P().pseudoRapidity();
332 double eta2 = pair->Track2()->Track()->P().pseudoRapidity();
334 double dphi = phi1 - phi2;
335 while (dphi<-TMath::Pi()/2) dphi+=TMath::Pi()*2;
336 while (dphi>3*TMath::Pi()/2) dphi-=TMath::Pi()*2;
338 double deta = eta1 - eta2;
340 double px1 = pair->Track1()->Track()->P().x();
341 double py1 = pair->Track1()->Track()->P().y();
342 double pz1 = pair->Track1()->Track()->P().z();
344 double px2 = pair->Track2()->Track()->P().x();
345 double py2 = pair->Track2()->Track()->P().y();
346 double pz2 = pair->Track2()->Track()->P().z();
348 double pt1 = TMath::Hypot(px1, py1);
349 double pt2 = TMath::Hypot(px2, py2);
350 double ptmin = pt1>pt2 ? pt2 : pt1;
352 double cosphi = (px1*px2 + py1*py2 + pz1*pz2)/
353 sqrt((px1*px1 + py1*py1 + pz1*pz1)*(px2*px2 + py2*py2 + pz2*pz2));
355 fDPhiDEtaDenominator->Fill(dphi, deta);
358 fDPhiDEtaColDenominator->Fill(dphi, deta);
361 fDPhiDEtaColDenominator->Fill(dphi, -eta1-eta2);
364 fDPhiDenominator->Fill(dphi);
365 fDCosDenominator->Fill(cosphi);
367 fDPhiPtDenominator->Fill(dphi, ptmin);
368 fDCosPtDenominator->Fill(cosphi, ptmin);
372 void AliFemtoCorrFctnDEtaDPhi::WriteHistos()
374 // Write out result histograms
375 fDPhiDEtaNumerator->Write();
376 fDPhiDEtaDenominator->Write();
377 fDPhiDEtaColNumerator->Write();
378 fDPhiDEtaColDenominator->Write();
379 fDPhiNumerator->Write();
380 fDPhiDenominator->Write();
381 fDCosNumerator->Write();
382 fDCosDenominator->Write();
383 fDPhiPtNumerator->Write();
384 fDPhiPtDenominator->Write();
385 fDCosPtNumerator->Write();
386 fDCosPtDenominator->Write();
389 TList* AliFemtoCorrFctnDEtaDPhi::GetOutputList()
391 // Prepare the list of objects to be written to the output
392 TList *tOutputList = new TList();
394 tOutputList->Add(fDPhiDEtaNumerator);
395 tOutputList->Add(fDPhiDEtaDenominator);
396 tOutputList->Add(fDPhiDEtaColNumerator);
397 tOutputList->Add(fDPhiDEtaColDenominator);
398 tOutputList->Add(fDPhiNumerator);
399 tOutputList->Add(fDPhiDenominator);
400 tOutputList->Add(fDCosNumerator);
401 tOutputList->Add(fDCosDenominator);
402 tOutputList->Add(fDPhiPtNumerator);
403 tOutputList->Add(fDPhiPtDenominator);
404 tOutputList->Add(fDCosPtNumerator);
405 tOutputList->Add(fDCosPtDenominator);