]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWG2/FLOW/AliFlowCommon/AliFlowAnalysisWithCumulants.cxx
corrections for single particle distributions in Q cumulants{2}
[u/mrichter/AliRoot.git] / PWG2 / FLOW / AliFlowCommon / 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"
1315fe58 41#include "AliCumulantsFunctions.h"
f1d945a1 42
43class TH1;
44class TGraph;
45class TPave;
46class TLatex;
47class TMarker;
48class TRandom3;
49class TObjArray;
50class TList;
51class TCanvas;
52class TSystem;
53class TROOT;
f1d945a1 54class AliFlowVector;
55class TVector;
56
2188af53 57//================================================================================================================
f1d945a1 58
59ClassImp(AliFlowAnalysisWithCumulants)
60
f1d945a1 61AliFlowAnalysisWithCumulants::AliFlowAnalysisWithCumulants():
2188af53 62 fTrack(NULL),
63 fHistList(NULL),
e5e75b58 64 fWeightsList(NULL),
2188af53 65 fR0(0),
66 fPtMax(0),
67 fPtMin(0),
813a4157 68 fBinWidthPt(0),
69 fgknBinsPt(0),
70 fEtaMax(0),
71 fEtaMin(0),
72 fBinWidthEta(0),
73 fgknBinsEta(0),
2188af53 74 fAvQx(0),
75 fAvQy(0),
76 fAvQ2x(0),
77 fAvQ2y(0),
52021ae2 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),
2188af53 89 fIntFlowGenFun(NULL),
cb308e83 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.)
813a4157 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),
52021ae2 110 /*
2188af53 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),
52021ae2 127 */
b6cd16a9 128 fCommonHists(NULL),
e5e75b58 129 fOtherEquations(kFALSE),
130 fUsePhiWeights(kFALSE),
131 fUsePtWeights(kFALSE),
9dd53ff2 132 fUseEtaWeights(kFALSE),
133 fAverageOfSquaredWeight(NULL)
2188af53 134{
135 //constructor
52021ae2 136 fHistList = new TList();
e5e75b58 137 fWeightsList = new TList();
138 fWeightsList->SetName("Weights");
2188af53 139 fR0=AliFlowCumuConstants::fgR0;
813a4157 140 //Pt:
2188af53 141 fPtMax=AliFlowCommonConstants::GetPtMax();
142 fPtMin=AliFlowCommonConstants::GetPtMin();
813a4157 143 fgknBinsPt=AliFlowCommonConstants::GetNbinsPt();
144 if(fgknBinsPt)
145 {
146 fBinWidthPt=(fPtMax-fPtMin)/fgknBinsPt;
147 }
148 //Eta:
149 fEtaMax=AliFlowCommonConstants::GetEtaMax();
150 fEtaMin=AliFlowCommonConstants::GetEtaMin();
151 fgknBinsEta=AliFlowCommonConstants::GetNbinsEta();
152 if(fgknBinsEta)
52021ae2 153 {
813a4157 154 fBinWidthEta=(fEtaMax-fEtaMin)/fgknBinsEta;
52021ae2 155 }
813a4157 156
157 fOtherEquations=AliFlowCumuConstants::fgOtherEquations;
2188af53 158}
f1d945a1 159
2188af53 160AliFlowAnalysisWithCumulants::~AliFlowAnalysisWithCumulants()
161{
162 //desctructor
163 delete fHistList;
e5e75b58 164 delete fWeightsList;
f55e2cac 165}
729ec982 166
2188af53 167//================================================================================================================
168
e5e75b58 169void AliFlowAnalysisWithCumulants::Init()
2188af53 170{
171 //various output histograms
aaebd73d 172
52021ae2 173 //average multiplicity
9dd53ff2 174 fAvMultIntFlowGFC = new TProfile("fAvMultIntFlowGFC","Average Weighted Multiplicity",1,0,1,"s");
52021ae2 175 fAvMultIntFlowGFC->SetXTitle("");
176 fAvMultIntFlowGFC->SetYTitle("");
177 fAvMultIntFlowGFC->SetLabelSize(0.06);
178 fAvMultIntFlowGFC->SetMarkerStyle(25);
179 fAvMultIntFlowGFC->SetLabelOffset(0.01);
9dd53ff2 180 (fAvMultIntFlowGFC->GetXaxis())->SetBinLabel(1,"Average Weighted Multiplicity");
52021ae2 181 fHistList->Add(fAvMultIntFlowGFC);
aaebd73d 182
52021ae2 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);
aaebd73d 194
2188af53 195 //final results for integrated flow (v_n{2}, v_n{4},..., v_n{16}) from cumulants (by default n=2)
b6cd16a9 196 fIntFlowResultsGFC = new TH1D("fIntFlowResultsGFC","Integrated Flow From Cumulants (Generating Function)",4,0,4);
52021ae2 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}");
52021ae2 206 fHistList->Add(fIntFlowResultsGFC);
aaebd73d 207
2188af53 208 //final results for differential flow v_p/n{2} (by default p=n=2)
813a4157 209 fDiffFlowResults2ndOrderGFC = new TH1D("fDiffFlowResults2ndOrderGFC","v'_2/2{2}",fgknBinsPt,fPtMin,fPtMax);
52021ae2 210 fDiffFlowResults2ndOrderGFC->SetXTitle("pt [GeV]");
211 fDiffFlowResults2ndOrderGFC->SetYTitle("");
212 fHistList->Add(fDiffFlowResults2ndOrderGFC);
2188af53 213
214 //final results for differential flow v_p/n{4} (by default p=n=2)
813a4157 215 fDiffFlowResults4thOrderGFC = new TH1D("fDiffFlowResults4thOrderGFC","v'_2/2{4}",fgknBinsPt,fPtMin,fPtMax);
52021ae2 216 fDiffFlowResults4thOrderGFC->SetXTitle("pt [GeV]");
217 fDiffFlowResults4thOrderGFC->SetYTitle("");
218 fHistList->Add(fDiffFlowResults4thOrderGFC);
aaebd73d 219
2188af53 220 //final results for differential flow v_p/n{6} (by default p=n=2)
813a4157 221 fDiffFlowResults6thOrderGFC = new TH1D("fDiffFlowResults6thOrderGFC","v'_2/2{6}",fgknBinsPt,fPtMin,fPtMax);
52021ae2 222 fDiffFlowResults6thOrderGFC->SetXTitle("pt [GeV]");
223 fDiffFlowResults6thOrderGFC->SetYTitle("");
224 fHistList->Add(fDiffFlowResults6thOrderGFC);
aaebd73d 225
2188af53 226 //final results for differential flow v_p/n{8} (by default p=n=2)
813a4157 227 fDiffFlowResults8thOrderGFC = new TH1D("fDiffFlowResults8thOrderGFC","v'_2/2{8}",fgknBinsPt,fPtMin,fPtMax);
52021ae2 228 fDiffFlowResults8thOrderGFC->SetXTitle("pt [GeV]");
229 fDiffFlowResults8thOrderGFC->SetYTitle("");
230 fHistList->Add(fDiffFlowResults8thOrderGFC);
aaebd73d 231
2188af53 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);
b6cd16a9 237
238 if(fOtherEquations)
239 {
cb308e83 240 //avarage of the generating function for integrated flow <G[p][q]> (only for other system of Eq. - up to 4th order)
b6cd16a9 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);
245
cb308e83 246 //avarage of the generating function for integrated flow <G[p][q]> (only for other system of Eq. - up to 6th order)
b6cd16a9 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);
251
cb308e83 252 //avarage of the generating function for integrated flow <G[p][q]> (only for other system of Eq. - up to 8th order)
b6cd16a9 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);
257
cb308e83 258 //avarage of the generating function for integrated flow <G[p][q]> (only for other system of Eq. - up to 16th order)
b6cd16a9 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);
cb308e83 263
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);
273
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);
283
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);
293
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);
b6cd16a9 303 }
aaebd73d 304
813a4157 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);
313
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);
322
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);
328
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);
337
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);
346
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);
352
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);
361
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);
2188af53 370
52021ae2 371 //number of particles per pt bin
813a4157 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);
376
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);
385
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);
394
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);
52021ae2 400
401 /*
2188af53 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);
406
b6cd16a9 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);
2188af53 408 fDiffFlowGenFunIm0->SetXTitle("b");
409 fDiffFlowGenFunIm0->SetYTitle("q");
410 fHistList->Add(fDiffFlowGenFunIm0);
411
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);
416
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);
421
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);
426
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);
431
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);
436
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);
441
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);
446
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);
451
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);
456
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);
461
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);
466
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);
471
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);
476
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);
52021ae2 481 */
2188af53 482
483 //common control histograms
52021ae2 484 fCommonHists = new AliFlowCommonHist("AliFlowCommonHistGFC");
485 fHistList->Add(fCommonHists);
486
487 //common histograms for final results (2nd order)
488 fCommonHistsResults2nd = new AliFlowCommonHistResults("AliFlowCommonHistResults2ndOrderGFC");
489 fHistList->Add(fCommonHistsResults2nd);
490
491 //common histograms for final results (4th order)
492 fCommonHistsResults4th = new AliFlowCommonHistResults("AliFlowCommonHistResults4thOrderGFC");
493 fHistList->Add(fCommonHistsResults4th);
494
495 //common histograms for final results (6th order)
496 fCommonHistsResults6th = new AliFlowCommonHistResults("AliFlowCommonHistResults6thOrderGFC");
497 fHistList->Add(fCommonHistsResults6th);
498
499 //common histograms for final results (8th order)
500 fCommonHistsResults8th = new AliFlowCommonHistResults("AliFlowCommonHistResults8thOrderGFC");
501 fHistList->Add(fCommonHistsResults8th);
e5e75b58 502
9dd53ff2 503 //<w^2>
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);
510
e5e75b58 511 // add list fWeightsList with weights to the main list
512 fHistList->Add(fWeightsList);
513}//end of Init()
2188af53 514
515//================================================================================================================
516
517void AliFlowAnalysisWithCumulants::Make(AliFlowEventSimple* anEvent)
518{
cb308e83 519 //running over data:
520 Int_t nPrim = anEvent->NumberOfTracks(); //total multiplicity
521
b7cb54d5 522 Int_t nEventNSelTracksRP = anEvent->GetEventNSelTracksRP(); //selected multiplicity (particles used for int. flow)
e5e75b58 523
9dd53ff2 524 Int_t n = 2; // int flow harmonic (to be improved)
525
e5e75b58 526 //---------------------------------------------------------------------------------------------------------
527 // weights:
528 Bool_t useWeights = fUsePhiWeights||fUsePtWeights||fUseEtaWeights;
529
e5e75b58 530 TH1F *phiWeights = NULL; // histogram with phi weights
531 TH1D *ptWeights = NULL; // histogram with pt weights
532 TH1D *etaWeights = NULL; // histogram with eta weights
533
2f5e6dea 534 Double_t wPhi = 1.; // phi weight
535 Double_t wPt = 1.; // pt weight
536 Double_t wEta = 1.; // eta weight
e5e75b58 537
538 if(useWeights)
539 {
540 if(!fWeightsList)
541 {
17100608 542 cout<<" WARNING: fWeightsList is NULL pointer in GFC::Make() !!!!"<<endl;
e5e75b58 543 exit(0);
544 }
545 if(fUsePhiWeights)
546 {
547 phiWeights = dynamic_cast<TH1F *>(fWeightsList->FindObject("phi_weights"));
548 if(!phiWeights)
549 {
17100608 550 cout<<" WARNING: couldn't access the histogram with phi weights in GFC::Make() !!!!"<<endl;
e5e75b58 551 exit(0);
552 }
553 }
554 if(fUsePtWeights)
555 {
556 ptWeights = dynamic_cast<TH1D *>(fWeightsList->FindObject("pt_weights"));
557 if(!ptWeights)
558 {
17100608 559 cout<<" WARNING: couldn't access the histogram with pt weights in GFC::Make() !!!!"<<endl;
e5e75b58 560 exit(0);
561 }
562 }
563 if(fUseEtaWeights)
564 {
565 etaWeights = dynamic_cast<TH1D *>(fWeightsList->FindObject("eta_weights"));
566 if(!etaWeights)
567 {
17100608 568 cout<<" WARNING: couldn't access the histogram with eta weights in GFC::Make() !!!!"<<endl;
e5e75b58 569 exit(0);
570 }
571 }
572 }
573 //---------------------------------------------------------------------------------------------------------
aaebd73d 574
b7cb54d5 575 if(nEventNSelTracksRP>9) //generating function formalism applied here make sense only for selected multiplicity >= 10
cb308e83 576 {
2188af53 577 //fill the common control histograms
578 fCommonHists->FillControlHistograms(anEvent);
f1d945a1 579
2188af53 580 //initializing the generating function G[p][q] for integrated flow
5270f185 581 Double_t genfunG[fgkPmax][fgkQmax];
b6cd16a9 582
583 for(Int_t p=0;p<fgkPmax;p++)
17100608 584 {
585 for(Int_t q=0;q<fgkQmax;q++)
b6cd16a9 586 {
17100608 587 genfunG[p][q]=1.;
588 }
589 }
5b04fe11 590
b7cb54d5 591 Int_t nSelTracksRP = 0; //cross-checking the selected multiplicity
2f5e6dea 592
593 Double_t dPhi = 0.;
594 Double_t dPt = 0.;
595 Double_t dEta = 0.;
596 Int_t nBinsPhi = 0;
b6cd16a9 597
598 for(Int_t i=0;i<nPrim;i++)
599 {
2188af53 600 fTrack=anEvent->GetTrack(i);
b7cb54d5 601 if(fTrack && fTrack->InRPSelection())
b6cd16a9 602 {
b7cb54d5 603 nSelTracksRP++;
2f5e6dea 604 // get azimuthal angle, momentum and pseudorapidity of a particle:
605 dPhi = fTrack->Phi();
606 dPt = fTrack->Pt();
607 dEta = fTrack->Eta();
608 // phi weights:
609 if(fUsePhiWeights)
610 {
611 nBinsPhi = phiWeights->GetNbinsX();
612 if(nBinsPhi)
613 {
614 wPhi = phiWeights->GetBinContent(1+(Int_t)(TMath::Floor(dPhi*nBinsPhi/TMath::TwoPi())));
615 }
616 }
617 // pt weights:
618 if(fUsePtWeights)
619 {
620 if(fBinWidthPt)
621 {
622 wPt = ptWeights->GetBinContent(1+(Int_t)(TMath::Floor((dPt-fPtMin)/fBinWidthPt)));
623 }
624 }
625 // eta weights:
626 if(fUseEtaWeights)
627 {
628 if(fBinWidthEta)
629 {
630 wEta=etaWeights->GetBinContent(1+(Int_t)(TMath::Floor((dEta-fEtaMin)/fBinWidthEta)));
631 }
632 }
633 // evaluate the generating function:
b6cd16a9 634 for(Int_t p=0;p<fgkPmax;p++)
635 {
636 for(Int_t q=0;q<fgkQmax;q++)
637 {
b7cb54d5 638 genfunG[p][q]*=(1.+wPhi*wPt*wEta*(2.*fR0*sqrt(p+1.)/nEventNSelTracksRP)*cos(fgkFlow*dPhi-2.*q*TMath::Pi()/fgkQmax));
f1d945a1 639 }
9dd53ff2 640 }
641 // calculate <w^2>
642 fAverageOfSquaredWeight->Fill(0.,pow(wPhi*wPt*wEta,2.),1);
17100608 643 } // end of if(fTrack && fTrack->InRPSelection())
2f5e6dea 644 } // end of for(Int_t i=0;i<nPrim;i++)
b6cd16a9 645
2188af53 646 //storing the value of G[p][q] in 2D profile in order to get automatically the avarage <G[p][q]>
b6cd16a9 647 for(Int_t p=0;p<fgkPmax;p++)
648 {
649 for(Int_t q=0;q<fgkQmax;q++)
650 {
5270f185 651 fIntFlowGenFun->Fill((Double_t)p,(Double_t)q,genfunG[p][q],1);
b6cd16a9 652 }
653 }
2188af53 654
655 //storing the selected multiplicity (if fAvMultIntFlow is not filled here then you had wrongly selected the particles used for integrated flow)
b7cb54d5 656 if(nSelTracksRP==nEventNSelTracksRP)
2188af53 657 {
b7cb54d5 658 fAvMultIntFlowGFC->Fill(0.,nSelTracksRP,1);
17100608 659 } else
660 {
661 cout<<"WARNING: nSelTracksRP != nEventNSelTracksRP in GFC::Make(). Something is wrong with RP flagging !!!!"<<endl;
662 }
2188af53 663
9dd53ff2 664 // calculating Q-vector of event (needed for errors)
2188af53 665 AliFlowVector fQVector;
666 fQVector.Set(0.,0.);
667 fQVector.SetMult(0);
9dd53ff2 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
6d4fa5d3 673
813a4157 674 //3D profiles for differential flow in pt and eta
2188af53 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
b6cd16a9 677 //remark 1: note that bellow G[p][q] is needed, the value of generating function for integrated flow for the CURRENT event
813a4157 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])>
b6cd16a9 679 for(Int_t i=0;i<nPrim;i++)
680 {
2188af53 681 fTrack=anEvent->GetTrack(i);
b6cd16a9 682 if(fTrack)
683 {
b7cb54d5 684 if(fTrack->InRPSelection() && fTrack->InPOISelection())
b6cd16a9 685 {
813a4157 686 fPtBinPOINoOfParticles->Fill(fTrack->Pt(),fTrack->Pt(),1.);
687 fEtaBinPOINoOfParticles->Fill(fTrack->Eta(),fTrack->Eta(),1.);
b6cd16a9 688 for(Int_t p=0;p<fgkPmax;p++)
689 {
690 for(Int_t q=0;q<fgkQmax;q++)
691 {
813a4157 692 //real part (Pt)
b7cb54d5 693 fDiffFlowPtPOIGenFunRe->Fill(fTrack->Pt()/fBinWidthPt,(Double_t)p,(Double_t)q,genfunG[p][q]*cos(fgkMltpl*fgkFlow*fTrack->Phi())/(1.+(2.*fR0*sqrt(p+1.)/nSelTracksRP)*cos(fgkFlow*fTrack->Phi()-2.*q*TMath::Pi()/fgkQmax)),1.);
813a4157 694 //imaginary part (Pt)
b7cb54d5 695 fDiffFlowPtPOIGenFunIm->Fill(fTrack->Pt()/fBinWidthPt,(Double_t)p,(Double_t)q,genfunG[p][q]*sin(fgkMltpl*fgkFlow*fTrack->Phi())/(1.+(2.*fR0*sqrt(p+1.)/nSelTracksRP)*cos(fgkFlow*fTrack->Phi()-2.*q*TMath::Pi()/fgkQmax)),1.);
813a4157 696 //real part (Eta)
b7cb54d5 697 fDiffFlowEtaPOIGenFunRe->Fill(fTrack->Eta()/fBinWidthEta,(Double_t)p,(Double_t)q,genfunG[p][q]*cos(fgkMltpl*fgkFlow*fTrack->Phi())/(1.+(2.*fR0*sqrt(p+1.)/nSelTracksRP)*cos(fgkFlow*fTrack->Phi()-2.*q*TMath::Pi()/fgkQmax)),1.);
813a4157 698 //imaginary part (Eta)
b7cb54d5 699 fDiffFlowEtaPOIGenFunIm->Fill(fTrack->Eta()/fBinWidthEta,(Double_t)p,(Double_t)q,genfunG[p][q]*sin(fgkMltpl*fgkFlow*fTrack->Phi())/(1.+(2.*fR0*sqrt(p+1.)/nSelTracksRP)*cos(fgkFlow*fTrack->Phi()-2.*q*TMath::Pi()/fgkQmax)),1.);
b6cd16a9 700 }
f1d945a1 701 }
b6cd16a9 702 }
b7cb54d5 703 else if(fTrack->InPOISelection() && !(fTrack->InRPSelection()))
b6cd16a9 704 {
813a4157 705 fPtBinPOINoOfParticles->Fill(fTrack->Pt(),fTrack->Pt(),1.);
706 fEtaBinPOINoOfParticles->Fill(fTrack->Eta(),fTrack->Eta(),1.);
b6cd16a9 707 for(Int_t p=0;p<fgkPmax;p++)
708 {
709 for(Int_t q=0;q<fgkQmax;q++)
710 {
813a4157 711 //real part (Pt)
5270f185 712 fDiffFlowPtPOIGenFunRe->Fill(fTrack->Pt()/fBinWidthPt,(Double_t)p,(Double_t)q,genfunG[p][q]*cos(fgkMltpl*fgkFlow*fTrack->Phi()),1.);
813a4157 713 //imaginary part (Pt)
5270f185 714 fDiffFlowPtPOIGenFunIm->Fill(fTrack->Pt()/fBinWidthPt,(Double_t)p,(Double_t)q,genfunG[p][q]*sin(fgkMltpl*fgkFlow*fTrack->Phi()),1.);
813a4157 715 //real part (Eta)
5270f185 716 fDiffFlowEtaPOIGenFunRe->Fill(fTrack->Eta()/fBinWidthEta,(Double_t)p,(Double_t)q,genfunG[p][q]*cos(fgkMltpl*fgkFlow*fTrack->Phi()),1.);
813a4157 717 //imaginary part (Eta)
5270f185 718 fDiffFlowEtaPOIGenFunIm->Fill(fTrack->Eta()/fBinWidthEta,(Double_t)p,(Double_t)q,genfunG[p][q]*sin(fgkMltpl*fgkFlow*fTrack->Phi()),1.);
b6cd16a9 719 }
720 }
813a4157 721 }
722 //RP:
b7cb54d5 723 if(fTrack->InRPSelection())
813a4157 724 {
725 fPtBinRPNoOfParticles->Fill(fTrack->Pt(),fTrack->Pt(),1.);
726 fEtaBinRPNoOfParticles->Fill(fTrack->Eta(),fTrack->Eta(),1.);
727 for(Int_t p=0;p<fgkPmax;p++)
728 {
729 for(Int_t q=0;q<fgkQmax;q++)
730 {
731 //real part (Pt)
b7cb54d5 732 fDiffFlowPtRPGenFunRe->Fill(fTrack->Pt()/fBinWidthPt,(Double_t)p,(Double_t)q,genfunG[p][q]*cos(fgkMltpl*fgkFlow*fTrack->Phi())/(1.+(2.*fR0*sqrt(p+1.)/nSelTracksRP)*cos(fgkFlow*fTrack->Phi()-2.*q*TMath::Pi()/fgkQmax)),1.);
813a4157 733 //imaginary part (Pt)
b7cb54d5 734 fDiffFlowPtRPGenFunIm->Fill(fTrack->Pt()/fBinWidthPt,(Double_t)p,(Double_t)q,genfunG[p][q]*sin(fgkMltpl*fgkFlow*fTrack->Phi())/(1.+(2.*fR0*sqrt(p+1.)/nSelTracksRP)*cos(fgkFlow*fTrack->Phi()-2.*q*TMath::Pi()/fgkQmax)),1.);
813a4157 735 //real part (Eta)
b7cb54d5 736 fDiffFlowEtaRPGenFunRe->Fill(fTrack->Eta()/fBinWidthEta,(Double_t)p,(Double_t)q,genfunG[p][q]*cos(fgkMltpl*fgkFlow*fTrack->Phi())/(1.+(2.*fR0*sqrt(p+1.)/nSelTracksRP)*cos(fgkFlow*fTrack->Phi()-2.*q*TMath::Pi()/fgkQmax)),1.);
813a4157 737 //imaginary part (Eta)
b7cb54d5 738 fDiffFlowEtaRPGenFunIm->Fill(fTrack->Eta()/fBinWidthEta,(Double_t)p,(Double_t)q,genfunG[p][q]*sin(fgkMltpl*fgkFlow*fTrack->Phi())/(1.+(2.*fR0*sqrt(p+1.)/nSelTracksRP)*cos(fgkFlow*fTrack->Phi()-2.*q*TMath::Pi()/fgkQmax)),1.);
813a4157 739 }
740 }
b7cb54d5 741 }//end of if(fTrack->InRPSelection())
b6cd16a9 742 }//end of if(fTrack)
2188af53 743 }//ending the second loop over data
2188af53 744
b6cd16a9 745
746
52021ae2 747 /*
2188af53 748 //sixteen 2D profiles for differential flow
749 for(Int_t i=0;i<nPrim;i++){
750 fTrack=anEvent->GetTrack(i);
b7cb54d5 751 if (fTrack && fTrack->InPOISelection()){
2188af53 752 //for(Int_t p=0;p<fgkPmax;p++){
753 for(Int_t q=0;q<fgkQmax;q++){
754 //real part
b7cb54d5 755 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.);
2188af53 756 //imaginary part
b7cb54d5 757 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.);
2188af53 758 //-----------------------------------------------------------------------
759 //real part
b7cb54d5 760 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.);
2188af53 761 //imaginary part
b7cb54d5 762 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.);
2188af53 763 //-----------------------------------------------------------------------
764 //real part
b7cb54d5 765 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.);
2188af53 766 //imaginary part
b7cb54d5 767 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.);
2188af53 768 //-----------------------------------------------------------------------
769 //real part
b7cb54d5 770 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.);
2188af53 771 //imaginary part
b7cb54d5 772 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.);
2188af53 773 //-----------------------------------------------------------------------
774 //real part
b7cb54d5 775 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.);
2188af53 776 //imaginary part
b7cb54d5 777 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.);
2188af53 778 //-----------------------------------------------------------------------
779 //real part
b7cb54d5 780 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.);
2188af53 781 //imaginary part
b7cb54d5 782 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.);
2188af53 783 //-----------------------------------------------------------------------
784 //real part
b7cb54d5 785 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.);
2188af53 786 //imaginary part
b7cb54d5 787 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.);
2188af53 788 //-----------------------------------------------------------------------
789 //real part
b7cb54d5 790 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.);
2188af53 791 //imaginary part
b7cb54d5 792 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.);
2188af53 793 }
794 //}
795 }
796 }//ending the second loop over data
52021ae2 797 */
2188af53 798
b7cb54d5 799 }//end of if(nEventNSelTracksRP>9)
b6cd16a9 800
cb308e83 801
b6cd16a9 802
803
cb308e83 804
b6cd16a9 805
cb308e83 806
807
808
809
810
811
812
813 //off the record: numerical equations for cumulants solved up to different highest order
b6cd16a9 814 if(fOtherEquations)
815 {
cb308e83 816 //running over data
817 Int_t nPrimOE = anEvent->NumberOfTracks();//total multiplicity
b6cd16a9 818
b7cb54d5 819 Int_t nEventNSelTracksRPOE = anEvent->GetEventNSelTracksRP();
b6cd16a9 820
5270f185 821 Double_t genfunG4[fgkPmax4][fgkQmax4];
822 Double_t genfunG6[fgkPmax6][fgkQmax6];
823 Double_t genfunG8[fgkPmax8][fgkQmax8];
824 Double_t genfunG16[fgkPmax16][fgkQmax16];
b6cd16a9 825 for(Int_t p=0;p<fgkPmax16;p++)
826 {
827 for(Int_t q=0;q<fgkQmax16;q++)
828 {
5270f185 829 genfunG16[p][q]=1.;
b6cd16a9 830 if(p<fgkPmax8 && q<fgkQmax8)
831 {
5270f185 832 genfunG8[p][q]=1.;
b6cd16a9 833 if(p<fgkPmax6 && q<fgkQmax6)
834 {
5270f185 835 genfunG6[p][q]=1.;
b6cd16a9 836 if(p<fgkPmax4 && q<fgkQmax4)
837 {
5270f185 838 genfunG4[p][q]=1.;
b6cd16a9 839 }
840 }
841 }
842 }
843 }
cb308e83 844
845 //multiplicities:
b7cb54d5 846 if(nEventNSelTracksRPOE>15) fAvMultIntFlow16GFC->Fill(0.,nEventNSelTracksRPOE,1);
847 if(nEventNSelTracksRPOE>7) fAvMultIntFlow8GFC->Fill(0.,nEventNSelTracksRPOE,1);
848 if(nEventNSelTracksRPOE>5) fAvMultIntFlow6GFC->Fill(0.,nEventNSelTracksRPOE,1);
849 if(nEventNSelTracksRPOE>3) fAvMultIntFlow4GFC->Fill(0.,nEventNSelTracksRPOE,1);
b6cd16a9 850
851 //first loop over data: evaluating the generating function G[p][q] for integrated flow
cb308e83 852 for(Int_t i=0;i<nPrimOE;i++)
b6cd16a9 853 {
854 fTrack=anEvent->GetTrack(i);
b7cb54d5 855 if(fTrack && fTrack->InRPSelection())
b6cd16a9 856 {
857 for(Int_t p=0;p<fgkPmax16;p++)
858 {
859 for(Int_t q=0;q<fgkQmax16;q++)
860 {
b7cb54d5 861 if(nEventNSelTracksRPOE>15)
cb308e83 862 {
b7cb54d5 863 genfunG16[p][q]*=(1.+(2.*fR0*sqrt(p+1.)/nEventNSelTracksRPOE)*cos(fgkFlow*fTrack->Phi()-2.*q*TMath::Pi()/fgkQmax16));
cb308e83 864 }
b6cd16a9 865 if(p<fgkPmax8 && q<fgkQmax8)
866 {
b7cb54d5 867 if(nEventNSelTracksRPOE>7)
cb308e83 868 {
b7cb54d5 869 genfunG8[p][q]*=(1.+(2.*fR0*sqrt(p+1.)/nEventNSelTracksRPOE)*cos(fgkFlow*fTrack->Phi()-2.*q*TMath::Pi()/fgkQmax8));
cb308e83 870 }
b6cd16a9 871 if(p<fgkPmax6 && q<fgkQmax6)
872 {
b7cb54d5 873 if(nEventNSelTracksRPOE>5)
cb308e83 874 {
b7cb54d5 875 genfunG6[p][q]*=(1.+(2.*fR0*sqrt(p+1.)/nEventNSelTracksRPOE)*cos(fgkFlow*fTrack->Phi()-2.*q*TMath::Pi()/fgkQmax6));
cb308e83 876 }
b6cd16a9 877 if(p<fgkPmax4 && q<fgkQmax4)
878 {
b7cb54d5 879 if(nEventNSelTracksRPOE>3)
cb308e83 880 {
b7cb54d5 881 genfunG4[p][q]*=(1.+(2.*fR0*sqrt(p+1.)/nEventNSelTracksRPOE)*cos(fgkFlow*fTrack->Phi()-2.*q*TMath::Pi()/fgkQmax4));
cb308e83 882 }
b6cd16a9 883 }
884 }
885 }
886 }
887 }
b7cb54d5 888 }//end of if(fTrack && fTrack->InRPSelection())
b6cd16a9 889 }//ending the loop over data
890
891 //storing the value of G[p][q] in 2D profile in order to get automatically the avarage <G[p][q]>
892 for(Int_t p=0;p<fgkPmax16;p++)
893 {
894 for(Int_t q=0;q<fgkQmax16;q++)
895 {
b7cb54d5 896 if(nEventNSelTracksRPOE>15) fIntFlowGenFun16->Fill((Double_t)p,(Double_t)q,genfunG16[p][q],1);
b6cd16a9 897 if(p<fgkPmax8 && q<fgkQmax8)
898 {
b7cb54d5 899 if(nEventNSelTracksRPOE>7) fIntFlowGenFun8->Fill((Double_t)p,(Double_t)q,genfunG8[p][q],1);
b6cd16a9 900 if(p<fgkPmax6 && q<fgkQmax6)
901 {
b7cb54d5 902 if(nEventNSelTracksRPOE>5) fIntFlowGenFun6->Fill((Double_t)p,(Double_t)q,genfunG6[p][q],1);
b6cd16a9 903 if(p<fgkPmax4 && q<fgkQmax4)
904 {
b7cb54d5 905 if(nEventNSelTracksRPOE>3) fIntFlowGenFun4->Fill((Double_t)p,(Double_t)q,genfunG4[p][q],1);
b6cd16a9 906 }
907 }
908 }
909 }
910 }
911}//end of if(fOtherEquations)
cb308e83 912
aaebd73d 913}//end of Make()
f1d945a1 914
2188af53 915//================================================================================================================
f1d945a1 916
fd46c3dd 917void AliFlowAnalysisWithCumulants::GetOutputHistograms(TList *outputListHistos)
918{
919 // get the pointers to all output histograms before calling Finish()
920 if (outputListHistos)
921 {
922 //Get the common histograms from the output list
923 //histograms to store the final results
924 TH1D *intFlowResults = dynamic_cast<TH1D*>(outputListHistos->FindObject("fIntFlowResultsGFC"));
925 TH1D *diffFlowResults2 = dynamic_cast<TH1D*>(outputListHistos->FindObject("fDiffFlowResults2ndOrderGFC"));
926 TH1D *diffFlowResults4 = dynamic_cast<TH1D*>(outputListHistos->FindObject("fDiffFlowResults4thOrderGFC"));
927 TH1D *diffFlowResults6 = dynamic_cast<TH1D*>(outputListHistos->FindObject("fDiffFlowResults6thOrderGFC"));
928 TH1D *diffFlowResults8 = dynamic_cast<TH1D*>(outputListHistos->FindObject("fDiffFlowResults8thOrderGFC"));
929
930 //common histograms to store the final results the integrated and differential flow
931 AliFlowCommonHistResults *commonHistRes2nd = dynamic_cast<AliFlowCommonHistResults*>(outputListHistos->FindObject("AliFlowCommonHistResults2ndOrderGFC"));
932 AliFlowCommonHistResults *commonHistRes4th = dynamic_cast<AliFlowCommonHistResults*>(outputListHistos->FindObject("AliFlowCommonHistResults4thOrderGFC"));
933 AliFlowCommonHistResults *commonHistRes6th = dynamic_cast<AliFlowCommonHistResults*>(outputListHistos->FindObject("AliFlowCommonHistResults6thOrderGFC"));
934 AliFlowCommonHistResults *commonHistRes8th = dynamic_cast<AliFlowCommonHistResults*>(outputListHistos->FindObject("AliFlowCommonHistResults8thOrderGFC"));
935
936 //common control histogram
937 AliFlowCommonHist *commonHists = dynamic_cast<AliFlowCommonHist*>(outputListHistos->FindObject("AliFlowCommonHistGFC"));
938
939 //profiles with average values of generating functions for int. and diff. flow
940 TProfile2D *intFlowGenFun = dynamic_cast<TProfile2D*>(outputListHistos->FindObject("fIntFlowGenFun"));
941
942 TProfile2D *intFlowGenFun4 = dynamic_cast<TProfile2D*>(outputListHistos->FindObject("fIntFlowGenFun4")); //only for other system of Eq.
943 TProfile2D *intFlowGenFun6 = dynamic_cast<TProfile2D*>(outputListHistos->FindObject("fIntFlowGenFun6")); //only for other system of Eq.
944 TProfile2D *intFlowGenFun8 = dynamic_cast<TProfile2D*>(outputListHistos->FindObject("fIntFlowGenFun8")); //only for other system of Eq.
945 TProfile2D *intFlowGenFun16 = dynamic_cast<TProfile2D*>(outputListHistos->FindObject("fIntFlowGenFun16")); //only for other system of Eq.
946
947 //RP, Pt:
948 TProfile3D *diffFlowPtRPGenFunRe = dynamic_cast<TProfile3D*>(outputListHistos->FindObject("fDiffFlowPtRPGenFunRe"));
949 TProfile3D *diffFlowPtRPGenFunIm = dynamic_cast<TProfile3D*>(outputListHistos->FindObject("fDiffFlowPtRPGenFunIm"));
950 TProfile *ptBinRPNoOfParticles = dynamic_cast<TProfile*>(outputListHistos->FindObject("fPtBinRPNoOfParticles"));
951
952 //RP, Eta:
953 TProfile3D *diffFlowEtaRPGenFunRe = dynamic_cast<TProfile3D*>(outputListHistos->FindObject("fDiffFlowEtaRPGenFunRe"));
954 TProfile3D *diffFlowEtaRPGenFunIm = dynamic_cast<TProfile3D*>(outputListHistos->FindObject("fDiffFlowEtaRPGenFunIm"));
955 TProfile *etaBinRPNoOfParticles = dynamic_cast<TProfile*>(outputListHistos->FindObject("fEtaBinRPNoOfParticles"));
956
957 //POI, Pt:
958 TProfile3D *diffFlowPtPOIGenFunRe = dynamic_cast<TProfile3D*>(outputListHistos->FindObject("fDiffFlowPtPOIGenFunRe"));
959 TProfile3D *diffFlowPtPOIGenFunIm = dynamic_cast<TProfile3D*>(outputListHistos->FindObject("fDiffFlowPtPOIGenFunIm"));
960 TProfile *ptBinPOINoOfParticles = dynamic_cast<TProfile*>(outputListHistos->FindObject("fPtBinPOINoOfParticles"));
961
962 //POI, Eta:
963 TProfile3D *diffFlowEtaPOIGenFunRe = dynamic_cast<TProfile3D*>(outputListHistos->FindObject("fDiffFlowEtaPOIGenFunRe"));
964 TProfile3D *diffFlowEtaPOIGenFunIm = dynamic_cast<TProfile3D*>(outputListHistos->FindObject("fDiffFlowEtaPOIGenFunIm"));
965 TProfile *etaBinPOINoOfParticles = dynamic_cast<TProfile*>(outputListHistos->FindObject("fEtaBinPOINoOfParticles"));
966
967 //average selected multiplicity (for int. flow)
968 TProfile *avMult = dynamic_cast<TProfile*>(outputListHistos->FindObject("fAvMultIntFlowGFC"));
969
970 TProfile *avMult4 = dynamic_cast<TProfile*>(outputListHistos->FindObject("fAvMultIntFlow4GFCA")); //only for other system of Eq.
971 TProfile *avMult6 = dynamic_cast<TProfile*>(outputListHistos->FindObject("fAvMultIntFlow6GFCA")); //only for other system of Eq.
972 TProfile *avMult8 = dynamic_cast<TProfile*>(outputListHistos->FindObject("fAvMultIntFlow8GFCA")); //only for other system of Eq.
973 TProfile *avMult16 = dynamic_cast<TProfile*>(outputListHistos->FindObject("fAvMultIntFlow16GFCA")); //only for other system of Eq.
974
975 //average values of Q-vector components (1st bin: <Q_x>, 2nd bin: <Q_y>, 3rd bin: <(Q_x)^2>, 4th bin: <(Q_y)^2>)
976 TProfile *qVectorComponents = dynamic_cast<TProfile*>(outputListHistos->FindObject("fQVectorComponentsGFC"));
977
978 //<w^2>
979 TProfile *averageOfSquaredWeight = dynamic_cast<TProfile*>(outputListHistos->FindObject("fAverageOfSquaredWeight"));
980
981 /*
982 TProfile2D *diffFlowPtGenFunRe0 = dynamic_cast<TProfile2D*>(outputListHistos->FindObject("fdiffFlowPtGenFunRe0"));
983 TProfile2D *diffFlowPtGenFunRe1 = dynamic_cast<TProfile2D*>(outputListHistos->FindObject("fdiffFlowPtGenFunRe1"));
984 TProfile2D *diffFlowPtGenFunRe2 = dynamic_cast<TProfile2D*>(outputListHistos->FindObject("fdiffFlowPtGenFunRe2"));
985 TProfile2D *diffFlowPtGenFunRe3 = dynamic_cast<TProfile2D*>(outputListHistos->FindObject("fdiffFlowPtGenFunRe3"));
986 TProfile2D *diffFlowPtGenFunRe4 = dynamic_cast<TProfile2D*>(outputListHistos->FindObject("fdiffFlowPtGenFunRe4"));
987 TProfile2D *diffFlowPtGenFunRe5 = dynamic_cast<TProfile2D*>(outputListHistos->FindObject("fdiffFlowPtGenFunRe5"));
988 TProfile2D *diffFlowPtGenFunRe6 = dynamic_cast<TProfile2D*>(outputListHistos->FindObject("fdiffFlowPtGenFunRe6"));
989 TProfile2D *diffFlowPtGenFunRe7 = dynamic_cast<TProfile2D*>(outputListHistos->FindObject("fdiffFlowPtGenFunRe7"));
990 TProfile2D *diffFlowPtGenFunIm0 = dynamic_cast<TProfile2D*>(outputListHistos->FindObject("fdiffFlowPtGenFunIm0"));
991 TProfile2D *diffFlowPtGenFunIm1 = dynamic_cast<TProfile2D*>(outputListHistos->FindObject("fdiffFlowPtGenFunIm1"));
992 TProfile2D *diffFlowPtGenFunIm2 = dynamic_cast<TProfile2D*>(outputListHistos->FindObject("fdiffFlowPtGenFunIm2"));
993 TProfile2D *diffFlowPtGenFunIm3 = dynamic_cast<TProfile2D*>(outputListHistos->FindObject("fdiffFlowPtGenFunIm3"));
994 TProfile2D *diffFlowPtGenFunIm4 = dynamic_cast<TProfile2D*>(outputListHistos->FindObject("fdiffFlowPtGenFunIm4"));
995 TProfile2D *diffFlowPtGenFunIm5 = dynamic_cast<TProfile2D*>(outputListHistos->FindObject("fdiffFlowPtGenFunIm5"));
996 TProfile2D *diffFlowPtGenFunIm6 = dynamic_cast<TProfile2D*>(outputListHistos->FindObject("fdiffFlowPtGenFunIm6"));
997 TProfile2D *diffFlowPtGenFunIm7 = dynamic_cast<TProfile2D*>(outputListHistos->FindObject("fdiffFlowPtGenFunIm7"));
998 */
999
1000 //profile with avarage selected multiplicity for int. flow
1001 //TProfile *avMult = dynamic_cast<TProfile*>(outputListHistos->FindObject("fAvMultIntFlow"));
1002
1003 //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>)
1004 //TProfile *QVectorComponents = dynamic_cast<TProfile*>(outputListHistos->FindObject("fQVectorComponents"));
1005
1006 //q-distribution
1007 //TH1D *qDist = dynamic_cast<TH1D*>(outputListHistos->FindObject("fQDist"));
1008
1009 //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);
1010
1011 //AliCumulantsFunctions finalResults(intFlowGenFun,diffFlowPtGenFunRe,diffFlowPtGenFunIm, intFlowResults,diffFlowResults2,diffFlowResults4,diffFlowResults6,diffFlowResults8,avMult,QVectorComponents,qDist);
1012
1013 //finalResults.Calculate();
1014
1015 //---------------------------------------------------
1016
1017 this->SetIntFlowResults(intFlowResults);
1018 this->SetDiffFlowResults2nd(diffFlowResults2);
1019 this->SetDiffFlowResults4th(diffFlowResults4);
1020 this->SetDiffFlowResults6th(diffFlowResults6);
1021 this->SetDiffFlowResults8th(diffFlowResults8);
1022
1023 this->SetCommonHistsResults2nd(commonHistRes2nd);
1024 this->SetCommonHistsResults4th(commonHistRes4th);
1025 this->SetCommonHistsResults6th(commonHistRes6th);
1026 this->SetCommonHistsResults8th(commonHistRes8th);
1027
1028 this->SetCommonHists(commonHists);
1029
1030 this->SetIntFlowGenFun(intFlowGenFun);
1031
1032 this->SetIntFlowGenFun4(intFlowGenFun4); //only for other system of Eq.
1033 this->SetIntFlowGenFun6(intFlowGenFun6); //only for other system of Eq.
1034 this->SetIntFlowGenFun8(intFlowGenFun8); //only for other system of Eq.
1035 this->SetIntFlowGenFun16(intFlowGenFun16); //only for other system of Eq.
1036
1037 this->SetDiffFlowPtRPGenFunRe(diffFlowPtRPGenFunRe);
1038 this->SetDiffFlowPtRPGenFunIm(diffFlowPtRPGenFunIm);
1039 this->SetNumberOfParticlesPerPtBinRP(ptBinRPNoOfParticles);
1040
1041 this->SetDiffFlowEtaRPGenFunRe(diffFlowEtaRPGenFunRe);
1042 this->SetDiffFlowEtaRPGenFunIm(diffFlowEtaRPGenFunIm);
1043 this->SetNumberOfParticlesPerEtaBinRP(etaBinRPNoOfParticles);
1044
1045 this->SetDiffFlowPtPOIGenFunRe(diffFlowPtPOIGenFunRe);
1046 this->SetDiffFlowPtPOIGenFunIm(diffFlowPtPOIGenFunIm);
1047 this->SetNumberOfParticlesPerPtBinPOI(ptBinPOINoOfParticles);
1048
1049 this->SetDiffFlowEtaPOIGenFunRe(diffFlowEtaPOIGenFunRe);
1050 this->SetDiffFlowEtaPOIGenFunIm(diffFlowEtaPOIGenFunIm);
1051 this->SetNumberOfParticlesPerEtaBinPOI(etaBinPOINoOfParticles);
1052
1053 this->SetAverageMultiplicity(avMult);
1054
1055 this->SetAverageMultiplicity4(avMult4); //only for other system of Eq.
1056 this->SetAverageMultiplicity6(avMult6); //only for other system of Eq.
1057 this->SetAverageMultiplicity8(avMult8); //only for other system of Eq.
1058 this->SetAverageMultiplicity16(avMult16); //only for other system of Eq.
1059
1060 this->SetQVectorComponents(qVectorComponents);
1061
1062 this->SetAverageOfSquaredWeight(averageOfSquaredWeight);
1063 }
1064}
1065
1066//================================================================================================================
1067
2188af53 1068void AliFlowAnalysisWithCumulants::Finish()
1069{
1315fe58 1070 //calculate the final results
52021ae2 1071 //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);
1072
9dd53ff2 1073 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);
b6cd16a9 1074
1075 finalResults.Calculate();
2188af53 1076}
f1d945a1 1077
1315fe58 1078//================================================================================================================
1079
1080void AliFlowAnalysisWithCumulants::WriteHistograms(TString* outputFileName)
1081{
1082 //store the final results in output .root file
1083 TFile *output = new TFile(outputFileName->Data(),"RECREATE");
0fe80f88 1084 //output->WriteObject(fHistList, "cobjGFC","SingleKey");
1085 fHistList->SetName("cobjGFC");
1086 fHistList->Write(fHistList->GetName(), TObject::kSingleKey);
1315fe58 1087 delete output;
1088}
1089
1090//================================================================================================================
1091
b0fda271 1092//================================================================================================================
1093
1094void AliFlowAnalysisWithCumulants::WriteHistograms(TString outputFileName)
1095{
1096 //store the final results in output .root file
1097 TFile *output = new TFile(outputFileName.Data(),"RECREATE");
0fe80f88 1098 //output->WriteObject(fHistList, "cobjGFC","SingleKey");
1099 fHistList->SetName("cobjGFC");
1100 fHistList->Write(fHistList->GetName(), TObject::kSingleKey);
b0fda271 1101 delete output;
1102}
1103
1104//================================================================================================================
1105
f1d945a1 1106
f1d945a1 1107
1108