]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWG2/FLOW/AliFlowAnalysisWithCumulants.cxx
new methods and possiility to run all methods in same run
[u/mrichter/AliRoot.git] / PWG2 / FLOW / AliFlowAnalysisWithCumulants.cxx
CommitLineData
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
42class TH1;
43class TGraph;
44class TPave;
45class TLatex;
46class TMarker;
47class TRandom3;
48class TObjArray;
49class TList;
50class TCanvas;
51class TSystem;
52class TROOT;
f1d945a1 53class AliFlowVector;
54class TVector;
55
2188af53 56//================================================================================================================
f1d945a1 57
58ClassImp(AliFlowAnalysisWithCumulants)
59
f1d945a1 60AliFlowAnalysisWithCumulants::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 108AliFlowAnalysisWithCumulants::~AliFlowAnalysisWithCumulants()
109{
110 //desctructor
111 delete fHistList;
f55e2cac 112}
729ec982 113
2188af53 114//================================================================================================================
115
116void 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
278void 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 415void AliFlowAnalysisWithCumulants::Finish()
416{
417 //not needed for the time being...
418}
f1d945a1 419
f1d945a1 420
f1d945a1 421
422