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"
31 #include "TList.h" //NEW
32 #include "TParticle.h"
35 #include "TProfile2D.h"
36 #include "TProfile3D.h"
37 #include "AliFlowEventSimple.h"
38 #include "AliFlowTrackSimple.h"
39 #include "AliFlowAnalysisWithQCumulants.h"
57 //================================================================================================================
59 ClassImp(AliFlowAnalysisWithQCumulants)
61 AliFlowAnalysisWithQCumulants::AliFlowAnalysisWithQCumulants():
65 fQvectorComponents(NULL),
66 fIntFlowResults(NULL),
67 fDiffFlowResults2ndOrder(NULL),
68 fDiffFlowResults4thOrder(NULL),
71 fDirectCorrelations(NULL),
83 fQCorrelationsPerBin(NULL),
88 fHistList = new TList();
91 AliFlowAnalysisWithQCumulants::~AliFlowAnalysisWithQCumulants()
97 //================================================================================================================
99 void AliFlowAnalysisWithQCumulants::CreateOutputObjects()
101 //various output histograms
103 //avarage multiplicity
104 fAvMultIntFlow = new TProfile("fAvMultIntFlow","Avarage multiplicity of selected particles used for int. flow",1,0,1,0,100000,"s");
105 fAvMultIntFlow->SetXTitle("");
106 fAvMultIntFlow->SetYTitle("<multiplicity>");
107 fHistList->Add(fAvMultIntFlow);
110 fQvectorComponents = new TProfile("fQvectorComponents","Avarage of Q-vector components",44,0.,44.,"s");
111 fQvectorComponents->SetXTitle("");
112 fQvectorComponents->SetYTitle("");
113 //fHistList->Add(fQvectorComponents);
115 //final results for integrated flow from Q-cumulants
116 fIntFlowResults = new TH1D("fIntFlowResults","Integrated Flow From Q-cumulants",4,0,4);
117 fIntFlowResults->SetXTitle("");
118 fIntFlowResults->SetYTitle("Integrated Flow [%]");
119 fHistList->Add(fIntFlowResults);
121 //final results for differential flow from 2nd order Q-cumulant
122 fDiffFlowResults2ndOrder = new TH1D("fDiffFlowResults2ndOrder","Differential Flow From 2nd Order Q-cumulant",10000,0,1000);
123 fDiffFlowResults2ndOrder->SetXTitle("Pt [GeV]");
124 fDiffFlowResults2ndOrder->SetYTitle("Differential Flow [%]");
125 fHistList->Add(fDiffFlowResults2ndOrder);
127 //final results for differential flow from 4th order Q-cumulant
128 fDiffFlowResults4thOrder = new TH1D("fDiffFlowResults4thOrder","Differential Flow From 4th Order Q-cumulant",10000,0,1000);
129 fDiffFlowResults4thOrder->SetXTitle("Pt [GeV]");
130 fDiffFlowResults4thOrder->SetYTitle("Differential Flow [%]");
131 fHistList->Add(fDiffFlowResults4thOrder);
133 //multi-particle correlations calculated from Q-vectors
134 fQCorrelations = new TProfile("fQCorrelations","multi-particle correlations from Q-vectors",35,0,35,"s");
135 fQCorrelations->SetXTitle("");
136 fQCorrelations->SetYTitle("correlations");
137 fHistList->Add(fQCorrelations);
139 //covariance of multi-particle correlations
140 fQCovariance = new TProfile("fQCovariance","covariance of multi-particle correlations",3,0,3,"s");
141 fQCovariance->SetXTitle("");
142 fQCovariance->SetYTitle("covariance");
143 fHistList->Add(fQCovariance);
145 //multi-particle correlations calculated with nested loops (0..40 integrated flow; 40..80 differential flow)
146 fDirectCorrelations = new TProfile("fDirectCorrelations","multi-particle correlations with nested loops",80,0,80,"s");
147 fDirectCorrelations->SetXTitle("");
148 fDirectCorrelations->SetYTitle("correlations");
149 fHistList->Add(fDirectCorrelations);
152 fReD = new TProfile("fReD","Re[D]",10000,0.,1000.,"s");
153 fReD->SetXTitle("Pt");
154 fReD->SetYTitle("Re[D]");
155 //fHistList->Add(fReD);
158 fImD = new TProfile("fImD","Im[D]",10000,0.,1000.,"s");
159 fImD->SetXTitle("Pt");
160 fImD->SetYTitle("Im[D]");
161 //fHistList->Add(fImD);
164 fReq1n = new TProfile("fReq1n","Re[q_n]",10000,0.,1000.,"s");
165 fReq1n->SetXTitle("Pt");
166 fReq1n->SetYTitle("Re[q_n]");
167 fHistList->Add(fReq1n);
170 fImq1n = new TProfile("fImq1n","Im[q_n]",10000,0.,1000.,"s");
171 fImq1n->SetXTitle("Pt");
172 fImq1n->SetYTitle("Im[q_n]");
173 fHistList->Add(fImq1n);
176 fReq2n = new TProfile("fReq2n","Re[q_2n]",10000,0.,1000.,"s");
177 fReq2n->SetXTitle("Pt");
178 fReq2n->SetYTitle("Im[D]");
179 fHistList->Add(fReq2n);
182 fImq2n = new TProfile("fImq2n","Im[q_2n]",10000,0.,1000.,"s");
183 fImq2n->SetXTitle("Pt");
184 fImq2n->SetYTitle("Im[q_2n]");
185 fHistList->Add(fImq2n);
188 f2_1n1n = new TProfile("f2_1n1n","<2'>_{n|n}",10000,0.,1000.,"s");
189 f2_1n1n->SetXTitle("Pt");
190 f2_1n1n->SetYTitle("<2'>_{n|n}");
191 fHistList->Add(f2_1n1n);
194 f2_2n2n = new TProfile("f2_2n2n","<2'>_{2n|2n}",10000,0.,1000.,"s");
195 f2_2n2n->SetXTitle("Pt");
196 f2_2n2n->SetYTitle("<2'>_{2n|2n}");
197 fHistList->Add(f2_2n2n);
200 f3_2n1n1n = new TProfile("f3_2n1n1n","<3'>_{2n|n,n}",10000,0.,1000.,"s");
201 f3_2n1n1n->SetXTitle("Pt");
202 f3_2n1n1n->SetYTitle("<3'>_{2n|n,n}");
203 fHistList->Add(f3_2n1n1n);
206 f3_1n1n2n = new TProfile("f3_1n1n2n","<3'>_{n,n|2n}",10000,0.,1000.,"s");
207 f3_1n1n2n->SetXTitle("Pt");
208 f3_1n1n2n->SetYTitle("<3'>_{n,n|2n}");
209 fHistList->Add(f3_1n1n2n);
212 f4_1n1n1n1n = new TProfile("f4_1n1n1n1n","<4'>_{n,n|n,n}",10000,0.,1000.,"s");
213 f4_1n1n1n1n->SetXTitle("Pt");
214 f4_1n1n1n1n->SetYTitle("<4'>_{n,n|n,n}");
215 fHistList->Add(f4_1n1n1n1n);
217 //multi-particle correlations calculated from Q-vectors for each pt bin
218 fQCorrelationsPerBin = new TProfile("fQCorrelationsPerBin","multi-particle correlations from Q-vectors per bin",10000,0,1000.,"s");
219 fQCorrelationsPerBin->SetXTitle("");
220 fQCorrelationsPerBin->SetYTitle("correlations");
221 //fHistList->Add(fQCorrelationsPerBin);
223 //common control histograms
224 fCommonHists = new AliFlowCommonHist("QCumulants");
225 fHistList->Add(fCommonHists->GetHistList());
227 }//end of CreateOutputObjects()
229 //================================================================================================================
231 void AliFlowAnalysisWithQCumulants::Make(AliFlowEventSimple* anEvent)
235 //get the total multiplicity of event:
236 //Int_t nPrim = anEvent->NumberOfTracks();
240 //if(nPrim>8&&nPrim<24)
243 //fill the common control histograms:
244 fCommonHists->FillControlHistograms(anEvent);
246 //get the selected multiplicity (i.e. number of particles used for int. flow):
247 //Int_t nEventNSelTracksIntFlow = anEvent->GetEventNSelTracksIntFlow();
249 Int_t n=2; //int flow harmonic (to be improved)
251 //---------------------------------------------------------------------------------------------------------
252 //Q-vectors of an event evaluated in harmonics n, 2n, 3n and 4n:
253 AliFlowVector Qvector1n, Qvector2n, Qvector3n, Qvector4n;
255 Qvector1n.Set(0.,0.);
256 Qvector1n.SetMult(0);
257 Qvector1n=anEvent->GetQ(1*n);
259 Qvector2n.Set(0.,0.);
260 Qvector2n.SetMult(0);
261 Qvector2n=anEvent->GetQ(2*n);
263 Qvector3n.Set(0.,0.);
264 Qvector3n.SetMult(0);
265 Qvector3n=anEvent->GetQ(3*n);
267 Qvector4n.Set(0.,0.);
268 Qvector4n.SetMult(0);
269 Qvector4n=anEvent->GetQ(4*n);
270 //---------------------------------------------------------------------------------------------------------
272 //multiplicity (to be improved, because I already have nEventNSelTracksIntFlow and nPrim)
273 Double_t M = Qvector1n.GetMult();
275 fAvMultIntFlow->Fill(0.,M,1.);
277 //---------------------------------------------------------------------------------------------------------
281 Double_t ReQ2nQ1nstarQ1nstar = pow(Qvector1n.X(),2.)*Qvector2n.X()+2.*Qvector1n.X()*Qvector1n.Y()*Qvector2n.Y()-pow(Qvector1n.Y(),2.)*Qvector2n.X();
282 //Double_t ImQ2nQ1nstarQ1nstar = calculate and implement this (deleteMe)
283 Double_t ReQ4nQ2nstarQ2nstar = pow(Qvector2n.X(),2.)*Qvector4n.X()+2.*Qvector2n.X()*Qvector2n.Y()*Qvector4n.Y()-pow(Qvector2n.Y(),2.)*Qvector4n.X();
284 //Double_t ImQ4nQ2nstarQ2nstar = calculate and implement this (deleteMe)
285 Double_t ReQ4nQ3nstarQ1nstar = Qvector4n.X()*(Qvector3n.X()*Qvector1n.X()-Qvector3n.Y()*Qvector1n.Y())+Qvector4n.Y()*(Qvector3n.X()*Qvector1n.Y()+Qvector3n.Y()*Qvector1n.X());
286 //Double_t ImQ4nQ3nstarQ1nstar = calculate and implement this (deleteMe)
287 Double_t ReQ3nQ2nstarQ1nstar = Qvector3n.X()*Qvector2n.X()*Qvector1n.X()-Qvector3n.X()*Qvector2n.Y()*Qvector1n.Y()+Qvector3n.Y()*Qvector2n.X()*Qvector1n.Y()+Qvector3n.Y()*Qvector2n.Y()*Qvector1n.X(); //Re<Q_{3n} Q_{2n}^* Q_{n}^*>
288 //Double_t ImQ3nQ2nstarQ1nstar; //calculate and implement this (deleteMe)
289 Double_t ReQ3nQ1nstarQ1nstarQ1nstar = Qvector3n.X()*pow(Qvector1n.X(),3)-3.*Qvector1n.X()*Qvector3n.X()*pow(Qvector1n.Y(),2)+3.*Qvector1n.Y()*Qvector3n.Y()*pow(Qvector1n.X(),2)-Qvector3n.Y()*pow(Qvector1n.Y(),3); //Re<Q_{3n} Q_{n}^* Q_{n}^* Q_{n}^*>
290 //Double_t ImQ3nQ1nstarQ1nstarQ1nstar; //calculate and implement this (deleteMe)
291 Double_t Q2nQ1nQ2nstarQ1nstar = pow(Qvector2n.Mod()*Qvector1n.Mod(),2); //<|Q_{2n}|^2 |Q_{n}|^2>
292 Double_t ReQ4nQ2nstarQ1nstarQ1nstar = (Qvector4n.X()*Qvector2n.X()+Qvector4n.Y()*Qvector2n.Y())*(pow(Qvector1n.X(),2)-pow(Qvector1n.Y(),2))+2.*Qvector1n.X()*Qvector1n.Y()*(Qvector4n.Y()*Qvector2n.X()-Qvector4n.X()*Qvector2n.Y()); //Re<Q_{4n} Q_{2n}^* Q_{n}^* Q_{n}^*>
293 //Double_t ImQ4nQ2nstarQ1nstarQ1nstar; //calculate and implement this (deleteMe)
294 Double_t ReQ2nQ1nQ1nstarQ1nstarQ1nstar = (Qvector2n.X()*Qvector1n.X()-Qvector2n.Y()*Qvector1n.Y())*(pow(Qvector1n.X(),3)-3.*Qvector1n.X()*pow(Qvector1n.Y(),2))+(Qvector2n.X()*Qvector1n.Y()+Qvector1n.X()*Qvector2n.Y())*(3.*Qvector1n.Y()*pow(Qvector1n.X(),2)-pow(Qvector1n.Y(),3));
295 //Double_t ImQ2nQ1nQ1nstarQ1nstarQ1nstar; //calculate and implement this (deleteMe)
296 //---------------------------------------------------------------------------------------------------------
298 //---------------------------------------------------------------------------------------------------------
299 //********************************
300 //* multi-particle correlations: *
301 //********************************
303 // binning of fQCorrelations:
304 // 1st bin: <2>_{n|n} = two_1n1n
305 // 2nd bin: <2>_{2n|2n} = two_2n2n
306 // 3rd bin: <2>_{3n|3n} = two_3n3n
307 // 4th bin: <2>_{4n|4n} = two_4n4n
308 // 6th bin: <3>_{2n|n,n} = three_2n1n1n
309 // 7th bin: <3>_{3n|2n,n} = three_3n2n1n
310 // 8th bin: <3>_{4n|2n,2n} = three_4n2n2n
311 // 9th bin: <3>_{4n|3n,n} = three_4n3n1n
312 //11th bin: <4>_{n,n|n,n} = four_1n1n1n1n
313 //12th bin: <4>_{2n,n|2n,n} = four_2n1n2n1n
314 //13th bin: <4>_{3n|n,n,n} = four_3n1n1n1n
315 //14th bin: <4>_{4n|2n,n,n} = four_4n2n1n1n
316 //16th bin: <5>_{2n|n,n,n,n} = five_2n1n1n1n1n
317 //21th bin: <6>_{n,n,n|n,n,n} = six_1n1n1n1n1n1n
319 // binning of fQCovariance:
320 // 1st bin: <2>_{n|n}*<4>_{n,n|n,n}
321 // 2nd bin: <2>_{n|n}*<6>_{n,n,n|n,n,n}
322 // 3rd bin: <4>_{n,n|n,n}*<6>_{n,n,n|n,n,n}
326 Double_t two_1n1n=0., two_2n2n=0., two_3n3n=0., two_4n4n=0.;
329 two_1n1n = (pow(Qvector1n.Mod(),2.)-M)/(M*(M-1.)); //<2>_{n|n} = <cos(n*(phi1-phi2))>
330 two_2n2n = (pow(Qvector2n.Mod(),2.)-M)/(M*(M-1.)); //<2>_{2n|2n} = <cos(2n*(phi1-phi2))>
331 two_3n3n = (pow(Qvector3n.Mod(),2.)-M)/(M*(M-1.)); //<2>_{3n|3n} = <cos(3n*(phi1-phi2))>
332 two_4n4n = (pow(Qvector4n.Mod(),2.)-M)/(M*(M-1.)); //<2>_{4n|4n} = <cos(4n*(phi1-phi2))>
334 fQCorrelations->Fill(0.,two_1n1n,M*(M-1.));
335 fQCorrelations->Fill(1.,two_2n2n,M*(M-1.));
336 fQCorrelations->Fill(2.,two_3n3n,M*(M-1.));
337 fQCorrelations->Fill(3.,two_4n4n,M*(M-1.));
341 Double_t three_2n1n1n=0., three_3n2n1n=0., three_4n2n2n=0., three_4n3n1n=0.;
344 three_2n1n1n = (ReQ2nQ1nstarQ1nstar-2.*pow(Qvector1n.Mod(),2.)-pow(Qvector2n.Mod(),2.)+2.*M)/(M*(M-1.)*(M-2.)); //Re[<3>_{2n|n,n}] = Re[<3>_{n,n|2n}] = <cos(n*(2.*phi1-phi2-phi3))>
345 three_3n2n1n = (ReQ3nQ2nstarQ1nstar-pow(Qvector3n.Mod(),2.)-pow(Qvector2n.Mod(),2.)-pow(Qvector1n.Mod(),2.)+2.*M)/(M*(M-1.)*(M-2.)); //Re[<3>_{3n|2n,n}] = Re[<3>_{2n,n|3n}] = <cos(n*(3.*phi1-2.*phi2-phi3))>
346 three_4n2n2n = (ReQ4nQ2nstarQ2nstar-2.*pow(Qvector2n.Mod(),2.)-pow(Qvector4n.Mod(),2.)+2.*M)/(M*(M-1.)*(M-2.)); //Re[<3>_{4n|2n,2n}] = Re[<3>_{2n,2n|4n}] = <cos(n*(4.*phi1-2.*phi2-2.*phi3))>
347 three_4n3n1n = (ReQ4nQ3nstarQ1nstar-pow(Qvector4n.Mod(),2.)-pow(Qvector3n.Mod(),2.)-pow(Qvector1n.Mod(),2.)+2.*M)/(M*(M-1.)*(M-2.)); //Re[<3>_{4n|3n,n}] = Re[<3>_{3n,n|4n}] = <cos(n*(4.*phi1-3.*phi2-phi3))>
349 fQCorrelations->Fill(5.,three_2n1n1n,M*(M-1.)*(M-2.));
350 fQCorrelations->Fill(6.,three_3n2n1n,M*(M-1.)*(M-2.));
351 fQCorrelations->Fill(7.,three_4n2n2n,M*(M-1.)*(M-2.));
352 fQCorrelations->Fill(8.,three_4n3n1n,M*(M-1.)*(M-2.));
356 Double_t four_1n1n1n1n=0., four_2n1n2n1n=0., four_3n1n1n1n=0., four_4n2n1n1n=0.;
359 four_1n1n1n1n = (2.*M*(M-3.)+pow(Qvector1n.Mod(),4.)-4.*(M-2.)*pow(Qvector1n.Mod(),2.)-2.*ReQ2nQ1nstarQ1nstar+pow(Qvector2n.Mod(),2.))/(M*(M-1)*(M-2.)*(M-3.)); //<4>_{n,n|n,n}
360 four_2n1n2n1n = (Q2nQ1nQ2nstarQ1nstar-2.*ReQ3nQ2nstarQ1nstar-2.*ReQ2nQ1nstarQ1nstar)/(M*(M-1.)*(M-2.)*(M-3.))-((M-5.)*pow(Qvector1n.Mod(),2.)+(M-4.)*pow(Qvector2n.Mod(),2.)-pow(Qvector3n.Mod(),2.))/(M*(M-1.)*(M-2.)*(M-3.))+(M-6.)/((M-1.)*(M-2.)*(M-3.)); //Re[<4>_{2n,n|2n,n}]
361 four_3n1n1n1n = (ReQ3nQ1nstarQ1nstarQ1nstar-3.*ReQ3nQ2nstarQ1nstar-3.*ReQ2nQ1nstarQ1nstar)/(M*(M-1.)*(M-2.)*(M-3.))+(2.*pow(Qvector3n.Mod(),2.)+3.*pow(Qvector2n.Mod(),2.)+6.*pow(Qvector1n.Mod(),2.)-6.*M)/(M*(M-1.)*(M-2.)*(M-3.)); //Re[<4>_{3n|n,n,n}]
362 four_4n2n1n1n = (ReQ4nQ2nstarQ1nstarQ1nstar-M*(M-1.)*(M-2.)*(2.*three_3n2n1n+2.*three_4n3n1n+three_4n2n2n+three_2n1n1n)-M*(M-1.)*(2.*two_1n1n+2.*two_2n2n+2*two_3n3n+two_4n4n)-M)/(M*(M-1.)*(M-2.)*(M-3.)); //Re[<4>_{4n|2n,n,n}]
364 fQCorrelations->Fill(10.,four_1n1n1n1n,M*(M-1.)*(M-2.)*(M-3.));
365 fQCorrelations->Fill(11.,four_2n1n2n1n,M*(M-1.)*(M-2.)*(M-3.));
366 fQCorrelations->Fill(12.,four_3n1n1n1n,M*(M-1.)*(M-2.)*(M-3.));
367 fQCorrelations->Fill(13.,four_4n2n1n1n,M*(M-1.)*(M-2.)*(M-3.));
369 fQCovariance->Fill(0.,two_1n1n*four_1n1n1n1n,M*(M-1.)*M*(M-1.)*(M-2.)*(M-3.));
375 //temporarily, doesn't work with above scoping
376 //Double_t five_2n1n1n1n1n = (ReQ2nQ1nQ1nstarQ1nstarQ1nstar-M*(M-1.)*(M-2.)*(M-3.)*(four_3n1n1n1n+3.*four_1n1n1n1n+3.*four_2n1n2n1n)-M*(M-1.)*(M-2.)*(3.*M*three_2n1n1n+4.*three_3n2n1n)-M*(M-1.)*((9.*M-11.)*two_1n1n+(3.*M-2.)*two_2n2n+two_3n3n)-M*(3.*M-2.))/(M*(M-1.)*(M-2.)*(M-3.)*(M-4.)); //Re[<5>_{2n,n|n,n,n}]
378 //fQCorrelations->Fill(15.,five_2n1n1n1n1n,M*(M-1.)*(M-2.)*(M-3.)*(M-4.));
384 Double_t six_1n1n1n1n1n1n = (pow(Qvector1n.Mod(),6.)+9.*Q2nQ1nQ2nstarQ1nstar-6.*ReQ2nQ1nQ1nstarQ1nstarQ1nstar)/(M*(M-1)*(M-2)*(M-3)*(M-4)*(M-5)) + 4.*(ReQ3nQ1nstarQ1nstarQ1nstar-3.*ReQ3nQ2nstarQ1nstar)/(M*(M-1)*(M-2)*(M-3)*(M-4)*(M-5)) + 2.*(9.*(M-4.)*ReQ2nQ1nstarQ1nstar+2.*pow(Qvector3n.Mod(),2.))/(M*(M-1)*(M-2)*(M-3)*(M-4)*(M-5)) - 9.*(pow(Qvector1n.Mod(),4.)+pow(Qvector2n.Mod(),2.))/(M*(M-1)*(M-2)*(M-3)*(M-5)) + (18.*pow(Qvector1n.Mod(),2.))/(M*(M-1)*(M-3)*(M-4)) - (6.)/((M-1)*(M-2)*(M-3)); //<6>_{n,n,n|n,n,n}
386 fQCorrelations->Fill(20.,six_1n1n1n1n1n1n,M*(M-1.)*(M-2.)*(M-3.)*(M-4.)*(M-5.));
388 fQCovariance->Fill(1.,two_1n1n*six_1n1n1n1n1n1n,M*(M-1.)*M*(M-1.)*(M-2.)*(M-3.)*(M-4.)*(M-5.));
389 fQCovariance->Fill(2.,four_1n1n1n1n*six_1n1n1n1n1n1n,M*(M-1.)*(M-2.)*(M-3.)*M*(M-1.)*(M-2.)*(M-3.)*(M-4.)*(M-5.));
391 //---------------------------------------------------------------------------------------------------------
394 //---------------------------------------------------------------------------------------------------------
397 Double_t Q_x = Qvector1n.X();
398 Double_t Q_y = Qvector1n.Y();
399 Double_t Q_2x = Qvector2n.X();
400 Double_t Q_2y = Qvector2n.Y();
402 Double_t q_x=0.,q_y=0.,q_2x=0.,q_2y=0.,m=0.;
404 for(Int_t i=0;i<M;i++) //check if nPrim == M
406 fTrack=anEvent->GetTrack(i);
407 fReq1n->Fill(fTrack->Pt(),cos(n*(fTrack->Phi())),1.);
408 fImq1n->Fill(fTrack->Pt(),sin(n*(fTrack->Phi())),1.);
409 fReq2n->Fill(fTrack->Pt(),cos(2.*n*(fTrack->Phi())),1.);
410 fImq2n->Fill(fTrack->Pt(),sin(2.*n*(fTrack->Phi())),1.);
413 Double_t twoDiff_1n1n=0.,twoDiff_2n2n=0.,threeDiff_2n1n1n=0.,threeDiff_1n1n2n=0.,fourDiff_1n1n1n1n=0.;
415 for(Int_t bin=1;bin<10001;bin++) //loop over pt-bins (to be improved upper limit)
417 q_x = (fReq1n->GetBinContent(bin))*(fReq1n->GetBinEntries(bin));
418 q_y = (fImq1n->GetBinContent(bin))*(fImq1n->GetBinEntries(bin));
419 q_2x = (fReq2n->GetBinContent(bin))*(fReq2n->GetBinEntries(bin));
420 q_2y = (fImq2n->GetBinContent(bin))*(fImq2n->GetBinEntries(bin));
421 m = fReq1n->GetBinEntries(bin);
425 twoDiff_1n1n = (q_x*Q_x+q_y*Q_y-m)/(m*(M-1.));
426 f2_1n1n->Fill((bin-1)*0.1,twoDiff_1n1n,m*(M-1.));//<2'>_{n|n}
428 twoDiff_2n2n = (q_2x*Q_2x+q_2y*Q_2y-m)/(m*(M-1.));
429 f2_2n2n->Fill((bin-1)*0.1,twoDiff_2n2n,m*(M-1.));//<2'>_{2n|2n}
434 threeDiff_2n1n1n = (q_2x*(Q_x*Q_x-Q_y*Q_y)+2.*q_2y*Q_x*Q_y-2.*(q_x*Q_x+q_y*Q_y)-(q_2x*Q_2x+q_2y*Q_2y)+2.*m)/(m*(M-1.)*(M-2.));
435 f3_2n1n1n->Fill((bin-1)*0.1,threeDiff_2n1n1n,m*(M-1.)*(M-2.));//Re[<3'>_{2n|n,n}]
437 threeDiff_1n1n2n = (Q_2x*(q_x*Q_x-q_y*Q_y)+Q_2y*(q_x*Q_y+q_y*Q_x)-2.*(q_x*Q_x+q_y*Q_y)-(q_2x*Q_2x+q_2y*Q_2y)+2.*m)/(m*(M-1.)*(M-2.));
438 f3_1n1n2n->Fill((bin-1)*0.1,threeDiff_1n1n2n,m*(M-1.)*(M-2.));//Re[<3'>_{n,n|2n}]
443 fourDiff_1n1n1n1n = ((Q_x*Q_x+Q_y*Q_y)*(q_x*Q_x+q_y*Q_y)-(q_2x*(Q_x*Q_x-Q_y*Q_y)+2.*q_2y*Q_x*Q_y)-(Q_2x*(q_x*Q_x-q_y*Q_y)+Q_2y*(q_x*Q_y+q_y*Q_x))+(q_2x*Q_2x+q_2y*Q_2y)-2.*(M-3.)*(q_x*Q_x+q_y*Q_y)-2.*m*(Q_x*Q_x+Q_y*Q_y)+2.*(Q_x*q_x+Q_y*q_y)+2.*m*(M-3.))/(m*(M-1.)*(M-2.)*(M-3.));
444 f4_1n1n1n1n->Fill((bin-1)*0.1,fourDiff_1n1n1n1n,m*(M-1.)*(M-2.)*(M-3.)); //Re[<4'>_{n,n|n,n}]
453 //---------------------------------------------------------------------------------------------------------
510 AliFlowVector QvectorDiff;
512 QvectorDiff.Set(0.,0.);
513 QvectorDiff.SetMult(0);
514 QvectorDiff=anEvent->GetQ(1.*n);
516 nPrim=QvectorDiff.GetMult();
518 Double_t qBinx=0.,qBiny=0.,q2nBinx=0.,q2nBiny=0.,mm=0.;
520 for(Int_t dd=0;dd<nPrim;dd++)
522 fTrack=anEvent->GetTrack(dd);
523 if(fTrack->Pt()>0.04&&fTrack->Pt()<0.44)
525 qBinx+=cos(n*(fTrack->Phi()));
526 qBiny+=sin(n*(fTrack->Phi()));
527 q2nBinx+=cos(2.*n*(fTrack->Phi()));
528 q2nBiny+=sin(2.*n*(fTrack->Phi()));
531 if(fTrack->Pt()>100.)
533 cout<<"****************"<<endl;
534 cout<<"Pt = "<<fTrack->Pt()<<endl;
535 cout<<"****************"<<endl;
537 fReD->Fill(fTrack->Pt(),cos(n*(fTrack->Phi())),1.);
538 fImD->Fill(fTrack->Pt(),sin(n*(fTrack->Phi())),1.);
541 Double_t Qx=0.,Qy=0.,Mhere=0.;
542 for(Int_t bb=1;bb<10001;bb++)
544 Qx+=(fReD->GetBinContent(bb))*(fReD->GetBinEntries(bb));
545 Qy+=(fImD->GetBinContent(bb))*(fImD->GetBinEntries(bb));
546 Mhere+=fReD->GetBinEntries(bb);
550 Double_t threeDiff_n_n_2n = ((qBinx*Qvector1n.X()-qBiny*Qvector1n.Y())*Qvector2n.X()+(qBinx*Qvector1n.Y()+qBiny*Qvector1n.X())*Qvector2n.Y()-q2nBinx*Qvector2n.X()-q2nBiny*Qvector2n.Y()+2.*mm-2.*(qBinx*Qvector1n.X()+qBiny*Qvector1n.Y()))/(mm*(Mhere-1.)*(Mhere-2.));
553 Double_t threeDiff_2n_n_n = (q2nBinx*(Qvector1n.X()*Qvector1n.X()-Qvector1n.Y()*Qvector1n.Y())+2.*Qvector1n.X()*Qvector1n.Y()*q2nBiny
554 -2.*(qBinx*Qvector1n.X()+qBiny*Qvector1n.Y())-q2nBinx*Qvector2n.X()-q2nBiny*Qvector2n.Y()+2.*mm)/(mm*(Mhere-1.)*(Mhere-2.));
568 Double_t fourDiff = (pow(Qvector1n.Mod(),2.)*(qBinx*Qvector1n.X()+qBiny*Qvector1n.Y())-(qBinx*Qvector1n.X()-qBiny*Qvector1n.Y())*Qvector2n.X() + (qBinx*Qvector1n.Y()+qBiny*Qvector1n.X())*Qvector2n.Y()-
570 (q2nBinx*(Qvector1n.X()*Qvector1n.X()-Qvector1n.Y()*Qvector1n.Y())+2.*Qvector1n.X()*Qvector1n.Y()*q2nBiny)
572 -2.*(Mhere-2.)*(mm/Mhere)*pow(Qvector1n.Mod(),2.)+4.*mm*(Mhere-2.)-2.*(Mhere-2.)*(qBinx*Qvector1n.X()+qBiny*Qvector1n.Y()) +q2nBinx*Qvector2n.X()+q2nBiny*Qvector2n.Y()-2.*mm*(Mhere-1.))/(mm*(Mhere-1.)*(Mhere-2.)*(Mhere-3.));
576 //Double_t fourDiff_b = (pow(Qvector1n.Mod())*())/(mm*(Mhere-1.)*(Mhere-2.)*(Mhere-3.));
586 fQCorrelations->Fill(30,(qBinx*Qx+qBiny*Qy-mm)/(mm*(Mhere-1.)),mm*(Mhere-1.));//<2'>_{n|n}
587 fQCorrelations->Fill(34,(q2nBinx*Qvector2n.X()+q2nBiny*Qvector2n.Y()-mm)/(mm*(Mhere-1.)),mm*(Mhere-1.));//<2'>_{2n|2n}
588 fQCorrelations->Fill(31,threeDiff_n_n_2n,mm*(Mhere-1.)*(Mhere-2.));//<3'>_{n,n|2n}
589 fQCorrelations->Fill(32,threeDiff_2n_n_n,mm*(Mhere-1.)*(Mhere-2.));//<3'>_{2n|n,n}
590 //fQCorrelations->Fill(33,fourDiff,mm*(Mhere-1.)*(Mhere-2.)*(Mhere-3.));//<4'>_{n,n|n,n}
598 for(Int_t bb=1;bb<10001;bb++)
600 if(fReD->GetBinEntries(bb)>1){
601 Double_t qx=(fReD->GetBinContent(bb))*(fReD->GetBinEntries(bb));
602 Double_t qy=(fImD->GetBinContent(bb))*(fImD->GetBinEntries(bb));
606 //Double_t dx=(fReD->GetBinContent(bb))*(fReD->GetBinEntries(bb));
607 //Double_t dy=(fImD->GetBinContent(bb))*(fImD->GetBinEntries(bb));
612 Int_t mhere = fReD->GetBinEntries(bb);
613 //cout<<"bin = "<<bb<<" m = "<<mhere<<endl;
614 //cout<<"Qx = "<<Qx<<" Dx = "<<Dx<<endl;
615 //cout<<"Qy = "<<Qy<<" Dy = "<<Dy<<endl;
617 fQCorrelationsPerBin->Fill((bb-1)*0.1,(qx*Qx+qy*Qy-mhere)/(mhere*(Mhere-1.)),mhere*(Mhere-1.));
619 //fQCorrelationsPerBin->Fill((bb-1)*0.1,(dx*dx+dy*dy-mhere)/(mhere*(mhere-1)),mhere*(mhere-1));
622 }fourDiff_1n1n1n1n = ((Q_x*Q_x+Q_y*Q_y)*(q_x*Q_x+q_y*Q_y)-m*(M-1.)*(M-2.)*(threeDiff_2n1n1n+threeDiff_1n1n2n)-m*(M-1.)*2.*(M-2.)*twoDiff_1n1n-2.*(m*(d_x*d_x+d_y*d_y-(M-m))+(m-1.)*2.*(q_x*d_x+q_y*d_y)+(m-2.)*(q_x*q_x+q_y*q_y-m))-2.*m*(M-1.)*(twoDiff_1n1n+1.)-m*(M-1.)*2.*twoDiff_1n1n-m*(M-1.)*twoDiff_2n2n-m)/(m*(M-1.)*(M-2.)*(M-3.));//OK!!!!!!!!!
630 //cout<<"2-particle correlation = "<<(Qx*Qx+Qy*Qy-Mhere)/(Mhere*(Mhere-1))<<endl;
697 Int_t nSelTracksIntFlow = 0;//cross-checking the selected multiplicity
704 //calculating Q-vector of event (needed for errors) in n-th harmonic
705 AliFlowVector fQvector;
708 fQvector=anEvent->GetQ(n); //get the Q vector for this event
710 nPrim = fQvector.GetMult();
711 nEventNSelTracksIntFlow = fQvector.GetMult();
712 nEventNSelTracksIntFlow=nPrim;
719 //calculating Q-vector of event (needed for errors)
720 AliFlowVector fQvector;
723 fQvector=anEvent->GetQ(); //get the Q vector for this event
727 //cout<<" multiplicity = "<<fQvector.GetMult()<<endl;
730 //binning is organized as follows:
733 //3rd bin fill (Q_x)^2the selected multiplicity
734 //4th bin fill (Q_y)^2
735 //5th bin fill |Q_n|^2
736 //6th bin fill |Q_n|^4
737 //7th bin fill |Q_2n|^2
738 //8th bin fill Q_2n (Q_n)* (Q_n)*// Remark: * here denotes complex conjugate!!! //Re[Q_n^2 * Q_2n^*]
739 //9th bin fill Q_2n (Q_n)* (Q_n)*// Remark: * here denotes complex conjugate!!! //Im[Q_n^2 * Q_2n^*]
740 //10th bin fill |Q_3n|^2
741 //11th bin fill |Q_4n|^2
742 //12th bin fill |Q_5n|^2
743 //13th bin fill Re<Q_{3n} Q_{2n}^* Q_{n}^*>
744 //14th bin fill Re<Q_{3n} Q_{n}^* Q_{n}^* Q_{n}^*>
745 //15th bin fill <|Q_{2n}|^2 |Q_{n}|^2>
746 //16th bin fill Re<Q_{2n} Q_{n} Q_{n}^* Q_{n}^* Q_{n}^*>
747 //17th bin fill |Q_n|^6
751 fQvectorComponents->Fill(0.,fQvector.X(),1); //in the 1st bin fill Q_x
752 fQvectorComponents->Fill(1.,fQvector.Y(),1); //in the 2nd bin fill Q_y
753 fQvectorComponents->Fill(2.,pow(fQvector.X(),2.),1); //in the 3rd bin fill (Q_x)^2
754 fQvectorComponents->Fill(3.,pow(fQvector.Y(),2.),1); //in the 4th bin fill (Q_y)^2
755 fQvectorComponents->Fill(4.,pow(fQvector.Mod(),2.),1);//in the 5th bin fill |Q|^2
756 fQvectorComponents->Fill(5.,pow(fQvector.Mod(),4.),1);//in the 6th bin fill |Q|^4
758 //flow vector in 2n-th harmonic
759 AliFlowVector fQvector2n;
760 fQvector2n.Set(0.,0.);
761 fQvector2n.SetMult(0);
762 fQvector2n=anEvent->GetQ(2*n); //get the Q vector in 2n-th harmonic for this event
764 fQvectorComponents->Fill(6.,pow(fQvector2n.Mod(),2.),1);//in the 7th bin fill |Q_2n|^2
767 Q2nQnstarQnstar=pow(fQvector.X(),2.)*fQvector2n.X()+2.*fQvector.X()*fQvector.Y()*fQvector2n.Y()-pow(fQvector.Y(),2.)*fQvector2n.X();
770 Q2nQnstarQnstarTemp=-2.*fQvector.X()*fQvector2n.X()*fQvector.Y()+fQvector2n.Y()*pow(fQvector.X(),2.)-fQvector2n.Y()*pow(fQvector.Y(),2.);
773 fQvectorComponents->Fill(7.,Q2nQnstarQnstar,1); //in the 8th bin fill Re[Q_n^2 * Q_2n^*]
774 fQvectorComponents->Fill(8.,Q2nQnstarQnstarTemp,1); //in the 9th bin fill Im[Q_n^2 * Q_2n^*]
777 //flow vector in 3n-th harmonic
778 AliFlowVector fQvector3n;
779 fQvector3n.Set(0.,0.);
780 fQvector3n.SetMult(0);
781 fQvector3n=anEvent->GetQ(3*n); //get the Q vector in 3n-th harmonic for this event
782 fQvectorComponents->Fill(9.,pow(fQvector3n.Mod(),2.),1);//in the 10th bin fill |Q_3n|^2
784 //flow vector in 4n-th harmonic
785 AliFlowVector fQvector4n;
786 fQvector4n.Set(0.,0.);
787 fQvector4n.SetMult(0);
788 fQvector4n=anEvent->GetQ(4*n); //get the Q vector in 4n-th harmonic for this event
789 fQvectorComponents->Fill(10.,pow(fQvector4n.Mod(),2.),1);//in the 11th bin fill |Q_4n|^2
791 //flow vector in 5n-th harmonic
792 AliFlowVector fQvector5n;
793 fQvector5n.Set(0.,0.);
794 fQvector5n.SetMult(0);
795 fQvector5n=anEvent->GetQ(5*n); //get the Q vector in 5n-th harmonic for this event
796 fQvectorComponents->Fill(11.,pow(fQvector5n.Mod(),2.),1);//in the 12th bin fill |Q_5n|^2
801 Q3nQ2nstarQnstar=fQvector3n.X()*fQvector2n.X()*fQvector.X()-fQvector3n.X()*fQvector2n.Y()*fQvector.Y()+fQvector3n.Y()*fQvector2n.X()*fQvector.Y()+fQvector3n.Y()*fQvector2n.Y()*fQvector.X();
802 fQvectorComponents->Fill(12.,Q3nQ2nstarQnstar,1); //in the 13th bin fill Re<Q_{3n} Q_{2n}^* Q_{n}^*>
804 //fDirectCorrelations->Fill(2.,16,1);
808 Q3nQnstarQnstarQnstar=fQvector3n.X()*pow(fQvector.X(),3)-3.*fQvector.X()*fQvector3n.X()*pow(fQvector.Y(),2)+3.*fQvector.Y()*fQvector3n.Y()*pow(fQvector.X(),2)-fQvector3n.Y()*pow(fQvector.Y(),3);
809 fQvectorComponents->Fill(13.,Q3nQnstarQnstarQnstar,1); //in the 14th bin fill Re<Q_{3n} Q_{n}^* Q_{n}^* Q_{n}^*>
814 Q2nQnQ2nstarQnstar=pow(fQvector2n.Mod()*fQvector.Mod(),2);
815 fQvectorComponents->Fill(14.,Q2nQnQ2nstarQnstar,1); //in the 15th bin fill <|Q_{2n}|^2 |Q_{n}|^2>
820 Q2nQnQnstarQnstarQnstar=(fQvector2n.X()*fQvector.X()-fQvector2n.Y()*fQvector.Y())*(pow(fQvector.X(),3)-3.*fQvector.X()*pow(fQvector.Y(),2))+(fQvector2n.X()*fQvector.Y()+fQvector.X()*fQvector2n.Y())*(3.*fQvector.Y()*pow(fQvector.X(),2)-pow(fQvector.Y(),3));
821 fQvectorComponents->Fill(15.,Q2nQnQnstarQnstarQnstar,1); //in the 16th bin fill Re<Q_{2n} Q_{n} Q_{n}^* Q_{n}^* Q_{n}^*>
824 fQvectorComponents->Fill(16.,pow(fQvector.Mod(),6),1); //in the 17th bin fill |Q|^6
829 Q2nQnQnstarQnstarQnstar22222=(pow(fQvector.X(),2)+pow(fQvector.Y(),2))*(pow(fQvector.X(),2)*fQvector2n.X()-fQvector2n.X()*pow(fQvector.Y(),2)+2.*fQvector.X()*fQvector.Y()*fQvector2n.Y());
830 fQvectorComponents->Fill(16.,Q2nQnQnstarQnstarQnstar22222,1); //in the 16th bin fill Re<Q_{2n} Q_{n} Q_{n}^* Q_{n}^* Q_{n}^*>
852 //--------------------------------------------------------------------------------------------------------------------------------
853 // multi-particle correlations calculated with nested loops (for integrated flow)
855 // fDirectCorrelations was declared as TProfile:
856 // fDirectCorrelations = new TProfile("fDirectCorrelations","multi-particle correlations with nested loops",80,0,80);
858 // phik is the azimuth of the kth particle in laboratory frame
860 // binning in fDirectCorrelations: 0..40 correlations needed for integrated flow; 40..80 0..40 correlations needed for differential flow
863 // 1st bin: <2>_{n|n}
864 // 2nd bin: <2>_{2n|2n}
865 // 3rd bin: <2>_{3n|3n}
866 // 4th bin: <2>_{4n|4n}
867 // 6th bin: <3>_{2n|n,n}
868 // 7th bin: <3>_{3n|2n,n}
869 // 8th bin: <3>_{4n|2n,2n}
870 // 9th bin: <3>_{4n|3n,n}
871 //11th bin: <4>_{n,n|n,n}
872 //12th bin: <4>_{2n,n|2n,n}
873 //13th bin: <4>_{3n|n,n,n}
874 //14th bin: <4>_{4n|2n,n,n}
875 //16th bin: <5>_{2n|n,n,n,n}
876 //21th bin: <6>_{n,n,n|n,n,n}
879 //41st bin: <2'>_{n|n}
880 //42nd bin: <2'>_{2n|2n}
881 //46th bin: <3'>_{2n|n,n}
882 //47th bin: <3'>_{n,n|2n}
883 //51st bin: <4'>_{n,n|n,n}
885 Double_t phi1=0.,phi2=0.;
886 Double_t phi3=0.,phi4=0.;
887 Double_t phi5=0.,phi6=0.;
889 //<2>_{kn|kn} (k=1,2,3,4)
890 for(Int_t i=0;i<M;i++)
892 fTrack=anEvent->GetTrack(i);
894 for(Int_t j=0;j<M;j++)
897 fTrack=anEvent->GetTrack(j);
899 fDirectCorrelations->Fill(0.,cos(n*(phi1-phi2)),1); //<2>_{n,n}
900 fDirectCorrelations->Fill(1.,cos(2.*n*(phi1-phi2)),1); //<2>_{2n,2n}
901 fDirectCorrelations->Fill(2.,cos(3.*n*(phi1-phi2)),1); //<2>_{3n,3n}
902 fDirectCorrelations->Fill(3.,cos(4.*n*(phi1-phi2)),1); //<2>_{4n,4n}
906 //<3>_{2n,n,n}, <3>_{3n|2n,n}, <3>_{4n,2n,2n} and <3>_{4n,3n,n}
907 for(Int_t i=0;i<M;i++)
909 fTrack=anEvent->GetTrack(i);
911 for(Int_t j=0;j<M;j++)
914 fTrack=anEvent->GetTrack(j);
916 for(Int_t k=0;k<M;k++)
918 if(k==i||k==j)continue;
919 fTrack=anEvent->GetTrack(k);
921 fDirectCorrelations->Fill(5.,cos(2*n*phi1-n*(phi2+phi3)),1); //<3>_{2n,n,n}
922 fDirectCorrelations->Fill(6.,cos(3.*n*phi1-2.*n*phi2-n*phi3),1); //<3>_{3n,2n,n}
923 fDirectCorrelations->Fill(7.,cos(4.*n*phi1-2.*n*phi2-2.*n*phi3),1); //<3>_{4n,2n,2n}
924 fDirectCorrelations->Fill(8.,cos(4.*n*phi1-3.*n*phi2-n*phi3),1); //<3>_{4n,3n,n}
929 //<4>_{n,n,n,n}, <4>_{2n,n,2n,n}, <4>_{3n,n,n,n} and <4>_{4n,2n,n,n}
930 for(Int_t i=0;i<M;i++)
932 fTrack=anEvent->GetTrack(i);
934 for(Int_t j=0;j<M;j++)
937 fTrack=anEvent->GetTrack(j);
939 for(Int_t k=0;k<M;k++)
941 if(k==i||k==j)continue;
942 fTrack=anEvent->GetTrack(k);
944 for(Int_t l=0;l<M;l++)
946 if(l==i||l==j||l==k)continue;
947 fTrack=anEvent->GetTrack(l);
949 fDirectCorrelations->Fill(10.,cos(n*phi1+n*phi2-n*phi3-n*phi4),1); //<4>_{n,n,n,n}
950 fDirectCorrelations->Fill(11.,cos(2.*n*phi1+n*phi2-2.*n*phi3-n*phi4),1); //<4>_{2n,n,2n,n}
951 fDirectCorrelations->Fill(12.,cos(3.*n*phi1-n*phi2-n*phi3-n*phi4),1); //<4>_{3n,n,n,n}
952 fDirectCorrelations->Fill(13.,cos(4.*n*phi1-2.*n*phi2-n*phi3-n*phi4),1); //<4>_{4n,2n,n,n}
973 for(Int_t i=0;i<nPrim;i++)
975 cout<<"i = "<<i<<endl;
976 fTrack=anEvent->GetTrack(i);
978 for(Int_t j=0;j<nPrim;j++)
981 fTrack=anEvent->GetTrack(j);
983 for(Int_t k=0;k<nPrim;k++)
985 if(k==i||k==j)continue;
986 fTrack=anEvent->GetTrack(k);
988 for(Int_t l=0;l<nPrim;l++)
990 if(l==i||l==j||l==k)continue;
991 fTrack=anEvent->GetTrack(l);
993 for(Int_t m=0;m<nPrim;m++)
995 if(m==i||m==j||m==k||m==l)continue;
996 fTrack=anEvent->GetTrack(m);
998 fDirectCorrelations->Fill(15.,cos(2.*n*phi1+n*phi2-n*phi3-n*phi4-n*phi5),1); //<5>_{2n,n,n,n,n}
1008 for(Int_t i=0;i<nPrim;i++)
1010 //cout<<"i = "<<i<<endl;
1011 fTrack=anEvent->GetTrack(i);
1013 for(Int_t j=0;j<nPrim;j++)
1016 fTrack=anEvent->GetTrack(j);
1018 for(Int_t k=0;k<nPrim;k++)
1020 if(k==i||k==j)continue;
1021 fTrack=anEvent->GetTrack(k);
1023 for(Int_t l=0;l<nPrim;l++)
1025 if(l==i||l==j||l==k)continue;
1026 fTrack=anEvent->GetTrack(l);
1028 for(Int_t m=0;m<nPrim;m++)
1030 if(m==i||m==j||m==k||m==l)continue;
1031 fTrack=anEvent->GetTrack(m);
1033 for(Int_t nn=0;nn<nPrim;nn++)
1035 if(nn==i||nn==j||nn==k||nn==l||nn==m)continue;
1036 fTrack=anEvent->GetTrack(nn);
1038 fDirectCorrelations->Fill(20.,cos(n*phi1+n*phi2+n*phi3-n*phi4-n*phi5-n*phi6),1); //<6>_{n,n,n,n,n,n}
1046 //--------------------------------------------------------------------------------------------------------------------------------
1066 //--------------------------------------------------------------------------------------------------------------------------------
1067 // multi-particle correlations calculated with nested loops (for differential flow)
1069 //differential flow (see above how the binning in fDirectCorrelations is organized)
1070 //41st bin: <2'>_{n|n}
1071 //42nd bin: <2'>_{2n|2n}
1072 //46th bin: <3'>_{2n|n,n}
1073 //47th bin: <3'>_{n,n|2n}
1074 //51st bin: <4'>_{n,n|n,n}
1077 for(Int_t i=0;i<M;i++)
1079 fTrack=anEvent->GetTrack(i);
1080 if(fTrack->Pt()>=0.5&&fTrack->Pt()<0.6)
1083 for(Int_t j=0;j<M;j++)
1086 fTrack=anEvent->GetTrack(j);
1088 fDirectCorrelations->Fill(40.,cos(1.*n*(phi1-phi2)),1); //<2'>_{n,n}
1089 fDirectCorrelations->Fill(41.,cos(2.*n*(phi1-phi2)),1); //<2'>_{2n,2n}
1095 for(Int_t i=0;i<M;i++)
1097 fTrack=anEvent->GetTrack(i);
1098 if(fTrack->Pt()>=0.5&&fTrack->Pt()<0.6)
1101 for(Int_t j=0;j<M;j++)
1104 fTrack=anEvent->GetTrack(j);
1106 for(Int_t k=0;k<M;k++)
1108 if(k==i||k==j)continue;
1109 fTrack=anEvent->GetTrack(k);
1111 fDirectCorrelations->Fill(45.,cos(n*(2.*phi1-phi2-phi3)),1); //<3'>_{2n|n,n}
1112 fDirectCorrelations->Fill(46.,cos(n*(phi1+phi2-2.*phi3)),1); //<3'>_{n,n|2n}
1119 for(Int_t i=0;i<M;i++)
1121 fTrack=anEvent->GetTrack(i);
1122 if(fTrack->Pt()>=0.5&&fTrack->Pt()<0.6)
1125 for(Int_t j=0;j<M;j++)
1128 fTrack=anEvent->GetTrack(j);
1130 for(Int_t k=0;k<M;k++)
1132 if(k==i||k==j)continue;
1133 fTrack=anEvent->GetTrack(k);
1135 for(Int_t l=0;l<M;l++)
1137 if(l==i||l==j||l==k)continue;
1138 fTrack=anEvent->GetTrack(l);
1140 fDirectCorrelations->Fill(50.,cos(n*(phi1+phi2-phi3-phi4)),1); //<4'>_{n,n|n,n}
1146 //--------------------------------------------------------------------------------------------------------------------------------
1165 //================================================================================================================
1167 void AliFlowAnalysisWithQCumulants::Finish()
1169 //not needed for the time being...