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