]>
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), | |
e5e75b58 | 64 | fWeightsList(NULL), |
2188af53 | 65 | fR0(0), |
66 | fPtMax(0), | |
67 | fPtMin(0), | |
813a4157 | 68 | fBinWidthPt(0), |
69 | fgknBinsPt(0), | |
70 | fEtaMax(0), | |
71 | fEtaMin(0), | |
72 | fBinWidthEta(0), | |
73 | fgknBinsEta(0), | |
2188af53 | 74 | fAvQx(0), |
75 | fAvQy(0), | |
76 | fAvQ2x(0), | |
77 | fAvQ2y(0), | |
52021ae2 | 78 | fAvMultIntFlowGFC(NULL), |
79 | fQVectorComponentsGFC(NULL), | |
80 | fIntFlowResultsGFC(NULL), | |
81 | fDiffFlowResults2ndOrderGFC(NULL), | |
82 | fDiffFlowResults4thOrderGFC(NULL), | |
83 | fDiffFlowResults6thOrderGFC(NULL), | |
84 | fDiffFlowResults8thOrderGFC(NULL), | |
85 | fCommonHistsResults2nd(NULL), | |
86 | fCommonHistsResults4th(NULL), | |
87 | fCommonHistsResults6th(NULL), | |
88 | fCommonHistsResults8th(NULL), | |
2188af53 | 89 | fIntFlowGenFun(NULL), |
cb308e83 | 90 | fIntFlowGenFun4(NULL),//(only for other system of Eq.) |
91 | fIntFlowGenFun6(NULL),//(only for other system of Eq.) | |
92 | fIntFlowGenFun8(NULL),//(only for other system of Eq.) | |
93 | fIntFlowGenFun16(NULL),//(only for other system of Eq.) | |
94 | fAvMultIntFlow4GFC(NULL),//(only for other system of Eq.) | |
95 | fAvMultIntFlow6GFC(NULL),//(only for other system of Eq.) | |
96 | fAvMultIntFlow8GFC(NULL),//(only for other system of Eq.) | |
97 | fAvMultIntFlow16GFC(NULL),//(only for other system of Eq.) | |
813a4157 | 98 | fDiffFlowPtRPGenFunRe(NULL), |
99 | fDiffFlowPtRPGenFunIm(NULL), | |
100 | fPtBinRPNoOfParticles(NULL), | |
101 | fDiffFlowEtaRPGenFunRe(NULL), | |
102 | fDiffFlowEtaRPGenFunIm(NULL), | |
103 | fEtaBinRPNoOfParticles(NULL), | |
104 | fDiffFlowPtPOIGenFunRe(NULL), | |
105 | fDiffFlowPtPOIGenFunIm(NULL), | |
106 | fPtBinPOINoOfParticles(NULL), | |
107 | fDiffFlowEtaPOIGenFunRe(NULL), | |
108 | fDiffFlowEtaPOIGenFunIm(NULL), | |
109 | fEtaBinPOINoOfParticles(NULL), | |
52021ae2 | 110 | /* |
2188af53 | 111 | fDiffFlowGenFunRe0(NULL), |
112 | fDiffFlowGenFunRe1(NULL), | |
113 | fDiffFlowGenFunRe2(NULL), | |
114 | fDiffFlowGenFunRe3(NULL), | |
115 | fDiffFlowGenFunRe4(NULL), | |
116 | fDiffFlowGenFunRe5(NULL), | |
117 | fDiffFlowGenFunRe6(NULL), | |
118 | fDiffFlowGenFunRe7(NULL), | |
119 | fDiffFlowGenFunIm0(NULL), | |
120 | fDiffFlowGenFunIm1(NULL), | |
121 | fDiffFlowGenFunIm2(NULL), | |
122 | fDiffFlowGenFunIm3(NULL), | |
123 | fDiffFlowGenFunIm4(NULL), | |
124 | fDiffFlowGenFunIm5(NULL), | |
125 | fDiffFlowGenFunIm6(NULL), | |
126 | fDiffFlowGenFunIm7(NULL), | |
52021ae2 | 127 | */ |
b6cd16a9 | 128 | fCommonHists(NULL), |
e5e75b58 | 129 | fOtherEquations(kFALSE), |
130 | fUsePhiWeights(kFALSE), | |
131 | fUsePtWeights(kFALSE), | |
9dd53ff2 | 132 | fUseEtaWeights(kFALSE), |
133 | fAverageOfSquaredWeight(NULL) | |
2188af53 | 134 | { |
135 | //constructor | |
52021ae2 | 136 | fHistList = new TList(); |
e5e75b58 | 137 | fWeightsList = new TList(); |
138 | fWeightsList->SetName("Weights"); | |
2188af53 | 139 | fR0=AliFlowCumuConstants::fgR0; |
813a4157 | 140 | //Pt: |
2188af53 | 141 | fPtMax=AliFlowCommonConstants::GetPtMax(); |
142 | fPtMin=AliFlowCommonConstants::GetPtMin(); | |
813a4157 | 143 | fgknBinsPt=AliFlowCommonConstants::GetNbinsPt(); |
144 | if(fgknBinsPt) | |
145 | { | |
146 | fBinWidthPt=(fPtMax-fPtMin)/fgknBinsPt; | |
147 | } | |
148 | //Eta: | |
149 | fEtaMax=AliFlowCommonConstants::GetEtaMax(); | |
150 | fEtaMin=AliFlowCommonConstants::GetEtaMin(); | |
151 | fgknBinsEta=AliFlowCommonConstants::GetNbinsEta(); | |
152 | if(fgknBinsEta) | |
52021ae2 | 153 | { |
813a4157 | 154 | fBinWidthEta=(fEtaMax-fEtaMin)/fgknBinsEta; |
52021ae2 | 155 | } |
813a4157 | 156 | |
157 | fOtherEquations=AliFlowCumuConstants::fgOtherEquations; | |
2188af53 | 158 | } |
f1d945a1 | 159 | |
2188af53 | 160 | AliFlowAnalysisWithCumulants::~AliFlowAnalysisWithCumulants() |
161 | { | |
162 | //desctructor | |
163 | delete fHistList; | |
e5e75b58 | 164 | delete fWeightsList; |
f55e2cac | 165 | } |
729ec982 | 166 | |
2188af53 | 167 | //================================================================================================================ |
168 | ||
e5e75b58 | 169 | void AliFlowAnalysisWithCumulants::Init() |
2188af53 | 170 | { |
171 | //various output histograms | |
aaebd73d | 172 | |
52021ae2 | 173 | //average multiplicity |
9dd53ff2 | 174 | fAvMultIntFlowGFC = new TProfile("fAvMultIntFlowGFC","Average Weighted Multiplicity",1,0,1,"s"); |
52021ae2 | 175 | fAvMultIntFlowGFC->SetXTitle(""); |
176 | fAvMultIntFlowGFC->SetYTitle(""); | |
177 | fAvMultIntFlowGFC->SetLabelSize(0.06); | |
178 | fAvMultIntFlowGFC->SetMarkerStyle(25); | |
179 | fAvMultIntFlowGFC->SetLabelOffset(0.01); | |
9dd53ff2 | 180 | (fAvMultIntFlowGFC->GetXaxis())->SetBinLabel(1,"Average Weighted Multiplicity"); |
52021ae2 | 181 | fHistList->Add(fAvMultIntFlowGFC); |
aaebd73d | 182 | |
52021ae2 | 183 | //averages of Q-vector components (1st bin: <Q_x>, 2nd bin: <Q_y>, 3rd bin: <(Q_x)^2>, 4th bin: <(Q_y)^2>) |
184 | fQVectorComponentsGFC = new TProfile("fQVectorComponentsGFC","Average of Q-vector components",4,0.,4.); | |
185 | fQVectorComponentsGFC->SetXTitle(""); | |
186 | fQVectorComponentsGFC->SetYTitle(""); | |
187 | fQVectorComponentsGFC->SetLabelSize(0.06); | |
188 | fQVectorComponentsGFC->SetMarkerStyle(25); | |
189 | (fQVectorComponentsGFC->GetXaxis())->SetBinLabel(1,"<Q_{x}>"); | |
190 | (fQVectorComponentsGFC->GetXaxis())->SetBinLabel(2,"<Q_{y}>"); | |
191 | (fQVectorComponentsGFC->GetXaxis())->SetBinLabel(3,"<Q_{x}^{2}>"); | |
192 | (fQVectorComponentsGFC->GetXaxis())->SetBinLabel(4,"<Q_{y}^{2}>"); | |
193 | fHistList->Add(fQVectorComponentsGFC); | |
aaebd73d | 194 | |
2188af53 | 195 | //final results for integrated flow (v_n{2}, v_n{4},..., v_n{16}) from cumulants (by default n=2) |
b6cd16a9 | 196 | fIntFlowResultsGFC = new TH1D("fIntFlowResultsGFC","Integrated Flow From Cumulants (Generating Function)",4,0,4); |
52021ae2 | 197 | fIntFlowResultsGFC->SetXTitle(""); |
198 | fIntFlowResultsGFC->SetYTitle(""); | |
199 | fIntFlowResultsGFC->SetLabelSize(0.06); | |
200 | //fIntFlowResultsGFC->SetTickLength(1); | |
201 | fIntFlowResultsGFC->SetMarkerStyle(25); | |
202 | (fIntFlowResultsGFC->GetXaxis())->SetBinLabel(1,"v_{n}{2}"); | |
203 | (fIntFlowResultsGFC->GetXaxis())->SetBinLabel(2,"v_{n}{4}"); | |
204 | (fIntFlowResultsGFC->GetXaxis())->SetBinLabel(3,"v_{n}{6}"); | |
205 | (fIntFlowResultsGFC->GetXaxis())->SetBinLabel(4,"v_{n}{8}"); | |
52021ae2 | 206 | fHistList->Add(fIntFlowResultsGFC); |
aaebd73d | 207 | |
2188af53 | 208 | //final results for differential flow v_p/n{2} (by default p=n=2) |
813a4157 | 209 | fDiffFlowResults2ndOrderGFC = new TH1D("fDiffFlowResults2ndOrderGFC","v'_2/2{2}",fgknBinsPt,fPtMin,fPtMax); |
52021ae2 | 210 | fDiffFlowResults2ndOrderGFC->SetXTitle("pt [GeV]"); |
211 | fDiffFlowResults2ndOrderGFC->SetYTitle(""); | |
212 | fHistList->Add(fDiffFlowResults2ndOrderGFC); | |
2188af53 | 213 | |
214 | //final results for differential flow v_p/n{4} (by default p=n=2) | |
813a4157 | 215 | fDiffFlowResults4thOrderGFC = new TH1D("fDiffFlowResults4thOrderGFC","v'_2/2{4}",fgknBinsPt,fPtMin,fPtMax); |
52021ae2 | 216 | fDiffFlowResults4thOrderGFC->SetXTitle("pt [GeV]"); |
217 | fDiffFlowResults4thOrderGFC->SetYTitle(""); | |
218 | fHistList->Add(fDiffFlowResults4thOrderGFC); | |
aaebd73d | 219 | |
2188af53 | 220 | //final results for differential flow v_p/n{6} (by default p=n=2) |
813a4157 | 221 | fDiffFlowResults6thOrderGFC = new TH1D("fDiffFlowResults6thOrderGFC","v'_2/2{6}",fgknBinsPt,fPtMin,fPtMax); |
52021ae2 | 222 | fDiffFlowResults6thOrderGFC->SetXTitle("pt [GeV]"); |
223 | fDiffFlowResults6thOrderGFC->SetYTitle(""); | |
224 | fHistList->Add(fDiffFlowResults6thOrderGFC); | |
aaebd73d | 225 | |
2188af53 | 226 | //final results for differential flow v_p/n{8} (by default p=n=2) |
813a4157 | 227 | fDiffFlowResults8thOrderGFC = new TH1D("fDiffFlowResults8thOrderGFC","v'_2/2{8}",fgknBinsPt,fPtMin,fPtMax); |
52021ae2 | 228 | fDiffFlowResults8thOrderGFC->SetXTitle("pt [GeV]"); |
229 | fDiffFlowResults8thOrderGFC->SetYTitle(""); | |
230 | fHistList->Add(fDiffFlowResults8thOrderGFC); | |
aaebd73d | 231 | |
2188af53 | 232 | //avarage of the generating function for integrated flow <G[p][q]> |
233 | fIntFlowGenFun = new TProfile2D("fIntFlowGenFun","<G[p][q]>",fgkPmax,0.,(Double_t)fgkPmax,fgkQmax,0.,(Double_t)fgkQmax); | |
234 | fIntFlowGenFun->SetXTitle("p"); | |
235 | fIntFlowGenFun->SetYTitle("q"); | |
236 | fHistList->Add(fIntFlowGenFun); | |
b6cd16a9 | 237 | |
238 | if(fOtherEquations) | |
239 | { | |
cb308e83 | 240 | //avarage of the generating function for integrated flow <G[p][q]> (only for other system of Eq. - up to 4th order) |
b6cd16a9 | 241 | fIntFlowGenFun4 = new TProfile2D("fIntFlowGenFun4","<G4[p4][q4]>",fgkPmax4,0.,(Double_t)fgkPmax4,fgkQmax4,0.,(Double_t)fgkQmax4); |
242 | fIntFlowGenFun4->SetXTitle("p4"); | |
243 | fIntFlowGenFun4->SetYTitle("q4"); | |
244 | fHistList->Add(fIntFlowGenFun4); | |
245 | ||
cb308e83 | 246 | //avarage of the generating function for integrated flow <G[p][q]> (only for other system of Eq. - up to 6th order) |
b6cd16a9 | 247 | fIntFlowGenFun6 = new TProfile2D("fIntFlowGenFun6","<G6[p6][q6]>",fgkPmax6,0.,(Double_t)fgkPmax6,fgkQmax6,0.,(Double_t)fgkQmax6); |
248 | fIntFlowGenFun6->SetXTitle("p6"); | |
249 | fIntFlowGenFun6->SetYTitle("q6"); | |
250 | fHistList->Add(fIntFlowGenFun6); | |
251 | ||
cb308e83 | 252 | //avarage of the generating function for integrated flow <G[p][q]> (only for other system of Eq. - up to 8th order) |
b6cd16a9 | 253 | fIntFlowGenFun8 = new TProfile2D("fIntFlowGenFun8","<G8[p8][q8]>",fgkPmax8,0.,(Double_t)fgkPmax8,fgkQmax8,0.,(Double_t)fgkQmax8); |
254 | fIntFlowGenFun8->SetXTitle("p8"); | |
255 | fIntFlowGenFun8->SetYTitle("q8"); | |
256 | fHistList->Add(fIntFlowGenFun8); | |
257 | ||
cb308e83 | 258 | //avarage of the generating function for integrated flow <G[p][q]> (only for other system of Eq. - up to 16th order) |
b6cd16a9 | 259 | fIntFlowGenFun16 = new TProfile2D("fIntFlowGenFun16","<G16[p16][q16]>",fgkPmax16,0.,(Double_t)fgkPmax16,fgkQmax16,0.,(Double_t)fgkQmax16); |
260 | fIntFlowGenFun16->SetXTitle("p16"); | |
261 | fIntFlowGenFun16->SetYTitle("q16"); | |
262 | fHistList->Add(fIntFlowGenFun16); | |
cb308e83 | 263 | |
264 | //average multiplicity (only for other system of Eq. - up to 4th order) | |
265 | fAvMultIntFlow4GFC = new TProfile("fAvMultIntFlow4GFC","Average Multiplicity",1,0,1,"s"); | |
266 | fAvMultIntFlow4GFC->SetXTitle(""); | |
267 | fAvMultIntFlow4GFC->SetYTitle(""); | |
268 | fAvMultIntFlow4GFC->SetLabelSize(0.06); | |
269 | fAvMultIntFlow4GFC->SetMarkerStyle(25); | |
270 | fAvMultIntFlow4GFC->SetLabelOffset(0.01); | |
271 | (fAvMultIntFlow4GFC->GetXaxis())->SetBinLabel(1,"Average Multiplicity"); | |
272 | fHistList->Add(fAvMultIntFlow4GFC); | |
273 | ||
274 | //average multiplicity (only for other system of Eq. - up to 6th order) | |
275 | fAvMultIntFlow6GFC = new TProfile("fAvMultIntFlow6GFC","Average Multiplicity",1,0,1,"s"); | |
276 | fAvMultIntFlow6GFC->SetXTitle(""); | |
277 | fAvMultIntFlow6GFC->SetYTitle(""); | |
278 | fAvMultIntFlow6GFC->SetLabelSize(0.06); | |
279 | fAvMultIntFlow6GFC->SetMarkerStyle(25); | |
280 | fAvMultIntFlow6GFC->SetLabelOffset(0.01); | |
281 | (fAvMultIntFlow6GFC->GetXaxis())->SetBinLabel(1,"Average Multiplicity"); | |
282 | fHistList->Add(fAvMultIntFlow6GFC); | |
283 | ||
284 | //average multiplicity (only for other system of Eq. - up to 8th order) | |
285 | fAvMultIntFlow8GFC = new TProfile("fAvMultIntFlow8GFC","Average Multiplicity",1,0,1,"s"); | |
286 | fAvMultIntFlow8GFC->SetXTitle(""); | |
287 | fAvMultIntFlow8GFC->SetYTitle(""); | |
288 | fAvMultIntFlow8GFC->SetLabelSize(0.06); | |
289 | fAvMultIntFlow8GFC->SetMarkerStyle(25); | |
290 | fAvMultIntFlow8GFC->SetLabelOffset(0.01); | |
291 | (fAvMultIntFlow8GFC->GetXaxis())->SetBinLabel(1,"Average Multiplicity"); | |
292 | fHistList->Add(fAvMultIntFlow8GFC); | |
293 | ||
294 | //average multiplicity (only for other system of Eq. - up to 16th order) | |
295 | fAvMultIntFlow16GFC = new TProfile("fAvMultIntFlow16GFC","Average Multiplicity",1,0,1,"s"); | |
296 | fAvMultIntFlow16GFC->SetXTitle(""); | |
297 | fAvMultIntFlow16GFC->SetYTitle(""); | |
298 | fAvMultIntFlow16GFC->SetLabelSize(0.06); | |
299 | fAvMultIntFlow16GFC->SetMarkerStyle(25); | |
300 | fAvMultIntFlow16GFC->SetLabelOffset(0.01); | |
301 | (fAvMultIntFlow16GFC->GetXaxis())->SetBinLabel(1,"Average Multiplicity"); | |
302 | fHistList->Add(fAvMultIntFlow16GFC); | |
b6cd16a9 | 303 | } |
aaebd73d | 304 | |
813a4157 | 305 | //avarage of the real part of generating function for differential flow in Pt <Re(D[b][p][q])> |
306 | fDiffFlowPtRPGenFunRe = new TProfile3D("fDiffFlowPtRPGenFunRe","<Re(D[b][p][q])>",fgknBinsPt,(Double_t)(fPtMin/fBinWidthPt),(Double_t)(fPtMax/fBinWidthPt),fgkPmax,0.,(Double_t)fgkPmax,fgkQmax,0.,(Double_t)fgkQmax); | |
307 | fDiffFlowPtRPGenFunRe->SetXTitle("b"); | |
308 | fDiffFlowPtRPGenFunRe->SetYTitle("p"); | |
309 | fDiffFlowPtRPGenFunRe->SetZTitle("q"); | |
310 | fDiffFlowPtRPGenFunRe->SetTitleOffset(1.44,"X"); | |
311 | fDiffFlowPtRPGenFunRe->SetTitleOffset(1.44,"Y"); | |
312 | fHistList->Add(fDiffFlowPtRPGenFunRe); | |
313 | ||
314 | //avarage of the imaginary part of generating function for differential flow in Pt <Im(D[b][p][q])> | |
315 | fDiffFlowPtRPGenFunIm = new TProfile3D("fDiffFlowPtRPGenFunIm","<Im(D[b][p][q])>",fgknBinsPt,(Double_t)(fPtMin/fBinWidthPt),(Double_t)(fPtMax/fBinWidthPt),fgkPmax,0.,(Double_t)fgkPmax,fgkQmax,0.,(Double_t)fgkQmax); | |
316 | fDiffFlowPtRPGenFunIm->SetXTitle("b"); | |
317 | fDiffFlowPtRPGenFunIm->SetYTitle("p"); | |
318 | fDiffFlowPtRPGenFunIm->SetZTitle("q"); | |
319 | fDiffFlowPtRPGenFunIm->SetTitleOffset(1.44,"X"); | |
320 | fDiffFlowPtRPGenFunIm->SetTitleOffset(1.44,"Y"); | |
321 | fHistList->Add(fDiffFlowPtRPGenFunIm); | |
322 | ||
323 | //number of particles per pt bin | |
324 | fPtBinRPNoOfParticles = new TProfile("fPtBinRPNoOfParticles","Number of particles per #p_{t} bin",fgknBinsPt,fPtMin,fPtMax); | |
325 | fPtBinRPNoOfParticles->SetXTitle("pt [GeV]"); | |
326 | fPtBinRPNoOfParticles->SetYTitle(""); | |
327 | fHistList->Add(fPtBinRPNoOfParticles); | |
328 | ||
329 | //avarage of the real part of generating function for differential flow in Eta <Re(D[b][p][q])> | |
330 | fDiffFlowEtaRPGenFunRe = new TProfile3D("fDiffFlowEtaRPGenFunRe","<Re(D[b][p][q])>",fgknBinsEta,(Double_t)(fEtaMin/fBinWidthEta),(Double_t)(fEtaMax/fBinWidthEta),fgkPmax,0.,(Double_t)fgkPmax,fgkQmax,0.,(Double_t)fgkQmax); | |
331 | fDiffFlowEtaRPGenFunRe->SetXTitle("b"); | |
332 | fDiffFlowEtaRPGenFunRe->SetYTitle("p"); | |
333 | fDiffFlowEtaRPGenFunRe->SetZTitle("q"); | |
334 | fDiffFlowEtaRPGenFunRe->SetTitleOffset(1.44,"X"); | |
335 | fDiffFlowEtaRPGenFunRe->SetTitleOffset(1.44,"Y"); | |
336 | fHistList->Add(fDiffFlowEtaRPGenFunRe); | |
337 | ||
338 | //avarage of the imaginary part of generating function for differential flow in Eta <Im(D[b][p][q])> | |
339 | fDiffFlowEtaRPGenFunIm = new TProfile3D("fDiffFlowEtaRPGenFunIm","<Im(D[b][p][q])>",fgknBinsEta,(Double_t)(fEtaMin/fBinWidthEta),(Double_t)(fEtaMax/fBinWidthEta),fgkPmax,0.,(Double_t)fgkPmax,fgkQmax,0.,(Double_t)fgkQmax); | |
340 | fDiffFlowEtaRPGenFunIm->SetXTitle("b"); | |
341 | fDiffFlowEtaRPGenFunIm->SetYTitle("p"); | |
342 | fDiffFlowEtaRPGenFunIm->SetZTitle("q"); | |
343 | fDiffFlowEtaRPGenFunIm->SetTitleOffset(1.44,"X"); | |
344 | fDiffFlowEtaRPGenFunIm->SetTitleOffset(1.44,"Y"); | |
345 | fHistList->Add(fDiffFlowEtaRPGenFunIm); | |
346 | ||
347 | //number of particles per eta bin | |
348 | fEtaBinRPNoOfParticles = new TProfile("fEtaBinRPNoOfParticles","Number of particles per #eta bin",fgknBinsEta,fEtaMin,fEtaMax); | |
349 | fEtaBinRPNoOfParticles->SetXTitle("#eta"); | |
350 | fEtaBinRPNoOfParticles->SetYTitle(""); | |
351 | fHistList->Add(fEtaBinRPNoOfParticles); | |
352 | ||
353 | //avarage of the real part of generating function for differential flow in Pt <Re(D[b][p][q])> | |
354 | fDiffFlowPtPOIGenFunRe = new TProfile3D("fDiffFlowPtPOIGenFunRe","<Re(D[b][p][q])>",fgknBinsPt,(Double_t)(fPtMin/fBinWidthPt),(Double_t)(fPtMax/fBinWidthPt),fgkPmax,0.,(Double_t)fgkPmax,fgkQmax,0.,(Double_t)fgkQmax); | |
355 | fDiffFlowPtPOIGenFunRe->SetXTitle("b"); | |
356 | fDiffFlowPtPOIGenFunRe->SetYTitle("p"); | |
357 | fDiffFlowPtPOIGenFunRe->SetZTitle("q"); | |
358 | fDiffFlowPtPOIGenFunRe->SetTitleOffset(1.44,"X"); | |
359 | fDiffFlowPtPOIGenFunRe->SetTitleOffset(1.44,"Y"); | |
360 | fHistList->Add(fDiffFlowPtPOIGenFunRe); | |
361 | ||
362 | //avarage of the imaginary part of generating function for differential flow in Pt <Im(D[b][p][q])> | |
363 | fDiffFlowPtPOIGenFunIm = new TProfile3D("fDiffFlowPtPOIGenFunIm","<Im(D[b][p][q])>",fgknBinsPt,(Double_t)(fPtMin/fBinWidthPt),(Double_t)(fPtMax/fBinWidthPt),fgkPmax,0.,(Double_t)fgkPmax,fgkQmax,0.,(Double_t)fgkQmax); | |
364 | fDiffFlowPtPOIGenFunIm->SetXTitle("b"); | |
365 | fDiffFlowPtPOIGenFunIm->SetYTitle("p"); | |
366 | fDiffFlowPtPOIGenFunIm->SetZTitle("q"); | |
367 | fDiffFlowPtPOIGenFunIm->SetTitleOffset(1.44,"X"); | |
368 | fDiffFlowPtPOIGenFunIm->SetTitleOffset(1.44,"Y"); | |
369 | fHistList->Add(fDiffFlowPtPOIGenFunIm); | |
2188af53 | 370 | |
52021ae2 | 371 | //number of particles per pt bin |
813a4157 | 372 | fPtBinPOINoOfParticles = new TProfile("fPtBinPOINoOfParticles","Number of particles per #p_{t} bin",fgknBinsPt,fPtMin,fPtMax); |
373 | fPtBinPOINoOfParticles->SetXTitle("pt [GeV]"); | |
374 | fPtBinPOINoOfParticles->SetYTitle(""); | |
375 | fHistList->Add(fPtBinPOINoOfParticles); | |
376 | ||
377 | //avarage of the real part of generating function for differential flow in Eta <Re(D[b][p][q])> | |
378 | fDiffFlowEtaPOIGenFunRe = new TProfile3D("fDiffFlowEtaPOIGenFunRe","<Re(D[b][p][q])>",fgknBinsEta,(Double_t)(fEtaMin/fBinWidthEta),(Double_t)(fEtaMax/fBinWidthEta),fgkPmax,0.,(Double_t)fgkPmax,fgkQmax,0.,(Double_t)fgkQmax); | |
379 | fDiffFlowEtaPOIGenFunRe->SetXTitle("b"); | |
380 | fDiffFlowEtaPOIGenFunRe->SetYTitle("p"); | |
381 | fDiffFlowEtaPOIGenFunRe->SetZTitle("q"); | |
382 | fDiffFlowEtaPOIGenFunRe->SetTitleOffset(1.44,"X"); | |
383 | fDiffFlowEtaPOIGenFunRe->SetTitleOffset(1.44,"Y"); | |
384 | fHistList->Add(fDiffFlowEtaPOIGenFunRe); | |
385 | ||
386 | //avarage of the imaginary part of generating function for differential flow in Eta <Im(D[b][p][q])> | |
387 | fDiffFlowEtaPOIGenFunIm = new TProfile3D("fDiffFlowEtaPOIGenFunIm","<Im(D[b][p][q])>",fgknBinsEta,(Double_t)(fEtaMin/fBinWidthEta),(Double_t)(fEtaMax/fBinWidthEta),fgkPmax,0.,(Double_t)fgkPmax,fgkQmax,0.,(Double_t)fgkQmax); | |
388 | fDiffFlowEtaPOIGenFunIm->SetXTitle("b"); | |
389 | fDiffFlowEtaPOIGenFunIm->SetYTitle("p"); | |
390 | fDiffFlowEtaPOIGenFunIm->SetZTitle("q"); | |
391 | fDiffFlowEtaPOIGenFunIm->SetTitleOffset(1.44,"X"); | |
392 | fDiffFlowEtaPOIGenFunIm->SetTitleOffset(1.44,"Y"); | |
393 | fHistList->Add(fDiffFlowEtaPOIGenFunIm); | |
394 | ||
395 | //number of particles per eta bin | |
396 | fEtaBinPOINoOfParticles = new TProfile("fEtaBinPOINoOfParticles","Number of particles per #eta bin",fgknBinsEta,fEtaMin,fEtaMax); | |
397 | fEtaBinPOINoOfParticles->SetXTitle("#eta"); | |
398 | fEtaBinPOINoOfParticles->SetYTitle(""); | |
399 | fHistList->Add(fEtaBinPOINoOfParticles); | |
52021ae2 | 400 | |
401 | /* | |
2188af53 | 402 | fDiffFlowGenFunRe0 = new TProfile2D("fDiffFlowGenFunRe0","Re(<D[b][0][q]>)",fgknBins,(Double_t)(fPtMin/fBinWidth),(Double_t)(fPtMax/fBinWidth),fgkQmax,0.,(Double_t)fgkQmax); |
403 | fDiffFlowGenFunRe0->SetXTitle("b"); | |
404 | fDiffFlowGenFunRe0->SetYTitle("q"); | |
405 | fHistList->Add(fDiffFlowGenFunRe0); | |
406 | ||
b6cd16a9 | 407 | fDiffFlowGenFunIm0 = new TProfile2D("fDiffFlowGcout<<"HEY M1"<<endl;enFunIm0","Im(<D[b][0][q]>)",fgknBins,(Double_t)(fPtMin/fBinWidth),(Double_t)(fPtMax/fBinWidth),fgkQmax,0.,(Double_t)fgkQmax); |
2188af53 | 408 | fDiffFlowGenFunIm0->SetXTitle("b"); |
409 | fDiffFlowGenFunIm0->SetYTitle("q"); | |
410 | fHistList->Add(fDiffFlowGenFunIm0); | |
411 | ||
412 | fDiffFlowGenFunRe1 = new TProfile2D("fDiffFlowGenFunRe1","Re(<D[b][1][q]>)",fgknBins,(Double_t)(fPtMin/fBinWidth),(Double_t)(fPtMax/fBinWidth),fgkQmax,0.,(Double_t)fgkQmax); | |
413 | fDiffFlowGenFunRe1->SetXTitle("b"); | |
414 | fDiffFlowGenFunRe1->SetYTitle("q"); | |
415 | fHistList->Add(fDiffFlowGenFunRe1); | |
416 | ||
417 | fDiffFlowGenFunIm1 = new TProfile2D("fDiffFlowGenFunIm1","Im(<D[b][1][q]>)",fgknBins,(Double_t)(fPtMin/fBinWidth),(Double_t)(fPtMax/fBinWidth),fgkQmax,0.,(Double_t)fgkQmax); | |
418 | fDiffFlowGenFunIm1->SetXTitle("b"); | |
419 | fDiffFlowGenFunIm1->SetYTitle("q"); | |
420 | fHistList->Add(fDiffFlowGenFunIm1); | |
421 | ||
422 | fDiffFlowGenFunRe2 = new TProfile2D("fDiffFlowGenFunRe2","Re(<D[b][2][q]>)",fgknBins,(Double_t)(fPtMin/fBinWidth),(Double_t)(fPtMax/fBinWidth),fgkQmax,0.,(Double_t)fgkQmax); | |
423 | fDiffFlowGenFunRe2->SetXTitle("b"); | |
424 | fDiffFlowGenFunRe2->SetYTitle("q"); | |
425 | fHistList->Add(fDiffFlowGenFunRe2); | |
426 | ||
427 | fDiffFlowGenFunIm2 = new TProfile2D("fDiffFlowGenFunIm2","Im(<D[b][2][q]>)",fgknBins,(Double_t)(fPtMin/fBinWidth),(Double_t)(fPtMax/fBinWidth),fgkQmax,0.,(Double_t)fgkQmax); | |
428 | fDiffFlowGenFunIm2->SetXTitle("b"); | |
429 | fDiffFlowGenFunIm2->SetYTitle("q"); | |
430 | fHistList->Add(fDiffFlowGenFunIm2); | |
431 | ||
432 | fDiffFlowGenFunRe3 = new TProfile2D("fDiffFlowGenFunRe3","Re(<D[b][3][q]>)",fgknBins,(Double_t)(fPtMin/fBinWidth),(Double_t)(fPtMax/fBinWidth),fgkQmax,0.,(Double_t)fgkQmax); | |
433 | fDiffFlowGenFunRe3->SetXTitle("b"); | |
434 | fDiffFlowGenFunRe3->SetYTitle("q"); | |
435 | fHistList->Add(fDiffFlowGenFunRe3); | |
436 | ||
437 | fDiffFlowGenFunIm3 = new TProfile2D("fDiffFlowGenFunIm3","Im(<D[b][3][q]>)",fgknBins,(Double_t)(fPtMin/fBinWidth),(Double_t)(fPtMax/fBinWidth),fgkQmax,0.,(Double_t)fgkQmax); | |
438 | fDiffFlowGenFunIm3->SetXTitle("b"); | |
439 | fDiffFlowGenFunIm3->SetYTitle("q"); | |
440 | fHistList->Add(fDiffFlowGenFunIm3); | |
441 | ||
442 | fDiffFlowGenFunRe4 = new TProfile2D("fDiffFlowGenFunRe4","Re(<D[b][4][q]>)",fgknBins,(Double_t)(fPtMin/fBinWidth),(Double_t)(fPtMax/fBinWidth),fgkQmax,0.,(Double_t)fgkQmax); | |
443 | fDiffFlowGenFunRe4->SetXTitle("b"); | |
444 | fDiffFlowGenFunRe4->SetYTitle("q"); | |
445 | fHistList->Add(fDiffFlowGenFunRe4); | |
446 | ||
447 | fDiffFlowGenFunIm4 = new TProfile2D("fDiffFlowGenFunIm4","Im(<D[b][4][q]>)",fgknBins,(Double_t)(fPtMin/fBinWidth),(Double_t)(fPtMax/fBinWidth),fgkQmax,0.,(Double_t)fgkQmax); | |
448 | fDiffFlowGenFunIm4->SetXTitle("b"); | |
449 | fDiffFlowGenFunIm4->SetYTitle("q"); | |
450 | fHistList->Add(fDiffFlowGenFunIm4); | |
451 | ||
452 | fDiffFlowGenFunRe5 = new TProfile2D("fDiffFlowGenFunRe5","Re(<D[b][5][q]>)",fgkQmax,0.,(Double_t)fgkQmax,fgknBins,(Double_t)(fPtMin/fBinWidth),(Double_t)(fPtMax/fBinWidth)); | |
453 | fDiffFlowGenFunRe5->SetXTitle("b"); | |
454 | fDiffFlowGenFunRe5->SetYTitle("q"); | |
455 | fHistList->Add(fDiffFlowGenFunRe5); | |
456 | ||
457 | fDiffFlowGenFunIm5 = new TProfile2D("fDiffFlowGenFunIm5","Im(<D[b][5][q]>)",fgknBins,(Double_t)(fPtMin/fBinWidth),(Double_t)(fPtMax/fBinWidth),fgkQmax,0.,(Double_t)fgkQmax); | |
458 | fDiffFlowGenFunIm5->SetXTitle("b"); | |
459 | fDiffFlowGenFunIm5->SetYTitle("q"); | |
460 | fHistList->Add(fDiffFlowGenFunIm5); | |
461 | ||
462 | fDiffFlowGenFunRe6 = new TProfile2D("fDiffFlowGenFunRe6","Re(<D[b][6][q]>)",fgknBins,(Double_t)(fPtMin/fBinWidth),(Double_t)(fPtMax/fBinWidth),fgkQmax,0.,(Double_t)fgkQmax); | |
463 | fDiffFlowGenFunRe6->SetXTitle("b"); | |
464 | fDiffFlowGenFunRe6->SetYTitle("q"); | |
465 | fHistList->Add(fDiffFlowGenFunRe6); | |
466 | ||
467 | fDiffFlowGenFunIm6 = new TProfile2D("fDiffFlowGenFunIm6","Im(<D[b][6][q]>)",fgknBins,(Double_t)(fPtMin/fBinWidth),(Double_t)(fPtMax/fBinWidth),fgkQmax,0.,(Double_t)fgkQmax); | |
468 | fDiffFlowGenFunIm6->SetXTitle("b"); | |
469 | fDiffFlowGenFunIm6->SetYTitle("q"); | |
470 | fHistList->Add(fDiffFlowGenFunIm6); | |
471 | ||
472 | fDiffFlowGenFunRe7 = new TProfile2D("fDiffFlowGenFunRe7","Re(<D[b][7][q]>)",fgknBins,(Double_t)(fPtMin/fBinWidth),(Double_t)(fPtMax/fBinWidth),fgkQmax,0.,(Double_t)fgkQmax); | |
473 | fDiffFlowGenFunRe7->SetXTitle("b"); | |
474 | fDiffFlowGenFunRe7->SetYTitle("q"); | |
475 | fHistList->Add(fDiffFlowGenFunRe7); | |
476 | ||
477 | fDiffFlowGenFunIm7 = new TProfile2D("fDiffFlowGenFunIm7","Im(<D[b][7][q]>)",fgknBins,(Double_t)(fPtMin/fBinWidth),(Double_t)(fPtMax/fBinWidth),fgkQmax,0.,(Double_t)fgkQmax); | |
478 | fDiffFlowGenFunIm7->SetXTitle("b"); | |
479 | fDiffFlowGenFunIm7->SetYTitle("q"); | |
480 | fHistList->Add(fDiffFlowGenFunIm7); | |
52021ae2 | 481 | */ |
2188af53 | 482 | |
483 | //common control histograms | |
52021ae2 | 484 | fCommonHists = new AliFlowCommonHist("AliFlowCommonHistGFC"); |
485 | fHistList->Add(fCommonHists); | |
486 | ||
487 | //common histograms for final results (2nd order) | |
488 | fCommonHistsResults2nd = new AliFlowCommonHistResults("AliFlowCommonHistResults2ndOrderGFC"); | |
489 | fHistList->Add(fCommonHistsResults2nd); | |
490 | ||
491 | //common histograms for final results (4th order) | |
492 | fCommonHistsResults4th = new AliFlowCommonHistResults("AliFlowCommonHistResults4thOrderGFC"); | |
493 | fHistList->Add(fCommonHistsResults4th); | |
494 | ||
495 | //common histograms for final results (6th order) | |
496 | fCommonHistsResults6th = new AliFlowCommonHistResults("AliFlowCommonHistResults6thOrderGFC"); | |
497 | fHistList->Add(fCommonHistsResults6th); | |
498 | ||
499 | //common histograms for final results (8th order) | |
500 | fCommonHistsResults8th = new AliFlowCommonHistResults("AliFlowCommonHistResults8thOrderGFC"); | |
501 | fHistList->Add(fCommonHistsResults8th); | |
e5e75b58 | 502 | |
9dd53ff2 | 503 | //<w^2> |
504 | fAverageOfSquaredWeight = new TProfile("fAverageOfSquaredWeight","<w^{2}>",1,0,1); | |
505 | fAverageOfSquaredWeight->SetLabelSize(0.06); | |
506 | fAverageOfSquaredWeight->SetMarkerStyle(25); | |
507 | fAverageOfSquaredWeight->SetLabelOffset(0.01); | |
508 | (fAverageOfSquaredWeight->GetXaxis())->SetBinLabel(1,"<w^{2}>"); | |
509 | fHistList->Add(fAverageOfSquaredWeight); | |
510 | ||
e5e75b58 | 511 | // add list fWeightsList with weights to the main list |
512 | fHistList->Add(fWeightsList); | |
513 | }//end of Init() | |
2188af53 | 514 | |
515 | //================================================================================================================ | |
516 | ||
517 | void AliFlowAnalysisWithCumulants::Make(AliFlowEventSimple* anEvent) | |
518 | { | |
cb308e83 | 519 | //running over data: |
520 | Int_t nPrim = anEvent->NumberOfTracks(); //total multiplicity | |
521 | ||
b7cb54d5 | 522 | Int_t nEventNSelTracksRP = anEvent->GetEventNSelTracksRP(); //selected multiplicity (particles used for int. flow) |
e5e75b58 | 523 | |
9dd53ff2 | 524 | Int_t n = 2; // int flow harmonic (to be improved) |
525 | ||
e5e75b58 | 526 | //--------------------------------------------------------------------------------------------------------- |
527 | // weights: | |
528 | Bool_t useWeights = fUsePhiWeights||fUsePtWeights||fUseEtaWeights; | |
529 | ||
e5e75b58 | 530 | TH1F *phiWeights = NULL; // histogram with phi weights |
531 | TH1D *ptWeights = NULL; // histogram with pt weights | |
532 | TH1D *etaWeights = NULL; // histogram with eta weights | |
533 | ||
2f5e6dea | 534 | Double_t wPhi = 1.; // phi weight |
535 | Double_t wPt = 1.; // pt weight | |
536 | Double_t wEta = 1.; // eta weight | |
e5e75b58 | 537 | |
538 | if(useWeights) | |
539 | { | |
540 | if(!fWeightsList) | |
541 | { | |
17100608 | 542 | cout<<" WARNING: fWeightsList is NULL pointer in GFC::Make() !!!!"<<endl; |
e5e75b58 | 543 | exit(0); |
544 | } | |
545 | if(fUsePhiWeights) | |
546 | { | |
547 | phiWeights = dynamic_cast<TH1F *>(fWeightsList->FindObject("phi_weights")); | |
548 | if(!phiWeights) | |
549 | { | |
17100608 | 550 | cout<<" WARNING: couldn't access the histogram with phi weights in GFC::Make() !!!!"<<endl; |
e5e75b58 | 551 | exit(0); |
552 | } | |
553 | } | |
554 | if(fUsePtWeights) | |
555 | { | |
556 | ptWeights = dynamic_cast<TH1D *>(fWeightsList->FindObject("pt_weights")); | |
557 | if(!ptWeights) | |
558 | { | |
17100608 | 559 | cout<<" WARNING: couldn't access the histogram with pt weights in GFC::Make() !!!!"<<endl; |
e5e75b58 | 560 | exit(0); |
561 | } | |
562 | } | |
563 | if(fUseEtaWeights) | |
564 | { | |
565 | etaWeights = dynamic_cast<TH1D *>(fWeightsList->FindObject("eta_weights")); | |
566 | if(!etaWeights) | |
567 | { | |
17100608 | 568 | cout<<" WARNING: couldn't access the histogram with eta weights in GFC::Make() !!!!"<<endl; |
e5e75b58 | 569 | exit(0); |
570 | } | |
571 | } | |
572 | } | |
573 | //--------------------------------------------------------------------------------------------------------- | |
aaebd73d | 574 | |
b7cb54d5 | 575 | if(nEventNSelTracksRP>9) //generating function formalism applied here make sense only for selected multiplicity >= 10 |
cb308e83 | 576 | { |
2188af53 | 577 | //fill the common control histograms |
578 | fCommonHists->FillControlHistograms(anEvent); | |
f1d945a1 | 579 | |
2188af53 | 580 | //initializing the generating function G[p][q] for integrated flow |
5270f185 | 581 | Double_t genfunG[fgkPmax][fgkQmax]; |
b6cd16a9 | 582 | |
583 | for(Int_t p=0;p<fgkPmax;p++) | |
17100608 | 584 | { |
585 | for(Int_t q=0;q<fgkQmax;q++) | |
b6cd16a9 | 586 | { |
17100608 | 587 | genfunG[p][q]=1.; |
588 | } | |
589 | } | |
5b04fe11 | 590 | |
b7cb54d5 | 591 | Int_t nSelTracksRP = 0; //cross-checking the selected multiplicity |
2f5e6dea | 592 | |
593 | Double_t dPhi = 0.; | |
594 | Double_t dPt = 0.; | |
595 | Double_t dEta = 0.; | |
596 | Int_t nBinsPhi = 0; | |
b6cd16a9 | 597 | |
598 | for(Int_t i=0;i<nPrim;i++) | |
599 | { | |
2188af53 | 600 | fTrack=anEvent->GetTrack(i); |
b7cb54d5 | 601 | if(fTrack && fTrack->InRPSelection()) |
b6cd16a9 | 602 | { |
b7cb54d5 | 603 | nSelTracksRP++; |
2f5e6dea | 604 | // get azimuthal angle, momentum and pseudorapidity of a particle: |
605 | dPhi = fTrack->Phi(); | |
606 | dPt = fTrack->Pt(); | |
607 | dEta = fTrack->Eta(); | |
608 | // phi weights: | |
609 | if(fUsePhiWeights) | |
610 | { | |
611 | nBinsPhi = phiWeights->GetNbinsX(); | |
612 | if(nBinsPhi) | |
613 | { | |
614 | wPhi = phiWeights->GetBinContent(1+(Int_t)(TMath::Floor(dPhi*nBinsPhi/TMath::TwoPi()))); | |
615 | } | |
616 | } | |
617 | // pt weights: | |
618 | if(fUsePtWeights) | |
619 | { | |
620 | if(fBinWidthPt) | |
621 | { | |
622 | wPt = ptWeights->GetBinContent(1+(Int_t)(TMath::Floor((dPt-fPtMin)/fBinWidthPt))); | |
623 | } | |
624 | } | |
625 | // eta weights: | |
626 | if(fUseEtaWeights) | |
627 | { | |
628 | if(fBinWidthEta) | |
629 | { | |
630 | wEta=etaWeights->GetBinContent(1+(Int_t)(TMath::Floor((dEta-fEtaMin)/fBinWidthEta))); | |
631 | } | |
632 | } | |
633 | // evaluate the generating function: | |
b6cd16a9 | 634 | for(Int_t p=0;p<fgkPmax;p++) |
635 | { | |
636 | for(Int_t q=0;q<fgkQmax;q++) | |
637 | { | |
b7cb54d5 | 638 | genfunG[p][q]*=(1.+wPhi*wPt*wEta*(2.*fR0*sqrt(p+1.)/nEventNSelTracksRP)*cos(fgkFlow*dPhi-2.*q*TMath::Pi()/fgkQmax)); |
f1d945a1 | 639 | } |
9dd53ff2 | 640 | } |
641 | // calculate <w^2> | |
642 | fAverageOfSquaredWeight->Fill(0.,pow(wPhi*wPt*wEta,2.),1); | |
17100608 | 643 | } // end of if(fTrack && fTrack->InRPSelection()) |
2f5e6dea | 644 | } // end of for(Int_t i=0;i<nPrim;i++) |
b6cd16a9 | 645 | |
2188af53 | 646 | //storing the value of G[p][q] in 2D profile in order to get automatically the avarage <G[p][q]> |
b6cd16a9 | 647 | for(Int_t p=0;p<fgkPmax;p++) |
648 | { | |
649 | for(Int_t q=0;q<fgkQmax;q++) | |
650 | { | |
5270f185 | 651 | fIntFlowGenFun->Fill((Double_t)p,(Double_t)q,genfunG[p][q],1); |
b6cd16a9 | 652 | } |
653 | } | |
2188af53 | 654 | |
655 | //storing the selected multiplicity (if fAvMultIntFlow is not filled here then you had wrongly selected the particles used for integrated flow) | |
b7cb54d5 | 656 | if(nSelTracksRP==nEventNSelTracksRP) |
2188af53 | 657 | { |
b7cb54d5 | 658 | fAvMultIntFlowGFC->Fill(0.,nSelTracksRP,1); |
17100608 | 659 | } else |
660 | { | |
661 | cout<<"WARNING: nSelTracksRP != nEventNSelTracksRP in GFC::Make(). Something is wrong with RP flagging !!!!"<<endl; | |
662 | } | |
2188af53 | 663 | |
9dd53ff2 | 664 | // calculating Q-vector of event (needed for errors) |
2188af53 | 665 | AliFlowVector fQVector; |
666 | fQVector.Set(0.,0.); | |
667 | fQVector.SetMult(0); | |
9dd53ff2 | 668 | fQVector=anEvent->GetQ(1*n,fWeightsList,fUsePhiWeights,fUsePtWeights,fUseEtaWeights); // get the Q vector for this event |
669 | fQVectorComponentsGFC->Fill(0.,fQVector.X(),1); // in the 1st bin fill Q_x | |
670 | fQVectorComponentsGFC->Fill(1.,fQVector.Y(),1); // in the 2nd bin fill Q_y | |
671 | fQVectorComponentsGFC->Fill(2.,pow(fQVector.X(),2.),1); // in the 3rd bin fill (Q_x)^2 | |
672 | fQVectorComponentsGFC->Fill(3.,pow(fQVector.Y(),2.),1); // in the 4th bin fill (Q_y)^2 | |
6d4fa5d3 | 673 | |
813a4157 | 674 | //3D profiles for differential flow in pt and eta |
2188af53 | 675 | //second loop over data: evaluating the generating function D[b][p][q] for differential flow |
676 | //remark 0: D[b][p][q] is a complex number => real and imaginary part are calculated separately | |
b6cd16a9 | 677 | //remark 1: note that bellow G[p][q] is needed, the value of generating function for integrated flow for the CURRENT event |
813a4157 | 678 | //remark 2: results are stored in 3D profiles in order to automatically get <Re(D[b][p][q])> and <Im(D[b][p][q])> |
b6cd16a9 | 679 | for(Int_t i=0;i<nPrim;i++) |
680 | { | |
2188af53 | 681 | fTrack=anEvent->GetTrack(i); |
b6cd16a9 | 682 | if(fTrack) |
683 | { | |
b7cb54d5 | 684 | if(fTrack->InRPSelection() && fTrack->InPOISelection()) |
b6cd16a9 | 685 | { |
813a4157 | 686 | fPtBinPOINoOfParticles->Fill(fTrack->Pt(),fTrack->Pt(),1.); |
687 | fEtaBinPOINoOfParticles->Fill(fTrack->Eta(),fTrack->Eta(),1.); | |
b6cd16a9 | 688 | for(Int_t p=0;p<fgkPmax;p++) |
689 | { | |
690 | for(Int_t q=0;q<fgkQmax;q++) | |
691 | { | |
813a4157 | 692 | //real part (Pt) |
b7cb54d5 | 693 | fDiffFlowPtPOIGenFunRe->Fill(fTrack->Pt()/fBinWidthPt,(Double_t)p,(Double_t)q,genfunG[p][q]*cos(fgkMltpl*fgkFlow*fTrack->Phi())/(1.+(2.*fR0*sqrt(p+1.)/nSelTracksRP)*cos(fgkFlow*fTrack->Phi()-2.*q*TMath::Pi()/fgkQmax)),1.); |
813a4157 | 694 | //imaginary part (Pt) |
b7cb54d5 | 695 | fDiffFlowPtPOIGenFunIm->Fill(fTrack->Pt()/fBinWidthPt,(Double_t)p,(Double_t)q,genfunG[p][q]*sin(fgkMltpl*fgkFlow*fTrack->Phi())/(1.+(2.*fR0*sqrt(p+1.)/nSelTracksRP)*cos(fgkFlow*fTrack->Phi()-2.*q*TMath::Pi()/fgkQmax)),1.); |
813a4157 | 696 | //real part (Eta) |
b7cb54d5 | 697 | fDiffFlowEtaPOIGenFunRe->Fill(fTrack->Eta()/fBinWidthEta,(Double_t)p,(Double_t)q,genfunG[p][q]*cos(fgkMltpl*fgkFlow*fTrack->Phi())/(1.+(2.*fR0*sqrt(p+1.)/nSelTracksRP)*cos(fgkFlow*fTrack->Phi()-2.*q*TMath::Pi()/fgkQmax)),1.); |
813a4157 | 698 | //imaginary part (Eta) |
b7cb54d5 | 699 | fDiffFlowEtaPOIGenFunIm->Fill(fTrack->Eta()/fBinWidthEta,(Double_t)p,(Double_t)q,genfunG[p][q]*sin(fgkMltpl*fgkFlow*fTrack->Phi())/(1.+(2.*fR0*sqrt(p+1.)/nSelTracksRP)*cos(fgkFlow*fTrack->Phi()-2.*q*TMath::Pi()/fgkQmax)),1.); |
b6cd16a9 | 700 | } |
f1d945a1 | 701 | } |
b6cd16a9 | 702 | } |
b7cb54d5 | 703 | else if(fTrack->InPOISelection() && !(fTrack->InRPSelection())) |
b6cd16a9 | 704 | { |
813a4157 | 705 | fPtBinPOINoOfParticles->Fill(fTrack->Pt(),fTrack->Pt(),1.); |
706 | fEtaBinPOINoOfParticles->Fill(fTrack->Eta(),fTrack->Eta(),1.); | |
b6cd16a9 | 707 | for(Int_t p=0;p<fgkPmax;p++) |
708 | { | |
709 | for(Int_t q=0;q<fgkQmax;q++) | |
710 | { | |
813a4157 | 711 | //real part (Pt) |
5270f185 | 712 | fDiffFlowPtPOIGenFunRe->Fill(fTrack->Pt()/fBinWidthPt,(Double_t)p,(Double_t)q,genfunG[p][q]*cos(fgkMltpl*fgkFlow*fTrack->Phi()),1.); |
813a4157 | 713 | //imaginary part (Pt) |
5270f185 | 714 | fDiffFlowPtPOIGenFunIm->Fill(fTrack->Pt()/fBinWidthPt,(Double_t)p,(Double_t)q,genfunG[p][q]*sin(fgkMltpl*fgkFlow*fTrack->Phi()),1.); |
813a4157 | 715 | //real part (Eta) |
5270f185 | 716 | fDiffFlowEtaPOIGenFunRe->Fill(fTrack->Eta()/fBinWidthEta,(Double_t)p,(Double_t)q,genfunG[p][q]*cos(fgkMltpl*fgkFlow*fTrack->Phi()),1.); |
813a4157 | 717 | //imaginary part (Eta) |
5270f185 | 718 | fDiffFlowEtaPOIGenFunIm->Fill(fTrack->Eta()/fBinWidthEta,(Double_t)p,(Double_t)q,genfunG[p][q]*sin(fgkMltpl*fgkFlow*fTrack->Phi()),1.); |
b6cd16a9 | 719 | } |
720 | } | |
813a4157 | 721 | } |
722 | //RP: | |
b7cb54d5 | 723 | if(fTrack->InRPSelection()) |
813a4157 | 724 | { |
725 | fPtBinRPNoOfParticles->Fill(fTrack->Pt(),fTrack->Pt(),1.); | |
726 | fEtaBinRPNoOfParticles->Fill(fTrack->Eta(),fTrack->Eta(),1.); | |
727 | for(Int_t p=0;p<fgkPmax;p++) | |
728 | { | |
729 | for(Int_t q=0;q<fgkQmax;q++) | |
730 | { | |
731 | //real part (Pt) | |
b7cb54d5 | 732 | fDiffFlowPtRPGenFunRe->Fill(fTrack->Pt()/fBinWidthPt,(Double_t)p,(Double_t)q,genfunG[p][q]*cos(fgkMltpl*fgkFlow*fTrack->Phi())/(1.+(2.*fR0*sqrt(p+1.)/nSelTracksRP)*cos(fgkFlow*fTrack->Phi()-2.*q*TMath::Pi()/fgkQmax)),1.); |
813a4157 | 733 | //imaginary part (Pt) |
b7cb54d5 | 734 | fDiffFlowPtRPGenFunIm->Fill(fTrack->Pt()/fBinWidthPt,(Double_t)p,(Double_t)q,genfunG[p][q]*sin(fgkMltpl*fgkFlow*fTrack->Phi())/(1.+(2.*fR0*sqrt(p+1.)/nSelTracksRP)*cos(fgkFlow*fTrack->Phi()-2.*q*TMath::Pi()/fgkQmax)),1.); |
813a4157 | 735 | //real part (Eta) |
b7cb54d5 | 736 | fDiffFlowEtaRPGenFunRe->Fill(fTrack->Eta()/fBinWidthEta,(Double_t)p,(Double_t)q,genfunG[p][q]*cos(fgkMltpl*fgkFlow*fTrack->Phi())/(1.+(2.*fR0*sqrt(p+1.)/nSelTracksRP)*cos(fgkFlow*fTrack->Phi()-2.*q*TMath::Pi()/fgkQmax)),1.); |
813a4157 | 737 | //imaginary part (Eta) |
b7cb54d5 | 738 | fDiffFlowEtaRPGenFunIm->Fill(fTrack->Eta()/fBinWidthEta,(Double_t)p,(Double_t)q,genfunG[p][q]*sin(fgkMltpl*fgkFlow*fTrack->Phi())/(1.+(2.*fR0*sqrt(p+1.)/nSelTracksRP)*cos(fgkFlow*fTrack->Phi()-2.*q*TMath::Pi()/fgkQmax)),1.); |
813a4157 | 739 | } |
740 | } | |
b7cb54d5 | 741 | }//end of if(fTrack->InRPSelection()) |
b6cd16a9 | 742 | }//end of if(fTrack) |
2188af53 | 743 | }//ending the second loop over data |
2188af53 | 744 | |
b6cd16a9 | 745 | |
746 | ||
52021ae2 | 747 | /* |
2188af53 | 748 | //sixteen 2D profiles for differential flow |
749 | for(Int_t i=0;i<nPrim;i++){ | |
750 | fTrack=anEvent->GetTrack(i); | |
b7cb54d5 | 751 | if (fTrack && fTrack->InPOISelection()){ |
2188af53 | 752 | //for(Int_t p=0;p<fgkPmax;p++){ |
753 | for(Int_t q=0;q<fgkQmax;q++){ | |
754 | //real part | |
b7cb54d5 | 755 | fDiffFlowGenFunRe0->Fill(fTrack->Pt()/fBinWidth,(Double_t)q,genfunG[0][q]*cos(fgkMltpl*fgkFlow*fTrack->Phi())/(1.+(2.*fR0*sqrt(0.+1.)/nSelTracksRP)*cos(fgkFlow*fTrack->Phi()-2.*q*TMath::Pi()/fgkQmax)),1.); |
2188af53 | 756 | //imaginary part |
b7cb54d5 | 757 | fDiffFlowGenFunIm0->Fill(fTrack->Pt()/fBinWidth,(Double_t)q,genfunG[0][q]*sin(fgkMltpl*fgkFlow*fTrack->Phi())/(1.+(2.*fR0*sqrt(0.+1.)/nSelTracksRP)*cos(fgkFlow*fTrack->Phi()-2.*q*TMath::Pi()/fgkQmax)),1.); |
2188af53 | 758 | //----------------------------------------------------------------------- |
759 | //real part | |
b7cb54d5 | 760 | fDiffFlowGenFunRe1->Fill(fTrack->Pt()/fBinWidth,(Double_t)q,genfunG[1][q]*cos(fgkMltpl*fgkFlow*fTrack->Phi())/(1.+(2.*fR0*sqrt(1.+1.)/nSelTracksRP)*cos(fgkFlow*fTrack->Phi()-2.*q*TMath::Pi()/fgkQmax)),1.); |
2188af53 | 761 | //imaginary part |
b7cb54d5 | 762 | fDiffFlowGenFunIm1->Fill(fTrack->Pt()/fBinWidth,(Double_t)q,genfunG[1][q]*sin(fgkMltpl*fgkFlow*fTrack->Phi())/(1.+(2.*fR0*sqrt(1.+1.)/nSelTracksRP)*cos(fgkFlow*fTrack->Phi()-2.*q*TMath::Pi()/fgkQmax)),1.); |
2188af53 | 763 | //----------------------------------------------------------------------- |
764 | //real part | |
b7cb54d5 | 765 | fDiffFlowGenFunRe2->Fill(fTrack->Pt()/fBinWidth,(Double_t)q,genfunG[2][q]*cos(fgkMltpl*fgkFlow*fTrack->Phi())/(1.+(2.*fR0*sqrt(2.+1.)/nSelTracksRP)*cos(fgkFlow*fTrack->Phi()-2.*q*TMath::Pi()/fgkQmax)),1.); |
2188af53 | 766 | //imaginary part |
b7cb54d5 | 767 | fDiffFlowGenFunIm2->Fill(fTrack->Pt()/fBinWidth,(Double_t)q,genfunG[2][q]*sin(fgkMltpl*fgkFlow*fTrack->Phi())/(1.+(2.*fR0*sqrt(2.+1.)/nSelTracksRP)*cos(fgkFlow*fTrack->Phi()-2.*q*TMath::Pi()/fgkQmax)),1.); |
2188af53 | 768 | //----------------------------------------------------------------------- |
769 | //real part | |
b7cb54d5 | 770 | fDiffFlowGenFunRe3->Fill(fTrack->Pt()/fBinWidth,(Double_t)q,genfunG[3][q]*cos(fgkMltpl*fgkFlow*fTrack->Phi())/(1.+(2.*fR0*sqrt(3.+1.)/nSelTracksRP)*cos(fgkFlow*fTrack->Phi()-2.*q*TMath::Pi()/fgkQmax)),1.); |
2188af53 | 771 | //imaginary part |
b7cb54d5 | 772 | fDiffFlowGenFunIm3->Fill(fTrack->Pt()/fBinWidth,(Double_t)q,genfunG[3][q]*sin(fgkMltpl*fgkFlow*fTrack->Phi())/(1.+(2.*fR0*sqrt(3.+1.)/nSelTracksRP)*cos(fgkFlow*fTrack->Phi()-2.*q*TMath::Pi()/fgkQmax)),1.); |
2188af53 | 773 | //----------------------------------------------------------------------- |
774 | //real part | |
b7cb54d5 | 775 | fDiffFlowGenFunRe4->Fill(fTrack->Pt()/fBinWidth,(Double_t)q,genfunG[4][q]*cos(fgkMltpl*fgkFlow*fTrack->Phi())/(1.+(2.*fR0*sqrt(4.+1.)/nSelTracksRP)*cos(fgkFlow*fTrack->Phi()-2.*q*TMath::Pi()/fgkQmax)),1.); |
2188af53 | 776 | //imaginary part |
b7cb54d5 | 777 | fDiffFlowGenFunIm4->Fill(fTrack->Pt()/fBinWidth,(Double_t)q,genfunG[4][q]*sin(fgkMltpl*fgkFlow*fTrack->Phi())/(1.+(2.*fR0*sqrt(4.+1.)/nSelTracksRP)*cos(fgkFlow*fTrack->Phi()-2.*q*TMath::Pi()/fgkQmax)),1.); |
2188af53 | 778 | //----------------------------------------------------------------------- |
779 | //real part | |
b7cb54d5 | 780 | fDiffFlowGenFunRe5->Fill(fTrack->Pt()/fBinWidth,(Double_t)q,genfunG[5][q]*cos(fgkMltpl*fgkFlow*fTrack->Phi())/(1.+(2.*fR0*sqrt(5.+1.)/nSelTracksRP)*cos(fgkFlow*fTrack->Phi()-2.*q*TMath::Pi()/fgkQmax)),1.); |
2188af53 | 781 | //imaginary part |
b7cb54d5 | 782 | fDiffFlowGenFunIm5->Fill(fTrack->Pt()/fBinWidth,(Double_t)q,genfunG[5][q]*sin(fgkMltpl*fgkFlow*fTrack->Phi())/(1.+(2.*fR0*sqrt(5.+1.)/nSelTracksRP)*cos(fgkFlow*fTrack->Phi()-2.*q*TMath::Pi()/fgkQmax)),1.); |
2188af53 | 783 | //----------------------------------------------------------------------- |
784 | //real part | |
b7cb54d5 | 785 | fDiffFlowGenFunRe6->Fill(fTrack->Pt()/fBinWidth,(Double_t)q,genfunG[6][q]*cos(fgkMltpl*fgkFlow*fTrack->Phi())/(1.+(2.*fR0*sqrt(6.+1.)/nSelTracksRP)*cos(fgkFlow*fTrack->Phi()-2.*q*TMath::Pi()/fgkQmax)),1.); |
2188af53 | 786 | //imaginary part |
b7cb54d5 | 787 | fDiffFlowGenFunIm6->Fill(fTrack->Pt()/fBinWidth,(Double_t)q,genfunG[6][q]*sin(fgkMltpl*fgkFlow*fTrack->Phi())/(1.+(2.*fR0*sqrt(6.+1.)/nSelTracksRP)*cos(fgkFlow*fTrack->Phi()-2.*q*TMath::Pi()/fgkQmax)),1.); |
2188af53 | 788 | //----------------------------------------------------------------------- |
789 | //real part | |
b7cb54d5 | 790 | fDiffFlowGenFunRe7->Fill(fTrack->Pt()/fBinWidth,(Double_t)q,genfunG[7][q]*cos(fgkMltpl*fgkFlow*fTrack->Phi())/(1.+(2.*fR0*sqrt(7.+1.)/nSelTracksRP)*cos(fgkFlow*fTrack->Phi()-2.*q*TMath::Pi()/fgkQmax)),1.); |
2188af53 | 791 | //imaginary part |
b7cb54d5 | 792 | fDiffFlowGenFunIm7->Fill(fTrack->Pt()/fBinWidth,(Double_t)q,genfunG[7][q]*sin(fgkMltpl*fgkFlow*fTrack->Phi())/(1.+(2.*fR0*sqrt(7.+1.)/nSelTracksRP)*cos(fgkFlow*fTrack->Phi()-2.*q*TMath::Pi()/fgkQmax)),1.); |
2188af53 | 793 | } |
794 | //} | |
795 | } | |
796 | }//ending the second loop over data | |
52021ae2 | 797 | */ |
2188af53 | 798 | |
b7cb54d5 | 799 | }//end of if(nEventNSelTracksRP>9) |
b6cd16a9 | 800 | |
cb308e83 | 801 | |
b6cd16a9 | 802 | |
803 | ||
cb308e83 | 804 | |
b6cd16a9 | 805 | |
cb308e83 | 806 | |
807 | ||
808 | ||
809 | ||
810 | ||
811 | ||
812 | ||
813 | //off the record: numerical equations for cumulants solved up to different highest order | |
b6cd16a9 | 814 | if(fOtherEquations) |
815 | { | |
cb308e83 | 816 | //running over data |
817 | Int_t nPrimOE = anEvent->NumberOfTracks();//total multiplicity | |
b6cd16a9 | 818 | |
b7cb54d5 | 819 | Int_t nEventNSelTracksRPOE = anEvent->GetEventNSelTracksRP(); |
b6cd16a9 | 820 | |
5270f185 | 821 | Double_t genfunG4[fgkPmax4][fgkQmax4]; |
822 | Double_t genfunG6[fgkPmax6][fgkQmax6]; | |
823 | Double_t genfunG8[fgkPmax8][fgkQmax8]; | |
824 | Double_t genfunG16[fgkPmax16][fgkQmax16]; | |
b6cd16a9 | 825 | for(Int_t p=0;p<fgkPmax16;p++) |
826 | { | |
827 | for(Int_t q=0;q<fgkQmax16;q++) | |
828 | { | |
5270f185 | 829 | genfunG16[p][q]=1.; |
b6cd16a9 | 830 | if(p<fgkPmax8 && q<fgkQmax8) |
831 | { | |
5270f185 | 832 | genfunG8[p][q]=1.; |
b6cd16a9 | 833 | if(p<fgkPmax6 && q<fgkQmax6) |
834 | { | |
5270f185 | 835 | genfunG6[p][q]=1.; |
b6cd16a9 | 836 | if(p<fgkPmax4 && q<fgkQmax4) |
837 | { | |
5270f185 | 838 | genfunG4[p][q]=1.; |
b6cd16a9 | 839 | } |
840 | } | |
841 | } | |
842 | } | |
843 | } | |
cb308e83 | 844 | |
845 | //multiplicities: | |
b7cb54d5 | 846 | if(nEventNSelTracksRPOE>15) fAvMultIntFlow16GFC->Fill(0.,nEventNSelTracksRPOE,1); |
847 | if(nEventNSelTracksRPOE>7) fAvMultIntFlow8GFC->Fill(0.,nEventNSelTracksRPOE,1); | |
848 | if(nEventNSelTracksRPOE>5) fAvMultIntFlow6GFC->Fill(0.,nEventNSelTracksRPOE,1); | |
849 | if(nEventNSelTracksRPOE>3) fAvMultIntFlow4GFC->Fill(0.,nEventNSelTracksRPOE,1); | |
b6cd16a9 | 850 | |
851 | //first loop over data: evaluating the generating function G[p][q] for integrated flow | |
cb308e83 | 852 | for(Int_t i=0;i<nPrimOE;i++) |
b6cd16a9 | 853 | { |
854 | fTrack=anEvent->GetTrack(i); | |
b7cb54d5 | 855 | if(fTrack && fTrack->InRPSelection()) |
b6cd16a9 | 856 | { |
857 | for(Int_t p=0;p<fgkPmax16;p++) | |
858 | { | |
859 | for(Int_t q=0;q<fgkQmax16;q++) | |
860 | { | |
b7cb54d5 | 861 | if(nEventNSelTracksRPOE>15) |
cb308e83 | 862 | { |
b7cb54d5 | 863 | genfunG16[p][q]*=(1.+(2.*fR0*sqrt(p+1.)/nEventNSelTracksRPOE)*cos(fgkFlow*fTrack->Phi()-2.*q*TMath::Pi()/fgkQmax16)); |
cb308e83 | 864 | } |
b6cd16a9 | 865 | if(p<fgkPmax8 && q<fgkQmax8) |
866 | { | |
b7cb54d5 | 867 | if(nEventNSelTracksRPOE>7) |
cb308e83 | 868 | { |
b7cb54d5 | 869 | genfunG8[p][q]*=(1.+(2.*fR0*sqrt(p+1.)/nEventNSelTracksRPOE)*cos(fgkFlow*fTrack->Phi()-2.*q*TMath::Pi()/fgkQmax8)); |
cb308e83 | 870 | } |
b6cd16a9 | 871 | if(p<fgkPmax6 && q<fgkQmax6) |
872 | { | |
b7cb54d5 | 873 | if(nEventNSelTracksRPOE>5) |
cb308e83 | 874 | { |
b7cb54d5 | 875 | genfunG6[p][q]*=(1.+(2.*fR0*sqrt(p+1.)/nEventNSelTracksRPOE)*cos(fgkFlow*fTrack->Phi()-2.*q*TMath::Pi()/fgkQmax6)); |
cb308e83 | 876 | } |
b6cd16a9 | 877 | if(p<fgkPmax4 && q<fgkQmax4) |
878 | { | |
b7cb54d5 | 879 | if(nEventNSelTracksRPOE>3) |
cb308e83 | 880 | { |
b7cb54d5 | 881 | genfunG4[p][q]*=(1.+(2.*fR0*sqrt(p+1.)/nEventNSelTracksRPOE)*cos(fgkFlow*fTrack->Phi()-2.*q*TMath::Pi()/fgkQmax4)); |
cb308e83 | 882 | } |
b6cd16a9 | 883 | } |
884 | } | |
885 | } | |
886 | } | |
887 | } | |
b7cb54d5 | 888 | }//end of if(fTrack && fTrack->InRPSelection()) |
b6cd16a9 | 889 | }//ending the loop over data |
890 | ||
891 | //storing the value of G[p][q] in 2D profile in order to get automatically the avarage <G[p][q]> | |
892 | for(Int_t p=0;p<fgkPmax16;p++) | |
893 | { | |
894 | for(Int_t q=0;q<fgkQmax16;q++) | |
895 | { | |
b7cb54d5 | 896 | if(nEventNSelTracksRPOE>15) fIntFlowGenFun16->Fill((Double_t)p,(Double_t)q,genfunG16[p][q],1); |
b6cd16a9 | 897 | if(p<fgkPmax8 && q<fgkQmax8) |
898 | { | |
b7cb54d5 | 899 | if(nEventNSelTracksRPOE>7) fIntFlowGenFun8->Fill((Double_t)p,(Double_t)q,genfunG8[p][q],1); |
b6cd16a9 | 900 | if(p<fgkPmax6 && q<fgkQmax6) |
901 | { | |
b7cb54d5 | 902 | if(nEventNSelTracksRPOE>5) fIntFlowGenFun6->Fill((Double_t)p,(Double_t)q,genfunG6[p][q],1); |
b6cd16a9 | 903 | if(p<fgkPmax4 && q<fgkQmax4) |
904 | { | |
b7cb54d5 | 905 | if(nEventNSelTracksRPOE>3) fIntFlowGenFun4->Fill((Double_t)p,(Double_t)q,genfunG4[p][q],1); |
b6cd16a9 | 906 | } |
907 | } | |
908 | } | |
909 | } | |
910 | } | |
911 | }//end of if(fOtherEquations) | |
cb308e83 | 912 | |
aaebd73d | 913 | }//end of Make() |
f1d945a1 | 914 | |
2188af53 | 915 | //================================================================================================================ |
f1d945a1 | 916 | |
fd46c3dd | 917 | void AliFlowAnalysisWithCumulants::GetOutputHistograms(TList *outputListHistos) |
918 | { | |
919 | // get the pointers to all output histograms before calling Finish() | |
920 | if (outputListHistos) | |
921 | { | |
922 | //Get the common histograms from the output list | |
923 | //histograms to store the final results | |
924 | TH1D *intFlowResults = dynamic_cast<TH1D*>(outputListHistos->FindObject("fIntFlowResultsGFC")); | |
925 | TH1D *diffFlowResults2 = dynamic_cast<TH1D*>(outputListHistos->FindObject("fDiffFlowResults2ndOrderGFC")); | |
926 | TH1D *diffFlowResults4 = dynamic_cast<TH1D*>(outputListHistos->FindObject("fDiffFlowResults4thOrderGFC")); | |
927 | TH1D *diffFlowResults6 = dynamic_cast<TH1D*>(outputListHistos->FindObject("fDiffFlowResults6thOrderGFC")); | |
928 | TH1D *diffFlowResults8 = dynamic_cast<TH1D*>(outputListHistos->FindObject("fDiffFlowResults8thOrderGFC")); | |
929 | ||
930 | //common histograms to store the final results the integrated and differential flow | |
931 | AliFlowCommonHistResults *commonHistRes2nd = dynamic_cast<AliFlowCommonHistResults*>(outputListHistos->FindObject("AliFlowCommonHistResults2ndOrderGFC")); | |
932 | AliFlowCommonHistResults *commonHistRes4th = dynamic_cast<AliFlowCommonHistResults*>(outputListHistos->FindObject("AliFlowCommonHistResults4thOrderGFC")); | |
933 | AliFlowCommonHistResults *commonHistRes6th = dynamic_cast<AliFlowCommonHistResults*>(outputListHistos->FindObject("AliFlowCommonHistResults6thOrderGFC")); | |
934 | AliFlowCommonHistResults *commonHistRes8th = dynamic_cast<AliFlowCommonHistResults*>(outputListHistos->FindObject("AliFlowCommonHistResults8thOrderGFC")); | |
935 | ||
936 | //common control histogram | |
937 | AliFlowCommonHist *commonHists = dynamic_cast<AliFlowCommonHist*>(outputListHistos->FindObject("AliFlowCommonHistGFC")); | |
938 | ||
939 | //profiles with average values of generating functions for int. and diff. flow | |
940 | TProfile2D *intFlowGenFun = dynamic_cast<TProfile2D*>(outputListHistos->FindObject("fIntFlowGenFun")); | |
941 | ||
942 | TProfile2D *intFlowGenFun4 = dynamic_cast<TProfile2D*>(outputListHistos->FindObject("fIntFlowGenFun4")); //only for other system of Eq. | |
943 | TProfile2D *intFlowGenFun6 = dynamic_cast<TProfile2D*>(outputListHistos->FindObject("fIntFlowGenFun6")); //only for other system of Eq. | |
944 | TProfile2D *intFlowGenFun8 = dynamic_cast<TProfile2D*>(outputListHistos->FindObject("fIntFlowGenFun8")); //only for other system of Eq. | |
945 | TProfile2D *intFlowGenFun16 = dynamic_cast<TProfile2D*>(outputListHistos->FindObject("fIntFlowGenFun16")); //only for other system of Eq. | |
946 | ||
947 | //RP, Pt: | |
948 | TProfile3D *diffFlowPtRPGenFunRe = dynamic_cast<TProfile3D*>(outputListHistos->FindObject("fDiffFlowPtRPGenFunRe")); | |
949 | TProfile3D *diffFlowPtRPGenFunIm = dynamic_cast<TProfile3D*>(outputListHistos->FindObject("fDiffFlowPtRPGenFunIm")); | |
950 | TProfile *ptBinRPNoOfParticles = dynamic_cast<TProfile*>(outputListHistos->FindObject("fPtBinRPNoOfParticles")); | |
951 | ||
952 | //RP, Eta: | |
953 | TProfile3D *diffFlowEtaRPGenFunRe = dynamic_cast<TProfile3D*>(outputListHistos->FindObject("fDiffFlowEtaRPGenFunRe")); | |
954 | TProfile3D *diffFlowEtaRPGenFunIm = dynamic_cast<TProfile3D*>(outputListHistos->FindObject("fDiffFlowEtaRPGenFunIm")); | |
955 | TProfile *etaBinRPNoOfParticles = dynamic_cast<TProfile*>(outputListHistos->FindObject("fEtaBinRPNoOfParticles")); | |
956 | ||
957 | //POI, Pt: | |
958 | TProfile3D *diffFlowPtPOIGenFunRe = dynamic_cast<TProfile3D*>(outputListHistos->FindObject("fDiffFlowPtPOIGenFunRe")); | |
959 | TProfile3D *diffFlowPtPOIGenFunIm = dynamic_cast<TProfile3D*>(outputListHistos->FindObject("fDiffFlowPtPOIGenFunIm")); | |
960 | TProfile *ptBinPOINoOfParticles = dynamic_cast<TProfile*>(outputListHistos->FindObject("fPtBinPOINoOfParticles")); | |
961 | ||
962 | //POI, Eta: | |
963 | TProfile3D *diffFlowEtaPOIGenFunRe = dynamic_cast<TProfile3D*>(outputListHistos->FindObject("fDiffFlowEtaPOIGenFunRe")); | |
964 | TProfile3D *diffFlowEtaPOIGenFunIm = dynamic_cast<TProfile3D*>(outputListHistos->FindObject("fDiffFlowEtaPOIGenFunIm")); | |
965 | TProfile *etaBinPOINoOfParticles = dynamic_cast<TProfile*>(outputListHistos->FindObject("fEtaBinPOINoOfParticles")); | |
966 | ||
967 | //average selected multiplicity (for int. flow) | |
968 | TProfile *avMult = dynamic_cast<TProfile*>(outputListHistos->FindObject("fAvMultIntFlowGFC")); | |
969 | ||
970 | TProfile *avMult4 = dynamic_cast<TProfile*>(outputListHistos->FindObject("fAvMultIntFlow4GFCA")); //only for other system of Eq. | |
971 | TProfile *avMult6 = dynamic_cast<TProfile*>(outputListHistos->FindObject("fAvMultIntFlow6GFCA")); //only for other system of Eq. | |
972 | TProfile *avMult8 = dynamic_cast<TProfile*>(outputListHistos->FindObject("fAvMultIntFlow8GFCA")); //only for other system of Eq. | |
973 | TProfile *avMult16 = dynamic_cast<TProfile*>(outputListHistos->FindObject("fAvMultIntFlow16GFCA")); //only for other system of Eq. | |
974 | ||
975 | //average values of Q-vector components (1st bin: <Q_x>, 2nd bin: <Q_y>, 3rd bin: <(Q_x)^2>, 4th bin: <(Q_y)^2>) | |
976 | TProfile *qVectorComponents = dynamic_cast<TProfile*>(outputListHistos->FindObject("fQVectorComponentsGFC")); | |
977 | ||
978 | //<w^2> | |
979 | TProfile *averageOfSquaredWeight = dynamic_cast<TProfile*>(outputListHistos->FindObject("fAverageOfSquaredWeight")); | |
980 | ||
981 | /* | |
982 | TProfile2D *diffFlowPtGenFunRe0 = dynamic_cast<TProfile2D*>(outputListHistos->FindObject("fdiffFlowPtGenFunRe0")); | |
983 | TProfile2D *diffFlowPtGenFunRe1 = dynamic_cast<TProfile2D*>(outputListHistos->FindObject("fdiffFlowPtGenFunRe1")); | |
984 | TProfile2D *diffFlowPtGenFunRe2 = dynamic_cast<TProfile2D*>(outputListHistos->FindObject("fdiffFlowPtGenFunRe2")); | |
985 | TProfile2D *diffFlowPtGenFunRe3 = dynamic_cast<TProfile2D*>(outputListHistos->FindObject("fdiffFlowPtGenFunRe3")); | |
986 | TProfile2D *diffFlowPtGenFunRe4 = dynamic_cast<TProfile2D*>(outputListHistos->FindObject("fdiffFlowPtGenFunRe4")); | |
987 | TProfile2D *diffFlowPtGenFunRe5 = dynamic_cast<TProfile2D*>(outputListHistos->FindObject("fdiffFlowPtGenFunRe5")); | |
988 | TProfile2D *diffFlowPtGenFunRe6 = dynamic_cast<TProfile2D*>(outputListHistos->FindObject("fdiffFlowPtGenFunRe6")); | |
989 | TProfile2D *diffFlowPtGenFunRe7 = dynamic_cast<TProfile2D*>(outputListHistos->FindObject("fdiffFlowPtGenFunRe7")); | |
990 | TProfile2D *diffFlowPtGenFunIm0 = dynamic_cast<TProfile2D*>(outputListHistos->FindObject("fdiffFlowPtGenFunIm0")); | |
991 | TProfile2D *diffFlowPtGenFunIm1 = dynamic_cast<TProfile2D*>(outputListHistos->FindObject("fdiffFlowPtGenFunIm1")); | |
992 | TProfile2D *diffFlowPtGenFunIm2 = dynamic_cast<TProfile2D*>(outputListHistos->FindObject("fdiffFlowPtGenFunIm2")); | |
993 | TProfile2D *diffFlowPtGenFunIm3 = dynamic_cast<TProfile2D*>(outputListHistos->FindObject("fdiffFlowPtGenFunIm3")); | |
994 | TProfile2D *diffFlowPtGenFunIm4 = dynamic_cast<TProfile2D*>(outputListHistos->FindObject("fdiffFlowPtGenFunIm4")); | |
995 | TProfile2D *diffFlowPtGenFunIm5 = dynamic_cast<TProfile2D*>(outputListHistos->FindObject("fdiffFlowPtGenFunIm5")); | |
996 | TProfile2D *diffFlowPtGenFunIm6 = dynamic_cast<TProfile2D*>(outputListHistos->FindObject("fdiffFlowPtGenFunIm6")); | |
997 | TProfile2D *diffFlowPtGenFunIm7 = dynamic_cast<TProfile2D*>(outputListHistos->FindObject("fdiffFlowPtGenFunIm7")); | |
998 | */ | |
999 | ||
1000 | //profile with avarage selected multiplicity for int. flow | |
1001 | //TProfile *avMult = dynamic_cast<TProfile*>(outputListHistos->FindObject("fAvMultIntFlow")); | |
1002 | ||
1003 | //profile with avarage values of Q-vector components (1st bin: <Q_x>, 2nd bin: <Q_y>, 3rd bin: <(Q_x)^2>, 4th bin: <(Q_y)^2>) | |
1004 | //TProfile *QVectorComponents = dynamic_cast<TProfile*>(outputListHistos->FindObject("fQVectorComponents")); | |
1005 | ||
1006 | //q-distribution | |
1007 | //TH1D *qDist = dynamic_cast<TH1D*>(outputListHistos->FindObject("fQDist")); | |
1008 | ||
1009 | //AliCumulantsFunctions finalResults(intFlowGenFun,NULL,NULL, intFlowResults,diffFlowResults2,diffFlowResults4,diffFlowResults6,diffFlowResults8,avMult,QVectorComponents,qDist,diffFlowPtGenFunRe0,diffFlowPtGenFunRe1,diffFlowPtGenFunRe2, diffFlowPtGenFunRe3,diffFlowPtGenFunRe4,diffFlowPtGenFunRe5,diffFlowPtGenFunRe6,diffFlowPtGenFunRe7,diffFlowPtGenFunIm0,diffFlowPtGenFunIm1, diffFlowPtGenFunIm2,diffFlowPtGenFunIm3,diffFlowPtGenFunIm4,diffFlowPtGenFunIm5,diffFlowPtGenFunIm6,diffFlowPtGenFunIm7); | |
1010 | ||
1011 | //AliCumulantsFunctions finalResults(intFlowGenFun,diffFlowPtGenFunRe,diffFlowPtGenFunIm, intFlowResults,diffFlowResults2,diffFlowResults4,diffFlowResults6,diffFlowResults8,avMult,QVectorComponents,qDist); | |
1012 | ||
1013 | //finalResults.Calculate(); | |
1014 | ||
1015 | //--------------------------------------------------- | |
1016 | ||
1017 | this->SetIntFlowResults(intFlowResults); | |
1018 | this->SetDiffFlowResults2nd(diffFlowResults2); | |
1019 | this->SetDiffFlowResults4th(diffFlowResults4); | |
1020 | this->SetDiffFlowResults6th(diffFlowResults6); | |
1021 | this->SetDiffFlowResults8th(diffFlowResults8); | |
1022 | ||
1023 | this->SetCommonHistsResults2nd(commonHistRes2nd); | |
1024 | this->SetCommonHistsResults4th(commonHistRes4th); | |
1025 | this->SetCommonHistsResults6th(commonHistRes6th); | |
1026 | this->SetCommonHistsResults8th(commonHistRes8th); | |
1027 | ||
1028 | this->SetCommonHists(commonHists); | |
1029 | ||
1030 | this->SetIntFlowGenFun(intFlowGenFun); | |
1031 | ||
1032 | this->SetIntFlowGenFun4(intFlowGenFun4); //only for other system of Eq. | |
1033 | this->SetIntFlowGenFun6(intFlowGenFun6); //only for other system of Eq. | |
1034 | this->SetIntFlowGenFun8(intFlowGenFun8); //only for other system of Eq. | |
1035 | this->SetIntFlowGenFun16(intFlowGenFun16); //only for other system of Eq. | |
1036 | ||
1037 | this->SetDiffFlowPtRPGenFunRe(diffFlowPtRPGenFunRe); | |
1038 | this->SetDiffFlowPtRPGenFunIm(diffFlowPtRPGenFunIm); | |
1039 | this->SetNumberOfParticlesPerPtBinRP(ptBinRPNoOfParticles); | |
1040 | ||
1041 | this->SetDiffFlowEtaRPGenFunRe(diffFlowEtaRPGenFunRe); | |
1042 | this->SetDiffFlowEtaRPGenFunIm(diffFlowEtaRPGenFunIm); | |
1043 | this->SetNumberOfParticlesPerEtaBinRP(etaBinRPNoOfParticles); | |
1044 | ||
1045 | this->SetDiffFlowPtPOIGenFunRe(diffFlowPtPOIGenFunRe); | |
1046 | this->SetDiffFlowPtPOIGenFunIm(diffFlowPtPOIGenFunIm); | |
1047 | this->SetNumberOfParticlesPerPtBinPOI(ptBinPOINoOfParticles); | |
1048 | ||
1049 | this->SetDiffFlowEtaPOIGenFunRe(diffFlowEtaPOIGenFunRe); | |
1050 | this->SetDiffFlowEtaPOIGenFunIm(diffFlowEtaPOIGenFunIm); | |
1051 | this->SetNumberOfParticlesPerEtaBinPOI(etaBinPOINoOfParticles); | |
1052 | ||
1053 | this->SetAverageMultiplicity(avMult); | |
1054 | ||
1055 | this->SetAverageMultiplicity4(avMult4); //only for other system of Eq. | |
1056 | this->SetAverageMultiplicity6(avMult6); //only for other system of Eq. | |
1057 | this->SetAverageMultiplicity8(avMult8); //only for other system of Eq. | |
1058 | this->SetAverageMultiplicity16(avMult16); //only for other system of Eq. | |
1059 | ||
1060 | this->SetQVectorComponents(qVectorComponents); | |
1061 | ||
1062 | this->SetAverageOfSquaredWeight(averageOfSquaredWeight); | |
1063 | } | |
1064 | } | |
1065 | ||
1066 | //================================================================================================================ | |
1067 | ||
2188af53 | 1068 | void AliFlowAnalysisWithCumulants::Finish() |
1069 | { | |
1315fe58 | 1070 | //calculate the final results |
52021ae2 | 1071 | //AliCumulantsFunctions finalResults(fIntFlowGenFun,NULL,NULL, fIntFlowResults,fDiffFlowResults2,fDiffFlowResults4,fDiffFlowResults6,fDiffFlowResults8,fAvMultIntFlow,fQVectorComponents, fQDist,fDiffFlowGenFunRe0,fDiffFlowGenFunRe1,fDiffFlowGenFunRe2, fDiffFlowGenFunRe3,fDiffFlowGenFunRe4,fDiffFlowGenFunRe5,fDiffFlowGenFunRe6,fDiffFlowGenFunRe7,fDiffFlowGenFunIm0,fDiffFlowGenFunIm1, fDiffFlowGenFunIm2,fDiffFlowGenFunIm3,fDiffFlowGenFunIm4,fDiffFlowGenFunIm5,fDiffFlowGenFunIm6,fDiffFlowGenFunIm7); |
1072 | ||
9dd53ff2 | 1073 | AliCumulantsFunctions finalResults(fIntFlowGenFun,fIntFlowGenFun4,fIntFlowGenFun6,fIntFlowGenFun8,fIntFlowGenFun16,fAvMultIntFlow4GFC, fAvMultIntFlow6GFC,fAvMultIntFlow8GFC,fAvMultIntFlow16GFC,fDiffFlowPtRPGenFunRe,fDiffFlowPtRPGenFunIm,fPtBinRPNoOfParticles, fDiffFlowEtaRPGenFunRe,fDiffFlowEtaRPGenFunIm,fEtaBinRPNoOfParticles,fDiffFlowPtPOIGenFunRe,fDiffFlowPtPOIGenFunIm,fPtBinPOINoOfParticles, fDiffFlowEtaPOIGenFunRe,fDiffFlowEtaPOIGenFunIm,fEtaBinPOINoOfParticles,fIntFlowResultsGFC,fDiffFlowResults2ndOrderGFC,fDiffFlowResults4thOrderGFC,fDiffFlowResults6thOrderGFC,fDiffFlowResults8thOrderGFC, fAvMultIntFlowGFC,fQVectorComponentsGFC,fAverageOfSquaredWeight,fCommonHistsResults2nd, fCommonHistsResults4th,fCommonHistsResults6th,fCommonHistsResults8th,fCommonHists); |
b6cd16a9 | 1074 | |
1075 | finalResults.Calculate(); | |
2188af53 | 1076 | } |
f1d945a1 | 1077 | |
1315fe58 | 1078 | //================================================================================================================ |
1079 | ||
1080 | void AliFlowAnalysisWithCumulants::WriteHistograms(TString* outputFileName) | |
1081 | { | |
1082 | //store the final results in output .root file | |
1083 | TFile *output = new TFile(outputFileName->Data(),"RECREATE"); | |
0fe80f88 | 1084 | //output->WriteObject(fHistList, "cobjGFC","SingleKey"); |
1085 | fHistList->SetName("cobjGFC"); | |
1086 | fHistList->Write(fHistList->GetName(), TObject::kSingleKey); | |
1315fe58 | 1087 | delete output; |
1088 | } | |
1089 | ||
1090 | //================================================================================================================ | |
1091 | ||
b0fda271 | 1092 | //================================================================================================================ |
1093 | ||
1094 | void AliFlowAnalysisWithCumulants::WriteHistograms(TString outputFileName) | |
1095 | { | |
1096 | //store the final results in output .root file | |
1097 | TFile *output = new TFile(outputFileName.Data(),"RECREATE"); | |
0fe80f88 | 1098 | //output->WriteObject(fHistList, "cobjGFC","SingleKey"); |
1099 | fHistList->SetName("cobjGFC"); | |
1100 | fHistList->Write(fHistList->GetName(), TObject::kSingleKey); | |
b0fda271 | 1101 | delete output; |
1102 | } | |
1103 | ||
1104 | //================================================================================================================ | |
1105 | ||
f1d945a1 | 1106 | |
f1d945a1 | 1107 | |
1108 |