]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWG2/FLOW/AliFlowAnalysisWithCumulants.cxx
gain set to 1 for all ch
[u/mrichter/AliRoot.git] / PWG2 / FLOW / AliFlowAnalysisWithCumulants.cxx
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
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"
31 #include "TList.h" //NEW
32 #include "TParticle.h"
33 #include "TRandom3.h"
34 #include "TProfile.h"
35 #include "TProfile2D.h" 
36 #include "TProfile3D.h"
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;
53 class AliFlowVector;
54 class TVector;
55
56 //================================================================================================================
57
58 ClassImp(AliFlowAnalysisWithCumulants)
59
60 AliFlowAnalysisWithCumulants::AliFlowAnalysisWithCumulants():  
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 }
107
108 AliFlowAnalysisWithCumulants::~AliFlowAnalysisWithCumulants()
109 {
110  //desctructor
111  delete fHistList; 
112 }
113
114 //================================================================================================================
115
116 void AliFlowAnalysisWithCumulants::CreateOutputObjects()
117 {
118  //various output histograms
119  
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);
125  
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);
131  
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);
137   
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);
149  
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);
155  
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);
161   
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);
167  
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);
175  
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);
182  */
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
265  fCommonHists = new AliFlowCommonHist("Cumulants");
266  fHistList->Add(fCommonHists->GetHistList());  
267  
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);
273   
274 }//end of CreateOutputObjects()
275
276 //================================================================================================================
277
278 void AliFlowAnalysisWithCumulants::Make(AliFlowEventSimple* anEvent)
279 {
280  //running over data
281   
282  //fill the common control histograms
283  fCommonHists->FillControlHistograms(anEvent);   
284   
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.; 
290   }
291  }
292   
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
296   
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)); 
305     }
306    }
307   }
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
334  Double_t qDist = fQVector.Mod()/sqrt(fQVector.GetMult());
335  fQDist->Fill(qDist,1); 
336
337  /*
338  //two 3D profiles for differential flow
339  //second loop over data: evaluating the generating function D[b][p][q] for differential flow 
340  //remark 0: D[b][p][q] is a complex number => real and imaginary part are calculated separately
341  //remark 1: note that below G[p][q] is needed, the value of generating function for integrated flow for the CURRENT event
342  //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])>
343  for(Int_t i=0;i<nPrim;i++){
344   fTrack=anEvent->GetTrack(i);
345   if (fTrack && fTrack->UseForDifferentialFlow()){
346    for(Int_t p=0;p<fgkPmax;p++){
347     for(Int_t q=0;q<fgkQmax;q++){
348      //real part
349      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.);
350      //imaginary part
351      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.);        
352     }
353    }
354   }  
355  }//ending the second loop over data    
356  */
357  
358  //sixteen 2D profiles for differential flow          
359  for(Int_t i=0;i<nPrim;i++){
360   fTrack=anEvent->GetTrack(i);
361   if (fTrack && fTrack->UseForDifferentialFlow()){
362    //for(Int_t p=0;p<fgkPmax;p++){
363     for(Int_t q=0;q<fgkQmax;q++){
364      //real part
365      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.);
366      //imaginary part
367      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.); 
368      //-----------------------------------------------------------------------
369      //real part
370      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.);
371      //imaginary part
372      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.);             
373     //-----------------------------------------------------------------------
374      //real part
375      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.);
376      //imaginary part
377      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.);  
378      //-----------------------------------------------------------------------
379      //real part
380      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.);
381      //imaginary part
382      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.);  
383      //-----------------------------------------------------------------------
384      //real part
385      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.);
386      //imaginary part
387      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.);  
388      //-----------------------------------------------------------------------
389      //real part
390      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.);
391      //imaginary part
392      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.);  
393      //-----------------------------------------------------------------------
394      //real part
395      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.);
396      //imaginary part
397      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.);
398      //-----------------------------------------------------------------------
399      //real part
400      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.);
401      //imaginary part
402      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.);    
403    }
404    //}
405   }  
406  }//ending the second loop over data            
407       
408 }//end of Make()
409
410 //================================================================================================================
411
412 void AliFlowAnalysisWithCumulants::Finish()
413 {
414  //not needed for the time being...
415 }
416
417
418
419