]> git.uio.no Git - u/mrichter/AliRoot.git/blame_incremental - PWGPP/AliAnalysisTaskV0QA.cxx
don't lie in the log!
[u/mrichter/AliRoot.git] / PWGPP / AliAnalysisTaskV0QA.cxx
... / ...
CommitLineData
1//------------------------------------------------
2// Implementation of AliAnalysisTaskV0QA class.
3// Calculates the "on the fly" V0 method efficiency
4// for Gamma, K0s, lambda, antilambda
5// Needs MC information
6// Author: A. Marin Revision 18/10/09
7//-------------------------------------------------
8#define AliAnalysisTaskV0QA_cxx
9
10#include "TChain.h"
11#include "TH1.h"
12#include "TH2.h"
13
14
15//#include "TLorentzVector.h"
16
17#include "AliAnalysisTaskSE.h"
18#include "AliTrackReference.h"
19#include "AliKFParticle.h"
20#include "AliKFVertex.h"
21#include "AliVertexerTracks.h"
22#include "AliESDEvent.h"
23#include "AliESDInputHandler.h"
24#include "AliMCEvent.h"
25#include "AliMCEventHandler.h"
26#include "AliStack.h"
27#include "AliESD.h"
28#include "AliLog.h"
29#include "AliCentrality.h"
30#include "AliAnalysisTaskV0QA.h"
31
32ClassImp(AliAnalysisTaskV0QA)
33AliAnalysisTaskV0QA::AliAnalysisTaskV0QA() :AliAnalysisTaskSE(),
34fESD(0),
35fStack(0),
36fMCtruth(0),
37fChain(0),
38fOutputContainer(0),
39fSparseV0(0),
40fSparseK0(0),
41fSparseL(0),
42fSparseAL(0),
43fnEv(0),
44fgDim(500),
45fnConvGamGeant(-1),
46fgConvGamGeantIndex(0),
47feNegConvGamGeantIndex(0),
48fePosConvGamGeantIndex(0),
49feNegConvGamGeantLength(0),
50fePosConvGamGeantLength(0),
51feNegConvGamSingleRecIndex(0),
52fePosConvGamSingleRecIndex(0),
53feNegConvGamV0RecIndex(0),
54fePosConvGamV0RecIndex(0),
55fConvGamV0RecIndexPos(0),
56fConvGamV0RecIndexNeg(0),
57fnDecayLGeant(-1),
58flDecayLGeantIndex(0),
59fpiNegDecayLGeantIndex(0),
60fpPosDecayLGeantIndex(0),
61fpiNegDecayLGeantLength(0),
62fpPosDecayLGeantLength(0),
63fpiNegDecayLSingleRecIndex(0),
64fpPosDecayLSingleRecIndex(0),
65fpiNegDecayLV0RecIndex(0),
66fpPosDecayLV0RecIndex(0),
67fDecayLV0RecIndexPos(0),
68fDecayLV0RecIndexNeg(0),
69fnDecayALGeant(-1),
70falDecayALGeantIndex(0),
71fpiPosDecayALGeantIndex(0),
72fapNegDecayALGeantIndex(0),
73fpiPosDecayALGeantLength(0),
74fapNegDecayALGeantLength(0),
75fpiPosDecayALSingleRecIndex(0),
76fapNegDecayALSingleRecIndex(0),
77fpiPosDecayALV0RecIndex(0),
78fapNegDecayALV0RecIndex(0),
79fDecayALV0RecIndexPos(0),
80fDecayALV0RecIndexNeg(0),
81fnDecayK0Geant(-1),
82fK0DecayK0GeantIndex(0),
83fpiNegDecayK0GeantIndex(0),
84fpiPosDecayK0GeantIndex(0),
85fpiNegDecayK0GeantLength(0),
86fpiPosDecayK0GeantLength(0),
87fpiNegDecayK0SingleRecIndex(0),
88fpiPosDecayK0SingleRecIndex(0),
89fpiNegDecayK0V0RecIndex(0),
90fpiPosDecayK0V0RecIndex(0),
91fDecayK0V0RecIndexPos(0),
92fDecayK0V0RecIndexNeg(0),
93fpiPosK0Index(-1),
94fpiNegK0Index(-1),
95fnTracksPrim(-1),
96ftpcRefit(0),
97fitsRefit(0),
98ftrdRefit(0),
99ftrdOut(0),
100fDim(38),
101fValueL(0),
102fValueAL(0),
103fValueK0(0),
104fValueV0(0),
105fxminV0(0),
106fxmaxV0(0),
107fbinsV0(0),
108fCentralityC(-1),
109fRefTPC(0),
110fclRefsN(0),
111fclRefsP(0)
112
113 {
114 // Default Constructor.
115 for(Int_t i=0;i<100000;i++) fLabelsTPC[i] = 0;
116 }
117
118//________________________________________________________________________
119AliAnalysisTaskV0QA::AliAnalysisTaskV0QA(const char *name) :AliAnalysisTaskSE(name),
120fESD(0),
121fStack(0),
122fMCtruth(0),
123fChain(0),
124fOutputContainer(0),
125fSparseV0(0),
126fSparseK0(0),
127fSparseL(0),
128fSparseAL(0),
129fnEv(0),
130fgDim(500),
131fnConvGamGeant(-1),
132fgConvGamGeantIndex(0),
133feNegConvGamGeantIndex(0),
134fePosConvGamGeantIndex(0),
135feNegConvGamGeantLength(0),
136fePosConvGamGeantLength(0),
137feNegConvGamSingleRecIndex(0),
138fePosConvGamSingleRecIndex(0),
139feNegConvGamV0RecIndex(0),
140fePosConvGamV0RecIndex(0),
141fConvGamV0RecIndexPos(0),
142fConvGamV0RecIndexNeg(0),
143fnDecayLGeant(-1),
144flDecayLGeantIndex(0),
145fpiNegDecayLGeantIndex(0),
146fpPosDecayLGeantIndex(0),
147fpiNegDecayLGeantLength(0),
148fpPosDecayLGeantLength(0),
149fpiNegDecayLSingleRecIndex(0),
150fpPosDecayLSingleRecIndex(0),
151fpiNegDecayLV0RecIndex(0),
152fpPosDecayLV0RecIndex(0),
153fDecayLV0RecIndexPos(0),
154fDecayLV0RecIndexNeg(0),
155fnDecayALGeant(-1),
156falDecayALGeantIndex(0),
157fpiPosDecayALGeantIndex(0),
158fapNegDecayALGeantIndex(0),
159fpiPosDecayALGeantLength(0),
160fapNegDecayALGeantLength(0),
161fpiPosDecayALSingleRecIndex(0),
162fapNegDecayALSingleRecIndex(0),
163fpiPosDecayALV0RecIndex(0),
164fapNegDecayALV0RecIndex(0),
165fDecayALV0RecIndexPos(0),
166fDecayALV0RecIndexNeg(0),
167fnDecayK0Geant(-1),
168fK0DecayK0GeantIndex(0),
169fpiNegDecayK0GeantIndex(0),
170fpiPosDecayK0GeantIndex(0),
171fpiNegDecayK0GeantLength(0),
172fpiPosDecayK0GeantLength(0),
173fpiNegDecayK0SingleRecIndex(0),
174fpiPosDecayK0SingleRecIndex(0),
175fpiNegDecayK0V0RecIndex(0),
176fpiPosDecayK0V0RecIndex(0),
177fDecayK0V0RecIndexPos(0),
178fDecayK0V0RecIndexNeg(0),
179fpiPosK0Index(-1),
180fpiNegK0Index(-1),
181fnTracksPrim(-1),
182ftpcRefit(0),
183fitsRefit(0),
184ftrdRefit(0),
185ftrdOut(0),
186fDim(38),
187fValueL(0),
188fValueAL(0),
189fValueK0(0),
190fValueV0(0),
191fxminV0(0),
192fxmaxV0(0),
193fbinsV0(0),
194fCentralityC(-1),
195fRefTPC(0),
196fclRefsN(0),
197fclRefsP(0)
198
199 {
200
201 fnEv=0;
202 fDim=38;
203
204 fValueK0 = new Double_t[fDim];
205 fValueL = new Double_t[fDim];
206 fValueAL = new Double_t[fDim];
207 fValueV0 = new Double_t[fDim];
208 fxminV0 = new Double_t[fDim];
209 fxmaxV0 = new Double_t[fDim];
210 fbinsV0 = new Int_t[fDim];
211
212 for(Int_t i=0;i<100000;i++) fLabelsTPC[i] = 0;
213
214 fgDim=500;
215 fgConvGamGeantIndex = new Int_t[fgDim];
216 feNegConvGamGeantIndex = new Int_t[fgDim];
217 fePosConvGamGeantIndex = new Int_t[fgDim];
218 feNegConvGamGeantLength = new Float_t[fgDim];
219 fePosConvGamGeantLength = new Float_t[fgDim];
220
221 feNegConvGamSingleRecIndex = new Int_t[fgDim];
222 fePosConvGamSingleRecIndex = new Int_t[fgDim];
223
224 feNegConvGamV0RecIndex = new Int_t[fgDim];
225 fePosConvGamV0RecIndex = new Int_t[fgDim];
226
227 fConvGamV0RecIndexPos = new Int_t[fgDim];
228 fConvGamV0RecIndexNeg = new Int_t[fgDim];
229
230 // Lambda to proton pi-
231 flDecayLGeantIndex = new Int_t[fgDim];
232 fpiNegDecayLGeantIndex = new Int_t[fgDim];
233 fpPosDecayLGeantIndex = new Int_t[fgDim];
234 fpiNegDecayLGeantLength = new Float_t[fgDim];
235 fpPosDecayLGeantLength = new Float_t[fgDim];
236
237 fpiNegDecayLSingleRecIndex = new Int_t[fgDim];
238 fpPosDecayLSingleRecIndex = new Int_t[fgDim];
239
240 fpiNegDecayLV0RecIndex = new Int_t[fgDim];
241 fpPosDecayLV0RecIndex = new Int_t[fgDim];
242
243 fDecayLV0RecIndexPos = new Int_t[fgDim];
244 fDecayLV0RecIndexNeg = new Int_t[fgDim];
245
246 //K0S to pi+ pi-
247 fK0DecayK0GeantIndex = new Int_t[fgDim];
248 fpiNegDecayK0GeantIndex = new Int_t[fgDim];
249 fpiPosDecayK0GeantIndex = new Int_t[fgDim];
250 fpiNegDecayK0GeantLength = new Float_t[fgDim];
251 fpiPosDecayK0GeantLength = new Float_t[fgDim];
252
253 fpiNegDecayK0SingleRecIndex = new Int_t[fgDim];
254 fpiPosDecayK0SingleRecIndex = new Int_t[fgDim];
255
256 fpiNegDecayK0V0RecIndex = new Int_t[fgDim];
257 fpiPosDecayK0V0RecIndex = new Int_t[fgDim];
258
259 fDecayK0V0RecIndexPos = new Int_t[fgDim];
260 fDecayK0V0RecIndexNeg = new Int_t[fgDim];
261
262 //Antilambda to antiproton piplus
263 falDecayALGeantIndex = new Int_t[fgDim];
264 fpiPosDecayALGeantIndex = new Int_t[fgDim];
265 fapNegDecayALGeantIndex = new Int_t[fgDim];
266 fpiPosDecayALGeantLength = new Float_t[fgDim];
267 fapNegDecayALGeantLength = new Float_t[fgDim];
268
269 fpiPosDecayALSingleRecIndex = new Int_t[fgDim];
270 fapNegDecayALSingleRecIndex = new Int_t[fgDim];
271
272 fpiPosDecayALV0RecIndex = new Int_t[fgDim];
273 fapNegDecayALV0RecIndex = new Int_t[fgDim];
274
275 fDecayALV0RecIndexPos = new Int_t[fgDim];
276 fDecayALV0RecIndexNeg = new Int_t[fgDim];
277
278
279
280 fclRefsP = new TClonesArray("AliTrackReference");
281 fclRefsN = new TClonesArray("AliTrackReference");
282
283 // SetESDtrackCuts();
284
285
286 AliLog::SetGlobalLogLevel(AliLog::kError);
287//
288 DefineOutput(1, TList::Class());
289}
290
291//_____________________________________________________
292AliAnalysisTaskV0QA::~AliAnalysisTaskV0QA()
293{
294 // Remove all pointers
295
296
297 delete [] fclRefsP;
298 delete [] fclRefsN;
299
300
301 delete [] fValueK0;
302 delete [] fValueL;
303 delete [] fValueAL;
304 delete [] fValueV0;
305 delete [] fbinsV0;
306 delete [] fxminV0;
307 delete [] fxmaxV0;
308
309 delete [] fgConvGamGeantIndex;
310 delete [] feNegConvGamGeantIndex;
311 delete [] fePosConvGamGeantIndex;
312
313 delete [] feNegConvGamSingleRecIndex;
314 delete [] fePosConvGamSingleRecIndex;
315
316 delete [] feNegConvGamV0RecIndex;
317 delete [] fePosConvGamV0RecIndex;
318 delete [] fConvGamV0RecIndexPos;
319 delete [] fConvGamV0RecIndexNeg;
320
321 delete [] flDecayLGeantIndex;
322 delete [] fpiNegDecayLGeantIndex;
323 delete [] fpPosDecayLGeantIndex;
324
325 delete [] fpiNegDecayLGeantLength;
326 delete [] fpPosDecayLGeantLength;
327 delete [] fpiNegDecayLSingleRecIndex;
328 delete [] fpPosDecayLSingleRecIndex;
329
330 delete [] fpiNegDecayLV0RecIndex;
331 delete [] fpPosDecayLV0RecIndex;
332 delete [] fDecayLV0RecIndexPos;
333 delete [] fDecayLV0RecIndexNeg;
334
335 delete [] falDecayALGeantIndex;
336 delete [] fpiPosDecayALGeantIndex;
337 delete [] fapNegDecayALGeantIndex;
338
339 delete [] fpiPosDecayALGeantLength;
340 delete [] fapNegDecayALGeantLength;
341 delete [] fpiPosDecayALSingleRecIndex;
342 delete [] fapNegDecayALSingleRecIndex;
343
344 delete [] fpiPosDecayALV0RecIndex;
345 delete [] fapNegDecayALV0RecIndex;
346 delete [] fDecayALV0RecIndexPos;
347 delete [] fDecayALV0RecIndexNeg;
348
349
350 delete [] fpiNegDecayK0GeantIndex;
351 delete [] fpiPosDecayK0GeantIndex;
352
353 delete [] fpiNegDecayK0GeantLength;
354 delete [] fpiPosDecayK0GeantLength;
355 delete [] fpiNegDecayK0SingleRecIndex;
356 delete [] fpiPosDecayK0SingleRecIndex;
357
358 delete [] fpiNegDecayK0V0RecIndex;
359 delete [] fpiPosDecayK0V0RecIndex;
360
361 delete [] fDecayK0V0RecIndexPos;
362 delete [] fDecayK0V0RecIndexNeg;
363
364}
365
366
367//________________________________________________________________________
368void AliAnalysisTaskV0QA::UserCreateOutputObjects() {
369 // Create Ouptut objects
370
371 for(Int_t d=0;d<fDim;d++){
372 fbinsV0[d]=70;
373 }
374 fxminV0[0]= 0; // 1/sqrt(pt) Gamma geant
375 fxmaxV0[0]= 8;
376
377
378 fxminV0[1]=-2.5; // eta Gamma Geant
379 fxmaxV0[1]= 1.5;
380
381
382 fxminV0[2]=-2*TMath::Pi(); // phi Gamma geant
383 fxmaxV0[2]= TMath::Pi();
384
385
386 fxminV0[3]= 0; // r geant
387 fxmaxV0[3]= 200;
388
389
390 fxminV0[4]=-250; // z geant
391 fxmaxV0[4]= 250;
392
393
394 fxminV0[5]= 0; // 1/sqrt(pt) Geant Pos
395 fxmaxV0[5]= 8;
396
397
398 fxminV0[6]=-2.5; // eta geant Pos
399 fxmaxV0[6]= 1.5;
400
401
402 fxminV0[7]=-2*TMath::Pi(); // phi Geant Pos
403 fxmaxV0[7]= TMath::Pi();
404
405
406 fxminV0[8]=0; // Track Length TPC Geant Pos
407 fxmaxV0[8]= 200;
408
409
410 fxminV0[9]= 0; // 1/sqrt(pt) Geant Neg
411 fxmaxV0[9]= 8;
412
413
414 fxminV0[10]=-2.5; // eta Geant Neg
415 fxmaxV0[10]= 1.5;
416
417
418 fxminV0[11]=-2*TMath::Pi(); // phi Geant Neg
419 fxmaxV0[11]= TMath::Pi();
420
421
422 fxminV0[12]=0; // Track Length TPC Geant Neg
423 fxmaxV0[12]= 200;
424
425
426
427 //-----------Rec single variables
428
429 fxminV0[13]= -0.5; // (pt-ptGeant)/ptGeant rec Pos
430 fxmaxV0[13]= 0.5;
431
432
433 fxminV0[14]=-2.5; // eta rec Pos
434 fxmaxV0[14]= 1.5;
435
436
437 fxminV0[15]=-2*TMath::Pi(); // phi rec Pos
438 fxmaxV0[15]= TMath::Pi();
439
440
441 fxminV0[16]= 0; // Impact parameter rec Pos
442 fxmaxV0[16]= 100;
443
444
445 fxminV0[17]= 0; // nsigmas Impact parameter rec Pos
446 fxmaxV0[17]= 100;
447
448
449
450 fxminV0[18]= -1; // Ncls ITS rec Pos
451 fxmaxV0[18]= 6;
452
453
454 fxminV0[19]= -1; // Ncls TPC rec Pos
455 fxmaxV0[19]= 180;
456
457
458 fxminV0[20]= -2; // Status Single TPC rec Pos
459 fxmaxV0[20]= 2;
460
461
462 fxminV0[21]= -0.5; // (pt-ptGeant)/ptGeant rec Neg
463 fxmaxV0[21]= 0.5;
464
465
466 fxminV0[22]=-2.5; // eta rec Neg
467 fxmaxV0[22]= 1.5;
468
469
470 fxminV0[23]=-2*TMath::Pi(); // phi rec Neg
471 fxmaxV0[23]= TMath::Pi();
472
473
474 fxminV0[24]= 0; // Impact parameter rec Neg
475 fxmaxV0[24]= 100;
476
477
478 fxminV0[25]= 0; // Sigmas Impact parameter rec Neg
479 fxmaxV0[25]= 100;
480
481
482
483 fxminV0[26]= -1; // Ncls ITS rec Neg
484 fxmaxV0[26]= 6;
485
486
487 fxminV0[27]= -1; // Ncls TPC rec Neg
488 fxmaxV0[27]= 180;
489
490
491 fxminV0[28]= -2; // Status Single TPC rec Neg
492 fxmaxV0[28]= 2;
493
494 // ------------------Rec V0 variables
495
496
497
498 fxminV0[29]= -0.5; // (pt-ptGeant)/ptGeant rec V0 Pos
499 fxmaxV0[29]= 0.5;
500
501
502 fxminV0[30]=-2.5; // eta rec V0 Pos
503 fxmaxV0[30]= 1.5;
504
505
506 fxminV0[31]=-2*TMath::Pi(); // phi rec V0 Pos
507 fxmaxV0[31]= TMath::Pi();
508
509
510 fxminV0[32]= -2; // Status V0 TPC rec Pos
511 fxmaxV0[32]= 2;
512
513
514
515
516 fxminV0[33]= -0.5; // 1/sqrt(pt) rec V0 Neg
517 fxmaxV0[33]= 0.5;
518
519
520 fxminV0[34]=-2.5; // eta rec V0 Neg
521 fxmaxV0[34]= 1.5;
522
523
524 fxminV0[35]=-2*TMath::Pi(); // phi rec V0 Neg
525 fxmaxV0[35]= TMath::Pi();
526
527
528
529 fxminV0[36]= -2; // Status V0 TPC rec Neg
530 fxmaxV0[36]= 2;
531
532 fxminV0[37]= -1; // Centrality
533 fxmaxV0[37]= 10;
534
535
536
537 TString axisName[38]={"ptGammaGeant",
538 "etaGammaGeant",
539 "phiGammaGeant",
540 "rGeant",
541 "zGeant",
542 "ptEPlusGeant",
543 "etaEPlusGeant",
544 "phiEPlusGeant",
545 "TPCTrackLengthEPlusGeant",
546 "ptEMinusGeant",
547 "etaEMinusGeant",
548 "phiEMinusGeant",
549 "TPCTrackLengthEMinusGeant",
550 "ptResEPlusRecSingle",
551 "etaEPlusRecSingle",
552 "phiEPlusRecSingle",
553 "bXYZEPlusRecSingle",
554 "sigbXYZEPlusRecSingle",
555 "NclsITSEPlusRecSingle",
556 "NclsTPCEPlusRecSingle",
557 "statusRecSinglePos",
558 "ptResEMinusRecSingle",
559 "etaEMinusRecSingle",
560 "phiEMinusRecSingle",
561 "bXYZEMinusRecSingle",
562 "sigbXYZEMinusRecSingle",
563 "NclsITSEMinusRecSingle",
564 "NclsTPCEMinusRecSingle",
565 "statusRecSingleNeg",
566 "ptResEPlusRecV0",
567 "etaEPlusRecV0",
568 "phiEPlusRecV0",
569 "statusV0SinglePos",
570 "ptResEMinusRecV0",
571 "etaEMinusRecV0",
572 "phiEMinusRecV0",
573 "statusV0SingleNeg",
574 "centrality"};
575
576
577 fSparseV0= new THnSparseF("sparseV0","sparseV0",fDim,fbinsV0,fxminV0,fxmaxV0);
578
579 for (Int_t iaxis=0; iaxis<fDim; iaxis++){
580 fSparseV0->GetAxis(iaxis)->SetName(axisName[iaxis]);
581 fSparseV0->GetAxis(iaxis)->SetTitle(axisName[iaxis]);
582 }
583
584 TString axisNameK0[38]={"ptK0Geant",
585 "etaK0Geant",
586 "phiK0Geant",
587 "rGeant",
588 "zGeant",
589 "ptPiPlusGeant",
590 "etaPiPlusGeant",
591 "phiPiPlusGeant",
592 "TPCTrackLengthPiPlusGeant",
593 "ptPiMinusGeant",
594 "etaPiMinusGeant",
595 "phiPiMinusGeant",
596 "TPCTrackLengthPiMinusGeant",
597 "ptResPiPlusRecSingle",
598 "etaPiPlusRecSingle",
599 "phiPiPlusRecSingle",
600 "bXYZPiPlusRecSingle",
601 "sigbXYZPiPlusRecSingle",
602 "NclsITSPiPlusRecSingle",
603 "NclsTPCPiPlusRecSingle",
604 "statusRecSinglePos",
605 "ptResPiMinusRecSingle",
606 "etaPiMinusRecSingle",
607 "phiPiMinusRecSingle",
608 "bXYZPiMinusRecSingle",
609 "sigbXYZPiMinusRecSingle",
610 "NclsITSPiMinusRecSingle",
611 "NclsTPCPiMinusRecSingle",
612 "statusRecSingleNeg",
613 "ptResPiPlusRecV0",
614 "etaPiPlusRecV0",
615 "phiPiPlusRecV0",
616 "statusRecV0Pos",
617 "ptResPiMinusRecV0",
618 "etaPiMinusRecV0",
619 "phiPiMinusRecV0",
620 "statusRecV0Neg",
621 "centrality"};
622
623
624
625 fSparseK0= new THnSparseF("sparseK0","sparseK0",fDim,fbinsV0,fxminV0,fxmaxV0);
626 for (Int_t iaxis=0; iaxis<fDim; iaxis++){
627 fSparseK0->GetAxis(iaxis)->SetName(axisNameK0[iaxis]);
628 fSparseK0->GetAxis(iaxis)->SetTitle(axisNameK0[iaxis]);
629 }
630
631 TString axisNameL[38]={"ptLGeant",
632 "etaLGeant",
633 "phiLGeant",
634 "rGeant",
635 "zGeant",
636 "ptPPlusGeant",
637 "etaPPlusGeant",
638 "phiPPlusGeant",
639 "TPCTrackLengthPPlusGeant",
640 "ptPiMinusGeant",
641 "etaPiMinusGeant",
642 "phiPiMinusGeant",
643 "TPCTrackLengthPiMinusGeant",
644 "ptResPPlusRecSingle",
645 "etaPPlusRecSingle",
646 "phiPPlusRecSingle",
647 "bXYZPPlusRecSingle",
648 "sigbXYZPPlusRecSingle",
649 "NclsITSPPlusRecSingle",
650 "NclsTPCPPlusRecSingle",
651 "statusRecSinglePos",
652 "ptResPiMinusRecSingle",
653 "etaPiMinusRecSingle",
654 "phiPiMinusRecSingle",
655 "bXYZPiMinusRecSingle",
656 "sigbXYZPiMinusRecSingle",
657 "NclsITSPiMinusRecSingle",
658 "NclsTPCPiMinusRecSingle",
659 "statusRecSingleNeg",
660 "ptResPPlusRecV0",
661 "etaPPlusRecV0",
662 "phiPPlusRecV0",
663 "statusRecV0Pos",
664 "ptResPiMinusRecV0",
665 "etaPiMinusRecV0",
666 "phiPiMinusRecV0",
667 "statusRecV0Neg",
668 "centrality"};
669
670
671 fSparseL= new THnSparseF("sparseL","sparseL",fDim,fbinsV0,fxminV0,fxmaxV0);
672 for (Int_t iaxis=0; iaxis<fDim; iaxis++){
673 fSparseL->GetAxis(iaxis)->SetName(axisNameL[iaxis]);
674 fSparseL->GetAxis(iaxis)->SetTitle(axisNameL[iaxis]);
675 }
676
677 TString axisNameAL[38]={"ptALGeant",
678 "etaALGeant",
679 "phiALGeant",
680 "rGeant",
681 "zGeant",
682 "ptPiPluusGeant",
683 "etaPiPlusGeant",
684 "phiPiPlusGeant",
685 "TPCTrackLengthPiPlusGeant",
686 "ptAPMinusGeant",
687 "etaAPMinusGeant",
688 "phiAPMinusGeant",
689 "TPCTrackLengthAPMinusGeant",
690 "ptResPiPlusRecSingle",
691 "etaPiPlusRecSingle",
692 "phiPiPlusRecSingle",
693 "bXYZPiPlusRecSingle",
694 "sigbXYZPiPlusRecSingle",
695 "NclsITSPiPlusRecSingle",
696 "NclsTPCPiPlusRecSingle",
697 "statusRecSinglePos",
698 "ptResAPMinusRecSingle",
699 "etaAPMinusRecSingle",
700 "phiAPMinusRecSingle",
701 "bXYZAPMinusRecSingle",
702 "sigbXYZAPMinusRecSingle",
703 "NclsITSAPMinusRecSingle",
704 "NclsTPCAPMinusRecSingle",
705 "statusRecSingleNeg",
706 "ptResPiPlusRecV0",
707 "etaPiPlusRecV0",
708 "phiPiPlusRecV0",
709 "statusRecV0Pos",
710 "ptResAPMinusRecV0",
711 "etaAPMinusRecV0",
712 "phiAPMinusRecV0",
713 "statusRecV0Neg",
714 "centrality"};
715
716
717
718 fSparseAL= new THnSparseF("sparseAL","sparseAL",fDim,fbinsV0,fxminV0,fxmaxV0);
719 for (Int_t iaxis=0; iaxis<fDim; iaxis++){
720 fSparseAL->GetAxis(iaxis)->SetName(axisNameAL[iaxis]);
721 fSparseAL->GetAxis(iaxis)->SetTitle(axisNameAL[iaxis]);
722 }
723
724 // create output container
725
726 fOutputContainer = new TList() ;
727 fOutputContainer->SetName(GetName()) ;
728
729
730 fOutputContainer->Add(fSparseV0);
731 fOutputContainer->Add(fSparseK0);
732 fOutputContainer->Add(fSparseL);
733 fOutputContainer->Add(fSparseAL);
734
735}
736
737//________________________________________________________________________
738void AliAnalysisTaskV0QA::UserExec(Option_t *) {
739 // Execution of the Task
740
741 fESD = dynamic_cast<AliESDEvent*>(InputEvent());
742
743 if (!fESD) {
744 //cout<< "not a tree"<< endl;
745 return;
746 }
747
748 fnEv++;
749
750
751 //Get MC data
752 fMCtruth = (AliMCEventHandler*)((AliAnalysisManager::GetAnalysisManager())->GetMCtruthEventHandler());
753
754 // Double_t vertex[3];
755 Double_t maxVertex=150.;
756 Double_t maxEta=0.9;
757 Double_t lineCutZRSlope=tan(2*atan(exp(-maxEta)));
758 Double_t lineCutZValue=7.;
759 Int_t elecGIndex=-1;
760 Int_t posiGIndex=-1;
761 Int_t pPosLIndex=-1;
762 Int_t piNegLIndex=-1;
763
764 Int_t apNegALIndex=-1;
765 Int_t piPosALIndex=-1;
766
767 fnConvGamGeant=-1;
768 fnDecayK0Geant=-1;
769 fnDecayLGeant=-1;
770 fnDecayALGeant=-1;
771
772 for(Int_t i=0; i<fgDim;i++){
773 fgConvGamGeantIndex[i] = -1;
774 feNegConvGamGeantIndex[i] = -1;
775 fePosConvGamGeantIndex[i] = -1;
776
777 feNegConvGamSingleRecIndex[i] = -1;
778 fePosConvGamSingleRecIndex[i] = -1;
779
780 feNegConvGamV0RecIndex[i] = -1;
781 fePosConvGamV0RecIndex[i] = -1;
782 fConvGamV0RecIndexPos[i] = -1;
783 fConvGamV0RecIndexNeg[i] = -1;
784
785
786 fK0DecayK0GeantIndex[i] = -1;
787 fpiNegDecayK0GeantIndex[i] = -1;
788 fpiPosDecayK0GeantIndex[i] = -1;
789
790 fpiNegDecayK0SingleRecIndex[i] = -1;
791 fpiPosDecayK0SingleRecIndex[i] = -1;
792
793 fpiNegDecayK0V0RecIndex[i] = -1;
794 fpiPosDecayK0V0RecIndex[i] = -1;
795 fDecayK0V0RecIndexPos[i] = -1;
796 fDecayK0V0RecIndexNeg[i] = -1;
797
798
799 flDecayLGeantIndex[i] = -1;
800 fpiNegDecayLGeantIndex[i] = -1;
801 fpPosDecayLGeantIndex[i] = -1;
802
803 fpiNegDecayLSingleRecIndex[i] = -1;
804 fpPosDecayLSingleRecIndex[i] = -1;
805
806 fpiNegDecayLV0RecIndex[i] = -1;
807 fpPosDecayLV0RecIndex[i] = -1;
808 fDecayLV0RecIndexPos[i] = -1;
809 fDecayLV0RecIndexNeg[i] = -1;
810
811 // Antilambda
812 falDecayALGeantIndex[i] = -1;
813 fpiPosDecayALGeantIndex[i] = -1;
814 fapNegDecayALGeantIndex[i] = -1;
815
816 fpiPosDecayALSingleRecIndex[i] = -1;
817 fapNegDecayALSingleRecIndex[i] = -1;
818
819 fpiPosDecayALV0RecIndex[i] = -1;
820 fapNegDecayALV0RecIndex[i] = -1;
821 fDecayALV0RecIndexPos[i] = -1;
822 fDecayALV0RecIndexNeg[i] = -1;
823
824
825 }
826
827 Int_t doMC=1;
828
829 AliKFVertex primVtx(*(fESD->GetPrimaryVertex()));
830 fnTracksPrim=primVtx.GetNContributors();
831
832
833 if(fMCtruth && fnTracksPrim>0){
834
835 fStack = fMCtruth->MCEvent()->Stack();
836
837
838 if ( doMC){
839
840 for (Int_t iTracks = 0; iTracks < fMCtruth->MCEvent()->GetNumberOfTracks(); iTracks++) {
841
842
843 TParticle* particle = fStack->Particle(iTracks);
844
845
846
847 if (!particle) {
848 Printf("ERROR: Could not receive particle %d (mc loop)", iTracks);
849 continue;
850 }
851
852 if(particle->Pt()<0.050) continue;
853 if(TMath::Abs(particle->Eta())> maxEta) continue;
854
855
856 if (particle->GetPdgCode()== 22){
857
858
859 if(particle->GetMother(0) >-1 && fStack->Particle(particle->GetMother(0))->GetPdgCode() == 22){
860 continue; // no photon as mothers!
861 }
862
863 if(particle->GetMother(0) >= fStack->GetNprimary()){
864 continue; // the gamma has a mother, and it is not a primary particle
865 }
866
867 TParticle* ePos = NULL;
868 TParticle* eNeg = NULL;
869 elecGIndex=-1;
870 posiGIndex=-1;
871
872 if(particle->GetNDaughters() >= 2){
873 for(Int_t daughterIndex=particle->GetFirstDaughter();daughterIndex<=particle->GetLastDaughter();daughterIndex++){
874 TParticle *tmpDaughter = fStack->Particle(daughterIndex);
875 if(tmpDaughter->GetUniqueID() == 5){
876 if(tmpDaughter->GetPdgCode() == 11){
877 eNeg = tmpDaughter;
878 elecGIndex=daughterIndex;
879 }
880 else if(tmpDaughter->GetPdgCode() == -11){
881 ePos = tmpDaughter;
882 posiGIndex=daughterIndex;
883 }
884 }
885 }
886 }
887
888
889 if(ePos == NULL || eNeg == NULL){ // means we do not have two daughters from pair production
890 continue;
891 }
892
893 if(TMath::Abs(ePos->Eta())> maxEta || TMath::Abs(eNeg->Eta())> maxEta){
894 continue;
895 }
896
897 if(ePos->R()> maxVertex ){
898 continue; // cuts on distance from collision point
899 }
900
901
902 if( (TMath::Abs(ePos->Vz()) * lineCutZRSlope - lineCutZValue) > ePos->R() ){
903 continue; // line cut to exclude regions where we do not reconstruct
904 }
905
906
907 // Looking at the existance of TPC references
908
909 TParticle* ePosTPC;
910 fMCtruth->MCEvent()->GetParticleAndTR(posiGIndex,ePosTPC,fclRefsP);
911
912 AliMCParticle *mcParticlePos = (AliMCParticle*) (fMCtruth->MCEvent()->GetTrack(posiGIndex));
913 if(!mcParticlePos) continue;
914
915 Int_t counter;
916 Float_t tpcTrackLengthePos = mcParticlePos->GetTPCTrackLength(fESD->GetMagneticField(),0.05,counter,3.0);
917
918
919
920 int nPointsP = fclRefsP->GetEntries();
921
922 if (fRefTPC) delete fRefTPC;fRefTPC=NULL;
923 fRefTPC = new TObjArray();
924
925 for(int iPoint=0; iPoint<nPointsP; iPoint++) {
926 AliTrackReference *ref = (AliTrackReference*)fclRefsP->At(iPoint);
927 if (ref->DetectorId() == AliTrackReference::kTPC) fRefTPC->Add(new AliTrackReference(*ref));
928 }
929
930 fRefTPC->Sort();
931
932 for(int i=0; i<fRefTPC->GetEntries(); i++) {
933 AliTrackReference *ref = (AliTrackReference*)(*fRefTPC)[i];
934 fLabelsTPC[i] = ref->GetTrack();
935 }
936 int labelPosRefs=0;
937 for(int iPoint=GetTPCReference(iTracks);iPoint<fRefTPC->GetEntries();iPoint++){
938 AliTrackReference* aRef = (AliTrackReference*)(*fRefTPC)[iPoint];
939 if (aRef->GetTrack() != posiGIndex ) break;
940 ++labelPosRefs;
941 }
942
943
944
945
946 TParticle* eNegTPC;
947 fMCtruth->MCEvent()->GetParticleAndTR(elecGIndex,eNegTPC,fclRefsN);
948
949 AliMCParticle *mcParticleNeg = (AliMCParticle*) (fMCtruth->MCEvent()->GetTrack(elecGIndex));
950 if(!mcParticleNeg) continue;
951
952 Int_t counterN;
953 Float_t tpcTrackLengtheNeg = mcParticleNeg->GetTPCTrackLength(fESD->GetMagneticField(),0.05,counterN,3.0);
954 int nPointsN = fclRefsN->GetEntries();
955
956 if (fRefTPC) delete fRefTPC; fRefTPC=NULL;
957 fRefTPC = new TObjArray();
958
959 for(int iPoint=0; iPoint<nPointsN; iPoint++) {
960 AliTrackReference *ref = (AliTrackReference*)fclRefsN->At(iPoint);
961 if (ref->DetectorId() == AliTrackReference::kTPC) fRefTPC->Add(new AliTrackReference(*ref));
962 }
963
964 fRefTPC->Sort();
965
966 for(int i=0; i<fRefTPC->GetEntries(); i++) {
967 AliTrackReference *ref = (AliTrackReference*)(*fRefTPC)[i];
968 fLabelsTPC[i] = ref->GetTrack();
969 }
970 int labelNegRefs=0;
971 for(int iPoint=GetTPCReference(iTracks);iPoint<fRefTPC->GetEntries();iPoint++){
972 AliTrackReference* aRef = (AliTrackReference*)(*fRefTPC)[iPoint];
973 if (aRef->GetTrack() != elecGIndex ) break;
974 ++labelNegRefs;
975 }
976
977
978
979 if ( labelNegRefs==0 || labelPosRefs==0) continue; // if e+/e- do not have a TPC ref continue;
980 ////////////////////////////////////////////////////////////////////
981
982
983 fnConvGamGeant++;
984 fgConvGamGeantIndex[fnConvGamGeant]=iTracks;
985 feNegConvGamGeantIndex[fnConvGamGeant] = elecGIndex;
986 fePosConvGamGeantIndex[fnConvGamGeant] = posiGIndex;
987
988 feNegConvGamGeantLength[fnConvGamGeant] = tpcTrackLengtheNeg;
989 fePosConvGamGeantLength[fnConvGamGeant] = tpcTrackLengthePos;
990
991 }
992
993
994 TParticle* piPos = NULL;
995 TParticle* piNeg = NULL;
996 fpiPosK0Index=-1;
997 fpiNegK0Index=-1;
998
999 if (particle->GetPdgCode()== 310){ // k0short
1000 if(particle->GetNDaughters() == 2){
1001 for(Int_t daughterIndex=particle->GetFirstDaughter();daughterIndex<=particle->GetLastDaughter();daughterIndex++){
1002 TParticle *tmpDaughter = fStack->Particle(daughterIndex);
1003 if(tmpDaughter->GetPdgCode() == 211){
1004 piPos= tmpDaughter;
1005 fpiPosK0Index=daughterIndex;
1006 }
1007 else if(tmpDaughter->GetPdgCode() == -211){
1008 piNeg = tmpDaughter;
1009 fpiNegK0Index=daughterIndex;
1010 }
1011 }
1012 }
1013
1014 if(piPos == NULL || piNeg == NULL){ // means we do not have two daughters from K0short decay
1015 continue;
1016 }
1017
1018 if(TMath::Abs(piPos->Eta())> maxEta || TMath::Abs(piNeg->Eta())> maxEta){
1019 continue;
1020 }
1021
1022 if(piPos->R()> maxVertex ){
1023 continue; // cuts on distance from collision point
1024 }
1025
1026
1027 if( (TMath::Abs(piPos->Vz()) * lineCutZRSlope - lineCutZValue) > piPos->R() ){
1028 continue; // line cut to exclude regions where we do not reconstruct
1029 }
1030
1031 // Looking at the existance of TPC references
1032
1033 TParticle* ePosTPC;
1034 fMCtruth->MCEvent()->GetParticleAndTR(fpiPosK0Index,ePosTPC,fclRefsP);
1035
1036 AliMCParticle *mcParticlePos = (AliMCParticle*) (fMCtruth->MCEvent()->GetTrack(fpiPosK0Index));
1037 if(!mcParticlePos) continue;
1038
1039 Int_t counter;
1040 Float_t tpcTrackLengthePos = mcParticlePos->GetTPCTrackLength(fESD->GetMagneticField(),0.05,counter,3.0);
1041
1042
1043 int nPointsP = fclRefsP->GetEntries();
1044 if (fRefTPC) delete fRefTPC; fRefTPC=NULL;
1045 fRefTPC = new TObjArray();
1046
1047 for(int iPoint=0; iPoint<nPointsP; iPoint++) {
1048 AliTrackReference *ref = (AliTrackReference*)fclRefsP->At(iPoint);
1049 if (ref->DetectorId() == AliTrackReference::kTPC) fRefTPC->Add(new AliTrackReference(*ref));
1050 }
1051
1052 fRefTPC->Sort();
1053
1054 for(int i=0; i<fRefTPC->GetEntries(); i++) {
1055 AliTrackReference *ref = (AliTrackReference*)(*fRefTPC)[i];
1056 fLabelsTPC[i] = ref->GetTrack();
1057 }
1058 int labelPosRefs=0;
1059 for(int iPoint=GetTPCReference(iTracks);iPoint<fRefTPC->GetEntries();iPoint++){
1060 AliTrackReference* aRef = (AliTrackReference*)(*fRefTPC)[iPoint];
1061 if (aRef->GetTrack() != fpiPosK0Index ) break;
1062 ++labelPosRefs;
1063 }
1064
1065
1066
1067
1068 TParticle* eNegTPC;
1069 fMCtruth->MCEvent()->GetParticleAndTR(fpiNegK0Index,eNegTPC,fclRefsN);
1070
1071 AliMCParticle *mcParticleNeg = (AliMCParticle*) (fMCtruth->MCEvent()->GetTrack(fpiNegK0Index));
1072 if(!mcParticleNeg) continue;
1073
1074 Int_t counterN;
1075 Float_t tpcTrackLengtheNeg = mcParticleNeg->GetTPCTrackLength(fESD->GetMagneticField(),0.05,counterN,3.0);
1076
1077 int nPointsN = fclRefsN->GetEntries();
1078 if (fRefTPC) delete fRefTPC; fRefTPC=NULL;
1079 fRefTPC = new TObjArray();
1080
1081 for(int iPoint=0; iPoint<nPointsN; iPoint++) {
1082 AliTrackReference *ref = (AliTrackReference*)fclRefsN->At(iPoint);
1083 if (ref->DetectorId() == AliTrackReference::kTPC) fRefTPC->Add(new AliTrackReference(*ref));
1084 }
1085
1086 fRefTPC->Sort();
1087
1088 for(int i=0; i<fRefTPC->GetEntries(); i++) {
1089 AliTrackReference *ref = (AliTrackReference*)(*fRefTPC)[i];
1090 fLabelsTPC[i] = ref->GetTrack();
1091 }
1092 int labelNegRefs=0;
1093 for(int iPoint=GetTPCReference(iTracks);iPoint<fRefTPC->GetEntries();iPoint++){
1094 AliTrackReference* aRef = (AliTrackReference*)(*fRefTPC)[iPoint];
1095 if (aRef->GetTrack() != fpiNegK0Index ) break;
1096 ++labelNegRefs;
1097 }
1098
1099 if ( labelNegRefs==0 || labelPosRefs==0) continue; // if pi+/pi- do not have a TPC ref continue;
1100 ////////////////////////////////////////////////////////////////////
1101
1102 fnDecayK0Geant++;
1103
1104 fK0DecayK0GeantIndex[fnDecayK0Geant]=iTracks;
1105 fpiNegDecayK0GeantIndex[fnDecayK0Geant]=fpiNegK0Index;
1106 fpiPosDecayK0GeantIndex[fnDecayK0Geant]=fpiPosK0Index;
1107 fpiNegDecayK0GeantLength[fnDecayK0Geant]=tpcTrackLengtheNeg;
1108 fpiPosDecayK0GeantLength[fnDecayK0Geant]=tpcTrackLengthePos;
1109
1110 }
1111
1112
1113 TParticle* pPos = NULL;
1114 TParticle* piNegL = NULL;
1115 pPosLIndex=-1;
1116 piNegLIndex=-1;
1117
1118
1119 if (particle->GetPdgCode()== 3122){ //lambda
1120
1121 if(particle->GetNDaughters() == 2){
1122 for(Int_t daughterIndex=particle->GetFirstDaughter();daughterIndex<=particle->GetLastDaughter();daughterIndex++){
1123 TParticle *tmpDaughter = fStack->Particle(daughterIndex);
1124 if(tmpDaughter->GetPdgCode() == 2212){
1125 pPos= tmpDaughter;
1126 pPosLIndex=daughterIndex;
1127 }
1128 else if(tmpDaughter->GetPdgCode() == -211){
1129 piNegL = tmpDaughter;
1130 piNegLIndex=daughterIndex;
1131 }
1132 }
1133 }
1134
1135 if(pPos == NULL || piNegL == NULL){ // means we do not have two daughters from lambda decay
1136 continue;
1137 }
1138
1139 if(TMath::Abs(pPos->Eta())> maxEta || TMath::Abs(piNegL->Eta())> maxEta){
1140 continue;
1141 }
1142
1143 if(pPos->R()> maxVertex ){
1144 continue; // cuts on distance from collision point
1145 }
1146
1147
1148 if( (TMath::Abs(pPos->Vz()) * lineCutZRSlope - lineCutZValue) > pPos->R() ){
1149 continue; // line cut to exclude regions where we do not reconstruct
1150 }
1151
1152
1153 // Looking at the existance of TPC references
1154
1155 TParticle* ePosTPC;
1156 fMCtruth->MCEvent()->GetParticleAndTR(pPosLIndex,ePosTPC,fclRefsP);
1157
1158 AliMCParticle *mcParticlePos = (AliMCParticle*) (fMCtruth->MCEvent()->GetTrack(pPosLIndex));
1159 if(!mcParticlePos) continue;
1160
1161 Int_t counter;
1162 Float_t tpcTrackLengthePos = mcParticlePos->GetTPCTrackLength(fESD->GetMagneticField(),0.05,counter,3.0);
1163
1164
1165 int nPointsP = fclRefsP->GetEntries();
1166 if (fRefTPC) delete fRefTPC; fRefTPC=NULL;
1167 fRefTPC = new TObjArray();
1168
1169 for(int iPoint=0; iPoint<nPointsP; iPoint++) {
1170 AliTrackReference *ref = (AliTrackReference*)fclRefsP->At(iPoint);
1171 if (ref->DetectorId() == AliTrackReference::kTPC) fRefTPC->Add(new AliTrackReference(*ref));
1172 }
1173
1174 fRefTPC->Sort();
1175
1176 for(int i=0; i<fRefTPC->GetEntries(); i++) {
1177 AliTrackReference *ref = (AliTrackReference*)(*fRefTPC)[i];
1178 fLabelsTPC[i] = ref->GetTrack();
1179 }
1180 int labelPosRefs=0;
1181 for(int iPoint=GetTPCReference(iTracks);iPoint<fRefTPC->GetEntries();iPoint++){
1182 AliTrackReference* aRef = (AliTrackReference*)(*fRefTPC)[iPoint];
1183 if (aRef->GetTrack() != pPosLIndex ) break;
1184 ++labelPosRefs;
1185 }
1186
1187
1188
1189
1190 TParticle* eNegTPC;
1191 fMCtruth->MCEvent()->GetParticleAndTR(piNegLIndex,eNegTPC,fclRefsN);
1192
1193 AliMCParticle *mcParticleNeg = (AliMCParticle*) (fMCtruth->MCEvent()->GetTrack(piNegLIndex));
1194 if(!mcParticleNeg) continue;
1195
1196 Int_t counterN;
1197 Float_t tpcTrackLengtheNeg = mcParticleNeg->GetTPCTrackLength(fESD->GetMagneticField(),0.05,counterN,3.0);
1198
1199 int nPointsN = fclRefsN->GetEntries();
1200 if (fRefTPC) delete fRefTPC;
1201 fRefTPC = new TObjArray();
1202
1203 for(int iPoint=0; iPoint<nPointsN; iPoint++) {
1204 AliTrackReference *ref = (AliTrackReference*)fclRefsN->At(iPoint);
1205 if (ref->DetectorId() == AliTrackReference::kTPC) fRefTPC->Add(new AliTrackReference(*ref));
1206 }
1207
1208 fRefTPC->Sort();
1209
1210 for(int i=0; i<fRefTPC->GetEntries(); i++) {
1211 AliTrackReference *ref = (AliTrackReference*)(*fRefTPC)[i];
1212 fLabelsTPC[i] = ref->GetTrack();
1213 }
1214 int labelNegRefs=0;
1215 for(int iPoint=GetTPCReference(iTracks);iPoint<fRefTPC->GetEntries();iPoint++){
1216 AliTrackReference* aRef = (AliTrackReference*)(*fRefTPC)[iPoint];
1217 if (aRef->GetTrack() != piNegLIndex ) break;
1218 ++labelNegRefs;
1219 }
1220
1221 if ( labelNegRefs==0 || labelPosRefs==0) continue; // if proton/pi- do not have a TPC ref continue;
1222 ////////////////////////////////////////////////////////////////////
1223
1224 fnDecayLGeant++;
1225
1226 flDecayLGeantIndex[fnDecayLGeant]=iTracks;
1227
1228 fpiNegDecayLGeantIndex[fnDecayLGeant]=piNegLIndex;
1229 fpPosDecayLGeantIndex[fnDecayLGeant]=pPosLIndex;
1230
1231 fpiNegDecayLGeantLength[fnDecayLGeant]=tpcTrackLengtheNeg;
1232 fpPosDecayLGeantLength[fnDecayLGeant]=tpcTrackLengthePos;
1233
1234
1235 }
1236
1237 /////////////////////////////////////////////////////
1238
1239 // AntiLambda
1240 TParticle* apNeg = NULL;
1241 TParticle* piPosAL = NULL;
1242 apNegALIndex=-1;
1243 piPosALIndex=-1;
1244
1245
1246 if (particle->GetPdgCode()== -3122){ //antilambda
1247
1248 if(particle->GetNDaughters() == 2){
1249 for(Int_t daughterIndex=particle->GetFirstDaughter();daughterIndex<=particle->GetLastDaughter();daughterIndex++){
1250 TParticle *tmpDaughter = fStack->Particle(daughterIndex);
1251 if(tmpDaughter->GetPdgCode() == -2212){
1252 apNeg= tmpDaughter;
1253 apNegALIndex=daughterIndex;
1254 }
1255 else if(tmpDaughter->GetPdgCode() == 211){
1256 piPosAL = tmpDaughter;
1257 piPosALIndex=daughterIndex;
1258 }
1259 }
1260 }
1261
1262 if(apNeg == NULL || piPosAL == NULL){ // means we do not have two daughters from antilambda decay
1263 continue;
1264 }
1265
1266 if(TMath::Abs(apNeg->Eta())> maxEta || TMath::Abs(piPosAL->Eta())> maxEta){
1267 continue;
1268 }
1269
1270 if(apNeg->R()> maxVertex ){
1271 continue; // cuts on distance from collision point
1272 }
1273
1274
1275 if( (TMath::Abs(apNeg->Vz()) * lineCutZRSlope - lineCutZValue) > apNeg->R() ){
1276 continue; // line cut to exclude regions where we do not reconstruct
1277 }
1278
1279
1280 // Looking at the existance of TPC references
1281
1282 TParticle* ePosTPC;
1283 fMCtruth->MCEvent()->GetParticleAndTR(piPosALIndex,ePosTPC,fclRefsP);
1284
1285 AliMCParticle *mcParticlePos = (AliMCParticle*) (fMCtruth->MCEvent()->GetTrack(piPosALIndex));
1286 if(!mcParticlePos) continue;
1287
1288 Int_t counter;
1289 Float_t tpcTrackLengthePos = mcParticlePos->GetTPCTrackLength(fESD->GetMagneticField(),0.05,counter,3.0);
1290
1291 int nPointsP = fclRefsP->GetEntries();
1292 if (fRefTPC) delete fRefTPC;
1293 fRefTPC = new TObjArray();
1294
1295 for(int iPoint=0; iPoint<nPointsP; iPoint++) {
1296 AliTrackReference *ref = (AliTrackReference*)fclRefsP->At(iPoint);
1297 if (ref->DetectorId() == AliTrackReference::kTPC) fRefTPC->Add(new AliTrackReference(*ref));
1298 }
1299
1300 fRefTPC->Sort();
1301
1302 for(int i=0; i<fRefTPC->GetEntries(); i++) {
1303 AliTrackReference *ref = (AliTrackReference*)(*fRefTPC)[i];
1304 fLabelsTPC[i] = ref->GetTrack();
1305 }
1306 int labelPosRefs=0;
1307 for(int iPoint=GetTPCReference(iTracks);iPoint<fRefTPC->GetEntries();iPoint++){
1308 AliTrackReference* aRef = (AliTrackReference*)(*fRefTPC)[iPoint];
1309 if (aRef->GetTrack() != piPosALIndex ) break;
1310 ++labelPosRefs;
1311 }
1312
1313
1314 TParticle* eNegTPC;
1315 fMCtruth->MCEvent()->GetParticleAndTR(apNegALIndex,eNegTPC,fclRefsN);
1316
1317 AliMCParticle *mcParticleNeg = (AliMCParticle*) (fMCtruth->MCEvent()->GetTrack(apNegALIndex));
1318 if(!mcParticleNeg) continue;
1319
1320 Int_t counterN;
1321 Float_t tpcTrackLengtheNeg = mcParticleNeg->GetTPCTrackLength(fESD->GetMagneticField(),0.05,counterN,3.0);
1322
1323 int nPointsN = fclRefsN->GetEntries();
1324 if (fRefTPC) delete fRefTPC;
1325 fRefTPC = new TObjArray();
1326
1327 for(int iPoint=0; iPoint<nPointsN; iPoint++) {
1328 AliTrackReference *ref = (AliTrackReference*)fclRefsN->At(iPoint);
1329 if (ref->DetectorId() == AliTrackReference::kTPC) fRefTPC->Add(new AliTrackReference(*ref));
1330 }
1331
1332 fRefTPC->Sort();
1333
1334 for(int i=0; i<fRefTPC->GetEntries(); i++) {
1335 AliTrackReference *ref = (AliTrackReference*)(*fRefTPC)[i];
1336 fLabelsTPC[i] = ref->GetTrack();
1337 }
1338 int labelNegRefs=0;
1339 for(int iPoint=GetTPCReference(iTracks);iPoint<fRefTPC->GetEntries();iPoint++){
1340 AliTrackReference* aRef = (AliTrackReference*)(*fRefTPC)[iPoint];
1341 if (aRef->GetTrack() != apNegALIndex ) break;
1342 ++labelNegRefs;
1343 }
1344
1345
1346
1347 if ( labelNegRefs==0 || labelPosRefs==0) continue; // if proton/pi- do not have a TPC ref continue;
1348 ////////////////////////////////////////////////////////////////////
1349
1350 fnDecayALGeant++;
1351 falDecayALGeantIndex[fnDecayALGeant]=iTracks;
1352
1353 fpiPosDecayALGeantIndex[fnDecayALGeant]=piPosALIndex;
1354 fapNegDecayALGeantIndex[fnDecayALGeant]=apNegALIndex;
1355
1356 fpiPosDecayALGeantLength[fnDecayALGeant]=tpcTrackLengthePos;
1357 fapNegDecayALGeantLength[fnDecayALGeant]=tpcTrackLengtheNeg;
1358
1359
1360 } // AntiLambda
1361
1362 } //track loop
1363 }
1364
1365 }
1366
1367
1368 AliKFParticle::SetField(fESD->GetMagneticField());
1369
1370 const AliESDVertex *pvertex = fESD->GetPrimaryVertex();
1371 Double_t xyzVtx[3];
1372 pvertex->GetXYZ(xyzVtx);
1373
1374 AliCentrality *esdCentrality = fESD->GetCentrality();
1375// Int_t centralityC = -1;
1376 fCentralityC =-1;
1377 fCentralityC = esdCentrality->GetCentralityClass10("V0M");
1378
1379 if(fnTracksPrim>0) {
1380
1381 InspectListOfChargedParticles();
1382 InspectListOfV0s();
1383
1384
1385 if(fnConvGamGeant>-1){
1386 FillHnSparseGamma();
1387 }
1388
1389 if(fnDecayK0Geant>-1){
1390 FillHnSparseK0();
1391 }
1392
1393 if(fnDecayLGeant>-1){
1394 FillHnSparseL();
1395 }
1396
1397 if(fnDecayALGeant>-1){
1398 FillHnSparseAL();
1399 }
1400
1401 }
1402
1403
1404 PostData(1, fOutputContainer );
1405
1406
1407}
1408
1409void AliAnalysisTaskV0QA::Terminate(Option_t *) {
1410 // Draw some histogram at the end.
1411
1412}
1413
1414
1415Int_t AliAnalysisTaskV0QA::GetTPCReference(Int_t label) {
1416 // Get TPC References
1417
1418 int start = TMath::BinarySearch(fRefTPC->GetEntries(), fLabelsTPC, label);
1419
1420 while (start >= 0) {
1421 AliTrackReference *ref = (AliTrackReference*)(*fRefTPC)[start];
1422 if (ref->GetTrack() != label) return start+1;
1423 start--;
1424 }
1425
1426 return 0;
1427}
1428
1429
1430
1431
1432
1433void AliAnalysisTaskV0QA::InspectListOfChargedParticles(){
1434 // Look at the list of particles for the single track reconstruction
1435
1436 for(Int_t iTracks = 0; iTracks < fESD->GetNumberOfTracks(); iTracks++){
1437
1438 AliESDtrack* curTrack = fESD->GetTrack(iTracks);
1439
1440 if(!curTrack){
1441 continue;
1442 }
1443
1444
1445// if( !(curTrack->GetStatus() & AliESDtrack::kTPCrefit)){
1446// continue;
1447// }
1448
1449
1450 Int_t labelMC = TMath::Abs(curTrack->GetLabel());
1451
1452 if ( labelMC > fStack->GetNtrack() ) continue;
1453
1454
1455 TParticle* curParticle = fStack->Particle(labelMC);
1456 if(curParticle->GetMother(0)==-1){
1457 continue;
1458 }
1459
1460
1461 if(TMath::Abs(curParticle->GetPdgCode()) == 11){ // e+/e-
1462
1463 if( fStack->Particle(curParticle->GetMother(0))->GetPdgCode()==22 ){ // e+/e- from gamma
1464 if( curParticle->GetUniqueID()!=5 ){ // e+/e- from gamma conversion
1465 continue;
1466 }
1467
1468 for(Int_t iGamConv=0;iGamConv<fnConvGamGeant+1;iGamConv++ ){
1469 if(curTrack->GetSign()>0){
1470 if (labelMC== fePosConvGamGeantIndex[iGamConv]){
1471 fePosConvGamSingleRecIndex[iGamConv]=iTracks;
1472 }
1473 }else{
1474 if (labelMC== feNegConvGamGeantIndex[iGamConv]){
1475 feNegConvGamSingleRecIndex[iGamConv]=iTracks;
1476 }
1477 }
1478 } // loop over geant converted gammas
1479
1480 }
1481 } // condition to select reconstructed electrons
1482
1483
1484
1485 if(TMath::Abs(curParticle->GetPdgCode()) == 211 || TMath::Abs(curParticle->GetPdgCode())==2212 ){ // pi+/pi-
1486
1487 if( fStack->Particle(curParticle->GetMother(0))->GetPdgCode()==310 ||
1488 fStack->Particle(curParticle->GetMother(0))->GetPdgCode()==3122 ||
1489 fStack->Particle(curParticle->GetMother(0))->GetPdgCode()==-3122 ){ // pi+/proton/pi- from K0/Lambda
1490
1491 for(Int_t iK0Dec=0;iK0Dec<fnDecayK0Geant+1;iK0Dec++ ){
1492 if(curTrack->GetSign()>0){
1493 if (labelMC== fpiPosDecayK0GeantIndex[iK0Dec]){
1494 fpiPosDecayK0SingleRecIndex[iK0Dec]=iTracks;
1495 }
1496 }else{
1497 if (labelMC== fpiNegDecayK0GeantIndex[iK0Dec]){
1498 fpiNegDecayK0SingleRecIndex[iK0Dec]=iTracks;
1499 }
1500 }
1501 } // loop over geant decay K0
1502
1503 for(Int_t iLDec=0;iLDec<fnDecayLGeant+1;iLDec++ ){
1504 if(curTrack->GetSign()>0){
1505 if (labelMC== fpPosDecayLGeantIndex[iLDec]){
1506 fpPosDecayLSingleRecIndex[iLDec]=iTracks;
1507 }
1508 }else{
1509 if (labelMC== fpiNegDecayLGeantIndex[iLDec]){
1510 fpiNegDecayLSingleRecIndex[iLDec]=iTracks;
1511 }
1512 }
1513 } // loop over geant decay Lambda
1514
1515 for(Int_t iALDec=0;iALDec<fnDecayALGeant+1;iALDec++ ){
1516 if(curTrack->GetSign()<0){
1517 if (labelMC== fapNegDecayALGeantIndex[iALDec]){
1518 fapNegDecayALSingleRecIndex[iALDec]=iTracks;
1519 }
1520 }else{
1521 if (labelMC== fpiPosDecayALGeantIndex[iALDec]){
1522 fpiPosDecayALSingleRecIndex[iALDec]=iTracks;
1523 }
1524 }
1525 } // loop over geant decay antiLambda
1526 }
1527 } // condition to select reconstructed electrons
1528 } // all reconstructed track
1529
1530
1531}
1532
1533void AliAnalysisTaskV0QA::InspectListOfV0s(){
1534 // Look at the list of particles for the V0 reconstruction
1535
1536 AliESDtrack* trackPos= NULL;
1537 AliESDtrack* trackNeg= NULL;
1538 Int_t grandMotherPos=-1;
1539 Int_t grandMotherNeg=-1;
1540 Int_t motherPos=-1;
1541 Int_t motherNeg=-1;
1542 Int_t pIndex=-1;
1543 Int_t nIndex=-1;
1544
1545 for(Int_t iV0MI = 0; iV0MI < fESD->GetNumberOfV0s(); iV0MI++) {
1546
1547 AliESDv0 * fV0MIs = fESD->GetV0(iV0MI);
1548
1549
1550 if ( !fV0MIs->GetOnFlyStatus() ){ //Onfly V0 finder
1551// if ( fV0MIs->GetOnFlyStatus() ){ //Offline V0 finder
1552 continue;
1553 }
1554 if(fnTracksPrim<=0) {
1555 continue;
1556 }
1557
1558
1559 AliESDtrack* trackPosTest = fESD->GetTrack(fV0MIs->GetPindex());
1560 AliESDtrack* trackNegTest = fESD->GetTrack(fV0MIs->GetNindex());
1561
1562
1563 if ( trackPosTest->GetSign() == trackNegTest->GetSign()){
1564 continue;
1565 }
1566
1567 //To avoid ghosts
1568
1569// if( !(trackPosTest->GetStatus() & AliESDtrack::kTPCrefit)){
1570// continue;
1571// }
1572
1573// if( !(trackNegTest->GetStatus() & AliESDtrack::kTPCrefit)){
1574// continue;
1575// }
1576
1577 if( trackPosTest->GetSign() ==1){
1578 trackPos =fESD->GetTrack(fV0MIs->GetPindex());
1579 trackNeg =fESD->GetTrack(fV0MIs->GetNindex());
1580 pIndex=fV0MIs->GetPindex();
1581 nIndex=fV0MIs->GetNindex();
1582 }
1583
1584 if( trackPosTest->GetSign() ==-1){
1585 trackPos =fESD->GetTrack(fV0MIs->GetNindex());
1586 trackNeg =fESD->GetTrack(fV0MIs->GetPindex());
1587 pIndex=fV0MIs->GetNindex();
1588 nIndex=fV0MIs->GetPindex();
1589
1590 }
1591
1592 if(!trackPos) return;
1593 if(!trackNeg) return;
1594
1595 Int_t labelNeg=TMath::Abs(trackNeg->GetLabel());
1596 if(labelNeg > fStack->GetNtrack() ) continue;
1597 TParticle * particleNeg= fStack->Particle(labelNeg);
1598
1599 Int_t labelPos=TMath::Abs(trackPos->GetLabel());
1600 if(labelPos > fStack->GetNtrack() ) continue;
1601 TParticle * particlePos= fStack->Particle(labelPos);
1602
1603
1604 if(particlePos->GetMother(0)>-1){
1605 grandMotherPos=fStack->Particle(particlePos->GetMother(0))->GetMother(0);
1606 motherPos=particlePos->GetMother(0);
1607 }
1608
1609 if(particleNeg->GetMother(0)>-1){
1610 grandMotherNeg=fStack->Particle(particleNeg->GetMother(0))->GetMother(0);
1611 motherNeg=particleNeg->GetMother(0);
1612 }
1613
1614 if(motherPos == motherNeg && motherPos!=-1 ){
1615 if( particlePos->GetPdgCode() ==-11 && particleNeg->GetPdgCode()==11 ){
1616 for(Int_t iGamConv=0;iGamConv<fnConvGamGeant+1;iGamConv++ ){
1617 if (labelPos== fePosConvGamGeantIndex[iGamConv]){
1618 fePosConvGamV0RecIndex[iGamConv]=pIndex;
1619 fConvGamV0RecIndexPos[iGamConv]=iV0MI;
1620 }
1621 if (labelNeg== feNegConvGamGeantIndex[iGamConv]){
1622 feNegConvGamV0RecIndex[iGamConv]=nIndex;
1623 fConvGamV0RecIndexNeg[iGamConv]=iV0MI;
1624 }
1625
1626 } // loop over geant converted gammas
1627 }
1628
1629 if( particlePos->GetPdgCode()==211 && particleNeg->GetPdgCode()==-211 ){
1630 for(Int_t iK0Dec=0;iK0Dec<fnDecayK0Geant+1;iK0Dec++ ){
1631 if (labelPos== fpiPosDecayK0GeantIndex[iK0Dec]){
1632 fpiPosDecayK0V0RecIndex[iK0Dec]=pIndex;
1633 fDecayK0V0RecIndexPos[iK0Dec]=iV0MI;
1634 }
1635 if (labelNeg== fpiNegDecayK0GeantIndex[iK0Dec]){
1636 fpiNegDecayK0V0RecIndex[iK0Dec]=nIndex;
1637 fDecayK0V0RecIndexNeg[iK0Dec]=iV0MI;
1638 }
1639
1640 } // loop over geant K0
1641 }
1642
1643 if( particlePos->GetPdgCode()==2212 && particleNeg->GetPdgCode()==-211 ){
1644 for(Int_t iLDec=0;iLDec<fnDecayLGeant+1;iLDec++ ){
1645 if (labelPos== fpPosDecayLGeantIndex[iLDec]){
1646 fpPosDecayLV0RecIndex[iLDec]=pIndex;
1647 fDecayLV0RecIndexPos[iLDec]=iV0MI;
1648 }
1649 if (labelNeg== fpiNegDecayLGeantIndex[iLDec]){
1650 fpiNegDecayLV0RecIndex[iLDec]=nIndex;
1651 fDecayLV0RecIndexNeg[iLDec]=iV0MI;
1652 }
1653
1654 } // loop over geant Lambda
1655 }
1656
1657 if( particleNeg->GetPdgCode()==-2212 && particlePos->GetPdgCode()==211 ){
1658 for(Int_t iALDec=0;iALDec<fnDecayALGeant+1;iALDec++ ){
1659 if (labelNeg== fapNegDecayALGeantIndex[iALDec]){
1660 fapNegDecayALV0RecIndex[iALDec]=nIndex;
1661 fDecayALV0RecIndexNeg[iALDec]=iV0MI;
1662 }
1663 if (labelPos== fpiPosDecayALGeantIndex[iALDec]){
1664 fpiPosDecayALV0RecIndex[iALDec]=pIndex;
1665 fDecayALV0RecIndexPos[iALDec]=iV0MI;
1666 }
1667
1668 } // loop over geant antiLambda
1669 }
1670
1671
1672 }
1673
1674 }
1675 for(Int_t iGamConv=0;iGamConv<fnConvGamGeant+1;iGamConv++ ){
1676 if ( fConvGamV0RecIndexNeg[iGamConv]!= fConvGamV0RecIndexPos[iGamConv]){
1677 fePosConvGamV0RecIndex[iGamConv]=-1;
1678 feNegConvGamV0RecIndex[iGamConv]=-1;
1679 fConvGamV0RecIndexNeg[iGamConv]=-1;
1680 fConvGamV0RecIndexPos[iGamConv]=-1;
1681
1682 }
1683 }
1684
1685 for(Int_t iLDec=0;iLDec<fnDecayLGeant+1;iLDec++ ){
1686 if(fDecayLV0RecIndexPos[iLDec] != fDecayLV0RecIndexNeg[iLDec]){
1687 fpiNegDecayLV0RecIndex[iLDec]=-1;
1688 fpPosDecayLV0RecIndex[iLDec]=-1;
1689 fDecayLV0RecIndexNeg[iLDec]=-1;
1690 fDecayLV0RecIndexPos[iLDec]=-1;
1691 }
1692 }
1693
1694 for(Int_t iALDec=0;iALDec<fnDecayALGeant+1;iALDec++ ){
1695 if(fDecayALV0RecIndexPos[iALDec] != fDecayALV0RecIndexNeg[iALDec]){
1696 fpiPosDecayALV0RecIndex[iALDec]=-1;
1697 fapNegDecayALV0RecIndex[iALDec]=-1;
1698 fDecayALV0RecIndexNeg[iALDec]=-1;
1699 fDecayALV0RecIndexPos[iALDec]=-1;
1700 }
1701 }
1702
1703 for(Int_t iK0Dec=0;iK0Dec<fnDecayK0Geant+1;iK0Dec++ ){
1704 if(fDecayK0V0RecIndexPos[iK0Dec] != fDecayK0V0RecIndexNeg[iK0Dec]){
1705 fpiNegDecayK0V0RecIndex[iK0Dec]=-1;
1706 fpiPosDecayK0V0RecIndex[iK0Dec]=-1;
1707 fDecayK0V0RecIndexNeg[iK0Dec]=-1;
1708 fDecayK0V0RecIndexPos[iK0Dec]=-1;
1709 }
1710 }
1711
1712
1713}
1714void AliAnalysisTaskV0QA::FillHnSparseGamma()
1715{
1716 // Fill THnSparse Gamma
1717
1718 Double_t massE=0.00051099892;
1719 Double_t ppSgl[3];
1720 Double_t pmSgl[3];
1721 Float_t bPosSgl[2];
1722 Float_t bNegSgl[2];
1723 Float_t bPosCov[3];
1724 Float_t bNegCov[3];
1725
1726 Double_t ppV0[3];
1727 Double_t pmV0[3];
1728 Double_t xrG[3];
1729
1730 TLorentzVector posSglTrack;
1731 TLorentzVector negSglTrack;
1732 Double_t posPt,posEta,posPhi;
1733 Double_t negPt,negEta,negPhi;
1734
1735 TLorentzVector posV0Track;
1736 TLorentzVector negV0Track;
1737 Double_t posV0Pt,posV0Eta,posV0Phi;
1738 Double_t negV0Pt,negV0Eta,negV0Phi;
1739
1740 Float_t nClsITSPos=-1;
1741 Float_t nClsITSNeg=-1;
1742
1743 Float_t nClsTPCPos=-1;
1744 Float_t nClsTPCNeg=-1;
1745
1746 Int_t statusSingPos=-1;
1747 Int_t statusSingNeg=-1;
1748
1749 Int_t statusV0Pos=-1;
1750 Int_t statusV0Neg=-1;
1751
1752
1753 for(Int_t i=0;i<fnConvGamGeant+1;i++){
1754 TParticle* gamPart = fStack->Particle(fgConvGamGeantIndex[i]);
1755 TParticle* ePosPart = fStack->Particle(fePosConvGamGeantIndex[i]);
1756 TParticle* eNegPart = fStack->Particle(feNegConvGamGeantIndex[i]);
1757 if (fePosConvGamSingleRecIndex[i]!=-1){
1758 AliESDtrack * ePosSglTrack = fESD->GetTrack(fePosConvGamSingleRecIndex[i]);
1759 ePosSglTrack->GetPxPyPz(ppSgl);
1760 posSglTrack.SetXYZM(ppSgl[0],ppSgl[1],ppSgl[2],massE);
1761 posPt = posSglTrack.Pt();
1762 posEta = posSglTrack.Eta();
1763 posPhi = posSglTrack.Phi();
1764 ePosSglTrack->GetImpactParameters(bPosSgl,bPosCov);
1765 nClsITSPos=ePosSglTrack->GetNcls(0);
1766 nClsTPCPos=ePosSglTrack->GetNcls(1);
1767 statusSingPos=1;
1768 }else{
1769 posPt = 1000000;
1770 posEta = -2.;
1771 posPhi = -2*TMath::Pi();
1772 bPosSgl[0]=-100.;
1773 bPosSgl[1]=-100.;
1774 bPosCov[0]=-100;
1775 bPosCov[2]=-100;
1776 nClsITSPos=-1;
1777 nClsTPCPos=-1;
1778 statusSingPos=-1;
1779 }
1780
1781 if (feNegConvGamSingleRecIndex[i]!=-1){
1782 AliESDtrack * eNegSglTrack = fESD->GetTrack(feNegConvGamSingleRecIndex[i]);
1783 eNegSglTrack->GetPxPyPz(pmSgl);
1784 negSglTrack.SetXYZM(pmSgl[0],pmSgl[1],pmSgl[2],massE);
1785 negPt = negSglTrack.Pt();
1786 negEta = negSglTrack.Eta();
1787 negPhi = negSglTrack.Phi();
1788 eNegSglTrack->GetImpactParameters(bNegSgl,bNegCov);
1789 nClsITSNeg=eNegSglTrack->GetNcls(0);
1790 nClsTPCNeg=eNegSglTrack->GetNcls(1);
1791 statusSingNeg=1;
1792 }else{
1793 negPt = 1000000;
1794 negEta = -2.;
1795 negPhi = -2*TMath::Pi();
1796 bNegSgl[0]=-100.;
1797 bNegSgl[1]=-100.;
1798 bNegCov[0]=-100;
1799 bNegCov[2]=-100;
1800 nClsITSNeg=-1;
1801 nClsTPCNeg=-1;
1802 statusSingNeg=-1;
1803 }
1804
1805 posV0Pt = 1000000;
1806 posV0Eta = -2.;
1807 posV0Phi = -2*TMath::Pi();
1808 negV0Pt = 1000000;
1809 negV0Eta = -2.;
1810 negV0Phi = -2*TMath::Pi();
1811
1812 if(fConvGamV0RecIndexPos[i]!=-1){
1813 AliESDv0 * fV0MIs = fESD->GetV0(fConvGamV0RecIndexPos[i]);
1814 AliESDtrack* trackPosTest = fESD->GetTrack(fV0MIs->GetPindex());
1815 AliESDtrack* trackNegTest = fESD->GetTrack(fV0MIs->GetNindex());
1816
1817 if (fePosConvGamV0RecIndex[i]!=-1 ){
1818 // AliESDtrack * ePosV0Track = fESD->GetTrack(ePosConvGamV0RecIndex[i]);
1819 if ( trackPosTest->GetSign()==1 ) {
1820 fV0MIs->GetPPxPyPz(ppV0[0],ppV0[1],ppV0[2]);
1821 }else{
1822 fV0MIs->GetNPxPyPz(ppV0[0],ppV0[1],ppV0[2]);
1823 }
1824 posV0Track.SetXYZM(ppV0[0],ppV0[1],ppV0[2],massE);
1825
1826 posV0Pt = posV0Track.Pt();
1827 posV0Eta = posV0Track.Eta();
1828 posV0Phi = posV0Track.Phi();
1829 statusV0Pos=1;
1830 }else{
1831 posV0Pt = 1000000;
1832 posV0Eta = -2.;
1833 posV0Phi = -2*TMath::Pi();
1834 statusV0Pos=-1;
1835 }
1836
1837 if (feNegConvGamV0RecIndex[i]!=-1 ){
1838 // AliESDtrack * eNegV0Track = fESD->GetTrack(eNegConvGamV0RecIndex[i]);
1839 if ( trackNegTest->GetSign()==-1 ) {
1840 fV0MIs->GetNPxPyPz(pmV0[0],pmV0[1],pmV0[2]);
1841 }else{
1842 fV0MIs->GetPPxPyPz(pmV0[0],pmV0[1],pmV0[2]);
1843 }
1844 negV0Track.SetXYZM(pmV0[0],pmV0[1],pmV0[2],massE);
1845
1846 negV0Pt = negV0Track.Pt();
1847 negV0Eta = negV0Track.Eta();
1848 negV0Phi = negV0Track.Phi();
1849 statusV0Neg=1;
1850 }else{
1851 negV0Pt = 1000000;
1852 negV0Eta = -2.;
1853 negV0Phi = -2*TMath::Pi();
1854 statusV0Neg=-1;
1855 }
1856 }
1857
1858 xrG[0] = ePosPart->Vx();
1859 xrG[1] = ePosPart->Vy();
1860 xrG[2] = ePosPart->Vz();
1861
1862 //--------- Geant variables ----------------------
1863 fValueV0[0] = 1./TMath::Sqrt(gamPart->Pt());
1864 fValueV0[1] = gamPart->Eta();
1865
1866 Double_t tmpGPhi=gamPart->Phi();
1867 if( gamPart->Phi()>TMath::Pi()){
1868 tmpGPhi=gamPart->Phi()-2*TMath::Pi();
1869 }
1870 fValueV0[2] = tmpGPhi;
1871
1872 fValueV0[3] = TMath::Sqrt(xrG[0]*xrG[0]+xrG[1]*xrG[1]);
1873 fValueV0[4] = xrG[2];
1874
1875
1876 fValueV0[5] = 1./TMath::Sqrt(ePosPart->Pt());
1877 fValueV0[6] = ePosPart->Eta();
1878
1879 Double_t tmpPPhi=ePosPart->Phi();
1880 if( ePosPart->Phi()>TMath::Pi()){
1881 tmpPPhi = ePosPart->Phi()-2*TMath::Pi();
1882 }
1883 fValueV0[7] = tmpPPhi;
1884 fValueV0[8] = fePosConvGamGeantLength[i];
1885
1886 fValueV0[9] = 1./TMath::Sqrt(eNegPart->Pt());
1887 fValueV0[10] = eNegPart->Eta();
1888
1889 Double_t tmpNPhi=eNegPart->Phi();
1890 if( eNegPart->Phi()>TMath::Pi()){
1891 tmpNPhi = eNegPart->Phi()-2*TMath::Pi();
1892 }
1893 fValueV0[11] = tmpNPhi;
1894 fValueV0[12] = feNegConvGamGeantLength[i];
1895
1896 //---- Single track variables----------------------
1897
1898 fValueV0[13] = (posPt-ePosPart->Pt())/ePosPart->Pt();
1899 fValueV0[14] = posEta;
1900 fValueV0[15] = posPhi;
1901 fValueV0[16] = TMath::Sqrt( bPosSgl[0]* bPosSgl[0] + bPosSgl[1]* bPosSgl[1] );
1902 fValueV0[17] = TMath::Sqrt( bPosSgl[0]* bPosSgl[0] + bPosSgl[1]* bPosSgl[1] )/TMath::Sqrt(bPosCov[0]*bPosCov[0]+bPosCov[2]*bPosCov[2]);
1903 fValueV0[18] = nClsITSPos;
1904 fValueV0[19] = nClsTPCPos;
1905 fValueV0[20] = statusSingPos;
1906
1907
1908 fValueV0[21] = (negPt-eNegPart->Pt())/eNegPart->Pt();
1909 fValueV0[22] = negEta;
1910 fValueV0[23] = negPhi;
1911 fValueV0[24] = TMath::Sqrt( bNegSgl[0]* bNegSgl[0] + bNegSgl[1]* bNegSgl[1] );
1912 fValueV0[25] = TMath::Sqrt( bNegSgl[0]* bNegSgl[0] + bNegSgl[1]* bNegSgl[1] )/TMath::Sqrt(bNegCov[0]*bNegCov[0]+bNegCov[2]*bNegCov[2]);
1913
1914 fValueV0[26] = nClsITSNeg;
1915 fValueV0[27] = nClsTPCNeg;
1916 fValueV0[28] = statusSingNeg;
1917
1918
1919 //---- V0 track variables----------------------
1920
1921 fValueV0[29] = (posV0Pt-ePosPart->Pt())/ePosPart->Pt();
1922 fValueV0[30] = posV0Eta;
1923 fValueV0[31] = posV0Phi;
1924 fValueV0[32] = statusV0Pos;
1925
1926 fValueV0[33] = (negV0Pt-eNegPart->Pt())/eNegPart->Pt();
1927 fValueV0[34] = negV0Eta;
1928 fValueV0[35] = negV0Phi;
1929 fValueV0[36] = statusV0Neg;
1930 fValueV0[37] = fCentralityC;
1931 fSparseV0->Fill(fValueV0);
1932 }
1933
1934
1935}
1936
1937void AliAnalysisTaskV0QA::FillHnSparseK0()
1938{
1939 // Fill THnSparse K0
1940
1941 Double_t massPi=0.13957018;
1942 Double_t ppSgl[3];
1943 Double_t pmSgl[3];
1944 Float_t bPosSgl[2];
1945 Float_t bNegSgl[2];
1946 Float_t bPosCov[3];
1947 Float_t bNegCov[3];
1948
1949 Double_t ppV0[3];
1950 Double_t pmV0[3];
1951 Double_t xrG[3];
1952
1953 TLorentzVector posSglTrack;
1954 TLorentzVector negSglTrack;
1955 Double_t posPt,posEta,posPhi;
1956 Double_t negPt,negEta,negPhi;
1957
1958 TLorentzVector posV0Track;
1959 TLorentzVector negV0Track;
1960 Double_t posV0Pt,posV0Eta,posV0Phi;
1961 Double_t negV0Pt,negV0Eta,negV0Phi;
1962
1963 Float_t nClsITSPos=-1;
1964 Float_t nClsITSNeg=-1;
1965
1966 Float_t nClsTPCPos=-1;
1967 Float_t nClsTPCNeg=-1;
1968
1969 Int_t statusSingPos=-1;
1970 Int_t statusSingNeg=-1;
1971
1972 Int_t statusV0Pos=-1;
1973 Int_t statusV0Neg=-1;
1974
1975 for(Int_t i=0;i<fnDecayK0Geant+1;i++){
1976 TParticle* k0Part = fStack->Particle(fK0DecayK0GeantIndex[i]);
1977 TParticle* ePosPart = fStack->Particle(fpiPosDecayK0GeantIndex[i]);
1978 TParticle* eNegPart = fStack->Particle(fpiNegDecayK0GeantIndex[i]);
1979 if (fpiPosDecayK0SingleRecIndex[i]!=-1){
1980 AliESDtrack * ePosSglTrack = fESD->GetTrack(fpiPosDecayK0SingleRecIndex[i]);
1981 ePosSglTrack->GetPxPyPz(ppSgl);
1982 posSglTrack.SetXYZM(ppSgl[0],ppSgl[1],ppSgl[2],massPi);
1983 posPt = posSglTrack.Pt();
1984 posEta = posSglTrack.Eta();
1985 posPhi = posSglTrack.Phi();
1986 ePosSglTrack->GetImpactParameters(bPosSgl,bPosCov);
1987 nClsITSPos=ePosSglTrack->GetNcls(0);
1988 nClsTPCPos=ePosSglTrack->GetNcls(1);
1989 statusSingPos=1;
1990 }else{
1991 posPt = 1000000;
1992 posEta = -2.;
1993 posPhi = -2*TMath::Pi();
1994 bPosSgl[0]=-100.;
1995 bPosSgl[1]=-100.;
1996 bPosCov[0]=-100;
1997 bPosCov[2]=-100;
1998
1999 nClsITSPos=-1;
2000 nClsTPCPos=-1;
2001 statusSingPos=-1;
2002 }
2003
2004 if (fpiNegDecayK0SingleRecIndex[i]!=-1){
2005 AliESDtrack * eNegSglTrack = fESD->GetTrack(fpiNegDecayK0SingleRecIndex[i]);
2006 eNegSglTrack->GetPxPyPz(pmSgl);
2007 negSglTrack.SetXYZM(pmSgl[0],pmSgl[1],pmSgl[2],massPi);
2008 negPt = negSglTrack.Pt();
2009 negEta = negSglTrack.Eta();
2010 negPhi = negSglTrack.Phi();
2011 eNegSglTrack->GetImpactParameters(bNegSgl,bNegCov);
2012 nClsITSNeg=eNegSglTrack->GetNcls(0);
2013 nClsTPCNeg=eNegSglTrack->GetNcls(1);
2014 statusSingNeg=1;
2015 }else{
2016 negPt = 1000000;
2017 negEta = -2.;
2018 negPhi = -2*TMath::Pi();
2019 bNegSgl[0]=-100.;
2020 bNegSgl[1]=-100.;
2021 bNegCov[0]=-100;
2022 bNegCov[2]=-100;
2023 nClsITSNeg=-1;
2024 nClsTPCNeg=-1;
2025 statusSingNeg=-1;
2026 }
2027
2028 posV0Pt = 1000000;
2029 posV0Eta = -2.;
2030 posV0Phi = -2*TMath::Pi();
2031 negV0Pt = 1000000;
2032 negV0Eta = -2.;
2033 negV0Phi = -2*TMath::Pi();
2034
2035 if(fDecayK0V0RecIndexPos[i]!=-1){
2036 AliESDv0 * fV0MIs = fESD->GetV0(fDecayK0V0RecIndexPos[i]);
2037 AliESDtrack* trackPosTest = fESD->GetTrack(fV0MIs->GetPindex());
2038 AliESDtrack* trackNegTest = fESD->GetTrack(fV0MIs->GetNindex());
2039
2040 if (fpiPosDecayK0V0RecIndex[i]!=-1 ){
2041 // AliESDtrack * ePosV0Track = fESD->GetTrack(piPosDecayK0V0RecIndex[i]);
2042 if ( trackPosTest->GetSign()==1 ) {
2043 fV0MIs->GetPPxPyPz(ppV0[0],ppV0[1],ppV0[2]);
2044 }else{
2045 fV0MIs->GetNPxPyPz(ppV0[0],ppV0[1],ppV0[2]);
2046 }
2047 posV0Track.SetXYZM(ppV0[0],ppV0[1],ppV0[2],massPi);
2048
2049 posV0Pt = posV0Track.Pt();
2050 posV0Eta = posV0Track.Eta();
2051 posV0Phi = posV0Track.Phi();
2052 statusV0Pos=1;
2053 }else{
2054 posV0Pt = 1000000;
2055 posV0Eta = -2.;
2056 posV0Phi = -2*TMath::Pi();
2057 statusV0Pos=-1;
2058 }
2059
2060 if (fpiNegDecayK0V0RecIndex[i]!=-1 ){
2061 // AliESDtrack * eNegV0Track = fESD->GetTrack(piNegDecayK0V0RecIndex[i]);
2062 if ( trackNegTest->GetSign()==-1 ) {
2063 fV0MIs->GetNPxPyPz(pmV0[0],pmV0[1],pmV0[2]);
2064 }else{
2065 fV0MIs->GetPPxPyPz(pmV0[0],pmV0[1],pmV0[2]);
2066 }
2067 negV0Track.SetXYZM(pmV0[0],pmV0[1],pmV0[2],massPi);
2068
2069 negV0Pt = negV0Track.Pt();
2070 negV0Eta = negV0Track.Eta();
2071 negV0Phi = negV0Track.Phi();
2072 statusV0Neg=1;
2073 }else{
2074 negV0Pt = 1000000;
2075 negV0Eta = -2.;
2076 negV0Phi = -2*TMath::Pi();
2077 statusV0Neg=-1;
2078 }
2079 }
2080
2081 xrG[0] = ePosPart->Vx();
2082 xrG[1] = ePosPart->Vy();
2083 xrG[2] = ePosPart->Vz();
2084
2085
2086 //--------- Geant variables ----------------------
2087 fValueK0[0] = 1./TMath::Sqrt(k0Part->Pt());
2088 fValueK0[1] = k0Part->Eta();
2089
2090 Double_t tmpGPhi=k0Part->Phi();
2091 if( k0Part->Phi()>TMath::Pi()){
2092 tmpGPhi=k0Part->Phi()-2*TMath::Pi();
2093 }
2094 fValueK0[2] = tmpGPhi;
2095
2096 fValueK0[3] = TMath::Sqrt(xrG[0]*xrG[0]+xrG[1]*xrG[1]);
2097 fValueK0[4] = xrG[2];
2098
2099
2100 fValueK0[5] = 1./TMath::Sqrt(ePosPart->Pt());
2101 fValueK0[6] = ePosPart->Eta();
2102
2103 Double_t tmpPPhi=ePosPart->Phi();
2104 if( ePosPart->Phi()>TMath::Pi()){
2105 tmpPPhi = ePosPart->Phi()-2*TMath::Pi();
2106 }
2107 fValueK0[7] = tmpPPhi;
2108 fValueK0[8] = fpiPosDecayK0GeantLength[i];
2109
2110 fValueK0[9] = 1./TMath::Sqrt(eNegPart->Pt());
2111 fValueK0[10] = eNegPart->Eta();
2112
2113 Double_t tmpNPhi=eNegPart->Phi();
2114 if( eNegPart->Phi()>TMath::Pi()){
2115 tmpNPhi = eNegPart->Phi()-2*TMath::Pi();
2116 }
2117 fValueK0[11] = tmpNPhi;
2118 fValueK0[12] = fpiNegDecayK0GeantLength[i];
2119 //---- Single track variables----------------------
2120
2121 fValueK0[13] = (posPt-ePosPart->Pt())/ePosPart->Pt() ;
2122 fValueK0[14] = posEta;
2123 fValueK0[15] = posPhi;
2124 fValueK0[16] = TMath::Sqrt( bPosSgl[0]* bPosSgl[0] + bPosSgl[1]* bPosSgl[1] );
2125 fValueK0[17] = TMath::Sqrt( bPosSgl[0]* bPosSgl[0] + bPosSgl[1]* bPosSgl[1] )/TMath::Sqrt(bPosCov[0]*bPosCov[0]+bPosCov[2]*bPosCov[2]);
2126
2127 fValueK0[18] = nClsITSPos;
2128 fValueK0[19] = nClsTPCPos;
2129 fValueK0[20] = statusSingPos;
2130
2131 fValueK0[21] = (negPt-eNegPart->Pt())/eNegPart->Pt();
2132 fValueK0[22] = negEta;
2133 fValueK0[23] = negPhi;
2134 fValueK0[24] = TMath::Sqrt( bNegSgl[0]* bNegSgl[0]+ bNegSgl[1]* bNegSgl[1] );
2135 fValueK0[25] = TMath::Sqrt( bNegSgl[0]* bNegSgl[0]+ bNegSgl[1]* bNegSgl[1] )/TMath::Sqrt(bNegCov[0]*bNegCov[0]+bNegCov[2]*bNegCov[2]);
2136 fValueK0[26] = nClsITSNeg;
2137 fValueK0[27] = nClsTPCNeg;
2138 fValueK0[28] = statusSingNeg;
2139
2140
2141 //---- V0 track variables----------------------
2142
2143 fValueK0[29] = (posV0Pt-ePosPart->Pt())/ePosPart->Pt();
2144 fValueK0[30] = posV0Eta;
2145 fValueK0[31] = posV0Phi;
2146 fValueK0[32] = statusV0Pos;
2147
2148 fValueK0[33] = (negV0Pt-eNegPart->Pt())/eNegPart->Pt();
2149 fValueK0[34] = negV0Eta;
2150 fValueK0[35] = negV0Phi;
2151 fValueK0[36] = statusV0Neg;
2152 fValueK0[37] = fCentralityC;
2153
2154 fSparseK0->Fill(fValueK0);
2155 }
2156
2157
2158}
2159void AliAnalysisTaskV0QA::FillHnSparseL()
2160{
2161 // Fill THnSparse Lambda
2162
2163 Double_t massPi=0.13957018;
2164 Double_t massP=0.93827203;
2165
2166
2167 Double_t ppSgl[3];
2168 Double_t pmSgl[3];
2169 Float_t bPosSgl[2];
2170 Float_t bNegSgl[2];
2171 Float_t bPosCov[3];
2172 Float_t bNegCov[3];
2173
2174 Double_t ppV0[3];
2175 Double_t pmV0[3];
2176 Double_t xrG[3];
2177
2178 TLorentzVector posSglTrack;
2179 TLorentzVector negSglTrack;
2180 Double_t posPt,posEta,posPhi;
2181 Double_t negPt,negEta,negPhi;
2182
2183 TLorentzVector posV0Track;
2184 TLorentzVector negV0Track;
2185 Double_t posV0Pt,posV0Eta,posV0Phi;
2186 Double_t negV0Pt,negV0Eta,negV0Phi;
2187
2188 Float_t nClsITSPos=-1;
2189 Float_t nClsITSNeg=-1;
2190
2191 Float_t nClsTPCPos=-1;
2192 Float_t nClsTPCNeg=-1;
2193
2194 Int_t statusSingPos=-1;
2195 Int_t statusSingNeg=-1;
2196
2197 Int_t statusV0Pos=-1;
2198 Int_t statusV0Neg=-1;
2199
2200 for(Int_t i=0;i<fnDecayLGeant+1;i++){
2201 TParticle* lPart = fStack->Particle(flDecayLGeantIndex[i]);
2202 TParticle* ePosPart = fStack->Particle(fpPosDecayLGeantIndex[i]);
2203 TParticle* eNegPart = fStack->Particle(fpiNegDecayLGeantIndex[i]);
2204 if (fpPosDecayLSingleRecIndex[i]!=-1){
2205 AliESDtrack * ePosSglTrack = fESD->GetTrack(fpPosDecayLSingleRecIndex[i]);
2206 ePosSglTrack->GetPxPyPz(ppSgl);
2207 posSglTrack.SetXYZM(ppSgl[0],ppSgl[1],ppSgl[2],massP);
2208 posPt = posSglTrack.Pt();
2209 posEta = posSglTrack.Eta();
2210 posPhi = posSglTrack.Phi();
2211 ePosSglTrack->GetImpactParameters(bPosSgl,bPosCov);
2212 nClsITSPos=ePosSglTrack->GetNcls(0);
2213 nClsTPCPos=ePosSglTrack->GetNcls(1);
2214 statusSingPos=1;
2215 }else{
2216 posPt = 1000000;
2217 posEta = -2.;
2218 posPhi = -2*TMath::Pi();
2219 bPosSgl[0]=-100.;
2220 bPosSgl[1]=-100.;
2221 bPosCov[0]=-100;
2222 bPosCov[2]=-100;
2223 nClsITSPos=-1;
2224 nClsTPCPos=-1;
2225 statusSingPos=-1;
2226 }
2227
2228 if (fpiNegDecayLSingleRecIndex[i]!=-1){
2229 AliESDtrack * eNegSglTrack = fESD->GetTrack(fpiNegDecayLSingleRecIndex[i]);
2230 eNegSglTrack->GetPxPyPz(pmSgl);
2231 negSglTrack.SetXYZM(pmSgl[0],pmSgl[1],pmSgl[2],massPi);
2232 negPt = negSglTrack.Pt();
2233 negEta = negSglTrack.Eta();
2234 negPhi = negSglTrack.Phi();
2235 eNegSglTrack->GetImpactParameters(bNegSgl,bNegCov);
2236 nClsITSNeg=eNegSglTrack->GetNcls(0);
2237 nClsTPCNeg=eNegSglTrack->GetNcls(1);
2238 statusSingNeg=1;
2239 }else{
2240 negPt = 1000000;
2241 negEta = -2.;
2242 negPhi = -2*TMath::Pi();
2243 bNegSgl[0]=-100.;
2244 bNegSgl[1]=-100.;
2245 bNegCov[0]=-100;
2246 bNegCov[2]=-100;
2247 nClsITSNeg=-1;
2248 nClsTPCNeg=-1;
2249 statusSingNeg=-1;
2250 }
2251
2252 posV0Pt = 1000000;
2253 posV0Eta = -2.;
2254 posV0Phi = -2*TMath::Pi();
2255 negV0Pt = 1000000;
2256 negV0Eta = -2.;
2257 negV0Phi = -2*TMath::Pi();
2258
2259 if(fDecayLV0RecIndexPos[i]!=-1){
2260 AliESDv0 * fV0MIs = fESD->GetV0(fDecayLV0RecIndexPos[i]);
2261 AliESDtrack* trackPosTest = fESD->GetTrack(fV0MIs->GetPindex());
2262 AliESDtrack* trackNegTest = fESD->GetTrack(fV0MIs->GetNindex());
2263
2264 if (fpPosDecayLV0RecIndex[i]!=-1 ){
2265 // AliESDtrack * ePosV0Track = fESD->GetTrack(pPosDecayLV0RecIndex[i]);
2266 if ( trackPosTest->GetSign()==1 ) {
2267 fV0MIs->GetPPxPyPz(ppV0[0],ppV0[1],ppV0[2]);
2268 }else{
2269 fV0MIs->GetNPxPyPz(ppV0[0],ppV0[1],ppV0[2]);
2270 }
2271 posV0Track.SetXYZM(ppV0[0],ppV0[1],ppV0[2],massP);
2272
2273 posV0Pt = posV0Track.Pt();
2274 posV0Eta = posV0Track.Eta();
2275 posV0Phi = posV0Track.Phi();
2276 statusV0Pos=1;
2277 }else{
2278 posV0Pt = 1000000;
2279 posV0Eta = -2.;
2280 posV0Phi = -2*TMath::Pi();
2281 statusV0Pos=-1;
2282 }
2283
2284 if (fpiNegDecayLV0RecIndex[i]!=-1 ){
2285 // AliESDtrack * eNegV0Track = fESD->GetTrack(piNegDecayLV0RecIndex[i]);
2286 if ( trackNegTest->GetSign()==-1 ) {
2287 fV0MIs->GetNPxPyPz(pmV0[0],pmV0[1],pmV0[2]);
2288 }else{
2289 fV0MIs->GetPPxPyPz(pmV0[0],pmV0[1],pmV0[2]);
2290 }
2291 negV0Track.SetXYZM(pmV0[0],pmV0[1],pmV0[2],massPi);
2292
2293 negV0Pt = negV0Track.Pt();
2294 negV0Eta = negV0Track.Eta();
2295 negV0Phi = negV0Track.Phi();
2296 statusV0Neg=1;
2297 }else{
2298 negV0Pt = 1000000;
2299 negV0Eta = -2.;
2300 negV0Phi = -2*TMath::Pi();
2301 statusV0Neg=-1;
2302 }
2303 }
2304
2305 xrG[0] = ePosPart->Vx();
2306 xrG[1] = ePosPart->Vy();
2307 xrG[2] = ePosPart->Vz();
2308
2309 //--------- Geant variables ----------------------
2310 fValueL[0] = 1./TMath::Sqrt(lPart->Pt());
2311 fValueL[1] = lPart->Eta();
2312
2313 Double_t tmpGPhi=lPart->Phi();
2314 if( lPart->Phi()>TMath::Pi()){
2315 tmpGPhi=lPart->Phi()-2*TMath::Pi();
2316 }
2317 fValueL[2] = tmpGPhi;
2318
2319 fValueL[3] = TMath::Sqrt(xrG[0]*xrG[0]+xrG[1]*xrG[1]);
2320 fValueL[4] = xrG[2];
2321
2322
2323 fValueL[5] = 1./TMath::Sqrt(ePosPart->Pt());
2324 fValueL[6] = ePosPart->Eta();
2325
2326 Double_t tmpPPhi=ePosPart->Phi();
2327 if( ePosPart->Phi()>TMath::Pi()){
2328 tmpPPhi = ePosPart->Phi()-2*TMath::Pi();
2329 }
2330 fValueL[7] = tmpPPhi;
2331 fValueL[8] = fpPosDecayLGeantLength[i];
2332
2333 fValueL[9] = 1./TMath::Sqrt(eNegPart->Pt());
2334 fValueL[10] = eNegPart->Eta();
2335
2336 Double_t tmpNPhi=eNegPart->Phi();
2337 if( eNegPart->Phi()>TMath::Pi()){
2338 tmpNPhi = eNegPart->Phi()-2*TMath::Pi();
2339 }
2340 fValueL[11] = tmpNPhi;
2341 fValueL[12] = fpiNegDecayLGeantLength[i];
2342 //---- Single track variables----------------------
2343
2344 fValueL[13] = (posPt-ePosPart->Pt())/ePosPart->Pt();
2345 fValueL[14] = posEta;
2346 fValueL[15] = posPhi;
2347 fValueL[16] = TMath::Sqrt( bPosSgl[0]* bPosSgl[0] + bPosSgl[1]* bPosSgl[1]);
2348 fValueL[17] = TMath::Sqrt( bPosSgl[0]* bPosSgl[0] + bPosSgl[1]* bPosSgl[1] )/TMath::Sqrt(bPosCov[0]*bPosCov[0]+bPosCov[2]*bPosCov[2]);
2349 fValueL[18] = nClsITSPos;
2350 fValueL[19] = nClsTPCPos;
2351 fValueL[20] = statusSingPos;
2352
2353 fValueL[21] = (negPt-eNegPart->Pt())/eNegPart->Pt() ;
2354 fValueL[22] = negEta;
2355 fValueL[23] = negPhi;
2356 fValueL[24] = TMath::Sqrt( bNegSgl[0]* bNegSgl[0] + bNegSgl[1]* bNegSgl[1] );
2357 fValueL[25] = TMath::Sqrt( bNegSgl[0]* bNegSgl[0] + bNegSgl[1]* bNegSgl[1] )/TMath::Sqrt(bNegCov[0]*bNegCov[0]+bNegCov[2]*bNegCov[2]);
2358 fValueL[26] = nClsITSNeg;
2359 fValueL[27] = nClsTPCNeg;
2360 fValueL[28] = statusSingNeg;
2361
2362
2363
2364 //---- V0 track variables----------------------
2365
2366 fValueL[29] = (posV0Pt-ePosPart->Pt())/ePosPart->Pt();
2367 fValueL[30] = posV0Eta;
2368 fValueL[31] = posV0Phi;
2369 fValueL[32] = statusV0Pos;
2370
2371
2372 fValueL[33] = (negV0Pt-eNegPart->Pt())/eNegPart->Pt();
2373 fValueL[34] = negV0Eta;
2374 fValueL[35] = negV0Phi;
2375 fValueL[36] = statusV0Neg;
2376 fValueL[37] = fCentralityC;
2377
2378 fSparseL->Fill(fValueL);
2379 }
2380
2381
2382}
2383
2384void AliAnalysisTaskV0QA::FillHnSparseAL()
2385{
2386 // Fill THnSparse Antilambda
2387
2388 Double_t massPi=0.13957018;
2389 Double_t massP=0.93827203;
2390
2391
2392 Double_t ppSgl[3];
2393 Double_t pmSgl[3];
2394 Float_t bPosSgl[2];
2395 Float_t bNegSgl[2];
2396 Float_t bPosCov[3];
2397 Float_t bNegCov[3];
2398
2399 Double_t ppV0[3];
2400 Double_t pmV0[3];
2401 Double_t xrG[3];
2402
2403 TLorentzVector posSglTrack;
2404 TLorentzVector negSglTrack;
2405 Double_t posPt,posEta,posPhi;
2406 Double_t negPt,negEta,negPhi;
2407
2408 TLorentzVector posV0Track;
2409 TLorentzVector negV0Track;
2410 Double_t posV0Pt,posV0Eta,posV0Phi;
2411 Double_t negV0Pt,negV0Eta,negV0Phi;
2412
2413 Float_t nClsITSPos=-1;
2414 Float_t nClsITSNeg=-1;
2415
2416 Float_t nClsTPCPos=-1;
2417 Float_t nClsTPCNeg=-1;
2418
2419 Int_t statusSingPos=-1;
2420 Int_t statusSingNeg=-1;
2421
2422 Int_t statusV0Pos=-1;
2423 Int_t statusV0Neg=-1;
2424
2425
2426 for(Int_t i=0;i<fnDecayALGeant+1;i++){
2427 TParticle* alPart = fStack->Particle(falDecayALGeantIndex[i]);
2428 TParticle* eNegPart = fStack->Particle(fapNegDecayALGeantIndex[i]);
2429 TParticle* ePosPart = fStack->Particle(fpiPosDecayALGeantIndex[i]);
2430 if (fpiPosDecayALSingleRecIndex[i]!=-1){
2431 AliESDtrack * ePosSglTrack = fESD->GetTrack(fpiPosDecayALSingleRecIndex[i]);
2432 ePosSglTrack->GetPxPyPz(ppSgl);
2433 posSglTrack.SetXYZM(ppSgl[0],ppSgl[1],ppSgl[2],massPi);
2434 posPt = posSglTrack.Pt();
2435 posEta = posSglTrack.Eta();
2436 posPhi = posSglTrack.Phi();
2437 ePosSglTrack->GetImpactParameters(bPosSgl,bPosCov);
2438 nClsITSPos=ePosSglTrack->GetNcls(0);
2439 nClsTPCPos=ePosSglTrack->GetNcls(1);
2440 statusSingPos=1;
2441 }else{
2442 posPt = 1000000;
2443 posEta = -2.;
2444 posPhi = -2*TMath::Pi();
2445 bPosSgl[0]=-100.;
2446 bPosSgl[1]=-100.;
2447 bPosCov[0]=-100;
2448 bPosCov[2]=-100;
2449 nClsITSPos=-1;
2450 nClsTPCPos=-1;
2451 statusSingPos=-1;
2452 }
2453
2454 if (fapNegDecayALSingleRecIndex[i]!=-1){
2455 AliESDtrack * eNegSglTrack = fESD->GetTrack(fapNegDecayALSingleRecIndex[i]);
2456 eNegSglTrack->GetPxPyPz(pmSgl);
2457 negSglTrack.SetXYZM(pmSgl[0],pmSgl[1],pmSgl[2],massP);
2458 negPt = negSglTrack.Pt();
2459 negEta = negSglTrack.Eta();
2460 negPhi = negSglTrack.Phi();
2461 eNegSglTrack->GetImpactParameters(bNegSgl,bNegCov);
2462 nClsITSNeg=eNegSglTrack->GetNcls(0);
2463 nClsTPCNeg=eNegSglTrack->GetNcls(1);
2464 statusSingNeg=1;
2465 }else{
2466 negPt = 1000000;
2467 negEta = -2.;
2468 negPhi = -2*TMath::Pi();
2469 bNegSgl[0]=-100.;
2470 bNegSgl[1]=-100.;
2471 bNegCov[0]=-100;
2472 bNegCov[2]=-100;
2473 nClsITSNeg=-1;
2474 nClsTPCNeg=-1;
2475 statusSingNeg=-1;
2476 }
2477
2478 posV0Pt = 1000000;
2479 posV0Eta = -2.;
2480 posV0Phi = -2*TMath::Pi();
2481 negV0Pt = 1000000;
2482 negV0Eta = -2.;
2483 negV0Phi = -2*TMath::Pi();
2484
2485 if(fDecayALV0RecIndexPos[i]!=-1){
2486 AliESDv0 * fV0MIs = fESD->GetV0(fDecayALV0RecIndexPos[i]);
2487 AliESDtrack* trackPosTest = fESD->GetTrack(fV0MIs->GetPindex());
2488 AliESDtrack* trackNegTest = fESD->GetTrack(fV0MIs->GetNindex());
2489
2490 if (fpiPosDecayALV0RecIndex[i]!=-1 ){
2491 // AliESDtrack * ePosV0Track = fESD->GetTrack(piPosDecayALV0RecIndex[i]);
2492 if ( trackPosTest->GetSign()==1 ) {
2493 fV0MIs->GetPPxPyPz(ppV0[0],ppV0[1],ppV0[2]);
2494 }else{
2495 fV0MIs->GetNPxPyPz(ppV0[0],ppV0[1],ppV0[2]);
2496 }
2497 posV0Track.SetXYZM(ppV0[0],ppV0[1],ppV0[2],massPi);
2498
2499 posV0Pt = posV0Track.Pt();
2500 posV0Eta = posV0Track.Eta();
2501 posV0Phi = posV0Track.Phi();
2502 statusV0Pos=1;
2503 }else{
2504 posV0Pt = 1000000;
2505 posV0Eta = -2.;
2506 posV0Phi = -2*TMath::Pi();
2507 statusV0Pos=-1;
2508 }
2509
2510 if (fapNegDecayALV0RecIndex[i]!=-1 ){
2511 // AliESDtrack * eNegV0Track = fESD->GetTrack(apNegDecayALV0RecIndex[i]);
2512 if ( trackNegTest->GetSign()==-1 ) {
2513 fV0MIs->GetNPxPyPz(pmV0[0],pmV0[1],pmV0[2]);
2514 }else{
2515 fV0MIs->GetPPxPyPz(pmV0[0],pmV0[1],pmV0[2]);
2516 }
2517 negV0Track.SetXYZM(pmV0[0],pmV0[1],pmV0[2],massP);
2518
2519 negV0Pt = negV0Track.Pt();
2520 negV0Eta = negV0Track.Eta();
2521 negV0Phi = negV0Track.Phi();
2522 statusV0Neg=1;
2523 }else{
2524 negV0Pt = 1000000;
2525 negV0Eta = -2.;
2526 negV0Phi = -2*TMath::Pi();
2527 statusV0Neg=-1;
2528 }
2529 }
2530
2531 xrG[0] = ePosPart->Vx();
2532 xrG[1] = ePosPart->Vy();
2533 xrG[2] = ePosPart->Vz();
2534
2535 //--------- Geant variables ----------------------
2536 fValueAL[0] = 1./TMath::Sqrt(alPart->Pt());
2537 fValueAL[1] = alPart->Eta();
2538
2539 Double_t tmpGPhi=alPart->Phi();
2540 if( alPart->Phi()>TMath::Pi()){
2541 tmpGPhi=alPart->Phi()-2*TMath::Pi();
2542 }
2543 fValueAL[2] = tmpGPhi;
2544
2545 fValueAL[3] = TMath::Sqrt(xrG[0]*xrG[0]+xrG[1]*xrG[1]);
2546 fValueAL[4] = xrG[2];
2547
2548
2549 fValueAL[5] = 1./TMath::Sqrt(ePosPart->Pt());
2550 fValueAL[6] = ePosPart->Eta();
2551
2552 Double_t tmpPPhi=ePosPart->Phi();
2553 if( ePosPart->Phi()>TMath::Pi()){
2554 tmpPPhi = ePosPart->Phi()-2*TMath::Pi();
2555 }
2556 fValueAL[7] = tmpPPhi;
2557 fValueAL[8] = fpiPosDecayALGeantLength[i];
2558
2559 fValueAL[9] = 1./TMath::Sqrt(eNegPart->Pt());
2560 fValueAL[10] = eNegPart->Eta();
2561
2562 Double_t tmpNPhi=eNegPart->Phi();
2563 if( eNegPart->Phi()>TMath::Pi()){
2564 tmpNPhi = eNegPart->Phi()-2*TMath::Pi();
2565 }
2566 fValueAL[11] = tmpNPhi;
2567 fValueAL[12] = fapNegDecayALGeantLength[i];
2568 //---- Single track variables----------------------
2569
2570 fValueAL[13] = (posPt-ePosPart->Pt())/ePosPart->Pt();
2571 fValueAL[14] = posEta;
2572 fValueAL[15] = posPhi;
2573 fValueAL[16] = TMath::Sqrt( bPosSgl[0]* bPosSgl[0] + bPosSgl[1]* bPosSgl[1]);
2574 fValueAL[17] = TMath::Sqrt( bPosSgl[0]* bPosSgl[0] + bPosSgl[1]* bPosSgl[1] )/TMath::Sqrt(bPosCov[0]*bPosCov[0]+bPosCov[2]*bPosCov[2]);
2575 fValueAL[18] = nClsITSPos;
2576 fValueAL[19] = nClsTPCPos;
2577 fValueAL[20] = statusSingPos;
2578
2579 fValueAL[21] = (negPt-eNegPart->Pt())/eNegPart->Pt() ;
2580 fValueAL[22] = negEta;
2581 fValueAL[23] = negPhi;
2582 fValueAL[24] = TMath::Sqrt( bNegSgl[0]* bNegSgl[0] + bNegSgl[1]* bNegSgl[1] );
2583 fValueAL[25] = TMath::Sqrt( bNegSgl[0]* bNegSgl[0] + bNegSgl[1]* bNegSgl[1] )/TMath::Sqrt(bNegCov[0]*bNegCov[0]+bNegCov[2]*bNegCov[2]);
2584 fValueAL[26] = nClsITSNeg;
2585 fValueAL[27] = nClsTPCNeg;
2586 fValueAL[28] = statusSingNeg;
2587
2588
2589
2590 //---- V0 track variables----------------------
2591
2592 fValueAL[29] = (posV0Pt-ePosPart->Pt())/ePosPart->Pt();
2593 fValueAL[30] = posV0Eta;
2594 fValueAL[31] = posV0Phi;
2595 fValueAL[32] = statusV0Pos;
2596
2597
2598 fValueAL[33] = (negV0Pt-eNegPart->Pt())/eNegPart->Pt();
2599 fValueAL[34] = negV0Eta;
2600 fValueAL[35] = negV0Phi;
2601 fValueAL[36] = statusV0Neg;
2602 fValueAL[37] = fCentralityC;
2603
2604 fSparseAL->Fill(fValueAL);
2605 }
2606}
2607
2608
2609// void AliAnalysisTaskV0QA::SetESDtrackCuts()
2610// {
2611
2612// fEsdTrackCuts = new AliESDtrackCuts("AliESDtrackCuts");
2613
2614// fEsdTrackCuts->SetRequireTPCRefit(kTRUE);
2615// fEsdTrackCuts->SetAcceptKinkDaughters(kFALSE);
2616
2617
2618
2619// }