]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWG2/FLOW/AliFlowCommon/AliQCumulantsFunctions.cxx
bd999f67ac7002fb3e9fb894e51a5a9007aa72d5
[u/mrichter/AliRoot.git] / PWG2 / FLOW / AliFlowCommon / AliQCumulantsFunctions.cxx
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"
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
41 #include "AliFlowEventSimple.h"
42 #include "AliFlowTrackSimple.h"
43 #include "AliFlowAnalysisWithCumulants.h"
44 #include "AliFlowCommonConstants.h"
45 #include "AliFlowCommonHist.h"
46 #include "AliFlowCommonHistResults.h"
47 #include "AliQCumulantsFunctions.h"
48
49 ClassImp(AliQCumulantsFunctions)
50
51 //================================================================================================================_
52
53 AliQCumulantsFunctions::AliQCumulantsFunctions():  
54  fIntRes(NULL),
55  fDiffRes2nd(NULL),
56  fDiffRes4th(NULL),
57  fCovar(NULL),
58  fAvMult(NULL),
59  fQVector(NULL),
60  fQCorr(NULL),
61  fQProd(NULL),
62  fDirect(NULL),
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),  
83  fch2nd(NULL),//ch = common histogram (control)
84  fch4th(NULL),
85  fch6th(NULL),
86  fch8th(NULL), 
87  fchr2nd(NULL),//chr = common histogram results 
88  fchr4th(NULL),
89  fchr6th(NULL),
90  fchr8th(NULL) 
91 {
92  //default constructor 
93 }
94
95 AliQCumulantsFunctions::~AliQCumulantsFunctions()
96 {
97  //destructor
98 }
99
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):
101  fIntRes(intRes),
102  fDiffRes2nd(diffRes2nd),
103  fDiffRes4th(diffRes4th),
104  fCovar(covar),
105  fAvMult(AvMult),
106  fQVector(QVector),
107  fQCorr(QCorr),
108  fQProd(QProd),
109  fDirect(Direct),
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),
129  fbinEta4p1n1n1n1nPOI(binEta4p1n1n1n1nPOI), 
130  fch2nd(ch2nd),
131  fch4th(ch4th),
132  fch6th(ch6th),
133  fch8th(ch8th),   
134  fchr2nd(chr2nd),
135  fchr4th(chr4th),
136  fchr6th(chr6th),
137  fchr8th(chr8th) 
138 {
139  //custom constructor 
140 }
141       
142 //================================================================================================================
143
144 void AliQCumulantsFunctions::Calculate()
145 {
146  //final results
147  
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:
159  Double_t two   = fQCorr->GetBinContent(1);  //<<2>>_{n|n}
160  Double_t four  = fQCorr->GetBinContent(11); //<<4>>_{n,n|n,n}
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}
163   
164  //errors of 2-, 4- and 6-particle azimuthal correlation:
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}}
169  
170  //covariances of multi-particle correlations
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  
178  fCovar->SetBinContent(1,cov24);
179  fCovar->SetBinContent(2,cov26); 
180  //fCovar->SetBinContent(3,cov28); 
181  fCovar->SetBinContent(4,cov46);
182  //fCovar->SetBinContent(5,cov48); 
183  //fCovar->SetBinContent(6,cov68); 
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  
197  Double_t sixthOrderQCumulant = six-9.*two*four+12.*pow(two,3.); //c_n{6}
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  }
204   
205  Double_t eightOrderQCumulant = eight-16.*two*six-18.*pow(four,2.)+144.*pow(two,2.)*four-144.*pow(two,4.);    
206               
207  //integrated flow estimates from Q-cumulants:
208  cout<<endl;
209  cout<<"**************************************"<<endl;
210  cout<<"**************************************"<<endl;
211  cout<<"flow estimates from Q-cumulants (RP):"<<endl;
212  cout<<endl;
213  
214  Double_t vn2=0.,vn4=0.,vn6=0.,vn8=0.;
215  Double_t sd2=0.,sd4=0.,sd6=0.,sd8=0.; 
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}}
219   cout<<" v_"<<n<<"{2} = "<<vn2<<" +/- "<<sd2<<endl;
220   fIntRes->SetBinContent(1,vn2);
221   fIntRes->SetBinError(1,sd2);
222   //common histograms:
223   fchr2nd->FillIntegratedFlow(vn2,sd2);//to be removed
224   fchr2nd->FillChi(vn2*pow(AvM,0.5));//to be removed
225   fchr2nd->FillIntegratedFlowRP(vn2,sd2);
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}}
232   cout<<" v_"<<n<<"{4} = "<<vn4<<" +/- "<<sd4<<endl;
233   fIntRes->SetBinContent(2,vn4);
234   fIntRes->SetBinError(2,sd4);
235   //common histograms:
236   fchr4th->FillIntegratedFlow(vn4,sd4);//to be removed
237   fchr4th->FillChi(vn4*pow(AvM,0.5));//to be removed
238   fchr4th->FillIntegratedFlowRP(vn4,sd4);
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;
245   cout<<" v_"<<n<<"{6} = "<<vn6<<" +/- "<<sd6<<endl;
246   fIntRes->SetBinContent(3,vn6);
247   fIntRes->SetBinError(3,sd6);
248   //common histograms:
249   fchr6th->FillIntegratedFlow(vn6,sd6);//to be removed
250   fchr6th->FillChi(vn6*pow(AvM,0.5));//to be removed
251   fchr6th->FillIntegratedFlowRP(vn6,sd6);
252  }else{
253   cout<<" v_"<<n<<"{6} = Im"<<endl;
254  }
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:
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;
266  }
267  cout<<endl;
268  cout<<"   nEvts = "<<nEvts<<", AvM = "<<AvM<<endl;
269  cout<<"**************************************"<<endl;
270  cout<<"**************************************"<<endl;
271  cout<<endl; 
272 //--------------------------------------------------------------------------------------------------------- 
273  
274 //---------------------------------------------------------------------------------------------------------    
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();
306
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
325 //differential flow (POI)
326 Int_t nBinsPtPOI = fbinPt2p1n1nPOI->GetNbinsX();
327 Int_t nBinsEtaPOI = fbinEta2p1n1nPOI->GetNbinsX();
328
329 //Pt:
330 Double_t secondOrderQCumulantDiffFlowPtPOI = 0.;
331 Double_t fourthOrderQCumulantDiffFlowPtPOI = 0.;
332
333 Double_t dVn2ndPOI=0.,dSd2ndPOI=0.,dDiffvn2nd=0.,dYield2nd=0.,dSum2nd=0.;
334 Double_t dVn4thPOI=0.,dSd4thPOI=0.,dDiffvn4th=0.,dYield4th=0.,dSum4th=0.;
335
336 Double_t dVn2ndPOIEta=0.,dDiffvn2ndEta=0.,dYield2ndEta=0.,dSum2ndEta=0.;//to be removed
337
338 for(Int_t bb=1;bb<nBinsPtPOI+1;bb++)
339 {
340  //QC{2}
341  if(fbinPt2p1n1nPOI->GetBinEntries(bb)>0.&&vn2!=0)
342  {
343   //cout<<"bin = "<<bb<<" : "<<(fch2nd->GetHistPtDiff())->GetBinContent(bb)<<endl;
344   //cout<<endl;
345   secondOrderQCumulantDiffFlowPtPOI = fbinPt2p1n1nPOI->GetBinContent(bb);
346   fDiffRes2nd->SetBinContent(bb,secondOrderQCumulantDiffFlowPtPOI/vn2);
347   //common histogram:
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   //-------------------------------------------------------------
356  }
357  //QC{4]
358  if(fbinPt4p1n1n1n1nPOI->GetBinEntries(bb)>0.&&vn4!=0.)
359  {
360   fourthOrderQCumulantDiffFlowPtPOI = fbinPt4p1n1n1n1nPOI->GetBinContent(bb)-2.*fbinPt2p1n1nPOI->GetBinContent(bb)*pow(vn2,2.);
361   fDiffRes4th->SetBinContent(bb,-1.*fourthOrderQCumulantDiffFlowPtPOI/pow(vn4,3.));
362   //common histogram:
363   fchr4th->FillDifferentialFlowPtPOI(bb,-1.*fourthOrderQCumulantDiffFlowPtPOI/pow(vn4,3.), 0.);//to be improved (errors)
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   //-------------------------------------------------------------
371  }
372 }      
373
374 //---------------------------------------------------------------------------------------------------
375 //integrated flow estimates from Q-cumulants (POI):
376 cout<<endl;
377 cout<<"**************************************"<<endl;
378 cout<<"**************************************"<<endl;
379 cout<<"flow estimates from Q-cumulants (POI):"<<endl;
380 cout<<endl;
381 //storing the final results for integrated flow (POI):
382 //QC{2}
383 if(dSum2nd && fchr2nd)
384 {
385  dVn2ndPOI/=dSum2nd;
386  fchr2nd->FillIntegratedFlowPOI(dVn2ndPOI,0.);//to be improved (errors)
387  cout<<" v_"<<n<<"{2} = "<<dVn2ndPOI<<" +/- "<<dSd2ndPOI<<endl;
388 }else 
389  {
390   cout<<" v_"<<n<<"{2} = Im"<<endl;
391  }
392
393 //QC{4}
394 if(dSum4th && fchr4th)
395 {
396  dVn4thPOI/=dSum4th;
397  fchr4th->FillIntegratedFlowPOI(dVn4thPOI,0.);//to be improved (errors)
398  cout<<" v_"<<n<<"{4} = "<<dVn4thPOI<<" +/- "<<dSd4thPOI<<endl;
399 }else
400  {
401   cout<<" v_"<<n<<"{4} = Im"<<endl;
402  }
403
404 cout<<endl;
405 cout<<"   nEvts = "<<nEvts<<", AvM = "<<AvM<<endl;
406 cout<<"**************************************"<<endl;
407 cout<<"**************************************"<<endl;
408 cout<<endl;  
409 //---------------------------------------------------------------------------------------------------
410
411
412 //Eta:
413 Double_t secondOrderQCumulantDiffFlowEtaPOI = 0.;
414 Double_t fourthOrderQCumulantDiffFlowEtaPOI = 0.;
415
416 for(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
434 //---------------------------------------------------------------------------------------------------------       
435         
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
476
477  
478 //xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
479 //         !!!! to be removed !!!!
480 for(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 }
494 if(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
507
508
509
510
511
512
513
514
515
516
517
518
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  
525  cout<<endl;
526  cout<<endl;
527  cout<<endl;
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;
531  cout<<endl;
532  cout<<"   nEvts = "<<nEvts<<", AvM = "<<AvM<<endl;
533  cout<<endl;
534  cout<<endl;
535  cout<<"c-c = "<<pow((1./16.)*((first+second+third)/(pow(-fourthOrderQCumulant,1.5))),0.5)<<endl; 
536  */
537  
538            
539              
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;
636  cout<<endl;
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;
639  cout<<endl;
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;
642  cout<<endl;
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;
645  cout<<endl;
646  */
647  
648  
649
650  
651   /*
652    
653 //Q-CUMULANTS
654 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.));    
655      
656 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));
657           
658            
659                            
660                 
661                  
662                    
663  
664  
665  //cout<<endl;
666  //cout<<"should be the same? "<<threeDirect_3n_2n_n<<" "<<three_2n_n_nTemp<<endl;
667  //cout<<endl;
668  
669  
670  
671  
672  
673  
674  
675  //cout<<endl;
676  cout<<"***************************"<<endl;
677  cout<<endl;
678  cout<<"multiplicity = "<<AvM<<endl;
679  cout<<endl;
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;
689  cout<<endl;
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  
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;
723  cout<<endl;
724  cout<<"<4> correlation from Q-vector           = "<<four<<endl;
725  cout<<"<4> correlation directly                = "<<fourDirect<<endl;
726  cout<<endl;
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;
729  cout<<endl;
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;
732  cout<<endl;
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;
735  cout<<endl;
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;
738  cout<<endl;
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;
741  cout<<endl;
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;
744  cout<<endl;
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;
755  cout<<endl;
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;
776  cout<<endl; 
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
784  //cout<<endl;
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;
803  cout<<endl;
804  
805  
806  cout<<endl; 
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
815  //cout<<endl;
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;
837  cout<<endl;
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;
848  cout<<endl;
849  cout<<"avarage multiplicity = "<<AvM<<endl;
850  cout<<endl;
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;
853  cout<<endl;
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; 
856  cout<<endl;
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  
882  cout<<endl;
883  cout<<"fourth order Q-cumulant should be the same and BDO4? "<<fourthOrderQCumulant<<" "<<cumulant4Q<<" "<<BDO4<<endl;
884  cout<<endl;
885  cout<<endl;
886  cout<<"sixth order Q-cumulant should be the same and BDO6? "<<sixthOrderQCumulant<<" "<<cumulant6Q<<" "<<BDO6<<endl;
887  cout<<endl;
888  
889  cout<<"*************************************"<<endl;
890  cout<<"*************************************"<<endl;
891  cout<<endl;
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
931
932
933
934 Bool_t bNestedLoopsResults=kFALSE;
935 if(bNestedLoopsResults) 
936
937  //needed for direct correlations (obtained from nested loops)
938  cout<<endl;
939  cout<<endl;
940  cout<<"   **** cross-checking the formulas ****"<<endl;
941  cout<<"   ****     for integrated flow     ****"<<endl;
942  cout<<"(selected only events for which 0 < M < 12 "<<endl;
943  cout<<"  from dataset in /data/alice2/ante/AOD)   "<<endl;
944
945  cout<<endl;
946  cout<<"   nEvts = "<<nEvts<<", AvM = "<<AvM<<endl;
947  cout<<endl;
948  cout<<"<2>_{n|n} from Q-vectors                = "<<fQCorr->GetBinContent(1)<<endl;
949  cout<<"<2>_{n|n} from nested loops             = "<<fDirect->GetBinContent(1)<<endl;
950  cout<<endl;
951  cout<<"<2>_{2n|2n} from Q-vectors              = "<<fQCorr->GetBinContent(2)<<endl;
952  cout<<"<2>_{2n|2n} from nested loops           = "<<fDirect->GetBinContent(2)<<endl;
953  cout<<endl;
954  cout<<"<2>_{3n|3n} from Q-vectors              = "<<fQCorr->GetBinContent(3)<<endl;
955  cout<<"<2>_{3n|3n} from nested loops           = "<<fDirect->GetBinContent(3)<<endl;
956  cout<<endl;
957  cout<<"<2>_{4n|4n} from Q-vectors              = "<<fQCorr->GetBinContent(4)<<endl;
958  cout<<"<2>_{4n|4n} from nested loops           = "<<fDirect->GetBinContent(4)<<endl;
959  cout<<endl;
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;
962  cout<<endl;
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;
965  cout<<endl; 
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;
968  cout<<endl;
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;
971  cout<<endl;
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;
974  cout<<endl;
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;
977  cout<<endl;
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;
980  cout<<endl;
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;
983  cout<<endl;
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;
986  cout<<endl;
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;
989  cout<<endl; 
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;
992  cout<<endl;
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;
995  cout<<endl;
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;
998  cout<<endl;
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;
1001  cout<<endl;
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;
1004  cout<<endl;
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;
1007  cout<<endl; 
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;
1010  cout<<endl;
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;
1013  cout<<endl; 
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;
1016  cout<<endl; 
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;
1019  cout<<endl; 
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;
1022  cout<<endl; 
1023
1024  //DIFFERENTIAL FLOW:
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
1031  cout<<endl;
1032  cout<<endl;
1033  cout<<"   **** cross-checking the formulas ****"<<endl;
1034  cout<<"   ****    for differential flow    ****"<<endl;
1035  cout<<"(selected only events for which 0 < M < 12 "<<endl;
1036  cout<<"  from dataset in /data/alice2/ante/AOD)   "<<endl;
1037
1038  cout<<endl; 
1039  cout<<"nEvts = "<<nEvts<<", AvM = "<<AvM<<endl;
1040  cout<<"0.5 < Pt < 0.6 GeV"<<endl;                                
1041  cout<<endl;                                       
1042  cout<<"<2'>_{n|n} from Q-vectors                = "<<fbinPt2p1n1nPOI->GetBinContent(6)<<endl;
1043  cout<<"<2'>_{n|n} from nested loops             = "<<fDirect->GetBinContent(41)<<endl;
1044  cout<<endl;                                       
1045  cout<<"<2'>_{2n|2n} from Q-vectors              = "<<fbinPt2p2n2nPOI->GetBinContent(6)<<endl;
1046  cout<<"<2'>_{2n|2n} from nested loops           = "<<fDirect->GetBinContent(42)<<endl;                                        
1047  cout<<endl;  
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;                   
1050  cout<<endl;              
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;                                 
1053  cout<<endl;                                                                   
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;                                                                                   
1056  cout<<endl;   
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)                                              
1070
1071 }
1072
1073   
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086