]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGLF/STRANGENESS/Cascades/AliAnalysisTaskExtractCascade.cxx
macro to calculate pileup factor from OCDB
[u/mrichter/AliRoot.git] / PWGLF / STRANGENESS / Cascades / AliAnalysisTaskExtractCascade.cxx
CommitLineData
76029adc 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//
76029adc 23//
24// --- Algorithm Description
25// 1. Loop over primaries in stack to acquire generated charged Xi
9a8f3aee 26// 2. Loop over stack to find Cascades, fill TH3Fs "PrimRawPt"s for Efficiency
76029adc 27// 3. Perform Physics Selection
28// 4. Perform Primary Vertex |z|<10cm selection
9a8f3aee 29// 5. Perform Primary Vertex NoTPCOnly vertexing selection
76029adc 30// 6. Perform Pileup Rejection
31// 7. Analysis Loops:
32// 7a. Fill TH3Fs "PrimAnalysisPt" for control purposes only
76029adc 33//
34// Please Report Any Bugs!
35//
36// --- David Dobrigkeit Chinellato
37// (david.chinellato@gmail.com)
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
d8841e95 80#include "AliV0vertexer.h"
81#include "AliCascadeVertexer.h"
82
76029adc 83#include "AliCFContainer.h"
84#include "AliMultiplicity.h"
85#include "AliAODMCParticle.h"
86#include "AliESDcascade.h"
87#include "AliAODcascade.h"
88#include "AliESDUtils.h"
89#include "AliGenEventHeader.h"
2add50c1 90#include "AliAnalysisUtils.h"
76029adc 91
92#include "AliAnalysisTaskExtractCascade.h"
93
94using std::cout;
95using std::endl;
96
97ClassImp(AliAnalysisTaskExtractCascade)
98
99AliAnalysisTaskExtractCascade::AliAnalysisTaskExtractCascade()
2add50c1 100 : AliAnalysisTaskSE(), fListHist(0), fTreeCascade(0), fPIDResponse(0), fESDtrackCuts(0), fUtils(0),
76029adc 101 fkIsNuclear ( kFALSE ),
2213f6fc 102 fkSwitchINT7 ( kFALSE ),
da3539d8 103 fCentralityEstimator("V0M"),
2add50c1 104 fkpAVertexSelection( kFALSE ),
cda235e2 105 fEtaRefMult ( 0.5 ),
38927449 106 fkRunVertexers ( kFALSE ),
2213f6fc 107//------------------------------------------------
108// Tree Variables
109//------------------------------------------------
110
111 fTreeCascVarCharge(0),
112 fTreeCascVarMassAsXi(0),
113 fTreeCascVarMassAsOmega(0),
114 fTreeCascVarPt(0),
115 fTreeCascVarPtMC(0),
116 fTreeCascVarRapMC(0),
117 fTreeCascVarRapXi(0),
118 fTreeCascVarRapOmega(0),
119 fTreeCascVarNegEta(0),
120 fTreeCascVarPosEta(0),
121 fTreeCascVarBachEta(0),
122 fTreeCascVarDCACascDaughters(0),
123 fTreeCascVarDCABachToPrimVtx(0),
124 fTreeCascVarDCAV0Daughters(0),
125 fTreeCascVarDCAV0ToPrimVtx(0),
126 fTreeCascVarDCAPosToPrimVtx(0),
127 fTreeCascVarDCANegToPrimVtx(0),
128 fTreeCascVarCascCosPointingAngle(0),
129 fTreeCascVarCascRadius(0),
130 fTreeCascVarV0Mass(0),
131 fTreeCascVarV0CosPointingAngle(0),
571c9e48 132 fTreeCascVarV0CosPointingAngleSpecial(0),
2213f6fc 133 fTreeCascVarV0Radius(0),
134 fTreeCascVarLeastNbrClusters(0),
135 fTreeCascVarMultiplicity(0),
5d43de53 136 fTreeCascVarMultiplicityV0A(0),
137 fTreeCascVarMultiplicityZNA(0),
138 fTreeCascVarMultiplicityTRK(0),
139 fTreeCascVarMultiplicitySPD(0),
2213f6fc 140 fTreeCascVarDistOverTotMom(0),
141 fTreeCascVarPID(0),
142 fTreeCascVarPIDBachelor(0),
143 fTreeCascVarPIDNegative(0),
144 fTreeCascVarPIDPositive(0),
145 fTreeCascVarPosTransMom(0),
146 fTreeCascVarNegTransMom(0),
147 fTreeCascVarPosTransMomMC(0),
148 fTreeCascVarNegTransMomMC(0),
149 fTreeCascVarNegNSigmaPion(0),
150 fTreeCascVarNegNSigmaProton(0),
151 fTreeCascVarPosNSigmaPion(0),
152 fTreeCascVarPosNSigmaProton(0),
153 fTreeCascVarBachNSigmaPion(0),
154 fTreeCascVarBachNSigmaKaon(0),
76029adc 155
156//------------------------------------------------
157// HISTOGRAMS
158// --- Filled on an Event-by-event basis
159//------------------------------------------------
160 fHistV0MultiplicityBeforeTrigSel(0),
161 fHistV0MultiplicityForTrigEvt(0),
162 fHistV0MultiplicityForSelEvt(0),
163 fHistV0MultiplicityForSelEvtNoTPCOnly(0),
164 fHistV0MultiplicityForSelEvtNoTPCOnlyNoPileup(0),
165 fHistMultiplicityBeforeTrigSel(0),
166 fHistMultiplicityForTrigEvt(0),
167 fHistMultiplicity(0),
168 fHistMultiplicityNoTPCOnly(0),
169 fHistMultiplicityNoTPCOnlyNoPileup(0),
5d43de53 170
171//V0A Centrality
172fHistMultiplicityV0ABeforeTrigSel(0),
173fHistMultiplicityV0AForTrigEvt(0),
174fHistMultiplicityV0A(0),
175fHistMultiplicityV0ANoTPCOnly(0),
176fHistMultiplicityV0ANoTPCOnlyNoPileup(0),
177
178//ZNA Centrality
179fHistMultiplicityZNABeforeTrigSel(0),
180fHistMultiplicityZNAForTrigEvt(0),
181fHistMultiplicityZNA(0),
182fHistMultiplicityZNANoTPCOnly(0),
183fHistMultiplicityZNANoTPCOnlyNoPileup(0),
184
185//TRK Centrality
186fHistMultiplicityTRKBeforeTrigSel(0),
187fHistMultiplicityTRKForTrigEvt(0),
188fHistMultiplicityTRK(0),
189fHistMultiplicityTRKNoTPCOnly(0),
190fHistMultiplicityTRKNoTPCOnlyNoPileup(0),
191
192//SPD Centrality
193fHistMultiplicitySPDBeforeTrigSel(0),
194fHistMultiplicitySPDForTrigEvt(0),
195fHistMultiplicitySPD(0),
196fHistMultiplicitySPDNoTPCOnly(0),
197fHistMultiplicitySPDNoTPCOnlyNoPileup(0),
198
76029adc 199 fHistPVx(0),
200 fHistPVy(0),
201 fHistPVz(0),
202 fHistPVxAnalysis(0),
203 fHistPVyAnalysis(0),
204 fHistPVzAnalysis(0)
205{
206 // Dummy Constructor
207}
208
209AliAnalysisTaskExtractCascade::AliAnalysisTaskExtractCascade(const char *name)
2add50c1 210 : AliAnalysisTaskSE(name), fListHist(0), fTreeCascade(0), fPIDResponse(0), fESDtrackCuts(0), fUtils(0),
76029adc 211 fkIsNuclear ( kFALSE ),
2213f6fc 212 fkSwitchINT7 ( kFALSE ),
2add50c1 213 fCentralityEstimator("V0M"),
214 fkpAVertexSelection( kFALSE ),
cda235e2 215 fEtaRefMult ( 0.5 ),
38927449 216 fkRunVertexers ( kFALSE ),
2213f6fc 217//------------------------------------------------
218// Tree Variables
219//------------------------------------------------
220
221 fTreeCascVarCharge(0),
222 fTreeCascVarMassAsXi(0),
223 fTreeCascVarMassAsOmega(0),
224 fTreeCascVarPt(0),
225 fTreeCascVarPtMC(0),
226 fTreeCascVarRapMC(0),
227 fTreeCascVarRapXi(0),
228 fTreeCascVarRapOmega(0),
229 fTreeCascVarNegEta(0),
230 fTreeCascVarPosEta(0),
231 fTreeCascVarBachEta(0),
232 fTreeCascVarDCACascDaughters(0),
233 fTreeCascVarDCABachToPrimVtx(0),
234 fTreeCascVarDCAV0Daughters(0),
235 fTreeCascVarDCAV0ToPrimVtx(0),
236 fTreeCascVarDCAPosToPrimVtx(0),
237 fTreeCascVarDCANegToPrimVtx(0),
238 fTreeCascVarCascCosPointingAngle(0),
239 fTreeCascVarCascRadius(0),
240 fTreeCascVarV0Mass(0),
241 fTreeCascVarV0CosPointingAngle(0),
571c9e48 242 fTreeCascVarV0CosPointingAngleSpecial(0),
2213f6fc 243 fTreeCascVarV0Radius(0),
244 fTreeCascVarLeastNbrClusters(0),
245 fTreeCascVarMultiplicity(0),
5d43de53 246 fTreeCascVarMultiplicityV0A(0),
247 fTreeCascVarMultiplicityZNA(0),
248 fTreeCascVarMultiplicityTRK(0),
249 fTreeCascVarMultiplicitySPD(0),
2213f6fc 250 fTreeCascVarDistOverTotMom(0),
251 fTreeCascVarPID(0),
252 fTreeCascVarPIDBachelor(0),
253 fTreeCascVarPIDNegative(0),
254 fTreeCascVarPIDPositive(0),
255 fTreeCascVarPosTransMom(0),
256 fTreeCascVarNegTransMom(0),
257 fTreeCascVarPosTransMomMC(0),
258 fTreeCascVarNegTransMomMC(0),
259 fTreeCascVarNegNSigmaPion(0),
260 fTreeCascVarNegNSigmaProton(0),
261 fTreeCascVarPosNSigmaPion(0),
262 fTreeCascVarPosNSigmaProton(0),
263 fTreeCascVarBachNSigmaPion(0),
264 fTreeCascVarBachNSigmaKaon(0),
265
76029adc 266//------------------------------------------------
267// HISTOGRAMS
268// --- Filled on an Event-by-event basis
269//------------------------------------------------
270 fHistV0MultiplicityBeforeTrigSel(0),
271 fHistV0MultiplicityForTrigEvt(0),
272 fHistV0MultiplicityForSelEvt(0),
273 fHistV0MultiplicityForSelEvtNoTPCOnly(0),
274 fHistV0MultiplicityForSelEvtNoTPCOnlyNoPileup(0),
275 fHistMultiplicityBeforeTrigSel(0),
276 fHistMultiplicityForTrigEvt(0),
277 fHistMultiplicity(0),
278 fHistMultiplicityNoTPCOnly(0),
279 fHistMultiplicityNoTPCOnlyNoPileup(0),
5d43de53 280
281//V0A Centrality
282fHistMultiplicityV0ABeforeTrigSel(0),
283fHistMultiplicityV0AForTrigEvt(0),
284fHistMultiplicityV0A(0),
285fHistMultiplicityV0ANoTPCOnly(0),
286fHistMultiplicityV0ANoTPCOnlyNoPileup(0),
287
288//ZNA Centrality
289fHistMultiplicityZNABeforeTrigSel(0),
290fHistMultiplicityZNAForTrigEvt(0),
291fHistMultiplicityZNA(0),
292fHistMultiplicityZNANoTPCOnly(0),
293fHistMultiplicityZNANoTPCOnlyNoPileup(0),
294
295//TRK Centrality
296fHistMultiplicityTRKBeforeTrigSel(0),
297fHistMultiplicityTRKForTrigEvt(0),
298fHistMultiplicityTRK(0),
299fHistMultiplicityTRKNoTPCOnly(0),
300fHistMultiplicityTRKNoTPCOnlyNoPileup(0),
301
302//SPD Centrality
303fHistMultiplicitySPDBeforeTrigSel(0),
304fHistMultiplicitySPDForTrigEvt(0),
305fHistMultiplicitySPD(0),
306fHistMultiplicitySPDNoTPCOnly(0),
307fHistMultiplicitySPDNoTPCOnlyNoPileup(0),
308
76029adc 309 fHistPVx(0),
310 fHistPVy(0),
311 fHistPVz(0),
312 fHistPVxAnalysis(0),
313 fHistPVyAnalysis(0),
314 fHistPVzAnalysis(0)
315{
316 // Constructor
d8841e95 317
318 //Set Variables for re-running the cascade vertexers (as done for MS paper)
319
320 // New Loose : 1st step for the 7 TeV pp analysis
d8841e95 321
38927449 322 fV0VertexerSels[0] = 33. ; // max allowed chi2
323 fV0VertexerSels[1] = 0.02; // min allowed impact parameter for the 1st daughter (LHC09a4 : 0.05)
324 fV0VertexerSels[2] = 0.02; // min allowed impact parameter for the 2nd daughter (LHC09a4 : 0.05)
325 fV0VertexerSels[3] = 2.0 ; // max allowed DCA between the daughter tracks (LHC09a4 : 0.5)
326 fV0VertexerSels[4] = 0.95; // min allowed cosine of V0's pointing angle (LHC09a4 : 0.99)
327 fV0VertexerSels[5] = 1.0 ; // min radius of the fiducial volume (LHC09a4 : 0.2)
328 fV0VertexerSels[6] = 200. ; // max radius of the fiducial volume (LHC09a4 : 100.0)
329
330 fCascadeVertexerSels[0] = 33. ; // max allowed chi2 (same as PDC07)
331 fCascadeVertexerSels[1] = 0.05 ; // min allowed V0 impact parameter (PDC07 : 0.05 / LHC09a4 : 0.025 )
332 fCascadeVertexerSels[2] = 0.010; // "window" around the Lambda mass (PDC07 : 0.008 / LHC09a4 : 0.010 )
333 fCascadeVertexerSels[3] = 0.03 ; // min allowed bachelor's impact parameter (PDC07 : 0.035 / LHC09a4 : 0.025 )
334 fCascadeVertexerSels[4] = 2.0 ; // max allowed DCA between the V0 and the bachelor (PDC07 : 0.1 / LHC09a4 : 0.2 )
335 fCascadeVertexerSels[5] = 0.95 ; // min allowed cosine of the cascade pointing angle (PDC07 : 0.9985 / LHC09a4 : 0.998 )
336 fCascadeVertexerSels[6] = 0.4 ; // min radius of the fiducial volume (PDC07 : 0.9 / LHC09a4 : 0.2 )
337 fCascadeVertexerSels[7] = 100. ; // max radius of the fiducial volume (PDC07 : 100 / LHC09a4 : 100 )
338
76029adc 339 // Output slot #0 writes into a TList container (Cascade)
340 DefineOutput(1, TList::Class());
341 DefineOutput(2, TTree::Class());
342}
343
344
345AliAnalysisTaskExtractCascade::~AliAnalysisTaskExtractCascade()
346{
347//------------------------------------------------
348// DESTRUCTOR
349//------------------------------------------------
350
351 if (fListHist){
352 delete fListHist;
353 fListHist = 0x0;
354 }
355 if (fTreeCascade){
356 delete fTreeCascade;
357 fTreeCascade = 0x0;
358 }
359 //cleanup esd track cuts object too...
360 if (fESDtrackCuts){
361 delete fESDtrackCuts;
362 fESDtrackCuts = 0x0;
363 }
2add50c1 364 if (fUtils){
365 delete fUtils;
366 fUtils = 0x0;
367 }
76029adc 368
369}
370
371//________________________________________________________________________
372void AliAnalysisTaskExtractCascade::UserCreateOutputObjects()
373{
374 OpenFile(2);
375 // Called once
376
377//------------------------------------------------
378
379 fTreeCascade = new TTree("fTreeCascade","CascadeCandidates");
380
381//------------------------------------------------
382// fTreeCascade Branch definitions - Cascade Tree
383//------------------------------------------------
384
385//------------------------------------------------
386// fTreeCascade Branch definitions
387//------------------------------------------------
388
389//-----------BASIC-INFO---------------------------
390/* 1*/ fTreeCascade->Branch("fTreeCascVarCharge",&fTreeCascVarCharge,"fTreeCascVarCharge/I");
391/* 2*/ fTreeCascade->Branch("fTreeCascVarMassAsXi",&fTreeCascVarMassAsXi,"fTreeCascVarMassAsXi/F");
392/* 3*/ fTreeCascade->Branch("fTreeCascVarMassAsOmega",&fTreeCascVarMassAsOmega,"fTreeCascVarMassAsOmega/F");
393/* 4*/ fTreeCascade->Branch("fTreeCascVarPt",&fTreeCascVarPt,"fTreeCascVarPt/F");
394/* 5*/ fTreeCascade->Branch("fTreeCascVarRapXi",&fTreeCascVarRapXi,"fTreeCascVarRapXi/F");
395/* 6*/ fTreeCascade->Branch("fTreeCascVarRapOmega",&fTreeCascVarRapOmega,"fTreeCascVarRapOmega/F");
396/* 7*/ fTreeCascade->Branch("fTreeCascVarNegEta",&fTreeCascVarNegEta,"fTreeCascVarNegEta/F");
397/* 8*/ fTreeCascade->Branch("fTreeCascVarPosEta",&fTreeCascVarPosEta,"fTreeCascVarPosEta/F");
398/* 9*/ fTreeCascade->Branch("fTreeCascVarBachEta",&fTreeCascVarBachEta,"fTreeCascVarBachEta/F");
399//-----------INFO-FOR-CUTS------------------------
400/*10*/ fTreeCascade->Branch("fTreeCascVarDCACascDaughters",&fTreeCascVarDCACascDaughters,"fTreeCascVarDCACascDaughters/F");
401/*11*/ fTreeCascade->Branch("fTreeCascVarDCABachToPrimVtx",&fTreeCascVarDCABachToPrimVtx,"fTreeCascVarDCABachToPrimVtx/F");
402/*12*/ fTreeCascade->Branch("fTreeCascVarDCAV0Daughters",&fTreeCascVarDCAV0Daughters,"fTreeCascVarDCAV0Daughters/F");
403/*13*/ fTreeCascade->Branch("fTreeCascVarDCAV0ToPrimVtx",&fTreeCascVarDCAV0ToPrimVtx,"fTreeCascVarDCAV0ToPrimVtx/F");
404/*14*/ fTreeCascade->Branch("fTreeCascVarDCAPosToPrimVtx",&fTreeCascVarDCAPosToPrimVtx,"fTreeCascVarDCAPosToPrimVtx/F");
405/*15*/ fTreeCascade->Branch("fTreeCascVarDCANegToPrimVtx",&fTreeCascVarDCANegToPrimVtx,"fTreeCascVarDCANegToPrimVtx/F");
406/*16*/ fTreeCascade->Branch("fTreeCascVarCascCosPointingAngle",&fTreeCascVarCascCosPointingAngle,"fTreeCascVarCascCosPointingAngle/F");
407/*17*/ fTreeCascade->Branch("fTreeCascVarCascRadius",&fTreeCascVarCascRadius,"fTreeCascVarCascRadius/F");
408/*18*/ fTreeCascade->Branch("fTreeCascVarV0Mass",&fTreeCascVarV0Mass,"fTreeCascVarV0Mass/F");
409/*19*/ fTreeCascade->Branch("fTreeCascVarV0CosPointingAngle",&fTreeCascVarV0CosPointingAngle,"fTreeCascVarV0CosPointingAngle/F");
571c9e48 410/*19*/ fTreeCascade->Branch("fTreeCascVarV0CosPointingAngleSpecial",&fTreeCascVarV0CosPointingAngleSpecial,"fTreeCascVarV0CosPointingAngleSpecial/F");
76029adc 411/*20*/ fTreeCascade->Branch("fTreeCascVarV0Radius",&fTreeCascVarV0Radius,"fTreeCascVarV0Radius/F");
412/*21*/ fTreeCascade->Branch("fTreeCascVarLeastNbrClusters",&fTreeCascVarLeastNbrClusters,"fTreeCascVarLeastNbrClusters/I");
413//-----------MULTIPLICITY-INFO--------------------
414/*22*/ fTreeCascade->Branch("fTreeCascVarMultiplicity",&fTreeCascVarMultiplicity,"fTreeCascVarMultiplicity/I");
5d43de53 415/*22*/ fTreeCascade->Branch("fTreeCascVarMultiplicityV0A",&fTreeCascVarMultiplicityV0A,"fTreeCascVarMultiplicityV0A/I");
416/*22*/ fTreeCascade->Branch("fTreeCascVarMultiplicityZNA",&fTreeCascVarMultiplicityZNA,"fTreeCascVarMultiplicityZNA/I");
417/*22*/ fTreeCascade->Branch("fTreeCascVarMultiplicityTRK",&fTreeCascVarMultiplicityTRK,"fTreeCascVarMultiplicityTRK/I");
418/*22*/ fTreeCascade->Branch("fTreeCascVarMultiplicitySPD",&fTreeCascVarMultiplicitySPD,"fTreeCascVarMultiplicitySPD/I");
76029adc 419//-----------DECAY-LENGTH-INFO--------------------
420/*23*/ fTreeCascade->Branch("fTreeCascVarDistOverTotMom",&fTreeCascVarDistOverTotMom,"fTreeCascVarDistOverTotMom/F");
421//------------------------------------------------
422/*24*/ fTreeCascade->Branch("fTreeCascVarNegNSigmaPion",&fTreeCascVarNegNSigmaPion,"fTreeCascVarNegNSigmaPion/F");
423/*25*/ fTreeCascade->Branch("fTreeCascVarNegNSigmaProton",&fTreeCascVarNegNSigmaProton,"fTreeCascVarNegNSigmaProton/F");
424/*26*/ fTreeCascade->Branch("fTreeCascVarPosNSigmaPion",&fTreeCascVarPosNSigmaPion,"fTreeCascVarPosNSigmaPion/F");
425/*27*/ fTreeCascade->Branch("fTreeCascVarPosNSigmaProton",&fTreeCascVarPosNSigmaProton,"fTreeCascVarPosNSigmaProton/F");
426/*28*/ fTreeCascade->Branch("fTreeCascVarBachNSigmaPion",&fTreeCascVarBachNSigmaPion,"fTreeCascVarBachNSigmaPion/F");
427/*29*/ fTreeCascade->Branch("fTreeCascVarBachNSigmaKaon",&fTreeCascVarBachNSigmaKaon,"fTreeCascVarBachNSigmaKaon/F");
428
429//------------------------------------------------
430// Particle Identification Setup
431//------------------------------------------------
432
433 AliAnalysisManager *man=AliAnalysisManager::GetAnalysisManager();
434 AliInputEventHandler* inputHandler = (AliInputEventHandler*) (man->GetInputEventHandler());
435 fPIDResponse = inputHandler->GetPIDResponse();
436
437// Multiplicity
438
2add50c1 439 if(! fESDtrackCuts ){
440 fESDtrackCuts = new AliESDtrackCuts();
441 }
442 if(! fUtils ){
443 fUtils = new AliAnalysisUtils();
444 }
76029adc 445
446//------------------------------------------------
447// V0 Multiplicity Histograms
448//------------------------------------------------
449
450 // Create histograms
451 OpenFile(1);
452 fListHist = new TList();
453 fListHist->SetOwner(); // See http://root.cern.ch/root/html/TCollection.html#TCollection:SetOwner
454
455
456 if(! fHistV0MultiplicityBeforeTrigSel) {
457 fHistV0MultiplicityBeforeTrigSel = new TH1F("fHistV0MultiplicityBeforeTrigSel",
458 "V0s per event (before Trig. Sel.);Nbr of V0s/Evt;Events",
459 25, 0, 25);
460 fListHist->Add(fHistV0MultiplicityBeforeTrigSel);
461 }
462
463 if(! fHistV0MultiplicityForTrigEvt) {
464 fHistV0MultiplicityForTrigEvt = new TH1F("fHistV0MultiplicityForTrigEvt",
465 "V0s per event (for triggered evt);Nbr of V0s/Evt;Events",
466 25, 0, 25);
467 fListHist->Add(fHistV0MultiplicityForTrigEvt);
468 }
469
470 if(! fHistV0MultiplicityForSelEvt) {
471 fHistV0MultiplicityForSelEvt = new TH1F("fHistV0MultiplicityForSelEvt",
472 "V0s per event;Nbr of V0s/Evt;Events",
473 25, 0, 25);
474 fListHist->Add(fHistV0MultiplicityForSelEvt);
475 }
476
477 if(! fHistV0MultiplicityForSelEvtNoTPCOnly) {
478 fHistV0MultiplicityForSelEvtNoTPCOnly = new TH1F("fHistV0MultiplicityForSelEvtNoTPCOnly",
479 "V0s per event;Nbr of V0s/Evt;Events",
480 25, 0, 25);
481 fListHist->Add(fHistV0MultiplicityForSelEvtNoTPCOnly);
482 }
483 if(! fHistV0MultiplicityForSelEvtNoTPCOnlyNoPileup) {
484 fHistV0MultiplicityForSelEvtNoTPCOnlyNoPileup = new TH1F("fHistV0MultiplicityForSelEvtNoTPCOnlyNoPileup",
485 "V0s per event;Nbr of V0s/Evt;Events",
486 25, 0, 25);
487 fListHist->Add(fHistV0MultiplicityForSelEvtNoTPCOnlyNoPileup);
488 }
489
490//------------------------------------------------
491// Track Multiplicity Histograms
492//------------------------------------------------
493
494 if(! fHistMultiplicityBeforeTrigSel) {
495 fHistMultiplicityBeforeTrigSel = new TH1F("fHistMultiplicityBeforeTrigSel",
496 "Tracks per event;Nbr of Tracks;Events",
497 200, 0, 200);
498 fListHist->Add(fHistMultiplicityBeforeTrigSel);
499 }
500 if(! fHistMultiplicityForTrigEvt) {
501 fHistMultiplicityForTrigEvt = new TH1F("fHistMultiplicityForTrigEvt",
502 "Tracks per event;Nbr of Tracks;Events",
503 200, 0, 200);
504 fListHist->Add(fHistMultiplicityForTrigEvt);
505 }
506 if(! fHistMultiplicity) {
507 fHistMultiplicity = new TH1F("fHistMultiplicity",
508 "Tracks per event;Nbr of Tracks;Events",
509 200, 0, 200);
510 fListHist->Add(fHistMultiplicity);
511 }
512 if(! fHistMultiplicityNoTPCOnly) {
513 fHistMultiplicityNoTPCOnly = new TH1F("fHistMultiplicityNoTPCOnly",
514 "Tracks per event;Nbr of Tracks;Events",
515 200, 0, 200);
516 fListHist->Add(fHistMultiplicityNoTPCOnly);
517 }
518 if(! fHistMultiplicityNoTPCOnlyNoPileup) {
519 fHistMultiplicityNoTPCOnlyNoPileup = new TH1F("fHistMultiplicityNoTPCOnlyNoPileup",
520 "Tracks per event;Nbr of Tracks;Events",
521 200, 0, 200);
522 fListHist->Add(fHistMultiplicityNoTPCOnlyNoPileup);
523 }
5d43de53 524
525
526 //V0A Centrality (if PbPb / pPb)
527 if(! fHistMultiplicityV0ABeforeTrigSel) {
528 fHistMultiplicityV0ABeforeTrigSel = new TH1F("fHistMultiplicityV0ABeforeTrigSel",
529 "Centrality Distribution: V0A;V0A Centrality;Events",
530 200, 0, 200);
531 fListHist->Add(fHistMultiplicityV0ABeforeTrigSel);
532 }
533 if(! fHistMultiplicityV0AForTrigEvt) {
534 fHistMultiplicityV0AForTrigEvt = new TH1F("fHistMultiplicityV0AForTrigEvt",
535 "Centrality Distribution: V0A;V0A Centrality;Events",
536 200, 0, 200);
537 fListHist->Add(fHistMultiplicityV0AForTrigEvt);
538 }
539 if(! fHistMultiplicityV0A) {
540 fHistMultiplicityV0A = new TH1F("fHistMultiplicityV0A",
541 "Centrality Distribution: V0A;V0A Centrality;Events",
542 200, 0, 200);
543 fListHist->Add(fHistMultiplicityV0A);
544 }
545 if(! fHistMultiplicityV0ANoTPCOnly) {
546 fHistMultiplicityV0ANoTPCOnly = new TH1F("fHistMultiplicityV0ANoTPCOnly",
547 "Centrality Distribution: V0A;V0A Centrality;Events",
548 200, 0, 200);
549 fListHist->Add(fHistMultiplicityV0ANoTPCOnly);
550 }
551 if(! fHistMultiplicityV0ANoTPCOnlyNoPileup) {
552 fHistMultiplicityV0ANoTPCOnlyNoPileup = new TH1F("fHistMultiplicityV0ANoTPCOnlyNoPileup",
553 "Centrality Distribution: V0A;V0A Centrality;Events",
554 200, 0, 200);
555 fListHist->Add(fHistMultiplicityV0ANoTPCOnlyNoPileup);
556 }
557
558 //ZNA Centrality (if PbPb / pPb)
559 if(! fHistMultiplicityZNABeforeTrigSel) {
560 fHistMultiplicityZNABeforeTrigSel = new TH1F("fHistMultiplicityZNABeforeTrigSel",
561 "Centrality Distribution: ZNA;ZNA Centrality;Events",
562 200, 0, 200);
563 fListHist->Add(fHistMultiplicityZNABeforeTrigSel);
564 }
565 if(! fHistMultiplicityZNAForTrigEvt) {
566 fHistMultiplicityZNAForTrigEvt = new TH1F("fHistMultiplicityZNAForTrigEvt",
567 "Centrality Distribution: ZNA;ZNA Centrality;Events",
568 200, 0, 200);
569 fListHist->Add(fHistMultiplicityZNAForTrigEvt);
570 }
571 if(! fHistMultiplicityZNA) {
572 fHistMultiplicityZNA = new TH1F("fHistMultiplicityZNA",
573 "Centrality Distribution: ZNA;ZNA Centrality;Events",
574 200, 0, 200);
575 fListHist->Add(fHistMultiplicityZNA);
576 }
577 if(! fHistMultiplicityZNANoTPCOnly) {
578 fHistMultiplicityZNANoTPCOnly = new TH1F("fHistMultiplicityZNANoTPCOnly",
579 "Centrality Distribution: ZNA;ZNA Centrality;Events",
580 200, 0, 200);
581 fListHist->Add(fHistMultiplicityZNANoTPCOnly);
582 }
583 if(! fHistMultiplicityZNANoTPCOnlyNoPileup) {
584 fHistMultiplicityZNANoTPCOnlyNoPileup = new TH1F("fHistMultiplicityZNANoTPCOnlyNoPileup",
585 "Centrality Distribution: ZNA;ZNA Centrality;Events",
586 200, 0, 200);
587 fListHist->Add(fHistMultiplicityZNANoTPCOnlyNoPileup);
588 }
589
590 //TRK Centrality (if PbPb / pPb)
591 if(! fHistMultiplicityTRKBeforeTrigSel) {
592 fHistMultiplicityTRKBeforeTrigSel = new TH1F("fHistMultiplicityTRKBeforeTrigSel",
593 "Centrality Distribution: TRK;TRK Centrality;Events",
594 200, 0, 200);
595 fListHist->Add(fHistMultiplicityTRKBeforeTrigSel);
596 }
597 if(! fHistMultiplicityTRKForTrigEvt) {
598 fHistMultiplicityTRKForTrigEvt = new TH1F("fHistMultiplicityTRKForTrigEvt",
599 "Centrality Distribution: TRK;TRK Centrality;Events",
600 200, 0, 200);
601 fListHist->Add(fHistMultiplicityTRKForTrigEvt);
602 }
603 if(! fHistMultiplicityTRK) {
604 fHistMultiplicityTRK = new TH1F("fHistMultiplicityTRK",
605 "Centrality Distribution: TRK;TRK Centrality;Events",
606 200, 0, 200);
607 fListHist->Add(fHistMultiplicityTRK);
608 }
609 if(! fHistMultiplicityTRKNoTPCOnly) {
610 fHistMultiplicityTRKNoTPCOnly = new TH1F("fHistMultiplicityTRKNoTPCOnly",
611 "Centrality Distribution: TRK;TRK Centrality;Events",
612 200, 0, 200);
613 fListHist->Add(fHistMultiplicityTRKNoTPCOnly);
614 }
615 if(! fHistMultiplicityTRKNoTPCOnlyNoPileup) {
616 fHistMultiplicityTRKNoTPCOnlyNoPileup = new TH1F("fHistMultiplicityTRKNoTPCOnlyNoPileup",
617 "Centrality Distribution: TRK;TRK Centrality;Events",
618 200, 0, 200);
619 fListHist->Add(fHistMultiplicityTRKNoTPCOnlyNoPileup);
620 }
621
622 //SPD Centrality (if PbPb / pPb)
623 if(! fHistMultiplicitySPDBeforeTrigSel) {
624 fHistMultiplicitySPDBeforeTrigSel = new TH1F("fHistMultiplicitySPDBeforeTrigSel",
625 "Centrality Distribution: SPD;SPD Centrality;Events",
626 200, 0, 200);
627 fListHist->Add(fHistMultiplicitySPDBeforeTrigSel);
628 }
629 if(! fHistMultiplicitySPDForTrigEvt) {
630 fHistMultiplicitySPDForTrigEvt = new TH1F("fHistMultiplicitySPDForTrigEvt",
631 "Centrality Distribution: SPD;SPD Centrality;Events",
632 200, 0, 200);
633 fListHist->Add(fHistMultiplicitySPDForTrigEvt);
634 }
635 if(! fHistMultiplicitySPD) {
636 fHistMultiplicitySPD = new TH1F("fHistMultiplicitySPD",
637 "Centrality Distribution: SPD;SPD Centrality;Events",
638 200, 0, 200);
639 fListHist->Add(fHistMultiplicitySPD);
640 }
641 if(! fHistMultiplicitySPDNoTPCOnly) {
642 fHistMultiplicitySPDNoTPCOnly = new TH1F("fHistMultiplicitySPDNoTPCOnly",
643 "Centrality Distribution: SPD;SPD Centrality;Events",
644 200, 0, 200);
645 fListHist->Add(fHistMultiplicitySPDNoTPCOnly);
646 }
647 if(! fHistMultiplicitySPDNoTPCOnlyNoPileup) {
648 fHistMultiplicitySPDNoTPCOnlyNoPileup = new TH1F("fHistMultiplicitySPDNoTPCOnlyNoPileup",
649 "Centrality Distribution: SPD;SPD Centrality;Events",
650 200, 0, 200);
651 fListHist->Add(fHistMultiplicitySPDNoTPCOnlyNoPileup);
652 }
653
76029adc 654
655//----------------------------------
656// Primary Vertex Position Histos
657//----------------------------------
658
659 if(! fHistPVx) {
660 fHistPVx = new TH1F("fHistPVx",
661 "PV x position;Nbr of Evts;x",
662 2000, -0.5, 0.5);
663 fListHist->Add(fHistPVx);
664 }
665 if(! fHistPVy) {
666 fHistPVy = new TH1F("fHistPVy",
667 "PV y position;Nbr of Evts;y",
668 2000, -0.5, 0.5);
669 fListHist->Add(fHistPVy);
670 }
671 if(! fHistPVz) {
672 fHistPVz = new TH1F("fHistPVz",
673 "PV z position;Nbr of Evts;z",
674 400, -20, 20);
675 fListHist->Add(fHistPVz);
676 }
677
678 if(! fHistPVxAnalysis) {
679 fHistPVxAnalysis = new TH1F("fHistPVxAnalysis",
680 "PV x position;Nbr of Evts;x",
681 2000, -0.5, 0.5);
682 fListHist->Add(fHistPVxAnalysis);
683 }
684 if(! fHistPVyAnalysis) {
685 fHistPVyAnalysis = new TH1F("fHistPVyAnalysis",
686 "PV y position;Nbr of Evts;y",
687 2000, -0.5, 0.5);
688 fListHist->Add(fHistPVyAnalysis);
689 }
690 if(! fHistPVzAnalysis) {
691 fHistPVzAnalysis = new TH1F("fHistPVzAnalysis",
692 "PV z position;Nbr of Evts;z",
693 400, -20, 20);
694 fListHist->Add(fHistPVzAnalysis);
695 }
696
697 //List of Histograms: Normal
698 PostData(1, fListHist);
699
700 //TTree Object: Saved to base directory. Should cache to disk while saving.
701 //(Important to avoid excessive memory usage, particularly when merging)
702 PostData(2, fTreeCascade);
703
704}// end UserCreateOutputObjects
705
706
707//________________________________________________________________________
708void AliAnalysisTaskExtractCascade::UserExec(Option_t *)
709{
710 // Main loop
711 // Called for each event
712
713 AliESDEvent *lESDevent = 0x0;
714
715 Int_t lNumberOfV0s = -1;
716 Double_t lTrkgPrimaryVtxPos[3] = {-100.0, -100.0, -100.0};
717 Double_t lBestPrimaryVtxPos[3] = {-100.0, -100.0, -100.0};
718 Double_t lMagneticField = -10.;
719
720 // Connect to the InputEvent
721 // After these lines, we should have an ESD/AOD event + the number of V0s in it.
722
723 // Appropriate for ESD analysis!
724
725 lESDevent = dynamic_cast<AliESDEvent*>( InputEvent() );
726 if (!lESDevent) {
727 AliWarning("ERROR: lESDevent not available \n");
728 return;
729 }
730
731/* --- Acquisition of exact event ID
732 fTreeVariableRunNumber = lESDevent->GetRunNumber();
733 fTreeVariableEventNumber =
734 ( ( ((ULong64_t)lESDevent->GetPeriodNumber() ) << 36 ) |
735 ( ((ULong64_t)lESDevent->GetOrbitNumber () ) << 12 ) |
736 ((ULong64_t)lESDevent->GetBunchCrossNumber() ) );
737*/
738
739//------------------------------------------------
740// Multiplicity Information Acquistion
741//------------------------------------------------
742
743 //REVISED multiplicity estimator after 'multiplicity day' (2011)
5d43de53 744 Int_t lMultiplicity = -100;
745 Int_t lMultiplicityV0A = -100;
746 Int_t lMultiplicityZNA = -100;
747 Int_t lMultiplicityTRK = -100;
748 Int_t lMultiplicitySPD = -100;
76029adc 749
750 //testing purposes
cda235e2 751 if(fkIsNuclear == kFALSE) lMultiplicity = fESDtrackCuts->GetReferenceMultiplicity(lESDevent, AliESDtrackCuts::kTrackletsITSTPC, fEtaRefMult );
76029adc 752
753 //---> If this is a nuclear collision, then go nuclear on "multiplicity" variable...
754 //---> Warning: Experimental
755 if(fkIsNuclear == kTRUE){
756 AliCentrality* centrality;
757 centrality = lESDevent->GetCentrality();
da3539d8 758 lMultiplicity = ( ( Int_t ) ( centrality->GetCentralityPercentile( fCentralityEstimator.Data() ) ) );
5d43de53 759 lMultiplicityV0A = ( ( Int_t ) ( centrality->GetCentralityPercentile( "V0A" ) ) );
760 lMultiplicityZNA = ( ( Int_t ) ( centrality->GetCentralityPercentile( "ZNA" ) ) );
761 lMultiplicityTRK = ( ( Int_t ) ( centrality->GetCentralityPercentile( "TRK" ) ) );
f8bc074c 762 lMultiplicitySPD = ( ( Int_t ) ( centrality->GetCentralityPercentile( "CL1" ) ) );
76029adc 763 if (centrality->GetQuality()>1) {
764 PostData(1, fListHist);
765 PostData(2, fTreeCascade);
766 return;
767 }
768 }
769
770 //Set variable for filling tree afterwards!
771 //---> pp case......: GetReferenceMultiplicity
772 //---> Pb-Pb case...: Centrality by V0M
773
5d43de53 774 fTreeCascVarMultiplicity = lMultiplicity;
775 fTreeCascVarMultiplicityV0A = lMultiplicityV0A;
776 fTreeCascVarMultiplicityZNA = lMultiplicityZNA;
777 fTreeCascVarMultiplicityTRK = lMultiplicityTRK;
778 fTreeCascVarMultiplicitySPD = lMultiplicitySPD;
779
780 fHistV0MultiplicityBeforeTrigSel->Fill ( lESDevent->GetNumberOfV0s() );
781 fHistMultiplicityBeforeTrigSel->Fill ( lMultiplicity );
782 fHistMultiplicityV0ABeforeTrigSel->Fill ( lMultiplicityV0A );
783 fHistMultiplicityZNABeforeTrigSel->Fill ( lMultiplicityZNA );
784 fHistMultiplicityTRKBeforeTrigSel->Fill ( lMultiplicityTRK );
785 fHistMultiplicitySPDBeforeTrigSel->Fill ( lMultiplicitySPD );
786
76029adc 787//------------------------------------------------
788// Physics Selection
789//------------------------------------------------
790
791 UInt_t maskIsSelected = ((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected();
792 Bool_t isSelected = 0;
793 isSelected = (maskIsSelected & AliVEvent::kMB) == AliVEvent::kMB;
794
2213f6fc 795 //pA triggering: CINT7
796 if( fkSwitchINT7 ) isSelected = (maskIsSelected & AliVEvent::kINT7) == AliVEvent::kINT7;
797
76029adc 798 //Standard Min-Bias Selection
799 if ( ! isSelected ) {
800 PostData(1, fListHist);
801 PostData(2, fTreeCascade);
802 return;
803 }
804
d8841e95 805//------------------------------------------------
806// Rerun cascade vertexer!
807//------------------------------------------------
d8841e95 808
38927449 809 if( fkRunVertexers ){
810 lESDevent->ResetCascades();
811 lESDevent->ResetV0s();
d8841e95 812
38927449 813 AliV0vertexer lV0vtxer;
814 AliCascadeVertexer lCascVtxer;
815
816 lV0vtxer.SetDefaultCuts(fV0VertexerSels);
817 lCascVtxer.SetDefaultCuts(fCascadeVertexerSels);
818
819 lV0vtxer.Tracks2V0vertices(lESDevent);
820 lCascVtxer.V0sTracks2CascadeVertices(lESDevent);
821 }
76029adc 822//------------------------------------------------
823// After Trigger Selection
824//------------------------------------------------
825
826 lNumberOfV0s = lESDevent->GetNumberOfV0s();
827
828 //Set variable for filling tree afterwards!
829 fHistV0MultiplicityForTrigEvt->Fill(lNumberOfV0s);
830 fHistMultiplicityForTrigEvt->Fill ( lMultiplicity );
5d43de53 831 fHistMultiplicityV0AForTrigEvt ->Fill( lMultiplicityV0A );
832 fHistMultiplicityZNAForTrigEvt ->Fill( lMultiplicityZNA );
833 fHistMultiplicityTRKForTrigEvt ->Fill( lMultiplicityTRK );
834 fHistMultiplicitySPDForTrigEvt ->Fill( lMultiplicitySPD );
76029adc 835
836//------------------------------------------------
837// Getting: Primary Vertex + MagField Info
838//------------------------------------------------
839
840 const AliESDVertex *lPrimaryTrackingESDVtx = lESDevent->GetPrimaryVertexTracks();
841 // get the vtx stored in ESD found with tracks
842 lPrimaryTrackingESDVtx->GetXYZ( lTrkgPrimaryVtxPos );
843
844 const AliESDVertex *lPrimaryBestESDVtx = lESDevent->GetPrimaryVertex();
845 // get the best primary vertex available for the event
846 // As done in AliCascadeVertexer, we keep the one which is the best one available.
847 // between : Tracking vertex > SPD vertex > TPC vertex > default SPD vertex
848 // This one will be used for next calculations (DCA essentially)
849 lPrimaryBestESDVtx->GetXYZ( lBestPrimaryVtxPos );
850
851 Double_t lPrimaryVtxPosition[3];
852 const AliVVertex *primaryVtx = lESDevent->GetPrimaryVertex();
853 lPrimaryVtxPosition[0] = primaryVtx->GetX();
854 lPrimaryVtxPosition[1] = primaryVtx->GetY();
855 lPrimaryVtxPosition[2] = primaryVtx->GetZ();
856 fHistPVx->Fill( lPrimaryVtxPosition[0] );
857 fHistPVy->Fill( lPrimaryVtxPosition[1] );
858 fHistPVz->Fill( lPrimaryVtxPosition[2] );
859
ab47349e 860 //------------------------------------------------
861 // Primary Vertex Requirements Section:
862 // ---> pp and PbPb: Only requires |z|<10cm
863 // ---> pPb: all requirements checked at this stage
864 //------------------------------------------------
865
866 //Roberto's PV selection criteria, implemented 17th April 2013
867
868 /* vertex selection */
869 Bool_t fHasVertex = kFALSE;
870
871 const AliESDVertex *vertex = lESDevent->GetPrimaryVertexTracks();
872 if (vertex->GetNContributors() < 1) {
873 vertex = lESDevent->GetPrimaryVertexSPD();
874 if (vertex->GetNContributors() < 1) fHasVertex = kFALSE;
875 else fHasVertex = kTRUE;
876 TString vtxTyp = vertex->GetTitle();
877 Double_t cov[6]={0};
878 vertex->GetCovarianceMatrix(cov);
879 Double_t zRes = TMath::Sqrt(cov[5]);
880 if (vtxTyp.Contains("vertexer:Z") && (zRes>0.25)) fHasVertex = kFALSE;
881 }
882 else fHasVertex = kTRUE;
883
884 //Is First event in chunk rejection: Still present!
885 if(fkpAVertexSelection==kTRUE && fHasVertex == kFALSE) {
886 AliWarning("Pb / | PV does not satisfy selection criteria!");
2add50c1 887 PostData(1, fListHist);
888 PostData(2, fTreeCascade);
889 return;
890 }
ab47349e 891
892 //Is First event in chunk rejection: Still present!
2add50c1 893 if(fkpAVertexSelection==kTRUE && fUtils->IsFirstEventInChunk(lESDevent)) {
894 AliWarning("Pb / | This is the first event in the chunk!");
895 PostData(1, fListHist);
896 PostData(2, fTreeCascade);
897 return;
898 }
ab47349e 899
900 //17 April Fix: Always do primary vertex Z selection, after pA vertex selection from Roberto
901 if(TMath::Abs(lBestPrimaryVtxPos[2]) > 10.0) {
902 AliWarning("Pb / | Z position of Best Prim Vtx | > 10.0 cm ... return !");
2add50c1 903 PostData(1, fListHist);
904 PostData(2, fTreeCascade);
905 return;
906 }
ab47349e 907
908
2add50c1 909 lMagneticField = lESDevent->GetMagneticField( );
910 fHistV0MultiplicityForSelEvt ->Fill( lNumberOfV0s );
911 fHistMultiplicity->Fill(lMultiplicity);
912 fHistMultiplicityV0A->Fill(lMultiplicityV0A);
913 fHistMultiplicityZNA->Fill(lMultiplicityZNA);
914 fHistMultiplicityTRK->Fill(lMultiplicityTRK);
915 fHistMultiplicitySPD->Fill(lMultiplicitySPD);
76029adc 916
917//------------------------------------------------
918// SKIP: Events with well-established PVtx
919//------------------------------------------------
920
921 const AliESDVertex *lPrimaryTrackingESDVtxCheck = lESDevent->GetPrimaryVertexTracks();
922 const AliESDVertex *lPrimarySPDVtx = lESDevent->GetPrimaryVertexSPD();
2add50c1 923 if (!lPrimarySPDVtx->GetStatus() && !lPrimaryTrackingESDVtxCheck->GetStatus() && fkpAVertexSelection==kFALSE ){
76029adc 924 AliWarning("Pb / No SPD prim. vertex nor prim. Tracking vertex ... return !");
925 PostData(1, fListHist);
926 PostData(2, fTreeCascade);
927 return;
928 }
929 fHistV0MultiplicityForSelEvtNoTPCOnly ->Fill( lNumberOfV0s );
930 fHistMultiplicityNoTPCOnly->Fill(lMultiplicity);
5d43de53 931 fHistMultiplicityV0ANoTPCOnly->Fill(lMultiplicityV0A);
932 fHistMultiplicityZNANoTPCOnly->Fill(lMultiplicityZNA);
933 fHistMultiplicityTRKNoTPCOnly->Fill(lMultiplicityTRK);
934 fHistMultiplicitySPDNoTPCOnly->Fill(lMultiplicitySPD);
76029adc 935
936//------------------------------------------------
937// Pileup Rejection Studies
938//------------------------------------------------
939
940 // FIXME : quality selection regarding pile-up rejection
941 if(lESDevent->IsPileupFromSPD() && !fkIsNuclear ){// minContributors=3, minZdist=0.8, nSigmaZdist=3., nSigmaDiamXY=2., nSigmaDiamZ=5. -> see http://alisoft.cern.ch/viewvc/trunk/STEER/AliESDEvent.h?root=AliRoot&r1=41914&r2=42199&pathrev=42199
942 AliWarning("Pb / This is tagged as Pileup from SPD... return !");
943 PostData(1, fListHist);
944 PostData(2, fTreeCascade);
945 return;
946 }
947 fHistV0MultiplicityForSelEvtNoTPCOnlyNoPileup ->Fill( lNumberOfV0s );
948 fHistMultiplicityNoTPCOnlyNoPileup->Fill(lMultiplicity);
5d43de53 949 fHistMultiplicityV0ANoTPCOnlyNoPileup->Fill(lMultiplicityV0A);
950 fHistMultiplicityZNANoTPCOnlyNoPileup->Fill(lMultiplicityZNA);
951 fHistMultiplicityTRKNoTPCOnlyNoPileup->Fill(lMultiplicityTRK);
952 fHistMultiplicitySPDNoTPCOnlyNoPileup->Fill(lMultiplicitySPD);
76029adc 953
954 //Do control histograms without the IsFromVertexerZ events, but consider them in analysis...
955 if( ! (lESDevent->GetPrimaryVertex()->IsFromVertexerZ() ) ){
956 fHistPVxAnalysis->Fill( lPrimaryVtxPosition[0] );
957 fHistPVyAnalysis->Fill( lPrimaryVtxPosition[1] );
958 fHistPVzAnalysis->Fill( lPrimaryVtxPosition[2] );
959 }
960
961//------------------------------------------------
962// MAIN CASCADE LOOP STARTS HERE
963//------------------------------------------------
964// Code Credit: Antonin Maire (thanks^100)
965// ---> This is an adaptation
966
967 Long_t ncascades = 0;
968 ncascades = lESDevent->GetNumberOfCascades();
969
970 for (Int_t iXi = 0; iXi < ncascades; iXi++){
971 //------------------------------------------------
972 // Initializations
973 //------------------------------------------------
974 //Double_t lTrkgPrimaryVtxRadius3D = -500.0;
975 //Double_t lBestPrimaryVtxRadius3D = -500.0;
976
977 // - 1st part of initialisation : variables needed to store AliESDCascade data members
978 Double_t lEffMassXi = 0. ;
979 //Double_t lChi2Xi = -1. ;
980 Double_t lDcaXiDaughters = -1. ;
981 Double_t lXiCosineOfPointingAngle = -1. ;
982 Double_t lPosXi[3] = { -1000.0, -1000.0, -1000.0 };
983 Double_t lXiRadius = -1000. ;
984
985 // - 2nd part of initialisation : Nbr of clusters within TPC for the 3 daughter cascade tracks
986 Int_t lPosTPCClusters = -1; // For ESD only ...//FIXME : wait for availability in AOD
987 Int_t lNegTPCClusters = -1; // For ESD only ...
988 Int_t lBachTPCClusters = -1; // For ESD only ...
989
990 // - 3rd part of initialisation : about V0 part in cascades
991 Double_t lInvMassLambdaAsCascDghter = 0.;
992 //Double_t lV0Chi2Xi = -1. ;
993 Double_t lDcaV0DaughtersXi = -1.;
994
995 Double_t lDcaBachToPrimVertexXi = -1., lDcaV0ToPrimVertexXi = -1.;
996 Double_t lDcaPosToPrimVertexXi = -1.;
997 Double_t lDcaNegToPrimVertexXi = -1.;
998 Double_t lV0CosineOfPointingAngleXi = -1. ;
571c9e48 999 Double_t lV0CosineOfPointingAngleXiSpecial = -1. ;
76029adc 1000 Double_t lPosV0Xi[3] = { -1000. , -1000., -1000. }; // Position of VO coming from cascade
1001 Double_t lV0RadiusXi = -1000.0;
1002 Double_t lV0quality = 0.;
1003
1004 // - 4th part of initialisation : Effective masses
1005 Double_t lInvMassXiMinus = 0.;
1006 Double_t lInvMassXiPlus = 0.;
1007 Double_t lInvMassOmegaMinus = 0.;
1008 Double_t lInvMassOmegaPlus = 0.;
1009
1010 // - 6th part of initialisation : extra info for QA
1011 Double_t lXiMomX = 0. , lXiMomY = 0., lXiMomZ = 0.;
1012 Double_t lXiTransvMom = 0. ;
1013 Double_t lXiTransvMomMC= 0. ;
1014 Double_t lXiTotMom = 0. ;
1015
1016 Double_t lBachMomX = 0., lBachMomY = 0., lBachMomZ = 0.;
1017 //Double_t lBachTransvMom = 0.;
1018 //Double_t lBachTotMom = 0.;
1019
1020 fTreeCascVarNegNSigmaPion = -100;
1021 fTreeCascVarNegNSigmaProton = -100;
1022 fTreeCascVarPosNSigmaPion = -100;
1023 fTreeCascVarPosNSigmaProton = -100;
1024 fTreeCascVarBachNSigmaPion = -100;
1025 fTreeCascVarBachNSigmaKaon = -100;
1026
1027 Short_t lChargeXi = -2;
1028 //Double_t lV0toXiCosineOfPointingAngle = 0. ;
1029
1030 Double_t lRapXi = -20.0, lRapOmega = -20.0, lRapMC = -20.0; // lEta = -20.0, lTheta = 360., lPhi = 720. ;
1031 //Double_t lAlphaXi = -200., lPtArmXi = -200.0;
1032
1033 // -------------------------------------
1034 // II.ESD - Calculation Part dedicated to Xi vertices (ESD)
1035
1036 AliESDcascade *xi = lESDevent->GetCascade(iXi);
1037 if (!xi) continue;
1038
1039
1040 // - II.Step 1 : around primary vertex
1041 //-------------
1042 //lTrkgPrimaryVtxRadius3D = TMath::Sqrt( lTrkgPrimaryVtxPos[0] * lTrkgPrimaryVtxPos[0] +
1043 // lTrkgPrimaryVtxPos[1] * lTrkgPrimaryVtxPos[1] +
1044 // lTrkgPrimaryVtxPos[2] * lTrkgPrimaryVtxPos[2] );
1045
1046 //lBestPrimaryVtxRadius3D = TMath::Sqrt( lBestPrimaryVtxPos[0] * lBestPrimaryVtxPos[0] +
1047 // lBestPrimaryVtxPos[1] * lBestPrimaryVtxPos[1] +
1048 // lBestPrimaryVtxPos[2] * lBestPrimaryVtxPos[2] );
1049
1050 // - II.Step 2 : Assigning the necessary variables for specific AliESDcascade data members (ESD)
1051 //-------------
1052 lV0quality = 0.;
1053 xi->ChangeMassHypothesis(lV0quality , 3312); // default working hypothesis : cascade = Xi- decay
1054
1055 lEffMassXi = xi->GetEffMassXi();
1056 //lChi2Xi = xi->GetChi2Xi();
1057 lDcaXiDaughters = xi->GetDcaXiDaughters();
1058 lXiCosineOfPointingAngle = xi->GetCascadeCosineOfPointingAngle( lBestPrimaryVtxPos[0],
1059 lBestPrimaryVtxPos[1],
1060 lBestPrimaryVtxPos[2] );
1061 // Take care : the best available vertex should be used (like in AliCascadeVertexer)
1062
1063 xi->GetXYZcascade( lPosXi[0], lPosXi[1], lPosXi[2] );
1064 lXiRadius = TMath::Sqrt( lPosXi[0]*lPosXi[0] + lPosXi[1]*lPosXi[1] );
1065
1066 // - II.Step 3 : around the tracks : Bach + V0 (ESD)
1067 // ~ Necessary variables for ESDcascade data members coming from the ESDv0 part (inheritance)
1068 //-------------
1069
1070 UInt_t lIdxPosXi = (UInt_t) TMath::Abs( xi->GetPindex() );
1071 UInt_t lIdxNegXi = (UInt_t) TMath::Abs( xi->GetNindex() );
1072 UInt_t lBachIdx = (UInt_t) TMath::Abs( xi->GetBindex() );
1073 // Care track label can be negative in MC production (linked with the track quality)
1074 // However = normally, not the case for track index ...
1075
1076 // FIXME : rejection of a double use of a daughter track (nothing but just a crosscheck of what is done in the cascade vertexer)
1077 if(lBachIdx == lIdxNegXi) {
1078 AliWarning("Pb / Idx(Bach. track) = Idx(Neg. track) ... continue!"); continue;
1079 }
1080 if(lBachIdx == lIdxPosXi) {
1081 AliWarning("Pb / Idx(Bach. track) = Idx(Pos. track) ... continue!"); continue;
1082 }
1083
1084 AliESDtrack *pTrackXi = lESDevent->GetTrack( lIdxPosXi );
1085 AliESDtrack *nTrackXi = lESDevent->GetTrack( lIdxNegXi );
1086 AliESDtrack *bachTrackXi = lESDevent->GetTrack( lBachIdx );
1087
1088 if (!pTrackXi || !nTrackXi || !bachTrackXi ) {
1089 AliWarning("ERROR: Could not retrieve one of the 3 ESD daughter tracks of the cascade ...");
1090 continue;
1091 }
1092
1093 fTreeCascVarPosEta = pTrackXi->Eta();
1094 fTreeCascVarNegEta = nTrackXi->Eta();
1095 fTreeCascVarBachEta = bachTrackXi->Eta();
1096
1097 //------------------------------------------------
1098 // TPC dEdx information
1099 //------------------------------------------------
1100 fTreeCascVarNegNSigmaPion = fPIDResponse->NumberOfSigmasTPC( nTrackXi, AliPID::kPion );
1101 fTreeCascVarNegNSigmaProton = fPIDResponse->NumberOfSigmasTPC( nTrackXi, AliPID::kProton );
1102 fTreeCascVarPosNSigmaPion = fPIDResponse->NumberOfSigmasTPC( pTrackXi, AliPID::kPion );
1103 fTreeCascVarPosNSigmaProton = fPIDResponse->NumberOfSigmasTPC( pTrackXi, AliPID::kProton );
1104 fTreeCascVarBachNSigmaPion = fPIDResponse->NumberOfSigmasTPC( bachTrackXi, AliPID::kPion );
1105 fTreeCascVarBachNSigmaKaon = fPIDResponse->NumberOfSigmasTPC( bachTrackXi, AliPID::kKaon );
1106
1107 //------------------------------------------------
1108 // TPC Number of clusters info
1109 // --- modified to save the smallest number
1110 // --- of TPC clusters for the 3 tracks
1111 //------------------------------------------------
1112
1113 lPosTPCClusters = pTrackXi->GetTPCNcls();
1114 lNegTPCClusters = nTrackXi->GetTPCNcls();
1115 lBachTPCClusters = bachTrackXi->GetTPCNcls();
1116
1117 // 1 - Poor quality related to TPCrefit
1118 ULong_t pStatus = pTrackXi->GetStatus();
1119 ULong_t nStatus = nTrackXi->GetStatus();
1120 ULong_t bachStatus = bachTrackXi->GetStatus();
1121 if ((pStatus&AliESDtrack::kTPCrefit) == 0) { AliWarning("Pb / V0 Pos. track has no TPCrefit ... continue!"); continue; }
1122 if ((nStatus&AliESDtrack::kTPCrefit) == 0) { AliWarning("Pb / V0 Neg. track has no TPCrefit ... continue!"); continue; }
1123 if ((bachStatus&AliESDtrack::kTPCrefit) == 0) { AliWarning("Pb / Bach. track has no TPCrefit ... continue!"); continue; }
1124 // 2 - Poor quality related to TPC clusters: lowest cut of 70 clusters
1125 if(lPosTPCClusters < 70) { AliWarning("Pb / V0 Pos. track has less than 70 TPC clusters ... continue!"); continue; }
1126 if(lNegTPCClusters < 70) { AliWarning("Pb / V0 Neg. track has less than 70 TPC clusters ... continue!"); continue; }
1127 if(lBachTPCClusters < 70) { AliWarning("Pb / Bach. track has less than 70 TPC clusters ... continue!"); continue; }
1128 Int_t leastnumberofclusters = 1000;
1129 if( lPosTPCClusters < leastnumberofclusters ) leastnumberofclusters = lPosTPCClusters;
1130 if( lNegTPCClusters < leastnumberofclusters ) leastnumberofclusters = lNegTPCClusters;
1131 if( lBachTPCClusters < leastnumberofclusters ) leastnumberofclusters = lBachTPCClusters;
1132
1133 lInvMassLambdaAsCascDghter = xi->GetEffMass();
1134 // This value shouldn't change, whatever the working hyp. is : Xi-, Xi+, Omega-, Omega+
1135 lDcaV0DaughtersXi = xi->GetDcaV0Daughters();
1136 //lV0Chi2Xi = xi->GetChi2V0();
1137
1138 lV0CosineOfPointingAngleXi = xi->GetV0CosineOfPointingAngle( lBestPrimaryVtxPos[0],
1139 lBestPrimaryVtxPos[1],
1140 lBestPrimaryVtxPos[2] );
571c9e48 1141 //Modification: V0 CosPA wrt to Cascade decay vertex
1142 lV0CosineOfPointingAngleXiSpecial = xi->GetV0CosineOfPointingAngle( lPosXi[0],
1143 lPosXi[1],
1144 lPosXi[2] );
76029adc 1145
1146 lDcaV0ToPrimVertexXi = xi->GetD( lBestPrimaryVtxPos[0],
1147 lBestPrimaryVtxPos[1],
1148 lBestPrimaryVtxPos[2] );
1149
1150 lDcaBachToPrimVertexXi = TMath::Abs( bachTrackXi->GetD( lBestPrimaryVtxPos[0],
1151 lBestPrimaryVtxPos[1],
1152 lMagneticField ) );
1153 // Note : AliExternalTrackParam::GetD returns an algebraic value ...
1154
1155 xi->GetXYZ( lPosV0Xi[0], lPosV0Xi[1], lPosV0Xi[2] );
1156 lV0RadiusXi = TMath::Sqrt( lPosV0Xi[0]*lPosV0Xi[0] + lPosV0Xi[1]*lPosV0Xi[1] );
1157
1158 lDcaPosToPrimVertexXi = TMath::Abs( pTrackXi ->GetD( lBestPrimaryVtxPos[0],
1159 lBestPrimaryVtxPos[1],
1160 lMagneticField ) );
1161
1162 lDcaNegToPrimVertexXi = TMath::Abs( nTrackXi ->GetD( lBestPrimaryVtxPos[0],
1163 lBestPrimaryVtxPos[1],
1164 lMagneticField ) );
1165
1166 // - II.Step 4 : around effective masses (ESD)
1167 // ~ change mass hypotheses to cover all the possibilities : Xi-/+, Omega -/+
1168
1169 if( bachTrackXi->Charge() < 0 ) {
1170 lV0quality = 0.;
1171 xi->ChangeMassHypothesis(lV0quality , 3312);
1172 // Calculate the effective mass of the Xi- candidate.
1173 // pdg code 3312 = Xi-
1174 lInvMassXiMinus = xi->GetEffMassXi();
1175
1176 lV0quality = 0.;
1177 xi->ChangeMassHypothesis(lV0quality , 3334);
1178 // Calculate the effective mass of the Xi- candidate.
1179 // pdg code 3334 = Omega-
1180 lInvMassOmegaMinus = xi->GetEffMassXi();
1181
1182 lV0quality = 0.;
1183 xi->ChangeMassHypothesis(lV0quality , 3312); // Back to default hyp.
1184 }// end if negative bachelor
1185
1186
1187 if( bachTrackXi->Charge() > 0 ){
1188 lV0quality = 0.;
1189 xi->ChangeMassHypothesis(lV0quality , -3312);
1190 // Calculate the effective mass of the Xi+ candidate.
1191 // pdg code -3312 = Xi+
1192 lInvMassXiPlus = xi->GetEffMassXi();
1193
1194 lV0quality = 0.;
1195 xi->ChangeMassHypothesis(lV0quality , -3334);
1196 // Calculate the effective mass of the Xi+ candidate.
1197 // pdg code -3334 = Omega+
1198 lInvMassOmegaPlus = xi->GetEffMassXi();
1199
1200 lV0quality = 0.;
1201 xi->ChangeMassHypothesis(lV0quality , -3312); // Back to "default" hyp.
1202 }// end if positive bachelor
1203 // - II.Step 6 : extra info for QA (ESD)
1204 // miscellaneous pieces of info that may help regarding data quality assessment.
1205 //-------------
1206
1207 xi->GetPxPyPz( lXiMomX, lXiMomY, lXiMomZ );
1208 lXiTransvMom = TMath::Sqrt( lXiMomX*lXiMomX + lXiMomY*lXiMomY );
1209 lXiTotMom = TMath::Sqrt( lXiMomX*lXiMomX + lXiMomY*lXiMomY + lXiMomZ*lXiMomZ );
1210
1211 xi->GetBPxPyPz( lBachMomX, lBachMomY, lBachMomZ );
1212 //lBachTransvMom = TMath::Sqrt( lBachMomX*lBachMomX + lBachMomY*lBachMomY );
1213 //lBachTotMom = TMath::Sqrt( lBachMomX*lBachMomX + lBachMomY*lBachMomY + lBachMomZ*lBachMomZ );
1214
1215 lChargeXi = xi->Charge();
1216
1217 //lV0toXiCosineOfPointingAngle = xi->GetV0CosineOfPointingAngle( lPosXi[0], lPosXi[1], lPosXi[2] );
1218
1219 lRapXi = xi->RapXi();
1220 lRapOmega = xi->RapOmega();
1221 //lEta = xi->Eta();
1222 //lTheta = xi->Theta() *180.0/TMath::Pi();
1223 //lPhi = xi->Phi() *180.0/TMath::Pi();
1224 //lAlphaXi = xi->AlphaXi();
1225 //lPtArmXi = xi->PtArmXi();
1226
1227 //------------------------------------------------
1228 // Set Variables for adding to tree
1229 //------------------------------------------------
1230
1231/* 1*/ fTreeCascVarCharge = lChargeXi;
1232/* 2*/ if(lInvMassXiMinus!=0) fTreeCascVarMassAsXi = lInvMassXiMinus;
1233/* 2*/ if(lInvMassXiPlus!=0) fTreeCascVarMassAsXi = lInvMassXiPlus;
1234/* 3*/ if(lInvMassOmegaMinus!=0) fTreeCascVarMassAsOmega = lInvMassOmegaMinus;
1235/* 3*/ if(lInvMassOmegaPlus!=0) fTreeCascVarMassAsOmega = lInvMassOmegaPlus;
1236/* 4*/ fTreeCascVarPt = lXiTransvMom;
1237/* 4*/ fTreeCascVarPtMC = lXiTransvMomMC;
1238/* 5*/ fTreeCascVarRapXi = lRapXi ;
1239/* 5*/ fTreeCascVarRapMC = lRapMC ;
1240/* 6*/ fTreeCascVarRapOmega = lRapOmega ;
1241/* 7*/ fTreeCascVarDCACascDaughters = lDcaXiDaughters;
1242/* 8*/ fTreeCascVarDCABachToPrimVtx = lDcaBachToPrimVertexXi;
1243/* 9*/ fTreeCascVarDCAV0Daughters = lDcaV0DaughtersXi;
1244/*10*/ fTreeCascVarDCAV0ToPrimVtx = lDcaV0ToPrimVertexXi;
1245/*11*/ fTreeCascVarDCAPosToPrimVtx = lDcaPosToPrimVertexXi;
1246/*12*/ fTreeCascVarDCANegToPrimVtx = lDcaNegToPrimVertexXi;
1247/*13*/ fTreeCascVarCascCosPointingAngle = lXiCosineOfPointingAngle;
1248/*14*/ fTreeCascVarCascRadius = lXiRadius;
1249/*15*/ fTreeCascVarV0Mass = lInvMassLambdaAsCascDghter;
1250/*16*/ fTreeCascVarV0CosPointingAngle = lV0CosineOfPointingAngleXi;
571c9e48 1251/*16*/ fTreeCascVarV0CosPointingAngleSpecial = lV0CosineOfPointingAngleXiSpecial;
76029adc 1252/*17*/ fTreeCascVarV0Radius = lV0RadiusXi;
1253/*20*/ fTreeCascVarLeastNbrClusters = leastnumberofclusters;
1254/*21*/ fTreeCascVarMultiplicity = lMultiplicity; //multiplicity, whatever that may be
1255
1256/*23*/ fTreeCascVarDistOverTotMom = TMath::Sqrt(
1257 TMath::Power( lPosXi[0] - lBestPrimaryVtxPos[0] , 2) +
1258 TMath::Power( lPosXi[1] - lBestPrimaryVtxPos[1] , 2) +
1259 TMath::Power( lPosXi[2] - lBestPrimaryVtxPos[2] , 2)
1260 );
1261/*23*/ fTreeCascVarDistOverTotMom /= (lXiTotMom+1e-13);
1262
1263//All vars not specified here: specified elsewhere!
1264
1265//------------------------------------------------
1266// Fill Tree!
1267//------------------------------------------------
1268
1269// The conditional is meant to decrease excessive
1270// memory usage! Be careful when loosening the
1271// cut!
1272
1273 //Xi Mass window: 150MeV wide
1274 //Omega mass window: 150MeV wide
1275
1276 if( (fTreeCascVarMassAsXi<1.32+0.075&&fTreeCascVarMassAsXi>1.32-0.075) ||
1277 (fTreeCascVarMassAsOmega<1.68+0.075&&fTreeCascVarMassAsOmega>1.68-0.075) ){
1278 fTreeCascade->Fill();
1279 }
1280
1281//------------------------------------------------
1282// Fill tree over.
1283//------------------------------------------------
1284
1285 }// end of the Cascade loop (ESD or AOD)
1286
1287 // Post output data.
1288 PostData(1, fListHist);
1289 PostData(2, fTreeCascade);
1290}
1291
1292//________________________________________________________________________
1293void AliAnalysisTaskExtractCascade::Terminate(Option_t *)
1294{
1295 // Draw result to the screen
1296 // Called once at the end of the query
1297
1298 TList *cRetrievedList = 0x0;
1299 cRetrievedList = (TList*)GetOutputData(1);
1300 if(!cRetrievedList){
1301 Printf("ERROR - AliAnalysisTaskExtractCascade : ouput data container list not available\n");
1302 return;
1303 }
1304
1305 fHistV0MultiplicityForTrigEvt = dynamic_cast<TH1F*> ( cRetrievedList->FindObject("fHistV0MultiplicityForTrigEvt") );
1306 if (!fHistV0MultiplicityForTrigEvt) {
1307 Printf("ERROR - AliAnalysisTaskExtractCascade : fHistV0MultiplicityForTrigEvt not available");
1308 return;
1309 }
1310
1311 TCanvas *canCheck = new TCanvas("AliAnalysisTaskExtractCascade","V0 Multiplicity",10,10,510,510);
1312 canCheck->cd(1)->SetLogy();
1313
1314 fHistV0MultiplicityForTrigEvt->SetMarkerStyle(22);
1315 fHistV0MultiplicityForTrigEvt->DrawCopy("E");
1316}
1317
1318//----------------------------------------------------------------------------
1319
1320Double_t AliAnalysisTaskExtractCascade::MyRapidity(Double_t rE, Double_t rPz) const
1321{
1322 // Local calculation for rapidity
1323 Double_t ReturnValue = -100;
1324 if( (rE-rPz+1.e-13) != 0 && (rE+rPz) != 0 ){
1325 ReturnValue = 0.5*TMath::Log((rE+rPz)/(rE-rPz+1.e-13));
1326 }
1327 return ReturnValue;
1328}