]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWG2/FLOW/AliFlowAnalysisWithQCumulants.cxx
added 8th order Q cumulant
[u/mrichter/AliRoot.git] / PWG2 / FLOW / AliFlowAnalysisWithQCumulants.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  * flow analysis with Q-cumulants * 
18  *                                * 
19  * author:  Ante Bilandzic        * 
20  *           (anteb@nikhef.nl)    *
21  *********************************/ 
22
23 #define AliFlowAnalysisWithQCumulants_cxx
24
25 #include "Riostream.h"
26 #include "AliFlowCommonConstants.h"
27 #include "AliFlowCommonHist.h"
28 #include "AliFlowCommonHistResults.h"
29 #include "TChain.h"
30 #include "TFile.h"
31 #include "TList.h"
32 #include "TParticle.h"
33 #include "TRandom3.h"
34 #include "TStyle.h"
35 #include "TProfile.h"
36 #include "TProfile2D.h" 
37 #include "TProfile3D.h"
38 #include "AliFlowEventSimple.h"
39 #include "AliFlowTrackSimple.h"
40 #include "AliFlowAnalysisWithQCumulants.h"
41 #include "AliQCumulantsFunctions.h"
42
43 #include "TRandom.h"
44
45 class TH1;
46 class TGraph;
47 class TPave;
48 class TLatex;
49 class TMarker;
50 class TRandom3;
51 class TObjArray;
52 class TList;
53 class TCanvas;
54 class TSystem;
55 class TROOT;
56 class AliFlowVector;
57 class TVector;
58
59 //================================================================================================================
60
61 ClassImp(AliFlowAnalysisWithQCumulants)
62
63 AliFlowAnalysisWithQCumulants::AliFlowAnalysisWithQCumulants():  
64  fTrack(NULL),
65  fHistList(NULL),
66  fAvMultIntFlowQC(NULL),
67  fQvectorComponents(NULL),
68  fIntFlowResultsQC(NULL),
69  fDiffFlowResults2ndOrderQC(NULL),
70  fDiffFlowResults4thOrderQC(NULL),
71  fCovariances(NULL),
72  fQCorrelations(NULL),
73  fQProduct(NULL),
74  fDirectCorrelations(NULL),
75  fReq1n(NULL),
76  fImq1n(NULL),
77  fReq2n(NULL),
78  fImq2n(NULL),
79  f2PerBin1n1n(NULL),
80  f2PerBin2n2n(NULL),
81  f3PerBin2n1n1n(NULL),
82  f3PerBin1n1n2n(NULL),
83  f4PerBin1n1n1n1n(NULL),
84  fCommonHists(NULL),
85  fCommonHistsResults2nd(NULL),
86  fCommonHistsResults4th(NULL),
87  fCommonHistsResults6th(NULL),
88  fCommonHistsResults8th(NULL),
89  f2pDistribution(NULL),
90  f4pDistribution(NULL),
91  f6pDistribution(NULL),
92  fnBinsPt(0),
93  fPtMin(0),
94  fPtMax(0)
95 {
96  //constructor 
97  fHistList = new TList(); 
98  
99  fnBinsPt = AliFlowCommonConstants::GetNbinsPt();
100  fPtMin   = AliFlowCommonConstants::GetPtMin();      
101  fPtMax   = AliFlowCommonConstants::GetPtMax();
102  
103 }
104
105 AliFlowAnalysisWithQCumulants::~AliFlowAnalysisWithQCumulants()
106 {
107  //desctructor
108  delete fHistList; 
109 }
110
111 //================================================================================================================
112
113 void AliFlowAnalysisWithQCumulants::CreateOutputObjects()
114 {
115  //various output histograms
116
117  //avarage multiplicity 
118  fAvMultIntFlowQC = new TProfile("fAvMultIntFlowQC","Average Multiplicity",1,0,1,"s");
119  fAvMultIntFlowQC->SetXTitle("");
120  fAvMultIntFlowQC->SetYTitle("");
121  fAvMultIntFlowQC->SetLabelSize(0.06);
122  fAvMultIntFlowQC->SetMarkerStyle(25);
123  fAvMultIntFlowQC->SetLabelOffset(0.01);
124  (fAvMultIntFlowQC->GetXaxis())->SetBinLabel(1,"Average Multiplicity");
125  fHistList->Add(fAvMultIntFlowQC);
126  
127  //Q-vector stuff
128  fQvectorComponents = new TProfile("fQvectorComponents","Avarage of Q-vector components",44,0.,44.,"s");
129  fQvectorComponents->SetXTitle("");
130  fQvectorComponents->SetYTitle("");
131  //fHistList->Add(fQvectorComponents);
132  
133  //final results for integrated flow from Q-cumulants
134  fIntFlowResultsQC = new TH1D("fIntFlowResultsQC","Integrated Flow from Q-cumulants",4,0,4);
135  //fIntFlowResults->SetXTitle("");
136  //fIntFlowResultsQC->SetYTitle("Integrated Flow");
137  fIntFlowResultsQC->SetLabelSize(0.06);
138  //fIntFlowResultsQC->SetTickLength(1);
139  fIntFlowResultsQC->SetMarkerStyle(25);
140  (fIntFlowResultsQC->GetXaxis())->SetBinLabel(1,"v_{n}{2}");
141  (fIntFlowResultsQC->GetXaxis())->SetBinLabel(2,"v_{n}{4}");
142  (fIntFlowResultsQC->GetXaxis())->SetBinLabel(3,"v_{n}{6}");
143  (fIntFlowResultsQC->GetXaxis())->SetBinLabel(4,"v_{n}{8}");
144  fHistList->Add(fIntFlowResultsQC);
145
146  //final results for differential flow from 2nd order Q-cumulant
147  fDiffFlowResults2ndOrderQC = new TH1D("fDiffFlowResults2ndOrderQC","Differential Flow from 2nd Order Q-cumulant",fnBinsPt,fPtMin,fPtMax);
148  fDiffFlowResults2ndOrderQC->SetXTitle("p_{t} [GeV]");
149  //fDiffFlowResults2ndOrderQC->SetYTitle("Differential Flow");
150  fHistList->Add(fDiffFlowResults2ndOrderQC);
151  
152  //final results for differential flow from 4th order Q-cumulant
153  fDiffFlowResults4thOrderQC = new TH1D("fDiffFlowResults4thOrderQC","Differential Flow from 4th Order Q-cumulant",fnBinsPt,fPtMin,fPtMax);
154  fDiffFlowResults4thOrderQC->SetXTitle("p_{t} [GeV]");
155  //fDiffFlowResults4thOrderQC->SetYTitle("Differential Flow");
156  fHistList->Add(fDiffFlowResults4thOrderQC);
157  
158  //final results for covariances (1st bin: <2*4>-<2>*<4>, 2nd bin: <2*6>-<2>*<6>, ...)
159  fCovariances = new TH1D("fCovariances","Covariances",6,0,6);
160  //fCovariances->SetXTitle("");
161  //fCovariances->SetYTitle("<covariance>");
162  fCovariances->SetLabelSize(0.04);
163  fCovariances->SetTickLength(1);
164  fCovariances->SetMarkerStyle(25);
165  (fCovariances->GetXaxis())->SetBinLabel(1,"Cov(2,4)");
166  (fCovariances->GetXaxis())->SetBinLabel(2,"Cov(2,6)");
167  (fCovariances->GetXaxis())->SetBinLabel(3,"Cov(2,8)");
168  (fCovariances->GetXaxis())->SetBinLabel(4,"Cov(4,6)");
169  (fCovariances->GetXaxis())->SetBinLabel(5,"Cov(4,8)");
170  (fCovariances->GetXaxis())->SetBinLabel(6,"Cov(6,8)");
171  fHistList->Add(fCovariances);
172   
173  //multi-particle correlations calculated from Q-vectors
174  fQCorrelations = new TProfile("fQCorrelations","multi-particle correlations from Q-vectors",32,0,32,"s");
175  //fQCorrelations->SetXTitle("correlations");
176  //fQCorrelations->SetYTitle("");
177  fQCorrelations->SetTickLength(-0.01,"Y");
178  fQCorrelations->SetMarkerStyle(25);
179  fQCorrelations->SetLabelSize(0.03);
180  fQCorrelations->SetLabelOffset(0.01,"Y");
181  
182  (fQCorrelations->GetXaxis())->SetBinLabel(1,"<<2>>_{n|n}");
183  (fQCorrelations->GetXaxis())->SetBinLabel(2,"<<2>>_{2n|2n}");
184  (fQCorrelations->GetXaxis())->SetBinLabel(3,"<<2>>_{3n|3n}");
185  (fQCorrelations->GetXaxis())->SetBinLabel(4,"<<2>>_{4n|4n}");
186  
187  (fQCorrelations->GetXaxis())->SetBinLabel(6,"<<3>>_{2n|n,n}");
188  (fQCorrelations->GetXaxis())->SetBinLabel(7,"<<3>>_{3n|2n,n}");
189  (fQCorrelations->GetXaxis())->SetBinLabel(8,"<<3>>_{4n|2n,2n}");
190  (fQCorrelations->GetXaxis())->SetBinLabel(9,"<<3>>_{4n|3n,n}");
191  
192  (fQCorrelations->GetXaxis())->SetBinLabel(11,"<<4>>_{n,n|n,n}"); 
193  (fQCorrelations->GetXaxis())->SetBinLabel(12,"<<4>>_{2n,n|2n,n}");
194  (fQCorrelations->GetXaxis())->SetBinLabel(13,"<<4>>_{2n,2n|2n,2n}");
195  (fQCorrelations->GetXaxis())->SetBinLabel(14,"<<4>>_{3n|n,n,n}");
196  (fQCorrelations->GetXaxis())->SetBinLabel(15,"<<4>>_{3n,n|3n,n}");
197  (fQCorrelations->GetXaxis())->SetBinLabel(16,"<<4>>_{3n,n|2n,2n}"); 
198  (fQCorrelations->GetXaxis())->SetBinLabel(17,"<<4>>_{4n|2n,n,n}");
199  
200  (fQCorrelations->GetXaxis())->SetBinLabel(19,"<<5>>_{2n|n,n,n,n}"); 
201  (fQCorrelations->GetXaxis())->SetBinLabel(20,"<<5>>_{2n,2n|2n,n,n}");
202  (fQCorrelations->GetXaxis())->SetBinLabel(21,"<<5>>_{3n,n|2n,n,n}");
203  (fQCorrelations->GetXaxis())->SetBinLabel(22,"<<5>>_{4n|n,n,n,n}");
204  
205  (fQCorrelations->GetXaxis())->SetBinLabel(24,"<<6>>_{n,n,n|n,n,n}");
206  (fQCorrelations->GetXaxis())->SetBinLabel(25,"<<6>>_{2n,n,n|2n,n,n}");
207  (fQCorrelations->GetXaxis())->SetBinLabel(26,"<<6>>_{2n,2n|n,n,n,n}");
208  (fQCorrelations->GetXaxis())->SetBinLabel(27,"<<6>>_{3n,n|n,n,n,n}");
209  
210  (fQCorrelations->GetXaxis())->SetBinLabel(29,"<<7>>_{2n,n,n|n,n,n,n}");
211
212  (fQCorrelations->GetXaxis())->SetBinLabel(31,"<<8>>_{n,n,n,n|n,n,n,n}");
213  
214  fHistList->Add(fQCorrelations);
215  
216  //average products
217  fQProduct = new TProfile("fQProduct","average of products",6,0,6,"s");
218  fQProduct->SetTickLength(-0.01,"Y");
219  fQProduct->SetMarkerStyle(25);
220  fQProduct->SetLabelSize(0.03);
221  fQProduct->SetLabelOffset(0.01,"Y");
222  (fQProduct->GetXaxis())->SetBinLabel(1,"<<2*4>>");
223  (fQProduct->GetXaxis())->SetBinLabel(2,"<<2*6>>");
224  (fQProduct->GetXaxis())->SetBinLabel(3,"<<2*8>>");
225  (fQProduct->GetXaxis())->SetBinLabel(4,"<<4*6>>");
226  (fQProduct->GetXaxis())->SetBinLabel(5,"<<4*8>>");
227  (fQProduct->GetXaxis())->SetBinLabel(6,"<<6*8>>");
228  fQProduct->SetXTitle("");
229  fQProduct->SetYTitle("");
230  fHistList->Add(fQProduct);
231  
232  //multi-particle correlations calculated with nested loops (0..40 integrated flow; 40..80 differential flow)
233  fDirectCorrelations = new TProfile("fDirectCorrelations","multi-particle correlations with nested loops",80,0,80,"s");
234  fDirectCorrelations->SetXTitle("");
235  fDirectCorrelations->SetYTitle("correlations");
236  fHistList->Add(fDirectCorrelations);
237  
238  //fReq1n
239  fReq1n = new TProfile("fReq1n","Re[q_n]",fnBinsPt,fPtMin,fPtMax,"s");
240  fReq1n->SetXTitle("p_{t} [GeV]");
241  fReq1n->SetYTitle("Re[q_n]");
242  //fHistList->Add(fReq1n);
243  
244  //fImq1n
245  fImq1n = new TProfile("fImq1n","Im[q_n]",fnBinsPt,fPtMin,fPtMax,"s");
246  fImq1n->SetXTitle("p_{t} [GeV]");
247  fImq1n->SetYTitle("Im[q_n]");
248  //fHistList->Add(fImq1n);
249  
250  //fReq2n
251  fReq2n = new TProfile("fReq2n","Re[q_2n]",fnBinsPt,fPtMin,fPtMax,"s");
252  fReq2n->SetXTitle("p_{t} [GeV]");
253  fReq2n->SetYTitle("Im[D]");
254  //fHistList->Add(fReq2n);
255  
256  //fImq2n
257  fImq2n = new TProfile("fImq2n","Im[q_2n]",fnBinsPt,fPtMin,fPtMax,"s");
258  fImq2n->SetXTitle("p_{t} [GeV]");
259  fImq2n->SetYTitle("Im[q_2n]");
260  //fHistList->Add(fImq2n);
261  
262  //f2PerBin1n1n
263  f2PerBin1n1n = new TProfile("f2PerBin1n1n","<2'>_{n|n}",fnBinsPt,fPtMin,fPtMax,"s");
264  f2PerBin1n1n->SetXTitle("p_{t} [GeV]");
265  //f2PerBin1n1n->SetYTitle("<2'>_{n|n}");
266  fHistList->Add(f2PerBin1n1n);
267  
268  //f2PerBin2n2n
269  f2PerBin2n2n = new TProfile("f2PerBin2n2n","<2'>_{2n|2n}",fnBinsPt,fPtMin,fPtMax,"s");
270  f2PerBin2n2n->SetXTitle("p_{t} [GeV]");
271  //f2PerBin2n2n->SetYTitle("<2'>_{2n|2n}");
272  fHistList->Add(f2PerBin2n2n);
273  
274  //f3PerBin2n1n1n
275  f3PerBin2n1n1n = new TProfile("f3PerBin2n1n1n","<3'>_{2n|n,n}",fnBinsPt,fPtMin,fPtMax,"s");
276  f3PerBin2n1n1n->SetXTitle("p_{t} [GeV]");
277  //f3PerBin2n1n1n->SetYTitle("<3'>_{2n|n,n}");
278  fHistList->Add(f3PerBin2n1n1n);
279  
280  //f3PerBin1n1n2n
281  f3PerBin1n1n2n = new TProfile("f3PerBin1n1n2n","<3'>_{n,n|2n}",fnBinsPt,fPtMin,fPtMax,"s");
282  f3PerBin1n1n2n->SetXTitle("p_{t} [GeV]");
283  //f3PerBin1n1n2n->SetYTitle("<3'>_{n,n|2n}");
284  fHistList->Add(f3PerBin1n1n2n);
285  
286  //f4PerBin1n1n1n1n
287  f4PerBin1n1n1n1n = new TProfile("f4PerBin1n1n1n1n","<4'>_{n,n|n,n}",fnBinsPt,fPtMin,fPtMax,"s");
288  f4PerBin1n1n1n1n->SetXTitle("p_{t} [GeV]");
289  //f4PerBin1n1n1n1n->SetYTitle("<4'>_{n,n|n,n}");
290  fHistList->Add(f4PerBin1n1n1n1n);
291  
292  //common control histograms
293  fCommonHists = new AliFlowCommonHist("AliFlowCommonHistQC");
294  fHistList->Add(fCommonHists);  
295  
296  //common histograms for final results (2nd order)
297  fCommonHistsResults2nd = new AliFlowCommonHistResults("AliFlowCommonHistResults2ndOrderQC");
298  fHistList->Add(fCommonHistsResults2nd); 
299  
300  //common histograms for final results (4th order)
301  fCommonHistsResults4th = new AliFlowCommonHistResults("AliFlowCommonHistResults4thOrderQC");
302  fHistList->Add(fCommonHistsResults4th);
303  
304  //common histograms for final results (6th order)
305  fCommonHistsResults6th = new AliFlowCommonHistResults("AliFlowCommonHistResults6thOrderQC");
306  fHistList->Add(fCommonHistsResults6th); 
307  
308  //common histograms for final results (8th order)
309  fCommonHistsResults8th = new AliFlowCommonHistResults("AliFlowCommonHistResults8thOrderQC");
310  fHistList->Add(fCommonHistsResults8th); 
311  
312  //weighted <2>_{n|n} distribution
313  f2pDistribution = new TH1D("f2pDistribution","<2>_{n|n} distribution",100000,-0.02,0.1);
314  f2pDistribution->SetXTitle("<2>_{n|n}");
315  f2pDistribution->SetYTitle("Counts");
316  fHistList->Add(f2pDistribution);
317
318  //weighted <4>_{n,n|n,n} distribution
319  f4pDistribution = new TH1D("f4pDistribution","<4>_{n,n|n,n} distribution",100000,-0.00025,0.002);
320  f4pDistribution->SetXTitle("<4>_{n,n|n,n}");
321  f4pDistribution->SetYTitle("Counts");
322  fHistList->Add(f4pDistribution); 
323  
324  //weighted <6>_{n,n,n|n,n,n} distribution
325  f6pDistribution = new TH1D("f6pDistribution","<6>_{n,n,n|n,n,n} distribution",100000,-0.000005,0.000025);
326  f6pDistribution->SetXTitle("<6>_{n,n,n|n,n,n}");
327  f6pDistribution->SetYTitle("Counts");
328  fHistList->Add(f6pDistribution);
329  
330 }//end of CreateOutputObjects()
331
332 //================================================================================================================
333
334 void AliFlowAnalysisWithQCumulants::Make(AliFlowEventSimple* anEvent)
335 {
336  //running over data     
337           
338  //get the total multiplicity of event:
339  //Int_t nPrim = anEvent->NumberOfTracks();//line needed only for nested loops
340
341  //if(nPrim>8&&nPrim<12)//line needed only for nested loops  
342  //{                    //line needed only for nested loops
343
344  //fill the common control histograms:
345  fCommonHists->FillControlHistograms(anEvent); 
346  
347  //get the selected multiplicity (i.e. number of particles used for int. flow):
348  //Int_t nEventNSelTracksIntFlow = anEvent->GetEventNSelTracksIntFlow();
349  
350  Int_t n=2; //int flow harmonic (to be improved)
351  
352  //---------------------------------------------------------------------------------------------------------
353  //Q-vectors of an event evaluated in harmonics n, 2n, 3n and 4n:
354  AliFlowVector xQvector1n, xQvector2n, xQvector3n, xQvector4n;
355  
356  xQvector1n.Set(0.,0.);
357  xQvector1n.SetMult(0);
358  xQvector1n=anEvent->GetQ(1*n); 
359  
360  xQvector2n.Set(0.,0.);
361  xQvector2n.SetMult(0);
362  xQvector2n=anEvent->GetQ(2*n);                          
363  
364  xQvector3n.Set(0.,0.);
365  xQvector3n.SetMult(0);
366  xQvector3n=anEvent->GetQ(3*n);       
367  
368  xQvector4n.Set(0.,0.);
369  xQvector4n.SetMult(0);
370  xQvector4n=anEvent->GetQ(4*n);       
371  //---------------------------------------------------------------------------------------------------------
372  
373  //multiplicity (to be improved, because I already have nEventNSelTracksIntFlow and nPrim)
374  Double_t xMult = xQvector1n.GetMult();
375  
376  fAvMultIntFlowQC->Fill(0.,xMult,1.);
377  
378  //---------------------------------------------------------------------------------------------------------
379  //
380  //                                          *******************
381  //                                          **** Q-vectors ****
382  //                                          *******************
383  //
384  Double_t reQ2nQ1nstarQ1nstar = pow(xQvector1n.X(),2.)*xQvector2n.X()+2.*xQvector1n.X()*xQvector1n.Y()*xQvector2n.Y()-pow(xQvector1n.Y(),2.)*xQvector2n.X();//Re[Q_{2n} Q_{n}^* Q_{n}^*]
385  //Double_t imQ2nQ1nstarQ1nstar = pow(Qvector1n.X(),2.)*Qvector2n.Y()-2.*Qvector1n.X()*Qvector1n.Y()*Qvector2n.X()-pow(Qvector1n.Y(),2.)*Qvector2n.Y();//Im[Q_{2n} Q_{n}^* Q_{n}^*]
386  Double_t reQ1nQ1nQ2nstar = reQ2nQ1nstarQ1nstar;//Re[Q_{n} Q_{n} Q_{2n}^*] = Re[Q_{2n} Q_{n}^* Q_{n}^*]
387  Double_t reQ3nQ1nQ2nstarQ2nstar = (pow(xQvector2n.X(),2.)-pow(xQvector2n.Y(),2.))*(xQvector3n.X()*xQvector1n.X()-xQvector3n.Y()*xQvector1n.Y())+2.*xQvector2n.X()*xQvector2n.Y()*(xQvector3n.X()*xQvector1n.Y()+xQvector3n.Y()*xQvector1n.X());
388  //Double_t imQ3nQ1nQ2nstarQ2nstar = calculate and implement this (deleteMe) 
389  Double_t reQ2nQ2nQ3nstarQ1nstar = reQ3nQ1nQ2nstarQ2nstar;
390  Double_t reQ4nQ2nstarQ2nstar = pow(xQvector2n.X(),2.)*xQvector4n.X()+2.*xQvector2n.X()*xQvector2n.Y()*xQvector4n.Y()-pow(xQvector2n.Y(),2.)*xQvector4n.X();//Re[Q_{4n} Q_{2n}^* Q_{2n}^*]
391  //Double_t imQ4nQ2nstarQ2nstar = calculate and implement this (deleteMe)
392  Double_t reQ2nQ2nQ4nstar = reQ4nQ2nstarQ2nstar;
393  Double_t reQ4nQ3nstarQ1nstar = xQvector4n.X()*(xQvector3n.X()*xQvector1n.X()-xQvector3n.Y()*xQvector1n.Y())+xQvector4n.Y()*(xQvector3n.X()*xQvector1n.Y()+xQvector3n.Y()*xQvector1n.X());//Re[Q_{4n} Q_{3n}^* Q_{n}^*]
394  Double_t reQ3nQ1nQ4nstar = reQ4nQ3nstarQ1nstar;//Re[Q_{3n} Q_{n} Q_{4n}^*] = Re[Q_{4n} Q_{3n}^* Q_{n}^*]
395  //Double_t imQ4nQ3nstarQ1nstar = calculate and implement this (deleteMe)
396  Double_t reQ3nQ2nstarQ1nstar = xQvector3n.X()*xQvector2n.X()*xQvector1n.X()-xQvector3n.X()*xQvector2n.Y()*xQvector1n.Y()+xQvector3n.Y()*xQvector2n.X()*xQvector1n.Y()+xQvector3n.Y()*xQvector2n.Y()*xQvector1n.X();//Re[Q_{3n} Q_{2n}^* Q_{n}^*]
397  Double_t reQ2nQ1nQ3nstar = reQ3nQ2nstarQ1nstar;//Re[Q_{2n} Q_{n} Q_{3n}^*] = Re[Q_{3n} Q_{2n}^* Q_{n}^*]
398  //Double_t imQ3nQ2nstarQ1nstar; //calculate and implement this (deleteMe)
399  Double_t reQ3nQ1nstarQ1nstarQ1nstar = xQvector3n.X()*pow(xQvector1n.X(),3)-3.*xQvector1n.X()*xQvector3n.X()*pow(xQvector1n.Y(),2)+3.*xQvector1n.Y()*xQvector3n.Y()*pow(xQvector1n.X(),2)-xQvector3n.Y()*pow(xQvector1n.Y(),3);//Re[Q_{3n} Q_{n}^* Q_{n}^* Q_{n}^*]
400  //Double_t imQ3nQ1nstarQ1nstarQ1nstar; //calculate and implement this (deleteMe)
401  Double_t xQ2nQ1nQ2nstarQ1nstar = pow(xQvector2n.Mod()*xQvector1n.Mod(),2);//|Q_{2n}|^2 |Q_{n}|^2
402  Double_t reQ4nQ2nstarQ1nstarQ1nstar = (xQvector4n.X()*xQvector2n.X()+xQvector4n.Y()*xQvector2n.Y())*(pow(xQvector1n.X(),2)-pow(xQvector1n.Y(),2))+2.*xQvector1n.X()*xQvector1n.Y()*(xQvector4n.Y()*xQvector2n.X()-xQvector4n.X()*xQvector2n.Y());//Re[Q_{4n} Q_{2n}^* Q_{n}^* Q_{n}^*] 
403  //Double_t imQ4nQ2nstarQ1nstarQ1nstar; //calculate and implement this (deleteMe)
404  Double_t reQ2nQ1nQ1nstarQ1nstarQ1nstar = (xQvector2n.X()*xQvector1n.X()-xQvector2n.Y()*xQvector1n.Y())*(pow(xQvector1n.X(),3)-3.*xQvector1n.X()*pow(xQvector1n.Y(),2))+(xQvector2n.X()*xQvector1n.Y()+xQvector1n.X()*xQvector2n.Y())*(3.*xQvector1n.Y()*pow(xQvector1n.X(),2)-pow(xQvector1n.Y(),3));//Re[Q_{2n} Q_{n} Q_{n}^* Q_{n}^* Q_{n}^*]
405  //Double_t imQ2nQ1nQ1nstarQ1nstarQ1nstar; //calculate and implement this (deleteMe)
406  Double_t reQ2nQ2nQ2nstarQ1nstarQ1nstar = pow(xQvector2n.Mod(),2.)*(xQvector2n.X()*(pow(xQvector1n.X(),2.)-pow(xQvector1n.Y(),2.))+2.*xQvector2n.Y()*xQvector1n.X()*xQvector1n.Y());//Re[Q_{2n} Q_{2n} Q_{2n}^* Q_{n}^* Q_{n}^*]
407  //Double_t imQ2nQ2nQ2nstarQ1nstarQ1nstar = pow(Qvector2n.Mod(),2.)*(Qvector2n.Y()*(pow(Qvector1n.X(),2.)-pow(Qvector1n.Y(),2.))-2.*Qvector2n.X()*Qvector1n.X()*Qvector1n.Y());//Im[Q_{2n} Q_{2n} Q_{2n}^* Q_{n}^* Q_{n}^*]
408  Double_t reQ4nQ1nstarQ1nstarQ1nstarQ1nstar = pow(xQvector1n.X(),4.)*xQvector4n.X()-6.*pow(xQvector1n.X(),2.)*xQvector4n.X()*pow(xQvector1n.Y(),2.)+pow(xQvector1n.Y(),4.)*xQvector4n.X()+4.*pow(xQvector1n.X(),3.)*xQvector1n.Y()*xQvector4n.Y()-4.*pow(xQvector1n.Y(),3.)*xQvector1n.X()*xQvector4n.Y();//Re[Q_{4n} Q_{n}^* Q_{n}^* Q_{n}^* Q_{n}^*]
409  //Double_t imQ4nQ1nstarQ1nstarQ1nstarQ1nstar = pow(Qvector1n.X(),4.)*Qvector4n.Y()-6.*pow(Qvector1n.X(),2.)*Qvector4n.Y()*pow(Qvector1n.Y(),2.)+pow(Qvector1n.Y(),4.)*Qvector4n.Y()+4.*pow(Qvector1n.Y(),3.)*Qvector1n.X()*Qvector4n.X()-4.*pow(Qvector1n.X(),3.)*Qvector1n.Y()*Qvector4n.X();//Im[Q_{4n} Q_{n}^* Q_{n}^* Q_{n}^* Q_{n}^*]
410  Double_t reQ3nQ1nQ2nstarQ1nstarQ1nstar = pow(xQvector1n.Mod(),2.)*(xQvector1n.X()*xQvector2n.X()*xQvector3n.X()-xQvector3n.X()*xQvector1n.Y()*xQvector2n.Y()+xQvector2n.X()*xQvector1n.Y()*xQvector3n.Y()+xQvector1n.X()*xQvector2n.Y()*xQvector3n.Y());//Re[Q_{3n} Q_{n} Q_{2n}^* Q_{n}^* Q_{n}^*]
411  //Double_t imQ3nQ1nQ2nstarQ1nstarQ1nstar = pow(xQvector1n.Mod(),2.)*(-xQvector2n.X()*xQvector3n.X()*xQvector1n.Y()-xQvector1n.X()*xQvector3n.X()*xQvector2n.Y()+xQvector1n.X()*xQvector2n.X()*xQvector3n.Y()-xQvector1n.Y()*xQvector2n.Y()*xQvector3n.Y());//Im[Q_{3n} Q_{n} Q_{2n}^* Q_{n}^* Q_{n}^*]
412  Double_t reQ2nQ2nQ1nstarQ1nstarQ1nstarQ1nstar = (pow(xQvector1n.X(),2.)*xQvector2n.X()-2.*xQvector1n.X()*xQvector2n.X()*xQvector1n.Y()-xQvector2n.X()*pow(xQvector1n.Y(),2.)+xQvector2n.Y()*pow(xQvector1n.X(),2.)+2.*xQvector1n.X()*xQvector1n.Y()*xQvector2n.Y()-pow(xQvector1n.Y(),2.)*xQvector2n.Y())*(pow(xQvector1n.X(),2.)*xQvector2n.X()+2.*xQvector1n.X()*xQvector2n.X()*xQvector1n.Y()-xQvector2n.X()*pow(xQvector1n.Y(),2.)-xQvector2n.Y()*pow(xQvector1n.X(),2.)+2.*xQvector1n.X()*xQvector1n.Y()*xQvector2n.Y()+pow(xQvector1n.Y(),2.)*xQvector2n.Y());//Re[Q_{2n} Q_{2n} Q_{n}^* Q_{n}^* Q_{n}^* Q_{n}^*]
413  //Double_t imQ2nQ2nQ1nstarQ1nstarQ1nstarQ1nstar = 2.*(pow(xQvector1n.X(),2.)*xQvector2n.X()-xQvector2n.X()*pow(xQvector1n.Y(),2.)+2.*xQvector1n.X()*xQvector1n.Y()*xQvector2n.Y())*(pow(xQvector1n.X(),2.)*xQvector2n.Y()-2.*xQvector1n.X()*xQvector1n.Y()*xQvector2n.X()-pow(xQvector1n.Y(),2.)*xQvector2n.Y());//Im[Q_{2n} Q_{2n} Q_{n}^* Q_{n}^* Q_{n}^* Q_{n}^*]
414  Double_t reQ3nQ1nQ1nstarQ1nstarQ1nstarQ1nstar = pow(xQvector1n.Mod(),2.)*(pow(xQvector1n.X(),3.)*xQvector3n.X()-3.*xQvector1n.X()*xQvector3n.X()*pow(xQvector1n.Y(),2.)+3.*pow(xQvector1n.X(),2.)*xQvector1n.Y()*xQvector3n.Y()-pow(xQvector1n.Y(),3.)*xQvector3n.Y());//Re[Q_{3n} Q_{n} Q_{n}^* Q_{n}^* Q_{n}^* Q_{n}^*]
415  //Double_t imQ3nQ1nQ1nstarQ1nstarQ1nstarQ1nstar = pow(xQvector1n.Mod(),2.)*(pow(xQvector1n.Y(),3.)*xQvector3n.X()-3.*xQvector1n.Y()*xQvector3n.X()*pow(xQvector1n.X(),2.)-3.*pow(xQvector1n.Y(),2.)*xQvector1n.X()*xQvector3n.Y()+pow(xQvector1n.X(),3.)*xQvector3n.Y());//Im[Q_{3n} Q_{n} Q_{n}^* Q_{n}^* Q_{n}^* Q_{n}^*]
416  Double_t xQ2nQ1nQ1nQ2nstarQ1nstarQ1nstar = pow(xQvector2n.Mod(),2.)*pow(xQvector1n.Mod(),4.);//|Q_{2n}|^2 |Q_{n}|^4
417  Double_t reQ2nQ1nQ1nQ1nstarQ1nstarQ1nstarQ1nstar = pow(xQvector1n.Mod(),4.)*(pow(xQvector1n.X(),2.)*xQvector2n.X()-xQvector2n.X()*pow(xQvector1n.Y(),2.)+2.*xQvector1n.X()*xQvector1n.Y()*xQvector2n.Y());//Re[Q_{2n} Q_{n} Q_{n} Q_{n}^* Q_{n}^* Q_{n}^* Q_{n}^*]
418  //Double_t imQ2nQ1nQ1nQ1nstarQ1nstarQ1nstarQ1nstar = pow(xQvector1n.Mod(),4.)*(pow(xQvector1n.X(),2.)*xQvector2n.Y()-xQvector2n.Y()*pow(xQvector1n.Y(),2.)-2.*xQvector1n.X()*xQvector2n.X()*xQvector1n.Y());//Re[Q_{2n} Q_{n} Q_{n} Q_{n}^* Q_{n}^* Q_{n}^* Q_{n}^*]
419  //---------------------------------------------------------------------------------------------------------
420  
421  //---------------------------------------------------------------------------------------------------------
422  //
423  //                                        **************************************
424  //                                        **** multi-particle correlations: ****
425  //                                        **************************************
426  //
427  // Remark 1: multi-particle correlations calculated with Q-vectors are stored in fQCorrelations.
428  // Remark 2: binning of fQCorrelations is organized as follows: 
429  //
430  // 1st bin: <2>_{n|n} = two1n1n
431  // 2nd bin: <2>_{2n|2n} = two2n2n
432  // 3rd bin: <2>_{3n|3n} = two3n3n
433  // 4th bin: <2>_{4n|4n} = two4n4n
434  // 5th bin: --  EMPTY --
435  // 6th bin: <3>_{2n|n,n} = three2n1n1n
436  // 7th bin: <3>_{3n|2n,n} = three3n2n1n
437  // 8th bin: <3>_{4n|2n,2n} = three4n2n2n
438  // 9th bin: <3>_{4n|3n,n} = three4n3n1n
439  //10th bin: --  EMPTY --
440  //11th bin: <4>_{n,n|n,n} = four1n1n1n1n
441  //12th bin: <4>_{2n,n|2n,n} = four2n1n2n1n
442  //13th bin: <4>_{2n,2n|2n,2n} = four2n2n2n2n
443  //14th bin: <4>_{3n|n,n,n} = four3n1n1n1n
444  //15th bin: <4>_{3n,n|3n,n} = four3n1n3n1n 
445  //16th bin: <4>_{3n,n|2n,2n} = four3n1n2n2n
446  //17th bin: <4>_{4n|2n,n,n} = four4n2n1n1n
447  //18th bin: --  EMPTY --
448  //19th bin: <5>_{2n|n,n,n,n} = five2n1n1n1n1n
449  //20th bin: <5>_{2n,2n|2n,n,n} = five2n2n2n1n1n
450  //21st bin: <5>_{3n,n|2n,n,n} = five3n1n2n1n1n
451  //22nd bin: <5>_{4n|n,n,n,n} = five4n1n1n1n1n  
452  //23rd bin: --  EMPTY --
453  //24th bin: <6>_{n,n,n|n,n,n} = six1n1n1n1n1n1n
454  //25th bin: <6>_{2n,n,n|2n,n,n} = six2n1n1n2n1n1n
455  //26th bin: <6>_{2n,2n|n,n,n,n} = six2n2n1n1n1n1n
456  //27th bin: <6>_{3n,n|n,n,n,n} = six3n1n1n1n1n1n
457  //28th bin: --  EMPTY --
458  //29th bin: <7>_{2n,n,n|n,n,n,n} = seven2n1n1n1n1n1n1n
459  //30th bin: --  EMPTY --
460  //31st bin: <8>_{n,n,n,n|n,n,n,n} = eight1n1n1n1n1n1n1n1n
461
462  
463  // binning of fQProduct (all correlations are evaluated in harmonic n): 
464  // 1st bin: <2>*<4>
465  // 2nd bin: <2>*<6>
466  // 3rd bin: <2>*<8> 
467  // 4th bin: <4>*<6>
468  // 5th bin: <4>*<8>
469  // 6th bin: <6>*<8>
470          
471  //2-particle
472  Double_t two1n1n=0., two2n2n=0., two3n3n=0., two4n4n=0.; 
473  if(xMult>1)
474  {
475   two1n1n = (pow(xQvector1n.Mod(),2.)-xMult)/(xMult*(xMult-1.)); //<2>_{n|n}   = <cos(n*(phi1-phi2))>
476   two2n2n = (pow(xQvector2n.Mod(),2.)-xMult)/(xMult*(xMult-1.)); //<2>_{2n|2n} = <cos(2n*(phi1-phi2))>
477   two3n3n = (pow(xQvector3n.Mod(),2.)-xMult)/(xMult*(xMult-1.)); //<2>_{3n|3n} = <cos(3n*(phi1-phi2))>
478   two4n4n = (pow(xQvector4n.Mod(),2.)-xMult)/(xMult*(xMult-1.)); //<2>_{4n|4n} = <cos(4n*(phi1-phi2))>
479     
480   fQCorrelations->Fill(0.,two1n1n,xMult*(xMult-1.)); 
481   fQCorrelations->Fill(1.,two2n2n,xMult*(xMult-1.)); 
482   fQCorrelations->Fill(2.,two3n3n,xMult*(xMult-1.)); 
483   fQCorrelations->Fill(3.,two4n4n,xMult*(xMult-1.)); 
484   
485   f2pDistribution->Fill(two1n1n,xMult*(xMult-1.)); 
486  }
487  
488  //3-particle
489  Double_t three2n1n1n=0., three3n2n1n=0., three4n2n2n=0., three4n3n1n=0.;
490  if(xMult>2)
491  {
492   three2n1n1n = (reQ2nQ1nstarQ1nstar-2.*pow(xQvector1n.Mod(),2.)-pow(xQvector2n.Mod(),2.)+2.*xMult)/(xMult*(xMult-1.)*(xMult-2.)); //Re[<3>_{2n|n,n}] = Re[<3>_{n,n|2n}] = <cos(n*(2.*phi1-phi2-phi3))>
493   three3n2n1n = (reQ3nQ2nstarQ1nstar-pow(xQvector3n.Mod(),2.)-pow(xQvector2n.Mod(),2.)-pow(xQvector1n.Mod(),2.)+2.*xMult)/(xMult*(xMult-1.)*(xMult-2.)); //Re[<3>_{3n|2n,n}] = Re[<3>_{2n,n|3n}] = <cos(n*(3.*phi1-2.*phi2-phi3))>
494   three4n2n2n = (reQ4nQ2nstarQ2nstar-2.*pow(xQvector2n.Mod(),2.)-pow(xQvector4n.Mod(),2.)+2.*xMult)/(xMult*(xMult-1.)*(xMult-2.)); //Re[<3>_{4n|2n,2n}] = Re[<3>_{2n,2n|4n}] = <cos(n*(4.*phi1-2.*phi2-2.*phi3))>
495   three4n3n1n = (reQ4nQ3nstarQ1nstar-pow(xQvector4n.Mod(),2.)-pow(xQvector3n.Mod(),2.)-pow(xQvector1n.Mod(),2.)+2.*xMult)/(xMult*(xMult-1.)*(xMult-2.)); //Re[<3>_{4n|3n,n}] = Re[<3>_{3n,n|4n}] = <cos(n*(4.*phi1-3.*phi2-phi3))>
496  
497   fQCorrelations->Fill(5.,three2n1n1n,xMult*(xMult-1.)*(xMult-2.)); 
498   fQCorrelations->Fill(6.,three3n2n1n,xMult*(xMult-1.)*(xMult-2.));
499   fQCorrelations->Fill(7.,three4n2n2n,xMult*(xMult-1.)*(xMult-2.)); 
500   fQCorrelations->Fill(8.,three4n3n1n,xMult*(xMult-1.)*(xMult-2.));    
501  }
502  
503  //4-particle
504  Double_t four1n1n1n1n=0., four2n2n2n2n=0., four2n1n2n1n=0., four3n1n1n1n=0., four4n2n1n1n=0., four3n1n2n2n=0., four3n1n3n1n=0.;  
505  if(xMult>3)
506  {
507   four1n1n1n1n = (2.*xMult*(xMult-3.)+pow(xQvector1n.Mod(),4.)-4.*(xMult-2.)*pow(xQvector1n.Mod(),2.)-2.*reQ2nQ1nstarQ1nstar+pow(xQvector2n.Mod(),2.))/(xMult*(xMult-1)*(xMult-2.)*(xMult-3.));//<4>_{n,n|n,n}
508   four2n2n2n2n = (2.*xMult*(xMult-3.)+pow(xQvector2n.Mod(),4.)-4.*(xMult-2.)*pow(xQvector2n.Mod(),2.)-2.*reQ4nQ2nstarQ2nstar+pow(xQvector4n.Mod(),2.))/(xMult*(xMult-1)*(xMult-2.)*(xMult-3.));//<4>_{2n,2n|2n,2n}
509   four2n1n2n1n = (xQ2nQ1nQ2nstarQ1nstar-2.*reQ3nQ2nstarQ1nstar-2.*reQ2nQ1nstarQ1nstar)/(xMult*(xMult-1.)*(xMult-2.)*(xMult-3.))-((xMult-5.)*pow(xQvector1n.Mod(),2.)+(xMult-4.)*pow(xQvector2n.Mod(),2.)-pow(xQvector3n.Mod(),2.))/(xMult*(xMult-1.)*(xMult-2.)*(xMult-3.))+(xMult-6.)/((xMult-1.)*(xMult-2.)*(xMult-3.));//Re[<4>_{2n,n|2n,n}]
510   four3n1n1n1n = (reQ3nQ1nstarQ1nstarQ1nstar-3.*reQ3nQ2nstarQ1nstar-3.*reQ2nQ1nstarQ1nstar)/(xMult*(xMult-1.)*(xMult-2.)*(xMult-3.))+(2.*pow(xQvector3n.Mod(),2.)+3.*pow(xQvector2n.Mod(),2.)+6.*pow(xQvector1n.Mod(),2.)-6.*xMult)/(xMult*(xMult-1.)*(xMult-2.)*(xMult-3.));//Re[<4>_{3n|n,n,n}]
511   four4n2n1n1n = (reQ4nQ2nstarQ1nstarQ1nstar-2.*reQ4nQ3nstarQ1nstar-reQ4nQ2nstarQ2nstar-2.*reQ3nQ2nstarQ1nstar)/(xMult*(xMult-1.)*(xMult-2.)*(xMult-3.))-(reQ2nQ1nstarQ1nstar-2.*pow(xQvector4n.Mod(),2.)-2.*pow(xQvector3n.Mod(),2.)-3.*pow(xQvector2n.Mod(),2.)-4.*pow(xQvector1n.Mod(),2.))/(xMult*(xMult-1.)*(xMult-2.)*(xMult-3.))-(6.)/((xMult-1.)*(xMult-2.)*(xMult-3.));//Re[<4>_{4n|2n,n,n}]
512   four3n1n2n2n = (reQ3nQ1nQ2nstarQ2nstar-reQ4nQ2nstarQ2nstar-reQ3nQ1nQ4nstar-2.*reQ3nQ2nstarQ1nstar)/(xMult*(xMult-1.)*(xMult-2.)*(xMult-3.))-(2.*reQ1nQ1nQ2nstar-pow(xQvector4n.Mod(),2.)-2.*pow(xQvector3n.Mod(),2.)-4.*pow(xQvector2n.Mod(),2.)-4.*pow(xQvector1n.Mod(),2.))/(xMult*(xMult-1.)*(xMult-2.)*(xMult-3.))-(6.)/((xMult-1.)*(xMult-2.)*(xMult-3.));//Re[<4>_{3n,n|2n,2n}] 
513   four3n1n3n1n = (pow(xQvector3n.Mod(),2.)*pow(xQvector1n.Mod(),2.)-2.*reQ4nQ3nstarQ1nstar-2.*reQ3nQ2nstarQ1nstar)/(xMult*(xMult-1.)*(xMult-2.)*(xMult-3.))+(pow(xQvector4n.Mod(),2.)-(xMult-4.)*pow(xQvector3n.Mod(),2.)+pow(xQvector2n.Mod(),2.)-(xMult-4.)*pow(xQvector1n.Mod(),2.))/(xMult*(xMult-1.)*(xMult-2.)*(xMult-3.))+(xMult-6.)/((xMult-1.)*(xMult-2.)*(xMult-3.));//<4>_{3n,n|3n,n}
514   //four_3n1n3n1n = Q3nQ1nQ3nstarQ1nstar/(M*(M-1.)*(M-2.)*(M-3.))-(2.*three_3n2n1n+2.*three_4n3n1n)/(M-3.)-(two_4n4n+M*two_3n3n+two_2n2n+M*two_1n1n)/((M-2.)*(M-3.))-M/((M-1.)*(M-2.)*(M-3.));//<4>_{3n,n|3n,n}
515   
516   fQCorrelations->Fill(10.,four1n1n1n1n,xMult*(xMult-1.)*(xMult-2.)*(xMult-3.));
517   fQCorrelations->Fill(11.,four2n1n2n1n,xMult*(xMult-1.)*(xMult-2.)*(xMult-3.));
518   fQCorrelations->Fill(12.,four2n2n2n2n,xMult*(xMult-1.)*(xMult-2.)*(xMult-3.));
519   fQCorrelations->Fill(13.,four3n1n1n1n,xMult*(xMult-1.)*(xMult-2.)*(xMult-3.));
520   fQCorrelations->Fill(14.,four3n1n3n1n,xMult*(xMult-1.)*(xMult-2.)*(xMult-3.));
521   fQCorrelations->Fill(15.,four3n1n2n2n,xMult*(xMult-1.)*(xMult-2.)*(xMult-3.));  
522   fQCorrelations->Fill(16.,four4n2n1n1n,xMult*(xMult-1.)*(xMult-2.)*(xMult-3.)); 
523   
524   f4pDistribution->Fill(four1n1n1n1n,xMult*(xMult-1.)*(xMult-2.)*(xMult-3.));
525   
526   fQProduct->Fill(0.,two1n1n*four1n1n1n1n,xMult*(xMult-1.)*xMult*(xMult-1.)*(xMult-2.)*(xMult-3.));
527  }
528
529  //5-particle
530  Double_t five2n1n1n1n1n=0., five2n2n2n1n1n=0., five3n1n2n1n1n=0., five4n1n1n1n1n=0.;
531  if(xMult>4)
532  {
533   five2n1n1n1n1n = (reQ2nQ1nQ1nstarQ1nstarQ1nstar-reQ3nQ1nstarQ1nstarQ1nstar+6.*reQ3nQ2nstarQ1nstar)/(xMult*(xMult-1.)*(xMult-2.)*(xMult-3.)*(xMult-4.))-(reQ2nQ1nQ3nstar+3.*(xMult-6.)*reQ2nQ1nstarQ1nstar+3.*reQ1nQ1nQ2nstar)/(xMult*(xMult-1.)*(xMult-2.)*(xMult-3.)*(xMult-4.))-(2.*pow(xQvector3n.Mod(),2.)+3.*pow(xQvector2n.Mod()*xQvector1n.Mod(),2.)-3.*(xMult-4.)*pow(xQvector2n.Mod(),2.))/(xMult*(xMult-1.)*(xMult-2.)*(xMult-3.)*(xMult-4.))-3.*(pow(xQvector1n.Mod(),4.)-2.*(2*xMult-5.)*pow(xQvector1n.Mod(),2.)+2.*xMult*(xMult-4.))/(xMult*(xMult-1.)*(xMult-2.)*(xMult-3.)*(xMult-4.));//Re[<5>_{2n,n|n,n,n}]
534   
535   five2n2n2n1n1n = (reQ2nQ2nQ2nstarQ1nstarQ1nstar-reQ4nQ2nstarQ1nstarQ1nstar-2.*reQ2nQ2nQ3nstarQ1nstar)/(xMult*(xMult-1.)*(xMult-2.)*(xMult-3.)*(xMult-4.))+2.*(reQ4nQ2nstarQ2nstar+4.*reQ3nQ2nstarQ1nstar+reQ3nQ1nQ4nstar)/(xMult*(xMult-1.)*(xMult-2.)*(xMult-3.)*(xMult-4.))+(reQ2nQ2nQ4nstar-2.*(xMult-5.)*reQ2nQ1nstarQ1nstar+2.*reQ1nQ1nQ2nstar)/(xMult*(xMult-1.)*(xMult-2.)*(xMult-3.)*(xMult-4.))-(2.*pow(xQvector4n.Mod(),2.)+4.*pow(xQvector3n.Mod(),2.)+1.*pow(xQvector2n.Mod(),4.)-2.*(3.*xMult-10.)*pow(xQvector2n.Mod(),2.))/(xMult*(xMult-1.)*(xMult-2.)*(xMult-3.)*(xMult-4.))-(4.*pow(xQvector1n.Mod(),2.)*pow(xQvector2n.Mod(),2.)-4.*(xMult-5.)*pow(xQvector1n.Mod(),2.)+4.*xMult*(xMult-6.))/(xMult*(xMult-1.)*(xMult-2.)*(xMult-3.)*(xMult-4.));//Re[<5>_{2n,2n|2n,n,n}]  
536
537   //five_2n2n2n1n1n = reQ2nQ2nQ2nstarQ1nstarQ1nstar/(M*(M-1.)*(M-2.)*(M-3.)*(M-4.))-(4.*four_2n1n2n1n+2.*four_3n1n2n2n+1.*four_2n2n2n2n+four_4n2n1n1n)/(M-4.)-(2.*three_4n3n1n+three_4n2n2n+three_4n2n2n+2.*three_3n2n1n)/((M-3.)*(M-4.))-(4.*three_3n2n1n+(2.*M-1.)*three_2n1n1n+2.*three_2n1n1n)/((M-3.)*(M-4.))-(two_4n4n+2.*two_3n3n+4.*(M-1.)*two_2n2n+2.*(2.*M-1.)*two_1n1n)/((M-2.)*(M-3.)*(M-4.))-(2.*M-1.)/((M-1.)*(M-2.)*(M-3.)*(M-4.)); //OK! 
538    
539   five4n1n1n1n1n = (reQ4nQ1nstarQ1nstarQ1nstarQ1nstar-6.*reQ4nQ2nstarQ1nstarQ1nstar-4.*reQ3nQ1nstarQ1nstarQ1nstar)/(xMult*(xMult-1.)*(xMult-2.)*(xMult-3.)*(xMult-4.))+(8.*reQ4nQ3nstarQ1nstar+3.*reQ4nQ2nstarQ2nstar+12.*reQ3nQ2nstarQ1nstar+12.*reQ2nQ1nstarQ1nstar)/(xMult*(xMult-1.)*(xMult-2.)*(xMult-3.)*(xMult-4.))-(6.*pow(xQvector4n.Mod(),2.)+8.*pow(xQvector3n.Mod(),2.)+12.*pow(xQvector2n.Mod(),2.)+24.*pow(xQvector1n.Mod(),2.)-24.*xMult)/(xMult*(xMult-1.)*(xMult-2.)*(xMult-3.)*(xMult-4.));//Re[<5>_{4n|n,n,n,n}] 
540   
541   //five_4n1n1n1n1n = reQ4nQ1nstarQ1nstarQ1nstarQ1nstar/(M*(M-1.)*(M-2.)*(M-3.)*(M-4.)) -  (4.*four_3n1n1n1n+6.*four_4n2n1n1n)/(M-4.)  -  (6.*three_2n1n1n  + 12.*three_3n2n1n + 4.*three_4n3n1n + 3.*three_4n2n2n)/((M-3.)*(M-4.))  -  (4.*two_1n1n + 6.*two_2n2n + 4.*two_3n3n + 1.*two_4n4n)/((M-2.)*(M-3.)*(M-4.)) - 1./((M-1.)*(M-2.)*(M-3.)*(M-4.)); //OK!
542   
543   five3n1n2n1n1n = (reQ3nQ1nQ2nstarQ1nstarQ1nstar-reQ4nQ2nstarQ1nstarQ1nstar-reQ3nQ1nstarQ1nstarQ1nstar)/(xMult*(xMult-1.)*(xMult-2.)*(xMult-3.)*(xMult-4.))-(reQ3nQ1nQ2nstarQ2nstar-3.*reQ4nQ3nstarQ1nstar-reQ4nQ2nstarQ2nstar)/(xMult*(xMult-1.)*(xMult-2.)*(xMult-3.)*(xMult-4.))-((2.*xMult-13.)*reQ3nQ2nstarQ1nstar-reQ3nQ1nQ4nstar-9.*reQ2nQ1nstarQ1nstar)/(xMult*(xMult-1.)*(xMult-2.)*(xMult-3.)*(xMult-4.))-(2.*reQ1nQ1nQ2nstar+2.*pow(xQvector4n.Mod(),2.)-2.*(xMult-5.)*pow(xQvector3n.Mod(),2.)+2.*pow(xQvector3n.Mod(),2.)*pow(xQvector1n.Mod(),2.))/(xMult*(xMult-1.)*(xMult-2.)*(xMult-3.)*(xMult-4.))+(2.*(xMult-6.)*pow(xQvector2n.Mod(),2.)-2.*pow(xQvector2n.Mod(),2.)*pow(xQvector1n.Mod(),2.)-pow(xQvector1n.Mod(),4.)+2.*(3.*xMult-11.)*pow(xQvector1n.Mod(),2.))/(xMult*(xMult-1.)*(xMult-2.)*(xMult-3.)*(xMult-4.))-4.*(xMult-6.)/((xMult-1.)*(xMult-2.)*(xMult-3.)*(xMult-4.));//Re[<5>_{3n,n|2n,n,n}] 
544   
545   //five3n1n2n1n1n = reQ3nQ1nQ2nstarQ1nstarQ1nstar/(xMult*(xMult-1.)*(xMult-2.)*(xMult-3.)*(xMult-4.)) -  (four4n2n1n1n+four1n1n1n1n+four3n1n1n1n+2.*four2n1n2n1n+2.*three3n2n1n+2.*four3n1n3n1n+four3n1n2n2n)/(xMult-4.)  -   (2.*three4n3n1n+three4n2n2n+6.*three3n2n1n+three4n3n1n+2.*three3n2n1n+3.*three2n1n1n+2.*three2n1n1n+4.*two1n1n+2.*two2n2n+2.*two3n3n)/((xMult-3.)*(xMult-4.))  -  (5.*two1n1n + 4.*two2n2n + 3.*two3n3n + 1.*two4n4n + 2.)/((xMult-2.)*(xMult-3.)*(xMult-4.))  - 1./((xMult-1.)*(xMult-2.)*(xMult-3.)*(xMult-4.)) ;//Re[<5>_{3n,n|2n,n,n}] //OK!
546   
547   //five3n1n2n1n1n = reQ3nQ1nQ2nstarQ1nstarQ1nstar/(xMult*(xMult-1.)*(xMult-2.)*(xMult-3.)*(xMult-4.)) -  (four4n2n1n1n+four1n1n1n1n+four3n1n1n1n+2.*four2n1n2n1n+2.*four3n1n3n1n+four3n1n2n2n)/(xMult-4.)  -      (2.*three4n3n1n+three4n2n2n+2.*xMult*three3n2n1n+three4n3n1n+2.*three3n2n1n+3.*three2n1n1n+2.*three2n1n1n)/((xMult-3.)*(xMult-4.))  -  ((4.*xMult-3.)*two1n1n + 2.*xMult*two2n2n + (2.*xMult-1.)*two3n3n + two4n4n)/((xMult-2.)*(xMult-3.)*(xMult-4.))  - (2.*xMult-1.)/((xMult-1.)*(xMult-2.)*(xMult-3.)*(xMult-4.)) ;//Re[<5>_{3n,n|2n,n,n}] //OK!
548    
549   fQCorrelations->Fill(18.,five2n1n1n1n1n,xMult*(xMult-1.)*(xMult-2.)*(xMult-3.)*(xMult-4.)); 
550   fQCorrelations->Fill(19.,five2n2n2n1n1n,xMult*(xMult-1.)*(xMult-2.)*(xMult-3.)*(xMult-4.));
551   fQCorrelations->Fill(20.,five3n1n2n1n1n,xMult*(xMult-1.)*(xMult-2.)*(xMult-3.)*(xMult-4.));
552   fQCorrelations->Fill(21.,five4n1n1n1n1n,xMult*(xMult-1.)*(xMult-2.)*(xMult-3.)*(xMult-4.));
553  }
554
555  //6-particle
556  Double_t six1n1n1n1n1n1n=0., six2n2n1n1n1n1n=0., six3n1n1n1n1n1n=0., six2n1n1n2n1n1n=0.;
557  if(xMult>5)
558  {
559   six1n1n1n1n1n1n = (pow(xQvector1n.Mod(),6.)+9.*xQ2nQ1nQ2nstarQ1nstar-6.*reQ2nQ1nQ1nstarQ1nstarQ1nstar)/(xMult*(xMult-1)*(xMult-2)*(xMult-3)*(xMult-4)*(xMult-5))+4.*(reQ3nQ1nstarQ1nstarQ1nstar-3.*reQ3nQ2nstarQ1nstar)/(xMult*(xMult-1)*(xMult-2)*(xMult-3)*(xMult-4)*(xMult-5))+2.*(9.*(xMult-4.)*reQ2nQ1nstarQ1nstar+2.*pow(xQvector3n.Mod(),2.))/(xMult*(xMult-1)*(xMult-2)*(xMult-3)*(xMult-4)*(xMult-5))-9.*(pow(xQvector1n.Mod(),4.)+pow(xQvector2n.Mod(),2.))/(xMult*(xMult-1)*(xMult-2)*(xMult-3)*(xMult-5))+(18.*pow(xQvector1n.Mod(),2.))/(xMult*(xMult-1)*(xMult-3)*(xMult-4))-(6.)/((xMult-1)*(xMult-2)*(xMult-3));//<6>_{n,n,n|n,n,n}
560   
561   six2n1n1n2n1n1n = (xQ2nQ1nQ1nQ2nstarQ1nstarQ1nstar-xMult*(xMult-1.)*(xMult-2.)*(xMult-3.)*(xMult-4.)*(2.*five2n2n2n1n1n+4.*five2n1n1n1n1n+4.*five3n1n2n1n1n+4.*four2n1n2n1n+1.*four1n1n1n1n)-xMult*(xMult-1.)*(xMult-2.)*(xMult-3.)*(4.*four1n1n1n1n+4.*two1n1n+2.*three2n1n1n+2.*three2n1n1n+4.*four3n1n1n1n+8.*three2n1n1n+2.*four4n2n1n1n+4.*four2n1n2n1n+2.*two2n2n+8.*four2n1n2n1n+4.*four3n1n3n1n+8.*three3n2n1n+4.*four3n1n2n2n+4.*four1n1n1n1n+4.*four2n1n2n1n+1.*four2n2n2n2n)-xMult*(xMult-1.)*(xMult-2.)*(2.*three2n1n1n+8.*two1n1n+4.*two1n1n+2.+4.*two1n1n+4.*three2n1n1n+2.*two2n2n+4.*three2n1n1n+8.*three3n2n1n+8.*two2n2n+4.*three4n3n1n+4.*two3n3n+4.*three3n2n1n+4.*two1n1n+8.*three2n1n1n+4.*two1n1n+4.*three3n2n1n+4.*three2n1n1n+2.*two2n2n+4.*three3n2n1n+2.*three4n2n2n)-xMult*(xMult-1.)*(4.*two1n1n+4.+4.*two1n1n+2.*two2n2n+1.+4.*two1n1n+4.*two2n2n+4.*two3n3n+   1.+2.*two2n2n+1.*two4n4n)-xMult)/(xMult*(xMult-1.)*(xMult-2.)*(xMult-3.)*(xMult-4.)*(xMult-5.));//<6>_{2n,n,n|2n,n,n}
562  
563   six2n2n1n1n1n1n = (reQ2nQ2nQ1nstarQ1nstarQ1nstarQ1nstar-xMult*(xMult-1.)*(xMult-2.)*(xMult-3.)*(xMult-4.)*(five4n1n1n1n1n+8.*five2n1n1n1n1n+6.*five2n2n2n1n1n)-xMult*(xMult-1.)*(xMult-2.)*(xMult-3.)*(4.*four3n1n1n1n+6.*four4n2n1n1n+12.*three2n1n1n+12.*four1n1n1n1n+24.*four2n1n2n1n+4.*four3n1n2n2n+3.*four2n2n2n2n)-xMult*(xMult-1.)*(xMult-2.)*(6.*three2n1n1n+12.*three3n2n1n+4.*three4n3n1n+3.*three4n2n2n+8.*three2n1n1n+24.*two1n1n+12.*two2n2n+12.*three2n1n1n+8.*three3n2n1n+1.*three4n2n2n)-xMult*(xMult-1.)*(4.*two1n1n+6.*two2n2n+4.*two3n3n+1.*two4n4n+2.*two2n2n+8.*two1n1n+6.)-xMult)/(xMult*(xMult-1.)*(xMult-2.)*(xMult-3.)*(xMult-4.)*(xMult-5.));//<6>_{2n,2n,n|n,n,n}
564    
565   six3n1n1n1n1n1n = (reQ3nQ1nQ1nstarQ1nstarQ1nstarQ1nstar-xMult*(xMult-1.)*(xMult-2.)*(xMult-3.)*(xMult-4.)*(five4n1n1n1n1n+4.*five2n1n1n1n1n+6.*five3n1n2n1n1n+4.*four3n1n1n1n)-xMult*(xMult-1.)*(xMult-2.)*(xMult-3.)*(4.*four3n1n1n1n+6.*four4n2n1n1n+6.*four1n1n1n1n+12.*three2n1n1n+12.*four2n1n2n1n+6.*four3n1n1n1n+12.*three3n2n1n+4.*four3n1n3n1n+3.*four3n1n2n2n)-xMult*(xMult-1.)*(xMult-2.)*(6.*three2n1n1n+12.*three3n2n1n+4.*three4n3n1n+3.*three4n2n2n+4.*two1n1n+12.*two1n1n+6.*three2n1n1n+12.*three2n1n1n+4.*three3n2n1n+12.*two2n2n+4.*three3n2n1n+4.*two3n3n+1.*three4n3n1n+6.*three3n2n1n)-xMult*(xMult-1.)*(4.*two1n1n+6.*two2n2n+4.*two3n3n+1.*two4n4n+1.*two1n1n+4.+6.*two1n1n+4.*two2n2n+1.*two3n3n)-xMult)/(xMult*(xMult-1.)*(xMult-2.)*(xMult-3.)*(xMult-4.)*(xMult-5.));//<6>_{3n,n|n,n,n,n}
566    
567   fQCorrelations->Fill(23.,six1n1n1n1n1n1n,xMult*(xMult-1.)*(xMult-2.)*(xMult-3.)*(xMult-4.)*(xMult-5.)); 
568   fQCorrelations->Fill(24.,six2n1n1n2n1n1n,xMult*(xMult-1.)*(xMult-2.)*(xMult-3.)*(xMult-4.)*(xMult-5.)); 
569   fQCorrelations->Fill(25.,six2n2n1n1n1n1n,xMult*(xMult-1.)*(xMult-2.)*(xMult-3.)*(xMult-4.)*(xMult-5.));
570   fQCorrelations->Fill(26.,six3n1n1n1n1n1n,xMult*(xMult-1.)*(xMult-2.)*(xMult-3.)*(xMult-4.)*(xMult-5.)); 
571
572   f6pDistribution->Fill(six1n1n1n1n1n1n,xMult*(xMult-1.)*(xMult-2.)*(xMult-3.)*(xMult-4.)*(xMult-5.)); 
573   
574   fQProduct->Fill(1.,two1n1n*six1n1n1n1n1n1n,xMult*(xMult-1.)*xMult*(xMult-1.)*(xMult-2.)*(xMult-3.)*(xMult-4.)*(xMult-5.));
575   fQProduct->Fill(3.,four1n1n1n1n*six1n1n1n1n1n1n,xMult*(xMult-1.)*(xMult-2.)*(xMult-3.)*xMult*(xMult-1.)*(xMult-2.)*(xMult-3.)*(xMult-4.)*(xMult-5.));
576  }
577  
578  //7-particle
579  Double_t seven2n1n1n1n1n1n1n=0.;
580  if(xMult>6)
581  {
582   seven2n1n1n1n1n1n1n = (reQ2nQ1nQ1nQ1nstarQ1nstarQ1nstarQ1nstar-xMult*(xMult-1.)*(xMult-2.)*(xMult-3.)*(xMult-4.)*(xMult-5.)*(2.*six3n1n1n1n1n1n+4.*six1n1n1n1n1n1n+1.*six2n2n1n1n1n1n+6.*six2n1n1n2n1n1n+8.*five2n1n1n1n1n)-xMult*(xMult-1.)*(xMult-2.)*(xMult-3.)*(xMult-4.)*(1.*five4n1n1n1n1n +8.*five2n1n1n1n1n+8.*four3n1n1n1n+12.*five3n1n2n1n1n+4.*five2n1n1n1n1n+3.*five2n2n2n1n1n+6.*five2n2n2n1n1n+6.*four1n1n1n1n+24.*four1n1n1n1n+12.*five2n1n1n1n1n+12.*five2n1n1n1n1n+12.*three2n1n1n+24.*four2n1n2n1n+4.*five3n1n2n1n1n+4.*five2n1n1n1n1n)-xMult*(xMult-1.)*(xMult-2.)*(xMult-3.)*(4.*four3n1n1n1n+6.*four4n2n1n1n+12.*four1n1n1n1n+24.*three2n1n1n+24.*four2n1n2n1n+12.*four3n1n1n1n+24.*three3n2n1n+8.*four3n1n3n1n+6.*four3n1n2n2n+6.*three2n1n1n+12.*four1n1n1n1n+12.*four2n1n2n1n+6.*three2n1n1n+12.*four2n1n2n1n+4.*four3n1n2n2n+3.*four2n2n2n2n+4.*four1n1n1n1n+6.*three2n1n1n+24.*two1n1n+24.*four1n1n1n1n+4.*four3n1n1n1n+24.*two1n1n+24.*three2n1n1n+12.*two2n2n+24.*three2n1n1n+12.*four2n1n2n1n+8.*three3n2n1n+8.*four2n1n2n1n+1.*four4n2n1n1n)-xMult*(xMult-1.)*(xMult-2.)*(6.*three2n1n1n+1.*three2n1n1n+8.*two1n1n+12.*three3n2n1n+24.*two1n1n+12.*three2n1n1n+4.*three2n1n1n+8.*two1n1n+4.*three4n3n1n+24.*three2n1n1n+8.*three3n2n1n+12.*two1n1n+12.*two1n1n+3.*three4n2n2n+24.*two2n2n+6.*two2n2n+12.+12.*three3n2n1n+8.*two3n3n+12.*three2n1n1n+24.*two1n1n+4.*three3n2n1n+8.*three3n2n1n+2.*three4n3n1n+12.*two1n1n+8.*three2n1n1n+4.*three2n1n1n+2.*three3n2n1n+6.*two2n2n+8.*two2n2n+1.*three4n2n2n+4.*three3n2n1n+6.*three2n1n1n)-xMult*(xMult-1.)*(4.*two1n1n+2.*two1n1n+6.*two2n2n+8.+1.*two2n2n+4.*two3n3n+12.*two1n1n+4.*two1n1n+1.*two4n4n+8.*two2n2n+6.+2.*two3n3n+4.*two1n1n+1.*two2n2n)-xMult)/(xMult*(xMult-1.)*(xMult-2.)*(xMult-3.)*(xMult-4.)*(xMult-5.)*(xMult-6.));
583         
584   fQCorrelations->Fill(28.,seven2n1n1n1n1n1n1n,xMult*(xMult-1.)*(xMult-2.)*(xMult-3.)*(xMult-4.)*(xMult-5.)*(xMult-6.));
585  }
586  
587  //8-particle
588  Double_t eight1n1n1n1n1n1n1n1n=0.;
589  if(xMult>7)
590  {
591   eight1n1n1n1n1n1n1n1n = (pow(xQvector1n.Mod(),8)-xMult*(xMult-1.)*(xMult-2.)*(xMult-3.)*(xMult-4.)*(xMult-5.)*(xMult-6.)*(12.*seven2n1n1n1n1n1n1n+16.*six1n1n1n1n1n1n)-xMult*(xMult-1.)*(xMult-2.)*(xMult-3.)*(xMult-4.)*(xMult-5.)*(8.*six3n1n1n1n1n1n+48.*six1n1n1n1n1n1n+6.*six2n2n1n1n1n1n+96.*five2n1n1n1n1n+72.*four1n1n1n1n+36.*six2n1n1n2n1n1n)-xMult*(xMult-1.)*(xMult-2.)*(xMult-3.)*(xMult-4.)*(2.*five4n1n1n1n1n+32.*five2n1n1n1n1n+36.*four1n1n1n1n+32.*four3n1n1n1n+48.*five2n1n1n1n1n+48.*five3n1n2n1n1n+144.*five2n1n1n1n1n+288.*four1n1n1n1n+36.*five2n2n2n1n1n+144.*three2n1n1n+96.*two1n1n+144.*four2n1n2n1n)-xMult*(xMult-1.)*(xMult-2.)*(xMult-3.)*(8.*four3n1n1n1n+48.*four1n1n1n1n+12.*four4n2n1n1n+96.*four2n1n2n1n+96.*three2n1n1n+72.*three2n1n1n+144.*two1n1n+16.*four3n1n3n1n+48.*four3n1n1n1n+144.*four1n1n1n1n+72.*four1n1n1n1n+96.*three3n2n1n+24.*four3n1n2n2n+144.*four2n1n2n1n+288.*two1n1n+288.*three2n1n1n+9.*four2n2n2n2n+72.*two2n2n+24.)-xMult*(xMult-1.)*(xMult-2.)*(12.*three2n1n1n+16.*two1n1n+24.*three3n2n1n+48.*three2n1n1n+96.*two1n1n+8.*three4n3n1n+32.*three3n2n1n+96.*three2n1n1n+144.*two1n1n+6.*three4n2n2n+96.*two2n2n+36.*two2n2n+72.+48.*three3n2n1n+16.*two3n3n+72.*three2n1n1n+144.*two1n1n)-xMult*(xMult-1.)*(8.*two1n1n+12.*two2n2n+16.+8.*two3n3n+48.*two1n1n+1.*two4n4n+16.*two2n2n+18.)-xMult)/(xMult*(xMult-1.)*(xMult-2.)*(xMult-3.)*(xMult-4.)*(xMult-5.)*(xMult-6.)*(xMult-7.));
592   
593   fQCorrelations->Fill(30.,eight1n1n1n1n1n1n1n1n,xMult*(xMult-1.)*(xMult-2.)*(xMult-3.)*(xMult-4.)*(xMult-5.)*(xMult-6.)*(xMult-7.));
594  } 
595  //---------------------------------------------------------------------------------------------------------
596  
597  
598  //--------------------------------------------------------------------------------------------------------- 
599  // DIFFERENTIAL FLOW
600  
601  Double_t xQx  = xQvector1n.X();
602  Double_t xQy  = xQvector1n.Y();
603  Double_t xQ2x = xQvector2n.X();
604  Double_t xQ2y = xQvector2n.Y();
605
606  Double_t qx=0.,qy=0.,q2x=0.,q2y=0.,m=0.;//add comments for these variables (deleteMe)
607  
608  for(Int_t i=0;i<xMult;i++) //check if nPrim == M
609  { 
610   fTrack=anEvent->GetTrack(i);
611   if(fTrack)
612   {
613    fReq1n->Fill(fTrack->Pt(),cos(n*(fTrack->Phi())),1.);
614    fImq1n->Fill(fTrack->Pt(),sin(n*(fTrack->Phi())),1.);
615    fReq2n->Fill(fTrack->Pt(),cos(2.*n*(fTrack->Phi())),1.);
616    fImq2n->Fill(fTrack->Pt(),sin(2.*n*(fTrack->Phi())),1.);
617   }
618  } 
619   
620  Double_t twoDiff1n1n=0.,twoDiff2n2n=0.,threeDiff2n1n1n=0.,threeDiff1n1n2n=0.,fourDiff1n1n1n1n=0.;
621  
622  for(Int_t bin=1;bin<(fnBinsPt+1);bin++)//loop over pt-bins 
623  { 
624   qx = (fReq1n->GetBinContent(bin))*(fReq1n->GetBinEntries(bin));
625   qy = (fImq1n->GetBinContent(bin))*(fImq1n->GetBinEntries(bin)); 
626   q2x = (fReq2n->GetBinContent(bin))*(fReq2n->GetBinEntries(bin));  
627   q2y = (fImq2n->GetBinContent(bin))*(fImq2n->GetBinEntries(bin)); 
628   m = fReq1n->GetBinEntries(bin);          
629  
630   if(m>0&&xMult>1)
631   {
632    twoDiff1n1n = (qx*xQx+qy*xQy-m)/(m*(xMult-1.));
633    f2PerBin1n1n->Fill((bin-1)*0.1,twoDiff1n1n,m*(xMult-1.));//<2'>_{n|n}
634    
635    twoDiff2n2n = (q2x*xQ2x+q2y*xQ2y-m)/(m*(xMult-1.));
636    f2PerBin2n2n->Fill((bin-1)*0.1,twoDiff2n2n,m*(xMult-1.));//<2'>_{2n|2n} 
637   }
638   
639   if(m>0&&xMult>2)
640   {
641    threeDiff2n1n1n = (q2x*(xQx*xQx-xQy*xQy)+2.*q2y*xQx*xQy-2.*(qx*xQx+qy*xQy)-(q2x*xQ2x+q2y*xQ2y)+2.*m)/(m*(xMult-1.)*(xMult-2.));
642    f3PerBin2n1n1n->Fill((bin-1)*0.1,threeDiff2n1n1n,m*(xMult-1.)*(xMult-2.));//Re[<3'>_{2n|n,n}]
643    
644    threeDiff1n1n2n = (xQ2x*(qx*xQx-qy*xQy)+xQ2y*(qx*xQy+qy*xQx)-2.*(qx*xQx+qy*xQy)-(q2x*xQ2x+q2y*xQ2y)+2.*m)/(m*(xMult-1.)*(xMult-2.));
645    f3PerBin1n1n2n->Fill((bin-1)*0.1,threeDiff1n1n2n,m*(xMult-1.)*(xMult-2.));//Re[<3'>_{n,n|2n}]
646   }
647   
648   if(m>0&&xMult>3)
649   {
650    fourDiff1n1n1n1n = ((xQx*xQx+xQy*xQy)*(qx*xQx+qy*xQy)-(q2x*(xQx*xQx-xQy*xQy)+2.*q2y*xQx*xQy)-(xQ2x*(qx*xQx-qy*xQy)+xQ2y*(qx*xQy+qy*xQx))+(q2x*xQ2x+q2y*xQ2y)-2.*(xMult-3.)*(qx*xQx+qy*xQy)-2.*m*(xQx*xQx+xQy*xQy)+2.*(xQx*qx+xQy*qy)+2.*m*(xMult-3.))/(m*(xMult-1.)*(xMult-2.)*(xMult-3.));
651    f4PerBin1n1n1n1n->Fill((bin-1)*0.1,fourDiff1n1n1n1n,m*(xMult-1.)*(xMult-2.)*(xMult-3.));//Re[<4'>_{n,n|n,n}]
652   }
653    
654  } 
655   
656  fReq1n->Reset();
657  fImq1n->Reset();
658  fReq2n->Reset();
659  fImq2n->Reset();
660 //---------------------------------------------------------------------------------------------------------
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700 /*
701
702
703
704
705
706
707
708
709  //-------------------------------------------------------------------------------------------------------------------------------- 
710  //
711  //                                          **********************
712  //                                          **** NESTED LOOPS ****
713  //                                          ********************** 
714  //
715  // Remark 1: multi-particle correlations calculated with nested loops are stored in fDirectCorrelations.
716  // Remark 2: binning of fDirectCorrelations: bins 0..40 - correlations needed for integrated flow; bins 40..80 - correlations needed for differential flow (taking as an example bin 0.5 < pt < 0.6)
717  //
718  // binning details of fDirectCorrelations (integrated flow):
719  //
720  // 1st bin: <2>_{n|n} = two1n1n
721  // 2nd bin: <2>_{2n|2n} = two2n2n
722  // 3rd bin: <2>_{3n|3n} = two3n3n
723  // 4th bin: <2>_{4n|4n} = two4n4n
724  // 5th bin: --  EMPTY --
725  // 6th bin: <3>_{2n|n,n} = three2n1n1n
726  // 7th bin: <3>_{3n|2n,n} = three3n2n1n
727  // 8th bin: <3>_{4n|2n,2n} = three4n2n2n
728  // 9th bin: <3>_{4n|3n,n} = three4n3n1n
729  //10th bin: --  EMPTY --
730  //11th bin: <4>_{n,n|n,n} = four1n1n1n1n
731  //12th bin: <4>_{2n,n|2n,n} = four2n1n2n1n
732  //13th bin: <4>_{2n,2n|2n,2n} = four2n2n2n2n
733  //14th bin: <4>_{3n|n,n,n} = four3n1n1n1n
734  //15th bin: <4>_{3n,n|3n,n} = four3n1n3n1n 
735  //16th bin: <4>_{3n,n|2n,2n} = four3n1n2n2n
736  //17th bin: <4>_{4n|2n,n,n} = four4n2n1n1n
737  //18th bin: --  EMPTY --
738  //19th bin: <5>_{2n|n,n,n,n} = five2n1n1n1n1n
739  //20th bin: <5>_{2n,2n|2n,n,n} = five2n2n2n1n1n
740  //21st bin: <5>_{3n,n|2n,n,n} = five3n1n2n1n1n
741  //22nd bin: <5>_{4n|n,n,n,n} = five4n1n1n1n1n  
742  //23rd bin: --  EMPTY --
743  //24th bin: <6>_{n,n,n|n,n,n} = six1n1n1n1n1n1n
744  //25th bin: <6>_{2n,n,n|2n,n,n} = six2n1n1n2n1n1n
745  //26th bin: <6>_{2n,2n|n,n,n,n} = six2n2n1n1n1n1n
746  //27th bin: <6>_{3n,n|n,n,n,n} = six3n1n1n1n1n1n
747  //28th bin: --  EMPTY --
748  //29th bin: <7>_{2n,n,n|n,n,n,n} = seven2n1n1n1n1n1n1n
749  //30th bin: --  EMPTY --
750  //31st bin: <8>_{n,n,n,n|n,n,n,n} = eight1n1n1n1n1n1n1n1n
751  
752  Double_t phi1=0., phi2=0., phi3=0., phi4=0., phi5=0., phi6=0., phi7=0., phi8=0.;
753
754  //<2>_{k*n|k*n} (k=1,2,3 and 4)
755  for(Int_t i1=0;i1<xMult;i1++)
756  {
757   fTrack=anEvent->GetTrack(i1);
758   phi1=fTrack->Phi();
759   for(Int_t i2=0;i2<xMult;i2++)
760   {
761    if(i2==i1)continue;
762    fTrack=anEvent->GetTrack(i2);
763    phi2=fTrack->Phi();
764    fDirectCorrelations->Fill(0.,cos(n*(phi1-phi2)),1);    //<2>_{n|n}
765    fDirectCorrelations->Fill(1.,cos(2.*n*(phi1-phi2)),1); //<2>_{2n|2n}
766    fDirectCorrelations->Fill(2.,cos(3.*n*(phi1-phi2)),1); //<2>_{3n|3n}
767    fDirectCorrelations->Fill(3.,cos(4.*n*(phi1-phi2)),1); //<2>_{4n|4n} 
768   }
769  }  
770      
771  //<3>_{2n|n,n}, <3>_{3n|2n,n}, <3>_{4n|2n,2n} and <3>_{4n|3n,n}
772  for(Int_t i1=0;i1<xMult;i1++)
773  {
774   fTrack=anEvent->GetTrack(i1);
775   phi1=fTrack->Phi();
776   for(Int_t i2=0;i2<xMult;i2++)
777   {
778    if(i2==i1)continue;
779    fTrack=anEvent->GetTrack(i2);
780    phi2=fTrack->Phi();
781    for(Int_t i3=0;i3<xMult;i3++)
782    {
783     if(i3==i1||i3==i2)continue;
784     fTrack=anEvent->GetTrack(i3);
785     phi3=fTrack->Phi();
786     fDirectCorrelations->Fill(5.,cos(2*n*phi1-n*(phi2+phi3)),1);        //<3>_{2n|n,n}
787     fDirectCorrelations->Fill(6.,cos(3.*n*phi1-2.*n*phi2-n*phi3),1);    //<3>_{3n|2n,n}
788     fDirectCorrelations->Fill(7.,cos(4.*n*phi1-2.*n*phi2-2.*n*phi3),1); //<3>_{4n|2n,2n}
789     fDirectCorrelations->Fill(8.,cos(4.*n*phi1-3.*n*phi2-n*phi3),1);    //<3>_{4n|3n,n}
790    }
791   }
792  }
793   
794  //<4>_{n,n|n,n}, <4>_{2n,n|2n,n}, <4>_{2n,2n|2n,2n}, <4>_{3n|n,n,n}, <4>_{3n,n|3n,n}, <4>_{3n,n|2n,2n} and <4>_{4n|2n,n,n} 
795  for(Int_t i1=0;i1<xMult;i1++)
796  {
797   fTrack=anEvent->GetTrack(i1);
798   phi1=fTrack->Phi();
799   for(Int_t i2=0;i2<xMult;i2++)
800   {
801    if(i2==i1)continue;
802    fTrack=anEvent->GetTrack(i2);
803    phi2=fTrack->Phi();
804    for(Int_t i3=0;i3<xMult;i3++)
805    {
806     if(i3==i1||i3==i2)continue;
807     fTrack=anEvent->GetTrack(i3);
808     phi3=fTrack->Phi();
809     for(Int_t i4=0;i4<xMult;i4++)
810     {
811      if(i4==i1||i4==i2||i4==i3)continue;
812      fTrack=anEvent->GetTrack(i4);
813      phi4=fTrack->Phi();
814      fDirectCorrelations->Fill(10.,cos(n*phi1+n*phi2-n*phi3-n*phi4),1);            //<4>_{n,n|n,n}
815      fDirectCorrelations->Fill(11.,cos(2.*n*phi1+n*phi2-2.*n*phi3-n*phi4),1);      //<4>_{2n,n|2n,n}
816      fDirectCorrelations->Fill(12.,cos(2.*n*phi1+2*n*phi2-2.*n*phi3-2.*n*phi4),1); //<4>_{2n,2n|2n,2n}
817      fDirectCorrelations->Fill(13.,cos(3.*n*phi1-n*phi2-n*phi3-n*phi4),1);         //<4>_{3n|n,n,n}
818      fDirectCorrelations->Fill(14.,cos(3.*n*phi1+n*phi2-3.*n*phi3-n*phi4),1);      //<4>_{3n,n|3n,n}   
819      fDirectCorrelations->Fill(15.,cos(3.*n*phi1+n*phi2-2.*n*phi3-2.*n*phi4),1);   //<4>_{3n,n|2n,2n}
820      fDirectCorrelations->Fill(16.,cos(4.*n*phi1-2.*n*phi2-n*phi3-n*phi4),1);      //<4>_{4n|2n,n,n}
821     }  
822    }
823   }
824  }
825  
826  //<5>_{2n,n,n,n,n}, //<5>_{2n,2n|2n,n,n}, <5>_{3n,n|2n,n,n} and <5>_{4n|n,n,n,n}
827  for(Int_t i1=0;i1<xMult;i1++)
828  {
829   //cout<<"i1 = "<<i1<<endl;
830   fTrack=anEvent->GetTrack(i1);
831   phi1=fTrack->Phi();
832   for(Int_t i2=0;i2<xMult;i2++)
833   {
834    if(i2==i1)continue;
835    fTrack=anEvent->GetTrack(i2);
836    phi2=fTrack->Phi();
837    for(Int_t i3=0;i3<xMult;i3++)
838    {
839     if(i3==i1||i3==i2)continue;
840     fTrack=anEvent->GetTrack(i3);
841     phi3=fTrack->Phi();
842     for(Int_t i4=0;i4<xMult;i4++)
843     {
844      if(i4==i1||i4==i2||i4==i3)continue;
845      fTrack=anEvent->GetTrack(i4);
846      phi4=fTrack->Phi();
847      for(Int_t i5=0;i5<xMult;i5++)
848      {
849       if(i5==i1||i5==i2||i5==i3||i5==i4)continue;
850       fTrack=anEvent->GetTrack(i5);
851       phi5=fTrack->Phi();
852       fDirectCorrelations->Fill(18.,cos(2.*n*phi1+n*phi2-n*phi3-n*phi4-n*phi5),1);       //<5>_{2n,n|n,n,n}
853       fDirectCorrelations->Fill(19.,cos(2.*n*phi1+2.*n*phi2-2.*n*phi3-n*phi4-n*phi5),1); //<5>_{2n,2n|2n,n,n}
854       fDirectCorrelations->Fill(20.,cos(3.*n*phi1+n*phi2-2.*n*phi3-n*phi4-n*phi5),1);    //<5>_{3n,n|2n,n,n}
855       fDirectCorrelations->Fill(21.,cos(4.*n*phi1-n*phi2-n*phi3-n*phi4-n*phi5),1);       //<5>_{4n|n,n,n,n}
856      }
857     }  
858    }
859   }
860  }
861  
862  //<6>_{n,n,n,n,n,n}, <6>_{2n,n,n|2n,n,n}, <6>_{2n,2n|n,n,n,n} and <6>_{3n,n|n,n,n,n}
863  for(Int_t i1=0;i1<xMult;i1++)
864  {
865   //cout<<"i1 = "<<i1<<endl;
866   fTrack=anEvent->GetTrack(i1);
867   phi1=fTrack->Phi();
868   for(Int_t i2=0;i2<xMult;i2++)
869   {
870    if(i2==i1)continue;
871    fTrack=anEvent->GetTrack(i2);
872    phi2=fTrack->Phi();
873    for(Int_t i3=0;i3<xMult;i3++)
874    {
875     if(i3==i1||i3==i2)continue;
876     fTrack=anEvent->GetTrack(i3);
877     phi3=fTrack->Phi();
878     for(Int_t i4=0;i4<xMult;i4++)
879     {
880      if(i4==i1||i4==i2||i4==i3)continue;
881      fTrack=anEvent->GetTrack(i4);
882      phi4=fTrack->Phi();
883      for(Int_t i5=0;i5<xMult;i5++)
884      {
885       if(i5==i1||i5==i2||i5==i3||i5==i4)continue;
886       fTrack=anEvent->GetTrack(i5);
887       phi5=fTrack->Phi();
888       for(Int_t i6=0;i6<xMult;i6++)
889       {
890        if(i6==i1||i6==i2||i6==i3||i6==i4||i6==i5)continue;
891        fTrack=anEvent->GetTrack(i6);
892        phi6=fTrack->Phi(); 
893        fDirectCorrelations->Fill(23.,cos(n*phi1+n*phi2+n*phi3-n*phi4-n*phi5-n*phi6),1);       //<6>_{n,n,n|n,n,n}
894        fDirectCorrelations->Fill(24.,cos(2.*n*phi1+n*phi2+n*phi3-2.*n*phi4-n*phi5-n*phi6),1); //<6>_{2n,n,n|2n,n,n}
895        fDirectCorrelations->Fill(25.,cos(2.*n*phi1+2.*n*phi2-n*phi3-n*phi4-n*phi5-n*phi6),1); //<6>_{2n,2n|n,n,n,n}
896        fDirectCorrelations->Fill(26.,cos(3.*n*phi1+n*phi2-n*phi3-n*phi4-n*phi5-n*phi6),1);    //<6>_{3n,n|n,n,n,n}     
897       } 
898      }
899     }  
900    }
901   }
902  }
903
904  //<7>_{2n,n,n|n,n,n,n}
905  for(Int_t i1=0;i1<xMult;i1++)
906  {
907   //cout<<"i1 = "<<i1<<endl;
908   fTrack=anEvent->GetTrack(i1);
909   phi1=fTrack->Phi();
910   for(Int_t i2=0;i2<xMult;i2++)
911   {
912    if(i2==i1)continue;
913    fTrack=anEvent->GetTrack(i2);
914    phi2=fTrack->Phi();
915    for(Int_t i3=0;i3<xMult;i3++)
916    {
917     if(i3==i1||i3==i2)continue;
918     fTrack=anEvent->GetTrack(i3);
919     phi3=fTrack->Phi();
920     for(Int_t i4=0;i4<xMult;i4++)
921     {
922      if(i4==i1||i4==i2||i4==i3)continue;
923      fTrack=anEvent->GetTrack(i4);
924      phi4=fTrack->Phi();
925      for(Int_t i5=0;i5<xMult;i5++)
926      {
927       if(i5==i1||i5==i2||i5==i3||i5==i4)continue;
928       fTrack=anEvent->GetTrack(i5);
929       phi5=fTrack->Phi();
930       for(Int_t i6=0;i6<xMult;i6++)
931       {
932        if(i6==i1||i6==i2||i6==i3||i6==i4||i6==i5)continue;
933        fTrack=anEvent->GetTrack(i6);
934        phi6=fTrack->Phi(); 
935        for(Int_t i7=0;i7<xMult;i7++)
936        {
937         if(i7==i1||i7==i2||i7==i3||i7==i4||i7==i5||i7==i6)continue;
938         fTrack=anEvent->GetTrack(i7);
939         phi7=fTrack->Phi(); 
940         fDirectCorrelations->Fill(28.,cos(2.*n*phi1+n*phi2+n*phi3-n*phi4-n*phi5-n*phi6-n*phi7),1);//<7>_{2n,n,n|n,n,n,n}
941        } 
942       } 
943      }
944     }  
945    }
946   }
947  }
948  
949  //<8>_{n,n,n,n|n,n,n,n}
950  for(Int_t i1=0;i1<xMult;i1++)
951  {
952   cout<<"i1 = "<<i1<<endl;
953   fTrack=anEvent->GetTrack(i1);
954   phi1=fTrack->Phi();
955   for(Int_t i2=0;i2<xMult;i2++)
956   {
957    if(i2==i1)continue;
958    fTrack=anEvent->GetTrack(i2);
959    phi2=fTrack->Phi();
960    for(Int_t i3=0;i3<xMult;i3++)
961    {
962     if(i3==i1||i3==i2)continue;
963     fTrack=anEvent->GetTrack(i3);
964     phi3=fTrack->Phi();
965     for(Int_t i4=0;i4<xMult;i4++)
966     {
967      if(i4==i1||i4==i2||i4==i3)continue;
968      fTrack=anEvent->GetTrack(i4);
969      phi4=fTrack->Phi();
970      for(Int_t i5=0;i5<xMult;i5++)
971      {
972       if(i5==i1||i5==i2||i5==i3||i5==i4)continue;
973       fTrack=anEvent->GetTrack(i5);
974       phi5=fTrack->Phi();
975       for(Int_t i6=0;i6<xMult;i6++)
976       {
977        if(i6==i1||i6==i2||i6==i3||i6==i4||i6==i5)continue;
978        fTrack=anEvent->GetTrack(i6);
979        phi6=fTrack->Phi(); 
980        for(Int_t i7=0;i7<xMult;i7++)
981        {
982         if(i7==i1||i7==i2||i7==i3||i7==i4||i7==i5||i7==i6)continue;
983         fTrack=anEvent->GetTrack(i7);
984         phi7=fTrack->Phi(); 
985         for(Int_t i8=0;i8<xMult;i8++)
986         {
987          if(i8==i1||i8==i2||i8==i3||i8==i4||i8==i5||i8==i6||i8==i7)continue;
988          fTrack=anEvent->GetTrack(i8);
989          phi8=fTrack->Phi();  
990          fDirectCorrelations->Fill(30.,cos(n*phi1+n*phi2+n*phi3+n*phi4-n*phi5-n*phi6-n*phi7-n*phi8),1);//<8>_{n,n,n,n|n,n,n,n}
991         } 
992        } 
993       } 
994      }
995     }  
996    }
997   }
998  }
999  
1000  // binning details of fDirectCorrelations (differential flow):
1001  //
1002  //41st bin: <2'>_{n|n}
1003  //42nd bin: <2'>_{2n|2n}
1004  //46th bin: <3'>_{2n|n,n}
1005  //47th bin: <3'>_{n,n|2n}
1006  //51st bin: <4'>_{n,n|n,n}
1007  
1008  //<2'>_{n|n}
1009  for(Int_t i1=0;i1<xMult;i1++)
1010  {
1011   fTrack=anEvent->GetTrack(i1);
1012   if(fTrack->Pt()>=0.5&&fTrack->Pt()<0.6)
1013   {
1014    phi1=fTrack->Phi();
1015    for(Int_t i2=0;i2<xMult;i2++)
1016    {
1017     if(i2==i1)continue;
1018     fTrack=anEvent->GetTrack(i2);
1019     phi2=fTrack->Phi(); 
1020     fDirectCorrelations->Fill(40.,cos(1.*n*(phi1-phi2)),1); //<2'>_{n,n}
1021     fDirectCorrelations->Fill(41.,cos(2.*n*(phi1-phi2)),1); //<2'>_{2n,2n}  
1022    }
1023   }
1024  }  
1025
1026  //<3'>_{2n|n,n}
1027  for(Int_t i1=0;i1<xMult;i1++)
1028  {
1029   fTrack=anEvent->GetTrack(i1);
1030   if(fTrack->Pt()>=0.5&&fTrack->Pt()<0.6)
1031   {
1032    phi1=fTrack->Phi();
1033    for(Int_t i2=0;i2<xMult;i2++)
1034    {
1035     if(i2==i1)continue;
1036     fTrack=anEvent->GetTrack(i2);
1037     phi2=fTrack->Phi();
1038     for(Int_t i3=0;i3<xMult;i3++)
1039     {
1040      if(i3==i1||i3==i2)continue;
1041      fTrack=anEvent->GetTrack(i3);
1042      phi3=fTrack->Phi();           
1043      fDirectCorrelations->Fill(45.,cos(n*(2.*phi1-phi2-phi3)),1); //<3'>_{2n|n,n}
1044      fDirectCorrelations->Fill(46.,cos(n*(phi1+phi2-2.*phi3)),1); //<3'>_{n,n|2n}    
1045     }
1046    }  
1047   }  
1048  }
1049   
1050  //<4'>_{n,n|n,n}
1051  for(Int_t i1=0;i1<xMult;i1++)
1052  {
1053   fTrack=anEvent->GetTrack(i1);
1054   if(fTrack->Pt()>=0.5&&fTrack->Pt()<0.6)
1055   {
1056    phi1=fTrack->Phi();
1057    for(Int_t i2=0;i2<xMult;i2++)
1058    {
1059     if(i2==i1)continue;
1060     fTrack=anEvent->GetTrack(i2);
1061     phi2=fTrack->Phi();
1062     for(Int_t i3=0;i3<xMult;i3++)
1063     {
1064      if(i3==i1||i3==i2)continue;
1065      fTrack=anEvent->GetTrack(i3);
1066      phi3=fTrack->Phi();
1067      for(Int_t i4=0;i4<xMult;i4++)
1068      {
1069       if(i4==i1||i4==i2||i4==i3)continue;
1070       fTrack=anEvent->GetTrack(i4);
1071       phi4=fTrack->Phi();
1072       fDirectCorrelations->Fill(50.,cos(n*(phi1+phi2-phi3-phi4)),1); //<4'>_{n,n|n,n}   
1073      } 
1074     }
1075    }  
1076   }  
1077  }
1078  //--------------------------------------------------------------------------------------------------------------------------------  
1079
1080
1081
1082
1083 */
1084
1085
1086
1087
1088 //}//line needed only for nested loops - end of if(nPrim>8&&nPrim<14) 
1089
1090 }//end of Make()
1091
1092 //================================================================================================================
1093
1094 void AliFlowAnalysisWithQCumulants::Finish()
1095 {
1096  //calculate the final results
1097  AliQCumulantsFunctions finalResults(fIntFlowResultsQC,fDiffFlowResults2ndOrderQC,fDiffFlowResults4thOrderQC,fCovariances,fAvMultIntFlowQC,fQvectorComponents,fQCorrelations, fQProduct,fDirectCorrelations, f2PerBin1n1n,f2PerBin2n2n,f3PerBin2n1n1n,f3PerBin1n1n2n,f4PerBin1n1n1n1n,fCommonHistsResults2nd, fCommonHistsResults4th,fCommonHistsResults6th,fCommonHistsResults8th);
1098          
1099  finalResults.Calculate();  
1100 }
1101
1102 //================================================================================================================
1103
1104 void AliFlowAnalysisWithQCumulants::WriteHistograms(TString* outputFileName)
1105 {
1106  //store the final results in output .root file
1107  TFile *output = new TFile(outputFileName->Data(),"RECREATE");
1108  output->mkdir("cobjQC","cobjQC");
1109  output->cd("cobjQC");
1110  fHistList->Write(); 
1111  delete output;
1112 }
1113
1114 //================================================================================================================
1115