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