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"
97 ClassImp(AliAnalysisTaskExtractPerformanceV0)
99 AliAnalysisTaskExtractPerformanceV0::AliAnalysisTaskExtractPerformanceV0()
100 : AliAnalysisTaskSE(), fListHistV0(0), fTree(0), fPIDResponse(0), fESDtrackCuts(0), fUtils(0),
101 fkIsNuclear ( kFALSE ),
102 fkSwitchINT7 ( kFALSE ),
103 fkUseOnTheFly ( kFALSE ),
104 fkTakeAllTracks ( kFALSE ),
105 fpArapidityShift ( 0.465 ),
106 fCentralityEstimator("V0M"),
107 fkLightWeight ( kFALSE ),
109 fkpAVertexSelection( kFALSE ),
110 fkRunV0Vertexer( kFALSE ),
111 fkRejectPileup ( kTRUE ),
112 fkSpecialExecution ( kFALSE),
113 fkSkipTrigger(kFALSE),
114 fkSaveAssociatedOnly (kFALSE),
115 fkDoNotCallTPCdEdx( kFALSE ),
116 //------------------------------------------------
119 fTreeVariablePrimaryStatus(0),
120 fTreeVariablePrimaryStatusMother(0),
121 fTreeVariableChi2V0(0),
122 fTreeVariableDcaV0Daughters(0),
123 fTreeVariableDcaV0ToPrimVertex(0),
124 fTreeVariableDcaPosToPrimVertex(0),
125 fTreeVariableDcaNegToPrimVertex(0),
126 fTreeVariableV0CosineOfPointingAngle(0),
127 fTreeVariableV0Radius(0),
129 fTreeVariablePtMC(0),
130 fTreeVariableRapK0Short(0),
131 fTreeVariableRapLambda(0),
132 fTreeVariableRapMC(0),
133 fTreeVariableInvMassK0s(0),
134 fTreeVariableInvMassLambda(0),
135 fTreeVariableInvMassAntiLambda(0),
136 fTreeVariableAlphaV0(0),
137 fTreeVariablePtArmV0(0),
138 fTreeVariableNegTotMomentum(0),
139 fTreeVariablePosTotMomentum(0),
140 fTreeVariableNegTransvMomentum(0),
141 fTreeVariablePosTransvMomentum(0),
142 fTreeVariableNegTransvMomentumMC(0),
143 fTreeVariablePosTransvMomentumMC(0),
145 fTreeVariableNSigmasPosProton(0),
146 fTreeVariableNSigmasPosPion(0),
147 fTreeVariableNSigmasNegProton(0),
148 fTreeVariableNSigmasNegPion(0),
150 fTreeVariablePtMother(0),
151 fTreeVariableV0CreationRadius(0),
153 fTreeVariablePIDPositive(0),
154 fTreeVariablePIDNegative(0),
155 fTreeVariablePIDMother(0),
156 fTreeVariableIndexStatus(0),
157 fTreeVariableIndexStatusMother(0),
159 fTreeVariableRunNumber(0),
160 fTreeVariableEventNumber(0),
162 fTreeVariableDistOverTotMom(0),
164 fTreeVariablePosEta(0),
165 fTreeVariableNegEta(0),
167 fTreeVariableVertexZ(0),
169 fTreeVariableLeastNbrCrossedRows(0),
170 fTreeVariableLeastRatioCrossedRowsOverFindable(0),
172 fTreeVariableMultiplicity(0),
173 fTreeVariableMultiplicityV0A(0),
174 fTreeVariableMultiplicityZNA(0),
175 fTreeVariableMultiplicityTRK(0),
176 fTreeVariableMultiplicitySPD(0),
177 fTreeVariableMultiplicityMC(0),
183 fTreeVariableV0Px(0),
184 fTreeVariableV0Py(0),
185 fTreeVariableV0Pz(0),
187 fTreeVariableMCV0x(0),
188 fTreeVariableMCV0y(0),
189 fTreeVariableMCV0z(0),
191 fTreeVariableMCV0Px(0),
192 fTreeVariableMCV0Py(0),
193 fTreeVariableMCV0Pz(0),
199 fTreeVariableMCPVx(0),
200 fTreeVariableMCPVy(0),
201 fTreeVariableMCPVz(0),
203 fTreeVariableIsNonInjected(0),
205 fTreeVariableNegTrackStatus(0),
206 fTreeVariablePosTrackStatus(0),
208 fTreeVariableNegPhysicalStatus(0),
209 fTreeVariablePosPhysicalStatus(0),
211 //------------------------------------------------
213 // --- Filled on an Event-by-event basis
214 //------------------------------------------------
215 fHistV0MultiplicityBeforeTrigSel(0),
216 fHistV0MultiplicityForTrigEvt(0),
217 fHistV0MultiplicityForSelEvt(0),
218 fHistV0MultiplicityForSelEvtNoTPCOnly(0),
219 fHistV0MultiplicityForSelEvtNoTPCOnlyNoPileup(0),
220 fHistMultiplicityBeforeTrigSel(0),
221 fHistMultiplicityForTrigEvt(0),
222 fHistMultiplicity(0),
223 fHistMultiplicityNoTPCOnly(0),
224 fHistMultiplicityNoTPCOnlyNoPileup(0),
227 fHistMultiplicityV0ABeforeTrigSel(0),
228 fHistMultiplicityV0AForTrigEvt(0),
229 fHistMultiplicityV0A(0),
230 fHistMultiplicityV0ANoTPCOnly(0),
231 fHistMultiplicityV0ANoTPCOnlyNoPileup(0),
234 fHistMultiplicityZNABeforeTrigSel(0),
235 fHistMultiplicityZNAForTrigEvt(0),
236 fHistMultiplicityZNA(0),
237 fHistMultiplicityZNANoTPCOnly(0),
238 fHistMultiplicityZNANoTPCOnlyNoPileup(0),
241 fHistMultiplicityTRKBeforeTrigSel(0),
242 fHistMultiplicityTRKForTrigEvt(0),
243 fHistMultiplicityTRK(0),
244 fHistMultiplicityTRKNoTPCOnly(0),
245 fHistMultiplicityTRKNoTPCOnlyNoPileup(0),
248 fHistMultiplicitySPDBeforeTrigSel(0),
249 fHistMultiplicitySPDForTrigEvt(0),
250 fHistMultiplicitySPD(0),
251 fHistMultiplicitySPDNoTPCOnly(0),
252 fHistMultiplicitySPDNoTPCOnlyNoPileup(0),
254 f2dHistMultiplicityVsTrueBeforeTrigSel(0),
255 f2dHistMultiplicityVsTrueForTrigEvt(0),
256 f2dHistMultiplicityVsTrue(0),
257 f2dHistMultiplicityVsTrueNoTPCOnly(0),
258 f2dHistMultiplicityVsTrueNoTPCOnlyNoPileup(0),
260 //Raw Data for Vertex Z position estimator change
261 f2dHistMultiplicityVsVertexZBeforeTrigSel(0),
262 f2dHistMultiplicityVsVertexZForTrigEvt(0),
263 f2dHistMultiplicityVsVertexZ(0),
264 f2dHistMultiplicityVsVertexZNoTPCOnly(0),
265 f2dHistMultiplicityVsVertexZNoTPCOnlyNoPileup(0),
267 fHistGenVertexZBeforeTrigSel(0),
268 fHistGenVertexZForTrigEvt(0),
270 fHistGenVertexZNoTPCOnly(0),
271 fHistGenVertexZNoTPCOnlyNoPileup(0),
273 //------------------------------------------------
274 // PARTICLE HISTOGRAMS
275 // --- Filled on a Particle-by-Particle basis
276 //------------------------------------------------
278 //Standard V0M / multiplicity
279 f3dHistPrimAnalysisPtVsYVsMultLambda(0),
280 f3dHistPrimAnalysisPtVsYVsMultAntiLambda(0),
281 f3dHistPrimAnalysisPtVsYVsMultK0Short(0),
282 f3dHistPrimAnalysisPtVsYCMSVsMultLambda(0),
283 f3dHistPrimAnalysisPtVsYCMSVsMultAntiLambda(0),
284 f3dHistPrimAnalysisPtVsYCMSVsMultK0Short(0),
287 f3dHistPrimAnalysisPtVsYVsMultMCLambda(0),
288 f3dHistPrimAnalysisPtVsYVsMultMCAntiLambda(0),
289 f3dHistPrimAnalysisPtVsYVsMultMCK0Short(0),
290 f3dHistPrimAnalysisPtVsYCMSVsMultMCLambda(0),
291 f3dHistPrimAnalysisPtVsYCMSVsMultMCAntiLambda(0),
292 f3dHistPrimAnalysisPtVsYCMSVsMultMCK0Short(0),
295 f3dHistPrimAnalysisPtVsYVsMultV0ALambda(0),
296 f3dHistPrimAnalysisPtVsYVsMultV0AAntiLambda(0),
297 f3dHistPrimAnalysisPtVsYVsMultV0AK0Short(0),
298 f3dHistPrimAnalysisPtVsYCMSVsMultV0ALambda(0),
299 f3dHistPrimAnalysisPtVsYCMSVsMultV0AAntiLambda(0),
300 f3dHistPrimAnalysisPtVsYCMSVsMultV0AK0Short(0),
303 f3dHistPrimAnalysisPtVsYVsMultZNALambda(0),
304 f3dHistPrimAnalysisPtVsYVsMultZNAAntiLambda(0),
305 f3dHistPrimAnalysisPtVsYVsMultZNAK0Short(0),
306 f3dHistPrimAnalysisPtVsYCMSVsMultZNALambda(0),
307 f3dHistPrimAnalysisPtVsYCMSVsMultZNAAntiLambda(0),
308 f3dHistPrimAnalysisPtVsYCMSVsMultZNAK0Short(0),
311 f3dHistPrimAnalysisPtVsYVsMultTRKLambda(0),
312 f3dHistPrimAnalysisPtVsYVsMultTRKAntiLambda(0),
313 f3dHistPrimAnalysisPtVsYVsMultTRKK0Short(0),
314 f3dHistPrimAnalysisPtVsYCMSVsMultTRKLambda(0),
315 f3dHistPrimAnalysisPtVsYCMSVsMultTRKAntiLambda(0),
316 f3dHistPrimAnalysisPtVsYCMSVsMultTRKK0Short(0),
319 f3dHistPrimAnalysisPtVsYVsMultSPDLambda(0),
320 f3dHistPrimAnalysisPtVsYVsMultSPDAntiLambda(0),
321 f3dHistPrimAnalysisPtVsYVsMultSPDK0Short(0),
322 f3dHistPrimAnalysisPtVsYCMSVsMultSPDLambda(0),
323 f3dHistPrimAnalysisPtVsYCMSVsMultSPDAntiLambda(0),
324 f3dHistPrimAnalysisPtVsYCMSVsMultSPDK0Short(0),
327 f3dHistPrimRawPtVsYVsMultLambda(0),
328 f3dHistPrimRawPtVsYVsMultAntiLambda(0),
329 f3dHistPrimRawPtVsYVsMultK0Short(0),
330 f3dHistPrimRawPtVsYCMSVsMultLambda(0),
331 f3dHistPrimRawPtVsYCMSVsMultAntiLambda(0),
332 f3dHistPrimRawPtVsYCMSVsMultK0Short(0),
335 f3dHistPrimRawPtVsYVsMultV0ALambda(0),
336 f3dHistPrimRawPtVsYVsMultV0AAntiLambda(0),
337 f3dHistPrimRawPtVsYVsMultV0AK0Short(0),
338 f3dHistPrimRawPtVsYCMSVsMultV0ALambda(0),
339 f3dHistPrimRawPtVsYCMSVsMultV0AAntiLambda(0),
340 f3dHistPrimRawPtVsYCMSVsMultV0AK0Short(0),
343 f3dHistPrimRawPtVsYVsMultZNALambda(0),
344 f3dHistPrimRawPtVsYVsMultZNAAntiLambda(0),
345 f3dHistPrimRawPtVsYVsMultZNAK0Short(0),
346 f3dHistPrimRawPtVsYCMSVsMultZNALambda(0),
347 f3dHistPrimRawPtVsYCMSVsMultZNAAntiLambda(0),
348 f3dHistPrimRawPtVsYCMSVsMultZNAK0Short(0),
351 f3dHistPrimRawPtVsYVsMultTRKLambda(0),
352 f3dHistPrimRawPtVsYVsMultTRKAntiLambda(0),
353 f3dHistPrimRawPtVsYVsMultTRKK0Short(0),
354 f3dHistPrimRawPtVsYCMSVsMultTRKLambda(0),
355 f3dHistPrimRawPtVsYCMSVsMultTRKAntiLambda(0),
356 f3dHistPrimRawPtVsYCMSVsMultTRKK0Short(0),
359 f3dHistPrimRawPtVsYVsMultSPDLambda(0),
360 f3dHistPrimRawPtVsYVsMultSPDAntiLambda(0),
361 f3dHistPrimRawPtVsYVsMultSPDK0Short(0),
362 f3dHistPrimRawPtVsYCMSVsMultSPDLambda(0),
363 f3dHistPrimRawPtVsYCMSVsMultSPDAntiLambda(0),
364 f3dHistPrimRawPtVsYCMSVsMultSPDK0Short(0),
366 f3dHistPrimRawPtVsYVsMultNonInjLambda(0),
367 f3dHistPrimRawPtVsYVsMultNonInjAntiLambda(0),
368 f3dHistPrimRawPtVsYVsMultNonInjK0Short(0),
369 f3dHistPrimRawPtVsYVsMultMCLambda(0),
370 f3dHistPrimRawPtVsYVsMultMCAntiLambda(0),
371 f3dHistPrimRawPtVsYVsMultMCK0Short(0),
372 f3dHistPrimRawPtVsYVsVertexZLambda(0),
373 f3dHistPrimRawPtVsYVsVertexZAntiLambda(0),
374 f3dHistPrimRawPtVsYVsVertexZK0Short(0),
375 f3dHistPrimCloseToPVPtVsYVsMultLambda(0),
376 f3dHistPrimCloseToPVPtVsYVsMultAntiLambda(0),
377 f3dHistPrimCloseToPVPtVsYVsMultK0Short(0),
378 f3dHistPrimRawPtVsYVsDecayLengthLambda(0),
379 f3dHistPrimRawPtVsYVsDecayLengthAntiLambda(0),
380 f3dHistPrimRawPtVsYVsDecayLengthK0Short(0),
383 f3dHistGenPtVsYVsMultXiMinus(0),
384 f3dHistGenPtVsYVsMultXiPlus(0),
385 f3dHistGenSelectedPtVsYVsMultXiMinus(0),
386 f3dHistGenSelectedPtVsYVsMultXiPlus(0),
387 f3dHistGenPtVsYCMSVsMultXiMinus(0),
388 f3dHistGenPtVsYCMSVsMultXiPlus(0),
389 f3dHistGenSelectedPtVsYCMSVsMultXiMinus(0),
390 f3dHistGenSelectedPtVsYCMSVsMultXiPlus(0),
393 f3dHistGenPtVsYVsMultV0AXiMinus(0),
394 f3dHistGenPtVsYVsMultV0AXiPlus(0),
395 f3dHistGenSelectedPtVsYVsMultV0AXiMinus(0),
396 f3dHistGenSelectedPtVsYVsMultV0AXiPlus(0),
397 f3dHistGenPtVsYCMSVsMultV0AXiMinus(0),
398 f3dHistGenPtVsYCMSVsMultV0AXiPlus(0),
399 f3dHistGenSelectedPtVsYCMSVsMultV0AXiMinus(0),
400 f3dHistGenSelectedPtVsYCMSVsMultV0AXiPlus(0),
403 f3dHistGenPtVsYVsMultZNAXiMinus(0),
404 f3dHistGenPtVsYVsMultZNAXiPlus(0),
405 f3dHistGenSelectedPtVsYVsMultZNAXiMinus(0),
406 f3dHistGenSelectedPtVsYVsMultZNAXiPlus(0),
407 f3dHistGenPtVsYCMSVsMultZNAXiMinus(0),
408 f3dHistGenPtVsYCMSVsMultZNAXiPlus(0),
409 f3dHistGenSelectedPtVsYCMSVsMultZNAXiMinus(0),
410 f3dHistGenSelectedPtVsYCMSVsMultZNAXiPlus(0),
413 f3dHistGenPtVsYVsMultTRKXiMinus(0),
414 f3dHistGenPtVsYVsMultTRKXiPlus(0),
415 f3dHistGenSelectedPtVsYVsMultTRKXiMinus(0),
416 f3dHistGenSelectedPtVsYVsMultTRKXiPlus(0),
417 f3dHistGenPtVsYCMSVsMultTRKXiMinus(0),
418 f3dHistGenPtVsYCMSVsMultTRKXiPlus(0),
419 f3dHistGenSelectedPtVsYCMSVsMultTRKXiMinus(0),
420 f3dHistGenSelectedPtVsYCMSVsMultTRKXiPlus(0),
423 f3dHistGenPtVsYVsMultSPDXiMinus(0),
424 f3dHistGenPtVsYVsMultSPDXiPlus(0),
425 f3dHistGenSelectedPtVsYVsMultSPDXiMinus(0),
426 f3dHistGenSelectedPtVsYVsMultSPDXiPlus(0),
427 f3dHistGenPtVsYCMSVsMultSPDXiMinus(0),
428 f3dHistGenPtVsYCMSVsMultSPDXiPlus(0),
429 f3dHistGenSelectedPtVsYCMSVsMultSPDXiMinus(0),
430 f3dHistGenSelectedPtVsYCMSVsMultSPDXiPlus(0),
438 fHistPVxAnalysisHasHighPtLambda(0),
439 fHistPVyAnalysisHasHighPtLambda(0),
440 fHistPVzAnalysisHasHighPtLambda(0),
441 fHistSwappedV0Counter(0)
444 for(Int_t iV0selIdx = 0; iV0selIdx < 7; iV0selIdx++ ) { fV0Sels [iV0selIdx ] = -1.; }
447 AliAnalysisTaskExtractPerformanceV0::AliAnalysisTaskExtractPerformanceV0(const char *name)
448 : AliAnalysisTaskSE(name), fListHistV0(0), fTree(0), fPIDResponse(0), fESDtrackCuts(0), fUtils(0),
449 fkIsNuclear ( kFALSE ),
450 fkSwitchINT7 ( kFALSE ),
451 fkUseOnTheFly ( kFALSE ),
452 fkTakeAllTracks ( kFALSE ),
453 fpArapidityShift ( 0.465 ),
454 fCentralityEstimator("V0M"),
455 fkLightWeight ( kFALSE ),
457 fkpAVertexSelection( kFALSE ),
458 fkRunV0Vertexer( kFALSE ),
459 fkRejectPileup ( kTRUE ),
460 fkSpecialExecution ( kFALSE),
461 fkSkipTrigger(kFALSE),
462 fkSaveAssociatedOnly (kFALSE),
463 fkDoNotCallTPCdEdx( kFALSE ),
464 //------------------------------------------------
467 fTreeVariablePrimaryStatus(0),
468 fTreeVariablePrimaryStatusMother(0),
469 fTreeVariableChi2V0(0),
470 fTreeVariableDcaV0Daughters(0),
471 fTreeVariableDcaV0ToPrimVertex(0),
472 fTreeVariableDcaPosToPrimVertex(0),
473 fTreeVariableDcaNegToPrimVertex(0),
474 fTreeVariableV0CosineOfPointingAngle(0),
475 fTreeVariableV0Radius(0),
477 fTreeVariablePtMC(0),
478 fTreeVariableRapK0Short(0),
479 fTreeVariableRapLambda(0),
480 fTreeVariableRapMC(0),
481 fTreeVariableInvMassK0s(0),
482 fTreeVariableInvMassLambda(0),
483 fTreeVariableInvMassAntiLambda(0),
484 fTreeVariableAlphaV0(0),
485 fTreeVariablePtArmV0(0),
486 fTreeVariableNegTotMomentum(0),
487 fTreeVariablePosTotMomentum(0),
488 fTreeVariableNegTransvMomentum(0),
489 fTreeVariablePosTransvMomentum(0),
490 fTreeVariableNegTransvMomentumMC(0),
491 fTreeVariablePosTransvMomentumMC(0),
493 fTreeVariableNSigmasPosProton(0),
494 fTreeVariableNSigmasPosPion(0),
495 fTreeVariableNSigmasNegProton(0),
496 fTreeVariableNSigmasNegPion(0),
498 fTreeVariablePtMother(0),
499 fTreeVariableV0CreationRadius(0),
501 fTreeVariablePIDPositive(0),
502 fTreeVariablePIDNegative(0),
503 fTreeVariablePIDMother(0),
504 fTreeVariableIndexStatus(0),
505 fTreeVariableIndexStatusMother(0),
507 fTreeVariableRunNumber(0),
508 fTreeVariableEventNumber(0),
510 fTreeVariableDistOverTotMom(0),
512 fTreeVariablePosEta(0),
513 fTreeVariableNegEta(0),
515 fTreeVariableVertexZ(0),
517 fTreeVariableLeastNbrCrossedRows(0),
518 fTreeVariableLeastRatioCrossedRowsOverFindable(0),
519 fTreeVariableMultiplicity(0),
520 fTreeVariableMultiplicityV0A(0),
521 fTreeVariableMultiplicityZNA(0),
522 fTreeVariableMultiplicityTRK(0),
523 fTreeVariableMultiplicitySPD(0),
524 fTreeVariableMultiplicityMC(0),
530 fTreeVariableV0Px(0),
531 fTreeVariableV0Py(0),
532 fTreeVariableV0Pz(0),
534 fTreeVariableMCV0x(0),
535 fTreeVariableMCV0y(0),
536 fTreeVariableMCV0z(0),
538 fTreeVariableMCV0Px(0),
539 fTreeVariableMCV0Py(0),
540 fTreeVariableMCV0Pz(0),
546 fTreeVariableMCPVx(0),
547 fTreeVariableMCPVy(0),
548 fTreeVariableMCPVz(0),
550 fTreeVariableIsNonInjected(0),
552 fTreeVariableNegTrackStatus(0),
553 fTreeVariablePosTrackStatus(0),
555 fTreeVariableNegPhysicalStatus(0),
556 fTreeVariablePosPhysicalStatus(0),
558 //------------------------------------------------
560 // --- Filled on an Event-by-event basis
561 //------------------------------------------------
562 fHistV0MultiplicityBeforeTrigSel(0),
563 fHistV0MultiplicityForTrigEvt(0),
564 fHistV0MultiplicityForSelEvt(0),
565 fHistV0MultiplicityForSelEvtNoTPCOnly(0),
566 fHistV0MultiplicityForSelEvtNoTPCOnlyNoPileup(0),
567 fHistMultiplicityBeforeTrigSel(0),
568 fHistMultiplicityForTrigEvt(0),
569 fHistMultiplicity(0),
570 fHistMultiplicityNoTPCOnly(0),
571 fHistMultiplicityNoTPCOnlyNoPileup(0),
574 fHistMultiplicityV0ABeforeTrigSel(0),
575 fHistMultiplicityV0AForTrigEvt(0),
576 fHistMultiplicityV0A(0),
577 fHistMultiplicityV0ANoTPCOnly(0),
578 fHistMultiplicityV0ANoTPCOnlyNoPileup(0),
581 fHistMultiplicityZNABeforeTrigSel(0),
582 fHistMultiplicityZNAForTrigEvt(0),
583 fHistMultiplicityZNA(0),
584 fHistMultiplicityZNANoTPCOnly(0),
585 fHistMultiplicityZNANoTPCOnlyNoPileup(0),
588 fHistMultiplicityTRKBeforeTrigSel(0),
589 fHistMultiplicityTRKForTrigEvt(0),
590 fHistMultiplicityTRK(0),
591 fHistMultiplicityTRKNoTPCOnly(0),
592 fHistMultiplicityTRKNoTPCOnlyNoPileup(0),
595 fHistMultiplicitySPDBeforeTrigSel(0),
596 fHistMultiplicitySPDForTrigEvt(0),
597 fHistMultiplicitySPD(0),
598 fHistMultiplicitySPDNoTPCOnly(0),
599 fHistMultiplicitySPDNoTPCOnlyNoPileup(0),
601 f2dHistMultiplicityVsTrueBeforeTrigSel(0),
602 f2dHistMultiplicityVsTrueForTrigEvt(0),
603 f2dHistMultiplicityVsTrue(0),
604 f2dHistMultiplicityVsTrueNoTPCOnly(0),
605 f2dHistMultiplicityVsTrueNoTPCOnlyNoPileup(0),
607 //Raw Data for Vertex Z position estimator change
608 f2dHistMultiplicityVsVertexZBeforeTrigSel(0),
609 f2dHistMultiplicityVsVertexZForTrigEvt(0),
610 f2dHistMultiplicityVsVertexZ(0),
611 f2dHistMultiplicityVsVertexZNoTPCOnly(0),
612 f2dHistMultiplicityVsVertexZNoTPCOnlyNoPileup(0),
614 fHistGenVertexZBeforeTrigSel(0),
615 fHistGenVertexZForTrigEvt(0),
617 fHistGenVertexZNoTPCOnly(0),
618 fHistGenVertexZNoTPCOnlyNoPileup(0),
620 //------------------------------------------------
621 // PARTICLE HISTOGRAMS
622 // --- Filled on a Particle-by-Particle basis
623 //------------------------------------------------
626 f3dHistPrimAnalysisPtVsYVsMultLambda(0),
627 f3dHistPrimAnalysisPtVsYVsMultAntiLambda(0),
628 f3dHistPrimAnalysisPtVsYVsMultK0Short(0),
629 f3dHistPrimAnalysisPtVsYCMSVsMultLambda(0),
630 f3dHistPrimAnalysisPtVsYCMSVsMultAntiLambda(0),
631 f3dHistPrimAnalysisPtVsYCMSVsMultK0Short(0),
634 f3dHistPrimAnalysisPtVsYVsMultMCLambda(0),
635 f3dHistPrimAnalysisPtVsYVsMultMCAntiLambda(0),
636 f3dHistPrimAnalysisPtVsYVsMultMCK0Short(0),
637 f3dHistPrimAnalysisPtVsYCMSVsMultMCLambda(0),
638 f3dHistPrimAnalysisPtVsYCMSVsMultMCAntiLambda(0),
639 f3dHistPrimAnalysisPtVsYCMSVsMultMCK0Short(0),
642 f3dHistPrimAnalysisPtVsYVsMultV0ALambda(0),
643 f3dHistPrimAnalysisPtVsYVsMultV0AAntiLambda(0),
644 f3dHistPrimAnalysisPtVsYVsMultV0AK0Short(0),
645 f3dHistPrimAnalysisPtVsYCMSVsMultV0ALambda(0),
646 f3dHistPrimAnalysisPtVsYCMSVsMultV0AAntiLambda(0),
647 f3dHistPrimAnalysisPtVsYCMSVsMultV0AK0Short(0),
650 f3dHistPrimAnalysisPtVsYVsMultZNALambda(0),
651 f3dHistPrimAnalysisPtVsYVsMultZNAAntiLambda(0),
652 f3dHistPrimAnalysisPtVsYVsMultZNAK0Short(0),
653 f3dHistPrimAnalysisPtVsYCMSVsMultZNALambda(0),
654 f3dHistPrimAnalysisPtVsYCMSVsMultZNAAntiLambda(0),
655 f3dHistPrimAnalysisPtVsYCMSVsMultZNAK0Short(0),
658 f3dHistPrimAnalysisPtVsYVsMultTRKLambda(0),
659 f3dHistPrimAnalysisPtVsYVsMultTRKAntiLambda(0),
660 f3dHistPrimAnalysisPtVsYVsMultTRKK0Short(0),
661 f3dHistPrimAnalysisPtVsYCMSVsMultTRKLambda(0),
662 f3dHistPrimAnalysisPtVsYCMSVsMultTRKAntiLambda(0),
663 f3dHistPrimAnalysisPtVsYCMSVsMultTRKK0Short(0),
666 f3dHistPrimAnalysisPtVsYVsMultSPDLambda(0),
667 f3dHistPrimAnalysisPtVsYVsMultSPDAntiLambda(0),
668 f3dHistPrimAnalysisPtVsYVsMultSPDK0Short(0),
669 f3dHistPrimAnalysisPtVsYCMSVsMultSPDLambda(0),
670 f3dHistPrimAnalysisPtVsYCMSVsMultSPDAntiLambda(0),
671 f3dHistPrimAnalysisPtVsYCMSVsMultSPDK0Short(0),
674 f3dHistPrimRawPtVsYVsMultLambda(0),
675 f3dHistPrimRawPtVsYVsMultAntiLambda(0),
676 f3dHistPrimRawPtVsYVsMultK0Short(0),
677 f3dHistPrimRawPtVsYCMSVsMultLambda(0),
678 f3dHistPrimRawPtVsYCMSVsMultAntiLambda(0),
679 f3dHistPrimRawPtVsYCMSVsMultK0Short(0),
682 f3dHistPrimRawPtVsYVsMultV0ALambda(0),
683 f3dHistPrimRawPtVsYVsMultV0AAntiLambda(0),
684 f3dHistPrimRawPtVsYVsMultV0AK0Short(0),
685 f3dHistPrimRawPtVsYCMSVsMultV0ALambda(0),
686 f3dHistPrimRawPtVsYCMSVsMultV0AAntiLambda(0),
687 f3dHistPrimRawPtVsYCMSVsMultV0AK0Short(0),
690 f3dHistPrimRawPtVsYVsMultZNALambda(0),
691 f3dHistPrimRawPtVsYVsMultZNAAntiLambda(0),
692 f3dHistPrimRawPtVsYVsMultZNAK0Short(0),
693 f3dHistPrimRawPtVsYCMSVsMultZNALambda(0),
694 f3dHistPrimRawPtVsYCMSVsMultZNAAntiLambda(0),
695 f3dHistPrimRawPtVsYCMSVsMultZNAK0Short(0),
698 f3dHistPrimRawPtVsYVsMultTRKLambda(0),
699 f3dHistPrimRawPtVsYVsMultTRKAntiLambda(0),
700 f3dHistPrimRawPtVsYVsMultTRKK0Short(0),
701 f3dHistPrimRawPtVsYCMSVsMultTRKLambda(0),
702 f3dHistPrimRawPtVsYCMSVsMultTRKAntiLambda(0),
703 f3dHistPrimRawPtVsYCMSVsMultTRKK0Short(0),
706 f3dHistPrimRawPtVsYVsMultSPDLambda(0),
707 f3dHistPrimRawPtVsYVsMultSPDAntiLambda(0),
708 f3dHistPrimRawPtVsYVsMultSPDK0Short(0),
709 f3dHistPrimRawPtVsYCMSVsMultSPDLambda(0),
710 f3dHistPrimRawPtVsYCMSVsMultSPDAntiLambda(0),
711 f3dHistPrimRawPtVsYCMSVsMultSPDK0Short(0),
713 f3dHistPrimRawPtVsYVsMultNonInjLambda(0),
714 f3dHistPrimRawPtVsYVsMultNonInjAntiLambda(0),
715 f3dHistPrimRawPtVsYVsMultNonInjK0Short(0),
716 f3dHistPrimRawPtVsYVsMultMCLambda(0),
717 f3dHistPrimRawPtVsYVsMultMCAntiLambda(0),
718 f3dHistPrimRawPtVsYVsMultMCK0Short(0),
719 f3dHistPrimRawPtVsYVsVertexZLambda(0),
720 f3dHistPrimRawPtVsYVsVertexZAntiLambda(0),
721 f3dHistPrimRawPtVsYVsVertexZK0Short(0),
722 f3dHistPrimCloseToPVPtVsYVsMultLambda(0),
723 f3dHistPrimCloseToPVPtVsYVsMultAntiLambda(0),
724 f3dHistPrimCloseToPVPtVsYVsMultK0Short(0),
725 f3dHistPrimRawPtVsYVsDecayLengthLambda(0),
726 f3dHistPrimRawPtVsYVsDecayLengthAntiLambda(0),
727 f3dHistPrimRawPtVsYVsDecayLengthK0Short(0),
730 f3dHistGenPtVsYVsMultXiMinus(0),
731 f3dHistGenPtVsYVsMultXiPlus(0),
732 f3dHistGenSelectedPtVsYVsMultXiMinus(0),
733 f3dHistGenSelectedPtVsYVsMultXiPlus(0),
734 f3dHistGenPtVsYCMSVsMultXiMinus(0),
735 f3dHistGenPtVsYCMSVsMultXiPlus(0),
736 f3dHistGenSelectedPtVsYCMSVsMultXiMinus(0),
737 f3dHistGenSelectedPtVsYCMSVsMultXiPlus(0),
740 f3dHistGenPtVsYVsMultV0AXiMinus(0),
741 f3dHistGenPtVsYVsMultV0AXiPlus(0),
742 f3dHistGenSelectedPtVsYVsMultV0AXiMinus(0),
743 f3dHistGenSelectedPtVsYVsMultV0AXiPlus(0),
744 f3dHistGenPtVsYCMSVsMultV0AXiMinus(0),
745 f3dHistGenPtVsYCMSVsMultV0AXiPlus(0),
746 f3dHistGenSelectedPtVsYCMSVsMultV0AXiMinus(0),
747 f3dHistGenSelectedPtVsYCMSVsMultV0AXiPlus(0),
750 f3dHistGenPtVsYVsMultZNAXiMinus(0),
751 f3dHistGenPtVsYVsMultZNAXiPlus(0),
752 f3dHistGenSelectedPtVsYVsMultZNAXiMinus(0),
753 f3dHistGenSelectedPtVsYVsMultZNAXiPlus(0),
754 f3dHistGenPtVsYCMSVsMultZNAXiMinus(0),
755 f3dHistGenPtVsYCMSVsMultZNAXiPlus(0),
756 f3dHistGenSelectedPtVsYCMSVsMultZNAXiMinus(0),
757 f3dHistGenSelectedPtVsYCMSVsMultZNAXiPlus(0),
760 f3dHistGenPtVsYVsMultTRKXiMinus(0),
761 f3dHistGenPtVsYVsMultTRKXiPlus(0),
762 f3dHistGenSelectedPtVsYVsMultTRKXiMinus(0),
763 f3dHistGenSelectedPtVsYVsMultTRKXiPlus(0),
764 f3dHistGenPtVsYCMSVsMultTRKXiMinus(0),
765 f3dHistGenPtVsYCMSVsMultTRKXiPlus(0),
766 f3dHistGenSelectedPtVsYCMSVsMultTRKXiMinus(0),
767 f3dHistGenSelectedPtVsYCMSVsMultTRKXiPlus(0),
770 f3dHistGenPtVsYVsMultSPDXiMinus(0),
771 f3dHistGenPtVsYVsMultSPDXiPlus(0),
772 f3dHistGenSelectedPtVsYVsMultSPDXiMinus(0),
773 f3dHistGenSelectedPtVsYVsMultSPDXiPlus(0),
774 f3dHistGenPtVsYCMSVsMultSPDXiMinus(0),
775 f3dHistGenPtVsYCMSVsMultSPDXiPlus(0),
776 f3dHistGenSelectedPtVsYCMSVsMultSPDXiMinus(0),
777 f3dHistGenSelectedPtVsYCMSVsMultSPDXiPlus(0),
785 fHistPVxAnalysisHasHighPtLambda(0),
786 fHistPVyAnalysisHasHighPtLambda(0),
787 fHistPVzAnalysisHasHighPtLambda(0),
788 fHistSwappedV0Counter(0)
791 // Set Loose cuts or not here...
792 // REALLY LOOSE? Be careful when attempting to run over PbPb if fkRunV0Vertexer is set!
793 fV0Sels[0] = 33. ; // max allowed chi2
794 fV0Sels[1] = 0.02; // min allowed impact parameter for the 1st daughter (LHC09a4 : 0.05)
795 fV0Sels[2] = 0.02; // min allowed impact parameter for the 2nd daughter (LHC09a4 : 0.05)
796 fV0Sels[3] = 2.0 ; // max allowed DCA between the daughter tracks (LHC09a4 : 0.5)
797 fV0Sels[4] = 0.95; // min allowed cosine of V0's pointing angle (LHC09a4 : 0.99)
798 fV0Sels[5] = 0.5 ; // min radius of the fiducial volume (LHC09a4 : 0.2)
799 fV0Sels[6] = 200. ; // max radius of the fiducial volume (LHC09a4 : 100.0)
800 // Output slot #0 writes into a TList container (Cascade)
801 DefineOutput(1, TList::Class());
802 DefineOutput(2, TTree::Class());
806 AliAnalysisTaskExtractPerformanceV0::~AliAnalysisTaskExtractPerformanceV0()
808 //------------------------------------------------
810 //------------------------------------------------
820 //cleanup esd track cuts object too...
822 delete fESDtrackCuts;
832 //________________________________________________________________________
833 void AliAnalysisTaskExtractPerformanceV0::UserCreateOutputObjects()
839 //------------------------------------------------
841 fTree = new TTree("fTree","V0Candidates");
843 //------------------------------------------------
844 // fTree Branch definitions - V0 Tree
845 //------------------------------------------------
847 //-----------BASIC-INFO---------------------------
848 /* 1*/ fTree->Branch("fTreeVariablePrimaryStatus",&fTreeVariablePrimaryStatus,"fTreeVariablePrimaryStatus/I");
849 /* 2*/ fTree->Branch("fTreeVariablePrimaryStatusMother",&fTreeVariablePrimaryStatusMother,"fTreeVariablePrimaryStatusMother/I");
850 /* 2*/ fTree->Branch("fTreeVariableChi2V0",&fTreeVariableChi2V0,"Chi2V0/F");
851 /* 3*/ fTree->Branch("fTreeVariableDcaV0Daughters",&fTreeVariableDcaV0Daughters,"fTreeVariableDcaV0Daughters/F");
852 /* 4*/ fTree->Branch("fTreeVariableDcaPosToPrimVertex",&fTreeVariableDcaPosToPrimVertex,"fTreeVariableDcaPosToPrimVertex/F");
853 /* 5*/ fTree->Branch("fTreeVariableDcaNegToPrimVertex",&fTreeVariableDcaNegToPrimVertex,"fTreeVariableDcaNegToPrimVertex/F");
854 /* 6*/ fTree->Branch("fTreeVariableV0Radius",&fTreeVariableV0Radius,"fTreeVariableV0Radius/F");
855 /* 7*/ fTree->Branch("fTreeVariablePt",&fTreeVariablePt,"fTreeVariablePt/F");
856 /* 7*/ fTree->Branch("fTreeVariablePtMC",&fTreeVariablePtMC,"fTreeVariablePtMC/F");
857 /* 8*/ fTree->Branch("fTreeVariableRapK0Short",&fTreeVariableRapK0Short,"fTreeVariableRapK0Short/F");
858 /* 9*/ fTree->Branch("fTreeVariableRapLambda",&fTreeVariableRapLambda,"fTreeVariableRapLambda/F");
859 /*10*/ fTree->Branch("fTreeVariableRapMC",&fTreeVariableRapMC,"fTreeVariableRapMC/F");
860 /*11*/ fTree->Branch("fTreeVariableInvMassK0s",&fTreeVariableInvMassK0s,"fTreeVariableInvMassK0s/F");
861 /*12*/ fTree->Branch("fTreeVariableInvMassLambda",&fTreeVariableInvMassLambda,"fTreeVariableInvMassLambda/F");
862 /*13*/ fTree->Branch("fTreeVariableInvMassAntiLambda",&fTreeVariableInvMassAntiLambda,"fTreeVariableInvMassAntiLambda/F");
863 /*14*/ fTree->Branch("fTreeVariableAlphaV0",&fTreeVariableAlphaV0,"fTreeVariableAlphaV0/F");
864 /*15*/ fTree->Branch("fTreeVariablePtArmV0",&fTreeVariablePtArmV0,"fTreeVariablePtArmV0/F");
865 /*16*/ fTree->Branch("fTreeVariableNegTransvMomentum",&fTreeVariableNegTransvMomentum,"fTreeVariableNegTransvMomentum/F");
866 /*17*/ fTree->Branch("fTreeVariablePosTransvMomentum",&fTreeVariablePosTransvMomentum,"fTreeVariablePosTransvMomentum/F");
867 /*18*/ fTree->Branch("fTreeVariableNegTransvMomentumMC",&fTreeVariableNegTransvMomentumMC,"fTreeVariableNegTransvMomentumMC/F");
868 /*19*/ fTree->Branch("fTreeVariablePosTransvMomentumMC",&fTreeVariablePosTransvMomentumMC,"fTreeVariablePosTransvMomentumMC/F");
869 /*20*/ fTree->Branch("fTreeVariableLeastNbrCrossedRows",&fTreeVariableLeastNbrCrossedRows,"fTreeVariableLeastNbrCrossedRows/I");
870 /*21*/ fTree->Branch("fTreeVariableLeastRatioCrossedRowsOverFindable",&fTreeVariableLeastRatioCrossedRowsOverFindable,"fTreeVariableLeastRatioCrossedRowsOverFindable/F");
871 /*22*/ fTree->Branch("fTreeVariablePID",&fTreeVariablePID,"fTreeVariablePID/I");
872 /*23*/ fTree->Branch("fTreeVariablePIDPositive",&fTreeVariablePIDPositive,"fTreeVariablePIDPositive/I");
873 /*24*/ fTree->Branch("fTreeVariablePIDNegative",&fTreeVariablePIDNegative,"fTreeVariablePIDNegative/I");
874 /*25*/ fTree->Branch("fTreeVariablePIDMother",&fTreeVariablePIDMother,"fTreeVariablePIDMother/I");
875 /*26*/ fTree->Branch("fTreeVariablePtXiMother",&fTreeVariablePtMother,"fTreeVariablePtMother/F");
876 /*27*/ fTree->Branch("fTreeVariableV0CosineOfPointingAngle",&fTreeVariableV0CosineOfPointingAngle,"fTreeVariableV0CosineOfPointingAngle/F");
877 //-----------MULTIPLICITY-INFO--------------------
878 /*28*/ fTree->Branch("fTreeVariableMultiplicity",&fTreeVariableMultiplicity,"fTreeVariableMultiplicity/I");
879 /*28*/ fTree->Branch("fTreeVariableMultiplicityMC",&fTreeVariableMultiplicityMC,"fTreeVariableMultiplicityMC/I");
880 /*17*/ fTree->Branch("fTreeVariableMultiplicityV0A",&fTreeVariableMultiplicityV0A,"fTreeVariableMultiplicityV0A/I");
881 /*17*/ fTree->Branch("fTreeVariableMultiplicityZNA",&fTreeVariableMultiplicityZNA,"fTreeVariableMultiplicityZNA/I");
882 /*17*/ fTree->Branch("fTreeVariableMultiplicityTRK",&fTreeVariableMultiplicityTRK,"fTreeVariableMultiplicityTRK/I");
883 /*17*/ fTree->Branch("fTreeVariableMultiplicitySPD",&fTreeVariableMultiplicitySPD,"fTreeVariableMultiplicitySPD/I");
884 //------------------------------------------------
885 /*29*/ fTree->Branch("fTreeVariableDistOverTotMom",&fTreeVariableDistOverTotMom,"fTreeVariableDistOverTotMom/F");
886 /*30*/ fTree->Branch("fTreeVariableNSigmasPosProton",&fTreeVariableNSigmasPosProton,"fTreeVariableNSigmasPosProton/F");
887 /*31*/ fTree->Branch("fTreeVariableNSigmasPosPion",&fTreeVariableNSigmasPosPion,"fTreeVariableNSigmasPosPion/F");
888 /*32*/ fTree->Branch("fTreeVariableNSigmasNegProton",&fTreeVariableNSigmasNegProton,"fTreeVariableNSigmasNegProton/F");
889 /*33*/ fTree->Branch("fTreeVariableNSigmasNegPion",&fTreeVariableNSigmasNegPion,"fTreeVariableNSigmasNegPion/F");
890 //------------------------------------------------
891 /*34*/ fTree->Branch("fTreeVariableNegEta",&fTreeVariableNegEta,"fTreeVariableNegEta/F");
892 /*35*/ fTree->Branch("fTreeVariablePosEta",&fTreeVariablePosEta,"fTreeVariablePosEta/F");
893 /*36*/ fTree->Branch("fTreeVariableV0CreationRadius",&fTreeVariableV0CreationRadius,"fTreeVariableV0CreationRadius/F");
895 if ( fkLightWeight == kFALSE ){ // these are debugging branches!
896 /*37*/ fTree->Branch("fTreeVariableIndexStatus",&fTreeVariableIndexStatus,"fTreeVariableIndexStatus/I");
897 /*38*/ fTree->Branch("fTreeVariableIndexStatusMother",&fTreeVariableIndexStatusMother,"fTreeVariableIndexStatusMother/I");
900 /*39*/ fTree->Branch("fTreeVariableRunNumber",&fTreeVariableRunNumber,"fTreeVariableRunNumber/I");
901 /*40*/ fTree->Branch("fTreeVariableEventNumber",&fTreeVariableEventNumber,"fTreeVariableEventNumber/l");
903 if ( fkLightWeight == kFALSE ){ // these are debugging branches!
904 /*34*/ fTree->Branch("fTreeVariableVertexZ",&fTreeVariableVertexZ,"fTreeVariableVertexZ/F");
907 if ( fkLightWeight == kFALSE ){ // these are debugging branches!
908 //-----------FOR CTAU DEBUGGING: Full Phase Space + Decay Position Info
909 fTree->Branch("fTreeVariableV0x",&fTreeVariableV0x,"fTreeVariableV0x/F");
910 fTree->Branch("fTreeVariableV0y",&fTreeVariableV0y,"fTreeVariableV0y/F");
911 fTree->Branch("fTreeVariableV0z",&fTreeVariableV0z,"fTreeVariableV0z/F");
913 fTree->Branch("fTreeVariableV0Px",&fTreeVariableV0Px,"fTreeVariableV0Px/F");
914 fTree->Branch("fTreeVariableV0Py",&fTreeVariableV0Py,"fTreeVariableV0Py/F");
915 fTree->Branch("fTreeVariableV0Pz",&fTreeVariableV0Pz,"fTreeVariableV0Pz/F");
917 //-----------FOR CTAU DEBUGGING: Full Phase Space + Decay Position Info, perfect info from MC
918 fTree->Branch("fTreeVariableMCV0x",&fTreeVariableMCV0x,"fTreeVariableMCV0x/F");
919 fTree->Branch("fTreeVariableMCV0y",&fTreeVariableMCV0y,"fTreeVariableMCV0y/F");
920 fTree->Branch("fTreeVariableMCV0z",&fTreeVariableMCV0z,"fTreeVariableMCV0z/F");
922 fTree->Branch("fTreeVariableMCV0Px",&fTreeVariableMCV0Px,"fTreeVariableMCV0Px/F");
923 fTree->Branch("fTreeVariableMCV0Py",&fTreeVariableMCV0Py,"fTreeVariableMCV0Py/F");
924 fTree->Branch("fTreeVariableMCV0Pz",&fTreeVariableMCV0Pz,"fTreeVariableMCV0Pz/F");
926 //-----------FOR CTAU DEBUGGING: Primary vertex info
927 fTree->Branch("fTreeVariablePVx",&fTreeVariablePVx,"fTreeVariablePVx/F");
928 fTree->Branch("fTreeVariablePVy",&fTreeVariablePVy,"fTreeVariablePVy/F");
929 fTree->Branch("fTreeVariablePVz",&fTreeVariablePVz,"fTreeVariablePVz/F");
931 fTree->Branch("fTreeVariableMCPVx",&fTreeVariableMCPVx,"fTreeVariableMCPVx/F");
932 fTree->Branch("fTreeVariableMCPVy",&fTreeVariableMCPVy,"fTreeVariableMCPVy/F");
933 fTree->Branch("fTreeVariableMCPVz",&fTreeVariableMCPVz,"fTreeVariableMCPVz/F");
936 fTree->Branch("fTreeVariableIsNonInjected",&fTreeVariableIsNonInjected,"fTreeVariableIsNonInjected/O"); //O for bOOlean...
938 if ( fkLightWeight == kFALSE ){ // these are debugging branches!
939 fTree->Branch("fTreeVariableNegTrackStatus",&fTreeVariableNegTrackStatus,"fTreeVariableNegTrackStatus/l");
940 fTree->Branch("fTreeVariablePosTrackStatus",&fTreeVariablePosTrackStatus,"fTreeVariablePosTrackStatus/l");
941 fTree->Branch("fTreeVariableNegPhysicalStatus",&fTreeVariableNegPhysicalStatus,"fTreeVariableNegPhysicalStatus/I");
942 fTree->Branch("fTreeVariablePosPhysicalStatus",&fTreeVariablePosPhysicalStatus,"fTreeVariablePosPhysicalStatus/I");
945 //------------------------------------------------
946 // Particle Identification Setup
947 //------------------------------------------------
949 AliAnalysisManager *man=AliAnalysisManager::GetAnalysisManager();
950 AliInputEventHandler* inputHandler = (AliInputEventHandler*) (man->GetInputEventHandler());
951 fPIDResponse = inputHandler->GetPIDResponse();
955 if(! fESDtrackCuts ){
956 fESDtrackCuts = new AliESDtrackCuts();
959 fUtils = new AliAnalysisUtils();
962 //------------------------------------------------
963 // V0 Multiplicity Histograms
964 //------------------------------------------------
968 fListHistV0 = new TList();
969 fListHistV0->SetOwner(); // See http://root.cern.ch/root/html/TCollection.html#TCollection:SetOwner
972 if(! fHistV0MultiplicityBeforeTrigSel) {
973 fHistV0MultiplicityBeforeTrigSel = new TH1F("fHistV0MultiplicityBeforeTrigSel",
974 "V0s per event (before Trig. Sel.);Nbr of V0s/Evt;Events",
976 fListHistV0->Add(fHistV0MultiplicityBeforeTrigSel);
979 if(! fHistV0MultiplicityForTrigEvt) {
980 fHistV0MultiplicityForTrigEvt = new TH1F("fHistV0MultiplicityForTrigEvt",
981 "V0s per event (for triggered evt);Nbr of V0s/Evt;Events",
983 fListHistV0->Add(fHistV0MultiplicityForTrigEvt);
986 if(! fHistV0MultiplicityForSelEvt) {
987 fHistV0MultiplicityForSelEvt = new TH1F("fHistV0MultiplicityForSelEvt",
988 "V0s per event;Nbr of V0s/Evt;Events",
990 fListHistV0->Add(fHistV0MultiplicityForSelEvt);
993 if(! fHistV0MultiplicityForSelEvtNoTPCOnly) {
994 fHistV0MultiplicityForSelEvtNoTPCOnly = new TH1F("fHistV0MultiplicityForSelEvtNoTPCOnly",
995 "V0s per event;Nbr of V0s/Evt;Events",
997 fListHistV0->Add(fHistV0MultiplicityForSelEvtNoTPCOnly);
999 if(! fHistV0MultiplicityForSelEvtNoTPCOnlyNoPileup) {
1000 fHistV0MultiplicityForSelEvtNoTPCOnlyNoPileup = new TH1F("fHistV0MultiplicityForSelEvtNoTPCOnlyNoPileup",
1001 "V0s per event;Nbr of V0s/Evt;Events",
1003 fListHistV0->Add(fHistV0MultiplicityForSelEvtNoTPCOnlyNoPileup);
1006 //------------------------------------------------
1007 // Track Multiplicity Histograms
1008 //------------------------------------------------
1010 if(! fHistMultiplicityBeforeTrigSel) {
1011 fHistMultiplicityBeforeTrigSel = new TH1F("fHistMultiplicityBeforeTrigSel",
1012 "Tracks per event;Nbr of Tracks;Events",
1014 fListHistV0->Add(fHistMultiplicityBeforeTrigSel);
1016 if(! fHistMultiplicityForTrigEvt) {
1017 fHistMultiplicityForTrigEvt = new TH1F("fHistMultiplicityForTrigEvt",
1018 "Tracks per event;Nbr of Tracks;Events",
1020 fListHistV0->Add(fHistMultiplicityForTrigEvt);
1022 if(! fHistMultiplicity) {
1023 fHistMultiplicity = new TH1F("fHistMultiplicity",
1024 "Tracks per event;Nbr of Tracks;Events",
1026 fListHistV0->Add(fHistMultiplicity);
1028 if(! fHistMultiplicityNoTPCOnly) {
1029 fHistMultiplicityNoTPCOnly = new TH1F("fHistMultiplicityNoTPCOnly",
1030 "Tracks per event;Nbr of Tracks;Events",
1032 fListHistV0->Add(fHistMultiplicityNoTPCOnly);
1034 if(! fHistMultiplicityNoTPCOnlyNoPileup) {
1035 fHistMultiplicityNoTPCOnlyNoPileup = new TH1F("fHistMultiplicityNoTPCOnlyNoPileup",
1036 "Tracks per event;Nbr of Tracks;Events",
1038 fListHistV0->Add(fHistMultiplicityNoTPCOnlyNoPileup);
1041 //V0A Centrality (if PbPb / pPb)
1042 if(! fHistMultiplicityV0ABeforeTrigSel) {
1043 fHistMultiplicityV0ABeforeTrigSel = new TH1F("fHistMultiplicityV0ABeforeTrigSel",
1044 "Centrality Distribution: V0A;V0A Centrality;Events",
1046 fListHistV0->Add(fHistMultiplicityV0ABeforeTrigSel);
1048 if(! fHistMultiplicityV0AForTrigEvt) {
1049 fHistMultiplicityV0AForTrigEvt = new TH1F("fHistMultiplicityV0AForTrigEvt",
1050 "Centrality Distribution: V0A;V0A Centrality;Events",
1052 fListHistV0->Add(fHistMultiplicityV0AForTrigEvt);
1054 if(! fHistMultiplicityV0A) {
1055 fHistMultiplicityV0A = new TH1F("fHistMultiplicityV0A",
1056 "Centrality Distribution: V0A;V0A Centrality;Events",
1058 fListHistV0->Add(fHistMultiplicityV0A);
1060 if(! fHistMultiplicityV0ANoTPCOnly) {
1061 fHistMultiplicityV0ANoTPCOnly = new TH1F("fHistMultiplicityV0ANoTPCOnly",
1062 "Centrality Distribution: V0A;V0A Centrality;Events",
1064 fListHistV0->Add(fHistMultiplicityV0ANoTPCOnly);
1066 if(! fHistMultiplicityV0ANoTPCOnlyNoPileup) {
1067 fHistMultiplicityV0ANoTPCOnlyNoPileup = new TH1F("fHistMultiplicityV0ANoTPCOnlyNoPileup",
1068 "Centrality Distribution: V0A;V0A Centrality;Events",
1070 fListHistV0->Add(fHistMultiplicityV0ANoTPCOnlyNoPileup);
1073 //ZNA Centrality (if PbPb / pPb)
1074 if(! fHistMultiplicityZNABeforeTrigSel) {
1075 fHistMultiplicityZNABeforeTrigSel = new TH1F("fHistMultiplicityZNABeforeTrigSel",
1076 "Centrality Distribution: ZNA;ZNA Centrality;Events",
1078 fListHistV0->Add(fHistMultiplicityZNABeforeTrigSel);
1080 if(! fHistMultiplicityZNAForTrigEvt) {
1081 fHistMultiplicityZNAForTrigEvt = new TH1F("fHistMultiplicityZNAForTrigEvt",
1082 "Centrality Distribution: ZNA;ZNA Centrality;Events",
1084 fListHistV0->Add(fHistMultiplicityZNAForTrigEvt);
1086 if(! fHistMultiplicityZNA) {
1087 fHistMultiplicityZNA = new TH1F("fHistMultiplicityZNA",
1088 "Centrality Distribution: ZNA;ZNA Centrality;Events",
1090 fListHistV0->Add(fHistMultiplicityZNA);
1092 if(! fHistMultiplicityZNANoTPCOnly) {
1093 fHistMultiplicityZNANoTPCOnly = new TH1F("fHistMultiplicityZNANoTPCOnly",
1094 "Centrality Distribution: ZNA;ZNA Centrality;Events",
1096 fListHistV0->Add(fHistMultiplicityZNANoTPCOnly);
1098 if(! fHistMultiplicityZNANoTPCOnlyNoPileup) {
1099 fHistMultiplicityZNANoTPCOnlyNoPileup = new TH1F("fHistMultiplicityZNANoTPCOnlyNoPileup",
1100 "Centrality Distribution: ZNA;ZNA Centrality;Events",
1102 fListHistV0->Add(fHistMultiplicityZNANoTPCOnlyNoPileup);
1105 //TRK Centrality (if PbPb / pPb)
1106 if(! fHistMultiplicityTRKBeforeTrigSel) {
1107 fHistMultiplicityTRKBeforeTrigSel = new TH1F("fHistMultiplicityTRKBeforeTrigSel",
1108 "Centrality Distribution: TRK;TRK Centrality;Events",
1110 fListHistV0->Add(fHistMultiplicityTRKBeforeTrigSel);
1112 if(! fHistMultiplicityTRKForTrigEvt) {
1113 fHistMultiplicityTRKForTrigEvt = new TH1F("fHistMultiplicityTRKForTrigEvt",
1114 "Centrality Distribution: TRK;TRK Centrality;Events",
1116 fListHistV0->Add(fHistMultiplicityTRKForTrigEvt);
1118 if(! fHistMultiplicityTRK) {
1119 fHistMultiplicityTRK = new TH1F("fHistMultiplicityTRK",
1120 "Centrality Distribution: TRK;TRK Centrality;Events",
1122 fListHistV0->Add(fHistMultiplicityTRK);
1124 if(! fHistMultiplicityTRKNoTPCOnly) {
1125 fHistMultiplicityTRKNoTPCOnly = new TH1F("fHistMultiplicityTRKNoTPCOnly",
1126 "Centrality Distribution: TRK;TRK Centrality;Events",
1128 fListHistV0->Add(fHistMultiplicityTRKNoTPCOnly);
1130 if(! fHistMultiplicityTRKNoTPCOnlyNoPileup) {
1131 fHistMultiplicityTRKNoTPCOnlyNoPileup = new TH1F("fHistMultiplicityTRKNoTPCOnlyNoPileup",
1132 "Centrality Distribution: TRK;TRK Centrality;Events",
1134 fListHistV0->Add(fHistMultiplicityTRKNoTPCOnlyNoPileup);
1137 //SPD Centrality (if PbPb / pPb)
1138 if(! fHistMultiplicitySPDBeforeTrigSel) {
1139 fHistMultiplicitySPDBeforeTrigSel = new TH1F("fHistMultiplicitySPDBeforeTrigSel",
1140 "Centrality Distribution: SPD;SPD Centrality;Events",
1142 fListHistV0->Add(fHistMultiplicitySPDBeforeTrigSel);
1144 if(! fHistMultiplicitySPDForTrigEvt) {
1145 fHistMultiplicitySPDForTrigEvt = new TH1F("fHistMultiplicitySPDForTrigEvt",
1146 "Centrality Distribution: SPD;SPD Centrality;Events",
1148 fListHistV0->Add(fHistMultiplicitySPDForTrigEvt);
1150 if(! fHistMultiplicitySPD) {
1151 fHistMultiplicitySPD = new TH1F("fHistMultiplicitySPD",
1152 "Centrality Distribution: SPD;SPD Centrality;Events",
1154 fListHistV0->Add(fHistMultiplicitySPD);
1156 if(! fHistMultiplicitySPDNoTPCOnly) {
1157 fHistMultiplicitySPDNoTPCOnly = new TH1F("fHistMultiplicitySPDNoTPCOnly",
1158 "Centrality Distribution: SPD;SPD Centrality;Events",
1160 fListHistV0->Add(fHistMultiplicitySPDNoTPCOnly);
1162 if(! fHistMultiplicitySPDNoTPCOnlyNoPileup) {
1163 fHistMultiplicitySPDNoTPCOnlyNoPileup = new TH1F("fHistMultiplicitySPDNoTPCOnlyNoPileup",
1164 "Centrality Distribution: SPD;SPD Centrality;Events",
1166 fListHistV0->Add(fHistMultiplicitySPDNoTPCOnlyNoPileup);
1172 //Raw Data for J/Psi paper Technique
1173 //TH2F *f2dHistMultiplicityVsTrueBeforeTrigSel; //! multiplicity distribution
1174 //TH2F *f2dHistMultiplicityVsTrueForTrigEvt; //! multiplicity distribution
1175 //TH2F *f2dHistMultiplicityVsTrue; //! multiplicity distribution
1176 //TH2F *f2dHistMultiplicityVsTrueNoTPCOnly; //! multiplicity distribution
1177 //TH2F *f2dHistMultiplicityVsTrueNoTPCOnlyNoPileup; //! multiplicity distribution
1179 if(! f2dHistMultiplicityVsTrueBeforeTrigSel) {
1180 f2dHistMultiplicityVsTrueBeforeTrigSel = new TH2F("f2dHistMultiplicityVsTrueBeforeTrigSel",
1181 "Tracks per event", 200, 0, 200, 200, 0, 200);
1182 fListHistV0->Add(f2dHistMultiplicityVsTrueBeforeTrigSel);
1184 if(! f2dHistMultiplicityVsTrueForTrigEvt) {
1185 f2dHistMultiplicityVsTrueForTrigEvt = new TH2F("f2dHistMultiplicityVsTrueForTrigEvt",
1186 "Tracks per event", 200, 0, 200, 200, 0, 200);
1187 fListHistV0->Add(f2dHistMultiplicityVsTrueForTrigEvt);
1189 if(! f2dHistMultiplicityVsTrue) {
1190 f2dHistMultiplicityVsTrue = new TH2F("f2dHistMultiplicityVsTrue",
1191 "Tracks per event", 200, 0, 200, 200, 0, 200);
1192 fListHistV0->Add(f2dHistMultiplicityVsTrue);
1194 if(! f2dHistMultiplicityVsTrueNoTPCOnly) {
1195 f2dHistMultiplicityVsTrueNoTPCOnly = new TH2F("f2dHistMultiplicityVsTrueNoTPCOnly",
1196 "Tracks per event", 200, 0, 200, 200, 0, 200);
1197 fListHistV0->Add(f2dHistMultiplicityVsTrueNoTPCOnly);
1199 if(! f2dHistMultiplicityVsTrueNoTPCOnlyNoPileup) {
1200 f2dHistMultiplicityVsTrueNoTPCOnlyNoPileup = new TH2F("f2dHistMultiplicityVsTrueNoTPCOnlyNoPileup",
1201 "Tracks per event", 200, 0, 200, 200, 0, 200);
1202 fListHistV0->Add(f2dHistMultiplicityVsTrueNoTPCOnlyNoPileup);
1206 //Raw Data for Vertex Z position estimator change
1207 //TH2F *f2dHistMultiplicityVsVertexZBeforeTrigSel; //! multiplicity distribution
1208 //TH2F *f2dHistMultiplicityVsVertexZForTrigEvt; //! multiplicity distribution
1209 //TH2F *f2dHistMultiplicityVsVertexZ; //! multiplicity distribution
1210 //TH2F *f2dHistMultiplicityVsVertexZNoTPCOnly; //! multiplicity distribution
1211 //TH2F *f2dHistMultiplicityVsVertexZNoTPCOnlyNoPileup; //! multiplicity distribution
1213 if(! f2dHistMultiplicityVsVertexZBeforeTrigSel) {
1214 f2dHistMultiplicityVsVertexZBeforeTrigSel = new TH2F("f2dHistMultiplicityVsVertexZBeforeTrigSel",
1215 "Tracks per event", 200, 0, 200,400, -20, 20);
1216 fListHistV0->Add(f2dHistMultiplicityVsVertexZBeforeTrigSel);
1218 if(! f2dHistMultiplicityVsVertexZForTrigEvt) {
1219 f2dHistMultiplicityVsVertexZForTrigEvt = new TH2F("f2dHistMultiplicityVsVertexZForTrigEvt",
1220 "Tracks per event", 200, 0, 200, 400, -20, 20);
1221 fListHistV0->Add(f2dHistMultiplicityVsVertexZForTrigEvt);
1223 if(! f2dHistMultiplicityVsVertexZ) {
1224 f2dHistMultiplicityVsVertexZ = new TH2F("f2dHistMultiplicityVsVertexZ",
1225 "Tracks per event", 200, 0, 200, 400, -20, 20);
1226 fListHistV0->Add(f2dHistMultiplicityVsVertexZ);
1228 if(! f2dHistMultiplicityVsVertexZNoTPCOnly) {
1229 f2dHistMultiplicityVsVertexZNoTPCOnly = new TH2F("f2dHistMultiplicityVsVertexZNoTPCOnly",
1230 "Tracks per event", 200, 0, 200, 400, -20, 20);
1231 fListHistV0->Add(f2dHistMultiplicityVsVertexZNoTPCOnly);
1233 if(! f2dHistMultiplicityVsVertexZNoTPCOnlyNoPileup) {
1234 f2dHistMultiplicityVsVertexZNoTPCOnlyNoPileup = new TH2F("f2dHistMultiplicityVsVertexZNoTPCOnlyNoPileup",
1235 "Tracks per event", 200, 0, 200, 400, -20, 20);
1236 fListHistV0->Add(f2dHistMultiplicityVsVertexZNoTPCOnlyNoPileup);
1239 //Generated PVz test
1241 // TH1F *fHistGenVertexZBeforeTrigSel; //! multiplicity distribution
1242 // TH1F *fHistGenVertexZForTrigEvt; //! multiplicity distribution
1243 // TH1F *fHistGenVertexZ; //! multiplicity distribution
1244 // TH1F *fHistGenVertexZNoTPCOnly; //! multiplicity distribution
1245 // TH1F *fHistGenVertexZNoTPCOnlyNoPileup; //! multiplicity distribution
1247 if(! fHistGenVertexZBeforeTrigSel) {
1248 fHistGenVertexZBeforeTrigSel = new TH1F("fHistGenVertexZBeforeTrigSel",
1249 "PV z position;Nbr of Evts;z",
1251 fListHistV0->Add(fHistGenVertexZBeforeTrigSel);
1253 if(! fHistGenVertexZForTrigEvt) {
1254 fHistGenVertexZForTrigEvt = new TH1F("fHistGenVertexZForTrigEvt",
1255 "PV z position;Nbr of Evts;z",
1257 fListHistV0->Add(fHistGenVertexZForTrigEvt);
1259 if(! fHistGenVertexZ) {
1260 fHistGenVertexZ = new TH1F("fHistGenVertexZ",
1261 "PV z position;Nbr of Evts;z",
1263 fListHistV0->Add(fHistGenVertexZ);
1265 if(! fHistGenVertexZNoTPCOnly) {
1266 fHistGenVertexZNoTPCOnly = new TH1F("fHistGenVertexZNoTPCOnly",
1267 "PV z position;Nbr of Evts;z",
1269 fListHistV0->Add(fHistGenVertexZNoTPCOnly);
1271 if(! fHistGenVertexZNoTPCOnlyNoPileup) {
1272 fHistGenVertexZNoTPCOnlyNoPileup = new TH1F("fHistGenVertexZNoTPCOnlyNoPileup",
1273 "PV z position;Nbr of Evts;z",
1275 fListHistV0->Add(fHistGenVertexZNoTPCOnlyNoPileup);
1279 //------------------------------------------------
1280 // Generated Particle Histograms
1281 //------------------------------------------------
1283 Int_t lCustomNBins = 200;
1284 Double_t lCustomPtUpperLimit = 20;
1285 Int_t lCustomNBinsMultiplicity = 100;
1287 //----------------------------------
1288 // Raw Generated (Pre-physics-selection)
1289 //----------------------------------
1291 //--- 3D Histo (Pt, Y, Multiplicity), V0M Version (default)
1293 if(! f3dHistPrimRawPtVsYVsMultLambda) {
1294 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);
1295 fListHistV0->Add(f3dHistPrimRawPtVsYVsMultLambda);
1297 if(! f3dHistPrimRawPtVsYVsMultAntiLambda) {
1298 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);
1299 fListHistV0->Add(f3dHistPrimRawPtVsYVsMultAntiLambda);
1301 if(! f3dHistPrimRawPtVsYVsMultK0Short) {
1302 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);
1303 fListHistV0->Add(f3dHistPrimRawPtVsYVsMultK0Short);
1306 if(! f3dHistPrimRawPtVsYCMSVsMultLambda) {
1307 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);
1308 fListHistV0->Add(f3dHistPrimRawPtVsYCMSVsMultLambda);
1310 if(! f3dHistPrimRawPtVsYCMSVsMultAntiLambda) {
1311 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);
1312 fListHistV0->Add(f3dHistPrimRawPtVsYCMSVsMultAntiLambda);
1314 if(! f3dHistPrimRawPtVsYCMSVsMultK0Short) {
1315 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);
1316 fListHistV0->Add(f3dHistPrimRawPtVsYCMSVsMultK0Short);
1319 //--- 3D Histo (Pt, Y, Multiplicity), V0A Version
1321 if(! f3dHistPrimRawPtVsYVsMultV0ALambda) {
1322 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);
1323 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimRawPtVsYVsMultV0ALambda);
1325 if(! f3dHistPrimRawPtVsYVsMultV0AAntiLambda) {
1326 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);
1327 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimRawPtVsYVsMultV0AAntiLambda);
1329 if(! f3dHistPrimRawPtVsYVsMultV0AK0Short) {
1330 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);
1331 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimRawPtVsYVsMultV0AK0Short);
1334 if(! f3dHistPrimRawPtVsYCMSVsMultV0ALambda) {
1335 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);
1336 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimRawPtVsYCMSVsMultV0ALambda);
1338 if(! f3dHistPrimRawPtVsYCMSVsMultV0AAntiLambda) {
1339 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);
1340 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimRawPtVsYCMSVsMultV0AAntiLambda);
1342 if(! f3dHistPrimRawPtVsYCMSVsMultV0AK0Short) {
1343 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);
1344 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimRawPtVsYCMSVsMultV0AK0Short);
1347 //--- 3D Histo (Pt, Y, Multiplicity), ZNA Version
1349 if(! f3dHistPrimRawPtVsYVsMultZNALambda) {
1350 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);
1351 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimRawPtVsYVsMultZNALambda);
1353 if(! f3dHistPrimRawPtVsYVsMultZNAAntiLambda) {
1354 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);
1355 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimRawPtVsYVsMultZNAAntiLambda);
1357 if(! f3dHistPrimRawPtVsYVsMultZNAK0Short) {
1358 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);
1359 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimRawPtVsYVsMultZNAK0Short);
1362 if(! f3dHistPrimRawPtVsYCMSVsMultZNALambda) {
1363 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);
1364 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimRawPtVsYCMSVsMultZNALambda);
1366 if(! f3dHistPrimRawPtVsYCMSVsMultZNAAntiLambda) {
1367 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);
1368 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimRawPtVsYCMSVsMultZNAAntiLambda);
1370 if(! f3dHistPrimRawPtVsYCMSVsMultZNAK0Short) {
1371 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);
1372 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimRawPtVsYCMSVsMultZNAK0Short);
1375 //--- 3D Histo (Pt, Y, Multiplicity), TRK Version
1377 if(! f3dHistPrimRawPtVsYVsMultTRKLambda) {
1378 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);
1379 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimRawPtVsYVsMultTRKLambda);
1381 if(! f3dHistPrimRawPtVsYVsMultTRKAntiLambda) {
1382 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);
1383 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimRawPtVsYVsMultTRKAntiLambda);
1385 if(! f3dHistPrimRawPtVsYVsMultTRKK0Short) {
1386 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);
1387 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimRawPtVsYVsMultTRKK0Short);
1390 if(! f3dHistPrimRawPtVsYCMSVsMultTRKLambda) {
1391 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);
1392 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimRawPtVsYCMSVsMultTRKLambda);
1394 if(! f3dHistPrimRawPtVsYCMSVsMultTRKAntiLambda) {
1395 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);
1396 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimRawPtVsYCMSVsMultTRKAntiLambda);
1398 if(! f3dHistPrimRawPtVsYCMSVsMultTRKK0Short) {
1399 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);
1400 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimRawPtVsYCMSVsMultTRKK0Short);
1403 //--- 3D Histo (Pt, Y, Multiplicity), SPD Version
1405 if(! f3dHistPrimRawPtVsYVsMultSPDLambda) {
1406 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);
1407 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimRawPtVsYVsMultSPDLambda);
1409 if(! f3dHistPrimRawPtVsYVsMultSPDAntiLambda) {
1410 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);
1411 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimRawPtVsYVsMultSPDAntiLambda);
1413 if(! f3dHistPrimRawPtVsYVsMultSPDK0Short) {
1414 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);
1415 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimRawPtVsYVsMultSPDK0Short);
1418 if(! f3dHistPrimRawPtVsYCMSVsMultSPDLambda) {
1419 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);
1420 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimRawPtVsYCMSVsMultSPDLambda);
1422 if(! f3dHistPrimRawPtVsYCMSVsMultSPDAntiLambda) {
1423 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);
1424 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimRawPtVsYCMSVsMultSPDAntiLambda);
1426 if(! f3dHistPrimRawPtVsYCMSVsMultSPDK0Short) {
1427 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);
1428 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimRawPtVsYCMSVsMultSPDK0Short);
1433 //---> Non-injected particles
1435 if(! f3dHistPrimRawPtVsYVsMultNonInjLambda) {
1436 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);
1437 fListHistV0->Add(f3dHistPrimRawPtVsYVsMultNonInjLambda);
1439 if(! f3dHistPrimRawPtVsYVsMultNonInjAntiLambda) {
1440 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);
1441 fListHistV0->Add(f3dHistPrimRawPtVsYVsMultNonInjAntiLambda);
1443 if(! f3dHistPrimRawPtVsYVsMultNonInjK0Short) {
1444 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);
1445 fListHistV0->Add(f3dHistPrimRawPtVsYVsMultNonInjK0Short);
1448 //--- 3D Histo (Pt, Y, MultiplicityMC)
1450 if(! f3dHistPrimRawPtVsYVsMultMCLambda) {
1451 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);
1452 fListHistV0->Add(f3dHistPrimRawPtVsYVsMultMCLambda);
1454 if(! f3dHistPrimRawPtVsYVsMultMCAntiLambda) {
1455 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);
1456 fListHistV0->Add(f3dHistPrimRawPtVsYVsMultMCAntiLambda);
1458 if(! f3dHistPrimRawPtVsYVsMultMCK0Short) {
1459 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);
1460 fListHistV0->Add(f3dHistPrimRawPtVsYVsMultMCK0Short);
1463 //--- 3D Histo (Pt, Y, VertexZ)
1465 if(! f3dHistPrimRawPtVsYVsVertexZLambda) {
1466 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);
1467 fListHistV0->Add(f3dHistPrimRawPtVsYVsVertexZLambda);
1469 if(! f3dHistPrimRawPtVsYVsVertexZAntiLambda) {
1470 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);
1471 fListHistV0->Add(f3dHistPrimRawPtVsYVsVertexZAntiLambda);
1473 if(! f3dHistPrimRawPtVsYVsVertexZK0Short) {
1474 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);
1475 fListHistV0->Add(f3dHistPrimRawPtVsYVsVertexZK0Short);
1478 //--- 3D Histo (Pt, Y, Multiplicity), close to PV criterion
1480 if(! f3dHistPrimCloseToPVPtVsYVsMultLambda) {
1481 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);
1482 fListHistV0->Add(f3dHistPrimCloseToPVPtVsYVsMultLambda);
1484 if(! f3dHistPrimCloseToPVPtVsYVsMultAntiLambda) {
1485 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);
1486 fListHistV0->Add(f3dHistPrimCloseToPVPtVsYVsMultAntiLambda);
1488 if(! f3dHistPrimCloseToPVPtVsYVsMultK0Short) {
1489 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);
1490 fListHistV0->Add(f3dHistPrimCloseToPVPtVsYVsMultK0Short);
1494 //--- 3D Histo (Pt, Y, Proper Decay Length)
1496 if(! f3dHistPrimRawPtVsYVsDecayLengthLambda) {
1497 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);
1498 fListHistV0->Add(f3dHistPrimRawPtVsYVsDecayLengthLambda);
1500 if(! f3dHistPrimRawPtVsYVsDecayLengthAntiLambda) {
1501 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);
1502 fListHistV0->Add(f3dHistPrimRawPtVsYVsDecayLengthAntiLambda);
1504 if(! f3dHistPrimRawPtVsYVsDecayLengthK0Short) {
1505 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);
1506 fListHistV0->Add(f3dHistPrimRawPtVsYVsDecayLengthK0Short);
1509 //--------------------------------------------------------------------------------------
1511 //--------------------------------------------------------------------------------------
1512 //--- 3D Histo (Pt, Y, Multiplicity) for generated XiMinus/Plus, all generated
1514 if(! f3dHistGenPtVsYVsMultXiMinus) {
1515 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);
1516 fListHistV0->Add(f3dHistGenPtVsYVsMultXiMinus);
1518 if(! f3dHistGenPtVsYVsMultXiPlus) {
1519 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);
1520 fListHistV0->Add(f3dHistGenPtVsYVsMultXiPlus);
1523 if(! f3dHistGenPtVsYCMSVsMultXiMinus) {
1524 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);
1525 fListHistV0->Add(f3dHistGenPtVsYCMSVsMultXiMinus);
1527 if(! f3dHistGenPtVsYCMSVsMultXiPlus) {
1528 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);
1529 fListHistV0->Add(f3dHistGenPtVsYCMSVsMultXiPlus);
1532 //--------------------------------------------------------------------------------------
1533 //--- 3D Histo (Pt, Y, Multiplicity) for generated XiMinus/Plus, at selected analysis evts
1535 if(! f3dHistGenSelectedPtVsYVsMultXiMinus) {
1536 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);
1537 fListHistV0->Add(f3dHistGenSelectedPtVsYVsMultXiMinus);
1539 if(! f3dHistGenSelectedPtVsYVsMultXiPlus) {
1540 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);
1541 fListHistV0->Add(f3dHistGenSelectedPtVsYVsMultXiPlus);
1544 //CASCADES, analysis level, y CMS
1545 //--------------------------------------------------------------------------------------
1546 //--- 3D Histo (Pt, Y, Multiplicity) for generated XiMinus/Plus, at selected analysis evts
1548 if(! f3dHistGenSelectedPtVsYCMSVsMultXiMinus) {
1549 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);
1550 fListHistV0->Add(f3dHistGenSelectedPtVsYCMSVsMultXiMinus);
1552 if(! f3dHistGenSelectedPtVsYCMSVsMultXiPlus) {
1553 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);
1554 fListHistV0->Add(f3dHistGenSelectedPtVsYCMSVsMultXiPlus);
1557 //--------------------------------------------------------------------------------------
1559 //--------------------------------------------------------------------------------------
1560 //--- 3D Histo (Pt, Y, Multiplicity) for generated XiMinus/Plus, all generated
1562 if(! f3dHistGenPtVsYVsMultV0AXiMinus) {
1563 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);
1564 if( fkIsNuclear ) fListHistV0->Add(f3dHistGenPtVsYVsMultV0AXiMinus);
1566 if(! f3dHistGenPtVsYVsMultV0AXiPlus) {
1567 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);
1568 if( fkIsNuclear ) fListHistV0->Add(f3dHistGenPtVsYVsMultV0AXiPlus);
1571 if(! f3dHistGenPtVsYCMSVsMultV0AXiMinus) {
1572 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);
1573 if( fkIsNuclear ) fListHistV0->Add(f3dHistGenPtVsYCMSVsMultV0AXiMinus);
1575 if(! f3dHistGenPtVsYCMSVsMultV0AXiPlus) {
1576 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);
1577 if( fkIsNuclear ) fListHistV0->Add(f3dHistGenPtVsYCMSVsMultV0AXiPlus);
1580 //--------------------------------------------------------------------------------------
1581 //--- 3D Histo (Pt, Y, Multiplicity) for generated XiMinus/Plus, at selected analysis evts
1583 if(! f3dHistGenSelectedPtVsYVsMultV0AXiMinus) {
1584 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);
1585 if( fkIsNuclear ) fListHistV0->Add(f3dHistGenSelectedPtVsYVsMultV0AXiMinus);
1587 if(! f3dHistGenSelectedPtVsYVsMultV0AXiPlus) {
1588 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);
1589 if( fkIsNuclear ) fListHistV0->Add(f3dHistGenSelectedPtVsYVsMultV0AXiPlus);
1592 //CASCADES, analysis level, y CMS
1593 //--------------------------------------------------------------------------------------
1594 //--- 3D Histo (Pt, Y, Multiplicity) for generated XiMinus/Plus, at selected analysis evts
1596 if(! f3dHistGenSelectedPtVsYCMSVsMultV0AXiMinus) {
1597 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);
1598 if( fkIsNuclear ) fListHistV0->Add(f3dHistGenSelectedPtVsYCMSVsMultV0AXiMinus);
1600 if(! f3dHistGenSelectedPtVsYCMSVsMultV0AXiPlus) {
1601 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);
1602 if( fkIsNuclear ) fListHistV0->Add(f3dHistGenSelectedPtVsYCMSVsMultV0AXiPlus);
1605 //--------------------------------------------------------------------------------------
1607 //--------------------------------------------------------------------------------------
1608 //--- 3D Histo (Pt, Y, Multiplicity) for generated XiMinus/Plus, all generated
1610 if(! f3dHistGenPtVsYVsMultZNAXiMinus) {
1611 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);
1612 if( fkIsNuclear ) fListHistV0->Add(f3dHistGenPtVsYVsMultZNAXiMinus);
1614 if(! f3dHistGenPtVsYVsMultZNAXiPlus) {
1615 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);
1616 if( fkIsNuclear ) fListHistV0->Add(f3dHistGenPtVsYVsMultZNAXiPlus);
1619 if(! f3dHistGenPtVsYCMSVsMultZNAXiMinus) {
1620 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);
1621 if( fkIsNuclear ) fListHistV0->Add(f3dHistGenPtVsYCMSVsMultZNAXiMinus);
1623 if(! f3dHistGenPtVsYCMSVsMultZNAXiPlus) {
1624 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);
1625 if( fkIsNuclear ) fListHistV0->Add(f3dHistGenPtVsYCMSVsMultZNAXiPlus);
1628 //--------------------------------------------------------------------------------------
1629 //--- 3D Histo (Pt, Y, Multiplicity) for generated XiMinus/Plus, at selected analysis evts
1631 if(! f3dHistGenSelectedPtVsYVsMultZNAXiMinus) {
1632 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);
1633 if( fkIsNuclear ) fListHistV0->Add(f3dHistGenSelectedPtVsYVsMultZNAXiMinus);
1635 if(! f3dHistGenSelectedPtVsYVsMultZNAXiPlus) {
1636 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);
1637 if( fkIsNuclear ) fListHistV0->Add(f3dHistGenSelectedPtVsYVsMultZNAXiPlus);
1640 //CASCADES, analysis level, y CMS
1641 //--------------------------------------------------------------------------------------
1642 //--- 3D Histo (Pt, Y, Multiplicity) for generated XiMinus/Plus, at selected analysis evts
1644 if(! f3dHistGenSelectedPtVsYCMSVsMultZNAXiMinus) {
1645 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);
1646 if( fkIsNuclear ) fListHistV0->Add(f3dHistGenSelectedPtVsYCMSVsMultZNAXiMinus);
1648 if(! f3dHistGenSelectedPtVsYCMSVsMultZNAXiPlus) {
1649 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);
1650 if( fkIsNuclear ) fListHistV0->Add(f3dHistGenSelectedPtVsYCMSVsMultZNAXiPlus);
1653 //--------------------------------------------------------------------------------------
1655 //--------------------------------------------------------------------------------------
1656 //--- 3D Histo (Pt, Y, Multiplicity) for generated XiMinus/Plus, all generated
1658 if(! f3dHistGenPtVsYVsMultTRKXiMinus) {
1659 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);
1660 if( fkIsNuclear ) fListHistV0->Add(f3dHistGenPtVsYVsMultTRKXiMinus);
1662 if(! f3dHistGenPtVsYVsMultTRKXiPlus) {
1663 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);
1664 if( fkIsNuclear ) fListHistV0->Add(f3dHistGenPtVsYVsMultTRKXiPlus);
1667 if(! f3dHistGenPtVsYCMSVsMultTRKXiMinus) {
1668 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);
1669 if( fkIsNuclear ) fListHistV0->Add(f3dHistGenPtVsYCMSVsMultTRKXiMinus);
1671 if(! f3dHistGenPtVsYCMSVsMultTRKXiPlus) {
1672 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);
1673 if( fkIsNuclear ) fListHistV0->Add(f3dHistGenPtVsYCMSVsMultTRKXiPlus);
1676 //--------------------------------------------------------------------------------------
1677 //--- 3D Histo (Pt, Y, Multiplicity) for generated XiMinus/Plus, at selected analysis evts
1679 if(! f3dHistGenSelectedPtVsYVsMultTRKXiMinus) {
1680 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);
1681 if( fkIsNuclear ) fListHistV0->Add(f3dHistGenSelectedPtVsYVsMultTRKXiMinus);
1683 if(! f3dHistGenSelectedPtVsYVsMultTRKXiPlus) {
1684 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);
1685 if( fkIsNuclear ) fListHistV0->Add(f3dHistGenSelectedPtVsYVsMultTRKXiPlus);
1688 //CASCADES, analysis level, y CMS
1689 //--------------------------------------------------------------------------------------
1690 //--- 3D Histo (Pt, Y, Multiplicity) for generated XiMinus/Plus, at selected analysis evts
1692 if(! f3dHistGenSelectedPtVsYCMSVsMultTRKXiMinus) {
1693 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);
1694 if( fkIsNuclear ) fListHistV0->Add(f3dHistGenSelectedPtVsYCMSVsMultTRKXiMinus);
1696 if(! f3dHistGenSelectedPtVsYCMSVsMultTRKXiPlus) {
1697 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);
1698 if( fkIsNuclear ) fListHistV0->Add(f3dHistGenSelectedPtVsYCMSVsMultTRKXiPlus);
1702 //--------------------------------------------------------------------------------------
1704 //--------------------------------------------------------------------------------------
1705 //--- 3D Histo (Pt, Y, Multiplicity) for generated XiMinus/Plus, all generated
1707 if(! f3dHistGenPtVsYVsMultSPDXiMinus) {
1708 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);
1709 if( fkIsNuclear ) fListHistV0->Add(f3dHistGenPtVsYVsMultSPDXiMinus);
1711 if(! f3dHistGenPtVsYVsMultSPDXiPlus) {
1712 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);
1713 if( fkIsNuclear ) fListHistV0->Add(f3dHistGenPtVsYVsMultSPDXiPlus);
1716 if(! f3dHistGenPtVsYCMSVsMultSPDXiMinus) {
1717 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);
1718 if( fkIsNuclear ) fListHistV0->Add(f3dHistGenPtVsYCMSVsMultSPDXiMinus);
1720 if(! f3dHistGenPtVsYCMSVsMultSPDXiPlus) {
1721 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);
1722 if( fkIsNuclear ) fListHistV0->Add(f3dHistGenPtVsYCMSVsMultSPDXiPlus);
1725 //--------------------------------------------------------------------------------------
1726 //--- 3D Histo (Pt, Y, Multiplicity) for generated XiMinus/Plus, at selected analysis evts
1728 if(! f3dHistGenSelectedPtVsYVsMultSPDXiMinus) {
1729 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);
1730 if( fkIsNuclear ) fListHistV0->Add(f3dHistGenSelectedPtVsYVsMultSPDXiMinus);
1732 if(! f3dHistGenSelectedPtVsYVsMultSPDXiPlus) {
1733 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);
1734 if( fkIsNuclear ) fListHistV0->Add(f3dHistGenSelectedPtVsYVsMultSPDXiPlus);
1737 //CASCADES, analysis level, y CMS
1738 //--------------------------------------------------------------------------------------
1739 //--- 3D Histo (Pt, Y, Multiplicity) for generated XiMinus/Plus, at selected analysis evts
1741 if(! f3dHistGenSelectedPtVsYCMSVsMultSPDXiMinus) {
1742 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);
1743 if( fkIsNuclear ) fListHistV0->Add(f3dHistGenSelectedPtVsYCMSVsMultSPDXiMinus);
1745 if(! f3dHistGenSelectedPtVsYCMSVsMultSPDXiPlus) {
1746 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);
1747 if( fkIsNuclear ) fListHistV0->Add(f3dHistGenSelectedPtVsYCMSVsMultSPDXiPlus);
1752 //----------------------------------
1753 // Histos at analysis level
1754 //----------------------------------
1756 //The usual V0M business...
1758 if(! f3dHistPrimAnalysisPtVsYVsMultLambda) {
1759 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);
1760 fListHistV0->Add(f3dHistPrimAnalysisPtVsYVsMultLambda);
1762 if(! f3dHistPrimAnalysisPtVsYVsMultAntiLambda) {
1763 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);
1764 fListHistV0->Add(f3dHistPrimAnalysisPtVsYVsMultAntiLambda);
1766 if(! f3dHistPrimAnalysisPtVsYVsMultK0Short) {
1767 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);
1768 fListHistV0->Add(f3dHistPrimAnalysisPtVsYVsMultK0Short);
1771 if(! f3dHistPrimAnalysisPtVsYCMSVsMultLambda) {
1772 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);
1773 fListHistV0->Add(f3dHistPrimAnalysisPtVsYCMSVsMultLambda);
1775 if(! f3dHistPrimAnalysisPtVsYCMSVsMultAntiLambda) {
1776 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);
1777 fListHistV0->Add(f3dHistPrimAnalysisPtVsYCMSVsMultAntiLambda);
1779 if(! f3dHistPrimAnalysisPtVsYCMSVsMultK0Short) {
1780 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);
1781 fListHistV0->Add(f3dHistPrimAnalysisPtVsYCMSVsMultK0Short);
1784 //TRUE Multiplicity Business
1786 if(! f3dHistPrimAnalysisPtVsYVsMultMCLambda) {
1787 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);
1788 fListHistV0->Add(f3dHistPrimAnalysisPtVsYVsMultMCLambda);
1790 if(! f3dHistPrimAnalysisPtVsYVsMultMCAntiLambda) {
1791 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);
1792 fListHistV0->Add(f3dHistPrimAnalysisPtVsYVsMultMCAntiLambda);
1794 if(! f3dHistPrimAnalysisPtVsYVsMultMCK0Short) {
1795 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);
1796 fListHistV0->Add(f3dHistPrimAnalysisPtVsYVsMultMCK0Short);
1799 if(! f3dHistPrimAnalysisPtVsYCMSVsMultMCLambda) {
1800 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);
1801 fListHistV0->Add(f3dHistPrimAnalysisPtVsYCMSVsMultMCLambda);
1803 if(! f3dHistPrimAnalysisPtVsYCMSVsMultMCAntiLambda) {
1804 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);
1805 fListHistV0->Add(f3dHistPrimAnalysisPtVsYCMSVsMultMCAntiLambda);
1807 if(! f3dHistPrimAnalysisPtVsYCMSVsMultMCK0Short) {
1808 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);
1809 fListHistV0->Add(f3dHistPrimAnalysisPtVsYCMSVsMultMCK0Short);
1814 if(! f3dHistPrimAnalysisPtVsYVsMultV0ALambda) {
1815 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);
1816 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimAnalysisPtVsYVsMultV0ALambda);
1818 if(! f3dHistPrimAnalysisPtVsYVsMultV0AAntiLambda) {
1819 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);
1820 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimAnalysisPtVsYVsMultV0AAntiLambda);
1822 if(! f3dHistPrimAnalysisPtVsYVsMultV0AK0Short) {
1823 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);
1824 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimAnalysisPtVsYVsMultV0AK0Short);
1827 if(! f3dHistPrimAnalysisPtVsYCMSVsMultV0ALambda) {
1828 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);
1829 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimAnalysisPtVsYCMSVsMultV0ALambda);
1831 if(! f3dHistPrimAnalysisPtVsYCMSVsMultV0AAntiLambda) {
1832 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);
1833 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimAnalysisPtVsYCMSVsMultV0AAntiLambda);
1835 if(! f3dHistPrimAnalysisPtVsYCMSVsMultV0AK0Short) {
1836 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);
1837 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimAnalysisPtVsYCMSVsMultV0AK0Short);
1842 if(! f3dHistPrimAnalysisPtVsYVsMultZNALambda) {
1843 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);
1844 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimAnalysisPtVsYVsMultZNALambda);
1846 if(! f3dHistPrimAnalysisPtVsYVsMultZNAAntiLambda) {
1847 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);
1848 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimAnalysisPtVsYVsMultZNAAntiLambda);
1850 if(! f3dHistPrimAnalysisPtVsYVsMultZNAK0Short) {
1851 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);
1852 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimAnalysisPtVsYVsMultZNAK0Short);
1855 if(! f3dHistPrimAnalysisPtVsYCMSVsMultZNALambda) {
1856 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);
1857 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimAnalysisPtVsYCMSVsMultZNALambda);
1859 if(! f3dHistPrimAnalysisPtVsYCMSVsMultZNAAntiLambda) {
1860 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);
1861 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimAnalysisPtVsYCMSVsMultZNAAntiLambda);
1863 if(! f3dHistPrimAnalysisPtVsYCMSVsMultZNAK0Short) {
1864 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);
1865 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimAnalysisPtVsYCMSVsMultZNAK0Short);
1870 if(! f3dHistPrimAnalysisPtVsYVsMultTRKLambda) {
1871 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);
1872 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimAnalysisPtVsYVsMultTRKLambda);
1874 if(! f3dHistPrimAnalysisPtVsYVsMultTRKAntiLambda) {
1875 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);
1876 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimAnalysisPtVsYVsMultTRKAntiLambda);
1878 if(! f3dHistPrimAnalysisPtVsYVsMultTRKK0Short) {
1879 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);
1880 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimAnalysisPtVsYVsMultTRKK0Short);
1883 if(! f3dHistPrimAnalysisPtVsYCMSVsMultTRKLambda) {
1884 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);
1885 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimAnalysisPtVsYCMSVsMultTRKLambda);
1887 if(! f3dHistPrimAnalysisPtVsYCMSVsMultTRKAntiLambda) {
1888 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);
1889 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimAnalysisPtVsYCMSVsMultTRKAntiLambda);
1891 if(! f3dHistPrimAnalysisPtVsYCMSVsMultTRKK0Short) {
1892 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);
1893 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimAnalysisPtVsYCMSVsMultTRKK0Short);
1898 if(! f3dHistPrimAnalysisPtVsYVsMultSPDLambda) {
1899 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);
1900 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimAnalysisPtVsYVsMultSPDLambda);
1902 if(! f3dHistPrimAnalysisPtVsYVsMultSPDAntiLambda) {
1903 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);
1904 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimAnalysisPtVsYVsMultSPDAntiLambda);
1906 if(! f3dHistPrimAnalysisPtVsYVsMultSPDK0Short) {
1907 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);
1908 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimAnalysisPtVsYVsMultSPDK0Short);
1911 if(! f3dHistPrimAnalysisPtVsYCMSVsMultSPDLambda) {
1912 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);
1913 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimAnalysisPtVsYCMSVsMultSPDLambda);
1915 if(! f3dHistPrimAnalysisPtVsYCMSVsMultSPDAntiLambda) {
1916 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);
1917 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimAnalysisPtVsYCMSVsMultSPDAntiLambda);
1919 if(! f3dHistPrimAnalysisPtVsYCMSVsMultSPDK0Short) {
1920 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);
1921 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimAnalysisPtVsYCMSVsMultSPDK0Short);
1924 //----------------------------------
1925 // Primary Vertex Position Histos
1926 //----------------------------------
1929 fHistPVx = new TH1F("fHistPVx",
1930 "PV x position;Nbr of Evts;x",
1932 fListHistV0->Add(fHistPVx);
1935 fHistPVy = new TH1F("fHistPVy",
1936 "PV y position;Nbr of Evts;y",
1938 fListHistV0->Add(fHistPVy);
1941 fHistPVz = new TH1F("fHistPVz",
1942 "PV z position;Nbr of Evts;z",
1944 fListHistV0->Add(fHistPVz);
1947 if(! fHistPVxAnalysis) {
1948 fHistPVxAnalysis = new TH1F("fHistPVxAnalysis",
1949 "PV x position;Nbr of Evts;x",
1951 fListHistV0->Add(fHistPVxAnalysis);
1953 if(! fHistPVyAnalysis) {
1954 fHistPVyAnalysis = new TH1F("fHistPVyAnalysis",
1955 "PV y position;Nbr of Evts;y",
1957 fListHistV0->Add(fHistPVyAnalysis);
1959 if(! fHistPVzAnalysis) {
1960 fHistPVzAnalysis = new TH1F("fHistPVzAnalysis",
1961 "PV z position;Nbr of Evts;z",
1963 fListHistV0->Add(fHistPVzAnalysis);
1966 if(! fHistPVxAnalysisHasHighPtLambda) {
1967 fHistPVxAnalysisHasHighPtLambda = new TH1F("fHistPVxAnalysisHasHighPtLambda",
1968 "PV x position;Nbr of Evts;x",
1970 fListHistV0->Add(fHistPVxAnalysisHasHighPtLambda);
1972 if(! fHistPVyAnalysisHasHighPtLambda) {
1973 fHistPVyAnalysisHasHighPtLambda = new TH1F("fHistPVyAnalysisHasHighPtLambda",
1974 "PV y position;Nbr of Evts;y",
1976 fListHistV0->Add(fHistPVyAnalysisHasHighPtLambda);
1978 if(! fHistPVzAnalysisHasHighPtLambda) {
1979 fHistPVzAnalysisHasHighPtLambda = new TH1F("fHistPVzAnalysisHasHighPtLambda",
1980 "PV z position;Nbr of Evts;z",
1982 fListHistV0->Add(fHistPVzAnalysisHasHighPtLambda);
1984 if(! fHistSwappedV0Counter) {
1985 fHistSwappedV0Counter = new TH1F("fHistSwappedV0Counter",
1986 "Swap or not histo;Swapped (1) or not (0); count",
1988 fListHistV0->Add(fHistSwappedV0Counter);
1991 //List of Histograms: Normal
1992 PostData(1, fListHistV0);
1994 //TTree Object: Saved to base directory. Should cache to disk while saving.
1995 //(Important to avoid excessive memory usage, particularly when merging)
1998 }// end UserCreateOutputObjects
2001 //________________________________________________________________________
2002 void AliAnalysisTaskExtractPerformanceV0::UserExec(Option_t *)
2005 // Called for each event
2007 AliESDEvent *lESDevent = 0x0;
2008 AliMCEvent *lMCevent = 0x0;
2009 AliStack *lMCstack = 0x0;
2011 Int_t lNumberOfV0s = -1;
2012 Double_t lTrkgPrimaryVtxPos[3] = {-100.0, -100.0, -100.0};
2013 Double_t lBestPrimaryVtxPos[3] = {-100.0, -100.0, -100.0};
2014 Double_t lMagneticField = -10.;
2016 // Connect to the InputEvent
2017 // After these lines, we should have an ESD/AOD event + the number of V0s in it.
2019 // Appropriate for ESD analysis!
2021 lESDevent = dynamic_cast<AliESDEvent*>( InputEvent() );
2023 AliWarning("ERROR: lESDevent not available \n");
2027 fTreeVariableRunNumber = lESDevent->GetRunNumber();
2028 fTreeVariableEventNumber =
2029 ( ( ((ULong64_t)lESDevent->GetPeriodNumber() ) << 36 ) |
2030 ( ((ULong64_t)lESDevent->GetOrbitNumber () ) << 12 ) |
2031 ((ULong64_t)lESDevent->GetBunchCrossNumber() ) );
2033 lMCevent = MCEvent();
2035 Printf("ERROR: Could not retrieve MC event \n");
2036 cout << "Name of the file with pb :" << fInputHandler->GetTree()->GetCurrentFile()->GetName() << endl;
2040 lMCstack = lMCevent->Stack();
2042 Printf("ERROR: Could not retrieve MC stack \n");
2043 cout << "Name of the file with pb :" << fInputHandler->GetTree()->GetCurrentFile()->GetName() << endl;
2047 //------------------------------------------------
2048 // Rerun V0 vertexer, if asked for
2049 // --- WARNING: Be careful when using in PbPb
2050 //------------------------------------------------
2051 if( fkRunV0Vertexer ){
2052 lESDevent->ResetV0s();
2053 AliV0vertexer lV0vtxer;
2054 lV0vtxer.SetDefaultCuts(fV0Sels);
2055 lV0vtxer.Tracks2V0vertices(lESDevent);
2058 TArrayF mcPrimaryVtx;
2059 AliGenEventHeader* mcHeader=lMCevent->GenEventHeader();
2060 if(!mcHeader) return;
2061 mcHeader->PrimaryVertex(mcPrimaryVtx);
2063 //------------------------------------------------
2064 // Multiplicity Information Acquistion
2065 //------------------------------------------------
2067 //REVISED multiplicity estimator after 'multiplicity day' (2011)
2068 Int_t lMultiplicity = -100;
2069 Int_t lMultiplicityV0A = -100;
2070 Int_t lMultiplicityZNA = -100;
2071 Int_t lMultiplicityTRK = -100;
2072 Int_t lMultiplicitySPD = -100;
2075 if(fkIsNuclear == kFALSE) lMultiplicity = fESDtrackCuts->GetReferenceMultiplicity(lESDevent, AliESDtrackCuts::kTrackletsITSTPC,0.5);
2077 //---> If this is a nuclear collision, then go nuclear on "multiplicity" variable...
2078 //---> Warning: Experimental
2079 if(fkIsNuclear == kTRUE){
2080 AliCentrality* centrality;
2081 centrality = lESDevent->GetCentrality();
2082 lMultiplicity = ( ( Int_t ) ( centrality->GetCentralityPercentile( fCentralityEstimator.Data() ) ) );
2083 lMultiplicityV0A = ( ( Int_t ) ( centrality->GetCentralityPercentile( "V0A" ) ) );
2084 lMultiplicityZNA = ( ( Int_t ) ( centrality->GetCentralityPercentile( "ZNA" ) ) );
2085 lMultiplicityTRK = ( ( Int_t ) ( centrality->GetCentralityPercentile( "TRK" ) ) );
2086 lMultiplicitySPD = ( ( Int_t ) ( centrality->GetCentralityPercentile( "CL1" ) ) );
2087 if (centrality->GetQuality()>1) {
2088 PostData(1, fListHistV0);
2094 //Set variable for filling tree afterwards!
2095 //---> pp case......: GetReferenceMultiplicity
2096 //---> Pb-Pb case...: Centrality by V0M
2097 fTreeVariableMultiplicity = lMultiplicity;
2098 fTreeVariableMultiplicityV0A = lMultiplicityV0A;
2099 fTreeVariableMultiplicityZNA = lMultiplicityZNA;
2100 fTreeVariableMultiplicityTRK = lMultiplicityTRK;
2101 fTreeVariableMultiplicitySPD = lMultiplicitySPD;
2103 fHistV0MultiplicityBeforeTrigSel->Fill ( lESDevent->GetNumberOfV0s() );
2105 fHistMultiplicityBeforeTrigSel->Fill ( lMultiplicity );
2106 fHistMultiplicityV0ABeforeTrigSel->Fill ( lMultiplicityV0A );
2107 fHistMultiplicityZNABeforeTrigSel->Fill ( lMultiplicityZNA );
2108 fHistMultiplicityTRKBeforeTrigSel->Fill ( lMultiplicityTRK );
2109 fHistMultiplicitySPDBeforeTrigSel->Fill ( lMultiplicitySPD );
2111 //------------------------------------------------
2112 // MC Information Acquistion
2113 //------------------------------------------------
2115 Int_t iNumberOfPrimaries = -1;
2116 iNumberOfPrimaries = lMCstack->GetNprimary();
2117 if(iNumberOfPrimaries < 1) return;
2118 Bool_t lHasHighPtLambda = kFALSE;
2120 //------------------------------------------------
2121 // Variable Definition
2122 //------------------------------------------------
2124 Int_t lNbMCPrimary = 0;
2126 Int_t lPdgcodeCurrentPart = 0;
2127 Double_t lRapCurrentPart = 0;
2128 Double_t lPtCurrentPart = 0;
2130 //Int_t lComeFromSigma = 0;
2132 // current mc particle 's mother
2133 //Int_t iCurrentMother = 0;
2134 lNbMCPrimary = lMCstack->GetNprimary();
2136 //------------------------------------------------
2137 // Pre-Physics Selection
2138 //------------------------------------------------
2140 //----- Loop on primary Xi, Omega --------------------------------------------------------------
2141 for (Int_t iCurrentLabelStack = 0; iCurrentLabelStack < lNbMCPrimary; iCurrentLabelStack++)
2142 {// This is the begining of the loop on primaries
2144 TParticle* lCurrentParticlePrimary = 0x0;
2145 lCurrentParticlePrimary = lMCstack->Particle( iCurrentLabelStack );
2146 if(!lCurrentParticlePrimary){
2147 Printf("Cascade loop %d - MC TParticle pointer to current stack particle = 0x0 ! Skip ...\n", iCurrentLabelStack );
2150 if ( TMath::Abs(lCurrentParticlePrimary->GetPdgCode()) == 3312 || TMath::Abs(lCurrentParticlePrimary->GetPdgCode()) == 3334 ) {
2151 Double_t lRapXiMCPrimary = -100;
2152 if( (lCurrentParticlePrimary->Energy() - lCurrentParticlePrimary->Pz() +1.e-13) != 0 ) {
2153 if ( (lCurrentParticlePrimary->Energy() + lCurrentParticlePrimary->Pz()) / (lCurrentParticlePrimary->Energy() - lCurrentParticlePrimary->Pz() +1.e-13) !=0 ){
2154 lRapXiMCPrimary = 0.5*TMath::Log( (lCurrentParticlePrimary->Energy() + lCurrentParticlePrimary->Pz()) / (lCurrentParticlePrimary->Energy() - lCurrentParticlePrimary->Pz() +1.e-13) );
2158 //=================================================================================
2160 if( lCurrentParticlePrimary->GetPdgCode() == 3312 ){
2161 lPtCurrentPart = lCurrentParticlePrimary->Pt();
2162 f3dHistGenPtVsYVsMultXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicity);
2163 f3dHistGenPtVsYCMSVsMultXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicity);
2165 f3dHistGenPtVsYVsMultV0AXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicityV0A);
2166 f3dHistGenPtVsYCMSVsMultV0AXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicityV0A);
2167 f3dHistGenPtVsYVsMultZNAXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicityZNA);
2168 f3dHistGenPtVsYCMSVsMultZNAXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicityZNA);
2169 f3dHistGenPtVsYVsMultTRKXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicityTRK);
2170 f3dHistGenPtVsYCMSVsMultTRKXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicityTRK);
2171 f3dHistGenPtVsYVsMultSPDXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicitySPD);
2172 f3dHistGenPtVsYCMSVsMultSPDXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicitySPD);
2174 if( lCurrentParticlePrimary->GetPdgCode() == -3312 ){
2175 lPtCurrentPart = lCurrentParticlePrimary->Pt();
2176 f3dHistGenPtVsYVsMultXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicity);
2177 f3dHistGenPtVsYCMSVsMultXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicity);
2179 f3dHistGenPtVsYVsMultV0AXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicityV0A);
2180 f3dHistGenPtVsYCMSVsMultV0AXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicityV0A);
2181 f3dHistGenPtVsYVsMultZNAXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicityZNA);
2182 f3dHistGenPtVsYCMSVsMultZNAXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicityZNA);
2183 f3dHistGenPtVsYVsMultTRKXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicityTRK);
2184 f3dHistGenPtVsYCMSVsMultTRKXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicityTRK);
2185 f3dHistGenPtVsYVsMultSPDXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicitySPD);
2186 f3dHistGenPtVsYCMSVsMultSPDXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicitySPD);
2190 //----- End Loop on primary Xi, Omega ----------------------------------------------------------
2192 //--------- GENERATED NUMBER OF CHARGED PARTICLES
2193 // ---> Set Variables to Zero again
2194 // ---> Variable Definition
2196 Long_t lNumberOfCharged = 0;
2198 //----- Loop on Stack ----------------------------------------------------------------
2199 for (Int_t iCurrentLabelStack = 0; iCurrentLabelStack < (lMCstack->GetNtrack()); iCurrentLabelStack++)
2200 {// This is the begining of the loop on tracks
2201 TParticle* particleOne = lMCstack->Particle(iCurrentLabelStack);
2202 if(!particleOne) continue;
2203 if(!particleOne->GetPDG()) continue;
2204 Double_t lThisCharge = particleOne->GetPDG()->Charge()/3.;
2205 if(TMath::Abs(lThisCharge)<0.001) continue;
2206 if(! (lMCstack->IsPhysicalPrimary(iCurrentLabelStack)) ) continue;
2208 //Double_t gpt = particleOne -> Pt();
2209 Double_t geta = particleOne -> Eta();
2211 if( TMath::Abs(geta) < 0.5) lNumberOfCharged++;
2212 }//End of loop on tracks
2213 //----- End Loop on Stack ------------------------------------------------------------
2215 //Double_t lpArapidityShift = 0.465;
2216 Bool_t lStackNatural = kTRUE;
2217 //----- Loop on Lambda, K0Short ----------------------------------------------------------------
2218 for (Int_t iCurrentLabelStack = 0; iCurrentLabelStack < (lMCstack->GetNtrack()); iCurrentLabelStack++)
2219 {// This is the begining of the loop on tracks
2221 TParticle* lCurrentParticleForLambdaCheck = 0x0;
2222 lCurrentParticleForLambdaCheck = lMCstack->Particle( iCurrentLabelStack );
2223 if(!lCurrentParticleForLambdaCheck){
2224 Printf("V0s loop %d - MC TParticle pointer to current stack particle = 0x0 ! Skip ...\n", iCurrentLabelStack );
2228 //=================================================================================
2229 //Single-Strange checks
2230 // Keep only K0s, Lambda and AntiLambda:
2231 lPdgcodeCurrentPart = lCurrentParticleForLambdaCheck->GetPdgCode();
2233 if ( (lCurrentParticleForLambdaCheck->GetPdgCode() == 310 ) ||
2234 (lCurrentParticleForLambdaCheck->GetPdgCode() == 3122 ) ||
2235 (lCurrentParticleForLambdaCheck->GetPdgCode() == -3122 ) )
2237 lRapCurrentPart = MyRapidity(lCurrentParticleForLambdaCheck->Energy(),lCurrentParticleForLambdaCheck->Pz());
2238 lPtCurrentPart = lCurrentParticleForLambdaCheck->Pt();
2240 //Use Close to PV for filling CloseToPV histograms!
2241 Double_t dx, dy, dz;
2243 dx = ( (mcPrimaryVtx.At(0)) - (lCurrentParticleForLambdaCheck->Vx()) );
2244 dy = ( (mcPrimaryVtx.At(1)) - (lCurrentParticleForLambdaCheck->Vy()) );
2245 dz = ( (mcPrimaryVtx.At(2)) - (lCurrentParticleForLambdaCheck->Vz()) );
2246 Double_t lDistToPV = TMath::Sqrt(dx*dx + dy*dy + dz*dz);
2247 if( lDistToPV <= 0.001){
2248 if( lPdgcodeCurrentPart == 3122 ){
2249 f3dHistPrimCloseToPVPtVsYVsMultLambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicity);
2251 if( lPdgcodeCurrentPart == -3122 ){
2252 f3dHistPrimCloseToPVPtVsYVsMultAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicity);
2254 if( lPdgcodeCurrentPart == 310 ){
2255 f3dHistPrimCloseToPVPtVsYVsMultK0Short->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicity);
2259 //Use Physical Primaries only for filling PrimRaw Histograms!
2260 if ( lMCstack->IsPhysicalPrimary(iCurrentLabelStack)!=kTRUE ) continue;
2262 lStackNatural = lMCevent->IsFromBGEvent(iCurrentLabelStack); //Is it?
2263 if (!lStackNatural){
2264 if (!(lCurrentParticleForLambdaCheck->GetFirstMother()<0))
2265 {lStackNatural = kTRUE;} // because there are primaries (ALICE definition) not produced in the collision
2268 if( lPdgcodeCurrentPart == 3122 ){
2269 f3dHistPrimRawPtVsYVsMultLambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicity);
2270 f3dHistPrimRawPtVsYCMSVsMultLambda->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicity);
2272 f3dHistPrimRawPtVsYVsMultV0ALambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicityV0A);
2273 f3dHistPrimRawPtVsYCMSVsMultV0ALambda->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicityV0A);
2274 f3dHistPrimRawPtVsYVsMultZNALambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicityZNA);
2275 f3dHistPrimRawPtVsYCMSVsMultZNALambda->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicityZNA);
2276 f3dHistPrimRawPtVsYVsMultTRKLambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicityTRK);
2277 f3dHistPrimRawPtVsYCMSVsMultTRKLambda->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicityTRK);
2278 f3dHistPrimRawPtVsYVsMultSPDLambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicitySPD);
2279 f3dHistPrimRawPtVsYCMSVsMultSPDLambda->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicitySPD);
2281 if(lStackNatural){f3dHistPrimRawPtVsYVsMultNonInjLambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicity);}
2282 f3dHistPrimRawPtVsYVsMultMCLambda->Fill(lPtCurrentPart, lRapCurrentPart, lNumberOfCharged);
2283 f3dHistPrimRawPtVsYVsVertexZLambda->Fill(lPtCurrentPart, lRapCurrentPart, mcPrimaryVtx.At(2));
2284 if( TMath::Abs( lCurrentParticleForLambdaCheck->Eta() )<1.2 && lPtCurrentPart>2 ){
2285 lHasHighPtLambda = kTRUE; //Keep track of events with Lambda within |eta|<1.2 and pt>2
2288 if( lPdgcodeCurrentPart == -3122 ){
2289 f3dHistPrimRawPtVsYVsMultAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicity);
2290 f3dHistPrimRawPtVsYCMSVsMultAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicity);
2292 f3dHistPrimRawPtVsYVsMultV0AAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicityV0A);
2293 f3dHistPrimRawPtVsYCMSVsMultV0AAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicityV0A);
2294 f3dHistPrimRawPtVsYVsMultZNAAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicityZNA);
2295 f3dHistPrimRawPtVsYCMSVsMultZNAAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicityZNA);
2296 f3dHistPrimRawPtVsYVsMultTRKAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicityTRK);
2297 f3dHistPrimRawPtVsYCMSVsMultTRKAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicityTRK);
2298 f3dHistPrimRawPtVsYVsMultSPDAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicitySPD);
2299 f3dHistPrimRawPtVsYCMSVsMultSPDAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicitySPD);
2301 if(lStackNatural){f3dHistPrimRawPtVsYVsMultNonInjAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicity);}
2302 f3dHistPrimRawPtVsYVsMultMCAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart, lNumberOfCharged);
2303 f3dHistPrimRawPtVsYVsVertexZAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart, mcPrimaryVtx.At(2));
2305 if( lPdgcodeCurrentPart == 310 ){
2306 f3dHistPrimRawPtVsYVsMultK0Short->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicity);
2307 f3dHistPrimRawPtVsYCMSVsMultK0Short->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicity);
2309 f3dHistPrimRawPtVsYVsMultV0AK0Short->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicityV0A);
2310 f3dHistPrimRawPtVsYCMSVsMultV0AK0Short->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicityV0A);
2311 f3dHistPrimRawPtVsYVsMultZNAK0Short->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicityZNA);
2312 f3dHistPrimRawPtVsYCMSVsMultZNAK0Short->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicityZNA);
2313 f3dHistPrimRawPtVsYVsMultTRKK0Short->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicityTRK);
2314 f3dHistPrimRawPtVsYCMSVsMultTRKK0Short->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicityTRK);
2315 f3dHistPrimRawPtVsYVsMultSPDK0Short->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicitySPD);
2316 f3dHistPrimRawPtVsYCMSVsMultSPDK0Short->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicitySPD);
2318 if(lStackNatural){f3dHistPrimRawPtVsYVsMultNonInjK0Short->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicity);}
2319 f3dHistPrimRawPtVsYVsMultMCK0Short->Fill(lPtCurrentPart, lRapCurrentPart, lNumberOfCharged);
2320 f3dHistPrimRawPtVsYVsVertexZK0Short->Fill(lPtCurrentPart, lRapCurrentPart, mcPrimaryVtx.At(2));
2322 //Decay Length Acquisition=====================================================
2323 Double_t decaylength = -1;
2324 Double_t lV0Mass = -1;
2326 if( !(lCurrentParticleForLambdaCheck->GetDaughter(0) < 0) ) {
2327 TParticle* lDght0ofV0 = lMCstack->Particle( lCurrentParticleForLambdaCheck->GetDaughter(0) ); //get first daughter
2328 if(lDght0ofV0){ // skip if not defined.
2329 decaylength = TMath::Sqrt(
2330 TMath::Power( lCurrentParticleForLambdaCheck->Vx() - lDght0ofV0->Vx() , 2) +
2331 TMath::Power( lCurrentParticleForLambdaCheck->Vy() - lDght0ofV0->Vy() , 2) +
2332 TMath::Power( lCurrentParticleForLambdaCheck->Vz() - lDght0ofV0->Vz() , 2)
2334 //Need to correct for relativitity! Involves multiplying by mass and dividing by momentum.
2335 if(TMath::Abs( lPdgcodeCurrentPart ) == 3122 ) { lV0Mass = 1.115683; }
2336 if(TMath::Abs( lPdgcodeCurrentPart ) == 310 ) { lV0Mass = 0.497614; }
2337 if( lCurrentParticleForLambdaCheck->P() + 1e-10 != 0 ) decaylength = ( lV0Mass * decaylength ) / ( lCurrentParticleForLambdaCheck->P() + 1e-10 );
2338 if( lCurrentParticleForLambdaCheck->P() + 1e-10 == 0 ) decaylength = 1e+5;
2341 if( lPdgcodeCurrentPart == 3122) f3dHistPrimRawPtVsYVsDecayLengthLambda ->Fill( lPtCurrentPart, lRapCurrentPart , decaylength );
2342 if( lPdgcodeCurrentPart == -3122) f3dHistPrimRawPtVsYVsDecayLengthAntiLambda ->Fill( lPtCurrentPart, lRapCurrentPart , decaylength );
2343 if( lPdgcodeCurrentPart == 310) f3dHistPrimRawPtVsYVsDecayLengthK0Short ->Fill( lPtCurrentPart, lRapCurrentPart , decaylength );
2345 }//End of loop on tracks
2346 //----- End Loop on Lambda, K0Short ------------------------------------------------------------
2349 f2dHistMultiplicityVsTrueBeforeTrigSel->Fill ( lMultiplicity , lNumberOfCharged );
2351 fTreeVariableMultiplicityMC = lNumberOfCharged;
2353 fHistGenVertexZBeforeTrigSel->Fill( (mcPrimaryVtx.At(2)) );
2355 lPdgcodeCurrentPart = 0;
2356 lRapCurrentPart = 0;
2359 //------------------------------------------------
2360 // Physics Selection
2361 //------------------------------------------------
2363 UInt_t maskIsSelected = ((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected();
2364 Bool_t isSelected = 0;
2365 Bool_t isSelectedExtra = kTRUE; //extra sel, default YES
2366 isSelected = (maskIsSelected & AliVEvent::kMB) == AliVEvent::kMB;
2368 //pA triggering: CINT7
2369 if( fkSwitchINT7 ) isSelected = (maskIsSelected & AliVEvent::kINT7) == AliVEvent::kINT7;
2371 if(fkSkipTrigger==kFALSE){
2372 //Extra selection applies if with/without SDD is to be dealth with
2373 if( fkFastOnly == "kFastOnly"){
2374 //If not kFastOnly, isSelectedExtra will be kFALSE; procedure will reject it
2375 isSelectedExtra = (maskIsSelected & AliVEvent::kFastOnly) == AliVEvent::kFastOnly;
2377 if( fkFastOnly == "NotkFastOnly"){
2378 //If not kFastOnly, isSelectedExtra will be kTRUE; procedure will accept it
2379 isSelectedExtra = !( (maskIsSelected & AliVEvent::kFastOnly) == AliVEvent::kFastOnly );
2382 //Standard Min-Bias Selection
2383 if ( ! isSelected ) {
2384 PostData(1, fListHistV0);
2388 //Check if goes through extra selections
2389 //isSelectedExtra will be true in case -> fkFastOnly==""
2390 //isSelectedExtra will be true in case -> fkFastOnly=="kFastOnly" && bit kFastOnly ON
2391 //isSelectedExtra will be true in case -> fkFastOnly=="NotkFastOnly" && bit kFastOnly OFF
2392 if ( !isSelectedExtra ) {
2393 PostData(1, fListHistV0);
2399 f2dHistMultiplicityVsTrueForTrigEvt->Fill ( lMultiplicity , lNumberOfCharged );
2400 fHistGenVertexZForTrigEvt->Fill( mcPrimaryVtx.At(2) );
2402 //------------------------------------------------
2403 // After Trigger Selection
2404 //------------------------------------------------
2406 lNumberOfV0s = lESDevent->GetNumberOfV0s();
2408 //Set variable for filling tree afterwards!
2409 fHistV0MultiplicityForTrigEvt->Fill(lNumberOfV0s);
2410 fHistMultiplicityForTrigEvt->Fill ( lMultiplicity );
2411 fHistMultiplicityV0AForTrigEvt ->Fill( lMultiplicityV0A );
2412 fHistMultiplicityZNAForTrigEvt ->Fill( lMultiplicityZNA );
2413 fHistMultiplicityTRKForTrigEvt ->Fill( lMultiplicityTRK );
2414 fHistMultiplicitySPDForTrigEvt ->Fill( lMultiplicitySPD );
2416 //------------------------------------------------
2417 // Getting: Primary Vertex + MagField Info
2418 //------------------------------------------------
2420 const AliESDVertex *lPrimaryTrackingESDVtx = lESDevent->GetPrimaryVertexTracks();
2421 // get the vtx stored in ESD found with tracks
2422 lPrimaryTrackingESDVtx->GetXYZ( lTrkgPrimaryVtxPos );
2424 const AliESDVertex *lPrimaryBestESDVtx = lESDevent->GetPrimaryVertex();
2425 // get the best primary vertex available for the event
2426 // As done in AliCascadeVertexer, we keep the one which is the best one available.
2427 // between : Tracking vertex > SPD vertex > TPC vertex > default SPD vertex
2428 // This one will be used for next calculations (DCA essentially)
2429 lPrimaryBestESDVtx->GetXYZ( lBestPrimaryVtxPos );
2431 Double_t lPrimaryVtxPosition[3];
2432 const AliVVertex *primaryVtx = lESDevent->GetPrimaryVertex();
2433 lPrimaryVtxPosition[0] = primaryVtx->GetX();
2434 lPrimaryVtxPosition[1] = primaryVtx->GetY();
2435 lPrimaryVtxPosition[2] = primaryVtx->GetZ();
2436 fHistPVx->Fill( lPrimaryVtxPosition[0] );
2437 fHistPVy->Fill( lPrimaryVtxPosition[1] );
2438 fHistPVz->Fill( lPrimaryVtxPosition[2] );
2440 f2dHistMultiplicityVsVertexZForTrigEvt->Fill( lMultiplicity, lPrimaryVtxPosition[2] );
2442 //------------------------------------------------
2443 // Primary Vertex Z position: SKIP
2444 //------------------------------------------------
2446 if(TMath::Abs(lBestPrimaryVtxPos[2]) > 10.0 && fkpAVertexSelection == kFALSE) {
2447 AliWarning("Pb / | Z position of Best Prim Vtx | > 10.0 cm ... return !");
2448 PostData(1, fListHistV0);
2452 if(fkpAVertexSelection==kTRUE && fUtils->IsFirstEventInChunk(lESDevent)) {
2453 AliWarning("Pb / | This is the first event in the chunk!");
2454 PostData(1, fListHistV0);
2458 if(fkpAVertexSelection==kTRUE && !fUtils->IsVertexSelected2013pA(lESDevent)) {
2459 AliWarning("Pb / | Vertex not selected by 2013 pA criteria!");
2460 PostData(1, fListHistV0);
2465 f2dHistMultiplicityVsVertexZ->Fill( lMultiplicity, lPrimaryVtxPosition[2] );
2467 lMagneticField = lESDevent->GetMagneticField( );
2468 fHistV0MultiplicityForSelEvt ->Fill( lNumberOfV0s );
2469 fHistMultiplicity->Fill(lMultiplicity);
2470 fHistMultiplicityV0A->Fill(lMultiplicityV0A);
2471 fHistMultiplicityZNA->Fill(lMultiplicityZNA);
2472 fHistMultiplicityTRK->Fill(lMultiplicityTRK);
2473 fHistMultiplicitySPD->Fill(lMultiplicitySPD);
2474 f2dHistMultiplicityVsTrue->Fill ( lMultiplicity , lNumberOfCharged );
2475 fHistGenVertexZ->Fill( (mcPrimaryVtx.At(2)) );
2476 //------------------------------------------------
2477 // SKIP: Events with well-established PVtx
2478 //------------------------------------------------
2480 const AliESDVertex *lPrimaryTrackingESDVtxCheck = lESDevent->GetPrimaryVertexTracks();
2481 const AliESDVertex *lPrimarySPDVtx = lESDevent->GetPrimaryVertexSPD();
2482 if (!lPrimarySPDVtx->GetStatus() && !lPrimaryTrackingESDVtxCheck->GetStatus() && fkpAVertexSelection == kFALSE){
2483 AliWarning("Pb / No SPD prim. vertex nor prim. Tracking vertex ... return !");
2484 PostData(1, fListHistV0);
2489 f2dHistMultiplicityVsVertexZNoTPCOnly->Fill( lMultiplicity, lPrimaryVtxPosition[2] );
2490 fHistV0MultiplicityForSelEvtNoTPCOnly ->Fill( lNumberOfV0s );
2491 fHistMultiplicityNoTPCOnly->Fill(lMultiplicity);
2492 fHistMultiplicityV0ANoTPCOnly->Fill(lMultiplicityV0A);
2493 fHistMultiplicityZNANoTPCOnly->Fill(lMultiplicityZNA);
2494 fHistMultiplicityTRKNoTPCOnly->Fill(lMultiplicityTRK);
2495 fHistMultiplicitySPDNoTPCOnly->Fill(lMultiplicitySPD);
2496 f2dHistMultiplicityVsTrueNoTPCOnly->Fill ( lMultiplicity , lNumberOfCharged );
2497 fHistGenVertexZNoTPCOnly->Fill( (mcPrimaryVtx.At(2)) );
2498 //------------------------------------------------
2499 // Pileup Rejection Studies
2500 //------------------------------------------------
2502 // FIXME : quality selection regarding pile-up rejection
2503 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
2504 AliWarning("Pb / This is tagged as Pileup from SPD... return !");
2505 PostData(1, fListHistV0);
2509 f2dHistMultiplicityVsVertexZNoTPCOnlyNoPileup->Fill( lMultiplicity, lPrimaryVtxPosition[2] );
2510 fHistV0MultiplicityForSelEvtNoTPCOnlyNoPileup ->Fill( lNumberOfV0s );
2512 fHistMultiplicityNoTPCOnlyNoPileup->Fill(lMultiplicity);
2513 fHistMultiplicityV0ANoTPCOnlyNoPileup->Fill(lMultiplicityV0A);
2514 fHistMultiplicityZNANoTPCOnlyNoPileup->Fill(lMultiplicityZNA);
2515 fHistMultiplicityTRKNoTPCOnlyNoPileup->Fill(lMultiplicityTRK);
2516 fHistMultiplicitySPDNoTPCOnlyNoPileup->Fill(lMultiplicitySPD);
2518 f2dHistMultiplicityVsTrueNoTPCOnlyNoPileup->Fill ( lMultiplicity , lNumberOfCharged );
2519 fHistGenVertexZNoTPCOnlyNoPileup->Fill( (mcPrimaryVtx.At(2)) );
2520 //Do control histograms without the IsFromVertexerZ events, but consider them in analysis...
2521 if( ! (lESDevent->GetPrimaryVertex()->IsFromVertexerZ() ) ){
2522 fHistPVxAnalysis->Fill( lPrimaryVtxPosition[0] );
2523 fHistPVyAnalysis->Fill( lPrimaryVtxPosition[1] );
2524 fHistPVzAnalysis->Fill( lPrimaryVtxPosition[2] );
2525 if ( lHasHighPtLambda == kTRUE ){
2526 fHistPVxAnalysisHasHighPtLambda->Fill( lPrimaryVtxPosition[0] );
2527 fHistPVyAnalysisHasHighPtLambda->Fill( lPrimaryVtxPosition[1] );
2528 fHistPVzAnalysisHasHighPtLambda->Fill( lPrimaryVtxPosition[2] );
2532 fTreeVariableVertexZ = lPrimaryVtxPosition[2];
2534 fTreeVariablePVx = lPrimaryVtxPosition[0];
2535 fTreeVariablePVy = lPrimaryVtxPosition[1];
2536 fTreeVariablePVz = lPrimaryVtxPosition[2];
2538 fTreeVariableMCPVx = (mcPrimaryVtx.At(0));
2539 fTreeVariableMCPVy = (mcPrimaryVtx.At(1));
2540 fTreeVariableMCPVz = (mcPrimaryVtx.At(2));
2542 //------------------------------------------------
2543 // stack loop starts here
2544 //------------------------------------------------
2546 //---> Loop over ALL PARTICLES
2548 for (Int_t iMc = 0; iMc < (lMCstack->GetNtrack()); iMc++) {
2549 TParticle *p0 = lMCstack->Particle(iMc);
2551 //Printf("ERROR: particle with label %d not found in lMCstack (mc loop)", iMc);
2554 lPdgcodeCurrentPart = p0->GetPdgCode();
2556 // Keep only K0s, Lambda and AntiLambda:
2557 if ( (lPdgcodeCurrentPart != 310 ) && (lPdgcodeCurrentPart != 3122 ) && (lPdgcodeCurrentPart != -3122 ) ) continue;
2559 lRapCurrentPart = MyRapidity(p0->Energy(),p0->Pz());
2560 lPtCurrentPart = p0->Pt();
2562 //Use Physical Primaries only for filling PrimRaw Histograms!
2563 if ( lMCstack->IsPhysicalPrimary(iMc)!=kTRUE ) continue;
2565 if( lPdgcodeCurrentPart == 3122 ){
2567 f3dHistPrimAnalysisPtVsYVsMultLambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicity);
2568 f3dHistPrimAnalysisPtVsYCMSVsMultLambda->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicity);
2570 f3dHistPrimAnalysisPtVsYVsMultMCLambda->Fill(lPtCurrentPart, lRapCurrentPart, lNumberOfCharged);
2571 f3dHistPrimAnalysisPtVsYCMSVsMultMCLambda->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lNumberOfCharged);
2573 f3dHistPrimAnalysisPtVsYVsMultV0ALambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicityV0A);
2574 f3dHistPrimAnalysisPtVsYCMSVsMultV0ALambda->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicityV0A);
2575 f3dHistPrimAnalysisPtVsYVsMultZNALambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicityZNA);
2576 f3dHistPrimAnalysisPtVsYCMSVsMultZNALambda->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicityZNA);
2577 f3dHistPrimAnalysisPtVsYVsMultTRKLambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicityTRK);
2578 f3dHistPrimAnalysisPtVsYCMSVsMultTRKLambda->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicityTRK);
2579 f3dHistPrimAnalysisPtVsYVsMultSPDLambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicitySPD);
2580 f3dHistPrimAnalysisPtVsYCMSVsMultSPDLambda->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicitySPD);
2582 if( lPdgcodeCurrentPart == -3122 ){
2584 f3dHistPrimAnalysisPtVsYVsMultAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicity);
2585 f3dHistPrimAnalysisPtVsYCMSVsMultAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicity);
2587 f3dHistPrimAnalysisPtVsYVsMultMCAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart, lNumberOfCharged);
2588 f3dHistPrimAnalysisPtVsYCMSVsMultMCAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lNumberOfCharged);
2590 f3dHistPrimAnalysisPtVsYVsMultV0AAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicityV0A);
2591 f3dHistPrimAnalysisPtVsYCMSVsMultV0AAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicityV0A);
2592 f3dHistPrimAnalysisPtVsYVsMultZNAAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicityZNA);
2593 f3dHistPrimAnalysisPtVsYCMSVsMultZNAAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicityZNA);
2594 f3dHistPrimAnalysisPtVsYVsMultTRKAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicityTRK);
2595 f3dHistPrimAnalysisPtVsYCMSVsMultTRKAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicityTRK);
2596 f3dHistPrimAnalysisPtVsYVsMultSPDAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicitySPD);
2597 f3dHistPrimAnalysisPtVsYCMSVsMultSPDAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicitySPD);
2600 if( lPdgcodeCurrentPart == 310 ){
2602 f3dHistPrimAnalysisPtVsYVsMultK0Short->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicity);
2603 f3dHistPrimAnalysisPtVsYCMSVsMultK0Short->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicity);
2605 f3dHistPrimAnalysisPtVsYVsMultMCK0Short->Fill(lPtCurrentPart, lRapCurrentPart, lNumberOfCharged);
2606 f3dHistPrimAnalysisPtVsYCMSVsMultMCK0Short->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lNumberOfCharged);
2608 f3dHistPrimAnalysisPtVsYVsMultV0AK0Short->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicityV0A);
2609 f3dHistPrimAnalysisPtVsYCMSVsMultV0AK0Short->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicityV0A);
2610 f3dHistPrimAnalysisPtVsYVsMultZNAK0Short->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicityZNA);
2611 f3dHistPrimAnalysisPtVsYCMSVsMultZNAK0Short->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicityZNA);
2612 f3dHistPrimAnalysisPtVsYVsMultTRKK0Short->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicityTRK);
2613 f3dHistPrimAnalysisPtVsYCMSVsMultTRKK0Short->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicityTRK);
2614 f3dHistPrimAnalysisPtVsYVsMultSPDK0Short->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicitySPD);
2615 f3dHistPrimAnalysisPtVsYCMSVsMultSPDK0Short->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicitySPD);
2619 //----- Loop on primary Xi, Omega --------------------------------------------------------------
2620 for (Int_t iCurrentLabelStack = 0; iCurrentLabelStack < lNbMCPrimary; iCurrentLabelStack++)
2621 {// This is the begining of the loop on primaries
2623 TParticle* lCurrentParticlePrimary = 0x0;
2624 lCurrentParticlePrimary = lMCstack->Particle( iCurrentLabelStack );
2625 if(!lCurrentParticlePrimary){
2626 Printf("Cascade loop %d - MC TParticle pointer to current stack particle = 0x0 ! Skip ...\n", iCurrentLabelStack );
2629 if ( TMath::Abs(lCurrentParticlePrimary->GetPdgCode()) == 3312 || TMath::Abs(lCurrentParticlePrimary->GetPdgCode()) == 3334 ) {
2630 Double_t lRapXiMCPrimary = -100;
2631 if( (lCurrentParticlePrimary->Energy() - lCurrentParticlePrimary->Pz() +1.e-13) != 0 ) {
2632 if ( (lCurrentParticlePrimary->Energy() + lCurrentParticlePrimary->Pz()) / (lCurrentParticlePrimary->Energy() - lCurrentParticlePrimary->Pz() +1.e-13) !=0 ){
2633 lRapXiMCPrimary = 0.5*TMath::Log( (lCurrentParticlePrimary->Energy() + lCurrentParticlePrimary->Pz()) / (lCurrentParticlePrimary->Energy() - lCurrentParticlePrimary->Pz() +1.e-13) );
2637 //=================================================================================
2639 if( lCurrentParticlePrimary->GetPdgCode() == 3312 ){
2640 lPtCurrentPart = lCurrentParticlePrimary->Pt();
2641 f3dHistGenSelectedPtVsYVsMultXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicity);
2642 f3dHistGenSelectedPtVsYCMSVsMultXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicity);
2643 f3dHistGenSelectedPtVsYVsMultV0AXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicityV0A);
2644 f3dHistGenSelectedPtVsYCMSVsMultV0AXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicityV0A);
2645 f3dHistGenSelectedPtVsYVsMultZNAXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicityZNA);
2646 f3dHistGenSelectedPtVsYCMSVsMultZNAXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicityZNA);
2647 f3dHistGenSelectedPtVsYVsMultTRKXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicityTRK);
2648 f3dHistGenSelectedPtVsYCMSVsMultTRKXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicityTRK);
2649 f3dHistGenSelectedPtVsYVsMultSPDXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicitySPD);
2650 f3dHistGenSelectedPtVsYCMSVsMultSPDXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicitySPD);
2652 if( lCurrentParticlePrimary->GetPdgCode() == -3312 ){
2653 lPtCurrentPart = lCurrentParticlePrimary->Pt();
2654 f3dHistGenSelectedPtVsYVsMultXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicity);
2655 f3dHistGenSelectedPtVsYCMSVsMultXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicity);
2656 f3dHistGenSelectedPtVsYVsMultV0AXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicityV0A);
2657 f3dHistGenSelectedPtVsYCMSVsMultV0AXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicityV0A);
2658 f3dHistGenSelectedPtVsYVsMultZNAXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicityZNA);
2659 f3dHistGenSelectedPtVsYCMSVsMultZNAXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicityZNA);
2660 f3dHistGenSelectedPtVsYVsMultTRKXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicityTRK);
2661 f3dHistGenSelectedPtVsYCMSVsMultTRKXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicityTRK);
2662 f3dHistGenSelectedPtVsYVsMultSPDXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicitySPD);
2663 f3dHistGenSelectedPtVsYCMSVsMultSPDXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicitySPD);
2667 //----- End Loop on primary Xi, Omega ----------------------------------------------------------
2669 //------------------------------------------------
2670 // MAIN LAMBDA LOOP STARTS HERE
2671 //------------------------------------------------
2673 //Variable definition
2674 Int_t lOnFlyStatus = 0;
2675 Double_t lChi2V0 = 0;
2676 Double_t lDcaV0Daughters = 0, lDcaV0ToPrimVertex = 0;
2677 Double_t lDcaPosToPrimVertex = 0, lDcaNegToPrimVertex = 0;
2678 Double_t lV0CosineOfPointingAngle = 0;
2679 Double_t lV0Radius = 0, lPt = 0;
2680 Double_t lRapK0Short = 0, lRapLambda = 0;
2681 Double_t lInvMassK0s = 0, lInvMassLambda = 0, lInvMassAntiLambda = 0;
2682 Double_t lAlphaV0 = 0, lPtArmV0 = 0;
2683 Double_t fMinV0Pt = 0;
2684 Double_t fMaxV0Pt = 100;
2687 nv0s = lESDevent->GetNumberOfV0s();
2689 for (Int_t iV0 = 0; iV0 < nv0s; iV0++)
2690 {// This is the begining of the V0 loop
2691 AliESDv0 *v0 = ((AliESDEvent*)lESDevent)->GetV0(iV0);
2694 //---> Fix On-the-Fly candidates
2695 if( v0->GetParamN()->Charge() > 0 && v0->GetParamP()->Charge() < 0 ){
2696 fHistSwappedV0Counter -> Fill( 1 );
2698 fHistSwappedV0Counter -> Fill( 0 );
2700 if ( fkUseOnTheFly ) CheckChargeV0(v0);
2704 v0->GetPxPyPz( tV0mom[0],tV0mom[1],tV0mom[2] );
2705 Double_t lV0TotalMomentum = TMath::Sqrt(
2706 tV0mom[0]*tV0mom[0]+tV0mom[1]*tV0mom[1]+tV0mom[2]*tV0mom[2] );
2708 Double_t tDecayVertexV0[3]; v0->GetXYZ(tDecayVertexV0[0],tDecayVertexV0[1],tDecayVertexV0[2]);
2709 lV0Radius = TMath::Sqrt(tDecayVertexV0[0]*tDecayVertexV0[0]+tDecayVertexV0[1]*tDecayVertexV0[1]);
2711 lRapK0Short = v0->RapK0Short();
2712 lRapLambda = v0->RapLambda();
2714 //Set Variables for later filling
2715 fTreeVariableV0x = tDecayVertexV0[0];
2716 fTreeVariableV0y = tDecayVertexV0[1];
2717 fTreeVariableV0z = tDecayVertexV0[2];
2719 //Set Variables for later filling
2720 fTreeVariableV0Px = tV0mom[0];
2721 fTreeVariableV0Py = tV0mom[1];
2722 fTreeVariableV0Pz = tV0mom[2];
2724 if ((lPt<fMinV0Pt)||(fMaxV0Pt<lPt)) continue;
2726 UInt_t lKeyPos = (UInt_t)TMath::Abs(v0->GetPindex());
2727 UInt_t lKeyNeg = (UInt_t)TMath::Abs(v0->GetNindex());
2729 Double_t lMomPos[3]; v0->GetPPxPyPz(lMomPos[0],lMomPos[1],lMomPos[2]);
2730 Double_t lMomNeg[3]; v0->GetNPxPyPz(lMomNeg[0],lMomNeg[1],lMomNeg[2]);
2732 AliESDtrack *pTrack=((AliESDEvent*)lESDevent)->GetTrack(lKeyPos);
2733 AliESDtrack *nTrack=((AliESDEvent*)lESDevent)->GetTrack(lKeyNeg);
2734 if (!pTrack || !nTrack) {
2735 Printf("ERROR: Could not retreive one of the daughter track");
2739 fTreeVariableNegEta = nTrack->Eta();
2740 fTreeVariablePosEta = pTrack->Eta();
2742 // Filter like-sign V0 (next: add counter and distribution)
2743 if ( pTrack->GetSign() == nTrack->GetSign()){
2747 //________________________________________________________________________
2748 // Track quality cuts
2749 Float_t lPosTrackCrossedRows = pTrack->GetTPCClusterInfo(2,1);
2750 Float_t lNegTrackCrossedRows = nTrack->GetTPCClusterInfo(2,1);
2751 fTreeVariableLeastNbrCrossedRows = (Int_t) lPosTrackCrossedRows;
2752 if( lNegTrackCrossedRows < fTreeVariableLeastNbrCrossedRows )
2753 fTreeVariableLeastNbrCrossedRows = (Int_t) lNegTrackCrossedRows;
2755 // TPC refit condition (done during reconstruction for Offline but not for On-the-fly)
2756 if( !(pTrack->GetStatus() & AliESDtrack::kTPCrefit)) continue;
2757 if( !(nTrack->GetStatus() & AliESDtrack::kTPCrefit)) continue;
2760 fTreeVariablePosTrackStatus = pTrack->GetStatus();
2761 fTreeVariableNegTrackStatus = nTrack->GetStatus();
2763 if ( ( ( ( pTrack->GetTPCClusterInfo(2,1) ) < 70 ) || ( ( nTrack->GetTPCClusterInfo(2,1) ) < 70 ) )&&(fkTakeAllTracks==kFALSE) ) continue;
2765 //GetKinkIndex condition
2766 if( pTrack->GetKinkIndex(0)>0 || nTrack->GetKinkIndex(0)>0 ) continue;
2768 //Findable clusters > 0 condition
2769 if( pTrack->GetTPCNclsF()<=0 || nTrack->GetTPCNclsF()<=0 ) continue;
2771 //Compute ratio Crossed Rows / Findable clusters
2772 //Note: above test avoids division by zero!
2773 Float_t lPosTrackCrossedRowsOverFindable = -1;
2774 Float_t lNegTrackCrossedRowsOverFindable = -1;
2775 if ( ((double)(pTrack->GetTPCNclsF()) ) != 0 ) lPosTrackCrossedRowsOverFindable = lPosTrackCrossedRows / ((double)(pTrack->GetTPCNclsF()));
2776 if ( ((double)(nTrack->GetTPCNclsF()) ) != 0 ) lNegTrackCrossedRowsOverFindable = lNegTrackCrossedRows / ((double)(nTrack->GetTPCNclsF()));
2778 fTreeVariableLeastRatioCrossedRowsOverFindable = lPosTrackCrossedRowsOverFindable;
2779 if( lNegTrackCrossedRowsOverFindable < fTreeVariableLeastRatioCrossedRowsOverFindable )
2780 fTreeVariableLeastRatioCrossedRowsOverFindable = lNegTrackCrossedRowsOverFindable;
2782 //Lowest Cut Level for Ratio Crossed Rows / Findable = 0.8, set here
2783 if ( (fTreeVariableLeastRatioCrossedRowsOverFindable < 0.8)&&(fkTakeAllTracks==kFALSE) ) continue;
2785 //End track Quality Cuts
2786 //________________________________________________________________________
2788 lDcaPosToPrimVertex = TMath::Abs(pTrack->GetD(lPrimaryVtxPosition[0],
2789 lPrimaryVtxPosition[1],
2792 lDcaNegToPrimVertex = TMath::Abs(nTrack->GetD(lPrimaryVtxPosition[0],
2793 lPrimaryVtxPosition[1],
2796 lOnFlyStatus = v0->GetOnFlyStatus();
2797 lChi2V0 = v0->GetChi2V0();
2798 lDcaV0Daughters = v0->GetDcaV0Daughters();
2799 lDcaV0ToPrimVertex = v0->GetD(lPrimaryVtxPosition[0],lPrimaryVtxPosition[1],lPrimaryVtxPosition[2]);
2800 lV0CosineOfPointingAngle = v0->GetV0CosineOfPointingAngle(lPrimaryVtxPosition[0],lPrimaryVtxPosition[1],lPrimaryVtxPosition[2]);
2801 fTreeVariableV0CosineOfPointingAngle=lV0CosineOfPointingAngle;
2803 // Getting invariant mass infos directly from ESD
2804 v0->ChangeMassHypothesis(310);
2805 lInvMassK0s = v0->GetEffMass();
2806 v0->ChangeMassHypothesis(3122);
2807 lInvMassLambda = v0->GetEffMass();
2808 v0->ChangeMassHypothesis(-3122);
2809 lInvMassAntiLambda = v0->GetEffMass();
2810 lAlphaV0 = v0->AlphaV0();
2811 lPtArmV0 = v0->PtArmV0();
2813 //fTreeVariableOnFlyStatus = lOnFlyStatus;
2814 //fHistV0OnFlyStatus->Fill(lOnFlyStatus);
2816 //===============================================
2817 // Monte Carlo Association starts here
2818 //===============================================
2820 //---> Set Everything to "I don't know" before starting
2822 fTreeVariablePIDPositive = 0;
2823 fTreeVariablePIDNegative = 0;
2825 fTreeVariableIndexStatus = 0;
2826 fTreeVariableIndexStatusMother = 0;
2828 fTreeVariablePtMother = -1;
2829 fTreeVariablePtMC = -1;
2830 fTreeVariableRapMC = -100;
2832 fTreeVariablePID = -1;
2833 fTreeVariablePIDMother = -1;
2835 fTreeVariablePrimaryStatus = 0;
2836 fTreeVariablePrimaryStatusMother = 0;
2837 fTreeVariableV0CreationRadius = -1;
2839 fTreeVariableNegPhysicalStatus = 0;
2840 fTreeVariablePosPhysicalStatus = 0;
2842 Int_t lblPosV0Dghter = (Int_t) TMath::Abs( pTrack->GetLabel() );
2843 Int_t lblNegV0Dghter = (Int_t) TMath::Abs( nTrack->GetLabel() );
2845 TParticle* mcPosV0Dghter = lMCstack->Particle( lblPosV0Dghter );
2846 TParticle* mcNegV0Dghter = lMCstack->Particle( lblNegV0Dghter );
2848 fTreeVariablePosTransvMomentumMC = mcPosV0Dghter->Pt();
2849 fTreeVariableNegTransvMomentumMC = mcNegV0Dghter->Pt();
2851 Int_t lPIDPositive = mcPosV0Dghter -> GetPdgCode();
2852 Int_t lPIDNegative = mcNegV0Dghter -> GetPdgCode();
2854 fTreeVariablePIDPositive = lPIDPositive;
2855 fTreeVariablePIDNegative = lPIDNegative;
2857 Int_t lblMotherPosV0Dghter = mcPosV0Dghter->GetFirstMother() ;
2858 Int_t lblMotherNegV0Dghter = mcNegV0Dghter->GetFirstMother();
2860 if( lMCstack->IsPhysicalPrimary (lblNegV0Dghter) ) fTreeVariableNegPhysicalStatus = 1; //Is Primary!
2861 if( lMCstack->IsSecondaryFromWeakDecay(lblNegV0Dghter) ) fTreeVariableNegPhysicalStatus = 2; //Weak Decay!
2862 if( lMCstack->IsSecondaryFromMaterial (lblNegV0Dghter) ) fTreeVariableNegPhysicalStatus = 3; //Material Int!
2864 if( lMCstack->IsPhysicalPrimary (lblPosV0Dghter) ) fTreeVariablePosPhysicalStatus = 1; //Is Primary!
2865 if( lMCstack->IsSecondaryFromWeakDecay(lblPosV0Dghter) ) fTreeVariablePosPhysicalStatus = 2; //Weak Decay!
2866 if( lMCstack->IsSecondaryFromMaterial (lblPosV0Dghter) ) fTreeVariablePosPhysicalStatus = 3; //Material Int!
2868 if( lblMotherPosV0Dghter == lblMotherNegV0Dghter && lblMotherPosV0Dghter > -1 ){
2869 //either label is fine, they're equal at this stage
2870 TParticle* pThisV0 = lMCstack->Particle( lblMotherPosV0Dghter );
2871 //Set tree variables
2872 fTreeVariablePID = pThisV0->GetPdgCode(); //PDG Code
2873 fTreeVariablePtMC = pThisV0->Pt(); //Perfect Pt
2875 fTreeVariableIsNonInjected = lMCevent->IsFromBGEvent(lblMotherPosV0Dghter); //Is it?
2876 if (!fTreeVariableIsNonInjected){
2877 if (!(pThisV0->GetFirstMother()<0))
2878 {fTreeVariableIsNonInjected = kTRUE;} // because there are primaries (ALICE definition) not produced in the collision
2881 //Set Variables for later filling
2882 //Be careful: Vx, Vy, Vz: Creation vertex. So decay position is the
2883 //Creation vertex of any one of the daughters!
2884 fTreeVariableMCV0x = mcPosV0Dghter->Vx();
2885 fTreeVariableMCV0y = mcPosV0Dghter->Vy();
2886 fTreeVariableMCV0z = mcPosV0Dghter->Vz();
2888 //Set Variables for later filling
2889 fTreeVariableMCV0Px = pThisV0->Px();
2890 fTreeVariableMCV0Py = pThisV0->Py();
2891 fTreeVariableMCV0Pz = pThisV0->Pz();
2893 //Only Interested if it's a Lambda, AntiLambda or K0s
2894 //Avoid the Junction Bug! PYTHIA has particles with Px=Py=Pz=E=0 occasionally,
2895 //having particle code 88 (unrecognized by PDG), for documentation purposes.
2896 //Even ROOT's TParticle::Y() is not prepared to deal with that exception!
2897 //Note that TParticle::Pt() is immune (that would just return 0)...
2898 //Though granted that that should be extremely rare in this precise condition...
2899 if( TMath::Abs(fTreeVariablePID) == 3122 || fTreeVariablePID==310 ){
2900 fTreeVariableRapMC = pThisV0->Y(); //Perfect Y
2902 fTreeVariableV0CreationRadius = TMath::Sqrt(
2903 TMath::Power( ( (mcPrimaryVtx.At(0)) - (pThisV0->Vx()) ) , 2) +
2904 TMath::Power( ( (mcPrimaryVtx.At(1)) - (pThisV0->Vy()) ) , 2) +
2905 TMath::Power( ( (mcPrimaryVtx.At(2)) - (pThisV0->Vz()) ) , 2)
2907 if( lblMotherPosV0Dghter < lNbMCPrimary ) fTreeVariableIndexStatus = 1; //looks primary
2908 if( lblMotherPosV0Dghter >= lNbMCPrimary ) fTreeVariableIndexStatus = 2; //looks secondary
2909 if( lMCstack->IsPhysicalPrimary (lblMotherPosV0Dghter) ) fTreeVariablePrimaryStatus = 1; //Is Primary!
2910 if( lMCstack->IsSecondaryFromWeakDecay(lblMotherPosV0Dghter) ) fTreeVariablePrimaryStatus = 2; //Weak Decay!
2911 if( lMCstack->IsSecondaryFromMaterial (lblMotherPosV0Dghter) ) fTreeVariablePrimaryStatus = 3; //Material Int!
2913 //Now we try to acquire the V0 parent particle, if possible
2914 Int_t lblThisV0Parent = pThisV0->GetFirstMother();
2915 if ( lblThisV0Parent > -1 ){ //if it has a parent, get it and store specs
2916 TParticle* pThisV0Parent = lMCstack->Particle( lblThisV0Parent );
2917 fTreeVariablePIDMother = pThisV0Parent->GetPdgCode(); //V0 Mother PDG
2918 fTreeVariablePtMother = pThisV0Parent->Pt(); //V0 Mother Pt
2919 //Primary Status for the V0 Mother particle
2920 if( lblThisV0Parent < lNbMCPrimary ) fTreeVariableIndexStatusMother = 1; //looks primary
2921 if( lblThisV0Parent >= lNbMCPrimary ) fTreeVariableIndexStatusMother = 2; //looks secondary
2922 if( lMCstack->IsPhysicalPrimary (lblThisV0Parent) ) fTreeVariablePrimaryStatusMother = 1; //Is Primary!
2923 if( lMCstack->IsSecondaryFromWeakDecay(lblThisV0Parent) ) fTreeVariablePrimaryStatusMother = 2; //Weak Decay!
2924 if( lMCstack->IsSecondaryFromMaterial (lblThisV0Parent) ) fTreeVariablePrimaryStatusMother = 3; //Material Int!
2928 fTreeVariablePt = v0->Pt();
2929 fTreeVariableChi2V0 = lChi2V0;
2930 fTreeVariableDcaV0ToPrimVertex = lDcaV0ToPrimVertex;
2931 fTreeVariableDcaV0Daughters = lDcaV0Daughters;
2932 fTreeVariableV0CosineOfPointingAngle = lV0CosineOfPointingAngle;
2933 fTreeVariableV0Radius = lV0Radius;
2934 fTreeVariableDcaPosToPrimVertex = lDcaPosToPrimVertex;
2935 fTreeVariableDcaNegToPrimVertex = lDcaNegToPrimVertex;
2936 fTreeVariableInvMassK0s = lInvMassK0s;
2937 fTreeVariableInvMassLambda = lInvMassLambda;
2938 fTreeVariableInvMassAntiLambda = lInvMassAntiLambda;
2939 fTreeVariableRapK0Short = lRapK0Short;
2941 fTreeVariableRapLambda = lRapLambda;
2942 fTreeVariableAlphaV0 = lAlphaV0;
2943 fTreeVariablePtArmV0 = lPtArmV0;
2945 if( fkDoNotCallTPCdEdx == kFALSE ){
2946 //Official means of acquiring N-sigmas
2947 fTreeVariableNSigmasPosProton = fPIDResponse->NumberOfSigmasTPC( pTrack, AliPID::kProton );
2948 fTreeVariableNSigmasPosPion = fPIDResponse->NumberOfSigmasTPC( pTrack, AliPID::kPion );
2949 fTreeVariableNSigmasNegProton = fPIDResponse->NumberOfSigmasTPC( nTrack, AliPID::kProton );
2950 fTreeVariableNSigmasNegPion = fPIDResponse->NumberOfSigmasTPC( nTrack, AliPID::kPion );
2952 fTreeVariableNSigmasPosProton = 0;
2953 fTreeVariableNSigmasPosPion = 0;
2954 fTreeVariableNSigmasNegProton = 0;
2955 fTreeVariableNSigmasNegPion = 0;
2958 //tDecayVertexV0[0],tDecayVertexV0[1],tDecayVertexV0[2]
2959 Double_t lDistanceTravelled = TMath::Sqrt(
2960 TMath::Power( tDecayVertexV0[0] - lBestPrimaryVtxPos[0] , 2) +
2961 TMath::Power( tDecayVertexV0[1] - lBestPrimaryVtxPos[1] , 2) +
2962 TMath::Power( tDecayVertexV0[2] - lBestPrimaryVtxPos[2] , 2)
2964 fTreeVariableDistOverTotMom = 1e+5;
2965 if( lV0TotalMomentum + 1e-10 != 0 ) fTreeVariableDistOverTotMom = lDistanceTravelled / (lV0TotalMomentum + 1e-10); //avoid division by zero, to be sure
2967 Double_t lMomentumPosTemp[3];
2968 pTrack->GetPxPyPz(lMomentumPosTemp);
2969 Double_t lPtPosTemporary = sqrt(pow(lMomentumPosTemp[0],2) + pow(lMomentumPosTemp[1],2));
2971 Double_t lMomentumNegTemp[3];
2972 nTrack->GetPxPyPz(lMomentumNegTemp);
2973 Double_t lPtNegTemporary = sqrt(pow(lMomentumNegTemp[0],2) + pow(lMomentumNegTemp[1],2));
2975 fTreeVariablePosTransvMomentum = lPtPosTemporary;
2976 fTreeVariableNegTransvMomentum = lPtNegTemporary;
2979 //------------------------------------------------
2981 //------------------------------------------------
2983 // The conditionals are meant to decrease excessive
2986 //Modified version: Keep only OnFlyStatus == 0
2987 //Keep only if included in a parametric InvMass Region 20 sigmas away from peak
2989 //First Selection: Reject OnFly
2990 if( (lOnFlyStatus == 0 && fkUseOnTheFly == kFALSE) || (lOnFlyStatus != 0 && fkUseOnTheFly == kTRUE ) ){
2991 //Second Selection: rough 20-sigma band, parametric.
2992 //K0Short: Enough to parametrize peak broadening with linear function.
2993 Double_t lUpperLimitK0Short = (5.63707e-01) + (1.14979e-02)*fTreeVariablePt;
2994 Double_t lLowerLimitK0Short = (4.30006e-01) - (1.10029e-02)*fTreeVariablePt;
2995 //Lambda: Linear (for higher pt) plus exponential (for low-pt broadening)
2996 //[0]+[1]*x+[2]*TMath::Exp(-[3]*x)
2997 Double_t lUpperLimitLambda = (1.13688e+00) + (5.27838e-03)*fTreeVariablePt + (8.42220e-02)*TMath::Exp(-(3.80595e+00)*fTreeVariablePt);
2998 Double_t lLowerLimitLambda = (1.09501e+00) - (5.23272e-03)*fTreeVariablePt - (7.52690e-02)*TMath::Exp(-(3.46339e+00)*fTreeVariablePt);
3000 if( (fTreeVariableInvMassLambda < lUpperLimitLambda && fTreeVariableInvMassLambda > lLowerLimitLambda ) ||
3001 (fTreeVariableInvMassAntiLambda < lUpperLimitLambda && fTreeVariableInvMassAntiLambda > lLowerLimitLambda ) ||
3002 (fTreeVariableInvMassK0s < lUpperLimitK0Short && fTreeVariableInvMassK0s > lLowerLimitK0Short ) ){
3003 //Pre-selection in case this is AA...
3004 if( fkIsNuclear == kFALSE && fkSpecialExecution == kFALSE ) fTree->Fill();
3005 if( fkIsNuclear == kTRUE){
3006 //If this is a nuclear collision___________________
3007 // ... pre-filter with daughter eta selection only (not TPC)
3008 if ( TMath::Abs(fTreeVariableNegEta)<0.8 && TMath::Abs(fTreeVariablePosEta)<0.8 && fkSpecialExecution == kFALSE ){
3009 if( !fkSaveAssociatedOnly || (fkSaveAssociatedOnly &&( TMath::Abs(fTreeVariablePID) == 3122 || fTreeVariablePID==310 ) ))fTree->Fill();
3011 }//end nuclear_____________________________________
3014 //Special Execution: hypertriton exploration
3015 if( lOnFlyStatus == 0 && fkSpecialExecution == kTRUE){
3016 if ( TMath::Abs(fTreeVariableNegEta)<0.8 && TMath::Abs(fTreeVariablePosEta)<0.8 ){
3017 if( !fkSaveAssociatedOnly || (fkSaveAssociatedOnly &&( TMath::Abs(fTreeVariablePID) == 1010010030 ) ) ) fTree->Fill();
3021 //------------------------------------------------
3023 //------------------------------------------------
3026 }// This is the end of the V0 loop
3028 //------------------------------------------------
3030 // Post output data.
3031 PostData(1, fListHistV0);
3035 //________________________________________________________________________
3036 void AliAnalysisTaskExtractPerformanceV0::Terminate(Option_t *)
3038 // Draw result to the screen
3039 // Called once at the end of the query
3041 TList *cRetrievedList = 0x0;
3042 cRetrievedList = (TList*)GetOutputData(1);
3043 if(!cRetrievedList){
3044 Printf("ERROR - AliAnalysisTaskExtractV0 : ouput data container list not available\n");
3048 fHistV0MultiplicityForTrigEvt = dynamic_cast<TH1F*> ( cRetrievedList->FindObject("fHistV0MultiplicityForTrigEvt") );
3049 if (!fHistV0MultiplicityForTrigEvt) {
3050 Printf("ERROR - AliAnalysisTaskExtractV0 : fHistV0MultiplicityForTrigEvt not available");
3054 TCanvas *canCheck = new TCanvas("AliAnalysisTaskExtractV0","V0 Multiplicity",10,10,510,510);
3055 canCheck->cd(1)->SetLogy();
3057 fHistV0MultiplicityForTrigEvt->SetMarkerStyle(22);
3058 fHistV0MultiplicityForTrigEvt->DrawCopy("E");
3061 //----------------------------------------------------------------------------
3063 Double_t AliAnalysisTaskExtractPerformanceV0::MyRapidity(Double_t rE, Double_t rPz) const
3065 // Local calculation for rapidity
3066 Double_t ReturnValue = -100;
3067 if( (rE-rPz+1.e-13) != 0 && (rE+rPz) != 0 ){
3068 ReturnValue = 0.5*TMath::Log((rE+rPz)/(rE-rPz+1.e-13));
3073 //________________________________________________________________________
3074 void AliAnalysisTaskExtractPerformanceV0::CheckChargeV0(AliESDv0 *v0)
3076 // This function checks charge of negative and positive daughter tracks.
3077 // If incorrectly defined (onfly vertexer), swaps out.
3078 if( v0->GetParamN()->Charge() > 0 && v0->GetParamP()->Charge() < 0 ){
3079 //V0 daughter track swapping is required! Note: everything is swapped here... P->N, N->P
3080 Long_t lCorrectNidx = v0->GetPindex();
3081 Long_t lCorrectPidx = v0->GetNindex();
3082 Double32_t lCorrectNmom[3];
3083 Double32_t lCorrectPmom[3];
3084 v0->GetPPxPyPz( lCorrectNmom[0], lCorrectNmom[1], lCorrectNmom[2] );
3085 v0->GetNPxPyPz( lCorrectPmom[0], lCorrectPmom[1], lCorrectPmom[2] );
3087 AliExternalTrackParam lCorrectParamN(
3088 v0->GetParamP()->GetX() ,
3089 v0->GetParamP()->GetAlpha() ,
3090 v0->GetParamP()->GetParameter() ,
3091 v0->GetParamP()->GetCovariance()
3093 AliExternalTrackParam lCorrectParamP(
3094 v0->GetParamN()->GetX() ,
3095 v0->GetParamN()->GetAlpha() ,
3096 v0->GetParamN()->GetParameter() ,
3097 v0->GetParamN()->GetCovariance()
3099 lCorrectParamN.SetMostProbablePt( v0->GetParamP()->GetMostProbablePt() );
3100 lCorrectParamP.SetMostProbablePt( v0->GetParamN()->GetMostProbablePt() );
3102 //Get Variables___________________________________________________
3103 Double_t lDcaV0Daughters = v0 -> GetDcaV0Daughters();
3104 Double_t lCosPALocal = v0 -> GetV0CosineOfPointingAngle();
3105 Bool_t lOnFlyStatusLocal = v0 -> GetOnFlyStatus();
3107 //Create Replacement Object_______________________________________
3108 AliESDv0 *v0correct = new AliESDv0(lCorrectParamN,lCorrectNidx,lCorrectParamP,lCorrectPidx);
3109 v0correct->SetDcaV0Daughters ( lDcaV0Daughters );
3110 v0correct->SetV0CosineOfPointingAngle ( lCosPALocal );
3111 v0correct->ChangeMassHypothesis ( kK0Short );
3112 v0correct->SetOnFlyStatus ( lOnFlyStatusLocal );
3114 //Reverse Cluster info..._________________________________________
3115 v0correct->SetClusters( v0->GetClusters( 1 ), v0->GetClusters ( 0 ) );
3118 //Proper cleanup..._______________________________________________
3119 v0correct->Delete();
3122 //Just another cross-check and output_____________________________
3123 if( v0->GetParamN()->Charge() > 0 && v0->GetParamP()->Charge() < 0 ) {
3124 AliWarning("Found Swapped Charges, tried to correct but something FAILED!");
3126 //AliWarning("Found Swapped Charges and fixed.");
3128 //________________________________________________________________
3130 //Don't touch it! ---
3131 //Printf("Ah, nice. Charges are already ordered...");