]>
Commit | Line | Data |
---|---|---|
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 | |
43 | class TH1; | |
44 | class TGraph; | |
45 | class TPave; | |
46 | class TLatex; | |
47 | class TMarker; | |
48 | class TRandom3; | |
49 | class TObjArray; | |
50 | class TList; | |
51 | class TCanvas; | |
52 | class TSystem; | |
53 | class TROOT; | |
f1d945a1 | 54 | class AliFlowVector; |
55 | class TVector; | |
56 | ||
2188af53 | 57 | //================================================================================================================ |
f1d945a1 | 58 | |
59 | ClassImp(AliFlowAnalysisWithCumulants) | |
60 | ||
f1d945a1 | 61 | AliFlowAnalysisWithCumulants::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 | 126 | AliFlowAnalysisWithCumulants::~AliFlowAnalysisWithCumulants() |
127 | { | |
128 | //desctructor | |
129 | delete fHistList; | |
f55e2cac | 130 | } |
729ec982 | 131 | |
2188af53 | 132 | //================================================================================================================ |
133 | ||
134 | void 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 | ||
360 | void 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 | 621 | void 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 | ||
633 | void 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 |