1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
7 * Permission to use, copy, modify and distribute this software and its *
8 * documentation strictly for non-commercial purposes is hereby granted *
9 * without fee, provided that the above copyright notice appears in all *
10 * copies and that both the copyright notice and this permission notice *
11 * appear in the supporting documentation. The authors make no claims *
12 * about the suitability of this software for any purpose. It is *
13 * provided "as is" without express or implied warranty. *
14 **************************************************************************/
16 // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
18 // Modified version of AliAnalysisTaskCheckCascade.cxx.
19 // This is a 'hybrid' output version, in that it uses a classic TTree
20 // ROOT object to store the candidates, plus a couple of histograms filled on
21 // a per-event basis for storing variables too numerous to put in a tree.
23 // --- Adapted to look for lambdas as well, using code from
24 // AliAnalysisTaskCheckPerformanceStrange.cxx
26 // --- Algorithm Description
27 // 1. Loop over primaries in stack to acquire generated charged Xi
28 // 2. Loop over stack to find V0s, fill TH3Fs "PrimRawPt"s for Efficiency
29 // 3. Perform Physics Selection
30 // 4. Perform Primary Vertex |z|<10cm selection
31 // 5. Perform Primary Vertex NoTPCOnly vertexing selection (>0 contrib.)
32 // 6. Perform Pileup Rejection
34 // 7a. Fill TH3Fs "PrimAnalysisPt" for control purposes only
35 // 7b. Fill TTree object with V0 information, candidates
37 // Please Report Any Bugs!
39 // --- David Dobrigkeit Chinellato
40 // (david.chinellato@gmail.com)
42 // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
48 //class AliMCEventHandler;
57 #include <Riostream.h>
63 #include "THnSparse.h"
70 #include "AliESDEvent.h"
71 #include "AliAODEvent.h"
72 #include "AliV0vertexer.h"
73 #include "AliCascadeVertexer.h"
74 #include "AliESDpid.h"
75 #include "AliESDtrack.h"
76 #include "AliESDtrackCuts.h"
77 #include "AliInputEventHandler.h"
78 #include "AliAnalysisManager.h"
79 #include "AliMCEventHandler.h"
80 #include "AliMCEvent.h"
83 #include "AliCFContainer.h"
84 #include "AliMultiplicity.h"
85 #include "AliAODMCParticle.h"
86 #include "AliESDcascade.h"
87 #include "AliAODcascade.h"
88 #include "AliESDUtils.h"
89 #include "AliGenEventHeader.h"
90 #include "AliAnalysisTaskSE.h"
91 #include "AliAnalysisUtils.h"
92 #include "AliAnalysisTaskExtractPerformanceV0.h"
93 #include "AliHeader.h"
94 #include "AliGenDPMjetEventHeader.h"
99 ClassImp(AliAnalysisTaskExtractPerformanceV0)
101 AliAnalysisTaskExtractPerformanceV0::AliAnalysisTaskExtractPerformanceV0()
102 : AliAnalysisTaskSE(), fListHistV0(0), fTree(0), fPIDResponse(0), fESDtrackCuts(0), fUtils(0),
103 fkIsNuclear ( kFALSE ),
104 fkSwitchINT7 ( kFALSE ),
105 fkUseOnTheFly ( kFALSE ),
106 fkTakeAllTracks ( kFALSE ),
107 fpArapidityShift ( 0.465 ),
108 fCentralityEstimator("V0M"),
109 fkLightWeight ( kFALSE ),
111 fkpAVertexSelection( kFALSE ),
112 fkRunV0Vertexer( kFALSE ),
113 fkRejectPileup ( kTRUE ),
114 fkSpecialExecution ( kFALSE),
115 fkSkipTrigger(kFALSE),
116 fkSaveAssociatedOnly (kFALSE),
117 fkDoNotCallTPCdEdx( kFALSE ),
118 fDiffractiveOnly(kFALSE),
120 //------------------------------------------------
123 fTreeVariablePrimaryStatus(0),
124 fTreeVariablePrimaryStatusMother(0),
125 fTreeVariableChi2V0(0),
126 fTreeVariableDcaV0Daughters(0),
127 fTreeVariableDcaV0ToPrimVertex(0),
128 fTreeVariableDcaPosToPrimVertex(0),
129 fTreeVariableDcaNegToPrimVertex(0),
130 fTreeVariableDCAV0ToPrimVertex(0),
131 fTreeVariableV0CosineOfPointingAngle(0),
132 fTreeVariableV0Radius(0),
134 fTreeVariablePtMC(0),
135 fTreeVariableRapK0Short(0),
136 fTreeVariableRapLambda(0),
137 fTreeVariableRapMC(0),
138 fTreeVariableInvMassK0s(0),
139 fTreeVariableInvMassLambda(0),
140 fTreeVariableInvMassAntiLambda(0),
141 fTreeVariableAlphaV0(0),
142 fTreeVariablePtArmV0(0),
143 fTreeVariableNegTotMomentum(0),
144 fTreeVariablePosTotMomentum(0),
145 fTreeVariableNegTransvMomentum(0),
146 fTreeVariablePosTransvMomentum(0),
147 fTreeVariableNegTransvMomentumMC(0),
148 fTreeVariablePosTransvMomentumMC(0),
150 fTreeVariableNSigmasPosProton(0),
151 fTreeVariableNSigmasPosPion(0),
152 fTreeVariableNSigmasNegProton(0),
153 fTreeVariableNSigmasNegPion(0),
155 fTreeVariablePtMother(0),
156 fTreeVariableV0CreationRadius(0),
158 fTreeVariablePIDPositive(0),
159 fTreeVariablePIDNegative(0),
160 fTreeVariablePIDMother(0),
161 fTreeVariableIndexStatus(0),
162 fTreeVariableIndexStatusMother(0),
164 fTreeVariableRunNumber(0),
165 fTreeVariableEventNumber(0),
167 fTreeVariableDistOverTotMom(0),
169 fTreeVariablePosEta(0),
170 fTreeVariableNegEta(0),
172 fTreeVariableVertexZ(0),
174 fTreeVariableLeastNbrCrossedRows(0),
175 fTreeVariableLeastRatioCrossedRowsOverFindable(0),
177 fTreeVariableMultiplicity(0),
178 fTreeVariableMultiplicityV0A(0),
179 fTreeVariableMultiplicityZNA(0),
180 fTreeVariableMultiplicityTRK(0),
181 fTreeVariableMultiplicitySPD(0),
182 fTreeVariableMultiplicityMC(0),
188 fTreeVariableV0Px(0),
189 fTreeVariableV0Py(0),
190 fTreeVariableV0Pz(0),
192 fTreeVariableMCV0x(0),
193 fTreeVariableMCV0y(0),
194 fTreeVariableMCV0z(0),
196 fTreeVariableMCV0Px(0),
197 fTreeVariableMCV0Py(0),
198 fTreeVariableMCV0Pz(0),
204 fTreeVariableMCPVx(0),
205 fTreeVariableMCPVy(0),
206 fTreeVariableMCPVz(0),
208 fTreeVariableIsNonInjected(0),
210 fTreeVariableNegTrackStatus(0),
211 fTreeVariablePosTrackStatus(0),
213 fTreeVariableNegPhysicalStatus(0),
214 fTreeVariablePosPhysicalStatus(0),
216 fTreeVariableNegPx(0),
217 fTreeVariableNegPy(0),
218 fTreeVariableNegPz(0),
219 fTreeVariablePosPx(0),
220 fTreeVariablePosPy(0),
221 fTreeVariablePosPz(0),
223 //------------------------------------------------
225 // --- Filled on an Event-by-event basis
226 //------------------------------------------------
227 fHistV0MultiplicityBeforeTrigSel(0),
228 fHistV0MultiplicityForTrigEvt(0),
229 fHistV0MultiplicityForSelEvt(0),
230 fHistV0MultiplicityForSelEvtNoTPCOnly(0),
231 fHistV0MultiplicityForSelEvtNoTPCOnlyNoPileup(0),
232 fHistMultiplicityBeforeTrigSel(0),
233 fHistMultiplicityForTrigEvt(0),
234 fHistMultiplicity(0),
235 fHistMultiplicityNoTPCOnly(0),
236 fHistMultiplicityNoTPCOnlyNoPileup(0),
239 fHistMultiplicityV0ABeforeTrigSel(0),
240 fHistMultiplicityV0AForTrigEvt(0),
241 fHistMultiplicityV0A(0),
242 fHistMultiplicityV0ANoTPCOnly(0),
243 fHistMultiplicityV0ANoTPCOnlyNoPileup(0),
246 fHistMultiplicityZNABeforeTrigSel(0),
247 fHistMultiplicityZNAForTrigEvt(0),
248 fHistMultiplicityZNA(0),
249 fHistMultiplicityZNANoTPCOnly(0),
250 fHistMultiplicityZNANoTPCOnlyNoPileup(0),
253 fHistMultiplicityTRKBeforeTrigSel(0),
254 fHistMultiplicityTRKForTrigEvt(0),
255 fHistMultiplicityTRK(0),
256 fHistMultiplicityTRKNoTPCOnly(0),
257 fHistMultiplicityTRKNoTPCOnlyNoPileup(0),
260 fHistMultiplicitySPDBeforeTrigSel(0),
261 fHistMultiplicitySPDForTrigEvt(0),
262 fHistMultiplicitySPD(0),
263 fHistMultiplicitySPDNoTPCOnly(0),
264 fHistMultiplicitySPDNoTPCOnlyNoPileup(0),
266 f2dHistMultiplicityVsTrueBeforeTrigSel(0),
267 f2dHistMultiplicityVsTrueForTrigEvt(0),
268 f2dHistMultiplicityVsTrue(0),
269 f2dHistMultiplicityVsTrueNoTPCOnly(0),
270 f2dHistMultiplicityVsTrueNoTPCOnlyNoPileup(0),
272 //Raw Data for Vertex Z position estimator change
273 f2dHistMultiplicityVsVertexZBeforeTrigSel(0),
274 f2dHistMultiplicityVsVertexZForTrigEvt(0),
275 f2dHistMultiplicityVsVertexZ(0),
276 f2dHistMultiplicityVsVertexZNoTPCOnly(0),
277 f2dHistMultiplicityVsVertexZNoTPCOnlyNoPileup(0),
279 fHistGenVertexZBeforeTrigSel(0),
280 fHistGenVertexZForTrigEvt(0),
282 fHistGenVertexZNoTPCOnly(0),
283 fHistGenVertexZNoTPCOnlyNoPileup(0),
285 //------------------------------------------------
286 // PARTICLE HISTOGRAMS
287 // --- Filled on a Particle-by-Particle basis
288 //------------------------------------------------
290 //Standard V0M / multiplicity
291 f3dHistPrimAnalysisPtVsYVsMultLambda(0),
292 f3dHistPrimAnalysisPtVsYVsMultAntiLambda(0),
293 f3dHistPrimAnalysisPtVsYVsMultK0Short(0),
294 f3dHistPrimAnalysisPtVsYCMSVsMultLambda(0),
295 f3dHistPrimAnalysisPtVsYCMSVsMultAntiLambda(0),
296 f3dHistPrimAnalysisPtVsYCMSVsMultK0Short(0),
299 f3dHistPrimAnalysisPtVsYVsMultMCLambda(0),
300 f3dHistPrimAnalysisPtVsYVsMultMCAntiLambda(0),
301 f3dHistPrimAnalysisPtVsYVsMultMCK0Short(0),
302 f3dHistPrimAnalysisPtVsYCMSVsMultMCLambda(0),
303 f3dHistPrimAnalysisPtVsYCMSVsMultMCAntiLambda(0),
304 f3dHistPrimAnalysisPtVsYCMSVsMultMCK0Short(0),
307 f3dHistPrimAnalysisPtVsYVsMultV0ALambda(0),
308 f3dHistPrimAnalysisPtVsYVsMultV0AAntiLambda(0),
309 f3dHistPrimAnalysisPtVsYVsMultV0AK0Short(0),
310 f3dHistPrimAnalysisPtVsYCMSVsMultV0ALambda(0),
311 f3dHistPrimAnalysisPtVsYCMSVsMultV0AAntiLambda(0),
312 f3dHistPrimAnalysisPtVsYCMSVsMultV0AK0Short(0),
314 //Added for cross-check
315 f3dHistPrimRawPtVsYCMSVsMultV0AKPlus(0),
316 f3dHistPrimRawPtVsYCMSVsMultV0AKMinus(0),
317 f3dHistPrimAnalysisPtVsYCMSVsMultV0AKPlus(0),
318 f3dHistPrimAnalysisPtVsYCMSVsMultV0AKMinus(0),
321 f3dHistPrimAnalysisPtVsYVsMultZNALambda(0),
322 f3dHistPrimAnalysisPtVsYVsMultZNAAntiLambda(0),
323 f3dHistPrimAnalysisPtVsYVsMultZNAK0Short(0),
324 f3dHistPrimAnalysisPtVsYCMSVsMultZNALambda(0),
325 f3dHistPrimAnalysisPtVsYCMSVsMultZNAAntiLambda(0),
326 f3dHistPrimAnalysisPtVsYCMSVsMultZNAK0Short(0),
329 f3dHistPrimAnalysisPtVsYVsMultTRKLambda(0),
330 f3dHistPrimAnalysisPtVsYVsMultTRKAntiLambda(0),
331 f3dHistPrimAnalysisPtVsYVsMultTRKK0Short(0),
332 f3dHistPrimAnalysisPtVsYCMSVsMultTRKLambda(0),
333 f3dHistPrimAnalysisPtVsYCMSVsMultTRKAntiLambda(0),
334 f3dHistPrimAnalysisPtVsYCMSVsMultTRKK0Short(0),
337 f3dHistPrimAnalysisPtVsYVsMultSPDLambda(0),
338 f3dHistPrimAnalysisPtVsYVsMultSPDAntiLambda(0),
339 f3dHistPrimAnalysisPtVsYVsMultSPDK0Short(0),
340 f3dHistPrimAnalysisPtVsYCMSVsMultSPDLambda(0),
341 f3dHistPrimAnalysisPtVsYCMSVsMultSPDAntiLambda(0),
342 f3dHistPrimAnalysisPtVsYCMSVsMultSPDK0Short(0),
345 f3dHistPrimRawPtVsYVsMultLambda(0),
346 f3dHistPrimRawPtVsYVsMultAntiLambda(0),
347 f3dHistPrimRawPtVsYVsMultK0Short(0),
348 f3dHistPrimRawPtVsYCMSVsMultLambda(0),
349 f3dHistPrimRawPtVsYCMSVsMultAntiLambda(0),
350 f3dHistPrimRawPtVsYCMSVsMultK0Short(0),
353 f3dHistPrimRawPtVsYVsMultV0ALambda(0),
354 f3dHistPrimRawPtVsYVsMultV0AAntiLambda(0),
355 f3dHistPrimRawPtVsYVsMultV0AK0Short(0),
356 f3dHistPrimRawPtVsYCMSVsMultV0ALambda(0),
357 f3dHistPrimRawPtVsYCMSVsMultV0AAntiLambda(0),
358 f3dHistPrimRawPtVsYCMSVsMultV0AK0Short(0),
361 f3dHistPrimRawPtVsYVsMultZNALambda(0),
362 f3dHistPrimRawPtVsYVsMultZNAAntiLambda(0),
363 f3dHistPrimRawPtVsYVsMultZNAK0Short(0),
364 f3dHistPrimRawPtVsYCMSVsMultZNALambda(0),
365 f3dHistPrimRawPtVsYCMSVsMultZNAAntiLambda(0),
366 f3dHistPrimRawPtVsYCMSVsMultZNAK0Short(0),
369 f3dHistPrimRawPtVsYVsMultTRKLambda(0),
370 f3dHistPrimRawPtVsYVsMultTRKAntiLambda(0),
371 f3dHistPrimRawPtVsYVsMultTRKK0Short(0),
372 f3dHistPrimRawPtVsYCMSVsMultTRKLambda(0),
373 f3dHistPrimRawPtVsYCMSVsMultTRKAntiLambda(0),
374 f3dHistPrimRawPtVsYCMSVsMultTRKK0Short(0),
377 f3dHistPrimRawPtVsYVsMultSPDLambda(0),
378 f3dHistPrimRawPtVsYVsMultSPDAntiLambda(0),
379 f3dHistPrimRawPtVsYVsMultSPDK0Short(0),
380 f3dHistPrimRawPtVsYCMSVsMultSPDLambda(0),
381 f3dHistPrimRawPtVsYCMSVsMultSPDAntiLambda(0),
382 f3dHistPrimRawPtVsYCMSVsMultSPDK0Short(0),
384 f3dHistPrimRawPtVsYVsMultNonInjLambda(0),
385 f3dHistPrimRawPtVsYVsMultNonInjAntiLambda(0),
386 f3dHistPrimRawPtVsYVsMultNonInjK0Short(0),
387 f3dHistPrimRawPtVsYVsMultMCLambda(0),
388 f3dHistPrimRawPtVsYVsMultMCAntiLambda(0),
389 f3dHistPrimRawPtVsYVsMultMCK0Short(0),
390 f3dHistPrimRawPtVsYVsVertexZLambda(0),
391 f3dHistPrimRawPtVsYVsVertexZAntiLambda(0),
392 f3dHistPrimRawPtVsYVsVertexZK0Short(0),
393 f3dHistPrimCloseToPVPtVsYVsMultLambda(0),
394 f3dHistPrimCloseToPVPtVsYVsMultAntiLambda(0),
395 f3dHistPrimCloseToPVPtVsYVsMultK0Short(0),
396 f3dHistPrimRawPtVsYVsDecayLengthLambda(0),
397 f3dHistPrimRawPtVsYVsDecayLengthAntiLambda(0),
398 f3dHistPrimRawPtVsYVsDecayLengthK0Short(0),
401 f3dHistGenPtVsYVsMultXiMinus(0),
402 f3dHistGenPtVsYVsMultXiPlus(0),
403 f3dHistGenSelectedPtVsYVsMultXiMinus(0),
404 f3dHistGenSelectedPtVsYVsMultXiPlus(0),
405 f3dHistGenPtVsYCMSVsMultXiMinus(0),
406 f3dHistGenPtVsYCMSVsMultXiPlus(0),
407 f3dHistGenSelectedPtVsYCMSVsMultXiMinus(0),
408 f3dHistGenSelectedPtVsYCMSVsMultXiPlus(0),
411 f3dHistGenPtVsYVsMultV0AXiMinus(0),
412 f3dHistGenPtVsYVsMultV0AXiPlus(0),
413 f3dHistGenSelectedPtVsYVsMultV0AXiMinus(0),
414 f3dHistGenSelectedPtVsYVsMultV0AXiPlus(0),
415 f3dHistGenPtVsYCMSVsMultV0AXiMinus(0),
416 f3dHistGenPtVsYCMSVsMultV0AXiPlus(0),
417 f3dHistGenSelectedPtVsYCMSVsMultV0AXiMinus(0),
418 f3dHistGenSelectedPtVsYCMSVsMultV0AXiPlus(0),
421 f3dHistGenPtVsYVsMultZNAXiMinus(0),
422 f3dHistGenPtVsYVsMultZNAXiPlus(0),
423 f3dHistGenSelectedPtVsYVsMultZNAXiMinus(0),
424 f3dHistGenSelectedPtVsYVsMultZNAXiPlus(0),
425 f3dHistGenPtVsYCMSVsMultZNAXiMinus(0),
426 f3dHistGenPtVsYCMSVsMultZNAXiPlus(0),
427 f3dHistGenSelectedPtVsYCMSVsMultZNAXiMinus(0),
428 f3dHistGenSelectedPtVsYCMSVsMultZNAXiPlus(0),
431 f3dHistGenPtVsYVsMultTRKXiMinus(0),
432 f3dHistGenPtVsYVsMultTRKXiPlus(0),
433 f3dHistGenSelectedPtVsYVsMultTRKXiMinus(0),
434 f3dHistGenSelectedPtVsYVsMultTRKXiPlus(0),
435 f3dHistGenPtVsYCMSVsMultTRKXiMinus(0),
436 f3dHistGenPtVsYCMSVsMultTRKXiPlus(0),
437 f3dHistGenSelectedPtVsYCMSVsMultTRKXiMinus(0),
438 f3dHistGenSelectedPtVsYCMSVsMultTRKXiPlus(0),
441 f3dHistGenPtVsYVsMultSPDXiMinus(0),
442 f3dHistGenPtVsYVsMultSPDXiPlus(0),
443 f3dHistGenSelectedPtVsYVsMultSPDXiMinus(0),
444 f3dHistGenSelectedPtVsYVsMultSPDXiPlus(0),
445 f3dHistGenPtVsYCMSVsMultSPDXiMinus(0),
446 f3dHistGenPtVsYCMSVsMultSPDXiPlus(0),
447 f3dHistGenSelectedPtVsYCMSVsMultSPDXiMinus(0),
448 f3dHistGenSelectedPtVsYCMSVsMultSPDXiPlus(0),
456 fHistPVxAnalysisHasHighPtLambda(0),
457 fHistPVyAnalysisHasHighPtLambda(0),
458 fHistPVzAnalysisHasHighPtLambda(0),
459 fHistSwappedV0Counter(0)
462 for(Int_t iV0selIdx = 0; iV0selIdx < 7; iV0selIdx++ ) { fV0Sels [iV0selIdx ] = -1.; }
465 AliAnalysisTaskExtractPerformanceV0::AliAnalysisTaskExtractPerformanceV0(const char *name)
466 : AliAnalysisTaskSE(name), fListHistV0(0), fTree(0), fPIDResponse(0), fESDtrackCuts(0), fUtils(0),
467 fkIsNuclear ( kFALSE ),
468 fkSwitchINT7 ( kFALSE ),
469 fkUseOnTheFly ( kFALSE ),
470 fkTakeAllTracks ( kFALSE ),
471 fpArapidityShift ( 0.465 ),
472 fCentralityEstimator("V0M"),
473 fkLightWeight ( kFALSE ),
475 fkpAVertexSelection( kFALSE ),
476 fkRunV0Vertexer( kFALSE ),
477 fkRejectPileup ( kTRUE ),
478 fkSpecialExecution ( kFALSE),
479 fkSkipTrigger(kFALSE),
480 fkSaveAssociatedOnly (kFALSE),
481 fkDoNotCallTPCdEdx( kFALSE ),
482 fDiffractiveOnly(kFALSE),
484 //------------------------------------------------
487 fTreeVariablePrimaryStatus(0),
488 fTreeVariablePrimaryStatusMother(0),
489 fTreeVariableChi2V0(0),
490 fTreeVariableDcaV0Daughters(0),
491 fTreeVariableDcaV0ToPrimVertex(0),
492 fTreeVariableDcaPosToPrimVertex(0),
493 fTreeVariableDcaNegToPrimVertex(0),
494 fTreeVariableDCAV0ToPrimVertex(0),
495 fTreeVariableV0CosineOfPointingAngle(0),
496 fTreeVariableV0Radius(0),
498 fTreeVariablePtMC(0),
499 fTreeVariableRapK0Short(0),
500 fTreeVariableRapLambda(0),
501 fTreeVariableRapMC(0),
502 fTreeVariableInvMassK0s(0),
503 fTreeVariableInvMassLambda(0),
504 fTreeVariableInvMassAntiLambda(0),
505 fTreeVariableAlphaV0(0),
506 fTreeVariablePtArmV0(0),
507 fTreeVariableNegTotMomentum(0),
508 fTreeVariablePosTotMomentum(0),
509 fTreeVariableNegTransvMomentum(0),
510 fTreeVariablePosTransvMomentum(0),
511 fTreeVariableNegTransvMomentumMC(0),
512 fTreeVariablePosTransvMomentumMC(0),
514 fTreeVariableNSigmasPosProton(0),
515 fTreeVariableNSigmasPosPion(0),
516 fTreeVariableNSigmasNegProton(0),
517 fTreeVariableNSigmasNegPion(0),
519 fTreeVariablePtMother(0),
520 fTreeVariableV0CreationRadius(0),
522 fTreeVariablePIDPositive(0),
523 fTreeVariablePIDNegative(0),
524 fTreeVariablePIDMother(0),
525 fTreeVariableIndexStatus(0),
526 fTreeVariableIndexStatusMother(0),
528 fTreeVariableRunNumber(0),
529 fTreeVariableEventNumber(0),
531 fTreeVariableDistOverTotMom(0),
533 fTreeVariablePosEta(0),
534 fTreeVariableNegEta(0),
536 fTreeVariableVertexZ(0),
538 fTreeVariableLeastNbrCrossedRows(0),
539 fTreeVariableLeastRatioCrossedRowsOverFindable(0),
540 fTreeVariableMultiplicity(0),
541 fTreeVariableMultiplicityV0A(0),
542 fTreeVariableMultiplicityZNA(0),
543 fTreeVariableMultiplicityTRK(0),
544 fTreeVariableMultiplicitySPD(0),
545 fTreeVariableMultiplicityMC(0),
551 fTreeVariableV0Px(0),
552 fTreeVariableV0Py(0),
553 fTreeVariableV0Pz(0),
555 fTreeVariableMCV0x(0),
556 fTreeVariableMCV0y(0),
557 fTreeVariableMCV0z(0),
559 fTreeVariableMCV0Px(0),
560 fTreeVariableMCV0Py(0),
561 fTreeVariableMCV0Pz(0),
567 fTreeVariableMCPVx(0),
568 fTreeVariableMCPVy(0),
569 fTreeVariableMCPVz(0),
571 fTreeVariableIsNonInjected(0),
573 fTreeVariableNegTrackStatus(0),
574 fTreeVariablePosTrackStatus(0),
576 fTreeVariableNegPhysicalStatus(0),
577 fTreeVariablePosPhysicalStatus(0),
579 fTreeVariableNegPx(0),
580 fTreeVariableNegPy(0),
581 fTreeVariableNegPz(0),
582 fTreeVariablePosPx(0),
583 fTreeVariablePosPy(0),
584 fTreeVariablePosPz(0),
586 //------------------------------------------------
588 // --- Filled on an Event-by-event basis
589 //------------------------------------------------
590 fHistV0MultiplicityBeforeTrigSel(0),
591 fHistV0MultiplicityForTrigEvt(0),
592 fHistV0MultiplicityForSelEvt(0),
593 fHistV0MultiplicityForSelEvtNoTPCOnly(0),
594 fHistV0MultiplicityForSelEvtNoTPCOnlyNoPileup(0),
595 fHistMultiplicityBeforeTrigSel(0),
596 fHistMultiplicityForTrigEvt(0),
597 fHistMultiplicity(0),
598 fHistMultiplicityNoTPCOnly(0),
599 fHistMultiplicityNoTPCOnlyNoPileup(0),
602 fHistMultiplicityV0ABeforeTrigSel(0),
603 fHistMultiplicityV0AForTrigEvt(0),
604 fHistMultiplicityV0A(0),
605 fHistMultiplicityV0ANoTPCOnly(0),
606 fHistMultiplicityV0ANoTPCOnlyNoPileup(0),
609 fHistMultiplicityZNABeforeTrigSel(0),
610 fHistMultiplicityZNAForTrigEvt(0),
611 fHistMultiplicityZNA(0),
612 fHistMultiplicityZNANoTPCOnly(0),
613 fHistMultiplicityZNANoTPCOnlyNoPileup(0),
616 fHistMultiplicityTRKBeforeTrigSel(0),
617 fHistMultiplicityTRKForTrigEvt(0),
618 fHistMultiplicityTRK(0),
619 fHistMultiplicityTRKNoTPCOnly(0),
620 fHistMultiplicityTRKNoTPCOnlyNoPileup(0),
623 fHistMultiplicitySPDBeforeTrigSel(0),
624 fHistMultiplicitySPDForTrigEvt(0),
625 fHistMultiplicitySPD(0),
626 fHistMultiplicitySPDNoTPCOnly(0),
627 fHistMultiplicitySPDNoTPCOnlyNoPileup(0),
629 f2dHistMultiplicityVsTrueBeforeTrigSel(0),
630 f2dHistMultiplicityVsTrueForTrigEvt(0),
631 f2dHistMultiplicityVsTrue(0),
632 f2dHistMultiplicityVsTrueNoTPCOnly(0),
633 f2dHistMultiplicityVsTrueNoTPCOnlyNoPileup(0),
635 //Raw Data for Vertex Z position estimator change
636 f2dHistMultiplicityVsVertexZBeforeTrigSel(0),
637 f2dHistMultiplicityVsVertexZForTrigEvt(0),
638 f2dHistMultiplicityVsVertexZ(0),
639 f2dHistMultiplicityVsVertexZNoTPCOnly(0),
640 f2dHistMultiplicityVsVertexZNoTPCOnlyNoPileup(0),
642 fHistGenVertexZBeforeTrigSel(0),
643 fHistGenVertexZForTrigEvt(0),
645 fHistGenVertexZNoTPCOnly(0),
646 fHistGenVertexZNoTPCOnlyNoPileup(0),
648 //------------------------------------------------
649 // PARTICLE HISTOGRAMS
650 // --- Filled on a Particle-by-Particle basis
651 //------------------------------------------------
654 f3dHistPrimAnalysisPtVsYVsMultLambda(0),
655 f3dHistPrimAnalysisPtVsYVsMultAntiLambda(0),
656 f3dHistPrimAnalysisPtVsYVsMultK0Short(0),
657 f3dHistPrimAnalysisPtVsYCMSVsMultLambda(0),
658 f3dHistPrimAnalysisPtVsYCMSVsMultAntiLambda(0),
659 f3dHistPrimAnalysisPtVsYCMSVsMultK0Short(0),
662 f3dHistPrimAnalysisPtVsYVsMultMCLambda(0),
663 f3dHistPrimAnalysisPtVsYVsMultMCAntiLambda(0),
664 f3dHistPrimAnalysisPtVsYVsMultMCK0Short(0),
665 f3dHistPrimAnalysisPtVsYCMSVsMultMCLambda(0),
666 f3dHistPrimAnalysisPtVsYCMSVsMultMCAntiLambda(0),
667 f3dHistPrimAnalysisPtVsYCMSVsMultMCK0Short(0),
670 f3dHistPrimAnalysisPtVsYVsMultV0ALambda(0),
671 f3dHistPrimAnalysisPtVsYVsMultV0AAntiLambda(0),
672 f3dHistPrimAnalysisPtVsYVsMultV0AK0Short(0),
673 f3dHistPrimAnalysisPtVsYCMSVsMultV0ALambda(0),
674 f3dHistPrimAnalysisPtVsYCMSVsMultV0AAntiLambda(0),
675 f3dHistPrimAnalysisPtVsYCMSVsMultV0AK0Short(0),
677 //Added for cross-check
678 f3dHistPrimRawPtVsYCMSVsMultV0AKPlus(0),
679 f3dHistPrimRawPtVsYCMSVsMultV0AKMinus(0),
680 f3dHistPrimAnalysisPtVsYCMSVsMultV0AKPlus(0),
681 f3dHistPrimAnalysisPtVsYCMSVsMultV0AKMinus(0),
684 f3dHistPrimAnalysisPtVsYVsMultZNALambda(0),
685 f3dHistPrimAnalysisPtVsYVsMultZNAAntiLambda(0),
686 f3dHistPrimAnalysisPtVsYVsMultZNAK0Short(0),
687 f3dHistPrimAnalysisPtVsYCMSVsMultZNALambda(0),
688 f3dHistPrimAnalysisPtVsYCMSVsMultZNAAntiLambda(0),
689 f3dHistPrimAnalysisPtVsYCMSVsMultZNAK0Short(0),
692 f3dHistPrimAnalysisPtVsYVsMultTRKLambda(0),
693 f3dHistPrimAnalysisPtVsYVsMultTRKAntiLambda(0),
694 f3dHistPrimAnalysisPtVsYVsMultTRKK0Short(0),
695 f3dHistPrimAnalysisPtVsYCMSVsMultTRKLambda(0),
696 f3dHistPrimAnalysisPtVsYCMSVsMultTRKAntiLambda(0),
697 f3dHistPrimAnalysisPtVsYCMSVsMultTRKK0Short(0),
700 f3dHistPrimAnalysisPtVsYVsMultSPDLambda(0),
701 f3dHistPrimAnalysisPtVsYVsMultSPDAntiLambda(0),
702 f3dHistPrimAnalysisPtVsYVsMultSPDK0Short(0),
703 f3dHistPrimAnalysisPtVsYCMSVsMultSPDLambda(0),
704 f3dHistPrimAnalysisPtVsYCMSVsMultSPDAntiLambda(0),
705 f3dHistPrimAnalysisPtVsYCMSVsMultSPDK0Short(0),
708 f3dHistPrimRawPtVsYVsMultLambda(0),
709 f3dHistPrimRawPtVsYVsMultAntiLambda(0),
710 f3dHistPrimRawPtVsYVsMultK0Short(0),
711 f3dHistPrimRawPtVsYCMSVsMultLambda(0),
712 f3dHistPrimRawPtVsYCMSVsMultAntiLambda(0),
713 f3dHistPrimRawPtVsYCMSVsMultK0Short(0),
716 f3dHistPrimRawPtVsYVsMultV0ALambda(0),
717 f3dHistPrimRawPtVsYVsMultV0AAntiLambda(0),
718 f3dHistPrimRawPtVsYVsMultV0AK0Short(0),
719 f3dHistPrimRawPtVsYCMSVsMultV0ALambda(0),
720 f3dHistPrimRawPtVsYCMSVsMultV0AAntiLambda(0),
721 f3dHistPrimRawPtVsYCMSVsMultV0AK0Short(0),
724 f3dHistPrimRawPtVsYVsMultZNALambda(0),
725 f3dHistPrimRawPtVsYVsMultZNAAntiLambda(0),
726 f3dHistPrimRawPtVsYVsMultZNAK0Short(0),
727 f3dHistPrimRawPtVsYCMSVsMultZNALambda(0),
728 f3dHistPrimRawPtVsYCMSVsMultZNAAntiLambda(0),
729 f3dHistPrimRawPtVsYCMSVsMultZNAK0Short(0),
732 f3dHistPrimRawPtVsYVsMultTRKLambda(0),
733 f3dHistPrimRawPtVsYVsMultTRKAntiLambda(0),
734 f3dHistPrimRawPtVsYVsMultTRKK0Short(0),
735 f3dHistPrimRawPtVsYCMSVsMultTRKLambda(0),
736 f3dHistPrimRawPtVsYCMSVsMultTRKAntiLambda(0),
737 f3dHistPrimRawPtVsYCMSVsMultTRKK0Short(0),
740 f3dHistPrimRawPtVsYVsMultSPDLambda(0),
741 f3dHistPrimRawPtVsYVsMultSPDAntiLambda(0),
742 f3dHistPrimRawPtVsYVsMultSPDK0Short(0),
743 f3dHistPrimRawPtVsYCMSVsMultSPDLambda(0),
744 f3dHistPrimRawPtVsYCMSVsMultSPDAntiLambda(0),
745 f3dHistPrimRawPtVsYCMSVsMultSPDK0Short(0),
747 f3dHistPrimRawPtVsYVsMultNonInjLambda(0),
748 f3dHistPrimRawPtVsYVsMultNonInjAntiLambda(0),
749 f3dHistPrimRawPtVsYVsMultNonInjK0Short(0),
750 f3dHistPrimRawPtVsYVsMultMCLambda(0),
751 f3dHistPrimRawPtVsYVsMultMCAntiLambda(0),
752 f3dHistPrimRawPtVsYVsMultMCK0Short(0),
753 f3dHistPrimRawPtVsYVsVertexZLambda(0),
754 f3dHistPrimRawPtVsYVsVertexZAntiLambda(0),
755 f3dHistPrimRawPtVsYVsVertexZK0Short(0),
756 f3dHistPrimCloseToPVPtVsYVsMultLambda(0),
757 f3dHistPrimCloseToPVPtVsYVsMultAntiLambda(0),
758 f3dHistPrimCloseToPVPtVsYVsMultK0Short(0),
759 f3dHistPrimRawPtVsYVsDecayLengthLambda(0),
760 f3dHistPrimRawPtVsYVsDecayLengthAntiLambda(0),
761 f3dHistPrimRawPtVsYVsDecayLengthK0Short(0),
764 f3dHistGenPtVsYVsMultXiMinus(0),
765 f3dHistGenPtVsYVsMultXiPlus(0),
766 f3dHistGenSelectedPtVsYVsMultXiMinus(0),
767 f3dHistGenSelectedPtVsYVsMultXiPlus(0),
768 f3dHistGenPtVsYCMSVsMultXiMinus(0),
769 f3dHistGenPtVsYCMSVsMultXiPlus(0),
770 f3dHistGenSelectedPtVsYCMSVsMultXiMinus(0),
771 f3dHistGenSelectedPtVsYCMSVsMultXiPlus(0),
774 f3dHistGenPtVsYVsMultV0AXiMinus(0),
775 f3dHistGenPtVsYVsMultV0AXiPlus(0),
776 f3dHistGenSelectedPtVsYVsMultV0AXiMinus(0),
777 f3dHistGenSelectedPtVsYVsMultV0AXiPlus(0),
778 f3dHistGenPtVsYCMSVsMultV0AXiMinus(0),
779 f3dHistGenPtVsYCMSVsMultV0AXiPlus(0),
780 f3dHistGenSelectedPtVsYCMSVsMultV0AXiMinus(0),
781 f3dHistGenSelectedPtVsYCMSVsMultV0AXiPlus(0),
784 f3dHistGenPtVsYVsMultZNAXiMinus(0),
785 f3dHistGenPtVsYVsMultZNAXiPlus(0),
786 f3dHistGenSelectedPtVsYVsMultZNAXiMinus(0),
787 f3dHistGenSelectedPtVsYVsMultZNAXiPlus(0),
788 f3dHistGenPtVsYCMSVsMultZNAXiMinus(0),
789 f3dHistGenPtVsYCMSVsMultZNAXiPlus(0),
790 f3dHistGenSelectedPtVsYCMSVsMultZNAXiMinus(0),
791 f3dHistGenSelectedPtVsYCMSVsMultZNAXiPlus(0),
794 f3dHistGenPtVsYVsMultTRKXiMinus(0),
795 f3dHistGenPtVsYVsMultTRKXiPlus(0),
796 f3dHistGenSelectedPtVsYVsMultTRKXiMinus(0),
797 f3dHistGenSelectedPtVsYVsMultTRKXiPlus(0),
798 f3dHistGenPtVsYCMSVsMultTRKXiMinus(0),
799 f3dHistGenPtVsYCMSVsMultTRKXiPlus(0),
800 f3dHistGenSelectedPtVsYCMSVsMultTRKXiMinus(0),
801 f3dHistGenSelectedPtVsYCMSVsMultTRKXiPlus(0),
804 f3dHistGenPtVsYVsMultSPDXiMinus(0),
805 f3dHistGenPtVsYVsMultSPDXiPlus(0),
806 f3dHistGenSelectedPtVsYVsMultSPDXiMinus(0),
807 f3dHistGenSelectedPtVsYVsMultSPDXiPlus(0),
808 f3dHistGenPtVsYCMSVsMultSPDXiMinus(0),
809 f3dHistGenPtVsYCMSVsMultSPDXiPlus(0),
810 f3dHistGenSelectedPtVsYCMSVsMultSPDXiMinus(0),
811 f3dHistGenSelectedPtVsYCMSVsMultSPDXiPlus(0),
819 fHistPVxAnalysisHasHighPtLambda(0),
820 fHistPVyAnalysisHasHighPtLambda(0),
821 fHistPVzAnalysisHasHighPtLambda(0),
822 fHistSwappedV0Counter(0)
825 // Set Loose cuts or not here...
826 // REALLY LOOSE? Be careful when attempting to run over PbPb if fkRunV0Vertexer is set!
827 fV0Sels[0] = 33. ; // max allowed chi2
828 fV0Sels[1] = 0.02; // min allowed impact parameter for the 1st daughter (LHC09a4 : 0.05)
829 fV0Sels[2] = 0.02; // min allowed impact parameter for the 2nd daughter (LHC09a4 : 0.05)
830 fV0Sels[3] = 2.0 ; // max allowed DCA between the daughter tracks (LHC09a4 : 0.5)
831 fV0Sels[4] = 0.95; // min allowed cosine of V0's pointing angle (LHC09a4 : 0.99)
832 fV0Sels[5] = 0.5 ; // min radius of the fiducial volume (LHC09a4 : 0.2)
833 fV0Sels[6] = 200. ; // max radius of the fiducial volume (LHC09a4 : 100.0)
834 // Output slot #0 writes into a TList container (Cascade)
835 DefineOutput(1, TList::Class());
836 DefineOutput(2, TTree::Class());
840 AliAnalysisTaskExtractPerformanceV0::~AliAnalysisTaskExtractPerformanceV0()
842 //------------------------------------------------
844 //------------------------------------------------
854 //cleanup esd track cuts object too...
856 delete fESDtrackCuts;
866 //________________________________________________________________________
867 void AliAnalysisTaskExtractPerformanceV0::UserCreateOutputObjects()
873 //------------------------------------------------
875 fTree = new TTree("fTree","V0Candidates");
877 //------------------------------------------------
878 // fTree Branch definitions - V0 Tree
879 //------------------------------------------------
881 //-----------BASIC-INFO---------------------------
882 /* 1*/ fTree->Branch("fTreeVariablePrimaryStatus",&fTreeVariablePrimaryStatus,"fTreeVariablePrimaryStatus/I");
883 /* 2*/ fTree->Branch("fTreeVariablePrimaryStatusMother",&fTreeVariablePrimaryStatusMother,"fTreeVariablePrimaryStatusMother/I");
884 /* 2*/ fTree->Branch("fTreeVariableChi2V0",&fTreeVariableChi2V0,"Chi2V0/F");
885 /* 3*/ fTree->Branch("fTreeVariableDcaV0Daughters",&fTreeVariableDcaV0Daughters,"fTreeVariableDcaV0Daughters/F");
886 /* 4*/ fTree->Branch("fTreeVariableDcaPosToPrimVertex",&fTreeVariableDcaPosToPrimVertex,"fTreeVariableDcaPosToPrimVertex/F");
887 /* 5*/ fTree->Branch("fTreeVariableDcaNegToPrimVertex",&fTreeVariableDcaNegToPrimVertex,"fTreeVariableDcaNegToPrimVertex/F");
888 /* 6*/ fTree->Branch("fTreeVariableV0Radius",&fTreeVariableV0Radius,"fTreeVariableV0Radius/F");
889 /* 7*/ fTree->Branch("fTreeVariablePt",&fTreeVariablePt,"fTreeVariablePt/F");
890 /* 7*/ fTree->Branch("fTreeVariablePtMC",&fTreeVariablePtMC,"fTreeVariablePtMC/F");
891 /* 8*/ fTree->Branch("fTreeVariableRapK0Short",&fTreeVariableRapK0Short,"fTreeVariableRapK0Short/F");
892 /* 9*/ fTree->Branch("fTreeVariableRapLambda",&fTreeVariableRapLambda,"fTreeVariableRapLambda/F");
893 /*10*/ fTree->Branch("fTreeVariableRapMC",&fTreeVariableRapMC,"fTreeVariableRapMC/F");
894 /*11*/ fTree->Branch("fTreeVariableInvMassK0s",&fTreeVariableInvMassK0s,"fTreeVariableInvMassK0s/F");
895 /*12*/ fTree->Branch("fTreeVariableInvMassLambda",&fTreeVariableInvMassLambda,"fTreeVariableInvMassLambda/F");
896 /*13*/ fTree->Branch("fTreeVariableInvMassAntiLambda",&fTreeVariableInvMassAntiLambda,"fTreeVariableInvMassAntiLambda/F");
897 /*14*/ fTree->Branch("fTreeVariableAlphaV0",&fTreeVariableAlphaV0,"fTreeVariableAlphaV0/F");
898 /*15*/ fTree->Branch("fTreeVariablePtArmV0",&fTreeVariablePtArmV0,"fTreeVariablePtArmV0/F");
899 /*16*/ fTree->Branch("fTreeVariableNegTransvMomentum",&fTreeVariableNegTransvMomentum,"fTreeVariableNegTransvMomentum/F");
900 /*17*/ fTree->Branch("fTreeVariablePosTransvMomentum",&fTreeVariablePosTransvMomentum,"fTreeVariablePosTransvMomentum/F");
901 /*18*/ fTree->Branch("fTreeVariableNegTransvMomentumMC",&fTreeVariableNegTransvMomentumMC,"fTreeVariableNegTransvMomentumMC/F");
902 /*19*/ fTree->Branch("fTreeVariablePosTransvMomentumMC",&fTreeVariablePosTransvMomentumMC,"fTreeVariablePosTransvMomentumMC/F");
903 /*20*/ fTree->Branch("fTreeVariableLeastNbrCrossedRows",&fTreeVariableLeastNbrCrossedRows,"fTreeVariableLeastNbrCrossedRows/I");
904 /*21*/ fTree->Branch("fTreeVariableLeastRatioCrossedRowsOverFindable",&fTreeVariableLeastRatioCrossedRowsOverFindable,"fTreeVariableLeastRatioCrossedRowsOverFindable/F");
905 /*22*/ fTree->Branch("fTreeVariablePID",&fTreeVariablePID,"fTreeVariablePID/I");
906 /*23*/ fTree->Branch("fTreeVariablePIDPositive",&fTreeVariablePIDPositive,"fTreeVariablePIDPositive/I");
907 /*24*/ fTree->Branch("fTreeVariablePIDNegative",&fTreeVariablePIDNegative,"fTreeVariablePIDNegative/I");
908 /*25*/ fTree->Branch("fTreeVariablePIDMother",&fTreeVariablePIDMother,"fTreeVariablePIDMother/I");
909 /*26*/ fTree->Branch("fTreeVariablePtXiMother",&fTreeVariablePtMother,"fTreeVariablePtMother/F");
910 /*27*/ fTree->Branch("fTreeVariableDCAV0ToPrimVertex",&fTreeVariableDCAV0ToPrimVertex,"fTreeVariableDCAV0ToPrimVertex/F"); // fTreeVariableDCAV0ToPrimVertex(0),
911 /*27*/ fTree->Branch("fTreeVariableV0CosineOfPointingAngle",&fTreeVariableV0CosineOfPointingAngle,"fTreeVariableV0CosineOfPointingAngle/F"); // fTreeVariableDCAV0ToPrimVertex(0),
913 //-----------MULTIPLICITY-INFO--------------------
914 /*28*/ fTree->Branch("fTreeVariableMultiplicity",&fTreeVariableMultiplicity,"fTreeVariableMultiplicity/I");
915 /*28*/ fTree->Branch("fTreeVariableMultiplicityMC",&fTreeVariableMultiplicityMC,"fTreeVariableMultiplicityMC/I");
916 /*17*/ fTree->Branch("fTreeVariableMultiplicityV0A",&fTreeVariableMultiplicityV0A,"fTreeVariableMultiplicityV0A/I");
917 /*17*/ fTree->Branch("fTreeVariableMultiplicityZNA",&fTreeVariableMultiplicityZNA,"fTreeVariableMultiplicityZNA/I");
918 /*17*/ fTree->Branch("fTreeVariableMultiplicityTRK",&fTreeVariableMultiplicityTRK,"fTreeVariableMultiplicityTRK/I");
919 /*17*/ fTree->Branch("fTreeVariableMultiplicitySPD",&fTreeVariableMultiplicitySPD,"fTreeVariableMultiplicitySPD/I");
920 //------------------------------------------------
921 /*29*/ fTree->Branch("fTreeVariableDistOverTotMom",&fTreeVariableDistOverTotMom,"fTreeVariableDistOverTotMom/F");
922 /*30*/ fTree->Branch("fTreeVariableNSigmasPosProton",&fTreeVariableNSigmasPosProton,"fTreeVariableNSigmasPosProton/F");
923 /*31*/ fTree->Branch("fTreeVariableNSigmasPosPion",&fTreeVariableNSigmasPosPion,"fTreeVariableNSigmasPosPion/F");
924 /*32*/ fTree->Branch("fTreeVariableNSigmasNegProton",&fTreeVariableNSigmasNegProton,"fTreeVariableNSigmasNegProton/F");
925 /*33*/ fTree->Branch("fTreeVariableNSigmasNegPion",&fTreeVariableNSigmasNegPion,"fTreeVariableNSigmasNegPion/F");
926 //------------------------------------------------
927 /*34*/ fTree->Branch("fTreeVariableNegEta",&fTreeVariableNegEta,"fTreeVariableNegEta/F");
928 /*35*/ fTree->Branch("fTreeVariablePosEta",&fTreeVariablePosEta,"fTreeVariablePosEta/F");
929 /*36*/ fTree->Branch("fTreeVariableV0CreationRadius",&fTreeVariableV0CreationRadius,"fTreeVariableV0CreationRadius/F");
931 if ( fkLightWeight == kFALSE ){ // these are debugging branches!
932 /*37*/ fTree->Branch("fTreeVariableIndexStatus",&fTreeVariableIndexStatus,"fTreeVariableIndexStatus/I");
933 /*38*/ fTree->Branch("fTreeVariableIndexStatusMother",&fTreeVariableIndexStatusMother,"fTreeVariableIndexStatusMother/I");
936 /*39*/ fTree->Branch("fTreeVariableRunNumber",&fTreeVariableRunNumber,"fTreeVariableRunNumber/I");
937 /*40*/ fTree->Branch("fTreeVariableEventNumber",&fTreeVariableEventNumber,"fTreeVariableEventNumber/l");
939 if ( fkLightWeight == kFALSE ){ // these are debugging branches!
940 /*34*/ fTree->Branch("fTreeVariableVertexZ",&fTreeVariableVertexZ,"fTreeVariableVertexZ/F");
943 if ( fkLightWeight == kFALSE ){ // these are debugging branches!
944 //-----------FOR CTAU DEBUGGING: Full Phase Space + Decay Position Info
945 fTree->Branch("fTreeVariableV0x",&fTreeVariableV0x,"fTreeVariableV0x/F");
946 fTree->Branch("fTreeVariableV0y",&fTreeVariableV0y,"fTreeVariableV0y/F");
947 fTree->Branch("fTreeVariableV0z",&fTreeVariableV0z,"fTreeVariableV0z/F");
949 fTree->Branch("fTreeVariableV0Px",&fTreeVariableV0Px,"fTreeVariableV0Px/F");
950 fTree->Branch("fTreeVariableV0Py",&fTreeVariableV0Py,"fTreeVariableV0Py/F");
951 fTree->Branch("fTreeVariableV0Pz",&fTreeVariableV0Pz,"fTreeVariableV0Pz/F");
953 //-----------FOR CTAU DEBUGGING: Full Phase Space + Decay Position Info, perfect info from MC
954 fTree->Branch("fTreeVariableMCV0x",&fTreeVariableMCV0x,"fTreeVariableMCV0x/F");
955 fTree->Branch("fTreeVariableMCV0y",&fTreeVariableMCV0y,"fTreeVariableMCV0y/F");
956 fTree->Branch("fTreeVariableMCV0z",&fTreeVariableMCV0z,"fTreeVariableMCV0z/F");
958 fTree->Branch("fTreeVariableMCV0Px",&fTreeVariableMCV0Px,"fTreeVariableMCV0Px/F");
959 fTree->Branch("fTreeVariableMCV0Py",&fTreeVariableMCV0Py,"fTreeVariableMCV0Py/F");
960 fTree->Branch("fTreeVariableMCV0Pz",&fTreeVariableMCV0Pz,"fTreeVariableMCV0Pz/F");
962 //-----------FOR CTAU DEBUGGING: Primary vertex info
963 fTree->Branch("fTreeVariablePVx",&fTreeVariablePVx,"fTreeVariablePVx/F");
964 fTree->Branch("fTreeVariablePVy",&fTreeVariablePVy,"fTreeVariablePVy/F");
965 fTree->Branch("fTreeVariablePVz",&fTreeVariablePVz,"fTreeVariablePVz/F");
967 fTree->Branch("fTreeVariableMCPVx",&fTreeVariableMCPVx,"fTreeVariableMCPVx/F");
968 fTree->Branch("fTreeVariableMCPVy",&fTreeVariableMCPVy,"fTreeVariableMCPVy/F");
969 fTree->Branch("fTreeVariableMCPVz",&fTreeVariableMCPVz,"fTreeVariableMCPVz/F");
972 fTree->Branch("fTreeVariableIsNonInjected",&fTreeVariableIsNonInjected,"fTreeVariableIsNonInjected/O"); //O for bOOlean...
974 if ( fkLightWeight == kFALSE ){ // these are debugging branches!
975 fTree->Branch("fTreeVariableNegTrackStatus",&fTreeVariableNegTrackStatus,"fTreeVariableNegTrackStatus/l");
976 fTree->Branch("fTreeVariablePosTrackStatus",&fTreeVariablePosTrackStatus,"fTreeVariablePosTrackStatus/l");
977 fTree->Branch("fTreeVariableNegPhysicalStatus",&fTreeVariableNegPhysicalStatus,"fTreeVariableNegPhysicalStatus/I");
978 fTree->Branch("fTreeVariablePosPhysicalStatus",&fTreeVariablePosPhysicalStatus,"fTreeVariablePosPhysicalStatus/I");
980 if( fkSpecialExecution == kTRUE ){
981 fTree->Branch("fTreeVariablePosPx",&fTreeVariablePosPx,"fTreeVariablePosPx/F");
982 fTree->Branch("fTreeVariablePosPy",&fTreeVariablePosPy,"fTreeVariablePosPy/F");
983 fTree->Branch("fTreeVariablePosPz",&fTreeVariablePosPz,"fTreeVariablePosPz/F");
984 fTree->Branch("fTreeVariableNegPx",&fTreeVariableNegPx,"fTreeVariableNegPx/F");
985 fTree->Branch("fTreeVariableNegPy",&fTreeVariableNegPy,"fTreeVariableNegPy/F");
986 fTree->Branch("fTreeVariableNegPz",&fTreeVariableNegPz,"fTreeVariableNegPz/F");
989 //------------------------------------------------
990 // Particle Identification Setup
991 //------------------------------------------------
993 AliAnalysisManager *man=AliAnalysisManager::GetAnalysisManager();
994 AliInputEventHandler* inputHandler = (AliInputEventHandler*) (man->GetInputEventHandler());
995 fPIDResponse = inputHandler->GetPIDResponse();
999 if(! fESDtrackCuts ){
1000 fESDtrackCuts = new AliESDtrackCuts();
1003 fUtils = new AliAnalysisUtils();
1006 //------------------------------------------------
1007 // V0 Multiplicity Histograms
1008 //------------------------------------------------
1010 // Create histograms
1012 fListHistV0 = new TList();
1013 fListHistV0->SetOwner(); // See http://root.cern.ch/root/html/TCollection.html#TCollection:SetOwner
1016 if(! fHistV0MultiplicityBeforeTrigSel) {
1017 fHistV0MultiplicityBeforeTrigSel = new TH1F("fHistV0MultiplicityBeforeTrigSel",
1018 "V0s per event (before Trig. Sel.);Nbr of V0s/Evt;Events",
1020 fListHistV0->Add(fHistV0MultiplicityBeforeTrigSel);
1023 if(! fHistV0MultiplicityForTrigEvt) {
1024 fHistV0MultiplicityForTrigEvt = new TH1F("fHistV0MultiplicityForTrigEvt",
1025 "V0s per event (for triggered evt);Nbr of V0s/Evt;Events",
1027 fListHistV0->Add(fHistV0MultiplicityForTrigEvt);
1030 if(! fHistV0MultiplicityForSelEvt) {
1031 fHistV0MultiplicityForSelEvt = new TH1F("fHistV0MultiplicityForSelEvt",
1032 "V0s per event;Nbr of V0s/Evt;Events",
1034 fListHistV0->Add(fHistV0MultiplicityForSelEvt);
1037 if(! fHistV0MultiplicityForSelEvtNoTPCOnly) {
1038 fHistV0MultiplicityForSelEvtNoTPCOnly = new TH1F("fHistV0MultiplicityForSelEvtNoTPCOnly",
1039 "V0s per event;Nbr of V0s/Evt;Events",
1041 fListHistV0->Add(fHistV0MultiplicityForSelEvtNoTPCOnly);
1043 if(! fHistV0MultiplicityForSelEvtNoTPCOnlyNoPileup) {
1044 fHistV0MultiplicityForSelEvtNoTPCOnlyNoPileup = new TH1F("fHistV0MultiplicityForSelEvtNoTPCOnlyNoPileup",
1045 "V0s per event;Nbr of V0s/Evt;Events",
1047 fListHistV0->Add(fHistV0MultiplicityForSelEvtNoTPCOnlyNoPileup);
1050 //------------------------------------------------
1051 // Track Multiplicity Histograms
1052 //------------------------------------------------
1054 if(! fHistMultiplicityBeforeTrigSel) {
1055 fHistMultiplicityBeforeTrigSel = new TH1F("fHistMultiplicityBeforeTrigSel",
1056 "Tracks per event;Nbr of Tracks;Events",
1058 fListHistV0->Add(fHistMultiplicityBeforeTrigSel);
1060 if(! fHistMultiplicityForTrigEvt) {
1061 fHistMultiplicityForTrigEvt = new TH1F("fHistMultiplicityForTrigEvt",
1062 "Tracks per event;Nbr of Tracks;Events",
1064 fListHistV0->Add(fHistMultiplicityForTrigEvt);
1066 if(! fHistMultiplicity) {
1067 fHistMultiplicity = new TH1F("fHistMultiplicity",
1068 "Tracks per event;Nbr of Tracks;Events",
1070 fListHistV0->Add(fHistMultiplicity);
1072 if(! fHistMultiplicityNoTPCOnly) {
1073 fHistMultiplicityNoTPCOnly = new TH1F("fHistMultiplicityNoTPCOnly",
1074 "Tracks per event;Nbr of Tracks;Events",
1076 fListHistV0->Add(fHistMultiplicityNoTPCOnly);
1078 if(! fHistMultiplicityNoTPCOnlyNoPileup) {
1079 fHistMultiplicityNoTPCOnlyNoPileup = new TH1F("fHistMultiplicityNoTPCOnlyNoPileup",
1080 "Tracks per event;Nbr of Tracks;Events",
1082 fListHistV0->Add(fHistMultiplicityNoTPCOnlyNoPileup);
1085 //V0A Centrality (if PbPb / pPb)
1086 if(! fHistMultiplicityV0ABeforeTrigSel) {
1087 fHistMultiplicityV0ABeforeTrigSel = new TH1F("fHistMultiplicityV0ABeforeTrigSel",
1088 "Centrality Distribution: V0A;V0A Centrality;Events",
1090 fListHistV0->Add(fHistMultiplicityV0ABeforeTrigSel);
1092 if(! fHistMultiplicityV0AForTrigEvt) {
1093 fHistMultiplicityV0AForTrigEvt = new TH1F("fHistMultiplicityV0AForTrigEvt",
1094 "Centrality Distribution: V0A;V0A Centrality;Events",
1096 fListHistV0->Add(fHistMultiplicityV0AForTrigEvt);
1098 if(! fHistMultiplicityV0A) {
1099 fHistMultiplicityV0A = new TH1F("fHistMultiplicityV0A",
1100 "Centrality Distribution: V0A;V0A Centrality;Events",
1102 fListHistV0->Add(fHistMultiplicityV0A);
1104 if(! fHistMultiplicityV0ANoTPCOnly) {
1105 fHistMultiplicityV0ANoTPCOnly = new TH1F("fHistMultiplicityV0ANoTPCOnly",
1106 "Centrality Distribution: V0A;V0A Centrality;Events",
1108 fListHistV0->Add(fHistMultiplicityV0ANoTPCOnly);
1110 if(! fHistMultiplicityV0ANoTPCOnlyNoPileup) {
1111 fHistMultiplicityV0ANoTPCOnlyNoPileup = new TH1F("fHistMultiplicityV0ANoTPCOnlyNoPileup",
1112 "Centrality Distribution: V0A;V0A Centrality;Events",
1114 fListHistV0->Add(fHistMultiplicityV0ANoTPCOnlyNoPileup);
1117 //ZNA Centrality (if PbPb / pPb)
1118 if(! fHistMultiplicityZNABeforeTrigSel) {
1119 fHistMultiplicityZNABeforeTrigSel = new TH1F("fHistMultiplicityZNABeforeTrigSel",
1120 "Centrality Distribution: ZNA;ZNA Centrality;Events",
1122 fListHistV0->Add(fHistMultiplicityZNABeforeTrigSel);
1124 if(! fHistMultiplicityZNAForTrigEvt) {
1125 fHistMultiplicityZNAForTrigEvt = new TH1F("fHistMultiplicityZNAForTrigEvt",
1126 "Centrality Distribution: ZNA;ZNA Centrality;Events",
1128 fListHistV0->Add(fHistMultiplicityZNAForTrigEvt);
1130 if(! fHistMultiplicityZNA) {
1131 fHistMultiplicityZNA = new TH1F("fHistMultiplicityZNA",
1132 "Centrality Distribution: ZNA;ZNA Centrality;Events",
1134 fListHistV0->Add(fHistMultiplicityZNA);
1136 if(! fHistMultiplicityZNANoTPCOnly) {
1137 fHistMultiplicityZNANoTPCOnly = new TH1F("fHistMultiplicityZNANoTPCOnly",
1138 "Centrality Distribution: ZNA;ZNA Centrality;Events",
1140 fListHistV0->Add(fHistMultiplicityZNANoTPCOnly);
1142 if(! fHistMultiplicityZNANoTPCOnlyNoPileup) {
1143 fHistMultiplicityZNANoTPCOnlyNoPileup = new TH1F("fHistMultiplicityZNANoTPCOnlyNoPileup",
1144 "Centrality Distribution: ZNA;ZNA Centrality;Events",
1146 fListHistV0->Add(fHistMultiplicityZNANoTPCOnlyNoPileup);
1149 //TRK Centrality (if PbPb / pPb)
1150 if(! fHistMultiplicityTRKBeforeTrigSel) {
1151 fHistMultiplicityTRKBeforeTrigSel = new TH1F("fHistMultiplicityTRKBeforeTrigSel",
1152 "Centrality Distribution: TRK;TRK Centrality;Events",
1154 fListHistV0->Add(fHistMultiplicityTRKBeforeTrigSel);
1156 if(! fHistMultiplicityTRKForTrigEvt) {
1157 fHistMultiplicityTRKForTrigEvt = new TH1F("fHistMultiplicityTRKForTrigEvt",
1158 "Centrality Distribution: TRK;TRK Centrality;Events",
1160 fListHistV0->Add(fHistMultiplicityTRKForTrigEvt);
1162 if(! fHistMultiplicityTRK) {
1163 fHistMultiplicityTRK = new TH1F("fHistMultiplicityTRK",
1164 "Centrality Distribution: TRK;TRK Centrality;Events",
1166 fListHistV0->Add(fHistMultiplicityTRK);
1168 if(! fHistMultiplicityTRKNoTPCOnly) {
1169 fHistMultiplicityTRKNoTPCOnly = new TH1F("fHistMultiplicityTRKNoTPCOnly",
1170 "Centrality Distribution: TRK;TRK Centrality;Events",
1172 fListHistV0->Add(fHistMultiplicityTRKNoTPCOnly);
1174 if(! fHistMultiplicityTRKNoTPCOnlyNoPileup) {
1175 fHistMultiplicityTRKNoTPCOnlyNoPileup = new TH1F("fHistMultiplicityTRKNoTPCOnlyNoPileup",
1176 "Centrality Distribution: TRK;TRK Centrality;Events",
1178 fListHistV0->Add(fHistMultiplicityTRKNoTPCOnlyNoPileup);
1181 //SPD Centrality (if PbPb / pPb)
1182 if(! fHistMultiplicitySPDBeforeTrigSel) {
1183 fHistMultiplicitySPDBeforeTrigSel = new TH1F("fHistMultiplicitySPDBeforeTrigSel",
1184 "Centrality Distribution: SPD;SPD Centrality;Events",
1186 fListHistV0->Add(fHistMultiplicitySPDBeforeTrigSel);
1188 if(! fHistMultiplicitySPDForTrigEvt) {
1189 fHistMultiplicitySPDForTrigEvt = new TH1F("fHistMultiplicitySPDForTrigEvt",
1190 "Centrality Distribution: SPD;SPD Centrality;Events",
1192 fListHistV0->Add(fHistMultiplicitySPDForTrigEvt);
1194 if(! fHistMultiplicitySPD) {
1195 fHistMultiplicitySPD = new TH1F("fHistMultiplicitySPD",
1196 "Centrality Distribution: SPD;SPD Centrality;Events",
1198 fListHistV0->Add(fHistMultiplicitySPD);
1200 if(! fHistMultiplicitySPDNoTPCOnly) {
1201 fHistMultiplicitySPDNoTPCOnly = new TH1F("fHistMultiplicitySPDNoTPCOnly",
1202 "Centrality Distribution: SPD;SPD Centrality;Events",
1204 fListHistV0->Add(fHistMultiplicitySPDNoTPCOnly);
1206 if(! fHistMultiplicitySPDNoTPCOnlyNoPileup) {
1207 fHistMultiplicitySPDNoTPCOnlyNoPileup = new TH1F("fHistMultiplicitySPDNoTPCOnlyNoPileup",
1208 "Centrality Distribution: SPD;SPD Centrality;Events",
1210 fListHistV0->Add(fHistMultiplicitySPDNoTPCOnlyNoPileup);
1216 //Raw Data for J/Psi paper Technique
1217 //TH2F *f2dHistMultiplicityVsTrueBeforeTrigSel; //! multiplicity distribution
1218 //TH2F *f2dHistMultiplicityVsTrueForTrigEvt; //! multiplicity distribution
1219 //TH2F *f2dHistMultiplicityVsTrue; //! multiplicity distribution
1220 //TH2F *f2dHistMultiplicityVsTrueNoTPCOnly; //! multiplicity distribution
1221 //TH2F *f2dHistMultiplicityVsTrueNoTPCOnlyNoPileup; //! multiplicity distribution
1223 if(! f2dHistMultiplicityVsTrueBeforeTrigSel) {
1224 f2dHistMultiplicityVsTrueBeforeTrigSel = new TH2F("f2dHistMultiplicityVsTrueBeforeTrigSel",
1225 "Tracks per event", 200, 0, 200, 200, 0, 200);
1226 fListHistV0->Add(f2dHistMultiplicityVsTrueBeforeTrigSel);
1228 if(! f2dHistMultiplicityVsTrueForTrigEvt) {
1229 f2dHistMultiplicityVsTrueForTrigEvt = new TH2F("f2dHistMultiplicityVsTrueForTrigEvt",
1230 "Tracks per event", 200, 0, 200, 200, 0, 200);
1231 fListHistV0->Add(f2dHistMultiplicityVsTrueForTrigEvt);
1233 if(! f2dHistMultiplicityVsTrue) {
1234 f2dHistMultiplicityVsTrue = new TH2F("f2dHistMultiplicityVsTrue",
1235 "Tracks per event", 200, 0, 200, 200, 0, 200);
1236 fListHistV0->Add(f2dHistMultiplicityVsTrue);
1238 if(! f2dHistMultiplicityVsTrueNoTPCOnly) {
1239 f2dHistMultiplicityVsTrueNoTPCOnly = new TH2F("f2dHistMultiplicityVsTrueNoTPCOnly",
1240 "Tracks per event", 200, 0, 200, 200, 0, 200);
1241 fListHistV0->Add(f2dHistMultiplicityVsTrueNoTPCOnly);
1243 if(! f2dHistMultiplicityVsTrueNoTPCOnlyNoPileup) {
1244 f2dHistMultiplicityVsTrueNoTPCOnlyNoPileup = new TH2F("f2dHistMultiplicityVsTrueNoTPCOnlyNoPileup",
1245 "Tracks per event", 200, 0, 200, 200, 0, 200);
1246 fListHistV0->Add(f2dHistMultiplicityVsTrueNoTPCOnlyNoPileup);
1250 //Raw Data for Vertex Z position estimator change
1251 //TH2F *f2dHistMultiplicityVsVertexZBeforeTrigSel; //! multiplicity distribution
1252 //TH2F *f2dHistMultiplicityVsVertexZForTrigEvt; //! multiplicity distribution
1253 //TH2F *f2dHistMultiplicityVsVertexZ; //! multiplicity distribution
1254 //TH2F *f2dHistMultiplicityVsVertexZNoTPCOnly; //! multiplicity distribution
1255 //TH2F *f2dHistMultiplicityVsVertexZNoTPCOnlyNoPileup; //! multiplicity distribution
1257 if(! f2dHistMultiplicityVsVertexZBeforeTrigSel) {
1258 f2dHistMultiplicityVsVertexZBeforeTrigSel = new TH2F("f2dHistMultiplicityVsVertexZBeforeTrigSel",
1259 "Tracks per event", 200, 0, 200,400, -20, 20);
1260 fListHistV0->Add(f2dHistMultiplicityVsVertexZBeforeTrigSel);
1262 if(! f2dHistMultiplicityVsVertexZForTrigEvt) {
1263 f2dHistMultiplicityVsVertexZForTrigEvt = new TH2F("f2dHistMultiplicityVsVertexZForTrigEvt",
1264 "Tracks per event", 200, 0, 200, 400, -20, 20);
1265 fListHistV0->Add(f2dHistMultiplicityVsVertexZForTrigEvt);
1267 if(! f2dHistMultiplicityVsVertexZ) {
1268 f2dHistMultiplicityVsVertexZ = new TH2F("f2dHistMultiplicityVsVertexZ",
1269 "Tracks per event", 200, 0, 200, 400, -20, 20);
1270 fListHistV0->Add(f2dHistMultiplicityVsVertexZ);
1272 if(! f2dHistMultiplicityVsVertexZNoTPCOnly) {
1273 f2dHistMultiplicityVsVertexZNoTPCOnly = new TH2F("f2dHistMultiplicityVsVertexZNoTPCOnly",
1274 "Tracks per event", 200, 0, 200, 400, -20, 20);
1275 fListHistV0->Add(f2dHistMultiplicityVsVertexZNoTPCOnly);
1277 if(! f2dHistMultiplicityVsVertexZNoTPCOnlyNoPileup) {
1278 f2dHistMultiplicityVsVertexZNoTPCOnlyNoPileup = new TH2F("f2dHistMultiplicityVsVertexZNoTPCOnlyNoPileup",
1279 "Tracks per event", 200, 0, 200, 400, -20, 20);
1280 fListHistV0->Add(f2dHistMultiplicityVsVertexZNoTPCOnlyNoPileup);
1283 //Generated PVz test
1285 // TH1F *fHistGenVertexZBeforeTrigSel; //! multiplicity distribution
1286 // TH1F *fHistGenVertexZForTrigEvt; //! multiplicity distribution
1287 // TH1F *fHistGenVertexZ; //! multiplicity distribution
1288 // TH1F *fHistGenVertexZNoTPCOnly; //! multiplicity distribution
1289 // TH1F *fHistGenVertexZNoTPCOnlyNoPileup; //! multiplicity distribution
1291 if(! fHistGenVertexZBeforeTrigSel) {
1292 fHistGenVertexZBeforeTrigSel = new TH1F("fHistGenVertexZBeforeTrigSel",
1293 "PV z position;Nbr of Evts;z",
1295 fListHistV0->Add(fHistGenVertexZBeforeTrigSel);
1297 if(! fHistGenVertexZForTrigEvt) {
1298 fHistGenVertexZForTrigEvt = new TH1F("fHistGenVertexZForTrigEvt",
1299 "PV z position;Nbr of Evts;z",
1301 fListHistV0->Add(fHistGenVertexZForTrigEvt);
1303 if(! fHistGenVertexZ) {
1304 fHistGenVertexZ = new TH1F("fHistGenVertexZ",
1305 "PV z position;Nbr of Evts;z",
1307 fListHistV0->Add(fHistGenVertexZ);
1309 if(! fHistGenVertexZNoTPCOnly) {
1310 fHistGenVertexZNoTPCOnly = new TH1F("fHistGenVertexZNoTPCOnly",
1311 "PV z position;Nbr of Evts;z",
1313 fListHistV0->Add(fHistGenVertexZNoTPCOnly);
1315 if(! fHistGenVertexZNoTPCOnlyNoPileup) {
1316 fHistGenVertexZNoTPCOnlyNoPileup = new TH1F("fHistGenVertexZNoTPCOnlyNoPileup",
1317 "PV z position;Nbr of Evts;z",
1319 fListHistV0->Add(fHistGenVertexZNoTPCOnlyNoPileup);
1323 //------------------------------------------------
1324 // Generated Particle Histograms
1325 //------------------------------------------------
1327 Int_t lCustomNBins = 200;
1328 Double_t lCustomPtUpperLimit = 20;
1329 Int_t lCustomNBinsMultiplicity = 100;
1331 //----------------------------------
1332 // Raw Generated (Pre-physics-selection)
1333 //----------------------------------
1335 //--- 3D Histo (Pt, Y, Multiplicity), V0M Version (default)
1337 if(! f3dHistPrimRawPtVsYVsMultLambda) {
1338 f3dHistPrimRawPtVsYVsMultLambda = new TH3F( "f3dHistPrimRawPtVsYVsMultLambda", "Pt_{lambda} Vs Y_{#Lambda} Vs Multiplicity; Pt_{lambda} (GeV/c); Y_{#Lambda} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1339 fListHistV0->Add(f3dHistPrimRawPtVsYVsMultLambda);
1341 if(! f3dHistPrimRawPtVsYVsMultAntiLambda) {
1342 f3dHistPrimRawPtVsYVsMultAntiLambda = new TH3F( "f3dHistPrimRawPtVsYVsMultAntiLambda", "Pt_{antilambda} Vs Y_{#Lambda} Vs Multiplicity; Pt_{antilambda} (GeV/c); Y_{#Lambda} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1343 fListHistV0->Add(f3dHistPrimRawPtVsYVsMultAntiLambda);
1345 if(! f3dHistPrimRawPtVsYVsMultK0Short) {
1346 f3dHistPrimRawPtVsYVsMultK0Short = new TH3F( "f3dHistPrimRawPtVsYVsMultK0Short", "Pt_{K0S} Vs Y_{K0S} Vs Multiplicity; Pt_{K0S} (GeV/c); Y_{K0S} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1347 fListHistV0->Add(f3dHistPrimRawPtVsYVsMultK0Short);
1350 if(! f3dHistPrimRawPtVsYCMSVsMultLambda) {
1351 f3dHistPrimRawPtVsYCMSVsMultLambda = new TH3F( "f3dHistPrimRawPtVsYCMSVsMultLambda", "Pt_{lambda} Vs Y_{#Lambda} Vs Multiplicity; Pt_{lambda} (GeV/c); Y_{#Lambda} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1352 fListHistV0->Add(f3dHistPrimRawPtVsYCMSVsMultLambda);
1354 if(! f3dHistPrimRawPtVsYCMSVsMultAntiLambda) {
1355 f3dHistPrimRawPtVsYCMSVsMultAntiLambda = new TH3F( "f3dHistPrimRawPtVsYCMSVsMultAntiLambda", "Pt_{antilambda} Vs Y_{#Lambda} Vs Multiplicity; Pt_{antilambda} (GeV/c); Y_{#Lambda} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1356 fListHistV0->Add(f3dHistPrimRawPtVsYCMSVsMultAntiLambda);
1358 if(! f3dHistPrimRawPtVsYCMSVsMultK0Short) {
1359 f3dHistPrimRawPtVsYCMSVsMultK0Short = new TH3F( "f3dHistPrimRawPtVsYCMSVsMultK0Short", "Pt_{K0S} Vs Y_{K0S} Vs Multiplicity; Pt_{K0S} (GeV/c); Y_{K0S} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1360 fListHistV0->Add(f3dHistPrimRawPtVsYCMSVsMultK0Short);
1363 //--- 3D Histo (Pt, Y, Multiplicity), V0A Version
1365 if(! f3dHistPrimRawPtVsYVsMultV0ALambda) {
1366 f3dHistPrimRawPtVsYVsMultV0ALambda = new TH3F( "f3dHistPrimRawPtVsYVsMultV0ALambda", "Pt_{lambda} Vs Y_{#Lambda} Vs Multiplicity; Pt_{lambda} (GeV/c); Y_{#Lambda} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1367 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimRawPtVsYVsMultV0ALambda);
1369 if(! f3dHistPrimRawPtVsYVsMultV0AAntiLambda) {
1370 f3dHistPrimRawPtVsYVsMultV0AAntiLambda = new TH3F( "f3dHistPrimRawPtVsYVsMultV0AAntiLambda", "Pt_{antilambda} Vs Y_{#Lambda} Vs Multiplicity; Pt_{antilambda} (GeV/c); Y_{#Lambda} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1371 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimRawPtVsYVsMultV0AAntiLambda);
1373 if(! f3dHistPrimRawPtVsYVsMultV0AK0Short) {
1374 f3dHistPrimRawPtVsYVsMultV0AK0Short = new TH3F( "f3dHistPrimRawPtVsYVsMultV0AK0Short", "Pt_{K0S} Vs Y_{K0S} Vs Multiplicity; Pt_{K0S} (GeV/c); Y_{K0S} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1375 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimRawPtVsYVsMultV0AK0Short);
1378 if(! f3dHistPrimRawPtVsYCMSVsMultV0ALambda) {
1379 f3dHistPrimRawPtVsYCMSVsMultV0ALambda = new TH3F( "f3dHistPrimRawPtVsYCMSVsMultV0ALambda", "Pt_{lambda} Vs Y_{#Lambda} Vs Multiplicity; Pt_{lambda} (GeV/c); Y_{#Lambda} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1380 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimRawPtVsYCMSVsMultV0ALambda);
1382 if(! f3dHistPrimRawPtVsYCMSVsMultV0AAntiLambda) {
1383 f3dHistPrimRawPtVsYCMSVsMultV0AAntiLambda = new TH3F( "f3dHistPrimRawPtVsYCMSVsMultV0AAntiLambda", "Pt_{antilambda} Vs Y_{#Lambda} Vs Multiplicity; Pt_{antilambda} (GeV/c); Y_{#Lambda} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1384 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimRawPtVsYCMSVsMultV0AAntiLambda);
1386 if(! f3dHistPrimRawPtVsYCMSVsMultV0AK0Short) {
1387 f3dHistPrimRawPtVsYCMSVsMultV0AK0Short = new TH3F( "f3dHistPrimRawPtVsYCMSVsMultV0AK0Short", "Pt_{K0S} Vs Y_{K0S} Vs Multiplicity; Pt_{K0S} (GeV/c); Y_{K0S} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1388 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimRawPtVsYCMSVsMultV0AK0Short);
1391 //Cross-check at Raw Level
1392 if(! f3dHistPrimRawPtVsYCMSVsMultV0AKPlus) {
1393 f3dHistPrimRawPtVsYCMSVsMultV0AKPlus = new TH3F( "f3dHistPrimRawPtVsYCMSVsMultV0AKPlus", "Pt_{K+} Vs Y_{K+} Vs Multiplicity; Pt_{K+} (GeV/c); Y_{K+} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1394 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimRawPtVsYCMSVsMultV0AKPlus);
1396 if(! f3dHistPrimRawPtVsYCMSVsMultV0AKMinus) {
1397 f3dHistPrimRawPtVsYCMSVsMultV0AKMinus = new TH3F( "f3dHistPrimRawPtVsYCMSVsMultV0AKMinus", "Pt_{K-} Vs Y_{K-} Vs Multiplicity; Pt_{K-} (GeV/c); Y_{K-} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1398 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimRawPtVsYCMSVsMultV0AKMinus);
1401 //--- 3D Histo (Pt, Y, Multiplicity), ZNA Version
1403 if(! f3dHistPrimRawPtVsYVsMultZNALambda) {
1404 f3dHistPrimRawPtVsYVsMultZNALambda = new TH3F( "f3dHistPrimRawPtVsYVsMultZNALambda", "Pt_{lambda} Vs Y_{#Lambda} Vs Multiplicity; Pt_{lambda} (GeV/c); Y_{#Lambda} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1405 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimRawPtVsYVsMultZNALambda);
1407 if(! f3dHistPrimRawPtVsYVsMultZNAAntiLambda) {
1408 f3dHistPrimRawPtVsYVsMultZNAAntiLambda = new TH3F( "f3dHistPrimRawPtVsYVsMultZNAAntiLambda", "Pt_{antilambda} Vs Y_{#Lambda} Vs Multiplicity; Pt_{antilambda} (GeV/c); Y_{#Lambda} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1409 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimRawPtVsYVsMultZNAAntiLambda);
1411 if(! f3dHistPrimRawPtVsYVsMultZNAK0Short) {
1412 f3dHistPrimRawPtVsYVsMultZNAK0Short = new TH3F( "f3dHistPrimRawPtVsYVsMultZNAK0Short", "Pt_{K0S} Vs Y_{K0S} Vs Multiplicity; Pt_{K0S} (GeV/c); Y_{K0S} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1413 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimRawPtVsYVsMultZNAK0Short);
1416 if(! f3dHistPrimRawPtVsYCMSVsMultZNALambda) {
1417 f3dHistPrimRawPtVsYCMSVsMultZNALambda = new TH3F( "f3dHistPrimRawPtVsYCMSVsMultZNALambda", "Pt_{lambda} Vs Y_{#Lambda} Vs Multiplicity; Pt_{lambda} (GeV/c); Y_{#Lambda} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1418 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimRawPtVsYCMSVsMultZNALambda);
1420 if(! f3dHistPrimRawPtVsYCMSVsMultZNAAntiLambda) {
1421 f3dHistPrimRawPtVsYCMSVsMultZNAAntiLambda = new TH3F( "f3dHistPrimRawPtVsYCMSVsMultZNAAntiLambda", "Pt_{antilambda} Vs Y_{#Lambda} Vs Multiplicity; Pt_{antilambda} (GeV/c); Y_{#Lambda} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1422 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimRawPtVsYCMSVsMultZNAAntiLambda);
1424 if(! f3dHistPrimRawPtVsYCMSVsMultZNAK0Short) {
1425 f3dHistPrimRawPtVsYCMSVsMultZNAK0Short = new TH3F( "f3dHistPrimRawPtVsYCMSVsMultZNAK0Short", "Pt_{K0S} Vs Y_{K0S} Vs Multiplicity; Pt_{K0S} (GeV/c); Y_{K0S} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1426 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimRawPtVsYCMSVsMultZNAK0Short);
1429 //--- 3D Histo (Pt, Y, Multiplicity), TRK Version
1431 if(! f3dHistPrimRawPtVsYVsMultTRKLambda) {
1432 f3dHistPrimRawPtVsYVsMultTRKLambda = new TH3F( "f3dHistPrimRawPtVsYVsMultTRKLambda", "Pt_{lambda} Vs Y_{#Lambda} Vs Multiplicity; Pt_{lambda} (GeV/c); Y_{#Lambda} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1433 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimRawPtVsYVsMultTRKLambda);
1435 if(! f3dHistPrimRawPtVsYVsMultTRKAntiLambda) {
1436 f3dHistPrimRawPtVsYVsMultTRKAntiLambda = new TH3F( "f3dHistPrimRawPtVsYVsMultTRKAntiLambda", "Pt_{antilambda} Vs Y_{#Lambda} Vs Multiplicity; Pt_{antilambda} (GeV/c); Y_{#Lambda} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1437 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimRawPtVsYVsMultTRKAntiLambda);
1439 if(! f3dHistPrimRawPtVsYVsMultTRKK0Short) {
1440 f3dHistPrimRawPtVsYVsMultTRKK0Short = new TH3F( "f3dHistPrimRawPtVsYVsMultTRKK0Short", "Pt_{K0S} Vs Y_{K0S} Vs Multiplicity; Pt_{K0S} (GeV/c); Y_{K0S} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1441 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimRawPtVsYVsMultTRKK0Short);
1444 if(! f3dHistPrimRawPtVsYCMSVsMultTRKLambda) {
1445 f3dHistPrimRawPtVsYCMSVsMultTRKLambda = new TH3F( "f3dHistPrimRawPtVsYCMSVsMultTRKLambda", "Pt_{lambda} Vs Y_{#Lambda} Vs Multiplicity; Pt_{lambda} (GeV/c); Y_{#Lambda} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1446 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimRawPtVsYCMSVsMultTRKLambda);
1448 if(! f3dHistPrimRawPtVsYCMSVsMultTRKAntiLambda) {
1449 f3dHistPrimRawPtVsYCMSVsMultTRKAntiLambda = new TH3F( "f3dHistPrimRawPtVsYCMSVsMultTRKAntiLambda", "Pt_{antilambda} Vs Y_{#Lambda} Vs Multiplicity; Pt_{antilambda} (GeV/c); Y_{#Lambda} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1450 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimRawPtVsYCMSVsMultTRKAntiLambda);
1452 if(! f3dHistPrimRawPtVsYCMSVsMultTRKK0Short) {
1453 f3dHistPrimRawPtVsYCMSVsMultTRKK0Short = new TH3F( "f3dHistPrimRawPtVsYCMSVsMultTRKK0Short", "Pt_{K0S} Vs Y_{K0S} Vs Multiplicity; Pt_{K0S} (GeV/c); Y_{K0S} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1454 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimRawPtVsYCMSVsMultTRKK0Short);
1457 //--- 3D Histo (Pt, Y, Multiplicity), SPD Version
1459 if(! f3dHistPrimRawPtVsYVsMultSPDLambda) {
1460 f3dHistPrimRawPtVsYVsMultSPDLambda = new TH3F( "f3dHistPrimRawPtVsYVsMultSPDLambda", "Pt_{lambda} Vs Y_{#Lambda} Vs Multiplicity; Pt_{lambda} (GeV/c); Y_{#Lambda} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1461 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimRawPtVsYVsMultSPDLambda);
1463 if(! f3dHistPrimRawPtVsYVsMultSPDAntiLambda) {
1464 f3dHistPrimRawPtVsYVsMultSPDAntiLambda = new TH3F( "f3dHistPrimRawPtVsYVsMultSPDAntiLambda", "Pt_{antilambda} Vs Y_{#Lambda} Vs Multiplicity; Pt_{antilambda} (GeV/c); Y_{#Lambda} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1465 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimRawPtVsYVsMultSPDAntiLambda);
1467 if(! f3dHistPrimRawPtVsYVsMultSPDK0Short) {
1468 f3dHistPrimRawPtVsYVsMultSPDK0Short = new TH3F( "f3dHistPrimRawPtVsYVsMultSPDK0Short", "Pt_{K0S} Vs Y_{K0S} Vs Multiplicity; Pt_{K0S} (GeV/c); Y_{K0S} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1469 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimRawPtVsYVsMultSPDK0Short);
1472 if(! f3dHistPrimRawPtVsYCMSVsMultSPDLambda) {
1473 f3dHistPrimRawPtVsYCMSVsMultSPDLambda = new TH3F( "f3dHistPrimRawPtVsYCMSVsMultSPDLambda", "Pt_{lambda} Vs Y_{#Lambda} Vs Multiplicity; Pt_{lambda} (GeV/c); Y_{#Lambda} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1474 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimRawPtVsYCMSVsMultSPDLambda);
1476 if(! f3dHistPrimRawPtVsYCMSVsMultSPDAntiLambda) {
1477 f3dHistPrimRawPtVsYCMSVsMultSPDAntiLambda = new TH3F( "f3dHistPrimRawPtVsYCMSVsMultSPDAntiLambda", "Pt_{antilambda} Vs Y_{#Lambda} Vs Multiplicity; Pt_{antilambda} (GeV/c); Y_{#Lambda} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1478 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimRawPtVsYCMSVsMultSPDAntiLambda);
1480 if(! f3dHistPrimRawPtVsYCMSVsMultSPDK0Short) {
1481 f3dHistPrimRawPtVsYCMSVsMultSPDK0Short = new TH3F( "f3dHistPrimRawPtVsYCMSVsMultSPDK0Short", "Pt_{K0S} Vs Y_{K0S} Vs Multiplicity; Pt_{K0S} (GeV/c); Y_{K0S} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1482 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimRawPtVsYCMSVsMultSPDK0Short);
1487 //---> Non-injected particles
1489 if(! f3dHistPrimRawPtVsYVsMultNonInjLambda) {
1490 f3dHistPrimRawPtVsYVsMultNonInjLambda = new TH3F( "f3dHistPrimRawPtVsYVsMultNonInjLambda", "Pt_{lambda} Vs Y_{#Lambda} Vs Multiplicity; Pt_{lambda} (GeV/c); Y_{#Lambda} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1491 fListHistV0->Add(f3dHistPrimRawPtVsYVsMultNonInjLambda);
1493 if(! f3dHistPrimRawPtVsYVsMultNonInjAntiLambda) {
1494 f3dHistPrimRawPtVsYVsMultNonInjAntiLambda = new TH3F( "f3dHistPrimRawPtVsYVsMultNonInjAntiLambda", "Pt_{antilambda} Vs Y_{#Lambda} Vs Multiplicity; Pt_{antilambda} (GeV/c); Y_{#Lambda} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1495 fListHistV0->Add(f3dHistPrimRawPtVsYVsMultNonInjAntiLambda);
1497 if(! f3dHistPrimRawPtVsYVsMultNonInjK0Short) {
1498 f3dHistPrimRawPtVsYVsMultNonInjK0Short = new TH3F( "f3dHistPrimRawPtVsYVsMultNonInjK0Short", "Pt_{K0S} Vs Y_{K0S} Vs Multiplicity; Pt_{K0S} (GeV/c); Y_{K0S} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1499 fListHistV0->Add(f3dHistPrimRawPtVsYVsMultNonInjK0Short);
1502 //--- 3D Histo (Pt, Y, MultiplicityMC)
1504 if(! f3dHistPrimRawPtVsYVsMultMCLambda) {
1505 f3dHistPrimRawPtVsYVsMultMCLambda = new TH3F( "f3dHistPrimRawPtVsYVsMultMCLambda", "Pt_{lambda} Vs Y_{#Lambda} Vs Multiplicity; Pt_{lambda} (GeV/c); Y_{#Lambda} ; MultMC", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1506 fListHistV0->Add(f3dHistPrimRawPtVsYVsMultMCLambda);
1508 if(! f3dHistPrimRawPtVsYVsMultMCAntiLambda) {
1509 f3dHistPrimRawPtVsYVsMultMCAntiLambda = new TH3F( "f3dHistPrimRawPtVsYVsMultMCAntiLambda", "Pt_{antilambda} Vs Y_{#Lambda} Vs Multiplicity; Pt_{antilambda} (GeV/c); Y_{#Lambda} ; MultMC", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1510 fListHistV0->Add(f3dHistPrimRawPtVsYVsMultMCAntiLambda);
1512 if(! f3dHistPrimRawPtVsYVsMultMCK0Short) {
1513 f3dHistPrimRawPtVsYVsMultMCK0Short = new TH3F( "f3dHistPrimRawPtVsYVsMultMCK0Short", "Pt_{K0S} Vs Y_{K0S} Vs Multiplicity; Pt_{K0S} (GeV/c); Y_{K0S} ; MultMC", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1514 fListHistV0->Add(f3dHistPrimRawPtVsYVsMultMCK0Short);
1517 //--- 3D Histo (Pt, Y, VertexZ)
1519 if(! f3dHistPrimRawPtVsYVsVertexZLambda) {
1520 f3dHistPrimRawPtVsYVsVertexZLambda = new TH3F( "f3dHistPrimRawPtVsYVsVertexZLambda", "Pt_{lambda} Vs Y_{#Lambda} Vs VertexZiplicity; Pt_{lambda} (GeV/c); Y_{#Lambda} ; VertexZ", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,40,-10,10);
1521 fListHistV0->Add(f3dHistPrimRawPtVsYVsVertexZLambda);
1523 if(! f3dHistPrimRawPtVsYVsVertexZAntiLambda) {
1524 f3dHistPrimRawPtVsYVsVertexZAntiLambda = new TH3F( "f3dHistPrimRawPtVsYVsVertexZAntiLambda", "Pt_{antilambda} Vs Y_{#Lambda} Vs VertexZiplicity; Pt_{antilambda} (GeV/c); Y_{#Lambda} ; VertexZ", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,40,-10,10);
1525 fListHistV0->Add(f3dHistPrimRawPtVsYVsVertexZAntiLambda);
1527 if(! f3dHistPrimRawPtVsYVsVertexZK0Short) {
1528 f3dHistPrimRawPtVsYVsVertexZK0Short = new TH3F( "f3dHistPrimRawPtVsYVsVertexZK0Short", "Pt_{K0S} Vs Y_{K0S} Vs VertexZiplicity; Pt_{K0S} (GeV/c); Y_{K0S} ; VertexZ", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,40,-10,10);
1529 fListHistV0->Add(f3dHistPrimRawPtVsYVsVertexZK0Short);
1532 //--- 3D Histo (Pt, Y, Multiplicity), close to PV criterion
1534 if(! f3dHistPrimCloseToPVPtVsYVsMultLambda) {
1535 f3dHistPrimCloseToPVPtVsYVsMultLambda = new TH3F( "f3dHistPrimCloseToPVPtVsYVsMultLambda", "Pt_{lambda} Vs Y_{#Lambda} Vs Multiplicity; Pt_{lambda} (GeV/c); Y_{#Lambda} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1536 fListHistV0->Add(f3dHistPrimCloseToPVPtVsYVsMultLambda);
1538 if(! f3dHistPrimCloseToPVPtVsYVsMultAntiLambda) {
1539 f3dHistPrimCloseToPVPtVsYVsMultAntiLambda = new TH3F( "f3dHistPrimCloseToPVPtVsYVsMultAntiLambda", "Pt_{antilambda} Vs Y_{#Lambda} Vs Multiplicity; Pt_{antilambda} (GeV/c); Y_{#Lambda} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1540 fListHistV0->Add(f3dHistPrimCloseToPVPtVsYVsMultAntiLambda);
1542 if(! f3dHistPrimCloseToPVPtVsYVsMultK0Short) {
1543 f3dHistPrimCloseToPVPtVsYVsMultK0Short = new TH3F( "f3dHistPrimCloseToPVPtVsYVsMultK0Short", "Pt_{K0S} Vs Y_{K0S} Vs Multiplicity; Pt_{K0S} (GeV/c); Y_{K0S} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1544 fListHistV0->Add(f3dHistPrimCloseToPVPtVsYVsMultK0Short);
1548 //--- 3D Histo (Pt, Y, Proper Decay Length)
1550 if(! f3dHistPrimRawPtVsYVsDecayLengthLambda) {
1551 f3dHistPrimRawPtVsYVsDecayLengthLambda = new TH3F( "f3dHistPrimRawPtVsYVsDecayLengthLambda", "Pt_{lambda} Vs Y_{#Lambda} Vs DecayLength; Pt_{lambda} (GeV/c); Y_{#Lambda} ; DecayLength", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,200,0,50);
1552 fListHistV0->Add(f3dHistPrimRawPtVsYVsDecayLengthLambda);
1554 if(! f3dHistPrimRawPtVsYVsDecayLengthAntiLambda) {
1555 f3dHistPrimRawPtVsYVsDecayLengthAntiLambda = new TH3F( "f3dHistPrimRawPtVsYVsDecayLengthAntiLambda", "Pt_{antilambda} Vs Y_{#Lambda} Vs DecayLength; Pt_{antilambda} (GeV/c); Y_{#Lambda} ; DecayLength", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,200,0,50);
1556 fListHistV0->Add(f3dHistPrimRawPtVsYVsDecayLengthAntiLambda);
1558 if(! f3dHistPrimRawPtVsYVsDecayLengthK0Short) {
1559 f3dHistPrimRawPtVsYVsDecayLengthK0Short = new TH3F( "f3dHistPrimRawPtVsYVsDecayLengthK0Short", "Pt_{K0S} Vs Y_{K0S} Vs DecayLength; Pt_{K0S} (GeV/c); Y_{K0S} ; DecayLength", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,200,0,50);
1560 fListHistV0->Add(f3dHistPrimRawPtVsYVsDecayLengthK0Short);
1563 //--------------------------------------------------------------------------------------
1565 //--------------------------------------------------------------------------------------
1566 //--- 3D Histo (Pt, Y, Multiplicity) for generated XiMinus/Plus, all generated
1568 if(! f3dHistGenPtVsYVsMultXiMinus) {
1569 f3dHistGenPtVsYVsMultXiMinus = new TH3F( "f3dHistGenPtVsYVsMultXiMinus", "Pt_{#Xi} Vs Y_{#Xi} Vs Multiplicity; Pt_{cascade} (GeV/c); Y_{#Xi} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1570 fListHistV0->Add(f3dHistGenPtVsYVsMultXiMinus);
1572 if(! f3dHistGenPtVsYVsMultXiPlus) {
1573 f3dHistGenPtVsYVsMultXiPlus = new TH3F( "f3dHistGenPtVsYVsMultXiPlus", "Pt_{#Xi} Vs Y_{#Xi} Vs Multiplicity; Pt_{cascade} (GeV/c); Y_{#Xi} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1574 fListHistV0->Add(f3dHistGenPtVsYVsMultXiPlus);
1577 if(! f3dHistGenPtVsYCMSVsMultXiMinus) {
1578 f3dHistGenPtVsYCMSVsMultXiMinus = new TH3F( "f3dHistGenPtVsYCMSVsMultXiMinus", "Pt_{#Xi} Vs Y_{#Xi} Vs Multiplicity; Pt_{cascade} (GeV/c); Y_{#Xi} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1579 fListHistV0->Add(f3dHistGenPtVsYCMSVsMultXiMinus);
1581 if(! f3dHistGenPtVsYCMSVsMultXiPlus) {
1582 f3dHistGenPtVsYCMSVsMultXiPlus = new TH3F( "f3dHistGenPtVsYCMSVsMultXiPlus", "Pt_{#Xi} Vs Y_{#Xi} Vs Multiplicity; Pt_{cascade} (GeV/c); Y_{#Xi} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1583 fListHistV0->Add(f3dHistGenPtVsYCMSVsMultXiPlus);
1586 //--------------------------------------------------------------------------------------
1587 //--- 3D Histo (Pt, Y, Multiplicity) for generated XiMinus/Plus, at selected analysis evts
1589 if(! f3dHistGenSelectedPtVsYVsMultXiMinus) {
1590 f3dHistGenSelectedPtVsYVsMultXiMinus = new TH3F( "f3dHistGenSelectedPtVsYVsMultXiMinus", "Pt_{#Xi} Vs Y_{#Xi} Vs Multiplicity; Pt_{cascade} (GeV/c); Y_{#Xi} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1591 fListHistV0->Add(f3dHistGenSelectedPtVsYVsMultXiMinus);
1593 if(! f3dHistGenSelectedPtVsYVsMultXiPlus) {
1594 f3dHistGenSelectedPtVsYVsMultXiPlus = new TH3F( "f3dHistGenSelectedPtVsYVsMultXiPlus", "Pt_{#Xi} Vs Y_{#Xi} Vs Multiplicity; Pt_{cascade} (GeV/c); Y_{#Xi} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1595 fListHistV0->Add(f3dHistGenSelectedPtVsYVsMultXiPlus);
1598 //CASCADES, analysis level, y CMS
1599 //--------------------------------------------------------------------------------------
1600 //--- 3D Histo (Pt, Y, Multiplicity) for generated XiMinus/Plus, at selected analysis evts
1602 if(! f3dHistGenSelectedPtVsYCMSVsMultXiMinus) {
1603 f3dHistGenSelectedPtVsYCMSVsMultXiMinus = new TH3F( "f3dHistGenSelectedPtVsYCMSVsMultXiMinus", "Pt_{#Xi} Vs Y_{#Xi} Vs Multiplicity; Pt_{cascade} (GeV/c); Y_{#Xi} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1604 fListHistV0->Add(f3dHistGenSelectedPtVsYCMSVsMultXiMinus);
1606 if(! f3dHistGenSelectedPtVsYCMSVsMultXiPlus) {
1607 f3dHistGenSelectedPtVsYCMSVsMultXiPlus = new TH3F( "f3dHistGenSelectedPtVsYCMSVsMultXiPlus", "Pt_{#Xi} Vs Y_{#Xi} Vs Multiplicity; Pt_{cascade} (GeV/c); Y_{#Xi} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1608 fListHistV0->Add(f3dHistGenSelectedPtVsYCMSVsMultXiPlus);
1611 //--------------------------------------------------------------------------------------
1613 //--------------------------------------------------------------------------------------
1614 //--- 3D Histo (Pt, Y, Multiplicity) for generated XiMinus/Plus, all generated
1616 if(! f3dHistGenPtVsYVsMultV0AXiMinus) {
1617 f3dHistGenPtVsYVsMultV0AXiMinus = new TH3F( "f3dHistGenPtVsYVsMultV0AXiMinus", "Pt_{#Xi} Vs Y_{#Xi} Vs Multiplicity; Pt_{cascade} (GeV/c); Y_{#Xi} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1618 if( fkIsNuclear ) fListHistV0->Add(f3dHistGenPtVsYVsMultV0AXiMinus);
1620 if(! f3dHistGenPtVsYVsMultV0AXiPlus) {
1621 f3dHistGenPtVsYVsMultV0AXiPlus = new TH3F( "f3dHistGenPtVsYVsMultV0AXiPlus", "Pt_{#Xi} Vs Y_{#Xi} Vs Multiplicity; Pt_{cascade} (GeV/c); Y_{#Xi} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1622 if( fkIsNuclear ) fListHistV0->Add(f3dHistGenPtVsYVsMultV0AXiPlus);
1625 if(! f3dHistGenPtVsYCMSVsMultV0AXiMinus) {
1626 f3dHistGenPtVsYCMSVsMultV0AXiMinus = new TH3F( "f3dHistGenPtVsYCMSVsMultV0AXiMinus", "Pt_{#Xi} Vs Y_{#Xi} Vs Multiplicity; Pt_{cascade} (GeV/c); Y_{#Xi} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1627 if( fkIsNuclear ) fListHistV0->Add(f3dHistGenPtVsYCMSVsMultV0AXiMinus);
1629 if(! f3dHistGenPtVsYCMSVsMultV0AXiPlus) {
1630 f3dHistGenPtVsYCMSVsMultV0AXiPlus = new TH3F( "f3dHistGenPtVsYCMSVsMultV0AXiPlus", "Pt_{#Xi} Vs Y_{#Xi} Vs Multiplicity; Pt_{cascade} (GeV/c); Y_{#Xi} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1631 if( fkIsNuclear ) fListHistV0->Add(f3dHistGenPtVsYCMSVsMultV0AXiPlus);
1634 //--------------------------------------------------------------------------------------
1635 //--- 3D Histo (Pt, Y, Multiplicity) for generated XiMinus/Plus, at selected analysis evts
1637 if(! f3dHistGenSelectedPtVsYVsMultV0AXiMinus) {
1638 f3dHistGenSelectedPtVsYVsMultV0AXiMinus = new TH3F( "f3dHistGenSelectedPtVsYVsMultV0AXiMinus", "Pt_{#Xi} Vs Y_{#Xi} Vs Multiplicity; Pt_{cascade} (GeV/c); Y_{#Xi} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1639 if( fkIsNuclear ) fListHistV0->Add(f3dHistGenSelectedPtVsYVsMultV0AXiMinus);
1641 if(! f3dHistGenSelectedPtVsYVsMultV0AXiPlus) {
1642 f3dHistGenSelectedPtVsYVsMultV0AXiPlus = new TH3F( "f3dHistGenSelectedPtVsYVsMultV0AXiPlus", "Pt_{#Xi} Vs Y_{#Xi} Vs Multiplicity; Pt_{cascade} (GeV/c); Y_{#Xi} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1643 if( fkIsNuclear ) fListHistV0->Add(f3dHistGenSelectedPtVsYVsMultV0AXiPlus);
1646 //CASCADES, analysis level, y CMS
1647 //--------------------------------------------------------------------------------------
1648 //--- 3D Histo (Pt, Y, Multiplicity) for generated XiMinus/Plus, at selected analysis evts
1650 if(! f3dHistGenSelectedPtVsYCMSVsMultV0AXiMinus) {
1651 f3dHistGenSelectedPtVsYCMSVsMultV0AXiMinus = new TH3F( "f3dHistGenSelectedPtVsYCMSVsMultV0AXiMinus", "Pt_{#Xi} Vs Y_{#Xi} Vs Multiplicity; Pt_{cascade} (GeV/c); Y_{#Xi} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1652 if( fkIsNuclear ) fListHistV0->Add(f3dHistGenSelectedPtVsYCMSVsMultV0AXiMinus);
1654 if(! f3dHistGenSelectedPtVsYCMSVsMultV0AXiPlus) {
1655 f3dHistGenSelectedPtVsYCMSVsMultV0AXiPlus = new TH3F( "f3dHistGenSelectedPtVsYCMSVsMultV0AXiPlus", "Pt_{#Xi} Vs Y_{#Xi} Vs Multiplicity; Pt_{cascade} (GeV/c); Y_{#Xi} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1656 if( fkIsNuclear ) fListHistV0->Add(f3dHistGenSelectedPtVsYCMSVsMultV0AXiPlus);
1659 //--------------------------------------------------------------------------------------
1661 //--------------------------------------------------------------------------------------
1662 //--- 3D Histo (Pt, Y, Multiplicity) for generated XiMinus/Plus, all generated
1664 if(! f3dHistGenPtVsYVsMultZNAXiMinus) {
1665 f3dHistGenPtVsYVsMultZNAXiMinus = new TH3F( "f3dHistGenPtVsYVsMultZNAXiMinus", "Pt_{#Xi} Vs Y_{#Xi} Vs Multiplicity; Pt_{cascade} (GeV/c); Y_{#Xi} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1666 if( fkIsNuclear ) fListHistV0->Add(f3dHistGenPtVsYVsMultZNAXiMinus);
1668 if(! f3dHistGenPtVsYVsMultZNAXiPlus) {
1669 f3dHistGenPtVsYVsMultZNAXiPlus = new TH3F( "f3dHistGenPtVsYVsMultZNAXiPlus", "Pt_{#Xi} Vs Y_{#Xi} Vs Multiplicity; Pt_{cascade} (GeV/c); Y_{#Xi} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1670 if( fkIsNuclear ) fListHistV0->Add(f3dHistGenPtVsYVsMultZNAXiPlus);
1673 if(! f3dHistGenPtVsYCMSVsMultZNAXiMinus) {
1674 f3dHistGenPtVsYCMSVsMultZNAXiMinus = new TH3F( "f3dHistGenPtVsYCMSVsMultZNAXiMinus", "Pt_{#Xi} Vs Y_{#Xi} Vs Multiplicity; Pt_{cascade} (GeV/c); Y_{#Xi} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1675 if( fkIsNuclear ) fListHistV0->Add(f3dHistGenPtVsYCMSVsMultZNAXiMinus);
1677 if(! f3dHistGenPtVsYCMSVsMultZNAXiPlus) {
1678 f3dHistGenPtVsYCMSVsMultZNAXiPlus = new TH3F( "f3dHistGenPtVsYCMSVsMultZNAXiPlus", "Pt_{#Xi} Vs Y_{#Xi} Vs Multiplicity; Pt_{cascade} (GeV/c); Y_{#Xi} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1679 if( fkIsNuclear ) fListHistV0->Add(f3dHistGenPtVsYCMSVsMultZNAXiPlus);
1682 //--------------------------------------------------------------------------------------
1683 //--- 3D Histo (Pt, Y, Multiplicity) for generated XiMinus/Plus, at selected analysis evts
1685 if(! f3dHistGenSelectedPtVsYVsMultZNAXiMinus) {
1686 f3dHistGenSelectedPtVsYVsMultZNAXiMinus = new TH3F( "f3dHistGenSelectedPtVsYVsMultZNAXiMinus", "Pt_{#Xi} Vs Y_{#Xi} Vs Multiplicity; Pt_{cascade} (GeV/c); Y_{#Xi} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1687 if( fkIsNuclear ) fListHistV0->Add(f3dHistGenSelectedPtVsYVsMultZNAXiMinus);
1689 if(! f3dHistGenSelectedPtVsYVsMultZNAXiPlus) {
1690 f3dHistGenSelectedPtVsYVsMultZNAXiPlus = new TH3F( "f3dHistGenSelectedPtVsYVsMultZNAXiPlus", "Pt_{#Xi} Vs Y_{#Xi} Vs Multiplicity; Pt_{cascade} (GeV/c); Y_{#Xi} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1691 if( fkIsNuclear ) fListHistV0->Add(f3dHistGenSelectedPtVsYVsMultZNAXiPlus);
1694 //CASCADES, analysis level, y CMS
1695 //--------------------------------------------------------------------------------------
1696 //--- 3D Histo (Pt, Y, Multiplicity) for generated XiMinus/Plus, at selected analysis evts
1698 if(! f3dHistGenSelectedPtVsYCMSVsMultZNAXiMinus) {
1699 f3dHistGenSelectedPtVsYCMSVsMultZNAXiMinus = new TH3F( "f3dHistGenSelectedPtVsYCMSVsMultZNAXiMinus", "Pt_{#Xi} Vs Y_{#Xi} Vs Multiplicity; Pt_{cascade} (GeV/c); Y_{#Xi} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1700 if( fkIsNuclear ) fListHistV0->Add(f3dHistGenSelectedPtVsYCMSVsMultZNAXiMinus);
1702 if(! f3dHistGenSelectedPtVsYCMSVsMultZNAXiPlus) {
1703 f3dHistGenSelectedPtVsYCMSVsMultZNAXiPlus = new TH3F( "f3dHistGenSelectedPtVsYCMSVsMultZNAXiPlus", "Pt_{#Xi} Vs Y_{#Xi} Vs Multiplicity; Pt_{cascade} (GeV/c); Y_{#Xi} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1704 if( fkIsNuclear ) fListHistV0->Add(f3dHistGenSelectedPtVsYCMSVsMultZNAXiPlus);
1707 //--------------------------------------------------------------------------------------
1709 //--------------------------------------------------------------------------------------
1710 //--- 3D Histo (Pt, Y, Multiplicity) for generated XiMinus/Plus, all generated
1712 if(! f3dHistGenPtVsYVsMultTRKXiMinus) {
1713 f3dHistGenPtVsYVsMultTRKXiMinus = new TH3F( "f3dHistGenPtVsYVsMultTRKXiMinus", "Pt_{#Xi} Vs Y_{#Xi} Vs Multiplicity; Pt_{cascade} (GeV/c); Y_{#Xi} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1714 if( fkIsNuclear ) fListHistV0->Add(f3dHistGenPtVsYVsMultTRKXiMinus);
1716 if(! f3dHistGenPtVsYVsMultTRKXiPlus) {
1717 f3dHistGenPtVsYVsMultTRKXiPlus = new TH3F( "f3dHistGenPtVsYVsMultTRKXiPlus", "Pt_{#Xi} Vs Y_{#Xi} Vs Multiplicity; Pt_{cascade} (GeV/c); Y_{#Xi} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1718 if( fkIsNuclear ) fListHistV0->Add(f3dHistGenPtVsYVsMultTRKXiPlus);
1721 if(! f3dHistGenPtVsYCMSVsMultTRKXiMinus) {
1722 f3dHistGenPtVsYCMSVsMultTRKXiMinus = new TH3F( "f3dHistGenPtVsYCMSVsMultTRKXiMinus", "Pt_{#Xi} Vs Y_{#Xi} Vs Multiplicity; Pt_{cascade} (GeV/c); Y_{#Xi} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1723 if( fkIsNuclear ) fListHistV0->Add(f3dHistGenPtVsYCMSVsMultTRKXiMinus);
1725 if(! f3dHistGenPtVsYCMSVsMultTRKXiPlus) {
1726 f3dHistGenPtVsYCMSVsMultTRKXiPlus = new TH3F( "f3dHistGenPtVsYCMSVsMultTRKXiPlus", "Pt_{#Xi} Vs Y_{#Xi} Vs Multiplicity; Pt_{cascade} (GeV/c); Y_{#Xi} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1727 if( fkIsNuclear ) fListHistV0->Add(f3dHistGenPtVsYCMSVsMultTRKXiPlus);
1730 //--------------------------------------------------------------------------------------
1731 //--- 3D Histo (Pt, Y, Multiplicity) for generated XiMinus/Plus, at selected analysis evts
1733 if(! f3dHistGenSelectedPtVsYVsMultTRKXiMinus) {
1734 f3dHistGenSelectedPtVsYVsMultTRKXiMinus = new TH3F( "f3dHistGenSelectedPtVsYVsMultTRKXiMinus", "Pt_{#Xi} Vs Y_{#Xi} Vs Multiplicity; Pt_{cascade} (GeV/c); Y_{#Xi} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1735 if( fkIsNuclear ) fListHistV0->Add(f3dHistGenSelectedPtVsYVsMultTRKXiMinus);
1737 if(! f3dHistGenSelectedPtVsYVsMultTRKXiPlus) {
1738 f3dHistGenSelectedPtVsYVsMultTRKXiPlus = new TH3F( "f3dHistGenSelectedPtVsYVsMultTRKXiPlus", "Pt_{#Xi} Vs Y_{#Xi} Vs Multiplicity; Pt_{cascade} (GeV/c); Y_{#Xi} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1739 if( fkIsNuclear ) fListHistV0->Add(f3dHistGenSelectedPtVsYVsMultTRKXiPlus);
1742 //CASCADES, analysis level, y CMS
1743 //--------------------------------------------------------------------------------------
1744 //--- 3D Histo (Pt, Y, Multiplicity) for generated XiMinus/Plus, at selected analysis evts
1746 if(! f3dHistGenSelectedPtVsYCMSVsMultTRKXiMinus) {
1747 f3dHistGenSelectedPtVsYCMSVsMultTRKXiMinus = new TH3F( "f3dHistGenSelectedPtVsYCMSVsMultTRKXiMinus", "Pt_{#Xi} Vs Y_{#Xi} Vs Multiplicity; Pt_{cascade} (GeV/c); Y_{#Xi} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1748 if( fkIsNuclear ) fListHistV0->Add(f3dHistGenSelectedPtVsYCMSVsMultTRKXiMinus);
1750 if(! f3dHistGenSelectedPtVsYCMSVsMultTRKXiPlus) {
1751 f3dHistGenSelectedPtVsYCMSVsMultTRKXiPlus = new TH3F( "f3dHistGenSelectedPtVsYCMSVsMultTRKXiPlus", "Pt_{#Xi} Vs Y_{#Xi} Vs Multiplicity; Pt_{cascade} (GeV/c); Y_{#Xi} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1752 if( fkIsNuclear ) fListHistV0->Add(f3dHistGenSelectedPtVsYCMSVsMultTRKXiPlus);
1756 //--------------------------------------------------------------------------------------
1758 //--------------------------------------------------------------------------------------
1759 //--- 3D Histo (Pt, Y, Multiplicity) for generated XiMinus/Plus, all generated
1761 if(! f3dHistGenPtVsYVsMultSPDXiMinus) {
1762 f3dHistGenPtVsYVsMultSPDXiMinus = new TH3F( "f3dHistGenPtVsYVsMultSPDXiMinus", "Pt_{#Xi} Vs Y_{#Xi} Vs Multiplicity; Pt_{cascade} (GeV/c); Y_{#Xi} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1763 if( fkIsNuclear ) fListHistV0->Add(f3dHistGenPtVsYVsMultSPDXiMinus);
1765 if(! f3dHistGenPtVsYVsMultSPDXiPlus) {
1766 f3dHistGenPtVsYVsMultSPDXiPlus = new TH3F( "f3dHistGenPtVsYVsMultSPDXiPlus", "Pt_{#Xi} Vs Y_{#Xi} Vs Multiplicity; Pt_{cascade} (GeV/c); Y_{#Xi} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1767 if( fkIsNuclear ) fListHistV0->Add(f3dHistGenPtVsYVsMultSPDXiPlus);
1770 if(! f3dHistGenPtVsYCMSVsMultSPDXiMinus) {
1771 f3dHistGenPtVsYCMSVsMultSPDXiMinus = new TH3F( "f3dHistGenPtVsYCMSVsMultSPDXiMinus", "Pt_{#Xi} Vs Y_{#Xi} Vs Multiplicity; Pt_{cascade} (GeV/c); Y_{#Xi} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1772 if( fkIsNuclear ) fListHistV0->Add(f3dHistGenPtVsYCMSVsMultSPDXiMinus);
1774 if(! f3dHistGenPtVsYCMSVsMultSPDXiPlus) {
1775 f3dHistGenPtVsYCMSVsMultSPDXiPlus = new TH3F( "f3dHistGenPtVsYCMSVsMultSPDXiPlus", "Pt_{#Xi} Vs Y_{#Xi} Vs Multiplicity; Pt_{cascade} (GeV/c); Y_{#Xi} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1776 if( fkIsNuclear ) fListHistV0->Add(f3dHistGenPtVsYCMSVsMultSPDXiPlus);
1779 //--------------------------------------------------------------------------------------
1780 //--- 3D Histo (Pt, Y, Multiplicity) for generated XiMinus/Plus, at selected analysis evts
1782 if(! f3dHistGenSelectedPtVsYVsMultSPDXiMinus) {
1783 f3dHistGenSelectedPtVsYVsMultSPDXiMinus = new TH3F( "f3dHistGenSelectedPtVsYVsMultSPDXiMinus", "Pt_{#Xi} Vs Y_{#Xi} Vs Multiplicity; Pt_{cascade} (GeV/c); Y_{#Xi} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1784 if( fkIsNuclear ) fListHistV0->Add(f3dHistGenSelectedPtVsYVsMultSPDXiMinus);
1786 if(! f3dHistGenSelectedPtVsYVsMultSPDXiPlus) {
1787 f3dHistGenSelectedPtVsYVsMultSPDXiPlus = new TH3F( "f3dHistGenSelectedPtVsYVsMultSPDXiPlus", "Pt_{#Xi} Vs Y_{#Xi} Vs Multiplicity; Pt_{cascade} (GeV/c); Y_{#Xi} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1788 if( fkIsNuclear ) fListHistV0->Add(f3dHistGenSelectedPtVsYVsMultSPDXiPlus);
1791 //CASCADES, analysis level, y CMS
1792 //--------------------------------------------------------------------------------------
1793 //--- 3D Histo (Pt, Y, Multiplicity) for generated XiMinus/Plus, at selected analysis evts
1795 if(! f3dHistGenSelectedPtVsYCMSVsMultSPDXiMinus) {
1796 f3dHistGenSelectedPtVsYCMSVsMultSPDXiMinus = new TH3F( "f3dHistGenSelectedPtVsYCMSVsMultSPDXiMinus", "Pt_{#Xi} Vs Y_{#Xi} Vs Multiplicity; Pt_{cascade} (GeV/c); Y_{#Xi} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1797 if( fkIsNuclear ) fListHistV0->Add(f3dHistGenSelectedPtVsYCMSVsMultSPDXiMinus);
1799 if(! f3dHistGenSelectedPtVsYCMSVsMultSPDXiPlus) {
1800 f3dHistGenSelectedPtVsYCMSVsMultSPDXiPlus = new TH3F( "f3dHistGenSelectedPtVsYCMSVsMultSPDXiPlus", "Pt_{#Xi} Vs Y_{#Xi} Vs Multiplicity; Pt_{cascade} (GeV/c); Y_{#Xi} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1801 if( fkIsNuclear ) fListHistV0->Add(f3dHistGenSelectedPtVsYCMSVsMultSPDXiPlus);
1806 //----------------------------------
1807 // Histos at analysis level
1808 //----------------------------------
1810 //The usual V0M business...
1812 if(! f3dHistPrimAnalysisPtVsYVsMultLambda) {
1813 f3dHistPrimAnalysisPtVsYVsMultLambda = new TH3F( "f3dHistPrimAnalysisPtVsYVsMultLambda", "Pt_{lambda} Vs Y_{#Lambda} Vs Multiplicity; Pt_{lambda} (GeV/c); Y_{#Lambda} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1814 fListHistV0->Add(f3dHistPrimAnalysisPtVsYVsMultLambda);
1816 if(! f3dHistPrimAnalysisPtVsYVsMultAntiLambda) {
1817 f3dHistPrimAnalysisPtVsYVsMultAntiLambda = new TH3F( "f3dHistPrimAnalysisPtVsYVsMultAntiLambda", "Pt_{antilambda} Vs Y_{#Lambda} Vs Multiplicity; Pt_{antilambda} (GeV/c); Y_{#Lambda} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1818 fListHistV0->Add(f3dHistPrimAnalysisPtVsYVsMultAntiLambda);
1820 if(! f3dHistPrimAnalysisPtVsYVsMultK0Short) {
1821 f3dHistPrimAnalysisPtVsYVsMultK0Short = new TH3F( "f3dHistPrimAnalysisPtVsYVsMultK0Short", "Pt_{K0S} Vs Y_{K0S} Vs Multiplicity; Pt_{K0S} (GeV/c); Y_{K0S} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1822 fListHistV0->Add(f3dHistPrimAnalysisPtVsYVsMultK0Short);
1825 if(! f3dHistPrimAnalysisPtVsYCMSVsMultLambda) {
1826 f3dHistPrimAnalysisPtVsYCMSVsMultLambda = new TH3F( "f3dHistPrimAnalysisPtVsYCMSVsMultLambda", "Pt_{lambda} Vs Y_{#Lambda} Vs Multiplicity; Pt_{lambda} (GeV/c); Y_{#Lambda} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1827 fListHistV0->Add(f3dHistPrimAnalysisPtVsYCMSVsMultLambda);
1829 if(! f3dHistPrimAnalysisPtVsYCMSVsMultAntiLambda) {
1830 f3dHistPrimAnalysisPtVsYCMSVsMultAntiLambda = new TH3F( "f3dHistPrimAnalysisPtVsYCMSVsMultAntiLambda", "Pt_{antilambda} Vs Y_{#Lambda} Vs Multiplicity; Pt_{antilambda} (GeV/c); Y_{#Lambda} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1831 fListHistV0->Add(f3dHistPrimAnalysisPtVsYCMSVsMultAntiLambda);
1833 if(! f3dHistPrimAnalysisPtVsYCMSVsMultK0Short) {
1834 f3dHistPrimAnalysisPtVsYCMSVsMultK0Short = new TH3F( "f3dHistPrimAnalysisPtVsYCMSVsMultK0Short", "Pt_{K0S} Vs Y_{K0S} Vs Multiplicity; Pt_{K0S} (GeV/c); Y_{K0S} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1835 fListHistV0->Add(f3dHistPrimAnalysisPtVsYCMSVsMultK0Short);
1838 //TRUE Multiplicity Business
1840 if(! f3dHistPrimAnalysisPtVsYVsMultMCLambda) {
1841 f3dHistPrimAnalysisPtVsYVsMultMCLambda = new TH3F( "f3dHistPrimAnalysisPtVsYVsMultMCLambda", "Pt_{lambda} Vs Y_{#Lambda} Vs Multiplicity; Pt_{lambda} (GeV/c); Y_{#Lambda} ; MultMC", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1842 fListHistV0->Add(f3dHistPrimAnalysisPtVsYVsMultMCLambda);
1844 if(! f3dHistPrimAnalysisPtVsYVsMultMCAntiLambda) {
1845 f3dHistPrimAnalysisPtVsYVsMultMCAntiLambda = new TH3F( "f3dHistPrimAnalysisPtVsYVsMultMCAntiLambda", "Pt_{antilambda} Vs Y_{#Lambda} Vs Multiplicity; Pt_{antilambda} (GeV/c); Y_{#Lambda} ; MultMC", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1846 fListHistV0->Add(f3dHistPrimAnalysisPtVsYVsMultMCAntiLambda);
1848 if(! f3dHistPrimAnalysisPtVsYVsMultMCK0Short) {
1849 f3dHistPrimAnalysisPtVsYVsMultMCK0Short = new TH3F( "f3dHistPrimAnalysisPtVsYVsMultMCK0Short", "Pt_{K0S} Vs Y_{K0S} Vs Multiplicity; Pt_{K0S} (GeV/c); Y_{K0S} ; MultMC", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1850 fListHistV0->Add(f3dHistPrimAnalysisPtVsYVsMultMCK0Short);
1853 if(! f3dHistPrimAnalysisPtVsYCMSVsMultMCLambda) {
1854 f3dHistPrimAnalysisPtVsYCMSVsMultMCLambda = new TH3F( "f3dHistPrimAnalysisPtVsYCMSVsMultMCLambda", "Pt_{lambda} Vs Y_{#Lambda} Vs Multiplicity; Pt_{lambda} (GeV/c); Y_{#Lambda} ; MultMC", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1855 fListHistV0->Add(f3dHistPrimAnalysisPtVsYCMSVsMultMCLambda);
1857 if(! f3dHistPrimAnalysisPtVsYCMSVsMultMCAntiLambda) {
1858 f3dHistPrimAnalysisPtVsYCMSVsMultMCAntiLambda = new TH3F( "f3dHistPrimAnalysisPtVsYCMSVsMultMCAntiLambda", "Pt_{antilambda} Vs Y_{#Lambda} Vs Multiplicity; Pt_{antilambda} (GeV/c); Y_{#Lambda} ; MultMC", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1859 fListHistV0->Add(f3dHistPrimAnalysisPtVsYCMSVsMultMCAntiLambda);
1861 if(! f3dHistPrimAnalysisPtVsYCMSVsMultMCK0Short) {
1862 f3dHistPrimAnalysisPtVsYCMSVsMultMCK0Short = new TH3F( "f3dHistPrimAnalysisPtVsYCMSVsMultMCK0Short", "Pt_{K0S} Vs Y_{K0S} Vs Multiplicity; Pt_{K0S} (GeV/c); Y_{K0S} ; MultMC", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1863 fListHistV0->Add(f3dHistPrimAnalysisPtVsYCMSVsMultMCK0Short);
1868 if(! f3dHistPrimAnalysisPtVsYVsMultV0ALambda) {
1869 f3dHistPrimAnalysisPtVsYVsMultV0ALambda = new TH3F( "f3dHistPrimAnalysisPtVsYVsMultV0ALambda", "Pt_{lambda} Vs Y_{#Lambda} Vs Multiplicity; Pt_{lambda} (GeV/c); Y_{#Lambda} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1870 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimAnalysisPtVsYVsMultV0ALambda);
1872 if(! f3dHistPrimAnalysisPtVsYVsMultV0AAntiLambda) {
1873 f3dHistPrimAnalysisPtVsYVsMultV0AAntiLambda = new TH3F( "f3dHistPrimAnalysisPtVsYVsMultV0AAntiLambda", "Pt_{antilambda} Vs Y_{#Lambda} Vs Multiplicity; Pt_{antilambda} (GeV/c); Y_{#Lambda} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1874 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimAnalysisPtVsYVsMultV0AAntiLambda);
1876 if(! f3dHistPrimAnalysisPtVsYVsMultV0AK0Short) {
1877 f3dHistPrimAnalysisPtVsYVsMultV0AK0Short = new TH3F( "f3dHistPrimAnalysisPtVsYVsMultV0AK0Short", "Pt_{K0S} Vs Y_{K0S} Vs Multiplicity; Pt_{K0S} (GeV/c); Y_{K0S} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1878 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimAnalysisPtVsYVsMultV0AK0Short);
1881 if(! f3dHistPrimAnalysisPtVsYCMSVsMultV0ALambda) {
1882 f3dHistPrimAnalysisPtVsYCMSVsMultV0ALambda = new TH3F( "f3dHistPrimAnalysisPtVsYCMSVsMultV0ALambda", "Pt_{lambda} Vs Y_{#Lambda} Vs Multiplicity; Pt_{lambda} (GeV/c); Y_{#Lambda} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1883 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimAnalysisPtVsYCMSVsMultV0ALambda);
1885 if(! f3dHistPrimAnalysisPtVsYCMSVsMultV0AAntiLambda) {
1886 f3dHistPrimAnalysisPtVsYCMSVsMultV0AAntiLambda = new TH3F( "f3dHistPrimAnalysisPtVsYCMSVsMultV0AAntiLambda", "Pt_{antilambda} Vs Y_{#Lambda} Vs Multiplicity; Pt_{antilambda} (GeV/c); Y_{#Lambda} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1887 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimAnalysisPtVsYCMSVsMultV0AAntiLambda);
1889 if(! f3dHistPrimAnalysisPtVsYCMSVsMultV0AK0Short) {
1890 f3dHistPrimAnalysisPtVsYCMSVsMultV0AK0Short = new TH3F( "f3dHistPrimAnalysisPtVsYCMSVsMultV0AK0Short", "Pt_{K0S} Vs Y_{K0S} Vs Multiplicity; Pt_{K0S} (GeV/c); Y_{K0S} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1891 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimAnalysisPtVsYCMSVsMultV0AK0Short);
1894 //Cross-check at Analysis Level
1895 if(! f3dHistPrimAnalysisPtVsYCMSVsMultV0AKPlus) {
1896 f3dHistPrimAnalysisPtVsYCMSVsMultV0AKPlus = new TH3F( "f3dHistPrimAnalysisPtVsYCMSVsMultV0AKPlus", "Pt_{K+} Vs Y_{K+} Vs Multiplicity; Pt_{K+} (GeV/c); Y_{K+} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1897 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimAnalysisPtVsYCMSVsMultV0AKPlus);
1899 //Cross-check at Analysis Level
1900 if(! f3dHistPrimAnalysisPtVsYCMSVsMultV0AKMinus) {
1901 f3dHistPrimAnalysisPtVsYCMSVsMultV0AKMinus = new TH3F( "f3dHistPrimAnalysisPtVsYCMSVsMultV0AKMinus", "Pt_{K-} Vs Y_{K-} Vs Multiplicity; Pt_{K-} (GeV/c); Y_{K-} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1902 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimAnalysisPtVsYCMSVsMultV0AKMinus);
1908 if(! f3dHistPrimAnalysisPtVsYVsMultZNALambda) {
1909 f3dHistPrimAnalysisPtVsYVsMultZNALambda = new TH3F( "f3dHistPrimAnalysisPtVsYVsMultZNALambda", "Pt_{lambda} Vs Y_{#Lambda} Vs Multiplicity; Pt_{lambda} (GeV/c); Y_{#Lambda} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1910 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimAnalysisPtVsYVsMultZNALambda);
1912 if(! f3dHistPrimAnalysisPtVsYVsMultZNAAntiLambda) {
1913 f3dHistPrimAnalysisPtVsYVsMultZNAAntiLambda = new TH3F( "f3dHistPrimAnalysisPtVsYVsMultZNAAntiLambda", "Pt_{antilambda} Vs Y_{#Lambda} Vs Multiplicity; Pt_{antilambda} (GeV/c); Y_{#Lambda} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1914 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimAnalysisPtVsYVsMultZNAAntiLambda);
1916 if(! f3dHistPrimAnalysisPtVsYVsMultZNAK0Short) {
1917 f3dHistPrimAnalysisPtVsYVsMultZNAK0Short = new TH3F( "f3dHistPrimAnalysisPtVsYVsMultZNAK0Short", "Pt_{K0S} Vs Y_{K0S} Vs Multiplicity; Pt_{K0S} (GeV/c); Y_{K0S} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1918 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimAnalysisPtVsYVsMultZNAK0Short);
1921 if(! f3dHistPrimAnalysisPtVsYCMSVsMultZNALambda) {
1922 f3dHistPrimAnalysisPtVsYCMSVsMultZNALambda = new TH3F( "f3dHistPrimAnalysisPtVsYCMSVsMultZNALambda", "Pt_{lambda} Vs Y_{#Lambda} Vs Multiplicity; Pt_{lambda} (GeV/c); Y_{#Lambda} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1923 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimAnalysisPtVsYCMSVsMultZNALambda);
1925 if(! f3dHistPrimAnalysisPtVsYCMSVsMultZNAAntiLambda) {
1926 f3dHistPrimAnalysisPtVsYCMSVsMultZNAAntiLambda = new TH3F( "f3dHistPrimAnalysisPtVsYCMSVsMultZNAAntiLambda", "Pt_{antilambda} Vs Y_{#Lambda} Vs Multiplicity; Pt_{antilambda} (GeV/c); Y_{#Lambda} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1927 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimAnalysisPtVsYCMSVsMultZNAAntiLambda);
1929 if(! f3dHistPrimAnalysisPtVsYCMSVsMultZNAK0Short) {
1930 f3dHistPrimAnalysisPtVsYCMSVsMultZNAK0Short = new TH3F( "f3dHistPrimAnalysisPtVsYCMSVsMultZNAK0Short", "Pt_{K0S} Vs Y_{K0S} Vs Multiplicity; Pt_{K0S} (GeV/c); Y_{K0S} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1931 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimAnalysisPtVsYCMSVsMultZNAK0Short);
1936 if(! f3dHistPrimAnalysisPtVsYVsMultTRKLambda) {
1937 f3dHistPrimAnalysisPtVsYVsMultTRKLambda = new TH3F( "f3dHistPrimAnalysisPtVsYVsMultTRKLambda", "Pt_{lambda} Vs Y_{#Lambda} Vs Multiplicity; Pt_{lambda} (GeV/c); Y_{#Lambda} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1938 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimAnalysisPtVsYVsMultTRKLambda);
1940 if(! f3dHistPrimAnalysisPtVsYVsMultTRKAntiLambda) {
1941 f3dHistPrimAnalysisPtVsYVsMultTRKAntiLambda = new TH3F( "f3dHistPrimAnalysisPtVsYVsMultTRKAntiLambda", "Pt_{antilambda} Vs Y_{#Lambda} Vs Multiplicity; Pt_{antilambda} (GeV/c); Y_{#Lambda} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1942 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimAnalysisPtVsYVsMultTRKAntiLambda);
1944 if(! f3dHistPrimAnalysisPtVsYVsMultTRKK0Short) {
1945 f3dHistPrimAnalysisPtVsYVsMultTRKK0Short = new TH3F( "f3dHistPrimAnalysisPtVsYVsMultTRKK0Short", "Pt_{K0S} Vs Y_{K0S} Vs Multiplicity; Pt_{K0S} (GeV/c); Y_{K0S} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1946 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimAnalysisPtVsYVsMultTRKK0Short);
1949 if(! f3dHistPrimAnalysisPtVsYCMSVsMultTRKLambda) {
1950 f3dHistPrimAnalysisPtVsYCMSVsMultTRKLambda = new TH3F( "f3dHistPrimAnalysisPtVsYCMSVsMultTRKLambda", "Pt_{lambda} Vs Y_{#Lambda} Vs Multiplicity; Pt_{lambda} (GeV/c); Y_{#Lambda} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1951 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimAnalysisPtVsYCMSVsMultTRKLambda);
1953 if(! f3dHistPrimAnalysisPtVsYCMSVsMultTRKAntiLambda) {
1954 f3dHistPrimAnalysisPtVsYCMSVsMultTRKAntiLambda = new TH3F( "f3dHistPrimAnalysisPtVsYCMSVsMultTRKAntiLambda", "Pt_{antilambda} Vs Y_{#Lambda} Vs Multiplicity; Pt_{antilambda} (GeV/c); Y_{#Lambda} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1955 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimAnalysisPtVsYCMSVsMultTRKAntiLambda);
1957 if(! f3dHistPrimAnalysisPtVsYCMSVsMultTRKK0Short) {
1958 f3dHistPrimAnalysisPtVsYCMSVsMultTRKK0Short = new TH3F( "f3dHistPrimAnalysisPtVsYCMSVsMultTRKK0Short", "Pt_{K0S} Vs Y_{K0S} Vs Multiplicity; Pt_{K0S} (GeV/c); Y_{K0S} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1959 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimAnalysisPtVsYCMSVsMultTRKK0Short);
1964 if(! f3dHistPrimAnalysisPtVsYVsMultSPDLambda) {
1965 f3dHistPrimAnalysisPtVsYVsMultSPDLambda = new TH3F( "f3dHistPrimAnalysisPtVsYVsMultSPDLambda", "Pt_{lambda} Vs Y_{#Lambda} Vs Multiplicity; Pt_{lambda} (GeV/c); Y_{#Lambda} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1966 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimAnalysisPtVsYVsMultSPDLambda);
1968 if(! f3dHistPrimAnalysisPtVsYVsMultSPDAntiLambda) {
1969 f3dHistPrimAnalysisPtVsYVsMultSPDAntiLambda = new TH3F( "f3dHistPrimAnalysisPtVsYVsMultSPDAntiLambda", "Pt_{antilambda} Vs Y_{#Lambda} Vs Multiplicity; Pt_{antilambda} (GeV/c); Y_{#Lambda} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1970 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimAnalysisPtVsYVsMultSPDAntiLambda);
1972 if(! f3dHistPrimAnalysisPtVsYVsMultSPDK0Short) {
1973 f3dHistPrimAnalysisPtVsYVsMultSPDK0Short = new TH3F( "f3dHistPrimAnalysisPtVsYVsMultSPDK0Short", "Pt_{K0S} Vs Y_{K0S} Vs Multiplicity; Pt_{K0S} (GeV/c); Y_{K0S} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1974 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimAnalysisPtVsYVsMultSPDK0Short);
1977 if(! f3dHistPrimAnalysisPtVsYCMSVsMultSPDLambda) {
1978 f3dHistPrimAnalysisPtVsYCMSVsMultSPDLambda = new TH3F( "f3dHistPrimAnalysisPtVsYCMSVsMultSPDLambda", "Pt_{lambda} Vs Y_{#Lambda} Vs Multiplicity; Pt_{lambda} (GeV/c); Y_{#Lambda} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1979 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimAnalysisPtVsYCMSVsMultSPDLambda);
1981 if(! f3dHistPrimAnalysisPtVsYCMSVsMultSPDAntiLambda) {
1982 f3dHistPrimAnalysisPtVsYCMSVsMultSPDAntiLambda = new TH3F( "f3dHistPrimAnalysisPtVsYCMSVsMultSPDAntiLambda", "Pt_{antilambda} Vs Y_{#Lambda} Vs Multiplicity; Pt_{antilambda} (GeV/c); Y_{#Lambda} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1983 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimAnalysisPtVsYCMSVsMultSPDAntiLambda);
1985 if(! f3dHistPrimAnalysisPtVsYCMSVsMultSPDK0Short) {
1986 f3dHistPrimAnalysisPtVsYCMSVsMultSPDK0Short = new TH3F( "f3dHistPrimAnalysisPtVsYCMSVsMultSPDK0Short", "Pt_{K0S} Vs Y_{K0S} Vs Multiplicity; Pt_{K0S} (GeV/c); Y_{K0S} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1987 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimAnalysisPtVsYCMSVsMultSPDK0Short);
1990 //----------------------------------
1991 // Primary Vertex Position Histos
1992 //----------------------------------
1995 fHistPVx = new TH1F("fHistPVx",
1996 "PV x position;Nbr of Evts;x",
1998 fListHistV0->Add(fHistPVx);
2001 fHistPVy = new TH1F("fHistPVy",
2002 "PV y position;Nbr of Evts;y",
2004 fListHistV0->Add(fHistPVy);
2007 fHistPVz = new TH1F("fHistPVz",
2008 "PV z position;Nbr of Evts;z",
2010 fListHistV0->Add(fHistPVz);
2013 if(! fHistPVxAnalysis) {
2014 fHistPVxAnalysis = new TH1F("fHistPVxAnalysis",
2015 "PV x position;Nbr of Evts;x",
2017 fListHistV0->Add(fHistPVxAnalysis);
2019 if(! fHistPVyAnalysis) {
2020 fHistPVyAnalysis = new TH1F("fHistPVyAnalysis",
2021 "PV y position;Nbr of Evts;y",
2023 fListHistV0->Add(fHistPVyAnalysis);
2025 if(! fHistPVzAnalysis) {
2026 fHistPVzAnalysis = new TH1F("fHistPVzAnalysis",
2027 "PV z position;Nbr of Evts;z",
2029 fListHistV0->Add(fHistPVzAnalysis);
2032 if(! fHistPVxAnalysisHasHighPtLambda) {
2033 fHistPVxAnalysisHasHighPtLambda = new TH1F("fHistPVxAnalysisHasHighPtLambda",
2034 "PV x position;Nbr of Evts;x",
2036 fListHistV0->Add(fHistPVxAnalysisHasHighPtLambda);
2038 if(! fHistPVyAnalysisHasHighPtLambda) {
2039 fHistPVyAnalysisHasHighPtLambda = new TH1F("fHistPVyAnalysisHasHighPtLambda",
2040 "PV y position;Nbr of Evts;y",
2042 fListHistV0->Add(fHistPVyAnalysisHasHighPtLambda);
2044 if(! fHistPVzAnalysisHasHighPtLambda) {
2045 fHistPVzAnalysisHasHighPtLambda = new TH1F("fHistPVzAnalysisHasHighPtLambda",
2046 "PV z position;Nbr of Evts;z",
2048 fListHistV0->Add(fHistPVzAnalysisHasHighPtLambda);
2050 if(! fHistSwappedV0Counter) {
2051 fHistSwappedV0Counter = new TH1F("fHistSwappedV0Counter",
2052 "Swap or not histo;Swapped (1) or not (0); count",
2054 fListHistV0->Add(fHistSwappedV0Counter);
2057 //List of Histograms: Normal
2058 PostData(1, fListHistV0);
2060 //TTree Object: Saved to base directory. Should cache to disk while saving.
2061 //(Important to avoid excessive memory usage, particularly when merging)
2064 }// end UserCreateOutputObjects
2067 //________________________________________________________________________
2068 void AliAnalysisTaskExtractPerformanceV0::UserExec(Option_t *)
2071 // Called for each event
2073 AliESDEvent *lESDevent = 0x0;
2074 AliMCEvent *lMCevent = 0x0;
2075 AliStack *lMCstack = 0x0;
2077 Int_t lNumberOfV0s = -1;
2078 Double_t lTrkgPrimaryVtxPos[3] = {-100.0, -100.0, -100.0};
2079 Double_t lBestPrimaryVtxPos[3] = {-100.0, -100.0, -100.0};
2080 Double_t lMagneticField = -10.;
2082 // Connect to the InputEvent
2083 // After these lines, we should have an ESD/AOD event + the number of V0s in it.
2085 // Appropriate for ESD analysis!
2087 lESDevent = dynamic_cast<AliESDEvent*>( InputEvent() );
2089 AliWarning("ERROR: lESDevent not available \n");
2093 fTreeVariableRunNumber = lESDevent->GetRunNumber();
2094 fTreeVariableEventNumber =
2095 ( ( ((ULong64_t)lESDevent->GetPeriodNumber() ) << 36 ) |
2096 ( ((ULong64_t)lESDevent->GetOrbitNumber () ) << 12 ) |
2097 ((ULong64_t)lESDevent->GetBunchCrossNumber() ) );
2099 lMCevent = MCEvent();
2101 Printf("ERROR: Could not retrieve MC event \n");
2102 cout << "Name of the file with pb :" << fInputHandler->GetTree()->GetCurrentFile()->GetName() << endl;
2106 lMCstack = lMCevent->Stack();
2108 Printf("ERROR: Could not retrieve MC stack \n");
2109 cout << "Name of the file with pb :" << fInputHandler->GetTree()->GetCurrentFile()->GetName() << endl;
2113 //------------------------------------------------
2114 // Rerun V0 vertexer, if asked for
2115 // --- WARNING: Be careful when using in PbPb
2116 //------------------------------------------------
2117 if( fkRunV0Vertexer ){
2118 lESDevent->ResetV0s();
2119 AliV0vertexer lV0vtxer;
2120 lV0vtxer.SetDefaultCuts(fV0Sels);
2121 lV0vtxer.Tracks2V0vertices(lESDevent);
2124 TArrayF mcPrimaryVtx;
2125 AliGenEventHeader* mcHeader=lMCevent->GenEventHeader();
2126 if(!mcHeader) return;
2127 mcHeader->PrimaryVertex(mcPrimaryVtx);
2129 //Code Snippet from Alexander for looking at diffractive Events from DPMJet
2131 if(fDiffractiveOnly){
2132 AliHeader * header = lMCevent->Header();
2133 AliGenDPMjetEventHeader* dpmHeader = dynamic_cast<AliGenDPMjetEventHeader*>(header->GenEventHeader());
2134 if (dpmHeader) nPart = dpmHeader->ProjectileParticipants() + dpmHeader->TargetParticipants();
2136 Int_t nsdiffrac1 = 0;
2137 Int_t nsdiffrac2 = 0;
2138 Int_t nddiffrac = 0;
2139 if (dpmHeader) dpmHeader->GetNDiffractive(nsdiffrac1, nsdiffrac2, nddiffrac);
2140 if (nsdiffrac1 + nsdiffrac2 != nPart) return;
2143 //------------------------------------------------
2144 // Multiplicity Information Acquistion
2145 //------------------------------------------------
2147 //REVISED multiplicity estimator after 'multiplicity day' (2011)
2148 Int_t lMultiplicity = -100;
2149 Int_t lMultiplicityV0A = -100;
2150 Int_t lMultiplicityZNA = -100;
2151 Int_t lMultiplicityTRK = -100;
2152 Int_t lMultiplicitySPD = -100;
2155 if(fkIsNuclear == kFALSE) lMultiplicity = fESDtrackCuts->GetReferenceMultiplicity(lESDevent, AliESDtrackCuts::kTrackletsITSTPC,fEtaRefMult);
2157 //---> If this is a nuclear collision, then go nuclear on "multiplicity" variable...
2158 //---> Warning: Experimental
2159 if(fkIsNuclear == kTRUE){
2160 AliCentrality* centrality;
2161 centrality = lESDevent->GetCentrality();
2162 lMultiplicity = ( ( Int_t ) ( centrality->GetCentralityPercentile( fCentralityEstimator.Data() ) ) );
2163 lMultiplicityV0A = ( ( Int_t ) ( centrality->GetCentralityPercentile( "V0A" ) ) );
2164 lMultiplicityZNA = ( ( Int_t ) ( centrality->GetCentralityPercentile( "ZNA" ) ) );
2165 lMultiplicityTRK = ( ( Int_t ) ( centrality->GetCentralityPercentile( "TRK" ) ) );
2166 lMultiplicitySPD = ( ( Int_t ) ( centrality->GetCentralityPercentile( "CL1" ) ) );
2167 if (centrality->GetQuality()>1) {
2168 PostData(1, fListHistV0);
2174 //Set variable for filling tree afterwards!
2175 //---> pp case......: GetReferenceMultiplicity
2176 //---> Pb-Pb case...: Centrality by V0M
2177 fTreeVariableMultiplicity = lMultiplicity;
2178 fTreeVariableMultiplicityV0A = lMultiplicityV0A;
2179 fTreeVariableMultiplicityZNA = lMultiplicityZNA;
2180 fTreeVariableMultiplicityTRK = lMultiplicityTRK;
2181 fTreeVariableMultiplicitySPD = lMultiplicitySPD;
2183 fHistV0MultiplicityBeforeTrigSel->Fill ( lESDevent->GetNumberOfV0s() );
2185 fHistMultiplicityBeforeTrigSel->Fill ( lMultiplicity );
2186 fHistMultiplicityV0ABeforeTrigSel->Fill ( lMultiplicityV0A );
2187 fHistMultiplicityZNABeforeTrigSel->Fill ( lMultiplicityZNA );
2188 fHistMultiplicityTRKBeforeTrigSel->Fill ( lMultiplicityTRK );
2189 fHistMultiplicitySPDBeforeTrigSel->Fill ( lMultiplicitySPD );
2191 //------------------------------------------------
2192 // MC Information Acquistion
2193 //------------------------------------------------
2195 Int_t iNumberOfPrimaries = -1;
2196 iNumberOfPrimaries = lMCstack->GetNprimary();
2197 if(iNumberOfPrimaries < 1) return;
2198 Bool_t lHasHighPtLambda = kFALSE;
2200 //------------------------------------------------
2201 // Variable Definition
2202 //------------------------------------------------
2204 Int_t lNbMCPrimary = 0;
2206 Int_t lPdgcodeCurrentPart = 0;
2207 Double_t lRapCurrentPart = 0;
2208 Double_t lPtCurrentPart = 0;
2210 //Int_t lComeFromSigma = 0;
2212 // current mc particle 's mother
2213 //Int_t iCurrentMother = 0;
2214 lNbMCPrimary = lMCstack->GetNprimary();
2216 //------------------------------------------------
2217 // Pre-Physics Selection
2218 //------------------------------------------------
2220 //----- Loop on primary Xi, Omega --------------------------------------------------------------
2221 for (Int_t iCurrentLabelStack = 0; iCurrentLabelStack < lNbMCPrimary; iCurrentLabelStack++)
2222 {// This is the begining of the loop on primaries
2224 TParticle* lCurrentParticlePrimary = 0x0;
2225 lCurrentParticlePrimary = lMCstack->Particle( iCurrentLabelStack );
2226 if(!lCurrentParticlePrimary){
2227 Printf("Cascade loop %d - MC TParticle pointer to current stack particle = 0x0 ! Skip ...\n", iCurrentLabelStack );
2230 if ( TMath::Abs(lCurrentParticlePrimary->GetPdgCode()) == 3312 || TMath::Abs(lCurrentParticlePrimary->GetPdgCode()) == 3334 ) {
2231 Double_t lRapXiMCPrimary = -100;
2232 if( (lCurrentParticlePrimary->Energy() - lCurrentParticlePrimary->Pz() +1.e-13) != 0 ) {
2233 if ( (lCurrentParticlePrimary->Energy() + lCurrentParticlePrimary->Pz()) / (lCurrentParticlePrimary->Energy() - lCurrentParticlePrimary->Pz() +1.e-13) !=0 ){
2234 lRapXiMCPrimary = 0.5*TMath::Log( (lCurrentParticlePrimary->Energy() + lCurrentParticlePrimary->Pz()) / (lCurrentParticlePrimary->Energy() - lCurrentParticlePrimary->Pz() +1.e-13) );
2238 //=================================================================================
2240 if( lCurrentParticlePrimary->GetPdgCode() == 3312 ){
2241 lPtCurrentPart = lCurrentParticlePrimary->Pt();
2242 f3dHistGenPtVsYVsMultXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicity);
2243 f3dHistGenPtVsYCMSVsMultXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicity);
2245 f3dHistGenPtVsYVsMultV0AXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicityV0A);
2246 f3dHistGenPtVsYCMSVsMultV0AXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicityV0A);
2247 f3dHistGenPtVsYVsMultZNAXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicityZNA);
2248 f3dHistGenPtVsYCMSVsMultZNAXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicityZNA);
2249 f3dHistGenPtVsYVsMultTRKXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicityTRK);
2250 f3dHistGenPtVsYCMSVsMultTRKXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicityTRK);
2251 f3dHistGenPtVsYVsMultSPDXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicitySPD);
2252 f3dHistGenPtVsYCMSVsMultSPDXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicitySPD);
2254 if( lCurrentParticlePrimary->GetPdgCode() == -3312 ){
2255 lPtCurrentPart = lCurrentParticlePrimary->Pt();
2256 f3dHistGenPtVsYVsMultXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicity);
2257 f3dHistGenPtVsYCMSVsMultXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicity);
2259 f3dHistGenPtVsYVsMultV0AXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicityV0A);
2260 f3dHistGenPtVsYCMSVsMultV0AXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicityV0A);
2261 f3dHistGenPtVsYVsMultZNAXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicityZNA);
2262 f3dHistGenPtVsYCMSVsMultZNAXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicityZNA);
2263 f3dHistGenPtVsYVsMultTRKXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicityTRK);
2264 f3dHistGenPtVsYCMSVsMultTRKXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicityTRK);
2265 f3dHistGenPtVsYVsMultSPDXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicitySPD);
2266 f3dHistGenPtVsYCMSVsMultSPDXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicitySPD);
2270 //----- End Loop on primary Xi, Omega ----------------------------------------------------------
2272 //--------- GENERATED NUMBER OF CHARGED PARTICLES
2273 // ---> Set Variables to Zero again
2274 // ---> Variable Definition
2276 Long_t lNumberOfCharged = 0;
2278 //----- Loop on Stack ----------------------------------------------------------------
2279 for (Int_t iCurrentLabelStack = 0; iCurrentLabelStack < (lMCstack->GetNtrack()); iCurrentLabelStack++)
2280 {// This is the begining of the loop on tracks
2281 TParticle* particleOne = lMCstack->Particle(iCurrentLabelStack);
2282 if(!particleOne) continue;
2283 if(!particleOne->GetPDG()) continue;
2284 Double_t lThisCharge = particleOne->GetPDG()->Charge()/3.;
2285 if(TMath::Abs(lThisCharge)<0.001) continue;
2286 if(! (lMCstack->IsPhysicalPrimary(iCurrentLabelStack)) ) continue;
2288 //Double_t gpt = particleOne -> Pt();
2289 Double_t geta = particleOne -> Eta();
2291 if( TMath::Abs(geta) < 0.5) lNumberOfCharged++;
2292 }//End of loop on tracks
2293 //----- End Loop on Stack ------------------------------------------------------------
2295 //Double_t lpArapidityShift = 0.465;
2296 Bool_t lStackNatural = kTRUE;
2297 //----- Loop on Lambda, K0Short ----------------------------------------------------------------
2298 for (Int_t iCurrentLabelStack = 0; iCurrentLabelStack < (lMCstack->GetNtrack()); iCurrentLabelStack++)
2299 {// This is the begining of the loop on tracks
2301 TParticle* lCurrentParticleForLambdaCheck = 0x0;
2302 lCurrentParticleForLambdaCheck = lMCstack->Particle( iCurrentLabelStack );
2303 if(!lCurrentParticleForLambdaCheck){
2304 Printf("V0s loop %d - MC TParticle pointer to current stack particle = 0x0 ! Skip ...\n", iCurrentLabelStack );
2308 //=================================================================================
2309 //Single-Strange checks
2310 // Keep only K0s, Lambda and AntiLambda:
2311 lPdgcodeCurrentPart = lCurrentParticleForLambdaCheck->GetPdgCode();
2313 if ( (lCurrentParticleForLambdaCheck->GetPdgCode() == 310 ) ||
2314 (lCurrentParticleForLambdaCheck->GetPdgCode() == 3122 ) ||
2315 (lCurrentParticleForLambdaCheck->GetPdgCode() == -3122 ) )
2317 lRapCurrentPart = MyRapidity(lCurrentParticleForLambdaCheck->Energy(),lCurrentParticleForLambdaCheck->Pz());
2318 lPtCurrentPart = lCurrentParticleForLambdaCheck->Pt();
2320 //Use Close to PV for filling CloseToPV histograms!
2321 Double_t dx, dy, dz;
2323 dx = ( (mcPrimaryVtx.At(0)) - (lCurrentParticleForLambdaCheck->Vx()) );
2324 dy = ( (mcPrimaryVtx.At(1)) - (lCurrentParticleForLambdaCheck->Vy()) );
2325 dz = ( (mcPrimaryVtx.At(2)) - (lCurrentParticleForLambdaCheck->Vz()) );
2326 Double_t lDistToPV = TMath::Sqrt(dx*dx + dy*dy + dz*dz);
2327 if( lDistToPV <= 0.001){
2328 if( lPdgcodeCurrentPart == 3122 ){
2329 f3dHistPrimCloseToPVPtVsYVsMultLambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicity);
2331 if( lPdgcodeCurrentPart == -3122 ){
2332 f3dHistPrimCloseToPVPtVsYVsMultAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicity);
2334 if( lPdgcodeCurrentPart == 310 ){
2335 f3dHistPrimCloseToPVPtVsYVsMultK0Short->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicity);
2339 //Use Physical Primaries only for filling PrimRaw Histograms!
2340 if ( lMCstack->IsPhysicalPrimary(iCurrentLabelStack)!=kTRUE ) continue;
2342 lStackNatural = lMCevent->IsFromBGEvent(iCurrentLabelStack); //Is it?
2343 if (!lStackNatural){
2344 if (!(lCurrentParticleForLambdaCheck->GetFirstMother()<0))
2345 {lStackNatural = kTRUE;} // because there are primaries (ALICE definition) not produced in the collision
2348 if( lPdgcodeCurrentPart == 3122 ){
2349 f3dHistPrimRawPtVsYVsMultLambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicity);
2350 f3dHistPrimRawPtVsYCMSVsMultLambda->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicity);
2352 f3dHistPrimRawPtVsYVsMultV0ALambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicityV0A);
2353 f3dHistPrimRawPtVsYCMSVsMultV0ALambda->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicityV0A);
2354 f3dHistPrimRawPtVsYVsMultZNALambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicityZNA);
2355 f3dHistPrimRawPtVsYCMSVsMultZNALambda->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicityZNA);
2356 f3dHistPrimRawPtVsYVsMultTRKLambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicityTRK);
2357 f3dHistPrimRawPtVsYCMSVsMultTRKLambda->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicityTRK);
2358 f3dHistPrimRawPtVsYVsMultSPDLambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicitySPD);
2359 f3dHistPrimRawPtVsYCMSVsMultSPDLambda->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicitySPD);
2361 if(lStackNatural){f3dHistPrimRawPtVsYVsMultNonInjLambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicity);}
2362 f3dHistPrimRawPtVsYVsMultMCLambda->Fill(lPtCurrentPart, lRapCurrentPart, lNumberOfCharged);
2363 f3dHistPrimRawPtVsYVsVertexZLambda->Fill(lPtCurrentPart, lRapCurrentPart, mcPrimaryVtx.At(2));
2364 if( TMath::Abs( lCurrentParticleForLambdaCheck->Eta() )<1.2 && lPtCurrentPart>2 ){
2365 lHasHighPtLambda = kTRUE; //Keep track of events with Lambda within |eta|<1.2 and pt>2
2368 if( lPdgcodeCurrentPart == -3122 ){
2369 f3dHistPrimRawPtVsYVsMultAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicity);
2370 f3dHistPrimRawPtVsYCMSVsMultAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicity);
2372 f3dHistPrimRawPtVsYVsMultV0AAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicityV0A);
2373 f3dHistPrimRawPtVsYCMSVsMultV0AAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicityV0A);
2374 f3dHistPrimRawPtVsYVsMultZNAAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicityZNA);
2375 f3dHistPrimRawPtVsYCMSVsMultZNAAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicityZNA);
2376 f3dHistPrimRawPtVsYVsMultTRKAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicityTRK);
2377 f3dHistPrimRawPtVsYCMSVsMultTRKAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicityTRK);
2378 f3dHistPrimRawPtVsYVsMultSPDAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicitySPD);
2379 f3dHistPrimRawPtVsYCMSVsMultSPDAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicitySPD);
2381 if(lStackNatural){f3dHistPrimRawPtVsYVsMultNonInjAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicity);}
2382 f3dHistPrimRawPtVsYVsMultMCAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart, lNumberOfCharged);
2383 f3dHistPrimRawPtVsYVsVertexZAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart, mcPrimaryVtx.At(2));
2385 if( lPdgcodeCurrentPart == 310 ){
2386 f3dHistPrimRawPtVsYVsMultK0Short->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicity);
2387 f3dHistPrimRawPtVsYCMSVsMultK0Short->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicity);
2389 f3dHistPrimRawPtVsYVsMultV0AK0Short->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicityV0A);
2390 f3dHistPrimRawPtVsYCMSVsMultV0AK0Short->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicityV0A);
2391 f3dHistPrimRawPtVsYVsMultZNAK0Short->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicityZNA);
2392 f3dHistPrimRawPtVsYCMSVsMultZNAK0Short->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicityZNA);
2393 f3dHistPrimRawPtVsYVsMultTRKK0Short->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicityTRK);
2394 f3dHistPrimRawPtVsYCMSVsMultTRKK0Short->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicityTRK);
2395 f3dHistPrimRawPtVsYVsMultSPDK0Short->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicitySPD);
2396 f3dHistPrimRawPtVsYCMSVsMultSPDK0Short->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicitySPD);
2398 if(lStackNatural){f3dHistPrimRawPtVsYVsMultNonInjK0Short->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicity);}
2399 f3dHistPrimRawPtVsYVsMultMCK0Short->Fill(lPtCurrentPart, lRapCurrentPart, lNumberOfCharged);
2400 f3dHistPrimRawPtVsYVsVertexZK0Short->Fill(lPtCurrentPart, lRapCurrentPart, mcPrimaryVtx.At(2));
2402 //Decay Length Acquisition=====================================================
2403 Double_t decaylength = -1;
2404 Double_t lV0Mass = -1;
2406 if( !(lCurrentParticleForLambdaCheck->GetDaughter(0) < 0) ) {
2407 TParticle* lDght0ofV0 = lMCstack->Particle( lCurrentParticleForLambdaCheck->GetDaughter(0) ); //get first daughter
2408 if(lDght0ofV0){ // skip if not defined.
2409 decaylength = TMath::Sqrt(
2410 TMath::Power( lCurrentParticleForLambdaCheck->Vx() - lDght0ofV0->Vx() , 2) +
2411 TMath::Power( lCurrentParticleForLambdaCheck->Vy() - lDght0ofV0->Vy() , 2) +
2412 TMath::Power( lCurrentParticleForLambdaCheck->Vz() - lDght0ofV0->Vz() , 2)
2414 //Need to correct for relativitity! Involves multiplying by mass and dividing by momentum.
2415 if(TMath::Abs( lPdgcodeCurrentPart ) == 3122 ) { lV0Mass = 1.115683; }
2416 if(TMath::Abs( lPdgcodeCurrentPart ) == 310 ) { lV0Mass = 0.497614; }
2417 if( lCurrentParticleForLambdaCheck->P() + 1e-10 != 0 ) decaylength = ( lV0Mass * decaylength ) / ( lCurrentParticleForLambdaCheck->P() + 1e-10 );
2418 if( lCurrentParticleForLambdaCheck->P() + 1e-10 == 0 ) decaylength = 1e+5;
2421 if( lPdgcodeCurrentPart == 3122) f3dHistPrimRawPtVsYVsDecayLengthLambda ->Fill( lPtCurrentPart, lRapCurrentPart , decaylength );
2422 if( lPdgcodeCurrentPart == -3122) f3dHistPrimRawPtVsYVsDecayLengthAntiLambda ->Fill( lPtCurrentPart, lRapCurrentPart , decaylength );
2423 if( lPdgcodeCurrentPart == 310) f3dHistPrimRawPtVsYVsDecayLengthK0Short ->Fill( lPtCurrentPart, lRapCurrentPart , decaylength );
2425 }//End of loop on tracks
2426 //----- End Loop on Lambda, K0Short ------------------------------------------------------------
2429 f2dHistMultiplicityVsTrueBeforeTrigSel->Fill ( lMultiplicity , lNumberOfCharged );
2431 fTreeVariableMultiplicityMC = lNumberOfCharged;
2433 fHistGenVertexZBeforeTrigSel->Fill( (mcPrimaryVtx.At(2)) );
2435 lPdgcodeCurrentPart = 0;
2436 lRapCurrentPart = 0;
2439 //------------------------------------------------
2440 // Physics Selection
2441 //------------------------------------------------
2443 UInt_t maskIsSelected = ((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected();
2444 Bool_t isSelected = 0;
2445 Bool_t isSelectedExtra = kTRUE; //extra sel, default YES
2446 isSelected = (maskIsSelected & AliVEvent::kMB) == AliVEvent::kMB;
2448 //pA triggering: CINT7
2449 if( fkSwitchINT7 ) isSelected = (maskIsSelected & AliVEvent::kINT7) == AliVEvent::kINT7;
2451 if(fkSkipTrigger==kFALSE){
2452 //Extra selection applies if with/without SDD is to be dealth with
2453 if( fkFastOnly == "kFastOnly"){
2454 //If not kFastOnly, isSelectedExtra will be kFALSE; procedure will reject it
2455 isSelectedExtra = (maskIsSelected & AliVEvent::kFastOnly) == AliVEvent::kFastOnly;
2457 if( fkFastOnly == "NotkFastOnly"){
2458 //If not kFastOnly, isSelectedExtra will be kTRUE; procedure will accept it
2459 isSelectedExtra = !( (maskIsSelected & AliVEvent::kFastOnly) == AliVEvent::kFastOnly );
2462 //Standard Min-Bias Selection
2463 if ( ! isSelected ) {
2464 PostData(1, fListHistV0);
2468 //Check if goes through extra selections
2469 //isSelectedExtra will be true in case -> fkFastOnly==""
2470 //isSelectedExtra will be true in case -> fkFastOnly=="kFastOnly" && bit kFastOnly ON
2471 //isSelectedExtra will be true in case -> fkFastOnly=="NotkFastOnly" && bit kFastOnly OFF
2472 if ( !isSelectedExtra ) {
2473 PostData(1, fListHistV0);
2479 f2dHistMultiplicityVsTrueForTrigEvt->Fill ( lMultiplicity , lNumberOfCharged );
2480 fHistGenVertexZForTrigEvt->Fill( mcPrimaryVtx.At(2) );
2482 //------------------------------------------------
2483 // After Trigger Selection
2484 //------------------------------------------------
2486 lNumberOfV0s = lESDevent->GetNumberOfV0s();
2488 //Set variable for filling tree afterwards!
2489 fHistV0MultiplicityForTrigEvt->Fill(lNumberOfV0s);
2490 fHistMultiplicityForTrigEvt->Fill ( lMultiplicity );
2491 fHistMultiplicityV0AForTrigEvt ->Fill( lMultiplicityV0A );
2492 fHistMultiplicityZNAForTrigEvt ->Fill( lMultiplicityZNA );
2493 fHistMultiplicityTRKForTrigEvt ->Fill( lMultiplicityTRK );
2494 fHistMultiplicitySPDForTrigEvt ->Fill( lMultiplicitySPD );
2496 //------------------------------------------------
2497 // Getting: Primary Vertex + MagField Info
2498 //------------------------------------------------
2500 const AliESDVertex *lPrimaryTrackingESDVtx = lESDevent->GetPrimaryVertexTracks();
2501 // get the vtx stored in ESD found with tracks
2502 lPrimaryTrackingESDVtx->GetXYZ( lTrkgPrimaryVtxPos );
2504 const AliESDVertex *lPrimaryBestESDVtx = lESDevent->GetPrimaryVertex();
2505 // get the best primary vertex available for the event
2506 // As done in AliCascadeVertexer, we keep the one which is the best one available.
2507 // between : Tracking vertex > SPD vertex > TPC vertex > default SPD vertex
2508 // This one will be used for next calculations (DCA essentially)
2509 lPrimaryBestESDVtx->GetXYZ( lBestPrimaryVtxPos );
2511 Double_t lPrimaryVtxPosition[3];
2512 const AliVVertex *primaryVtx = lESDevent->GetPrimaryVertex();
2513 lPrimaryVtxPosition[0] = primaryVtx->GetX();
2514 lPrimaryVtxPosition[1] = primaryVtx->GetY();
2515 lPrimaryVtxPosition[2] = primaryVtx->GetZ();
2516 fHistPVx->Fill( lPrimaryVtxPosition[0] );
2517 fHistPVy->Fill( lPrimaryVtxPosition[1] );
2518 fHistPVz->Fill( lPrimaryVtxPosition[2] );
2520 f2dHistMultiplicityVsVertexZForTrigEvt->Fill( lMultiplicity, lPrimaryVtxPosition[2] );
2522 //------------------------------------------------
2523 // Primary Vertex Requirements Section:
2524 // ---> pp and PbPb: Only requires |z|<10cm
2525 // ---> pPb: all requirements checked at this stage
2526 //------------------------------------------------
2528 //Roberto's PV selection criteria, implemented 17th April 2013
2530 /* vertex selection */
2531 Bool_t fHasVertex = kFALSE;
2533 const AliESDVertex *vertex = lESDevent->GetPrimaryVertexTracks();
2534 if (vertex->GetNContributors() < 1) {
2535 vertex = lESDevent->GetPrimaryVertexSPD();
2536 if (vertex->GetNContributors() < 1) fHasVertex = kFALSE;
2537 else fHasVertex = kTRUE;
2538 TString vtxTyp = vertex->GetTitle();
2539 Double_t cov[6]={0};
2540 vertex->GetCovarianceMatrix(cov);
2541 Double_t zRes = TMath::Sqrt(cov[5]);
2542 if (vtxTyp.Contains("vertexer:Z") && (zRes>0.25)) fHasVertex = kFALSE;
2544 else fHasVertex = kTRUE;
2546 //Is First event in chunk rejection: Still present!
2547 if(fkpAVertexSelection==kTRUE && fHasVertex == kFALSE) {
2548 AliWarning("Pb / | PV does not satisfy selection criteria!");
2549 PostData(1, fListHistV0);
2554 //Is First event in chunk rejection: Still present!
2555 if(fkpAVertexSelection==kTRUE && fUtils->IsFirstEventInChunk(lESDevent)) {
2556 AliWarning("Pb / | This is the first event in the chunk!");
2557 PostData(1, fListHistV0);
2562 //17 April Fix: Always do primary vertex Z selection, after pA vertex selection from Roberto
2563 if(TMath::Abs(lBestPrimaryVtxPos[2]) > 10.0) {
2564 AliWarning("Pb / | Z position of Best Prim Vtx | > 10.0 cm ... return !");
2565 PostData(1, fListHistV0);
2570 f2dHistMultiplicityVsVertexZ->Fill( lMultiplicity, lPrimaryVtxPosition[2] );
2572 lMagneticField = lESDevent->GetMagneticField( );
2573 fHistV0MultiplicityForSelEvt ->Fill( lNumberOfV0s );
2574 fHistMultiplicity->Fill(lMultiplicity);
2575 fHistMultiplicityV0A->Fill(lMultiplicityV0A);
2576 fHistMultiplicityZNA->Fill(lMultiplicityZNA);
2577 fHistMultiplicityTRK->Fill(lMultiplicityTRK);
2578 fHistMultiplicitySPD->Fill(lMultiplicitySPD);
2579 f2dHistMultiplicityVsTrue->Fill ( lMultiplicity , lNumberOfCharged );
2580 fHistGenVertexZ->Fill( (mcPrimaryVtx.At(2)) );
2581 //------------------------------------------------
2582 // SKIP: Events with well-established PVtx
2583 //------------------------------------------------
2585 const AliESDVertex *lPrimaryTrackingESDVtxCheck = lESDevent->GetPrimaryVertexTracks();
2586 const AliESDVertex *lPrimarySPDVtx = lESDevent->GetPrimaryVertexSPD();
2587 if (!lPrimarySPDVtx->GetStatus() && !lPrimaryTrackingESDVtxCheck->GetStatus() && fkpAVertexSelection == kFALSE){
2588 AliWarning("Pb / No SPD prim. vertex nor prim. Tracking vertex ... return !");
2589 PostData(1, fListHistV0);
2594 f2dHistMultiplicityVsVertexZNoTPCOnly->Fill( lMultiplicity, lPrimaryVtxPosition[2] );
2595 fHistV0MultiplicityForSelEvtNoTPCOnly ->Fill( lNumberOfV0s );
2596 fHistMultiplicityNoTPCOnly->Fill(lMultiplicity);
2597 fHistMultiplicityV0ANoTPCOnly->Fill(lMultiplicityV0A);
2598 fHistMultiplicityZNANoTPCOnly->Fill(lMultiplicityZNA);
2599 fHistMultiplicityTRKNoTPCOnly->Fill(lMultiplicityTRK);
2600 fHistMultiplicitySPDNoTPCOnly->Fill(lMultiplicitySPD);
2601 f2dHistMultiplicityVsTrueNoTPCOnly->Fill ( lMultiplicity , lNumberOfCharged );
2602 fHistGenVertexZNoTPCOnly->Fill( (mcPrimaryVtx.At(2)) );
2603 //------------------------------------------------
2604 // Pileup Rejection Studies
2605 //------------------------------------------------
2607 // FIXME : quality selection regarding pile-up rejection
2608 if(lESDevent->IsPileupFromSPD() && !fkIsNuclear && fkRejectPileup ){// minContributors=3, minZdist=0.8, nSigmaZdist=3., nSigmaDiamXY=2., nSigmaDiamZ=5. -> see http://alisoft.cern.ch/viewvc/trunk/STEER/AliESDEvent.h?root=AliRoot&r1=41914&r2=42199&pathrev=42199
2609 AliWarning("Pb / This is tagged as Pileup from SPD... return !");
2610 PostData(1, fListHistV0);
2614 f2dHistMultiplicityVsVertexZNoTPCOnlyNoPileup->Fill( lMultiplicity, lPrimaryVtxPosition[2] );
2615 fHistV0MultiplicityForSelEvtNoTPCOnlyNoPileup ->Fill( lNumberOfV0s );
2617 fHistMultiplicityNoTPCOnlyNoPileup->Fill(lMultiplicity);
2618 fHistMultiplicityV0ANoTPCOnlyNoPileup->Fill(lMultiplicityV0A);
2619 fHistMultiplicityZNANoTPCOnlyNoPileup->Fill(lMultiplicityZNA);
2620 fHistMultiplicityTRKNoTPCOnlyNoPileup->Fill(lMultiplicityTRK);
2621 fHistMultiplicitySPDNoTPCOnlyNoPileup->Fill(lMultiplicitySPD);
2623 f2dHistMultiplicityVsTrueNoTPCOnlyNoPileup->Fill ( lMultiplicity , lNumberOfCharged );
2624 fHistGenVertexZNoTPCOnlyNoPileup->Fill( (mcPrimaryVtx.At(2)) );
2625 //Do control histograms without the IsFromVertexerZ events, but consider them in analysis...
2626 if( ! (lESDevent->GetPrimaryVertex()->IsFromVertexerZ() ) ){
2627 fHistPVxAnalysis->Fill( lPrimaryVtxPosition[0] );
2628 fHistPVyAnalysis->Fill( lPrimaryVtxPosition[1] );
2629 fHistPVzAnalysis->Fill( lPrimaryVtxPosition[2] );
2630 if ( lHasHighPtLambda == kTRUE ){
2631 fHistPVxAnalysisHasHighPtLambda->Fill( lPrimaryVtxPosition[0] );
2632 fHistPVyAnalysisHasHighPtLambda->Fill( lPrimaryVtxPosition[1] );
2633 fHistPVzAnalysisHasHighPtLambda->Fill( lPrimaryVtxPosition[2] );
2637 fTreeVariableVertexZ = lPrimaryVtxPosition[2];
2639 fTreeVariablePVx = lPrimaryVtxPosition[0];
2640 fTreeVariablePVy = lPrimaryVtxPosition[1];
2641 fTreeVariablePVz = lPrimaryVtxPosition[2];
2643 fTreeVariableMCPVx = (mcPrimaryVtx.At(0));
2644 fTreeVariableMCPVy = (mcPrimaryVtx.At(1));
2645 fTreeVariableMCPVz = (mcPrimaryVtx.At(2));
2647 //------------------------------------------------
2648 // stack loop starts here
2649 //------------------------------------------------
2651 //---> Loop over ALL PARTICLES
2653 for (Int_t iMc = 0; iMc < (lMCstack->GetNtrack()); iMc++) {
2654 TParticle *p0 = lMCstack->Particle(iMc);
2656 //Printf("ERROR: particle with label %d not found in lMCstack (mc loop)", iMc);
2659 lPdgcodeCurrentPart = p0->GetPdgCode();
2661 // Keep only K0s, Lambda and AntiLambda:
2662 if ( (lPdgcodeCurrentPart != 310 ) && (lPdgcodeCurrentPart != 3122 ) && (lPdgcodeCurrentPart != -3122 ) && (TMath::Abs(lPdgcodeCurrentPart) != 321 ) ) continue;
2664 lRapCurrentPart = MyRapidity(p0->Energy(),p0->Pz());
2665 lPtCurrentPart = p0->Pt();
2667 //Use Physical Primaries only for filling PrimRaw Histograms!
2668 if ( lMCstack->IsPhysicalPrimary(iMc)!=kTRUE ) continue;
2670 if( lPdgcodeCurrentPart == 3122 ){
2672 f3dHistPrimAnalysisPtVsYVsMultLambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicity);
2673 f3dHistPrimAnalysisPtVsYCMSVsMultLambda->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicity);
2675 f3dHistPrimAnalysisPtVsYVsMultMCLambda->Fill(lPtCurrentPart, lRapCurrentPart, lNumberOfCharged);
2676 f3dHistPrimAnalysisPtVsYCMSVsMultMCLambda->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lNumberOfCharged);
2678 f3dHistPrimAnalysisPtVsYVsMultV0ALambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicityV0A);
2679 f3dHistPrimAnalysisPtVsYCMSVsMultV0ALambda->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicityV0A);
2680 f3dHistPrimAnalysisPtVsYVsMultZNALambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicityZNA);
2681 f3dHistPrimAnalysisPtVsYCMSVsMultZNALambda->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicityZNA);
2682 f3dHistPrimAnalysisPtVsYVsMultTRKLambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicityTRK);
2683 f3dHistPrimAnalysisPtVsYCMSVsMultTRKLambda->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicityTRK);
2684 f3dHistPrimAnalysisPtVsYVsMultSPDLambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicitySPD);
2685 f3dHistPrimAnalysisPtVsYCMSVsMultSPDLambda->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicitySPD);
2687 if( lPdgcodeCurrentPart == -3122 ){
2689 f3dHistPrimAnalysisPtVsYVsMultAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicity);
2690 f3dHistPrimAnalysisPtVsYCMSVsMultAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicity);
2692 f3dHistPrimAnalysisPtVsYVsMultMCAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart, lNumberOfCharged);
2693 f3dHistPrimAnalysisPtVsYCMSVsMultMCAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lNumberOfCharged);
2695 f3dHistPrimAnalysisPtVsYVsMultV0AAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicityV0A);
2696 f3dHistPrimAnalysisPtVsYCMSVsMultV0AAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicityV0A);
2697 f3dHistPrimAnalysisPtVsYVsMultZNAAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicityZNA);
2698 f3dHistPrimAnalysisPtVsYCMSVsMultZNAAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicityZNA);
2699 f3dHistPrimAnalysisPtVsYVsMultTRKAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicityTRK);
2700 f3dHistPrimAnalysisPtVsYCMSVsMultTRKAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicityTRK);
2701 f3dHistPrimAnalysisPtVsYVsMultSPDAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicitySPD);
2702 f3dHistPrimAnalysisPtVsYCMSVsMultSPDAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicitySPD);
2705 if( lPdgcodeCurrentPart == 310 ){
2707 f3dHistPrimAnalysisPtVsYVsMultK0Short->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicity);
2708 f3dHistPrimAnalysisPtVsYCMSVsMultK0Short->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicity);
2710 f3dHistPrimAnalysisPtVsYVsMultMCK0Short->Fill(lPtCurrentPart, lRapCurrentPart, lNumberOfCharged);
2711 f3dHistPrimAnalysisPtVsYCMSVsMultMCK0Short->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lNumberOfCharged);
2713 f3dHistPrimAnalysisPtVsYVsMultV0AK0Short->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicityV0A);
2714 f3dHistPrimAnalysisPtVsYCMSVsMultV0AK0Short->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicityV0A);
2715 f3dHistPrimAnalysisPtVsYVsMultZNAK0Short->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicityZNA);
2716 f3dHistPrimAnalysisPtVsYCMSVsMultZNAK0Short->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicityZNA);
2717 f3dHistPrimAnalysisPtVsYVsMultTRKK0Short->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicityTRK);
2718 f3dHistPrimAnalysisPtVsYCMSVsMultTRKK0Short->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicityTRK);
2719 f3dHistPrimAnalysisPtVsYVsMultSPDK0Short->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicitySPD);
2720 f3dHistPrimAnalysisPtVsYCMSVsMultSPDK0Short->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicitySPD);
2722 //Cross-check with Charged Kaons...
2723 if( lPdgcodeCurrentPart == 321 ){
2725 f3dHistPrimAnalysisPtVsYCMSVsMultV0AKPlus->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicityV0A);
2727 if( lPdgcodeCurrentPart == -321 ){
2729 f3dHistPrimAnalysisPtVsYCMSVsMultV0AKMinus->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicityV0A);
2734 //----- Loop on primary Xi, Omega --------------------------------------------------------------
2735 for (Int_t iCurrentLabelStack = 0; iCurrentLabelStack < lNbMCPrimary; iCurrentLabelStack++)
2736 {// This is the begining of the loop on primaries
2738 TParticle* lCurrentParticlePrimary = 0x0;
2739 lCurrentParticlePrimary = lMCstack->Particle( iCurrentLabelStack );
2740 if(!lCurrentParticlePrimary){
2741 Printf("Cascade loop %d - MC TParticle pointer to current stack particle = 0x0 ! Skip ...\n", iCurrentLabelStack );
2744 if ( TMath::Abs(lCurrentParticlePrimary->GetPdgCode()) == 3312 || TMath::Abs(lCurrentParticlePrimary->GetPdgCode()) == 3334 ) {
2745 Double_t lRapXiMCPrimary = -100;
2746 if( (lCurrentParticlePrimary->Energy() - lCurrentParticlePrimary->Pz() +1.e-13) != 0 ) {
2747 if ( (lCurrentParticlePrimary->Energy() + lCurrentParticlePrimary->Pz()) / (lCurrentParticlePrimary->Energy() - lCurrentParticlePrimary->Pz() +1.e-13) !=0 ){
2748 lRapXiMCPrimary = 0.5*TMath::Log( (lCurrentParticlePrimary->Energy() + lCurrentParticlePrimary->Pz()) / (lCurrentParticlePrimary->Energy() - lCurrentParticlePrimary->Pz() +1.e-13) );
2752 //=================================================================================
2754 if( lCurrentParticlePrimary->GetPdgCode() == 3312 ){
2755 lPtCurrentPart = lCurrentParticlePrimary->Pt();
2756 f3dHistGenSelectedPtVsYVsMultXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicity);
2757 f3dHistGenSelectedPtVsYCMSVsMultXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicity);
2758 f3dHistGenSelectedPtVsYVsMultV0AXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicityV0A);
2759 f3dHistGenSelectedPtVsYCMSVsMultV0AXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicityV0A);
2760 f3dHistGenSelectedPtVsYVsMultZNAXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicityZNA);
2761 f3dHistGenSelectedPtVsYCMSVsMultZNAXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicityZNA);
2762 f3dHistGenSelectedPtVsYVsMultTRKXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicityTRK);
2763 f3dHistGenSelectedPtVsYCMSVsMultTRKXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicityTRK);
2764 f3dHistGenSelectedPtVsYVsMultSPDXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicitySPD);
2765 f3dHistGenSelectedPtVsYCMSVsMultSPDXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicitySPD);
2767 if( lCurrentParticlePrimary->GetPdgCode() == -3312 ){
2768 lPtCurrentPart = lCurrentParticlePrimary->Pt();
2769 f3dHistGenSelectedPtVsYVsMultXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicity);
2770 f3dHistGenSelectedPtVsYCMSVsMultXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicity);
2771 f3dHistGenSelectedPtVsYVsMultV0AXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicityV0A);
2772 f3dHistGenSelectedPtVsYCMSVsMultV0AXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicityV0A);
2773 f3dHistGenSelectedPtVsYVsMultZNAXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicityZNA);
2774 f3dHistGenSelectedPtVsYCMSVsMultZNAXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicityZNA);
2775 f3dHistGenSelectedPtVsYVsMultTRKXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicityTRK);
2776 f3dHistGenSelectedPtVsYCMSVsMultTRKXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicityTRK);
2777 f3dHistGenSelectedPtVsYVsMultSPDXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicitySPD);
2778 f3dHistGenSelectedPtVsYCMSVsMultSPDXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicitySPD);
2782 //----- End Loop on primary Xi, Omega ----------------------------------------------------------
2784 //------------------------------------------------
2785 // MAIN LAMBDA LOOP STARTS HERE
2786 //------------------------------------------------
2788 //Variable definition
2789 Int_t lOnFlyStatus = 0;
2790 Double_t lChi2V0 = 0;
2791 Double_t lDcaV0Daughters = 0, lDcaV0ToPrimVertex = 0;
2792 Double_t lDcaPosToPrimVertex = 0, lDcaNegToPrimVertex = 0;
2793 Double_t lV0CosineOfPointingAngle = 0;
2794 Double_t lV0Radius = 0, lPt = 0;
2795 Double_t lRapK0Short = 0, lRapLambda = 0;
2796 Double_t lInvMassK0s = 0, lInvMassLambda = 0, lInvMassAntiLambda = 0;
2797 Double_t lAlphaV0 = 0, lPtArmV0 = 0;
2798 Double_t fMinV0Pt = 0;
2799 Double_t fMaxV0Pt = 100;
2802 nv0s = lESDevent->GetNumberOfV0s();
2804 for (Int_t iV0 = 0; iV0 < nv0s; iV0++)
2805 {// This is the begining of the V0 loop
2806 AliESDv0 *v0 = ((AliESDEvent*)lESDevent)->GetV0(iV0);
2809 //---> Fix On-the-Fly candidates
2810 if( v0->GetParamN()->Charge() > 0 && v0->GetParamP()->Charge() < 0 ){
2811 fHistSwappedV0Counter -> Fill( 1 );
2813 fHistSwappedV0Counter -> Fill( 0 );
2815 if ( fkUseOnTheFly ) CheckChargeV0(v0);
2819 v0->GetPxPyPz( tV0mom[0],tV0mom[1],tV0mom[2] );
2820 Double_t lV0TotalMomentum = TMath::Sqrt(
2821 tV0mom[0]*tV0mom[0]+tV0mom[1]*tV0mom[1]+tV0mom[2]*tV0mom[2] );
2823 Double_t tDecayVertexV0[3]; v0->GetXYZ(tDecayVertexV0[0],tDecayVertexV0[1],tDecayVertexV0[2]);
2824 lV0Radius = TMath::Sqrt(tDecayVertexV0[0]*tDecayVertexV0[0]+tDecayVertexV0[1]*tDecayVertexV0[1]);
2826 lRapK0Short = v0->RapK0Short();
2827 lRapLambda = v0->RapLambda();
2829 //Set Variables for later filling
2830 fTreeVariableV0x = tDecayVertexV0[0];
2831 fTreeVariableV0y = tDecayVertexV0[1];
2832 fTreeVariableV0z = tDecayVertexV0[2];
2834 //Set Variables for later filling
2835 fTreeVariableV0Px = tV0mom[0];
2836 fTreeVariableV0Py = tV0mom[1];
2837 fTreeVariableV0Pz = tV0mom[2];
2839 if ((lPt<fMinV0Pt)||(fMaxV0Pt<lPt)) continue;
2841 UInt_t lKeyPos = (UInt_t)TMath::Abs(v0->GetPindex());
2842 UInt_t lKeyNeg = (UInt_t)TMath::Abs(v0->GetNindex());
2844 Double_t lMomPos[3]; v0->GetPPxPyPz(lMomPos[0],lMomPos[1],lMomPos[2]);
2845 Double_t lMomNeg[3]; v0->GetNPxPyPz(lMomNeg[0],lMomNeg[1],lMomNeg[2]);
2847 AliESDtrack *pTrack=((AliESDEvent*)lESDevent)->GetTrack(lKeyPos);
2848 AliESDtrack *nTrack=((AliESDEvent*)lESDevent)->GetTrack(lKeyNeg);
2849 if (!pTrack || !nTrack) {
2850 Printf("ERROR: Could not retreive one of the daughter track");
2854 fTreeVariableNegEta = nTrack->Eta();
2855 fTreeVariablePosEta = pTrack->Eta();
2857 fTreeVariableNegPx = lMomNeg[0]; fTreeVariableNegPy = lMomNeg[1]; fTreeVariableNegPz = lMomNeg[2];
2858 fTreeVariablePosPx = lMomPos[0]; fTreeVariablePosPy = lMomPos[1]; fTreeVariablePosPz = lMomPos[2];
2860 // Filter like-sign V0 (next: add counter and distribution)
2861 if ( pTrack->GetSign() == nTrack->GetSign()){
2865 //________________________________________________________________________
2866 // Track quality cuts
2867 Float_t lPosTrackCrossedRows = pTrack->GetTPCClusterInfo(2,1);
2868 Float_t lNegTrackCrossedRows = nTrack->GetTPCClusterInfo(2,1);
2869 fTreeVariableLeastNbrCrossedRows = (Int_t) lPosTrackCrossedRows;
2870 if( lNegTrackCrossedRows < fTreeVariableLeastNbrCrossedRows )
2871 fTreeVariableLeastNbrCrossedRows = (Int_t) lNegTrackCrossedRows;
2873 // TPC refit condition (done during reconstruction for Offline but not for On-the-fly)
2874 if( !(pTrack->GetStatus() & AliESDtrack::kTPCrefit)) continue;
2875 if( !(nTrack->GetStatus() & AliESDtrack::kTPCrefit)) continue;
2878 fTreeVariablePosTrackStatus = pTrack->GetStatus();
2879 fTreeVariableNegTrackStatus = nTrack->GetStatus();
2881 if ( ( ( ( pTrack->GetTPCClusterInfo(2,1) ) < 70 ) || ( ( nTrack->GetTPCClusterInfo(2,1) ) < 70 ) )&&(fkTakeAllTracks==kFALSE) ) continue;
2883 //GetKinkIndex condition
2884 if( pTrack->GetKinkIndex(0)>0 || nTrack->GetKinkIndex(0)>0 ) continue;
2886 //Findable clusters > 0 condition
2887 if( pTrack->GetTPCNclsF()<=0 || nTrack->GetTPCNclsF()<=0 ) continue;
2889 //Compute ratio Crossed Rows / Findable clusters
2890 //Note: above test avoids division by zero!
2891 Float_t lPosTrackCrossedRowsOverFindable = -1;
2892 Float_t lNegTrackCrossedRowsOverFindable = -1;
2893 if ( ((double)(pTrack->GetTPCNclsF()) ) != 0 ) lPosTrackCrossedRowsOverFindable = lPosTrackCrossedRows / ((double)(pTrack->GetTPCNclsF()));
2894 if ( ((double)(nTrack->GetTPCNclsF()) ) != 0 ) lNegTrackCrossedRowsOverFindable = lNegTrackCrossedRows / ((double)(nTrack->GetTPCNclsF()));
2896 fTreeVariableLeastRatioCrossedRowsOverFindable = lPosTrackCrossedRowsOverFindable;
2897 if( lNegTrackCrossedRowsOverFindable < fTreeVariableLeastRatioCrossedRowsOverFindable )
2898 fTreeVariableLeastRatioCrossedRowsOverFindable = lNegTrackCrossedRowsOverFindable;
2900 //Lowest Cut Level for Ratio Crossed Rows / Findable = 0.8, set here
2901 if ( (fTreeVariableLeastRatioCrossedRowsOverFindable < 0.8)&&(fkTakeAllTracks==kFALSE) ) continue;
2903 //End track Quality Cuts
2904 //________________________________________________________________________
2906 lDcaPosToPrimVertex = TMath::Abs(pTrack->GetD(lPrimaryVtxPosition[0],
2907 lPrimaryVtxPosition[1],
2910 lDcaNegToPrimVertex = TMath::Abs(nTrack->GetD(lPrimaryVtxPosition[0],
2911 lPrimaryVtxPosition[1],
2914 lOnFlyStatus = v0->GetOnFlyStatus();
2915 lChi2V0 = v0->GetChi2V0();
2916 lDcaV0Daughters = v0->GetDcaV0Daughters();
2917 lDcaV0ToPrimVertex = v0->GetD(lPrimaryVtxPosition[0],lPrimaryVtxPosition[1],lPrimaryVtxPosition[2]);
2918 lV0CosineOfPointingAngle = v0->GetV0CosineOfPointingAngle(lPrimaryVtxPosition[0],lPrimaryVtxPosition[1],lPrimaryVtxPosition[2]);
2919 fTreeVariableDCAV0ToPrimVertex = lDcaV0ToPrimVertex;
2920 fTreeVariableV0CosineOfPointingAngle=lV0CosineOfPointingAngle;
2922 // Getting invariant mass infos directly from ESD
2923 v0->ChangeMassHypothesis(310);
2924 lInvMassK0s = v0->GetEffMass();
2925 v0->ChangeMassHypothesis(3122);
2926 lInvMassLambda = v0->GetEffMass();
2927 v0->ChangeMassHypothesis(-3122);
2928 lInvMassAntiLambda = v0->GetEffMass();
2929 lAlphaV0 = v0->AlphaV0();
2930 lPtArmV0 = v0->PtArmV0();
2932 //fTreeVariableOnFlyStatus = lOnFlyStatus;
2933 //fHistV0OnFlyStatus->Fill(lOnFlyStatus);
2935 //===============================================
2936 // Monte Carlo Association starts here
2937 //===============================================
2939 //---> Set Everything to "I don't know" before starting
2941 fTreeVariablePIDPositive = 0;
2942 fTreeVariablePIDNegative = 0;
2944 fTreeVariableIndexStatus = 0;
2945 fTreeVariableIndexStatusMother = 0;
2947 fTreeVariablePtMother = -1;
2948 fTreeVariablePtMC = -1;
2949 fTreeVariableRapMC = -100;
2951 fTreeVariablePID = -1;
2952 fTreeVariablePIDMother = -1;
2954 fTreeVariablePrimaryStatus = 0;
2955 fTreeVariablePrimaryStatusMother = 0;
2956 fTreeVariableV0CreationRadius = -1;
2958 fTreeVariableNegPhysicalStatus = 0;
2959 fTreeVariablePosPhysicalStatus = 0;
2961 Int_t lblPosV0Dghter = (Int_t) TMath::Abs( pTrack->GetLabel() );
2962 Int_t lblNegV0Dghter = (Int_t) TMath::Abs( nTrack->GetLabel() );
2964 TParticle* mcPosV0Dghter = lMCstack->Particle( lblPosV0Dghter );
2965 TParticle* mcNegV0Dghter = lMCstack->Particle( lblNegV0Dghter );
2967 fTreeVariablePosTransvMomentumMC = mcPosV0Dghter->Pt();
2968 fTreeVariableNegTransvMomentumMC = mcNegV0Dghter->Pt();
2970 Int_t lPIDPositive = mcPosV0Dghter -> GetPdgCode();
2971 Int_t lPIDNegative = mcNegV0Dghter -> GetPdgCode();
2973 fTreeVariablePIDPositive = lPIDPositive;
2974 fTreeVariablePIDNegative = lPIDNegative;
2976 Int_t lblMotherPosV0Dghter = mcPosV0Dghter->GetFirstMother() ;
2977 Int_t lblMotherNegV0Dghter = mcNegV0Dghter->GetFirstMother();
2979 if( lMCstack->IsPhysicalPrimary (lblNegV0Dghter) ) fTreeVariableNegPhysicalStatus = 1; //Is Primary!
2980 if( lMCstack->IsSecondaryFromWeakDecay(lblNegV0Dghter) ) fTreeVariableNegPhysicalStatus = 2; //Weak Decay!
2981 if( lMCstack->IsSecondaryFromMaterial (lblNegV0Dghter) ) fTreeVariableNegPhysicalStatus = 3; //Material Int!
2983 if( lMCstack->IsPhysicalPrimary (lblPosV0Dghter) ) fTreeVariablePosPhysicalStatus = 1; //Is Primary!
2984 if( lMCstack->IsSecondaryFromWeakDecay(lblPosV0Dghter) ) fTreeVariablePosPhysicalStatus = 2; //Weak Decay!
2985 if( lMCstack->IsSecondaryFromMaterial (lblPosV0Dghter) ) fTreeVariablePosPhysicalStatus = 3; //Material Int!
2987 if( lblMotherPosV0Dghter == lblMotherNegV0Dghter && lblMotherPosV0Dghter > -1 ){
2988 //either label is fine, they're equal at this stage
2989 TParticle* pThisV0 = lMCstack->Particle( lblMotherPosV0Dghter );
2990 //Set tree variables
2991 fTreeVariablePID = pThisV0->GetPdgCode(); //PDG Code
2992 fTreeVariablePtMC = pThisV0->Pt(); //Perfect Pt
2994 fTreeVariableIsNonInjected = lMCevent->IsFromBGEvent(lblMotherPosV0Dghter); //Is it?
2995 if (!fTreeVariableIsNonInjected){
2996 if (!(pThisV0->GetFirstMother()<0))
2997 {fTreeVariableIsNonInjected = kTRUE;} // because there are primaries (ALICE definition) not produced in the collision
3000 //Set Variables for later filling
3001 //Be careful: Vx, Vy, Vz: Creation vertex. So decay position is the
3002 //Creation vertex of any one of the daughters!
3003 fTreeVariableMCV0x = mcPosV0Dghter->Vx();
3004 fTreeVariableMCV0y = mcPosV0Dghter->Vy();
3005 fTreeVariableMCV0z = mcPosV0Dghter->Vz();
3007 //Set Variables for later filling
3008 fTreeVariableMCV0Px = pThisV0->Px();
3009 fTreeVariableMCV0Py = pThisV0->Py();
3010 fTreeVariableMCV0Pz = pThisV0->Pz();
3012 //Only Interested if it's a Lambda, AntiLambda or K0s
3013 //Avoid the Junction Bug! PYTHIA has particles with Px=Py=Pz=E=0 occasionally,
3014 //having particle code 88 (unrecognized by PDG), for documentation purposes.
3015 //Even ROOT's TParticle::Y() is not prepared to deal with that exception!
3016 //Note that TParticle::Pt() is immune (that would just return 0)...
3017 //Though granted that that should be extremely rare in this precise condition...
3018 if( TMath::Abs(fTreeVariablePID) == 3122 || fTreeVariablePID==310 ){
3019 fTreeVariableRapMC = pThisV0->Y(); //Perfect Y
3021 fTreeVariableV0CreationRadius = TMath::Sqrt(
3022 TMath::Power( ( (mcPrimaryVtx.At(0)) - (pThisV0->Vx()) ) , 2) +
3023 TMath::Power( ( (mcPrimaryVtx.At(1)) - (pThisV0->Vy()) ) , 2) +
3024 TMath::Power( ( (mcPrimaryVtx.At(2)) - (pThisV0->Vz()) ) , 2)
3026 if( lblMotherPosV0Dghter < lNbMCPrimary ) fTreeVariableIndexStatus = 1; //looks primary
3027 if( lblMotherPosV0Dghter >= lNbMCPrimary ) fTreeVariableIndexStatus = 2; //looks secondary
3028 if( lMCstack->IsPhysicalPrimary (lblMotherPosV0Dghter) ) fTreeVariablePrimaryStatus = 1; //Is Primary!
3029 if( lMCstack->IsSecondaryFromWeakDecay(lblMotherPosV0Dghter) ) fTreeVariablePrimaryStatus = 2; //Weak Decay!
3030 if( lMCstack->IsSecondaryFromMaterial (lblMotherPosV0Dghter) ) fTreeVariablePrimaryStatus = 3; //Material Int!
3032 //Now we try to acquire the V0 parent particle, if possible
3033 Int_t lblThisV0Parent = pThisV0->GetFirstMother();
3034 if ( lblThisV0Parent > -1 ){ //if it has a parent, get it and store specs
3035 TParticle* pThisV0Parent = lMCstack->Particle( lblThisV0Parent );
3036 fTreeVariablePIDMother = pThisV0Parent->GetPdgCode(); //V0 Mother PDG
3037 fTreeVariablePtMother = pThisV0Parent->Pt(); //V0 Mother Pt
3038 //Primary Status for the V0 Mother particle
3039 if( lblThisV0Parent < lNbMCPrimary ) fTreeVariableIndexStatusMother = 1; //looks primary
3040 if( lblThisV0Parent >= lNbMCPrimary ) fTreeVariableIndexStatusMother = 2; //looks secondary
3041 if( lMCstack->IsPhysicalPrimary (lblThisV0Parent) ) fTreeVariablePrimaryStatusMother = 1; //Is Primary!
3042 if( lMCstack->IsSecondaryFromWeakDecay(lblThisV0Parent) ) fTreeVariablePrimaryStatusMother = 2; //Weak Decay!
3043 if( lMCstack->IsSecondaryFromMaterial (lblThisV0Parent) ) fTreeVariablePrimaryStatusMother = 3; //Material Int!
3047 fTreeVariablePt = v0->Pt();
3048 fTreeVariableChi2V0 = lChi2V0;
3049 fTreeVariableDcaV0ToPrimVertex = lDcaV0ToPrimVertex;
3050 fTreeVariableDcaV0Daughters = lDcaV0Daughters;
3051 fTreeVariableV0CosineOfPointingAngle = lV0CosineOfPointingAngle;
3052 fTreeVariableV0Radius = lV0Radius;
3053 fTreeVariableDcaPosToPrimVertex = lDcaPosToPrimVertex;
3054 fTreeVariableDcaNegToPrimVertex = lDcaNegToPrimVertex;
3055 fTreeVariableInvMassK0s = lInvMassK0s;
3056 fTreeVariableInvMassLambda = lInvMassLambda;
3057 fTreeVariableInvMassAntiLambda = lInvMassAntiLambda;
3058 fTreeVariableRapK0Short = lRapK0Short;
3060 fTreeVariableRapLambda = lRapLambda;
3061 fTreeVariableAlphaV0 = lAlphaV0;
3062 fTreeVariablePtArmV0 = lPtArmV0;
3064 if( fkDoNotCallTPCdEdx == kFALSE ){
3065 //Official means of acquiring N-sigmas
3066 fTreeVariableNSigmasPosProton = fPIDResponse->NumberOfSigmasTPC( pTrack, AliPID::kProton );
3067 fTreeVariableNSigmasPosPion = fPIDResponse->NumberOfSigmasTPC( pTrack, AliPID::kPion );
3068 fTreeVariableNSigmasNegProton = fPIDResponse->NumberOfSigmasTPC( nTrack, AliPID::kProton );
3069 fTreeVariableNSigmasNegPion = fPIDResponse->NumberOfSigmasTPC( nTrack, AliPID::kPion );
3071 fTreeVariableNSigmasPosProton = 0;
3072 fTreeVariableNSigmasPosPion = 0;
3073 fTreeVariableNSigmasNegProton = 0;
3074 fTreeVariableNSigmasNegPion = 0;
3077 //tDecayVertexV0[0],tDecayVertexV0[1],tDecayVertexV0[2]
3078 Double_t lDistanceTravelled = TMath::Sqrt(
3079 TMath::Power( tDecayVertexV0[0] - lBestPrimaryVtxPos[0] , 2) +
3080 TMath::Power( tDecayVertexV0[1] - lBestPrimaryVtxPos[1] , 2) +
3081 TMath::Power( tDecayVertexV0[2] - lBestPrimaryVtxPos[2] , 2)
3083 fTreeVariableDistOverTotMom = 1e+5;
3084 if( lV0TotalMomentum + 1e-10 != 0 ) fTreeVariableDistOverTotMom = lDistanceTravelled / (lV0TotalMomentum + 1e-10); //avoid division by zero, to be sure
3086 Double_t lMomentumPosTemp[3];
3087 pTrack->GetPxPyPz(lMomentumPosTemp);
3088 Double_t lPtPosTemporary = sqrt(pow(lMomentumPosTemp[0],2) + pow(lMomentumPosTemp[1],2));
3090 Double_t lMomentumNegTemp[3];
3091 nTrack->GetPxPyPz(lMomentumNegTemp);
3092 Double_t lPtNegTemporary = sqrt(pow(lMomentumNegTemp[0],2) + pow(lMomentumNegTemp[1],2));
3094 fTreeVariablePosTransvMomentum = lPtPosTemporary;
3095 fTreeVariableNegTransvMomentum = lPtNegTemporary;
3098 //------------------------------------------------
3100 //------------------------------------------------
3102 // The conditionals are meant to decrease excessive
3105 //Modified version: Keep only OnFlyStatus == 0
3106 //Keep only if included in a parametric InvMass Region 20 sigmas away from peak
3108 //First Selection: Reject OnFly
3109 if( (lOnFlyStatus == 0 && fkUseOnTheFly == kFALSE) || (lOnFlyStatus != 0 && fkUseOnTheFly == kTRUE ) ){
3110 //Second Selection: rough 20-sigma band, parametric.
3111 //K0Short: Enough to parametrize peak broadening with linear function.
3112 Double_t lUpperLimitK0Short = (5.63707e-01) + (1.14979e-02)*fTreeVariablePt;
3113 Double_t lLowerLimitK0Short = (4.30006e-01) - (1.10029e-02)*fTreeVariablePt;
3114 //Lambda: Linear (for higher pt) plus exponential (for low-pt broadening)
3115 //[0]+[1]*x+[2]*TMath::Exp(-[3]*x)
3116 Double_t lUpperLimitLambda = (1.13688e+00) + (5.27838e-03)*fTreeVariablePt + (8.42220e-02)*TMath::Exp(-(3.80595e+00)*fTreeVariablePt);
3117 Double_t lLowerLimitLambda = (1.09501e+00) - (5.23272e-03)*fTreeVariablePt - (7.52690e-02)*TMath::Exp(-(3.46339e+00)*fTreeVariablePt);
3119 if( (fTreeVariableInvMassLambda < lUpperLimitLambda && fTreeVariableInvMassLambda > lLowerLimitLambda ) ||
3120 (fTreeVariableInvMassAntiLambda < lUpperLimitLambda && fTreeVariableInvMassAntiLambda > lLowerLimitLambda ) ||
3121 (fTreeVariableInvMassK0s < lUpperLimitK0Short && fTreeVariableInvMassK0s > lLowerLimitK0Short ) ){
3122 //Pre-selection in case this is AA...
3123 if( fkIsNuclear == kFALSE && fkSpecialExecution == kFALSE ) fTree->Fill();
3124 if( fkIsNuclear == kTRUE){
3125 //If this is a nuclear collision___________________
3126 // ... pre-filter with daughter eta selection only (not TPC)
3127 if ( TMath::Abs(fTreeVariableNegEta)<0.8 && TMath::Abs(fTreeVariablePosEta)<0.8 && fkSpecialExecution == kFALSE ){
3128 if( !fkSaveAssociatedOnly || (fkSaveAssociatedOnly &&( TMath::Abs(fTreeVariablePID) == 3122 || fTreeVariablePID==310 ) ))fTree->Fill();
3130 }//end nuclear_____________________________________
3133 //Special Execution: hypertriton exploration
3134 if( lOnFlyStatus == 0 && fkSpecialExecution == kTRUE){
3135 if ( TMath::Abs(fTreeVariableNegEta)<0.8 && TMath::Abs(fTreeVariablePosEta)<0.8 ){
3136 if( !fkSaveAssociatedOnly || (fkSaveAssociatedOnly &&( TMath::Abs(fTreeVariablePID) == 1010010030 ) ) ) fTree->Fill();
3140 //------------------------------------------------
3142 //------------------------------------------------
3145 }// This is the end of the V0 loop
3147 //------------------------------------------------
3149 // Post output data.
3150 PostData(1, fListHistV0);
3154 //________________________________________________________________________
3155 void AliAnalysisTaskExtractPerformanceV0::Terminate(Option_t *)
3157 // Draw result to the screen
3158 // Called once at the end of the query
3160 TList *cRetrievedList = 0x0;
3161 cRetrievedList = (TList*)GetOutputData(1);
3162 if(!cRetrievedList){
3163 Printf("ERROR - AliAnalysisTaskExtractV0 : ouput data container list not available\n");
3167 fHistV0MultiplicityForTrigEvt = dynamic_cast<TH1F*> ( cRetrievedList->FindObject("fHistV0MultiplicityForTrigEvt") );
3168 if (!fHistV0MultiplicityForTrigEvt) {
3169 Printf("ERROR - AliAnalysisTaskExtractV0 : fHistV0MultiplicityForTrigEvt not available");
3173 TCanvas *canCheck = new TCanvas("AliAnalysisTaskExtractV0","V0 Multiplicity",10,10,510,510);
3174 canCheck->cd(1)->SetLogy();
3176 fHistV0MultiplicityForTrigEvt->SetMarkerStyle(22);
3177 fHistV0MultiplicityForTrigEvt->DrawCopy("E");
3180 //----------------------------------------------------------------------------
3182 Double_t AliAnalysisTaskExtractPerformanceV0::MyRapidity(Double_t rE, Double_t rPz) const
3184 // Local calculation for rapidity
3185 Double_t ReturnValue = -100;
3186 if( (rE-rPz+1.e-13) != 0 && (rE+rPz) != 0 ){
3187 ReturnValue = 0.5*TMath::Log((rE+rPz)/(rE-rPz+1.e-13));
3192 //________________________________________________________________________
3193 void AliAnalysisTaskExtractPerformanceV0::CheckChargeV0(AliESDv0 *v0)
3195 // This function checks charge of negative and positive daughter tracks.
3196 // If incorrectly defined (onfly vertexer), swaps out.
3197 if( v0->GetParamN()->Charge() > 0 && v0->GetParamP()->Charge() < 0 ){
3198 //V0 daughter track swapping is required! Note: everything is swapped here... P->N, N->P
3199 Long_t lCorrectNidx = v0->GetPindex();
3200 Long_t lCorrectPidx = v0->GetNindex();
3201 Double32_t lCorrectNmom[3];
3202 Double32_t lCorrectPmom[3];
3203 v0->GetPPxPyPz( lCorrectNmom[0], lCorrectNmom[1], lCorrectNmom[2] );
3204 v0->GetNPxPyPz( lCorrectPmom[0], lCorrectPmom[1], lCorrectPmom[2] );
3206 AliExternalTrackParam lCorrectParamN(
3207 v0->GetParamP()->GetX() ,
3208 v0->GetParamP()->GetAlpha() ,
3209 v0->GetParamP()->GetParameter() ,
3210 v0->GetParamP()->GetCovariance()
3212 AliExternalTrackParam lCorrectParamP(
3213 v0->GetParamN()->GetX() ,
3214 v0->GetParamN()->GetAlpha() ,
3215 v0->GetParamN()->GetParameter() ,
3216 v0->GetParamN()->GetCovariance()
3218 lCorrectParamN.SetMostProbablePt( v0->GetParamP()->GetMostProbablePt() );
3219 lCorrectParamP.SetMostProbablePt( v0->GetParamN()->GetMostProbablePt() );
3221 //Get Variables___________________________________________________
3222 Double_t lDcaV0Daughters = v0 -> GetDcaV0Daughters();
3223 Double_t lCosPALocal = v0 -> GetV0CosineOfPointingAngle();
3224 Bool_t lOnFlyStatusLocal = v0 -> GetOnFlyStatus();
3226 //Create Replacement Object_______________________________________
3227 AliESDv0 *v0correct = new AliESDv0(lCorrectParamN,lCorrectNidx,lCorrectParamP,lCorrectPidx);
3228 v0correct->SetDcaV0Daughters ( lDcaV0Daughters );
3229 v0correct->SetV0CosineOfPointingAngle ( lCosPALocal );
3230 v0correct->ChangeMassHypothesis ( kK0Short );
3231 v0correct->SetOnFlyStatus ( lOnFlyStatusLocal );
3233 //Reverse Cluster info..._________________________________________
3234 v0correct->SetClusters( v0->GetClusters( 1 ), v0->GetClusters ( 0 ) );
3237 //Proper cleanup..._______________________________________________
3238 v0correct->Delete();
3241 //Just another cross-check and output_____________________________
3242 if( v0->GetParamN()->Charge() > 0 && v0->GetParamP()->Charge() < 0 ) {
3243 AliWarning("Found Swapped Charges, tried to correct but something FAILED!");
3245 //AliWarning("Found Swapped Charges and fixed.");
3247 //________________________________________________________________
3249 //Don't touch it! ---
3250 //Printf("Ah, nice. Charges are already ordered...");