]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGLF/STRANGENESS/LambdaK0/AliAnalysisTaskExtractPerformanceV0.cxx
Merge branch 'feature-movesplit'
[u/mrichter/AliRoot.git] / PWGLF / STRANGENESS / LambdaK0 / AliAnalysisTaskExtractPerformanceV0.cxx
1 /**************************************************************************
2  * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3  *                                                                        *
4  * Author: The ALICE Off-line Project.                                    *
5  * Contributors are mentioned in the code where appropriate.              *
6  *                                                                        *
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  **************************************************************************/
15
16 // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
17 //
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. 
22 //
23 // --- Adapted to look for lambdas as well, using code from 
24 //        AliAnalysisTaskCheckPerformanceStrange.cxx
25 //
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
33 //   7. Analysis Loops: 
34 //    7a. Fill TH3Fs "PrimAnalysisPt" for control purposes only
35 //    7b. Fill TTree object with V0 information, candidates
36 //
37 //  Please Report Any Bugs! 
38 //
39 //   --- David Dobrigkeit Chinellato
40 //        (david.chinellato@gmail.com)
41 //
42 // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
43
44 class TTree;
45 class TParticle;
46 class TVector3;
47
48 //class AliMCEventHandler;
49 //class AliMCEvent;
50 //class AliStack;
51
52 class AliESDVertex;
53 class AliAODVertex;
54 class AliESDv0;
55 class AliAODv0;
56
57 #include <Riostream.h>
58 #include "TList.h"
59 #include "TH1.h"
60 #include "TH2.h"
61 #include "TH3.h"
62 #include "TFile.h"
63 #include "THnSparse.h"
64 #include "TVector3.h"
65 #include "TCanvas.h"
66 #include "TMath.h"
67 #include "TLegend.h"
68 #include "AliLog.h"
69
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"
81 #include "AliStack.h"
82
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"
95
96 using std::cout;
97 using std::endl;
98
99 ClassImp(AliAnalysisTaskExtractPerformanceV0)
100
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 ),
110   fkFastOnly     ( "" ),
111   fkpAVertexSelection( kFALSE ),
112   fkRunV0Vertexer( kFALSE ),
113   fkRejectPileup ( kTRUE ),
114   fkSpecialExecution ( kFALSE),
115   fkSkipTrigger(kFALSE),
116   fkSaveAssociatedOnly (kFALSE),
117   fkDoNotCallTPCdEdx( kFALSE ),
118   fDiffractiveOnly(kFALSE),
119   fEtaRefMult(0.5),
120 //------------------------------------------------
121 // Tree Variables 
122
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),
133         fTreeVariablePt(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),
149    
150         fTreeVariableNSigmasPosProton(0),
151         fTreeVariableNSigmasPosPion(0),
152         fTreeVariableNSigmasNegProton(0),
153         fTreeVariableNSigmasNegPion(0),
154
155         fTreeVariablePtMother(0),
156         fTreeVariableV0CreationRadius(0),
157   fTreeVariablePID(0),
158   fTreeVariablePIDPositive(0),
159   fTreeVariablePIDNegative(0),
160   fTreeVariablePIDMother(0),
161   fTreeVariableIndexStatus(0),
162   fTreeVariableIndexStatusMother(0),
163
164   fTreeVariableRunNumber(0),
165   fTreeVariableEventNumber(0),
166
167         fTreeVariableDistOverTotMom(0),
168
169         fTreeVariablePosEta(0),
170         fTreeVariableNegEta(0),
171
172         fTreeVariableVertexZ(0),
173
174   fTreeVariableLeastNbrCrossedRows(0),
175   fTreeVariableLeastRatioCrossedRowsOverFindable(0),
176
177   fTreeVariableMultiplicity(0),
178   fTreeVariableMultiplicityV0A(0),
179   fTreeVariableMultiplicityZNA(0),
180   fTreeVariableMultiplicityTRK(0),
181   fTreeVariableMultiplicitySPD(0),
182   fTreeVariableMultiplicityMC(0),
183
184   fTreeVariableV0x(0),
185   fTreeVariableV0y(0),
186   fTreeVariableV0z(0),
187
188   fTreeVariableV0Px(0),
189   fTreeVariableV0Py(0),
190   fTreeVariableV0Pz(0),
191
192   fTreeVariableMCV0x(0),
193   fTreeVariableMCV0y(0),
194   fTreeVariableMCV0z(0),
195
196   fTreeVariableMCV0Px(0),
197   fTreeVariableMCV0Py(0),
198   fTreeVariableMCV0Pz(0),
199
200   fTreeVariablePVx(0),
201   fTreeVariablePVy(0),
202   fTreeVariablePVz(0),
203
204   fTreeVariableMCPVx(0),
205   fTreeVariableMCPVy(0),
206   fTreeVariableMCPVz(0),
207
208   fTreeVariableIsNonInjected(0),
209
210   fTreeVariableNegTrackStatus(0),
211   fTreeVariablePosTrackStatus(0),
212
213   fTreeVariableNegPhysicalStatus(0),
214   fTreeVariablePosPhysicalStatus(0),
215
216   fTreeVariableNegPx(0),
217   fTreeVariableNegPy(0),
218   fTreeVariableNegPz(0),
219   fTreeVariablePosPx(0),
220   fTreeVariablePosPy(0),
221   fTreeVariablePosPz(0),
222
223 //------------------------------------------------
224 // HISTOGRAMS
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),
237
238 //V0A Centrality
239 fHistMultiplicityV0ABeforeTrigSel(0),
240 fHistMultiplicityV0AForTrigEvt(0),
241 fHistMultiplicityV0A(0),
242 fHistMultiplicityV0ANoTPCOnly(0),
243 fHistMultiplicityV0ANoTPCOnlyNoPileup(0),
244
245 //ZNA Centrality
246 fHistMultiplicityZNABeforeTrigSel(0),
247 fHistMultiplicityZNAForTrigEvt(0),
248 fHistMultiplicityZNA(0),
249 fHistMultiplicityZNANoTPCOnly(0),
250 fHistMultiplicityZNANoTPCOnlyNoPileup(0),
251
252 //TRK Centrality
253 fHistMultiplicityTRKBeforeTrigSel(0),
254 fHistMultiplicityTRKForTrigEvt(0),
255 fHistMultiplicityTRK(0),
256 fHistMultiplicityTRKNoTPCOnly(0),
257 fHistMultiplicityTRKNoTPCOnlyNoPileup(0),
258
259 //SPD Centrality
260 fHistMultiplicitySPDBeforeTrigSel(0),
261 fHistMultiplicitySPDForTrigEvt(0),
262 fHistMultiplicitySPD(0),
263 fHistMultiplicitySPDNoTPCOnly(0),
264 fHistMultiplicitySPDNoTPCOnlyNoPileup(0),
265
266         f2dHistMultiplicityVsTrueBeforeTrigSel(0),
267         f2dHistMultiplicityVsTrueForTrigEvt(0),
268         f2dHistMultiplicityVsTrue(0),
269         f2dHistMultiplicityVsTrueNoTPCOnly(0),
270         f2dHistMultiplicityVsTrueNoTPCOnlyNoPileup(0),
271
272   //Raw Data for Vertex Z position estimator change
273         f2dHistMultiplicityVsVertexZBeforeTrigSel(0),
274         f2dHistMultiplicityVsVertexZForTrigEvt(0),
275         f2dHistMultiplicityVsVertexZ(0),
276         f2dHistMultiplicityVsVertexZNoTPCOnly(0),
277         f2dHistMultiplicityVsVertexZNoTPCOnlyNoPileup(0),
278
279   fHistGenVertexZBeforeTrigSel(0),     
280   fHistGenVertexZForTrigEvt(0),
281   fHistGenVertexZ(0),
282   fHistGenVertexZNoTPCOnly(0),
283   fHistGenVertexZNoTPCOnlyNoPileup(0),
284
285 //------------------------------------------------
286 // PARTICLE HISTOGRAMS
287 // --- Filled on a Particle-by-Particle basis
288 //------------------------------------------------
289
290 //Standard V0M / multiplicity
291   f3dHistPrimAnalysisPtVsYVsMultLambda(0),
292   f3dHistPrimAnalysisPtVsYVsMultAntiLambda(0),
293   f3dHistPrimAnalysisPtVsYVsMultK0Short(0),
294   f3dHistPrimAnalysisPtVsYCMSVsMultLambda(0),
295   f3dHistPrimAnalysisPtVsYCMSVsMultAntiLambda(0),
296   f3dHistPrimAnalysisPtVsYCMSVsMultK0Short(0),
297
298   //True Multiplicity
299   f3dHistPrimAnalysisPtVsYVsMultMCLambda(0),
300   f3dHistPrimAnalysisPtVsYVsMultMCAntiLambda(0),
301   f3dHistPrimAnalysisPtVsYVsMultMCK0Short(0),
302   f3dHistPrimAnalysisPtVsYCMSVsMultMCLambda(0),
303   f3dHistPrimAnalysisPtVsYCMSVsMultMCAntiLambda(0),
304   f3dHistPrimAnalysisPtVsYCMSVsMultMCK0Short(0),
305
306 //V0A
307   f3dHistPrimAnalysisPtVsYVsMultV0ALambda(0),
308   f3dHistPrimAnalysisPtVsYVsMultV0AAntiLambda(0),
309   f3dHistPrimAnalysisPtVsYVsMultV0AK0Short(0),
310   f3dHistPrimAnalysisPtVsYCMSVsMultV0ALambda(0),
311   f3dHistPrimAnalysisPtVsYCMSVsMultV0AAntiLambda(0),
312   f3dHistPrimAnalysisPtVsYCMSVsMultV0AK0Short(0),
313
314 //Added for cross-check
315   f3dHistPrimRawPtVsYCMSVsMultV0AKPlus(0),
316   f3dHistPrimRawPtVsYCMSVsMultV0AKMinus(0),
317   f3dHistPrimAnalysisPtVsYCMSVsMultV0AKPlus(0),
318   f3dHistPrimAnalysisPtVsYCMSVsMultV0AKMinus(0),
319
320 //ZNA
321   f3dHistPrimAnalysisPtVsYVsMultZNALambda(0),
322   f3dHistPrimAnalysisPtVsYVsMultZNAAntiLambda(0),
323   f3dHistPrimAnalysisPtVsYVsMultZNAK0Short(0),
324   f3dHistPrimAnalysisPtVsYCMSVsMultZNALambda(0),
325   f3dHistPrimAnalysisPtVsYCMSVsMultZNAAntiLambda(0),
326   f3dHistPrimAnalysisPtVsYCMSVsMultZNAK0Short(0),
327
328 //TRK
329   f3dHistPrimAnalysisPtVsYVsMultTRKLambda(0),
330   f3dHistPrimAnalysisPtVsYVsMultTRKAntiLambda(0),
331   f3dHistPrimAnalysisPtVsYVsMultTRKK0Short(0),
332   f3dHistPrimAnalysisPtVsYCMSVsMultTRKLambda(0),
333   f3dHistPrimAnalysisPtVsYCMSVsMultTRKAntiLambda(0),
334   f3dHistPrimAnalysisPtVsYCMSVsMultTRKK0Short(0),
335
336 //SPD
337   f3dHistPrimAnalysisPtVsYVsMultSPDLambda(0),
338   f3dHistPrimAnalysisPtVsYVsMultSPDAntiLambda(0),
339   f3dHistPrimAnalysisPtVsYVsMultSPDK0Short(0),
340   f3dHistPrimAnalysisPtVsYCMSVsMultSPDLambda(0),
341   f3dHistPrimAnalysisPtVsYCMSVsMultSPDAntiLambda(0),
342   f3dHistPrimAnalysisPtVsYCMSVsMultSPDK0Short(0),
343
344 //Standard V0M again
345   f3dHistPrimRawPtVsYVsMultLambda(0),
346   f3dHistPrimRawPtVsYVsMultAntiLambda(0),
347   f3dHistPrimRawPtVsYVsMultK0Short(0),
348   f3dHistPrimRawPtVsYCMSVsMultLambda(0),
349   f3dHistPrimRawPtVsYCMSVsMultAntiLambda(0),
350   f3dHistPrimRawPtVsYCMSVsMultK0Short(0),
351
352 //V0A again
353   f3dHistPrimRawPtVsYVsMultV0ALambda(0),
354   f3dHistPrimRawPtVsYVsMultV0AAntiLambda(0),
355   f3dHistPrimRawPtVsYVsMultV0AK0Short(0),
356   f3dHistPrimRawPtVsYCMSVsMultV0ALambda(0),
357   f3dHistPrimRawPtVsYCMSVsMultV0AAntiLambda(0),
358   f3dHistPrimRawPtVsYCMSVsMultV0AK0Short(0),
359
360 //ZNA
361   f3dHistPrimRawPtVsYVsMultZNALambda(0),
362   f3dHistPrimRawPtVsYVsMultZNAAntiLambda(0),
363   f3dHistPrimRawPtVsYVsMultZNAK0Short(0),
364   f3dHistPrimRawPtVsYCMSVsMultZNALambda(0),
365   f3dHistPrimRawPtVsYCMSVsMultZNAAntiLambda(0),
366   f3dHistPrimRawPtVsYCMSVsMultZNAK0Short(0),
367
368 //TRK
369   f3dHistPrimRawPtVsYVsMultTRKLambda(0),
370   f3dHistPrimRawPtVsYVsMultTRKAntiLambda(0),
371   f3dHistPrimRawPtVsYVsMultTRKK0Short(0),
372   f3dHistPrimRawPtVsYCMSVsMultTRKLambda(0),
373   f3dHistPrimRawPtVsYCMSVsMultTRKAntiLambda(0),
374   f3dHistPrimRawPtVsYCMSVsMultTRKK0Short(0),
375
376 //SPD
377   f3dHistPrimRawPtVsYVsMultSPDLambda(0),
378   f3dHistPrimRawPtVsYVsMultSPDAntiLambda(0),
379   f3dHistPrimRawPtVsYVsMultSPDK0Short(0),
380   f3dHistPrimRawPtVsYCMSVsMultSPDLambda(0),
381   f3dHistPrimRawPtVsYCMSVsMultSPDAntiLambda(0),
382   f3dHistPrimRawPtVsYCMSVsMultSPDK0Short(0),
383
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),
399
400 //V0M
401   f3dHistGenPtVsYVsMultXiMinus(0),
402   f3dHistGenPtVsYVsMultXiPlus(0),
403   f3dHistGenSelectedPtVsYVsMultXiMinus(0),
404   f3dHistGenSelectedPtVsYVsMultXiPlus(0),
405   f3dHistGenPtVsYCMSVsMultXiMinus(0),
406   f3dHistGenPtVsYCMSVsMultXiPlus(0),
407   f3dHistGenSelectedPtVsYCMSVsMultXiMinus(0),
408   f3dHistGenSelectedPtVsYCMSVsMultXiPlus(0),
409
410 //V0A
411   f3dHistGenPtVsYVsMultV0AXiMinus(0),
412   f3dHistGenPtVsYVsMultV0AXiPlus(0),
413   f3dHistGenSelectedPtVsYVsMultV0AXiMinus(0),
414   f3dHistGenSelectedPtVsYVsMultV0AXiPlus(0),
415   f3dHistGenPtVsYCMSVsMultV0AXiMinus(0),
416   f3dHistGenPtVsYCMSVsMultV0AXiPlus(0),
417   f3dHistGenSelectedPtVsYCMSVsMultV0AXiMinus(0),
418   f3dHistGenSelectedPtVsYCMSVsMultV0AXiPlus(0),
419
420 //ZNA
421   f3dHistGenPtVsYVsMultZNAXiMinus(0),
422   f3dHistGenPtVsYVsMultZNAXiPlus(0),
423   f3dHistGenSelectedPtVsYVsMultZNAXiMinus(0),
424   f3dHistGenSelectedPtVsYVsMultZNAXiPlus(0),
425   f3dHistGenPtVsYCMSVsMultZNAXiMinus(0),
426   f3dHistGenPtVsYCMSVsMultZNAXiPlus(0),
427   f3dHistGenSelectedPtVsYCMSVsMultZNAXiMinus(0),
428   f3dHistGenSelectedPtVsYCMSVsMultZNAXiPlus(0),
429
430 //TRK
431   f3dHistGenPtVsYVsMultTRKXiMinus(0),
432   f3dHistGenPtVsYVsMultTRKXiPlus(0),
433   f3dHistGenSelectedPtVsYVsMultTRKXiMinus(0),
434   f3dHistGenSelectedPtVsYVsMultTRKXiPlus(0),
435   f3dHistGenPtVsYCMSVsMultTRKXiMinus(0),
436   f3dHistGenPtVsYCMSVsMultTRKXiPlus(0),
437   f3dHistGenSelectedPtVsYCMSVsMultTRKXiMinus(0),
438   f3dHistGenSelectedPtVsYCMSVsMultTRKXiPlus(0),
439
440 //SPD
441   f3dHistGenPtVsYVsMultSPDXiMinus(0),
442   f3dHistGenPtVsYVsMultSPDXiPlus(0),
443   f3dHistGenSelectedPtVsYVsMultSPDXiMinus(0),
444   f3dHistGenSelectedPtVsYVsMultSPDXiPlus(0),
445   f3dHistGenPtVsYCMSVsMultSPDXiMinus(0),
446   f3dHistGenPtVsYCMSVsMultSPDXiPlus(0),
447   f3dHistGenSelectedPtVsYCMSVsMultSPDXiMinus(0),
448   f3dHistGenSelectedPtVsYCMSVsMultSPDXiPlus(0),
449
450   fHistPVx(0),
451   fHistPVy(0),
452   fHistPVz(0),
453   fHistPVxAnalysis(0),
454   fHistPVyAnalysis(0),
455   fHistPVzAnalysis(0),
456   fHistPVxAnalysisHasHighPtLambda(0),
457   fHistPVyAnalysisHasHighPtLambda(0),
458   fHistPVzAnalysisHasHighPtLambda(0),
459   fHistSwappedV0Counter(0)
460 {
461   // Dummy Constructor
462   for(Int_t iV0selIdx   = 0; iV0selIdx   < 7; iV0selIdx++   ) { fV0Sels          [iV0selIdx   ] = -1.; }  
463 }
464
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 ),
474   fkFastOnly     ( "" ),
475   fkpAVertexSelection( kFALSE ),
476   fkRunV0Vertexer( kFALSE ),
477   fkRejectPileup ( kTRUE ),
478   fkSpecialExecution ( kFALSE),
479   fkSkipTrigger(kFALSE),
480   fkSaveAssociatedOnly (kFALSE),
481   fkDoNotCallTPCdEdx( kFALSE ),
482   fDiffractiveOnly(kFALSE),
483   fEtaRefMult (0.5),
484 //------------------------------------------------
485 // Tree Variables 
486
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),
497         fTreeVariablePt(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),
513    
514         fTreeVariableNSigmasPosProton(0),
515         fTreeVariableNSigmasPosPion(0),
516         fTreeVariableNSigmasNegProton(0),
517         fTreeVariableNSigmasNegPion(0),
518
519         fTreeVariablePtMother(0),
520         fTreeVariableV0CreationRadius(0),
521   fTreeVariablePID(0),
522   fTreeVariablePIDPositive(0),
523   fTreeVariablePIDNegative(0),
524   fTreeVariablePIDMother(0),
525   fTreeVariableIndexStatus(0),
526   fTreeVariableIndexStatusMother(0),
527
528   fTreeVariableRunNumber(0),
529   fTreeVariableEventNumber(0),
530
531         fTreeVariableDistOverTotMom(0),
532
533         fTreeVariablePosEta(0),
534         fTreeVariableNegEta(0),
535
536         fTreeVariableVertexZ(0),
537
538   fTreeVariableLeastNbrCrossedRows(0),
539   fTreeVariableLeastRatioCrossedRowsOverFindable(0),
540   fTreeVariableMultiplicity(0),
541   fTreeVariableMultiplicityV0A(0),
542   fTreeVariableMultiplicityZNA(0),
543   fTreeVariableMultiplicityTRK(0),
544   fTreeVariableMultiplicitySPD(0),
545   fTreeVariableMultiplicityMC(0),
546
547   fTreeVariableV0x(0),
548   fTreeVariableV0y(0),
549   fTreeVariableV0z(0),
550
551   fTreeVariableV0Px(0),
552   fTreeVariableV0Py(0),
553   fTreeVariableV0Pz(0),
554
555   fTreeVariableMCV0x(0),
556   fTreeVariableMCV0y(0),
557   fTreeVariableMCV0z(0),
558
559   fTreeVariableMCV0Px(0),
560   fTreeVariableMCV0Py(0),
561   fTreeVariableMCV0Pz(0),
562
563   fTreeVariablePVx(0),
564   fTreeVariablePVy(0),
565   fTreeVariablePVz(0),
566
567   fTreeVariableMCPVx(0),
568   fTreeVariableMCPVy(0),
569   fTreeVariableMCPVz(0),
570
571   fTreeVariableIsNonInjected(0),
572
573   fTreeVariableNegTrackStatus(0),
574   fTreeVariablePosTrackStatus(0),
575
576   fTreeVariableNegPhysicalStatus(0),
577   fTreeVariablePosPhysicalStatus(0),
578
579   fTreeVariableNegPx(0),
580   fTreeVariableNegPy(0),
581   fTreeVariableNegPz(0),
582   fTreeVariablePosPx(0),
583   fTreeVariablePosPy(0),
584   fTreeVariablePosPz(0),
585
586 //------------------------------------------------
587 // HISTOGRAMS
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),
600
601 //V0A Centrality
602 fHistMultiplicityV0ABeforeTrigSel(0),
603 fHistMultiplicityV0AForTrigEvt(0),
604 fHistMultiplicityV0A(0),
605 fHistMultiplicityV0ANoTPCOnly(0),
606 fHistMultiplicityV0ANoTPCOnlyNoPileup(0),
607
608 //ZNA Centrality
609 fHistMultiplicityZNABeforeTrigSel(0),
610 fHistMultiplicityZNAForTrigEvt(0),
611 fHistMultiplicityZNA(0),
612 fHistMultiplicityZNANoTPCOnly(0),
613 fHistMultiplicityZNANoTPCOnlyNoPileup(0),
614
615 //TRK Centrality
616 fHistMultiplicityTRKBeforeTrigSel(0),
617 fHistMultiplicityTRKForTrigEvt(0),
618 fHistMultiplicityTRK(0),
619 fHistMultiplicityTRKNoTPCOnly(0),
620 fHistMultiplicityTRKNoTPCOnlyNoPileup(0),
621
622 //SPD Centrality
623 fHistMultiplicitySPDBeforeTrigSel(0),
624 fHistMultiplicitySPDForTrigEvt(0),
625 fHistMultiplicitySPD(0),
626 fHistMultiplicitySPDNoTPCOnly(0),
627 fHistMultiplicitySPDNoTPCOnlyNoPileup(0),
628
629         f2dHistMultiplicityVsTrueBeforeTrigSel(0),
630         f2dHistMultiplicityVsTrueForTrigEvt(0),
631         f2dHistMultiplicityVsTrue(0),
632         f2dHistMultiplicityVsTrueNoTPCOnly(0),
633         f2dHistMultiplicityVsTrueNoTPCOnlyNoPileup(0),
634
635   //Raw Data for Vertex Z position estimator change
636         f2dHistMultiplicityVsVertexZBeforeTrigSel(0),
637         f2dHistMultiplicityVsVertexZForTrigEvt(0),
638         f2dHistMultiplicityVsVertexZ(0),
639         f2dHistMultiplicityVsVertexZNoTPCOnly(0),
640         f2dHistMultiplicityVsVertexZNoTPCOnlyNoPileup(0),
641
642   fHistGenVertexZBeforeTrigSel(0),     
643   fHistGenVertexZForTrigEvt(0),
644   fHistGenVertexZ(0),
645   fHistGenVertexZNoTPCOnly(0),
646   fHistGenVertexZNoTPCOnlyNoPileup(0),
647
648 //------------------------------------------------
649 // PARTICLE HISTOGRAMS
650 // --- Filled on a Particle-by-Particle basis
651 //------------------------------------------------
652
653 //Standard V0M
654 f3dHistPrimAnalysisPtVsYVsMultLambda(0),
655 f3dHistPrimAnalysisPtVsYVsMultAntiLambda(0),
656 f3dHistPrimAnalysisPtVsYVsMultK0Short(0),
657 f3dHistPrimAnalysisPtVsYCMSVsMultLambda(0),
658 f3dHistPrimAnalysisPtVsYCMSVsMultAntiLambda(0),
659 f3dHistPrimAnalysisPtVsYCMSVsMultK0Short(0),
660
661 //True Multiplicity
662 f3dHistPrimAnalysisPtVsYVsMultMCLambda(0),
663 f3dHistPrimAnalysisPtVsYVsMultMCAntiLambda(0),
664 f3dHistPrimAnalysisPtVsYVsMultMCK0Short(0),
665 f3dHistPrimAnalysisPtVsYCMSVsMultMCLambda(0),
666 f3dHistPrimAnalysisPtVsYCMSVsMultMCAntiLambda(0),
667 f3dHistPrimAnalysisPtVsYCMSVsMultMCK0Short(0),
668
669 //V0A
670 f3dHistPrimAnalysisPtVsYVsMultV0ALambda(0),
671 f3dHistPrimAnalysisPtVsYVsMultV0AAntiLambda(0),
672 f3dHistPrimAnalysisPtVsYVsMultV0AK0Short(0),
673 f3dHistPrimAnalysisPtVsYCMSVsMultV0ALambda(0),
674 f3dHistPrimAnalysisPtVsYCMSVsMultV0AAntiLambda(0),
675 f3dHistPrimAnalysisPtVsYCMSVsMultV0AK0Short(0),
676
677 //Added for cross-check
678   f3dHistPrimRawPtVsYCMSVsMultV0AKPlus(0),
679   f3dHistPrimRawPtVsYCMSVsMultV0AKMinus(0),
680   f3dHistPrimAnalysisPtVsYCMSVsMultV0AKPlus(0),
681   f3dHistPrimAnalysisPtVsYCMSVsMultV0AKMinus(0),
682
683 //ZNA
684 f3dHistPrimAnalysisPtVsYVsMultZNALambda(0),
685 f3dHistPrimAnalysisPtVsYVsMultZNAAntiLambda(0),
686 f3dHistPrimAnalysisPtVsYVsMultZNAK0Short(0),
687 f3dHistPrimAnalysisPtVsYCMSVsMultZNALambda(0),
688 f3dHistPrimAnalysisPtVsYCMSVsMultZNAAntiLambda(0),
689 f3dHistPrimAnalysisPtVsYCMSVsMultZNAK0Short(0),
690
691 //TRK
692 f3dHistPrimAnalysisPtVsYVsMultTRKLambda(0),
693 f3dHistPrimAnalysisPtVsYVsMultTRKAntiLambda(0),
694 f3dHistPrimAnalysisPtVsYVsMultTRKK0Short(0),
695 f3dHistPrimAnalysisPtVsYCMSVsMultTRKLambda(0),
696 f3dHistPrimAnalysisPtVsYCMSVsMultTRKAntiLambda(0),
697 f3dHistPrimAnalysisPtVsYCMSVsMultTRKK0Short(0),
698
699 //SPD
700 f3dHistPrimAnalysisPtVsYVsMultSPDLambda(0),
701 f3dHistPrimAnalysisPtVsYVsMultSPDAntiLambda(0),
702 f3dHistPrimAnalysisPtVsYVsMultSPDK0Short(0),
703 f3dHistPrimAnalysisPtVsYCMSVsMultSPDLambda(0),
704 f3dHistPrimAnalysisPtVsYCMSVsMultSPDAntiLambda(0),
705 f3dHistPrimAnalysisPtVsYCMSVsMultSPDK0Short(0),
706
707 //Standard V0M again
708 f3dHistPrimRawPtVsYVsMultLambda(0),
709 f3dHistPrimRawPtVsYVsMultAntiLambda(0),
710 f3dHistPrimRawPtVsYVsMultK0Short(0),
711 f3dHistPrimRawPtVsYCMSVsMultLambda(0),
712 f3dHistPrimRawPtVsYCMSVsMultAntiLambda(0),
713 f3dHistPrimRawPtVsYCMSVsMultK0Short(0),
714
715 //V0A again
716 f3dHistPrimRawPtVsYVsMultV0ALambda(0),
717 f3dHistPrimRawPtVsYVsMultV0AAntiLambda(0),
718 f3dHistPrimRawPtVsYVsMultV0AK0Short(0),
719 f3dHistPrimRawPtVsYCMSVsMultV0ALambda(0),
720 f3dHistPrimRawPtVsYCMSVsMultV0AAntiLambda(0),
721 f3dHistPrimRawPtVsYCMSVsMultV0AK0Short(0),
722
723 //ZNA
724 f3dHistPrimRawPtVsYVsMultZNALambda(0),
725 f3dHistPrimRawPtVsYVsMultZNAAntiLambda(0),
726 f3dHistPrimRawPtVsYVsMultZNAK0Short(0),
727 f3dHistPrimRawPtVsYCMSVsMultZNALambda(0),
728 f3dHistPrimRawPtVsYCMSVsMultZNAAntiLambda(0),
729 f3dHistPrimRawPtVsYCMSVsMultZNAK0Short(0),
730
731 //TRK
732 f3dHistPrimRawPtVsYVsMultTRKLambda(0),
733 f3dHistPrimRawPtVsYVsMultTRKAntiLambda(0),
734 f3dHistPrimRawPtVsYVsMultTRKK0Short(0),
735 f3dHistPrimRawPtVsYCMSVsMultTRKLambda(0),
736 f3dHistPrimRawPtVsYCMSVsMultTRKAntiLambda(0),
737 f3dHistPrimRawPtVsYCMSVsMultTRKK0Short(0),
738
739 //SPD
740 f3dHistPrimRawPtVsYVsMultSPDLambda(0),
741 f3dHistPrimRawPtVsYVsMultSPDAntiLambda(0),
742 f3dHistPrimRawPtVsYVsMultSPDK0Short(0),
743 f3dHistPrimRawPtVsYCMSVsMultSPDLambda(0),
744 f3dHistPrimRawPtVsYCMSVsMultSPDAntiLambda(0),
745 f3dHistPrimRawPtVsYCMSVsMultSPDK0Short(0),
746
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),
762
763 //V0M
764 f3dHistGenPtVsYVsMultXiMinus(0),
765 f3dHistGenPtVsYVsMultXiPlus(0),
766 f3dHistGenSelectedPtVsYVsMultXiMinus(0),
767 f3dHistGenSelectedPtVsYVsMultXiPlus(0),
768 f3dHistGenPtVsYCMSVsMultXiMinus(0),
769 f3dHistGenPtVsYCMSVsMultXiPlus(0),
770 f3dHistGenSelectedPtVsYCMSVsMultXiMinus(0),
771 f3dHistGenSelectedPtVsYCMSVsMultXiPlus(0),
772
773 //V0A
774 f3dHistGenPtVsYVsMultV0AXiMinus(0),
775 f3dHistGenPtVsYVsMultV0AXiPlus(0),
776 f3dHistGenSelectedPtVsYVsMultV0AXiMinus(0),
777 f3dHistGenSelectedPtVsYVsMultV0AXiPlus(0),
778 f3dHistGenPtVsYCMSVsMultV0AXiMinus(0),
779 f3dHistGenPtVsYCMSVsMultV0AXiPlus(0),
780 f3dHistGenSelectedPtVsYCMSVsMultV0AXiMinus(0),
781 f3dHistGenSelectedPtVsYCMSVsMultV0AXiPlus(0),
782
783 //ZNA
784 f3dHistGenPtVsYVsMultZNAXiMinus(0),
785 f3dHistGenPtVsYVsMultZNAXiPlus(0),
786 f3dHistGenSelectedPtVsYVsMultZNAXiMinus(0),
787 f3dHistGenSelectedPtVsYVsMultZNAXiPlus(0),
788 f3dHistGenPtVsYCMSVsMultZNAXiMinus(0),
789 f3dHistGenPtVsYCMSVsMultZNAXiPlus(0),
790 f3dHistGenSelectedPtVsYCMSVsMultZNAXiMinus(0),
791 f3dHistGenSelectedPtVsYCMSVsMultZNAXiPlus(0),
792
793 //TRK
794 f3dHistGenPtVsYVsMultTRKXiMinus(0),
795 f3dHistGenPtVsYVsMultTRKXiPlus(0),
796 f3dHistGenSelectedPtVsYVsMultTRKXiMinus(0),
797 f3dHistGenSelectedPtVsYVsMultTRKXiPlus(0),
798 f3dHistGenPtVsYCMSVsMultTRKXiMinus(0),
799 f3dHistGenPtVsYCMSVsMultTRKXiPlus(0),
800 f3dHistGenSelectedPtVsYCMSVsMultTRKXiMinus(0),
801 f3dHistGenSelectedPtVsYCMSVsMultTRKXiPlus(0),
802
803 //SPD
804 f3dHistGenPtVsYVsMultSPDXiMinus(0),
805 f3dHistGenPtVsYVsMultSPDXiPlus(0),
806 f3dHistGenSelectedPtVsYVsMultSPDXiMinus(0),
807 f3dHistGenSelectedPtVsYVsMultSPDXiPlus(0),
808 f3dHistGenPtVsYCMSVsMultSPDXiMinus(0),
809 f3dHistGenPtVsYCMSVsMultSPDXiPlus(0),
810 f3dHistGenSelectedPtVsYCMSVsMultSPDXiMinus(0),
811 f3dHistGenSelectedPtVsYCMSVsMultSPDXiPlus(0),
812
813    fHistPVx(0),
814    fHistPVy(0),
815    fHistPVz(0),
816    fHistPVxAnalysis(0),
817    fHistPVyAnalysis(0),
818    fHistPVzAnalysis(0),
819    fHistPVxAnalysisHasHighPtLambda(0),
820    fHistPVyAnalysisHasHighPtLambda(0),
821    fHistPVzAnalysisHasHighPtLambda(0),
822    fHistSwappedV0Counter(0)
823 {
824    // Constructor
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());
837 }
838
839
840 AliAnalysisTaskExtractPerformanceV0::~AliAnalysisTaskExtractPerformanceV0()
841 {
842 //------------------------------------------------
843 // DESTRUCTOR
844 //------------------------------------------------
845
846    if (fListHistV0){
847       delete fListHistV0;
848       fListHistV0 = 0x0;
849    }
850    if (fTree){
851       delete fTree;
852       fTree = 0x0;
853    }
854     //cleanup esd track cuts object too...
855    if (fESDtrackCuts){
856     delete fESDtrackCuts;
857     fESDtrackCuts = 0x0; 
858   }
859   
860   if (fUtils){
861     delete fUtils;
862     fUtils = 0x0;
863   }
864 }
865
866 //________________________________________________________________________
867 void AliAnalysisTaskExtractPerformanceV0::UserCreateOutputObjects()
868 {
869
870    OpenFile(2); 
871    // Called once
872
873 //------------------------------------------------
874
875    fTree = new TTree("fTree","V0Candidates");
876
877 //------------------------------------------------
878 // fTree Branch definitions - V0 Tree
879 //------------------------------------------------
880
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),
913
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");
931   
932     if ( fkLightWeight == kFALSE ){ // these are debugging branches!
933 /*37*/   fTree->Branch("fTreeVariableIndexStatus",&fTreeVariableIndexStatus,"fTreeVariableIndexStatus/I");
934 /*38*/   fTree->Branch("fTreeVariableIndexStatusMother",&fTreeVariableIndexStatusMother,"fTreeVariableIndexStatusMother/I");
935     }
936
937 /*39*/   fTree->Branch("fTreeVariableRunNumber",&fTreeVariableRunNumber,"fTreeVariableRunNumber/I");
938 /*40*/   fTree->Branch("fTreeVariableEventNumber",&fTreeVariableEventNumber,"fTreeVariableEventNumber/l");
939
940     if ( fkLightWeight == kFALSE ){ // these are debugging branches!
941 /*34*/   fTree->Branch("fTreeVariableVertexZ",&fTreeVariableVertexZ,"fTreeVariableVertexZ/F");
942     }
943       
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");
949
950         fTree->Branch("fTreeVariableV0Px",&fTreeVariableV0Px,"fTreeVariableV0Px/F");
951         fTree->Branch("fTreeVariableV0Py",&fTreeVariableV0Py,"fTreeVariableV0Py/F");
952         fTree->Branch("fTreeVariableV0Pz",&fTreeVariableV0Pz,"fTreeVariableV0Pz/F");
953
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");
958
959         fTree->Branch("fTreeVariableMCV0Px",&fTreeVariableMCV0Px,"fTreeVariableMCV0Px/F");
960         fTree->Branch("fTreeVariableMCV0Py",&fTreeVariableMCV0Py,"fTreeVariableMCV0Py/F");
961         fTree->Branch("fTreeVariableMCV0Pz",&fTreeVariableMCV0Pz,"fTreeVariableMCV0Pz/F");
962
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");
967
968         fTree->Branch("fTreeVariableMCPVx",&fTreeVariableMCPVx,"fTreeVariableMCPVx/F");
969         fTree->Branch("fTreeVariableMCPVy",&fTreeVariableMCPVy,"fTreeVariableMCPVy/F");
970         fTree->Branch("fTreeVariableMCPVz",&fTreeVariableMCPVz,"fTreeVariableMCPVz/F");
971     }
972
973         fTree->Branch("fTreeVariableIsNonInjected",&fTreeVariableIsNonInjected,"fTreeVariableIsNonInjected/O"); //O for bOOlean...
974   
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");
980   }
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");
988   }
989   
990 //------------------------------------------------
991 // Particle Identification Setup
992 //------------------------------------------------
993   
994   AliAnalysisManager *man=AliAnalysisManager::GetAnalysisManager();
995   AliInputEventHandler* inputHandler = (AliInputEventHandler*) (man->GetInputEventHandler());
996   fPIDResponse = inputHandler->GetPIDResponse();
997   
998   // Multiplicity
999   
1000   if(! fESDtrackCuts ){
1001     fESDtrackCuts = new AliESDtrackCuts();
1002   }
1003   if(! fUtils ){
1004     fUtils = new AliAnalysisUtils();
1005   }
1006
1007 //------------------------------------------------
1008 // V0 Multiplicity Histograms
1009 //------------------------------------------------
1010
1011    // Create histograms
1012    OpenFile(1);
1013    fListHistV0 = new TList();
1014    fListHistV0->SetOwner();  // See http://root.cern.ch/root/html/TCollection.html#TCollection:SetOwner
1015
1016
1017    if(! fHistV0MultiplicityBeforeTrigSel) {
1018       fHistV0MultiplicityBeforeTrigSel = new TH1F("fHistV0MultiplicityBeforeTrigSel", 
1019          "V0s per event (before Trig. Sel.);Nbr of V0s/Evt;Events", 
1020          25, 0, 25);
1021       fListHistV0->Add(fHistV0MultiplicityBeforeTrigSel);
1022    }
1023            
1024    if(! fHistV0MultiplicityForTrigEvt) {
1025       fHistV0MultiplicityForTrigEvt = new TH1F("fHistV0MultiplicityForTrigEvt", 
1026          "V0s per event (for triggered evt);Nbr of V0s/Evt;Events", 
1027          25, 0, 25);
1028       fListHistV0->Add(fHistV0MultiplicityForTrigEvt);
1029    }
1030
1031    if(! fHistV0MultiplicityForSelEvt) {
1032       fHistV0MultiplicityForSelEvt = new TH1F("fHistV0MultiplicityForSelEvt", 
1033          "V0s per event;Nbr of V0s/Evt;Events", 
1034          25, 0, 25);
1035       fListHistV0->Add(fHistV0MultiplicityForSelEvt);
1036    }
1037
1038    if(! fHistV0MultiplicityForSelEvtNoTPCOnly) {
1039       fHistV0MultiplicityForSelEvtNoTPCOnly = new TH1F("fHistV0MultiplicityForSelEvtNoTPCOnly", 
1040          "V0s per event;Nbr of V0s/Evt;Events", 
1041          25, 0, 25);
1042       fListHistV0->Add(fHistV0MultiplicityForSelEvtNoTPCOnly);
1043    }
1044    if(! fHistV0MultiplicityForSelEvtNoTPCOnlyNoPileup) {
1045       fHistV0MultiplicityForSelEvtNoTPCOnlyNoPileup = new TH1F("fHistV0MultiplicityForSelEvtNoTPCOnlyNoPileup", 
1046          "V0s per event;Nbr of V0s/Evt;Events", 
1047          25, 0, 25);
1048       fListHistV0->Add(fHistV0MultiplicityForSelEvtNoTPCOnlyNoPileup);
1049    }
1050
1051 //------------------------------------------------
1052 // Track Multiplicity Histograms
1053 //------------------------------------------------
1054
1055    if(! fHistMultiplicityBeforeTrigSel) {
1056       fHistMultiplicityBeforeTrigSel = new TH1F("fHistMultiplicityBeforeTrigSel", 
1057          "Tracks per event;Nbr of Tracks;Events", 
1058          200, 0, 200);          
1059       fListHistV0->Add(fHistMultiplicityBeforeTrigSel);
1060    }
1061    if(! fHistMultiplicityForTrigEvt) {
1062       fHistMultiplicityForTrigEvt = new TH1F("fHistMultiplicityForTrigEvt", 
1063          "Tracks per event;Nbr of Tracks;Events", 
1064          200, 0, 200);          
1065       fListHistV0->Add(fHistMultiplicityForTrigEvt);
1066    }
1067    if(! fHistMultiplicity) {
1068       fHistMultiplicity = new TH1F("fHistMultiplicity", 
1069          "Tracks per event;Nbr of Tracks;Events", 
1070          200, 0, 200);          
1071       fListHistV0->Add(fHistMultiplicity);
1072    }
1073    if(! fHistMultiplicityNoTPCOnly) {
1074       fHistMultiplicityNoTPCOnly = new TH1F("fHistMultiplicityNoTPCOnly", 
1075          "Tracks per event;Nbr of Tracks;Events", 
1076          200, 0, 200);          
1077       fListHistV0->Add(fHistMultiplicityNoTPCOnly);
1078    }
1079    if(! fHistMultiplicityNoTPCOnlyNoPileup) {
1080       fHistMultiplicityNoTPCOnlyNoPileup = new TH1F("fHistMultiplicityNoTPCOnlyNoPileup", 
1081          "Tracks per event;Nbr of Tracks;Events", 
1082          200, 0, 200);          
1083       fListHistV0->Add(fHistMultiplicityNoTPCOnlyNoPileup);
1084    }
1085   
1086   //V0A Centrality (if PbPb / pPb)
1087   if(! fHistMultiplicityV0ABeforeTrigSel) {
1088     fHistMultiplicityV0ABeforeTrigSel = new TH1F("fHistMultiplicityV0ABeforeTrigSel",
1089                                                  "Centrality Distribution: V0A;V0A Centrality;Events",
1090                                                  200, 0, 200);
1091     fListHistV0->Add(fHistMultiplicityV0ABeforeTrigSel);
1092   }
1093   if(! fHistMultiplicityV0AForTrigEvt) {
1094     fHistMultiplicityV0AForTrigEvt = new TH1F("fHistMultiplicityV0AForTrigEvt",
1095                                               "Centrality Distribution: V0A;V0A Centrality;Events",
1096                                               200, 0, 200);
1097     fListHistV0->Add(fHistMultiplicityV0AForTrigEvt);
1098   }
1099   if(! fHistMultiplicityV0A) {
1100     fHistMultiplicityV0A = new TH1F("fHistMultiplicityV0A",
1101                                     "Centrality Distribution: V0A;V0A Centrality;Events",
1102                                     200, 0, 200);
1103     fListHistV0->Add(fHistMultiplicityV0A);
1104   }
1105   if(! fHistMultiplicityV0ANoTPCOnly) {
1106     fHistMultiplicityV0ANoTPCOnly = new TH1F("fHistMultiplicityV0ANoTPCOnly",
1107                                              "Centrality Distribution: V0A;V0A Centrality;Events",
1108                                              200, 0, 200);
1109     fListHistV0->Add(fHistMultiplicityV0ANoTPCOnly);
1110   }
1111   if(! fHistMultiplicityV0ANoTPCOnlyNoPileup) {
1112     fHistMultiplicityV0ANoTPCOnlyNoPileup = new TH1F("fHistMultiplicityV0ANoTPCOnlyNoPileup",
1113                                                      "Centrality Distribution: V0A;V0A Centrality;Events",
1114                                                      200, 0, 200);
1115     fListHistV0->Add(fHistMultiplicityV0ANoTPCOnlyNoPileup);
1116   }
1117   
1118   //ZNA Centrality (if PbPb / pPb)
1119   if(! fHistMultiplicityZNABeforeTrigSel) {
1120     fHistMultiplicityZNABeforeTrigSel = new TH1F("fHistMultiplicityZNABeforeTrigSel",
1121                                                  "Centrality Distribution: ZNA;ZNA Centrality;Events",
1122                                                  200, 0, 200);
1123     fListHistV0->Add(fHistMultiplicityZNABeforeTrigSel);
1124   }
1125   if(! fHistMultiplicityZNAForTrigEvt) {
1126     fHistMultiplicityZNAForTrigEvt = new TH1F("fHistMultiplicityZNAForTrigEvt",
1127                                               "Centrality Distribution: ZNA;ZNA Centrality;Events",
1128                                               200, 0, 200);
1129     fListHistV0->Add(fHistMultiplicityZNAForTrigEvt);
1130   }
1131   if(! fHistMultiplicityZNA) {
1132     fHistMultiplicityZNA = new TH1F("fHistMultiplicityZNA",
1133                                     "Centrality Distribution: ZNA;ZNA Centrality;Events",
1134                                     200, 0, 200);
1135     fListHistV0->Add(fHistMultiplicityZNA);
1136   }
1137   if(! fHistMultiplicityZNANoTPCOnly) {
1138     fHistMultiplicityZNANoTPCOnly = new TH1F("fHistMultiplicityZNANoTPCOnly",
1139                                              "Centrality Distribution: ZNA;ZNA Centrality;Events",
1140                                              200, 0, 200);
1141     fListHistV0->Add(fHistMultiplicityZNANoTPCOnly);
1142   }
1143   if(! fHistMultiplicityZNANoTPCOnlyNoPileup) {
1144     fHistMultiplicityZNANoTPCOnlyNoPileup = new TH1F("fHistMultiplicityZNANoTPCOnlyNoPileup",
1145                                                      "Centrality Distribution: ZNA;ZNA Centrality;Events",
1146                                                      200, 0, 200);
1147     fListHistV0->Add(fHistMultiplicityZNANoTPCOnlyNoPileup);
1148   }
1149   
1150   //TRK Centrality (if PbPb / pPb)
1151   if(! fHistMultiplicityTRKBeforeTrigSel) {
1152     fHistMultiplicityTRKBeforeTrigSel = new TH1F("fHistMultiplicityTRKBeforeTrigSel",
1153                                                  "Centrality Distribution: TRK;TRK Centrality;Events",
1154                                                  200, 0, 200);
1155     fListHistV0->Add(fHistMultiplicityTRKBeforeTrigSel);
1156   }
1157   if(! fHistMultiplicityTRKForTrigEvt) {
1158     fHistMultiplicityTRKForTrigEvt = new TH1F("fHistMultiplicityTRKForTrigEvt",
1159                                               "Centrality Distribution: TRK;TRK Centrality;Events",
1160                                               200, 0, 200);
1161     fListHistV0->Add(fHistMultiplicityTRKForTrigEvt);
1162   }
1163   if(! fHistMultiplicityTRK) {
1164     fHistMultiplicityTRK = new TH1F("fHistMultiplicityTRK",
1165                                     "Centrality Distribution: TRK;TRK Centrality;Events",
1166                                     200, 0, 200);
1167     fListHistV0->Add(fHistMultiplicityTRK);
1168   }
1169   if(! fHistMultiplicityTRKNoTPCOnly) {
1170     fHistMultiplicityTRKNoTPCOnly = new TH1F("fHistMultiplicityTRKNoTPCOnly",
1171                                              "Centrality Distribution: TRK;TRK Centrality;Events",
1172                                              200, 0, 200);
1173     fListHistV0->Add(fHistMultiplicityTRKNoTPCOnly);
1174   }
1175   if(! fHistMultiplicityTRKNoTPCOnlyNoPileup) {
1176     fHistMultiplicityTRKNoTPCOnlyNoPileup = new TH1F("fHistMultiplicityTRKNoTPCOnlyNoPileup",
1177                                                      "Centrality Distribution: TRK;TRK Centrality;Events",
1178                                                      200, 0, 200);
1179     fListHistV0->Add(fHistMultiplicityTRKNoTPCOnlyNoPileup);
1180   }
1181   
1182   //SPD Centrality (if PbPb / pPb)
1183   if(! fHistMultiplicitySPDBeforeTrigSel) {
1184     fHistMultiplicitySPDBeforeTrigSel = new TH1F("fHistMultiplicitySPDBeforeTrigSel",
1185                                                  "Centrality Distribution: SPD;SPD Centrality;Events",
1186                                                  200, 0, 200);
1187     fListHistV0->Add(fHistMultiplicitySPDBeforeTrigSel);
1188   }
1189   if(! fHistMultiplicitySPDForTrigEvt) {
1190     fHistMultiplicitySPDForTrigEvt = new TH1F("fHistMultiplicitySPDForTrigEvt",
1191                                               "Centrality Distribution: SPD;SPD Centrality;Events",
1192                                               200, 0, 200);
1193     fListHistV0->Add(fHistMultiplicitySPDForTrigEvt);
1194   }
1195   if(! fHistMultiplicitySPD) {
1196     fHistMultiplicitySPD = new TH1F("fHistMultiplicitySPD",
1197                                     "Centrality Distribution: SPD;SPD Centrality;Events",
1198                                     200, 0, 200);
1199     fListHistV0->Add(fHistMultiplicitySPD);
1200   }
1201   if(! fHistMultiplicitySPDNoTPCOnly) {
1202     fHistMultiplicitySPDNoTPCOnly = new TH1F("fHistMultiplicitySPDNoTPCOnly",
1203                                              "Centrality Distribution: SPD;SPD Centrality;Events",
1204                                              200, 0, 200);
1205     fListHistV0->Add(fHistMultiplicitySPDNoTPCOnly);
1206   }
1207   if(! fHistMultiplicitySPDNoTPCOnlyNoPileup) {
1208     fHistMultiplicitySPDNoTPCOnlyNoPileup = new TH1F("fHistMultiplicitySPDNoTPCOnlyNoPileup",
1209                                                      "Centrality Distribution: SPD;SPD Centrality;Events",
1210                                                      200, 0, 200);
1211     fListHistV0->Add(fHistMultiplicitySPDNoTPCOnlyNoPileup);
1212   }
1213   
1214
1215   
1216
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
1223
1224    if(! f2dHistMultiplicityVsTrueBeforeTrigSel) {
1225       f2dHistMultiplicityVsTrueBeforeTrigSel = new TH2F("f2dHistMultiplicityVsTrueBeforeTrigSel", 
1226          "Tracks per event", 200, 0, 200, 200, 0, 200);                 
1227       fListHistV0->Add(f2dHistMultiplicityVsTrueBeforeTrigSel);
1228    }
1229    if(! f2dHistMultiplicityVsTrueForTrigEvt) {
1230       f2dHistMultiplicityVsTrueForTrigEvt = new TH2F("f2dHistMultiplicityVsTrueForTrigEvt", 
1231          "Tracks per event", 200, 0, 200, 200, 0, 200);                 
1232       fListHistV0->Add(f2dHistMultiplicityVsTrueForTrigEvt);
1233    }
1234    if(! f2dHistMultiplicityVsTrue) {
1235       f2dHistMultiplicityVsTrue = new TH2F("f2dHistMultiplicityVsTrue", 
1236          "Tracks per event", 200, 0, 200, 200, 0, 200);                 
1237       fListHistV0->Add(f2dHistMultiplicityVsTrue);
1238    }
1239    if(! f2dHistMultiplicityVsTrueNoTPCOnly) {
1240       f2dHistMultiplicityVsTrueNoTPCOnly = new TH2F("f2dHistMultiplicityVsTrueNoTPCOnly", 
1241          "Tracks per event", 200, 0, 200, 200, 0, 200);                 
1242       fListHistV0->Add(f2dHistMultiplicityVsTrueNoTPCOnly);
1243    }
1244    if(! f2dHistMultiplicityVsTrueNoTPCOnlyNoPileup) {
1245       f2dHistMultiplicityVsTrueNoTPCOnlyNoPileup = new TH2F("f2dHistMultiplicityVsTrueNoTPCOnlyNoPileup", 
1246          "Tracks per event", 200, 0, 200, 200, 0, 200);                 
1247       fListHistV0->Add(f2dHistMultiplicityVsTrueNoTPCOnlyNoPileup);
1248    }
1249
1250
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
1257
1258    if(! f2dHistMultiplicityVsVertexZBeforeTrigSel) {
1259       f2dHistMultiplicityVsVertexZBeforeTrigSel = new TH2F("f2dHistMultiplicityVsVertexZBeforeTrigSel", 
1260          "Tracks per event", 200, 0, 200,400, -20, 20);                 
1261       fListHistV0->Add(f2dHistMultiplicityVsVertexZBeforeTrigSel);
1262    }
1263    if(! f2dHistMultiplicityVsVertexZForTrigEvt) {
1264       f2dHistMultiplicityVsVertexZForTrigEvt = new TH2F("f2dHistMultiplicityVsVertexZForTrigEvt", 
1265          "Tracks per event", 200, 0, 200, 400, -20, 20);                
1266       fListHistV0->Add(f2dHistMultiplicityVsVertexZForTrigEvt);
1267    }
1268    if(! f2dHistMultiplicityVsVertexZ) {
1269       f2dHistMultiplicityVsVertexZ = new TH2F("f2dHistMultiplicityVsVertexZ", 
1270          "Tracks per event", 200, 0, 200, 400, -20, 20);                
1271       fListHistV0->Add(f2dHistMultiplicityVsVertexZ);
1272    }
1273    if(! f2dHistMultiplicityVsVertexZNoTPCOnly) {
1274       f2dHistMultiplicityVsVertexZNoTPCOnly = new TH2F("f2dHistMultiplicityVsVertexZNoTPCOnly", 
1275          "Tracks per event", 200, 0, 200, 400, -20, 20);                
1276       fListHistV0->Add(f2dHistMultiplicityVsVertexZNoTPCOnly);
1277    }
1278    if(! f2dHistMultiplicityVsVertexZNoTPCOnlyNoPileup) {
1279       f2dHistMultiplicityVsVertexZNoTPCOnlyNoPileup = new TH2F("f2dHistMultiplicityVsVertexZNoTPCOnlyNoPileup", 
1280          "Tracks per event", 200, 0, 200, 400, -20, 20);                
1281       fListHistV0->Add(f2dHistMultiplicityVsVertexZNoTPCOnlyNoPileup);
1282    }
1283
1284 //Generated PVz test
1285
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
1291
1292    if(! fHistGenVertexZBeforeTrigSel) {
1293          fHistGenVertexZBeforeTrigSel = new TH1F("fHistGenVertexZBeforeTrigSel", 
1294             "PV z position;Nbr of Evts;z", 
1295             400, -20, 20);       
1296       fListHistV0->Add(fHistGenVertexZBeforeTrigSel);
1297    }
1298    if(! fHistGenVertexZForTrigEvt) {
1299          fHistGenVertexZForTrigEvt = new TH1F("fHistGenVertexZForTrigEvt", 
1300             "PV z position;Nbr of Evts;z", 
1301             400, -20, 20);       
1302       fListHistV0->Add(fHistGenVertexZForTrigEvt);
1303    }
1304    if(! fHistGenVertexZ) {
1305          fHistGenVertexZ = new TH1F("fHistGenVertexZ", 
1306             "PV z position;Nbr of Evts;z", 
1307             400, -20, 20);       
1308       fListHistV0->Add(fHistGenVertexZ);
1309    }
1310    if(! fHistGenVertexZNoTPCOnly) {
1311          fHistGenVertexZNoTPCOnly = new TH1F("fHistGenVertexZNoTPCOnly", 
1312             "PV z position;Nbr of Evts;z", 
1313             400, -20, 20);       
1314       fListHistV0->Add(fHistGenVertexZNoTPCOnly);
1315    }
1316    if(! fHistGenVertexZNoTPCOnlyNoPileup) {
1317          fHistGenVertexZNoTPCOnlyNoPileup = new TH1F("fHistGenVertexZNoTPCOnlyNoPileup", 
1318             "PV z position;Nbr of Evts;z", 
1319             400, -20, 20);       
1320       fListHistV0->Add(fHistGenVertexZNoTPCOnlyNoPileup);
1321    }
1322
1323
1324 //------------------------------------------------
1325 // Generated Particle Histograms
1326 //------------------------------------------------
1327
1328    Int_t lCustomNBins = 200; 
1329    Double_t lCustomPtUpperLimit = 20; 
1330    Int_t lCustomNBinsMultiplicity = 100;
1331
1332 //----------------------------------
1333 // Raw Generated (Pre-physics-selection)
1334 //----------------------------------
1335
1336 //--- 3D Histo (Pt, Y, Multiplicity), V0M Version (default) 
1337
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);
1341    }
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);
1345    }
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);
1349    }
1350
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);
1354    }
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);
1358    }
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);
1362    }
1363   
1364 //--- 3D Histo (Pt, Y, Multiplicity), V0A Version
1365   
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);
1369   }
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);
1373   }
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);
1377   }
1378   
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);
1382   }
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);
1386   }
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);
1390   }
1391
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);
1396   }
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);
1400   }
1401   
1402   //--- 3D Histo (Pt, Y, Multiplicity), ZNA Version
1403   
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);
1407   }
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);
1411   }
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);
1415   }
1416   
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);
1420   }
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);
1424   }
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);
1428   }
1429   
1430   //--- 3D Histo (Pt, Y, Multiplicity), TRK Version
1431   
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);
1435   }
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);
1439   }
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);
1443   }
1444   
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);
1448   }
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);
1452   }
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);
1456   }
1457   
1458   //--- 3D Histo (Pt, Y, Multiplicity), SPD Version
1459   
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);
1463   }
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);
1467   }
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);
1471   }
1472   
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);
1476   }
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);
1480   }
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);
1484   }
1485   
1486   
1487
1488 //---> Non-injected particles
1489
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);
1493    }
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);
1497    }
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);
1501    }
1502
1503 //--- 3D Histo (Pt, Y, MultiplicityMC)  
1504
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);
1508    }
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);
1512    }
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);
1516    }
1517
1518 //--- 3D Histo (Pt, Y, VertexZ)  
1519
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);
1523    }
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);
1527    }
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);
1531    }
1532
1533 //--- 3D Histo (Pt, Y, Multiplicity), close to PV criterion
1534
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);
1538    }
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);
1542    }
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);
1546    }
1547
1548
1549 //--- 3D Histo (Pt, Y, Proper Decay Length)
1550
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);
1554    }
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);
1558    }
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);
1562    }
1563
1564 //--------------------------------------------------------------------------------------
1565 // V0M for Cascades
1566 //--------------------------------------------------------------------------------------
1567 //--- 3D Histo (Pt, Y, Multiplicity) for generated XiMinus/Plus, all generated
1568
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);
1572    }
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);
1576    }
1577 //CASCADEs, Y CMS
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);
1581    }
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);
1585    }
1586
1587 //--------------------------------------------------------------------------------------
1588 //--- 3D Histo (Pt, Y, Multiplicity) for generated XiMinus/Plus, at selected analysis evts
1589
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);
1593    }
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);
1597    }
1598
1599 //CASCADES, analysis level, y CMS
1600 //--------------------------------------------------------------------------------------
1601 //--- 3D Histo (Pt, Y, Multiplicity) for generated XiMinus/Plus, at selected analysis evts
1602
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);
1606    }
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);
1610    }
1611   
1612   //--------------------------------------------------------------------------------------
1613   // V0A for Cascades
1614   //--------------------------------------------------------------------------------------
1615   //--- 3D Histo (Pt, Y, Multiplicity) for generated XiMinus/Plus, all generated
1616   
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);
1620   }
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);
1624   }
1625   //CASCADEs, Y CMS
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);
1629   }
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);
1633   }
1634   
1635   //--------------------------------------------------------------------------------------
1636   //--- 3D Histo (Pt, Y, Multiplicity) for generated XiMinus/Plus, at selected analysis evts
1637   
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);
1641   }
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);
1645   }
1646   
1647   //CASCADES, analysis level, y CMS
1648   //--------------------------------------------------------------------------------------
1649   //--- 3D Histo (Pt, Y, Multiplicity) for generated XiMinus/Plus, at selected analysis evts
1650   
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);
1654   }
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);
1658   }
1659   
1660   //--------------------------------------------------------------------------------------
1661   // ZNA for Cascades
1662   //--------------------------------------------------------------------------------------
1663   //--- 3D Histo (Pt, Y, Multiplicity) for generated XiMinus/Plus, all generated
1664   
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);
1668   }
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);
1672   }
1673   //CASCADEs, Y CMS
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);
1677   }
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);
1681   }
1682   
1683   //--------------------------------------------------------------------------------------
1684   //--- 3D Histo (Pt, Y, Multiplicity) for generated XiMinus/Plus, at selected analysis evts
1685   
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);
1689   }
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);
1693   }
1694   
1695   //CASCADES, analysis level, y CMS
1696   //--------------------------------------------------------------------------------------
1697   //--- 3D Histo (Pt, Y, Multiplicity) for generated XiMinus/Plus, at selected analysis evts
1698   
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);
1702   }
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);
1706   }
1707   
1708   //--------------------------------------------------------------------------------------
1709   // TRK for Cascades
1710   //--------------------------------------------------------------------------------------
1711   //--- 3D Histo (Pt, Y, Multiplicity) for generated XiMinus/Plus, all generated
1712   
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);
1716   }
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);
1720   }
1721   //CASCADEs, Y CMS
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);
1725   }
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);
1729   }
1730   
1731   //--------------------------------------------------------------------------------------
1732   //--- 3D Histo (Pt, Y, Multiplicity) for generated XiMinus/Plus, at selected analysis evts
1733   
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);
1737   }
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);
1741   }
1742   
1743   //CASCADES, analysis level, y CMS
1744   //--------------------------------------------------------------------------------------
1745   //--- 3D Histo (Pt, Y, Multiplicity) for generated XiMinus/Plus, at selected analysis evts
1746   
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);
1750   }
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);
1754   }
1755   
1756   
1757   //--------------------------------------------------------------------------------------
1758   // SPD for Cascades
1759   //--------------------------------------------------------------------------------------
1760   //--- 3D Histo (Pt, Y, Multiplicity) for generated XiMinus/Plus, all generated
1761   
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);
1765   }
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);
1769   }
1770   //CASCADEs, Y CMS
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);
1774   }
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);
1778   }
1779   
1780   //--------------------------------------------------------------------------------------
1781   //--- 3D Histo (Pt, Y, Multiplicity) for generated XiMinus/Plus, at selected analysis evts
1782   
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);
1786   }
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);
1790   }
1791   
1792   //CASCADES, analysis level, y CMS
1793   //--------------------------------------------------------------------------------------
1794   //--- 3D Histo (Pt, Y, Multiplicity) for generated XiMinus/Plus, at selected analysis evts
1795   
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);
1799   }
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);
1803   }
1804   
1805
1806
1807 //----------------------------------
1808 // Histos at analysis level 
1809 //----------------------------------
1810
1811 //The usual V0M business...
1812   
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);
1816    }
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);
1820    }
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);
1824    }
1825
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);
1829    }
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);
1833    }
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);
1837    }
1838   
1839   //TRUE Multiplicity Business
1840   
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);
1844   }
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);
1848   }
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);
1852   }
1853   
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);
1857   }
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);
1861   }
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);
1865   }
1866   
1867   //V0A
1868   
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);
1872   }
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);
1876   }
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);
1880   }
1881   
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);
1885   }
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);
1889   }
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);
1893   }
1894
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);
1899   }
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);
1904   }
1905
1906   
1907   //ZNA
1908   
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);
1912   }
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);
1916   }
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);
1920   }
1921   
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);
1925   }
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);
1929   }
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);
1933   }
1934   
1935   //TRK
1936   
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);
1940   }
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);
1944   }
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);
1948   }
1949   
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);
1953   }
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);
1957   }
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);
1961   }
1962   
1963   //SPD
1964   
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);
1968   }
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);
1972   }
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);
1976   }
1977   
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);
1981   }
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);
1985   }
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);
1989   }
1990
1991 //----------------------------------
1992 // Primary Vertex Position Histos
1993 //----------------------------------
1994
1995    if(! fHistPVx) {
1996          fHistPVx = new TH1F("fHistPVx", 
1997             "PV x position;Nbr of Evts;x", 
1998             2000, -0.5, 0.5);       
1999       fListHistV0->Add(fHistPVx);
2000    }
2001    if(! fHistPVy) {
2002          fHistPVy = new TH1F("fHistPVy", 
2003             "PV y position;Nbr of Evts;y", 
2004             2000, -0.5, 0.5);       
2005       fListHistV0->Add(fHistPVy);
2006    }
2007    if(! fHistPVz) {
2008          fHistPVz = new TH1F("fHistPVz", 
2009             "PV z position;Nbr of Evts;z", 
2010             400, -20, 20);       
2011       fListHistV0->Add(fHistPVz);
2012    }
2013
2014    if(! fHistPVxAnalysis) {
2015          fHistPVxAnalysis = new TH1F("fHistPVxAnalysis", 
2016             "PV x position;Nbr of Evts;x", 
2017             2000, -0.5, 0.5);       
2018       fListHistV0->Add(fHistPVxAnalysis);
2019    }
2020    if(! fHistPVyAnalysis) {
2021          fHistPVyAnalysis = new TH1F("fHistPVyAnalysis", 
2022             "PV y position;Nbr of Evts;y", 
2023             2000, -0.5, 0.5);       
2024       fListHistV0->Add(fHistPVyAnalysis);
2025    }
2026    if(! fHistPVzAnalysis) {
2027          fHistPVzAnalysis = new TH1F("fHistPVzAnalysis", 
2028             "PV z position;Nbr of Evts;z", 
2029             400, -20, 20);       
2030       fListHistV0->Add(fHistPVzAnalysis);
2031    }
2032
2033    if(! fHistPVxAnalysisHasHighPtLambda) {
2034          fHistPVxAnalysisHasHighPtLambda = new TH1F("fHistPVxAnalysisHasHighPtLambda", 
2035             "PV x position;Nbr of Evts;x", 
2036             2000, -0.5, 0.5);       
2037       fListHistV0->Add(fHistPVxAnalysisHasHighPtLambda);
2038    }
2039    if(! fHistPVyAnalysisHasHighPtLambda) {
2040          fHistPVyAnalysisHasHighPtLambda = new TH1F("fHistPVyAnalysisHasHighPtLambda", 
2041             "PV y position;Nbr of Evts;y", 
2042             2000, -0.5, 0.5);       
2043       fListHistV0->Add(fHistPVyAnalysisHasHighPtLambda);
2044    }
2045    if(! fHistPVzAnalysisHasHighPtLambda) {
2046          fHistPVzAnalysisHasHighPtLambda = new TH1F("fHistPVzAnalysisHasHighPtLambda", 
2047             "PV z position;Nbr of Evts;z", 
2048             400, -20, 20);       
2049       fListHistV0->Add(fHistPVzAnalysisHasHighPtLambda);
2050    }
2051    if(! fHistSwappedV0Counter) {
2052       fHistSwappedV0Counter = new TH1F("fHistSwappedV0Counter", 
2053          "Swap or not histo;Swapped (1) or not (0); count", 
2054          2, 0, 2);              
2055       fListHistV0->Add(fHistSwappedV0Counter);
2056    }
2057
2058    //List of Histograms: Normal
2059    PostData(1, fListHistV0);
2060
2061    //TTree Object: Saved to base directory. Should cache to disk while saving. 
2062    //(Important to avoid excessive memory usage, particularly when merging)
2063    PostData(2, fTree);
2064
2065 }// end UserCreateOutputObjects
2066
2067
2068 //________________________________________________________________________
2069 void AliAnalysisTaskExtractPerformanceV0::UserExec(Option_t *) 
2070 {
2071   // Main loop
2072   // Called for each event
2073
2074    AliESDEvent *lESDevent = 0x0;
2075    AliMCEvent  *lMCevent  = 0x0; 
2076    AliStack    *lMCstack  = 0x0; 
2077
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.;
2082    
2083   // Connect to the InputEvent   
2084   // After these lines, we should have an ESD/AOD event + the number of V0s in it.
2085
2086    // Appropriate for ESD analysis! 
2087       
2088    lESDevent = dynamic_cast<AliESDEvent*>( InputEvent() );
2089    if (!lESDevent) {
2090       AliWarning("ERROR: lESDevent not available \n");
2091       return;
2092    }
2093         
2094    fTreeVariableRunNumber = lESDevent->GetRunNumber();
2095    fTreeVariableEventNumber =  
2096     ( ( ((ULong64_t)lESDevent->GetPeriodNumber() ) << 36 ) |
2097       ( ((ULong64_t)lESDevent->GetOrbitNumber () ) << 12 ) |
2098         ((ULong64_t)lESDevent->GetBunchCrossNumber() )  );
2099
2100    lMCevent = MCEvent();
2101    if (!lMCevent) {
2102       Printf("ERROR: Could not retrieve MC event \n");
2103       cout << "Name of the file with pb :" <<  fInputHandler->GetTree()->GetCurrentFile()->GetName() << endl;   
2104       return;
2105    }
2106
2107    lMCstack = lMCevent->Stack();
2108    if (!lMCstack) {
2109       Printf("ERROR: Could not retrieve MC stack \n");
2110       cout << "Name of the file with pb :" <<  fInputHandler->GetTree()->GetCurrentFile()->GetName() << endl;
2111       return;
2112    }
2113   
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);
2123   }
2124   
2125    TArrayF mcPrimaryVtx;
2126    AliGenEventHeader* mcHeader=lMCevent->GenEventHeader();
2127    if(!mcHeader) return;
2128    mcHeader->PrimaryVertex(mcPrimaryVtx);
2129         
2130   //Code Snippet from Alexander for looking at diffractive Events from DPMJet
2131   Int_t nPart = 0; 
2132   if(fDiffractiveOnly){
2133     AliHeader * header = lMCevent->Header();
2134     AliGenDPMjetEventHeader* dpmHeader = dynamic_cast<AliGenDPMjetEventHeader*>(header->GenEventHeader());
2135     if (dpmHeader) nPart = dpmHeader->ProjectileParticipants() + dpmHeader->TargetParticipants();
2136     //
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;
2142   }
2143
2144 //------------------------------------------------
2145 // Multiplicity Information Acquistion
2146 //------------------------------------------------
2147
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;
2154   
2155    //testing purposes
2156    if(fkIsNuclear == kFALSE) lMultiplicity = fESDtrackCuts->GetReferenceMultiplicity(lESDevent, AliESDtrackCuts::kTrackletsITSTPC,fEtaRefMult);
2157
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);
2170         PostData(2, fTree);
2171         return;
2172       }
2173    }
2174   
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;
2183
2184    fHistV0MultiplicityBeforeTrigSel->Fill ( lESDevent->GetNumberOfV0s() );
2185   
2186   fHistMultiplicityBeforeTrigSel->Fill ( lMultiplicity );
2187   fHistMultiplicityV0ABeforeTrigSel->Fill ( lMultiplicityV0A );
2188   fHistMultiplicityZNABeforeTrigSel->Fill ( lMultiplicityZNA );
2189   fHistMultiplicityTRKBeforeTrigSel->Fill ( lMultiplicityTRK );
2190   fHistMultiplicitySPDBeforeTrigSel->Fill ( lMultiplicitySPD );
2191   
2192 //------------------------------------------------
2193 // MC Information Acquistion
2194 //------------------------------------------------
2195
2196    Int_t iNumberOfPrimaries = -1;
2197    iNumberOfPrimaries = lMCstack->GetNprimary();
2198    if(iNumberOfPrimaries < 1) return; 
2199    Bool_t lHasHighPtLambda = kFALSE;
2200
2201 //------------------------------------------------
2202 // Variable Definition
2203 //------------------------------------------------
2204
2205    Int_t lNbMCPrimary        = 0;
2206
2207    Int_t lPdgcodeCurrentPart = 0;
2208    Double_t lRapCurrentPart  = 0;
2209    Double_t lPtCurrentPart   = 0;
2210   
2211    //Int_t lComeFromSigma      = 0;
2212
2213    // current mc particle 's mother
2214    //Int_t iCurrentMother  = 0;
2215    lNbMCPrimary = lMCstack->GetNprimary();
2216
2217 //------------------------------------------------
2218 // Pre-Physics Selection
2219 //------------------------------------------------
2220
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
2224       
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 );
2229          continue;
2230       }
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) );
2236            }
2237          }
2238
2239          //=================================================================================
2240          // Xi Histograms
2241          if( lCurrentParticlePrimary->GetPdgCode() == 3312 ){ 
2242             lPtCurrentPart    = lCurrentParticlePrimary->Pt();
2243             f3dHistGenPtVsYVsMultXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicity);
2244             f3dHistGenPtVsYCMSVsMultXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicity);
2245            
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);
2254          }
2255          if( lCurrentParticlePrimary->GetPdgCode() == -3312 ){
2256             lPtCurrentPart    = lCurrentParticlePrimary->Pt();
2257             f3dHistGenPtVsYVsMultXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicity);
2258             f3dHistGenPtVsYCMSVsMultXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicity);
2259            
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);
2268          }
2269       } 
2270    }
2271 //----- End Loop on primary Xi, Omega ----------------------------------------------------------
2272
2273 //--------- GENERATED NUMBER OF CHARGED PARTICLES
2274 // ---> Set Variables to Zero again
2275 // ---> Variable Definition
2276
2277   Long_t lNumberOfCharged = 0; 
2278
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;
2288      
2289       //Double_t gpt = particleOne -> Pt();
2290       Double_t geta = particleOne -> Eta(); 
2291
2292       if( TMath::Abs(geta) < 0.5) lNumberOfCharged++; 
2293    }//End of loop on tracks
2294 //----- End Loop on Stack ------------------------------------------------------------
2295
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
2301       
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 );
2306          continue;
2307       }
2308
2309       //=================================================================================
2310       //Single-Strange checks
2311       // Keep only K0s, Lambda and AntiLambda:
2312       lPdgcodeCurrentPart = lCurrentParticleForLambdaCheck->GetPdgCode();             
2313
2314       if ( (lCurrentParticleForLambdaCheck->GetPdgCode() == 310   ) ||
2315            (lCurrentParticleForLambdaCheck->GetPdgCode() == 3122  ) ||
2316            (lCurrentParticleForLambdaCheck->GetPdgCode() == -3122 ) )
2317            {
2318          lRapCurrentPart   = MyRapidity(lCurrentParticleForLambdaCheck->Energy(),lCurrentParticleForLambdaCheck->Pz());
2319          lPtCurrentPart    = lCurrentParticleForLambdaCheck->Pt();
2320
2321           //Use Close to PV for filling CloseToPV histograms!
2322          Double_t dx, dy, dz; 
2323
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);
2331            }
2332            if( lPdgcodeCurrentPart == -3122 ){
2333               f3dHistPrimCloseToPVPtVsYVsMultAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicity);
2334            }
2335            if( lPdgcodeCurrentPart == 310 ){
2336               f3dHistPrimCloseToPVPtVsYVsMultK0Short->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicity);
2337            }
2338          }
2339
2340          //Use Physical Primaries only for filling PrimRaw Histograms!
2341          if ( lMCstack->IsPhysicalPrimary(iCurrentLabelStack)!=kTRUE ) continue;
2342
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
2347           }
2348
2349          if( lPdgcodeCurrentPart == 3122 ){
2350             f3dHistPrimRawPtVsYVsMultLambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicity);
2351             f3dHistPrimRawPtVsYCMSVsMultLambda->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicity);
2352
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);
2361
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
2367             }
2368          }
2369          if( lPdgcodeCurrentPart == -3122 ){
2370             f3dHistPrimRawPtVsYVsMultAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicity);
2371             f3dHistPrimRawPtVsYCMSVsMultAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicity);
2372            
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);
2381            
2382             if(lStackNatural){f3dHistPrimRawPtVsYVsMultNonInjAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicity);}
2383             f3dHistPrimRawPtVsYVsMultMCAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart, lNumberOfCharged);
2384             f3dHistPrimRawPtVsYVsVertexZAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart, mcPrimaryVtx.At(2));
2385          }
2386          if( lPdgcodeCurrentPart == 310 ){
2387             f3dHistPrimRawPtVsYVsMultK0Short->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicity);
2388             f3dHistPrimRawPtVsYCMSVsMultK0Short->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicity);
2389            
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);
2398            
2399             if(lStackNatural){f3dHistPrimRawPtVsYVsMultNonInjK0Short->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicity);}
2400             f3dHistPrimRawPtVsYVsMultMCK0Short->Fill(lPtCurrentPart, lRapCurrentPart, lNumberOfCharged);
2401             f3dHistPrimRawPtVsYVsVertexZK0Short->Fill(lPtCurrentPart, lRapCurrentPart, mcPrimaryVtx.At(2));
2402          }
2403          //Decay Length Acquisition=====================================================
2404          Double_t decaylength = -1; 
2405          Double_t lV0Mass = -1; 
2406           
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)
2414                );
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;
2420             }
2421          }
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 ); 
2425       }
2426    }//End of loop on tracks
2427 //----- End Loop on Lambda, K0Short ------------------------------------------------------------
2428
2429
2430    f2dHistMultiplicityVsTrueBeforeTrigSel->Fill ( lMultiplicity , lNumberOfCharged );
2431
2432     fTreeVariableMultiplicityMC = lNumberOfCharged;
2433
2434    fHistGenVertexZBeforeTrigSel->Fill( (mcPrimaryVtx.At(2)) );
2435
2436    lPdgcodeCurrentPart = 0;
2437    lRapCurrentPart  = 0;
2438    lPtCurrentPart   = 0;
2439
2440 //------------------------------------------------
2441 // Physics Selection
2442 //------------------------------------------------
2443   
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;
2448   
2449   //pA triggering: CINT7
2450   if( fkSwitchINT7 ) isSelected = (maskIsSelected & AliVEvent::kINT7) == AliVEvent::kINT7;
2451   
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;
2457     }
2458     if( fkFastOnly == "NotkFastOnly"){
2459       //If not kFastOnly, isSelectedExtra will be kTRUE; procedure will accept it
2460       isSelectedExtra = !( (maskIsSelected & AliVEvent::kFastOnly) == AliVEvent::kFastOnly );
2461     }
2462     
2463     //Standard Min-Bias Selection
2464     if ( ! isSelected ) {
2465       PostData(1, fListHistV0);
2466       PostData(2, fTree);
2467       return;
2468     }
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);
2475       PostData(2, fTree);
2476       return;
2477     }
2478   }
2479   
2480   f2dHistMultiplicityVsTrueForTrigEvt->Fill ( lMultiplicity , lNumberOfCharged );
2481   fHistGenVertexZForTrigEvt->Fill( mcPrimaryVtx.At(2) );
2482   
2483 //------------------------------------------------
2484 // After Trigger Selection
2485 //------------------------------------------------
2486
2487    lNumberOfV0s          = lESDevent->GetNumberOfV0s();
2488   
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  );
2496
2497 //------------------------------------------------
2498 // Getting: Primary Vertex + MagField Info
2499 //------------------------------------------------
2500
2501    const AliESDVertex *lPrimaryTrackingESDVtx = lESDevent->GetPrimaryVertexTracks();
2502    // get the vtx stored in ESD found with tracks
2503    lPrimaryTrackingESDVtx->GetXYZ( lTrkgPrimaryVtxPos );
2504         
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 );
2511
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] );
2520
2521    f2dHistMultiplicityVsVertexZForTrigEvt->Fill( lMultiplicity, lPrimaryVtxPosition[2] );
2522
2523   //------------------------------------------------
2524   // Primary Vertex Requirements Section:
2525   //  ---> pp and PbPb: Only requires |z|<10cm
2526   //  ---> pPb: all requirements checked at this stage
2527   //------------------------------------------------
2528   
2529   //Roberto's PV selection criteria, implemented 17th April 2013
2530   
2531   /* vertex selection */
2532   Bool_t fHasVertex = kFALSE;
2533   
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;
2544   }
2545   else fHasVertex = kTRUE;
2546   
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);
2551     PostData(2, fTree);
2552     return;
2553   }
2554   
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);
2559     PostData(2, fTree);
2560     return;
2561   }
2562   
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);
2567     PostData(2, fTree);
2568     return;
2569   }
2570   
2571   f2dHistMultiplicityVsVertexZ->Fill( lMultiplicity, lPrimaryVtxPosition[2] );
2572   
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 //------------------------------------------------
2585         
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);
2591       PostData(2, fTree);
2592       return;
2593    }
2594
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 //------------------------------------------------
2607
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);
2612       PostData(2, fTree);
2613       return;
2614    }
2615    f2dHistMultiplicityVsVertexZNoTPCOnlyNoPileup->Fill( lMultiplicity, lPrimaryVtxPosition[2] );
2616    fHistV0MultiplicityForSelEvtNoTPCOnlyNoPileup ->Fill( lNumberOfV0s );
2617  
2618    fHistMultiplicityNoTPCOnlyNoPileup->Fill(lMultiplicity);
2619    fHistMultiplicityV0ANoTPCOnlyNoPileup->Fill(lMultiplicityV0A);
2620    fHistMultiplicityZNANoTPCOnlyNoPileup->Fill(lMultiplicityZNA);
2621    fHistMultiplicityTRKNoTPCOnlyNoPileup->Fill(lMultiplicityTRK);
2622    fHistMultiplicitySPDNoTPCOnlyNoPileup->Fill(lMultiplicitySPD);
2623   
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] );
2635       }
2636    }
2637
2638   fTreeVariableVertexZ = lPrimaryVtxPosition[2];
2639
2640   fTreeVariablePVx = lPrimaryVtxPosition[0];
2641   fTreeVariablePVy = lPrimaryVtxPosition[1];
2642   fTreeVariablePVz = lPrimaryVtxPosition[2];
2643
2644   fTreeVariableMCPVx = (mcPrimaryVtx.At(0));
2645   fTreeVariableMCPVy = (mcPrimaryVtx.At(1));
2646   fTreeVariableMCPVz = (mcPrimaryVtx.At(2));
2647
2648 //------------------------------------------------
2649 // stack loop starts here
2650 //------------------------------------------------
2651
2652 //---> Loop over ALL PARTICLES
2653  
2654    for (Int_t iMc = 0; iMc < (lMCstack->GetNtrack()); iMc++) {  
2655       TParticle *p0 = lMCstack->Particle(iMc); 
2656       if (!p0) {
2657          //Printf("ERROR: particle with label %d not found in lMCstack (mc loop)", iMc);
2658          continue;
2659       }
2660       lPdgcodeCurrentPart = p0->GetPdgCode();
2661
2662       // Keep only K0s, Lambda and AntiLambda:
2663       if ( (lPdgcodeCurrentPart != 310 ) && (lPdgcodeCurrentPart != 3122 ) && (lPdgcodeCurrentPart != -3122 ) && (TMath::Abs(lPdgcodeCurrentPart) != 321 ) ) continue;
2664         
2665       lRapCurrentPart   = MyRapidity(p0->Energy(),p0->Pz());
2666       lPtCurrentPart    = p0->Pt();
2667
2668         //Use Physical Primaries only for filling PrimRaw Histograms!
2669       if ( lMCstack->IsPhysicalPrimary(iMc)!=kTRUE ) continue;
2670
2671       if( lPdgcodeCurrentPart == 3122 ){
2672         //NRaw
2673         f3dHistPrimAnalysisPtVsYVsMultLambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicity);
2674         f3dHistPrimAnalysisPtVsYCMSVsMultLambda->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicity);
2675         //NTrue
2676         f3dHistPrimAnalysisPtVsYVsMultMCLambda->Fill(lPtCurrentPart, lRapCurrentPart, lNumberOfCharged);
2677         f3dHistPrimAnalysisPtVsYCMSVsMultMCLambda->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lNumberOfCharged);
2678         //Other stuff
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);
2687       }
2688       if( lPdgcodeCurrentPart == -3122 ){
2689         //NRaw
2690         f3dHistPrimAnalysisPtVsYVsMultAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicity);
2691         f3dHistPrimAnalysisPtVsYCMSVsMultAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicity);
2692         //NTrue
2693         f3dHistPrimAnalysisPtVsYVsMultMCAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart, lNumberOfCharged);
2694         f3dHistPrimAnalysisPtVsYCMSVsMultMCAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lNumberOfCharged);
2695         //Other stuff
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);
2704         
2705       }
2706       if( lPdgcodeCurrentPart == 310 ){
2707         //NRaw
2708         f3dHistPrimAnalysisPtVsYVsMultK0Short->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicity);
2709         f3dHistPrimAnalysisPtVsYCMSVsMultK0Short->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicity);
2710         //NTrue
2711         f3dHistPrimAnalysisPtVsYVsMultMCK0Short->Fill(lPtCurrentPart, lRapCurrentPart, lNumberOfCharged);
2712         f3dHistPrimAnalysisPtVsYCMSVsMultMCK0Short->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lNumberOfCharged);
2713         //Other Stuff
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);
2722       }
2723       //Cross-check with Charged Kaons... 
2724       if( lPdgcodeCurrentPart == 321 ){
2725         //V0A
2726         f3dHistPrimAnalysisPtVsYCMSVsMultV0AKPlus->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicityV0A);
2727       }
2728       if( lPdgcodeCurrentPart == -321 ){
2729         //V0A
2730         f3dHistPrimAnalysisPtVsYCMSVsMultV0AKMinus->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicityV0A);
2731       }
2732
2733    }
2734
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
2738       
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 );
2743          continue;
2744       }
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) );
2750            }
2751          }
2752
2753          //=================================================================================
2754          // Xi Histograms
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);
2767          }
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);
2780          }
2781       }
2782    }
2783 //----- End Loop on primary Xi, Omega ----------------------------------------------------------
2784
2785 //------------------------------------------------
2786 // MAIN LAMBDA LOOP STARTS HERE
2787 //------------------------------------------------
2788
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; 
2801
2802    Int_t nv0s = 0;
2803    nv0s = lESDevent->GetNumberOfV0s();
2804    
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);
2808       if (!v0) continue;
2809
2810       //---> Fix On-the-Fly candidates
2811       if( v0->GetParamN()->Charge() > 0 && v0->GetParamP()->Charge() < 0 ){
2812         fHistSwappedV0Counter -> Fill( 1 );
2813       }else{
2814         fHistSwappedV0Counter -> Fill( 0 ); 
2815       }
2816       if ( fkUseOnTheFly ) CheckChargeV0(v0); 
2817
2818
2819       Double_t tV0mom[3];
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] );
2823
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]);
2826       lPt = v0->Pt();
2827       lRapK0Short = v0->RapK0Short();
2828       lRapLambda  = v0->RapLambda();
2829
2830       //Set Variables for later filling
2831       fTreeVariableV0x = tDecayVertexV0[0];
2832       fTreeVariableV0y = tDecayVertexV0[1];
2833       fTreeVariableV0z = tDecayVertexV0[2];
2834
2835       //Set Variables for later filling
2836       fTreeVariableV0Px = tV0mom[0];
2837       fTreeVariableV0Py = tV0mom[1];
2838       fTreeVariableV0Pz = tV0mom[2];
2839
2840       if ((lPt<fMinV0Pt)||(fMaxV0Pt<lPt)) continue;
2841
2842       UInt_t lKeyPos = (UInt_t)TMath::Abs(v0->GetPindex());
2843       UInt_t lKeyNeg = (UInt_t)TMath::Abs(v0->GetNindex());
2844
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]);
2847
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");
2852          continue;
2853       }
2854
2855       fTreeVariableNegEta = nTrack->Eta();
2856       fTreeVariablePosEta = pTrack->Eta();
2857
2858       fTreeVariableNegPx = lMomNeg[0]; fTreeVariableNegPy = lMomNeg[1]; fTreeVariableNegPz = lMomNeg[2];
2859       fTreeVariablePosPx = lMomPos[0]; fTreeVariablePosPy = lMomPos[1]; fTreeVariablePosPz = lMomPos[2];
2860     
2861       // Filter like-sign V0 (next: add counter and distribution)
2862       if ( pTrack->GetSign() == nTrack->GetSign()){
2863          continue;
2864       } 
2865
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;
2873
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;
2877
2878       //Get status flags
2879       fTreeVariablePosTrackStatus = pTrack->GetStatus();
2880       fTreeVariableNegTrackStatus = nTrack->GetStatus();
2881     
2882       if ( ( ( ( pTrack->GetTPCClusterInfo(2,1) ) < 70 ) || ( ( nTrack->GetTPCClusterInfo(2,1) ) < 70 ) )&&(fkTakeAllTracks==kFALSE) ) continue;
2883         
2884       //GetKinkIndex condition
2885       if( pTrack->GetKinkIndex(0)>0 || nTrack->GetKinkIndex(0)>0 ) continue;
2886
2887       //Findable clusters > 0 condition
2888       if( pTrack->GetTPCNclsF()<=0 || nTrack->GetTPCNclsF()<=0 ) continue;
2889
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())); 
2896
2897       fTreeVariableLeastRatioCrossedRowsOverFindable = lPosTrackCrossedRowsOverFindable;
2898       if( lNegTrackCrossedRowsOverFindable < fTreeVariableLeastRatioCrossedRowsOverFindable )
2899          fTreeVariableLeastRatioCrossedRowsOverFindable = lNegTrackCrossedRowsOverFindable;
2900
2901       //Lowest Cut Level for Ratio Crossed Rows / Findable = 0.8, set here
2902       if ( (fTreeVariableLeastRatioCrossedRowsOverFindable < 0.8)&&(fkTakeAllTracks==kFALSE) ) continue;
2903
2904       //End track Quality Cuts
2905       //________________________________________________________________________
2906
2907       lDcaPosToPrimVertex = TMath::Abs(pTrack->GetD(lPrimaryVtxPosition[0],
2908                                                         lPrimaryVtxPosition[1],
2909                                                         lMagneticField) );
2910
2911       lDcaNegToPrimVertex = TMath::Abs(nTrack->GetD(lPrimaryVtxPosition[0],
2912                                                         lPrimaryVtxPosition[1],
2913                                                         lMagneticField) );
2914
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;
2922
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();
2932
2933       //fTreeVariableOnFlyStatus = lOnFlyStatus;
2934       //fHistV0OnFlyStatus->Fill(lOnFlyStatus);
2935
2936 //===============================================
2937 // Monte Carlo Association starts here
2938 //===============================================
2939
2940       //---> Set Everything to "I don't know" before starting
2941
2942       fTreeVariablePIDPositive = 0;
2943       fTreeVariablePIDNegative = 0;
2944
2945       fTreeVariableIndexStatus = 0;
2946       fTreeVariableIndexStatusMother = 0;
2947
2948       fTreeVariablePtMother = -1;
2949       fTreeVariablePtMC = -1;
2950       fTreeVariableRapMC = -100;
2951
2952       fTreeVariablePID = -1; 
2953       fTreeVariablePIDMother = -1;
2954
2955       fTreeVariablePrimaryStatus = 0; 
2956       fTreeVariablePrimaryStatusMother = 0; 
2957       fTreeVariableV0CreationRadius = -1;
2958     
2959       fTreeVariableNegPhysicalStatus = 0;
2960       fTreeVariablePosPhysicalStatus = 0;
2961     
2962       Int_t lblPosV0Dghter = (Int_t) TMath::Abs( pTrack->GetLabel() );
2963       Int_t lblNegV0Dghter = (Int_t) TMath::Abs( nTrack->GetLabel() );
2964                 
2965       TParticle* mcPosV0Dghter = lMCstack->Particle( lblPosV0Dghter );
2966       TParticle* mcNegV0Dghter = lMCstack->Particle( lblNegV0Dghter );
2967             
2968       fTreeVariablePosTransvMomentumMC = mcPosV0Dghter->Pt();
2969       fTreeVariableNegTransvMomentumMC = mcNegV0Dghter->Pt();
2970
2971       Int_t lPIDPositive = mcPosV0Dghter -> GetPdgCode();
2972       Int_t lPIDNegative = mcNegV0Dghter -> GetPdgCode();
2973
2974       fTreeVariablePIDPositive = lPIDPositive;
2975       fTreeVariablePIDNegative = lPIDNegative;
2976
2977       Int_t lblMotherPosV0Dghter = mcPosV0Dghter->GetFirstMother() ; 
2978       Int_t lblMotherNegV0Dghter = mcNegV0Dghter->GetFirstMother();
2979     
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!
2983
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!
2987     
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
2994
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
2999           }
3000
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();
3007
3008          //Set Variables for later filling
3009          fTreeVariableMCV0Px = pThisV0->Px();
3010          fTreeVariableMCV0Py = pThisV0->Py();
3011          fTreeVariableMCV0Pz = pThisV0->Pz();
3012
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
3021          }
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) 
3026          );
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!
3032          
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!
3045          }
3046       }
3047
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;
3060
3061       fTreeVariableRapLambda = lRapLambda;
3062       fTreeVariableAlphaV0 = lAlphaV0;
3063       fTreeVariablePtArmV0 = lPtArmV0;
3064
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 );
3071     }else{
3072       fTreeVariableNSigmasPosProton = 0;
3073       fTreeVariableNSigmasPosPion   = 0;
3074       fTreeVariableNSigmasNegProton = 0;
3075       fTreeVariableNSigmasNegPion   = 0;
3076     }
3077     
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)
3083                                         );
3084       fTreeVariableDistOverTotMom = 1e+5;
3085       if( lV0TotalMomentum + 1e-10 != 0 ) fTreeVariableDistOverTotMom = lDistanceTravelled / (lV0TotalMomentum + 1e-10); //avoid division by zero, to be sure
3086
3087       Double_t lMomentumPosTemp[3];
3088       pTrack->GetPxPyPz(lMomentumPosTemp);
3089       Double_t lPtPosTemporary = sqrt(pow(lMomentumPosTemp[0],2) + pow(lMomentumPosTemp[1],2));
3090
3091       Double_t lMomentumNegTemp[3];
3092       nTrack->GetPxPyPz(lMomentumNegTemp);
3093       Double_t lPtNegTemporary = sqrt(pow(lMomentumNegTemp[0],2) + pow(lMomentumNegTemp[1],2));
3094
3095       fTreeVariablePosTransvMomentum = lPtPosTemporary;
3096       fTreeVariableNegTransvMomentum = lPtNegTemporary;
3097
3098
3099 //------------------------------------------------
3100 // Fill Tree! 
3101 //------------------------------------------------
3102
3103       // The conditionals are meant to decrease excessive
3104       // memory usage! 
3105
3106       //Modified version: Keep only OnFlyStatus == 0
3107       //Keep only if included in a parametric InvMass Region 20 sigmas away from peak
3108
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);
3119          //Do Selection      
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();
3130                }
3131              }//end nuclear_____________________________________
3132          }
3133       }
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();
3138       }
3139     }
3140
3141 //------------------------------------------------
3142 // Fill tree over.
3143 //------------------------------------------------
3144
3145
3146    }// This is the end of the V0 loop
3147
3148 //------------------------------------------------
3149
3150    // Post output data.
3151    PostData(1, fListHistV0);
3152    PostData(2, fTree);
3153 }
3154
3155 //________________________________________________________________________
3156 void AliAnalysisTaskExtractPerformanceV0::Terminate(Option_t *)
3157 {
3158    // Draw result to the screen
3159    // Called once at the end of the query
3160
3161    TList *cRetrievedList = 0x0;
3162    cRetrievedList = (TList*)GetOutputData(1);
3163    if(!cRetrievedList){
3164       Printf("ERROR - AliAnalysisTaskExtractV0 : ouput data container list not available\n");
3165       return;
3166    }    
3167         
3168    fHistV0MultiplicityForTrigEvt = dynamic_cast<TH1F*> (  cRetrievedList->FindObject("fHistV0MultiplicityForTrigEvt")  );
3169    if (!fHistV0MultiplicityForTrigEvt) {
3170       Printf("ERROR - AliAnalysisTaskExtractV0 : fHistV0MultiplicityForTrigEvt not available");
3171       return;
3172    }
3173   
3174    TCanvas *canCheck = new TCanvas("AliAnalysisTaskExtractV0","V0 Multiplicity",10,10,510,510);
3175    canCheck->cd(1)->SetLogy();
3176
3177    fHistV0MultiplicityForTrigEvt->SetMarkerStyle(22);
3178    fHistV0MultiplicityForTrigEvt->DrawCopy("E");
3179 }
3180
3181 //----------------------------------------------------------------------------
3182
3183 Double_t AliAnalysisTaskExtractPerformanceV0::MyRapidity(Double_t rE, Double_t rPz) const
3184 {
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));
3189    }
3190    return ReturnValue;
3191
3192
3193 //________________________________________________________________________
3194 void AliAnalysisTaskExtractPerformanceV0::CheckChargeV0(AliESDv0 *v0)
3195 {
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] );
3206
3207       AliExternalTrackParam     lCorrectParamN(
3208         v0->GetParamP()->GetX() , 
3209         v0->GetParamP()->GetAlpha() , 
3210         v0->GetParamP()->GetParameter() , 
3211         v0->GetParamP()->GetCovariance() 
3212       );
3213       AliExternalTrackParam     lCorrectParamP(
3214         v0->GetParamN()->GetX() , 
3215         v0->GetParamN()->GetAlpha() , 
3216         v0->GetParamN()->GetParameter() , 
3217         v0->GetParamN()->GetCovariance() 
3218       );
3219       lCorrectParamN.SetMostProbablePt( v0->GetParamP()->GetMostProbablePt() );
3220       lCorrectParamP.SetMostProbablePt( v0->GetParamN()->GetMostProbablePt() );
3221
3222       //Get Variables___________________________________________________
3223       Double_t lDcaV0Daughters = v0 -> GetDcaV0Daughters();
3224       Double_t lCosPALocal     = v0 -> GetV0CosineOfPointingAngle(); 
3225       Bool_t lOnFlyStatusLocal = v0 -> GetOnFlyStatus();
3226
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 );
3233
3234       //Reverse Cluster info..._________________________________________
3235       v0correct->SetClusters( v0->GetClusters( 1 ), v0->GetClusters ( 0 ) );
3236
3237       *v0 = *v0correct;
3238       //Proper cleanup..._______________________________________________
3239       v0correct->Delete();
3240       v0correct = 0x0;
3241
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!");
3245       }else{
3246         //AliWarning("Found Swapped Charges and fixed.");
3247       }
3248       //________________________________________________________________
3249    }else{
3250       //Don't touch it! ---
3251       //Printf("Ah, nice. Charges are already ordered...");
3252    }
3253    return;
3254
3255