overloaded write method
[u/mrichter/AliRoot.git] / PWG2 / FLOW / AliFlowAnalysisWithCumulants.cxx
CommitLineData
2188af53 1/*************************************************************************
2* Copyright(c) 1998-2008, ALICE Experiment at CERN, All rights reserved. *
3* *
4* Author: The ALICE Off-line Project. *
5* Contributors are mentioned in the code where appropriate. *
6* *
7* Permission to use, copy, modify and distribute this software and its *
8* documentation strictly for non-commercial purposes is hereby granted *
9* without fee, provided that the above copyright notice appears in all *
10* copies and that both the copyright notice and this permission notice *
11* appear in the supporting documentation. The authors make no claims *
12* about the suitability of this software for any purpose. It is *
13* provided "as is" without express or implied warranty. *
14**************************************************************************/
15
16/********************************
17 * flow analysis with cumulants *
18 * *
19 * author: Ante Bilandzic *
20 * (anteb@nikhef.nl) *
21 *******************************/
22
f1d945a1 23#define AliFlowAnalysisWithCumulants_cxx
24
25#include "Riostream.h"
26#include "AliFlowCommonConstants.h"
27#include "AliFlowCommonHist.h"
28#include "AliFlowCommonHistResults.h"
29#include "TChain.h"
30#include "TFile.h"
aaebd73d 31#include "TList.h" //NEW
f1d945a1 32#include "TParticle.h"
2188af53 33#include "TRandom3.h"
aaebd73d 34#include "TProfile.h"
35#include "TProfile2D.h"
36#include "TProfile3D.h"
f1d945a1 37#include "AliFlowEventSimple.h"
38#include "AliFlowTrackSimple.h"
39#include "AliFlowAnalysisWithCumulants.h"
40#include "AliFlowCumuConstants.h"
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),
64 fR0(0),
65 fPtMax(0),
66 fPtMin(0),
813a4157 67 fBinWidthPt(0),
68 fgknBinsPt(0),
69 fEtaMax(0),
70 fEtaMin(0),
71 fBinWidthEta(0),
72 fgknBinsEta(0),
2188af53 73 fAvQx(0),
74 fAvQy(0),
75 fAvQ2x(0),
76 fAvQ2y(0),
52021ae2 77 fAvMultIntFlowGFC(NULL),
78 fQVectorComponentsGFC(NULL),
79 fIntFlowResultsGFC(NULL),
80 fDiffFlowResults2ndOrderGFC(NULL),
81 fDiffFlowResults4thOrderGFC(NULL),
82 fDiffFlowResults6thOrderGFC(NULL),
83 fDiffFlowResults8thOrderGFC(NULL),
84 fCommonHistsResults2nd(NULL),
85 fCommonHistsResults4th(NULL),
86 fCommonHistsResults6th(NULL),
87 fCommonHistsResults8th(NULL),
2188af53 88 fIntFlowGenFun(NULL),
cb308e83 89 fIntFlowGenFun4(NULL),//(only for other system of Eq.)
90 fIntFlowGenFun6(NULL),//(only for other system of Eq.)
91 fIntFlowGenFun8(NULL),//(only for other system of Eq.)
92 fIntFlowGenFun16(NULL),//(only for other system of Eq.)
93 fAvMultIntFlow4GFC(NULL),//(only for other system of Eq.)
94 fAvMultIntFlow6GFC(NULL),//(only for other system of Eq.)
95 fAvMultIntFlow8GFC(NULL),//(only for other system of Eq.)
96 fAvMultIntFlow16GFC(NULL),//(only for other system of Eq.)
813a4157 97 fDiffFlowPtRPGenFunRe(NULL),
98 fDiffFlowPtRPGenFunIm(NULL),
99 fPtBinRPNoOfParticles(NULL),
100 fDiffFlowEtaRPGenFunRe(NULL),
101 fDiffFlowEtaRPGenFunIm(NULL),
102 fEtaBinRPNoOfParticles(NULL),
103 fDiffFlowPtPOIGenFunRe(NULL),
104 fDiffFlowPtPOIGenFunIm(NULL),
105 fPtBinPOINoOfParticles(NULL),
106 fDiffFlowEtaPOIGenFunRe(NULL),
107 fDiffFlowEtaPOIGenFunIm(NULL),
108 fEtaBinPOINoOfParticles(NULL),
52021ae2 109 /*
2188af53 110 fDiffFlowGenFunRe0(NULL),
111 fDiffFlowGenFunRe1(NULL),
112 fDiffFlowGenFunRe2(NULL),
113 fDiffFlowGenFunRe3(NULL),
114 fDiffFlowGenFunRe4(NULL),
115 fDiffFlowGenFunRe5(NULL),
116 fDiffFlowGenFunRe6(NULL),
117 fDiffFlowGenFunRe7(NULL),
118 fDiffFlowGenFunIm0(NULL),
119 fDiffFlowGenFunIm1(NULL),
120 fDiffFlowGenFunIm2(NULL),
121 fDiffFlowGenFunIm3(NULL),
122 fDiffFlowGenFunIm4(NULL),
123 fDiffFlowGenFunIm5(NULL),
124 fDiffFlowGenFunIm6(NULL),
125 fDiffFlowGenFunIm7(NULL),
52021ae2 126 */
b6cd16a9 127 fCommonHists(NULL),
128 fOtherEquations(kFALSE)
2188af53 129{
130 //constructor
52021ae2 131 fHistList = new TList();
2188af53 132 fR0=AliFlowCumuConstants::fgR0;
813a4157 133 //Pt:
2188af53 134 fPtMax=AliFlowCommonConstants::GetPtMax();
135 fPtMin=AliFlowCommonConstants::GetPtMin();
813a4157 136 fgknBinsPt=AliFlowCommonConstants::GetNbinsPt();
137 if(fgknBinsPt)
138 {
139 fBinWidthPt=(fPtMax-fPtMin)/fgknBinsPt;
140 }
141 //Eta:
142 fEtaMax=AliFlowCommonConstants::GetEtaMax();
143 fEtaMin=AliFlowCommonConstants::GetEtaMin();
144 fgknBinsEta=AliFlowCommonConstants::GetNbinsEta();
145 if(fgknBinsEta)
52021ae2 146 {
813a4157 147 fBinWidthEta=(fEtaMax-fEtaMin)/fgknBinsEta;
52021ae2 148 }
813a4157 149
150 fOtherEquations=AliFlowCumuConstants::fgOtherEquations;
2188af53 151}
f1d945a1 152
2188af53 153AliFlowAnalysisWithCumulants::~AliFlowAnalysisWithCumulants()
154{
155 //desctructor
156 delete fHistList;
f55e2cac 157}
729ec982 158
2188af53 159//================================================================================================================
160
161void AliFlowAnalysisWithCumulants::CreateOutputObjects()
162{
163 //various output histograms
aaebd73d 164
52021ae2 165 //average multiplicity
166 fAvMultIntFlowGFC = new TProfile("fAvMultIntFlowGFC","Average Multiplicity",1,0,1,"s");
167 fAvMultIntFlowGFC->SetXTitle("");
168 fAvMultIntFlowGFC->SetYTitle("");
169 fAvMultIntFlowGFC->SetLabelSize(0.06);
170 fAvMultIntFlowGFC->SetMarkerStyle(25);
171 fAvMultIntFlowGFC->SetLabelOffset(0.01);
172 (fAvMultIntFlowGFC->GetXaxis())->SetBinLabel(1,"Average Multiplicity");
173 fHistList->Add(fAvMultIntFlowGFC);
aaebd73d 174
52021ae2 175 //averages of Q-vector components (1st bin: <Q_x>, 2nd bin: <Q_y>, 3rd bin: <(Q_x)^2>, 4th bin: <(Q_y)^2>)
176 fQVectorComponentsGFC = new TProfile("fQVectorComponentsGFC","Average of Q-vector components",4,0.,4.);
177 fQVectorComponentsGFC->SetXTitle("");
178 fQVectorComponentsGFC->SetYTitle("");
179 fQVectorComponentsGFC->SetLabelSize(0.06);
180 fQVectorComponentsGFC->SetMarkerStyle(25);
181 (fQVectorComponentsGFC->GetXaxis())->SetBinLabel(1,"<Q_{x}>");
182 (fQVectorComponentsGFC->GetXaxis())->SetBinLabel(2,"<Q_{y}>");
183 (fQVectorComponentsGFC->GetXaxis())->SetBinLabel(3,"<Q_{x}^{2}>");
184 (fQVectorComponentsGFC->GetXaxis())->SetBinLabel(4,"<Q_{y}^{2}>");
185 fHistList->Add(fQVectorComponentsGFC);
aaebd73d 186
2188af53 187 //final results for integrated flow (v_n{2}, v_n{4},..., v_n{16}) from cumulants (by default n=2)
b6cd16a9 188 fIntFlowResultsGFC = new TH1D("fIntFlowResultsGFC","Integrated Flow From Cumulants (Generating Function)",4,0,4);
52021ae2 189 fIntFlowResultsGFC->SetXTitle("");
190 fIntFlowResultsGFC->SetYTitle("");
191 fIntFlowResultsGFC->SetLabelSize(0.06);
192 //fIntFlowResultsGFC->SetTickLength(1);
193 fIntFlowResultsGFC->SetMarkerStyle(25);
194 (fIntFlowResultsGFC->GetXaxis())->SetBinLabel(1,"v_{n}{2}");
195 (fIntFlowResultsGFC->GetXaxis())->SetBinLabel(2,"v_{n}{4}");
196 (fIntFlowResultsGFC->GetXaxis())->SetBinLabel(3,"v_{n}{6}");
197 (fIntFlowResultsGFC->GetXaxis())->SetBinLabel(4,"v_{n}{8}");
52021ae2 198 fHistList->Add(fIntFlowResultsGFC);
aaebd73d 199
2188af53 200 //final results for differential flow v_p/n{2} (by default p=n=2)
813a4157 201 fDiffFlowResults2ndOrderGFC = new TH1D("fDiffFlowResults2ndOrderGFC","v'_2/2{2}",fgknBinsPt,fPtMin,fPtMax);
52021ae2 202 fDiffFlowResults2ndOrderGFC->SetXTitle("pt [GeV]");
203 fDiffFlowResults2ndOrderGFC->SetYTitle("");
204 fHistList->Add(fDiffFlowResults2ndOrderGFC);
2188af53 205
206 //final results for differential flow v_p/n{4} (by default p=n=2)
813a4157 207 fDiffFlowResults4thOrderGFC = new TH1D("fDiffFlowResults4thOrderGFC","v'_2/2{4}",fgknBinsPt,fPtMin,fPtMax);
52021ae2 208 fDiffFlowResults4thOrderGFC->SetXTitle("pt [GeV]");
209 fDiffFlowResults4thOrderGFC->SetYTitle("");
210 fHistList->Add(fDiffFlowResults4thOrderGFC);
aaebd73d 211
2188af53 212 //final results for differential flow v_p/n{6} (by default p=n=2)
813a4157 213 fDiffFlowResults6thOrderGFC = new TH1D("fDiffFlowResults6thOrderGFC","v'_2/2{6}",fgknBinsPt,fPtMin,fPtMax);
52021ae2 214 fDiffFlowResults6thOrderGFC->SetXTitle("pt [GeV]");
215 fDiffFlowResults6thOrderGFC->SetYTitle("");
216 fHistList->Add(fDiffFlowResults6thOrderGFC);
aaebd73d 217
2188af53 218 //final results for differential flow v_p/n{8} (by default p=n=2)
813a4157 219 fDiffFlowResults8thOrderGFC = new TH1D("fDiffFlowResults8thOrderGFC","v'_2/2{8}",fgknBinsPt,fPtMin,fPtMax);
52021ae2 220 fDiffFlowResults8thOrderGFC->SetXTitle("pt [GeV]");
221 fDiffFlowResults8thOrderGFC->SetYTitle("");
222 fHistList->Add(fDiffFlowResults8thOrderGFC);
aaebd73d 223
2188af53 224 //avarage of the generating function for integrated flow <G[p][q]>
225 fIntFlowGenFun = new TProfile2D("fIntFlowGenFun","<G[p][q]>",fgkPmax,0.,(Double_t)fgkPmax,fgkQmax,0.,(Double_t)fgkQmax);
226 fIntFlowGenFun->SetXTitle("p");
227 fIntFlowGenFun->SetYTitle("q");
228 fHistList->Add(fIntFlowGenFun);
b6cd16a9 229
230 if(fOtherEquations)
231 {
cb308e83 232 //avarage of the generating function for integrated flow <G[p][q]> (only for other system of Eq. - up to 4th order)
b6cd16a9 233 fIntFlowGenFun4 = new TProfile2D("fIntFlowGenFun4","<G4[p4][q4]>",fgkPmax4,0.,(Double_t)fgkPmax4,fgkQmax4,0.,(Double_t)fgkQmax4);
234 fIntFlowGenFun4->SetXTitle("p4");
235 fIntFlowGenFun4->SetYTitle("q4");
236 fHistList->Add(fIntFlowGenFun4);
237
cb308e83 238 //avarage of the generating function for integrated flow <G[p][q]> (only for other system of Eq. - up to 6th order)
b6cd16a9 239 fIntFlowGenFun6 = new TProfile2D("fIntFlowGenFun6","<G6[p6][q6]>",fgkPmax6,0.,(Double_t)fgkPmax6,fgkQmax6,0.,(Double_t)fgkQmax6);
240 fIntFlowGenFun6->SetXTitle("p6");
241 fIntFlowGenFun6->SetYTitle("q6");
242 fHistList->Add(fIntFlowGenFun6);
243
cb308e83 244 //avarage of the generating function for integrated flow <G[p][q]> (only for other system of Eq. - up to 8th order)
b6cd16a9 245 fIntFlowGenFun8 = new TProfile2D("fIntFlowGenFun8","<G8[p8][q8]>",fgkPmax8,0.,(Double_t)fgkPmax8,fgkQmax8,0.,(Double_t)fgkQmax8);
246 fIntFlowGenFun8->SetXTitle("p8");
247 fIntFlowGenFun8->SetYTitle("q8");
248 fHistList->Add(fIntFlowGenFun8);
249
cb308e83 250 //avarage of the generating function for integrated flow <G[p][q]> (only for other system of Eq. - up to 16th order)
b6cd16a9 251 fIntFlowGenFun16 = new TProfile2D("fIntFlowGenFun16","<G16[p16][q16]>",fgkPmax16,0.,(Double_t)fgkPmax16,fgkQmax16,0.,(Double_t)fgkQmax16);
252 fIntFlowGenFun16->SetXTitle("p16");
253 fIntFlowGenFun16->SetYTitle("q16");
254 fHistList->Add(fIntFlowGenFun16);
cb308e83 255
256 //average multiplicity (only for other system of Eq. - up to 4th order)
257 fAvMultIntFlow4GFC = new TProfile("fAvMultIntFlow4GFC","Average Multiplicity",1,0,1,"s");
258 fAvMultIntFlow4GFC->SetXTitle("");
259 fAvMultIntFlow4GFC->SetYTitle("");
260 fAvMultIntFlow4GFC->SetLabelSize(0.06);
261 fAvMultIntFlow4GFC->SetMarkerStyle(25);
262 fAvMultIntFlow4GFC->SetLabelOffset(0.01);
263 (fAvMultIntFlow4GFC->GetXaxis())->SetBinLabel(1,"Average Multiplicity");
264 fHistList->Add(fAvMultIntFlow4GFC);
265
266 //average multiplicity (only for other system of Eq. - up to 6th order)
267 fAvMultIntFlow6GFC = new TProfile("fAvMultIntFlow6GFC","Average Multiplicity",1,0,1,"s");
268 fAvMultIntFlow6GFC->SetXTitle("");
269 fAvMultIntFlow6GFC->SetYTitle("");
270 fAvMultIntFlow6GFC->SetLabelSize(0.06);
271 fAvMultIntFlow6GFC->SetMarkerStyle(25);
272 fAvMultIntFlow6GFC->SetLabelOffset(0.01);
273 (fAvMultIntFlow6GFC->GetXaxis())->SetBinLabel(1,"Average Multiplicity");
274 fHistList->Add(fAvMultIntFlow6GFC);
275
276 //average multiplicity (only for other system of Eq. - up to 8th order)
277 fAvMultIntFlow8GFC = new TProfile("fAvMultIntFlow8GFC","Average Multiplicity",1,0,1,"s");
278 fAvMultIntFlow8GFC->SetXTitle("");
279 fAvMultIntFlow8GFC->SetYTitle("");
280 fAvMultIntFlow8GFC->SetLabelSize(0.06);
281 fAvMultIntFlow8GFC->SetMarkerStyle(25);
282 fAvMultIntFlow8GFC->SetLabelOffset(0.01);
283 (fAvMultIntFlow8GFC->GetXaxis())->SetBinLabel(1,"Average Multiplicity");
284 fHistList->Add(fAvMultIntFlow8GFC);
285
286 //average multiplicity (only for other system of Eq. - up to 16th order)
287 fAvMultIntFlow16GFC = new TProfile("fAvMultIntFlow16GFC","Average Multiplicity",1,0,1,"s");
288 fAvMultIntFlow16GFC->SetXTitle("");
289 fAvMultIntFlow16GFC->SetYTitle("");
290 fAvMultIntFlow16GFC->SetLabelSize(0.06);
291 fAvMultIntFlow16GFC->SetMarkerStyle(25);
292 fAvMultIntFlow16GFC->SetLabelOffset(0.01);
293 (fAvMultIntFlow16GFC->GetXaxis())->SetBinLabel(1,"Average Multiplicity");
294 fHistList->Add(fAvMultIntFlow16GFC);
b6cd16a9 295 }
aaebd73d 296
813a4157 297 //avarage of the real part of generating function for differential flow in Pt <Re(D[b][p][q])>
298 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);
299 fDiffFlowPtRPGenFunRe->SetXTitle("b");
300 fDiffFlowPtRPGenFunRe->SetYTitle("p");
301 fDiffFlowPtRPGenFunRe->SetZTitle("q");
302 fDiffFlowPtRPGenFunRe->SetTitleOffset(1.44,"X");
303 fDiffFlowPtRPGenFunRe->SetTitleOffset(1.44,"Y");
304 fHistList->Add(fDiffFlowPtRPGenFunRe);
305
306 //avarage of the imaginary part of generating function for differential flow in Pt <Im(D[b][p][q])>
307 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);
308 fDiffFlowPtRPGenFunIm->SetXTitle("b");
309 fDiffFlowPtRPGenFunIm->SetYTitle("p");
310 fDiffFlowPtRPGenFunIm->SetZTitle("q");
311 fDiffFlowPtRPGenFunIm->SetTitleOffset(1.44,"X");
312 fDiffFlowPtRPGenFunIm->SetTitleOffset(1.44,"Y");
313 fHistList->Add(fDiffFlowPtRPGenFunIm);
314
315 //number of particles per pt bin
316 fPtBinRPNoOfParticles = new TProfile("fPtBinRPNoOfParticles","Number of particles per #p_{t} bin",fgknBinsPt,fPtMin,fPtMax);
317 fPtBinRPNoOfParticles->SetXTitle("pt [GeV]");
318 fPtBinRPNoOfParticles->SetYTitle("");
319 fHistList->Add(fPtBinRPNoOfParticles);
320
321 //avarage of the real part of generating function for differential flow in Eta <Re(D[b][p][q])>
322 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);
323 fDiffFlowEtaRPGenFunRe->SetXTitle("b");
324 fDiffFlowEtaRPGenFunRe->SetYTitle("p");
325 fDiffFlowEtaRPGenFunRe->SetZTitle("q");
326 fDiffFlowEtaRPGenFunRe->SetTitleOffset(1.44,"X");
327 fDiffFlowEtaRPGenFunRe->SetTitleOffset(1.44,"Y");
328 fHistList->Add(fDiffFlowEtaRPGenFunRe);
329
330 //avarage of the imaginary part of generating function for differential flow in Eta <Im(D[b][p][q])>
331 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);
332 fDiffFlowEtaRPGenFunIm->SetXTitle("b");
333 fDiffFlowEtaRPGenFunIm->SetYTitle("p");
334 fDiffFlowEtaRPGenFunIm->SetZTitle("q");
335 fDiffFlowEtaRPGenFunIm->SetTitleOffset(1.44,"X");
336 fDiffFlowEtaRPGenFunIm->SetTitleOffset(1.44,"Y");
337 fHistList->Add(fDiffFlowEtaRPGenFunIm);
338
339 //number of particles per eta bin
340 fEtaBinRPNoOfParticles = new TProfile("fEtaBinRPNoOfParticles","Number of particles per #eta bin",fgknBinsEta,fEtaMin,fEtaMax);
341 fEtaBinRPNoOfParticles->SetXTitle("#eta");
342 fEtaBinRPNoOfParticles->SetYTitle("");
343 fHistList->Add(fEtaBinRPNoOfParticles);
344
345 //avarage of the real part of generating function for differential flow in Pt <Re(D[b][p][q])>
346 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);
347 fDiffFlowPtPOIGenFunRe->SetXTitle("b");
348 fDiffFlowPtPOIGenFunRe->SetYTitle("p");
349 fDiffFlowPtPOIGenFunRe->SetZTitle("q");
350 fDiffFlowPtPOIGenFunRe->SetTitleOffset(1.44,"X");
351 fDiffFlowPtPOIGenFunRe->SetTitleOffset(1.44,"Y");
352 fHistList->Add(fDiffFlowPtPOIGenFunRe);
353
354 //avarage of the imaginary part of generating function for differential flow in Pt <Im(D[b][p][q])>
355 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);
356 fDiffFlowPtPOIGenFunIm->SetXTitle("b");
357 fDiffFlowPtPOIGenFunIm->SetYTitle("p");
358 fDiffFlowPtPOIGenFunIm->SetZTitle("q");
359 fDiffFlowPtPOIGenFunIm->SetTitleOffset(1.44,"X");
360 fDiffFlowPtPOIGenFunIm->SetTitleOffset(1.44,"Y");
361 fHistList->Add(fDiffFlowPtPOIGenFunIm);
2188af53 362
52021ae2 363 //number of particles per pt bin
813a4157 364 fPtBinPOINoOfParticles = new TProfile("fPtBinPOINoOfParticles","Number of particles per #p_{t} bin",fgknBinsPt,fPtMin,fPtMax);
365 fPtBinPOINoOfParticles->SetXTitle("pt [GeV]");
366 fPtBinPOINoOfParticles->SetYTitle("");
367 fHistList->Add(fPtBinPOINoOfParticles);
368
369 //avarage of the real part of generating function for differential flow in Eta <Re(D[b][p][q])>
370 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);
371 fDiffFlowEtaPOIGenFunRe->SetXTitle("b");
372 fDiffFlowEtaPOIGenFunRe->SetYTitle("p");
373 fDiffFlowEtaPOIGenFunRe->SetZTitle("q");
374 fDiffFlowEtaPOIGenFunRe->SetTitleOffset(1.44,"X");
375 fDiffFlowEtaPOIGenFunRe->SetTitleOffset(1.44,"Y");
376 fHistList->Add(fDiffFlowEtaPOIGenFunRe);
377
378 //avarage of the imaginary part of generating function for differential flow in Eta <Im(D[b][p][q])>
379 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);
380 fDiffFlowEtaPOIGenFunIm->SetXTitle("b");
381 fDiffFlowEtaPOIGenFunIm->SetYTitle("p");
382 fDiffFlowEtaPOIGenFunIm->SetZTitle("q");
383 fDiffFlowEtaPOIGenFunIm->SetTitleOffset(1.44,"X");
384 fDiffFlowEtaPOIGenFunIm->SetTitleOffset(1.44,"Y");
385 fHistList->Add(fDiffFlowEtaPOIGenFunIm);
386
387 //number of particles per eta bin
388 fEtaBinPOINoOfParticles = new TProfile("fEtaBinPOINoOfParticles","Number of particles per #eta bin",fgknBinsEta,fEtaMin,fEtaMax);
389 fEtaBinPOINoOfParticles->SetXTitle("#eta");
390 fEtaBinPOINoOfParticles->SetYTitle("");
391 fHistList->Add(fEtaBinPOINoOfParticles);
52021ae2 392
393 /*
2188af53 394 fDiffFlowGenFunRe0 = new TProfile2D("fDiffFlowGenFunRe0","Re(<D[b][0][q]>)",fgknBins,(Double_t)(fPtMin/fBinWidth),(Double_t)(fPtMax/fBinWidth),fgkQmax,0.,(Double_t)fgkQmax);
395 fDiffFlowGenFunRe0->SetXTitle("b");
396 fDiffFlowGenFunRe0->SetYTitle("q");
397 fHistList->Add(fDiffFlowGenFunRe0);
398
b6cd16a9 399 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 400 fDiffFlowGenFunIm0->SetXTitle("b");
401 fDiffFlowGenFunIm0->SetYTitle("q");
402 fHistList->Add(fDiffFlowGenFunIm0);
403
404 fDiffFlowGenFunRe1 = new TProfile2D("fDiffFlowGenFunRe1","Re(<D[b][1][q]>)",fgknBins,(Double_t)(fPtMin/fBinWidth),(Double_t)(fPtMax/fBinWidth),fgkQmax,0.,(Double_t)fgkQmax);
405 fDiffFlowGenFunRe1->SetXTitle("b");
406 fDiffFlowGenFunRe1->SetYTitle("q");
407 fHistList->Add(fDiffFlowGenFunRe1);
408
409 fDiffFlowGenFunIm1 = new TProfile2D("fDiffFlowGenFunIm1","Im(<D[b][1][q]>)",fgknBins,(Double_t)(fPtMin/fBinWidth),(Double_t)(fPtMax/fBinWidth),fgkQmax,0.,(Double_t)fgkQmax);
410 fDiffFlowGenFunIm1->SetXTitle("b");
411 fDiffFlowGenFunIm1->SetYTitle("q");
412 fHistList->Add(fDiffFlowGenFunIm1);
413
414 fDiffFlowGenFunRe2 = new TProfile2D("fDiffFlowGenFunRe2","Re(<D[b][2][q]>)",fgknBins,(Double_t)(fPtMin/fBinWidth),(Double_t)(fPtMax/fBinWidth),fgkQmax,0.,(Double_t)fgkQmax);
415 fDiffFlowGenFunRe2->SetXTitle("b");
416 fDiffFlowGenFunRe2->SetYTitle("q");
417 fHistList->Add(fDiffFlowGenFunRe2);
418
419 fDiffFlowGenFunIm2 = new TProfile2D("fDiffFlowGenFunIm2","Im(<D[b][2][q]>)",fgknBins,(Double_t)(fPtMin/fBinWidth),(Double_t)(fPtMax/fBinWidth),fgkQmax,0.,(Double_t)fgkQmax);
420 fDiffFlowGenFunIm2->SetXTitle("b");
421 fDiffFlowGenFunIm2->SetYTitle("q");
422 fHistList->Add(fDiffFlowGenFunIm2);
423
424 fDiffFlowGenFunRe3 = new TProfile2D("fDiffFlowGenFunRe3","Re(<D[b][3][q]>)",fgknBins,(Double_t)(fPtMin/fBinWidth),(Double_t)(fPtMax/fBinWidth),fgkQmax,0.,(Double_t)fgkQmax);
425 fDiffFlowGenFunRe3->SetXTitle("b");
426 fDiffFlowGenFunRe3->SetYTitle("q");
427 fHistList->Add(fDiffFlowGenFunRe3);
428
429 fDiffFlowGenFunIm3 = new TProfile2D("fDiffFlowGenFunIm3","Im(<D[b][3][q]>)",fgknBins,(Double_t)(fPtMin/fBinWidth),(Double_t)(fPtMax/fBinWidth),fgkQmax,0.,(Double_t)fgkQmax);
430 fDiffFlowGenFunIm3->SetXTitle("b");
431 fDiffFlowGenFunIm3->SetYTitle("q");
432 fHistList->Add(fDiffFlowGenFunIm3);
433
434 fDiffFlowGenFunRe4 = new TProfile2D("fDiffFlowGenFunRe4","Re(<D[b][4][q]>)",fgknBins,(Double_t)(fPtMin/fBinWidth),(Double_t)(fPtMax/fBinWidth),fgkQmax,0.,(Double_t)fgkQmax);
435 fDiffFlowGenFunRe4->SetXTitle("b");
436 fDiffFlowGenFunRe4->SetYTitle("q");
437 fHistList->Add(fDiffFlowGenFunRe4);
438
439 fDiffFlowGenFunIm4 = new TProfile2D("fDiffFlowGenFunIm4","Im(<D[b][4][q]>)",fgknBins,(Double_t)(fPtMin/fBinWidth),(Double_t)(fPtMax/fBinWidth),fgkQmax,0.,(Double_t)fgkQmax);
440 fDiffFlowGenFunIm4->SetXTitle("b");
441 fDiffFlowGenFunIm4->SetYTitle("q");
442 fHistList->Add(fDiffFlowGenFunIm4);
443
444 fDiffFlowGenFunRe5 = new TProfile2D("fDiffFlowGenFunRe5","Re(<D[b][5][q]>)",fgkQmax,0.,(Double_t)fgkQmax,fgknBins,(Double_t)(fPtMin/fBinWidth),(Double_t)(fPtMax/fBinWidth));
445 fDiffFlowGenFunRe5->SetXTitle("b");
446 fDiffFlowGenFunRe5->SetYTitle("q");
447 fHistList->Add(fDiffFlowGenFunRe5);
448
449 fDiffFlowGenFunIm5 = new TProfile2D("fDiffFlowGenFunIm5","Im(<D[b][5][q]>)",fgknBins,(Double_t)(fPtMin/fBinWidth),(Double_t)(fPtMax/fBinWidth),fgkQmax,0.,(Double_t)fgkQmax);
450 fDiffFlowGenFunIm5->SetXTitle("b");
451 fDiffFlowGenFunIm5->SetYTitle("q");
452 fHistList->Add(fDiffFlowGenFunIm5);
453
454 fDiffFlowGenFunRe6 = new TProfile2D("fDiffFlowGenFunRe6","Re(<D[b][6][q]>)",fgknBins,(Double_t)(fPtMin/fBinWidth),(Double_t)(fPtMax/fBinWidth),fgkQmax,0.,(Double_t)fgkQmax);
455 fDiffFlowGenFunRe6->SetXTitle("b");
456 fDiffFlowGenFunRe6->SetYTitle("q");
457 fHistList->Add(fDiffFlowGenFunRe6);
458
459 fDiffFlowGenFunIm6 = new TProfile2D("fDiffFlowGenFunIm6","Im(<D[b][6][q]>)",fgknBins,(Double_t)(fPtMin/fBinWidth),(Double_t)(fPtMax/fBinWidth),fgkQmax,0.,(Double_t)fgkQmax);
460 fDiffFlowGenFunIm6->SetXTitle("b");
461 fDiffFlowGenFunIm6->SetYTitle("q");
462 fHistList->Add(fDiffFlowGenFunIm6);
463
464 fDiffFlowGenFunRe7 = new TProfile2D("fDiffFlowGenFunRe7","Re(<D[b][7][q]>)",fgknBins,(Double_t)(fPtMin/fBinWidth),(Double_t)(fPtMax/fBinWidth),fgkQmax,0.,(Double_t)fgkQmax);
465 fDiffFlowGenFunRe7->SetXTitle("b");
466 fDiffFlowGenFunRe7->SetYTitle("q");
467 fHistList->Add(fDiffFlowGenFunRe7);
468
469 fDiffFlowGenFunIm7 = new TProfile2D("fDiffFlowGenFunIm7","Im(<D[b][7][q]>)",fgknBins,(Double_t)(fPtMin/fBinWidth),(Double_t)(fPtMax/fBinWidth),fgkQmax,0.,(Double_t)fgkQmax);
470 fDiffFlowGenFunIm7->SetXTitle("b");
471 fDiffFlowGenFunIm7->SetYTitle("q");
472 fHistList->Add(fDiffFlowGenFunIm7);
52021ae2 473 */
2188af53 474
475 //common control histograms
52021ae2 476 fCommonHists = new AliFlowCommonHist("AliFlowCommonHistGFC");
477 fHistList->Add(fCommonHists);
478
479 //common histograms for final results (2nd order)
480 fCommonHistsResults2nd = new AliFlowCommonHistResults("AliFlowCommonHistResults2ndOrderGFC");
481 fHistList->Add(fCommonHistsResults2nd);
482
483 //common histograms for final results (4th order)
484 fCommonHistsResults4th = new AliFlowCommonHistResults("AliFlowCommonHistResults4thOrderGFC");
485 fHistList->Add(fCommonHistsResults4th);
486
487 //common histograms for final results (6th order)
488 fCommonHistsResults6th = new AliFlowCommonHistResults("AliFlowCommonHistResults6thOrderGFC");
489 fHistList->Add(fCommonHistsResults6th);
490
491 //common histograms for final results (8th order)
492 fCommonHistsResults8th = new AliFlowCommonHistResults("AliFlowCommonHistResults8thOrderGFC");
493 fHistList->Add(fCommonHistsResults8th);
aaebd73d 494
2188af53 495}//end of CreateOutputObjects()
496
497//================================================================================================================
498
499void AliFlowAnalysisWithCumulants::Make(AliFlowEventSimple* anEvent)
500{
cb308e83 501 //running over data:
502 Int_t nPrim = anEvent->NumberOfTracks(); //total multiplicity
503
504 Int_t nEventNSelTracksIntFlow = anEvent->GetEventNSelTracksIntFlow(); //selected multiplicity (particles used for int. flow)
aaebd73d 505
cb308e83 506 if(nEventNSelTracksIntFlow>9) //generating function formalism applied here make sense only for selected multiplicity >= 10
507 {
2188af53 508 //fill the common control histograms
509 fCommonHists->FillControlHistograms(anEvent);
f1d945a1 510
2188af53 511 //initializing the generating function G[p][q] for integrated flow
512 Double_t G[fgkPmax][fgkQmax];
b6cd16a9 513
514 for(Int_t p=0;p<fgkPmax;p++)
515 {
516 for(Int_t q=0;q<fgkQmax;q++)
517 {
518 G[p][q]=1.;
519 }
f1d945a1 520 }
5b04fe11 521
b6cd16a9 522 Int_t nSelTracksIntFlow = 0; //cross-checking the selected multiplicity
523
524 for(Int_t i=0;i<nPrim;i++)
525 {
2188af53 526 fTrack=anEvent->GetTrack(i);
b6cd16a9 527 if(fTrack && fTrack->UseForIntegratedFlow())
528 {
2188af53 529 nSelTracksIntFlow++;
b6cd16a9 530 for(Int_t p=0;p<fgkPmax;p++)
531 {
532 for(Int_t q=0;q<fgkQmax;q++)
533 {
534 G[p][q]*=(1.+(2.*fR0*sqrt(p+1.)/nEventNSelTracksIntFlow)*cos(fgkFlow*fTrack->Phi()-2.*q*TMath::Pi()/fgkQmax));
f1d945a1 535 }
b6cd16a9 536 }
aaebd73d 537 }
b6cd16a9 538 }
539
2188af53 540 //storing the value of G[p][q] in 2D profile in order to get automatically the avarage <G[p][q]>
b6cd16a9 541 for(Int_t p=0;p<fgkPmax;p++)
542 {
543 for(Int_t q=0;q<fgkQmax;q++)
544 {
2188af53 545 fIntFlowGenFun->Fill((Double_t)p,(Double_t)q,G[p][q],1);
b6cd16a9 546 }
547 }
2188af53 548
549 //storing the selected multiplicity (if fAvMultIntFlow is not filled here then you had wrongly selected the particles used for integrated flow)
550 if(nSelTracksIntFlow==nEventNSelTracksIntFlow)
551 {
52021ae2 552 fAvMultIntFlowGFC->Fill(0.,nSelTracksIntFlow,1);
2188af53 553 }
554
555 //calculating Q-vector of event (needed for errors)
556 AliFlowVector fQVector;
557 fQVector.Set(0.,0.);
558 fQVector.SetMult(0);
b6cd16a9 559 fQVector=anEvent->GetQ(); //get the Q vector for this event
52021ae2 560 fQVectorComponentsGFC->Fill(0.,fQVector.X(),1); //in the 1st bin fill Q_x
561 fQVectorComponentsGFC->Fill(1.,fQVector.Y(),1); //in the 2nd bin fill Q_y
562 fQVectorComponentsGFC->Fill(2.,pow(fQVector.X(),2.),1); //in the 3rd bin fill (Q_x)^2
563 fQVectorComponentsGFC->Fill(3.,pow(fQVector.Y(),2.),1); //in the 4th bin fill (Q_y)^2
6d4fa5d3 564
813a4157 565 //3D profiles for differential flow in pt and eta
2188af53 566 //second loop over data: evaluating the generating function D[b][p][q] for differential flow
567 //remark 0: D[b][p][q] is a complex number => real and imaginary part are calculated separately
b6cd16a9 568 //remark 1: note that bellow G[p][q] is needed, the value of generating function for integrated flow for the CURRENT event
813a4157 569 //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 570 for(Int_t i=0;i<nPrim;i++)
571 {
2188af53 572 fTrack=anEvent->GetTrack(i);
b6cd16a9 573 if(fTrack)
574 {
b6cd16a9 575 if(fTrack->UseForIntegratedFlow() && fTrack->UseForDifferentialFlow())
576 {
813a4157 577 fPtBinPOINoOfParticles->Fill(fTrack->Pt(),fTrack->Pt(),1.);
578 fEtaBinPOINoOfParticles->Fill(fTrack->Eta(),fTrack->Eta(),1.);
b6cd16a9 579 for(Int_t p=0;p<fgkPmax;p++)
580 {
581 for(Int_t q=0;q<fgkQmax;q++)
582 {
813a4157 583 //real part (Pt)
584 fDiffFlowPtPOIGenFunRe->Fill(fTrack->Pt()/fBinWidthPt,(Double_t)p,(Double_t)q,G[p][q]*cos(fgkMltpl*fgkFlow*fTrack->Phi())/(1.+(2.*fR0*sqrt(p+1.)/nSelTracksIntFlow)*cos(fgkFlow*fTrack->Phi()-2.*q*TMath::Pi()/fgkQmax)),1.);
585 //imaginary part (Pt)
586 fDiffFlowPtPOIGenFunIm->Fill(fTrack->Pt()/fBinWidthPt,(Double_t)p,(Double_t)q,G[p][q]*sin(fgkMltpl*fgkFlow*fTrack->Phi())/(1.+(2.*fR0*sqrt(p+1.)/nSelTracksIntFlow)*cos(fgkFlow*fTrack->Phi()-2.*q*TMath::Pi()/fgkQmax)),1.);
587 //real part (Eta)
588 fDiffFlowEtaPOIGenFunRe->Fill(fTrack->Eta()/fBinWidthEta,(Double_t)p,(Double_t)q,G[p][q]*cos(fgkMltpl*fgkFlow*fTrack->Phi())/(1.+(2.*fR0*sqrt(p+1.)/nSelTracksIntFlow)*cos(fgkFlow*fTrack->Phi()-2.*q*TMath::Pi()/fgkQmax)),1.);
589 //imaginary part (Eta)
590 fDiffFlowEtaPOIGenFunIm->Fill(fTrack->Eta()/fBinWidthEta,(Double_t)p,(Double_t)q,G[p][q]*sin(fgkMltpl*fgkFlow*fTrack->Phi())/(1.+(2.*fR0*sqrt(p+1.)/nSelTracksIntFlow)*cos(fgkFlow*fTrack->Phi()-2.*q*TMath::Pi()/fgkQmax)),1.);
b6cd16a9 591 }
f1d945a1 592 }
b6cd16a9 593 }
594 else if(fTrack->UseForDifferentialFlow() && !(fTrack->UseForIntegratedFlow()))
595 {
813a4157 596 fPtBinPOINoOfParticles->Fill(fTrack->Pt(),fTrack->Pt(),1.);
597 fEtaBinPOINoOfParticles->Fill(fTrack->Eta(),fTrack->Eta(),1.);
b6cd16a9 598 for(Int_t p=0;p<fgkPmax;p++)
599 {
600 for(Int_t q=0;q<fgkQmax;q++)
601 {
813a4157 602 //real part (Pt)
603 fDiffFlowPtPOIGenFunRe->Fill(fTrack->Pt()/fBinWidthPt,(Double_t)p,(Double_t)q,G[p][q]*cos(fgkMltpl*fgkFlow*fTrack->Phi()),1.);
604 //imaginary part (Pt)
605 fDiffFlowPtPOIGenFunIm->Fill(fTrack->Pt()/fBinWidthPt,(Double_t)p,(Double_t)q,G[p][q]*sin(fgkMltpl*fgkFlow*fTrack->Phi()),1.);
606 //real part (Eta)
607 fDiffFlowEtaPOIGenFunRe->Fill(fTrack->Eta()/fBinWidthEta,(Double_t)p,(Double_t)q,G[p][q]*cos(fgkMltpl*fgkFlow*fTrack->Phi()),1.);
608 //imaginary part (Eta)
609 fDiffFlowEtaPOIGenFunIm->Fill(fTrack->Eta()/fBinWidthEta,(Double_t)p,(Double_t)q,G[p][q]*sin(fgkMltpl*fgkFlow*fTrack->Phi()),1.);
b6cd16a9 610 }
611 }
813a4157 612 }
613 //RP:
614 if(fTrack->UseForIntegratedFlow())
615 {
616 fPtBinRPNoOfParticles->Fill(fTrack->Pt(),fTrack->Pt(),1.);
617 fEtaBinRPNoOfParticles->Fill(fTrack->Eta(),fTrack->Eta(),1.);
618 for(Int_t p=0;p<fgkPmax;p++)
619 {
620 for(Int_t q=0;q<fgkQmax;q++)
621 {
622 //real part (Pt)
623 fDiffFlowPtRPGenFunRe->Fill(fTrack->Pt()/fBinWidthPt,(Double_t)p,(Double_t)q,G[p][q]*cos(fgkMltpl*fgkFlow*fTrack->Phi())/(1.+(2.*fR0*sqrt(p+1.)/nSelTracksIntFlow)*cos(fgkFlow*fTrack->Phi()-2.*q*TMath::Pi()/fgkQmax)),1.);
624 //imaginary part (Pt)
625 fDiffFlowPtRPGenFunIm->Fill(fTrack->Pt()/fBinWidthPt,(Double_t)p,(Double_t)q,G[p][q]*sin(fgkMltpl*fgkFlow*fTrack->Phi())/(1.+(2.*fR0*sqrt(p+1.)/nSelTracksIntFlow)*cos(fgkFlow*fTrack->Phi()-2.*q*TMath::Pi()/fgkQmax)),1.);
626 //real part (Eta)
627 fDiffFlowEtaRPGenFunRe->Fill(fTrack->Eta()/fBinWidthEta,(Double_t)p,(Double_t)q,G[p][q]*cos(fgkMltpl*fgkFlow*fTrack->Phi())/(1.+(2.*fR0*sqrt(p+1.)/nSelTracksIntFlow)*cos(fgkFlow*fTrack->Phi()-2.*q*TMath::Pi()/fgkQmax)),1.);
628 //imaginary part (Eta)
629 fDiffFlowEtaRPGenFunIm->Fill(fTrack->Eta()/fBinWidthEta,(Double_t)p,(Double_t)q,G[p][q]*sin(fgkMltpl*fgkFlow*fTrack->Phi())/(1.+(2.*fR0*sqrt(p+1.)/nSelTracksIntFlow)*cos(fgkFlow*fTrack->Phi()-2.*q*TMath::Pi()/fgkQmax)),1.);
630 }
631 }
632 }//end of if(fTrack->UseForIntegratedFlow())
b6cd16a9 633 }//end of if(fTrack)
2188af53 634 }//ending the second loop over data
2188af53 635
b6cd16a9 636
637
52021ae2 638 /*
2188af53 639 //sixteen 2D profiles for differential flow
640 for(Int_t i=0;i<nPrim;i++){
641 fTrack=anEvent->GetTrack(i);
642 if (fTrack && fTrack->UseForDifferentialFlow()){
643 //for(Int_t p=0;p<fgkPmax;p++){
644 for(Int_t q=0;q<fgkQmax;q++){
645 //real part
646 fDiffFlowGenFunRe0->Fill(fTrack->Pt()/fBinWidth,(Double_t)q,G[0][q]*cos(fgkMltpl*fgkFlow*fTrack->Phi())/(1.+(2.*fR0*sqrt(0.+1.)/nSelTracksIntFlow)*cos(fgkFlow*fTrack->Phi()-2.*q*TMath::Pi()/fgkQmax)),1.);
647 //imaginary part
648 fDiffFlowGenFunIm0->Fill(fTrack->Pt()/fBinWidth,(Double_t)q,G[0][q]*sin(fgkMltpl*fgkFlow*fTrack->Phi())/(1.+(2.*fR0*sqrt(0.+1.)/nSelTracksIntFlow)*cos(fgkFlow*fTrack->Phi()-2.*q*TMath::Pi()/fgkQmax)),1.);
649 //-----------------------------------------------------------------------
650 //real part
651 fDiffFlowGenFunRe1->Fill(fTrack->Pt()/fBinWidth,(Double_t)q,G[1][q]*cos(fgkMltpl*fgkFlow*fTrack->Phi())/(1.+(2.*fR0*sqrt(1.+1.)/nSelTracksIntFlow)*cos(fgkFlow*fTrack->Phi()-2.*q*TMath::Pi()/fgkQmax)),1.);
652 //imaginary part
653 fDiffFlowGenFunIm1->Fill(fTrack->Pt()/fBinWidth,(Double_t)q,G[1][q]*sin(fgkMltpl*fgkFlow*fTrack->Phi())/(1.+(2.*fR0*sqrt(1.+1.)/nSelTracksIntFlow)*cos(fgkFlow*fTrack->Phi()-2.*q*TMath::Pi()/fgkQmax)),1.);
654 //-----------------------------------------------------------------------
655 //real part
656 fDiffFlowGenFunRe2->Fill(fTrack->Pt()/fBinWidth,(Double_t)q,G[2][q]*cos(fgkMltpl*fgkFlow*fTrack->Phi())/(1.+(2.*fR0*sqrt(2.+1.)/nSelTracksIntFlow)*cos(fgkFlow*fTrack->Phi()-2.*q*TMath::Pi()/fgkQmax)),1.);
657 //imaginary part
658 fDiffFlowGenFunIm2->Fill(fTrack->Pt()/fBinWidth,(Double_t)q,G[2][q]*sin(fgkMltpl*fgkFlow*fTrack->Phi())/(1.+(2.*fR0*sqrt(2.+1.)/nSelTracksIntFlow)*cos(fgkFlow*fTrack->Phi()-2.*q*TMath::Pi()/fgkQmax)),1.);
659 //-----------------------------------------------------------------------
660 //real part
661 fDiffFlowGenFunRe3->Fill(fTrack->Pt()/fBinWidth,(Double_t)q,G[3][q]*cos(fgkMltpl*fgkFlow*fTrack->Phi())/(1.+(2.*fR0*sqrt(3.+1.)/nSelTracksIntFlow)*cos(fgkFlow*fTrack->Phi()-2.*q*TMath::Pi()/fgkQmax)),1.);
662 //imaginary part
663 fDiffFlowGenFunIm3->Fill(fTrack->Pt()/fBinWidth,(Double_t)q,G[3][q]*sin(fgkMltpl*fgkFlow*fTrack->Phi())/(1.+(2.*fR0*sqrt(3.+1.)/nSelTracksIntFlow)*cos(fgkFlow*fTrack->Phi()-2.*q*TMath::Pi()/fgkQmax)),1.);
664 //-----------------------------------------------------------------------
665 //real part
666 fDiffFlowGenFunRe4->Fill(fTrack->Pt()/fBinWidth,(Double_t)q,G[4][q]*cos(fgkMltpl*fgkFlow*fTrack->Phi())/(1.+(2.*fR0*sqrt(4.+1.)/nSelTracksIntFlow)*cos(fgkFlow*fTrack->Phi()-2.*q*TMath::Pi()/fgkQmax)),1.);
667 //imaginary part
668 fDiffFlowGenFunIm4->Fill(fTrack->Pt()/fBinWidth,(Double_t)q,G[4][q]*sin(fgkMltpl*fgkFlow*fTrack->Phi())/(1.+(2.*fR0*sqrt(4.+1.)/nSelTracksIntFlow)*cos(fgkFlow*fTrack->Phi()-2.*q*TMath::Pi()/fgkQmax)),1.);
669 //-----------------------------------------------------------------------
670 //real part
671 fDiffFlowGenFunRe5->Fill(fTrack->Pt()/fBinWidth,(Double_t)q,G[5][q]*cos(fgkMltpl*fgkFlow*fTrack->Phi())/(1.+(2.*fR0*sqrt(5.+1.)/nSelTracksIntFlow)*cos(fgkFlow*fTrack->Phi()-2.*q*TMath::Pi()/fgkQmax)),1.);
672 //imaginary part
673 fDiffFlowGenFunIm5->Fill(fTrack->Pt()/fBinWidth,(Double_t)q,G[5][q]*sin(fgkMltpl*fgkFlow*fTrack->Phi())/(1.+(2.*fR0*sqrt(5.+1.)/nSelTracksIntFlow)*cos(fgkFlow*fTrack->Phi()-2.*q*TMath::Pi()/fgkQmax)),1.);
674 //-----------------------------------------------------------------------
675 //real part
676 fDiffFlowGenFunRe6->Fill(fTrack->Pt()/fBinWidth,(Double_t)q,G[6][q]*cos(fgkMltpl*fgkFlow*fTrack->Phi())/(1.+(2.*fR0*sqrt(6.+1.)/nSelTracksIntFlow)*cos(fgkFlow*fTrack->Phi()-2.*q*TMath::Pi()/fgkQmax)),1.);
677 //imaginary part
678 fDiffFlowGenFunIm6->Fill(fTrack->Pt()/fBinWidth,(Double_t)q,G[6][q]*sin(fgkMltpl*fgkFlow*fTrack->Phi())/(1.+(2.*fR0*sqrt(6.+1.)/nSelTracksIntFlow)*cos(fgkFlow*fTrack->Phi()-2.*q*TMath::Pi()/fgkQmax)),1.);
679 //-----------------------------------------------------------------------
680 //real part
681 fDiffFlowGenFunRe7->Fill(fTrack->Pt()/fBinWidth,(Double_t)q,G[7][q]*cos(fgkMltpl*fgkFlow*fTrack->Phi())/(1.+(2.*fR0*sqrt(7.+1.)/nSelTracksIntFlow)*cos(fgkFlow*fTrack->Phi()-2.*q*TMath::Pi()/fgkQmax)),1.);
682 //imaginary part
683 fDiffFlowGenFunIm7->Fill(fTrack->Pt()/fBinWidth,(Double_t)q,G[7][q]*sin(fgkMltpl*fgkFlow*fTrack->Phi())/(1.+(2.*fR0*sqrt(7.+1.)/nSelTracksIntFlow)*cos(fgkFlow*fTrack->Phi()-2.*q*TMath::Pi()/fgkQmax)),1.);
684 }
685 //}
686 }
687 }//ending the second loop over data
52021ae2 688 */
2188af53 689
cb308e83 690 }//end of if(nEventNSelTracksIntFlow>9)
b6cd16a9 691
cb308e83 692
b6cd16a9 693
694
cb308e83 695
b6cd16a9 696
cb308e83 697
698
699
700
701
702
703
704 //off the record: numerical equations for cumulants solved up to different highest order
b6cd16a9 705 if(fOtherEquations)
706 {
cb308e83 707 //running over data
708 Int_t nPrimOE = anEvent->NumberOfTracks();//total multiplicity
b6cd16a9 709
cb308e83 710 Int_t nEventNSelTracksIntFlowOE = anEvent->GetEventNSelTracksIntFlow();
b6cd16a9 711
712 Double_t G4[fgkPmax4][fgkQmax4];
713 Double_t G6[fgkPmax6][fgkQmax6];
714 Double_t G8[fgkPmax8][fgkQmax8];
715 Double_t G16[fgkPmax16][fgkQmax16];
716 for(Int_t p=0;p<fgkPmax16;p++)
717 {
718 for(Int_t q=0;q<fgkQmax16;q++)
719 {
720 G16[p][q]=1.;
721 if(p<fgkPmax8 && q<fgkQmax8)
722 {
723 G8[p][q]=1.;
724 if(p<fgkPmax6 && q<fgkQmax6)
725 {
726 G6[p][q]=1.;
727 if(p<fgkPmax4 && q<fgkQmax4)
728 {
729 G4[p][q]=1.;
730 }
731 }
732 }
733 }
734 }
cb308e83 735
736 //multiplicities:
737 if(nEventNSelTracksIntFlowOE>15) fAvMultIntFlow16GFC->Fill(0.,nEventNSelTracksIntFlowOE,1);
738 if(nEventNSelTracksIntFlowOE>7) fAvMultIntFlow8GFC->Fill(0.,nEventNSelTracksIntFlowOE,1);
739 if(nEventNSelTracksIntFlowOE>5) fAvMultIntFlow6GFC->Fill(0.,nEventNSelTracksIntFlowOE,1);
740 if(nEventNSelTracksIntFlowOE>3) fAvMultIntFlow4GFC->Fill(0.,nEventNSelTracksIntFlowOE,1);
b6cd16a9 741
742 //first loop over data: evaluating the generating function G[p][q] for integrated flow
cb308e83 743 for(Int_t i=0;i<nPrimOE;i++)
b6cd16a9 744 {
745 fTrack=anEvent->GetTrack(i);
746 if(fTrack && fTrack->UseForIntegratedFlow())
747 {
748 for(Int_t p=0;p<fgkPmax16;p++)
749 {
750 for(Int_t q=0;q<fgkQmax16;q++)
751 {
cb308e83 752 if(nEventNSelTracksIntFlowOE>15)
753 {
754 G16[p][q]*=(1.+(2.*fR0*sqrt(p+1.)/nEventNSelTracksIntFlowOE)*cos(fgkFlow*fTrack->Phi()-2.*q*TMath::Pi()/fgkQmax16));
755 }
b6cd16a9 756 if(p<fgkPmax8 && q<fgkQmax8)
757 {
cb308e83 758 if(nEventNSelTracksIntFlowOE>7)
759 {
760 G8[p][q]*=(1.+(2.*fR0*sqrt(p+1.)/nEventNSelTracksIntFlowOE)*cos(fgkFlow*fTrack->Phi()-2.*q*TMath::Pi()/fgkQmax8));
761 }
b6cd16a9 762 if(p<fgkPmax6 && q<fgkQmax6)
763 {
cb308e83 764 if(nEventNSelTracksIntFlowOE>5)
765 {
766 G6[p][q]*=(1.+(2.*fR0*sqrt(p+1.)/nEventNSelTracksIntFlowOE)*cos(fgkFlow*fTrack->Phi()-2.*q*TMath::Pi()/fgkQmax6));
767 }
b6cd16a9 768 if(p<fgkPmax4 && q<fgkQmax4)
769 {
cb308e83 770 if(nEventNSelTracksIntFlowOE>3)
771 {
772 G4[p][q]*=(1.+(2.*fR0*sqrt(p+1.)/nEventNSelTracksIntFlowOE)*cos(fgkFlow*fTrack->Phi()-2.*q*TMath::Pi()/fgkQmax4));
773 }
b6cd16a9 774 }
775 }
776 }
777 }
778 }
779 }//end of if(fTrack && fTrack->UseForIntegratedFlow())
780 }//ending the loop over data
781
782 //storing the value of G[p][q] in 2D profile in order to get automatically the avarage <G[p][q]>
783 for(Int_t p=0;p<fgkPmax16;p++)
784 {
785 for(Int_t q=0;q<fgkQmax16;q++)
786 {
cb308e83 787 if(nEventNSelTracksIntFlowOE>15) fIntFlowGenFun16->Fill((Double_t)p,(Double_t)q,G16[p][q],1);
b6cd16a9 788 if(p<fgkPmax8 && q<fgkQmax8)
789 {
cb308e83 790 if(nEventNSelTracksIntFlowOE>7) fIntFlowGenFun8->Fill((Double_t)p,(Double_t)q,G8[p][q],1);
b6cd16a9 791 if(p<fgkPmax6 && q<fgkQmax6)
792 {
cb308e83 793 if(nEventNSelTracksIntFlowOE>5) fIntFlowGenFun6->Fill((Double_t)p,(Double_t)q,G6[p][q],1);
b6cd16a9 794 if(p<fgkPmax4 && q<fgkQmax4)
795 {
cb308e83 796 if(nEventNSelTracksIntFlowOE>3) fIntFlowGenFun4->Fill((Double_t)p,(Double_t)q,G4[p][q],1);
b6cd16a9 797 }
798 }
799 }
800 }
801 }
802}//end of if(fOtherEquations)
cb308e83 803
aaebd73d 804}//end of Make()
f1d945a1 805
2188af53 806//================================================================================================================
f1d945a1 807
2188af53 808void AliFlowAnalysisWithCumulants::Finish()
809{
1315fe58 810 //calculate the final results
52021ae2 811 //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);
812
813a4157 813 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,fCommonHistsResults2nd, fCommonHistsResults4th,fCommonHistsResults6th,fCommonHistsResults8th,fCommonHists);
b6cd16a9 814
815 finalResults.Calculate();
2188af53 816}
f1d945a1 817
1315fe58 818//================================================================================================================
819
820void AliFlowAnalysisWithCumulants::WriteHistograms(TString* outputFileName)
821{
822 //store the final results in output .root file
823 TFile *output = new TFile(outputFileName->Data(),"RECREATE");
7a2c2652 824 output->WriteObject(fHistList, "cobjGFC","SingleKey");
1315fe58 825 delete output;
826}
827
828//================================================================================================================
829
b0fda271 830//================================================================================================================
831
832void AliFlowAnalysisWithCumulants::WriteHistograms(TString outputFileName)
833{
834 //store the final results in output .root file
835 TFile *output = new TFile(outputFileName.Data(),"RECREATE");
836 output->WriteObject(fHistList, "cobjGFC","SingleKey");
837 delete output;
838}
839
840//================================================================================================================
841
f1d945a1 842
f1d945a1 843
844