2 // Class for Leading Charged Track+V0 Correlations Analysis
17 #include "AliAnalysisManager.h"
18 #include "AliAODTrack.h"
19 #include "AliAODEvent.h"
21 #include "AliAODcascade.h"
22 #include "AliAODVertex.h"
23 #include "AliAODPid.h"
24 #include "AliPIDResponse.h"
25 #include "AliEventPoolManager.h"
26 #include "AliCentrality.h"
27 #include "AliAnalyseLeadingTrackUE.h"
28 #include "AliPhysicsSelectionTask.h"
29 #include "AliAODHandler.h"
30 #include "AliAODInputHandler.h"
31 #include "AliAODMCParticle.h"
32 #include "AliInputEventHandler.h"
34 #include "AliMCEventHandler.h"
35 #include "AliVParticle.h"
36 #include "AliCFContainer.h"
37 #include "AliMultiplicity.h"
39 #include "AliAODMCHeader.h"
41 #include "AliPIDResponse.h"
42 #include "AliExternalTrackParam.h"
44 #include "AliLeadingV0Correlation.h"
49 ClassImp(AliLeadingV0Correlation)
50 ClassImp(AliLeadingBasicParticle)
52 //---------------------------------------------------------------------------------------
53 AliLeadingV0Correlation::AliLeadingV0Correlation()
54 : AliAnalysisTaskSE(),
65 fcollidingSys("PbPb"),
79 fCutDCAV0Daughters(0.),
81 fSpecialArmenterosCutK0s(0.),
82 fPerformMultiplicityStudy(0),
86 fHistMCPrimaryVertexX(0),
87 fHistMCPrimaryVertexY(0),
88 fHistMCPrimaryVertexZ(0),
89 fHistMCtracksProdRadiusK0s(0),
90 fHistMCtracksProdRadiusLambda(0),
91 fHistMCtracksProdRadiusAntiLambda(0),
92 fHistMCtracksDecayRadiusK0s(0),
93 fHistMCtracksDecayRadiusLambda(0),
94 fHistMCtracksDecayRadiusAntiLambda(0),
96 fHistMCPtAllLambda(0),
97 fHistMCPtAllAntiLambda(0),
98 fHistMCProdRadiusK0s(0),
99 fHistMCProdRadiusLambda(0),
100 fHistMCProdRadiusAntiLambda(0),
103 fHistMCRapAntiLambda(0),
106 fHistMCPtAntiLambda(0),
107 fHistMCPtLambdaFromSigma(0),
108 fHistMCPtAntiLambdaFromSigma(0),
109 fHistNTimesRecK0s(0),
110 fHistNTimesRecLambda(0),
111 fHistNTimesRecAntiLambda(0),
112 fHistNTimesRecK0sVsPt(0),
113 fHistNTimesRecLambdaVsPt(0),
114 fHistNTimesRecAntiLambdaVsPt(0),
115 fHistMCDaughterTrack(0),
116 fHistPrimRawPtVsYK0s(0),
117 fHistPrimRawPtVsYLambda(0),
118 fHistPrimRawPtVsYAntiLambda(0),
119 fHistPrimaryVertexX(0),
120 fHistPrimaryVertexY(0),
121 fHistPrimaryVertexZ(0),
122 fHistDcaPosToPrimVertexK0(0),
123 fHistDcaNegToPrimVertexK0(0),
125 fHistDecayLengthV0K0(0),
126 fHistDcaV0DaughtersK0(0),
128 fHistCosPointAngleK0(0),
129 fHistDcaPosToPrimVertexK0vsMassK0(0),
130 fHistDcaNegToPrimVertexK0vsMassK0(0),
131 fHistRadiusV0K0vsMassK0(0),
132 fHistDecayLengthV0K0vsMassK0(0),
133 fHistDcaV0DaughtersK0vsMassK0(0),
134 fHistCosPointAngleK0vsMassK0(0),
135 fHistDcaPosToPrimVertexL(0),
136 fHistDcaNegToPrimVertexL(0),
138 fHistDecayLengthV0L(0),
139 fHistDcaV0DaughtersL(0),
141 fHistCosPointAngleL(0),
143 fHistDcaPosToPrimVertexLvsMassL(0),
144 fHistDcaNegToPrimVertexLvsMassL(0),
145 fHistRadiusV0LvsMassL(0),
146 fHistDecayLengthV0LvsMassL(0),
147 fHistDcaV0DaughtersLvsMassL(0),
148 fHistCosPointAngleLvsMassL(0),
149 fHistCosPointAngleLVsMassVsPtsigL(0),
150 fHistCosPointAngleLVsMassVsPtbackL(0),
151 fHistDcaPosToPrimVertexAntiL(0),
152 fHistDcaNegToPrimVertexAntiL(0),
153 fHistRadiusV0AntiL(0),
154 fHistDecayLengthV0AntiL(0),
155 fHistDcaV0DaughtersAntiL(0),
157 fHistCosPointAngleAntiL(0),
158 fHistDcaPosToPrimVertexAntiLvsMass(0),
159 fHistDcaNegToPrimVertexAntiLvsMass(0),
160 fHistRadiusV0AntiLvsMass(0),
161 fHistDecayLengthV0AntiLvsMass(0),
162 fHistDcaV0DaughtersAntiLvsMass(0),
163 fHistCosPointAngleAntiLvsMass(0),
166 fHistMassAntiLambda(0),
167 fHistMassVsRadiusK0(0),
168 fHistMassVsRadiusLambda(0),
169 fHistMassVsRadiusAntiLambda(0),
171 fHistPtVsMassLambda(0),
172 fHistPtVsMassAntiLambda(0),
173 fHistArmenterosPodolanski(0),
174 fHistNsigmaPosProtonLambda(0),
175 fHistNsigmaNegPionLambda(0),
176 fHistNsigmaPosProtonAntiLambda(0),
177 fHistNsigmaNegPionAntiLambda(0),
178 fHistNsigmaPosPionK0(0),
179 fHistNsigmaNegPionK0(0),
181 fHistAsMcPtLambda(0),
182 fHistAsMcPtAntiLambda(0),
183 fHistAsMcProdRadiusK0(0),
184 fHistAsMcProdRadiusLambda(0),
185 fHistAsMcProdRadiusAntiLambda(0),
186 fHistAsMcProdRadiusXvsYK0s(0),
187 fHistAsMcProdRadiusXvsYLambda(0),
188 fHistAsMcProdRadiusXvsYAntiLambda(0),
190 fHistPidMcMassLambda(0),
191 fHistPidMcMassAntiLambda(0),
193 fHistAsMcMassLambda(0),
194 fHistAsMcMassAntiLambda(0),
195 fHistAsMcPtVsMassK0(0),
196 fHistAsMcPtVsMassLambda(0),
197 fHistAsMcPtVsMassAntiLambda(0),
198 fHistAsMcMassVsRadiusK0(0),
199 fHistAsMcMassVsRadiusLambda(0),
200 fHistAsMcMassVsRadiusAntiLambda(0),
204 fHistAsMcResrVsRadiusK0(0),
205 fHistAsMcReszVsRadiusK0(0),
206 fHistAsMcResxLambda(0),
207 fHistAsMcResyLambda(0),
208 fHistAsMcReszLambda(0),
209 fHistAsMcResrVsRadiusLambda(0),
210 fHistAsMcReszVsRadiusLambda(0),
211 fHistAsMcResxAntiLambda(0),
212 fHistAsMcResyAntiLambda(0),
213 fHistAsMcReszAntiLambda(0),
214 fHistAsMcResrVsRadiusAntiLambda(0),
215 fHistAsMcReszVsRadiusAntiLambda(0),
217 fHistAsMcResPtLambda(0),
218 fHistAsMcResPtAntiLambda(0),
219 fHistAsMcResPtVsRapK0(0),
220 fHistAsMcResPtVsRapLambda(0),
221 fHistAsMcResPtVsRapAntiLambda(0),
222 fHistAsMcResPtVsPtK0(0),
223 fHistAsMcResPtVsPtLambda(0),
224 fHistAsMcResPtVsPtAntiLambda(0),
225 fHistAsMcPtLambdaFromSigma(0),
226 fHistAsMcPtAntiLambdaFromSigma(0),
227 fHistAsMcSecondaryPtVsRapK0s(0),
228 fHistAsMcSecondaryPtVsRapLambda(0),
229 fHistAsMcSecondaryPtVsRapAntiLambda(0),
230 fHistAsMcSecondaryProdRadiusK0s(0),
231 fHistAsMcSecondaryProdRadiusLambda(0),
232 fHistAsMcSecondaryProdRadiusAntiLambda(0),
233 fHistAsMcSecondaryProdRadiusXvsYK0s(0),
234 fHistAsMcSecondaryProdRadiusXvsYLambda(0),
235 fHistAsMcSecondaryProdRadiusXvsYAntiLambda(0),
236 fHistAsMcSecondaryPtLambdaFromSigma(0),
237 fHistAsMcSecondaryPtAntiLambdaFromSigma(0),
254 fCutDCAV0Daughters=1.0;
256 fSpecialArmenterosCutK0s=5;
259 //---------------------------------------------------------------------------------------
260 AliLeadingV0Correlation::AliLeadingV0Correlation(const char *name)
261 : AliAnalysisTaskSE(name),
272 fcollidingSys("PbPb"),
286 fCutDCAV0Daughters(0.),
288 fSpecialArmenterosCutK0s(0.),
289 fPerformMultiplicityStudy(0),
293 fHistMCPrimaryVertexX(0),
294 fHistMCPrimaryVertexY(0),
295 fHistMCPrimaryVertexZ(0),
296 fHistMCtracksProdRadiusK0s(0),
297 fHistMCtracksProdRadiusLambda(0),
298 fHistMCtracksProdRadiusAntiLambda(0),
299 fHistMCtracksDecayRadiusK0s(0),
300 fHistMCtracksDecayRadiusLambda(0),
301 fHistMCtracksDecayRadiusAntiLambda(0),
303 fHistMCPtAllLambda(0),
304 fHistMCPtAllAntiLambda(0),
305 fHistMCProdRadiusK0s(0),
306 fHistMCProdRadiusLambda(0),
307 fHistMCProdRadiusAntiLambda(0),
310 fHistMCRapAntiLambda(0),
313 fHistMCPtAntiLambda(0),
314 fHistMCPtLambdaFromSigma(0),
315 fHistMCPtAntiLambdaFromSigma(0),
316 fHistNTimesRecK0s(0),
317 fHistNTimesRecLambda(0),
318 fHistNTimesRecAntiLambda(0),
319 fHistNTimesRecK0sVsPt(0),
320 fHistNTimesRecLambdaVsPt(0),
321 fHistNTimesRecAntiLambdaVsPt(0),
322 fHistMCDaughterTrack(0),
323 fHistPrimRawPtVsYK0s(0),
324 fHistPrimRawPtVsYLambda(0),
325 fHistPrimRawPtVsYAntiLambda(0),
326 fHistPrimaryVertexX(0),
327 fHistPrimaryVertexY(0),
328 fHistPrimaryVertexZ(0),
329 fHistDcaPosToPrimVertexK0(0),
330 fHistDcaNegToPrimVertexK0(0),
332 fHistDecayLengthV0K0(0),
333 fHistDcaV0DaughtersK0(0),
335 fHistCosPointAngleK0(0),
336 fHistDcaPosToPrimVertexK0vsMassK0(0),
337 fHistDcaNegToPrimVertexK0vsMassK0(0),
338 fHistRadiusV0K0vsMassK0(0),
339 fHistDecayLengthV0K0vsMassK0(0),
340 fHistDcaV0DaughtersK0vsMassK0(0),
341 fHistCosPointAngleK0vsMassK0(0),
342 fHistDcaPosToPrimVertexL(0),
343 fHistDcaNegToPrimVertexL(0),
345 fHistDecayLengthV0L(0),
346 fHistDcaV0DaughtersL(0),
348 fHistCosPointAngleL(0),
350 fHistDcaPosToPrimVertexLvsMassL(0),
351 fHistDcaNegToPrimVertexLvsMassL(0),
352 fHistRadiusV0LvsMassL(0),
353 fHistDecayLengthV0LvsMassL(0),
354 fHistDcaV0DaughtersLvsMassL(0),
355 fHistCosPointAngleLvsMassL(0),
356 fHistCosPointAngleLVsMassVsPtsigL(0),
357 fHistCosPointAngleLVsMassVsPtbackL(0),
358 fHistDcaPosToPrimVertexAntiL(0),
359 fHistDcaNegToPrimVertexAntiL(0),
360 fHistRadiusV0AntiL(0),
361 fHistDecayLengthV0AntiL(0),
362 fHistDcaV0DaughtersAntiL(0),
364 fHistCosPointAngleAntiL(0),
365 fHistDcaPosToPrimVertexAntiLvsMass(0),
366 fHistDcaNegToPrimVertexAntiLvsMass(0),
367 fHistRadiusV0AntiLvsMass(0),
368 fHistDecayLengthV0AntiLvsMass(0),
369 fHistDcaV0DaughtersAntiLvsMass(0),
370 fHistCosPointAngleAntiLvsMass(0),
373 fHistMassAntiLambda(0),
374 fHistMassVsRadiusK0(0),
375 fHistMassVsRadiusLambda(0),
376 fHistMassVsRadiusAntiLambda(0),
378 fHistPtVsMassLambda(0),
379 fHistPtVsMassAntiLambda(0),
380 fHistArmenterosPodolanski(0),
381 fHistNsigmaPosProtonLambda(0),
382 fHistNsigmaNegPionLambda(0),
383 fHistNsigmaPosProtonAntiLambda(0),
384 fHistNsigmaNegPionAntiLambda(0),
385 fHistNsigmaPosPionK0(0),
386 fHistNsigmaNegPionK0(0),
388 fHistAsMcPtLambda(0),
389 fHistAsMcPtAntiLambda(0),
390 fHistAsMcProdRadiusK0(0),
391 fHistAsMcProdRadiusLambda(0),
392 fHistAsMcProdRadiusAntiLambda(0),
393 fHistAsMcProdRadiusXvsYK0s(0),
394 fHistAsMcProdRadiusXvsYLambda(0),
395 fHistAsMcProdRadiusXvsYAntiLambda(0),
397 fHistPidMcMassLambda(0),
398 fHistPidMcMassAntiLambda(0),
400 fHistAsMcMassLambda(0),
401 fHistAsMcMassAntiLambda(0),
402 fHistAsMcPtVsMassK0(0),
403 fHistAsMcPtVsMassLambda(0),
404 fHistAsMcPtVsMassAntiLambda(0),
405 fHistAsMcMassVsRadiusK0(0),
406 fHistAsMcMassVsRadiusLambda(0),
407 fHistAsMcMassVsRadiusAntiLambda(0),
411 fHistAsMcResrVsRadiusK0(0),
412 fHistAsMcReszVsRadiusK0(0),
413 fHistAsMcResxLambda(0),
414 fHistAsMcResyLambda(0),
415 fHistAsMcReszLambda(0),
416 fHistAsMcResrVsRadiusLambda(0),
417 fHistAsMcReszVsRadiusLambda(0),
418 fHistAsMcResxAntiLambda(0),
419 fHistAsMcResyAntiLambda(0),
420 fHistAsMcReszAntiLambda(0),
421 fHistAsMcResrVsRadiusAntiLambda(0),
422 fHistAsMcReszVsRadiusAntiLambda(0),
424 fHistAsMcResPtLambda(0),
425 fHistAsMcResPtAntiLambda(0),
426 fHistAsMcResPtVsRapK0(0),
427 fHistAsMcResPtVsRapLambda(0),
428 fHistAsMcResPtVsRapAntiLambda(0),
429 fHistAsMcResPtVsPtK0(0),
430 fHistAsMcResPtVsPtLambda(0),
431 fHistAsMcResPtVsPtAntiLambda(0),
432 fHistAsMcPtLambdaFromSigma(0),
433 fHistAsMcPtAntiLambdaFromSigma(0),
434 fHistAsMcSecondaryPtVsRapK0s(0),
435 fHistAsMcSecondaryPtVsRapLambda(0),
436 fHistAsMcSecondaryPtVsRapAntiLambda(0),
437 fHistAsMcSecondaryProdRadiusK0s(0),
438 fHistAsMcSecondaryProdRadiusLambda(0),
439 fHistAsMcSecondaryProdRadiusAntiLambda(0),
440 fHistAsMcSecondaryProdRadiusXvsYK0s(0),
441 fHistAsMcSecondaryProdRadiusXvsYLambda(0),
442 fHistAsMcSecondaryProdRadiusXvsYAntiLambda(0),
443 fHistAsMcSecondaryPtLambdaFromSigma(0),
444 fHistAsMcSecondaryPtAntiLambdaFromSigma(0),
459 fCutDCAV0Daughters=1.0;
461 fSpecialArmenterosCutK0s=5;
463 DefineOutput(1, TList::Class());
466 //---------------------------------------------------------------------------------------
467 AliLeadingV0Correlation::~AliLeadingV0Correlation()
469 // Destructor. Clean-up the output list, but not the histograms that are put inside
470 // (the list is owner and will clean-up these histograms). Protect in PROOF case.
471 if (fOutputList && !AliAnalysisManager::GetAnalysisManager()->IsProofMode()) {
475 //---------------------------------------------------------------------------------------
476 void AliLeadingV0Correlation::UserCreateOutputObjects()
478 fOutputList = new TList();
479 fOutputList->SetOwner();
481 Int_t lCustomNBins = 200;
482 Double_t lCustomPtUpperLimit = 20;
483 //Int_t lCustomNBinsMultiplicity = 100;
486 //---------------------------------------------- MC histograms -----------------------------------------------------//
489 fHistMCPrimaryVertexX = new TH1F("h1MCPrimaryVertexX", "MC Primary Vertex Position X;Primary Vertex Position X (cm);Events",100,-0.5,0.5);
490 fOutputList->Add(fHistMCPrimaryVertexX);
492 fHistMCPrimaryVertexY = new TH1F("h1MCPrimaryVertexY", "MC Primary Vertex Position Y;Primary Vertex Position Y (cm);Events",100,-0.5,0.5);
493 fOutputList->Add(fHistMCPrimaryVertexY);
495 fHistMCPrimaryVertexZ = new TH1F("h1MCPrimaryVertexZ", "MC Primary Vertex Position Z;Primary Vertex Position Z (cm);Events",200,-20,20);
496 fOutputList->Add(fHistMCPrimaryVertexZ);
499 // Production Radius of non-primary particles:
500 fHistMCtracksProdRadiusK0s = new TH2F("h2MCtracksProdRadiusK0s","Non-primary MC K^{0} Production Radius;x (cm); y (cm)",200,-50,50,200,-50,50);
501 fOutputList->Add(fHistMCtracksProdRadiusK0s);
503 fHistMCtracksProdRadiusLambda = new TH2F("h2MCtracksProdRadiusLambda","Non-primary MC #Lambda^{0} Production Radius;x (cm); y (cm)",200,-50,50,200,-50,50);
504 fOutputList->Add(fHistMCtracksProdRadiusLambda);
506 fHistMCtracksProdRadiusAntiLambda = new TH2F("h2MCtracksProdRadiusAntiLambda","Non-primary MC #bar{#Lambda}^{0} Production Radius;x (cm); y (cm)",200,-50,50,200,-50,50);
507 fOutputList->Add(fHistMCtracksProdRadiusAntiLambda);
509 // Decay Radius of non-primary particles:
510 fHistMCtracksDecayRadiusK0s = new TH1F("h1MCtracksDecayRadiusK0s","Non-primary MC K^{0} Decay Radius;r (cm)",101,-1,100);
511 fOutputList->Add(fHistMCtracksDecayRadiusK0s);
513 fHistMCtracksDecayRadiusLambda = new TH1F("h1MCtracksDecayRadiusLambda","Non-primary MC #Lambda^{0} Decay Radius;r (cm)",101,-1,100);
514 fOutputList->Add(fHistMCtracksDecayRadiusLambda);
516 fHistMCtracksDecayRadiusAntiLambda = new TH1F("h1MCtracksDecayRadiusAntiLambda","Non-primary #bar{#Lambda}^{0} Decay Radius;r (cm)",100,1,101);
517 fOutputList->Add(fHistMCtracksDecayRadiusAntiLambda);
519 // Rapidity distribution:
520 fHistMCRapK0s = new TH1F("h1MCRapK0s", "K^{0};y",160,-4,4);
521 fOutputList->Add(fHistMCRapK0s);
523 fHistMCRapLambda = new TH1F("h1MCRapLambda", "#Lambda;y",160,-4,4);
524 fOutputList->Add(fHistMCRapLambda);
527 fHistMCRapAntiLambda = new TH1F("h1MCRapAntiLambda", "#bar{#Lambda};y",160,-4,4);
528 fOutputList->Add(fHistMCRapAntiLambda);
532 fHistMCProdRadiusK0s = new TH1F("h1MCProdRadiusK0s", "MC K^{0} Production Radius;r (cm);Count", 400, -2, 2);
533 fOutputList->Add(fHistMCProdRadiusK0s);
535 fHistMCProdRadiusLambda = new TH1F("h1MCProdRadiusLambda", "MC #Lambda^{0} Production Radius;r (cm);Count", 400, -2, 2);
536 fOutputList->Add(fHistMCProdRadiusLambda);
538 fHistMCProdRadiusAntiLambda = new TH1F("h1MCProdRadiusAntiLambda", "MC #bar{#Lambda}^{0} Production Radius;r (cm);Count", 400, -2, 2);
539 fOutputList->Add(fHistMCProdRadiusAntiLambda);
543 fHistMCPtK0s = new TH1F("h1MCPtK0s", "K^{0};p{t} (GeV/c)",240,0,12);
544 fOutputList->Add(fHistMCPtK0s);
546 fHistMCPtLambda = new TH1F("h1MCPtLambda", "#Lambda^{0};p{t} (GeV/c)",240,0,12);
547 fOutputList->Add(fHistMCPtLambda);
549 fHistMCPtAntiLambda = new TH1F("h1MCPtAntiLambda", "#AntiLambda^{0};p{t} (GeV/c)",240,0,12);
550 fOutputList->Add(fHistMCPtAntiLambda);
552 // Pt distribution of Lambda coming from Sigma decay
553 fHistMCPtLambdaFromSigma = new TH1F("h1MCPtLambdaFromSigma", "#Lambda^{0};p{t} (GeV/c)",240,0,12);
554 fOutputList->Add(fHistMCPtLambdaFromSigma);
556 fHistMCPtAntiLambdaFromSigma = new TH1F("h1MCPtAntiLambdaFromSigma", "#Lambda^{0};p{t} (GeV/c)",240,0,12);
557 fOutputList->Add(fHistMCPtAntiLambdaFromSigma);
559 // Multiple reconstruction studies
560 fHistNTimesRecK0s = new TH1F("h1NTimesRecK0s","number of times a K0s is reconstructed in -1<y<1;number of times;counts",500,-0.5,4.5);
561 fOutputList->Add(fHistNTimesRecK0s);
563 fHistNTimesRecLambda = new TH1F("h1NTimesRecLambda","number of times a Lambda is reconstructed in -1<y<1;number of times;counts",500,-0.5,4.5);
564 fOutputList->Add(fHistNTimesRecLambda);
566 fHistNTimesRecAntiLambda = new TH1F("h1NTimesRecAntiLambda","number of times an AntiLambda is reconstructed in -1<y<1;number of times;counts",500,-0.5,4.5);
567 fOutputList->Add(fHistNTimesRecAntiLambda);
569 fHistNTimesRecK0sVsPt = new TH2F("h2NTimesRecK0sVsPt","NTimes versus Pt, K^{0} in -1<y<1;p{t} (GeV/c);number of times",75,0,15,5,-0.5,4.5);
570 fOutputList->Add(fHistNTimesRecK0sVsPt);
572 fHistNTimesRecLambdaVsPt = new TH2F("h2NTimesRecLambdaVsPt","NTimes versus Pt, #Lambda^{0} in -1<y<1;p{t} (GeV/c);number of times",75,0,15,5,-0.5,4.5);
573 fOutputList->Add(fHistNTimesRecLambdaVsPt);
575 fHistNTimesRecAntiLambdaVsPt = new TH2F("h2NTimesRecAntiLambdaVsPt","NTimes versus Pt, #bar{#Lambda}^{0} in -1<y<1;p{t} (GeV/c);number of times",75,0,15,5,-0.5,4.5);
576 fOutputList->Add(fHistNTimesRecAntiLambdaVsPt);
578 // Pt Distribution of non-primary particles:
579 fHistMCPtAllK0s = new TH1F("h1MCPtAllK0s", "Non-primary MC K^{0};p{t} (GeV/c);Counts",240,0,12);
580 fOutputList->Add(fHistMCPtAllK0s);
582 fHistMCPtAllLambda = new TH1F("h1MCPtAllLambda", "Non-primary MC #Lambda^{0};p{t} (GeV/c);Counts",240,0,12);
583 fOutputList->Add(fHistMCPtAllLambda);
585 fHistMCPtAllAntiLambda = new TH1F("h1MCPtAllAntiLambda", "Non-primary MC #bar{#Lambda}^{0};p{t} (GeV/c);Counts",240,0,12);
586 fOutputList->Add(fHistMCPtAllAntiLambda);
588 fHistMCDaughterTrack = new TH1F("h1MCDaughterTrack","Distribution of mc id for daughters;id tags;Counts",15,0,15);
589 fOutputList->Add(fHistMCDaughterTrack);
591 fHistPrimRawPtVsYK0s = new TH2F( "f3dHistPrimRawPtVsYVsMultK0Short", "Pt{K0S} Vs Y{K0S} Vs Multiplicity; Pt{K0S} (GeV/c); Y{K0S} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2);
592 fOutputList->Add(fHistPrimRawPtVsYK0s);
595 fHistPrimRawPtVsYLambda = new TH2F( "f3dHistPrimRawPtVsYVsMultLambda", "Pt{lambda} Vs Y{#Lambda} Vs Multiplicity; Pt{lambda} (GeV/c); Y{#Lambda} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2);
596 fOutputList->Add(fHistPrimRawPtVsYLambda);
599 fHistPrimRawPtVsYAntiLambda = new TH2F( "f3dHistPrimRawPtVsYVsMultAntiLambda", "Pt{antilambda} Vs Y{#Lambda} Vs Multiplicity; Pt{antilambda} (GeV/c); Y{#Lambda} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2);
600 fOutputList->Add(fHistPrimRawPtVsYAntiLambda);
602 //---------------------------------------------End Of MC Histos-----------------------------------------------------//
606 fHistPrimaryVertexX = new TH1F("h1PrimaryVertexX", "Primary Vertex Position X;Primary Vertex Position X (cm);Events",100,-0.5,0.5);
607 fOutputList->Add(fHistPrimaryVertexX);
609 fHistPrimaryVertexY = new TH1F("h1PrimaryVertexY", "Primary Vertex Position Y;Primary Vertex Position Y (cm);Events",100,-0.5,0.5);
610 fOutputList->Add(fHistPrimaryVertexY);
612 fHistPrimaryVertexZ = new TH1F("h1PrimaryVertexZ", "Primary Vertex Position Z;Primary Vertex Position Z (cm);Events",200,-20,20);
613 fOutputList->Add(fHistPrimaryVertexZ);
615 //////K0s///////////////// 2D histos: cut vs on fly status////
617 fHistDcaPosToPrimVertexK0 = new TH2F("h2DcaPosToPrimVertexK0", "Positive V0 daughter;dca(cm);Status",100,0,10,2,-0.5,1.5);
618 fOutputList->Add(fHistDcaPosToPrimVertexK0);
620 fHistDcaNegToPrimVertexK0 = new TH2F("h2DcaNegToPrimVertexK0", "Negative V0 daughter;dca(cm);Status",100,0,10,2,-0.5,1.5);
621 fOutputList->Add(fHistDcaNegToPrimVertexK0);
624 fHistRadiusV0K0 = new TH2F("h2RadiusV0K0", "Radius;Radius(cm);Status",500,0,500,2,-0.5,1.5);
625 fOutputList->Add(fHistRadiusV0K0);
627 fHistDecayLengthV0K0 = new TH2F("h2DecayLengthV0K0", "V0s decay Length;decay length(cm);Status", 500, 0, 500,2,-0.5,1.5);
628 fOutputList->Add(fHistDecayLengthV0K0);
630 fHistDcaV0DaughtersK0 = new TH2F("h2DcaV0DaughtersK0", "DCA between daughters;dca(cm);Status", 300, 0, 3.0,2,-0.5,1.5);
631 fOutputList->Add(fHistDcaV0DaughtersK0);
633 fHistChi2K0 = new TH2F("h2Chi2K0", "V0s chi2;chi2;Status", 1000, 0, 0.1,2,-0.5,1.5);
634 fOutputList->Add(fHistChi2K0);
636 fHistCosPointAngleK0 = new TH2F("h2CosPointAngleK0", "Cosine of V0's pointing angle", 200,0.99,1.01,2,-0.5,1.5);
637 fOutputList->Add(fHistCosPointAngleK0);
640 ////////////K0s///////////////// 2D histos: cut vs mass////
643 fHistDcaPosToPrimVertexK0vsMassK0 = new TH2F("h2DcaPosToPrimVertexK0vsMassK0", "Positive V0 daughter;dca(cm);K0s inv. mass",500,0,10,200,0.4,0.6);
644 fOutputList->Add(fHistDcaPosToPrimVertexK0vsMassK0);
646 fHistDcaNegToPrimVertexK0vsMassK0 = new TH2F("h2DcaNegToPrimVertexK0vsMassK0", "Negative V0 daughter;dca(cm);K0s inv. mass",500,0,10,200,0.4,0.6);
647 fOutputList->Add(fHistDcaNegToPrimVertexK0vsMassK0);
650 fHistRadiusV0K0vsMassK0 = new TH2F("h2RadiusV0K0vsMassK0", "Radius;Radius(cm);K0s inv. mass",110,0,110,200,0.4,0.6);
651 fOutputList->Add(fHistRadiusV0K0vsMassK0);
653 fHistDecayLengthV0K0vsMassK0 = new TH2F("h2DecayLengthV0K0vsMassK0", "V0s decay Length;decay length(cm);K0s inv. mass", 100, 0, 100,200,0.4,0.6);
654 fOutputList->Add(fHistDecayLengthV0K0vsMassK0);
656 fHistDcaV0DaughtersK0vsMassK0 = new TH2F("h2DcaV0DaughtersK0vsMassK0", "DCA between daughters;dca(cm);K0s inv. mass", 110, 0, 1.1,200,0.4,0.6);
657 fOutputList->Add(fHistDcaV0DaughtersK0vsMassK0);
660 fHistCosPointAngleK0vsMassK0 = new TH2F("h2CosPointAngleK0vsMassK0", "Cosine of V0's pointing angle", 200,0.997,1.007,200,0.4,0.6);
661 fOutputList->Add(fHistCosPointAngleK0vsMassK0);
662 //////////Lambda////////////// 2D histos: cut vs on fly status////
664 fHistDcaPosToPrimVertexL = new TH2F("h2DcaPosToPrimVertexL", "Positive V0 daughter;dca(cm);Status",100,0,10,2,-0.5,1.5);
665 fOutputList->Add(fHistDcaPosToPrimVertexL);
667 fHistDcaNegToPrimVertexL = new TH2F("h2DcaNegToPrimVertexL", "Negative V0 daughter;dca(cm);Status",100,0,10,2,-0.5,1.5);
668 fOutputList->Add(fHistDcaNegToPrimVertexL);
670 fHistRadiusV0L = new TH2F("h2RadiusV0L", "Radius;Radius(cm);Status",100,0,110,2,-0.5,1.5);
671 fOutputList->Add(fHistRadiusV0L);
673 fHistDecayLengthV0L = new TH2F("h2DecayLengthV0L", "V0s decay Length;decay length(cm);Status", 500, 0, 500,2,-0.5,1.5);
674 fOutputList->Add(fHistDecayLengthV0L);
676 fHistDcaV0DaughtersL = new TH2F("h2DcaV0DaughtersL", "DCA between daughters;dca(cm);Status", 300, 0, 3.0,2,-0.5,1.5);
677 fOutputList->Add(fHistDcaV0DaughtersL);
679 fHistChi2L = new TH2F("h2Chi2L", "V0s chi2;chi2;Status", 100, 0, 0.10,2,-0.5,1.5);
680 fOutputList->Add(fHistChi2L);
682 fHistCosPointAngleL = new TH2F("h2CosPointAngleL", "Cosine of V0's pointing angle", 200,0.99,1.01,2,-0.5,1.5);
683 fOutputList->Add(fHistCosPointAngleL);
685 fHistcTauL = new TH1F("h1cTauL","cTaou of Lambdas",100,0,100);
686 fOutputList->Add(fHistcTauL);
687 //////////Lambda////////////// 2D histos: cut vs mass////
688 fHistDcaPosToPrimVertexLvsMassL = new TH2F("h2DcaPosToPrimVertexLvsMassL", "Positive V0 daughter;dca(cm);Status",100,0,10,140, 1.06, 1.2);
689 fOutputList->Add(fHistDcaPosToPrimVertexLvsMassL);
691 fHistDcaNegToPrimVertexLvsMassL = new TH2F("h2DcaNegToPrimVertexLvsMassL", "Negative V0 daughter;dca(cm);Status",100,0,10,140, 1.06, 1.2);
692 fOutputList->Add(fHistDcaNegToPrimVertexLvsMassL);
695 fHistRadiusV0LvsMassL = new TH2F("h2RadiusV0LvsMassL", "Radius;Radius(cm);Status",110,0,110,140, 1.06, 1.2);
696 fOutputList->Add(fHistRadiusV0LvsMassL);
698 fHistDecayLengthV0LvsMassL = new TH2F("h2DecayLengthV0LvsMassL", "V0s decay Length;decay length(cm);Status", 120, 0, 120,140, 1.06, 1.2);
699 fOutputList->Add(fHistDecayLengthV0LvsMassL);
701 fHistDcaV0DaughtersLvsMassL = new TH2F("h2DcaV0DaughtersLvsMassL", "DCA between daughters;dca(cm);Status", 110, 0, 1.1,140, 1.06, 1.2);
702 fOutputList->Add(fHistDcaV0DaughtersLvsMassL);
704 fHistCosPointAngleLvsMassL = new TH2F("h2CosPointAngleLvsMassL", "Cosine of V0's pointing angle", 200,0.997,1.007,140, 1.06, 1.2);
705 fOutputList->Add(fHistCosPointAngleLvsMassL);
707 fHistCosPointAngleLVsMassVsPtsigL = new TH3F("h3McCosPointAngleLVsMassVsPtsigL", "Cosine of V0's pointing angle",3,0,12, 2,00.997,1.007,140, 1.06, 1.2);
708 fOutputList->Add(fHistCosPointAngleLVsMassVsPtsigL);
710 fHistCosPointAngleLVsMassVsPtbackL = new TH3F("h3McCosPointAngleLVsMassVsPtbackL", "Cosine of V0's pointing angle",3,0,12, 20,0.997,1.007,140, 1.06, 1.2);
711 fOutputList->Add(fHistCosPointAngleLVsMassVsPtbackL);
714 //////////AntiLambda////////////// 2D histos: cut vs on fly status////
716 fHistDcaPosToPrimVertexAntiL = new TH2F("h2DcaPosToPrimVertexAntiL", "Positive V0 daughter;dca(cm);Status",100,0,10,2,-0.5,1.5);
717 fOutputList->Add(fHistDcaPosToPrimVertexAntiL);
719 fHistDcaNegToPrimVertexAntiL = new TH2F("h2DcaNegToPrimVertexAntiL", "Negative V0 daughter;dca(cm);Status",100,0,10,2,-0.5,1.5);
720 fOutputList->Add(fHistDcaNegToPrimVertexAntiL);
723 fHistRadiusV0AntiL = new TH2F("h2RadiusV0AntiL", "Radius;Radius(cm);Status",100,0,110,2,-0.5,1.5);
724 fOutputList->Add(fHistRadiusV0AntiL);
726 fHistDecayLengthV0AntiL = new TH2F("h2DecayLengthV0AntiL", "V0s decay Length;decay length(cm);Status", 500, 0, 500,2,-0.5,1.5);
727 fOutputList->Add(fHistDecayLengthV0AntiL);
729 fHistDcaV0DaughtersAntiL = new TH2F("h2DcaV0DaughtersAntiL", "DCA between daughters;dca(cm);Status", 300, 0, 3.0,2,-0.5,1.5);
730 fOutputList->Add(fHistDcaV0DaughtersAntiL);
732 fHistChi2AntiL = new TH2F("h2Chi2AntiL", "V0s chi2;chi2;Status", 100, 0, 0.10,2,-0.5,1.5);
733 fOutputList->Add(fHistChi2AntiL);
735 fHistCosPointAngleAntiL = new TH2F("h2CosPointAngleAntiL", "Cosine of V0's pointing angle", 200,0.99,1.01,2,-0.5,1.5);
736 fOutputList->Add(fHistCosPointAngleAntiL);
738 //////////AntiLambda////////////// 2D histos: cut vs mass////
740 fHistDcaPosToPrimVertexAntiLvsMass = new TH2F("h2DcaPosToPrimVertexAntiLvsMass", "Positive V0 daughter;dca(cm);Status",100,0,10,140, 1.06, 1.2);
741 fOutputList->Add(fHistDcaPosToPrimVertexAntiLvsMass);
743 fHistDcaNegToPrimVertexAntiLvsMass = new TH2F("h2DcaNegToPrimVertexAntiLvsMass", "Negative V0 daughter;dca(cm);Status",100,0,10,140, 1.06, 1.2);
744 fOutputList->Add(fHistDcaNegToPrimVertexAntiLvsMass);
747 fHistRadiusV0AntiLvsMass = new TH2F("h2RadiusV0AntiLvsMass", "Radius;Radius(cm);Status",110,0,110,140, 1.06, 1.2);
748 fOutputList->Add(fHistRadiusV0AntiLvsMass);
750 fHistDecayLengthV0AntiLvsMass = new TH2F("h2DecayLengthV0AntiLvsMass", "V0s decay Length;decay length(cm);Status", 120, 0, 120,140, 1.06, 1.2);
751 fOutputList->Add(fHistDecayLengthV0AntiLvsMass);
753 fHistDcaV0DaughtersAntiLvsMass = new TH2F("h2DcaV0DaughtersAntiLvsMass", "DCA between daughters;dca(cm);Status", 110, 0, 1.1,140, 1.06, 1.2);
754 fOutputList->Add(fHistDcaV0DaughtersAntiLvsMass);
756 fHistCosPointAngleAntiLvsMass = new TH2F("h2CosPointAngleAntiLvsMass", "Cosine of V0's pointing angle", 200,0.997,1.007,140, 1.06, 1.2);
757 fOutputList->Add(fHistCosPointAngleAntiLvsMass);
760 fHistMassK0 = new TH1F("h1MassK0", "K^{0} candidates;M(#pi^{+}#pi^{-}) (GeV/c^{2});Counts", 200, 0.4, 0.6);
761 fOutputList->Add(fHistMassK0);
763 fHistMassLambda = new TH1F("h1MassLambda", "#Lambda^{0} candidates;M(p#pi^{-}) (GeV/c^{2});Counts", 150, 1.05, 1.2);
764 fOutputList->Add(fHistMassLambda);
766 fHistMassAntiLambda = new TH1F("h1MassAntiLambda", "#bar{#Lambda}^{0} candidates;M(#bar{p}#pi^{+}) (GeV/c^{2});Counts", 150, 1.05, 1.2);
767 fOutputList->Add(fHistMassAntiLambda);
769 fHistMassVsRadiusK0 = new TH2F("h2MassVsRadiusK0", "K^{0} candidates;radius (cm);M(#pi^{+}#pi^{-}) (GeV/c^{2})",200,0,200, 200, 0.4, 0.6);
770 fOutputList->Add(fHistMassVsRadiusK0);
772 fHistMassVsRadiusLambda = new TH2F("h2MassVsRadiusLambda", "#Lambda candidates;radius (cm);M(p#pi^{-}) (GeV/c^{2})",200,0,200, 140, 1.06, 1.2);
773 fOutputList->Add(fHistMassVsRadiusLambda);
775 fHistMassVsRadiusAntiLambda = new TH2F("h2MassVsRadiusAntiLambda", "#bar{#Lambda} candidates;radius (cm);M(#bar{p}#pi^{+}) (GeV/c^{2})",200,0,200, 140, 1.06, 1.2);
776 fOutputList->Add(fHistMassVsRadiusAntiLambda);
779 fHistPtVsMassK0 = new TH2F("h2PtVsMassK0","K^{0} candidates;M(#pi^{+}#pi^{-}) (GeV/c^{2});p{t} (GeV/c)",400, 0.4, 0.6,240,0,12);
780 fOutputList->Add(fHistPtVsMassK0);
782 fHistPtVsMassLambda = new TH2F("h2PtVsMassLambda","#Lambda^{0} candidates;M(p#pi^{-}) (GeV/c^{2});p{t} (GeV/c)",280, 1.06, 1.2,240,0,12);
783 fOutputList->Add(fHistPtVsMassLambda);
785 fHistPtVsMassAntiLambda = new TH2F("h2PtVsMassAntiLambda","#AntiLambda^{0} candidates;M(p#pi^{-}) (GeV/c^{2});p{t} (GeV/c)",280, 1.06, 1.2,240,0,12);
786 fOutputList->Add(fHistPtVsMassAntiLambda);
788 ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
790 ///Armenteros Podolansky
791 fHistArmenterosPodolanski = new TH2F("h2ArmenterosPodolanski","Armenteros-Podolanski phase space;#alpha;p{t} arm",100,-1.0,1.0,50,0,0.5);
792 fOutputList->Add(fHistArmenterosPodolanski);
796 fHistNsigmaPosProtonLambda = new TH1F("h1NsigmaPosProtonLambda", "Positive daughter of Lambda;NsigmaProton;Counts",25,0,5);
797 fOutputList->Add(fHistNsigmaPosProtonLambda);
799 fHistNsigmaNegPionLambda = new TH1F("h1NsigmaNegPionLambda", "Negative daughter of Lambda;NsigmaPion;Counts",25,0,5);
800 fOutputList->Add(fHistNsigmaNegPionLambda);
802 fHistNsigmaPosProtonAntiLambda = new TH1F("h1NsigmaPosProtonAntiLambda", "Positive daughter of AntiLambda;NsigmaProton;Counts",25,0,5);
803 fOutputList->Add(fHistNsigmaPosProtonAntiLambda);
805 fHistNsigmaNegPionAntiLambda = new TH1F("h1NsigmaNegPionAntiLambda", "Negative daughter of AntiLambda;NsigmaPion;Counts",25,0,5);
806 fOutputList->Add(fHistNsigmaNegPionAntiLambda);
808 fHistNsigmaPosPionK0 = new TH1F("h1NsigmaPosPionK0", "Positive daughter of K0s;NsigmaPion;Counts",25,0,5);
809 fOutputList->Add(fHistNsigmaPosPionK0);
811 fHistNsigmaNegPionK0 = new TH1F("h1NsigmaNegPionK0", "Negative daughter of K0s;NsigmaPion;Counts",25,0,5);
812 fOutputList->Add(fHistNsigmaNegPionK0);
815 //--------------------------------------------MC Associated histograms -----------------------------------------------------//
818 fHistAsMcPtK0 = new TH1F("h1AsMcPtK0", "K^{0} associated;p{t} (GeV/c);Counts", 240,0,12);
819 fOutputList->Add(fHistAsMcPtK0);
821 fHistAsMcPtLambda = new TH1F("h1AsMcPtLambda", "#Lambda^{0} associated;p{t} (GeV/c);Counts", 240,0,12);
822 fOutputList->Add(fHistAsMcPtLambda);
824 fHistAsMcPtAntiLambda = new TH1F("h1AsMcPtAntiLambda", "#AntiLambda^{0} associated;p{t} (GeV/c);Counts", 240,0,12);
825 fOutputList->Add(fHistAsMcPtAntiLambda);
827 // Radius distribution
828 fHistAsMcProdRadiusK0 = new TH1F("h1AsMcProdRadiusK0", "K^{0} associated;r (cm);Counts", 500, 0, 100);
829 fOutputList->Add(fHistAsMcProdRadiusK0);
831 fHistAsMcProdRadiusLambda = new TH1F("h1AsMcProdRadiusLambda", "#Lambda^{0} associated;r (cm);Counts", 500, 0, 100);
832 fOutputList->Add(fHistAsMcProdRadiusLambda);
834 fHistAsMcProdRadiusAntiLambda = new TH1F("h1AsMcProdRadiusAntiLambda", "#bar{#Lambda}^{0} associated;r (cm);Counts", 500, 0, 100);
835 fOutputList->Add(fHistAsMcProdRadiusAntiLambda);
837 fHistAsMcProdRadiusXvsYK0s = new TH2F("h2AsMcProdRadiusXvsYK0s","Associated Secondary K^{0} Production Radius;x (cm); y (cm)",200,-50,50,200,-50,50);
838 fOutputList->Add(fHistAsMcProdRadiusXvsYK0s);
840 fHistAsMcProdRadiusXvsYLambda = new TH2F("h2AsMcProdRadiusXvsYLambda","Associated Secondary #Lambda^{0} Production Radius;x (cm); y (cm)",200,-50,50,200,-50,50);
841 fOutputList->Add(fHistAsMcProdRadiusXvsYLambda);
843 fHistAsMcProdRadiusXvsYAntiLambda = new TH2F("h2AsMcProdRadiusXvsYAntiLambda","Associated Secondary #bar{#Lambda}^{0} Production Radius;x (cm); y (cm)",200,-50,50,200,-50,50);
844 fOutputList->Add(fHistAsMcProdRadiusXvsYAntiLambda);
847 fHistPidMcMassK0 = new TH1F("h1PidMcMassK0", "K^{0} MC PId checked;M(#pi^{+}#pi^{-}) (GeV/c^{2});Counts", 100, 0.4, 0.6);
848 fOutputList->Add(fHistPidMcMassK0);
850 fHistPidMcMassLambda = new TH1F("h1PidMcMassLambda", "#Lambda^{0} MC PId checked;M(p#pi^{-}) (GeV/c^{2});Counts", 75, 1.05, 1.2);
851 fOutputList->Add(fHistPidMcMassLambda);
853 fHistPidMcMassAntiLambda = new TH1F("h1PidMcMassAntiLambda", "#bar{#Lambda}^{0} MC PId checked;M(#bar{p}#pi^{+}) (GeV/c^{2});Counts", 75, 1.05, 1.2);
854 fOutputList->Add(fHistPidMcMassAntiLambda);
856 fHistAsMcMassK0 = new TH1F("h1AsMcMassK0", "K^{0} associated;M(#pi^{+}#pi^{-}) (GeV/c^{2});Counts", 100, 0.4, 0.6);
857 fOutputList->Add(fHistAsMcMassK0);
859 fHistAsMcMassLambda = new TH1F("h1AsMcMassLambda", "#Lambda^{0} associated;M(p#pi^{-}) (GeV/c^{2});Counts", 75, 1.05, 1.2);
860 fOutputList->Add(fHistAsMcMassLambda);
862 fHistAsMcMassAntiLambda = new TH1F("h1AsMcMassAntiLambda", "#bar{#Lambda}^{0} associated;M(#bar{p}#pi^{+}) (GeV/c^{2});Counts", 75, 1.05, 1.2);
863 fOutputList->Add(fHistAsMcMassAntiLambda);
866 fHistAsMcPtVsMassK0 = new TH2F("h2AsMcPtVsMassK0","K^{0} associated;M(#pi^{+}#pi^{-}) (GeV/c^{2});p{t} (GeV/c)",200, 0.4, 0.6,240,0,12);
867 fOutputList->Add(fHistAsMcPtVsMassK0);
869 fHistAsMcPtVsMassLambda = new TH2F("h2AsMcPtVsMassLambda","#Lambda^{0} associated;M(p#pi^{-}) (GeV/c^{2});p{t} (GeV/c)",140, 1.06, 1.2,240,0,12);
870 fOutputList->Add(fHistAsMcPtVsMassLambda);
872 fHistAsMcPtVsMassAntiLambda = new TH2F("h2AsMcPtVsMassAntiLambda","#bar{#Lambda}^{0} associated;M(#bar{p}#pi^{+}) (GeV/c^{2});p{t} (GeV/c)",140, 1.06, 1.2,240,0,12);
873 fOutputList->Add(fHistAsMcPtVsMassAntiLambda);
876 // invariant mass vs radius
877 fHistAsMcMassVsRadiusK0 = new TH2F("h2AsMcMassVsRadiusK0", "K^{0} associated;radius (cm);M(#pi^{+}#pi^{-}) (GeV/c^{2})",200,0,200, 500, 0.47, 0.52);
878 fOutputList->Add(fHistAsMcMassVsRadiusK0);
880 fHistAsMcMassVsRadiusLambda = new TH2F("h2AsMcMassVsRadiusLambda", "#Lambda associated;radius (cm);M(p#pi^{-}) (GeV/c^{2})",200,0,200, 1.10, 1.13);
881 fOutputList->Add(fHistAsMcMassVsRadiusLambda);
883 fHistAsMcMassVsRadiusAntiLambda = new TH2F("h2AsMcMassVsRadiusAntiLambda", "#bar{#Lambda} associated;radius (cm);M(#bar{p}#pi^{+}) (GeV/c^{2})",200,0,200 , 1.10, 1.13);
884 fOutputList->Add(fHistAsMcMassVsRadiusAntiLambda);
886 // Position Resolution
887 fHistAsMcResxK0 = new TH1F("h1AsMcResxK0", "K^{0} associated;#Delta x (cm);Counts", 50, -0.25, 0.25);
888 fOutputList->Add(fHistAsMcResxK0);
889 fHistAsMcResyK0 = new TH1F("h1AsMcResyK0", "K^{0} associated;#Delta y (cm);Counts", 50, -0.25, 0.25);
890 fOutputList->Add(fHistAsMcResyK0);
891 fHistAsMcReszK0 = new TH1F("h1AsMcReszK0", "K^{0} associated;#Delta z (cm);Counts", 50, -0.25, 0.25);
892 fOutputList->Add(fHistAsMcReszK0);
893 fHistAsMcResrVsRadiusK0 = new TH2F("h2AsMcResrVsRadiusK0", "K^{0} associated;Radius (cm);#Delta r (cm)",200,0.0,50., 50, -0.25, 0.25);
894 fOutputList->Add(fHistAsMcResrVsRadiusK0);
895 fHistAsMcReszVsRadiusK0 = new TH2F("h2AsMcReszVsRadiusK0", "K^{0} associated;Radius (cm);#Delta z (cm)",200,0.0,50.0, 50, -0.25, 0.25);
896 fOutputList->Add(fHistAsMcReszVsRadiusK0);
898 fHistAsMcResxLambda = new TH1F("h1AsMcResxLambda", "#Lambda^{0} associated;#Delta x (cm);Counts", 50, -0.25, 0.25);
899 fOutputList->Add(fHistAsMcResxLambda);
900 fHistAsMcResyLambda = new TH1F("h1AsMcResyLambda", "#Lambda^{0} associated;#Delta y (cm);Counts", 50, -0.25, 0.25);
901 fOutputList->Add(fHistAsMcResyLambda);
902 fHistAsMcReszLambda = new TH1F("h1AsMcReszLambda", "#Lambda^{0} associated;#Delta z (cm);Counts", 50, -0.25, 0.25);
903 fOutputList->Add(fHistAsMcReszLambda);
904 fHistAsMcResrVsRadiusLambda = new TH2F("h2AsMcResrVsRadiusLambda", "#Lambda^{0} associated;Radius (cm);#Delta r (cm)",200,0.0,50.0, 50, -0.25, 0.25);
905 fOutputList->Add(fHistAsMcResrVsRadiusLambda);
906 fHistAsMcReszVsRadiusLambda = new TH2F("h2AsMcReszVsRadiusLambda", "#Lambda^{0} associated;Radius (cm);#Delta z (cm)",200,0.0,50.0, 50, -0.25, 0.25);
907 fOutputList->Add(fHistAsMcReszVsRadiusLambda);
909 fHistAsMcResxAntiLambda = new TH1F("h1AsMcResxAntiLambda", "#bar{#Lambda}^{0} associated;#Delta x (cm);Counts", 50, -0.25, 0.25);
910 fOutputList->Add(fHistAsMcResxAntiLambda);
911 fHistAsMcResyAntiLambda = new TH1F("h1AsMcResyAntiLambda", "#bar{#Lambda}^{0} associated;#Delta y (cm);Counts", 50, -0.25, 0.25);
912 fOutputList->Add(fHistAsMcResyAntiLambda);
913 fHistAsMcReszAntiLambda = new TH1F("h1AsMcReszAntiLambda", "#bar{#Lambda}^{0} associated;#Delta z (cm);Counts", 50, -0.25, 0.25);
914 fOutputList->Add(fHistAsMcReszAntiLambda);
915 fHistAsMcResrVsRadiusAntiLambda = new TH2F("h2AsMcResrVsRadiusAntiLambda", "#bar{#Lambda}^{0} associated;Radius (cm);#Delta r (cm)",200,0.0,50.0, 50, -0.25, 0.25);
916 fOutputList->Add(fHistAsMcResrVsRadiusAntiLambda);
917 fHistAsMcReszVsRadiusAntiLambda = new TH2F("h2AsMcReszVsRadiusAntiLambda", "#bar{#Lambda}^{0} associated;Radius (cm);#Delta z (cm)",200,0.0,50.0, 50, -0.25, 0.25);
918 fOutputList->Add(fHistAsMcReszVsRadiusAntiLambda);
921 fHistAsMcResPtK0 = new TH1F("h1AsMcResPtK0","Pt Resolution K^{0};#Delta Pt;Counts",200,-1,1);
922 fOutputList->Add(fHistAsMcResPtK0);
924 fHistAsMcResPtLambda = new TH1F("h1AsMcResPtLambda","Pt Resolution #Lambda^{0};#Delta Pt;Counts",200,-1,1);
925 fOutputList->Add(fHistAsMcResPtLambda);
927 fHistAsMcResPtAntiLambda = new TH1F("h1AsMcResPtAntiLambda","Pt Resolution #bar{#Lambda}^{0};#Delta Pt;Counts",200,-1,1);
928 fOutputList->Add(fHistAsMcResPtAntiLambda);
931 fHistAsMcResPtVsRapK0 = new TH2F("h2AsMcResPtVsRapK0","Pt Resolution K^{0};#Delta Pt;Rap",200,-1,1,20,-1,1);
932 fOutputList->Add(fHistAsMcResPtVsRapK0);
934 fHistAsMcResPtVsRapLambda = new TH2F("h2AsMcResPtVsRapLambda","Pt Resolution #Lambda^{0};#Delta Pt;Rap",200,-1,1,20,-1,1);
935 fOutputList->Add(fHistAsMcResPtVsRapLambda);
937 fHistAsMcResPtVsRapAntiLambda = new TH2F("h2AsMcResPtVsRapAntiLambda","Pt Resolution #bar{#Lambda}^{0};#Delta Pt;Rap",200,-1,1,20,-1,1);
938 fOutputList->Add(fHistAsMcResPtVsRapAntiLambda);
940 fHistAsMcResPtVsPtK0 = new TH2F("h2AsMcResPtVsPtK0","Pt Resolution K^{0};#Delta Pt;Pt",600,-0.15,0.15,240,0,12);
941 fOutputList->Add(fHistAsMcResPtVsPtK0);
943 fHistAsMcResPtVsPtLambda = new TH2F("h2AsMcResPtVsPtLambda","Pt Resolution #Lambda^{0};#Delta Pt;Pt",600,-0.15,0.15,240,0,12);
944 fOutputList->Add(fHistAsMcResPtVsPtLambda);
946 fHistAsMcResPtVsPtAntiLambda = new TH2F("h2AsMcResPtVsPtAntiLambda","Pt Resolution #bar{#Lambda}^{0};#Delta Pt;Pt",300,-0.15,0.15,240,0,12);
947 fOutputList->Add(fHistAsMcResPtVsPtAntiLambda);
949 // Pt distribution Lambda from Sigma
950 fHistAsMcPtLambdaFromSigma = new TH1F("h1AsMcPtLambdaFromSigma","#Lambda}^{0} associated from Sigma;p{t} (GeV/c);Count",240,0,12);
951 fOutputList->Add(fHistAsMcPtLambdaFromSigma);
953 fHistAsMcPtAntiLambdaFromSigma = new TH1F("h1AsMcPtAntiLambdaFromSigma","#bar{#Lambda}^{0} associated from Sigma;p{t} (GeV/c);Count",240,0,12);
954 fOutputList->Add(fHistAsMcPtAntiLambdaFromSigma);
956 // Associated secondary particles:
957 // Pt and rapidity distribution
958 fHistAsMcSecondaryPtVsRapK0s = new TH2F("h2AsMcSecondaryPtVsRapK0s", "K^{0} associated secondary;p{t} (GeV/c);rapidity",240,0,12,30,-1.5,1.5);
959 fOutputList->Add(fHistAsMcSecondaryPtVsRapK0s);
961 fHistAsMcSecondaryPtVsRapLambda = new TH2F("h2AsMcSecondaryPtVsRapLambda", "#Lambda^{0} associated secondary;p{t} (GeV/c);rapidity",240,0,12,30,-1.5,1.5);
962 fOutputList->Add(fHistAsMcSecondaryPtVsRapLambda);
964 fHistAsMcSecondaryPtVsRapAntiLambda = new TH2F("h2AsMcSecondaryPtVsRapAntiLambda", "#bar{#Lambda}^{0} associated secondary;p{t} (GeV/c);rapidity",240,0,12,30,-1.5,1.5);
965 fOutputList->Add(fHistAsMcSecondaryPtVsRapAntiLambda);
968 fHistAsMcSecondaryProdRadiusK0s = new TH1F("h1AsMcSecondaryProdRadiusK0s", "K^{0} Production Radius;r (cm);Count", 170, -2, 15);
969 fOutputList->Add(fHistAsMcSecondaryProdRadiusK0s);
971 fHistAsMcSecondaryProdRadiusLambda = new TH1F("h1AsMcSecondaryProdRadiusLambda", "#Lambda^{0} Production Radius;r (cm);Count", 170, -2, 15);
972 fOutputList->Add(fHistAsMcSecondaryProdRadiusLambda);
974 fHistAsMcSecondaryProdRadiusAntiLambda = new TH1F("h1AsMcSecondaryProdRadiusAntiLambda", "#bar{#Lambda}^{0} Production Radius;r (cm);Count", 170, -2, 15);
975 fOutputList->Add(fHistAsMcSecondaryProdRadiusAntiLambda);
977 fHistAsMcSecondaryProdRadiusXvsYK0s = new TH2F("h2AsMcSecondaryProdRadiusXvsYK0s","Associated Secondary K^{0} Production Radius;x (cm); y (cm)",200,-20,20,200,-20,20);
978 fOutputList->Add(fHistAsMcSecondaryProdRadiusXvsYK0s);
980 fHistAsMcSecondaryProdRadiusXvsYLambda = new TH2F("h2AsMcSecondaryProdRadiusXvsYLambda","Associated Secondary #Lambda^{0} Production Radius;x (cm); y (cm)",200,-20,20,200,-20,20);
981 fOutputList->Add(fHistAsMcSecondaryProdRadiusXvsYLambda);
983 fHistAsMcSecondaryProdRadiusXvsYAntiLambda = new TH2F("h2AsMcSecondaryProdRadiusXvsYAntiLambda","Associated Secondary #bar{#Lambda}^{0} Production Radius;x (cm); y (cm)",200,-20,20,200,-20,20);
984 fOutputList->Add(fHistAsMcSecondaryProdRadiusXvsYAntiLambda);
986 // Pt distribution Lambda from Sigma
987 fHistAsMcSecondaryPtLambdaFromSigma = new TH1F("h1AsMcSecondaryPtLambdaFromSigma","#Lambda}^{0} associated from Sigma;p{t} (GeV/c);Count",240,0,12);
988 fOutputList->Add(fHistAsMcSecondaryPtLambdaFromSigma);
990 fHistAsMcSecondaryPtAntiLambdaFromSigma = new TH1F("h1AsMcSecondaryPtAntiLambdaFromSigma","#bar{#Lambda}^{0} associated from Sigma;p{t} (GeV/c);Count",240,0,12);
991 fOutputList->Add(fHistAsMcSecondaryPtAntiLambdaFromSigma);
994 //----------------------------------------------Correlation histograms -----------------------------------------------------//
996 fHistSibK0 = new TH2F("hfHistSibK0","",CorrBinsX,-2*fTrackEtaCut,2*fTrackEtaCut,CorrBinsY,-TMath::Pi()/2,3*TMath::Pi()/2);
997 fHistSibK0->SetXTitle("#Delta #Phi");
998 fHistSibK0->SetStats(0);
1000 fOutputList->Add(fHistSibK0);
1002 fHistMixK0 = new TH2F("hfHistMixK0","",CorrBinsX,-2*fTrackEtaCut,2*fTrackEtaCut,CorrBinsY,-TMath::Pi()/2,3*TMath::Pi()/2);
1003 fHistMixK0->SetXTitle("#Delta #Phi");
1004 fHistMixK0->SetStats(0);
1005 fHistMixK0->Sumw2();
1006 fOutputList->Add(fHistMixK0);
1008 fHistSibLambda = new TH2F("hfHistSibLambda","",CorrBinsX,-2*fTrackEtaCut,2*fTrackEtaCut,CorrBinsY,-TMath::Pi()/2,3*TMath::Pi()/2);
1009 fHistSibLambda->SetXTitle("#Delta #Phi");
1010 fHistSibLambda->SetStats(0);
1011 fHistSibLambda->Sumw2();
1012 fOutputList->Add(fHistSibLambda);
1014 fHistMixLambda= new TH2F("hfHistMixLambda","",CorrBinsX,-2*fTrackEtaCut,2*fTrackEtaCut,CorrBinsY,-TMath::Pi()/2,3*TMath::Pi()/2);
1015 fHistMixLambda->SetXTitle("#Delta #Phi");
1016 fHistMixLambda->SetStats(0);
1017 fHistMixLambda->Sumw2();
1018 fOutputList->Add(fHistMixLambda);
1020 fHistSibK0MC = new TH2F("hfHistSibK0MC","",CorrBinsX,-2*fTrackEtaCut,2*fTrackEtaCut,CorrBinsY,-TMath::Pi()/2,3*TMath::Pi()/2);
1021 fHistSibK0MC->SetXTitle("#Delta #Phi");
1022 fHistSibK0MC->SetStats(0);
1023 fHistSibK0MC->Sumw2();
1024 fOutputList->Add(fHistSibK0MC);
1026 fHistMixK0MC = new TH2F("hfHistMixK0MC","",CorrBinsX,-2*fTrackEtaCut,2*fTrackEtaCut,CorrBinsY,-TMath::Pi()/2,3*TMath::Pi()/2);
1027 fHistMixK0MC->SetXTitle("#Delta #Phi");
1028 fHistMixK0MC->SetStats(0);
1029 fHistMixK0MC->Sumw2();
1030 fOutputList->Add(fHistMixK0MC);
1032 fHistSibLambdaMC = new TH2F("hfHistSibLambdaMC","",CorrBinsX,-2*fTrackEtaCut,2*fTrackEtaCut,CorrBinsY,-TMath::Pi()/2,3*TMath::Pi()/2);
1033 fHistSibLambdaMC->SetXTitle("#Delta #Phi");
1034 fHistSibLambdaMC->SetStats(0);
1035 fHistSibLambdaMC->Sumw2();
1036 fOutputList->Add(fHistSibLambdaMC);
1038 fHistMixLambdaMC= new TH2F("hfHistMixLambdaMC","",CorrBinsX,-2*fTrackEtaCut,2*fTrackEtaCut,CorrBinsY,-TMath::Pi()/2,3*TMath::Pi()/2);
1039 fHistMixLambdaMC->SetXTitle("#Delta #Phi");
1040 fHistMixLambdaMC->SetStats(0);
1041 fHistMixLambdaMC->Sumw2();
1042 fOutputList->Add(fHistMixLambdaMC);
1044 //----------------------------------------------Event Pool-----------------------------------------------------//
1046 fPoolMgr = new AliEventPoolManager(fPoolMaxNEvents, fPoolMinNTracks, fNCentBins, fCentBins, fNzVtxBins, fZvtxBins);
1047 if(!fPoolMgr) return;
1049 PostData(1, fOutputList);
1052 //---------------------------------------------------------------------------------------
1053 void AliLeadingV0Correlation::UserExec(Option_t *)
1056 AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
1057 AliInputEventHandler *inEvMain = (AliInputEventHandler*)(mgr->GetInputEventHandler());
1058 if (!inEvMain) return;
1060 // Pointers to PID Response objects.
1061 fPIDResponse = inEvMain->GetPIDResponse();
1062 //cout << "PID Response object: " << fPIDResponse << endl;
1064 fAODEvent = dynamic_cast<AliAODEvent*>(inEvMain->GetEvent());
1065 if(!fAODEvent) return;
1068 // physics selection
1069 UInt_t maskIsSelected = inEvMain->IsEventSelected();
1070 Bool_t isSelected = ((maskIsSelected & AliVEvent::kMB) || (maskIsSelected & AliVEvent::kCentral) || (maskIsSelected & AliVEvent::kSemiCentral));
1071 if (!isSelected) return;
1073 //-----------------------------MC Accsess------------------------------------------------
1074 TClonesArray *stack = 0x0;
1075 Double_t mcXv=0., mcYv=0., mcZv=0.;
1076 Int_t ntrk =0, ntrk0=0;
1078 TObjArray *selectedTracksLeadingK0MC =0x0;
1079 TObjArray *selectedTracksLeadingLambdaMC = 0x0;
1081 TObjArray * selectedK0MC =new TObjArray;
1082 selectedK0MC->SetOwner(kTRUE);
1084 TObjArray * selectedLambdaMC =new TObjArray;
1085 selectedLambdaMC->SetOwner(kTRUE);
1088 TList *lst = fAODEvent->GetList();
1089 stack = (TClonesArray*)lst->FindObject(AliAODMCParticle::StdBranchName());
1090 if (!stack) {Printf("ERROR: stack not available");return;}
1092 AliAODMCHeader *mcHdr=(AliAODMCHeader*)lst->FindObject(AliAODMCHeader::StdBranchName());
1093 mcXv=mcHdr->GetVtxX(); mcYv=mcHdr->GetVtxY(); mcZv=mcHdr->GetVtxZ();
1094 ntrk=stack->GetEntriesFast(), ntrk0=ntrk;
1095 if(TMath::Abs(mcZv)>fpvzcut)return;
1097 selectedTracksLeadingK0MC = FindLeadingObjectsK0MC(stack);
1098 if(!selectedTracksLeadingK0MC) return;
1099 selectedTracksLeadingK0MC->SetOwner(kTRUE);
1101 selectedTracksLeadingLambdaMC = FindLeadingObjectsLambdaMC(stack);
1102 if(!selectedTracksLeadingLambdaMC) return;
1103 selectedTracksLeadingLambdaMC->SetOwner(kTRUE);
1108 Double_t lLimitPPID = 0.7;
1109 Float_t cutNSigmaLowP = 1E3;
1110 Float_t cutNSigmaHighP = 1E3;
1111 if (fUsePID=="withPID") {
1112 cutNSigmaLowP = 3.0;
1113 cutNSigmaHighP = 3.0;
1116 Double_t lmcPrimVtxR = 0;
1118 Int_t lPdgcodeCurrentPart = 0;
1119 Double_t lRapCurrentPart = 0;
1120 Double_t lPtCurrentPart = 0;
1121 Double_t lPhiCurrentPart = 0;
1122 Double_t lEtaCurrentPart = 0;
1123 Int_t lComeFromSigma = 0;
1126 Int_t LambdaPID = 0;
1127 Int_t AntiLambdaPID = 0;
1130 // Production Radius
1131 Double_t mcPosX = 0.0, mcPosY = 0.0, mcPosZ = 0.0;
1132 Double_t mcPosR = 0.0;
1135 Double_t mcDecayPosX = 0, mcDecayPosY = 0, mcDecayPosR = 0;
1137 // current mc particle 's mother
1138 Int_t iCurrentMother = 0, lPdgCurrentMother = 0;
1140 // current mc particles 's daughter:
1141 Int_t lPdgCurrentDaughter0 = 0, lPdgCurrentDaughter1 = 0;
1143 // variables for multiple reconstruction studies:
1144 Int_t id0 = 0, id1 = 0;
1145 Int_t lNtimesReconstructedK0s = 0, lNtimesReconstructedLambda = 0, lNtimesReconstructedAntiLambda = 0;
1148 // Start loop over MC particles
1152 fHistMCPrimaryVertexX->Fill(mcXv);
1153 fHistMCPrimaryVertexY->Fill(mcYv);
1154 fHistMCPrimaryVertexZ->Fill(mcZv);
1156 lmcPrimVtxR = TMath::Sqrt(mcXv*mcXv+mcYv*mcYv);
1159 for (Int_t iMc = 0; iMc < (ntrk); iMc++) {
1160 AliAODMCParticle *p0=(AliAODMCParticle*)stack->UncheckedAt(iMc);
1163 lPdgcodeCurrentPart = p0->GetPdgCode();
1165 // Keep only K0s, Lambda and AntiLambda, Xi and Phi:
1166 if ( (lPdgcodeCurrentPart != 310 ) && (lPdgcodeCurrentPart != 3122 ) && (lPdgcodeCurrentPart != -3122 ) && (lPdgcodeCurrentPart != 3312 ) && (lPdgcodeCurrentPart != -3312) && (lPdgcodeCurrentPart != -333) ) continue;
1168 lRapCurrentPart = p0->Y();
1169 lPtCurrentPart = p0->Pt();
1170 lPhiCurrentPart = p0->Phi();
1171 lEtaCurrentPart = p0->Eta();
1172 iCurrentMother = p0->GetMother();
1174 AliAODMCParticle *Mother = (AliAODMCParticle*)stack->UncheckedAt(iCurrentMother);
1175 if (iCurrentMother == -1){lPdgCurrentMother=0; } else {lPdgCurrentMother = Mother->GetPdgCode();}
1180 mcPosR = TMath::Sqrt(mcPosX*mcPosX+mcPosY*mcPosY);
1182 id0 = p0->GetDaughter(0);
1183 id1 = p0->GetDaughter(1);
1185 // Decay Radius and Production Radius
1186 if ( id0 <= ntrk && id0 > 0 && id1 <= ntrk && id1 > 0) {
1187 AliAODMCParticle *pDaughter0 = (AliAODMCParticle*)stack->UncheckedAt(id0);
1188 AliAODMCParticle *pDaughter1 = (AliAODMCParticle*)stack->UncheckedAt(id1);
1189 lPdgCurrentDaughter0 = pDaughter0->GetPdgCode();
1190 lPdgCurrentDaughter1 = pDaughter1->GetPdgCode();
1192 mcDecayPosX = pDaughter0->Xv();
1193 mcDecayPosY = pDaughter0->Yv();
1194 mcDecayPosR = TMath::Sqrt(mcDecayPosX*mcDecayPosX+mcDecayPosY*mcDecayPosY);
1196 else {mcDecayPosR = -1.0;}
1198 if (lPdgcodeCurrentPart==310) {
1199 fHistMCtracksProdRadiusK0s->Fill(mcPosX,mcPosY);
1200 fHistMCtracksDecayRadiusK0s->Fill(mcDecayPosR);
1201 if (TMath::Abs(lRapCurrentPart) < fRapidityCut) fHistMCPtAllK0s->Fill(lPtCurrentPart);
1203 else if (lPdgcodeCurrentPart==3122) {
1204 fHistMCtracksProdRadiusLambda->Fill(mcPosX,mcPosY);
1205 fHistMCtracksDecayRadiusLambda->Fill(mcDecayPosR);
1206 if (TMath::Abs(lRapCurrentPart) < fRapidityCut) fHistMCPtAllLambda->Fill(lPtCurrentPart);
1208 else if (lPdgcodeCurrentPart==-3122) {
1209 fHistMCtracksProdRadiusAntiLambda->Fill(mcPosX,mcPosY);
1210 fHistMCtracksDecayRadiusAntiLambda->Fill(mcDecayPosR);
1211 if (TMath::Abs(lRapCurrentPart) < fRapidityCut) fHistMCPtAllAntiLambda->Fill(lPtCurrentPart);
1214 if ( ( ( TMath::Abs(lPdgCurrentMother) == 3212) ||
1215 ( TMath::Abs(lPdgCurrentMother) == 3224) ||
1216 ( TMath::Abs(lPdgCurrentMother) == 3214) ||
1217 ( TMath::Abs(lPdgCurrentMother) == 3114) )
1218 && ( Mother->GetMother() == -1)
1219 ) lComeFromSigma = 1;
1220 else lComeFromSigma = 0;
1225 Double_t ProdDistance = 0;
1228 dx = ( ( mcXv) - (mcPosX) );
1229 dy = ( ( mcYv) - (mcPosY) );
1230 dz = ( ( mcZv) - (mcPosZ) );
1232 ProdDistance = TMath::Sqrt(dx*dx + dy*dy + dz*dz);
1233 if (ProdDistance > 0.001) continue; // secondary V0
1235 //********************************************
1237 lNtimesReconstructedK0s = 0; lNtimesReconstructedLambda = 0; lNtimesReconstructedAntiLambda = 0;
1240 if (TMath::Abs(lRapCurrentPart) > fRapidityCut) continue;
1242 if (lPdgcodeCurrentPart==310) {
1243 fHistMCRapK0s->Fill(lRapCurrentPart);
1244 fHistMCProdRadiusK0s->Fill(mcPosR);
1245 fHistMCPtK0s->Fill(lPtCurrentPart);
1246 fHistNTimesRecK0s->Fill(lNtimesReconstructedK0s);
1247 fHistNTimesRecK0sVsPt->Fill(lPtCurrentPart,lNtimesReconstructedK0s);
1248 fHistPrimRawPtVsYK0s->Fill(lPtCurrentPart,lRapCurrentPart);
1249 selectedK0MC->Add(new AliLeadingBasicParticle(lEtaCurrentPart,lPhiCurrentPart,lPtCurrentPart));
1252 if (lPdgcodeCurrentPart==3122) {
1253 fHistMCRapLambda->Fill(lRapCurrentPart);
1254 fHistMCProdRadiusLambda->Fill(mcPosR);
1255 fHistMCPtLambda->Fill(lPtCurrentPart);
1256 fHistNTimesRecLambda->Fill(lNtimesReconstructedLambda);
1257 fHistNTimesRecLambdaVsPt->Fill(lPtCurrentPart,lNtimesReconstructedLambda);
1258 fHistPrimRawPtVsYLambda->Fill(lPtCurrentPart,lRapCurrentPart);
1259 if (lComeFromSigma) fHistMCPtLambdaFromSigma->Fill(lPtCurrentPart);
1260 selectedLambdaMC->Add(new AliLeadingBasicParticle(lEtaCurrentPart,lPhiCurrentPart,lPtCurrentPart));
1264 if (lPdgcodeCurrentPart==-3122) {
1265 fHistMCRapAntiLambda->Fill(lRapCurrentPart);
1266 fHistMCProdRadiusAntiLambda->Fill(mcPosR);
1267 fHistMCPtAntiLambda->Fill(lPtCurrentPart);
1268 fHistNTimesRecAntiLambda->Fill(lNtimesReconstructedAntiLambda);
1269 fHistNTimesRecAntiLambdaVsPt->Fill(lPtCurrentPart,lNtimesReconstructedAntiLambda);
1270 fHistPrimRawPtVsYAntiLambda->Fill(lPtCurrentPart,lRapCurrentPart);
1271 if (lComeFromSigma) fHistMCPtAntiLambdaFromSigma->Fill(lPtCurrentPart);
1274 } // end loop AOD MC
1276 } // End Loop over MC condition
1278 //-----------------------------------------------------------------------------------------
1281 Double_t lPrimaryVtxPosition[3];
1282 AliAODVertex *myPrimVertex = fAODEvent->GetPrimaryVertex();
1283 if (!myPrimVertex) return;
1284 myPrimVertex->GetXYZ(lPrimaryVtxPosition);
1286 Double_t lPVx = lPrimaryVtxPosition[0];
1287 Double_t lPVy = lPrimaryVtxPosition[1];
1288 Double_t lPVz = lPrimaryVtxPosition[2];
1289 if ((TMath::Abs(lPVz)) >= fpvzcut) return ;
1291 if (TMath::Abs(lPVx)<10e-5 && TMath::Abs(lPVy)<10e-5 && TMath::Abs(lPVz)<10e-5) return;
1294 fHistPrimaryVertexX->Fill(lPVx);
1295 fHistPrimaryVertexY->Fill(lPVy);
1296 fHistPrimaryVertexZ->Fill(lPVz);
1298 // Centrality definition
1299 AliCentrality *centralityObj = 0;
1300 Int_t multiplicity = -1;
1301 Double_t MultipOrCent = -1;
1303 // initialize the pool for event mixing
1304 if(fcollidingSys=="PP"){
1305 multiplicity = fAODEvent->GetNTracks();
1306 MultipOrCent = multiplicity; // convert from Int_t to Double_t
1308 if(fcollidingSys=="PbPb"){
1309 centralityObj = fAODEvent->GetHeader()->GetCentralityP();
1310 MultipOrCent = centralityObj->GetCentralityPercentileUnchecked("V0M");
1313 Double_t * CentBins = fCentBins;
1314 Double_t poolmin=CentBins[0];
1315 Double_t poolmax=CentBins[fNCentBins];
1317 TObjArray *selectedTracksLeadingK0 = FindLeadingObjectsK0(fAODEvent);
1318 if(!selectedTracksLeadingK0) return;
1319 selectedTracksLeadingK0->SetOwner(kTRUE);
1321 TObjArray *selectedTracksLeadingLambda = FindLeadingObjectsLambda(fAODEvent);
1322 if(!selectedTracksLeadingLambda) return;
1323 selectedTracksLeadingLambda->SetOwner(kTRUE);
1325 // -------------------------------------V0 loop for reconstructed event------------------------
1327 Double_t cutcTauL = 3*7.89;
1328 Double_t cutcTauK0 = 3*2.68;
1330 Double_t lPLambda = 0;
1331 Double_t lPAntiLambda = 0;
1335 Double_t lV0Position[3];
1337 Double_t lDcaPosToPrimVertex = 0;
1338 Double_t lDcaNegToPrimVertex = 0;
1339 Double_t lDcaV0Daughters = 0;
1340 Double_t lV0cosPointAngle = 0;
1341 Double_t lChi2V0 = 0;
1342 Double_t lV0DecayLength = 0;
1343 Double_t lV0Radius = 0;
1344 Double_t lDcaV0ToPrimVertex = 0;
1345 Double_t lcTauLambda = 0;
1346 Double_t lcTauAntiLambda = 0;
1347 Double_t lcTauK0s = 0;
1348 Int_t lOnFlyStatus = 0;
1350 Double_t lInvMassK0 = 0, lInvMassLambda = 0, lInvMassAntiLambda = 0;
1351 Double_t lPtK0s = 0, lPtLambda = 0, lPtAntiLambda = 0;
1352 Double_t lPhiK0s = 0, lPhiLambda = 0, lPhiAntiLambda = 0;
1353 Double_t lEtaK0s = 0, lEtaLambda = 0, lEtaAntiLambda = 0;
1354 Double_t lRapK0s = 0, lRapLambda = 0, lRapAntiLambda = 0;
1355 Double_t lPzK0s = 0, lPzLambda = 0, lPzAntiLambda = 0;
1356 Double_t lAlphaV0 = 0, lPtArmV0 = 0;
1360 Double_t lV0Eta = 999;
1364 UInt_t lLabelTrackPos = 0, lLabelTrackNeg = 0;
1365 Int_t lCheckPIdK0Short = 0, lCheckMcK0Short = 0;
1366 Int_t lCheckPIdLambda = 0, lCheckMcLambda = 0;
1367 Int_t lCheckPIdAntiLambda = 0, lCheckMcAntiLambda = 0;
1368 Int_t lCheckSecondaryK0s = 0, lCheckSecondaryLambda = 0, lCheckSecondaryAntiLambda = 0;
1369 Int_t lCheckGamma = 0;
1370 Double_t mcPosMotherX = 0, mcPosMotherY = 0, mcPosMotherZ = 0;
1371 Double_t mcPosMotherR = 0;
1372 Double_t mcMotherPt = 0;
1374 Int_t lIndexPosMother = 0;
1375 Int_t lIndexNegMother = 0;
1376 Int_t lIndexMotherOfMother = 0;
1377 Int_t lPDGCodePosDaughter = 0;
1378 Int_t lPDGCodeNegDaughter = 0;
1379 Int_t lPdgcodeMother = 0;
1380 Int_t lPdgcodeMotherOfMother = 0;
1382 // Reconstructed position
1383 Double_t rcPosXK0s = 0, rcPosYK0s = 0, rcPosZK0s = 0;
1384 Double_t rcPosRK0s = 0;
1385 Double_t rcPosXLambda = 0, rcPosYLambda = 0, rcPosZLambda = 0;
1386 Double_t rcPosRLambda = 0;
1387 Double_t rcPosXAntiLambda = 0, rcPosYAntiLambda = 0, rcPosZAntiLambda = 0;
1388 Double_t rcPosRAntiLambda = 0;
1391 Double_t deltaPtK0s = 0, deltaPtLambda = 0, deltaPtAntiLambda = 0;
1394 // Double_t V0mom[3] = {999,999,999};
1395 Double_t lPosMom = 0;
1396 Double_t lNegMom = 0;
1398 // Daughters' momentum:
1399 Double_t lMomPos[3] = {999,999,999};
1400 Double_t lMomNeg[3] = {999,999,999};
1401 Double_t lPtPos = 999, lPtNeg = 999;
1402 Double_t lPPos = 999, lPNeg = 999;
1404 // Inner Wall parameters:
1405 Double_t lMomInnerWallPos =999, lMomInnerWallNeg = 999;
1406 Double_t ldEdxPos =0.0, ldEdxNeg=0.0;
1409 Float_t nSigmaPosPion = 0;
1410 Float_t nSigmaNegPion = 0;
1412 Float_t nSigmaPosProton = 0;
1413 Float_t nSigmaNegProton = 0;
1416 Int_t lCheckPIDK0sPosDaughter = 0, lCheckPIDK0sNegDaughter = 0;
1417 Int_t lCheckPIDLambdaPosDaughter = 0, lCheckPIDLambdaNegDaughter = 0;
1418 Int_t lCheckPIDAntiLambdaPosDaughter = 0, lCheckPIDAntiLambdaNegDaughter = 0;
1420 //---------------------------------------------------------------------------------------------
1421 TObjArray * selectedK0 = new TObjArray;
1422 selectedK0->SetOwner(kTRUE);
1424 TObjArray * selectedLambda = new TObjArray;
1425 selectedLambda->SetOwner(kTRUE);
1427 Int_t nV0s = fAODEvent->GetNumberOfV0s();
1429 for (Int_t i = 0; i < nV0s; i++)
1430 { // start of V0 slection loop
1431 AliAODv0* aodV0 = dynamic_cast<AliAODv0 *>(fAODEvent->GetV0(i));
1432 if (!aodV0) {AliError(Form("ERROR: Could not retrieve aodaodV0 %d", i));continue;}
1434 lIndexPosMother = 0; lIndexNegMother = 0; lIndexMotherOfMother = 0;
1435 lCheckPIdK0Short = 0; lCheckMcK0Short = 0; lCheckSecondaryK0s = 0;
1436 lCheckPIdLambda = 0; lCheckMcLambda = 0; lCheckSecondaryLambda = 0;
1437 lCheckPIdAntiLambda = 0; lCheckMcAntiLambda = 0; lCheckSecondaryAntiLambda = 0;
1438 lComeFromSigma = -1;lCheckGamma = 0;
1442 AliAODTrack *myTrackPos=(AliAODTrack *)(aodV0->GetDaughter(0));
1443 AliAODTrack *myTrackNeg=(AliAODTrack *)(aodV0->GetDaughter(1));
1445 if (!myTrackPos || !myTrackNeg) {Printf("ERROR: Could not retreive one of the daughter track");continue;}
1447 if (!IsAcseptedV0(fAODEvent,aodV0,myTrackPos,myTrackNeg)) continue;
1449 // VO's main characteristics to check the reconstruction cuts
1450 lOnFlyStatus = aodV0->GetOnFlyStatus();
1451 lChi2V0 = aodV0->Chi2V0();
1452 lDcaV0Daughters = aodV0->DcaV0Daughters();
1453 lDcaV0ToPrimVertex = aodV0->DcaV0ToPrimVertex();
1454 lV0cosPointAngle = aodV0->CosPointingAngle(lPrimaryVtxPosition);
1456 aodV0->GetXYZ(lV0Position);
1458 lV0Radius = TMath::Sqrt(lV0Position[0]*lV0Position[0]+lV0Position[1]*lV0Position[1]);
1459 lV0DecayLength = TMath::Sqrt(TMath::Power(lV0Position[0] - lPrimaryVtxPosition[0],2) +
1460 TMath::Power(lV0Position[1] - lPrimaryVtxPosition[1],2) +
1461 TMath::Power(lV0Position[2] - lPrimaryVtxPosition[2],2 ));
1463 lLabelTrackPos = (UInt_t)TMath::Abs(myTrackPos->GetLabel());
1464 lLabelTrackNeg = (UInt_t)TMath::Abs(myTrackNeg->GetLabel());
1466 // Daughters Pt and P:
1467 lPtPos = TMath::Sqrt(lMomPos[0]*lMomPos[0] + lMomPos[1]*lMomPos[1]);
1468 lPtNeg = TMath::Sqrt(lMomNeg[0]*lMomNeg[0] + lMomNeg[1]*lMomNeg[1]);
1470 lPPos = TMath::Sqrt(lMomPos[0]*lMomPos[0] + lMomPos[1]*lMomPos[1] + lMomPos[2]*lMomPos[2]);
1471 lPNeg = TMath::Sqrt(lMomNeg[0]*lMomNeg[0] + lMomNeg[1]*lMomNeg[1] + lMomNeg[2]*lMomNeg[2]);
1477 // Inner Wall parameter:
1478 const AliAODPid *pidPos=myTrackPos->GetDetPid();
1479 const AliAODPid *pidNeg=myTrackNeg->GetDetPid();
1481 // innerWall momentum
1482 lMomInnerWallPos = pidPos->GetTPCmomentum();
1483 lMomInnerWallNeg = pidNeg->GetTPCmomentum();
1485 ldEdxPos = pidPos->GetTPCsignal();
1486 ldEdxNeg = pidNeg->GetTPCsignal();
1488 // DCA between daughter and Primary Vertex:
1489 if (myTrackPos) lDcaPosToPrimVertex = aodV0->DcaPosToPrimVertex();
1490 if (myTrackNeg) lDcaNegToPrimVertex = aodV0->DcaNegToPrimVertex();
1492 // Quality tracks cuts:
1493 if ( !(IsAcseptedDaughterTrack(myTrackPos)) || !(IsAcseptedDaughterTrack(myTrackNeg)) ) { continue;}
1495 // Armenteros variables:
1496 lAlphaV0 = aodV0->AlphaV0();
1497 lPtArmV0 = aodV0->PtArmV0();
1500 lV0Eta = aodV0->PseudoRapV0();
1501 //////////////////////////////////////////////////////////////////////////
1503 lInvMassK0 = aodV0->MassK0Short();
1504 lPtK0s = aodV0->Pt();
1505 lPhiK0s= aodV0->Phi();
1506 lEtaK0s= aodV0->Eta();
1507 lPzK0s = aodV0->Pz();
1509 lInvMassLambda = aodV0->MassLambda();
1510 lPtLambda = aodV0->Pt();
1511 lPhiLambda= aodV0->Phi();
1512 lEtaLambda= aodV0->Eta();
1513 lPzLambda = aodV0->Pz();
1515 lInvMassAntiLambda = aodV0->MassAntiLambda();
1516 lPtAntiLambda = aodV0->Pt();
1517 lPhiAntiLambda= aodV0->Phi();
1518 lEtaAntiLambda= aodV0->Eta();
1519 lPzAntiLambda = aodV0->Pz();
1522 lRapK0s = aodV0->RapK0Short();
1523 lRapLambda = aodV0->RapLambda();
1524 lRapAntiLambda = aodV0->Y(-3122);
1526 if (lPtK0s==0) {continue;}
1527 if (lPtLambda==0) {continue;}
1528 if (lPtAntiLambda==0) {continue;}
1531 // PID new method July 2011
1532 if (fUsePID=="withPID") {
1533 nSigmaPosPion = TMath::Abs(IsAccepteddEdx(lPPos,ldEdxPos,AliPID::kPion));
1534 nSigmaNegPion = TMath::Abs(IsAccepteddEdx(lPNeg,ldEdxNeg,AliPID::kPion));
1535 nSigmaPosProton = TMath::Abs(IsAccepteddEdx(lPPos,ldEdxPos,AliPID::kProton));
1536 nSigmaNegProton = TMath::Abs(IsAccepteddEdx(lPNeg,ldEdxNeg,AliPID::kProton));
1538 else {nSigmaPosPion = 0; nSigmaNegPion =0; nSigmaPosProton = 0; nSigmaNegProton= 0;}
1540 // Monte-Carlo particle associated to reconstructed particles:
1543 AliAODMCParticle *pp=(AliAODMCParticle*)stack->UncheckedAt(lLabelTrackPos);
1544 if(!pp) { continue;}
1545 AliAODMCParticle *np=(AliAODMCParticle*)stack->UncheckedAt(lLabelTrackNeg);
1546 if (!np) { continue;}
1548 lPDGCodePosDaughter = pp->GetPdgCode();
1549 lPDGCodeNegDaughter = np->GetPdgCode();
1550 lIndexPosMother = pp->GetMother();
1551 lIndexNegMother = np->GetMother();
1553 if (lIndexPosMother == -1) {
1556 lIndexMotherOfMother = 0;
1569 AliAODMCParticle *lMCAODMother=(AliAODMCParticle*)stack->UncheckedAt(lIndexPosMother);
1570 if (!lMCAODMother) { continue;}
1571 lPdgcodeMother = lMCAODMother->GetPdgCode();
1572 lIndexMotherOfMother = lMCAODMother->GetMother();
1573 if (lIndexMotherOfMother ==-1) lPdgcodeMotherOfMother = 0;
1575 AliAODMCParticle *lMCAODMotherOfMother=(AliAODMCParticle*)stack->UncheckedAt(lIndexMotherOfMother);
1576 if (!lMCAODMotherOfMother) {continue;}
1577 lPdgcodeMotherOfMother = lMCAODMotherOfMother->GetPdgCode();
1583 mcPosR = TMath::Sqrt(mcPosX*mcPosX+mcPosY*mcPosY);
1584 mcPosMotherX = lMCAODMother->Xv();
1585 mcPosMotherY = lMCAODMother->Yv();
1586 mcPosMotherZ = lMCAODMother->Zv();
1587 mcPosMotherR = TMath::Sqrt(mcPosMotherX*mcPosMotherX+mcPosMotherY*mcPosMotherY);
1589 mcMotherPt = lMCAODMother->Pt();
1596 if( (lIndexPosMother==-1) || (lIndexNegMother==-1) ) {
1597 fHistMCDaughterTrack->Fill(1);
1600 else if( ( (lPDGCodePosDaughter==+211) && (lPDGCodeNegDaughter==-211) )
1602 lCheckPIdK0Short = 1;
1603 fHistMCDaughterTrack->Fill(3);
1604 if ( (lIndexPosMother==lIndexNegMother) &&
1605 (lPdgcodeMother==310) ) {
1606 if (((AliAODMCParticle*)stack->UncheckedAt(lIndexPosMother))->IsPrimary()) lCheckMcK0Short = 1;
1607 else lCheckSecondaryK0s = 1;
1610 else if( ( (lPDGCodePosDaughter==+2212) && (lPDGCodeNegDaughter==-211) )
1612 lCheckPIdLambda = 1;
1613 fHistMCDaughterTrack->Fill(5);
1614 if ( (lIndexPosMother==lIndexNegMother) &&
1615 (lPdgcodeMother==3122) ){
1616 if ( ( TMath::Abs(lPdgcodeMotherOfMother) == 3212) ||
1617 ( TMath::Abs(lPdgcodeMotherOfMother) == 3224) ||
1618 ( TMath::Abs(lPdgcodeMotherOfMother) == 3214) ||
1619 ( TMath::Abs(lPdgcodeMotherOfMother) == 3114)
1620 ) lComeFromSigma = 1;
1621 else lComeFromSigma = 0;
1622 if ( ((AliAODMCParticle*)stack->UncheckedAt(lIndexPosMother))->IsPrimary() ||
1623 (!(((AliAODMCParticle*)stack->UncheckedAt(lIndexPosMother))->IsPrimary() ) && (lComeFromSigma) )
1624 ) lCheckMcLambda = 1;
1625 else lCheckSecondaryLambda = 1;
1628 else if( ( (lPDGCodePosDaughter==211) && (lPDGCodeNegDaughter==-2212) )
1630 lCheckPIdAntiLambda = 1;
1631 fHistMCDaughterTrack->Fill(7);
1632 if ( (lIndexPosMother==lIndexNegMother) &&
1633 (lPdgcodeMother==-3122) ) {
1634 if ( ( TMath::Abs(lPdgcodeMotherOfMother) == 3212) ||
1635 ( TMath::Abs(lPdgcodeMotherOfMother) == 3224) ||
1636 ( TMath::Abs(lPdgcodeMotherOfMother) == 3214) ||
1637 ( TMath::Abs(lPdgcodeMotherOfMother) == 3114)
1638 ) lComeFromSigma = 1;
1639 else lComeFromSigma = 0;
1640 if ( ((AliAODMCParticle*)stack->UncheckedAt(lIndexPosMother))->IsPrimary() ||
1641 ( (!((AliAODMCParticle*)stack->UncheckedAt(lIndexPosMother))->IsPrimary()) && (lComeFromSigma) )
1642 ) lCheckMcAntiLambda = 1;
1643 else lCheckSecondaryAntiLambda = 1;
1648 else if ((lPDGCodePosDaughter==-11) &&
1649 (lPDGCodeNegDaughter==11) &&
1650 (lPdgcodeMother==22 ) )
1652 } // end "look for associated particles
1655 lCheckPIDK0sPosDaughter = 0, lCheckPIDK0sNegDaughter = 0;
1656 lCheckPIDLambdaPosDaughter = 0, lCheckPIDLambdaNegDaughter = 0;
1657 lCheckPIDAntiLambdaPosDaughter = 0, lCheckPIDAntiLambdaNegDaughter = 0;
1659 if (lMomInnerWallPos < lLimitPPID) {
1660 if (nSigmaPosPion < cutNSigmaLowP) {
1661 lCheckPIDK0sPosDaughter = 1;
1662 lCheckPIDAntiLambdaPosDaughter = 1;
1664 if (nSigmaPosProton < cutNSigmaLowP) lCheckPIDLambdaPosDaughter = 1;
1667 else if (lMomInnerWallPos > lLimitPPID) {
1668 if (nSigmaPosPion < cutNSigmaHighP) {
1669 lCheckPIDK0sPosDaughter = 1;
1670 lCheckPIDAntiLambdaPosDaughter = 1;
1672 if (nSigmaPosProton < cutNSigmaHighP) lCheckPIDLambdaPosDaughter = 1;
1675 if (lMomInnerWallNeg < lLimitPPID) {
1676 if (nSigmaNegPion < cutNSigmaLowP) {
1677 lCheckPIDK0sNegDaughter = 1;
1678 lCheckPIDLambdaNegDaughter = 1;
1680 if (nSigmaNegProton < cutNSigmaLowP) lCheckPIDAntiLambdaNegDaughter = 1;
1683 else if (lMomInnerWallNeg > lLimitPPID) {
1684 if (nSigmaNegPion < cutNSigmaHighP) {
1685 lCheckPIDK0sNegDaughter = 1;
1686 lCheckPIDLambdaNegDaughter = 1;
1688 if (nSigmaNegProton < cutNSigmaHighP) lCheckPIDAntiLambdaNegDaughter = 1;
1691 //************************************filling histograms********************************//
1693 if((fUsePID=="withPID") && (lCheckPIDAntiLambdaNegDaughter==0) && lCheckPIDLambdaPosDaughter==1) LambdaPID = 1;
1695 if((fUsePID=="withPID") && (lCheckPIDLambdaPosDaughter==0) && lCheckPIDAntiLambdaNegDaughter==1) AntiLambdaPID = 1;
1696 else AntiLambdaPID =0;
1698 lPLambda = TMath::Sqrt(lPzLambda*lPzLambda + lPtLambda*lPtLambda);
1699 lPAntiLambda = TMath::Sqrt(lPzAntiLambda*lPzAntiLambda + lPtAntiLambda*lPtAntiLambda);
1700 lPK0s = TMath::Sqrt(lPzK0s*lPzK0s + lPtK0s*lPtK0s);
1703 lcTauLambda = (lV0DecayLength*lInvMassLambda)/lPLambda;
1704 lcTauAntiLambda = (lV0DecayLength*lInvMassAntiLambda)/lPAntiLambda;
1705 lcTauK0s = (lV0DecayLength*lInvMassK0)/lPK0s;
1707 if (lPLambda <1 && lOnFlyStatus==0 ){
1708 fHistcTauL->Fill(lcTauLambda);
1711 //--------------------------------------------K0s---------------------------------//
1713 if (lcTauK0s< cutcTauK0){
1714 if (TMath::Abs(lRapK0s) < fRapidityCut ){
1715 if(lPtArmV0*fSpecialArmenterosCutK0s>(TMath::Abs(lAlphaV0))){
1717 //////2D histos: cut vs on fly status/////////////////////
1719 fHistDcaPosToPrimVertexK0->Fill(lDcaPosToPrimVertex,lOnFlyStatus);
1720 fHistDcaNegToPrimVertexK0->Fill(lDcaNegToPrimVertex,lOnFlyStatus);
1721 fHistRadiusV0K0->Fill(lV0Radius,lOnFlyStatus);
1722 fHistDecayLengthV0K0->Fill(lV0DecayLength,lOnFlyStatus);
1723 fHistDcaV0DaughtersK0->Fill(lDcaV0Daughters,lOnFlyStatus);
1724 fHistChi2K0->Fill(lChi2V0,lOnFlyStatus);
1725 fHistCosPointAngleK0->Fill(lV0cosPointAngle,lOnFlyStatus);
1727 //////2D histos: cut vs mass/////////////////////
1729 if (lOnFlyStatus==0){
1730 fHistMassK0->Fill(lInvMassK0);
1731 fHistMassVsRadiusK0->Fill(rcPosRK0s,lInvMassK0);
1732 fHistPtVsMassK0->Fill(lInvMassK0,lPtK0s);
1733 fHistDcaPosToPrimVertexK0vsMassK0->Fill(lDcaPosToPrimVertex,lInvMassK0);
1734 fHistDcaNegToPrimVertexK0vsMassK0->Fill(lDcaNegToPrimVertex,lInvMassK0);
1735 fHistRadiusV0K0vsMassK0->Fill(lV0Radius,lInvMassK0);
1736 fHistDecayLengthV0K0vsMassK0->Fill(lV0DecayLength,lInvMassK0);
1737 fHistDcaV0DaughtersK0vsMassK0->Fill(lDcaV0Daughters,lInvMassK0);
1738 fHistCosPointAngleK0vsMassK0->Fill(lV0cosPointAngle,lInvMassK0);
1739 fHistArmenterosPodolanski->Fill(lAlphaV0,lPtArmV0);
1740 if(IsK0InvMass(lInvMassK0)){selectedK0->Add(new AliLeadingBasicParticle(lEtaK0s,lPhiK0s,lPtK0s));}
1742 }//Special Armesto Cut for K0
1743 } // if rap. condition
1744 } // end cTau condition
1746 //-----------------------------------------Lambda---------------------------------//
1747 if (lcTauLambda < cutcTauL){
1748 if ((LambdaPID==1 && lMomInnerWallPos <=1 ) || (lMomInnerWallPos >1 ) || !(fUsePID=="withPID")){
1749 if (TMath::Abs(lRapLambda) <fRapidityCut) {
1751 //////2D histos: cut vs on fly status/////////////////////
1753 fHistDcaPosToPrimVertexL->Fill(lDcaPosToPrimVertex,lOnFlyStatus);
1754 fHistDcaNegToPrimVertexL->Fill(lDcaNegToPrimVertex,lOnFlyStatus);
1755 fHistRadiusV0L->Fill(lV0Radius,lOnFlyStatus);
1756 fHistDecayLengthV0L->Fill(lV0DecayLength,lOnFlyStatus);
1757 fHistDcaV0DaughtersL->Fill(lDcaV0Daughters,lOnFlyStatus);
1758 fHistChi2L->Fill(lChi2V0,lOnFlyStatus);
1759 fHistCosPointAngleL->Fill(lV0cosPointAngle,lOnFlyStatus);
1761 //////2D histos: cut vs mass/////////////////////
1763 if (lOnFlyStatus==0){
1764 fHistMassLambda->Fill(lInvMassLambda);
1765 fHistMassVsRadiusLambda->Fill(rcPosRLambda,lInvMassLambda);
1766 fHistPtVsMassLambda->Fill(lInvMassLambda,lPtLambda);
1768 fHistDcaPosToPrimVertexLvsMassL->Fill(lDcaPosToPrimVertex,lInvMassLambda);
1769 fHistDcaNegToPrimVertexLvsMassL->Fill(lDcaNegToPrimVertex,lInvMassLambda);
1770 fHistRadiusV0LvsMassL->Fill(lV0Radius,lInvMassLambda);
1771 fHistDecayLengthV0LvsMassL->Fill(lV0DecayLength,lInvMassLambda);
1772 fHistDcaV0DaughtersLvsMassL->Fill(lDcaV0Daughters,lInvMassLambda);
1773 fHistCosPointAngleLvsMassL->Fill(lV0cosPointAngle,lInvMassLambda);
1774 if(IsLambdaInvMass(lInvMassLambda)){selectedLambda->Add(new AliLeadingBasicParticle(lEtaLambda,lPhiLambda,lPtLambda));}
1776 } //end of Rap condition
1778 } //end cTau condition
1780 //--------------------------------------AntiLambda---------------------------------//
1782 if (lcTauAntiLambda < cutcTauL){
1784 if ((AntiLambdaPID==1 && lMomInnerWallNeg <=1) || (lMomInnerWallNeg >1) || !(fUsePID=="withPID")){
1785 if (TMath::Abs(lRapAntiLambda) < fRapidityCut) {
1787 //////2D histos: cut vs on fly status/////////////////////
1789 fHistDcaPosToPrimVertexAntiL->Fill(lDcaPosToPrimVertex,lOnFlyStatus);
1790 fHistDcaNegToPrimVertexAntiL->Fill(lDcaNegToPrimVertex,lOnFlyStatus);
1791 fHistRadiusV0AntiL->Fill(lV0Radius,lOnFlyStatus);
1792 fHistDecayLengthV0AntiL->Fill(lV0DecayLength,lOnFlyStatus);
1793 fHistDcaV0DaughtersAntiL->Fill(lDcaV0Daughters,lOnFlyStatus);
1794 fHistChi2AntiL->Fill(lChi2V0,lOnFlyStatus);
1795 fHistCosPointAngleAntiL->Fill(lV0cosPointAngle,lOnFlyStatus);
1797 //////2D histos: cut vs mass/////////////////////
1799 if (lOnFlyStatus==0){
1801 fHistMassAntiLambda->Fill(lInvMassAntiLambda);
1802 fHistMassVsRadiusAntiLambda->Fill(rcPosRAntiLambda,lInvMassAntiLambda);
1803 fHistPtVsMassAntiLambda->Fill(lInvMassAntiLambda,lPtAntiLambda);
1804 fHistDcaPosToPrimVertexAntiLvsMass->Fill(lDcaPosToPrimVertex,lInvMassAntiLambda);
1805 fHistDcaNegToPrimVertexAntiLvsMass->Fill(lDcaNegToPrimVertex,lInvMassAntiLambda);
1806 fHistRadiusV0AntiLvsMass->Fill(lV0Radius,lInvMassAntiLambda);
1807 fHistDecayLengthV0AntiLvsMass->Fill(lV0DecayLength,lInvMassAntiLambda);
1808 fHistDcaV0DaughtersAntiLvsMass->Fill(lDcaV0Daughters,lInvMassAntiLambda);
1809 fHistCosPointAngleAntiLvsMass->Fill(lV0cosPointAngle,lInvMassAntiLambda);
1811 } //end of Rap condition
1812 } // end of PID condition
1813 } //end cTau condition
1815 //--------------------------------------K0s Associated---------------------------------//
1817 if (lcTauK0s< cutcTauK0) {
1818 if (TMath::Abs(lRapK0s) < fRapidityCut) {
1819 fHistNsigmaPosPionK0->Fill(nSigmaPosPion);
1820 fHistNsigmaNegPionK0->Fill(nSigmaNegPion);
1821 if(lOnFlyStatus==0){
1822 if(lCheckPIdK0Short) fHistPidMcMassK0->Fill(lInvMassK0);
1823 if(lCheckMcK0Short) {
1824 fHistAsMcMassK0->Fill(lInvMassK0);
1825 fHistAsMcPtK0->Fill(lPtK0s);
1826 fHistAsMcPtVsMassK0->Fill(lInvMassK0,lPtK0s);
1827 fHistAsMcMassVsRadiusK0->Fill(rcPosRK0s,lInvMassK0);
1828 fHistAsMcResxK0->Fill(rcPosXK0s-mcPosX);
1829 fHistAsMcResyK0->Fill(rcPosYK0s-mcPosY);
1830 fHistAsMcReszK0->Fill(rcPosZK0s-mcPosZ);
1831 fHistAsMcResrVsRadiusK0->Fill(rcPosRK0s,rcPosRK0s-mcPosR);
1832 fHistAsMcReszVsRadiusK0->Fill(rcPosZK0s,rcPosZK0s-mcPosZ);
1833 fHistAsMcProdRadiusK0->Fill(mcPosMotherR);
1834 fHistAsMcProdRadiusXvsYK0s->Fill(mcPosMotherX,mcPosMotherY);
1835 fHistAsMcResPtK0->Fill(deltaPtK0s);
1836 fHistAsMcResPtVsRapK0->Fill(deltaPtK0s,lRapK0s);
1837 fHistAsMcResPtVsPtK0->Fill(deltaPtK0s,lPtK0s);
1839 if (lCheckSecondaryK0s) {
1840 fHistAsMcSecondaryPtVsRapK0s->Fill(lPtK0s,lRapK0s);
1841 fHistAsMcSecondaryProdRadiusK0s->Fill(mcPosMotherR);
1842 fHistAsMcSecondaryProdRadiusXvsYK0s->Fill(mcPosMotherX,mcPosMotherY);
1845 } // end rapidity condition
1846 } //end cTau condition
1849 //-----------------------------------Lambda Associated---------------------------------//
1850 if (lcTauLambda < cutcTauL){
1851 if (TMath::Abs(lRapLambda) < fRapidityCut) {
1852 fHistNsigmaPosProtonLambda->Fill(nSigmaPosProton);
1853 fHistNsigmaNegPionLambda->Fill(nSigmaNegPion);
1854 if(lOnFlyStatus==0){
1855 if(lCheckPIdLambda) fHistPidMcMassLambda->Fill(lInvMassLambda);
1856 if(lCheckMcLambda) {
1857 fHistAsMcMassLambda->Fill(lInvMassLambda);
1858 fHistAsMcPtLambda->Fill(lPtLambda);
1859 fHistCosPointAngleLVsMassVsPtsigL->Fill(lPtLambda,lV0cosPointAngle,lInvMassLambda);
1860 fHistAsMcPtVsMassLambda->Fill(lInvMassLambda,lPtLambda);
1861 fHistAsMcMassVsRadiusLambda->Fill(rcPosRLambda,lInvMassLambda);
1862 fHistAsMcResxLambda->Fill(rcPosXLambda-mcPosX);
1863 fHistAsMcResyLambda->Fill(rcPosYLambda-mcPosY);
1864 fHistAsMcReszLambda->Fill(rcPosZLambda-mcPosZ);
1865 fHistAsMcResrVsRadiusLambda->Fill(rcPosRLambda,rcPosRLambda-mcPosR);
1866 fHistAsMcReszVsRadiusLambda->Fill(rcPosZLambda,rcPosZLambda-mcPosZ);
1867 fHistAsMcProdRadiusLambda->Fill(mcPosMotherR);
1868 fHistAsMcProdRadiusXvsYLambda->Fill(mcPosMotherX,mcPosMotherY);
1869 fHistAsMcResPtLambda->Fill(deltaPtLambda);
1870 fHistAsMcResPtVsRapLambda->Fill(deltaPtLambda,lRapLambda);
1871 fHistAsMcResPtVsPtLambda->Fill(deltaPtLambda,lPtLambda);
1872 if (lComeFromSigma) fHistAsMcPtLambdaFromSigma->Fill(lPtLambda);
1875 if (lCheckSecondaryLambda) {
1876 fHistAsMcSecondaryPtVsRapLambda->Fill(lPtLambda,lRapLambda);
1877 fHistAsMcSecondaryProdRadiusLambda->Fill(mcPosMotherR);
1878 fHistAsMcSecondaryProdRadiusXvsYLambda->Fill(mcPosMotherX,mcPosMotherY);
1879 if (lComeFromSigma) fHistAsMcSecondaryPtLambdaFromSigma->Fill(lPtLambda);
1881 if(!lCheckMcLambda)fHistCosPointAngleLVsMassVsPtbackL->Fill(lPtLambda,lV0cosPointAngle,lInvMassLambda);
1883 } // end rapidity condition
1884 }//end cTau condition
1886 //------------------------------AntiLambda Associated---------------------------------//
1887 if (lcTauAntiLambda < cutcTauL){
1888 if (TMath::Abs(lRapAntiLambda) < fRapidityCut) {
1889 fHistNsigmaPosProtonAntiLambda->Fill(nSigmaPosProton);
1890 fHistNsigmaNegPionAntiLambda->Fill(nSigmaNegPion);
1891 if(lOnFlyStatus==0){
1892 if(lCheckPIdAntiLambda) fHistPidMcMassAntiLambda->Fill(lInvMassAntiLambda);
1893 if(lCheckMcAntiLambda) {
1894 fHistAsMcMassAntiLambda->Fill(lInvMassAntiLambda);
1895 fHistAsMcPtAntiLambda->Fill(lPtAntiLambda);
1896 fHistAsMcPtVsMassAntiLambda->Fill(lInvMassAntiLambda,lPtAntiLambda);
1897 fHistAsMcMassVsRadiusAntiLambda->Fill(rcPosRAntiLambda,lInvMassAntiLambda);
1898 fHistAsMcResxAntiLambda->Fill(rcPosXAntiLambda-mcPosX);
1899 fHistAsMcResyAntiLambda->Fill(rcPosYAntiLambda-mcPosY);
1900 fHistAsMcReszAntiLambda->Fill(rcPosZAntiLambda-mcPosZ);
1901 fHistAsMcResrVsRadiusAntiLambda->Fill(rcPosRAntiLambda,rcPosRAntiLambda-mcPosR);
1902 fHistAsMcReszVsRadiusAntiLambda->Fill(rcPosZAntiLambda,rcPosZAntiLambda-mcPosZ);
1903 fHistAsMcProdRadiusAntiLambda->Fill(mcPosMotherR);
1904 fHistAsMcProdRadiusXvsYAntiLambda->Fill(mcPosMotherX,mcPosMotherY);
1905 fHistAsMcResPtAntiLambda->Fill(deltaPtAntiLambda);
1906 fHistAsMcResPtVsRapAntiLambda->Fill(deltaPtAntiLambda,lRapAntiLambda);
1907 fHistAsMcResPtVsPtAntiLambda->Fill(deltaPtAntiLambda,lPtAntiLambda);
1908 if (lComeFromSigma) fHistAsMcPtAntiLambdaFromSigma->Fill(lPtAntiLambda);
1912 if (lCheckSecondaryAntiLambda) {
1913 fHistAsMcSecondaryPtVsRapAntiLambda->Fill(lPtAntiLambda,lRapAntiLambda);
1914 fHistAsMcSecondaryProdRadiusAntiLambda->Fill(mcPosMotherR);
1915 fHistAsMcSecondaryProdRadiusXvsYAntiLambda->Fill(mcPosMotherX,mcPosMotherY);
1916 if (lComeFromSigma) fHistAsMcSecondaryPtAntiLambdaFromSigma->Fill(lPtAntiLambda);
1919 } // end rapidity condition
1920 }//end cTau condition
1924 FillCorrelations(selectedTracksLeadingK0MC,selectedK0MC,fHistSibK0MC);
1925 FillCorrelations(selectedTracksLeadingLambdaMC,selectedLambdaMC,fHistSibLambdaMC);
1928 FillCorrelations(selectedTracksLeadingK0,selectedK0,fHistSibK0);
1929 FillCorrelations(selectedTracksLeadingLambda,selectedLambda,fHistSibLambda);
1932 if(TMath::Abs(lPVz)>=10 || MultipOrCent>poolmax || MultipOrCent < poolmin) {
1933 if(fcollidingSys=="PP")AliInfo(Form("pp Event with Zvertex = %.2f cm and multiplicity = %.0f out of pool bounds, SKIPPING",lPVz,MultipOrCent));
1934 if(fcollidingSys=="PbPb") AliInfo(Form("PbPb Event with Zvertex = %.2f cm and centrality = %.1f out of pool bounds, SKIPPING",lPVz,MultipOrCent));
1938 fPoolK0 = fPoolMgr->GetEventPool(MultipOrCent, lPVz);
1939 if (!fPoolK0){AliInfo(Form("No pool found for multiplicity = %f, zVtx = %f cm", MultipOrCent, lPVz));return;}
1941 if (fPoolK0->IsReady() || fPoolK0->NTracksInPool() > fPoolMinNTracks || fPoolK0->GetCurrentNEvents() >= fMinEventsToMix)
1943 for (Int_t jMix=0; jMix<fPoolK0->GetCurrentNEvents(); jMix++)
1944 FillCorrelations(selectedTracksLeadingK0, fPoolK0->GetEvent(jMix),fHistMixK0);
1945 fPoolK0->UpdatePool(CloneAndReduceTrackList(selectedK0));
1948 fPoolLambda = fPoolMgr->GetEventPool(MultipOrCent, lPVz);
1949 if (!fPoolLambda){AliInfo(Form("No pool found for multiplicity = %f, zVtx = %f cm", MultipOrCent, lPVz));return;}
1951 if (fPoolLambda->IsReady() || fPoolLambda->NTracksInPool() > fPoolMinNTracks || fPoolLambda->GetCurrentNEvents() >= fMinEventsToMix)
1953 for (Int_t jMix=0; jMix<fPoolLambda->GetCurrentNEvents(); jMix++)
1954 FillCorrelations(selectedTracksLeadingLambda, fPoolLambda->GetEvent(jMix),fHistMixLambda);
1955 fPoolLambda->UpdatePool(CloneAndReduceTrackList(selectedLambda));
1958 PostData(1, fOutputList);
1961 //---------------------------------------------------------------------------------------
1962 TObjArray* AliLeadingV0Correlation::CloneAndReduceTrackList(TObjArray* tracks)
1964 // clones a track list for mixing
1965 TObjArray* tracksClone = new TObjArray;
1966 tracksClone->SetOwner(kTRUE);
1968 for (Int_t i=0; i<tracks->GetEntriesFast(); i++)
1970 AliVParticle* particle = (AliVParticle*) tracks->At(i);
1971 tracksClone->Add(new AliLeadingBasicParticle(particle->Eta(), particle->Phi(), particle->Pt()));
1976 //---------------------------------------------------------------------------------------
1977 Int_t AliLeadingV0Correlation::NParticles(TObject* obj)
1981 if (obj->InheritsFrom("TClonesArray")){ // MC particles
1982 TClonesArray *arrayMC = static_cast<TClonesArray*>(obj);
1983 nTracks = arrayMC->GetEntriesFast();
1984 }else if (obj->InheritsFrom("TObjArray")){ // list of AliVParticle
1985 TObjArray *array = static_cast<TObjArray*>(obj);
1986 nTracks = array->GetEntriesFast();
1987 }else if (obj->InheritsFrom("AliAODEvent")){ // RECO AOD tracks
1988 AliAODEvent *aodEvent = static_cast<AliAODEvent*>(obj);
1989 nTracks = aodEvent->GetNTracks();
1990 }else if (obj->InheritsFrom("AliMCEvent")){ // RECO ESD tracks
1991 AliMCEvent *mcEvent = static_cast<AliMCEvent*>(obj);
1992 nTracks = mcEvent->GetNumberOfTracks();
1994 if (fDebug > 1) AliFatal(" Analysis type not defined !!! ");
2000 //---------------------------------------------------------------------------------------
2001 Bool_t AliLeadingV0Correlation::IsAcseptedPrimaryTrack(const AliAODTrack *itrack)
2003 if (TMath::Abs(itrack->Eta())>fTrackEtaCut) return kFALSE;
2004 if (!itrack->TestFilterBit(fFilterBit)) return kFALSE;
2007 //---------------------------------------------------------------------------------------
2008 Bool_t AliLeadingV0Correlation::IsAcseptedDaughterTrack(const AliAODTrack *itrack)
2010 if(TMath::Abs(itrack->Eta())>fTrackEtaCut)return kFALSE;
2012 if (!itrack->IsOn(AliAODTrack::kTPCrefit)) return kFALSE;
2014 Float_t nCrossedRowsTPC = itrack->GetTPCClusterInfo(2,1);
2015 if (nCrossedRowsTPC < 70) return kFALSE;
2017 Int_t findable=itrack->GetTPCNclsF();
2018 if (findable <= 0) return kFALSE;
2020 if (nCrossedRowsTPC/findable < 0.8) return kFALSE;
2024 //---------------------------------------------------------------------------------------
2025 Double_t AliLeadingV0Correlation::RangePhi(Double_t DPhi)
2027 if (DPhi < -TMath::Pi()/2) DPhi += 2*TMath::Pi();
2028 if (DPhi > 3*TMath::Pi()/2) DPhi -= 2*TMath::Pi();
2031 //---------------------------------------------------------------------------------------
2032 void AliLeadingV0Correlation::FillCorrelations(TObjArray* particles, TObjArray* mixed,TH2F*histo)
2034 TObjArray* input = (mixed) ? mixed : particles;
2035 TArrayF eta(input->GetEntriesFast());
2036 for (Int_t i=0; i<input->GetEntriesFast(); i++) eta[i] = ((AliVParticle*) input->At(i))->Eta();
2039 Int_t jMax = particles->GetEntriesFast();
2040 if (mixed) jMax = mixed->GetEntriesFast();
2041 for (Int_t i=0; i<particles->GetEntriesFast(); i++)
2043 AliVParticle* triggerParticle = (AliVParticle*) particles->At(0); //For leading Track
2044 // some optimization
2045 Float_t triggerEta = triggerParticle->Eta();
2047 for (Int_t j=0; j<jMax; j++)
2049 if (!mixed && i == j)continue;
2050 AliVParticle* particle = 0;
2051 if (!mixed)particle = (AliVParticle*) particles->At(0); //For leading Track
2052 else particle = (AliVParticle*) mixed->At(j);
2054 // check if both particles point to the same element (does not occur for mixed events, but if subsets are mixed within the same event for cross-checks)
2055 if (mixed && triggerParticle == particle)continue;
2057 if (particle->Pt() > triggerParticle->Pt())continue;
2059 if (((particle->Pt())<fassocPtLow)||((particle->Pt())>fassocPtHigh)) continue;
2060 if (((triggerParticle->Pt())<ftrigPtLow)||((triggerParticle->Pt())>ftrigPtHigh)) continue;
2063 vars[0] = triggerEta - eta[j];
2064 vars[1] = particle->Pt(); //Associated Pt
2065 vars[2] = triggerParticle->Pt(); //Triger Pt
2066 vars[3] = RangePhi(triggerParticle->Phi() - particle->Phi());
2068 histo->Fill(vars[0],vars[3]);
2074 //---------------------------------------------------------------------------------------
2075 TObjArray* AliLeadingV0Correlation::FindLeadingObjectsK0(TObject *obj)
2078 Int_t nTracks = NParticles(obj);
2079 if( !nTracks ) return 0;
2081 // Define array of AliVParticle objects
2082 TObjArray* tracks = new TObjArray(nTracks);
2084 // Loop over tracks or jets
2085 for (Int_t ipart=0; ipart<nTracks; ++ipart) {
2086 AliVParticle* part = ParticleWithCuts( obj,ipart);
2087 if (!part) continue;
2089 if(!IsAcseptedPrimaryTrack(((AliAODTrack*)part)))continue;
2090 if(!IsTrackNotFromK0(ipart))continue;
2092 tracks->AddLast( part );
2094 // Order tracks by pT
2095 QSortTracks( *tracks, 0, tracks->GetEntriesFast() );
2097 nTracks = tracks->GetEntriesFast();
2098 if( !nTracks ) return 0;
2102 //---------------------------------------------------------------------------------------
2103 TObjArray* AliLeadingV0Correlation::FindLeadingObjectsLambda(TObject *obj)
2106 Int_t nTracks = NParticles(obj);
2107 if( !nTracks ) return 0;
2109 // Define array of AliVParticle objects
2110 TObjArray* tracks = new TObjArray(nTracks);
2112 // Loop over tracks or jets
2113 for (Int_t ipart=0; ipart<nTracks; ++ipart) {
2114 AliVParticle* part = ParticleWithCuts( obj,ipart);
2115 if (!part) continue;
2117 if(!IsAcseptedPrimaryTrack(((AliAODTrack*)part)))continue;
2118 if(!IsTrackNotFromLambda(ipart))continue;
2120 tracks->AddLast( part );
2122 // Order tracks by pT
2123 QSortTracks( *tracks, 0, tracks->GetEntriesFast() );
2125 nTracks = tracks->GetEntriesFast();
2126 if( !nTracks ) return 0;
2130 //---------------------------------------------------------------------------------------
2131 TObjArray* AliLeadingV0Correlation::FindLeadingObjectsK0MC(TObject *obj)
2134 Int_t nTracks = NParticles(obj);
2135 if( !nTracks ) return 0;
2137 // Define array of AliVParticle objects
2138 TObjArray* tracks = new TObjArray(nTracks);
2140 // Loop over tracks or jets
2141 for (Int_t ipart=0; ipart<nTracks; ++ipart) {
2142 AliVParticle* part = ParticleWithCuts( obj,ipart);
2143 if (!part) continue;
2144 Int_t pdgCodeCurrent = ((AliAODMCParticle*)part)->GetPdgCode();
2145 if(pdgCodeCurrent==310)continue;
2146 tracks->AddLast( part );
2148 // Order tracks by pT
2149 QSortTracks( *tracks, 0, tracks->GetEntriesFast() );
2151 nTracks = tracks->GetEntriesFast();
2152 if( !nTracks ) return 0;
2156 //---------------------------------------------------------------------------------------
2157 TObjArray* AliLeadingV0Correlation::FindLeadingObjectsLambdaMC(TObject *obj)
2160 Int_t nTracks = NParticles(obj);
2161 if( !nTracks ) return 0;
2163 // Define array of AliVParticle objects
2164 TObjArray* tracks = new TObjArray(nTracks);
2166 // Loop over tracks or jets
2167 for (Int_t ipart=0; ipart<nTracks; ++ipart) {
2168 AliVParticle* part = ParticleWithCuts( obj,ipart);
2169 if (!part) continue;
2170 Int_t pdgCodeCurrent = ((AliAODMCParticle*)part)->GetPdgCode();
2171 if(pdgCodeCurrent==3122)continue;
2172 tracks->AddLast( part );
2174 // Order tracks by pT
2175 QSortTracks( *tracks, 0, tracks->GetEntriesFast() );
2177 nTracks = tracks->GetEntriesFast();
2178 if( !nTracks ) return 0;
2182 //---------------------------------------------------------------------------------------
2183 void AliLeadingV0Correlation::QSortTracks(TObjArray &a, Int_t first, Int_t last)
2185 // Sort array of TObjArray of tracks by Pt using a quicksort algorithm.
2187 static TObject *tmp;
2188 static int i; // "static" to save stack space
2191 while (last - first > 1) {
2195 while (++i < last && ((AliVParticle*)a[i])->Pt() > ((AliVParticle*)a[first])->Pt() )
2197 while (--j > first && ((AliVParticle*)a[j])->Pt() < ((AliVParticle*)a[first])->Pt() )
2213 if (j - first < last - (j + 1)) {
2214 QSortTracks(a, first, j);
2215 first = j + 1; // QSortTracks(j + 1, last);
2217 QSortTracks(a, j + 1, last);
2218 last = j; // QSortTracks(first, j);
2222 //---------------------------------------------------------------------------------------
2223 AliVParticle* AliLeadingV0Correlation::ParticleWithCuts(TObject* obj, Int_t ipart)
2225 AliVParticle *part=0;
2226 if (obj->InheritsFrom("AliAODEvent")){ // RECO AOD TRACKS
2227 AliAODEvent *aodEvent = static_cast<AliAODEvent*>(obj);
2228 part = aodEvent->GetTrack(ipart);
2229 // track selection cuts
2230 if ( !(((AliAODTrack*)part)->TestFilterBit(fFilterBit))) return 0;
2232 else if(obj->InheritsFrom("TClonesArray")){ // AOD-MC PARTICLE
2233 TClonesArray *arrayMC = static_cast<TClonesArray*>(obj);
2234 part = (AliVParticle*)arrayMC->At( ipart );
2236 // eventually only primaries
2237 if (!( ((AliAODMCParticle*)part)->IsPhysicalPrimary()) )return 0;
2238 // eventually only hadrons
2239 Int_t pdgCode = ((AliAODMCParticle*)part)->GetPdgCode();
2240 Bool_t isHadron = TMath::Abs(pdgCode)==211 || // Pion
2241 TMath::Abs(pdgCode)==2212 || // Proton
2242 TMath::Abs(pdgCode)==321; // Kaon
2243 if (!isHadron) return 0;
2247 if (!part->Charge())return 0;
2250 //---------------------------------------------------------------------------------------
2251 Bool_t AliLeadingV0Correlation::IsK0InvMass(const Double_t mass) const {
2253 const Float_t massK0 = 0.497;
2254 const Float_t sigmaK0 = 0.003;
2255 const Float_t nSigmaSignal = 3.5;
2257 return ((massK0-nSigmaSignal*sigmaK0)<=mass && mass<=(massK0 + nSigmaSignal*sigmaK0))?1:0;
2259 //---------------------------------------------------------------------------------------
2260 Bool_t AliLeadingV0Correlation::IsLambdaInvMass(const Double_t mass) const {
2262 const Float_t massLambda = 1.116;
2263 const Float_t sigmaLambda = 0.003;
2264 const Float_t nSigmaSignal = 3.5;
2266 return ((massLambda-nSigmaSignal*sigmaLambda)<=mass && mass<=(massLambda + nSigmaSignal*sigmaLambda))?1:0;
2268 //---------------------------------------------------------------------------------------
2269 Bool_t AliLeadingV0Correlation::IsTrackNotFromLambda(const Int_t indexTrack){
2270 // check wether track with index is from Lambda (= V0 with proper inv mass)
2271 TClonesArray* tracks = fAODEvent->GetTracks();
2272 for(int i=0; i<fAODEvent->GetNumberOfV0s(); i++){ // loop over V0s
2273 AliAODv0* aodV0 = fAODEvent->GetV0(i);
2274 Float_t massLambda = aodV0->MassLambda();
2275 if(IsLambdaInvMass(massLambda)){
2276 AliAODTrack *trackPos = (AliAODTrack *) (aodV0->GetSecondaryVtx()->GetDaughter(0));
2277 AliAODTrack *trackNeg = (AliAODTrack *) (aodV0->GetSecondaryVtx()->GetDaughter(1));
2279 if ( !(IsAcseptedDaughterTrack(trackPos)) || !(IsAcseptedDaughterTrack(trackNeg)) ) continue;
2281 Int_t indexPos = tracks->IndexOf(trackPos);
2282 Int_t indexNeg = tracks->IndexOf(trackNeg);
2283 if(indexPos == indexTrack){ return kFALSE;}
2284 if(indexNeg == indexTrack){ return kFALSE;}
2289 //---------------------------------------------------------------------------------------
2290 Bool_t AliLeadingV0Correlation::IsTrackNotFromK0(const Int_t indexTrack){
2291 // check wether track with index is from K0 (= V0 with proper inv mass)
2292 TClonesArray* tracks = fAODEvent->GetTracks();
2293 for(int i=0; i<fAODEvent->GetNumberOfV0s(); i++){ // loop over V0s
2294 AliAODv0* aodV0 = fAODEvent->GetV0(i);
2295 Float_t massK0 = aodV0->MassK0Short();
2296 if(IsK0InvMass(massK0)){
2297 AliAODTrack *trackPos = (AliAODTrack *) (aodV0->GetSecondaryVtx()->GetDaughter(0));
2298 AliAODTrack *trackNeg = (AliAODTrack *) (aodV0->GetSecondaryVtx()->GetDaughter(1));
2300 if ( !(IsAcseptedDaughterTrack(trackPos)) || !(IsAcseptedDaughterTrack(trackNeg)) ) continue;
2302 Int_t indexPos = tracks->IndexOf(trackPos);
2303 Int_t indexNeg = tracks->IndexOf(trackNeg);
2304 if(indexPos == indexTrack){ return kFALSE;}
2305 if(indexNeg == indexTrack){ return kFALSE;}
2310 //---------------------------------------------------------------------------------------
2311 Bool_t AliLeadingV0Correlation::IsAcseptedV0(const AliAODEvent*aod, const AliAODv0* aodV0, const AliAODTrack* myTrackPos, const AliAODTrack* myTrackNeg)
2313 if (!aodV0) return kFALSE;
2315 Double_t lRapK0s = aodV0->Y(310);
2316 Double_t lRapLambda = aodV0->Y(3122);
2317 Double_t lRapAntiLambda = aodV0->Y(-3122);
2319 if (TMath::Abs(lRapK0s)>=fRapidityCut) return kFALSE;
2320 if (TMath::Abs(lRapLambda)>=fRapidityCut) return kFALSE;
2321 if (TMath::Abs(lRapAntiLambda)>=fRapidityCut) return kFALSE;
2323 // Offline reconstructed V0 only
2324 if (aodV0->GetOnFlyStatus()) return kFALSE;
2326 // DCA of daughter track to Primary Vertex
2327 Float_t dcaNP=aodV0->DcaNegToPrimVertex();
2328 if (TMath::Abs(dcaNP)<fCutDCANegToPV) return kFALSE;
2329 Float_t dcaPP=aodV0->DcaPosToPrimVertex();
2330 if (TMath::Abs(dcaPP)<fCutDCAPosToPV) return kFALSE;
2332 // DCA of daughter tracks
2333 Double_t dcaD=aodV0->DcaV0Daughters();
2334 if (dcaD>fCutDCAV0Daughters) return kFALSE;
2336 // Cosinus of pointing angle
2337 Double_t cpa=aodV0->CosPointingAngle(aod->GetPrimaryVertex());
2338 if (cpa<fCutV0CosPA) return kFALSE;
2341 Double_t xyz[3]; aodV0->GetSecondaryVtx(xyz);
2342 Double_t r2=xyz[0]*xyz[0] + xyz[1]*xyz[1];
2343 if (r2<fCutV0Radius) return kFALSE;
2345 // Get daughters and check them
2346 myTrackPos=(AliAODTrack *)(aodV0->GetDaughter(0));
2347 myTrackNeg=(AliAODTrack *)(aodV0->GetDaughter(1));
2349 if (!myTrackPos||!myTrackNeg) return kFALSE;
2350 // Unlike signs of daughters
2351 if (myTrackPos->Charge() == myTrackNeg->Charge()) return kFALSE;
2353 // Track cuts for daughers
2354 if ( !(IsAcseptedDaughterTrack(myTrackPos)) || !(IsAcseptedDaughterTrack(myTrackNeg)) ) return kFALSE;
2356 // Minimum pt of daughters
2357 Double_t lMomPos[3] = {999,999,999};
2358 Double_t lMomNeg[3] = {999,999,999};
2360 lMomPos[0] = aodV0->MomPosX();
2361 lMomPos[1] = aodV0->MomPosY();
2362 lMomPos[2] = aodV0->MomPosZ();
2364 lMomNeg[0] = aodV0->MomNegX();
2365 lMomNeg[1] = aodV0->MomNegY();
2366 lMomNeg[2] = aodV0->MomNegZ();
2368 Double_t lPtPos = TMath::Sqrt(lMomPos[0]*lMomPos[0] + lMomPos[1]*lMomPos[1]);
2369 Double_t lPtNeg = TMath::Sqrt(lMomNeg[0]*lMomNeg[0] + lMomNeg[1]*lMomNeg[1]);
2371 Double_t cutMinPtDaughter = 0.150;
2372 if (lPtPos<cutMinPtDaughter || lPtNeg<cutMinPtDaughter) return kFALSE;
2376 //---------------------------------------------------------------------------------------
2377 Double_t AliLeadingV0Correlation::IsAccepteddEdx(const Double_t mom,const Double_t signal, AliPID::EParticleType n){
2379 const Double_t kBBMIP(50.);
2380 const Double_t kBBRes(0.07);
2381 const Double_t kBBp1(0.76176e-1);
2382 const Double_t kBBp2(10.632);
2383 const Double_t kBBp3(0.13279e-4);
2384 const Double_t kBBp4(1.8631);
2385 const Double_t kBBp5(1.9479);
2387 Double_t mass=AliPID::ParticleMass(n);
2388 Double_t betaGamma = mom/mass;
2390 const Float_t kmeanCorrection =0.1;
2391 Double_t bb = AliExternalTrackParam::BetheBlochAleph(betaGamma,kBBp1,kBBp2,kBBp3,kBBp4,kBBp5);
2392 Double_t meanCorrection =(1+(bb-1)*kmeanCorrection);
2393 Double_t bethe = bb * meanCorrection;
2394 Double_t sigma = bethe * kBBRes;
2396 Double_t dedx = signal/kBBMIP;
2397 Double_t nSig = (TMath::Abs(dedx - bethe))/sigma;
2402 //---------------------------------------------------------------------------------------
2403 void AliLeadingV0Correlation::Terminate(Option_t *)
2405 //No need in the grid
2407 //---------------------------------------------------------------------------------------