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