]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGLF/STRANGENESS/Cascades/AliAnalysisTaskCheckCascade.cxx
Cascade analysis code moved in Cascades folder
[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)
2170 Double_t lPriorsGuessXi[10] = {0, 0, 2, 0, 1, 0,0,0,0,0};
2171 Double_t lPriorsGuessOmega[10] = {0, 0, 1, 1, 1, 0,0,0,0,0};
3aedd4a5 2172
32599cd4 2173 // Combined VO-positive-daughter PID
a786bd57 2174 AliPID pPidXi; pPidXi.SetPriors( lPriorsGuessXi , kTRUE); // kTRUE = for charged particle PID
2175 AliPID pPidOmega; pPidOmega.SetPriors( lPriorsGuessOmega , kTRUE); // kTRUE = for charged particle PID
3aedd4a5 2176
2177 if( pTrackXi->IsOn(AliESDtrack::kESDpid) ){ // Combined PID exists
2178 Double_t r[10] = {0.}; pTrackXi->GetESDpid(r);
2179 pPidXi.SetProbabilities(r);
2180 pPidOmega.SetProbabilities(r);
32599cd4 2181
3aedd4a5 2182 // Check if the V0 positive track is a proton (case for Xi-)
2183 Double_t pproton = pPidXi.GetProbability(AliPID::kProton);
2184 if (pproton > pPidXi.GetProbability(AliPID::kElectron) &&
2185 pproton > pPidXi.GetProbability(AliPID::kMuon) &&
2186 pproton > pPidXi.GetProbability(AliPID::kPion) &&
2187 pproton > pPidXi.GetProbability(AliPID::kKaon) ) lIsPosInXiProton = kTRUE;
32599cd4 2188
2189 // Check if the V0 positive track is a pi+ (case for Xi+)
2190 Double_t ppion = pPidXi.GetProbability(AliPID::kPion);
2191 if (ppion > pPidXi.GetProbability(AliPID::kElectron) &&
2192 ppion > pPidXi.GetProbability(AliPID::kMuon) &&
2193 ppion > pPidXi.GetProbability(AliPID::kKaon) &&
2194 ppion > pPidXi.GetProbability(AliPID::kProton) ) lIsPosInXiPion = kTRUE;
2195
2196
3aedd4a5 2197 // Check if the V0 positive track is a proton (case for Omega-)
2198 pproton = 0.;
32599cd4 2199 pproton = pPidOmega.GetProbability(AliPID::kProton);
3aedd4a5 2200 if (pproton > pPidOmega.GetProbability(AliPID::kElectron) &&
2201 pproton > pPidOmega.GetProbability(AliPID::kMuon) &&
2202 pproton > pPidOmega.GetProbability(AliPID::kPion) &&
2203 pproton > pPidOmega.GetProbability(AliPID::kKaon) ) lIsPosInOmegaProton = kTRUE;
32599cd4 2204
2205 // Check if the V0 positive track is a pi+ (case for Omega+)
2206 ppion = 0.;
2207 ppion = pPidOmega.GetProbability(AliPID::kPion);
2208 if (ppion > pPidOmega.GetProbability(AliPID::kElectron) &&
2209 ppion > pPidOmega.GetProbability(AliPID::kMuon) &&
2210 ppion > pPidOmega.GetProbability(AliPID::kKaon) &&
2211 ppion > pPidOmega.GetProbability(AliPID::kProton) ) lIsPosInOmegaPion = kTRUE;
2212
3aedd4a5 2213 }// end if V0 positive track with existing combined PID
2214
32599cd4 2215
2216 // Combined VO-negative-daughter PID
a786bd57 2217 AliPID nPidXi; nPidXi.SetPriors( lPriorsGuessXi , kTRUE); // kTRUE = for charged particle PID
2218 AliPID nPidOmega; nPidOmega.SetPriors( lPriorsGuessOmega , kTRUE); // kTRUE = for charged particle PID
3aedd4a5 2219
2220 if( nTrackXi->IsOn(AliESDtrack::kESDpid) ){ // Combined PID exists
2221 Double_t r[10] = {0.}; nTrackXi->GetESDpid(r);
2222 nPidXi.SetProbabilities(r);
2223 nPidOmega.SetProbabilities(r);
32599cd4 2224
2225 // Check if the V0 negative track is a pi- (case for Xi-)
2226 Double_t ppion = nPidXi.GetProbability(AliPID::kPion);
2227 if (ppion > nPidXi.GetProbability(AliPID::kElectron) &&
2228 ppion > nPidXi.GetProbability(AliPID::kMuon) &&
2229 ppion > nPidXi.GetProbability(AliPID::kKaon) &&
2230 ppion > nPidXi.GetProbability(AliPID::kProton) ) lIsNegInXiPion = kTRUE;
2231
3aedd4a5 2232 // Check if the V0 negative track is an anti-proton (case for Xi+)
2233 Double_t pproton = nPidXi.GetProbability(AliPID::kProton);
2234 if (pproton > nPidXi.GetProbability(AliPID::kElectron) &&
2235 pproton > nPidXi.GetProbability(AliPID::kMuon) &&
2236 pproton > nPidXi.GetProbability(AliPID::kPion) &&
2237 pproton > nPidXi.GetProbability(AliPID::kKaon) ) lIsNegInXiProton = kTRUE;
32599cd4 2238
2239 // Check if the V0 negative track is a pi- (case for Omega-)
2240 ppion = 0.;
2241 ppion = nPidOmega.GetProbability(AliPID::kPion);
2242 if (ppion > nPidOmega.GetProbability(AliPID::kElectron) &&
2243 ppion > nPidOmega.GetProbability(AliPID::kMuon) &&
2244 ppion > nPidOmega.GetProbability(AliPID::kKaon) &&
2245 ppion > nPidOmega.GetProbability(AliPID::kProton) ) lIsNegInOmegaPion = kTRUE;
2246
3aedd4a5 2247 // Check if the V0 negative track is an anti-proton (case for Omega+)
2248 pproton = 0.;
2249 pproton = nPidOmega.GetProbability(AliPID::kProton);
2250 if (pproton > nPidOmega.GetProbability(AliPID::kElectron) &&
2251 pproton > nPidOmega.GetProbability(AliPID::kMuon) &&
2252 pproton > nPidOmega.GetProbability(AliPID::kPion) &&
2253 pproton > nPidOmega.GetProbability(AliPID::kKaon) ) lIsNegInOmegaProton = kTRUE;
32599cd4 2254
3aedd4a5 2255 }// end if V0 negative track with existing combined PID
2256
2257
32599cd4 2258 // Combined bachelor PID
a786bd57 2259 AliPID bachPidXi; bachPidXi.SetPriors( lPriorsGuessXi , kTRUE ); // kTRUE = for charged particle PID
2260 AliPID bachPidOmega; bachPidOmega.SetPriors( lPriorsGuessOmega, kTRUE ); // kTRUE = for charged particle PID
f87cd3db 2261
2262 if( bachTrackXi->IsOn(AliESDtrack::kESDpid) ){ // Combined PID exists
3aedd4a5 2263 Double_t r[10] = {0.}; bachTrackXi->GetESDpid(r);
2264 bachPidXi.SetProbabilities(r);
2265 bachPidOmega.SetProbabilities(r);
f87cd3db 2266 // Check if the bachelor track is a pion
3aedd4a5 2267 Double_t ppion = bachPidXi.GetProbability(AliPID::kPion);
2268 if (ppion > bachPidXi.GetProbability(AliPID::kElectron) &&
2269 ppion > bachPidXi.GetProbability(AliPID::kMuon) &&
2270 ppion > bachPidXi.GetProbability(AliPID::kKaon) &&
2271 ppion > bachPidXi.GetProbability(AliPID::kProton) ) lIsBachelorPion = kTRUE;
f87cd3db 2272 // Check if the bachelor track is a kaon
3aedd4a5 2273 Double_t pkaon = bachPidOmega.GetProbability(AliPID::kKaon);
2274 if (pkaon > bachPidOmega.GetProbability(AliPID::kElectron) &&
2275 pkaon > bachPidOmega.GetProbability(AliPID::kMuon) &&
2276 pkaon > bachPidOmega.GetProbability(AliPID::kPion) &&
2277 pkaon > bachPidOmega.GetProbability(AliPID::kProton) ) lIsBachelorKaon = kTRUE;
f87cd3db 2278 }// end if bachelor track with existing combined PID
2dd4214d 2279
3aedd4a5 2280
32599cd4 2281 // B - TPC PID : 3-sigma bands on Bethe-Bloch curve
32599cd4 2282
e8fd19de 2283 // Bachelor
2284 if (TMath::Abs(fESDpid->NumberOfSigmasTPC( bachTrackXi,AliPID::kKaon)) < 4) lIsBachelorKaonForTPC = kTRUE;
2285 if (TMath::Abs(fESDpid->NumberOfSigmasTPC( bachTrackXi,AliPID::kPion)) < 4) lIsBachelorPionForTPC = kTRUE;
2286
2287 // Negative V0 daughter
2288 if (TMath::Abs(fESDpid->NumberOfSigmasTPC( nTrackXi,AliPID::kPion )) < 4) lIsNegPionForTPC = kTRUE;
2289 if (TMath::Abs(fESDpid->NumberOfSigmasTPC( nTrackXi,AliPID::kProton )) < 4) lIsNegProtonForTPC = kTRUE;
2290
2291 // Positive V0 daughter
2292 if (TMath::Abs(fESDpid->NumberOfSigmasTPC( pTrackXi,AliPID::kPion )) < 4) lIsPosPionForTPC = kTRUE;
2293 if (TMath::Abs(fESDpid->NumberOfSigmasTPC( pTrackXi,AliPID::kProton )) < 4) lIsPosProtonForTPC = kTRUE;
2294
2295 /*
2296 const AliExternalTrackParam *pInnerWallTrackXi = pTrackXi ->GetInnerParam();
2297 const AliExternalTrackParam *nInnerWallTrackXi = nTrackXi ->GetInnerParam();
2298 const AliExternalTrackParam *bachInnerWallTrackXi = bachTrackXi ->GetInnerParam();
2299 if(pInnerWallTrackXi && nInnerWallTrackXi && bachInnerWallTrackXi ){
2300
2301 Double_t pMomInnerWall = pInnerWallTrackXi ->GetP();
2302 Double_t nMomInnerWall = nInnerWallTrackXi ->GetP();
2303 Double_t bachMomInnerWall = bachInnerWallTrackXi->GetP();
2304
2305 // Bachelor
2306 if (TMath::Abs(fESDpid->NumberOfSigmasTPC( bachTrackXi,AliPID::kPion)) < 3) lIsBachelorPionForTPC = kTRUE;
2307 if (bachMomInnerWall < 0.350 && TMath::Abs(fESDpid->NumberOfSigmasTPC( bachTrackXi,AliPID::kKaon)) < 5) lIsBachelorKaonForTPC = kTRUE;
2308 if (bachMomInnerWall > 0.350 && TMath::Abs(fESDpid->NumberOfSigmasTPC( bachTrackXi,AliPID::kKaon)) < 3) lIsBachelorKaonForTPC = kTRUE;
2309
2310 // Negative V0 daughter
2311 if (TMath::Abs(fESDpid->NumberOfSigmasTPC( nTrackXi,AliPID::kPion )) < 3 ) lIsNegPionForTPC = kTRUE;
2312 if (nMomInnerWall < 0.6 && TMath::Abs(fESDpid->NumberOfSigmasTPC( nTrackXi,AliPID::kProton ) ) < 5 ) lIsNegProtonForTPC = kTRUE;
2313 if (nMomInnerWall > 0.6 && TMath::Abs(fESDpid->NumberOfSigmasTPC( nTrackXi,AliPID::kProton ) ) < 3 ) lIsNegProtonForTPC = kTRUE;
2314
2315 // Positive V0 daughter
2316 if (TMath::Abs(fESDpid->NumberOfSigmasTPC( pTrackXi,AliPID::kPion )) < 3 ) lIsPosPionForTPC = kTRUE;
2317 if (pMomInnerWall < 0.6 && TMath::Abs(fESDpid->NumberOfSigmasTPC( pTrackXi,AliPID::kProton )) < 5) lIsPosProtonForTPC = kTRUE;
2318 if (pMomInnerWall > 0.6 && TMath::Abs(fESDpid->NumberOfSigmasTPC( pTrackXi,AliPID::kProton )) < 3) lIsPosProtonForTPC = kTRUE;
2319 }
2320 */
2321
2322
2323
f87cd3db 2324
2325 // - II.Step 6 : extra info for QA (ESD)
3873f6ee 2326 // miscellaneous pieces of info that may help regarding data quality assessment.
45ee0bcc 2327 //-------------
2328
2329 xi->GetPxPyPz( lXiMomX, lXiMomY, lXiMomZ );
2330 lXiTransvMom = TMath::Sqrt( lXiMomX*lXiMomX + lXiMomY*lXiMomY );
2331 lXiTotMom = TMath::Sqrt( lXiMomX*lXiMomX + lXiMomY*lXiMomY + lXiMomZ*lXiMomZ );
2332
2333 xi->GetBPxPyPz( lBachMomX, lBachMomY, lBachMomZ );
2334 lBachTransvMom = TMath::Sqrt( lBachMomX*lBachMomX + lBachMomY*lBachMomY );
2335 lBachTotMom = TMath::Sqrt( lBachMomX*lBachMomX + lBachMomY*lBachMomY + lBachMomZ*lBachMomZ );
2336
2337 lChargeXi = xi->Charge();
2338
2339 lV0toXiCosineOfPointingAngle = xi->GetV0CosineOfPointingAngle( lPosXi[0], lPosXi[1], lPosXi[2] );
2340
2341 lRapXi = xi->RapXi();
2342 lRapOmega = xi->RapOmega();
2343 lEta = xi->Eta();
2344 lTheta = xi->Theta() *180.0/TMath::Pi();
2345 lPhi = xi->Phi() *180.0/TMath::Pi();
2346 lAlphaXi = xi->AlphaXi();
2347 lPtArmXi = xi->PtArmXi();
2348
2349
f3dc9369 2350 //FIXME : Extra-cut = Anti-splitting cut for lambda daughters
7e504402 2351 Bool_t kAntiSplittingLambda = kFALSE;
f3dc9369 2352
2353 if(kAntiSplittingLambda){
2354 Double_t lNMomX = 0., lNMomY = 0., lNMomZ = 0.;
2355 Double_t lPMomX = 0., lPMomY = 0., lPMomZ = 0.;
2356
2357 xi->GetPPxPyPz(lPMomX, lPMomY, lPMomZ);
2358 xi->GetNPxPyPz(lNMomX, lNMomY, lNMomZ);
2359
2360 if( xi->Charge() < 0){// Xi- or Omega-
7e504402 2361 if(TMath::Abs(lBachTransvMom - TMath::Sqrt( lNMomX*lNMomX + lNMomY*lNMomY ) ) < 0.075) continue;
f3dc9369 2362 }
2363 else { //Xi+ or Omega+
7e504402 2364 if(TMath::Abs(lBachTransvMom - TMath::Sqrt( lPMomX*lPMomX + lPMomY*lPMomY ) ) < 0.075) continue;
f3dc9369 2365 }
2366 }
2367
e8fd19de 2368 //FIXME : Just to know which file is currently open : locate the file containing Xi
2369 // cout << "Name of the file containing Xi candidate(s) :"
2370 // << CurrentFileName()
2371 // << " / entry: " << Entry()
2372 // << " / in file: " << lESDevent->GetEventNumberInFile() // <- Cvetan / From Mihaela: AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()->GetTree()->GetReadEntry();
2373 // << " : mass(Xi) = " << xi->GetEffMassXi()
2374 // << " / charge = " << lChargeXi
2375 // << " / pt(Casc) = " << lXiTransvMom
c525f360 2376 // << " / Decay 2d R(Xi) = " << lXiRadius2D
e8fd19de 2377 // << " / Track Index(Pos) = " << lIdxPosXi << "/ Nb(TPC clusters) = " << lPosTPCClusters
2378 // << " / Track Index(Neg) = " << lIdxNegXi << "/ Nb(TPC clusters) = " << lNegTPCClusters
2379 // << " / Track Index(Bach) = " << lBachIdx << "/ Nb(TPC clusters) = " << lBachTPCClusters
2380 // << endl;
90926f02 2381
32599cd4 2382
2383 // II.Step 7 - Complementary info for monitoring the cascade cut variables
2384
a786bd57 2385 //const AliMultiplicity *lAliMult = lESDevent->GetMultiplicity();
2386 //lSPDTrackletsMultiplicity = lAliMult->GetNumberOfTracklets();
2387 // --> now provided by AliESDEvent::EstimateMultiplicity ...
32599cd4 2388
2389 // II.Step 8 - Azimuthal correlation study
3873f6ee 2390 //-------------
2391
2392 lTVect3MomXi.SetXYZ( lXiMomX, lXiMomY, lXiMomZ );
2393 lArrTrackID[0] = pTrackXi ->GetID();
2394 lArrTrackID[1] = nTrackXi ->GetID();
2395 lArrTrackID[2] = bachTrackXi->GetID();
2396
2397
45ee0bcc 2398 }// end of ESD treatment
2399
2400
2401 if(fAnalysisType == "AOD"){
2402
2403 // -------------------------------------
32599cd4 2404 // II.AOD - Calcultaion Part dedicated to Xi vertices (ESD)
45ee0bcc 2405
2406 const AliAODcascade *xi = lAODevent->GetCascade(iXi);
2407 if (!xi) continue;
2408
2409 // Just to know which file is currently open : locate the file containing Xi
2410 // cout << "Name of the file containing Xi candidate(s) :" << fesdH->GetTree()->GetCurrentFile()->GetName() << endl;
2411
2412
2413 // - II.Step 1 : Characteristics of the event : prim. Vtx + magnetic field (AOD)
2414 //-------------
2415
45ee0bcc 2416
9d670198 2417 lTrkgPrimaryVtxRadius3D = -500. ;
2418 // FIXME : We don't have the different prim. vertex at the AOD level -> nothing to do.
45ee0bcc 2419
45ee0bcc 2420 lBestPrimaryVtxRadius3D = TMath::Sqrt( lBestPrimaryVtxPos[0] * lBestPrimaryVtxPos[0] +
2421 lBestPrimaryVtxPos[1] * lBestPrimaryVtxPos[1] +
2422 lBestPrimaryVtxPos[2] * lBestPrimaryVtxPos[2] );
2423
2424
2425 // - II.Step 2 : Assigning the necessary variables for specific AliAODcascade data members (AOD)
2426 //-------------
2427
2428 lEffMassXi = xi->MassXi(); // default working hypothesis : cascade = Xi- decay
2429 lChi2Xi = xi->Chi2Xi();
2430 lDcaXiDaughters = xi->DcaXiDaughters();
2431 lXiCosineOfPointingAngle = xi->CosPointingAngleXi( lBestPrimaryVtxPos[0],
2432 lBestPrimaryVtxPos[1],
2433 lBestPrimaryVtxPos[2] );
2434 // Take care :
2435 // the best available vertex should be used (like in AliCascadeVertexer)
2436
2437 lPosXi[0] = xi->DecayVertexXiX();
2438 lPosXi[1] = xi->DecayVertexXiY();
2439 lPosXi[2] = xi->DecayVertexXiZ();
c525f360 2440 lXiRadius2D = TMath::Sqrt( lPosXi[0]*lPosXi[0] + lPosXi[1]*lPosXi[1] );
2441 lXiRadius3D = TMath::Sqrt( lPosXi[0]*lPosXi[0] + lPosXi[1]*lPosXi[1] + lPosXi[2]*lPosXi[2] );
45ee0bcc 2442
2443
2444 // - II.Step 3 : around the tracks : Bach + V0 (AOD)
2445 // ~ Necessary variables for AODcascade data members coming from the AODv0 part (inheritance)
2446 //-------------
2447
2448 lChargeXi = xi->ChargeXi();
2449
2450 if( lChargeXi < 0)
2451 lInvMassLambdaAsCascDghter = xi->MassLambda();
2452 else
2453 lInvMassLambdaAsCascDghter = xi->MassAntiLambda();
2454
2455 lDcaV0DaughtersXi = xi->DcaV0Daughters();
2456 lV0Chi2Xi = xi->Chi2V0();
2457
2458 lV0CosineOfPointingAngleXi = xi->CosPointingAngle( lBestPrimaryVtxPos );
2459 lDcaV0ToPrimVertexXi = xi->DcaV0ToPrimVertex();
2460
2461 lDcaBachToPrimVertexXi = xi->DcaBachToPrimVertex();
2462
2463
2464 lPosV0Xi[0] = xi->DecayVertexV0X();
2465 lPosV0Xi[1] = xi->DecayVertexV0Y();
2466 lPosV0Xi[2] = xi->DecayVertexV0Z();
2467 lV0RadiusXi = TMath::Sqrt( lPosV0Xi[0]*lPosV0Xi[0] + lPosV0Xi[1]*lPosV0Xi[1] );
2468
2469 lDcaPosToPrimVertexXi = xi->DcaPosToPrimVertex();
2470 lDcaNegToPrimVertexXi = xi->DcaNegToPrimVertex();
2471
2472
2473 // - II.Step 4 : around effective masses (AOD)
2474 // ~ change mass hypotheses to cover all the possibilities : Xi-/+, Omega -/+
2475 //-------------
2476
2477 if( lChargeXi < 0 ) lInvMassXiMinus = xi->MassXi();
2478 if( lChargeXi > 0 ) lInvMassXiPlus = xi->MassXi();
2479 if( lChargeXi < 0 ) lInvMassOmegaMinus = xi->MassOmega();
2480 if( lChargeXi > 0 ) lInvMassOmegaPlus = xi->MassOmega();
2481
2482
32599cd4 2483 // - II.Step 5 : PID on the daughters (To be developed ...)
f87cd3db 2484 //-------------
2485
32599cd4 2486 // Combined PID
2487
3873f6ee 2488 /*
ff0753e1 2489 // Reasonable guess for the priors for the cascade track sample
a786bd57 2490 Double_t lPriorsGuessXi[5] = {0.0, 0.0, 2, 0, 1, 0,0,0,0,0};
2491 Double_t lPriorsGuessOmega[5] = {0.0, 0.0, 1, 1, 1, 0,0,0,0,0};
2492 AliPID bachPidXi; bachPidXi.SetPriors( lPriorsGuessXi , kTRUE); // kTRUE = for charged particle PID
2493 AliPID bachPidOmega; bachPidOmega.SetPriors( lPriorsGuessOmega , kTRUE); // kTRUE = for charged particle PID
ff0753e1 2494
3873f6ee 2495 const AliAODTrack *bachTrackXi = lAODevent->GetTrack( xi->GetBachID() ); // FIXME : GetBachID not implemented ?
ff0753e1 2496
2497 if( bachTrackXi->IsOn(AliESDtrack::kESDpid) ){ // Combined PID exists, the AOD flags = a copy of the ESD ones
2498 Double_t r[10]; bachTrackXi->GetPID(r);
3aedd4a5 2499 bachPidXi.SetProbabilities(r);
2500 bachPidOmega.SetProbabilities(r);
ff0753e1 2501 // Check if the bachelor track is a pion
3aedd4a5 2502 Double_t ppion = bachPidXi.GetProbability(AliPID::kPion);
2503 if (ppion > bachPidXi.GetProbability(AliPID::kElectron) &&
2504 ppion > bachPidXi.GetProbability(AliPID::kMuon) &&
2505 ppion > bachPidXi.GetProbability(AliPID::kKaon) &&
2506 ppion > bachPidXi.GetProbability(AliPID::kProton) ) lIsBachelorPion = kTRUE;
ff0753e1 2507 // Check if the bachelor track is a kaon
3aedd4a5 2508 Double_t pkaon = bachPidOmega.GetProbability(AliPID::kKaon);
2509 if (pkaon > bachPidOmega.GetProbability(AliPID::kElectron) &&
2510 pkaon > bachPidOmega.GetProbability(AliPID::kMuon) &&
2511 pkaon > bachPidOmega.GetProbability(AliPID::kPion) &&
2512 pkaon > bachPidOmega.GetProbability(AliPID::kProton) ) lIsBachelorKaon = kTRUE;
ff0753e1 2513
2514 }// end if bachelor track with existing combined PID
2515 */
f87cd3db 2516
32599cd4 2517 // TPC PID
f87cd3db 2518
2519 // - II.Step 6 : extra info for QA (AOD)
45ee0bcc 2520 // miscellaneous pieces onf info that may help regarding data quality assessment.
2521 //-------------
2522
2523 lXiMomX = xi->MomXiX();
2524 lXiMomY = xi->MomXiY();
2525 lXiMomZ = xi->MomXiZ();
2526 lXiTransvMom = TMath::Sqrt( lXiMomX*lXiMomX + lXiMomY*lXiMomY );
2527 lXiTotMom = TMath::Sqrt( lXiMomX*lXiMomX + lXiMomY*lXiMomY + lXiMomZ*lXiMomZ );
2528
2529 lBachMomX = xi->MomBachX();
2530 lBachMomY = xi->MomBachY();
2531 lBachMomZ = xi->MomBachZ();
2532 lBachTransvMom = TMath::Sqrt( lBachMomX*lBachMomX + lBachMomY*lBachMomY );
2533 lBachTotMom = TMath::Sqrt( lBachMomX*lBachMomX + lBachMomY*lBachMomY + lBachMomZ*lBachMomZ );
2534
2535
2536 lV0toXiCosineOfPointingAngle = xi->CosPointingAngle( xi->GetDecayVertexXi() );
2537
2538 lRapXi = xi->RapXi();
2539 lRapOmega = xi->RapOmega();
2540 lEta = xi->Eta(); // Will not work ! need a method Pz(), Py() Px()
2541 lTheta = xi->Theta() *180.0/TMath::Pi(); // in AODcascade.
2542 lPhi = xi->Phi() *180.0/TMath::Pi(); // Here, we will get eta, theta, phi for the V0 ...
2543 lAlphaXi = xi->AlphaXi();
2544 lPtArmXi = xi->PtArmXi();
2545
32599cd4 2546 // II.Step 7 - Complementary info for monitoring the cascade cut variables
f3dc9369 2547 //FIXME : missing for AOD : Tacklet Multiplicity + TPCCluster
3873f6ee 2548
32599cd4 2549 // II.Step 8 - Azimuthal correlation study
3873f6ee 2550 //-------------
2551
2552 lTVect3MomXi.SetXYZ( lXiMomX, lXiMomY, lXiMomZ );
2553
2554 AliAODTrack *pTrackXi = dynamic_cast<AliAODTrack*>( xi->GetDaughter(0) );
2555 AliAODTrack *nTrackXi = dynamic_cast<AliAODTrack*>( xi->GetDaughter(1) );
2556 AliAODTrack *bachTrackXi = dynamic_cast<AliAODTrack*>( xi->GetDecayVertexXi()->GetDaughter(0) );
2557 if (!pTrackXi || !nTrackXi || !bachTrackXi ) {
7e504402 2558 AliWarning("ERROR: Could not retrieve one of the 3 AOD daughter tracks of the cascade ...");
3873f6ee 2559 continue;
2560 }
2561
2562 lArrTrackID[0] = pTrackXi ->GetID();
2563 lArrTrackID[1] = nTrackXi ->GetID();
2564 lArrTrackID[2] = bachTrackXi->GetID();
2565
45ee0bcc 2566 }// end of AOD treatment
2567
2568
32599cd4 2569 // -------------------------------------
9d670198 2570 // II.Fill - Filling the TH1,2,3Fs, HnSparses, CFContainers, FOR events with CASCADES !
e8fd19de 2571
2572 // if( lIsBachelorKaonForTPC )
2573 // // FIXME : Just to know which file is currently open : locate the file containing Xi
2574 // cout << "Name of the file containing Omega candidate(s) :"
2575 // << CurrentFileName()
2576 // << " / entry: " << Entry()
2577 // << " / in file: " << lESDevent->GetEventNumberInFile() // <- Cvetan / From Mihaela: AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()->GetTree()->GetReadEntry();
2578 // << " : mass(Omega+) = " << lInvMassOmegaPlus
2579 // << " : mass(Omega-) = " << lInvMassOmegaMinus
2580 // << " / charge = " << lChargeXi
2581 // << " / pt(Casc) = " << lXiTransvMom
c525f360 2582 // << " / Decay 2d R(Xi) = " << lXiRadius2D
e8fd19de 2583 // << endl;
45ee0bcc 2584
2585
32599cd4 2586 // - II.Fill.Step 1 : primary vertex
7e504402 2587
2588 fHistTPCrefitTrackMultiplicityForCascadeEvt->Fill( nTrackWithTPCrefitMultiplicity );
c525f360 2589 fHistPrimaryTrackMultiplicityForCascadeEvt ->Fill( nTrackPrimaryMultiplicity );
7e504402 2590
2591 fHistPosV0TPCClusters ->Fill( lPosTPCClusters );
2592 fHistNegV0TPCClusters ->Fill( lNegTPCClusters );
2593 fHistBachTPCClusters ->Fill( lBachTPCClusters );
e8fd19de 2594
2595 f2dHistTPCdEdxOfCascDghters ->Fill( lInnerWallMomCascDghters[0] , lTPCSignalCascDghters[0] );
2596 f2dHistTPCdEdxOfCascDghters ->Fill( lInnerWallMomCascDghters[1] , lTPCSignalCascDghters[1] );
2597 f2dHistTPCdEdxOfCascDghters ->Fill( lInnerWallMomCascDghters[2] , lTPCSignalCascDghters[2] );
2598
45ee0bcc 2599 fHistVtxStatus ->Fill( lStatusTrackingPrimVtx ); // 1 if tracking vtx = ok
2600
2601 if( lStatusTrackingPrimVtx ){
9d670198 2602 fHistPosTrkgPrimaryVtxXForCascadeEvt ->Fill( lTrkgPrimaryVtxPos[0] );
2603 fHistPosTrkgPrimaryVtxYForCascadeEvt ->Fill( lTrkgPrimaryVtxPos[1] );
2604 fHistPosTrkgPrimaryVtxZForCascadeEvt ->Fill( lTrkgPrimaryVtxPos[2] );
2605 fHistTrkgPrimaryVtxRadius ->Fill( lTrkgPrimaryVtxRadius3D );
45ee0bcc 2606 }
2607
9d670198 2608 fHistPosBestPrimaryVtxXForCascadeEvt ->Fill( lBestPrimaryVtxPos[0] );
2609 fHistPosBestPrimaryVtxYForCascadeEvt ->Fill( lBestPrimaryVtxPos[1] );
2610 fHistPosBestPrimaryVtxZForCascadeEvt ->Fill( lBestPrimaryVtxPos[2] );
2611 fHistBestPrimaryVtxRadius ->Fill( lBestPrimaryVtxRadius3D );
45ee0bcc 2612
2613 f2dHistTrkgPrimVtxVsBestPrimVtx->Fill( lTrkgPrimaryVtxRadius3D, lBestPrimaryVtxRadius3D );
2614
e8fd19de 2615 // **************************** With PID on ? ... for the signal region ? ************FIXME**************************************
2616 if( ( (lChargeXi<0) && lIsBachelorPionForTPC && lIsPosProtonForTPC && lIsNegPionForTPC ) ||
2617 ( (lChargeXi>0) && lIsBachelorPionForTPC && lIsNegProtonForTPC && lIsPosPionForTPC ) )
2618 // NOTE :
c525f360 2619 // with this PID condition, it could happen that a cascade candidate satisfies the wrong requirement,
e8fd19de 2620 // e.g. one looks at a Xi- candidate for which lIsBachelorPionForTPC && lIsPosProtonForTPC && lIsNegPionForTPC = kFALSE
2621 // Expectation: it should be excluded.
2622 // but lIsBachelorPionForTPC && lIsNegProtonForTPC && lIsPosPionForTPC = kTRUE
2623 // then this bad Xi-candidate will contribute anyway (OR condition).
2624 // Hence : the extra condition on the sign of the Cascade
2625 {
2626 // if( TMath::Abs( lInvMassXiMinus-1.3217 ) < 0.010 || TMath::Abs( lInvMassXiPlus-1.3217 ) < 0.010){} }
2627
2628 // II.Fill.Step 2
2629 fHistEffMassXi ->Fill( lEffMassXi );
2630 fHistChi2Xi ->Fill( lChi2Xi ); // Flag CascadeVtxer: Cut Variable a
2631 fHistDcaXiDaughters ->Fill( lDcaXiDaughters ); // Flag CascadeVtxer: Cut Variable e
2632 fHistDcaBachToPrimVertex ->Fill( lDcaBachToPrimVertexXi ); // Flag CascadeVtxer: Cut Variable d
2633 fHistXiCosineOfPointingAngle ->Fill( lXiCosineOfPointingAngle ); // Flag CascadeVtxer: Cut Variable f
c525f360 2634 fHistXiRadius ->Fill( lXiRadius2D ); // Flag CascadeVtxer: Cut Variable g+h
e8fd19de 2635
2636
2637 // II.Fill.Step 3
2638 fHistMassLambdaAsCascDghter ->Fill( lInvMassLambdaAsCascDghter ); // Flag CascadeVtxer: Cut Variable c
2639 fHistV0Chi2Xi ->Fill( lV0Chi2Xi );
2640 fHistDcaV0DaughtersXi ->Fill( lDcaV0DaughtersXi );
2641 fHistV0CosineOfPointingAngleXi ->Fill( lV0CosineOfPointingAngleXi );
2642 fHistV0RadiusXi ->Fill( lV0RadiusXi );
2643
2644 fHistDcaV0ToPrimVertexXi ->Fill( lDcaV0ToPrimVertexXi ); // Flag CascadeVtxer: Cut Variable b
2645 fHistDcaPosToPrimVertexXi ->Fill( lDcaPosToPrimVertexXi );
2646 fHistDcaNegToPrimVertexXi ->Fill( lDcaNegToPrimVertexXi );
2647
90926f02 2648
e8fd19de 2649 // II.Fill.Step 4 : extra QA info
2650
2651 fHistChargeXi ->Fill( lChargeXi );
2652 fHistV0toXiCosineOfPointingAngle->Fill( lV0toXiCosineOfPointingAngle );
2653
c525f360 2654 if( TMath::Abs( lInvMassXiMinus-1.3217 ) < 0.010 || TMath::Abs( lInvMassXiPlus-1.3217 ) < 0.010){// One InvMass should be different from 0
e8fd19de 2655 fHistXiTransvMom ->Fill( lXiTransvMom );
2656 fHistXiTotMom ->Fill( lXiTotMom );
2657
2658 fHistBachTransvMomXi ->Fill( lBachTransvMom );
2659 fHistBachTotMomXi ->Fill( lBachTotMom );
2660
2661 fHistRapXi ->Fill( lRapXi );
2662 fHistEtaXi ->Fill( lEta );
2663 fHistThetaXi ->Fill( lTheta );
2664 fHistPhiXi ->Fill( lPhi );
c525f360 2665
e8fd19de 2666 }
c525f360 2667
2668 if( (lChargeXi < 0) && (TMath::Abs( lInvMassXiMinus-1.3217 ) < 0.010) ) fHistcTauXiMinus ->Fill( lXiRadius3D * 1.3271/lXiTotMom );
2669 if( (lChargeXi > 0) && (TMath::Abs( lInvMassXiPlus -1.3217 ) < 0.010) ) fHistcTauXiPlus ->Fill( lXiRadius3D * 1.3271/lXiTotMom );
45ee0bcc 2670
c525f360 2671 if( TMath::Abs( lInvMassOmegaMinus-1.672 ) < 0.010 || TMath::Abs( lInvMassOmegaPlus-1.672 ) < 0.010 ){// One InvMass should be different from 0
e8fd19de 2672 fHistRapOmega ->Fill( lRapOmega );
c525f360 2673
e8fd19de 2674 }
c525f360 2675
2676 if( (lChargeXi < 0) && (TMath::Abs( lInvMassOmegaMinus-1.672 ) < 0.010) ) fHistcTauOmegaMinus ->Fill( lXiRadius3D * 1.67245/lXiTotMom );
2677 if( (lChargeXi > 0) && (TMath::Abs( lInvMassOmegaPlus- 1.672 ) < 0.010) ) fHistcTauOmegaPlus ->Fill( lXiRadius3D * 1.67245/lXiTotMom );
e8fd19de 2678
c525f360 2679 f2dHistArmenteros ->Fill( lChargeXi*lAlphaXi, lPtArmXi );
e8fd19de 2680 }// end with PID ...
32599cd4 2681
2682 // II.Fill.Step 5 : inv mass plots 1D
2683 if( lChargeXi < 0 ){
2684 fHistMassXiMinus ->Fill( lInvMassXiMinus );
2685 fHistMassOmegaMinus ->Fill( lInvMassOmegaMinus );
2686 if(lIsBachelorPion) fHistMassWithCombPIDXiMinus ->Fill( lInvMassXiMinus );
2687 if(lIsBachelorKaon) fHistMassWithCombPIDOmegaMinus ->Fill( lInvMassOmegaMinus );
2688 }
2689
2690 if( lChargeXi > 0 ){
2691 fHistMassXiPlus ->Fill( lInvMassXiPlus );
2692 fHistMassOmegaPlus ->Fill( lInvMassOmegaPlus );
2693 if(lIsBachelorPion) fHistMassWithCombPIDXiPlus ->Fill( lInvMassXiPlus );
2694 if(lIsBachelorKaon) fHistMassWithCombPIDOmegaPlus ->Fill( lInvMassOmegaPlus );
2695 }
2696
2697
2698 // II.Fill.Step 6 : inv mass plots 2D, 3D
45ee0bcc 2699 if( lChargeXi < 0 ) {
2700 f2dHistEffMassLambdaVsEffMassXiMinus->Fill( lInvMassLambdaAsCascDghter, lInvMassXiMinus );
2701 f2dHistEffMassXiVsEffMassOmegaMinus ->Fill( lInvMassXiMinus, lInvMassOmegaMinus );
c525f360 2702 f2dHistXiRadiusVsEffMassXiMinus ->Fill( lXiRadius2D, lInvMassXiMinus );
2703 f2dHistXiRadiusVsEffMassOmegaMinus ->Fill( lXiRadius2D, lInvMassOmegaMinus );
ff0753e1 2704 f3dHistXiPtVsEffMassVsYXiMinus ->Fill( lXiTransvMom, lInvMassXiMinus, lRapXi );
2705 f3dHistXiPtVsEffMassVsYOmegaMinus ->Fill( lXiTransvMom, lInvMassOmegaMinus, lRapOmega );
45ee0bcc 2706 }
2707 else{
2708 f2dHistEffMassLambdaVsEffMassXiPlus ->Fill( lInvMassLambdaAsCascDghter, lInvMassXiPlus );
2709 f2dHistEffMassXiVsEffMassOmegaPlus ->Fill( lInvMassXiPlus, lInvMassOmegaPlus );
c525f360 2710 f2dHistXiRadiusVsEffMassXiPlus ->Fill( lXiRadius2D, lInvMassXiPlus);
2711 f2dHistXiRadiusVsEffMassOmegaPlus ->Fill( lXiRadius2D, lInvMassOmegaPlus );
ff0753e1 2712 f3dHistXiPtVsEffMassVsYXiPlus ->Fill( lXiTransvMom, lInvMassXiPlus, lRapXi );
2713 f3dHistXiPtVsEffMassVsYOmegaPlus ->Fill( lXiTransvMom, lInvMassOmegaPlus, lRapOmega );
45ee0bcc 2714 }
3873f6ee 2715
32599cd4 2716 // - Filling the AliCFContainers related to PID
2717
2718 Double_t lContainerPIDVars[4] = {0.0};
2719
2720 // Xi Minus
2721 if( lChargeXi < 0 ) {
2722 lContainerPIDVars[0] = lXiTransvMom ;
2723 lContainerPIDVars[1] = lInvMassXiMinus ;
2724 lContainerPIDVars[2] = lRapXi ;
c525f360 2725 lContainerPIDVars[3] = nTrackPrimaryMultiplicity; // FIXME : nTrackPrimaryMultiplicity not set for AOD ... = -1
32599cd4 2726
2727 // No PID
2728 fCFContCascadePIDXiMinus->Fill(lContainerPIDVars, 0); // No PID
2729 // TPC PID
2730 if( lIsBachelorPionForTPC )
e8fd19de 2731 fCFContCascadePIDXiMinus->Fill(lContainerPIDVars, 1); // TPC PID / 4-#sigma cut on Bachelor track
32599cd4 2732
2733 if( lIsBachelorPionForTPC &&
2734 lIsPosProtonForTPC )
e8fd19de 2735 fCFContCascadePIDXiMinus->Fill(lContainerPIDVars, 2); // TPC PID / 4-#sigma cut on Bachelor+Baryon tracks
32599cd4 2736
2737 if( lIsBachelorPionForTPC &&
2738 lIsPosProtonForTPC &&
2739 lIsNegPionForTPC )
e8fd19de 2740 fCFContCascadePIDXiMinus->Fill(lContainerPIDVars, 3); // TPC PID / 4-#sigma cut on Bachelor+Baryon+Meson tracks
32599cd4 2741
2742 // Combined PID
2743 if( lIsBachelorPion )
2744 fCFContCascadePIDXiMinus->Fill(lContainerPIDVars, 4); // Comb. PID / Bachelor
2745
2746 if( lIsBachelorPion &&
2747 lIsPosInXiProton )
2748 fCFContCascadePIDXiMinus->Fill(lContainerPIDVars, 5); // Comb. PID / Bachelor+Baryon
2749
2750 if(lIsBachelorPion &&
2751 lIsPosInXiProton &&
2752 lIsNegInXiPion )
2753 fCFContCascadePIDXiMinus->Fill(lContainerPIDVars, 6); // Comb. PID / Bachelor+Baryon+Meson
2754 }
2755
2756 lContainerPIDVars[0] = 0.; lContainerPIDVars[1] = 0.; lContainerPIDVars[2] = 0.; lContainerPIDVars[3] = 0.;
2757
2758 // Xi Plus
2759 if( lChargeXi > 0 ) {
2760 lContainerPIDVars[0] = lXiTransvMom ;
2761 lContainerPIDVars[1] = lInvMassXiPlus ;
2762 lContainerPIDVars[2] = lRapXi ;
c525f360 2763 lContainerPIDVars[3] = nTrackPrimaryMultiplicity; // FIXME : nTrackPrimaryMultiplicity not set for AOD ... = -1
32599cd4 2764
2765 // No PID
2766 fCFContCascadePIDXiPlus->Fill(lContainerPIDVars, 0); // No PID
2767 // TPC PID
2768 if( lIsBachelorPionForTPC )
e8fd19de 2769 fCFContCascadePIDXiPlus->Fill(lContainerPIDVars, 1); // TPC PID / 4-#sigma cut on Bachelor track
32599cd4 2770
2771 if( lIsBachelorPionForTPC &&
2772 lIsNegProtonForTPC )
e8fd19de 2773 fCFContCascadePIDXiPlus->Fill(lContainerPIDVars, 2); // TPC PID / 4-#sigma cut on Bachelor+Baryon tracks
32599cd4 2774
2775 if( lIsBachelorPionForTPC &&
2776 lIsNegProtonForTPC &&
2777 lIsPosPionForTPC )
e8fd19de 2778 fCFContCascadePIDXiPlus->Fill(lContainerPIDVars, 3); // TPC PID / 4-#sigma cut on Bachelor+Baryon+Meson tracks
32599cd4 2779
2780 // Combined PID
2781 if( lIsBachelorPion )
2782 fCFContCascadePIDXiPlus->Fill(lContainerPIDVars, 4); // Comb. PID / Bachelor
2783
2784 if( lIsBachelorPion &&
2785 lIsNegInXiProton )
2786 fCFContCascadePIDXiPlus->Fill(lContainerPIDVars, 5); // Comb. PID / Bachelor+Baryon
2787
2788 if(lIsBachelorPion &&
2789 lIsNegInXiProton &&
2790 lIsPosInXiPion )
2791 fCFContCascadePIDXiPlus->Fill(lContainerPIDVars, 6); // Comb. PID / Bachelor+Baryon+Meson
2792 }
2793
2794 lContainerPIDVars[0] = 0.; lContainerPIDVars[1] = 0.; lContainerPIDVars[2] = 0.; lContainerPIDVars[3] = 0.;
2795
2796 // Omega Minus
a786bd57 2797 if( lChargeXi < 0 && (TMath::Abs( lInvMassXiMinus-1.3217 ) > 0.008) ) {
2798 // In order to reduce the background contribution from Xi to Omega,
2799 // --> trial to reject the neg. candidate whose mass under Xi hypothesis
2800 // falls into the Xi window (Mpdg +- 8 MeV/c2)
32599cd4 2801 lContainerPIDVars[0] = lXiTransvMom ;
2802 lContainerPIDVars[1] = lInvMassOmegaMinus ;
2803 lContainerPIDVars[2] = lRapOmega ;
c525f360 2804 lContainerPIDVars[3] = nTrackPrimaryMultiplicity; // FIXME : nTrackPrimaryMultiplicity not set for AOD ... = -1
32599cd4 2805
2806 // No PID
2807 fCFContCascadePIDOmegaMinus->Fill(lContainerPIDVars, 0); // No PID
2808 // TPC PID
2809 if( lIsBachelorKaonForTPC )
e8fd19de 2810 fCFContCascadePIDOmegaMinus->Fill(lContainerPIDVars, 1); // TPC PID / 4-#sigma cut on Bachelor track
32599cd4 2811
2812 if( lIsBachelorKaonForTPC &&
2813 lIsPosProtonForTPC )
e8fd19de 2814 fCFContCascadePIDOmegaMinus->Fill(lContainerPIDVars, 2); // TPC PID / 4-#sigma cut on Bachelor+Baryon tracks
32599cd4 2815
2816 if( lIsBachelorKaonForTPC &&
2817 lIsPosProtonForTPC &&
2818 lIsNegPionForTPC )
e8fd19de 2819 fCFContCascadePIDOmegaMinus->Fill(lContainerPIDVars, 3); // TPC PID / 4-#sigma cut on Bachelor+Baryon+Meson tracks
32599cd4 2820
2821 // Combined PID
2822 if( lIsBachelorKaon )
2823 fCFContCascadePIDOmegaMinus->Fill(lContainerPIDVars, 4); // Comb. PID / Bachelor
2824
2825 if( lIsBachelorKaon &&
2826 lIsPosInOmegaProton )
2827 fCFContCascadePIDOmegaMinus->Fill(lContainerPIDVars, 5); // Comb. PID / Bachelor+Baryon
2828
2829 if(lIsBachelorKaon &&
2830 lIsPosInOmegaProton &&
2831 lIsNegInOmegaPion )
2832 fCFContCascadePIDOmegaMinus->Fill(lContainerPIDVars, 6); // Comb. PID / Bachelor+Baryon+Meson
2833 }
2834
2835 lContainerPIDVars[0] = 0.; lContainerPIDVars[1] = 0.; lContainerPIDVars[2] = 0.; lContainerPIDVars[3] = 0.;
2836
2837 // Omega Plus
a786bd57 2838 if( lChargeXi > 0 && (TMath::Abs( lInvMassXiPlus-1.3217 ) > 0.008) ) {
2839 // In order to reduce the background contribution from Xi to Omega,
2840 // --> trial to reject the neg. candidate whose mass under Xi hypothesis
2841 // falls into the Xi window (Mpdg +- 8 MeV/c2)
32599cd4 2842 lContainerPIDVars[0] = lXiTransvMom ;
2843 lContainerPIDVars[1] = lInvMassOmegaPlus ;
2844 lContainerPIDVars[2] = lRapOmega ;
c525f360 2845 lContainerPIDVars[3] = nTrackPrimaryMultiplicity; // FIXME : nTrackPrimaryMultiplicity not set for AOD ... = -1
32599cd4 2846
2847 // No PID
2848 fCFContCascadePIDOmegaPlus->Fill(lContainerPIDVars, 0); // No PID
2849 // TPC PID
2850 if( lIsBachelorKaonForTPC )
e8fd19de 2851 fCFContCascadePIDOmegaPlus->Fill(lContainerPIDVars, 1); // TPC PID / 4-#sigma cut on Bachelor track
32599cd4 2852
2853 if( lIsBachelorKaonForTPC &&
2854 lIsNegProtonForTPC )
e8fd19de 2855 fCFContCascadePIDOmegaPlus->Fill(lContainerPIDVars, 2); // TPC PID / 4-#sigma cut on Bachelor+Baryon tracks
32599cd4 2856
2857 if( lIsBachelorKaonForTPC &&
2858 lIsNegProtonForTPC &&
2859 lIsPosPionForTPC )
e8fd19de 2860 fCFContCascadePIDOmegaPlus->Fill(lContainerPIDVars, 3); // TPC PID / 4-#sigma cut on Bachelor+Baryon+Meson tracks
32599cd4 2861
2862 // Combined PID
2863 if( lIsBachelorKaon )
2864 fCFContCascadePIDOmegaPlus->Fill(lContainerPIDVars, 4); // Comb. PID / Bachelor
2865
2866 if( lIsBachelorKaon &&
2867 lIsNegInOmegaProton )
2868 fCFContCascadePIDOmegaPlus->Fill(lContainerPIDVars, 5); // Comb. PID / Bachelor+Baryon
2869
2870 if(lIsBachelorKaon &&
2871 lIsNegInOmegaProton &&
2872 lIsPosInOmegaPion )
2873 fCFContCascadePIDOmegaPlus->Fill(lContainerPIDVars, 6); // Comb. PID / Bachelor+Baryon+Meson
2874 }
2875
e8fd19de 2876
2877 // II.Fill.Step 7 : filling the AliCFContainer (optimisation of topological selections)
2878 Double_t lContainerCutVars[20] = {0.0};
2879
2880 lContainerCutVars[0] = lDcaXiDaughters;
2881 lContainerCutVars[1] = lDcaBachToPrimVertexXi;
2882 lContainerCutVars[2] = lXiCosineOfPointingAngle;
c525f360 2883 lContainerCutVars[3] = lXiRadius2D;
e8fd19de 2884 lContainerCutVars[4] = lInvMassLambdaAsCascDghter;
2885 lContainerCutVars[5] = lDcaV0DaughtersXi;
2886 lContainerCutVars[6] = lV0CosineOfPointingAngleXi;
2887 lContainerCutVars[7] = lV0RadiusXi;
2888 lContainerCutVars[8] = lDcaV0ToPrimVertexXi;
2889 lContainerCutVars[9] = lDcaPosToPrimVertexXi;
2890 lContainerCutVars[10] = lDcaNegToPrimVertexXi;
2891
2892 lContainerCutVars[13] = lXiTransvMom;
2893
2894 lContainerCutVars[16] = lBestPrimaryVtxPos[2];
a786bd57 2895 lContainerCutVars[17] = nTrackPrimaryMultiplicity; // FIXME : nTrackPrimaryMultiplicity not checked for AOD ... = -1
2896 lContainerCutVars[18] = nITSandTPCtracksAndSPDtracklets; // FIXME : nITSandTPCtracksAndSPDtracklets is not available for AOD ... = -1
e8fd19de 2897 lContainerCutVars[19] = lBachTPCClusters; // FIXME : BachTPCClusters is not available for AOD ... = -1
2898
2899 if( lChargeXi < 0 ) {
9d670198 2900 lContainerCutVars[11] = lInvMassXiMinus;
e8fd19de 2901 lContainerCutVars[12] = 1.63;
9d670198 2902 lContainerCutVars[14] = lRapXi;
2903 lContainerCutVars[15] = -1.;
e8fd19de 2904 if( lIsBachelorPionForTPC && lIsPosProtonForTPC && lIsNegPionForTPC ) fCFContCascadeCuts->Fill(lContainerCutVars,0); // for Xi-
9d670198 2905
e8fd19de 2906 lContainerCutVars[11] = 1.26;
9d670198 2907 lContainerCutVars[12] = lInvMassOmegaMinus;
2908 lContainerCutVars[14] = -1.;
2909 lContainerCutVars[15] = lRapOmega;
a786bd57 2910 if( lIsBachelorKaonForTPC && lIsPosProtonForTPC && lIsNegPionForTPC
2911 && (TMath::Abs( lInvMassXiMinus-1.3217 ) > 0.008) ) fCFContCascadeCuts->Fill(lContainerCutVars,2); // for Omega-
9d670198 2912 }
e8fd19de 2913 else{
9d670198 2914 lContainerCutVars[11] = lInvMassXiPlus;
e8fd19de 2915 lContainerCutVars[12] = 1.63;
9d670198 2916 lContainerCutVars[14] = lRapXi;
2917 lContainerCutVars[15] = -1.;
e8fd19de 2918 if( lIsBachelorPionForTPC && lIsNegProtonForTPC && lIsPosPionForTPC ) fCFContCascadeCuts->Fill(lContainerCutVars,1); // for Xi+
9d670198 2919
e8fd19de 2920 lContainerCutVars[11] = 1.26;
9d670198 2921 lContainerCutVars[12] = lInvMassOmegaPlus;
2922 lContainerCutVars[14] = -1.;
2923 lContainerCutVars[15] = lRapOmega;
a786bd57 2924 if( lIsBachelorKaonForTPC && lIsNegProtonForTPC && lIsPosPionForTPC
2925 && (TMath::Abs( lInvMassXiPlus-1.3217 ) > 0.008) ) fCFContCascadeCuts->Fill(lContainerCutVars,3); // for Omega+
9d670198 2926 }
e8fd19de 2927
2928
2929 // II.Fill.Step 8 : angular correlations
2930
2931 if( lChargeXi < 0 ){
c525f360 2932 if( lIsBachelorPionForTPC && lIsPosProtonForTPC && lIsNegPionForTPC ) DoAngularCorrelation("Xi-", lInvMassXiMinus, lArrTrackID, lTVect3MomXi, lEta, lRapXi);
a786bd57 2933 if( lIsBachelorKaonForTPC && lIsPosProtonForTPC && lIsNegPionForTPC
2934 && (TMath::Abs( lInvMassXiMinus-1.3217 ) > 0.008) ) DoAngularCorrelation("Omega-", lInvMassOmegaMinus, lArrTrackID, lTVect3MomXi, lEta, lRapOmega);
e8fd19de 2935 }
2936 else{
c525f360 2937 if( lIsBachelorPionForTPC && lIsNegProtonForTPC && lIsPosPionForTPC ) DoAngularCorrelation("Xi+", lInvMassXiPlus, lArrTrackID, lTVect3MomXi, lEta, lRapXi);
a786bd57 2938 if( lIsBachelorKaonForTPC && lIsNegProtonForTPC && lIsPosPionForTPC
2939 && (TMath::Abs( lInvMassXiPlus-1.3217 ) > 0.008) ) DoAngularCorrelation("Omega+", lInvMassOmegaPlus, lArrTrackID, lTVect3MomXi, lEta, lRapOmega);
e8fd19de 2940 }
2941
3873f6ee 2942
45ee0bcc 2943 }// end of the Cascade loop (ESD or AOD)
2944
2945
2946 // Post output data.
2947 PostData(1, fListHistCascade);
2948}
2949
2950
3873f6ee 2951void AliAnalysisTaskCheckCascade::DoAngularCorrelation( const Char_t *lCascType,
2952 Double_t lInvMassCascade,
2953 const Int_t *lArrTrackID,
2954 TVector3 &lTVect3MomXi,
c525f360 2955 Double_t lEtaXi,
2956 Double_t lRapCascade){
3aedd4a5 2957 // Perform the Delta(Phi)Delta(Eta) analysis
2958 // by properly filling the THnSparseF
c525f360 2959
2960 if( fAnalysisType == "AOD") return; // FIXME : AOD development lost, because of AliESDtrack needed by AliESDtrackCuts
2961
2962 TString lStrCascType( lCascType );
2963
2964 // Check the Xi- candidate is within the proper mass window m0 +- 10 MeV
2965 Double_t lCascPdgMass = 0.0;
2966 if( lStrCascType.Contains("Xi") ) lCascPdgMass = 1.3217;
2967 if( lStrCascType.Contains("Omega") ) lCascPdgMass = 1.6724;
2968
2969 if( lInvMassCascade > lCascPdgMass + 0.010) return;
2970 if( lInvMassCascade < lCascPdgMass - 0.010) return;
2971
2972 // Check the Xi- candidate is within the proper rapidity window (flat efficiency)
2973 if( lRapCascade > 0.5 ) return;
2974 if( lRapCascade < -0.5 ) return;
2975
2976
2977 // 3 options to follow for the correlations:
2978 // 1.1 - "TrigAnyCasc-AssoAnyPrim"
2979 // 1.2 - "TrigCascLeading-AssoAnyPrim"
2980 // 2. - "TrigLeadingTrck-AssoCasc"
2981
2982 if(fAngularCorrelationType.Contains("AssoAnyPrim") ){
2983 //----------------------- Option 1 ---------------------------------------------------------------------------------------------------
a786bd57 2984 // Trigger = cascade,
c525f360 2985 // Associated = all the primary tracks in the event.
2986 // 1.1 Cascade = trigger above a certain pt but nothing more complicated than that
2987 // 1.2 Cascade = leading particle (à la heavy-ion -> test for coalescence)
2988
2989 Bool_t kRejectLowPtCascades = kTRUE;
2990 if(kRejectLowPtCascades && (lTVect3MomXi.Pt() < 1.7) ) return;
2991 // Do not even consider the cascade of low pt for the correlation ...
2992
a786bd57 2993 if(fAngularCorrelationType == "TrigCascLeading-AssoAnyPrim"){// Require the Cascade to be the Leading Part. in the event
c525f360 2994
2995 // 1st loop: check there is no primary track with a higher pt ...
2996 // = The cascade is meant to be a leading particle : Pt(Casc) > any primary track in the event
2997 for(Int_t TrckIdx = 0; TrckIdx < (InputEvent())->GetNumberOfTracks() ; TrckIdx++ )
2998 {// Loop over all the tracks of the event
2999
3000 AliESDtrack *lCurrentTrck = dynamic_cast<AliESDtrack*>( (InputEvent())->GetTrack( TrckIdx ) );
3001 if (!lCurrentTrck ) {
3002 AliWarning("ERROR Correl. Study : Could not retrieve a track while looping over the event tracks ...");
3003 continue;
3004 }
3005
3006 if( !fESDtrackCuts->AcceptTrack(lCurrentTrck) ) continue;
3007 // Just consider primary tracks (= reject track that are not primary ones)
3008 if(lTVect3MomXi.Pt() < lCurrentTrck->Pt() ) return;
3009 // Room for improvement: //FIXME
3010 // 1. There is a given resolution on pt : maybe release the cut Pt(casc) < Pt(track)*90% ?
3011 // 2. Apply this cut only when DeltaPhi(casc, track) > 90 deg = when track is in the near-side ?
3012 // 3. Anti-splitting cut (like in Femto analysis) ? = now done via ESDtrackCuts ...
3013
3014 }// end control loop
3015 }// end of prelim. check : Cascade = leading part in the event
3016
3017 // 2nd loop: filling loop
3018 for(Int_t TrckIdx = 0; TrckIdx < (InputEvent())->GetNumberOfTracks() ; TrckIdx++ )
3019 {// Loop over all the tracks of the event
3020
3021 AliESDtrack *lCurrentTrck = dynamic_cast<AliESDtrack*>( (InputEvent())->GetTrack( TrckIdx ) );
3022 if (!lCurrentTrck ) {
3023 AliWarning("ERROR Correl. Study : Could not retrieve a track while looping over the event tracks ...");
3024 continue;
3025 }
3026 // Just consider primary tracks (= reject track that are not primary ones)
3027 if( !fESDtrackCuts->AcceptTrack(lCurrentTrck) ) continue;
3028
3029 // Room for improvement: //FIXME
3030 // 1.
3031 // 2. Exclude the tracks that build the condisdered cascade = the bachelor + the V0 dghters
3032 // This may bias the outcome, especially for low multplicity events.
3033 // Note : For ESD event, track ID == track index.
3034 if(lCurrentTrck->GetID() == lArrTrackID[0]) continue;
3035 if(lCurrentTrck->GetID() == lArrTrackID[1]) continue;
3036 if(lCurrentTrck->GetID() == lArrTrackID[2]) continue;
3037
3038 TVector3 lTVect3MomTrck(lCurrentTrck->Px(), lCurrentTrck->Py(), lCurrentTrck->Pz() );
3039
3040 // 2 hypotheses made here :
3041 // - The Xi trajectory is a straight line,
3042 // - The Xi doesn't loose any energy by crossing the first layer(s) of ITS, if ever;
3043 // So, meaning hyp: vect p(Xi) at the emission = vect p(Xi) at the decay vertex
3044 // By doing this, we introduce a systematic error on the cascade Phi ...
3045 // Room for improvement: take into account the curvature of the Xi trajectory ?
3046 // or rather, the resolution in space of the decay vertex ...
3047 //FIXME
3048
3049 Double_t lHnSpFillVar[5] = {0.};
3050 lHnSpFillVar[0] = lTVect3MomXi.DeltaPhi(lTVect3MomTrck) * 180.0/TMath::Pi(); // Delta phi(Casc,Track) (deg)
3051 if(lHnSpFillVar[0] < -50.0) lHnSpFillVar[0] += 360.0;
3052 lHnSpFillVar[1] = lEtaXi - lCurrentTrck->Eta(); // Delta eta(Casc,Track)
3053 lHnSpFillVar[2] = lTVect3MomXi.Pt(); // Pt_{Casc}
3054 lHnSpFillVar[3] = lCurrentTrck->Pt(); // Pt_{any track}
3055 lHnSpFillVar[4] = lInvMassCascade; // Eff. Inv Mass (control var)
3056
3057 if( lStrCascType.Contains("Xi-") ) fHnSpAngularCorrXiMinus ->Fill( lHnSpFillVar );
3058 else if( lStrCascType.Contains("Xi+") ) fHnSpAngularCorrXiPlus ->Fill( lHnSpFillVar );
3059 else if( lStrCascType.Contains("Omega-") ) fHnSpAngularCorrOmegaMinus ->Fill( lHnSpFillVar );
3060 else if( lStrCascType.Contains("Omega+") ) fHnSpAngularCorrOmegaPlus ->Fill( lHnSpFillVar );
3061
3062 }// end - Loop over all the tracks in the event
3063
3064 }// end of correlation type : "Trig = Casc - Asso = AnyPrim", (cases 1.1 and 1.2)
3065
3066
3067
3068 else if(fAngularCorrelationType == "TrigLeadingTrck-AssoCasc"){
3069
3070 //----------------------- Option 2 ---------------------------------------------------------------------------------------------------
a786bd57 3071 // Trigger = leading track,
c525f360 3072 // Associated = the cascade'S' in the event
3073 // NOTE : several good cascades could be present in the event (e.g. one leading track as trigger, 2 associated Xi) ...
3074 // The present function will then be called several times.
3075 // = issue for the normalisation ...
3076
3077 // 1st loop:
3078 // find the index of the (1) primary track (2) which is the leading particle in pt
3079 // NOTE : we do not take into account the Cascade pt, i.e. pt(Casc) could be greater or lower than pt(Leading) ...
3080 Int_t lLeadingPrimTrackIdx = -1;
3081 Double_t lPtMax = 0.1;
3082
3083 for(Int_t TrckIdx = 0; TrckIdx < (InputEvent())->GetNumberOfTracks() ; TrckIdx++ )
3084 {// Loop over all the tracks of the event
3085
3086 AliESDtrack *lCurrentTrck = dynamic_cast<AliESDtrack*>( (InputEvent())->GetTrack( TrckIdx ) );
3087 if (!lCurrentTrck ) {
3088 AliWarning("ERROR Correl. Study : Could not retrieve a track while looping over the event tracks ...");
3089 continue;
3090 }
3091
3092 // Primary track selection
3093 if( !fESDtrackCuts->AcceptTrack(lCurrentTrck) ) continue;
3094
3095 // Exclude the tracks that build the condisdered cascade = the bachelor + the V0 dghters
3096 // This may bias the outcome, especially for low multplicity events.
3097 // Note : For ESD event, track ID == track index.
3098 if(lCurrentTrck->GetID() == lArrTrackID[0]) continue;
3099 if(lCurrentTrck->GetID() == lArrTrackID[1]) continue;
3100 if(lCurrentTrck->GetID() == lArrTrackID[2]) continue;
3101
3102 // Towards the leading track
3103 if( lPtMax < lCurrentTrck->Pt() ){
3104 lLeadingPrimTrackIdx = TMath::Abs( lCurrentTrck->GetID() );
3105 lPtMax = lCurrentTrck->Pt();
3106 }
3107 }// end leading track finding loop
3108
3109 if( lLeadingPrimTrackIdx < 0 ) return;
3110 if( lPtMax < 0.101 ) return;
3111
3112
3113 // 2nd step: filling ONCE the THnSparse
3114 AliESDtrack *lLeadingTrck = dynamic_cast<AliESDtrack*>( (InputEvent())->GetTrack( lLeadingPrimTrackIdx ) );
3115
3116 TVector3 lTVect3MomLeadingTrck( lLeadingTrck->Px(), lLeadingTrck->Py(), lLeadingTrck->Pz() );
3117
3118 // 2 hypotheses made here :
3119 // - The Xi trajectory is a straight line,
3120 // - The Xi doesn't loose any energy by crossing the first layer(s) of ITS, if ever;
3121 // So, meaning hyp: vect p(Xi) at the emission = vect p(Xi) at the decay vertex
3122 // By doing this, we introduce a systematic error on the cascade Phi ...
3123 // Room for improvement: take into account the curvature of the Xi trajectory ?
3124 // or rather, the resolution in space of the decay vertex ...
3125 //FIXME
3126
3127 Double_t lHnSpFillVar[5] = {0.};
3128 lHnSpFillVar[0] = lTVect3MomLeadingTrck.DeltaPhi(lTVect3MomXi) * 180.0/TMath::Pi(); // Delta phi(leading Track, Casc) (deg)
3129 if(lHnSpFillVar[0] < -50.0) lHnSpFillVar[0] += 360.0;
3130 lHnSpFillVar[1] = lLeadingTrck->Eta() - lEtaXi; // Delta eta(leading Track, Casc)
3131 lHnSpFillVar[2] = lTVect3MomXi.Pt(); // Pt_{Casc}
3132 lHnSpFillVar[3] = lLeadingTrck->Pt(); // Pt_{leading track}
3133 lHnSpFillVar[4] = lInvMassCascade; // Eff. Inv Mass (control var)
3134
3135 if( lStrCascType.Contains("Xi-") ) fHnSpAngularCorrXiMinus ->Fill( lHnSpFillVar );
3136 else if( lStrCascType.Contains("Xi+") ) fHnSpAngularCorrXiPlus ->Fill( lHnSpFillVar );
3137 else if( lStrCascType.Contains("Omega-") ) fHnSpAngularCorrOmegaMinus ->Fill( lHnSpFillVar );
3138 else if( lStrCascType.Contains("Omega+") ) fHnSpAngularCorrOmegaPlus ->Fill( lHnSpFillVar );
3139 }// end of correlation type : "Trig = LeadingTrck -Asso = Casc"
3140 else
3141 return;
45ee0bcc 3142
3873f6ee 3143}
45ee0bcc 3144
7e504402 3145Int_t AliAnalysisTaskCheckCascade::DoESDTrackWithTPCrefitMultiplicity(const AliESDEvent *lESDevent)
3146{
3147 // Checking the number of tracks with TPCrefit for each event
3148 // Needed for a rough assessment of the event multiplicity
3149
3150 Int_t nTrackWithTPCrefitMultiplicity = 0;
3151 for(Int_t iTrackIdx = 0; iTrackIdx < (InputEvent())->GetNumberOfTracks(); iTrackIdx++){
3152 AliESDtrack *esdTrack = 0x0;
3153 esdTrack = lESDevent->GetTrack( iTrackIdx );
3154 if (!esdTrack) { AliWarning("Pb / Could not retrieve one track within the track loop for TPCrefit check ..."); continue; }
3155
3156 ULong_t lTrackStatus = esdTrack->GetStatus();
3157 if ((lTrackStatus&AliESDtrack::kTPCrefit) == 0) continue;
3158 else nTrackWithTPCrefitMultiplicity++;
3159 // FIXME :
3160 // The goal here is to get a better assessment of the event multiplicity.
3161 // (InputEvent())->GetNumberOfTracks() takes into account ITS std alone tracks + global tracks
3162 // This may introduce a bias. Hence the number of TPC refit tracks.
3163 // Note : the event multiplicity = analysis on its own... See Jacek's or Jan Fiete's analysis on dN/d(eta)
45ee0bcc 3164
7e504402 3165 }// end loop over all event tracks
3166 return nTrackWithTPCrefitMultiplicity;
3167}
45ee0bcc 3168
3169
3170
3171
3172
3173//________________________________________________________________________
3174void AliAnalysisTaskCheckCascade::Terminate(Option_t *)
3175{
3176 // Draw result to the screen
3177 // Called once at the end of the query
3178
cd9188c9 3179 TList *cRetrievedList = 0x0;
3180 cRetrievedList = (TList*)GetOutputData(1);
3181 if(!cRetrievedList){
7e504402 3182 AliWarning("ERROR - AliAnalysisTaskCheckCascade: ouput data container list not available\n"); return;
cd9188c9 3183 }
3184
9d670198 3185 fHistTrackMultiplicityForTrigEvt = dynamic_cast<TH1F*> ( cRetrievedList->FindObject("fHistTrackMultiplicityForTrigEvt") );
3186 if (!fHistTrackMultiplicityForTrigEvt) {
3187 AliWarning("ERROR - AliAnalysisTaskCheckCascade: fHistTrackMultiplicityForTrigEvt not available\n"); return;
cd9188c9 3188 }
45ee0bcc 3189
9d670198 3190 fHistCascadeMultiplicityForTrigEvt = dynamic_cast<TH1F*> ( cRetrievedList->FindObject("fHistCascadeMultiplicityForTrigEvt") );
3191 if (!fHistCascadeMultiplicityForTrigEvt) {
3192 AliWarning("ERROR - AliAnalysisTaskCheckCascade: fHistCascadeMultiplicityForTrigEvt not available\n"); return;
cd9188c9 3193 }
32599cd4 3194
3195 fHistMassXiMinus = dynamic_cast<TH1F*> ( cRetrievedList->FindObject("fHistMassXiMinus") );
3196 if (!fHistMassXiMinus) {
7e504402 3197 AliWarning("ERROR - AliAnalysisTaskCheckCascade: fHistMassXiMinus not available\n"); return;
32599cd4 3198 }
3199 fHistMassXiPlus = dynamic_cast<TH1F*> ( cRetrievedList->FindObject("fHistMassXiPlus") );
3200 if (!fHistMassXiPlus) {
7e504402 3201 AliWarning("ERROR - AliAnalysisTaskCheckCascade: fHistMassXiPlus not available\n"); return;
32599cd4 3202 }
3203 fHistMassOmegaMinus = dynamic_cast<TH1F*> ( cRetrievedList->FindObject("fHistMassOmegaMinus") );
3204 if (!fHistMassOmegaMinus) {
7e504402 3205 AliWarning("ERROR - AliAnalysisTaskCheckCascade: fHistMassOmegaMinus not available\n"); return;
32599cd4 3206 }
3207 fHistMassOmegaPlus = dynamic_cast<TH1F*> ( cRetrievedList->FindObject("fHistMassOmegaPlus") );
3208 if (!fHistMassOmegaPlus) {
7e504402 3209 AliWarning("ERROR - AliAnalysisTaskCheckCascade: fHistMassOmegaPlus not available\n"); return;
32599cd4 3210 }
3211
f3dc9369 3212 TCanvas *canCheckCascade = new TCanvas("AliAnalysisTaskCheckCascade","CheckCascade overview",10,10,1010,660);
32599cd4 3213 canCheckCascade->Divide(2,2);
3214
3215 canCheckCascade->cd(1);
cd9188c9 3216 canCheckCascade->cd(1)->SetLogy();
9d670198 3217 fHistTrackMultiplicityForTrigEvt->SetMarkerStyle(kFullStar);
3218 fHistTrackMultiplicityForTrigEvt->GetXaxis()->SetLabelFont(42);
3219 fHistTrackMultiplicityForTrigEvt->GetYaxis()->SetLabelFont(42);
3220 fHistTrackMultiplicityForTrigEvt->SetTitleFont(42, "xy");
3221 fHistTrackMultiplicityForTrigEvt->GetXaxis()->SetTitleOffset(1.1);
3222 fHistTrackMultiplicityForTrigEvt->DrawCopy("H");
45ee0bcc 3223
32599cd4 3224 canCheckCascade->cd(2);
3225 canCheckCascade->cd(2)->SetLogy();
9d670198 3226 fHistCascadeMultiplicityForTrigEvt->SetMarkerStyle(kOpenSquare);
3227 fHistCascadeMultiplicityForTrigEvt->GetXaxis()->SetLabelFont(42);
3228 fHistCascadeMultiplicityForTrigEvt->GetYaxis()->SetLabelFont(42);
3229 fHistCascadeMultiplicityForTrigEvt->SetTitleFont(42, "xy");
3230 fHistCascadeMultiplicityForTrigEvt->GetXaxis()->SetTitleOffset(1.1);
3231 fHistCascadeMultiplicityForTrigEvt->DrawCopy("E");
45ee0bcc 3232
32599cd4 3233 canCheckCascade->cd(3);
f3dc9369 3234 fHistMassXiMinus ->SetMarkerStyle(kFullCircle);
32599cd4 3235 fHistMassXiMinus ->SetMarkerSize(0.5);
f3dc9369 3236 fHistMassXiMinus ->GetXaxis()->SetLabelFont(42);
3237 fHistMassXiMinus ->GetYaxis()->SetLabelFont(42);
3238 fHistMassXiMinus ->SetTitleFont(42, "xy");
3239 fHistMassXiMinus ->GetXaxis()->SetTitleOffset(1.1);
3240 fHistMassXiMinus ->GetYaxis()->SetTitleOffset(1.3);
3241 // fHistMassXiMinus->Rebin(2);
3242 fHistMassXiMinus ->GetXaxis()->SetRangeUser(1.24, 1.42);
3243 fHistMassXiMinus ->DrawCopy("E");
3244
32599cd4 3245 fHistMassXiPlus ->SetMarkerStyle(kOpenCircle);
f3dc9369 3246 fHistMassXiPlus ->SetMarkerColor(kRed+2);
3247 fHistMassXiPlus ->SetLineColor(kRed+2);
32599cd4 3248 fHistMassXiPlus ->SetMarkerSize(0.5);
f3dc9369 3249 // fHistMassXiPlus ->Rebin(2);
32599cd4 3250 fHistMassXiPlus ->DrawCopy("ESAME");
3251
f3dc9369 3252
3253 TLegend *legendeXi =new TLegend(0.67,0.34,0.97,0.54);
3254 legendeXi->SetTextFont(42);
3255 legendeXi->SetTextSize(0.05);
3256 legendeXi->SetFillColor(kWhite);
3257 legendeXi->AddEntry( fHistMassXiMinus,"#Xi^{-} candidates","lp");
a786bd57 3258 legendeXi->AddEntry( fHistMassXiPlus,"#bar{#Xi}^{+} candidates","lp");
f3dc9369 3259 legendeXi->Draw();
3260
3261
32599cd4 3262 canCheckCascade->cd(4);
32599cd4 3263 fHistMassOmegaPlus ->SetMarkerStyle(kOpenCircle);
f3dc9369 3264 fHistMassOmegaPlus ->SetMarkerColor(kRed+2);
3265 fHistMassOmegaPlus ->SetLineColor(kRed+2);
32599cd4 3266 fHistMassOmegaPlus ->SetMarkerSize(0.5);
f3dc9369 3267 fHistMassOmegaPlus ->GetXaxis()->SetLabelFont(42);
3268 fHistMassOmegaPlus ->GetYaxis()->SetLabelFont(42);
3269 fHistMassOmegaPlus ->SetTitleFont(42, "xy");
3270 fHistMassOmegaPlus ->GetXaxis()->SetTitleOffset(1.1);
3271 fHistMassOmegaPlus ->GetYaxis()->SetTitleOffset(1.25);
3272 // fHistMassOmegaPlus ->Rebin(2);
3273 fHistMassOmegaPlus ->GetXaxis()->SetRangeUser(1.6, 1.84);
3274 fHistMassOmegaPlus ->DrawCopy("E");
3275
3276 fHistMassOmegaMinus->SetMarkerStyle(kFullCircle);
3277 fHistMassOmegaMinus->SetMarkerSize(0.5);
3278 // fHistMassOmegaMinus->Rebin(2);
3279 fHistMassOmegaMinus->DrawCopy("ESAME");
3280
3281
3282 TLegend *legendeOmega = new TLegend(0.67,0.34,0.97,0.54);
3283 legendeOmega->SetTextFont(42);
3284 legendeOmega->SetTextSize(0.05);
3285 legendeOmega->SetFillColor(kWhite);
3286 legendeOmega->AddEntry( fHistMassOmegaMinus,"#Omega^{-} candidates","lp");
a786bd57 3287 legendeOmega->AddEntry( fHistMassOmegaPlus,"#bar{#Omega}^{+} candidates","lp");
f3dc9369 3288 legendeOmega->Draw();
32599cd4 3289
45ee0bcc 3290}