]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWG2/FLOW/AliFlowAnalysisWithCumulants.cxx
remove warning produced by hiding GetC of
[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),
67 fBinWidth(0),
52021ae2 68 fgknBins(0),
2188af53 69 fAvQx(0),
70 fAvQy(0),
71 fAvQ2x(0),
72 fAvQ2y(0),
52021ae2 73 fAvMultIntFlowGFC(NULL),
74 fQVectorComponentsGFC(NULL),
75 fIntFlowResultsGFC(NULL),
76 fDiffFlowResults2ndOrderGFC(NULL),
77 fDiffFlowResults4thOrderGFC(NULL),
78 fDiffFlowResults6thOrderGFC(NULL),
79 fDiffFlowResults8thOrderGFC(NULL),
80 fCommonHistsResults2nd(NULL),
81 fCommonHistsResults4th(NULL),
82 fCommonHistsResults6th(NULL),
83 fCommonHistsResults8th(NULL),
2188af53 84 fIntFlowGenFun(NULL),
b6cd16a9 85 fIntFlowGenFun4(NULL),
86 fIntFlowGenFun6(NULL),
87 fIntFlowGenFun8(NULL),
88 fIntFlowGenFun16(NULL),
2188af53 89 fDiffFlowGenFunRe(NULL),
90 fDiffFlowGenFunIm(NULL),
52021ae2 91 fBinNoOfParticles(NULL),
92 /*
2188af53 93 fDiffFlowGenFunRe0(NULL),
94 fDiffFlowGenFunRe1(NULL),
95 fDiffFlowGenFunRe2(NULL),
96 fDiffFlowGenFunRe3(NULL),
97 fDiffFlowGenFunRe4(NULL),
98 fDiffFlowGenFunRe5(NULL),
99 fDiffFlowGenFunRe6(NULL),
100 fDiffFlowGenFunRe7(NULL),
101 fDiffFlowGenFunIm0(NULL),
102 fDiffFlowGenFunIm1(NULL),
103 fDiffFlowGenFunIm2(NULL),
104 fDiffFlowGenFunIm3(NULL),
105 fDiffFlowGenFunIm4(NULL),
106 fDiffFlowGenFunIm5(NULL),
107 fDiffFlowGenFunIm6(NULL),
108 fDiffFlowGenFunIm7(NULL),
52021ae2 109 */
b6cd16a9 110 fCommonHists(NULL),
111 fOtherEquations(kFALSE)
2188af53 112{
113 //constructor
52021ae2 114 fHistList = new TList();
2188af53 115 fR0=AliFlowCumuConstants::fgR0;
116 fPtMax=AliFlowCommonConstants::GetPtMax();
117 fPtMin=AliFlowCommonConstants::GetPtMin();
52021ae2 118 fgknBins=AliFlowCommonConstants::GetNbinsPt();
b6cd16a9 119 fOtherEquations=AliFlowCumuConstants::fgOtherEquations;
52021ae2 120 if(fgknBins)
121 {
122 fBinWidth=(fPtMax-fPtMin)/fgknBins;
123 }
2188af53 124}
f1d945a1 125
2188af53 126AliFlowAnalysisWithCumulants::~AliFlowAnalysisWithCumulants()
127{
128 //desctructor
129 delete fHistList;
f55e2cac 130}
729ec982 131
2188af53 132//================================================================================================================
133
134void AliFlowAnalysisWithCumulants::CreateOutputObjects()
135{
136 //various output histograms
aaebd73d 137
52021ae2 138 //average multiplicity
139 fAvMultIntFlowGFC = new TProfile("fAvMultIntFlowGFC","Average Multiplicity",1,0,1,"s");
140 fAvMultIntFlowGFC->SetXTitle("");
141 fAvMultIntFlowGFC->SetYTitle("");
142 fAvMultIntFlowGFC->SetLabelSize(0.06);
143 fAvMultIntFlowGFC->SetMarkerStyle(25);
144 fAvMultIntFlowGFC->SetLabelOffset(0.01);
145 (fAvMultIntFlowGFC->GetXaxis())->SetBinLabel(1,"Average Multiplicity");
146 fHistList->Add(fAvMultIntFlowGFC);
aaebd73d 147
52021ae2 148 //averages of Q-vector components (1st bin: <Q_x>, 2nd bin: <Q_y>, 3rd bin: <(Q_x)^2>, 4th bin: <(Q_y)^2>)
149 fQVectorComponentsGFC = new TProfile("fQVectorComponentsGFC","Average of Q-vector components",4,0.,4.);
150 fQVectorComponentsGFC->SetXTitle("");
151 fQVectorComponentsGFC->SetYTitle("");
152 fQVectorComponentsGFC->SetLabelSize(0.06);
153 fQVectorComponentsGFC->SetMarkerStyle(25);
154 (fQVectorComponentsGFC->GetXaxis())->SetBinLabel(1,"<Q_{x}>");
155 (fQVectorComponentsGFC->GetXaxis())->SetBinLabel(2,"<Q_{y}>");
156 (fQVectorComponentsGFC->GetXaxis())->SetBinLabel(3,"<Q_{x}^{2}>");
157 (fQVectorComponentsGFC->GetXaxis())->SetBinLabel(4,"<Q_{y}^{2}>");
158 fHistList->Add(fQVectorComponentsGFC);
aaebd73d 159
2188af53 160 //final results for integrated flow (v_n{2}, v_n{4},..., v_n{16}) from cumulants (by default n=2)
b6cd16a9 161 fIntFlowResultsGFC = new TH1D("fIntFlowResultsGFC","Integrated Flow From Cumulants (Generating Function)",4,0,4);
52021ae2 162 fIntFlowResultsGFC->SetXTitle("");
163 fIntFlowResultsGFC->SetYTitle("");
164 fIntFlowResultsGFC->SetLabelSize(0.06);
165 //fIntFlowResultsGFC->SetTickLength(1);
166 fIntFlowResultsGFC->SetMarkerStyle(25);
167 (fIntFlowResultsGFC->GetXaxis())->SetBinLabel(1,"v_{n}{2}");
168 (fIntFlowResultsGFC->GetXaxis())->SetBinLabel(2,"v_{n}{4}");
169 (fIntFlowResultsGFC->GetXaxis())->SetBinLabel(3,"v_{n}{6}");
170 (fIntFlowResultsGFC->GetXaxis())->SetBinLabel(4,"v_{n}{8}");
52021ae2 171 fHistList->Add(fIntFlowResultsGFC);
aaebd73d 172
2188af53 173 //final results for differential flow v_p/n{2} (by default p=n=2)
52021ae2 174 fDiffFlowResults2ndOrderGFC = new TH1D("fDiffFlowResults2ndOrderGFC","v'_2/2{2}",fgknBins,fPtMin,fPtMax);
175 fDiffFlowResults2ndOrderGFC->SetXTitle("pt [GeV]");
176 fDiffFlowResults2ndOrderGFC->SetYTitle("");
177 fHistList->Add(fDiffFlowResults2ndOrderGFC);
2188af53 178
179 //final results for differential flow v_p/n{4} (by default p=n=2)
52021ae2 180 fDiffFlowResults4thOrderGFC = new TH1D("fDiffFlowResults4thOrderGFC","v'_2/2{4}",fgknBins,fPtMin,fPtMax);
181 fDiffFlowResults4thOrderGFC->SetXTitle("pt [GeV]");
182 fDiffFlowResults4thOrderGFC->SetYTitle("");
183 fHistList->Add(fDiffFlowResults4thOrderGFC);
aaebd73d 184
2188af53 185 //final results for differential flow v_p/n{6} (by default p=n=2)
52021ae2 186 fDiffFlowResults6thOrderGFC = new TH1D("fDiffFlowResults6thOrderGFC","v'_2/2{6}",fgknBins,fPtMin,fPtMax);
187 fDiffFlowResults6thOrderGFC->SetXTitle("pt [GeV]");
188 fDiffFlowResults6thOrderGFC->SetYTitle("");
189 fHistList->Add(fDiffFlowResults6thOrderGFC);
aaebd73d 190
2188af53 191 //final results for differential flow v_p/n{8} (by default p=n=2)
52021ae2 192 fDiffFlowResults8thOrderGFC = new TH1D("fDiffFlowResults8thOrderGFC","v'_2/2{8}",fgknBins,fPtMin,fPtMax);
193 fDiffFlowResults8thOrderGFC->SetXTitle("pt [GeV]");
194 fDiffFlowResults8thOrderGFC->SetYTitle("");
195 fHistList->Add(fDiffFlowResults8thOrderGFC);
aaebd73d 196
2188af53 197 //avarage of the generating function for integrated flow <G[p][q]>
198 fIntFlowGenFun = new TProfile2D("fIntFlowGenFun","<G[p][q]>",fgkPmax,0.,(Double_t)fgkPmax,fgkQmax,0.,(Double_t)fgkQmax);
199 fIntFlowGenFun->SetXTitle("p");
200 fIntFlowGenFun->SetYTitle("q");
201 fHistList->Add(fIntFlowGenFun);
b6cd16a9 202
203 if(fOtherEquations)
204 {
205 //avarage of the generating function for integrated flow <G[p][q]> (up to 4th order)
206 fIntFlowGenFun4 = new TProfile2D("fIntFlowGenFun4","<G4[p4][q4]>",fgkPmax4,0.,(Double_t)fgkPmax4,fgkQmax4,0.,(Double_t)fgkQmax4);
207 fIntFlowGenFun4->SetXTitle("p4");
208 fIntFlowGenFun4->SetYTitle("q4");
209 fHistList->Add(fIntFlowGenFun4);
210
211 //avarage of the generating function for integrated flow <G[p][q]> (up to 6th order)
212 fIntFlowGenFun6 = new TProfile2D("fIntFlowGenFun6","<G6[p6][q6]>",fgkPmax6,0.,(Double_t)fgkPmax6,fgkQmax6,0.,(Double_t)fgkQmax6);
213 fIntFlowGenFun6->SetXTitle("p6");
214 fIntFlowGenFun6->SetYTitle("q6");
215 fHistList->Add(fIntFlowGenFun6);
216
217 //avarage of the generating function for integrated flow <G[p][q]> (up to 8th order)
218 fIntFlowGenFun8 = new TProfile2D("fIntFlowGenFun8","<G8[p8][q8]>",fgkPmax8,0.,(Double_t)fgkPmax8,fgkQmax8,0.,(Double_t)fgkQmax8);
219 fIntFlowGenFun8->SetXTitle("p8");
220 fIntFlowGenFun8->SetYTitle("q8");
221 fHistList->Add(fIntFlowGenFun8);
222
223 //avarage of the generating function for integrated flow <G[p][q]> (up to 16th order)
224 fIntFlowGenFun16 = new TProfile2D("fIntFlowGenFun16","<G16[p16][q16]>",fgkPmax16,0.,(Double_t)fgkPmax16,fgkQmax16,0.,(Double_t)fgkQmax16);
225 fIntFlowGenFun16->SetXTitle("p16");
226 fIntFlowGenFun16->SetYTitle("q16");
227 fHistList->Add(fIntFlowGenFun16);
228 }
aaebd73d 229
2188af53 230 //avarage of the real part of generating function for differential flow <Re(D[b][p][q])>
231 fDiffFlowGenFunRe = new TProfile3D("fDiffFlowGenFunRe","<Re(D[b][p][q])>",fgknBins,(Double_t)(fPtMin/fBinWidth),(Double_t)(fPtMax/fBinWidth),fgkPmax,0.,(Double_t)fgkPmax,fgkQmax,0.,(Double_t)fgkQmax);
232 fDiffFlowGenFunRe->SetXTitle("b");
233 fDiffFlowGenFunRe->SetYTitle("p");
234 fDiffFlowGenFunRe->SetZTitle("q");
52021ae2 235 fDiffFlowGenFunRe->SetTitleOffset(1.44,"X");
236 fDiffFlowGenFunRe->SetTitleOffset(1.44,"Y");
2188af53 237 fHistList->Add(fDiffFlowGenFunRe);
aaebd73d 238
2188af53 239 //avarage of the imaginary part of generating function for differential flow <Im(D[b][p][q])>
240 fDiffFlowGenFunIm = new TProfile3D("fDiffFlowGenFunIm","<Im(D[b][p][q])>",fgknBins,(Double_t)(fPtMin/fBinWidth),(Double_t)(fPtMax/fBinWidth),fgkPmax,0.,(Double_t)fgkPmax,fgkQmax,0.,(Double_t)fgkQmax);
241 fDiffFlowGenFunIm->SetXTitle("b");
242 fDiffFlowGenFunIm->SetYTitle("p");
243 fDiffFlowGenFunIm->SetZTitle("q");
52021ae2 244 fDiffFlowGenFunIm->SetTitleOffset(1.44,"X");
245 fDiffFlowGenFunIm->SetTitleOffset(1.44,"Y");
2188af53 246 fHistList->Add(fDiffFlowGenFunIm);
2188af53 247
52021ae2 248 //number of particles per pt bin
249 fBinNoOfParticles = new TProfile("fBinNoOfParticles","Number of particles per pt bin",fgknBins,fPtMin,fPtMax);
250 fBinNoOfParticles->SetXTitle("pt [GeV]");
251 fBinNoOfParticles->SetYTitle("");
252 fHistList->Add(fBinNoOfParticles);
253
254 /*
2188af53 255 fDiffFlowGenFunRe0 = new TProfile2D("fDiffFlowGenFunRe0","Re(<D[b][0][q]>)",fgknBins,(Double_t)(fPtMin/fBinWidth),(Double_t)(fPtMax/fBinWidth),fgkQmax,0.,(Double_t)fgkQmax);
256 fDiffFlowGenFunRe0->SetXTitle("b");
257 fDiffFlowGenFunRe0->SetYTitle("q");
258 fHistList->Add(fDiffFlowGenFunRe0);
259
b6cd16a9 260 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 261 fDiffFlowGenFunIm0->SetXTitle("b");
262 fDiffFlowGenFunIm0->SetYTitle("q");
263 fHistList->Add(fDiffFlowGenFunIm0);
264
265 fDiffFlowGenFunRe1 = new TProfile2D("fDiffFlowGenFunRe1","Re(<D[b][1][q]>)",fgknBins,(Double_t)(fPtMin/fBinWidth),(Double_t)(fPtMax/fBinWidth),fgkQmax,0.,(Double_t)fgkQmax);
266 fDiffFlowGenFunRe1->SetXTitle("b");
267 fDiffFlowGenFunRe1->SetYTitle("q");
268 fHistList->Add(fDiffFlowGenFunRe1);
269
270 fDiffFlowGenFunIm1 = new TProfile2D("fDiffFlowGenFunIm1","Im(<D[b][1][q]>)",fgknBins,(Double_t)(fPtMin/fBinWidth),(Double_t)(fPtMax/fBinWidth),fgkQmax,0.,(Double_t)fgkQmax);
271 fDiffFlowGenFunIm1->SetXTitle("b");
272 fDiffFlowGenFunIm1->SetYTitle("q");
273 fHistList->Add(fDiffFlowGenFunIm1);
274
275 fDiffFlowGenFunRe2 = new TProfile2D("fDiffFlowGenFunRe2","Re(<D[b][2][q]>)",fgknBins,(Double_t)(fPtMin/fBinWidth),(Double_t)(fPtMax/fBinWidth),fgkQmax,0.,(Double_t)fgkQmax);
276 fDiffFlowGenFunRe2->SetXTitle("b");
277 fDiffFlowGenFunRe2->SetYTitle("q");
278 fHistList->Add(fDiffFlowGenFunRe2);
279
280 fDiffFlowGenFunIm2 = new TProfile2D("fDiffFlowGenFunIm2","Im(<D[b][2][q]>)",fgknBins,(Double_t)(fPtMin/fBinWidth),(Double_t)(fPtMax/fBinWidth),fgkQmax,0.,(Double_t)fgkQmax);
281 fDiffFlowGenFunIm2->SetXTitle("b");
282 fDiffFlowGenFunIm2->SetYTitle("q");
283 fHistList->Add(fDiffFlowGenFunIm2);
284
285 fDiffFlowGenFunRe3 = new TProfile2D("fDiffFlowGenFunRe3","Re(<D[b][3][q]>)",fgknBins,(Double_t)(fPtMin/fBinWidth),(Double_t)(fPtMax/fBinWidth),fgkQmax,0.,(Double_t)fgkQmax);
286 fDiffFlowGenFunRe3->SetXTitle("b");
287 fDiffFlowGenFunRe3->SetYTitle("q");
288 fHistList->Add(fDiffFlowGenFunRe3);
289
290 fDiffFlowGenFunIm3 = new TProfile2D("fDiffFlowGenFunIm3","Im(<D[b][3][q]>)",fgknBins,(Double_t)(fPtMin/fBinWidth),(Double_t)(fPtMax/fBinWidth),fgkQmax,0.,(Double_t)fgkQmax);
291 fDiffFlowGenFunIm3->SetXTitle("b");
292 fDiffFlowGenFunIm3->SetYTitle("q");
293 fHistList->Add(fDiffFlowGenFunIm3);
294
295 fDiffFlowGenFunRe4 = new TProfile2D("fDiffFlowGenFunRe4","Re(<D[b][4][q]>)",fgknBins,(Double_t)(fPtMin/fBinWidth),(Double_t)(fPtMax/fBinWidth),fgkQmax,0.,(Double_t)fgkQmax);
296 fDiffFlowGenFunRe4->SetXTitle("b");
297 fDiffFlowGenFunRe4->SetYTitle("q");
298 fHistList->Add(fDiffFlowGenFunRe4);
299
300 fDiffFlowGenFunIm4 = new TProfile2D("fDiffFlowGenFunIm4","Im(<D[b][4][q]>)",fgknBins,(Double_t)(fPtMin/fBinWidth),(Double_t)(fPtMax/fBinWidth),fgkQmax,0.,(Double_t)fgkQmax);
301 fDiffFlowGenFunIm4->SetXTitle("b");
302 fDiffFlowGenFunIm4->SetYTitle("q");
303 fHistList->Add(fDiffFlowGenFunIm4);
304
305 fDiffFlowGenFunRe5 = new TProfile2D("fDiffFlowGenFunRe5","Re(<D[b][5][q]>)",fgkQmax,0.,(Double_t)fgkQmax,fgknBins,(Double_t)(fPtMin/fBinWidth),(Double_t)(fPtMax/fBinWidth));
306 fDiffFlowGenFunRe5->SetXTitle("b");
307 fDiffFlowGenFunRe5->SetYTitle("q");
308 fHistList->Add(fDiffFlowGenFunRe5);
309
310 fDiffFlowGenFunIm5 = new TProfile2D("fDiffFlowGenFunIm5","Im(<D[b][5][q]>)",fgknBins,(Double_t)(fPtMin/fBinWidth),(Double_t)(fPtMax/fBinWidth),fgkQmax,0.,(Double_t)fgkQmax);
311 fDiffFlowGenFunIm5->SetXTitle("b");
312 fDiffFlowGenFunIm5->SetYTitle("q");
313 fHistList->Add(fDiffFlowGenFunIm5);
314
315 fDiffFlowGenFunRe6 = new TProfile2D("fDiffFlowGenFunRe6","Re(<D[b][6][q]>)",fgknBins,(Double_t)(fPtMin/fBinWidth),(Double_t)(fPtMax/fBinWidth),fgkQmax,0.,(Double_t)fgkQmax);
316 fDiffFlowGenFunRe6->SetXTitle("b");
317 fDiffFlowGenFunRe6->SetYTitle("q");
318 fHistList->Add(fDiffFlowGenFunRe6);
319
320 fDiffFlowGenFunIm6 = new TProfile2D("fDiffFlowGenFunIm6","Im(<D[b][6][q]>)",fgknBins,(Double_t)(fPtMin/fBinWidth),(Double_t)(fPtMax/fBinWidth),fgkQmax,0.,(Double_t)fgkQmax);
321 fDiffFlowGenFunIm6->SetXTitle("b");
322 fDiffFlowGenFunIm6->SetYTitle("q");
323 fHistList->Add(fDiffFlowGenFunIm6);
324
325 fDiffFlowGenFunRe7 = new TProfile2D("fDiffFlowGenFunRe7","Re(<D[b][7][q]>)",fgknBins,(Double_t)(fPtMin/fBinWidth),(Double_t)(fPtMax/fBinWidth),fgkQmax,0.,(Double_t)fgkQmax);
326 fDiffFlowGenFunRe7->SetXTitle("b");
327 fDiffFlowGenFunRe7->SetYTitle("q");
328 fHistList->Add(fDiffFlowGenFunRe7);
329
330 fDiffFlowGenFunIm7 = new TProfile2D("fDiffFlowGenFunIm7","Im(<D[b][7][q]>)",fgknBins,(Double_t)(fPtMin/fBinWidth),(Double_t)(fPtMax/fBinWidth),fgkQmax,0.,(Double_t)fgkQmax);
331 fDiffFlowGenFunIm7->SetXTitle("b");
332 fDiffFlowGenFunIm7->SetYTitle("q");
333 fHistList->Add(fDiffFlowGenFunIm7);
52021ae2 334 */
2188af53 335
336 //common control histograms
52021ae2 337 fCommonHists = new AliFlowCommonHist("AliFlowCommonHistGFC");
338 fHistList->Add(fCommonHists);
339
340 //common histograms for final results (2nd order)
341 fCommonHistsResults2nd = new AliFlowCommonHistResults("AliFlowCommonHistResults2ndOrderGFC");
342 fHistList->Add(fCommonHistsResults2nd);
343
344 //common histograms for final results (4th order)
345 fCommonHistsResults4th = new AliFlowCommonHistResults("AliFlowCommonHistResults4thOrderGFC");
346 fHistList->Add(fCommonHistsResults4th);
347
348 //common histograms for final results (6th order)
349 fCommonHistsResults6th = new AliFlowCommonHistResults("AliFlowCommonHistResults6thOrderGFC");
350 fHistList->Add(fCommonHistsResults6th);
351
352 //common histograms for final results (8th order)
353 fCommonHistsResults8th = new AliFlowCommonHistResults("AliFlowCommonHistResults8thOrderGFC");
354 fHistList->Add(fCommonHistsResults8th);
aaebd73d 355
2188af53 356}//end of CreateOutputObjects()
357
358//================================================================================================================
359
360void AliFlowAnalysisWithCumulants::Make(AliFlowEventSimple* anEvent)
361{
362 //running over data
5b04fe11 363 Int_t nPrim = anEvent->NumberOfTracks();//total multiplicity
aaebd73d 364
b6cd16a9 365 //if(nPrim>30)//generating function formalism can be applied only for large multiplicities (to be improved in the future)
366 //{
2188af53 367 //fill the common control histograms
368 fCommonHists->FillControlHistograms(anEvent);
f1d945a1 369
2188af53 370 //initializing the generating function G[p][q] for integrated flow
371 Double_t G[fgkPmax][fgkQmax];
b6cd16a9 372
373 for(Int_t p=0;p<fgkPmax;p++)
374 {
375 for(Int_t q=0;q<fgkQmax;q++)
376 {
377 G[p][q]=1.;
378 }
f1d945a1 379 }
b6cd16a9 380
381 Int_t nEventNSelTracksIntFlow = anEvent->GetEventNSelTracksIntFlow(); //selected multiplicity (particles used for int. flow)
5b04fe11 382
b6cd16a9 383 Int_t nSelTracksIntFlow = 0; //cross-checking the selected multiplicity
384
385 for(Int_t i=0;i<nPrim;i++)
386 {
2188af53 387 fTrack=anEvent->GetTrack(i);
b6cd16a9 388 if(fTrack && fTrack->UseForIntegratedFlow())
389 {
2188af53 390 nSelTracksIntFlow++;
b6cd16a9 391 for(Int_t p=0;p<fgkPmax;p++)
392 {
393 for(Int_t q=0;q<fgkQmax;q++)
394 {
395 G[p][q]*=(1.+(2.*fR0*sqrt(p+1.)/nEventNSelTracksIntFlow)*cos(fgkFlow*fTrack->Phi()-2.*q*TMath::Pi()/fgkQmax));
f1d945a1 396 }
b6cd16a9 397 }
aaebd73d 398 }
b6cd16a9 399 }
400
2188af53 401 //storing the value of G[p][q] in 2D profile in order to get automatically the avarage <G[p][q]>
b6cd16a9 402 for(Int_t p=0;p<fgkPmax;p++)
403 {
404 for(Int_t q=0;q<fgkQmax;q++)
405 {
2188af53 406 fIntFlowGenFun->Fill((Double_t)p,(Double_t)q,G[p][q],1);
b6cd16a9 407 }
408 }
2188af53 409
410 //storing the selected multiplicity (if fAvMultIntFlow is not filled here then you had wrongly selected the particles used for integrated flow)
411 if(nSelTracksIntFlow==nEventNSelTracksIntFlow)
412 {
52021ae2 413 fAvMultIntFlowGFC->Fill(0.,nSelTracksIntFlow,1);
2188af53 414 }
415
416 //calculating Q-vector of event (needed for errors)
417 AliFlowVector fQVector;
418 fQVector.Set(0.,0.);
419 fQVector.SetMult(0);
b6cd16a9 420 fQVector=anEvent->GetQ(); //get the Q vector for this event
52021ae2 421 fQVectorComponentsGFC->Fill(0.,fQVector.X(),1); //in the 1st bin fill Q_x
422 fQVectorComponentsGFC->Fill(1.,fQVector.Y(),1); //in the 2nd bin fill Q_y
423 fQVectorComponentsGFC->Fill(2.,pow(fQVector.X(),2.),1); //in the 3rd bin fill (Q_x)^2
424 fQVectorComponentsGFC->Fill(3.,pow(fQVector.Y(),2.),1); //in the 4th bin fill (Q_y)^2
6d4fa5d3 425
2188af53 426 //two 3D profiles for differential flow
427 //second loop over data: evaluating the generating function D[b][p][q] for differential flow
428 //remark 0: D[b][p][q] is a complex number => real and imaginary part are calculated separately
b6cd16a9 429 //remark 1: note that bellow G[p][q] is needed, the value of generating function for integrated flow for the CURRENT event
2188af53 430 //remark 2: results are stored in two 3D profiles in order to automatically get <Re(D[b][p][q])> and <Im(D[b][p][q])>
b6cd16a9 431 for(Int_t i=0;i<nPrim;i++)
432 {
2188af53 433 fTrack=anEvent->GetTrack(i);
b6cd16a9 434 if(fTrack)
435 {
436 fBinNoOfParticles->Fill(fTrack->Pt(),fTrack->Pt(),1.);
437 if(fTrack->UseForIntegratedFlow() && fTrack->UseForDifferentialFlow())
438 {
439 for(Int_t p=0;p<fgkPmax;p++)
440 {
441 for(Int_t q=0;q<fgkQmax;q++)
442 {
443 //real part
444 fDiffFlowGenFunRe->Fill(fTrack->Pt()/fBinWidth,(Double_t)p,(Double_t)q,G[p][q]*cos(fgkMltpl*fgkFlow*fTrack->Phi())/(1.+(2.*fR0*sqrt(p+1.)/nSelTracksIntFlow)*cos(fgkFlow*fTrack->Phi()-2.*q*TMath::Pi()/fgkQmax)),1.);
445 //imaginary part
446 fDiffFlowGenFunIm->Fill(fTrack->Pt()/fBinWidth,(Double_t)p,(Double_t)q,G[p][q]*sin(fgkMltpl*fgkFlow*fTrack->Phi())/(1.+(2.*fR0*sqrt(p+1.)/nSelTracksIntFlow)*cos(fgkFlow*fTrack->Phi()-2.*q*TMath::Pi()/fgkQmax)),1.);
447 }
f1d945a1 448 }
b6cd16a9 449 }
450 else if(fTrack->UseForDifferentialFlow() && !(fTrack->UseForIntegratedFlow()))
451 {
452 for(Int_t p=0;p<fgkPmax;p++)
453 {
454 for(Int_t q=0;q<fgkQmax;q++)
455 {
456 //real part
457 fDiffFlowGenFunRe->Fill(fTrack->Pt()/fBinWidth,(Double_t)p,(Double_t)q,G[p][q]*cos(fgkMltpl*fgkFlow*fTrack->Phi()),1.);
458 //imaginary part
459 fDiffFlowGenFunIm->Fill(fTrack->Pt()/fBinWidth,(Double_t)p,(Double_t)q,G[p][q]*sin(fgkMltpl*fgkFlow*fTrack->Phi()),1.);
460 }
461 }
462 }
463 }//end of if(fTrack)
2188af53 464 }//ending the second loop over data
2188af53 465
b6cd16a9 466
467
52021ae2 468 /*
2188af53 469 //sixteen 2D profiles for differential flow
470 for(Int_t i=0;i<nPrim;i++){
471 fTrack=anEvent->GetTrack(i);
472 if (fTrack && fTrack->UseForDifferentialFlow()){
473 //for(Int_t p=0;p<fgkPmax;p++){
474 for(Int_t q=0;q<fgkQmax;q++){
475 //real part
476 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.);
477 //imaginary part
478 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.);
479 //-----------------------------------------------------------------------
480 //real part
481 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.);
482 //imaginary part
483 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.);
484 //-----------------------------------------------------------------------
485 //real part
486 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.);
487 //imaginary part
488 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.);
489 //-----------------------------------------------------------------------
490 //real part
491 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.);
492 //imaginary part
493 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.);
494 //-----------------------------------------------------------------------
495 //real part
496 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.);
497 //imaginary part
498 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.);
499 //-----------------------------------------------------------------------
500 //real part
501 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.);
502 //imaginary part
503 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.);
504 //-----------------------------------------------------------------------
505 //real part
506 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.);
507 //imaginary part
508 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.);
509 //-----------------------------------------------------------------------
510 //real part
511 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.);
512 //imaginary part
513 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.);
514 }
515 //}
516 }
517 }//ending the second loop over data
52021ae2 518 */
2188af53 519
b6cd16a9 520//}//end of if(nPrim>30)
5b04fe11 521
b6cd16a9 522
523 //numerical equations for cumulants solved up to different highest order
524
525
526
527
528
529
530
531 if(fOtherEquations)
532 {
533
534
535
536 Double_t G4[fgkPmax4][fgkQmax4];
537 Double_t G6[fgkPmax6][fgkQmax6];
538 Double_t G8[fgkPmax8][fgkQmax8];
539 Double_t G16[fgkPmax16][fgkQmax16];
540 for(Int_t p=0;p<fgkPmax16;p++)
541 {
542 for(Int_t q=0;q<fgkQmax16;q++)
543 {
544 G16[p][q]=1.;
545 if(p<fgkPmax8 && q<fgkQmax8)
546 {
547 G8[p][q]=1.;
548 if(p<fgkPmax6 && q<fgkQmax6)
549 {
550 G6[p][q]=1.;
551 if(p<fgkPmax4 && q<fgkQmax4)
552 {
553 G4[p][q]=1.;
554 }
555 }
556 }
557 }
558 }
559
560
561
562 //Int_t nEventNSelTracksIntFlowOE = anEvent->GetEventNSelTracksIntFlow();
563
564 //first loop over data: evaluating the generating function G[p][q] for integrated flow
565 for(Int_t i=0;i<nPrim;i++)
566 {
567 fTrack=anEvent->GetTrack(i);
568 if(fTrack && fTrack->UseForIntegratedFlow())
569 {
570 for(Int_t p=0;p<fgkPmax16;p++)
571 {
572 for(Int_t q=0;q<fgkQmax16;q++)
573 {
574 G16[p][q]*=(1.+(2.*fR0*sqrt(p+1.)/nEventNSelTracksIntFlow)*cos(fgkFlow*fTrack->Phi()-2.*q*TMath::Pi()/fgkQmax16));
575 if(p<fgkPmax8 && q<fgkQmax8)
576 {
577 G8[p][q]*=(1.+(2.*fR0*sqrt(p+1.)/nEventNSelTracksIntFlow)*cos(fgkFlow*fTrack->Phi()-2.*q*TMath::Pi()/fgkQmax8));
578 if(p<fgkPmax6 && q<fgkQmax6)
579 {
580 G6[p][q]*=(1.+(2.*fR0*sqrt(p+1.)/nEventNSelTracksIntFlow)*cos(fgkFlow*fTrack->Phi()-2.*q*TMath::Pi()/fgkQmax6));
581 if(p<fgkPmax4 && q<fgkQmax4)
582 {
583 G4[p][q]*=(1.+(2.*fR0*sqrt(p+1.)/nEventNSelTracksIntFlow)*cos(fgkFlow*fTrack->Phi()-2.*q*TMath::Pi()/fgkQmax4));
584 }
585 }
586 }
587 }
588 }
589 }//end of if(fTrack && fTrack->UseForIntegratedFlow())
590 }//ending the loop over data
591
592 //storing the value of G[p][q] in 2D profile in order to get automatically the avarage <G[p][q]>
593 for(Int_t p=0;p<fgkPmax16;p++)
594 {
595 for(Int_t q=0;q<fgkQmax16;q++)
596 {
597 fIntFlowGenFun16->Fill((Double_t)p,(Double_t)q,G16[p][q],1);
598 if(p<fgkPmax8 && q<fgkQmax8)
599 {
600 fIntFlowGenFun8->Fill((Double_t)p,(Double_t)q,G8[p][q],1);
601 if(p<fgkPmax6 && q<fgkQmax6)
602 {
603 fIntFlowGenFun6->Fill((Double_t)p,(Double_t)q,G6[p][q],1);
604 if(p<fgkPmax4 && q<fgkQmax4)
605 {
606 fIntFlowGenFun4->Fill((Double_t)p,(Double_t)q,G4[p][q],1);
607 }
608 }
609 }
610 }
611 }
612}//end of if(fOtherEquations)
613
614
615
616
aaebd73d 617}//end of Make()
f1d945a1 618
2188af53 619//================================================================================================================
f1d945a1 620
2188af53 621void AliFlowAnalysisWithCumulants::Finish()
622{
1315fe58 623 //calculate the final results
52021ae2 624 //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);
625
b6cd16a9 626 AliCumulantsFunctions finalResults(fIntFlowGenFun,fIntFlowGenFun4,fIntFlowGenFun6,fIntFlowGenFun8,fIntFlowGenFun16,fDiffFlowGenFunRe,fDiffFlowGenFunIm,fBinNoOfParticles, fIntFlowResultsGFC,fDiffFlowResults2ndOrderGFC,fDiffFlowResults4thOrderGFC,fDiffFlowResults6thOrderGFC,fDiffFlowResults8thOrderGFC, fAvMultIntFlowGFC,fQVectorComponentsGFC,fCommonHistsResults2nd, fCommonHistsResults4th,fCommonHistsResults6th,fCommonHistsResults8th);
627
628 finalResults.Calculate();
2188af53 629}
f1d945a1 630
1315fe58 631//================================================================================================================
632
633void AliFlowAnalysisWithCumulants::WriteHistograms(TString* outputFileName)
634{
635 //store the final results in output .root file
636 TFile *output = new TFile(outputFileName->Data(),"RECREATE");
b6cd16a9 637 output->mkdir("cobjGFC","cobjGFC");
638 output->cd("cobjGFC");
1315fe58 639 fHistList->Write();
640 delete output;
641}
642
643//================================================================================================================
644
f1d945a1 645
f1d945a1 646
647