]>
Commit | Line | Data |
---|---|---|
2188af53 | 1 | /************************************************************************* |
2 | * Copyright(c) 1998-2008, ALICE Experiment at CERN, All rights reserved. * | |
3 | * * | |
4 | * Author: The ALICE Off-line Project. * | |
5 | * Contributors are mentioned in the code where appropriate. * | |
6 | * * | |
7 | * Permission to use, copy, modify and distribute this software and its * | |
8 | * documentation strictly for non-commercial purposes is hereby granted * | |
9 | * without fee, provided that the above copyright notice appears in all * | |
10 | * copies and that both the copyright notice and this permission notice * | |
11 | * appear in the supporting documentation. The authors make no claims * | |
12 | * about the suitability of this software for any purpose. It is * | |
13 | * provided "as is" without express or implied warranty. * | |
14 | **************************************************************************/ | |
15 | ||
16 | /******************************** | |
17 | * flow analysis with cumulants * | |
18 | * * | |
19 | * author: Ante Bilandzic * | |
20 | * (anteb@nikhef.nl) * | |
21 | *******************************/ | |
22 | ||
f1d945a1 | 23 | #define AliFlowAnalysisWithCumulants_cxx |
24 | ||
25 | #include "Riostream.h" | |
26 | #include "AliFlowCommonConstants.h" | |
27 | #include "AliFlowCommonHist.h" | |
28 | #include "AliFlowCommonHistResults.h" | |
29 | #include "TChain.h" | |
30 | #include "TFile.h" | |
aaebd73d | 31 | #include "TList.h" //NEW |
f1d945a1 | 32 | #include "TParticle.h" |
2188af53 | 33 | #include "TRandom3.h" |
aaebd73d | 34 | #include "TProfile.h" |
35 | #include "TProfile2D.h" | |
36 | #include "TProfile3D.h" | |
f1d945a1 | 37 | #include "AliFlowEventSimple.h" |
38 | #include "AliFlowTrackSimple.h" | |
39 | #include "AliFlowAnalysisWithCumulants.h" | |
40 | #include "AliFlowCumuConstants.h" | |
41 | ||
42 | class TH1; | |
43 | class TGraph; | |
44 | class TPave; | |
45 | class TLatex; | |
46 | class TMarker; | |
47 | class TRandom3; | |
48 | class TObjArray; | |
49 | class TList; | |
50 | class TCanvas; | |
51 | class TSystem; | |
52 | class TROOT; | |
f1d945a1 | 53 | class AliFlowVector; |
54 | class TVector; | |
55 | ||
2188af53 | 56 | //================================================================================================================ |
f1d945a1 | 57 | |
58 | ClassImp(AliFlowAnalysisWithCumulants) | |
59 | ||
f1d945a1 | 60 | AliFlowAnalysisWithCumulants::AliFlowAnalysisWithCumulants(): |
2188af53 | 61 | fTrack(NULL), |
62 | fHistList(NULL), | |
63 | fR0(0), | |
64 | fPtMax(0), | |
65 | fPtMin(0), | |
66 | fBinWidth(0), | |
67 | fAvQx(0), | |
68 | fAvQy(0), | |
69 | fAvQ2x(0), | |
70 | fAvQ2y(0), | |
71 | fAvMultIntFlow(NULL), | |
72 | fQVectorComponents(NULL), | |
73 | fIntFlowResults(NULL), | |
74 | fDiffFlowResults2(NULL), | |
75 | fDiffFlowResults4(NULL), | |
76 | fDiffFlowResults6(NULL), | |
77 | fDiffFlowResults8(NULL), | |
78 | fIntFlowGenFun(NULL), | |
79 | fDiffFlowGenFunRe(NULL), | |
80 | fDiffFlowGenFunIm(NULL), | |
81 | fDiffFlowGenFunRe0(NULL), | |
82 | fDiffFlowGenFunRe1(NULL), | |
83 | fDiffFlowGenFunRe2(NULL), | |
84 | fDiffFlowGenFunRe3(NULL), | |
85 | fDiffFlowGenFunRe4(NULL), | |
86 | fDiffFlowGenFunRe5(NULL), | |
87 | fDiffFlowGenFunRe6(NULL), | |
88 | fDiffFlowGenFunRe7(NULL), | |
89 | fDiffFlowGenFunIm0(NULL), | |
90 | fDiffFlowGenFunIm1(NULL), | |
91 | fDiffFlowGenFunIm2(NULL), | |
92 | fDiffFlowGenFunIm3(NULL), | |
93 | fDiffFlowGenFunIm4(NULL), | |
94 | fDiffFlowGenFunIm5(NULL), | |
95 | fDiffFlowGenFunIm6(NULL), | |
96 | fDiffFlowGenFunIm7(NULL), | |
97 | fCommonHists(NULL), | |
98 | fQDist(NULL)//q-distribution | |
99 | { | |
100 | //constructor | |
101 | fHistList = new TList(); | |
102 | fR0=AliFlowCumuConstants::fgR0; | |
103 | fPtMax=AliFlowCommonConstants::GetPtMax(); | |
104 | fPtMin=AliFlowCommonConstants::GetPtMin(); | |
105 | fBinWidth=(fPtMax-fPtMin)/fgknBins; | |
106 | } | |
f1d945a1 | 107 | |
2188af53 | 108 | AliFlowAnalysisWithCumulants::~AliFlowAnalysisWithCumulants() |
109 | { | |
110 | //desctructor | |
111 | delete fHistList; | |
f55e2cac | 112 | } |
729ec982 | 113 | |
2188af53 | 114 | //================================================================================================================ |
115 | ||
116 | void AliFlowAnalysisWithCumulants::CreateOutputObjects() | |
117 | { | |
118 | //various output histograms | |
aaebd73d | 119 | |
2188af53 | 120 | //avarage multiplicity |
121 | fAvMultIntFlow = new TProfile("fAvMultIntFlow","Avarage multiplicity of selected particles used for int. flow",1,0,1,0,100000); | |
122 | fAvMultIntFlow->SetXTitle(""); | |
123 | fAvMultIntFlow->SetYTitle("<multiplicity>"); | |
124 | fHistList->Add(fAvMultIntFlow); | |
aaebd73d | 125 | |
2188af53 | 126 | //Q-vector stuff |
127 | fQVectorComponents = new TProfile("fQVectorComponents","Avarage of Q-vector components",4,0.,4.); | |
128 | fQVectorComponents->SetXTitle(""); | |
129 | fQVectorComponents->SetYTitle("< >"); | |
130 | fHistList->Add(fQVectorComponents); | |
aaebd73d | 131 | |
2188af53 | 132 | //final results for integrated flow (v_n{2}, v_n{4},..., v_n{16}) from cumulants (by default n=2) |
133 | fIntFlowResults = new TH1D("fIntFlowResults","Integrated Flow From Cumulants",8,0,8); | |
134 | fIntFlowResults->SetXTitle(""); | |
135 | fIntFlowResults->SetYTitle("Integrated Flow [%]"); | |
136 | fHistList->Add(fIntFlowResults); | |
aaebd73d | 137 | |
2188af53 | 138 | //final results for differential flow v_p/n{2} (by default p=n=2) |
139 | fDiffFlowResults2 = new TH1D("fDiffFlowResults2","v'_2/2{2}",fgknBins,fPtMin,fPtMax); | |
140 | fDiffFlowResults2->SetXTitle("pt [GeV]"); | |
141 | fDiffFlowResults2->SetYTitle("Differential Flow [%]"); | |
142 | fHistList->Add(fDiffFlowResults2); | |
143 | ||
144 | //final results for differential flow v_p/n{4} (by default p=n=2) | |
145 | fDiffFlowResults4 = new TH1D("fDiffFlowResults4","v'_2/2{4}",fgknBins,fPtMin,fPtMax); | |
146 | fDiffFlowResults4->SetXTitle("pt [GeV]"); | |
147 | fDiffFlowResults4->SetYTitle("Differential Flow [%]"); | |
148 | fHistList->Add(fDiffFlowResults4); | |
aaebd73d | 149 | |
2188af53 | 150 | //final results for differential flow v_p/n{6} (by default p=n=2) |
151 | fDiffFlowResults6 = new TH1D("fDiffFlowResults6","v'_2/2{6}",fgknBins,fPtMin,fPtMax); | |
152 | fDiffFlowResults6->SetXTitle("pt [GeV]"); | |
153 | fDiffFlowResults6->SetYTitle("Differential Flow [%]"); | |
154 | fHistList->Add(fDiffFlowResults6); | |
aaebd73d | 155 | |
2188af53 | 156 | //final results for differential flow v_p/n{8} (by default p=n=2) |
157 | fDiffFlowResults8 = new TH1D("fDiffFlowResults8","v'_2/2{8}",fgknBins,fPtMin,fPtMax); | |
158 | fDiffFlowResults8->SetXTitle("pt [GeV]"); | |
159 | fDiffFlowResults8->SetYTitle("Differential Flow [%]"); | |
160 | fHistList->Add(fDiffFlowResults8); | |
aaebd73d | 161 | |
2188af53 | 162 | //avarage of the generating function for integrated flow <G[p][q]> |
163 | fIntFlowGenFun = new TProfile2D("fIntFlowGenFun","<G[p][q]>",fgkPmax,0.,(Double_t)fgkPmax,fgkQmax,0.,(Double_t)fgkQmax); | |
164 | fIntFlowGenFun->SetXTitle("p"); | |
165 | fIntFlowGenFun->SetYTitle("q"); | |
166 | fHistList->Add(fIntFlowGenFun); | |
aaebd73d | 167 | |
2188af53 | 168 | /* |
169 | //avarage of the real part of generating function for differential flow <Re(D[b][p][q])> | |
170 | fDiffFlowGenFunRe = new TProfile3D("fDiffFlowGenFunRe","<Re(D[b][p][q])>",fgknBins,(Double_t)(fPtMin/fBinWidth),(Double_t)(fPtMax/fBinWidth),fgkPmax,0.,(Double_t)fgkPmax,fgkQmax,0.,(Double_t)fgkQmax); | |
171 | fDiffFlowGenFunRe->SetXTitle("b"); | |
172 | fDiffFlowGenFunRe->SetYTitle("p"); | |
173 | fDiffFlowGenFunRe->SetZTitle("q"); | |
174 | fHistList->Add(fDiffFlowGenFunRe); | |
aaebd73d | 175 | |
2188af53 | 176 | //avarage of the imaginary part of generating function for differential flow <Im(D[b][p][q])> |
177 | fDiffFlowGenFunIm = new TProfile3D("fDiffFlowGenFunIm","<Im(D[b][p][q])>",fgknBins,(Double_t)(fPtMin/fBinWidth),(Double_t)(fPtMax/fBinWidth),fgkPmax,0.,(Double_t)fgkPmax,fgkQmax,0.,(Double_t)fgkQmax); | |
178 | fDiffFlowGenFunIm->SetXTitle("b"); | |
179 | fDiffFlowGenFunIm->SetYTitle("p"); | |
180 | fDiffFlowGenFunIm->SetZTitle("q"); | |
181 | fHistList->Add(fDiffFlowGenFunIm); | |
aaebd73d | 182 | */ |
2188af53 | 183 | |
184 | fDiffFlowGenFunRe0 = new TProfile2D("fDiffFlowGenFunRe0","Re(<D[b][0][q]>)",fgknBins,(Double_t)(fPtMin/fBinWidth),(Double_t)(fPtMax/fBinWidth),fgkQmax,0.,(Double_t)fgkQmax); | |
185 | fDiffFlowGenFunRe0->SetXTitle("b"); | |
186 | fDiffFlowGenFunRe0->SetYTitle("q"); | |
187 | fHistList->Add(fDiffFlowGenFunRe0); | |
188 | ||
189 | fDiffFlowGenFunIm0 = new TProfile2D("fDiffFlowGenFunIm0","Im(<D[b][0][q]>)",fgknBins,(Double_t)(fPtMin/fBinWidth),(Double_t)(fPtMax/fBinWidth),fgkQmax,0.,(Double_t)fgkQmax); | |
190 | fDiffFlowGenFunIm0->SetXTitle("b"); | |
191 | fDiffFlowGenFunIm0->SetYTitle("q"); | |
192 | fHistList->Add(fDiffFlowGenFunIm0); | |
193 | ||
194 | fDiffFlowGenFunRe1 = new TProfile2D("fDiffFlowGenFunRe1","Re(<D[b][1][q]>)",fgknBins,(Double_t)(fPtMin/fBinWidth),(Double_t)(fPtMax/fBinWidth),fgkQmax,0.,(Double_t)fgkQmax); | |
195 | fDiffFlowGenFunRe1->SetXTitle("b"); | |
196 | fDiffFlowGenFunRe1->SetYTitle("q"); | |
197 | fHistList->Add(fDiffFlowGenFunRe1); | |
198 | ||
199 | fDiffFlowGenFunIm1 = new TProfile2D("fDiffFlowGenFunIm1","Im(<D[b][1][q]>)",fgknBins,(Double_t)(fPtMin/fBinWidth),(Double_t)(fPtMax/fBinWidth),fgkQmax,0.,(Double_t)fgkQmax); | |
200 | fDiffFlowGenFunIm1->SetXTitle("b"); | |
201 | fDiffFlowGenFunIm1->SetYTitle("q"); | |
202 | fHistList->Add(fDiffFlowGenFunIm1); | |
203 | ||
204 | fDiffFlowGenFunRe2 = new TProfile2D("fDiffFlowGenFunRe2","Re(<D[b][2][q]>)",fgknBins,(Double_t)(fPtMin/fBinWidth),(Double_t)(fPtMax/fBinWidth),fgkQmax,0.,(Double_t)fgkQmax); | |
205 | fDiffFlowGenFunRe2->SetXTitle("b"); | |
206 | fDiffFlowGenFunRe2->SetYTitle("q"); | |
207 | fHistList->Add(fDiffFlowGenFunRe2); | |
208 | ||
209 | fDiffFlowGenFunIm2 = new TProfile2D("fDiffFlowGenFunIm2","Im(<D[b][2][q]>)",fgknBins,(Double_t)(fPtMin/fBinWidth),(Double_t)(fPtMax/fBinWidth),fgkQmax,0.,(Double_t)fgkQmax); | |
210 | fDiffFlowGenFunIm2->SetXTitle("b"); | |
211 | fDiffFlowGenFunIm2->SetYTitle("q"); | |
212 | fHistList->Add(fDiffFlowGenFunIm2); | |
213 | ||
214 | fDiffFlowGenFunRe3 = new TProfile2D("fDiffFlowGenFunRe3","Re(<D[b][3][q]>)",fgknBins,(Double_t)(fPtMin/fBinWidth),(Double_t)(fPtMax/fBinWidth),fgkQmax,0.,(Double_t)fgkQmax); | |
215 | fDiffFlowGenFunRe3->SetXTitle("b"); | |
216 | fDiffFlowGenFunRe3->SetYTitle("q"); | |
217 | fHistList->Add(fDiffFlowGenFunRe3); | |
218 | ||
219 | fDiffFlowGenFunIm3 = new TProfile2D("fDiffFlowGenFunIm3","Im(<D[b][3][q]>)",fgknBins,(Double_t)(fPtMin/fBinWidth),(Double_t)(fPtMax/fBinWidth),fgkQmax,0.,(Double_t)fgkQmax); | |
220 | fDiffFlowGenFunIm3->SetXTitle("b"); | |
221 | fDiffFlowGenFunIm3->SetYTitle("q"); | |
222 | fHistList->Add(fDiffFlowGenFunIm3); | |
223 | ||
224 | fDiffFlowGenFunRe4 = new TProfile2D("fDiffFlowGenFunRe4","Re(<D[b][4][q]>)",fgknBins,(Double_t)(fPtMin/fBinWidth),(Double_t)(fPtMax/fBinWidth),fgkQmax,0.,(Double_t)fgkQmax); | |
225 | fDiffFlowGenFunRe4->SetXTitle("b"); | |
226 | fDiffFlowGenFunRe4->SetYTitle("q"); | |
227 | fHistList->Add(fDiffFlowGenFunRe4); | |
228 | ||
229 | fDiffFlowGenFunIm4 = new TProfile2D("fDiffFlowGenFunIm4","Im(<D[b][4][q]>)",fgknBins,(Double_t)(fPtMin/fBinWidth),(Double_t)(fPtMax/fBinWidth),fgkQmax,0.,(Double_t)fgkQmax); | |
230 | fDiffFlowGenFunIm4->SetXTitle("b"); | |
231 | fDiffFlowGenFunIm4->SetYTitle("q"); | |
232 | fHistList->Add(fDiffFlowGenFunIm4); | |
233 | ||
234 | fDiffFlowGenFunRe5 = new TProfile2D("fDiffFlowGenFunRe5","Re(<D[b][5][q]>)",fgkQmax,0.,(Double_t)fgkQmax,fgknBins,(Double_t)(fPtMin/fBinWidth),(Double_t)(fPtMax/fBinWidth)); | |
235 | fDiffFlowGenFunRe5->SetXTitle("b"); | |
236 | fDiffFlowGenFunRe5->SetYTitle("q"); | |
237 | fHistList->Add(fDiffFlowGenFunRe5); | |
238 | ||
239 | fDiffFlowGenFunIm5 = new TProfile2D("fDiffFlowGenFunIm5","Im(<D[b][5][q]>)",fgknBins,(Double_t)(fPtMin/fBinWidth),(Double_t)(fPtMax/fBinWidth),fgkQmax,0.,(Double_t)fgkQmax); | |
240 | fDiffFlowGenFunIm5->SetXTitle("b"); | |
241 | fDiffFlowGenFunIm5->SetYTitle("q"); | |
242 | fHistList->Add(fDiffFlowGenFunIm5); | |
243 | ||
244 | fDiffFlowGenFunRe6 = new TProfile2D("fDiffFlowGenFunRe6","Re(<D[b][6][q]>)",fgknBins,(Double_t)(fPtMin/fBinWidth),(Double_t)(fPtMax/fBinWidth),fgkQmax,0.,(Double_t)fgkQmax); | |
245 | fDiffFlowGenFunRe6->SetXTitle("b"); | |
246 | fDiffFlowGenFunRe6->SetYTitle("q"); | |
247 | fHistList->Add(fDiffFlowGenFunRe6); | |
248 | ||
249 | fDiffFlowGenFunIm6 = new TProfile2D("fDiffFlowGenFunIm6","Im(<D[b][6][q]>)",fgknBins,(Double_t)(fPtMin/fBinWidth),(Double_t)(fPtMax/fBinWidth),fgkQmax,0.,(Double_t)fgkQmax); | |
250 | fDiffFlowGenFunIm6->SetXTitle("b"); | |
251 | fDiffFlowGenFunIm6->SetYTitle("q"); | |
252 | fHistList->Add(fDiffFlowGenFunIm6); | |
253 | ||
254 | fDiffFlowGenFunRe7 = new TProfile2D("fDiffFlowGenFunRe7","Re(<D[b][7][q]>)",fgknBins,(Double_t)(fPtMin/fBinWidth),(Double_t)(fPtMax/fBinWidth),fgkQmax,0.,(Double_t)fgkQmax); | |
255 | fDiffFlowGenFunRe7->SetXTitle("b"); | |
256 | fDiffFlowGenFunRe7->SetYTitle("q"); | |
257 | fHistList->Add(fDiffFlowGenFunRe7); | |
258 | ||
259 | fDiffFlowGenFunIm7 = new TProfile2D("fDiffFlowGenFunIm7","Im(<D[b][7][q]>)",fgknBins,(Double_t)(fPtMin/fBinWidth),(Double_t)(fPtMax/fBinWidth),fgkQmax,0.,(Double_t)fgkQmax); | |
260 | fDiffFlowGenFunIm7->SetXTitle("b"); | |
261 | fDiffFlowGenFunIm7->SetYTitle("q"); | |
262 | fHistList->Add(fDiffFlowGenFunIm7); | |
263 | ||
264 | //common control histograms | |
aaebd73d | 265 | fCommonHists = new AliFlowCommonHist("Cumulants"); |
2188af53 | 266 | fHistList->Add(fCommonHists->GetHistList()); |
aaebd73d | 267 | |
2188af53 | 268 | //q-distribution |
269 | fQDist = new TH1D("fQDist","q-distribution",100,0,10); | |
270 | fQDist->SetXTitle("q=Q/#sqrt{M}"); | |
271 | fQDist->SetYTitle("dN_{event}/dq"); | |
272 | fHistList->Add(fQDist); | |
aaebd73d | 273 | |
2188af53 | 274 | }//end of CreateOutputObjects() |
275 | ||
276 | //================================================================================================================ | |
277 | ||
278 | void AliFlowAnalysisWithCumulants::Make(AliFlowEventSimple* anEvent) | |
279 | { | |
280 | //running over data | |
aaebd73d | 281 | |
2188af53 | 282 | //fill the common control histograms |
283 | fCommonHists->FillControlHistograms(anEvent); | |
f1d945a1 | 284 | |
2188af53 | 285 | //initializing the generating function G[p][q] for integrated flow |
286 | Double_t G[fgkPmax][fgkQmax]; | |
287 | for(Int_t p=0;p<fgkPmax;p++){ | |
288 | for(Int_t q=0;q<fgkQmax;q++){ | |
289 | G[p][q]=1.; | |
f1d945a1 | 290 | } |
2188af53 | 291 | } |
f1d945a1 | 292 | |
2188af53 | 293 | Int_t nPrim = anEvent->NumberOfTracks();//total multiplicity |
294 | Int_t nEventNSelTracksIntFlow = anEvent->GetEventNSelTracksIntFlow();//selected multiplicity (parrticles used for int. flow) | |
295 | Int_t nSelTracksIntFlow = 0;//cross-checking the selected multiplicity | |
f1d945a1 | 296 | |
2188af53 | 297 | //first loop over data: evaluating the generating function G[p][q] for integrated flow |
298 | for(Int_t i=0;i<nPrim;i++){ | |
299 | fTrack=anEvent->GetTrack(i); | |
300 | if(fTrack&&fTrack->UseForIntegratedFlow()){ | |
301 | nSelTracksIntFlow++; | |
302 | for(Int_t p=0;p<fgkPmax;p++){ | |
303 | for(Int_t q=0;q<fgkQmax;q++){ | |
304 | G[p][q]*=(1.+(2.*fR0*sqrt(p+1.)/nEventNSelTracksIntFlow)*cos(fgkFlow*fTrack->Phi()-2.*q*TMath::Pi()/fgkQmax)); | |
f1d945a1 | 305 | } |
2188af53 | 306 | } |
aaebd73d | 307 | } |
2188af53 | 308 | }//ending the first loop over data |
309 | ||
310 | //storing the value of G[p][q] in 2D profile in order to get automatically the avarage <G[p][q]> | |
311 | for(Int_t p=0;p<fgkPmax;p++){ | |
312 | for(Int_t q=0;q<fgkQmax;q++){ | |
313 | fIntFlowGenFun->Fill((Double_t)p,(Double_t)q,G[p][q],1); | |
314 | } | |
315 | } | |
316 | ||
317 | //storing the selected multiplicity (if fAvMultIntFlow is not filled here then you had wrongly selected the particles used for integrated flow) | |
318 | if(nSelTracksIntFlow==nEventNSelTracksIntFlow) | |
319 | { | |
320 | fAvMultIntFlow->Fill(0.,nSelTracksIntFlow,1); | |
321 | } | |
322 | ||
323 | //calculating Q-vector of event (needed for errors) | |
324 | AliFlowVector fQVector; | |
325 | fQVector.Set(0.,0.); | |
326 | fQVector.SetMult(0); | |
327 | fQVector=anEvent->GetQ(); //get the Q vector for this event | |
328 | fQVectorComponents->Fill(0.,fQVector.X(),1); //in the 1st bin fill Q_x | |
329 | fQVectorComponents->Fill(1.,fQVector.Y(),1); //in the 2nd bin fill Q_y | |
330 | fQVectorComponents->Fill(2.,pow(fQVector.X(),2.),1); //in the 3rd bin fill (Q_x)^2 | |
331 | fQVectorComponents->Fill(3.,pow(fQVector.Y(),2.),1); //in the 4th bin fill (Q_y)^2 | |
332 | ||
333 | //q-distribution | |
6d4fa5d3 | 334 | if(fQVector.GetMult()!=0) |
335 | { | |
336 | Double_t qDist = fQVector.Mod()/sqrt(fQVector.GetMult()); | |
337 | fQDist->Fill(qDist,1); | |
338 | } | |
339 | ||
2188af53 | 340 | /* |
341 | //two 3D profiles for differential flow | |
342 | //second loop over data: evaluating the generating function D[b][p][q] for differential flow | |
343 | //remark 0: D[b][p][q] is a complex number => real and imaginary part are calculated separately | |
344 | //remark 1: note that below G[p][q] is needed, the value of generating function for integrated flow for the CURRENT event | |
345 | //remark 2: results are stored in two 3D profiles in order to automatically get <Re(D[b][p][q])> and <Im(D[b][p][q])> | |
346 | for(Int_t i=0;i<nPrim;i++){ | |
347 | fTrack=anEvent->GetTrack(i); | |
348 | if (fTrack && fTrack->UseForDifferentialFlow()){ | |
349 | for(Int_t p=0;p<fgkPmax;p++){ | |
350 | for(Int_t q=0;q<fgkQmax;q++){ | |
351 | //real part | |
352 | fDiffFlowGenFunRe->Fill(fTrack->Pt()/fBinWidth,(Double_t)p,(Double_t)q,G[p][q]*cos(fgkMltpl*fgkFlow*fTrack->Phi())/(1.+(2.*fR0*sqrt(p+1.)/nSelTracksIntFlow)*cos(fgkFlow*fTrack->Phi()-2.*q*TMath::Pi()/fgkQmax)),1.); | |
353 | //imaginary part | |
354 | fDiffFlowGenFunIm->Fill(fTrack->Pt()/fBinWidth,(Double_t)p,(Double_t)q,G[p][q]*sin(fgkMltpl*fgkFlow*fTrack->Phi())/(1.+(2.*fR0*sqrt(p+1.)/nSelTracksIntFlow)*cos(fgkFlow*fTrack->Phi()-2.*q*TMath::Pi()/fgkQmax)),1.); | |
f1d945a1 | 355 | } |
2188af53 | 356 | } |
357 | } | |
358 | }//ending the second loop over data | |
359 | */ | |
360 | ||
361 | //sixteen 2D profiles for differential flow | |
362 | for(Int_t i=0;i<nPrim;i++){ | |
363 | fTrack=anEvent->GetTrack(i); | |
364 | if (fTrack && fTrack->UseForDifferentialFlow()){ | |
365 | //for(Int_t p=0;p<fgkPmax;p++){ | |
366 | for(Int_t q=0;q<fgkQmax;q++){ | |
367 | //real part | |
368 | fDiffFlowGenFunRe0->Fill(fTrack->Pt()/fBinWidth,(Double_t)q,G[0][q]*cos(fgkMltpl*fgkFlow*fTrack->Phi())/(1.+(2.*fR0*sqrt(0.+1.)/nSelTracksIntFlow)*cos(fgkFlow*fTrack->Phi()-2.*q*TMath::Pi()/fgkQmax)),1.); | |
369 | //imaginary part | |
370 | fDiffFlowGenFunIm0->Fill(fTrack->Pt()/fBinWidth,(Double_t)q,G[0][q]*sin(fgkMltpl*fgkFlow*fTrack->Phi())/(1.+(2.*fR0*sqrt(0.+1.)/nSelTracksIntFlow)*cos(fgkFlow*fTrack->Phi()-2.*q*TMath::Pi()/fgkQmax)),1.); | |
371 | //----------------------------------------------------------------------- | |
372 | //real part | |
373 | fDiffFlowGenFunRe1->Fill(fTrack->Pt()/fBinWidth,(Double_t)q,G[1][q]*cos(fgkMltpl*fgkFlow*fTrack->Phi())/(1.+(2.*fR0*sqrt(1.+1.)/nSelTracksIntFlow)*cos(fgkFlow*fTrack->Phi()-2.*q*TMath::Pi()/fgkQmax)),1.); | |
374 | //imaginary part | |
375 | fDiffFlowGenFunIm1->Fill(fTrack->Pt()/fBinWidth,(Double_t)q,G[1][q]*sin(fgkMltpl*fgkFlow*fTrack->Phi())/(1.+(2.*fR0*sqrt(1.+1.)/nSelTracksIntFlow)*cos(fgkFlow*fTrack->Phi()-2.*q*TMath::Pi()/fgkQmax)),1.); | |
376 | //----------------------------------------------------------------------- | |
377 | //real part | |
378 | fDiffFlowGenFunRe2->Fill(fTrack->Pt()/fBinWidth,(Double_t)q,G[2][q]*cos(fgkMltpl*fgkFlow*fTrack->Phi())/(1.+(2.*fR0*sqrt(2.+1.)/nSelTracksIntFlow)*cos(fgkFlow*fTrack->Phi()-2.*q*TMath::Pi()/fgkQmax)),1.); | |
379 | //imaginary part | |
380 | fDiffFlowGenFunIm2->Fill(fTrack->Pt()/fBinWidth,(Double_t)q,G[2][q]*sin(fgkMltpl*fgkFlow*fTrack->Phi())/(1.+(2.*fR0*sqrt(2.+1.)/nSelTracksIntFlow)*cos(fgkFlow*fTrack->Phi()-2.*q*TMath::Pi()/fgkQmax)),1.); | |
381 | //----------------------------------------------------------------------- | |
382 | //real part | |
383 | fDiffFlowGenFunRe3->Fill(fTrack->Pt()/fBinWidth,(Double_t)q,G[3][q]*cos(fgkMltpl*fgkFlow*fTrack->Phi())/(1.+(2.*fR0*sqrt(3.+1.)/nSelTracksIntFlow)*cos(fgkFlow*fTrack->Phi()-2.*q*TMath::Pi()/fgkQmax)),1.); | |
384 | //imaginary part | |
385 | fDiffFlowGenFunIm3->Fill(fTrack->Pt()/fBinWidth,(Double_t)q,G[3][q]*sin(fgkMltpl*fgkFlow*fTrack->Phi())/(1.+(2.*fR0*sqrt(3.+1.)/nSelTracksIntFlow)*cos(fgkFlow*fTrack->Phi()-2.*q*TMath::Pi()/fgkQmax)),1.); | |
386 | //----------------------------------------------------------------------- | |
387 | //real part | |
388 | fDiffFlowGenFunRe4->Fill(fTrack->Pt()/fBinWidth,(Double_t)q,G[4][q]*cos(fgkMltpl*fgkFlow*fTrack->Phi())/(1.+(2.*fR0*sqrt(4.+1.)/nSelTracksIntFlow)*cos(fgkFlow*fTrack->Phi()-2.*q*TMath::Pi()/fgkQmax)),1.); | |
389 | //imaginary part | |
390 | fDiffFlowGenFunIm4->Fill(fTrack->Pt()/fBinWidth,(Double_t)q,G[4][q]*sin(fgkMltpl*fgkFlow*fTrack->Phi())/(1.+(2.*fR0*sqrt(4.+1.)/nSelTracksIntFlow)*cos(fgkFlow*fTrack->Phi()-2.*q*TMath::Pi()/fgkQmax)),1.); | |
391 | //----------------------------------------------------------------------- | |
392 | //real part | |
393 | fDiffFlowGenFunRe5->Fill(fTrack->Pt()/fBinWidth,(Double_t)q,G[5][q]*cos(fgkMltpl*fgkFlow*fTrack->Phi())/(1.+(2.*fR0*sqrt(5.+1.)/nSelTracksIntFlow)*cos(fgkFlow*fTrack->Phi()-2.*q*TMath::Pi()/fgkQmax)),1.); | |
394 | //imaginary part | |
395 | fDiffFlowGenFunIm5->Fill(fTrack->Pt()/fBinWidth,(Double_t)q,G[5][q]*sin(fgkMltpl*fgkFlow*fTrack->Phi())/(1.+(2.*fR0*sqrt(5.+1.)/nSelTracksIntFlow)*cos(fgkFlow*fTrack->Phi()-2.*q*TMath::Pi()/fgkQmax)),1.); | |
396 | //----------------------------------------------------------------------- | |
397 | //real part | |
398 | fDiffFlowGenFunRe6->Fill(fTrack->Pt()/fBinWidth,(Double_t)q,G[6][q]*cos(fgkMltpl*fgkFlow*fTrack->Phi())/(1.+(2.*fR0*sqrt(6.+1.)/nSelTracksIntFlow)*cos(fgkFlow*fTrack->Phi()-2.*q*TMath::Pi()/fgkQmax)),1.); | |
399 | //imaginary part | |
400 | fDiffFlowGenFunIm6->Fill(fTrack->Pt()/fBinWidth,(Double_t)q,G[6][q]*sin(fgkMltpl*fgkFlow*fTrack->Phi())/(1.+(2.*fR0*sqrt(6.+1.)/nSelTracksIntFlow)*cos(fgkFlow*fTrack->Phi()-2.*q*TMath::Pi()/fgkQmax)),1.); | |
401 | //----------------------------------------------------------------------- | |
402 | //real part | |
403 | fDiffFlowGenFunRe7->Fill(fTrack->Pt()/fBinWidth,(Double_t)q,G[7][q]*cos(fgkMltpl*fgkFlow*fTrack->Phi())/(1.+(2.*fR0*sqrt(7.+1.)/nSelTracksIntFlow)*cos(fgkFlow*fTrack->Phi()-2.*q*TMath::Pi()/fgkQmax)),1.); | |
404 | //imaginary part | |
405 | fDiffFlowGenFunIm7->Fill(fTrack->Pt()/fBinWidth,(Double_t)q,G[7][q]*sin(fgkMltpl*fgkFlow*fTrack->Phi())/(1.+(2.*fR0*sqrt(7.+1.)/nSelTracksIntFlow)*cos(fgkFlow*fTrack->Phi()-2.*q*TMath::Pi()/fgkQmax)),1.); | |
406 | } | |
407 | //} | |
408 | } | |
409 | }//ending the second loop over data | |
410 | ||
aaebd73d | 411 | }//end of Make() |
f1d945a1 | 412 | |
2188af53 | 413 | //================================================================================================================ |
f1d945a1 | 414 | |
2188af53 | 415 | void AliFlowAnalysisWithCumulants::Finish() |
416 | { | |
417 | //not needed for the time being... | |
418 | } | |
f1d945a1 | 419 | |
f1d945a1 | 420 | |
f1d945a1 | 421 | |
422 |