]>
Commit | Line | Data |
---|---|---|
bc92c0cb | 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 | * functions and equations needed * | |
18 | * for calculation of Q-cumulants * | |
19 | * and final flow estimates * | |
20 | * * | |
21 | * author: Ante Bilandzic * | |
22 | * (anteb@nikhef.nl) * | |
23 | *********************************/ | |
24 | ||
25 | #define AliQCumulantsFunctions_cxx | |
26 | ||
27 | #include "Riostream.h" | |
bc92c0cb | 28 | #include "TChain.h" |
29 | #include "TFile.h" | |
30 | #include "TList.h" | |
31 | #include "TParticle.h" | |
32 | ||
33 | #include "TProfile.h" | |
34 | #include "TProfile2D.h" | |
35 | #include "TProfile3D.h" | |
36 | #include "TF1.h" | |
37 | #include "TAxis.h" | |
38 | #include "TH1.h" | |
39 | #include "TH1D.h" | |
40 | ||
bc92c0cb | 41 | #include "AliFlowEventSimple.h" |
42 | #include "AliFlowTrackSimple.h" | |
43 | #include "AliFlowAnalysisWithCumulants.h" | |
44 | #include "AliFlowCommonConstants.h" | |
7e58a232 | 45 | #include "AliFlowCommonHist.h" |
1315fe58 | 46 | #include "AliFlowCommonHistResults.h" |
bc92c0cb | 47 | #include "AliQCumulantsFunctions.h" |
48 | ||
49 | ClassImp(AliQCumulantsFunctions) | |
50 | ||
51 | //================================================================================================================_ | |
52 | ||
53 | AliQCumulantsFunctions::AliQCumulantsFunctions(): | |
54 | fIntRes(NULL), | |
55 | fDiffRes2nd(NULL), | |
56 | fDiffRes4th(NULL), | |
1315fe58 | 57 | fCovar(NULL), |
bc92c0cb | 58 | fAvMult(NULL), |
59 | fQVector(NULL), | |
60 | fQCorr(NULL), | |
8842fb2b | 61 | fQProd(NULL), |
bc92c0cb | 62 | fDirect(NULL), |
1dfa3c16 | 63 | fbinPt2p1n1nRP(NULL), |
64 | fbinPt2p2n2nRP(NULL), | |
65 | fbinPt3p2n1n1nRP(NULL), | |
66 | fbinPt3p1n1n2nRP(NULL), | |
67 | fbinPt4p1n1n1n1nRP(NULL), | |
68 | fbinEta2p1n1nRP(NULL), | |
69 | fbinEta2p2n2nRP(NULL), | |
70 | fbinEta3p2n1n1nRP(NULL), | |
71 | fbinEta3p1n1n2nRP(NULL), | |
72 | fbinEta4p1n1n1n1nRP(NULL), | |
73 | fbinPt2p1n1nPOI(NULL), | |
74 | fbinPt2p2n2nPOI(NULL), | |
75 | fbinPt3p2n1n1nPOI(NULL), | |
76 | fbinPt3p1n1n2nPOI(NULL), | |
77 | fbinPt4p1n1n1n1nPOI(NULL), | |
78 | fbinEta2p1n1nPOI(NULL), | |
79 | fbinEta2p2n2nPOI(NULL), | |
80 | fbinEta3p2n1n1nPOI(NULL), | |
81 | fbinEta3p1n1n2nPOI(NULL), | |
82 | fbinEta4p1n1n1n1nPOI(NULL), | |
7e58a232 | 83 | fch2nd(NULL),//ch = common histogram (control) |
84 | fch4th(NULL), | |
85 | fch6th(NULL), | |
86 | fch8th(NULL), | |
87 | fchr2nd(NULL),//chr = common histogram results | |
8842fb2b | 88 | fchr4th(NULL), |
89 | fchr6th(NULL), | |
90 | fchr8th(NULL) | |
bc92c0cb | 91 | { |
92 | //default constructor | |
93 | } | |
94 | ||
95 | AliQCumulantsFunctions::~AliQCumulantsFunctions() | |
96 | { | |
97 | //destructor | |
98 | } | |
99 | ||
7e58a232 | 100 | AliQCumulantsFunctions::AliQCumulantsFunctions(TH1D *intRes, TH1D *diffRes2nd, TH1D *diffRes4th, TH1D *covar, TProfile *AvMult, TProfile *QVector, TProfile *QCorr, TProfile *QProd, TProfile *Direct, TProfile *binPt2p1n1nRP, TProfile *binPt2p2n2nRP, TProfile *binPt3p2n1n1nRP, TProfile *binPt3p1n1n2nRP, TProfile *binPt4p1n1n1n1nRP, TProfile *binEta2p1n1nRP, TProfile *binEta2p2n2nRP, TProfile *binEta3p2n1n1nRP, TProfile *binEta3p1n1n2nRP, TProfile *binEta4p1n1n1n1nRP, TProfile *binPt2p1n1nPOI, TProfile *binPt2p2n2nPOI, TProfile *binPt3p2n1n1nPOI, TProfile *binPt3p1n1n2nPOI, TProfile *binPt4p1n1n1n1nPOI, TProfile *binEta2p1n1nPOI, TProfile *binEta2p2n2nPOI, TProfile *binEta3p2n1n1nPOI, TProfile *binEta3p1n1n2nPOI, TProfile *binEta4p1n1n1n1nPOI, AliFlowCommonHist *ch2nd, AliFlowCommonHist *ch4th, AliFlowCommonHist *ch6th, AliFlowCommonHist *ch8th, AliFlowCommonHistResults *chr2nd, AliFlowCommonHistResults *chr4th, AliFlowCommonHistResults *chr6th, AliFlowCommonHistResults *chr8th): |
bc92c0cb | 101 | fIntRes(intRes), |
102 | fDiffRes2nd(diffRes2nd), | |
103 | fDiffRes4th(diffRes4th), | |
1315fe58 | 104 | fCovar(covar), |
bc92c0cb | 105 | fAvMult(AvMult), |
106 | fQVector(QVector), | |
107 | fQCorr(QCorr), | |
8842fb2b | 108 | fQProd(QProd), |
bc92c0cb | 109 | fDirect(Direct), |
1dfa3c16 | 110 | fbinPt2p1n1nRP(binPt2p1n1nRP), |
111 | fbinPt2p2n2nRP(binPt2p2n2nRP), | |
112 | fbinPt3p2n1n1nRP(binPt3p2n1n1nRP), | |
113 | fbinPt3p1n1n2nRP(binPt3p1n1n2nRP), | |
114 | fbinPt4p1n1n1n1nRP(binPt4p1n1n1n1nRP), | |
115 | fbinEta2p1n1nRP(binEta2p1n1nRP), | |
116 | fbinEta2p2n2nRP(binEta2p2n2nRP), | |
117 | fbinEta3p2n1n1nRP(binEta3p2n1n1nRP), | |
118 | fbinEta3p1n1n2nRP(binEta3p1n1n2nRP), | |
119 | fbinEta4p1n1n1n1nRP(binEta4p1n1n1n1nRP), | |
120 | fbinPt2p1n1nPOI(binPt2p1n1nPOI), | |
121 | fbinPt2p2n2nPOI(binPt2p2n2nPOI), | |
122 | fbinPt3p2n1n1nPOI(binPt3p2n1n1nPOI), | |
123 | fbinPt3p1n1n2nPOI(binPt3p1n1n2nPOI), | |
124 | fbinPt4p1n1n1n1nPOI(binPt4p1n1n1n1nPOI), | |
125 | fbinEta2p1n1nPOI(binEta2p1n1nPOI), | |
126 | fbinEta2p2n2nPOI(binEta2p2n2nPOI), | |
127 | fbinEta3p2n1n1nPOI(binEta3p2n1n1nPOI), | |
128 | fbinEta3p1n1n2nPOI(binEta3p1n1n2nPOI), | |
7e58a232 | 129 | fbinEta4p1n1n1n1nPOI(binEta4p1n1n1n1nPOI), |
130 | fch2nd(ch2nd), | |
131 | fch4th(ch4th), | |
132 | fch6th(ch6th), | |
133 | fch8th(ch8th), | |
1315fe58 | 134 | fchr2nd(chr2nd), |
135 | fchr4th(chr4th), | |
136 | fchr6th(chr6th), | |
137 | fchr8th(chr8th) | |
bc92c0cb | 138 | { |
139 | //custom constructor | |
140 | } | |
1315fe58 | 141 | |
bc92c0cb | 142 | //================================================================================================================ |
143 | ||
144 | void AliQCumulantsFunctions::Calculate() | |
145 | { | |
146 | //final results | |
8842fb2b | 147 | |
bc92c0cb | 148 | //harmonics |
149 | Int_t n = 2; //to be improved | |
150 | ||
151 | //--------------------------------------------------------------------------------------------------------- | |
152 | //avarage multiplicity | |
153 | Double_t AvM = fAvMult->GetBinContent(1); | |
154 | ||
155 | //number of events | |
156 | Double_t nEvts = fAvMult->GetBinEntries(1); | |
157 | ||
158 | //2-, 4- and 6-particle azimuthal correlation: | |
8842fb2b | 159 | Double_t two = fQCorr->GetBinContent(1); //<<2>>_{n|n} |
160 | Double_t four = fQCorr->GetBinContent(11); //<<4>>_{n,n|n,n} | |
dee1e0e0 | 161 | Double_t six = fQCorr->GetBinContent(24); //<<6>>_{n,n,n|n,n,n} |
162 | Double_t eight = fQCorr->GetBinContent(31); //<<8>>_{n,n,n,n|n,n,n,n} | |
bc92c0cb | 163 | |
164 | //errors of 2-, 4- and 6-particle azimuthal correlation: | |
8842fb2b | 165 | Double_t twoErr = fQCorr->GetBinError(1); //sigma_{<<2>>_{n|n}} |
166 | Double_t fourErr = fQCorr->GetBinError(11); //sigma_{<<4>>_{n,n|n,n}} | |
167 | Double_t sixErr = fQCorr->GetBinError(21); //sigma_{<<6>>_{n,n,n|n,n,n}} | |
168 | //Double_t eightErr = fQCorr->GetBinError(); //sigma_{<<8>>_{n,n,n,n|n,n,n,n}} | |
bc92c0cb | 169 | |
170 | //covariances of multi-particle correlations | |
8842fb2b | 171 | Double_t cov24=fQProd->GetBinContent(1)-two*four; //cov24=<<2>*<4>>-<<2>>*<<4>> |
172 | Double_t cov26=fQProd->GetBinContent(2)-two*six; //cov26=<<2>*<6>>-<<2>>*<<6>> | |
173 | //Double_t cov28=fQProd->GetBinContent(3)-two*eight; //cov28=<<2>*<8>>-<<2>>*<<8>> | |
174 | Double_t cov46=fQProd->GetBinContent(4)-four*six; //cov46=<<4>*<6>>-<<4>>*<<6>> | |
175 | //Double_t cov48=fQProd->GetBinContent(5)-four*eight; //cov48=<<4>*<8>>-<<4>>*<<8>> | |
176 | //Double_t cov68=fQProd->GetBinContent(6)-six*eight; //cov68=<<6>*<8>>-<<6>>*<<8>> | |
177 | ||
1315fe58 | 178 | fCovar->SetBinContent(1,cov24); |
179 | fCovar->SetBinContent(2,cov26); | |
8842fb2b | 180 | //fCovar->SetBinContent(3,cov28); |
1315fe58 | 181 | fCovar->SetBinContent(4,cov46); |
8842fb2b | 182 | //fCovar->SetBinContent(5,cov48); |
183 | //fCovar->SetBinContent(6,cov68); | |
bc92c0cb | 184 | |
185 | //2nd, 4th and 6th order Q-cumulant and theirs errors: | |
186 | Double_t secondOrderQCumulant = two; //c_n{2} | |
187 | Double_t secondOrderQCumulantError = twoErr; //sigma_{c_n{2}} | |
188 | ||
189 | Double_t fourthOrderQCumulant = four-2.*pow(two,2.);//c_n{4} | |
190 | Double_t fourthOrderQCumulantError = 0.; //sigma_{c_n{4}} | |
191 | ||
192 | if(16.*pow(two,2.)*pow(twoErr,2.)+pow(fourErr,2.)-8.*two*cov24>0.) | |
193 | { | |
194 | fourthOrderQCumulantError = pow(16.*pow(two,2.)*pow(twoErr,2.)+pow(fourErr,2.)-8.*two*cov24,0.5);//sigma_{c_n{4}} | |
195 | } | |
196 | ||
1315fe58 | 197 | Double_t sixthOrderQCumulant = six-9.*two*four+12.*pow(two,3.); //c_n{6} |
bc92c0cb | 198 | Double_t sixthOrderQCumulantError = 0.; //sigma_{c_n{6}} |
199 | ||
200 | if(81.*pow(4.*two*two-four,2.)*pow(twoErr,2.)+81.*pow(two,2.)*pow(fourErr,2.)+pow(sixErr,2.)-162.*(4.*two*two-four)*two*cov24+18.*(4.*two*two-four)*cov26-18.*two*cov46>0.) | |
201 | { | |
202 | sixthOrderQCumulantError = pow(81.*pow(4.*two*two-four,2.)*pow(twoErr,2.)+81.*pow(two,2.)*pow(fourErr,2.)+pow(sixErr,2.)-162.*(4.*two*two-four)*two*cov24+18.*(4.*two*two-four)*cov26-18.*two*cov46,0.5);//sigma_{c_n{6}} | |
203 | } | |
dee1e0e0 | 204 | |
205 | Double_t eightOrderQCumulant = eight-16.*two*six-18.*pow(four,2.)+144.*pow(two,2.)*four-144.*pow(two,4.); | |
206 | ||
bc92c0cb | 207 | //integrated flow estimates from Q-cumulants: |
1dfa3c16 | 208 | cout<<endl; |
209 | cout<<"***********************************"<<endl; | |
210 | cout<<"***********************************"<<endl; | |
bc92c0cb | 211 | cout<<"flow estimates from Q-cumulants:"<<endl; |
1dfa3c16 | 212 | cout<<endl; |
bc92c0cb | 213 | |
dee1e0e0 | 214 | Double_t vn2=0.,vn4=0.,vn6=0.,vn8=0.; |
215 | Double_t sd2=0.,sd4=0.,sd6=0.,sd8=0.; | |
bc92c0cb | 216 | if(secondOrderQCumulant>0.){ |
217 | vn2 = pow(secondOrderQCumulant,0.5);//v_n{2} | |
218 | sd2 = 0.5*pow(secondOrderQCumulant,-0.5)*secondOrderQCumulantError;//sigma_{v_n{2}} | |
e6614983 | 219 | cout<<" v_"<<n<<"{2} = "<<vn2<<" +/- "<<sd2<<endl; |
220 | fIntRes->SetBinContent(1,vn2); | |
221 | fIntRes->SetBinError(1,sd2); | |
8842fb2b | 222 | //common histograms: |
1dfa3c16 | 223 | fchr2nd->FillIntegratedFlow(vn2,sd2);//to be removed |
224 | fchr2nd->FillChi(vn2*pow(AvM,0.5));//to be removed | |
225 | fchr2nd->FillIntegratedFlowRP(vn2,sd2); | |
bc92c0cb | 226 | }else{ |
227 | cout<<" v_"<<n<<"{2} = Im"<<endl; | |
228 | } | |
229 | if(four!=0. && fourthOrderQCumulant<0.){ | |
230 | vn4 = pow(-fourthOrderQCumulant,1./4.); //v_n{4} | |
231 | sd4 = 0.25*pow(-fourthOrderQCumulant,-3./4.)*fourthOrderQCumulantError;//sigma_{v_n{4}} | |
e6614983 | 232 | cout<<" v_"<<n<<"{4} = "<<vn4<<" +/- "<<sd4<<endl; |
233 | fIntRes->SetBinContent(2,vn4); | |
234 | fIntRes->SetBinError(2,sd4); | |
8842fb2b | 235 | //common histograms: |
1dfa3c16 | 236 | fchr4th->FillIntegratedFlow(vn4,sd4);//to be removed |
237 | fchr4th->FillChi(vn4*pow(AvM,0.5));//to be removed | |
238 | fchr4th->FillIntegratedFlowRP(vn4,sd4); | |
bc92c0cb | 239 | }else{ |
240 | cout<<" v_"<<n<<"{4} = Im"<<endl; | |
241 | } | |
242 | if(six!=0. && sixthOrderQCumulant>0.){ | |
243 | vn6 = pow((1./4.)*sixthOrderQCumulant,1./6.); //v_n{6} | |
244 | sd6 = (1./6.)*pow(2.,-1./3.)*pow(sixthOrderQCumulant,-5./6.)*sixthOrderQCumulantError; | |
e6614983 | 245 | cout<<" v_"<<n<<"{6} = "<<vn6<<" +/- "<<sd6<<endl; |
246 | fIntRes->SetBinContent(3,vn6); | |
247 | fIntRes->SetBinError(3,sd6); | |
8842fb2b | 248 | //common histograms: |
1dfa3c16 | 249 | fchr6th->FillIntegratedFlow(vn6,sd6);//to be removed |
250 | fchr6th->FillChi(vn6*pow(AvM,0.5));//to be removed | |
251 | fchr6th->FillIntegratedFlowRP(vn6,sd6); | |
bc92c0cb | 252 | }else{ |
253 | cout<<" v_"<<n<<"{6} = Im"<<endl; | |
254 | } | |
dee1e0e0 | 255 | if(eight!=0. && eightOrderQCumulant<0.){ |
256 | vn8 = pow((-1./33.)*eightOrderQCumulant,1./8.); //v_n{8} | |
257 | cout<<" v_"<<n<<"{8} = "<<vn8<<" +/- "<<sd8<<endl; | |
258 | fIntRes->SetBinContent(4,vn8); | |
259 | fIntRes->SetBinError(4,sd8); | |
260 | //common histograms: | |
1dfa3c16 | 261 | fchr8th->FillIntegratedFlow(vn8,sd8);//to be removed |
262 | fchr8th->FillChi(vn8*pow(AvM,0.5));//to be removed | |
263 | fchr8th->FillIntegratedFlowRP(vn8,sd8); | |
264 | }else{ | |
265 | cout<<" v_"<<n<<"{8} = Im"<<endl; | |
dee1e0e0 | 266 | } |
1dfa3c16 | 267 | cout<<endl; |
bc92c0cb | 268 | cout<<" nEvts = "<<nEvts<<", AvM = "<<AvM<<endl; |
1dfa3c16 | 269 | cout<<"***********************************"<<endl; |
270 | cout<<"***********************************"<<endl; | |
271 | cout<<endl; | |
bc92c0cb | 272 | //--------------------------------------------------------------------------------------------------------- |
1315fe58 | 273 | |
bc92c0cb | 274 | //--------------------------------------------------------------------------------------------------------- |
1dfa3c16 | 275 | //differential flow (RP) |
276 | ||
277 | //Pt: | |
278 | Double_t secondOrderQCumulantDiffFlowPtRP = 0.; | |
279 | Double_t fourthOrderQCumulantDiffFlowPtRP = 0.; | |
280 | ||
281 | Int_t nBinsPtRP = fbinPt2p1n1nRP->GetNbinsX(); | |
282 | ||
283 | for(Int_t bb=1;bb<nBinsPtRP+1;bb++) | |
284 | { | |
285 | if(fbinPt2p1n1nRP->GetBinEntries(bb)>0.&&vn2!=0) | |
286 | { | |
287 | secondOrderQCumulantDiffFlowPtRP = fbinPt2p1n1nRP->GetBinContent(bb); | |
288 | fDiffRes2nd->SetBinContent(bb,secondOrderQCumulantDiffFlowPtRP/vn2); | |
289 | //common histogram: | |
290 | fchr2nd->FillDifferentialFlowPtRP(bb,secondOrderQCumulantDiffFlowPtRP/vn2, 0.);//to be improved (errors) | |
291 | } | |
292 | if(fbinPt4p1n1n1n1nRP->GetBinEntries(bb)>0.&&vn4!=0.) | |
293 | { | |
294 | fourthOrderQCumulantDiffFlowPtRP = fbinPt4p1n1n1n1nRP->GetBinContent(bb)-2.*fbinPt2p1n1nRP->GetBinContent(bb)*pow(vn2,2.); | |
295 | fDiffRes4th->SetBinContent(bb,-1.*fourthOrderQCumulantDiffFlowPtRP/pow(vn4,3.)); | |
296 | //common histogram: | |
297 | fchr4th->FillDifferentialFlowPtRP(bb,-1.*fourthOrderQCumulantDiffFlowPtRP/pow(vn4,3.), 0.);//to be improved (errors) | |
298 | } | |
299 | } | |
300 | ||
301 | //Eta: | |
302 | Double_t secondOrderQCumulantDiffFlowEtaRP = 0.; | |
303 | Double_t fourthOrderQCumulantDiffFlowEtaRP = 0.; | |
304 | ||
305 | Int_t nBinsEtaRP = fbinEta2p1n1nRP->GetNbinsX(); | |
bc92c0cb | 306 | |
1dfa3c16 | 307 | for(Int_t bb=1;bb<nBinsEtaRP+1;bb++) |
308 | { | |
309 | if(fbinEta2p1n1nRP->GetBinEntries(bb)>0.&&vn2!=0) | |
310 | { | |
311 | secondOrderQCumulantDiffFlowEtaRP = fbinEta2p1n1nRP->GetBinContent(bb); | |
312 | fDiffRes2nd->SetBinContent(bb,secondOrderQCumulantDiffFlowEtaRP/vn2); | |
313 | //common histogram: | |
314 | fchr2nd->FillDifferentialFlowEtaRP(bb,secondOrderQCumulantDiffFlowEtaRP/vn2, 0.);//to be improved (errors) | |
315 | } | |
316 | if(fbinEta4p1n1n1n1nRP->GetBinEntries(bb)>0.&&vn4!=0.) | |
317 | { | |
318 | fourthOrderQCumulantDiffFlowEtaRP = fbinEta4p1n1n1n1nRP->GetBinContent(bb)-2.*fbinEta2p1n1nRP->GetBinContent(bb)*pow(vn2,2.); | |
319 | fDiffRes4th->SetBinContent(bb,-1.*fourthOrderQCumulantDiffFlowEtaRP/pow(vn4,3.)); | |
320 | //common histogram: | |
321 | fchr4th->FillDifferentialFlowEtaRP(bb,-1.*fourthOrderQCumulantDiffFlowEtaRP/pow(vn4,3.), 0.);//to be improved (errors) | |
322 | } | |
323 | } | |
324 | ||
1dfa3c16 | 325 | //differential flow (POI) |
7e58a232 | 326 | Int_t nBinsPtPOI = fbinPt2p1n1nPOI->GetNbinsX(); |
327 | Int_t nBinsEtaPOI = fbinEta2p1n1nPOI->GetNbinsX(); | |
1dfa3c16 | 328 | |
329 | //Pt: | |
330 | Double_t secondOrderQCumulantDiffFlowPtPOI = 0.; | |
331 | Double_t fourthOrderQCumulantDiffFlowPtPOI = 0.; | |
8842fb2b | 332 | |
7e58a232 | 333 | Double_t dVn2ndPOI=0.,dDiffvn2nd=0.,dYield2nd=0.,dSum2nd=0.; |
334 | ||
335 | Double_t dVn2ndPOIEta=0.,dDiffvn2ndEta=0.,dYield2ndEta=0.,dSum2ndEta=0.;//to be removed | |
1dfa3c16 | 336 | |
337 | for(Int_t bb=1;bb<nBinsPtPOI+1;bb++) | |
bc92c0cb | 338 | { |
7e58a232 | 339 | //QC{2} |
1dfa3c16 | 340 | if(fbinPt2p1n1nPOI->GetBinEntries(bb)>0.&&vn2!=0) |
bc92c0cb | 341 | { |
7e58a232 | 342 | //cout<<"bin = "<<bb<<" : "<<(fch2nd->GetHistPtDiff())->GetBinContent(bb)<<endl; |
343 | //cout<<endl; | |
1dfa3c16 | 344 | secondOrderQCumulantDiffFlowPtPOI = fbinPt2p1n1nPOI->GetBinContent(bb); |
345 | fDiffRes2nd->SetBinContent(bb,secondOrderQCumulantDiffFlowPtPOI/vn2); | |
8842fb2b | 346 | //common histogram: |
7e58a232 | 347 | fchr2nd->FillDifferentialFlowPtPOI(bb,secondOrderQCumulantDiffFlowPtPOI/vn2, 0.);//to be improved (errors) && bb or bb+1 |
348 | //------------------------------------------------------------- | |
349 | //integrated flow (POI, Pt, 2nd order): | |
350 | dDiffvn2nd=(fchr2nd->GetHistDiffFlowPtPOI())->GetBinContent(bb); | |
351 | dYield2nd=(fch2nd->GetHistPtDiff())->GetBinContent(bb); | |
352 | dVn2ndPOI+=dDiffvn2nd*dYield2nd; | |
353 | dSum2nd+=dYield2nd; | |
354 | //------------------------------------------------------------- | |
bc92c0cb | 355 | } |
7e58a232 | 356 | //QC{4] |
1dfa3c16 | 357 | if(fbinPt4p1n1n1n1nPOI->GetBinEntries(bb)>0.&&vn4!=0.) |
bc92c0cb | 358 | { |
1dfa3c16 | 359 | fourthOrderQCumulantDiffFlowPtPOI = fbinPt4p1n1n1n1nPOI->GetBinContent(bb)-2.*fbinPt2p1n1nPOI->GetBinContent(bb)*pow(vn2,2.); |
360 | fDiffRes4th->SetBinContent(bb,-1.*fourthOrderQCumulantDiffFlowPtPOI/pow(vn4,3.)); | |
8842fb2b | 361 | //common histogram: |
1dfa3c16 | 362 | fchr4th->FillDifferentialFlowPtPOI(bb,-1.*fourthOrderQCumulantDiffFlowPtPOI/pow(vn4,3.), 0.);//to be improved (errors) |
bc92c0cb | 363 | } |
364 | } | |
1dfa3c16 | 365 | |
7e58a232 | 366 | //storing the final results for integrated flow (POI): |
367 | //QC{2} | |
368 | if(dSum2nd && fchr2nd) | |
369 | { | |
370 | dVn2ndPOI/=dSum2nd; | |
371 | fchr2nd->FillIntegratedFlowPOI(dVn2ndPOI,0.); | |
372 | } | |
373 | ||
374 | ||
375 | ||
376 | ||
1dfa3c16 | 377 | //Eta: |
378 | Double_t secondOrderQCumulantDiffFlowEtaPOI = 0.; | |
379 | Double_t fourthOrderQCumulantDiffFlowEtaPOI = 0.; | |
380 | ||
1dfa3c16 | 381 | for(Int_t bb=1;bb<nBinsEtaPOI+1;bb++) |
382 | { | |
383 | if(fbinEta2p1n1nPOI->GetBinEntries(bb)>0.&&vn2!=0) | |
384 | { | |
385 | secondOrderQCumulantDiffFlowEtaPOI = fbinEta2p1n1nPOI->GetBinContent(bb); | |
386 | fDiffRes2nd->SetBinContent(bb,secondOrderQCumulantDiffFlowEtaPOI/vn2); | |
387 | //common histogram: | |
388 | fchr2nd->FillDifferentialFlowEtaPOI(bb,secondOrderQCumulantDiffFlowEtaPOI/vn2, 0.);//to be improved (errors) | |
389 | } | |
390 | if(fbinEta4p1n1n1n1nPOI->GetBinEntries(bb)>0.&&vn4!=0.) | |
391 | { | |
392 | fourthOrderQCumulantDiffFlowEtaPOI = fbinEta4p1n1n1n1nPOI->GetBinContent(bb)-2.*fbinEta2p1n1nPOI->GetBinContent(bb)*pow(vn2,2.); | |
393 | fDiffRes4th->SetBinContent(bb,-1.*fourthOrderQCumulantDiffFlowEtaPOI/pow(vn4,3.)); | |
394 | //common histogram: | |
395 | fchr4th->FillDifferentialFlowEtaPOI(bb,-1.*fourthOrderQCumulantDiffFlowEtaPOI/pow(vn4,3.), 0.);//to be improved (errors) | |
396 | } | |
397 | } | |
398 | ||
bc92c0cb | 399 | //--------------------------------------------------------------------------------------------------------- |
400 | ||
1315fe58 | 401 | |
1dfa3c16 | 402 | |
1315fe58 | 403 | |
7e58a232 | 404 | //xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx |
405 | // !!!! to be removed !!!! | |
406 | for(Int_t bb=1;bb<nBinsEtaPOI+1;bb++) | |
407 | { | |
408 | //integrated flow (POI, Eta, 2nd order): | |
409 | dDiffvn2ndEta=(fchr2nd->GetHistDiffFlowEtaPOI())->GetBinContent(bb); | |
410 | dYield2ndEta=(fch2nd->GetHistEtaDiff())->GetBinContent(bb); | |
411 | // cout<<"bin = "<<bb<<" : "<<dDiffvn2ndEta<<" "<<dYield2ndEta<<endl; | |
412 | // cout<<endl; | |
413 | dVn2ndPOIEta+=dDiffvn2ndEta*dYield2ndEta; | |
414 | dSum2ndEta+=dYield2ndEta; | |
415 | ||
416 | ||
417 | //check why for small number of events there is a mismatch here (should be exactly the same)://to be removed | |
418 | //cout<<dSum2nd<<" to be improved "<<(fch2nd->GetHistPtDiff())->Integral()<<endl;//to be removed | |
419 | } | |
420 | if(dSum2ndEta) | |
421 | { | |
422 | dVn2ndPOIEta/=dSum2ndEta; | |
423 | //cout<<"POI Pt vs POI Eta:"<<endl; | |
424 | //cout<<dVn2ndPOI<<" vs "<<dVn2ndPOIEta<<endl; | |
425 | //cout<<dSum2nd<<" vs "<<dSum2ndEta<<endl; | |
426 | // cout<<"eta = "<<(fchr2nd->GetHistDiffFlowEtaPOI())->GetBinContent(44)<<endl; | |
427 | // cout<<"poi = "<<(fchr2nd->GetHistDiffFlowPtPOI())->GetBinContent(14)<<endl; | |
428 | // cout<<"+++++++++"<<endl; | |
429 | } | |
430 | ||
431 | //xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx | |
432 | ||
1315fe58 | 433 | |
434 | /* | |
435 | Double_t first=16.*pow(two*twoErr,2.); | |
436 | Double_t second=pow(fourErr,2.); | |
437 | Double_t third=-8.*two*cov24; | |
438 | ||
1dfa3c16 | 439 | cout<<endl; |
440 | cout<<endl; | |
441 | cout<<endl; | |
1315fe58 | 442 | cout<<" 1st = "<<(1./16.)*first/(pow(-fourthOrderQCumulant,1.5))<<endl; |
443 | cout<<" 2nd = "<<(1./16.)*second/(pow(-fourthOrderQCumulant,1.5))<<endl; | |
444 | cout<<" 3rd = "<<(1./16.)*third/(pow(-fourthOrderQCumulant,1.5))<<endl; | |
1dfa3c16 | 445 | cout<<endl; |
1315fe58 | 446 | cout<<" nEvts = "<<nEvts<<", AvM = "<<AvM<<endl; |
1dfa3c16 | 447 | cout<<endl; |
448 | cout<<endl; | |
1315fe58 | 449 | cout<<"c-c = "<<pow((1./16.)*((first+second+third)/(pow(-fourthOrderQCumulant,1.5))),0.5)<<endl; |
450 | */ | |
e6614983 | 451 | |
452 | ||
453 | ||
bc92c0cb | 454 | /* |
455 | ||
456 | //<Q-vector components> | |
457 | Double_t AvQx = fQVector->GetBinContent(1); //<Q_x> | |
458 | Double_t AvQy = fQVector->GetBinContent(2); //<Q_y> | |
459 | Double_t AvQ2x = fQVector->GetBinContent(3); //<(Q_x)^2> | |
460 | Double_t AvQ2y = fQVector->GetBinContent(4); //<(Q_y)^2> | |
461 | Double_t AvQ2 = fQVector->GetBinContent(5); //<|Q|^2> | |
462 | Double_t AvQ4 = fQVector->GetBinContent(6); //<|Q|^4> | |
463 | Double_t AvQ_2n2 = fQVector->GetBinContent(7); //<|Q_2n|^2> | |
464 | Double_t ReQ2nQnstarQnstar = fQVector->GetBinContent(8); //<Re[Q_n^2 * Q_2n^*]> | |
465 | Double_t ImQ2nQnstarQnstar = fQVector->GetBinContent(9); //<Im[Q_n^2 * Q_2n^*]> | |
466 | Double_t AvQ_3n2 = fQVector->GetBinContent(10); //<|Q_3n|^2> | |
467 | Double_t AvQ_4n2 = fQVector->GetBinContent(11); //<|Q_4n|^2> | |
468 | Double_t AvQ_5n2 = fQVector->GetBinContent(12); //<|Q_5n|^2> | |
469 | Double_t ReQ3nQ2nstarQnstar = fQVector->GetBinContent(13); //Re<Q_{3n} Q_{2n}^* Q_{n}^*> | |
470 | Double_t ReQ3nQnstarQnstarQnstar = fQVector->GetBinContent(14); //Re<Q_{3n} Q_{n}^* Q_{n}^* Q_{n}^*> | |
471 | Double_t HereQ2nQnQ2nstarQnstar = fQVector->GetBinContent(15); //<|Q_{2n}|^2 |Q_{n}|^2> | |
472 | Double_t HereQ2nQnQnstarQnstarQnstar = fQVector->GetBinContent(16); //Re<Q_{2n} Q_{n} Q_{n}^* Q_{n}^* Q_{n}^*> | |
473 | Double_t AvQ6 = fQVector->GetBinContent(17); //<|Q|^6> | |
474 | ||
475 | ||
476 | ||
477 | ||
478 | */ | |
479 | ||
480 | /* | |
481 | //direct particle correlations | |
482 | Double_t twoDirect_n_n = fDirect->GetBinContent(1); | |
483 | Double_t fourDirect = fDirect->GetBinContent(2); | |
484 | Double_t threeDirect_2n_n_n = fDirect->GetBinContent(3); | |
485 | Double_t threeDirect_3n_2n_n = fDirect->GetBinContent(4); | |
486 | Double_t fourDirect_3n_n_n_n = fDirect->GetBinContent(5); | |
487 | Double_t fourDirect_2n_n_2n_n = fDirect->GetBinContent(6); | |
488 | Double_t fiveDirect_2n_n_n_n_n = fDirect->GetBinContent(7); | |
489 | Double_t sixDirect_n_n_n_n_n_n = fDirect->GetBinContent(8); | |
490 | Double_t twoDirect_2n_2n = fDirect->GetBinContent(9); | |
491 | Double_t twoDirect_3n_3n = fDirect->GetBinContent(10); | |
492 | Double_t twoDirect_4n_4n = fDirect->GetBinContent(11); | |
493 | Double_t twoDirect_5n_5n = fDirect->GetBinContent(12); | |
494 | ||
495 | */ | |
496 | ||
497 | ||
498 | ||
499 | ||
500 | ||
501 | ||
502 | ||
503 | /* | |
504 | ||
505 | ||
506 | //CORRELATIONS | |
507 | //two particle correlations | |
508 | Double_t two_n_n=(AvQ2-AvM)/(AvM*(AvM-1)); | |
509 | Double_t two_2n_2n=(AvQ_2n2-AvM)/(AvM*(AvM-1)); | |
510 | Double_t two_3n_3n=(AvQ_3n2-AvM)/(AvM*(AvM-1)); | |
511 | Double_t two_4n_4n=(AvQ_4n2-AvM)/(AvM*(AvM-1)); | |
512 | Double_t two_5n_5n=(AvQ_5n2-AvM)/(AvM*(AvM-1)); | |
513 | ||
514 | ||
515 | ||
516 | ||
517 | ||
518 | ||
519 | ||
520 | //four particle correlations: | |
521 | //<4>_{n,n|n,n} | |
522 | Double_t four_n_n_n_n = (AvQ4+AvQ_2n2-4.*(AvM-2.)*AvQ2-2.*ReQ2nQnstarQnstar)/(AvM*(AvM-1)*(AvM-2)*(AvM-3))+2./((AvM-1)*(AvM-2)); | |
523 | ||
524 | ||
525 | //<4>_{3n|n,n,n} | |
526 | //Double_t four_3n_n_n_n=(ReQ3nQnstarQnstarQnstar)/(AvM*(AvM-1)*(AvM-2)*(AvM-3))-3.*(three_3n_2n_n+three_2n_n_n)/(AvM-3.)-(3.*two+3.*two_2n+two_3n)/((AvM-2.)*(AvM-3.))-1./((AvM-1.)*(AvM-2.)*(AvM-3.)); OK!!! | |
527 | //Double_t four_3n_n_n_n_=(ReQ3nQnstarQnstarQnstar-3.*ReQ3nQ2nstarQnstar-3.*ReQ2nQnstarQnstar)/(AvM*(AvM-1.)*(AvM-2.)*(AvM-3.))+ (2.*AvQ_3n2 + 3.*AvQ_2n2 + 6.*AvQ2-6.*AvM ) /(AvM*(AvM-1.)*(AvM-2.)*(AvM-3.)); OK!!! (final version) | |
528 | ||
529 | ||
530 | //<4>_{2n,n|2n,n} | |
531 | //Double_t four_2n_n_2n_n = (HereQ2nQnQ2nstarQnstar)/(AvM*(AvM-1)*(AvM-2)*(AvM-3))-2.*(three_2n_n_n+three_3n_2n_n)/(AvM-3.)-((AvM+1.)*two+AvM*two_2n+two_3n)/((AvM-2.)*(AvM-3.))-(AvM)/((AvM-1)*(AvM-2)*(AvM-3)); OK!!! | |
532 | //Double_t four_2n_n_2n_n_Alternative = (HereQ2nQnQ2nstarQnstar-2.*ReQ3nQ2nstarQnstar-2.*ReQ2nQnstarQnstar)/(AvM*(AvM-1)*(AvM-2)*(AvM-3))-((AvM-5)*AvQ2+(AvM-4)*AvQ_2n2-AvQ_3n2)/(AvM*(AvM-1)*(AvM-2)*(AvM-3))+(AvM-6)/((AvM-1)*(AvM-2)*(AvM-3)); OK!!! (final version) | |
533 | ||
534 | ||
535 | //<6>_{n,n,n|n,n,n} | |
536 | //Double_t six_n_n_n_n_n_n=AvQ6/(AvM*(AvM-1)*(AvM-2)*(AvM-3)*(AvM-4)*(AvM-5)) - 3.*(2.*five_2n_n_n_n_n)/(AvM-5) - (2.*four_3n_n_n_n+9.*(AvM-2.)*four+9.*four_2n_n_2n_n)/((AvM-4)*(AvM-5)) - 3.*(2.*(3.*AvM-5.)*three_2n_n_n+2.*three_3n_2n_n)/((AvM-3)*(AvM-4)*(AvM-5)) - ((18.*AvM*AvM-45.*AvM+33.)*two+3.*(3.*AvM-4.)*two_2n+two_3n)/((AvM-2)*(AvM-3)*(AvM-4)*(AvM-5)) - (6.*AvM*AvM-9.*AvM+4.)/((AvM-1)*(AvM-2)*(AvM-3)*(AvM-4)*(AvM-5)); OK!!! | |
537 | //Double_t six_n_n_n_n_n_n = (AvQ6+9.*HereQ2nQnQ2nstarQnstar-6.*HereQ2nQnQnstarQnstarQnstar)/(AvM*(AvM-1)*(AvM-2)*(AvM-3)*(AvM-4)*(AvM-5)) + 4.*(ReQ3nQnstarQnstarQnstar-3.*ReQ3nQ2nstarQnstar)/(AvM*(AvM-1)*(AvM-2)*(AvM-3)*(AvM-4)*(AvM-5)) + 2.*(9.*(AvM-4.)*ReQ2nQnstarQnstar+2.*AvQ_3n2)/(AvM*(AvM-1)*(AvM-2)*(AvM-3)*(AvM-4)*(AvM-5)) - 9.*(AvQ4+AvQ_2n2)/(AvM*(AvM-1)*(AvM-2)*(AvM-3)*(AvM-5)) + (18.*AvQ2 )/(AvM*(AvM-1)*(AvM-3)*(AvM-4)) - (6.)/((AvM-1)*(AvM-2)*(AvM-3)); OK!!! (final version) | |
538 | ||
539 | ||
540 | ||
541 | ||
542 | ||
543 | */ | |
544 | ||
545 | /* | |
546 | ||
547 | ||
548 | cout<<"<4>_{3n,n,n,n} correlation from Q-vector = "<<four_3n_n_n_n<<endl;AvQ2 | |
549 | cout<<"<4>_{3n,n,n,n} correlation directly = "<<fourDirect_3n_n_n_n<<endl; | |
1dfa3c16 | 550 | cout<<endl; |
bc92c0cb | 551 | cout<<"<4>_{2n,n,2n,n} correlation from Q-vector = "<<four_2n_n_2n_n<<endl; |
552 | cout<<"<4>_{2n,n,2n,n} correlation directly = "<<fourDirect_2n_n_2n_n<<endl; | |
1dfa3c16 | 553 | cout<<endl; |
bc92c0cb | 554 | cout<<"<5>_{2n,n,n,n,n} correlation from Q-vector = "<<five_2n_n_n_n_n<<endl; |
555 | cout<<"<5>_{2n,n,n,n,n} correlation directly = "<<fiveDirect_2n_n_n_n_n<<endl; | |
1dfa3c16 | 556 | cout<<endl; |
bc92c0cb | 557 | cout<<"<6>_{n,n,n,n,n,n} correlation from Q-vector = "<<six_n_n_n_n_n_n<<endl; |
558 | cout<<"<6>_{n,n,n,n,n,n} correlation directly = "<<sixDirect_n_n_n_n_n_n<<endl; | |
1dfa3c16 | 559 | cout<<endl; |
bc92c0cb | 560 | */ |
561 | ||
562 | ||
563 | ||
564 | ||
565 | /* | |
566 | ||
567 | //Q-CUMULANTS | |
568 | Double_t fourthOrderQCumulant = (AvQ4+AvQ_2n2-2.*ReQ2nQnstarQnstar)/(AvM*(AvM-1.)*(AvM-2.)*(AvM-3.)) - (2.*AvQ2*AvQ2)/(AvM*AvM*(AvM-1.)*(AvM-1.)) - (8.*AvQ2)/(AvM*(AvM-1.)*(AvM-1.)*(AvM-3.)) + 2./((AvM-1.)*(AvM-1.)*(AvM-2.)); | |
569 | ||
570 | Double_t sixthOrderQCumulant = (AvQ6+9.*HereQ2nQnQ2nstarQnstar-6.*HereQ2nQnQnstarQnstarQnstar)/(AvM*(AvM-1)*(AvM-2)*(AvM-3)*(AvM-4)*(AvM-5)) + 4.*(ReQ3nQnstarQnstarQnstar - 3.*ReQ3nQ2nstarQnstar+AvQ_3n2)/(AvM*(AvM-1)*(AvM-2)*(AvM-3)*(AvM-4)*(AvM-5)) + 18.*(4.*AvM+(AvM-5.)*AvQ2)*ReQ2nQnstarQnstar/(AvM*AvM*(AvM-1)*(AvM-1)*(AvM-2)*(AvM-3)*(AvM-5)) - 9.*(4.*AvM+(AvM-5.)*AvQ2)*(AvQ4+AvQ_2n2)/(AvM*AvM*(AvM-1)*(AvM-1)*(AvM-2)*(AvM-3)*(AvM-5)) + 36.*(5.*AvM-11.)*AvQ2/(AvM*(AvM-1)*(AvM-1)*(AvM-1)*(AvM-2)*(AvM-3)*(AvM-4)) + 12.*AvQ2*AvQ2*(6.*AvM-3.*AvQ2+AvM*AvQ2)/(AvM*AvM*AvM*(AvM-1)*(AvM-1)*(AvM-1)*(AvM-3)) - 24./((AvM-1)*(AvM-1)*(AvM-1)*(AvM-2)*(AvM-3)); | |
571 | ||
572 | ||
573 | ||
574 | ||
575 | ||
576 | ||
577 | ||
578 | ||
1dfa3c16 | 579 | //cout<<endl; |
bc92c0cb | 580 | //cout<<"should be the same? "<<threeDirect_3n_2n_n<<" "<<three_2n_n_nTemp<<endl; |
1dfa3c16 | 581 | //cout<<endl; |
bc92c0cb | 582 | |
583 | ||
584 | ||
585 | ||
586 | ||
587 | ||
588 | ||
1dfa3c16 | 589 | //cout<<endl; |
bc92c0cb | 590 | cout<<"***************************"<<endl; |
1dfa3c16 | 591 | cout<<endl; |
bc92c0cb | 592 | cout<<"multiplicity = "<<AvM<<endl; |
1dfa3c16 | 593 | cout<<endl; |
bc92c0cb | 594 | |
595 | Double_t two=(AvQ2-AvM)/(AvM*(AvM-1)); | |
596 | Double_t two_2n=(AvQ_2n2-AvM)/(AvM*(AvM-1)); | |
597 | Double_t two_3n=(AvQ_3n2-AvM)/(AvM*(AvM-1)); | |
598 | Double_t two_4n=(AvQ_4n2-AvM)/(AvM*(AvM-1)); | |
599 | Double_t two_5n=(AvQ_5n2-AvM)/(AvM*(AvM-1)); | |
600 | ||
601 | ||
602 | //cout<<"two's = "<<two<<" "<<two_2n<<" "<<two_3n<<" "<<two_4n<<" "<<two_5n<<endl; | |
1dfa3c16 | 603 | cout<<endl; |
bc92c0cb | 604 | Double_t four=(2.*AvM*(AvM-3.)+AvQ4-4.*(AvM-2.)*AvQ2-2.*ReQ2nQnstarQnstar+AvQ_2n2)/(AvM*(AvM-1)*(AvM-2)*(AvM-3)); |
605 | Double_t three_2n_n_n=(ReQ2nQnstarQnstar-AvM-2*AvM*(AvM-1)*two-AvM*(AvM-1)*two_2n)/(AvM*(AvM-1)*(AvM-2)); | |
606 | ||
607 | //<3>_{3n,2n,n} | |
608 | Double_t three_3n_2n_n=(ReQ3nQ2nstarQnstar-AvM*(AvM-1)*(two+two_2n+two_3n)-AvM)/(AvM*(AvM-1)*(AvM-2)); | |
609 | ||
610 | //<4>_{3n,n,n,n} | |
611 | //Double_t four_3n_n_n_n=(ReQ3nQnstarQnstarQnstar-3.*AvM*(AvM-1)*(AvM-2)*(three_2n_n_n+three_3n_2n_n)-AvM*(AvM-1)*(3.*two+3.*two_2n+two_3n)-AvM)/(AvM*(AvM-1)*(AvM-2)*(AvM-3)); | |
612 | ||
613 | Double_t four_3n_n_n_n=(ReQ3nQnstarQnstarQnstar)/(AvM*(AvM-1)*(AvM-2)*(AvM-3))-3.*(three_3n_2n_n+three_2n_n_n)/(AvM-3.)-(3.*two+3.*two_2n+two_3n)/((AvM-2.)*(AvM-3.))-1./((AvM-1.)*(AvM-2.)*(AvM-3.)); | |
614 | ||
615 | ||
616 | ||
617 | //<4>_{2n,n,2n,n} | |
618 | Double_t four_2n_n_2n_n=(HereQ2nQnQ2nstarQnstar-2.*AvM*(AvM-1)*(AvM-2)*(three_2n_n_n+three_3n_2n_n)-AvM*(AvM-1)*((AvM+1)*two+AvM*two_2n+two_3n)-AvM*AvM)/(AvM*(AvM-1)*(AvM-2)*(AvM-3)); | |
619 | ||
620 | ||
621 | ||
622 | ||
623 | ||
624 | ||
625 | ||
626 | ||
bc92c0cb | 627 | |
628 | ||
629 | ||
630 | ||
631 | ||
632 | ||
633 | ||
634 | ||
635 | cout<<"<2> correlation from Q-vector = "<<two<<endl; | |
636 | cout<<"<2> correlation directly = "<<twoDirect_n_n<<endl; | |
1dfa3c16 | 637 | cout<<endl; |
bc92c0cb | 638 | cout<<"<4> correlation from Q-vector = "<<four<<endl; |
639 | cout<<"<4> correlation directly = "<<fourDirect<<endl; | |
1dfa3c16 | 640 | cout<<endl; |
bc92c0cb | 641 | cout<<"<3>_{2n,n,n} correlation from Q-vector = "<<three_2n_n_n<<endl; |
642 | cout<<"<3>_{2n,n,n} correlation directly = "<<threeDirect_2n_n_n<<endl; | |
1dfa3c16 | 643 | cout<<endl; |
bc92c0cb | 644 | cout<<"<3>_{3n,2n,n} correlation from Q-vector = "<<three_3n_2n_n<<endl; |
645 | cout<<"<3>_{3n,2n,n} correlation directly = "<<threeDirect_3n_2n_n<<endl; | |
1dfa3c16 | 646 | cout<<endl; |
bc92c0cb | 647 | cout<<"<4>_{3n,n,n,n} correlation from Q-vector = "<<four_3n_n_n_n<<endl; |
648 | cout<<"<4>_{3n,n,n,n} correlation directly = "<<fourDirect_3n_n_n_n<<endl; | |
1dfa3c16 | 649 | cout<<endl; |
bc92c0cb | 650 | cout<<"<4>_{2n,n,2n,n} correlation from Q-vector = "<<four_2n_n_2n_n<<endl; |
651 | cout<<"<4>_{2n,n,2n,n} correlation directly = "<<fourDirect_2n_n_2n_n<<endl; | |
1dfa3c16 | 652 | cout<<endl; |
bc92c0cb | 653 | cout<<"<5>_{2n,n,n,n,n} correlation from Q-vector = "<<five_2n_n_n_n_n<<endl; |
654 | cout<<"<5>_{2n,n,n,n,n} correlation directly = "<<fiveDirect_2n_n_n_n_n<<endl; | |
1dfa3c16 | 655 | cout<<endl; |
bc92c0cb | 656 | cout<<"<6>_{n,n,n,n,n,n} correlation from Q-vector = "<<six_n_n_n_n_n_n<<endl; |
657 | cout<<"<6>_{n,n,n,n,n,n} correlation directly = "<<sixDirect_n_n_n_n_n_n<<endl; | |
1dfa3c16 | 658 | cout<<endl; |
bc92c0cb | 659 | |
660 | ||
661 | ||
662 | ||
663 | //have so far: <2>, <2>_{2n}, <3>_{2n,n,n}, <4> | |
664 | ||
665 | ||
666 | //cout<<"temp re = "<<ReQ2nQnstarQnstar<<endl; | |
667 | //cout<<"temp im = "<<ImQ2nQnstarQnstar<<endl; | |
668 | //cout<<AvQ2<<" "<<sqrt(AvQ4)<<endl; | |
1dfa3c16 | 669 | cout<<endl; |
bc92c0cb | 670 | |
671 | ||
672 | ||
673 | ||
674 | if(AvQ2>AvM){ | |
675 | cout<<"v_2{2} = "<<100*sqrt(two)<<"%"<<endl; | |
676 | }else{ | |
677 | cout<<"v_2{2} = Im"<<endl; | |
678 | } | |
679 | ||
680 | if(four>0){ | |
681 | cout<<"v_2{4} = "<<100*pow(four,1./4.)<<"%"<<endl; | |
682 | }else{ | |
683 | cout<<"v_2{4} = Im"<<endl; | |
684 | } | |
685 | ||
686 | ||
687 | ||
688 | ||
689 | cout<<"AvM = "<<AvM<<endl; | |
1dfa3c16 | 690 | cout<<endl; |
bc92c0cb | 691 | cout<<"*************************************"<<endl; |
692 | cout<<"*************************************"<<endl; | |
693 | cout<<"flow estimates from Q-cumulants:"<<endl; | |
694 | Double_t cumulant2Q=two; | |
695 | Double_t cumulant4Q=four-2.*two*two; | |
696 | Double_t cumulant6Q=12.*two*two*two-9.*two*four+six_n_n_n_n_n_n; | |
697 | ||
1dfa3c16 | 698 | //cout<<endl; |
bc92c0cb | 699 | if(cumulant2Q>0.){ |
700 | cout<<"v_2{2} = "<<100*pow(cumulant2Q,1./2.)<<"%"<<endl; | |
701 | }else{ | |
702 | cout<<"v_2{2} = Im"<<endl; | |
703 | } | |
704 | if(cumulant4Q<0.){ | |
705 | cout<<"v_2{4} = "<<100*pow(-cumulant4Q,1./4.)<<"%"<<endl; | |
706 | }else{ | |
707 | cout<<"v_2{4} = Im"<<endl; | |
708 | } | |
709 | if(cumulant6Q>0.){ | |
710 | cout<<"v_2{6} = "<<100*pow((1./4.)*cumulant6Q,1./6.)<<"%"<<endl; | |
711 | }else{ | |
712 | cout<<"v_2{6} = Im"<<endl; | |
713 | } | |
714 | ||
715 | cout<<"*************************************"<<endl; | |
716 | cout<<"*************************************"<<endl; | |
1dfa3c16 | 717 | cout<<endl; |
bc92c0cb | 718 | |
719 | ||
1dfa3c16 | 720 | cout<<endl; |
bc92c0cb | 721 | cout<<"*************************************"<<endl; |
722 | cout<<"*************************************"<<endl; | |
723 | cout<<"flow estimates from Q-cumulants"<<endl; | |
724 | cout<<"without multiplicities fluctuations:"<<endl; | |
725 | Double_t cumulant2QnoFluct=fQCorr->GetBinContent(1); | |
726 | Double_t cumulant4QnoFluct=fQCorr->GetBinContent(11)-2.*fQCorr->GetBinContent(1)*fQCorr->GetBinContent(1); | |
727 | Double_t cumulant6QnoFluct=12.*fQCorr->GetBinContent(1)*fQCorr->GetBinContent(1)*fQCorr->GetBinContent(1) - 9.*fQCorr->GetBinContent(1)*fQCorr->GetBinContent(11)+fQCorr->GetBinContent(21); | |
728 | ||
1dfa3c16 | 729 | //cout<<endl; |
bc92c0cb | 730 | if(cumulant2QnoFluct>0.){ |
731 | cout<<"v_2{2} = "<<100*pow(cumulant2QnoFluct,1./2.)<<"%"<<endl; | |
732 | fIntRes->SetBinContent(1,100*pow(cumulant2QnoFluct,1./2.)); | |
733 | }else{ | |
734 | cout<<"v_2{2} = Im"<<endl; | |
735 | } | |
736 | if(cumulant4QnoFluct<0.){ | |
737 | cout<<"v_2{4} = "<<100*pow(-cumulant4QnoFluct,1./4.)<<"%"<<endl; | |
738 | fIntRes->SetBinContent(2,100*pow(-cumulant4QnoFluct,1./4.)); | |
739 | }else{ | |
740 | cout<<"v_2{4} = Im"<<endl; | |
741 | } | |
742 | if(cumulant6QnoFluct>0.){ | |
743 | cout<<"v_2{6} = "<<100*pow((1./4.)*cumulant6QnoFluct,1./6.)<<"%"<<endl; | |
744 | fIntRes->SetBinContent(3,100*pow((1./4.)*cumulant6QnoFluct,1./6.)); | |
745 | }else{ | |
746 | cout<<"v_2{6} = Im"<<endl; | |
747 | } | |
748 | ||
749 | cout<<"*************************************"<<endl; | |
750 | cout<<"*************************************"<<endl; | |
1dfa3c16 | 751 | cout<<endl; |
bc92c0cb | 752 | |
753 | ||
754 | ||
755 | ||
756 | ||
757 | ||
758 | cout<<"*****************************************************************"<<endl; | |
759 | cout<<"*****************************************************************"<<endl; | |
760 | cout<<"direct (nested loops) correlations vs correlations from Q-vectors"<<endl; | |
761 | cout<<"for ARBITRARY multiplicity:"<<endl; | |
1dfa3c16 | 762 | cout<<endl; |
bc92c0cb | 763 | cout<<"avarage multiplicity = "<<AvM<<endl; |
1dfa3c16 | 764 | cout<<endl; |
bc92c0cb | 765 | cout<<"<2>_{n|n} correlation from Q-vector = "<<fQCorr->GetBinContent(1)<<endl; |
766 | cout<<"<2>_{n|n} correlation nested loops = "<<fDirect->GetBinContent(1)<<endl; | |
1dfa3c16 | 767 | cout<<endl; |
bc92c0cb | 768 | cout<<"<4>_{n,n|n,n} correlation from Q-vector = "<<fQCorr->GetBinContent(11)<<endl; |
769 | cout<<"<4>_{n,n|n,n} correlation nested loops = "<<fDirect->GetBinContent(2)<<endl; | |
1dfa3c16 | 770 | cout<<endl; |
bc92c0cb | 771 | cout<<"<6>_{n,n,n|n,n,n} correlation from Q-vector = "<<fQCorr->GetBinContent(21)<<endl; |
772 | cout<<"<6>_{n,n,n|n,n,n} correlation nested loops = "<<fDirect->GetBinContent(8)<<endl; | |
773 | cout<<"*****************************************************************"<<endl; | |
774 | cout<<"*****************************************************************"<<endl; | |
775 | ||
776 | ||
777 | ||
778 | ||
779 | ||
780 | ||
781 | ||
782 | cout<<"****** BDO ******"<<endl; | |
783 | if(BDO4<0.){ | |
784 | cout<<"v_2{4} = "<<100*pow(-BDO4,1./4.)<<"%"<<endl; | |
785 | }else{ | |
786 | cout<<"v_2{4} = Im"<<endl; | |
787 | } | |
788 | if(BDO6>0.){ | |
789 | cout<<"v_2{6} = "<<100*pow((1./4.)*BDO6,1./6.)<<"%"<<endl; | |
790 | }else{ | |
791 | cout<<"v_2{6} = Im"<<endl; | |
792 | } | |
793 | ||
794 | ||
795 | ||
1dfa3c16 | 796 | cout<<endl; |
bc92c0cb | 797 | cout<<"fourth order Q-cumulant should be the same and BDO4? "<<fourthOrderQCumulant<<" "<<cumulant4Q<<" "<<BDO4<<endl; |
1dfa3c16 | 798 | cout<<endl; |
799 | cout<<endl; | |
bc92c0cb | 800 | cout<<"sixth order Q-cumulant should be the same and BDO6? "<<sixthOrderQCumulant<<" "<<cumulant6Q<<" "<<BDO6<<endl; |
1dfa3c16 | 801 | cout<<endl; |
bc92c0cb | 802 | |
803 | cout<<"*************************************"<<endl; | |
804 | cout<<"*************************************"<<endl; | |
1dfa3c16 | 805 | cout<<endl; |
bc92c0cb | 806 | |
807 | ||
808 | ||
809 | cout<<"*********************"<<endl; | |
810 | cout<<"multiplicity = "<<AvM<<endl; | |
811 | cout<<"correlations: "<<endl; | |
812 | cout<<"direct = "<<twoDirect_n_n<<endl; | |
813 | cout<<"approx = "<<two_n_n<<endl; | |
814 | cout<<"weight = "<<fQCorr->GetBinContent(1)<<endl; | |
815 | cout<<"*********************"<<endl; | |
816 | cout<<"test = "<<fQCorr->GetBinContent(11)<<" "<<four<<endl; | |
817 | ||
818 | ||
819 | ||
820 | ||
821 | ||
822 | ||
823 | ||
824 | ||
825 | ||
826 | ||
827 | ||
828 | ||
829 | */ | |
830 | ||
831 | ||
832 | ||
833 | ||
834 | ||
835 | ||
836 | ||
837 | ||
838 | ||
839 | ||
840 | ||
841 | ||
842 | ||
843 | ||
844 | ||
bc92c0cb | 845 | |
846 | ||
847 | ||
dee1e0e0 | 848 | /* |
bc92c0cb | 849 | |
850 | ||
dee1e0e0 | 851 | |
852 | ||
52021ae2 | 853 | |
854 | ||
bc92c0cb | 855 | //needed for direct correlations |
856 | ||
857 | ||
1dfa3c16 | 858 | cout<<endl; |
859 | cout<<endl; | |
bc92c0cb | 860 | cout<<" **** cross-checking the formulas ****"<<endl; |
861 | cout<<" **** for integrated flow ****"<<endl; | |
dee1e0e0 | 862 | cout<<"(selected only events for which 8 < M < 14 "<<endl; |
863 | cout<<" from dataset in /data/alice2/ante/AOD) "<<endl; | |
864 | ||
1dfa3c16 | 865 | cout<<endl; |
bc92c0cb | 866 | cout<<" nEvts = "<<nEvts<<", AvM = "<<AvM<<endl; |
1dfa3c16 | 867 | cout<<endl; |
dee1e0e0 | 868 | cout<<"<2>_{n|n} from Q-vectors = "<<fQCorr->GetBinContent(1)<<endl; |
869 | cout<<"<2>_{n|n} from nested loops = "<<fDirect->GetBinContent(1)<<endl; | |
1dfa3c16 | 870 | cout<<endl; |
dee1e0e0 | 871 | cout<<"<2>_{2n|2n} from Q-vectors = "<<fQCorr->GetBinContent(2)<<endl; |
872 | cout<<"<2>_{2n|2n} from nested loops = "<<fDirect->GetBinContent(2)<<endl; | |
1dfa3c16 | 873 | cout<<endl; |
dee1e0e0 | 874 | cout<<"<2>_{3n|3n} from Q-vectors = "<<fQCorr->GetBinContent(3)<<endl; |
875 | cout<<"<2>_{3n|3n} from nested loops = "<<fDirect->GetBinContent(3)<<endl; | |
1dfa3c16 | 876 | cout<<endl; |
dee1e0e0 | 877 | cout<<"<2>_{4n|4n} from Q-vectors = "<<fQCorr->GetBinContent(4)<<endl; |
878 | cout<<"<2>_{4n|4n} from nested loops = "<<fDirect->GetBinContent(4)<<endl; | |
1dfa3c16 | 879 | cout<<endl; |
dee1e0e0 | 880 | cout<<"<3>_{2n,n,n} from Q-vectors = "<<fQCorr->GetBinContent(6)<<endl; |
881 | cout<<"<3>_{2n,n,n} from nested loops = "<<fDirect->GetBinContent(6)<<endl; | |
1dfa3c16 | 882 | cout<<endl; |
dee1e0e0 | 883 | cout<<"<3>_{3n,2n,n} from Q-vectors = "<<fQCorr->GetBinContent(7)<<endl; |
884 | cout<<"<3>_{3n,2n,n} from nested loops = "<<fDirect->GetBinContent(7)<<endl; | |
1dfa3c16 | 885 | cout<<endl; |
dee1e0e0 | 886 | cout<<"<3>_{4n,2n,2n} from Q-vectors = "<<fQCorr->GetBinContent(8)<<endl; |
887 | cout<<"<3>_{4n,2n,2n} from nested loops = "<<fDirect->GetBinContent(8)<<endl; | |
1dfa3c16 | 888 | cout<<endl; |
dee1e0e0 | 889 | cout<<"<3>_{4n,3n,n} from Q-vectors = "<<fQCorr->GetBinContent(9)<<endl; |
890 | cout<<"<3>_{4n,3n,n} from nested loops = "<<fDirect->GetBinContent(9)<<endl; | |
1dfa3c16 | 891 | cout<<endl; |
dee1e0e0 | 892 | cout<<"<4>_{n,n|n,n} from Q-vectors = "<<fQCorr->GetBinContent(11)<<endl; |
893 | cout<<"<4>_{n,n|n,n} from nested loops = "<<fDirect->GetBinContent(11)<<endl; | |
1dfa3c16 | 894 | cout<<endl; |
dee1e0e0 | 895 | cout<<"<4>_{2n,n|2n,n} from Q-vectors = "<<fQCorr->GetBinContent(12)<<endl; |
896 | cout<<"<4>_{2n,n|2n,n} from nested loops = "<<fDirect->GetBinContent(12)<<endl; | |
1dfa3c16 | 897 | cout<<endl; |
dee1e0e0 | 898 | cout<<"<4>_{2n,2n|2n,2n} from Q-vectors = "<<fQCorr->GetBinContent(13)<<endl; |
899 | cout<<"<4>_{2n,2n|2n,2n} from nested loops = "<<fDirect->GetBinContent(13)<<endl; | |
1dfa3c16 | 900 | cout<<endl; |
dee1e0e0 | 901 | cout<<"<4>_{3n|n,n,n} from Q-vectors = "<<fQCorr->GetBinContent(14)<<endl; |
902 | cout<<"<4>_{3n|n,n,n} from nested loops = "<<fDirect->GetBinContent(14)<<endl; | |
1dfa3c16 | 903 | cout<<endl; |
dee1e0e0 | 904 | cout<<"<4>_{3n,n|3n,n} from Q-vectors = "<<fQCorr->GetBinContent(15)<<endl; |
905 | cout<<"<4>_{3n,n|3n,n} from nested loops = "<<fDirect->GetBinContent(15)<<endl; | |
1dfa3c16 | 906 | cout<<endl; |
dee1e0e0 | 907 | cout<<"<4>_{3n,n|2n,2n} from Q-vectors = "<<fQCorr->GetBinContent(16)<<endl; |
908 | cout<<"<4>_{3n,n|2n,2n} from nested loops = "<<fDirect->GetBinContent(16)<<endl; | |
1dfa3c16 | 909 | cout<<endl; |
dee1e0e0 | 910 | cout<<"<4>_{4n|2n,n,n} from Q-vectors = "<<fQCorr->GetBinContent(17)<<endl; |
911 | cout<<"<4>_{4n|2n,n,n} from nested loops = "<<fDirect->GetBinContent(17)<<endl; | |
1dfa3c16 | 912 | cout<<endl; |
dee1e0e0 | 913 | cout<<"<5>_{2n,n|n,n,n} from Q-vectors = "<<fQCorr->GetBinContent(19)<<endl; |
914 | cout<<"<5>_{2n,n|n,n,n} from nested loops = "<<fDirect->GetBinContent(19)<<endl; | |
1dfa3c16 | 915 | cout<<endl; |
dee1e0e0 | 916 | cout<<"<5>_{2n,2n|2n,n,n} from Q-vectors = "<<fQCorr->GetBinContent(20)<<endl; |
917 | cout<<"<5>_{2n,2n|2n,n,n} from nested loops = "<<fDirect->GetBinContent(20)<<endl; | |
1dfa3c16 | 918 | cout<<endl; |
dee1e0e0 | 919 | cout<<"<5>_{3n,n|2n,n,n} from Q-vectors = "<<fQCorr->GetBinContent(21)<<endl; |
920 | cout<<"<5>_{3n,n|2n,n,n} from nested loops = "<<fDirect->GetBinContent(21)<<endl; | |
1dfa3c16 | 921 | cout<<endl; |
dee1e0e0 | 922 | cout<<"<5>_{4n|n,n,n,n} from Q-vectors = "<<fQCorr->GetBinContent(22)<<endl; |
923 | cout<<"<5>_{4n|n,n,n,n} from nested loops = "<<fDirect->GetBinContent(22)<<endl; | |
1dfa3c16 | 924 | cout<<endl; |
dee1e0e0 | 925 | cout<<"<6>_{n,n,n|n,n,n} from Q-vectors = "<<fQCorr->GetBinContent(24)<<endl; |
926 | cout<<"<6>_{n,n,n|n,n,n} from nested loops = "<<fDirect->GetBinContent(24)<<endl; | |
1dfa3c16 | 927 | cout<<endl; |
dee1e0e0 | 928 | cout<<"<6>_{2n,n,n|2n,n,n} from Q-vectors = "<<fQCorr->GetBinContent(25)<<endl; |
929 | cout<<"<6>_{2n,n,n|2n,n,n} from nested loops = "<<fDirect->GetBinContent(25)<<endl; | |
1dfa3c16 | 930 | cout<<endl; |
dee1e0e0 | 931 | cout<<"<6>_{2n,2n|n,n,n,n} from Q-vectors = "<<fQCorr->GetBinContent(26)<<endl; |
932 | cout<<"<6>_{2n,2n|n,n,n,n} from nested loops = "<<fDirect->GetBinContent(26)<<endl; | |
1dfa3c16 | 933 | cout<<endl; |
dee1e0e0 | 934 | cout<<"<6>_{3n,n|n,n,n,n} from Q-vectors = "<<fQCorr->GetBinContent(27)<<endl; |
935 | cout<<"<6>_{3n,n|n,n,n,n} from nested loops = "<<fDirect->GetBinContent(27)<<endl; | |
1dfa3c16 | 936 | cout<<endl; |
dee1e0e0 | 937 | cout<<"<7>_{2n,n,n|n,n,n,n} from Q-vectors = "<<fQCorr->GetBinContent(29)<<endl; |
938 | cout<<"<7>_{2n,n,n|n,n,n,n} from nested loops = "<<fDirect->GetBinContent(29)<<endl; | |
1dfa3c16 | 939 | cout<<endl; |
dee1e0e0 | 940 | cout<<"<8>_{n,n,n,n|n,n,n,n} from Q-vectors = "<<fQCorr->GetBinContent(31)<<endl; |
941 | cout<<"<8>_{n,n,n,n|n,n,n,n} from nested loops = "<<fDirect->GetBinContent(31)<<endl; | |
1dfa3c16 | 942 | cout<<endl; |
bc92c0cb | 943 | |
944 | //DIFFERENTIAL FLOW | |
945 | ||
946 | ||
947 | //41st bin: <2'>_{n|n} | |
948 | //42nd bin: <2'>_{2n|2n} | |
949 | //46th bin: <3'>_{2n|n,n} | |
950 | //47th bin: <3'>_{n,n|2n} | |
951 | //51st bin: <4'>_{n,n|n,n} | |
952 | ||
953 | ||
954 | ||
52021ae2 | 955 | |
bc92c0cb | 956 | |
1dfa3c16 | 957 | cout<<endl; |
958 | cout<<endl; | |
bc92c0cb | 959 | cout<<" **** cross-checking the formulas ****"<<endl; |
960 | cout<<" **** for differential flow ****"<<endl; | |
dee1e0e0 | 961 | cout<<"(selected only events for which 8 < M < 14 "<<endl; |
962 | cout<<" from dataset in /data/alice2/ante/AOD) "<<endl; | |
963 | ||
1dfa3c16 | 964 | cout<<endl; |
bc92c0cb | 965 | cout<<"nEvts = "<<nEvts<<", AvM = "<<AvM<<endl; |
966 | cout<<"0.5 < Pt < 0.6 GeV"<<endl; | |
1dfa3c16 | 967 | cout<<endl; |
968 | cout<<"<2'>_{n|n} from Q-vectors = "<<fbinPt2p1n1n->GetBinContent(6)<<endl;kTRUE | |
bc92c0cb | 969 | cout<<"<2'>_{n|n} from nested loops = "<<fDirect->GetBinContent(41)<<endl; |
1dfa3c16 | 970 | cout<<endl; |
971 | cout<<"<2'>_{2n|2n} from Q-vectors = "<<fbinPt2p2n2n->GetBinContent(6)<<endl; | |
bc92c0cb | 972 | cout<<"<2'>_{2n|2n} from nested loops = "<<fDirect->GetBinContent(42)<<endl; |
1dfa3c16 | 973 | cout<<endl; |
974 | cout<<"<3'>_{2n|n,n} from Q-vectors = "<<fbinPt3p2n1n1n->GetBinContent(6)<<endl; | |
bc92c0cb | 975 | cout<<"<3'>_{2n|n,n} from nested loops = "<<fDirect->GetBinContent(46)<<endl; |
1dfa3c16 | 976 | cout<<endl; |
977 | cout<<"<3'>_{n,n|2n} from Q-vectors = "<<fbinPt3p1n1n2n->GetBinContent(6)<<endl; | |
bc92c0cb | 978 | cout<<"<3'>_{n,n|2n} from nested loops = "<<fDirect->GetBinContent(47)<<endl; |
1dfa3c16 | 979 | cout<<endl; |
980 | cout<<"<4'>_{n,n|n,n} from Q-vectors = "<<fbinPt4p1n1n1n1n->GetBinContent(6)<<endl; | |
bc92c0cb | 981 | cout<<"<4'>_{n,n|n,n} from nested loops = "<<fDirect->GetBinContent(51)<<endl; |
1dfa3c16 | 982 | cout<<endl; |
bc92c0cb | 983 | |
52021ae2 | 984 | |
985 | ||
dee1e0e0 | 986 | |
987 | */ | |
1315fe58 | 988 | |
e6614983 | 989 | |
bc92c0cb | 990 | } |
991 | ||
e6614983 | 992 | |
993 | ||
994 | ||
995 | ||
996 | ||
997 | ||
998 | ||
999 | ||
1000 | ||
1001 | ||
1002 | ||
bc92c0cb | 1003 | |
1004 | ||
1005 |