]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGLF/STRANGENESS/LambdaK0/AliAnalysisTaskExtractPerformanceV0.cxx
Added configurable eta range for multiplicity estimator for pp vs multiplicity analysis.
[u/mrichter/AliRoot.git] / PWGLF / STRANGENESS / LambdaK0 / AliAnalysisTaskExtractPerformanceV0.cxx
CommitLineData
bcb6ffdb 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 V0s, 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// 7b. Fill TTree object with V0 information, candidates
36//
37// Please Report Any Bugs!
38//
39// --- David Dobrigkeit Chinellato
40// (david.chinellato@gmail.com)
41//
42// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
43
44class TTree;
45class TParticle;
46class TVector3;
47
48//class AliMCEventHandler;
49//class AliMCEvent;
50//class AliStack;
51
52class AliESDVertex;
53class AliAODVertex;
54class AliESDv0;
55class AliAODv0;
56
57#include <Riostream.h>
58#include "TList.h"
59#include "TH1.h"
60#include "TH2.h"
61#include "TH3.h"
62#include "TFile.h"
63#include "THnSparse.h"
64#include "TVector3.h"
65#include "TCanvas.h"
66#include "TMath.h"
67#include "TLegend.h"
68#include "AliLog.h"
69
70#include "AliESDEvent.h"
71#include "AliAODEvent.h"
72#include "AliV0vertexer.h"
73#include "AliCascadeVertexer.h"
74#include "AliESDpid.h"
75#include "AliESDtrack.h"
76#include "AliESDtrackCuts.h"
77#include "AliInputEventHandler.h"
78#include "AliAnalysisManager.h"
79#include "AliMCEventHandler.h"
80#include "AliMCEvent.h"
81#include "AliStack.h"
82
83#include "AliCFContainer.h"
84#include "AliMultiplicity.h"
85#include "AliAODMCParticle.h"
86#include "AliESDcascade.h"
87#include "AliAODcascade.h"
88#include "AliESDUtils.h"
7e81bb32 89#include "AliGenEventHeader.h"
246807eb 90#include "AliAnalysisTaskSE.h"
14ba3f35 91#include "AliAnalysisUtils.h"
bcb6ffdb 92#include "AliAnalysisTaskExtractPerformanceV0.h"
e5c8e548 93#include "AliHeader.h"
94#include "AliGenDPMjetEventHeader.h"
bcb6ffdb 95
c64cb1f6 96using std::cout;
97using std::endl;
98
bcb6ffdb 99ClassImp(AliAnalysisTaskExtractPerformanceV0)
100
14ba3f35 101AliAnalysisTaskExtractPerformanceV0::AliAnalysisTaskExtractPerformanceV0()
102 : AliAnalysisTaskSE(), fListHistV0(0), fTree(0), fPIDResponse(0), fESDtrackCuts(0), fUtils(0),
548bd092 103 fkIsNuclear ( kFALSE ),
048f4f8f 104 fkSwitchINT7 ( kFALSE ),
548bd092 105 fkUseOnTheFly ( kFALSE ),
7f4db1cd 106 fkTakeAllTracks ( kFALSE ),
388b34d3 107 fpArapidityShift ( 0.465 ),
e039e6b3 108 fCentralityEstimator("V0M"),
87e78684 109 fkLightWeight ( kFALSE ),
110 fkFastOnly ( "" ),
14ba3f35 111 fkpAVertexSelection( kFALSE ),
af819bba 112 fkRunV0Vertexer( kFALSE ),
776ebcfc 113 fkRejectPileup ( kTRUE ),
246807eb 114 fkSpecialExecution ( kFALSE),
115 fkSkipTrigger(kFALSE),
116 fkSaveAssociatedOnly (kFALSE),
117 fkDoNotCallTPCdEdx( kFALSE ),
e5c8e548 118 fDiffractiveOnly(kFALSE),
61d295ec 119 fEtaRefMult(0.5),
85b81f83 120//------------------------------------------------
121// Tree Variables
122
123 fTreeVariablePrimaryStatus(0),
124 fTreeVariablePrimaryStatusMother(0),
125 fTreeVariableChi2V0(0),
126 fTreeVariableDcaV0Daughters(0),
127 fTreeVariableDcaV0ToPrimVertex(0),
128 fTreeVariableDcaPosToPrimVertex(0),
129 fTreeVariableDcaNegToPrimVertex(0),
130 fTreeVariableV0CosineOfPointingAngle(0),
131 fTreeVariableV0Radius(0),
132 fTreeVariablePt(0),
133 fTreeVariablePtMC(0),
134 fTreeVariableRapK0Short(0),
135 fTreeVariableRapLambda(0),
136 fTreeVariableRapMC(0),
137 fTreeVariableInvMassK0s(0),
138 fTreeVariableInvMassLambda(0),
139 fTreeVariableInvMassAntiLambda(0),
140 fTreeVariableAlphaV0(0),
141 fTreeVariablePtArmV0(0),
142 fTreeVariableNegTotMomentum(0),
143 fTreeVariablePosTotMomentum(0),
144 fTreeVariableNegTransvMomentum(0),
145 fTreeVariablePosTransvMomentum(0),
146 fTreeVariableNegTransvMomentumMC(0),
147 fTreeVariablePosTransvMomentumMC(0),
148
149 fTreeVariableNSigmasPosProton(0),
150 fTreeVariableNSigmasPosPion(0),
151 fTreeVariableNSigmasNegProton(0),
152 fTreeVariableNSigmasNegPion(0),
153
154 fTreeVariablePtMother(0),
155 fTreeVariableV0CreationRadius(0),
156 fTreeVariablePID(0),
157 fTreeVariablePIDPositive(0),
158 fTreeVariablePIDNegative(0),
159 fTreeVariablePIDMother(0),
160 fTreeVariableIndexStatus(0),
161 fTreeVariableIndexStatusMother(0),
162
163 fTreeVariableRunNumber(0),
164 fTreeVariableEventNumber(0),
165
166 fTreeVariableDistOverTotMom(0),
167
168 fTreeVariablePosEta(0),
169 fTreeVariableNegEta(0),
170
171 fTreeVariableVertexZ(0),
172
173 fTreeVariableLeastNbrCrossedRows(0),
174 fTreeVariableLeastRatioCrossedRowsOverFindable(0),
5d43de53 175
85b81f83 176 fTreeVariableMultiplicity(0),
5d43de53 177 fTreeVariableMultiplicityV0A(0),
178 fTreeVariableMultiplicityZNA(0),
179 fTreeVariableMultiplicityTRK(0),
180 fTreeVariableMultiplicitySPD(0),
85b81f83 181 fTreeVariableMultiplicityMC(0),
182
183 fTreeVariableV0x(0),
184 fTreeVariableV0y(0),
185 fTreeVariableV0z(0),
186
187 fTreeVariableV0Px(0),
188 fTreeVariableV0Py(0),
189 fTreeVariableV0Pz(0),
190
191 fTreeVariableMCV0x(0),
192 fTreeVariableMCV0y(0),
193 fTreeVariableMCV0z(0),
194
195 fTreeVariableMCV0Px(0),
196 fTreeVariableMCV0Py(0),
197 fTreeVariableMCV0Pz(0),
198
199 fTreeVariablePVx(0),
200 fTreeVariablePVy(0),
201 fTreeVariablePVz(0),
202
203 fTreeVariableMCPVx(0),
204 fTreeVariableMCPVy(0),
205 fTreeVariableMCPVz(0),
206
df661cb7 207 fTreeVariableIsNonInjected(0),
208
f068724a 209 fTreeVariableNegTrackStatus(0),
210 fTreeVariablePosTrackStatus(0),
211
a5ff2395 212 fTreeVariableNegPhysicalStatus(0),
213 fTreeVariablePosPhysicalStatus(0),
214
060d8ca6 215 fTreeVariableNegPx(0),
216 fTreeVariableNegPy(0),
217 fTreeVariableNegPz(0),
218 fTreeVariablePosPx(0),
219 fTreeVariablePosPy(0),
220 fTreeVariablePosPz(0),
221
bcb6ffdb 222//------------------------------------------------
223// HISTOGRAMS
224// --- Filled on an Event-by-event basis
225//------------------------------------------------
226 fHistV0MultiplicityBeforeTrigSel(0),
227 fHistV0MultiplicityForTrigEvt(0),
228 fHistV0MultiplicityForSelEvt(0),
229 fHistV0MultiplicityForSelEvtNoTPCOnly(0),
230 fHistV0MultiplicityForSelEvtNoTPCOnlyNoPileup(0),
ac159816 231 fHistMultiplicityBeforeTrigSel(0),
232 fHistMultiplicityForTrigEvt(0),
bcb6ffdb 233 fHistMultiplicity(0),
234 fHistMultiplicityNoTPCOnly(0),
235 fHistMultiplicityNoTPCOnlyNoPileup(0),
236
5d43de53 237//V0A Centrality
238fHistMultiplicityV0ABeforeTrigSel(0),
239fHistMultiplicityV0AForTrigEvt(0),
240fHistMultiplicityV0A(0),
241fHistMultiplicityV0ANoTPCOnly(0),
242fHistMultiplicityV0ANoTPCOnlyNoPileup(0),
243
244//ZNA Centrality
245fHistMultiplicityZNABeforeTrigSel(0),
246fHistMultiplicityZNAForTrigEvt(0),
247fHistMultiplicityZNA(0),
248fHistMultiplicityZNANoTPCOnly(0),
249fHistMultiplicityZNANoTPCOnlyNoPileup(0),
250
251//TRK Centrality
252fHistMultiplicityTRKBeforeTrigSel(0),
253fHistMultiplicityTRKForTrigEvt(0),
254fHistMultiplicityTRK(0),
255fHistMultiplicityTRKNoTPCOnly(0),
256fHistMultiplicityTRKNoTPCOnlyNoPileup(0),
257
258//SPD Centrality
259fHistMultiplicitySPDBeforeTrigSel(0),
260fHistMultiplicitySPDForTrigEvt(0),
261fHistMultiplicitySPD(0),
262fHistMultiplicitySPDNoTPCOnly(0),
263fHistMultiplicitySPDNoTPCOnlyNoPileup(0),
264
1d94e33b 265 f2dHistMultiplicityVsTrueBeforeTrigSel(0),
266 f2dHistMultiplicityVsTrueForTrigEvt(0),
267 f2dHistMultiplicityVsTrue(0),
268 f2dHistMultiplicityVsTrueNoTPCOnly(0),
269 f2dHistMultiplicityVsTrueNoTPCOnlyNoPileup(0),
270
271 //Raw Data for Vertex Z position estimator change
272 f2dHistMultiplicityVsVertexZBeforeTrigSel(0),
273 f2dHistMultiplicityVsVertexZForTrigEvt(0),
274 f2dHistMultiplicityVsVertexZ(0),
275 f2dHistMultiplicityVsVertexZNoTPCOnly(0),
276 f2dHistMultiplicityVsVertexZNoTPCOnlyNoPileup(0),
277
278 fHistGenVertexZBeforeTrigSel(0),
279 fHistGenVertexZForTrigEvt(0),
280 fHistGenVertexZ(0),
281 fHistGenVertexZNoTPCOnly(0),
282 fHistGenVertexZNoTPCOnlyNoPileup(0),
283
bcb6ffdb 284//------------------------------------------------
285// PARTICLE HISTOGRAMS
286// --- Filled on a Particle-by-Particle basis
287//------------------------------------------------
68e484c4 288
b2c306f0 289//Standard V0M / multiplicity
68e484c4 290 f3dHistPrimAnalysisPtVsYVsMultLambda(0),
291 f3dHistPrimAnalysisPtVsYVsMultAntiLambda(0),
292 f3dHistPrimAnalysisPtVsYVsMultK0Short(0),
293 f3dHistPrimAnalysisPtVsYCMSVsMultLambda(0),
294 f3dHistPrimAnalysisPtVsYCMSVsMultAntiLambda(0),
295 f3dHistPrimAnalysisPtVsYCMSVsMultK0Short(0),
296
b2c306f0 297 //True Multiplicity
298 f3dHistPrimAnalysisPtVsYVsMultMCLambda(0),
299 f3dHistPrimAnalysisPtVsYVsMultMCAntiLambda(0),
300 f3dHistPrimAnalysisPtVsYVsMultMCK0Short(0),
301 f3dHistPrimAnalysisPtVsYCMSVsMultMCLambda(0),
302 f3dHistPrimAnalysisPtVsYCMSVsMultMCAntiLambda(0),
303 f3dHistPrimAnalysisPtVsYCMSVsMultMCK0Short(0),
304
68e484c4 305//V0A
306 f3dHistPrimAnalysisPtVsYVsMultV0ALambda(0),
307 f3dHistPrimAnalysisPtVsYVsMultV0AAntiLambda(0),
308 f3dHistPrimAnalysisPtVsYVsMultV0AK0Short(0),
309 f3dHistPrimAnalysisPtVsYCMSVsMultV0ALambda(0),
310 f3dHistPrimAnalysisPtVsYCMSVsMultV0AAntiLambda(0),
311 f3dHistPrimAnalysisPtVsYCMSVsMultV0AK0Short(0),
312
3db0901a 313//Added for cross-check
314 f3dHistPrimRawPtVsYCMSVsMultV0AKPlus(0),
315 f3dHistPrimRawPtVsYCMSVsMultV0AKMinus(0),
316 f3dHistPrimAnalysisPtVsYCMSVsMultV0AKPlus(0),
317 f3dHistPrimAnalysisPtVsYCMSVsMultV0AKMinus(0),
318
68e484c4 319//ZNA
320 f3dHistPrimAnalysisPtVsYVsMultZNALambda(0),
321 f3dHistPrimAnalysisPtVsYVsMultZNAAntiLambda(0),
322 f3dHistPrimAnalysisPtVsYVsMultZNAK0Short(0),
323 f3dHistPrimAnalysisPtVsYCMSVsMultZNALambda(0),
324 f3dHistPrimAnalysisPtVsYCMSVsMultZNAAntiLambda(0),
325 f3dHistPrimAnalysisPtVsYCMSVsMultZNAK0Short(0),
326
327//TRK
328 f3dHistPrimAnalysisPtVsYVsMultTRKLambda(0),
329 f3dHistPrimAnalysisPtVsYVsMultTRKAntiLambda(0),
330 f3dHistPrimAnalysisPtVsYVsMultTRKK0Short(0),
331 f3dHistPrimAnalysisPtVsYCMSVsMultTRKLambda(0),
332 f3dHistPrimAnalysisPtVsYCMSVsMultTRKAntiLambda(0),
333 f3dHistPrimAnalysisPtVsYCMSVsMultTRKK0Short(0),
334
335//SPD
336 f3dHistPrimAnalysisPtVsYVsMultSPDLambda(0),
337 f3dHistPrimAnalysisPtVsYVsMultSPDAntiLambda(0),
338 f3dHistPrimAnalysisPtVsYVsMultSPDK0Short(0),
339 f3dHistPrimAnalysisPtVsYCMSVsMultSPDLambda(0),
340 f3dHistPrimAnalysisPtVsYCMSVsMultSPDAntiLambda(0),
341 f3dHistPrimAnalysisPtVsYCMSVsMultSPDK0Short(0),
342
343//Standard V0M again
344 f3dHistPrimRawPtVsYVsMultLambda(0),
345 f3dHistPrimRawPtVsYVsMultAntiLambda(0),
346 f3dHistPrimRawPtVsYVsMultK0Short(0),
347 f3dHistPrimRawPtVsYCMSVsMultLambda(0),
348 f3dHistPrimRawPtVsYCMSVsMultAntiLambda(0),
349 f3dHistPrimRawPtVsYCMSVsMultK0Short(0),
350
351//V0A again
352 f3dHistPrimRawPtVsYVsMultV0ALambda(0),
353 f3dHistPrimRawPtVsYVsMultV0AAntiLambda(0),
354 f3dHistPrimRawPtVsYVsMultV0AK0Short(0),
355 f3dHistPrimRawPtVsYCMSVsMultV0ALambda(0),
356 f3dHistPrimRawPtVsYCMSVsMultV0AAntiLambda(0),
357 f3dHistPrimRawPtVsYCMSVsMultV0AK0Short(0),
358
359//ZNA
360 f3dHistPrimRawPtVsYVsMultZNALambda(0),
361 f3dHistPrimRawPtVsYVsMultZNAAntiLambda(0),
362 f3dHistPrimRawPtVsYVsMultZNAK0Short(0),
363 f3dHistPrimRawPtVsYCMSVsMultZNALambda(0),
364 f3dHistPrimRawPtVsYCMSVsMultZNAAntiLambda(0),
365 f3dHistPrimRawPtVsYCMSVsMultZNAK0Short(0),
366
367//TRK
368 f3dHistPrimRawPtVsYVsMultTRKLambda(0),
369 f3dHistPrimRawPtVsYVsMultTRKAntiLambda(0),
370 f3dHistPrimRawPtVsYVsMultTRKK0Short(0),
371 f3dHistPrimRawPtVsYCMSVsMultTRKLambda(0),
372 f3dHistPrimRawPtVsYCMSVsMultTRKAntiLambda(0),
373 f3dHistPrimRawPtVsYCMSVsMultTRKK0Short(0),
374
375//SPD
376 f3dHistPrimRawPtVsYVsMultSPDLambda(0),
377 f3dHistPrimRawPtVsYVsMultSPDAntiLambda(0),
378 f3dHistPrimRawPtVsYVsMultSPDK0Short(0),
379 f3dHistPrimRawPtVsYCMSVsMultSPDLambda(0),
380 f3dHistPrimRawPtVsYCMSVsMultSPDAntiLambda(0),
381 f3dHistPrimRawPtVsYCMSVsMultSPDK0Short(0),
382
383 f3dHistPrimRawPtVsYVsMultNonInjLambda(0),
384 f3dHistPrimRawPtVsYVsMultNonInjAntiLambda(0),
385 f3dHistPrimRawPtVsYVsMultNonInjK0Short(0),
386 f3dHistPrimRawPtVsYVsMultMCLambda(0),
387 f3dHistPrimRawPtVsYVsMultMCAntiLambda(0),
388 f3dHistPrimRawPtVsYVsMultMCK0Short(0),
389 f3dHistPrimRawPtVsYVsVertexZLambda(0),
390 f3dHistPrimRawPtVsYVsVertexZAntiLambda(0),
391 f3dHistPrimRawPtVsYVsVertexZK0Short(0),
392 f3dHistPrimCloseToPVPtVsYVsMultLambda(0),
393 f3dHistPrimCloseToPVPtVsYVsMultAntiLambda(0),
394 f3dHistPrimCloseToPVPtVsYVsMultK0Short(0),
395 f3dHistPrimRawPtVsYVsDecayLengthLambda(0),
396 f3dHistPrimRawPtVsYVsDecayLengthAntiLambda(0),
397 f3dHistPrimRawPtVsYVsDecayLengthK0Short(0),
398
399//V0M
400 f3dHistGenPtVsYVsMultXiMinus(0),
401 f3dHistGenPtVsYVsMultXiPlus(0),
402 f3dHistGenSelectedPtVsYVsMultXiMinus(0),
403 f3dHistGenSelectedPtVsYVsMultXiPlus(0),
404 f3dHistGenPtVsYCMSVsMultXiMinus(0),
405 f3dHistGenPtVsYCMSVsMultXiPlus(0),
406 f3dHistGenSelectedPtVsYCMSVsMultXiMinus(0),
407 f3dHistGenSelectedPtVsYCMSVsMultXiPlus(0),
408
409//V0A
410 f3dHistGenPtVsYVsMultV0AXiMinus(0),
411 f3dHistGenPtVsYVsMultV0AXiPlus(0),
412 f3dHistGenSelectedPtVsYVsMultV0AXiMinus(0),
413 f3dHistGenSelectedPtVsYVsMultV0AXiPlus(0),
414 f3dHistGenPtVsYCMSVsMultV0AXiMinus(0),
415 f3dHistGenPtVsYCMSVsMultV0AXiPlus(0),
416 f3dHistGenSelectedPtVsYCMSVsMultV0AXiMinus(0),
417 f3dHistGenSelectedPtVsYCMSVsMultV0AXiPlus(0),
418
419//ZNA
420 f3dHistGenPtVsYVsMultZNAXiMinus(0),
421 f3dHistGenPtVsYVsMultZNAXiPlus(0),
422 f3dHistGenSelectedPtVsYVsMultZNAXiMinus(0),
423 f3dHistGenSelectedPtVsYVsMultZNAXiPlus(0),
424 f3dHistGenPtVsYCMSVsMultZNAXiMinus(0),
425 f3dHistGenPtVsYCMSVsMultZNAXiPlus(0),
426 f3dHistGenSelectedPtVsYCMSVsMultZNAXiMinus(0),
427 f3dHistGenSelectedPtVsYCMSVsMultZNAXiPlus(0),
428
429//TRK
430 f3dHistGenPtVsYVsMultTRKXiMinus(0),
431 f3dHistGenPtVsYVsMultTRKXiPlus(0),
432 f3dHistGenSelectedPtVsYVsMultTRKXiMinus(0),
433 f3dHistGenSelectedPtVsYVsMultTRKXiPlus(0),
434 f3dHistGenPtVsYCMSVsMultTRKXiMinus(0),
435 f3dHistGenPtVsYCMSVsMultTRKXiPlus(0),
436 f3dHistGenSelectedPtVsYCMSVsMultTRKXiMinus(0),
437 f3dHistGenSelectedPtVsYCMSVsMultTRKXiPlus(0),
438
439//SPD
440 f3dHistGenPtVsYVsMultSPDXiMinus(0),
441 f3dHistGenPtVsYVsMultSPDXiPlus(0),
442 f3dHistGenSelectedPtVsYVsMultSPDXiMinus(0),
443 f3dHistGenSelectedPtVsYVsMultSPDXiPlus(0),
444 f3dHistGenPtVsYCMSVsMultSPDXiMinus(0),
445 f3dHistGenPtVsYCMSVsMultSPDXiPlus(0),
446 f3dHistGenSelectedPtVsYCMSVsMultSPDXiMinus(0),
447 f3dHistGenSelectedPtVsYCMSVsMultSPDXiPlus(0),
448
449 fHistPVx(0),
450 fHistPVy(0),
451 fHistPVz(0),
452 fHistPVxAnalysis(0),
453 fHistPVyAnalysis(0),
454 fHistPVzAnalysis(0),
455 fHistPVxAnalysisHasHighPtLambda(0),
456 fHistPVyAnalysisHasHighPtLambda(0),
457 fHistPVzAnalysisHasHighPtLambda(0),
458 fHistSwappedV0Counter(0)
bcb6ffdb 459{
460 // Dummy Constructor
af819bba 461 for(Int_t iV0selIdx = 0; iV0selIdx < 7; iV0selIdx++ ) { fV0Sels [iV0selIdx ] = -1.; }
bcb6ffdb 462}
463
464AliAnalysisTaskExtractPerformanceV0::AliAnalysisTaskExtractPerformanceV0(const char *name)
14ba3f35 465 : AliAnalysisTaskSE(name), fListHistV0(0), fTree(0), fPIDResponse(0), fESDtrackCuts(0), fUtils(0),
548bd092 466 fkIsNuclear ( kFALSE ),
048f4f8f 467 fkSwitchINT7 ( kFALSE ),
548bd092 468 fkUseOnTheFly ( kFALSE ),
7f4db1cd 469 fkTakeAllTracks ( kFALSE ),
388b34d3 470 fpArapidityShift ( 0.465 ),
e039e6b3 471 fCentralityEstimator("V0M"),
87e78684 472 fkLightWeight ( kFALSE ),
473 fkFastOnly ( "" ),
14ba3f35 474 fkpAVertexSelection( kFALSE ),
af819bba 475 fkRunV0Vertexer( kFALSE ),
776ebcfc 476 fkRejectPileup ( kTRUE ),
246807eb 477 fkSpecialExecution ( kFALSE),
478 fkSkipTrigger(kFALSE),
479 fkSaveAssociatedOnly (kFALSE),
480 fkDoNotCallTPCdEdx( kFALSE ),
e5c8e548 481 fDiffractiveOnly(kFALSE),
61d295ec 482 fEtaRefMult (0.5),
85b81f83 483//------------------------------------------------
484// Tree Variables
485
486 fTreeVariablePrimaryStatus(0),
487 fTreeVariablePrimaryStatusMother(0),
488 fTreeVariableChi2V0(0),
489 fTreeVariableDcaV0Daughters(0),
490 fTreeVariableDcaV0ToPrimVertex(0),
491 fTreeVariableDcaPosToPrimVertex(0),
492 fTreeVariableDcaNegToPrimVertex(0),
493 fTreeVariableV0CosineOfPointingAngle(0),
494 fTreeVariableV0Radius(0),
495 fTreeVariablePt(0),
496 fTreeVariablePtMC(0),
497 fTreeVariableRapK0Short(0),
498 fTreeVariableRapLambda(0),
499 fTreeVariableRapMC(0),
500 fTreeVariableInvMassK0s(0),
501 fTreeVariableInvMassLambda(0),
502 fTreeVariableInvMassAntiLambda(0),
503 fTreeVariableAlphaV0(0),
504 fTreeVariablePtArmV0(0),
505 fTreeVariableNegTotMomentum(0),
506 fTreeVariablePosTotMomentum(0),
507 fTreeVariableNegTransvMomentum(0),
508 fTreeVariablePosTransvMomentum(0),
509 fTreeVariableNegTransvMomentumMC(0),
510 fTreeVariablePosTransvMomentumMC(0),
511
512 fTreeVariableNSigmasPosProton(0),
513 fTreeVariableNSigmasPosPion(0),
514 fTreeVariableNSigmasNegProton(0),
515 fTreeVariableNSigmasNegPion(0),
516
517 fTreeVariablePtMother(0),
518 fTreeVariableV0CreationRadius(0),
519 fTreeVariablePID(0),
520 fTreeVariablePIDPositive(0),
521 fTreeVariablePIDNegative(0),
522 fTreeVariablePIDMother(0),
523 fTreeVariableIndexStatus(0),
524 fTreeVariableIndexStatusMother(0),
525
526 fTreeVariableRunNumber(0),
527 fTreeVariableEventNumber(0),
528
529 fTreeVariableDistOverTotMom(0),
530
531 fTreeVariablePosEta(0),
532 fTreeVariableNegEta(0),
533
534 fTreeVariableVertexZ(0),
535
536 fTreeVariableLeastNbrCrossedRows(0),
537 fTreeVariableLeastRatioCrossedRowsOverFindable(0),
538 fTreeVariableMultiplicity(0),
5d43de53 539 fTreeVariableMultiplicityV0A(0),
540 fTreeVariableMultiplicityZNA(0),
541 fTreeVariableMultiplicityTRK(0),
542 fTreeVariableMultiplicitySPD(0),
85b81f83 543 fTreeVariableMultiplicityMC(0),
544
545 fTreeVariableV0x(0),
546 fTreeVariableV0y(0),
547 fTreeVariableV0z(0),
548
549 fTreeVariableV0Px(0),
550 fTreeVariableV0Py(0),
551 fTreeVariableV0Pz(0),
552
553 fTreeVariableMCV0x(0),
554 fTreeVariableMCV0y(0),
555 fTreeVariableMCV0z(0),
556
557 fTreeVariableMCV0Px(0),
558 fTreeVariableMCV0Py(0),
559 fTreeVariableMCV0Pz(0),
560
561 fTreeVariablePVx(0),
562 fTreeVariablePVy(0),
563 fTreeVariablePVz(0),
564
565 fTreeVariableMCPVx(0),
566 fTreeVariableMCPVy(0),
567 fTreeVariableMCPVz(0),
568
df661cb7 569 fTreeVariableIsNonInjected(0),
570
f068724a 571 fTreeVariableNegTrackStatus(0),
572 fTreeVariablePosTrackStatus(0),
df661cb7 573
f897dd0e 574 fTreeVariableNegPhysicalStatus(0),
575 fTreeVariablePosPhysicalStatus(0),
576
060d8ca6 577 fTreeVariableNegPx(0),
578 fTreeVariableNegPy(0),
579 fTreeVariableNegPz(0),
580 fTreeVariablePosPx(0),
581 fTreeVariablePosPy(0),
582 fTreeVariablePosPz(0),
583
bcb6ffdb 584//------------------------------------------------
585// HISTOGRAMS
586// --- Filled on an Event-by-event basis
587//------------------------------------------------
588 fHistV0MultiplicityBeforeTrigSel(0),
589 fHistV0MultiplicityForTrigEvt(0),
590 fHistV0MultiplicityForSelEvt(0),
591 fHistV0MultiplicityForSelEvtNoTPCOnly(0),
592 fHistV0MultiplicityForSelEvtNoTPCOnlyNoPileup(0),
ac159816 593 fHistMultiplicityBeforeTrigSel(0),
594 fHistMultiplicityForTrigEvt(0),
bcb6ffdb 595 fHistMultiplicity(0),
596 fHistMultiplicityNoTPCOnly(0),
597 fHistMultiplicityNoTPCOnlyNoPileup(0),
598
5d43de53 599//V0A Centrality
600fHistMultiplicityV0ABeforeTrigSel(0),
601fHistMultiplicityV0AForTrigEvt(0),
602fHistMultiplicityV0A(0),
603fHistMultiplicityV0ANoTPCOnly(0),
604fHistMultiplicityV0ANoTPCOnlyNoPileup(0),
605
606//ZNA Centrality
607fHistMultiplicityZNABeforeTrigSel(0),
608fHistMultiplicityZNAForTrigEvt(0),
609fHistMultiplicityZNA(0),
610fHistMultiplicityZNANoTPCOnly(0),
611fHistMultiplicityZNANoTPCOnlyNoPileup(0),
612
613//TRK Centrality
614fHistMultiplicityTRKBeforeTrigSel(0),
615fHistMultiplicityTRKForTrigEvt(0),
616fHistMultiplicityTRK(0),
617fHistMultiplicityTRKNoTPCOnly(0),
618fHistMultiplicityTRKNoTPCOnlyNoPileup(0),
619
620//SPD Centrality
621fHistMultiplicitySPDBeforeTrigSel(0),
622fHistMultiplicitySPDForTrigEvt(0),
623fHistMultiplicitySPD(0),
624fHistMultiplicitySPDNoTPCOnly(0),
625fHistMultiplicitySPDNoTPCOnlyNoPileup(0),
626
1d94e33b 627 f2dHistMultiplicityVsTrueBeforeTrigSel(0),
628 f2dHistMultiplicityVsTrueForTrigEvt(0),
629 f2dHistMultiplicityVsTrue(0),
630 f2dHistMultiplicityVsTrueNoTPCOnly(0),
631 f2dHistMultiplicityVsTrueNoTPCOnlyNoPileup(0),
632
633 //Raw Data for Vertex Z position estimator change
634 f2dHistMultiplicityVsVertexZBeforeTrigSel(0),
635 f2dHistMultiplicityVsVertexZForTrigEvt(0),
636 f2dHistMultiplicityVsVertexZ(0),
637 f2dHistMultiplicityVsVertexZNoTPCOnly(0),
638 f2dHistMultiplicityVsVertexZNoTPCOnlyNoPileup(0),
639
640 fHistGenVertexZBeforeTrigSel(0),
641 fHistGenVertexZForTrigEvt(0),
642 fHistGenVertexZ(0),
643 fHistGenVertexZNoTPCOnly(0),
644 fHistGenVertexZNoTPCOnlyNoPileup(0),
bcb6ffdb 645
646//------------------------------------------------
647// PARTICLE HISTOGRAMS
648// --- Filled on a Particle-by-Particle basis
649//------------------------------------------------
68e484c4 650
651//Standard V0M
652f3dHistPrimAnalysisPtVsYVsMultLambda(0),
653f3dHistPrimAnalysisPtVsYVsMultAntiLambda(0),
654f3dHistPrimAnalysisPtVsYVsMultK0Short(0),
655f3dHistPrimAnalysisPtVsYCMSVsMultLambda(0),
656f3dHistPrimAnalysisPtVsYCMSVsMultAntiLambda(0),
657f3dHistPrimAnalysisPtVsYCMSVsMultK0Short(0),
658
b2c306f0 659//True Multiplicity
660f3dHistPrimAnalysisPtVsYVsMultMCLambda(0),
661f3dHistPrimAnalysisPtVsYVsMultMCAntiLambda(0),
662f3dHistPrimAnalysisPtVsYVsMultMCK0Short(0),
663f3dHistPrimAnalysisPtVsYCMSVsMultMCLambda(0),
664f3dHistPrimAnalysisPtVsYCMSVsMultMCAntiLambda(0),
665f3dHistPrimAnalysisPtVsYCMSVsMultMCK0Short(0),
666
68e484c4 667//V0A
668f3dHistPrimAnalysisPtVsYVsMultV0ALambda(0),
669f3dHistPrimAnalysisPtVsYVsMultV0AAntiLambda(0),
670f3dHistPrimAnalysisPtVsYVsMultV0AK0Short(0),
671f3dHistPrimAnalysisPtVsYCMSVsMultV0ALambda(0),
672f3dHistPrimAnalysisPtVsYCMSVsMultV0AAntiLambda(0),
673f3dHistPrimAnalysisPtVsYCMSVsMultV0AK0Short(0),
674
3db0901a 675//Added for cross-check
676 f3dHistPrimRawPtVsYCMSVsMultV0AKPlus(0),
677 f3dHistPrimRawPtVsYCMSVsMultV0AKMinus(0),
678 f3dHistPrimAnalysisPtVsYCMSVsMultV0AKPlus(0),
679 f3dHistPrimAnalysisPtVsYCMSVsMultV0AKMinus(0),
680
68e484c4 681//ZNA
682f3dHistPrimAnalysisPtVsYVsMultZNALambda(0),
683f3dHistPrimAnalysisPtVsYVsMultZNAAntiLambda(0),
684f3dHistPrimAnalysisPtVsYVsMultZNAK0Short(0),
685f3dHistPrimAnalysisPtVsYCMSVsMultZNALambda(0),
686f3dHistPrimAnalysisPtVsYCMSVsMultZNAAntiLambda(0),
687f3dHistPrimAnalysisPtVsYCMSVsMultZNAK0Short(0),
688
689//TRK
690f3dHistPrimAnalysisPtVsYVsMultTRKLambda(0),
691f3dHistPrimAnalysisPtVsYVsMultTRKAntiLambda(0),
692f3dHistPrimAnalysisPtVsYVsMultTRKK0Short(0),
693f3dHistPrimAnalysisPtVsYCMSVsMultTRKLambda(0),
694f3dHistPrimAnalysisPtVsYCMSVsMultTRKAntiLambda(0),
695f3dHistPrimAnalysisPtVsYCMSVsMultTRKK0Short(0),
696
697//SPD
698f3dHistPrimAnalysisPtVsYVsMultSPDLambda(0),
699f3dHistPrimAnalysisPtVsYVsMultSPDAntiLambda(0),
700f3dHistPrimAnalysisPtVsYVsMultSPDK0Short(0),
701f3dHistPrimAnalysisPtVsYCMSVsMultSPDLambda(0),
702f3dHistPrimAnalysisPtVsYCMSVsMultSPDAntiLambda(0),
703f3dHistPrimAnalysisPtVsYCMSVsMultSPDK0Short(0),
704
705//Standard V0M again
706f3dHistPrimRawPtVsYVsMultLambda(0),
707f3dHistPrimRawPtVsYVsMultAntiLambda(0),
708f3dHistPrimRawPtVsYVsMultK0Short(0),
709f3dHistPrimRawPtVsYCMSVsMultLambda(0),
710f3dHistPrimRawPtVsYCMSVsMultAntiLambda(0),
711f3dHistPrimRawPtVsYCMSVsMultK0Short(0),
712
713//V0A again
714f3dHistPrimRawPtVsYVsMultV0ALambda(0),
715f3dHistPrimRawPtVsYVsMultV0AAntiLambda(0),
716f3dHistPrimRawPtVsYVsMultV0AK0Short(0),
717f3dHistPrimRawPtVsYCMSVsMultV0ALambda(0),
718f3dHistPrimRawPtVsYCMSVsMultV0AAntiLambda(0),
719f3dHistPrimRawPtVsYCMSVsMultV0AK0Short(0),
720
721//ZNA
722f3dHistPrimRawPtVsYVsMultZNALambda(0),
723f3dHistPrimRawPtVsYVsMultZNAAntiLambda(0),
724f3dHistPrimRawPtVsYVsMultZNAK0Short(0),
725f3dHistPrimRawPtVsYCMSVsMultZNALambda(0),
726f3dHistPrimRawPtVsYCMSVsMultZNAAntiLambda(0),
727f3dHistPrimRawPtVsYCMSVsMultZNAK0Short(0),
728
729//TRK
730f3dHistPrimRawPtVsYVsMultTRKLambda(0),
731f3dHistPrimRawPtVsYVsMultTRKAntiLambda(0),
732f3dHistPrimRawPtVsYVsMultTRKK0Short(0),
733f3dHistPrimRawPtVsYCMSVsMultTRKLambda(0),
734f3dHistPrimRawPtVsYCMSVsMultTRKAntiLambda(0),
735f3dHistPrimRawPtVsYCMSVsMultTRKK0Short(0),
736
737//SPD
738f3dHistPrimRawPtVsYVsMultSPDLambda(0),
739f3dHistPrimRawPtVsYVsMultSPDAntiLambda(0),
740f3dHistPrimRawPtVsYVsMultSPDK0Short(0),
741f3dHistPrimRawPtVsYCMSVsMultSPDLambda(0),
742f3dHistPrimRawPtVsYCMSVsMultSPDAntiLambda(0),
743f3dHistPrimRawPtVsYCMSVsMultSPDK0Short(0),
744
df661cb7 745 f3dHistPrimRawPtVsYVsMultNonInjLambda(0),
746 f3dHistPrimRawPtVsYVsMultNonInjAntiLambda(0),
747 f3dHistPrimRawPtVsYVsMultNonInjK0Short(0),
a18e0a39 748 f3dHistPrimRawPtVsYVsMultMCLambda(0),
749 f3dHistPrimRawPtVsYVsMultMCAntiLambda(0),
750 f3dHistPrimRawPtVsYVsMultMCK0Short(0),
751 f3dHistPrimRawPtVsYVsVertexZLambda(0),
752 f3dHistPrimRawPtVsYVsVertexZAntiLambda(0),
753 f3dHistPrimRawPtVsYVsVertexZK0Short(0),
7e81bb32 754 f3dHistPrimCloseToPVPtVsYVsMultLambda(0),
755 f3dHistPrimCloseToPVPtVsYVsMultAntiLambda(0),
756 f3dHistPrimCloseToPVPtVsYVsMultK0Short(0),
bcb6ffdb 757 f3dHistPrimRawPtVsYVsDecayLengthLambda(0),
758 f3dHistPrimRawPtVsYVsDecayLengthAntiLambda(0),
759 f3dHistPrimRawPtVsYVsDecayLengthK0Short(0),
68e484c4 760
761//V0M
762f3dHistGenPtVsYVsMultXiMinus(0),
763f3dHistGenPtVsYVsMultXiPlus(0),
764f3dHistGenSelectedPtVsYVsMultXiMinus(0),
765f3dHistGenSelectedPtVsYVsMultXiPlus(0),
766f3dHistGenPtVsYCMSVsMultXiMinus(0),
767f3dHistGenPtVsYCMSVsMultXiPlus(0),
768f3dHistGenSelectedPtVsYCMSVsMultXiMinus(0),
769f3dHistGenSelectedPtVsYCMSVsMultXiPlus(0),
770
771//V0A
772f3dHistGenPtVsYVsMultV0AXiMinus(0),
773f3dHistGenPtVsYVsMultV0AXiPlus(0),
774f3dHistGenSelectedPtVsYVsMultV0AXiMinus(0),
775f3dHistGenSelectedPtVsYVsMultV0AXiPlus(0),
776f3dHistGenPtVsYCMSVsMultV0AXiMinus(0),
777f3dHistGenPtVsYCMSVsMultV0AXiPlus(0),
778f3dHistGenSelectedPtVsYCMSVsMultV0AXiMinus(0),
779f3dHistGenSelectedPtVsYCMSVsMultV0AXiPlus(0),
780
781//ZNA
782f3dHistGenPtVsYVsMultZNAXiMinus(0),
783f3dHistGenPtVsYVsMultZNAXiPlus(0),
784f3dHistGenSelectedPtVsYVsMultZNAXiMinus(0),
785f3dHistGenSelectedPtVsYVsMultZNAXiPlus(0),
786f3dHistGenPtVsYCMSVsMultZNAXiMinus(0),
787f3dHistGenPtVsYCMSVsMultZNAXiPlus(0),
788f3dHistGenSelectedPtVsYCMSVsMultZNAXiMinus(0),
789f3dHistGenSelectedPtVsYCMSVsMultZNAXiPlus(0),
790
791//TRK
792f3dHistGenPtVsYVsMultTRKXiMinus(0),
793f3dHistGenPtVsYVsMultTRKXiPlus(0),
794f3dHistGenSelectedPtVsYVsMultTRKXiMinus(0),
795f3dHistGenSelectedPtVsYVsMultTRKXiPlus(0),
796f3dHistGenPtVsYCMSVsMultTRKXiMinus(0),
797f3dHistGenPtVsYCMSVsMultTRKXiPlus(0),
798f3dHistGenSelectedPtVsYCMSVsMultTRKXiMinus(0),
799f3dHistGenSelectedPtVsYCMSVsMultTRKXiPlus(0),
800
801//SPD
802f3dHistGenPtVsYVsMultSPDXiMinus(0),
803f3dHistGenPtVsYVsMultSPDXiPlus(0),
804f3dHistGenSelectedPtVsYVsMultSPDXiMinus(0),
805f3dHistGenSelectedPtVsYVsMultSPDXiPlus(0),
806f3dHistGenPtVsYCMSVsMultSPDXiMinus(0),
807f3dHistGenPtVsYCMSVsMultSPDXiPlus(0),
808f3dHistGenSelectedPtVsYCMSVsMultSPDXiMinus(0),
809f3dHistGenSelectedPtVsYCMSVsMultSPDXiPlus(0),
810
bcb6ffdb 811 fHistPVx(0),
812 fHistPVy(0),
813 fHistPVz(0),
814 fHistPVxAnalysis(0),
815 fHistPVyAnalysis(0),
816 fHistPVzAnalysis(0),
817 fHistPVxAnalysisHasHighPtLambda(0),
818 fHistPVyAnalysisHasHighPtLambda(0),
4f8ed367 819 fHistPVzAnalysisHasHighPtLambda(0),
820 fHistSwappedV0Counter(0)
bcb6ffdb 821{
822 // Constructor
af819bba 823 // Set Loose cuts or not here...
824 // REALLY LOOSE? Be careful when attempting to run over PbPb if fkRunV0Vertexer is set!
825 fV0Sels[0] = 33. ; // max allowed chi2
826 fV0Sels[1] = 0.02; // min allowed impact parameter for the 1st daughter (LHC09a4 : 0.05)
827 fV0Sels[2] = 0.02; // min allowed impact parameter for the 2nd daughter (LHC09a4 : 0.05)
828 fV0Sels[3] = 2.0 ; // max allowed DCA between the daughter tracks (LHC09a4 : 0.5)
829 fV0Sels[4] = 0.95; // min allowed cosine of V0's pointing angle (LHC09a4 : 0.99)
830 fV0Sels[5] = 0.5 ; // min radius of the fiducial volume (LHC09a4 : 0.2)
831 fV0Sels[6] = 200. ; // max radius of the fiducial volume (LHC09a4 : 100.0)
832 // Output slot #0 writes into a TList container (Cascade)
833 DefineOutput(1, TList::Class());
834 DefineOutput(2, TTree::Class());
bcb6ffdb 835}
836
837
838AliAnalysisTaskExtractPerformanceV0::~AliAnalysisTaskExtractPerformanceV0()
839{
840//------------------------------------------------
841// DESTRUCTOR
842//------------------------------------------------
843
844 if (fListHistV0){
845 delete fListHistV0;
846 fListHistV0 = 0x0;
847 }
848 if (fTree){
849 delete fTree;
850 fTree = 0x0;
851 }
76029adc 852 //cleanup esd track cuts object too...
853 if (fESDtrackCuts){
854 delete fESDtrackCuts;
855 fESDtrackCuts = 0x0;
856 }
14ba3f35 857
858 if (fUtils){
859 delete fUtils;
860 fUtils = 0x0;
861 }
bcb6ffdb 862}
863
864//________________________________________________________________________
865void AliAnalysisTaskExtractPerformanceV0::UserCreateOutputObjects()
866{
bcb6ffdb 867
eff0b6fc 868 OpenFile(2);
bcb6ffdb 869 // Called once
c228a5af 870
871//------------------------------------------------
872
eff0b6fc 873 fTree = new TTree("fTree","V0Candidates");
bcb6ffdb 874
875//------------------------------------------------
c228a5af 876// fTree Branch definitions - V0 Tree
bcb6ffdb 877//------------------------------------------------
878
879//-----------BASIC-INFO---------------------------
880/* 1*/ fTree->Branch("fTreeVariablePrimaryStatus",&fTreeVariablePrimaryStatus,"fTreeVariablePrimaryStatus/I");
c92e2e56 881/* 2*/ fTree->Branch("fTreeVariablePrimaryStatusMother",&fTreeVariablePrimaryStatusMother,"fTreeVariablePrimaryStatusMother/I");
bcb6ffdb 882/* 2*/ fTree->Branch("fTreeVariableChi2V0",&fTreeVariableChi2V0,"Chi2V0/F");
883/* 3*/ fTree->Branch("fTreeVariableDcaV0Daughters",&fTreeVariableDcaV0Daughters,"fTreeVariableDcaV0Daughters/F");
884/* 4*/ fTree->Branch("fTreeVariableDcaPosToPrimVertex",&fTreeVariableDcaPosToPrimVertex,"fTreeVariableDcaPosToPrimVertex/F");
885/* 5*/ fTree->Branch("fTreeVariableDcaNegToPrimVertex",&fTreeVariableDcaNegToPrimVertex,"fTreeVariableDcaNegToPrimVertex/F");
886/* 6*/ fTree->Branch("fTreeVariableV0Radius",&fTreeVariableV0Radius,"fTreeVariableV0Radius/F");
887/* 7*/ fTree->Branch("fTreeVariablePt",&fTreeVariablePt,"fTreeVariablePt/F");
888/* 7*/ fTree->Branch("fTreeVariablePtMC",&fTreeVariablePtMC,"fTreeVariablePtMC/F");
889/* 8*/ fTree->Branch("fTreeVariableRapK0Short",&fTreeVariableRapK0Short,"fTreeVariableRapK0Short/F");
890/* 9*/ fTree->Branch("fTreeVariableRapLambda",&fTreeVariableRapLambda,"fTreeVariableRapLambda/F");
891/*10*/ fTree->Branch("fTreeVariableRapMC",&fTreeVariableRapMC,"fTreeVariableRapMC/F");
892/*11*/ fTree->Branch("fTreeVariableInvMassK0s",&fTreeVariableInvMassK0s,"fTreeVariableInvMassK0s/F");
893/*12*/ fTree->Branch("fTreeVariableInvMassLambda",&fTreeVariableInvMassLambda,"fTreeVariableInvMassLambda/F");
894/*13*/ fTree->Branch("fTreeVariableInvMassAntiLambda",&fTreeVariableInvMassAntiLambda,"fTreeVariableInvMassAntiLambda/F");
895/*14*/ fTree->Branch("fTreeVariableAlphaV0",&fTreeVariableAlphaV0,"fTreeVariableAlphaV0/F");
896/*15*/ fTree->Branch("fTreeVariablePtArmV0",&fTreeVariablePtArmV0,"fTreeVariablePtArmV0/F");
897/*16*/ fTree->Branch("fTreeVariableNegTransvMomentum",&fTreeVariableNegTransvMomentum,"fTreeVariableNegTransvMomentum/F");
898/*17*/ fTree->Branch("fTreeVariablePosTransvMomentum",&fTreeVariablePosTransvMomentum,"fTreeVariablePosTransvMomentum/F");
899/*18*/ fTree->Branch("fTreeVariableNegTransvMomentumMC",&fTreeVariableNegTransvMomentumMC,"fTreeVariableNegTransvMomentumMC/F");
900/*19*/ fTree->Branch("fTreeVariablePosTransvMomentumMC",&fTreeVariablePosTransvMomentumMC,"fTreeVariablePosTransvMomentumMC/F");
901/*20*/ fTree->Branch("fTreeVariableLeastNbrCrossedRows",&fTreeVariableLeastNbrCrossedRows,"fTreeVariableLeastNbrCrossedRows/I");
902/*21*/ fTree->Branch("fTreeVariableLeastRatioCrossedRowsOverFindable",&fTreeVariableLeastRatioCrossedRowsOverFindable,"fTreeVariableLeastRatioCrossedRowsOverFindable/F");
903/*22*/ fTree->Branch("fTreeVariablePID",&fTreeVariablePID,"fTreeVariablePID/I");
904/*23*/ fTree->Branch("fTreeVariablePIDPositive",&fTreeVariablePIDPositive,"fTreeVariablePIDPositive/I");
905/*24*/ fTree->Branch("fTreeVariablePIDNegative",&fTreeVariablePIDNegative,"fTreeVariablePIDNegative/I");
906/*25*/ fTree->Branch("fTreeVariablePIDMother",&fTreeVariablePIDMother,"fTreeVariablePIDMother/I");
907/*26*/ fTree->Branch("fTreeVariablePtXiMother",&fTreeVariablePtMother,"fTreeVariablePtMother/F");
908/*27*/ fTree->Branch("fTreeVariableV0CosineOfPointingAngle",&fTreeVariableV0CosineOfPointingAngle,"fTreeVariableV0CosineOfPointingAngle/F");
909//-----------MULTIPLICITY-INFO--------------------
910/*28*/ fTree->Branch("fTreeVariableMultiplicity",&fTreeVariableMultiplicity,"fTreeVariableMultiplicity/I");
a18e0a39 911/*28*/ fTree->Branch("fTreeVariableMultiplicityMC",&fTreeVariableMultiplicityMC,"fTreeVariableMultiplicityMC/I");
5d43de53 912 /*17*/ fTree->Branch("fTreeVariableMultiplicityV0A",&fTreeVariableMultiplicityV0A,"fTreeVariableMultiplicityV0A/I");
913 /*17*/ fTree->Branch("fTreeVariableMultiplicityZNA",&fTreeVariableMultiplicityZNA,"fTreeVariableMultiplicityZNA/I");
914 /*17*/ fTree->Branch("fTreeVariableMultiplicityTRK",&fTreeVariableMultiplicityTRK,"fTreeVariableMultiplicityTRK/I");
915 /*17*/ fTree->Branch("fTreeVariableMultiplicitySPD",&fTreeVariableMultiplicitySPD,"fTreeVariableMultiplicitySPD/I");
bcb6ffdb 916//------------------------------------------------
917/*29*/ fTree->Branch("fTreeVariableDistOverTotMom",&fTreeVariableDistOverTotMom,"fTreeVariableDistOverTotMom/F");
918/*30*/ fTree->Branch("fTreeVariableNSigmasPosProton",&fTreeVariableNSigmasPosProton,"fTreeVariableNSigmasPosProton/F");
919/*31*/ fTree->Branch("fTreeVariableNSigmasPosPion",&fTreeVariableNSigmasPosPion,"fTreeVariableNSigmasPosPion/F");
920/*32*/ fTree->Branch("fTreeVariableNSigmasNegProton",&fTreeVariableNSigmasNegProton,"fTreeVariableNSigmasNegProton/F");
921/*33*/ fTree->Branch("fTreeVariableNSigmasNegPion",&fTreeVariableNSigmasNegPion,"fTreeVariableNSigmasNegPion/F");
922//------------------------------------------------
923/*34*/ fTree->Branch("fTreeVariableNegEta",&fTreeVariableNegEta,"fTreeVariableNegEta/F");
924/*35*/ fTree->Branch("fTreeVariablePosEta",&fTreeVariablePosEta,"fTreeVariablePosEta/F");
925/*36*/ fTree->Branch("fTreeVariableV0CreationRadius",&fTreeVariableV0CreationRadius,"fTreeVariableV0CreationRadius/F");
c92e2e56 926
927 if ( fkLightWeight == kFALSE ){ // these are debugging branches!
bcb6ffdb 928/*37*/ fTree->Branch("fTreeVariableIndexStatus",&fTreeVariableIndexStatus,"fTreeVariableIndexStatus/I");
929/*38*/ fTree->Branch("fTreeVariableIndexStatusMother",&fTreeVariableIndexStatusMother,"fTreeVariableIndexStatusMother/I");
c92e2e56 930 }
bcb6ffdb 931
0eebce93 932/*39*/ fTree->Branch("fTreeVariableRunNumber",&fTreeVariableRunNumber,"fTreeVariableRunNumber/I");
933/*40*/ fTree->Branch("fTreeVariableEventNumber",&fTreeVariableEventNumber,"fTreeVariableEventNumber/l");
934
c92e2e56 935 if ( fkLightWeight == kFALSE ){ // these are debugging branches!
a18e0a39 936/*34*/ fTree->Branch("fTreeVariableVertexZ",&fTreeVariableVertexZ,"fTreeVariableVertexZ/F");
c92e2e56 937 }
938
939 if ( fkLightWeight == kFALSE ){ // these are debugging branches!
11960ef4 940//-----------FOR CTAU DEBUGGING: Full Phase Space + Decay Position Info
941 fTree->Branch("fTreeVariableV0x",&fTreeVariableV0x,"fTreeVariableV0x/F");
942 fTree->Branch("fTreeVariableV0y",&fTreeVariableV0y,"fTreeVariableV0y/F");
943 fTree->Branch("fTreeVariableV0z",&fTreeVariableV0z,"fTreeVariableV0z/F");
944
945 fTree->Branch("fTreeVariableV0Px",&fTreeVariableV0Px,"fTreeVariableV0Px/F");
946 fTree->Branch("fTreeVariableV0Py",&fTreeVariableV0Py,"fTreeVariableV0Py/F");
947 fTree->Branch("fTreeVariableV0Pz",&fTreeVariableV0Pz,"fTreeVariableV0Pz/F");
948
949//-----------FOR CTAU DEBUGGING: Full Phase Space + Decay Position Info, perfect info from MC
950 fTree->Branch("fTreeVariableMCV0x",&fTreeVariableMCV0x,"fTreeVariableMCV0x/F");
951 fTree->Branch("fTreeVariableMCV0y",&fTreeVariableMCV0y,"fTreeVariableMCV0y/F");
952 fTree->Branch("fTreeVariableMCV0z",&fTreeVariableMCV0z,"fTreeVariableMCV0z/F");
953
954 fTree->Branch("fTreeVariableMCV0Px",&fTreeVariableMCV0Px,"fTreeVariableMCV0Px/F");
955 fTree->Branch("fTreeVariableMCV0Py",&fTreeVariableMCV0Py,"fTreeVariableMCV0Py/F");
956 fTree->Branch("fTreeVariableMCV0Pz",&fTreeVariableMCV0Pz,"fTreeVariableMCV0Pz/F");
957
653265df 958//-----------FOR CTAU DEBUGGING: Primary vertex info
959 fTree->Branch("fTreeVariablePVx",&fTreeVariablePVx,"fTreeVariablePVx/F");
960 fTree->Branch("fTreeVariablePVy",&fTreeVariablePVy,"fTreeVariablePVy/F");
961 fTree->Branch("fTreeVariablePVz",&fTreeVariablePVz,"fTreeVariablePVz/F");
962
963 fTree->Branch("fTreeVariableMCPVx",&fTreeVariableMCPVx,"fTreeVariableMCPVx/F");
964 fTree->Branch("fTreeVariableMCPVy",&fTreeVariableMCPVy,"fTreeVariableMCPVy/F");
965 fTree->Branch("fTreeVariableMCPVz",&fTreeVariableMCPVz,"fTreeVariableMCPVz/F");
c92e2e56 966 }
653265df 967
f068724a 968 fTree->Branch("fTreeVariableIsNonInjected",&fTreeVariableIsNonInjected,"fTreeVariableIsNonInjected/O"); //O for bOOlean...
969
c92e2e56 970 if ( fkLightWeight == kFALSE ){ // these are debugging branches!
a5ff2395 971 fTree->Branch("fTreeVariableNegTrackStatus",&fTreeVariableNegTrackStatus,"fTreeVariableNegTrackStatus/l");
972 fTree->Branch("fTreeVariablePosTrackStatus",&fTreeVariablePosTrackStatus,"fTreeVariablePosTrackStatus/l");
973 fTree->Branch("fTreeVariableNegPhysicalStatus",&fTreeVariableNegPhysicalStatus,"fTreeVariableNegPhysicalStatus/I");
974 fTree->Branch("fTreeVariablePosPhysicalStatus",&fTreeVariablePosPhysicalStatus,"fTreeVariablePosPhysicalStatus/I");
c92e2e56 975 }
060d8ca6 976 if( fkSpecialExecution == kTRUE ){
977 fTree->Branch("fTreeVariablePosPx",&fTreeVariablePosPx,"fTreeVariablePosPx/F");
978 fTree->Branch("fTreeVariablePosPy",&fTreeVariablePosPy,"fTreeVariablePosPy/F");
979 fTree->Branch("fTreeVariablePosPz",&fTreeVariablePosPz,"fTreeVariablePosPz/F");
980 fTree->Branch("fTreeVariableNegPx",&fTreeVariableNegPx,"fTreeVariableNegPx/F");
981 fTree->Branch("fTreeVariableNegPy",&fTreeVariableNegPy,"fTreeVariableNegPy/F");
982 fTree->Branch("fTreeVariableNegPz",&fTreeVariableNegPz,"fTreeVariableNegPz/F");
983 }
f068724a 984
bcb6ffdb 985//------------------------------------------------
986// Particle Identification Setup
987//------------------------------------------------
14ba3f35 988
989 AliAnalysisManager *man=AliAnalysisManager::GetAnalysisManager();
990 AliInputEventHandler* inputHandler = (AliInputEventHandler*) (man->GetInputEventHandler());
991 fPIDResponse = inputHandler->GetPIDResponse();
992
993 // Multiplicity
994
995 if(! fESDtrackCuts ){
996 fESDtrackCuts = new AliESDtrackCuts();
997 }
998 if(! fUtils ){
999 fUtils = new AliAnalysisUtils();
1000 }
76029adc 1001
bcb6ffdb 1002//------------------------------------------------
1003// V0 Multiplicity Histograms
1004//------------------------------------------------
1005
eff0b6fc 1006 // Create histograms
1007 OpenFile(1);
1008 fListHistV0 = new TList();
1009 fListHistV0->SetOwner(); // See http://root.cern.ch/root/html/TCollection.html#TCollection:SetOwner
1010
1011
bcb6ffdb 1012 if(! fHistV0MultiplicityBeforeTrigSel) {
1013 fHistV0MultiplicityBeforeTrigSel = new TH1F("fHistV0MultiplicityBeforeTrigSel",
1014 "V0s per event (before Trig. Sel.);Nbr of V0s/Evt;Events",
1015 25, 0, 25);
1016 fListHistV0->Add(fHistV0MultiplicityBeforeTrigSel);
1017 }
1018
1019 if(! fHistV0MultiplicityForTrigEvt) {
1020 fHistV0MultiplicityForTrigEvt = new TH1F("fHistV0MultiplicityForTrigEvt",
1021 "V0s per event (for triggered evt);Nbr of V0s/Evt;Events",
1022 25, 0, 25);
1023 fListHistV0->Add(fHistV0MultiplicityForTrigEvt);
1024 }
1025
1026 if(! fHistV0MultiplicityForSelEvt) {
1027 fHistV0MultiplicityForSelEvt = new TH1F("fHistV0MultiplicityForSelEvt",
1028 "V0s per event;Nbr of V0s/Evt;Events",
1029 25, 0, 25);
1030 fListHistV0->Add(fHistV0MultiplicityForSelEvt);
1031 }
1032
1033 if(! fHistV0MultiplicityForSelEvtNoTPCOnly) {
1034 fHistV0MultiplicityForSelEvtNoTPCOnly = new TH1F("fHistV0MultiplicityForSelEvtNoTPCOnly",
1035 "V0s per event;Nbr of V0s/Evt;Events",
1036 25, 0, 25);
1037 fListHistV0->Add(fHistV0MultiplicityForSelEvtNoTPCOnly);
1038 }
1039 if(! fHistV0MultiplicityForSelEvtNoTPCOnlyNoPileup) {
1040 fHistV0MultiplicityForSelEvtNoTPCOnlyNoPileup = new TH1F("fHistV0MultiplicityForSelEvtNoTPCOnlyNoPileup",
1041 "V0s per event;Nbr of V0s/Evt;Events",
1042 25, 0, 25);
1043 fListHistV0->Add(fHistV0MultiplicityForSelEvtNoTPCOnlyNoPileup);
1044 }
1045
1046//------------------------------------------------
1047// Track Multiplicity Histograms
1048//------------------------------------------------
1049
1050 if(! fHistMultiplicityBeforeTrigSel) {
1051 fHistMultiplicityBeforeTrigSel = new TH1F("fHistMultiplicityBeforeTrigSel",
1052 "Tracks per event;Nbr of Tracks;Events",
1053 200, 0, 200);
1054 fListHistV0->Add(fHistMultiplicityBeforeTrigSel);
1055 }
1056 if(! fHistMultiplicityForTrigEvt) {
1057 fHistMultiplicityForTrigEvt = new TH1F("fHistMultiplicityForTrigEvt",
1058 "Tracks per event;Nbr of Tracks;Events",
1059 200, 0, 200);
1060 fListHistV0->Add(fHistMultiplicityForTrigEvt);
1061 }
1062 if(! fHistMultiplicity) {
1063 fHistMultiplicity = new TH1F("fHistMultiplicity",
1064 "Tracks per event;Nbr of Tracks;Events",
1065 200, 0, 200);
1066 fListHistV0->Add(fHistMultiplicity);
1067 }
1068 if(! fHistMultiplicityNoTPCOnly) {
1069 fHistMultiplicityNoTPCOnly = new TH1F("fHistMultiplicityNoTPCOnly",
1070 "Tracks per event;Nbr of Tracks;Events",
1071 200, 0, 200);
1072 fListHistV0->Add(fHistMultiplicityNoTPCOnly);
1073 }
1074 if(! fHistMultiplicityNoTPCOnlyNoPileup) {
1075 fHistMultiplicityNoTPCOnlyNoPileup = new TH1F("fHistMultiplicityNoTPCOnlyNoPileup",
1076 "Tracks per event;Nbr of Tracks;Events",
1077 200, 0, 200);
1078 fListHistV0->Add(fHistMultiplicityNoTPCOnlyNoPileup);
1079 }
5d43de53 1080
1081 //V0A Centrality (if PbPb / pPb)
1082 if(! fHistMultiplicityV0ABeforeTrigSel) {
1083 fHistMultiplicityV0ABeforeTrigSel = new TH1F("fHistMultiplicityV0ABeforeTrigSel",
1084 "Centrality Distribution: V0A;V0A Centrality;Events",
1085 200, 0, 200);
1086 fListHistV0->Add(fHistMultiplicityV0ABeforeTrigSel);
1087 }
1088 if(! fHistMultiplicityV0AForTrigEvt) {
1089 fHistMultiplicityV0AForTrigEvt = new TH1F("fHistMultiplicityV0AForTrigEvt",
1090 "Centrality Distribution: V0A;V0A Centrality;Events",
1091 200, 0, 200);
1092 fListHistV0->Add(fHistMultiplicityV0AForTrigEvt);
1093 }
1094 if(! fHistMultiplicityV0A) {
1095 fHistMultiplicityV0A = new TH1F("fHistMultiplicityV0A",
1096 "Centrality Distribution: V0A;V0A Centrality;Events",
1097 200, 0, 200);
1098 fListHistV0->Add(fHistMultiplicityV0A);
1099 }
1100 if(! fHistMultiplicityV0ANoTPCOnly) {
1101 fHistMultiplicityV0ANoTPCOnly = new TH1F("fHistMultiplicityV0ANoTPCOnly",
1102 "Centrality Distribution: V0A;V0A Centrality;Events",
1103 200, 0, 200);
1104 fListHistV0->Add(fHistMultiplicityV0ANoTPCOnly);
1105 }
1106 if(! fHistMultiplicityV0ANoTPCOnlyNoPileup) {
1107 fHistMultiplicityV0ANoTPCOnlyNoPileup = new TH1F("fHistMultiplicityV0ANoTPCOnlyNoPileup",
1108 "Centrality Distribution: V0A;V0A Centrality;Events",
1109 200, 0, 200);
1110 fListHistV0->Add(fHistMultiplicityV0ANoTPCOnlyNoPileup);
1111 }
1112
1113 //ZNA Centrality (if PbPb / pPb)
1114 if(! fHistMultiplicityZNABeforeTrigSel) {
1115 fHistMultiplicityZNABeforeTrigSel = new TH1F("fHistMultiplicityZNABeforeTrigSel",
1116 "Centrality Distribution: ZNA;ZNA Centrality;Events",
1117 200, 0, 200);
1118 fListHistV0->Add(fHistMultiplicityZNABeforeTrigSel);
1119 }
1120 if(! fHistMultiplicityZNAForTrigEvt) {
1121 fHistMultiplicityZNAForTrigEvt = new TH1F("fHistMultiplicityZNAForTrigEvt",
1122 "Centrality Distribution: ZNA;ZNA Centrality;Events",
1123 200, 0, 200);
1124 fListHistV0->Add(fHistMultiplicityZNAForTrigEvt);
1125 }
1126 if(! fHistMultiplicityZNA) {
1127 fHistMultiplicityZNA = new TH1F("fHistMultiplicityZNA",
1128 "Centrality Distribution: ZNA;ZNA Centrality;Events",
1129 200, 0, 200);
1130 fListHistV0->Add(fHistMultiplicityZNA);
1131 }
1132 if(! fHistMultiplicityZNANoTPCOnly) {
1133 fHistMultiplicityZNANoTPCOnly = new TH1F("fHistMultiplicityZNANoTPCOnly",
1134 "Centrality Distribution: ZNA;ZNA Centrality;Events",
1135 200, 0, 200);
1136 fListHistV0->Add(fHistMultiplicityZNANoTPCOnly);
1137 }
1138 if(! fHistMultiplicityZNANoTPCOnlyNoPileup) {
1139 fHistMultiplicityZNANoTPCOnlyNoPileup = new TH1F("fHistMultiplicityZNANoTPCOnlyNoPileup",
1140 "Centrality Distribution: ZNA;ZNA Centrality;Events",
1141 200, 0, 200);
1142 fListHistV0->Add(fHistMultiplicityZNANoTPCOnlyNoPileup);
1143 }
1144
1145 //TRK Centrality (if PbPb / pPb)
1146 if(! fHistMultiplicityTRKBeforeTrigSel) {
1147 fHistMultiplicityTRKBeforeTrigSel = new TH1F("fHistMultiplicityTRKBeforeTrigSel",
1148 "Centrality Distribution: TRK;TRK Centrality;Events",
1149 200, 0, 200);
1150 fListHistV0->Add(fHistMultiplicityTRKBeforeTrigSel);
1151 }
1152 if(! fHistMultiplicityTRKForTrigEvt) {
1153 fHistMultiplicityTRKForTrigEvt = new TH1F("fHistMultiplicityTRKForTrigEvt",
1154 "Centrality Distribution: TRK;TRK Centrality;Events",
1155 200, 0, 200);
1156 fListHistV0->Add(fHistMultiplicityTRKForTrigEvt);
1157 }
1158 if(! fHistMultiplicityTRK) {
1159 fHistMultiplicityTRK = new TH1F("fHistMultiplicityTRK",
1160 "Centrality Distribution: TRK;TRK Centrality;Events",
1161 200, 0, 200);
1162 fListHistV0->Add(fHistMultiplicityTRK);
1163 }
1164 if(! fHistMultiplicityTRKNoTPCOnly) {
1165 fHistMultiplicityTRKNoTPCOnly = new TH1F("fHistMultiplicityTRKNoTPCOnly",
1166 "Centrality Distribution: TRK;TRK Centrality;Events",
1167 200, 0, 200);
1168 fListHistV0->Add(fHistMultiplicityTRKNoTPCOnly);
1169 }
1170 if(! fHistMultiplicityTRKNoTPCOnlyNoPileup) {
1171 fHistMultiplicityTRKNoTPCOnlyNoPileup = new TH1F("fHistMultiplicityTRKNoTPCOnlyNoPileup",
1172 "Centrality Distribution: TRK;TRK Centrality;Events",
1173 200, 0, 200);
1174 fListHistV0->Add(fHistMultiplicityTRKNoTPCOnlyNoPileup);
1175 }
1176
1177 //SPD Centrality (if PbPb / pPb)
1178 if(! fHistMultiplicitySPDBeforeTrigSel) {
1179 fHistMultiplicitySPDBeforeTrigSel = new TH1F("fHistMultiplicitySPDBeforeTrigSel",
1180 "Centrality Distribution: SPD;SPD Centrality;Events",
1181 200, 0, 200);
1182 fListHistV0->Add(fHistMultiplicitySPDBeforeTrigSel);
1183 }
1184 if(! fHistMultiplicitySPDForTrigEvt) {
1185 fHistMultiplicitySPDForTrigEvt = new TH1F("fHistMultiplicitySPDForTrigEvt",
1186 "Centrality Distribution: SPD;SPD Centrality;Events",
1187 200, 0, 200);
1188 fListHistV0->Add(fHistMultiplicitySPDForTrigEvt);
1189 }
1190 if(! fHistMultiplicitySPD) {
1191 fHistMultiplicitySPD = new TH1F("fHistMultiplicitySPD",
1192 "Centrality Distribution: SPD;SPD Centrality;Events",
1193 200, 0, 200);
1194 fListHistV0->Add(fHistMultiplicitySPD);
1195 }
1196 if(! fHistMultiplicitySPDNoTPCOnly) {
1197 fHistMultiplicitySPDNoTPCOnly = new TH1F("fHistMultiplicitySPDNoTPCOnly",
1198 "Centrality Distribution: SPD;SPD Centrality;Events",
1199 200, 0, 200);
1200 fListHistV0->Add(fHistMultiplicitySPDNoTPCOnly);
1201 }
1202 if(! fHistMultiplicitySPDNoTPCOnlyNoPileup) {
1203 fHistMultiplicitySPDNoTPCOnlyNoPileup = new TH1F("fHistMultiplicitySPDNoTPCOnlyNoPileup",
1204 "Centrality Distribution: SPD;SPD Centrality;Events",
1205 200, 0, 200);
1206 fListHistV0->Add(fHistMultiplicitySPDNoTPCOnlyNoPileup);
1207 }
1208
1209
1210
bcb6ffdb 1211
1d94e33b 1212 //Raw Data for J/Psi paper Technique
1213 //TH2F *f2dHistMultiplicityVsTrueBeforeTrigSel; //! multiplicity distribution
1214 //TH2F *f2dHistMultiplicityVsTrueForTrigEvt; //! multiplicity distribution
1215 //TH2F *f2dHistMultiplicityVsTrue; //! multiplicity distribution
1216 //TH2F *f2dHistMultiplicityVsTrueNoTPCOnly; //! multiplicity distribution
1217 //TH2F *f2dHistMultiplicityVsTrueNoTPCOnlyNoPileup; //! multiplicity distribution
1218
1219 if(! f2dHistMultiplicityVsTrueBeforeTrigSel) {
1220 f2dHistMultiplicityVsTrueBeforeTrigSel = new TH2F("f2dHistMultiplicityVsTrueBeforeTrigSel",
1221 "Tracks per event", 200, 0, 200, 200, 0, 200);
1222 fListHistV0->Add(f2dHistMultiplicityVsTrueBeforeTrigSel);
1223 }
1224 if(! f2dHistMultiplicityVsTrueForTrigEvt) {
1225 f2dHistMultiplicityVsTrueForTrigEvt = new TH2F("f2dHistMultiplicityVsTrueForTrigEvt",
1226 "Tracks per event", 200, 0, 200, 200, 0, 200);
1227 fListHistV0->Add(f2dHistMultiplicityVsTrueForTrigEvt);
1228 }
1229 if(! f2dHistMultiplicityVsTrue) {
1230 f2dHistMultiplicityVsTrue = new TH2F("f2dHistMultiplicityVsTrue",
1231 "Tracks per event", 200, 0, 200, 200, 0, 200);
1232 fListHistV0->Add(f2dHistMultiplicityVsTrue);
1233 }
1234 if(! f2dHistMultiplicityVsTrueNoTPCOnly) {
1235 f2dHistMultiplicityVsTrueNoTPCOnly = new TH2F("f2dHistMultiplicityVsTrueNoTPCOnly",
1236 "Tracks per event", 200, 0, 200, 200, 0, 200);
1237 fListHistV0->Add(f2dHistMultiplicityVsTrueNoTPCOnly);
1238 }
1239 if(! f2dHistMultiplicityVsTrueNoTPCOnlyNoPileup) {
1240 f2dHistMultiplicityVsTrueNoTPCOnlyNoPileup = new TH2F("f2dHistMultiplicityVsTrueNoTPCOnlyNoPileup",
1241 "Tracks per event", 200, 0, 200, 200, 0, 200);
1242 fListHistV0->Add(f2dHistMultiplicityVsTrueNoTPCOnlyNoPileup);
1243 }
1244
1245
1246 //Raw Data for Vertex Z position estimator change
1247 //TH2F *f2dHistMultiplicityVsVertexZBeforeTrigSel; //! multiplicity distribution
1248 //TH2F *f2dHistMultiplicityVsVertexZForTrigEvt; //! multiplicity distribution
1249 //TH2F *f2dHistMultiplicityVsVertexZ; //! multiplicity distribution
1250 //TH2F *f2dHistMultiplicityVsVertexZNoTPCOnly; //! multiplicity distribution
1251 //TH2F *f2dHistMultiplicityVsVertexZNoTPCOnlyNoPileup; //! multiplicity distribution
1252
1253 if(! f2dHistMultiplicityVsVertexZBeforeTrigSel) {
1254 f2dHistMultiplicityVsVertexZBeforeTrigSel = new TH2F("f2dHistMultiplicityVsVertexZBeforeTrigSel",
1255 "Tracks per event", 200, 0, 200,400, -20, 20);
1256 fListHistV0->Add(f2dHistMultiplicityVsVertexZBeforeTrigSel);
1257 }
1258 if(! f2dHistMultiplicityVsVertexZForTrigEvt) {
1259 f2dHistMultiplicityVsVertexZForTrigEvt = new TH2F("f2dHistMultiplicityVsVertexZForTrigEvt",
1260 "Tracks per event", 200, 0, 200, 400, -20, 20);
1261 fListHistV0->Add(f2dHistMultiplicityVsVertexZForTrigEvt);
1262 }
1263 if(! f2dHistMultiplicityVsVertexZ) {
1264 f2dHistMultiplicityVsVertexZ = new TH2F("f2dHistMultiplicityVsVertexZ",
1265 "Tracks per event", 200, 0, 200, 400, -20, 20);
1266 fListHistV0->Add(f2dHistMultiplicityVsVertexZ);
1267 }
1268 if(! f2dHistMultiplicityVsVertexZNoTPCOnly) {
1269 f2dHistMultiplicityVsVertexZNoTPCOnly = new TH2F("f2dHistMultiplicityVsVertexZNoTPCOnly",
1270 "Tracks per event", 200, 0, 200, 400, -20, 20);
1271 fListHistV0->Add(f2dHistMultiplicityVsVertexZNoTPCOnly);
1272 }
1273 if(! f2dHistMultiplicityVsVertexZNoTPCOnlyNoPileup) {
1274 f2dHistMultiplicityVsVertexZNoTPCOnlyNoPileup = new TH2F("f2dHistMultiplicityVsVertexZNoTPCOnlyNoPileup",
1275 "Tracks per event", 200, 0, 200, 400, -20, 20);
1276 fListHistV0->Add(f2dHistMultiplicityVsVertexZNoTPCOnlyNoPileup);
1277 }
1278
1279//Generated PVz test
1280
1281// TH1F *fHistGenVertexZBeforeTrigSel; //! multiplicity distribution
1282// TH1F *fHistGenVertexZForTrigEvt; //! multiplicity distribution
1283// TH1F *fHistGenVertexZ; //! multiplicity distribution
1284// TH1F *fHistGenVertexZNoTPCOnly; //! multiplicity distribution
1285// TH1F *fHistGenVertexZNoTPCOnlyNoPileup; //! multiplicity distribution
1286
1287 if(! fHistGenVertexZBeforeTrigSel) {
1288 fHistGenVertexZBeforeTrigSel = new TH1F("fHistGenVertexZBeforeTrigSel",
1289 "PV z position;Nbr of Evts;z",
1290 400, -20, 20);
1291 fListHistV0->Add(fHistGenVertexZBeforeTrigSel);
1292 }
1293 if(! fHistGenVertexZForTrigEvt) {
1294 fHistGenVertexZForTrigEvt = new TH1F("fHistGenVertexZForTrigEvt",
1295 "PV z position;Nbr of Evts;z",
1296 400, -20, 20);
1297 fListHistV0->Add(fHistGenVertexZForTrigEvt);
1298 }
1299 if(! fHistGenVertexZ) {
1300 fHistGenVertexZ = new TH1F("fHistGenVertexZ",
1301 "PV z position;Nbr of Evts;z",
1302 400, -20, 20);
1303 fListHistV0->Add(fHistGenVertexZ);
1304 }
1305 if(! fHistGenVertexZNoTPCOnly) {
1306 fHistGenVertexZNoTPCOnly = new TH1F("fHistGenVertexZNoTPCOnly",
1307 "PV z position;Nbr of Evts;z",
1308 400, -20, 20);
1309 fListHistV0->Add(fHistGenVertexZNoTPCOnly);
1310 }
1311 if(! fHistGenVertexZNoTPCOnlyNoPileup) {
1312 fHistGenVertexZNoTPCOnlyNoPileup = new TH1F("fHistGenVertexZNoTPCOnlyNoPileup",
1313 "PV z position;Nbr of Evts;z",
1314 400, -20, 20);
1315 fListHistV0->Add(fHistGenVertexZNoTPCOnlyNoPileup);
1316 }
1317
1318
bcb6ffdb 1319//------------------------------------------------
1320// Generated Particle Histograms
1321//------------------------------------------------
1322
1323 Int_t lCustomNBins = 200;
1324 Double_t lCustomPtUpperLimit = 20;
1325 Int_t lCustomNBinsMultiplicity = 100;
1326
1327//----------------------------------
1328// Raw Generated (Pre-physics-selection)
1329//----------------------------------
1330
68e484c4 1331//--- 3D Histo (Pt, Y, Multiplicity), V0M Version (default)
bcb6ffdb 1332
1333 if(! f3dHistPrimRawPtVsYVsMultLambda) {
1334 f3dHistPrimRawPtVsYVsMultLambda = new TH3F( "f3dHistPrimRawPtVsYVsMultLambda", "Pt_{lambda} Vs Y_{#Lambda} Vs Multiplicity; Pt_{lambda} (GeV/c); Y_{#Lambda} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1335 fListHistV0->Add(f3dHistPrimRawPtVsYVsMultLambda);
1336 }
1337 if(! f3dHistPrimRawPtVsYVsMultAntiLambda) {
1338 f3dHistPrimRawPtVsYVsMultAntiLambda = new TH3F( "f3dHistPrimRawPtVsYVsMultAntiLambda", "Pt_{antilambda} Vs Y_{#Lambda} Vs Multiplicity; Pt_{antilambda} (GeV/c); Y_{#Lambda} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1339 fListHistV0->Add(f3dHistPrimRawPtVsYVsMultAntiLambda);
1340 }
1341 if(! f3dHistPrimRawPtVsYVsMultK0Short) {
1342 f3dHistPrimRawPtVsYVsMultK0Short = new TH3F( "f3dHistPrimRawPtVsYVsMultK0Short", "Pt_{K0S} Vs Y_{K0S} Vs Multiplicity; Pt_{K0S} (GeV/c); Y_{K0S} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1343 fListHistV0->Add(f3dHistPrimRawPtVsYVsMultK0Short);
1344 }
1345
388b34d3 1346 if(! f3dHistPrimRawPtVsYCMSVsMultLambda) {
1347 f3dHistPrimRawPtVsYCMSVsMultLambda = new TH3F( "f3dHistPrimRawPtVsYCMSVsMultLambda", "Pt_{lambda} Vs Y_{#Lambda} Vs Multiplicity; Pt_{lambda} (GeV/c); Y_{#Lambda} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1348 fListHistV0->Add(f3dHistPrimRawPtVsYCMSVsMultLambda);
1349 }
1350 if(! f3dHistPrimRawPtVsYCMSVsMultAntiLambda) {
1351 f3dHistPrimRawPtVsYCMSVsMultAntiLambda = new TH3F( "f3dHistPrimRawPtVsYCMSVsMultAntiLambda", "Pt_{antilambda} Vs Y_{#Lambda} Vs Multiplicity; Pt_{antilambda} (GeV/c); Y_{#Lambda} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1352 fListHistV0->Add(f3dHistPrimRawPtVsYCMSVsMultAntiLambda);
1353 }
1354 if(! f3dHistPrimRawPtVsYCMSVsMultK0Short) {
1355 f3dHistPrimRawPtVsYCMSVsMultK0Short = new TH3F( "f3dHistPrimRawPtVsYCMSVsMultK0Short", "Pt_{K0S} Vs Y_{K0S} Vs Multiplicity; Pt_{K0S} (GeV/c); Y_{K0S} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1356 fListHistV0->Add(f3dHistPrimRawPtVsYCMSVsMultK0Short);
1357 }
68e484c4 1358
1359//--- 3D Histo (Pt, Y, Multiplicity), V0A Version
1360
1361 if(! f3dHistPrimRawPtVsYVsMultV0ALambda) {
1362 f3dHistPrimRawPtVsYVsMultV0ALambda = new TH3F( "f3dHistPrimRawPtVsYVsMultV0ALambda", "Pt_{lambda} Vs Y_{#Lambda} Vs Multiplicity; Pt_{lambda} (GeV/c); Y_{#Lambda} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1363 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimRawPtVsYVsMultV0ALambda);
1364 }
1365 if(! f3dHistPrimRawPtVsYVsMultV0AAntiLambda) {
1366 f3dHistPrimRawPtVsYVsMultV0AAntiLambda = new TH3F( "f3dHistPrimRawPtVsYVsMultV0AAntiLambda", "Pt_{antilambda} Vs Y_{#Lambda} Vs Multiplicity; Pt_{antilambda} (GeV/c); Y_{#Lambda} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1367 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimRawPtVsYVsMultV0AAntiLambda);
1368 }
1369 if(! f3dHistPrimRawPtVsYVsMultV0AK0Short) {
1370 f3dHistPrimRawPtVsYVsMultV0AK0Short = new TH3F( "f3dHistPrimRawPtVsYVsMultV0AK0Short", "Pt_{K0S} Vs Y_{K0S} Vs Multiplicity; Pt_{K0S} (GeV/c); Y_{K0S} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1371 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimRawPtVsYVsMultV0AK0Short);
1372 }
1373
1374 if(! f3dHistPrimRawPtVsYCMSVsMultV0ALambda) {
1375 f3dHistPrimRawPtVsYCMSVsMultV0ALambda = new TH3F( "f3dHistPrimRawPtVsYCMSVsMultV0ALambda", "Pt_{lambda} Vs Y_{#Lambda} Vs Multiplicity; Pt_{lambda} (GeV/c); Y_{#Lambda} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1376 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimRawPtVsYCMSVsMultV0ALambda);
1377 }
1378 if(! f3dHistPrimRawPtVsYCMSVsMultV0AAntiLambda) {
1379 f3dHistPrimRawPtVsYCMSVsMultV0AAntiLambda = new TH3F( "f3dHistPrimRawPtVsYCMSVsMultV0AAntiLambda", "Pt_{antilambda} Vs Y_{#Lambda} Vs Multiplicity; Pt_{antilambda} (GeV/c); Y_{#Lambda} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1380 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimRawPtVsYCMSVsMultV0AAntiLambda);
1381 }
1382 if(! f3dHistPrimRawPtVsYCMSVsMultV0AK0Short) {
1383 f3dHistPrimRawPtVsYCMSVsMultV0AK0Short = new TH3F( "f3dHistPrimRawPtVsYCMSVsMultV0AK0Short", "Pt_{K0S} Vs Y_{K0S} Vs Multiplicity; Pt_{K0S} (GeV/c); Y_{K0S} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1384 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimRawPtVsYCMSVsMultV0AK0Short);
1385 }
3db0901a 1386
1387 //Cross-check at Raw Level
1388 if(! f3dHistPrimRawPtVsYCMSVsMultV0AKPlus) {
1389 f3dHistPrimRawPtVsYCMSVsMultV0AKPlus = new TH3F( "f3dHistPrimRawPtVsYCMSVsMultV0AKPlus", "Pt_{K+} Vs Y_{K+} Vs Multiplicity; Pt_{K+} (GeV/c); Y_{K+} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1390 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimRawPtVsYCMSVsMultV0AKPlus);
1391 }
1392 if(! f3dHistPrimRawPtVsYCMSVsMultV0AKMinus) {
1393 f3dHistPrimRawPtVsYCMSVsMultV0AKMinus = new TH3F( "f3dHistPrimRawPtVsYCMSVsMultV0AKMinus", "Pt_{K-} Vs Y_{K-} Vs Multiplicity; Pt_{K-} (GeV/c); Y_{K-} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1394 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimRawPtVsYCMSVsMultV0AKMinus);
1395 }
68e484c4 1396
1397 //--- 3D Histo (Pt, Y, Multiplicity), ZNA Version
1398
1399 if(! f3dHistPrimRawPtVsYVsMultZNALambda) {
1400 f3dHistPrimRawPtVsYVsMultZNALambda = new TH3F( "f3dHistPrimRawPtVsYVsMultZNALambda", "Pt_{lambda} Vs Y_{#Lambda} Vs Multiplicity; Pt_{lambda} (GeV/c); Y_{#Lambda} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1401 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimRawPtVsYVsMultZNALambda);
1402 }
1403 if(! f3dHistPrimRawPtVsYVsMultZNAAntiLambda) {
1404 f3dHistPrimRawPtVsYVsMultZNAAntiLambda = new TH3F( "f3dHistPrimRawPtVsYVsMultZNAAntiLambda", "Pt_{antilambda} Vs Y_{#Lambda} Vs Multiplicity; Pt_{antilambda} (GeV/c); Y_{#Lambda} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1405 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimRawPtVsYVsMultZNAAntiLambda);
1406 }
1407 if(! f3dHistPrimRawPtVsYVsMultZNAK0Short) {
1408 f3dHistPrimRawPtVsYVsMultZNAK0Short = new TH3F( "f3dHistPrimRawPtVsYVsMultZNAK0Short", "Pt_{K0S} Vs Y_{K0S} Vs Multiplicity; Pt_{K0S} (GeV/c); Y_{K0S} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1409 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimRawPtVsYVsMultZNAK0Short);
1410 }
1411
1412 if(! f3dHistPrimRawPtVsYCMSVsMultZNALambda) {
1413 f3dHistPrimRawPtVsYCMSVsMultZNALambda = new TH3F( "f3dHistPrimRawPtVsYCMSVsMultZNALambda", "Pt_{lambda} Vs Y_{#Lambda} Vs Multiplicity; Pt_{lambda} (GeV/c); Y_{#Lambda} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1414 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimRawPtVsYCMSVsMultZNALambda);
1415 }
1416 if(! f3dHistPrimRawPtVsYCMSVsMultZNAAntiLambda) {
1417 f3dHistPrimRawPtVsYCMSVsMultZNAAntiLambda = new TH3F( "f3dHistPrimRawPtVsYCMSVsMultZNAAntiLambda", "Pt_{antilambda} Vs Y_{#Lambda} Vs Multiplicity; Pt_{antilambda} (GeV/c); Y_{#Lambda} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1418 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimRawPtVsYCMSVsMultZNAAntiLambda);
1419 }
1420 if(! f3dHistPrimRawPtVsYCMSVsMultZNAK0Short) {
1421 f3dHistPrimRawPtVsYCMSVsMultZNAK0Short = new TH3F( "f3dHistPrimRawPtVsYCMSVsMultZNAK0Short", "Pt_{K0S} Vs Y_{K0S} Vs Multiplicity; Pt_{K0S} (GeV/c); Y_{K0S} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1422 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimRawPtVsYCMSVsMultZNAK0Short);
1423 }
1424
1425 //--- 3D Histo (Pt, Y, Multiplicity), TRK Version
1426
1427 if(! f3dHistPrimRawPtVsYVsMultTRKLambda) {
1428 f3dHistPrimRawPtVsYVsMultTRKLambda = new TH3F( "f3dHistPrimRawPtVsYVsMultTRKLambda", "Pt_{lambda} Vs Y_{#Lambda} Vs Multiplicity; Pt_{lambda} (GeV/c); Y_{#Lambda} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1429 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimRawPtVsYVsMultTRKLambda);
1430 }
1431 if(! f3dHistPrimRawPtVsYVsMultTRKAntiLambda) {
1432 f3dHistPrimRawPtVsYVsMultTRKAntiLambda = new TH3F( "f3dHistPrimRawPtVsYVsMultTRKAntiLambda", "Pt_{antilambda} Vs Y_{#Lambda} Vs Multiplicity; Pt_{antilambda} (GeV/c); Y_{#Lambda} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1433 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimRawPtVsYVsMultTRKAntiLambda);
1434 }
1435 if(! f3dHistPrimRawPtVsYVsMultTRKK0Short) {
1436 f3dHistPrimRawPtVsYVsMultTRKK0Short = new TH3F( "f3dHistPrimRawPtVsYVsMultTRKK0Short", "Pt_{K0S} Vs Y_{K0S} Vs Multiplicity; Pt_{K0S} (GeV/c); Y_{K0S} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1437 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimRawPtVsYVsMultTRKK0Short);
1438 }
1439
1440 if(! f3dHistPrimRawPtVsYCMSVsMultTRKLambda) {
1441 f3dHistPrimRawPtVsYCMSVsMultTRKLambda = new TH3F( "f3dHistPrimRawPtVsYCMSVsMultTRKLambda", "Pt_{lambda} Vs Y_{#Lambda} Vs Multiplicity; Pt_{lambda} (GeV/c); Y_{#Lambda} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1442 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimRawPtVsYCMSVsMultTRKLambda);
1443 }
1444 if(! f3dHistPrimRawPtVsYCMSVsMultTRKAntiLambda) {
1445 f3dHistPrimRawPtVsYCMSVsMultTRKAntiLambda = new TH3F( "f3dHistPrimRawPtVsYCMSVsMultTRKAntiLambda", "Pt_{antilambda} Vs Y_{#Lambda} Vs Multiplicity; Pt_{antilambda} (GeV/c); Y_{#Lambda} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1446 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimRawPtVsYCMSVsMultTRKAntiLambda);
1447 }
1448 if(! f3dHistPrimRawPtVsYCMSVsMultTRKK0Short) {
1449 f3dHistPrimRawPtVsYCMSVsMultTRKK0Short = new TH3F( "f3dHistPrimRawPtVsYCMSVsMultTRKK0Short", "Pt_{K0S} Vs Y_{K0S} Vs Multiplicity; Pt_{K0S} (GeV/c); Y_{K0S} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1450 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimRawPtVsYCMSVsMultTRKK0Short);
1451 }
1452
1453 //--- 3D Histo (Pt, Y, Multiplicity), SPD Version
1454
1455 if(! f3dHistPrimRawPtVsYVsMultSPDLambda) {
1456 f3dHistPrimRawPtVsYVsMultSPDLambda = new TH3F( "f3dHistPrimRawPtVsYVsMultSPDLambda", "Pt_{lambda} Vs Y_{#Lambda} Vs Multiplicity; Pt_{lambda} (GeV/c); Y_{#Lambda} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1457 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimRawPtVsYVsMultSPDLambda);
1458 }
1459 if(! f3dHistPrimRawPtVsYVsMultSPDAntiLambda) {
1460 f3dHistPrimRawPtVsYVsMultSPDAntiLambda = new TH3F( "f3dHistPrimRawPtVsYVsMultSPDAntiLambda", "Pt_{antilambda} Vs Y_{#Lambda} Vs Multiplicity; Pt_{antilambda} (GeV/c); Y_{#Lambda} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1461 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimRawPtVsYVsMultSPDAntiLambda);
1462 }
1463 if(! f3dHistPrimRawPtVsYVsMultSPDK0Short) {
1464 f3dHistPrimRawPtVsYVsMultSPDK0Short = new TH3F( "f3dHistPrimRawPtVsYVsMultSPDK0Short", "Pt_{K0S} Vs Y_{K0S} Vs Multiplicity; Pt_{K0S} (GeV/c); Y_{K0S} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1465 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimRawPtVsYVsMultSPDK0Short);
1466 }
1467
1468 if(! f3dHistPrimRawPtVsYCMSVsMultSPDLambda) {
1469 f3dHistPrimRawPtVsYCMSVsMultSPDLambda = new TH3F( "f3dHistPrimRawPtVsYCMSVsMultSPDLambda", "Pt_{lambda} Vs Y_{#Lambda} Vs Multiplicity; Pt_{lambda} (GeV/c); Y_{#Lambda} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1470 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimRawPtVsYCMSVsMultSPDLambda);
1471 }
1472 if(! f3dHistPrimRawPtVsYCMSVsMultSPDAntiLambda) {
1473 f3dHistPrimRawPtVsYCMSVsMultSPDAntiLambda = new TH3F( "f3dHistPrimRawPtVsYCMSVsMultSPDAntiLambda", "Pt_{antilambda} Vs Y_{#Lambda} Vs Multiplicity; Pt_{antilambda} (GeV/c); Y_{#Lambda} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1474 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimRawPtVsYCMSVsMultSPDAntiLambda);
1475 }
1476 if(! f3dHistPrimRawPtVsYCMSVsMultSPDK0Short) {
1477 f3dHistPrimRawPtVsYCMSVsMultSPDK0Short = new TH3F( "f3dHistPrimRawPtVsYCMSVsMultSPDK0Short", "Pt_{K0S} Vs Y_{K0S} Vs Multiplicity; Pt_{K0S} (GeV/c); Y_{K0S} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1478 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimRawPtVsYCMSVsMultSPDK0Short);
1479 }
1480
1481
388b34d3 1482
df661cb7 1483//---> Non-injected particles
1484
1485 if(! f3dHistPrimRawPtVsYVsMultNonInjLambda) {
1486 f3dHistPrimRawPtVsYVsMultNonInjLambda = new TH3F( "f3dHistPrimRawPtVsYVsMultNonInjLambda", "Pt_{lambda} Vs Y_{#Lambda} Vs Multiplicity; Pt_{lambda} (GeV/c); Y_{#Lambda} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1487 fListHistV0->Add(f3dHistPrimRawPtVsYVsMultNonInjLambda);
1488 }
1489 if(! f3dHistPrimRawPtVsYVsMultNonInjAntiLambda) {
1490 f3dHistPrimRawPtVsYVsMultNonInjAntiLambda = new TH3F( "f3dHistPrimRawPtVsYVsMultNonInjAntiLambda", "Pt_{antilambda} Vs Y_{#Lambda} Vs Multiplicity; Pt_{antilambda} (GeV/c); Y_{#Lambda} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1491 fListHistV0->Add(f3dHistPrimRawPtVsYVsMultNonInjAntiLambda);
1492 }
1493 if(! f3dHistPrimRawPtVsYVsMultNonInjK0Short) {
1494 f3dHistPrimRawPtVsYVsMultNonInjK0Short = new TH3F( "f3dHistPrimRawPtVsYVsMultNonInjK0Short", "Pt_{K0S} Vs Y_{K0S} Vs Multiplicity; Pt_{K0S} (GeV/c); Y_{K0S} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1495 fListHistV0->Add(f3dHistPrimRawPtVsYVsMultNonInjK0Short);
1496 }
1497
a18e0a39 1498//--- 3D Histo (Pt, Y, MultiplicityMC)
1499
1500 if(! f3dHistPrimRawPtVsYVsMultMCLambda) {
1501 f3dHistPrimRawPtVsYVsMultMCLambda = new TH3F( "f3dHistPrimRawPtVsYVsMultMCLambda", "Pt_{lambda} Vs Y_{#Lambda} Vs Multiplicity; Pt_{lambda} (GeV/c); Y_{#Lambda} ; MultMC", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1502 fListHistV0->Add(f3dHistPrimRawPtVsYVsMultMCLambda);
1503 }
1504 if(! f3dHistPrimRawPtVsYVsMultMCAntiLambda) {
1505 f3dHistPrimRawPtVsYVsMultMCAntiLambda = new TH3F( "f3dHistPrimRawPtVsYVsMultMCAntiLambda", "Pt_{antilambda} Vs Y_{#Lambda} Vs Multiplicity; Pt_{antilambda} (GeV/c); Y_{#Lambda} ; MultMC", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1506 fListHistV0->Add(f3dHistPrimRawPtVsYVsMultMCAntiLambda);
1507 }
1508 if(! f3dHistPrimRawPtVsYVsMultMCK0Short) {
1509 f3dHistPrimRawPtVsYVsMultMCK0Short = new TH3F( "f3dHistPrimRawPtVsYVsMultMCK0Short", "Pt_{K0S} Vs Y_{K0S} Vs Multiplicity; Pt_{K0S} (GeV/c); Y_{K0S} ; MultMC", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1510 fListHistV0->Add(f3dHistPrimRawPtVsYVsMultMCK0Short);
1511 }
1512
1513//--- 3D Histo (Pt, Y, VertexZ)
1514
1515 if(! f3dHistPrimRawPtVsYVsVertexZLambda) {
1516 f3dHistPrimRawPtVsYVsVertexZLambda = new TH3F( "f3dHistPrimRawPtVsYVsVertexZLambda", "Pt_{lambda} Vs Y_{#Lambda} Vs VertexZiplicity; Pt_{lambda} (GeV/c); Y_{#Lambda} ; VertexZ", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,40,-10,10);
1517 fListHistV0->Add(f3dHistPrimRawPtVsYVsVertexZLambda);
1518 }
1519 if(! f3dHistPrimRawPtVsYVsVertexZAntiLambda) {
1520 f3dHistPrimRawPtVsYVsVertexZAntiLambda = new TH3F( "f3dHistPrimRawPtVsYVsVertexZAntiLambda", "Pt_{antilambda} Vs Y_{#Lambda} Vs VertexZiplicity; Pt_{antilambda} (GeV/c); Y_{#Lambda} ; VertexZ", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,40,-10,10);
1521 fListHistV0->Add(f3dHistPrimRawPtVsYVsVertexZAntiLambda);
1522 }
1523 if(! f3dHistPrimRawPtVsYVsVertexZK0Short) {
1524 f3dHistPrimRawPtVsYVsVertexZK0Short = new TH3F( "f3dHistPrimRawPtVsYVsVertexZK0Short", "Pt_{K0S} Vs Y_{K0S} Vs VertexZiplicity; Pt_{K0S} (GeV/c); Y_{K0S} ; VertexZ", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,40,-10,10);
1525 fListHistV0->Add(f3dHistPrimRawPtVsYVsVertexZK0Short);
1526 }
1527
7e81bb32 1528//--- 3D Histo (Pt, Y, Multiplicity), close to PV criterion
1529
1530 if(! f3dHistPrimCloseToPVPtVsYVsMultLambda) {
1531 f3dHistPrimCloseToPVPtVsYVsMultLambda = new TH3F( "f3dHistPrimCloseToPVPtVsYVsMultLambda", "Pt_{lambda} Vs Y_{#Lambda} Vs Multiplicity; Pt_{lambda} (GeV/c); Y_{#Lambda} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1532 fListHistV0->Add(f3dHistPrimCloseToPVPtVsYVsMultLambda);
1533 }
1534 if(! f3dHistPrimCloseToPVPtVsYVsMultAntiLambda) {
1535 f3dHistPrimCloseToPVPtVsYVsMultAntiLambda = new TH3F( "f3dHistPrimCloseToPVPtVsYVsMultAntiLambda", "Pt_{antilambda} Vs Y_{#Lambda} Vs Multiplicity; Pt_{antilambda} (GeV/c); Y_{#Lambda} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1536 fListHistV0->Add(f3dHistPrimCloseToPVPtVsYVsMultAntiLambda);
1537 }
1538 if(! f3dHistPrimCloseToPVPtVsYVsMultK0Short) {
1539 f3dHistPrimCloseToPVPtVsYVsMultK0Short = new TH3F( "f3dHistPrimCloseToPVPtVsYVsMultK0Short", "Pt_{K0S} Vs Y_{K0S} Vs Multiplicity; Pt_{K0S} (GeV/c); Y_{K0S} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1540 fListHistV0->Add(f3dHistPrimCloseToPVPtVsYVsMultK0Short);
1541 }
1542
1543
bcb6ffdb 1544//--- 3D Histo (Pt, Y, Proper Decay Length)
1545
1546 if(! f3dHistPrimRawPtVsYVsDecayLengthLambda) {
1547 f3dHistPrimRawPtVsYVsDecayLengthLambda = new TH3F( "f3dHistPrimRawPtVsYVsDecayLengthLambda", "Pt_{lambda} Vs Y_{#Lambda} Vs DecayLength; Pt_{lambda} (GeV/c); Y_{#Lambda} ; DecayLength", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,200,0,50);
1548 fListHistV0->Add(f3dHistPrimRawPtVsYVsDecayLengthLambda);
1549 }
1550 if(! f3dHistPrimRawPtVsYVsDecayLengthAntiLambda) {
1551 f3dHistPrimRawPtVsYVsDecayLengthAntiLambda = new TH3F( "f3dHistPrimRawPtVsYVsDecayLengthAntiLambda", "Pt_{antilambda} Vs Y_{#Lambda} Vs DecayLength; Pt_{antilambda} (GeV/c); Y_{#Lambda} ; DecayLength", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,200,0,50);
1552 fListHistV0->Add(f3dHistPrimRawPtVsYVsDecayLengthAntiLambda);
1553 }
1554 if(! f3dHistPrimRawPtVsYVsDecayLengthK0Short) {
1555 f3dHistPrimRawPtVsYVsDecayLengthK0Short = new TH3F( "f3dHistPrimRawPtVsYVsDecayLengthK0Short", "Pt_{K0S} Vs Y_{K0S} Vs DecayLength; Pt_{K0S} (GeV/c); Y_{K0S} ; DecayLength", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,200,0,50);
1556 fListHistV0->Add(f3dHistPrimRawPtVsYVsDecayLengthK0Short);
1557 }
1558
68e484c4 1559//--------------------------------------------------------------------------------------
1560// V0M for Cascades
c228a5af 1561//--------------------------------------------------------------------------------------
1562//--- 3D Histo (Pt, Y, Multiplicity) for generated XiMinus/Plus, all generated
bcb6ffdb 1563
1564 if(! f3dHistGenPtVsYVsMultXiMinus) {
1565 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);
1566 fListHistV0->Add(f3dHistGenPtVsYVsMultXiMinus);
1567 }
1568 if(! f3dHistGenPtVsYVsMultXiPlus) {
1569 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);
1570 fListHistV0->Add(f3dHistGenPtVsYVsMultXiPlus);
1571 }
68e484c4 1572//CASCADEs, Y CMS
e039e6b3 1573 if(! f3dHistGenPtVsYCMSVsMultXiMinus) {
1574 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);
1575 fListHistV0->Add(f3dHistGenPtVsYCMSVsMultXiMinus);
1576 }
1577 if(! f3dHistGenPtVsYCMSVsMultXiPlus) {
1578 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);
1579 fListHistV0->Add(f3dHistGenPtVsYCMSVsMultXiPlus);
1580 }
e039e6b3 1581
c228a5af 1582//--------------------------------------------------------------------------------------
1583//--- 3D Histo (Pt, Y, Multiplicity) for generated XiMinus/Plus, at selected analysis evts
1584
1585 if(! f3dHistGenSelectedPtVsYVsMultXiMinus) {
1586 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);
1587 fListHistV0->Add(f3dHistGenSelectedPtVsYVsMultXiMinus);
1588 }
1589 if(! f3dHistGenSelectedPtVsYVsMultXiPlus) {
1590 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);
1591 fListHistV0->Add(f3dHistGenSelectedPtVsYVsMultXiPlus);
1592 }
c228a5af 1593
e039e6b3 1594//CASCADES, analysis level, y CMS
e039e6b3 1595//--------------------------------------------------------------------------------------
1596//--- 3D Histo (Pt, Y, Multiplicity) for generated XiMinus/Plus, at selected analysis evts
1597
1598 if(! f3dHistGenSelectedPtVsYCMSVsMultXiMinus) {
1599 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);
1600 fListHistV0->Add(f3dHistGenSelectedPtVsYCMSVsMultXiMinus);
1601 }
1602 if(! f3dHistGenSelectedPtVsYCMSVsMultXiPlus) {
1603 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);
1604 fListHistV0->Add(f3dHistGenSelectedPtVsYCMSVsMultXiPlus);
1605 }
68e484c4 1606
1607 //--------------------------------------------------------------------------------------
1608 // V0A for Cascades
1609 //--------------------------------------------------------------------------------------
1610 //--- 3D Histo (Pt, Y, Multiplicity) for generated XiMinus/Plus, all generated
1611
1612 if(! f3dHistGenPtVsYVsMultV0AXiMinus) {
1613 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);
1614 if( fkIsNuclear ) fListHistV0->Add(f3dHistGenPtVsYVsMultV0AXiMinus);
1615 }
1616 if(! f3dHistGenPtVsYVsMultV0AXiPlus) {
1617 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);
1618 if( fkIsNuclear ) fListHistV0->Add(f3dHistGenPtVsYVsMultV0AXiPlus);
1619 }
1620 //CASCADEs, Y CMS
1621 if(! f3dHistGenPtVsYCMSVsMultV0AXiMinus) {
1622 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);
1623 if( fkIsNuclear ) fListHistV0->Add(f3dHistGenPtVsYCMSVsMultV0AXiMinus);
1624 }
1625 if(! f3dHistGenPtVsYCMSVsMultV0AXiPlus) {
1626 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);
1627 if( fkIsNuclear ) fListHistV0->Add(f3dHistGenPtVsYCMSVsMultV0AXiPlus);
1628 }
1629
1630 //--------------------------------------------------------------------------------------
1631 //--- 3D Histo (Pt, Y, Multiplicity) for generated XiMinus/Plus, at selected analysis evts
1632
1633 if(! f3dHistGenSelectedPtVsYVsMultV0AXiMinus) {
1634 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);
1635 if( fkIsNuclear ) fListHistV0->Add(f3dHistGenSelectedPtVsYVsMultV0AXiMinus);
1636 }
1637 if(! f3dHistGenSelectedPtVsYVsMultV0AXiPlus) {
1638 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);
1639 if( fkIsNuclear ) fListHistV0->Add(f3dHistGenSelectedPtVsYVsMultV0AXiPlus);
1640 }
1641
1642 //CASCADES, analysis level, y CMS
1643 //--------------------------------------------------------------------------------------
1644 //--- 3D Histo (Pt, Y, Multiplicity) for generated XiMinus/Plus, at selected analysis evts
1645
1646 if(! f3dHistGenSelectedPtVsYCMSVsMultV0AXiMinus) {
1647 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);
1648 if( fkIsNuclear ) fListHistV0->Add(f3dHistGenSelectedPtVsYCMSVsMultV0AXiMinus);
1649 }
1650 if(! f3dHistGenSelectedPtVsYCMSVsMultV0AXiPlus) {
1651 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);
1652 if( fkIsNuclear ) fListHistV0->Add(f3dHistGenSelectedPtVsYCMSVsMultV0AXiPlus);
1653 }
1654
1655 //--------------------------------------------------------------------------------------
1656 // ZNA for Cascades
1657 //--------------------------------------------------------------------------------------
1658 //--- 3D Histo (Pt, Y, Multiplicity) for generated XiMinus/Plus, all generated
1659
1660 if(! f3dHistGenPtVsYVsMultZNAXiMinus) {
1661 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);
1662 if( fkIsNuclear ) fListHistV0->Add(f3dHistGenPtVsYVsMultZNAXiMinus);
1663 }
1664 if(! f3dHistGenPtVsYVsMultZNAXiPlus) {
1665 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);
1666 if( fkIsNuclear ) fListHistV0->Add(f3dHistGenPtVsYVsMultZNAXiPlus);
1667 }
1668 //CASCADEs, Y CMS
1669 if(! f3dHistGenPtVsYCMSVsMultZNAXiMinus) {
1670 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);
1671 if( fkIsNuclear ) fListHistV0->Add(f3dHistGenPtVsYCMSVsMultZNAXiMinus);
1672 }
1673 if(! f3dHistGenPtVsYCMSVsMultZNAXiPlus) {
1674 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);
1675 if( fkIsNuclear ) fListHistV0->Add(f3dHistGenPtVsYCMSVsMultZNAXiPlus);
1676 }
1677
1678 //--------------------------------------------------------------------------------------
1679 //--- 3D Histo (Pt, Y, Multiplicity) for generated XiMinus/Plus, at selected analysis evts
1680
1681 if(! f3dHistGenSelectedPtVsYVsMultZNAXiMinus) {
1682 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);
1683 if( fkIsNuclear ) fListHistV0->Add(f3dHistGenSelectedPtVsYVsMultZNAXiMinus);
1684 }
1685 if(! f3dHistGenSelectedPtVsYVsMultZNAXiPlus) {
1686 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);
1687 if( fkIsNuclear ) fListHistV0->Add(f3dHistGenSelectedPtVsYVsMultZNAXiPlus);
1688 }
1689
1690 //CASCADES, analysis level, y CMS
1691 //--------------------------------------------------------------------------------------
1692 //--- 3D Histo (Pt, Y, Multiplicity) for generated XiMinus/Plus, at selected analysis evts
1693
1694 if(! f3dHistGenSelectedPtVsYCMSVsMultZNAXiMinus) {
1695 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);
1696 if( fkIsNuclear ) fListHistV0->Add(f3dHistGenSelectedPtVsYCMSVsMultZNAXiMinus);
1697 }
1698 if(! f3dHistGenSelectedPtVsYCMSVsMultZNAXiPlus) {
1699 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);
1700 if( fkIsNuclear ) fListHistV0->Add(f3dHistGenSelectedPtVsYCMSVsMultZNAXiPlus);
1701 }
1702
1703 //--------------------------------------------------------------------------------------
1704 // TRK for Cascades
1705 //--------------------------------------------------------------------------------------
1706 //--- 3D Histo (Pt, Y, Multiplicity) for generated XiMinus/Plus, all generated
1707
1708 if(! f3dHistGenPtVsYVsMultTRKXiMinus) {
1709 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);
1710 if( fkIsNuclear ) fListHistV0->Add(f3dHistGenPtVsYVsMultTRKXiMinus);
1711 }
1712 if(! f3dHistGenPtVsYVsMultTRKXiPlus) {
1713 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);
1714 if( fkIsNuclear ) fListHistV0->Add(f3dHistGenPtVsYVsMultTRKXiPlus);
1715 }
1716 //CASCADEs, Y CMS
1717 if(! f3dHistGenPtVsYCMSVsMultTRKXiMinus) {
1718 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);
1719 if( fkIsNuclear ) fListHistV0->Add(f3dHistGenPtVsYCMSVsMultTRKXiMinus);
1720 }
1721 if(! f3dHistGenPtVsYCMSVsMultTRKXiPlus) {
1722 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);
1723 if( fkIsNuclear ) fListHistV0->Add(f3dHistGenPtVsYCMSVsMultTRKXiPlus);
1724 }
1725
1726 //--------------------------------------------------------------------------------------
1727 //--- 3D Histo (Pt, Y, Multiplicity) for generated XiMinus/Plus, at selected analysis evts
1728
1729 if(! f3dHistGenSelectedPtVsYVsMultTRKXiMinus) {
1730 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);
1731 if( fkIsNuclear ) fListHistV0->Add(f3dHistGenSelectedPtVsYVsMultTRKXiMinus);
1732 }
1733 if(! f3dHistGenSelectedPtVsYVsMultTRKXiPlus) {
1734 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);
1735 if( fkIsNuclear ) fListHistV0->Add(f3dHistGenSelectedPtVsYVsMultTRKXiPlus);
1736 }
1737
1738 //CASCADES, analysis level, y CMS
1739 //--------------------------------------------------------------------------------------
1740 //--- 3D Histo (Pt, Y, Multiplicity) for generated XiMinus/Plus, at selected analysis evts
1741
1742 if(! f3dHistGenSelectedPtVsYCMSVsMultTRKXiMinus) {
1743 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);
1744 if( fkIsNuclear ) fListHistV0->Add(f3dHistGenSelectedPtVsYCMSVsMultTRKXiMinus);
1745 }
1746 if(! f3dHistGenSelectedPtVsYCMSVsMultTRKXiPlus) {
1747 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);
1748 if( fkIsNuclear ) fListHistV0->Add(f3dHistGenSelectedPtVsYCMSVsMultTRKXiPlus);
1749 }
1750
1751
1752 //--------------------------------------------------------------------------------------
1753 // SPD for Cascades
1754 //--------------------------------------------------------------------------------------
1755 //--- 3D Histo (Pt, Y, Multiplicity) for generated XiMinus/Plus, all generated
1756
1757 if(! f3dHistGenPtVsYVsMultSPDXiMinus) {
1758 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);
1759 if( fkIsNuclear ) fListHistV0->Add(f3dHistGenPtVsYVsMultSPDXiMinus);
1760 }
1761 if(! f3dHistGenPtVsYVsMultSPDXiPlus) {
1762 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);
1763 if( fkIsNuclear ) fListHistV0->Add(f3dHistGenPtVsYVsMultSPDXiPlus);
1764 }
1765 //CASCADEs, Y CMS
1766 if(! f3dHistGenPtVsYCMSVsMultSPDXiMinus) {
1767 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);
1768 if( fkIsNuclear ) fListHistV0->Add(f3dHistGenPtVsYCMSVsMultSPDXiMinus);
1769 }
1770 if(! f3dHistGenPtVsYCMSVsMultSPDXiPlus) {
1771 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);
1772 if( fkIsNuclear ) fListHistV0->Add(f3dHistGenPtVsYCMSVsMultSPDXiPlus);
1773 }
1774
1775 //--------------------------------------------------------------------------------------
1776 //--- 3D Histo (Pt, Y, Multiplicity) for generated XiMinus/Plus, at selected analysis evts
1777
1778 if(! f3dHistGenSelectedPtVsYVsMultSPDXiMinus) {
1779 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);
1780 if( fkIsNuclear ) fListHistV0->Add(f3dHistGenSelectedPtVsYVsMultSPDXiMinus);
1781 }
1782 if(! f3dHistGenSelectedPtVsYVsMultSPDXiPlus) {
1783 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);
1784 if( fkIsNuclear ) fListHistV0->Add(f3dHistGenSelectedPtVsYVsMultSPDXiPlus);
1785 }
1786
1787 //CASCADES, analysis level, y CMS
1788 //--------------------------------------------------------------------------------------
1789 //--- 3D Histo (Pt, Y, Multiplicity) for generated XiMinus/Plus, at selected analysis evts
1790
1791 if(! f3dHistGenSelectedPtVsYCMSVsMultSPDXiMinus) {
1792 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);
1793 if( fkIsNuclear ) fListHistV0->Add(f3dHistGenSelectedPtVsYCMSVsMultSPDXiMinus);
1794 }
1795 if(! f3dHistGenSelectedPtVsYCMSVsMultSPDXiPlus) {
1796 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);
1797 if( fkIsNuclear ) fListHistV0->Add(f3dHistGenSelectedPtVsYCMSVsMultSPDXiPlus);
1798 }
1799
e039e6b3 1800
bcb6ffdb 1801
1802//----------------------------------
1803// Histos at analysis level
1804//----------------------------------
1805
68e484c4 1806//The usual V0M business...
1807
bcb6ffdb 1808 if(! f3dHistPrimAnalysisPtVsYVsMultLambda) {
1809 f3dHistPrimAnalysisPtVsYVsMultLambda = new TH3F( "f3dHistPrimAnalysisPtVsYVsMultLambda", "Pt_{lambda} Vs Y_{#Lambda} Vs Multiplicity; Pt_{lambda} (GeV/c); Y_{#Lambda} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1810 fListHistV0->Add(f3dHistPrimAnalysisPtVsYVsMultLambda);
1811 }
1812 if(! f3dHistPrimAnalysisPtVsYVsMultAntiLambda) {
1813 f3dHistPrimAnalysisPtVsYVsMultAntiLambda = new TH3F( "f3dHistPrimAnalysisPtVsYVsMultAntiLambda", "Pt_{antilambda} Vs Y_{#Lambda} Vs Multiplicity; Pt_{antilambda} (GeV/c); Y_{#Lambda} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1814 fListHistV0->Add(f3dHistPrimAnalysisPtVsYVsMultAntiLambda);
1815 }
1816 if(! f3dHistPrimAnalysisPtVsYVsMultK0Short) {
1817 f3dHistPrimAnalysisPtVsYVsMultK0Short = new TH3F( "f3dHistPrimAnalysisPtVsYVsMultK0Short", "Pt_{K0S} Vs Y_{K0S} Vs Multiplicity; Pt_{K0S} (GeV/c); Y_{K0S} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1818 fListHistV0->Add(f3dHistPrimAnalysisPtVsYVsMultK0Short);
1819 }
1820
388b34d3 1821 if(! f3dHistPrimAnalysisPtVsYCMSVsMultLambda) {
1822 f3dHistPrimAnalysisPtVsYCMSVsMultLambda = new TH3F( "f3dHistPrimAnalysisPtVsYCMSVsMultLambda", "Pt_{lambda} Vs Y_{#Lambda} Vs Multiplicity; Pt_{lambda} (GeV/c); Y_{#Lambda} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1823 fListHistV0->Add(f3dHistPrimAnalysisPtVsYCMSVsMultLambda);
1824 }
1825 if(! f3dHistPrimAnalysisPtVsYCMSVsMultAntiLambda) {
1826 f3dHistPrimAnalysisPtVsYCMSVsMultAntiLambda = new TH3F( "f3dHistPrimAnalysisPtVsYCMSVsMultAntiLambda", "Pt_{antilambda} Vs Y_{#Lambda} Vs Multiplicity; Pt_{antilambda} (GeV/c); Y_{#Lambda} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1827 fListHistV0->Add(f3dHistPrimAnalysisPtVsYCMSVsMultAntiLambda);
1828 }
1829 if(! f3dHistPrimAnalysisPtVsYCMSVsMultK0Short) {
1830 f3dHistPrimAnalysisPtVsYCMSVsMultK0Short = new TH3F( "f3dHistPrimAnalysisPtVsYCMSVsMultK0Short", "Pt_{K0S} Vs Y_{K0S} Vs Multiplicity; Pt_{K0S} (GeV/c); Y_{K0S} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1831 fListHistV0->Add(f3dHistPrimAnalysisPtVsYCMSVsMultK0Short);
1832 }
68e484c4 1833
b2c306f0 1834 //TRUE Multiplicity Business
1835
1836 if(! f3dHistPrimAnalysisPtVsYVsMultMCLambda) {
1837 f3dHistPrimAnalysisPtVsYVsMultMCLambda = new TH3F( "f3dHistPrimAnalysisPtVsYVsMultMCLambda", "Pt_{lambda} Vs Y_{#Lambda} Vs Multiplicity; Pt_{lambda} (GeV/c); Y_{#Lambda} ; MultMC", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1838 fListHistV0->Add(f3dHistPrimAnalysisPtVsYVsMultMCLambda);
1839 }
1840 if(! f3dHistPrimAnalysisPtVsYVsMultMCAntiLambda) {
1841 f3dHistPrimAnalysisPtVsYVsMultMCAntiLambda = new TH3F( "f3dHistPrimAnalysisPtVsYVsMultMCAntiLambda", "Pt_{antilambda} Vs Y_{#Lambda} Vs Multiplicity; Pt_{antilambda} (GeV/c); Y_{#Lambda} ; MultMC", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1842 fListHistV0->Add(f3dHistPrimAnalysisPtVsYVsMultMCAntiLambda);
1843 }
1844 if(! f3dHistPrimAnalysisPtVsYVsMultMCK0Short) {
1845 f3dHistPrimAnalysisPtVsYVsMultMCK0Short = new TH3F( "f3dHistPrimAnalysisPtVsYVsMultMCK0Short", "Pt_{K0S} Vs Y_{K0S} Vs Multiplicity; Pt_{K0S} (GeV/c); Y_{K0S} ; MultMC", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1846 fListHistV0->Add(f3dHistPrimAnalysisPtVsYVsMultMCK0Short);
1847 }
1848
1849 if(! f3dHistPrimAnalysisPtVsYCMSVsMultMCLambda) {
1850 f3dHistPrimAnalysisPtVsYCMSVsMultMCLambda = new TH3F( "f3dHistPrimAnalysisPtVsYCMSVsMultMCLambda", "Pt_{lambda} Vs Y_{#Lambda} Vs Multiplicity; Pt_{lambda} (GeV/c); Y_{#Lambda} ; MultMC", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1851 fListHistV0->Add(f3dHistPrimAnalysisPtVsYCMSVsMultMCLambda);
1852 }
1853 if(! f3dHistPrimAnalysisPtVsYCMSVsMultMCAntiLambda) {
1854 f3dHistPrimAnalysisPtVsYCMSVsMultMCAntiLambda = new TH3F( "f3dHistPrimAnalysisPtVsYCMSVsMultMCAntiLambda", "Pt_{antilambda} Vs Y_{#Lambda} Vs Multiplicity; Pt_{antilambda} (GeV/c); Y_{#Lambda} ; MultMC", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1855 fListHistV0->Add(f3dHistPrimAnalysisPtVsYCMSVsMultMCAntiLambda);
1856 }
1857 if(! f3dHistPrimAnalysisPtVsYCMSVsMultMCK0Short) {
1858 f3dHistPrimAnalysisPtVsYCMSVsMultMCK0Short = new TH3F( "f3dHistPrimAnalysisPtVsYCMSVsMultMCK0Short", "Pt_{K0S} Vs Y_{K0S} Vs Multiplicity; Pt_{K0S} (GeV/c); Y_{K0S} ; MultMC", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1859 fListHistV0->Add(f3dHistPrimAnalysisPtVsYCMSVsMultMCK0Short);
1860 }
1861
68e484c4 1862 //V0A
1863
1864 if(! f3dHistPrimAnalysisPtVsYVsMultV0ALambda) {
1865 f3dHistPrimAnalysisPtVsYVsMultV0ALambda = new TH3F( "f3dHistPrimAnalysisPtVsYVsMultV0ALambda", "Pt_{lambda} Vs Y_{#Lambda} Vs Multiplicity; Pt_{lambda} (GeV/c); Y_{#Lambda} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1866 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimAnalysisPtVsYVsMultV0ALambda);
1867 }
1868 if(! f3dHistPrimAnalysisPtVsYVsMultV0AAntiLambda) {
1869 f3dHistPrimAnalysisPtVsYVsMultV0AAntiLambda = new TH3F( "f3dHistPrimAnalysisPtVsYVsMultV0AAntiLambda", "Pt_{antilambda} Vs Y_{#Lambda} Vs Multiplicity; Pt_{antilambda} (GeV/c); Y_{#Lambda} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1870 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimAnalysisPtVsYVsMultV0AAntiLambda);
1871 }
1872 if(! f3dHistPrimAnalysisPtVsYVsMultV0AK0Short) {
1873 f3dHistPrimAnalysisPtVsYVsMultV0AK0Short = new TH3F( "f3dHistPrimAnalysisPtVsYVsMultV0AK0Short", "Pt_{K0S} Vs Y_{K0S} Vs Multiplicity; Pt_{K0S} (GeV/c); Y_{K0S} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1874 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimAnalysisPtVsYVsMultV0AK0Short);
1875 }
1876
1877 if(! f3dHistPrimAnalysisPtVsYCMSVsMultV0ALambda) {
1878 f3dHistPrimAnalysisPtVsYCMSVsMultV0ALambda = new TH3F( "f3dHistPrimAnalysisPtVsYCMSVsMultV0ALambda", "Pt_{lambda} Vs Y_{#Lambda} Vs Multiplicity; Pt_{lambda} (GeV/c); Y_{#Lambda} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1879 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimAnalysisPtVsYCMSVsMultV0ALambda);
1880 }
1881 if(! f3dHistPrimAnalysisPtVsYCMSVsMultV0AAntiLambda) {
1882 f3dHistPrimAnalysisPtVsYCMSVsMultV0AAntiLambda = new TH3F( "f3dHistPrimAnalysisPtVsYCMSVsMultV0AAntiLambda", "Pt_{antilambda} Vs Y_{#Lambda} Vs Multiplicity; Pt_{antilambda} (GeV/c); Y_{#Lambda} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1883 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimAnalysisPtVsYCMSVsMultV0AAntiLambda);
1884 }
1885 if(! f3dHistPrimAnalysisPtVsYCMSVsMultV0AK0Short) {
1886 f3dHistPrimAnalysisPtVsYCMSVsMultV0AK0Short = new TH3F( "f3dHistPrimAnalysisPtVsYCMSVsMultV0AK0Short", "Pt_{K0S} Vs Y_{K0S} Vs Multiplicity; Pt_{K0S} (GeV/c); Y_{K0S} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1887 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimAnalysisPtVsYCMSVsMultV0AK0Short);
1888 }
3db0901a 1889
1890 //Cross-check at Analysis Level
1891 if(! f3dHistPrimAnalysisPtVsYCMSVsMultV0AKPlus) {
1892 f3dHistPrimAnalysisPtVsYCMSVsMultV0AKPlus = new TH3F( "f3dHistPrimAnalysisPtVsYCMSVsMultV0AKPlus", "Pt_{K+} Vs Y_{K+} Vs Multiplicity; Pt_{K+} (GeV/c); Y_{K+} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1893 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimAnalysisPtVsYCMSVsMultV0AKPlus);
1894 }
1895 //Cross-check at Analysis Level
1896 if(! f3dHistPrimAnalysisPtVsYCMSVsMultV0AKMinus) {
1897 f3dHistPrimAnalysisPtVsYCMSVsMultV0AKMinus = new TH3F( "f3dHistPrimAnalysisPtVsYCMSVsMultV0AKMinus", "Pt_{K-} Vs Y_{K-} Vs Multiplicity; Pt_{K-} (GeV/c); Y_{K-} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1898 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimAnalysisPtVsYCMSVsMultV0AKMinus);
1899 }
1900
68e484c4 1901
1902 //ZNA
1903
1904 if(! f3dHistPrimAnalysisPtVsYVsMultZNALambda) {
1905 f3dHistPrimAnalysisPtVsYVsMultZNALambda = new TH3F( "f3dHistPrimAnalysisPtVsYVsMultZNALambda", "Pt_{lambda} Vs Y_{#Lambda} Vs Multiplicity; Pt_{lambda} (GeV/c); Y_{#Lambda} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1906 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimAnalysisPtVsYVsMultZNALambda);
1907 }
1908 if(! f3dHistPrimAnalysisPtVsYVsMultZNAAntiLambda) {
1909 f3dHistPrimAnalysisPtVsYVsMultZNAAntiLambda = new TH3F( "f3dHistPrimAnalysisPtVsYVsMultZNAAntiLambda", "Pt_{antilambda} Vs Y_{#Lambda} Vs Multiplicity; Pt_{antilambda} (GeV/c); Y_{#Lambda} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1910 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimAnalysisPtVsYVsMultZNAAntiLambda);
1911 }
1912 if(! f3dHistPrimAnalysisPtVsYVsMultZNAK0Short) {
1913 f3dHistPrimAnalysisPtVsYVsMultZNAK0Short = new TH3F( "f3dHistPrimAnalysisPtVsYVsMultZNAK0Short", "Pt_{K0S} Vs Y_{K0S} Vs Multiplicity; Pt_{K0S} (GeV/c); Y_{K0S} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1914 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimAnalysisPtVsYVsMultZNAK0Short);
1915 }
1916
1917 if(! f3dHistPrimAnalysisPtVsYCMSVsMultZNALambda) {
1918 f3dHistPrimAnalysisPtVsYCMSVsMultZNALambda = new TH3F( "f3dHistPrimAnalysisPtVsYCMSVsMultZNALambda", "Pt_{lambda} Vs Y_{#Lambda} Vs Multiplicity; Pt_{lambda} (GeV/c); Y_{#Lambda} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1919 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimAnalysisPtVsYCMSVsMultZNALambda);
1920 }
1921 if(! f3dHistPrimAnalysisPtVsYCMSVsMultZNAAntiLambda) {
1922 f3dHistPrimAnalysisPtVsYCMSVsMultZNAAntiLambda = new TH3F( "f3dHistPrimAnalysisPtVsYCMSVsMultZNAAntiLambda", "Pt_{antilambda} Vs Y_{#Lambda} Vs Multiplicity; Pt_{antilambda} (GeV/c); Y_{#Lambda} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1923 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimAnalysisPtVsYCMSVsMultZNAAntiLambda);
1924 }
1925 if(! f3dHistPrimAnalysisPtVsYCMSVsMultZNAK0Short) {
1926 f3dHistPrimAnalysisPtVsYCMSVsMultZNAK0Short = new TH3F( "f3dHistPrimAnalysisPtVsYCMSVsMultZNAK0Short", "Pt_{K0S} Vs Y_{K0S} Vs Multiplicity; Pt_{K0S} (GeV/c); Y_{K0S} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1927 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimAnalysisPtVsYCMSVsMultZNAK0Short);
1928 }
1929
1930 //TRK
1931
1932 if(! f3dHistPrimAnalysisPtVsYVsMultTRKLambda) {
1933 f3dHistPrimAnalysisPtVsYVsMultTRKLambda = new TH3F( "f3dHistPrimAnalysisPtVsYVsMultTRKLambda", "Pt_{lambda} Vs Y_{#Lambda} Vs Multiplicity; Pt_{lambda} (GeV/c); Y_{#Lambda} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1934 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimAnalysisPtVsYVsMultTRKLambda);
1935 }
1936 if(! f3dHistPrimAnalysisPtVsYVsMultTRKAntiLambda) {
1937 f3dHistPrimAnalysisPtVsYVsMultTRKAntiLambda = new TH3F( "f3dHistPrimAnalysisPtVsYVsMultTRKAntiLambda", "Pt_{antilambda} Vs Y_{#Lambda} Vs Multiplicity; Pt_{antilambda} (GeV/c); Y_{#Lambda} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1938 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimAnalysisPtVsYVsMultTRKAntiLambda);
1939 }
1940 if(! f3dHistPrimAnalysisPtVsYVsMultTRKK0Short) {
1941 f3dHistPrimAnalysisPtVsYVsMultTRKK0Short = new TH3F( "f3dHistPrimAnalysisPtVsYVsMultTRKK0Short", "Pt_{K0S} Vs Y_{K0S} Vs Multiplicity; Pt_{K0S} (GeV/c); Y_{K0S} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1942 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimAnalysisPtVsYVsMultTRKK0Short);
1943 }
1944
1945 if(! f3dHistPrimAnalysisPtVsYCMSVsMultTRKLambda) {
1946 f3dHistPrimAnalysisPtVsYCMSVsMultTRKLambda = new TH3F( "f3dHistPrimAnalysisPtVsYCMSVsMultTRKLambda", "Pt_{lambda} Vs Y_{#Lambda} Vs Multiplicity; Pt_{lambda} (GeV/c); Y_{#Lambda} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1947 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimAnalysisPtVsYCMSVsMultTRKLambda);
1948 }
1949 if(! f3dHistPrimAnalysisPtVsYCMSVsMultTRKAntiLambda) {
1950 f3dHistPrimAnalysisPtVsYCMSVsMultTRKAntiLambda = new TH3F( "f3dHistPrimAnalysisPtVsYCMSVsMultTRKAntiLambda", "Pt_{antilambda} Vs Y_{#Lambda} Vs Multiplicity; Pt_{antilambda} (GeV/c); Y_{#Lambda} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1951 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimAnalysisPtVsYCMSVsMultTRKAntiLambda);
1952 }
1953 if(! f3dHistPrimAnalysisPtVsYCMSVsMultTRKK0Short) {
1954 f3dHistPrimAnalysisPtVsYCMSVsMultTRKK0Short = new TH3F( "f3dHistPrimAnalysisPtVsYCMSVsMultTRKK0Short", "Pt_{K0S} Vs Y_{K0S} Vs Multiplicity; Pt_{K0S} (GeV/c); Y_{K0S} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1955 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimAnalysisPtVsYCMSVsMultTRKK0Short);
1956 }
1957
1958 //SPD
1959
1960 if(! f3dHistPrimAnalysisPtVsYVsMultSPDLambda) {
1961 f3dHistPrimAnalysisPtVsYVsMultSPDLambda = new TH3F( "f3dHistPrimAnalysisPtVsYVsMultSPDLambda", "Pt_{lambda} Vs Y_{#Lambda} Vs Multiplicity; Pt_{lambda} (GeV/c); Y_{#Lambda} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1962 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimAnalysisPtVsYVsMultSPDLambda);
1963 }
1964 if(! f3dHistPrimAnalysisPtVsYVsMultSPDAntiLambda) {
1965 f3dHistPrimAnalysisPtVsYVsMultSPDAntiLambda = new TH3F( "f3dHistPrimAnalysisPtVsYVsMultSPDAntiLambda", "Pt_{antilambda} Vs Y_{#Lambda} Vs Multiplicity; Pt_{antilambda} (GeV/c); Y_{#Lambda} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1966 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimAnalysisPtVsYVsMultSPDAntiLambda);
1967 }
1968 if(! f3dHistPrimAnalysisPtVsYVsMultSPDK0Short) {
1969 f3dHistPrimAnalysisPtVsYVsMultSPDK0Short = new TH3F( "f3dHistPrimAnalysisPtVsYVsMultSPDK0Short", "Pt_{K0S} Vs Y_{K0S} Vs Multiplicity; Pt_{K0S} (GeV/c); Y_{K0S} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1970 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimAnalysisPtVsYVsMultSPDK0Short);
1971 }
1972
1973 if(! f3dHistPrimAnalysisPtVsYCMSVsMultSPDLambda) {
1974 f3dHistPrimAnalysisPtVsYCMSVsMultSPDLambda = new TH3F( "f3dHistPrimAnalysisPtVsYCMSVsMultSPDLambda", "Pt_{lambda} Vs Y_{#Lambda} Vs Multiplicity; Pt_{lambda} (GeV/c); Y_{#Lambda} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1975 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimAnalysisPtVsYCMSVsMultSPDLambda);
1976 }
1977 if(! f3dHistPrimAnalysisPtVsYCMSVsMultSPDAntiLambda) {
1978 f3dHistPrimAnalysisPtVsYCMSVsMultSPDAntiLambda = new TH3F( "f3dHistPrimAnalysisPtVsYCMSVsMultSPDAntiLambda", "Pt_{antilambda} Vs Y_{#Lambda} Vs Multiplicity; Pt_{antilambda} (GeV/c); Y_{#Lambda} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1979 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimAnalysisPtVsYCMSVsMultSPDAntiLambda);
1980 }
1981 if(! f3dHistPrimAnalysisPtVsYCMSVsMultSPDK0Short) {
1982 f3dHistPrimAnalysisPtVsYCMSVsMultSPDK0Short = new TH3F( "f3dHistPrimAnalysisPtVsYCMSVsMultSPDK0Short", "Pt_{K0S} Vs Y_{K0S} Vs Multiplicity; Pt_{K0S} (GeV/c); Y_{K0S} ; Mult", lCustomNBins, 0., lCustomPtUpperLimit, 48, -1.2,1.2,lCustomNBinsMultiplicity,0,lCustomNBinsMultiplicity);
1983 if( fkIsNuclear ) fListHistV0->Add(f3dHistPrimAnalysisPtVsYCMSVsMultSPDK0Short);
1984 }
388b34d3 1985
bcb6ffdb 1986//----------------------------------
1987// Primary Vertex Position Histos
1988//----------------------------------
1989
1990 if(! fHistPVx) {
1991 fHistPVx = new TH1F("fHistPVx",
1992 "PV x position;Nbr of Evts;x",
1993 2000, -0.5, 0.5);
1994 fListHistV0->Add(fHistPVx);
1995 }
1996 if(! fHistPVy) {
1997 fHistPVy = new TH1F("fHistPVy",
1998 "PV y position;Nbr of Evts;y",
1999 2000, -0.5, 0.5);
2000 fListHistV0->Add(fHistPVy);
2001 }
2002 if(! fHistPVz) {
2003 fHistPVz = new TH1F("fHistPVz",
2004 "PV z position;Nbr of Evts;z",
2005 400, -20, 20);
2006 fListHistV0->Add(fHistPVz);
2007 }
2008
2009 if(! fHistPVxAnalysis) {
2010 fHistPVxAnalysis = new TH1F("fHistPVxAnalysis",
2011 "PV x position;Nbr of Evts;x",
2012 2000, -0.5, 0.5);
2013 fListHistV0->Add(fHistPVxAnalysis);
2014 }
2015 if(! fHistPVyAnalysis) {
2016 fHistPVyAnalysis = new TH1F("fHistPVyAnalysis",
2017 "PV y position;Nbr of Evts;y",
2018 2000, -0.5, 0.5);
2019 fListHistV0->Add(fHistPVyAnalysis);
2020 }
2021 if(! fHistPVzAnalysis) {
2022 fHistPVzAnalysis = new TH1F("fHistPVzAnalysis",
2023 "PV z position;Nbr of Evts;z",
2024 400, -20, 20);
2025 fListHistV0->Add(fHistPVzAnalysis);
2026 }
2027
2028 if(! fHistPVxAnalysisHasHighPtLambda) {
2029 fHistPVxAnalysisHasHighPtLambda = new TH1F("fHistPVxAnalysisHasHighPtLambda",
2030 "PV x position;Nbr of Evts;x",
2031 2000, -0.5, 0.5);
2032 fListHistV0->Add(fHistPVxAnalysisHasHighPtLambda);
2033 }
2034 if(! fHistPVyAnalysisHasHighPtLambda) {
2035 fHistPVyAnalysisHasHighPtLambda = new TH1F("fHistPVyAnalysisHasHighPtLambda",
2036 "PV y position;Nbr of Evts;y",
2037 2000, -0.5, 0.5);
2038 fListHistV0->Add(fHistPVyAnalysisHasHighPtLambda);
2039 }
2040 if(! fHistPVzAnalysisHasHighPtLambda) {
2041 fHistPVzAnalysisHasHighPtLambda = new TH1F("fHistPVzAnalysisHasHighPtLambda",
2042 "PV z position;Nbr of Evts;z",
2043 400, -20, 20);
2044 fListHistV0->Add(fHistPVzAnalysisHasHighPtLambda);
2045 }
4f8ed367 2046 if(! fHistSwappedV0Counter) {
2047 fHistSwappedV0Counter = new TH1F("fHistSwappedV0Counter",
2048 "Swap or not histo;Swapped (1) or not (0); count",
2049 2, 0, 2);
2050 fListHistV0->Add(fHistSwappedV0Counter);
2051 }
2052
bcb6ffdb 2053 //List of Histograms: Normal
2054 PostData(1, fListHistV0);
2055
2056 //TTree Object: Saved to base directory. Should cache to disk while saving.
2057 //(Important to avoid excessive memory usage, particularly when merging)
2058 PostData(2, fTree);
2059
2060}// end UserCreateOutputObjects
2061
2062
2063//________________________________________________________________________
2064void AliAnalysisTaskExtractPerformanceV0::UserExec(Option_t *)
2065{
2066 // Main loop
2067 // Called for each event
2068
2069 AliESDEvent *lESDevent = 0x0;
2070 AliMCEvent *lMCevent = 0x0;
2071 AliStack *lMCstack = 0x0;
2072
2073 Int_t lNumberOfV0s = -1;
2074 Double_t lTrkgPrimaryVtxPos[3] = {-100.0, -100.0, -100.0};
2075 Double_t lBestPrimaryVtxPos[3] = {-100.0, -100.0, -100.0};
2076 Double_t lMagneticField = -10.;
2077
2078 // Connect to the InputEvent
2079 // After these lines, we should have an ESD/AOD event + the number of V0s in it.
2080
2081 // Appropriate for ESD analysis!
2082
2083 lESDevent = dynamic_cast<AliESDEvent*>( InputEvent() );
2084 if (!lESDevent) {
2085 AliWarning("ERROR: lESDevent not available \n");
2086 return;
2087 }
2088
0eebce93 2089 fTreeVariableRunNumber = lESDevent->GetRunNumber();
2090 fTreeVariableEventNumber =
2091 ( ( ((ULong64_t)lESDevent->GetPeriodNumber() ) << 36 ) |
2092 ( ((ULong64_t)lESDevent->GetOrbitNumber () ) << 12 ) |
2093 ((ULong64_t)lESDevent->GetBunchCrossNumber() ) );
2094
bcb6ffdb 2095 lMCevent = MCEvent();
2096 if (!lMCevent) {
2097 Printf("ERROR: Could not retrieve MC event \n");
2098 cout << "Name of the file with pb :" << fInputHandler->GetTree()->GetCurrentFile()->GetName() << endl;
2099 return;
2100 }
2101
2102 lMCstack = lMCevent->Stack();
2103 if (!lMCstack) {
2104 Printf("ERROR: Could not retrieve MC stack \n");
2105 cout << "Name of the file with pb :" << fInputHandler->GetTree()->GetCurrentFile()->GetName() << endl;
2106 return;
2107 }
af819bba 2108
2109 //------------------------------------------------
2110 // Rerun V0 vertexer, if asked for
2111 // --- WARNING: Be careful when using in PbPb
2112 //------------------------------------------------
2113 if( fkRunV0Vertexer ){
2114 lESDevent->ResetV0s();
2115 AliV0vertexer lV0vtxer;
2116 lV0vtxer.SetDefaultCuts(fV0Sels);
2117 lV0vtxer.Tracks2V0vertices(lESDevent);
2118 }
2119
7e81bb32 2120 TArrayF mcPrimaryVtx;
2121 AliGenEventHeader* mcHeader=lMCevent->GenEventHeader();
2122 if(!mcHeader) return;
2123 mcHeader->PrimaryVertex(mcPrimaryVtx);
bcb6ffdb 2124
e5c8e548 2125 //Code Snippet from Alexander for looking at diffractive Events from DPMJet
2126 Int_t nPart = 0;
2127 if(fDiffractiveOnly){
2128 AliHeader * header = lMCevent->Header();
2129 AliGenDPMjetEventHeader* dpmHeader = dynamic_cast<AliGenDPMjetEventHeader*>(header->GenEventHeader());
2130 if (dpmHeader) nPart = dpmHeader->ProjectileParticipants() + dpmHeader->TargetParticipants();
2131 //
2132 Int_t nsdiffrac1 = 0;
2133 Int_t nsdiffrac2 = 0;
2134 Int_t nddiffrac = 0;
2135 if (dpmHeader) dpmHeader->GetNDiffractive(nsdiffrac1, nsdiffrac2, nddiffrac);
2136 if (nsdiffrac1 + nsdiffrac2 != nPart) return;
2137 }
2138
bcb6ffdb 2139//------------------------------------------------
2140// Multiplicity Information Acquistion
2141//------------------------------------------------
2142
4f8ed367 2143 //REVISED multiplicity estimator after 'multiplicity day' (2011)
5d43de53 2144 Int_t lMultiplicity = -100;
2145 Int_t lMultiplicityV0A = -100;
2146 Int_t lMultiplicityZNA = -100;
2147 Int_t lMultiplicityTRK = -100;
2148 Int_t lMultiplicitySPD = -100;
2149
ad0d3645 2150 //testing purposes
61d295ec 2151 if(fkIsNuclear == kFALSE) lMultiplicity = fESDtrackCuts->GetReferenceMultiplicity(lESDevent, AliESDtrackCuts::kTrackletsITSTPC,fEtaRefMult);
bcb6ffdb 2152
548bd092 2153 //---> If this is a nuclear collision, then go nuclear on "multiplicity" variable...
2154 //---> Warning: Experimental
2155 if(fkIsNuclear == kTRUE){
2156 AliCentrality* centrality;
2157 centrality = lESDevent->GetCentrality();
e039e6b3 2158 lMultiplicity = ( ( Int_t ) ( centrality->GetCentralityPercentile( fCentralityEstimator.Data() ) ) );
5d43de53 2159 lMultiplicityV0A = ( ( Int_t ) ( centrality->GetCentralityPercentile( "V0A" ) ) );
2160 lMultiplicityZNA = ( ( Int_t ) ( centrality->GetCentralityPercentile( "ZNA" ) ) );
2161 lMultiplicityTRK = ( ( Int_t ) ( centrality->GetCentralityPercentile( "TRK" ) ) );
f8bc074c 2162 lMultiplicitySPD = ( ( Int_t ) ( centrality->GetCentralityPercentile( "CL1" ) ) );
548bd092 2163 if (centrality->GetQuality()>1) {
2164 PostData(1, fListHistV0);
2165 PostData(2, fTree);
2166 return;
2167 }
2168 }
2169
2170 //Set variable for filling tree afterwards!
2171 //---> pp case......: GetReferenceMultiplicity
2172 //---> Pb-Pb case...: Centrality by V0M
5d43de53 2173 fTreeVariableMultiplicity = lMultiplicity;
2174 fTreeVariableMultiplicityV0A = lMultiplicityV0A;
2175 fTreeVariableMultiplicityZNA = lMultiplicityZNA;
2176 fTreeVariableMultiplicityTRK = lMultiplicityTRK;
2177 fTreeVariableMultiplicitySPD = lMultiplicitySPD;
548bd092 2178
bcb6ffdb 2179 fHistV0MultiplicityBeforeTrigSel->Fill ( lESDevent->GetNumberOfV0s() );
5d43de53 2180
2181 fHistMultiplicityBeforeTrigSel->Fill ( lMultiplicity );
2182 fHistMultiplicityV0ABeforeTrigSel->Fill ( lMultiplicityV0A );
2183 fHistMultiplicityZNABeforeTrigSel->Fill ( lMultiplicityZNA );
2184 fHistMultiplicityTRKBeforeTrigSel->Fill ( lMultiplicityTRK );
2185 fHistMultiplicitySPDBeforeTrigSel->Fill ( lMultiplicitySPD );
2186
bcb6ffdb 2187//------------------------------------------------
2188// MC Information Acquistion
2189//------------------------------------------------
2190
2191 Int_t iNumberOfPrimaries = -1;
2192 iNumberOfPrimaries = lMCstack->GetNprimary();
2193 if(iNumberOfPrimaries < 1) return;
2194 Bool_t lHasHighPtLambda = kFALSE;
2195
2196//------------------------------------------------
2197// Variable Definition
2198//------------------------------------------------
2199
2200 Int_t lNbMCPrimary = 0;
2201
2202 Int_t lPdgcodeCurrentPart = 0;
2203 Double_t lRapCurrentPart = 0;
2204 Double_t lPtCurrentPart = 0;
2205
2206 //Int_t lComeFromSigma = 0;
2207
2208 // current mc particle 's mother
2209 //Int_t iCurrentMother = 0;
2210 lNbMCPrimary = lMCstack->GetNprimary();
2211
2212//------------------------------------------------
2213// Pre-Physics Selection
2214//------------------------------------------------
2215
2216//----- Loop on primary Xi, Omega --------------------------------------------------------------
2217 for (Int_t iCurrentLabelStack = 0; iCurrentLabelStack < lNbMCPrimary; iCurrentLabelStack++)
2218 {// This is the begining of the loop on primaries
2219
2220 TParticle* lCurrentParticlePrimary = 0x0;
2221 lCurrentParticlePrimary = lMCstack->Particle( iCurrentLabelStack );
2222 if(!lCurrentParticlePrimary){
2223 Printf("Cascade loop %d - MC TParticle pointer to current stack particle = 0x0 ! Skip ...\n", iCurrentLabelStack );
2224 continue;
2225 }
c228a5af 2226 if ( TMath::Abs(lCurrentParticlePrimary->GetPdgCode()) == 3312 || TMath::Abs(lCurrentParticlePrimary->GetPdgCode()) == 3334 ) {
ad0d3645 2227 Double_t lRapXiMCPrimary = -100;
2228 if( (lCurrentParticlePrimary->Energy() - lCurrentParticlePrimary->Pz() +1.e-13) != 0 ) {
2229 if ( (lCurrentParticlePrimary->Energy() + lCurrentParticlePrimary->Pz()) / (lCurrentParticlePrimary->Energy() - lCurrentParticlePrimary->Pz() +1.e-13) !=0 ){
2230 lRapXiMCPrimary = 0.5*TMath::Log( (lCurrentParticlePrimary->Energy() + lCurrentParticlePrimary->Pz()) / (lCurrentParticlePrimary->Energy() - lCurrentParticlePrimary->Pz() +1.e-13) );
2231 }
2232 }
bcb6ffdb 2233
2234 //=================================================================================
c228a5af 2235 // Xi Histograms
bcb6ffdb 2236 if( lCurrentParticlePrimary->GetPdgCode() == 3312 ){
2237 lPtCurrentPart = lCurrentParticlePrimary->Pt();
2238 f3dHistGenPtVsYVsMultXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicity);
e039e6b3 2239 f3dHistGenPtVsYCMSVsMultXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicity);
68e484c4 2240
2241 f3dHistGenPtVsYVsMultV0AXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicityV0A);
2242 f3dHistGenPtVsYCMSVsMultV0AXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicityV0A);
2243 f3dHistGenPtVsYVsMultZNAXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicityZNA);
2244 f3dHistGenPtVsYCMSVsMultZNAXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicityZNA);
2245 f3dHistGenPtVsYVsMultTRKXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicityTRK);
2246 f3dHistGenPtVsYCMSVsMultTRKXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicityTRK);
2247 f3dHistGenPtVsYVsMultSPDXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicitySPD);
2248 f3dHistGenPtVsYCMSVsMultSPDXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicitySPD);
bcb6ffdb 2249 }
68e484c4 2250 if( lCurrentParticlePrimary->GetPdgCode() == -3312 ){
bcb6ffdb 2251 lPtCurrentPart = lCurrentParticlePrimary->Pt();
2252 f3dHistGenPtVsYVsMultXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicity);
e039e6b3 2253 f3dHistGenPtVsYCMSVsMultXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicity);
68e484c4 2254
2255 f3dHistGenPtVsYVsMultV0AXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicityV0A);
2256 f3dHistGenPtVsYCMSVsMultV0AXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicityV0A);
2257 f3dHistGenPtVsYVsMultZNAXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicityZNA);
2258 f3dHistGenPtVsYCMSVsMultZNAXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicityZNA);
2259 f3dHistGenPtVsYVsMultTRKXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicityTRK);
2260 f3dHistGenPtVsYCMSVsMultTRKXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicityTRK);
2261 f3dHistGenPtVsYVsMultSPDXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicitySPD);
2262 f3dHistGenPtVsYCMSVsMultSPDXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicitySPD);
c228a5af 2263 }
bcb6ffdb 2264 }
2265 }
2266//----- End Loop on primary Xi, Omega ----------------------------------------------------------
2267
a18e0a39 2268//--------- GENERATED NUMBER OF CHARGED PARTICLES
2269// ---> Set Variables to Zero again
2270// ---> Variable Definition
2271
2272 Long_t lNumberOfCharged = 0;
2273
2274//----- Loop on Stack ----------------------------------------------------------------
2275 for (Int_t iCurrentLabelStack = 0; iCurrentLabelStack < (lMCstack->GetNtrack()); iCurrentLabelStack++)
2276 {// This is the begining of the loop on tracks
2277 TParticle* particleOne = lMCstack->Particle(iCurrentLabelStack);
2278 if(!particleOne) continue;
2279 if(!particleOne->GetPDG()) continue;
2280 Double_t lThisCharge = particleOne->GetPDG()->Charge()/3.;
2281 if(TMath::Abs(lThisCharge)<0.001) continue;
2282 if(! (lMCstack->IsPhysicalPrimary(iCurrentLabelStack)) ) continue;
5d43de53 2283
2284 //Double_t gpt = particleOne -> Pt();
a18e0a39 2285 Double_t geta = particleOne -> Eta();
2286
2287 if( TMath::Abs(geta) < 0.5) lNumberOfCharged++;
2288 }//End of loop on tracks
2289//----- End Loop on Stack ------------------------------------------------------------
2290
388b34d3 2291 //Double_t lpArapidityShift = 0.465;
df661cb7 2292 Bool_t lStackNatural = kTRUE;
bcb6ffdb 2293//----- Loop on Lambda, K0Short ----------------------------------------------------------------
2294 for (Int_t iCurrentLabelStack = 0; iCurrentLabelStack < (lMCstack->GetNtrack()); iCurrentLabelStack++)
2295 {// This is the begining of the loop on tracks
2296
2297 TParticle* lCurrentParticleForLambdaCheck = 0x0;
2298 lCurrentParticleForLambdaCheck = lMCstack->Particle( iCurrentLabelStack );
2299 if(!lCurrentParticleForLambdaCheck){
2300 Printf("V0s loop %d - MC TParticle pointer to current stack particle = 0x0 ! Skip ...\n", iCurrentLabelStack );
2301 continue;
2302 }
2303
2304 //=================================================================================
2305 //Single-Strange checks
2306 // Keep only K0s, Lambda and AntiLambda:
2307 lPdgcodeCurrentPart = lCurrentParticleForLambdaCheck->GetPdgCode();
2308
2309 if ( (lCurrentParticleForLambdaCheck->GetPdgCode() == 310 ) ||
2310 (lCurrentParticleForLambdaCheck->GetPdgCode() == 3122 ) ||
2311 (lCurrentParticleForLambdaCheck->GetPdgCode() == -3122 ) )
2312 {
2313 lRapCurrentPart = MyRapidity(lCurrentParticleForLambdaCheck->Energy(),lCurrentParticleForLambdaCheck->Pz());
2314 lPtCurrentPart = lCurrentParticleForLambdaCheck->Pt();
2315
7e81bb32 2316 //Use Close to PV for filling CloseToPV histograms!
2317 Double_t dx, dy, dz;
2318
2319 dx = ( (mcPrimaryVtx.At(0)) - (lCurrentParticleForLambdaCheck->Vx()) );
2320 dy = ( (mcPrimaryVtx.At(1)) - (lCurrentParticleForLambdaCheck->Vy()) );
2321 dz = ( (mcPrimaryVtx.At(2)) - (lCurrentParticleForLambdaCheck->Vz()) );
2322 Double_t lDistToPV = TMath::Sqrt(dx*dx + dy*dy + dz*dz);
2323 if( lDistToPV <= 0.001){
2324 if( lPdgcodeCurrentPart == 3122 ){
2325 f3dHistPrimCloseToPVPtVsYVsMultLambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicity);
2326 }
2327 if( lPdgcodeCurrentPart == -3122 ){
2328 f3dHistPrimCloseToPVPtVsYVsMultAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicity);
2329 }
2330 if( lPdgcodeCurrentPart == 310 ){
2331 f3dHistPrimCloseToPVPtVsYVsMultK0Short->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicity);
2332 }
2333 }
2334
bcb6ffdb 2335 //Use Physical Primaries only for filling PrimRaw Histograms!
2336 if ( lMCstack->IsPhysicalPrimary(iCurrentLabelStack)!=kTRUE ) continue;
2337
df661cb7 2338 lStackNatural = lMCevent->IsFromBGEvent(iCurrentLabelStack); //Is it?
2339 if (!lStackNatural){
2340 if (!(lCurrentParticleForLambdaCheck->GetFirstMother()<0))
2341 {lStackNatural = kTRUE;} // because there are primaries (ALICE definition) not produced in the collision
2342 }
2343
bcb6ffdb 2344 if( lPdgcodeCurrentPart == 3122 ){
2345 f3dHistPrimRawPtVsYVsMultLambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicity);
388b34d3 2346 f3dHistPrimRawPtVsYCMSVsMultLambda->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicity);
68e484c4 2347
2348 f3dHistPrimRawPtVsYVsMultV0ALambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicityV0A);
2349 f3dHistPrimRawPtVsYCMSVsMultV0ALambda->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicityV0A);
2350 f3dHistPrimRawPtVsYVsMultZNALambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicityZNA);
2351 f3dHistPrimRawPtVsYCMSVsMultZNALambda->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicityZNA);
2352 f3dHistPrimRawPtVsYVsMultTRKLambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicityTRK);
2353 f3dHistPrimRawPtVsYCMSVsMultTRKLambda->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicityTRK);
2354 f3dHistPrimRawPtVsYVsMultSPDLambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicitySPD);
2355 f3dHistPrimRawPtVsYCMSVsMultSPDLambda->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicitySPD);
2356
df661cb7 2357 if(lStackNatural){f3dHistPrimRawPtVsYVsMultNonInjLambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicity);}
a18e0a39 2358 f3dHistPrimRawPtVsYVsMultMCLambda->Fill(lPtCurrentPart, lRapCurrentPart, lNumberOfCharged);
2359 f3dHistPrimRawPtVsYVsVertexZLambda->Fill(lPtCurrentPart, lRapCurrentPart, mcPrimaryVtx.At(2));
bcb6ffdb 2360 if( TMath::Abs( lCurrentParticleForLambdaCheck->Eta() )<1.2 && lPtCurrentPart>2 ){
2361 lHasHighPtLambda = kTRUE; //Keep track of events with Lambda within |eta|<1.2 and pt>2
2362 }
2363 }
2364 if( lPdgcodeCurrentPart == -3122 ){
2365 f3dHistPrimRawPtVsYVsMultAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicity);
388b34d3 2366 f3dHistPrimRawPtVsYCMSVsMultAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicity);
68e484c4 2367
2368 f3dHistPrimRawPtVsYVsMultV0AAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicityV0A);
2369 f3dHistPrimRawPtVsYCMSVsMultV0AAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicityV0A);
2370 f3dHistPrimRawPtVsYVsMultZNAAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicityZNA);
2371 f3dHistPrimRawPtVsYCMSVsMultZNAAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicityZNA);
2372 f3dHistPrimRawPtVsYVsMultTRKAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicityTRK);
2373 f3dHistPrimRawPtVsYCMSVsMultTRKAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicityTRK);
2374 f3dHistPrimRawPtVsYVsMultSPDAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicitySPD);
2375 f3dHistPrimRawPtVsYCMSVsMultSPDAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicitySPD);
2376
df661cb7 2377 if(lStackNatural){f3dHistPrimRawPtVsYVsMultNonInjAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicity);}
a18e0a39 2378 f3dHistPrimRawPtVsYVsMultMCAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart, lNumberOfCharged);
2379 f3dHistPrimRawPtVsYVsVertexZAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart, mcPrimaryVtx.At(2));
bcb6ffdb 2380 }
2381 if( lPdgcodeCurrentPart == 310 ){
2382 f3dHistPrimRawPtVsYVsMultK0Short->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicity);
388b34d3 2383 f3dHistPrimRawPtVsYCMSVsMultK0Short->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicity);
68e484c4 2384
2385 f3dHistPrimRawPtVsYVsMultV0AK0Short->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicityV0A);
2386 f3dHistPrimRawPtVsYCMSVsMultV0AK0Short->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicityV0A);
2387 f3dHistPrimRawPtVsYVsMultZNAK0Short->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicityZNA);
2388 f3dHistPrimRawPtVsYCMSVsMultZNAK0Short->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicityZNA);
2389 f3dHistPrimRawPtVsYVsMultTRKK0Short->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicityTRK);
2390 f3dHistPrimRawPtVsYCMSVsMultTRKK0Short->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicityTRK);
2391 f3dHistPrimRawPtVsYVsMultSPDK0Short->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicitySPD);
2392 f3dHistPrimRawPtVsYCMSVsMultSPDK0Short->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicitySPD);
2393
df661cb7 2394 if(lStackNatural){f3dHistPrimRawPtVsYVsMultNonInjK0Short->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicity);}
a18e0a39 2395 f3dHistPrimRawPtVsYVsMultMCK0Short->Fill(lPtCurrentPart, lRapCurrentPart, lNumberOfCharged);
2396 f3dHistPrimRawPtVsYVsVertexZK0Short->Fill(lPtCurrentPart, lRapCurrentPart, mcPrimaryVtx.At(2));
bcb6ffdb 2397 }
2398 //Decay Length Acquisition=====================================================
2399 Double_t decaylength = -1;
2400 Double_t lV0Mass = -1;
2401
2402 if( !(lCurrentParticleForLambdaCheck->GetDaughter(0) < 0) ) {
2403 TParticle* lDght0ofV0 = lMCstack->Particle( lCurrentParticleForLambdaCheck->GetDaughter(0) ); //get first daughter
2404 if(lDght0ofV0){ // skip if not defined.
2405 decaylength = TMath::Sqrt(
2406 TMath::Power( lCurrentParticleForLambdaCheck->Vx() - lDght0ofV0->Vx() , 2) +
2407 TMath::Power( lCurrentParticleForLambdaCheck->Vy() - lDght0ofV0->Vy() , 2) +
2408 TMath::Power( lCurrentParticleForLambdaCheck->Vz() - lDght0ofV0->Vz() , 2)
2409 );
2410 //Need to correct for relativitity! Involves multiplying by mass and dividing by momentum.
2411 if(TMath::Abs( lPdgcodeCurrentPart ) == 3122 ) { lV0Mass = 1.115683; }
2412 if(TMath::Abs( lPdgcodeCurrentPart ) == 310 ) { lV0Mass = 0.497614; }
ad0d3645 2413 if( lCurrentParticleForLambdaCheck->P() + 1e-10 != 0 ) decaylength = ( lV0Mass * decaylength ) / ( lCurrentParticleForLambdaCheck->P() + 1e-10 );
2414 if( lCurrentParticleForLambdaCheck->P() + 1e-10 == 0 ) decaylength = 1e+5;
bcb6ffdb 2415 }
2416 }
2417 if( lPdgcodeCurrentPart == 3122) f3dHistPrimRawPtVsYVsDecayLengthLambda ->Fill( lPtCurrentPart, lRapCurrentPart , decaylength );
2418 if( lPdgcodeCurrentPart == -3122) f3dHistPrimRawPtVsYVsDecayLengthAntiLambda ->Fill( lPtCurrentPart, lRapCurrentPart , decaylength );
2419 if( lPdgcodeCurrentPart == 310) f3dHistPrimRawPtVsYVsDecayLengthK0Short ->Fill( lPtCurrentPart, lRapCurrentPart , decaylength );
2420 }
2421 }//End of loop on tracks
2422//----- End Loop on Lambda, K0Short ------------------------------------------------------------
2423
1d94e33b 2424
2425 f2dHistMultiplicityVsTrueBeforeTrigSel->Fill ( lMultiplicity , lNumberOfCharged );
2426
a18e0a39 2427 fTreeVariableMultiplicityMC = lNumberOfCharged;
2428
1d94e33b 2429 fHistGenVertexZBeforeTrigSel->Fill( (mcPrimaryVtx.At(2)) );
2430
bcb6ffdb 2431 lPdgcodeCurrentPart = 0;
2432 lRapCurrentPart = 0;
2433 lPtCurrentPart = 0;
2434
2435//------------------------------------------------
2436// Physics Selection
2437//------------------------------------------------
87e78684 2438
2439 UInt_t maskIsSelected = ((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected();
2440 Bool_t isSelected = 0;
2441 Bool_t isSelectedExtra = kTRUE; //extra sel, default YES
2442 isSelected = (maskIsSelected & AliVEvent::kMB) == AliVEvent::kMB;
2443
2444 //pA triggering: CINT7
2445 if( fkSwitchINT7 ) isSelected = (maskIsSelected & AliVEvent::kINT7) == AliVEvent::kINT7;
2446
246807eb 2447 if(fkSkipTrigger==kFALSE){
2448 //Extra selection applies if with/without SDD is to be dealth with
2449 if( fkFastOnly == "kFastOnly"){
2450 //If not kFastOnly, isSelectedExtra will be kFALSE; procedure will reject it
2451 isSelectedExtra = (maskIsSelected & AliVEvent::kFastOnly) == AliVEvent::kFastOnly;
2452 }
2453 if( fkFastOnly == "NotkFastOnly"){
2454 //If not kFastOnly, isSelectedExtra will be kTRUE; procedure will accept it
2455 isSelectedExtra = !( (maskIsSelected & AliVEvent::kFastOnly) == AliVEvent::kFastOnly );
2456 }
2457
2458 //Standard Min-Bias Selection
2459 if ( ! isSelected ) {
2460 PostData(1, fListHistV0);
2461 PostData(2, fTree);
2462 return;
2463 }
2464 //Check if goes through extra selections
2465 //isSelectedExtra will be true in case -> fkFastOnly==""
2466 //isSelectedExtra will be true in case -> fkFastOnly=="kFastOnly" && bit kFastOnly ON
2467 //isSelectedExtra will be true in case -> fkFastOnly=="NotkFastOnly" && bit kFastOnly OFF
2468 if ( !isSelectedExtra ) {
2469 PostData(1, fListHistV0);
2470 PostData(2, fTree);
2471 return;
2472 }
87e78684 2473 }
2474
2475 f2dHistMultiplicityVsTrueForTrigEvt->Fill ( lMultiplicity , lNumberOfCharged );
2476 fHistGenVertexZForTrigEvt->Fill( mcPrimaryVtx.At(2) );
2477
bcb6ffdb 2478//------------------------------------------------
2479// After Trigger Selection
2480//------------------------------------------------
2481
2482 lNumberOfV0s = lESDevent->GetNumberOfV0s();
2483
2484 //Set variable for filling tree afterwards!
bcb6ffdb 2485 fHistV0MultiplicityForTrigEvt->Fill(lNumberOfV0s);
2486 fHistMultiplicityForTrigEvt->Fill ( lMultiplicity );
5d43de53 2487 fHistMultiplicityV0AForTrigEvt ->Fill( lMultiplicityV0A );
2488 fHistMultiplicityZNAForTrigEvt ->Fill( lMultiplicityZNA );
2489 fHistMultiplicityTRKForTrigEvt ->Fill( lMultiplicityTRK );
2490 fHistMultiplicitySPDForTrigEvt ->Fill( lMultiplicitySPD );
bcb6ffdb 2491
2492//------------------------------------------------
2493// Getting: Primary Vertex + MagField Info
2494//------------------------------------------------
2495
2496 const AliESDVertex *lPrimaryTrackingESDVtx = lESDevent->GetPrimaryVertexTracks();
2497 // get the vtx stored in ESD found with tracks
2498 lPrimaryTrackingESDVtx->GetXYZ( lTrkgPrimaryVtxPos );
2499
2500 const AliESDVertex *lPrimaryBestESDVtx = lESDevent->GetPrimaryVertex();
2501 // get the best primary vertex available for the event
2502 // As done in AliCascadeVertexer, we keep the one which is the best one available.
2503 // between : Tracking vertex > SPD vertex > TPC vertex > default SPD vertex
2504 // This one will be used for next calculations (DCA essentially)
2505 lPrimaryBestESDVtx->GetXYZ( lBestPrimaryVtxPos );
2506
2507 Double_t lPrimaryVtxPosition[3];
2508 const AliVVertex *primaryVtx = lESDevent->GetPrimaryVertex();
2509 lPrimaryVtxPosition[0] = primaryVtx->GetX();
2510 lPrimaryVtxPosition[1] = primaryVtx->GetY();
2511 lPrimaryVtxPosition[2] = primaryVtx->GetZ();
2512 fHistPVx->Fill( lPrimaryVtxPosition[0] );
2513 fHistPVy->Fill( lPrimaryVtxPosition[1] );
2514 fHistPVz->Fill( lPrimaryVtxPosition[2] );
2515
1d94e33b 2516 f2dHistMultiplicityVsVertexZForTrigEvt->Fill( lMultiplicity, lPrimaryVtxPosition[2] );
2517
14ba3f35 2518 //------------------------------------------------
d693307a 2519 // Primary Vertex Requirements Section:
2520 // ---> pp and PbPb: Only requires |z|<10cm
2521 // ---> pPb: all requirements checked at this stage
14ba3f35 2522 //------------------------------------------------
2523
d693307a 2524 //Roberto's PV selection criteria, implemented 17th April 2013
2525
2526 /* vertex selection */
2527 Bool_t fHasVertex = kFALSE;
2528
2529 const AliESDVertex *vertex = lESDevent->GetPrimaryVertexTracks();
2530 if (vertex->GetNContributors() < 1) {
2531 vertex = lESDevent->GetPrimaryVertexSPD();
2532 if (vertex->GetNContributors() < 1) fHasVertex = kFALSE;
2533 else fHasVertex = kTRUE;
2534 TString vtxTyp = vertex->GetTitle();
2535 Double_t cov[6]={0};
2536 vertex->GetCovarianceMatrix(cov);
2537 Double_t zRes = TMath::Sqrt(cov[5]);
2538 if (vtxTyp.Contains("vertexer:Z") && (zRes>0.25)) fHasVertex = kFALSE;
2539 }
2540 else fHasVertex = kTRUE;
2541
2542 //Is First event in chunk rejection: Still present!
2543 if(fkpAVertexSelection==kTRUE && fHasVertex == kFALSE) {
2544 AliWarning("Pb / | PV does not satisfy selection criteria!");
14ba3f35 2545 PostData(1, fListHistV0);
2546 PostData(2, fTree);
2547 return;
2548 }
d693307a 2549
2550 //Is First event in chunk rejection: Still present!
14ba3f35 2551 if(fkpAVertexSelection==kTRUE && fUtils->IsFirstEventInChunk(lESDevent)) {
2552 AliWarning("Pb / | This is the first event in the chunk!");
2553 PostData(1, fListHistV0);
2554 PostData(2, fTree);
2555 return;
2556 }
d693307a 2557
2558 //17 April Fix: Always do primary vertex Z selection, after pA vertex selection from Roberto
2559 if(TMath::Abs(lBestPrimaryVtxPos[2]) > 10.0) {
2560 AliWarning("Pb / | Z position of Best Prim Vtx | > 10.0 cm ... return !");
14ba3f35 2561 PostData(1, fListHistV0);
2562 PostData(2, fTree);
2563 return;
2564 }
2565
2566 f2dHistMultiplicityVsVertexZ->Fill( lMultiplicity, lPrimaryVtxPosition[2] );
2567
2568 lMagneticField = lESDevent->GetMagneticField( );
2569 fHistV0MultiplicityForSelEvt ->Fill( lNumberOfV0s );
2570 fHistMultiplicity->Fill(lMultiplicity);
2571 fHistMultiplicityV0A->Fill(lMultiplicityV0A);
2572 fHistMultiplicityZNA->Fill(lMultiplicityZNA);
2573 fHistMultiplicityTRK->Fill(lMultiplicityTRK);
2574 fHistMultiplicitySPD->Fill(lMultiplicitySPD);
2575 f2dHistMultiplicityVsTrue->Fill ( lMultiplicity , lNumberOfCharged );
2576 fHistGenVertexZ->Fill( (mcPrimaryVtx.At(2)) );
2577 //------------------------------------------------
bcb6ffdb 2578// SKIP: Events with well-established PVtx
2579//------------------------------------------------
2580
2581 const AliESDVertex *lPrimaryTrackingESDVtxCheck = lESDevent->GetPrimaryVertexTracks();
2582 const AliESDVertex *lPrimarySPDVtx = lESDevent->GetPrimaryVertexSPD();
14ba3f35 2583 if (!lPrimarySPDVtx->GetStatus() && !lPrimaryTrackingESDVtxCheck->GetStatus() && fkpAVertexSelection == kFALSE){
bcb6ffdb 2584 AliWarning("Pb / No SPD prim. vertex nor prim. Tracking vertex ... return !");
2585 PostData(1, fListHistV0);
2586 PostData(2, fTree);
2587 return;
2588 }
1d94e33b 2589
2590 f2dHistMultiplicityVsVertexZNoTPCOnly->Fill( lMultiplicity, lPrimaryVtxPosition[2] );
bcb6ffdb 2591 fHistV0MultiplicityForSelEvtNoTPCOnly ->Fill( lNumberOfV0s );
2592 fHistMultiplicityNoTPCOnly->Fill(lMultiplicity);
5d43de53 2593 fHistMultiplicityV0ANoTPCOnly->Fill(lMultiplicityV0A);
2594 fHistMultiplicityZNANoTPCOnly->Fill(lMultiplicityZNA);
2595 fHistMultiplicityTRKNoTPCOnly->Fill(lMultiplicityTRK);
2596 fHistMultiplicitySPDNoTPCOnly->Fill(lMultiplicitySPD);
1d94e33b 2597 f2dHistMultiplicityVsTrueNoTPCOnly->Fill ( lMultiplicity , lNumberOfCharged );
2598 fHistGenVertexZNoTPCOnly->Fill( (mcPrimaryVtx.At(2)) );
bcb6ffdb 2599//------------------------------------------------
2600// Pileup Rejection Studies
2601//------------------------------------------------
2602
2603 // FIXME : quality selection regarding pile-up rejection
776ebcfc 2604 if(lESDevent->IsPileupFromSPD() && !fkIsNuclear && fkRejectPileup ){// 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
bcb6ffdb 2605 AliWarning("Pb / This is tagged as Pileup from SPD... return !");
2606 PostData(1, fListHistV0);
2607 PostData(2, fTree);
2608 return;
2609 }
1d94e33b 2610 f2dHistMultiplicityVsVertexZNoTPCOnlyNoPileup->Fill( lMultiplicity, lPrimaryVtxPosition[2] );
bcb6ffdb 2611 fHistV0MultiplicityForSelEvtNoTPCOnlyNoPileup ->Fill( lNumberOfV0s );
5d43de53 2612
bcb6ffdb 2613 fHistMultiplicityNoTPCOnlyNoPileup->Fill(lMultiplicity);
5d43de53 2614 fHistMultiplicityV0ANoTPCOnlyNoPileup->Fill(lMultiplicityV0A);
2615 fHistMultiplicityZNANoTPCOnlyNoPileup->Fill(lMultiplicityZNA);
2616 fHistMultiplicityTRKNoTPCOnlyNoPileup->Fill(lMultiplicityTRK);
2617 fHistMultiplicitySPDNoTPCOnlyNoPileup->Fill(lMultiplicitySPD);
2618
1d94e33b 2619 f2dHistMultiplicityVsTrueNoTPCOnlyNoPileup->Fill ( lMultiplicity , lNumberOfCharged );
2620 fHistGenVertexZNoTPCOnlyNoPileup->Fill( (mcPrimaryVtx.At(2)) );
bcb6ffdb 2621 //Do control histograms without the IsFromVertexerZ events, but consider them in analysis...
2622 if( ! (lESDevent->GetPrimaryVertex()->IsFromVertexerZ() ) ){
2623 fHistPVxAnalysis->Fill( lPrimaryVtxPosition[0] );
2624 fHistPVyAnalysis->Fill( lPrimaryVtxPosition[1] );
2625 fHistPVzAnalysis->Fill( lPrimaryVtxPosition[2] );
2626 if ( lHasHighPtLambda == kTRUE ){
2627 fHistPVxAnalysisHasHighPtLambda->Fill( lPrimaryVtxPosition[0] );
2628 fHistPVyAnalysisHasHighPtLambda->Fill( lPrimaryVtxPosition[1] );
2629 fHistPVzAnalysisHasHighPtLambda->Fill( lPrimaryVtxPosition[2] );
2630 }
2631 }
2632
a18e0a39 2633 fTreeVariableVertexZ = lPrimaryVtxPosition[2];
2634
653265df 2635 fTreeVariablePVx = lPrimaryVtxPosition[0];
2636 fTreeVariablePVy = lPrimaryVtxPosition[1];
2637 fTreeVariablePVz = lPrimaryVtxPosition[2];
2638
2639 fTreeVariableMCPVx = (mcPrimaryVtx.At(0));
2640 fTreeVariableMCPVy = (mcPrimaryVtx.At(1));
2641 fTreeVariableMCPVz = (mcPrimaryVtx.At(2));
2642
bcb6ffdb 2643//------------------------------------------------
2644// stack loop starts here
2645//------------------------------------------------
2646
2647//---> Loop over ALL PARTICLES
2648
2649 for (Int_t iMc = 0; iMc < (lMCstack->GetNtrack()); iMc++) {
2650 TParticle *p0 = lMCstack->Particle(iMc);
2651 if (!p0) {
2652 //Printf("ERROR: particle with label %d not found in lMCstack (mc loop)", iMc);
2653 continue;
2654 }
2655 lPdgcodeCurrentPart = p0->GetPdgCode();
2656
2657 // Keep only K0s, Lambda and AntiLambda:
3db0901a 2658 if ( (lPdgcodeCurrentPart != 310 ) && (lPdgcodeCurrentPart != 3122 ) && (lPdgcodeCurrentPart != -3122 ) && (TMath::Abs(lPdgcodeCurrentPart) != 321 ) ) continue;
bcb6ffdb 2659
2660 lRapCurrentPart = MyRapidity(p0->Energy(),p0->Pz());
2661 lPtCurrentPart = p0->Pt();
2662
2663 //Use Physical Primaries only for filling PrimRaw Histograms!
2664 if ( lMCstack->IsPhysicalPrimary(iMc)!=kTRUE ) continue;
2665
2666 if( lPdgcodeCurrentPart == 3122 ){
b2c306f0 2667 //NRaw
2668 f3dHistPrimAnalysisPtVsYVsMultLambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicity);
2669 f3dHistPrimAnalysisPtVsYCMSVsMultLambda->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicity);
2670 //NTrue
2671 f3dHistPrimAnalysisPtVsYVsMultMCLambda->Fill(lPtCurrentPart, lRapCurrentPart, lNumberOfCharged);
2672 f3dHistPrimAnalysisPtVsYCMSVsMultMCLambda->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lNumberOfCharged);
2673 //Other stuff
68e484c4 2674 f3dHistPrimAnalysisPtVsYVsMultV0ALambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicityV0A);
2675 f3dHistPrimAnalysisPtVsYCMSVsMultV0ALambda->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicityV0A);
2676 f3dHistPrimAnalysisPtVsYVsMultZNALambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicityZNA);
2677 f3dHistPrimAnalysisPtVsYCMSVsMultZNALambda->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicityZNA);
2678 f3dHistPrimAnalysisPtVsYVsMultTRKLambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicityTRK);
2679 f3dHistPrimAnalysisPtVsYCMSVsMultTRKLambda->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicityTRK);
2680 f3dHistPrimAnalysisPtVsYVsMultSPDLambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicitySPD);
2681 f3dHistPrimAnalysisPtVsYCMSVsMultSPDLambda->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicitySPD);
bcb6ffdb 2682 }
2683 if( lPdgcodeCurrentPart == -3122 ){
b2c306f0 2684 //NRaw
2685 f3dHistPrimAnalysisPtVsYVsMultAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicity);
2686 f3dHistPrimAnalysisPtVsYCMSVsMultAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicity);
2687 //NTrue
2688 f3dHistPrimAnalysisPtVsYVsMultMCAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart, lNumberOfCharged);
2689 f3dHistPrimAnalysisPtVsYCMSVsMultMCAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lNumberOfCharged);
2690 //Other stuff
68e484c4 2691 f3dHistPrimAnalysisPtVsYVsMultV0AAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicityV0A);
2692 f3dHistPrimAnalysisPtVsYCMSVsMultV0AAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicityV0A);
2693 f3dHistPrimAnalysisPtVsYVsMultZNAAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicityZNA);
2694 f3dHistPrimAnalysisPtVsYCMSVsMultZNAAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicityZNA);
2695 f3dHistPrimAnalysisPtVsYVsMultTRKAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicityTRK);
2696 f3dHistPrimAnalysisPtVsYCMSVsMultTRKAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicityTRK);
2697 f3dHistPrimAnalysisPtVsYVsMultSPDAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicitySPD);
2698 f3dHistPrimAnalysisPtVsYCMSVsMultSPDAntiLambda->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicitySPD);
2699
bcb6ffdb 2700 }
2701 if( lPdgcodeCurrentPart == 310 ){
b2c306f0 2702 //NRaw
2703 f3dHistPrimAnalysisPtVsYVsMultK0Short->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicity);
2704 f3dHistPrimAnalysisPtVsYCMSVsMultK0Short->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicity);
2705 //NTrue
2706 f3dHistPrimAnalysisPtVsYVsMultMCK0Short->Fill(lPtCurrentPart, lRapCurrentPart, lNumberOfCharged);
2707 f3dHistPrimAnalysisPtVsYCMSVsMultMCK0Short->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lNumberOfCharged);
2708 //Other Stuff
68e484c4 2709 f3dHistPrimAnalysisPtVsYVsMultV0AK0Short->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicityV0A);
2710 f3dHistPrimAnalysisPtVsYCMSVsMultV0AK0Short->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicityV0A);
2711 f3dHistPrimAnalysisPtVsYVsMultZNAK0Short->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicityZNA);
2712 f3dHistPrimAnalysisPtVsYCMSVsMultZNAK0Short->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicityZNA);
2713 f3dHistPrimAnalysisPtVsYVsMultTRKK0Short->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicityTRK);
2714 f3dHistPrimAnalysisPtVsYCMSVsMultTRKK0Short->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicityTRK);
2715 f3dHistPrimAnalysisPtVsYVsMultSPDK0Short->Fill(lPtCurrentPart, lRapCurrentPart, lMultiplicitySPD);
2716 f3dHistPrimAnalysisPtVsYCMSVsMultSPDK0Short->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicitySPD);
bcb6ffdb 2717 }
3db0901a 2718 //Cross-check with Charged Kaons...
2719 if( lPdgcodeCurrentPart == 321 ){
2720 //V0A
2721 f3dHistPrimAnalysisPtVsYCMSVsMultV0AKPlus->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicityV0A);
2722 }
2723 if( lPdgcodeCurrentPart == -321 ){
2724 //V0A
2725 f3dHistPrimAnalysisPtVsYCMSVsMultV0AKMinus->Fill(lPtCurrentPart, lRapCurrentPart+fpArapidityShift, lMultiplicityV0A);
2726 }
2727
bcb6ffdb 2728 }
2729
c228a5af 2730//----- Loop on primary Xi, Omega --------------------------------------------------------------
2731 for (Int_t iCurrentLabelStack = 0; iCurrentLabelStack < lNbMCPrimary; iCurrentLabelStack++)
2732 {// This is the begining of the loop on primaries
2733
2734 TParticle* lCurrentParticlePrimary = 0x0;
2735 lCurrentParticlePrimary = lMCstack->Particle( iCurrentLabelStack );
2736 if(!lCurrentParticlePrimary){
2737 Printf("Cascade loop %d - MC TParticle pointer to current stack particle = 0x0 ! Skip ...\n", iCurrentLabelStack );
2738 continue;
2739 }
2740 if ( TMath::Abs(lCurrentParticlePrimary->GetPdgCode()) == 3312 || TMath::Abs(lCurrentParticlePrimary->GetPdgCode()) == 3334 ) {
2741 Double_t lRapXiMCPrimary = -100;
2742 if( (lCurrentParticlePrimary->Energy() - lCurrentParticlePrimary->Pz() +1.e-13) != 0 ) {
2743 if ( (lCurrentParticlePrimary->Energy() + lCurrentParticlePrimary->Pz()) / (lCurrentParticlePrimary->Energy() - lCurrentParticlePrimary->Pz() +1.e-13) !=0 ){
2744 lRapXiMCPrimary = 0.5*TMath::Log( (lCurrentParticlePrimary->Energy() + lCurrentParticlePrimary->Pz()) / (lCurrentParticlePrimary->Energy() - lCurrentParticlePrimary->Pz() +1.e-13) );
2745 }
2746 }
2747
2748 //=================================================================================
2749 // Xi Histograms
2750 if( lCurrentParticlePrimary->GetPdgCode() == 3312 ){
2751 lPtCurrentPart = lCurrentParticlePrimary->Pt();
2752 f3dHistGenSelectedPtVsYVsMultXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicity);
e039e6b3 2753 f3dHistGenSelectedPtVsYCMSVsMultXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicity);
68e484c4 2754 f3dHistGenSelectedPtVsYVsMultV0AXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicityV0A);
2755 f3dHistGenSelectedPtVsYCMSVsMultV0AXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicityV0A);
2756 f3dHistGenSelectedPtVsYVsMultZNAXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicityZNA);
2757 f3dHistGenSelectedPtVsYCMSVsMultZNAXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicityZNA);
2758 f3dHistGenSelectedPtVsYVsMultTRKXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicityTRK);
2759 f3dHistGenSelectedPtVsYCMSVsMultTRKXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicityTRK);
2760 f3dHistGenSelectedPtVsYVsMultSPDXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicitySPD);
2761 f3dHistGenSelectedPtVsYCMSVsMultSPDXiMinus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicitySPD);
c228a5af 2762 }
68e484c4 2763 if( lCurrentParticlePrimary->GetPdgCode() == -3312 ){
c228a5af 2764 lPtCurrentPart = lCurrentParticlePrimary->Pt();
2765 f3dHistGenSelectedPtVsYVsMultXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicity);
e039e6b3 2766 f3dHistGenSelectedPtVsYCMSVsMultXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicity);
68e484c4 2767 f3dHistGenSelectedPtVsYVsMultV0AXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicityV0A);
2768 f3dHistGenSelectedPtVsYCMSVsMultV0AXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicityV0A);
2769 f3dHistGenSelectedPtVsYVsMultZNAXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicityZNA);
2770 f3dHistGenSelectedPtVsYCMSVsMultZNAXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicityZNA);
2771 f3dHistGenSelectedPtVsYVsMultTRKXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicityTRK);
2772 f3dHistGenSelectedPtVsYCMSVsMultTRKXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicityTRK);
2773 f3dHistGenSelectedPtVsYVsMultSPDXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary, lMultiplicitySPD);
2774 f3dHistGenSelectedPtVsYCMSVsMultSPDXiPlus->Fill(lPtCurrentPart, lRapXiMCPrimary+fpArapidityShift, lMultiplicitySPD);
c228a5af 2775 }
68e484c4 2776 }
c228a5af 2777 }
2778//----- End Loop on primary Xi, Omega ----------------------------------------------------------
2779
bcb6ffdb 2780//------------------------------------------------
2781// MAIN LAMBDA LOOP STARTS HERE
2782//------------------------------------------------
2783
2784 //Variable definition
2785 Int_t lOnFlyStatus = 0;
2786 Double_t lChi2V0 = 0;
2787 Double_t lDcaV0Daughters = 0, lDcaV0ToPrimVertex = 0;
2788 Double_t lDcaPosToPrimVertex = 0, lDcaNegToPrimVertex = 0;
2789 Double_t lV0CosineOfPointingAngle = 0;
2790 Double_t lV0Radius = 0, lPt = 0;
2791 Double_t lRapK0Short = 0, lRapLambda = 0;
2792 Double_t lInvMassK0s = 0, lInvMassLambda = 0, lInvMassAntiLambda = 0;
2793 Double_t lAlphaV0 = 0, lPtArmV0 = 0;
2794 Double_t fMinV0Pt = 0;
2795 Double_t fMaxV0Pt = 100;
2796
2797 Int_t nv0s = 0;
2798 nv0s = lESDevent->GetNumberOfV0s();
2799
2800 for (Int_t iV0 = 0; iV0 < nv0s; iV0++)
2801 {// This is the begining of the V0 loop
2802 AliESDv0 *v0 = ((AliESDEvent*)lESDevent)->GetV0(iV0);
2803 if (!v0) continue;
2804
4f8ed367 2805 //---> Fix On-the-Fly candidates
2806 if( v0->GetParamN()->Charge() > 0 && v0->GetParamP()->Charge() < 0 ){
2807 fHistSwappedV0Counter -> Fill( 1 );
2808 }else{
2809 fHistSwappedV0Counter -> Fill( 0 );
2810 }
2811 if ( fkUseOnTheFly ) CheckChargeV0(v0);
2812
2813
bcb6ffdb 2814 Double_t tV0mom[3];
2815 v0->GetPxPyPz( tV0mom[0],tV0mom[1],tV0mom[2] );
2816 Double_t lV0TotalMomentum = TMath::Sqrt(
2817 tV0mom[0]*tV0mom[0]+tV0mom[1]*tV0mom[1]+tV0mom[2]*tV0mom[2] );
2818
2819 Double_t tDecayVertexV0[3]; v0->GetXYZ(tDecayVertexV0[0],tDecayVertexV0[1],tDecayVertexV0[2]);
2820 lV0Radius = TMath::Sqrt(tDecayVertexV0[0]*tDecayVertexV0[0]+tDecayVertexV0[1]*tDecayVertexV0[1]);
2821 lPt = v0->Pt();
2822 lRapK0Short = v0->RapK0Short();
2823 lRapLambda = v0->RapLambda();
11960ef4 2824
2825 //Set Variables for later filling
2826 fTreeVariableV0x = tDecayVertexV0[0];
2827 fTreeVariableV0y = tDecayVertexV0[1];
2828 fTreeVariableV0z = tDecayVertexV0[2];
2829
2830 //Set Variables for later filling
2831 fTreeVariableV0Px = tV0mom[0];
2832 fTreeVariableV0Py = tV0mom[1];
2833 fTreeVariableV0Pz = tV0mom[2];
2834
bcb6ffdb 2835 if ((lPt<fMinV0Pt)||(fMaxV0Pt<lPt)) continue;
2836
2837 UInt_t lKeyPos = (UInt_t)TMath::Abs(v0->GetPindex());
2838 UInt_t lKeyNeg = (UInt_t)TMath::Abs(v0->GetNindex());
2839
2840 Double_t lMomPos[3]; v0->GetPPxPyPz(lMomPos[0],lMomPos[1],lMomPos[2]);
2841 Double_t lMomNeg[3]; v0->GetNPxPyPz(lMomNeg[0],lMomNeg[1],lMomNeg[2]);
2842
2843 AliESDtrack *pTrack=((AliESDEvent*)lESDevent)->GetTrack(lKeyPos);
2844 AliESDtrack *nTrack=((AliESDEvent*)lESDevent)->GetTrack(lKeyNeg);
2845 if (!pTrack || !nTrack) {
2846 Printf("ERROR: Could not retreive one of the daughter track");
2847 continue;
2848 }
2849
2850 fTreeVariableNegEta = nTrack->Eta();
2851 fTreeVariablePosEta = pTrack->Eta();
2852
060d8ca6 2853 fTreeVariableNegPx = lMomNeg[0]; fTreeVariableNegPy = lMomNeg[1]; fTreeVariableNegPz = lMomNeg[2];
2854 fTreeVariablePosPx = lMomPos[0]; fTreeVariablePosPy = lMomPos[1]; fTreeVariablePosPz = lMomPos[2];
2855
bcb6ffdb 2856 // Filter like-sign V0 (next: add counter and distribution)
2857 if ( pTrack->GetSign() == nTrack->GetSign()){
2858 continue;
2859 }
2860
2861 //________________________________________________________________________
2862 // Track quality cuts
2863 Float_t lPosTrackCrossedRows = pTrack->GetTPCClusterInfo(2,1);
2864 Float_t lNegTrackCrossedRows = nTrack->GetTPCClusterInfo(2,1);
4f8ed367 2865 fTreeVariableLeastNbrCrossedRows = (Int_t) lPosTrackCrossedRows;
bcb6ffdb 2866 if( lNegTrackCrossedRows < fTreeVariableLeastNbrCrossedRows )
4f8ed367 2867 fTreeVariableLeastNbrCrossedRows = (Int_t) lNegTrackCrossedRows;
bcb6ffdb 2868
2869 // TPC refit condition (done during reconstruction for Offline but not for On-the-fly)
2870 if( !(pTrack->GetStatus() & AliESDtrack::kTPCrefit)) continue;
2871 if( !(nTrack->GetStatus() & AliESDtrack::kTPCrefit)) continue;
2872
f068724a 2873 //Get status flags
2874 fTreeVariablePosTrackStatus = pTrack->GetStatus();
2875 fTreeVariableNegTrackStatus = nTrack->GetStatus();
2876
7f4db1cd 2877 if ( ( ( ( pTrack->GetTPCClusterInfo(2,1) ) < 70 ) || ( ( nTrack->GetTPCClusterInfo(2,1) ) < 70 ) )&&(fkTakeAllTracks==kFALSE) ) continue;
bcb6ffdb 2878
2879 //GetKinkIndex condition
2880 if( pTrack->GetKinkIndex(0)>0 || nTrack->GetKinkIndex(0)>0 ) continue;
2881
2882 //Findable clusters > 0 condition
2883 if( pTrack->GetTPCNclsF()<=0 || nTrack->GetTPCNclsF()<=0 ) continue;
2884
2885 //Compute ratio Crossed Rows / Findable clusters
2886 //Note: above test avoids division by zero!
ad0d3645 2887 Float_t lPosTrackCrossedRowsOverFindable = -1;
2888 Float_t lNegTrackCrossedRowsOverFindable = -1;
2889 if ( ((double)(pTrack->GetTPCNclsF()) ) != 0 ) lPosTrackCrossedRowsOverFindable = lPosTrackCrossedRows / ((double)(pTrack->GetTPCNclsF()));
2890 if ( ((double)(nTrack->GetTPCNclsF()) ) != 0 ) lNegTrackCrossedRowsOverFindable = lNegTrackCrossedRows / ((double)(nTrack->GetTPCNclsF()));
bcb6ffdb 2891
2892 fTreeVariableLeastRatioCrossedRowsOverFindable = lPosTrackCrossedRowsOverFindable;
2893 if( lNegTrackCrossedRowsOverFindable < fTreeVariableLeastRatioCrossedRowsOverFindable )
2894 fTreeVariableLeastRatioCrossedRowsOverFindable = lNegTrackCrossedRowsOverFindable;
2895
2896 //Lowest Cut Level for Ratio Crossed Rows / Findable = 0.8, set here
7f4db1cd 2897 if ( (fTreeVariableLeastRatioCrossedRowsOverFindable < 0.8)&&(fkTakeAllTracks==kFALSE) ) continue;
bcb6ffdb 2898
2899 //End track Quality Cuts
2900 //________________________________________________________________________
2901
2902 lDcaPosToPrimVertex = TMath::Abs(pTrack->GetD(lPrimaryVtxPosition[0],
2903 lPrimaryVtxPosition[1],
2904 lMagneticField) );
2905
2906 lDcaNegToPrimVertex = TMath::Abs(nTrack->GetD(lPrimaryVtxPosition[0],
2907 lPrimaryVtxPosition[1],
2908 lMagneticField) );
2909
2910 lOnFlyStatus = v0->GetOnFlyStatus();
2911 lChi2V0 = v0->GetChi2V0();
2912 lDcaV0Daughters = v0->GetDcaV0Daughters();
2913 lDcaV0ToPrimVertex = v0->GetD(lPrimaryVtxPosition[0],lPrimaryVtxPosition[1],lPrimaryVtxPosition[2]);
2914 lV0CosineOfPointingAngle = v0->GetV0CosineOfPointingAngle(lPrimaryVtxPosition[0],lPrimaryVtxPosition[1],lPrimaryVtxPosition[2]);
2915 fTreeVariableV0CosineOfPointingAngle=lV0CosineOfPointingAngle;
2916
2917 // Getting invariant mass infos directly from ESD
2918 v0->ChangeMassHypothesis(310);
2919 lInvMassK0s = v0->GetEffMass();
2920 v0->ChangeMassHypothesis(3122);
2921 lInvMassLambda = v0->GetEffMass();
2922 v0->ChangeMassHypothesis(-3122);
2923 lInvMassAntiLambda = v0->GetEffMass();
2924 lAlphaV0 = v0->AlphaV0();
2925 lPtArmV0 = v0->PtArmV0();
2926
2927 //fTreeVariableOnFlyStatus = lOnFlyStatus;
2928 //fHistV0OnFlyStatus->Fill(lOnFlyStatus);
2929
2930//===============================================
2931// Monte Carlo Association starts here
2932//===============================================
2933
2934 //---> Set Everything to "I don't know" before starting
2935
2936 fTreeVariablePIDPositive = 0;
2937 fTreeVariablePIDNegative = 0;
2938
2939 fTreeVariableIndexStatus = 0;
2940 fTreeVariableIndexStatusMother = 0;
2941
2942 fTreeVariablePtMother = -1;
2943 fTreeVariablePtMC = -1;
2944 fTreeVariableRapMC = -100;
2945
2946 fTreeVariablePID = -1;
2947 fTreeVariablePIDMother = -1;
2948
2949 fTreeVariablePrimaryStatus = 0;
2950 fTreeVariablePrimaryStatusMother = 0;
2951 fTreeVariableV0CreationRadius = -1;
a5ff2395 2952
2953 fTreeVariableNegPhysicalStatus = 0;
2954 fTreeVariablePosPhysicalStatus = 0;
2955
2956 Int_t lblPosV0Dghter = (Int_t) TMath::Abs( pTrack->GetLabel() );
bcb6ffdb 2957 Int_t lblNegV0Dghter = (Int_t) TMath::Abs( nTrack->GetLabel() );
2958
2959 TParticle* mcPosV0Dghter = lMCstack->Particle( lblPosV0Dghter );
2960 TParticle* mcNegV0Dghter = lMCstack->Particle( lblNegV0Dghter );
2961
2962 fTreeVariablePosTransvMomentumMC = mcPosV0Dghter->Pt();
2963 fTreeVariableNegTransvMomentumMC = mcNegV0Dghter->Pt();
2964
2965 Int_t lPIDPositive = mcPosV0Dghter -> GetPdgCode();
2966 Int_t lPIDNegative = mcNegV0Dghter -> GetPdgCode();
2967
2968 fTreeVariablePIDPositive = lPIDPositive;
2969 fTreeVariablePIDNegative = lPIDNegative;
2970
2971 Int_t lblMotherPosV0Dghter = mcPosV0Dghter->GetFirstMother() ;
2972 Int_t lblMotherNegV0Dghter = mcNegV0Dghter->GetFirstMother();
a5ff2395 2973
2974 if( lMCstack->IsPhysicalPrimary (lblNegV0Dghter) ) fTreeVariableNegPhysicalStatus = 1; //Is Primary!
2975 if( lMCstack->IsSecondaryFromWeakDecay(lblNegV0Dghter) ) fTreeVariableNegPhysicalStatus = 2; //Weak Decay!
2976 if( lMCstack->IsSecondaryFromMaterial (lblNegV0Dghter) ) fTreeVariableNegPhysicalStatus = 3; //Material Int!
bcb6ffdb 2977
a5ff2395 2978 if( lMCstack->IsPhysicalPrimary (lblPosV0Dghter) ) fTreeVariablePosPhysicalStatus = 1; //Is Primary!
2979 if( lMCstack->IsSecondaryFromWeakDecay(lblPosV0Dghter) ) fTreeVariablePosPhysicalStatus = 2; //Weak Decay!
2980 if( lMCstack->IsSecondaryFromMaterial (lblPosV0Dghter) ) fTreeVariablePosPhysicalStatus = 3; //Material Int!
2981
bcb6ffdb 2982 if( lblMotherPosV0Dghter == lblMotherNegV0Dghter && lblMotherPosV0Dghter > -1 ){
2983 //either label is fine, they're equal at this stage
2984 TParticle* pThisV0 = lMCstack->Particle( lblMotherPosV0Dghter );
2985 //Set tree variables
2986 fTreeVariablePID = pThisV0->GetPdgCode(); //PDG Code
2987 fTreeVariablePtMC = pThisV0->Pt(); //Perfect Pt
11960ef4 2988
df661cb7 2989 fTreeVariableIsNonInjected = lMCevent->IsFromBGEvent(lblMotherPosV0Dghter); //Is it?
2990 if (!fTreeVariableIsNonInjected){
2991 if (!(pThisV0->GetFirstMother()<0))
2992 {fTreeVariableIsNonInjected = kTRUE;} // because there are primaries (ALICE definition) not produced in the collision
2993 }
2994
11960ef4 2995 //Set Variables for later filling
2996 //Be careful: Vx, Vy, Vz: Creation vertex. So decay position is the
2997 //Creation vertex of any one of the daughters!
2998 fTreeVariableMCV0x = mcPosV0Dghter->Vx();
2999 fTreeVariableMCV0y = mcPosV0Dghter->Vy();
3000 fTreeVariableMCV0z = mcPosV0Dghter->Vz();
3001
3002 //Set Variables for later filling
3003 fTreeVariableMCV0Px = pThisV0->Px();
3004 fTreeVariableMCV0Py = pThisV0->Py();
3005 fTreeVariableMCV0Pz = pThisV0->Pz();
3006
bcb6ffdb 3007 //Only Interested if it's a Lambda, AntiLambda or K0s
3008 //Avoid the Junction Bug! PYTHIA has particles with Px=Py=Pz=E=0 occasionally,
3009 //having particle code 88 (unrecognized by PDG), for documentation purposes.
3010 //Even ROOT's TParticle::Y() is not prepared to deal with that exception!
3011 //Note that TParticle::Pt() is immune (that would just return 0)...
3012 //Though granted that that should be extremely rare in this precise condition...
3013 if( TMath::Abs(fTreeVariablePID) == 3122 || fTreeVariablePID==310 ){
3014 fTreeVariableRapMC = pThisV0->Y(); //Perfect Y
3015 }
7e81bb32 3016 fTreeVariableV0CreationRadius = TMath::Sqrt(
3017 TMath::Power( ( (mcPrimaryVtx.At(0)) - (pThisV0->Vx()) ) , 2) +
3018 TMath::Power( ( (mcPrimaryVtx.At(1)) - (pThisV0->Vy()) ) , 2) +
3019 TMath::Power( ( (mcPrimaryVtx.At(2)) - (pThisV0->Vz()) ) , 2)
3020 );
bcb6ffdb 3021 if( lblMotherPosV0Dghter < lNbMCPrimary ) fTreeVariableIndexStatus = 1; //looks primary
3022 if( lblMotherPosV0Dghter >= lNbMCPrimary ) fTreeVariableIndexStatus = 2; //looks secondary
3023 if( lMCstack->IsPhysicalPrimary (lblMotherPosV0Dghter) ) fTreeVariablePrimaryStatus = 1; //Is Primary!
3024 if( lMCstack->IsSecondaryFromWeakDecay(lblMotherPosV0Dghter) ) fTreeVariablePrimaryStatus = 2; //Weak Decay!
3025 if( lMCstack->IsSecondaryFromMaterial (lblMotherPosV0Dghter) ) fTreeVariablePrimaryStatus = 3; //Material Int!
3026
3027 //Now we try to acquire the V0 parent particle, if possible
3028 Int_t lblThisV0Parent = pThisV0->GetFirstMother();
3029 if ( lblThisV0Parent > -1 ){ //if it has a parent, get it and store specs
3030 TParticle* pThisV0Parent = lMCstack->Particle( lblThisV0Parent );
3031 fTreeVariablePIDMother = pThisV0Parent->GetPdgCode(); //V0 Mother PDG
3032 fTreeVariablePtMother = pThisV0Parent->Pt(); //V0 Mother Pt
3033 //Primary Status for the V0 Mother particle
3034 if( lblThisV0Parent < lNbMCPrimary ) fTreeVariableIndexStatusMother = 1; //looks primary
3035 if( lblThisV0Parent >= lNbMCPrimary ) fTreeVariableIndexStatusMother = 2; //looks secondary
3036 if( lMCstack->IsPhysicalPrimary (lblThisV0Parent) ) fTreeVariablePrimaryStatusMother = 1; //Is Primary!
3037 if( lMCstack->IsSecondaryFromWeakDecay(lblThisV0Parent) ) fTreeVariablePrimaryStatusMother = 2; //Weak Decay!
3038 if( lMCstack->IsSecondaryFromMaterial (lblThisV0Parent) ) fTreeVariablePrimaryStatusMother = 3; //Material Int!
3039 }
3040 }
3041
3042 fTreeVariablePt = v0->Pt();
3043 fTreeVariableChi2V0 = lChi2V0;
3044 fTreeVariableDcaV0ToPrimVertex = lDcaV0ToPrimVertex;
3045 fTreeVariableDcaV0Daughters = lDcaV0Daughters;
3046 fTreeVariableV0CosineOfPointingAngle = lV0CosineOfPointingAngle;
3047 fTreeVariableV0Radius = lV0Radius;
3048 fTreeVariableDcaPosToPrimVertex = lDcaPosToPrimVertex;
3049 fTreeVariableDcaNegToPrimVertex = lDcaNegToPrimVertex;
3050 fTreeVariableInvMassK0s = lInvMassK0s;
3051 fTreeVariableInvMassLambda = lInvMassLambda;
3052 fTreeVariableInvMassAntiLambda = lInvMassAntiLambda;
3053 fTreeVariableRapK0Short = lRapK0Short;
3054
3055 fTreeVariableRapLambda = lRapLambda;
3056 fTreeVariableAlphaV0 = lAlphaV0;
3057 fTreeVariablePtArmV0 = lPtArmV0;
3058
246807eb 3059 if( fkDoNotCallTPCdEdx == kFALSE ){
3060 //Official means of acquiring N-sigmas
bcb6ffdb 3061 fTreeVariableNSigmasPosProton = fPIDResponse->NumberOfSigmasTPC( pTrack, AliPID::kProton );
3062 fTreeVariableNSigmasPosPion = fPIDResponse->NumberOfSigmasTPC( pTrack, AliPID::kPion );
3063 fTreeVariableNSigmasNegProton = fPIDResponse->NumberOfSigmasTPC( nTrack, AliPID::kProton );
3064 fTreeVariableNSigmasNegPion = fPIDResponse->NumberOfSigmasTPC( nTrack, AliPID::kPion );
246807eb 3065 }else{
3066 fTreeVariableNSigmasPosProton = 0;
3067 fTreeVariableNSigmasPosPion = 0;
3068 fTreeVariableNSigmasNegProton = 0;
3069 fTreeVariableNSigmasNegPion = 0;
3070 }
3071
bcb6ffdb 3072//tDecayVertexV0[0],tDecayVertexV0[1],tDecayVertexV0[2]
ab9d4ee1 3073 Double_t lDistanceTravelled = TMath::Sqrt(
bcb6ffdb 3074 TMath::Power( tDecayVertexV0[0] - lBestPrimaryVtxPos[0] , 2) +
3075 TMath::Power( tDecayVertexV0[1] - lBestPrimaryVtxPos[1] , 2) +
3076 TMath::Power( tDecayVertexV0[2] - lBestPrimaryVtxPos[2] , 2)
3077 );
ad0d3645 3078 fTreeVariableDistOverTotMom = 1e+5;
ab9d4ee1 3079 if( lV0TotalMomentum + 1e-10 != 0 ) fTreeVariableDistOverTotMom = lDistanceTravelled / (lV0TotalMomentum + 1e-10); //avoid division by zero, to be sure
bcb6ffdb 3080
3081 Double_t lMomentumPosTemp[3];
3082 pTrack->GetPxPyPz(lMomentumPosTemp);
3083 Double_t lPtPosTemporary = sqrt(pow(lMomentumPosTemp[0],2) + pow(lMomentumPosTemp[1],2));
3084
3085 Double_t lMomentumNegTemp[3];
3086 nTrack->GetPxPyPz(lMomentumNegTemp);
3087 Double_t lPtNegTemporary = sqrt(pow(lMomentumNegTemp[0],2) + pow(lMomentumNegTemp[1],2));
3088
3089 fTreeVariablePosTransvMomentum = lPtPosTemporary;
3090 fTreeVariableNegTransvMomentum = lPtNegTemporary;
3091
3092
3093//------------------------------------------------
3094// Fill Tree!
3095//------------------------------------------------
3096
3097 // The conditionals are meant to decrease excessive
3098 // memory usage!
3099
3100 //Modified version: Keep only OnFlyStatus == 0
3101 //Keep only if included in a parametric InvMass Region 20 sigmas away from peak
3102
3103 //First Selection: Reject OnFly
4f8ed367 3104 if( (lOnFlyStatus == 0 && fkUseOnTheFly == kFALSE) || (lOnFlyStatus != 0 && fkUseOnTheFly == kTRUE ) ){
bcb6ffdb 3105 //Second Selection: rough 20-sigma band, parametric.
3106 //K0Short: Enough to parametrize peak broadening with linear function.
3107 Double_t lUpperLimitK0Short = (5.63707e-01) + (1.14979e-02)*fTreeVariablePt;
3108 Double_t lLowerLimitK0Short = (4.30006e-01) - (1.10029e-02)*fTreeVariablePt;
3109 //Lambda: Linear (for higher pt) plus exponential (for low-pt broadening)
3110 //[0]+[1]*x+[2]*TMath::Exp(-[3]*x)
3111 Double_t lUpperLimitLambda = (1.13688e+00) + (5.27838e-03)*fTreeVariablePt + (8.42220e-02)*TMath::Exp(-(3.80595e+00)*fTreeVariablePt);
3112 Double_t lLowerLimitLambda = (1.09501e+00) - (5.23272e-03)*fTreeVariablePt - (7.52690e-02)*TMath::Exp(-(3.46339e+00)*fTreeVariablePt);
3113 //Do Selection
3114 if( (fTreeVariableInvMassLambda < lUpperLimitLambda && fTreeVariableInvMassLambda > lLowerLimitLambda ) ||
3115 (fTreeVariableInvMassAntiLambda < lUpperLimitLambda && fTreeVariableInvMassAntiLambda > lLowerLimitLambda ) ||
3116 (fTreeVariableInvMassK0s < lUpperLimitK0Short && fTreeVariableInvMassK0s > lLowerLimitK0Short ) ){
4f8ed367 3117 //Pre-selection in case this is AA...
246807eb 3118 if( fkIsNuclear == kFALSE && fkSpecialExecution == kFALSE ) fTree->Fill();
4f8ed367 3119 if( fkIsNuclear == kTRUE){
3120 //If this is a nuclear collision___________________
3121 // ... pre-filter with daughter eta selection only (not TPC)
246807eb 3122 if ( TMath::Abs(fTreeVariableNegEta)<0.8 && TMath::Abs(fTreeVariablePosEta)<0.8 && fkSpecialExecution == kFALSE ){
3123 if( !fkSaveAssociatedOnly || (fkSaveAssociatedOnly &&( TMath::Abs(fTreeVariablePID) == 3122 || fTreeVariablePID==310 ) ))fTree->Fill();
3124 }
4f8ed367 3125 }//end nuclear_____________________________________
bcb6ffdb 3126 }
3127 }
246807eb 3128 //Special Execution: hypertriton exploration
3129 if( lOnFlyStatus == 0 && fkSpecialExecution == kTRUE){
3130 if ( TMath::Abs(fTreeVariableNegEta)<0.8 && TMath::Abs(fTreeVariablePosEta)<0.8 ){
3131 if( !fkSaveAssociatedOnly || (fkSaveAssociatedOnly &&( TMath::Abs(fTreeVariablePID) == 1010010030 ) ) ) fTree->Fill();
3132 }
3133 }
bcb6ffdb 3134
3135//------------------------------------------------
3136// Fill tree over.
3137//------------------------------------------------
3138
3139
3140 }// This is the end of the V0 loop
3141
c228a5af 3142//------------------------------------------------
3143
bcb6ffdb 3144 // Post output data.
3145 PostData(1, fListHistV0);
3146 PostData(2, fTree);
3147}
3148
3149//________________________________________________________________________
3150void AliAnalysisTaskExtractPerformanceV0::Terminate(Option_t *)
3151{
3152 // Draw result to the screen
3153 // Called once at the end of the query
3154
3155 TList *cRetrievedList = 0x0;
3156 cRetrievedList = (TList*)GetOutputData(1);
3157 if(!cRetrievedList){
3158 Printf("ERROR - AliAnalysisTaskExtractV0 : ouput data container list not available\n");
3159 return;
3160 }
3161
3162 fHistV0MultiplicityForTrigEvt = dynamic_cast<TH1F*> ( cRetrievedList->FindObject("fHistV0MultiplicityForTrigEvt") );
3163 if (!fHistV0MultiplicityForTrigEvt) {
3164 Printf("ERROR - AliAnalysisTaskExtractV0 : fHistV0MultiplicityForTrigEvt not available");
3165 return;
3166 }
3167
3168 TCanvas *canCheck = new TCanvas("AliAnalysisTaskExtractV0","V0 Multiplicity",10,10,510,510);
3169 canCheck->cd(1)->SetLogy();
3170
3171 fHistV0MultiplicityForTrigEvt->SetMarkerStyle(22);
3172 fHistV0MultiplicityForTrigEvt->DrawCopy("E");
3173}
3174
3175//----------------------------------------------------------------------------
3176
3177Double_t AliAnalysisTaskExtractPerformanceV0::MyRapidity(Double_t rE, Double_t rPz) const
3178{
3179 // Local calculation for rapidity
ad0d3645 3180 Double_t ReturnValue = -100;
3181 if( (rE-rPz+1.e-13) != 0 && (rE+rPz) != 0 ){
3182 ReturnValue = 0.5*TMath::Log((rE+rPz)/(rE-rPz+1.e-13));
3183 }
3184 return ReturnValue;
bcb6ffdb 3185}
4f8ed367 3186
3187//________________________________________________________________________
3188void AliAnalysisTaskExtractPerformanceV0::CheckChargeV0(AliESDv0 *v0)
3189{
3190 // This function checks charge of negative and positive daughter tracks.
3191 // If incorrectly defined (onfly vertexer), swaps out.
3192 if( v0->GetParamN()->Charge() > 0 && v0->GetParamP()->Charge() < 0 ){
3193 //V0 daughter track swapping is required! Note: everything is swapped here... P->N, N->P
3194 Long_t lCorrectNidx = v0->GetPindex();
3195 Long_t lCorrectPidx = v0->GetNindex();
3196 Double32_t lCorrectNmom[3];
3197 Double32_t lCorrectPmom[3];
3198 v0->GetPPxPyPz( lCorrectNmom[0], lCorrectNmom[1], lCorrectNmom[2] );
3199 v0->GetNPxPyPz( lCorrectPmom[0], lCorrectPmom[1], lCorrectPmom[2] );
3200
3201 AliExternalTrackParam lCorrectParamN(
3202 v0->GetParamP()->GetX() ,
3203 v0->GetParamP()->GetAlpha() ,
3204 v0->GetParamP()->GetParameter() ,
3205 v0->GetParamP()->GetCovariance()
3206 );
3207 AliExternalTrackParam lCorrectParamP(
3208 v0->GetParamN()->GetX() ,
3209 v0->GetParamN()->GetAlpha() ,
3210 v0->GetParamN()->GetParameter() ,
3211 v0->GetParamN()->GetCovariance()
3212 );
3213 lCorrectParamN.SetMostProbablePt( v0->GetParamP()->GetMostProbablePt() );
3214 lCorrectParamP.SetMostProbablePt( v0->GetParamN()->GetMostProbablePt() );
3215
3216 //Get Variables___________________________________________________
3217 Double_t lDcaV0Daughters = v0 -> GetDcaV0Daughters();
3218 Double_t lCosPALocal = v0 -> GetV0CosineOfPointingAngle();
3219 Bool_t lOnFlyStatusLocal = v0 -> GetOnFlyStatus();
3220
3221 //Create Replacement Object_______________________________________
3222 AliESDv0 *v0correct = new AliESDv0(lCorrectParamN,lCorrectNidx,lCorrectParamP,lCorrectPidx);
3223 v0correct->SetDcaV0Daughters ( lDcaV0Daughters );
3224 v0correct->SetV0CosineOfPointingAngle ( lCosPALocal );
3225 v0correct->ChangeMassHypothesis ( kK0Short );
3226 v0correct->SetOnFlyStatus ( lOnFlyStatusLocal );
3227
3228 //Reverse Cluster info..._________________________________________
3229 v0correct->SetClusters( v0->GetClusters( 1 ), v0->GetClusters ( 0 ) );
3230
3231 *v0 = *v0correct;
3232 //Proper cleanup..._______________________________________________
3233 v0correct->Delete();
3234 v0correct = 0x0;
3235
3236 //Just another cross-check and output_____________________________
3237 if( v0->GetParamN()->Charge() > 0 && v0->GetParamP()->Charge() < 0 ) {
3238 AliWarning("Found Swapped Charges, tried to correct but something FAILED!");
3239 }else{
3240 //AliWarning("Found Swapped Charges and fixed.");
3241 }
3242 //________________________________________________________________
3243 }else{
3244 //Don't touch it! ---
3245 //Printf("Ah, nice. Charges are already ordered...");
3246 }
3247 return;
3248}
bcb6ffdb 3249