]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWG2/FLOW/AliFlowCommon/AliFlowAnalysisWithCumulants.cxx
more consistent names
[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 {
542 cout<<" WARNING: fWeightsList is NULL pointer. "<<endl;
543 exit(0);
544 }
545 if(fUsePhiWeights)
546 {
547 phiWeights = dynamic_cast<TH1F *>(fWeightsList->FindObject("phi_weights"));
548 if(!phiWeights)
549 {
550 cout<<" WARNING: couldn't access the histogram with phi weights. "<<endl;
551 exit(0);
552 }
553 }
554 if(fUsePtWeights)
555 {
556 ptWeights = dynamic_cast<TH1D *>(fWeightsList->FindObject("pt_weights"));
557 if(!ptWeights)
558 {
559 cout<<" WARNING: couldn't access the histogram with pt weights. "<<endl;
560 exit(0);
561 }
562 }
563 if(fUseEtaWeights)
564 {
565 etaWeights = dynamic_cast<TH1D *>(fWeightsList->FindObject("eta_weights"));
566 if(!etaWeights)
567 {
568 cout<<" WARNING: couldn't access the histogram with eta weights. "<<endl;
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++)
584 {
585 for(Int_t q=0;q<fgkQmax;q++)
586 {
5270f185 587 genfunG[p][q]=1.;
b6cd16a9 588 }
f1d945a1 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);
aaebd73d 643 }
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);
2188af53 659 }
660
9dd53ff2 661 // calculating Q-vector of event (needed for errors)
2188af53 662 AliFlowVector fQVector;
663 fQVector.Set(0.,0.);
664 fQVector.SetMult(0);
9dd53ff2 665 fQVector=anEvent->GetQ(1*n,fWeightsList,fUsePhiWeights,fUsePtWeights,fUseEtaWeights); // get the Q vector for this event
666 fQVectorComponentsGFC->Fill(0.,fQVector.X(),1); // in the 1st bin fill Q_x
667 fQVectorComponentsGFC->Fill(1.,fQVector.Y(),1); // in the 2nd bin fill Q_y
668 fQVectorComponentsGFC->Fill(2.,pow(fQVector.X(),2.),1); // in the 3rd bin fill (Q_x)^2
669 fQVectorComponentsGFC->Fill(3.,pow(fQVector.Y(),2.),1); // in the 4th bin fill (Q_y)^2
6d4fa5d3 670
813a4157 671 //3D profiles for differential flow in pt and eta
2188af53 672 //second loop over data: evaluating the generating function D[b][p][q] for differential flow
673 //remark 0: D[b][p][q] is a complex number => real and imaginary part are calculated separately
b6cd16a9 674 //remark 1: note that bellow G[p][q] is needed, the value of generating function for integrated flow for the CURRENT event
813a4157 675 //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 676 for(Int_t i=0;i<nPrim;i++)
677 {
2188af53 678 fTrack=anEvent->GetTrack(i);
b6cd16a9 679 if(fTrack)
680 {
b7cb54d5 681 if(fTrack->InRPSelection() && fTrack->InPOISelection())
b6cd16a9 682 {
813a4157 683 fPtBinPOINoOfParticles->Fill(fTrack->Pt(),fTrack->Pt(),1.);
684 fEtaBinPOINoOfParticles->Fill(fTrack->Eta(),fTrack->Eta(),1.);
b6cd16a9 685 for(Int_t p=0;p<fgkPmax;p++)
686 {
687 for(Int_t q=0;q<fgkQmax;q++)
688 {
813a4157 689 //real part (Pt)
b7cb54d5 690 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 691 //imaginary part (Pt)
b7cb54d5 692 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 693 //real part (Eta)
b7cb54d5 694 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 695 //imaginary part (Eta)
b7cb54d5 696 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 697 }
f1d945a1 698 }
b6cd16a9 699 }
b7cb54d5 700 else if(fTrack->InPOISelection() && !(fTrack->InRPSelection()))
b6cd16a9 701 {
813a4157 702 fPtBinPOINoOfParticles->Fill(fTrack->Pt(),fTrack->Pt(),1.);
703 fEtaBinPOINoOfParticles->Fill(fTrack->Eta(),fTrack->Eta(),1.);
b6cd16a9 704 for(Int_t p=0;p<fgkPmax;p++)
705 {
706 for(Int_t q=0;q<fgkQmax;q++)
707 {
813a4157 708 //real part (Pt)
5270f185 709 fDiffFlowPtPOIGenFunRe->Fill(fTrack->Pt()/fBinWidthPt,(Double_t)p,(Double_t)q,genfunG[p][q]*cos(fgkMltpl*fgkFlow*fTrack->Phi()),1.);
813a4157 710 //imaginary part (Pt)
5270f185 711 fDiffFlowPtPOIGenFunIm->Fill(fTrack->Pt()/fBinWidthPt,(Double_t)p,(Double_t)q,genfunG[p][q]*sin(fgkMltpl*fgkFlow*fTrack->Phi()),1.);
813a4157 712 //real part (Eta)
5270f185 713 fDiffFlowEtaPOIGenFunRe->Fill(fTrack->Eta()/fBinWidthEta,(Double_t)p,(Double_t)q,genfunG[p][q]*cos(fgkMltpl*fgkFlow*fTrack->Phi()),1.);
813a4157 714 //imaginary part (Eta)
5270f185 715 fDiffFlowEtaPOIGenFunIm->Fill(fTrack->Eta()/fBinWidthEta,(Double_t)p,(Double_t)q,genfunG[p][q]*sin(fgkMltpl*fgkFlow*fTrack->Phi()),1.);
b6cd16a9 716 }
717 }
813a4157 718 }
719 //RP:
b7cb54d5 720 if(fTrack->InRPSelection())
813a4157 721 {
722 fPtBinRPNoOfParticles->Fill(fTrack->Pt(),fTrack->Pt(),1.);
723 fEtaBinRPNoOfParticles->Fill(fTrack->Eta(),fTrack->Eta(),1.);
724 for(Int_t p=0;p<fgkPmax;p++)
725 {
726 for(Int_t q=0;q<fgkQmax;q++)
727 {
728 //real part (Pt)
b7cb54d5 729 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 730 //imaginary part (Pt)
b7cb54d5 731 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 732 //real part (Eta)
b7cb54d5 733 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 734 //imaginary part (Eta)
b7cb54d5 735 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 736 }
737 }
b7cb54d5 738 }//end of if(fTrack->InRPSelection())
b6cd16a9 739 }//end of if(fTrack)
2188af53 740 }//ending the second loop over data
2188af53 741
b6cd16a9 742
743
52021ae2 744 /*
2188af53 745 //sixteen 2D profiles for differential flow
746 for(Int_t i=0;i<nPrim;i++){
747 fTrack=anEvent->GetTrack(i);
b7cb54d5 748 if (fTrack && fTrack->InPOISelection()){
2188af53 749 //for(Int_t p=0;p<fgkPmax;p++){
750 for(Int_t q=0;q<fgkQmax;q++){
751 //real part
b7cb54d5 752 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 753 //imaginary part
b7cb54d5 754 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 755 //-----------------------------------------------------------------------
756 //real part
b7cb54d5 757 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 758 //imaginary part
b7cb54d5 759 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 760 //-----------------------------------------------------------------------
761 //real part
b7cb54d5 762 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 763 //imaginary part
b7cb54d5 764 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 765 //-----------------------------------------------------------------------
766 //real part
b7cb54d5 767 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 768 //imaginary part
b7cb54d5 769 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 770 //-----------------------------------------------------------------------
771 //real part
b7cb54d5 772 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 773 //imaginary part
b7cb54d5 774 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 775 //-----------------------------------------------------------------------
776 //real part
b7cb54d5 777 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 778 //imaginary part
b7cb54d5 779 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 780 //-----------------------------------------------------------------------
781 //real part
b7cb54d5 782 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 783 //imaginary part
b7cb54d5 784 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 785 //-----------------------------------------------------------------------
786 //real part
b7cb54d5 787 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 788 //imaginary part
b7cb54d5 789 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 790 }
791 //}
792 }
793 }//ending the second loop over data
52021ae2 794 */
2188af53 795
b7cb54d5 796 }//end of if(nEventNSelTracksRP>9)
b6cd16a9 797
cb308e83 798
b6cd16a9 799
800
cb308e83 801
b6cd16a9 802
cb308e83 803
804
805
806
807
808
809
810 //off the record: numerical equations for cumulants solved up to different highest order
b6cd16a9 811 if(fOtherEquations)
812 {
cb308e83 813 //running over data
814 Int_t nPrimOE = anEvent->NumberOfTracks();//total multiplicity
b6cd16a9 815
b7cb54d5 816 Int_t nEventNSelTracksRPOE = anEvent->GetEventNSelTracksRP();
b6cd16a9 817
5270f185 818 Double_t genfunG4[fgkPmax4][fgkQmax4];
819 Double_t genfunG6[fgkPmax6][fgkQmax6];
820 Double_t genfunG8[fgkPmax8][fgkQmax8];
821 Double_t genfunG16[fgkPmax16][fgkQmax16];
b6cd16a9 822 for(Int_t p=0;p<fgkPmax16;p++)
823 {
824 for(Int_t q=0;q<fgkQmax16;q++)
825 {
5270f185 826 genfunG16[p][q]=1.;
b6cd16a9 827 if(p<fgkPmax8 && q<fgkQmax8)
828 {
5270f185 829 genfunG8[p][q]=1.;
b6cd16a9 830 if(p<fgkPmax6 && q<fgkQmax6)
831 {
5270f185 832 genfunG6[p][q]=1.;
b6cd16a9 833 if(p<fgkPmax4 && q<fgkQmax4)
834 {
5270f185 835 genfunG4[p][q]=1.;
b6cd16a9 836 }
837 }
838 }
839 }
840 }
cb308e83 841
842 //multiplicities:
b7cb54d5 843 if(nEventNSelTracksRPOE>15) fAvMultIntFlow16GFC->Fill(0.,nEventNSelTracksRPOE,1);
844 if(nEventNSelTracksRPOE>7) fAvMultIntFlow8GFC->Fill(0.,nEventNSelTracksRPOE,1);
845 if(nEventNSelTracksRPOE>5) fAvMultIntFlow6GFC->Fill(0.,nEventNSelTracksRPOE,1);
846 if(nEventNSelTracksRPOE>3) fAvMultIntFlow4GFC->Fill(0.,nEventNSelTracksRPOE,1);
b6cd16a9 847
848 //first loop over data: evaluating the generating function G[p][q] for integrated flow
cb308e83 849 for(Int_t i=0;i<nPrimOE;i++)
b6cd16a9 850 {
851 fTrack=anEvent->GetTrack(i);
b7cb54d5 852 if(fTrack && fTrack->InRPSelection())
b6cd16a9 853 {
854 for(Int_t p=0;p<fgkPmax16;p++)
855 {
856 for(Int_t q=0;q<fgkQmax16;q++)
857 {
b7cb54d5 858 if(nEventNSelTracksRPOE>15)
cb308e83 859 {
b7cb54d5 860 genfunG16[p][q]*=(1.+(2.*fR0*sqrt(p+1.)/nEventNSelTracksRPOE)*cos(fgkFlow*fTrack->Phi()-2.*q*TMath::Pi()/fgkQmax16));
cb308e83 861 }
b6cd16a9 862 if(p<fgkPmax8 && q<fgkQmax8)
863 {
b7cb54d5 864 if(nEventNSelTracksRPOE>7)
cb308e83 865 {
b7cb54d5 866 genfunG8[p][q]*=(1.+(2.*fR0*sqrt(p+1.)/nEventNSelTracksRPOE)*cos(fgkFlow*fTrack->Phi()-2.*q*TMath::Pi()/fgkQmax8));
cb308e83 867 }
b6cd16a9 868 if(p<fgkPmax6 && q<fgkQmax6)
869 {
b7cb54d5 870 if(nEventNSelTracksRPOE>5)
cb308e83 871 {
b7cb54d5 872 genfunG6[p][q]*=(1.+(2.*fR0*sqrt(p+1.)/nEventNSelTracksRPOE)*cos(fgkFlow*fTrack->Phi()-2.*q*TMath::Pi()/fgkQmax6));
cb308e83 873 }
b6cd16a9 874 if(p<fgkPmax4 && q<fgkQmax4)
875 {
b7cb54d5 876 if(nEventNSelTracksRPOE>3)
cb308e83 877 {
b7cb54d5 878 genfunG4[p][q]*=(1.+(2.*fR0*sqrt(p+1.)/nEventNSelTracksRPOE)*cos(fgkFlow*fTrack->Phi()-2.*q*TMath::Pi()/fgkQmax4));
cb308e83 879 }
b6cd16a9 880 }
881 }
882 }
883 }
884 }
b7cb54d5 885 }//end of if(fTrack && fTrack->InRPSelection())
b6cd16a9 886 }//ending the loop over data
887
888 //storing the value of G[p][q] in 2D profile in order to get automatically the avarage <G[p][q]>
889 for(Int_t p=0;p<fgkPmax16;p++)
890 {
891 for(Int_t q=0;q<fgkQmax16;q++)
892 {
b7cb54d5 893 if(nEventNSelTracksRPOE>15) fIntFlowGenFun16->Fill((Double_t)p,(Double_t)q,genfunG16[p][q],1);
b6cd16a9 894 if(p<fgkPmax8 && q<fgkQmax8)
895 {
b7cb54d5 896 if(nEventNSelTracksRPOE>7) fIntFlowGenFun8->Fill((Double_t)p,(Double_t)q,genfunG8[p][q],1);
b6cd16a9 897 if(p<fgkPmax6 && q<fgkQmax6)
898 {
b7cb54d5 899 if(nEventNSelTracksRPOE>5) fIntFlowGenFun6->Fill((Double_t)p,(Double_t)q,genfunG6[p][q],1);
b6cd16a9 900 if(p<fgkPmax4 && q<fgkQmax4)
901 {
b7cb54d5 902 if(nEventNSelTracksRPOE>3) fIntFlowGenFun4->Fill((Double_t)p,(Double_t)q,genfunG4[p][q],1);
b6cd16a9 903 }
904 }
905 }
906 }
907 }
908}//end of if(fOtherEquations)
cb308e83 909
aaebd73d 910}//end of Make()
f1d945a1 911
2188af53 912//================================================================================================================
f1d945a1 913
2188af53 914void AliFlowAnalysisWithCumulants::Finish()
915{
1315fe58 916 //calculate the final results
52021ae2 917 //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);
918
9dd53ff2 919 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 920
921 finalResults.Calculate();
2188af53 922}
f1d945a1 923
1315fe58 924//================================================================================================================
925
926void AliFlowAnalysisWithCumulants::WriteHistograms(TString* outputFileName)
927{
928 //store the final results in output .root file
929 TFile *output = new TFile(outputFileName->Data(),"RECREATE");
7a2c2652 930 output->WriteObject(fHistList, "cobjGFC","SingleKey");
1315fe58 931 delete output;
932}
933
934//================================================================================================================
935
b0fda271 936//================================================================================================================
937
938void AliFlowAnalysisWithCumulants::WriteHistograms(TString outputFileName)
939{
940 //store the final results in output .root file
941 TFile *output = new TFile(outputFileName.Data(),"RECREATE");
942 output->WriteObject(fHistList, "cobjGFC","SingleKey");
943 delete output;
944}
945
946//================================================================================================================
947
f1d945a1 948
f1d945a1 949
950