]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGHF/hfe/AliAnalysisTaskHFEFlowData.cxx
Removing the error message for single storage attempts, to avoid interfering with...
[u/mrichter/AliRoot.git] / PWGHF / hfe / AliAnalysisTaskHFEFlowData.cxx
CommitLineData
90aa28e9 1/**************************************************************************\r
2* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *\r
3* *\r
4* Author: The ALICE Off-line Project. *\r
5* Contributors are mentioned in the code where appropriate. *\r
6* *\r
7* Permission to use, copy, modify and distribute this software and its *\r
8* documentation strictly for non-commercial purposes is hereby granted *\r
9* without fee, provided that the above copyright notice appears in all *\r
10* copies and that both the copyright notice and this permission notice *\r
11* appear in the supporting documentation. The authors make no claims *\r
12* about the suitability of this software for any purpose. It is *\r
13* provided "as is" without express or implied warranty. *\r
14**************************************************************************/\r
15//\r
16// Flow task\r
17// \r
18// Authors:\r
19// Raphaelle Bailhache <R.Bailhache@gsi.de>\r
20//\r
21#include "TROOT.h"\r
22#include "TH1D.h"\r
23#include "TH2D.h"\r
24#include "TChain.h"\r
25#include "TVector2.h"\r
26#include "THnSparse.h"\r
27#include "TMath.h"\r
28#include "TRandom3.h"\r
29#include "TProfile.h"\r
30#include "TProfile2D.h"\r
31\r
32#include "AliVEventHandler.h"\r
33#include "AliAnalysisTaskSE.h"\r
34#include "AliAnalysisManager.h"\r
35\r
36#include "AliVEvent.h"\r
37#include "AliESDInputHandler.h"\r
38#include "AliMCEvent.h"\r
39#include "AliESD.h"\r
40#include "AliESDEvent.h"\r
41#include "AliPIDResponse.h"\r
42#include "AliESDVZERO.h"\r
43#include "AliESDUtils.h"\r
44#include "AliMCParticle.h"\r
45#include "AliVTrack.h"\r
46#include "AliAODTrack.h"\r
47\r
48#include "AliFlowCandidateTrack.h"\r
49#include "AliFlowEvent.h"\r
50#include "AliFlowTrackCuts.h"\r
51#include "AliFlowVector.h"\r
52#include "AliFlowCommonConstants.h"\r
53\r
54#include "AliHFEcuts.h"\r
55#include "AliHFEpid.h"\r
56#include "AliHFEpidQAmanager.h"\r
57#include "AliHFEtools.h"\r
58#include "AliHFEVZEROEventPlane.h"\r
59\r
60#include "AliCentrality.h"\r
61#include "AliEventplane.h"\r
62#include "AliAnalysisTaskHFEFlowData.h"\r
63\r
64\r
65//____________________________________________________________________\r
66AliAnalysisTaskHFEFlowData::AliAnalysisTaskHFEFlowData() :\r
67 AliAnalysisTaskSE(),\r
68 fListHist(0x0), \r
69 fAODAnalysis(kFALSE),\r
70 fUseFlagAOD(kFALSE),\r
71 fApplyCut(kTRUE),\r
72 fFlags(1<<4),\r
73 fVZEROEventPlane(kFALSE),\r
74 fVZEROEventPlaneA(kFALSE),\r
75 fVZEROEventPlaneC(kFALSE),\r
76 fSubEtaGapTPC(kFALSE),\r
77 fEtaGap(0.0),\r
78 fDebugLevel(0),\r
79 fHFECuts(0),\r
80 fPID(0),\r
81 fPIDqa(0),\r
82 fHistEV(0),\r
83 fEventPlane(0x0),\r
84 fCosResabc(0x0),\r
85 fCosRes(0x0),\r
86 fDeltaPhiMaps(0x0),\r
87 fCosPhiMaps(0x0)\r
88{\r
89 // Constructor\r
90\r
91 \r
92}\r
93//______________________________________________________________________________\r
94AliAnalysisTaskHFEFlowData:: AliAnalysisTaskHFEFlowData(const char *name) :\r
95 AliAnalysisTaskSE(name),\r
96 fListHist(0x0),\r
97 fAODAnalysis(kFALSE),\r
98 fUseFlagAOD(kFALSE),\r
99 fApplyCut(kTRUE),\r
100 fFlags(1<<4), \r
101 fVZEROEventPlane(kFALSE),\r
102 fVZEROEventPlaneA(kFALSE),\r
103 fVZEROEventPlaneC(kFALSE),\r
104 fSubEtaGapTPC(kFALSE),\r
105 fEtaGap(0.0),\r
106 fDebugLevel(0),\r
107 fHFECuts(0),\r
108 fPID(0),\r
109 fPIDqa(0),\r
110 fHistEV(0),\r
111 fEventPlane(0x0),\r
112 fCosResabc(0x0),\r
113 fCosRes(0x0),\r
114 fDeltaPhiMaps(0x0),\r
115 fCosPhiMaps(0x0)\r
116{\r
117 //\r
118 // named ctor\r
119 //\r
120 \r
121 fPID = new AliHFEpid("hfePid");\r
122 fPIDqa = new AliHFEpidQAmanager;\r
123\r
124 DefineInput(0,TChain::Class());\r
125 DefineOutput(1, TList::Class());\r
126 \r
127}\r
128//____________________________________________________________\r
129AliAnalysisTaskHFEFlowData::AliAnalysisTaskHFEFlowData(const AliAnalysisTaskHFEFlowData &ref):\r
130 AliAnalysisTaskSE(ref),\r
131 fListHist(0x0),\r
132 fAODAnalysis(ref.fAODAnalysis), \r
133 fUseFlagAOD(ref.fUseFlagAOD),\r
134 fApplyCut(ref.fApplyCut),\r
135 fFlags(ref.fFlags),\r
136 fVZEROEventPlane(ref.fVZEROEventPlane),\r
137 fVZEROEventPlaneA(ref.fVZEROEventPlaneA),\r
138 fVZEROEventPlaneC(ref.fVZEROEventPlaneC),\r
139 fSubEtaGapTPC(ref.fSubEtaGapTPC),\r
140 fEtaGap(ref.fEtaGap),\r
141 fDebugLevel(ref.fDebugLevel),\r
142 fHFECuts(0),\r
143 fPID(0),\r
144 fPIDqa(0),\r
145 fHistEV(0),\r
146 fEventPlane(0x0),\r
147 fCosResabc(0x0),\r
148 fCosRes(0x0),\r
149 fDeltaPhiMaps(0x0),\r
150 fCosPhiMaps(0x0)\r
151{\r
152 //\r
153 // Copy Constructor\r
154 //\r
155 ref.Copy(*this);\r
156}\r
157\r
158//____________________________________________________________\r
159AliAnalysisTaskHFEFlowData &AliAnalysisTaskHFEFlowData::operator=(const AliAnalysisTaskHFEFlowData &ref){\r
160 //\r
161 // Assignment operator\r
162 //\r
163 if(this == &ref) \r
164 ref.Copy(*this);\r
165 return *this;\r
166}\r
167\r
168//____________________________________________________________\r
169void AliAnalysisTaskHFEFlowData::Copy(TObject &o) const {\r
170 // \r
171 // Copy into object o\r
172 //\r
173 AliAnalysisTaskHFEFlowData &target = dynamic_cast<AliAnalysisTaskHFEFlowData &>(o);\r
174 target.fAODAnalysis = fAODAnalysis;\r
175 target.fUseFlagAOD = fUseFlagAOD;\r
176 target.fApplyCut = fApplyCut;\r
177 target.fFlags = fFlags;\r
178 target.fVZEROEventPlane = fVZEROEventPlane;\r
179 target.fVZEROEventPlaneA = fVZEROEventPlaneA;\r
180 target.fVZEROEventPlaneC = fVZEROEventPlaneC;\r
181 target.fSubEtaGapTPC = fSubEtaGapTPC;\r
182 target.fEtaGap = fEtaGap;\r
183 target.fDebugLevel = fDebugLevel;\r
184 target.fHFECuts = fHFECuts;\r
185 target.fPID = fPID;\r
186 target.fPIDqa = fPIDqa;\r
187 \r
188}\r
189//____________________________________________________________\r
190AliAnalysisTaskHFEFlowData::~AliAnalysisTaskHFEFlowData(){\r
191 //\r
192 // Destructor\r
193 //\r
194 if(fListHist) delete fListHist;\r
195 if(fHFECuts) delete fHFECuts;\r
196 if(fPID) delete fPID;\r
197 if(fPIDqa) delete fPIDqa;\r
198 \r
199\r
200}\r
201//________________________________________________________________________\r
202void AliAnalysisTaskHFEFlowData::UserCreateOutputObjects()\r
203{\r
204\r
205 //********************\r
206 // Create histograms\r
207 //********************\r
208\r
209 //**************\r
210 // Cuts\r
211 //**************\r
212\r
2fad3005 213 AliDebug(1,"AliAnalysisTaskHFEFlowData: create output objects");\r
90aa28e9 214\r
215 // HFE cuts\r
216\r
217 if(!fHFECuts){\r
218 fHFECuts = new AliHFEcuts;\r
219 fHFECuts->CreateStandardCuts();\r
220 }\r
221 fHFECuts->Initialize();\r
222 if(fAODAnalysis) fHFECuts->SetAOD(); \r
223\r
2fad3005 224 AliDebug(1,"AliAnalysisTaskHFEFlowData: HFE cuts initialize");\r
90aa28e9 225\r
226 // PID HFE\r
227 //fPID->SetHasMCData(HasMCData());\r
228 if(!fPID->GetNumberOfPIDdetectors()) fPID->AddDetector("TPC", 0);\r
229 fPID->InitializePID();\r
230 fPIDqa->Initialize(fPID);\r
231 fPID->SortDetectors();\r
232\r
2fad3005 233 AliDebug(1,"AliAnalysisTaskHFEFlowData: pid and pidqa");\r
90aa28e9 234 \r
235 //**************************\r
236 // Bins for the THnSparse\r
237 //**************************\r
238\r
239 Int_t nBinsPt = 24;\r
240 Double_t binLimPt[25] = {0., 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1., 1.1, 1.2,\r
241 1.3, 1.4, 1.5, 1.75, 2., 2.25, 2.5, 3., 3.5, 4., 5.,\r
242 6.};\r
243 \r
244 Int_t nBinsEtaLess = 2;\r
245 Double_t minEta = -0.8;\r
246 Double_t maxEta = 0.8;\r
247 Double_t binLimEtaLess[nBinsEtaLess+1];\r
248 for(Int_t i=0; i<=nBinsEtaLess; i++) binLimEtaLess[i]=(Double_t)minEta + (maxEta-minEta)/nBinsEtaLess*(Double_t)i ;\r
249 \r
250 Int_t nBinsCos = 50;\r
251 Double_t minCos = -1.0;\r
252 Double_t maxCos = 1.0;\r
253 Double_t binLimCos[nBinsCos+1];\r
254 for(Int_t i=0; i<=nBinsCos; i++) binLimCos[i]=(Double_t)minCos + (maxCos-minCos)/nBinsCos*(Double_t)i ;\r
255 \r
256 Int_t nBinsC = 11;\r
257 Double_t minC = 0.0;\r
258 Double_t maxC = 11.0;\r
259 Double_t binLimC[nBinsC+1];\r
260 for(Int_t i=0; i<=nBinsC; i++) binLimC[i]=(Double_t)minC + (maxC-minC)/nBinsC*(Double_t)i ;\r
261\r
262 Int_t nBinsCMore = 20;\r
263 Double_t minCMore = 0.0;\r
264 Double_t maxCMore = 20.0;\r
265 Double_t binLimCMore[nBinsCMore+1];\r
266 for(Int_t i=0; i<=nBinsCMore; i++) binLimCMore[i]=(Double_t)minCMore + (maxCMore-minCMore)/nBinsCMore*(Double_t)i ;\r
267\r
268 Int_t nBinsPhi = 25;\r
269 Double_t minPhi = 0.0;\r
270 Double_t maxPhi = TMath::Pi();\r
271 Double_t binLimPhi[nBinsPhi+1];\r
272 for(Int_t i=0; i<=nBinsPhi; i++) {\r
273 binLimPhi[i]=(Double_t)minPhi + (maxPhi-minPhi)/nBinsPhi*(Double_t)i ;\r
274 }\r
275\r
276 Int_t nBinsCharge = 2;\r
277 Double_t minCharge = -1.0;\r
278 Double_t maxCharge = 1.0;\r
279 Double_t binLimCharge[nBinsCharge+1];\r
280 for(Int_t i=0; i<=nBinsCharge; i++) binLimCharge[i]=(Double_t)minCharge + (maxCharge-minCharge)/nBinsCharge*(Double_t)i ;\r
281 \r
2fad3005 282 AliDebug(1,"AliAnalysisTaskHFEFlowData: array of bins");\r
90aa28e9 283\r
284 //******************\r
285 // Histograms\r
286 //******************\r
287 \r
288 fListHist = new TList();\r
289 fListHist->SetOwner();\r
290\r
2fad3005 291 AliDebug(1,"AliAnalysisTaskHFEFlowData: list created");\r
90aa28e9 292 \r
293 // Histos\r
294 fHistEV = new TH2D("fHistEV", "events", 3, 0, 3, 3, 0,3);\r
295 \r
2fad3005 296 AliDebug(1,"AliAnalysisTaskHFEFlowData: fHistEv");\r
90aa28e9 297\r
298 // Event plane as function of phiep, centrality\r
299 const Int_t nDima=5;\r
300 Int_t nBina[nDima] = {nBinsPhi,nBinsPhi,nBinsPhi,nBinsPhi,nBinsC};\r
301 fEventPlane = new THnSparseF("EventPlane","EventPlane",nDima,nBina);\r
302 fEventPlane->SetBinEdges(0,binLimPhi);\r
303 fEventPlane->SetBinEdges(1,binLimPhi);\r
304 fEventPlane->SetBinEdges(2,binLimPhi);\r
305 fEventPlane->SetBinEdges(3,binLimPhi);\r
306 fEventPlane->SetBinEdges(4,binLimC);\r
307 fEventPlane->Sumw2();\r
308\r
2fad3005 309 AliDebug(1,"AliAnalysisTaskHFEFlowData: fEventPlane");\r
90aa28e9 310 \r
311 // Resolution cosres_abc centrality\r
312 const Int_t nDimfbis=4;\r
313 Int_t nBinfbis[nDimfbis] = {nBinsCos,nBinsCos,nBinsCos,nBinsCMore};\r
314 fCosResabc = new THnSparseF("CosRes_abc","CosRes_abc",nDimfbis,nBinfbis);\r
315 fCosResabc->SetBinEdges(0,binLimCos);\r
316 fCosResabc->SetBinEdges(1,binLimCos);\r
317 fCosResabc->SetBinEdges(2,binLimCos);\r
318 fCosResabc->SetBinEdges(3,binLimCMore);\r
319 fCosResabc->Sumw2();\r
320\r
2fad3005 321 AliDebug(1,"AliAnalysisTaskHFEFlowData: fCosResabc");\r
90aa28e9 322\r
323 // Resolution cosres centrality\r
324 const Int_t nDimf=2;\r
325 Int_t nBinf[nDimf] = {nBinsCos, nBinsCMore};\r
326 fCosRes = new THnSparseF("CosRes","CosRes",nDimf,nBinf);\r
327 fCosRes->SetBinEdges(0,binLimCos);\r
328 fCosRes->SetBinEdges(1,binLimCMore);\r
329 fCosRes->Sumw2();\r
330\r
2fad3005 331 AliDebug(1,"AliAnalysisTaskHFEFlowData: fCosRes");\r
90aa28e9 332 \r
333 // Maps delta phi\r
334 const Int_t nDimg=5;\r
335 Int_t nBing[nDimg] = {nBinsPhi,nBinsC,nBinsPt, nBinsCharge,nBinsEtaLess};\r
336 fDeltaPhiMaps = new THnSparseF("DeltaPhiMaps","DeltaPhiMaps",nDimg,nBing);\r
337 fDeltaPhiMaps->SetBinEdges(0,binLimPhi);\r
338 fDeltaPhiMaps->SetBinEdges(1,binLimC);\r
339 fDeltaPhiMaps->SetBinEdges(2,binLimPt);\r
340 fDeltaPhiMaps->SetBinEdges(3,binLimCharge);\r
341 fDeltaPhiMaps->SetBinEdges(4,binLimEtaLess);\r
342 fDeltaPhiMaps->Sumw2(); \r
343\r
2fad3005 344 AliDebug(1,"AliAnalysisTaskHFEFlowData: fDeltaPhiMaps");\r
90aa28e9 345\r
346 // Maps cos phi\r
347 const Int_t nDimh=5;\r
348 Int_t nBinh[nDimh] = {nBinsCos,nBinsC,nBinsPt,nBinsCharge,nBinsEtaLess};\r
349 fCosPhiMaps = new THnSparseF("CosPhiMaps","CosPhiMaps",nDimh,nBinh);\r
350 fCosPhiMaps->SetBinEdges(0,binLimCos);\r
351 fCosPhiMaps->SetBinEdges(1,binLimC);\r
352 fCosPhiMaps->SetBinEdges(2,binLimPt);\r
353 fCosPhiMaps->SetBinEdges(3,binLimCharge);\r
354 fCosPhiMaps->SetBinEdges(4,binLimEtaLess);\r
355 fCosPhiMaps->Sumw2();\r
356\r
2fad3005 357 AliDebug(1,"AliAnalysisTaskHFEFlowData: fCosPhiMaps");\r
90aa28e9 358\r
359 //**************************\r
360 // Add to the list\r
361 //******************************\r
362\r
363 //fListHist->Add(qaCutsRP);\r
364 fListHist->Add(fPIDqa->MakeList("HFEpidQA"));\r
365 fListHist->Add(fHistEV);\r
366 fListHist->Add(fEventPlane);\r
367 fListHist->Add(fCosRes);\r
368 fListHist->Add(fCosResabc);\r
369 fListHist->Add(fDeltaPhiMaps);\r
370 fListHist->Add(fCosPhiMaps);\r
371\r
2fad3005 372 AliDebug(1,"AliAnalysisTaskHFEFlowData: added to the list");\r
90aa28e9 373 \r
374 \r
375 PostData(1, fListHist);\r
376\r
2fad3005 377 AliDebug(1,"AliAnalysisTaskHFEFlowData: Post Data");\r
90aa28e9 378\r
379}\r
380 \r
381//________________________________________________________________________\r
382void AliAnalysisTaskHFEFlowData::UserExec(Option_t */*option*/)\r
383{\r
384 //\r
385 // Loop over event\r
386 //\r
387\r
2fad3005 388 AliDebug(1,"AliAnalysisTaskHFEFlowData: UserExec");\r
90aa28e9 389 \r
390 Float_t cntr = 0.0;\r
391 Double_t binct = 11.5;\r
392 Double_t binctMore = 20.5;\r
393 Float_t binctt = -1.0;\r
394 \r
395 Double_t valuensparsea[5];\r
396 Double_t valuensparsefbis[4];\r
397 Double_t valuensparsef[2];\r
398 Double_t valuensparseg[5];\r
399 Double_t valuensparseh[5];\r
400\r
401 AliDebug(1, "Variable initialized");\r
402\r
403 \r
404 /////////////////\r
405 // centrality\r
406 /////////////////\r
407 \r
408 //AliESDEvent *esd = dynamic_cast<AliESDEvent*>(InputEvent());\r
409 //if(!esd) return;\r
410 AliCentrality *centrality = fInputEvent->GetCentrality();\r
411 //printf("Got the centrality\n");\r
412 if(!centrality) {\r
413 PostData(1, fListHist);\r
414 return;\r
415 }\r
416 cntr = centrality->GetCentralityPercentile("V0M");\r
417 if((0.0< cntr) && (cntr<5.0)) binct = 0.5;\r
418 if((5.0< cntr) && (cntr<10.0)) binct = 1.5;\r
419 if((10.0< cntr) && (cntr<20.0)) binct = 2.5;\r
420 if((20.0< cntr) && (cntr<30.0)) binct = 3.5;\r
421 if((30.0< cntr) && (cntr<40.0)) binct = 4.5;\r
422 if((40.0< cntr) && (cntr<50.0)) binct = 5.5;\r
423 if((50.0< cntr) && (cntr<60.0)) binct = 6.5;\r
424 if((60.0< cntr) && (cntr<70.0)) binct = 7.5;\r
425 if((70.0< cntr) && (cntr<80.0)) binct = 8.5;\r
426 if((80.0< cntr) && (cntr<90.0)) binct = 9.5;\r
427 if((90.0< cntr) && (cntr<100.0)) binct = 10.5;\r
428 \r
429 if((0.< cntr) && (cntr < 20.)) binctt = 0.5;\r
430 if((20.< cntr) && (cntr < 40.)) binctt = 1.5;\r
431 if((40.< cntr) && (cntr < 80.)) binctt = 2.5;\r
432\r
433 if((0.0< cntr) && (cntr<5.0)) binctMore = 0.5;\r
434 if((5.0< cntr) && (cntr<10.0)) binctMore = 1.5;\r
435 if((10.0< cntr) && (cntr<15.0)) binctMore = 2.5;\r
436 if((15.0< cntr) && (cntr<20.0)) binctMore = 3.5;\r
437 if((20.0< cntr) && (cntr<25.0)) binctMore = 4.5;\r
438 if((25.0< cntr) && (cntr<30.0)) binctMore = 5.5;\r
439 if((30.0< cntr) && (cntr<35.0)) binctMore = 6.5;\r
440 if((35.0< cntr) && (cntr<40.0)) binctMore = 7.5;\r
441 if((40.0< cntr) && (cntr<45.0)) binctMore = 8.5;\r
442 if((45.0< cntr) && (cntr<50.0)) binctMore = 9.5;\r
443 if((50.0< cntr) && (cntr<55.0)) binctMore = 10.5;\r
444 if((55.0< cntr) && (cntr<60.0)) binctMore = 11.5;\r
445 if((60.0< cntr) && (cntr<65.0)) binctMore = 12.5;\r
446 if((65.0< cntr) && (cntr<70.0)) binctMore = 13.5;\r
447 if((70.0< cntr) && (cntr<75.0)) binctMore = 14.5;\r
448 if((75.0< cntr) && (cntr<80.0)) binctMore = 15.5;\r
449 if((80.0< cntr) && (cntr<85.0)) binctMore = 16.5;\r
450 if((85.0< cntr) && (cntr<90.0)) binctMore = 17.5;\r
451 if((90.0< cntr) && (cntr<95.0)) binctMore = 18.5;\r
452 if((95.0< cntr) && (cntr<100.0)) binctMore = 19.5;\r
453\r
454 \r
455 if(binct > 11.0) {\r
456 PostData(1, fListHist);\r
457 return;\r
458 }\r
459 \r
460 AliDebug(1, "Centrality");\r
461\r
462 // centrality\r
463 valuensparsea[4] = binct; \r
464 valuensparsef[1] = binctMore; \r
465 valuensparsefbis[3] = binctMore; \r
466 valuensparseg[1] = binct;\r
467 valuensparseh[1] = binct; \r
468 \r
469 //////////////////////\r
470 // run number\r
471 //////////////////////\r
472\r
473 Int_t runnumber = fInputEvent->GetRunNumber();\r
474 \r
475 if(!fPID->IsInitialized()){\r
476 fPID->InitializePID(runnumber);\r
477 }\r
478\r
479 AliDebug(1, "Run number");\r
480\r
481 //////////\r
482 // PID\r
483 //////////\r
484 \r
485 AliPIDResponse *pidResponse = fInputHandler->GetPIDResponse();\r
486 if(!pidResponse){\r
487 PostData(1, fListHist);\r
488 return;\r
489 }\r
490 fPID->SetPIDResponse(pidResponse);\r
491\r
492 AliDebug(1, "PID");\r
493\r
494 fHistEV->Fill(binctt,0.0);\r
495 \r
496 AliDebug(1, "fHistEv");\r
497\r
498 //////////////////\r
499 // Event cut\r
500 //////////////////\r
501 if(!fHFECuts->CheckEventCuts("fEvRecCuts", fInputEvent)) {\r
502 PostData(1, fListHist);\r
503 return;\r
504 }\r
505\r
506 AliDebug(1, "Event cut");\r
507\r
508 fHistEV->Fill(binctt,1.0);\r
509\r
510 //////////////////////////////////// \r
511 // First method event plane\r
512 ////////////////////////////////////\r
513\r
514 AliEventplane* vEPa = fInputEvent->GetEventplane();\r
515 Float_t eventPlanea = 0.0;\r
516 Float_t eventPlaneTPC = 0.0;\r
517 Float_t eventPlaneV0A = 0.0;\r
518 Float_t eventPlaneV0C = 0.0;\r
519 Float_t eventPlaneV0 = 0.0;\r
520 TVector2 *standardQ = 0x0;\r
521 TVector2 *qsub1a = 0x0;\r
522 TVector2 *qsub2a = 0x0;\r
523\r
524 // V0\r
525\r
526 eventPlaneV0 = TVector2::Phi_0_2pi(vEPa->GetEventplane("V0", fInputEvent,2));\r
527 if(eventPlaneV0 > TMath::Pi()) eventPlaneV0 = eventPlaneV0 - TMath::Pi();\r
528 eventPlaneV0A = TVector2::Phi_0_2pi(vEPa->GetEventplane("V0A", fInputEvent,2));\r
529 if(eventPlaneV0A > TMath::Pi()) eventPlaneV0A = eventPlaneV0A - TMath::Pi();\r
530 eventPlaneV0C = TVector2::Phi_0_2pi(vEPa->GetEventplane("V0C", fInputEvent,2));\r
531 if(eventPlaneV0C > TMath::Pi()) eventPlaneV0C = eventPlaneV0C - TMath::Pi();\r
532 \r
533 AliDebug(1, "V0 event plane");\r
534 \r
535 // TPC\r
536\r
537 standardQ = vEPa->GetQVector(); \r
538 Double_t qx = -1.0;\r
539 Double_t qy = -1.0;\r
540 if(standardQ) {\r
541 qx = standardQ->X();\r
542 qy = standardQ->Y();\r
543 } \r
544 TVector2 qVectorfortrack;\r
545 qVectorfortrack.Set(qx,qy);\r
546 eventPlaneTPC = TVector2::Phi_0_2pi(qVectorfortrack.Phi())/2.; \r
547\r
548 AliDebug(1, "TPC event plane");\r
549\r
550 // Choose the one used for v2\r
551\r
552 if(fVZEROEventPlane) eventPlanea = eventPlaneV0;\r
553 if(fVZEROEventPlaneA) eventPlanea = eventPlaneV0A;\r
554 if(fVZEROEventPlaneC) eventPlanea = eventPlaneV0C;\r
555 if(!fVZEROEventPlane) eventPlanea = eventPlaneTPC;\r
556\r
557 Float_t eventPlanesub1a = -100.0;\r
558 Float_t eventPlanesub2a = -100.0;\r
559 Double_t diffsub1sub2a = -100.0;\r
560 Double_t diffsubasubb = -100.0;\r
561 Double_t diffsubasubc = -100.0;\r
562 Double_t diffsubbsubc = -100.0;\r
563 \r
564 diffsubasubb = TMath::Cos(2.*(eventPlaneV0A - eventPlaneV0C));\r
565 diffsubasubc = TMath::Cos(2.*(eventPlaneV0A - eventPlaneTPC));\r
566 diffsubbsubc = TMath::Cos(2.*(eventPlaneV0C - eventPlaneTPC));\r
567 \r
568 qsub1a = vEPa->GetQsub1();\r
569 qsub2a = vEPa->GetQsub2();\r
570 if(qsub1a) eventPlanesub1a = TVector2::Phi_0_2pi(qsub1a->Phi())/2.;\r
571 if(qsub2a) eventPlanesub2a = TVector2::Phi_0_2pi(qsub2a->Phi())/2.;\r
572 if(qsub1a && qsub2a) {\r
573 diffsub1sub2a = TMath::Cos(2.*TVector2::Phi_0_2pi(qsub1a->Phi()/2.- qsub2a->Phi()/2.));\r
574 }\r
575\r
576 AliDebug(1, "Diff");\r
577 \r
578 /////////////////////////////////////////////////////////\r
579 // Cut for event with event plane reconstructed by all\r
580 ////////////////////////////////////////////////////////\r
581 \r
582 if((!standardQ) || (!qsub1a) || (!qsub2a)) {\r
583 PostData(1, fListHist);\r
584 return;\r
585 }\r
586\r
587 AliDebug(1, "Number of tracks");\r
588 \r
589 Int_t nbtracks = fInputEvent->GetNumberOfTracks();\r
590 \r
591 //////////////////////\r
592 // Fill Histos\r
593 //////////////////////\r
594\r
595 fHistEV->Fill(binctt,2.0);\r
596 \r
597 // Fill\r
598 valuensparsea[0] = eventPlaneV0A;\r
599 valuensparsea[1] = eventPlaneV0C;\r
600 valuensparsea[2] = eventPlaneTPC;\r
601 valuensparsea[3] = eventPlaneV0; \r
602 fEventPlane->Fill(&valuensparsea[0]);\r
603 \r
604 if(!fVZEROEventPlane) {\r
605 valuensparsef[0] = diffsub1sub2a;\r
606 fCosRes->Fill(&valuensparsef[0]);\r
607 }\r
608 else {\r
609 valuensparsefbis[0] = diffsubasubb;\r
610 valuensparsefbis[1] = diffsubbsubc;\r
611 valuensparsefbis[2] = diffsubasubc;\r
612 fCosResabc->Fill(&valuensparsefbis[0]);\r
613 }\r
614 \r
615 \r
616 //////////////////////////\r
617 // Loop over ESD track\r
618 //////////////////////////\r
619 \r
620 AliDebug(1, "Loop tracks");\r
621\r
622 for(Int_t k = 0; k < nbtracks; k++){\r
623 \r
624 AliVTrack *track = (AliVTrack *) fInputEvent->GetTrack(k);\r
625 if(!track) continue;\r
626\r
627 if(fAODAnalysis) {\r
628 AliAODTrack *aodtrack = dynamic_cast<AliAODTrack *>(track);\r
629 if(!aodtrack){\r
630 AliError("AOD track is not there");\r
631 PostData(1, fListHist);\r
632 return;\r
633 } \r
634 //printf("Find AOD track on\n");\r
635 if(fUseFlagAOD){\r
636 if(aodtrack->GetFlags() != fFlags) continue; // Only process AOD tracks where the HFE is set\r
637 }\r
638 }\r
639 \r
640 if(fApplyCut) {\r
641 Bool_t survived = kTRUE;\r
642 for(Int_t icut = AliHFEcuts::kStepRecKineITSTPC; icut <= AliHFEcuts::kStepHFEcutsTRD; icut++){\r
643 if(!fHFECuts->CheckParticleCuts(icut + AliHFEcuts::kNcutStepsMCTrack, (TObject *)track)){\r
644 survived = kFALSE;\r
645 break;\r
646 }\r
647 }\r
648 if(!survived) continue;\r
649 }\r
650 \r
651 // Apply PID\r
652 AliHFEpidObject hfetrack;\r
653 if(!fAODAnalysis) hfetrack.SetAnalysisType(AliHFEpidObject::kESDanalysis);\r
654 else hfetrack.SetAnalysisType(AliHFEpidObject::kAODanalysis);\r
655 hfetrack.SetRecTrack(track);\r
656 hfetrack.SetCentrality((Int_t)binct);\r
657 hfetrack.SetPbPb();\r
658 if(!fPID->IsSelected(&hfetrack,0x0,"recTrackCont",fPIDqa)) {\r
659 continue;\r
660 }\r
661 \r
662 /////////////////////////////////////////////////////////\r
663 // Subtract electron candidate from TPC event plane\r
664 ////////////////////////////////////////////////////////\r
665 Float_t eventplanesubtracted = 0.0; \r
666\r
667 if(!fVZEROEventPlane) {\r
668 // Subtract the tracks from the event plane\r
669 Double_t qX = standardQ->X() - vEPa->GetQContributionX(track); //Modify the components: subtract the track you want to look at with your analysis\r
670 Double_t qY = standardQ->Y() - vEPa->GetQContributionY(track); //Modify the components: subtract the track you want to look at with your analysis\r
671 TVector2 newQVectorfortrack;\r
672 newQVectorfortrack.Set(qX,qY);\r
673 eventplanesubtracted = TVector2::Phi_0_2pi(newQVectorfortrack.Phi())/2; \r
674 }\r
675 else eventplanesubtracted = eventPlanea;\r
676\r
677 ////////////////////////////////////////\r
678 // Fill pt and eta for the THnSparseF\r
679 ///////////////////////////////////////\r
680\r
681 valuensparseg[2] = track->Pt();\r
682 valuensparseh[2] = track->Pt();\r
683 if(track->Charge() > 0.0) {\r
684 valuensparseg[3] = 0.2;\r
685 valuensparseh[3] = 0.2;\r
686 }\r
687 else {\r
688 valuensparseg[3] = -0.2;\r
689 valuensparseh[3] = -0.2;\r
690 }\r
691 valuensparseh[4] = track->Eta();\r
692 valuensparseg[4] = track->Eta();\r
693\r
694 ///////////////////////////////\r
695 // Event plane without track\r
696 /////////////////////////////\r
697 Bool_t fillEventPlane = kTRUE;\r
698 if(!fVZEROEventPlane){\r
699 if((!qsub1a) || (!qsub2a)) fillEventPlane = kFALSE;\r
700 if(fSubEtaGapTPC) {\r
701 if(track->Eta() < (- fEtaGap/2.)) eventplanesubtracted = eventPlanesub1a;\r
702 else if(track->Eta() > (fEtaGap/2.)) eventplanesubtracted = eventPlanesub2a;\r
703 else fillEventPlane = kFALSE;\r
704 }\r
705 }\r
706 \r
707 ///////////////////////\r
708 // Calculate deltaphi\r
709 ///////////////////////\r
710 Double_t phitrack = track->Phi(); \r
711 Double_t deltaphi = TVector2::Phi_0_2pi(phitrack - eventplanesubtracted);\r
712 if(deltaphi > TMath::Pi()) deltaphi = deltaphi - TMath::Pi();\r
713 \r
714 /////////////////////\r
715 // Fill THnSparseF\r
716 /////////////////////\r
717\r
718 valuensparseg[0] = deltaphi;\r
719 if(fillEventPlane) fDeltaPhiMaps->Fill(&valuensparseg[0]);\r
720 \r
721 //\r
722 valuensparseh[0] = TMath::Cos(2*TVector2::Phi_mpi_pi(phitrack-eventplanesubtracted));\r
723 if(fillEventPlane) {\r
724 fCosPhiMaps->Fill(&valuensparseh[0]);\r
725 }\r
726 \r
727 }\r
728\r
729\r
730 AliDebug(1, "Post data");\r
731 \r
732 PostData(1, fListHist);\r
733\r
734\r
735 \r
736}\r