]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWG2/FLOW/AliFlowCommon/AliQCumulantsFunctions.cxx
spring cleaning, split flow lib into two
[u/mrichter/AliRoot.git] / PWG2 / FLOW / AliFlowCommon / AliQCumulantsFunctions.cxx
CommitLineData
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
49ClassImp(AliQCumulantsFunctions)
50
51//================================================================================================================_
52
53AliQCumulantsFunctions::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
95AliQCumulantsFunctions::~AliQCumulantsFunctions()
96{
97 //destructor
98}
99
7e58a232 100AliQCumulantsFunctions::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
144void AliQCumulantsFunctions::Calculate()
145{
146 //final results
4057ba99 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;
4057ba99 209 cout<<"**************************************"<<endl;
210 cout<<"**************************************"<<endl;
211 cout<<"flow estimates from Q-cumulants (RP):"<<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;
4057ba99 228 }
bc92c0cb 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;
4057ba99 269 cout<<"**************************************"<<endl;
270 cout<<"**************************************"<<endl;
1dfa3c16 271 cout<<endl;
bc92c0cb 272//---------------------------------------------------------------------------------------------------------
1315fe58 273
bc92c0cb 274//---------------------------------------------------------------------------------------------------------
1dfa3c16 275//differential flow (RP)
276
277//Pt:
278Double_t secondOrderQCumulantDiffFlowPtRP = 0.;
279Double_t fourthOrderQCumulantDiffFlowPtRP = 0.;
280
281Int_t nBinsPtRP = fbinPt2p1n1nRP->GetNbinsX();
282
283for(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:
302Double_t secondOrderQCumulantDiffFlowEtaRP = 0.;
303Double_t fourthOrderQCumulantDiffFlowEtaRP = 0.;
304
305Int_t nBinsEtaRP = fbinEta2p1n1nRP->GetNbinsX();
bc92c0cb 306
1dfa3c16 307for(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 326Int_t nBinsPtPOI = fbinPt2p1n1nPOI->GetNbinsX();
327Int_t nBinsEtaPOI = fbinEta2p1n1nPOI->GetNbinsX();
1dfa3c16 328
329//Pt:
330Double_t secondOrderQCumulantDiffFlowPtPOI = 0.;
331Double_t fourthOrderQCumulantDiffFlowPtPOI = 0.;
8842fb2b 332
4e1fb6e8 333Double_t dVn2ndPOI=0.,dSd2ndPOI=0.,dDiffvn2nd=0.,dYield2nd=0.,dSum2nd=0.;
334Double_t dVn4thPOI=0.,dSd4thPOI=0.,dDiffvn4th=0.,dYield4th=0.,dSum4th=0.;
7e58a232 335
336Double_t dVn2ndPOIEta=0.,dDiffvn2ndEta=0.,dYield2ndEta=0.,dSum2ndEta=0.;//to be removed
1dfa3c16 337
338for(Int_t bb=1;bb<nBinsPtPOI+1;bb++)
bc92c0cb 339{
7e58a232 340 //QC{2}
1dfa3c16 341 if(fbinPt2p1n1nPOI->GetBinEntries(bb)>0.&&vn2!=0)
bc92c0cb 342 {
7e58a232 343 //cout<<"bin = "<<bb<<" : "<<(fch2nd->GetHistPtDiff())->GetBinContent(bb)<<endl;
344 //cout<<endl;
1dfa3c16 345 secondOrderQCumulantDiffFlowPtPOI = fbinPt2p1n1nPOI->GetBinContent(bb);
346 fDiffRes2nd->SetBinContent(bb,secondOrderQCumulantDiffFlowPtPOI/vn2);
8842fb2b 347 //common histogram:
7e58a232 348 fchr2nd->FillDifferentialFlowPtPOI(bb,secondOrderQCumulantDiffFlowPtPOI/vn2, 0.);//to be improved (errors) && bb or bb+1
349 //-------------------------------------------------------------
350 //integrated flow (POI, Pt, 2nd order):
351 dDiffvn2nd=(fchr2nd->GetHistDiffFlowPtPOI())->GetBinContent(bb);
352 dYield2nd=(fch2nd->GetHistPtDiff())->GetBinContent(bb);
353 dVn2ndPOI+=dDiffvn2nd*dYield2nd;
354 dSum2nd+=dYield2nd;
355 //-------------------------------------------------------------
bc92c0cb 356 }
7e58a232 357 //QC{4]
1dfa3c16 358 if(fbinPt4p1n1n1n1nPOI->GetBinEntries(bb)>0.&&vn4!=0.)
bc92c0cb 359 {
1dfa3c16 360 fourthOrderQCumulantDiffFlowPtPOI = fbinPt4p1n1n1n1nPOI->GetBinContent(bb)-2.*fbinPt2p1n1nPOI->GetBinContent(bb)*pow(vn2,2.);
361 fDiffRes4th->SetBinContent(bb,-1.*fourthOrderQCumulantDiffFlowPtPOI/pow(vn4,3.));
8842fb2b 362 //common histogram:
1dfa3c16 363 fchr4th->FillDifferentialFlowPtPOI(bb,-1.*fourthOrderQCumulantDiffFlowPtPOI/pow(vn4,3.), 0.);//to be improved (errors)
4057ba99 364 //-------------------------------------------------------------
365 //integrated flow (POI, Pt, 4th order):
366 dDiffvn4th=(fchr4th->GetHistDiffFlowPtPOI())->GetBinContent(bb);
367 dYield4th=(fch4th->GetHistPtDiff())->GetBinContent(bb);
368 dVn4thPOI+=dDiffvn4th*dYield4th;
369 dSum4th+=dYield4th;
370 //-------------------------------------------------------------
bc92c0cb 371 }
372}
1dfa3c16 373
4e1fb6e8 374//---------------------------------------------------------------------------------------------------
375//integrated flow estimates from Q-cumulants (POI):
376cout<<endl;
377cout<<"**************************************"<<endl;
378cout<<"**************************************"<<endl;
379cout<<"flow estimates from Q-cumulants (POI):"<<endl;
380cout<<endl;
7e58a232 381//storing the final results for integrated flow (POI):
382//QC{2}
383if(dSum2nd && fchr2nd)
384{
385 dVn2ndPOI/=dSum2nd;
4057ba99 386 fchr2nd->FillIntegratedFlowPOI(dVn2ndPOI,0.);//to be improved (errors)
4e1fb6e8 387 cout<<" v_"<<n<<"{2} = "<<dVn2ndPOI<<" +/- "<<dSd2ndPOI<<endl;
388}else
389 {
390 cout<<" v_"<<n<<"{2} = Im"<<endl;
391 }
392
4057ba99 393//QC{4}
394if(dSum4th && fchr4th)
395{
396 dVn4thPOI/=dSum4th;
397 fchr4th->FillIntegratedFlowPOI(dVn4thPOI,0.);//to be improved (errors)
4e1fb6e8 398 cout<<" v_"<<n<<"{4} = "<<dVn4thPOI<<" +/- "<<dSd4thPOI<<endl;
399}else
400 {
401 cout<<" v_"<<n<<"{4} = Im"<<endl;
402 }
403
404cout<<endl;
405cout<<" nEvts = "<<nEvts<<", AvM = "<<AvM<<endl;
406cout<<"**************************************"<<endl;
407cout<<"**************************************"<<endl;
408cout<<endl;
409//---------------------------------------------------------------------------------------------------
410
7e58a232 411
1dfa3c16 412//Eta:
413Double_t secondOrderQCumulantDiffFlowEtaPOI = 0.;
414Double_t fourthOrderQCumulantDiffFlowEtaPOI = 0.;
415
1dfa3c16 416for(Int_t bb=1;bb<nBinsEtaPOI+1;bb++)
417{
418 if(fbinEta2p1n1nPOI->GetBinEntries(bb)>0.&&vn2!=0)
419 {
420 secondOrderQCumulantDiffFlowEtaPOI = fbinEta2p1n1nPOI->GetBinContent(bb);
421 fDiffRes2nd->SetBinContent(bb,secondOrderQCumulantDiffFlowEtaPOI/vn2);
422 //common histogram:
423 fchr2nd->FillDifferentialFlowEtaPOI(bb,secondOrderQCumulantDiffFlowEtaPOI/vn2, 0.);//to be improved (errors)
424 }
425 if(fbinEta4p1n1n1n1nPOI->GetBinEntries(bb)>0.&&vn4!=0.)
426 {
427 fourthOrderQCumulantDiffFlowEtaPOI = fbinEta4p1n1n1n1nPOI->GetBinContent(bb)-2.*fbinEta2p1n1nPOI->GetBinContent(bb)*pow(vn2,2.);
428 fDiffRes4th->SetBinContent(bb,-1.*fourthOrderQCumulantDiffFlowEtaPOI/pow(vn4,3.));
429 //common histogram:
430 fchr4th->FillDifferentialFlowEtaPOI(bb,-1.*fourthOrderQCumulantDiffFlowEtaPOI/pow(vn4,3.), 0.);//to be improved (errors)
431 }
432}
433
bc92c0cb 434//---------------------------------------------------------------------------------------------------------
435
4057ba99 436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
1dfa3c16 476
1315fe58 477
7e58a232 478//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
479// !!!! to be removed !!!!
480for(Int_t bb=1;bb<nBinsEtaPOI+1;bb++)
481{
482 //integrated flow (POI, Eta, 2nd order):
483 dDiffvn2ndEta=(fchr2nd->GetHistDiffFlowEtaPOI())->GetBinContent(bb);
484 dYield2ndEta=(fch2nd->GetHistEtaDiff())->GetBinContent(bb);
485 // cout<<"bin = "<<bb<<" : "<<dDiffvn2ndEta<<" "<<dYield2ndEta<<endl;
486 // cout<<endl;
487 dVn2ndPOIEta+=dDiffvn2ndEta*dYield2ndEta;
488 dSum2ndEta+=dYield2ndEta;
489
490
491//check why for small number of events there is a mismatch here (should be exactly the same)://to be removed
492//cout<<dSum2nd<<" to be improved "<<(fch2nd->GetHistPtDiff())->Integral()<<endl;//to be removed
493}
494if(dSum2ndEta)
495{
496 dVn2ndPOIEta/=dSum2ndEta;
497 //cout<<"POI Pt vs POI Eta:"<<endl;
498 //cout<<dVn2ndPOI<<" vs "<<dVn2ndPOIEta<<endl;
499 //cout<<dSum2nd<<" vs "<<dSum2ndEta<<endl;
500// cout<<"eta = "<<(fchr2nd->GetHistDiffFlowEtaPOI())->GetBinContent(44)<<endl;
501// cout<<"poi = "<<(fchr2nd->GetHistDiffFlowPtPOI())->GetBinContent(14)<<endl;
502// cout<<"+++++++++"<<endl;
503}
504
505//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
506
4057ba99 507
508
509
510
511
512
513
514
515
516
517
518
1315fe58 519
520 /*
521 Double_t first=16.*pow(two*twoErr,2.);
522 Double_t second=pow(fourErr,2.);
523 Double_t third=-8.*two*cov24;
524
1dfa3c16 525 cout<<endl;
526 cout<<endl;
527 cout<<endl;
1315fe58 528 cout<<" 1st = "<<(1./16.)*first/(pow(-fourthOrderQCumulant,1.5))<<endl;
529 cout<<" 2nd = "<<(1./16.)*second/(pow(-fourthOrderQCumulant,1.5))<<endl;
530 cout<<" 3rd = "<<(1./16.)*third/(pow(-fourthOrderQCumulant,1.5))<<endl;
1dfa3c16 531 cout<<endl;
1315fe58 532 cout<<" nEvts = "<<nEvts<<", AvM = "<<AvM<<endl;
1dfa3c16 533 cout<<endl;
534 cout<<endl;
1315fe58 535 cout<<"c-c = "<<pow((1./16.)*((first+second+third)/(pow(-fourthOrderQCumulant,1.5))),0.5)<<endl;
536 */
e6614983 537
538
539
bc92c0cb 540 /*
541
542 //<Q-vector components>
543 Double_t AvQx = fQVector->GetBinContent(1); //<Q_x>
544 Double_t AvQy = fQVector->GetBinContent(2); //<Q_y>
545 Double_t AvQ2x = fQVector->GetBinContent(3); //<(Q_x)^2>
546 Double_t AvQ2y = fQVector->GetBinContent(4); //<(Q_y)^2>
547 Double_t AvQ2 = fQVector->GetBinContent(5); //<|Q|^2>
548 Double_t AvQ4 = fQVector->GetBinContent(6); //<|Q|^4>
549 Double_t AvQ_2n2 = fQVector->GetBinContent(7); //<|Q_2n|^2>
550 Double_t ReQ2nQnstarQnstar = fQVector->GetBinContent(8); //<Re[Q_n^2 * Q_2n^*]>
551 Double_t ImQ2nQnstarQnstar = fQVector->GetBinContent(9); //<Im[Q_n^2 * Q_2n^*]>
552 Double_t AvQ_3n2 = fQVector->GetBinContent(10); //<|Q_3n|^2>
553 Double_t AvQ_4n2 = fQVector->GetBinContent(11); //<|Q_4n|^2>
554 Double_t AvQ_5n2 = fQVector->GetBinContent(12); //<|Q_5n|^2>
555 Double_t ReQ3nQ2nstarQnstar = fQVector->GetBinContent(13); //Re<Q_{3n} Q_{2n}^* Q_{n}^*>
556 Double_t ReQ3nQnstarQnstarQnstar = fQVector->GetBinContent(14); //Re<Q_{3n} Q_{n}^* Q_{n}^* Q_{n}^*>
557 Double_t HereQ2nQnQ2nstarQnstar = fQVector->GetBinContent(15); //<|Q_{2n}|^2 |Q_{n}|^2>
558 Double_t HereQ2nQnQnstarQnstarQnstar = fQVector->GetBinContent(16); //Re<Q_{2n} Q_{n} Q_{n}^* Q_{n}^* Q_{n}^*>
559 Double_t AvQ6 = fQVector->GetBinContent(17); //<|Q|^6>
560
561
562
563
564*/
565
566 /*
567 //direct particle correlations
568 Double_t twoDirect_n_n = fDirect->GetBinContent(1);
569 Double_t fourDirect = fDirect->GetBinContent(2);
570 Double_t threeDirect_2n_n_n = fDirect->GetBinContent(3);
571 Double_t threeDirect_3n_2n_n = fDirect->GetBinContent(4);
572 Double_t fourDirect_3n_n_n_n = fDirect->GetBinContent(5);
573 Double_t fourDirect_2n_n_2n_n = fDirect->GetBinContent(6);
574 Double_t fiveDirect_2n_n_n_n_n = fDirect->GetBinContent(7);
575 Double_t sixDirect_n_n_n_n_n_n = fDirect->GetBinContent(8);
576 Double_t twoDirect_2n_2n = fDirect->GetBinContent(9);
577 Double_t twoDirect_3n_3n = fDirect->GetBinContent(10);
578 Double_t twoDirect_4n_4n = fDirect->GetBinContent(11);
579 Double_t twoDirect_5n_5n = fDirect->GetBinContent(12);
580
581*/
582
583
584
585
586
587
588
589/*
590
591
592 //CORRELATIONS
593 //two particle correlations
594 Double_t two_n_n=(AvQ2-AvM)/(AvM*(AvM-1));
595 Double_t two_2n_2n=(AvQ_2n2-AvM)/(AvM*(AvM-1));
596 Double_t two_3n_3n=(AvQ_3n2-AvM)/(AvM*(AvM-1));
597 Double_t two_4n_4n=(AvQ_4n2-AvM)/(AvM*(AvM-1));
598 Double_t two_5n_5n=(AvQ_5n2-AvM)/(AvM*(AvM-1));
599
600
601
602
603
604
605
606 //four particle correlations:
607 //<4>_{n,n|n,n}
608 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));
609
610
611 //<4>_{3n|n,n,n}
612 //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!!!
613 //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)
614
615
616 //<4>_{2n,n|2n,n}
617 //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!!!
618 //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)
619
620
621 //<6>_{n,n,n|n,n,n}
622 //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!!!
623 //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)
624
625
626
627
628
629*/
630
631 /*
632
633
634 cout<<"<4>_{3n,n,n,n} correlation from Q-vector = "<<four_3n_n_n_n<<endl;AvQ2
635 cout<<"<4>_{3n,n,n,n} correlation directly = "<<fourDirect_3n_n_n_n<<endl;
1dfa3c16 636 cout<<endl;
bc92c0cb 637 cout<<"<4>_{2n,n,2n,n} correlation from Q-vector = "<<four_2n_n_2n_n<<endl;
638 cout<<"<4>_{2n,n,2n,n} correlation directly = "<<fourDirect_2n_n_2n_n<<endl;
1dfa3c16 639 cout<<endl;
bc92c0cb 640 cout<<"<5>_{2n,n,n,n,n} correlation from Q-vector = "<<five_2n_n_n_n_n<<endl;
641 cout<<"<5>_{2n,n,n,n,n} correlation directly = "<<fiveDirect_2n_n_n_n_n<<endl;
1dfa3c16 642 cout<<endl;
bc92c0cb 643 cout<<"<6>_{n,n,n,n,n,n} correlation from Q-vector = "<<six_n_n_n_n_n_n<<endl;
644 cout<<"<6>_{n,n,n,n,n,n} correlation directly = "<<sixDirect_n_n_n_n_n_n<<endl;
1dfa3c16 645 cout<<endl;
bc92c0cb 646 */
647
648
649
650
651 /*
652
653//Q-CUMULANTS
654Double_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.));
655
656Double_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));
657
658
659
660
661
662
663
664
1dfa3c16 665 //cout<<endl;
bc92c0cb 666 //cout<<"should be the same? "<<threeDirect_3n_2n_n<<" "<<three_2n_n_nTemp<<endl;
1dfa3c16 667 //cout<<endl;
bc92c0cb 668
669
670
671
672
673
674
1dfa3c16 675 //cout<<endl;
bc92c0cb 676 cout<<"***************************"<<endl;
1dfa3c16 677 cout<<endl;
bc92c0cb 678 cout<<"multiplicity = "<<AvM<<endl;
1dfa3c16 679 cout<<endl;
bc92c0cb 680
681 Double_t two=(AvQ2-AvM)/(AvM*(AvM-1));
682 Double_t two_2n=(AvQ_2n2-AvM)/(AvM*(AvM-1));
683 Double_t two_3n=(AvQ_3n2-AvM)/(AvM*(AvM-1));
684 Double_t two_4n=(AvQ_4n2-AvM)/(AvM*(AvM-1));
685 Double_t two_5n=(AvQ_5n2-AvM)/(AvM*(AvM-1));
686
687
688 //cout<<"two's = "<<two<<" "<<two_2n<<" "<<two_3n<<" "<<two_4n<<" "<<two_5n<<endl;
1dfa3c16 689 cout<<endl;
bc92c0cb 690 Double_t four=(2.*AvM*(AvM-3.)+AvQ4-4.*(AvM-2.)*AvQ2-2.*ReQ2nQnstarQnstar+AvQ_2n2)/(AvM*(AvM-1)*(AvM-2)*(AvM-3));
691 Double_t three_2n_n_n=(ReQ2nQnstarQnstar-AvM-2*AvM*(AvM-1)*two-AvM*(AvM-1)*two_2n)/(AvM*(AvM-1)*(AvM-2));
692
693 //<3>_{3n,2n,n}
694 Double_t three_3n_2n_n=(ReQ3nQ2nstarQnstar-AvM*(AvM-1)*(two+two_2n+two_3n)-AvM)/(AvM*(AvM-1)*(AvM-2));
695
696 //<4>_{3n,n,n,n}
697 //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));
698
699 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.));
700
701
702
703 //<4>_{2n,n,2n,n}
704 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));
705
706
707
708
709
710
711
712
bc92c0cb 713
714
715
716
717
718
719
720
721 cout<<"<2> correlation from Q-vector = "<<two<<endl;
722 cout<<"<2> correlation directly = "<<twoDirect_n_n<<endl;
1dfa3c16 723 cout<<endl;
bc92c0cb 724 cout<<"<4> correlation from Q-vector = "<<four<<endl;
725 cout<<"<4> correlation directly = "<<fourDirect<<endl;
1dfa3c16 726 cout<<endl;
bc92c0cb 727 cout<<"<3>_{2n,n,n} correlation from Q-vector = "<<three_2n_n_n<<endl;
728 cout<<"<3>_{2n,n,n} correlation directly = "<<threeDirect_2n_n_n<<endl;
1dfa3c16 729 cout<<endl;
bc92c0cb 730 cout<<"<3>_{3n,2n,n} correlation from Q-vector = "<<three_3n_2n_n<<endl;
731 cout<<"<3>_{3n,2n,n} correlation directly = "<<threeDirect_3n_2n_n<<endl;
1dfa3c16 732 cout<<endl;
bc92c0cb 733 cout<<"<4>_{3n,n,n,n} correlation from Q-vector = "<<four_3n_n_n_n<<endl;
734 cout<<"<4>_{3n,n,n,n} correlation directly = "<<fourDirect_3n_n_n_n<<endl;
1dfa3c16 735 cout<<endl;
bc92c0cb 736 cout<<"<4>_{2n,n,2n,n} correlation from Q-vector = "<<four_2n_n_2n_n<<endl;
737 cout<<"<4>_{2n,n,2n,n} correlation directly = "<<fourDirect_2n_n_2n_n<<endl;
1dfa3c16 738 cout<<endl;
bc92c0cb 739 cout<<"<5>_{2n,n,n,n,n} correlation from Q-vector = "<<five_2n_n_n_n_n<<endl;
740 cout<<"<5>_{2n,n,n,n,n} correlation directly = "<<fiveDirect_2n_n_n_n_n<<endl;
1dfa3c16 741 cout<<endl;
bc92c0cb 742 cout<<"<6>_{n,n,n,n,n,n} correlation from Q-vector = "<<six_n_n_n_n_n_n<<endl;
743 cout<<"<6>_{n,n,n,n,n,n} correlation directly = "<<sixDirect_n_n_n_n_n_n<<endl;
1dfa3c16 744 cout<<endl;
bc92c0cb 745
746
747
748
749 //have so far: <2>, <2>_{2n}, <3>_{2n,n,n}, <4>
750
751
752 //cout<<"temp re = "<<ReQ2nQnstarQnstar<<endl;
753 //cout<<"temp im = "<<ImQ2nQnstarQnstar<<endl;
754 //cout<<AvQ2<<" "<<sqrt(AvQ4)<<endl;
1dfa3c16 755 cout<<endl;
bc92c0cb 756
757
758
759
760 if(AvQ2>AvM){
761 cout<<"v_2{2} = "<<100*sqrt(two)<<"%"<<endl;
762 }else{
763 cout<<"v_2{2} = Im"<<endl;
764 }
765
766 if(four>0){
767 cout<<"v_2{4} = "<<100*pow(four,1./4.)<<"%"<<endl;
768 }else{
769 cout<<"v_2{4} = Im"<<endl;
770 }
771
772
773
774
775 cout<<"AvM = "<<AvM<<endl;
1dfa3c16 776 cout<<endl;
bc92c0cb 777 cout<<"*************************************"<<endl;
778 cout<<"*************************************"<<endl;
779 cout<<"flow estimates from Q-cumulants:"<<endl;
780 Double_t cumulant2Q=two;
781 Double_t cumulant4Q=four-2.*two*two;
782 Double_t cumulant6Q=12.*two*two*two-9.*two*four+six_n_n_n_n_n_n;
783
1dfa3c16 784 //cout<<endl;
bc92c0cb 785 if(cumulant2Q>0.){
786 cout<<"v_2{2} = "<<100*pow(cumulant2Q,1./2.)<<"%"<<endl;
787 }else{
788 cout<<"v_2{2} = Im"<<endl;
789 }
790 if(cumulant4Q<0.){
791 cout<<"v_2{4} = "<<100*pow(-cumulant4Q,1./4.)<<"%"<<endl;
792 }else{
793 cout<<"v_2{4} = Im"<<endl;
794 }
795 if(cumulant6Q>0.){
796 cout<<"v_2{6} = "<<100*pow((1./4.)*cumulant6Q,1./6.)<<"%"<<endl;
797 }else{
798 cout<<"v_2{6} = Im"<<endl;
799 }
800
801 cout<<"*************************************"<<endl;
802 cout<<"*************************************"<<endl;
1dfa3c16 803 cout<<endl;
bc92c0cb 804
805
1dfa3c16 806 cout<<endl;
bc92c0cb 807 cout<<"*************************************"<<endl;
808 cout<<"*************************************"<<endl;
809 cout<<"flow estimates from Q-cumulants"<<endl;
810 cout<<"without multiplicities fluctuations:"<<endl;
811 Double_t cumulant2QnoFluct=fQCorr->GetBinContent(1);
812 Double_t cumulant4QnoFluct=fQCorr->GetBinContent(11)-2.*fQCorr->GetBinContent(1)*fQCorr->GetBinContent(1);
813 Double_t cumulant6QnoFluct=12.*fQCorr->GetBinContent(1)*fQCorr->GetBinContent(1)*fQCorr->GetBinContent(1) - 9.*fQCorr->GetBinContent(1)*fQCorr->GetBinContent(11)+fQCorr->GetBinContent(21);
814
1dfa3c16 815 //cout<<endl;
bc92c0cb 816 if(cumulant2QnoFluct>0.){
817 cout<<"v_2{2} = "<<100*pow(cumulant2QnoFluct,1./2.)<<"%"<<endl;
818 fIntRes->SetBinContent(1,100*pow(cumulant2QnoFluct,1./2.));
819 }else{
820 cout<<"v_2{2} = Im"<<endl;
821 }
822 if(cumulant4QnoFluct<0.){
823 cout<<"v_2{4} = "<<100*pow(-cumulant4QnoFluct,1./4.)<<"%"<<endl;
824 fIntRes->SetBinContent(2,100*pow(-cumulant4QnoFluct,1./4.));
825 }else{
826 cout<<"v_2{4} = Im"<<endl;
827 }
828 if(cumulant6QnoFluct>0.){
829 cout<<"v_2{6} = "<<100*pow((1./4.)*cumulant6QnoFluct,1./6.)<<"%"<<endl;
830 fIntRes->SetBinContent(3,100*pow((1./4.)*cumulant6QnoFluct,1./6.));
831 }else{
832 cout<<"v_2{6} = Im"<<endl;
833 }
834
835 cout<<"*************************************"<<endl;
836 cout<<"*************************************"<<endl;
1dfa3c16 837 cout<<endl;
bc92c0cb 838
839
840
841
842
843
844 cout<<"*****************************************************************"<<endl;
845 cout<<"*****************************************************************"<<endl;
846 cout<<"direct (nested loops) correlations vs correlations from Q-vectors"<<endl;
847 cout<<"for ARBITRARY multiplicity:"<<endl;
1dfa3c16 848 cout<<endl;
bc92c0cb 849 cout<<"avarage multiplicity = "<<AvM<<endl;
1dfa3c16 850 cout<<endl;
bc92c0cb 851 cout<<"<2>_{n|n} correlation from Q-vector = "<<fQCorr->GetBinContent(1)<<endl;
852 cout<<"<2>_{n|n} correlation nested loops = "<<fDirect->GetBinContent(1)<<endl;
1dfa3c16 853 cout<<endl;
bc92c0cb 854 cout<<"<4>_{n,n|n,n} correlation from Q-vector = "<<fQCorr->GetBinContent(11)<<endl;
855 cout<<"<4>_{n,n|n,n} correlation nested loops = "<<fDirect->GetBinContent(2)<<endl;
1dfa3c16 856 cout<<endl;
bc92c0cb 857 cout<<"<6>_{n,n,n|n,n,n} correlation from Q-vector = "<<fQCorr->GetBinContent(21)<<endl;
858 cout<<"<6>_{n,n,n|n,n,n} correlation nested loops = "<<fDirect->GetBinContent(8)<<endl;
859 cout<<"*****************************************************************"<<endl;
860 cout<<"*****************************************************************"<<endl;
861
862
863
864
865
866
867
868 cout<<"****** BDO ******"<<endl;
869 if(BDO4<0.){
870 cout<<"v_2{4} = "<<100*pow(-BDO4,1./4.)<<"%"<<endl;
871 }else{
872 cout<<"v_2{4} = Im"<<endl;
873 }
874 if(BDO6>0.){
875 cout<<"v_2{6} = "<<100*pow((1./4.)*BDO6,1./6.)<<"%"<<endl;
876 }else{
877 cout<<"v_2{6} = Im"<<endl;
878 }
879
880
881
1dfa3c16 882 cout<<endl;
bc92c0cb 883 cout<<"fourth order Q-cumulant should be the same and BDO4? "<<fourthOrderQCumulant<<" "<<cumulant4Q<<" "<<BDO4<<endl;
1dfa3c16 884 cout<<endl;
885 cout<<endl;
bc92c0cb 886 cout<<"sixth order Q-cumulant should be the same and BDO6? "<<sixthOrderQCumulant<<" "<<cumulant6Q<<" "<<BDO6<<endl;
1dfa3c16 887 cout<<endl;
bc92c0cb 888
889 cout<<"*************************************"<<endl;
890 cout<<"*************************************"<<endl;
1dfa3c16 891 cout<<endl;
bc92c0cb 892
893
894
895 cout<<"*********************"<<endl;
896 cout<<"multiplicity = "<<AvM<<endl;
897 cout<<"correlations: "<<endl;
898 cout<<"direct = "<<twoDirect_n_n<<endl;
899 cout<<"approx = "<<two_n_n<<endl;
900 cout<<"weight = "<<fQCorr->GetBinContent(1)<<endl;
901 cout<<"*********************"<<endl;
902 cout<<"test = "<<fQCorr->GetBinContent(11)<<" "<<four<<endl;
903
904
905
906
907
908
909
910
911
912
913
914
915*/
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
bc92c0cb 931
932
933
4057ba99 934Bool_t bNestedLoopsResults=kFALSE;
935if(bNestedLoopsResults)
936{
937 //needed for direct correlations (obtained from nested loops)
1dfa3c16 938 cout<<endl;
939 cout<<endl;
bc92c0cb 940 cout<<" **** cross-checking the formulas ****"<<endl;
941 cout<<" **** for integrated flow ****"<<endl;
4057ba99 942 cout<<"(selected only events for which 0 < M < 12 "<<endl;
dee1e0e0 943 cout<<" from dataset in /data/alice2/ante/AOD) "<<endl;
944
1dfa3c16 945 cout<<endl;
bc92c0cb 946 cout<<" nEvts = "<<nEvts<<", AvM = "<<AvM<<endl;
1dfa3c16 947 cout<<endl;
dee1e0e0 948 cout<<"<2>_{n|n} from Q-vectors = "<<fQCorr->GetBinContent(1)<<endl;
949 cout<<"<2>_{n|n} from nested loops = "<<fDirect->GetBinContent(1)<<endl;
1dfa3c16 950 cout<<endl;
dee1e0e0 951 cout<<"<2>_{2n|2n} from Q-vectors = "<<fQCorr->GetBinContent(2)<<endl;
952 cout<<"<2>_{2n|2n} from nested loops = "<<fDirect->GetBinContent(2)<<endl;
1dfa3c16 953 cout<<endl;
dee1e0e0 954 cout<<"<2>_{3n|3n} from Q-vectors = "<<fQCorr->GetBinContent(3)<<endl;
955 cout<<"<2>_{3n|3n} from nested loops = "<<fDirect->GetBinContent(3)<<endl;
1dfa3c16 956 cout<<endl;
dee1e0e0 957 cout<<"<2>_{4n|4n} from Q-vectors = "<<fQCorr->GetBinContent(4)<<endl;
958 cout<<"<2>_{4n|4n} from nested loops = "<<fDirect->GetBinContent(4)<<endl;
1dfa3c16 959 cout<<endl;
dee1e0e0 960 cout<<"<3>_{2n,n,n} from Q-vectors = "<<fQCorr->GetBinContent(6)<<endl;
961 cout<<"<3>_{2n,n,n} from nested loops = "<<fDirect->GetBinContent(6)<<endl;
1dfa3c16 962 cout<<endl;
dee1e0e0 963 cout<<"<3>_{3n,2n,n} from Q-vectors = "<<fQCorr->GetBinContent(7)<<endl;
964 cout<<"<3>_{3n,2n,n} from nested loops = "<<fDirect->GetBinContent(7)<<endl;
1dfa3c16 965 cout<<endl;
dee1e0e0 966 cout<<"<3>_{4n,2n,2n} from Q-vectors = "<<fQCorr->GetBinContent(8)<<endl;
967 cout<<"<3>_{4n,2n,2n} from nested loops = "<<fDirect->GetBinContent(8)<<endl;
1dfa3c16 968 cout<<endl;
dee1e0e0 969 cout<<"<3>_{4n,3n,n} from Q-vectors = "<<fQCorr->GetBinContent(9)<<endl;
970 cout<<"<3>_{4n,3n,n} from nested loops = "<<fDirect->GetBinContent(9)<<endl;
1dfa3c16 971 cout<<endl;
dee1e0e0 972 cout<<"<4>_{n,n|n,n} from Q-vectors = "<<fQCorr->GetBinContent(11)<<endl;
973 cout<<"<4>_{n,n|n,n} from nested loops = "<<fDirect->GetBinContent(11)<<endl;
1dfa3c16 974 cout<<endl;
dee1e0e0 975 cout<<"<4>_{2n,n|2n,n} from Q-vectors = "<<fQCorr->GetBinContent(12)<<endl;
976 cout<<"<4>_{2n,n|2n,n} from nested loops = "<<fDirect->GetBinContent(12)<<endl;
1dfa3c16 977 cout<<endl;
dee1e0e0 978 cout<<"<4>_{2n,2n|2n,2n} from Q-vectors = "<<fQCorr->GetBinContent(13)<<endl;
979 cout<<"<4>_{2n,2n|2n,2n} from nested loops = "<<fDirect->GetBinContent(13)<<endl;
1dfa3c16 980 cout<<endl;
dee1e0e0 981 cout<<"<4>_{3n|n,n,n} from Q-vectors = "<<fQCorr->GetBinContent(14)<<endl;
982 cout<<"<4>_{3n|n,n,n} from nested loops = "<<fDirect->GetBinContent(14)<<endl;
1dfa3c16 983 cout<<endl;
dee1e0e0 984 cout<<"<4>_{3n,n|3n,n} from Q-vectors = "<<fQCorr->GetBinContent(15)<<endl;
985 cout<<"<4>_{3n,n|3n,n} from nested loops = "<<fDirect->GetBinContent(15)<<endl;
1dfa3c16 986 cout<<endl;
dee1e0e0 987 cout<<"<4>_{3n,n|2n,2n} from Q-vectors = "<<fQCorr->GetBinContent(16)<<endl;
988 cout<<"<4>_{3n,n|2n,2n} from nested loops = "<<fDirect->GetBinContent(16)<<endl;
1dfa3c16 989 cout<<endl;
dee1e0e0 990 cout<<"<4>_{4n|2n,n,n} from Q-vectors = "<<fQCorr->GetBinContent(17)<<endl;
991 cout<<"<4>_{4n|2n,n,n} from nested loops = "<<fDirect->GetBinContent(17)<<endl;
1dfa3c16 992 cout<<endl;
dee1e0e0 993 cout<<"<5>_{2n,n|n,n,n} from Q-vectors = "<<fQCorr->GetBinContent(19)<<endl;
994 cout<<"<5>_{2n,n|n,n,n} from nested loops = "<<fDirect->GetBinContent(19)<<endl;
1dfa3c16 995 cout<<endl;
dee1e0e0 996 cout<<"<5>_{2n,2n|2n,n,n} from Q-vectors = "<<fQCorr->GetBinContent(20)<<endl;
997 cout<<"<5>_{2n,2n|2n,n,n} from nested loops = "<<fDirect->GetBinContent(20)<<endl;
1dfa3c16 998 cout<<endl;
dee1e0e0 999 cout<<"<5>_{3n,n|2n,n,n} from Q-vectors = "<<fQCorr->GetBinContent(21)<<endl;
1000 cout<<"<5>_{3n,n|2n,n,n} from nested loops = "<<fDirect->GetBinContent(21)<<endl;
1dfa3c16 1001 cout<<endl;
dee1e0e0 1002 cout<<"<5>_{4n|n,n,n,n} from Q-vectors = "<<fQCorr->GetBinContent(22)<<endl;
1003 cout<<"<5>_{4n|n,n,n,n} from nested loops = "<<fDirect->GetBinContent(22)<<endl;
1dfa3c16 1004 cout<<endl;
dee1e0e0 1005 cout<<"<6>_{n,n,n|n,n,n} from Q-vectors = "<<fQCorr->GetBinContent(24)<<endl;
1006 cout<<"<6>_{n,n,n|n,n,n} from nested loops = "<<fDirect->GetBinContent(24)<<endl;
1dfa3c16 1007 cout<<endl;
dee1e0e0 1008 cout<<"<6>_{2n,n,n|2n,n,n} from Q-vectors = "<<fQCorr->GetBinContent(25)<<endl;
1009 cout<<"<6>_{2n,n,n|2n,n,n} from nested loops = "<<fDirect->GetBinContent(25)<<endl;
1dfa3c16 1010 cout<<endl;
dee1e0e0 1011 cout<<"<6>_{2n,2n|n,n,n,n} from Q-vectors = "<<fQCorr->GetBinContent(26)<<endl;
1012 cout<<"<6>_{2n,2n|n,n,n,n} from nested loops = "<<fDirect->GetBinContent(26)<<endl;
1dfa3c16 1013 cout<<endl;
dee1e0e0 1014 cout<<"<6>_{3n,n|n,n,n,n} from Q-vectors = "<<fQCorr->GetBinContent(27)<<endl;
1015 cout<<"<6>_{3n,n|n,n,n,n} from nested loops = "<<fDirect->GetBinContent(27)<<endl;
1dfa3c16 1016 cout<<endl;
dee1e0e0 1017 cout<<"<7>_{2n,n,n|n,n,n,n} from Q-vectors = "<<fQCorr->GetBinContent(29)<<endl;
1018 cout<<"<7>_{2n,n,n|n,n,n,n} from nested loops = "<<fDirect->GetBinContent(29)<<endl;
1dfa3c16 1019 cout<<endl;
dee1e0e0 1020 cout<<"<8>_{n,n,n,n|n,n,n,n} from Q-vectors = "<<fQCorr->GetBinContent(31)<<endl;
1021 cout<<"<8>_{n,n,n,n|n,n,n,n} from nested loops = "<<fDirect->GetBinContent(31)<<endl;
1dfa3c16 1022 cout<<endl;
bc92c0cb 1023
4057ba99 1024 //DIFFERENTIAL FLOW:
bc92c0cb 1025 //41st bin: <2'>_{n|n}
1026 //42nd bin: <2'>_{2n|2n}
1027 //46th bin: <3'>_{2n|n,n}
1028 //47th bin: <3'>_{n,n|2n}
1029 //51st bin: <4'>_{n,n|n,n}
1030
1dfa3c16 1031 cout<<endl;
1032 cout<<endl;
bc92c0cb 1033 cout<<" **** cross-checking the formulas ****"<<endl;
1034 cout<<" **** for differential flow ****"<<endl;
4057ba99 1035 cout<<"(selected only events for which 0 < M < 12 "<<endl;
dee1e0e0 1036 cout<<" from dataset in /data/alice2/ante/AOD) "<<endl;
1037
1dfa3c16 1038 cout<<endl;
bc92c0cb 1039 cout<<"nEvts = "<<nEvts<<", AvM = "<<AvM<<endl;
1040 cout<<"0.5 < Pt < 0.6 GeV"<<endl;
1dfa3c16 1041 cout<<endl;
4057ba99 1042 cout<<"<2'>_{n|n} from Q-vectors = "<<fbinPt2p1n1nPOI->GetBinContent(6)<<endl;
1043 cout<<"<2'>_{n|n} from nested loops = "<<fDirect->GetBinContent(41)<<endl;
1dfa3c16 1044 cout<<endl;
4057ba99 1045 cout<<"<2'>_{2n|2n} from Q-vectors = "<<fbinPt2p2n2nPOI->GetBinContent(6)<<endl;
1046 cout<<"<2'>_{2n|2n} from nested loops = "<<fDirect->GetBinContent(42)<<endl;
1dfa3c16 1047 cout<<endl;
4057ba99 1048 cout<<"<3'>_{2n|n,n} from Q-vectors = "<<fbinPt3p2n1n1nPOI->GetBinContent(6)<<endl;
1049 cout<<"<3'>_{2n|n,n} from nested loops = "<<fDirect->GetBinContent(46)<<endl;
1dfa3c16 1050 cout<<endl;
4057ba99 1051 cout<<"<3'>_{n,n|2n} from Q-vectors = "<<fbinPt3p1n1n2nPOI->GetBinContent(6)<<endl;
1052 cout<<"<3'>_{n,n|2n} from nested loops = "<<fDirect->GetBinContent(47)<<endl;
1dfa3c16 1053 cout<<endl;
4057ba99 1054 cout<<"<4'>_{n,n|n,n} from Q-vectors = "<<fbinPt4p1n1n1n1nPOI->GetBinContent(6)<<endl;
1055 cout<<"<4'>_{n,n|n,n} from nested loops = "<<fDirect->GetBinContent(51)<<endl;
1dfa3c16 1056 cout<<endl;
4057ba99 1057 cout<<"<5'>_{2n,n|n,n,n} from Q-vectors = "<<endl;
1058 cout<<"<5'>_{2n,n|n,n,n} from nested loops = "<<fDirect->GetBinContent(56)<<endl;
1059 cout<<endl;
1060 cout<<"<6'>_{n,n,n|n,n,n} from Q-vectors = "<<endl;
1061 cout<<"<6'>_{n,n,n|n,n,n} from nested loops = "<<fDirect->GetBinContent(61)<<endl;
1062 cout<<endl;
1063 cout<<"<7'>_{2n,n,n|n,n,n,n} from Q-vectors = "<<endl;
1064 cout<<"<7'>_{2n,n,n|n,n,n,n} from nested loops = "<<fDirect->GetBinContent(66)<<endl;
1065 cout<<endl;
1066 cout<<"<8'>_{n,n,n,n|n,n,n,n} from Q-vectors = "<<endl;
1067 cout<<"<8'>_{n,n,n,n|n,n,n,n} from nested loops = "<<fDirect->GetBinContent(71)<<endl;
1068 cout<<endl;
1069}//end of if(bNestedLoopsResults)
e6614983 1070
bc92c0cb 1071}
1072
e6614983 1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
bc92c0cb 1084
1085
1086