]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGLF/STRANGENESS/Cascades/AliAnalysisTaskCheckCascade.cxx
Merge branch 'feature-movesplit'
[u/mrichter/AliRoot.git] / PWGLF / STRANGENESS / Cascades / AliAnalysisTaskCheckCascade.cxx
CommitLineData
45ee0bcc 1
2/**************************************************************************
3 * Authors : Antonin Maire, Boris Hippolyte *
4 * Contributors are mentioned in the code where appropriate. *
5 * *
6 * Permission to use, copy, modify and distribute this software and its *
7 * documentation strictly for non-commercial purposes is hereby granted *
8 * without fee, provided that the above copyright notice appears in all *
9 * copies and that both the copyright notice and this permission notice *
10 * appear in the supporting documentation. The authors make no claims *
11 * about the suitability of this software for any purpose. It is *
12 * provided "as is" without express or implied warranty. *
13 **************************************************************************/
14
15//-----------------------------------------------------------------
16// AliAnalysisTaskCheckCascade class
3873f6ee 17// (AliAnalysisTaskCheckCascade)
32599cd4 18// This task has four roles :
3873f6ee 19// 1. QAing the Cascades from ESD and AOD
20// Origin: AliAnalysisTaskESDCheckV0 by B.H. Nov2007, hippolyt@in2p3.fr
32599cd4 21// 2. Prepare the plots which stand as raw material for yield extraction (wi/wo PID)
22// 3. Supply an AliCFContainer meant to define the optimised topological selections
23// 4. Rough azimuthal correlation study (Eta, Phi)
3873f6ee 24// Adapted to Cascade : A.Maire Mar2008, antonin.maire@ires.in2p3.fr
c525f360 25// Modified : A.Maire Nov2010, antonin.maire@ires.in2p3.fr
45ee0bcc 26//-----------------------------------------------------------------
27
28
29
45ee0bcc 30class TTree;
31class TParticle;
45ee0bcc 32
33//class AliMCEventHandler;
34//class AliMCEvent;
35//class AliStack;
36
37class AliESDVertex;
38class AliAODVertex;
39class AliESDv0;
40class AliAODv0;
41
f87cd3db 42#include <Riostream.h>
45ee0bcc 43#include "TList.h"
6dc8b253 44#include "TH1.h"
45#include "TH2.h"
ff0753e1 46#include "TH3.h"
1bf66ceb 47//#include "THnSparse.h"
3873f6ee 48#include "TVector3.h"
45ee0bcc 49#include "TCanvas.h"
50#include "TMath.h"
f3dc9369 51#include "TLegend.h"
45ee0bcc 52
3873f6ee 53
45ee0bcc 54#include "AliLog.h"
55
56#include "AliESDEvent.h"
57#include "AliAODEvent.h"
c525f360 58// #include "AliV0vertexer.h"
59// #include "AliCascadeVertexer.h"
10d100d4 60#include "AliESDpid.h"
c525f360 61#include "AliESDtrackCuts.h"
7e504402 62
63#include "AliInputEventHandler.h"
64#include "AliAnalysisManager.h"
90926f02 65#include "AliMCEventHandler.h"
7e504402 66
32599cd4 67#include "AliCFContainer.h"
68#include "AliMultiplicity.h"
45ee0bcc 69
70#include "AliESDcascade.h"
71#include "AliAODcascade.h"
72
73#include "AliAnalysisTaskCheckCascade.h"
74
75ClassImp(AliAnalysisTaskCheckCascade)
76
77
78
79//________________________________________________________________________
80AliAnalysisTaskCheckCascade::AliAnalysisTaskCheckCascade()
c525f360 81 : AliAnalysisTaskSE(), fAnalysisType("ESD"), fTriggerMaskType("kMB"), fCollidingSystems(0), fESDpid(0), fESDtrackCuts(0), /*fPaveTextBookKeeping(0),*/
82 fkRerunV0CascVertexers (0),
83 fkQualityCutZprimVtxPos (kTRUE),
84 fkRejectEventPileUp (kTRUE),
85 fkQualityCutNoTPConlyPrimVtx (kTRUE),
86 fkQualityCutTPCrefit (kTRUE),
87 fkQualityCut80TPCcls (kTRUE),
88 fkIsDataRecoWith1PadTPCCluster (kTRUE),
89 fkExtraSelections (0),
90 fAngularCorrelationType ("TrigLeadingTrck-AssoCasc"),
7e504402 91
45ee0bcc 92 // - Cascade part initialisation
93 fListHistCascade(0),
9d670198 94 fHistCascadeMultiplicityBeforeTrigSel(0),
a786bd57 95 fHistCascadeMultiplicityForTrigEvt(0), fHistTrackMultiplicityForTrigEvt(0), fHistTPCrefitTrackMultiplicityForTrigEvt(0), fHistPrimaryTrackMultiplicityForTrigEvt(0),
96 fHistEstimateITSTPCMultiplicityForTrigEvt(0),
c525f360 97 fHistCascadeMultiplicityForTrigEvtAndZprimVtx(0), fHistCascadeMultiplicityForTrigEvtNonPiledUpAndZprimVtx(0),
9d670198 98 fHistCascadeMultiplicityForSelEvt(0),
99 fHistPosBestPrimaryVtxXForSelEvt(0), fHistPosBestPrimaryVtxYForSelEvt(0), fHistPosBestPrimaryVtxZForSelEvt(0),
c525f360 100 fHistTPCrefitTrackMultiplicityForCascadeEvt(0), fHistPrimaryTrackMultiplicityForCascadeEvt(0),
7e504402 101 fHistPosV0TPCClusters(0), fHistNegV0TPCClusters(0), fHistBachTPCClusters(0),
45ee0bcc 102 fHistVtxStatus(0),
103
9d670198 104 fHistPosTrkgPrimaryVtxXForCascadeEvt(0), fHistPosTrkgPrimaryVtxYForCascadeEvt(0), fHistPosTrkgPrimaryVtxZForCascadeEvt(0), fHistTrkgPrimaryVtxRadius(0),
105 fHistPosBestPrimaryVtxXForCascadeEvt(0), fHistPosBestPrimaryVtxYForCascadeEvt(0), fHistPosBestPrimaryVtxZForCascadeEvt(0), fHistBestPrimaryVtxRadius(0),
45ee0bcc 106 f2dHistTrkgPrimVtxVsBestPrimVtx(0),
107
108 fHistEffMassXi(0), fHistChi2Xi(0),
109 fHistDcaXiDaughters(0), fHistDcaBachToPrimVertex(0), fHistXiCosineOfPointingAngle(0), fHistXiRadius(0),
110
111 fHistMassLambdaAsCascDghter(0),
112 fHistV0Chi2Xi(0),
113 fHistDcaV0DaughtersXi(0),
114 fHistDcaV0ToPrimVertexXi(0),
115 fHistV0CosineOfPointingAngleXi(0),
116 fHistV0RadiusXi(0),
117 fHistDcaPosToPrimVertexXi(0), fHistDcaNegToPrimVertexXi(0),
118
119 fHistMassXiMinus(0), fHistMassXiPlus(0),
120 fHistMassOmegaMinus(0), fHistMassOmegaPlus(0),
f87cd3db 121 fHistMassWithCombPIDXiMinus(0), fHistMassWithCombPIDXiPlus(0),
122 fHistMassWithCombPIDOmegaMinus(0), fHistMassWithCombPIDOmegaPlus(0),
45ee0bcc 123
124 fHistXiTransvMom(0), fHistXiTotMom(0),
90926f02 125 fHistBachTransvMomXi(0), fHistBachTotMomXi(0),
45ee0bcc 126
127 fHistChargeXi(0),
128 fHistV0toXiCosineOfPointingAngle(0),
129
90926f02 130 fHistRapXi(0), fHistRapOmega(0), fHistEtaXi(0),
131 fHistThetaXi(0), fHistPhiXi(0),
45ee0bcc 132
c525f360 133 fHistcTauXiMinus(0), fHistcTauXiPlus(0), fHistcTauOmegaMinus(0), fHistcTauOmegaPlus(0),
134
45ee0bcc 135 f2dHistArmenteros(0),
136 f2dHistEffMassLambdaVsEffMassXiMinus(0), f2dHistEffMassXiVsEffMassOmegaMinus(0),
137 f2dHistEffMassLambdaVsEffMassXiPlus(0), f2dHistEffMassXiVsEffMassOmegaPlus(0),
e9c3f0b6 138 f2dHistXiRadiusVsEffMassXiMinus(0), f2dHistXiRadiusVsEffMassXiPlus(0),
139 f2dHistXiRadiusVsEffMassOmegaMinus(0), f2dHistXiRadiusVsEffMassOmegaPlus(0),
140
e8fd19de 141 f2dHistTPCdEdxOfCascDghters(0),
142
ff0753e1 143 f3dHistXiPtVsEffMassVsYXiMinus(0), f3dHistXiPtVsEffMassVsYXiPlus(0),
3873f6ee 144 f3dHistXiPtVsEffMassVsYOmegaMinus(0), f3dHistXiPtVsEffMassVsYOmegaPlus(0),
145
32599cd4 146 fCFContCascadePIDXiMinus(0),
147 fCFContCascadePIDXiPlus(0),
148 fCFContCascadePIDOmegaMinus(0),
149 fCFContCascadePIDOmegaPlus(0),
150 fCFContCascadeCuts(0),
3aedd4a5 151
3873f6ee 152 fHnSpAngularCorrXiMinus(0), fHnSpAngularCorrXiPlus(0),
153 fHnSpAngularCorrOmegaMinus(0), fHnSpAngularCorrOmegaPlus(0)
45ee0bcc 154
155{
156 // Dummy Constructor
9d670198 157 for(Int_t iAlephIdx = 0; iAlephIdx < 5; iAlephIdx++ ) { fAlephParameters [iAlephIdx] = -1.; }
158 for(Int_t iV0selIdx = 0; iV0selIdx < 7; iV0selIdx++ ) { fV0Sels [iV0selIdx ] = -1.; }
159 for(Int_t iCascSelIdx = 0; iCascSelIdx < 8; iCascSelIdx++ ) { fCascSels [iCascSelIdx ] = -1.; }
45ee0bcc 160}
161
162
163
164
165
166
167
168
169//________________________________________________________________________
170AliAnalysisTaskCheckCascade::AliAnalysisTaskCheckCascade(const char *name)
c525f360 171 : AliAnalysisTaskSE(name), fAnalysisType("ESD"), fTriggerMaskType("kMB"), fCollidingSystems(0), fESDpid(0), fESDtrackCuts(0), /*fPaveTextBookKeeping(0),*/
172 fkRerunV0CascVertexers (0),
173 fkQualityCutZprimVtxPos (kTRUE),
174 fkRejectEventPileUp (kTRUE),
175 fkQualityCutNoTPConlyPrimVtx (kTRUE),
176 fkQualityCutTPCrefit (kTRUE),
177 fkQualityCut80TPCcls (kTRUE),
178 fkIsDataRecoWith1PadTPCCluster (kTRUE),
179 fkExtraSelections (0),
180 fAngularCorrelationType ("TrigLeadingTrck-AssoCasc"),
7e504402 181
45ee0bcc 182 // - Cascade part initialisation
183 fListHistCascade(0),
9d670198 184 fHistCascadeMultiplicityBeforeTrigSel(0),
c525f360 185 fHistCascadeMultiplicityForTrigEvt(0), fHistTrackMultiplicityForTrigEvt(0), fHistTPCrefitTrackMultiplicityForTrigEvt(0), fHistPrimaryTrackMultiplicityForTrigEvt(0),
a786bd57 186 fHistEstimateITSTPCMultiplicityForTrigEvt(0),
c525f360 187 fHistCascadeMultiplicityForTrigEvtAndZprimVtx(0), fHistCascadeMultiplicityForTrigEvtNonPiledUpAndZprimVtx(0),
9d670198 188 fHistCascadeMultiplicityForSelEvt(0),
189 fHistPosBestPrimaryVtxXForSelEvt(0), fHistPosBestPrimaryVtxYForSelEvt(0), fHistPosBestPrimaryVtxZForSelEvt(0),
c525f360 190 fHistTPCrefitTrackMultiplicityForCascadeEvt(0), fHistPrimaryTrackMultiplicityForCascadeEvt(0),
7e504402 191 fHistPosV0TPCClusters(0), fHistNegV0TPCClusters(0), fHistBachTPCClusters(0),
45ee0bcc 192 fHistVtxStatus(0),
193
9d670198 194 fHistPosTrkgPrimaryVtxXForCascadeEvt(0), fHistPosTrkgPrimaryVtxYForCascadeEvt(0), fHistPosTrkgPrimaryVtxZForCascadeEvt(0), fHistTrkgPrimaryVtxRadius(0),
195 fHistPosBestPrimaryVtxXForCascadeEvt(0), fHistPosBestPrimaryVtxYForCascadeEvt(0), fHistPosBestPrimaryVtxZForCascadeEvt(0), fHistBestPrimaryVtxRadius(0),
45ee0bcc 196 f2dHistTrkgPrimVtxVsBestPrimVtx(0),
197
198 fHistEffMassXi(0), fHistChi2Xi(0),
199 fHistDcaXiDaughters(0), fHistDcaBachToPrimVertex(0), fHistXiCosineOfPointingAngle(0), fHistXiRadius(0),
200
201 fHistMassLambdaAsCascDghter(0),
202 fHistV0Chi2Xi(0),
203 fHistDcaV0DaughtersXi(0),
204 fHistDcaV0ToPrimVertexXi(0),
205 fHistV0CosineOfPointingAngleXi(0),
206 fHistV0RadiusXi(0),
207 fHistDcaPosToPrimVertexXi(0), fHistDcaNegToPrimVertexXi(0),
208
209 fHistMassXiMinus(0), fHistMassXiPlus(0),
210 fHistMassOmegaMinus(0), fHistMassOmegaPlus(0),
f87cd3db 211 fHistMassWithCombPIDXiMinus(0), fHistMassWithCombPIDXiPlus(0),
212 fHistMassWithCombPIDOmegaMinus(0), fHistMassWithCombPIDOmegaPlus(0),
45ee0bcc 213
214 fHistXiTransvMom(0), fHistXiTotMom(0),
90926f02 215 fHistBachTransvMomXi(0), fHistBachTotMomXi(0),
45ee0bcc 216
217 fHistChargeXi(0),
218 fHistV0toXiCosineOfPointingAngle(0),
219
90926f02 220 fHistRapXi(0), fHistRapOmega(0), fHistEtaXi(0),
221 fHistThetaXi(0), fHistPhiXi(0),
45ee0bcc 222
c525f360 223 fHistcTauXiMinus(0), fHistcTauXiPlus(0), fHistcTauOmegaMinus(0), fHistcTauOmegaPlus(0),
224
45ee0bcc 225 f2dHistArmenteros(0),
226 f2dHistEffMassLambdaVsEffMassXiMinus(0), f2dHistEffMassXiVsEffMassOmegaMinus(0),
227 f2dHistEffMassLambdaVsEffMassXiPlus(0), f2dHistEffMassXiVsEffMassOmegaPlus(0),
e9c3f0b6 228 f2dHistXiRadiusVsEffMassXiMinus(0), f2dHistXiRadiusVsEffMassXiPlus(0),
229 f2dHistXiRadiusVsEffMassOmegaMinus(0), f2dHistXiRadiusVsEffMassOmegaPlus(0),
230
e8fd19de 231 f2dHistTPCdEdxOfCascDghters(0),
232
ff0753e1 233 f3dHistXiPtVsEffMassVsYXiMinus(0), f3dHistXiPtVsEffMassVsYXiPlus(0),
3873f6ee 234 f3dHistXiPtVsEffMassVsYOmegaMinus(0), f3dHistXiPtVsEffMassVsYOmegaPlus(0),
235
32599cd4 236 fCFContCascadePIDXiMinus(0),
237 fCFContCascadePIDXiPlus(0),
238 fCFContCascadePIDOmegaMinus(0),
239 fCFContCascadePIDOmegaPlus(0),
240 fCFContCascadeCuts(0),
3aedd4a5 241
3873f6ee 242 fHnSpAngularCorrXiMinus(0), fHnSpAngularCorrXiPlus(0),
243 fHnSpAngularCorrOmegaMinus(0), fHnSpAngularCorrOmegaPlus(0)
45ee0bcc 244
245{
246 // Constructor
247
248 // Define input and output slots here
249 // Input slot #0 works with a TChain
9d670198 250 // DefineInput(0, TChain::Class());
251 // Output slot #1 writes into a TList container (cascade)
252
253 for(Int_t iAlephIdx = 0; iAlephIdx < 5; iAlephIdx++ ) { fAlephParameters [iAlephIdx] = -1.; }
254
a786bd57 255 // New Loose : 1st step for the 7 TeV pp analysis
e8fd19de 256
a786bd57 257 fV0Sels[0] = 33. ; // max allowed chi2
258 fV0Sels[1] = 0.02; // min allowed impact parameter for the 1st daughter (LHC09a4 : 0.05)
259 fV0Sels[2] = 0.02; // min allowed impact parameter for the 2nd daughter (LHC09a4 : 0.05)
260 fV0Sels[3] = 2.0 ; // max allowed DCA between the daughter tracks (LHC09a4 : 0.5)
261 fV0Sels[4] = 0.95; // min allowed cosine of V0's pointing angle (LHC09a4 : 0.99)
262 fV0Sels[5] = 1.0 ; // min radius of the fiducial volume (LHC09a4 : 0.2)
263 fV0Sels[6] = 100. ; // max radius of the fiducial volume (LHC09a4 : 100.0)
264
265 fCascSels[0] = 33. ; // max allowed chi2 (same as PDC07)
266 fCascSels[1] = 0.05 ; // min allowed V0 impact parameter (PDC07 : 0.05 / LHC09a4 : 0.025 )
267 fCascSels[2] = 0.010; // "window" around the Lambda mass (PDC07 : 0.008 / LHC09a4 : 0.010 )
268 fCascSels[3] = 0.03 ; // min allowed bachelor's impact parameter (PDC07 : 0.035 / LHC09a4 : 0.025 )
269 fCascSels[4] = 2.0 ; // max allowed DCA between the V0 and the bachelor (PDC07 : 0.1 / LHC09a4 : 0.2 )
270 fCascSels[5] = 0.95 ; // min allowed cosine of the cascade pointing angle (PDC07 : 0.9985 / LHC09a4 : 0.998 )
271 fCascSels[6] = 0.4 ; // min radius of the fiducial volume (PDC07 : 0.9 / LHC09a4 : 0.2 )
272 fCascSels[7] = 100. ; // max radius of the fiducial volume (PDC07 : 100 / LHC09a4 : 100 )
9d670198 273
e8fd19de 274
a786bd57 275
276 // Hyper Loose "à la 900 GeV 2009 data", with lower cosine of pointing angle for Xi (0.95 down to 0.82) = 900 GeV paper
277 /*
e8fd19de 278 fV0Sels[0] = 33. ; // max allowed chi2
279 fV0Sels[1] = 0.001; // min allowed impact parameter for the 1st daughter (LHC09a4 : 0.05)
280 fV0Sels[2] = 0.001; // min allowed impact parameter for the 2nd daughter (LHC09a4 : 0.05)
281 fV0Sels[3] = 5.0 ; // max allowed DCA between the daughter tracks (LHC09a4 : 0.5)
282 fV0Sels[4] = 0.0 ; // min allowed cosine of V0's pointing angle (LHC09a4 : 0.99)
283 fV0Sels[5] = 0.1 ; // min radius of the fiducial volume (LHC09a4 : 0.2)
284 fV0Sels[6] = 100. ; // max radius of the fiducial volume (LHC09a4 : 100.0)
285
286 fCascSels[0] = 33. ; // max allowed chi2 (same as PDC07)
287 fCascSels[1] = 0.001; // min allowed V0 impact parameter (PDC07 : 0.05 / LHC09a4 : 0.025 )
288 fCascSels[2] = 0.008; // "window" around the Lambda mass (PDC07 : 0.008 / LHC09a4 : 0.010 )
289 fCascSels[3] = 0.001; // min allowed bachelor's impact parameter (PDC07 : 0.035 / LHC09a4 : 0.025 )
290 fCascSels[4] = 5.0 ; // max allowed DCA between the V0 and the bachelor (PDC07 : 0.1 / LHC09a4 : 0.2 )
291 fCascSels[5] = 0.82 ; //FIXME min allowed cosine of the cascade pointing angle (PDC07 : 0.9985 / LHC09a4 : 0.998 )
292 fCascSels[6] = 0.1 ; // min radius of the fiducial volume (PDC07 : 0.9 / LHC09a4 : 0.2 )
293 fCascSels[7] = 100. ; // max radius of the fiducial volume (PDC07 : 100 / LHC09a4 : 100 )
a786bd57 294 */
c525f360 295
e8fd19de 296 //New default vtxR (http://alisoft.cern.ch/viewvc?view=rev&root=AliRoot&revision=40955, 5 May 2010)
297 /*
298 fV0Sels[0] = 33. ; // max allowed chi2
299 fV0Sels[1] = 0.05; // min allowed impact parameter for the 1st daughter (LHC09a4 : 0.05)
300 fV0Sels[2] = 0.05; // min allowed impact parameter for the 2nd daughter (LHC09a4 : 0.05)
301 fV0Sels[3] = 1.5 ; // max allowed DCA between the daughter tracks (LHC09a4 : 0.5)
302 fV0Sels[4] = 0.9 ; // min allowed cosine of V0's pointing angle (LHC09a4 : 0.99)
303 fV0Sels[5] = 0.2 ; // min radius of the fiducial volume (LHC09a4 : 0.2)
304 fV0Sels[6] = 100. ; // max radius of the fiducial volume (LHC09a4 : 100.0)
305
306 fCascSels[0] = 33. ; // max allowed chi2 (same as PDC07)
307 fCascSels[1] = 0.01 ; // min allowed V0 impact parameter (PDC07 : 0.05 / LHC09a4 : 0.025 )
308 fCascSels[2] = 0.008; // "window" around the Lambda mass (PDC07 : 0.008 / LHC09a4 : 0.010 )
309 fCascSels[3] = 0.01 ; // min allowed bachelor's impact parameter (PDC07 : 0.035 / LHC09a4 : 0.025 )
310 fCascSels[4] = 2.0 ; // max allowed DCA between the V0 and the bachelor (PDC07 : 0.1 / LHC09a4 : 0.2 )
311 fCascSels[5] = 0.98 ; // min allowed cosine of the cascade pointing angle (PDC07 : 0.9985 / LHC09a4 : 0.998 )
312 fCascSels[6] = 0.2 ; // min radius of the fiducial volume (PDC07 : 0.9 / LHC09a4 : 0.2 )
313 fCascSels[7] = 100. ; // max radius of the fiducial volume (PDC07 : 100 / LHC09a4 : 100 )
314 */
315
316 // Tight for Xi in p-p (http://alisoft.cern.ch/viewvc?view=rev&root=AliRoot&revision=40955, 5 May 2010)
317 /*
318 fV0Sels[0] = 33. ; // max allowed chi2
319 fV0Sels[1] = 0.05; // min allowed impact parameter for the 1st daughter (LHC09a4 : 0.05)
320 fV0Sels[2] = 0.05; // min allowed impact parameter for the 2nd daughter (LHC09a4 : 0.05)
321 fV0Sels[3] = 0.5 ; // max allowed DCA between the daughter tracks (LHC09a4 : 0.5)
322 fV0Sels[4] = 0.99 ; // min allowed cosine of V0's pointing angle (LHC09a4 : 0.99)
323 fV0Sels[5] = 0.2 ; // min radius of the fiducial volume (LHC09a4 : 0.2)
324 fV0Sels[6] = 100. ; // max radius of the fiducial volume (LHC09a4 : 100.0)
325
326 fCascSels[0] = 33. ; // max allowed chi2 (same as PDC07)
327 fCascSels[1] = 0.05 ; // min allowed V0 impact parameter (PDC07 : 0.05 / LHC09a4 : 0.025 )
328 fCascSels[2] = 0.01; // "window" around the Lambda mass (PDC07 : 0.008 / LHC09a4 : 0.010 )
329 fCascSels[3] = 0.035 ; // min allowed bachelor's impact parameter (PDC07 : 0.035 / LHC09a4 : 0.025 )
330 fCascSels[4] = 0.10 ; // max allowed DCA between the V0 and the bachelor (PDC07 : 0.1 / LHC09a4 : 0.2 )
331 fCascSels[5] = 0.9985 ; // min allowed cosine of the cascade pointing angle (PDC07 : 0.9985 / LHC09a4 : 0.998 )
332 fCascSels[6] = 0.2 ; // min radius of the fiducial volume (PDC07 : 0.9 / LHC09a4 : 0.2 )
333 fCascSels[7] = 100. ; // max radius of the fiducial volume (PDC07 : 100 / LHC09a4 : 100 )
334 */
335
336 //NOTE
337 // For PbPb coming data, take a look at Iouri's proposal
338 // https://savannah.cern.ch/bugs/index.php?69877
339
9d670198 340
45ee0bcc 341 // Output slot #0 writes into a TList container (Cascade)
342 DefineOutput(1, TList::Class());
9d670198 343 /*DefineOutput(2, TPaveText::Class());*/
45ee0bcc 344}
345
346
9d670198 347AliAnalysisTaskCheckCascade::~AliAnalysisTaskCheckCascade()
348{
349 //
350 // Destructor
351 //
45ee0bcc 352
9d670198 353 // For all TH1, 2, 3 HnSparse and CFContainer are in the fListCascade TList.
354 // They will be deleted when fListCascade is deleted by the TSelector dtor
355 // Because of TList::SetOwner() ...
356
357 if (fListHistCascade) { delete fListHistCascade; fListHistCascade = 0x0; }
358 if (fESDpid) { delete fESDpid; fESDpid = 0x0;} // fESDpid is not stored into the TList
c525f360 359 if (fESDtrackCuts) { delete fESDtrackCuts; fESDtrackCuts = 0x0; }
9d670198 360 //if (fPaveTextBookKeeping) { delete fPaveTextBookKeeping; fPaveTextBookKeeping = 0x0;} // fPaveTextBookKeeping is not strored in the TList
361}
45ee0bcc 362
363
364
365//________________________________________________________________________
366void AliAnalysisTaskCheckCascade::UserCreateOutputObjects()
367{
368 // Create histograms
369 // Called once
370
371
372
373 fListHistCascade = new TList();
9d670198 374 fListHistCascade->SetOwner(); // See http://root.cern.ch/root/html/TCollection.html#TCollection:SetOwner
7e504402 375
376
9d670198 377if(! fESDpid){
378
379 AliMCEventHandler *lmcEvtHandler = dynamic_cast<AliMCEventHandler*>( (AliAnalysisManager::GetAnalysisManager())->GetMCtruthEventHandler() );
45ee0bcc 380
9d670198 381 if( !lmcEvtHandler ){ // !0x0 = real data or !1 = there is an MC handler available (useMC = kTRUE in AnalysisTrainNew), so = data from MC
382
c525f360 383 if(fkIsDataRecoWith1PadTPCCluster){
384 // Parameters extracted for LHC10d Pass2 - A. Kalweit
385 fAlephParameters[0] = 1.28949/50.; // = 0,0257898
386 fAlephParameters[1] = 2.74095e+01;
387 fAlephParameters[2] = TMath::Exp(-3.21763e+01);
388 fAlephParameters[3] = 2.44026;
389 fAlephParameters[4] = 6.58800;
390 }
391 else {
392 // Reasonable parameters extracted for real p-p event (Dec 2009 - GSI Pass5) - A.Kalweit
393 fAlephParameters[0] = 0.0283086; // No extra-division to apply in SetBlochParam
394 fAlephParameters[1] = 2.63394e+01;
395 fAlephParameters[2] = 5.04114e-11;
396 fAlephParameters[3] = 2.12543e+00;
397 fAlephParameters[4] = 4.88663e+00;
398 }
399
400 Printf("CheckCascade - Check Aleph Param in case of REAL Data (fAlephParameters[3] = %f) (To be compared with : 2.44026 for 1-pad-cluster prod. / 2.12543 otherwise)\n", fAlephParameters[3]);
401
9d670198 402 }
c525f360 403 else { // MC reco
404 if(fkIsDataRecoWith1PadTPCCluster){
405 // Home made parameterization for LHC10f6a production = p+p 7 TeV
406 fAlephParameters[0] = 0.04;
407 fAlephParameters[1] = 17.5;
408 fAlephParameters[2] = 3.4e-09;
409 fAlephParameters[3] = 2.15;
410 fAlephParameters[4] = 3.91720e+00;
411
412 // Home made parameterization for LHC10e13 production = p+p 900 GeV/c
413
414 }
415 else {
416 // Reasonable parameters extracted for p-p simulation (LHC09a4) - A.Kalweit
417 // fAlephParameters[0] = 4.23232575531564326e+00;//50*0.76176e-1; // do not forget to divide this value by 50 in SetBlochParam !
418 // fAlephParameters[1] = 8.68482806165147636e+00;//10.632;
419 // fAlephParameters[2] = 1.34000000000000005e-05;//0.13279e-4;
420 // fAlephParameters[3] = 2.30445734159456084e+00;//1.8631;
421 // fAlephParameters[4] = 2.25624744086878559e+00;//1.9479;
422
423 // Reasonable parameters extracted for MC LHC09d10 event (Jan 2010) - A.Kalweit
424 fAlephParameters[0] = 2.15898e+00/50.;
425 fAlephParameters[1] = 1.75295e+01;
426 fAlephParameters[2] = 3.40030e-09;
427 fAlephParameters[3] = 1.96178e+00;
428 fAlephParameters[4] = 3.91720e+00;
429 }
430 Printf("CheckCascade - Check Aleph Param in case of MC Data (fAlephParameters[3] = %f) (To be compared with : 2.15 for 1-pad-cluster prod. / 1.96178 otherwise)\n", fAlephParameters[3]);
9d670198 431 }
432
433 fESDpid = new AliESDpid();
434 fESDpid->GetTPCResponse().SetBetheBlochParameters( fAlephParameters[0],
435 fAlephParameters[1],
436 fAlephParameters[2],
437 fAlephParameters[3],
438 fAlephParameters[4] );
439}
440
c525f360 441if(! fESDtrackCuts ){
442 fESDtrackCuts = AliESDtrackCuts::GetStandardITSTPCTrackCuts2010(kTRUE); // Std definition of primary (see kTRUE argument) tracks for 2010
443 fESDtrackCuts->SetEtaRange(-0.8,+0.8);
444 fESDtrackCuts->SetPtRange(0.15, 1e10);
445 Printf("CheckCascade - ESDtrackCuts set up to 2010 std ITS-TPC cuts...");
446}
9d670198 447
448/*
449if( !fPaveTextBookKeeping){
e8fd19de 450 // FIXME : prepare a field with the AliRoot+root distrib ...
451
9d670198 452 fPaveTextBookKeeping = new TPaveText(0.1, 0.1, 0.9, 0.9,"NDC");
453 fPaveTextBookKeeping->SetName("fPaveTextBookKeeping");
454 fPaveTextBookKeeping->SetBorderSize(0);
455 fPaveTextBookKeeping->SetTextAlign(12);
456 fPaveTextBookKeeping->SetFillColor(kWhite);
457 fPaveTextBookKeeping->SetTextFont(42); // regular Arial or Helvetica,
458 fPaveTextBookKeeping->SetTextColor(kBlue+4);
459
460 fPaveTextBookKeeping->AddText( "Task CHECK CASCADE analysis" );
461 fPaveTextBookKeeping->AddText("- - - - - - - - - - - ");
462 fPaveTextBookKeeping->AddText( Form("AnalysisType : %s ", fAnalysisType.Data() ));
463 if(!fCollidingSystems) fPaveTextBookKeeping->AddText("Colliding system : p-p collisions ");
464 else fPaveTextBookKeeping->AddText("Colliding system : A-A collisions ");
465
466 fPaveTextBookKeeping->AddText("- - - - - - - - - - - ");
467
468 if(fkRerunV0CascVertexers){
469 fPaveTextBookKeeping->AddText("A.1. With V0 vertexer : ");
470 fPaveTextBookKeeping->AddText( Form(" - V0 #chi^{2} _________________ < %.3f ", fV0Sels[0] ));
471 fPaveTextBookKeeping->AddText( Form(" - DCA(prim. Vtx/ 1^{st} daughter) ___ > %.3f cm ", fV0Sels[1] ));
472 fPaveTextBookKeeping->AddText( Form(" - DCA(prim. Vtx/ 2^{nd} daughter) __ > %.3f cm", fV0Sels[2] ));
473 fPaveTextBookKeeping->AddText( Form(" - DCA between V0 daughters ___ < %.3f cm", fV0Sels[3] ));
474 fPaveTextBookKeeping->AddText( Form(" - cos(V0 pointing angle) _______ > %.3f ", fV0Sels[4] ));
475 fPaveTextBookKeeping->AddText( Form(" - R_{transv}(V0 decay) ________ > %.3f cm", fV0Sels[5] ));
476 fPaveTextBookKeeping->AddText( Form(" - R_{transv}(V0 decay) ________ < %.3f cm", fV0Sels[6] ));
477
478 fPaveTextBookKeeping->AddText(" ");
479
480 fPaveTextBookKeeping->AddText("A.2. With Casc. vertexer : ");
481 fPaveTextBookKeeping->AddText( Form(" - Casc. #chi^{2} ______________ < %.3f ", fCascSels[0] ));
482 fPaveTextBookKeeping->AddText( Form(" - DCA(prim. Vtx/ V0) _________ > %.3f cm", fCascSels[1] ));
483 fPaveTextBookKeeping->AddText( Form(" - | M_{#Lambda}(reco) - M_{#Lambda}(pdg) | _______ < %.3f GeV/c^{2}", fCascSels[2] ));
484 fPaveTextBookKeeping->AddText( Form(" - DCA(prim. Vtx/ Bach) _______ > %.3f cm", fCascSels[3] ));
485 fPaveTextBookKeeping->AddText( Form(" - DCA between Bach/ #Lambda ______ < %.3f cm", fCascSels[4] ));
486 fPaveTextBookKeeping->AddText( Form(" - cos(Casc. pointing angle) ____ > %.3f ", fCascSels[5] ));
487 fPaveTextBookKeeping->AddText( Form(" - R_{transv}(Casc. decay) ______ > %.3f cm", fCascSels[6] ));
488 fPaveTextBookKeeping->AddText( Form(" - R_{transv}(Casc. decay) ______ < %.3f cm", fCascSels[7] ));
489 }
490 else{ fPaveTextBookKeeping->AddText("A. No rerunning of the V0/Casc. vertexers ... See std cuts in (AliRoot+Rec.C) used for this prod. cycle");}
491
492 fPaveTextBookKeeping->AddText("- - - - - - - - - - - ");
493
494 if(fkQualityCutZprimVtxPos) fPaveTextBookKeeping->AddText("B. Quality Cut(prim. Vtx z-Pos) = ON ");
495 else fPaveTextBookKeeping->AddText("B. Quality Cut(prim. Vtx z-Pos) = Off ");
496 if(fkQualityCutNoTPConlyPrimVtx) fPaveTextBookKeeping->AddText("C. Quality Cut(No TPC prim. vtx) = ON ");
497 else fPaveTextBookKeeping->AddText("C. Quality Cut(No TPC prim. vtx) = Off ");
498 if(fkQualityCutTPCrefit) fPaveTextBookKeeping->AddText("D. Quality Cut(TPCrefit) = ON ");
499 else fPaveTextBookKeeping->AddText("D. Quality Cut(TPCrefit) = Off ");
500 if(fkQualityCut80TPCcls) fPaveTextBookKeeping->AddText("E. Quality Cut(80 TPC clusters) = ON ");
501 else fPaveTextBookKeeping->AddText("E. Quality Cut(80 TPC clusters) = Off ");
502 if(fkExtraSelections) fPaveTextBookKeeping->AddText("F. Extra Analysis Selections = ON ");
503 else fPaveTextBookKeeping->AddText("F. Extra Analysis Selections = Off ");
504
505 fPaveTextBookKeeping->AddText("- - - - - - - - - - - ");
506
507 fPaveTextBookKeeping->AddText("G. TPC Aleph Param : ");
508 fPaveTextBookKeeping->AddText( Form(" - fAlephParam [0] = %.5g", fAlephParameters[0] ));
509 fPaveTextBookKeeping->AddText( Form(" - fAlephParam [1] = %.5g", fAlephParameters[1] ));
510 fPaveTextBookKeeping->AddText( Form(" - fAlephParam [2] = %.5g", fAlephParameters[2] ));
511 fPaveTextBookKeeping->AddText( Form(" - fAlephParam [3] = %.5g", fAlephParameters[3] ));
512 fPaveTextBookKeeping->AddText( Form(" - fAlephParam [4] = %.5g", fAlephParameters[4] ));
513}
514*/
515
516 // - General histos
517 //--------------
518
519if(! fHistCascadeMultiplicityBeforeTrigSel) {
520 if(fCollidingSystems)// AA collisions
521 fHistCascadeMultiplicityBeforeTrigSel = new TH1F("fHistCascadeMultiplicityBeforeTrigSel",
522 "Cascades per event (before Trig. Sel.);Nbr of Cascades/Evt;Events",
523 100, 0, 100);
524 else // pp collisions
525 fHistCascadeMultiplicityBeforeTrigSel = new TH1F("fHistCascadeMultiplicityBeforeTrigSel",
526 "Cascades per event (before Trig. Sel.);Nbr of Cascades/Evt;Events",
527 25, 0, 25);
528 fListHistCascade->Add(fHistCascadeMultiplicityBeforeTrigSel);
529}
530
531 // - Histos for events passing the trigger selection
532 //--------------
533
534if(! fHistCascadeMultiplicityForTrigEvt) {
535 if(fCollidingSystems)// AA collisions
536 fHistCascadeMultiplicityForTrigEvt = new TH1F("fHistCascadeMultiplicityForTrigEvt",
537 "Cascades per event (for triggered evt);Nbr of Cascades/Evt;Events",
538 100, 0, 100);
539 else // pp collisions
540 fHistCascadeMultiplicityForTrigEvt = new TH1F("fHistCascadeMultiplicityForTrigEvt",
541 "Cascades per event (for triggered evt);Nbr of Cascades/Evt;Events",
542 25, 0, 25);
543 fListHistCascade->Add(fHistCascadeMultiplicityForTrigEvt);
544}
545
546
547if(! fHistTrackMultiplicityForTrigEvt) {
45ee0bcc 548 if(fCollidingSystems)// AA collisions
9d670198 549 fHistTrackMultiplicityForTrigEvt = new TH1F("fHistTrackMultiplicityForTrigEvt",
550 "Track Multiplicity (for triggered evt);Nbr of tracks/Evt;Events",
32599cd4 551 200, 0, 20000);
45ee0bcc 552 else // pp collisions
9d670198 553 fHistTrackMultiplicityForTrigEvt = new TH1F("fHistTrackMultiplicityForTrigEvt",
554 "Track Multiplicity (for triggered evt);Nbr of tracks/Evt;Events",
e8fd19de 555 300, 0, 300);
9d670198 556 fListHistCascade->Add(fHistTrackMultiplicityForTrigEvt);
45ee0bcc 557}
558
9d670198 559if(! fHistTPCrefitTrackMultiplicityForTrigEvt) {
7e504402 560 if(fCollidingSystems)// AA collisions
9d670198 561 fHistTPCrefitTrackMultiplicityForTrigEvt = new TH1F("fHistTPCrefitTrackMultiplicityForTrigEvt",
562 "TPCrefit track Multiplicity (for triggered evt);Nbr of TPCrefit tracks/Evt;Events",
7e504402 563 200, 0, 20000);
564 else // pp collisions
9d670198 565 fHistTPCrefitTrackMultiplicityForTrigEvt = new TH1F("fHistTPCrefitTrackMultiplicityForTrigEvt",
566 "TPCrefit track Multiplicity (for triggered evt);Nbr of TPCrefit tracks/Evt;Events",
e8fd19de 567 300, 0, 300);
9d670198 568 fListHistCascade->Add(fHistTPCrefitTrackMultiplicityForTrigEvt);
7e504402 569}
570
9d670198 571
c525f360 572if(! fHistPrimaryTrackMultiplicityForTrigEvt) {
573 if(fCollidingSystems)// AA collisions
574 fHistPrimaryTrackMultiplicityForTrigEvt = new TH1F("fHistPrimaryTrackMultiplicityForTrigEvt",
575 "Primary track Multiplicity (for triggered evt);Nbr of primary tracks/Evt;Events",
576 100, 0, 10000);
577 else // pp collisions
578 fHistPrimaryTrackMultiplicityForTrigEvt = new TH1F("fHistPrimaryTrackMultiplicityForTrigEvt",
579 "Primary track Multiplicity (for triggered evt);Nbr of primary tracks/Evt;Events",
580 200, 0, 200);
581 fListHistCascade->Add(fHistPrimaryTrackMultiplicityForTrigEvt);
582}
e8fd19de 583
584
a786bd57 585if(! fHistEstimateITSTPCMultiplicityForTrigEvt) {
586 if(fCollidingSystems)// AA collisions
587 fHistEstimateITSTPCMultiplicityForTrigEvt = new TH1F("fHistEstimateITSTPCMultiplicityForTrigEvt",
588 "(ITS+TPC tracks + SPD tracklets) multiplicity (for triggered evt);Nbr of (ITS+TPC tracks + SPD tracklets)/Evt;Events",
589 100, 0, 10000);
590 else // pp collisions
591 fHistEstimateITSTPCMultiplicityForTrigEvt = new TH1F("fHistEstimateITSTPCMultiplicityForTrigEvt",
592 "(ITS+TPC tracks + SPD tracklets) multiplicity (for triggered evt);Nbr of (ITS+TPC tracks + SPD tracklets)/Evt;Events",
593 200, 0, 200);
594 fListHistCascade->Add(fHistEstimateITSTPCMultiplicityForTrigEvt);
595}
596
597
598
e8fd19de 599 // - Histos for events passing the trigger selection + |z(prim. vertex)| < XX cm
600 //--------------
601
602if(! fHistCascadeMultiplicityForTrigEvtAndZprimVtx) {
603 if(fCollidingSystems)// AA collisions
604 fHistCascadeMultiplicityForTrigEvtAndZprimVtx = new TH1F("fHistCascadeMultiplicityForTrigEvtAndZprimVtx",
605 "Cascades per event;Nbr of Cascades/Evt;Events",
606 100, 0, 100);
607 else // pp collisions
608 fHistCascadeMultiplicityForTrigEvtAndZprimVtx = new TH1F("fHistCascadeMultiplicityForTrigEvtAndZprimVtx",
609 "Cascades per event;Nbr of Cascades/Evt;Events",
610 25, 0, 25);
611 fListHistCascade->Add(fHistCascadeMultiplicityForTrigEvtAndZprimVtx);
612}
613
614
c525f360 615 // - Histos for events passing the trigger selection + |z(prim. vertex)| < XX cm + after pile-up rejection
616 //--------------
617
618if(! fHistCascadeMultiplicityForTrigEvtNonPiledUpAndZprimVtx) {
619 if(fCollidingSystems)// AA collisions
620 fHistCascadeMultiplicityForTrigEvtNonPiledUpAndZprimVtx = new TH1F("fHistCascadeMultiplicityForTrigEvtNonPiledUpAndZprimVtx",
621 "Cascades per event;Nbr of Cascades/Evt;Events",
622 100, 0, 100);
623 else // pp collisions
624 fHistCascadeMultiplicityForTrigEvtNonPiledUpAndZprimVtx = new TH1F("fHistCascadeMultiplicityForTrigEvtNonPiledUpAndZprimVtx",
625 "Cascades per event;Nbr of Cascades/Evt;Events",
626 25, 0, 25);
627 fListHistCascade->Add(fHistCascadeMultiplicityForTrigEvtNonPiledUpAndZprimVtx);
628}
629
630
9d670198 631 // - Histos for events passing the event selection at the analysis level
632 //--------------
633
634if(! fHistCascadeMultiplicityForSelEvt) {
45ee0bcc 635 if(fCollidingSystems)// AA collisions
9d670198 636 fHistCascadeMultiplicityForSelEvt = new TH1F("fHistCascadeMultiplicityForSelEvt",
7e504402 637 "Cascades per event;Nbr of Cascades/Evt;Events",
f3dc9369 638 100, 0, 100);
45ee0bcc 639 else // pp collisions
9d670198 640 fHistCascadeMultiplicityForSelEvt = new TH1F("fHistCascadeMultiplicityForSelEvt",
45ee0bcc 641 "Cascades per event;Nbr of Cascades/Evt;Events",
f3dc9369 642 25, 0, 25);
9d670198 643 fListHistCascade->Add(fHistCascadeMultiplicityForSelEvt);
644}
645
c525f360 646
9d670198 647if(! fHistPosBestPrimaryVtxXForSelEvt ){
e8fd19de 648 fHistPosBestPrimaryVtxXForSelEvt = new TH1F( "fHistPosBestPrimaryVtxXForSelEvt" , "Best Prim. Vertex Position in x; x (cm); Events" , 360, -0.9, 0.9 );
9d670198 649 fListHistCascade->Add(fHistPosBestPrimaryVtxXForSelEvt);
650}
651
652if(! fHistPosBestPrimaryVtxYForSelEvt){
e8fd19de 653 fHistPosBestPrimaryVtxYForSelEvt = new TH1F( "fHistPosBestPrimaryVtxYForSelEvt" , "Best Prim. Vertex Position in y; y (cm); Events" , 360, -0.9, 0.9 );
9d670198 654 fListHistCascade->Add(fHistPosBestPrimaryVtxYForSelEvt);
45ee0bcc 655}
656
9d670198 657if(! fHistPosBestPrimaryVtxZForSelEvt ){
e8fd19de 658 fHistPosBestPrimaryVtxZForSelEvt = new TH1F( "fHistPosBestPrimaryVtxZForSelEvt" , "Best Prim. Vertex Position in z; z (cm); Events" , 300, -30.0, 30.0 );
9d670198 659 fListHistCascade->Add(fHistPosBestPrimaryVtxZForSelEvt);
660}
661
662
45ee0bcc 663
664
9d670198 665 // - Histos for events containing at least ONE CASCADE
666 //--------------
667
7e504402 668if(! fHistTPCrefitTrackMultiplicityForCascadeEvt) {
669 if(fCollidingSystems)// AA collisions
670 fHistTPCrefitTrackMultiplicityForCascadeEvt = new TH1F("fHistTPCrefitTrackMultiplicityForCascadeEvt",
671 "TPCrefit track Multiplicity (for evt with Casc.);Nbr of TPCrefit tracks/Evt with cascade(s);Events",
672 200, 0, 20000);
673 else // pp collisions
674 fHistTPCrefitTrackMultiplicityForCascadeEvt = new TH1F("fHistTPCrefitTrackMultiplicityForCascadeEvt",
675 "TPCrefit track Multiplicity (for evt with Casc.);Nbr of TPCrefit tracks/Evt with cascade(s);Events",
e8fd19de 676 300, 0, 300);
7e504402 677 fListHistCascade->Add(fHistTPCrefitTrackMultiplicityForCascadeEvt);
45ee0bcc 678}
679
c525f360 680if(! fHistPrimaryTrackMultiplicityForCascadeEvt) {
681 if(fCollidingSystems)// AA collisions
682 fHistPrimaryTrackMultiplicityForCascadeEvt = new TH1F("fHistPrimaryTrackMultiplicityForCascadeEvt",
683 "Primary track Multiplicity (for evt with Casc.);Nbr of primary tracks/Evt;Events",
684 100, 0, 10000);
685 else // pp collisions
686 fHistPrimaryTrackMultiplicityForCascadeEvt = new TH1F("fHistPrimaryTrackMultiplicityForCascadeEvt",
687 "Primary track Multiplicity (for evt with Casc.);Nbr of primary tracks/Evt;Events",
688 200, 0, 200);
689 fListHistCascade->Add(fHistPrimaryTrackMultiplicityForCascadeEvt);
690}
691
7e504402 692if(! fHistPosV0TPCClusters ){
693 fHistPosV0TPCClusters = new TH1F("fHistPosV0TPCClusters", "TPC clusters for Pos. V0 daughter track, in Casc; Nbr of TPC clusters (V0 Pos.); Track counts", 165, 0.0 ,165.0);
694 fListHistCascade->Add(fHistPosV0TPCClusters);
695}
696
697if(! fHistNegV0TPCClusters ){
698 fHistNegV0TPCClusters = new TH1F("fHistNegV0TPCClusters", "TPC clusters for Neg. V0 daughter track, in Casc; Nbr of TPC clusters (V0 Neg.); Track counts", 165, 0.0 ,165.0);
699 fListHistCascade->Add(fHistNegV0TPCClusters);
700}
701
702if(! fHistBachTPCClusters ){
703 fHistBachTPCClusters = new TH1F("fHistBachTPCClusters", "TPC clusters for Bachelor track; Nbr of TPC clusters (Bach); Track counts", 165, 0.0 ,165.0);
704 fListHistCascade->Add(fHistBachTPCClusters);
705}
45ee0bcc 706
707
708
709
710
7e504402 711
712
713if(! fHistVtxStatus ){
714 fHistVtxStatus = new TH1F( "fHistVtxStatus" , "Does a Trckg Prim.vtx exist ?; true=1 or false=0; Nb of Events" , 4, -1.0, 3.0 );
715 fListHistCascade->Add(fHistVtxStatus);
716}
717
718
45ee0bcc 719 // - Vertex Positions
720
9d670198 721if(! fHistPosTrkgPrimaryVtxXForCascadeEvt ){
e8fd19de 722 fHistPosTrkgPrimaryVtxXForCascadeEvt = new TH1F( "fHistPosTrkgPrimaryVtxXForCascadeEvt" , "Trkg Prim. Vertex Position in x; x (cm); Events" , 360, -0.9, 0.9 );
9d670198 723 fListHistCascade->Add(fHistPosTrkgPrimaryVtxXForCascadeEvt);
45ee0bcc 724}
725
726
9d670198 727if(! fHistPosTrkgPrimaryVtxYForCascadeEvt){
e8fd19de 728 fHistPosTrkgPrimaryVtxYForCascadeEvt = new TH1F( "fHistPosTrkgPrimaryVtxYForCascadeEvt" , "Trkg Prim. Vertex Position in y; y (cm); Events" , 360, -0.9, 0.9 );
9d670198 729 fListHistCascade->Add(fHistPosTrkgPrimaryVtxYForCascadeEvt);
45ee0bcc 730}
731
9d670198 732if(! fHistPosTrkgPrimaryVtxZForCascadeEvt ){
e8fd19de 733 fHistPosTrkgPrimaryVtxZForCascadeEvt = new TH1F( "fHistPosTrkgPrimaryVtxZForCascadeEvt" , "Trkg Prim. Vertex Position in z; z (cm); Events" , 300, -30.0, 30.0 );
9d670198 734 fListHistCascade->Add(fHistPosTrkgPrimaryVtxZForCascadeEvt);
45ee0bcc 735}
736
737if(! fHistTrkgPrimaryVtxRadius ){
738 fHistTrkgPrimaryVtxRadius = new TH1F( "fHistTrkgPrimaryVtxRadius", "Trkg Prim. Vertex radius; r (cm); Events" , 150, 0., 15.0 );
739 fListHistCascade->Add(fHistTrkgPrimaryVtxRadius);
740}
741
742
743
744
9d670198 745if(! fHistPosBestPrimaryVtxXForCascadeEvt ){
e8fd19de 746 fHistPosBestPrimaryVtxXForCascadeEvt = new TH1F( "fHistPosBestPrimaryVtxXForCascadeEvt" , "Best Prim. Vertex Position in x; x (cm); Events" , 360, -0.9, 0.9 );
9d670198 747 fListHistCascade->Add(fHistPosBestPrimaryVtxXForCascadeEvt);
45ee0bcc 748}
749
9d670198 750if(! fHistPosBestPrimaryVtxYForCascadeEvt){
e8fd19de 751 fHistPosBestPrimaryVtxYForCascadeEvt = new TH1F( "fHistPosBestPrimaryVtxYForCascadeEvt" , "Best Prim. Vertex Position in y; y (cm); Events" , 360, -0.9, 0.9 );
9d670198 752 fListHistCascade->Add(fHistPosBestPrimaryVtxYForCascadeEvt);
45ee0bcc 753}
754
9d670198 755if(! fHistPosBestPrimaryVtxZForCascadeEvt ){
e8fd19de 756 fHistPosBestPrimaryVtxZForCascadeEvt = new TH1F( "fHistPosBestPrimaryVtxZForCascadeEvt" , "Best Prim. Vertex Position in z; z (cm); Events" , 300, -30.0, 30.0 );
9d670198 757 fListHistCascade->Add(fHistPosBestPrimaryVtxZForCascadeEvt);
45ee0bcc 758}
759
760if(! fHistBestPrimaryVtxRadius ){
761 fHistBestPrimaryVtxRadius = new TH1F( "fHistBestPrimaryVtxRadius", "Best Prim. vertex radius; r (cm); Events" , 150, 0., 15.0 );
762 fListHistCascade->Add(fHistBestPrimaryVtxRadius);
763}
764
765if(! f2dHistTrkgPrimVtxVsBestPrimVtx) {
766 f2dHistTrkgPrimVtxVsBestPrimVtx = new TH2F( "f2dHistTrkgPrimVtxVsBestPrimVtx", "r_{Trck Prim. Vtx} Vs r_{Best Prim. Vtx}; r_{Track Vtx} (cm); r_{Best Vtx} (cm)", 300, 0., 15.0, 300, 0., 15.);
767 fListHistCascade->Add(f2dHistTrkgPrimVtxVsBestPrimVtx);
768}
769
770
771
772
773// - Typical histos for cascades
774
775
776if(! fHistEffMassXi) {
90926f02 777 fHistEffMassXi = new TH1F("fHistEffMassXi", "Cascade candidates ; Invariant Mass (GeV/c^{2}) ; Counts", 400, 1.2, 2.0);
45ee0bcc 778 fListHistCascade->Add(fHistEffMassXi);
779}
780
781if(! fHistChi2Xi ){
782 fHistChi2Xi = new TH1F("fHistChi2Xi", "Cascade #chi^{2}; #chi^{2}; Number of Cascades", 160, 0, 40);
783 fListHistCascade->Add(fHistChi2Xi);
784}
785
786if(! fHistDcaXiDaughters ){
787 fHistDcaXiDaughters = new TH1F( "fHistDcaXiDaughters", "DCA between Xi Daughters; DCA (cm) ; Number of Cascades", 100, 0., 0.5);
788 fListHistCascade->Add(fHistDcaXiDaughters);
789}
790
791if(! fHistDcaBachToPrimVertex) {
792 fHistDcaBachToPrimVertex = new TH1F("fHistDcaBachToPrimVertex", "DCA of Bach. to Prim. Vertex;DCA (cm);Number of Cascades", 250, 0., 0.25);
793 fListHistCascade->Add(fHistDcaBachToPrimVertex);
794}
795
796if(! fHistXiCosineOfPointingAngle) {
32599cd4 797 fHistXiCosineOfPointingAngle = new TH1F("fHistXiCosineOfPointingAngle", "Cosine of Xi Pointing Angle; Cos (Xi Point.Angl);Number of Xis", 200, 0.99, 1.0);
45ee0bcc 798 fListHistCascade->Add(fHistXiCosineOfPointingAngle);
799}
800
801if(! fHistXiRadius ){
32599cd4 802 fHistXiRadius = new TH1F( "fHistXiRadius", "Casc. decay transv. radius; r (cm); Counts" , 1050, 0., 105.0 );
45ee0bcc 803 fListHistCascade->Add(fHistXiRadius);
804}
805
806
807// - Histos about ~ the "V0 part" of the cascade, coming by inheritance from AliESDv0
808
809
810
811if (! fHistMassLambdaAsCascDghter) {
3aedd4a5 812 fHistMassLambdaAsCascDghter = new TH1F("fHistMassLambdaAsCascDghter","#Lambda associated to Casc. candidates;Eff. Mass (GeV/c^{2});Counts", 300,1.00,1.3);
45ee0bcc 813 fListHistCascade->Add(fHistMassLambdaAsCascDghter);
814}
815
816if (! fHistV0Chi2Xi) {
817 fHistV0Chi2Xi = new TH1F("fHistV0Chi2Xi", "V0 #chi^{2}, in cascade; #chi^{2};Counts", 160, 0, 40);
818 fListHistCascade->Add(fHistV0Chi2Xi);
819}
820
821if (! fHistDcaV0DaughtersXi) {
822 fHistDcaV0DaughtersXi = new TH1F("fHistDcaV0DaughtersXi", "DCA between V0 daughters, in cascade;DCA (cm);Number of V0s", 120, 0., 0.6);
823 fListHistCascade->Add(fHistDcaV0DaughtersXi);
824}
825
826if (! fHistDcaV0ToPrimVertexXi) {
827 fHistDcaV0ToPrimVertexXi = new TH1F("fHistDcaV0ToPrimVertexXi", "DCA of V0 to Prim. Vertex, in cascade;DCA (cm);Number of Cascades", 200, 0., 1.);
828 fListHistCascade->Add(fHistDcaV0ToPrimVertexXi);
829}
830
831if (! fHistV0CosineOfPointingAngleXi) {
832 fHistV0CosineOfPointingAngleXi = new TH1F("fHistV0CosineOfPointingAngleXi", "Cosine of V0 Pointing Angle, in cascade;Cos(V0 Point. Angl); Counts", 200, 0.98, 1.0);
833 fListHistCascade->Add(fHistV0CosineOfPointingAngleXi);
834}
835
836if (! fHistV0RadiusXi) {
32599cd4 837 fHistV0RadiusXi = new TH1F("fHistV0RadiusXi", "V0 decay radius, in cascade; radius (cm); Counts", 1050, 0., 105.0);
45ee0bcc 838 fListHistCascade->Add(fHistV0RadiusXi);
839}
840
841if (! fHistDcaPosToPrimVertexXi) {
842 fHistDcaPosToPrimVertexXi = new TH1F("fHistDcaPosToPrimVertexXi", "DCA of V0 pos daughter to Prim. Vertex;DCA (cm);Counts", 300, 0, 3);
843 fListHistCascade->Add(fHistDcaPosToPrimVertexXi);
844}
845
846if (! fHistDcaNegToPrimVertexXi) {
847 fHistDcaNegToPrimVertexXi = new TH1F("fHistDcaNegToPrimVertexXi", "DCA of V0 neg daughter to Prim. Vertex;DCA (cm);Counts", 300, 0, 3);
848 fListHistCascade->Add(fHistDcaNegToPrimVertexXi);
849}
850
851
852
853
854 // - Effective mass histos for cascades.
f87cd3db 855// By cascade hyp
45ee0bcc 856if (! fHistMassXiMinus) {
90926f02 857 fHistMassXiMinus = new TH1F("fHistMassXiMinus","#Xi^{-} candidates;M( #Lambda , #pi^{-} ) (GeV/c^{2});Counts", 400,1.2,2.0);
45ee0bcc 858 fListHistCascade->Add(fHistMassXiMinus);
859}
860
861if (! fHistMassXiPlus) {
a786bd57 862 fHistMassXiPlus = new TH1F("fHistMassXiPlus","#bar{#Xi}^{+} candidates;M( #bar{#Lambda}^{0} , #pi^{+} ) (GeV/c^{2});Counts",400,1.2,2.0);
45ee0bcc 863 fListHistCascade->Add(fHistMassXiPlus);
864}
865
866if (! fHistMassOmegaMinus) {
90926f02 867 fHistMassOmegaMinus = new TH1F("fHistMassOmegaMinus","#Omega^{-} candidates;M( #Lambda , K^{-} ) (GeV/c^{2});Counts", 500,1.5,2.5);
45ee0bcc 868 fListHistCascade->Add(fHistMassOmegaMinus);
869}
870
871if (! fHistMassOmegaPlus) {
a786bd57 872 fHistMassOmegaPlus = new TH1F("fHistMassOmegaPlus","#bar{#Omega}^{+} candidates;M( #bar{#Lambda}^{0} , K^{+} ) (GeV/c^{2});Counts", 500,1.5,2.5);
45ee0bcc 873 fListHistCascade->Add(fHistMassOmegaPlus);
874}
875
f87cd3db 876// By cascade hyp + bachelor PID
877if (! fHistMassWithCombPIDXiMinus) {
90926f02 878 fHistMassWithCombPIDXiMinus = new TH1F("fHistMassWithCombPIDXiMinus","#Xi^{-} candidates, with Bach. comb. PID;M( #Lambda , #pi^{-} ) (GeV/c^{2});Counts", 400,1.2,2.0);
f87cd3db 879 fListHistCascade->Add(fHistMassWithCombPIDXiMinus);
880}
881
882if (! fHistMassWithCombPIDXiPlus) {
a786bd57 883 fHistMassWithCombPIDXiPlus = new TH1F("fHistMassWithCombPIDXiPlus","#bar{#Xi}^{+} candidates, with Bach. comb. PID;M( #bar{#Lambda}^{0} , #pi^{+} ) (GeV/c^{2});Counts",400,1.2,2.0);
f87cd3db 884 fListHistCascade->Add(fHistMassWithCombPIDXiPlus);
885}
886
887if (! fHistMassWithCombPIDOmegaMinus) {
90926f02 888 fHistMassWithCombPIDOmegaMinus = new TH1F("fHistMassWithCombPIDOmegaMinus","#Omega^{-} candidates, with Bach. comb. PID;M( #Lambda , K^{-} ) (GeV/c^{2});Counts", 500,1.5,2.5);
f87cd3db 889 fListHistCascade->Add(fHistMassWithCombPIDOmegaMinus);
890}
891
892if (! fHistMassWithCombPIDOmegaPlus) {
a786bd57 893 fHistMassWithCombPIDOmegaPlus = new TH1F("fHistMassWithCombPIDOmegaPlus","#bar{#Omega}^{+} candidates, with Bach. comb. PID;M( #bar{#Lambda}^{0} , K^{+} ) (GeV/c^{2});Counts", 500,1.5,2.5);
f87cd3db 894 fListHistCascade->Add(fHistMassWithCombPIDOmegaPlus);
895}
896
45ee0bcc 897
898
899 // - Complements for QA
900
901if(! fHistXiTransvMom ){
90926f02 902 fHistXiTransvMom = new TH1F( "fHistXiTransvMom" , "#Xi transverse momentum (cand. around the mass peak) ; p_{t}(#Xi) (GeV/c); Counts", 100, 0.0, 10.0);
45ee0bcc 903 fListHistCascade->Add(fHistXiTransvMom);
904}
905
906if(! fHistXiTotMom ){
90926f02 907 fHistXiTotMom = new TH1F( "fHistXiTotMom" , "#Xi momentum norm (cand. around the mass peak); p_{tot}(#Xi) (GeV/c); Counts", 150, 0.0, 15.0);
45ee0bcc 908 fListHistCascade->Add(fHistXiTotMom);
909}
910
911
90926f02 912if(! fHistBachTransvMomXi ){
913 fHistBachTransvMomXi = new TH1F( "fHistBachTransvMomXi" , "#Xi Bach. transverse momentum (cand. around the mass peak) ; p_{t}(Bach.) (GeV/c); Counts", 100, 0.0, 5.0);
914 fListHistCascade->Add(fHistBachTransvMomXi);
45ee0bcc 915}
916
90926f02 917if(! fHistBachTotMomXi ){
918 fHistBachTotMomXi = new TH1F( "fHistBachTotMomXi" , "#Xi Bach. momentum norm (cand. around the mass peak); p_{tot}(Bach.) (GeV/c); Counts", 100, 0.0, 5.0);
919 fListHistCascade->Add(fHistBachTotMomXi);
45ee0bcc 920}
921
922
923if(! fHistChargeXi ){
924 fHistChargeXi = new TH1F( "fHistChargeXi" , "Charge of casc. candidates ; Sign ; Counts", 5, -2.0, 3.0);
925 fListHistCascade->Add(fHistChargeXi);
926}
927
928
929if (! fHistV0toXiCosineOfPointingAngle) {
930 fHistV0toXiCosineOfPointingAngle = new TH1F("fHistV0toXiCosineOfPointingAngle", "Cos. of V0 Ptng Angl / Xi vtx ;Cos(V0 Point. Angl / Xi vtx); Counts", 100, 0.99, 1.0);
931 fListHistCascade->Add(fHistV0toXiCosineOfPointingAngle);
932}
933
934
935if(! fHistRapXi ){
90926f02 936 fHistRapXi = new TH1F( "fHistRapXi" , "Rapidity of #Xi candidates (around the mass peak); y ; Counts", 200, -5.0, 5.0);
45ee0bcc 937 fListHistCascade->Add(fHistRapXi);
938}
939
940if(! fHistRapOmega ){
90926f02 941 fHistRapOmega = new TH1F( "fHistRapOmega" , "Rapidity of #Omega candidates (around the mass peak); y ; Counts", 200, -5.0, 5.0);
45ee0bcc 942 fListHistCascade->Add(fHistRapOmega);
943}
944
90926f02 945if(! fHistEtaXi ){
946 fHistEtaXi = new TH1F( "fHistEtaXi" , "Pseudo-rap. of #Xi candidates (around the mass peak) ; #eta ; Counts", 120, -3.0, 3.0);
947 fListHistCascade->Add(fHistEtaXi);
45ee0bcc 948}
949
90926f02 950if(! fHistThetaXi ){
951 fHistThetaXi = new TH1F( "fHistThetaXi" , "#theta of #Xi candidates (around the mass peak); #theta (deg) ; Counts", 180, 0., 180.0);
952 fListHistCascade->Add(fHistThetaXi);
45ee0bcc 953}
954
90926f02 955if(! fHistPhiXi ){
956 fHistPhiXi = new TH1F( "fHistPhiXi" , "#phi of #Xi candidates (around the mass peak); #phi (deg) ; Counts", 360, 0., 360.);
957 fListHistCascade->Add(fHistPhiXi);
45ee0bcc 958}
959
960
c525f360 961if(! fHistcTauXiMinus){
962 fHistcTauXiMinus = new TH1F("fHistcTauXiMinus", "Lifetime c.#tau for #Xi^{-}; L_{3D}.m_{PDG}(#Xi^{-}) / p_{3D} (cm); Counts", 100, 0., 50.);
963 fListHistCascade->Add(fHistcTauXiMinus);
964}
965
966if(! fHistcTauXiPlus){
a786bd57 967 fHistcTauXiPlus = new TH1F("fHistcTauXiPlus", "Lifetime c.#tau for #bar{#Xi}^{+}; L_{3D}.m_{PDG}(#bar{#Xi}^{+}) / p_{3D} (cm); Counts", 100, 0., 50.);
c525f360 968 fListHistCascade->Add(fHistcTauXiPlus);
969}
970
971if(! fHistcTauOmegaMinus){
972 fHistcTauOmegaMinus = new TH1F("fHistcTauOmegaMinus", "Lifetime c.#tau for #Omega^{-}; L_{3D}.m_{PDG}(#Omega^{-}) / p_{3D} (cm); Counts", 100, 0., 50.);
973 fListHistCascade->Add(fHistcTauOmegaMinus);
974}
975
976if(! fHistcTauOmegaPlus){
a786bd57 977 fHistcTauOmegaPlus = new TH1F("fHistcTauOmegaPlus", "Lifetime c.#tau for #bar{#Omega}^{+}; L_{3D}.m_{PDG}(#bar{#Omega}^{+}) / p_{3D} (cm); Counts", 100, 0., 50.);
c525f360 978 fListHistCascade->Add(fHistcTauOmegaPlus);
979}
980
981
45ee0bcc 982if(! f2dHistArmenteros) {
983 f2dHistArmenteros = new TH2F( "f2dHistArmenteros", "#alpha_{Arm}(casc. cand.) Vs Pt_{Arm}(casc. cand.); #alpha_{Arm} ; Pt_{Arm} (GeV/c)", 140, -1.2, 1.2, 300, 0., 0.3);
984 fListHistCascade->Add(f2dHistArmenteros);
985}
986
e9c3f0b6 987//-------
988
45ee0bcc 989if(! f2dHistEffMassLambdaVsEffMassXiMinus) {
90926f02 990 f2dHistEffMassLambdaVsEffMassXiMinus = new TH2F( "f2dHistEffMassLambdaVsEffMassXiMinus", "M_{#Lambda} Vs M_{#Xi^{-} candidates} ; Inv. M_{#Lambda^{0}} (GeV/c^{2}) ; M( #Lambda , #pi^{-} ) (GeV/c^{2})", 300, 1.1,1.13, 400, 1.2, 2.0);
45ee0bcc 991 fListHistCascade->Add(f2dHistEffMassLambdaVsEffMassXiMinus);
992}
993
994if(! f2dHistEffMassXiVsEffMassOmegaMinus) {
90926f02 995 f2dHistEffMassXiVsEffMassOmegaMinus = new TH2F( "f2dHistEffMassXiVsEffMassOmegaMinus", "M_{#Xi^{-} candidates} Vs M_{#Omega^{-} candidates} ; M( #Lambda , #pi^{-} ) (GeV/c^{2}) ; M( #Lambda , K^{-} ) (GeV/c^{2})", 400, 1.2, 2.0, 500, 1.5, 2.5);
45ee0bcc 996 fListHistCascade->Add(f2dHistEffMassXiVsEffMassOmegaMinus);
997}
998
999if(! f2dHistEffMassLambdaVsEffMassXiPlus) {
a786bd57 1000 f2dHistEffMassLambdaVsEffMassXiPlus = new TH2F( "f2dHistEffMassLambdaVsEffMassXiPlus", "M_{#Lambda} Vs M_{#bar{#Xi}^{+} candidates} ; Inv. M_{#Lambda^{0}} (GeV/c^{2}) ; M( #Lambda , #pi^{+} ) (GeV/c^{2})", 300, 1.1,1.13, 400, 1.2, 2.0);
45ee0bcc 1001 fListHistCascade->Add(f2dHistEffMassLambdaVsEffMassXiPlus);
1002}
1003
1004if(! f2dHistEffMassXiVsEffMassOmegaPlus) {
a786bd57 1005 f2dHistEffMassXiVsEffMassOmegaPlus = new TH2F( "f2dHistEffMassXiVsEffMassOmegaPlus", "M_{#bar{#Xi}^{+} candidates} Vs M_{#bar{#Omega}^{+} candidates} ; M( #Lambda , #pi^{+} ) (GeV/c^{2}) ; M( #Lambda , K^{+} ) (GeV/c^{2})", 400, 1.2, 2.0, 500, 1.5, 2.5);
45ee0bcc 1006 fListHistCascade->Add(f2dHistEffMassXiVsEffMassOmegaPlus);
1007}
1008
e9c3f0b6 1009//-------
1010
45ee0bcc 1011if(! f2dHistXiRadiusVsEffMassXiMinus) {
90926f02 1012 f2dHistXiRadiusVsEffMassXiMinus = new TH2F( "f2dHistXiRadiusVsEffMassXiMinus", "Transv. R_{Xi Decay} Vs M_{#Xi^{-} candidates}; r_{cascade} (cm); M( #Lambda , #pi^{-} ) (GeV/c^{2}) ", 450, 0., 45.0, 400, 1.2, 2.0);
45ee0bcc 1013 fListHistCascade->Add(f2dHistXiRadiusVsEffMassXiMinus);
1014}
1015
1016if(! f2dHistXiRadiusVsEffMassXiPlus) {
a786bd57 1017 f2dHistXiRadiusVsEffMassXiPlus = new TH2F( "f2dHistXiRadiusVsEffMassXiPlus", "Transv. R_{Xi Decay} Vs M_{#bar{#Xi}^{+} candidates}; r_{cascade} (cm); M( #Lambda , #pi^{+} ) (GeV/c^{2}) ", 450, 0., 45.0, 400, 1.2, 2.0);
45ee0bcc 1018 fListHistCascade->Add(f2dHistXiRadiusVsEffMassXiPlus);
1019}
1020
e9c3f0b6 1021if(! f2dHistXiRadiusVsEffMassOmegaMinus) {
90926f02 1022 f2dHistXiRadiusVsEffMassOmegaMinus = new TH2F( "f2dHistXiRadiusVsEffMassOmegaMinus", "Transv. R_{Xi Decay} Vs M_{#Omega^{-} candidates}; r_{cascade} (cm); M( #Lambda , K^{-} ) (GeV/c^{2}) ", 450, 0., 45.0, 500, 1.5, 2.5);
e9c3f0b6 1023 fListHistCascade->Add(f2dHistXiRadiusVsEffMassOmegaMinus);
1024}
1025
1026if(! f2dHistXiRadiusVsEffMassOmegaPlus) {
a786bd57 1027 f2dHistXiRadiusVsEffMassOmegaPlus = new TH2F( "f2dHistXiRadiusVsEffMassOmegaPlus", "Transv. R_{Xi Decay} Vs M_{#bar{#Omega}^{+} candidates}; r_{cascade} (cm); M( #Lambda , K^{+} ) (GeV/c^{2}) ", 450, 0., 45.0, 500, 1.5, 2.5);
e9c3f0b6 1028 fListHistCascade->Add(f2dHistXiRadiusVsEffMassOmegaPlus);
1029}
1030
e8fd19de 1031//------
1032
1033if(! f2dHistTPCdEdxOfCascDghters){
1034 f2dHistTPCdEdxOfCascDghters = new TH2F( "f2dHistTPCdEdxOfCascDghters", "TPC dE/dx of the cascade daughters; charge x || #vec{p}_{TPC inner wall}(Casc. daughter) || (GeV/c); TPC signal (ADC) ", 2000, -10.0, 10.0, 450, 0., 900.);
1035 fListHistCascade->Add(f2dHistTPCdEdxOfCascDghters);
1036}
1037
1038
e9c3f0b6 1039
3aedd4a5 1040// Part 2 : Raw material for yield extraction -------
45ee0bcc 1041
ff0753e1 1042if(! f3dHistXiPtVsEffMassVsYXiMinus) {
e8fd19de 1043 f3dHistXiPtVsEffMassVsYXiMinus = new TH3F( "f3dHistXiPtVsEffMassVsYXiMinus", "Pt_{cascade} Vs M_{#Xi^{-} candidates} Vs Y_{#Xi}; Pt_{cascade} (GeV/c); M( #Lambda , #pi^{-} ) (GeV/c^{2}) ;Y_{#Xi} ", 100, 0., 10.0, 400, 1.2, 2.0, 44, -1.1,1.1);
ff0753e1 1044 fListHistCascade->Add(f3dHistXiPtVsEffMassVsYXiMinus);
e9c3f0b6 1045}
1046
ff0753e1 1047if(! f3dHistXiPtVsEffMassVsYXiPlus) {
a786bd57 1048 f3dHistXiPtVsEffMassVsYXiPlus = new TH3F( "f3dHistXiPtVsEffMassVsYXiPlus", "Pt_{cascade} Vs M_{#bar{#Xi}^{+} candidates} Vs Y_{#Xi}; Pt_{cascade} (GeV/c); M( #Lambda , #pi^{+} ) (GeV/c^{2}); Y_{#Xi}", 100, 0., 10.0, 400, 1.2, 2.0, 44, -1.1,1.1);
ff0753e1 1049 fListHistCascade->Add(f3dHistXiPtVsEffMassVsYXiPlus);
e9c3f0b6 1050}
1051
ff0753e1 1052if(! f3dHistXiPtVsEffMassVsYOmegaMinus) {
e8fd19de 1053 f3dHistXiPtVsEffMassVsYOmegaMinus = new TH3F( "f3dHistXiPtVsEffMassVsYOmegaMinus", "Pt_{cascade} Vs M_{#Omega^{-} candidates} Vs Y_{#Omega}; Pt_{cascade} (GeV/c); M( #Lambda , K^{-} ) (GeV/c^{2}); Y_{#Omega}", 100, 0., 10.0, 500, 1.5, 2.5, 44, -1.1,1.1);
ff0753e1 1054 fListHistCascade->Add(f3dHistXiPtVsEffMassVsYOmegaMinus);
e9c3f0b6 1055}
1056
ff0753e1 1057if(! f3dHistXiPtVsEffMassVsYOmegaPlus) {
a786bd57 1058 f3dHistXiPtVsEffMassVsYOmegaPlus = new TH3F( "f3dHistXiPtVsEffMassVsYOmegaPlus", "Pt_{cascade} Vs M_{#bar{#Omega}^{+} candidates} Vs Y_{#Omega}; Pt_{cascade} (GeV/c); M( #Lambda , K^{+} ) (GeV/c^{2}); Y_{#Omega}", 100, 0., 10.0, 500, 1.5, 2.5, 44, -1.1,1.1);
ff0753e1 1059 fListHistCascade->Add(f3dHistXiPtVsEffMassVsYOmegaPlus);
e9c3f0b6 1060}
45ee0bcc 1061
3aedd4a5 1062//--
32599cd4 1063if(! fCFContCascadePIDXiMinus) {
1064 const Int_t lNbSteps = 7 ;
1065 const Int_t lNbVariables = 4 ;
1066
1067 //array for the number of bins in each dimension :
e8fd19de 1068 Int_t lNbBinsPerVar[4] = {0};
32599cd4 1069 lNbBinsPerVar[0] = 100;
a786bd57 1070 lNbBinsPerVar[1] = 75;
e8fd19de 1071 lNbBinsPerVar[2] = 44;
f3dc9369 1072 lNbBinsPerVar[3] = 250;
32599cd4 1073
1074
1075 fCFContCascadePIDXiMinus = new AliCFContainer("fCFContCascadePIDXiMinus","Pt_{cascade} Vs M_{#Xi^{-} candidates} Vs Y_{#Xi}", lNbSteps, lNbVariables, lNbBinsPerVar );
1076
1077 //setting the bin limits (valid for v4-18-10-AN)
a786bd57 1078 fCFContCascadePIDXiMinus->SetBinLimits(0, 0.0 , 10.0 ); // Pt(Cascade)
1079 fCFContCascadePIDXiMinus->SetBinLimits(1, 1.25 , 1.40 ); // Xi Effective mass
1080 fCFContCascadePIDXiMinus->SetBinLimits(2, -1.1 , 1.1 ); // Rapidity
32599cd4 1081 if(fCollidingSystems)
c525f360 1082 fCFContCascadePIDXiMinus->SetBinLimits(3, 0.0, 20000.0 ); // Primary track Multiplicity
32599cd4 1083 else
c525f360 1084 fCFContCascadePIDXiMinus->SetBinLimits(3, 0.0, 250.0 ); // Primary track Multiplicity
32599cd4 1085
1086 // Setting the step title : one per PID case
1087 fCFContCascadePIDXiMinus->SetStepTitle(0, "No PID");
e8fd19de 1088 fCFContCascadePIDXiMinus->SetStepTitle(1, "TPC PID / 4-#sigma cut on Bachelor track");
1089 fCFContCascadePIDXiMinus->SetStepTitle(2, "TPC PID / 4-#sigma cut on Bachelor+Baryon tracks");
1090 fCFContCascadePIDXiMinus->SetStepTitle(3, "TPC PID / 4-#sigma cut on Bachelor+Baryon+Meson tracks");
32599cd4 1091 fCFContCascadePIDXiMinus->SetStepTitle(4, "Comb. PID / Bachelor");
1092 fCFContCascadePIDXiMinus->SetStepTitle(5, "Comb. PID / Bachelor+Baryon");
1093 fCFContCascadePIDXiMinus->SetStepTitle(6, "Comb. PID / Bachelor+Baryon+Meson");
1094
1095 // Setting the variable title, per axis
1096 fCFContCascadePIDXiMinus->SetVarTitle(0, "Pt_{cascade} (GeV/c)");
1097 fCFContCascadePIDXiMinus->SetVarTitle(1, "M( #Lambda , #pi^{-} ) (GeV/c^{2})");
1098 fCFContCascadePIDXiMinus->SetVarTitle(2, "Y_{#Xi}");
c525f360 1099 fCFContCascadePIDXiMinus->SetVarTitle(3, "Primary track Multiplicity");
32599cd4 1100
1101 fListHistCascade->Add(fCFContCascadePIDXiMinus);
1102
1103}
1104
1105if(! fCFContCascadePIDXiPlus) {
1106 const Int_t lNbSteps = 7 ;
1107 const Int_t lNbVariables = 4 ;
1108
1109 //array for the number of bins in each dimension :
e8fd19de 1110 Int_t lNbBinsPerVar[4] = {0};
32599cd4 1111 lNbBinsPerVar[0] = 100;
a786bd57 1112 lNbBinsPerVar[1] = 75;
e8fd19de 1113 lNbBinsPerVar[2] = 44;
f3dc9369 1114 lNbBinsPerVar[3] = 250;
32599cd4 1115
1116
a786bd57 1117 fCFContCascadePIDXiPlus = new AliCFContainer("fCFContCascadePIDXiPlus","Pt_{cascade} Vs M_{#bar{#Xi}^{+} candidates} Vs Y_{#Xi}", lNbSteps, lNbVariables, lNbBinsPerVar );
32599cd4 1118
1119
1120 //setting the bin limits (valid for v4-18-10-AN)
a786bd57 1121 fCFContCascadePIDXiPlus->SetBinLimits(0, 0.0 , 10.0 ); // Pt(Cascade)
1122 fCFContCascadePIDXiPlus->SetBinLimits(1, 1.25 , 1.40 ); // Xi Effective mass
1123 fCFContCascadePIDXiPlus->SetBinLimits(2, -1.1 , 1.1 ); // Rapidity
32599cd4 1124 if(fCollidingSystems)
c525f360 1125 fCFContCascadePIDXiPlus->SetBinLimits(3, 0.0, 20000.0 ); // Primary track Multiplicity
32599cd4 1126 else
c525f360 1127 fCFContCascadePIDXiPlus->SetBinLimits(3, 0.0, 250.0 ); // Primary track Multiplicity
32599cd4 1128
1129 // Setting the step title : one per PID case
1130 fCFContCascadePIDXiPlus->SetStepTitle(0, "No PID");
e8fd19de 1131 fCFContCascadePIDXiPlus->SetStepTitle(1, "TPC PID / 4-#sigma cut on Bachelor track");
1132 fCFContCascadePIDXiPlus->SetStepTitle(2, "TPC PID / 4-#sigma cut on Bachelor+Baryon tracks");
1133 fCFContCascadePIDXiPlus->SetStepTitle(3, "TPC PID / 4-#sigma cut on Bachelor+Baryon+Meson tracks");
32599cd4 1134 fCFContCascadePIDXiPlus->SetStepTitle(4, "Comb. PID / Bachelor");
1135 fCFContCascadePIDXiPlus->SetStepTitle(5, "Comb. PID / Bachelor+Baryon");
1136 fCFContCascadePIDXiPlus->SetStepTitle(6, "Comb. PID / Bachelor+Baryon+Meson");
1137
1138 // Setting the variable title, per axis
1139 fCFContCascadePIDXiPlus->SetVarTitle(0, "Pt_{cascade} (GeV/c)");
1140 fCFContCascadePIDXiPlus->SetVarTitle(1, "M( #Lambda , #pi^{+} ) (GeV/c^{2})");
1141 fCFContCascadePIDXiPlus->SetVarTitle(2, "Y_{#Xi}");
c525f360 1142 fCFContCascadePIDXiPlus->SetVarTitle(3, "Primary track Multiplicity");
32599cd4 1143
1144 fListHistCascade->Add(fCFContCascadePIDXiPlus);
1145
1146}
1147
1148
1149if(! fCFContCascadePIDOmegaMinus) {
1150 const Int_t lNbSteps = 7 ;
1151 const Int_t lNbVariables = 4 ;
1152
1153 //array for the number of bins in each dimension :
e8fd19de 1154 Int_t lNbBinsPerVar[4] = {0};
32599cd4 1155 lNbBinsPerVar[0] = 100;
a786bd57 1156 lNbBinsPerVar[1] = 60;
e8fd19de 1157 lNbBinsPerVar[2] = 44;
f3dc9369 1158 lNbBinsPerVar[3] = 250;
32599cd4 1159
1160
1161 fCFContCascadePIDOmegaMinus = new AliCFContainer("fCFContCascadePIDOmegaMinus","Pt_{cascade} Vs M_{#Omega^{-} candidates} Vs Y_{#Omega}", lNbSteps, lNbVariables, lNbBinsPerVar );
1162
1163
1164 //setting the bin limits (valid for v4-18-10-AN)
a786bd57 1165 fCFContCascadePIDOmegaMinus->SetBinLimits(0, 0.0 , 10.0 ); // Pt(Cascade)
1166 fCFContCascadePIDOmegaMinus->SetBinLimits(1, 1.62 , 1.74 ); // Omega Effective mass
1167 fCFContCascadePIDOmegaMinus->SetBinLimits(2, -1.1 , 1.1 ); // Rapidity
32599cd4 1168 if(fCollidingSystems)
c525f360 1169 fCFContCascadePIDOmegaMinus->SetBinLimits(3, 0.0, 20000.0 ); //Primary track Multiplicity
32599cd4 1170 else
c525f360 1171 fCFContCascadePIDOmegaMinus->SetBinLimits(3, 0.0, 250.0 ); // Primary track Multiplicity
32599cd4 1172
1173 // Setting the step title : one per PID case
1174 fCFContCascadePIDOmegaMinus->SetStepTitle(0, "No PID");
e8fd19de 1175 fCFContCascadePIDOmegaMinus->SetStepTitle(1, "TPC PID / 4-#sigma cut on Bachelor track");
1176 fCFContCascadePIDOmegaMinus->SetStepTitle(2, "TPC PID / 4-#sigma cut on Bachelor+Baryon tracks");
1177 fCFContCascadePIDOmegaMinus->SetStepTitle(3, "TPC PID / 4-#sigma cut on Bachelor+Baryon+Meson tracks");
32599cd4 1178 fCFContCascadePIDOmegaMinus->SetStepTitle(4, "Comb. PID / Bachelor");
1179 fCFContCascadePIDOmegaMinus->SetStepTitle(5, "Comb. PID / Bachelor+Baryon");
1180 fCFContCascadePIDOmegaMinus->SetStepTitle(6, "Comb. PID / Bachelor+Baryon+Meson");
1181
1182 // Setting the variable title, per axis
1183 fCFContCascadePIDOmegaMinus->SetVarTitle(0, "Pt_{cascade} (GeV/c)");
1184 fCFContCascadePIDOmegaMinus->SetVarTitle(1, "M( #Lambda , K^{-} ) (GeV/c^{2})");
1185 fCFContCascadePIDOmegaMinus->SetVarTitle(2, "Y_{#Omega}");
c525f360 1186 fCFContCascadePIDOmegaMinus->SetVarTitle(3, "Primary track Multiplicity");
32599cd4 1187
1188 fListHistCascade->Add(fCFContCascadePIDOmegaMinus);
1189
1190}
1191
1192if(! fCFContCascadePIDOmegaPlus) {
1193 const Int_t lNbSteps = 7 ;
1194 const Int_t lNbVariables = 4 ;
1195
1196 //array for the number of bins in each dimension :
e8fd19de 1197 Int_t lNbBinsPerVar[4] = {0};
32599cd4 1198 lNbBinsPerVar[0] = 100;
a786bd57 1199 lNbBinsPerVar[1] = 60;
e8fd19de 1200 lNbBinsPerVar[2] = 44;
f3dc9369 1201 lNbBinsPerVar[3] = 250;
32599cd4 1202
1203
a786bd57 1204 fCFContCascadePIDOmegaPlus = new AliCFContainer("fCFContCascadePIDOmegaPlus","Pt_{cascade} Vs M_{#bar{#Omega}^{+} candidates} Vs Y_{#Omega}", lNbSteps, lNbVariables, lNbBinsPerVar );
32599cd4 1205
1206
1207 //setting the bin limits (valid for v4-18-10-AN)
a786bd57 1208 fCFContCascadePIDOmegaPlus->SetBinLimits(0, 0.0 , 10.0 ); // Pt(Cascade)
1209 fCFContCascadePIDOmegaPlus->SetBinLimits(1, 1.62 , 1.74 ); // Omega Effective mass
1210 fCFContCascadePIDOmegaPlus->SetBinLimits(2, -1.1 , 1.1 ); // Rapidity
32599cd4 1211 if(fCollidingSystems)
c525f360 1212 fCFContCascadePIDOmegaPlus->SetBinLimits(3, 0.0, 20000.0 ); // Primary track Multiplicity
32599cd4 1213 else
c525f360 1214 fCFContCascadePIDOmegaPlus->SetBinLimits(3, 0.0, 250.0 ); // Primary track Multiplicity
32599cd4 1215
1216 // Setting the step title : one per PID case
1217 fCFContCascadePIDOmegaPlus->SetStepTitle(0, "No PID");
e8fd19de 1218 fCFContCascadePIDOmegaPlus->SetStepTitle(1, "TPC PID / 4-#sigma cut on Bachelor track");
1219 fCFContCascadePIDOmegaPlus->SetStepTitle(2, "TPC PID / 4-#sigma cut on Bachelor+Baryon tracks");
1220 fCFContCascadePIDOmegaPlus->SetStepTitle(3, "TPC PID / 4-#sigma cut on Bachelor+Baryon+Meson tracks");
32599cd4 1221 fCFContCascadePIDOmegaPlus->SetStepTitle(4, "Comb. PID / Bachelor");
1222 fCFContCascadePIDOmegaPlus->SetStepTitle(5, "Comb. PID / Bachelor+Baryon");
1223 fCFContCascadePIDOmegaPlus->SetStepTitle(6, "Comb. PID / Bachelor+Baryon+Meson");
1224
1225 // Setting the variable title, per axis
1226 fCFContCascadePIDOmegaPlus->SetVarTitle(0, "Pt_{cascade} (GeV/c)");
1227 fCFContCascadePIDOmegaPlus->SetVarTitle(1, "M( #Lambda , K^{+} ) (GeV/c^{2})");
1228 fCFContCascadePIDOmegaPlus->SetVarTitle(2, "Y_{#Omega}");
c525f360 1229 fCFContCascadePIDOmegaPlus->SetVarTitle(3, "Primary track Multiplicity");
32599cd4 1230
1231 fListHistCascade->Add(fCFContCascadePIDOmegaPlus);
1232
1233}
1234
1235
1236
1237
1238
32599cd4 1239// Part 3 : Towards the optimisation of topological selections -------
1240if(! fCFContCascadeCuts){
1241
1242 // Container meant to store all the relevant distributions corresponding to the cut variables.
9d670198 1243 // So far, 20 variables have been identified.
1244 // The following will be done in quite a brut force way ...
1245 // FIXME Improvement expected later (before Pb-Pb data at least)
1246 // - Define a user binning to have less bins in each dimension
1247 // - boolean for enabling/disbaling this CFContainer
1248 const Int_t lNbSteps = 4 ;
1249 const Int_t lNbVariables = 20 ;
32599cd4 1250
1251 //array for the number of bins in each dimension :
e8fd19de 1252 Int_t lNbBinsPerVar[20] = {0};
32599cd4 1253 lNbBinsPerVar[0] = 25;
1254 lNbBinsPerVar[1] = 25;
1255 lNbBinsPerVar[2] = 20;
1256 lNbBinsPerVar[3] = 40;
e8fd19de 1257 lNbBinsPerVar[4] = 30;
1258 lNbBinsPerVar[5] = 25;
32599cd4 1259
1260 lNbBinsPerVar[6] = 20;
1261 lNbBinsPerVar[7] = 40;
1262 lNbBinsPerVar[8] = 40;
1263 lNbBinsPerVar[9] = 25;
1264 lNbBinsPerVar[10] = 25;
1265
e8fd19de 1266 lNbBinsPerVar[11] = 75; // 2-MeV/c2 bins
1267 lNbBinsPerVar[12] = 60; // 2-MeV/c2 bins
32599cd4 1268
e8fd19de 1269 lNbBinsPerVar[13] = 100;
9d670198 1270
1271 lNbBinsPerVar[14] = 44; // 0.05 in rapidity units
1272 lNbBinsPerVar[15] = 44; // 0.05 in rapidity units
1273
1274 lNbBinsPerVar[16] = 20;
32599cd4 1275
9d670198 1276 lNbBinsPerVar[17] = 50;
e8fd19de 1277 lNbBinsPerVar[18] = 100;
1278 lNbBinsPerVar[19] = 24;
32599cd4 1279
1280 fCFContCascadeCuts = new AliCFContainer("fCFContCascadeCuts","Container for Cascade cuts", lNbSteps, lNbVariables, lNbBinsPerVar );
1281
1282
e8fd19de 1283 //setting the bin limits
1284
1285 //0
1286 Double_t *lBinLim0 = new Double_t[ lNbBinsPerVar[0]+1 ];
1287 for(Int_t i=0; i< lNbBinsPerVar[0];i++) lBinLim0[i] = (Double_t)0.0 + (4.8 - 0.0 )/(lNbBinsPerVar[0]-1) * (Double_t)i ;
1288 lBinLim0[ lNbBinsPerVar[0] ] = 20.0;
1289 fCFContCascadeCuts -> SetBinLimits(0, lBinLim0 ); // DcaXiDaughters : 0.0 to 5.0
1290 delete [] lBinLim0;
1291 //1
1292 Double_t *lBinLim1 = new Double_t[ lNbBinsPerVar[1]+1 ];
1293 for(Int_t i=0; i< lNbBinsPerVar[1];i++) lBinLim1[i] = (Double_t)0.0 + (0.24 - 0.0 )/(lNbBinsPerVar[1]-1) * (Double_t)i ;
1294 lBinLim1[ lNbBinsPerVar[1] ] = 100.0;
1295 fCFContCascadeCuts -> SetBinLimits(1, lBinLim1 ); // DcaBachToPrimVertexXi : 0.0 to 0.25
1296 delete [] lBinLim1;
1297 //2
1298 Double_t *lBinLim2 = new Double_t[ lNbBinsPerVar[2]+1 ];
1299 for(Int_t i=1; i< lNbBinsPerVar[2]+1;i++) lBinLim2[i] = (Double_t)0.81 + (1.0 - 0.81 )/(lNbBinsPerVar[2]-1) * (Double_t) (i-1) ;
1300 lBinLim2[0] = 0.0;
1301 fCFContCascadeCuts -> SetBinLimits(2, lBinLim2 ); // XiCosineOfPointingAngle : 0.80 to 1.0
1302 delete [] lBinLim2;
1303 //3
1304 Double_t *lBinLim3 = new Double_t[ lNbBinsPerVar[3]+1 ];
1305 for(Int_t i=0; i< lNbBinsPerVar[3];i++) lBinLim3[i] = (Double_t)0.0 + (3.9 - 0.0 )/(lNbBinsPerVar[3]-1) * (Double_t)i ;
1306 lBinLim3[ lNbBinsPerVar[3] ] = 110.0;
1307 fCFContCascadeCuts -> SetBinLimits(3, lBinLim3 ); // XiRadius : 0.0 to 4.0
1308 delete [] lBinLim3;
1309 //4
1310 fCFContCascadeCuts->SetBinLimits(4, 1.1 , 1.13 ); // InvMassLambdaAsCascDghter
1311 //5
1312 Double_t *lBinLim5 = new Double_t[ lNbBinsPerVar[5]+1 ];
1313 for(Int_t i=0; i< lNbBinsPerVar[5];i++) lBinLim5[i] = (Double_t)0.0 + (4.8 - 0.0 )/(lNbBinsPerVar[5]-1) * (Double_t)i ;
1314 lBinLim5[ lNbBinsPerVar[5] ] = 20.0;
1315 fCFContCascadeCuts -> SetBinLimits(5, lBinLim5 ); // DcaV0DaughtersXi : 0.0 to 5.0
1316 delete [] lBinLim5;
1317
1318
1319 //6
1320 Double_t *lBinLim6 = new Double_t[ lNbBinsPerVar[6]+1 ];
1321 for(Int_t i=1; i< lNbBinsPerVar[6]+1 ;i++) lBinLim6[i] = (Double_t)0.81 + (1.0 - 0.81 )/(lNbBinsPerVar[6]-1) * (Double_t) (i-1) ;
1322 lBinLim6[0] = 0.0;
1323 fCFContCascadeCuts -> SetBinLimits(6, lBinLim6 ); // V0CosineOfPointingAngleXi : 0.80 to 1.0
1324 delete [] lBinLim6;
1325 //7
1326 Double_t *lBinLim7 = new Double_t[ lNbBinsPerVar[7]+1 ];
1327 for(Int_t i=0; i< lNbBinsPerVar[7];i++) lBinLim7[i] = (Double_t)0.0 + (7.8 - 0.0 )/(lNbBinsPerVar[7]-1) * (Double_t)i ;
1328 lBinLim7[ lNbBinsPerVar[7] ] = 100.0;
1329 fCFContCascadeCuts -> SetBinLimits(7, lBinLim7 ); // V0RadiusXi : 0.0 to 8.0
1330 delete [] lBinLim7;
1331 //8
1332 Double_t *lBinLim8 = new Double_t[ lNbBinsPerVar[8]+1 ];
1333 for(Int_t i=0; i< lNbBinsPerVar[8];i++) lBinLim8[i] = (Double_t)0.0 + (0.39 - 0.0 )/(lNbBinsPerVar[8]-1) * (Double_t)i ;
1334 lBinLim8[ lNbBinsPerVar[8] ] = 100.0;
1335 fCFContCascadeCuts -> SetBinLimits(8, lBinLim8 ); // DcaV0ToPrimVertexXi : 0.0 to 0.40
1336 delete [] lBinLim8;
1337 //9
1338 Double_t *lBinLim9 = new Double_t[ lNbBinsPerVar[9]+1 ];
1339 for(Int_t i=0; i< lNbBinsPerVar[9];i++) lBinLim9[i] = (Double_t)0.0 + (0.24 - 0.0 )/(lNbBinsPerVar[9]-1) * (Double_t)i ;
1340 lBinLim9[ lNbBinsPerVar[9] ] = 100.0;
1341 fCFContCascadeCuts -> SetBinLimits(9, lBinLim9 ); // DcaPosToPrimVertexXi : 0.0 to 0.25
1342 delete [] lBinLim9;
1343 //10
1344 Double_t *lBinLim10 = new Double_t[ lNbBinsPerVar[10]+1 ];
1345 for(Int_t i=0; i< lNbBinsPerVar[10];i++) lBinLim10[i] = (Double_t)0.0 + (0.24 - 0.0 )/(lNbBinsPerVar[10]-1) * (Double_t)i ;
1346 lBinLim10[ lNbBinsPerVar[10] ] = 100.0;
1347 fCFContCascadeCuts -> SetBinLimits(10, lBinLim10 ); // DcaPosToPrimVertexXi : 0.0 to 0.25
1348 delete [] lBinLim10;
1349
1350 //11
1351 fCFContCascadeCuts->SetBinLimits(11, 1.25 , 1.40 ); // InvMassXi
1352 fCFContCascadeCuts->SetBinLimits(12, 1.62 , 1.74 ); // InvMassOmega
1353 fCFContCascadeCuts->SetBinLimits(13, 0.0 , 10.0 ); // XiTransvMom
1354 fCFContCascadeCuts->SetBinLimits(14, -1.1 , 1.1 ); // Y(Xi)
1355 fCFContCascadeCuts->SetBinLimits(15, -1.1 , 1.1 ); // Y(Omega)
1356 fCFContCascadeCuts->SetBinLimits(16, -10.0 , 10.0 ); // BestPrimaryVtxPosZ
1357 if(fCollidingSystems){
c525f360 1358 fCFContCascadeCuts->SetBinLimits(17, 0.0, 10000.0 ); // nTrackPrimaryMultiplicity
a786bd57 1359 fCFContCascadeCuts->SetBinLimits(18, 0.0, 10000.0 ); // nITSandTPCtracksAndSPDtracklets
e8fd19de 1360 }
1361 else{
a786bd57 1362 //17
1363 //fCFContCascadeCuts->SetBinLimits(17, 0.0, 250.0 ); // nTrackPrimaryMultiplicity
1364 Double_t *lBinLim17 = new Double_t[ lNbBinsPerVar[17]+1 ];
1365 lBinLim17[0] = 0; lBinLim17[10] = 10; lBinLim17[20] = 24; lBinLim17[30] = 45; lBinLim17[40] = 95; lBinLim17[50] = 250;
1366 lBinLim17[1] = 1; lBinLim17[11] = 11; lBinLim17[21] = 25; lBinLim17[31] = 50; lBinLim17[41] = 100;
1367 lBinLim17[2] = 2; lBinLim17[12] = 13; lBinLim17[22] = 27; lBinLim17[32] = 55; lBinLim17[42] = 105;
1368 lBinLim17[3] = 3; lBinLim17[13] = 14; lBinLim17[23] = 30; lBinLim17[33] = 60; lBinLim17[43] = 110;
1369 lBinLim17[4] = 4; lBinLim17[14] = 15; lBinLim17[24] = 31; lBinLim17[34] = 65; lBinLim17[44] = 115;
1370 lBinLim17[5] = 5; lBinLim17[15] = 16; lBinLim17[25] = 32; lBinLim17[35] = 70; lBinLim17[45] = 120;
1371 lBinLim17[6] = 6; lBinLim17[16] = 20; lBinLim17[26] = 33; lBinLim17[36] = 75; lBinLim17[46] = 125;
1372 lBinLim17[7] = 7; lBinLim17[17] = 21; lBinLim17[27] = 34; lBinLim17[37] = 80; lBinLim17[47] = 130;
1373 lBinLim17[8] = 8; lBinLim17[18] = 22; lBinLim17[28] = 35; lBinLim17[38] = 85; lBinLim17[48] = 135;
1374 lBinLim17[9] = 9; lBinLim17[19] = 23; lBinLim17[29] = 40; lBinLim17[39] = 90; lBinLim17[49] = 140;
1375
1376 fCFContCascadeCuts -> SetBinLimits(17, lBinLim17 ); // nTrackPrimaryMultiplicity : 0 to 250
1377 delete [] lBinLim17;
1378
1379 fCFContCascadeCuts->SetBinLimits(18, 0.0, 200.0 ); // nITSandTPCtracksAndSPDtracklets
e8fd19de 1380 }
1381 fCFContCascadeCuts->SetBinLimits(19, 68.0 ,164.0 ); // BachTPCClusters
1382
1383
1384 // Regular binning definition (valid for v4-18-10-AN on)
1385 /*
1386 fCFContCascadeCuts->SetBinLimits(0, 0.0 , 2.5 ); // DcaXiDaughters
32599cd4 1387 fCFContCascadeCuts->SetBinLimits(1, 0.0 , 0.25 ); // DcaBachToPrimVertexXi
e8fd19de 1388 fCFContCascadeCuts->SetBinLimits(2, 0.99 , 1.0 ); // XiCosineOfPointingAngle
32599cd4 1389 fCFContCascadeCuts->SetBinLimits(3, 0.0 , 4.0 ); // XiRadius
9d670198 1390 fCFContCascadeCuts->SetBinLimits(4, 1.1 , 1.15 ); // InvMassLambdaAsCascDghter
e8fd19de 1391 fCFContCascadeCuts->SetBinLimits(5, 0.0 , 1.0 ); // DcaV0DaughtersXi
32599cd4 1392 fCFContCascadeCuts->SetBinLimits(6, 0.98 , 1.0 ); // V0CosineOfPointingAngleXi
1393 fCFContCascadeCuts->SetBinLimits(7, 0.0 , 20.0 ); // V0RadiusXi
1394 fCFContCascadeCuts->SetBinLimits(8, 0.0 , 1.0 ); // DcaV0ToPrimVertexXi
e8fd19de 1395 fCFContCascadeCuts->SetBinLimits(9, 0.0 , 0.25 ); // DcaPosToPrimVertexXi
1396 fCFContCascadeCuts->SetBinLimits(10, 0.0 , 0.25 ); // DcaNegToPrimVertexXi
1397 fCFContCascadeCuts->SetBinLimits(11, 1.25 , 1.40 ); // InvMassXi
1398 fCFContCascadeCuts->SetBinLimits(12, 1.62 , 1.74 ); // InvMassOmega
9d670198 1399 fCFContCascadeCuts->SetBinLimits(13, 0.0 , 10.0 ); // XiTransvMom
1400 fCFContCascadeCuts->SetBinLimits(14, -1.1 , 1.1 ); // Y(Xi)
1401 fCFContCascadeCuts->SetBinLimits(15, -1.1 , 1.1 ); // Y(Omega)
1402 fCFContCascadeCuts->SetBinLimits(16, -10.0 , 10.0 ); // BestPrimaryVtxPosZ
32599cd4 1403 if(fCollidingSystems){
c525f360 1404 fCFContCascadeCuts->SetBinLimits(17, 0.0, 10000.0 ); // nTrackPrimaryMultiplicity
a786bd57 1405 fCFContCascadeCuts->SetBinLimits(18, 0.0, 10000.0 ); // nITSandTPCtracksAndSPDtracklets
32599cd4 1406 }
1407 else{
c525f360 1408 fCFContCascadeCuts->SetBinLimits(17, 0.0, 250.0 ); // nTrackPrimaryMultiplicity
a786bd57 1409 fCFContCascadeCuts->SetBinLimits(18, 0.0, 200.0 ); // nITSandTPCtracksAndSPDtracklets
32599cd4 1410 }
9d670198 1411 fCFContCascadeCuts->SetBinLimits(19, 25.0 ,165.0 ); // BachTPCClusters
e8fd19de 1412 */
32599cd4 1413
1414
9d670198 1415 // Setting the number of steps : one for each cascade species (Xi-, Xi+ and Omega-, Omega+)
1416 fCFContCascadeCuts->SetStepTitle(0, "#Xi^{-} candidates");
1417 fCFContCascadeCuts->SetStepTitle(1, "#bar{#Xi}^{+} candidates");
1418 fCFContCascadeCuts->SetStepTitle(2, "#Omega^{-} candidates");
1419 fCFContCascadeCuts->SetStepTitle(3, "#bar{#Omega}^{+} candidates");
32599cd4 1420
1421 // Setting the variable title, per axis
9d670198 1422 // fCFContCascadeCuts->SetVarTitle(40, "Chi2Xi");
1423 fCFContCascadeCuts->SetVarTitle(0, "Dca(XiDaughters) (cm)");
1424 fCFContCascadeCuts->SetVarTitle(1, "Dca(Bach/PrimVertex) (cm)");
1425 fCFContCascadeCuts->SetVarTitle(2, "cos(Xi pointing angle)");
1426 fCFContCascadeCuts->SetVarTitle(3, "R_{2d}(Xi decay) (cm)");
1427 fCFContCascadeCuts->SetVarTitle(4, "M_{#Lambda}(As Casc Dghter) (GeV/c^{2})");
1428 // fCFContCascadeCuts->SetVarTitle(40, "V0Chi2Xi");
e8fd19de 1429 fCFContCascadeCuts->SetVarTitle(5, "Dca(V0 Daughters) in Xi (cm)");
9d670198 1430
1431 fCFContCascadeCuts->SetVarTitle(6, "cos(V0 pointing Angle) in Casc");
1432 fCFContCascadeCuts->SetVarTitle(7, "R_{2d}(V0 decay) (cm)");
1433 fCFContCascadeCuts->SetVarTitle(8, "Dca(V0/PrimVertex) (cm)");
1434 fCFContCascadeCuts->SetVarTitle(9, "Dca(Pos/PrimVertex) (cm)");
1435 fCFContCascadeCuts->SetVarTitle(10, "Dca(Neg/PrimVertex) (cm)");
1436
1437 fCFContCascadeCuts->SetVarTitle(11, "Inv. Mass(Xi) (GeV/c^{2})");
1438 fCFContCascadeCuts->SetVarTitle(12, "Inv. Mass(Omega) (GeV/c^{2})");
1439
1440 fCFContCascadeCuts->SetVarTitle(13, "pt(Casc.) (GeV/c)");
1441 //fCFContCascadeCuts->SetVarTitle(40, "V0toXiCosineOfPointingAngle");
1442
1443 fCFContCascadeCuts->SetVarTitle(14, "Y(Xi)");
1444 fCFContCascadeCuts->SetVarTitle(15, "Y(Omega)");
1445
1446 fCFContCascadeCuts->SetVarTitle(16, "Z-position(BestPrimVtx) (cm)");
1447
c525f360 1448 fCFContCascadeCuts->SetVarTitle(17, "Primary Track Multiplicity");
a786bd57 1449 fCFContCascadeCuts->SetVarTitle(18, "(ITS+TPC tracks + SPD tracklets) Multiplicity");
9d670198 1450 fCFContCascadeCuts->SetVarTitle(19, "Bach.TPC Clusters");
32599cd4 1451
1452 fListHistCascade->Add(fCFContCascadeCuts);
1453}
1454
3873f6ee 1455
3aedd4a5 1456
32599cd4 1457// Part 4 : Angular correlation study -------
3873f6ee 1458
1459if(! fHnSpAngularCorrXiMinus){
1460 // Delta Phi(Casc,any trck) Vs Delta Eta(Casc,any trck) Vs Casc Pt Vs Pt of the tracks
1461 // Delta Phi = 360 bins de -180., 180.
1462 // Delta Eta = 120 bins de -3.0, 3.0
1463 // Pt Cascade = 100 bins de 0., 10.0,
1464 // Pt track = 150 bins de 0., 15.0
1465
1466 Int_t bins[5] = { 360, 120, 100, 150, 40};
3aedd4a5 1467 Double_t xmin[5] = {-50., -3., 0., 0., 1.30};
1468 Double_t xmax[5] = { 310., 3., 10., 15., 1.34};
c525f360 1469
1470 TString strHnSparseTitle("");
1471 TString strAxisTitle[5];
1472 if(fAngularCorrelationType == "TrigAnyCasc-AssoAnyPrim" ){
1473 strHnSparseTitle = "Angular Correlation for #Xi^{-}: Trig = Casc. / Asso = all prim. tracks";
1474 strAxisTitle[0] = " #Delta#phi(Casc,Track) (deg)";
1475 strAxisTitle[1] = " #Delta#eta(Casc,Track)";
1476 strAxisTitle[2] = " Pt_{Casc} (GeV/c)";
1477 strAxisTitle[3] = " Pt_{asso. track} (GeV/c)";
1478 }
1479 else if(fAngularCorrelationType == "TrigCascLeading-AssoAnyPrim"){
1480 strHnSparseTitle = "Angular Correlation for #Xi^{-}: Trig = Casc. (leading part.) / Asso = all prim. tracks";
1481 strAxisTitle[0] = " #Delta#phi(Casc_{LEADING},Track) (deg)";
1482 strAxisTitle[1] = " #Delta#eta(Casc_{LEADING},Track)";
1483 strAxisTitle[2] = " Pt(Casc_{LEADING}) (GeV/c)";
1484 strAxisTitle[3] = " Pt_{asso. track} (GeV/c)";
1485 }
1486 else if(fAngularCorrelationType == "TrigLeadingTrck-AssoCasc"){
1487 strHnSparseTitle = "Angular Correlation for #Xi^{-}: Trig = leading track / Asso = any cascade";
1488 strAxisTitle[0] = " #Delta#phi(Leading Track,Casc) (deg)";
1489 strAxisTitle[1] = " #Delta#eta(Leading Track,Casc)";
1490 strAxisTitle[2] = " Pt(asso. Casc) (GeV/c)";
1491 strAxisTitle[3] = " Pt_{Leading track} (GeV/c)";
1492
1493 }
1494 strAxisTitle[4] = " Eff. Inv Mass (GeV/c^{2})";
1495
1496 fHnSpAngularCorrXiMinus = new THnSparseF("fHnSpAngularCorrXiMinus", strHnSparseTitle.Data(), 5, bins, xmin, xmax);
1497 fHnSpAngularCorrXiMinus->GetAxis(0)->SetTitle( strAxisTitle[0].Data() );
1498 fHnSpAngularCorrXiMinus->GetAxis(1)->SetTitle( strAxisTitle[1].Data() );
1499 fHnSpAngularCorrXiMinus->GetAxis(2)->SetTitle( strAxisTitle[2].Data() );
1500 fHnSpAngularCorrXiMinus->GetAxis(3)->SetTitle( strAxisTitle[3].Data() );
1501 fHnSpAngularCorrXiMinus->GetAxis(4)->SetTitle( strAxisTitle[4].Data() );
1502 fHnSpAngularCorrXiMinus->Sumw2();
3873f6ee 1503 fListHistCascade->Add(fHnSpAngularCorrXiMinus);
1504}
1505
1506if(! fHnSpAngularCorrXiPlus){
1507 // Delta Phi(Casc,any trck) Vs Delta Eta(Casc,any trck) Vs Casc Pt Vs Pt of the tracks
1508 // Delta Phi = 360 bins de -180., 180.
1509 // Delta Eta = 120 bins de -3.0, 3.0
1510 // Pt Cascade = 100 bins de 0., 10.0,
1511 // Pt track = 150 bins de 0., 15.0
1512 Int_t bins[5] = { 360, 120, 100, 150, 40};
3aedd4a5 1513 Double_t xmin[5] = {-50., -3., 0., 0., 1.30};
1514 Double_t xmax[5] = { 310., 3., 10., 15., 1.34};
c525f360 1515
1516 TString strHnSparseTitle("");
1517 TString strAxisTitle[5];
1518 if(fAngularCorrelationType == "TrigAnyCasc-AssoAnyPrim" ){
1519 strHnSparseTitle = "Angular Correlation for #bar{#Xi}^{+}: Trig = Casc. / Asso = all prim. tracks";
1520 strAxisTitle[0] = " #Delta#phi(Casc,Track) (deg)";
1521 strAxisTitle[1] = " #Delta#eta(Casc,Track)";
1522 strAxisTitle[2] = " Pt_{Casc} (GeV/c)";
1523 strAxisTitle[3] = " Pt_{asso. track} (GeV/c)";
1524 }
1525 else if(fAngularCorrelationType == "TrigCascLeading-AssoAnyPrim"){
1526 strHnSparseTitle = "Angular Correlation for #bar{#Xi}^{+}: Trig = Casc. (leading part.) / Asso = all prim. tracks";
1527 strAxisTitle[0] = " #Delta#phi(Casc_{LEADING},Track) (deg)";
1528 strAxisTitle[1] = " #Delta#eta(Casc_{LEADING},Track)";
1529 strAxisTitle[2] = " Pt(Casc_{LEADING}) (GeV/c)";
1530 strAxisTitle[3] = " Pt_{asso. track} (GeV/c)";
1531 }
1532 else if(fAngularCorrelationType == "TrigLeadingTrck-AssoCasc"){
1533 strHnSparseTitle = "Angular Correlation for #bar{#Xi}^{+}: Trig = leading track / Asso = any cascade";
1534 strAxisTitle[0] = " #Delta#phi(Leading Track,Casc) (deg)";
1535 strAxisTitle[1] = " #Delta#eta(Leading Track,Casc)";
1536 strAxisTitle[2] = " Pt(asso. Casc) (GeV/c)";
1537 strAxisTitle[3] = " Pt_{Leading track} (GeV/c)";
1538
1539 }
1540 strAxisTitle[4] = " Eff. Inv Mass (GeV/c^{2})";
1541
1542 fHnSpAngularCorrXiPlus = new THnSparseF("fHnSpAngularCorrXiPlus", strHnSparseTitle.Data(), 5, bins, xmin, xmax);
1543 fHnSpAngularCorrXiPlus->GetAxis(0)->SetTitle( strAxisTitle[0].Data() );
1544 fHnSpAngularCorrXiPlus->GetAxis(1)->SetTitle( strAxisTitle[1].Data() );
1545 fHnSpAngularCorrXiPlus->GetAxis(2)->SetTitle( strAxisTitle[2].Data() );
1546 fHnSpAngularCorrXiPlus->GetAxis(3)->SetTitle( strAxisTitle[3].Data() );
1547 fHnSpAngularCorrXiPlus->GetAxis(4)->SetTitle( strAxisTitle[4].Data() );
3873f6ee 1548 fHnSpAngularCorrXiPlus->Sumw2();
1549 fListHistCascade->Add(fHnSpAngularCorrXiPlus);
1550}
1551
1552if(! fHnSpAngularCorrOmegaMinus){
1553 // Delta Phi(Casc,any trck) Vs Delta Eta(Casc,any trck) Vs Casc Pt Vs Pt of the tracks
1554 // Delta Phi = 360 bins de -180., 180.
1555 // Delta Eta = 120 bins de -3.0, 3.0
1556 // Pt Cascade = 100 bins de 0., 10.0,
1557 // Pt track = 150 bins de 0., 15.0
1558
1559 Int_t bins[5] = { 360, 120, 100, 150, 40};
3aedd4a5 1560 Double_t xmin[5] = {-50., -3., 0., 0., 1.65};
1561 Double_t xmax[5] = { 310., 3., 10., 15., 1.69};
c525f360 1562
1563 TString strHnSparseTitle("");
1564 TString strAxisTitle[5];
1565 if(fAngularCorrelationType == "TrigAnyCasc-AssoAnyPrim" ){
1566 strHnSparseTitle = "Angular Correlation for #Omega^{-}: Trig = Casc. / Asso = all prim. tracks";
1567 strAxisTitle[0] = " #Delta#phi(Casc,Track) (deg)";
1568 strAxisTitle[1] = " #Delta#eta(Casc,Track)";
1569 strAxisTitle[2] = " Pt_{Casc} (GeV/c)";
1570 strAxisTitle[3] = " Pt_{asso. track} (GeV/c)";
1571 }
1572 else if(fAngularCorrelationType == "TrigCascLeading-AssoAnyPrim"){
1573 strHnSparseTitle = "Angular Correlation for #Omega^{-}: Trig = Casc. (leading part.) / Asso = all prim. tracks";
1574 strAxisTitle[0] = " #Delta#phi(Casc_{LEADING},Track) (deg)";
1575 strAxisTitle[1] = " #Delta#eta(Casc_{LEADING},Track)";
1576 strAxisTitle[2] = " Pt(Casc_{LEADING}) (GeV/c)";
1577 strAxisTitle[3] = " Pt_{asso. track} (GeV/c)";
1578 }
1579 else if(fAngularCorrelationType == "TrigLeadingTrck-AssoCasc"){
1580 strHnSparseTitle = "Angular Correlation for #Omega^{-}: Trig = leading track / Asso = any cascade";
1581 strAxisTitle[0] = " #Delta#phi(Leading Track,Casc) (deg)";
1582 strAxisTitle[1] = " #Delta#eta(Leading Track,Casc)";
1583 strAxisTitle[2] = " Pt(asso. Casc) (GeV/c)";
1584 strAxisTitle[3] = " Pt_{Leading track} (GeV/c)";
1585
1586 }
1587 strAxisTitle[4] = " Eff. Inv Mass (GeV/c^{2})";
1588
1589 fHnSpAngularCorrOmegaMinus = new THnSparseF("fHnSpAngularCorrOmegaMinus", strHnSparseTitle.Data(), 5, bins, xmin, xmax);
1590 fHnSpAngularCorrOmegaMinus->GetAxis(0)->SetTitle( strAxisTitle[0].Data() );
1591 fHnSpAngularCorrOmegaMinus->GetAxis(1)->SetTitle( strAxisTitle[1].Data() );
1592 fHnSpAngularCorrOmegaMinus->GetAxis(2)->SetTitle( strAxisTitle[2].Data() );
1593 fHnSpAngularCorrOmegaMinus->GetAxis(3)->SetTitle( strAxisTitle[3].Data() );
1594 fHnSpAngularCorrOmegaMinus->GetAxis(4)->SetTitle( strAxisTitle[4].Data() );
3873f6ee 1595 fHnSpAngularCorrOmegaMinus->Sumw2();
1596 fListHistCascade->Add(fHnSpAngularCorrOmegaMinus);
1597}
1598
1599if(! fHnSpAngularCorrOmegaPlus){
1600 // Delta Phi(Casc,any trck) Vs Delta Eta(Casc,any trck) Vs Casc Pt Vs Pt of the tracks
1601 // Delta Phi = 360 bins de -180., 180.
1602 // Delta Eta = 120 bins de -3.0, 3.0
1603 // Pt Cascade = 100 bins de 0., 10.0,
1604 // Pt track = 150 bins de 0., 15.0
1605 Int_t bins[5] = { 360, 120, 100, 150, 40};
3aedd4a5 1606 Double_t xmin[5] = {-50., -3., 0., 0., 1.65};
1607 Double_t xmax[5] = { 310., 3., 10., 15., 1.69};
c525f360 1608
1609 TString strHnSparseTitle("");
1610 TString strAxisTitle[5];
1611 if(fAngularCorrelationType == "TrigAnyCasc-AssoAnyPrim" ){
1612 strHnSparseTitle = "Angular Correlation for #bar{#Omega}^{+}: Trig = Casc. / Asso = all prim. tracks";
1613 strAxisTitle[0] = " #Delta#phi(Casc,Track) (deg)";
1614 strAxisTitle[1] = " #Delta#eta(Casc,Track)";
1615 strAxisTitle[2] = " Pt_{Casc} (GeV/c)";
1616 strAxisTitle[3] = " Pt_{asso. track} (GeV/c)";
1617 }
1618 else if(fAngularCorrelationType == "TrigCascLeading-AssoAnyPrim"){
1619 strHnSparseTitle = "Angular Correlation for #bar{#Omega}^{+}: Trig = Casc. (leading part.) / Asso = all prim. tracks";
1620 strAxisTitle[0] = " #Delta#phi(Casc_{LEADING},Track) (deg)";
1621 strAxisTitle[1] = " #Delta#eta(Casc_{LEADING},Track)";
1622 strAxisTitle[2] = " Pt(Casc_{LEADING}) (GeV/c)";
1623 strAxisTitle[3] = " Pt_{asso. track} (GeV/c)";
1624 }
1625 else if(fAngularCorrelationType == "TrigLeadingTrck-AssoCasc"){
1626 strHnSparseTitle = "Angular Correlation for #bar{#Omega}^{+}: Trig = leading track / Asso = any cascade";
1627 strAxisTitle[0] = " #Delta#phi(Leading Track,Casc) (deg)";
1628 strAxisTitle[1] = " #Delta#eta(Leading Track,Casc)";
1629 strAxisTitle[2] = " Pt(asso. Casc) (GeV/c)";
1630 strAxisTitle[3] = " Pt_{Leading track} (GeV/c)";
1631
1632 }
1633 strAxisTitle[4] = " Eff. Inv Mass (GeV/c^{2})";
1634
1635 fHnSpAngularCorrOmegaPlus = new THnSparseF("fHnSpAngularCorrOmegaPlus", strHnSparseTitle.Data(), 5, bins, xmin, xmax);
1636 fHnSpAngularCorrOmegaPlus->GetAxis(0)->SetTitle( strAxisTitle[0].Data() );
1637 fHnSpAngularCorrOmegaPlus->GetAxis(1)->SetTitle( strAxisTitle[1].Data() );
1638 fHnSpAngularCorrOmegaPlus->GetAxis(2)->SetTitle( strAxisTitle[2].Data() );
1639 fHnSpAngularCorrOmegaPlus->GetAxis(3)->SetTitle( strAxisTitle[3].Data() );
1640 fHnSpAngularCorrOmegaPlus->GetAxis(4)->SetTitle( strAxisTitle[4].Data() );
3873f6ee 1641 fHnSpAngularCorrOmegaPlus->Sumw2();
1642 fListHistCascade->Add(fHnSpAngularCorrOmegaPlus);
1643}
1644
1645
9d670198 1646PostData(1, fListHistCascade);
1647/* PostData(2, fPaveTextBookKeeping);*/
45ee0bcc 1648}// end UserCreateOutputObjects
1649
1650
1651
1652
1653
1654
1655//________________________________________________________________________
1656void AliAnalysisTaskCheckCascade::UserExec(Option_t *)
1657{
1658 // Main loop
1659 // Called for each event
7e504402 1660
1661 AliESDEvent *lESDevent = 0x0;
1662 AliAODEvent *lAODevent = 0x0;
9d670198 1663 Int_t ncascades = -1;
1664 Int_t nTrackMultiplicity = -1;
c525f360 1665 Int_t nTrackWithTPCrefitMultiplicity = -1;
1666 Int_t nTrackPrimaryMultiplicity = -1;
a786bd57 1667 Int_t nSPDTracklets = 0; // AliESDEvent::EstimateMultiplicity will re-initialise the value to 0
1668 Int_t nITSandTPCtracksAndSPDtracklets = 0; // AliESDEvent::EstimateMultiplicity will re-initialise the value to 0
1669 Int_t nTracksITSSApure = 0; // AliESDEvent::EstimateMultiplicity will re-initialise the value to 0
9d670198 1670
1671 Short_t lStatusTrackingPrimVtx = -2;
1672 Double_t lTrkgPrimaryVtxPos[3] = {-100.0, -100.0, -100.0};
1673 Double_t lBestPrimaryVtxPos[3] = {-100.0, -100.0, -100.0};
1674 Double_t lMagneticField = -10.;
1675
45ee0bcc 1676
1677
1678 // Connect to the InputEvent
1679 // After these lines, we should have an ESD/AOD event + the number of cascades in it.
1680
1681 if(fAnalysisType == "ESD"){
1682 lESDevent = dynamic_cast<AliESDEvent*>( InputEvent() );
1683 if (!lESDevent) {
7e504402 1684 AliWarning("ERROR: lESDevent not available \n");
45ee0bcc 1685 return;
1686 }
9d670198 1687
1688 fHistCascadeMultiplicityBeforeTrigSel->Fill ( lESDevent->GetNumberOfCascades() );
1689
7e504402 1690 //-------------------------------------------------
1691 // 0 - Trigger managment
9d670198 1692 // NOTE : Check the availability of the proper trigger
7e504402 1693
1694 // 1st option
e8fd19de 1695 //AliMCEventHandler *lmcEvtHandler = dynamic_cast<AliMCEventHandler*>( (AliAnalysisManager::GetAnalysisManager())->GetMCtruthEventHandler() );
1696 //if( !lmcEvtHandler ){ // !0x0 = real data or !1 = there is an MC handler available (useMC = kTRUE in AnalysisTrainNew), so = data from MC
7e504402 1697 // if ( !( lESDevent->IsTriggerClassFired("CINT1B-ABCE-NOPF-ALL")) ) return;
1698 //}
1699
e8fd19de 1700 // 2nd option - Presuppose the presence of AliPhysicsSelectionTask FIXME
9d670198 1701
e8fd19de 1702 UInt_t maskIsSelected = ((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected();
1703 Bool_t isSelected = 0;
c525f360 1704 if( fTriggerMaskType == "kMB") isSelected = (maskIsSelected & AliVEvent::kMB) == AliVEvent::kMB;
1705 else if(fTriggerMaskType == "kHighMult") isSelected = (maskIsSelected & AliVEvent::kHighMult) == AliVEvent::kHighMult;
1706 else isSelected = 1; // default = select anyway (use case = run without Phys Selection task)
1707
9d670198 1708 if ( ! isSelected ) {
1709 PostData(1, fListHistCascade);
1710 return;
1711 }
1712
7e504402 1713 //else Printf("Event selected ... \n");
1714
1715
1716
1717 //-------------------------------------------------
1718 // 1 - Cascade vertexer (ESD)
9d670198 1719
1720 if(fkRerunV0CascVertexers){ // FIXME : relaunch V0 and Cascade vertexers
c525f360 1721 if(fAnalysisType == "ESD" ){
9d670198 1722// lESDevent->ResetCascades();
1723// lESDevent->ResetV0s();
1724//
1725// AliV0vertexer lV0vtxer;
1726// AliCascadeVertexer lCascVtxer;
1727//
1728// lV0vtxer.SetDefaultCuts(fV0Sels);
1729// lCascVtxer.SetDefaultCuts(fCascSels);
1730//
1731// lV0vtxer.Tracks2V0vertices(lESDevent);
1732// lCascVtxer.V0sTracks2CascadeVertices(lESDevent);
c525f360 1733 }
9d670198 1734 }// end if(RelaunchV0CascVertexers)
1735
7e504402 1736 //-------------------------------------------------
1737 ncascades = lESDevent->GetNumberOfCascades();
1738 nTrackWithTPCrefitMultiplicity = DoESDTrackWithTPCrefitMultiplicity(lESDevent);
c525f360 1739 nTrackPrimaryMultiplicity = fESDtrackCuts->CountAcceptedTracks(lESDevent);
a786bd57 1740 //EstimateMultiplicity(Int_t &tracklets, Int_t &trITSTPC, Int_t &trITSSApure, Double_t eta, Bool_t useDCAFlag,Bool_t useV0Flag)
1741 lESDevent->EstimateMultiplicity( nSPDTracklets, nITSandTPCtracksAndSPDtracklets, nTracksITSSApure, 1.0, kTRUE, kTRUE);
7e504402 1742
7e504402 1743 }//if (fAnalysisType == "ESD")
45ee0bcc 1744
9d670198 1745
45ee0bcc 1746 if(fAnalysisType == "AOD"){
1747 lAODevent = dynamic_cast<AliAODEvent*>( InputEvent() );
9d670198 1748 if (!lAODevent) {
7e504402 1749 AliWarning("ERROR: lAODevent not available \n");
45ee0bcc 1750 return;
1751 }
9d670198 1752 ncascades = lAODevent->GetNumberOfCascades();
1753 nTrackWithTPCrefitMultiplicity = -1;
c525f360 1754 nTrackPrimaryMultiplicity = -1;
9d670198 1755
1756 fHistCascadeMultiplicityBeforeTrigSel->Fill ( ncascades );
45ee0bcc 1757 }
9d670198 1758
1759 // For AOD or ESD ...
32599cd4 1760 nTrackMultiplicity = (InputEvent())->GetNumberOfTracks();
9d670198 1761
1762
1763 //-------------------------------------------------
1764 fHistTrackMultiplicityForTrigEvt ->Fill( nTrackMultiplicity );
1765 fHistTPCrefitTrackMultiplicityForTrigEvt ->Fill( nTrackWithTPCrefitMultiplicity );
c525f360 1766 fHistPrimaryTrackMultiplicityForTrigEvt ->Fill( nTrackPrimaryMultiplicity );
a786bd57 1767 fHistEstimateITSTPCMultiplicityForTrigEvt->Fill( nITSandTPCtracksAndSPDtracklets);
9d670198 1768 fHistCascadeMultiplicityForTrigEvt ->Fill( ncascades );
1769
1770
1771
1772
45ee0bcc 1773 // ---------------------------------------------------------------
9d670198 1774 // I - Global characteristics of the events + general histos (filled for any selected events and/or for the analysed events)
1775
1776 // - I.Step 1 : Characteristics of the event : prim. Vtx + magnetic field (ESD)
1777 //-------------
1778
1779 if(fAnalysisType == "ESD"){
1780 const AliESDVertex *lPrimaryTrackingESDVtx = lESDevent->GetPrimaryVertexTracks();
1781 // get the vtx stored in ESD found with tracks
1782 lPrimaryTrackingESDVtx->GetXYZ( lTrkgPrimaryVtxPos );
1783
1784
1785 const AliESDVertex *lPrimaryBestESDVtx = lESDevent->GetPrimaryVertex();
1786 // get the best primary vertex available for the event
1787 // As done in AliCascadeVertexer, we keep the one which is the best one available.
1788 // between : Tracking vertex > SPD vertex > TPC vertex > default SPD vertex
1789 // This one will be used for next calculations (DCA essentially)
1790 lPrimaryBestESDVtx->GetXYZ( lBestPrimaryVtxPos );
1791 lStatusTrackingPrimVtx = lPrimaryTrackingESDVtx->GetStatus();
1792
1793 // FIXME : quality cut on the z-position of the prim vertex.
1794 if(fkQualityCutZprimVtxPos) {
1795 if(TMath::Abs(lBestPrimaryVtxPos[2]) > 10.0 ) {
1796 AliWarning("Pb / | Z position of Best Prim Vtx | > 10.0 cm ... return !");
1797 PostData(1, fListHistCascade);
1798 return;
1799 }
1800 }
e8fd19de 1801
1802 fHistCascadeMultiplicityForTrigEvtAndZprimVtx->Fill( ncascades );
1803
c525f360 1804 // FIXME : quality selection regarding pile-up rejection
1805 if(fkRejectEventPileUp) {
a786bd57 1806 if(lESDevent->IsPileupFromSPDInMultBins() ){// 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
c525f360 1807 AliWarning("Pb / Event tagged as pile-up by SPD... return !");
1808 PostData(1, fListHistCascade);
1809 return;
1810 }
1811 }
1812
1813 fHistCascadeMultiplicityForTrigEvtNonPiledUpAndZprimVtx->Fill( ncascades );
1814
9d670198 1815 // FIXME : remove TPC-only primary vertex : retain only events with tracking + SPD vertex
1816 if(fkQualityCutNoTPConlyPrimVtx) {
1817 const AliESDVertex *lPrimarySPDVtx = lESDevent->GetPrimaryVertexSPD();
1818 if (!lPrimarySPDVtx->GetStatus() && !lPrimaryTrackingESDVtx->GetStatus() ){
1819 AliWarning("Pb / No SPD prim. vertex nor prim. Tracking vertex ... return !");
1820 PostData(1, fListHistCascade);
1821 return;
1822 }
1823 }
1824
1825 // NOTE : For older evts
1826
1827 // As previously done in AliCascadeVertexer, we keep, between both retrieved vertices (SPD or Tracking)
1828 // the one which is the best one available.
1829 // This one will be used for next calculations (DCA essentially)
1830 // At that time, the TPC-only primary vertex was not considered
1831
1832
1833 lMagneticField = lESDevent->GetMagneticField( );
1834 // FIXME if(TMath::Abs(lMagneticField ) < 10e-6) continue;
1835
1836 }// end if(ESD)
1837
1838 if(fAnalysisType == "AOD"){
1839 // To be developed
1840 const AliAODVertex *lPrimaryBestAODVtx = lAODevent->GetPrimaryVertex();
1841 // get the best primary vertex available for the event
1842 // We may keep the one which is the best one available = GetVertex(0)
1843 // Pb with pile-up to expect
1844 // This one will be used for next calculations (DCA essentially)
1845 lPrimaryBestAODVtx->GetXYZ( lBestPrimaryVtxPos );
1846
1847 lStatusTrackingPrimVtx = -1;
1848 lTrkgPrimaryVtxPos[0] = -100.0;
1849 lTrkgPrimaryVtxPos[1] = -100.0;
1850 lTrkgPrimaryVtxPos[2] = -100.0;
1851 lMagneticField = 0.;
1852 }
45ee0bcc 1853
9d670198 1854
1855 // - I.Step 2 : Filling histos that characterize the selected event : x,y,z prim. Vtx distrib. (ESD)
1856 //-------------
1857
1858 fHistCascadeMultiplicityForSelEvt ->Fill( ncascades );
1859 fHistPosBestPrimaryVtxXForSelEvt ->Fill( lBestPrimaryVtxPos[0] );
1860 fHistPosBestPrimaryVtxYForSelEvt ->Fill( lBestPrimaryVtxPos[1] );
1861 fHistPosBestPrimaryVtxZForSelEvt ->Fill( lBestPrimaryVtxPos[2] );
1862
7e504402 1863
45ee0bcc 1864
32599cd4 1865 // ---------------------------------------------------------------
1866 // II - Calcultaion Part dedicated to Xi vertices
1867
45ee0bcc 1868 for (Int_t iXi = 0; iXi < ncascades; iXi++)
1869 {// This is the begining of the Cascade loop (ESD or AOD)
1870
32599cd4 1871 // -------------------------------------
1872 // II.Init - Initialisation of the local variables that will be needed for ESD/AOD
1873
1874
7e504402 1875 // - 0th part of initialisation : around primary vertex ...
32599cd4 1876
9d670198 1877 Double_t lTrkgPrimaryVtxRadius3D = -500.0;
32599cd4 1878 Double_t lBestPrimaryVtxRadius3D = -500.0;
1879
7e504402 1880 // - 1st part of initialisation : variables needed to store AliESDCascade data members
32599cd4 1881 Double_t lEffMassXi = 0. ;
9d670198 1882 Double_t lChi2Xi = -1. ;
1883 Double_t lDcaXiDaughters = -1. ;
1884 Double_t lXiCosineOfPointingAngle = -1. ;
32599cd4 1885 Double_t lPosXi[3] = { -1000.0, -1000.0, -1000.0 };
c525f360 1886 Double_t lXiRadius2D = -1000. ;
1887 Double_t lXiRadius3D = -1000. ;
7e504402 1888
1889 // - 2nd part of initialisation : Nbr of clusters within TPC for the 3 daughter cascade tracks
1890 Int_t lPosTPCClusters = -1; // For ESD only ...//FIXME : wait for availability in AOD
1891 Int_t lNegTPCClusters = -1; // For ESD only ...
1892 Int_t lBachTPCClusters = -1; // For ESD only ...
e8fd19de 1893
1894 Double_t lInnerWallMomCascDghters[3] = {-100., -100., -100.};
1895 Double_t lTPCSignalCascDghters [3] = {-100., -100., -100.};
1896
1897
7e504402 1898 // - 3rd part of initialisation : about V0 part in cascades
32599cd4 1899 Double_t lInvMassLambdaAsCascDghter = 0.;
9d670198 1900 Double_t lV0Chi2Xi = -1. ;
1901 Double_t lDcaV0DaughtersXi = -1.;
32599cd4 1902
9d670198 1903 Double_t lDcaBachToPrimVertexXi = -1., lDcaV0ToPrimVertexXi = -1.;
1904 Double_t lDcaPosToPrimVertexXi = -1.;
1905 Double_t lDcaNegToPrimVertexXi = -1.;
1906 Double_t lV0CosineOfPointingAngleXi = -1. ;
32599cd4 1907 Double_t lPosV0Xi[3] = { -1000. , -1000., -1000. }; // Position of VO coming from cascade
1908 Double_t lV0RadiusXi = -1000.0;
1909 Double_t lV0quality = 0.;
1910
1911
7e504402 1912 // - 4th part of initialisation : Effective masses
32599cd4 1913 Double_t lInvMassXiMinus = 0.;
1914 Double_t lInvMassXiPlus = 0.;
1915 Double_t lInvMassOmegaMinus = 0.;
1916 Double_t lInvMassOmegaPlus = 0.;
1917
7e504402 1918 // - 5th part of initialisation : PID treatment
32599cd4 1919 Bool_t lIsPosInXiProton = kFALSE;
1920 Bool_t lIsPosInXiPion = kFALSE;
1921 Bool_t lIsPosInOmegaProton = kFALSE;
1922 Bool_t lIsPosInOmegaPion = kFALSE;
1923
1924 Bool_t lIsNegInXiProton = kFALSE;
1925 Bool_t lIsNegInXiPion = kFALSE;
1926 Bool_t lIsNegInOmegaProton = kFALSE;
1927 Bool_t lIsNegInOmegaPion = kFALSE;
1928
1929 Bool_t lIsBachelorKaon = kFALSE;
1930 Bool_t lIsBachelorPion = kFALSE;
1931
1932 Bool_t lIsBachelorKaonForTPC = kFALSE; // For ESD only ...//FIXME : wait for availability in AOD
1933 Bool_t lIsBachelorPionForTPC = kFALSE; // For ESD only ...
1934 Bool_t lIsNegPionForTPC = kFALSE; // For ESD only ...
1935 Bool_t lIsPosPionForTPC = kFALSE; // For ESD only ...
1936 Bool_t lIsNegProtonForTPC = kFALSE; // For ESD only ...
1937 Bool_t lIsPosProtonForTPC = kFALSE; // For ESD only ...
1938
7e504402 1939 // - 6th part of initialisation : extra info for QA
1940 Double_t lXiMomX = 0. , lXiMomY = 0., lXiMomZ = 0.;
32599cd4 1941 Double_t lXiTransvMom = 0. ;
1942 Double_t lXiTotMom = 0. ;
1943
1944 Double_t lBachMomX = 0., lBachMomY = 0., lBachMomZ = 0.;
1945 Double_t lBachTransvMom = 0.;
1946 Double_t lBachTotMom = 0.;
1947
1948 Short_t lChargeXi = -2;
1949 Double_t lV0toXiCosineOfPointingAngle = 0. ;
1950
1951 Double_t lRapXi = -20.0, lRapOmega = -20.0, lEta = -20.0, lTheta = 360., lPhi = 720. ;
1952 Double_t lAlphaXi = -200., lPtArmXi = -200.0;
1953
7e504402 1954 // - 7th part of initialisation : variables for the AliCFContainer dedicated to cascade cut optmisiation
a786bd57 1955 // Int_t lSPDTrackletsMultiplicity = -1; // now provided by AliESDEvent::EstimateMultiplicity ...
32599cd4 1956
7e504402 1957 // - 8th part of initialisation : variables needed for Angular correlations
32599cd4 1958 TVector3 lTVect3MomXi(0.,0.,0.);
1959 Int_t lArrTrackID[3] = {-1, -1, -1};
1960
45ee0bcc 1961
1962 if(fAnalysisType == "ESD"){
1963
1964 // -------------------------------------
32599cd4 1965 // II.ESD - Calcultaion Part dedicated to Xi vertices (ESD)
45ee0bcc 1966
1967 AliESDcascade *xi = lESDevent->GetCascade(iXi);
1968 if (!xi) continue;
e8fd19de 1969
9d670198 1970
1971 // - II.Step 1 : around primary vertex
1972 //-------------
1973 lTrkgPrimaryVtxRadius3D = TMath::Sqrt( lTrkgPrimaryVtxPos[0] * lTrkgPrimaryVtxPos[0] +
1974 lTrkgPrimaryVtxPos[1] * lTrkgPrimaryVtxPos[1] +
1975 lTrkgPrimaryVtxPos[2] * lTrkgPrimaryVtxPos[2] );
45ee0bcc 1976
9d670198 1977 lBestPrimaryVtxRadius3D = TMath::Sqrt( lBestPrimaryVtxPos[0] * lBestPrimaryVtxPos[0] +
1978 lBestPrimaryVtxPos[1] * lBestPrimaryVtxPos[1] +
1979 lBestPrimaryVtxPos[2] * lBestPrimaryVtxPos[2] );
45ee0bcc 1980
1981
45ee0bcc 1982
1983 // - II.Step 2 : Assigning the necessary variables for specific AliESDcascade data members (ESD)
1984 //-------------
1985 lV0quality = 0.;
1986 xi->ChangeMassHypothesis(lV0quality , 3312); // default working hypothesis : cascade = Xi- decay
1987
1988 lEffMassXi = xi->GetEffMassXi();
1989 lChi2Xi = xi->GetChi2Xi();
1990 lDcaXiDaughters = xi->GetDcaXiDaughters();
1991 lXiCosineOfPointingAngle = xi->GetCascadeCosineOfPointingAngle( lBestPrimaryVtxPos[0],
9d670198 1992 lBestPrimaryVtxPos[1],
1993 lBestPrimaryVtxPos[2] );
45ee0bcc 1994 // Take care : the best available vertex should be used (like in AliCascadeVertexer)
1995
1996 xi->GetXYZcascade( lPosXi[0], lPosXi[1], lPosXi[2] );
c525f360 1997 lXiRadius2D = TMath::Sqrt( lPosXi[0]*lPosXi[0] + lPosXi[1]*lPosXi[1] );
1998 lXiRadius3D = TMath::Sqrt( lPosXi[0]*lPosXi[0] + lPosXi[1]*lPosXi[1] + lPosXi[2]*lPosXi[2]);
45ee0bcc 1999
2000
2001
2002 // - II.Step 3 : around the tracks : Bach + V0 (ESD)
2003 // ~ Necessary variables for ESDcascade data members coming from the ESDv0 part (inheritance)
2004 //-------------
2005
7e504402 2006 UInt_t lIdxPosXi = (UInt_t) TMath::Abs( xi->GetPindex() );
2007 UInt_t lIdxNegXi = (UInt_t) TMath::Abs( xi->GetNindex() );
2008 UInt_t lBachIdx = (UInt_t) TMath::Abs( xi->GetBindex() );
2009 // Care track label can be negative in MC production (linked with the track quality)
2010 // However = normally, not the case for track index ...
2011
2012 // FIXME : rejection of a double use of a daughter track (nothing but just a crosscheck of what is done in the cascade vertexer)
2013 if(lBachIdx == lIdxNegXi) {
2014 AliWarning("Pb / Idx(Bach. track) = Idx(Neg. track) ... continue!"); continue;
2015 }
2016 if(lBachIdx == lIdxPosXi) {
2017 AliWarning("Pb / Idx(Bach. track) = Idx(Pos. track) ... continue!"); continue;
2018 }
2019
45ee0bcc 2020 AliESDtrack *pTrackXi = lESDevent->GetTrack( lIdxPosXi );
2021 AliESDtrack *nTrackXi = lESDevent->GetTrack( lIdxNegXi );
2022 AliESDtrack *bachTrackXi = lESDevent->GetTrack( lBachIdx );
7e504402 2023 if (!pTrackXi || !nTrackXi || !bachTrackXi ) {
2024 AliWarning("ERROR: Could not retrieve one of the 3 ESD daughter tracks of the cascade ...");
2025 continue;
2026 }
e8fd19de 2027
2028
7e504402 2029 lPosTPCClusters = pTrackXi->GetTPCNcls();
2030 lNegTPCClusters = nTrackXi->GetTPCNcls();
e8fd19de 2031 lBachTPCClusters = bachTrackXi->GetTPCNcls();
2032
7e504402 2033 // FIXME : rejection of a poor quality tracks
9d670198 2034 if(fkQualityCutTPCrefit){
7e504402 2035 // 1 - Poor quality related to TPCrefit
2036 ULong_t pStatus = pTrackXi->GetStatus();
2037 ULong_t nStatus = nTrackXi->GetStatus();
2038 ULong_t bachStatus = bachTrackXi->GetStatus();
2039 if ((pStatus&AliESDtrack::kTPCrefit) == 0) { AliWarning("Pb / V0 Pos. track has no TPCrefit ... continue!"); continue; }
2040 if ((nStatus&AliESDtrack::kTPCrefit) == 0) { AliWarning("Pb / V0 Neg. track has no TPCrefit ... continue!"); continue; }
2041 if ((bachStatus&AliESDtrack::kTPCrefit) == 0) { AliWarning("Pb / Bach. track has no TPCrefit ... continue!"); continue; }
2042 }
9d670198 2043 if(fkQualityCut80TPCcls){
7e504402 2044 // 2 - Poor quality related to TPC clusters
2045 if(lPosTPCClusters < 80) { AliWarning("Pb / V0 Pos. track has less than 80 TPC clusters ... continue!"); continue; }
2046 if(lNegTPCClusters < 80) { AliWarning("Pb / V0 Neg. track has less than 80 TPC clusters ... continue!"); continue; }
2047 if(lBachTPCClusters < 80) { AliWarning("Pb / Bach. track has less than 80 TPC clusters ... continue!"); continue; }
2048 }
e8fd19de 2049
2050 const AliExternalTrackParam *pExtTrack = pTrackXi ->GetInnerParam();
2051 const AliExternalTrackParam *nExtTrack = nTrackXi ->GetInnerParam();
2052 const AliExternalTrackParam *bachExtTrack = bachTrackXi ->GetInnerParam();
2053
2054 if (pExtTrack) {
2055 lInnerWallMomCascDghters[0] = pExtTrack ->GetP() * pExtTrack ->Charge();
2056 lTPCSignalCascDghters [0] = pTrackXi ->GetTPCsignal();
2057 }
2058 if (nExtTrack) {
2059 lInnerWallMomCascDghters[1] = nExtTrack ->GetP() * nExtTrack ->Charge();
2060 lTPCSignalCascDghters [1] = nTrackXi ->GetTPCsignal();
2061 }
2062 if (bachExtTrack) {
2063 lInnerWallMomCascDghters[2] = bachExtTrack ->GetP() * bachExtTrack ->Charge();
2064 lTPCSignalCascDghters [2] = bachTrackXi ->GetTPCsignal();
2065 }
2066
7e504402 2067
45ee0bcc 2068 lInvMassLambdaAsCascDghter = xi->GetEffMass();
2069 // This value shouldn't change, whatever the working hyp. is : Xi-, Xi+, Omega-, Omega+
2070 lDcaV0DaughtersXi = xi->GetDcaV0Daughters();
2071 lV0Chi2Xi = xi->GetChi2V0();
2072
2073 lV0CosineOfPointingAngleXi = xi->GetV0CosineOfPointingAngle( lBestPrimaryVtxPos[0],
2074 lBestPrimaryVtxPos[1],
2075 lBestPrimaryVtxPos[2] );
2076
2077 lDcaV0ToPrimVertexXi = xi->GetD( lBestPrimaryVtxPos[0],
2078 lBestPrimaryVtxPos[1],
2079 lBestPrimaryVtxPos[2] );
2080
2081 lDcaBachToPrimVertexXi = TMath::Abs( bachTrackXi->GetD( lBestPrimaryVtxPos[0],
2082 lBestPrimaryVtxPos[1],
2083 lMagneticField ) );
2084 // Note : AliExternalTrackParam::GetD returns an algebraic value ...
2085
2086 xi->GetXYZ( lPosV0Xi[0], lPosV0Xi[1], lPosV0Xi[2] );
2087 lV0RadiusXi = TMath::Sqrt( lPosV0Xi[0]*lPosV0Xi[0] + lPosV0Xi[1]*lPosV0Xi[1] );
2088
2089 lDcaPosToPrimVertexXi = TMath::Abs( pTrackXi ->GetD( lBestPrimaryVtxPos[0],
2090 lBestPrimaryVtxPos[1],
2091 lMagneticField ) );
2092
2093 lDcaNegToPrimVertexXi = TMath::Abs( nTrackXi ->GetD( lBestPrimaryVtxPos[0],
2094 lBestPrimaryVtxPos[1],
2095 lMagneticField ) );
7e504402 2096
32599cd4 2097 // - II.Step 3' : extra-selection for cascade candidates
2098 // Towards optimisation of AA selection
7e504402 2099 // FIXME
9d670198 2100 if(fkExtraSelections){
32599cd4 2101 // if(lChi2Xi > 2000) continue;
2102 // if(lV0Chi2Xi > 2000) continue;
2103
2104 if(lDcaXiDaughters > 0.05) continue; // > 0.1 by default
2105 //if(lXiCosineOfPointingAngle < 0.999 ) continue;
c525f360 2106 if(lXiRadius2D < 1.0) continue;
2107 if(lXiRadius2D > 100) continue;
2108 if(TMath::Abs(lInvMassLambdaAsCascDghter-1.11568) > 0.008) continue;
32599cd4 2109 if(lDcaV0DaughtersXi > 0.3) continue;
2110
2111 if(lV0CosineOfPointingAngleXi > 0.9999) continue;
2112 //if(lDcaV0ToPrimVertexXi < 0.09) continue;
2113 if(lDcaBachToPrimVertexXi < 0.04) continue;
2114
2115 if(lV0RadiusXi < 1.0) continue;
2116 if(lV0RadiusXi > 100) continue;
2117 //if(lDcaPosToPrimVertexXi < 0.6) continue;
2118 //if(lDcaNegToPrimVertexXi < 0.6) continue;
2119 }
2120
2121
2122
45ee0bcc 2123 // - II.Step 4 : around effective masses (ESD)
2124 // ~ change mass hypotheses to cover all the possibilities : Xi-/+, Omega -/+
2125 //-------------
2126
2dd4214d 2127
2dd4214d 2128 if( bachTrackXi->Charge() < 0 ) {
2129 lV0quality = 0.;
2130 xi->ChangeMassHypothesis(lV0quality , 3312);
2131 // Calculate the effective mass of the Xi- candidate.
2132 // pdg code 3312 = Xi-
2133 lInvMassXiMinus = xi->GetEffMassXi();
45ee0bcc 2134
2dd4214d 2135 lV0quality = 0.;
2136 xi->ChangeMassHypothesis(lV0quality , 3334);
2137 // Calculate the effective mass of the Xi- candidate.
2138 // pdg code 3334 = Omega-
2139 lInvMassOmegaMinus = xi->GetEffMassXi();
2140
2141 lV0quality = 0.;
2142 xi->ChangeMassHypothesis(lV0quality , 3312); // Back to default hyp.
f87cd3db 2143 }// end if negative bachelor
2144
2dd4214d 2145
2146 if( bachTrackXi->Charge() > 0 ){
2147 lV0quality = 0.;
2148 xi->ChangeMassHypothesis(lV0quality , -3312);
2149 // Calculate the effective mass of the Xi+ candidate.
2150 // pdg code -3312 = Xi+
2151 lInvMassXiPlus = xi->GetEffMassXi();
2152
2153 lV0quality = 0.;
2154 xi->ChangeMassHypothesis(lV0quality , -3334);
2155 // Calculate the effective mass of the Xi+ candidate.
2156 // pdg code -3334 = Omega+
2157 lInvMassOmegaPlus = xi->GetEffMassXi();
2158
2159 lV0quality = 0.;
2160 xi->ChangeMassHypothesis(lV0quality , -3312); // Back to "default" hyp.
f87cd3db 2161 }// end if positive bachelor
2162
2163
2164
32599cd4 2165 // - II.Step 5 : PID on the daughter tracks
f87cd3db 2166 //-------------
2167
32599cd4 2168 // A - Combined PID
a786bd57 2169 // Reasonable guess for the priors for the cascade track sample (e-, mu, pi, K, p)
7475515f 2170 Double_t lPriorsGuessXi [AliPID::kSPECIESCN] = {0, 0, 2, 0, 1, 0,0,0,0};
2171 Double_t lPriorsGuessOmega[AliPID::kSPECIESCN] = {0, 0, 1, 1, 1, 0,0,0,0};
2172 // Trick Jan, 15th, 2013 : Coverity fix - defect 11329
2173 // If the boolean for charged option is activated in AliPID::SetPriors, only the first 9 double_t in the array are read anyway.
2174 // But Coverity sniffs an issue (a priori safe but the logic is a bit twisted; Coverity is not totally wrong).
2175 // Use AliPID::kSPECIESCN (=14) is size of the array + initialise what I am interested in (charged particle = 9 first particles)
2176 // The rest of the table will be initialised to 0 anyway.
2177
3aedd4a5 2178
32599cd4 2179 // Combined VO-positive-daughter PID
a786bd57 2180 AliPID pPidXi; pPidXi.SetPriors( lPriorsGuessXi , kTRUE); // kTRUE = for charged particle PID
2181 AliPID pPidOmega; pPidOmega.SetPriors( lPriorsGuessOmega , kTRUE); // kTRUE = for charged particle PID
3aedd4a5 2182
2183 if( pTrackXi->IsOn(AliESDtrack::kESDpid) ){ // Combined PID exists
2184 Double_t r[10] = {0.}; pTrackXi->GetESDpid(r);
2185 pPidXi.SetProbabilities(r);
2186 pPidOmega.SetProbabilities(r);
32599cd4 2187
3aedd4a5 2188 // Check if the V0 positive track is a proton (case for Xi-)
2189 Double_t pproton = pPidXi.GetProbability(AliPID::kProton);
2190 if (pproton > pPidXi.GetProbability(AliPID::kElectron) &&
2191 pproton > pPidXi.GetProbability(AliPID::kMuon) &&
2192 pproton > pPidXi.GetProbability(AliPID::kPion) &&
2193 pproton > pPidXi.GetProbability(AliPID::kKaon) ) lIsPosInXiProton = kTRUE;
32599cd4 2194
2195 // Check if the V0 positive track is a pi+ (case for Xi+)
2196 Double_t ppion = pPidXi.GetProbability(AliPID::kPion);
2197 if (ppion > pPidXi.GetProbability(AliPID::kElectron) &&
2198 ppion > pPidXi.GetProbability(AliPID::kMuon) &&
2199 ppion > pPidXi.GetProbability(AliPID::kKaon) &&
2200 ppion > pPidXi.GetProbability(AliPID::kProton) ) lIsPosInXiPion = kTRUE;
2201
2202
3aedd4a5 2203 // Check if the V0 positive track is a proton (case for Omega-)
2204 pproton = 0.;
32599cd4 2205 pproton = pPidOmega.GetProbability(AliPID::kProton);
3aedd4a5 2206 if (pproton > pPidOmega.GetProbability(AliPID::kElectron) &&
2207 pproton > pPidOmega.GetProbability(AliPID::kMuon) &&
2208 pproton > pPidOmega.GetProbability(AliPID::kPion) &&
2209 pproton > pPidOmega.GetProbability(AliPID::kKaon) ) lIsPosInOmegaProton = kTRUE;
32599cd4 2210
2211 // Check if the V0 positive track is a pi+ (case for Omega+)
2212 ppion = 0.;
2213 ppion = pPidOmega.GetProbability(AliPID::kPion);
2214 if (ppion > pPidOmega.GetProbability(AliPID::kElectron) &&
2215 ppion > pPidOmega.GetProbability(AliPID::kMuon) &&
2216 ppion > pPidOmega.GetProbability(AliPID::kKaon) &&
2217 ppion > pPidOmega.GetProbability(AliPID::kProton) ) lIsPosInOmegaPion = kTRUE;
2218
3aedd4a5 2219 }// end if V0 positive track with existing combined PID
2220
32599cd4 2221
2222 // Combined VO-negative-daughter PID
a786bd57 2223 AliPID nPidXi; nPidXi.SetPriors( lPriorsGuessXi , kTRUE); // kTRUE = for charged particle PID
2224 AliPID nPidOmega; nPidOmega.SetPriors( lPriorsGuessOmega , kTRUE); // kTRUE = for charged particle PID
3aedd4a5 2225
2226 if( nTrackXi->IsOn(AliESDtrack::kESDpid) ){ // Combined PID exists
2227 Double_t r[10] = {0.}; nTrackXi->GetESDpid(r);
2228 nPidXi.SetProbabilities(r);
2229 nPidOmega.SetProbabilities(r);
32599cd4 2230
2231 // Check if the V0 negative track is a pi- (case for Xi-)
2232 Double_t ppion = nPidXi.GetProbability(AliPID::kPion);
2233 if (ppion > nPidXi.GetProbability(AliPID::kElectron) &&
2234 ppion > nPidXi.GetProbability(AliPID::kMuon) &&
2235 ppion > nPidXi.GetProbability(AliPID::kKaon) &&
2236 ppion > nPidXi.GetProbability(AliPID::kProton) ) lIsNegInXiPion = kTRUE;
2237
3aedd4a5 2238 // Check if the V0 negative track is an anti-proton (case for Xi+)
2239 Double_t pproton = nPidXi.GetProbability(AliPID::kProton);
2240 if (pproton > nPidXi.GetProbability(AliPID::kElectron) &&
2241 pproton > nPidXi.GetProbability(AliPID::kMuon) &&
2242 pproton > nPidXi.GetProbability(AliPID::kPion) &&
2243 pproton > nPidXi.GetProbability(AliPID::kKaon) ) lIsNegInXiProton = kTRUE;
32599cd4 2244
2245 // Check if the V0 negative track is a pi- (case for Omega-)
2246 ppion = 0.;
2247 ppion = nPidOmega.GetProbability(AliPID::kPion);
2248 if (ppion > nPidOmega.GetProbability(AliPID::kElectron) &&
2249 ppion > nPidOmega.GetProbability(AliPID::kMuon) &&
2250 ppion > nPidOmega.GetProbability(AliPID::kKaon) &&
2251 ppion > nPidOmega.GetProbability(AliPID::kProton) ) lIsNegInOmegaPion = kTRUE;
2252
3aedd4a5 2253 // Check if the V0 negative track is an anti-proton (case for Omega+)
2254 pproton = 0.;
2255 pproton = nPidOmega.GetProbability(AliPID::kProton);
2256 if (pproton > nPidOmega.GetProbability(AliPID::kElectron) &&
2257 pproton > nPidOmega.GetProbability(AliPID::kMuon) &&
2258 pproton > nPidOmega.GetProbability(AliPID::kPion) &&
2259 pproton > nPidOmega.GetProbability(AliPID::kKaon) ) lIsNegInOmegaProton = kTRUE;
32599cd4 2260
3aedd4a5 2261 }// end if V0 negative track with existing combined PID
2262
2263
32599cd4 2264 // Combined bachelor PID
a786bd57 2265 AliPID bachPidXi; bachPidXi.SetPriors( lPriorsGuessXi , kTRUE ); // kTRUE = for charged particle PID
2266 AliPID bachPidOmega; bachPidOmega.SetPriors( lPriorsGuessOmega, kTRUE ); // kTRUE = for charged particle PID
f87cd3db 2267
2268 if( bachTrackXi->IsOn(AliESDtrack::kESDpid) ){ // Combined PID exists
3aedd4a5 2269 Double_t r[10] = {0.}; bachTrackXi->GetESDpid(r);
2270 bachPidXi.SetProbabilities(r);
2271 bachPidOmega.SetProbabilities(r);
f87cd3db 2272 // Check if the bachelor track is a pion
3aedd4a5 2273 Double_t ppion = bachPidXi.GetProbability(AliPID::kPion);
2274 if (ppion > bachPidXi.GetProbability(AliPID::kElectron) &&
2275 ppion > bachPidXi.GetProbability(AliPID::kMuon) &&
2276 ppion > bachPidXi.GetProbability(AliPID::kKaon) &&
2277 ppion > bachPidXi.GetProbability(AliPID::kProton) ) lIsBachelorPion = kTRUE;
f87cd3db 2278 // Check if the bachelor track is a kaon
3aedd4a5 2279 Double_t pkaon = bachPidOmega.GetProbability(AliPID::kKaon);
2280 if (pkaon > bachPidOmega.GetProbability(AliPID::kElectron) &&
2281 pkaon > bachPidOmega.GetProbability(AliPID::kMuon) &&
2282 pkaon > bachPidOmega.GetProbability(AliPID::kPion) &&
2283 pkaon > bachPidOmega.GetProbability(AliPID::kProton) ) lIsBachelorKaon = kTRUE;
f87cd3db 2284 }// end if bachelor track with existing combined PID
2dd4214d 2285
3aedd4a5 2286
32599cd4 2287 // B - TPC PID : 3-sigma bands on Bethe-Bloch curve
32599cd4 2288
e8fd19de 2289 // Bachelor
2290 if (TMath::Abs(fESDpid->NumberOfSigmasTPC( bachTrackXi,AliPID::kKaon)) < 4) lIsBachelorKaonForTPC = kTRUE;
2291 if (TMath::Abs(fESDpid->NumberOfSigmasTPC( bachTrackXi,AliPID::kPion)) < 4) lIsBachelorPionForTPC = kTRUE;
2292
2293 // Negative V0 daughter
2294 if (TMath::Abs(fESDpid->NumberOfSigmasTPC( nTrackXi,AliPID::kPion )) < 4) lIsNegPionForTPC = kTRUE;
2295 if (TMath::Abs(fESDpid->NumberOfSigmasTPC( nTrackXi,AliPID::kProton )) < 4) lIsNegProtonForTPC = kTRUE;
2296
2297 // Positive V0 daughter
2298 if (TMath::Abs(fESDpid->NumberOfSigmasTPC( pTrackXi,AliPID::kPion )) < 4) lIsPosPionForTPC = kTRUE;
2299 if (TMath::Abs(fESDpid->NumberOfSigmasTPC( pTrackXi,AliPID::kProton )) < 4) lIsPosProtonForTPC = kTRUE;
2300
2301 /*
2302 const AliExternalTrackParam *pInnerWallTrackXi = pTrackXi ->GetInnerParam();
2303 const AliExternalTrackParam *nInnerWallTrackXi = nTrackXi ->GetInnerParam();
2304 const AliExternalTrackParam *bachInnerWallTrackXi = bachTrackXi ->GetInnerParam();
2305 if(pInnerWallTrackXi && nInnerWallTrackXi && bachInnerWallTrackXi ){
2306
2307 Double_t pMomInnerWall = pInnerWallTrackXi ->GetP();
2308 Double_t nMomInnerWall = nInnerWallTrackXi ->GetP();
2309 Double_t bachMomInnerWall = bachInnerWallTrackXi->GetP();
2310
2311 // Bachelor
2312 if (TMath::Abs(fESDpid->NumberOfSigmasTPC( bachTrackXi,AliPID::kPion)) < 3) lIsBachelorPionForTPC = kTRUE;
2313 if (bachMomInnerWall < 0.350 && TMath::Abs(fESDpid->NumberOfSigmasTPC( bachTrackXi,AliPID::kKaon)) < 5) lIsBachelorKaonForTPC = kTRUE;
2314 if (bachMomInnerWall > 0.350 && TMath::Abs(fESDpid->NumberOfSigmasTPC( bachTrackXi,AliPID::kKaon)) < 3) lIsBachelorKaonForTPC = kTRUE;
2315
2316 // Negative V0 daughter
2317 if (TMath::Abs(fESDpid->NumberOfSigmasTPC( nTrackXi,AliPID::kPion )) < 3 ) lIsNegPionForTPC = kTRUE;
2318 if (nMomInnerWall < 0.6 && TMath::Abs(fESDpid->NumberOfSigmasTPC( nTrackXi,AliPID::kProton ) ) < 5 ) lIsNegProtonForTPC = kTRUE;
2319 if (nMomInnerWall > 0.6 && TMath::Abs(fESDpid->NumberOfSigmasTPC( nTrackXi,AliPID::kProton ) ) < 3 ) lIsNegProtonForTPC = kTRUE;
2320
2321 // Positive V0 daughter
2322 if (TMath::Abs(fESDpid->NumberOfSigmasTPC( pTrackXi,AliPID::kPion )) < 3 ) lIsPosPionForTPC = kTRUE;
2323 if (pMomInnerWall < 0.6 && TMath::Abs(fESDpid->NumberOfSigmasTPC( pTrackXi,AliPID::kProton )) < 5) lIsPosProtonForTPC = kTRUE;
2324 if (pMomInnerWall > 0.6 && TMath::Abs(fESDpid->NumberOfSigmasTPC( pTrackXi,AliPID::kProton )) < 3) lIsPosProtonForTPC = kTRUE;
2325 }
2326 */
2327
2328
2329
f87cd3db 2330
2331 // - II.Step 6 : extra info for QA (ESD)
3873f6ee 2332 // miscellaneous pieces of info that may help regarding data quality assessment.
45ee0bcc 2333 //-------------
2334
2335 xi->GetPxPyPz( lXiMomX, lXiMomY, lXiMomZ );
2336 lXiTransvMom = TMath::Sqrt( lXiMomX*lXiMomX + lXiMomY*lXiMomY );
2337 lXiTotMom = TMath::Sqrt( lXiMomX*lXiMomX + lXiMomY*lXiMomY + lXiMomZ*lXiMomZ );
2338
2339 xi->GetBPxPyPz( lBachMomX, lBachMomY, lBachMomZ );
2340 lBachTransvMom = TMath::Sqrt( lBachMomX*lBachMomX + lBachMomY*lBachMomY );
2341 lBachTotMom = TMath::Sqrt( lBachMomX*lBachMomX + lBachMomY*lBachMomY + lBachMomZ*lBachMomZ );
2342
2343 lChargeXi = xi->Charge();
2344
2345 lV0toXiCosineOfPointingAngle = xi->GetV0CosineOfPointingAngle( lPosXi[0], lPosXi[1], lPosXi[2] );
2346
2347 lRapXi = xi->RapXi();
2348 lRapOmega = xi->RapOmega();
2349 lEta = xi->Eta();
2350 lTheta = xi->Theta() *180.0/TMath::Pi();
2351 lPhi = xi->Phi() *180.0/TMath::Pi();
2352 lAlphaXi = xi->AlphaXi();
2353 lPtArmXi = xi->PtArmXi();
2354
2355
f3dc9369 2356 //FIXME : Extra-cut = Anti-splitting cut for lambda daughters
7e504402 2357 Bool_t kAntiSplittingLambda = kFALSE;
f3dc9369 2358
2359 if(kAntiSplittingLambda){
2360 Double_t lNMomX = 0., lNMomY = 0., lNMomZ = 0.;
2361 Double_t lPMomX = 0., lPMomY = 0., lPMomZ = 0.;
2362
2363 xi->GetPPxPyPz(lPMomX, lPMomY, lPMomZ);
2364 xi->GetNPxPyPz(lNMomX, lNMomY, lNMomZ);
2365
2366 if( xi->Charge() < 0){// Xi- or Omega-
7e504402 2367 if(TMath::Abs(lBachTransvMom - TMath::Sqrt( lNMomX*lNMomX + lNMomY*lNMomY ) ) < 0.075) continue;
f3dc9369 2368 }
2369 else { //Xi+ or Omega+
7e504402 2370 if(TMath::Abs(lBachTransvMom - TMath::Sqrt( lPMomX*lPMomX + lPMomY*lPMomY ) ) < 0.075) continue;
f3dc9369 2371 }
2372 }
2373
e8fd19de 2374 //FIXME : Just to know which file is currently open : locate the file containing Xi
2375 // cout << "Name of the file containing Xi candidate(s) :"
2376 // << CurrentFileName()
2377 // << " / entry: " << Entry()
2378 // << " / in file: " << lESDevent->GetEventNumberInFile() // <- Cvetan / From Mihaela: AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()->GetTree()->GetReadEntry();
2379 // << " : mass(Xi) = " << xi->GetEffMassXi()
2380 // << " / charge = " << lChargeXi
2381 // << " / pt(Casc) = " << lXiTransvMom
c525f360 2382 // << " / Decay 2d R(Xi) = " << lXiRadius2D
e8fd19de 2383 // << " / Track Index(Pos) = " << lIdxPosXi << "/ Nb(TPC clusters) = " << lPosTPCClusters
2384 // << " / Track Index(Neg) = " << lIdxNegXi << "/ Nb(TPC clusters) = " << lNegTPCClusters
2385 // << " / Track Index(Bach) = " << lBachIdx << "/ Nb(TPC clusters) = " << lBachTPCClusters
2386 // << endl;
90926f02 2387
32599cd4 2388
2389 // II.Step 7 - Complementary info for monitoring the cascade cut variables
2390
a786bd57 2391 //const AliMultiplicity *lAliMult = lESDevent->GetMultiplicity();
2392 //lSPDTrackletsMultiplicity = lAliMult->GetNumberOfTracklets();
2393 // --> now provided by AliESDEvent::EstimateMultiplicity ...
32599cd4 2394
2395 // II.Step 8 - Azimuthal correlation study
3873f6ee 2396 //-------------
2397
2398 lTVect3MomXi.SetXYZ( lXiMomX, lXiMomY, lXiMomZ );
2399 lArrTrackID[0] = pTrackXi ->GetID();
2400 lArrTrackID[1] = nTrackXi ->GetID();
2401 lArrTrackID[2] = bachTrackXi->GetID();
2402
2403
45ee0bcc 2404 }// end of ESD treatment
2405
2406
2407 if(fAnalysisType == "AOD"){
2408
2409 // -------------------------------------
32599cd4 2410 // II.AOD - Calcultaion Part dedicated to Xi vertices (ESD)
45ee0bcc 2411
2412 const AliAODcascade *xi = lAODevent->GetCascade(iXi);
2413 if (!xi) continue;
2414
2415 // Just to know which file is currently open : locate the file containing Xi
2416 // cout << "Name of the file containing Xi candidate(s) :" << fesdH->GetTree()->GetCurrentFile()->GetName() << endl;
2417
2418
2419 // - II.Step 1 : Characteristics of the event : prim. Vtx + magnetic field (AOD)
2420 //-------------
2421
45ee0bcc 2422
9d670198 2423 lTrkgPrimaryVtxRadius3D = -500. ;
2424 // FIXME : We don't have the different prim. vertex at the AOD level -> nothing to do.
45ee0bcc 2425
45ee0bcc 2426 lBestPrimaryVtxRadius3D = TMath::Sqrt( lBestPrimaryVtxPos[0] * lBestPrimaryVtxPos[0] +
2427 lBestPrimaryVtxPos[1] * lBestPrimaryVtxPos[1] +
2428 lBestPrimaryVtxPos[2] * lBestPrimaryVtxPos[2] );
2429
2430
2431 // - II.Step 2 : Assigning the necessary variables for specific AliAODcascade data members (AOD)
2432 //-------------
2433
2434 lEffMassXi = xi->MassXi(); // default working hypothesis : cascade = Xi- decay
2435 lChi2Xi = xi->Chi2Xi();
2436 lDcaXiDaughters = xi->DcaXiDaughters();
2437 lXiCosineOfPointingAngle = xi->CosPointingAngleXi( lBestPrimaryVtxPos[0],
2438 lBestPrimaryVtxPos[1],
2439 lBestPrimaryVtxPos[2] );
2440 // Take care :
2441 // the best available vertex should be used (like in AliCascadeVertexer)
2442
2443 lPosXi[0] = xi->DecayVertexXiX();
2444 lPosXi[1] = xi->DecayVertexXiY();
2445 lPosXi[2] = xi->DecayVertexXiZ();
c525f360 2446 lXiRadius2D = TMath::Sqrt( lPosXi[0]*lPosXi[0] + lPosXi[1]*lPosXi[1] );
2447 lXiRadius3D = TMath::Sqrt( lPosXi[0]*lPosXi[0] + lPosXi[1]*lPosXi[1] + lPosXi[2]*lPosXi[2] );
45ee0bcc 2448
2449
2450 // - II.Step 3 : around the tracks : Bach + V0 (AOD)
2451 // ~ Necessary variables for AODcascade data members coming from the AODv0 part (inheritance)
2452 //-------------
2453
2454 lChargeXi = xi->ChargeXi();
2455
2456 if( lChargeXi < 0)
2457 lInvMassLambdaAsCascDghter = xi->MassLambda();
2458 else
2459 lInvMassLambdaAsCascDghter = xi->MassAntiLambda();
2460
2461 lDcaV0DaughtersXi = xi->DcaV0Daughters();
2462 lV0Chi2Xi = xi->Chi2V0();
2463
2464 lV0CosineOfPointingAngleXi = xi->CosPointingAngle( lBestPrimaryVtxPos );
2465 lDcaV0ToPrimVertexXi = xi->DcaV0ToPrimVertex();
2466
2467 lDcaBachToPrimVertexXi = xi->DcaBachToPrimVertex();
2468
2469
2470 lPosV0Xi[0] = xi->DecayVertexV0X();
2471 lPosV0Xi[1] = xi->DecayVertexV0Y();
2472 lPosV0Xi[2] = xi->DecayVertexV0Z();
2473 lV0RadiusXi = TMath::Sqrt( lPosV0Xi[0]*lPosV0Xi[0] + lPosV0Xi[1]*lPosV0Xi[1] );
2474
2475 lDcaPosToPrimVertexXi = xi->DcaPosToPrimVertex();
2476 lDcaNegToPrimVertexXi = xi->DcaNegToPrimVertex();
2477
2478
2479 // - II.Step 4 : around effective masses (AOD)
2480 // ~ change mass hypotheses to cover all the possibilities : Xi-/+, Omega -/+
2481 //-------------
2482
2483 if( lChargeXi < 0 ) lInvMassXiMinus = xi->MassXi();
2484 if( lChargeXi > 0 ) lInvMassXiPlus = xi->MassXi();
2485 if( lChargeXi < 0 ) lInvMassOmegaMinus = xi->MassOmega();
2486 if( lChargeXi > 0 ) lInvMassOmegaPlus = xi->MassOmega();
2487
2488
32599cd4 2489 // - II.Step 5 : PID on the daughters (To be developed ...)
f87cd3db 2490 //-------------
2491
32599cd4 2492 // Combined PID
2493
3873f6ee 2494 /*
ff0753e1 2495 // Reasonable guess for the priors for the cascade track sample
a786bd57 2496 Double_t lPriorsGuessXi[5] = {0.0, 0.0, 2, 0, 1, 0,0,0,0,0};
2497 Double_t lPriorsGuessOmega[5] = {0.0, 0.0, 1, 1, 1, 0,0,0,0,0};
2498 AliPID bachPidXi; bachPidXi.SetPriors( lPriorsGuessXi , kTRUE); // kTRUE = for charged particle PID
2499 AliPID bachPidOmega; bachPidOmega.SetPriors( lPriorsGuessOmega , kTRUE); // kTRUE = for charged particle PID
ff0753e1 2500
3873f6ee 2501 const AliAODTrack *bachTrackXi = lAODevent->GetTrack( xi->GetBachID() ); // FIXME : GetBachID not implemented ?
ff0753e1 2502
2503 if( bachTrackXi->IsOn(AliESDtrack::kESDpid) ){ // Combined PID exists, the AOD flags = a copy of the ESD ones
2504 Double_t r[10]; bachTrackXi->GetPID(r);
3aedd4a5 2505 bachPidXi.SetProbabilities(r);
2506 bachPidOmega.SetProbabilities(r);
ff0753e1 2507 // Check if the bachelor track is a pion
3aedd4a5 2508 Double_t ppion = bachPidXi.GetProbability(AliPID::kPion);
2509 if (ppion > bachPidXi.GetProbability(AliPID::kElectron) &&
2510 ppion > bachPidXi.GetProbability(AliPID::kMuon) &&
2511 ppion > bachPidXi.GetProbability(AliPID::kKaon) &&
2512 ppion > bachPidXi.GetProbability(AliPID::kProton) ) lIsBachelorPion = kTRUE;
ff0753e1 2513 // Check if the bachelor track is a kaon
3aedd4a5 2514 Double_t pkaon = bachPidOmega.GetProbability(AliPID::kKaon);
2515 if (pkaon > bachPidOmega.GetProbability(AliPID::kElectron) &&
2516 pkaon > bachPidOmega.GetProbability(AliPID::kMuon) &&
2517 pkaon > bachPidOmega.GetProbability(AliPID::kPion) &&
2518 pkaon > bachPidOmega.GetProbability(AliPID::kProton) ) lIsBachelorKaon = kTRUE;
ff0753e1 2519
2520 }// end if bachelor track with existing combined PID
2521 */
f87cd3db 2522
32599cd4 2523 // TPC PID
f87cd3db 2524
2525 // - II.Step 6 : extra info for QA (AOD)
45ee0bcc 2526 // miscellaneous pieces onf info that may help regarding data quality assessment.
2527 //-------------
2528
2529 lXiMomX = xi->MomXiX();
2530 lXiMomY = xi->MomXiY();
2531 lXiMomZ = xi->MomXiZ();
2532 lXiTransvMom = TMath::Sqrt( lXiMomX*lXiMomX + lXiMomY*lXiMomY );
2533 lXiTotMom = TMath::Sqrt( lXiMomX*lXiMomX + lXiMomY*lXiMomY + lXiMomZ*lXiMomZ );
2534
2535 lBachMomX = xi->MomBachX();
2536 lBachMomY = xi->MomBachY();
2537 lBachMomZ = xi->MomBachZ();
2538 lBachTransvMom = TMath::Sqrt( lBachMomX*lBachMomX + lBachMomY*lBachMomY );
2539 lBachTotMom = TMath::Sqrt( lBachMomX*lBachMomX + lBachMomY*lBachMomY + lBachMomZ*lBachMomZ );
2540
2541
2542 lV0toXiCosineOfPointingAngle = xi->CosPointingAngle( xi->GetDecayVertexXi() );
2543
2544 lRapXi = xi->RapXi();
2545 lRapOmega = xi->RapOmega();
2546 lEta = xi->Eta(); // Will not work ! need a method Pz(), Py() Px()
2547 lTheta = xi->Theta() *180.0/TMath::Pi(); // in AODcascade.
2548 lPhi = xi->Phi() *180.0/TMath::Pi(); // Here, we will get eta, theta, phi for the V0 ...
2549 lAlphaXi = xi->AlphaXi();
2550 lPtArmXi = xi->PtArmXi();
2551
32599cd4 2552 // II.Step 7 - Complementary info for monitoring the cascade cut variables
f3dc9369 2553 //FIXME : missing for AOD : Tacklet Multiplicity + TPCCluster
3873f6ee 2554
32599cd4 2555 // II.Step 8 - Azimuthal correlation study
3873f6ee 2556 //-------------
2557
2558 lTVect3MomXi.SetXYZ( lXiMomX, lXiMomY, lXiMomZ );
2559
2560 AliAODTrack *pTrackXi = dynamic_cast<AliAODTrack*>( xi->GetDaughter(0) );
2561 AliAODTrack *nTrackXi = dynamic_cast<AliAODTrack*>( xi->GetDaughter(1) );
2562 AliAODTrack *bachTrackXi = dynamic_cast<AliAODTrack*>( xi->GetDecayVertexXi()->GetDaughter(0) );
2563 if (!pTrackXi || !nTrackXi || !bachTrackXi ) {
7e504402 2564 AliWarning("ERROR: Could not retrieve one of the 3 AOD daughter tracks of the cascade ...");
3873f6ee 2565 continue;
2566 }
2567
2568 lArrTrackID[0] = pTrackXi ->GetID();
2569 lArrTrackID[1] = nTrackXi ->GetID();
2570 lArrTrackID[2] = bachTrackXi->GetID();
2571
45ee0bcc 2572 }// end of AOD treatment
2573
2574
32599cd4 2575 // -------------------------------------
9d670198 2576 // II.Fill - Filling the TH1,2,3Fs, HnSparses, CFContainers, FOR events with CASCADES !
e8fd19de 2577
2578 // if( lIsBachelorKaonForTPC )
2579 // // FIXME : Just to know which file is currently open : locate the file containing Xi
2580 // cout << "Name of the file containing Omega candidate(s) :"
2581 // << CurrentFileName()
2582 // << " / entry: " << Entry()
2583 // << " / in file: " << lESDevent->GetEventNumberInFile() // <- Cvetan / From Mihaela: AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()->GetTree()->GetReadEntry();
2584 // << " : mass(Omega+) = " << lInvMassOmegaPlus
2585 // << " : mass(Omega-) = " << lInvMassOmegaMinus
2586 // << " / charge = " << lChargeXi
2587 // << " / pt(Casc) = " << lXiTransvMom
c525f360 2588 // << " / Decay 2d R(Xi) = " << lXiRadius2D
e8fd19de 2589 // << endl;
45ee0bcc 2590
2591
32599cd4 2592 // - II.Fill.Step 1 : primary vertex
7e504402 2593
2594 fHistTPCrefitTrackMultiplicityForCascadeEvt->Fill( nTrackWithTPCrefitMultiplicity );
c525f360 2595 fHistPrimaryTrackMultiplicityForCascadeEvt ->Fill( nTrackPrimaryMultiplicity );
7e504402 2596
2597 fHistPosV0TPCClusters ->Fill( lPosTPCClusters );
2598 fHistNegV0TPCClusters ->Fill( lNegTPCClusters );
2599 fHistBachTPCClusters ->Fill( lBachTPCClusters );
e8fd19de 2600
2601 f2dHistTPCdEdxOfCascDghters ->Fill( lInnerWallMomCascDghters[0] , lTPCSignalCascDghters[0] );
2602 f2dHistTPCdEdxOfCascDghters ->Fill( lInnerWallMomCascDghters[1] , lTPCSignalCascDghters[1] );
2603 f2dHistTPCdEdxOfCascDghters ->Fill( lInnerWallMomCascDghters[2] , lTPCSignalCascDghters[2] );
2604
45ee0bcc 2605 fHistVtxStatus ->Fill( lStatusTrackingPrimVtx ); // 1 if tracking vtx = ok
2606
2607 if( lStatusTrackingPrimVtx ){
9d670198 2608 fHistPosTrkgPrimaryVtxXForCascadeEvt ->Fill( lTrkgPrimaryVtxPos[0] );
2609 fHistPosTrkgPrimaryVtxYForCascadeEvt ->Fill( lTrkgPrimaryVtxPos[1] );
2610 fHistPosTrkgPrimaryVtxZForCascadeEvt ->Fill( lTrkgPrimaryVtxPos[2] );
2611 fHistTrkgPrimaryVtxRadius ->Fill( lTrkgPrimaryVtxRadius3D );
45ee0bcc 2612 }
2613
9d670198 2614 fHistPosBestPrimaryVtxXForCascadeEvt ->Fill( lBestPrimaryVtxPos[0] );
2615 fHistPosBestPrimaryVtxYForCascadeEvt ->Fill( lBestPrimaryVtxPos[1] );
2616 fHistPosBestPrimaryVtxZForCascadeEvt ->Fill( lBestPrimaryVtxPos[2] );
2617 fHistBestPrimaryVtxRadius ->Fill( lBestPrimaryVtxRadius3D );
45ee0bcc 2618
2619 f2dHistTrkgPrimVtxVsBestPrimVtx->Fill( lTrkgPrimaryVtxRadius3D, lBestPrimaryVtxRadius3D );
2620
e8fd19de 2621 // **************************** With PID on ? ... for the signal region ? ************FIXME**************************************
2622 if( ( (lChargeXi<0) && lIsBachelorPionForTPC && lIsPosProtonForTPC && lIsNegPionForTPC ) ||
2623 ( (lChargeXi>0) && lIsBachelorPionForTPC && lIsNegProtonForTPC && lIsPosPionForTPC ) )
2624 // NOTE :
c525f360 2625 // with this PID condition, it could happen that a cascade candidate satisfies the wrong requirement,
e8fd19de 2626 // e.g. one looks at a Xi- candidate for which lIsBachelorPionForTPC && lIsPosProtonForTPC && lIsNegPionForTPC = kFALSE
2627 // Expectation: it should be excluded.
2628 // but lIsBachelorPionForTPC && lIsNegProtonForTPC && lIsPosPionForTPC = kTRUE
2629 // then this bad Xi-candidate will contribute anyway (OR condition).
2630 // Hence : the extra condition on the sign of the Cascade
2631 {
2632 // if( TMath::Abs( lInvMassXiMinus-1.3217 ) < 0.010 || TMath::Abs( lInvMassXiPlus-1.3217 ) < 0.010){} }
2633
2634 // II.Fill.Step 2
2635 fHistEffMassXi ->Fill( lEffMassXi );
2636 fHistChi2Xi ->Fill( lChi2Xi ); // Flag CascadeVtxer: Cut Variable a
2637 fHistDcaXiDaughters ->Fill( lDcaXiDaughters ); // Flag CascadeVtxer: Cut Variable e
2638 fHistDcaBachToPrimVertex ->Fill( lDcaBachToPrimVertexXi ); // Flag CascadeVtxer: Cut Variable d
2639 fHistXiCosineOfPointingAngle ->Fill( lXiCosineOfPointingAngle ); // Flag CascadeVtxer: Cut Variable f
c525f360 2640 fHistXiRadius ->Fill( lXiRadius2D ); // Flag CascadeVtxer: Cut Variable g+h
e8fd19de 2641
2642
2643 // II.Fill.Step 3
2644 fHistMassLambdaAsCascDghter ->Fill( lInvMassLambdaAsCascDghter ); // Flag CascadeVtxer: Cut Variable c
2645 fHistV0Chi2Xi ->Fill( lV0Chi2Xi );
2646 fHistDcaV0DaughtersXi ->Fill( lDcaV0DaughtersXi );
2647 fHistV0CosineOfPointingAngleXi ->Fill( lV0CosineOfPointingAngleXi );
2648 fHistV0RadiusXi ->Fill( lV0RadiusXi );
2649
2650 fHistDcaV0ToPrimVertexXi ->Fill( lDcaV0ToPrimVertexXi ); // Flag CascadeVtxer: Cut Variable b
2651 fHistDcaPosToPrimVertexXi ->Fill( lDcaPosToPrimVertexXi );
2652 fHistDcaNegToPrimVertexXi ->Fill( lDcaNegToPrimVertexXi );
2653
90926f02 2654
e8fd19de 2655 // II.Fill.Step 4 : extra QA info
2656
2657 fHistChargeXi ->Fill( lChargeXi );
2658 fHistV0toXiCosineOfPointingAngle->Fill( lV0toXiCosineOfPointingAngle );
2659
c525f360 2660 if( TMath::Abs( lInvMassXiMinus-1.3217 ) < 0.010 || TMath::Abs( lInvMassXiPlus-1.3217 ) < 0.010){// One InvMass should be different from 0
e8fd19de 2661 fHistXiTransvMom ->Fill( lXiTransvMom );
2662 fHistXiTotMom ->Fill( lXiTotMom );
2663
2664 fHistBachTransvMomXi ->Fill( lBachTransvMom );
2665 fHistBachTotMomXi ->Fill( lBachTotMom );
2666
2667 fHistRapXi ->Fill( lRapXi );
2668 fHistEtaXi ->Fill( lEta );
2669 fHistThetaXi ->Fill( lTheta );
2670 fHistPhiXi ->Fill( lPhi );
c525f360 2671
e8fd19de 2672 }
c525f360 2673
2674 if( (lChargeXi < 0) && (TMath::Abs( lInvMassXiMinus-1.3217 ) < 0.010) ) fHistcTauXiMinus ->Fill( lXiRadius3D * 1.3271/lXiTotMom );
2675 if( (lChargeXi > 0) && (TMath::Abs( lInvMassXiPlus -1.3217 ) < 0.010) ) fHistcTauXiPlus ->Fill( lXiRadius3D * 1.3271/lXiTotMom );
45ee0bcc 2676
c525f360 2677 if( TMath::Abs( lInvMassOmegaMinus-1.672 ) < 0.010 || TMath::Abs( lInvMassOmegaPlus-1.672 ) < 0.010 ){// One InvMass should be different from 0
e8fd19de 2678 fHistRapOmega ->Fill( lRapOmega );
c525f360 2679
e8fd19de 2680 }
c525f360 2681
2682 if( (lChargeXi < 0) && (TMath::Abs( lInvMassOmegaMinus-1.672 ) < 0.010) ) fHistcTauOmegaMinus ->Fill( lXiRadius3D * 1.67245/lXiTotMom );
2683 if( (lChargeXi > 0) && (TMath::Abs( lInvMassOmegaPlus- 1.672 ) < 0.010) ) fHistcTauOmegaPlus ->Fill( lXiRadius3D * 1.67245/lXiTotMom );
e8fd19de 2684
c525f360 2685 f2dHistArmenteros ->Fill( lChargeXi*lAlphaXi, lPtArmXi );
e8fd19de 2686 }// end with PID ...
32599cd4 2687
2688 // II.Fill.Step 5 : inv mass plots 1D
2689 if( lChargeXi < 0 ){
2690 fHistMassXiMinus ->Fill( lInvMassXiMinus );
2691 fHistMassOmegaMinus ->Fill( lInvMassOmegaMinus );
2692 if(lIsBachelorPion) fHistMassWithCombPIDXiMinus ->Fill( lInvMassXiMinus );
2693 if(lIsBachelorKaon) fHistMassWithCombPIDOmegaMinus ->Fill( lInvMassOmegaMinus );
2694 }
2695
2696 if( lChargeXi > 0 ){
2697 fHistMassXiPlus ->Fill( lInvMassXiPlus );
2698 fHistMassOmegaPlus ->Fill( lInvMassOmegaPlus );
2699 if(lIsBachelorPion) fHistMassWithCombPIDXiPlus ->Fill( lInvMassXiPlus );
2700 if(lIsBachelorKaon) fHistMassWithCombPIDOmegaPlus ->Fill( lInvMassOmegaPlus );
2701 }
2702
2703
2704 // II.Fill.Step 6 : inv mass plots 2D, 3D
45ee0bcc 2705 if( lChargeXi < 0 ) {
2706 f2dHistEffMassLambdaVsEffMassXiMinus->Fill( lInvMassLambdaAsCascDghter, lInvMassXiMinus );
2707 f2dHistEffMassXiVsEffMassOmegaMinus ->Fill( lInvMassXiMinus, lInvMassOmegaMinus );
c525f360 2708 f2dHistXiRadiusVsEffMassXiMinus ->Fill( lXiRadius2D, lInvMassXiMinus );
2709 f2dHistXiRadiusVsEffMassOmegaMinus ->Fill( lXiRadius2D, lInvMassOmegaMinus );
ff0753e1 2710 f3dHistXiPtVsEffMassVsYXiMinus ->Fill( lXiTransvMom, lInvMassXiMinus, lRapXi );
2711 f3dHistXiPtVsEffMassVsYOmegaMinus ->Fill( lXiTransvMom, lInvMassOmegaMinus, lRapOmega );
45ee0bcc 2712 }
2713 else{
2714 f2dHistEffMassLambdaVsEffMassXiPlus ->Fill( lInvMassLambdaAsCascDghter, lInvMassXiPlus );
2715 f2dHistEffMassXiVsEffMassOmegaPlus ->Fill( lInvMassXiPlus, lInvMassOmegaPlus );
c525f360 2716 f2dHistXiRadiusVsEffMassXiPlus ->Fill( lXiRadius2D, lInvMassXiPlus);
2717 f2dHistXiRadiusVsEffMassOmegaPlus ->Fill( lXiRadius2D, lInvMassOmegaPlus );
ff0753e1 2718 f3dHistXiPtVsEffMassVsYXiPlus ->Fill( lXiTransvMom, lInvMassXiPlus, lRapXi );
2719 f3dHistXiPtVsEffMassVsYOmegaPlus ->Fill( lXiTransvMom, lInvMassOmegaPlus, lRapOmega );
45ee0bcc 2720 }
3873f6ee 2721
32599cd4 2722 // - Filling the AliCFContainers related to PID
2723
2724 Double_t lContainerPIDVars[4] = {0.0};
2725
2726 // Xi Minus
2727 if( lChargeXi < 0 ) {
2728 lContainerPIDVars[0] = lXiTransvMom ;
2729 lContainerPIDVars[1] = lInvMassXiMinus ;
2730 lContainerPIDVars[2] = lRapXi ;
c525f360 2731 lContainerPIDVars[3] = nTrackPrimaryMultiplicity; // FIXME : nTrackPrimaryMultiplicity not set for AOD ... = -1
32599cd4 2732
2733 // No PID
2734 fCFContCascadePIDXiMinus->Fill(lContainerPIDVars, 0); // No PID
2735 // TPC PID
2736 if( lIsBachelorPionForTPC )
e8fd19de 2737 fCFContCascadePIDXiMinus->Fill(lContainerPIDVars, 1); // TPC PID / 4-#sigma cut on Bachelor track
32599cd4 2738
2739 if( lIsBachelorPionForTPC &&
2740 lIsPosProtonForTPC )
e8fd19de 2741 fCFContCascadePIDXiMinus->Fill(lContainerPIDVars, 2); // TPC PID / 4-#sigma cut on Bachelor+Baryon tracks
32599cd4 2742
2743 if( lIsBachelorPionForTPC &&
2744 lIsPosProtonForTPC &&
2745 lIsNegPionForTPC )
e8fd19de 2746 fCFContCascadePIDXiMinus->Fill(lContainerPIDVars, 3); // TPC PID / 4-#sigma cut on Bachelor+Baryon+Meson tracks
32599cd4 2747
2748 // Combined PID
2749 if( lIsBachelorPion )
2750 fCFContCascadePIDXiMinus->Fill(lContainerPIDVars, 4); // Comb. PID / Bachelor
2751
2752 if( lIsBachelorPion &&
2753 lIsPosInXiProton )
2754 fCFContCascadePIDXiMinus->Fill(lContainerPIDVars, 5); // Comb. PID / Bachelor+Baryon
2755
2756 if(lIsBachelorPion &&
2757 lIsPosInXiProton &&
2758 lIsNegInXiPion )
2759 fCFContCascadePIDXiMinus->Fill(lContainerPIDVars, 6); // Comb. PID / Bachelor+Baryon+Meson
2760 }
2761
2762 lContainerPIDVars[0] = 0.; lContainerPIDVars[1] = 0.; lContainerPIDVars[2] = 0.; lContainerPIDVars[3] = 0.;
2763
2764 // Xi Plus
2765 if( lChargeXi > 0 ) {
2766 lContainerPIDVars[0] = lXiTransvMom ;
2767 lContainerPIDVars[1] = lInvMassXiPlus ;
2768 lContainerPIDVars[2] = lRapXi ;
c525f360 2769 lContainerPIDVars[3] = nTrackPrimaryMultiplicity; // FIXME : nTrackPrimaryMultiplicity not set for AOD ... = -1
32599cd4 2770
2771 // No PID
2772 fCFContCascadePIDXiPlus->Fill(lContainerPIDVars, 0); // No PID
2773 // TPC PID
2774 if( lIsBachelorPionForTPC )
e8fd19de 2775 fCFContCascadePIDXiPlus->Fill(lContainerPIDVars, 1); // TPC PID / 4-#sigma cut on Bachelor track
32599cd4 2776
2777 if( lIsBachelorPionForTPC &&
2778 lIsNegProtonForTPC )
e8fd19de 2779 fCFContCascadePIDXiPlus->Fill(lContainerPIDVars, 2); // TPC PID / 4-#sigma cut on Bachelor+Baryon tracks
32599cd4 2780
2781 if( lIsBachelorPionForTPC &&
2782 lIsNegProtonForTPC &&
2783 lIsPosPionForTPC )
e8fd19de 2784 fCFContCascadePIDXiPlus->Fill(lContainerPIDVars, 3); // TPC PID / 4-#sigma cut on Bachelor+Baryon+Meson tracks
32599cd4 2785
2786 // Combined PID
2787 if( lIsBachelorPion )
2788 fCFContCascadePIDXiPlus->Fill(lContainerPIDVars, 4); // Comb. PID / Bachelor
2789
2790 if( lIsBachelorPion &&
2791 lIsNegInXiProton )
2792 fCFContCascadePIDXiPlus->Fill(lContainerPIDVars, 5); // Comb. PID / Bachelor+Baryon
2793
2794 if(lIsBachelorPion &&
2795 lIsNegInXiProton &&
2796 lIsPosInXiPion )
2797 fCFContCascadePIDXiPlus->Fill(lContainerPIDVars, 6); // Comb. PID / Bachelor+Baryon+Meson
2798 }
2799
2800 lContainerPIDVars[0] = 0.; lContainerPIDVars[1] = 0.; lContainerPIDVars[2] = 0.; lContainerPIDVars[3] = 0.;
2801
2802 // Omega Minus
a786bd57 2803 if( lChargeXi < 0 && (TMath::Abs( lInvMassXiMinus-1.3217 ) > 0.008) ) {
2804 // In order to reduce the background contribution from Xi to Omega,
2805 // --> trial to reject the neg. candidate whose mass under Xi hypothesis
2806 // falls into the Xi window (Mpdg +- 8 MeV/c2)
32599cd4 2807 lContainerPIDVars[0] = lXiTransvMom ;
2808 lContainerPIDVars[1] = lInvMassOmegaMinus ;
2809 lContainerPIDVars[2] = lRapOmega ;
c525f360 2810 lContainerPIDVars[3] = nTrackPrimaryMultiplicity; // FIXME : nTrackPrimaryMultiplicity not set for AOD ... = -1
32599cd4 2811
2812 // No PID
2813 fCFContCascadePIDOmegaMinus->Fill(lContainerPIDVars, 0); // No PID
2814 // TPC PID
2815 if( lIsBachelorKaonForTPC )
e8fd19de 2816 fCFContCascadePIDOmegaMinus->Fill(lContainerPIDVars, 1); // TPC PID / 4-#sigma cut on Bachelor track
32599cd4 2817
2818 if( lIsBachelorKaonForTPC &&
2819 lIsPosProtonForTPC )
e8fd19de 2820 fCFContCascadePIDOmegaMinus->Fill(lContainerPIDVars, 2); // TPC PID / 4-#sigma cut on Bachelor+Baryon tracks
32599cd4 2821
2822 if( lIsBachelorKaonForTPC &&
2823 lIsPosProtonForTPC &&
2824 lIsNegPionForTPC )
e8fd19de 2825 fCFContCascadePIDOmegaMinus->Fill(lContainerPIDVars, 3); // TPC PID / 4-#sigma cut on Bachelor+Baryon+Meson tracks
32599cd4 2826
2827 // Combined PID
2828 if( lIsBachelorKaon )
2829 fCFContCascadePIDOmegaMinus->Fill(lContainerPIDVars, 4); // Comb. PID / Bachelor
2830
2831 if( lIsBachelorKaon &&
2832 lIsPosInOmegaProton )
2833 fCFContCascadePIDOmegaMinus->Fill(lContainerPIDVars, 5); // Comb. PID / Bachelor+Baryon
2834
2835 if(lIsBachelorKaon &&
2836 lIsPosInOmegaProton &&
2837 lIsNegInOmegaPion )
2838 fCFContCascadePIDOmegaMinus->Fill(lContainerPIDVars, 6); // Comb. PID / Bachelor+Baryon+Meson
2839 }
2840
2841 lContainerPIDVars[0] = 0.; lContainerPIDVars[1] = 0.; lContainerPIDVars[2] = 0.; lContainerPIDVars[3] = 0.;
2842
2843 // Omega Plus
a786bd57 2844 if( lChargeXi > 0 && (TMath::Abs( lInvMassXiPlus-1.3217 ) > 0.008) ) {
2845 // In order to reduce the background contribution from Xi to Omega,
2846 // --> trial to reject the neg. candidate whose mass under Xi hypothesis
2847 // falls into the Xi window (Mpdg +- 8 MeV/c2)
32599cd4 2848 lContainerPIDVars[0] = lXiTransvMom ;
2849 lContainerPIDVars[1] = lInvMassOmegaPlus ;
2850 lContainerPIDVars[2] = lRapOmega ;
c525f360 2851 lContainerPIDVars[3] = nTrackPrimaryMultiplicity; // FIXME : nTrackPrimaryMultiplicity not set for AOD ... = -1
32599cd4 2852
2853 // No PID
2854 fCFContCascadePIDOmegaPlus->Fill(lContainerPIDVars, 0); // No PID
2855 // TPC PID
2856 if( lIsBachelorKaonForTPC )
e8fd19de 2857 fCFContCascadePIDOmegaPlus->Fill(lContainerPIDVars, 1); // TPC PID / 4-#sigma cut on Bachelor track
32599cd4 2858
2859 if( lIsBachelorKaonForTPC &&
2860 lIsNegProtonForTPC )
e8fd19de 2861 fCFContCascadePIDOmegaPlus->Fill(lContainerPIDVars, 2); // TPC PID / 4-#sigma cut on Bachelor+Baryon tracks
32599cd4 2862
2863 if( lIsBachelorKaonForTPC &&
2864 lIsNegProtonForTPC &&
2865 lIsPosPionForTPC )
e8fd19de 2866 fCFContCascadePIDOmegaPlus->Fill(lContainerPIDVars, 3); // TPC PID / 4-#sigma cut on Bachelor+Baryon+Meson tracks
32599cd4 2867
2868 // Combined PID
2869 if( lIsBachelorKaon )
2870 fCFContCascadePIDOmegaPlus->Fill(lContainerPIDVars, 4); // Comb. PID / Bachelor
2871
2872 if( lIsBachelorKaon &&
2873 lIsNegInOmegaProton )
2874 fCFContCascadePIDOmegaPlus->Fill(lContainerPIDVars, 5); // Comb. PID / Bachelor+Baryon
2875
2876 if(lIsBachelorKaon &&
2877 lIsNegInOmegaProton &&
2878 lIsPosInOmegaPion )
2879 fCFContCascadePIDOmegaPlus->Fill(lContainerPIDVars, 6); // Comb. PID / Bachelor+Baryon+Meson
2880 }
2881
e8fd19de 2882
2883 // II.Fill.Step 7 : filling the AliCFContainer (optimisation of topological selections)
2884 Double_t lContainerCutVars[20] = {0.0};
2885
2886 lContainerCutVars[0] = lDcaXiDaughters;
2887 lContainerCutVars[1] = lDcaBachToPrimVertexXi;
2888 lContainerCutVars[2] = lXiCosineOfPointingAngle;
c525f360 2889 lContainerCutVars[3] = lXiRadius2D;
e8fd19de 2890 lContainerCutVars[4] = lInvMassLambdaAsCascDghter;
2891 lContainerCutVars[5] = lDcaV0DaughtersXi;
2892 lContainerCutVars[6] = lV0CosineOfPointingAngleXi;
2893 lContainerCutVars[7] = lV0RadiusXi;
2894 lContainerCutVars[8] = lDcaV0ToPrimVertexXi;
2895 lContainerCutVars[9] = lDcaPosToPrimVertexXi;
2896 lContainerCutVars[10] = lDcaNegToPrimVertexXi;
2897
2898 lContainerCutVars[13] = lXiTransvMom;
2899
2900 lContainerCutVars[16] = lBestPrimaryVtxPos[2];
a786bd57 2901 lContainerCutVars[17] = nTrackPrimaryMultiplicity; // FIXME : nTrackPrimaryMultiplicity not checked for AOD ... = -1
2902 lContainerCutVars[18] = nITSandTPCtracksAndSPDtracklets; // FIXME : nITSandTPCtracksAndSPDtracklets is not available for AOD ... = -1
e8fd19de 2903 lContainerCutVars[19] = lBachTPCClusters; // FIXME : BachTPCClusters is not available for AOD ... = -1
2904
2905 if( lChargeXi < 0 ) {
9d670198 2906 lContainerCutVars[11] = lInvMassXiMinus;
e8fd19de 2907 lContainerCutVars[12] = 1.63;
9d670198 2908 lContainerCutVars[14] = lRapXi;
2909 lContainerCutVars[15] = -1.;
e8fd19de 2910 if( lIsBachelorPionForTPC && lIsPosProtonForTPC && lIsNegPionForTPC ) fCFContCascadeCuts->Fill(lContainerCutVars,0); // for Xi-
9d670198 2911
e8fd19de 2912 lContainerCutVars[11] = 1.26;
9d670198 2913 lContainerCutVars[12] = lInvMassOmegaMinus;
2914 lContainerCutVars[14] = -1.;
2915 lContainerCutVars[15] = lRapOmega;
a786bd57 2916 if( lIsBachelorKaonForTPC && lIsPosProtonForTPC && lIsNegPionForTPC
2917 && (TMath::Abs( lInvMassXiMinus-1.3217 ) > 0.008) ) fCFContCascadeCuts->Fill(lContainerCutVars,2); // for Omega-
9d670198 2918 }
e8fd19de 2919 else{
9d670198 2920 lContainerCutVars[11] = lInvMassXiPlus;
e8fd19de 2921 lContainerCutVars[12] = 1.63;
9d670198 2922 lContainerCutVars[14] = lRapXi;
2923 lContainerCutVars[15] = -1.;
e8fd19de 2924 if( lIsBachelorPionForTPC && lIsNegProtonForTPC && lIsPosPionForTPC ) fCFContCascadeCuts->Fill(lContainerCutVars,1); // for Xi+
9d670198 2925
e8fd19de 2926 lContainerCutVars[11] = 1.26;
9d670198 2927 lContainerCutVars[12] = lInvMassOmegaPlus;
2928 lContainerCutVars[14] = -1.;
2929 lContainerCutVars[15] = lRapOmega;
a786bd57 2930 if( lIsBachelorKaonForTPC && lIsNegProtonForTPC && lIsPosPionForTPC
2931 && (TMath::Abs( lInvMassXiPlus-1.3217 ) > 0.008) ) fCFContCascadeCuts->Fill(lContainerCutVars,3); // for Omega+
9d670198 2932 }
e8fd19de 2933
2934
2935 // II.Fill.Step 8 : angular correlations
2936
2937 if( lChargeXi < 0 ){
c525f360 2938 if( lIsBachelorPionForTPC && lIsPosProtonForTPC && lIsNegPionForTPC ) DoAngularCorrelation("Xi-", lInvMassXiMinus, lArrTrackID, lTVect3MomXi, lEta, lRapXi);
a786bd57 2939 if( lIsBachelorKaonForTPC && lIsPosProtonForTPC && lIsNegPionForTPC
2940 && (TMath::Abs( lInvMassXiMinus-1.3217 ) > 0.008) ) DoAngularCorrelation("Omega-", lInvMassOmegaMinus, lArrTrackID, lTVect3MomXi, lEta, lRapOmega);
e8fd19de 2941 }
2942 else{
c525f360 2943 if( lIsBachelorPionForTPC && lIsNegProtonForTPC && lIsPosPionForTPC ) DoAngularCorrelation("Xi+", lInvMassXiPlus, lArrTrackID, lTVect3MomXi, lEta, lRapXi);
a786bd57 2944 if( lIsBachelorKaonForTPC && lIsNegProtonForTPC && lIsPosPionForTPC
2945 && (TMath::Abs( lInvMassXiPlus-1.3217 ) > 0.008) ) DoAngularCorrelation("Omega+", lInvMassOmegaPlus, lArrTrackID, lTVect3MomXi, lEta, lRapOmega);
e8fd19de 2946 }
2947
3873f6ee 2948
45ee0bcc 2949 }// end of the Cascade loop (ESD or AOD)
2950
2951
2952 // Post output data.
2953 PostData(1, fListHistCascade);
2954}
2955
2956
3873f6ee 2957void AliAnalysisTaskCheckCascade::DoAngularCorrelation( const Char_t *lCascType,
2958 Double_t lInvMassCascade,
2959 const Int_t *lArrTrackID,
2960 TVector3 &lTVect3MomXi,
c525f360 2961 Double_t lEtaXi,
2962 Double_t lRapCascade){
3aedd4a5 2963 // Perform the Delta(Phi)Delta(Eta) analysis
2964 // by properly filling the THnSparseF
c525f360 2965
2966 if( fAnalysisType == "AOD") return; // FIXME : AOD development lost, because of AliESDtrack needed by AliESDtrackCuts
2967
2968 TString lStrCascType( lCascType );
2969
2970 // Check the Xi- candidate is within the proper mass window m0 +- 10 MeV
2971 Double_t lCascPdgMass = 0.0;
2972 if( lStrCascType.Contains("Xi") ) lCascPdgMass = 1.3217;
2973 if( lStrCascType.Contains("Omega") ) lCascPdgMass = 1.6724;
2974
2975 if( lInvMassCascade > lCascPdgMass + 0.010) return;
2976 if( lInvMassCascade < lCascPdgMass - 0.010) return;
2977
2978 // Check the Xi- candidate is within the proper rapidity window (flat efficiency)
2979 if( lRapCascade > 0.5 ) return;
2980 if( lRapCascade < -0.5 ) return;
2981
2982
2983 // 3 options to follow for the correlations:
2984 // 1.1 - "TrigAnyCasc-AssoAnyPrim"
2985 // 1.2 - "TrigCascLeading-AssoAnyPrim"
2986 // 2. - "TrigLeadingTrck-AssoCasc"
2987
2988 if(fAngularCorrelationType.Contains("AssoAnyPrim") ){
2989 //----------------------- Option 1 ---------------------------------------------------------------------------------------------------
a786bd57 2990 // Trigger = cascade,
c525f360 2991 // Associated = all the primary tracks in the event.
2992 // 1.1 Cascade = trigger above a certain pt but nothing more complicated than that
2993 // 1.2 Cascade = leading particle (à la heavy-ion -> test for coalescence)
2994
2995 Bool_t kRejectLowPtCascades = kTRUE;
2996 if(kRejectLowPtCascades && (lTVect3MomXi.Pt() < 1.7) ) return;
2997 // Do not even consider the cascade of low pt for the correlation ...
2998
a786bd57 2999 if(fAngularCorrelationType == "TrigCascLeading-AssoAnyPrim"){// Require the Cascade to be the Leading Part. in the event
c525f360 3000
3001 // 1st loop: check there is no primary track with a higher pt ...
3002 // = The cascade is meant to be a leading particle : Pt(Casc) > any primary track in the event
3003 for(Int_t TrckIdx = 0; TrckIdx < (InputEvent())->GetNumberOfTracks() ; TrckIdx++ )
3004 {// Loop over all the tracks of the event
3005
3006 AliESDtrack *lCurrentTrck = dynamic_cast<AliESDtrack*>( (InputEvent())->GetTrack( TrckIdx ) );
3007 if (!lCurrentTrck ) {
3008 AliWarning("ERROR Correl. Study : Could not retrieve a track while looping over the event tracks ...");
3009 continue;
3010 }
3011
3012 if( !fESDtrackCuts->AcceptTrack(lCurrentTrck) ) continue;
3013 // Just consider primary tracks (= reject track that are not primary ones)
3014 if(lTVect3MomXi.Pt() < lCurrentTrck->Pt() ) return;
3015 // Room for improvement: //FIXME
3016 // 1. There is a given resolution on pt : maybe release the cut Pt(casc) < Pt(track)*90% ?
3017 // 2. Apply this cut only when DeltaPhi(casc, track) > 90 deg = when track is in the near-side ?
3018 // 3. Anti-splitting cut (like in Femto analysis) ? = now done via ESDtrackCuts ...
3019
3020 }// end control loop
3021 }// end of prelim. check : Cascade = leading part in the event
3022
3023 // 2nd loop: filling loop
3024 for(Int_t TrckIdx = 0; TrckIdx < (InputEvent())->GetNumberOfTracks() ; TrckIdx++ )
3025 {// Loop over all the tracks of the event
3026
3027 AliESDtrack *lCurrentTrck = dynamic_cast<AliESDtrack*>( (InputEvent())->GetTrack( TrckIdx ) );
3028 if (!lCurrentTrck ) {
3029 AliWarning("ERROR Correl. Study : Could not retrieve a track while looping over the event tracks ...");
3030 continue;
3031 }
3032 // Just consider primary tracks (= reject track that are not primary ones)
3033 if( !fESDtrackCuts->AcceptTrack(lCurrentTrck) ) continue;
3034
3035 // Room for improvement: //FIXME
3036 // 1.
3037 // 2. Exclude the tracks that build the condisdered cascade = the bachelor + the V0 dghters
3038 // This may bias the outcome, especially for low multplicity events.
3039 // Note : For ESD event, track ID == track index.
3040 if(lCurrentTrck->GetID() == lArrTrackID[0]) continue;
3041 if(lCurrentTrck->GetID() == lArrTrackID[1]) continue;
3042 if(lCurrentTrck->GetID() == lArrTrackID[2]) continue;
3043
3044 TVector3 lTVect3MomTrck(lCurrentTrck->Px(), lCurrentTrck->Py(), lCurrentTrck->Pz() );
3045
3046 // 2 hypotheses made here :
3047 // - The Xi trajectory is a straight line,
3048 // - The Xi doesn't loose any energy by crossing the first layer(s) of ITS, if ever;
3049 // So, meaning hyp: vect p(Xi) at the emission = vect p(Xi) at the decay vertex
3050 // By doing this, we introduce a systematic error on the cascade Phi ...
3051 // Room for improvement: take into account the curvature of the Xi trajectory ?
3052 // or rather, the resolution in space of the decay vertex ...
3053 //FIXME
3054
3055 Double_t lHnSpFillVar[5] = {0.};
3056 lHnSpFillVar[0] = lTVect3MomXi.DeltaPhi(lTVect3MomTrck) * 180.0/TMath::Pi(); // Delta phi(Casc,Track) (deg)
3057 if(lHnSpFillVar[0] < -50.0) lHnSpFillVar[0] += 360.0;
3058 lHnSpFillVar[1] = lEtaXi - lCurrentTrck->Eta(); // Delta eta(Casc,Track)
3059 lHnSpFillVar[2] = lTVect3MomXi.Pt(); // Pt_{Casc}
3060 lHnSpFillVar[3] = lCurrentTrck->Pt(); // Pt_{any track}
3061 lHnSpFillVar[4] = lInvMassCascade; // Eff. Inv Mass (control var)
3062
3063 if( lStrCascType.Contains("Xi-") ) fHnSpAngularCorrXiMinus ->Fill( lHnSpFillVar );
3064 else if( lStrCascType.Contains("Xi+") ) fHnSpAngularCorrXiPlus ->Fill( lHnSpFillVar );
3065 else if( lStrCascType.Contains("Omega-") ) fHnSpAngularCorrOmegaMinus ->Fill( lHnSpFillVar );
3066 else if( lStrCascType.Contains("Omega+") ) fHnSpAngularCorrOmegaPlus ->Fill( lHnSpFillVar );
3067
3068 }// end - Loop over all the tracks in the event
3069
3070 }// end of correlation type : "Trig = Casc - Asso = AnyPrim", (cases 1.1 and 1.2)
3071
3072
3073
3074 else if(fAngularCorrelationType == "TrigLeadingTrck-AssoCasc"){
3075
3076 //----------------------- Option 2 ---------------------------------------------------------------------------------------------------
a786bd57 3077 // Trigger = leading track,
c525f360 3078 // Associated = the cascade'S' in the event
3079 // NOTE : several good cascades could be present in the event (e.g. one leading track as trigger, 2 associated Xi) ...
3080 // The present function will then be called several times.
3081 // = issue for the normalisation ...
3082
3083 // 1st loop:
3084 // find the index of the (1) primary track (2) which is the leading particle in pt
3085 // NOTE : we do not take into account the Cascade pt, i.e. pt(Casc) could be greater or lower than pt(Leading) ...
3086 Int_t lLeadingPrimTrackIdx = -1;
3087 Double_t lPtMax = 0.1;
3088
3089 for(Int_t TrckIdx = 0; TrckIdx < (InputEvent())->GetNumberOfTracks() ; TrckIdx++ )
3090 {// Loop over all the tracks of the event
3091
3092 AliESDtrack *lCurrentTrck = dynamic_cast<AliESDtrack*>( (InputEvent())->GetTrack( TrckIdx ) );
3093 if (!lCurrentTrck ) {
3094 AliWarning("ERROR Correl. Study : Could not retrieve a track while looping over the event tracks ...");
3095 continue;
3096 }
3097
3098 // Primary track selection
3099 if( !fESDtrackCuts->AcceptTrack(lCurrentTrck) ) continue;
3100
3101 // Exclude the tracks that build the condisdered cascade = the bachelor + the V0 dghters
3102 // This may bias the outcome, especially for low multplicity events.
3103 // Note : For ESD event, track ID == track index.
3104 if(lCurrentTrck->GetID() == lArrTrackID[0]) continue;
3105 if(lCurrentTrck->GetID() == lArrTrackID[1]) continue;
3106 if(lCurrentTrck->GetID() == lArrTrackID[2]) continue;
3107
3108 // Towards the leading track
3109 if( lPtMax < lCurrentTrck->Pt() ){
3110 lLeadingPrimTrackIdx = TMath::Abs( lCurrentTrck->GetID() );
3111 lPtMax = lCurrentTrck->Pt();
3112 }
3113 }// end leading track finding loop
3114
3115 if( lLeadingPrimTrackIdx < 0 ) return;
3116 if( lPtMax < 0.101 ) return;
3117
3118
3119 // 2nd step: filling ONCE the THnSparse
14f5660a 3120 AliESDtrack *lLeadingTrck = 0x0;
3121 lLeadingTrck =dynamic_cast<AliESDtrack*>( (InputEvent())->GetTrack( lLeadingPrimTrackIdx ) );
3122 if( !lLeadingTrck ) return;
c525f360 3123
3124 TVector3 lTVect3MomLeadingTrck( lLeadingTrck->Px(), lLeadingTrck->Py(), lLeadingTrck->Pz() );
3125
3126 // 2 hypotheses made here :
3127 // - The Xi trajectory is a straight line,
3128 // - The Xi doesn't loose any energy by crossing the first layer(s) of ITS, if ever;
3129 // So, meaning hyp: vect p(Xi) at the emission = vect p(Xi) at the decay vertex
3130 // By doing this, we introduce a systematic error on the cascade Phi ...
3131 // Room for improvement: take into account the curvature of the Xi trajectory ?
3132 // or rather, the resolution in space of the decay vertex ...
3133 //FIXME
3134
3135 Double_t lHnSpFillVar[5] = {0.};
3136 lHnSpFillVar[0] = lTVect3MomLeadingTrck.DeltaPhi(lTVect3MomXi) * 180.0/TMath::Pi(); // Delta phi(leading Track, Casc) (deg)
3137 if(lHnSpFillVar[0] < -50.0) lHnSpFillVar[0] += 360.0;
3138 lHnSpFillVar[1] = lLeadingTrck->Eta() - lEtaXi; // Delta eta(leading Track, Casc)
3139 lHnSpFillVar[2] = lTVect3MomXi.Pt(); // Pt_{Casc}
3140 lHnSpFillVar[3] = lLeadingTrck->Pt(); // Pt_{leading track}
3141 lHnSpFillVar[4] = lInvMassCascade; // Eff. Inv Mass (control var)
3142
3143 if( lStrCascType.Contains("Xi-") ) fHnSpAngularCorrXiMinus ->Fill( lHnSpFillVar );
3144 else if( lStrCascType.Contains("Xi+") ) fHnSpAngularCorrXiPlus ->Fill( lHnSpFillVar );
3145 else if( lStrCascType.Contains("Omega-") ) fHnSpAngularCorrOmegaMinus ->Fill( lHnSpFillVar );
3146 else if( lStrCascType.Contains("Omega+") ) fHnSpAngularCorrOmegaPlus ->Fill( lHnSpFillVar );
3147 }// end of correlation type : "Trig = LeadingTrck -Asso = Casc"
3148 else
3149 return;
45ee0bcc 3150
3873f6ee 3151}
45ee0bcc 3152
7e504402 3153Int_t AliAnalysisTaskCheckCascade::DoESDTrackWithTPCrefitMultiplicity(const AliESDEvent *lESDevent)
3154{
3155 // Checking the number of tracks with TPCrefit for each event
3156 // Needed for a rough assessment of the event multiplicity
3157
3158 Int_t nTrackWithTPCrefitMultiplicity = 0;
3159 for(Int_t iTrackIdx = 0; iTrackIdx < (InputEvent())->GetNumberOfTracks(); iTrackIdx++){
3160 AliESDtrack *esdTrack = 0x0;
3161 esdTrack = lESDevent->GetTrack( iTrackIdx );
3162 if (!esdTrack) { AliWarning("Pb / Could not retrieve one track within the track loop for TPCrefit check ..."); continue; }
3163
3164 ULong_t lTrackStatus = esdTrack->GetStatus();
3165 if ((lTrackStatus&AliESDtrack::kTPCrefit) == 0) continue;
3166 else nTrackWithTPCrefitMultiplicity++;
3167 // FIXME :
3168 // The goal here is to get a better assessment of the event multiplicity.
3169 // (InputEvent())->GetNumberOfTracks() takes into account ITS std alone tracks + global tracks
3170 // This may introduce a bias. Hence the number of TPC refit tracks.
3171 // Note : the event multiplicity = analysis on its own... See Jacek's or Jan Fiete's analysis on dN/d(eta)
45ee0bcc 3172
7e504402 3173 }// end loop over all event tracks
3174 return nTrackWithTPCrefitMultiplicity;
3175}
45ee0bcc 3176
3177
3178
3179
3180
3181//________________________________________________________________________
3182void AliAnalysisTaskCheckCascade::Terminate(Option_t *)
3183{
3184 // Draw result to the screen
3185 // Called once at the end of the query
3186
cd9188c9 3187 TList *cRetrievedList = 0x0;
3188 cRetrievedList = (TList*)GetOutputData(1);
3189 if(!cRetrievedList){
7e504402 3190 AliWarning("ERROR - AliAnalysisTaskCheckCascade: ouput data container list not available\n"); return;
cd9188c9 3191 }
3192
9d670198 3193 fHistTrackMultiplicityForTrigEvt = dynamic_cast<TH1F*> ( cRetrievedList->FindObject("fHistTrackMultiplicityForTrigEvt") );
3194 if (!fHistTrackMultiplicityForTrigEvt) {
3195 AliWarning("ERROR - AliAnalysisTaskCheckCascade: fHistTrackMultiplicityForTrigEvt not available\n"); return;
cd9188c9 3196 }
45ee0bcc 3197
9d670198 3198 fHistCascadeMultiplicityForTrigEvt = dynamic_cast<TH1F*> ( cRetrievedList->FindObject("fHistCascadeMultiplicityForTrigEvt") );
3199 if (!fHistCascadeMultiplicityForTrigEvt) {
3200 AliWarning("ERROR - AliAnalysisTaskCheckCascade: fHistCascadeMultiplicityForTrigEvt not available\n"); return;
cd9188c9 3201 }
32599cd4 3202
3203 fHistMassXiMinus = dynamic_cast<TH1F*> ( cRetrievedList->FindObject("fHistMassXiMinus") );
3204 if (!fHistMassXiMinus) {
7e504402 3205 AliWarning("ERROR - AliAnalysisTaskCheckCascade: fHistMassXiMinus not available\n"); return;
32599cd4 3206 }
3207 fHistMassXiPlus = dynamic_cast<TH1F*> ( cRetrievedList->FindObject("fHistMassXiPlus") );
3208 if (!fHistMassXiPlus) {
7e504402 3209 AliWarning("ERROR - AliAnalysisTaskCheckCascade: fHistMassXiPlus not available\n"); return;
32599cd4 3210 }
3211 fHistMassOmegaMinus = dynamic_cast<TH1F*> ( cRetrievedList->FindObject("fHistMassOmegaMinus") );
3212 if (!fHistMassOmegaMinus) {
7e504402 3213 AliWarning("ERROR - AliAnalysisTaskCheckCascade: fHistMassOmegaMinus not available\n"); return;
32599cd4 3214 }
3215 fHistMassOmegaPlus = dynamic_cast<TH1F*> ( cRetrievedList->FindObject("fHistMassOmegaPlus") );
3216 if (!fHistMassOmegaPlus) {
7e504402 3217 AliWarning("ERROR - AliAnalysisTaskCheckCascade: fHistMassOmegaPlus not available\n"); return;
32599cd4 3218 }
3219
f3dc9369 3220 TCanvas *canCheckCascade = new TCanvas("AliAnalysisTaskCheckCascade","CheckCascade overview",10,10,1010,660);
32599cd4 3221 canCheckCascade->Divide(2,2);
3222
3223 canCheckCascade->cd(1);
cd9188c9 3224 canCheckCascade->cd(1)->SetLogy();
9d670198 3225 fHistTrackMultiplicityForTrigEvt->SetMarkerStyle(kFullStar);
3226 fHistTrackMultiplicityForTrigEvt->GetXaxis()->SetLabelFont(42);
3227 fHistTrackMultiplicityForTrigEvt->GetYaxis()->SetLabelFont(42);
3228 fHistTrackMultiplicityForTrigEvt->SetTitleFont(42, "xy");
3229 fHistTrackMultiplicityForTrigEvt->GetXaxis()->SetTitleOffset(1.1);
3230 fHistTrackMultiplicityForTrigEvt->DrawCopy("H");
45ee0bcc 3231
32599cd4 3232 canCheckCascade->cd(2);
3233 canCheckCascade->cd(2)->SetLogy();
9d670198 3234 fHistCascadeMultiplicityForTrigEvt->SetMarkerStyle(kOpenSquare);
3235 fHistCascadeMultiplicityForTrigEvt->GetXaxis()->SetLabelFont(42);
3236 fHistCascadeMultiplicityForTrigEvt->GetYaxis()->SetLabelFont(42);
3237 fHistCascadeMultiplicityForTrigEvt->SetTitleFont(42, "xy");
3238 fHistCascadeMultiplicityForTrigEvt->GetXaxis()->SetTitleOffset(1.1);
3239 fHistCascadeMultiplicityForTrigEvt->DrawCopy("E");
45ee0bcc 3240
32599cd4 3241 canCheckCascade->cd(3);
f3dc9369 3242 fHistMassXiMinus ->SetMarkerStyle(kFullCircle);
32599cd4 3243 fHistMassXiMinus ->SetMarkerSize(0.5);
f3dc9369 3244 fHistMassXiMinus ->GetXaxis()->SetLabelFont(42);
3245 fHistMassXiMinus ->GetYaxis()->SetLabelFont(42);
3246 fHistMassXiMinus ->SetTitleFont(42, "xy");
3247 fHistMassXiMinus ->GetXaxis()->SetTitleOffset(1.1);
3248 fHistMassXiMinus ->GetYaxis()->SetTitleOffset(1.3);
3249 // fHistMassXiMinus->Rebin(2);
3250 fHistMassXiMinus ->GetXaxis()->SetRangeUser(1.24, 1.42);
3251 fHistMassXiMinus ->DrawCopy("E");
3252
32599cd4 3253 fHistMassXiPlus ->SetMarkerStyle(kOpenCircle);
f3dc9369 3254 fHistMassXiPlus ->SetMarkerColor(kRed+2);
3255 fHistMassXiPlus ->SetLineColor(kRed+2);
32599cd4 3256 fHistMassXiPlus ->SetMarkerSize(0.5);
f3dc9369 3257 // fHistMassXiPlus ->Rebin(2);
32599cd4 3258 fHistMassXiPlus ->DrawCopy("ESAME");
3259
f3dc9369 3260
3261 TLegend *legendeXi =new TLegend(0.67,0.34,0.97,0.54);
3262 legendeXi->SetTextFont(42);
3263 legendeXi->SetTextSize(0.05);
3264 legendeXi->SetFillColor(kWhite);
3265 legendeXi->AddEntry( fHistMassXiMinus,"#Xi^{-} candidates","lp");
a786bd57 3266 legendeXi->AddEntry( fHistMassXiPlus,"#bar{#Xi}^{+} candidates","lp");
f3dc9369 3267 legendeXi->Draw();
3268
3269
32599cd4 3270 canCheckCascade->cd(4);
32599cd4 3271 fHistMassOmegaPlus ->SetMarkerStyle(kOpenCircle);
f3dc9369 3272 fHistMassOmegaPlus ->SetMarkerColor(kRed+2);
3273 fHistMassOmegaPlus ->SetLineColor(kRed+2);
32599cd4 3274 fHistMassOmegaPlus ->SetMarkerSize(0.5);
f3dc9369 3275 fHistMassOmegaPlus ->GetXaxis()->SetLabelFont(42);
3276 fHistMassOmegaPlus ->GetYaxis()->SetLabelFont(42);
3277 fHistMassOmegaPlus ->SetTitleFont(42, "xy");
3278 fHistMassOmegaPlus ->GetXaxis()->SetTitleOffset(1.1);
3279 fHistMassOmegaPlus ->GetYaxis()->SetTitleOffset(1.25);
3280 // fHistMassOmegaPlus ->Rebin(2);
3281 fHistMassOmegaPlus ->GetXaxis()->SetRangeUser(1.6, 1.84);
3282 fHistMassOmegaPlus ->DrawCopy("E");
3283
3284 fHistMassOmegaMinus->SetMarkerStyle(kFullCircle);
3285 fHistMassOmegaMinus->SetMarkerSize(0.5);
3286 // fHistMassOmegaMinus->Rebin(2);
3287 fHistMassOmegaMinus->DrawCopy("ESAME");
3288
3289
3290 TLegend *legendeOmega = new TLegend(0.67,0.34,0.97,0.54);
3291 legendeOmega->SetTextFont(42);
3292 legendeOmega->SetTextSize(0.05);
3293 legendeOmega->SetFillColor(kWhite);
3294 legendeOmega->AddEntry( fHistMassOmegaMinus,"#Omega^{-} candidates","lp");
a786bd57 3295 legendeOmega->AddEntry( fHistMassOmegaPlus,"#bar{#Omega}^{+} candidates","lp");
f3dc9369 3296 legendeOmega->Draw();
32599cd4 3297
45ee0bcc 3298}