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