1 #include "AliAnalysisTaskVnV0.h"
7 #include "AliInputEventHandler.h"
8 #include "AliAODEvent.h"
9 #include "AliAODVertex.h"
10 #include "AliAODTrack.h"
11 #include "AliCentrality.h"
12 #include "AliVHeader.h"
13 #include "AliAODVZERO.h"
15 #include "AliOADBContainer.h"
18 #include "AliGenHijingEventHeader.h"
19 #include "AliMCEvent.h"
20 #include "AliAODMCHeader.h"
21 #include "AliAODMCParticle.h"
26 //using namespace std;
28 ClassImp(AliAnalysisTaskVnV0)
30 //_____________________________________________________________________________
31 AliAnalysisTaskVnV0::AliAnalysisTaskVnV0():
33 fVtxCut(10.0), // cut on |vertex| < fVtxCut
34 fEtaCut(0.8), // cut on |eta| < fEtaCut
35 fMinPt(0.15), // cut on pt > fMinPt
62 fPID(new AliFlowBayesianPID()),
71 fContAllChargesV0A(NULL),
72 fContAllChargesV0C(NULL),
73 fContAllChargesV0Av3(NULL),
74 fContAllChargesV0Cv3(NULL),
75 fContAllChargesMC(NULL),
82 fContAllChargesMCA(NULL),
83 fContAllChargesMCC(NULL),
84 fContAllChargesMCAv3(NULL),
85 fContAllChargesMCCv3(NULL),
88 fModulationDEDx(kFALSE)
90 // Default constructor (should not be used)
91 fList->SetName("resultsV2");
92 fList2->SetName("resultsV3");
93 fList3->SetName("resultsMC");
94 fList4->SetName("QA");
96 fList->SetOwner(kTRUE);
97 fList2->SetOwner(kTRUE);
98 fList3->SetOwner(kTRUE);
99 fList4->SetOwner(kTRUE);
101 fPID->SetNewTrackParam(); // Better tuning for TOF PID tracking effect in LHC10h
104 //______________________________________________________________________________
105 AliAnalysisTaskVnV0::AliAnalysisTaskVnV0(const char *name):
106 AliAnalysisTaskSE(name),
107 fVtxCut(10.0), // cut on |vertex| < fVtxCut
108 fEtaCut(0.8), // cut on |eta| < fEtaCut
109 fMinPt(0.15), // cut on pt > fMinPt
136 fPID(new AliFlowBayesianPID()),
145 fContAllChargesV0A(NULL),
146 fContAllChargesV0C(NULL),
147 fContAllChargesV0Av3(NULL),
148 fContAllChargesV0Cv3(NULL),
149 fContAllChargesMC(NULL),
156 fContAllChargesMCA(NULL),
157 fContAllChargesMCC(NULL),
158 fContAllChargesMCAv3(NULL),
159 fContAllChargesMCCv3(NULL),
162 fModulationDEDx(kFALSE)
165 DefineOutput(1, TList::Class());
166 DefineOutput(2, TList::Class());
167 DefineOutput(3, TList::Class());
168 DefineOutput(4, TList::Class());
170 // Output slot #1 writes into a TTree
171 fList->SetName("resultsV2");
172 fList2->SetName("resultsV3");
173 fList3->SetName("resultsMC");
174 fList4->SetName("QA");
176 fList->SetOwner(kTRUE);
177 fList2->SetOwner(kTRUE);
178 fList3->SetOwner(kTRUE);
179 fList4->SetOwner(kTRUE);
181 fPID->SetNewTrackParam(); // Better tuning for TOF PID tracking effect in LHC10h
183 //_____________________________________________________________________________
184 AliAnalysisTaskVnV0::~AliAnalysisTaskVnV0()
189 //______________________________________________________________________________
190 void AliAnalysisTaskVnV0::UserCreateOutputObjects()
193 if(fIsMC) fPID->SetMC(kTRUE);
196 // Tree for EP debug (comment the adding to v2 list id not needed)
197 fTree = new TTree("tree","tree");
198 fTree->Branch("evPlAngV0ACor2",&evPlAngV0ACor2,"evPlAngV0ACor2/F");
199 fTree->Branch("evPlAngV0CCor2",&evPlAngV0CCor2,"evPlAngV0CCor2/F");
200 fTree->Branch("evPlAng2",&evPlAng2,"evPlAng2/F");
201 fTree->Branch("fCentrality",&fCentrality,"fCentrality/F");
202 fTree->Branch("evPlAngV0ACor3",&evPlAngV0ACor3,"evPlAngV0ACor3/F");
203 fTree->Branch("evPlAngV0CCor3",&evPlAngV0CCor3,"evPlAngV0CCor3/F");
204 fTree->Branch("evPlAng3",&evPlAng3,"evPlAng3/F");
207 // Container analyses (different steps mean different species)
208 const Int_t nPtBinsTOF = 45;
209 Double_t binsPtTOF[nPtBinsTOF+1] = {0., 0.05, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.45, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.7, 1.8, 1.9, 2.0, 2.25, 2.5, 2.75,3.0,3.25,3.5,3.75,4.0,4.5,5,5.5,6,6.5,7,8,9,10,12,15,20};
210 const Int_t nCentrTOF = 9;
211 const Int_t nPsiTOF = 10;
212 const Int_t nChargeBinsTOFres = 2;
213 const Int_t nCentrTOFres = 9;
214 const Int_t nProbTOFres = 4;
215 const Int_t nPsiTOFres = 10;
216 const Int_t nMaskPID = 3;
218 Int_t nDCABin = 1; // put to 1 not to store this info
219 if(fFillDCA) nDCABin = 3;
220 if(fIsMC && nDCABin>1) nDCABin = 6;
222 0 = DCAxy < 2.4 && all (or Physical primary if MC)
223 1 = DCAxy > 2.4 && all (or Physical primary if MC)
224 2 = DCAxy < 2.4 && not Physical Primary for MC
225 3 = DCAxy > 2.4 && not Physical Primary for MC
228 Int_t binsTOF[6] = {nCentrTOFres,nChargeBinsTOFres,nProbTOFres,nPsiTOFres,nMaskPID,nDCABin};
229 Int_t binsTOFmc[5] = {nCentrTOFres,nChargeBinsTOFres,1,nPsiTOFres,2};
230 Int_t binsTOFmcPureMC[5] = {nCentrTOFres,nChargeBinsTOFres,1,nPsiTOFres,1};
233 fContAllChargesV0A = new AliFlowVZEROResults("v2A",6,binsTOF);
234 fContAllChargesV0A->SetVarRange(0,-0.5,8.5); // centrality
235 fContAllChargesV0A->SetVarRange(1,-1.5,1.5); // charge
236 fContAllChargesV0A->SetVarRange(2,0.6,1.0001);// prob
237 fContAllChargesV0A->SetVarRange(3,-TMath::Pi()/2,TMath::Pi()/2); // Psi
238 fContAllChargesV0A->SetVarRange(4,-0.5,2.5); // pid mask
239 fContAllChargesV0A->SetVarRange(5,-0.5,nDCABin-0.5); // DCA mask
240 fContAllChargesV0A->SetVarName(0,"centrality");
241 fContAllChargesV0A->SetVarName(1,"charge");
242 fContAllChargesV0A->SetVarName(2,"prob");
243 fContAllChargesV0A->SetVarName(3,"#Psi");
244 fContAllChargesV0A->SetVarName(4,"PIDmask");
245 fContAllChargesV0A->SetVarName(5,"DCAbin");
246 if(fV2) fContAllChargesV0A->AddSpecies("all",nPtBinsTOF,binsPtTOF);
247 if(fV2) fContAllChargesV0A->AddSpecies("pi",nPtBinsTOF,binsPtTOF);
248 if(fV2) fContAllChargesV0A->AddSpecies("k",nPtBinsTOF,binsPtTOF);
249 if(fV2) fContAllChargesV0A->AddSpecies("pr",nPtBinsTOF,binsPtTOF);
250 if(fV2) fContAllChargesV0A->AddSpecies("e",nPtBinsTOF,binsPtTOF);
251 if(fV2) fContAllChargesV0A->AddSpecies("d",nPtBinsTOF,binsPtTOF);
252 if(fV2) fContAllChargesV0A->AddSpecies("t",nPtBinsTOF,binsPtTOF);
253 if(fV2) fContAllChargesV0A->AddSpecies("he3",nPtBinsTOF,binsPtTOF);
254 if(fV2) fContAllChargesV0A->AddSpecies("mu",nPtBinsTOF,binsPtTOF);
256 fContAllChargesV0C = new AliFlowVZEROResults("v2C",6,binsTOF);
257 fContAllChargesV0C->SetVarRange(0,-0.5,8.5); // centrality
258 fContAllChargesV0C->SetVarRange(1,-1.5,1.5); // charge
259 fContAllChargesV0C->SetVarRange(2,0.6,1.0001);// prob
260 fContAllChargesV0C->SetVarRange(3,-TMath::Pi()/2,TMath::Pi()/2); // Psi
261 fContAllChargesV0C->SetVarRange(4,-0.5,2.5); // pid mask
262 fContAllChargesV0C->SetVarRange(5,-0.5,nDCABin-0.5); // DCA mask
263 fContAllChargesV0C->SetVarName(0,"centrality");
264 fContAllChargesV0C->SetVarName(1,"charge");
265 fContAllChargesV0C->SetVarName(2,"prob");
266 fContAllChargesV0C->SetVarName(3,"#Psi");
267 fContAllChargesV0C->SetVarName(4,"PIDmask");
268 fContAllChargesV0C->SetVarName(5,"DCAbin");
269 if(fV2) fContAllChargesV0C->AddSpecies("all",nPtBinsTOF,binsPtTOF);
270 if(fV2) fContAllChargesV0C->AddSpecies("pi",nPtBinsTOF,binsPtTOF);
271 if(fV2) fContAllChargesV0C->AddSpecies("k",nPtBinsTOF,binsPtTOF);
272 if(fV2) fContAllChargesV0C->AddSpecies("pr",nPtBinsTOF,binsPtTOF);
273 if(fV2) fContAllChargesV0C->AddSpecies("e",nPtBinsTOF,binsPtTOF);
274 if(fV2) fContAllChargesV0C->AddSpecies("d",nPtBinsTOF,binsPtTOF);
275 if(fV2) fContAllChargesV0C->AddSpecies("t",nPtBinsTOF,binsPtTOF);
276 if(fV2) fContAllChargesV0C->AddSpecies("he3",nPtBinsTOF,binsPtTOF);
277 if(fV2) fContAllChargesV0C->AddSpecies("mu",nPtBinsTOF,binsPtTOF);
279 fList->Add(fContAllChargesV0A);
280 fList->Add(fContAllChargesV0C);
283 fContAllChargesMC = new AliFlowVZEROResults("v2mc",5,binsTOFmc);
284 fContAllChargesMC->SetVarRange(0,-0.5,8.5); // centrality
285 fContAllChargesMC->SetVarRange(1,-1.5,1.5); // charge
286 fContAllChargesMC->SetVarRange(2,0.6,1.0001);// prob
287 fContAllChargesMC->SetVarRange(3,-TMath::Pi()/2,TMath::Pi()/2); // Psi
288 fContAllChargesMC->SetVarRange(4,-0.5,1.5); // pid mask
289 fContAllChargesMC->SetVarName(0,"centrality");
290 fContAllChargesMC->SetVarName(1,"charge");
291 fContAllChargesMC->SetVarName(2,"prob");
292 fContAllChargesMC->SetVarName(3,"#Psi");
293 fContAllChargesMC->SetVarName(4,"PIDmask");
294 fContAllChargesMC->AddSpecies("all",nPtBinsTOF,binsPtTOF);
295 fContAllChargesMC->AddSpecies("pi",nPtBinsTOF,binsPtTOF);
296 fContAllChargesMC->AddSpecies("k",nPtBinsTOF,binsPtTOF);
297 fContAllChargesMC->AddSpecies("pr",nPtBinsTOF,binsPtTOF);
298 fContAllChargesMC->AddSpecies("e",nPtBinsTOF,binsPtTOF);
299 fContAllChargesMC->AddSpecies("mu",nPtBinsTOF,binsPtTOF);
300 fList3->Add(fContAllChargesMC);
302 fContAllChargesMCA = new AliFlowVZEROResults("v2mcA",5,binsTOFmcPureMC);
303 fContAllChargesMCA->SetVarRange(0,-0.5,8.5); // centrality
304 fContAllChargesMCA->SetVarRange(1,-1.5,1.5); // charge
305 fContAllChargesMCA->SetVarRange(2,0.6,1.0001);// prob
306 fContAllChargesMCA->SetVarRange(3,-TMath::Pi()/2,TMath::Pi()/2); // Psi
307 fContAllChargesMCA->SetVarRange(4,-0.5,1.5); // pid mask
308 fContAllChargesMCA->SetVarName(0,"centrality");
309 fContAllChargesMCA->SetVarName(1,"charge");
310 fContAllChargesMCA->SetVarName(2,"prob");
311 fContAllChargesMCA->SetVarName(3,"#Psi");
312 fContAllChargesMCA->SetVarName(4,"PIDmask");
313 fContAllChargesMCA->AddSpecies("all",nPtBinsTOF,binsPtTOF);
314 fContAllChargesMCA->AddSpecies("pi",nPtBinsTOF,binsPtTOF);
315 fContAllChargesMCA->AddSpecies("k",nPtBinsTOF,binsPtTOF);
316 fContAllChargesMCA->AddSpecies("pr",nPtBinsTOF,binsPtTOF);
317 fContAllChargesMCA->AddSpecies("e",nPtBinsTOF,binsPtTOF);
318 fContAllChargesMCA->AddSpecies("mu",nPtBinsTOF,binsPtTOF);
319 fList3->Add(fContAllChargesMCA);
321 fContAllChargesMCC = new AliFlowVZEROResults("v2mcC",5,binsTOFmcPureMC);
322 fContAllChargesMCC->SetVarRange(0,-0.5,8.5); // centrality
323 fContAllChargesMCC->SetVarRange(1,-1.5,1.5); // charge
324 fContAllChargesMCC->SetVarRange(2,0.6,1.0001);// prob
325 fContAllChargesMCC->SetVarRange(3,-TMath::Pi()/2,TMath::Pi()/2); // Psi
326 fContAllChargesMCC->SetVarRange(4,-0.5,1.5); // pid mask
327 fContAllChargesMCC->SetVarName(0,"centrality");
328 fContAllChargesMCC->SetVarName(1,"charge");
329 fContAllChargesMCC->SetVarName(2,"prob");
330 fContAllChargesMCC->SetVarName(3,"#Psi");
331 fContAllChargesMCC->SetVarName(4,"PIDmask");
332 fContAllChargesMCC->AddSpecies("all",nPtBinsTOF,binsPtTOF);
333 fContAllChargesMCC->AddSpecies("pi",nPtBinsTOF,binsPtTOF);
334 fContAllChargesMCC->AddSpecies("k",nPtBinsTOF,binsPtTOF);
335 fContAllChargesMCC->AddSpecies("pr",nPtBinsTOF,binsPtTOF);
336 fContAllChargesMCC->AddSpecies("e",nPtBinsTOF,binsPtTOF);
337 fContAllChargesMCC->AddSpecies("mu",nPtBinsTOF,binsPtTOF);
338 fList3->Add(fContAllChargesMCC);
342 fContAllChargesV0Av3 = new AliFlowVZEROResults("v3A",6,binsTOF);
343 fContAllChargesV0Av3->SetVarRange(0,-0.5,8.5); // centrality
344 fContAllChargesV0Av3->SetVarRange(1,-1.5,1.5); // charge
345 fContAllChargesV0Av3->SetVarRange(2,0.6,1.0001);// prob
346 fContAllChargesV0Av3->SetVarRange(3,-TMath::Pi()/3,TMath::Pi()/3); // Psi
347 fContAllChargesV0Av3->SetVarRange(5,-0.5,nDCABin-0.5); // DCA mask
348 fContAllChargesV0Av3->SetVarRange(4,-0.5,2.5); // pid mask
349 fContAllChargesV0Av3->SetVarName(0,"centrality");
350 fContAllChargesV0Av3->SetVarName(1,"charge");
351 fContAllChargesV0Av3->SetVarName(2,"prob");
352 fContAllChargesV0Av3->SetVarName(3,"#Psi");
353 fContAllChargesV0Av3->SetVarName(4,"PIDmask");
354 fContAllChargesV0Av3->SetVarName(5,"DCAbin");
355 if(fV3) fContAllChargesV0Av3->AddSpecies("all",nPtBinsTOF,binsPtTOF);
356 if(fV3) fContAllChargesV0Av3->AddSpecies("pi",nPtBinsTOF,binsPtTOF);
357 if(fV3) fContAllChargesV0Av3->AddSpecies("k",nPtBinsTOF,binsPtTOF);
358 if(fV3) fContAllChargesV0Av3->AddSpecies("pr",nPtBinsTOF,binsPtTOF);
359 if(fV3) fContAllChargesV0Av3->AddSpecies("e",nPtBinsTOF,binsPtTOF);
360 if(fV3) fContAllChargesV0Av3->AddSpecies("d",nPtBinsTOF,binsPtTOF);
361 if(fV3) fContAllChargesV0Av3->AddSpecies("t",nPtBinsTOF,binsPtTOF);
362 if(fV3) fContAllChargesV0Av3->AddSpecies("he3",nPtBinsTOF,binsPtTOF);
363 if(fV3) fContAllChargesV0Av3->AddSpecies("mu",nPtBinsTOF,binsPtTOF);
365 fContAllChargesV0Cv3 = new AliFlowVZEROResults("v3C",6,binsTOF);
366 fContAllChargesV0Cv3->SetVarRange(0,-0.5,8.5); // centrality
367 fContAllChargesV0Cv3->SetVarRange(1,-1.5,1.5); // charge
368 fContAllChargesV0Cv3->SetVarRange(2,0.6,1.0001);// prob
369 fContAllChargesV0Cv3->SetVarRange(3,-TMath::Pi()/3,TMath::Pi()/3); // Psi
370 fContAllChargesV0Cv3->SetVarRange(4,-0.5,2.5); // pid mask
371 fContAllChargesV0Cv3->SetVarRange(5,-0.5,nDCABin-0.5); // DCA mask
372 fContAllChargesV0Cv3->SetVarName(0,"centrality");
373 fContAllChargesV0Cv3->SetVarName(1,"charge");
374 fContAllChargesV0Cv3->SetVarName(2,"prob");
375 fContAllChargesV0Cv3->SetVarName(3,"#Psi");
376 fContAllChargesV0Cv3->SetVarName(4,"PIDmask");
377 fContAllChargesV0Cv3->SetVarName(5,"DCAbin");
378 if(fV3) fContAllChargesV0Cv3->AddSpecies("all",nPtBinsTOF,binsPtTOF);
379 if(fV3) fContAllChargesV0Cv3->AddSpecies("pi",nPtBinsTOF,binsPtTOF);
380 if(fV3) fContAllChargesV0Cv3->AddSpecies("k",nPtBinsTOF,binsPtTOF);
381 if(fV3) fContAllChargesV0Cv3->AddSpecies("pr",nPtBinsTOF,binsPtTOF);
382 if(fV3) fContAllChargesV0Cv3->AddSpecies("e",nPtBinsTOF,binsPtTOF);
383 if(fV3) fContAllChargesV0Cv3->AddSpecies("d",nPtBinsTOF,binsPtTOF);
384 if(fV3) fContAllChargesV0Cv3->AddSpecies("t",nPtBinsTOF,binsPtTOF);
385 if(fV3) fContAllChargesV0Cv3->AddSpecies("he3",nPtBinsTOF,binsPtTOF);
386 if(fV3) fContAllChargesV0Cv3->AddSpecies("mu",nPtBinsTOF,binsPtTOF);
388 fList2->Add(fContAllChargesV0Av3);
389 fList2->Add(fContAllChargesV0Cv3);
392 fContAllChargesMCAv3 = new AliFlowVZEROResults("v3mcA",5,binsTOFmcPureMC);
393 fContAllChargesMCAv3->SetVarRange(0,-0.5,8.5); // centrality
394 fContAllChargesMCAv3->SetVarRange(1,-1.5,1.5); // charge
395 fContAllChargesMCAv3->SetVarRange(2,0.6,1.0001);// prob
396 fContAllChargesMCAv3->SetVarRange(3,-TMath::Pi()/3,TMath::Pi()/3); // Psi
397 fContAllChargesMCAv3->SetVarRange(4,-0.5,1.5); // pid mask
398 fContAllChargesMCAv3->SetVarName(0,"centrality");
399 fContAllChargesMCAv3->SetVarName(1,"charge");
400 fContAllChargesMCAv3->SetVarName(2,"prob");
401 fContAllChargesMCAv3->SetVarName(3,"#Psi");
402 fContAllChargesMCAv3->SetVarName(4,"PIDmask");
403 fContAllChargesMCAv3->AddSpecies("all",nPtBinsTOF,binsPtTOF);
404 fContAllChargesMCAv3->AddSpecies("pi",nPtBinsTOF,binsPtTOF);
405 fContAllChargesMCAv3->AddSpecies("k",nPtBinsTOF,binsPtTOF);
406 fContAllChargesMCAv3->AddSpecies("pr",nPtBinsTOF,binsPtTOF);
407 fContAllChargesMCAv3->AddSpecies("e",nPtBinsTOF,binsPtTOF);
408 fContAllChargesMCAv3->AddSpecies("mu",nPtBinsTOF,binsPtTOF);
409 fList3->Add(fContAllChargesMCAv3);
411 fContAllChargesMCCv3 = new AliFlowVZEROResults("v3mcC",5,binsTOFmcPureMC);
412 fContAllChargesMCCv3->SetVarRange(0,-0.5,8.5); // centrality
413 fContAllChargesMCCv3->SetVarRange(1,-1.5,1.5); // charge
414 fContAllChargesMCCv3->SetVarRange(2,0.6,1.0001);// prob
415 fContAllChargesMCCv3->SetVarRange(3,-TMath::Pi()/3,TMath::Pi()/3); // Psi
416 fContAllChargesMCCv3->SetVarRange(4,-0.5,1.5); // pid mask
417 fContAllChargesMCCv3->SetVarName(0,"centrality");
418 fContAllChargesMCCv3->SetVarName(1,"charge");
419 fContAllChargesMCCv3->SetVarName(2,"prob");
420 fContAllChargesMCCv3->SetVarName(3,"#Psi");
421 fContAllChargesMCCv3->SetVarName(4,"PIDmask");
422 fContAllChargesMCCv3->AddSpecies("all",nPtBinsTOF,binsPtTOF);
423 fContAllChargesMCCv3->AddSpecies("pi",nPtBinsTOF,binsPtTOF);
424 fContAllChargesMCCv3->AddSpecies("k",nPtBinsTOF,binsPtTOF);
425 fContAllChargesMCCv3->AddSpecies("pr",nPtBinsTOF,binsPtTOF);
426 fContAllChargesMCCv3->AddSpecies("e",nPtBinsTOF,binsPtTOF);
427 fContAllChargesMCCv3->AddSpecies("mu",nPtBinsTOF,binsPtTOF);
428 fList3->Add(fContAllChargesMCCv3);
431 // TProfile for resolutions 3 subevents (V0A, V0C, TPC)
433 fHResTPCv0A2 = new TProfile("hResTPCv0A2","",9,0,9);
434 fHResTPCv0C2 = new TProfile("hResTPCv0C2","",9,0,9);
435 fHResv0Cv0A2 = new TProfile("hResv0Cv0A2","",9,0,9);
437 fList->Add(fHResTPCv0A2);
438 fList->Add(fHResTPCv0C2);
439 fList->Add(fHResv0Cv0A2);
442 fHResTPCv0A3 = new TProfile("hResTPCv0A3","",9,0,9);
443 fHResTPCv0C3 = new TProfile("hResTPCv0C3","",9,0,9);
444 fHResv0Cv0A3 = new TProfile("hResv0Cv0A3","",9,0,9);
446 fList2->Add(fHResTPCv0A3);
447 fList2->Add(fHResTPCv0C3);
448 fList2->Add(fHResv0Cv0A3);
450 // MC as in the dataEP resolution (but using MC tracks)
452 fHResMA2 = new TProfile("hResMA2","",9,0,9);
453 fHResMC2 = new TProfile("hResMC2","",9,0,9);
454 fHResAC2 = new TProfile("hResAC2","",9,0,9);
455 fList3->Add(fHResMA2);
456 fList3->Add(fHResMC2);
457 fList3->Add(fHResAC2);
460 fHResMA3 = new TProfile("hResMA3","",9,0,9);
461 fHResMC3 = new TProfile("hResMC3","",9,0,9);
462 fHResAC3 = new TProfile("hResAC3","",9,0,9);
463 fList3->Add(fHResMA3);
464 fList3->Add(fHResMC3);
465 fList3->Add(fHResAC3);
469 // V0A and V0C event plane distributions
471 fPhiRPv0A = new TH2F("fPhiRPv0Av2","#phi distribution of EP VZERO-A;centrality;#phi (rad)",9,0,9,nPsiTOF,-TMath::Pi()/2,TMath::Pi()/2);
472 fPhiRPv0C = new TH2F("fPhiRPv0Cv2","#phi distribution of EP VZERO-C;centrality;#phi (rad)",9,0,9,nPsiTOF,-TMath::Pi()/2,TMath::Pi()/2);
475 fPhiRPv0Av3 = new TH2F("fPhiRPv0Av3","#phi distribution of EP VZERO-A;centrality;#phi (rad)",9,0,9,nPsiTOF,-TMath::Pi()/3,TMath::Pi()/3);
476 fPhiRPv0Cv3 = new TH2F("fPhiRPv0Cv3","#phi distribution of EP VZERO-C;centrality;#phi (rad)",9,0,9,nPsiTOF,-TMath::Pi()/3,TMath::Pi()/3);
480 const Int_t nDETsignal = 50;
481 Double_t binDETsignal[nDETsignal+1];
482 for(Int_t i=0;i<nDETsignal+1;i++){
483 binDETsignal[i] = -5 + i*10. / nDETsignal;
485 // const Int_t nEta = 5;
486 // Double_t binEta[nEta+1];
487 // for(Int_t i=0;i<nEta+1;i++){
488 // binEta[i] = -1 + i*2. / nEta;
491 const Int_t nDeltaPhi = 5;
492 const Int_t nDeltaPhiV3 = 7;
494 Int_t binsQA[5] = {nCentrTOF,7,5,nDeltaPhi,2};
495 Int_t binsQAv3[5] = {nCentrTOF,7,5,nDeltaPhiV3,2};
498 fQA = new AliFlowVZEROQA("v2AQA",5,binsQA);
499 fQA->SetVarRange(0,-0.5,8.5); // centrality
500 fQA->SetVarRange(1,0,7); // pt
501 fQA->SetVarRange(2,0.,1.0001);// prob
502 fQA->SetVarRange(3,-TMath::Pi(),TMath::Pi()); // Psi
503 fQA->SetVarRange(4,-0.5,1.5); // pid mask
504 fQA->SetVarName(0,"centrality");
505 fQA->SetVarName(1,"p_{t}");
506 fQA->SetVarName(2,"prob");
507 fQA->SetVarName(3,"#Psi");
508 fQA->SetVarName(4,"PIDmask");
509 if(fQAsw && fV2) fQA->AddSpecies("pi",nDETsignal,binDETsignal,nDETsignal,binDETsignal);
510 if(fQAsw && fV2) fQA->AddSpecies("k",nDETsignal,binDETsignal,nDETsignal,binDETsignal);
511 if(fQAsw && fV2) fQA->AddSpecies("pr",nDETsignal,binDETsignal,nDETsignal,binDETsignal);
512 // if(fQAsw && fV2) fQA->AddSpecies("e",nDETsignal,binDETsignal,nDETsignal,binDETsignal);
513 // fQA->AddSpecies("d",nDETsignal,binDETsignal,nDETsignal,binDETsignal);
514 // fQA->AddSpecies("t",nDETsignal,binDETsignal,nDETsignal,binDETsignal);
515 // fQA->AddSpecies("he3",nDETsignal,binDETsignal,nDETsignal,binDETsignal);
517 fQA2 = new AliFlowVZEROQA("v2CQA",5,binsQA);
518 fQA2->SetVarRange(0,-0.5,8.5); // centrality
519 fQA2->SetVarRange(1,0,7); // pt
520 fQA2->SetVarRange(2,0.,1.0001);// prob
521 fQA2->SetVarRange(3,-TMath::Pi(),TMath::Pi()); // Psi
522 fQA2->SetVarRange(4,-0.5,1.5); // pid mask
523 fQA2->SetVarName(0,"centrality");
524 fQA2->SetVarName(1,"p_{t}");
525 fQA2->SetVarName(2,"prob");
526 fQA2->SetVarName(3,"#Psi");
527 fQA2->SetVarName(4,"PIDmask");
528 if(fQAsw && fV2) fQA2->AddSpecies("pi",nDETsignal,binDETsignal,nDETsignal,binDETsignal);
529 if(fQAsw && fV2) fQA2->AddSpecies("k",nDETsignal,binDETsignal,nDETsignal,binDETsignal);
530 if(fQAsw && fV2) fQA2->AddSpecies("pr",nDETsignal,binDETsignal,nDETsignal,binDETsignal);
531 // if(fQAsw && fV2) fQA2->AddSpecies("e",nDETsignal,binDETsignal,nDETsignal,binDETsignal);
532 // fQA2->AddSpecies("d",nDETsignal,binDETsignal,nDETsignal,binDETsignal);
533 // fQA2->AddSpecies("t",nDETsignal,binDETsignal,nDETsignal,binDETsignal);
534 // fQA2->AddSpecies("he3",nDETsignal,binDETsignal,nDETsignal,binDETsignal);
536 fQAv3 = new AliFlowVZEROQA("v3AQA",5,binsQAv3);
537 fQAv3->SetVarRange(0,-0.5,8.5); // centrality
538 fQAv3->SetVarRange(1,0,7); // pt
539 fQAv3->SetVarRange(2,0.,1.0001);// prob
540 fQAv3->SetVarRange(3,-TMath::Pi(),TMath::Pi()); // Psi
541 fQAv3->SetVarRange(4,-0.5,1.5); // pid mask
542 fQAv3->SetVarName(0,"centrality");
543 fQAv3->SetVarName(1,"p_{t}");
544 fQAv3->SetVarName(2,"prob");
545 fQAv3->SetVarName(3,"#Psi");
546 fQAv3->SetVarName(4,"PIDmask");
547 if(fQAsw && fV3) fQAv3->AddSpecies("pi",nDETsignal,binDETsignal,nDETsignal,binDETsignal);
548 // if(fQAsw && fV3) fQAv3->AddSpecies("k",nDETsignal,binDETsignal,nDETsignal,binDETsignal);
549 // if(fQAsw && fV3) fQAv3->AddSpecies("pr",nDETsignal,binDETsignal,nDETsignal,binDETsignal);
550 // if(fQAsw && fV2) fQAv3->AddSpecies("e",nDETsignal,binDETsignal,nDETsignal,binDETsignal);
551 // fQAv3->AddSpecies("d",nDETsignal,binDETsignal,nDETsignal,binDETsignal);
552 // fQAv3->AddSpecies("t",nDETsignal,binDETsignal,nDETsignal,binDETsignal);
553 // fQAv3->AddSpecies("he3",nDETsignal,binDETsignal,nDETsignal,binDETsignal);
555 fQA2v3 = new AliFlowVZEROQA("v3CQA",5,binsQAv3);
556 fQA2v3->SetVarRange(0,-0.5,8.5); // centrality
557 fQA2v3->SetVarRange(1,0,7); // pt
558 fQA2v3->SetVarRange(2,0.,1.0001);// prob
559 fQA2v3->SetVarRange(3,-TMath::Pi(),TMath::Pi()); // Psi
560 fQA2v3->SetVarRange(4,-0.5,1.5); // pid mask
561 fQA2v3->SetVarName(0,"centrality");
562 fQA2v3->SetVarName(1,"p_{t}");
563 fQA2v3->SetVarName(2,"prob");
564 fQA2v3->SetVarName(3,"#Psi");
565 fQA2v3->SetVarName(4,"PIDmask");
566 if(fQAsw && fV3) fQA2v3->AddSpecies("pi",nDETsignal,binDETsignal,nDETsignal,binDETsignal);
567 // if(fQAsw && fV3) fQA2v3->AddSpecies("k",nDETsignal,binDETsignal,nDETsignal,binDETsignal);
568 // if(fQAsw && fV3) fQA2v3->AddSpecies("pr",nDETsignal,binDETsignal,nDETsignal,binDETsignal);
569 // if(fQAsw && fV2) fQA2v3->AddSpecies("e",nDETsignal,binDETsignal,nDETsignal,binDETsignal);
570 // fQA2v3->AddSpecies("d",nDETsignal,binDETsignal,nDETsignal,binDETsignal);
571 // fQA2v3->AddSpecies("t",nDETsignal,binDETsignal,nDETsignal,binDETsignal);
572 // fQA2v3->AddSpecies("he3",nDETsignal,binDETsignal,nDETsignal,binDETsignal);
574 fList->Add(fPhiRPv0A);
575 fList->Add(fPhiRPv0C);
582 fList2->Add(fPhiRPv0Av3);
583 fList2->Add(fPhiRPv0Cv3);
590 // fList->Add(fTree); // comment if not needed
592 const Int_t nDCA = 300;
593 Double_t DCAbin[nDCA+1];
594 for(Int_t i=0;i <= nDCA;i++){
595 DCAbin[i] = -3 +i*6.0/nDCA;
598 char nameHistos[100];
599 for(Int_t iC=0;iC < nCentrBin;iC++){
600 snprintf(nameHistos,100,"fHdcaPtPiCent%i",iC);
601 fHdcaPt[iC][0] = new TH2D(nameHistos,"DCA_{xy} for #pi;p_{t} (GeV/c);DCA_{xy} (cm)",nPtBinsTOF,binsPtTOF,nDCA,DCAbin);
602 snprintf(nameHistos,100,"fHdcaPtKaCent%i",iC);
603 fHdcaPt[iC][1] = new TH2D(nameHistos,"DCA_{xy} for K;p_{t} (GeV/c);DCA_{xy} (cm)",nPtBinsTOF,binsPtTOF,nDCA,DCAbin);
604 snprintf(nameHistos,100,"fHdcaPtPrCent%i",iC);
605 fHdcaPt[iC][2] = new TH2D(nameHistos,"DCA_{xy} for #bar{p};p_{t} (GeV/c);DCA_{xy} (cm)",nPtBinsTOF,binsPtTOF,nDCA,DCAbin);
606 snprintf(nameHistos,100,"fHdcaPtElCent%i",iC);
607 fHdcaPt[iC][3] = new TH2D(nameHistos,"DCA_{xy} for e;p_{t} (GeV/c);DCA_{xy} (cm)",nPtBinsTOF,binsPtTOF,nDCA,DCAbin);
608 snprintf(nameHistos,100,"fHdcaPtDeCent%i",iC);
609 fHdcaPt[iC][4] = new TH2D(nameHistos,"DCA_{xy} for #bar{d};p_{t} (GeV/c);DCA_{xy} (cm)",nPtBinsTOF,binsPtTOF,nDCA,DCAbin);
610 snprintf(nameHistos,100,"fHdcaPtTrCent%i",iC);
611 fHdcaPt[iC][5] = new TH2D(nameHistos,"DCA_{xy} for #bar{t};p_{t} (GeV/c);DCA_{xy} (cm)",nPtBinsTOF,binsPtTOF,nDCA,DCAbin);
612 snprintf(nameHistos,100,"fHdcaPtHeCent%i",iC);
613 fHdcaPt[iC][6] = new TH2D(nameHistos,"DCA_{xy} for #bar{^{3}He};p_{t} (GeV/c);DCA_{xy} (cm)",nPtBinsTOF,binsPtTOF,nDCA,DCAbin);
616 if(fFillDCA && fQAsw){
617 for(Int_t i=0;i<7;i++)
618 for(Int_t iC=0;iC < nCentrBin;iC++)
619 fList4->Add(fHdcaPt[iC][i]);
622 for(Int_t iC=0;iC < nCentrBin;iC++){
623 snprintf(nameHistos,100,"fHdcaPtPiSecCent%i",iC);
624 fHdcaPtSec[iC][0] = new TH2D(nameHistos,"DCA_{xy} for secondary #pi;p_{t} (GeV/c);DCA_{xy} (cm)",nPtBinsTOF,binsPtTOF,nDCA,DCAbin);
625 snprintf(nameHistos,100,"fHdcaPtKaSecCent%i",iC);
626 fHdcaPtSec[iC][1] = new TH2D(nameHistos,"DCA_{xy} for secondary K;p_{t} (GeV/c);DCA_{xy} (cm)",nPtBinsTOF,binsPtTOF,nDCA,DCAbin);
627 snprintf(nameHistos,100,"fHdcaPtPrSecCent%i",iC);
628 fHdcaPtSec[iC][2] = new TH2D(nameHistos,"DCA_{xy} for secondary #bar{p};p_{t} (GeV/c);DCA_{xy} (cm)",nPtBinsTOF,binsPtTOF,nDCA,DCAbin);
629 snprintf(nameHistos,100,"fHdcaPtElSecCent%i",iC);
630 fHdcaPtSec[iC][3] = new TH2D(nameHistos,"DCA_{xy} for secondary e;p_{t} (GeV/c);DCA_{xy} (cm)",nPtBinsTOF,binsPtTOF,nDCA,DCAbin);
631 snprintf(nameHistos,100,"fHdcaPtDeSecCent%i",iC);
632 fHdcaPtSec[iC][4] = new TH2D(nameHistos,"DCA_{xy} for secondary #bar{d};p_{t} (GeV/c);DCA_{xy} (cm)",nPtBinsTOF,binsPtTOF,nDCA,DCAbin);
633 snprintf(nameHistos,100,"fHdcaPtTrSecCent%i",iC);
634 fHdcaPtSec[iC][5] = new TH2D(nameHistos,"DCA_{xy} for secondary #bar{t};p_{t} (GeV/c);DCA_{xy} (cm)",nPtBinsTOF,binsPtTOF,nDCA,DCAbin);
635 snprintf(nameHistos,100,"fHdcaPtHeSecCent%i",iC);
636 fHdcaPtSec[iC][6] = new TH2D(nameHistos,"DCA_{xy} for secondary #bar{^{3}He};p_{t} (GeV/c);DCA_{xy} (cm)",nPtBinsTOF,binsPtTOF,nDCA,DCAbin);
639 if(fFillDCA && fQAsw){
640 for(Int_t i=0;i<7;i++)
641 for(Int_t iC=0;iC < nCentrBin;iC++)
642 fList4->Add(fHdcaPtSec[iC][i]);
646 // Add TProfile Extra QA
647 const Int_t nBinQApid = 2;
648 Int_t binQApid[nBinQApid] = {nCentrTOF,200};
649 const Int_t nbinsigma = 100;
650 Double_t nsigmaQA[nbinsigma+1];
651 for(Int_t i=0;i<nbinsigma+1;i++){
652 nsigmaQA[i] = -10 + 20.0*i/nbinsigma;
654 fContQApid = new AliFlowVZEROResults("qaPID",nBinQApid,binQApid);
655 fContQApid->SetVarRange(0,-0.5,8.5); // centrality
656 fContQApid->SetVarRange(1,0,20); // charge
657 fContQApid->SetVarName(0,"centrality");
658 fContQApid->SetVarName(1,"p_{t}");
659 fContQApid->AddSpecies("piTPC",nbinsigma,nsigmaQA);
660 fContQApid->AddSpecies("piTOF",nbinsigma,nsigmaQA);
661 fContQApid->AddSpecies("kaTPC",nbinsigma,nsigmaQA);
662 fContQApid->AddSpecies("kaTOF",nbinsigma,nsigmaQA);
663 fContQApid->AddSpecies("prTPC",nbinsigma,nsigmaQA);
664 fContQApid->AddSpecies("prTOF",nbinsigma,nsigmaQA);
665 if(fV2) fList->Add(fContQApid);
667 printf("Output creation ok!!\n\n\n\n");
670 if(fV2) PostData(1, fList);
671 if(fV3) PostData(2, fList2);
672 if(fIsMC) PostData(3, fList3);
673 if(fQAsw) PostData(4, fList4);
677 //______________________________________________________________________________
678 void AliAnalysisTaskVnV0::UserExec(Option_t *)
681 // Called for each event
683 fOutputAOD = dynamic_cast<AliAODEvent*>(InputEvent());
685 Printf("%s:%d AODEvent not found in Input Manager",(char*)__FILE__,__LINE__);
690 Int_t run = fOutputAOD->GetRunNumber();
693 // Load the calibrations run dependent
694 OpenInfoCalbration(run);
698 Float_t zvtx = GetVertex(fOutputAOD);
704 AliAODMCHeader *mcHeader = dynamic_cast<AliAODMCHeader*>(fOutputAOD->GetList()->FindObject(AliAODMCHeader::StdBranchName()));
706 AliError("Could not find MC Header in AOD");
712 AliMCEvent* mcEvent = MCEvent();
714 Printf("ERROR: Could not retrieve MC event");
718 Double_t gReactionPlane = -999., gImpactParameter = -999.;
720 AliGenHijingEventHeader* headerH = dynamic_cast<AliGenHijingEventHeader*>(mcEvent->GenEventHeader());
722 //Printf("=====================================================");
723 //Printf("Reaction plane angle: %lf",headerH->ReactionPlaneAngle());
724 //Printf("=====================================================");
725 gReactionPlane = headerH->ReactionPlaneAngle();
726 gImpactParameter = headerH->ImpactParameter();
731 if (TMath::Abs(zvtx) < fVtxCut) {
733 Float_t v0Centr = -10.;
734 Float_t trkCentr = -10.;
735 AliCentrality *centrality = fOutputAOD->GetCentrality();
737 v0Centr = centrality->GetCentralityPercentile("V0M");
738 trkCentr = centrality->GetCentralityPercentile("TRK");
741 if(TMath::Abs(v0Centr - trkCentr) < 5.0){ // consistency cut on centrality selection
742 fPID->SetDetResponse(fOutputAOD, v0Centr); // Set the PID object for each event!!!!
743 Analyze(fOutputAOD,v0Centr); // Do analysis!!!!
745 fCentrality = v0Centr;
746 if(fV2) fTree->Fill();
752 //________________________________________________________________________
753 void AliAnalysisTaskVnV0::Analyze(AliAODEvent* aodEvent, Float_t v0Centr)
755 Float_t mass[8] = {5.10998909999999971e-04, 1.05658000000000002e-01, 1.39570000000000000e-01, 4.93676999999999977e-01, 9.38271999999999995e-01,1.87783699999999998,2.81740199999999996,1.40805449999999999};
757 // Event plane resolution for v2
758 Float_t evPlRes[18] = {0.350582,0.505393,0.607845,0.632913,0.592230,0.502489,0.381717,0.249539,0.133180, // V0A vs. centrality
759 0.446480,0.612705,0.712222,0.736200,0.697907,0.610114,0.481009,0.327402,0.182277};// V0C vs. centrality
762 if (v0Centr >0 && v0Centr < 80){ // analysis only for 0-80% centrality classes
764 if(v0Centr < 5) iC = 0;
765 else if(v0Centr < 10) iC = 1;
766 else if(v0Centr < 20) iC = 2;
767 else if(v0Centr < 30) iC = 3;
768 else if(v0Centr < 40) iC = 4;
769 else if(v0Centr < 50) iC = 5;
770 else if(v0Centr < 60) iC = 6;
771 else if(v0Centr < 70) iC = 7;
774 //reset Q vector info
775 Double_t Qxa2 = 0, Qya2 = 0;
776 Double_t Qxc2 = 0, Qyc2 = 0;
777 Double_t Qxa3 = 0, Qya3 = 0;
778 Double_t Qxc3 = 0, Qyc3 = 0;
780 Int_t nAODTracks = aodEvent->GetNumberOfTracks();
782 AliAODMCHeader *mcHeader = NULL;
783 TClonesArray *mcArray = NULL;
784 Float_t evplaneMC = 0;
786 mcHeader = dynamic_cast<AliAODMCHeader*>(fOutputAOD->GetList()->FindObject(AliAODMCHeader::StdBranchName()));
789 evplaneMC = mcHeader->GetReactionPlaneAngle();
790 if(evplaneMC > TMath::Pi()/2 && evplaneMC <= TMath::Pi()*3/2) evplaneMC-=TMath::Pi();
791 else if(evplaneMC > TMath::Pi()*3/2) evplaneMC-=2*TMath::Pi();
792 mcArray = (TClonesArray*)fOutputAOD->GetList()->FindObject(AliAODMCParticle::StdBranchName());
795 Float_t QxMCv2[3] = {0,0,0};
796 Float_t QyMCv2[3] = {0,0,0};
797 Float_t QxMCv3[3] = {0,0,0};
798 Float_t QyMCv3[3] = {0,0,0};
799 Float_t EvPlaneMCV2[3] = {0,0,0};
800 Float_t EvPlaneMCV3[3] = {0,0,0};
801 Float_t etaMin[3] = {2.8,-3.6,-0.8}; // A-side, C-side M-barrel
802 Float_t etaMax[3] = {4.88,-1.8,0.8};
804 // analysis on MC tracks
805 Int_t nMCtrack = mcArray->GetEntries() ;
807 // EP computation with MC tracks
808 for(Int_t iT=0;iT < nMCtrack;iT++){
809 AliAODMCParticle *mctr = (AliAODMCParticle*) mcArray->At(iT);
810 if(!mctr || !(mctr->IsPrimary()) || !(mctr->Charge()) || mctr->Pt() < 0.2) continue;
812 Float_t eta = mctr->Eta();
814 for(Int_t iD=0;iD<3;iD++){
815 if(eta > etaMin[iD] && eta < etaMax[iD]){
816 Float_t phi = mctr->Phi();
817 QxMCv2[iD] += TMath::Cos(2*phi);
818 QyMCv2[iD] += TMath::Sin(2*phi);
819 QxMCv3[iD] += TMath::Cos(3*phi);
820 QyMCv3[iD] += TMath::Sin(3*phi);
826 EvPlaneMCV2[0] = TMath::ATan2(QyMCv2[0],QxMCv2[0])/2.;
827 EvPlaneMCV2[1] = TMath::ATan2(QyMCv2[1],QxMCv2[1])/2.;
828 EvPlaneMCV2[2] = TMath::ATan2(QyMCv2[2],QxMCv2[2])/2.;
829 fHResMA2->Fill(Double_t(iC), TMath::Cos(2*(EvPlaneMCV2[2]-EvPlaneMCV2[0])));
830 fHResMC2->Fill(Double_t(iC), TMath::Cos(2*(EvPlaneMCV2[2]-EvPlaneMCV2[1])));
831 fHResAC2->Fill(Double_t(iC), TMath::Cos(2*(EvPlaneMCV2[0]-EvPlaneMCV2[1])));
834 EvPlaneMCV3[0] = TMath::ATan2(QyMCv3[0],QxMCv3[0])/3.;
835 EvPlaneMCV3[1] = TMath::ATan2(QyMCv3[1],QxMCv3[1])/3.;
836 EvPlaneMCV3[2] = TMath::ATan2(QyMCv3[2],QxMCv3[2])/3.;
837 fHResMA3->Fill(Double_t(iC), TMath::Cos(3*(EvPlaneMCV3[2]-EvPlaneMCV3[0])));
838 fHResMC3->Fill(Double_t(iC), TMath::Cos(3*(EvPlaneMCV3[2]-EvPlaneMCV3[1])));
839 fHResAC3->Fill(Double_t(iC), TMath::Cos(3*(EvPlaneMCV3[0]-EvPlaneMCV3[1])));
843 Float_t xMCepAv2[5] = {iC,0/*charge*/,1,EvPlaneMCV2[0],1};
844 Float_t xMCepCv2[5] = {iC,0/*charge*/,1,EvPlaneMCV2[1],1};
845 Float_t xMCepAv3[5] = {iC,0/*charge*/,1,EvPlaneMCV3[0],1};
846 Float_t xMCepCv3[5] = {iC,0/*charge*/,1,EvPlaneMCV3[1],1};
848 for(Int_t iT=0;iT < nMCtrack;iT++){
849 AliAODMCParticle *mctr = (AliAODMCParticle*) mcArray->At(iT);
850 if(!mctr || !(mctr->IsPhysicalPrimary()) || !(mctr->Charge()) || TMath::Abs(mctr->Eta()) > 0.8 || mctr->Pt() < 0.2) continue;
851 Int_t iS = TMath::Abs(mctr->GetPdgCode());
852 Int_t charge = mctr->Charge();
853 Float_t pt = mctr->Pt();
854 Float_t phi = mctr->Phi();
869 fContAllChargesMCA->Fill(0,pt, TMath::Cos(2*(phi - EvPlaneMCV2[0])),xMCepAv2);
870 fContAllChargesMCC->Fill(0,pt, TMath::Cos(2*(phi - EvPlaneMCV2[1])),xMCepCv2);
871 fContAllChargesMCAv3->Fill(0,pt, TMath::Cos(3*(phi - EvPlaneMCV3[0])),xMCepAv3);
872 fContAllChargesMCCv3->Fill(0,pt, TMath::Cos(3*(phi - EvPlaneMCV3[1])),xMCepCv3);
875 fContAllChargesMCA->Fill(4,pt, TMath::Cos(2*(phi - EvPlaneMCV2[0])),xMCepAv2);
876 fContAllChargesMCC->Fill(4,pt, TMath::Cos(2*(phi - EvPlaneMCV2[1])),xMCepCv2);
877 fContAllChargesMCAv3->Fill(4,pt, TMath::Cos(3*(phi - EvPlaneMCV3[0])),xMCepAv3);
878 fContAllChargesMCCv3->Fill(4,pt, TMath::Cos(3*(phi - EvPlaneMCV3[1])),xMCepCv3);
881 fContAllChargesMCA->Fill(5,pt, TMath::Cos(2*(phi - EvPlaneMCV2[0])),xMCepAv2);
882 fContAllChargesMCC->Fill(5,pt, TMath::Cos(2*(phi - EvPlaneMCV2[1])),xMCepCv2);
883 fContAllChargesMCAv3->Fill(5,pt, TMath::Cos(3*(phi - EvPlaneMCV3[0])),xMCepAv3);
884 fContAllChargesMCCv3->Fill(5,pt, TMath::Cos(3*(phi - EvPlaneMCV3[1])),xMCepCv3);
887 fContAllChargesMCA->Fill(1,pt, TMath::Cos(2*(phi - EvPlaneMCV2[0])),xMCepAv2);
888 fContAllChargesMCC->Fill(1,pt, TMath::Cos(2*(phi - EvPlaneMCV2[1])),xMCepCv2);
889 fContAllChargesMCAv3->Fill(1,pt, TMath::Cos(3*(phi - EvPlaneMCV3[0])),xMCepAv3);
890 fContAllChargesMCCv3->Fill(1,pt, TMath::Cos(3*(phi - EvPlaneMCV3[1])),xMCepCv3);
893 fContAllChargesMCA->Fill(2,pt, TMath::Cos(2*(phi - EvPlaneMCV2[0])),xMCepAv2);
894 fContAllChargesMCC->Fill(2,pt, TMath::Cos(2*(phi - EvPlaneMCV2[1])),xMCepCv2);
895 fContAllChargesMCAv3->Fill(2,pt, TMath::Cos(3*(phi - EvPlaneMCV3[0])),xMCepAv3);
896 fContAllChargesMCCv3->Fill(2,pt, TMath::Cos(3*(phi - EvPlaneMCV3[1])),xMCepCv3);
899 fContAllChargesMCA->Fill(3,pt, TMath::Cos(2*(phi - EvPlaneMCV2[0])),xMCepAv2);
900 fContAllChargesMCC->Fill(3,pt, TMath::Cos(2*(phi - EvPlaneMCV2[1])),xMCepCv2);
901 fContAllChargesMCAv3->Fill(3,pt, TMath::Cos(3*(phi - EvPlaneMCV3[0])),xMCepAv3);
902 fContAllChargesMCCv3->Fill(3,pt, TMath::Cos(3*(phi - EvPlaneMCV3[1])),xMCepCv3);
910 AliAODVZERO* aodV0 = aodEvent->GetVZEROData();
912 for (Int_t iv0 = 0; iv0 < 64; iv0++) {
913 Double_t phiV0 = TMath::PiOver4()*(0.5 + iv0 % 8);
914 Float_t multv0 = aodV0->GetMultiplicity(iv0);
915 if (iv0 < 32){ // V0C
916 Qxc2 += TMath::Cos(2*phiV0) * multv0*fV0Cpol/fMultV0->GetBinContent(iv0+1);
917 Qyc2 += TMath::Sin(2*phiV0) * multv0*fV0Cpol/fMultV0->GetBinContent(iv0+1);
918 Qxc3 += TMath::Cos(3*phiV0) * multv0*fV0Cpol/fMultV0->GetBinContent(iv0+1);
919 Qyc3 += TMath::Sin(3*phiV0) * multv0*fV0Cpol/fMultV0->GetBinContent(iv0+1);
921 Qxa2 += TMath::Cos(2*phiV0) * multv0*fV0Apol/fMultV0->GetBinContent(iv0+1);
922 Qya2 += TMath::Sin(2*phiV0) * multv0*fV0Apol/fMultV0->GetBinContent(iv0+1);
923 Qxa3 += TMath::Cos(3*phiV0) * multv0*fV0Apol/fMultV0->GetBinContent(iv0+1);
924 Qya3 += TMath::Sin(3*phiV0) * multv0*fV0Apol/fMultV0->GetBinContent(iv0+1);
928 //grab for each centrality the proper histo with the Qx and Qy to do the recentering
929 Double_t Qxamean2 = fMeanQ[iC][1][0];
930 Double_t Qxarms2 = fWidthQ[iC][1][0];
931 Double_t Qyamean2 = fMeanQ[iC][1][1];
932 Double_t Qyarms2 = fWidthQ[iC][1][1];
933 Double_t Qxamean3 = fMeanQv3[iC][1][0];
934 Double_t Qxarms3 = fWidthQv3[iC][1][0];
935 Double_t Qyamean3 = fMeanQv3[iC][1][1];
936 Double_t Qyarms3 = fWidthQv3[iC][1][1];
938 Double_t Qxcmean2 = fMeanQ[iC][0][0];
939 Double_t Qxcrms2 = fWidthQ[iC][0][0];
940 Double_t Qycmean2 = fMeanQ[iC][0][1];
941 Double_t Qycrms2 = fWidthQ[iC][0][1];
942 Double_t Qxcmean3 = fMeanQv3[iC][0][0];
943 Double_t Qxcrms3 = fWidthQv3[iC][0][0];
944 Double_t Qycmean3 = fMeanQv3[iC][0][1];
945 Double_t Qycrms3 = fWidthQv3[iC][0][1];
947 Double_t QxaCor2 = (Qxa2 - Qxamean2)/Qxarms2;
948 Double_t QyaCor2 = (Qya2 - Qyamean2)/Qyarms2;
949 Double_t QxcCor2 = (Qxc2 - Qxcmean2)/Qxcrms2;
950 Double_t QycCor2 = (Qyc2 - Qycmean2)/Qycrms2;
951 Double_t QxaCor3 = (Qxa3 - Qxamean3)/Qxarms3;
952 Double_t QyaCor3 = (Qya3 - Qyamean3)/Qyarms3;
953 Double_t QxcCor3 = (Qxc3 - Qxcmean3)/Qxcrms3;
954 Double_t QycCor3 = (Qyc3 - Qycmean3)/Qycrms3;
956 evPlAngV0ACor2 = TMath::ATan2(QyaCor2, QxaCor2)/2.;
957 evPlAngV0CCor2 = TMath::ATan2(QycCor2, QxcCor2)/2.;
958 evPlAngV0ACor3 = TMath::ATan2(QyaCor3, QxaCor3)/3.;
959 evPlAngV0CCor3 = TMath::ATan2(QycCor3, QxcCor3)/3.;
961 //loop track and get pid
962 for(Int_t iT = 0; iT < nAODTracks; iT++) { // loop on the tracks
963 AliAODTrack* aodTrack = aodEvent->GetTrack(iT);
970 Bool_t trkFlag = aodTrack->TestFilterBit(1); // TPC only tracks
971 if(fFillDCA) trkFlag = aodTrack->TestFilterBit(4); // Global track, DCA loose cut
973 if ((TMath::Abs(aodTrack->Eta()) > fEtaCut) || (aodTrack->Pt() < fMinPt) || (aodTrack->GetTPCNcls() < 70) || !trkFlag){
977 Double_t b[2] = {-99., -99.};
978 Double_t bCov[3] = {-99., -99., -99.};
979 if (!aodTrack->PropagateToDCA(fOutputAOD->GetPrimaryVertex(), fOutputAOD->GetMagneticField(), 100., b, bCov))
982 if (!fFillDCA && ((TMath::Abs(b[0]) > 3.0) || (TMath::Abs(b[1]) > 2.4)))
985 if(fFillDCA && TMath::Abs(b[0]) > 3.0 && TMath::Abs(b[1]) > 3)
988 // re-map the container in an array to do the analysis for V0A and V0C within a loop
989 Float_t evPlAngV0[2] = {evPlAngV0ACor2,evPlAngV0CCor2};
990 AliFlowVZEROResults *contV0[2] = {fContAllChargesV0A,fContAllChargesV0C};
991 AliFlowVZEROQA *QA[2] = {fQA,fQA2};
993 Float_t evPlAngV0v3[2] = {evPlAngV0ACor3,evPlAngV0CCor3};
994 AliFlowVZEROResults *contV0v3[2] = {fContAllChargesV0Av3,fContAllChargesV0Cv3};
995 AliFlowVZEROQA *QAv3[2] = {fQAv3,fQA2v3};
998 if(fIsMC && mcArray){
999 fPID->ComputeProb(aodTrack,fOutputAOD); // compute Bayesian probabilities
1000 Float_t tofMismProbMC = fPID->GetTOFMismProb(); // TOF mismatch probability requested to be lower than 50% for TOF analysis
1002 Float_t xMC[5] = {iC,aodTrack->Charge(),1,evplaneMC,fPID->GetCurrentMask(1)&&tofMismProbMC < 0.5}; // to fill analysis v2 container
1004 Float_t v2mc = TMath::Cos(2*(aodTrack->Phi() - evplaneMC));
1006 fContAllChargesMC->Fill(0,aodTrack->Pt(),v2mc,xMC);
1008 Int_t iS = TMath::Abs(((AliAODMCParticle*)mcArray->At(TMath::Abs(aodTrack->GetLabel())))->GetPdgCode());
1010 fContAllChargesMC->Fill(4,aodTrack->Pt(),v2mc,xMC);
1013 fContAllChargesMC->Fill(5,aodTrack->Pt(),v2mc,xMC);
1016 fContAllChargesMC->Fill(1,aodTrack->Pt(),v2mc,xMC);
1019 fContAllChargesMC->Fill(2,aodTrack->Pt(),v2mc,xMC);
1022 fContAllChargesMC->Fill(3,aodTrack->Pt(),v2mc,xMC);
1026 for(Int_t iV0=0;iV0<2;iV0++){ // loop on A and C side
1028 if(fModulationDEDx) fPID->SetPsiCorrectionDeDx(evPlAngV0[iV0],evPlRes[iV0*8+iC]); // set the PID dE/dx correction as a function of the v2-EP (resolution is needed)
1030 Float_t v2V0 = TMath::Cos(2*(aodTrack->Phi() - evPlAngV0[iV0]));
1031 Float_t v3V0 = TMath::Cos(3*(aodTrack->Phi() - evPlAngV0v3[iV0]));
1033 fPID->ComputeProb(aodTrack,fOutputAOD); // compute Bayesian probabilities
1034 Float_t dedx = fPID->GetDeDx();//aodTrack->GetTPCsignal();
1035 Float_t *probRead = fPID->GetProb();
1036 Float_t prob[8] = {probRead[0],probRead[1],probRead[2],probRead[3],probRead[4],probRead[5],probRead[6],probRead[7]};
1037 Float_t tofMismProb = fPID->GetTOFMismProb(); // TOF mismatch probability requested to be lower than 50% for TOF analysis
1038 Float_t x[6] = {iC,aodTrack->Charge(),1,evPlAngV0[iV0],fPID->GetCurrentMask(1)&&tofMismProb < 0.5,0}; // to fill analysis v2 container
1039 Float_t x3[6] = {iC,aodTrack->Charge(),1,evPlAngV0v3[iV0],fPID->GetCurrentMask(1)&&tofMismProb < 0.5,0}; // to fill analysis v3 container
1041 // in case fill DCA info
1043 if(TMath::Abs(b[0]) > 0.1){
1047 if(TMath::Abs(b[0]) > 0.3){
1051 if(fIsMC && mcArray){
1052 if(!((AliAODMCParticle*)mcArray->At(TMath::Abs(aodTrack->GetLabel())))->IsPhysicalPrimary()){
1060 if(fV2) contV0[iV0]->Fill(0,aodTrack->Pt(),v2V0,x);
1061 if(fV3) contV0v3[iV0]->Fill(0,aodTrack->Pt(),v3V0,x3);
1064 Double_t dedxExp[8];
1066 Double_t inttimes[8] = {0.,0.,0.,0.,0.,0.,0.,0.};
1067 Double_t expTOFsigma[8] = {0.,0.,0.,0.,0.,0.,0.,0.};
1069 Float_t nsigmaTPC[8];
1070 Float_t nsigmaTOF[8];
1072 if(aodTrack->GetDetPid()){ // check the PID object is available
1073 for(Int_t iS=0;iS < 8;iS++){
1074 dedxExp[iS] = fPID->GetExpDeDx(aodTrack,iS);
1075 nsigmaTPC[iS] = (dedx - dedxExp[iS])/(dedxExp[iS]*0.07);
1076 // printf("TPC %i = %f (%f %f)\n",iS, nsigmaTPC[iS],dedx, dedxExp[iS]);
1079 if(fPID->GetCurrentMask(1)){ // if TOF is present
1080 Float_t ptrack = aodTrack->P();
1081 tof = aodTrack->GetTOFsignal() - fPID->GetESDpid()->GetTOFResponse().GetStartTime(ptrack);
1082 aodTrack->GetIntegratedTimes(inttimes);
1084 for(Int_t iS=5;iS < 8;iS++) // extra info for light nuclei
1085 inttimes[iS] = inttimes[0] / ptrack * mass[iS] * TMath::Sqrt(1+ptrack*ptrack/mass[iS]/mass[iS]);
1087 for(Int_t iS=0;iS<8;iS++){
1088 expTOFsigma[iS] = fPID->GetESDpid()->GetTOFResponse().GetExpectedSigma(ptrack, inttimes[iS], mass[iS]);
1089 nsigmaTOF[iS] = (tof - inttimes[iS])/expTOFsigma[iS];
1090 // printf("TOF %i = %f\n",iS, nsigmaTOF[iS]);
1095 Float_t deltaPhiV0 = aodTrack->Phi() - evPlAngV0[iV0];
1096 if(deltaPhiV0 > TMath::Pi()) deltaPhiV0 -= 2*TMath::Pi();
1097 else if(deltaPhiV0 < -TMath::Pi()) deltaPhiV0 += 2*TMath::Pi();
1098 if(deltaPhiV0 > TMath::Pi()) deltaPhiV0 -= 2*TMath::Pi();
1099 else if(deltaPhiV0 < -TMath::Pi()) deltaPhiV0 += 2*TMath::Pi();
1101 Float_t deltaPhiV0v3 = aodTrack->Phi() - evPlAngV0v3[iV0];
1102 if(deltaPhiV0v3 > TMath::Pi()) deltaPhiV0v3 -= 2*TMath::Pi();
1103 else if(deltaPhiV0v3 < -TMath::Pi()) deltaPhiV0v3 += 2*TMath::Pi();
1104 if(deltaPhiV0v3 > TMath::Pi()) deltaPhiV0v3 -= 2*TMath::Pi();
1105 else if(deltaPhiV0v3 < -TMath::Pi()) deltaPhiV0v3 += 2*TMath::Pi();
1107 // variable to fill QA container
1108 Float_t xQA[5] = {iC,aodTrack->Pt(), 0.0,deltaPhiV0,x[4]}; // v2
1109 Float_t xQA3[5] = {iC,aodTrack->Pt(), 0.0,deltaPhiV0v3,x[4]}; // v3
1111 // extra QA TProfiles
1112 if(iV0==1 && aodTrack->Pt() < 20 && fPID->GetCurrentMask(0) && fPID->GetCurrentMask(1)){
1113 Float_t xQApid[2] = {iC,aodTrack->Pt()};
1114 fContQApid->Fill(0,nsigmaTPC[2],v2V0,xQApid); // v2 TPC (V0C) w.r.t pions
1115 fContQApid->Fill(1,nsigmaTOF[2],v2V0,xQApid); // v2 TOF (V0C) w.r.t. pions
1116 fContQApid->Fill(2,nsigmaTPC[3],v2V0,xQApid); // v2 TPC (V0C) w.r.t kaons
1117 fContQApid->Fill(3,nsigmaTOF[3],v2V0,xQApid); // v2 TOF (V0C) w.r.t. kaons
1118 fContQApid->Fill(4,nsigmaTPC[4],v2V0,xQApid); // v2 TPC (V0C) w.r.t protons
1119 fContQApid->Fill(5,nsigmaTOF[4],v2V0,xQApid); // v2 TOF (V0C) w.r.t. protons
1123 if(!(fPID->GetCurrentMask(0)) || !aodTrack->GetDetPid() || dedx < 10. || aodTrack->Pt() < 0 || aodTrack->Pt() > 7){}
1125 if(TMath::Abs(nsigmaTPC[2])<5 && (!(fPID->GetCurrentMask(1)) || (TMath::Abs(nsigmaTOF[2])<5))){ //pi
1128 if(fV2) QA[iV0]->Fill(0,nsigmaTPC[2],nsigmaTOF[2],xQA);
1129 if(fV3) QAv3[iV0]->Fill(0,nsigmaTPC[2],nsigmaTOF[2],xQA3);
1131 if(TMath::Abs(nsigmaTPC[3])<5 && (!(fPID->GetCurrentMask(1)) || (TMath::Abs(nsigmaTOF[3])<5))){ //K
1134 if(fV2) QA[iV0]->Fill(1,nsigmaTPC[3],nsigmaTOF[3],xQA);
1135 // if(fV3) QAv3[iV0]->Fill(1,nsigmaTPC[3],nsigmaTOF[3],xQA3);
1137 if(TMath::Abs(nsigmaTPC[4])<5 && (!(fPID->GetCurrentMask(1)) || (TMath::Abs(nsigmaTOF[4])<5))){//p
1140 if(fV2) QA[iV0]->Fill(2,nsigmaTPC[4],nsigmaTOF[4],xQA);
1141 // if(fV3) QAv3[iV0]->Fill(2,nsigmaTPC[4],nsigmaTOF[4],xQA3);
1143 if(TMath::Abs(nsigmaTPC[0])<5 && (!(fPID->GetCurrentMask(1)) || (TMath::Abs(nsigmaTOF[0])<5))){//e
1146 // if(fV2) QA[iV0]->Fill(3,nsigmaTPC[0],nsigmaTOF[0],xQA);
1147 // if(fV3) QAv3[iV0]->Fill(3,nsigmaTPC[0],nsigmaTOF[0],xQA3);
1149 if(TMath::Abs(nsigmaTPC[5])<5 && (!(fPID->GetCurrentMask(1)) || (TMath::Abs(nsigmaTOF[5])<5))){//d
1152 // if(fV2) QA[iV0]->Fill(4,nsigmaTPC[5],nsigmaTOF[5],xQA);
1153 // if(fV3) QAv3[iV0]->Fill(4,nsigmaTPC[5],nsigmaTOF[5],xQA3);
1155 if(TMath::Abs(nsigmaTPC[6])<5 && (!(fPID->GetCurrentMask(1)) || (TMath::Abs(nsigmaTOF[6])<5))){//t
1158 // if(fV2) QA[iV0]->Fill(5,nsigmaTPC[6],nsigmaTOF[6],xQA);
1159 // if(fV3) QAv3[iV0]->Fill(5,nsigmaTPC[6],nsigmaTOF[6],xQA3);
1161 if(TMath::Abs(nsigmaTPC[7])<5 && (!(fPID->GetCurrentMask(1)) || (TMath::Abs(nsigmaTOF[7])<5))){//He3
1164 // if(fV2) QA[iV0]->Fill(6,nsigmaTPC[7],nsigmaTOF[7],xQA);
1165 // if(fV3) QAv3[iV0]->Fill(6,nsigmaTPC[7],nsigmaTOF[7],xQA3);
1170 if(!(fPID->GetCurrentMask(0)) || !aodTrack->GetDetPid()){} // TPC PID and PID object strictly required (very important!!!!)
1171 else if(prob[2] > 0.6){ // pi
1174 if(TMath::Abs(nsigmaTPC[2]) < 5){ // TPC 5 sigma extra cut to accept the track
1175 if(fV2) contV0[iV0]->Fill(1,aodTrack->Pt(),v2V0,x);
1176 if(fV3) contV0v3[iV0]->Fill(1,aodTrack->Pt(),v3V0,x3);
1177 if(x[2] > 0.9 && x[5] < 3) fHdcaPt[iC][0]->Fill(aodTrack->Pt(),b[0]);
1178 else if(x[2] > 0.9 && fIsMC) fHdcaPtSec[iC][0]->Fill(aodTrack->Pt(),b[0]);
1181 else if(prob[3] > 0.6){ // K
1184 if(TMath::Abs(nsigmaTPC[3]) < 5){
1185 if(fV2) contV0[iV0]->Fill(2,aodTrack->Pt(),v2V0,x);
1186 if(fV3) contV0v3[iV0]->Fill(2,aodTrack->Pt(),v3V0,x3);
1187 if(x[2] > 0.9 && x[5] < 3) fHdcaPt[iC][1]->Fill(aodTrack->Pt(),b[0]);
1188 else if(x[2] > 0.9 && fIsMC) fHdcaPtSec[iC][1]->Fill(aodTrack->Pt(),b[0]);
1191 else if(prob[4] > 0.6){ // p
1194 if(TMath::Abs(nsigmaTPC[4]) < 5){
1195 if(fV2) contV0[iV0]->Fill(3,aodTrack->Pt(),v2V0,x);
1196 if(fV3) contV0v3[iV0]->Fill(3,aodTrack->Pt(),v3V0,x3);
1197 if(x[2] > 0.9 && x[5] < 3 && x[1] < 0) fHdcaPt[iC][2]->Fill(aodTrack->Pt(),b[0]);
1198 else if(x[2] > 0.9 && fIsMC && x[1] < 0) fHdcaPtSec[iC][2]->Fill(aodTrack->Pt(),b[0]);
1201 else if(prob[0] > 0.6){ // e
1204 if(TMath::Abs(nsigmaTPC[0]) < 5){
1205 if(fV2) contV0[iV0]->Fill(4,aodTrack->Pt(),v2V0,x);
1206 if(fV3) contV0v3[iV0]->Fill(4,aodTrack->Pt(),v3V0,x3);
1207 if(x[2] > 0.9 && x[5] < 3) fHdcaPt[iC][3]->Fill(aodTrack->Pt(),b[0]);
1208 else if(x[2] > 0.9 && fIsMC) fHdcaPtSec[iC][3]->Fill(aodTrack->Pt(),b[0]);
1211 else if(prob[1] > 0.6){ // mu
1214 if(TMath::Abs(nsigmaTPC[1]) < 5){
1215 if(fV2) contV0[iV0]->Fill(8,aodTrack->Pt(),v2V0,x);
1216 if(fV3) contV0v3[iV0]->Fill(8,aodTrack->Pt(),v3V0,x3);
1219 else if(prob[5] > 0.6){ // d
1222 if(TMath::Abs(nsigmaTPC[5]) < 5){
1223 if(fV2) contV0[iV0]->Fill(5,aodTrack->Pt(),v2V0,x);
1224 if(fV3) contV0v3[iV0]->Fill(5,aodTrack->Pt(),v3V0,x3);
1225 if(x[2] > 0.9 && x[5] < 3 && x[1] < 0) fHdcaPt[iC][4]->Fill(aodTrack->Pt(),b[0]);
1226 else if(x[2] > 0.9 && fIsMC && x[1] < 0) fHdcaPtSec[iC][4]->Fill(aodTrack->Pt(),b[0]);
1229 else if(prob[6] > 0.6){ // t
1232 if(TMath::Abs(nsigmaTPC[6]) < 5){
1233 if(fV2) contV0[iV0]->Fill(6,aodTrack->Pt(),v2V0,x);
1234 if(fV3) contV0v3[iV0]->Fill(6,aodTrack->Pt(),v3V0,x3);
1235 if(x[2] > 0.9 && x[5] < 3 && x[1] < 0) fHdcaPt[iC][5]->Fill(aodTrack->Pt(),b[0]);
1236 else if(x[2] > 0.9 && fIsMC && x[1] < 0) fHdcaPtSec[iC][5]->Fill(aodTrack->Pt(),b[0]);
1239 else if(prob[7] > 0.6){ // He3
1242 if(TMath::Abs(nsigmaTPC[7]) < 5){
1243 if(fV2) contV0[iV0]->Fill(7,aodTrack->Pt()*2,v2V0,x);
1244 if(fV3) contV0v3[iV0]->Fill(7,aodTrack->Pt()*2,v3V0,x3);
1245 if(x[2] > 0.9 && x[5] < 3 && x[1] < 0) fHdcaPt[iC][6]->Fill(aodTrack->Pt(),b[0]);
1246 else if(x[2] > 0.9 && fIsMC && x[1] < 0) fHdcaPtSec[iC][6]->Fill(aodTrack->Pt(),b[0]);
1250 if(x[4] > 0.5){ // if TOF was present redo TPC stand alone PID to check the PID in the same acceptance (PID mask = 2)
1251 fPID->ResetDetOR(1); // exclude TOF from PID
1254 fPID->ComputeProb(aodTrack,fOutputAOD);
1255 dedx = fPID->GetDeDx();//aodTrack->GetTPCsignal();
1256 probRead = fPID->GetProb();
1258 fPID->SetDetOR(1); // include TOF for PID
1260 Float_t probTPC[8] = {probRead[0],probRead[1],probRead[2],probRead[3],probRead[4],probRead[5],probRead[6],probRead[7]}; // TPC stand alone prbabilities
1262 //pid selection TPC S.A. with TOF matching
1263 x[4]*=2; // set the mask to 2 id TOF is present
1264 if(x[4]<1 || !(fPID->GetCurrentMask(0)) || !aodTrack->GetDetPid()){} // TPC PID S.A. PID in TOF acceptance
1265 else if(probTPC[2] > 0.6){ // pi
1268 if(TMath::Abs(nsigmaTPC[2]) < 5){
1269 if(fV2) contV0[iV0]->Fill(1,aodTrack->Pt(),v2V0,x);
1270 if(fV3) contV0v3[iV0]->Fill(1,aodTrack->Pt(),v3V0,x3);
1273 else if(probTPC[3] > 0.6){ // K
1276 if(TMath::Abs(nsigmaTPC[3]) < 5){
1277 if(fV2) contV0[iV0]->Fill(2,aodTrack->Pt(),v2V0,x);
1278 if(fV3) contV0v3[iV0]->Fill(2,aodTrack->Pt(),v3V0,x3);
1281 else if(probTPC[4] > 0.6){ // p
1284 if(TMath::Abs(nsigmaTPC[4]) < 5){
1285 if(fV2) contV0[iV0]->Fill(3,aodTrack->Pt(),v2V0,x);
1286 if(fV3) contV0v3[iV0]->Fill(3,aodTrack->Pt(),v3V0,x3);
1289 else if(probTPC[0] > 0.6){ // e
1292 if(TMath::Abs(nsigmaTPC[0]) < 5){
1293 if(fV2) contV0[iV0]->Fill(4,aodTrack->Pt(),v2V0,x);
1294 if(fV3) contV0v3[iV0]->Fill(4,aodTrack->Pt(),v3V0,x3);
1297 else if(probTPC[1] > 0.6){ // mu
1300 if(TMath::Abs(nsigmaTPC[1]) < 5){
1301 if(fV2) contV0[iV0]->Fill(8,aodTrack->Pt(),v2V0,x);
1302 if(fV3) contV0v3[iV0]->Fill(8,aodTrack->Pt(),v3V0,x3);
1305 else if(probTPC[5] > 0.6){ // d
1308 if(TMath::Abs(nsigmaTPC[5]) < 5){
1309 if(fV2) contV0[iV0]->Fill(5,aodTrack->Pt(),v2V0,x);
1310 if(fV3) contV0v3[iV0]->Fill(5,aodTrack->Pt(),v3V0,x3);
1313 else if(probTPC[6] > 0.6){ // t
1316 if(TMath::Abs(nsigmaTPC[6]) < 5){
1317 if(fV2) contV0[iV0]->Fill(6,aodTrack->Pt(),v2V0,x);
1318 if(fV3) contV0v3[iV0]->Fill(6,aodTrack->Pt(),v3V0,x3);
1321 else if(probTPC[7] > 0.6){ // He3
1324 if(TMath::Abs(nsigmaTPC[7]) < 5){
1325 if(fV2) contV0[iV0]->Fill(7,aodTrack->Pt()*2,v2V0,x);
1326 if(fV3) contV0v3[iV0]->Fill(7,aodTrack->Pt()*2,v3V0,x3);
1332 // Fill EP distribution histograms
1333 if(fV2) fPhiRPv0A->Fill(iC,evPlAngV0ACor2);
1334 if(fV2) fPhiRPv0C->Fill(iC,evPlAngV0CCor2);
1336 if(fV3) fPhiRPv0Av3->Fill(iC,evPlAngV0ACor3);
1337 if(fV3) fPhiRPv0Cv3->Fill(iC,evPlAngV0CCor3);
1339 // TPC EP needed for resolution studies (TPC subevent)
1340 Double_t Qx2 = 0, Qy2 = 0;
1341 Double_t Qx3 = 0, Qy3 = 0;
1343 for(Int_t iT = 0; iT < nAODTracks; iT++) {
1345 AliAODTrack* aodTrack = aodEvent->GetTrack(iT);
1352 Bool_t trkFlag = aodTrack->TestFilterBit(1);
1354 if ((TMath::Abs(aodTrack->Eta()) > 0.8) || (aodTrack->Pt() < 0.2) || (aodTrack->GetTPCNcls() < 70) || !trkFlag)
1357 Double_t b[2] = {-99., -99.};
1358 Double_t bCov[3] = {-99., -99., -99.};
1359 if (!aodTrack->PropagateToDCA(fOutputAOD->GetPrimaryVertex(), fOutputAOD->GetMagneticField(), 100., b, bCov))
1362 if ((TMath::Abs(b[0]) > 3.0) || (TMath::Abs(b[1]) > 2.4))
1365 Qx2 += TMath::Cos(2*aodTrack->Phi());
1366 Qy2 += TMath::Sin(2*aodTrack->Phi());
1367 Qx3 += TMath::Cos(3*aodTrack->Phi());
1368 Qy3 += TMath::Sin(3*aodTrack->Phi());
1372 evPlAng2 = TMath::ATan2(Qy2, Qx2)/2.;
1373 evPlAng3 = TMath::ATan2(Qy3, Qx3)/3.;
1375 // Fill histograms needed for resolution evaluation
1376 if(fV2) fHResTPCv0A2->Fill(Double_t(iC), TMath::Cos(2*(evPlAng2 - evPlAngV0ACor2)));
1377 if(fV2) fHResTPCv0C2->Fill(Double_t(iC), TMath::Cos(2*(evPlAng2 - evPlAngV0CCor2)));
1378 if(fV2) fHResv0Cv0A2->Fill(Double_t(iC), TMath::Cos(2*(evPlAngV0ACor2 - evPlAngV0CCor2)));
1380 if(fV3) fHResTPCv0A3->Fill(Double_t(iC), TMath::Cos(3*(evPlAng3 - evPlAngV0ACor3)));
1381 if(fV3) fHResTPCv0C3->Fill(Double_t(iC), TMath::Cos(3*(evPlAng3 - evPlAngV0CCor3)));
1382 if(fV3) fHResv0Cv0A3->Fill(Double_t(iC), TMath::Cos(3*(evPlAngV0ACor3 - evPlAngV0CCor3)));
1387 //_____________________________________________________________________________
1388 Float_t AliAnalysisTaskVnV0::GetVertex(AliAODEvent* aod) const
1391 Float_t zvtx = -999;
1393 const AliAODVertex* vtxAOD = aod->GetPrimaryVertex();
1396 if(vtxAOD->GetNContributors()>0)
1397 zvtx = vtxAOD->GetZ();
1401 //_____________________________________________________________________________
1402 void AliAnalysisTaskVnV0::Terminate(Option_t *)
1405 Printf("Terminate()");
1407 //_____________________________________________________________________________
1408 void AliAnalysisTaskVnV0::OpenInfoCalbration(Int_t run){
1409 TString oadbfilename = "$ALICE_ROOT/OADB/PWGCF/VZERO/VZEROcalibEP.root";
1410 TFile *foadb = TFile::Open(oadbfilename.Data());
1413 printf("OADB file %s cannot be opened\n",oadbfilename.Data());
1417 AliOADBContainer *cont = (AliOADBContainer*) foadb->Get("hMultV0BefCorr");
1419 printf("OADB object hMultV0BefCorr is not available in the file\n");
1423 if(!(cont->GetObject(run))){
1424 printf("OADB object hMultV0BefCorr is not available for run %i (used run 137366)\n",run);
1427 fMultV0 = ((TH2F *) cont->GetObject(run))->ProfileX();
1429 TF1 *fpol0 = new TF1("fpol0","pol0");
1430 fMultV0->Fit(fpol0,"","",0,31);
1431 fV0Cpol = fpol0->GetParameter(0);
1432 fMultV0->Fit(fpol0,"","",32,64);
1433 fV0Apol = fpol0->GetParameter(0);
1435 for(Int_t iside=0;iside<2;iside++){
1436 for(Int_t icoord=0;icoord<2;icoord++){
1437 for(Int_t i=0;i < nCentrBin;i++){
1439 if(iside==0 && icoord==0)
1440 snprintf(namecont,100,"hQxc2_%i",i);
1441 else if(iside==1 && icoord==0)
1442 snprintf(namecont,100,"hQxa2_%i",i);
1443 else if(iside==0 && icoord==1)
1444 snprintf(namecont,100,"hQyc2_%i",i);
1445 else if(iside==1 && icoord==1)
1446 snprintf(namecont,100,"hQya2_%i",i);
1448 cont = (AliOADBContainer*) foadb->Get(namecont);
1450 printf("OADB object %s is not available in the file\n",namecont);
1454 if(!(cont->GetObject(run))){
1455 printf("OADB object %s is not available for run %i (used run 137366)\n",namecont,run);
1458 fMeanQ[i][iside][icoord] = ((TH1F *) cont->GetObject(run))->GetMean();
1459 fWidthQ[i][iside][icoord] = ((TH1F *) cont->GetObject(run))->GetRMS();
1462 if(iside==0 && icoord==0)
1463 snprintf(namecont,100,"hQxc3_%i",i);
1464 else if(iside==1 && icoord==0)
1465 snprintf(namecont,100,"hQxa3_%i",i);
1466 else if(iside==0 && icoord==1)
1467 snprintf(namecont,100,"hQyc3_%i",i);
1468 else if(iside==1 && icoord==1)
1469 snprintf(namecont,100,"hQya3_%i",i);
1471 cont = (AliOADBContainer*) foadb->Get(namecont);
1473 printf("OADB object %s is not available in the file\n",namecont);
1477 if(!(cont->GetObject(run))){
1478 printf("OADB object %s is not available for run %i (used run 137366)\n",namecont,run);
1481 fMeanQv3[i][iside][icoord] = ((TH1F *) cont->GetObject(run))->GetMean();
1482 fWidthQv3[i][iside][icoord] = ((TH1F *) cont->GetObject(run))->GetRMS();