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