1 /*************************************************************************
2 * Copyright(c) 1998-2008, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
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 **************************************************************************/
16 /********************************
17 * flow analysis with cumulants *
19 * author: Ante Bilandzic *
21 *******************************/
23 #define AliFlowAnalysisWithCumulants_cxx
25 #include "Riostream.h"
26 #include "AliFlowCommonConstants.h"
27 #include "AliFlowCommonHist.h"
28 #include "AliFlowCommonHistResults.h"
31 #include "TList.h" //NEW
32 #include "TParticle.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 #include "AliCumulantsFunctions.h"
57 //================================================================================================================
59 ClassImp(AliFlowAnalysisWithCumulants)
61 AliFlowAnalysisWithCumulants::AliFlowAnalysisWithCumulants():
78 fAvMultIntFlowGFC(NULL),
79 fQVectorComponentsGFC(NULL),
80 fIntFlowResultsGFC(NULL),
81 fDiffFlowResults2ndOrderGFC(NULL),
82 fDiffFlowResults4thOrderGFC(NULL),
83 fDiffFlowResults6thOrderGFC(NULL),
84 fDiffFlowResults8thOrderGFC(NULL),
85 fCommonHistsResults2nd(NULL),
86 fCommonHistsResults4th(NULL),
87 fCommonHistsResults6th(NULL),
88 fCommonHistsResults8th(NULL),
90 fIntFlowGenFun4(NULL),//(only for other system of Eq.)
91 fIntFlowGenFun6(NULL),//(only for other system of Eq.)
92 fIntFlowGenFun8(NULL),//(only for other system of Eq.)
93 fIntFlowGenFun16(NULL),//(only for other system of Eq.)
94 fAvMultIntFlow4GFC(NULL),//(only for other system of Eq.)
95 fAvMultIntFlow6GFC(NULL),//(only for other system of Eq.)
96 fAvMultIntFlow8GFC(NULL),//(only for other system of Eq.)
97 fAvMultIntFlow16GFC(NULL),//(only for other system of Eq.)
98 fDiffFlowPtRPGenFunRe(NULL),
99 fDiffFlowPtRPGenFunIm(NULL),
100 fPtBinRPNoOfParticles(NULL),
101 fDiffFlowEtaRPGenFunRe(NULL),
102 fDiffFlowEtaRPGenFunIm(NULL),
103 fEtaBinRPNoOfParticles(NULL),
104 fDiffFlowPtPOIGenFunRe(NULL),
105 fDiffFlowPtPOIGenFunIm(NULL),
106 fPtBinPOINoOfParticles(NULL),
107 fDiffFlowEtaPOIGenFunRe(NULL),
108 fDiffFlowEtaPOIGenFunIm(NULL),
109 fEtaBinPOINoOfParticles(NULL),
111 fDiffFlowGenFunRe0(NULL),
112 fDiffFlowGenFunRe1(NULL),
113 fDiffFlowGenFunRe2(NULL),
114 fDiffFlowGenFunRe3(NULL),
115 fDiffFlowGenFunRe4(NULL),
116 fDiffFlowGenFunRe5(NULL),
117 fDiffFlowGenFunRe6(NULL),
118 fDiffFlowGenFunRe7(NULL),
119 fDiffFlowGenFunIm0(NULL),
120 fDiffFlowGenFunIm1(NULL),
121 fDiffFlowGenFunIm2(NULL),
122 fDiffFlowGenFunIm3(NULL),
123 fDiffFlowGenFunIm4(NULL),
124 fDiffFlowGenFunIm5(NULL),
125 fDiffFlowGenFunIm6(NULL),
126 fDiffFlowGenFunIm7(NULL),
129 fOtherEquations(kFALSE),
130 fUsePhiWeights(kFALSE),
131 fUsePtWeights(kFALSE),
132 fUseEtaWeights(kFALSE),
133 fAverageOfSquaredWeight(NULL)
136 fHistList = new TList();
137 fWeightsList = new TList();
138 fWeightsList->SetName("Weights");
139 fR0=AliFlowCumuConstants::fgR0;
141 fPtMax=AliFlowCommonConstants::GetPtMax();
142 fPtMin=AliFlowCommonConstants::GetPtMin();
143 fgknBinsPt=AliFlowCommonConstants::GetNbinsPt();
146 fBinWidthPt=(fPtMax-fPtMin)/fgknBinsPt;
149 fEtaMax=AliFlowCommonConstants::GetEtaMax();
150 fEtaMin=AliFlowCommonConstants::GetEtaMin();
151 fgknBinsEta=AliFlowCommonConstants::GetNbinsEta();
154 fBinWidthEta=(fEtaMax-fEtaMin)/fgknBinsEta;
157 fOtherEquations=AliFlowCumuConstants::fgOtherEquations;
160 AliFlowAnalysisWithCumulants::~AliFlowAnalysisWithCumulants()
167 //================================================================================================================
169 void AliFlowAnalysisWithCumulants::Init()
171 //various output histograms
173 //average multiplicity
174 fAvMultIntFlowGFC = new TProfile("fAvMultIntFlowGFC","Average Weighted Multiplicity",1,0,1,"s");
175 fAvMultIntFlowGFC->SetXTitle("");
176 fAvMultIntFlowGFC->SetYTitle("");
177 fAvMultIntFlowGFC->SetLabelSize(0.06);
178 fAvMultIntFlowGFC->SetMarkerStyle(25);
179 fAvMultIntFlowGFC->SetLabelOffset(0.01);
180 (fAvMultIntFlowGFC->GetXaxis())->SetBinLabel(1,"Average Weighted Multiplicity");
181 fHistList->Add(fAvMultIntFlowGFC);
183 //averages of Q-vector components (1st bin: <Q_x>, 2nd bin: <Q_y>, 3rd bin: <(Q_x)^2>, 4th bin: <(Q_y)^2>)
184 fQVectorComponentsGFC = new TProfile("fQVectorComponentsGFC","Average of Q-vector components",4,0.,4.);
185 fQVectorComponentsGFC->SetXTitle("");
186 fQVectorComponentsGFC->SetYTitle("");
187 fQVectorComponentsGFC->SetLabelSize(0.06);
188 fQVectorComponentsGFC->SetMarkerStyle(25);
189 (fQVectorComponentsGFC->GetXaxis())->SetBinLabel(1,"<Q_{x}>");
190 (fQVectorComponentsGFC->GetXaxis())->SetBinLabel(2,"<Q_{y}>");
191 (fQVectorComponentsGFC->GetXaxis())->SetBinLabel(3,"<Q_{x}^{2}>");
192 (fQVectorComponentsGFC->GetXaxis())->SetBinLabel(4,"<Q_{y}^{2}>");
193 fHistList->Add(fQVectorComponentsGFC);
195 //final results for integrated flow (v_n{2}, v_n{4},..., v_n{16}) from cumulants (by default n=2)
196 fIntFlowResultsGFC = new TH1D("fIntFlowResultsGFC","Integrated Flow From Cumulants (Generating Function)",4,0,4);
197 fIntFlowResultsGFC->SetXTitle("");
198 fIntFlowResultsGFC->SetYTitle("");
199 fIntFlowResultsGFC->SetLabelSize(0.06);
200 //fIntFlowResultsGFC->SetTickLength(1);
201 fIntFlowResultsGFC->SetMarkerStyle(25);
202 (fIntFlowResultsGFC->GetXaxis())->SetBinLabel(1,"v_{n}{2}");
203 (fIntFlowResultsGFC->GetXaxis())->SetBinLabel(2,"v_{n}{4}");
204 (fIntFlowResultsGFC->GetXaxis())->SetBinLabel(3,"v_{n}{6}");
205 (fIntFlowResultsGFC->GetXaxis())->SetBinLabel(4,"v_{n}{8}");
206 fHistList->Add(fIntFlowResultsGFC);
208 //final results for differential flow v_p/n{2} (by default p=n=2)
209 fDiffFlowResults2ndOrderGFC = new TH1D("fDiffFlowResults2ndOrderGFC","v'_2/2{2}",fgknBinsPt,fPtMin,fPtMax);
210 fDiffFlowResults2ndOrderGFC->SetXTitle("pt [GeV]");
211 fDiffFlowResults2ndOrderGFC->SetYTitle("");
212 fHistList->Add(fDiffFlowResults2ndOrderGFC);
214 //final results for differential flow v_p/n{4} (by default p=n=2)
215 fDiffFlowResults4thOrderGFC = new TH1D("fDiffFlowResults4thOrderGFC","v'_2/2{4}",fgknBinsPt,fPtMin,fPtMax);
216 fDiffFlowResults4thOrderGFC->SetXTitle("pt [GeV]");
217 fDiffFlowResults4thOrderGFC->SetYTitle("");
218 fHistList->Add(fDiffFlowResults4thOrderGFC);
220 //final results for differential flow v_p/n{6} (by default p=n=2)
221 fDiffFlowResults6thOrderGFC = new TH1D("fDiffFlowResults6thOrderGFC","v'_2/2{6}",fgknBinsPt,fPtMin,fPtMax);
222 fDiffFlowResults6thOrderGFC->SetXTitle("pt [GeV]");
223 fDiffFlowResults6thOrderGFC->SetYTitle("");
224 fHistList->Add(fDiffFlowResults6thOrderGFC);
226 //final results for differential flow v_p/n{8} (by default p=n=2)
227 fDiffFlowResults8thOrderGFC = new TH1D("fDiffFlowResults8thOrderGFC","v'_2/2{8}",fgknBinsPt,fPtMin,fPtMax);
228 fDiffFlowResults8thOrderGFC->SetXTitle("pt [GeV]");
229 fDiffFlowResults8thOrderGFC->SetYTitle("");
230 fHistList->Add(fDiffFlowResults8thOrderGFC);
232 //avarage of the generating function for integrated flow <G[p][q]>
233 fIntFlowGenFun = new TProfile2D("fIntFlowGenFun","<G[p][q]>",fgkPmax,0.,(Double_t)fgkPmax,fgkQmax,0.,(Double_t)fgkQmax);
234 fIntFlowGenFun->SetXTitle("p");
235 fIntFlowGenFun->SetYTitle("q");
236 fHistList->Add(fIntFlowGenFun);
240 //avarage of the generating function for integrated flow <G[p][q]> (only for other system of Eq. - up to 4th order)
241 fIntFlowGenFun4 = new TProfile2D("fIntFlowGenFun4","<G4[p4][q4]>",fgkPmax4,0.,(Double_t)fgkPmax4,fgkQmax4,0.,(Double_t)fgkQmax4);
242 fIntFlowGenFun4->SetXTitle("p4");
243 fIntFlowGenFun4->SetYTitle("q4");
244 fHistList->Add(fIntFlowGenFun4);
246 //avarage of the generating function for integrated flow <G[p][q]> (only for other system of Eq. - up to 6th order)
247 fIntFlowGenFun6 = new TProfile2D("fIntFlowGenFun6","<G6[p6][q6]>",fgkPmax6,0.,(Double_t)fgkPmax6,fgkQmax6,0.,(Double_t)fgkQmax6);
248 fIntFlowGenFun6->SetXTitle("p6");
249 fIntFlowGenFun6->SetYTitle("q6");
250 fHistList->Add(fIntFlowGenFun6);
252 //avarage of the generating function for integrated flow <G[p][q]> (only for other system of Eq. - up to 8th order)
253 fIntFlowGenFun8 = new TProfile2D("fIntFlowGenFun8","<G8[p8][q8]>",fgkPmax8,0.,(Double_t)fgkPmax8,fgkQmax8,0.,(Double_t)fgkQmax8);
254 fIntFlowGenFun8->SetXTitle("p8");
255 fIntFlowGenFun8->SetYTitle("q8");
256 fHistList->Add(fIntFlowGenFun8);
258 //avarage of the generating function for integrated flow <G[p][q]> (only for other system of Eq. - up to 16th order)
259 fIntFlowGenFun16 = new TProfile2D("fIntFlowGenFun16","<G16[p16][q16]>",fgkPmax16,0.,(Double_t)fgkPmax16,fgkQmax16,0.,(Double_t)fgkQmax16);
260 fIntFlowGenFun16->SetXTitle("p16");
261 fIntFlowGenFun16->SetYTitle("q16");
262 fHistList->Add(fIntFlowGenFun16);
264 //average multiplicity (only for other system of Eq. - up to 4th order)
265 fAvMultIntFlow4GFC = new TProfile("fAvMultIntFlow4GFC","Average Multiplicity",1,0,1,"s");
266 fAvMultIntFlow4GFC->SetXTitle("");
267 fAvMultIntFlow4GFC->SetYTitle("");
268 fAvMultIntFlow4GFC->SetLabelSize(0.06);
269 fAvMultIntFlow4GFC->SetMarkerStyle(25);
270 fAvMultIntFlow4GFC->SetLabelOffset(0.01);
271 (fAvMultIntFlow4GFC->GetXaxis())->SetBinLabel(1,"Average Multiplicity");
272 fHistList->Add(fAvMultIntFlow4GFC);
274 //average multiplicity (only for other system of Eq. - up to 6th order)
275 fAvMultIntFlow6GFC = new TProfile("fAvMultIntFlow6GFC","Average Multiplicity",1,0,1,"s");
276 fAvMultIntFlow6GFC->SetXTitle("");
277 fAvMultIntFlow6GFC->SetYTitle("");
278 fAvMultIntFlow6GFC->SetLabelSize(0.06);
279 fAvMultIntFlow6GFC->SetMarkerStyle(25);
280 fAvMultIntFlow6GFC->SetLabelOffset(0.01);
281 (fAvMultIntFlow6GFC->GetXaxis())->SetBinLabel(1,"Average Multiplicity");
282 fHistList->Add(fAvMultIntFlow6GFC);
284 //average multiplicity (only for other system of Eq. - up to 8th order)
285 fAvMultIntFlow8GFC = new TProfile("fAvMultIntFlow8GFC","Average Multiplicity",1,0,1,"s");
286 fAvMultIntFlow8GFC->SetXTitle("");
287 fAvMultIntFlow8GFC->SetYTitle("");
288 fAvMultIntFlow8GFC->SetLabelSize(0.06);
289 fAvMultIntFlow8GFC->SetMarkerStyle(25);
290 fAvMultIntFlow8GFC->SetLabelOffset(0.01);
291 (fAvMultIntFlow8GFC->GetXaxis())->SetBinLabel(1,"Average Multiplicity");
292 fHistList->Add(fAvMultIntFlow8GFC);
294 //average multiplicity (only for other system of Eq. - up to 16th order)
295 fAvMultIntFlow16GFC = new TProfile("fAvMultIntFlow16GFC","Average Multiplicity",1,0,1,"s");
296 fAvMultIntFlow16GFC->SetXTitle("");
297 fAvMultIntFlow16GFC->SetYTitle("");
298 fAvMultIntFlow16GFC->SetLabelSize(0.06);
299 fAvMultIntFlow16GFC->SetMarkerStyle(25);
300 fAvMultIntFlow16GFC->SetLabelOffset(0.01);
301 (fAvMultIntFlow16GFC->GetXaxis())->SetBinLabel(1,"Average Multiplicity");
302 fHistList->Add(fAvMultIntFlow16GFC);
305 //avarage of the real part of generating function for differential flow in Pt <Re(D[b][p][q])>
306 fDiffFlowPtRPGenFunRe = new TProfile3D("fDiffFlowPtRPGenFunRe","<Re(D[b][p][q])>",fgknBinsPt,(Double_t)(fPtMin/fBinWidthPt),(Double_t)(fPtMax/fBinWidthPt),fgkPmax,0.,(Double_t)fgkPmax,fgkQmax,0.,(Double_t)fgkQmax);
307 fDiffFlowPtRPGenFunRe->SetXTitle("b");
308 fDiffFlowPtRPGenFunRe->SetYTitle("p");
309 fDiffFlowPtRPGenFunRe->SetZTitle("q");
310 fDiffFlowPtRPGenFunRe->SetTitleOffset(1.44,"X");
311 fDiffFlowPtRPGenFunRe->SetTitleOffset(1.44,"Y");
312 fHistList->Add(fDiffFlowPtRPGenFunRe);
314 //avarage of the imaginary part of generating function for differential flow in Pt <Im(D[b][p][q])>
315 fDiffFlowPtRPGenFunIm = new TProfile3D("fDiffFlowPtRPGenFunIm","<Im(D[b][p][q])>",fgknBinsPt,(Double_t)(fPtMin/fBinWidthPt),(Double_t)(fPtMax/fBinWidthPt),fgkPmax,0.,(Double_t)fgkPmax,fgkQmax,0.,(Double_t)fgkQmax);
316 fDiffFlowPtRPGenFunIm->SetXTitle("b");
317 fDiffFlowPtRPGenFunIm->SetYTitle("p");
318 fDiffFlowPtRPGenFunIm->SetZTitle("q");
319 fDiffFlowPtRPGenFunIm->SetTitleOffset(1.44,"X");
320 fDiffFlowPtRPGenFunIm->SetTitleOffset(1.44,"Y");
321 fHistList->Add(fDiffFlowPtRPGenFunIm);
323 //number of particles per pt bin
324 fPtBinRPNoOfParticles = new TProfile("fPtBinRPNoOfParticles","Number of particles per #p_{t} bin",fgknBinsPt,fPtMin,fPtMax);
325 fPtBinRPNoOfParticles->SetXTitle("pt [GeV]");
326 fPtBinRPNoOfParticles->SetYTitle("");
327 fHistList->Add(fPtBinRPNoOfParticles);
329 //avarage of the real part of generating function for differential flow in Eta <Re(D[b][p][q])>
330 fDiffFlowEtaRPGenFunRe = new TProfile3D("fDiffFlowEtaRPGenFunRe","<Re(D[b][p][q])>",fgknBinsEta,(Double_t)(fEtaMin/fBinWidthEta),(Double_t)(fEtaMax/fBinWidthEta),fgkPmax,0.,(Double_t)fgkPmax,fgkQmax,0.,(Double_t)fgkQmax);
331 fDiffFlowEtaRPGenFunRe->SetXTitle("b");
332 fDiffFlowEtaRPGenFunRe->SetYTitle("p");
333 fDiffFlowEtaRPGenFunRe->SetZTitle("q");
334 fDiffFlowEtaRPGenFunRe->SetTitleOffset(1.44,"X");
335 fDiffFlowEtaRPGenFunRe->SetTitleOffset(1.44,"Y");
336 fHistList->Add(fDiffFlowEtaRPGenFunRe);
338 //avarage of the imaginary part of generating function for differential flow in Eta <Im(D[b][p][q])>
339 fDiffFlowEtaRPGenFunIm = new TProfile3D("fDiffFlowEtaRPGenFunIm","<Im(D[b][p][q])>",fgknBinsEta,(Double_t)(fEtaMin/fBinWidthEta),(Double_t)(fEtaMax/fBinWidthEta),fgkPmax,0.,(Double_t)fgkPmax,fgkQmax,0.,(Double_t)fgkQmax);
340 fDiffFlowEtaRPGenFunIm->SetXTitle("b");
341 fDiffFlowEtaRPGenFunIm->SetYTitle("p");
342 fDiffFlowEtaRPGenFunIm->SetZTitle("q");
343 fDiffFlowEtaRPGenFunIm->SetTitleOffset(1.44,"X");
344 fDiffFlowEtaRPGenFunIm->SetTitleOffset(1.44,"Y");
345 fHistList->Add(fDiffFlowEtaRPGenFunIm);
347 //number of particles per eta bin
348 fEtaBinRPNoOfParticles = new TProfile("fEtaBinRPNoOfParticles","Number of particles per #eta bin",fgknBinsEta,fEtaMin,fEtaMax);
349 fEtaBinRPNoOfParticles->SetXTitle("#eta");
350 fEtaBinRPNoOfParticles->SetYTitle("");
351 fHistList->Add(fEtaBinRPNoOfParticles);
353 //avarage of the real part of generating function for differential flow in Pt <Re(D[b][p][q])>
354 fDiffFlowPtPOIGenFunRe = new TProfile3D("fDiffFlowPtPOIGenFunRe","<Re(D[b][p][q])>",fgknBinsPt,(Double_t)(fPtMin/fBinWidthPt),(Double_t)(fPtMax/fBinWidthPt),fgkPmax,0.,(Double_t)fgkPmax,fgkQmax,0.,(Double_t)fgkQmax);
355 fDiffFlowPtPOIGenFunRe->SetXTitle("b");
356 fDiffFlowPtPOIGenFunRe->SetYTitle("p");
357 fDiffFlowPtPOIGenFunRe->SetZTitle("q");
358 fDiffFlowPtPOIGenFunRe->SetTitleOffset(1.44,"X");
359 fDiffFlowPtPOIGenFunRe->SetTitleOffset(1.44,"Y");
360 fHistList->Add(fDiffFlowPtPOIGenFunRe);
362 //avarage of the imaginary part of generating function for differential flow in Pt <Im(D[b][p][q])>
363 fDiffFlowPtPOIGenFunIm = new TProfile3D("fDiffFlowPtPOIGenFunIm","<Im(D[b][p][q])>",fgknBinsPt,(Double_t)(fPtMin/fBinWidthPt),(Double_t)(fPtMax/fBinWidthPt),fgkPmax,0.,(Double_t)fgkPmax,fgkQmax,0.,(Double_t)fgkQmax);
364 fDiffFlowPtPOIGenFunIm->SetXTitle("b");
365 fDiffFlowPtPOIGenFunIm->SetYTitle("p");
366 fDiffFlowPtPOIGenFunIm->SetZTitle("q");
367 fDiffFlowPtPOIGenFunIm->SetTitleOffset(1.44,"X");
368 fDiffFlowPtPOIGenFunIm->SetTitleOffset(1.44,"Y");
369 fHistList->Add(fDiffFlowPtPOIGenFunIm);
371 //number of particles per pt bin
372 fPtBinPOINoOfParticles = new TProfile("fPtBinPOINoOfParticles","Number of particles per #p_{t} bin",fgknBinsPt,fPtMin,fPtMax);
373 fPtBinPOINoOfParticles->SetXTitle("pt [GeV]");
374 fPtBinPOINoOfParticles->SetYTitle("");
375 fHistList->Add(fPtBinPOINoOfParticles);
377 //avarage of the real part of generating function for differential flow in Eta <Re(D[b][p][q])>
378 fDiffFlowEtaPOIGenFunRe = new TProfile3D("fDiffFlowEtaPOIGenFunRe","<Re(D[b][p][q])>",fgknBinsEta,(Double_t)(fEtaMin/fBinWidthEta),(Double_t)(fEtaMax/fBinWidthEta),fgkPmax,0.,(Double_t)fgkPmax,fgkQmax,0.,(Double_t)fgkQmax);
379 fDiffFlowEtaPOIGenFunRe->SetXTitle("b");
380 fDiffFlowEtaPOIGenFunRe->SetYTitle("p");
381 fDiffFlowEtaPOIGenFunRe->SetZTitle("q");
382 fDiffFlowEtaPOIGenFunRe->SetTitleOffset(1.44,"X");
383 fDiffFlowEtaPOIGenFunRe->SetTitleOffset(1.44,"Y");
384 fHistList->Add(fDiffFlowEtaPOIGenFunRe);
386 //avarage of the imaginary part of generating function for differential flow in Eta <Im(D[b][p][q])>
387 fDiffFlowEtaPOIGenFunIm = new TProfile3D("fDiffFlowEtaPOIGenFunIm","<Im(D[b][p][q])>",fgknBinsEta,(Double_t)(fEtaMin/fBinWidthEta),(Double_t)(fEtaMax/fBinWidthEta),fgkPmax,0.,(Double_t)fgkPmax,fgkQmax,0.,(Double_t)fgkQmax);
388 fDiffFlowEtaPOIGenFunIm->SetXTitle("b");
389 fDiffFlowEtaPOIGenFunIm->SetYTitle("p");
390 fDiffFlowEtaPOIGenFunIm->SetZTitle("q");
391 fDiffFlowEtaPOIGenFunIm->SetTitleOffset(1.44,"X");
392 fDiffFlowEtaPOIGenFunIm->SetTitleOffset(1.44,"Y");
393 fHistList->Add(fDiffFlowEtaPOIGenFunIm);
395 //number of particles per eta bin
396 fEtaBinPOINoOfParticles = new TProfile("fEtaBinPOINoOfParticles","Number of particles per #eta bin",fgknBinsEta,fEtaMin,fEtaMax);
397 fEtaBinPOINoOfParticles->SetXTitle("#eta");
398 fEtaBinPOINoOfParticles->SetYTitle("");
399 fHistList->Add(fEtaBinPOINoOfParticles);
402 fDiffFlowGenFunRe0 = new TProfile2D("fDiffFlowGenFunRe0","Re(<D[b][0][q]>)",fgknBins,(Double_t)(fPtMin/fBinWidth),(Double_t)(fPtMax/fBinWidth),fgkQmax,0.,(Double_t)fgkQmax);
403 fDiffFlowGenFunRe0->SetXTitle("b");
404 fDiffFlowGenFunRe0->SetYTitle("q");
405 fHistList->Add(fDiffFlowGenFunRe0);
407 fDiffFlowGenFunIm0 = new TProfile2D("fDiffFlowGcout<<"HEY M1"<<endl;enFunIm0","Im(<D[b][0][q]>)",fgknBins,(Double_t)(fPtMin/fBinWidth),(Double_t)(fPtMax/fBinWidth),fgkQmax,0.,(Double_t)fgkQmax);
408 fDiffFlowGenFunIm0->SetXTitle("b");
409 fDiffFlowGenFunIm0->SetYTitle("q");
410 fHistList->Add(fDiffFlowGenFunIm0);
412 fDiffFlowGenFunRe1 = new TProfile2D("fDiffFlowGenFunRe1","Re(<D[b][1][q]>)",fgknBins,(Double_t)(fPtMin/fBinWidth),(Double_t)(fPtMax/fBinWidth),fgkQmax,0.,(Double_t)fgkQmax);
413 fDiffFlowGenFunRe1->SetXTitle("b");
414 fDiffFlowGenFunRe1->SetYTitle("q");
415 fHistList->Add(fDiffFlowGenFunRe1);
417 fDiffFlowGenFunIm1 = new TProfile2D("fDiffFlowGenFunIm1","Im(<D[b][1][q]>)",fgknBins,(Double_t)(fPtMin/fBinWidth),(Double_t)(fPtMax/fBinWidth),fgkQmax,0.,(Double_t)fgkQmax);
418 fDiffFlowGenFunIm1->SetXTitle("b");
419 fDiffFlowGenFunIm1->SetYTitle("q");
420 fHistList->Add(fDiffFlowGenFunIm1);
422 fDiffFlowGenFunRe2 = new TProfile2D("fDiffFlowGenFunRe2","Re(<D[b][2][q]>)",fgknBins,(Double_t)(fPtMin/fBinWidth),(Double_t)(fPtMax/fBinWidth),fgkQmax,0.,(Double_t)fgkQmax);
423 fDiffFlowGenFunRe2->SetXTitle("b");
424 fDiffFlowGenFunRe2->SetYTitle("q");
425 fHistList->Add(fDiffFlowGenFunRe2);
427 fDiffFlowGenFunIm2 = new TProfile2D("fDiffFlowGenFunIm2","Im(<D[b][2][q]>)",fgknBins,(Double_t)(fPtMin/fBinWidth),(Double_t)(fPtMax/fBinWidth),fgkQmax,0.,(Double_t)fgkQmax);
428 fDiffFlowGenFunIm2->SetXTitle("b");
429 fDiffFlowGenFunIm2->SetYTitle("q");
430 fHistList->Add(fDiffFlowGenFunIm2);
432 fDiffFlowGenFunRe3 = new TProfile2D("fDiffFlowGenFunRe3","Re(<D[b][3][q]>)",fgknBins,(Double_t)(fPtMin/fBinWidth),(Double_t)(fPtMax/fBinWidth),fgkQmax,0.,(Double_t)fgkQmax);
433 fDiffFlowGenFunRe3->SetXTitle("b");
434 fDiffFlowGenFunRe3->SetYTitle("q");
435 fHistList->Add(fDiffFlowGenFunRe3);
437 fDiffFlowGenFunIm3 = new TProfile2D("fDiffFlowGenFunIm3","Im(<D[b][3][q]>)",fgknBins,(Double_t)(fPtMin/fBinWidth),(Double_t)(fPtMax/fBinWidth),fgkQmax,0.,(Double_t)fgkQmax);
438 fDiffFlowGenFunIm3->SetXTitle("b");
439 fDiffFlowGenFunIm3->SetYTitle("q");
440 fHistList->Add(fDiffFlowGenFunIm3);
442 fDiffFlowGenFunRe4 = new TProfile2D("fDiffFlowGenFunRe4","Re(<D[b][4][q]>)",fgknBins,(Double_t)(fPtMin/fBinWidth),(Double_t)(fPtMax/fBinWidth),fgkQmax,0.,(Double_t)fgkQmax);
443 fDiffFlowGenFunRe4->SetXTitle("b");
444 fDiffFlowGenFunRe4->SetYTitle("q");
445 fHistList->Add(fDiffFlowGenFunRe4);
447 fDiffFlowGenFunIm4 = new TProfile2D("fDiffFlowGenFunIm4","Im(<D[b][4][q]>)",fgknBins,(Double_t)(fPtMin/fBinWidth),(Double_t)(fPtMax/fBinWidth),fgkQmax,0.,(Double_t)fgkQmax);
448 fDiffFlowGenFunIm4->SetXTitle("b");
449 fDiffFlowGenFunIm4->SetYTitle("q");
450 fHistList->Add(fDiffFlowGenFunIm4);
452 fDiffFlowGenFunRe5 = new TProfile2D("fDiffFlowGenFunRe5","Re(<D[b][5][q]>)",fgkQmax,0.,(Double_t)fgkQmax,fgknBins,(Double_t)(fPtMin/fBinWidth),(Double_t)(fPtMax/fBinWidth));
453 fDiffFlowGenFunRe5->SetXTitle("b");
454 fDiffFlowGenFunRe5->SetYTitle("q");
455 fHistList->Add(fDiffFlowGenFunRe5);
457 fDiffFlowGenFunIm5 = new TProfile2D("fDiffFlowGenFunIm5","Im(<D[b][5][q]>)",fgknBins,(Double_t)(fPtMin/fBinWidth),(Double_t)(fPtMax/fBinWidth),fgkQmax,0.,(Double_t)fgkQmax);
458 fDiffFlowGenFunIm5->SetXTitle("b");
459 fDiffFlowGenFunIm5->SetYTitle("q");
460 fHistList->Add(fDiffFlowGenFunIm5);
462 fDiffFlowGenFunRe6 = new TProfile2D("fDiffFlowGenFunRe6","Re(<D[b][6][q]>)",fgknBins,(Double_t)(fPtMin/fBinWidth),(Double_t)(fPtMax/fBinWidth),fgkQmax,0.,(Double_t)fgkQmax);
463 fDiffFlowGenFunRe6->SetXTitle("b");
464 fDiffFlowGenFunRe6->SetYTitle("q");
465 fHistList->Add(fDiffFlowGenFunRe6);
467 fDiffFlowGenFunIm6 = new TProfile2D("fDiffFlowGenFunIm6","Im(<D[b][6][q]>)",fgknBins,(Double_t)(fPtMin/fBinWidth),(Double_t)(fPtMax/fBinWidth),fgkQmax,0.,(Double_t)fgkQmax);
468 fDiffFlowGenFunIm6->SetXTitle("b");
469 fDiffFlowGenFunIm6->SetYTitle("q");
470 fHistList->Add(fDiffFlowGenFunIm6);
472 fDiffFlowGenFunRe7 = new TProfile2D("fDiffFlowGenFunRe7","Re(<D[b][7][q]>)",fgknBins,(Double_t)(fPtMin/fBinWidth),(Double_t)(fPtMax/fBinWidth),fgkQmax,0.,(Double_t)fgkQmax);
473 fDiffFlowGenFunRe7->SetXTitle("b");
474 fDiffFlowGenFunRe7->SetYTitle("q");
475 fHistList->Add(fDiffFlowGenFunRe7);
477 fDiffFlowGenFunIm7 = new TProfile2D("fDiffFlowGenFunIm7","Im(<D[b][7][q]>)",fgknBins,(Double_t)(fPtMin/fBinWidth),(Double_t)(fPtMax/fBinWidth),fgkQmax,0.,(Double_t)fgkQmax);
478 fDiffFlowGenFunIm7->SetXTitle("b");
479 fDiffFlowGenFunIm7->SetYTitle("q");
480 fHistList->Add(fDiffFlowGenFunIm7);
483 //common control histograms
484 fCommonHists = new AliFlowCommonHist("AliFlowCommonHistGFC");
485 fHistList->Add(fCommonHists);
487 //common histograms for final results (2nd order)
488 fCommonHistsResults2nd = new AliFlowCommonHistResults("AliFlowCommonHistResults2ndOrderGFC");
489 fHistList->Add(fCommonHistsResults2nd);
491 //common histograms for final results (4th order)
492 fCommonHistsResults4th = new AliFlowCommonHistResults("AliFlowCommonHistResults4thOrderGFC");
493 fHistList->Add(fCommonHistsResults4th);
495 //common histograms for final results (6th order)
496 fCommonHistsResults6th = new AliFlowCommonHistResults("AliFlowCommonHistResults6thOrderGFC");
497 fHistList->Add(fCommonHistsResults6th);
499 //common histograms for final results (8th order)
500 fCommonHistsResults8th = new AliFlowCommonHistResults("AliFlowCommonHistResults8thOrderGFC");
501 fHistList->Add(fCommonHistsResults8th);
504 fAverageOfSquaredWeight = new TProfile("fAverageOfSquaredWeight","<w^{2}>",1,0,1);
505 fAverageOfSquaredWeight->SetLabelSize(0.06);
506 fAverageOfSquaredWeight->SetMarkerStyle(25);
507 fAverageOfSquaredWeight->SetLabelOffset(0.01);
508 (fAverageOfSquaredWeight->GetXaxis())->SetBinLabel(1,"<w^{2}>");
509 fHistList->Add(fAverageOfSquaredWeight);
511 // add list fWeightsList with weights to the main list
512 fHistList->Add(fWeightsList);
515 //================================================================================================================
517 void AliFlowAnalysisWithCumulants::Make(AliFlowEventSimple* anEvent)
520 Int_t nPrim = anEvent->NumberOfTracks(); //total multiplicity
522 Int_t nEventNSelTracksRP = anEvent->GetEventNSelTracksRP(); //selected multiplicity (particles used for int. flow)
524 Int_t n = 2; // int flow harmonic (to be improved)
526 //---------------------------------------------------------------------------------------------------------
528 Bool_t useWeights = fUsePhiWeights||fUsePtWeights||fUseEtaWeights;
530 TH1F *phiWeights = NULL; // histogram with phi weights
531 TH1D *ptWeights = NULL; // histogram with pt weights
532 TH1D *etaWeights = NULL; // histogram with eta weights
534 Double_t wPhi = 1.; // phi weight
535 Double_t wPt = 1.; // pt weight
536 Double_t wEta = 1.; // eta weight
542 cout<<" WARNING: fWeightsList is NULL pointer in GFC::Make() !!!!"<<endl;
547 phiWeights = dynamic_cast<TH1F *>(fWeightsList->FindObject("phi_weights"));
550 cout<<" WARNING: couldn't access the histogram with phi weights in GFC::Make() !!!!"<<endl;
556 ptWeights = dynamic_cast<TH1D *>(fWeightsList->FindObject("pt_weights"));
559 cout<<" WARNING: couldn't access the histogram with pt weights in GFC::Make() !!!!"<<endl;
565 etaWeights = dynamic_cast<TH1D *>(fWeightsList->FindObject("eta_weights"));
568 cout<<" WARNING: couldn't access the histogram with eta weights in GFC::Make() !!!!"<<endl;
573 //---------------------------------------------------------------------------------------------------------
575 if(nEventNSelTracksRP>9) //generating function formalism applied here make sense only for selected multiplicity >= 10
577 //fill the common control histograms
578 fCommonHists->FillControlHistograms(anEvent);
580 //initializing the generating function G[p][q] for integrated flow
581 Double_t genfunG[fgkPmax][fgkQmax];
583 for(Int_t p=0;p<fgkPmax;p++)
585 for(Int_t q=0;q<fgkQmax;q++)
591 Int_t nSelTracksRP = 0; //cross-checking the selected multiplicity
598 for(Int_t i=0;i<nPrim;i++)
600 fTrack=anEvent->GetTrack(i);
601 if(fTrack && fTrack->InRPSelection())
604 // get azimuthal angle, momentum and pseudorapidity of a particle:
605 dPhi = fTrack->Phi();
607 dEta = fTrack->Eta();
611 nBinsPhi = phiWeights->GetNbinsX();
614 wPhi = phiWeights->GetBinContent(1+(Int_t)(TMath::Floor(dPhi*nBinsPhi/TMath::TwoPi())));
622 wPt = ptWeights->GetBinContent(1+(Int_t)(TMath::Floor((dPt-fPtMin)/fBinWidthPt)));
630 wEta=etaWeights->GetBinContent(1+(Int_t)(TMath::Floor((dEta-fEtaMin)/fBinWidthEta)));
633 // evaluate the generating function:
634 for(Int_t p=0;p<fgkPmax;p++)
636 for(Int_t q=0;q<fgkQmax;q++)
638 genfunG[p][q]*=(1.+wPhi*wPt*wEta*(2.*fR0*sqrt(p+1.)/nEventNSelTracksRP)*cos(fgkFlow*dPhi-2.*q*TMath::Pi()/fgkQmax));
642 fAverageOfSquaredWeight->Fill(0.,pow(wPhi*wPt*wEta,2.),1);
643 } // end of if(fTrack && fTrack->InRPSelection())
644 } // end of for(Int_t i=0;i<nPrim;i++)
646 //storing the value of G[p][q] in 2D profile in order to get automatically the avarage <G[p][q]>
647 for(Int_t p=0;p<fgkPmax;p++)
649 for(Int_t q=0;q<fgkQmax;q++)
651 fIntFlowGenFun->Fill((Double_t)p,(Double_t)q,genfunG[p][q],1);
655 //storing the selected multiplicity (if fAvMultIntFlow is not filled here then you had wrongly selected the particles used for integrated flow)
656 if(nSelTracksRP==nEventNSelTracksRP)
658 fAvMultIntFlowGFC->Fill(0.,nSelTracksRP,1);
661 cout<<"WARNING: nSelTracksRP != nEventNSelTracksRP in GFC::Make(). Something is wrong with RP flagging !!!!"<<endl;
664 // calculating Q-vector of event (needed for errors)
665 AliFlowVector fQVector;
668 fQVector=anEvent->GetQ(1*n,fWeightsList,fUsePhiWeights,fUsePtWeights,fUseEtaWeights); // get the Q vector for this event
669 fQVectorComponentsGFC->Fill(0.,fQVector.X(),1); // in the 1st bin fill Q_x
670 fQVectorComponentsGFC->Fill(1.,fQVector.Y(),1); // in the 2nd bin fill Q_y
671 fQVectorComponentsGFC->Fill(2.,pow(fQVector.X(),2.),1); // in the 3rd bin fill (Q_x)^2
672 fQVectorComponentsGFC->Fill(3.,pow(fQVector.Y(),2.),1); // in the 4th bin fill (Q_y)^2
674 //3D profiles for differential flow in pt and eta
675 //second loop over data: evaluating the generating function D[b][p][q] for differential flow
676 //remark 0: D[b][p][q] is a complex number => real and imaginary part are calculated separately
677 //remark 1: note that bellow G[p][q] is needed, the value of generating function for integrated flow for the CURRENT event
678 //remark 2: results are stored in 3D profiles in order to automatically get <Re(D[b][p][q])> and <Im(D[b][p][q])>
679 for(Int_t i=0;i<nPrim;i++)
681 fTrack=anEvent->GetTrack(i);
684 if(fTrack->InRPSelection() && fTrack->InPOISelection())
686 // get azimuthal angle, momentum and pseudorapidity of a particle:
687 dPhi = fTrack->Phi();
689 dEta = fTrack->Eta();
691 fPtBinPOINoOfParticles->Fill(dPt,dPt,1.);
692 fEtaBinPOINoOfParticles->Fill(dEta,dEta,1.);
697 nBinsPhi = phiWeights->GetNbinsX();
700 wPhi = phiWeights->GetBinContent(1+(Int_t)(TMath::Floor(dPhi*nBinsPhi/TMath::TwoPi())));
708 wPt = ptWeights->GetBinContent(1+(Int_t)(TMath::Floor((dPt-fPtMin)/fBinWidthPt)));
716 wEta=etaWeights->GetBinContent(1+(Int_t)(TMath::Floor((dEta-fEtaMin)/fBinWidthEta)));
720 for(Int_t p=0;p<fgkPmax;p++)
722 for(Int_t q=0;q<fgkQmax;q++)
725 fDiffFlowPtPOIGenFunRe->Fill(dPt/fBinWidthPt,(Double_t)p,(Double_t)q,genfunG[p][q]*cos(fgkMltpl*fgkFlow*dPhi)/(1.+wPhi*wPt*wEta*(2.*fR0*sqrt(p+1.)/nSelTracksRP)*cos(fgkFlow*dPhi-2.*q*TMath::Pi()/fgkQmax)),1.);
726 //imaginary part (Pt)
727 fDiffFlowPtPOIGenFunIm->Fill(dPt/fBinWidthPt,(Double_t)p,(Double_t)q,genfunG[p][q]*sin(fgkMltpl*fgkFlow*dPhi)/(1.+wPhi*wPt*wEta*(2.*fR0*sqrt(p+1.)/nSelTracksRP)*cos(fgkFlow*dPhi-2.*q*TMath::Pi()/fgkQmax)),1.);
729 fDiffFlowEtaPOIGenFunRe->Fill(dEta/fBinWidthEta,(Double_t)p,(Double_t)q,genfunG[p][q]*cos(fgkMltpl*fgkFlow*dPhi)/(1.+wPhi*wPt*wEta*(2.*fR0*sqrt(p+1.)/nSelTracksRP)*cos(fgkFlow*dPhi-2.*q*TMath::Pi()/fgkQmax)),1.);
730 //imaginary part (Eta)
731 fDiffFlowEtaPOIGenFunIm->Fill(dEta/fBinWidthEta,(Double_t)p,(Double_t)q,genfunG[p][q]*sin(fgkMltpl*fgkFlow*dPhi)/(1.+wPhi*wPt*wEta*(2.*fR0*sqrt(p+1.)/nSelTracksRP)*cos(fgkFlow*dPhi-2.*q*TMath::Pi()/fgkQmax)),1.);
735 else if(fTrack->InPOISelection() && !(fTrack->InRPSelection()))
737 // get azimuthal angle, momentum and pseudorapidity of a particle:
738 dPhi = fTrack->Phi();
740 dEta = fTrack->Eta();
742 fPtBinPOINoOfParticles->Fill(dPt,dPt,1.);
743 fEtaBinPOINoOfParticles->Fill(dEta,dEta,1.);
744 for(Int_t p=0;p<fgkPmax;p++)
746 for(Int_t q=0;q<fgkQmax;q++)
749 fDiffFlowPtPOIGenFunRe->Fill(dPt/fBinWidthPt,(Double_t)p,(Double_t)q,genfunG[p][q]*cos(fgkMltpl*fgkFlow*dPhi),1.);
750 //imaginary part (Pt)
751 fDiffFlowPtPOIGenFunIm->Fill(dPt/fBinWidthPt,(Double_t)p,(Double_t)q,genfunG[p][q]*sin(fgkMltpl*fgkFlow*dPhi),1.);
753 fDiffFlowEtaPOIGenFunRe->Fill(dEta/fBinWidthEta,(Double_t)p,(Double_t)q,genfunG[p][q]*cos(fgkMltpl*fgkFlow*dPhi),1.);
754 //imaginary part (Eta)
755 fDiffFlowEtaPOIGenFunIm->Fill(dEta/fBinWidthEta,(Double_t)p,(Double_t)q,genfunG[p][q]*sin(fgkMltpl*fgkFlow*dPhi),1.);
760 if(fTrack->InRPSelection())
762 // get azimuthal angle, momentum and pseudorapidity of a particle:
763 dPhi = fTrack->Phi();
765 dEta = fTrack->Eta();
767 fPtBinRPNoOfParticles->Fill(dPt,dPt,1.);
768 fEtaBinRPNoOfParticles->Fill(dEta,dEta,1.);
773 nBinsPhi = phiWeights->GetNbinsX();
776 wPhi = phiWeights->GetBinContent(1+(Int_t)(TMath::Floor(dPhi*nBinsPhi/TMath::TwoPi())));
784 wPt = ptWeights->GetBinContent(1+(Int_t)(TMath::Floor((dPt-fPtMin)/fBinWidthPt)));
792 wEta=etaWeights->GetBinContent(1+(Int_t)(TMath::Floor((dEta-fEtaMin)/fBinWidthEta)));
796 for(Int_t p=0;p<fgkPmax;p++)
798 for(Int_t q=0;q<fgkQmax;q++)
801 fDiffFlowPtRPGenFunRe->Fill(dPt/fBinWidthPt,(Double_t)p,(Double_t)q,genfunG[p][q]*cos(fgkMltpl*fgkFlow*dPhi)/(1.+wPhi*wPt*wEta*(2.*fR0*sqrt(p+1.)/nSelTracksRP)*cos(fgkFlow*dPhi-2.*q*TMath::Pi()/fgkQmax)),1.);
802 //imaginary part (Pt)
803 fDiffFlowPtRPGenFunIm->Fill(dPt/fBinWidthPt,(Double_t)p,(Double_t)q,genfunG[p][q]*sin(fgkMltpl*fgkFlow*dPhi)/(1.+wPhi*wPt*wEta*(2.*fR0*sqrt(p+1.)/nSelTracksRP)*cos(fgkFlow*dPhi-2.*q*TMath::Pi()/fgkQmax)),1.);
805 fDiffFlowEtaRPGenFunRe->Fill(dEta/fBinWidthEta,(Double_t)p,(Double_t)q,genfunG[p][q]*cos(fgkMltpl*fgkFlow*dPhi)/(1.+wPhi*wPt*wEta*(2.*fR0*sqrt(p+1.)/nSelTracksRP)*cos(fgkFlow*dPhi-2.*q*TMath::Pi()/fgkQmax)),1.);
806 //imaginary part (Eta)
807 fDiffFlowEtaRPGenFunIm->Fill(dEta/fBinWidthEta,(Double_t)p,(Double_t)q,genfunG[p][q]*sin(fgkMltpl*fgkFlow*dPhi)/(1.+wPhi*wPt*wEta*(2.*fR0*sqrt(p+1.)/nSelTracksRP)*cos(fgkFlow*dPhi-2.*q*TMath::Pi()/fgkQmax)),1.);
810 }//end of if(fTrack->InRPSelection())
812 }//ending the second loop over data
817 //sixteen 2D profiles for differential flow
818 for(Int_t i=0;i<nPrim;i++){
819 fTrack=anEvent->GetTrack(i);
820 if (fTrack && fTrack->InPOISelection()){
821 //for(Int_t p=0;p<fgkPmax;p++){
822 for(Int_t q=0;q<fgkQmax;q++){
824 fDiffFlowGenFunRe0->Fill(fTrack->Pt()/fBinWidth,(Double_t)q,genfunG[0][q]*cos(fgkMltpl*fgkFlow*fTrack->Phi())/(1.+(2.*fR0*sqrt(0.+1.)/nSelTracksRP)*cos(fgkFlow*fTrack->Phi()-2.*q*TMath::Pi()/fgkQmax)),1.);
826 fDiffFlowGenFunIm0->Fill(fTrack->Pt()/fBinWidth,(Double_t)q,genfunG[0][q]*sin(fgkMltpl*fgkFlow*fTrack->Phi())/(1.+(2.*fR0*sqrt(0.+1.)/nSelTracksRP)*cos(fgkFlow*fTrack->Phi()-2.*q*TMath::Pi()/fgkQmax)),1.);
827 //-----------------------------------------------------------------------
829 fDiffFlowGenFunRe1->Fill(fTrack->Pt()/fBinWidth,(Double_t)q,genfunG[1][q]*cos(fgkMltpl*fgkFlow*fTrack->Phi())/(1.+(2.*fR0*sqrt(1.+1.)/nSelTracksRP)*cos(fgkFlow*fTrack->Phi()-2.*q*TMath::Pi()/fgkQmax)),1.);
831 fDiffFlowGenFunIm1->Fill(fTrack->Pt()/fBinWidth,(Double_t)q,genfunG[1][q]*sin(fgkMltpl*fgkFlow*fTrack->Phi())/(1.+(2.*fR0*sqrt(1.+1.)/nSelTracksRP)*cos(fgkFlow*fTrack->Phi()-2.*q*TMath::Pi()/fgkQmax)),1.);
832 //-----------------------------------------------------------------------
834 fDiffFlowGenFunRe2->Fill(fTrack->Pt()/fBinWidth,(Double_t)q,genfunG[2][q]*cos(fgkMltpl*fgkFlow*fTrack->Phi())/(1.+(2.*fR0*sqrt(2.+1.)/nSelTracksRP)*cos(fgkFlow*fTrack->Phi()-2.*q*TMath::Pi()/fgkQmax)),1.);
836 fDiffFlowGenFunIm2->Fill(fTrack->Pt()/fBinWidth,(Double_t)q,genfunG[2][q]*sin(fgkMltpl*fgkFlow*fTrack->Phi())/(1.+(2.*fR0*sqrt(2.+1.)/nSelTracksRP)*cos(fgkFlow*fTrack->Phi()-2.*q*TMath::Pi()/fgkQmax)),1.);
837 //-----------------------------------------------------------------------
839 fDiffFlowGenFunRe3->Fill(fTrack->Pt()/fBinWidth,(Double_t)q,genfunG[3][q]*cos(fgkMltpl*fgkFlow*fTrack->Phi())/(1.+(2.*fR0*sqrt(3.+1.)/nSelTracksRP)*cos(fgkFlow*fTrack->Phi()-2.*q*TMath::Pi()/fgkQmax)),1.);
841 fDiffFlowGenFunIm3->Fill(fTrack->Pt()/fBinWidth,(Double_t)q,genfunG[3][q]*sin(fgkMltpl*fgkFlow*fTrack->Phi())/(1.+(2.*fR0*sqrt(3.+1.)/nSelTracksRP)*cos(fgkFlow*fTrack->Phi()-2.*q*TMath::Pi()/fgkQmax)),1.);
842 //-----------------------------------------------------------------------
844 fDiffFlowGenFunRe4->Fill(fTrack->Pt()/fBinWidth,(Double_t)q,genfunG[4][q]*cos(fgkMltpl*fgkFlow*fTrack->Phi())/(1.+(2.*fR0*sqrt(4.+1.)/nSelTracksRP)*cos(fgkFlow*fTrack->Phi()-2.*q*TMath::Pi()/fgkQmax)),1.);
846 fDiffFlowGenFunIm4->Fill(fTrack->Pt()/fBinWidth,(Double_t)q,genfunG[4][q]*sin(fgkMltpl*fgkFlow*fTrack->Phi())/(1.+(2.*fR0*sqrt(4.+1.)/nSelTracksRP)*cos(fgkFlow*fTrack->Phi()-2.*q*TMath::Pi()/fgkQmax)),1.);
847 //-----------------------------------------------------------------------
849 fDiffFlowGenFunRe5->Fill(fTrack->Pt()/fBinWidth,(Double_t)q,genfunG[5][q]*cos(fgkMltpl*fgkFlow*fTrack->Phi())/(1.+(2.*fR0*sqrt(5.+1.)/nSelTracksRP)*cos(fgkFlow*fTrack->Phi()-2.*q*TMath::Pi()/fgkQmax)),1.);
851 fDiffFlowGenFunIm5->Fill(fTrack->Pt()/fBinWidth,(Double_t)q,genfunG[5][q]*sin(fgkMltpl*fgkFlow*fTrack->Phi())/(1.+(2.*fR0*sqrt(5.+1.)/nSelTracksRP)*cos(fgkFlow*fTrack->Phi()-2.*q*TMath::Pi()/fgkQmax)),1.);
852 //-----------------------------------------------------------------------
854 fDiffFlowGenFunRe6->Fill(fTrack->Pt()/fBinWidth,(Double_t)q,genfunG[6][q]*cos(fgkMltpl*fgkFlow*fTrack->Phi())/(1.+(2.*fR0*sqrt(6.+1.)/nSelTracksRP)*cos(fgkFlow*fTrack->Phi()-2.*q*TMath::Pi()/fgkQmax)),1.);
856 fDiffFlowGenFunIm6->Fill(fTrack->Pt()/fBinWidth,(Double_t)q,genfunG[6][q]*sin(fgkMltpl*fgkFlow*fTrack->Phi())/(1.+(2.*fR0*sqrt(6.+1.)/nSelTracksRP)*cos(fgkFlow*fTrack->Phi()-2.*q*TMath::Pi()/fgkQmax)),1.);
857 //-----------------------------------------------------------------------
859 fDiffFlowGenFunRe7->Fill(fTrack->Pt()/fBinWidth,(Double_t)q,genfunG[7][q]*cos(fgkMltpl*fgkFlow*fTrack->Phi())/(1.+(2.*fR0*sqrt(7.+1.)/nSelTracksRP)*cos(fgkFlow*fTrack->Phi()-2.*q*TMath::Pi()/fgkQmax)),1.);
861 fDiffFlowGenFunIm7->Fill(fTrack->Pt()/fBinWidth,(Double_t)q,genfunG[7][q]*sin(fgkMltpl*fgkFlow*fTrack->Phi())/(1.+(2.*fR0*sqrt(7.+1.)/nSelTracksRP)*cos(fgkFlow*fTrack->Phi()-2.*q*TMath::Pi()/fgkQmax)),1.);
865 }//ending the second loop over data
868 }//end of if(nEventNSelTracksRP>9)
882 //off the record: numerical equations for cumulants solved up to different highest order
886 Int_t nPrimOE = anEvent->NumberOfTracks();//total multiplicity
888 Int_t nEventNSelTracksRPOE = anEvent->GetEventNSelTracksRP();
890 Double_t genfunG4[fgkPmax4][fgkQmax4];
891 Double_t genfunG6[fgkPmax6][fgkQmax6];
892 Double_t genfunG8[fgkPmax8][fgkQmax8];
893 Double_t genfunG16[fgkPmax16][fgkQmax16];
894 for(Int_t p=0;p<fgkPmax16;p++)
896 for(Int_t q=0;q<fgkQmax16;q++)
899 if(p<fgkPmax8 && q<fgkQmax8)
902 if(p<fgkPmax6 && q<fgkQmax6)
905 if(p<fgkPmax4 && q<fgkQmax4)
915 if(nEventNSelTracksRPOE>15) fAvMultIntFlow16GFC->Fill(0.,nEventNSelTracksRPOE,1);
916 if(nEventNSelTracksRPOE>7) fAvMultIntFlow8GFC->Fill(0.,nEventNSelTracksRPOE,1);
917 if(nEventNSelTracksRPOE>5) fAvMultIntFlow6GFC->Fill(0.,nEventNSelTracksRPOE,1);
918 if(nEventNSelTracksRPOE>3) fAvMultIntFlow4GFC->Fill(0.,nEventNSelTracksRPOE,1);
920 //first loop over data: evaluating the generating function G[p][q] for integrated flow
921 for(Int_t i=0;i<nPrimOE;i++)
923 fTrack=anEvent->GetTrack(i);
924 if(fTrack && fTrack->InRPSelection())
926 for(Int_t p=0;p<fgkPmax16;p++)
928 for(Int_t q=0;q<fgkQmax16;q++)
930 if(nEventNSelTracksRPOE>15)
932 genfunG16[p][q]*=(1.+(2.*fR0*sqrt(p+1.)/nEventNSelTracksRPOE)*cos(fgkFlow*fTrack->Phi()-2.*q*TMath::Pi()/fgkQmax16));
934 if(p<fgkPmax8 && q<fgkQmax8)
936 if(nEventNSelTracksRPOE>7)
938 genfunG8[p][q]*=(1.+(2.*fR0*sqrt(p+1.)/nEventNSelTracksRPOE)*cos(fgkFlow*fTrack->Phi()-2.*q*TMath::Pi()/fgkQmax8));
940 if(p<fgkPmax6 && q<fgkQmax6)
942 if(nEventNSelTracksRPOE>5)
944 genfunG6[p][q]*=(1.+(2.*fR0*sqrt(p+1.)/nEventNSelTracksRPOE)*cos(fgkFlow*fTrack->Phi()-2.*q*TMath::Pi()/fgkQmax6));
946 if(p<fgkPmax4 && q<fgkQmax4)
948 if(nEventNSelTracksRPOE>3)
950 genfunG4[p][q]*=(1.+(2.*fR0*sqrt(p+1.)/nEventNSelTracksRPOE)*cos(fgkFlow*fTrack->Phi()-2.*q*TMath::Pi()/fgkQmax4));
957 }//end of if(fTrack && fTrack->InRPSelection())
958 }//ending the loop over data
960 //storing the value of G[p][q] in 2D profile in order to get automatically the avarage <G[p][q]>
961 for(Int_t p=0;p<fgkPmax16;p++)
963 for(Int_t q=0;q<fgkQmax16;q++)
965 if(nEventNSelTracksRPOE>15) fIntFlowGenFun16->Fill((Double_t)p,(Double_t)q,genfunG16[p][q],1);
966 if(p<fgkPmax8 && q<fgkQmax8)
968 if(nEventNSelTracksRPOE>7) fIntFlowGenFun8->Fill((Double_t)p,(Double_t)q,genfunG8[p][q],1);
969 if(p<fgkPmax6 && q<fgkQmax6)
971 if(nEventNSelTracksRPOE>5) fIntFlowGenFun6->Fill((Double_t)p,(Double_t)q,genfunG6[p][q],1);
972 if(p<fgkPmax4 && q<fgkQmax4)
974 if(nEventNSelTracksRPOE>3) fIntFlowGenFun4->Fill((Double_t)p,(Double_t)q,genfunG4[p][q],1);
980 }//end of if(fOtherEquations)
984 //================================================================================================================
986 void AliFlowAnalysisWithCumulants::GetOutputHistograms(TList *outputListHistos)
988 // get the pointers to all output histograms before calling Finish()
989 if (outputListHistos)
991 //Get the common histograms from the output list
992 //histograms to store the final results
993 TH1D *intFlowResults = dynamic_cast<TH1D*>(outputListHistos->FindObject("fIntFlowResultsGFC"));
994 TH1D *diffFlowResults2 = dynamic_cast<TH1D*>(outputListHistos->FindObject("fDiffFlowResults2ndOrderGFC"));
995 TH1D *diffFlowResults4 = dynamic_cast<TH1D*>(outputListHistos->FindObject("fDiffFlowResults4thOrderGFC"));
996 TH1D *diffFlowResults6 = dynamic_cast<TH1D*>(outputListHistos->FindObject("fDiffFlowResults6thOrderGFC"));
997 TH1D *diffFlowResults8 = dynamic_cast<TH1D*>(outputListHistos->FindObject("fDiffFlowResults8thOrderGFC"));
999 //common histograms to store the final results the integrated and differential flow
1000 AliFlowCommonHistResults *commonHistRes2nd = dynamic_cast<AliFlowCommonHistResults*>(outputListHistos->FindObject("AliFlowCommonHistResults2ndOrderGFC"));
1001 AliFlowCommonHistResults *commonHistRes4th = dynamic_cast<AliFlowCommonHistResults*>(outputListHistos->FindObject("AliFlowCommonHistResults4thOrderGFC"));
1002 AliFlowCommonHistResults *commonHistRes6th = dynamic_cast<AliFlowCommonHistResults*>(outputListHistos->FindObject("AliFlowCommonHistResults6thOrderGFC"));
1003 AliFlowCommonHistResults *commonHistRes8th = dynamic_cast<AliFlowCommonHistResults*>(outputListHistos->FindObject("AliFlowCommonHistResults8thOrderGFC"));
1005 //common control histogram
1006 AliFlowCommonHist *commonHists = dynamic_cast<AliFlowCommonHist*>(outputListHistos->FindObject("AliFlowCommonHistGFC"));
1008 //profiles with average values of generating functions for int. and diff. flow
1009 TProfile2D *intFlowGenFun = dynamic_cast<TProfile2D*>(outputListHistos->FindObject("fIntFlowGenFun"));
1011 TProfile2D *intFlowGenFun4 = dynamic_cast<TProfile2D*>(outputListHistos->FindObject("fIntFlowGenFun4")); //only for other system of Eq.
1012 TProfile2D *intFlowGenFun6 = dynamic_cast<TProfile2D*>(outputListHistos->FindObject("fIntFlowGenFun6")); //only for other system of Eq.
1013 TProfile2D *intFlowGenFun8 = dynamic_cast<TProfile2D*>(outputListHistos->FindObject("fIntFlowGenFun8")); //only for other system of Eq.
1014 TProfile2D *intFlowGenFun16 = dynamic_cast<TProfile2D*>(outputListHistos->FindObject("fIntFlowGenFun16")); //only for other system of Eq.
1017 TProfile3D *diffFlowPtRPGenFunRe = dynamic_cast<TProfile3D*>(outputListHistos->FindObject("fDiffFlowPtRPGenFunRe"));
1018 TProfile3D *diffFlowPtRPGenFunIm = dynamic_cast<TProfile3D*>(outputListHistos->FindObject("fDiffFlowPtRPGenFunIm"));
1019 TProfile *ptBinRPNoOfParticles = dynamic_cast<TProfile*>(outputListHistos->FindObject("fPtBinRPNoOfParticles"));
1022 TProfile3D *diffFlowEtaRPGenFunRe = dynamic_cast<TProfile3D*>(outputListHistos->FindObject("fDiffFlowEtaRPGenFunRe"));
1023 TProfile3D *diffFlowEtaRPGenFunIm = dynamic_cast<TProfile3D*>(outputListHistos->FindObject("fDiffFlowEtaRPGenFunIm"));
1024 TProfile *etaBinRPNoOfParticles = dynamic_cast<TProfile*>(outputListHistos->FindObject("fEtaBinRPNoOfParticles"));
1027 TProfile3D *diffFlowPtPOIGenFunRe = dynamic_cast<TProfile3D*>(outputListHistos->FindObject("fDiffFlowPtPOIGenFunRe"));
1028 TProfile3D *diffFlowPtPOIGenFunIm = dynamic_cast<TProfile3D*>(outputListHistos->FindObject("fDiffFlowPtPOIGenFunIm"));
1029 TProfile *ptBinPOINoOfParticles = dynamic_cast<TProfile*>(outputListHistos->FindObject("fPtBinPOINoOfParticles"));
1032 TProfile3D *diffFlowEtaPOIGenFunRe = dynamic_cast<TProfile3D*>(outputListHistos->FindObject("fDiffFlowEtaPOIGenFunRe"));
1033 TProfile3D *diffFlowEtaPOIGenFunIm = dynamic_cast<TProfile3D*>(outputListHistos->FindObject("fDiffFlowEtaPOIGenFunIm"));
1034 TProfile *etaBinPOINoOfParticles = dynamic_cast<TProfile*>(outputListHistos->FindObject("fEtaBinPOINoOfParticles"));
1036 //average selected multiplicity (for int. flow)
1037 TProfile *avMult = dynamic_cast<TProfile*>(outputListHistos->FindObject("fAvMultIntFlowGFC"));
1039 TProfile *avMult4 = dynamic_cast<TProfile*>(outputListHistos->FindObject("fAvMultIntFlow4GFCA")); //only for other system of Eq.
1040 TProfile *avMult6 = dynamic_cast<TProfile*>(outputListHistos->FindObject("fAvMultIntFlow6GFCA")); //only for other system of Eq.
1041 TProfile *avMult8 = dynamic_cast<TProfile*>(outputListHistos->FindObject("fAvMultIntFlow8GFCA")); //only for other system of Eq.
1042 TProfile *avMult16 = dynamic_cast<TProfile*>(outputListHistos->FindObject("fAvMultIntFlow16GFCA")); //only for other system of Eq.
1044 //average values of Q-vector components (1st bin: <Q_x>, 2nd bin: <Q_y>, 3rd bin: <(Q_x)^2>, 4th bin: <(Q_y)^2>)
1045 TProfile *qVectorComponents = dynamic_cast<TProfile*>(outputListHistos->FindObject("fQVectorComponentsGFC"));
1048 TProfile *averageOfSquaredWeight = dynamic_cast<TProfile*>(outputListHistos->FindObject("fAverageOfSquaredWeight"));
1051 TProfile2D *diffFlowPtGenFunRe0 = dynamic_cast<TProfile2D*>(outputListHistos->FindObject("fdiffFlowPtGenFunRe0"));
1052 TProfile2D *diffFlowPtGenFunRe1 = dynamic_cast<TProfile2D*>(outputListHistos->FindObject("fdiffFlowPtGenFunRe1"));
1053 TProfile2D *diffFlowPtGenFunRe2 = dynamic_cast<TProfile2D*>(outputListHistos->FindObject("fdiffFlowPtGenFunRe2"));
1054 TProfile2D *diffFlowPtGenFunRe3 = dynamic_cast<TProfile2D*>(outputListHistos->FindObject("fdiffFlowPtGenFunRe3"));
1055 TProfile2D *diffFlowPtGenFunRe4 = dynamic_cast<TProfile2D*>(outputListHistos->FindObject("fdiffFlowPtGenFunRe4"));
1056 TProfile2D *diffFlowPtGenFunRe5 = dynamic_cast<TProfile2D*>(outputListHistos->FindObject("fdiffFlowPtGenFunRe5"));
1057 TProfile2D *diffFlowPtGenFunRe6 = dynamic_cast<TProfile2D*>(outputListHistos->FindObject("fdiffFlowPtGenFunRe6"));
1058 TProfile2D *diffFlowPtGenFunRe7 = dynamic_cast<TProfile2D*>(outputListHistos->FindObject("fdiffFlowPtGenFunRe7"));
1059 TProfile2D *diffFlowPtGenFunIm0 = dynamic_cast<TProfile2D*>(outputListHistos->FindObject("fdiffFlowPtGenFunIm0"));
1060 TProfile2D *diffFlowPtGenFunIm1 = dynamic_cast<TProfile2D*>(outputListHistos->FindObject("fdiffFlowPtGenFunIm1"));
1061 TProfile2D *diffFlowPtGenFunIm2 = dynamic_cast<TProfile2D*>(outputListHistos->FindObject("fdiffFlowPtGenFunIm2"));
1062 TProfile2D *diffFlowPtGenFunIm3 = dynamic_cast<TProfile2D*>(outputListHistos->FindObject("fdiffFlowPtGenFunIm3"));
1063 TProfile2D *diffFlowPtGenFunIm4 = dynamic_cast<TProfile2D*>(outputListHistos->FindObject("fdiffFlowPtGenFunIm4"));
1064 TProfile2D *diffFlowPtGenFunIm5 = dynamic_cast<TProfile2D*>(outputListHistos->FindObject("fdiffFlowPtGenFunIm5"));
1065 TProfile2D *diffFlowPtGenFunIm6 = dynamic_cast<TProfile2D*>(outputListHistos->FindObject("fdiffFlowPtGenFunIm6"));
1066 TProfile2D *diffFlowPtGenFunIm7 = dynamic_cast<TProfile2D*>(outputListHistos->FindObject("fdiffFlowPtGenFunIm7"));
1069 //profile with avarage selected multiplicity for int. flow
1070 //TProfile *avMult = dynamic_cast<TProfile*>(outputListHistos->FindObject("fAvMultIntFlow"));
1072 //profile with avarage values of Q-vector components (1st bin: <Q_x>, 2nd bin: <Q_y>, 3rd bin: <(Q_x)^2>, 4th bin: <(Q_y)^2>)
1073 //TProfile *QVectorComponents = dynamic_cast<TProfile*>(outputListHistos->FindObject("fQVectorComponents"));
1076 //TH1D *qDist = dynamic_cast<TH1D*>(outputListHistos->FindObject("fQDist"));
1078 //AliCumulantsFunctions finalResults(intFlowGenFun,NULL,NULL, intFlowResults,diffFlowResults2,diffFlowResults4,diffFlowResults6,diffFlowResults8,avMult,QVectorComponents,qDist,diffFlowPtGenFunRe0,diffFlowPtGenFunRe1,diffFlowPtGenFunRe2, diffFlowPtGenFunRe3,diffFlowPtGenFunRe4,diffFlowPtGenFunRe5,diffFlowPtGenFunRe6,diffFlowPtGenFunRe7,diffFlowPtGenFunIm0,diffFlowPtGenFunIm1, diffFlowPtGenFunIm2,diffFlowPtGenFunIm3,diffFlowPtGenFunIm4,diffFlowPtGenFunIm5,diffFlowPtGenFunIm6,diffFlowPtGenFunIm7);
1080 //AliCumulantsFunctions finalResults(intFlowGenFun,diffFlowPtGenFunRe,diffFlowPtGenFunIm, intFlowResults,diffFlowResults2,diffFlowResults4,diffFlowResults6,diffFlowResults8,avMult,QVectorComponents,qDist);
1082 //finalResults.Calculate();
1084 //---------------------------------------------------
1086 this->SetIntFlowResults(intFlowResults);
1087 this->SetDiffFlowResults2nd(diffFlowResults2);
1088 this->SetDiffFlowResults4th(diffFlowResults4);
1089 this->SetDiffFlowResults6th(diffFlowResults6);
1090 this->SetDiffFlowResults8th(diffFlowResults8);
1092 this->SetCommonHistsResults2nd(commonHistRes2nd);
1093 this->SetCommonHistsResults4th(commonHistRes4th);
1094 this->SetCommonHistsResults6th(commonHistRes6th);
1095 this->SetCommonHistsResults8th(commonHistRes8th);
1097 this->SetCommonHists(commonHists);
1099 this->SetIntFlowGenFun(intFlowGenFun);
1101 this->SetIntFlowGenFun4(intFlowGenFun4); //only for other system of Eq.
1102 this->SetIntFlowGenFun6(intFlowGenFun6); //only for other system of Eq.
1103 this->SetIntFlowGenFun8(intFlowGenFun8); //only for other system of Eq.
1104 this->SetIntFlowGenFun16(intFlowGenFun16); //only for other system of Eq.
1106 this->SetDiffFlowPtRPGenFunRe(diffFlowPtRPGenFunRe);
1107 this->SetDiffFlowPtRPGenFunIm(diffFlowPtRPGenFunIm);
1108 this->SetNumberOfParticlesPerPtBinRP(ptBinRPNoOfParticles);
1110 this->SetDiffFlowEtaRPGenFunRe(diffFlowEtaRPGenFunRe);
1111 this->SetDiffFlowEtaRPGenFunIm(diffFlowEtaRPGenFunIm);
1112 this->SetNumberOfParticlesPerEtaBinRP(etaBinRPNoOfParticles);
1114 this->SetDiffFlowPtPOIGenFunRe(diffFlowPtPOIGenFunRe);
1115 this->SetDiffFlowPtPOIGenFunIm(diffFlowPtPOIGenFunIm);
1116 this->SetNumberOfParticlesPerPtBinPOI(ptBinPOINoOfParticles);
1118 this->SetDiffFlowEtaPOIGenFunRe(diffFlowEtaPOIGenFunRe);
1119 this->SetDiffFlowEtaPOIGenFunIm(diffFlowEtaPOIGenFunIm);
1120 this->SetNumberOfParticlesPerEtaBinPOI(etaBinPOINoOfParticles);
1122 this->SetAverageMultiplicity(avMult);
1124 this->SetAverageMultiplicity4(avMult4); //only for other system of Eq.
1125 this->SetAverageMultiplicity6(avMult6); //only for other system of Eq.
1126 this->SetAverageMultiplicity8(avMult8); //only for other system of Eq.
1127 this->SetAverageMultiplicity16(avMult16); //only for other system of Eq.
1129 this->SetQVectorComponents(qVectorComponents);
1131 this->SetAverageOfSquaredWeight(averageOfSquaredWeight);
1135 //================================================================================================================
1137 void AliFlowAnalysisWithCumulants::Finish()
1139 //calculate the final results
1140 //AliCumulantsFunctions finalResults(fIntFlowGenFun,NULL,NULL, fIntFlowResults,fDiffFlowResults2,fDiffFlowResults4,fDiffFlowResults6,fDiffFlowResults8,fAvMultIntFlow,fQVectorComponents, fQDist,fDiffFlowGenFunRe0,fDiffFlowGenFunRe1,fDiffFlowGenFunRe2, fDiffFlowGenFunRe3,fDiffFlowGenFunRe4,fDiffFlowGenFunRe5,fDiffFlowGenFunRe6,fDiffFlowGenFunRe7,fDiffFlowGenFunIm0,fDiffFlowGenFunIm1, fDiffFlowGenFunIm2,fDiffFlowGenFunIm3,fDiffFlowGenFunIm4,fDiffFlowGenFunIm5,fDiffFlowGenFunIm6,fDiffFlowGenFunIm7);
1142 AliCumulantsFunctions finalResults(fIntFlowGenFun,fIntFlowGenFun4,fIntFlowGenFun6,fIntFlowGenFun8,fIntFlowGenFun16,fAvMultIntFlow4GFC, fAvMultIntFlow6GFC,fAvMultIntFlow8GFC,fAvMultIntFlow16GFC,fDiffFlowPtRPGenFunRe,fDiffFlowPtRPGenFunIm,fPtBinRPNoOfParticles, fDiffFlowEtaRPGenFunRe,fDiffFlowEtaRPGenFunIm,fEtaBinRPNoOfParticles,fDiffFlowPtPOIGenFunRe,fDiffFlowPtPOIGenFunIm,fPtBinPOINoOfParticles, fDiffFlowEtaPOIGenFunRe,fDiffFlowEtaPOIGenFunIm,fEtaBinPOINoOfParticles,fIntFlowResultsGFC,fDiffFlowResults2ndOrderGFC,fDiffFlowResults4thOrderGFC,fDiffFlowResults6thOrderGFC,fDiffFlowResults8thOrderGFC, fAvMultIntFlowGFC,fQVectorComponentsGFC,fAverageOfSquaredWeight,fCommonHistsResults2nd, fCommonHistsResults4th,fCommonHistsResults6th,fCommonHistsResults8th,fCommonHists);
1144 finalResults.Calculate();
1147 //================================================================================================================
1149 void AliFlowAnalysisWithCumulants::WriteHistograms(TString* outputFileName)
1151 //store the final results in output .root file
1152 TFile *output = new TFile(outputFileName->Data(),"RECREATE");
1153 //output->WriteObject(fHistList, "cobjGFC","SingleKey");
1154 fHistList->SetName("cobjGFC");
1155 fHistList->Write(fHistList->GetName(), TObject::kSingleKey);
1159 //================================================================================================================
1161 //================================================================================================================
1163 void AliFlowAnalysisWithCumulants::WriteHistograms(TString outputFileName)
1165 //store the final results in output .root file
1166 TFile *output = new TFile(outputFileName.Data(),"RECREATE");
1167 //output->WriteObject(fHistList, "cobjGFC","SingleKey");
1168 fHistList->SetName("cobjGFC");
1169 fHistList->Write(fHistList->GetName(), TObject::kSingleKey);
1173 //================================================================================================================