1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
7 * Permission to use, copy, modify and distribute this software and its *
8 * documentation strictly for non-commercial purposes is hereby granted *
9 * without fee, provided that the above copyright notice appears in all *
10 * copies and that both the copyright notice and this permission notice *
11 * appear in the supporting documentation. The authors make no claims *
12 * about the suitability of this software for any purpose. It is *
13 * provided "as is" without express or implied warranty. *
14 **************************************************************************/
16 // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
18 // Modified version of AliAnalysisTaskCheckCascade.cxx.
19 // This is a 'hybrid' output version, in that it uses a classic TTree
20 // ROOT object to store the candidates, plus a couple of histograms filled on
21 // a per-event basis for storing variables too numerous to put in a tree.
23 // --- Adapted to look for lambdas as well, using code from
24 // AliAnalysisTaskCheckPerformanceStrange.cxx
26 // --- Algorithm Description
27 // 1. Loop over primaries in stack to acquire generated charged Xi
28 // 2. Loop over stack to find V0s, fill TH3Fs "PrimRawPt"s for Efficiency
29 // 3. Perform Physics Selection
30 // 4. Perform Primary Vertex |z|<10cm selection
31 // 5. Perform Primary Vertex NoTPCOnly vertexing selection (>0 contrib.)
32 // 6. Perform Pileup Rejection
34 // 7a. Fill TH3Fs "PrimAnalysisPt" for control purposes only
35 // 7b. Fill TTree object with V0 information, candidates
37 // Please Report Any Bugs!
39 // --- David Dobrigkeit Chinellato
40 // (david.chinellato@gmail.com)
42 // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
48 //class AliMCEventHandler;
57 #include <Riostream.h>
63 #include "THnSparse.h"
70 #include "AliESDEvent.h"
71 #include "AliAODEvent.h"
72 #include "AliV0vertexer.h"
73 #include "AliCascadeVertexer.h"
74 #include "AliESDpid.h"
75 #include "AliESDtrack.h"
76 #include "AliESDtrackCuts.h"
77 #include "AliInputEventHandler.h"
78 #include "AliAnalysisManager.h"
79 #include "AliMCEventHandler.h"
80 #include "AliMCEvent.h"
83 #include "AliCFContainer.h"
84 #include "AliMultiplicity.h"
85 #include "AliAODMCParticle.h"
86 #include "AliESDcascade.h"
87 #include "AliAODcascade.h"
88 #include "AliESDUtils.h"
89 #include "AliGenEventHeader.h"
90 #include "AliAnalysisTaskSE.h"
91 #include "AliAnalysisUtils.h"
92 #include "AliAnalysisTaskExtractPerformanceV0.h"
93 #include "AliHeader.h"
94 #include "AliGenDPMjetEventHeader.h"
99 ClassImp(AliAnalysisTaskExtractPerformanceV0)
101 AliAnalysisTaskExtractPerformanceV0::AliAnalysisTaskExtractPerformanceV0()
102 : AliAnalysisTaskSE(), fListHistV0(0), fTree(0), fPIDResponse(0), fESDtrackCuts(0), fUtils(0),
103 fkIsNuclear ( kFALSE ),
104 fkSwitchINT7 ( kFALSE ),
105 fkUseOnTheFly ( kFALSE ),
106 fkTakeAllTracks ( kFALSE ),
107 fpArapidityShift ( 0.465 ),
108 fCentralityEstimator("V0M"),
109 fkLightWeight ( kFALSE ),
111 fkpAVertexSelection( kFALSE ),
112 fkRunV0Vertexer( kFALSE ),
113 fkRejectPileup ( kTRUE ),
114 fkSpecialExecution ( kFALSE),
115 fkSkipTrigger(kFALSE),
116 fkSaveAssociatedOnly (kFALSE),
117 fkDoNotCallTPCdEdx( kFALSE ),
118 fDiffractiveOnly(kFALSE),
120 //------------------------------------------------
123 fTreeVariablePrimaryStatus(0),
124 fTreeVariablePrimaryStatusMother(0),
125 fTreeVariableChi2V0(0),
126 fTreeVariableDcaV0Daughters(0),
127 fTreeVariableDcaV0ToPrimVertex(0),
128 fTreeVariableDcaPosToPrimVertex(0),
129 fTreeVariableDcaNegToPrimVertex(0),
130 fTreeVariableDCAV0ToPrimVertex(0),
131 fTreeVariableV0CosineOfPointingAngle(0),
132 fTreeVariableV0Radius(0),
134 fTreeVariablePtMC(0),
135 fTreeVariableRapK0Short(0),
136 fTreeVariableRapLambda(0),
137 fTreeVariableRapMC(0),
138 fTreeVariableInvMassK0s(0),
139 fTreeVariableInvMassLambda(0),
140 fTreeVariableInvMassAntiLambda(0),
141 fTreeVariableAlphaV0(0),
142 fTreeVariablePtArmV0(0),
143 fTreeVariableNegTotMomentum(0),
144 fTreeVariablePosTotMomentum(0),
145 fTreeVariableNegTransvMomentum(0),
146 fTreeVariablePosTransvMomentum(0),
147 fTreeVariableNegTransvMomentumMC(0),
148 fTreeVariablePosTransvMomentumMC(0),
150 fTreeVariableNSigmasPosProton(0),
151 fTreeVariableNSigmasPosPion(0),
152 fTreeVariableNSigmasNegProton(0),
153 fTreeVariableNSigmasNegPion(0),
155 fTreeVariablePtMother(0),
156 fTreeVariableV0CreationRadius(0),
158 fTreeVariablePIDPositive(0),
159 fTreeVariablePIDNegative(0),
160 fTreeVariablePIDMother(0),
161 fTreeVariableIndexStatus(0),
162 fTreeVariableIndexStatusMother(0),
164 fTreeVariableRunNumber(0),
165 fTreeVariableEventNumber(0),
167 fTreeVariableDistOverTotMom(0),
169 fTreeVariablePosEta(0),
170 fTreeVariableNegEta(0),
172 fTreeVariableVertexZ(0),
174 fTreeVariableLeastNbrCrossedRows(0),
175 fTreeVariableLeastRatioCrossedRowsOverFindable(0),
177 fTreeVariableMultiplicity(0),
178 fTreeVariableMultiplicityV0A(0),
179 fTreeVariableMultiplicityZNA(0),
180 fTreeVariableMultiplicityTRK(0),
181 fTreeVariableMultiplicitySPD(0),
182 fTreeVariableMultiplicityMC(0),
188 fTreeVariableV0Px(0),
189 fTreeVariableV0Py(0),
190 fTreeVariableV0Pz(0),
192 fTreeVariableMCV0x(0),
193 fTreeVariableMCV0y(0),
194 fTreeVariableMCV0z(0),
196 fTreeVariableMCV0Px(0),
197 fTreeVariableMCV0Py(0),
198 fTreeVariableMCV0Pz(0),
204 fTreeVariableMCPVx(0),
205 fTreeVariableMCPVy(0),
206 fTreeVariableMCPVz(0),
208 fTreeVariableIsNonInjected(0),
210 fTreeVariableNegTrackStatus(0),
211 fTreeVariablePosTrackStatus(0),
213 fTreeVariableNegPhysicalStatus(0),
214 fTreeVariablePosPhysicalStatus(0),
216 fTreeVariableNegPx(0),
217 fTreeVariableNegPy(0),
218 fTreeVariableNegPz(0),
219 fTreeVariablePosPx(0),
220 fTreeVariablePosPy(0),
221 fTreeVariablePosPz(0),
223 //------------------------------------------------
225 // --- Filled on an Event-by-event basis
226 //------------------------------------------------
227 fHistV0MultiplicityBeforeTrigSel(0),
228 fHistV0MultiplicityForTrigEvt(0),
229 fHistV0MultiplicityForSelEvt(0),
230 fHistV0MultiplicityForSelEvtNoTPCOnly(0),
231 fHistV0MultiplicityForSelEvtNoTPCOnlyNoPileup(0),
232 fHistMultiplicityBeforeTrigSel(0),
233 fHistMultiplicityForTrigEvt(0),
234 fHistMultiplicity(0),
235 fHistMultiplicityNoTPCOnly(0),
236 fHistMultiplicityNoTPCOnlyNoPileup(0),
239 fHistMultiplicityV0ABeforeTrigSel(0),
240 fHistMultiplicityV0AForTrigEvt(0),
241 fHistMultiplicityV0A(0),
242 fHistMultiplicityV0ANoTPCOnly(0),
243 fHistMultiplicityV0ANoTPCOnlyNoPileup(0),
246 fHistMultiplicityZNABeforeTrigSel(0),
247 fHistMultiplicityZNAForTrigEvt(0),
248 fHistMultiplicityZNA(0),
249 fHistMultiplicityZNANoTPCOnly(0),
250 fHistMultiplicityZNANoTPCOnlyNoPileup(0),
253 fHistMultiplicityTRKBeforeTrigSel(0),
254 fHistMultiplicityTRKForTrigEvt(0),
255 fHistMultiplicityTRK(0),
256 fHistMultiplicityTRKNoTPCOnly(0),
257 fHistMultiplicityTRKNoTPCOnlyNoPileup(0),
260 fHistMultiplicitySPDBeforeTrigSel(0),
261 fHistMultiplicitySPDForTrigEvt(0),
262 fHistMultiplicitySPD(0),
263 fHistMultiplicitySPDNoTPCOnly(0),
264 fHistMultiplicitySPDNoTPCOnlyNoPileup(0),
266 f2dHistMultiplicityVsTrueBeforeTrigSel(0),
267 f2dHistMultiplicityVsTrueForTrigEvt(0),
268 f2dHistMultiplicityVsTrue(0),
269 f2dHistMultiplicityVsTrueNoTPCOnly(0),
270 f2dHistMultiplicityVsTrueNoTPCOnlyNoPileup(0),
272 //Raw Data for Vertex Z position estimator change
273 f2dHistMultiplicityVsVertexZBeforeTrigSel(0),
274 f2dHistMultiplicityVsVertexZForTrigEvt(0),
275 f2dHistMultiplicityVsVertexZ(0),
276 f2dHistMultiplicityVsVertexZNoTPCOnly(0),
277 f2dHistMultiplicityVsVertexZNoTPCOnlyNoPileup(0),
279 fHistGenVertexZBeforeTrigSel(0),
280 fHistGenVertexZForTrigEvt(0),
282 fHistGenVertexZNoTPCOnly(0),
283 fHistGenVertexZNoTPCOnlyNoPileup(0),
285 //------------------------------------------------
286 // PARTICLE HISTOGRAMS
287 // --- Filled on a Particle-by-Particle basis
288 //------------------------------------------------
290 //Standard V0M / multiplicity
291 f3dHistPrimAnalysisPtVsYVsMultLambda(0),
292 f3dHistPrimAnalysisPtVsYVsMultAntiLambda(0),
293 f3dHistPrimAnalysisPtVsYVsMultK0Short(0),
294 f3dHistPrimAnalysisPtVsYCMSVsMultLambda(0),
295 f3dHistPrimAnalysisPtVsYCMSVsMultAntiLambda(0),
296 f3dHistPrimAnalysisPtVsYCMSVsMultK0Short(0),
299 f3dHistPrimAnalysisPtVsYVsMultMCLambda(0),
300 f3dHistPrimAnalysisPtVsYVsMultMCAntiLambda(0),
301 f3dHistPrimAnalysisPtVsYVsMultMCK0Short(0),
302 f3dHistPrimAnalysisPtVsYCMSVsMultMCLambda(0),
303 f3dHistPrimAnalysisPtVsYCMSVsMultMCAntiLambda(0),
304 f3dHistPrimAnalysisPtVsYCMSVsMultMCK0Short(0),
307 f3dHistPrimAnalysisPtVsYVsMultV0ALambda(0),
308 f3dHistPrimAnalysisPtVsYVsMultV0AAntiLambda(0),
309 f3dHistPrimAnalysisPtVsYVsMultV0AK0Short(0),
310 f3dHistPrimAnalysisPtVsYCMSVsMultV0ALambda(0),
311 f3dHistPrimAnalysisPtVsYCMSVsMultV0AAntiLambda(0),
312 f3dHistPrimAnalysisPtVsYCMSVsMultV0AK0Short(0),
314 //Added for cross-check
315 f3dHistPrimRawPtVsYCMSVsMultV0AKPlus(0),
316 f3dHistPrimRawPtVsYCMSVsMultV0AKMinus(0),
317 f3dHistPrimAnalysisPtVsYCMSVsMultV0AKPlus(0),
318 f3dHistPrimAnalysisPtVsYCMSVsMultV0AKMinus(0),
321 f3dHistPrimAnalysisPtVsYVsMultZNALambda(0),
322 f3dHistPrimAnalysisPtVsYVsMultZNAAntiLambda(0),
323 f3dHistPrimAnalysisPtVsYVsMultZNAK0Short(0),
324 f3dHistPrimAnalysisPtVsYCMSVsMultZNALambda(0),
325 f3dHistPrimAnalysisPtVsYCMSVsMultZNAAntiLambda(0),
326 f3dHistPrimAnalysisPtVsYCMSVsMultZNAK0Short(0),
329 f3dHistPrimAnalysisPtVsYVsMultTRKLambda(0),
330 f3dHistPrimAnalysisPtVsYVsMultTRKAntiLambda(0),
331 f3dHistPrimAnalysisPtVsYVsMultTRKK0Short(0),
332 f3dHistPrimAnalysisPtVsYCMSVsMultTRKLambda(0),
333 f3dHistPrimAnalysisPtVsYCMSVsMultTRKAntiLambda(0),
334 f3dHistPrimAnalysisPtVsYCMSVsMultTRKK0Short(0),
337 f3dHistPrimAnalysisPtVsYVsMultSPDLambda(0),
338 f3dHistPrimAnalysisPtVsYVsMultSPDAntiLambda(0),
339 f3dHistPrimAnalysisPtVsYVsMultSPDK0Short(0),
340 f3dHistPrimAnalysisPtVsYCMSVsMultSPDLambda(0),
341 f3dHistPrimAnalysisPtVsYCMSVsMultSPDAntiLambda(0),
342 f3dHistPrimAnalysisPtVsYCMSVsMultSPDK0Short(0),
345 f3dHistPrimRawPtVsYVsMultLambda(0),
346 f3dHistPrimRawPtVsYVsMultAntiLambda(0),
347 f3dHistPrimRawPtVsYVsMultK0Short(0),
348 f3dHistPrimRawPtVsYCMSVsMultLambda(0),
349 f3dHistPrimRawPtVsYCMSVsMultAntiLambda(0),
350 f3dHistPrimRawPtVsYCMSVsMultK0Short(0),
353 f3dHistPrimRawPtVsYVsMultV0ALambda(0),
354 f3dHistPrimRawPtVsYVsMultV0AAntiLambda(0),
355 f3dHistPrimRawPtVsYVsMultV0AK0Short(0),
356 f3dHistPrimRawPtVsYCMSVsMultV0ALambda(0),
357 f3dHistPrimRawPtVsYCMSVsMultV0AAntiLambda(0),
358 f3dHistPrimRawPtVsYCMSVsMultV0AK0Short(0),
361 f3dHistPrimRawPtVsYVsMultZNALambda(0),
362 f3dHistPrimRawPtVsYVsMultZNAAntiLambda(0),
363 f3dHistPrimRawPtVsYVsMultZNAK0Short(0),
364 f3dHistPrimRawPtVsYCMSVsMultZNALambda(0),
365 f3dHistPrimRawPtVsYCMSVsMultZNAAntiLambda(0),
366 f3dHistPrimRawPtVsYCMSVsMultZNAK0Short(0),
369 f3dHistPrimRawPtVsYVsMultTRKLambda(0),
370 f3dHistPrimRawPtVsYVsMultTRKAntiLambda(0),
371 f3dHistPrimRawPtVsYVsMultTRKK0Short(0),
372 f3dHistPrimRawPtVsYCMSVsMultTRKLambda(0),
373 f3dHistPrimRawPtVsYCMSVsMultTRKAntiLambda(0),
374 f3dHistPrimRawPtVsYCMSVsMultTRKK0Short(0),
377 f3dHistPrimRawPtVsYVsMultSPDLambda(0),
378 f3dHistPrimRawPtVsYVsMultSPDAntiLambda(0),
379 f3dHistPrimRawPtVsYVsMultSPDK0Short(0),
380 f3dHistPrimRawPtVsYCMSVsMultSPDLambda(0),
381 f3dHistPrimRawPtVsYCMSVsMultSPDAntiLambda(0),
382 f3dHistPrimRawPtVsYCMSVsMultSPDK0Short(0),
384 f3dHistPrimRawPtVsYVsMultNonInjLambda(0),
385 f3dHistPrimRawPtVsYVsMultNonInjAntiLambda(0),
386 f3dHistPrimRawPtVsYVsMultNonInjK0Short(0),
387 f3dHistPrimRawPtVsYVsMultMCLambda(0),
388 f3dHistPrimRawPtVsYVsMultMCAntiLambda(0),
389 f3dHistPrimRawPtVsYVsMultMCK0Short(0),
390 f3dHistPrimRawPtVsYVsVertexZLambda(0),
391 f3dHistPrimRawPtVsYVsVertexZAntiLambda(0),
392 f3dHistPrimRawPtVsYVsVertexZK0Short(0),
393 f3dHistPrimCloseToPVPtVsYVsMultLambda(0),
394 f3dHistPrimCloseToPVPtVsYVsMultAntiLambda(0),
395 f3dHistPrimCloseToPVPtVsYVsMultK0Short(0),
396 f3dHistPrimRawPtVsYVsDecayLengthLambda(0),
397 f3dHistPrimRawPtVsYVsDecayLengthAntiLambda(0),
398 f3dHistPrimRawPtVsYVsDecayLengthK0Short(0),
401 f3dHistGenPtVsYVsMultXiMinus(0),
402 f3dHistGenPtVsYVsMultXiPlus(0),
403 f3dHistGenSelectedPtVsYVsMultXiMinus(0),
404 f3dHistGenSelectedPtVsYVsMultXiPlus(0),
405 f3dHistGenPtVsYCMSVsMultXiMinus(0),
406 f3dHistGenPtVsYCMSVsMultXiPlus(0),
407 f3dHistGenSelectedPtVsYCMSVsMultXiMinus(0),
408 f3dHistGenSelectedPtVsYCMSVsMultXiPlus(0),
411 f3dHistGenPtVsYVsMultV0AXiMinus(0),
412 f3dHistGenPtVsYVsMultV0AXiPlus(0),
413 f3dHistGenSelectedPtVsYVsMultV0AXiMinus(0),
414 f3dHistGenSelectedPtVsYVsMultV0AXiPlus(0),
415 f3dHistGenPtVsYCMSVsMultV0AXiMinus(0),
416 f3dHistGenPtVsYCMSVsMultV0AXiPlus(0),
417 f3dHistGenSelectedPtVsYCMSVsMultV0AXiMinus(0),
418 f3dHistGenSelectedPtVsYCMSVsMultV0AXiPlus(0),
421 f3dHistGenPtVsYVsMultZNAXiMinus(0),
422 f3dHistGenPtVsYVsMultZNAXiPlus(0),
423 f3dHistGenSelectedPtVsYVsMultZNAXiMinus(0),
424 f3dHistGenSelectedPtVsYVsMultZNAXiPlus(0),
425 f3dHistGenPtVsYCMSVsMultZNAXiMinus(0),
426 f3dHistGenPtVsYCMSVsMultZNAXiPlus(0),
427 f3dHistGenSelectedPtVsYCMSVsMultZNAXiMinus(0),
428 f3dHistGenSelectedPtVsYCMSVsMultZNAXiPlus(0),
431 f3dHistGenPtVsYVsMultTRKXiMinus(0),
432 f3dHistGenPtVsYVsMultTRKXiPlus(0),
433 f3dHistGenSelectedPtVsYVsMultTRKXiMinus(0),
434 f3dHistGenSelectedPtVsYVsMultTRKXiPlus(0),
435 f3dHistGenPtVsYCMSVsMultTRKXiMinus(0),
436 f3dHistGenPtVsYCMSVsMultTRKXiPlus(0),
437 f3dHistGenSelectedPtVsYCMSVsMultTRKXiMinus(0),
438 f3dHistGenSelectedPtVsYCMSVsMultTRKXiPlus(0),
441 f3dHistGenPtVsYVsMultSPDXiMinus(0),
442 f3dHistGenPtVsYVsMultSPDXiPlus(0),
443 f3dHistGenSelectedPtVsYVsMultSPDXiMinus(0),
444 f3dHistGenSelectedPtVsYVsMultSPDXiPlus(0),
445 f3dHistGenPtVsYCMSVsMultSPDXiMinus(0),
446 f3dHistGenPtVsYCMSVsMultSPDXiPlus(0),
447 f3dHistGenSelectedPtVsYCMSVsMultSPDXiMinus(0),
448 f3dHistGenSelectedPtVsYCMSVsMultSPDXiPlus(0),
456 fHistPVxAnalysisHasHighPtLambda(0),
457 fHistPVyAnalysisHasHighPtLambda(0),
458 fHistPVzAnalysisHasHighPtLambda(0),
459 fHistSwappedV0Counter(0)
462 for(Int_t iV0selIdx = 0; iV0selIdx < 7; iV0selIdx++ ) { fV0Sels [iV0selIdx ] = -1.; }
465 AliAnalysisTaskExtractPerformanceV0::AliAnalysisTaskExtractPerformanceV0(const char *name)
466 : AliAnalysisTaskSE(name), fListHistV0(0), fTree(0), fPIDResponse(0), fESDtrackCuts(0), fUtils(0),
467 fkIsNuclear ( kFALSE ),
468 fkSwitchINT7 ( kFALSE ),
469 fkUseOnTheFly ( kFALSE ),
470 fkTakeAllTracks ( kFALSE ),
471 fpArapidityShift ( 0.465 ),
472 fCentralityEstimator("V0M"),
473 fkLightWeight ( kFALSE ),
475 fkpAVertexSelection( kFALSE ),
476 fkRunV0Vertexer( kFALSE ),
477 fkRejectPileup ( kTRUE ),
478 fkSpecialExecution ( kFALSE),
479 fkSkipTrigger(kFALSE),
480 fkSaveAssociatedOnly (kFALSE),
481 fkDoNotCallTPCdEdx( kFALSE ),
482 fDiffractiveOnly(kFALSE),
484 //------------------------------------------------
487 fTreeVariablePrimaryStatus(0),
488 fTreeVariablePrimaryStatusMother(0),
489 fTreeVariableChi2V0(0),
490 fTreeVariableDcaV0Daughters(0),
491 fTreeVariableDcaV0ToPrimVertex(0),
492 fTreeVariableDcaPosToPrimVertex(0),
493 fTreeVariableDcaNegToPrimVertex(0),
494 fTreeVariableDCAV0ToPrimVertex(0),
495 fTreeVariableV0CosineOfPointingAngle(0),
496 fTreeVariableV0Radius(0),
498 fTreeVariablePtMC(0),
499 fTreeVariableRapK0Short(0),
500 fTreeVariableRapLambda(0),
501 fTreeVariableRapMC(0),
502 fTreeVariableInvMassK0s(0),
503 fTreeVariableInvMassLambda(0),
504 fTreeVariableInvMassAntiLambda(0),
505 fTreeVariableAlphaV0(0),
506 fTreeVariablePtArmV0(0),
507 fTreeVariableNegTotMomentum(0),
508 fTreeVariablePosTotMomentum(0),
509 fTreeVariableNegTransvMomentum(0),
510 fTreeVariablePosTransvMomentum(0),
511 fTreeVariableNegTransvMomentumMC(0),
512 fTreeVariablePosTransvMomentumMC(0),
514 fTreeVariableNSigmasPosProton(0),
515 fTreeVariableNSigmasPosPion(0),
516 fTreeVariableNSigmasNegProton(0),
517 fTreeVariableNSigmasNegPion(0),
519 fTreeVariablePtMother(0),
520 fTreeVariableV0CreationRadius(0),
522 fTreeVariablePIDPositive(0),
523 fTreeVariablePIDNegative(0),
524 fTreeVariablePIDMother(0),
525 fTreeVariableIndexStatus(0),
526 fTreeVariableIndexStatusMother(0),
528 fTreeVariableRunNumber(0),
529 fTreeVariableEventNumber(0),
531 fTreeVariableDistOverTotMom(0),
533 fTreeVariablePosEta(0),
534 fTreeVariableNegEta(0),
536 fTreeVariableVertexZ(0),
538 fTreeVariableLeastNbrCrossedRows(0),
539 fTreeVariableLeastRatioCrossedRowsOverFindable(0),
540 fTreeVariableMultiplicity(0),
541 fTreeVariableMultiplicityV0A(0),
542 fTreeVariableMultiplicityZNA(0),
543 fTreeVariableMultiplicityTRK(0),
544 fTreeVariableMultiplicitySPD(0),
545 fTreeVariableMultiplicityMC(0),
551 fTreeVariableV0Px(0),
552 fTreeVariableV0Py(0),
553 fTreeVariableV0Pz(0),
555 fTreeVariableMCV0x(0),
556 fTreeVariableMCV0y(0),
557 fTreeVariableMCV0z(0),
559 fTreeVariableMCV0Px(0),
560 fTreeVariableMCV0Py(0),
561 fTreeVariableMCV0Pz(0),
567 fTreeVariableMCPVx(0),
568 fTreeVariableMCPVy(0),
569 fTreeVariableMCPVz(0),
571 fTreeVariableIsNonInjected(0),
573 fTreeVariableNegTrackStatus(0),
574 fTreeVariablePosTrackStatus(0),
576 fTreeVariableNegPhysicalStatus(0),
577 fTreeVariablePosPhysicalStatus(0),
579 fTreeVariableNegPx(0),
580 fTreeVariableNegPy(0),
581 fTreeVariableNegPz(0),
582 fTreeVariablePosPx(0),
583 fTreeVariablePosPy(0),
584 fTreeVariablePosPz(0),
586 //------------------------------------------------
588 // --- Filled on an Event-by-event basis
589 //------------------------------------------------
590 fHistV0MultiplicityBeforeTrigSel(0),
591 fHistV0MultiplicityForTrigEvt(0),
592 fHistV0MultiplicityForSelEvt(0),
593 fHistV0MultiplicityForSelEvtNoTPCOnly(0),
594 fHistV0MultiplicityForSelEvtNoTPCOnlyNoPileup(0),
595 fHistMultiplicityBeforeTrigSel(0),
596 fHistMultiplicityForTrigEvt(0),
597 fHistMultiplicity(0),
598 fHistMultiplicityNoTPCOnly(0),
599 fHistMultiplicityNoTPCOnlyNoPileup(0),
602 fHistMultiplicityV0ABeforeTrigSel(0),
603 fHistMultiplicityV0AForTrigEvt(0),
604 fHistMultiplicityV0A(0),
605 fHistMultiplicityV0ANoTPCOnly(0),
606 fHistMultiplicityV0ANoTPCOnlyNoPileup(0),
609 fHistMultiplicityZNABeforeTrigSel(0),
610 fHistMultiplicityZNAForTrigEvt(0),
611 fHistMultiplicityZNA(0),
612 fHistMultiplicityZNANoTPCOnly(0),
613 fHistMultiplicityZNANoTPCOnlyNoPileup(0),
616 fHistMultiplicityTRKBeforeTrigSel(0),
617 fHistMultiplicityTRKForTrigEvt(0),
618 fHistMultiplicityTRK(0),
619 fHistMultiplicityTRKNoTPCOnly(0),
620 fHistMultiplicityTRKNoTPCOnlyNoPileup(0),
623 fHistMultiplicitySPDBeforeTrigSel(0),
624 fHistMultiplicitySPDForTrigEvt(0),
625 fHistMultiplicitySPD(0),
626 fHistMultiplicitySPDNoTPCOnly(0),
627 fHistMultiplicitySPDNoTPCOnlyNoPileup(0),
629 f2dHistMultiplicityVsTrueBeforeTrigSel(0),
630 f2dHistMultiplicityVsTrueForTrigEvt(0),
631 f2dHistMultiplicityVsTrue(0),
632 f2dHistMultiplicityVsTrueNoTPCOnly(0),
633 f2dHistMultiplicityVsTrueNoTPCOnlyNoPileup(0),
635 //Raw Data for Vertex Z position estimator change
636 f2dHistMultiplicityVsVertexZBeforeTrigSel(0),
637 f2dHistMultiplicityVsVertexZForTrigEvt(0),
638 f2dHistMultiplicityVsVertexZ(0),
639 f2dHistMultiplicityVsVertexZNoTPCOnly(0),
640 f2dHistMultiplicityVsVertexZNoTPCOnlyNoPileup(0),
642 fHistGenVertexZBeforeTrigSel(0),
643 fHistGenVertexZForTrigEvt(0),
645 fHistGenVertexZNoTPCOnly(0),
646 fHistGenVertexZNoTPCOnlyNoPileup(0),
648 //------------------------------------------------
649 // PARTICLE HISTOGRAMS
650 // --- Filled on a Particle-by-Particle basis
651 //------------------------------------------------
654 f3dHistPrimAnalysisPtVsYVsMultLambda(0),
655 f3dHistPrimAnalysisPtVsYVsMultAntiLambda(0),
656 f3dHistPrimAnalysisPtVsYVsMultK0Short(0),
657 f3dHistPrimAnalysisPtVsYCMSVsMultLambda(0),
658 f3dHistPrimAnalysisPtVsYCMSVsMultAntiLambda(0),
659 f3dHistPrimAnalysisPtVsYCMSVsMultK0Short(0),
662 f3dHistPrimAnalysisPtVsYVsMultMCLambda(0),
663 f3dHistPrimAnalysisPtVsYVsMultMCAntiLambda(0),
664 f3dHistPrimAnalysisPtVsYVsMultMCK0Short(0),
665 f3dHistPrimAnalysisPtVsYCMSVsMultMCLambda(0),
666 f3dHistPrimAnalysisPtVsYCMSVsMultMCAntiLambda(0),
667 f3dHistPrimAnalysisPtVsYCMSVsMultMCK0Short(0),
670 f3dHistPrimAnalysisPtVsYVsMultV0ALambda(0),
671 f3dHistPrimAnalysisPtVsYVsMultV0AAntiLambda(0),
672 f3dHistPrimAnalysisPtVsYVsMultV0AK0Short(0),
673 f3dHistPrimAnalysisPtVsYCMSVsMultV0ALambda(0),
674 f3dHistPrimAnalysisPtVsYCMSVsMultV0AAntiLambda(0),
675 f3dHistPrimAnalysisPtVsYCMSVsMultV0AK0Short(0),
677 //Added for cross-check
678 f3dHistPrimRawPtVsYCMSVsMultV0AKPlus(0),
679 f3dHistPrimRawPtVsYCMSVsMultV0AKMinus(0),
680 f3dHistPrimAnalysisPtVsYCMSVsMultV0AKPlus(0),
681 f3dHistPrimAnalysisPtVsYCMSVsMultV0AKMinus(0),
684 f3dHistPrimAnalysisPtVsYVsMultZNALambda(0),
685 f3dHistPrimAnalysisPtVsYVsMultZNAAntiLambda(0),
686 f3dHistPrimAnalysisPtVsYVsMultZNAK0Short(0),
687 f3dHistPrimAnalysisPtVsYCMSVsMultZNALambda(0),
688 f3dHistPrimAnalysisPtVsYCMSVsMultZNAAntiLambda(0),
689 f3dHistPrimAnalysisPtVsYCMSVsMultZNAK0Short(0),
692 f3dHistPrimAnalysisPtVsYVsMultTRKLambda(0),
693 f3dHistPrimAnalysisPtVsYVsMultTRKAntiLambda(0),
694 f3dHistPrimAnalysisPtVsYVsMultTRKK0Short(0),
695 f3dHistPrimAnalysisPtVsYCMSVsMultTRKLambda(0),
696 f3dHistPrimAnalysisPtVsYCMSVsMultTRKAntiLambda(0),
697 f3dHistPrimAnalysisPtVsYCMSVsMultTRKK0Short(0),
700 f3dHistPrimAnalysisPtVsYVsMultSPDLambda(0),
701 f3dHistPrimAnalysisPtVsYVsMultSPDAntiLambda(0),
702 f3dHistPrimAnalysisPtVsYVsMultSPDK0Short(0),
703 f3dHistPrimAnalysisPtVsYCMSVsMultSPDLambda(0),
704 f3dHistPrimAnalysisPtVsYCMSVsMultSPDAntiLambda(0),
705 f3dHistPrimAnalysisPtVsYCMSVsMultSPDK0Short(0),
708 f3dHistPrimRawPtVsYVsMultLambda(0),
709 f3dHistPrimRawPtVsYVsMultAntiLambda(0),
710 f3dHistPrimRawPtVsYVsMultK0Short(0),
711 f3dHistPrimRawPtVsYCMSVsMultLambda(0),
712 f3dHistPrimRawPtVsYCMSVsMultAntiLambda(0),
713 f3dHistPrimRawPtVsYCMSVsMultK0Short(0),
716 f3dHistPrimRawPtVsYVsMultV0ALambda(0),
717 f3dHistPrimRawPtVsYVsMultV0AAntiLambda(0),
718 f3dHistPrimRawPtVsYVsMultV0AK0Short(0),
719 f3dHistPrimRawPtVsYCMSVsMultV0ALambda(0),
720 f3dHistPrimRawPtVsYCMSVsMultV0AAntiLambda(0),
721 f3dHistPrimRawPtVsYCMSVsMultV0AK0Short(0),
724 f3dHistPrimRawPtVsYVsMultZNALambda(0),
725 f3dHistPrimRawPtVsYVsMultZNAAntiLambda(0),
726 f3dHistPrimRawPtVsYVsMultZNAK0Short(0),
727 f3dHistPrimRawPtVsYCMSVsMultZNALambda(0),
728 f3dHistPrimRawPtVsYCMSVsMultZNAAntiLambda(0),
729 f3dHistPrimRawPtVsYCMSVsMultZNAK0Short(0),
732 f3dHistPrimRawPtVsYVsMultTRKLambda(0),
733 f3dHistPrimRawPtVsYVsMultTRKAntiLambda(0),
734 f3dHistPrimRawPtVsYVsMultTRKK0Short(0),
735 f3dHistPrimRawPtVsYCMSVsMultTRKLambda(0),
736 f3dHistPrimRawPtVsYCMSVsMultTRKAntiLambda(0),
737 f3dHistPrimRawPtVsYCMSVsMultTRKK0Short(0),
740 f3dHistPrimRawPtVsYVsMultSPDLambda(0),
741 f3dHistPrimRawPtVsYVsMultSPDAntiLambda(0),
742 f3dHistPrimRawPtVsYVsMultSPDK0Short(0),
743 f3dHistPrimRawPtVsYCMSVsMultSPDLambda(0),
744 f3dHistPrimRawPtVsYCMSVsMultSPDAntiLambda(0),
745 f3dHistPrimRawPtVsYCMSVsMultSPDK0Short(0),
747 f3dHistPrimRawPtVsYVsMultNonInjLambda(0),
748 f3dHistPrimRawPtVsYVsMultNonInjAntiLambda(0),
749 f3dHistPrimRawPtVsYVsMultNonInjK0Short(0),
750 f3dHistPrimRawPtVsYVsMultMCLambda(0),
751 f3dHistPrimRawPtVsYVsMultMCAntiLambda(0),
752 f3dHistPrimRawPtVsYVsMultMCK0Short(0),
753 f3dHistPrimRawPtVsYVsVertexZLambda(0),
754 f3dHistPrimRawPtVsYVsVertexZAntiLambda(0),
755 f3dHistPrimRawPtVsYVsVertexZK0Short(0),
756 f3dHistPrimCloseToPVPtVsYVsMultLambda(0),
757 f3dHistPrimCloseToPVPtVsYVsMultAntiLambda(0),
758 f3dHistPrimCloseToPVPtVsYVsMultK0Short(0),
759 f3dHistPrimRawPtVsYVsDecayLengthLambda(0),
760 f3dHistPrimRawPtVsYVsDecayLengthAntiLambda(0),
761 f3dHistPrimRawPtVsYVsDecayLengthK0Short(0),
764 f3dHistGenPtVsYVsMultXiMinus(0),
765 f3dHistGenPtVsYVsMultXiPlus(0),
766 f3dHistGenSelectedPtVsYVsMultXiMinus(0),
767 f3dHistGenSelectedPtVsYVsMultXiPlus(0),
768 f3dHistGenPtVsYCMSVsMultXiMinus(0),
769 f3dHistGenPtVsYCMSVsMultXiPlus(0),
770 f3dHistGenSelectedPtVsYCMSVsMultXiMinus(0),
771 f3dHistGenSelectedPtVsYCMSVsMultXiPlus(0),
774 f3dHistGenPtVsYVsMultV0AXiMinus(0),
775 f3dHistGenPtVsYVsMultV0AXiPlus(0),
776 f3dHistGenSelectedPtVsYVsMultV0AXiMinus(0),
777 f3dHistGenSelectedPtVsYVsMultV0AXiPlus(0),
778 f3dHistGenPtVsYCMSVsMultV0AXiMinus(0),
779 f3dHistGenPtVsYCMSVsMultV0AXiPlus(0),
780 f3dHistGenSelectedPtVsYCMSVsMultV0AXiMinus(0),
781 f3dHistGenSelectedPtVsYCMSVsMultV0AXiPlus(0),
784 f3dHistGenPtVsYVsMultZNAXiMinus(0),
785 f3dHistGenPtVsYVsMultZNAXiPlus(0),
786 f3dHistGenSelectedPtVsYVsMultZNAXiMinus(0),
787 f3dHistGenSelectedPtVsYVsMultZNAXiPlus(0),
788 f3dHistGenPtVsYCMSVsMultZNAXiMinus(0),
789 f3dHistGenPtVsYCMSVsMultZNAXiPlus(0),
790 f3dHistGenSelectedPtVsYCMSVsMultZNAXiMinus(0),
791 f3dHistGenSelectedPtVsYCMSVsMultZNAXiPlus(0),
794 f3dHistGenPtVsYVsMultTRKXiMinus(0),
795 f3dHistGenPtVsYVsMultTRKXiPlus(0),
796 f3dHistGenSelectedPtVsYVsMultTRKXiMinus(0),
797 f3dHistGenSelectedPtVsYVsMultTRKXiPlus(0),
798 f3dHistGenPtVsYCMSVsMultTRKXiMinus(0),
799 f3dHistGenPtVsYCMSVsMultTRKXiPlus(0),
800 f3dHistGenSelectedPtVsYCMSVsMultTRKXiMinus(0),
801 f3dHistGenSelectedPtVsYCMSVsMultTRKXiPlus(0),
804 f3dHistGenPtVsYVsMultSPDXiMinus(0),
805 f3dHistGenPtVsYVsMultSPDXiPlus(0),
806 f3dHistGenSelectedPtVsYVsMultSPDXiMinus(0),
807 f3dHistGenSelectedPtVsYVsMultSPDXiPlus(0),
808 f3dHistGenPtVsYCMSVsMultSPDXiMinus(0),
809 f3dHistGenPtVsYCMSVsMultSPDXiPlus(0),
810 f3dHistGenSelectedPtVsYCMSVsMultSPDXiMinus(0),
811 f3dHistGenSelectedPtVsYCMSVsMultSPDXiPlus(0),
819 fHistPVxAnalysisHasHighPtLambda(0),
820 fHistPVyAnalysisHasHighPtLambda(0),
821 fHistPVzAnalysisHasHighPtLambda(0),
822 fHistSwappedV0Counter(0)
825 // Set Loose cuts or not here...
826 // REALLY LOOSE? Be careful when attempting to run over PbPb if fkRunV0Vertexer is set!
827 fV0Sels[0] = 33. ; // max allowed chi2
828 fV0Sels[1] = 0.02; // min allowed impact parameter for the 1st daughter (LHC09a4 : 0.05)
829 fV0Sels[2] = 0.02; // min allowed impact parameter for the 2nd daughter (LHC09a4 : 0.05)
830 fV0Sels[3] = 2.0 ; // max allowed DCA between the daughter tracks (LHC09a4 : 0.5)
831 fV0Sels[4] = 0.95; // min allowed cosine of V0's pointing angle (LHC09a4 : 0.99)
832 fV0Sels[5] = 0.5 ; // min radius of the fiducial volume (LHC09a4 : 0.2)
833 fV0Sels[6] = 200. ; // max radius of the fiducial volume (LHC09a4 : 100.0)
834 // Output slot #0 writes into a TList container (Cascade)
835 DefineOutput(1, TList::Class());
836 DefineOutput(2, TTree::Class());
840 AliAnalysisTaskExtractPerformanceV0::~AliAnalysisTaskExtractPerformanceV0()
842 //------------------------------------------------
844 //------------------------------------------------
854 //cleanup esd track cuts object too...
856 delete fESDtrackCuts;
866 //________________________________________________________________________
867 void AliAnalysisTaskExtractPerformanceV0::UserCreateOutputObjects()
873 //------------------------------------------------
875 fTree = new TTree("fTree","V0Candidates");
877 //------------------------------------------------
878 // fTree Branch definitions - V0 Tree
879 //------------------------------------------------
881 //-----------BASIC-INFO---------------------------
882 /* 1*/ fTree->Branch("fTreeVariablePrimaryStatus",&fTreeVariablePrimaryStatus,"fTreeVariablePrimaryStatus/I");
883 /* 2*/ fTree->Branch("fTreeVariablePrimaryStatusMother",&fTreeVariablePrimaryStatusMother,"fTreeVariablePrimaryStatusMother/I");
884 /* 2*/ fTree->Branch("fTreeVariableChi2V0",&fTreeVariableChi2V0,"Chi2V0/F");
885 /* 3*/ fTree->Branch("fTreeVariableDcaV0Daughters",&fTreeVariableDcaV0Daughters,"fTreeVariableDcaV0Daughters/F");
886 /* 2*/ fTree->Branch("fTreeVariableDcaV0ToPrimVertex",&fTreeVariableDcaV0ToPrimVertex,"fTreeVariableDcaV0ToPrimVertex/F");
887 /* 4*/ fTree->Branch("fTreeVariableDcaPosToPrimVertex",&fTreeVariableDcaPosToPrimVertex,"fTreeVariableDcaPosToPrimVertex/F");
888 /* 5*/ fTree->Branch("fTreeVariableDcaNegToPrimVertex",&fTreeVariableDcaNegToPrimVertex,"fTreeVariableDcaNegToPrimVertex/F");
889 /* 6*/ fTree->Branch("fTreeVariableV0Radius",&fTreeVariableV0Radius,"fTreeVariableV0Radius/F");
890 /* 7*/ fTree->Branch("fTreeVariablePt",&fTreeVariablePt,"fTreeVariablePt/F");
891 /* 7*/ fTree->Branch("fTreeVariablePtMC",&fTreeVariablePtMC,"fTreeVariablePtMC/F");
892 /* 8*/ fTree->Branch("fTreeVariableRapK0Short",&fTreeVariableRapK0Short,"fTreeVariableRapK0Short/F");
893 /* 9*/ fTree->Branch("fTreeVariableRapLambda",&fTreeVariableRapLambda,"fTreeVariableRapLambda/F");
894 /*10*/ fTree->Branch("fTreeVariableRapMC",&fTreeVariableRapMC,"fTreeVariableRapMC/F");
895 /*11*/ fTree->Branch("fTreeVariableInvMassK0s",&fTreeVariableInvMassK0s,"fTreeVariableInvMassK0s/F");
896 /*12*/ fTree->Branch("fTreeVariableInvMassLambda",&fTreeVariableInvMassLambda,"fTreeVariableInvMassLambda/F");
897 /*13*/ fTree->Branch("fTreeVariableInvMassAntiLambda",&fTreeVariableInvMassAntiLambda,"fTreeVariableInvMassAntiLambda/F");
898 /*14*/ fTree->Branch("fTreeVariableAlphaV0",&fTreeVariableAlphaV0,"fTreeVariableAlphaV0/F");
899 /*15*/ fTree->Branch("fTreeVariablePtArmV0",&fTreeVariablePtArmV0,"fTreeVariablePtArmV0/F");
900 /*16*/ fTree->Branch("fTreeVariableNegTransvMomentum",&fTreeVariableNegTransvMomentum,"fTreeVariableNegTransvMomentum/F");
901 /*17*/ fTree->Branch("fTreeVariablePosTransvMomentum",&fTreeVariablePosTransvMomentum,"fTreeVariablePosTransvMomentum/F");
902 /*18*/ fTree->Branch("fTreeVariableNegTransvMomentumMC",&fTreeVariableNegTransvMomentumMC,"fTreeVariableNegTransvMomentumMC/F");
903 /*19*/ fTree->Branch("fTreeVariablePosTransvMomentumMC",&fTreeVariablePosTransvMomentumMC,"fTreeVariablePosTransvMomentumMC/F");
904 /*20*/ fTree->Branch("fTreeVariableLeastNbrCrossedRows",&fTreeVariableLeastNbrCrossedRows,"fTreeVariableLeastNbrCrossedRows/I");
905 /*21*/ fTree->Branch("fTreeVariableLeastRatioCrossedRowsOverFindable",&fTreeVariableLeastRatioCrossedRowsOverFindable,"fTreeVariableLeastRatioCrossedRowsOverFindable/F");
906 /*22*/ fTree->Branch("fTreeVariablePID",&fTreeVariablePID,"fTreeVariablePID/I");
907 /*23*/ fTree->Branch("fTreeVariablePIDPositive",&fTreeVariablePIDPositive,"fTreeVariablePIDPositive/I");
908 /*24*/ fTree->Branch("fTreeVariablePIDNegative",&fTreeVariablePIDNegative,"fTreeVariablePIDNegative/I");
909 /*25*/ fTree->Branch("fTreeVariablePIDMother",&fTreeVariablePIDMother,"fTreeVariablePIDMother/I");
910 /*26*/ fTree->Branch("fTreeVariablePtXiMother",&fTreeVariablePtMother,"fTreeVariablePtMother/F");
911 /*27*/ fTree->Branch("fTreeVariableDCAV0ToPrimVertex",&fTreeVariableDCAV0ToPrimVertex,"fTreeVariableDCAV0ToPrimVertex/F"); // fTreeVariableDCAV0ToPrimVertex(0),
912 /*27*/ fTree->Branch("fTreeVariableV0CosineOfPointingAngle",&fTreeVariableV0CosineOfPointingAngle,"fTreeVariableV0CosineOfPointingAngle/F"); // fTreeVariableDCAV0ToPrimVertex(0),
914 //-----------MULTIPLICITY-INFO--------------------
915 /*28*/ fTree->Branch("fTreeVariableMultiplicity",&fTreeVariableMultiplicity,"fTreeVariableMultiplicity/I");
916 /*28*/ fTree->Branch("fTreeVariableMultiplicityMC",&fTreeVariableMultiplicityMC,"fTreeVariableMultiplicityMC/I");
917 /*17*/ fTree->Branch("fTreeVariableMultiplicityV0A",&fTreeVariableMultiplicityV0A,"fTreeVariableMultiplicityV0A/I");
918 /*17*/ fTree->Branch("fTreeVariableMultiplicityZNA",&fTreeVariableMultiplicityZNA,"fTreeVariableMultiplicityZNA/I");
919 /*17*/ fTree->Branch("fTreeVariableMultiplicityTRK",&fTreeVariableMultiplicityTRK,"fTreeVariableMultiplicityTRK/I");
920 /*17*/ fTree->Branch("fTreeVariableMultiplicitySPD",&fTreeVariableMultiplicitySPD,"fTreeVariableMultiplicitySPD/I");
921 //------------------------------------------------
922 /*29*/ fTree->Branch("fTreeVariableDistOverTotMom",&fTreeVariableDistOverTotMom,"fTreeVariableDistOverTotMom/F");
923 /*30*/ fTree->Branch("fTreeVariableNSigmasPosProton",&fTreeVariableNSigmasPosProton,"fTreeVariableNSigmasPosProton/F");
924 /*31*/ fTree->Branch("fTreeVariableNSigmasPosPion",&fTreeVariableNSigmasPosPion,"fTreeVariableNSigmasPosPion/F");
925 /*32*/ fTree->Branch("fTreeVariableNSigmasNegProton",&fTreeVariableNSigmasNegProton,"fTreeVariableNSigmasNegProton/F");
926 /*33*/ fTree->Branch("fTreeVariableNSigmasNegPion",&fTreeVariableNSigmasNegPion,"fTreeVariableNSigmasNegPion/F");
927 //------------------------------------------------
928 /*34*/ fTree->Branch("fTreeVariableNegEta",&fTreeVariableNegEta,"fTreeVariableNegEta/F");
929 /*35*/ fTree->Branch("fTreeVariablePosEta",&fTreeVariablePosEta,"fTreeVariablePosEta/F");
930 /*36*/ fTree->Branch("fTreeVariableV0CreationRadius",&fTreeVariableV0CreationRadius,"fTreeVariableV0CreationRadius/F");
932 if ( fkLightWeight == kFALSE ){ // these are debugging branches!
933 /*37*/ fTree->Branch("fTreeVariableIndexStatus",&fTreeVariableIndexStatus,"fTreeVariableIndexStatus/I");
934 /*38*/ fTree->Branch("fTreeVariableIndexStatusMother",&fTreeVariableIndexStatusMother,"fTreeVariableIndexStatusMother/I");
937 /*39*/ fTree->Branch("fTreeVariableRunNumber",&fTreeVariableRunNumber,"fTreeVariableRunNumber/I");
938 /*40*/ fTree->Branch("fTreeVariableEventNumber",&fTreeVariableEventNumber,"fTreeVariableEventNumber/l");
940 if ( fkLightWeight == kFALSE ){ // these are debugging branches!
941 /*34*/ fTree->Branch("fTreeVariableVertexZ",&fTreeVariableVertexZ,"fTreeVariableVertexZ/F");
944 if ( fkLightWeight == kFALSE ){ // these are debugging branches!
945 //-----------FOR CTAU DEBUGGING: Full Phase Space + Decay Position Info
946 fTree->Branch("fTreeVariableV0x",&fTreeVariableV0x,"fTreeVariableV0x/F");
947 fTree->Branch("fTreeVariableV0y",&fTreeVariableV0y,"fTreeVariableV0y/F");
948 fTree->Branch("fTreeVariableV0z",&fTreeVariableV0z,"fTreeVariableV0z/F");
950 fTree->Branch("fTreeVariableV0Px",&fTreeVariableV0Px,"fTreeVariableV0Px/F");
951 fTree->Branch("fTreeVariableV0Py",&fTreeVariableV0Py,"fTreeVariableV0Py/F");
952 fTree->Branch("fTreeVariableV0Pz",&fTreeVariableV0Pz,"fTreeVariableV0Pz/F");
954 //-----------FOR CTAU DEBUGGING: Full Phase Space + Decay Position Info, perfect info from MC
955 fTree->Branch("fTreeVariableMCV0x",&fTreeVariableMCV0x,"fTreeVariableMCV0x/F");
956 fTree->Branch("fTreeVariableMCV0y",&fTreeVariableMCV0y,"fTreeVariableMCV0y/F");
957 fTree->Branch("fTreeVariableMCV0z",&fTreeVariableMCV0z,"fTreeVariableMCV0z/F");
959 fTree->Branch("fTreeVariableMCV0Px",&fTreeVariableMCV0Px,"fTreeVariableMCV0Px/F");
960 fTree->Branch("fTreeVariableMCV0Py",&fTreeVariableMCV0Py,"fTreeVariableMCV0Py/F");
961 fTree->Branch("fTreeVariableMCV0Pz",&fTreeVariableMCV0Pz,"fTreeVariableMCV0Pz/F");
963 //-----------FOR CTAU DEBUGGING: Primary vertex info
964 fTree->Branch("fTreeVariablePVx",&fTreeVariablePVx,"fTreeVariablePVx/F");
965 fTree->Branch("fTreeVariablePVy",&fTreeVariablePVy,"fTreeVariablePVy/F");
966 fTree->Branch("fTreeVariablePVz",&fTreeVariablePVz,"fTreeVariablePVz/F");
968 fTree->Branch("fTreeVariableMCPVx",&fTreeVariableMCPVx,"fTreeVariableMCPVx/F");
969 fTree->Branch("fTreeVariableMCPVy",&fTreeVariableMCPVy,"fTreeVariableMCPVy/F");
970 fTree->Branch("fTreeVariableMCPVz",&fTreeVariableMCPVz,"fTreeVariableMCPVz/F");
973 fTree->Branch("fTreeVariableIsNonInjected",&fTreeVariableIsNonInjected,"fTreeVariableIsNonInjected/O"); //O for bOOlean...
975 if ( fkLightWeight == kFALSE ){ // these are debugging branches!
976 fTree->Branch("fTreeVariableNegTrackStatus",&fTreeVariableNegTrackStatus,"fTreeVariableNegTrackStatus/l");
977 fTree->Branch("fTreeVariablePosTrackStatus",&fTreeVariablePosTrackStatus,"fTreeVariablePosTrackStatus/l");
978 fTree->Branch("fTreeVariableNegPhysicalStatus",&fTreeVariableNegPhysicalStatus,"fTreeVariableNegPhysicalStatus/I");
979 fTree->Branch("fTreeVariablePosPhysicalStatus",&fTreeVariablePosPhysicalStatus,"fTreeVariablePosPhysicalStatus/I");
981 if( fkSpecialExecution == kTRUE ){
982 fTree->Branch("fTreeVariablePosPx",&fTreeVariablePosPx,"fTreeVariablePosPx/F");
983 fTree->Branch("fTreeVariablePosPy",&fTreeVariablePosPy,"fTreeVariablePosPy/F");
984 fTree->Branch("fTreeVariablePosPz",&fTreeVariablePosPz,"fTreeVariablePosPz/F");
985 fTree->Branch("fTreeVariableNegPx",&fTreeVariableNegPx,"fTreeVariableNegPx/F");
986 fTree->Branch("fTreeVariableNegPy",&fTreeVariableNegPy,"fTreeVariableNegPy/F");
987 fTree->Branch("fTreeVariableNegPz",&fTreeVariableNegPz,"fTreeVariableNegPz/F");
990 //------------------------------------------------
991 // Particle Identification Setup
992 //------------------------------------------------
994 AliAnalysisManager *man=AliAnalysisManager::GetAnalysisManager();
995 AliInputEventHandler* inputHandler = (AliInputEventHandler*) (man->GetInputEventHandler());
996 fPIDResponse = inputHandler->GetPIDResponse();
1000 if(! fESDtrackCuts ){
1001 fESDtrackCuts = new AliESDtrackCuts();
1004 fUtils = new AliAnalysisUtils();
1007 //------------------------------------------------
1008 // V0 Multiplicity Histograms
1009 //------------------------------------------------
1011 // Create histograms
1013 fListHistV0 = new TList();
1014 fListHistV0->SetOwner(); // See http://root.cern.ch/root/html/TCollection.html#TCollection:SetOwner
1017 if(! fHistV0MultiplicityBeforeTrigSel) {
1018 fHistV0MultiplicityBeforeTrigSel = new TH1F("fHistV0MultiplicityBeforeTrigSel",
1019 "V0s per event (before Trig. Sel.);Nbr of V0s/Evt;Events",
1021 fListHistV0->Add(fHistV0MultiplicityBeforeTrigSel);
1024 if(! fHistV0MultiplicityForTrigEvt) {
1025 fHistV0MultiplicityForTrigEvt = new TH1F("fHistV0MultiplicityForTrigEvt",
1026 "V0s per event (for triggered evt);Nbr of V0s/Evt;Events",
1028 fListHistV0->Add(fHistV0MultiplicityForTrigEvt);
1031 if(! fHistV0MultiplicityForSelEvt) {
1032 fHistV0MultiplicityForSelEvt = new TH1F("fHistV0MultiplicityForSelEvt",
1033 "V0s per event;Nbr of V0s/Evt;Events",
1035 fListHistV0->Add(fHistV0MultiplicityForSelEvt);
1038 if(! fHistV0MultiplicityForSelEvtNoTPCOnly) {
1039 fHistV0MultiplicityForSelEvtNoTPCOnly = new TH1F("fHistV0MultiplicityForSelEvtNoTPCOnly",
1040 "V0s per event;Nbr of V0s/Evt;Events",
1042 fListHistV0->Add(fHistV0MultiplicityForSelEvtNoTPCOnly);
1044 if(! fHistV0MultiplicityForSelEvtNoTPCOnlyNoPileup) {
1045 fHistV0MultiplicityForSelEvtNoTPCOnlyNoPileup = new TH1F("fHistV0MultiplicityForSelEvtNoTPCOnlyNoPileup",
1046 "V0s per event;Nbr of V0s/Evt;Events",
1048 fListHistV0->Add(fHistV0MultiplicityForSelEvtNoTPCOnlyNoPileup);
1051 //------------------------------------------------
1052 // Track Multiplicity Histograms
1053 //------------------------------------------------
1055 if(! fHistMultiplicityBeforeTrigSel) {
1056 fHistMultiplicityBeforeTrigSel = new TH1F("fHistMultiplicityBeforeTrigSel",
1057 "Tracks per event;Nbr of Tracks;Events",
1059 fListHistV0->Add(fHistMultiplicityBeforeTrigSel);
1061 if(! fHistMultiplicityForTrigEvt) {
1062 fHistMultiplicityForTrigEvt = new TH1F("fHistMultiplicityForTrigEvt",
1063 "Tracks per event;Nbr of Tracks;Events",
1065 fListHistV0->Add(fHistMultiplicityForTrigEvt);
1067 if(! fHistMultiplicity) {
1068 fHistMultiplicity = new TH1F("fHistMultiplicity",
1069 "Tracks per event;Nbr of Tracks;Events",
1071 fListHistV0->Add(fHistMultiplicity);
1073 if(! fHistMultiplicityNoTPCOnly) {
1074 fHistMultiplicityNoTPCOnly = new TH1F("fHistMultiplicityNoTPCOnly",
1075 "Tracks per event;Nbr of Tracks;Events",
1077 fListHistV0->Add(fHistMultiplicityNoTPCOnly);
1079 if(! fHistMultiplicityNoTPCOnlyNoPileup) {
1080 fHistMultiplicityNoTPCOnlyNoPileup = new TH1F("fHistMultiplicityNoTPCOnlyNoPileup",
1081 "Tracks per event;Nbr of Tracks;Events",
1083 fListHistV0->Add(fHistMultiplicityNoTPCOnlyNoPileup);
1086 //V0A Centrality (if PbPb / pPb)
1087 if(! fHistMultiplicityV0ABeforeTrigSel) {
1088 fHistMultiplicityV0ABeforeTrigSel = new TH1F("fHistMultiplicityV0ABeforeTrigSel",
1089 "Centrality Distribution: V0A;V0A Centrality;Events",
1091 fListHistV0->Add(fHistMultiplicityV0ABeforeTrigSel);
1093 if(! fHistMultiplicityV0AForTrigEvt) {
1094 fHistMultiplicityV0AForTrigEvt = new TH1F("fHistMultiplicityV0AForTrigEvt",
1095 "Centrality Distribution: V0A;V0A Centrality;Events",
1097 fListHistV0->Add(fHistMultiplicityV0AForTrigEvt);
1099 if(! fHistMultiplicityV0A) {
1100 fHistMultiplicityV0A = new TH1F("fHistMultiplicityV0A",
1101 "Centrality Distribution: V0A;V0A Centrality;Events",
1103 fListHistV0->Add(fHistMultiplicityV0A);
1105 if(! fHistMultiplicityV0ANoTPCOnly) {
1106 fHistMultiplicityV0ANoTPCOnly = new TH1F("fHistMultiplicityV0ANoTPCOnly",
1107 "Centrality Distribution: V0A;V0A Centrality;Events",
1109 fListHistV0->Add(fHistMultiplicityV0ANoTPCOnly);
1111 if(! fHistMultiplicityV0ANoTPCOnlyNoPileup) {
1112 fHistMultiplicityV0ANoTPCOnlyNoPileup = new TH1F("fHistMultiplicityV0ANoTPCOnlyNoPileup",
1113 "Centrality Distribution: V0A;V0A Centrality;Events",
1115 fListHistV0->Add(fHistMultiplicityV0ANoTPCOnlyNoPileup);
1118 //ZNA Centrality (if PbPb / pPb)
1119 if(! fHistMultiplicityZNABeforeTrigSel) {
1120 fHistMultiplicityZNABeforeTrigSel = new TH1F("fHistMultiplicityZNABeforeTrigSel",
1121 "Centrality Distribution: ZNA;ZNA Centrality;Events",
1123 fListHistV0->Add(fHistMultiplicityZNABeforeTrigSel);
1125 if(! fHistMultiplicityZNAForTrigEvt) {
1126 fHistMultiplicityZNAForTrigEvt = new TH1F("fHistMultiplicityZNAForTrigEvt",
1127 "Centrality Distribution: ZNA;ZNA Centrality;Events",
1129 fListHistV0->Add(fHistMultiplicityZNAForTrigEvt);
1131 if(! fHistMultiplicityZNA) {
1132 fHistMultiplicityZNA = new TH1F("fHistMultiplicityZNA",
1133 "Centrality Distribution: ZNA;ZNA Centrality;Events",
1135 fListHistV0->Add(fHistMultiplicityZNA);
1137 if(! fHistMultiplicityZNANoTPCOnly) {
1138 fHistMultiplicityZNANoTPCOnly = new TH1F("fHistMultiplicityZNANoTPCOnly",
1139 "Centrality Distribution: ZNA;ZNA Centrality;Events",
1141 fListHistV0->Add(fHistMultiplicityZNANoTPCOnly);
1143 if(! fHistMultiplicityZNANoTPCOnlyNoPileup) {
1144 fHistMultiplicityZNANoTPCOnlyNoPileup = new TH1F("fHistMultiplicityZNANoTPCOnlyNoPileup",
1145 "Centrality Distribution: ZNA;ZNA Centrality;Events",
1147 fListHistV0->Add(fHistMultiplicityZNANoTPCOnlyNoPileup);
1150 //TRK Centrality (if PbPb / pPb)
1151 if(! fHistMultiplicityTRKBeforeTrigSel) {
1152 fHistMultiplicityTRKBeforeTrigSel = new TH1F("fHistMultiplicityTRKBeforeTrigSel",
1153 "Centrality Distribution: TRK;TRK Centrality;Events",
1155 fListHistV0->Add(fHistMultiplicityTRKBeforeTrigSel);
1157 if(! fHistMultiplicityTRKForTrigEvt) {
1158 fHistMultiplicityTRKForTrigEvt = new TH1F("fHistMultiplicityTRKForTrigEvt",
1159 "Centrality Distribution: TRK;TRK Centrality;Events",
1161 fListHistV0->Add(fHistMultiplicityTRKForTrigEvt);
1163 if(! fHistMultiplicityTRK) {
1164 fHistMultiplicityTRK = new TH1F("fHistMultiplicityTRK",
1165 "Centrality Distribution: TRK;TRK Centrality;Events",
1167 fListHistV0->Add(fHistMultiplicityTRK);
1169 if(! fHistMultiplicityTRKNoTPCOnly) {
1170 fHistMultiplicityTRKNoTPCOnly = new TH1F("fHistMultiplicityTRKNoTPCOnly",
1171 "Centrality Distribution: TRK;TRK Centrality;Events",
1173 fListHistV0->Add(fHistMultiplicityTRKNoTPCOnly);
1175 if(! fHistMultiplicityTRKNoTPCOnlyNoPileup) {
1176 fHistMultiplicityTRKNoTPCOnlyNoPileup = new TH1F("fHistMultiplicityTRKNoTPCOnlyNoPileup",
1177 "Centrality Distribution: TRK;TRK Centrality;Events",
1179 fListHistV0->Add(fHistMultiplicityTRKNoTPCOnlyNoPileup);
1182 //SPD Centrality (if PbPb / pPb)
1183 if(! fHistMultiplicitySPDBeforeTrigSel) {
1184 fHistMultiplicitySPDBeforeTrigSel = new TH1F("fHistMultiplicitySPDBeforeTrigSel",
1185 "Centrality Distribution: SPD;SPD Centrality;Events",
1187 fListHistV0->Add(fHistMultiplicitySPDBeforeTrigSel);
1189 if(! fHistMultiplicitySPDForTrigEvt) {
1190 fHistMultiplicitySPDForTrigEvt = new TH1F("fHistMultiplicitySPDForTrigEvt",
1191 "Centrality Distribution: SPD;SPD Centrality;Events",
1193 fListHistV0->Add(fHistMultiplicitySPDForTrigEvt);
1195 if(! fHistMultiplicitySPD) {
1196 fHistMultiplicitySPD = new TH1F("fHistMultiplicitySPD",
1197 "Centrality Distribution: SPD;SPD Centrality;Events",
1199 fListHistV0->Add(fHistMultiplicitySPD);
1201 if(! fHistMultiplicitySPDNoTPCOnly) {
1202 fHistMultiplicitySPDNoTPCOnly = new TH1F("fHistMultiplicitySPDNoTPCOnly",
1203 "Centrality Distribution: SPD;SPD Centrality;Events",
1205 fListHistV0->Add(fHistMultiplicitySPDNoTPCOnly);
1207 if(! fHistMultiplicitySPDNoTPCOnlyNoPileup) {
1208 fHistMultiplicitySPDNoTPCOnlyNoPileup = new TH1F("fHistMultiplicitySPDNoTPCOnlyNoPileup",
1209 "Centrality Distribution: SPD;SPD Centrality;Events",
1211 fListHistV0->Add(fHistMultiplicitySPDNoTPCOnlyNoPileup);
1217 //Raw Data for J/Psi paper Technique
1218 //TH2F *f2dHistMultiplicityVsTrueBeforeTrigSel; //! multiplicity distribution
1219 //TH2F *f2dHistMultiplicityVsTrueForTrigEvt; //! multiplicity distribution
1220 //TH2F *f2dHistMultiplicityVsTrue; //! multiplicity distribution
1221 //TH2F *f2dHistMultiplicityVsTrueNoTPCOnly; //! multiplicity distribution
1222 //TH2F *f2dHistMultiplicityVsTrueNoTPCOnlyNoPileup; //! multiplicity distribution
1224 if(! f2dHistMultiplicityVsTrueBeforeTrigSel) {
1225 f2dHistMultiplicityVsTrueBeforeTrigSel = new TH2F("f2dHistMultiplicityVsTrueBeforeTrigSel",
1226 "Tracks per event", 200, 0, 200, 200, 0, 200);
1227 fListHistV0->Add(f2dHistMultiplicityVsTrueBeforeTrigSel);
1229 if(! f2dHistMultiplicityVsTrueForTrigEvt) {
1230 f2dHistMultiplicityVsTrueForTrigEvt = new TH2F("f2dHistMultiplicityVsTrueForTrigEvt",
1231 "Tracks per event", 200, 0, 200, 200, 0, 200);
1232 fListHistV0->Add(f2dHistMultiplicityVsTrueForTrigEvt);
1234 if(! f2dHistMultiplicityVsTrue) {
1235 f2dHistMultiplicityVsTrue = new TH2F("f2dHistMultiplicityVsTrue",
1236 "Tracks per event", 200, 0, 200, 200, 0, 200);
1237 fListHistV0->Add(f2dHistMultiplicityVsTrue);
1239 if(! f2dHistMultiplicityVsTrueNoTPCOnly) {
1240 f2dHistMultiplicityVsTrueNoTPCOnly = new TH2F("f2dHistMultiplicityVsTrueNoTPCOnly",
1241 "Tracks per event", 200, 0, 200, 200, 0, 200);
1242 fListHistV0->Add(f2dHistMultiplicityVsTrueNoTPCOnly);
1244 if(! f2dHistMultiplicityVsTrueNoTPCOnlyNoPileup) {
1245 f2dHistMultiplicityVsTrueNoTPCOnlyNoPileup = new TH2F("f2dHistMultiplicityVsTrueNoTPCOnlyNoPileup",
1246 "Tracks per event", 200, 0, 200, 200, 0, 200);
1247 fListHistV0->Add(f2dHistMultiplicityVsTrueNoTPCOnlyNoPileup);
1251 //Raw Data for Vertex Z position estimator change
1252 //TH2F *f2dHistMultiplicityVsVertexZBeforeTrigSel; //! multiplicity distribution
1253 //TH2F *f2dHistMultiplicityVsVertexZForTrigEvt; //! multiplicity distribution
1254 //TH2F *f2dHistMultiplicityVsVertexZ; //! multiplicity distribution
1255 //TH2F *f2dHistMultiplicityVsVertexZNoTPCOnly; //! multiplicity distribution
1256 //TH2F *f2dHistMultiplicityVsVertexZNoTPCOnlyNoPileup; //! multiplicity distribution
1258 if(! f2dHistMultiplicityVsVertexZBeforeTrigSel) {
1259 f2dHistMultiplicityVsVertexZBeforeTrigSel = new TH2F("f2dHistMultiplicityVsVertexZBeforeTrigSel",
1260 "Tracks per event", 200, 0, 200,400, -20, 20);
1261 fListHistV0->Add(f2dHistMultiplicityVsVertexZBeforeTrigSel);
1263 if(! f2dHistMultiplicityVsVertexZForTrigEvt) {
1264 f2dHistMultiplicityVsVertexZForTrigEvt = new TH2F("f2dHistMultiplicityVsVertexZForTrigEvt",
1265 "Tracks per event", 200, 0, 200, 400, -20, 20);
1266 fListHistV0->Add(f2dHistMultiplicityVsVertexZForTrigEvt);
1268 if(! f2dHistMultiplicityVsVertexZ) {
1269 f2dHistMultiplicityVsVertexZ = new TH2F("f2dHistMultiplicityVsVertexZ",
1270 "Tracks per event", 200, 0, 200, 400, -20, 20);
1271 fListHistV0->Add(f2dHistMultiplicityVsVertexZ);
1273 if(! f2dHistMultiplicityVsVertexZNoTPCOnly) {
1274 f2dHistMultiplicityVsVertexZNoTPCOnly = new TH2F("f2dHistMultiplicityVsVertexZNoTPCOnly",
1275 "Tracks per event", 200, 0, 200, 400, -20, 20);
1276 fListHistV0->Add(f2dHistMultiplicityVsVertexZNoTPCOnly);
1278 if(! f2dHistMultiplicityVsVertexZNoTPCOnlyNoPileup) {
1279 f2dHistMultiplicityVsVertexZNoTPCOnlyNoPileup = new TH2F("f2dHistMultiplicityVsVertexZNoTPCOnlyNoPileup",
1280 "Tracks per event", 200, 0, 200, 400, -20, 20);
1281 fListHistV0->Add(f2dHistMultiplicityVsVertexZNoTPCOnlyNoPileup);
1284 //Generated PVz test
1286 // TH1F *fHistGenVertexZBeforeTrigSel; //! multiplicity distribution
1287 // TH1F *fHistGenVertexZForTrigEvt; //! multiplicity distribution
1288 // TH1F *fHistGenVertexZ; //! multiplicity distribution
1289 // TH1F *fHistGenVertexZNoTPCOnly; //! multiplicity distribution
1290 // TH1F *fHistGenVertexZNoTPCOnlyNoPileup; //! multiplicity distribution
1292 if(! fHistGenVertexZBeforeTrigSel) {
1293 fHistGenVertexZBeforeTrigSel = new TH1F("fHistGenVertexZBeforeTrigSel",
1294 "PV z position;Nbr of Evts;z",
1296 fListHistV0->Add(fHistGenVertexZBeforeTrigSel);
1298 if(! fHistGenVertexZForTrigEvt) {
1299 fHistGenVertexZForTrigEvt = new TH1F("fHistGenVertexZForTrigEvt",
1300 "PV z position;Nbr of Evts;z",
1302 fListHistV0->Add(fHistGenVertexZForTrigEvt);
1304 if(! fHistGenVertexZ) {
1305 fHistGenVertexZ = new TH1F("fHistGenVertexZ",
1306 "PV z position;Nbr of Evts;z",
1308 fListHistV0->Add(fHistGenVertexZ);
1310 if(! fHistGenVertexZNoTPCOnly) {
1311 fHistGenVertexZNoTPCOnly = new TH1F("fHistGenVertexZNoTPCOnly",
1312 "PV z position;Nbr of Evts;z",
1314 fListHistV0->Add(fHistGenVertexZNoTPCOnly);
1316 if(! fHistGenVertexZNoTPCOnlyNoPileup) {
1317 fHistGenVertexZNoTPCOnlyNoPileup = new TH1F("fHistGenVertexZNoTPCOnlyNoPileup",
1318 "PV z position;Nbr of Evts;z",
1320 fListHistV0->Add(fHistGenVertexZNoTPCOnlyNoPileup);
1324 //------------------------------------------------
1325 // Generated Particle Histograms
1326 //------------------------------------------------
1328 Int_t lCustomNBins = 200;
1329 Double_t lCustomPtUpperLimit = 20;
1330 Int_t lCustomNBinsMultiplicity = 100;
1332 //----------------------------------
1333 // Raw Generated (Pre-physics-selection)
1334 //----------------------------------
1336 //--- 3D Histo (Pt, Y, Multiplicity), V0M Version (default)
1338 if(! f3dHistPrimRawPtVsYVsMultLambda) {
1339 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);
1340 fListHistV0->Add(f3dHistPrimRawPtVsYVsMultLambda);
1342 if(! f3dHistPrimRawPtVsYVsMultAntiLambda) {
1343 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);
1344 fListHistV0->Add(f3dHistPrimRawPtVsYVsMultAntiLambda);
1346 if(! f3dHistPrimRawPtVsYVsMultK0Short) {
1347 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);
1348 fListHistV0->Add(f3dHistPrimRawPtVsYVsMultK0Short);
1351 if(! f3dHistPrimRawPtVsYCMSVsMultLambda) {
1352 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);
1353 fListHistV0->Add(f3dHistPrimRawPtVsYCMSVsMultLambda);
1355 if(! f3dHistPrimRawPtVsYCMSVsMultAntiLambda) {
1356 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);
1357 fListHistV0->Add(f3dHistPrimRawPtVsYCMSVsMultAntiLambda);
1359 if(! f3dHistPrimRawPtVsYCMSVsMultK0Short) {
1360 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);
1361 fListHistV0->Add(f3dHistPrimRawPtVsYCMSVsMultK0Short);
1364 //--- 3D Histo (Pt, Y, Multiplicity), V0A Version
1366 if(! f3dHistPrimRawPtVsYVsMultV0ALambda) {
1367 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);
1368 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimRawPtVsYVsMultV0ALambda);
1370 if(! f3dHistPrimRawPtVsYVsMultV0AAntiLambda) {
1371 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);
1372 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimRawPtVsYVsMultV0AAntiLambda);
1374 if(! f3dHistPrimRawPtVsYVsMultV0AK0Short) {
1375 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);
1376 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimRawPtVsYVsMultV0AK0Short);
1379 if(! f3dHistPrimRawPtVsYCMSVsMultV0ALambda) {
1380 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);
1381 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimRawPtVsYCMSVsMultV0ALambda);
1383 if(! f3dHistPrimRawPtVsYCMSVsMultV0AAntiLambda) {
1384 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);
1385 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimRawPtVsYCMSVsMultV0AAntiLambda);
1387 if(! f3dHistPrimRawPtVsYCMSVsMultV0AK0Short) {
1388 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);
1389 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimRawPtVsYCMSVsMultV0AK0Short);
1392 //Cross-check at Raw Level
1393 if(! f3dHistPrimRawPtVsYCMSVsMultV0AKPlus) {
1394 f3dHistPrimRawPtVsYCMSVsMultV0AKPlus = new TH3F( "f3dHistPrimRawPtVsYCMSVsMultV0AKPlus", "Pt_{K+} Vs Y_{K+} Vs Multiplicity; Pt_{K+} (GeV/c); Y_{K+} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1395 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimRawPtVsYCMSVsMultV0AKPlus);
1397 if(! f3dHistPrimRawPtVsYCMSVsMultV0AKMinus) {
1398 f3dHistPrimRawPtVsYCMSVsMultV0AKMinus = new TH3F( "f3dHistPrimRawPtVsYCMSVsMultV0AKMinus", "Pt_{K-} Vs Y_{K-} Vs Multiplicity; Pt_{K-} (GeV/c); Y_{K-} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1399 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimRawPtVsYCMSVsMultV0AKMinus);
1402 //--- 3D Histo (Pt, Y, Multiplicity), ZNA Version
1404 if(! f3dHistPrimRawPtVsYVsMultZNALambda) {
1405 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);
1406 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimRawPtVsYVsMultZNALambda);
1408 if(! f3dHistPrimRawPtVsYVsMultZNAAntiLambda) {
1409 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);
1410 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimRawPtVsYVsMultZNAAntiLambda);
1412 if(! f3dHistPrimRawPtVsYVsMultZNAK0Short) {
1413 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);
1414 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimRawPtVsYVsMultZNAK0Short);
1417 if(! f3dHistPrimRawPtVsYCMSVsMultZNALambda) {
1418 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);
1419 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimRawPtVsYCMSVsMultZNALambda);
1421 if(! f3dHistPrimRawPtVsYCMSVsMultZNAAntiLambda) {
1422 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);
1423 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimRawPtVsYCMSVsMultZNAAntiLambda);
1425 if(! f3dHistPrimRawPtVsYCMSVsMultZNAK0Short) {
1426 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);
1427 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimRawPtVsYCMSVsMultZNAK0Short);
1430 //--- 3D Histo (Pt, Y, Multiplicity), TRK Version
1432 if(! f3dHistPrimRawPtVsYVsMultTRKLambda) {
1433 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);
1434 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimRawPtVsYVsMultTRKLambda);
1436 if(! f3dHistPrimRawPtVsYVsMultTRKAntiLambda) {
1437 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);
1438 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimRawPtVsYVsMultTRKAntiLambda);
1440 if(! f3dHistPrimRawPtVsYVsMultTRKK0Short) {
1441 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);
1442 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimRawPtVsYVsMultTRKK0Short);
1445 if(! f3dHistPrimRawPtVsYCMSVsMultTRKLambda) {
1446 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);
1447 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimRawPtVsYCMSVsMultTRKLambda);
1449 if(! f3dHistPrimRawPtVsYCMSVsMultTRKAntiLambda) {
1450 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);
1451 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimRawPtVsYCMSVsMultTRKAntiLambda);
1453 if(! f3dHistPrimRawPtVsYCMSVsMultTRKK0Short) {
1454 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);
1455 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimRawPtVsYCMSVsMultTRKK0Short);
1458 //--- 3D Histo (Pt, Y, Multiplicity), SPD Version
1460 if(! f3dHistPrimRawPtVsYVsMultSPDLambda) {
1461 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);
1462 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimRawPtVsYVsMultSPDLambda);
1464 if(! f3dHistPrimRawPtVsYVsMultSPDAntiLambda) {
1465 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);
1466 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimRawPtVsYVsMultSPDAntiLambda);
1468 if(! f3dHistPrimRawPtVsYVsMultSPDK0Short) {
1469 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);
1470 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimRawPtVsYVsMultSPDK0Short);
1473 if(! f3dHistPrimRawPtVsYCMSVsMultSPDLambda) {
1474 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);
1475 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimRawPtVsYCMSVsMultSPDLambda);
1477 if(! f3dHistPrimRawPtVsYCMSVsMultSPDAntiLambda) {
1478 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);
1479 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimRawPtVsYCMSVsMultSPDAntiLambda);
1481 if(! f3dHistPrimRawPtVsYCMSVsMultSPDK0Short) {
1482 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);
1483 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimRawPtVsYCMSVsMultSPDK0Short);
1488 //---> Non-injected particles
1490 if(! f3dHistPrimRawPtVsYVsMultNonInjLambda) {
1491 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);
1492 fListHistV0->Add(f3dHistPrimRawPtVsYVsMultNonInjLambda);
1494 if(! f3dHistPrimRawPtVsYVsMultNonInjAntiLambda) {
1495 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);
1496 fListHistV0->Add(f3dHistPrimRawPtVsYVsMultNonInjAntiLambda);
1498 if(! f3dHistPrimRawPtVsYVsMultNonInjK0Short) {
1499 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);
1500 fListHistV0->Add(f3dHistPrimRawPtVsYVsMultNonInjK0Short);
1503 //--- 3D Histo (Pt, Y, MultiplicityMC)
1505 if(! f3dHistPrimRawPtVsYVsMultMCLambda) {
1506 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);
1507 fListHistV0->Add(f3dHistPrimRawPtVsYVsMultMCLambda);
1509 if(! f3dHistPrimRawPtVsYVsMultMCAntiLambda) {
1510 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);
1511 fListHistV0->Add(f3dHistPrimRawPtVsYVsMultMCAntiLambda);
1513 if(! f3dHistPrimRawPtVsYVsMultMCK0Short) {
1514 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);
1515 fListHistV0->Add(f3dHistPrimRawPtVsYVsMultMCK0Short);
1518 //--- 3D Histo (Pt, Y, VertexZ)
1520 if(! f3dHistPrimRawPtVsYVsVertexZLambda) {
1521 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);
1522 fListHistV0->Add(f3dHistPrimRawPtVsYVsVertexZLambda);
1524 if(! f3dHistPrimRawPtVsYVsVertexZAntiLambda) {
1525 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);
1526 fListHistV0->Add(f3dHistPrimRawPtVsYVsVertexZAntiLambda);
1528 if(! f3dHistPrimRawPtVsYVsVertexZK0Short) {
1529 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);
1530 fListHistV0->Add(f3dHistPrimRawPtVsYVsVertexZK0Short);
1533 //--- 3D Histo (Pt, Y, Multiplicity), close to PV criterion
1535 if(! f3dHistPrimCloseToPVPtVsYVsMultLambda) {
1536 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);
1537 fListHistV0->Add(f3dHistPrimCloseToPVPtVsYVsMultLambda);
1539 if(! f3dHistPrimCloseToPVPtVsYVsMultAntiLambda) {
1540 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);
1541 fListHistV0->Add(f3dHistPrimCloseToPVPtVsYVsMultAntiLambda);
1543 if(! f3dHistPrimCloseToPVPtVsYVsMultK0Short) {
1544 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);
1545 fListHistV0->Add(f3dHistPrimCloseToPVPtVsYVsMultK0Short);
1549 //--- 3D Histo (Pt, Y, Proper Decay Length)
1551 if(! f3dHistPrimRawPtVsYVsDecayLengthLambda) {
1552 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);
1553 fListHistV0->Add(f3dHistPrimRawPtVsYVsDecayLengthLambda);
1555 if(! f3dHistPrimRawPtVsYVsDecayLengthAntiLambda) {
1556 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);
1557 fListHistV0->Add(f3dHistPrimRawPtVsYVsDecayLengthAntiLambda);
1559 if(! f3dHistPrimRawPtVsYVsDecayLengthK0Short) {
1560 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);
1561 fListHistV0->Add(f3dHistPrimRawPtVsYVsDecayLengthK0Short);
1564 //--------------------------------------------------------------------------------------
1566 //--------------------------------------------------------------------------------------
1567 //--- 3D Histo (Pt, Y, Multiplicity) for generated XiMinus/Plus, all generated
1569 if(! f3dHistGenPtVsYVsMultXiMinus) {
1570 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);
1571 fListHistV0->Add(f3dHistGenPtVsYVsMultXiMinus);
1573 if(! f3dHistGenPtVsYVsMultXiPlus) {
1574 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);
1575 fListHistV0->Add(f3dHistGenPtVsYVsMultXiPlus);
1578 if(! f3dHistGenPtVsYCMSVsMultXiMinus) {
1579 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);
1580 fListHistV0->Add(f3dHistGenPtVsYCMSVsMultXiMinus);
1582 if(! f3dHistGenPtVsYCMSVsMultXiPlus) {
1583 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);
1584 fListHistV0->Add(f3dHistGenPtVsYCMSVsMultXiPlus);
1587 //--------------------------------------------------------------------------------------
1588 //--- 3D Histo (Pt, Y, Multiplicity) for generated XiMinus/Plus, at selected analysis evts
1590 if(! f3dHistGenSelectedPtVsYVsMultXiMinus) {
1591 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);
1592 fListHistV0->Add(f3dHistGenSelectedPtVsYVsMultXiMinus);
1594 if(! f3dHistGenSelectedPtVsYVsMultXiPlus) {
1595 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);
1596 fListHistV0->Add(f3dHistGenSelectedPtVsYVsMultXiPlus);
1599 //CASCADES, analysis level, y CMS
1600 //--------------------------------------------------------------------------------------
1601 //--- 3D Histo (Pt, Y, Multiplicity) for generated XiMinus/Plus, at selected analysis evts
1603 if(! f3dHistGenSelectedPtVsYCMSVsMultXiMinus) {
1604 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);
1605 fListHistV0->Add(f3dHistGenSelectedPtVsYCMSVsMultXiMinus);
1607 if(! f3dHistGenSelectedPtVsYCMSVsMultXiPlus) {
1608 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);
1609 fListHistV0->Add(f3dHistGenSelectedPtVsYCMSVsMultXiPlus);
1612 //--------------------------------------------------------------------------------------
1614 //--------------------------------------------------------------------------------------
1615 //--- 3D Histo (Pt, Y, Multiplicity) for generated XiMinus/Plus, all generated
1617 if(! f3dHistGenPtVsYVsMultV0AXiMinus) {
1618 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);
1619 if( fkIsNuclear ) fListHistV0->Add(f3dHistGenPtVsYVsMultV0AXiMinus);
1621 if(! f3dHistGenPtVsYVsMultV0AXiPlus) {
1622 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);
1623 if( fkIsNuclear ) fListHistV0->Add(f3dHistGenPtVsYVsMultV0AXiPlus);
1626 if(! f3dHistGenPtVsYCMSVsMultV0AXiMinus) {
1627 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);
1628 if( fkIsNuclear ) fListHistV0->Add(f3dHistGenPtVsYCMSVsMultV0AXiMinus);
1630 if(! f3dHistGenPtVsYCMSVsMultV0AXiPlus) {
1631 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);
1632 if( fkIsNuclear ) fListHistV0->Add(f3dHistGenPtVsYCMSVsMultV0AXiPlus);
1635 //--------------------------------------------------------------------------------------
1636 //--- 3D Histo (Pt, Y, Multiplicity) for generated XiMinus/Plus, at selected analysis evts
1638 if(! f3dHistGenSelectedPtVsYVsMultV0AXiMinus) {
1639 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);
1640 if( fkIsNuclear ) fListHistV0->Add(f3dHistGenSelectedPtVsYVsMultV0AXiMinus);
1642 if(! f3dHistGenSelectedPtVsYVsMultV0AXiPlus) {
1643 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);
1644 if( fkIsNuclear ) fListHistV0->Add(f3dHistGenSelectedPtVsYVsMultV0AXiPlus);
1647 //CASCADES, analysis level, y CMS
1648 //--------------------------------------------------------------------------------------
1649 //--- 3D Histo (Pt, Y, Multiplicity) for generated XiMinus/Plus, at selected analysis evts
1651 if(! f3dHistGenSelectedPtVsYCMSVsMultV0AXiMinus) {
1652 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);
1653 if( fkIsNuclear ) fListHistV0->Add(f3dHistGenSelectedPtVsYCMSVsMultV0AXiMinus);
1655 if(! f3dHistGenSelectedPtVsYCMSVsMultV0AXiPlus) {
1656 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);
1657 if( fkIsNuclear ) fListHistV0->Add(f3dHistGenSelectedPtVsYCMSVsMultV0AXiPlus);
1660 //--------------------------------------------------------------------------------------
1662 //--------------------------------------------------------------------------------------
1663 //--- 3D Histo (Pt, Y, Multiplicity) for generated XiMinus/Plus, all generated
1665 if(! f3dHistGenPtVsYVsMultZNAXiMinus) {
1666 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);
1667 if( fkIsNuclear ) fListHistV0->Add(f3dHistGenPtVsYVsMultZNAXiMinus);
1669 if(! f3dHistGenPtVsYVsMultZNAXiPlus) {
1670 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);
1671 if( fkIsNuclear ) fListHistV0->Add(f3dHistGenPtVsYVsMultZNAXiPlus);
1674 if(! f3dHistGenPtVsYCMSVsMultZNAXiMinus) {
1675 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);
1676 if( fkIsNuclear ) fListHistV0->Add(f3dHistGenPtVsYCMSVsMultZNAXiMinus);
1678 if(! f3dHistGenPtVsYCMSVsMultZNAXiPlus) {
1679 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);
1680 if( fkIsNuclear ) fListHistV0->Add(f3dHistGenPtVsYCMSVsMultZNAXiPlus);
1683 //--------------------------------------------------------------------------------------
1684 //--- 3D Histo (Pt, Y, Multiplicity) for generated XiMinus/Plus, at selected analysis evts
1686 if(! f3dHistGenSelectedPtVsYVsMultZNAXiMinus) {
1687 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);
1688 if( fkIsNuclear ) fListHistV0->Add(f3dHistGenSelectedPtVsYVsMultZNAXiMinus);
1690 if(! f3dHistGenSelectedPtVsYVsMultZNAXiPlus) {
1691 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);
1692 if( fkIsNuclear ) fListHistV0->Add(f3dHistGenSelectedPtVsYVsMultZNAXiPlus);
1695 //CASCADES, analysis level, y CMS
1696 //--------------------------------------------------------------------------------------
1697 //--- 3D Histo (Pt, Y, Multiplicity) for generated XiMinus/Plus, at selected analysis evts
1699 if(! f3dHistGenSelectedPtVsYCMSVsMultZNAXiMinus) {
1700 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);
1701 if( fkIsNuclear ) fListHistV0->Add(f3dHistGenSelectedPtVsYCMSVsMultZNAXiMinus);
1703 if(! f3dHistGenSelectedPtVsYCMSVsMultZNAXiPlus) {
1704 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);
1705 if( fkIsNuclear ) fListHistV0->Add(f3dHistGenSelectedPtVsYCMSVsMultZNAXiPlus);
1708 //--------------------------------------------------------------------------------------
1710 //--------------------------------------------------------------------------------------
1711 //--- 3D Histo (Pt, Y, Multiplicity) for generated XiMinus/Plus, all generated
1713 if(! f3dHistGenPtVsYVsMultTRKXiMinus) {
1714 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);
1715 if( fkIsNuclear ) fListHistV0->Add(f3dHistGenPtVsYVsMultTRKXiMinus);
1717 if(! f3dHistGenPtVsYVsMultTRKXiPlus) {
1718 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);
1719 if( fkIsNuclear ) fListHistV0->Add(f3dHistGenPtVsYVsMultTRKXiPlus);
1722 if(! f3dHistGenPtVsYCMSVsMultTRKXiMinus) {
1723 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);
1724 if( fkIsNuclear ) fListHistV0->Add(f3dHistGenPtVsYCMSVsMultTRKXiMinus);
1726 if(! f3dHistGenPtVsYCMSVsMultTRKXiPlus) {
1727 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);
1728 if( fkIsNuclear ) fListHistV0->Add(f3dHistGenPtVsYCMSVsMultTRKXiPlus);
1731 //--------------------------------------------------------------------------------------
1732 //--- 3D Histo (Pt, Y, Multiplicity) for generated XiMinus/Plus, at selected analysis evts
1734 if(! f3dHistGenSelectedPtVsYVsMultTRKXiMinus) {
1735 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);
1736 if( fkIsNuclear ) fListHistV0->Add(f3dHistGenSelectedPtVsYVsMultTRKXiMinus);
1738 if(! f3dHistGenSelectedPtVsYVsMultTRKXiPlus) {
1739 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);
1740 if( fkIsNuclear ) fListHistV0->Add(f3dHistGenSelectedPtVsYVsMultTRKXiPlus);
1743 //CASCADES, analysis level, y CMS
1744 //--------------------------------------------------------------------------------------
1745 //--- 3D Histo (Pt, Y, Multiplicity) for generated XiMinus/Plus, at selected analysis evts
1747 if(! f3dHistGenSelectedPtVsYCMSVsMultTRKXiMinus) {
1748 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);
1749 if( fkIsNuclear ) fListHistV0->Add(f3dHistGenSelectedPtVsYCMSVsMultTRKXiMinus);
1751 if(! f3dHistGenSelectedPtVsYCMSVsMultTRKXiPlus) {
1752 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);
1753 if( fkIsNuclear ) fListHistV0->Add(f3dHistGenSelectedPtVsYCMSVsMultTRKXiPlus);
1757 //--------------------------------------------------------------------------------------
1759 //--------------------------------------------------------------------------------------
1760 //--- 3D Histo (Pt, Y, Multiplicity) for generated XiMinus/Plus, all generated
1762 if(! f3dHistGenPtVsYVsMultSPDXiMinus) {
1763 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);
1764 if( fkIsNuclear ) fListHistV0->Add(f3dHistGenPtVsYVsMultSPDXiMinus);
1766 if(! f3dHistGenPtVsYVsMultSPDXiPlus) {
1767 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);
1768 if( fkIsNuclear ) fListHistV0->Add(f3dHistGenPtVsYVsMultSPDXiPlus);
1771 if(! f3dHistGenPtVsYCMSVsMultSPDXiMinus) {
1772 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);
1773 if( fkIsNuclear ) fListHistV0->Add(f3dHistGenPtVsYCMSVsMultSPDXiMinus);
1775 if(! f3dHistGenPtVsYCMSVsMultSPDXiPlus) {
1776 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);
1777 if( fkIsNuclear ) fListHistV0->Add(f3dHistGenPtVsYCMSVsMultSPDXiPlus);
1780 //--------------------------------------------------------------------------------------
1781 //--- 3D Histo (Pt, Y, Multiplicity) for generated XiMinus/Plus, at selected analysis evts
1783 if(! f3dHistGenSelectedPtVsYVsMultSPDXiMinus) {
1784 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);
1785 if( fkIsNuclear ) fListHistV0->Add(f3dHistGenSelectedPtVsYVsMultSPDXiMinus);
1787 if(! f3dHistGenSelectedPtVsYVsMultSPDXiPlus) {
1788 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);
1789 if( fkIsNuclear ) fListHistV0->Add(f3dHistGenSelectedPtVsYVsMultSPDXiPlus);
1792 //CASCADES, analysis level, y CMS
1793 //--------------------------------------------------------------------------------------
1794 //--- 3D Histo (Pt, Y, Multiplicity) for generated XiMinus/Plus, at selected analysis evts
1796 if(! f3dHistGenSelectedPtVsYCMSVsMultSPDXiMinus) {
1797 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);
1798 if( fkIsNuclear ) fListHistV0->Add(f3dHistGenSelectedPtVsYCMSVsMultSPDXiMinus);
1800 if(! f3dHistGenSelectedPtVsYCMSVsMultSPDXiPlus) {
1801 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);
1802 if( fkIsNuclear ) fListHistV0->Add(f3dHistGenSelectedPtVsYCMSVsMultSPDXiPlus);
1807 //----------------------------------
1808 // Histos at analysis level
1809 //----------------------------------
1811 //The usual V0M business...
1813 if(! f3dHistPrimAnalysisPtVsYVsMultLambda) {
1814 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);
1815 fListHistV0->Add(f3dHistPrimAnalysisPtVsYVsMultLambda);
1817 if(! f3dHistPrimAnalysisPtVsYVsMultAntiLambda) {
1818 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);
1819 fListHistV0->Add(f3dHistPrimAnalysisPtVsYVsMultAntiLambda);
1821 if(! f3dHistPrimAnalysisPtVsYVsMultK0Short) {
1822 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);
1823 fListHistV0->Add(f3dHistPrimAnalysisPtVsYVsMultK0Short);
1826 if(! f3dHistPrimAnalysisPtVsYCMSVsMultLambda) {
1827 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);
1828 fListHistV0->Add(f3dHistPrimAnalysisPtVsYCMSVsMultLambda);
1830 if(! f3dHistPrimAnalysisPtVsYCMSVsMultAntiLambda) {
1831 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);
1832 fListHistV0->Add(f3dHistPrimAnalysisPtVsYCMSVsMultAntiLambda);
1834 if(! f3dHistPrimAnalysisPtVsYCMSVsMultK0Short) {
1835 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);
1836 fListHistV0->Add(f3dHistPrimAnalysisPtVsYCMSVsMultK0Short);
1839 //TRUE Multiplicity Business
1841 if(! f3dHistPrimAnalysisPtVsYVsMultMCLambda) {
1842 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);
1843 fListHistV0->Add(f3dHistPrimAnalysisPtVsYVsMultMCLambda);
1845 if(! f3dHistPrimAnalysisPtVsYVsMultMCAntiLambda) {
1846 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);
1847 fListHistV0->Add(f3dHistPrimAnalysisPtVsYVsMultMCAntiLambda);
1849 if(! f3dHistPrimAnalysisPtVsYVsMultMCK0Short) {
1850 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);
1851 fListHistV0->Add(f3dHistPrimAnalysisPtVsYVsMultMCK0Short);
1854 if(! f3dHistPrimAnalysisPtVsYCMSVsMultMCLambda) {
1855 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);
1856 fListHistV0->Add(f3dHistPrimAnalysisPtVsYCMSVsMultMCLambda);
1858 if(! f3dHistPrimAnalysisPtVsYCMSVsMultMCAntiLambda) {
1859 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);
1860 fListHistV0->Add(f3dHistPrimAnalysisPtVsYCMSVsMultMCAntiLambda);
1862 if(! f3dHistPrimAnalysisPtVsYCMSVsMultMCK0Short) {
1863 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);
1864 fListHistV0->Add(f3dHistPrimAnalysisPtVsYCMSVsMultMCK0Short);
1869 if(! f3dHistPrimAnalysisPtVsYVsMultV0ALambda) {
1870 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);
1871 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimAnalysisPtVsYVsMultV0ALambda);
1873 if(! f3dHistPrimAnalysisPtVsYVsMultV0AAntiLambda) {
1874 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);
1875 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimAnalysisPtVsYVsMultV0AAntiLambda);
1877 if(! f3dHistPrimAnalysisPtVsYVsMultV0AK0Short) {
1878 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);
1879 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimAnalysisPtVsYVsMultV0AK0Short);
1882 if(! f3dHistPrimAnalysisPtVsYCMSVsMultV0ALambda) {
1883 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);
1884 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimAnalysisPtVsYCMSVsMultV0ALambda);
1886 if(! f3dHistPrimAnalysisPtVsYCMSVsMultV0AAntiLambda) {
1887 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);
1888 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimAnalysisPtVsYCMSVsMultV0AAntiLambda);
1890 if(! f3dHistPrimAnalysisPtVsYCMSVsMultV0AK0Short) {
1891 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);
1892 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimAnalysisPtVsYCMSVsMultV0AK0Short);
1895 //Cross-check at Analysis Level
1896 if(! f3dHistPrimAnalysisPtVsYCMSVsMultV0AKPlus) {
1897 f3dHistPrimAnalysisPtVsYCMSVsMultV0AKPlus = new TH3F( "f3dHistPrimAnalysisPtVsYCMSVsMultV0AKPlus", "Pt_{K+} Vs Y_{K+} Vs Multiplicity; Pt_{K+} (GeV/c); Y_{K+} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1898 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimAnalysisPtVsYCMSVsMultV0AKPlus);
1900 //Cross-check at Analysis Level
1901 if(! f3dHistPrimAnalysisPtVsYCMSVsMultV0AKMinus) {
1902 f3dHistPrimAnalysisPtVsYCMSVsMultV0AKMinus = new TH3F( "f3dHistPrimAnalysisPtVsYCMSVsMultV0AKMinus", "Pt_{K-} Vs Y_{K-} Vs Multiplicity; Pt_{K-} (GeV/c); Y_{K-} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1903 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimAnalysisPtVsYCMSVsMultV0AKMinus);
1909 if(! f3dHistPrimAnalysisPtVsYVsMultZNALambda) {
1910 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);
1911 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimAnalysisPtVsYVsMultZNALambda);
1913 if(! f3dHistPrimAnalysisPtVsYVsMultZNAAntiLambda) {
1914 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);
1915 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimAnalysisPtVsYVsMultZNAAntiLambda);
1917 if(! f3dHistPrimAnalysisPtVsYVsMultZNAK0Short) {
1918 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);
1919 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimAnalysisPtVsYVsMultZNAK0Short);
1922 if(! f3dHistPrimAnalysisPtVsYCMSVsMultZNALambda) {
1923 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);
1924 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimAnalysisPtVsYCMSVsMultZNALambda);
1926 if(! f3dHistPrimAnalysisPtVsYCMSVsMultZNAAntiLambda) {
1927 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);
1928 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimAnalysisPtVsYCMSVsMultZNAAntiLambda);
1930 if(! f3dHistPrimAnalysisPtVsYCMSVsMultZNAK0Short) {
1931 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);
1932 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimAnalysisPtVsYCMSVsMultZNAK0Short);
1937 if(! f3dHistPrimAnalysisPtVsYVsMultTRKLambda) {
1938 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);
1939 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimAnalysisPtVsYVsMultTRKLambda);
1941 if(! f3dHistPrimAnalysisPtVsYVsMultTRKAntiLambda) {
1942 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);
1943 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimAnalysisPtVsYVsMultTRKAntiLambda);
1945 if(! f3dHistPrimAnalysisPtVsYVsMultTRKK0Short) {
1946 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);
1947 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimAnalysisPtVsYVsMultTRKK0Short);
1950 if(! f3dHistPrimAnalysisPtVsYCMSVsMultTRKLambda) {
1951 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);
1952 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimAnalysisPtVsYCMSVsMultTRKLambda);
1954 if(! f3dHistPrimAnalysisPtVsYCMSVsMultTRKAntiLambda) {
1955 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);
1956 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimAnalysisPtVsYCMSVsMultTRKAntiLambda);
1958 if(! f3dHistPrimAnalysisPtVsYCMSVsMultTRKK0Short) {
1959 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);
1960 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimAnalysisPtVsYCMSVsMultTRKK0Short);
1965 if(! f3dHistPrimAnalysisPtVsYVsMultSPDLambda) {
1966 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);
1967 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimAnalysisPtVsYVsMultSPDLambda);
1969 if(! f3dHistPrimAnalysisPtVsYVsMultSPDAntiLambda) {
1970 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);
1971 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimAnalysisPtVsYVsMultSPDAntiLambda);
1973 if(! f3dHistPrimAnalysisPtVsYVsMultSPDK0Short) {
1974 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);
1975 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimAnalysisPtVsYVsMultSPDK0Short);
1978 if(! f3dHistPrimAnalysisPtVsYCMSVsMultSPDLambda) {
1979 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);
1980 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimAnalysisPtVsYCMSVsMultSPDLambda);
1982 if(! f3dHistPrimAnalysisPtVsYCMSVsMultSPDAntiLambda) {
1983 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);
1984 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimAnalysisPtVsYCMSVsMultSPDAntiLambda);
1986 if(! f3dHistPrimAnalysisPtVsYCMSVsMultSPDK0Short) {
1987 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);
1988 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimAnalysisPtVsYCMSVsMultSPDK0Short);
1991 //----------------------------------
1992 // Primary Vertex Position Histos
1993 //----------------------------------
1996 fHistPVx = new TH1F("fHistPVx",
1997 "PV x position;Nbr of Evts;x",
1999 fListHistV0->Add(fHistPVx);
2002 fHistPVy = new TH1F("fHistPVy",
2003 "PV y position;Nbr of Evts;y",
2005 fListHistV0->Add(fHistPVy);
2008 fHistPVz = new TH1F("fHistPVz",
2009 "PV z position;Nbr of Evts;z",
2011 fListHistV0->Add(fHistPVz);
2014 if(! fHistPVxAnalysis) {
2015 fHistPVxAnalysis = new TH1F("fHistPVxAnalysis",
2016 "PV x position;Nbr of Evts;x",
2018 fListHistV0->Add(fHistPVxAnalysis);
2020 if(! fHistPVyAnalysis) {
2021 fHistPVyAnalysis = new TH1F("fHistPVyAnalysis",
2022 "PV y position;Nbr of Evts;y",
2024 fListHistV0->Add(fHistPVyAnalysis);
2026 if(! fHistPVzAnalysis) {
2027 fHistPVzAnalysis = new TH1F("fHistPVzAnalysis",
2028 "PV z position;Nbr of Evts;z",
2030 fListHistV0->Add(fHistPVzAnalysis);
2033 if(! fHistPVxAnalysisHasHighPtLambda) {
2034 fHistPVxAnalysisHasHighPtLambda = new TH1F("fHistPVxAnalysisHasHighPtLambda",
2035 "PV x position;Nbr of Evts;x",
2037 fListHistV0->Add(fHistPVxAnalysisHasHighPtLambda);
2039 if(! fHistPVyAnalysisHasHighPtLambda) {
2040 fHistPVyAnalysisHasHighPtLambda = new TH1F("fHistPVyAnalysisHasHighPtLambda",
2041 "PV y position;Nbr of Evts;y",
2043 fListHistV0->Add(fHistPVyAnalysisHasHighPtLambda);
2045 if(! fHistPVzAnalysisHasHighPtLambda) {
2046 fHistPVzAnalysisHasHighPtLambda = new TH1F("fHistPVzAnalysisHasHighPtLambda",
2047 "PV z position;Nbr of Evts;z",
2049 fListHistV0->Add(fHistPVzAnalysisHasHighPtLambda);
2051 if(! fHistSwappedV0Counter) {
2052 fHistSwappedV0Counter = new TH1F("fHistSwappedV0Counter",
2053 "Swap or not histo;Swapped (1) or not (0); count",
2055 fListHistV0->Add(fHistSwappedV0Counter);
2058 //List of Histograms: Normal
2059 PostData(1, fListHistV0);
2061 //TTree Object: Saved to base directory. Should cache to disk while saving.
2062 //(Important to avoid excessive memory usage, particularly when merging)
2065 }// end UserCreateOutputObjects
2068 //________________________________________________________________________
2069 void AliAnalysisTaskExtractPerformanceV0::UserExec(Option_t *)
2072 // Called for each event
2074 AliESDEvent *lESDevent = 0x0;
2075 AliMCEvent *lMCevent = 0x0;
2076 AliStack *lMCstack = 0x0;
2078 Int_t lNumberOfV0s = -1;
2079 Double_t lTrkgPrimaryVtxPos[3] = {-100.0, -100.0, -100.0};
2080 Double_t lBestPrimaryVtxPos[3] = {-100.0, -100.0, -100.0};
2081 Double_t lMagneticField = -10.;
2083 // Connect to the InputEvent
2084 // After these lines, we should have an ESD/AOD event + the number of V0s in it.
2086 // Appropriate for ESD analysis!
2088 lESDevent = dynamic_cast<AliESDEvent*>( InputEvent() );
2090 AliWarning("ERROR: lESDevent not available \n");
2094 fTreeVariableRunNumber = lESDevent->GetRunNumber();
2095 fTreeVariableEventNumber =
2096 ( ( ((ULong64_t)lESDevent->GetPeriodNumber() ) << 36 ) |
2097 ( ((ULong64_t)lESDevent->GetOrbitNumber () ) << 12 ) |
2098 ((ULong64_t)lESDevent->GetBunchCrossNumber() ) );
2100 lMCevent = MCEvent();
2102 Printf("ERROR: Could not retrieve MC event \n");
2103 cout << "Name of the file with pb :" << fInputHandler->GetTree()->GetCurrentFile()->GetName() << endl;
2107 lMCstack = lMCevent->Stack();
2109 Printf("ERROR: Could not retrieve MC stack \n");
2110 cout << "Name of the file with pb :" << fInputHandler->GetTree()->GetCurrentFile()->GetName() << endl;
2114 //------------------------------------------------
2115 // Rerun V0 vertexer, if asked for
2116 // --- WARNING: Be careful when using in PbPb
2117 //------------------------------------------------
2118 if( fkRunV0Vertexer ){
2119 lESDevent->ResetV0s();
2120 AliV0vertexer lV0vtxer;
2121 lV0vtxer.SetDefaultCuts(fV0Sels);
2122 lV0vtxer.Tracks2V0vertices(lESDevent);
2125 TArrayF mcPrimaryVtx;
2126 AliGenEventHeader* mcHeader=lMCevent->GenEventHeader();
2127 if(!mcHeader) return;
2128 mcHeader->PrimaryVertex(mcPrimaryVtx);
2130 //Code Snippet from Alexander for looking at diffractive Events from DPMJet
2132 if(fDiffractiveOnly){
2133 AliHeader * header = lMCevent->Header();
2134 AliGenDPMjetEventHeader* dpmHeader = dynamic_cast<AliGenDPMjetEventHeader*>(header->GenEventHeader());
2135 if (dpmHeader) nPart = dpmHeader->ProjectileParticipants() + dpmHeader->TargetParticipants();
2137 Int_t nsdiffrac1 = 0;
2138 Int_t nsdiffrac2 = 0;
2139 Int_t nddiffrac = 0;
2140 if (dpmHeader) dpmHeader->GetNDiffractive(nsdiffrac1, nsdiffrac2, nddiffrac);
2141 if (nsdiffrac1 + nsdiffrac2 != nPart) return;
2144 //------------------------------------------------
2145 // Multiplicity Information Acquistion
2146 //------------------------------------------------
2148 //REVISED multiplicity estimator after 'multiplicity day' (2011)
2149 Int_t lMultiplicity = -100;
2150 Int_t lMultiplicityV0A = -100;
2151 Int_t lMultiplicityZNA = -100;
2152 Int_t lMultiplicityTRK = -100;
2153 Int_t lMultiplicitySPD = -100;
2156 if(fkIsNuclear == kFALSE) lMultiplicity = fESDtrackCuts->GetReferenceMultiplicity(lESDevent, AliESDtrackCuts::kTrackletsITSTPC,fEtaRefMult);
2158 //---> If this is a nuclear collision, then go nuclear on "multiplicity" variable...
2159 //---> Warning: Experimental
2160 if(fkIsNuclear == kTRUE){
2161 AliCentrality* centrality;
2162 centrality = lESDevent->GetCentrality();
2163 lMultiplicity = ( ( Int_t ) ( centrality->GetCentralityPercentile( fCentralityEstimator.Data() ) ) );
2164 lMultiplicityV0A = ( ( Int_t ) ( centrality->GetCentralityPercentile( "V0A" ) ) );
2165 lMultiplicityZNA = ( ( Int_t ) ( centrality->GetCentralityPercentile( "ZNA" ) ) );
2166 lMultiplicityTRK = ( ( Int_t ) ( centrality->GetCentralityPercentile( "TRK" ) ) );
2167 lMultiplicitySPD = ( ( Int_t ) ( centrality->GetCentralityPercentile( "CL1" ) ) );
2168 if (centrality->GetQuality()>1) {
2169 PostData(1, fListHistV0);
2175 //Set variable for filling tree afterwards!
2176 //---> pp case......: GetReferenceMultiplicity
2177 //---> Pb-Pb case...: Centrality by V0M
2178 fTreeVariableMultiplicity = lMultiplicity;
2179 fTreeVariableMultiplicityV0A = lMultiplicityV0A;
2180 fTreeVariableMultiplicityZNA = lMultiplicityZNA;
2181 fTreeVariableMultiplicityTRK = lMultiplicityTRK;
2182 fTreeVariableMultiplicitySPD = lMultiplicitySPD;
2184 fHistV0MultiplicityBeforeTrigSel->Fill ( lESDevent->GetNumberOfV0s() );
2186 fHistMultiplicityBeforeTrigSel->Fill ( lMultiplicity );
2187 fHistMultiplicityV0ABeforeTrigSel->Fill ( lMultiplicityV0A );
2188 fHistMultiplicityZNABeforeTrigSel->Fill ( lMultiplicityZNA );
2189 fHistMultiplicityTRKBeforeTrigSel->Fill ( lMultiplicityTRK );
2190 fHistMultiplicitySPDBeforeTrigSel->Fill ( lMultiplicitySPD );
2192 //------------------------------------------------
2193 // MC Information Acquistion
2194 //------------------------------------------------
2196 Int_t iNumberOfPrimaries = -1;
2197 iNumberOfPrimaries = lMCstack->GetNprimary();
2198 if(iNumberOfPrimaries < 1) return;
2199 Bool_t lHasHighPtLambda = kFALSE;
2201 //------------------------------------------------
2202 // Variable Definition
2203 //------------------------------------------------
2205 Int_t lNbMCPrimary = 0;
2207 Int_t lPdgcodeCurrentPart = 0;
2208 Double_t lRapCurrentPart = 0;
2209 Double_t lPtCurrentPart = 0;
2211 //Int_t lComeFromSigma = 0;
2213 // current mc particle 's mother
2214 //Int_t iCurrentMother = 0;
2215 lNbMCPrimary = lMCstack->GetNprimary();
2217 //------------------------------------------------
2218 // Pre-Physics Selection
2219 //------------------------------------------------
2221 //----- Loop on primary Xi, Omega --------------------------------------------------------------
2222 for (Int_t iCurrentLabelStack = 0; iCurrentLabelStack < lNbMCPrimary; iCurrentLabelStack++)
2223 {// This is the begining of the loop on primaries
2225 TParticle* lCurrentParticlePrimary = 0x0;
2226 lCurrentParticlePrimary = lMCstack->Particle( iCurrentLabelStack );
2227 if(!lCurrentParticlePrimary){
2228 Printf("Cascade loop %d - MC TParticle pointer to current stack particle = 0x0 ! Skip ...\n", iCurrentLabelStack );
2231 if ( TMath::Abs(lCurrentParticlePrimary->GetPdgCode()) == 3312 || TMath::Abs(lCurrentParticlePrimary->GetPdgCode()) == 3334 ) {
2232 Double_t lRapXiMCPrimary = -100;
2233 if( (lCurrentParticlePrimary->Energy() - lCurrentParticlePrimary->Pz() +1.e-13) != 0 ) {
2234 if ( (lCurrentParticlePrimary->Energy() + lCurrentParticlePrimary->Pz()) / (lCurrentParticlePrimary->Energy() - lCurrentParticlePrimary->Pz() +1.e-13) !=0 ){
2235 lRapXiMCPrimary = 0.5*TMath::Log( (lCurrentParticlePrimary->Energy() + lCurrentParticlePrimary->Pz()) / (lCurrentParticlePrimary->Energy() - lCurrentParticlePrimary->Pz() +1.e-13) );
2239 //=================================================================================
2241 if( lCurrentParticlePrimary->GetPdgCode() == 3312 ){
2242 lPtCurrentPart = lCurrentParticlePrimary->Pt();
2243 f3dHistGenPtVsYVsMultXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicity);
2244 f3dHistGenPtVsYCMSVsMultXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicity);
2246 f3dHistGenPtVsYVsMultV0AXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicityV0A);
2247 f3dHistGenPtVsYCMSVsMultV0AXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicityV0A);
2248 f3dHistGenPtVsYVsMultZNAXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicityZNA);
2249 f3dHistGenPtVsYCMSVsMultZNAXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicityZNA);
2250 f3dHistGenPtVsYVsMultTRKXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicityTRK);
2251 f3dHistGenPtVsYCMSVsMultTRKXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicityTRK);
2252 f3dHistGenPtVsYVsMultSPDXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicitySPD);
2253 f3dHistGenPtVsYCMSVsMultSPDXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicitySPD);
2255 if( lCurrentParticlePrimary->GetPdgCode() == -3312 ){
2256 lPtCurrentPart = lCurrentParticlePrimary->Pt();
2257 f3dHistGenPtVsYVsMultXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicity);
2258 f3dHistGenPtVsYCMSVsMultXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicity);
2260 f3dHistGenPtVsYVsMultV0AXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicityV0A);
2261 f3dHistGenPtVsYCMSVsMultV0AXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicityV0A);
2262 f3dHistGenPtVsYVsMultZNAXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicityZNA);
2263 f3dHistGenPtVsYCMSVsMultZNAXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicityZNA);
2264 f3dHistGenPtVsYVsMultTRKXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicityTRK);
2265 f3dHistGenPtVsYCMSVsMultTRKXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicityTRK);
2266 f3dHistGenPtVsYVsMultSPDXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicitySPD);
2267 f3dHistGenPtVsYCMSVsMultSPDXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicitySPD);
2271 //----- End Loop on primary Xi, Omega ----------------------------------------------------------
2273 //--------- GENERATED NUMBER OF CHARGED PARTICLES
2274 // ---> Set Variables to Zero again
2275 // ---> Variable Definition
2277 Long_t lNumberOfCharged = 0;
2279 //----- Loop on Stack ----------------------------------------------------------------
2280 for (Int_t iCurrentLabelStack = 0; iCurrentLabelStack < (lMCstack->GetNtrack()); iCurrentLabelStack++)
2281 {// This is the begining of the loop on tracks
2282 TParticle* particleOne = lMCstack->Particle(iCurrentLabelStack);
2283 if(!particleOne) continue;
2284 if(!particleOne->GetPDG()) continue;
2285 Double_t lThisCharge = particleOne->GetPDG()->Charge()/3.;
2286 if(TMath::Abs(lThisCharge)<0.001) continue;
2287 if(! (lMCstack->IsPhysicalPrimary(iCurrentLabelStack)) ) continue;
2289 //Double_t gpt = particleOne -> Pt();
2290 Double_t geta = particleOne -> Eta();
2292 if( TMath::Abs(geta) < 0.5) lNumberOfCharged++;
2293 }//End of loop on tracks
2294 //----- End Loop on Stack ------------------------------------------------------------
2296 //Double_t lpArapidityShift = 0.465;
2297 Bool_t lStackNatural = kTRUE;
2298 //----- Loop on Lambda, K0Short ----------------------------------------------------------------
2299 for (Int_t iCurrentLabelStack = 0; iCurrentLabelStack < (lMCstack->GetNtrack()); iCurrentLabelStack++)
2300 {// This is the begining of the loop on tracks
2302 TParticle* lCurrentParticleForLambdaCheck = 0x0;
2303 lCurrentParticleForLambdaCheck = lMCstack->Particle( iCurrentLabelStack );
2304 if(!lCurrentParticleForLambdaCheck){
2305 Printf("V0s loop %d - MC TParticle pointer to current stack particle = 0x0 ! Skip ...\n", iCurrentLabelStack );
2309 //=================================================================================
2310 //Single-Strange checks
2311 // Keep only K0s, Lambda and AntiLambda:
2312 lPdgcodeCurrentPart = lCurrentParticleForLambdaCheck->GetPdgCode();
2314 if ( (lCurrentParticleForLambdaCheck->GetPdgCode() == 310 ) ||
2315 (lCurrentParticleForLambdaCheck->GetPdgCode() == 3122 ) ||
2316 (lCurrentParticleForLambdaCheck->GetPdgCode() == -3122 ) )
2318 lRapCurrentPart = MyRapidity(lCurrentParticleForLambdaCheck->Energy(),lCurrentParticleForLambdaCheck->Pz());
2319 lPtCurrentPart = lCurrentParticleForLambdaCheck->Pt();
2321 //Use Close to PV for filling CloseToPV histograms!
2322 Double_t dx, dy, dz;
2324 dx = ( (mcPrimaryVtx.At(0)) - (lCurrentParticleForLambdaCheck->Vx()) );
2325 dy = ( (mcPrimaryVtx.At(1)) - (lCurrentParticleForLambdaCheck->Vy()) );
2326 dz = ( (mcPrimaryVtx.At(2)) - (lCurrentParticleForLambdaCheck->Vz()) );
2327 Double_t lDistToPV = TMath::Sqrt(dx*dx + dy*dy + dz*dz);
2328 if( lDistToPV <= 0.001){
2329 if( lPdgcodeCurrentPart == 3122 ){
2330 f3dHistPrimCloseToPVPtVsYVsMultLambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicity);
2332 if( lPdgcodeCurrentPart == -3122 ){
2333 f3dHistPrimCloseToPVPtVsYVsMultAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicity);
2335 if( lPdgcodeCurrentPart == 310 ){
2336 f3dHistPrimCloseToPVPtVsYVsMultK0Short->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicity);
2340 //Use Physical Primaries only for filling PrimRaw Histograms!
2341 if ( lMCstack->IsPhysicalPrimary(iCurrentLabelStack)!=kTRUE ) continue;
2343 lStackNatural = lMCevent->IsFromBGEvent(iCurrentLabelStack); //Is it?
2344 if (!lStackNatural){
2345 if (!(lCurrentParticleForLambdaCheck->GetFirstMother()<0))
2346 {lStackNatural = kTRUE;} // because there are primaries (ALICE definition) not produced in the collision
2349 if( lPdgcodeCurrentPart == 3122 ){
2350 f3dHistPrimRawPtVsYVsMultLambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicity);
2351 f3dHistPrimRawPtVsYCMSVsMultLambda->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicity);
2353 f3dHistPrimRawPtVsYVsMultV0ALambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicityV0A);
2354 f3dHistPrimRawPtVsYCMSVsMultV0ALambda->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicityV0A);
2355 f3dHistPrimRawPtVsYVsMultZNALambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicityZNA);
2356 f3dHistPrimRawPtVsYCMSVsMultZNALambda->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicityZNA);
2357 f3dHistPrimRawPtVsYVsMultTRKLambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicityTRK);
2358 f3dHistPrimRawPtVsYCMSVsMultTRKLambda->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicityTRK);
2359 f3dHistPrimRawPtVsYVsMultSPDLambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicitySPD);
2360 f3dHistPrimRawPtVsYCMSVsMultSPDLambda->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicitySPD);
2362 if(lStackNatural){f3dHistPrimRawPtVsYVsMultNonInjLambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicity);}
2363 f3dHistPrimRawPtVsYVsMultMCLambda->Fill(lPtCurrentPart, lRapCurrentPart, lNumberOfCharged);
2364 f3dHistPrimRawPtVsYVsVertexZLambda->Fill(lPtCurrentPart, lRapCurrentPart, mcPrimaryVtx.At(2));
2365 if( TMath::Abs( lCurrentParticleForLambdaCheck->Eta() )<1.2 && lPtCurrentPart>2 ){
2366 lHasHighPtLambda = kTRUE; //Keep track of events with Lambda within |eta|<1.2 and pt>2
2369 if( lPdgcodeCurrentPart == -3122 ){
2370 f3dHistPrimRawPtVsYVsMultAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicity);
2371 f3dHistPrimRawPtVsYCMSVsMultAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicity);
2373 f3dHistPrimRawPtVsYVsMultV0AAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicityV0A);
2374 f3dHistPrimRawPtVsYCMSVsMultV0AAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicityV0A);
2375 f3dHistPrimRawPtVsYVsMultZNAAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicityZNA);
2376 f3dHistPrimRawPtVsYCMSVsMultZNAAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicityZNA);
2377 f3dHistPrimRawPtVsYVsMultTRKAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicityTRK);
2378 f3dHistPrimRawPtVsYCMSVsMultTRKAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicityTRK);
2379 f3dHistPrimRawPtVsYVsMultSPDAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicitySPD);
2380 f3dHistPrimRawPtVsYCMSVsMultSPDAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicitySPD);
2382 if(lStackNatural){f3dHistPrimRawPtVsYVsMultNonInjAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicity);}
2383 f3dHistPrimRawPtVsYVsMultMCAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart, lNumberOfCharged);
2384 f3dHistPrimRawPtVsYVsVertexZAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart, mcPrimaryVtx.At(2));
2386 if( lPdgcodeCurrentPart == 310 ){
2387 f3dHistPrimRawPtVsYVsMultK0Short->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicity);
2388 f3dHistPrimRawPtVsYCMSVsMultK0Short->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicity);
2390 f3dHistPrimRawPtVsYVsMultV0AK0Short->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicityV0A);
2391 f3dHistPrimRawPtVsYCMSVsMultV0AK0Short->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicityV0A);
2392 f3dHistPrimRawPtVsYVsMultZNAK0Short->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicityZNA);
2393 f3dHistPrimRawPtVsYCMSVsMultZNAK0Short->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicityZNA);
2394 f3dHistPrimRawPtVsYVsMultTRKK0Short->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicityTRK);
2395 f3dHistPrimRawPtVsYCMSVsMultTRKK0Short->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicityTRK);
2396 f3dHistPrimRawPtVsYVsMultSPDK0Short->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicitySPD);
2397 f3dHistPrimRawPtVsYCMSVsMultSPDK0Short->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicitySPD);
2399 if(lStackNatural){f3dHistPrimRawPtVsYVsMultNonInjK0Short->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicity);}
2400 f3dHistPrimRawPtVsYVsMultMCK0Short->Fill(lPtCurrentPart, lRapCurrentPart, lNumberOfCharged);
2401 f3dHistPrimRawPtVsYVsVertexZK0Short->Fill(lPtCurrentPart, lRapCurrentPart, mcPrimaryVtx.At(2));
2403 //Decay Length Acquisition=====================================================
2404 Double_t decaylength = -1;
2405 Double_t lV0Mass = -1;
2407 if( !(lCurrentParticleForLambdaCheck->GetDaughter(0) < 0) ) {
2408 TParticle* lDght0ofV0 = lMCstack->Particle( lCurrentParticleForLambdaCheck->GetDaughter(0) ); //get first daughter
2409 if(lDght0ofV0){ // skip if not defined.
2410 decaylength = TMath::Sqrt(
2411 TMath::Power( lCurrentParticleForLambdaCheck->Vx() - lDght0ofV0->Vx() , 2) +
2412 TMath::Power( lCurrentParticleForLambdaCheck->Vy() - lDght0ofV0->Vy() , 2) +
2413 TMath::Power( lCurrentParticleForLambdaCheck->Vz() - lDght0ofV0->Vz() , 2)
2415 //Need to correct for relativitity! Involves multiplying by mass and dividing by momentum.
2416 if(TMath::Abs( lPdgcodeCurrentPart ) == 3122 ) { lV0Mass = 1.115683; }
2417 if(TMath::Abs( lPdgcodeCurrentPart ) == 310 ) { lV0Mass = 0.497614; }
2418 if( lCurrentParticleForLambdaCheck->P() + 1e-10 != 0 ) decaylength = ( lV0Mass * decaylength ) / ( lCurrentParticleForLambdaCheck->P() + 1e-10 );
2419 if( lCurrentParticleForLambdaCheck->P() + 1e-10 == 0 ) decaylength = 1e+5;
2422 if( lPdgcodeCurrentPart == 3122) f3dHistPrimRawPtVsYVsDecayLengthLambda ->Fill( lPtCurrentPart, lRapCurrentPart , decaylength );
2423 if( lPdgcodeCurrentPart == -3122) f3dHistPrimRawPtVsYVsDecayLengthAntiLambda ->Fill( lPtCurrentPart, lRapCurrentPart , decaylength );
2424 if( lPdgcodeCurrentPart == 310) f3dHistPrimRawPtVsYVsDecayLengthK0Short ->Fill( lPtCurrentPart, lRapCurrentPart , decaylength );
2426 }//End of loop on tracks
2427 //----- End Loop on Lambda, K0Short ------------------------------------------------------------
2430 f2dHistMultiplicityVsTrueBeforeTrigSel->Fill ( lMultiplicity , lNumberOfCharged );
2432 fTreeVariableMultiplicityMC = lNumberOfCharged;
2434 fHistGenVertexZBeforeTrigSel->Fill( (mcPrimaryVtx.At(2)) );
2436 lPdgcodeCurrentPart = 0;
2437 lRapCurrentPart = 0;
2440 //------------------------------------------------
2441 // Physics Selection
2442 //------------------------------------------------
2444 UInt_t maskIsSelected = ((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected();
2445 Bool_t isSelected = 0;
2446 Bool_t isSelectedExtra = kTRUE; //extra sel, default YES
2447 isSelected = (maskIsSelected & AliVEvent::kMB) == AliVEvent::kMB;
2449 //pA triggering: CINT7
2450 if( fkSwitchINT7 ) isSelected = (maskIsSelected & AliVEvent::kINT7) == AliVEvent::kINT7;
2452 if(fkSkipTrigger==kFALSE){
2453 //Extra selection applies if with/without SDD is to be dealth with
2454 if( fkFastOnly == "kFastOnly"){
2455 //If not kFastOnly, isSelectedExtra will be kFALSE; procedure will reject it
2456 isSelectedExtra = (maskIsSelected & AliVEvent::kFastOnly) == AliVEvent::kFastOnly;
2458 if( fkFastOnly == "NotkFastOnly"){
2459 //If not kFastOnly, isSelectedExtra will be kTRUE; procedure will accept it
2460 isSelectedExtra = !( (maskIsSelected & AliVEvent::kFastOnly) == AliVEvent::kFastOnly );
2463 //Standard Min-Bias Selection
2464 if ( ! isSelected ) {
2465 PostData(1, fListHistV0);
2469 //Check if goes through extra selections
2470 //isSelectedExtra will be true in case -> fkFastOnly==""
2471 //isSelectedExtra will be true in case -> fkFastOnly=="kFastOnly" && bit kFastOnly ON
2472 //isSelectedExtra will be true in case -> fkFastOnly=="NotkFastOnly" && bit kFastOnly OFF
2473 if ( !isSelectedExtra ) {
2474 PostData(1, fListHistV0);
2480 f2dHistMultiplicityVsTrueForTrigEvt->Fill ( lMultiplicity , lNumberOfCharged );
2481 fHistGenVertexZForTrigEvt->Fill( mcPrimaryVtx.At(2) );
2483 //------------------------------------------------
2484 // After Trigger Selection
2485 //------------------------------------------------
2487 lNumberOfV0s = lESDevent->GetNumberOfV0s();
2489 //Set variable for filling tree afterwards!
2490 fHistV0MultiplicityForTrigEvt->Fill(lNumberOfV0s);
2491 fHistMultiplicityForTrigEvt->Fill ( lMultiplicity );
2492 fHistMultiplicityV0AForTrigEvt ->Fill( lMultiplicityV0A );
2493 fHistMultiplicityZNAForTrigEvt ->Fill( lMultiplicityZNA );
2494 fHistMultiplicityTRKForTrigEvt ->Fill( lMultiplicityTRK );
2495 fHistMultiplicitySPDForTrigEvt ->Fill( lMultiplicitySPD );
2497 //------------------------------------------------
2498 // Getting: Primary Vertex + MagField Info
2499 //------------------------------------------------
2501 const AliESDVertex *lPrimaryTrackingESDVtx = lESDevent->GetPrimaryVertexTracks();
2502 // get the vtx stored in ESD found with tracks
2503 lPrimaryTrackingESDVtx->GetXYZ( lTrkgPrimaryVtxPos );
2505 const AliESDVertex *lPrimaryBestESDVtx = lESDevent->GetPrimaryVertex();
2506 // get the best primary vertex available for the event
2507 // As done in AliCascadeVertexer, we keep the one which is the best one available.
2508 // between : Tracking vertex > SPD vertex > TPC vertex > default SPD vertex
2509 // This one will be used for next calculations (DCA essentially)
2510 lPrimaryBestESDVtx->GetXYZ( lBestPrimaryVtxPos );
2512 Double_t lPrimaryVtxPosition[3];
2513 const AliVVertex *primaryVtx = lESDevent->GetPrimaryVertex();
2514 lPrimaryVtxPosition[0] = primaryVtx->GetX();
2515 lPrimaryVtxPosition[1] = primaryVtx->GetY();
2516 lPrimaryVtxPosition[2] = primaryVtx->GetZ();
2517 fHistPVx->Fill( lPrimaryVtxPosition[0] );
2518 fHistPVy->Fill( lPrimaryVtxPosition[1] );
2519 fHistPVz->Fill( lPrimaryVtxPosition[2] );
2521 f2dHistMultiplicityVsVertexZForTrigEvt->Fill( lMultiplicity, lPrimaryVtxPosition[2] );
2523 //------------------------------------------------
2524 // Primary Vertex Requirements Section:
2525 // ---> pp and PbPb: Only requires |z|<10cm
2526 // ---> pPb: all requirements checked at this stage
2527 //------------------------------------------------
2529 //Roberto's PV selection criteria, implemented 17th April 2013
2531 /* vertex selection */
2532 Bool_t fHasVertex = kFALSE;
2534 const AliESDVertex *vertex = lESDevent->GetPrimaryVertexTracks();
2535 if (vertex->GetNContributors() < 1) {
2536 vertex = lESDevent->GetPrimaryVertexSPD();
2537 if (vertex->GetNContributors() < 1) fHasVertex = kFALSE;
2538 else fHasVertex = kTRUE;
2539 TString vtxTyp = vertex->GetTitle();
2540 Double_t cov[6]={0};
2541 vertex->GetCovarianceMatrix(cov);
2542 Double_t zRes = TMath::Sqrt(cov[5]);
2543 if (vtxTyp.Contains("vertexer:Z") && (zRes>0.25)) fHasVertex = kFALSE;
2545 else fHasVertex = kTRUE;
2547 //Is First event in chunk rejection: Still present!
2548 if(fkpAVertexSelection==kTRUE && fHasVertex == kFALSE) {
2549 AliWarning("Pb / | PV does not satisfy selection criteria!");
2550 PostData(1, fListHistV0);
2555 //Is First event in chunk rejection: Still present!
2556 if(fkpAVertexSelection==kTRUE && fUtils->IsFirstEventInChunk(lESDevent)) {
2557 AliWarning("Pb / | This is the first event in the chunk!");
2558 PostData(1, fListHistV0);
2563 //17 April Fix: Always do primary vertex Z selection, after pA vertex selection from Roberto
2564 if(TMath::Abs(lBestPrimaryVtxPos[2]) > 10.0) {
2565 AliWarning("Pb / | Z position of Best Prim Vtx | > 10.0 cm ... return !");
2566 PostData(1, fListHistV0);
2571 f2dHistMultiplicityVsVertexZ->Fill( lMultiplicity, lPrimaryVtxPosition[2] );
2573 lMagneticField = lESDevent->GetMagneticField( );
2574 fHistV0MultiplicityForSelEvt ->Fill( lNumberOfV0s );
2575 fHistMultiplicity->Fill(lMultiplicity);
2576 fHistMultiplicityV0A->Fill(lMultiplicityV0A);
2577 fHistMultiplicityZNA->Fill(lMultiplicityZNA);
2578 fHistMultiplicityTRK->Fill(lMultiplicityTRK);
2579 fHistMultiplicitySPD->Fill(lMultiplicitySPD);
2580 f2dHistMultiplicityVsTrue->Fill ( lMultiplicity , lNumberOfCharged );
2581 fHistGenVertexZ->Fill( (mcPrimaryVtx.At(2)) );
2582 //------------------------------------------------
2583 // SKIP: Events with well-established PVtx
2584 //------------------------------------------------
2586 const AliESDVertex *lPrimaryTrackingESDVtxCheck = lESDevent->GetPrimaryVertexTracks();
2587 const AliESDVertex *lPrimarySPDVtx = lESDevent->GetPrimaryVertexSPD();
2588 if (!lPrimarySPDVtx->GetStatus() && !lPrimaryTrackingESDVtxCheck->GetStatus() && fkpAVertexSelection == kFALSE){
2589 AliWarning("Pb / No SPD prim. vertex nor prim. Tracking vertex ... return !");
2590 PostData(1, fListHistV0);
2595 f2dHistMultiplicityVsVertexZNoTPCOnly->Fill( lMultiplicity, lPrimaryVtxPosition[2] );
2596 fHistV0MultiplicityForSelEvtNoTPCOnly ->Fill( lNumberOfV0s );
2597 fHistMultiplicityNoTPCOnly->Fill(lMultiplicity);
2598 fHistMultiplicityV0ANoTPCOnly->Fill(lMultiplicityV0A);
2599 fHistMultiplicityZNANoTPCOnly->Fill(lMultiplicityZNA);
2600 fHistMultiplicityTRKNoTPCOnly->Fill(lMultiplicityTRK);
2601 fHistMultiplicitySPDNoTPCOnly->Fill(lMultiplicitySPD);
2602 f2dHistMultiplicityVsTrueNoTPCOnly->Fill ( lMultiplicity , lNumberOfCharged );
2603 fHistGenVertexZNoTPCOnly->Fill( (mcPrimaryVtx.At(2)) );
2604 //------------------------------------------------
2605 // Pileup Rejection Studies
2606 //------------------------------------------------
2608 // FIXME : quality selection regarding pile-up rejection
2609 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
2610 AliWarning("Pb / This is tagged as Pileup from SPD... return !");
2611 PostData(1, fListHistV0);
2615 f2dHistMultiplicityVsVertexZNoTPCOnlyNoPileup->Fill( lMultiplicity, lPrimaryVtxPosition[2] );
2616 fHistV0MultiplicityForSelEvtNoTPCOnlyNoPileup ->Fill( lNumberOfV0s );
2618 fHistMultiplicityNoTPCOnlyNoPileup->Fill(lMultiplicity);
2619 fHistMultiplicityV0ANoTPCOnlyNoPileup->Fill(lMultiplicityV0A);
2620 fHistMultiplicityZNANoTPCOnlyNoPileup->Fill(lMultiplicityZNA);
2621 fHistMultiplicityTRKNoTPCOnlyNoPileup->Fill(lMultiplicityTRK);
2622 fHistMultiplicitySPDNoTPCOnlyNoPileup->Fill(lMultiplicitySPD);
2624 f2dHistMultiplicityVsTrueNoTPCOnlyNoPileup->Fill ( lMultiplicity , lNumberOfCharged );
2625 fHistGenVertexZNoTPCOnlyNoPileup->Fill( (mcPrimaryVtx.At(2)) );
2626 //Do control histograms without the IsFromVertexerZ events, but consider them in analysis...
2627 if( ! (lESDevent->GetPrimaryVertex()->IsFromVertexerZ() ) ){
2628 fHistPVxAnalysis->Fill( lPrimaryVtxPosition[0] );
2629 fHistPVyAnalysis->Fill( lPrimaryVtxPosition[1] );
2630 fHistPVzAnalysis->Fill( lPrimaryVtxPosition[2] );
2631 if ( lHasHighPtLambda == kTRUE ){
2632 fHistPVxAnalysisHasHighPtLambda->Fill( lPrimaryVtxPosition[0] );
2633 fHistPVyAnalysisHasHighPtLambda->Fill( lPrimaryVtxPosition[1] );
2634 fHistPVzAnalysisHasHighPtLambda->Fill( lPrimaryVtxPosition[2] );
2638 fTreeVariableVertexZ = lPrimaryVtxPosition[2];
2640 fTreeVariablePVx = lPrimaryVtxPosition[0];
2641 fTreeVariablePVy = lPrimaryVtxPosition[1];
2642 fTreeVariablePVz = lPrimaryVtxPosition[2];
2644 fTreeVariableMCPVx = (mcPrimaryVtx.At(0));
2645 fTreeVariableMCPVy = (mcPrimaryVtx.At(1));
2646 fTreeVariableMCPVz = (mcPrimaryVtx.At(2));
2648 //------------------------------------------------
2649 // stack loop starts here
2650 //------------------------------------------------
2652 //---> Loop over ALL PARTICLES
2654 for (Int_t iMc = 0; iMc < (lMCstack->GetNtrack()); iMc++) {
2655 TParticle *p0 = lMCstack->Particle(iMc);
2657 //Printf("ERROR: particle with label %d not found in lMCstack (mc loop)", iMc);
2660 lPdgcodeCurrentPart = p0->GetPdgCode();
2662 // Keep only K0s, Lambda and AntiLambda:
2663 if ( (lPdgcodeCurrentPart != 310 ) && (lPdgcodeCurrentPart != 3122 ) && (lPdgcodeCurrentPart != -3122 ) && (TMath::Abs(lPdgcodeCurrentPart) != 321 ) ) continue;
2665 lRapCurrentPart = MyRapidity(p0->Energy(),p0->Pz());
2666 lPtCurrentPart = p0->Pt();
2668 //Use Physical Primaries only for filling PrimRaw Histograms!
2669 if ( lMCstack->IsPhysicalPrimary(iMc)!=kTRUE ) continue;
2671 if( lPdgcodeCurrentPart == 3122 ){
2673 f3dHistPrimAnalysisPtVsYVsMultLambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicity);
2674 f3dHistPrimAnalysisPtVsYCMSVsMultLambda->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicity);
2676 f3dHistPrimAnalysisPtVsYVsMultMCLambda->Fill(lPtCurrentPart, lRapCurrentPart, lNumberOfCharged);
2677 f3dHistPrimAnalysisPtVsYCMSVsMultMCLambda->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lNumberOfCharged);
2679 f3dHistPrimAnalysisPtVsYVsMultV0ALambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicityV0A);
2680 f3dHistPrimAnalysisPtVsYCMSVsMultV0ALambda->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicityV0A);
2681 f3dHistPrimAnalysisPtVsYVsMultZNALambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicityZNA);
2682 f3dHistPrimAnalysisPtVsYCMSVsMultZNALambda->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicityZNA);
2683 f3dHistPrimAnalysisPtVsYVsMultTRKLambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicityTRK);
2684 f3dHistPrimAnalysisPtVsYCMSVsMultTRKLambda->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicityTRK);
2685 f3dHistPrimAnalysisPtVsYVsMultSPDLambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicitySPD);
2686 f3dHistPrimAnalysisPtVsYCMSVsMultSPDLambda->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicitySPD);
2688 if( lPdgcodeCurrentPart == -3122 ){
2690 f3dHistPrimAnalysisPtVsYVsMultAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicity);
2691 f3dHistPrimAnalysisPtVsYCMSVsMultAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicity);
2693 f3dHistPrimAnalysisPtVsYVsMultMCAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart, lNumberOfCharged);
2694 f3dHistPrimAnalysisPtVsYCMSVsMultMCAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lNumberOfCharged);
2696 f3dHistPrimAnalysisPtVsYVsMultV0AAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicityV0A);
2697 f3dHistPrimAnalysisPtVsYCMSVsMultV0AAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicityV0A);
2698 f3dHistPrimAnalysisPtVsYVsMultZNAAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicityZNA);
2699 f3dHistPrimAnalysisPtVsYCMSVsMultZNAAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicityZNA);
2700 f3dHistPrimAnalysisPtVsYVsMultTRKAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicityTRK);
2701 f3dHistPrimAnalysisPtVsYCMSVsMultTRKAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicityTRK);
2702 f3dHistPrimAnalysisPtVsYVsMultSPDAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicitySPD);
2703 f3dHistPrimAnalysisPtVsYCMSVsMultSPDAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicitySPD);
2706 if( lPdgcodeCurrentPart == 310 ){
2708 f3dHistPrimAnalysisPtVsYVsMultK0Short->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicity);
2709 f3dHistPrimAnalysisPtVsYCMSVsMultK0Short->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicity);
2711 f3dHistPrimAnalysisPtVsYVsMultMCK0Short->Fill(lPtCurrentPart, lRapCurrentPart, lNumberOfCharged);
2712 f3dHistPrimAnalysisPtVsYCMSVsMultMCK0Short->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lNumberOfCharged);
2714 f3dHistPrimAnalysisPtVsYVsMultV0AK0Short->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicityV0A);
2715 f3dHistPrimAnalysisPtVsYCMSVsMultV0AK0Short->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicityV0A);
2716 f3dHistPrimAnalysisPtVsYVsMultZNAK0Short->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicityZNA);
2717 f3dHistPrimAnalysisPtVsYCMSVsMultZNAK0Short->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicityZNA);
2718 f3dHistPrimAnalysisPtVsYVsMultTRKK0Short->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicityTRK);
2719 f3dHistPrimAnalysisPtVsYCMSVsMultTRKK0Short->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicityTRK);
2720 f3dHistPrimAnalysisPtVsYVsMultSPDK0Short->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicitySPD);
2721 f3dHistPrimAnalysisPtVsYCMSVsMultSPDK0Short->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicitySPD);
2723 //Cross-check with Charged Kaons...
2724 if( lPdgcodeCurrentPart == 321 ){
2726 f3dHistPrimAnalysisPtVsYCMSVsMultV0AKPlus->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicityV0A);
2728 if( lPdgcodeCurrentPart == -321 ){
2730 f3dHistPrimAnalysisPtVsYCMSVsMultV0AKMinus->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicityV0A);
2735 //----- Loop on primary Xi, Omega --------------------------------------------------------------
2736 for (Int_t iCurrentLabelStack = 0; iCurrentLabelStack < lNbMCPrimary; iCurrentLabelStack++)
2737 {// This is the begining of the loop on primaries
2739 TParticle* lCurrentParticlePrimary = 0x0;
2740 lCurrentParticlePrimary = lMCstack->Particle( iCurrentLabelStack );
2741 if(!lCurrentParticlePrimary){
2742 Printf("Cascade loop %d - MC TParticle pointer to current stack particle = 0x0 ! Skip ...\n", iCurrentLabelStack );
2745 if ( TMath::Abs(lCurrentParticlePrimary->GetPdgCode()) == 3312 || TMath::Abs(lCurrentParticlePrimary->GetPdgCode()) == 3334 ) {
2746 Double_t lRapXiMCPrimary = -100;
2747 if( (lCurrentParticlePrimary->Energy() - lCurrentParticlePrimary->Pz() +1.e-13) != 0 ) {
2748 if ( (lCurrentParticlePrimary->Energy() + lCurrentParticlePrimary->Pz()) / (lCurrentParticlePrimary->Energy() - lCurrentParticlePrimary->Pz() +1.e-13) !=0 ){
2749 lRapXiMCPrimary = 0.5*TMath::Log( (lCurrentParticlePrimary->Energy() + lCurrentParticlePrimary->Pz()) / (lCurrentParticlePrimary->Energy() - lCurrentParticlePrimary->Pz() +1.e-13) );
2753 //=================================================================================
2755 if( lCurrentParticlePrimary->GetPdgCode() == 3312 ){
2756 lPtCurrentPart = lCurrentParticlePrimary->Pt();
2757 f3dHistGenSelectedPtVsYVsMultXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicity);
2758 f3dHistGenSelectedPtVsYCMSVsMultXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicity);
2759 f3dHistGenSelectedPtVsYVsMultV0AXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicityV0A);
2760 f3dHistGenSelectedPtVsYCMSVsMultV0AXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicityV0A);
2761 f3dHistGenSelectedPtVsYVsMultZNAXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicityZNA);
2762 f3dHistGenSelectedPtVsYCMSVsMultZNAXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicityZNA);
2763 f3dHistGenSelectedPtVsYVsMultTRKXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicityTRK);
2764 f3dHistGenSelectedPtVsYCMSVsMultTRKXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicityTRK);
2765 f3dHistGenSelectedPtVsYVsMultSPDXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicitySPD);
2766 f3dHistGenSelectedPtVsYCMSVsMultSPDXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicitySPD);
2768 if( lCurrentParticlePrimary->GetPdgCode() == -3312 ){
2769 lPtCurrentPart = lCurrentParticlePrimary->Pt();
2770 f3dHistGenSelectedPtVsYVsMultXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicity);
2771 f3dHistGenSelectedPtVsYCMSVsMultXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicity);
2772 f3dHistGenSelectedPtVsYVsMultV0AXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicityV0A);
2773 f3dHistGenSelectedPtVsYCMSVsMultV0AXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicityV0A);
2774 f3dHistGenSelectedPtVsYVsMultZNAXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicityZNA);
2775 f3dHistGenSelectedPtVsYCMSVsMultZNAXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicityZNA);
2776 f3dHistGenSelectedPtVsYVsMultTRKXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicityTRK);
2777 f3dHistGenSelectedPtVsYCMSVsMultTRKXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicityTRK);
2778 f3dHistGenSelectedPtVsYVsMultSPDXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicitySPD);
2779 f3dHistGenSelectedPtVsYCMSVsMultSPDXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicitySPD);
2783 //----- End Loop on primary Xi, Omega ----------------------------------------------------------
2785 //------------------------------------------------
2786 // MAIN LAMBDA LOOP STARTS HERE
2787 //------------------------------------------------
2789 //Variable definition
2790 Int_t lOnFlyStatus = 0;
2791 Double_t lChi2V0 = 0;
2792 Double_t lDcaV0Daughters = 0, lDcaV0ToPrimVertex = 0;
2793 Double_t lDcaPosToPrimVertex = 0, lDcaNegToPrimVertex = 0;
2794 Double_t lV0CosineOfPointingAngle = 0;
2795 Double_t lV0Radius = 0, lPt = 0;
2796 Double_t lRapK0Short = 0, lRapLambda = 0;
2797 Double_t lInvMassK0s = 0, lInvMassLambda = 0, lInvMassAntiLambda = 0;
2798 Double_t lAlphaV0 = 0, lPtArmV0 = 0;
2799 Double_t fMinV0Pt = 0;
2800 Double_t fMaxV0Pt = 100;
2803 nv0s = lESDevent->GetNumberOfV0s();
2805 for (Int_t iV0 = 0; iV0 < nv0s; iV0++)
2806 {// This is the begining of the V0 loop
2807 AliESDv0 *v0 = ((AliESDEvent*)lESDevent)->GetV0(iV0);
2810 //---> Fix On-the-Fly candidates
2811 if( v0->GetParamN()->Charge() > 0 && v0->GetParamP()->Charge() < 0 ){
2812 fHistSwappedV0Counter -> Fill( 1 );
2814 fHistSwappedV0Counter -> Fill( 0 );
2816 if ( fkUseOnTheFly ) CheckChargeV0(v0);
2820 v0->GetPxPyPz( tV0mom[0],tV0mom[1],tV0mom[2] );
2821 Double_t lV0TotalMomentum = TMath::Sqrt(
2822 tV0mom[0]*tV0mom[0]+tV0mom[1]*tV0mom[1]+tV0mom[2]*tV0mom[2] );
2824 Double_t tDecayVertexV0[3]; v0->GetXYZ(tDecayVertexV0[0],tDecayVertexV0[1],tDecayVertexV0[2]);
2825 lV0Radius = TMath::Sqrt(tDecayVertexV0[0]*tDecayVertexV0[0]+tDecayVertexV0[1]*tDecayVertexV0[1]);
2827 lRapK0Short = v0->RapK0Short();
2828 lRapLambda = v0->RapLambda();
2830 //Set Variables for later filling
2831 fTreeVariableV0x = tDecayVertexV0[0];
2832 fTreeVariableV0y = tDecayVertexV0[1];
2833 fTreeVariableV0z = tDecayVertexV0[2];
2835 //Set Variables for later filling
2836 fTreeVariableV0Px = tV0mom[0];
2837 fTreeVariableV0Py = tV0mom[1];
2838 fTreeVariableV0Pz = tV0mom[2];
2840 if ((lPt<fMinV0Pt)||(fMaxV0Pt<lPt)) continue;
2842 UInt_t lKeyPos = (UInt_t)TMath::Abs(v0->GetPindex());
2843 UInt_t lKeyNeg = (UInt_t)TMath::Abs(v0->GetNindex());
2845 Double_t lMomPos[3]; v0->GetPPxPyPz(lMomPos[0],lMomPos[1],lMomPos[2]);
2846 Double_t lMomNeg[3]; v0->GetNPxPyPz(lMomNeg[0],lMomNeg[1],lMomNeg[2]);
2848 AliESDtrack *pTrack=((AliESDEvent*)lESDevent)->GetTrack(lKeyPos);
2849 AliESDtrack *nTrack=((AliESDEvent*)lESDevent)->GetTrack(lKeyNeg);
2850 if (!pTrack || !nTrack) {
2851 Printf("ERROR: Could not retreive one of the daughter track");
2855 fTreeVariableNegEta = nTrack->Eta();
2856 fTreeVariablePosEta = pTrack->Eta();
2858 fTreeVariableNegPx = lMomNeg[0]; fTreeVariableNegPy = lMomNeg[1]; fTreeVariableNegPz = lMomNeg[2];
2859 fTreeVariablePosPx = lMomPos[0]; fTreeVariablePosPy = lMomPos[1]; fTreeVariablePosPz = lMomPos[2];
2861 // Filter like-sign V0 (next: add counter and distribution)
2862 if ( pTrack->GetSign() == nTrack->GetSign()){
2866 //________________________________________________________________________
2867 // Track quality cuts
2868 Float_t lPosTrackCrossedRows = pTrack->GetTPCClusterInfo(2,1);
2869 Float_t lNegTrackCrossedRows = nTrack->GetTPCClusterInfo(2,1);
2870 fTreeVariableLeastNbrCrossedRows = (Int_t) lPosTrackCrossedRows;
2871 if( lNegTrackCrossedRows < fTreeVariableLeastNbrCrossedRows )
2872 fTreeVariableLeastNbrCrossedRows = (Int_t) lNegTrackCrossedRows;
2874 // TPC refit condition (done during reconstruction for Offline but not for On-the-fly)
2875 if( !(pTrack->GetStatus() & AliESDtrack::kTPCrefit)) continue;
2876 if( !(nTrack->GetStatus() & AliESDtrack::kTPCrefit)) continue;
2879 fTreeVariablePosTrackStatus = pTrack->GetStatus();
2880 fTreeVariableNegTrackStatus = nTrack->GetStatus();
2882 if ( ( ( ( pTrack->GetTPCClusterInfo(2,1) ) < 70 ) || ( ( nTrack->GetTPCClusterInfo(2,1) ) < 70 ) )&&(fkTakeAllTracks==kFALSE) ) continue;
2884 //GetKinkIndex condition
2885 if( pTrack->GetKinkIndex(0)>0 || nTrack->GetKinkIndex(0)>0 ) continue;
2887 //Findable clusters > 0 condition
2888 if( pTrack->GetTPCNclsF()<=0 || nTrack->GetTPCNclsF()<=0 ) continue;
2890 //Compute ratio Crossed Rows / Findable clusters
2891 //Note: above test avoids division by zero!
2892 Float_t lPosTrackCrossedRowsOverFindable = -1;
2893 Float_t lNegTrackCrossedRowsOverFindable = -1;
2894 if ( ((double)(pTrack->GetTPCNclsF()) ) != 0 ) lPosTrackCrossedRowsOverFindable = lPosTrackCrossedRows / ((double)(pTrack->GetTPCNclsF()));
2895 if ( ((double)(nTrack->GetTPCNclsF()) ) != 0 ) lNegTrackCrossedRowsOverFindable = lNegTrackCrossedRows / ((double)(nTrack->GetTPCNclsF()));
2897 fTreeVariableLeastRatioCrossedRowsOverFindable = lPosTrackCrossedRowsOverFindable;
2898 if( lNegTrackCrossedRowsOverFindable < fTreeVariableLeastRatioCrossedRowsOverFindable )
2899 fTreeVariableLeastRatioCrossedRowsOverFindable = lNegTrackCrossedRowsOverFindable;
2901 //Lowest Cut Level for Ratio Crossed Rows / Findable = 0.8, set here
2902 if ( (fTreeVariableLeastRatioCrossedRowsOverFindable < 0.8)&&(fkTakeAllTracks==kFALSE) ) continue;
2904 //End track Quality Cuts
2905 //________________________________________________________________________
2907 lDcaPosToPrimVertex = TMath::Abs(pTrack->GetD(lPrimaryVtxPosition[0],
2908 lPrimaryVtxPosition[1],
2911 lDcaNegToPrimVertex = TMath::Abs(nTrack->GetD(lPrimaryVtxPosition[0],
2912 lPrimaryVtxPosition[1],
2915 lOnFlyStatus = v0->GetOnFlyStatus();
2916 lChi2V0 = v0->GetChi2V0();
2917 lDcaV0Daughters = v0->GetDcaV0Daughters();
2918 lDcaV0ToPrimVertex = v0->GetD(lPrimaryVtxPosition[0],lPrimaryVtxPosition[1],lPrimaryVtxPosition[2]);
2919 lV0CosineOfPointingAngle = v0->GetV0CosineOfPointingAngle(lPrimaryVtxPosition[0],lPrimaryVtxPosition[1],lPrimaryVtxPosition[2]);
2920 fTreeVariableDCAV0ToPrimVertex = lDcaV0ToPrimVertex;
2921 fTreeVariableV0CosineOfPointingAngle=lV0CosineOfPointingAngle;
2923 // Getting invariant mass infos directly from ESD
2924 v0->ChangeMassHypothesis(310);
2925 lInvMassK0s = v0->GetEffMass();
2926 v0->ChangeMassHypothesis(3122);
2927 lInvMassLambda = v0->GetEffMass();
2928 v0->ChangeMassHypothesis(-3122);
2929 lInvMassAntiLambda = v0->GetEffMass();
2930 lAlphaV0 = v0->AlphaV0();
2931 lPtArmV0 = v0->PtArmV0();
2933 //fTreeVariableOnFlyStatus = lOnFlyStatus;
2934 //fHistV0OnFlyStatus->Fill(lOnFlyStatus);
2936 //===============================================
2937 // Monte Carlo Association starts here
2938 //===============================================
2940 //---> Set Everything to "I don't know" before starting
2942 fTreeVariablePIDPositive = 0;
2943 fTreeVariablePIDNegative = 0;
2945 fTreeVariableIndexStatus = 0;
2946 fTreeVariableIndexStatusMother = 0;
2948 fTreeVariablePtMother = -1;
2949 fTreeVariablePtMC = -1;
2950 fTreeVariableRapMC = -100;
2952 fTreeVariablePID = -1;
2953 fTreeVariablePIDMother = -1;
2955 fTreeVariablePrimaryStatus = 0;
2956 fTreeVariablePrimaryStatusMother = 0;
2957 fTreeVariableV0CreationRadius = -1;
2959 fTreeVariableNegPhysicalStatus = 0;
2960 fTreeVariablePosPhysicalStatus = 0;
2962 Int_t lblPosV0Dghter = (Int_t) TMath::Abs( pTrack->GetLabel() );
2963 Int_t lblNegV0Dghter = (Int_t) TMath::Abs( nTrack->GetLabel() );
2965 TParticle* mcPosV0Dghter = lMCstack->Particle( lblPosV0Dghter );
2966 TParticle* mcNegV0Dghter = lMCstack->Particle( lblNegV0Dghter );
2968 fTreeVariablePosTransvMomentumMC = mcPosV0Dghter->Pt();
2969 fTreeVariableNegTransvMomentumMC = mcNegV0Dghter->Pt();
2971 Int_t lPIDPositive = mcPosV0Dghter -> GetPdgCode();
2972 Int_t lPIDNegative = mcNegV0Dghter -> GetPdgCode();
2974 fTreeVariablePIDPositive = lPIDPositive;
2975 fTreeVariablePIDNegative = lPIDNegative;
2977 Int_t lblMotherPosV0Dghter = mcPosV0Dghter->GetFirstMother() ;
2978 Int_t lblMotherNegV0Dghter = mcNegV0Dghter->GetFirstMother();
2980 if( lMCstack->IsPhysicalPrimary (lblNegV0Dghter) ) fTreeVariableNegPhysicalStatus = 1; //Is Primary!
2981 if( lMCstack->IsSecondaryFromWeakDecay(lblNegV0Dghter) ) fTreeVariableNegPhysicalStatus = 2; //Weak Decay!
2982 if( lMCstack->IsSecondaryFromMaterial (lblNegV0Dghter) ) fTreeVariableNegPhysicalStatus = 3; //Material Int!
2984 if( lMCstack->IsPhysicalPrimary (lblPosV0Dghter) ) fTreeVariablePosPhysicalStatus = 1; //Is Primary!
2985 if( lMCstack->IsSecondaryFromWeakDecay(lblPosV0Dghter) ) fTreeVariablePosPhysicalStatus = 2; //Weak Decay!
2986 if( lMCstack->IsSecondaryFromMaterial (lblPosV0Dghter) ) fTreeVariablePosPhysicalStatus = 3; //Material Int!
2988 if( lblMotherPosV0Dghter == lblMotherNegV0Dghter && lblMotherPosV0Dghter > -1 ){
2989 //either label is fine, they're equal at this stage
2990 TParticle* pThisV0 = lMCstack->Particle( lblMotherPosV0Dghter );
2991 //Set tree variables
2992 fTreeVariablePID = pThisV0->GetPdgCode(); //PDG Code
2993 fTreeVariablePtMC = pThisV0->Pt(); //Perfect Pt
2995 fTreeVariableIsNonInjected = lMCevent->IsFromBGEvent(lblMotherPosV0Dghter); //Is it?
2996 if (!fTreeVariableIsNonInjected){
2997 if (!(pThisV0->GetFirstMother()<0))
2998 {fTreeVariableIsNonInjected = kTRUE;} // because there are primaries (ALICE definition) not produced in the collision
3001 //Set Variables for later filling
3002 //Be careful: Vx, Vy, Vz: Creation vertex. So decay position is the
3003 //Creation vertex of any one of the daughters!
3004 fTreeVariableMCV0x = mcPosV0Dghter->Vx();
3005 fTreeVariableMCV0y = mcPosV0Dghter->Vy();
3006 fTreeVariableMCV0z = mcPosV0Dghter->Vz();
3008 //Set Variables for later filling
3009 fTreeVariableMCV0Px = pThisV0->Px();
3010 fTreeVariableMCV0Py = pThisV0->Py();
3011 fTreeVariableMCV0Pz = pThisV0->Pz();
3013 //Only Interested if it's a Lambda, AntiLambda or K0s
3014 //Avoid the Junction Bug! PYTHIA has particles with Px=Py=Pz=E=0 occasionally,
3015 //having particle code 88 (unrecognized by PDG), for documentation purposes.
3016 //Even ROOT's TParticle::Y() is not prepared to deal with that exception!
3017 //Note that TParticle::Pt() is immune (that would just return 0)...
3018 //Though granted that that should be extremely rare in this precise condition...
3019 if( TMath::Abs(fTreeVariablePID) == 3122 || fTreeVariablePID==310 ){
3020 fTreeVariableRapMC = pThisV0->Y(); //Perfect Y
3022 fTreeVariableV0CreationRadius = TMath::Sqrt(
3023 TMath::Power( ( (mcPrimaryVtx.At(0)) - (pThisV0->Vx()) ) , 2) +
3024 TMath::Power( ( (mcPrimaryVtx.At(1)) - (pThisV0->Vy()) ) , 2) +
3025 TMath::Power( ( (mcPrimaryVtx.At(2)) - (pThisV0->Vz()) ) , 2)
3027 if( lblMotherPosV0Dghter < lNbMCPrimary ) fTreeVariableIndexStatus = 1; //looks primary
3028 if( lblMotherPosV0Dghter >= lNbMCPrimary ) fTreeVariableIndexStatus = 2; //looks secondary
3029 if( lMCstack->IsPhysicalPrimary (lblMotherPosV0Dghter) ) fTreeVariablePrimaryStatus = 1; //Is Primary!
3030 if( lMCstack->IsSecondaryFromWeakDecay(lblMotherPosV0Dghter) ) fTreeVariablePrimaryStatus = 2; //Weak Decay!
3031 if( lMCstack->IsSecondaryFromMaterial (lblMotherPosV0Dghter) ) fTreeVariablePrimaryStatus = 3; //Material Int!
3033 //Now we try to acquire the V0 parent particle, if possible
3034 Int_t lblThisV0Parent = pThisV0->GetFirstMother();
3035 if ( lblThisV0Parent > -1 ){ //if it has a parent, get it and store specs
3036 TParticle* pThisV0Parent = lMCstack->Particle( lblThisV0Parent );
3037 fTreeVariablePIDMother = pThisV0Parent->GetPdgCode(); //V0 Mother PDG
3038 fTreeVariablePtMother = pThisV0Parent->Pt(); //V0 Mother Pt
3039 //Primary Status for the V0 Mother particle
3040 if( lblThisV0Parent < lNbMCPrimary ) fTreeVariableIndexStatusMother = 1; //looks primary
3041 if( lblThisV0Parent >= lNbMCPrimary ) fTreeVariableIndexStatusMother = 2; //looks secondary
3042 if( lMCstack->IsPhysicalPrimary (lblThisV0Parent) ) fTreeVariablePrimaryStatusMother = 1; //Is Primary!
3043 if( lMCstack->IsSecondaryFromWeakDecay(lblThisV0Parent) ) fTreeVariablePrimaryStatusMother = 2; //Weak Decay!
3044 if( lMCstack->IsSecondaryFromMaterial (lblThisV0Parent) ) fTreeVariablePrimaryStatusMother = 3; //Material Int!
3048 fTreeVariablePt = v0->Pt();
3049 fTreeVariableChi2V0 = lChi2V0;
3050 fTreeVariableDcaV0ToPrimVertex = lDcaV0ToPrimVertex;
3051 fTreeVariableDcaV0Daughters = lDcaV0Daughters;
3052 fTreeVariableV0CosineOfPointingAngle = lV0CosineOfPointingAngle;
3053 fTreeVariableV0Radius = lV0Radius;
3054 fTreeVariableDcaPosToPrimVertex = lDcaPosToPrimVertex;
3055 fTreeVariableDcaNegToPrimVertex = lDcaNegToPrimVertex;
3056 fTreeVariableInvMassK0s = lInvMassK0s;
3057 fTreeVariableInvMassLambda = lInvMassLambda;
3058 fTreeVariableInvMassAntiLambda = lInvMassAntiLambda;
3059 fTreeVariableRapK0Short = lRapK0Short;
3061 fTreeVariableRapLambda = lRapLambda;
3062 fTreeVariableAlphaV0 = lAlphaV0;
3063 fTreeVariablePtArmV0 = lPtArmV0;
3065 if( fkDoNotCallTPCdEdx == kFALSE ){
3066 //Official means of acquiring N-sigmas
3067 fTreeVariableNSigmasPosProton = fPIDResponse->NumberOfSigmasTPC( pTrack, AliPID::kProton );
3068 fTreeVariableNSigmasPosPion = fPIDResponse->NumberOfSigmasTPC( pTrack, AliPID::kPion );
3069 fTreeVariableNSigmasNegProton = fPIDResponse->NumberOfSigmasTPC( nTrack, AliPID::kProton );
3070 fTreeVariableNSigmasNegPion = fPIDResponse->NumberOfSigmasTPC( nTrack, AliPID::kPion );
3072 fTreeVariableNSigmasPosProton = 0;
3073 fTreeVariableNSigmasPosPion = 0;
3074 fTreeVariableNSigmasNegProton = 0;
3075 fTreeVariableNSigmasNegPion = 0;
3078 //tDecayVertexV0[0],tDecayVertexV0[1],tDecayVertexV0[2]
3079 Double_t lDistanceTravelled = TMath::Sqrt(
3080 TMath::Power( tDecayVertexV0[0] - lBestPrimaryVtxPos[0] , 2) +
3081 TMath::Power( tDecayVertexV0[1] - lBestPrimaryVtxPos[1] , 2) +
3082 TMath::Power( tDecayVertexV0[2] - lBestPrimaryVtxPos[2] , 2)
3084 fTreeVariableDistOverTotMom = 1e+5;
3085 if( lV0TotalMomentum + 1e-10 != 0 ) fTreeVariableDistOverTotMom = lDistanceTravelled / (lV0TotalMomentum + 1e-10); //avoid division by zero, to be sure
3087 Double_t lMomentumPosTemp[3];
3088 pTrack->GetPxPyPz(lMomentumPosTemp);
3089 Double_t lPtPosTemporary = sqrt(pow(lMomentumPosTemp[0],2) + pow(lMomentumPosTemp[1],2));
3091 Double_t lMomentumNegTemp[3];
3092 nTrack->GetPxPyPz(lMomentumNegTemp);
3093 Double_t lPtNegTemporary = sqrt(pow(lMomentumNegTemp[0],2) + pow(lMomentumNegTemp[1],2));
3095 fTreeVariablePosTransvMomentum = lPtPosTemporary;
3096 fTreeVariableNegTransvMomentum = lPtNegTemporary;
3099 //------------------------------------------------
3101 //------------------------------------------------
3103 // The conditionals are meant to decrease excessive
3106 //Modified version: Keep only OnFlyStatus == 0
3107 //Keep only if included in a parametric InvMass Region 20 sigmas away from peak
3109 //First Selection: Reject OnFly
3110 if( (lOnFlyStatus == 0 && fkUseOnTheFly == kFALSE) || (lOnFlyStatus != 0 && fkUseOnTheFly == kTRUE ) ){
3111 //Second Selection: rough 20-sigma band, parametric.
3112 //K0Short: Enough to parametrize peak broadening with linear function.
3113 Double_t lUpperLimitK0Short = (5.63707e-01) + (1.14979e-02)*fTreeVariablePt;
3114 Double_t lLowerLimitK0Short = (4.30006e-01) - (1.10029e-02)*fTreeVariablePt;
3115 //Lambda: Linear (for higher pt) plus exponential (for low-pt broadening)
3116 //[0]+[1]*x+[2]*TMath::Exp(-[3]*x)
3117 Double_t lUpperLimitLambda = (1.13688e+00) + (5.27838e-03)*fTreeVariablePt + (8.42220e-02)*TMath::Exp(-(3.80595e+00)*fTreeVariablePt);
3118 Double_t lLowerLimitLambda = (1.09501e+00) - (5.23272e-03)*fTreeVariablePt - (7.52690e-02)*TMath::Exp(-(3.46339e+00)*fTreeVariablePt);
3120 if( (fTreeVariableInvMassLambda < lUpperLimitLambda && fTreeVariableInvMassLambda > lLowerLimitLambda ) ||
3121 (fTreeVariableInvMassAntiLambda < lUpperLimitLambda && fTreeVariableInvMassAntiLambda > lLowerLimitLambda ) ||
3122 (fTreeVariableInvMassK0s < lUpperLimitK0Short && fTreeVariableInvMassK0s > lLowerLimitK0Short ) ){
3123 //Pre-selection in case this is AA...
3124 if( fkIsNuclear == kFALSE && fkSpecialExecution == kFALSE ) fTree->Fill();
3125 if( fkIsNuclear == kTRUE){
3126 //If this is a nuclear collision___________________
3127 // ... pre-filter with daughter eta selection only (not TPC)
3128 if ( TMath::Abs(fTreeVariableNegEta)<0.8 && TMath::Abs(fTreeVariablePosEta)<0.8 && fkSpecialExecution == kFALSE ){
3129 if( !fkSaveAssociatedOnly || (fkSaveAssociatedOnly &&( TMath::Abs(fTreeVariablePID) == 3122 || fTreeVariablePID==310 ) ))fTree->Fill();
3131 }//end nuclear_____________________________________
3134 //Special Execution: hypertriton exploration
3135 if( lOnFlyStatus == 0 && fkSpecialExecution == kTRUE){
3136 if ( TMath::Abs(fTreeVariableNegEta)<0.8 && TMath::Abs(fTreeVariablePosEta)<0.8 ){
3137 if( !fkSaveAssociatedOnly || (fkSaveAssociatedOnly &&( TMath::Abs(fTreeVariablePID) == 1010010030 ) ) ) fTree->Fill();
3141 //------------------------------------------------
3143 //------------------------------------------------
3146 }// This is the end of the V0 loop
3148 //------------------------------------------------
3150 // Post output data.
3151 PostData(1, fListHistV0);
3155 //________________________________________________________________________
3156 void AliAnalysisTaskExtractPerformanceV0::Terminate(Option_t *)
3158 // Draw result to the screen
3159 // Called once at the end of the query
3161 TList *cRetrievedList = 0x0;
3162 cRetrievedList = (TList*)GetOutputData(1);
3163 if(!cRetrievedList){
3164 Printf("ERROR - AliAnalysisTaskExtractV0 : ouput data container list not available\n");
3168 fHistV0MultiplicityForTrigEvt = dynamic_cast<TH1F*> ( cRetrievedList->FindObject("fHistV0MultiplicityForTrigEvt") );
3169 if (!fHistV0MultiplicityForTrigEvt) {
3170 Printf("ERROR - AliAnalysisTaskExtractV0 : fHistV0MultiplicityForTrigEvt not available");
3174 TCanvas *canCheck = new TCanvas("AliAnalysisTaskExtractV0","V0 Multiplicity",10,10,510,510);
3175 canCheck->cd(1)->SetLogy();
3177 fHistV0MultiplicityForTrigEvt->SetMarkerStyle(22);
3178 fHistV0MultiplicityForTrigEvt->DrawCopy("E");
3181 //----------------------------------------------------------------------------
3183 Double_t AliAnalysisTaskExtractPerformanceV0::MyRapidity(Double_t rE, Double_t rPz) const
3185 // Local calculation for rapidity
3186 Double_t ReturnValue = -100;
3187 if( (rE-rPz+1.e-13) != 0 && (rE+rPz) != 0 ){
3188 ReturnValue = 0.5*TMath::Log((rE+rPz)/(rE-rPz+1.e-13));
3193 //________________________________________________________________________
3194 void AliAnalysisTaskExtractPerformanceV0::CheckChargeV0(AliESDv0 *v0)
3196 // This function checks charge of negative and positive daughter tracks.
3197 // If incorrectly defined (onfly vertexer), swaps out.
3198 if( v0->GetParamN()->Charge() > 0 && v0->GetParamP()->Charge() < 0 ){
3199 //V0 daughter track swapping is required! Note: everything is swapped here... P->N, N->P
3200 Long_t lCorrectNidx = v0->GetPindex();
3201 Long_t lCorrectPidx = v0->GetNindex();
3202 Double32_t lCorrectNmom[3];
3203 Double32_t lCorrectPmom[3];
3204 v0->GetPPxPyPz( lCorrectNmom[0], lCorrectNmom[1], lCorrectNmom[2] );
3205 v0->GetNPxPyPz( lCorrectPmom[0], lCorrectPmom[1], lCorrectPmom[2] );
3207 AliExternalTrackParam lCorrectParamN(
3208 v0->GetParamP()->GetX() ,
3209 v0->GetParamP()->GetAlpha() ,
3210 v0->GetParamP()->GetParameter() ,
3211 v0->GetParamP()->GetCovariance()
3213 AliExternalTrackParam lCorrectParamP(
3214 v0->GetParamN()->GetX() ,
3215 v0->GetParamN()->GetAlpha() ,
3216 v0->GetParamN()->GetParameter() ,
3217 v0->GetParamN()->GetCovariance()
3219 lCorrectParamN.SetMostProbablePt( v0->GetParamP()->GetMostProbablePt() );
3220 lCorrectParamP.SetMostProbablePt( v0->GetParamN()->GetMostProbablePt() );
3222 //Get Variables___________________________________________________
3223 Double_t lDcaV0Daughters = v0 -> GetDcaV0Daughters();
3224 Double_t lCosPALocal = v0 -> GetV0CosineOfPointingAngle();
3225 Bool_t lOnFlyStatusLocal = v0 -> GetOnFlyStatus();
3227 //Create Replacement Object_______________________________________
3228 AliESDv0 *v0correct = new AliESDv0(lCorrectParamN,lCorrectNidx,lCorrectParamP,lCorrectPidx);
3229 v0correct->SetDcaV0Daughters ( lDcaV0Daughters );
3230 v0correct->SetV0CosineOfPointingAngle ( lCosPALocal );
3231 v0correct->ChangeMassHypothesis ( kK0Short );
3232 v0correct->SetOnFlyStatus ( lOnFlyStatusLocal );
3234 //Reverse Cluster info..._________________________________________
3235 v0correct->SetClusters( v0->GetClusters( 1 ), v0->GetClusters ( 0 ) );
3238 //Proper cleanup..._______________________________________________
3239 v0correct->Delete();
3242 //Just another cross-check and output_____________________________
3243 if( v0->GetParamN()->Charge() > 0 && v0->GetParamP()->Charge() < 0 ) {
3244 AliWarning("Found Swapped Charges, tried to correct but something FAILED!");
3246 //AliWarning("Found Swapped Charges and fixed.");
3248 //________________________________________________________________
3250 //Don't touch it! ---
3251 //Printf("Ah, nice. Charges are already ordered...");