1 /*************************************************************************
2 * Copyright(c) 1998-2008, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
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 **************************************************************************/
16 /**********************************
17 * flow analysis with Q-cumulants *
19 * author: Ante Bilandzic *
21 *********************************/
23 #define AliFlowAnalysisWithQCumulants_cxx
25 #include "Riostream.h"
26 #include "AliFlowCommonConstants.h"
27 #include "AliFlowCommonHist.h"
28 #include "AliFlowCommonHistResults.h"
32 #include "TParticle.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"
59 //================================================================================================================
61 ClassImp(AliFlowAnalysisWithQCumulants)
63 AliFlowAnalysisWithQCumulants::AliFlowAnalysisWithQCumulants():
66 fAvMultIntFlowQC(NULL),
67 fQvectorComponents(NULL),
68 fIntFlowResultsQC(NULL),
69 fDiffFlowResults2ndOrderQC(NULL),
70 fDiffFlowResults4thOrderQC(NULL),
74 fDirectCorrelations(NULL),
83 f4PerBin1n1n1n1n(NULL),
85 fCommonHistsResults2nd(NULL),
86 fCommonHistsResults4th(NULL),
87 fCommonHistsResults6th(NULL),
88 fCommonHistsResults8th(NULL),
89 f2pDistribution(NULL),
90 f4pDistribution(NULL),
91 f6pDistribution(NULL),
97 fHistList = new TList();
99 fnBinsPt = AliFlowCommonConstants::GetNbinsPt();
100 fPtMin = AliFlowCommonConstants::GetPtMin();
101 fPtMax = AliFlowCommonConstants::GetPtMax();
105 AliFlowAnalysisWithQCumulants::~AliFlowAnalysisWithQCumulants()
111 //================================================================================================================
113 void AliFlowAnalysisWithQCumulants::CreateOutputObjects()
115 //various output histograms
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);
128 fQvectorComponents = new TProfile("fQvectorComponents","Avarage of Q-vector components",44,0.,44.,"s");
129 fQvectorComponents->SetXTitle("");
130 fQvectorComponents->SetYTitle("");
131 //fHistList->Add(fQvectorComponents);
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);
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);
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);
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);
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");
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}");
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}");
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}");
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}");
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}");
210 (fQCorrelations->GetXaxis())->SetBinLabel(29,"<<7>>_{2n,n,n|n,n,n,n}");
212 (fQCorrelations->GetXaxis())->SetBinLabel(31,"<<8>>_{n,n,n,n|n,n,n,n}");
214 fHistList->Add(fQCorrelations);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
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);
292 //common control histograms
293 fCommonHists = new AliFlowCommonHist("AliFlowCommonHistQC");
294 fHistList->Add(fCommonHists);
296 //common histograms for final results (2nd order)
297 fCommonHistsResults2nd = new AliFlowCommonHistResults("AliFlowCommonHistResults2ndOrderQC");
298 fHistList->Add(fCommonHistsResults2nd);
300 //common histograms for final results (4th order)
301 fCommonHistsResults4th = new AliFlowCommonHistResults("AliFlowCommonHistResults4thOrderQC");
302 fHistList->Add(fCommonHistsResults4th);
304 //common histograms for final results (6th order)
305 fCommonHistsResults6th = new AliFlowCommonHistResults("AliFlowCommonHistResults6thOrderQC");
306 fHistList->Add(fCommonHistsResults6th);
308 //common histograms for final results (8th order)
309 fCommonHistsResults8th = new AliFlowCommonHistResults("AliFlowCommonHistResults8thOrderQC");
310 fHistList->Add(fCommonHistsResults8th);
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);
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);
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);
330 }//end of CreateOutputObjects()
332 //================================================================================================================
334 void AliFlowAnalysisWithQCumulants::Make(AliFlowEventSimple* anEvent)
338 //get the total multiplicity of event:
339 //Int_t nPrim = anEvent->NumberOfTracks();//line needed only for nested loops
341 //if(nPrim>8&&nPrim<12)//line needed only for nested loops
342 //{ //line needed only for nested loops
344 //fill the common control histograms:
345 fCommonHists->FillControlHistograms(anEvent);
347 //get the selected multiplicity (i.e. number of particles used for int. flow):
348 //Int_t nEventNSelTracksIntFlow = anEvent->GetEventNSelTracksIntFlow();
350 Int_t n=2; //int flow harmonic (to be improved)
352 //---------------------------------------------------------------------------------------------------------
353 //Q-vectors of an event evaluated in harmonics n, 2n, 3n and 4n:
354 AliFlowVector xQvector1n, xQvector2n, xQvector3n, xQvector4n;
356 xQvector1n.Set(0.,0.);
357 xQvector1n.SetMult(0);
358 xQvector1n=anEvent->GetQ(1*n);
360 xQvector2n.Set(0.,0.);
361 xQvector2n.SetMult(0);
362 xQvector2n=anEvent->GetQ(2*n);
364 xQvector3n.Set(0.,0.);
365 xQvector3n.SetMult(0);
366 xQvector3n=anEvent->GetQ(3*n);
368 xQvector4n.Set(0.,0.);
369 xQvector4n.SetMult(0);
370 xQvector4n=anEvent->GetQ(4*n);
371 //---------------------------------------------------------------------------------------------------------
373 //multiplicity (to be improved, because I already have nEventNSelTracksIntFlow and nPrim)
374 Double_t xMult = xQvector1n.GetMult();
376 fAvMultIntFlowQC->Fill(0.,xMult,1.);
378 //---------------------------------------------------------------------------------------------------------
380 // *******************
381 // **** Q-vectors ****
382 // *******************
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 //---------------------------------------------------------------------------------------------------------
421 //---------------------------------------------------------------------------------------------------------
423 // **************************************
424 // **** multi-particle correlations: ****
425 // **************************************
427 // Remark 1: multi-particle correlations calculated with Q-vectors are stored in fQCorrelations.
428 // Remark 2: binning of fQCorrelations is organized as follows:
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
463 // binning of fQProduct (all correlations are evaluated in harmonic n):
472 Double_t two1n1n=0., two2n2n=0., two3n3n=0., two4n4n=0.;
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))>
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.));
485 f2pDistribution->Fill(two1n1n,xMult*(xMult-1.));
489 Double_t three2n1n1n=0., three3n2n1n=0., three4n2n2n=0., three4n3n1n=0.;
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))>
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.));
504 Double_t four1n1n1n1n=0., four2n2n2n2n=0., four2n1n2n1n=0., four3n1n1n1n=0., four4n2n1n1n=0., four3n1n2n2n=0., four3n1n3n1n=0.;
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}
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.));
524 f4pDistribution->Fill(four1n1n1n1n,xMult*(xMult-1.)*(xMult-2.)*(xMult-3.));
526 fQProduct->Fill(0.,two1n1n*four1n1n1n1n,xMult*(xMult-1.)*xMult*(xMult-1.)*(xMult-2.)*(xMult-3.));
530 Double_t five2n1n1n1n1n=0., five2n2n2n1n1n=0., five3n1n2n1n1n=0., five4n1n1n1n1n=0.;
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}]
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}]
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!
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}]
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!
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}]
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!
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!
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.));
556 Double_t six1n1n1n1n1n1n=0., six2n2n1n1n1n1n=0., six3n1n1n1n1n1n=0., six2n1n1n2n1n1n=0.;
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}
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}
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}
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}
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.));
572 f6pDistribution->Fill(six1n1n1n1n1n1n,xMult*(xMult-1.)*(xMult-2.)*(xMult-3.)*(xMult-4.)*(xMult-5.));
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.));
579 Double_t seven2n1n1n1n1n1n1n=0.;
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.));
584 fQCorrelations->Fill(28.,seven2n1n1n1n1n1n1n,xMult*(xMult-1.)*(xMult-2.)*(xMult-3.)*(xMult-4.)*(xMult-5.)*(xMult-6.));
588 Double_t eight1n1n1n1n1n1n1n1n=0.;
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.));
593 fQCorrelations->Fill(30.,eight1n1n1n1n1n1n1n1n,xMult*(xMult-1.)*(xMult-2.)*(xMult-3.)*(xMult-4.)*(xMult-5.)*(xMult-6.)*(xMult-7.));
595 //---------------------------------------------------------------------------------------------------------
598 //---------------------------------------------------------------------------------------------------------
601 Double_t xQx = xQvector1n.X();
602 Double_t xQy = xQvector1n.Y();
603 Double_t xQ2x = xQvector2n.X();
604 Double_t xQ2y = xQvector2n.Y();
606 Double_t qx=0.,qy=0.,q2x=0.,q2y=0.,m=0.;//add comments for these variables (deleteMe)
608 for(Int_t i=0;i<xMult;i++) //check if nPrim == M
610 fTrack=anEvent->GetTrack(i);
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.);
620 Double_t twoDiff1n1n=0.,twoDiff2n2n=0.,threeDiff2n1n1n=0.,threeDiff1n1n2n=0.,fourDiff1n1n1n1n=0.;
622 for(Int_t bin=1;bin<(fnBinsPt+1);bin++)//loop over pt-bins
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);
632 twoDiff1n1n = (qx*xQx+qy*xQy-m)/(m*(xMult-1.));
633 f2PerBin1n1n->Fill((bin-1)*0.1,twoDiff1n1n,m*(xMult-1.));//<2'>_{n|n}
635 twoDiff2n2n = (q2x*xQ2x+q2y*xQ2y-m)/(m*(xMult-1.));
636 f2PerBin2n2n->Fill((bin-1)*0.1,twoDiff2n2n,m*(xMult-1.));//<2'>_{2n|2n}
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}]
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}]
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}]
660 //---------------------------------------------------------------------------------------------------------
709 //--------------------------------------------------------------------------------------------------------------------------------
711 // **********************
712 // **** NESTED LOOPS ****
713 // **********************
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)
718 // binning details of fDirectCorrelations (integrated flow):
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
752 Double_t phi1=0., phi2=0., phi3=0., phi4=0., phi5=0., phi6=0., phi7=0., phi8=0.;
754 //<2>_{k*n|k*n} (k=1,2,3 and 4)
755 for(Int_t i1=0;i1<xMult;i1++)
757 fTrack=anEvent->GetTrack(i1);
759 for(Int_t i2=0;i2<xMult;i2++)
762 fTrack=anEvent->GetTrack(i2);
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}
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++)
774 fTrack=anEvent->GetTrack(i1);
776 for(Int_t i2=0;i2<xMult;i2++)
779 fTrack=anEvent->GetTrack(i2);
781 for(Int_t i3=0;i3<xMult;i3++)
783 if(i3==i1||i3==i2)continue;
784 fTrack=anEvent->GetTrack(i3);
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}
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++)
797 fTrack=anEvent->GetTrack(i1);
799 for(Int_t i2=0;i2<xMult;i2++)
802 fTrack=anEvent->GetTrack(i2);
804 for(Int_t i3=0;i3<xMult;i3++)
806 if(i3==i1||i3==i2)continue;
807 fTrack=anEvent->GetTrack(i3);
809 for(Int_t i4=0;i4<xMult;i4++)
811 if(i4==i1||i4==i2||i4==i3)continue;
812 fTrack=anEvent->GetTrack(i4);
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}
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++)
829 //cout<<"i1 = "<<i1<<endl;
830 fTrack=anEvent->GetTrack(i1);
832 for(Int_t i2=0;i2<xMult;i2++)
835 fTrack=anEvent->GetTrack(i2);
837 for(Int_t i3=0;i3<xMult;i3++)
839 if(i3==i1||i3==i2)continue;
840 fTrack=anEvent->GetTrack(i3);
842 for(Int_t i4=0;i4<xMult;i4++)
844 if(i4==i1||i4==i2||i4==i3)continue;
845 fTrack=anEvent->GetTrack(i4);
847 for(Int_t i5=0;i5<xMult;i5++)
849 if(i5==i1||i5==i2||i5==i3||i5==i4)continue;
850 fTrack=anEvent->GetTrack(i5);
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}
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++)
865 //cout<<"i1 = "<<i1<<endl;
866 fTrack=anEvent->GetTrack(i1);
868 for(Int_t i2=0;i2<xMult;i2++)
871 fTrack=anEvent->GetTrack(i2);
873 for(Int_t i3=0;i3<xMult;i3++)
875 if(i3==i1||i3==i2)continue;
876 fTrack=anEvent->GetTrack(i3);
878 for(Int_t i4=0;i4<xMult;i4++)
880 if(i4==i1||i4==i2||i4==i3)continue;
881 fTrack=anEvent->GetTrack(i4);
883 for(Int_t i5=0;i5<xMult;i5++)
885 if(i5==i1||i5==i2||i5==i3||i5==i4)continue;
886 fTrack=anEvent->GetTrack(i5);
888 for(Int_t i6=0;i6<xMult;i6++)
890 if(i6==i1||i6==i2||i6==i3||i6==i4||i6==i5)continue;
891 fTrack=anEvent->GetTrack(i6);
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}
904 //<7>_{2n,n,n|n,n,n,n}
905 for(Int_t i1=0;i1<xMult;i1++)
907 //cout<<"i1 = "<<i1<<endl;
908 fTrack=anEvent->GetTrack(i1);
910 for(Int_t i2=0;i2<xMult;i2++)
913 fTrack=anEvent->GetTrack(i2);
915 for(Int_t i3=0;i3<xMult;i3++)
917 if(i3==i1||i3==i2)continue;
918 fTrack=anEvent->GetTrack(i3);
920 for(Int_t i4=0;i4<xMult;i4++)
922 if(i4==i1||i4==i2||i4==i3)continue;
923 fTrack=anEvent->GetTrack(i4);
925 for(Int_t i5=0;i5<xMult;i5++)
927 if(i5==i1||i5==i2||i5==i3||i5==i4)continue;
928 fTrack=anEvent->GetTrack(i5);
930 for(Int_t i6=0;i6<xMult;i6++)
932 if(i6==i1||i6==i2||i6==i3||i6==i4||i6==i5)continue;
933 fTrack=anEvent->GetTrack(i6);
935 for(Int_t i7=0;i7<xMult;i7++)
937 if(i7==i1||i7==i2||i7==i3||i7==i4||i7==i5||i7==i6)continue;
938 fTrack=anEvent->GetTrack(i7);
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}
949 //<8>_{n,n,n,n|n,n,n,n}
950 for(Int_t i1=0;i1<xMult;i1++)
952 cout<<"i1 = "<<i1<<endl;
953 fTrack=anEvent->GetTrack(i1);
955 for(Int_t i2=0;i2<xMult;i2++)
958 fTrack=anEvent->GetTrack(i2);
960 for(Int_t i3=0;i3<xMult;i3++)
962 if(i3==i1||i3==i2)continue;
963 fTrack=anEvent->GetTrack(i3);
965 for(Int_t i4=0;i4<xMult;i4++)
967 if(i4==i1||i4==i2||i4==i3)continue;
968 fTrack=anEvent->GetTrack(i4);
970 for(Int_t i5=0;i5<xMult;i5++)
972 if(i5==i1||i5==i2||i5==i3||i5==i4)continue;
973 fTrack=anEvent->GetTrack(i5);
975 for(Int_t i6=0;i6<xMult;i6++)
977 if(i6==i1||i6==i2||i6==i3||i6==i4||i6==i5)continue;
978 fTrack=anEvent->GetTrack(i6);
980 for(Int_t i7=0;i7<xMult;i7++)
982 if(i7==i1||i7==i2||i7==i3||i7==i4||i7==i5||i7==i6)continue;
983 fTrack=anEvent->GetTrack(i7);
985 for(Int_t i8=0;i8<xMult;i8++)
987 if(i8==i1||i8==i2||i8==i3||i8==i4||i8==i5||i8==i6||i8==i7)continue;
988 fTrack=anEvent->GetTrack(i8);
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}
1000 // binning details of fDirectCorrelations (differential flow):
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}
1009 for(Int_t i1=0;i1<xMult;i1++)
1011 fTrack=anEvent->GetTrack(i1);
1012 if(fTrack->Pt()>=0.5&&fTrack->Pt()<0.6)
1015 for(Int_t i2=0;i2<xMult;i2++)
1018 fTrack=anEvent->GetTrack(i2);
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}
1027 for(Int_t i1=0;i1<xMult;i1++)
1029 fTrack=anEvent->GetTrack(i1);
1030 if(fTrack->Pt()>=0.5&&fTrack->Pt()<0.6)
1033 for(Int_t i2=0;i2<xMult;i2++)
1036 fTrack=anEvent->GetTrack(i2);
1038 for(Int_t i3=0;i3<xMult;i3++)
1040 if(i3==i1||i3==i2)continue;
1041 fTrack=anEvent->GetTrack(i3);
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}
1051 for(Int_t i1=0;i1<xMult;i1++)
1053 fTrack=anEvent->GetTrack(i1);
1054 if(fTrack->Pt()>=0.5&&fTrack->Pt()<0.6)
1057 for(Int_t i2=0;i2<xMult;i2++)
1060 fTrack=anEvent->GetTrack(i2);
1062 for(Int_t i3=0;i3<xMult;i3++)
1064 if(i3==i1||i3==i2)continue;
1065 fTrack=anEvent->GetTrack(i3);
1067 for(Int_t i4=0;i4<xMult;i4++)
1069 if(i4==i1||i4==i2||i4==i3)continue;
1070 fTrack=anEvent->GetTrack(i4);
1072 fDirectCorrelations->Fill(50.,cos(n*(phi1+phi2-phi3-phi4)),1); //<4'>_{n,n|n,n}
1078 //--------------------------------------------------------------------------------------------------------------------------------
1088 //}//line needed only for nested loops - end of if(nPrim>8&&nPrim<14)
1092 //================================================================================================================
1094 void AliFlowAnalysisWithQCumulants::Finish()
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);
1099 finalResults.Calculate();
1102 //================================================================================================================
1104 void AliFlowAnalysisWithQCumulants::WriteHistograms(TString* outputFileName)
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");
1114 //================================================================================================================