]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGLF/STRANGENESS/LambdaK0/AliAnalysisTaskExtractPerformanceV0.cxx
Modification to allow switching on and off pileup rejection for cross-checking false...
[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
91 #include "AliAnalysisUtils.h"
92 #include "AliAnalysisTaskExtractPerformanceV0.h"
93
94 using std::cout;
95 using std::endl;
96
97 ClassImp(AliAnalysisTaskExtractPerformanceV0)
98
99 AliAnalysisTaskExtractPerformanceV0::AliAnalysisTaskExtractPerformanceV0()
100   : AliAnalysisTaskSE(), fListHistV0(0), fTree(0), fPIDResponse(0), fESDtrackCuts(0), fUtils(0),
101    fkIsNuclear   ( kFALSE ), 
102    fkSwitchINT7  ( kFALSE ),
103    fkUseOnTheFly ( kFALSE ),
104    fkTakeAllTracks ( kFALSE ),
105    fpArapidityShift ( 0.465 ),
106   fCentralityEstimator("V0M"),
107   fkLightWeight  ( kFALSE ),
108   fkFastOnly     ( "" ),
109   fkpAVertexSelection( kFALSE ),
110   fkRunV0Vertexer( kFALSE ),
111   fkRejectPileup ( kTRUE ),
112 //------------------------------------------------
113 // Tree Variables 
114
115   fTreeVariablePrimaryStatus(0),
116   fTreeVariablePrimaryStatusMother(0),
117   fTreeVariableChi2V0(0),
118         fTreeVariableDcaV0Daughters(0),
119         fTreeVariableDcaV0ToPrimVertex(0),
120         fTreeVariableDcaPosToPrimVertex(0),
121         fTreeVariableDcaNegToPrimVertex(0),
122         fTreeVariableV0CosineOfPointingAngle(0),
123         fTreeVariableV0Radius(0),
124         fTreeVariablePt(0),
125         fTreeVariablePtMC(0),
126         fTreeVariableRapK0Short(0),
127         fTreeVariableRapLambda(0),
128         fTreeVariableRapMC(0),
129         fTreeVariableInvMassK0s(0),
130         fTreeVariableInvMassLambda(0),
131         fTreeVariableInvMassAntiLambda(0),
132         fTreeVariableAlphaV0(0),
133         fTreeVariablePtArmV0(0),
134         fTreeVariableNegTotMomentum(0),
135         fTreeVariablePosTotMomentum(0),
136         fTreeVariableNegTransvMomentum(0),
137         fTreeVariablePosTransvMomentum(0),
138         fTreeVariableNegTransvMomentumMC(0),
139         fTreeVariablePosTransvMomentumMC(0),
140    
141         fTreeVariableNSigmasPosProton(0),
142         fTreeVariableNSigmasPosPion(0),
143         fTreeVariableNSigmasNegProton(0),
144         fTreeVariableNSigmasNegPion(0),
145
146         fTreeVariablePtMother(0),
147         fTreeVariableV0CreationRadius(0),
148   fTreeVariablePID(0),
149   fTreeVariablePIDPositive(0),
150   fTreeVariablePIDNegative(0),
151   fTreeVariablePIDMother(0),
152   fTreeVariableIndexStatus(0),
153   fTreeVariableIndexStatusMother(0),
154
155   fTreeVariableRunNumber(0),
156   fTreeVariableEventNumber(0),
157
158         fTreeVariableDistOverTotMom(0),
159
160         fTreeVariablePosEta(0),
161         fTreeVariableNegEta(0),
162
163         fTreeVariableVertexZ(0),
164
165   fTreeVariableLeastNbrCrossedRows(0),
166   fTreeVariableLeastRatioCrossedRowsOverFindable(0),
167
168   fTreeVariableMultiplicity(0),
169   fTreeVariableMultiplicityV0A(0),
170   fTreeVariableMultiplicityZNA(0),
171   fTreeVariableMultiplicityTRK(0),
172   fTreeVariableMultiplicitySPD(0),
173   fTreeVariableMultiplicityMC(0),
174
175   fTreeVariableV0x(0),
176   fTreeVariableV0y(0),
177   fTreeVariableV0z(0),
178
179   fTreeVariableV0Px(0),
180   fTreeVariableV0Py(0),
181   fTreeVariableV0Pz(0),
182
183   fTreeVariableMCV0x(0),
184   fTreeVariableMCV0y(0),
185   fTreeVariableMCV0z(0),
186
187   fTreeVariableMCV0Px(0),
188   fTreeVariableMCV0Py(0),
189   fTreeVariableMCV0Pz(0),
190
191   fTreeVariablePVx(0),
192   fTreeVariablePVy(0),
193   fTreeVariablePVz(0),
194
195   fTreeVariableMCPVx(0),
196   fTreeVariableMCPVy(0),
197   fTreeVariableMCPVz(0),
198
199   fTreeVariableIsNonInjected(0),
200
201   fTreeVariableNegTrackStatus(0),
202   fTreeVariablePosTrackStatus(0),
203
204   fTreeVariableNegPhysicalStatus(0),
205   fTreeVariablePosPhysicalStatus(0),
206
207 //------------------------------------------------
208 // HISTOGRAMS
209 // --- Filled on an Event-by-event basis
210 //------------------------------------------------
211    fHistV0MultiplicityBeforeTrigSel(0),
212    fHistV0MultiplicityForTrigEvt(0), 
213    fHistV0MultiplicityForSelEvt(0),
214    fHistV0MultiplicityForSelEvtNoTPCOnly(0),
215    fHistV0MultiplicityForSelEvtNoTPCOnlyNoPileup(0),
216    fHistMultiplicityBeforeTrigSel(0),
217    fHistMultiplicityForTrigEvt(0),
218    fHistMultiplicity(0),
219    fHistMultiplicityNoTPCOnly(0),
220    fHistMultiplicityNoTPCOnlyNoPileup(0),
221
222 //V0A Centrality
223 fHistMultiplicityV0ABeforeTrigSel(0),
224 fHistMultiplicityV0AForTrigEvt(0),
225 fHistMultiplicityV0A(0),
226 fHistMultiplicityV0ANoTPCOnly(0),
227 fHistMultiplicityV0ANoTPCOnlyNoPileup(0),
228
229 //ZNA Centrality
230 fHistMultiplicityZNABeforeTrigSel(0),
231 fHistMultiplicityZNAForTrigEvt(0),
232 fHistMultiplicityZNA(0),
233 fHistMultiplicityZNANoTPCOnly(0),
234 fHistMultiplicityZNANoTPCOnlyNoPileup(0),
235
236 //TRK Centrality
237 fHistMultiplicityTRKBeforeTrigSel(0),
238 fHistMultiplicityTRKForTrigEvt(0),
239 fHistMultiplicityTRK(0),
240 fHistMultiplicityTRKNoTPCOnly(0),
241 fHistMultiplicityTRKNoTPCOnlyNoPileup(0),
242
243 //SPD Centrality
244 fHistMultiplicitySPDBeforeTrigSel(0),
245 fHistMultiplicitySPDForTrigEvt(0),
246 fHistMultiplicitySPD(0),
247 fHistMultiplicitySPDNoTPCOnly(0),
248 fHistMultiplicitySPDNoTPCOnlyNoPileup(0),
249
250         f2dHistMultiplicityVsTrueBeforeTrigSel(0),
251         f2dHistMultiplicityVsTrueForTrigEvt(0),
252         f2dHistMultiplicityVsTrue(0),
253         f2dHistMultiplicityVsTrueNoTPCOnly(0),
254         f2dHistMultiplicityVsTrueNoTPCOnlyNoPileup(0),
255
256   //Raw Data for Vertex Z position estimator change
257         f2dHistMultiplicityVsVertexZBeforeTrigSel(0),
258         f2dHistMultiplicityVsVertexZForTrigEvt(0),
259         f2dHistMultiplicityVsVertexZ(0),
260         f2dHistMultiplicityVsVertexZNoTPCOnly(0),
261         f2dHistMultiplicityVsVertexZNoTPCOnlyNoPileup(0),
262
263   fHistGenVertexZBeforeTrigSel(0),     
264   fHistGenVertexZForTrigEvt(0),
265   fHistGenVertexZ(0),
266   fHistGenVertexZNoTPCOnly(0),
267   fHistGenVertexZNoTPCOnlyNoPileup(0),
268
269 //------------------------------------------------
270 // PARTICLE HISTOGRAMS
271 // --- Filled on a Particle-by-Particle basis
272 //------------------------------------------------
273
274 //Standard V0M / multiplicity
275   f3dHistPrimAnalysisPtVsYVsMultLambda(0),
276   f3dHistPrimAnalysisPtVsYVsMultAntiLambda(0),
277   f3dHistPrimAnalysisPtVsYVsMultK0Short(0),
278   f3dHistPrimAnalysisPtVsYCMSVsMultLambda(0),
279   f3dHistPrimAnalysisPtVsYCMSVsMultAntiLambda(0),
280   f3dHistPrimAnalysisPtVsYCMSVsMultK0Short(0),
281
282   //True Multiplicity
283   f3dHistPrimAnalysisPtVsYVsMultMCLambda(0),
284   f3dHistPrimAnalysisPtVsYVsMultMCAntiLambda(0),
285   f3dHistPrimAnalysisPtVsYVsMultMCK0Short(0),
286   f3dHistPrimAnalysisPtVsYCMSVsMultMCLambda(0),
287   f3dHistPrimAnalysisPtVsYCMSVsMultMCAntiLambda(0),
288   f3dHistPrimAnalysisPtVsYCMSVsMultMCK0Short(0),
289
290 //V0A
291   f3dHistPrimAnalysisPtVsYVsMultV0ALambda(0),
292   f3dHistPrimAnalysisPtVsYVsMultV0AAntiLambda(0),
293   f3dHistPrimAnalysisPtVsYVsMultV0AK0Short(0),
294   f3dHistPrimAnalysisPtVsYCMSVsMultV0ALambda(0),
295   f3dHistPrimAnalysisPtVsYCMSVsMultV0AAntiLambda(0),
296   f3dHistPrimAnalysisPtVsYCMSVsMultV0AK0Short(0),
297
298 //ZNA
299   f3dHistPrimAnalysisPtVsYVsMultZNALambda(0),
300   f3dHistPrimAnalysisPtVsYVsMultZNAAntiLambda(0),
301   f3dHistPrimAnalysisPtVsYVsMultZNAK0Short(0),
302   f3dHistPrimAnalysisPtVsYCMSVsMultZNALambda(0),
303   f3dHistPrimAnalysisPtVsYCMSVsMultZNAAntiLambda(0),
304   f3dHistPrimAnalysisPtVsYCMSVsMultZNAK0Short(0),
305
306 //TRK
307   f3dHistPrimAnalysisPtVsYVsMultTRKLambda(0),
308   f3dHistPrimAnalysisPtVsYVsMultTRKAntiLambda(0),
309   f3dHistPrimAnalysisPtVsYVsMultTRKK0Short(0),
310   f3dHistPrimAnalysisPtVsYCMSVsMultTRKLambda(0),
311   f3dHistPrimAnalysisPtVsYCMSVsMultTRKAntiLambda(0),
312   f3dHistPrimAnalysisPtVsYCMSVsMultTRKK0Short(0),
313
314 //SPD
315   f3dHistPrimAnalysisPtVsYVsMultSPDLambda(0),
316   f3dHistPrimAnalysisPtVsYVsMultSPDAntiLambda(0),
317   f3dHistPrimAnalysisPtVsYVsMultSPDK0Short(0),
318   f3dHistPrimAnalysisPtVsYCMSVsMultSPDLambda(0),
319   f3dHistPrimAnalysisPtVsYCMSVsMultSPDAntiLambda(0),
320   f3dHistPrimAnalysisPtVsYCMSVsMultSPDK0Short(0),
321
322 //Standard V0M again
323   f3dHistPrimRawPtVsYVsMultLambda(0),
324   f3dHistPrimRawPtVsYVsMultAntiLambda(0),
325   f3dHistPrimRawPtVsYVsMultK0Short(0),
326   f3dHistPrimRawPtVsYCMSVsMultLambda(0),
327   f3dHistPrimRawPtVsYCMSVsMultAntiLambda(0),
328   f3dHistPrimRawPtVsYCMSVsMultK0Short(0),
329
330 //V0A again
331   f3dHistPrimRawPtVsYVsMultV0ALambda(0),
332   f3dHistPrimRawPtVsYVsMultV0AAntiLambda(0),
333   f3dHistPrimRawPtVsYVsMultV0AK0Short(0),
334   f3dHistPrimRawPtVsYCMSVsMultV0ALambda(0),
335   f3dHistPrimRawPtVsYCMSVsMultV0AAntiLambda(0),
336   f3dHistPrimRawPtVsYCMSVsMultV0AK0Short(0),
337
338 //ZNA
339   f3dHistPrimRawPtVsYVsMultZNALambda(0),
340   f3dHistPrimRawPtVsYVsMultZNAAntiLambda(0),
341   f3dHistPrimRawPtVsYVsMultZNAK0Short(0),
342   f3dHistPrimRawPtVsYCMSVsMultZNALambda(0),
343   f3dHistPrimRawPtVsYCMSVsMultZNAAntiLambda(0),
344   f3dHistPrimRawPtVsYCMSVsMultZNAK0Short(0),
345
346 //TRK
347   f3dHistPrimRawPtVsYVsMultTRKLambda(0),
348   f3dHistPrimRawPtVsYVsMultTRKAntiLambda(0),
349   f3dHistPrimRawPtVsYVsMultTRKK0Short(0),
350   f3dHistPrimRawPtVsYCMSVsMultTRKLambda(0),
351   f3dHistPrimRawPtVsYCMSVsMultTRKAntiLambda(0),
352   f3dHistPrimRawPtVsYCMSVsMultTRKK0Short(0),
353
354 //SPD
355   f3dHistPrimRawPtVsYVsMultSPDLambda(0),
356   f3dHistPrimRawPtVsYVsMultSPDAntiLambda(0),
357   f3dHistPrimRawPtVsYVsMultSPDK0Short(0),
358   f3dHistPrimRawPtVsYCMSVsMultSPDLambda(0),
359   f3dHistPrimRawPtVsYCMSVsMultSPDAntiLambda(0),
360   f3dHistPrimRawPtVsYCMSVsMultSPDK0Short(0),
361
362   f3dHistPrimRawPtVsYVsMultNonInjLambda(0),
363   f3dHistPrimRawPtVsYVsMultNonInjAntiLambda(0),
364   f3dHistPrimRawPtVsYVsMultNonInjK0Short(0),
365   f3dHistPrimRawPtVsYVsMultMCLambda(0),
366   f3dHistPrimRawPtVsYVsMultMCAntiLambda(0),
367   f3dHistPrimRawPtVsYVsMultMCK0Short(0),
368   f3dHistPrimRawPtVsYVsVertexZLambda(0),
369   f3dHistPrimRawPtVsYVsVertexZAntiLambda(0),
370   f3dHistPrimRawPtVsYVsVertexZK0Short(0),
371   f3dHistPrimCloseToPVPtVsYVsMultLambda(0),
372   f3dHistPrimCloseToPVPtVsYVsMultAntiLambda(0),
373   f3dHistPrimCloseToPVPtVsYVsMultK0Short(0),
374   f3dHistPrimRawPtVsYVsDecayLengthLambda(0),
375   f3dHistPrimRawPtVsYVsDecayLengthAntiLambda(0),
376   f3dHistPrimRawPtVsYVsDecayLengthK0Short(0),
377
378 //V0M
379   f3dHistGenPtVsYVsMultXiMinus(0),
380   f3dHistGenPtVsYVsMultXiPlus(0),
381   f3dHistGenSelectedPtVsYVsMultXiMinus(0),
382   f3dHistGenSelectedPtVsYVsMultXiPlus(0),
383   f3dHistGenPtVsYCMSVsMultXiMinus(0),
384   f3dHistGenPtVsYCMSVsMultXiPlus(0),
385   f3dHistGenSelectedPtVsYCMSVsMultXiMinus(0),
386   f3dHistGenSelectedPtVsYCMSVsMultXiPlus(0),
387
388 //V0A
389   f3dHistGenPtVsYVsMultV0AXiMinus(0),
390   f3dHistGenPtVsYVsMultV0AXiPlus(0),
391   f3dHistGenSelectedPtVsYVsMultV0AXiMinus(0),
392   f3dHistGenSelectedPtVsYVsMultV0AXiPlus(0),
393   f3dHistGenPtVsYCMSVsMultV0AXiMinus(0),
394   f3dHistGenPtVsYCMSVsMultV0AXiPlus(0),
395   f3dHistGenSelectedPtVsYCMSVsMultV0AXiMinus(0),
396   f3dHistGenSelectedPtVsYCMSVsMultV0AXiPlus(0),
397
398 //ZNA
399   f3dHistGenPtVsYVsMultZNAXiMinus(0),
400   f3dHistGenPtVsYVsMultZNAXiPlus(0),
401   f3dHistGenSelectedPtVsYVsMultZNAXiMinus(0),
402   f3dHistGenSelectedPtVsYVsMultZNAXiPlus(0),
403   f3dHistGenPtVsYCMSVsMultZNAXiMinus(0),
404   f3dHistGenPtVsYCMSVsMultZNAXiPlus(0),
405   f3dHistGenSelectedPtVsYCMSVsMultZNAXiMinus(0),
406   f3dHistGenSelectedPtVsYCMSVsMultZNAXiPlus(0),
407
408 //TRK
409   f3dHistGenPtVsYVsMultTRKXiMinus(0),
410   f3dHistGenPtVsYVsMultTRKXiPlus(0),
411   f3dHistGenSelectedPtVsYVsMultTRKXiMinus(0),
412   f3dHistGenSelectedPtVsYVsMultTRKXiPlus(0),
413   f3dHistGenPtVsYCMSVsMultTRKXiMinus(0),
414   f3dHistGenPtVsYCMSVsMultTRKXiPlus(0),
415   f3dHistGenSelectedPtVsYCMSVsMultTRKXiMinus(0),
416   f3dHistGenSelectedPtVsYCMSVsMultTRKXiPlus(0),
417
418 //SPD
419   f3dHistGenPtVsYVsMultSPDXiMinus(0),
420   f3dHistGenPtVsYVsMultSPDXiPlus(0),
421   f3dHistGenSelectedPtVsYVsMultSPDXiMinus(0),
422   f3dHistGenSelectedPtVsYVsMultSPDXiPlus(0),
423   f3dHistGenPtVsYCMSVsMultSPDXiMinus(0),
424   f3dHistGenPtVsYCMSVsMultSPDXiPlus(0),
425   f3dHistGenSelectedPtVsYCMSVsMultSPDXiMinus(0),
426   f3dHistGenSelectedPtVsYCMSVsMultSPDXiPlus(0),
427
428   fHistPVx(0),
429   fHistPVy(0),
430   fHistPVz(0),
431   fHistPVxAnalysis(0),
432   fHistPVyAnalysis(0),
433   fHistPVzAnalysis(0),
434   fHistPVxAnalysisHasHighPtLambda(0),
435   fHistPVyAnalysisHasHighPtLambda(0),
436   fHistPVzAnalysisHasHighPtLambda(0),
437   fHistSwappedV0Counter(0)
438 {
439   // Dummy Constructor
440   for(Int_t iV0selIdx   = 0; iV0selIdx   < 7; iV0selIdx++   ) { fV0Sels          [iV0selIdx   ] = -1.; }  
441 }
442
443 AliAnalysisTaskExtractPerformanceV0::AliAnalysisTaskExtractPerformanceV0(const char *name) 
444   : AliAnalysisTaskSE(name), fListHistV0(0), fTree(0), fPIDResponse(0), fESDtrackCuts(0), fUtils(0),
445    fkIsNuclear   ( kFALSE ), 
446    fkSwitchINT7  ( kFALSE ),
447    fkUseOnTheFly ( kFALSE ),
448    fkTakeAllTracks ( kFALSE ),
449    fpArapidityShift ( 0.465 ),
450   fCentralityEstimator("V0M"),
451   fkLightWeight  ( kFALSE ),
452   fkFastOnly     ( "" ),
453   fkpAVertexSelection( kFALSE ),
454   fkRunV0Vertexer( kFALSE ),
455   fkRejectPileup ( kTRUE ),
456 //------------------------------------------------
457 // Tree Variables 
458
459   fTreeVariablePrimaryStatus(0),
460   fTreeVariablePrimaryStatusMother(0),
461   fTreeVariableChi2V0(0),
462         fTreeVariableDcaV0Daughters(0),
463         fTreeVariableDcaV0ToPrimVertex(0),
464         fTreeVariableDcaPosToPrimVertex(0),
465         fTreeVariableDcaNegToPrimVertex(0),
466         fTreeVariableV0CosineOfPointingAngle(0),
467         fTreeVariableV0Radius(0),
468         fTreeVariablePt(0),
469         fTreeVariablePtMC(0),
470         fTreeVariableRapK0Short(0),
471         fTreeVariableRapLambda(0),
472         fTreeVariableRapMC(0),
473         fTreeVariableInvMassK0s(0),
474         fTreeVariableInvMassLambda(0),
475         fTreeVariableInvMassAntiLambda(0),
476         fTreeVariableAlphaV0(0),
477         fTreeVariablePtArmV0(0),
478         fTreeVariableNegTotMomentum(0),
479         fTreeVariablePosTotMomentum(0),
480         fTreeVariableNegTransvMomentum(0),
481         fTreeVariablePosTransvMomentum(0),
482         fTreeVariableNegTransvMomentumMC(0),
483         fTreeVariablePosTransvMomentumMC(0),
484    
485         fTreeVariableNSigmasPosProton(0),
486         fTreeVariableNSigmasPosPion(0),
487         fTreeVariableNSigmasNegProton(0),
488         fTreeVariableNSigmasNegPion(0),
489
490         fTreeVariablePtMother(0),
491         fTreeVariableV0CreationRadius(0),
492   fTreeVariablePID(0),
493   fTreeVariablePIDPositive(0),
494   fTreeVariablePIDNegative(0),
495   fTreeVariablePIDMother(0),
496   fTreeVariableIndexStatus(0),
497   fTreeVariableIndexStatusMother(0),
498
499   fTreeVariableRunNumber(0),
500   fTreeVariableEventNumber(0),
501
502         fTreeVariableDistOverTotMom(0),
503
504         fTreeVariablePosEta(0),
505         fTreeVariableNegEta(0),
506
507         fTreeVariableVertexZ(0),
508
509   fTreeVariableLeastNbrCrossedRows(0),
510   fTreeVariableLeastRatioCrossedRowsOverFindable(0),
511   fTreeVariableMultiplicity(0),
512   fTreeVariableMultiplicityV0A(0),
513   fTreeVariableMultiplicityZNA(0),
514   fTreeVariableMultiplicityTRK(0),
515   fTreeVariableMultiplicitySPD(0),
516   fTreeVariableMultiplicityMC(0),
517
518   fTreeVariableV0x(0),
519   fTreeVariableV0y(0),
520   fTreeVariableV0z(0),
521
522   fTreeVariableV0Px(0),
523   fTreeVariableV0Py(0),
524   fTreeVariableV0Pz(0),
525
526   fTreeVariableMCV0x(0),
527   fTreeVariableMCV0y(0),
528   fTreeVariableMCV0z(0),
529
530   fTreeVariableMCV0Px(0),
531   fTreeVariableMCV0Py(0),
532   fTreeVariableMCV0Pz(0),
533
534   fTreeVariablePVx(0),
535   fTreeVariablePVy(0),
536   fTreeVariablePVz(0),
537
538   fTreeVariableMCPVx(0),
539   fTreeVariableMCPVy(0),
540   fTreeVariableMCPVz(0),
541
542   fTreeVariableIsNonInjected(0),
543
544   fTreeVariableNegTrackStatus(0),
545   fTreeVariablePosTrackStatus(0),
546
547 //------------------------------------------------
548 // HISTOGRAMS
549 // --- Filled on an Event-by-event basis
550 //------------------------------------------------
551    fHistV0MultiplicityBeforeTrigSel(0),
552    fHistV0MultiplicityForTrigEvt(0), 
553    fHistV0MultiplicityForSelEvt(0),
554    fHistV0MultiplicityForSelEvtNoTPCOnly(0),
555    fHistV0MultiplicityForSelEvtNoTPCOnlyNoPileup(0),
556    fHistMultiplicityBeforeTrigSel(0),
557    fHistMultiplicityForTrigEvt(0),
558    fHistMultiplicity(0),
559    fHistMultiplicityNoTPCOnly(0),
560    fHistMultiplicityNoTPCOnlyNoPileup(0),
561
562 //V0A Centrality
563 fHistMultiplicityV0ABeforeTrigSel(0),
564 fHistMultiplicityV0AForTrigEvt(0),
565 fHistMultiplicityV0A(0),
566 fHistMultiplicityV0ANoTPCOnly(0),
567 fHistMultiplicityV0ANoTPCOnlyNoPileup(0),
568
569 //ZNA Centrality
570 fHistMultiplicityZNABeforeTrigSel(0),
571 fHistMultiplicityZNAForTrigEvt(0),
572 fHistMultiplicityZNA(0),
573 fHistMultiplicityZNANoTPCOnly(0),
574 fHistMultiplicityZNANoTPCOnlyNoPileup(0),
575
576 //TRK Centrality
577 fHistMultiplicityTRKBeforeTrigSel(0),
578 fHistMultiplicityTRKForTrigEvt(0),
579 fHistMultiplicityTRK(0),
580 fHistMultiplicityTRKNoTPCOnly(0),
581 fHistMultiplicityTRKNoTPCOnlyNoPileup(0),
582
583 //SPD Centrality
584 fHistMultiplicitySPDBeforeTrigSel(0),
585 fHistMultiplicitySPDForTrigEvt(0),
586 fHistMultiplicitySPD(0),
587 fHistMultiplicitySPDNoTPCOnly(0),
588 fHistMultiplicitySPDNoTPCOnlyNoPileup(0),
589
590         f2dHistMultiplicityVsTrueBeforeTrigSel(0),
591         f2dHistMultiplicityVsTrueForTrigEvt(0),
592         f2dHistMultiplicityVsTrue(0),
593         f2dHistMultiplicityVsTrueNoTPCOnly(0),
594         f2dHistMultiplicityVsTrueNoTPCOnlyNoPileup(0),
595
596   //Raw Data for Vertex Z position estimator change
597         f2dHistMultiplicityVsVertexZBeforeTrigSel(0),
598         f2dHistMultiplicityVsVertexZForTrigEvt(0),
599         f2dHistMultiplicityVsVertexZ(0),
600         f2dHistMultiplicityVsVertexZNoTPCOnly(0),
601         f2dHistMultiplicityVsVertexZNoTPCOnlyNoPileup(0),
602
603   fHistGenVertexZBeforeTrigSel(0),     
604   fHistGenVertexZForTrigEvt(0),
605   fHistGenVertexZ(0),
606   fHistGenVertexZNoTPCOnly(0),
607   fHistGenVertexZNoTPCOnlyNoPileup(0),
608
609 //------------------------------------------------
610 // PARTICLE HISTOGRAMS
611 // --- Filled on a Particle-by-Particle basis
612 //------------------------------------------------
613
614 //Standard V0M
615 f3dHistPrimAnalysisPtVsYVsMultLambda(0),
616 f3dHistPrimAnalysisPtVsYVsMultAntiLambda(0),
617 f3dHistPrimAnalysisPtVsYVsMultK0Short(0),
618 f3dHistPrimAnalysisPtVsYCMSVsMultLambda(0),
619 f3dHistPrimAnalysisPtVsYCMSVsMultAntiLambda(0),
620 f3dHistPrimAnalysisPtVsYCMSVsMultK0Short(0),
621
622 //True Multiplicity
623 f3dHistPrimAnalysisPtVsYVsMultMCLambda(0),
624 f3dHistPrimAnalysisPtVsYVsMultMCAntiLambda(0),
625 f3dHistPrimAnalysisPtVsYVsMultMCK0Short(0),
626 f3dHistPrimAnalysisPtVsYCMSVsMultMCLambda(0),
627 f3dHistPrimAnalysisPtVsYCMSVsMultMCAntiLambda(0),
628 f3dHistPrimAnalysisPtVsYCMSVsMultMCK0Short(0),
629
630 //V0A
631 f3dHistPrimAnalysisPtVsYVsMultV0ALambda(0),
632 f3dHistPrimAnalysisPtVsYVsMultV0AAntiLambda(0),
633 f3dHistPrimAnalysisPtVsYVsMultV0AK0Short(0),
634 f3dHistPrimAnalysisPtVsYCMSVsMultV0ALambda(0),
635 f3dHistPrimAnalysisPtVsYCMSVsMultV0AAntiLambda(0),
636 f3dHistPrimAnalysisPtVsYCMSVsMultV0AK0Short(0),
637
638 //ZNA
639 f3dHistPrimAnalysisPtVsYVsMultZNALambda(0),
640 f3dHistPrimAnalysisPtVsYVsMultZNAAntiLambda(0),
641 f3dHistPrimAnalysisPtVsYVsMultZNAK0Short(0),
642 f3dHistPrimAnalysisPtVsYCMSVsMultZNALambda(0),
643 f3dHistPrimAnalysisPtVsYCMSVsMultZNAAntiLambda(0),
644 f3dHistPrimAnalysisPtVsYCMSVsMultZNAK0Short(0),
645
646 //TRK
647 f3dHistPrimAnalysisPtVsYVsMultTRKLambda(0),
648 f3dHistPrimAnalysisPtVsYVsMultTRKAntiLambda(0),
649 f3dHistPrimAnalysisPtVsYVsMultTRKK0Short(0),
650 f3dHistPrimAnalysisPtVsYCMSVsMultTRKLambda(0),
651 f3dHistPrimAnalysisPtVsYCMSVsMultTRKAntiLambda(0),
652 f3dHistPrimAnalysisPtVsYCMSVsMultTRKK0Short(0),
653
654 //SPD
655 f3dHistPrimAnalysisPtVsYVsMultSPDLambda(0),
656 f3dHistPrimAnalysisPtVsYVsMultSPDAntiLambda(0),
657 f3dHistPrimAnalysisPtVsYVsMultSPDK0Short(0),
658 f3dHistPrimAnalysisPtVsYCMSVsMultSPDLambda(0),
659 f3dHistPrimAnalysisPtVsYCMSVsMultSPDAntiLambda(0),
660 f3dHistPrimAnalysisPtVsYCMSVsMultSPDK0Short(0),
661
662 //Standard V0M again
663 f3dHistPrimRawPtVsYVsMultLambda(0),
664 f3dHistPrimRawPtVsYVsMultAntiLambda(0),
665 f3dHistPrimRawPtVsYVsMultK0Short(0),
666 f3dHistPrimRawPtVsYCMSVsMultLambda(0),
667 f3dHistPrimRawPtVsYCMSVsMultAntiLambda(0),
668 f3dHistPrimRawPtVsYCMSVsMultK0Short(0),
669
670 //V0A again
671 f3dHistPrimRawPtVsYVsMultV0ALambda(0),
672 f3dHistPrimRawPtVsYVsMultV0AAntiLambda(0),
673 f3dHistPrimRawPtVsYVsMultV0AK0Short(0),
674 f3dHistPrimRawPtVsYCMSVsMultV0ALambda(0),
675 f3dHistPrimRawPtVsYCMSVsMultV0AAntiLambda(0),
676 f3dHistPrimRawPtVsYCMSVsMultV0AK0Short(0),
677
678 //ZNA
679 f3dHistPrimRawPtVsYVsMultZNALambda(0),
680 f3dHistPrimRawPtVsYVsMultZNAAntiLambda(0),
681 f3dHistPrimRawPtVsYVsMultZNAK0Short(0),
682 f3dHistPrimRawPtVsYCMSVsMultZNALambda(0),
683 f3dHistPrimRawPtVsYCMSVsMultZNAAntiLambda(0),
684 f3dHistPrimRawPtVsYCMSVsMultZNAK0Short(0),
685
686 //TRK
687 f3dHistPrimRawPtVsYVsMultTRKLambda(0),
688 f3dHistPrimRawPtVsYVsMultTRKAntiLambda(0),
689 f3dHistPrimRawPtVsYVsMultTRKK0Short(0),
690 f3dHistPrimRawPtVsYCMSVsMultTRKLambda(0),
691 f3dHistPrimRawPtVsYCMSVsMultTRKAntiLambda(0),
692 f3dHistPrimRawPtVsYCMSVsMultTRKK0Short(0),
693
694 //SPD
695 f3dHistPrimRawPtVsYVsMultSPDLambda(0),
696 f3dHistPrimRawPtVsYVsMultSPDAntiLambda(0),
697 f3dHistPrimRawPtVsYVsMultSPDK0Short(0),
698 f3dHistPrimRawPtVsYCMSVsMultSPDLambda(0),
699 f3dHistPrimRawPtVsYCMSVsMultSPDAntiLambda(0),
700 f3dHistPrimRawPtVsYCMSVsMultSPDK0Short(0),
701
702    f3dHistPrimRawPtVsYVsMultNonInjLambda(0),
703    f3dHistPrimRawPtVsYVsMultNonInjAntiLambda(0),
704    f3dHistPrimRawPtVsYVsMultNonInjK0Short(0),
705    f3dHistPrimRawPtVsYVsMultMCLambda(0),
706    f3dHistPrimRawPtVsYVsMultMCAntiLambda(0),
707    f3dHistPrimRawPtVsYVsMultMCK0Short(0),
708    f3dHistPrimRawPtVsYVsVertexZLambda(0),
709    f3dHistPrimRawPtVsYVsVertexZAntiLambda(0),
710    f3dHistPrimRawPtVsYVsVertexZK0Short(0),
711    f3dHistPrimCloseToPVPtVsYVsMultLambda(0),
712    f3dHistPrimCloseToPVPtVsYVsMultAntiLambda(0),
713    f3dHistPrimCloseToPVPtVsYVsMultK0Short(0),
714    f3dHistPrimRawPtVsYVsDecayLengthLambda(0),
715    f3dHistPrimRawPtVsYVsDecayLengthAntiLambda(0),
716    f3dHistPrimRawPtVsYVsDecayLengthK0Short(0),
717
718 //V0M
719 f3dHistGenPtVsYVsMultXiMinus(0),
720 f3dHistGenPtVsYVsMultXiPlus(0),
721 f3dHistGenSelectedPtVsYVsMultXiMinus(0),
722 f3dHistGenSelectedPtVsYVsMultXiPlus(0),
723 f3dHistGenPtVsYCMSVsMultXiMinus(0),
724 f3dHistGenPtVsYCMSVsMultXiPlus(0),
725 f3dHistGenSelectedPtVsYCMSVsMultXiMinus(0),
726 f3dHistGenSelectedPtVsYCMSVsMultXiPlus(0),
727
728 //V0A
729 f3dHistGenPtVsYVsMultV0AXiMinus(0),
730 f3dHistGenPtVsYVsMultV0AXiPlus(0),
731 f3dHistGenSelectedPtVsYVsMultV0AXiMinus(0),
732 f3dHistGenSelectedPtVsYVsMultV0AXiPlus(0),
733 f3dHistGenPtVsYCMSVsMultV0AXiMinus(0),
734 f3dHistGenPtVsYCMSVsMultV0AXiPlus(0),
735 f3dHistGenSelectedPtVsYCMSVsMultV0AXiMinus(0),
736 f3dHistGenSelectedPtVsYCMSVsMultV0AXiPlus(0),
737
738 //ZNA
739 f3dHistGenPtVsYVsMultZNAXiMinus(0),
740 f3dHistGenPtVsYVsMultZNAXiPlus(0),
741 f3dHistGenSelectedPtVsYVsMultZNAXiMinus(0),
742 f3dHistGenSelectedPtVsYVsMultZNAXiPlus(0),
743 f3dHistGenPtVsYCMSVsMultZNAXiMinus(0),
744 f3dHistGenPtVsYCMSVsMultZNAXiPlus(0),
745 f3dHistGenSelectedPtVsYCMSVsMultZNAXiMinus(0),
746 f3dHistGenSelectedPtVsYCMSVsMultZNAXiPlus(0),
747
748 //TRK
749 f3dHistGenPtVsYVsMultTRKXiMinus(0),
750 f3dHistGenPtVsYVsMultTRKXiPlus(0),
751 f3dHistGenSelectedPtVsYVsMultTRKXiMinus(0),
752 f3dHistGenSelectedPtVsYVsMultTRKXiPlus(0),
753 f3dHistGenPtVsYCMSVsMultTRKXiMinus(0),
754 f3dHistGenPtVsYCMSVsMultTRKXiPlus(0),
755 f3dHistGenSelectedPtVsYCMSVsMultTRKXiMinus(0),
756 f3dHistGenSelectedPtVsYCMSVsMultTRKXiPlus(0),
757
758 //SPD
759 f3dHistGenPtVsYVsMultSPDXiMinus(0),
760 f3dHistGenPtVsYVsMultSPDXiPlus(0),
761 f3dHistGenSelectedPtVsYVsMultSPDXiMinus(0),
762 f3dHistGenSelectedPtVsYVsMultSPDXiPlus(0),
763 f3dHistGenPtVsYCMSVsMultSPDXiMinus(0),
764 f3dHistGenPtVsYCMSVsMultSPDXiPlus(0),
765 f3dHistGenSelectedPtVsYCMSVsMultSPDXiMinus(0),
766 f3dHistGenSelectedPtVsYCMSVsMultSPDXiPlus(0),
767
768    fHistPVx(0),
769    fHistPVy(0),
770    fHistPVz(0),
771    fHistPVxAnalysis(0),
772    fHistPVyAnalysis(0),
773    fHistPVzAnalysis(0),
774    fHistPVxAnalysisHasHighPtLambda(0),
775    fHistPVyAnalysisHasHighPtLambda(0),
776    fHistPVzAnalysisHasHighPtLambda(0),
777    fHistSwappedV0Counter(0)
778 {
779    // Constructor
780   // Set Loose cuts or not here...
781   // REALLY LOOSE? Be careful when attempting to run over PbPb if fkRunV0Vertexer is set!
782   fV0Sels[0] =  33.  ;  // max allowed chi2
783   fV0Sels[1] =   0.02;  // min allowed impact parameter for the 1st daughter (LHC09a4 : 0.05)
784   fV0Sels[2] =   0.02;  // min allowed impact parameter for the 2nd daughter (LHC09a4 : 0.05)
785   fV0Sels[3] =   2.0 ;  // max allowed DCA between the daughter tracks       (LHC09a4 : 0.5)
786   fV0Sels[4] =   0.95;  // min allowed cosine of V0's pointing angle         (LHC09a4 : 0.99)
787   fV0Sels[5] =   0.5 ;  // min radius of the fiducial volume                 (LHC09a4 : 0.2)
788   fV0Sels[6] = 200.  ;  // max radius of the fiducial volume                 (LHC09a4 : 100.0)
789   // Output slot #0 writes into a TList container (Cascade)
790   DefineOutput(1, TList::Class());
791   DefineOutput(2, TTree::Class());
792 }
793
794
795 AliAnalysisTaskExtractPerformanceV0::~AliAnalysisTaskExtractPerformanceV0()
796 {
797 //------------------------------------------------
798 // DESTRUCTOR
799 //------------------------------------------------
800
801    if (fListHistV0){
802       delete fListHistV0;
803       fListHistV0 = 0x0;
804    }
805    if (fTree){
806       delete fTree;
807       fTree = 0x0;
808    }
809     //cleanup esd track cuts object too...
810    if (fESDtrackCuts){
811     delete fESDtrackCuts;
812     fESDtrackCuts = 0x0; 
813   }
814   
815   if (fUtils){
816     delete fUtils;
817     fUtils = 0x0;
818   }
819 }
820
821 //________________________________________________________________________
822 void AliAnalysisTaskExtractPerformanceV0::UserCreateOutputObjects()
823 {
824
825    OpenFile(2); 
826    // Called once
827
828 //------------------------------------------------
829
830    fTree = new TTree("fTree","V0Candidates");
831
832 //------------------------------------------------
833 // fTree Branch definitions - V0 Tree
834 //------------------------------------------------
835
836 //-----------BASIC-INFO---------------------------
837 /* 1*/   fTree->Branch("fTreeVariablePrimaryStatus",&fTreeVariablePrimaryStatus,"fTreeVariablePrimaryStatus/I");        
838 /* 2*/   fTree->Branch("fTreeVariablePrimaryStatusMother",&fTreeVariablePrimaryStatusMother,"fTreeVariablePrimaryStatusMother/I");      
839 /* 2*/   fTree->Branch("fTreeVariableChi2V0",&fTreeVariableChi2V0,"Chi2V0/F");
840 /* 3*/   fTree->Branch("fTreeVariableDcaV0Daughters",&fTreeVariableDcaV0Daughters,"fTreeVariableDcaV0Daughters/F");
841 /* 4*/   fTree->Branch("fTreeVariableDcaPosToPrimVertex",&fTreeVariableDcaPosToPrimVertex,"fTreeVariableDcaPosToPrimVertex/F");
842 /* 5*/   fTree->Branch("fTreeVariableDcaNegToPrimVertex",&fTreeVariableDcaNegToPrimVertex,"fTreeVariableDcaNegToPrimVertex/F");
843 /* 6*/   fTree->Branch("fTreeVariableV0Radius",&fTreeVariableV0Radius,"fTreeVariableV0Radius/F");
844 /* 7*/   fTree->Branch("fTreeVariablePt",&fTreeVariablePt,"fTreeVariablePt/F");
845 /* 7*/   fTree->Branch("fTreeVariablePtMC",&fTreeVariablePtMC,"fTreeVariablePtMC/F");
846 /* 8*/   fTree->Branch("fTreeVariableRapK0Short",&fTreeVariableRapK0Short,"fTreeVariableRapK0Short/F");
847 /* 9*/   fTree->Branch("fTreeVariableRapLambda",&fTreeVariableRapLambda,"fTreeVariableRapLambda/F");
848 /*10*/   fTree->Branch("fTreeVariableRapMC",&fTreeVariableRapMC,"fTreeVariableRapMC/F");
849 /*11*/   fTree->Branch("fTreeVariableInvMassK0s",&fTreeVariableInvMassK0s,"fTreeVariableInvMassK0s/F");
850 /*12*/   fTree->Branch("fTreeVariableInvMassLambda",&fTreeVariableInvMassLambda,"fTreeVariableInvMassLambda/F");
851 /*13*/   fTree->Branch("fTreeVariableInvMassAntiLambda",&fTreeVariableInvMassAntiLambda,"fTreeVariableInvMassAntiLambda/F");
852 /*14*/   fTree->Branch("fTreeVariableAlphaV0",&fTreeVariableAlphaV0,"fTreeVariableAlphaV0/F");
853 /*15*/   fTree->Branch("fTreeVariablePtArmV0",&fTreeVariablePtArmV0,"fTreeVariablePtArmV0/F");
854 /*16*/   fTree->Branch("fTreeVariableNegTransvMomentum",&fTreeVariableNegTransvMomentum,"fTreeVariableNegTransvMomentum/F");
855 /*17*/   fTree->Branch("fTreeVariablePosTransvMomentum",&fTreeVariablePosTransvMomentum,"fTreeVariablePosTransvMomentum/F");
856 /*18*/   fTree->Branch("fTreeVariableNegTransvMomentumMC",&fTreeVariableNegTransvMomentumMC,"fTreeVariableNegTransvMomentumMC/F");
857 /*19*/   fTree->Branch("fTreeVariablePosTransvMomentumMC",&fTreeVariablePosTransvMomentumMC,"fTreeVariablePosTransvMomentumMC/F");
858 /*20*/   fTree->Branch("fTreeVariableLeastNbrCrossedRows",&fTreeVariableLeastNbrCrossedRows,"fTreeVariableLeastNbrCrossedRows/I");
859 /*21*/   fTree->Branch("fTreeVariableLeastRatioCrossedRowsOverFindable",&fTreeVariableLeastRatioCrossedRowsOverFindable,"fTreeVariableLeastRatioCrossedRowsOverFindable/F");
860 /*22*/   fTree->Branch("fTreeVariablePID",&fTreeVariablePID,"fTreeVariablePID/I");
861 /*23*/   fTree->Branch("fTreeVariablePIDPositive",&fTreeVariablePIDPositive,"fTreeVariablePIDPositive/I");
862 /*24*/   fTree->Branch("fTreeVariablePIDNegative",&fTreeVariablePIDNegative,"fTreeVariablePIDNegative/I");
863 /*25*/   fTree->Branch("fTreeVariablePIDMother",&fTreeVariablePIDMother,"fTreeVariablePIDMother/I");
864 /*26*/   fTree->Branch("fTreeVariablePtXiMother",&fTreeVariablePtMother,"fTreeVariablePtMother/F");
865 /*27*/   fTree->Branch("fTreeVariableV0CosineOfPointingAngle",&fTreeVariableV0CosineOfPointingAngle,"fTreeVariableV0CosineOfPointingAngle/F");
866 //-----------MULTIPLICITY-INFO--------------------
867 /*28*/   fTree->Branch("fTreeVariableMultiplicity",&fTreeVariableMultiplicity,"fTreeVariableMultiplicity/I");
868 /*28*/   fTree->Branch("fTreeVariableMultiplicityMC",&fTreeVariableMultiplicityMC,"fTreeVariableMultiplicityMC/I");
869   /*17*/        fTree->Branch("fTreeVariableMultiplicityV0A",&fTreeVariableMultiplicityV0A,"fTreeVariableMultiplicityV0A/I");
870   /*17*/        fTree->Branch("fTreeVariableMultiplicityZNA",&fTreeVariableMultiplicityZNA,"fTreeVariableMultiplicityZNA/I");
871   /*17*/        fTree->Branch("fTreeVariableMultiplicityTRK",&fTreeVariableMultiplicityTRK,"fTreeVariableMultiplicityTRK/I");
872   /*17*/        fTree->Branch("fTreeVariableMultiplicitySPD",&fTreeVariableMultiplicitySPD,"fTreeVariableMultiplicitySPD/I");
873 //------------------------------------------------
874 /*29*/   fTree->Branch("fTreeVariableDistOverTotMom",&fTreeVariableDistOverTotMom,"fTreeVariableDistOverTotMom/F");
875 /*30*/   fTree->Branch("fTreeVariableNSigmasPosProton",&fTreeVariableNSigmasPosProton,"fTreeVariableNSigmasPosProton/F");
876 /*31*/   fTree->Branch("fTreeVariableNSigmasPosPion",&fTreeVariableNSigmasPosPion,"fTreeVariableNSigmasPosPion/F");
877 /*32*/   fTree->Branch("fTreeVariableNSigmasNegProton",&fTreeVariableNSigmasNegProton,"fTreeVariableNSigmasNegProton/F");
878 /*33*/   fTree->Branch("fTreeVariableNSigmasNegPion",&fTreeVariableNSigmasNegPion,"fTreeVariableNSigmasNegPion/F");
879 //------------------------------------------------
880 /*34*/   fTree->Branch("fTreeVariableNegEta",&fTreeVariableNegEta,"fTreeVariableNegEta/F");
881 /*35*/   fTree->Branch("fTreeVariablePosEta",&fTreeVariablePosEta,"fTreeVariablePosEta/F");
882 /*36*/   fTree->Branch("fTreeVariableV0CreationRadius",&fTreeVariableV0CreationRadius,"fTreeVariableV0CreationRadius/F");
883   
884     if ( fkLightWeight == kFALSE ){ // these are debugging branches!
885 /*37*/   fTree->Branch("fTreeVariableIndexStatus",&fTreeVariableIndexStatus,"fTreeVariableIndexStatus/I");
886 /*38*/   fTree->Branch("fTreeVariableIndexStatusMother",&fTreeVariableIndexStatusMother,"fTreeVariableIndexStatusMother/I");
887     }
888
889 /*39*/   fTree->Branch("fTreeVariableRunNumber",&fTreeVariableRunNumber,"fTreeVariableRunNumber/I");
890 /*40*/   fTree->Branch("fTreeVariableEventNumber",&fTreeVariableEventNumber,"fTreeVariableEventNumber/l");
891
892     if ( fkLightWeight == kFALSE ){ // these are debugging branches!
893 /*34*/   fTree->Branch("fTreeVariableVertexZ",&fTreeVariableVertexZ,"fTreeVariableVertexZ/F");
894     }
895       
896     if ( fkLightWeight == kFALSE ){ // these are debugging branches!
897 //-----------FOR CTAU DEBUGGING: Full Phase Space + Decay Position Info 
898         fTree->Branch("fTreeVariableV0x",&fTreeVariableV0x,"fTreeVariableV0x/F");
899         fTree->Branch("fTreeVariableV0y",&fTreeVariableV0y,"fTreeVariableV0y/F");
900         fTree->Branch("fTreeVariableV0z",&fTreeVariableV0z,"fTreeVariableV0z/F");
901
902         fTree->Branch("fTreeVariableV0Px",&fTreeVariableV0Px,"fTreeVariableV0Px/F");
903         fTree->Branch("fTreeVariableV0Py",&fTreeVariableV0Py,"fTreeVariableV0Py/F");
904         fTree->Branch("fTreeVariableV0Pz",&fTreeVariableV0Pz,"fTreeVariableV0Pz/F");
905
906 //-----------FOR CTAU DEBUGGING: Full Phase Space + Decay Position Info, perfect info from MC
907         fTree->Branch("fTreeVariableMCV0x",&fTreeVariableMCV0x,"fTreeVariableMCV0x/F");
908         fTree->Branch("fTreeVariableMCV0y",&fTreeVariableMCV0y,"fTreeVariableMCV0y/F");
909         fTree->Branch("fTreeVariableMCV0z",&fTreeVariableMCV0z,"fTreeVariableMCV0z/F");
910
911         fTree->Branch("fTreeVariableMCV0Px",&fTreeVariableMCV0Px,"fTreeVariableMCV0Px/F");
912         fTree->Branch("fTreeVariableMCV0Py",&fTreeVariableMCV0Py,"fTreeVariableMCV0Py/F");
913         fTree->Branch("fTreeVariableMCV0Pz",&fTreeVariableMCV0Pz,"fTreeVariableMCV0Pz/F");
914
915 //-----------FOR CTAU DEBUGGING: Primary vertex info 
916         fTree->Branch("fTreeVariablePVx",&fTreeVariablePVx,"fTreeVariablePVx/F");
917         fTree->Branch("fTreeVariablePVy",&fTreeVariablePVy,"fTreeVariablePVy/F");
918         fTree->Branch("fTreeVariablePVz",&fTreeVariablePVz,"fTreeVariablePVz/F");
919
920         fTree->Branch("fTreeVariableMCPVx",&fTreeVariableMCPVx,"fTreeVariableMCPVx/F");
921         fTree->Branch("fTreeVariableMCPVy",&fTreeVariableMCPVy,"fTreeVariableMCPVy/F");
922         fTree->Branch("fTreeVariableMCPVz",&fTreeVariableMCPVz,"fTreeVariableMCPVz/F");
923     }
924
925         fTree->Branch("fTreeVariableIsNonInjected",&fTreeVariableIsNonInjected,"fTreeVariableIsNonInjected/O"); //O for bOOlean...
926   
927   if ( fkLightWeight == kFALSE ){ // these are debugging branches!
928     fTree->Branch("fTreeVariableNegTrackStatus",&fTreeVariableNegTrackStatus,"fTreeVariableNegTrackStatus/l");
929     fTree->Branch("fTreeVariablePosTrackStatus",&fTreeVariablePosTrackStatus,"fTreeVariablePosTrackStatus/l");
930     fTree->Branch("fTreeVariableNegPhysicalStatus",&fTreeVariableNegPhysicalStatus,"fTreeVariableNegPhysicalStatus/I");
931     fTree->Branch("fTreeVariablePosPhysicalStatus",&fTreeVariablePosPhysicalStatus,"fTreeVariablePosPhysicalStatus/I");
932   }
933   
934 //------------------------------------------------
935 // Particle Identification Setup
936 //------------------------------------------------
937   
938   AliAnalysisManager *man=AliAnalysisManager::GetAnalysisManager();
939   AliInputEventHandler* inputHandler = (AliInputEventHandler*) (man->GetInputEventHandler());
940   fPIDResponse = inputHandler->GetPIDResponse();
941   
942   // Multiplicity
943   
944   if(! fESDtrackCuts ){
945     fESDtrackCuts = new AliESDtrackCuts();
946   }
947   if(! fUtils ){
948     fUtils = new AliAnalysisUtils();
949   }
950
951 //------------------------------------------------
952 // V0 Multiplicity Histograms
953 //------------------------------------------------
954
955    // Create histograms
956    OpenFile(1);
957    fListHistV0 = new TList();
958    fListHistV0->SetOwner();  // See http://root.cern.ch/root/html/TCollection.html#TCollection:SetOwner
959
960
961    if(! fHistV0MultiplicityBeforeTrigSel) {
962       fHistV0MultiplicityBeforeTrigSel = new TH1F("fHistV0MultiplicityBeforeTrigSel", 
963          "V0s per event (before Trig. Sel.);Nbr of V0s/Evt;Events", 
964          25, 0, 25);
965       fListHistV0->Add(fHistV0MultiplicityBeforeTrigSel);
966    }
967            
968    if(! fHistV0MultiplicityForTrigEvt) {
969       fHistV0MultiplicityForTrigEvt = new TH1F("fHistV0MultiplicityForTrigEvt", 
970          "V0s per event (for triggered evt);Nbr of V0s/Evt;Events", 
971          25, 0, 25);
972       fListHistV0->Add(fHistV0MultiplicityForTrigEvt);
973    }
974
975    if(! fHistV0MultiplicityForSelEvt) {
976       fHistV0MultiplicityForSelEvt = new TH1F("fHistV0MultiplicityForSelEvt", 
977          "V0s per event;Nbr of V0s/Evt;Events", 
978          25, 0, 25);
979       fListHistV0->Add(fHistV0MultiplicityForSelEvt);
980    }
981
982    if(! fHistV0MultiplicityForSelEvtNoTPCOnly) {
983       fHistV0MultiplicityForSelEvtNoTPCOnly = new TH1F("fHistV0MultiplicityForSelEvtNoTPCOnly", 
984          "V0s per event;Nbr of V0s/Evt;Events", 
985          25, 0, 25);
986       fListHistV0->Add(fHistV0MultiplicityForSelEvtNoTPCOnly);
987    }
988    if(! fHistV0MultiplicityForSelEvtNoTPCOnlyNoPileup) {
989       fHistV0MultiplicityForSelEvtNoTPCOnlyNoPileup = new TH1F("fHistV0MultiplicityForSelEvtNoTPCOnlyNoPileup", 
990          "V0s per event;Nbr of V0s/Evt;Events", 
991          25, 0, 25);
992       fListHistV0->Add(fHistV0MultiplicityForSelEvtNoTPCOnlyNoPileup);
993    }
994
995 //------------------------------------------------
996 // Track Multiplicity Histograms
997 //------------------------------------------------
998
999    if(! fHistMultiplicityBeforeTrigSel) {
1000       fHistMultiplicityBeforeTrigSel = new TH1F("fHistMultiplicityBeforeTrigSel", 
1001          "Tracks per event;Nbr of Tracks;Events", 
1002          200, 0, 200);          
1003       fListHistV0->Add(fHistMultiplicityBeforeTrigSel);
1004    }
1005    if(! fHistMultiplicityForTrigEvt) {
1006       fHistMultiplicityForTrigEvt = new TH1F("fHistMultiplicityForTrigEvt", 
1007          "Tracks per event;Nbr of Tracks;Events", 
1008          200, 0, 200);          
1009       fListHistV0->Add(fHistMultiplicityForTrigEvt);
1010    }
1011    if(! fHistMultiplicity) {
1012       fHistMultiplicity = new TH1F("fHistMultiplicity", 
1013          "Tracks per event;Nbr of Tracks;Events", 
1014          200, 0, 200);          
1015       fListHistV0->Add(fHistMultiplicity);
1016    }
1017    if(! fHistMultiplicityNoTPCOnly) {
1018       fHistMultiplicityNoTPCOnly = new TH1F("fHistMultiplicityNoTPCOnly", 
1019          "Tracks per event;Nbr of Tracks;Events", 
1020          200, 0, 200);          
1021       fListHistV0->Add(fHistMultiplicityNoTPCOnly);
1022    }
1023    if(! fHistMultiplicityNoTPCOnlyNoPileup) {
1024       fHistMultiplicityNoTPCOnlyNoPileup = new TH1F("fHistMultiplicityNoTPCOnlyNoPileup", 
1025          "Tracks per event;Nbr of Tracks;Events", 
1026          200, 0, 200);          
1027       fListHistV0->Add(fHistMultiplicityNoTPCOnlyNoPileup);
1028    }
1029   
1030   //V0A Centrality (if PbPb / pPb)
1031   if(! fHistMultiplicityV0ABeforeTrigSel) {
1032     fHistMultiplicityV0ABeforeTrigSel = new TH1F("fHistMultiplicityV0ABeforeTrigSel",
1033                                                  "Centrality Distribution: V0A;V0A Centrality;Events",
1034                                                  200, 0, 200);
1035     fListHistV0->Add(fHistMultiplicityV0ABeforeTrigSel);
1036   }
1037   if(! fHistMultiplicityV0AForTrigEvt) {
1038     fHistMultiplicityV0AForTrigEvt = new TH1F("fHistMultiplicityV0AForTrigEvt",
1039                                               "Centrality Distribution: V0A;V0A Centrality;Events",
1040                                               200, 0, 200);
1041     fListHistV0->Add(fHistMultiplicityV0AForTrigEvt);
1042   }
1043   if(! fHistMultiplicityV0A) {
1044     fHistMultiplicityV0A = new TH1F("fHistMultiplicityV0A",
1045                                     "Centrality Distribution: V0A;V0A Centrality;Events",
1046                                     200, 0, 200);
1047     fListHistV0->Add(fHistMultiplicityV0A);
1048   }
1049   if(! fHistMultiplicityV0ANoTPCOnly) {
1050     fHistMultiplicityV0ANoTPCOnly = new TH1F("fHistMultiplicityV0ANoTPCOnly",
1051                                              "Centrality Distribution: V0A;V0A Centrality;Events",
1052                                              200, 0, 200);
1053     fListHistV0->Add(fHistMultiplicityV0ANoTPCOnly);
1054   }
1055   if(! fHistMultiplicityV0ANoTPCOnlyNoPileup) {
1056     fHistMultiplicityV0ANoTPCOnlyNoPileup = new TH1F("fHistMultiplicityV0ANoTPCOnlyNoPileup",
1057                                                      "Centrality Distribution: V0A;V0A Centrality;Events",
1058                                                      200, 0, 200);
1059     fListHistV0->Add(fHistMultiplicityV0ANoTPCOnlyNoPileup);
1060   }
1061   
1062   //ZNA Centrality (if PbPb / pPb)
1063   if(! fHistMultiplicityZNABeforeTrigSel) {
1064     fHistMultiplicityZNABeforeTrigSel = new TH1F("fHistMultiplicityZNABeforeTrigSel",
1065                                                  "Centrality Distribution: ZNA;ZNA Centrality;Events",
1066                                                  200, 0, 200);
1067     fListHistV0->Add(fHistMultiplicityZNABeforeTrigSel);
1068   }
1069   if(! fHistMultiplicityZNAForTrigEvt) {
1070     fHistMultiplicityZNAForTrigEvt = new TH1F("fHistMultiplicityZNAForTrigEvt",
1071                                               "Centrality Distribution: ZNA;ZNA Centrality;Events",
1072                                               200, 0, 200);
1073     fListHistV0->Add(fHistMultiplicityZNAForTrigEvt);
1074   }
1075   if(! fHistMultiplicityZNA) {
1076     fHistMultiplicityZNA = new TH1F("fHistMultiplicityZNA",
1077                                     "Centrality Distribution: ZNA;ZNA Centrality;Events",
1078                                     200, 0, 200);
1079     fListHistV0->Add(fHistMultiplicityZNA);
1080   }
1081   if(! fHistMultiplicityZNANoTPCOnly) {
1082     fHistMultiplicityZNANoTPCOnly = new TH1F("fHistMultiplicityZNANoTPCOnly",
1083                                              "Centrality Distribution: ZNA;ZNA Centrality;Events",
1084                                              200, 0, 200);
1085     fListHistV0->Add(fHistMultiplicityZNANoTPCOnly);
1086   }
1087   if(! fHistMultiplicityZNANoTPCOnlyNoPileup) {
1088     fHistMultiplicityZNANoTPCOnlyNoPileup = new TH1F("fHistMultiplicityZNANoTPCOnlyNoPileup",
1089                                                      "Centrality Distribution: ZNA;ZNA Centrality;Events",
1090                                                      200, 0, 200);
1091     fListHistV0->Add(fHistMultiplicityZNANoTPCOnlyNoPileup);
1092   }
1093   
1094   //TRK Centrality (if PbPb / pPb)
1095   if(! fHistMultiplicityTRKBeforeTrigSel) {
1096     fHistMultiplicityTRKBeforeTrigSel = new TH1F("fHistMultiplicityTRKBeforeTrigSel",
1097                                                  "Centrality Distribution: TRK;TRK Centrality;Events",
1098                                                  200, 0, 200);
1099     fListHistV0->Add(fHistMultiplicityTRKBeforeTrigSel);
1100   }
1101   if(! fHistMultiplicityTRKForTrigEvt) {
1102     fHistMultiplicityTRKForTrigEvt = new TH1F("fHistMultiplicityTRKForTrigEvt",
1103                                               "Centrality Distribution: TRK;TRK Centrality;Events",
1104                                               200, 0, 200);
1105     fListHistV0->Add(fHistMultiplicityTRKForTrigEvt);
1106   }
1107   if(! fHistMultiplicityTRK) {
1108     fHistMultiplicityTRK = new TH1F("fHistMultiplicityTRK",
1109                                     "Centrality Distribution: TRK;TRK Centrality;Events",
1110                                     200, 0, 200);
1111     fListHistV0->Add(fHistMultiplicityTRK);
1112   }
1113   if(! fHistMultiplicityTRKNoTPCOnly) {
1114     fHistMultiplicityTRKNoTPCOnly = new TH1F("fHistMultiplicityTRKNoTPCOnly",
1115                                              "Centrality Distribution: TRK;TRK Centrality;Events",
1116                                              200, 0, 200);
1117     fListHistV0->Add(fHistMultiplicityTRKNoTPCOnly);
1118   }
1119   if(! fHistMultiplicityTRKNoTPCOnlyNoPileup) {
1120     fHistMultiplicityTRKNoTPCOnlyNoPileup = new TH1F("fHistMultiplicityTRKNoTPCOnlyNoPileup",
1121                                                      "Centrality Distribution: TRK;TRK Centrality;Events",
1122                                                      200, 0, 200);
1123     fListHistV0->Add(fHistMultiplicityTRKNoTPCOnlyNoPileup);
1124   }
1125   
1126   //SPD Centrality (if PbPb / pPb)
1127   if(! fHistMultiplicitySPDBeforeTrigSel) {
1128     fHistMultiplicitySPDBeforeTrigSel = new TH1F("fHistMultiplicitySPDBeforeTrigSel",
1129                                                  "Centrality Distribution: SPD;SPD Centrality;Events",
1130                                                  200, 0, 200);
1131     fListHistV0->Add(fHistMultiplicitySPDBeforeTrigSel);
1132   }
1133   if(! fHistMultiplicitySPDForTrigEvt) {
1134     fHistMultiplicitySPDForTrigEvt = new TH1F("fHistMultiplicitySPDForTrigEvt",
1135                                               "Centrality Distribution: SPD;SPD Centrality;Events",
1136                                               200, 0, 200);
1137     fListHistV0->Add(fHistMultiplicitySPDForTrigEvt);
1138   }
1139   if(! fHistMultiplicitySPD) {
1140     fHistMultiplicitySPD = new TH1F("fHistMultiplicitySPD",
1141                                     "Centrality Distribution: SPD;SPD Centrality;Events",
1142                                     200, 0, 200);
1143     fListHistV0->Add(fHistMultiplicitySPD);
1144   }
1145   if(! fHistMultiplicitySPDNoTPCOnly) {
1146     fHistMultiplicitySPDNoTPCOnly = new TH1F("fHistMultiplicitySPDNoTPCOnly",
1147                                              "Centrality Distribution: SPD;SPD Centrality;Events",
1148                                              200, 0, 200);
1149     fListHistV0->Add(fHistMultiplicitySPDNoTPCOnly);
1150   }
1151   if(! fHistMultiplicitySPDNoTPCOnlyNoPileup) {
1152     fHistMultiplicitySPDNoTPCOnlyNoPileup = new TH1F("fHistMultiplicitySPDNoTPCOnlyNoPileup",
1153                                                      "Centrality Distribution: SPD;SPD Centrality;Events",
1154                                                      200, 0, 200);
1155     fListHistV0->Add(fHistMultiplicitySPDNoTPCOnlyNoPileup);
1156   }
1157   
1158
1159   
1160
1161   //Raw Data for J/Psi paper Technique
1162         //TH2F    *f2dHistMultiplicityVsTrueBeforeTrigSel;              //! multiplicity distribution    
1163         //TH2F    *f2dHistMultiplicityVsTrueForTrigEvt;                         //! multiplicity distribution
1164         //TH2F    *f2dHistMultiplicityVsTrue;                                                   //! multiplicity distribution
1165         //TH2F    *f2dHistMultiplicityVsTrueNoTPCOnly;                          //! multiplicity distribution
1166         //TH2F    *f2dHistMultiplicityVsTrueNoTPCOnlyNoPileup;                  //! multiplicity distribution
1167
1168    if(! f2dHistMultiplicityVsTrueBeforeTrigSel) {
1169       f2dHistMultiplicityVsTrueBeforeTrigSel = new TH2F("f2dHistMultiplicityVsTrueBeforeTrigSel", 
1170          "Tracks per event", 200, 0, 200, 200, 0, 200);                 
1171       fListHistV0->Add(f2dHistMultiplicityVsTrueBeforeTrigSel);
1172    }
1173    if(! f2dHistMultiplicityVsTrueForTrigEvt) {
1174       f2dHistMultiplicityVsTrueForTrigEvt = new TH2F("f2dHistMultiplicityVsTrueForTrigEvt", 
1175          "Tracks per event", 200, 0, 200, 200, 0, 200);                 
1176       fListHistV0->Add(f2dHistMultiplicityVsTrueForTrigEvt);
1177    }
1178    if(! f2dHistMultiplicityVsTrue) {
1179       f2dHistMultiplicityVsTrue = new TH2F("f2dHistMultiplicityVsTrue", 
1180          "Tracks per event", 200, 0, 200, 200, 0, 200);                 
1181       fListHistV0->Add(f2dHistMultiplicityVsTrue);
1182    }
1183    if(! f2dHistMultiplicityVsTrueNoTPCOnly) {
1184       f2dHistMultiplicityVsTrueNoTPCOnly = new TH2F("f2dHistMultiplicityVsTrueNoTPCOnly", 
1185          "Tracks per event", 200, 0, 200, 200, 0, 200);                 
1186       fListHistV0->Add(f2dHistMultiplicityVsTrueNoTPCOnly);
1187    }
1188    if(! f2dHistMultiplicityVsTrueNoTPCOnlyNoPileup) {
1189       f2dHistMultiplicityVsTrueNoTPCOnlyNoPileup = new TH2F("f2dHistMultiplicityVsTrueNoTPCOnlyNoPileup", 
1190          "Tracks per event", 200, 0, 200, 200, 0, 200);                 
1191       fListHistV0->Add(f2dHistMultiplicityVsTrueNoTPCOnlyNoPileup);
1192    }
1193
1194
1195   //Raw Data for Vertex Z position estimator change
1196         //TH2F    *f2dHistMultiplicityVsVertexZBeforeTrigSel;           //! multiplicity distribution    
1197         //TH2F    *f2dHistMultiplicityVsVertexZForTrigEvt;                      //! multiplicity distribution
1198         //TH2F    *f2dHistMultiplicityVsVertexZ;                                                //! multiplicity distribution
1199         //TH2F    *f2dHistMultiplicityVsVertexZNoTPCOnly;                               //! multiplicity distribution
1200         //TH2F    *f2dHistMultiplicityVsVertexZNoTPCOnlyNoPileup;                       //! multiplicity distribution
1201
1202    if(! f2dHistMultiplicityVsVertexZBeforeTrigSel) {
1203       f2dHistMultiplicityVsVertexZBeforeTrigSel = new TH2F("f2dHistMultiplicityVsVertexZBeforeTrigSel", 
1204          "Tracks per event", 200, 0, 200,400, -20, 20);                 
1205       fListHistV0->Add(f2dHistMultiplicityVsVertexZBeforeTrigSel);
1206    }
1207    if(! f2dHistMultiplicityVsVertexZForTrigEvt) {
1208       f2dHistMultiplicityVsVertexZForTrigEvt = new TH2F("f2dHistMultiplicityVsVertexZForTrigEvt", 
1209          "Tracks per event", 200, 0, 200, 400, -20, 20);                
1210       fListHistV0->Add(f2dHistMultiplicityVsVertexZForTrigEvt);
1211    }
1212    if(! f2dHistMultiplicityVsVertexZ) {
1213       f2dHistMultiplicityVsVertexZ = new TH2F("f2dHistMultiplicityVsVertexZ", 
1214          "Tracks per event", 200, 0, 200, 400, -20, 20);                
1215       fListHistV0->Add(f2dHistMultiplicityVsVertexZ);
1216    }
1217    if(! f2dHistMultiplicityVsVertexZNoTPCOnly) {
1218       f2dHistMultiplicityVsVertexZNoTPCOnly = new TH2F("f2dHistMultiplicityVsVertexZNoTPCOnly", 
1219          "Tracks per event", 200, 0, 200, 400, -20, 20);                
1220       fListHistV0->Add(f2dHistMultiplicityVsVertexZNoTPCOnly);
1221    }
1222    if(! f2dHistMultiplicityVsVertexZNoTPCOnlyNoPileup) {
1223       f2dHistMultiplicityVsVertexZNoTPCOnlyNoPileup = new TH2F("f2dHistMultiplicityVsVertexZNoTPCOnlyNoPileup", 
1224          "Tracks per event", 200, 0, 200, 400, -20, 20);                
1225       fListHistV0->Add(f2dHistMultiplicityVsVertexZNoTPCOnlyNoPileup);
1226    }
1227
1228 //Generated PVz test
1229
1230 //   TH1F      *fHistGenVertexZBeforeTrigSel;     //! multiplicity distribution      
1231 //   TH1F      *fHistGenVertexZForTrigEvt;        //! multiplicity distribution
1232 //   TH1F      *fHistGenVertexZ;                  //! multiplicity distribution
1233 //   TH1F      *fHistGenVertexZNoTPCOnly;         //! multiplicity distribution
1234 //   TH1F      *fHistGenVertexZNoTPCOnlyNoPileup; //! multiplicity distribution
1235
1236    if(! fHistGenVertexZBeforeTrigSel) {
1237          fHistGenVertexZBeforeTrigSel = new TH1F("fHistGenVertexZBeforeTrigSel", 
1238             "PV z position;Nbr of Evts;z", 
1239             400, -20, 20);       
1240       fListHistV0->Add(fHistGenVertexZBeforeTrigSel);
1241    }
1242    if(! fHistGenVertexZForTrigEvt) {
1243          fHistGenVertexZForTrigEvt = new TH1F("fHistGenVertexZForTrigEvt", 
1244             "PV z position;Nbr of Evts;z", 
1245             400, -20, 20);       
1246       fListHistV0->Add(fHistGenVertexZForTrigEvt);
1247    }
1248    if(! fHistGenVertexZ) {
1249          fHistGenVertexZ = new TH1F("fHistGenVertexZ", 
1250             "PV z position;Nbr of Evts;z", 
1251             400, -20, 20);       
1252       fListHistV0->Add(fHistGenVertexZ);
1253    }
1254    if(! fHistGenVertexZNoTPCOnly) {
1255          fHistGenVertexZNoTPCOnly = new TH1F("fHistGenVertexZNoTPCOnly", 
1256             "PV z position;Nbr of Evts;z", 
1257             400, -20, 20);       
1258       fListHistV0->Add(fHistGenVertexZNoTPCOnly);
1259    }
1260    if(! fHistGenVertexZNoTPCOnlyNoPileup) {
1261          fHistGenVertexZNoTPCOnlyNoPileup = new TH1F("fHistGenVertexZNoTPCOnlyNoPileup", 
1262             "PV z position;Nbr of Evts;z", 
1263             400, -20, 20);       
1264       fListHistV0->Add(fHistGenVertexZNoTPCOnlyNoPileup);
1265    }
1266
1267
1268 //------------------------------------------------
1269 // Generated Particle Histograms
1270 //------------------------------------------------
1271
1272    Int_t lCustomNBins = 200; 
1273    Double_t lCustomPtUpperLimit = 20; 
1274    Int_t lCustomNBinsMultiplicity = 100;
1275
1276 //----------------------------------
1277 // Raw Generated (Pre-physics-selection)
1278 //----------------------------------
1279
1280 //--- 3D Histo (Pt, Y, Multiplicity), V0M Version (default) 
1281
1282    if(! f3dHistPrimRawPtVsYVsMultLambda) {
1283       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);
1284       fListHistV0->Add(f3dHistPrimRawPtVsYVsMultLambda);
1285    }
1286    if(! f3dHistPrimRawPtVsYVsMultAntiLambda) {
1287       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);
1288       fListHistV0->Add(f3dHistPrimRawPtVsYVsMultAntiLambda);
1289    }
1290    if(! f3dHistPrimRawPtVsYVsMultK0Short) {
1291       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);
1292       fListHistV0->Add(f3dHistPrimRawPtVsYVsMultK0Short);
1293    }
1294
1295    if(! f3dHistPrimRawPtVsYCMSVsMultLambda) {
1296       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);
1297       fListHistV0->Add(f3dHistPrimRawPtVsYCMSVsMultLambda);
1298    }
1299    if(! f3dHistPrimRawPtVsYCMSVsMultAntiLambda) {
1300       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);
1301       fListHistV0->Add(f3dHistPrimRawPtVsYCMSVsMultAntiLambda);
1302    }
1303    if(! f3dHistPrimRawPtVsYCMSVsMultK0Short) {
1304       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);
1305       fListHistV0->Add(f3dHistPrimRawPtVsYCMSVsMultK0Short);
1306    }
1307   
1308 //--- 3D Histo (Pt, Y, Multiplicity), V0A Version
1309   
1310   if(! f3dHistPrimRawPtVsYVsMultV0ALambda) {
1311     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);
1312     if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimRawPtVsYVsMultV0ALambda);
1313   }
1314   if(! f3dHistPrimRawPtVsYVsMultV0AAntiLambda) {
1315     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);
1316     if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimRawPtVsYVsMultV0AAntiLambda);
1317   }
1318   if(! f3dHistPrimRawPtVsYVsMultV0AK0Short) {
1319     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);
1320     if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimRawPtVsYVsMultV0AK0Short);
1321   }
1322   
1323   if(! f3dHistPrimRawPtVsYCMSVsMultV0ALambda) {
1324     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);
1325     if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimRawPtVsYCMSVsMultV0ALambda);
1326   }
1327   if(! f3dHistPrimRawPtVsYCMSVsMultV0AAntiLambda) {
1328     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);
1329     if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimRawPtVsYCMSVsMultV0AAntiLambda);
1330   }
1331   if(! f3dHistPrimRawPtVsYCMSVsMultV0AK0Short) {
1332     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);
1333     if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimRawPtVsYCMSVsMultV0AK0Short);
1334   }
1335   
1336   //--- 3D Histo (Pt, Y, Multiplicity), ZNA Version
1337   
1338   if(! f3dHistPrimRawPtVsYVsMultZNALambda) {
1339     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);
1340     if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimRawPtVsYVsMultZNALambda);
1341   }
1342   if(! f3dHistPrimRawPtVsYVsMultZNAAntiLambda) {
1343     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);
1344     if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimRawPtVsYVsMultZNAAntiLambda);
1345   }
1346   if(! f3dHistPrimRawPtVsYVsMultZNAK0Short) {
1347     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);
1348     if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimRawPtVsYVsMultZNAK0Short);
1349   }
1350   
1351   if(! f3dHistPrimRawPtVsYCMSVsMultZNALambda) {
1352     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);
1353     if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimRawPtVsYCMSVsMultZNALambda);
1354   }
1355   if(! f3dHistPrimRawPtVsYCMSVsMultZNAAntiLambda) {
1356     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);
1357     if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimRawPtVsYCMSVsMultZNAAntiLambda);
1358   }
1359   if(! f3dHistPrimRawPtVsYCMSVsMultZNAK0Short) {
1360     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);
1361     if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimRawPtVsYCMSVsMultZNAK0Short);
1362   }
1363   
1364   //--- 3D Histo (Pt, Y, Multiplicity), TRK Version
1365   
1366   if(! f3dHistPrimRawPtVsYVsMultTRKLambda) {
1367     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);
1368     if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimRawPtVsYVsMultTRKLambda);
1369   }
1370   if(! f3dHistPrimRawPtVsYVsMultTRKAntiLambda) {
1371     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);
1372     if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimRawPtVsYVsMultTRKAntiLambda);
1373   }
1374   if(! f3dHistPrimRawPtVsYVsMultTRKK0Short) {
1375     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);
1376     if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimRawPtVsYVsMultTRKK0Short);
1377   }
1378   
1379   if(! f3dHistPrimRawPtVsYCMSVsMultTRKLambda) {
1380     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);
1381     if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimRawPtVsYCMSVsMultTRKLambda);
1382   }
1383   if(! f3dHistPrimRawPtVsYCMSVsMultTRKAntiLambda) {
1384     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);
1385     if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimRawPtVsYCMSVsMultTRKAntiLambda);
1386   }
1387   if(! f3dHistPrimRawPtVsYCMSVsMultTRKK0Short) {
1388     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);
1389     if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimRawPtVsYCMSVsMultTRKK0Short);
1390   }
1391   
1392   //--- 3D Histo (Pt, Y, Multiplicity), SPD Version
1393   
1394   if(! f3dHistPrimRawPtVsYVsMultSPDLambda) {
1395     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);
1396     if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimRawPtVsYVsMultSPDLambda);
1397   }
1398   if(! f3dHistPrimRawPtVsYVsMultSPDAntiLambda) {
1399     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);
1400     if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimRawPtVsYVsMultSPDAntiLambda);
1401   }
1402   if(! f3dHistPrimRawPtVsYVsMultSPDK0Short) {
1403     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);
1404     if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimRawPtVsYVsMultSPDK0Short);
1405   }
1406   
1407   if(! f3dHistPrimRawPtVsYCMSVsMultSPDLambda) {
1408     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);
1409     if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimRawPtVsYCMSVsMultSPDLambda);
1410   }
1411   if(! f3dHistPrimRawPtVsYCMSVsMultSPDAntiLambda) {
1412     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);
1413     if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimRawPtVsYCMSVsMultSPDAntiLambda);
1414   }
1415   if(! f3dHistPrimRawPtVsYCMSVsMultSPDK0Short) {
1416     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);
1417     if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimRawPtVsYCMSVsMultSPDK0Short);
1418   }
1419   
1420   
1421
1422 //---> Non-injected particles
1423
1424    if(! f3dHistPrimRawPtVsYVsMultNonInjLambda) {
1425       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);
1426       fListHistV0->Add(f3dHistPrimRawPtVsYVsMultNonInjLambda);
1427    }
1428    if(! f3dHistPrimRawPtVsYVsMultNonInjAntiLambda) {
1429       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);
1430       fListHistV0->Add(f3dHistPrimRawPtVsYVsMultNonInjAntiLambda);
1431    }
1432    if(! f3dHistPrimRawPtVsYVsMultNonInjK0Short) {
1433       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);
1434       fListHistV0->Add(f3dHistPrimRawPtVsYVsMultNonInjK0Short);
1435    }
1436
1437 //--- 3D Histo (Pt, Y, MultiplicityMC)  
1438
1439    if(! f3dHistPrimRawPtVsYVsMultMCLambda) {
1440       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);
1441       fListHistV0->Add(f3dHistPrimRawPtVsYVsMultMCLambda);
1442    }
1443    if(! f3dHistPrimRawPtVsYVsMultMCAntiLambda) {
1444       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);
1445       fListHistV0->Add(f3dHistPrimRawPtVsYVsMultMCAntiLambda);
1446    }
1447    if(! f3dHistPrimRawPtVsYVsMultMCK0Short) {
1448       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);
1449       fListHistV0->Add(f3dHistPrimRawPtVsYVsMultMCK0Short);
1450    }
1451
1452 //--- 3D Histo (Pt, Y, VertexZ)  
1453
1454    if(! f3dHistPrimRawPtVsYVsVertexZLambda) {
1455       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);
1456       fListHistV0->Add(f3dHistPrimRawPtVsYVsVertexZLambda);
1457    }
1458    if(! f3dHistPrimRawPtVsYVsVertexZAntiLambda) {
1459       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);
1460       fListHistV0->Add(f3dHistPrimRawPtVsYVsVertexZAntiLambda);
1461    }
1462    if(! f3dHistPrimRawPtVsYVsVertexZK0Short) {
1463       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);
1464       fListHistV0->Add(f3dHistPrimRawPtVsYVsVertexZK0Short);
1465    }
1466
1467 //--- 3D Histo (Pt, Y, Multiplicity), close to PV criterion
1468
1469    if(! f3dHistPrimCloseToPVPtVsYVsMultLambda) {
1470       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);
1471       fListHistV0->Add(f3dHistPrimCloseToPVPtVsYVsMultLambda);
1472    }
1473    if(! f3dHistPrimCloseToPVPtVsYVsMultAntiLambda) {
1474       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);
1475       fListHistV0->Add(f3dHistPrimCloseToPVPtVsYVsMultAntiLambda);
1476    }
1477    if(! f3dHistPrimCloseToPVPtVsYVsMultK0Short) {
1478       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);
1479       fListHistV0->Add(f3dHistPrimCloseToPVPtVsYVsMultK0Short);
1480    }
1481
1482
1483 //--- 3D Histo (Pt, Y, Proper Decay Length)
1484
1485    if(! f3dHistPrimRawPtVsYVsDecayLengthLambda) {
1486       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);
1487       fListHistV0->Add(f3dHistPrimRawPtVsYVsDecayLengthLambda);
1488    }
1489    if(! f3dHistPrimRawPtVsYVsDecayLengthAntiLambda) {
1490       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);
1491       fListHistV0->Add(f3dHistPrimRawPtVsYVsDecayLengthAntiLambda);
1492    }
1493    if(! f3dHistPrimRawPtVsYVsDecayLengthK0Short) {
1494       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);
1495       fListHistV0->Add(f3dHistPrimRawPtVsYVsDecayLengthK0Short);
1496    }
1497
1498 //--------------------------------------------------------------------------------------
1499 // V0M for Cascades
1500 //--------------------------------------------------------------------------------------
1501 //--- 3D Histo (Pt, Y, Multiplicity) for generated XiMinus/Plus, all generated
1502
1503    if(! f3dHistGenPtVsYVsMultXiMinus) {
1504       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);
1505       fListHistV0->Add(f3dHistGenPtVsYVsMultXiMinus);
1506    }
1507    if(! f3dHistGenPtVsYVsMultXiPlus) {
1508       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);
1509       fListHistV0->Add(f3dHistGenPtVsYVsMultXiPlus);
1510    }
1511 //CASCADEs, Y CMS
1512    if(! f3dHistGenPtVsYCMSVsMultXiMinus) {
1513       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);
1514       fListHistV0->Add(f3dHistGenPtVsYCMSVsMultXiMinus);
1515    }
1516    if(! f3dHistGenPtVsYCMSVsMultXiPlus) {
1517       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);
1518       fListHistV0->Add(f3dHistGenPtVsYCMSVsMultXiPlus);
1519    }
1520
1521 //--------------------------------------------------------------------------------------
1522 //--- 3D Histo (Pt, Y, Multiplicity) for generated XiMinus/Plus, at selected analysis evts
1523
1524    if(! f3dHistGenSelectedPtVsYVsMultXiMinus) {
1525       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);
1526       fListHistV0->Add(f3dHistGenSelectedPtVsYVsMultXiMinus);
1527    }
1528    if(! f3dHistGenSelectedPtVsYVsMultXiPlus) {
1529       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);
1530       fListHistV0->Add(f3dHistGenSelectedPtVsYVsMultXiPlus);
1531    }
1532
1533 //CASCADES, analysis level, y CMS
1534 //--------------------------------------------------------------------------------------
1535 //--- 3D Histo (Pt, Y, Multiplicity) for generated XiMinus/Plus, at selected analysis evts
1536
1537    if(! f3dHistGenSelectedPtVsYCMSVsMultXiMinus) {
1538       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);
1539       fListHistV0->Add(f3dHistGenSelectedPtVsYCMSVsMultXiMinus);
1540    }
1541    if(! f3dHistGenSelectedPtVsYCMSVsMultXiPlus) {
1542       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);
1543       fListHistV0->Add(f3dHistGenSelectedPtVsYCMSVsMultXiPlus);
1544    }
1545   
1546   //--------------------------------------------------------------------------------------
1547   // V0A for Cascades
1548   //--------------------------------------------------------------------------------------
1549   //--- 3D Histo (Pt, Y, Multiplicity) for generated XiMinus/Plus, all generated
1550   
1551   if(! f3dHistGenPtVsYVsMultV0AXiMinus) {
1552     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);
1553     if( fkIsNuclear ) fListHistV0->Add(f3dHistGenPtVsYVsMultV0AXiMinus);
1554   }
1555   if(! f3dHistGenPtVsYVsMultV0AXiPlus) {
1556     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);
1557     if( fkIsNuclear ) fListHistV0->Add(f3dHistGenPtVsYVsMultV0AXiPlus);
1558   }
1559   //CASCADEs, Y CMS
1560   if(! f3dHistGenPtVsYCMSVsMultV0AXiMinus) {
1561     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);
1562     if( fkIsNuclear ) fListHistV0->Add(f3dHistGenPtVsYCMSVsMultV0AXiMinus);
1563   }
1564   if(! f3dHistGenPtVsYCMSVsMultV0AXiPlus) {
1565     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);
1566     if( fkIsNuclear ) fListHistV0->Add(f3dHistGenPtVsYCMSVsMultV0AXiPlus);
1567   }
1568   
1569   //--------------------------------------------------------------------------------------
1570   //--- 3D Histo (Pt, Y, Multiplicity) for generated XiMinus/Plus, at selected analysis evts
1571   
1572   if(! f3dHistGenSelectedPtVsYVsMultV0AXiMinus) {
1573     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);
1574     if( fkIsNuclear ) fListHistV0->Add(f3dHistGenSelectedPtVsYVsMultV0AXiMinus);
1575   }
1576   if(! f3dHistGenSelectedPtVsYVsMultV0AXiPlus) {
1577     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);
1578     if( fkIsNuclear ) fListHistV0->Add(f3dHistGenSelectedPtVsYVsMultV0AXiPlus);
1579   }
1580   
1581   //CASCADES, analysis level, y CMS
1582   //--------------------------------------------------------------------------------------
1583   //--- 3D Histo (Pt, Y, Multiplicity) for generated XiMinus/Plus, at selected analysis evts
1584   
1585   if(! f3dHistGenSelectedPtVsYCMSVsMultV0AXiMinus) {
1586     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);
1587     if( fkIsNuclear ) fListHistV0->Add(f3dHistGenSelectedPtVsYCMSVsMultV0AXiMinus);
1588   }
1589   if(! f3dHistGenSelectedPtVsYCMSVsMultV0AXiPlus) {
1590     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);
1591     if( fkIsNuclear ) fListHistV0->Add(f3dHistGenSelectedPtVsYCMSVsMultV0AXiPlus);
1592   }
1593   
1594   //--------------------------------------------------------------------------------------
1595   // ZNA for Cascades
1596   //--------------------------------------------------------------------------------------
1597   //--- 3D Histo (Pt, Y, Multiplicity) for generated XiMinus/Plus, all generated
1598   
1599   if(! f3dHistGenPtVsYVsMultZNAXiMinus) {
1600     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);
1601     if( fkIsNuclear ) fListHistV0->Add(f3dHistGenPtVsYVsMultZNAXiMinus);
1602   }
1603   if(! f3dHistGenPtVsYVsMultZNAXiPlus) {
1604     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);
1605     if( fkIsNuclear ) fListHistV0->Add(f3dHistGenPtVsYVsMultZNAXiPlus);
1606   }
1607   //CASCADEs, Y CMS
1608   if(! f3dHistGenPtVsYCMSVsMultZNAXiMinus) {
1609     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);
1610     if( fkIsNuclear ) fListHistV0->Add(f3dHistGenPtVsYCMSVsMultZNAXiMinus);
1611   }
1612   if(! f3dHistGenPtVsYCMSVsMultZNAXiPlus) {
1613     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);
1614     if( fkIsNuclear ) fListHistV0->Add(f3dHistGenPtVsYCMSVsMultZNAXiPlus);
1615   }
1616   
1617   //--------------------------------------------------------------------------------------
1618   //--- 3D Histo (Pt, Y, Multiplicity) for generated XiMinus/Plus, at selected analysis evts
1619   
1620   if(! f3dHistGenSelectedPtVsYVsMultZNAXiMinus) {
1621     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);
1622     if( fkIsNuclear ) fListHistV0->Add(f3dHistGenSelectedPtVsYVsMultZNAXiMinus);
1623   }
1624   if(! f3dHistGenSelectedPtVsYVsMultZNAXiPlus) {
1625     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);
1626     if( fkIsNuclear ) fListHistV0->Add(f3dHistGenSelectedPtVsYVsMultZNAXiPlus);
1627   }
1628   
1629   //CASCADES, analysis level, y CMS
1630   //--------------------------------------------------------------------------------------
1631   //--- 3D Histo (Pt, Y, Multiplicity) for generated XiMinus/Plus, at selected analysis evts
1632   
1633   if(! f3dHistGenSelectedPtVsYCMSVsMultZNAXiMinus) {
1634     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);
1635     if( fkIsNuclear ) fListHistV0->Add(f3dHistGenSelectedPtVsYCMSVsMultZNAXiMinus);
1636   }
1637   if(! f3dHistGenSelectedPtVsYCMSVsMultZNAXiPlus) {
1638     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);
1639     if( fkIsNuclear ) fListHistV0->Add(f3dHistGenSelectedPtVsYCMSVsMultZNAXiPlus);
1640   }
1641   
1642   //--------------------------------------------------------------------------------------
1643   // TRK for Cascades
1644   //--------------------------------------------------------------------------------------
1645   //--- 3D Histo (Pt, Y, Multiplicity) for generated XiMinus/Plus, all generated
1646   
1647   if(! f3dHistGenPtVsYVsMultTRKXiMinus) {
1648     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);
1649     if( fkIsNuclear ) fListHistV0->Add(f3dHistGenPtVsYVsMultTRKXiMinus);
1650   }
1651   if(! f3dHistGenPtVsYVsMultTRKXiPlus) {
1652     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);
1653     if( fkIsNuclear ) fListHistV0->Add(f3dHistGenPtVsYVsMultTRKXiPlus);
1654   }
1655   //CASCADEs, Y CMS
1656   if(! f3dHistGenPtVsYCMSVsMultTRKXiMinus) {
1657     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);
1658     if( fkIsNuclear ) fListHistV0->Add(f3dHistGenPtVsYCMSVsMultTRKXiMinus);
1659   }
1660   if(! f3dHistGenPtVsYCMSVsMultTRKXiPlus) {
1661     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);
1662     if( fkIsNuclear ) fListHistV0->Add(f3dHistGenPtVsYCMSVsMultTRKXiPlus);
1663   }
1664   
1665   //--------------------------------------------------------------------------------------
1666   //--- 3D Histo (Pt, Y, Multiplicity) for generated XiMinus/Plus, at selected analysis evts
1667   
1668   if(! f3dHistGenSelectedPtVsYVsMultTRKXiMinus) {
1669     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);
1670     if( fkIsNuclear ) fListHistV0->Add(f3dHistGenSelectedPtVsYVsMultTRKXiMinus);
1671   }
1672   if(! f3dHistGenSelectedPtVsYVsMultTRKXiPlus) {
1673     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);
1674     if( fkIsNuclear ) fListHistV0->Add(f3dHistGenSelectedPtVsYVsMultTRKXiPlus);
1675   }
1676   
1677   //CASCADES, analysis level, y CMS
1678   //--------------------------------------------------------------------------------------
1679   //--- 3D Histo (Pt, Y, Multiplicity) for generated XiMinus/Plus, at selected analysis evts
1680   
1681   if(! f3dHistGenSelectedPtVsYCMSVsMultTRKXiMinus) {
1682     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);
1683     if( fkIsNuclear ) fListHistV0->Add(f3dHistGenSelectedPtVsYCMSVsMultTRKXiMinus);
1684   }
1685   if(! f3dHistGenSelectedPtVsYCMSVsMultTRKXiPlus) {
1686     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);
1687     if( fkIsNuclear ) fListHistV0->Add(f3dHistGenSelectedPtVsYCMSVsMultTRKXiPlus);
1688   }
1689   
1690   
1691   //--------------------------------------------------------------------------------------
1692   // SPD for Cascades
1693   //--------------------------------------------------------------------------------------
1694   //--- 3D Histo (Pt, Y, Multiplicity) for generated XiMinus/Plus, all generated
1695   
1696   if(! f3dHistGenPtVsYVsMultSPDXiMinus) {
1697     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);
1698     if( fkIsNuclear ) fListHistV0->Add(f3dHistGenPtVsYVsMultSPDXiMinus);
1699   }
1700   if(! f3dHistGenPtVsYVsMultSPDXiPlus) {
1701     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);
1702     if( fkIsNuclear ) fListHistV0->Add(f3dHistGenPtVsYVsMultSPDXiPlus);
1703   }
1704   //CASCADEs, Y CMS
1705   if(! f3dHistGenPtVsYCMSVsMultSPDXiMinus) {
1706     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);
1707     if( fkIsNuclear ) fListHistV0->Add(f3dHistGenPtVsYCMSVsMultSPDXiMinus);
1708   }
1709   if(! f3dHistGenPtVsYCMSVsMultSPDXiPlus) {
1710     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);
1711     if( fkIsNuclear ) fListHistV0->Add(f3dHistGenPtVsYCMSVsMultSPDXiPlus);
1712   }
1713   
1714   //--------------------------------------------------------------------------------------
1715   //--- 3D Histo (Pt, Y, Multiplicity) for generated XiMinus/Plus, at selected analysis evts
1716   
1717   if(! f3dHistGenSelectedPtVsYVsMultSPDXiMinus) {
1718     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);
1719     if( fkIsNuclear ) fListHistV0->Add(f3dHistGenSelectedPtVsYVsMultSPDXiMinus);
1720   }
1721   if(! f3dHistGenSelectedPtVsYVsMultSPDXiPlus) {
1722     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);
1723     if( fkIsNuclear ) fListHistV0->Add(f3dHistGenSelectedPtVsYVsMultSPDXiPlus);
1724   }
1725   
1726   //CASCADES, analysis level, y CMS
1727   //--------------------------------------------------------------------------------------
1728   //--- 3D Histo (Pt, Y, Multiplicity) for generated XiMinus/Plus, at selected analysis evts
1729   
1730   if(! f3dHistGenSelectedPtVsYCMSVsMultSPDXiMinus) {
1731     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);
1732     if( fkIsNuclear ) fListHistV0->Add(f3dHistGenSelectedPtVsYCMSVsMultSPDXiMinus);
1733   }
1734   if(! f3dHistGenSelectedPtVsYCMSVsMultSPDXiPlus) {
1735     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);
1736     if( fkIsNuclear ) fListHistV0->Add(f3dHistGenSelectedPtVsYCMSVsMultSPDXiPlus);
1737   }
1738   
1739
1740
1741 //----------------------------------
1742 // Histos at analysis level 
1743 //----------------------------------
1744
1745 //The usual V0M business...
1746   
1747    if(! f3dHistPrimAnalysisPtVsYVsMultLambda) {
1748       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);
1749       fListHistV0->Add(f3dHistPrimAnalysisPtVsYVsMultLambda);
1750    }
1751    if(! f3dHistPrimAnalysisPtVsYVsMultAntiLambda) {
1752       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);
1753       fListHistV0->Add(f3dHistPrimAnalysisPtVsYVsMultAntiLambda);
1754    }
1755    if(! f3dHistPrimAnalysisPtVsYVsMultK0Short) {
1756       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);
1757       fListHistV0->Add(f3dHistPrimAnalysisPtVsYVsMultK0Short);
1758    }
1759
1760    if(! f3dHistPrimAnalysisPtVsYCMSVsMultLambda) {
1761       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);
1762       fListHistV0->Add(f3dHistPrimAnalysisPtVsYCMSVsMultLambda);
1763    }
1764    if(! f3dHistPrimAnalysisPtVsYCMSVsMultAntiLambda) {
1765       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);
1766       fListHistV0->Add(f3dHistPrimAnalysisPtVsYCMSVsMultAntiLambda);
1767    }
1768    if(! f3dHistPrimAnalysisPtVsYCMSVsMultK0Short) {
1769       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);
1770       fListHistV0->Add(f3dHistPrimAnalysisPtVsYCMSVsMultK0Short);
1771    }
1772   
1773   //TRUE Multiplicity Business
1774   
1775   if(! f3dHistPrimAnalysisPtVsYVsMultMCLambda) {
1776     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);
1777     fListHistV0->Add(f3dHistPrimAnalysisPtVsYVsMultMCLambda);
1778   }
1779   if(! f3dHistPrimAnalysisPtVsYVsMultMCAntiLambda) {
1780     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);
1781     fListHistV0->Add(f3dHistPrimAnalysisPtVsYVsMultMCAntiLambda);
1782   }
1783   if(! f3dHistPrimAnalysisPtVsYVsMultMCK0Short) {
1784     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);
1785     fListHistV0->Add(f3dHistPrimAnalysisPtVsYVsMultMCK0Short);
1786   }
1787   
1788   if(! f3dHistPrimAnalysisPtVsYCMSVsMultMCLambda) {
1789     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);
1790     fListHistV0->Add(f3dHistPrimAnalysisPtVsYCMSVsMultMCLambda);
1791   }
1792   if(! f3dHistPrimAnalysisPtVsYCMSVsMultMCAntiLambda) {
1793     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);
1794     fListHistV0->Add(f3dHistPrimAnalysisPtVsYCMSVsMultMCAntiLambda);
1795   }
1796   if(! f3dHistPrimAnalysisPtVsYCMSVsMultMCK0Short) {
1797     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);
1798     fListHistV0->Add(f3dHistPrimAnalysisPtVsYCMSVsMultMCK0Short);
1799   }
1800   
1801   //V0A
1802   
1803   if(! f3dHistPrimAnalysisPtVsYVsMultV0ALambda) {
1804     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);
1805     if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimAnalysisPtVsYVsMultV0ALambda);
1806   }
1807   if(! f3dHistPrimAnalysisPtVsYVsMultV0AAntiLambda) {
1808     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);
1809     if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimAnalysisPtVsYVsMultV0AAntiLambda);
1810   }
1811   if(! f3dHistPrimAnalysisPtVsYVsMultV0AK0Short) {
1812     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);
1813     if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimAnalysisPtVsYVsMultV0AK0Short);
1814   }
1815   
1816   if(! f3dHistPrimAnalysisPtVsYCMSVsMultV0ALambda) {
1817     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);
1818     if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimAnalysisPtVsYCMSVsMultV0ALambda);
1819   }
1820   if(! f3dHistPrimAnalysisPtVsYCMSVsMultV0AAntiLambda) {
1821     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);
1822     if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimAnalysisPtVsYCMSVsMultV0AAntiLambda);
1823   }
1824   if(! f3dHistPrimAnalysisPtVsYCMSVsMultV0AK0Short) {
1825     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);
1826     if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimAnalysisPtVsYCMSVsMultV0AK0Short);
1827   }
1828   
1829   //ZNA
1830   
1831   if(! f3dHistPrimAnalysisPtVsYVsMultZNALambda) {
1832     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);
1833     if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimAnalysisPtVsYVsMultZNALambda);
1834   }
1835   if(! f3dHistPrimAnalysisPtVsYVsMultZNAAntiLambda) {
1836     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);
1837     if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimAnalysisPtVsYVsMultZNAAntiLambda);
1838   }
1839   if(! f3dHistPrimAnalysisPtVsYVsMultZNAK0Short) {
1840     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);
1841     if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimAnalysisPtVsYVsMultZNAK0Short);
1842   }
1843   
1844   if(! f3dHistPrimAnalysisPtVsYCMSVsMultZNALambda) {
1845     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);
1846     if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimAnalysisPtVsYCMSVsMultZNALambda);
1847   }
1848   if(! f3dHistPrimAnalysisPtVsYCMSVsMultZNAAntiLambda) {
1849     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);
1850     if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimAnalysisPtVsYCMSVsMultZNAAntiLambda);
1851   }
1852   if(! f3dHistPrimAnalysisPtVsYCMSVsMultZNAK0Short) {
1853     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);
1854     if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimAnalysisPtVsYCMSVsMultZNAK0Short);
1855   }
1856   
1857   //TRK
1858   
1859   if(! f3dHistPrimAnalysisPtVsYVsMultTRKLambda) {
1860     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);
1861     if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimAnalysisPtVsYVsMultTRKLambda);
1862   }
1863   if(! f3dHistPrimAnalysisPtVsYVsMultTRKAntiLambda) {
1864     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);
1865     if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimAnalysisPtVsYVsMultTRKAntiLambda);
1866   }
1867   if(! f3dHistPrimAnalysisPtVsYVsMultTRKK0Short) {
1868     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);
1869     if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimAnalysisPtVsYVsMultTRKK0Short);
1870   }
1871   
1872   if(! f3dHistPrimAnalysisPtVsYCMSVsMultTRKLambda) {
1873     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);
1874     if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimAnalysisPtVsYCMSVsMultTRKLambda);
1875   }
1876   if(! f3dHistPrimAnalysisPtVsYCMSVsMultTRKAntiLambda) {
1877     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);
1878     if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimAnalysisPtVsYCMSVsMultTRKAntiLambda);
1879   }
1880   if(! f3dHistPrimAnalysisPtVsYCMSVsMultTRKK0Short) {
1881     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);
1882     if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimAnalysisPtVsYCMSVsMultTRKK0Short);
1883   }
1884   
1885   //SPD
1886   
1887   if(! f3dHistPrimAnalysisPtVsYVsMultSPDLambda) {
1888     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);
1889     if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimAnalysisPtVsYVsMultSPDLambda);
1890   }
1891   if(! f3dHistPrimAnalysisPtVsYVsMultSPDAntiLambda) {
1892     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);
1893     if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimAnalysisPtVsYVsMultSPDAntiLambda);
1894   }
1895   if(! f3dHistPrimAnalysisPtVsYVsMultSPDK0Short) {
1896     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);
1897     if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimAnalysisPtVsYVsMultSPDK0Short);
1898   }
1899   
1900   if(! f3dHistPrimAnalysisPtVsYCMSVsMultSPDLambda) {
1901     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);
1902     if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimAnalysisPtVsYCMSVsMultSPDLambda);
1903   }
1904   if(! f3dHistPrimAnalysisPtVsYCMSVsMultSPDAntiLambda) {
1905     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);
1906     if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimAnalysisPtVsYCMSVsMultSPDAntiLambda);
1907   }
1908   if(! f3dHistPrimAnalysisPtVsYCMSVsMultSPDK0Short) {
1909     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);
1910     if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimAnalysisPtVsYCMSVsMultSPDK0Short);
1911   }
1912
1913 //----------------------------------
1914 // Primary Vertex Position Histos
1915 //----------------------------------
1916
1917    if(! fHistPVx) {
1918          fHistPVx = new TH1F("fHistPVx", 
1919             "PV x position;Nbr of Evts;x", 
1920             2000, -0.5, 0.5);       
1921       fListHistV0->Add(fHistPVx);
1922    }
1923    if(! fHistPVy) {
1924          fHistPVy = new TH1F("fHistPVy", 
1925             "PV y position;Nbr of Evts;y", 
1926             2000, -0.5, 0.5);       
1927       fListHistV0->Add(fHistPVy);
1928    }
1929    if(! fHistPVz) {
1930          fHistPVz = new TH1F("fHistPVz", 
1931             "PV z position;Nbr of Evts;z", 
1932             400, -20, 20);       
1933       fListHistV0->Add(fHistPVz);
1934    }
1935
1936    if(! fHistPVxAnalysis) {
1937          fHistPVxAnalysis = new TH1F("fHistPVxAnalysis", 
1938             "PV x position;Nbr of Evts;x", 
1939             2000, -0.5, 0.5);       
1940       fListHistV0->Add(fHistPVxAnalysis);
1941    }
1942    if(! fHistPVyAnalysis) {
1943          fHistPVyAnalysis = new TH1F("fHistPVyAnalysis", 
1944             "PV y position;Nbr of Evts;y", 
1945             2000, -0.5, 0.5);       
1946       fListHistV0->Add(fHistPVyAnalysis);
1947    }
1948    if(! fHistPVzAnalysis) {
1949          fHistPVzAnalysis = new TH1F("fHistPVzAnalysis", 
1950             "PV z position;Nbr of Evts;z", 
1951             400, -20, 20);       
1952       fListHistV0->Add(fHistPVzAnalysis);
1953    }
1954
1955    if(! fHistPVxAnalysisHasHighPtLambda) {
1956          fHistPVxAnalysisHasHighPtLambda = new TH1F("fHistPVxAnalysisHasHighPtLambda", 
1957             "PV x position;Nbr of Evts;x", 
1958             2000, -0.5, 0.5);       
1959       fListHistV0->Add(fHistPVxAnalysisHasHighPtLambda);
1960    }
1961    if(! fHistPVyAnalysisHasHighPtLambda) {
1962          fHistPVyAnalysisHasHighPtLambda = new TH1F("fHistPVyAnalysisHasHighPtLambda", 
1963             "PV y position;Nbr of Evts;y", 
1964             2000, -0.5, 0.5);       
1965       fListHistV0->Add(fHistPVyAnalysisHasHighPtLambda);
1966    }
1967    if(! fHistPVzAnalysisHasHighPtLambda) {
1968          fHistPVzAnalysisHasHighPtLambda = new TH1F("fHistPVzAnalysisHasHighPtLambda", 
1969             "PV z position;Nbr of Evts;z", 
1970             400, -20, 20);       
1971       fListHistV0->Add(fHistPVzAnalysisHasHighPtLambda);
1972    }
1973    if(! fHistSwappedV0Counter) {
1974       fHistSwappedV0Counter = new TH1F("fHistSwappedV0Counter", 
1975          "Swap or not histo;Swapped (1) or not (0); count", 
1976          2, 0, 2);              
1977       fListHistV0->Add(fHistSwappedV0Counter);
1978    }
1979
1980    //List of Histograms: Normal
1981    PostData(1, fListHistV0);
1982
1983    //TTree Object: Saved to base directory. Should cache to disk while saving. 
1984    //(Important to avoid excessive memory usage, particularly when merging)
1985    PostData(2, fTree);
1986
1987 }// end UserCreateOutputObjects
1988
1989
1990 //________________________________________________________________________
1991 void AliAnalysisTaskExtractPerformanceV0::UserExec(Option_t *) 
1992 {
1993   // Main loop
1994   // Called for each event
1995
1996    AliESDEvent *lESDevent = 0x0;
1997    AliMCEvent  *lMCevent  = 0x0; 
1998    AliStack    *lMCstack  = 0x0; 
1999
2000    Int_t    lNumberOfV0s                      = -1;
2001    Double_t lTrkgPrimaryVtxPos[3]          = {-100.0, -100.0, -100.0};
2002    Double_t lBestPrimaryVtxPos[3]          = {-100.0, -100.0, -100.0};
2003    Double_t lMagneticField                 = -10.;
2004    
2005   // Connect to the InputEvent   
2006   // After these lines, we should have an ESD/AOD event + the number of V0s in it.
2007
2008    // Appropriate for ESD analysis! 
2009       
2010    lESDevent = dynamic_cast<AliESDEvent*>( InputEvent() );
2011    if (!lESDevent) {
2012       AliWarning("ERROR: lESDevent not available \n");
2013       return;
2014    }
2015         
2016    fTreeVariableRunNumber = lESDevent->GetRunNumber();
2017    fTreeVariableEventNumber =  
2018     ( ( ((ULong64_t)lESDevent->GetPeriodNumber() ) << 36 ) |
2019       ( ((ULong64_t)lESDevent->GetOrbitNumber () ) << 12 ) |
2020         ((ULong64_t)lESDevent->GetBunchCrossNumber() )  );
2021
2022    lMCevent = MCEvent();
2023    if (!lMCevent) {
2024       Printf("ERROR: Could not retrieve MC event \n");
2025       cout << "Name of the file with pb :" <<  fInputHandler->GetTree()->GetCurrentFile()->GetName() << endl;   
2026       return;
2027    }
2028
2029    lMCstack = lMCevent->Stack();
2030    if (!lMCstack) {
2031       Printf("ERROR: Could not retrieve MC stack \n");
2032       cout << "Name of the file with pb :" <<  fInputHandler->GetTree()->GetCurrentFile()->GetName() << endl;
2033       return;
2034    }
2035   
2036   //------------------------------------------------
2037   // Rerun V0 vertexer, if asked for
2038   // --- WARNING: Be careful when using in PbPb
2039   //------------------------------------------------
2040   if( fkRunV0Vertexer ){
2041     lESDevent->ResetV0s();
2042     AliV0vertexer lV0vtxer;
2043     lV0vtxer.SetDefaultCuts(fV0Sels);
2044     lV0vtxer.Tracks2V0vertices(lESDevent);
2045   }
2046   
2047    TArrayF mcPrimaryVtx;
2048    AliGenEventHeader* mcHeader=lMCevent->GenEventHeader();
2049    if(!mcHeader) return;
2050    mcHeader->PrimaryVertex(mcPrimaryVtx);
2051         
2052 //------------------------------------------------
2053 // Multiplicity Information Acquistion
2054 //------------------------------------------------
2055
2056    //REVISED multiplicity estimator after 'multiplicity day' (2011)
2057     Int_t lMultiplicity = -100;
2058     Int_t lMultiplicityV0A = -100;
2059     Int_t lMultiplicityZNA = -100;
2060     Int_t lMultiplicityTRK = -100;
2061     Int_t lMultiplicitySPD = -100;
2062   
2063    //testing purposes
2064    if(fkIsNuclear == kFALSE) lMultiplicity = fESDtrackCuts->GetReferenceMultiplicity(lESDevent, AliESDtrackCuts::kTrackletsITSTPC,0.5);
2065
2066    //---> If this is a nuclear collision, then go nuclear on "multiplicity" variable...
2067    //---> Warning: Experimental
2068    if(fkIsNuclear == kTRUE){ 
2069       AliCentrality* centrality;
2070       centrality = lESDevent->GetCentrality();
2071       lMultiplicity = ( ( Int_t ) ( centrality->GetCentralityPercentile(   fCentralityEstimator.Data() ) ) );
2072       lMultiplicityV0A = ( ( Int_t ) ( centrality->GetCentralityPercentile(   "V0A" ) ) );
2073       lMultiplicityZNA = ( ( Int_t ) ( centrality->GetCentralityPercentile(   "ZNA" ) ) );
2074       lMultiplicityTRK = ( ( Int_t ) ( centrality->GetCentralityPercentile(   "TRK" ) ) );
2075       lMultiplicitySPD = ( ( Int_t ) ( centrality->GetCentralityPercentile(   "CL1" ) ) );
2076       if (centrality->GetQuality()>1) {
2077         PostData(1, fListHistV0);
2078         PostData(2, fTree);
2079         return;
2080       }
2081    }
2082   
2083    //Set variable for filling tree afterwards!
2084    //---> pp case......: GetReferenceMultiplicity
2085    //---> Pb-Pb case...: Centrality by V0M
2086   fTreeVariableMultiplicity = lMultiplicity;
2087   fTreeVariableMultiplicityV0A = lMultiplicityV0A;
2088   fTreeVariableMultiplicityZNA = lMultiplicityZNA;
2089   fTreeVariableMultiplicityTRK = lMultiplicityTRK;
2090   fTreeVariableMultiplicitySPD = lMultiplicitySPD;
2091
2092    fHistV0MultiplicityBeforeTrigSel->Fill ( lESDevent->GetNumberOfV0s() );
2093   
2094   fHistMultiplicityBeforeTrigSel->Fill ( lMultiplicity );
2095   fHistMultiplicityV0ABeforeTrigSel->Fill ( lMultiplicityV0A );
2096   fHistMultiplicityZNABeforeTrigSel->Fill ( lMultiplicityZNA );
2097   fHistMultiplicityTRKBeforeTrigSel->Fill ( lMultiplicityTRK );
2098   fHistMultiplicitySPDBeforeTrigSel->Fill ( lMultiplicitySPD );
2099   
2100 //------------------------------------------------
2101 // MC Information Acquistion
2102 //------------------------------------------------
2103
2104    Int_t iNumberOfPrimaries = -1;
2105    iNumberOfPrimaries = lMCstack->GetNprimary();
2106    if(iNumberOfPrimaries < 1) return; 
2107    Bool_t lHasHighPtLambda = kFALSE;
2108
2109 //------------------------------------------------
2110 // Variable Definition
2111 //------------------------------------------------
2112
2113    Int_t lNbMCPrimary        = 0;
2114
2115    Int_t lPdgcodeCurrentPart = 0;
2116    Double_t lRapCurrentPart  = 0;
2117    Double_t lPtCurrentPart   = 0;
2118   
2119    //Int_t lComeFromSigma      = 0;
2120
2121    // current mc particle 's mother
2122    //Int_t iCurrentMother  = 0;
2123    lNbMCPrimary = lMCstack->GetNprimary();
2124
2125 //------------------------------------------------
2126 // Pre-Physics Selection
2127 //------------------------------------------------
2128
2129 //----- Loop on primary Xi, Omega --------------------------------------------------------------
2130    for (Int_t iCurrentLabelStack = 0; iCurrentLabelStack < lNbMCPrimary; iCurrentLabelStack++) 
2131    {// This is the begining of the loop on primaries
2132       
2133       TParticle* lCurrentParticlePrimary = 0x0; 
2134       lCurrentParticlePrimary = lMCstack->Particle( iCurrentLabelStack );
2135       if(!lCurrentParticlePrimary){
2136          Printf("Cascade loop %d - MC TParticle pointer to current stack particle = 0x0 ! Skip ...\n", iCurrentLabelStack );
2137          continue;
2138       }
2139       if ( TMath::Abs(lCurrentParticlePrimary->GetPdgCode()) == 3312 || TMath::Abs(lCurrentParticlePrimary->GetPdgCode()) == 3334 ) { 
2140          Double_t lRapXiMCPrimary = -100;
2141          if( (lCurrentParticlePrimary->Energy() - lCurrentParticlePrimary->Pz() +1.e-13) != 0 ) { 
2142            if ( (lCurrentParticlePrimary->Energy() + lCurrentParticlePrimary->Pz()) / (lCurrentParticlePrimary->Energy() - lCurrentParticlePrimary->Pz() +1.e-13) !=0 ){
2143              lRapXiMCPrimary = 0.5*TMath::Log( (lCurrentParticlePrimary->Energy() + lCurrentParticlePrimary->Pz()) / (lCurrentParticlePrimary->Energy() - lCurrentParticlePrimary->Pz() +1.e-13) );
2144            }
2145          }
2146
2147          //=================================================================================
2148          // Xi Histograms
2149          if( lCurrentParticlePrimary->GetPdgCode() == 3312 ){ 
2150             lPtCurrentPart    = lCurrentParticlePrimary->Pt();
2151             f3dHistGenPtVsYVsMultXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicity);
2152             f3dHistGenPtVsYCMSVsMultXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicity);
2153            
2154            f3dHistGenPtVsYVsMultV0AXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicityV0A);
2155            f3dHistGenPtVsYCMSVsMultV0AXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicityV0A);
2156            f3dHistGenPtVsYVsMultZNAXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicityZNA);
2157            f3dHistGenPtVsYCMSVsMultZNAXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicityZNA);
2158            f3dHistGenPtVsYVsMultTRKXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicityTRK);
2159            f3dHistGenPtVsYCMSVsMultTRKXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicityTRK);
2160            f3dHistGenPtVsYVsMultSPDXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicitySPD);
2161            f3dHistGenPtVsYCMSVsMultSPDXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicitySPD);
2162          }
2163          if( lCurrentParticlePrimary->GetPdgCode() == -3312 ){
2164             lPtCurrentPart    = lCurrentParticlePrimary->Pt();
2165             f3dHistGenPtVsYVsMultXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicity);
2166             f3dHistGenPtVsYCMSVsMultXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicity);
2167            
2168            f3dHistGenPtVsYVsMultV0AXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicityV0A);
2169            f3dHistGenPtVsYCMSVsMultV0AXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicityV0A);
2170            f3dHistGenPtVsYVsMultZNAXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicityZNA);
2171            f3dHistGenPtVsYCMSVsMultZNAXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicityZNA);
2172            f3dHistGenPtVsYVsMultTRKXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicityTRK);
2173            f3dHistGenPtVsYCMSVsMultTRKXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicityTRK);
2174            f3dHistGenPtVsYVsMultSPDXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicitySPD);
2175            f3dHistGenPtVsYCMSVsMultSPDXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicitySPD);
2176          }
2177       } 
2178    }
2179 //----- End Loop on primary Xi, Omega ----------------------------------------------------------
2180
2181 //--------- GENERATED NUMBER OF CHARGED PARTICLES
2182 // ---> Set Variables to Zero again
2183 // ---> Variable Definition
2184
2185   Long_t lNumberOfCharged = 0; 
2186
2187 //----- Loop on Stack ----------------------------------------------------------------
2188    for (Int_t iCurrentLabelStack = 0;  iCurrentLabelStack < (lMCstack->GetNtrack()); iCurrentLabelStack++) 
2189    {// This is the begining of the loop on tracks
2190       TParticle* particleOne = lMCstack->Particle(iCurrentLabelStack);
2191       if(!particleOne) continue;
2192       if(!particleOne->GetPDG()) continue;
2193       Double_t lThisCharge = particleOne->GetPDG()->Charge()/3.;
2194       if(TMath::Abs(lThisCharge)<0.001) continue;
2195       if(! (lMCstack->IsPhysicalPrimary(iCurrentLabelStack)) ) continue;
2196      
2197       //Double_t gpt = particleOne -> Pt();
2198       Double_t geta = particleOne -> Eta(); 
2199
2200       if( TMath::Abs(geta) < 0.5) lNumberOfCharged++; 
2201    }//End of loop on tracks
2202 //----- End Loop on Stack ------------------------------------------------------------
2203
2204    //Double_t lpArapidityShift = 0.465;
2205    Bool_t lStackNatural = kTRUE;
2206 //----- Loop on Lambda, K0Short ----------------------------------------------------------------
2207    for (Int_t iCurrentLabelStack = 0;  iCurrentLabelStack < (lMCstack->GetNtrack()); iCurrentLabelStack++) 
2208    {// This is the begining of the loop on tracks
2209       
2210       TParticle* lCurrentParticleForLambdaCheck = 0x0; 
2211       lCurrentParticleForLambdaCheck = lMCstack->Particle( iCurrentLabelStack );
2212       if(!lCurrentParticleForLambdaCheck){
2213          Printf("V0s loop %d - MC TParticle pointer to current stack particle = 0x0 ! Skip ...\n", iCurrentLabelStack );
2214          continue;
2215       }
2216
2217       //=================================================================================
2218       //Single-Strange checks
2219       // Keep only K0s, Lambda and AntiLambda:
2220       lPdgcodeCurrentPart = lCurrentParticleForLambdaCheck->GetPdgCode();             
2221
2222       if ( (lCurrentParticleForLambdaCheck->GetPdgCode() == 310   ) ||
2223            (lCurrentParticleForLambdaCheck->GetPdgCode() == 3122  ) ||
2224            (lCurrentParticleForLambdaCheck->GetPdgCode() == -3122 ) )
2225            {
2226          lRapCurrentPart   = MyRapidity(lCurrentParticleForLambdaCheck->Energy(),lCurrentParticleForLambdaCheck->Pz());
2227          lPtCurrentPart    = lCurrentParticleForLambdaCheck->Pt();
2228
2229           //Use Close to PV for filling CloseToPV histograms!
2230          Double_t dx, dy, dz; 
2231
2232          dx = ( (mcPrimaryVtx.At(0)) - (lCurrentParticleForLambdaCheck->Vx()) ); 
2233          dy = ( (mcPrimaryVtx.At(1)) - (lCurrentParticleForLambdaCheck->Vy()) );
2234          dz = ( (mcPrimaryVtx.At(2)) - (lCurrentParticleForLambdaCheck->Vz()) );
2235          Double_t lDistToPV = TMath::Sqrt(dx*dx + dy*dy + dz*dz);
2236          if( lDistToPV <= 0.001){ 
2237            if( lPdgcodeCurrentPart == 3122 ){
2238               f3dHistPrimCloseToPVPtVsYVsMultLambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicity);
2239            }
2240            if( lPdgcodeCurrentPart == -3122 ){
2241               f3dHistPrimCloseToPVPtVsYVsMultAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicity);
2242            }
2243            if( lPdgcodeCurrentPart == 310 ){
2244               f3dHistPrimCloseToPVPtVsYVsMultK0Short->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicity);
2245            }
2246          }
2247
2248          //Use Physical Primaries only for filling PrimRaw Histograms!
2249          if ( lMCstack->IsPhysicalPrimary(iCurrentLabelStack)!=kTRUE ) continue;
2250
2251           lStackNatural = lMCevent->IsFromBGEvent(iCurrentLabelStack); //Is it? 
2252           if (!lStackNatural){
2253             if (!(lCurrentParticleForLambdaCheck->GetFirstMother()<0)) 
2254               {lStackNatural = kTRUE;} // because there are primaries (ALICE definition) not produced in the collision
2255           }
2256
2257          if( lPdgcodeCurrentPart == 3122 ){
2258             f3dHistPrimRawPtVsYVsMultLambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicity);
2259             f3dHistPrimRawPtVsYCMSVsMultLambda->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicity);
2260
2261            f3dHistPrimRawPtVsYVsMultV0ALambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicityV0A);
2262            f3dHistPrimRawPtVsYCMSVsMultV0ALambda->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicityV0A);
2263            f3dHistPrimRawPtVsYVsMultZNALambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicityZNA);
2264            f3dHistPrimRawPtVsYCMSVsMultZNALambda->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicityZNA);
2265            f3dHistPrimRawPtVsYVsMultTRKLambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicityTRK);
2266            f3dHistPrimRawPtVsYCMSVsMultTRKLambda->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicityTRK);
2267            f3dHistPrimRawPtVsYVsMultSPDLambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicitySPD);
2268            f3dHistPrimRawPtVsYCMSVsMultSPDLambda->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicitySPD);
2269
2270             if(lStackNatural){f3dHistPrimRawPtVsYVsMultNonInjLambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicity);}
2271             f3dHistPrimRawPtVsYVsMultMCLambda->Fill(lPtCurrentPart, lRapCurrentPart, lNumberOfCharged);
2272             f3dHistPrimRawPtVsYVsVertexZLambda->Fill(lPtCurrentPart, lRapCurrentPart, mcPrimaryVtx.At(2));
2273             if( TMath::Abs( lCurrentParticleForLambdaCheck->Eta() )<1.2 && lPtCurrentPart>2 ){
2274                lHasHighPtLambda = kTRUE; //Keep track of events with Lambda within |eta|<1.2 and pt>2
2275             }
2276          }
2277          if( lPdgcodeCurrentPart == -3122 ){
2278             f3dHistPrimRawPtVsYVsMultAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicity);
2279             f3dHistPrimRawPtVsYCMSVsMultAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicity);
2280            
2281            f3dHistPrimRawPtVsYVsMultV0AAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicityV0A);
2282            f3dHistPrimRawPtVsYCMSVsMultV0AAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicityV0A);
2283            f3dHistPrimRawPtVsYVsMultZNAAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicityZNA);
2284            f3dHistPrimRawPtVsYCMSVsMultZNAAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicityZNA);
2285            f3dHistPrimRawPtVsYVsMultTRKAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicityTRK);
2286            f3dHistPrimRawPtVsYCMSVsMultTRKAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicityTRK);
2287            f3dHistPrimRawPtVsYVsMultSPDAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicitySPD);
2288            f3dHistPrimRawPtVsYCMSVsMultSPDAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicitySPD);
2289            
2290             if(lStackNatural){f3dHistPrimRawPtVsYVsMultNonInjAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicity);}
2291             f3dHistPrimRawPtVsYVsMultMCAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart, lNumberOfCharged);
2292             f3dHistPrimRawPtVsYVsVertexZAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart, mcPrimaryVtx.At(2));
2293          }
2294          if( lPdgcodeCurrentPart == 310 ){
2295             f3dHistPrimRawPtVsYVsMultK0Short->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicity);
2296             f3dHistPrimRawPtVsYCMSVsMultK0Short->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicity);
2297            
2298            f3dHistPrimRawPtVsYVsMultV0AK0Short->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicityV0A);
2299            f3dHistPrimRawPtVsYCMSVsMultV0AK0Short->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicityV0A);
2300            f3dHistPrimRawPtVsYVsMultZNAK0Short->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicityZNA);
2301            f3dHistPrimRawPtVsYCMSVsMultZNAK0Short->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicityZNA);
2302            f3dHistPrimRawPtVsYVsMultTRKK0Short->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicityTRK);
2303            f3dHistPrimRawPtVsYCMSVsMultTRKK0Short->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicityTRK);
2304            f3dHistPrimRawPtVsYVsMultSPDK0Short->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicitySPD);
2305            f3dHistPrimRawPtVsYCMSVsMultSPDK0Short->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicitySPD);
2306            
2307             if(lStackNatural){f3dHistPrimRawPtVsYVsMultNonInjK0Short->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicity);}
2308             f3dHistPrimRawPtVsYVsMultMCK0Short->Fill(lPtCurrentPart, lRapCurrentPart, lNumberOfCharged);
2309             f3dHistPrimRawPtVsYVsVertexZK0Short->Fill(lPtCurrentPart, lRapCurrentPart, mcPrimaryVtx.At(2));
2310          }
2311          //Decay Length Acquisition=====================================================
2312          Double_t decaylength = -1; 
2313          Double_t lV0Mass = -1; 
2314           
2315          if( !(lCurrentParticleForLambdaCheck->GetDaughter(0) < 0) ) {
2316             TParticle* lDght0ofV0 = lMCstack->Particle(  lCurrentParticleForLambdaCheck->GetDaughter(0) ); //get first daughter
2317             if(lDght0ofV0){ // skip if not defined. 
2318                decaylength = TMath::Sqrt(
2319                                         TMath::Power( lCurrentParticleForLambdaCheck->Vx() - lDght0ofV0->Vx() , 2) + 
2320                                         TMath::Power( lCurrentParticleForLambdaCheck->Vy() - lDght0ofV0->Vy() , 2) + 
2321                                         TMath::Power( lCurrentParticleForLambdaCheck->Vz() - lDght0ofV0->Vz() , 2)
2322                );
2323                //Need to correct for relativitity! Involves multiplying by mass and dividing by momentum. 
2324                if(TMath::Abs( lPdgcodeCurrentPart ) == 3122 ) { lV0Mass = 1.115683; }
2325                if(TMath::Abs( lPdgcodeCurrentPart ) == 310 ) { lV0Mass = 0.497614; }
2326                if( lCurrentParticleForLambdaCheck->P() + 1e-10 != 0 ) decaylength = ( lV0Mass * decaylength ) / ( lCurrentParticleForLambdaCheck->P() + 1e-10 );
2327                if( lCurrentParticleForLambdaCheck->P() + 1e-10 == 0 ) decaylength = 1e+5;
2328             }
2329          }
2330          if( lPdgcodeCurrentPart == 3122) f3dHistPrimRawPtVsYVsDecayLengthLambda ->Fill( lPtCurrentPart, lRapCurrentPart , decaylength ); 
2331          if( lPdgcodeCurrentPart == -3122) f3dHistPrimRawPtVsYVsDecayLengthAntiLambda ->Fill( lPtCurrentPart, lRapCurrentPart , decaylength ); 
2332          if( lPdgcodeCurrentPart == 310) f3dHistPrimRawPtVsYVsDecayLengthK0Short ->Fill( lPtCurrentPart, lRapCurrentPart , decaylength ); 
2333       }
2334    }//End of loop on tracks
2335 //----- End Loop on Lambda, K0Short ------------------------------------------------------------
2336
2337
2338    f2dHistMultiplicityVsTrueBeforeTrigSel->Fill ( lMultiplicity , lNumberOfCharged );
2339
2340     fTreeVariableMultiplicityMC = lNumberOfCharged;
2341
2342    fHistGenVertexZBeforeTrigSel->Fill( (mcPrimaryVtx.At(2)) );
2343
2344    lPdgcodeCurrentPart = 0;
2345    lRapCurrentPart  = 0;
2346    lPtCurrentPart   = 0;
2347
2348 //------------------------------------------------
2349 // Physics Selection
2350 //------------------------------------------------
2351   
2352   UInt_t maskIsSelected = ((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected();
2353   Bool_t isSelected = 0;
2354   Bool_t isSelectedExtra = kTRUE; //extra sel, default YES
2355   isSelected = (maskIsSelected & AliVEvent::kMB) == AliVEvent::kMB;
2356   
2357   //pA triggering: CINT7
2358   if( fkSwitchINT7 ) isSelected = (maskIsSelected & AliVEvent::kINT7) == AliVEvent::kINT7;
2359   
2360   //Extra selection applies if with/without SDD is to be dealth with
2361   if( fkFastOnly == "kFastOnly"){
2362     //If not kFastOnly, isSelectedExtra will be kFALSE; procedure will reject it
2363     isSelectedExtra = (maskIsSelected & AliVEvent::kFastOnly) == AliVEvent::kFastOnly;
2364   }
2365   if( fkFastOnly == "NotkFastOnly"){
2366     //If not kFastOnly, isSelectedExtra will be kTRUE; procedure will accept it
2367     isSelectedExtra = !( (maskIsSelected & AliVEvent::kFastOnly) == AliVEvent::kFastOnly );
2368   }
2369   
2370   //Standard Min-Bias Selection
2371   if ( ! isSelected ) {
2372     PostData(1, fListHistV0);
2373     PostData(2, fTree);
2374     return;
2375   }
2376   //Check if goes through extra selections
2377   //isSelectedExtra will be true in case -> fkFastOnly==""
2378   //isSelectedExtra will be true in case -> fkFastOnly=="kFastOnly"    && bit kFastOnly ON
2379   //isSelectedExtra will be true in case -> fkFastOnly=="NotkFastOnly" && bit kFastOnly OFF
2380   if ( !isSelectedExtra ) {
2381     PostData(1, fListHistV0);
2382     PostData(2, fTree);
2383     return;
2384   }
2385   
2386   f2dHistMultiplicityVsTrueForTrigEvt->Fill ( lMultiplicity , lNumberOfCharged );
2387   fHistGenVertexZForTrigEvt->Fill( mcPrimaryVtx.At(2) );
2388   
2389 //------------------------------------------------
2390 // After Trigger Selection
2391 //------------------------------------------------
2392
2393    lNumberOfV0s          = lESDevent->GetNumberOfV0s();
2394   
2395    //Set variable for filling tree afterwards!
2396    fHistV0MultiplicityForTrigEvt->Fill(lNumberOfV0s);
2397    fHistMultiplicityForTrigEvt->Fill ( lMultiplicity );
2398   fHistMultiplicityV0AForTrigEvt       ->Fill( lMultiplicityV0A  );
2399   fHistMultiplicityZNAForTrigEvt       ->Fill( lMultiplicityZNA  );
2400   fHistMultiplicityTRKForTrigEvt       ->Fill( lMultiplicityTRK  );
2401   fHistMultiplicitySPDForTrigEvt       ->Fill( lMultiplicitySPD  );
2402
2403 //------------------------------------------------
2404 // Getting: Primary Vertex + MagField Info
2405 //------------------------------------------------
2406
2407    const AliESDVertex *lPrimaryTrackingESDVtx = lESDevent->GetPrimaryVertexTracks();
2408    // get the vtx stored in ESD found with tracks
2409    lPrimaryTrackingESDVtx->GetXYZ( lTrkgPrimaryVtxPos );
2410         
2411    const AliESDVertex *lPrimaryBestESDVtx = lESDevent->GetPrimaryVertex();      
2412    // get the best primary vertex available for the event
2413    // As done in AliCascadeVertexer, we keep the one which is the best one available.
2414    // between : Tracking vertex > SPD vertex > TPC vertex > default SPD vertex
2415    // This one will be used for next calculations (DCA essentially)
2416    lPrimaryBestESDVtx->GetXYZ( lBestPrimaryVtxPos );
2417
2418    Double_t lPrimaryVtxPosition[3];
2419    const AliVVertex *primaryVtx = lESDevent->GetPrimaryVertex();
2420    lPrimaryVtxPosition[0] = primaryVtx->GetX();
2421    lPrimaryVtxPosition[1] = primaryVtx->GetY();
2422    lPrimaryVtxPosition[2] = primaryVtx->GetZ();
2423    fHistPVx->Fill( lPrimaryVtxPosition[0] );
2424    fHistPVy->Fill( lPrimaryVtxPosition[1] );
2425    fHistPVz->Fill( lPrimaryVtxPosition[2] );
2426
2427    f2dHistMultiplicityVsVertexZForTrigEvt->Fill( lMultiplicity, lPrimaryVtxPosition[2] );
2428
2429   //------------------------------------------------
2430   // Primary Vertex Z position: SKIP
2431   //------------------------------------------------
2432   
2433   if(TMath::Abs(lBestPrimaryVtxPos[2]) > 10.0 && fkpAVertexSelection == kFALSE) {
2434     AliWarning("Pb / | Z position of Best Prim Vtx | > 10.0 cm ... return !");
2435     PostData(1, fListHistV0);
2436     PostData(2, fTree);
2437     return;
2438   }
2439   if(fkpAVertexSelection==kTRUE && fUtils->IsFirstEventInChunk(lESDevent)) {
2440     AliWarning("Pb / | This is the first event in the chunk!");
2441     PostData(1, fListHistV0);
2442     PostData(2, fTree);
2443     return;
2444   }
2445   if(fkpAVertexSelection==kTRUE && !fUtils->IsVertexSelected2013pA(lESDevent)) {
2446     AliWarning("Pb / | Vertex not selected by 2013 pA criteria!");
2447     PostData(1, fListHistV0);
2448     PostData(2, fTree);
2449     return;
2450   }
2451   
2452   f2dHistMultiplicityVsVertexZ->Fill( lMultiplicity, lPrimaryVtxPosition[2] );
2453   
2454   lMagneticField = lESDevent->GetMagneticField( );
2455   fHistV0MultiplicityForSelEvt ->Fill( lNumberOfV0s );
2456   fHistMultiplicity->Fill(lMultiplicity);
2457   fHistMultiplicityV0A->Fill(lMultiplicityV0A);
2458   fHistMultiplicityZNA->Fill(lMultiplicityZNA);
2459   fHistMultiplicityTRK->Fill(lMultiplicityTRK);
2460   fHistMultiplicitySPD->Fill(lMultiplicitySPD);
2461   f2dHistMultiplicityVsTrue->Fill ( lMultiplicity , lNumberOfCharged );
2462   fHistGenVertexZ->Fill( (mcPrimaryVtx.At(2)) );
2463   //------------------------------------------------
2464 // SKIP: Events with well-established PVtx
2465 //------------------------------------------------
2466         
2467    const AliESDVertex *lPrimaryTrackingESDVtxCheck = lESDevent->GetPrimaryVertexTracks();
2468    const AliESDVertex *lPrimarySPDVtx = lESDevent->GetPrimaryVertexSPD();
2469    if (!lPrimarySPDVtx->GetStatus() && !lPrimaryTrackingESDVtxCheck->GetStatus() && fkpAVertexSelection == kFALSE){
2470       AliWarning("Pb / No SPD prim. vertex nor prim. Tracking vertex ... return !");
2471       PostData(1, fListHistV0);
2472       PostData(2, fTree);
2473       return;
2474    }
2475
2476    f2dHistMultiplicityVsVertexZNoTPCOnly->Fill( lMultiplicity, lPrimaryVtxPosition[2] );
2477    fHistV0MultiplicityForSelEvtNoTPCOnly ->Fill( lNumberOfV0s );
2478    fHistMultiplicityNoTPCOnly->Fill(lMultiplicity);
2479    fHistMultiplicityV0ANoTPCOnly->Fill(lMultiplicityV0A);
2480    fHistMultiplicityZNANoTPCOnly->Fill(lMultiplicityZNA);
2481    fHistMultiplicityTRKNoTPCOnly->Fill(lMultiplicityTRK);
2482    fHistMultiplicitySPDNoTPCOnly->Fill(lMultiplicitySPD);
2483    f2dHistMultiplicityVsTrueNoTPCOnly->Fill ( lMultiplicity , lNumberOfCharged );
2484    fHistGenVertexZNoTPCOnly->Fill( (mcPrimaryVtx.At(2)) );
2485 //------------------------------------------------
2486 // Pileup Rejection Studies
2487 //------------------------------------------------
2488
2489    // FIXME : quality selection regarding pile-up rejection 
2490    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
2491       AliWarning("Pb / This is tagged as Pileup from SPD... return !");
2492       PostData(1, fListHistV0);
2493       PostData(2, fTree);
2494       return;
2495    }
2496    f2dHistMultiplicityVsVertexZNoTPCOnlyNoPileup->Fill( lMultiplicity, lPrimaryVtxPosition[2] );
2497    fHistV0MultiplicityForSelEvtNoTPCOnlyNoPileup ->Fill( lNumberOfV0s );
2498  
2499    fHistMultiplicityNoTPCOnlyNoPileup->Fill(lMultiplicity);
2500    fHistMultiplicityV0ANoTPCOnlyNoPileup->Fill(lMultiplicityV0A);
2501    fHistMultiplicityZNANoTPCOnlyNoPileup->Fill(lMultiplicityZNA);
2502    fHistMultiplicityTRKNoTPCOnlyNoPileup->Fill(lMultiplicityTRK);
2503    fHistMultiplicitySPDNoTPCOnlyNoPileup->Fill(lMultiplicitySPD);
2504   
2505    f2dHistMultiplicityVsTrueNoTPCOnlyNoPileup->Fill ( lMultiplicity , lNumberOfCharged );
2506    fHistGenVertexZNoTPCOnlyNoPileup->Fill( (mcPrimaryVtx.At(2)) );
2507    //Do control histograms without the IsFromVertexerZ events, but consider them in analysis...
2508    if( ! (lESDevent->GetPrimaryVertex()->IsFromVertexerZ() )     ){ 
2509       fHistPVxAnalysis->Fill( lPrimaryVtxPosition[0] );
2510       fHistPVyAnalysis->Fill( lPrimaryVtxPosition[1] );
2511       fHistPVzAnalysis->Fill( lPrimaryVtxPosition[2] );
2512       if ( lHasHighPtLambda == kTRUE ){ 
2513          fHistPVxAnalysisHasHighPtLambda->Fill( lPrimaryVtxPosition[0] );
2514          fHistPVyAnalysisHasHighPtLambda->Fill( lPrimaryVtxPosition[1] );
2515          fHistPVzAnalysisHasHighPtLambda->Fill( lPrimaryVtxPosition[2] );
2516       }
2517    }
2518
2519   fTreeVariableVertexZ = lPrimaryVtxPosition[2];
2520
2521   fTreeVariablePVx = lPrimaryVtxPosition[0];
2522   fTreeVariablePVy = lPrimaryVtxPosition[1];
2523   fTreeVariablePVz = lPrimaryVtxPosition[2];
2524
2525   fTreeVariableMCPVx = (mcPrimaryVtx.At(0));
2526   fTreeVariableMCPVy = (mcPrimaryVtx.At(1));
2527   fTreeVariableMCPVz = (mcPrimaryVtx.At(2));
2528
2529 //------------------------------------------------
2530 // stack loop starts here
2531 //------------------------------------------------
2532
2533 //---> Loop over ALL PARTICLES
2534  
2535    for (Int_t iMc = 0; iMc < (lMCstack->GetNtrack()); iMc++) {  
2536       TParticle *p0 = lMCstack->Particle(iMc); 
2537       if (!p0) {
2538          //Printf("ERROR: particle with label %d not found in lMCstack (mc loop)", iMc);
2539          continue;
2540       }
2541       lPdgcodeCurrentPart = p0->GetPdgCode();
2542
2543       // Keep only K0s, Lambda and AntiLambda:
2544       if ( (lPdgcodeCurrentPart != 310 ) && (lPdgcodeCurrentPart != 3122 ) && (lPdgcodeCurrentPart != -3122 ) ) continue;
2545         
2546       lRapCurrentPart   = MyRapidity(p0->Energy(),p0->Pz());
2547       lPtCurrentPart    = p0->Pt();
2548
2549         //Use Physical Primaries only for filling PrimRaw Histograms!
2550       if ( lMCstack->IsPhysicalPrimary(iMc)!=kTRUE ) continue;
2551
2552       if( lPdgcodeCurrentPart == 3122 ){
2553         //NRaw
2554         f3dHistPrimAnalysisPtVsYVsMultLambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicity);
2555         f3dHistPrimAnalysisPtVsYCMSVsMultLambda->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicity);
2556         //NTrue
2557         f3dHistPrimAnalysisPtVsYVsMultMCLambda->Fill(lPtCurrentPart, lRapCurrentPart, lNumberOfCharged);
2558         f3dHistPrimAnalysisPtVsYCMSVsMultMCLambda->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lNumberOfCharged);
2559         //Other stuff
2560         f3dHistPrimAnalysisPtVsYVsMultV0ALambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicityV0A);
2561         f3dHistPrimAnalysisPtVsYCMSVsMultV0ALambda->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicityV0A);
2562         f3dHistPrimAnalysisPtVsYVsMultZNALambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicityZNA);
2563         f3dHistPrimAnalysisPtVsYCMSVsMultZNALambda->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicityZNA);
2564         f3dHistPrimAnalysisPtVsYVsMultTRKLambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicityTRK);
2565         f3dHistPrimAnalysisPtVsYCMSVsMultTRKLambda->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicityTRK);
2566         f3dHistPrimAnalysisPtVsYVsMultSPDLambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicitySPD);
2567         f3dHistPrimAnalysisPtVsYCMSVsMultSPDLambda->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicitySPD);
2568       }
2569       if( lPdgcodeCurrentPart == -3122 ){
2570         //NRaw
2571         f3dHistPrimAnalysisPtVsYVsMultAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicity);
2572         f3dHistPrimAnalysisPtVsYCMSVsMultAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicity);
2573         //NTrue
2574         f3dHistPrimAnalysisPtVsYVsMultMCAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart, lNumberOfCharged);
2575         f3dHistPrimAnalysisPtVsYCMSVsMultMCAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lNumberOfCharged);
2576         //Other stuff
2577         f3dHistPrimAnalysisPtVsYVsMultV0AAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicityV0A);
2578         f3dHistPrimAnalysisPtVsYCMSVsMultV0AAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicityV0A);
2579         f3dHistPrimAnalysisPtVsYVsMultZNAAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicityZNA);
2580         f3dHistPrimAnalysisPtVsYCMSVsMultZNAAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicityZNA);
2581         f3dHistPrimAnalysisPtVsYVsMultTRKAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicityTRK);
2582         f3dHistPrimAnalysisPtVsYCMSVsMultTRKAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicityTRK);
2583         f3dHistPrimAnalysisPtVsYVsMultSPDAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicitySPD);
2584         f3dHistPrimAnalysisPtVsYCMSVsMultSPDAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicitySPD);
2585         
2586       }
2587       if( lPdgcodeCurrentPart == 310 ){
2588         //NRaw
2589         f3dHistPrimAnalysisPtVsYVsMultK0Short->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicity);
2590         f3dHistPrimAnalysisPtVsYCMSVsMultK0Short->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicity);
2591         //NTrue
2592         f3dHistPrimAnalysisPtVsYVsMultMCK0Short->Fill(lPtCurrentPart, lRapCurrentPart, lNumberOfCharged);
2593         f3dHistPrimAnalysisPtVsYCMSVsMultMCK0Short->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lNumberOfCharged);
2594         //Other Stuff
2595         f3dHistPrimAnalysisPtVsYVsMultV0AK0Short->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicityV0A);
2596         f3dHistPrimAnalysisPtVsYCMSVsMultV0AK0Short->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicityV0A);
2597         f3dHistPrimAnalysisPtVsYVsMultZNAK0Short->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicityZNA);
2598         f3dHistPrimAnalysisPtVsYCMSVsMultZNAK0Short->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicityZNA);
2599         f3dHistPrimAnalysisPtVsYVsMultTRKK0Short->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicityTRK);
2600         f3dHistPrimAnalysisPtVsYCMSVsMultTRKK0Short->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicityTRK);
2601         f3dHistPrimAnalysisPtVsYVsMultSPDK0Short->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicitySPD);
2602         f3dHistPrimAnalysisPtVsYCMSVsMultSPDK0Short->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicitySPD);
2603       }
2604    }
2605
2606 //----- Loop on primary Xi, Omega --------------------------------------------------------------
2607    for (Int_t iCurrentLabelStack = 0; iCurrentLabelStack < lNbMCPrimary; iCurrentLabelStack++) 
2608    {// This is the begining of the loop on primaries
2609       
2610       TParticle* lCurrentParticlePrimary = 0x0; 
2611       lCurrentParticlePrimary = lMCstack->Particle( iCurrentLabelStack );
2612       if(!lCurrentParticlePrimary){
2613          Printf("Cascade loop %d - MC TParticle pointer to current stack particle = 0x0 ! Skip ...\n", iCurrentLabelStack );
2614          continue;
2615       }
2616       if ( TMath::Abs(lCurrentParticlePrimary->GetPdgCode()) == 3312 || TMath::Abs(lCurrentParticlePrimary->GetPdgCode()) == 3334 ) { 
2617          Double_t lRapXiMCPrimary = -100;
2618          if( (lCurrentParticlePrimary->Energy() - lCurrentParticlePrimary->Pz() +1.e-13) != 0 ) { 
2619            if ( (lCurrentParticlePrimary->Energy() + lCurrentParticlePrimary->Pz()) / (lCurrentParticlePrimary->Energy() - lCurrentParticlePrimary->Pz() +1.e-13) !=0 ){
2620              lRapXiMCPrimary = 0.5*TMath::Log( (lCurrentParticlePrimary->Energy() + lCurrentParticlePrimary->Pz()) / (lCurrentParticlePrimary->Energy() - lCurrentParticlePrimary->Pz() +1.e-13) );
2621            }
2622          }
2623
2624          //=================================================================================
2625          // Xi Histograms
2626          if( lCurrentParticlePrimary->GetPdgCode() == 3312 ){ 
2627             lPtCurrentPart    = lCurrentParticlePrimary->Pt();
2628             f3dHistGenSelectedPtVsYVsMultXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicity);
2629             f3dHistGenSelectedPtVsYCMSVsMultXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicity);
2630            f3dHistGenSelectedPtVsYVsMultV0AXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicityV0A);
2631            f3dHistGenSelectedPtVsYCMSVsMultV0AXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicityV0A);
2632            f3dHistGenSelectedPtVsYVsMultZNAXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicityZNA);
2633            f3dHistGenSelectedPtVsYCMSVsMultZNAXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicityZNA);
2634            f3dHistGenSelectedPtVsYVsMultTRKXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicityTRK);
2635            f3dHistGenSelectedPtVsYCMSVsMultTRKXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicityTRK);
2636            f3dHistGenSelectedPtVsYVsMultSPDXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicitySPD);
2637            f3dHistGenSelectedPtVsYCMSVsMultSPDXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicitySPD);
2638          }
2639          if( lCurrentParticlePrimary->GetPdgCode() == -3312 ){
2640             lPtCurrentPart    = lCurrentParticlePrimary->Pt();
2641             f3dHistGenSelectedPtVsYVsMultXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicity);
2642             f3dHistGenSelectedPtVsYCMSVsMultXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicity);
2643            f3dHistGenSelectedPtVsYVsMultV0AXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicityV0A);
2644            f3dHistGenSelectedPtVsYCMSVsMultV0AXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicityV0A);
2645            f3dHistGenSelectedPtVsYVsMultZNAXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicityZNA);
2646            f3dHistGenSelectedPtVsYCMSVsMultZNAXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicityZNA);
2647            f3dHistGenSelectedPtVsYVsMultTRKXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicityTRK);
2648            f3dHistGenSelectedPtVsYCMSVsMultTRKXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicityTRK);
2649            f3dHistGenSelectedPtVsYVsMultSPDXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicitySPD);
2650            f3dHistGenSelectedPtVsYCMSVsMultSPDXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicitySPD);
2651          }
2652       }
2653    }
2654 //----- End Loop on primary Xi, Omega ----------------------------------------------------------
2655
2656 //------------------------------------------------
2657 // MAIN LAMBDA LOOP STARTS HERE
2658 //------------------------------------------------
2659
2660    //Variable definition
2661    Int_t    lOnFlyStatus = 0;
2662    Double_t lChi2V0 = 0;
2663    Double_t lDcaV0Daughters = 0, lDcaV0ToPrimVertex = 0;
2664    Double_t lDcaPosToPrimVertex = 0, lDcaNegToPrimVertex = 0;
2665    Double_t lV0CosineOfPointingAngle = 0;
2666    Double_t lV0Radius = 0, lPt = 0;
2667    Double_t lRapK0Short = 0, lRapLambda = 0;
2668    Double_t lInvMassK0s = 0, lInvMassLambda = 0, lInvMassAntiLambda = 0;
2669    Double_t lAlphaV0 = 0, lPtArmV0 = 0;
2670    Double_t fMinV0Pt = 0; 
2671    Double_t fMaxV0Pt = 100; 
2672
2673    Int_t nv0s = 0;
2674    nv0s = lESDevent->GetNumberOfV0s();
2675    
2676    for (Int_t iV0 = 0; iV0 < nv0s; iV0++) 
2677         {// This is the begining of the V0 loop
2678       AliESDv0 *v0 = ((AliESDEvent*)lESDevent)->GetV0(iV0);
2679       if (!v0) continue;
2680
2681       //---> Fix On-the-Fly candidates
2682       if( v0->GetParamN()->Charge() > 0 && v0->GetParamP()->Charge() < 0 ){
2683         fHistSwappedV0Counter -> Fill( 1 );
2684       }else{
2685         fHistSwappedV0Counter -> Fill( 0 ); 
2686       }
2687       if ( fkUseOnTheFly ) CheckChargeV0(v0); 
2688
2689
2690       Double_t tV0mom[3];
2691       v0->GetPxPyPz( tV0mom[0],tV0mom[1],tV0mom[2] ); 
2692       Double_t lV0TotalMomentum = TMath::Sqrt(
2693          tV0mom[0]*tV0mom[0]+tV0mom[1]*tV0mom[1]+tV0mom[2]*tV0mom[2] );
2694
2695       Double_t tDecayVertexV0[3]; v0->GetXYZ(tDecayVertexV0[0],tDecayVertexV0[1],tDecayVertexV0[2]); 
2696       lV0Radius = TMath::Sqrt(tDecayVertexV0[0]*tDecayVertexV0[0]+tDecayVertexV0[1]*tDecayVertexV0[1]);
2697       lPt = v0->Pt();
2698       lRapK0Short = v0->RapK0Short();
2699       lRapLambda  = v0->RapLambda();
2700
2701       //Set Variables for later filling
2702       fTreeVariableV0x = tDecayVertexV0[0];
2703       fTreeVariableV0y = tDecayVertexV0[1];
2704       fTreeVariableV0z = tDecayVertexV0[2];
2705
2706       //Set Variables for later filling
2707       fTreeVariableV0Px = tV0mom[0];
2708       fTreeVariableV0Py = tV0mom[1];
2709       fTreeVariableV0Pz = tV0mom[2];
2710
2711       if ((lPt<fMinV0Pt)||(fMaxV0Pt<lPt)) continue;
2712
2713       UInt_t lKeyPos = (UInt_t)TMath::Abs(v0->GetPindex());
2714       UInt_t lKeyNeg = (UInt_t)TMath::Abs(v0->GetNindex());
2715
2716       Double_t lMomPos[3]; v0->GetPPxPyPz(lMomPos[0],lMomPos[1],lMomPos[2]);
2717       Double_t lMomNeg[3]; v0->GetNPxPyPz(lMomNeg[0],lMomNeg[1],lMomNeg[2]);
2718
2719       AliESDtrack *pTrack=((AliESDEvent*)lESDevent)->GetTrack(lKeyPos);
2720       AliESDtrack *nTrack=((AliESDEvent*)lESDevent)->GetTrack(lKeyNeg);
2721       if (!pTrack || !nTrack) {
2722          Printf("ERROR: Could not retreive one of the daughter track");
2723          continue;
2724       }
2725
2726       fTreeVariableNegEta = nTrack->Eta();
2727       fTreeVariablePosEta = pTrack->Eta();
2728
2729       // Filter like-sign V0 (next: add counter and distribution)
2730       if ( pTrack->GetSign() == nTrack->GetSign()){
2731          continue;
2732       } 
2733
2734       //________________________________________________________________________
2735       // Track quality cuts 
2736       Float_t lPosTrackCrossedRows = pTrack->GetTPCClusterInfo(2,1);
2737       Float_t lNegTrackCrossedRows = nTrack->GetTPCClusterInfo(2,1);
2738       fTreeVariableLeastNbrCrossedRows = (Int_t) lPosTrackCrossedRows;
2739       if( lNegTrackCrossedRows < fTreeVariableLeastNbrCrossedRows )
2740          fTreeVariableLeastNbrCrossedRows = (Int_t) lNegTrackCrossedRows;
2741
2742       // TPC refit condition (done during reconstruction for Offline but not for On-the-fly)
2743       if( !(pTrack->GetStatus() & AliESDtrack::kTPCrefit)) continue;      
2744       if( !(nTrack->GetStatus() & AliESDtrack::kTPCrefit)) continue;
2745
2746       //Get status flags
2747       fTreeVariablePosTrackStatus = pTrack->GetStatus();
2748       fTreeVariableNegTrackStatus = nTrack->GetStatus();
2749     
2750       if ( ( ( ( pTrack->GetTPCClusterInfo(2,1) ) < 70 ) || ( ( nTrack->GetTPCClusterInfo(2,1) ) < 70 ) )&&(fkTakeAllTracks==kFALSE) ) continue;
2751         
2752       //GetKinkIndex condition
2753       if( pTrack->GetKinkIndex(0)>0 || nTrack->GetKinkIndex(0)>0 ) continue;
2754
2755       //Findable clusters > 0 condition
2756       if( pTrack->GetTPCNclsF()<=0 || nTrack->GetTPCNclsF()<=0 ) continue;
2757
2758       //Compute ratio Crossed Rows / Findable clusters
2759       //Note: above test avoids division by zero! 
2760       Float_t lPosTrackCrossedRowsOverFindable = -1;
2761       Float_t lNegTrackCrossedRowsOverFindable = -1;
2762       if ( ((double)(pTrack->GetTPCNclsF()) ) != 0 ) lPosTrackCrossedRowsOverFindable = lPosTrackCrossedRows / ((double)(pTrack->GetTPCNclsF())); 
2763       if ( ((double)(nTrack->GetTPCNclsF()) ) != 0 ) lNegTrackCrossedRowsOverFindable = lNegTrackCrossedRows / ((double)(nTrack->GetTPCNclsF())); 
2764
2765       fTreeVariableLeastRatioCrossedRowsOverFindable = lPosTrackCrossedRowsOverFindable;
2766       if( lNegTrackCrossedRowsOverFindable < fTreeVariableLeastRatioCrossedRowsOverFindable )
2767          fTreeVariableLeastRatioCrossedRowsOverFindable = lNegTrackCrossedRowsOverFindable;
2768
2769       //Lowest Cut Level for Ratio Crossed Rows / Findable = 0.8, set here
2770       if ( (fTreeVariableLeastRatioCrossedRowsOverFindable < 0.8)&&(fkTakeAllTracks==kFALSE) ) continue;
2771
2772       //End track Quality Cuts
2773       //________________________________________________________________________
2774
2775       lDcaPosToPrimVertex = TMath::Abs(pTrack->GetD(lPrimaryVtxPosition[0],
2776                                                         lPrimaryVtxPosition[1],
2777                                                         lMagneticField) );
2778
2779       lDcaNegToPrimVertex = TMath::Abs(nTrack->GetD(lPrimaryVtxPosition[0],
2780                                                         lPrimaryVtxPosition[1],
2781                                                         lMagneticField) );
2782
2783       lOnFlyStatus = v0->GetOnFlyStatus();
2784       lChi2V0 = v0->GetChi2V0();
2785       lDcaV0Daughters = v0->GetDcaV0Daughters();
2786       lDcaV0ToPrimVertex = v0->GetD(lPrimaryVtxPosition[0],lPrimaryVtxPosition[1],lPrimaryVtxPosition[2]);
2787       lV0CosineOfPointingAngle = v0->GetV0CosineOfPointingAngle(lPrimaryVtxPosition[0],lPrimaryVtxPosition[1],lPrimaryVtxPosition[2]);
2788       fTreeVariableV0CosineOfPointingAngle=lV0CosineOfPointingAngle;
2789
2790       // Getting invariant mass infos directly from ESD
2791       v0->ChangeMassHypothesis(310);
2792       lInvMassK0s = v0->GetEffMass();
2793       v0->ChangeMassHypothesis(3122);
2794       lInvMassLambda = v0->GetEffMass();
2795       v0->ChangeMassHypothesis(-3122);
2796       lInvMassAntiLambda = v0->GetEffMass();
2797       lAlphaV0 = v0->AlphaV0();
2798       lPtArmV0 = v0->PtArmV0();
2799
2800       //fTreeVariableOnFlyStatus = lOnFlyStatus;
2801       //fHistV0OnFlyStatus->Fill(lOnFlyStatus);
2802
2803 //===============================================
2804 // Monte Carlo Association starts here
2805 //===============================================
2806
2807       //---> Set Everything to "I don't know" before starting
2808
2809       fTreeVariablePIDPositive = 0;
2810       fTreeVariablePIDNegative = 0;
2811
2812       fTreeVariableIndexStatus = 0;
2813       fTreeVariableIndexStatusMother = 0;
2814
2815       fTreeVariablePtMother = -1;
2816       fTreeVariablePtMC = -1;
2817       fTreeVariableRapMC = -100;
2818
2819       fTreeVariablePID = -1; 
2820       fTreeVariablePIDMother = -1;
2821
2822       fTreeVariablePrimaryStatus = 0; 
2823       fTreeVariablePrimaryStatusMother = 0; 
2824       fTreeVariableV0CreationRadius = -1;
2825     
2826       fTreeVariableNegPhysicalStatus = 0;
2827       fTreeVariablePosPhysicalStatus = 0;
2828     
2829       Int_t lblPosV0Dghter = (Int_t) TMath::Abs( pTrack->GetLabel() );
2830       Int_t lblNegV0Dghter = (Int_t) TMath::Abs( nTrack->GetLabel() );
2831                 
2832       TParticle* mcPosV0Dghter = lMCstack->Particle( lblPosV0Dghter );
2833       TParticle* mcNegV0Dghter = lMCstack->Particle( lblNegV0Dghter );
2834             
2835       fTreeVariablePosTransvMomentumMC = mcPosV0Dghter->Pt();
2836       fTreeVariableNegTransvMomentumMC = mcNegV0Dghter->Pt();
2837
2838       Int_t lPIDPositive = mcPosV0Dghter -> GetPdgCode();
2839       Int_t lPIDNegative = mcNegV0Dghter -> GetPdgCode();
2840
2841       fTreeVariablePIDPositive = lPIDPositive;
2842       fTreeVariablePIDNegative = lPIDNegative;
2843
2844       Int_t lblMotherPosV0Dghter = mcPosV0Dghter->GetFirstMother() ; 
2845       Int_t lblMotherNegV0Dghter = mcNegV0Dghter->GetFirstMother();
2846     
2847       if( lMCstack->IsPhysicalPrimary       (lblNegV0Dghter) ) fTreeVariableNegPhysicalStatus = 1; //Is Primary!
2848       if( lMCstack->IsSecondaryFromWeakDecay(lblNegV0Dghter) ) fTreeVariableNegPhysicalStatus = 2; //Weak Decay!
2849       if( lMCstack->IsSecondaryFromMaterial (lblNegV0Dghter) ) fTreeVariableNegPhysicalStatus = 3; //Material Int!
2850
2851       if( lMCstack->IsPhysicalPrimary       (lblPosV0Dghter) ) fTreeVariablePosPhysicalStatus = 1; //Is Primary!
2852       if( lMCstack->IsSecondaryFromWeakDecay(lblPosV0Dghter) ) fTreeVariablePosPhysicalStatus = 2; //Weak Decay!
2853       if( lMCstack->IsSecondaryFromMaterial (lblPosV0Dghter) ) fTreeVariablePosPhysicalStatus = 3; //Material Int!
2854     
2855       if( lblMotherPosV0Dghter == lblMotherNegV0Dghter && lblMotherPosV0Dghter > -1 ){
2856          //either label is fine, they're equal at this stage
2857          TParticle* pThisV0 = lMCstack->Particle( lblMotherPosV0Dghter ); 
2858          //Set tree variables
2859          fTreeVariablePID   = pThisV0->GetPdgCode(); //PDG Code
2860          fTreeVariablePtMC  = pThisV0->Pt(); //Perfect Pt
2861
2862           fTreeVariableIsNonInjected = lMCevent->IsFromBGEvent(lblMotherPosV0Dghter); //Is it? 
2863           if (!fTreeVariableIsNonInjected){
2864             if (!(pThisV0->GetFirstMother()<0)) 
2865               {fTreeVariableIsNonInjected = kTRUE;} // because there are primaries (ALICE definition) not produced in the collision
2866           }
2867
2868          //Set Variables for later filling
2869          //Be careful: Vx, Vy, Vz: Creation vertex. So decay position is the 
2870          //Creation vertex of any one of the daughters!
2871          fTreeVariableMCV0x = mcPosV0Dghter->Vx();
2872          fTreeVariableMCV0y = mcPosV0Dghter->Vy();
2873          fTreeVariableMCV0z = mcPosV0Dghter->Vz();
2874
2875          //Set Variables for later filling
2876          fTreeVariableMCV0Px = pThisV0->Px();
2877          fTreeVariableMCV0Py = pThisV0->Py();
2878          fTreeVariableMCV0Pz = pThisV0->Pz();
2879
2880          //Only Interested if it's a Lambda, AntiLambda or K0s 
2881          //Avoid the Junction Bug! PYTHIA has particles with Px=Py=Pz=E=0 occasionally, 
2882          //having particle code 88 (unrecognized by PDG), for documentation purposes.
2883          //Even ROOT's TParticle::Y() is not prepared to deal with that exception!
2884          //Note that TParticle::Pt() is immune (that would just return 0)...
2885          //Though granted that that should be extremely rare in this precise condition...
2886          if( TMath::Abs(fTreeVariablePID) == 3122 || fTreeVariablePID==310 ){
2887             fTreeVariableRapMC = pThisV0->Y(); //Perfect Y
2888          }
2889          fTreeVariableV0CreationRadius = TMath::Sqrt(
2890           TMath::Power(  ( (mcPrimaryVtx.At(0)) - (pThisV0->Vx()) ) , 2) + 
2891           TMath::Power(  ( (mcPrimaryVtx.At(1)) - (pThisV0->Vy()) ) , 2) + 
2892           TMath::Power(  ( (mcPrimaryVtx.At(2)) - (pThisV0->Vz()) ) , 2) 
2893          );
2894          if( lblMotherPosV0Dghter  < lNbMCPrimary ) fTreeVariableIndexStatus = 1; //looks primary
2895          if( lblMotherPosV0Dghter >= lNbMCPrimary ) fTreeVariableIndexStatus = 2; //looks secondary
2896          if( lMCstack->IsPhysicalPrimary       (lblMotherPosV0Dghter) ) fTreeVariablePrimaryStatus = 1; //Is Primary!
2897          if( lMCstack->IsSecondaryFromWeakDecay(lblMotherPosV0Dghter) ) fTreeVariablePrimaryStatus = 2; //Weak Decay!
2898          if( lMCstack->IsSecondaryFromMaterial (lblMotherPosV0Dghter) ) fTreeVariablePrimaryStatus = 3; //Material Int!
2899          
2900          //Now we try to acquire the V0 parent particle, if possible
2901          Int_t lblThisV0Parent = pThisV0->GetFirstMother();
2902          if ( lblThisV0Parent > -1 ){ //if it has a parent, get it and store specs
2903             TParticle* pThisV0Parent = lMCstack->Particle( lblThisV0Parent );
2904             fTreeVariablePIDMother   = pThisV0Parent->GetPdgCode(); //V0 Mother PDG
2905             fTreeVariablePtMother    = pThisV0Parent->Pt();         //V0 Mother Pt
2906             //Primary Status for the V0 Mother particle 
2907             if( lblThisV0Parent  < lNbMCPrimary ) fTreeVariableIndexStatusMother = 1; //looks primary
2908             if( lblThisV0Parent >= lNbMCPrimary ) fTreeVariableIndexStatusMother = 2; //looks secondary
2909             if( lMCstack->IsPhysicalPrimary       (lblThisV0Parent) ) fTreeVariablePrimaryStatusMother = 1; //Is Primary!
2910             if( lMCstack->IsSecondaryFromWeakDecay(lblThisV0Parent) ) fTreeVariablePrimaryStatusMother = 2; //Weak Decay!
2911             if( lMCstack->IsSecondaryFromMaterial (lblThisV0Parent) ) fTreeVariablePrimaryStatusMother = 3; //Material Int!
2912          }
2913       }
2914
2915       fTreeVariablePt = v0->Pt();
2916       fTreeVariableChi2V0 = lChi2V0; 
2917       fTreeVariableDcaV0ToPrimVertex = lDcaV0ToPrimVertex;
2918       fTreeVariableDcaV0Daughters = lDcaV0Daughters;
2919       fTreeVariableV0CosineOfPointingAngle = lV0CosineOfPointingAngle; 
2920       fTreeVariableV0Radius = lV0Radius;
2921       fTreeVariableDcaPosToPrimVertex = lDcaPosToPrimVertex;
2922       fTreeVariableDcaNegToPrimVertex = lDcaNegToPrimVertex;
2923       fTreeVariableInvMassK0s = lInvMassK0s;
2924       fTreeVariableInvMassLambda = lInvMassLambda;
2925       fTreeVariableInvMassAntiLambda = lInvMassAntiLambda;
2926       fTreeVariableRapK0Short = lRapK0Short;
2927
2928       fTreeVariableRapLambda = lRapLambda;
2929       fTreeVariableAlphaV0 = lAlphaV0;
2930       fTreeVariablePtArmV0 = lPtArmV0;
2931
2932       //Official means of acquiring N-sigmas 
2933       fTreeVariableNSigmasPosProton = fPIDResponse->NumberOfSigmasTPC( pTrack, AliPID::kProton );
2934       fTreeVariableNSigmasPosPion   = fPIDResponse->NumberOfSigmasTPC( pTrack, AliPID::kPion );
2935       fTreeVariableNSigmasNegProton = fPIDResponse->NumberOfSigmasTPC( nTrack, AliPID::kProton );
2936       fTreeVariableNSigmasNegPion   = fPIDResponse->NumberOfSigmasTPC( nTrack, AliPID::kPion );
2937
2938 //tDecayVertexV0[0],tDecayVertexV0[1],tDecayVertexV0[2]
2939       Double_t lDistanceTravelled = TMath::Sqrt(
2940                                                 TMath::Power( tDecayVertexV0[0] - lBestPrimaryVtxPos[0] , 2) +
2941                                                 TMath::Power( tDecayVertexV0[1] - lBestPrimaryVtxPos[1] , 2) +
2942                                                 TMath::Power( tDecayVertexV0[2] - lBestPrimaryVtxPos[2] , 2)
2943                                         );
2944       fTreeVariableDistOverTotMom = 1e+5;
2945       if( lV0TotalMomentum + 1e-10 != 0 ) fTreeVariableDistOverTotMom = lDistanceTravelled / (lV0TotalMomentum + 1e-10); //avoid division by zero, to be sure
2946
2947       Double_t lMomentumPosTemp[3];
2948       pTrack->GetPxPyPz(lMomentumPosTemp);
2949       Double_t lPtPosTemporary = sqrt(pow(lMomentumPosTemp[0],2) + pow(lMomentumPosTemp[1],2));
2950
2951       Double_t lMomentumNegTemp[3];
2952       nTrack->GetPxPyPz(lMomentumNegTemp);
2953       Double_t lPtNegTemporary = sqrt(pow(lMomentumNegTemp[0],2) + pow(lMomentumNegTemp[1],2));
2954
2955       fTreeVariablePosTransvMomentum = lPtPosTemporary;
2956       fTreeVariableNegTransvMomentum = lPtNegTemporary;
2957
2958
2959 //------------------------------------------------
2960 // Fill Tree! 
2961 //------------------------------------------------
2962
2963       // The conditionals are meant to decrease excessive
2964       // memory usage! 
2965
2966       //Modified version: Keep only OnFlyStatus == 0
2967       //Keep only if included in a parametric InvMass Region 20 sigmas away from peak
2968
2969       //First Selection: Reject OnFly
2970       if( (lOnFlyStatus == 0 && fkUseOnTheFly == kFALSE) || (lOnFlyStatus != 0 && fkUseOnTheFly == kTRUE ) ){
2971          //Second Selection: rough 20-sigma band, parametric. 
2972          //K0Short: Enough to parametrize peak broadening with linear function.    
2973          Double_t lUpperLimitK0Short = (5.63707e-01) + (1.14979e-02)*fTreeVariablePt; 
2974          Double_t lLowerLimitK0Short = (4.30006e-01) - (1.10029e-02)*fTreeVariablePt;
2975          //Lambda: Linear (for higher pt) plus exponential (for low-pt broadening)
2976          //[0]+[1]*x+[2]*TMath::Exp(-[3]*x)
2977          Double_t lUpperLimitLambda = (1.13688e+00) + (5.27838e-03)*fTreeVariablePt + (8.42220e-02)*TMath::Exp(-(3.80595e+00)*fTreeVariablePt); 
2978          Double_t lLowerLimitLambda = (1.09501e+00) - (5.23272e-03)*fTreeVariablePt - (7.52690e-02)*TMath::Exp(-(3.46339e+00)*fTreeVariablePt);
2979          //Do Selection      
2980          if( (fTreeVariableInvMassLambda     < lUpperLimitLambda  && fTreeVariableInvMassLambda     > lLowerLimitLambda     ) || 
2981              (fTreeVariableInvMassAntiLambda < lUpperLimitLambda  && fTreeVariableInvMassAntiLambda > lLowerLimitLambda     ) || 
2982              (fTreeVariableInvMassK0s        < lUpperLimitK0Short && fTreeVariableInvMassK0s        > lLowerLimitK0Short    ) ){
2983              //Pre-selection in case this is AA...
2984              if( fkIsNuclear == kFALSE ) fTree->Fill();
2985              if( fkIsNuclear == kTRUE){ 
2986              //If this is a nuclear collision___________________
2987              // ... pre-filter with daughter eta selection only (not TPC)
2988                if ( TMath::Abs(fTreeVariableNegEta)<0.8 && TMath::Abs(fTreeVariablePosEta)<0.8 ) fTree->Fill();
2989              }//end nuclear_____________________________________
2990          }
2991       }
2992
2993 //------------------------------------------------
2994 // Fill tree over.
2995 //------------------------------------------------
2996
2997
2998    }// This is the end of the V0 loop
2999
3000 //------------------------------------------------
3001
3002    // Post output data.
3003    PostData(1, fListHistV0);
3004    PostData(2, fTree);
3005 }
3006
3007 //________________________________________________________________________
3008 void AliAnalysisTaskExtractPerformanceV0::Terminate(Option_t *)
3009 {
3010    // Draw result to the screen
3011    // Called once at the end of the query
3012
3013    TList *cRetrievedList = 0x0;
3014    cRetrievedList = (TList*)GetOutputData(1);
3015    if(!cRetrievedList){
3016       Printf("ERROR - AliAnalysisTaskExtractV0 : ouput data container list not available\n");
3017       return;
3018    }    
3019         
3020    fHistV0MultiplicityForTrigEvt = dynamic_cast<TH1F*> (  cRetrievedList->FindObject("fHistV0MultiplicityForTrigEvt")  );
3021    if (!fHistV0MultiplicityForTrigEvt) {
3022       Printf("ERROR - AliAnalysisTaskExtractV0 : fHistV0MultiplicityForTrigEvt not available");
3023       return;
3024    }
3025   
3026    TCanvas *canCheck = new TCanvas("AliAnalysisTaskExtractV0","V0 Multiplicity",10,10,510,510);
3027    canCheck->cd(1)->SetLogy();
3028
3029    fHistV0MultiplicityForTrigEvt->SetMarkerStyle(22);
3030    fHistV0MultiplicityForTrigEvt->DrawCopy("E");
3031 }
3032
3033 //----------------------------------------------------------------------------
3034
3035 Double_t AliAnalysisTaskExtractPerformanceV0::MyRapidity(Double_t rE, Double_t rPz) const
3036 {
3037    // Local calculation for rapidity
3038    Double_t ReturnValue = -100;
3039    if( (rE-rPz+1.e-13) != 0 && (rE+rPz) != 0 ){ 
3040       ReturnValue =  0.5*TMath::Log((rE+rPz)/(rE-rPz+1.e-13));
3041    }
3042    return ReturnValue;
3043
3044
3045 //________________________________________________________________________
3046 void AliAnalysisTaskExtractPerformanceV0::CheckChargeV0(AliESDv0 *v0)
3047 {
3048    // This function checks charge of negative and positive daughter tracks. 
3049    // If incorrectly defined (onfly vertexer), swaps out. 
3050    if( v0->GetParamN()->Charge() > 0 && v0->GetParamP()->Charge() < 0 ){
3051       //V0 daughter track swapping is required! Note: everything is swapped here... P->N, N->P
3052       Long_t lCorrectNidx = v0->GetPindex();
3053       Long_t lCorrectPidx = v0->GetNindex();
3054       Double32_t        lCorrectNmom[3];
3055       Double32_t        lCorrectPmom[3];
3056       v0->GetPPxPyPz( lCorrectNmom[0], lCorrectNmom[1], lCorrectNmom[2] );
3057       v0->GetNPxPyPz( lCorrectPmom[0], lCorrectPmom[1], lCorrectPmom[2] );
3058
3059       AliExternalTrackParam     lCorrectParamN(
3060         v0->GetParamP()->GetX() , 
3061         v0->GetParamP()->GetAlpha() , 
3062         v0->GetParamP()->GetParameter() , 
3063         v0->GetParamP()->GetCovariance() 
3064       );
3065       AliExternalTrackParam     lCorrectParamP(
3066         v0->GetParamN()->GetX() , 
3067         v0->GetParamN()->GetAlpha() , 
3068         v0->GetParamN()->GetParameter() , 
3069         v0->GetParamN()->GetCovariance() 
3070       );
3071       lCorrectParamN.SetMostProbablePt( v0->GetParamP()->GetMostProbablePt() );
3072       lCorrectParamP.SetMostProbablePt( v0->GetParamN()->GetMostProbablePt() );
3073
3074       //Get Variables___________________________________________________
3075       Double_t lDcaV0Daughters = v0 -> GetDcaV0Daughters();
3076       Double_t lCosPALocal     = v0 -> GetV0CosineOfPointingAngle(); 
3077       Bool_t lOnFlyStatusLocal = v0 -> GetOnFlyStatus();
3078
3079       //Create Replacement Object_______________________________________
3080       AliESDv0 *v0correct = new AliESDv0(lCorrectParamN,lCorrectNidx,lCorrectParamP,lCorrectPidx);
3081       v0correct->SetDcaV0Daughters          ( lDcaV0Daughters   );
3082       v0correct->SetV0CosineOfPointingAngle ( lCosPALocal       );
3083       v0correct->ChangeMassHypothesis       ( kK0Short          );
3084       v0correct->SetOnFlyStatus             ( lOnFlyStatusLocal );
3085
3086       //Reverse Cluster info..._________________________________________
3087       v0correct->SetClusters( v0->GetClusters( 1 ), v0->GetClusters ( 0 ) );
3088
3089       *v0 = *v0correct;
3090       //Proper cleanup..._______________________________________________
3091       v0correct->Delete();
3092       v0correct = 0x0;
3093
3094       //Just another cross-check and output_____________________________
3095       if( v0->GetParamN()->Charge() > 0 && v0->GetParamP()->Charge() < 0 ) {
3096         AliWarning("Found Swapped Charges, tried to correct but something FAILED!");
3097       }else{
3098         //AliWarning("Found Swapped Charges and fixed.");
3099       }
3100       //________________________________________________________________
3101    }else{
3102       //Don't touch it! ---
3103       //Printf("Ah, nice. Charges are already ordered...");
3104    }
3105    return;
3106
3107