]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGLF/STRANGENESS/Cascades/AliAnalysisTaskStrangenessVsMultiplicityMC.cxx
Run number added for tests
[u/mrichter/AliRoot.git] / PWGLF / STRANGENESS / Cascades / AliAnalysisTaskStrangenessVsMultiplicityMC.cxx
CommitLineData
af0d4791 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// This task is meant to explore the possibility of using a VZERO amplitude
19// based multiplicity estimator for proton-proton collisions. For this, two
20// main operation methods for this task are foreseen:
21//
22// 1) (under development) it should act as an auxiliary task and provide a
23// calibrated estimator
24//
25// 2) "Debug mode" which will also create a ROOT TTree object with event
26// by event info potentially used for exploration / calibration. This
27// includes the following info:
28//
29// --- All VZERO Amplitudes (saved as Float_t)
30// --- (optional) time for each channel
31// --- (optional) time width for each channel
32// --- GetReferenceMultiplicity Estimator, |eta|<0.5
33// --- GetReferenceMultiplicity Estimator, |eta|<0.8
34// --- (if MC) True Multiplicity, |eta|<0.5
35// --- (if MC) True Multiplicity, 2.8 < eta < 5.8 (VZEROA region)
36// --- (if MC) True Multiplicity, -3.7 < eta <-1.7 (VZEROC region)
37// --- Run Number
38//
39// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
40
41class TTree;
42class TParticle;
43class TVector3;
44
45//class AliMCEventHandler;
46//class AliMCEvent;
47//class AliStack;
48
49class AliESDVertex;
50class AliAODVertex;
51class AliESDv0;
52class AliAODv0;
53
54#include <Riostream.h>
55#include "TList.h"
56#include "TH1.h"
57#include "TH2.h"
58#include "TH3.h"
59#include "TFile.h"
60#include "THnSparse.h"
61#include "TVector3.h"
62#include "TCanvas.h"
63#include "TMath.h"
64#include "TLegend.h"
65//#include "AliLog.h"
66
67#include "AliESDEvent.h"
68#include "AliAODEvent.h"
69#include "AliV0vertexer.h"
70#include "AliCascadeVertexer.h"
71#include "AliESDpid.h"
72#include "AliESDtrack.h"
73#include "AliESDtrackCuts.h"
74#include "AliInputEventHandler.h"
75#include "AliAnalysisManager.h"
76#include "AliMCEventHandler.h"
77#include "AliMCEvent.h"
78#include "AliStack.h"
79#include "AliCentrality.h"
80
81#include "AliCFContainer.h"
82#include "AliMultiplicity.h"
83#include "AliAODMCParticle.h"
84#include "AliESDcascade.h"
85#include "AliAODcascade.h"
86#include "AliESDUtils.h"
87#include "AliGenEventHeader.h"
88#include "AliAnalysisTaskSE.h"
89#include "AliAnalysisUtils.h"
90#include "AliAnalysisTaskStrangenessVsMultiplicityMC.h"
91
92using std::cout;
93using std::endl;
94
95ClassImp(AliAnalysisTaskStrangenessVsMultiplicityMC)
96
97AliAnalysisTaskStrangenessVsMultiplicityMC::AliAnalysisTaskStrangenessVsMultiplicityMC()
98 : AliAnalysisTaskSE(), fListHist(0), fTreeEvent(0), fTreeV0(0), fTreeCascade(0), fPIDResponse(0), fESDtrackCuts(0),
99 fkSaveV0Tree ( kFALSE ),
100 fkSaveCascadeTree ( kTRUE ),
101 fkRunVertexers ( kTRUE ),
102 //---> Variables for fTreeEvent
103 fAmplitude_V0A (0),
104 fAmplitude_V0C (0),
105 fAmplitude_V0AEq (0),
106 fAmplitude_V0CEq (0),
107 fCentrality_V0A(0),
108 fCentrality_V0C(0),
109 fCentrality_V0M(0),
110 fCentrality_V0AEq(0),
111 fCentrality_V0CEq(0),
112 fCentrality_V0MEq(0),
113 fRefMultEta5(0),
114 fRefMultEta8(0),
115 fTrueMultEta5(0),
116 fTrueMultEta8(0),
117 fTrueMultVZEROA(0),
118 fTrueMultVZEROC(0),
119 fRunNumber(0),
120 //---> Variables for fTreeCascade
121 fTreeCascVarCharge(0),
122 fTreeCascVarMassAsXi(0),
123 fTreeCascVarMassAsOmega(0),
124 fTreeCascVarPt(0),
125 fTreeCascVarPtMC(0),
126 fTreeCascVarRapXi(0),
127 fTreeCascVarRapOmega(0),
128 fTreeCascVarRapMC(0),
129 fTreeCascVarNegEta(0),
130 fTreeCascVarPosEta(0),
131 fTreeCascVarBachEta(0),
132 fTreeCascVarDCACascDaughters(0),
133 fTreeCascVarDCABachToPrimVtx(0),
134 fTreeCascVarDCAV0Daughters(0),
135 fTreeCascVarDCAV0ToPrimVtx(0),
136 fTreeCascVarDCAPosToPrimVtx(0),
137 fTreeCascVarDCANegToPrimVtx(0),
138 fTreeCascVarCascCosPointingAngle(0),
139 fTreeCascVarCascRadius(0),
140 fTreeCascVarV0Mass(0),
141 fTreeCascVarV0CosPointingAngle(0),
142 fTreeCascVarV0CosPointingAngleSpecial(0),
143 fTreeCascVarV0Radius(0),
144 fTreeCascVarLeastNbrClusters(0),
145 fTreeCascVarDistOverTotMom(0),
146 fTreeCascVarNegNSigmaPion(0),
147 fTreeCascVarNegNSigmaProton(0),
148 fTreeCascVarPosNSigmaPion(0),
149 fTreeCascVarPosNSigmaProton(0),
150 fTreeCascVarBachNSigmaPion(0),
151 fTreeCascVarBachNSigmaKaon(0),
152 fTreeCascVarCentV0A(0),
153 fTreeCascVarCentV0C(0),
154 fTreeCascVarCentV0M(0),
155 fTreeCascVarCentV0AEq(0),
156 fTreeCascVarCentV0CEq(0),
157 fTreeCascVarCentV0MEq(0),
158 fTreeCascVarAmpV0A(0),
159 fTreeCascVarAmpV0C(0),
160 fTreeCascVarAmpV0AEq(0),
161 fTreeCascVarAmpV0CEq(0),
162 fTreeCascVarRefMultEta8(0),
163 fTreeCascVarRefMultEta5(0),
164 fTreeCascVarTrueMultEta5(0),
165 fTreeCascVarTrueMultEta8(0),
166 fTreeCascVarTrueMultVZEROA(0),
167 fTreeCascVarTrueMultVZEROC(0),
168 fTreeCascVarIsPhysicalPrimary(0),
169 fTreeCascVarPID(0),
26d39641 170 fTreeCascVarRunNumber(0),
af0d4791 171 //---> Histograms
172 fHistEventCounter(0),
173 //---> MC Generated Histo (analysis level)
174 fHistPt_GenXiMinus(0),
175 fHistPt_GenXiPlus(0),
176 fHistPt_GenOmegaMinus(0),
177 fHistPt_GenOmegaPlus(0),
178
179 //VsRefMult
180 fHistPtVsRefMultEta5_GenXiMinus(0),
181 fHistPtVsRefMultEta5_GenXiPlus(0),
182 fHistPtVsRefMultEta5_GenOmegaMinus(0),
183 fHistPtVsRefMultEta5_GenOmegaPlus(0),
184 fHistPtVsRefMultEta8_GenXiMinus(0),
185 fHistPtVsRefMultEta8_GenXiPlus(0),
186 fHistPtVsRefMultEta8_GenOmegaMinus(0),
187 fHistPtVsRefMultEta8_GenOmegaPlus(0),
188
189 //VsCentralities
190 fHistPtVsCentV0A_GenXiMinus(0),
191 fHistPtVsCentV0A_GenXiPlus(0),
192 fHistPtVsCentV0A_GenOmegaMinus(0),
193 fHistPtVsCentV0A_GenOmegaPlus(0),
194 fHistPtVsCentV0C_GenXiMinus(0),
195 fHistPtVsCentV0C_GenXiPlus(0),
196 fHistPtVsCentV0C_GenOmegaMinus(0),
197 fHistPtVsCentV0C_GenOmegaPlus(0),
198 fHistPtVsCentV0M_GenXiMinus(0),
199 fHistPtVsCentV0M_GenXiPlus(0),
200 fHistPtVsCentV0M_GenOmegaMinus(0),
201 fHistPtVsCentV0M_GenOmegaPlus(0),
202
203 //Equalized
204 fHistPtVsCentV0AEq_GenXiMinus(0),
205 fHistPtVsCentV0AEq_GenXiPlus(0),
206 fHistPtVsCentV0AEq_GenOmegaMinus(0),
207 fHistPtVsCentV0AEq_GenOmegaPlus(0),
208 fHistPtVsCentV0CEq_GenXiMinus(0),
209 fHistPtVsCentV0CEq_GenXiPlus(0),
210 fHistPtVsCentV0CEq_GenOmegaMinus(0),
211 fHistPtVsCentV0CEq_GenOmegaPlus(0),
212 fHistPtVsCentV0MEq_GenXiMinus(0),
213 fHistPtVsCentV0MEq_GenXiPlus(0),
214 fHistPtVsCentV0MEq_GenOmegaMinus(0),
215 fHistPtVsCentV0MEq_GenOmegaPlus(0),
216
217 //VsAmp
218 fHistPtVsAmpV0A_GenXiMinus(0),
219 fHistPtVsAmpV0A_GenXiPlus(0),
220 fHistPtVsAmpV0A_GenOmegaMinus(0),
221 fHistPtVsAmpV0A_GenOmegaPlus(0),
222 fHistPtVsAmpV0C_GenXiMinus(0),
223 fHistPtVsAmpV0C_GenXiPlus(0),
224 fHistPtVsAmpV0C_GenOmegaMinus(0),
225 fHistPtVsAmpV0C_GenOmegaPlus(0),
226 fHistPtVsAmpV0M_GenXiMinus(0),
227 fHistPtVsAmpV0M_GenXiPlus(0),
228 fHistPtVsAmpV0M_GenOmegaMinus(0),
229 fHistPtVsAmpV0M_GenOmegaPlus(0),
230 //Equalized Amps
231 fHistPtVsAmpV0AEq_GenXiMinus(0),
232 fHistPtVsAmpV0AEq_GenXiPlus(0),
233 fHistPtVsAmpV0AEq_GenOmegaMinus(0),
234 fHistPtVsAmpV0AEq_GenOmegaPlus(0),
235 fHistPtVsAmpV0CEq_GenXiMinus(0),
236 fHistPtVsAmpV0CEq_GenXiPlus(0),
237 fHistPtVsAmpV0CEq_GenOmegaMinus(0),
238 fHistPtVsAmpV0CEq_GenOmegaPlus(0),
239 fHistPtVsAmpV0MEq_GenXiMinus(0),
240 fHistPtVsAmpV0MEq_GenXiPlus(0),
241 fHistPtVsAmpV0MEq_GenOmegaMinus(0),
242 fHistPtVsAmpV0MEq_GenOmegaPlus(0)
243
244//------------------------------------------------
245// Tree Variables
246{
247
248}
249
250AliAnalysisTaskStrangenessVsMultiplicityMC::AliAnalysisTaskStrangenessVsMultiplicityMC(const char *name)
251 : AliAnalysisTaskSE(name), fListHist(0), fTreeEvent(0), fTreeV0(0), fTreeCascade(0), fPIDResponse(0), fESDtrackCuts(0),
252 fkSaveV0Tree ( kFALSE ),
253 fkSaveCascadeTree ( kTRUE ),
254 fkRunVertexers ( kTRUE ),
255 //---> Variables for fTreeEvent
256 fAmplitude_V0A (0),
257 fAmplitude_V0C (0),
258 fAmplitude_V0AEq (0),
259 fAmplitude_V0CEq (0),
260 fCentrality_V0A(0),
261 fCentrality_V0C(0),
262 fCentrality_V0M(0),
263 fCentrality_V0AEq(0),
264 fCentrality_V0CEq(0),
265 fCentrality_V0MEq(0),
266 fRefMultEta5(0),
267 fRefMultEta8(0),
268 fTrueMultEta5(0),
269 fTrueMultEta8(0),
270 fTrueMultVZEROA(0),
271 fTrueMultVZEROC(0),
272 fRunNumber(0),
273 //---> Variables for fTreeCascade
274 fTreeCascVarCharge(0),
275 fTreeCascVarMassAsXi(0),
276 fTreeCascVarMassAsOmega(0),
277 fTreeCascVarPt(0),
278 fTreeCascVarPtMC(0),
279 fTreeCascVarRapXi(0),
280 fTreeCascVarRapOmega(0),
281 fTreeCascVarRapMC(0),
282 fTreeCascVarNegEta(0),
283 fTreeCascVarPosEta(0),
284 fTreeCascVarBachEta(0),
285 fTreeCascVarDCACascDaughters(0),
286 fTreeCascVarDCABachToPrimVtx(0),
287 fTreeCascVarDCAV0Daughters(0),
288 fTreeCascVarDCAV0ToPrimVtx(0),
289 fTreeCascVarDCAPosToPrimVtx(0),
290 fTreeCascVarDCANegToPrimVtx(0),
291 fTreeCascVarCascCosPointingAngle(0),
292 fTreeCascVarCascRadius(0),
293 fTreeCascVarV0Mass(0),
294 fTreeCascVarV0CosPointingAngle(0),
295 fTreeCascVarV0CosPointingAngleSpecial(0),
296 fTreeCascVarV0Radius(0),
297 fTreeCascVarLeastNbrClusters(0),
298 fTreeCascVarDistOverTotMom(0),
299 fTreeCascVarNegNSigmaPion(0),
300 fTreeCascVarNegNSigmaProton(0),
301 fTreeCascVarPosNSigmaPion(0),
302 fTreeCascVarPosNSigmaProton(0),
303 fTreeCascVarBachNSigmaPion(0),
304 fTreeCascVarBachNSigmaKaon(0),
305 fTreeCascVarCentV0A(0),
306 fTreeCascVarCentV0C(0),
307 fTreeCascVarCentV0M(0),
308 fTreeCascVarCentV0AEq(0),
309 fTreeCascVarCentV0CEq(0),
310 fTreeCascVarCentV0MEq(0),
311 fTreeCascVarAmpV0A(0),
312 fTreeCascVarAmpV0C(0),
313 fTreeCascVarAmpV0AEq(0),
314 fTreeCascVarAmpV0CEq(0),
315 fTreeCascVarRefMultEta8(0),
316 fTreeCascVarRefMultEta5(0),
317 fTreeCascVarTrueMultEta5(0),
318 fTreeCascVarTrueMultEta8(0),
319 fTreeCascVarTrueMultVZEROA(0),
320 fTreeCascVarTrueMultVZEROC(0),
321 fTreeCascVarIsPhysicalPrimary(0),
322 fTreeCascVarPID(0),
26d39641 323 fTreeCascVarRunNumber(0),
af0d4791 324 //---> Histograms
325 fHistEventCounter(0),
326 //---> MC Generated Histo (analysis level)
327 fHistPt_GenXiMinus(0),
328 fHistPt_GenXiPlus(0),
329 fHistPt_GenOmegaMinus(0),
330 fHistPt_GenOmegaPlus(0),
331
332 //VsRefMult
333 fHistPtVsRefMultEta5_GenXiMinus(0),
334 fHistPtVsRefMultEta5_GenXiPlus(0),
335 fHistPtVsRefMultEta5_GenOmegaMinus(0),
336 fHistPtVsRefMultEta5_GenOmegaPlus(0),
337 fHistPtVsRefMultEta8_GenXiMinus(0),
338 fHistPtVsRefMultEta8_GenXiPlus(0),
339 fHistPtVsRefMultEta8_GenOmegaMinus(0),
340 fHistPtVsRefMultEta8_GenOmegaPlus(0),
341
342 //VsCentralities
343 fHistPtVsCentV0A_GenXiMinus(0),
344 fHistPtVsCentV0A_GenXiPlus(0),
345 fHistPtVsCentV0A_GenOmegaMinus(0),
346 fHistPtVsCentV0A_GenOmegaPlus(0),
347 fHistPtVsCentV0C_GenXiMinus(0),
348 fHistPtVsCentV0C_GenXiPlus(0),
349 fHistPtVsCentV0C_GenOmegaMinus(0),
350 fHistPtVsCentV0C_GenOmegaPlus(0),
351 fHistPtVsCentV0M_GenXiMinus(0),
352 fHistPtVsCentV0M_GenXiPlus(0),
353 fHistPtVsCentV0M_GenOmegaMinus(0),
354 fHistPtVsCentV0M_GenOmegaPlus(0),
355
356 //Equalized
357 fHistPtVsCentV0AEq_GenXiMinus(0),
358 fHistPtVsCentV0AEq_GenXiPlus(0),
359 fHistPtVsCentV0AEq_GenOmegaMinus(0),
360 fHistPtVsCentV0AEq_GenOmegaPlus(0),
361 fHistPtVsCentV0CEq_GenXiMinus(0),
362 fHistPtVsCentV0CEq_GenXiPlus(0),
363 fHistPtVsCentV0CEq_GenOmegaMinus(0),
364 fHistPtVsCentV0CEq_GenOmegaPlus(0),
365 fHistPtVsCentV0MEq_GenXiMinus(0),
366 fHistPtVsCentV0MEq_GenXiPlus(0),
367 fHistPtVsCentV0MEq_GenOmegaMinus(0),
368 fHistPtVsCentV0MEq_GenOmegaPlus(0),
369
370 //VsAmp
371 fHistPtVsAmpV0A_GenXiMinus(0),
372 fHistPtVsAmpV0A_GenXiPlus(0),
373 fHistPtVsAmpV0A_GenOmegaMinus(0),
374 fHistPtVsAmpV0A_GenOmegaPlus(0),
375 fHistPtVsAmpV0C_GenXiMinus(0),
376 fHistPtVsAmpV0C_GenXiPlus(0),
377 fHistPtVsAmpV0C_GenOmegaMinus(0),
378 fHistPtVsAmpV0C_GenOmegaPlus(0),
379 fHistPtVsAmpV0M_GenXiMinus(0),
380 fHistPtVsAmpV0M_GenXiPlus(0),
381 fHistPtVsAmpV0M_GenOmegaMinus(0),
382 fHistPtVsAmpV0M_GenOmegaPlus(0),
383 //Equalized Amps
384 fHistPtVsAmpV0AEq_GenXiMinus(0),
385 fHistPtVsAmpV0AEq_GenXiPlus(0),
386 fHistPtVsAmpV0AEq_GenOmegaMinus(0),
387 fHistPtVsAmpV0AEq_GenOmegaPlus(0),
388 fHistPtVsAmpV0CEq_GenXiMinus(0),
389 fHistPtVsAmpV0CEq_GenXiPlus(0),
390 fHistPtVsAmpV0CEq_GenOmegaMinus(0),
391 fHistPtVsAmpV0CEq_GenOmegaPlus(0),
392 fHistPtVsAmpV0MEq_GenXiMinus(0),
393 fHistPtVsAmpV0MEq_GenXiPlus(0),
394 fHistPtVsAmpV0MEq_GenOmegaMinus(0),
395 fHistPtVsAmpV0MEq_GenOmegaPlus(0)
396{
397
398 //Re-vertex: Will only apply for cascade candidates
399
400 fV0VertexerSels[0] = 33. ; // max allowed chi2
401 fV0VertexerSels[1] = 0.02; // min allowed impact parameter for the 1st daughter (LHC09a4 : 0.05)
402 fV0VertexerSels[2] = 0.02; // min allowed impact parameter for the 2nd daughter (LHC09a4 : 0.05)
403 fV0VertexerSels[4] = 0.95; // min allowed cosine of V0's pointing angle (LHC09a4 : 0.99)
404 fV0VertexerSels[5] = 1.0 ; // min radius of the fiducial volume (LHC09a4 : 0.2)
405 fV0VertexerSels[6] = 200. ; // max radius of the fiducial volume (LHC09a4 : 100.0)
406
407 fCascadeVertexerSels[0] = 33. ; // max allowed chi2 (same as PDC07)
408 fCascadeVertexerSels[1] = 0.05 ; // min allowed V0 impact parameter (PDC07 : 0.05 / LHC09a4 : 0.025 )
409 fCascadeVertexerSels[2] = 0.010; // "window" around the Lambda mass (PDC07 : 0.008 / LHC09a4 : 0.010 )
410 fCascadeVertexerSels[3] = 0.03 ; // min allowed bachelor's impact parameter (PDC07 : 0.035 / LHC09a4 : 0.025 )
411 fCascadeVertexerSels[4] = 2.0 ; // max allowed DCA between the V0 and the bachelor (PDC07 : 0.1 / LHC09a4 : 0.2 )
412 fCascadeVertexerSels[5] = 0.95 ; // min allowed cosine of the cascade pointing angle (PDC07 : 0.9985 / LHC09a4 : 0.998 )
413 fCascadeVertexerSels[6] = 0.4 ; // min radius of the fiducial volume (PDC07 : 0.9 / LHC09a4 : 0.2 )
414 fCascadeVertexerSels[7] = 100. ; // max radius of the fiducial volume (PDC07 : 100 / LHC09a4 : 100 )
415
416
417 DefineOutput(1, TList::Class()); // Event Counter Histo
418 DefineOutput(2, TTree::Class()); // Event Tree
419 DefineOutput(3, TTree::Class()); // V0 Tree
420 DefineOutput(4, TTree::Class()); // Cascade Tree
421}
422
423
424AliAnalysisTaskStrangenessVsMultiplicityMC::~AliAnalysisTaskStrangenessVsMultiplicityMC()
425{
426//------------------------------------------------
427// DESTRUCTOR
428//------------------------------------------------
429
430 if (fListHist){
431 delete fListHist;
432 fListHist = 0x0;
433 }
434 if (fTreeEvent){
435 delete fTreeEvent;
436 fTreeEvent = 0x0;
437 }
438 if (fTreeV0){
439 delete fTreeV0;
440 fTreeV0 = 0x0;
441 }
442 if (fTreeCascade){
443 delete fTreeCascade;
444 fTreeCascade = 0x0;
445 }
446}
447
448//________________________________________________________________________
449void AliAnalysisTaskStrangenessVsMultiplicityMC::UserCreateOutputObjects()
450{
451
452 OpenFile(2);
453 // Called once
454
455//------------------------------------------------
456
457 fTreeEvent = new TTree("fTreeEvent","Event");
458
459//------------------------------------------------
460// fTree Branch definitions - Event by Event info
461//------------------------------------------------
462
463//-----------BASIC-INFO---------------------------
464
465 //--- VZERO Data (Integrated)
466 fTreeEvent->Branch("fAmplitude_V0A",&fAmplitude_V0A,"fAmplitude_V0A/F");
467 fTreeEvent->Branch("fAmplitude_V0C",&fAmplitude_V0C,"fAmplitude_V0C/F");
468 fTreeEvent->Branch("fAmplitude_V0AEq",&fAmplitude_V0AEq,"fAmplitude_V0AEq/F");
469 fTreeEvent->Branch("fAmplitude_V0CEq",&fAmplitude_V0CEq,"fAmplitude_V0CEq/F");
470
471 //Info from AliCentrality (not necessarily 'centrality' per se)
472 fTreeEvent->Branch("fCentrality_V0A",&fCentrality_V0A,"fCentrality_V0A/F");
473 fTreeEvent->Branch("fCentrality_V0C",&fCentrality_V0C,"fCentrality_V0C/F");
474 fTreeEvent->Branch("fCentrality_V0M",&fCentrality_V0A,"fCentrality_V0M/F");
475 fTreeEvent->Branch("fCentrality_V0AEq",&fCentrality_V0AEq,"fCentrality_V0AEq/F");
476 fTreeEvent->Branch("fCentrality_V0CEq",&fCentrality_V0CEq,"fCentrality_V0CEq/F");
477 fTreeEvent->Branch("fCentrality_V0MEq",&fCentrality_V0AEq,"fCentrality_V0MEq/F");
478
479 //Official GetReferenceMultiplicity
480 fTreeEvent->Branch("fRefMultEta5",&fRefMultEta5,"fRefMultEta5/I");
481 fTreeEvent->Branch("fRefMultEta8",&fRefMultEta8,"fRefMultEta8/I");
482
483 fTreeEvent->Branch("fTrueMultEta5",&fTrueMultEta5,"fTrueMultEta5/I");
484 fTreeEvent->Branch("fTrueMultEta8",&fTrueMultEta8,"fTrueMultEta8/I");
485 fTreeEvent->Branch("fTrueMultVZEROA",&fTrueMultVZEROA,"fTrueMultVZEROA/I");
486 fTreeEvent->Branch("fTrueMultVZEROC",&fTrueMultVZEROC,"fTrueMultVZEROC/I");
487
488 //Run Number
489 fTreeEvent->Branch("fRunNumber", &fRunNumber, "fRunNumber/I");
490
491 //Create Basic V0 Output Tree
492 fTreeV0 = new TTree( "fTreeV0", "V0 Candidates");
493
494 //Create Cascade output tree
495 fTreeCascade = new TTree("fTreeCascade","CascadeCandidates");
496
497//------------------------------------------------
498// fTreeCascade Branch definitions - Cascade Tree
499//------------------------------------------------
500
501//-----------BASIC-INFO---------------------------
502 fTreeCascade->Branch("fTreeCascVarCharge",&fTreeCascVarCharge,"fTreeCascVarCharge/I");
503 fTreeCascade->Branch("fTreeCascVarMassAsXi",&fTreeCascVarMassAsXi,"fTreeCascVarMassAsXi/F");
504 fTreeCascade->Branch("fTreeCascVarMassAsOmega",&fTreeCascVarMassAsOmega,"fTreeCascVarMassAsOmega/F");
505 fTreeCascade->Branch("fTreeCascVarPt",&fTreeCascVarPt,"fTreeCascVarPt/F");
506 fTreeCascade->Branch("fTreeCascVarPtMC",&fTreeCascVarPtMC,"fTreeCascVarPtMC/F");
507 fTreeCascade->Branch("fTreeCascVarRapXi",&fTreeCascVarRapXi,"fTreeCascVarRapXi/F");
508 fTreeCascade->Branch("fTreeCascVarRapOmega",&fTreeCascVarRapOmega,"fTreeCascVarRapOmega/F");
509 fTreeCascade->Branch("fTreeCascVarRapMC",&fTreeCascVarRapMC,"fTreeCascVarRapMC/F");
510 fTreeCascade->Branch("fTreeCascVarNegEta",&fTreeCascVarNegEta,"fTreeCascVarNegEta/F");
511 fTreeCascade->Branch("fTreeCascVarPosEta",&fTreeCascVarPosEta,"fTreeCascVarPosEta/F");
512 fTreeCascade->Branch("fTreeCascVarBachEta",&fTreeCascVarBachEta,"fTreeCascVarBachEta/F");
513//-----------INFO-FOR-CUTS------------------------
514 fTreeCascade->Branch("fTreeCascVarDCACascDaughters",&fTreeCascVarDCACascDaughters,"fTreeCascVarDCACascDaughters/F");
515 fTreeCascade->Branch("fTreeCascVarDCABachToPrimVtx",&fTreeCascVarDCABachToPrimVtx,"fTreeCascVarDCABachToPrimVtx/F");
516 fTreeCascade->Branch("fTreeCascVarDCAV0Daughters",&fTreeCascVarDCAV0Daughters,"fTreeCascVarDCAV0Daughters/F");
517 fTreeCascade->Branch("fTreeCascVarDCAV0ToPrimVtx",&fTreeCascVarDCAV0ToPrimVtx,"fTreeCascVarDCAV0ToPrimVtx/F");
518 fTreeCascade->Branch("fTreeCascVarDCAPosToPrimVtx",&fTreeCascVarDCAPosToPrimVtx,"fTreeCascVarDCAPosToPrimVtx/F");
519 fTreeCascade->Branch("fTreeCascVarDCANegToPrimVtx",&fTreeCascVarDCANegToPrimVtx,"fTreeCascVarDCANegToPrimVtx/F");
520 fTreeCascade->Branch("fTreeCascVarCascCosPointingAngle",&fTreeCascVarCascCosPointingAngle,"fTreeCascVarCascCosPointingAngle/F");
521 fTreeCascade->Branch("fTreeCascVarCascRadius",&fTreeCascVarCascRadius,"fTreeCascVarCascRadius/F");
522 fTreeCascade->Branch("fTreeCascVarV0Mass",&fTreeCascVarV0Mass,"fTreeCascVarV0Mass/F");
523 fTreeCascade->Branch("fTreeCascVarV0CosPointingAngle",&fTreeCascVarV0CosPointingAngle,"fTreeCascVarV0CosPointingAngle/F");
524 fTreeCascade->Branch("fTreeCascVarV0CosPointingAngleSpecial",&fTreeCascVarV0CosPointingAngleSpecial,"fTreeCascVarV0CosPointingAngleSpecial/F");
525 fTreeCascade->Branch("fTreeCascVarV0Radius",&fTreeCascVarV0Radius,"fTreeCascVarV0Radius/F");
526 fTreeCascade->Branch("fTreeCascVarLeastNbrClusters",&fTreeCascVarLeastNbrClusters,"fTreeCascVarLeastNbrClusters/I");
527//-----------MULTIPLICITY-INFO--------------------
528 fTreeCascade->Branch("fTreeCascVarCentV0A",&fTreeCascVarCentV0A,"fTreeCascVarCentV0A/F");
529 fTreeCascade->Branch("fTreeCascVarCentV0C",&fTreeCascVarCentV0C,"fTreeCascVarCentV0C/F");
530 fTreeCascade->Branch("fTreeCascVarCentV0M",&fTreeCascVarCentV0M,"fTreeCascVarCentV0M/F");
531 fTreeCascade->Branch("fTreeCascVarCentV0AEq",&fTreeCascVarCentV0AEq,"fTreeCascVarCentV0AEq/F");
532 fTreeCascade->Branch("fTreeCascVarCentV0CEq",&fTreeCascVarCentV0CEq,"fTreeCascVarCentV0CEq/F");
533 fTreeCascade->Branch("fTreeCascVarCentV0MEq",&fTreeCascVarCentV0MEq,"fTreeCascVarCentV0MEq/F");
534 fTreeCascade->Branch("fTreeCascVarAmpV0A",&fTreeCascVarAmpV0A,"fTreeCascVarAmpV0A/F");
535 fTreeCascade->Branch("fTreeCascVarAmpV0C",&fTreeCascVarAmpV0C,"fTreeCascVarAmpV0C/F");
536 fTreeCascade->Branch("fTreeCascVarAmpV0AEq",&fTreeCascVarAmpV0AEq,"fTreeCascVarAmpV0AEq/F");
537 fTreeCascade->Branch("fTreeCascVarAmpV0CEq",&fTreeCascVarAmpV0CEq,"fTreeCascVarAmpV0CEq/F");
538 fTreeCascade->Branch("fTreeCascVarRefMultEta8",&fTreeCascVarRefMultEta8,"fTreeCascVarRefMultEta8/I");
539 fTreeCascade->Branch("fTreeCascVarRefMultEta5",&fTreeCascVarRefMultEta5,"fTreeCascVarRefMultEta5/I");
540 fTreeCascade->Branch("fTreeCascVarTrueMultEta5",&fTreeCascVarTrueMultEta5,"fTreeCascVarTrueMultEta5/I");
541 fTreeCascade->Branch("fTreeCascVarTrueMultEta8",&fTreeCascVarTrueMultEta8,"fTreeCascVarTrueMultEta8/I");
542 fTreeCascade->Branch("fTreeCascVarTrueMultVZEROA",&fTreeCascVarTrueMultVZEROA,"fTreeCascVarTrueMultVZEROA/I");
543 fTreeCascade->Branch("fTreeCascVarTrueMultVZEROC",&fTreeCascVarTrueMultVZEROC,"fTreeCascVarTrueMultVZEROC/I");
544 fTreeCascade->Branch("fTreeCascVarIsPhysicalPrimary",&fTreeCascVarIsPhysicalPrimary,"fTreeCascVarIsPhysicalPrimary/I");
545 fTreeCascade->Branch("fTreeCascVarPID",&fTreeCascVarPID,"fTreeCascVarPID/I");
26d39641 546 fTreeCascade->Branch("fTreeCascVarRunNumber",&fTreeCascVarRunNumber,"fTreeCascVarRunNumber/I");
af0d4791 547//-----------DECAY-LENGTH-INFO--------------------
548 fTreeCascade->Branch("fTreeCascVarDistOverTotMom",&fTreeCascVarDistOverTotMom,"fTreeCascVarDistOverTotMom/F");
549//------------------------------------------------
550 fTreeCascade->Branch("fTreeCascVarNegNSigmaPion",&fTreeCascVarNegNSigmaPion,"fTreeCascVarNegNSigmaPion/F");
551 fTreeCascade->Branch("fTreeCascVarNegNSigmaProton",&fTreeCascVarNegNSigmaProton,"fTreeCascVarNegNSigmaProton/F");
552 fTreeCascade->Branch("fTreeCascVarPosNSigmaPion",&fTreeCascVarPosNSigmaPion,"fTreeCascVarPosNSigmaPion/F");
553 fTreeCascade->Branch("fTreeCascVarPosNSigmaProton",&fTreeCascVarPosNSigmaProton,"fTreeCascVarPosNSigmaProton/F");
554 fTreeCascade->Branch("fTreeCascVarBachNSigmaPion",&fTreeCascVarBachNSigmaPion,"fTreeCascVarBachNSigmaPion/F");
555 fTreeCascade->Branch("fTreeCascVarBachNSigmaKaon",&fTreeCascVarBachNSigmaKaon,"fTreeCascVarBachNSigmaKaon/F");
556
557//------------------------------------------------
558// Particle Identification Setup
559//------------------------------------------------
560
561 AliAnalysisManager *man=AliAnalysisManager::GetAnalysisManager();
562 AliInputEventHandler* inputHandler = (AliInputEventHandler*) (man->GetInputEventHandler());
563 fPIDResponse = inputHandler->GetPIDResponse();
564
565 // Multiplicity
566 if(! fESDtrackCuts ){
567 fESDtrackCuts = new AliESDtrackCuts();
568 }
569
570//------------------------------------------------
571// V0 Multiplicity Histograms
572//------------------------------------------------
573
574 // Create histograms
575 OpenFile(1);
576 fListHist = new TList();
577 fListHist->SetOwner(); // See http://root.cern.ch/root/html/TCollection.html#TCollection:SetOwner
578
579 if(! fHistEventCounter ) {
580 //Histogram Output: Event-by-Event
581 fHistEventCounter = new TH1D( "fHistEventCounter", ";Evt. Sel. Step;Count",5,0,5);
582 fHistEventCounter->GetXaxis()->SetBinLabel(1, "Processed");
583 fHistEventCounter->GetXaxis()->SetBinLabel(2, "Phys-Sel");
584 fHistEventCounter->GetXaxis()->SetBinLabel(3, "Has Vtx");
585 fHistEventCounter->GetXaxis()->SetBinLabel(4, "Vtx |z|<10cm");
586 fHistEventCounter->GetXaxis()->SetBinLabel(5, "Isn't Pileup");
587 fListHist->Add(fHistEventCounter);
588 }
589
590 //Histograms for Efficiency corrections... a bunch of them
591 //1D Histograms - Fine if efficiency doesn't change vs mult (expected)
592 //---> Always filled for |y|<0.5
593 if(! fHistPt_GenXiMinus ) {
594 fHistPt_GenXiMinus = new TH1D( "fHistPt_GenXiMinus", "Generated;p_{T} (GeV/c)",200,0,20); fListHist->Add(fHistPt_GenXiMinus); }
595 if(! fHistPt_GenXiPlus ) {
596 fHistPt_GenXiPlus = new TH1D( "fHistPt_GenXiPlus", "Generated;p_{T} (GeV/c)",200,0,20); fListHist->Add(fHistPt_GenXiPlus); }
597 if(! fHistPt_GenOmegaMinus ) {
598 fHistPt_GenOmegaMinus = new TH1D( "fHistPt_GenOmegaMinus", "Generated;p_{T} (GeV/c)",200,0,20); fListHist->Add(fHistPt_GenOmegaMinus); }
599 if(! fHistPt_GenOmegaPlus ) {
600 fHistPt_GenOmegaPlus = new TH1D( "fHistPt_GenOmegaPlus", "Generated;p_{T} (GeV/c)",200,0,20); fListHist->Add(fHistPt_GenOmegaPlus); }
601 //2D Histos for vs Mult calculation
602 if(! fHistPtVsRefMultEta5_GenXiMinus ) {
603 fHistPtVsRefMultEta5_GenXiMinus = new TH2D( "fHistPtVsRefMultEta5_GenXiMinus", "Generated;p_{T} (GeV/c); Mult",200,0,20,100,0,100); fListHist->Add(fHistPtVsRefMultEta5_GenXiMinus); }
604 if(! fHistPtVsRefMultEta5_GenXiPlus ) {
605 fHistPtVsRefMultEta5_GenXiPlus = new TH2D( "fHistPtVsRefMultEta5_GenXiPlus", "Generated;p_{T} (GeV/c); Mult",200,0,20,100,0,100); fListHist->Add(fHistPtVsRefMultEta5_GenXiPlus); }
606 if(! fHistPtVsRefMultEta5_GenOmegaMinus ) {
607 fHistPtVsRefMultEta5_GenOmegaMinus = new TH2D( "fHistPtVsRefMultEta5_GenOmegaMinus", "Generated;p_{T} (GeV/c); Mult",200,0,20,100,0,100); fListHist->Add(fHistPtVsRefMultEta5_GenOmegaMinus); }
608 if(! fHistPtVsRefMultEta5_GenOmegaPlus ) {
609 fHistPtVsRefMultEta5_GenOmegaPlus = new TH2D( "fHistPtVsRefMultEta5_GenOmegaPlus", "Generated;p_{T} (GeV/c); Mult",200,0,20,100,0,100); fListHist->Add(fHistPtVsRefMultEta5_GenOmegaPlus); }
610 if(! fHistPtVsRefMultEta8_GenXiMinus ) {
611 fHistPtVsRefMultEta8_GenXiMinus = new TH2D( "fHistPtVsRefMultEta8_GenXiMinus", "Generated;p_{T} (GeV/c); Mult",200,0,20,100,0,100); fListHist->Add(fHistPtVsRefMultEta8_GenXiMinus); }
612 if(! fHistPtVsRefMultEta8_GenXiPlus ) {
613 fHistPtVsRefMultEta8_GenXiPlus = new TH2D( "fHistPtVsRefMultEta8_GenXiPlus", "Generated;p_{T} (GeV/c); Mult",200,0,20,100,0,100); fListHist->Add(fHistPtVsRefMultEta8_GenXiPlus); }
614 if(! fHistPtVsRefMultEta8_GenOmegaMinus ) {
b6b1e756 615 fHistPtVsRefMultEta8_GenOmegaMinus = new TH2D( "fHistPtVsRefMultEta8_GenOmegaMinus", "Generated;p_{T} (GeV/c); Mult",200,0,20,100,0,100); fListHist->Add(fHistPtVsRefMultEta8_GenOmegaMinus); }
af0d4791 616 if(! fHistPtVsRefMultEta8_GenOmegaPlus ) {
617 fHistPtVsRefMultEta8_GenOmegaPlus = new TH2D( "fHistPtVsRefMultEta8_GenOmegaPlus", "Generated;p_{T} (GeV/c); Mult",200,0,20,100,0,100); fListHist->Add(fHistPtVsRefMultEta8_GenOmegaPlus); }
618
619 //Centralities: V0A, V0C, V0M, +Eq
620 if(! fHistPtVsCentV0A_GenXiMinus ) {
621 fHistPtVsCentV0A_GenXiMinus = new TH2D(
622 "fHistPtVsCentV0A_GenXiMinus", "Generated;p_{T} (GeV/c); Mult",200,0,20,100,0,100);
623 fListHist->Add(fHistPtVsCentV0A_GenXiMinus); }
624 if(! fHistPtVsCentV0A_GenXiPlus ) {
625 fHistPtVsCentV0A_GenXiPlus = new TH2D(
626 "fHistPtVsCentV0A_GenXiPlus", "Generated;p_{T} (GeV/c); Mult",200,0,20,100,0,100);
627 fListHist->Add(fHistPtVsCentV0A_GenXiPlus); }
628 if(! fHistPtVsCentV0A_GenOmegaMinus ) {
629 fHistPtVsCentV0A_GenOmegaMinus = new TH2D(
630 "fHistPtVsCentV0A_GenOmegaMinus", "Generated;p_{T} (GeV/c); Mult",200,0,20,100,0,100);
631 fListHist->Add(fHistPtVsCentV0A_GenOmegaMinus); }
632 if(! fHistPtVsCentV0A_GenOmegaPlus ) {
633 fHistPtVsCentV0A_GenOmegaPlus = new TH2D(
634 "fHistPtVsCentV0A_GenOmegaPlus", "Generated;p_{T} (GeV/c); Mult",200,0,20,100,0,100);
635 fListHist->Add(fHistPtVsCentV0A_GenOmegaPlus); }
636
637 if(! fHistPtVsCentV0C_GenXiMinus ) {
638 fHistPtVsCentV0C_GenXiMinus = new TH2D(
639 "fHistPtVsCentV0C_GenXiMinus", "Generated;p_{T} (GeV/c); Mult",200,0,20,100,0,100);
640 fListHist->Add(fHistPtVsCentV0C_GenXiMinus); }
641 if(! fHistPtVsCentV0C_GenXiPlus ) {
642 fHistPtVsCentV0C_GenXiPlus = new TH2D(
643 "fHistPtVsCentV0C_GenXiPlus", "Generated;p_{T} (GeV/c); Mult",200,0,20,100,0,100);
644 fListHist->Add(fHistPtVsCentV0C_GenXiPlus); }
645 if(! fHistPtVsCentV0C_GenOmegaMinus ) {
646 fHistPtVsCentV0C_GenOmegaMinus = new TH2D(
647 "fHistPtVsCentV0C_GenOmegaMinus", "Generated;p_{T} (GeV/c); Mult",200,0,20,100,0,100);
648 fListHist->Add(fHistPtVsCentV0C_GenOmegaMinus); }
649 if(! fHistPtVsCentV0C_GenOmegaPlus ) {
650 fHistPtVsCentV0C_GenOmegaPlus = new TH2D(
651 "fHistPtVsCentV0C_GenOmegaPlus", "Generated;p_{T} (GeV/c); Mult",200,0,20,100,0,100);
652 fListHist->Add(fHistPtVsCentV0C_GenOmegaPlus); }
653
654 if(! fHistPtVsCentV0M_GenXiMinus ) {
655 fHistPtVsCentV0M_GenXiMinus = new TH2D(
656 "fHistPtVsCentV0M_GenXiMinus", "Generated;p_{T} (GeV/c); Mult",200,0,20,100,0,100);
657 fListHist->Add(fHistPtVsCentV0M_GenXiMinus); }
658 if(! fHistPtVsCentV0M_GenXiPlus ) {
659 fHistPtVsCentV0M_GenXiPlus = new TH2D(
660 "fHistPtVsCentV0M_GenXiPlus", "Generated;p_{T} (GeV/c); Mult",200,0,20,100,0,100);
661 fListHist->Add(fHistPtVsCentV0M_GenXiPlus); }
662 if(! fHistPtVsCentV0M_GenOmegaMinus ) {
663 fHistPtVsCentV0M_GenOmegaMinus = new TH2D(
664 "fHistPtVsCentV0M_GenOmegaMinus", "Generated;p_{T} (GeV/c); Mult",200,0,20,100,0,100);
665 fListHist->Add(fHistPtVsCentV0M_GenOmegaMinus); }
666 if(! fHistPtVsCentV0M_GenOmegaPlus ) {
667 fHistPtVsCentV0M_GenOmegaPlus = new TH2D(
668 "fHistPtVsCentV0M_GenOmegaPlus", "Generated;p_{T} (GeV/c); Mult",200,0,20,100,0,100);
669 fListHist->Add(fHistPtVsCentV0M_GenOmegaPlus); }
670
671 //Equalized
672 if(! fHistPtVsCentV0AEq_GenXiMinus ) {
673 fHistPtVsCentV0AEq_GenXiMinus = new TH2D(
674 "fHistPtVsCentV0AEq_GenXiMinus", "Generated;p_{T} (GeV/c); Mult",200,0,20,100,0,100);
675 fListHist->Add(fHistPtVsCentV0AEq_GenXiMinus); }
676 if(! fHistPtVsCentV0AEq_GenXiPlus ) {
677 fHistPtVsCentV0AEq_GenXiPlus = new TH2D(
678 "fHistPtVsCentV0AEq_GenXiPlus", "Generated;p_{T} (GeV/c); Mult",200,0,20,100,0,100);
679 fListHist->Add(fHistPtVsCentV0AEq_GenXiPlus); }
680 if(! fHistPtVsCentV0AEq_GenOmegaMinus ) {
681 fHistPtVsCentV0AEq_GenOmegaMinus = new TH2D(
682 "fHistPtVsCentV0AEq_GenOmegaMinus", "Generated;p_{T} (GeV/c); Mult",200,0,20,100,0,100);
683 fListHist->Add(fHistPtVsCentV0AEq_GenOmegaMinus); }
684 if(! fHistPtVsCentV0AEq_GenOmegaPlus ) {
685 fHistPtVsCentV0AEq_GenOmegaPlus = new TH2D(
686 "fHistPtVsCentV0AEq_GenOmegaPlus", "Generated;p_{T} (GeV/c); Mult",200,0,20,100,0,100);
687 fListHist->Add(fHistPtVsCentV0AEq_GenOmegaPlus); }
688
689 if(! fHistPtVsCentV0CEq_GenXiMinus ) {
690 fHistPtVsCentV0CEq_GenXiMinus = new TH2D(
691 "fHistPtVsCentV0CEq_GenXiMinus", "Generated;p_{T} (GeV/c); Mult",200,0,20,100,0,100);
692 fListHist->Add(fHistPtVsCentV0CEq_GenXiMinus); }
693 if(! fHistPtVsCentV0CEq_GenXiPlus ) {
694 fHistPtVsCentV0CEq_GenXiPlus = new TH2D(
695 "fHistPtVsCentV0CEq_GenXiPlus", "Generated;p_{T} (GeV/c); Mult",200,0,20,100,0,100);
696 fListHist->Add(fHistPtVsCentV0CEq_GenXiPlus); }
697 if(! fHistPtVsCentV0CEq_GenOmegaMinus ) {
698 fHistPtVsCentV0CEq_GenOmegaMinus = new TH2D(
699 "fHistPtVsCentV0CEq_GenOmegaMinus", "Generated;p_{T} (GeV/c); Mult",200,0,20,100,0,100);
700 fListHist->Add(fHistPtVsCentV0CEq_GenOmegaMinus); }
701 if(! fHistPtVsCentV0CEq_GenOmegaPlus ) {
702 fHistPtVsCentV0CEq_GenOmegaPlus = new TH2D(
703 "fHistPtVsCentV0CEq_GenOmegaPlus", "Generated;p_{T} (GeV/c); Mult",200,0,20,100,0,100);
704 fListHist->Add(fHistPtVsCentV0CEq_GenOmegaPlus); }
705
706 if(! fHistPtVsCentV0MEq_GenXiMinus ) {
707 fHistPtVsCentV0MEq_GenXiMinus = new TH2D(
708 "fHistPtVsCentV0MEq_GenXiMinus", "Generated;p_{T} (GeV/c); Mult",200,0,20,100,0,100);
709 fListHist->Add(fHistPtVsCentV0MEq_GenXiMinus); }
710 if(! fHistPtVsCentV0MEq_GenXiPlus ) {
711 fHistPtVsCentV0MEq_GenXiPlus = new TH2D(
712 "fHistPtVsCentV0MEq_GenXiPlus", "Generated;p_{T} (GeV/c); Mult",200,0,20,100,0,100);
713 fListHist->Add(fHistPtVsCentV0MEq_GenXiPlus); }
714 if(! fHistPtVsCentV0MEq_GenOmegaMinus ) {
715 fHistPtVsCentV0MEq_GenOmegaMinus = new TH2D(
716 "fHistPtVsCentV0MEq_GenOmegaMinus", "Generated;p_{T} (GeV/c); Mult",200,0,20,100,0,100);
717 fListHist->Add(fHistPtVsCentV0MEq_GenOmegaMinus); }
718 if(! fHistPtVsCentV0MEq_GenOmegaPlus ) {
719 fHistPtVsCentV0MEq_GenOmegaPlus = new TH2D(
720 "fHistPtVsCentV0MEq_GenOmegaPlus", "Generated;p_{T} (GeV/c); Mult",200,0,20,100,0,100);
721 fListHist->Add(fHistPtVsCentV0MEq_GenOmegaPlus); }
722
723 //AMPLITUDES: V0A, V0C, V0M, +Eq
724 Double_t lMaxAmplitude = 2500;
725 Long_t lAmplitudeBins = 10000;
726 if(! fHistPtVsAmpV0A_GenXiMinus ) {
727 fHistPtVsAmpV0A_GenXiMinus = new TH2D(
728 "fHistPtVsAmpV0A_GenXiMinus", "Generated;p_{T} (GeV/c); Mult",200,0,20,lAmplitudeBins,0,lMaxAmplitude);
729 fListHist->Add(fHistPtVsAmpV0A_GenXiMinus); }
730 if(! fHistPtVsAmpV0A_GenXiPlus ) {
731 fHistPtVsAmpV0A_GenXiPlus = new TH2D(
732 "fHistPtVsAmpV0A_GenXiPlus", "Generated;p_{T} (GeV/c); Mult",200,0,20,lAmplitudeBins,0,lMaxAmplitude);
733 fListHist->Add(fHistPtVsAmpV0A_GenXiPlus); }
734 if(! fHistPtVsAmpV0A_GenOmegaMinus ) {
735 fHistPtVsAmpV0A_GenOmegaMinus = new TH2D(
736 "fHistPtVsAmpV0A_GenOmegaMinus", "Generated;p_{T} (GeV/c); Mult",200,0,20,lAmplitudeBins,0,lMaxAmplitude);
737 fListHist->Add(fHistPtVsAmpV0A_GenOmegaMinus); }
738 if(! fHistPtVsAmpV0A_GenOmegaPlus ) {
739 fHistPtVsAmpV0A_GenOmegaPlus = new TH2D(
740 "fHistPtVsAmpV0A_GenOmegaPlus", "Generated;p_{T} (GeV/c); Mult",200,0,20,lAmplitudeBins,0,lMaxAmplitude);
741 fListHist->Add(fHistPtVsAmpV0A_GenOmegaPlus); }
742
743 if(! fHistPtVsAmpV0C_GenXiMinus ) {
744 fHistPtVsAmpV0C_GenXiMinus = new TH2D(
745 "fHistPtVsAmpV0C_GenXiMinus", "Generated;p_{T} (GeV/c); Mult",200,0,20,lAmplitudeBins,0,lMaxAmplitude);
746 fListHist->Add(fHistPtVsAmpV0C_GenXiMinus); }
747 if(! fHistPtVsAmpV0C_GenXiPlus ) {
748 fHistPtVsAmpV0C_GenXiPlus = new TH2D(
749 "fHistPtVsAmpV0C_GenXiPlus", "Generated;p_{T} (GeV/c); Mult",200,0,20,lAmplitudeBins,0,lMaxAmplitude);
750 fListHist->Add(fHistPtVsAmpV0C_GenXiPlus); }
751 if(! fHistPtVsAmpV0C_GenOmegaMinus ) {
752 fHistPtVsAmpV0C_GenOmegaMinus = new TH2D(
753 "fHistPtVsAmpV0C_GenOmegaMinus", "Generated;p_{T} (GeV/c); Mult",200,0,20,lAmplitudeBins,0,lMaxAmplitude);
754 fListHist->Add(fHistPtVsAmpV0C_GenOmegaMinus); }
755 if(! fHistPtVsAmpV0C_GenOmegaPlus ) {
756 fHistPtVsAmpV0C_GenOmegaPlus = new TH2D(
757 "fHistPtVsAmpV0C_GenOmegaPlus", "Generated;p_{T} (GeV/c); Mult",200,0,20,lAmplitudeBins,0,lMaxAmplitude);
758 fListHist->Add(fHistPtVsAmpV0C_GenOmegaPlus); }
759
760 if(! fHistPtVsAmpV0M_GenXiMinus ) {
761 fHistPtVsAmpV0M_GenXiMinus = new TH2D(
762 "fHistPtVsAmpV0M_GenXiMinus", "Generated;p_{T} (GeV/c); Mult",200,0,20,lAmplitudeBins,0,lMaxAmplitude);
763 fListHist->Add(fHistPtVsAmpV0M_GenXiMinus); }
764 if(! fHistPtVsAmpV0M_GenXiPlus ) {
765 fHistPtVsAmpV0M_GenXiPlus = new TH2D(
766 "fHistPtVsAmpV0M_GenXiPlus", "Generated;p_{T} (GeV/c); Mult",200,0,20,lAmplitudeBins,0,lMaxAmplitude);
767 fListHist->Add(fHistPtVsAmpV0M_GenXiPlus); }
768 if(! fHistPtVsAmpV0M_GenOmegaMinus ) {
769 fHistPtVsAmpV0M_GenOmegaMinus = new TH2D(
770 "fHistPtVsAmpV0M_GenOmegaMinus", "Generated;p_{T} (GeV/c); Mult",200,0,20,lAmplitudeBins,0,lMaxAmplitude);
771 fListHist->Add(fHistPtVsAmpV0M_GenOmegaMinus); }
772 if(! fHistPtVsAmpV0M_GenOmegaPlus ) {
773 fHistPtVsAmpV0M_GenOmegaPlus = new TH2D(
774 "fHistPtVsAmpV0M_GenOmegaPlus", "Generated;p_{T} (GeV/c); Mult",200,0,20,lAmplitudeBins,0,lMaxAmplitude);
775 fListHist->Add(fHistPtVsAmpV0M_GenOmegaPlus); }
776
777 //Equalized
778 if(! fHistPtVsAmpV0AEq_GenXiMinus ) {
779 fHistPtVsAmpV0AEq_GenXiMinus = new TH2D(
780 "fHistPtVsAmpV0AEq_GenXiMinus", "Generated;p_{T} (GeV/c); Mult",200,0,20,lAmplitudeBins,0,lMaxAmplitude);
781 fListHist->Add(fHistPtVsAmpV0AEq_GenXiMinus); }
782 if(! fHistPtVsAmpV0AEq_GenXiPlus ) {
783 fHistPtVsAmpV0AEq_GenXiPlus = new TH2D(
784 "fHistPtVsAmpV0AEq_GenXiPlus", "Generated;p_{T} (GeV/c); Mult",200,0,20,lAmplitudeBins,0,lMaxAmplitude);
785 fListHist->Add(fHistPtVsAmpV0AEq_GenXiPlus); }
786 if(! fHistPtVsAmpV0AEq_GenOmegaMinus ) {
787 fHistPtVsAmpV0AEq_GenOmegaMinus = new TH2D(
788 "fHistPtVsAmpV0AEq_GenOmegaMinus", "Generated;p_{T} (GeV/c); Mult",200,0,20,lAmplitudeBins,0,lMaxAmplitude);
789 fListHist->Add(fHistPtVsAmpV0AEq_GenOmegaMinus); }
790 if(! fHistPtVsAmpV0AEq_GenOmegaPlus ) {
791 fHistPtVsAmpV0AEq_GenOmegaPlus = new TH2D(
792 "fHistPtVsAmpV0AEq_GenOmegaPlus", "Generated;p_{T} (GeV/c); Mult",200,0,20,lAmplitudeBins,0,lMaxAmplitude);
793 fListHist->Add(fHistPtVsAmpV0AEq_GenOmegaPlus); }
794
795 if(! fHistPtVsAmpV0CEq_GenXiMinus ) {
796 fHistPtVsAmpV0CEq_GenXiMinus = new TH2D(
797 "fHistPtVsAmpV0CEq_GenXiMinus", "Generated;p_{T} (GeV/c); Mult",200,0,20,lAmplitudeBins,0,lMaxAmplitude);
798 fListHist->Add(fHistPtVsAmpV0CEq_GenXiMinus); }
799 if(! fHistPtVsAmpV0CEq_GenXiPlus ) {
800 fHistPtVsAmpV0CEq_GenXiPlus = new TH2D(
801 "fHistPtVsAmpV0CEq_GenXiPlus", "Generated;p_{T} (GeV/c); Mult",200,0,20,lAmplitudeBins,0,lMaxAmplitude);
802 fListHist->Add(fHistPtVsAmpV0CEq_GenXiPlus); }
803 if(! fHistPtVsAmpV0CEq_GenOmegaMinus ) {
804 fHistPtVsAmpV0CEq_GenOmegaMinus = new TH2D(
805 "fHistPtVsAmpV0CEq_GenOmegaMinus", "Generated;p_{T} (GeV/c); Mult",200,0,20,lAmplitudeBins,0,lMaxAmplitude);
806 fListHist->Add(fHistPtVsAmpV0CEq_GenOmegaMinus); }
807 if(! fHistPtVsAmpV0CEq_GenOmegaPlus ) {
808 fHistPtVsAmpV0CEq_GenOmegaPlus = new TH2D(
809 "fHistPtVsAmpV0CEq_GenOmegaPlus", "Generated;p_{T} (GeV/c); Mult",200,0,20,lAmplitudeBins,0,lMaxAmplitude);
810 fListHist->Add(fHistPtVsAmpV0CEq_GenOmegaPlus); }
811
812 if(! fHistPtVsAmpV0MEq_GenXiMinus ) {
813 fHistPtVsAmpV0MEq_GenXiMinus = new TH2D(
814 "fHistPtVsAmpV0MEq_GenXiMinus", "Generated;p_{T} (GeV/c); Mult",200,0,20,lAmplitudeBins,0,lMaxAmplitude);
815 fListHist->Add(fHistPtVsAmpV0MEq_GenXiMinus); }
816 if(! fHistPtVsAmpV0MEq_GenXiPlus ) {
817 fHistPtVsAmpV0MEq_GenXiPlus = new TH2D(
818 "fHistPtVsAmpV0MEq_GenXiPlus", "Generated;p_{T} (GeV/c); Mult",200,0,20,lAmplitudeBins,0,lMaxAmplitude);
819 fListHist->Add(fHistPtVsAmpV0MEq_GenXiPlus); }
820 if(! fHistPtVsAmpV0MEq_GenOmegaMinus ) {
821 fHistPtVsAmpV0MEq_GenOmegaMinus = new TH2D(
822 "fHistPtVsAmpV0MEq_GenOmegaMinus", "Generated;p_{T} (GeV/c); Mult",200,0,20,lAmplitudeBins,0,lMaxAmplitude);
823 fListHist->Add(fHistPtVsAmpV0MEq_GenOmegaMinus); }
824 if(! fHistPtVsAmpV0MEq_GenOmegaPlus ) {
825 fHistPtVsAmpV0MEq_GenOmegaPlus = new TH2D(
826 "fHistPtVsAmpV0MEq_GenOmegaPlus", "Generated;p_{T} (GeV/c); Mult",200,0,20,lAmplitudeBins,0,lMaxAmplitude);
827 fListHist->Add(fHistPtVsAmpV0MEq_GenOmegaPlus); }
828
829 //List of Histograms: Normal
830 PostData(1, fListHist);
831
832 //TTree Object: Saved to base directory. Should cache to disk while saving.
833 //(Important to avoid excessive memory usage, particularly when merging)
834 PostData(2, fTreeEvent);
835 PostData(3, fTreeV0);
836 PostData(4, fTreeCascade);
837
838}// end UserCreateOutputObjects
839
840
841//________________________________________________________________________
842void AliAnalysisTaskStrangenessVsMultiplicityMC::UserExec(Option_t *)
843{
844 // Main loop
845 // Called for each event
846
847 AliESDEvent *lESDevent = 0x0;
848 AliMCEvent *lMCevent = 0x0;
849 AliStack *lMCstack = 0x0;
850
851 // Connect to the InputEvent
852 // After these lines, we should have an ESD/AOD event + the number of V0s in it.
853
854 // Appropriate for ESD analysis!
855
856 lESDevent = dynamic_cast<AliESDEvent*>( InputEvent() );
857 if (!lESDevent) {
858 AliWarning("ERROR: lESDevent not available \n");
859 return;
860 }
861
862 //Get VZERO Information for multiplicity later
863 AliVVZERO* esdV0 = lESDevent->GetVZEROData();
864 if (!esdV0) {
865 AliError("AliVVZERO not available");
866 return;
867 }
868
869 lMCevent = MCEvent();
870 if (!lMCevent) {
871 Printf("ERROR: Could not retrieve MC event \n");
872 cout << "Name of the file with pb :" << fInputHandler->GetTree()->GetCurrentFile()->GetName() << endl;
873 return;
874 }
875
876 lMCstack = lMCevent->Stack();
877 if (!lMCstack) {
878 Printf("ERROR: Could not retrieve MC stack \n");
879 cout << "Name of the file with pb :" << fInputHandler->GetTree()->GetCurrentFile()->GetName() << endl;
880 return;
881 }
882
883 fRunNumber = lESDevent->GetRunNumber();
884
885 Double_t lMagneticField = -10;
886 lMagneticField = lESDevent->GetMagneticField( );
887
888//------------------------------------------------
889// Variable Definition
890//------------------------------------------------
891
892//------------------------------------------------
893// Physics Selection
894//------------------------------------------------
895
896 fHistEventCounter->Fill(0.5);
897
898 UInt_t maskIsSelected = ((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected();
899 Bool_t isSelected = 0;
900 isSelected = (maskIsSelected & AliVEvent::kMB) == AliVEvent::kMB;
901
902 //Standard Min-Bias Selection
903 if ( ! isSelected ) {
904 PostData(1, fListHist);
905 PostData(2, fTreeEvent);
906 PostData(3, fTreeV0);
907 PostData(4, fTreeCascade);
908 return;
909 }
910
911 fHistEventCounter->Fill(1.5);
912
913 //------------------------------------------------
914 // Primary Vertex Requirements Section:
915 // ---> pp: has vertex, |z|<10cm
916 //------------------------------------------------
917
918 //classical Proton-proton like selection
919 const AliESDVertex *lPrimaryBestESDVtx = lESDevent->GetPrimaryVertex();
920 const AliESDVertex *lPrimaryTrackingESDVtx = lESDevent->GetPrimaryVertexTracks();
921 const AliESDVertex *lPrimarySPDVtx = lESDevent->GetPrimaryVertexSPD();
922
923 Double_t lBestPrimaryVtxPos[3] = {-100.0, -100.0, -100.0};
924 lPrimaryBestESDVtx->GetXYZ( lBestPrimaryVtxPos );
925
926 //Only accept if Tracking or SPD vertex is fine
927 if (!lPrimarySPDVtx->GetStatus() && !lPrimaryTrackingESDVtx->GetStatus() ){
928 AliWarning("Pb / No SPD prim. vertex nor prim. Tracking vertex ... return !");
929 PostData(1, fListHist);
930 PostData(2, fTreeEvent);
931 PostData(3, fTreeV0);
932 PostData(4, fTreeCascade);
933 return;
934 }
935
936 //Has SPD or Tracking Vertex
937 fHistEventCounter -> Fill(2.5);
938
939 //Always do Primary Vertex Selection
940 if(TMath::Abs(lBestPrimaryVtxPos[2]) > 10.0) {
941 AliWarning("Pb / | Z position of Best Prim Vtx | > 10.0 cm ... return !");
942 PostData(1, fListHist);
943 PostData(2, fTreeEvent);
944 PostData(3, fTreeV0);
945 PostData(4, fTreeCascade);
946 return;
947 }
948
949 //Fill Event selected counter
950 fHistEventCounter -> Fill(3.5);
951
952 //------------------------------------------------
953 // Check if this isn't pileup
954 //------------------------------------------------
955
956 if(lESDevent->IsPileupFromSPDInMultBins() ){
957 // minContributors=3, minZdist=0.8, nSigmaZdist=3., nSigmaDiamXY=2., nSigmaDiamZ=5.
958 //-> see http://alisoft.cern.ch/viewvc/trunk/STEER/AliESDEvent.h?root=AliRoot&r1=41914&r2=42199&pathrev=42199
959 AliWarning("Pb / Event tagged as pile-up by SPD... return !");
960 PostData(1, fListHist);
961 PostData(2, fTreeEvent);
962 PostData(3, fTreeV0);
963 PostData(4, fTreeCascade);
964 return;
965 }
966 //Fill Event isn't pileup counter
967 fHistEventCounter -> Fill(4.5);
968
969//------------------------------------------------
970// Multiplicity Information Acquistion
971//------------------------------------------------
972
973 //Monte Carlo Level information !
974 //--------- GENERATED NUMBER OF CHARGED PARTICLES
975 // ---> Variable Definition
976
977 Long_t lNchEta5 = 0;
978 Long_t lNchEta8 = 0;
979 Long_t lNchVZEROA = 0;
980 Long_t lNchVZEROC = 0;
981
982 //----- Loop on Stack ----------------------------------------------------------------
983 for (Int_t iCurrentLabelStack = 0; iCurrentLabelStack < (lMCstack->GetNtrack()); iCurrentLabelStack++)
984 {// This is the begining of the loop on tracks
985 TParticle* particleOne = lMCstack->Particle(iCurrentLabelStack);
986 if(!particleOne) continue;
987 if(!particleOne->GetPDG()) continue;
988 Double_t lThisCharge = particleOne->GetPDG()->Charge()/3.;
989 if(TMath::Abs(lThisCharge)<0.001) continue;
990 if(! (lMCstack->IsPhysicalPrimary(iCurrentLabelStack)) ) continue;
991
992 //Double_t gpt = particleOne -> Pt();
993 Double_t geta = particleOne -> Eta();
994
995 if( TMath::Abs(geta) < 0.5 ) lNchEta5++;
996 if( TMath::Abs(geta) < 0.8 ) lNchEta8++;
997 if( 2.8 < geta && geta < 5.1 ) lNchVZEROA++;
998 if(-3.7 < geta && geta <-1.7 ) lNchVZEROC++;
999 }//End of loop on tracks
1000
1001 //Attribution
1002 fTrueMultEta5 = lNchEta5;
1003 fTrueMultEta8 = lNchEta8;
1004 fTrueMultVZEROA = lNchVZEROA;
1005 fTrueMultVZEROC = lNchVZEROC;
1006 //----- End Loop on Stack ------------------------------------------------------------
1007
1008 //Standard GetReferenceMultiplicity Estimator (0.5 and 0.8)
1009 fRefMultEta5 = fESDtrackCuts->GetReferenceMultiplicity(lESDevent, AliESDtrackCuts::kTrackletsITSTPC,0.5);
1010 fRefMultEta8 = fESDtrackCuts->GetReferenceMultiplicity(lESDevent, AliESDtrackCuts::kTrackletsITSTPC,0.8);
1011
1012 // VZERO PART
1013 Float_t multV0A = 0; // multiplicity from V0 reco side A
1014 Float_t multV0C = 0; // multiplicity from V0 reco side C
1015 Float_t multV0AEq = 0; // multiplicity from V0 reco side A
1016 Float_t multV0CEq = 0; // multiplicity from V0 reco side C
1017 Float_t multV0ACorr = 0; // multiplicity from V0 reco side A
1018 Float_t multV0CCorr = 0; // multiplicity from V0 reco side C
1019
1020 //Non-Equalized Signal: copy of multV0ACorr and multV0CCorr from AliCentralitySelectionTask
1021 //Getters for uncorrected multiplicity
1022 multV0A=esdV0->GetMTotV0A();
1023 multV0C=esdV0->GetMTotV0C();
1024
1025 //Get Z vertex position of SPD vertex (why not Tracking if available?)
1026 Float_t zvtx = lPrimarySPDVtx->GetZ();
1027
1028 //Acquire Corrected multV0A
1029 multV0ACorr = AliESDUtils::GetCorrV0A(multV0A,zvtx);
1030 multV0CCorr = AliESDUtils::GetCorrV0C(multV0C,zvtx);
1031
1032 //Copy to Event Tree for extra information
1033 fAmplitude_V0A = multV0ACorr;
1034 fAmplitude_V0C = multV0CCorr;
1035
1036 // Equalized signals // From AliCentralitySelectionTask
1037 for(Int_t iCh = 4; iCh < 7; ++iCh) {
1038 Double_t mult = lESDevent->GetVZEROEqMultiplicity(iCh);
1039 multV0AEq += mult;
1040 }
1041 for(Int_t iCh = 0; iCh < 3; ++iCh) {
1042 Double_t mult = lESDevent->GetVZEROEqMultiplicity(iCh);
1043 multV0CEq += mult;
1044 }
1045 fAmplitude_V0AEq = multV0AEq;
1046 fAmplitude_V0CEq = multV0CEq;
1047
1048 fCentrality_V0A = -100;
1049 fCentrality_V0C = -100;
1050 fCentrality_V0M = -100;
1051 fCentrality_V0AEq = -100;
1052 fCentrality_V0CEq = -100;
1053 fCentrality_V0MEq = -100;
1054
1055 //AliCentrality... Check if working?
1056 AliCentrality* centrality;
1057 centrality = lESDevent->GetCentrality();
1058 if ( !(centrality->GetQuality()>1) ){
1059 fCentrality_V0A = centrality->GetCentralityPercentile( "V0A" );
1060 fCentrality_V0C = centrality->GetCentralityPercentile( "V0C" );
1061 fCentrality_V0M = centrality->GetCentralityPercentile( "V0M" );
1062 fCentrality_V0AEq = centrality->GetCentralityPercentile( "V0AEq" );
1063 fCentrality_V0CEq = centrality->GetCentralityPercentile( "V0CEq" );
1064 fCentrality_V0MEq = centrality->GetCentralityPercentile( "V0MEq" );
1065 }
1066
1067 //Event-level fill
1068 fTreeEvent->Fill() ;
1069
1070//------------------------------------------------
1071
1072//------------------------------------------------
1073// Fill Efficiency Denominators, please
1074//------------------------------------------------
1075
1076 Int_t lThisPDG = 0;
1077 Double_t lThisRap = 0;
1078 Double_t lThisPt = 0;
1079
1080//----- Loop on Generated CASCADES ---------------
1081 for (Int_t ilab = 0; ilab < (lMCstack->GetNtrack()); ilab++)
1082 {// This is the begining of the loop on tracks
1083
1084 TParticle* lPart = 0x0;
1085 lPart = lMCstack->Particle( ilab );
1086 if(!lPart){
1087 Printf("Generated loop %d - MC TParticle pointer to current stack particle = 0x0 ! Skip ...\n", ilab );
1088 continue;
1089 }
1090
1091 lThisPDG = lPart->GetPdgCode();
1092
1093 if ( (TMath::Abs(lThisPDG) == 3312) || (TMath::Abs(lThisPDG) == 3334) )
1094 {
1095 lThisRap = MyRapidity(lPart->Energy(),lPart->Pz());
1096 lThisPt = lPart->Pt();
1097
1098 //Use Physical Primaries only for filling These Histos
1099 if ( lMCstack->IsPhysicalPrimary(ilab)!=kTRUE ) continue;
1100
1101 if( lThisPDG == 3312 && TMath::Abs(lThisRap) < 0.5 ){
1102 fHistPt_GenXiMinus -> Fill (lThisPt);
1103 fHistPtVsRefMultEta5_GenXiMinus -> Fill (lThisPt, fRefMultEta5);
1104 fHistPtVsRefMultEta8_GenXiMinus -> Fill (lThisPt, fRefMultEta8);
1105 //Centralities
1106 fHistPtVsCentV0A_GenXiMinus -> Fill (lThisPt, fCentrality_V0A);
1107 fHistPtVsCentV0C_GenXiMinus -> Fill (lThisPt, fCentrality_V0C);
1108 fHistPtVsCentV0M_GenXiMinus -> Fill (lThisPt, fCentrality_V0M);
1109 fHistPtVsCentV0AEq_GenXiMinus -> Fill (lThisPt, fCentrality_V0AEq);
1110 fHistPtVsCentV0CEq_GenXiMinus -> Fill (lThisPt, fCentrality_V0CEq);
1111 fHistPtVsCentV0MEq_GenXiMinus -> Fill (lThisPt, fCentrality_V0MEq);
1112 //Amplitudes
1113 fHistPtVsAmpV0A_GenXiMinus -> Fill (lThisPt, fAmplitude_V0A);
1114 fHistPtVsAmpV0C_GenXiMinus -> Fill (lThisPt, fAmplitude_V0C);
1115 fHistPtVsAmpV0M_GenXiMinus -> Fill (lThisPt, fAmplitude_V0A + fAmplitude_V0C);
1116 fHistPtVsAmpV0AEq_GenXiMinus -> Fill (lThisPt, fAmplitude_V0AEq);
1117 fHistPtVsAmpV0CEq_GenXiMinus -> Fill (lThisPt, fAmplitude_V0CEq);
1118 fHistPtVsAmpV0MEq_GenXiMinus -> Fill (lThisPt, fAmplitude_V0AEq + fAmplitude_V0CEq);
1119 }
1120 if( lThisPDG == -3312 && TMath::Abs(lThisRap) < 0.5 ){
1121 fHistPt_GenXiPlus -> Fill (lThisPt);
1122 fHistPtVsRefMultEta5_GenXiPlus -> Fill (lThisPt, fRefMultEta5);
1123 fHistPtVsRefMultEta8_GenXiPlus -> Fill (lThisPt, fRefMultEta8);
1124 //Centralities
1125 fHistPtVsCentV0A_GenXiPlus -> Fill (lThisPt, fCentrality_V0A);
1126 fHistPtVsCentV0C_GenXiPlus -> Fill (lThisPt, fCentrality_V0C);
1127 fHistPtVsCentV0M_GenXiPlus -> Fill (lThisPt, fCentrality_V0M);
1128 fHistPtVsCentV0AEq_GenXiPlus -> Fill (lThisPt, fCentrality_V0AEq);
1129 fHistPtVsCentV0CEq_GenXiPlus -> Fill (lThisPt, fCentrality_V0CEq);
1130 fHistPtVsCentV0MEq_GenXiPlus -> Fill (lThisPt, fCentrality_V0MEq);
1131 //Amplitudes
1132 fHistPtVsAmpV0A_GenXiPlus -> Fill (lThisPt, fAmplitude_V0A);
1133 fHistPtVsAmpV0C_GenXiPlus -> Fill (lThisPt, fAmplitude_V0C);
1134 fHistPtVsAmpV0M_GenXiPlus -> Fill (lThisPt, fAmplitude_V0A + fAmplitude_V0C);
1135 fHistPtVsAmpV0AEq_GenXiPlus -> Fill (lThisPt, fAmplitude_V0AEq);
1136 fHistPtVsAmpV0CEq_GenXiPlus -> Fill (lThisPt, fAmplitude_V0CEq);
1137 fHistPtVsAmpV0MEq_GenXiPlus -> Fill (lThisPt, fAmplitude_V0AEq + fAmplitude_V0CEq);
1138 }
1139 if( lThisPDG == 3334 && TMath::Abs(lThisRap) < 0.5 ){
1140 fHistPt_GenOmegaMinus -> Fill (lThisPt);
1141 fHistPtVsRefMultEta5_GenOmegaMinus -> Fill (lThisPt, fRefMultEta5);
1142 fHistPtVsRefMultEta8_GenOmegaMinus -> Fill (lThisPt, fRefMultEta8);
1143 //Centralities
1144 fHistPtVsCentV0A_GenOmegaMinus -> Fill (lThisPt, fCentrality_V0A);
1145 fHistPtVsCentV0C_GenOmegaMinus -> Fill (lThisPt, fCentrality_V0C);
1146 fHistPtVsCentV0M_GenOmegaMinus -> Fill (lThisPt, fCentrality_V0M);
1147 fHistPtVsCentV0AEq_GenOmegaMinus -> Fill (lThisPt, fCentrality_V0AEq);
1148 fHistPtVsCentV0CEq_GenOmegaMinus -> Fill (lThisPt, fCentrality_V0CEq);
1149 fHistPtVsCentV0MEq_GenOmegaMinus -> Fill (lThisPt, fCentrality_V0MEq);
1150 //Amplitudes
1151 fHistPtVsAmpV0A_GenOmegaMinus -> Fill (lThisPt, fAmplitude_V0A);
1152 fHistPtVsAmpV0C_GenOmegaMinus -> Fill (lThisPt, fAmplitude_V0C);
1153 fHistPtVsAmpV0M_GenOmegaMinus -> Fill (lThisPt, fAmplitude_V0A + fAmplitude_V0C);
1154 fHistPtVsAmpV0AEq_GenOmegaMinus -> Fill (lThisPt, fAmplitude_V0AEq);
1155 fHistPtVsAmpV0CEq_GenOmegaMinus -> Fill (lThisPt, fAmplitude_V0CEq);
1156 fHistPtVsAmpV0MEq_GenOmegaMinus -> Fill (lThisPt, fAmplitude_V0AEq + fAmplitude_V0CEq);
1157 }
1158 if( lThisPDG == -3334 && TMath::Abs(lThisRap) < 0.5 ){
1159 fHistPt_GenOmegaPlus -> Fill (lThisPt);
1160 fHistPtVsRefMultEta5_GenOmegaPlus -> Fill (lThisPt, fRefMultEta5);
1161 fHistPtVsRefMultEta8_GenOmegaPlus -> Fill (lThisPt, fRefMultEta8);
1162 //Centralities
1163 fHistPtVsCentV0A_GenOmegaPlus -> Fill (lThisPt, fCentrality_V0A);
1164 fHistPtVsCentV0C_GenOmegaPlus -> Fill (lThisPt, fCentrality_V0C);
1165 fHistPtVsCentV0M_GenOmegaPlus -> Fill (lThisPt, fCentrality_V0M);
1166 fHistPtVsCentV0AEq_GenOmegaPlus -> Fill (lThisPt, fCentrality_V0AEq);
1167 fHistPtVsCentV0CEq_GenOmegaPlus -> Fill (lThisPt, fCentrality_V0CEq);
1168 fHistPtVsCentV0MEq_GenOmegaPlus -> Fill (lThisPt, fCentrality_V0MEq);
1169 //Amplitudes
1170 fHistPtVsAmpV0A_GenOmegaPlus -> Fill (lThisPt, fAmplitude_V0A);
1171 fHistPtVsAmpV0C_GenOmegaPlus -> Fill (lThisPt, fAmplitude_V0C);
1172 fHistPtVsAmpV0M_GenOmegaPlus -> Fill (lThisPt, fAmplitude_V0A + fAmplitude_V0C);
1173 fHistPtVsAmpV0AEq_GenOmegaPlus -> Fill (lThisPt, fAmplitude_V0AEq);
1174 fHistPtVsAmpV0CEq_GenOmegaPlus -> Fill (lThisPt, fAmplitude_V0CEq);
1175 fHistPtVsAmpV0MEq_GenOmegaPlus -> Fill (lThisPt, fAmplitude_V0AEq + fAmplitude_V0CEq);
1176 }
1177 }
1178 }//End of loop on tracks
1179//----- End Loop on Cascades ------------------------------------------------------------
1180
1181//------------------------------------------------
1182// Rerun cascade vertexer!
1183//------------------------------------------------
1184
1185 if( fkRunVertexers ){
1186 lESDevent->ResetCascades();
1187 lESDevent->ResetV0s();
1188
1189 AliV0vertexer lV0vtxer;
1190 AliCascadeVertexer lCascVtxer;
1191
1192 lV0vtxer.SetDefaultCuts(fV0VertexerSels);
1193 lCascVtxer.SetDefaultCuts(fCascadeVertexerSels);
1194
1195 lV0vtxer.Tracks2V0vertices(lESDevent);
1196 lCascVtxer.V0sTracks2CascadeVertices(lESDevent);
1197 }
1198
1199//------------------------------------------------
1200// MAIN CASCADE LOOP STARTS HERE
1201//------------------------------------------------
1202// Code Credit: Antonin Maire (thanks^100)
1203// ---> This is an adaptation
1204
1205 Long_t ncascades = 0;
1206 ncascades = lESDevent->GetNumberOfCascades();
1207
1208 for (Int_t iXi = 0; iXi < ncascades; iXi++){
1209 //------------------------------------------------
1210 // Initializations
1211 //------------------------------------------------
1212 //Double_t lTrkgPrimaryVtxRadius3D = -500.0;
1213 //Double_t lBestPrimaryVtxRadius3D = -500.0;
1214
1215 // - 1st part of initialisation : variables needed to store AliESDCascade data members
1216 Double_t lEffMassXi = 0. ;
1217 //Double_t lChi2Xi = -1. ;
1218 Double_t lDcaXiDaughters = -1. ;
1219 Double_t lXiCosineOfPointingAngle = -1. ;
1220 Double_t lPosXi[3] = { -1000.0, -1000.0, -1000.0 };
1221 Double_t lXiRadius = -1000. ;
1222
1223 // - 2nd part of initialisation : Nbr of clusters within TPC for the 3 daughter cascade tracks
1224 Int_t lPosTPCClusters = -1; // For ESD only ...//FIXME : wait for availability in AOD
1225 Int_t lNegTPCClusters = -1; // For ESD only ...
1226 Int_t lBachTPCClusters = -1; // For ESD only ...
1227
1228 // - 3rd part of initialisation : about V0 part in cascades
1229 Double_t lInvMassLambdaAsCascDghter = 0.;
1230 //Double_t lV0Chi2Xi = -1. ;
1231 Double_t lDcaV0DaughtersXi = -1.;
1232
1233 Double_t lDcaBachToPrimVertexXi = -1., lDcaV0ToPrimVertexXi = -1.;
1234 Double_t lDcaPosToPrimVertexXi = -1.;
1235 Double_t lDcaNegToPrimVertexXi = -1.;
1236 Double_t lV0CosineOfPointingAngleXi = -1. ;
1237 Double_t lV0CosineOfPointingAngleXiSpecial = -1. ;
1238 Double_t lPosV0Xi[3] = { -1000. , -1000., -1000. }; // Position of VO coming from cascade
1239 Double_t lV0RadiusXi = -1000.0;
1240 Double_t lV0quality = 0.;
1241
1242 // - 4th part of initialisation : Effective masses
1243 Double_t lInvMassXiMinus = 0.;
1244 Double_t lInvMassXiPlus = 0.;
1245 Double_t lInvMassOmegaMinus = 0.;
1246 Double_t lInvMassOmegaPlus = 0.;
1247
1248 // - 6th part of initialisation : extra info for QA
1249 Double_t lXiMomX = 0. , lXiMomY = 0., lXiMomZ = 0.;
1250 Double_t lXiTransvMom = 0. ;
1251 //Double_t lXiTransvMomMC= 0. ;
1252 Double_t lXiTotMom = 0. ;
1253
1254 Double_t lBachMomX = 0., lBachMomY = 0., lBachMomZ = 0.;
1255 //Double_t lBachTransvMom = 0.;
1256 //Double_t lBachTotMom = 0.;
1257
1258 fTreeCascVarNegNSigmaPion = -100;
1259 fTreeCascVarNegNSigmaProton = -100;
1260 fTreeCascVarPosNSigmaPion = -100;
1261 fTreeCascVarPosNSigmaProton = -100;
1262 fTreeCascVarBachNSigmaPion = -100;
1263 fTreeCascVarBachNSigmaKaon = -100;
1264
1265 Short_t lChargeXi = -2;
1266 //Double_t lV0toXiCosineOfPointingAngle = 0. ;
1267
1268 Double_t lRapXi = -20.0, lRapOmega = -20.0, lRapMC = -20;// lEta = -20.0, lTheta = 360., lPhi = 720. ;
1269 //Double_t lAlphaXi = -200., lPtArmXi = -200.0;
1270
1271 // -------------------------------------
1272 // II.ESD - Calculation Part dedicated to Xi vertices (ESD)
1273
1274 AliESDcascade *xi = lESDevent->GetCascade(iXi);
1275 if (!xi) continue;
1276
1277 // - II.Step 2 : Assigning the necessary variables for specific AliESDcascade data members (ESD)
1278 //-------------
1279 lV0quality = 0.;
1280 xi->ChangeMassHypothesis(lV0quality , 3312); // default working hypothesis : cascade = Xi- decay
1281
1282 lEffMassXi = xi->GetEffMassXi();
1283 //lChi2Xi = xi->GetChi2Xi();
1284 lDcaXiDaughters = xi->GetDcaXiDaughters();
1285 lXiCosineOfPointingAngle = xi->GetCascadeCosineOfPointingAngle( lBestPrimaryVtxPos[0],
1286 lBestPrimaryVtxPos[1],
1287 lBestPrimaryVtxPos[2] );
1288 // Take care : the best available vertex should be used (like in AliCascadeVertexer)
1289
1290 xi->GetXYZcascade( lPosXi[0], lPosXi[1], lPosXi[2] );
1291 lXiRadius = TMath::Sqrt( lPosXi[0]*lPosXi[0] + lPosXi[1]*lPosXi[1] );
1292
1293 // - II.Step 3 : around the tracks : Bach + V0 (ESD)
1294 // ~ Necessary variables for ESDcascade data members coming from the ESDv0 part (inheritance)
1295 //-------------
1296
1297 UInt_t lIdxPosXi = (UInt_t) TMath::Abs( xi->GetPindex() );
1298 UInt_t lIdxNegXi = (UInt_t) TMath::Abs( xi->GetNindex() );
1299 UInt_t lBachIdx = (UInt_t) TMath::Abs( xi->GetBindex() );
1300 // Care track label can be negative in MC production (linked with the track quality)
1301 // However = normally, not the case for track index ...
1302
1303 // FIXME : rejection of a double use of a daughter track (nothing but just a crosscheck of what is done in the cascade vertexer)
1304 if(lBachIdx == lIdxNegXi) {
1305 AliWarning("Pb / Idx(Bach. track) = Idx(Neg. track) ... continue!"); continue;
1306 }
1307 if(lBachIdx == lIdxPosXi) {
1308 AliWarning("Pb / Idx(Bach. track) = Idx(Pos. track) ... continue!"); continue;
1309 }
1310
1311 AliESDtrack *pTrackXi = lESDevent->GetTrack( lIdxPosXi );
1312 AliESDtrack *nTrackXi = lESDevent->GetTrack( lIdxNegXi );
1313 AliESDtrack *bachTrackXi = lESDevent->GetTrack( lBachIdx );
1314
1315 if (!pTrackXi || !nTrackXi || !bachTrackXi ) {
1316 AliWarning("ERROR: Could not retrieve one of the 3 ESD daughter tracks of the cascade ...");
1317 continue;
1318 }
1319
1320 fTreeCascVarPosEta = pTrackXi->Eta();
1321 fTreeCascVarNegEta = nTrackXi->Eta();
1322 fTreeCascVarBachEta = bachTrackXi->Eta();
1323
1324 Double_t lBMom[3], lNMom[3], lPMom[3];
1325 xi->GetBPxPyPz( lBMom[0], lBMom[1], lBMom[2] );
1326 xi->GetPPxPyPz( lPMom[0], lPMom[1], lPMom[2] );
1327 xi->GetNPxPyPz( lNMom[0], lNMom[1], lNMom[2] );
1328
1329 //fTreeCascVarBachTransMom = TMath::Sqrt( lBMom[0]*lBMom[0] + lBMom[1]*lBMom[1] );
1330 //fTreeCascVarPosTransMom = TMath::Sqrt( lPMom[0]*lPMom[0] + lPMom[1]*lPMom[1] );
1331 //fTreeCascVarNegTransMom = TMath::Sqrt( lNMom[0]*lNMom[0] + lNMom[1]*lNMom[1] );
1332
1333 //------------------------------------------------
1334 // TPC dEdx information
1335 //------------------------------------------------
1336 fTreeCascVarNegNSigmaPion = fPIDResponse->NumberOfSigmasTPC( nTrackXi, AliPID::kPion );
1337 fTreeCascVarNegNSigmaProton = fPIDResponse->NumberOfSigmasTPC( nTrackXi, AliPID::kProton );
1338 fTreeCascVarPosNSigmaPion = fPIDResponse->NumberOfSigmasTPC( pTrackXi, AliPID::kPion );
1339 fTreeCascVarPosNSigmaProton = fPIDResponse->NumberOfSigmasTPC( pTrackXi, AliPID::kProton );
1340 fTreeCascVarBachNSigmaPion = fPIDResponse->NumberOfSigmasTPC( bachTrackXi, AliPID::kPion );
1341 fTreeCascVarBachNSigmaKaon = fPIDResponse->NumberOfSigmasTPC( bachTrackXi, AliPID::kKaon );
1342
1343 //------------------------------------------------
1344 // TPC Number of clusters info
1345 // --- modified to save the smallest number
1346 // --- of TPC clusters for the 3 tracks
1347 //------------------------------------------------
1348
1349 lPosTPCClusters = pTrackXi->GetTPCNcls();
1350 lNegTPCClusters = nTrackXi->GetTPCNcls();
1351 lBachTPCClusters = bachTrackXi->GetTPCNcls();
1352
1353 // 1 - Poor quality related to TPCrefit
1354 ULong_t pStatus = pTrackXi->GetStatus();
1355 ULong_t nStatus = nTrackXi->GetStatus();
1356 ULong_t bachStatus = bachTrackXi->GetStatus();
1357
1358 //fTreeCascVarkITSRefitBachelor = kTRUE;
1359 //fTreeCascVarkITSRefitNegative = kTRUE;
1360 //fTreeCascVarkITSRefitPositive = kTRUE;
1361
1362 if ((pStatus&AliESDtrack::kTPCrefit) == 0) { AliWarning("Pb / V0 Pos. track has no TPCrefit ... continue!"); continue; }
1363 if ((nStatus&AliESDtrack::kTPCrefit) == 0) { AliWarning("Pb / V0 Neg. track has no TPCrefit ... continue!"); continue; }
1364 if ((bachStatus&AliESDtrack::kTPCrefit) == 0) { AliWarning("Pb / Bach. track has no TPCrefit ... continue!"); continue; }
1365
1366 //Extra Debug Information: booleans for ITS refit
1367 //if ((pStatus&AliESDtrack::kITSrefit) == 0) { fTreeCascVarkITSRefitPositive = kFALSE; }
1368 //if ((nStatus&AliESDtrack::kITSrefit) == 0) { fTreeCascVarkITSRefitNegative = kFALSE; }
1369 //if ((bachStatus&AliESDtrack::kITSrefit) == 0) { fTreeCascVarkITSRefitBachelor = kFALSE; }
1370
1371 // 2 - Poor quality related to TPC clusters: lowest cut of 70 clusters
1372 if(lPosTPCClusters < 70) { AliWarning("Pb / V0 Pos. track has less than 70 TPC clusters ... continue!"); continue; }
1373 if(lNegTPCClusters < 70) { AliWarning("Pb / V0 Neg. track has less than 70 TPC clusters ... continue!"); continue; }
1374 if(lBachTPCClusters < 70) { AliWarning("Pb / Bach. track has less than 70 TPC clusters ... continue!"); continue; }
1375 Int_t leastnumberofclusters = 1000;
1376 if( lPosTPCClusters < leastnumberofclusters ) leastnumberofclusters = lPosTPCClusters;
1377 if( lNegTPCClusters < leastnumberofclusters ) leastnumberofclusters = lNegTPCClusters;
1378 if( lBachTPCClusters < leastnumberofclusters ) leastnumberofclusters = lBachTPCClusters;
1379
1380 lInvMassLambdaAsCascDghter = xi->GetEffMass();
1381 // This value shouldn't change, whatever the working hyp. is : Xi-, Xi+, Omega-, Omega+
1382 lDcaV0DaughtersXi = xi->GetDcaV0Daughters();
1383 //lV0Chi2Xi = xi->GetChi2V0();
1384
1385 lV0CosineOfPointingAngleXi = xi->GetV0CosineOfPointingAngle( lBestPrimaryVtxPos[0],
1386 lBestPrimaryVtxPos[1],
1387 lBestPrimaryVtxPos[2] );
1388 //Modification: V0 CosPA wrt to Cascade decay vertex
1389 lV0CosineOfPointingAngleXiSpecial = xi->GetV0CosineOfPointingAngle( lPosXi[0],
1390 lPosXi[1],
1391 lPosXi[2] );
1392
1393 lDcaV0ToPrimVertexXi = xi->GetD( lBestPrimaryVtxPos[0],
1394 lBestPrimaryVtxPos[1],
1395 lBestPrimaryVtxPos[2] );
1396
1397 lDcaBachToPrimVertexXi = TMath::Abs( bachTrackXi->GetD( lBestPrimaryVtxPos[0],
1398 lBestPrimaryVtxPos[1],
1399 lMagneticField ) );
1400 // Note : AliExternalTrackParam::GetD returns an algebraic value ...
1401
1402 xi->GetXYZ( lPosV0Xi[0], lPosV0Xi[1], lPosV0Xi[2] );
1403 lV0RadiusXi = TMath::Sqrt( lPosV0Xi[0]*lPosV0Xi[0] + lPosV0Xi[1]*lPosV0Xi[1] );
1404
1405 lDcaPosToPrimVertexXi = TMath::Abs( pTrackXi ->GetD( lBestPrimaryVtxPos[0],
1406 lBestPrimaryVtxPos[1],
1407 lMagneticField ) );
1408
1409 lDcaNegToPrimVertexXi = TMath::Abs( nTrackXi ->GetD( lBestPrimaryVtxPos[0],
1410 lBestPrimaryVtxPos[1],
1411 lMagneticField ) );
1412
1413 // - II.Step 4 : around effective masses (ESD)
1414 // ~ change mass hypotheses to cover all the possibilities : Xi-/+, Omega -/+
1415
1416 if( bachTrackXi->Charge() < 0 ) {
1417 lV0quality = 0.;
1418 xi->ChangeMassHypothesis(lV0quality , 3312);
1419 // Calculate the effective mass of the Xi- candidate.
1420 // pdg code 3312 = Xi-
1421 lInvMassXiMinus = xi->GetEffMassXi();
1422
1423 lV0quality = 0.;
1424 xi->ChangeMassHypothesis(lV0quality , 3334);
1425 // Calculate the effective mass of the Xi- candidate.
1426 // pdg code 3334 = Omega-
1427 lInvMassOmegaMinus = xi->GetEffMassXi();
1428
1429 lV0quality = 0.;
1430 xi->ChangeMassHypothesis(lV0quality , 3312); // Back to default hyp.
1431 }// end if negative bachelor
1432
1433
1434 if( bachTrackXi->Charge() > 0 ){
1435 lV0quality = 0.;
1436 xi->ChangeMassHypothesis(lV0quality , -3312);
1437 // Calculate the effective mass of the Xi+ candidate.
1438 // pdg code -3312 = Xi+
1439 lInvMassXiPlus = xi->GetEffMassXi();
1440
1441 lV0quality = 0.;
1442 xi->ChangeMassHypothesis(lV0quality , -3334);
1443 // Calculate the effective mass of the Xi+ candidate.
1444 // pdg code -3334 = Omega+
1445 lInvMassOmegaPlus = xi->GetEffMassXi();
1446
1447 lV0quality = 0.;
1448 xi->ChangeMassHypothesis(lV0quality , -3312); // Back to "default" hyp.
1449 }// end if positive bachelor
1450 // - II.Step 6 : extra info for QA (ESD)
1451 // miscellaneous pieces of info that may help regarding data quality assessment.
1452 //-------------
1453
1454 xi->GetPxPyPz( lXiMomX, lXiMomY, lXiMomZ );
1455 lXiTransvMom = TMath::Sqrt( lXiMomX*lXiMomX + lXiMomY*lXiMomY );
1456 lXiTotMom = TMath::Sqrt( lXiMomX*lXiMomX + lXiMomY*lXiMomY + lXiMomZ*lXiMomZ );
1457
1458 xi->GetBPxPyPz( lBachMomX, lBachMomY, lBachMomZ );
1459 //lBachTransvMom = TMath::Sqrt( lBachMomX*lBachMomX + lBachMomY*lBachMomY );
1460 //lBachTotMom = TMath::Sqrt( lBachMomX*lBachMomX + lBachMomY*lBachMomY + lBachMomZ*lBachMomZ );
1461
1462 lChargeXi = xi->Charge();
1463
1464 //lV0toXiCosineOfPointingAngle = xi->GetV0CosineOfPointingAngle( lPosXi[0], lPosXi[1], lPosXi[2] );
1465
1466 lRapXi = xi->RapXi();
1467 lRapOmega = xi->RapOmega();
1468 //lEta = xi->Eta();
1469 //lTheta = xi->Theta() *180.0/TMath::Pi();
1470 //lPhi = xi->Phi() *180.0/TMath::Pi();
1471 //lAlphaXi = xi->AlphaXi();
1472 //lPtArmXi = xi->PtArmXi();
1473
1474//------------------------------------------------
1475// Associate Cascade Candidates to Monte Carlo!
1476//------------------------------------------------
1477
1478//Warning: Not using Continues... Need to fill tree later!
1479
1480 Double_t lXiTransvMomMC= 0. ;
1481 Int_t lPDGCodeCascade = 0;
1482 Int_t lPID_BachMother = 0;
1483 Int_t lPID_NegMother = 0;
1484 Int_t lPID_PosMother = 0;
1485 fTreeCascVarIsPhysicalPrimary = 0; // 0: not defined, any candidate may have this
1486
1487 if(fDebug > 5)
1488 cout << "MC EventNumber : " << lMCevent->Header()->GetEvent()
1489 << " / MC event Number in Run : " << lMCevent->Header()->GetEventNrInRun() << endl;
1490
1491//----------------------------------------
1492// Regular MC ASSOCIATION STARTS HERE
1493//----------------------------------------
1494
1495 Int_t lblPosV0Dghter = (Int_t) TMath::Abs( pTrackXi->GetLabel() );
1496 // Abs value = needed ! question of quality track association ...
1497 Int_t lblNegV0Dghter = (Int_t) TMath::Abs( nTrackXi->GetLabel() );
1498 Int_t lblBach = (Int_t) TMath::Abs( bachTrackXi->GetLabel() );
1499
1500 TParticle* mcPosV0Dghter = lMCstack->Particle( lblPosV0Dghter );
1501 TParticle* mcNegV0Dghter = lMCstack->Particle( lblNegV0Dghter );
1502 TParticle* mcBach = lMCstack->Particle( lblBach );
1503
1504 //fTreeCascVarPosTransMomMC = mcPosV0Dghter->Pt();
1505 //fTreeCascVarNegTransMomMC = mcNegV0Dghter->Pt();
1506
1507 //fTreeCascVarPIDPositive = mcPosV0Dghter -> GetPdgCode();
1508 //fTreeCascVarPIDNegative = mcNegV0Dghter -> GetPdgCode();
1509 //fTreeCascVarPIDBachelor = mcBach->GetPdgCode();
1510
1511 // - Step 4.2 : level of the Xi daughters
1512
1513 Int_t lblMotherPosV0Dghter = mcPosV0Dghter->GetFirstMother() ;
1514 Int_t lblMotherNegV0Dghter = mcNegV0Dghter->GetFirstMother();
1515
1516 //Rather uncivilized: Open brackets for each 'continue'
1517 if(! (lblMotherPosV0Dghter != lblMotherNegV0Dghter) ) { // same mother
1518 if(! (lblMotherPosV0Dghter < 0) ) { // mother != primary (!= -1)
1519 if(! (lblMotherNegV0Dghter < 0) ) {
1520
1521 // mothers = Lambda candidate ... a priori
1522
1523 TParticle* mcMotherPosV0Dghter = lMCstack->Particle( lblMotherPosV0Dghter );
1524 TParticle* mcMotherNegV0Dghter = lMCstack->Particle( lblMotherNegV0Dghter );
1525
1526 // - Step 4.3 : level of Xi candidate
1527
1528 Int_t lblGdMotherPosV0Dghter = mcMotherPosV0Dghter->GetFirstMother() ;
1529 Int_t lblGdMotherNegV0Dghter = mcMotherNegV0Dghter->GetFirstMother() ;
1530
1531 if(! (lblGdMotherPosV0Dghter != lblGdMotherNegV0Dghter) ) {
1532 if(! (lblGdMotherPosV0Dghter < 0) ) { // primary lambda ...
1533 if(! (lblGdMotherNegV0Dghter < 0) ) { // primary lambda ...
1534
1535 // Gd mothers = Xi candidate ... a priori
1536
1537 TParticle* mcGdMotherPosV0Dghter = lMCstack->Particle( lblGdMotherPosV0Dghter );
1538 TParticle* mcGdMotherNegV0Dghter = lMCstack->Particle( lblGdMotherNegV0Dghter );
1539
1540 Int_t lblMotherBach = (Int_t) TMath::Abs( mcBach->GetFirstMother() );
1541
1542 // if( lblMotherBach != lblGdMotherPosV0Dghter ) continue; //same mother for bach and V0 daughters
1543 if(!(lblMotherBach != lblGdMotherPosV0Dghter)) { //same mother for bach and V0 daughters
1544
1545 TParticle* mcMotherBach = lMCstack->Particle( lblMotherBach );
1546
1547 lPID_BachMother = mcMotherBach->GetPdgCode();
1548 lPID_NegMother = mcGdMotherPosV0Dghter->GetPdgCode();
1549 lPID_PosMother = mcGdMotherNegV0Dghter->GetPdgCode();
1550
1551 if(lPID_BachMother==lPID_NegMother && lPID_BachMother==lPID_PosMother){
1552 lPDGCodeCascade = lPID_BachMother;
1553 lXiTransvMomMC = mcMotherBach->Pt();
1554 if( lMCstack->IsPhysicalPrimary (lblMotherBach) ) fTreeCascVarIsPhysicalPrimary = 1; //Is Primary!
1555 if( lMCstack->IsSecondaryFromWeakDecay(lblMotherBach) ) fTreeCascVarIsPhysicalPrimary = 2; //Weak Decay!
1556 if( lMCstack->IsSecondaryFromMaterial (lblMotherBach) ) fTreeCascVarIsPhysicalPrimary = 3; //From Material!
1557 if ( (mcMotherBach->Energy() + mcMotherBach->Pz()) / (mcMotherBach->Energy() - mcMotherBach->Pz() +1.e-13) !=0 ){
1558 lRapMC = 0.5*TMath::Log( (mcMotherBach->Energy() + mcMotherBach->Pz()) / (mcMotherBach->Energy() - mcMotherBach->Pz() +1.e-13) );
1559 }
1560 }
1561
1562 }}}}}}} //Ends all conditionals above...
1563
1564//----------------------------------------
1565// Regular MC ASSOCIATION ENDS HERE
1566//----------------------------------------
1567
1568
1569 //------------------------------------------------
1570 // Set Variables for adding to tree
1571 //------------------------------------------------
1572
1573 fTreeCascVarCharge = lChargeXi;
1574 fTreeCascVarPID = lPDGCodeCascade;
1575 if(lInvMassXiMinus!=0) fTreeCascVarMassAsXi = lInvMassXiMinus;
1576 if(lInvMassXiPlus!=0) fTreeCascVarMassAsXi = lInvMassXiPlus;
1577 if(lInvMassOmegaMinus!=0) fTreeCascVarMassAsOmega = lInvMassOmegaMinus;
1578 if(lInvMassOmegaPlus!=0) fTreeCascVarMassAsOmega = lInvMassOmegaPlus;
1579 fTreeCascVarPt = lXiTransvMom;
1580 fTreeCascVarPtMC = lXiTransvMomMC;
1581 fTreeCascVarRapXi = lRapXi ;
1582 fTreeCascVarRapMC = lRapMC ;
1583 fTreeCascVarRapOmega = lRapOmega ;
1584 fTreeCascVarDCACascDaughters = lDcaXiDaughters;
1585 fTreeCascVarDCABachToPrimVtx = lDcaBachToPrimVertexXi;
1586 fTreeCascVarDCAV0Daughters = lDcaV0DaughtersXi;
1587 fTreeCascVarDCAV0ToPrimVtx = lDcaV0ToPrimVertexXi;
1588 fTreeCascVarDCAPosToPrimVtx = lDcaPosToPrimVertexXi;
1589 fTreeCascVarDCANegToPrimVtx = lDcaNegToPrimVertexXi;
1590 fTreeCascVarCascCosPointingAngle = lXiCosineOfPointingAngle;
1591 fTreeCascVarCascRadius = lXiRadius;
1592 fTreeCascVarV0Mass = lInvMassLambdaAsCascDghter;
1593 fTreeCascVarV0CosPointingAngle = lV0CosineOfPointingAngleXi;
1594 fTreeCascVarV0CosPointingAngleSpecial = lV0CosineOfPointingAngleXiSpecial;
1595 fTreeCascVarV0Radius = lV0RadiusXi;
1596 fTreeCascVarLeastNbrClusters = leastnumberofclusters;
1597
1598 //Copy Multiplicity information
1599 fTreeCascVarCentV0A = fCentrality_V0A;
1600 fTreeCascVarCentV0C = fCentrality_V0C;
1601 fTreeCascVarCentV0M = fCentrality_V0M;
1602 fTreeCascVarCentV0AEq = fCentrality_V0AEq;
1603 fTreeCascVarCentV0CEq = fCentrality_V0CEq;
1604 fTreeCascVarCentV0MEq = fCentrality_V0MEq;
1605 fTreeCascVarAmpV0A = fAmplitude_V0A;
1606 fTreeCascVarAmpV0C = fAmplitude_V0C;
1607 fTreeCascVarAmpV0AEq = fAmplitude_V0AEq;
1608 fTreeCascVarAmpV0CEq = fAmplitude_V0CEq;
1609 fTreeCascVarRefMultEta8 = fRefMultEta8;
1610 fTreeCascVarRefMultEta5 = fRefMultEta5;
26d39641 1611 fTreeCascVarRunNumber = fRunNumber;
af0d4791 1612
1613 fTreeCascVarDistOverTotMom = TMath::Sqrt(
1614 TMath::Power( lPosXi[0] - lBestPrimaryVtxPos[0] , 2) +
1615 TMath::Power( lPosXi[1] - lBestPrimaryVtxPos[1] , 2) +
1616 TMath::Power( lPosXi[2] - lBestPrimaryVtxPos[2] , 2)
1617 );
1618 fTreeCascVarDistOverTotMom /= (lXiTotMom+1e-13);
1619
1620//All vars not specified here: specified elsewhere!
1621
1622//------------------------------------------------
1623// Fill Tree!
1624//------------------------------------------------
1625
1626// The conditional is meant to decrease excessive
1627// memory usage! Be careful when loosening the
1628// cut!
1629
1630 //Xi Mass window: 150MeV wide
1631 //Omega mass window: 150MeV wide
1632
1633 if( fkSaveCascadeTree && ( (fTreeCascVarMassAsXi<1.32+0.075&&fTreeCascVarMassAsXi>1.32-0.075) ||
1634 (fTreeCascVarMassAsOmega<1.68+0.075&&fTreeCascVarMassAsOmega>1.68-0.075) ) ){
1635 fTreeCascade->Fill();
1636 }
1637
1638//------------------------------------------------
1639// Fill tree over.
1640//------------------------------------------------
1641
1642 }// end of the Cascade loop (ESD or AOD)
1643
1644 // Post output data.
1645 PostData(1, fListHist);
1646 PostData(2, fTreeEvent);
1647 PostData(3, fTreeV0);
1648 PostData(4, fTreeCascade);
1649}
1650
1651//________________________________________________________________________
1652void AliAnalysisTaskStrangenessVsMultiplicityMC::Terminate(Option_t *)
1653{
1654 // Draw result to the screen
1655 // Called once at the end of the query
1656
1657 TList *cRetrievedList = 0x0;
1658 cRetrievedList = (TList*)GetOutputData(1);
1659 if(!cRetrievedList){
1660 Printf("ERROR - AliAnalysisTaskStrangenessVsMultiplicityMC : ouput data container list not available\n");
1661 return;
1662 }
1663
1664 fHistEventCounter = dynamic_cast<TH1D*> ( cRetrievedList->FindObject("fHistEventCounter") );
1665 if (!fHistEventCounter) {
1666 Printf("ERROR - AliAnalysisTaskStrangenessVsMultiplicityMC : fHistEventCounter not available");
1667 return;
1668 }
1669
1670 TCanvas *canCheck = new TCanvas("AliAnalysisTaskStrangenessVsMultiplicityMC","V0 Multiplicity",10,10,510,510);
1671 canCheck->cd(1)->SetLogy();
1672
1673 fHistEventCounter->SetMarkerStyle(22);
1674 fHistEventCounter->DrawCopy("E");
1675}
1676
1677//----------------------------------------------------------------------------
1678
1679Double_t AliAnalysisTaskStrangenessVsMultiplicityMC::MyRapidity(Double_t rE, Double_t rPz) const
1680{
1681 // Local calculation for rapidity
1682 Double_t ReturnValue = -100;
1683 if( (rE-rPz+1.e-13) != 0 && (rE+rPz) != 0 ){
1684 ReturnValue = 0.5*TMath::Log((rE+rPz)/(rE-rPz+1.e-13));
1685 }
1686 return ReturnValue;
1687}