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