]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGLF/STRANGENESS/Cascades/AliAnalysisTaskExtractPerformanceCascade.cxx
Merge branch 'master' of https://git.cern.ch/reps/AliRoot
[u/mrichter/AliRoot.git] / PWGLF / STRANGENESS / Cascades / AliAnalysisTaskExtractPerformanceCascade.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 Cascades, 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 //
36 //  Please Report Any Bugs! 
37 //
38 //   --- David Dobrigkeit Chinellato
39 //        (david.chinellato@gmail.com)
40 //
41 // +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
42
43 class TTree;
44 class TParticle;
45 class TVector3;
46
47 //class AliMCEventHandler;
48 //class AliMCEvent;
49 //class AliStack;
50
51 class AliESDVertex;
52 class AliAODVertex;
53 class AliESDv0;
54 class AliAODv0;
55
56 #include <Riostream.h>
57 #include "TList.h"
58 #include "TH1.h"
59 #include "TH2.h"
60 #include "TH3.h"
61 #include "TFile.h"
62 #include "THnSparse.h"
63 #include "TVector3.h"
64 #include "TCanvas.h"
65 #include "TMath.h"
66 #include "TLegend.h"
67 #include "AliLog.h"
68
69 #include "AliESDEvent.h"
70 #include "AliAODEvent.h"
71 #include "AliV0vertexer.h"
72 #include "AliCascadeVertexer.h"
73 #include "AliESDpid.h"
74 #include "AliESDtrack.h"
75 #include "AliESDtrackCuts.h"
76 #include "AliInputEventHandler.h"
77 #include "AliAnalysisManager.h"
78 #include "AliMCEventHandler.h"
79 #include "AliMCEvent.h"
80 #include "AliStack.h"
81
82 #include "AliCFContainer.h"
83 #include "AliMultiplicity.h"
84 #include "AliAODMCParticle.h"
85 #include "AliESDcascade.h"
86 #include "AliAODcascade.h"
87 #include "AliESDUtils.h"
88 #include "AliAnalysisUtils.h"
89 #include "AliGenEventHeader.h"
90
91 #include "AliAnalysisTaskExtractPerformanceCascade.h"
92
93 using std::cout;
94 using std::endl;
95
96 ClassImp(AliAnalysisTaskExtractPerformanceCascade)
97
98 AliAnalysisTaskExtractPerformanceCascade::AliAnalysisTaskExtractPerformanceCascade() 
99   : AliAnalysisTaskSE(), fListHist(0), fTreeCascade(0), fPIDResponse(0), fESDtrackCuts(0), fUtils(0),
100    fkIsNuclear   ( kFALSE ), 
101    fkSwitchINT7  ( kFALSE ),
102    fpArapidityShift ( 0.465 ),
103    fCentralityEstimator("V0M"),
104    fkpAVertexSelection( kFALSE ),
105    fEtaRefMult ( 0.5 ),
106    fkRunVertexers ( kFALSE ),
107    fkCheckSwapping( kFALSE ),
108 //------------------------------------------------
109 // Tree Variables
110 //------------------------------------------------
111
112    fTreeCascVarCharge(0),
113    fTreeCascVarMassAsXi(0),
114    fTreeCascVarMassAsOmega(0),
115    fTreeCascVarPt(0),
116    fTreeCascVarPtMC(0),
117    fTreeCascVarRapMC(0),
118    fTreeCascVarRapXi(0),
119    fTreeCascVarRapOmega(0),
120    fTreeCascVarNegEta(0),
121    fTreeCascVarPosEta(0),
122    fTreeCascVarBachEta(0),
123    fTreeCascVarDCACascDaughters(0),
124    fTreeCascVarDCABachToPrimVtx(0),
125    fTreeCascVarDCAV0Daughters(0),
126    fTreeCascVarDCAV0ToPrimVtx(0),
127    fTreeCascVarDCAPosToPrimVtx(0),
128    fTreeCascVarDCANegToPrimVtx(0),
129    fTreeCascVarCascCosPointingAngle(0),
130    fTreeCascVarCascRadius(0),
131    fTreeCascVarV0Mass(0),
132    fTreeCascVarV0CosPointingAngle(0),
133    fTreeCascVarV0CosPointingAngleSpecial(0),
134    fTreeCascVarV0Radius(0),
135    fTreeCascVarLeastNbrClusters(0),
136    fTreeCascVarMultiplicity(0),
137    fTreeCascVarMultiplicityV0A(0),
138    fTreeCascVarMultiplicityZNA(0),
139    fTreeCascVarMultiplicityTRK(0),
140    fTreeCascVarMultiplicitySPD(0),
141    fTreeCascVarMultiplicityMC(0),
142    fTreeCascVarDistOverTotMom(0),
143    fTreeCascVarIsPhysicalPrimary(0),
144    fTreeCascVarPID(0),
145    fTreeCascVarPIDSwapped(0),
146    fTreeCascVarPIDBachelor(0),
147    fTreeCascVarPIDNegative(0),
148    fTreeCascVarPIDPositive(0),
149    fTreeCascVarBachTransMom(0),
150    fTreeCascVarPosTransMom(0),
151    fTreeCascVarNegTransMom(0),
152    fTreeCascVarPosTransMomMC(0),
153    fTreeCascVarNegTransMomMC(0),
154    fTreeCascVarNegNSigmaPion(0),
155    fTreeCascVarNegNSigmaProton(0),
156    fTreeCascVarPosNSigmaPion(0),
157    fTreeCascVarPosNSigmaProton(0),
158    fTreeCascVarBachNSigmaPion(0),
159    fTreeCascVarBachNSigmaKaon(0),
160
161    fTreeCascVarkITSRefitBachelor(0),
162    fTreeCascVarkITSRefitNegative(0),
163    fTreeCascVarkITSRefitPositive(0),
164
165    fTreeCascVarEvHasXiMinus(0),
166    fTreeCascVarEvHasXiPlus(0),
167    fTreeCascVarEvHasOmegaMinus(0),
168    fTreeCascVarEvHasOmegaPlus(0),
169    fTreeCascVarEvHasLambda(0),
170    fTreeCascVarEvHasAntiLambda(0),
171
172    fTreeCascVarEvHasLowPtXiMinus(0),
173    fTreeCascVarEvHasLowPtXiPlus(0),
174    fTreeCascVarEvHasLowPtOmegaMinus(0),
175    fTreeCascVarEvHasLowPtOmegaPlus(0),
176    fTreeCascVarEvHasLowPtLambda(0),
177    fTreeCascVarEvHasLowPtAntiLambda(0),
178
179    fTreeCascVarEvHasVeryLowPtXiMinus(0),
180    fTreeCascVarEvHasVeryLowPtXiPlus(0),
181    fTreeCascVarEvHasVeryLowPtOmegaMinus(0),
182    fTreeCascVarEvHasVeryLowPtOmegaPlus(0),
183    fTreeCascVarEvHasVeryLowPtLambda(0),
184    fTreeCascVarEvHasVeryLowPtAntiLambda(0),
185
186 //------------------------------------------------
187 // HISTOGRAMS
188 // --- Filled on an Event-by-event basis
189 //------------------------------------------------
190    fHistV0MultiplicityBeforeTrigSel(0),
191    fHistV0MultiplicityForTrigEvt(0), 
192    fHistV0MultiplicityForSelEvt(0),
193    fHistV0MultiplicityForSelEvtNoTPCOnly(0),
194    fHistV0MultiplicityForSelEvtNoTPCOnlyNoPileup(0),
195    fHistMultiplicityBeforeTrigSel(0),
196    fHistMultiplicityForTrigEvt(0),
197    fHistMultiplicity(0),
198    fHistMultiplicityNoTPCOnly(0),
199    fHistMultiplicityNoTPCOnlyNoPileup(0),
200
201 //V0A Centrality
202 fHistMultiplicityV0ABeforeTrigSel(0),
203 fHistMultiplicityV0AForTrigEvt(0),
204 fHistMultiplicityV0A(0),
205 fHistMultiplicityV0ANoTPCOnly(0),
206 fHistMultiplicityV0ANoTPCOnlyNoPileup(0),
207
208 //ZNA Centrality
209 fHistMultiplicityZNABeforeTrigSel(0),
210 fHistMultiplicityZNAForTrigEvt(0),
211 fHistMultiplicityZNA(0),
212 fHistMultiplicityZNANoTPCOnly(0),
213 fHistMultiplicityZNANoTPCOnlyNoPileup(0),
214
215 //TRK Centrality
216 fHistMultiplicityTRKBeforeTrigSel(0),
217 fHistMultiplicityTRKForTrigEvt(0),
218 fHistMultiplicityTRK(0),
219 fHistMultiplicityTRKNoTPCOnly(0),
220 fHistMultiplicityTRKNoTPCOnlyNoPileup(0),
221
222 //SPD Centrality
223 fHistMultiplicitySPDBeforeTrigSel(0),
224 fHistMultiplicitySPDForTrigEvt(0),
225 fHistMultiplicitySPD(0),
226 fHistMultiplicitySPDNoTPCOnly(0),
227 fHistMultiplicitySPDNoTPCOnlyNoPileup(0),
228
229
230 //------------------------------------------------
231 // PARTICLE HISTOGRAMS
232 // --- Filled on a Particle-by-Particle basis
233 //------------------------------------------------
234    f3dHistGenPtVsYVsMultXiMinus(0),
235    f3dHistGenPtVsYVsMultXiPlus(0),
236    f3dHistGenPtVsYVsMultOmegaMinus(0),
237    f3dHistGenPtVsYVsMultOmegaPlus(0),
238    f3dHistGenSelectedPtVsYVsMultXiMinus(0),
239    f3dHistGenSelectedPtVsYVsMultXiPlus(0),
240    f3dHistGenSelectedPtVsYVsMultOmegaMinus(0),
241    f3dHistGenSelectedPtVsYVsMultOmegaPlus(0),
242    f3dHistGenPtVsYCMSVsMultXiMinus(0),
243    f3dHistGenPtVsYCMSVsMultXiPlus(0),
244    f3dHistGenPtVsYCMSVsMultOmegaMinus(0),
245    f3dHistGenPtVsYCMSVsMultOmegaPlus(0),
246    f3dHistGenSelectedPtVsYCMSVsMultXiMinus(0),
247    f3dHistGenSelectedPtVsYCMSVsMultXiPlus(0),
248    f3dHistGenSelectedPtVsYCMSVsMultOmegaMinus(0),
249    f3dHistGenSelectedPtVsYCMSVsMultOmegaPlus(0),
250
251 //MC Mult
252
253 f3dHistGenPtVsYVsMultMCXiMinus(0),
254 f3dHistGenPtVsYVsMultMCXiPlus(0),
255 f3dHistGenPtVsYVsMultMCOmegaMinus(0),
256 f3dHistGenPtVsYVsMultMCOmegaPlus(0),
257 f3dHistGenSelectedPtVsYVsMultMCXiMinus(0),
258 f3dHistGenSelectedPtVsYVsMultMCXiPlus(0),
259 f3dHistGenSelectedPtVsYVsMultMCOmegaMinus(0),
260 f3dHistGenSelectedPtVsYVsMultMCOmegaPlus(0),
261 f3dHistGenPtVsYCMSVsMultMCXiMinus(0),
262 f3dHistGenPtVsYCMSVsMultMCXiPlus(0),
263 f3dHistGenPtVsYCMSVsMultMCOmegaMinus(0),
264 f3dHistGenPtVsYCMSVsMultMCOmegaPlus(0),
265 f3dHistGenSelectedPtVsYCMSVsMultMCXiMinus(0),
266 f3dHistGenSelectedPtVsYCMSVsMultMCXiPlus(0),
267 f3dHistGenSelectedPtVsYCMSVsMultMCOmegaMinus(0),
268 f3dHistGenSelectedPtVsYCMSVsMultMCOmegaPlus(0),
269
270 //V0A
271
272 f3dHistGenPtVsYVsMultV0AXiMinus(0),
273 f3dHistGenPtVsYVsMultV0AXiPlus(0),
274 f3dHistGenPtVsYVsMultV0AOmegaMinus(0),
275 f3dHistGenPtVsYVsMultV0AOmegaPlus(0),
276 f3dHistGenSelectedPtVsYVsMultV0AXiMinus(0),
277 f3dHistGenSelectedPtVsYVsMultV0AXiPlus(0),
278 f3dHistGenSelectedPtVsYVsMultV0AOmegaMinus(0),
279 f3dHistGenSelectedPtVsYVsMultV0AOmegaPlus(0),
280 f3dHistGenPtVsYCMSVsMultV0AXiMinus(0),
281 f3dHistGenPtVsYCMSVsMultV0AXiPlus(0),
282 f3dHistGenPtVsYCMSVsMultV0AOmegaMinus(0),
283 f3dHistGenPtVsYCMSVsMultV0AOmegaPlus(0),
284 f3dHistGenSelectedPtVsYCMSVsMultV0AXiMinus(0),
285 f3dHistGenSelectedPtVsYCMSVsMultV0AXiPlus(0),
286 f3dHistGenSelectedPtVsYCMSVsMultV0AOmegaMinus(0),
287 f3dHistGenSelectedPtVsYCMSVsMultV0AOmegaPlus(0),
288
289 //ZNA
290
291 f3dHistGenPtVsYVsMultZNAXiMinus(0),
292 f3dHistGenPtVsYVsMultZNAXiPlus(0),
293 f3dHistGenPtVsYVsMultZNAOmegaMinus(0),
294 f3dHistGenPtVsYVsMultZNAOmegaPlus(0),
295 f3dHistGenSelectedPtVsYVsMultZNAXiMinus(0),
296 f3dHistGenSelectedPtVsYVsMultZNAXiPlus(0),
297 f3dHistGenSelectedPtVsYVsMultZNAOmegaMinus(0),
298 f3dHistGenSelectedPtVsYVsMultZNAOmegaPlus(0),
299 f3dHistGenPtVsYCMSVsMultZNAXiMinus(0),
300 f3dHistGenPtVsYCMSVsMultZNAXiPlus(0),
301 f3dHistGenPtVsYCMSVsMultZNAOmegaMinus(0),
302 f3dHistGenPtVsYCMSVsMultZNAOmegaPlus(0),
303 f3dHistGenSelectedPtVsYCMSVsMultZNAXiMinus(0),
304 f3dHistGenSelectedPtVsYCMSVsMultZNAXiPlus(0),
305 f3dHistGenSelectedPtVsYCMSVsMultZNAOmegaMinus(0),
306 f3dHistGenSelectedPtVsYCMSVsMultZNAOmegaPlus(0),
307
308 //TRK
309
310 f3dHistGenPtVsYVsMultTRKXiMinus(0),
311 f3dHistGenPtVsYVsMultTRKXiPlus(0),
312 f3dHistGenPtVsYVsMultTRKOmegaMinus(0),
313 f3dHistGenPtVsYVsMultTRKOmegaPlus(0),
314 f3dHistGenSelectedPtVsYVsMultTRKXiMinus(0),
315 f3dHistGenSelectedPtVsYVsMultTRKXiPlus(0),
316 f3dHistGenSelectedPtVsYVsMultTRKOmegaMinus(0),
317 f3dHistGenSelectedPtVsYVsMultTRKOmegaPlus(0),
318 f3dHistGenPtVsYCMSVsMultTRKXiMinus(0),
319 f3dHistGenPtVsYCMSVsMultTRKXiPlus(0),
320 f3dHistGenPtVsYCMSVsMultTRKOmegaMinus(0),
321 f3dHistGenPtVsYCMSVsMultTRKOmegaPlus(0),
322 f3dHistGenSelectedPtVsYCMSVsMultTRKXiMinus(0),
323 f3dHistGenSelectedPtVsYCMSVsMultTRKXiPlus(0),
324 f3dHistGenSelectedPtVsYCMSVsMultTRKOmegaMinus(0),
325 f3dHistGenSelectedPtVsYCMSVsMultTRKOmegaPlus(0),
326
327 //SPD
328
329 f3dHistGenPtVsYVsMultSPDXiMinus(0),
330 f3dHistGenPtVsYVsMultSPDXiPlus(0),
331 f3dHistGenPtVsYVsMultSPDOmegaMinus(0),
332 f3dHistGenPtVsYVsMultSPDOmegaPlus(0),
333 f3dHistGenSelectedPtVsYVsMultSPDXiMinus(0),
334 f3dHistGenSelectedPtVsYVsMultSPDXiPlus(0),
335 f3dHistGenSelectedPtVsYVsMultSPDOmegaMinus(0),
336 f3dHistGenSelectedPtVsYVsMultSPDOmegaPlus(0),
337 f3dHistGenPtVsYCMSVsMultSPDXiMinus(0),
338 f3dHistGenPtVsYCMSVsMultSPDXiPlus(0),
339 f3dHistGenPtVsYCMSVsMultSPDOmegaMinus(0),
340 f3dHistGenPtVsYCMSVsMultSPDOmegaPlus(0),
341 f3dHistGenSelectedPtVsYCMSVsMultSPDXiMinus(0),
342 f3dHistGenSelectedPtVsYCMSVsMultSPDXiPlus(0),
343 f3dHistGenSelectedPtVsYCMSVsMultSPDOmegaMinus(0),
344 f3dHistGenSelectedPtVsYCMSVsMultSPDOmegaPlus(0),
345
346
347    fHistPVx(0),
348    fHistPVy(0),
349    fHistPVz(0),
350    fHistPVxAnalysis(0),
351    fHistPVyAnalysis(0),
352    fHistPVzAnalysis(0)
353 {
354   // Dummy Constructor
355 }
356
357 AliAnalysisTaskExtractPerformanceCascade::AliAnalysisTaskExtractPerformanceCascade(const char *name) 
358   : AliAnalysisTaskSE(name), fListHist(0), fTreeCascade(0), fPIDResponse(0), fESDtrackCuts(0), fUtils(0),
359    fkIsNuclear   ( kFALSE ), 
360    fkSwitchINT7  ( kFALSE ),
361    fpArapidityShift ( 0.465 ),
362    fCentralityEstimator("V0M"),
363    fkpAVertexSelection( kFALSE ),
364    fEtaRefMult ( 0.5 ),
365    fkRunVertexers ( kFALSE ),
366    fkCheckSwapping( kFALSE ),
367 //------------------------------------------------
368 // Tree Variables
369 //------------------------------------------------
370
371    fTreeCascVarCharge(0),
372    fTreeCascVarMassAsXi(0),
373    fTreeCascVarMassAsOmega(0),
374    fTreeCascVarPt(0),
375    fTreeCascVarPtMC(0),
376    fTreeCascVarRapMC(0),
377    fTreeCascVarRapXi(0),
378    fTreeCascVarRapOmega(0),
379    fTreeCascVarNegEta(0),
380    fTreeCascVarPosEta(0),
381    fTreeCascVarBachEta(0),
382    fTreeCascVarDCACascDaughters(0),
383    fTreeCascVarDCABachToPrimVtx(0),
384    fTreeCascVarDCAV0Daughters(0),
385    fTreeCascVarDCAV0ToPrimVtx(0),
386    fTreeCascVarDCAPosToPrimVtx(0),
387    fTreeCascVarDCANegToPrimVtx(0),
388    fTreeCascVarCascCosPointingAngle(0),
389    fTreeCascVarCascRadius(0),
390    fTreeCascVarV0Mass(0),
391    fTreeCascVarV0CosPointingAngle(0),
392    fTreeCascVarV0CosPointingAngleSpecial(0),
393    fTreeCascVarV0Radius(0),
394    fTreeCascVarLeastNbrClusters(0),
395    fTreeCascVarMultiplicity(0),
396    fTreeCascVarMultiplicityV0A(0),
397    fTreeCascVarMultiplicityZNA(0),
398    fTreeCascVarMultiplicityTRK(0),
399    fTreeCascVarMultiplicitySPD(0),
400    fTreeCascVarMultiplicityMC(0),
401    fTreeCascVarDistOverTotMom(0),
402    fTreeCascVarIsPhysicalPrimary(0),
403    fTreeCascVarPID(0),
404    fTreeCascVarPIDSwapped(0),
405    fTreeCascVarPIDBachelor(0),
406    fTreeCascVarPIDNegative(0),
407    fTreeCascVarPIDPositive(0),
408    fTreeCascVarBachTransMom(0),
409    fTreeCascVarPosTransMom(0),
410    fTreeCascVarNegTransMom(0),
411    fTreeCascVarPosTransMomMC(0),
412    fTreeCascVarNegTransMomMC(0),
413    fTreeCascVarNegNSigmaPion(0),
414    fTreeCascVarNegNSigmaProton(0),
415    fTreeCascVarPosNSigmaPion(0),
416    fTreeCascVarPosNSigmaProton(0),
417    fTreeCascVarBachNSigmaPion(0),
418    fTreeCascVarBachNSigmaKaon(0),
419
420    fTreeCascVarkITSRefitBachelor(0),
421    fTreeCascVarkITSRefitNegative(0),
422    fTreeCascVarkITSRefitPositive(0),
423
424    fTreeCascVarEvHasXiMinus(0),
425    fTreeCascVarEvHasXiPlus(0),
426    fTreeCascVarEvHasOmegaMinus(0),
427    fTreeCascVarEvHasOmegaPlus(0),
428    fTreeCascVarEvHasLambda(0),
429    fTreeCascVarEvHasAntiLambda(0),
430
431    fTreeCascVarEvHasLowPtXiMinus(0),
432    fTreeCascVarEvHasLowPtXiPlus(0),
433    fTreeCascVarEvHasLowPtOmegaMinus(0),
434    fTreeCascVarEvHasLowPtOmegaPlus(0),
435    fTreeCascVarEvHasLowPtLambda(0),
436    fTreeCascVarEvHasLowPtAntiLambda(0),
437
438    fTreeCascVarEvHasVeryLowPtXiMinus(0),
439    fTreeCascVarEvHasVeryLowPtXiPlus(0),
440    fTreeCascVarEvHasVeryLowPtOmegaMinus(0),
441    fTreeCascVarEvHasVeryLowPtOmegaPlus(0),
442    fTreeCascVarEvHasVeryLowPtLambda(0),
443    fTreeCascVarEvHasVeryLowPtAntiLambda(0),
444
445 //------------------------------------------------
446 // HISTOGRAMS
447 // --- Filled on an Event-by-event basis
448 //------------------------------------------------
449    fHistV0MultiplicityBeforeTrigSel(0),
450    fHistV0MultiplicityForTrigEvt(0), 
451    fHistV0MultiplicityForSelEvt(0),
452    fHistV0MultiplicityForSelEvtNoTPCOnly(0),
453    fHistV0MultiplicityForSelEvtNoTPCOnlyNoPileup(0),
454    fHistMultiplicityBeforeTrigSel(0),
455    fHistMultiplicityForTrigEvt(0),
456    fHistMultiplicity(0),
457    fHistMultiplicityNoTPCOnly(0),
458    fHistMultiplicityNoTPCOnlyNoPileup(0),
459
460 //V0A Centrality
461 fHistMultiplicityV0ABeforeTrigSel(0),
462 fHistMultiplicityV0AForTrigEvt(0),
463 fHistMultiplicityV0A(0),
464 fHistMultiplicityV0ANoTPCOnly(0),
465 fHistMultiplicityV0ANoTPCOnlyNoPileup(0),
466
467 //ZNA Centrality
468 fHistMultiplicityZNABeforeTrigSel(0),
469 fHistMultiplicityZNAForTrigEvt(0),
470 fHistMultiplicityZNA(0),
471 fHistMultiplicityZNANoTPCOnly(0),
472 fHistMultiplicityZNANoTPCOnlyNoPileup(0),
473
474 //TRK Centrality
475 fHistMultiplicityTRKBeforeTrigSel(0),
476 fHistMultiplicityTRKForTrigEvt(0),
477 fHistMultiplicityTRK(0),
478 fHistMultiplicityTRKNoTPCOnly(0),
479 fHistMultiplicityTRKNoTPCOnlyNoPileup(0),
480
481 //SPD Centrality
482 fHistMultiplicitySPDBeforeTrigSel(0),
483 fHistMultiplicitySPDForTrigEvt(0),
484 fHistMultiplicitySPD(0),
485 fHistMultiplicitySPDNoTPCOnly(0),
486 fHistMultiplicitySPDNoTPCOnlyNoPileup(0),
487
488 //------------------------------------------------
489 // PARTICLE HISTOGRAMS
490 // --- Filled on a Particle-by-Particle basis
491 //------------------------------------------------
492    f3dHistGenPtVsYVsMultXiMinus(0),
493    f3dHistGenPtVsYVsMultXiPlus(0),
494    f3dHistGenPtVsYVsMultOmegaMinus(0),
495    f3dHistGenPtVsYVsMultOmegaPlus(0),
496    f3dHistGenSelectedPtVsYVsMultXiMinus(0),
497    f3dHistGenSelectedPtVsYVsMultXiPlus(0),
498    f3dHistGenSelectedPtVsYVsMultOmegaMinus(0),
499    f3dHistGenSelectedPtVsYVsMultOmegaPlus(0),
500    f3dHistGenPtVsYCMSVsMultXiMinus(0),
501    f3dHistGenPtVsYCMSVsMultXiPlus(0),
502    f3dHistGenPtVsYCMSVsMultOmegaMinus(0),
503    f3dHistGenPtVsYCMSVsMultOmegaPlus(0),
504    f3dHistGenSelectedPtVsYCMSVsMultXiMinus(0),
505    f3dHistGenSelectedPtVsYCMSVsMultXiPlus(0),
506    f3dHistGenSelectedPtVsYCMSVsMultOmegaMinus(0),
507    f3dHistGenSelectedPtVsYCMSVsMultOmegaPlus(0),
508
509 //MC Mult
510
511 f3dHistGenPtVsYVsMultMCXiMinus(0),
512 f3dHistGenPtVsYVsMultMCXiPlus(0),
513 f3dHistGenPtVsYVsMultMCOmegaMinus(0),
514 f3dHistGenPtVsYVsMultMCOmegaPlus(0),
515 f3dHistGenSelectedPtVsYVsMultMCXiMinus(0),
516 f3dHistGenSelectedPtVsYVsMultMCXiPlus(0),
517 f3dHistGenSelectedPtVsYVsMultMCOmegaMinus(0),
518 f3dHistGenSelectedPtVsYVsMultMCOmegaPlus(0),
519 f3dHistGenPtVsYCMSVsMultMCXiMinus(0),
520 f3dHistGenPtVsYCMSVsMultMCXiPlus(0),
521 f3dHistGenPtVsYCMSVsMultMCOmegaMinus(0),
522 f3dHistGenPtVsYCMSVsMultMCOmegaPlus(0),
523 f3dHistGenSelectedPtVsYCMSVsMultMCXiMinus(0),
524 f3dHistGenSelectedPtVsYCMSVsMultMCXiPlus(0),
525 f3dHistGenSelectedPtVsYCMSVsMultMCOmegaMinus(0),
526 f3dHistGenSelectedPtVsYCMSVsMultMCOmegaPlus(0),
527
528 //V0A
529
530 f3dHistGenPtVsYVsMultV0AXiMinus(0),
531 f3dHistGenPtVsYVsMultV0AXiPlus(0),
532 f3dHistGenPtVsYVsMultV0AOmegaMinus(0),
533 f3dHistGenPtVsYVsMultV0AOmegaPlus(0),
534 f3dHistGenSelectedPtVsYVsMultV0AXiMinus(0),
535 f3dHistGenSelectedPtVsYVsMultV0AXiPlus(0),
536 f3dHistGenSelectedPtVsYVsMultV0AOmegaMinus(0),
537 f3dHistGenSelectedPtVsYVsMultV0AOmegaPlus(0),
538 f3dHistGenPtVsYCMSVsMultV0AXiMinus(0),
539 f3dHistGenPtVsYCMSVsMultV0AXiPlus(0),
540 f3dHistGenPtVsYCMSVsMultV0AOmegaMinus(0),
541 f3dHistGenPtVsYCMSVsMultV0AOmegaPlus(0),
542 f3dHistGenSelectedPtVsYCMSVsMultV0AXiMinus(0),
543 f3dHistGenSelectedPtVsYCMSVsMultV0AXiPlus(0),
544 f3dHistGenSelectedPtVsYCMSVsMultV0AOmegaMinus(0),
545 f3dHistGenSelectedPtVsYCMSVsMultV0AOmegaPlus(0),
546
547 //ZNA
548
549 f3dHistGenPtVsYVsMultZNAXiMinus(0),
550 f3dHistGenPtVsYVsMultZNAXiPlus(0),
551 f3dHistGenPtVsYVsMultZNAOmegaMinus(0),
552 f3dHistGenPtVsYVsMultZNAOmegaPlus(0),
553 f3dHistGenSelectedPtVsYVsMultZNAXiMinus(0),
554 f3dHistGenSelectedPtVsYVsMultZNAXiPlus(0),
555 f3dHistGenSelectedPtVsYVsMultZNAOmegaMinus(0),
556 f3dHistGenSelectedPtVsYVsMultZNAOmegaPlus(0),
557 f3dHistGenPtVsYCMSVsMultZNAXiMinus(0),
558 f3dHistGenPtVsYCMSVsMultZNAXiPlus(0),
559 f3dHistGenPtVsYCMSVsMultZNAOmegaMinus(0),
560 f3dHistGenPtVsYCMSVsMultZNAOmegaPlus(0),
561 f3dHistGenSelectedPtVsYCMSVsMultZNAXiMinus(0),
562 f3dHistGenSelectedPtVsYCMSVsMultZNAXiPlus(0),
563 f3dHistGenSelectedPtVsYCMSVsMultZNAOmegaMinus(0),
564 f3dHistGenSelectedPtVsYCMSVsMultZNAOmegaPlus(0),
565
566 //TRK
567
568 f3dHistGenPtVsYVsMultTRKXiMinus(0),
569 f3dHistGenPtVsYVsMultTRKXiPlus(0),
570 f3dHistGenPtVsYVsMultTRKOmegaMinus(0),
571 f3dHistGenPtVsYVsMultTRKOmegaPlus(0),
572 f3dHistGenSelectedPtVsYVsMultTRKXiMinus(0),
573 f3dHistGenSelectedPtVsYVsMultTRKXiPlus(0),
574 f3dHistGenSelectedPtVsYVsMultTRKOmegaMinus(0),
575 f3dHistGenSelectedPtVsYVsMultTRKOmegaPlus(0),
576 f3dHistGenPtVsYCMSVsMultTRKXiMinus(0),
577 f3dHistGenPtVsYCMSVsMultTRKXiPlus(0),
578 f3dHistGenPtVsYCMSVsMultTRKOmegaMinus(0),
579 f3dHistGenPtVsYCMSVsMultTRKOmegaPlus(0),
580 f3dHistGenSelectedPtVsYCMSVsMultTRKXiMinus(0),
581 f3dHistGenSelectedPtVsYCMSVsMultTRKXiPlus(0),
582 f3dHistGenSelectedPtVsYCMSVsMultTRKOmegaMinus(0),
583 f3dHistGenSelectedPtVsYCMSVsMultTRKOmegaPlus(0),
584
585 //SPD
586
587 f3dHistGenPtVsYVsMultSPDXiMinus(0),
588 f3dHistGenPtVsYVsMultSPDXiPlus(0),
589 f3dHistGenPtVsYVsMultSPDOmegaMinus(0),
590 f3dHistGenPtVsYVsMultSPDOmegaPlus(0),
591 f3dHistGenSelectedPtVsYVsMultSPDXiMinus(0),
592 f3dHistGenSelectedPtVsYVsMultSPDXiPlus(0),
593 f3dHistGenSelectedPtVsYVsMultSPDOmegaMinus(0),
594 f3dHistGenSelectedPtVsYVsMultSPDOmegaPlus(0),
595 f3dHistGenPtVsYCMSVsMultSPDXiMinus(0),
596 f3dHistGenPtVsYCMSVsMultSPDXiPlus(0),
597 f3dHistGenPtVsYCMSVsMultSPDOmegaMinus(0),
598 f3dHistGenPtVsYCMSVsMultSPDOmegaPlus(0),
599 f3dHistGenSelectedPtVsYCMSVsMultSPDXiMinus(0),
600 f3dHistGenSelectedPtVsYCMSVsMultSPDXiPlus(0),
601 f3dHistGenSelectedPtVsYCMSVsMultSPDOmegaMinus(0),
602 f3dHistGenSelectedPtVsYCMSVsMultSPDOmegaPlus(0),
603
604
605    fHistPVx(0),
606    fHistPVy(0),
607    fHistPVz(0),
608    fHistPVxAnalysis(0),
609    fHistPVyAnalysis(0),
610    fHistPVzAnalysis(0)
611 {
612    // Constructor
613
614    //Set Variables for re-running the cascade vertexers (as done for MS paper)
615         
616         // New Loose : 1st step for the 7 TeV pp analysis
617         
618         fV0VertexerSels[0] =  33.  ;  // max allowed chi2
619         fV0VertexerSels[1] =   0.02;  // min allowed impact parameter for the 1st daughter (LHC09a4 : 0.05)
620         fV0VertexerSels[2] =   0.02;  // min allowed impact parameter for the 2nd daughter (LHC09a4 : 0.05)
621         fV0VertexerSels[3] =   2.0 ;  // max allowed DCA between the daughter tracks       (LHC09a4 : 0.5)
622         fV0VertexerSels[4] =   0.95;  // min allowed cosine of V0's pointing angle         (LHC09a4 : 0.99)
623         fV0VertexerSels[5] =   1.0 ;  // min radius of the fiducial volume                 (LHC09a4 : 0.2)
624         fV0VertexerSels[6] = 200.  ;  // max radius of the fiducial volume                 (LHC09a4 : 100.0)
625         
626         fCascadeVertexerSels[0] =  33.   ;  // max allowed chi2 (same as PDC07)
627         fCascadeVertexerSels[1] =   0.05 ;  // min allowed V0 impact parameter                    (PDC07 : 0.05   / LHC09a4 : 0.025 )
628         fCascadeVertexerSels[2] =   0.010;  // "window" around the Lambda mass                    (PDC07 : 0.008  / LHC09a4 : 0.010 )
629         fCascadeVertexerSels[3] =   0.03 ;  // min allowed bachelor's impact parameter            (PDC07 : 0.035  / LHC09a4 : 0.025 )
630         fCascadeVertexerSels[4] =   2.0  ;  // max allowed DCA between the V0 and the bachelor    (PDC07 : 0.1    / LHC09a4 : 0.2   )
631         fCascadeVertexerSels[5] =   0.95 ;  // min allowed cosine of the cascade pointing angle   (PDC07 : 0.9985 / LHC09a4 : 0.998 )
632         fCascadeVertexerSels[6] =   0.4  ;  // min radius of the fiducial volume                  (PDC07 : 0.9    / LHC09a4 : 0.2   )
633         fCascadeVertexerSels[7] = 100.   ;  // max radius of the fiducial volume                  (PDC07 : 100    / LHC09a4 : 100   )
634         
635    // Output slot #0 writes into a TList container (Cascade)
636    DefineOutput(1, TList::Class());
637    DefineOutput(2, TTree::Class());
638 }
639
640
641 AliAnalysisTaskExtractPerformanceCascade::~AliAnalysisTaskExtractPerformanceCascade()
642 {
643 //------------------------------------------------
644 // DESTRUCTOR
645 //------------------------------------------------
646
647    if (fListHist){
648       delete fListHist;
649       fListHist = 0x0;
650    }
651    if (fTreeCascade){
652       delete fTreeCascade;
653       fTreeCascade = 0x0;
654    }
655     //cleanup esd track cuts object too...
656    if (fESDtrackCuts){
657     delete fESDtrackCuts;
658     fESDtrackCuts = 0x0; 
659   }
660   if (fUtils){
661     delete fUtils;
662     fUtils = 0x0;
663   }
664
665 }
666
667 //________________________________________________________________________
668 void AliAnalysisTaskExtractPerformanceCascade::UserCreateOutputObjects()
669 {
670    OpenFile(2); 
671    // Called once
672
673 //------------------------------------------------
674
675    fTreeCascade = new TTree("fTreeCascade","CascadeCandidates");
676
677 //------------------------------------------------
678 // fTreeCascade Branch definitions - Cascade Tree
679 //------------------------------------------------
680
681 //------------------------------------------------
682 // fTreeCascade Branch definitions
683 //------------------------------------------------
684
685 //-----------BASIC-INFO---------------------------
686 /* 1*/          fTreeCascade->Branch("fTreeCascVarCharge",&fTreeCascVarCharge,"fTreeCascVarCharge/I");  
687 /* 2*/          fTreeCascade->Branch("fTreeCascVarMassAsXi",&fTreeCascVarMassAsXi,"fTreeCascVarMassAsXi/F");
688 /* 3*/          fTreeCascade->Branch("fTreeCascVarMassAsOmega",&fTreeCascVarMassAsOmega,"fTreeCascVarMassAsOmega/F");
689 /* 4*/          fTreeCascade->Branch("fTreeCascVarPt",&fTreeCascVarPt,"fTreeCascVarPt/F");
690 /* 5*/          fTreeCascade->Branch("fTreeCascVarPtMC",&fTreeCascVarPtMC,"fTreeCascVarPtMC/F");
691 /* 6*/          fTreeCascade->Branch("fTreeCascVarRapXi",&fTreeCascVarRapXi,"fTreeCascVarRapXi/F");
692 /* 7*/          fTreeCascade->Branch("fTreeCascVarRapMC",&fTreeCascVarRapMC,"fTreeCascVarRapMC/F");
693 /* 8*/          fTreeCascade->Branch("fTreeCascVarRapOmega",&fTreeCascVarRapOmega,"fTreeCascVarRapOmega/F");
694 /* 9*/          fTreeCascade->Branch("fTreeCascVarNegEta",&fTreeCascVarNegEta,"fTreeCascVarNegEta/F");
695 /*10*/          fTreeCascade->Branch("fTreeCascVarPosEta",&fTreeCascVarPosEta,"fTreeCascVarPosEta/F");
696 /*11*/          fTreeCascade->Branch("fTreeCascVarBachEta",&fTreeCascVarBachEta,"fTreeCascVarBachEta/F");
697 //-----------INFO-FOR-CUTS------------------------
698 /*12*/          fTreeCascade->Branch("fTreeCascVarDCACascDaughters",&fTreeCascVarDCACascDaughters,"fTreeCascVarDCACascDaughters/F");
699 /*13*/          fTreeCascade->Branch("fTreeCascVarDCABachToPrimVtx",&fTreeCascVarDCABachToPrimVtx,"fTreeCascVarDCABachToPrimVtx/F");
700 /*14*/          fTreeCascade->Branch("fTreeCascVarDCAV0Daughters",&fTreeCascVarDCAV0Daughters,"fTreeCascVarDCAV0Daughters/F");
701 /*15*/          fTreeCascade->Branch("fTreeCascVarDCAV0ToPrimVtx",&fTreeCascVarDCAV0ToPrimVtx,"fTreeCascVarDCAV0ToPrimVtx/F");
702 /*16*/          fTreeCascade->Branch("fTreeCascVarDCAPosToPrimVtx",&fTreeCascVarDCAPosToPrimVtx,"fTreeCascVarDCAPosToPrimVtx/F");
703 /*17*/          fTreeCascade->Branch("fTreeCascVarDCANegToPrimVtx",&fTreeCascVarDCANegToPrimVtx,"fTreeCascVarDCANegToPrimVtx/F");
704 /*18*/          fTreeCascade->Branch("fTreeCascVarCascCosPointingAngle",&fTreeCascVarCascCosPointingAngle,"fTreeCascVarCascCosPointingAngle/F");
705 /*19*/          fTreeCascade->Branch("fTreeCascVarCascRadius",&fTreeCascVarCascRadius,"fTreeCascVarCascRadius/F");
706 /*20*/          fTreeCascade->Branch("fTreeCascVarV0Mass",&fTreeCascVarV0Mass,"fTreeCascVarV0Mass/F");
707 /*21*/          fTreeCascade->Branch("fTreeCascVarV0CosPointingAngle",&fTreeCascVarV0CosPointingAngle,"fTreeCascVarV0CosPointingAngle/F");
708 /*21*/          fTreeCascade->Branch("fTreeCascVarV0CosPointingAngleSpecial",&fTreeCascVarV0CosPointingAngleSpecial,"fTreeCascVarV0CosPointingAngleSpecial/F");
709 /*22*/          fTreeCascade->Branch("fTreeCascVarV0Radius",&fTreeCascVarV0Radius,"fTreeCascVarV0Radius/F");
710 /*23*/          fTreeCascade->Branch("fTreeCascVarLeastNbrClusters",&fTreeCascVarLeastNbrClusters,"fTreeCascVarLeastNbrClusters/I");
711 //-----------MULTIPLICITY-INFO--------------------
712 /*24*/          fTreeCascade->Branch("fTreeCascVarMultiplicity",&fTreeCascVarMultiplicity,"fTreeCascVarMultiplicity/I");
713 /*24*/          fTreeCascade->Branch("fTreeCascVarMultiplicityV0A",&fTreeCascVarMultiplicityV0A,"fTreeCascVarMultiplicityV0A/I");
714 /*24*/          fTreeCascade->Branch("fTreeCascVarMultiplicityZNA",&fTreeCascVarMultiplicityZNA,"fTreeCascVarMultiplicityZNA/I");
715 /*24*/          fTreeCascade->Branch("fTreeCascVarMultiplicityTRK",&fTreeCascVarMultiplicityTRK,"fTreeCascVarMultiplicityTRK/I");
716 /*24*/          fTreeCascade->Branch("fTreeCascVarMultiplicitySPD",&fTreeCascVarMultiplicitySPD,"fTreeCascVarMultiplicitySPD/I");
717 /*24*/          fTreeCascade->Branch("fTreeCascVarMultiplicityMC",&fTreeCascVarMultiplicityMC,"fTreeCascVarMultiplicityMC/I");
718 //-----------DECAY-LENGTH-INFO--------------------
719 /*25*/          fTreeCascade->Branch("fTreeCascVarDistOverTotMom",&fTreeCascVarDistOverTotMom,"fTreeCascVarDistOverTotMom/F");
720 //-----------MC-PID-------------------------------
721 /*25bis*/ fTreeCascade->Branch("fTreeCascVarIsPhysicalPrimary",&fTreeCascVarIsPhysicalPrimary,"fTreeCascVarIsPhysicalPrimary/I");
722 /*26*/          fTreeCascade->Branch("fTreeCascVarPID",&fTreeCascVarPID,"fTreeCascVarPID/I");
723 /*26*/          fTreeCascade->Branch("fTreeCascVarPIDSwapped",&fTreeCascVarPIDSwapped,"fTreeCascVarPIDSwapped/I");
724 /*27*/          fTreeCascade->Branch("fTreeCascVarPIDBachelor",&fTreeCascVarPIDBachelor,"fTreeCascVarPIDBachelor/I");
725 /*28*/    fTreeCascade->Branch("fTreeCascVarPIDNegative",&fTreeCascVarPIDNegative,"fTreeCascVarPIDNegative/I");
726 /*29*/    fTreeCascade->Branch("fTreeCascVarPIDPositive",&fTreeCascVarPIDPositive,"fTreeCascVarPIDPositive/I");
727 /*30*/          fTreeCascade->Branch("fTreeCascVarBachTransMom",&fTreeCascVarBachTransMom,"fTreeCascVarBachTransMom/F");
728 /*30*/          fTreeCascade->Branch("fTreeCascVarPosTransMom",&fTreeCascVarPosTransMom,"fTreeCascVarPosTransMom/F");
729 /*31*/          fTreeCascade->Branch("fTreeCascVarNegTransMom",&fTreeCascVarNegTransMom,"fTreeCascVarNegTransMom/F");
730 /*32*/          fTreeCascade->Branch("fTreeCascVarPosTransMomMC",&fTreeCascVarPosTransMomMC,"fTreeCascVarPosTransMomMC/F");
731 /*33*/          fTreeCascade->Branch("fTreeCascVarNegTransMomMC",&fTreeCascVarNegTransMomMC,"fTreeCascVarNegTransMomMC/F");
732 //------------------------------------------------
733 /*34*/          fTreeCascade->Branch("fTreeCascVarNegNSigmaPion",&fTreeCascVarNegNSigmaPion,"fTreeCascVarNegNSigmaPion/F");
734 /*35*/          fTreeCascade->Branch("fTreeCascVarNegNSigmaProton",&fTreeCascVarNegNSigmaProton,"fTreeCascVarNegNSigmaProton/F");
735 /*36*/          fTreeCascade->Branch("fTreeCascVarPosNSigmaPion",&fTreeCascVarPosNSigmaPion,"fTreeCascVarPosNSigmaPion/F");
736 /*37*/          fTreeCascade->Branch("fTreeCascVarPosNSigmaProton",&fTreeCascVarPosNSigmaProton,"fTreeCascVarPosNSigmaProton/F");
737 /*38*/          fTreeCascade->Branch("fTreeCascVarBachNSigmaPion",&fTreeCascVarBachNSigmaPion,"fTreeCascVarBachNSigmaPion/F");
738 /*39*/          fTreeCascade->Branch("fTreeCascVarBachNSigmaKaon",&fTreeCascVarBachNSigmaKaon,"fTreeCascVarBachNSigmaKaon/F");
739
740 /*29*/          fTreeCascade->Branch("fTreeCascVarkITSRefitBachelor",&fTreeCascVarkITSRefitBachelor,"fTreeCascVarkITSRefitBachelor/O");
741 /*29*/          fTreeCascade->Branch("fTreeCascVarkITSRefitNegative",&fTreeCascVarkITSRefitNegative,"fTreeCascVarkITSRefitNegative/O");
742 /*29*/          fTreeCascade->Branch("fTreeCascVarkITSRefitPositive",&fTreeCascVarkITSRefitPositive,"fTreeCascVarkITSRefitPositive/O");
743
744 /*39*/          fTreeCascade->Branch("fTreeCascVarEvHasXiMinus",   &fTreeCascVarEvHasXiMinus,   "fTreeCascVarEvHasXiMinus/O");
745 /*39*/          fTreeCascade->Branch("fTreeCascVarEvHasXiPlus",    &fTreeCascVarEvHasXiPlus,    "fTreeCascVarEvHasXiPlus/O");
746 /*39*/          fTreeCascade->Branch("fTreeCascVarEvHasOmegaMinus",&fTreeCascVarEvHasOmegaMinus,"fTreeCascVarEvHasOmegaMinus/O");
747 /*39*/          fTreeCascade->Branch("fTreeCascVarEvHasOmegaPlus", &fTreeCascVarEvHasOmegaPlus, "fTreeCascVarEvHasOmegaPlus/O");
748 /*39*/          fTreeCascade->Branch("fTreeCascVarEvHasLambda",    &fTreeCascVarEvHasLambda,    "fTreeCascVarEvHasLambda/O");
749 /*39*/          fTreeCascade->Branch("fTreeCascVarEvHasAntiLambda",&fTreeCascVarEvHasAntiLambda,"fTreeCascVarEvHasAntiLambda/O");
750
751 /*39*/          fTreeCascade->Branch("fTreeCascVarEvHasLowPtXiMinus",   &fTreeCascVarEvHasLowPtXiMinus,   "fTreeCascVarEvHasLowPtXiMinus/O");
752 /*39*/          fTreeCascade->Branch("fTreeCascVarEvHasLowPtXiPlus",    &fTreeCascVarEvHasLowPtXiPlus,    "fTreeCascVarEvHasLowPtXiPlus/O");
753 /*39*/          fTreeCascade->Branch("fTreeCascVarEvHasLowPtOmegaMinus",&fTreeCascVarEvHasLowPtOmegaMinus,"fTreeCascVarEvHasLowPtOmegaMinus/O");
754 /*39*/          fTreeCascade->Branch("fTreeCascVarEvHasLowPtOmegaPlus", &fTreeCascVarEvHasLowPtOmegaPlus, "fTreeCascVarEvHasLowPtOmegaPlus/O");
755 /*39*/          fTreeCascade->Branch("fTreeCascVarEvHasLowPtLambda",    &fTreeCascVarEvHasLowPtLambda,    "fTreeCascVarEvHasLowPtLambda/O");
756 /*39*/          fTreeCascade->Branch("fTreeCascVarEvHasLowPtAntiLambda",&fTreeCascVarEvHasLowPtAntiLambda,"fTreeCascVarEvHasLowPtAntiLambda/O");
757
758 /*39*/          fTreeCascade->Branch("fTreeCascVarEvHasVeryLowPtXiMinus",   &fTreeCascVarEvHasVeryLowPtXiMinus,   "fTreeCascVarEvHasVeryLowPtXiMinus/O");
759 /*39*/          fTreeCascade->Branch("fTreeCascVarEvHasVeryLowPtXiPlus",    &fTreeCascVarEvHasVeryLowPtXiPlus,    "fTreeCascVarEvHasVeryLowPtXiPlus/O");
760 /*39*/          fTreeCascade->Branch("fTreeCascVarEvHasVeryLowPtOmegaMinus",&fTreeCascVarEvHasVeryLowPtOmegaMinus,"fTreeCascVarEvHasVeryLowPtOmegaMinus/O");
761 /*39*/          fTreeCascade->Branch("fTreeCascVarEvHasVeryLowPtOmegaPlus", &fTreeCascVarEvHasVeryLowPtOmegaPlus, "fTreeCascVarEvHasVeryLowPtOmegaPlus/O");
762 /*39*/          fTreeCascade->Branch("fTreeCascVarEvHasVeryLowPtLambda",    &fTreeCascVarEvHasVeryLowPtLambda,    "fTreeCascVarEvHasVeryLowPtLambda/O");
763 /*39*/          fTreeCascade->Branch("fTreeCascVarEvHasVeryLowPtAntiLambda",&fTreeCascVarEvHasVeryLowPtAntiLambda,"fTreeCascVarEvHasVeryLowPtAntiLambda/O");
764
765 //------------------------------------------------
766 // Particle Identification Setup
767 //------------------------------------------------
768
769    AliAnalysisManager *man=AliAnalysisManager::GetAnalysisManager();
770    AliInputEventHandler* inputHandler = (AliInputEventHandler*) (man->GetInputEventHandler());
771    fPIDResponse = inputHandler->GetPIDResponse();
772
773 // Multiplicity 
774
775   if(! fESDtrackCuts ){
776     fESDtrackCuts = new AliESDtrackCuts();
777   }
778   if(! fUtils ){
779     fUtils = new AliAnalysisUtils();
780   }
781
782 //------------------------------------------------
783 // V0 Multiplicity Histograms
784 //------------------------------------------------
785
786    // Create histograms
787    OpenFile(1);
788    fListHist = new TList();
789    fListHist->SetOwner();  // See http://root.cern.ch/root/html/TCollection.html#TCollection:SetOwner
790
791
792    if(! fHistV0MultiplicityBeforeTrigSel) {
793       fHistV0MultiplicityBeforeTrigSel = new TH1F("fHistV0MultiplicityBeforeTrigSel", 
794          "V0s per event (before Trig. Sel.);Nbr of V0s/Evt;Events", 
795          25, 0, 25);
796       fListHist->Add(fHistV0MultiplicityBeforeTrigSel);
797    }
798            
799    if(! fHistV0MultiplicityForTrigEvt) {
800       fHistV0MultiplicityForTrigEvt = new TH1F("fHistV0MultiplicityForTrigEvt", 
801          "V0s per event (for triggered evt);Nbr of V0s/Evt;Events", 
802          25, 0, 25);
803       fListHist->Add(fHistV0MultiplicityForTrigEvt);
804    }
805
806    if(! fHistV0MultiplicityForSelEvt) {
807       fHistV0MultiplicityForSelEvt = new TH1F("fHistV0MultiplicityForSelEvt", 
808          "V0s per event;Nbr of V0s/Evt;Events", 
809          25, 0, 25);
810       fListHist->Add(fHistV0MultiplicityForSelEvt);
811    }
812
813    if(! fHistV0MultiplicityForSelEvtNoTPCOnly) {
814       fHistV0MultiplicityForSelEvtNoTPCOnly = new TH1F("fHistV0MultiplicityForSelEvtNoTPCOnly", 
815          "V0s per event;Nbr of V0s/Evt;Events", 
816          25, 0, 25);
817       fListHist->Add(fHistV0MultiplicityForSelEvtNoTPCOnly);
818    }
819    if(! fHistV0MultiplicityForSelEvtNoTPCOnlyNoPileup) {
820       fHistV0MultiplicityForSelEvtNoTPCOnlyNoPileup = new TH1F("fHistV0MultiplicityForSelEvtNoTPCOnlyNoPileup", 
821          "V0s per event;Nbr of V0s/Evt;Events", 
822          25, 0, 25);
823       fListHist->Add(fHistV0MultiplicityForSelEvtNoTPCOnlyNoPileup);
824    }
825
826 //------------------------------------------------
827 // Track Multiplicity Histograms
828 //------------------------------------------------
829
830    if(! fHistMultiplicityBeforeTrigSel) {
831       fHistMultiplicityBeforeTrigSel = new TH1F("fHistMultiplicityBeforeTrigSel", 
832          "Tracks per event;Nbr of Tracks;Events", 
833          200, 0, 200);          
834       fListHist->Add(fHistMultiplicityBeforeTrigSel);
835    }
836    if(! fHistMultiplicityForTrigEvt) {
837       fHistMultiplicityForTrigEvt = new TH1F("fHistMultiplicityForTrigEvt", 
838          "Tracks per event;Nbr of Tracks;Events", 
839          200, 0, 200);          
840       fListHist->Add(fHistMultiplicityForTrigEvt);
841    }
842    if(! fHistMultiplicity) {
843       fHistMultiplicity = new TH1F("fHistMultiplicity", 
844          "Tracks per event;Nbr of Tracks;Events", 
845          200, 0, 200);          
846       fListHist->Add(fHistMultiplicity);
847    }
848    if(! fHistMultiplicityNoTPCOnly) {
849       fHistMultiplicityNoTPCOnly = new TH1F("fHistMultiplicityNoTPCOnly", 
850          "Tracks per event;Nbr of Tracks;Events", 
851          200, 0, 200);          
852       fListHist->Add(fHistMultiplicityNoTPCOnly);
853    }
854    if(! fHistMultiplicityNoTPCOnlyNoPileup) {
855       fHistMultiplicityNoTPCOnlyNoPileup = new TH1F("fHistMultiplicityNoTPCOnlyNoPileup", 
856          "Tracks per event;Nbr of Tracks;Events", 
857          200, 0, 200);          
858       fListHist->Add(fHistMultiplicityNoTPCOnlyNoPileup);
859    }
860   
861   
862   //V0A Centrality (if PbPb / pPb)
863   if(! fHistMultiplicityV0ABeforeTrigSel) {
864     fHistMultiplicityV0ABeforeTrigSel = new TH1F("fHistMultiplicityV0ABeforeTrigSel",
865                                                  "Centrality Distribution: V0A;V0A Centrality;Events",
866                                                  200, 0, 200);
867     fListHist->Add(fHistMultiplicityV0ABeforeTrigSel);
868   }
869   if(! fHistMultiplicityV0AForTrigEvt) {
870     fHistMultiplicityV0AForTrigEvt = new TH1F("fHistMultiplicityV0AForTrigEvt",
871                                               "Centrality Distribution: V0A;V0A Centrality;Events",
872                                               200, 0, 200);
873     fListHist->Add(fHistMultiplicityV0AForTrigEvt);
874   }
875   if(! fHistMultiplicityV0A) {
876     fHistMultiplicityV0A = new TH1F("fHistMultiplicityV0A",
877                                     "Centrality Distribution: V0A;V0A Centrality;Events",
878                                     200, 0, 200);
879     fListHist->Add(fHistMultiplicityV0A);
880   }
881   if(! fHistMultiplicityV0ANoTPCOnly) {
882     fHistMultiplicityV0ANoTPCOnly = new TH1F("fHistMultiplicityV0ANoTPCOnly",
883                                              "Centrality Distribution: V0A;V0A Centrality;Events",
884                                              200, 0, 200);
885     fListHist->Add(fHistMultiplicityV0ANoTPCOnly);
886   }
887   if(! fHistMultiplicityV0ANoTPCOnlyNoPileup) {
888     fHistMultiplicityV0ANoTPCOnlyNoPileup = new TH1F("fHistMultiplicityV0ANoTPCOnlyNoPileup",
889                                                      "Centrality Distribution: V0A;V0A Centrality;Events",
890                                                      200, 0, 200);
891     fListHist->Add(fHistMultiplicityV0ANoTPCOnlyNoPileup);
892   }
893   
894   //ZNA Centrality (if PbPb / pPb)
895   if(! fHistMultiplicityZNABeforeTrigSel) {
896     fHistMultiplicityZNABeforeTrigSel = new TH1F("fHistMultiplicityZNABeforeTrigSel",
897                                                  "Centrality Distribution: ZNA;ZNA Centrality;Events",
898                                                  200, 0, 200);
899     fListHist->Add(fHistMultiplicityZNABeforeTrigSel);
900   }
901   if(! fHistMultiplicityZNAForTrigEvt) {
902     fHistMultiplicityZNAForTrigEvt = new TH1F("fHistMultiplicityZNAForTrigEvt",
903                                               "Centrality Distribution: ZNA;ZNA Centrality;Events",
904                                               200, 0, 200);
905     fListHist->Add(fHistMultiplicityZNAForTrigEvt);
906   }
907   if(! fHistMultiplicityZNA) {
908     fHistMultiplicityZNA = new TH1F("fHistMultiplicityZNA",
909                                     "Centrality Distribution: ZNA;ZNA Centrality;Events",
910                                     200, 0, 200);
911     fListHist->Add(fHistMultiplicityZNA);
912   }
913   if(! fHistMultiplicityZNANoTPCOnly) {
914     fHistMultiplicityZNANoTPCOnly = new TH1F("fHistMultiplicityZNANoTPCOnly",
915                                              "Centrality Distribution: ZNA;ZNA Centrality;Events",
916                                              200, 0, 200);
917     fListHist->Add(fHistMultiplicityZNANoTPCOnly);
918   }
919   if(! fHistMultiplicityZNANoTPCOnlyNoPileup) {
920     fHistMultiplicityZNANoTPCOnlyNoPileup = new TH1F("fHistMultiplicityZNANoTPCOnlyNoPileup",
921                                                      "Centrality Distribution: ZNA;ZNA Centrality;Events",
922                                                      200, 0, 200);
923     fListHist->Add(fHistMultiplicityZNANoTPCOnlyNoPileup);
924   }
925   
926   //TRK Centrality (if PbPb / pPb)
927   if(! fHistMultiplicityTRKBeforeTrigSel) {
928     fHistMultiplicityTRKBeforeTrigSel = new TH1F("fHistMultiplicityTRKBeforeTrigSel",
929                                                  "Centrality Distribution: TRK;TRK Centrality;Events",
930                                                  200, 0, 200);
931     fListHist->Add(fHistMultiplicityTRKBeforeTrigSel);
932   }
933   if(! fHistMultiplicityTRKForTrigEvt) {
934     fHistMultiplicityTRKForTrigEvt = new TH1F("fHistMultiplicityTRKForTrigEvt",
935                                               "Centrality Distribution: TRK;TRK Centrality;Events",
936                                               200, 0, 200);
937     fListHist->Add(fHistMultiplicityTRKForTrigEvt);
938   }
939   if(! fHistMultiplicityTRK) {
940     fHistMultiplicityTRK = new TH1F("fHistMultiplicityTRK",
941                                     "Centrality Distribution: TRK;TRK Centrality;Events",
942                                     200, 0, 200);
943     fListHist->Add(fHistMultiplicityTRK);
944   }
945   if(! fHistMultiplicityTRKNoTPCOnly) {
946     fHistMultiplicityTRKNoTPCOnly = new TH1F("fHistMultiplicityTRKNoTPCOnly",
947                                              "Centrality Distribution: TRK;TRK Centrality;Events",
948                                              200, 0, 200);
949     fListHist->Add(fHistMultiplicityTRKNoTPCOnly);
950   }
951   if(! fHistMultiplicityTRKNoTPCOnlyNoPileup) {
952     fHistMultiplicityTRKNoTPCOnlyNoPileup = new TH1F("fHistMultiplicityTRKNoTPCOnlyNoPileup",
953                                                      "Centrality Distribution: TRK;TRK Centrality;Events",
954                                                      200, 0, 200);
955     fListHist->Add(fHistMultiplicityTRKNoTPCOnlyNoPileup);
956   }
957   
958   //SPD Centrality (if PbPb / pPb)
959   if(! fHistMultiplicitySPDBeforeTrigSel) {
960     fHistMultiplicitySPDBeforeTrigSel = new TH1F("fHistMultiplicitySPDBeforeTrigSel",
961                                                  "Centrality Distribution: SPD;SPD Centrality;Events",
962                                                  200, 0, 200);
963     fListHist->Add(fHistMultiplicitySPDBeforeTrigSel);
964   }
965   if(! fHistMultiplicitySPDForTrigEvt) {
966     fHistMultiplicitySPDForTrigEvt = new TH1F("fHistMultiplicitySPDForTrigEvt",
967                                               "Centrality Distribution: SPD;SPD Centrality;Events",
968                                               200, 0, 200);
969     fListHist->Add(fHistMultiplicitySPDForTrigEvt);
970   }
971   if(! fHistMultiplicitySPD) {
972     fHistMultiplicitySPD = new TH1F("fHistMultiplicitySPD",
973                                     "Centrality Distribution: SPD;SPD Centrality;Events",
974                                     200, 0, 200);
975     fListHist->Add(fHistMultiplicitySPD);
976   }
977   if(! fHistMultiplicitySPDNoTPCOnly) {
978     fHistMultiplicitySPDNoTPCOnly = new TH1F("fHistMultiplicitySPDNoTPCOnly",
979                                              "Centrality Distribution: SPD;SPD Centrality;Events",
980                                              200, 0, 200);
981     fListHist->Add(fHistMultiplicitySPDNoTPCOnly);
982   }
983   if(! fHistMultiplicitySPDNoTPCOnlyNoPileup) {
984     fHistMultiplicitySPDNoTPCOnlyNoPileup = new TH1F("fHistMultiplicitySPDNoTPCOnlyNoPileup",
985                                                      "Centrality Distribution: SPD;SPD Centrality;Events",
986                                                      200, 0, 200);
987     fListHist->Add(fHistMultiplicitySPDNoTPCOnlyNoPileup);
988   }
989   
990
991   
992
993 //------------------------------------------------
994 // Generated Particle Histograms
995 //------------------------------------------------
996
997    Int_t lCustomNBins = 200; 
998    Double_t lCustomPtUpperLimit = 20; 
999    Int_t lCustomNBinsMultiplicity = 100;
1000
1001 //----------------------------------
1002 // Raw Generated (Pre-physics-selection)
1003 //----------------------------------
1004
1005 //--------------------------------------------------------------------------------------
1006 //--- 3D Histo (Pt, Y, Multiplicity) for generated XiMinus/Plus, all generated
1007
1008    if(! f3dHistGenPtVsYVsMultXiMinus) {
1009       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);
1010       fListHist->Add(f3dHistGenPtVsYVsMultXiMinus);
1011    }
1012    if(! f3dHistGenPtVsYVsMultXiPlus) {
1013       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);
1014       fListHist->Add(f3dHistGenPtVsYVsMultXiPlus);
1015    }
1016 //--- 3D Histo (Pt, Y, Multiplicity) for generated OmegaMinus/Plus
1017
1018    if(! f3dHistGenPtVsYVsMultOmegaMinus) {
1019       f3dHistGenPtVsYVsMultOmegaMinus = new TH3F( "f3dHistGenPtVsYVsMultOmegaMinus", "Pt_{#Omega} Vs Y_{#Omega} Vs Multiplicity; Pt_{cascade} (GeV/c); Y_{#Omega} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1020       fListHist->Add(f3dHistGenPtVsYVsMultOmegaMinus);
1021    }
1022    if(! f3dHistGenPtVsYVsMultOmegaPlus) {
1023       f3dHistGenPtVsYVsMultOmegaPlus = new TH3F( "f3dHistGenPtVsYVsMultOmegaPlus", "Pt_{#Omega} Vs Y_{#Omega} Vs Multiplicity; Pt_{cascade} (GeV/c); Y_{#Omega} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1024       fListHist->Add(f3dHistGenPtVsYVsMultOmegaPlus);
1025    }
1026
1027 //All generated cascades, YCMS
1028
1029    if(! f3dHistGenPtVsYCMSVsMultXiMinus) {
1030       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);
1031       fListHist->Add(f3dHistGenPtVsYCMSVsMultXiMinus);
1032    }
1033    if(! f3dHistGenPtVsYCMSVsMultXiPlus) {
1034       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);
1035       fListHist->Add(f3dHistGenPtVsYCMSVsMultXiPlus);
1036    }
1037 //--- 3D Histo (Pt, Y, Multiplicity) for generated OmegaMinus/Plus
1038
1039    if(! f3dHistGenPtVsYCMSVsMultOmegaMinus) {
1040       f3dHistGenPtVsYCMSVsMultOmegaMinus = new TH3F( "f3dHistGenPtVsYCMSVsMultOmegaMinus", "Pt_{#Omega} Vs Y_{#Omega} Vs Multiplicity; Pt_{cascade} (GeV/c); Y_{#Omega} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1041       fListHist->Add(f3dHistGenPtVsYCMSVsMultOmegaMinus);
1042    }
1043    if(! f3dHistGenPtVsYCMSVsMultOmegaPlus) {
1044       f3dHistGenPtVsYCMSVsMultOmegaPlus = new TH3F( "f3dHistGenPtVsYCMSVsMultOmegaPlus", "Pt_{#Omega} Vs Y_{#Omega} Vs Multiplicity; Pt_{cascade} (GeV/c); Y_{#Omega} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1045       fListHist->Add(f3dHistGenPtVsYCMSVsMultOmegaPlus);
1046    }
1047
1048
1049 //--------------------------------------------------------------------------------------
1050 //--- 3D Histo (Pt, Y, Multiplicity) for generated XiMinus/Plus, at selected analysis evts
1051
1052    if(! f3dHistGenSelectedPtVsYVsMultXiMinus) {
1053       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);
1054       fListHist->Add(f3dHistGenSelectedPtVsYVsMultXiMinus);
1055    }
1056    if(! f3dHistGenSelectedPtVsYVsMultXiPlus) {
1057       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);
1058       fListHist->Add(f3dHistGenSelectedPtVsYVsMultXiPlus);
1059    }
1060 //--- 3D Histo (Pt, Y, Multiplicity) for generated OmegaMinus/Plus
1061
1062    if(! f3dHistGenSelectedPtVsYVsMultOmegaMinus) {
1063       f3dHistGenSelectedPtVsYVsMultOmegaMinus = new TH3F( "f3dHistGenSelectedPtVsYVsMultOmegaMinus", "Pt_{#Omega} Vs Y_{#Omega} Vs Multiplicity; Pt_{cascade} (GeV/c); Y_{#Omega} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1064       fListHist->Add(f3dHistGenSelectedPtVsYVsMultOmegaMinus);
1065    }
1066    if(! f3dHistGenSelectedPtVsYVsMultOmegaPlus) {
1067       f3dHistGenSelectedPtVsYVsMultOmegaPlus = new TH3F( "f3dHistGenSelectedPtVsYVsMultOmegaPlus", "Pt_{#Omega} Vs Y_{#Omega} Vs Multiplicity; Pt_{cascade} (GeV/c); Y_{#Omega} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1068       fListHist->Add(f3dHistGenSelectedPtVsYVsMultOmegaPlus);
1069    }
1070
1071 //ANALYSIS level Cascades, YCMS
1072
1073
1074    if(! f3dHistGenSelectedPtVsYCMSVsMultXiMinus) {
1075       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);
1076       fListHist->Add(f3dHistGenSelectedPtVsYCMSVsMultXiMinus);
1077    }
1078    if(! f3dHistGenSelectedPtVsYCMSVsMultXiPlus) {
1079       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);
1080       fListHist->Add(f3dHistGenSelectedPtVsYCMSVsMultXiPlus);
1081    }
1082 //--- 3D Histo (Pt, Y, Multiplicity) for generated OmegaMinus/Plus
1083
1084    if(! f3dHistGenSelectedPtVsYCMSVsMultOmegaMinus) {
1085       f3dHistGenSelectedPtVsYCMSVsMultOmegaMinus = new TH3F( "f3dHistGenSelectedPtVsYCMSVsMultOmegaMinus", "Pt_{#Omega} Vs Y_{#Omega} Vs Multiplicity; Pt_{cascade} (GeV/c); Y_{#Omega} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1086       fListHist->Add(f3dHistGenSelectedPtVsYCMSVsMultOmegaMinus);
1087    }
1088    if(! f3dHistGenSelectedPtVsYCMSVsMultOmegaPlus) {
1089       f3dHistGenSelectedPtVsYCMSVsMultOmegaPlus = new TH3F( "f3dHistGenSelectedPtVsYCMSVsMultOmegaPlus", "Pt_{#Omega} Vs Y_{#Omega} Vs Multiplicity; Pt_{cascade} (GeV/c); Y_{#Omega} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1090       fListHist->Add(f3dHistGenSelectedPtVsYCMSVsMultOmegaPlus);
1091    }
1092   
1093   //======================================================================================
1094   //--------------------------------------------------------------------------------------
1095   // True Generated (For Multiplicity Unfolding)
1096   //--------------------------------------------------------------------------------------
1097   //======================================================================================
1098   
1099   //--- 3D Histo (Pt, Y, Multiplicity) for generated XiMinus/Plus, all generated
1100   
1101   if(! f3dHistGenPtVsYVsMultMCXiMinus) {
1102     f3dHistGenPtVsYVsMultMCXiMinus = new TH3F( "f3dHistGenPtVsYVsMultMCXiMinus", "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);
1103     fListHist->Add(f3dHistGenPtVsYVsMultMCXiMinus);
1104   }
1105   if(! f3dHistGenPtVsYVsMultMCXiPlus) {
1106     f3dHistGenPtVsYVsMultMCXiPlus = new TH3F( "f3dHistGenPtVsYVsMultMCXiPlus", "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);
1107     fListHist->Add(f3dHistGenPtVsYVsMultMCXiPlus);
1108   }
1109   //--- 3D Histo (Pt, Y, Multiplicity) for generated OmegaMinus/Plus
1110   
1111   if(! f3dHistGenPtVsYVsMultMCOmegaMinus) {
1112     f3dHistGenPtVsYVsMultMCOmegaMinus = new TH3F( "f3dHistGenPtVsYVsMultMCOmegaMinus", "Pt_{#Omega} Vs Y_{#Omega} Vs Multiplicity; Pt_{cascade} (GeV/c); Y_{#Omega} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1113     fListHist->Add(f3dHistGenPtVsYVsMultMCOmegaMinus);
1114   }
1115   if(! f3dHistGenPtVsYVsMultMCOmegaPlus) {
1116     f3dHistGenPtVsYVsMultMCOmegaPlus = new TH3F( "f3dHistGenPtVsYVsMultMCOmegaPlus", "Pt_{#Omega} Vs Y_{#Omega} Vs Multiplicity; Pt_{cascade} (GeV/c); Y_{#Omega} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1117     fListHist->Add(f3dHistGenPtVsYVsMultMCOmegaPlus);
1118   }
1119   
1120   //All generated cascades, YCMS
1121   
1122   if(! f3dHistGenPtVsYCMSVsMultMCXiMinus) {
1123     f3dHistGenPtVsYCMSVsMultMCXiMinus = new TH3F( "f3dHistGenPtVsYCMSVsMultMCXiMinus", "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);
1124     fListHist->Add(f3dHistGenPtVsYCMSVsMultMCXiMinus);
1125   }
1126   if(! f3dHistGenPtVsYCMSVsMultMCXiPlus) {
1127     f3dHistGenPtVsYCMSVsMultMCXiPlus = new TH3F( "f3dHistGenPtVsYCMSVsMultMCXiPlus", "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);
1128     fListHist->Add(f3dHistGenPtVsYCMSVsMultMCXiPlus);
1129   }
1130   //--- 3D Histo (Pt, Y, Multiplicity) for generated OmegaMinus/Plus
1131   
1132   if(! f3dHistGenPtVsYCMSVsMultMCOmegaMinus) {
1133     f3dHistGenPtVsYCMSVsMultMCOmegaMinus = new TH3F( "f3dHistGenPtVsYCMSVsMultMCOmegaMinus", "Pt_{#Omega} Vs Y_{#Omega} Vs Multiplicity; Pt_{cascade} (GeV/c); Y_{#Omega} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1134     fListHist->Add(f3dHistGenPtVsYCMSVsMultMCOmegaMinus);
1135   }
1136   if(! f3dHistGenPtVsYCMSVsMultMCOmegaPlus) {
1137     f3dHistGenPtVsYCMSVsMultMCOmegaPlus = new TH3F( "f3dHistGenPtVsYCMSVsMultMCOmegaPlus", "Pt_{#Omega} Vs Y_{#Omega} Vs Multiplicity; Pt_{cascade} (GeV/c); Y_{#Omega} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1138     fListHist->Add(f3dHistGenPtVsYCMSVsMultMCOmegaPlus);
1139   }
1140   
1141
1142   //--------------------------------------------------------------------------------------
1143   //--- 3D Histo (Pt, Y, Multiplicity) for generated XiMinus/Plus, at selected analysis evts
1144   
1145   if(! f3dHistGenSelectedPtVsYVsMultMCXiMinus) {
1146     f3dHistGenSelectedPtVsYVsMultMCXiMinus = new TH3F( "f3dHistGenSelectedPtVsYVsMultMCXiMinus", "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);
1147     fListHist->Add(f3dHistGenSelectedPtVsYVsMultMCXiMinus);
1148   }
1149   if(! f3dHistGenSelectedPtVsYVsMultMCXiPlus) {
1150     f3dHistGenSelectedPtVsYVsMultMCXiPlus = new TH3F( "f3dHistGenSelectedPtVsYVsMultMCXiPlus", "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);
1151     fListHist->Add(f3dHistGenSelectedPtVsYVsMultMCXiPlus);
1152   }
1153   //--- 3D Histo (Pt, Y, Multiplicity) for generated OmegaMinus/Plus
1154   
1155   if(! f3dHistGenSelectedPtVsYVsMultMCOmegaMinus) {
1156     f3dHistGenSelectedPtVsYVsMultMCOmegaMinus = new TH3F( "f3dHistGenSelectedPtVsYVsMultMCOmegaMinus", "Pt_{#Omega} Vs Y_{#Omega} Vs Multiplicity; Pt_{cascade} (GeV/c); Y_{#Omega} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1157     fListHist->Add(f3dHistGenSelectedPtVsYVsMultMCOmegaMinus);
1158   }
1159   if(! f3dHistGenSelectedPtVsYVsMultMCOmegaPlus) {
1160     f3dHistGenSelectedPtVsYVsMultMCOmegaPlus = new TH3F( "f3dHistGenSelectedPtVsYVsMultMCOmegaPlus", "Pt_{#Omega} Vs Y_{#Omega} Vs Multiplicity; Pt_{cascade} (GeV/c); Y_{#Omega} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1161     fListHist->Add(f3dHistGenSelectedPtVsYVsMultMCOmegaPlus);
1162   }
1163   
1164   //ANALYSIS level Cascades, YCMS
1165   
1166   
1167   if(! f3dHistGenSelectedPtVsYCMSVsMultMCXiMinus) {
1168     f3dHistGenSelectedPtVsYCMSVsMultMCXiMinus = new TH3F( "f3dHistGenSelectedPtVsYCMSVsMultMCXiMinus", "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);
1169     fListHist->Add(f3dHistGenSelectedPtVsYCMSVsMultMCXiMinus);
1170   }
1171   if(! f3dHistGenSelectedPtVsYCMSVsMultMCXiPlus) {
1172     f3dHistGenSelectedPtVsYCMSVsMultMCXiPlus = new TH3F( "f3dHistGenSelectedPtVsYCMSVsMultMCXiPlus", "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);
1173     fListHist->Add(f3dHistGenSelectedPtVsYCMSVsMultMCXiPlus);
1174   }
1175   //--- 3D Histo (Pt, Y, Multiplicity) for generated OmegaMinus/Plus
1176   
1177   if(! f3dHistGenSelectedPtVsYCMSVsMultMCOmegaMinus) {
1178     f3dHistGenSelectedPtVsYCMSVsMultMCOmegaMinus = new TH3F( "f3dHistGenSelectedPtVsYCMSVsMultMCOmegaMinus", "Pt_{#Omega} Vs Y_{#Omega} Vs Multiplicity; Pt_{cascade} (GeV/c); Y_{#Omega} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1179     fListHist->Add(f3dHistGenSelectedPtVsYCMSVsMultMCOmegaMinus);
1180   }
1181   if(! f3dHistGenSelectedPtVsYCMSVsMultMCOmegaPlus) {
1182     f3dHistGenSelectedPtVsYCMSVsMultMCOmegaPlus = new TH3F( "f3dHistGenSelectedPtVsYCMSVsMultMCOmegaPlus", "Pt_{#Omega} Vs Y_{#Omega} Vs Multiplicity; Pt_{cascade} (GeV/c); Y_{#Omega} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1183     fListHist->Add(f3dHistGenSelectedPtVsYCMSVsMultMCOmegaPlus);
1184   }
1185
1186   //======================================================================================
1187   //--------------------------------------------------------------------------------------
1188   // V0A
1189   //--------------------------------------------------------------------------------------
1190   //======================================================================================
1191   
1192   //--- 3D Histo (Pt, Y, Multiplicity) for generated XiMinus/Plus, all generated
1193   
1194   if(! f3dHistGenPtVsYVsMultV0AXiMinus) {
1195     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);
1196     if(fkIsNuclear) fListHist->Add(f3dHistGenPtVsYVsMultV0AXiMinus);
1197   }
1198   if(! f3dHistGenPtVsYVsMultV0AXiPlus) {
1199     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);
1200     if(fkIsNuclear) fListHist->Add(f3dHistGenPtVsYVsMultV0AXiPlus);
1201   }
1202   //--- 3D Histo (Pt, Y, Multiplicity) for generated OmegaMinus/Plus
1203   
1204   if(! f3dHistGenPtVsYVsMultV0AOmegaMinus) {
1205     f3dHistGenPtVsYVsMultV0AOmegaMinus = new TH3F( "f3dHistGenPtVsYVsMultV0AOmegaMinus", "Pt_{#Omega} Vs Y_{#Omega} Vs Multiplicity; Pt_{cascade} (GeV/c); Y_{#Omega} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1206     if(fkIsNuclear) fListHist->Add(f3dHistGenPtVsYVsMultV0AOmegaMinus);
1207   }
1208   if(! f3dHistGenPtVsYVsMultV0AOmegaPlus) {
1209     f3dHistGenPtVsYVsMultV0AOmegaPlus = new TH3F( "f3dHistGenPtVsYVsMultV0AOmegaPlus", "Pt_{#Omega} Vs Y_{#Omega} Vs Multiplicity; Pt_{cascade} (GeV/c); Y_{#Omega} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1210     if(fkIsNuclear) fListHist->Add(f3dHistGenPtVsYVsMultV0AOmegaPlus);
1211   }
1212   
1213   //All generated cascades, YCMS
1214   
1215   if(! f3dHistGenPtVsYCMSVsMultV0AXiMinus) {
1216     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);
1217     if(fkIsNuclear) fListHist->Add(f3dHistGenPtVsYCMSVsMultV0AXiMinus);
1218   }
1219   if(! f3dHistGenPtVsYCMSVsMultV0AXiPlus) {
1220     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);
1221     if(fkIsNuclear) fListHist->Add(f3dHistGenPtVsYCMSVsMultV0AXiPlus);
1222   }
1223   //--- 3D Histo (Pt, Y, Multiplicity) for generated OmegaMinus/Plus
1224   
1225   if(! f3dHistGenPtVsYCMSVsMultV0AOmegaMinus) {
1226     f3dHistGenPtVsYCMSVsMultV0AOmegaMinus = new TH3F( "f3dHistGenPtVsYCMSVsMultV0AOmegaMinus", "Pt_{#Omega} Vs Y_{#Omega} Vs Multiplicity; Pt_{cascade} (GeV/c); Y_{#Omega} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1227     if(fkIsNuclear) fListHist->Add(f3dHistGenPtVsYCMSVsMultV0AOmegaMinus);
1228   }
1229   if(! f3dHistGenPtVsYCMSVsMultV0AOmegaPlus) {
1230     f3dHistGenPtVsYCMSVsMultV0AOmegaPlus = new TH3F( "f3dHistGenPtVsYCMSVsMultV0AOmegaPlus", "Pt_{#Omega} Vs Y_{#Omega} Vs Multiplicity; Pt_{cascade} (GeV/c); Y_{#Omega} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1231     if(fkIsNuclear) fListHist->Add(f3dHistGenPtVsYCMSVsMultV0AOmegaPlus);
1232   }
1233   
1234   
1235   //--------------------------------------------------------------------------------------
1236   //--- 3D Histo (Pt, Y, Multiplicity) for generated XiMinus/Plus, at selected analysis evts
1237   
1238   if(! f3dHistGenSelectedPtVsYVsMultV0AXiMinus) {
1239     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);
1240     if(fkIsNuclear) fListHist->Add(f3dHistGenSelectedPtVsYVsMultV0AXiMinus);
1241   }
1242   if(! f3dHistGenSelectedPtVsYVsMultV0AXiPlus) {
1243     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);
1244     if(fkIsNuclear) fListHist->Add(f3dHistGenSelectedPtVsYVsMultV0AXiPlus);
1245   }
1246   //--- 3D Histo (Pt, Y, Multiplicity) for generated OmegaMinus/Plus
1247   
1248   if(! f3dHistGenSelectedPtVsYVsMultV0AOmegaMinus) {
1249     f3dHistGenSelectedPtVsYVsMultV0AOmegaMinus = new TH3F( "f3dHistGenSelectedPtVsYVsMultV0AOmegaMinus", "Pt_{#Omega} Vs Y_{#Omega} Vs Multiplicity; Pt_{cascade} (GeV/c); Y_{#Omega} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1250     if(fkIsNuclear) fListHist->Add(f3dHistGenSelectedPtVsYVsMultV0AOmegaMinus);
1251   }
1252   if(! f3dHistGenSelectedPtVsYVsMultV0AOmegaPlus) {
1253     f3dHistGenSelectedPtVsYVsMultV0AOmegaPlus = new TH3F( "f3dHistGenSelectedPtVsYVsMultV0AOmegaPlus", "Pt_{#Omega} Vs Y_{#Omega} Vs Multiplicity; Pt_{cascade} (GeV/c); Y_{#Omega} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1254     if(fkIsNuclear) fListHist->Add(f3dHistGenSelectedPtVsYVsMultV0AOmegaPlus);
1255   }
1256   
1257   //ANALYSIS level Cascades, YCMS
1258   
1259   
1260   if(! f3dHistGenSelectedPtVsYCMSVsMultV0AXiMinus) {
1261     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);
1262     if(fkIsNuclear) fListHist->Add(f3dHistGenSelectedPtVsYCMSVsMultV0AXiMinus);
1263   }
1264   if(! f3dHistGenSelectedPtVsYCMSVsMultV0AXiPlus) {
1265     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);
1266     if(fkIsNuclear) fListHist->Add(f3dHistGenSelectedPtVsYCMSVsMultV0AXiPlus);
1267   }
1268   //--- 3D Histo (Pt, Y, Multiplicity) for generated OmegaMinus/Plus
1269   
1270   if(! f3dHistGenSelectedPtVsYCMSVsMultV0AOmegaMinus) {
1271     f3dHistGenSelectedPtVsYCMSVsMultV0AOmegaMinus = new TH3F( "f3dHistGenSelectedPtVsYCMSVsMultV0AOmegaMinus", "Pt_{#Omega} Vs Y_{#Omega} Vs Multiplicity; Pt_{cascade} (GeV/c); Y_{#Omega} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1272     if(fkIsNuclear) fListHist->Add(f3dHistGenSelectedPtVsYCMSVsMultV0AOmegaMinus);
1273   }
1274   if(! f3dHistGenSelectedPtVsYCMSVsMultV0AOmegaPlus) {
1275     f3dHistGenSelectedPtVsYCMSVsMultV0AOmegaPlus = new TH3F( "f3dHistGenSelectedPtVsYCMSVsMultV0AOmegaPlus", "Pt_{#Omega} Vs Y_{#Omega} Vs Multiplicity; Pt_{cascade} (GeV/c); Y_{#Omega} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1276     if(fkIsNuclear) fListHist->Add(f3dHistGenSelectedPtVsYCMSVsMultV0AOmegaPlus);
1277   }
1278   
1279   
1280   //======================================================================================
1281   //--------------------------------------------------------------------------------------
1282   // ZNA
1283   //--------------------------------------------------------------------------------------
1284   //======================================================================================
1285   
1286   //--- 3D Histo (Pt, Y, Multiplicity) for generated XiMinus/Plus, all generated
1287   
1288   if(! f3dHistGenPtVsYVsMultZNAXiMinus) {
1289     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);
1290     if(fkIsNuclear) fListHist->Add(f3dHistGenPtVsYVsMultZNAXiMinus);
1291   }
1292   if(! f3dHistGenPtVsYVsMultZNAXiPlus) {
1293     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);
1294     if(fkIsNuclear) fListHist->Add(f3dHistGenPtVsYVsMultZNAXiPlus);
1295   }
1296   //--- 3D Histo (Pt, Y, Multiplicity) for generated OmegaMinus/Plus
1297   
1298   if(! f3dHistGenPtVsYVsMultZNAOmegaMinus) {
1299     f3dHistGenPtVsYVsMultZNAOmegaMinus = new TH3F( "f3dHistGenPtVsYVsMultZNAOmegaMinus", "Pt_{#Omega} Vs Y_{#Omega} Vs Multiplicity; Pt_{cascade} (GeV/c); Y_{#Omega} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1300     if(fkIsNuclear) fListHist->Add(f3dHistGenPtVsYVsMultZNAOmegaMinus);
1301   }
1302   if(! f3dHistGenPtVsYVsMultZNAOmegaPlus) {
1303     f3dHistGenPtVsYVsMultZNAOmegaPlus = new TH3F( "f3dHistGenPtVsYVsMultZNAOmegaPlus", "Pt_{#Omega} Vs Y_{#Omega} Vs Multiplicity; Pt_{cascade} (GeV/c); Y_{#Omega} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1304     if(fkIsNuclear) fListHist->Add(f3dHistGenPtVsYVsMultZNAOmegaPlus);
1305   }
1306   
1307   //All generated cascades, YCMS
1308   
1309   if(! f3dHistGenPtVsYCMSVsMultZNAXiMinus) {
1310     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);
1311     if(fkIsNuclear) fListHist->Add(f3dHistGenPtVsYCMSVsMultZNAXiMinus);
1312   }
1313   if(! f3dHistGenPtVsYCMSVsMultZNAXiPlus) {
1314     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);
1315     if(fkIsNuclear) fListHist->Add(f3dHistGenPtVsYCMSVsMultZNAXiPlus);
1316   }
1317   //--- 3D Histo (Pt, Y, Multiplicity) for generated OmegaMinus/Plus
1318   
1319   if(! f3dHistGenPtVsYCMSVsMultZNAOmegaMinus) {
1320     f3dHistGenPtVsYCMSVsMultZNAOmegaMinus = new TH3F( "f3dHistGenPtVsYCMSVsMultZNAOmegaMinus", "Pt_{#Omega} Vs Y_{#Omega} Vs Multiplicity; Pt_{cascade} (GeV/c); Y_{#Omega} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1321     if(fkIsNuclear) fListHist->Add(f3dHistGenPtVsYCMSVsMultZNAOmegaMinus);
1322   }
1323   if(! f3dHistGenPtVsYCMSVsMultZNAOmegaPlus) {
1324     f3dHistGenPtVsYCMSVsMultZNAOmegaPlus = new TH3F( "f3dHistGenPtVsYCMSVsMultZNAOmegaPlus", "Pt_{#Omega} Vs Y_{#Omega} Vs Multiplicity; Pt_{cascade} (GeV/c); Y_{#Omega} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1325     if(fkIsNuclear) fListHist->Add(f3dHistGenPtVsYCMSVsMultZNAOmegaPlus);
1326   }
1327   
1328   
1329   //--------------------------------------------------------------------------------------
1330   //--- 3D Histo (Pt, Y, Multiplicity) for generated XiMinus/Plus, at selected analysis evts
1331   
1332   if(! f3dHistGenSelectedPtVsYVsMultZNAXiMinus) {
1333     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);
1334     if(fkIsNuclear) fListHist->Add(f3dHistGenSelectedPtVsYVsMultZNAXiMinus);
1335   }
1336   if(! f3dHistGenSelectedPtVsYVsMultZNAXiPlus) {
1337     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);
1338     if(fkIsNuclear) fListHist->Add(f3dHistGenSelectedPtVsYVsMultZNAXiPlus);
1339   }
1340   //--- 3D Histo (Pt, Y, Multiplicity) for generated OmegaMinus/Plus
1341   
1342   if(! f3dHistGenSelectedPtVsYVsMultZNAOmegaMinus) {
1343     f3dHistGenSelectedPtVsYVsMultZNAOmegaMinus = new TH3F( "f3dHistGenSelectedPtVsYVsMultZNAOmegaMinus", "Pt_{#Omega} Vs Y_{#Omega} Vs Multiplicity; Pt_{cascade} (GeV/c); Y_{#Omega} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1344     if(fkIsNuclear) fListHist->Add(f3dHistGenSelectedPtVsYVsMultZNAOmegaMinus);
1345   }
1346   if(! f3dHistGenSelectedPtVsYVsMultZNAOmegaPlus) {
1347     f3dHistGenSelectedPtVsYVsMultZNAOmegaPlus = new TH3F( "f3dHistGenSelectedPtVsYVsMultZNAOmegaPlus", "Pt_{#Omega} Vs Y_{#Omega} Vs Multiplicity; Pt_{cascade} (GeV/c); Y_{#Omega} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1348     if(fkIsNuclear) fListHist->Add(f3dHistGenSelectedPtVsYVsMultZNAOmegaPlus);
1349   }
1350   
1351   //ANALYSIS level Cascades, YCMS
1352   
1353   
1354   if(! f3dHistGenSelectedPtVsYCMSVsMultZNAXiMinus) {
1355     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);
1356     if(fkIsNuclear) fListHist->Add(f3dHistGenSelectedPtVsYCMSVsMultZNAXiMinus);
1357   }
1358   if(! f3dHistGenSelectedPtVsYCMSVsMultZNAXiPlus) {
1359     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);
1360     if(fkIsNuclear) fListHist->Add(f3dHistGenSelectedPtVsYCMSVsMultZNAXiPlus);
1361   }
1362   //--- 3D Histo (Pt, Y, Multiplicity) for generated OmegaMinus/Plus
1363   
1364   if(! f3dHistGenSelectedPtVsYCMSVsMultZNAOmegaMinus) {
1365     f3dHistGenSelectedPtVsYCMSVsMultZNAOmegaMinus = new TH3F( "f3dHistGenSelectedPtVsYCMSVsMultZNAOmegaMinus", "Pt_{#Omega} Vs Y_{#Omega} Vs Multiplicity; Pt_{cascade} (GeV/c); Y_{#Omega} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1366     if(fkIsNuclear) fListHist->Add(f3dHistGenSelectedPtVsYCMSVsMultZNAOmegaMinus);
1367   }
1368   if(! f3dHistGenSelectedPtVsYCMSVsMultZNAOmegaPlus) {
1369     f3dHistGenSelectedPtVsYCMSVsMultZNAOmegaPlus = new TH3F( "f3dHistGenSelectedPtVsYCMSVsMultZNAOmegaPlus", "Pt_{#Omega} Vs Y_{#Omega} Vs Multiplicity; Pt_{cascade} (GeV/c); Y_{#Omega} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1370     if(fkIsNuclear) fListHist->Add(f3dHistGenSelectedPtVsYCMSVsMultZNAOmegaPlus);
1371   }
1372
1373   
1374   //======================================================================================
1375   //--------------------------------------------------------------------------------------
1376   // TRK
1377   //--------------------------------------------------------------------------------------
1378   //======================================================================================
1379   
1380   //--- 3D Histo (Pt, Y, Multiplicity) for generated XiMinus/Plus, all generated
1381   
1382   if(! f3dHistGenPtVsYVsMultTRKXiMinus) {
1383     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);
1384     if(fkIsNuclear) fListHist->Add(f3dHistGenPtVsYVsMultTRKXiMinus);
1385   }
1386   if(! f3dHistGenPtVsYVsMultTRKXiPlus) {
1387     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);
1388     if(fkIsNuclear) fListHist->Add(f3dHistGenPtVsYVsMultTRKXiPlus);
1389   }
1390   //--- 3D Histo (Pt, Y, Multiplicity) for generated OmegaMinus/Plus
1391   
1392   if(! f3dHistGenPtVsYVsMultTRKOmegaMinus) {
1393     f3dHistGenPtVsYVsMultTRKOmegaMinus = new TH3F( "f3dHistGenPtVsYVsMultTRKOmegaMinus", "Pt_{#Omega} Vs Y_{#Omega} Vs Multiplicity; Pt_{cascade} (GeV/c); Y_{#Omega} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1394     if(fkIsNuclear) fListHist->Add(f3dHistGenPtVsYVsMultTRKOmegaMinus);
1395   }
1396   if(! f3dHistGenPtVsYVsMultTRKOmegaPlus) {
1397     f3dHistGenPtVsYVsMultTRKOmegaPlus = new TH3F( "f3dHistGenPtVsYVsMultTRKOmegaPlus", "Pt_{#Omega} Vs Y_{#Omega} Vs Multiplicity; Pt_{cascade} (GeV/c); Y_{#Omega} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1398     if(fkIsNuclear) fListHist->Add(f3dHistGenPtVsYVsMultTRKOmegaPlus);
1399   }
1400   
1401   //All generated cascades, YCMS
1402   
1403   if(! f3dHistGenPtVsYCMSVsMultTRKXiMinus) {
1404     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);
1405     if(fkIsNuclear) fListHist->Add(f3dHistGenPtVsYCMSVsMultTRKXiMinus);
1406   }
1407   if(! f3dHistGenPtVsYCMSVsMultTRKXiPlus) {
1408     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);
1409     if(fkIsNuclear) fListHist->Add(f3dHistGenPtVsYCMSVsMultTRKXiPlus);
1410   }
1411   //--- 3D Histo (Pt, Y, Multiplicity) for generated OmegaMinus/Plus
1412   
1413   if(! f3dHistGenPtVsYCMSVsMultTRKOmegaMinus) {
1414     f3dHistGenPtVsYCMSVsMultTRKOmegaMinus = new TH3F( "f3dHistGenPtVsYCMSVsMultTRKOmegaMinus", "Pt_{#Omega} Vs Y_{#Omega} Vs Multiplicity; Pt_{cascade} (GeV/c); Y_{#Omega} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1415     if(fkIsNuclear) fListHist->Add(f3dHistGenPtVsYCMSVsMultTRKOmegaMinus);
1416   }
1417   if(! f3dHistGenPtVsYCMSVsMultTRKOmegaPlus) {
1418     f3dHistGenPtVsYCMSVsMultTRKOmegaPlus = new TH3F( "f3dHistGenPtVsYCMSVsMultTRKOmegaPlus", "Pt_{#Omega} Vs Y_{#Omega} Vs Multiplicity; Pt_{cascade} (GeV/c); Y_{#Omega} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1419     if(fkIsNuclear) fListHist->Add(f3dHistGenPtVsYCMSVsMultTRKOmegaPlus);
1420   }
1421   
1422   
1423   //--------------------------------------------------------------------------------------
1424   //--- 3D Histo (Pt, Y, Multiplicity) for generated XiMinus/Plus, at selected analysis evts
1425   
1426   if(! f3dHistGenSelectedPtVsYVsMultTRKXiMinus) {
1427     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);
1428     if(fkIsNuclear) fListHist->Add(f3dHistGenSelectedPtVsYVsMultTRKXiMinus);
1429   }
1430   if(! f3dHistGenSelectedPtVsYVsMultTRKXiPlus) {
1431     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);
1432     if(fkIsNuclear) fListHist->Add(f3dHistGenSelectedPtVsYVsMultTRKXiPlus);
1433   }
1434   //--- 3D Histo (Pt, Y, Multiplicity) for generated OmegaMinus/Plus
1435   
1436   if(! f3dHistGenSelectedPtVsYVsMultTRKOmegaMinus) {
1437     f3dHistGenSelectedPtVsYVsMultTRKOmegaMinus = new TH3F( "f3dHistGenSelectedPtVsYVsMultTRKOmegaMinus", "Pt_{#Omega} Vs Y_{#Omega} Vs Multiplicity; Pt_{cascade} (GeV/c); Y_{#Omega} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1438     if(fkIsNuclear) fListHist->Add(f3dHistGenSelectedPtVsYVsMultTRKOmegaMinus);
1439   }
1440   if(! f3dHistGenSelectedPtVsYVsMultTRKOmegaPlus) {
1441     f3dHistGenSelectedPtVsYVsMultTRKOmegaPlus = new TH3F( "f3dHistGenSelectedPtVsYVsMultTRKOmegaPlus", "Pt_{#Omega} Vs Y_{#Omega} Vs Multiplicity; Pt_{cascade} (GeV/c); Y_{#Omega} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1442     if(fkIsNuclear) fListHist->Add(f3dHistGenSelectedPtVsYVsMultTRKOmegaPlus);
1443   }
1444   
1445   //ANALYSIS level Cascades, YCMS
1446   
1447   
1448   if(! f3dHistGenSelectedPtVsYCMSVsMultTRKXiMinus) {
1449     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);
1450     if(fkIsNuclear) fListHist->Add(f3dHistGenSelectedPtVsYCMSVsMultTRKXiMinus);
1451   }
1452   if(! f3dHistGenSelectedPtVsYCMSVsMultTRKXiPlus) {
1453     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);
1454     if(fkIsNuclear) fListHist->Add(f3dHistGenSelectedPtVsYCMSVsMultTRKXiPlus);
1455   }
1456   //--- 3D Histo (Pt, Y, Multiplicity) for generated OmegaMinus/Plus
1457   
1458   if(! f3dHistGenSelectedPtVsYCMSVsMultTRKOmegaMinus) {
1459     f3dHistGenSelectedPtVsYCMSVsMultTRKOmegaMinus = new TH3F( "f3dHistGenSelectedPtVsYCMSVsMultTRKOmegaMinus", "Pt_{#Omega} Vs Y_{#Omega} Vs Multiplicity; Pt_{cascade} (GeV/c); Y_{#Omega} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1460     if(fkIsNuclear) fListHist->Add(f3dHistGenSelectedPtVsYCMSVsMultTRKOmegaMinus);
1461   }
1462   if(! f3dHistGenSelectedPtVsYCMSVsMultTRKOmegaPlus) {
1463     f3dHistGenSelectedPtVsYCMSVsMultTRKOmegaPlus = new TH3F( "f3dHistGenSelectedPtVsYCMSVsMultTRKOmegaPlus", "Pt_{#Omega} Vs Y_{#Omega} Vs Multiplicity; Pt_{cascade} (GeV/c); Y_{#Omega} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1464     if(fkIsNuclear) fListHist->Add(f3dHistGenSelectedPtVsYCMSVsMultTRKOmegaPlus);
1465   }
1466   
1467   //======================================================================================
1468   //--------------------------------------------------------------------------------------
1469   // SPD
1470   //--------------------------------------------------------------------------------------
1471   //======================================================================================
1472   
1473   //--- 3D Histo (Pt, Y, Multiplicity) for generated XiMinus/Plus, all generated
1474   
1475   if(! f3dHistGenPtVsYVsMultSPDXiMinus) {
1476     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);
1477     if(fkIsNuclear) fListHist->Add(f3dHistGenPtVsYVsMultSPDXiMinus);
1478   }
1479   if(! f3dHistGenPtVsYVsMultSPDXiPlus) {
1480     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);
1481     if(fkIsNuclear) fListHist->Add(f3dHistGenPtVsYVsMultSPDXiPlus);
1482   }
1483   //--- 3D Histo (Pt, Y, Multiplicity) for generated OmegaMinus/Plus
1484   
1485   if(! f3dHistGenPtVsYVsMultSPDOmegaMinus) {
1486     f3dHistGenPtVsYVsMultSPDOmegaMinus = new TH3F( "f3dHistGenPtVsYVsMultSPDOmegaMinus", "Pt_{#Omega} Vs Y_{#Omega} Vs Multiplicity; Pt_{cascade} (GeV/c); Y_{#Omega} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1487     if(fkIsNuclear) fListHist->Add(f3dHistGenPtVsYVsMultSPDOmegaMinus);
1488   }
1489   if(! f3dHistGenPtVsYVsMultSPDOmegaPlus) {
1490     f3dHistGenPtVsYVsMultSPDOmegaPlus = new TH3F( "f3dHistGenPtVsYVsMultSPDOmegaPlus", "Pt_{#Omega} Vs Y_{#Omega} Vs Multiplicity; Pt_{cascade} (GeV/c); Y_{#Omega} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1491     if(fkIsNuclear) fListHist->Add(f3dHistGenPtVsYVsMultSPDOmegaPlus);
1492   }
1493   
1494   //All generated cascades, YCMS
1495   
1496   if(! f3dHistGenPtVsYCMSVsMultSPDXiMinus) {
1497     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);
1498     if(fkIsNuclear) fListHist->Add(f3dHistGenPtVsYCMSVsMultSPDXiMinus);
1499   }
1500   if(! f3dHistGenPtVsYCMSVsMultSPDXiPlus) {
1501     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);
1502     if(fkIsNuclear) fListHist->Add(f3dHistGenPtVsYCMSVsMultSPDXiPlus);
1503   }
1504   //--- 3D Histo (Pt, Y, Multiplicity) for generated OmegaMinus/Plus
1505   
1506   if(! f3dHistGenPtVsYCMSVsMultSPDOmegaMinus) {
1507     f3dHistGenPtVsYCMSVsMultSPDOmegaMinus = new TH3F( "f3dHistGenPtVsYCMSVsMultSPDOmegaMinus", "Pt_{#Omega} Vs Y_{#Omega} Vs Multiplicity; Pt_{cascade} (GeV/c); Y_{#Omega} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1508     if(fkIsNuclear) fListHist->Add(f3dHistGenPtVsYCMSVsMultSPDOmegaMinus);
1509   }
1510   if(! f3dHistGenPtVsYCMSVsMultSPDOmegaPlus) {
1511     f3dHistGenPtVsYCMSVsMultSPDOmegaPlus = new TH3F( "f3dHistGenPtVsYCMSVsMultSPDOmegaPlus", "Pt_{#Omega} Vs Y_{#Omega} Vs Multiplicity; Pt_{cascade} (GeV/c); Y_{#Omega} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1512     if(fkIsNuclear) fListHist->Add(f3dHistGenPtVsYCMSVsMultSPDOmegaPlus);
1513   }
1514   
1515   
1516   //--------------------------------------------------------------------------------------
1517   //--- 3D Histo (Pt, Y, Multiplicity) for generated XiMinus/Plus, at selected analysis evts
1518   
1519   if(! f3dHistGenSelectedPtVsYVsMultSPDXiMinus) {
1520     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);
1521     if(fkIsNuclear) fListHist->Add(f3dHistGenSelectedPtVsYVsMultSPDXiMinus);
1522   }
1523   if(! f3dHistGenSelectedPtVsYVsMultSPDXiPlus) {
1524     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);
1525     if(fkIsNuclear) fListHist->Add(f3dHistGenSelectedPtVsYVsMultSPDXiPlus);
1526   }
1527   //--- 3D Histo (Pt, Y, Multiplicity) for generated OmegaMinus/Plus
1528   
1529   if(! f3dHistGenSelectedPtVsYVsMultSPDOmegaMinus) {
1530     f3dHistGenSelectedPtVsYVsMultSPDOmegaMinus = new TH3F( "f3dHistGenSelectedPtVsYVsMultSPDOmegaMinus", "Pt_{#Omega} Vs Y_{#Omega} Vs Multiplicity; Pt_{cascade} (GeV/c); Y_{#Omega} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1531     if(fkIsNuclear) fListHist->Add(f3dHistGenSelectedPtVsYVsMultSPDOmegaMinus);
1532   }
1533   if(! f3dHistGenSelectedPtVsYVsMultSPDOmegaPlus) {
1534     f3dHistGenSelectedPtVsYVsMultSPDOmegaPlus = new TH3F( "f3dHistGenSelectedPtVsYVsMultSPDOmegaPlus", "Pt_{#Omega} Vs Y_{#Omega} Vs Multiplicity; Pt_{cascade} (GeV/c); Y_{#Omega} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1535     if(fkIsNuclear) fListHist->Add(f3dHistGenSelectedPtVsYVsMultSPDOmegaPlus);
1536   }
1537   
1538   //ANALYSIS level Cascades, YCMS
1539   
1540   
1541   if(! f3dHistGenSelectedPtVsYCMSVsMultSPDXiMinus) {
1542     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);
1543     if(fkIsNuclear) fListHist->Add(f3dHistGenSelectedPtVsYCMSVsMultSPDXiMinus);
1544   }
1545   if(! f3dHistGenSelectedPtVsYCMSVsMultSPDXiPlus) {
1546     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);
1547     if(fkIsNuclear) fListHist->Add(f3dHistGenSelectedPtVsYCMSVsMultSPDXiPlus);
1548   }
1549   //--- 3D Histo (Pt, Y, Multiplicity) for generated OmegaMinus/Plus
1550   
1551   if(! f3dHistGenSelectedPtVsYCMSVsMultSPDOmegaMinus) {
1552     f3dHistGenSelectedPtVsYCMSVsMultSPDOmegaMinus = new TH3F( "f3dHistGenSelectedPtVsYCMSVsMultSPDOmegaMinus", "Pt_{#Omega} Vs Y_{#Omega} Vs Multiplicity; Pt_{cascade} (GeV/c); Y_{#Omega} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1553     if(fkIsNuclear) fListHist->Add(f3dHistGenSelectedPtVsYCMSVsMultSPDOmegaMinus);
1554   }
1555   if(! f3dHistGenSelectedPtVsYCMSVsMultSPDOmegaPlus) {
1556     f3dHistGenSelectedPtVsYCMSVsMultSPDOmegaPlus = new TH3F( "f3dHistGenSelectedPtVsYCMSVsMultSPDOmegaPlus", "Pt_{#Omega} Vs Y_{#Omega} Vs Multiplicity; Pt_{cascade} (GeV/c); Y_{#Omega} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1557     if(fkIsNuclear) fListHist->Add(f3dHistGenSelectedPtVsYCMSVsMultSPDOmegaPlus);
1558   }
1559   
1560 //----------------------------------
1561 // Primary Vertex Position Histos
1562 //----------------------------------
1563
1564    if(! fHistPVx) {
1565          fHistPVx = new TH1F("fHistPVx", 
1566             "PV x position;Nbr of Evts;x", 
1567             2000, -0.5, 0.5);       
1568       fListHist->Add(fHistPVx);
1569    }
1570    if(! fHistPVy) {
1571          fHistPVy = new TH1F("fHistPVy", 
1572             "PV y position;Nbr of Evts;y", 
1573             2000, -0.5, 0.5);       
1574       fListHist->Add(fHistPVy);
1575    }
1576    if(! fHistPVz) {
1577          fHistPVz = new TH1F("fHistPVz", 
1578             "PV z position;Nbr of Evts;z", 
1579             400, -20, 20);       
1580       fListHist->Add(fHistPVz);
1581    }
1582
1583    if(! fHistPVxAnalysis) {
1584          fHistPVxAnalysis = new TH1F("fHistPVxAnalysis", 
1585             "PV x position;Nbr of Evts;x", 
1586             2000, -0.5, 0.5);       
1587       fListHist->Add(fHistPVxAnalysis);
1588    }
1589    if(! fHistPVyAnalysis) {
1590          fHistPVyAnalysis = new TH1F("fHistPVyAnalysis", 
1591             "PV y position;Nbr of Evts;y", 
1592             2000, -0.5, 0.5);       
1593       fListHist->Add(fHistPVyAnalysis);
1594    }
1595    if(! fHistPVzAnalysis) {
1596          fHistPVzAnalysis = new TH1F("fHistPVzAnalysis", 
1597             "PV z position;Nbr of Evts;z", 
1598             400, -20, 20);       
1599       fListHist->Add(fHistPVzAnalysis);
1600    }
1601
1602    //List of Histograms: Normal
1603    PostData(1, fListHist);
1604
1605    //TTree Object: Saved to base directory. Should cache to disk while saving. 
1606    //(Important to avoid excessive memory usage, particularly when merging)
1607    PostData(2, fTreeCascade);
1608
1609 }// end UserCreateOutputObjects
1610
1611
1612 //________________________________________________________________________
1613 void AliAnalysisTaskExtractPerformanceCascade::UserExec(Option_t *) 
1614 {
1615   // Main loop
1616   // Called for each event
1617
1618    AliESDEvent *lESDevent = 0x0;
1619    AliMCEvent  *lMCevent  = 0x0; 
1620    AliStack    *lMCstack  = 0x0; 
1621
1622    Int_t    lNumberOfV0s                      = -1;
1623    Double_t lTrkgPrimaryVtxPos[3]          = {-100.0, -100.0, -100.0};
1624    Double_t lBestPrimaryVtxPos[3]          = {-100.0, -100.0, -100.0};
1625    Double_t lMagneticField                 = -10.;
1626    
1627   // Connect to the InputEvent   
1628   // After these lines, we should have an ESD/AOD event + the number of V0s in it.
1629
1630    // Appropriate for ESD analysis! 
1631       
1632    lESDevent = dynamic_cast<AliESDEvent*>( InputEvent() );
1633    if (!lESDevent) {
1634       AliWarning("ERROR: lESDevent not available \n");
1635       return;
1636    }
1637
1638 /* --- Acquisition of exact event ID
1639    fTreeVariableRunNumber = lESDevent->GetRunNumber();
1640    fTreeVariableEventNumber =  
1641     ( ( ((ULong64_t)lESDevent->GetPeriodNumber() ) << 36 ) |
1642       ( ((ULong64_t)lESDevent->GetOrbitNumber () ) << 12 ) |
1643         ((ULong64_t)lESDevent->GetBunchCrossNumber() )  );
1644 */
1645    lMCevent = MCEvent();
1646    if (!lMCevent) {
1647       Printf("ERROR: Could not retrieve MC event \n");
1648       cout << "Name of the file with pb :" <<  fInputHandler->GetTree()->GetCurrentFile()->GetName() << endl;   
1649       return;
1650    }
1651
1652    lMCstack = lMCevent->Stack();
1653    if (!lMCstack) {
1654       Printf("ERROR: Could not retrieve MC stack \n");
1655       cout << "Name of the file with pb :" <<  fInputHandler->GetTree()->GetCurrentFile()->GetName() << endl;
1656       return;
1657    }
1658    TArrayF mcPrimaryVtx;
1659    AliGenEventHeader* mcHeader=lMCevent->GenEventHeader();
1660    if(!mcHeader) return;
1661    mcHeader->PrimaryVertex(mcPrimaryVtx);
1662         
1663 //------------------------------------------------
1664 // Multiplicity Information Acquistion
1665 //------------------------------------------------
1666   
1667    //REVISED multiplicity estimator after 'multiplicity day' (2011)
1668    Int_t lMultiplicity = -100;
1669    Int_t lMultiplicityV0A = -100;
1670    Int_t lMultiplicityZNA = -100;
1671    Int_t lMultiplicityTRK = -100;
1672    Int_t lMultiplicitySPD = -100;
1673
1674    //testing purposes
1675    if(fkIsNuclear == kFALSE) lMultiplicity =  fESDtrackCuts->GetReferenceMultiplicity(lESDevent, AliESDtrackCuts::kTrackletsITSTPC,  fEtaRefMult );
1676
1677   //--------- GENERATED NUMBER OF CHARGED PARTICLES
1678   // ---> Set Variables to Zero again
1679   // ---> Variable Definition
1680   
1681   Long_t lNumberOfCharged = 0;
1682   
1683   //----- Loop on Stack ----------------------------------------------------------------
1684   for (Int_t iCurrentLabelStack = 0;  iCurrentLabelStack < (lMCstack->GetNtrack()); iCurrentLabelStack++)
1685   {// This is the begining of the loop on tracks
1686     TParticle* particleOne = lMCstack->Particle(iCurrentLabelStack);
1687     if(!particleOne) continue;
1688     if(!particleOne->GetPDG()) continue;
1689     Double_t lThisCharge = particleOne->GetPDG()->Charge()/3.;
1690     if(TMath::Abs(lThisCharge)<0.001) continue;
1691     if(! (lMCstack->IsPhysicalPrimary(iCurrentLabelStack)) ) continue;
1692     
1693     //Double_t gpt = particleOne -> Pt();
1694     Double_t geta = particleOne -> Eta();
1695     
1696     if( TMath::Abs(geta) < 0.5) lNumberOfCharged++;
1697   }//End of loop on tracks
1698   //----- End Loop on Stack ------------------------------------------------------------
1699
1700   
1701    //---> If this is a nuclear collision, then go nuclear on "multiplicity" variable...
1702    //---> Warning: Experimental
1703    if(fkIsNuclear == kTRUE){ 
1704       AliCentrality* centrality;
1705       centrality = lESDevent->GetCentrality();
1706       lMultiplicity = ( ( Int_t ) ( centrality->GetCentralityPercentile( fCentralityEstimator.Data() ) ) );
1707       lMultiplicityV0A = ( ( Int_t ) ( centrality->GetCentralityPercentile(   "V0A" ) ) );
1708       lMultiplicityZNA = ( ( Int_t ) ( centrality->GetCentralityPercentile(   "ZNA" ) ) );
1709       lMultiplicityTRK = ( ( Int_t ) ( centrality->GetCentralityPercentile(   "TRK" ) ) );
1710       lMultiplicitySPD = ( ( Int_t ) ( centrality->GetCentralityPercentile(   "CL1" ) ) );
1711       if (centrality->GetQuality()>1) {
1712         PostData(1, fListHist);
1713         PostData(2, fTreeCascade);
1714         return;
1715       }
1716    }
1717   
1718    //Set variable for filling tree afterwards!
1719    //---> pp case......: GetReferenceMultiplicity
1720    //---> Pb-Pb case...: Centrality by V0M
1721
1722    fTreeCascVarMultiplicity = lMultiplicity;
1723    fTreeCascVarMultiplicityMC = lNumberOfCharged;
1724    fTreeCascVarMultiplicityV0A = lMultiplicityV0A;
1725    fTreeCascVarMultiplicityZNA = lMultiplicityZNA;
1726    fTreeCascVarMultiplicityTRK = lMultiplicityTRK;
1727    fTreeCascVarMultiplicitySPD = lMultiplicitySPD;
1728
1729    fHistV0MultiplicityBeforeTrigSel->Fill ( lESDevent->GetNumberOfV0s() );
1730    fHistMultiplicityBeforeTrigSel->Fill ( lMultiplicity );
1731    fHistMultiplicityV0ABeforeTrigSel->Fill ( lMultiplicityV0A );
1732    fHistMultiplicityZNABeforeTrigSel->Fill ( lMultiplicityZNA );
1733    fHistMultiplicityTRKBeforeTrigSel->Fill ( lMultiplicityTRK );
1734    fHistMultiplicitySPDBeforeTrigSel->Fill ( lMultiplicitySPD );
1735   
1736 //------------------------------------------------
1737 // MC Information Acquistion
1738 //------------------------------------------------
1739
1740    Int_t iNumberOfPrimaries = -1;
1741    iNumberOfPrimaries = lMCstack->GetNprimary();
1742    if(iNumberOfPrimaries < 1) return; 
1743
1744 //------------------------------------------------
1745 // Variable Definition
1746 //------------------------------------------------
1747
1748    Int_t lNbMCPrimary        = 0;
1749
1750    Double_t lPtCurrentPart   = 0;
1751   
1752    //Int_t lComeFromSigma      = 0;
1753
1754    // current mc particle 's mother
1755    //Int_t iCurrentMother  = 0;
1756    lNbMCPrimary = lMCstack->GetNprimary();
1757
1758 //------------------------------------------------
1759 // Pre-Physics Selection
1760 //------------------------------------------------
1761
1762
1763   fTreeCascVarEvHasXiMinus    = kFALSE; 
1764   fTreeCascVarEvHasXiPlus     = kFALSE; 
1765   fTreeCascVarEvHasOmegaMinus = kFALSE; 
1766   fTreeCascVarEvHasOmegaPlus  = kFALSE; 
1767   fTreeCascVarEvHasLambda     = kFALSE; 
1768   fTreeCascVarEvHasAntiLambda = kFALSE; 
1769
1770   fTreeCascVarEvHasLowPtXiMinus    = kFALSE; 
1771   fTreeCascVarEvHasLowPtXiPlus     = kFALSE; 
1772   fTreeCascVarEvHasLowPtOmegaMinus = kFALSE; 
1773   fTreeCascVarEvHasLowPtOmegaPlus  = kFALSE; 
1774   fTreeCascVarEvHasLowPtLambda     = kFALSE; 
1775   fTreeCascVarEvHasLowPtAntiLambda = kFALSE; 
1776
1777   fTreeCascVarEvHasVeryLowPtXiMinus    = kFALSE; 
1778   fTreeCascVarEvHasVeryLowPtXiPlus     = kFALSE; 
1779   fTreeCascVarEvHasVeryLowPtOmegaMinus = kFALSE; 
1780   fTreeCascVarEvHasVeryLowPtOmegaPlus  = kFALSE; 
1781   fTreeCascVarEvHasVeryLowPtLambda     = kFALSE; 
1782   fTreeCascVarEvHasVeryLowPtAntiLambda = kFALSE; 
1783
1784
1785 //----- Loop on primary Xi, Omega --------------------------------------------------------------
1786    for (Int_t iCurrentLabelStack = 0; iCurrentLabelStack < lNbMCPrimary; iCurrentLabelStack++) 
1787    {// This is the begining of the loop on primaries
1788       
1789       TParticle* lCurrentParticlePrimary = 0x0; 
1790       lCurrentParticlePrimary = lMCstack->Particle( iCurrentLabelStack );
1791       if(!lCurrentParticlePrimary){
1792          Printf("Cascade loop %d - MC TParticle pointer to current stack particle = 0x0 ! Skip ...\n", iCurrentLabelStack );
1793          continue;
1794       }
1795
1796       //Event Type Acquisition
1797       if(lCurrentParticlePrimary->GetPdgCode() == 3312){ if (TMath::Abs(lCurrentParticlePrimary->Eta())<1.2 && lMCstack->IsPhysicalPrimary(iCurrentLabelStack) ) fTreeCascVarEvHasXiMinus     = kTRUE; }
1798       if(lCurrentParticlePrimary->GetPdgCode() ==-3312){ if (TMath::Abs(lCurrentParticlePrimary->Eta())<1.2 && lMCstack->IsPhysicalPrimary(iCurrentLabelStack) ) fTreeCascVarEvHasXiPlus      = kTRUE; }
1799       if(lCurrentParticlePrimary->GetPdgCode() == 3334){ if (TMath::Abs(lCurrentParticlePrimary->Eta())<1.2 && lMCstack->IsPhysicalPrimary(iCurrentLabelStack) ) fTreeCascVarEvHasOmegaMinus  = kTRUE; }
1800       if(lCurrentParticlePrimary->GetPdgCode() ==-3334){ if (TMath::Abs(lCurrentParticlePrimary->Eta())<1.2 && lMCstack->IsPhysicalPrimary(iCurrentLabelStack) ) fTreeCascVarEvHasOmegaPlus   = kTRUE; }
1801       if(lCurrentParticlePrimary->GetPdgCode() == 3122){ if (TMath::Abs(lCurrentParticlePrimary->Eta())<1.2 && lMCstack->IsPhysicalPrimary(iCurrentLabelStack) ) fTreeCascVarEvHasLambda      = kTRUE; }
1802       if(lCurrentParticlePrimary->GetPdgCode() ==-3122){ if (TMath::Abs(lCurrentParticlePrimary->Eta())<1.2 && lMCstack->IsPhysicalPrimary(iCurrentLabelStack) ) fTreeCascVarEvHasAntiLambda  = kTRUE; }
1803
1804       if(lCurrentParticlePrimary->GetPdgCode() == 3312){ if (TMath::Abs(lCurrentParticlePrimary->Eta())<1.2 && lMCstack->IsPhysicalPrimary(iCurrentLabelStack) && lCurrentParticlePrimary->Pt()<2.0) fTreeCascVarEvHasLowPtXiMinus     = kTRUE; }
1805       if(lCurrentParticlePrimary->GetPdgCode() ==-3312){ if (TMath::Abs(lCurrentParticlePrimary->Eta())<1.2 && lMCstack->IsPhysicalPrimary(iCurrentLabelStack) && lCurrentParticlePrimary->Pt()<2.0) fTreeCascVarEvHasLowPtXiPlus      = kTRUE; }
1806       if(lCurrentParticlePrimary->GetPdgCode() == 3334){ if (TMath::Abs(lCurrentParticlePrimary->Eta())<1.2 && lMCstack->IsPhysicalPrimary(iCurrentLabelStack) && lCurrentParticlePrimary->Pt()<2.0) fTreeCascVarEvHasLowPtOmegaMinus  = kTRUE; }
1807       if(lCurrentParticlePrimary->GetPdgCode() ==-3334){ if (TMath::Abs(lCurrentParticlePrimary->Eta())<1.2 && lMCstack->IsPhysicalPrimary(iCurrentLabelStack) && lCurrentParticlePrimary->Pt()<2.0) fTreeCascVarEvHasLowPtOmegaPlus   = kTRUE; }
1808       if(lCurrentParticlePrimary->GetPdgCode() == 3122){ if (TMath::Abs(lCurrentParticlePrimary->Eta())<1.2 && lMCstack->IsPhysicalPrimary(iCurrentLabelStack) && lCurrentParticlePrimary->Pt()<2.0) fTreeCascVarEvHasLowPtLambda      = kTRUE; }
1809       if(lCurrentParticlePrimary->GetPdgCode() ==-3122){ if (TMath::Abs(lCurrentParticlePrimary->Eta())<1.2 && lMCstack->IsPhysicalPrimary(iCurrentLabelStack) && lCurrentParticlePrimary->Pt()<2.0) fTreeCascVarEvHasLowPtAntiLambda  = kTRUE; }
1810
1811       if(lCurrentParticlePrimary->GetPdgCode() == 3312){ if (TMath::Abs(lCurrentParticlePrimary->Eta())<1.2 && lMCstack->IsPhysicalPrimary(iCurrentLabelStack) && lCurrentParticlePrimary->Pt()<1.2) fTreeCascVarEvHasVeryLowPtXiMinus     = kTRUE; }
1812       if(lCurrentParticlePrimary->GetPdgCode() ==-3312){ if (TMath::Abs(lCurrentParticlePrimary->Eta())<1.2 && lMCstack->IsPhysicalPrimary(iCurrentLabelStack) && lCurrentParticlePrimary->Pt()<1.2) fTreeCascVarEvHasVeryLowPtXiPlus      = kTRUE; }
1813       if(lCurrentParticlePrimary->GetPdgCode() == 3334){ if (TMath::Abs(lCurrentParticlePrimary->Eta())<1.2 && lMCstack->IsPhysicalPrimary(iCurrentLabelStack) && lCurrentParticlePrimary->Pt()<1.2) fTreeCascVarEvHasVeryLowPtOmegaMinus  = kTRUE; }
1814       if(lCurrentParticlePrimary->GetPdgCode() ==-3334){ if (TMath::Abs(lCurrentParticlePrimary->Eta())<1.2 && lMCstack->IsPhysicalPrimary(iCurrentLabelStack) && lCurrentParticlePrimary->Pt()<1.2) fTreeCascVarEvHasVeryLowPtOmegaPlus   = kTRUE; }
1815       if(lCurrentParticlePrimary->GetPdgCode() == 3122){ if (TMath::Abs(lCurrentParticlePrimary->Eta())<1.2 && lMCstack->IsPhysicalPrimary(iCurrentLabelStack) && lCurrentParticlePrimary->Pt()<1.2) fTreeCascVarEvHasVeryLowPtLambda      = kTRUE; }
1816       if(lCurrentParticlePrimary->GetPdgCode() ==-3122){ if (TMath::Abs(lCurrentParticlePrimary->Eta())<1.2 && lMCstack->IsPhysicalPrimary(iCurrentLabelStack) && lCurrentParticlePrimary->Pt()<1.2) fTreeCascVarEvHasVeryLowPtAntiLambda  = kTRUE; }
1817
1818       if ( TMath::Abs(lCurrentParticlePrimary->GetPdgCode()) == 3312 || TMath::Abs(lCurrentParticlePrimary->GetPdgCode()) == 3334 ) { 
1819          Double_t lRapXiMCPrimary = -100;
1820          if( (lCurrentParticlePrimary->Energy() - lCurrentParticlePrimary->Pz() +1.e-13) != 0 ) { 
1821            if ( (lCurrentParticlePrimary->Energy() + lCurrentParticlePrimary->Pz()) / (lCurrentParticlePrimary->Energy() - lCurrentParticlePrimary->Pz() +1.e-13) !=0 ){
1822              lRapXiMCPrimary = 0.5*TMath::Log( (lCurrentParticlePrimary->Energy() + lCurrentParticlePrimary->Pz()) / (lCurrentParticlePrimary->Energy() - lCurrentParticlePrimary->Pz() +1.e-13) );
1823            }
1824          }
1825
1826          //=================================================================================
1827          // Xi Histograms
1828          if( lCurrentParticlePrimary->GetPdgCode() == 3312 ){ 
1829            lPtCurrentPart    = lCurrentParticlePrimary->Pt();
1830            f3dHistGenPtVsYVsMultXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicity);
1831            f3dHistGenPtVsYCMSVsMultXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicity);
1832            //MultMC
1833            f3dHistGenPtVsYVsMultMCXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary, lNumberOfCharged);
1834            f3dHistGenPtVsYCMSVsMultMCXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lNumberOfCharged);
1835            //V0A
1836            f3dHistGenPtVsYVsMultV0AXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicityV0A);
1837            f3dHistGenPtVsYCMSVsMultV0AXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicityV0A);
1838            //ZNA
1839            f3dHistGenPtVsYVsMultZNAXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicityZNA);
1840            f3dHistGenPtVsYCMSVsMultZNAXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicityZNA);
1841            //TRK
1842            f3dHistGenPtVsYVsMultTRKXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicityTRK);
1843            f3dHistGenPtVsYCMSVsMultTRKXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicityTRK);
1844            //SPD
1845            f3dHistGenPtVsYVsMultSPDXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicitySPD);
1846            f3dHistGenPtVsYCMSVsMultSPDXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicitySPD);
1847          }
1848          if( lCurrentParticlePrimary->GetPdgCode() == -3312 ){ 
1849            lPtCurrentPart    = lCurrentParticlePrimary->Pt();
1850            f3dHistGenPtVsYVsMultXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicity);
1851            f3dHistGenPtVsYCMSVsMultXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicity);
1852            //MultMC
1853            f3dHistGenPtVsYVsMultMCXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary, lNumberOfCharged);
1854            f3dHistGenPtVsYCMSVsMultMCXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lNumberOfCharged);
1855            //V0A
1856            f3dHistGenPtVsYVsMultV0AXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicityV0A);
1857            f3dHistGenPtVsYCMSVsMultV0AXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicityV0A);
1858            //ZNA
1859            f3dHistGenPtVsYVsMultZNAXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicityZNA);
1860            f3dHistGenPtVsYCMSVsMultZNAXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicityZNA);
1861            //TRK
1862            f3dHistGenPtVsYVsMultTRKXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicityTRK);
1863            f3dHistGenPtVsYCMSVsMultTRKXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicityTRK);
1864            //SPD
1865            f3dHistGenPtVsYVsMultSPDXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicitySPD);
1866            f3dHistGenPtVsYCMSVsMultSPDXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicitySPD);
1867          }
1868          // Omega Histograms
1869          if( lCurrentParticlePrimary->GetPdgCode() == 3334 ){ 
1870            lPtCurrentPart    = lCurrentParticlePrimary->Pt();
1871            f3dHistGenPtVsYVsMultOmegaMinus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicity);
1872            f3dHistGenPtVsYCMSVsMultOmegaMinus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicity);
1873             //MultMC
1874            f3dHistGenPtVsYVsMultMCOmegaMinus->Fill(lPtCurrentPart, lRapXiMCPrimary, lNumberOfCharged);
1875            f3dHistGenPtVsYCMSVsMultMCOmegaMinus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lNumberOfCharged);
1876            //V0A
1877            f3dHistGenPtVsYVsMultV0AOmegaMinus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicityV0A);
1878            f3dHistGenPtVsYCMSVsMultV0AOmegaMinus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicityV0A);
1879            //ZNA
1880            f3dHistGenPtVsYVsMultZNAOmegaMinus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicityZNA);
1881            f3dHistGenPtVsYCMSVsMultZNAOmegaMinus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicityZNA);
1882            //TRK
1883            f3dHistGenPtVsYVsMultTRKOmegaMinus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicityTRK);
1884            f3dHistGenPtVsYCMSVsMultTRKOmegaMinus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicityTRK);
1885            //SPD
1886            f3dHistGenPtVsYVsMultSPDOmegaMinus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicitySPD);
1887            f3dHistGenPtVsYCMSVsMultSPDOmegaMinus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicitySPD);
1888          }
1889          if( lCurrentParticlePrimary->GetPdgCode() == -3334 ){
1890             lPtCurrentPart    = lCurrentParticlePrimary->Pt();
1891             f3dHistGenPtVsYVsMultOmegaPlus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicity);
1892             f3dHistGenPtVsYCMSVsMultOmegaPlus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicity);
1893             //MultMC
1894             f3dHistGenPtVsYVsMultMCOmegaPlus->Fill(lPtCurrentPart, lRapXiMCPrimary, lNumberOfCharged);
1895             f3dHistGenPtVsYCMSVsMultMCOmegaPlus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lNumberOfCharged);
1896            //V0A
1897            f3dHistGenPtVsYVsMultV0AOmegaPlus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicityV0A);
1898            f3dHistGenPtVsYCMSVsMultV0AOmegaPlus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicityV0A);
1899            //ZNA
1900            f3dHistGenPtVsYVsMultZNAOmegaPlus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicityZNA);
1901            f3dHistGenPtVsYCMSVsMultZNAOmegaPlus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicityZNA);
1902            //TRK
1903            f3dHistGenPtVsYVsMultTRKOmegaPlus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicityTRK);
1904            f3dHistGenPtVsYCMSVsMultTRKOmegaPlus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicityTRK);
1905            //SPD
1906            f3dHistGenPtVsYVsMultSPDOmegaPlus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicitySPD);
1907            f3dHistGenPtVsYCMSVsMultSPDOmegaPlus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicitySPD);
1908          }
1909       }
1910    }
1911 //----- End Loop on primary Xi, Omega ----------------------------------------------------------
1912
1913 // ---> Set Variables to Zero again
1914 // ---> Variable Definition
1915
1916    lPtCurrentPart   = 0;
1917
1918 //------------------------------------------------
1919 // Physics Selection
1920 //------------------------------------------------
1921
1922    UInt_t maskIsSelected = ((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected();
1923    Bool_t isSelected = 0;
1924    isSelected = (maskIsSelected & AliVEvent::kMB) == AliVEvent::kMB;
1925
1926    //pA triggering: CINT7
1927    if( fkSwitchINT7 ) isSelected = (maskIsSelected & AliVEvent::kINT7) == AliVEvent::kINT7;
1928
1929    //Standard Min-Bias Selection
1930    if ( ! isSelected ) { 
1931         PostData(1, fListHist);
1932         PostData(2, fTreeCascade);
1933       return;
1934    }
1935
1936 //------------------------------------------------
1937 // Rerun cascade vertexer! 
1938 //------------------------------------------------
1939
1940   if( fkRunVertexers ){ 
1941     lESDevent->ResetCascades();
1942     lESDevent->ResetV0s();
1943
1944     AliV0vertexer lV0vtxer;
1945     AliCascadeVertexer lCascVtxer;
1946                   
1947     lV0vtxer.SetDefaultCuts(fV0VertexerSels);
1948     lCascVtxer.SetDefaultCuts(fCascadeVertexerSels);
1949
1950     lV0vtxer.Tracks2V0vertices(lESDevent);
1951     lCascVtxer.V0sTracks2CascadeVertices(lESDevent);
1952   }
1953 //------------------------------------------------
1954 // After Trigger Selection
1955 //------------------------------------------------
1956
1957    lNumberOfV0s          = lESDevent->GetNumberOfV0s();
1958   
1959    //Set variable for filling tree afterwards!
1960    fHistV0MultiplicityForTrigEvt->Fill(lNumberOfV0s);
1961    fHistMultiplicityForTrigEvt->Fill ( lMultiplicity );
1962   fHistMultiplicityV0AForTrigEvt       ->Fill( lMultiplicityV0A  );
1963   fHistMultiplicityZNAForTrigEvt       ->Fill( lMultiplicityZNA  );
1964   fHistMultiplicityTRKForTrigEvt       ->Fill( lMultiplicityTRK  );
1965   fHistMultiplicitySPDForTrigEvt       ->Fill( lMultiplicitySPD  );
1966
1967 //------------------------------------------------
1968 // Getting: Primary Vertex + MagField Info
1969 //------------------------------------------------
1970
1971    const AliESDVertex *lPrimaryTrackingESDVtx = lESDevent->GetPrimaryVertexTracks();
1972    // get the vtx stored in ESD found with tracks
1973    lPrimaryTrackingESDVtx->GetXYZ( lTrkgPrimaryVtxPos );
1974         
1975    const AliESDVertex *lPrimaryBestESDVtx = lESDevent->GetPrimaryVertex();      
1976    // get the best primary vertex available for the event
1977    // As done in AliCascadeVertexer, we keep the one which is the best one available.
1978    // between : Tracking vertex > SPD vertex > TPC vertex > default SPD vertex
1979    // This one will be used for next calculations (DCA essentially)
1980    lPrimaryBestESDVtx->GetXYZ( lBestPrimaryVtxPos );
1981
1982    Double_t lPrimaryVtxPosition[3];
1983    const AliVVertex *primaryVtx = lESDevent->GetPrimaryVertex();
1984    lPrimaryVtxPosition[0] = primaryVtx->GetX();
1985    lPrimaryVtxPosition[1] = primaryVtx->GetY();
1986    lPrimaryVtxPosition[2] = primaryVtx->GetZ();
1987    fHistPVx->Fill( lPrimaryVtxPosition[0] );
1988    fHistPVy->Fill( lPrimaryVtxPosition[1] );
1989    fHistPVz->Fill( lPrimaryVtxPosition[2] );
1990
1991   //------------------------------------------------
1992   // Primary Vertex Requirements Section:
1993   //  ---> pp and PbPb: Only requires |z|<10cm
1994   //  ---> pPb: all requirements checked at this stage
1995   //------------------------------------------------
1996   
1997   //Roberto's PV selection criteria, implemented 17th April 2013
1998   
1999   /* vertex selection */
2000   Bool_t fHasVertex = kFALSE;
2001   
2002   const AliESDVertex *vertex = lESDevent->GetPrimaryVertexTracks();
2003   if (vertex->GetNContributors() < 1) {
2004     vertex = lESDevent->GetPrimaryVertexSPD();
2005     if (vertex->GetNContributors() < 1) fHasVertex = kFALSE;
2006     else fHasVertex = kTRUE;
2007     TString vtxTyp = vertex->GetTitle();
2008     Double_t cov[6]={0};
2009     vertex->GetCovarianceMatrix(cov);
2010     Double_t zRes = TMath::Sqrt(cov[5]);
2011     if (vtxTyp.Contains("vertexer:Z") && (zRes>0.25)) fHasVertex = kFALSE;
2012   }
2013   else fHasVertex = kTRUE;
2014   
2015   //Is First event in chunk rejection: Still present!
2016   if(fkpAVertexSelection==kTRUE && fHasVertex == kFALSE) {
2017     AliWarning("Pb / | PV does not satisfy selection criteria!");
2018     PostData(1, fListHist);
2019     PostData(2, fTreeCascade);
2020     return;
2021   }
2022   
2023   //Is First event in chunk rejection: Still present!
2024   if(fkpAVertexSelection==kTRUE && fUtils->IsFirstEventInChunk(lESDevent)) {
2025     AliWarning("Pb / | This is the first event in the chunk!");
2026     PostData(1, fListHist);
2027     PostData(2, fTreeCascade);
2028     return;
2029   }
2030   
2031   //17 April Fix: Always do primary vertex Z selection, after pA vertex selection from Roberto
2032   if(TMath::Abs(lBestPrimaryVtxPos[2]) > 10.0) {
2033     AliWarning("Pb / | Z position of Best Prim Vtx | > 10.0 cm ... return !");
2034     PostData(1, fListHist);
2035     PostData(2, fTreeCascade);
2036     return;
2037   }
2038   
2039   lMagneticField = lESDevent->GetMagneticField( );
2040   fHistV0MultiplicityForSelEvt ->Fill( lNumberOfV0s );
2041   fHistMultiplicity->Fill(lMultiplicity);
2042   fHistMultiplicityV0A->Fill(lMultiplicityV0A);
2043   fHistMultiplicityZNA->Fill(lMultiplicityZNA);
2044   fHistMultiplicityTRK->Fill(lMultiplicityTRK);
2045   fHistMultiplicitySPD->Fill(lMultiplicitySPD);
2046
2047 //------------------------------------------------
2048 // SKIP: Events with well-established PVtx
2049 //------------------------------------------------
2050         
2051    const AliESDVertex *lPrimaryTrackingESDVtxCheck = lESDevent->GetPrimaryVertexTracks();
2052    const AliESDVertex *lPrimarySPDVtx = lESDevent->GetPrimaryVertexSPD();
2053    if (!lPrimarySPDVtx->GetStatus() && !lPrimaryTrackingESDVtxCheck->GetStatus() && fkpAVertexSelection==kFALSE ){
2054       AliWarning("Pb / No SPD prim. vertex nor prim. Tracking vertex ... return !");
2055         PostData(1, fListHist);
2056         PostData(2, fTreeCascade);
2057       return;
2058    }
2059    fHistV0MultiplicityForSelEvtNoTPCOnly ->Fill( lNumberOfV0s );
2060    fHistMultiplicityNoTPCOnly->Fill(lMultiplicity);
2061   fHistMultiplicityV0ANoTPCOnly->Fill(lMultiplicityV0A);
2062   fHistMultiplicityZNANoTPCOnly->Fill(lMultiplicityZNA);
2063   fHistMultiplicityTRKNoTPCOnly->Fill(lMultiplicityTRK);
2064   fHistMultiplicitySPDNoTPCOnly->Fill(lMultiplicitySPD);
2065
2066 //------------------------------------------------
2067 // Pileup Rejection Studies
2068 //------------------------------------------------
2069
2070    // FIXME : quality selection regarding pile-up rejection 
2071    if(lESDevent->IsPileupFromSPD() && !fkIsNuclear ){// 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
2072       AliWarning("Pb / This is tagged as Pileup from SPD... return !");
2073         PostData(1, fListHist);
2074         PostData(2, fTreeCascade);
2075       return;
2076    }
2077    fHistV0MultiplicityForSelEvtNoTPCOnlyNoPileup ->Fill( lNumberOfV0s );
2078    fHistMultiplicityNoTPCOnlyNoPileup->Fill(lMultiplicity);
2079   fHistMultiplicityV0ANoTPCOnlyNoPileup->Fill(lMultiplicityV0A);
2080   fHistMultiplicityZNANoTPCOnlyNoPileup->Fill(lMultiplicityZNA);
2081   fHistMultiplicityTRKNoTPCOnlyNoPileup->Fill(lMultiplicityTRK);
2082   fHistMultiplicitySPDNoTPCOnlyNoPileup->Fill(lMultiplicitySPD);
2083
2084    //Do control histograms without the IsFromVertexerZ events, but consider them in analysis...
2085    if( ! (lESDevent->GetPrimaryVertex()->IsFromVertexerZ() )     ){ 
2086       fHistPVxAnalysis->Fill( lPrimaryVtxPosition[0] );
2087       fHistPVyAnalysis->Fill( lPrimaryVtxPosition[1] );
2088       fHistPVzAnalysis->Fill( lPrimaryVtxPosition[2] );
2089    }
2090
2091 //------------------------------------------------
2092 // stack loop starts here
2093 //------------------------------------------------
2094
2095 //----- Loop on primary Xi, Omega --------------------------------------------------------------
2096    for (Int_t iCurrentLabelStack = 0; iCurrentLabelStack < lNbMCPrimary; iCurrentLabelStack++) 
2097    {// This is the begining of the loop on primaries
2098       
2099       TParticle* lCurrentParticlePrimary = 0x0; 
2100       lCurrentParticlePrimary = lMCstack->Particle( iCurrentLabelStack );
2101       if(!lCurrentParticlePrimary){
2102          Printf("Cascade loop %d - MC TParticle pointer to current stack particle = 0x0 ! Skip ...\n", iCurrentLabelStack );
2103          continue;
2104       }
2105       if ( TMath::Abs(lCurrentParticlePrimary->GetPdgCode()) == 3312 || TMath::Abs(lCurrentParticlePrimary->GetPdgCode()) == 3334 ) { 
2106          Double_t lRapXiMCPrimary = -100;
2107          if( (lCurrentParticlePrimary->Energy() - lCurrentParticlePrimary->Pz() +1.e-13) != 0 ) { 
2108            if ( (lCurrentParticlePrimary->Energy() + lCurrentParticlePrimary->Pz()) / (lCurrentParticlePrimary->Energy() - lCurrentParticlePrimary->Pz() +1.e-13) !=0 ){
2109              lRapXiMCPrimary = 0.5*TMath::Log( (lCurrentParticlePrimary->Energy() + lCurrentParticlePrimary->Pz()) / (lCurrentParticlePrimary->Energy() - lCurrentParticlePrimary->Pz() +1.e-13) );
2110            }
2111          }
2112
2113          //=================================================================================
2114          // Xi Histograms
2115          if( lCurrentParticlePrimary->GetPdgCode() == 3312 ){ 
2116             lPtCurrentPart    = lCurrentParticlePrimary->Pt();
2117             f3dHistGenSelectedPtVsYVsMultXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicity);
2118             f3dHistGenSelectedPtVsYCMSVsMultXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicity);
2119             //MultMC
2120             f3dHistGenSelectedPtVsYVsMultMCXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary, lNumberOfCharged);
2121             f3dHistGenSelectedPtVsYCMSVsMultMCXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lNumberOfCharged);
2122            //V0A
2123            f3dHistGenSelectedPtVsYVsMultV0AXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicityV0A);
2124            f3dHistGenSelectedPtVsYCMSVsMultV0AXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicityV0A);
2125            //ZNA
2126            f3dHistGenSelectedPtVsYVsMultZNAXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicityZNA);
2127            f3dHistGenSelectedPtVsYCMSVsMultZNAXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicityZNA);
2128            //TRK
2129            f3dHistGenSelectedPtVsYVsMultTRKXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicityTRK);
2130            f3dHistGenSelectedPtVsYCMSVsMultTRKXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicityTRK);
2131            //SPD
2132            f3dHistGenSelectedPtVsYVsMultSPDXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicitySPD);
2133            f3dHistGenSelectedPtVsYCMSVsMultSPDXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicitySPD);
2134          }
2135          if( lCurrentParticlePrimary->GetPdgCode() == -3312 ){
2136             lPtCurrentPart    = lCurrentParticlePrimary->Pt();
2137             f3dHistGenSelectedPtVsYVsMultXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicity);
2138             f3dHistGenSelectedPtVsYCMSVsMultXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicity);
2139             //MultMC
2140             f3dHistGenSelectedPtVsYVsMultMCXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary, lNumberOfCharged);
2141             f3dHistGenSelectedPtVsYCMSVsMultMCXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lNumberOfCharged);
2142            //V0A
2143            f3dHistGenSelectedPtVsYVsMultV0AXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicityV0A);
2144            f3dHistGenSelectedPtVsYCMSVsMultV0AXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicityV0A);
2145            //ZNA
2146            f3dHistGenSelectedPtVsYVsMultZNAXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicityZNA);
2147            f3dHistGenSelectedPtVsYCMSVsMultZNAXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicityZNA);
2148            //TRK
2149            f3dHistGenSelectedPtVsYVsMultTRKXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicityTRK);
2150            f3dHistGenSelectedPtVsYCMSVsMultTRKXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicityTRK);
2151            //SPD
2152            f3dHistGenSelectedPtVsYVsMultSPDXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicitySPD);
2153            f3dHistGenSelectedPtVsYCMSVsMultSPDXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicitySPD);
2154          }
2155          // Omega Histograms
2156          if( lCurrentParticlePrimary->GetPdgCode() == 3334 ){ 
2157             lPtCurrentPart    = lCurrentParticlePrimary->Pt();
2158             f3dHistGenSelectedPtVsYVsMultOmegaMinus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicity);
2159             f3dHistGenSelectedPtVsYCMSVsMultOmegaMinus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicity);
2160             //MultMC
2161             f3dHistGenSelectedPtVsYVsMultMCOmegaMinus->Fill(lPtCurrentPart, lRapXiMCPrimary, lNumberOfCharged);
2162             f3dHistGenSelectedPtVsYCMSVsMultMCOmegaMinus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lNumberOfCharged);
2163            //V0A
2164            f3dHistGenSelectedPtVsYVsMultV0AOmegaMinus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicityV0A);
2165            f3dHistGenSelectedPtVsYCMSVsMultV0AOmegaMinus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicityV0A);
2166            //ZNA
2167            f3dHistGenSelectedPtVsYVsMultZNAOmegaMinus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicityZNA);
2168            f3dHistGenSelectedPtVsYCMSVsMultZNAOmegaMinus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicityZNA);
2169            //TRK
2170            f3dHistGenSelectedPtVsYVsMultTRKOmegaMinus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicityTRK);
2171            f3dHistGenSelectedPtVsYCMSVsMultTRKOmegaMinus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicityTRK);
2172            //SPD
2173            f3dHistGenSelectedPtVsYVsMultSPDOmegaMinus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicitySPD);
2174            f3dHistGenSelectedPtVsYCMSVsMultSPDOmegaMinus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicitySPD);
2175          }
2176          if( lCurrentParticlePrimary->GetPdgCode() == -3334 ){
2177             lPtCurrentPart    = lCurrentParticlePrimary->Pt();
2178             f3dHistGenSelectedPtVsYVsMultOmegaPlus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicity);
2179             f3dHistGenSelectedPtVsYCMSVsMultOmegaPlus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicity);
2180             //MultMC
2181             f3dHistGenSelectedPtVsYVsMultMCOmegaPlus->Fill(lPtCurrentPart, lRapXiMCPrimary, lNumberOfCharged);
2182             f3dHistGenSelectedPtVsYCMSVsMultMCOmegaPlus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lNumberOfCharged);
2183            //V0A
2184            f3dHistGenSelectedPtVsYVsMultV0AOmegaPlus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicityV0A);
2185            f3dHistGenSelectedPtVsYCMSVsMultV0AOmegaPlus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicityV0A);
2186            //ZNA
2187            f3dHistGenSelectedPtVsYVsMultZNAOmegaPlus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicityZNA);
2188            f3dHistGenSelectedPtVsYCMSVsMultZNAOmegaPlus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicityZNA);
2189            //TRK
2190            f3dHistGenSelectedPtVsYVsMultTRKOmegaPlus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicityTRK);
2191            f3dHistGenSelectedPtVsYCMSVsMultTRKOmegaPlus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicityTRK);
2192            //SPD
2193            f3dHistGenSelectedPtVsYVsMultSPDOmegaPlus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicitySPD);
2194            f3dHistGenSelectedPtVsYCMSVsMultSPDOmegaPlus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicitySPD);
2195          }
2196       }
2197    }
2198 //----- End Loop on primary Xi, Omega ----------------------------------------------------------
2199
2200 //------------------------------------------------
2201 // MAIN CASCADE LOOP STARTS HERE
2202 //------------------------------------------------
2203 // Code Credit: Antonin Maire (thanks^100)
2204 // ---> This is an adaptation
2205
2206   Long_t ncascades = 0;
2207         ncascades = lESDevent->GetNumberOfCascades();
2208
2209
2210   for (Int_t iXi = 0; iXi < ncascades; iXi++){
2211     //------------------------------------------------
2212     // Initializations
2213     //------------------------------------------------  
2214           //Double_t lTrkgPrimaryVtxRadius3D = -500.0;
2215           //Double_t lBestPrimaryVtxRadius3D = -500.0;
2216
2217           // - 1st part of initialisation : variables needed to store AliESDCascade data members
2218           Double_t lEffMassXi      = 0. ;
2219           //Double_t lChi2Xi         = -1. ;
2220           Double_t lDcaXiDaughters = -1. ;
2221           Double_t lXiCosineOfPointingAngle = -1. ;
2222           Double_t lPosXi[3] = { -1000.0, -1000.0, -1000.0 };
2223           Double_t lXiRadius = -1000. ;
2224           
2225           // - 2nd part of initialisation : Nbr of clusters within TPC for the 3 daughter cascade tracks
2226           Int_t    lPosTPCClusters    = -1; // For ESD only ...//FIXME : wait for availability in AOD
2227           Int_t    lNegTPCClusters    = -1; // For ESD only ...
2228           Int_t    lBachTPCClusters   = -1; // For ESD only ...
2229                         
2230           // - 3rd part of initialisation : about V0 part in cascades
2231           Double_t lInvMassLambdaAsCascDghter = 0.;
2232           //Double_t lV0Chi2Xi         = -1. ;
2233           Double_t lDcaV0DaughtersXi = -1.;
2234                 
2235           Double_t lDcaBachToPrimVertexXi = -1., lDcaV0ToPrimVertexXi = -1.;
2236           Double_t lDcaPosToPrimVertexXi  = -1.;
2237           Double_t lDcaNegToPrimVertexXi  = -1.;
2238           Double_t lV0CosineOfPointingAngleXi = -1. ;
2239           Double_t lV0CosineOfPointingAngleXiSpecial = -1. ;
2240           Double_t lPosV0Xi[3] = { -1000. , -1000., -1000. }; // Position of VO coming from cascade
2241           Double_t lV0RadiusXi = -1000.0;
2242           Double_t lV0quality  = 0.;
2243         
2244           // - 4th part of initialisation : Effective masses
2245           Double_t lInvMassXiMinus    = 0.;
2246           Double_t lInvMassXiPlus     = 0.;
2247           Double_t lInvMassOmegaMinus = 0.;
2248           Double_t lInvMassOmegaPlus  = 0.;
2249     
2250           // - 6th part of initialisation : extra info for QA
2251           Double_t lXiMomX       = 0. , lXiMomY = 0., lXiMomZ = 0.;
2252           Double_t lXiTransvMom  = 0. ;
2253           Double_t lXiTransvMomMC= 0. ;
2254           Double_t lXiTotMom     = 0. ;
2255                 
2256           Double_t lBachMomX       = 0., lBachMomY  = 0., lBachMomZ   = 0.;
2257           //Double_t lBachTransvMom  = 0.;
2258           //Double_t lBachTotMom     = 0.;
2259
2260     fTreeCascVarNegNSigmaPion   = -100;
2261     fTreeCascVarNegNSigmaProton = -100;
2262     fTreeCascVarPosNSigmaPion   = -100;
2263     fTreeCascVarPosNSigmaProton = -100;
2264     fTreeCascVarBachNSigmaPion  = -100;
2265     fTreeCascVarBachNSigmaKaon  = -100;
2266         
2267           Short_t  lChargeXi = -2;
2268           //Double_t lV0toXiCosineOfPointingAngle = 0. ;
2269         
2270           Double_t lRapXi   = -20.0, lRapOmega = -20.0, lRapMC = -20.0; //  lEta = -20.0, lTheta = 360., lPhi = 720. ;
2271           //Double_t lAlphaXi = -200., lPtArmXi  = -200.0;
2272             
2273     // -------------------------------------
2274     // II.ESD - Calculation Part dedicated to Xi vertices (ESD)
2275     
2276           AliESDcascade *xi = lESDevent->GetCascade(iXi);
2277           if (!xi) continue;
2278         
2279           
2280                   // - II.Step 1 : around primary vertex
2281                   //-------------
2282           //lTrkgPrimaryVtxRadius3D = TMath::Sqrt(  lTrkgPrimaryVtxPos[0] * lTrkgPrimaryVtxPos[0] +
2283           //                                        lTrkgPrimaryVtxPos[1] * lTrkgPrimaryVtxPos[1] +
2284           //                                        lTrkgPrimaryVtxPos[2] * lTrkgPrimaryVtxPos[2] );
2285
2286           //lBestPrimaryVtxRadius3D = TMath::Sqrt(  lBestPrimaryVtxPos[0] * lBestPrimaryVtxPos[0] +
2287           //                                        lBestPrimaryVtxPos[1] * lBestPrimaryVtxPos[1] +
2288           //                                        lBestPrimaryVtxPos[2] * lBestPrimaryVtxPos[2] );
2289
2290                 // - II.Step 2 : Assigning the necessary variables for specific AliESDcascade data members (ESD)        
2291                 //-------------
2292           lV0quality = 0.;
2293           xi->ChangeMassHypothesis(lV0quality , 3312); // default working hypothesis : cascade = Xi- decay
2294
2295           lEffMassXi                    = xi->GetEffMassXi();
2296           //lChi2Xi                         = xi->GetChi2Xi();
2297           lDcaXiDaughters       = xi->GetDcaXiDaughters();
2298           lXiCosineOfPointingAngle                  = xi->GetCascadeCosineOfPointingAngle( lBestPrimaryVtxPos[0],
2299                                                                                  lBestPrimaryVtxPos[1],
2300                                                                                  lBestPrimaryVtxPos[2] );
2301                   // Take care : the best available vertex should be used (like in AliCascadeVertexer)
2302         
2303           xi->GetXYZcascade( lPosXi[0],  lPosXi[1], lPosXi[2] ); 
2304           lXiRadius                     = TMath::Sqrt( lPosXi[0]*lPosXi[0]  +  lPosXi[1]*lPosXi[1] );           
2305
2306                 // - II.Step 3 : around the tracks : Bach + V0 (ESD)
2307                 // ~ Necessary variables for ESDcascade data members coming from the ESDv0 part (inheritance)
2308                 //-------------
2309                 
2310         UInt_t lIdxPosXi        = (UInt_t) TMath::Abs( xi->GetPindex() );
2311         UInt_t lIdxNegXi        = (UInt_t) TMath::Abs( xi->GetNindex() );
2312         UInt_t lBachIdx         = (UInt_t) TMath::Abs( xi->GetBindex() );
2313                 // Care track label can be negative in MC production (linked with the track quality)
2314                 // However = normally, not the case for track index ...
2315           
2316           // FIXME : rejection of a double use of a daughter track (nothing but just a crosscheck of what is done in the cascade vertexer)
2317           if(lBachIdx == lIdxNegXi) {
2318                   AliWarning("Pb / Idx(Bach. track) = Idx(Neg. track) ... continue!"); continue;
2319           }
2320     if(lBachIdx == lIdxPosXi) {
2321         AliWarning("Pb / Idx(Bach. track) = Idx(Pos. track) ... continue!"); continue;
2322           }
2323           
2324           AliESDtrack *pTrackXi         = lESDevent->GetTrack( lIdxPosXi );
2325           AliESDtrack *nTrackXi         = lESDevent->GetTrack( lIdxNegXi );
2326           AliESDtrack *bachTrackXi      = lESDevent->GetTrack( lBachIdx );
2327
2328           if (!pTrackXi || !nTrackXi || !bachTrackXi ) {
2329                   AliWarning("ERROR: Could not retrieve one of the 3 ESD daughter tracks of the cascade ...");
2330                   continue;
2331           }
2332
2333       fTreeCascVarPosEta = pTrackXi->Eta();
2334       fTreeCascVarNegEta = nTrackXi->Eta();
2335       fTreeCascVarBachEta = bachTrackXi->Eta();
2336       
2337       Double_t lBMom[3], lNMom[3], lPMom[3];
2338       xi->GetBPxPyPz( lBMom[0], lBMom[1], lBMom[2] );
2339       xi->GetPPxPyPz( lPMom[0], lPMom[1], lPMom[2] );
2340       xi->GetNPxPyPz( lNMom[0], lNMom[1], lNMom[2] );
2341       
2342       fTreeCascVarBachTransMom = TMath::Sqrt( lBMom[0]*lBMom[0] + lBMom[1]*lBMom[1] );
2343       fTreeCascVarPosTransMom  = TMath::Sqrt( lPMom[0]*lPMom[0] + lPMom[1]*lPMom[1] );
2344       fTreeCascVarNegTransMom  = TMath::Sqrt( lNMom[0]*lNMom[0] + lNMom[1]*lNMom[1] );
2345       
2346     //------------------------------------------------
2347     // TPC dEdx information 
2348     //------------------------------------------------
2349     fTreeCascVarNegNSigmaPion   = fPIDResponse->NumberOfSigmasTPC( nTrackXi, AliPID::kPion   );
2350     fTreeCascVarNegNSigmaProton = fPIDResponse->NumberOfSigmasTPC( nTrackXi, AliPID::kProton );
2351     fTreeCascVarPosNSigmaPion   = fPIDResponse->NumberOfSigmasTPC( pTrackXi, AliPID::kPion );
2352     fTreeCascVarPosNSigmaProton = fPIDResponse->NumberOfSigmasTPC( pTrackXi, AliPID::kProton );
2353     fTreeCascVarBachNSigmaPion  = fPIDResponse->NumberOfSigmasTPC( bachTrackXi, AliPID::kPion );
2354     fTreeCascVarBachNSigmaKaon  = fPIDResponse->NumberOfSigmasTPC( bachTrackXi, AliPID::kKaon );
2355
2356     //------------------------------------------------
2357     // TPC Number of clusters info
2358     // --- modified to save the smallest number 
2359     // --- of TPC clusters for the 3 tracks
2360     //------------------------------------------------
2361               
2362           lPosTPCClusters   = pTrackXi->GetTPCNcls();
2363           lNegTPCClusters   = nTrackXi->GetTPCNcls();
2364           lBachTPCClusters  = bachTrackXi->GetTPCNcls(); 
2365
2366     fTreeCascVarkITSRefitBachelor = kTRUE; 
2367     fTreeCascVarkITSRefitNegative = kTRUE; 
2368     fTreeCascVarkITSRefitPositive = kTRUE; 
2369
2370     // 1 - Poor quality related to TPCrefit
2371           ULong_t pStatus    = pTrackXi->GetStatus();
2372           ULong_t nStatus    = nTrackXi->GetStatus();
2373           ULong_t bachStatus = bachTrackXi->GetStatus();
2374     if ((pStatus&AliESDtrack::kTPCrefit)    == 0) { AliWarning("Pb / V0 Pos. track has no TPCrefit ... continue!"); continue; }
2375     if ((nStatus&AliESDtrack::kTPCrefit)    == 0) { AliWarning("Pb / V0 Neg. track has no TPCrefit ... continue!"); continue; }
2376     if ((bachStatus&AliESDtrack::kTPCrefit) == 0) { AliWarning("Pb / Bach.   track has no TPCrefit ... continue!"); continue; }
2377
2378     //Extra Debug Information: booleans for ITS refit
2379     if ((pStatus&AliESDtrack::kITSrefit)    == 0) { fTreeCascVarkITSRefitPositive = kFALSE; }
2380     if ((nStatus&AliESDtrack::kITSrefit)    == 0) { fTreeCascVarkITSRefitNegative = kFALSE; }
2381     if ((bachStatus&AliESDtrack::kITSrefit) == 0) { fTreeCascVarkITSRefitBachelor = kFALSE; }
2382
2383           // 2 - Poor quality related to TPC clusters: lowest cut of 70 clusters
2384     if(lPosTPCClusters  < 70) { AliWarning("Pb / V0 Pos. track has less than 70 TPC clusters ... continue!"); continue; }
2385           if(lNegTPCClusters  < 70) { AliWarning("Pb / V0 Neg. track has less than 70 TPC clusters ... continue!"); continue; }
2386           if(lBachTPCClusters < 70) { AliWarning("Pb / Bach.   track has less than 70 TPC clusters ... continue!"); continue; }
2387           Int_t leastnumberofclusters = 1000; 
2388           if( lPosTPCClusters < leastnumberofclusters ) leastnumberofclusters = lPosTPCClusters;
2389           if( lNegTPCClusters < leastnumberofclusters ) leastnumberofclusters = lNegTPCClusters;
2390           if( lBachTPCClusters < leastnumberofclusters ) leastnumberofclusters = lBachTPCClusters;
2391
2392           lInvMassLambdaAsCascDghter    = xi->GetEffMass();
2393           // This value shouldn't change, whatever the working hyp. is : Xi-, Xi+, Omega-, Omega+
2394           lDcaV0DaughtersXi             = xi->GetDcaV0Daughters(); 
2395           //lV0Chi2Xi                   = xi->GetChi2V0();
2396         
2397           lV0CosineOfPointingAngleXi    = xi->GetV0CosineOfPointingAngle( lBestPrimaryVtxPos[0],
2398                                                                             lBestPrimaryVtxPos[1],
2399                                                                             lBestPrimaryVtxPos[2] );
2400     //Modification to check cosPA of v0 wrt to cascade vertex
2401           lV0CosineOfPointingAngleXiSpecial     = xi->GetV0CosineOfPointingAngle( lPosXi[0],
2402                                                                             lPosXi[1],
2403                                                                             lPosXi[2] );
2404
2405           lDcaV0ToPrimVertexXi          = xi->GetD( lBestPrimaryVtxPos[0], 
2406                                                       lBestPrimaryVtxPos[1], 
2407                                                       lBestPrimaryVtxPos[2] );
2408                 
2409           lDcaBachToPrimVertexXi = TMath::Abs( bachTrackXi->GetD(       lBestPrimaryVtxPos[0], 
2410                                                                 lBestPrimaryVtxPos[1], 
2411                                                                 lMagneticField  ) ); 
2412                                           // Note : AliExternalTrackParam::GetD returns an algebraic value ...
2413                 
2414           xi->GetXYZ( lPosV0Xi[0],  lPosV0Xi[1], lPosV0Xi[2] ); 
2415           lV0RadiusXi           = TMath::Sqrt( lPosV0Xi[0]*lPosV0Xi[0]  +  lPosV0Xi[1]*lPosV0Xi[1] );
2416         
2417           lDcaPosToPrimVertexXi         = TMath::Abs( pTrackXi  ->GetD( lBestPrimaryVtxPos[0], 
2418                                                                 lBestPrimaryVtxPos[1], 
2419                                                                 lMagneticField  )     ); 
2420         
2421           lDcaNegToPrimVertexXi         = TMath::Abs( nTrackXi  ->GetD( lBestPrimaryVtxPos[0], 
2422                                                                 lBestPrimaryVtxPos[1], 
2423                                                                 lMagneticField  )     ); 
2424                 
2425           // - II.Step 4 : around effective masses (ESD)
2426           // ~ change mass hypotheses to cover all the possibilities :  Xi-/+, Omega -/+
2427                 
2428           if( bachTrackXi->Charge() < 0 )       {
2429                   lV0quality = 0.;
2430                   xi->ChangeMassHypothesis(lV0quality , 3312);  
2431                           // Calculate the effective mass of the Xi- candidate. 
2432                           // pdg code 3312 = Xi-
2433                   lInvMassXiMinus = xi->GetEffMassXi();
2434                 
2435                   lV0quality = 0.;
2436                   xi->ChangeMassHypothesis(lV0quality , 3334);  
2437                           // Calculate the effective mass of the Xi- candidate. 
2438                           // pdg code 3334 = Omega-
2439                   lInvMassOmegaMinus = xi->GetEffMassXi();
2440                                         
2441                   lV0quality = 0.;
2442                   xi->ChangeMassHypothesis(lV0quality , 3312);  // Back to default hyp.
2443           }// end if negative bachelor
2444         
2445         
2446           if( bachTrackXi->Charge() >  0 ){
2447                   lV0quality = 0.;
2448                   xi->ChangeMassHypothesis(lV0quality , -3312);         
2449                           // Calculate the effective mass of the Xi+ candidate. 
2450                           // pdg code -3312 = Xi+
2451                   lInvMassXiPlus = xi->GetEffMassXi();
2452                 
2453                   lV0quality = 0.;
2454                   xi->ChangeMassHypothesis(lV0quality , -3334);         
2455                           // Calculate the effective mass of the Xi+ candidate. 
2456                           // pdg code -3334  = Omega+
2457                   lInvMassOmegaPlus = xi->GetEffMassXi();
2458                 
2459                   lV0quality = 0.;
2460                   xi->ChangeMassHypothesis(lV0quality , -3312);         // Back to "default" hyp.
2461           }// end if positive bachelor
2462                   // - II.Step 6 : extra info for QA (ESD)
2463                   // miscellaneous pieces of info that may help regarding data quality assessment.
2464                   //-------------
2465
2466           xi->GetPxPyPz( lXiMomX, lXiMomY, lXiMomZ );
2467                   lXiTransvMom          = TMath::Sqrt( lXiMomX*lXiMomX   + lXiMomY*lXiMomY );
2468                   lXiTotMom     = TMath::Sqrt( lXiMomX*lXiMomX   + lXiMomY*lXiMomY   + lXiMomZ*lXiMomZ );
2469                 
2470           xi->GetBPxPyPz(  lBachMomX,  lBachMomY,  lBachMomZ );
2471                   //lBachTransvMom  = TMath::Sqrt( lBachMomX*lBachMomX   + lBachMomY*lBachMomY );
2472                   //lBachTotMom         = TMath::Sqrt( lBachMomX*lBachMomX   + lBachMomY*lBachMomY  +  lBachMomZ*lBachMomZ  );
2473
2474           lChargeXi = xi->Charge();
2475
2476           //lV0toXiCosineOfPointingAngle = xi->GetV0CosineOfPointingAngle( lPosXi[0], lPosXi[1], lPosXi[2] );
2477         
2478           lRapXi    = xi->RapXi();
2479           lRapOmega = xi->RapOmega();
2480           //lEta      = xi->Eta();
2481           //lTheta    = xi->Theta() *180.0/TMath::Pi();
2482           //lPhi      = xi->Phi()   *180.0/TMath::Pi();
2483           //lAlphaXi  = xi->AlphaXi();
2484           //lPtArmXi  = xi->PtArmXi();
2485         
2486 //------------------------------------------------
2487 // Associate Cascade Candidates to Monte Carlo!
2488 //------------------------------------------------      
2489
2490 //Warning: Not using Continues... Need to fill tree later!
2491         
2492         Int_t lPDGCodeCascade = 0;      
2493
2494         Int_t lPID_BachMother = 0;
2495         Int_t lPID_NegMother = 0;
2496         Int_t lPID_PosMother = 0;
2497   fTreeCascVarIsPhysicalPrimary = 0; // 0: not defined, any candidate may have this
2498
2499           fTreeCascVarPIDPositive = 0;
2500           fTreeCascVarPIDNegative = 0;
2501           fTreeCascVarPIDBachelor = 0;
2502
2503
2504         if(fDebug > 5)
2505                 cout    << "MC EventNumber : " << lMCevent->Header()->GetEvent() 
2506                         << " / MC event Number in Run : " << lMCevent->Header()->GetEventNrInRun() << endl;
2507         
2508         // - Step 4.1 : level of the V0 daughters
2509                 
2510 //----------------------------------------
2511 // Regular MC ASSOCIATION STARTS HERE
2512 //----------------------------------------
2513
2514           Int_t lblPosV0Dghter = (Int_t) TMath::Abs( pTrackXi->GetLabel() );  
2515                   // Abs value = needed ! question of quality track association ...
2516           Int_t lblNegV0Dghter = (Int_t) TMath::Abs( nTrackXi->GetLabel() );
2517           Int_t lblBach        = (Int_t) TMath::Abs( bachTrackXi->GetLabel() );
2518
2519           TParticle* mcPosV0Dghter = lMCstack->Particle( lblPosV0Dghter );
2520           TParticle* mcNegV0Dghter = lMCstack->Particle( lblNegV0Dghter );
2521           TParticle* mcBach        = lMCstack->Particle( lblBach );
2522       
2523     fTreeCascVarPosTransMomMC = mcPosV0Dghter->Pt();
2524     fTreeCascVarNegTransMomMC = mcNegV0Dghter->Pt();
2525
2526           fTreeCascVarPIDPositive = mcPosV0Dghter -> GetPdgCode();
2527           fTreeCascVarPIDNegative = mcNegV0Dghter -> GetPdgCode();
2528           fTreeCascVarPIDBachelor = mcBach->GetPdgCode();
2529
2530           // - Step 4.2 : level of the Xi daughters
2531                 
2532           Int_t lblMotherPosV0Dghter = mcPosV0Dghter->GetFirstMother() ; 
2533           Int_t lblMotherNegV0Dghter = mcNegV0Dghter->GetFirstMother();
2534         
2535           //Rather uncivilized: Open brackets for each 'continue'
2536           if(! (lblMotherPosV0Dghter != lblMotherNegV0Dghter) ) { // same mother
2537           if(! (lblMotherPosV0Dghter < 0) ) { // mother != primary (!= -1)
2538           if(! (lblMotherNegV0Dghter < 0) ) {
2539                                         
2540                 // mothers = Lambda candidate ... a priori
2541         
2542           TParticle* mcMotherPosV0Dghter = lMCstack->Particle( lblMotherPosV0Dghter );
2543           TParticle* mcMotherNegV0Dghter = lMCstack->Particle( lblMotherNegV0Dghter );
2544                         
2545           // - Step 4.3 : level of Xi candidate
2546         
2547           Int_t lblGdMotherPosV0Dghter =   mcMotherPosV0Dghter->GetFirstMother() ;
2548           Int_t lblGdMotherNegV0Dghter =   mcMotherNegV0Dghter->GetFirstMother() ;
2549                                 
2550                 if(! (lblGdMotherPosV0Dghter != lblGdMotherNegV0Dghter) ) {
2551                 if(! (lblGdMotherPosV0Dghter < 0) ) { // primary lambda ...
2552                 if(! (lblGdMotherNegV0Dghter < 0) ) { // primary lambda ...
2553
2554                   // Gd mothers = Xi candidate ... a priori
2555         
2556           TParticle* mcGdMotherPosV0Dghter = lMCstack->Particle( lblGdMotherPosV0Dghter );
2557           TParticle* mcGdMotherNegV0Dghter = lMCstack->Particle( lblGdMotherNegV0Dghter );
2558                                         
2559           Int_t lblMotherBach = (Int_t) TMath::Abs( mcBach->GetFirstMother()  );
2560         
2561   //            if( lblMotherBach != lblGdMotherPosV0Dghter ) continue; //same mother for bach and V0 daughters
2562                   if(!(lblMotherBach != lblGdMotherPosV0Dghter)) { //same mother for bach and V0 daughters
2563         
2564           TParticle* mcMotherBach = lMCstack->Particle( lblMotherBach );
2565         
2566     lPID_BachMother = mcMotherBach->GetPdgCode();
2567           lPID_NegMother = mcGdMotherPosV0Dghter->GetPdgCode();
2568           lPID_PosMother = mcGdMotherNegV0Dghter->GetPdgCode();
2569    
2570           if(lPID_BachMother==lPID_NegMother && lPID_BachMother==lPID_PosMother){ 
2571                   lPDGCodeCascade = lPID_BachMother; 
2572       lXiTransvMomMC = mcMotherBach->Pt();
2573       if( lMCstack->IsPhysicalPrimary       (lblMotherBach) ) fTreeCascVarIsPhysicalPrimary = 1; //Is Primary!
2574       if( lMCstack->IsSecondaryFromWeakDecay(lblMotherBach) ) fTreeCascVarIsPhysicalPrimary = 2; //Weak Decay!
2575       if( lMCstack->IsSecondaryFromMaterial (lblMotherBach) ) fTreeCascVarIsPhysicalPrimary = 3; //From Material!
2576       if ( (mcMotherBach->Energy() + mcMotherBach->Pz()) / (mcMotherBach->Energy() - mcMotherBach->Pz() +1.e-13) !=0 ){
2577         lRapMC = 0.5*TMath::Log( (mcMotherBach->Energy() + mcMotherBach->Pz()) / (mcMotherBach->Energy() - mcMotherBach->Pz() +1.e-13) );
2578       }
2579           }
2580
2581   }}}}}}} //Ends all conditionals above...
2582
2583 //----------------------------------------
2584 // Regular MC ASSOCIATION ENDS HERE
2585 //----------------------------------------
2586
2587 //----------------------------------------
2588 // Swapped MC Association Starts Here 
2589 //----------------------------------------
2590
2591   fTreeCascVarPIDSwapped = 0; //Nothing
2592   if ( fkCheckSwapping ) { //on/off switch if not needed or otherwise broken
2593
2594           Int_t lPID_BachMotherSwapped = 0;
2595           Int_t lPID_NegMotherSwapped = 0;
2596         Int_t lPID_PosMotherSwapped = 0;
2597
2598           Int_t lblPosV0DghterSwapped = (Int_t) TMath::Abs( pTrackXi->GetLabel() );  
2599                   // Abs value = needed ! question of quality track association ...
2600           Int_t lblNegV0DghterSwapped = (Int_t) TMath::Abs( nTrackXi->GetLabel() );
2601           Int_t lblBachSwapped        = (Int_t) TMath::Abs( bachTrackXi->GetLabel() );
2602
2603     //This is SWAPPED association: swap like-sign particles
2604     TParticle* mcPosV0DghterSwapped = 0x0;
2605     TParticle* mcNegV0DghterSwapped = 0x0;
2606     TParticle* mcBachSwapped        = 0x0;
2607
2608     //Swapping Case 1: XiMinus/OmegaMinus swapped: exchange negative V0 daughter with bachelor
2609     if( lChargeXi == -1 ){ 
2610       mcPosV0DghterSwapped = lMCstack->Particle( lblPosV0DghterSwapped );
2611       mcNegV0DghterSwapped = lMCstack->Particle( lblBachSwapped        );
2612       mcBachSwapped        = lMCstack->Particle( lblNegV0DghterSwapped );       
2613     }
2614     //Swapping Case 2: XiPlus/OmegaPlus swapped: exchange positive V0 daughter with bachelor
2615     if( lChargeXi ==  1 ){ 
2616       mcPosV0DghterSwapped = lMCstack->Particle( lblBachSwapped        );
2617       mcNegV0DghterSwapped = lMCstack->Particle( lblNegV0DghterSwapped );
2618       mcBachSwapped        = lMCstack->Particle( lblPosV0DghterSwapped );       
2619     }
2620         
2621     //fTreeCascVarPosTransMomMC = mcPosV0Dghter->Pt();
2622     //fTreeCascVarNegTransMomMC = mcNegV0Dghter->Pt();
2623
2624           //fTreeCascVarPIDPositive = mcPosV0Dghter -> GetPdgCode();
2625           //fTreeCascVarPIDNegative = mcNegV0Dghter -> GetPdgCode();
2626           //fTreeCascVarPIDBachelor = mcBach->GetPdgCode();
2627
2628           // - Step 4.2 : level of the Xi daughters
2629                 
2630           Int_t lblMotherPosV0DghterSwapped = mcPosV0DghterSwapped->GetFirstMother() ; 
2631           Int_t lblMotherNegV0DghterSwapped = mcNegV0DghterSwapped->GetFirstMother();
2632         
2633           //Rather uncivilized: Open brackets for each 'continue'
2634           if(! (lblMotherPosV0DghterSwapped != lblMotherNegV0DghterSwapped) ) { // same mother
2635           if(! (lblMotherPosV0DghterSwapped < 0) ) { // mother != primary (!= -1)
2636           if(! (lblMotherNegV0DghterSwapped < 0) ) {
2637                                         
2638                 // mothers = Lambda candidate ... a priori
2639         
2640           TParticle* mcMotherPosV0DghterSwapped = lMCstack->Particle( lblMotherPosV0DghterSwapped );
2641           TParticle* mcMotherNegV0DghterSwapped = lMCstack->Particle( lblMotherNegV0DghterSwapped );
2642                         
2643           // - Step 4.3 : level of Xi candidate
2644         
2645           Int_t lblGdMotherPosV0DghterSwapped =   mcMotherPosV0DghterSwapped->GetFirstMother() ;
2646           Int_t lblGdMotherNegV0DghterSwapped =   mcMotherNegV0DghterSwapped->GetFirstMother() ;
2647                                 
2648                 if(! (lblGdMotherPosV0DghterSwapped != lblGdMotherNegV0DghterSwapped) ) {
2649                 if(! (lblGdMotherPosV0DghterSwapped < 0) ) { // primary lambda ...
2650                 if(! (lblGdMotherNegV0DghterSwapped < 0) ) { // primary lambda ...
2651
2652                   // Gd mothers = Xi candidate ... a priori
2653         
2654           TParticle* mcGdMotherPosV0DghterSwapped = lMCstack->Particle( lblGdMotherPosV0DghterSwapped );
2655           TParticle* mcGdMotherNegV0DghterSwapped = lMCstack->Particle( lblGdMotherNegV0DghterSwapped );
2656                                         
2657           Int_t lblMotherBachSwapped = (Int_t) TMath::Abs( mcBachSwapped->GetFirstMother()  );
2658         
2659   //            if( lblMotherBach != lblGdMotherPosV0Dghter ) continue; //same mother for bach and V0 daughters
2660                   if(!(lblMotherBachSwapped != lblGdMotherPosV0DghterSwapped)) { //same mother for bach and V0 daughters
2661         
2662           TParticle* mcMotherBachSwapped = lMCstack->Particle( lblMotherBachSwapped );
2663         
2664     lPID_BachMotherSwapped = mcMotherBachSwapped->GetPdgCode();
2665           lPID_NegMotherSwapped = mcGdMotherPosV0DghterSwapped->GetPdgCode();
2666           lPID_PosMotherSwapped = mcGdMotherNegV0DghterSwapped->GetPdgCode();
2667    
2668           if(lPID_BachMotherSwapped==lPID_NegMotherSwapped && lPID_BachMotherSwapped==lPID_PosMotherSwapped){ 
2669                   fTreeCascVarPIDSwapped = lPID_BachMotherSwapped; //there!
2670           }
2671
2672   }}}}}}} //Ends all conditionals above...
2673
2674   }
2675 //----------------------------------------
2676 // Swapped MC ASSOCIATION ENDS HERE
2677 //----------------------------------------
2678
2679
2680   //------------------------------------------------
2681   // Set Variables for adding to tree
2682   //------------------------------------------------            
2683         
2684 /* 1*/          fTreeCascVarCharge      = lChargeXi;
2685 /* 2*/          if(lInvMassXiMinus!=0)    fTreeCascVarMassAsXi = lInvMassXiMinus;
2686 /* 2*/          if(lInvMassXiPlus!=0)     fTreeCascVarMassAsXi = lInvMassXiPlus;
2687 /* 3*/          if(lInvMassOmegaMinus!=0) fTreeCascVarMassAsOmega = lInvMassOmegaMinus;
2688 /* 3*/          if(lInvMassOmegaPlus!=0)  fTreeCascVarMassAsOmega = lInvMassOmegaPlus;
2689 /* 4*/          fTreeCascVarPt = lXiTransvMom;
2690 /* 4*/          fTreeCascVarPtMC = lXiTransvMomMC;
2691 /* 5*/          fTreeCascVarRapXi = lRapXi ;
2692 /* 5*/          fTreeCascVarRapMC = lRapMC ;
2693 /* 6*/          fTreeCascVarRapOmega = lRapOmega ;
2694 /* 7*/          fTreeCascVarDCACascDaughters = lDcaXiDaughters;
2695 /* 8*/          fTreeCascVarDCABachToPrimVtx = lDcaBachToPrimVertexXi;
2696 /* 9*/          fTreeCascVarDCAV0Daughters = lDcaV0DaughtersXi;
2697 /*10*/          fTreeCascVarDCAV0ToPrimVtx = lDcaV0ToPrimVertexXi;
2698 /*11*/          fTreeCascVarDCAPosToPrimVtx = lDcaPosToPrimVertexXi;
2699 /*12*/          fTreeCascVarDCANegToPrimVtx = lDcaNegToPrimVertexXi;
2700 /*13*/          fTreeCascVarCascCosPointingAngle = lXiCosineOfPointingAngle;
2701 /*14*/          fTreeCascVarCascRadius = lXiRadius;
2702 /*15*/          fTreeCascVarV0Mass = lInvMassLambdaAsCascDghter;
2703 /*16*/          fTreeCascVarV0CosPointingAngle = lV0CosineOfPointingAngleXi;
2704 /*16*/          fTreeCascVarV0CosPointingAngleSpecial = lV0CosineOfPointingAngleXiSpecial;
2705 /*17*/          fTreeCascVarV0Radius = lV0RadiusXi;
2706 /*20*/          fTreeCascVarLeastNbrClusters = leastnumberofclusters;
2707 /*21*/          fTreeCascVarMultiplicity = lMultiplicity; //multiplicity, whatever that may be
2708
2709 /*23*/          fTreeCascVarDistOverTotMom = TMath::Sqrt(
2710                                                 TMath::Power( lPosXi[0] - lBestPrimaryVtxPos[0] , 2) +
2711                                                 TMath::Power( lPosXi[1] - lBestPrimaryVtxPos[1] , 2) +
2712                                                 TMath::Power( lPosXi[2] - lBestPrimaryVtxPos[2] , 2)
2713                                         );
2714 /*23*/          fTreeCascVarDistOverTotMom /= (lXiTotMom+1e-13);
2715 /*24*/    //Not specified here, it has been set already (TRunNumber)
2716 /*25*/          fTreeCascVarPID = lPDGCodeCascade;
2717
2718 //------------------------------------------------
2719 // Fill Tree! 
2720 //------------------------------------------------
2721
2722 // The conditional is meant to decrease excessive
2723 // memory usage! Be careful when loosening the 
2724 // cut!
2725
2726   //Xi    Mass window: 150MeV wide
2727   //Omega mass window: 150MeV wide
2728
2729   if( (fTreeCascVarMassAsXi<1.32+0.075&&fTreeCascVarMassAsXi>1.32-0.075) ||
2730       (fTreeCascVarMassAsOmega<1.68+0.075&&fTreeCascVarMassAsOmega>1.68-0.075) ){
2731       fTreeCascade->Fill();
2732   }
2733
2734 //------------------------------------------------
2735 // Fill tree over.
2736 //------------------------------------------------
2737
2738         }// end of the Cascade loop (ESD or AOD)
2739
2740    // Post output data.
2741    PostData(1, fListHist);
2742    PostData(2, fTreeCascade);
2743 }
2744
2745 //________________________________________________________________________
2746 void AliAnalysisTaskExtractPerformanceCascade::Terminate(Option_t *)
2747 {
2748    // Draw result to the screen
2749    // Called once at the end of the query
2750
2751    TList *cRetrievedList = 0x0;
2752    cRetrievedList = (TList*)GetOutputData(1);
2753    if(!cRetrievedList){
2754       Printf("ERROR - AliAnalysisTaskExtractCascade : ouput data container list not available\n");
2755       return;
2756    }    
2757         
2758    fHistV0MultiplicityForTrigEvt = dynamic_cast<TH1F*> (  cRetrievedList->FindObject("fHistV0MultiplicityForTrigEvt")  );
2759    if (!fHistV0MultiplicityForTrigEvt) {
2760       Printf("ERROR - AliAnalysisTaskExtractCascade : fHistV0MultiplicityForTrigEvt not available");
2761       return;
2762    }
2763   
2764    TCanvas *canCheck = new TCanvas("AliAnalysisTaskExtractCascade","V0 Multiplicity",10,10,510,510);
2765    canCheck->cd(1)->SetLogy();
2766
2767    fHistV0MultiplicityForTrigEvt->SetMarkerStyle(22);
2768    fHistV0MultiplicityForTrigEvt->DrawCopy("E");
2769 }
2770
2771 //----------------------------------------------------------------------------
2772
2773 Double_t AliAnalysisTaskExtractPerformanceCascade::MyRapidity(Double_t rE, Double_t rPz) const
2774 {
2775    // Local calculation for rapidity
2776    Double_t ReturnValue = -100;
2777    if( (rE-rPz+1.e-13) != 0 && (rE+rPz) != 0 ){ 
2778       ReturnValue =  0.5*TMath::Log((rE+rPz)/(rE-rPz+1.e-13));
2779    }
2780    return ReturnValue;
2781