]>
Commit | Line | Data |
---|---|---|
b67ec6f7 | 1 | /*************************************************************** * |
2 | * Authors : Antonin Maire, Boris Hippolyte | |
3 | * Contributors are mentioned in the code where appropriate. * | |
4 | * * | |
5 | * Permission to use, copy, modify and distribute this software and its * | |
6 | * documentation strictly for non-commercial purposes is hereby granted * | |
7 | * without fee, provided that the above copyright notice appears in all * | |
8 | * copies and that both the copyright notice and this permission notice * | |
9 | * appear in the supporting documentation. The authors make no claims * | |
10 | * about the suitability of this software for any purpose. It is * | |
11 | * provided "as is" without express or implied warranty. * | |
12 | **************************************************************************/ | |
13 | ||
14 | //----------------------------------------------------------------- | |
7e504402 | 15 | // AliAnalysisTaskCheckPerformanceCascade class |
b67ec6f7 | 16 | // This task is for a performance study of cascade identification. |
7e504402 | 17 | // It works with MC info and ESD. |
18 | // Use with AOD tree = under development | |
19 | // Origin : A.Maire Mar2009, antonin.maire@ires.in2p3.fr | |
c525f360 | 20 | // Modified : A.Maire Nov2010, antonin.maire@ires.in2p3.fr |
b67ec6f7 | 21 | //----------------------------------------------------------------- |
22 | ||
23 | ||
6b843db3 | 24 | #include <Riostream.h> |
b67ec6f7 | 25 | |
26 | #include "TList.h" | |
27 | #include "TFile.h" | |
28 | #include "TH1F.h" | |
29 | #include "TH2F.h" | |
c525f360 | 30 | #include "TVector3.h" |
b67ec6f7 | 31 | #include "TCanvas.h" |
32 | #include "TParticle.h" | |
33 | #include "TMath.h" | |
34 | ||
35 | #include "AliLog.h" | |
36 | #include "AliHeader.h" | |
37 | #include "AliMCEvent.h" | |
38 | #include "AliStack.h" | |
9d670198 | 39 | #include "AliMultiplicity.h" |
b67ec6f7 | 40 | #include "AliInputEventHandler.h" |
7e504402 | 41 | #include "AliAnalysisManager.h" |
b67ec6f7 | 42 | |
7e504402 | 43 | #include "AliCFContainer.h" |
44 | #include "AliESDpid.h" | |
c525f360 | 45 | #include "AliESDtrackCuts.h" |
46 | // #include "AliV0vertexer.h" | |
47 | // #include "AliCascadeVertexer.h" | |
b67ec6f7 | 48 | #include "AliESDEvent.h" |
49 | #include "AliESDcascade.h" | |
50 | ||
51 | #include "AliAODEvent.h" | |
52 | ||
53 | #include "AliAnalysisTaskCheckPerformanceCascade.h" | |
54 | ||
c64cb1f6 | 55 | using std::cout; |
56 | using std::endl; | |
57 | ||
b67ec6f7 | 58 | ClassImp(AliAnalysisTaskCheckPerformanceCascade) |
59 | ||
60 | ||
61 | ||
62 | //_____Dummy constructor________________________________________________________________ | |
63 | AliAnalysisTaskCheckPerformanceCascade::AliAnalysisTaskCheckPerformanceCascade() | |
64 | : AliAnalysisTaskSE(), // <- take care to AliAnalysisTask( empty ) | |
c525f360 | 65 | fDebugCascade(0), fAnalysisType("ESD"), fTriggerMaskType("kMB"), fCollidingSystems(0), fESDpid(0), fESDtrackCuts(0), /*fPaveTextBookKeeping(0),*/ |
66 | fkRerunV0CascVertexers (0), | |
67 | fkQualityCutZprimVtxPos (kTRUE), | |
68 | fkRejectEventPileUp (kTRUE), | |
69 | fkQualityCutNoTPConlyPrimVtx (kTRUE), | |
70 | fkQualityCutTPCrefit (kTRUE), | |
71 | fkQualityCut80TPCcls (kTRUE), | |
72 | fkIsDataRecoWith1PadTPCCluster (kTRUE), | |
73 | fkExtraSelections (0), | |
b67ec6f7 | 74 | |
75 | // - Cascade part initialisation | |
76 | fListHistCascade(0), | |
77 | fHistMCTrackMultiplicity(0), | |
c525f360 | 78 | // - Resolution of the multiplicity estimator |
a786bd57 | 79 | f2dHistRecoPrimTrckMultVsMCMult(0), f2dHistRecoEstimateMultVsMCMult(0), |
b67ec6f7 | 80 | |
81 | fHistEtaGenProton(0), | |
82 | fHistEtaGenAntiProton(0), | |
83 | ||
84 | // Xi- | |
85 | fHistEtaGenCascXiMinus(0), | |
ff0753e1 | 86 | f2dHistGenPtVsGenYGenXiMinus(0), |
b67ec6f7 | 87 | |
88 | fHistThetaGenCascXiMinus(0), | |
ff0753e1 | 89 | f2dHistGenPtVsGenYFdblXiMinus(0), |
b67ec6f7 | 90 | |
91 | fHistThetaLambdaXiMinus(0), | |
92 | fHistThetaBachXiMinus(0), | |
93 | ||
94 | fHistThetaMesDghterXiMinus(0), | |
95 | fHistThetaBarDghterXiMinus(0), | |
96 | ||
97 | fHistPtBachXiMinus(0), | |
98 | fHistPtMesDghterXiMinus(0), | |
99 | fHistPtBarDghterXiMinus(0), | |
100 | ||
101 | ||
102 | // Xi+ | |
103 | fHistEtaGenCascXiPlus(0), | |
ff0753e1 | 104 | f2dHistGenPtVsGenYGenXiPlus(0), |
b67ec6f7 | 105 | |
106 | fHistThetaGenCascXiPlus(0), | |
ff0753e1 | 107 | f2dHistGenPtVsGenYFdblXiPlus(0), |
b67ec6f7 | 108 | |
109 | fHistThetaLambdaXiPlus(0), | |
110 | fHistThetaBachXiPlus(0), | |
111 | ||
112 | fHistThetaMesDghterXiPlus(0), | |
113 | fHistThetaBarDghterXiPlus(0), | |
114 | ||
115 | fHistPtBachXiPlus(0), | |
116 | fHistPtMesDghterXiPlus(0), | |
117 | fHistPtBarDghterXiPlus(0), | |
118 | ||
119 | // Omega- | |
120 | fHistEtaGenCascOmegaMinus(0), | |
ff0753e1 | 121 | f2dHistGenPtVsGenYGenOmegaMinus(0), |
b67ec6f7 | 122 | |
123 | fHistThetaGenCascOmegaMinus(0), | |
ff0753e1 | 124 | f2dHistGenPtVsGenYFdblOmegaMinus(0), |
b67ec6f7 | 125 | |
126 | fHistThetaLambdaOmegaMinus(0), | |
127 | fHistThetaBachOmegaMinus(0), | |
128 | ||
129 | fHistThetaMesDghterOmegaMinus(0), | |
130 | fHistThetaBarDghterOmegaMinus(0), | |
131 | ||
132 | fHistPtBachOmegaMinus(0), | |
133 | fHistPtMesDghterOmegaMinus(0), | |
134 | fHistPtBarDghterOmegaMinus(0), | |
135 | ||
136 | ||
137 | // Omega+ | |
138 | fHistEtaGenCascOmegaPlus(0), | |
ff0753e1 | 139 | f2dHistGenPtVsGenYGenOmegaPlus(0), |
b67ec6f7 | 140 | |
141 | fHistThetaGenCascOmegaPlus(0), | |
ff0753e1 | 142 | f2dHistGenPtVsGenYFdblOmegaPlus(0), |
b67ec6f7 | 143 | |
144 | fHistThetaLambdaOmegaPlus(0), | |
145 | fHistThetaBachOmegaPlus(0), | |
146 | ||
147 | fHistThetaMesDghterOmegaPlus(0), | |
148 | fHistThetaBarDghterOmegaPlus(0), | |
149 | ||
150 | fHistPtBachOmegaPlus(0), | |
151 | fHistPtMesDghterOmegaPlus(0), | |
152 | fHistPtBarDghterOmegaPlus(0), | |
153 | ||
154 | // Part 2 - Association to MC | |
155 | ||
156 | fHistMassXiMinus(0), | |
157 | fHistMassXiPlus(0), | |
158 | fHistMassOmegaMinus(0), | |
159 | fHistMassOmegaPlus(0), | |
f87cd3db | 160 | |
161 | // - Effective mass histos with combined PID | |
162 | fHistMassWithCombPIDXiMinus(0), fHistMassWithCombPIDXiPlus(0), | |
163 | fHistMassWithCombPIDOmegaMinus(0), fHistMassWithCombPIDOmegaPlus(0), | |
f870ac91 | 164 | |
165 | // - PID Probability versus MC Pt(bachelor track) | |
166 | f2dHistPIDprobaKaonVsMCPtBach(0), f2dHistPIDprobaPionVsMCPtBach(0), | |
f87cd3db | 167 | |
168 | // - Effective mass histos with perfect MC PID on the bachelor | |
169 | fHistMassWithMcPIDXiMinus(0), fHistMassWithMcPIDXiPlus(0), | |
170 | fHistMassWithMcPIDOmegaMinus(0), fHistMassWithMcPIDOmegaPlus(0), | |
b67ec6f7 | 171 | |
ff0753e1 | 172 | |
b67ec6f7 | 173 | // - Effective mass histos for the cascade candidates associated with MC |
174 | fHistAsMCMassXiMinus(0), | |
175 | fHistAsMCMassXiPlus(0), | |
176 | fHistAsMCMassOmegaMinus(0), | |
177 | fHistAsMCMassOmegaPlus(0), | |
f870ac91 | 178 | |
ff0753e1 | 179 | // - Generated Pt Vs generated y, for the cascade candidates associated with MC + Info Comb. PID |
180 | f2dHistAsMCandCombPIDGenPtVsGenYXiMinus(0), | |
181 | f2dHistAsMCandCombPIDGenPtVsGenYXiPlus(0), | |
182 | f2dHistAsMCandCombPIDGenPtVsGenYOmegaMinus(0), | |
183 | f2dHistAsMCandCombPIDGenPtVsGenYOmegaPlus(0), | |
184 | ||
185 | // - Generated Pt Vs generated y, for the cascade candidates associated with MC | |
186 | f2dHistAsMCGenPtVsGenYXiMinus(0), | |
187 | f2dHistAsMCGenPtVsGenYXiPlus(0), | |
188 | f2dHistAsMCGenPtVsGenYOmegaMinus(0), | |
189 | f2dHistAsMCGenPtVsGenYOmegaPlus(0), | |
b67ec6f7 | 190 | |
191 | // - Generated Eta of the the cascade candidates associated with MC | |
192 | fHistAsMCGenEtaXiMinus(0), | |
193 | fHistAsMCGenEtaXiPlus(0), | |
194 | fHistAsMCGenEtaOmegaMinus(0), | |
195 | fHistAsMCGenEtaOmegaPlus(0), | |
196 | ||
197 | // - Resolution in Pt as function of generated Pt | |
198 | f2dHistAsMCResPtXiMinus(0), | |
199 | f2dHistAsMCResPtXiPlus(0), | |
200 | f2dHistAsMCResPtOmegaMinus(0), | |
201 | f2dHistAsMCResPtOmegaPlus(0), | |
202 | ||
203 | // - Resolution in R(2D) as function of generated R | |
204 | f2dHistAsMCResRXiMinus(0), | |
205 | f2dHistAsMCResRXiPlus(0), | |
206 | f2dHistAsMCResROmegaMinus(0), | |
7e504402 | 207 | f2dHistAsMCResROmegaPlus(0), |
208 | ||
c525f360 | 209 | // - Resolution in phi as function of generated Pt |
210 | f2dHistAsMCResPhiXiMinus(0), | |
211 | f2dHistAsMCResPhiXiPlus(0), | |
212 | f2dHistAsMCResPhiOmegaMinus(0), | |
213 | f2dHistAsMCResPhiOmegaPlus(0), | |
a786bd57 | 214 | |
215 | // - Correlation in Pt between the cascade and its (anti)proton daughter | |
216 | f2dHistAsMCPtProtonVsPtXiMinus(0), | |
217 | f2dHistAsMCPtAntiProtonVsPtXiPlus(0), | |
218 | f2dHistAsMCPtProtonVsPtOmegaMinus(0), | |
219 | f2dHistAsMCPtAntiProtonVsPtOmegaPlus(0), | |
220 | ||
7e504402 | 221 | fCFContCascadePIDAsXiMinus(0), |
222 | fCFContCascadePIDAsXiPlus(0), | |
223 | fCFContCascadePIDAsOmegaMinus(0), | |
9d670198 | 224 | fCFContCascadePIDAsOmegaPlus(0), |
225 | ||
226 | fCFContAsCascadeCuts(0) | |
7e504402 | 227 | |
b67ec6f7 | 228 | { |
229 | // Dummy constructor | |
9d670198 | 230 | for(Int_t iAlephIdx = 0; iAlephIdx < 5; iAlephIdx++ ) { fAlephParameters [iAlephIdx] = -1.; } |
231 | for(Int_t iV0selIdx = 0; iV0selIdx < 7; iV0selIdx++ ) { fV0Sels [iV0selIdx ] = -1.; } | |
232 | for(Int_t iCascSelIdx = 0; iCascSelIdx < 8; iCascSelIdx++ ) { fCascSels [iCascSelIdx ] = -1.; } | |
b67ec6f7 | 233 | } |
234 | ||
235 | ||
236 | ||
237 | ||
238 | //_____Non-default Constructor________________________________________________________________ | |
239 | AliAnalysisTaskCheckPerformanceCascade::AliAnalysisTaskCheckPerformanceCascade(const char *name) | |
240 | : AliAnalysisTaskSE(name), | |
c525f360 | 241 | fDebugCascade(0), fAnalysisType("ESD"), fTriggerMaskType("kMB"), fCollidingSystems(0), fESDpid(0), fESDtrackCuts(0), /*fPaveTextBookKeeping(0),*/ |
242 | fkRerunV0CascVertexers (0), | |
243 | fkQualityCutZprimVtxPos (kTRUE), | |
244 | fkRejectEventPileUp (kTRUE), | |
245 | fkQualityCutNoTPConlyPrimVtx (kTRUE), | |
246 | fkQualityCutTPCrefit (kTRUE), | |
247 | fkQualityCut80TPCcls (kTRUE), | |
248 | fkIsDataRecoWith1PadTPCCluster (kTRUE), | |
249 | fkExtraSelections (0), | |
b67ec6f7 | 250 | |
251 | // - Cascade part initialisation | |
252 | fListHistCascade(0), | |
253 | fHistMCTrackMultiplicity(0), | |
c525f360 | 254 | // - Resolution of the multiplicity estimator |
a786bd57 | 255 | f2dHistRecoPrimTrckMultVsMCMult(0), f2dHistRecoEstimateMultVsMCMult(0), |
b67ec6f7 | 256 | |
257 | fHistEtaGenProton(0), | |
258 | fHistEtaGenAntiProton(0), | |
259 | ||
ff0753e1 | 260 | // Xi- |
261 | fHistEtaGenCascXiMinus(0), | |
262 | f2dHistGenPtVsGenYGenXiMinus(0), | |
b67ec6f7 | 263 | |
264 | fHistThetaGenCascXiMinus(0), | |
ff0753e1 | 265 | f2dHistGenPtVsGenYFdblXiMinus(0), |
b67ec6f7 | 266 | |
267 | fHistThetaLambdaXiMinus(0), | |
268 | fHistThetaBachXiMinus(0), | |
269 | ||
270 | fHistThetaMesDghterXiMinus(0), | |
271 | fHistThetaBarDghterXiMinus(0), | |
272 | ||
273 | fHistPtBachXiMinus(0), | |
274 | fHistPtMesDghterXiMinus(0), | |
275 | fHistPtBarDghterXiMinus(0), | |
276 | ||
277 | ||
278 | // Xi+ | |
ff0753e1 | 279 | fHistEtaGenCascXiPlus(0), |
280 | f2dHistGenPtVsGenYGenXiPlus(0), | |
b67ec6f7 | 281 | |
282 | fHistThetaGenCascXiPlus(0), | |
ff0753e1 | 283 | f2dHistGenPtVsGenYFdblXiPlus(0), |
b67ec6f7 | 284 | |
285 | fHistThetaLambdaXiPlus(0), | |
286 | fHistThetaBachXiPlus(0), | |
287 | ||
288 | fHistThetaMesDghterXiPlus(0), | |
289 | fHistThetaBarDghterXiPlus(0), | |
290 | ||
291 | fHistPtBachXiPlus(0), | |
292 | fHistPtMesDghterXiPlus(0), | |
293 | fHistPtBarDghterXiPlus(0), | |
294 | ||
295 | // Omega- | |
ff0753e1 | 296 | fHistEtaGenCascOmegaMinus(0), |
297 | f2dHistGenPtVsGenYGenOmegaMinus(0), | |
b67ec6f7 | 298 | |
299 | fHistThetaGenCascOmegaMinus(0), | |
ff0753e1 | 300 | f2dHistGenPtVsGenYFdblOmegaMinus(0), |
b67ec6f7 | 301 | |
302 | fHistThetaLambdaOmegaMinus(0), | |
303 | fHistThetaBachOmegaMinus(0), | |
304 | ||
305 | fHistThetaMesDghterOmegaMinus(0), | |
306 | fHistThetaBarDghterOmegaMinus(0), | |
307 | ||
308 | fHistPtBachOmegaMinus(0), | |
309 | fHistPtMesDghterOmegaMinus(0), | |
310 | fHistPtBarDghterOmegaMinus(0), | |
311 | ||
312 | ||
313 | // Omega+ | |
ff0753e1 | 314 | fHistEtaGenCascOmegaPlus(0), |
315 | f2dHistGenPtVsGenYGenOmegaPlus(0), | |
b67ec6f7 | 316 | |
317 | fHistThetaGenCascOmegaPlus(0), | |
ff0753e1 | 318 | f2dHistGenPtVsGenYFdblOmegaPlus(0), |
b67ec6f7 | 319 | |
320 | fHistThetaLambdaOmegaPlus(0), | |
321 | fHistThetaBachOmegaPlus(0), | |
322 | ||
323 | fHistThetaMesDghterOmegaPlus(0), | |
324 | fHistThetaBarDghterOmegaPlus(0), | |
325 | ||
326 | fHistPtBachOmegaPlus(0), | |
327 | fHistPtMesDghterOmegaPlus(0), | |
328 | fHistPtBarDghterOmegaPlus(0), | |
329 | ||
330 | // Part 2 - Association to MC | |
331 | ||
332 | fHistMassXiMinus(0), | |
333 | fHistMassXiPlus(0), | |
334 | fHistMassOmegaMinus(0), | |
335 | fHistMassOmegaPlus(0), | |
ff0753e1 | 336 | |
f87cd3db | 337 | // - Effective mass histos with combined PID |
338 | fHistMassWithCombPIDXiMinus(0), fHistMassWithCombPIDXiPlus(0), | |
339 | fHistMassWithCombPIDOmegaMinus(0), fHistMassWithCombPIDOmegaPlus(0), | |
c525f360 | 340 | |
f870ac91 | 341 | // - PID Probability versus MC Pt(bachelor track) |
342 | f2dHistPIDprobaKaonVsMCPtBach(0), f2dHistPIDprobaPionVsMCPtBach(0), | |
343 | ||
f87cd3db | 344 | // - Effective mass histos with perfect MC PID on the bachelor |
345 | fHistMassWithMcPIDXiMinus(0), fHistMassWithMcPIDXiPlus(0), | |
346 | fHistMassWithMcPIDOmegaMinus(0), fHistMassWithMcPIDOmegaPlus(0), | |
ff0753e1 | 347 | |
f87cd3db | 348 | |
b67ec6f7 | 349 | // - Effective mass histos for the cascade candidates associated with MC |
350 | fHistAsMCMassXiMinus(0), | |
351 | fHistAsMCMassXiPlus(0), | |
352 | fHistAsMCMassOmegaMinus(0), | |
353 | fHistAsMCMassOmegaPlus(0), | |
b67ec6f7 | 354 | |
ff0753e1 | 355 | // - Generated Pt Vs generated y, for the cascade candidates associated with MC + Info Comb. PID |
356 | f2dHistAsMCandCombPIDGenPtVsGenYXiMinus(0), | |
357 | f2dHistAsMCandCombPIDGenPtVsGenYXiPlus(0), | |
c525f360 | 358 | f2dHistAsMCandCombPIDGenPtVsGenYOmegaMinus(0), |
ff0753e1 | 359 | f2dHistAsMCandCombPIDGenPtVsGenYOmegaPlus(0), |
c525f360 | 360 | |
ff0753e1 | 361 | // - Generated Pt Vs generated y, for the cascade candidates associated with MC |
362 | f2dHistAsMCGenPtVsGenYXiMinus(0), | |
363 | f2dHistAsMCGenPtVsGenYXiPlus(0), | |
364 | f2dHistAsMCGenPtVsGenYOmegaMinus(0), | |
365 | f2dHistAsMCGenPtVsGenYOmegaPlus(0), | |
b67ec6f7 | 366 | |
367 | // - Generated Eta of the the cascade candidates associated with MC | |
368 | fHistAsMCGenEtaXiMinus(0), | |
369 | fHistAsMCGenEtaXiPlus(0), | |
370 | fHistAsMCGenEtaOmegaMinus(0), | |
371 | fHistAsMCGenEtaOmegaPlus(0), | |
372 | ||
373 | // - Resolution in Pt as function of generated Pt | |
374 | f2dHistAsMCResPtXiMinus(0), | |
375 | f2dHistAsMCResPtXiPlus(0), | |
376 | f2dHistAsMCResPtOmegaMinus(0), | |
377 | f2dHistAsMCResPtOmegaPlus(0), | |
378 | ||
379 | // - Resolution in R(2D) as function of generated R | |
380 | f2dHistAsMCResRXiMinus(0), | |
381 | f2dHistAsMCResRXiPlus(0), | |
382 | f2dHistAsMCResROmegaMinus(0), | |
7e504402 | 383 | f2dHistAsMCResROmegaPlus(0), |
384 | ||
c525f360 | 385 | // - Resolution in phi as function of generated Pt |
386 | f2dHistAsMCResPhiXiMinus(0), | |
387 | f2dHistAsMCResPhiXiPlus(0), | |
388 | f2dHistAsMCResPhiOmegaMinus(0), | |
389 | f2dHistAsMCResPhiOmegaPlus(0), | |
390 | ||
a786bd57 | 391 | // - Correlation in Pt between the cascade and its (anti)proton daughter |
392 | f2dHistAsMCPtProtonVsPtXiMinus(0), | |
393 | f2dHistAsMCPtAntiProtonVsPtXiPlus(0), | |
394 | f2dHistAsMCPtProtonVsPtOmegaMinus(0), | |
395 | f2dHistAsMCPtAntiProtonVsPtOmegaPlus(0), | |
396 | ||
7e504402 | 397 | fCFContCascadePIDAsXiMinus(0), |
398 | fCFContCascadePIDAsXiPlus(0), | |
399 | fCFContCascadePIDAsOmegaMinus(0), | |
9d670198 | 400 | fCFContCascadePIDAsOmegaPlus(0), |
401 | ||
402 | fCFContAsCascadeCuts(0) | |
ff0753e1 | 403 | |
b67ec6f7 | 404 | { |
405 | // Constructor | |
406 | ||
407 | // Define input and output slots here | |
9d670198 | 408 | // Input slot #0 works with a TChain |
409 | // Output slot #1 writes into a TList container (cascade) | |
410 | ||
411 | for(Int_t iAlephIdx = 0; iAlephIdx < 5; iAlephIdx++ ) { fAlephParameters [iAlephIdx] = -1.; } | |
412 | ||
a786bd57 | 413 | // New Loose : 1st step for the 7 TeV pp analysis |
e8fd19de | 414 | |
a786bd57 | 415 | fV0Sels[0] = 33. ; // max allowed chi2 |
416 | fV0Sels[1] = 0.02; // min allowed impact parameter for the 1st daughter (LHC09a4 : 0.05) | |
417 | fV0Sels[2] = 0.02; // min allowed impact parameter for the 2nd daughter (LHC09a4 : 0.05) | |
418 | fV0Sels[3] = 2.0 ; // max allowed DCA between the daughter tracks (LHC09a4 : 0.5) | |
419 | fV0Sels[4] = 0.95; // min allowed cosine of V0's pointing angle (LHC09a4 : 0.99) | |
420 | fV0Sels[5] = 1.0 ; // min radius of the fiducial volume (LHC09a4 : 0.2) | |
421 | fV0Sels[6] = 100. ; // max radius of the fiducial volume (LHC09a4 : 100.0) | |
c525f360 | 422 | |
a786bd57 | 423 | fCascSels[0] = 33. ; // max allowed chi2 (same as PDC07) |
424 | fCascSels[1] = 0.05 ; // min allowed V0 impact parameter (PDC07 : 0.05 / LHC09a4 : 0.025 ) | |
425 | fCascSels[2] = 0.010; // "window" around the Lambda mass (PDC07 : 0.008 / LHC09a4 : 0.010 ) | |
426 | fCascSels[3] = 0.03 ; // min allowed bachelor's impact parameter (PDC07 : 0.035 / LHC09a4 : 0.025 ) | |
427 | fCascSels[4] = 2.0 ; // max allowed DCA between the V0 and the bachelor (PDC07 : 0.1 / LHC09a4 : 0.2 ) | |
428 | fCascSels[5] = 0.95 ; // min allowed cosine of the cascade pointing angle (PDC07 : 0.9985 / LHC09a4 : 0.998 ) | |
429 | fCascSels[6] = 0.4 ; // min radius of the fiducial volume (PDC07 : 0.9 / LHC09a4 : 0.2 ) | |
430 | fCascSels[7] = 100. ; // max radius of the fiducial volume (PDC07 : 100 / LHC09a4 : 100 ) | |
431 | ||
432 | ||
433 | // Hyper Loose "Ã la 900 GeV 2009 data", with lower cosine of pointing angle for Xi (0.95 down to 0.82) = 900 GeV paper | |
434 | /* | |
9d670198 | 435 | fV0Sels[0] = 33. ; // max allowed chi2 |
e8fd19de | 436 | fV0Sels[1] = 0.001; // min allowed impact parameter for the 1st daughter (LHC09a4 : 0.05) |
437 | fV0Sels[2] = 0.001; // min allowed impact parameter for the 2nd daughter (LHC09a4 : 0.05) | |
438 | fV0Sels[3] = 5.0 ; // max allowed DCA between the daughter tracks (LHC09a4 : 0.5) | |
9d670198 | 439 | fV0Sels[4] = 0.0 ; // min allowed cosine of V0's pointing angle (LHC09a4 : 0.99) |
e8fd19de | 440 | fV0Sels[5] = 0.1 ; // min radius of the fiducial volume (LHC09a4 : 0.2) |
9d670198 | 441 | fV0Sels[6] = 100. ; // max radius of the fiducial volume (LHC09a4 : 100.0) |
442 | ||
443 | fCascSels[0] = 33. ; // max allowed chi2 (same as PDC07) | |
e8fd19de | 444 | fCascSels[1] = 0.001; // min allowed V0 impact parameter (PDC07 : 0.05 / LHC09a4 : 0.025 ) |
9d670198 | 445 | fCascSels[2] = 0.008; // "window" around the Lambda mass (PDC07 : 0.008 / LHC09a4 : 0.010 ) |
e8fd19de | 446 | fCascSels[3] = 0.001; // min allowed bachelor's impact parameter (PDC07 : 0.035 / LHC09a4 : 0.025 ) |
447 | fCascSels[4] = 5.0 ; // max allowed DCA between the V0 and the bachelor (PDC07 : 0.1 / LHC09a4 : 0.2 ) | |
448 | fCascSels[5] = 0.82 ; //FIXME min allowed cosine of the cascade pointing angle (PDC07 : 0.9985 / LHC09a4 : 0.998 ) | |
449 | fCascSels[6] = 0.1 ; // min radius of the fiducial volume (PDC07 : 0.9 / LHC09a4 : 0.2 ) | |
9d670198 | 450 | fCascSels[7] = 100. ; // max radius of the fiducial volume (PDC07 : 100 / LHC09a4 : 100 ) |
a786bd57 | 451 | */ |
c525f360 | 452 | |
453 | //New default vtxR (http://alisoft.cern.ch/viewvc?view=rev&root=AliRoot&revision=40955, 5 May 2010) | |
454 | /* | |
455 | fV0Sels[0] = 33. ; // max allowed chi2 | |
456 | fV0Sels[1] = 0.05; // min allowed impact parameter for the 1st daughter (LHC09a4 : 0.05) | |
457 | fV0Sels[2] = 0.05; // min allowed impact parameter for the 2nd daughter (LHC09a4 : 0.05) | |
458 | fV0Sels[3] = 1.5 ; // max allowed DCA between the daughter tracks (LHC09a4 : 0.5) | |
459 | fV0Sels[4] = 0.9 ; // min allowed cosine of V0's pointing angle (LHC09a4 : 0.99) | |
460 | fV0Sels[5] = 0.2 ; // min radius of the fiducial volume (LHC09a4 : 0.2) | |
461 | fV0Sels[6] = 100. ; // max radius of the fiducial volume (LHC09a4 : 100.0) | |
462 | ||
463 | fCascSels[0] = 33. ; // max allowed chi2 (same as PDC07) | |
464 | fCascSels[1] = 0.01 ; // min allowed V0 impact parameter (PDC07 : 0.05 / LHC09a4 : 0.025 ) | |
465 | fCascSels[2] = 0.008; // "window" around the Lambda mass (PDC07 : 0.008 / LHC09a4 : 0.010 ) | |
466 | fCascSels[3] = 0.01 ; // min allowed bachelor's impact parameter (PDC07 : 0.035 / LHC09a4 : 0.025 ) | |
467 | fCascSels[4] = 2.0 ; // max allowed DCA between the V0 and the bachelor (PDC07 : 0.1 / LHC09a4 : 0.2 ) | |
468 | fCascSels[5] = 0.98 ; // min allowed cosine of the cascade pointing angle (PDC07 : 0.9985 / LHC09a4 : 0.998 ) | |
469 | fCascSels[6] = 0.2 ; // min radius of the fiducial volume (PDC07 : 0.9 / LHC09a4 : 0.2 ) | |
470 | fCascSels[7] = 100. ; // max radius of the fiducial volume (PDC07 : 100 / LHC09a4 : 100 ) | |
471 | */ | |
472 | ||
b67ec6f7 | 473 | DefineOutput(1, TList::Class()); |
474 | ||
475 | } | |
476 | ||
477 | ||
9d670198 | 478 | AliAnalysisTaskCheckPerformanceCascade::~AliAnalysisTaskCheckPerformanceCascade() |
479 | { | |
480 | // | |
481 | // Destructor | |
482 | // | |
b67ec6f7 | 483 | |
9d670198 | 484 | // For all TH1, 2, 3 HnSparse and CFContainer are in the fListCascade TList. |
485 | // They will be deleted when fListCascade is deleted by the TSelector dtor | |
486 | // Because of TList::SetOwner() | |
487 | ||
488 | if (fListHistCascade) { delete fListHistCascade; fListHistCascade = 0x0; } | |
489 | if (fESDpid) { delete fESDpid; fESDpid = 0x0;} // fESDpid is not stored into the TList | |
c525f360 | 490 | if (fESDtrackCuts) { delete fESDtrackCuts; fESDtrackCuts = 0x0; } |
9d670198 | 491 | /*if (fPaveTextBookKeeping) { delete fPaveTextBookKeeping; fPaveTextBookKeeping = 0x0; } // fPaveTextBookKeeping is not stored into the TList*/ |
492 | } | |
b67ec6f7 | 493 | |
494 | ||
495 | //________________________________________________________________________ | |
496 | void AliAnalysisTaskCheckPerformanceCascade::UserCreateOutputObjects() | |
497 | { | |
498 | // Create histograms | |
499 | // Called once | |
500 | ||
501 | ||
502 | // Option for AliLog | |
503 | AliLog::SetGlobalLogLevel(AliLog::kError); | |
504 | // to suppress the extensive info prompted by a run with MC | |
505 | ||
9d670198 | 506 | // Definition of the output datamembers |
507 | fListHistCascade = new TList(); | |
508 | fListHistCascade->SetOwner(); // See http://root.cern.ch/root/html/TCollection.html#TCollection:SetOwner | |
509 | ||
7e504402 | 510 | if(! fESDpid){ |
9d670198 | 511 | |
c525f360 | 512 | if(fkIsDataRecoWith1PadTPCCluster){ |
513 | // Home made parameterization for LHC10f6a production = p+p 7 TeV | |
514 | fAlephParameters[0] = 0.04; | |
515 | fAlephParameters[1] = 17.5; | |
516 | fAlephParameters[2] = 3.4e-09; | |
517 | fAlephParameters[3] = 2.15; | |
518 | fAlephParameters[4] = 3.91720e+00; | |
519 | ||
520 | // Home made parameterization for LHC10e13 production = p+p 900 GeV/c | |
521 | } | |
522 | else { | |
523 | // Reasonable parameters extracted for p-p simulation (LHC09a4) - A.Kalweit | |
524 | // fAlephParameters[0] = 4.23232575531564326e+00/50;//50*0.76176e-1; | |
525 | // fAlephParameters[1] = 8.68482806165147636e+00;//10.632; | |
526 | // fAlephParameters[2] = 1.34000000000000005e-05;//0.13279e-4; | |
527 | // fAlephParameters[3] = 2.30445734159456084e+00;//1.8631; | |
528 | // fAlephParameters[4] = 2.25624744086878559e+00;//1.9479; | |
529 | ||
530 | // Param for LHC09d10 prod - A.Kalweit | |
531 | fAlephParameters[0] = 2.15898e+00/50.; | |
532 | fAlephParameters[1] = 1.75295e+01; | |
533 | fAlephParameters[2] = 3.40030e-09; | |
534 | fAlephParameters[3] = 1.96178e+00; | |
535 | fAlephParameters[4] = 3.91720e+00; | |
536 | } | |
537 | Printf("CheckPerfCascade - 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]); | |
90926f02 | 538 | |
7e504402 | 539 | fESDpid = new AliESDpid(); |
9d670198 | 540 | fESDpid->GetTPCResponse().SetBetheBlochParameters( fAlephParameters[0], |
541 | fAlephParameters[1], | |
542 | fAlephParameters[2], | |
543 | fAlephParameters[3], | |
544 | fAlephParameters[4] ); | |
7e504402 | 545 | } |
b67ec6f7 | 546 | |
c525f360 | 547 | |
548 | if(! fESDtrackCuts ){ | |
549 | fESDtrackCuts = AliESDtrackCuts::GetStandardITSTPCTrackCuts2010(kTRUE); // Std definition of primary (see kTRUE argument) tracks for 2010 | |
550 | fESDtrackCuts->SetEtaRange(-0.8,+0.8); | |
551 | fESDtrackCuts->SetPtRange(0.15, 1e10); | |
552 | Printf("CheckCascade - ESDtrackCuts set up to 2010 std ITS-TPC cuts..."); | |
553 | } | |
554 | ||
555 | ||
9d670198 | 556 | /* |
557 | if( !fPaveTextBookKeeping){ | |
558 | fPaveTextBookKeeping = new TPaveText(0.1, 0.1, 0.9, 0.9,"NDC"); | |
559 | fPaveTextBookKeeping->SetName("fPaveTextBookKeeping"); | |
560 | fPaveTextBookKeeping->SetBorderSize(0); | |
561 | fPaveTextBookKeeping->SetTextAlign(12); | |
562 | fPaveTextBookKeeping->SetFillColor(kWhite); | |
563 | fPaveTextBookKeeping->SetTextFont(42); // regular Arial or Helvetica, | |
564 | fPaveTextBookKeeping->SetTextColor(kGray+3); | |
565 | ||
566 | ||
567 | fPaveTextBookKeeping->AddText( "Task CHECK PERFORMANCE CASCADE analysis" ); | |
568 | fPaveTextBookKeeping->AddText("- - - - - - - - - - - "); | |
569 | fPaveTextBookKeeping->AddText( Form("AnalysisType : %s ", fAnalysisType.Data() )); | |
570 | if(!fCollidingSystems) fPaveTextBookKeeping->AddText("Colliding system : p-p collisions "); | |
571 | else fPaveTextBookKeeping->AddText("Colliding system : A-A collisions "); | |
572 | ||
573 | fPaveTextBookKeeping->AddText("- - - - - - - - - - - "); | |
574 | ||
575 | if(fkRerunV0CascVertexers){ | |
576 | fPaveTextBookKeeping->AddText("A.1. With V0 vertexer : "); | |
577 | fPaveTextBookKeeping->AddText( Form(" - V0 #chi^{2} _________________ < %.3f ", fV0Sels[0] )); | |
578 | fPaveTextBookKeeping->AddText( Form(" - DCA(prim. Vtx/ 1^{st} daughter) ___ > %.3f cm ", fV0Sels[1] )); | |
579 | fPaveTextBookKeeping->AddText( Form(" - DCA(prim. Vtx/ 2^{nd} daughter) __ > %.3f cm", fV0Sels[2] )); | |
580 | fPaveTextBookKeeping->AddText( Form(" - DCA between V0 daughters ___ < %.3f cm", fV0Sels[3] )); | |
581 | fPaveTextBookKeeping->AddText( Form(" - cos(V0 pointing angle) _______ > %.3f ", fV0Sels[4] )); | |
582 | fPaveTextBookKeeping->AddText( Form(" - R_{transv}(V0 decay) ________ > %.3f cm", fV0Sels[5] )); | |
583 | fPaveTextBookKeeping->AddText( Form(" - R_{transv}(V0 decay) ________ < %.3f cm", fV0Sels[6] )); | |
584 | ||
585 | fPaveTextBookKeeping->AddText(" "); | |
586 | ||
587 | fPaveTextBookKeeping->AddText("A.2. With Casc. vertexer : "); | |
588 | fPaveTextBookKeeping->AddText( Form(" - Casc. #chi^{2} ______________ < %.3f ", fCascSels[0] )); | |
589 | fPaveTextBookKeeping->AddText( Form(" - DCA(prim. Vtx/ V0) _________ > %.3f cm", fCascSels[1] )); | |
590 | fPaveTextBookKeeping->AddText( Form(" - | M_{#Lambda}(reco) - M_{#Lambda}(pdg) | _______ < %.3f GeV/c^{2}", fCascSels[2] )); | |
591 | fPaveTextBookKeeping->AddText( Form(" - DCA(prim. Vtx/ Bach) _______ > %.3f cm", fCascSels[3] )); | |
592 | fPaveTextBookKeeping->AddText( Form(" - DCA between Bach/ #Lambda ______ < %.3f cm", fCascSels[4] )); | |
593 | fPaveTextBookKeeping->AddText( Form(" - cos(Casc. pointing angle) ____ > %.3f ", fCascSels[5] )); | |
594 | fPaveTextBookKeeping->AddText( Form(" - R_{transv}(Casc. decay) ______ > %.3f cm", fCascSels[6] )); | |
595 | fPaveTextBookKeeping->AddText( Form(" - R_{transv}(Casc. decay) ______ < %.3f cm", fCascSels[7] )); | |
596 | } | |
597 | else{ fPaveTextBookKeeping->AddText("A. No rerunning of the V0/Casc. vertexers ... See std cuts in (AliRoot+Rec.C) used for this prod. cycle");} | |
598 | ||
599 | fPaveTextBookKeeping->AddText("- - - - - - - - - - - "); | |
600 | ||
601 | if(fkQualityCutZprimVtxPos) fPaveTextBookKeeping->AddText("B. Quality Cut(prim. Vtx z-Pos) = ON "); | |
602 | else fPaveTextBookKeeping->AddText("B. Quality Cut(prim. Vtx z-Pos) = Off "); | |
603 | if(fkQualityCutNoTPConlyPrimVtx) fPaveTextBookKeeping->AddText("C. Quality Cut(No TPC prim. vtx) = ON "); | |
604 | else fPaveTextBookKeeping->AddText("C. Quality Cut(No TPC prim. vtx) = Off "); | |
605 | if(fkQualityCutTPCrefit) fPaveTextBookKeeping->AddText("D. Quality Cut(TPCrefit) = ON "); | |
606 | else fPaveTextBookKeeping->AddText("D. Quality Cut(TPCrefit) = Off "); | |
607 | if(fkQualityCut80TPCcls) fPaveTextBookKeeping->AddText("E. Quality Cut(80 TPC clusters) = ON "); | |
608 | else fPaveTextBookKeeping->AddText("E. Quality Cut(80 TPC clusters) = Off "); | |
609 | if(fkExtraSelections) fPaveTextBookKeeping->AddText("F. Extra Analysis Selections = ON "); | |
610 | else fPaveTextBookKeeping->AddText("F. Extra Analysis Selections = Off "); | |
611 | ||
612 | fPaveTextBookKeeping->AddText("- - - - - - - - - - - "); | |
613 | ||
614 | fPaveTextBookKeeping->AddText("G. TPC Aleph Param : "); | |
615 | fPaveTextBookKeeping->AddText( Form(" - fAlephParam [0] = %.5g", fAlephParameters[0] )); | |
616 | fPaveTextBookKeeping->AddText( Form(" - fAlephParam [1] = %.5g", fAlephParameters[1] )); | |
617 | fPaveTextBookKeeping->AddText( Form(" - fAlephParam [2] = %.5g", fAlephParameters[2] )); | |
618 | fPaveTextBookKeeping->AddText( Form(" - fAlephParam [3] = %.5g", fAlephParameters[3] )); | |
619 | fPaveTextBookKeeping->AddText( Form(" - fAlephParam [4] = %.5g", fAlephParameters[4] )); | |
620 | ||
621 | fListHistCascade->Add(fPaveTextBookKeeping); | |
622 | } | |
623 | */ | |
624 | ||
b67ec6f7 | 625 | // - General |
626 | ||
627 | if (!fHistMCTrackMultiplicity) { | |
628 | fHistMCTrackMultiplicity = new TH1F("fHistMCTrackMultiplicity", "MC Track Multiplicity;Number of MC tracks;Events", 100, 0, 500); | |
629 | // fHistMCTrackMultiplicity = new TH1F("fHistMCTrackMultiplicity", "Multiplicity distribution;Number of tracks;Events", 200, 0, 40000); //HERE | |
630 | fListHistCascade->Add(fHistMCTrackMultiplicity); | |
631 | } | |
632 | ||
c525f360 | 633 | // - Resolution of the multiplicity estimator |
a786bd57 | 634 | if(! f2dHistRecoPrimTrckMultVsMCMult){ |
635 | f2dHistRecoPrimTrckMultVsMCMult = new TH2F("f2dHistRecoPrimTrckMultVsMCMult", "Resolution of the multiplicity estimator (prim. tracks in |#eta| < 0.8); Reco Multiplicity (prim. tracks); MC multiplicity (gen. part. in |#eta| < 0.8)", 120, 0., 120., 300, 0., 300.); | |
636 | fListHistCascade->Add(f2dHistRecoPrimTrckMultVsMCMult); | |
637 | } | |
638 | ||
639 | if(! f2dHistRecoEstimateMultVsMCMult){ | |
640 | f2dHistRecoEstimateMultVsMCMult = new TH2F("f2dHistRecoEstimateMultVsMCMult", "Resolution of the multiplicity estimator (EstimateMult. in |#eta| < 1.0); Reco Multiplicity (tr(ITS-TPC)+ITSsa+tracklets); MC multiplicity (gen. part. in |#eta| < 1.0)", 160, 0., 160., 300, 0., 300.); | |
641 | fListHistCascade->Add(f2dHistRecoEstimateMultVsMCMult); | |
c525f360 | 642 | } |
643 | ||
b67ec6f7 | 644 | if (!fHistEtaGenProton) { |
645 | fHistEtaGenProton = new TH1F("fHistEtaGenProton", "#eta of any gen. p^{+};#eta;Number of prim. protons", 200, -10, 10); | |
646 | fListHistCascade->Add(fHistEtaGenProton); | |
647 | } | |
648 | ||
649 | if (!fHistEtaGenAntiProton) { | |
650 | fHistEtaGenAntiProton = new TH1F("fHistEtaGenAntiProton", "#eta of any gen. #bar{p}^{-};#eta;Number of prim. #bar{p}", 200, -10, 10); | |
651 | fListHistCascade->Add(fHistEtaGenAntiProton); | |
652 | } | |
653 | ||
654 | ||
655 | ||
656 | ||
657 | ||
658 | ||
659 | ||
660 | //-------- | |
661 | // I - Xi- | |
662 | // - Pseudo-Rapidity distribution | |
663 | if (!fHistEtaGenCascXiMinus) { | |
664 | fHistEtaGenCascXiMinus = new TH1F("fHistEtaGenCascXiMinus", "#eta of any gen. #Xi^{-};#eta;Number of Casc", 200, -10, 10); | |
665 | fListHistCascade->Add(fHistEtaGenCascXiMinus); | |
666 | } | |
667 | ||
ff0753e1 | 668 | if (!f2dHistGenPtVsGenYGenXiMinus) { |
e8fd19de | 669 | f2dHistGenPtVsGenYGenXiMinus = new TH2F("f2dHistGenPtVsGenYGenXiMinus", "MC P_{t} Vs MC Y of Gen #Xi^{-} ;Pt_{MC} (GeV/c); Y_{MC}", 200, 0., 10., 220, -1.1, 1.1); |
ff0753e1 | 670 | fListHistCascade->Add(f2dHistGenPtVsGenYGenXiMinus); |
b67ec6f7 | 671 | } |
672 | ||
673 | ||
674 | // - Info at the generation level of multi-strange particle | |
675 | ||
676 | if (!fHistThetaGenCascXiMinus) { | |
677 | fHistThetaGenCascXiMinus = new TH1F("fHistThetaGenCascXiMinus", "#theta of gen. #Xi^{-};#theta;Number of Casc.", 200, -10, 190); | |
678 | fListHistCascade->Add(fHistThetaGenCascXiMinus); | |
679 | } | |
680 | ||
ff0753e1 | 681 | if (!f2dHistGenPtVsGenYFdblXiMinus) { |
e8fd19de | 682 | f2dHistGenPtVsGenYFdblXiMinus = new TH2F("f2dHistGenPtVsGenYFdblXiMinus", "MC P_{t} Vs MC Y of findable Gen #Xi^{-}; Pt_{MC} (GeV/c); Y_{MC}", 200, 0., 10., 220, -1.1, 1.1); |
ff0753e1 | 683 | fListHistCascade->Add(f2dHistGenPtVsGenYFdblXiMinus); |
b67ec6f7 | 684 | } |
685 | ||
686 | // - Theta distribution the daughters (control plots) | |
687 | ||
688 | if (!fHistThetaLambdaXiMinus) { | |
689 | fHistThetaLambdaXiMinus = new TH1F("fHistThetaLambdaXiMinus", "#theta of gen. #Lambda (Xi dghter);#theta_{#Lambda};Number of #Lambda^0", 200, -10, 190); | |
690 | fListHistCascade->Add(fHistThetaLambdaXiMinus); | |
691 | } | |
692 | ||
693 | if (!fHistThetaBachXiMinus) { | |
694 | fHistThetaBachXiMinus = new TH1F("fHistThetaBachXiMinus", "#theta of gen. Bach.;#theta_{Bach};Number of Bach.", 200, -10, 190); | |
695 | fListHistCascade->Add(fHistThetaBachXiMinus); | |
696 | } | |
697 | ||
698 | if (!fHistThetaMesDghterXiMinus) { | |
699 | fHistThetaMesDghterXiMinus = new TH1F("fHistThetaMesDghterXiMinus", "#theta of gen. Meson #Lambda dghter;#theta_{MesDght};Number of Mes.", 200, -10, 190); | |
700 | fListHistCascade->Add(fHistThetaMesDghterXiMinus); | |
701 | } | |
702 | ||
703 | if (!fHistThetaBarDghterXiMinus) { | |
704 | fHistThetaBarDghterXiMinus = new TH1F("fHistThetaBarDghterXiMinus", "#theta of gen. Baryon #Lambda dghter;#theta_{BarDght};Number of Bar.", 200, -10, 190); | |
705 | fListHistCascade->Add(fHistThetaBarDghterXiMinus); | |
706 | } | |
707 | ||
708 | // - Pt distribution (control plots) | |
709 | ||
710 | if (!fHistPtBachXiMinus) { | |
711 | fHistPtBachXiMinus = new TH1F("fHistPtBachXiMinus", "p_{t} of gen. Bach.;pt_{Bach};Number of Bach.", 200, 0, 10); | |
712 | fListHistCascade->Add(fHistPtBachXiMinus); | |
713 | } | |
714 | ||
715 | if (!fHistPtMesDghterXiMinus) { | |
716 | fHistPtMesDghterXiMinus = new TH1F("fHistPtMesDghterXiMinus", "p_{t} of gen. Meson #Lambda dghter;pt_{MesDght};Number of Mes.", 200, 0, 10); | |
717 | fListHistCascade->Add(fHistPtMesDghterXiMinus); | |
718 | } | |
719 | ||
720 | if (!fHistPtBarDghterXiMinus) { | |
721 | fHistPtBarDghterXiMinus = new TH1F("fHistPtBarDghterXiMinus", "p_{t} of gen. Baryon #Lambda dghter;pt_{BarDght};Number of Bar.", 200, 0, 10); | |
722 | fListHistCascade->Add(fHistPtBarDghterXiMinus); | |
723 | } | |
724 | ||
725 | ||
726 | ||
727 | //-------- | |
728 | // II - Xi+ | |
729 | // - Pseudo-Rapidity distribution | |
730 | if (!fHistEtaGenCascXiPlus) { | |
a786bd57 | 731 | fHistEtaGenCascXiPlus = new TH1F("fHistEtaGenCascXiPlus", "#eta of any gen. #bar{#Xi}^{+};#eta;Number of Casc", 200, -10, 10); |
b67ec6f7 | 732 | fListHistCascade->Add(fHistEtaGenCascXiPlus); |
733 | } | |
734 | ||
ff0753e1 | 735 | if (!f2dHistGenPtVsGenYGenXiPlus) { |
a786bd57 | 736 | f2dHistGenPtVsGenYGenXiPlus = new TH2F("f2dHistGenPtVsGenYGenXiPlus", "MC P_{t} Vs MC Y of Gen #bar{#Xi}^{+} ;Pt_{MC} (GeV/c); Y_{MC}", 200, 0., 10., 220, -1.1, 1.1); |
ff0753e1 | 737 | fListHistCascade->Add(f2dHistGenPtVsGenYGenXiPlus); |
b67ec6f7 | 738 | } |
739 | ||
740 | ||
741 | // - Info at the generation level of multi-strange particle | |
742 | ||
743 | if (!fHistThetaGenCascXiPlus) { | |
a786bd57 | 744 | fHistThetaGenCascXiPlus = new TH1F("fHistThetaGenCascXiPlus", "#theta of gen. #bar{#Xi}^{+};#theta;Number of Casc.", 200, -10, 190); |
b67ec6f7 | 745 | fListHistCascade->Add(fHistThetaGenCascXiPlus); |
746 | } | |
747 | ||
ff0753e1 | 748 | if (!f2dHistGenPtVsGenYFdblXiPlus) { |
a786bd57 | 749 | f2dHistGenPtVsGenYFdblXiPlus = new TH2F("f2dHistGenPtVsGenYFdblXiPlus", "MC P_{t} Vs MC Y of findable Gen #bar{#Xi}^{+} ;Pt_{MC} (GeV/c); Y_{MC}", 200, 0., 10., 220, -1.1, 1.1); |
ff0753e1 | 750 | fListHistCascade->Add(f2dHistGenPtVsGenYFdblXiPlus); |
b67ec6f7 | 751 | } |
752 | ||
753 | // - Theta distribution the daughters (control plots) | |
754 | ||
755 | if (!fHistThetaLambdaXiPlus) { | |
756 | fHistThetaLambdaXiPlus = new TH1F("fHistThetaLambdaXiPlus", "#theta of gen. #Lambda (Xi dghter);#theta_{#Lambda};Number of #Lambda", 200, -10, 190); | |
757 | fListHistCascade->Add(fHistThetaLambdaXiPlus); | |
758 | } | |
759 | ||
760 | if (!fHistThetaBachXiPlus) { | |
761 | fHistThetaBachXiPlus = new TH1F("fHistThetaBachXiPlus", "#theta of gen. Bach.;#theta_{Bach};Number of Bach.", 200, -10, 190); | |
762 | fListHistCascade->Add(fHistThetaBachXiPlus); | |
763 | } | |
764 | ||
765 | if (!fHistThetaMesDghterXiPlus) { | |
766 | fHistThetaMesDghterXiPlus = new TH1F("fHistThetaMesDghterXiPlus", "#theta of gen. Meson #Lambda dghter;#theta_{MesDght};Number of Mes.", 200, -10, 190); | |
767 | fListHistCascade->Add(fHistThetaMesDghterXiPlus); | |
768 | } | |
769 | ||
770 | if (!fHistThetaBarDghterXiPlus) { | |
771 | fHistThetaBarDghterXiPlus = new TH1F("fHistThetaBarDghterXiPlus", "#theta of gen. Baryon #Lambda dghter;#theta_{BarDght};Number of Bar.", 200, -10, 190); | |
772 | fListHistCascade->Add(fHistThetaBarDghterXiPlus); | |
773 | } | |
774 | ||
775 | // - Pt distribution (control plots) | |
776 | ||
777 | if (!fHistPtBachXiPlus) { | |
778 | fHistPtBachXiPlus = new TH1F("fHistPtBachXiPlus", "p_{t} of gen. Bach.;pt_{Bach};Number of Bach.", 200, 0, 10); | |
779 | fListHistCascade->Add(fHistPtBachXiPlus); | |
780 | } | |
781 | ||
782 | if (!fHistPtMesDghterXiPlus) { | |
783 | fHistPtMesDghterXiPlus = new TH1F("fHistPtMesDghterXiPlus", "p_{t} of gen. Meson #Lambda dghter);pt_{MesDght};Number of Mes.", 200, 0, 10); | |
784 | fListHistCascade->Add(fHistPtMesDghterXiPlus); | |
785 | } | |
786 | ||
787 | if (!fHistPtBarDghterXiPlus) { | |
788 | fHistPtBarDghterXiPlus = new TH1F("fHistPtBarDghterXiPlus", "p_{t} of gen. Baryon #Lambda dghter);pt_{BarDght};Number of Bar.", 200, 0, 10); | |
789 | fListHistCascade->Add(fHistPtBarDghterXiPlus); | |
790 | } | |
791 | ||
792 | ||
793 | //--------- | |
794 | // III - Omega- | |
795 | // - Pseudo-Rapidity distribution | |
796 | if (!fHistEtaGenCascOmegaMinus) { | |
797 | fHistEtaGenCascOmegaMinus = new TH1F("fHistEtaGenCascOmegaMinus", "#eta of any gen. #Omega^{-};#eta;Number of Casc", 200, -10, 10); | |
798 | fListHistCascade->Add(fHistEtaGenCascOmegaMinus); | |
799 | } | |
800 | ||
ff0753e1 | 801 | if (!f2dHistGenPtVsGenYGenOmegaMinus) { |
e8fd19de | 802 | f2dHistGenPtVsGenYGenOmegaMinus = new TH2F("f2dHistGenPtVsGenYGenOmegaMinus", "MC P_{t} Vs MC Y of Gen #Omega^{-} ;Pt_{MC} (GeV/c); Y_{MC}", 200, 0., 10., 220, -1.1, 1.1); |
ff0753e1 | 803 | fListHistCascade->Add(f2dHistGenPtVsGenYGenOmegaMinus); |
b67ec6f7 | 804 | } |
805 | ||
806 | ||
b67ec6f7 | 807 | // - Info at the generation level of multi-strange particle |
808 | ||
809 | if (!fHistThetaGenCascOmegaMinus) { | |
810 | fHistThetaGenCascOmegaMinus = new TH1F("fHistThetaGenCascOmegaMinus", "#theta of gen. #Omega^{-};#theta;Number of Casc.", 200, -10, 190); | |
811 | fListHistCascade->Add(fHistThetaGenCascOmegaMinus); | |
812 | } | |
813 | ||
ff0753e1 | 814 | if (!f2dHistGenPtVsGenYFdblOmegaMinus) { |
e8fd19de | 815 | f2dHistGenPtVsGenYFdblOmegaMinus = new TH2F("f2dHistGenPtVsGenYFdblOmegaMinus", "MC P_{t} Vs MC Y of findable Gen #Omega^{-}; Pt_{MC} (GeV/c); Y_{MC}", 200, 0., 10., 220, -1.1, 1.1); |
ff0753e1 | 816 | fListHistCascade->Add(f2dHistGenPtVsGenYFdblOmegaMinus); |
b67ec6f7 | 817 | } |
818 | ||
819 | // - Theta distribution the daughters (control plots) | |
820 | ||
821 | if (!fHistThetaLambdaOmegaMinus) { | |
822 | fHistThetaLambdaOmegaMinus = new TH1F("fHistThetaLambdaOmegaMinus", "#theta of gen. #Lambda (Omega dghter);#theta_{#Lambda};Number of #Lambda", 200, -10, 190); | |
823 | fListHistCascade->Add(fHistThetaLambdaOmegaMinus); | |
824 | } | |
825 | ||
826 | if (!fHistThetaBachOmegaMinus) { | |
827 | fHistThetaBachOmegaMinus = new TH1F("fHistThetaBachOmegaMinus", "#theta of gen. Bach.;#theta_{Bach};Number of Bach.", 200, -10, 190); | |
828 | fListHistCascade->Add(fHistThetaBachOmegaMinus); | |
829 | } | |
830 | ||
831 | if (!fHistThetaMesDghterOmegaMinus) { | |
832 | fHistThetaMesDghterOmegaMinus = new TH1F("fHistThetaMesDghterOmegaMinus", "#theta of gen. Meson #Lambda dghter;#theta_{MesDght};Number of Mes.", 200, -10, 190); | |
833 | fListHistCascade->Add(fHistThetaMesDghterOmegaMinus); | |
834 | } | |
835 | ||
836 | if (!fHistThetaBarDghterOmegaMinus) { | |
837 | fHistThetaBarDghterOmegaMinus = new TH1F("fHistThetaBarDghterOmegaMinus", "#theta of gen. Baryon #Lambda dghter;#theta_{BarDght};Number of Bar.", 200, -10, 190); | |
838 | fListHistCascade->Add(fHistThetaBarDghterOmegaMinus); | |
839 | } | |
840 | ||
841 | // - Pt distribution (control plots) | |
842 | ||
843 | if (!fHistPtBachOmegaMinus) { | |
844 | fHistPtBachOmegaMinus = new TH1F("fHistPtBachOmegaMinus", "p_{t} of gen. Bach.;pt_{Bach};Number of Bach.", 200, 0, 10); | |
845 | fListHistCascade->Add(fHistPtBachOmegaMinus); | |
846 | } | |
847 | ||
848 | if (!fHistPtMesDghterOmegaMinus) { | |
849 | fHistPtMesDghterOmegaMinus = new TH1F("fHistPtMesDghterOmegaMinus", "p_{t} of gen. Meson #Lambda dghter);pt_{MesDght};Number of Mes.", 200, 0, 10); | |
850 | fListHistCascade->Add(fHistPtMesDghterOmegaMinus); | |
851 | } | |
852 | ||
853 | if (!fHistPtBarDghterOmegaMinus) { | |
854 | fHistPtBarDghterOmegaMinus = new TH1F("fHistPtBarDghterOmegaMinus", "p_{t} of gen. Baryon #Lambda dghter);pt_{BarDght};Number of Bar.", 200, 0, 10); | |
855 | fListHistCascade->Add(fHistPtBarDghterOmegaMinus); | |
856 | } | |
857 | ||
858 | ||
859 | //--------- | |
860 | // IV - Omega+ | |
861 | // - Pseudo-Rapidity distribution | |
862 | if (!fHistEtaGenCascOmegaPlus) { | |
a786bd57 | 863 | fHistEtaGenCascOmegaPlus = new TH1F("fHistEtaGenCascOmegaPlus", "#eta of any gen. #bar{#Omega}^{+};#eta;Number of Casc", 200, -10, 10); |
b67ec6f7 | 864 | fListHistCascade->Add(fHistEtaGenCascOmegaPlus); |
865 | } | |
866 | ||
ff0753e1 | 867 | if (!f2dHistGenPtVsGenYGenOmegaPlus) { |
a786bd57 | 868 | f2dHistGenPtVsGenYGenOmegaPlus = new TH2F("f2dHistGenPtVsGenYGenOmegaPlus", "MC P_{t} Vs MC Y of Gen #bar{#Omega}^{+} ;Pt_{MC} (GeV/c); Y_{MC}", 200, 0., 10., 220, -1.1, 1.1); |
ff0753e1 | 869 | fListHistCascade->Add(f2dHistGenPtVsGenYGenOmegaPlus); |
b67ec6f7 | 870 | } |
871 | ||
872 | ||
873 | ||
874 | // - Info at the generation level of multi-strange particle | |
875 | ||
876 | if (!fHistThetaGenCascOmegaPlus) { | |
a786bd57 | 877 | fHistThetaGenCascOmegaPlus = new TH1F("fHistThetaGenCascOmegaPlus", "#theta of gen. #bar{#Omega}^{+};#theta;Number of Casc.", 200, -10, 190); |
b67ec6f7 | 878 | fListHistCascade->Add(fHistThetaGenCascOmegaPlus); |
879 | } | |
880 | ||
ff0753e1 | 881 | if (!f2dHistGenPtVsGenYFdblOmegaPlus) { |
a786bd57 | 882 | f2dHistGenPtVsGenYFdblOmegaPlus = new TH2F("f2dHistGenPtVsGenYFdblOmegaPlus", "MC P_{t} Vs MC Y of findable Gen #bar{#Omega}^{+}; Pt_{MC} (GeV/c); Y_{MC}", 200, 0., 10., 220, -1.1, 1.1); |
ff0753e1 | 883 | fListHistCascade->Add(f2dHistGenPtVsGenYFdblOmegaPlus); |
b67ec6f7 | 884 | } |
ff0753e1 | 885 | |
b67ec6f7 | 886 | |
887 | // - Theta distribution the daughters (control plots) | |
888 | ||
889 | if (!fHistThetaLambdaOmegaPlus) { | |
890 | fHistThetaLambdaOmegaPlus = new TH1F("fHistThetaLambdaOmegaPlus", "#theta of gen. #Lambda (Omega dghter);#theta_{#Lambda};Number of #Lambda", 200, -10, 190); | |
891 | fListHistCascade->Add(fHistThetaLambdaOmegaPlus); | |
892 | } | |
893 | ||
894 | if (!fHistThetaBachOmegaPlus) { | |
895 | fHistThetaBachOmegaPlus = new TH1F("fHistThetaBachOmegaPlus", "#theta of gen. Bach.;#theta_{Bach};Number of Bach.", 200, -10, 190); | |
896 | fListHistCascade->Add(fHistThetaBachOmegaPlus); | |
897 | } | |
898 | ||
899 | if (!fHistThetaMesDghterOmegaPlus) { | |
900 | fHistThetaMesDghterOmegaPlus = new TH1F("fHistThetaMesDghterOmegaPlus", "#theta of gen. Meson #Lambda dghter;#theta_{MesDght};Number of Mes.", 200, -10, 190); | |
901 | fListHistCascade->Add(fHistThetaMesDghterOmegaPlus); | |
902 | } | |
903 | ||
904 | if (!fHistThetaBarDghterOmegaPlus) { | |
905 | fHistThetaBarDghterOmegaPlus = new TH1F("fHistThetaBarDghterOmegaPlus", "#theta of gen. Baryon #Lambda dghter;#theta_{BarDght};Number of Bar.", 200, -10, 190); | |
906 | fListHistCascade->Add(fHistThetaBarDghterOmegaPlus); | |
907 | } | |
908 | ||
909 | // - Pt distribution (control plots) | |
910 | ||
911 | if (!fHistPtBachOmegaPlus) { | |
912 | fHistPtBachOmegaPlus = new TH1F("fHistPtBachOmegaPlus", "p_{t} of gen. Bach.;pt_{Bach};Number of Bach.", 200, 0, 10); | |
913 | fListHistCascade->Add(fHistPtBachOmegaPlus); | |
914 | } | |
915 | ||
916 | if (!fHistPtMesDghterOmegaPlus) { | |
917 | fHistPtMesDghterOmegaPlus = new TH1F("fHistPtMesDghterOmegaPlus", "p_{t} of gen. Meson #Lambda dghter);pt_{MesDght};Number of Mes.", 200, 0, 10); | |
918 | fListHistCascade->Add(fHistPtMesDghterOmegaPlus); | |
919 | } | |
920 | ||
921 | if (!fHistPtBarDghterOmegaPlus) { | |
922 | fHistPtBarDghterOmegaPlus = new TH1F("fHistPtBarDghterOmegaPlus", "p_{t} of gen. Baryon #Lambda dghter);pt_{BarDght};Number of Bar.", 200, 0, 10); | |
923 | fListHistCascade->Add(fHistPtBarDghterOmegaPlus); | |
924 | } | |
925 | ||
926 | ||
f870ac91 | 927 | //-------------------------------------------------------------------------------- |
b67ec6f7 | 928 | // Part 2 - Any reconstructed cascades + reconstructed cascades associated with MC |
929 | ||
930 | // - Effective mass histos for cascades candidates. | |
931 | ||
932 | if (! fHistMassXiMinus) { | |
e8fd19de | 933 | fHistMassXiMinus = new TH1F("fHistMassXiMinus","#Xi^{-} candidates;M( #Lambda , #pi^{-} ) (GeV/c^{2});Counts", 400,1.2,2.0); |
b67ec6f7 | 934 | fListHistCascade->Add(fHistMassXiMinus); |
935 | } | |
936 | ||
937 | if (! fHistMassXiPlus) { | |
a786bd57 | 938 | fHistMassXiPlus = new TH1F("fHistMassXiPlus","#bar{#Xi}^{+} candidates;M( #bar{#Lambda}^{0} , #pi^{+} ) (GeV/c^{2});Counts",400,1.2,2.0); |
b67ec6f7 | 939 | fListHistCascade->Add(fHistMassXiPlus); |
940 | } | |
941 | ||
942 | if (! fHistMassOmegaMinus) { | |
e8fd19de | 943 | fHistMassOmegaMinus = new TH1F("fHistMassOmegaMinus","#Omega^{-} candidates;M( #Lambda , K^{-} ) (GeV/c^{2});Counts", 500,1.5,2.5); |
b67ec6f7 | 944 | fListHistCascade->Add(fHistMassOmegaMinus); |
945 | } | |
946 | ||
947 | if (! fHistMassOmegaPlus) { | |
a786bd57 | 948 | fHistMassOmegaPlus = new TH1F("fHistMassOmegaPlus","#bar{#Omega}^{+} candidates;M( #bar{#Lambda}^{0} , K^{+} ) (GeV/c^{2});Counts", 500,1.5,2.5); |
b67ec6f7 | 949 | fListHistCascade->Add(fHistMassOmegaPlus); |
950 | } | |
951 | ||
f87cd3db | 952 | |
953 | ||
954 | // - Effective mass histos with combined PID | |
955 | ||
956 | if (! fHistMassWithCombPIDXiMinus) { | |
e8fd19de | 957 | fHistMassWithCombPIDXiMinus = new TH1F("fHistMassWithCombPIDXiMinus","#Xi^{-} candidates, with Bach. comb. PID;M( #Lambda , #pi^{-} ) (GeV/c^{2});Counts", 400,1.2,2.0); |
f87cd3db | 958 | fListHistCascade->Add(fHistMassWithCombPIDXiMinus); |
959 | } | |
960 | ||
961 | if (! fHistMassWithCombPIDXiPlus) { | |
a786bd57 | 962 | 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 | 963 | fListHistCascade->Add(fHistMassWithCombPIDXiPlus); |
964 | } | |
965 | ||
966 | if (! fHistMassWithCombPIDOmegaMinus) { | |
e8fd19de | 967 | fHistMassWithCombPIDOmegaMinus = new TH1F("fHistMassWithCombPIDOmegaMinus","#Omega^{-} candidates, with Bach. comb. PID;M( #Lambda , K^{-} ) (GeV/c^{2});Counts", 500,1.5,2.5); |
f87cd3db | 968 | fListHistCascade->Add(fHistMassWithCombPIDOmegaMinus); |
969 | } | |
970 | ||
971 | if (! fHistMassWithCombPIDOmegaPlus) { | |
a786bd57 | 972 | 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 | 973 | fListHistCascade->Add(fHistMassWithCombPIDOmegaPlus); |
974 | } | |
975 | ||
f870ac91 | 976 | // - PID Probability versus MC Pt(bachelor track) |
977 | if(! f2dHistPIDprobaKaonVsMCPtBach ){ | |
978 | f2dHistPIDprobaKaonVsMCPtBach = new TH2F( "f2dHistPIDprobaKaonVsMCPtBach" , "Comb. PID proba to be K^{#pm} Vs MC Bach. Pt ; Pt_{MC}(Bach.) (GeV/c); Comb. PID Proba (Bach. = K^{#pm})", 100, 0.0, 5.0, 110, 0.0, 1.10 ); | |
979 | fListHistCascade->Add(f2dHistPIDprobaKaonVsMCPtBach); | |
980 | } | |
981 | ||
982 | if(! f2dHistPIDprobaPionVsMCPtBach ){ | |
983 | f2dHistPIDprobaPionVsMCPtBach = new TH2F( "f2dHistPIDprobaPionVsMCPtBach" , "Comb. PID proba to be #pi^{#pm} Vs MC Bach. Pt ; Pt_{MC}(Bach.) (GeV/c); Comb. PID Proba (Bach. = #pi^{#pm})", 100, 0.0, 5.0, 110, 0.0, 1.10 ); | |
984 | fListHistCascade->Add(f2dHistPIDprobaPionVsMCPtBach); | |
985 | } | |
986 | ||
987 | ||
f87cd3db | 988 | // - Effective mass histos with perfect MC PID on the bachelor |
989 | ||
990 | if (! fHistMassWithMcPIDXiMinus) { | |
e8fd19de | 991 | fHistMassWithMcPIDXiMinus = new TH1F("fHistMassWithMcPIDXiMinus","#Xi^{-} candidates, with Bach. MC PID;M( #Lambda , #pi^{-} ) (GeV/c^{2});Counts", 400,1.2,2.0); |
f87cd3db | 992 | fListHistCascade->Add(fHistMassWithMcPIDXiMinus); |
993 | } | |
994 | ||
995 | if (! fHistMassWithMcPIDXiPlus) { | |
a786bd57 | 996 | fHistMassWithMcPIDXiPlus = new TH1F("fHistMassWithMcPIDXiPlus","#bar{#Xi}^{+} candidates, with Bach. MC PID;M( #bar{#Lambda}^{0} , #pi^{+} ) (GeV/c^{2});Counts",400,1.2,2.0); |
f87cd3db | 997 | fListHistCascade->Add(fHistMassWithMcPIDXiPlus); |
998 | } | |
999 | ||
1000 | if (! fHistMassWithMcPIDOmegaMinus) { | |
e8fd19de | 1001 | fHistMassWithMcPIDOmegaMinus = new TH1F("fHistMassWithMcPIDOmegaMinus","#Omega^{-} candidates, with Bach. MC PID;M( #Lambda , K^{-} ) (GeV/c^{2});Counts", 500,1.5,2.5); |
f87cd3db | 1002 | fListHistCascade->Add(fHistMassWithMcPIDOmegaMinus); |
1003 | } | |
1004 | ||
1005 | if (! fHistMassWithMcPIDOmegaPlus) { | |
a786bd57 | 1006 | fHistMassWithMcPIDOmegaPlus = new TH1F("fHistMassWithMcPIDOmegaPlus","#bar{#Omega}^{+} candidates, with Bach. MC PID;M( #bar{#Lambda}^{0} , K^{+} ) (GeV/c^{2});Counts", 500,1.5,2.5); |
f87cd3db | 1007 | fListHistCascade->Add(fHistMassWithMcPIDOmegaPlus); |
1008 | } | |
1009 | ||
1010 | ||
b67ec6f7 | 1011 | // - Effective mass histos for cascades candidates ASSOCIATED with MC. |
1012 | ||
1013 | if (! fHistAsMCMassXiMinus) { | |
e8fd19de | 1014 | fHistAsMCMassXiMinus = new TH1F("fHistAsMCMassXiMinus","#Xi^{-} candidates associated to MC;M( #Lambda , #pi^{-} ) (GeV/c^{2});Counts", 400,1.2,2.0); |
b67ec6f7 | 1015 | fListHistCascade->Add(fHistAsMCMassXiMinus); |
1016 | } | |
1017 | ||
1018 | if (! fHistAsMCMassXiPlus) { | |
a786bd57 | 1019 | fHistAsMCMassXiPlus = new TH1F("fHistAsMCMassXiPlus","#bar{#Xi}^{+} candidates associated to MC;M( #bar{#Lambda}^{0} , #pi^{+} ) (GeV/c^{2});Counts",400,1.2,2.0); |
b67ec6f7 | 1020 | fListHistCascade->Add(fHistAsMCMassXiPlus); |
1021 | } | |
1022 | ||
1023 | if (! fHistAsMCMassOmegaMinus) { | |
e8fd19de | 1024 | fHistAsMCMassOmegaMinus = new TH1F("fHistAsMCMassOmegaMinus","#Omega^{-} candidates associated to MC;M( #Lambda , K^{-} ) (GeV/c^{2});Counts", 500,1.5,2.5); |
b67ec6f7 | 1025 | fListHistCascade->Add(fHistAsMCMassOmegaMinus); |
1026 | } | |
1027 | ||
1028 | if (! fHistAsMCMassOmegaPlus) { | |
a786bd57 | 1029 | fHistAsMCMassOmegaPlus = new TH1F("fHistAsMCMassOmegaPlus","#bar{#Omega}^{+} candidates associated to MC;M( #bar{#Lambda}^{0} , K^{+} ) (GeV/c^{2});Counts", 500,1.5,2.5); |
b67ec6f7 | 1030 | fListHistCascade->Add(fHistAsMCMassOmegaPlus); |
1031 | } | |
1032 | ||
f870ac91 | 1033 | |
ff0753e1 | 1034 | // - Generated Pt Vs generated Y of the cascade candidates associated with MC |
1035 | // + having the proper maximum proba of combined PID for the bachelor | |
f870ac91 | 1036 | |
ff0753e1 | 1037 | if (!f2dHistAsMCandCombPIDGenPtVsGenYXiMinus) { |
e8fd19de | 1038 | f2dHistAsMCandCombPIDGenPtVsGenYXiMinus = new TH2F("f2dHistAsMCandCombPIDGenPtVsGenYXiMinus", "MC P_{t} Vs MC Y of #Xi^{-} (associated+Bach.PID); Pt_{MC} (GeV/c); Y_{MC}", 200, 0., 10., 220, -1.1, 1.1); |
ff0753e1 | 1039 | fListHistCascade->Add(f2dHistAsMCandCombPIDGenPtVsGenYXiMinus); |
f870ac91 | 1040 | } |
1041 | ||
ff0753e1 | 1042 | if (!f2dHistAsMCandCombPIDGenPtVsGenYXiPlus) { |
a786bd57 | 1043 | f2dHistAsMCandCombPIDGenPtVsGenYXiPlus = new TH2F("f2dHistAsMCandCombPIDGenPtVsGenYXiPlus", "MC P_{t} Vs MC Y of #bar{#Xi}^{+} (associated+Bach.PID); Pt_{MC} (GeV/c); Y_{MC}", 200, 0., 10., 220, -1.1, 1.1); |
ff0753e1 | 1044 | fListHistCascade->Add(f2dHistAsMCandCombPIDGenPtVsGenYXiPlus); |
f870ac91 | 1045 | } |
b67ec6f7 | 1046 | |
ff0753e1 | 1047 | if (!f2dHistAsMCandCombPIDGenPtVsGenYOmegaMinus) { |
e8fd19de | 1048 | f2dHistAsMCandCombPIDGenPtVsGenYOmegaMinus = new TH2F("f2dHistAsMCandCombPIDGenPtVsGenYOmegaMinus", "MC P_{t} Vs MC Y of #Omega^{-} (associated+Bach.PID); Pt_{MC} (GeV/c); Y_{MC}", 200, 0., 10., 220, -1.1, 1.1); |
ff0753e1 | 1049 | fListHistCascade->Add(f2dHistAsMCandCombPIDGenPtVsGenYOmegaMinus); |
f870ac91 | 1050 | } |
1051 | ||
ff0753e1 | 1052 | if (!f2dHistAsMCandCombPIDGenPtVsGenYOmegaPlus) { |
a786bd57 | 1053 | f2dHistAsMCandCombPIDGenPtVsGenYOmegaPlus = new TH2F("f2dHistAsMCandCombPIDGenPtVsGenYOmegaPlus", "MC P_{t} Vs MC Y of #bar{#Omega}^{+} (associated+Bach.PID); Pt_{MC} (GeV/c); Y_{MC}", 200, 0., 10., 220, -1.1, 1.1); |
ff0753e1 | 1054 | fListHistCascade->Add(f2dHistAsMCandCombPIDGenPtVsGenYOmegaPlus); |
f870ac91 | 1055 | } |
1056 | ||
1057 | ||
ff0753e1 | 1058 | // - Generated Pt Vs Generated Y, for the cascade candidates associated with MC |
b67ec6f7 | 1059 | |
ff0753e1 | 1060 | if (!f2dHistAsMCGenPtVsGenYXiMinus) { |
e8fd19de | 1061 | f2dHistAsMCGenPtVsGenYXiMinus = new TH2F("f2dHistAsMCGenPtVsGenYXiMinus", "MC P_{t} Vs MC Y of gen. #Xi^{-} (associated);Pt_{MC} (GeV/c); Rapidity, Y_{MC}",200, 0., 10., 220, -1.1, 1.1); |
ff0753e1 | 1062 | fListHistCascade->Add(f2dHistAsMCGenPtVsGenYXiMinus ); |
b67ec6f7 | 1063 | } |
1064 | ||
ff0753e1 | 1065 | if (!f2dHistAsMCGenPtVsGenYXiPlus) { |
a786bd57 | 1066 | f2dHistAsMCGenPtVsGenYXiPlus = new TH2F("f2dHistAsMCGenPtVsGenYXiPlus", "MC P_{t} Vs MC Y of gen. #bar{#Xi}^{+} (associated);Pt_{MC} (GeV/c); Rapidity, Y_{MC}",200, 0., 10., 220, -1.1, 1.1); |
ff0753e1 | 1067 | fListHistCascade->Add(f2dHistAsMCGenPtVsGenYXiPlus ); |
b67ec6f7 | 1068 | } |
1069 | ||
ff0753e1 | 1070 | if (!f2dHistAsMCGenPtVsGenYOmegaMinus) { |
e8fd19de | 1071 | f2dHistAsMCGenPtVsGenYOmegaMinus = new TH2F("f2dHistAsMCGenPtVsGenYOmegaMinus", "MC P_{t} Vs MC Y of gen. #Omega^{-} (associated);Pt_{MC} (GeV/c); Rapidity, Y_{MC}",200, 0., 10., 220, -1.1, 1.1); |
ff0753e1 | 1072 | fListHistCascade->Add(f2dHistAsMCGenPtVsGenYOmegaMinus ); |
b67ec6f7 | 1073 | } |
1074 | ||
ff0753e1 | 1075 | if (!f2dHistAsMCGenPtVsGenYOmegaPlus) { |
a786bd57 | 1076 | f2dHistAsMCGenPtVsGenYOmegaPlus = new TH2F("f2dHistAsMCGenPtVsGenYOmegaPlus", "MC P_{t} Vs MC Y of gen. #bar{#Omega}^{+} (associated);Pt_{MC} (GeV/c); Rapidity, Y_{MC}",200, 0., 10., 220, -1.1, 1.1); |
ff0753e1 | 1077 | fListHistCascade->Add(f2dHistAsMCGenPtVsGenYOmegaPlus ); |
b67ec6f7 | 1078 | } |
1079 | ||
1080 | ||
1081 | // - Generated Eta of the the cascade candidates associated with MC | |
1082 | if (!fHistAsMCGenEtaXiMinus) { | |
1083 | fHistAsMCGenEtaXiMinus = new TH1F("fHistAsMCGenEtaXiMinus", "#eta of gen. #Xi^{-} (associated);#eta;Number of Casc", 100, -5, 5); | |
1084 | fListHistCascade->Add( fHistAsMCGenEtaXiMinus ); | |
1085 | } | |
1086 | ||
1087 | if (!fHistAsMCGenEtaXiPlus) { | |
a786bd57 | 1088 | fHistAsMCGenEtaXiPlus = new TH1F("fHistAsMCGenEtaXiPlus", "#eta of gen. #bar{#Xi}^{+} (associated);#eta;Number of Casc", 100, -5, 5); |
b67ec6f7 | 1089 | fListHistCascade->Add( fHistAsMCGenEtaXiPlus ); |
1090 | } | |
1091 | ||
1092 | if (!fHistAsMCGenEtaOmegaMinus) { | |
1093 | fHistAsMCGenEtaOmegaMinus = new TH1F("fHistAsMCGenEtaOmegaMinus", "#eta of gen. #Omega^{-} (associated);#eta;Number of Casc", 100, -5, 5); | |
1094 | fListHistCascade->Add( fHistAsMCGenEtaOmegaMinus ); | |
1095 | } | |
1096 | ||
1097 | if (!fHistAsMCGenEtaOmegaPlus) { | |
a786bd57 | 1098 | fHistAsMCGenEtaOmegaPlus = new TH1F("fHistAsMCGenEtaOmegaPlus", "#eta of gen. #bar{#Omega}^{+} (associated);#eta;Number of Casc", 100, -5, 5); |
b67ec6f7 | 1099 | fListHistCascade->Add( fHistAsMCGenEtaOmegaPlus ); |
1100 | } | |
1101 | ||
1102 | ||
1103 | ||
1104 | // - Resolution in Pt as function of generated Pt | |
1105 | ||
1106 | if(! f2dHistAsMCResPtXiMinus) { | |
f870ac91 | 1107 | f2dHistAsMCResPtXiMinus = new TH2F( "f2dHistAsMCResPtXiMinus", "Resolution in Pt reconstruction for #Xi^{-}; Pt_{MC} (GeV/c); (Pt_{reco} - Pt_{MC}) / Pt_{MC}", 200, 0., 10., 200, -0.1, 0.1); |
b67ec6f7 | 1108 | fListHistCascade->Add(f2dHistAsMCResPtXiMinus); |
1109 | } | |
1110 | ||
1111 | if(! f2dHistAsMCResPtXiPlus) { | |
a786bd57 | 1112 | f2dHistAsMCResPtXiPlus = new TH2F( "f2dHistAsMCResPtXiPlus", "Resolution in Pt reconstruction for #bar{#Xi}^{+}; Pt_{MC} (GeV/c); (Pt_{reco} - Pt_{MC}) / Pt_{MC}", 200, 0., 10., 200, -0.1, 0.1); |
b67ec6f7 | 1113 | fListHistCascade->Add(f2dHistAsMCResPtXiPlus); |
1114 | } | |
1115 | ||
1116 | if(! f2dHistAsMCResPtOmegaMinus) { | |
f870ac91 | 1117 | f2dHistAsMCResPtOmegaMinus = new TH2F( "f2dHistAsMCResPtOmegaMinus", "Resolution in Pt reconstruction for #Omega^{-}; Pt_{MC} (GeV/c); (Pt_{reco} - Pt_{MC}) / Pt_{MC}", 200, 0., 10., 200, -0.1, 0.1); |
b67ec6f7 | 1118 | fListHistCascade->Add(f2dHistAsMCResPtOmegaMinus); |
1119 | } | |
1120 | ||
1121 | if(! f2dHistAsMCResPtOmegaPlus) { | |
a786bd57 | 1122 | f2dHistAsMCResPtOmegaPlus = new TH2F( "f2dHistAsMCResPtOmegaPlus", "Resolution in Pt reconstruction for #bar{#Omega}^{+}; Pt_{MC} (GeV/c); (Pt_{reco} - Pt_{MC}) / Pt_{MC}", 200, 0., 10., 200, -0.1, 0.1); |
b67ec6f7 | 1123 | fListHistCascade->Add(f2dHistAsMCResPtOmegaPlus); |
1124 | } | |
1125 | ||
1126 | // - Resolution in R(2D) as function of generated R | |
1127 | ||
1128 | if(! f2dHistAsMCResRXiMinus) { | |
f870ac91 | 1129 | f2dHistAsMCResRXiMinus = new TH2F( "f2dHistAsMCResRXiMinus", "Resolution in transv. position for #Xi^{-}; R_{MC} (cm); (R_{reco} - R_{MC}) / R_{MC}", 450, 0., 45.0, 240, -0.3, 0.3); |
b67ec6f7 | 1130 | fListHistCascade->Add(f2dHistAsMCResRXiMinus); |
1131 | } | |
1132 | ||
1133 | if(! f2dHistAsMCResRXiPlus) { | |
a786bd57 | 1134 | f2dHistAsMCResRXiPlus = new TH2F( "f2dHistAsMCResRXiPlus", "Resolution in transv. position for #bar{#Xi}^{+}; R_{MC} (cm); (R_{reco} - R_{MC}) / R_{MC}", 450, 0., 45.0, 240, -0.3, 0.3); |
b67ec6f7 | 1135 | fListHistCascade->Add(f2dHistAsMCResRXiPlus); |
1136 | } | |
1137 | ||
1138 | if(! f2dHistAsMCResROmegaMinus) { | |
f870ac91 | 1139 | f2dHistAsMCResROmegaMinus = new TH2F( "f2dHistAsMCResROmegaMinus", "Resolution in transv. position for #Omega^{-}; R_{MC} (cm); (R_{reco} - R_{MC}) / R_{MC}", 450, 0., 45.0, 240, -0.3, 0.3); |
b67ec6f7 | 1140 | fListHistCascade->Add(f2dHistAsMCResROmegaMinus); |
1141 | } | |
1142 | ||
1143 | if(! f2dHistAsMCResROmegaPlus) { | |
a786bd57 | 1144 | f2dHistAsMCResROmegaPlus = new TH2F( "f2dHistAsMCResROmegaPlus", "Resolution in transv. position for #bar{#Omega}^{+}; R_{MC} (cm); (R_{reco} - R_{MC}) / R_{MC}", 450, 0., 45.0, 240, -0.3, 0.3); |
b67ec6f7 | 1145 | fListHistCascade->Add(f2dHistAsMCResROmegaPlus); |
1146 | } | |
1147 | ||
c525f360 | 1148 | // - Resolution in phi as function of generated Pt |
1149 | ||
1150 | if(! f2dHistAsMCResPhiXiMinus) { | |
1151 | f2dHistAsMCResPhiXiMinus = new TH2F( "f2dHistAsMCResPhiXiMinus", "Resolution in #phi for #Xi^{-}; Pt_{MC} (GeV/c); #phi(MC) - #phi(reco) (deg)", 200, 0., 10., 60, -30., 30.); | |
1152 | fListHistCascade->Add(f2dHistAsMCResPhiXiMinus); | |
1153 | } | |
1154 | ||
1155 | if(! f2dHistAsMCResPhiXiPlus) { | |
a786bd57 | 1156 | f2dHistAsMCResPhiXiPlus = new TH2F( "f2dHistAsMCResPhiXiPlus", "Resolution in #phi for #bar{#Xi}^{+}; Pt_{MC} (GeV/c); #phi(MC) - #phi(reco) (deg)", 200, 0., 10., 60, -30., 30.); |
c525f360 | 1157 | fListHistCascade->Add(f2dHistAsMCResPhiXiPlus); |
1158 | } | |
1159 | ||
1160 | if(! f2dHistAsMCResPhiOmegaMinus) { | |
1161 | f2dHistAsMCResPhiOmegaMinus = new TH2F( "f2dHistAsMCResPhiOmegaMinus", "Resolution in #phi for #Omega^{-}; Pt_{MC} (GeV/c); #phi(MC) - #phi(reco) (deg)", 200, 0., 10., 60, -30., 30.); | |
1162 | fListHistCascade->Add(f2dHistAsMCResPhiOmegaMinus); | |
1163 | } | |
b67ec6f7 | 1164 | |
c525f360 | 1165 | if(! f2dHistAsMCResPhiOmegaPlus) { |
a786bd57 | 1166 | f2dHistAsMCResPhiOmegaPlus = new TH2F( "f2dHistAsMCResPhiOmegaPlus", "Resolution in #phi for #bar{#Omega}^{+}; Pt_{MC} (GeV/c); #phi(MC) - #phi(reco) (deg)", 200, 0., 10., 60, -30., 30.); |
c525f360 | 1167 | fListHistCascade->Add(f2dHistAsMCResPhiOmegaPlus); |
1168 | } | |
7e504402 | 1169 | |
1170 | ||
a786bd57 | 1171 | // - Correlation in Pt between the cascade and its (anti)proton daughter |
1172 | if(! f2dHistAsMCPtProtonVsPtXiMinus) { | |
1173 | f2dHistAsMCPtProtonVsPtXiMinus = new TH2F( "f2dHistAsMCPtProtonVsPtXiMinus", "Correlation Pt(p) Vs Pt(#Xi^{-}), associated to MC; Pt_{MC}(p) (GeV/c); Pt_{MC}(#Xi^{-}) (GeV/c)", 100, 0., 10., 100, 0., 10.); | |
1174 | fListHistCascade->Add(f2dHistAsMCPtProtonVsPtXiMinus); | |
1175 | } | |
1176 | ||
1177 | if(! f2dHistAsMCPtAntiProtonVsPtXiPlus) { | |
1178 | f2dHistAsMCPtAntiProtonVsPtXiPlus = new TH2F( "f2dHistAsMCPtAntiProtonVsPtXiPlus", "Correlation Pt(#bar{p}) Vs Pt(#bar{#Xi}^{+}), associated to MC; Pt_{MC}(#bar{p}) (GeV/c); Pt_{MC}(#bar{#Xi}^{+}) (GeV/c)", 100, 0., 10., 100, 0., 10.); | |
1179 | fListHistCascade->Add(f2dHistAsMCPtAntiProtonVsPtXiPlus); | |
1180 | } | |
1181 | ||
1182 | if(! f2dHistAsMCPtProtonVsPtOmegaMinus) { | |
1183 | f2dHistAsMCPtProtonVsPtOmegaMinus = new TH2F( "f2dHistAsMCPtProtonVsPtOmegaMinus", "Correlation Pt(p) Vs Pt(#Omega^{-}), associated to MC; Pt_{MC}(p) (GeV/c); Pt_{MC}(#Omega^{-}) (GeV/c)", 100, 0., 10., 100, 0., 10.); | |
1184 | fListHistCascade->Add(f2dHistAsMCPtProtonVsPtOmegaMinus); | |
1185 | } | |
1186 | ||
1187 | ||
1188 | if(! f2dHistAsMCPtAntiProtonVsPtOmegaPlus) { | |
1189 | f2dHistAsMCPtAntiProtonVsPtOmegaPlus = new TH2F( "f2dHistAsMCPtAntiProtonVsPtOmegaPlus", "Correlation Pt(#bar{p}) Vs Pt(#bar{#Omega}^{+}), associated to MC; Pt_{MC}(#bar{p}) (GeV/c); Pt_{MC}(#bar{#Omega}^{+}) (GeV/c)", 100, 0., 10., 100, 0., 10.); | |
1190 | fListHistCascade->Add(f2dHistAsMCPtAntiProtonVsPtOmegaPlus); | |
1191 | } | |
1192 | ||
1193 | ||
1194 | ||
7e504402 | 1195 | // - PID container |
1196 | if(! fCFContCascadePIDAsXiMinus) { | |
1197 | const Int_t lNbSteps = 7 ; | |
1198 | const Int_t lNbVariables = 4 ; | |
1199 | ||
1200 | //array for the number of bins in each dimension : | |
e8fd19de | 1201 | Int_t lNbBinsPerVar[4] = {0}; |
7e504402 | 1202 | lNbBinsPerVar[0] = 200; |
a786bd57 | 1203 | lNbBinsPerVar[1] = 75; |
e8fd19de | 1204 | lNbBinsPerVar[2] = 44; |
7e504402 | 1205 | lNbBinsPerVar[3] = 250; |
1206 | ||
1207 | ||
1208 | fCFContCascadePIDAsXiMinus = new AliCFContainer("fCFContCascadePIDAsXiMinus","Pt_{cascade} Vs M_{#Xi^{-} candidates} Vs Y_{#Xi}", lNbSteps, lNbVariables, lNbBinsPerVar ); | |
1209 | ||
1210 | //setting the bin limits (valid for v4-18-10-AN) | |
a786bd57 | 1211 | fCFContCascadePIDAsXiMinus->SetBinLimits(0, 0.0 , 10.0 ); // Pt(Cascade) |
1212 | fCFContCascadePIDAsXiMinus->SetBinLimits(1, 1.25 , 1.40 ); // Xi Effective mass | |
1213 | fCFContCascadePIDAsXiMinus->SetBinLimits(2, -1.1 , 1.1 ); // Rapidity | |
7e504402 | 1214 | if(fCollidingSystems) |
c525f360 | 1215 | fCFContCascadePIDAsXiMinus->SetBinLimits(3, 0.0, 20000.0 ); // nTrackPrimaryMultiplicity |
7e504402 | 1216 | else |
c525f360 | 1217 | fCFContCascadePIDAsXiMinus->SetBinLimits(3, 0.0, 250.0 ); // nTrackPrimaryMultiplicity |
7e504402 | 1218 | |
1219 | // Setting the step title : one per PID case | |
1220 | fCFContCascadePIDAsXiMinus->SetStepTitle(0, "No PID"); | |
e8fd19de | 1221 | fCFContCascadePIDAsXiMinus->SetStepTitle(1, "TPC PID / 4-#sigma cut on Bachelor track"); |
1222 | fCFContCascadePIDAsXiMinus->SetStepTitle(2, "TPC PID / 4-#sigma cut on Bachelor+Baryon tracks"); | |
1223 | fCFContCascadePIDAsXiMinus->SetStepTitle(3, "TPC PID / 4-#sigma cut on Bachelor+Baryon+Meson tracks"); | |
7e504402 | 1224 | fCFContCascadePIDAsXiMinus->SetStepTitle(4, "Comb. PID / Bachelor"); |
1225 | fCFContCascadePIDAsXiMinus->SetStepTitle(5, "Comb. PID / Bachelor+Baryon"); | |
1226 | fCFContCascadePIDAsXiMinus->SetStepTitle(6, "Comb. PID / Bachelor+Baryon+Meson"); | |
1227 | ||
1228 | // Setting the variable title, per axis | |
1229 | fCFContCascadePIDAsXiMinus->SetVarTitle(0, "Pt_{cascade} (GeV/c)"); | |
1230 | fCFContCascadePIDAsXiMinus->SetVarTitle(1, "M( #Lambda , #pi^{-} ) (GeV/c^{2})"); | |
1231 | fCFContCascadePIDAsXiMinus->SetVarTitle(2, "Y_{#Xi}"); | |
c525f360 | 1232 | fCFContCascadePIDAsXiMinus->SetVarTitle(3, "Primary Track Multiplicity"); |
7e504402 | 1233 | |
1234 | fListHistCascade->Add(fCFContCascadePIDAsXiMinus); | |
1235 | ||
1236 | } | |
1237 | ||
1238 | if(! fCFContCascadePIDAsXiPlus) { | |
1239 | const Int_t lNbSteps = 7 ; | |
1240 | const Int_t lNbVariables = 4 ; | |
1241 | ||
1242 | //array for the number of bins in each dimension : | |
e8fd19de | 1243 | Int_t lNbBinsPerVar[4] = {0}; |
7e504402 | 1244 | lNbBinsPerVar[0] = 200; |
a786bd57 | 1245 | lNbBinsPerVar[1] = 75; |
e8fd19de | 1246 | lNbBinsPerVar[2] = 44; |
7e504402 | 1247 | lNbBinsPerVar[3] = 250; |
1248 | ||
1249 | ||
a786bd57 | 1250 | fCFContCascadePIDAsXiPlus = new AliCFContainer("fCFContCascadePIDAsXiPlus","Pt_{cascade} Vs M_{#bar{#Xi}^{+} candidates} Vs Y_{#Xi}", lNbSteps, lNbVariables, lNbBinsPerVar ); |
7e504402 | 1251 | |
1252 | ||
1253 | //setting the bin limits (valid for v4-18-10-AN) | |
a786bd57 | 1254 | fCFContCascadePIDAsXiPlus->SetBinLimits(0, 0.0 , 10.0 ); // Pt(Cascade) |
1255 | fCFContCascadePIDAsXiPlus->SetBinLimits(1, 1.25 , 1.40 ); // Xi Effective mass | |
1256 | fCFContCascadePIDAsXiPlus->SetBinLimits(2, -1.1 , 1.1 ); // Rapidity | |
7e504402 | 1257 | if(fCollidingSystems) |
c525f360 | 1258 | fCFContCascadePIDAsXiPlus->SetBinLimits(3, 0.0, 20000.0 ); // nTrackPrimaryMultiplicity |
7e504402 | 1259 | else |
c525f360 | 1260 | fCFContCascadePIDAsXiPlus->SetBinLimits(3, 0.0, 250.0 ); // nTrackPrimaryMultiplicity |
7e504402 | 1261 | |
1262 | // Setting the step title : one per PID case | |
1263 | fCFContCascadePIDAsXiPlus->SetStepTitle(0, "No PID"); | |
e8fd19de | 1264 | fCFContCascadePIDAsXiPlus->SetStepTitle(1, "TPC PID / 4-#sigma cut on Bachelor track"); |
1265 | fCFContCascadePIDAsXiPlus->SetStepTitle(2, "TPC PID / 4-#sigma cut on Bachelor+Baryon tracks"); | |
1266 | fCFContCascadePIDAsXiPlus->SetStepTitle(3, "TPC PID / 4-#sigma cut on Bachelor+Baryon+Meson tracks"); | |
7e504402 | 1267 | fCFContCascadePIDAsXiPlus->SetStepTitle(4, "Comb. PID / Bachelor"); |
1268 | fCFContCascadePIDAsXiPlus->SetStepTitle(5, "Comb. PID / Bachelor+Baryon"); | |
1269 | fCFContCascadePIDAsXiPlus->SetStepTitle(6, "Comb. PID / Bachelor+Baryon+Meson"); | |
1270 | ||
1271 | // Setting the variable title, per axis | |
1272 | fCFContCascadePIDAsXiPlus->SetVarTitle(0, "Pt_{cascade} (GeV/c)"); | |
1273 | fCFContCascadePIDAsXiPlus->SetVarTitle(1, "M( #Lambda , #pi^{+} ) (GeV/c^{2})"); | |
1274 | fCFContCascadePIDAsXiPlus->SetVarTitle(2, "Y_{#Xi}"); | |
c525f360 | 1275 | fCFContCascadePIDAsXiPlus->SetVarTitle(3, "Primary Track Multiplicity"); |
7e504402 | 1276 | |
1277 | fListHistCascade->Add(fCFContCascadePIDAsXiPlus); | |
1278 | ||
1279 | } | |
1280 | ||
1281 | ||
1282 | if(! fCFContCascadePIDAsOmegaMinus) { | |
1283 | const Int_t lNbSteps = 7 ; | |
1284 | const Int_t lNbVariables = 4 ; | |
1285 | ||
1286 | //array for the number of bins in each dimension : | |
e8fd19de | 1287 | Int_t lNbBinsPerVar[4] = {0}; |
7e504402 | 1288 | lNbBinsPerVar[0] = 200; |
a786bd57 | 1289 | lNbBinsPerVar[1] = 60; |
e8fd19de | 1290 | lNbBinsPerVar[2] = 44; |
7e504402 | 1291 | lNbBinsPerVar[3] = 250; |
1292 | ||
1293 | ||
1294 | fCFContCascadePIDAsOmegaMinus = new AliCFContainer("fCFContCascadePIDAsOmegaMinus","Pt_{cascade} Vs M_{#Omega^{-} candidates} Vs Y_{#Omega}", lNbSteps, lNbVariables, lNbBinsPerVar ); | |
1295 | ||
1296 | ||
1297 | //setting the bin limits (valid for v4-18-10-AN) | |
a786bd57 | 1298 | fCFContCascadePIDAsOmegaMinus->SetBinLimits(0, 0.0 , 10.0 ); // Pt(Cascade) |
1299 | fCFContCascadePIDAsOmegaMinus->SetBinLimits(1, 1.62 , 1.74 ); // Omega Effective mass | |
1300 | fCFContCascadePIDAsOmegaMinus->SetBinLimits(2, -1.1 , 1.1 ); // Rapidity | |
7e504402 | 1301 | if(fCollidingSystems) |
c525f360 | 1302 | fCFContCascadePIDAsOmegaMinus->SetBinLimits(3, 0.0, 20000.0 ); // nTrackPrimaryMultiplicity |
7e504402 | 1303 | else |
c525f360 | 1304 | fCFContCascadePIDAsOmegaMinus->SetBinLimits(3, 0.0, 250.0 ); // nTrackPrimaryMultiplicity |
7e504402 | 1305 | |
1306 | // Setting the step title : one per PID case | |
1307 | fCFContCascadePIDAsOmegaMinus->SetStepTitle(0, "No PID"); | |
e8fd19de | 1308 | fCFContCascadePIDAsOmegaMinus->SetStepTitle(1, "TPC PID / 4-#sigma cut on Bachelor track"); |
1309 | fCFContCascadePIDAsOmegaMinus->SetStepTitle(2, "TPC PID / 4-#sigma cut on Bachelor+Baryon tracks"); | |
1310 | fCFContCascadePIDAsOmegaMinus->SetStepTitle(3, "TPC PID / 4-#sigma cut on Bachelor+Baryon+Meson tracks"); | |
7e504402 | 1311 | fCFContCascadePIDAsOmegaMinus->SetStepTitle(4, "Comb. PID / Bachelor"); |
1312 | fCFContCascadePIDAsOmegaMinus->SetStepTitle(5, "Comb. PID / Bachelor+Baryon"); | |
1313 | fCFContCascadePIDAsOmegaMinus->SetStepTitle(6, "Comb. PID / Bachelor+Baryon+Meson"); | |
1314 | ||
1315 | // Setting the variable title, per axis | |
1316 | fCFContCascadePIDAsOmegaMinus->SetVarTitle(0, "Pt_{cascade} (GeV/c)"); | |
1317 | fCFContCascadePIDAsOmegaMinus->SetVarTitle(1, "M( #Lambda , K^{-} ) (GeV/c^{2})"); | |
1318 | fCFContCascadePIDAsOmegaMinus->SetVarTitle(2, "Y_{#Omega}"); | |
c525f360 | 1319 | fCFContCascadePIDAsOmegaMinus->SetVarTitle(3, "Primary Track Multiplicity"); |
7e504402 | 1320 | |
1321 | fListHistCascade->Add(fCFContCascadePIDAsOmegaMinus); | |
1322 | ||
1323 | } | |
1324 | ||
1325 | if(! fCFContCascadePIDAsOmegaPlus) { | |
1326 | const Int_t lNbSteps = 7 ; | |
1327 | const Int_t lNbVariables = 4 ; | |
1328 | ||
1329 | //array for the number of bins in each dimension : | |
e8fd19de | 1330 | Int_t lNbBinsPerVar[4]= {0}; |
7e504402 | 1331 | lNbBinsPerVar[0] = 200; |
a786bd57 | 1332 | lNbBinsPerVar[1] = 60; |
e8fd19de | 1333 | lNbBinsPerVar[2] = 44; |
7e504402 | 1334 | lNbBinsPerVar[3] = 250; |
1335 | ||
1336 | ||
a786bd57 | 1337 | fCFContCascadePIDAsOmegaPlus = new AliCFContainer("fCFContCascadePIDAsOmegaPlus","Pt_{cascade} Vs M_{#bar{#Omega}^{+} candidates} Vs Y_{#Omega}", lNbSteps, lNbVariables, lNbBinsPerVar ); |
7e504402 | 1338 | |
1339 | ||
1340 | //setting the bin limits (valid for v4-18-10-AN) | |
a786bd57 | 1341 | fCFContCascadePIDAsOmegaPlus->SetBinLimits(0, 0.0 , 10.0 ); // Pt(Cascade) |
1342 | fCFContCascadePIDAsOmegaPlus->SetBinLimits(1, 1.62 , 1.74 ); // Omega Effective mass | |
1343 | fCFContCascadePIDAsOmegaPlus->SetBinLimits(2, -1.1 , 1.1 ); // Rapidity | |
7e504402 | 1344 | if(fCollidingSystems) |
c525f360 | 1345 | fCFContCascadePIDAsOmegaPlus->SetBinLimits(3, 0.0, 20000.0 ); // nTrackPrimaryMultiplicity |
7e504402 | 1346 | else |
c525f360 | 1347 | fCFContCascadePIDAsOmegaPlus->SetBinLimits(3, 0.0, 250.0 ); // nTrackPrimaryMultiplicity |
7e504402 | 1348 | |
1349 | // Setting the step title : one per PID case | |
1350 | fCFContCascadePIDAsOmegaPlus->SetStepTitle(0, "No PID"); | |
e8fd19de | 1351 | fCFContCascadePIDAsOmegaPlus->SetStepTitle(1, "TPC PID / 4-#sigma cut on Bachelor track"); |
1352 | fCFContCascadePIDAsOmegaPlus->SetStepTitle(2, "TPC PID / 4-#sigma cut on Bachelor+Baryon tracks"); | |
1353 | fCFContCascadePIDAsOmegaPlus->SetStepTitle(3, "TPC PID / 4-#sigma cut on Bachelor+Baryon+Meson tracks"); | |
7e504402 | 1354 | fCFContCascadePIDAsOmegaPlus->SetStepTitle(4, "Comb. PID / Bachelor"); |
1355 | fCFContCascadePIDAsOmegaPlus->SetStepTitle(5, "Comb. PID / Bachelor+Baryon"); | |
1356 | fCFContCascadePIDAsOmegaPlus->SetStepTitle(6, "Comb. PID / Bachelor+Baryon+Meson"); | |
1357 | ||
1358 | // Setting the variable title, per axis | |
1359 | fCFContCascadePIDAsOmegaPlus->SetVarTitle(0, "Pt_{cascade} (GeV/c)"); | |
1360 | fCFContCascadePIDAsOmegaPlus->SetVarTitle(1, "M( #Lambda , K^{+} ) (GeV/c^{2})"); | |
1361 | fCFContCascadePIDAsOmegaPlus->SetVarTitle(2, "Y_{#Omega}"); | |
c525f360 | 1362 | fCFContCascadePIDAsOmegaPlus->SetVarTitle(3, "Primary Track Multiplicity"); |
7e504402 | 1363 | |
1364 | fListHistCascade->Add(fCFContCascadePIDAsOmegaPlus); | |
1365 | ||
1366 | } | |
1367 | ||
9d670198 | 1368 | // Part 3 : Towards the optimisation of topological selections ------- |
1369 | if(! fCFContAsCascadeCuts){ | |
1370 | ||
1371 | // Container meant to store all the relevant distributions corresponding to the cut variables. | |
1372 | // So far, 20 variables have been identified. | |
1373 | // The following will be done in quite a brut force way ... | |
1374 | // FIXME Improvement expected later (before Pb-Pb data at least) | |
1375 | // - Define a user binning to have less bins in each dimension | |
1376 | // - boolean for enabling/disbaling this CFContainer | |
1377 | const Int_t lNbSteps = 4 ; | |
1378 | const Int_t lNbVariables = 20 ; | |
1379 | ||
1380 | //array for the number of bins in each dimension : | |
e8fd19de | 1381 | Int_t lNbBinsPerVar[20] = {0}; |
9d670198 | 1382 | lNbBinsPerVar[0] = 25; |
1383 | lNbBinsPerVar[1] = 25; | |
1384 | lNbBinsPerVar[2] = 20; | |
1385 | lNbBinsPerVar[3] = 40; | |
e8fd19de | 1386 | lNbBinsPerVar[4] = 30; |
1387 | lNbBinsPerVar[5] = 25; | |
9d670198 | 1388 | |
1389 | lNbBinsPerVar[6] = 20; | |
1390 | lNbBinsPerVar[7] = 40; | |
1391 | lNbBinsPerVar[8] = 40; | |
1392 | lNbBinsPerVar[9] = 25; | |
1393 | lNbBinsPerVar[10] = 25; | |
1394 | ||
e8fd19de | 1395 | lNbBinsPerVar[11] = 75; // 2-MeV/c2 bins |
1396 | lNbBinsPerVar[12] = 60; // 2-MeV/c2 bins | |
9d670198 | 1397 | |
e8fd19de | 1398 | lNbBinsPerVar[13] = 100; |
9d670198 | 1399 | |
1400 | lNbBinsPerVar[14] = 44; // 0.05 in rapidity units | |
1401 | lNbBinsPerVar[15] = 44; // 0.05 in rapidity units | |
1402 | ||
1403 | lNbBinsPerVar[16] = 20; | |
1404 | ||
1405 | lNbBinsPerVar[17] = 50; | |
e8fd19de | 1406 | lNbBinsPerVar[18] = 100; |
1407 | lNbBinsPerVar[19] = 24; | |
1408 | ||
1409 | ||
1410 | fCFContAsCascadeCuts = new AliCFContainer("fCFContAsCascadeCuts","Cut Container for Asso. Cascades", lNbSteps, lNbVariables, lNbBinsPerVar ); | |
1411 | ||
1412 | //0 | |
1413 | Double_t *lBinLim0 = new Double_t[ lNbBinsPerVar[0]+1 ]; | |
1414 | 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 ; | |
1415 | lBinLim0[ lNbBinsPerVar[0] ] = 20.0; | |
1416 | fCFContAsCascadeCuts -> SetBinLimits(0, lBinLim0 ); // DcaXiDaughters : 0.0 to 5.0 | |
1417 | delete [] lBinLim0; | |
1418 | //1 | |
1419 | Double_t *lBinLim1 = new Double_t[ lNbBinsPerVar[1]+1 ]; | |
1420 | 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 ; | |
1421 | lBinLim1[ lNbBinsPerVar[1] ] = 100.0; | |
1422 | fCFContAsCascadeCuts -> SetBinLimits(1, lBinLim1 ); // DcaBachToPrimVertexXi : 0.0 to 0.25 | |
1423 | delete [] lBinLim1; | |
1424 | //2 | |
1425 | Double_t *lBinLim2 = new Double_t[ lNbBinsPerVar[2]+1 ]; | |
1426 | 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) ; | |
1427 | lBinLim2[0] = 0.0; | |
1428 | fCFContAsCascadeCuts -> SetBinLimits(2, lBinLim2 ); // XiCosineOfPointingAngle : 0.80 to 1.0 | |
1429 | delete [] lBinLim2; | |
1430 | //3 | |
1431 | Double_t *lBinLim3 = new Double_t[ lNbBinsPerVar[3]+1 ]; | |
1432 | 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 ; | |
1433 | lBinLim3[ lNbBinsPerVar[3] ] = 110.0; | |
1434 | fCFContAsCascadeCuts -> SetBinLimits(3, lBinLim3 ); // XiRadius : 0.0 to 4.0 | |
1435 | delete [] lBinLim3; | |
1436 | //4 | |
1437 | fCFContAsCascadeCuts->SetBinLimits(4, 1.1 , 1.13 ); // InvMassLambdaAsCascDghter | |
1438 | //5 | |
1439 | Double_t *lBinLim5 = new Double_t[ lNbBinsPerVar[5]+1 ]; | |
1440 | 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 ; | |
1441 | lBinLim5[ lNbBinsPerVar[5] ] = 20.0; | |
1442 | fCFContAsCascadeCuts -> SetBinLimits(5, lBinLim5 ); // DcaV0DaughtersXi : 0.0 to 5.0 | |
1443 | delete [] lBinLim5; | |
1444 | ||
1445 | ||
1446 | //6 | |
1447 | Double_t *lBinLim6 = new Double_t[ lNbBinsPerVar[6]+1 ]; | |
1448 | 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) ; | |
1449 | lBinLim6[0] = 0.0; | |
1450 | fCFContAsCascadeCuts -> SetBinLimits(6, lBinLim6 ); // V0CosineOfPointingAngleXi : 0.80 to 1.0 | |
1451 | delete [] lBinLim6; | |
1452 | //7 | |
1453 | Double_t *lBinLim7 = new Double_t[ lNbBinsPerVar[7]+1 ]; | |
1454 | 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 ; | |
1455 | lBinLim7[ lNbBinsPerVar[7] ] = 100.0; | |
1456 | fCFContAsCascadeCuts -> SetBinLimits(7, lBinLim7 ); // V0RadiusXi : 0.0 to 8.0 | |
1457 | delete [] lBinLim7; | |
1458 | //8 | |
1459 | Double_t *lBinLim8 = new Double_t[ lNbBinsPerVar[8]+1 ]; | |
1460 | 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 ; | |
1461 | lBinLim8[ lNbBinsPerVar[8] ] = 100.0; | |
1462 | fCFContAsCascadeCuts -> SetBinLimits(8, lBinLim8 ); // DcaV0ToPrimVertexXi : 0.0 to 0.4 | |
1463 | delete [] lBinLim8; | |
1464 | //9 | |
1465 | Double_t *lBinLim9 = new Double_t[ lNbBinsPerVar[9]+1 ]; | |
1466 | 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 ; | |
1467 | lBinLim9[ lNbBinsPerVar[9] ] = 100.0; | |
1468 | fCFContAsCascadeCuts -> SetBinLimits(9, lBinLim9 ); // DcaPosToPrimVertexXi : 0.0 to 0.25 | |
1469 | delete [] lBinLim9; | |
1470 | //10 | |
1471 | Double_t *lBinLim10 = new Double_t[ lNbBinsPerVar[10]+1 ]; | |
1472 | 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 ; | |
1473 | lBinLim10[ lNbBinsPerVar[10] ] = 100.0; | |
1474 | fCFContAsCascadeCuts -> SetBinLimits(10, lBinLim10 ); // DcaPosToPrimVertexXi : 0.0 to 0.25 | |
1475 | delete [] lBinLim10; | |
1476 | ||
1477 | ||
1478 | //11 | |
1479 | fCFContAsCascadeCuts->SetBinLimits(11, 1.25 , 1.40 ); // InvMassXi | |
1480 | fCFContAsCascadeCuts->SetBinLimits(12, 1.62 , 1.74 ); // InvMassOmega | |
1481 | fCFContAsCascadeCuts->SetBinLimits(13, 0.0 , 10.0 ); // XiTransvMom | |
1482 | fCFContAsCascadeCuts->SetBinLimits(14, -1.1 , 1.1 ); // Y(Xi) | |
1483 | fCFContAsCascadeCuts->SetBinLimits(15, -1.1 , 1.1 ); // Y(Omega) | |
1484 | fCFContAsCascadeCuts->SetBinLimits(16, -10.0 , 10.0 ); // BestPrimaryVtxPosZ | |
1485 | if(fCollidingSystems){ | |
c525f360 | 1486 | fCFContAsCascadeCuts->SetBinLimits(17, 0.0, 10000.0 ); // nTrackPrimaryMultiplicity |
a786bd57 | 1487 | fCFContAsCascadeCuts->SetBinLimits(18, 0.0, 10000.0 ); // nITSandTPCtracksAndSPDtracklets |
e8fd19de | 1488 | } |
1489 | else{ | |
a786bd57 | 1490 | //fCFContAsCascadeCuts->SetBinLimits(17, 0.0, 250.0 ); // nTrackPrimaryMultiplicity |
1491 | Double_t *lBinLim17 = new Double_t[ lNbBinsPerVar[17]+1 ]; | |
1492 | lBinLim17[0] = 0; lBinLim17[10] = 10; lBinLim17[20] = 24; lBinLim17[30] = 45; lBinLim17[40] = 95; lBinLim17[50] = 250; | |
1493 | lBinLim17[1] = 1; lBinLim17[11] = 11; lBinLim17[21] = 25; lBinLim17[31] = 50; lBinLim17[41] = 100; | |
1494 | lBinLim17[2] = 2; lBinLim17[12] = 13; lBinLim17[22] = 27; lBinLim17[32] = 55; lBinLim17[42] = 105; | |
1495 | lBinLim17[3] = 3; lBinLim17[13] = 14; lBinLim17[23] = 30; lBinLim17[33] = 60; lBinLim17[43] = 110; | |
1496 | lBinLim17[4] = 4; lBinLim17[14] = 15; lBinLim17[24] = 31; lBinLim17[34] = 65; lBinLim17[44] = 115; | |
1497 | lBinLim17[5] = 5; lBinLim17[15] = 16; lBinLim17[25] = 32; lBinLim17[35] = 70; lBinLim17[45] = 120; | |
1498 | lBinLim17[6] = 6; lBinLim17[16] = 20; lBinLim17[26] = 33; lBinLim17[36] = 75; lBinLim17[46] = 125; | |
1499 | lBinLim17[7] = 7; lBinLim17[17] = 21; lBinLim17[27] = 34; lBinLim17[37] = 80; lBinLim17[47] = 130; | |
1500 | lBinLim17[8] = 8; lBinLim17[18] = 22; lBinLim17[28] = 35; lBinLim17[38] = 85; lBinLim17[48] = 135; | |
1501 | lBinLim17[9] = 9; lBinLim17[19] = 23; lBinLim17[29] = 40; lBinLim17[39] = 90; lBinLim17[49] = 140; | |
1502 | ||
1503 | fCFContAsCascadeCuts -> SetBinLimits(17, lBinLim17 ); // nTrackPrimaryMultiplicity : 0 to 250 | |
1504 | delete [] lBinLim17; | |
1505 | ||
1506 | ||
1507 | fCFContAsCascadeCuts->SetBinLimits(18, 0.0, 200.0 ); // nITSandTPCtracksAndSPDtracklets | |
e8fd19de | 1508 | } |
1509 | fCFContAsCascadeCuts->SetBinLimits(19, 68.0 ,164.0 ); // BachTPCClusters | |
9d670198 | 1510 | |
1511 | ||
e8fd19de | 1512 | // Regular binning definition (valid for v4-18-10-AN on) |
1513 | /* | |
1514 | //setting the bin limits | |
1515 | fCFContAsCascadeCuts->SetBinLimits(0, 0.0 , 2.5 ); // DcaXiDaughters | |
9d670198 | 1516 | fCFContAsCascadeCuts->SetBinLimits(1, 0.0 , 0.25 ); // DcaBachToPrimVertexXi |
e8fd19de | 1517 | fCFContAsCascadeCuts->SetBinLimits(2, 0.99 , 1.0 ); // XiCosineOfPointingAngle |
9d670198 | 1518 | fCFContAsCascadeCuts->SetBinLimits(3, 0.0 , 4.0 ); // XiRadius |
1519 | fCFContAsCascadeCuts->SetBinLimits(4, 1.1 , 1.15 ); // InvMassLambdaAsCascDghter | |
e8fd19de | 1520 | fCFContAsCascadeCuts->SetBinLimits(5, 0.0 , 1.0 ); // DcaV0DaughtersXi |
9d670198 | 1521 | fCFContAsCascadeCuts->SetBinLimits(6, 0.98 , 1.0 ); // V0CosineOfPointingAngleXi |
1522 | fCFContAsCascadeCuts->SetBinLimits(7, 0.0 , 20.0 ); // V0RadiusXi | |
1523 | fCFContAsCascadeCuts->SetBinLimits(8, 0.0 , 1.0 ); // DcaV0ToPrimVertexXi | |
e8fd19de | 1524 | fCFContAsCascadeCuts->SetBinLimits(9, 0.0 , 0.25 ); // DcaPosToPrimVertexXi |
1525 | fCFContAsCascadeCuts->SetBinLimits(10, 0.0 , 0.25 ); // DcaNegToPrimVertexXi | |
1526 | fCFContAsCascadeCuts->SetBinLimits(11, 1.25 , 1.40 ); // InvMassXi | |
1527 | fCFContAsCascadeCuts->SetBinLimits(12, 1.62 , 1.74 ); // InvMassOmega | |
9d670198 | 1528 | fCFContAsCascadeCuts->SetBinLimits(13, 0.0 , 10.0 ); // pt_MC(Xi) |
1529 | fCFContAsCascadeCuts->SetBinLimits(14, -1.1 , 1.1 ); // Y_MC(Xi) | |
1530 | fCFContAsCascadeCuts->SetBinLimits(15, -1.1 , 1.1 ); // Y_MC(Omega) | |
1531 | fCFContAsCascadeCuts->SetBinLimits(16, -10.0 , 10.0 ); // BestPrimaryVtxPosZ | |
1532 | if(fCollidingSystems){ | |
c525f360 | 1533 | fCFContAsCascadeCuts->SetBinLimits(17, 0.0, 10000.0 ); // nTrackPrimaryMultiplicity |
a786bd57 | 1534 | fCFContAsCascadeCuts->SetBinLimits(18, 0.0, 10000.0 ); // nITSandTPCtracksAndSPDtracklets |
9d670198 | 1535 | } |
1536 | else{ | |
c525f360 | 1537 | fCFContAsCascadeCuts->SetBinLimits(17, 0.0, 250.0 ); // nTrackPrimaryMultiplicity |
a786bd57 | 1538 | fCFContAsCascadeCuts->SetBinLimits(18, 0.0, 200.0 ); // nITSandTPCtracksAndSPDtracklets |
9d670198 | 1539 | } |
1540 | fCFContAsCascadeCuts->SetBinLimits(19, 25.0 ,165.0 ); // BachTPCClusters | |
e8fd19de | 1541 | */ |
9d670198 | 1542 | |
1543 | // Setting the number of steps : one for each cascade species (Xi-, Xi+ and Omega-, Omega+) | |
1544 | fCFContAsCascadeCuts->SetStepTitle(0, "#Xi^{-} candidates associated to MC"); | |
1545 | fCFContAsCascadeCuts->SetStepTitle(1, "#bar{#Xi}^{+} candidates associated to MC"); | |
1546 | fCFContAsCascadeCuts->SetStepTitle(2, "#Omega^{-} candidates associated to MC"); | |
1547 | fCFContAsCascadeCuts->SetStepTitle(3, "#bar{#Omega}^{+} candidates associated to MC"); | |
1548 | ||
1549 | // Setting the variable title, per axis | |
1550 | // fCFContAsCascadeCuts->SetVarTitle(40, "Chi2Xi"); | |
1551 | fCFContAsCascadeCuts->SetVarTitle(0, "Dca(XiDaughters) (cm)"); | |
1552 | fCFContAsCascadeCuts->SetVarTitle(1, "Dca(Bach/PrimVertex) (cm)"); | |
1553 | fCFContAsCascadeCuts->SetVarTitle(2, "cos(Xi pointing angle)"); | |
1554 | fCFContAsCascadeCuts->SetVarTitle(3, "R_{2d}(Xi decay) (cm)"); | |
1555 | fCFContAsCascadeCuts->SetVarTitle(4, "M_{#Lambda}(As Casc Dghter) (GeV/c^{2})"); | |
1556 | // fCFContAsCascadeCuts->SetVarTitle(40, "V0Chi2Xi"); | |
1557 | fCFContAsCascadeCuts->SetVarTitle(5, "Dca(V0 Daughters Xi) (cm)"); | |
1558 | ||
1559 | fCFContAsCascadeCuts->SetVarTitle(6, "cos(V0 pointing Angle) in Casc"); | |
1560 | fCFContAsCascadeCuts->SetVarTitle(7, "R_{2d}(V0 decay) (cm)"); | |
1561 | fCFContAsCascadeCuts->SetVarTitle(8, "Dca(V0/PrimVertex) (cm)"); | |
1562 | fCFContAsCascadeCuts->SetVarTitle(9, "Dca(Pos/PrimVertex) (cm)"); | |
1563 | fCFContAsCascadeCuts->SetVarTitle(10, "Dca(Neg/PrimVertex) (cm)"); | |
1564 | ||
1565 | fCFContAsCascadeCuts->SetVarTitle(11, "Inv. Mass(Xi) (GeV/c^{2})"); | |
1566 | fCFContAsCascadeCuts->SetVarTitle(12, "Inv. Mass(Omega) (GeV/c^{2})"); | |
1567 | ||
1568 | fCFContAsCascadeCuts->SetVarTitle(13, "Pt_{MC}(Casc.) (GeV/c)"); | |
1569 | //fCFContAsCascadeCuts->SetVarTitle(40, "V0toXiCosineOfPointingAngle"); | |
1570 | ||
1571 | fCFContAsCascadeCuts->SetVarTitle(14, "Y_{MC}(Xi)"); | |
1572 | fCFContAsCascadeCuts->SetVarTitle(15, "Y_{MC}(Omega)"); | |
1573 | ||
1574 | fCFContAsCascadeCuts->SetVarTitle(16, "Z-position(BestPrimVtx) (cm)"); | |
7e504402 | 1575 | |
c525f360 | 1576 | fCFContAsCascadeCuts->SetVarTitle(17, "Primary Track Multiplicity"); |
a786bd57 | 1577 | fCFContAsCascadeCuts->SetVarTitle(18, "(ITS+TPC tracks + SPD tracklets) Multiplicity"); |
9d670198 | 1578 | fCFContAsCascadeCuts->SetVarTitle(19, "Bach.TPC Clusters"); |
1579 | ||
1580 | fListHistCascade->Add(fCFContAsCascadeCuts); | |
1581 | } | |
1582 | ||
1583 | ||
1584 | PostData(1, fListHistCascade); | |
b67ec6f7 | 1585 | }// end CreateOutputObjects |
1586 | ||
1587 | ||
1588 | ||
1589 | ||
1590 | ||
1591 | ||
1592 | //________________________________________________________________________ | |
1593 | void AliAnalysisTaskCheckPerformanceCascade::UserExec(Option_t *) | |
1594 | { | |
1595 | ||
1596 | // Main loop | |
1597 | // Called for each event | |
1598 | ||
1599 | AliESDEvent *lESDevent = 0x0; | |
1600 | AliAODEvent *lAODevent = 0x0; | |
1601 | AliMCEvent *lMCevent = 0x0; | |
1602 | AliStack *lMCstack = 0x0; | |
1603 | Int_t ncascades = -1; | |
1604 | ||
1605 | ||
1606 | // Connect to the InputEvent | |
1607 | // After these lines, we should have an ESD/AOD event + the number of cascades in it. | |
1608 | ||
1609 | if(fAnalysisType == "ESD"){ | |
1610 | lESDevent = dynamic_cast<AliESDEvent*>( InputEvent() ); | |
1611 | if (!lESDevent) { | |
1612 | Printf("ERROR: lESDevent not available \n"); | |
e8fd19de | 1613 | cout << "Name of the file with pb :" << CurrentFileName() << endl; // or AliAnalysisTaskSE::CurrentFileName() |
b67ec6f7 | 1614 | return; |
1615 | } | |
b67ec6f7 | 1616 | } |
1617 | ||
1618 | else if(fAnalysisType == "AOD"){ | |
1619 | lAODevent = dynamic_cast<AliAODEvent*>( InputEvent() ); | |
1620 | if (!lAODevent) { | |
1621 | Printf("ERROR: lAODevent not available \n"); | |
e8fd19de | 1622 | cout << "Name of the file with pb :" << CurrentFileName() << endl; |
b67ec6f7 | 1623 | return; |
1624 | } | |
b67ec6f7 | 1625 | } |
1626 | ||
1627 | ||
1628 | lMCevent = MCEvent(); | |
1629 | if (!lMCevent) { | |
1630 | Printf("ERROR: Could not retrieve MC event \n"); | |
e8fd19de | 1631 | cout << "Name of the file with pb :" << CurrentFileName() << endl; |
b67ec6f7 | 1632 | return; |
1633 | } | |
1634 | ||
1635 | lMCstack = lMCevent->Stack(); | |
1636 | if (!lMCstack) { | |
1637 | Printf("ERROR: Could not retrieve MC stack \n"); | |
e8fd19de | 1638 | cout << "Name of the file with pb :" << CurrentFileName() << endl; |
b67ec6f7 | 1639 | return; |
1640 | ||
1641 | } | |
1642 | ||
9d670198 | 1643 | |
1644 | // Temporary way : AOD awareness of the code to be developed FIXME | |
1645 | if(fAnalysisType == "AOD") return; | |
1646 | ||
1647 | ||
1648 | ||
1649 | ||
7e504402 | 1650 | //------------------------------------------------- |
9d670198 | 1651 | // 0 - Trigger managment + global event selection |
1652 | // NOTE : Check the availability of the proper trigger | |
b67ec6f7 | 1653 | |
7e504402 | 1654 | // Note : Presuppose the presence of AliPhysicsSelectionTask |
9d670198 | 1655 | |
e8fd19de | 1656 | UInt_t maskIsSelected = ((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected(); |
1657 | Bool_t isSelected = 0; | |
c525f360 | 1658 | if( fTriggerMaskType == "kMB") isSelected = (maskIsSelected & AliVEvent::kMB) == AliVEvent::kMB; |
1659 | else if(fTriggerMaskType == "kHighMult") isSelected = (maskIsSelected & AliVEvent::kHighMult) == AliVEvent::kHighMult; | |
1660 | else isSelected = 1; // default = select anyway (use case = run without Phys Selection task) | |
1661 | ||
9d670198 | 1662 | if ( ! isSelected ) { |
1663 | PostData(1, fListHistCascade); | |
e8fd19de | 1664 | return; |
9d670198 | 1665 | } |
7e504402 | 1666 | //else Printf("Event selected ... \n"); |
9d670198 | 1667 | |
1668 | ||
1669 | //------------------------------------------------- | |
1670 | // 1 - Cascade vertexer (ESD) | |
e8fd19de | 1671 | if(fkRerunV0CascVertexers){ // FIXME : relaunch V0 and Cascade vertexers |
c525f360 | 1672 | if(fAnalysisType == "ESD" ){ |
9d670198 | 1673 | // lESDevent->ResetCascades(); |
1674 | // lESDevent->ResetV0s(); | |
1675 | // | |
1676 | // AliV0vertexer lV0vtxer; | |
1677 | // AliCascadeVertexer lCascVtxer; | |
1678 | // | |
1679 | // lV0vtxer.SetDefaultCuts(fV0Sels); | |
1680 | // lCascVtxer.SetDefaultCuts(fCascSels); | |
1681 | // | |
1682 | // lV0vtxer.Tracks2V0vertices(lESDevent); | |
1683 | // lCascVtxer.V0sTracks2CascadeVertices(lESDevent); | |
c525f360 | 1684 | } |
9d670198 | 1685 | } |
1686 | ||
1687 | ||
1688 | //------------------------------------------------ | |
1689 | // 2 - Preparing the general info about of the event = prim. Vtx + magnetic field (ESD) | |
1690 | ||
1691 | ||
1692 | // if(fAnalysisType == "ESD" ){ | |
1693 | ||
1694 | // Magnetic field | |
1695 | const Double_t lMagneticField = lESDevent->GetMagneticField( ); | |
1696 | ||
1697 | // Prim vertex | |
1698 | const AliESDVertex *lPrimaryTrackingVtx = lESDevent->GetPrimaryVertexTracks(); // get the vtx stored in ESD found with tracks | |
1699 | const AliESDVertex *lPrimarySPDVtx = lESDevent->GetPrimaryVertexSPD(); // get the vtx stored in ESD found with SPD tracklets | |
1700 | ||
1701 | const AliESDVertex *lPrimaryBestVtx = lESDevent->GetPrimaryVertex(); | |
1702 | // get the best primary vertex available for the event | |
1703 | // As done in AliCascadeVertexer, we keep the one which is the best one available. | |
1704 | // between : Tracking vertex > SPD vertex > TPC vertex > default SPD vertex | |
1705 | Double_t lBestPrimaryVtxPos[3] = {-100.0, -100.0, -100.0}; | |
1706 | lPrimaryBestVtx->GetXYZ( lBestPrimaryVtxPos ); | |
1707 | ||
1708 | // FIXME : quality cut on the z-position of the prim vertex. | |
1709 | if(fkQualityCutZprimVtxPos) { | |
1710 | if(TMath::Abs(lBestPrimaryVtxPos[2]) > 10.0 ) { | |
1711 | AliWarning("Pb / | Z position of Best Prim Vtx | > 10.0 cm ... return !"); | |
1712 | PostData(1, fListHistCascade); | |
1713 | return; | |
1714 | } | |
1715 | } | |
c525f360 | 1716 | // FIXME : quality selection regarding pile-up rejection |
1717 | if(fkRejectEventPileUp) { | |
a786bd57 | 1718 | 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 | 1719 | AliWarning("Pb / Event tagged as pile-up by SPD... return !"); |
1720 | PostData(1, fListHistCascade); | |
1721 | return; | |
1722 | } | |
1723 | } | |
9d670198 | 1724 | // FIXME : remove TPC-only primary vertex : retain only events with tracking + SPD vertex |
1725 | if(fkQualityCutNoTPConlyPrimVtx) { | |
1726 | if (!lPrimarySPDVtx->GetStatus() && !lPrimaryTrackingVtx->GetStatus() ){ | |
1727 | AliWarning("Pb / No SPD prim. vertex nor prim. Tracking vertex ... return !"); | |
1728 | PostData(1, fListHistCascade); | |
1729 | return; | |
1730 | } | |
1731 | } | |
1732 | // }// if ESD | |
7e504402 | 1733 | |
1734 | ||
b67ec6f7 | 1735 | // cout << "Name of the accessed file :" << fInputHandler->GetTree()->GetCurrentFile()->GetName() << endl; |
1736 | ||
1737 | // cout << "Tree characteristics ..." << endl; | |
1738 | // fInputHandler->GetTree()->Print("toponly"); | |
1739 | // fInputHandler->GetTree()->GetBranch("PrimaryVertex")->Print(); | |
1740 | // fInputHandler->GetTree()->GetBranch("SPDVertex")->Print(); | |
7e504402 | 1741 | |
b67ec6f7 | 1742 | |
b67ec6f7 | 1743 | |
b67ec6f7 | 1744 | // --------------------------------------------------------------- |
1745 | // - Initialisation of the part dedicated to cascade vertices | |
9d670198 | 1746 | |
1747 | if(fAnalysisType == "ESD") ncascades = lESDevent->GetNumberOfCascades(); | |
1748 | else if(fAnalysisType == "AOD") ncascades = lAODevent->GetNumberOfCascades(); | |
1749 | ||
b67ec6f7 | 1750 | |
c525f360 | 1751 | Int_t nNumberOfMCPrimaries = -1; |
a786bd57 | 1752 | Int_t nMCPrimariesInEtaBelow0p8 = 0; |
1753 | Int_t nMCPrimariesInEtaBelow1p0 = 0; | |
b67ec6f7 | 1754 | |
a786bd57 | 1755 | Int_t nTrackPrimaryMultiplicity = -1; |
1756 | Int_t nSPDTracklets = 0; // AliESDEvent::EstimateMultiplicity will re-initialise the value to 0 | |
1757 | Int_t nITSandTPCtracksAndSPDtracklets = 0; // AliESDEvent::EstimateMultiplicity will re-initialise the value to 0 | |
1758 | Int_t nTracksITSSApure = 0; // AliESDEvent::EstimateMultiplicity will re-initialise the value to 0 | |
c525f360 | 1759 | |
1760 | nNumberOfMCPrimaries = lMCstack->GetNprimary(); | |
a786bd57 | 1761 | if(nNumberOfMCPrimaries < 1) return; |
1762 | ||
c525f360 | 1763 | nTrackPrimaryMultiplicity = fESDtrackCuts->CountAcceptedTracks(lESDevent); |
a786bd57 | 1764 | //EstimateMultiplicity(Int_t &tracklets, Int_t &trITSTPC, Int_t &trITSSApure, Double_t eta, Bool_t useDCAFlag,Bool_t useV0Flag) |
1765 | lESDevent->EstimateMultiplicity( nSPDTracklets, nITSandTPCtracksAndSPDtracklets, nTracksITSSApure, 1.0, kTRUE, kTRUE); | |
1766 | ||
c525f360 | 1767 | |
c525f360 | 1768 | fHistMCTrackMultiplicity->Fill( nNumberOfMCPrimaries ); |
1769 | ||
1770 | //_____________________________________________________________________________ | |
1771 | // Part 1 - Loop over the MC primaries | |
1772 | ||
1773 | for (Int_t iCurrentLabelStack = 0; iCurrentLabelStack < nNumberOfMCPrimaries; iCurrentLabelStack++) | |
1774 | {// This is the begining of the loop on primaries | |
1775 | ||
1776 | TParticle* lCurrentParticle = 0x0; | |
1777 | lCurrentParticle = lMCstack->Particle( iCurrentLabelStack ); | |
1778 | if(!lCurrentParticle){ | |
1779 | Printf("MC Primary loop %d - MC TParticle pointer to current stack particle = 0x0 ! Skip ...\n", iCurrentLabelStack ); | |
1780 | continue; | |
1781 | } | |
a786bd57 | 1782 | |
1783 | Double_t lEtaCurrentParticle = TMath::Abs( lCurrentParticle->Eta() ); | |
1784 | if( lEtaCurrentParticle < 1.0 ){ | |
1785 | nMCPrimariesInEtaBelow1p0++; | |
1786 | if( lEtaCurrentParticle < 0.8 ) nMCPrimariesInEtaBelow0p8++; | |
1787 | } | |
c525f360 | 1788 | } |
1789 | ||
a786bd57 | 1790 | f2dHistRecoPrimTrckMultVsMCMult->Fill( nTrackPrimaryMultiplicity, nMCPrimariesInEtaBelow0p8 ); |
1791 | f2dHistRecoEstimateMultVsMCMult->Fill( nITSandTPCtracksAndSPDtracklets, nMCPrimariesInEtaBelow1p0 ); | |
c525f360 | 1792 | |
1793 | ||
b67ec6f7 | 1794 | // For proton |
1795 | /* | |
c525f360 | 1796 | for (Int_t iCurrentLabelStack = 0; iCurrentLabelStack < nNumberOfMCPrimaries; iCurrentLabelStack++) |
b67ec6f7 | 1797 | {// This is the begining of the loop on primaries, for protons |
1798 | ||
1799 | TParticle* lCurrentParticle = lMCstack->Particle( iCurrentLabelStack ); | |
1800 | if(!lCurrentParticle){ | |
1801 | Printf("Proton loop %d - MC TParticle pointer to current stack particle = 0x0 ! Skip ...\n", iCurrentLabelStack ); | |
1802 | continue; | |
1803 | ||
1804 | } | |
1805 | ||
1806 | if( lCurrentParticle->GetPdgCode() == 2212 ) | |
1807 | fHistEtaGenProton->Fill( lCurrentParticle->Eta() ); | |
1808 | ||
1809 | if( lCurrentParticle->GetPdgCode() == -2212 ) | |
1810 | fHistEtaGenAntiProton->Fill( lCurrentParticle->Eta() ); | |
1811 | }// end loop over primary proton | |
1812 | */ | |
1813 | ||
1814 | ||
1815 | ||
c525f360 | 1816 | //_____________________________________________________________________________ |
1817 | // Part 2 - Loop over the different types of GENERATED cascades (Xi-+, Omega-+) | |
b67ec6f7 | 1818 | |
1819 | // - Initialisation of useful local variables | |
1820 | ||
1821 | Int_t lPdgCodeCasc = 0; | |
1822 | Int_t lPdgCodeBach = 0; | |
1823 | Int_t lPdgCodeLambda = 0; | |
1824 | Int_t lPdgCodeDghtMesV0 = 0; | |
1825 | Int_t lPdgCodeDghtBarV0 = 0; | |
1826 | ||
b67ec6f7 | 1827 | |
ff0753e1 | 1828 | TH1F *lHistEtaGenCasc = 0; |
1829 | TH2F *l2dHistGenPtVsGenYGen = 0; | |
1830 | ||
b67ec6f7 | 1831 | TH1F *lHistThetaGenCasc = 0; |
ff0753e1 | 1832 | TH2F *l2dHistGenPtVsGenYFdbl = 0; |
b67ec6f7 | 1833 | TH1F *lHistThetaLambda = 0; |
1834 | TH1F *lHistThetaBach = 0; | |
1835 | TH1F *lHistThetaBarDghter = 0; | |
1836 | TH1F *lHistThetaMesDghter = 0; | |
1837 | TH1F *lHistPtBach = 0; | |
1838 | TH1F *lHistPtBarDghter = 0; | |
1839 | TH1F *lHistPtMesDghter = 0; | |
1840 | ||
1841 | ||
db71a168 | 1842 | for(Int_t iCascType = 1; iCascType < 5; iCascType++) |
b67ec6f7 | 1843 | { |
1844 | ||
db71a168 | 1845 | switch (iCascType) |
b67ec6f7 | 1846 | { |
1847 | case 1: // Xi- | |
1848 | lPdgCodeCasc = 3312; //Xi- | |
1849 | lPdgCodeBach = -211; //Pi- | |
1850 | lPdgCodeLambda = 3122; //Lambda0 | |
1851 | lPdgCodeDghtMesV0 = -211; //Pi- | |
1852 | lPdgCodeDghtBarV0 = 2212; //Proton | |
1853 | ||
1854 | // any Xi- | |
ff0753e1 | 1855 | lHistEtaGenCasc = fHistEtaGenCascXiMinus; |
1856 | l2dHistGenPtVsGenYGen = f2dHistGenPtVsGenYGenXiMinus; | |
1857 | ||
b67ec6f7 | 1858 | // cascades generated within acceptance (cut in pt + theta) |
ff0753e1 | 1859 | lHistThetaGenCasc = fHistThetaGenCascXiMinus; |
1860 | l2dHistGenPtVsGenYFdbl = f2dHistGenPtVsGenYFdblXiMinus; | |
1861 | lHistThetaLambda = fHistThetaLambdaXiMinus; | |
1862 | lHistThetaBach = fHistThetaBachXiMinus; | |
1863 | lHistThetaBarDghter = fHistThetaBarDghterXiMinus; | |
1864 | lHistThetaMesDghter = fHistThetaMesDghterXiMinus; | |
1865 | lHistPtBach = fHistPtBachXiMinus; | |
1866 | lHistPtBarDghter = fHistPtBarDghterXiMinus; | |
1867 | lHistPtMesDghter = fHistPtMesDghterXiMinus; | |
b67ec6f7 | 1868 | break; |
1869 | ||
1870 | case 2: // Xi+ | |
1871 | lPdgCodeCasc = -3312; //Xi+ | |
1872 | lPdgCodeBach = 211; //Pi+ | |
1873 | lPdgCodeLambda = -3122; //AntiLambda0 | |
1874 | lPdgCodeDghtMesV0 = 211; //Pi+ | |
1875 | lPdgCodeDghtBarV0 = -2212; //AntiProton | |
1876 | ||
1877 | // any Xi+ | |
ff0753e1 | 1878 | lHistEtaGenCasc = fHistEtaGenCascXiPlus; |
1879 | l2dHistGenPtVsGenYGen = f2dHistGenPtVsGenYGenXiPlus; | |
1880 | ||
b67ec6f7 | 1881 | // cascades generated within acceptance (cut in pt + theta) |
ff0753e1 | 1882 | lHistThetaGenCasc = fHistThetaGenCascXiPlus; |
1883 | l2dHistGenPtVsGenYFdbl = f2dHistGenPtVsGenYFdblXiPlus; | |
1884 | lHistThetaLambda = fHistThetaLambdaXiPlus; | |
1885 | lHistThetaBach = fHistThetaBachXiPlus; | |
1886 | lHistThetaBarDghter = fHistThetaBarDghterXiPlus; | |
1887 | lHistThetaMesDghter = fHistThetaMesDghterXiPlus; | |
1888 | lHistPtBach = fHistPtBachXiPlus; | |
1889 | lHistPtBarDghter = fHistPtBarDghterXiPlus; | |
1890 | lHistPtMesDghter = fHistPtMesDghterXiPlus; | |
b67ec6f7 | 1891 | break; |
1892 | ||
1893 | case 3: // Omega- | |
1894 | lPdgCodeCasc = 3334; //Omega- | |
1895 | lPdgCodeBach = -321; //K- | |
1896 | lPdgCodeLambda = 3122; //Lambda0 | |
1897 | lPdgCodeDghtMesV0 = -211; //Pi- | |
1898 | lPdgCodeDghtBarV0 = 2212; //Proton | |
1899 | ||
1900 | // any Omega- | |
ff0753e1 | 1901 | lHistEtaGenCasc = fHistEtaGenCascOmegaMinus; |
1902 | l2dHistGenPtVsGenYGen = f2dHistGenPtVsGenYGenOmegaMinus; | |
1903 | ||
b67ec6f7 | 1904 | // cascades generated within acceptance (cut in pt + theta) |
ff0753e1 | 1905 | lHistThetaGenCasc = fHistThetaGenCascOmegaMinus; |
1906 | l2dHistGenPtVsGenYFdbl = f2dHistGenPtVsGenYFdblOmegaMinus; | |
1907 | lHistThetaLambda = fHistThetaLambdaOmegaMinus; | |
1908 | lHistThetaBach = fHistThetaBachOmegaMinus; | |
1909 | lHistThetaBarDghter = fHistThetaBarDghterOmegaMinus; | |
1910 | lHistThetaMesDghter = fHistThetaMesDghterOmegaMinus; | |
1911 | lHistPtBach = fHistPtBachOmegaMinus; | |
1912 | lHistPtBarDghter = fHistPtBarDghterOmegaMinus; | |
1913 | lHistPtMesDghter = fHistPtMesDghterOmegaMinus; | |
b67ec6f7 | 1914 | break; |
1915 | ||
1916 | case 4: // Omega+ | |
1917 | lPdgCodeCasc = -3334; //Omega+ | |
1918 | lPdgCodeBach = 321; //K+ | |
1919 | lPdgCodeLambda = -3122; //AntiLambda0 | |
1920 | lPdgCodeDghtMesV0 = 211; //Pi+ | |
1921 | lPdgCodeDghtBarV0 = -2212; //AntiProton | |
1922 | ||
1923 | // any Omega+ | |
ff0753e1 | 1924 | lHistEtaGenCasc = fHistEtaGenCascOmegaPlus; |
1925 | l2dHistGenPtVsGenYGen = f2dHistGenPtVsGenYGenOmegaPlus; | |
b67ec6f7 | 1926 | |
1927 | // cascades generated within acceptance (cut in pt + theta) | |
ff0753e1 | 1928 | lHistThetaGenCasc = fHistThetaGenCascOmegaPlus; |
1929 | l2dHistGenPtVsGenYFdbl = f2dHistGenPtVsGenYFdblOmegaPlus; | |
1930 | lHistThetaLambda = fHistThetaLambdaOmegaPlus; | |
1931 | lHistThetaBach = fHistThetaBachOmegaPlus; | |
1932 | lHistThetaBarDghter = fHistThetaBarDghterOmegaPlus; | |
1933 | lHistThetaMesDghter = fHistThetaMesDghterOmegaPlus; | |
1934 | lHistPtBach = fHistPtBachOmegaPlus; | |
1935 | lHistPtBarDghter = fHistPtBarDghterOmegaPlus; | |
1936 | lHistPtMesDghter = fHistPtMesDghterOmegaPlus; | |
b67ec6f7 | 1937 | break; |
1938 | ||
1939 | }// end switch cascade | |
db71a168 | 1940 | |
1941 | ||
c525f360 | 1942 | for (Int_t iCurrentLabelStack = 0; iCurrentLabelStack < nNumberOfMCPrimaries; iCurrentLabelStack++) |
b67ec6f7 | 1943 | {// This is the begining of the loop on primaries |
1944 | ||
1945 | TParticle* lCurrentParticle = 0x0; | |
1946 | lCurrentParticle = lMCstack->Particle( iCurrentLabelStack ); | |
1947 | if(!lCurrentParticle){ | |
1948 | Printf("Cascade loop %d - MC TParticle pointer to current stack particle = 0x0 ! Skip ...\n", iCurrentLabelStack ); | |
1949 | continue; | |
1950 | ||
1951 | } | |
db71a168 | 1952 | |
b67ec6f7 | 1953 | if( lCurrentParticle->GetPdgCode() == lPdgCodeCasc ){ // Here ! |
c525f360 | 1954 | //cout << "Xi- within loop " << iCurrentLabelStack << "/ " << nNumberOfMCPrimaries << endl; |
b67ec6f7 | 1955 | |
1956 | // - Xi level ... _____________________________________________________________ | |
1957 | TParticle* xiMC = 0x0; | |
1958 | xiMC = lCurrentParticle; | |
1959 | if(!xiMC){ | |
1960 | Printf("MC TParticle pointer to Cascade = 0x0 ! Skip ..."); | |
1961 | continue; | |
1962 | ||
1963 | } | |
1964 | ||
ff0753e1 | 1965 | // Fill the first histos : = any generated Xi, not necessarily within the acceptance |
1966 | Double_t lRapXiMC = 0.5*TMath::Log((xiMC->Energy() + xiMC->Pz()) / (xiMC->Energy() - xiMC->Pz() +1.e-13)); | |
b67ec6f7 | 1967 | |
ff0753e1 | 1968 | lHistEtaGenCasc ->Fill( xiMC->Eta() ); |
1969 | l2dHistGenPtVsGenYGen ->Fill( xiMC->Pt(), lRapXiMC ); | |
1970 | ||
b67ec6f7 | 1971 | |
b67ec6f7 | 1972 | |
ff0753e1 | 1973 | // Check the emission of particle stays within the acceptance of the detector (cut in theta) |
b67ec6f7 | 1974 | if( xiMC->Theta() < TMath::Pi()/4.0 || xiMC->Theta() > 3.0*TMath::Pi()/4.0 ) continue; |
1975 | if( xiMC->GetNDaughters() != 2) continue; | |
1976 | if( xiMC->GetDaughter(0) < 0 ) continue; | |
1977 | if( xiMC->GetDaughter(1) < 0 ) continue; | |
1978 | ||
1979 | TParticle* lDght0ofXi = lMCstack->Particle( xiMC->GetDaughter(0) ); | |
1980 | TParticle* lDght1ofXi = lMCstack->Particle( xiMC->GetDaughter(1) ); | |
1981 | ||
1982 | TParticle* lLambda = 0; | |
1983 | TParticle* lBach = 0; | |
1984 | ||
1985 | // Xi - Case 1 | |
1986 | if( lDght0ofXi->GetPdgCode() == lPdgCodeLambda && // Here ! | |
1987 | lDght1ofXi->GetPdgCode() == lPdgCodeBach ){ // Here ! | |
1988 | ||
1989 | lLambda = lDght0ofXi; | |
1990 | lBach = lDght1ofXi; | |
1991 | }// end if dghter 0 = Lambda and dghter 1 = Pi- | |
1992 | ||
1993 | // Xi - Case 2 | |
1994 | else if( lDght0ofXi->GetPdgCode() == lPdgCodeBach && // Here ! | |
1995 | lDght1ofXi->GetPdgCode() == lPdgCodeLambda ){ // Here ! | |
1996 | ||
1997 | lBach = lDght0ofXi; | |
1998 | lLambda = lDght1ofXi; | |
1999 | }// end if dghter 0 = Pi- and dghter 1 = Lambda | |
2000 | ||
2001 | // V0 otherwise - Case 3 | |
2002 | else continue; | |
2003 | ||
ff0753e1 | 2004 | // Check the emission of particle stays within the acceptance of the detector (cut in pt + theta) |
b67ec6f7 | 2005 | if( lLambda->Theta() < TMath::Pi()/4.0 || lLambda->Theta() > 3.0*TMath::Pi()/4.0 ) continue; |
2006 | if( lBach->Theta() < TMath::Pi()/4.0 || lBach->Theta() > 3.0*TMath::Pi()/4.0 ) continue; | |
2007 | ||
e8fd19de | 2008 | if( lBach->Pt() < 0.150 ) continue; //FIXME : maybe tuned for Xi but not for K- from Omega ... |
b67ec6f7 | 2009 | |
2010 | ||
2011 | ||
2012 | // - V0 level ... _____________________________________________________________ | |
2013 | TParticle* lDghtBarV0 = 0; | |
2014 | TParticle* lDghtMesV0 = 0; | |
2015 | ||
2016 | if( lLambda->GetNDaughters() != 2 ) continue; | |
2017 | if( lLambda->GetDaughter(0) < 0 ) continue; | |
2018 | if( lLambda->GetDaughter(1) < 0 ) continue; | |
2019 | ||
2020 | ||
2021 | TParticle* lDght0ofLambda = lMCstack->Particle( lLambda->GetDaughter(0) ); | |
2022 | TParticle* lDght1ofLambda = lMCstack->Particle( lLambda->GetDaughter(1) ); | |
2023 | ||
2024 | // V0 - Case 1 | |
2025 | if( lDght0ofLambda->GetPdgCode() == lPdgCodeDghtBarV0 && // Here ! | |
2026 | lDght1ofLambda->GetPdgCode() == lPdgCodeDghtMesV0 ){ // Here ! | |
2027 | ||
2028 | lDghtBarV0 = lDght0ofLambda; | |
2029 | lDghtMesV0 = lDght1ofLambda; | |
2030 | }// end if dghter 0 = Proton and dghter 1 = Pi- | |
2031 | ||
2032 | // V0 - Case 2 | |
2033 | else if( lDght0ofLambda->GetPdgCode() == lPdgCodeDghtMesV0 && // Here ! | |
2034 | lDght1ofLambda->GetPdgCode() == lPdgCodeDghtBarV0 ){ // Here ! | |
2035 | ||
2036 | lDghtMesV0 = lDght0ofLambda; | |
2037 | lDghtBarV0 = lDght1ofLambda; | |
2038 | }// end if dghter 0 = Pi- and dghter 1 = proton | |
2039 | ||
2040 | // V0 otherwise - Case 3 | |
2041 | else continue; | |
2042 | ||
2043 | ||
2044 | // Check the emission of particle stays within the acceptance of the detector | |
2045 | if( lDghtBarV0->Theta() < TMath::Pi()/4.0 || lDghtBarV0->Theta() > 3.0*TMath::Pi()/4.0 ) continue; | |
2046 | if( lDghtMesV0->Theta() < TMath::Pi()/4.0 || lDghtMesV0->Theta() > 3.0*TMath::Pi()/4.0 ) continue; | |
2047 | ||
e8fd19de | 2048 | if( lDghtBarV0->Pt() < 0.250 ) continue; |
2049 | if( lDghtMesV0->Pt() < 0.150 ) continue; | |
b67ec6f7 | 2050 | |
2051 | ||
2052 | ||
2053 | // - Just to know which file is currently open : locate the file containing Xi | |
2054 | //cout << "Name of the file containing generated Xi :" << fInputHandler->GetTree()->GetCurrentFile()->GetName() | |
2055 | // << endl; | |
2056 | ||
ff0753e1 | 2057 | Double_t lRadToDeg = 180.0/TMath::Pi(); |
2058 | ||
b67ec6f7 | 2059 | // - Filling histos ... _________________________________________________________________ |
2060 | lHistThetaGenCasc ->Fill( lRadToDeg * xiMC->Theta() ); | |
ff0753e1 | 2061 | l2dHistGenPtVsGenYFdbl ->Fill( xiMC->Pt(), lRapXiMC ); |
b67ec6f7 | 2062 | |
2063 | // - Fill theta histos for Lambda and Bach | |
2064 | lHistThetaLambda ->Fill( lRadToDeg * lLambda->Theta() ); | |
2065 | lHistThetaBach ->Fill( lRadToDeg * lBach->Theta() ); | |
2066 | ||
2067 | // - Fill theta histos for V0 daughters | |
2068 | lHistThetaBarDghter ->Fill( lRadToDeg * lDghtBarV0->Theta() ); | |
2069 | lHistThetaMesDghter ->Fill( lRadToDeg * lDghtMesV0->Theta() ); | |
2070 | ||
2071 | // - Fill pt histos. | |
2072 | lHistPtBach ->Fill( lBach->Pt() ); | |
2073 | lHistPtBarDghter ->Fill( lDghtBarV0->Pt() ); | |
2074 | lHistPtMesDghter ->Fill( lDghtMesV0->Pt() ); | |
db71a168 | 2075 | |
b67ec6f7 | 2076 | }// end if current particle = Xi- |
2077 | ||
2078 | }// This is the end of the loop on primaries | |
db71a168 | 2079 | |
2080 | // - Re-initialisation of the local TH1F pointers | |
2081 | lHistEtaGenCasc = 0x0; | |
ff0753e1 | 2082 | l2dHistGenPtVsGenYGen = 0x0; |
db71a168 | 2083 | |
2084 | lHistThetaGenCasc = 0x0; | |
ff0753e1 | 2085 | l2dHistGenPtVsGenYFdbl = 0x0; |
db71a168 | 2086 | lHistThetaLambda = 0x0; |
2087 | lHistThetaBach = 0x0; | |
2088 | lHistThetaBarDghter = 0x0; | |
2089 | lHistThetaMesDghter = 0x0; | |
2090 | lHistPtBach = 0x0; | |
2091 | lHistPtBarDghter = 0x0; | |
2092 | lHistPtMesDghter = 0x0; | |
b67ec6f7 | 2093 | |
2094 | } // end of loop over the different types of cascades (Xi-+, Omega-+) | |
2095 | ||
2096 | ||
2097 | ||
2098 | //__________________________________________________________________________ | |
c525f360 | 2099 | // Part 3 - Loop over the reconstructed candidates |
b67ec6f7 | 2100 | |
b67ec6f7 | 2101 | |
2102 | for (Int_t iXi = 0; iXi < ncascades; iXi++) | |
2103 | {// This is the begining of the Cascade loop | |
2104 | ||
2105 | AliESDcascade *xiESD = lESDevent->GetCascade(iXi); | |
b67ec6f7 | 2106 | if (!xiESD) continue; |
2107 | ||
9d670198 | 2108 | // - Step II.1 : Connection to daughter tracks of the current cascade |
b67ec6f7 | 2109 | //------------- |
2110 | ||
2111 | UInt_t lIdxPosXi = (UInt_t) TMath::Abs( xiESD->GetPindex() ); | |
2112 | UInt_t lIdxNegXi = (UInt_t) TMath::Abs( xiESD->GetNindex() ); | |
2113 | UInt_t lBachIdx = (UInt_t) TMath::Abs( xiESD->GetBindex() ); | |
2114 | // abs value not needed ; the index should always be positive (!= label ...) | |
7e504402 | 2115 | |
2116 | ||
2117 | // FIXME : rejection of a double use of a daughter track (nothing but just a crosscheck of what is done in the cascade vertexer) | |
2118 | if(lBachIdx == lIdxNegXi) { | |
2119 | AliWarning("Pb / Idx(Bach. track) = Idx(Neg. track) ... continue!"); continue; | |
2120 | } | |
2121 | if(lBachIdx == lIdxPosXi) { | |
2122 | AliWarning("Pb / Idx(Bach. track) = Idx(Pos. track) ... continue!"); continue; | |
2123 | } | |
b67ec6f7 | 2124 | |
2125 | AliESDtrack *pTrackXi = lESDevent->GetTrack( lIdxPosXi ); | |
2126 | AliESDtrack *nTrackXi = lESDevent->GetTrack( lIdxNegXi ); | |
2127 | AliESDtrack *bachTrackXi = lESDevent->GetTrack( lBachIdx ); | |
2128 | if (!pTrackXi || !nTrackXi || !bachTrackXi ) { | |
2129 | Printf("ERROR: Could not retrieve one of the 3 daughter tracks of the cascade ..."); | |
2130 | continue; | |
2131 | } | |
2132 | ||
7e504402 | 2133 | Int_t lPosTPCClusters = pTrackXi->GetTPCNcls(); |
2134 | Int_t lNegTPCClusters = nTrackXi->GetTPCNcls(); | |
2135 | Int_t lBachTPCClusters = bachTrackXi->GetTPCNcls(); | |
2136 | ||
2137 | // FIXME : rejection of a poor quality tracks | |
9d670198 | 2138 | if(fkQualityCutTPCrefit){ |
7e504402 | 2139 | // 1 - Poor quality related to TPCrefit |
2140 | ULong_t pStatus = pTrackXi->GetStatus(); | |
2141 | ULong_t nStatus = nTrackXi->GetStatus(); | |
2142 | ULong_t bachStatus = bachTrackXi->GetStatus(); | |
2143 | if ((pStatus&AliESDtrack::kTPCrefit) == 0) { AliWarning("Pb / V0 Pos. track has no TPCrefit ... continue!"); continue; } | |
2144 | if ((nStatus&AliESDtrack::kTPCrefit) == 0) { AliWarning("Pb / V0 Neg. track has no TPCrefit ... continue!"); continue; } | |
2145 | if ((bachStatus&AliESDtrack::kTPCrefit) == 0) { AliWarning("Pb / Bach. track has no TPCrefit ... continue!"); continue; } | |
2146 | } | |
9d670198 | 2147 | if(fkQualityCut80TPCcls){ |
7e504402 | 2148 | // 2 - Poor quality related to TPC clusters |
2149 | if(lPosTPCClusters < 80) { AliWarning("Pb / V0 Pos. track has less than 80 TPC clusters ... continue!"); continue; } | |
2150 | if(lNegTPCClusters < 80) { AliWarning("Pb / V0 Neg. track has less than 80 TPC clusters ... continue!"); continue; } | |
2151 | if(lBachTPCClusters < 80) { AliWarning("Pb / Bach. track has less than 80 TPC clusters ... continue!"); continue; } | |
2152 | } | |
b67ec6f7 | 2153 | |
9d670198 | 2154 | // - Step II.2 : Info over reconstructed cascades |
b67ec6f7 | 2155 | //------------- |
2156 | ||
2157 | Double_t lInvMassXiMinus = 0.; | |
2158 | Double_t lInvMassXiPlus = 0.; | |
2159 | Double_t lInvMassOmegaMinus = 0.; | |
2160 | Double_t lInvMassOmegaPlus = 0.; | |
2161 | ||
2162 | Double_t lV0quality = 0.; | |
2163 | ||
2164 | if( bachTrackXi->Charge() < 0 ) { | |
2165 | lV0quality = 0.; | |
2166 | xiESD->ChangeMassHypothesis(lV0quality , 3312); | |
2167 | // Calculate the effective mass of the Xi- candidate. | |
2168 | // pdg code 3312 = Xi- | |
2169 | lInvMassXiMinus = xiESD->GetEffMassXi(); | |
2170 | ||
2171 | lV0quality = 0.; | |
2172 | xiESD->ChangeMassHypothesis(lV0quality , 3334); | |
2173 | // Calculate the effective mass of the Xi- candidate. | |
2174 | // pdg code 3334 = Omega- | |
2175 | lInvMassOmegaMinus = xiESD->GetEffMassXi(); | |
2176 | ||
2177 | lV0quality = 0.; | |
2178 | xiESD->ChangeMassHypothesis(lV0quality , 3312); // Back to default hyp. | |
2179 | ||
2180 | } | |
2181 | ||
2182 | if( bachTrackXi->Charge() > 0 ){ | |
2183 | lV0quality = 0.; | |
2184 | xiESD->ChangeMassHypothesis(lV0quality , -3312); | |
2185 | // Calculate the effective mass of the Xi+ candidate. | |
2186 | // pdg code -3312 = Xi+ | |
2187 | lInvMassXiPlus = xiESD->GetEffMassXi(); | |
2188 | ||
2189 | lV0quality = 0.; | |
2190 | xiESD->ChangeMassHypothesis(lV0quality , -3334); | |
2191 | // Calculate the effective mass of the Xi+ candidate. | |
2192 | // pdg code -3334 = Omega+ | |
2193 | lInvMassOmegaPlus = xiESD->GetEffMassXi(); | |
2194 | ||
2195 | lV0quality = 0.; | |
2196 | xiESD->ChangeMassHypothesis(lV0quality , -3312); // Back to "default" hyp. | |
2197 | } | |
2198 | ||
2199 | Double_t lChargeXi = xiESD->Charge(); | |
2200 | ||
2201 | if( lChargeXi < 0 ) fHistMassXiMinus ->Fill( lInvMassXiMinus ); | |
2202 | if( lChargeXi > 0 ) fHistMassXiPlus ->Fill( lInvMassXiPlus ); | |
2203 | if( lChargeXi < 0 ) fHistMassOmegaMinus ->Fill( lInvMassOmegaMinus ); | |
2204 | if( lChargeXi > 0 ) fHistMassOmegaPlus ->Fill( lInvMassOmegaPlus ); | |
2205 | ||
2206 | ||
9d670198 | 2207 | // - Step II.3 : PID info |
f87cd3db | 2208 | //------------- |
2209 | ||
f87cd3db | 2210 | |
9d670198 | 2211 | // 3.1 - PID Information |
7e504402 | 2212 | |
2213 | Bool_t lIsPosInXiProton = kFALSE; | |
2214 | Bool_t lIsPosInXiPion = kFALSE; | |
2215 | Bool_t lIsPosInOmegaProton = kFALSE; | |
2216 | Bool_t lIsPosInOmegaPion = kFALSE; | |
2217 | ||
2218 | Bool_t lIsNegInXiProton = kFALSE; | |
2219 | Bool_t lIsNegInXiPion = kFALSE; | |
2220 | Bool_t lIsNegInOmegaProton = kFALSE; | |
2221 | Bool_t lIsNegInOmegaPion = kFALSE; | |
2222 | ||
2223 | Bool_t lIsBachelorKaon = kFALSE; | |
2224 | Bool_t lIsBachelorPion = kFALSE; | |
2225 | ||
2226 | Bool_t lIsBachelorKaonForTPC = kFALSE; // For ESD only ...//FIXME : wait for availability in AOD | |
2227 | Bool_t lIsBachelorPionForTPC = kFALSE; // For ESD only ... | |
2228 | Bool_t lIsNegPionForTPC = kFALSE; // For ESD only ... | |
2229 | Bool_t lIsPosPionForTPC = kFALSE; // For ESD only ... | |
2230 | Bool_t lIsNegProtonForTPC = kFALSE; // For ESD only ... | |
2231 | Bool_t lIsPosProtonForTPC = kFALSE; // For ESD only ... | |
2232 | ||
9d670198 | 2233 | // 3.1.A - Combined PID |
7e504402 | 2234 | // Reasonable guess for the priors for the cascade track sample (e-, mu, pi, K, p) |
7475515f | 2235 | Double_t lPriorsGuessXi [AliPID::kSPECIESCN] = {0, 0, 2, 0, 1, 0,0,0,0}; |
2236 | Double_t lPriorsGuessOmega[AliPID::kSPECIESCN] = {0, 0, 1, 1, 1, 0,0,0,0}; | |
2237 | // Trick Jan, 15th, 2013 : Coverity fix - defect 11329 | |
2238 | // If the boolean for charged option is activated in AliPID::SetPriors, only the first 9 double_t in the array are read anyway. | |
2239 | // But Coverity sniffs an issue (a priori safe but the logic is a bit twisted; Coverity is not totally wrong). | |
2240 | // Use AliPID::kSPECIESCN (=14) is size of the array + initialise what I am interested in (charged particle = 9 first particles) | |
2241 | // The rest of the table will be initialised to 0 anyway. | |
7e504402 | 2242 | |
2243 | // Combined VO-positive-daughter PID | |
a786bd57 | 2244 | AliPID pPidXi; pPidXi.SetPriors( lPriorsGuessXi , kTRUE); // kTRUE = for charged particle PID |
2245 | AliPID pPidOmega; pPidOmega.SetPriors( lPriorsGuessOmega , kTRUE); // kTRUE = for charged particle PID | |
7e504402 | 2246 | |
2247 | if( pTrackXi->IsOn(AliESDtrack::kESDpid) ){ // Combined PID exists | |
2248 | Double_t r[10] = {0.}; pTrackXi->GetESDpid(r); | |
2249 | pPidXi.SetProbabilities(r); | |
2250 | pPidOmega.SetProbabilities(r); | |
2251 | ||
2252 | // Check if the V0 positive track is a proton (case for Xi-) | |
2253 | Double_t pproton = pPidXi.GetProbability(AliPID::kProton); | |
2254 | if (pproton > pPidXi.GetProbability(AliPID::kElectron) && | |
2255 | pproton > pPidXi.GetProbability(AliPID::kMuon) && | |
2256 | pproton > pPidXi.GetProbability(AliPID::kPion) && | |
2257 | pproton > pPidXi.GetProbability(AliPID::kKaon) ) lIsPosInXiProton = kTRUE; | |
2258 | ||
2259 | // Check if the V0 positive track is a pi+ (case for Xi+) | |
2260 | Double_t ppion = pPidXi.GetProbability(AliPID::kPion); | |
2261 | if (ppion > pPidXi.GetProbability(AliPID::kElectron) && | |
2262 | ppion > pPidXi.GetProbability(AliPID::kMuon) && | |
2263 | ppion > pPidXi.GetProbability(AliPID::kKaon) && | |
2264 | ppion > pPidXi.GetProbability(AliPID::kProton) ) lIsPosInXiPion = kTRUE; | |
2265 | ||
2266 | ||
2267 | // Check if the V0 positive track is a proton (case for Omega-) | |
2268 | pproton = 0.; | |
2269 | pproton = pPidOmega.GetProbability(AliPID::kProton); | |
2270 | if (pproton > pPidOmega.GetProbability(AliPID::kElectron) && | |
2271 | pproton > pPidOmega.GetProbability(AliPID::kMuon) && | |
2272 | pproton > pPidOmega.GetProbability(AliPID::kPion) && | |
2273 | pproton > pPidOmega.GetProbability(AliPID::kKaon) ) lIsPosInOmegaProton = kTRUE; | |
2274 | ||
2275 | // Check if the V0 positive track is a pi+ (case for Omega+) | |
2276 | ppion = 0.; | |
2277 | ppion = pPidOmega.GetProbability(AliPID::kPion); | |
2278 | if (ppion > pPidOmega.GetProbability(AliPID::kElectron) && | |
2279 | ppion > pPidOmega.GetProbability(AliPID::kMuon) && | |
2280 | ppion > pPidOmega.GetProbability(AliPID::kKaon) && | |
2281 | ppion > pPidOmega.GetProbability(AliPID::kProton) ) lIsPosInOmegaPion = kTRUE; | |
2282 | ||
2283 | }// end if V0 positive track with existing combined PID | |
2284 | ||
2285 | ||
2286 | // Combined VO-negative-daughter PID | |
a786bd57 | 2287 | AliPID nPidXi; nPidXi.SetPriors( lPriorsGuessXi , kTRUE); // kTRUE = for charged particle PID |
2288 | AliPID nPidOmega; nPidOmega.SetPriors( lPriorsGuessOmega , kTRUE); // kTRUE = for charged particle PID | |
7e504402 | 2289 | |
2290 | if( nTrackXi->IsOn(AliESDtrack::kESDpid) ){ // Combined PID exists | |
2291 | Double_t r[10] = {0.}; nTrackXi->GetESDpid(r); | |
2292 | nPidXi.SetProbabilities(r); | |
2293 | nPidOmega.SetProbabilities(r); | |
2294 | ||
2295 | // Check if the V0 negative track is a pi- (case for Xi-) | |
2296 | Double_t ppion = nPidXi.GetProbability(AliPID::kPion); | |
2297 | if (ppion > nPidXi.GetProbability(AliPID::kElectron) && | |
2298 | ppion > nPidXi.GetProbability(AliPID::kMuon) && | |
2299 | ppion > nPidXi.GetProbability(AliPID::kKaon) && | |
2300 | ppion > nPidXi.GetProbability(AliPID::kProton) ) lIsNegInXiPion = kTRUE; | |
2301 | ||
2302 | // Check if the V0 negative track is an anti-proton (case for Xi+) | |
2303 | Double_t pproton = nPidXi.GetProbability(AliPID::kProton); | |
2304 | if (pproton > nPidXi.GetProbability(AliPID::kElectron) && | |
2305 | pproton > nPidXi.GetProbability(AliPID::kMuon) && | |
2306 | pproton > nPidXi.GetProbability(AliPID::kPion) && | |
2307 | pproton > nPidXi.GetProbability(AliPID::kKaon) ) lIsNegInXiProton = kTRUE; | |
2308 | ||
2309 | // Check if the V0 negative track is a pi- (case for Omega-) | |
2310 | ppion = 0.; | |
2311 | ppion = nPidOmega.GetProbability(AliPID::kPion); | |
2312 | if (ppion > nPidOmega.GetProbability(AliPID::kElectron) && | |
2313 | ppion > nPidOmega.GetProbability(AliPID::kMuon) && | |
2314 | ppion > nPidOmega.GetProbability(AliPID::kKaon) && | |
2315 | ppion > nPidOmega.GetProbability(AliPID::kProton) ) lIsNegInOmegaPion = kTRUE; | |
2316 | ||
2317 | // Check if the V0 negative track is an anti-proton (case for Omega+) | |
2318 | pproton = 0.; | |
2319 | pproton = nPidOmega.GetProbability(AliPID::kProton); | |
2320 | if (pproton > nPidOmega.GetProbability(AliPID::kElectron) && | |
2321 | pproton > nPidOmega.GetProbability(AliPID::kMuon) && | |
2322 | pproton > nPidOmega.GetProbability(AliPID::kPion) && | |
2323 | pproton > nPidOmega.GetProbability(AliPID::kKaon) ) lIsNegInOmegaProton = kTRUE; | |
2324 | ||
2325 | }// end if V0 negative track with existing combined PID | |
f87cd3db | 2326 | |
7e504402 | 2327 | |
2328 | // Combined bachelor PID | |
a786bd57 | 2329 | AliPID bachPidXi; bachPidXi.SetPriors( lPriorsGuessXi , kTRUE); // kTRUE = for charged particle PID |
2330 | AliPID bachPidOmega; bachPidOmega.SetPriors( lPriorsGuessOmega , kTRUE); // kTRUE = for charged particle PID | |
7e504402 | 2331 | |
2332 | Double_t ppionBach = 0.0, pkaonBach = 0.0; | |
2333 | ||
f87cd3db | 2334 | if( bachTrackXi->IsOn(AliESDtrack::kESDpid) ){ // Combined PID exists |
7e504402 | 2335 | Double_t r[10] = {0.}; bachTrackXi->GetESDpid(r); |
2336 | bachPidXi.SetProbabilities(r); | |
2337 | bachPidOmega.SetProbabilities(r); | |
f87cd3db | 2338 | // Check if the bachelor track is a pion |
7e504402 | 2339 | ppionBach = bachPidXi.GetProbability(AliPID::kPion); |
2340 | if (ppionBach > bachPidXi.GetProbability(AliPID::kElectron) && | |
2341 | ppionBach > bachPidXi.GetProbability(AliPID::kMuon) && | |
2342 | ppionBach > bachPidXi.GetProbability(AliPID::kKaon) && | |
2343 | ppionBach > bachPidXi.GetProbability(AliPID::kProton) ) lIsBachelorPion = kTRUE; | |
f87cd3db | 2344 | // Check if the bachelor track is a kaon |
7e504402 | 2345 | pkaonBach = bachPidOmega.GetProbability(AliPID::kKaon); |
2346 | if (pkaonBach > bachPidOmega.GetProbability(AliPID::kElectron) && | |
2347 | pkaonBach > bachPidOmega.GetProbability(AliPID::kMuon) && | |
2348 | pkaonBach > bachPidOmega.GetProbability(AliPID::kPion) && | |
2349 | pkaonBach > bachPidOmega.GetProbability(AliPID::kProton) ) lIsBachelorKaon = kTRUE; | |
f87cd3db | 2350 | }// end if bachelor track with existing combined PID |
2351 | ||
7e504402 | 2352 | |
c525f360 | 2353 | // 3.1.B - TPC PID : 4-sigma bands on Bethe-Bloch curve |
e8fd19de | 2354 | |
2355 | // Bachelor | |
2356 | if (TMath::Abs(fESDpid->NumberOfSigmasTPC( bachTrackXi,AliPID::kKaon)) < 4) lIsBachelorKaonForTPC = kTRUE; | |
2357 | if (TMath::Abs(fESDpid->NumberOfSigmasTPC( bachTrackXi,AliPID::kPion)) < 4) lIsBachelorPionForTPC = kTRUE; | |
2358 | ||
2359 | // Negative V0 daughter | |
2360 | if (TMath::Abs(fESDpid->NumberOfSigmasTPC( nTrackXi,AliPID::kPion )) < 4) lIsNegPionForTPC = kTRUE; | |
2361 | if (TMath::Abs(fESDpid->NumberOfSigmasTPC( nTrackXi,AliPID::kProton )) < 4) lIsNegProtonForTPC = kTRUE; | |
2362 | ||
2363 | // Positive V0 daughter | |
2364 | if (TMath::Abs(fESDpid->NumberOfSigmasTPC( pTrackXi,AliPID::kPion )) < 4) lIsPosPionForTPC = kTRUE; | |
2365 | if (TMath::Abs(fESDpid->NumberOfSigmasTPC( pTrackXi,AliPID::kProton )) < 4) lIsPosProtonForTPC = kTRUE; | |
2366 | ||
2367 | /* | |
2368 | const AliExternalTrackParam *pInnerWallTrackXi = pTrackXi ->GetInnerParam(); // Do not use GetTPCInnerWall | |
2369 | const AliExternalTrackParam *nInnerWallTrackXi = nTrackXi ->GetInnerParam(); | |
2370 | const AliExternalTrackParam *bachInnerWallTrackXi = bachTrackXi ->GetInnerParam(); | |
2371 | if(pInnerWallTrackXi && nInnerWallTrackXi && bachInnerWallTrackXi ){ | |
2372 | ||
2373 | Double_t pMomInnerWall = pInnerWallTrackXi ->GetP(); | |
2374 | Double_t nMomInnerWall = nInnerWallTrackXi ->GetP(); | |
2375 | Double_t bachMomInnerWall = bachInnerWallTrackXi->GetP(); | |
2376 | ||
2377 | // Bachelor | |
2378 | if (TMath::Abs(fESDpid->NumberOfSigmasTPC( bachTrackXi,AliPID::kPion)) < 3) lIsBachelorPionForTPC = kTRUE; | |
2379 | if (bachMomInnerWall < 0.350 && TMath::Abs(fESDpid->NumberOfSigmasTPC( bachTrackXi,AliPID::kKaon)) < 5) lIsBachelorKaonForTPC = kTRUE; | |
2380 | if (bachMomInnerWall > 0.350 && TMath::Abs(fESDpid->NumberOfSigmasTPC( bachTrackXi,AliPID::kKaon)) < 3) lIsBachelorKaonForTPC = kTRUE; | |
2381 | ||
2382 | // Negative V0 daughter | |
2383 | if (TMath::Abs(fESDpid->NumberOfSigmasTPC( nTrackXi,AliPID::kPion )) < 3 ) lIsNegPionForTPC = kTRUE; | |
2384 | if (nMomInnerWall < 0.6 && TMath::Abs(fESDpid->NumberOfSigmasTPC( nTrackXi,AliPID::kProton ) ) < 5 ) lIsNegProtonForTPC = kTRUE; | |
2385 | if (nMomInnerWall > 0.6 && TMath::Abs(fESDpid->NumberOfSigmasTPC( nTrackXi,AliPID::kProton ) ) < 3 ) lIsNegProtonForTPC = kTRUE; | |
2386 | ||
2387 | // Positive V0 daughter | |
2388 | if (TMath::Abs(fESDpid->NumberOfSigmasTPC( pTrackXi,AliPID::kPion )) < 3 ) lIsPosPionForTPC = kTRUE; | |
2389 | if (pMomInnerWall < 0.6 && TMath::Abs(fESDpid->NumberOfSigmasTPC( pTrackXi,AliPID::kProton )) < 5) lIsPosProtonForTPC = kTRUE; | |
2390 | if (pMomInnerWall > 0.6 && TMath::Abs(fESDpid->NumberOfSigmasTPC( pTrackXi,AliPID::kProton )) < 3) lIsPosProtonForTPC = kTRUE; | |
2391 | ||
2392 | } | |
2393 | */ | |
7e504402 | 2394 | |
2395 | // Combined PID TH1s | |
2396 | if( lChargeXi < 0 && lIsBachelorPion ) fHistMassWithCombPIDXiMinus ->Fill( lInvMassXiMinus ); | |
2397 | if( lChargeXi > 0 && lIsBachelorPion ) fHistMassWithCombPIDXiPlus ->Fill( lInvMassXiPlus ); | |
f87cd3db | 2398 | if( lChargeXi < 0 && lIsBachelorKaon ) fHistMassWithCombPIDOmegaMinus ->Fill( lInvMassOmegaMinus ); |
7e504402 | 2399 | if( lChargeXi > 0 && lIsBachelorKaon ) fHistMassWithCombPIDOmegaPlus ->Fill( lInvMassOmegaPlus ); |
f87cd3db | 2400 | |
2401 | ||
9d670198 | 2402 | // 3.2 - PID proba Vs Pt(Bach) |
f870ac91 | 2403 | Int_t lblBachForPID = (Int_t) TMath::Abs( bachTrackXi->GetLabel() ); |
2404 | TParticle* mcBachForPID = lMCstack->Particle( lblBachForPID ); | |
2405 | Double_t lmcPtBach = mcBachForPID->Pt(); | |
2406 | ||
7e504402 | 2407 | if(lIsBachelorPion) f2dHistPIDprobaPionVsMCPtBach->Fill( lmcPtBach, ppionBach ); |
2408 | if(lIsBachelorKaon) f2dHistPIDprobaKaonVsMCPtBach->Fill( lmcPtBach, pkaonBach ); | |
f870ac91 | 2409 | |
2410 | ||
9d670198 | 2411 | // 3.3 - MC perfect PID |
f87cd3db | 2412 | Bool_t lIsBachelorMCPiMinus = kFALSE; |
2413 | Bool_t lIsBachelorMCPiPlus = kFALSE; | |
2414 | Bool_t lIsBachelorMCKMinus = kFALSE; | |
2415 | Bool_t lIsBachelorMCKPlus = kFALSE; | |
2416 | ||
f87cd3db | 2417 | if( mcBachForPID->GetPdgCode() == -211) lIsBachelorMCPiMinus = kTRUE; |
2418 | if( mcBachForPID->GetPdgCode() == 211) lIsBachelorMCPiPlus = kTRUE; | |
2419 | if( mcBachForPID->GetPdgCode() == -321) lIsBachelorMCKMinus = kTRUE; | |
2420 | if( mcBachForPID->GetPdgCode() == 321) lIsBachelorMCKPlus = kTRUE; | |
2421 | ||
2422 | if( lChargeXi < 0 && lIsBachelorMCPiMinus ) fHistMassWithMcPIDXiMinus ->Fill( lInvMassXiMinus ); | |
2423 | if( lChargeXi > 0 && lIsBachelorMCPiPlus ) fHistMassWithMcPIDXiPlus ->Fill( lInvMassXiPlus ); | |
2424 | if( lChargeXi < 0 && lIsBachelorMCKMinus ) fHistMassWithMcPIDOmegaMinus ->Fill( lInvMassOmegaMinus ); | |
2425 | if( lChargeXi > 0 && lIsBachelorMCKPlus ) fHistMassWithMcPIDOmegaPlus ->Fill( lInvMassOmegaPlus ); | |
2426 | ||
f870ac91 | 2427 | |
b67ec6f7 | 2428 | |
2429 | ||
9d670198 | 2430 | // - Step II.4 : MC association (care : lots of "continue;" below this line) |
b67ec6f7 | 2431 | //------------- |
2432 | ||
2433 | Bool_t lAssoXiMinus = kFALSE; | |
2434 | Bool_t lAssoXiPlus = kFALSE; | |
2435 | Bool_t lAssoOmegaMinus = kFALSE; | |
2436 | Bool_t lAssoOmegaPlus = kFALSE; | |
2437 | ||
2438 | ||
2439 | if(fDebug > 5) | |
2440 | cout << "MC EventNumber : " << lMCevent->Header()->GetEvent() | |
2441 | << " / MC event Number in Run : " << lMCevent->Header()->GetEventNrInRun() << endl; | |
2442 | ||
9d670198 | 2443 | // - Step 4.1 : level of the V0 daughters |
b67ec6f7 | 2444 | |
2445 | Int_t lblPosV0Dghter = (Int_t) TMath::Abs( pTrackXi->GetLabel() ); | |
2446 | // Abs value = needed ! question of quality track association ... | |
2447 | Int_t lblNegV0Dghter = (Int_t) TMath::Abs( nTrackXi->GetLabel() ); | |
2448 | ||
2449 | TParticle* mcPosV0Dghter = lMCstack->Particle( lblPosV0Dghter ); | |
2450 | TParticle* mcNegV0Dghter = lMCstack->Particle( lblNegV0Dghter ); | |
2451 | ||
2452 | ||
9d670198 | 2453 | // - Step 4.2 : level of the Xi daughters |
b67ec6f7 | 2454 | |
2455 | Int_t lblMotherPosV0Dghter = mcPosV0Dghter->GetFirstMother() ; | |
2456 | Int_t lblMotherNegV0Dghter = mcNegV0Dghter->GetFirstMother(); | |
2457 | ||
f87cd3db | 2458 | if( lblMotherPosV0Dghter != lblMotherNegV0Dghter) continue; // same mother |
b67ec6f7 | 2459 | if( lblMotherPosV0Dghter < 0 ) continue; // mother != primary (!= -1) |
2460 | if( lblMotherNegV0Dghter < 0 ) continue; | |
2461 | ||
2462 | ||
2463 | // mothers = Lambda candidate ... a priori | |
2464 | ||
2465 | TParticle* mcMotherPosV0Dghter = lMCstack->Particle( lblMotherPosV0Dghter ); | |
2466 | TParticle* mcMotherNegV0Dghter = lMCstack->Particle( lblMotherNegV0Dghter ); | |
2467 | ||
2468 | Int_t lblBach = (Int_t) TMath::Abs( bachTrackXi->GetLabel() ); | |
2469 | TParticle* mcBach = lMCstack->Particle( lblBach ); | |
2470 | ||
2471 | ||
9d670198 | 2472 | // - Step 4.3 : level of Xi candidate |
b67ec6f7 | 2473 | |
2474 | Int_t lblGdMotherPosV0Dghter = mcMotherPosV0Dghter->GetFirstMother() ; | |
2475 | Int_t lblGdMotherNegV0Dghter = mcMotherNegV0Dghter->GetFirstMother() ; | |
2476 | ||
2477 | if( lblGdMotherPosV0Dghter != lblGdMotherNegV0Dghter ) continue; | |
2478 | if( lblGdMotherPosV0Dghter < 0 ) continue; // primary lambda ... | |
2479 | if( lblGdMotherNegV0Dghter < 0 ) continue; // primary lambda ... | |
2480 | ||
2481 | ||
2482 | // Gd mothers = Xi candidate ... a priori | |
2483 | ||
2484 | TParticle* mcGdMotherPosV0Dghter = lMCstack->Particle( lblGdMotherPosV0Dghter ); | |
2485 | TParticle* mcGdMotherNegV0Dghter = lMCstack->Particle( lblGdMotherNegV0Dghter ); | |
2486 | ||
2487 | Int_t lblMotherBach = (Int_t) TMath::Abs( mcBach->GetFirstMother() ); | |
2488 | ||
2489 | if( lblMotherBach != lblGdMotherPosV0Dghter ) continue; //same mother for bach and V0 daughters | |
2490 | ||
2491 | TParticle* mcMotherBach = lMCstack->Particle( lblMotherBach ); | |
2492 | ||
2493 | ||
9d670198 | 2494 | // - Step 4.4 : Manage boolean for association |
b67ec6f7 | 2495 | |
2496 | if( mcMotherBach ->GetPdgCode() == 3312 && | |
2497 | mcGdMotherPosV0Dghter ->GetPdgCode() == 3312 && | |
2498 | mcGdMotherNegV0Dghter ->GetPdgCode() == 3312) lAssoXiMinus = kTRUE; | |
2499 | ||
2500 | else if( mcMotherBach ->GetPdgCode() == -3312 && | |
2501 | mcGdMotherPosV0Dghter ->GetPdgCode() == -3312 && | |
2502 | mcGdMotherNegV0Dghter ->GetPdgCode() == -3312) lAssoXiPlus = kTRUE; | |
2503 | ||
2504 | else if( mcMotherBach ->GetPdgCode() == 3334 && | |
2505 | mcGdMotherPosV0Dghter ->GetPdgCode() == 3334 && | |
2506 | mcGdMotherNegV0Dghter ->GetPdgCode() == 3334) lAssoOmegaMinus = kTRUE; | |
2507 | ||
2508 | else if( mcMotherBach ->GetPdgCode() == -3334 && | |
2509 | mcGdMotherPosV0Dghter ->GetPdgCode() == -3334 && | |
2510 | mcGdMotherNegV0Dghter ->GetPdgCode() == -3334) lAssoOmegaPlus = kTRUE; | |
2511 | ||
2512 | ||
2513 | ||
9d670198 | 2514 | if(!lAssoXiMinus && !lAssoXiPlus && !lAssoOmegaMinus && !lAssoOmegaPlus) continue; // no association, skip the rest of the code |
b67ec6f7 | 2515 | // If a proper association exists ... |
2516 | ||
2517 | if(fDebug > 4){ | |
2518 | cout << "XiMinus = " << lAssoXiMinus << endl; | |
2519 | cout << "XiPlus = " << lAssoXiPlus << endl; | |
2520 | cout << "OmegaMinus = " << lAssoOmegaMinus << endl; | |
2521 | cout << "OmegaPlus = " << lAssoOmegaPlus << endl | |
2522 | << "----" << endl; | |
2523 | } | |
9d670198 | 2524 | |
2525 | ||
b67ec6f7 | 2526 | if(fDebug > 5){ |
2527 | cout << endl; | |
2528 | cout << "- V0 daughters - " << endl; | |
2529 | cout << " + V0 Pos. / Label : " << lblPosV0Dghter | |
2530 | << " - Pdg Code : " << mcPosV0Dghter->GetTitle() << endl; | |
2531 | cout << " - V0 Neg. / Label : " << lblNegV0Dghter | |
2532 | << " - Pdg Code : " << mcNegV0Dghter->GetTitle() << endl; | |
2533 | ||
2534 | cout << "- Xi daughters - " << endl; | |
2535 | cout << " + V0 Pos. mother / Label : " << lblMotherPosV0Dghter | |
2536 | << " - Pdg Code : " << mcMotherPosV0Dghter->GetTitle() << endl; | |
2537 | cout << " - V0 Neg. mother / Label : " << lblMotherNegV0Dghter | |
2538 | << " - Pdg Code : " << mcMotherNegV0Dghter->GetTitle() << endl; | |
2539 | ||
2540 | cout << " -- Bach. / Label :" << lblBach | |
2541 | << " - Pdg Code : " << mcBach->GetTitle() << endl; | |
2542 | ||
2543 | cout << "- Xi candidate -" << endl; | |
2544 | cout << " + V0 Pos. Gd Mother / Label : " << lblGdMotherPosV0Dghter | |
2545 | << " - Pdg Code : " << mcGdMotherPosV0Dghter->GetTitle() << endl; | |
2546 | cout << " - V0 Neg. Gd Mother / Label : " << lblGdMotherNegV0Dghter | |
2547 | << " - Pdg Code : "<< mcGdMotherNegV0Dghter->GetTitle() << endl; | |
2548 | ||
2549 | cout << " -- Mother Bach. / Label : " << lblMotherBach | |
2550 | << " - Pdg Code : " << mcMotherBach->GetTitle() << endl; | |
2551 | cout << endl; | |
2552 | } | |
2553 | ||
2554 | ||
9d670198 | 2555 | // - Step 5 : Plots around the cascade candidates associated with MC |
b67ec6f7 | 2556 | //------------- |
2557 | ||
7e504402 | 2558 | Double_t lmcPt = mcMotherBach->Pt(); |
9d670198 | 2559 | Double_t lmcRapCasc = 0.5*TMath::Log( (mcMotherBach->Energy() + mcMotherBach->Pz()) / |
7e504402 | 2560 | (mcMotherBach->Energy() - mcMotherBach->Pz() +1.e-13) ); |
a786bd57 | 2561 | Double_t lmcPtBaryon = (mcNegV0Dghter->GetPdgCode() == -2212 ) ? mcNegV0Dghter->Pt() : mcPosV0Dghter->Pt(); // spot the baryon daughter : pbar or p |
2562 | ||
2563 | ||
7e504402 | 2564 | Double_t lmcEta = mcMotherBach->Eta(); |
2565 | Double_t lmcTransvRadius = mcBach->R(); // to get the decay point of Xi, = the production vertex of Bachelor ... | |
c525f360 | 2566 | |
2567 | TVector3 lmcTVect3Mom( mcMotherBach->Px(), mcMotherBach->Py(), mcMotherBach->Pz() ); | |
7e504402 | 2568 | |
2569 | Double_t lrecoPt = xiESD->Pt(); | |
2570 | Double_t lrecoTransvRadius = TMath::Sqrt( xiESD->Xv() * xiESD->Xv() + xiESD->Yv() * xiESD->Yv() ); | |
c525f360 | 2571 | |
2572 | TVector3 lrecoTVect3Mom( xiESD->Px(), xiESD->Py(), xiESD->Pz() ); | |
2573 | Double_t lDeltaPhiMcReco = lmcTVect3Mom.DeltaPhi( lrecoTVect3Mom ) * 180.0/TMath::Pi(); | |
9d670198 | 2574 | |
c525f360 | 2575 | |
ff0753e1 | 2576 | // - Histos for the cascade candidates associated with MC |
b67ec6f7 | 2577 | |
2578 | if( lChargeXi < 0 && lAssoXiMinus){ | |
2579 | fHistAsMCMassXiMinus ->Fill( lInvMassXiMinus ); | |
9d670198 | 2580 | if(lIsBachelorPion) f2dHistAsMCandCombPIDGenPtVsGenYXiMinus->Fill( lmcPt, lmcRapCasc ); |
2581 | f2dHistAsMCGenPtVsGenYXiMinus ->Fill( lmcPt, lmcRapCasc); | |
b67ec6f7 | 2582 | fHistAsMCGenEtaXiMinus ->Fill( lmcEta ); |
2583 | f2dHistAsMCResPtXiMinus ->Fill( lmcPt, (lrecoPt - lmcPt)/ lmcPt ); | |
2584 | f2dHistAsMCResRXiMinus ->Fill( lmcTransvRadius, (lrecoTransvRadius - lmcTransvRadius)/ lmcTransvRadius ); | |
c525f360 | 2585 | f2dHistAsMCResPhiXiMinus ->Fill( lmcPt, lDeltaPhiMcReco ); |
a786bd57 | 2586 | f2dHistAsMCPtProtonVsPtXiMinus->Fill( lmcPtBaryon, lmcPt ); |
b67ec6f7 | 2587 | } |
2588 | ||
2589 | else if( lChargeXi > 0 && lAssoXiPlus){ | |
a786bd57 | 2590 | fHistAsMCMassXiPlus ->Fill( lInvMassXiPlus ); |
2591 | if(lIsBachelorPion) f2dHistAsMCandCombPIDGenPtVsGenYXiPlus->Fill( lmcPt, lmcRapCasc ); | |
2592 | f2dHistAsMCGenPtVsGenYXiPlus ->Fill( lmcPt, lmcRapCasc); | |
2593 | fHistAsMCGenEtaXiPlus ->Fill( lmcEta ); | |
2594 | f2dHistAsMCResPtXiPlus ->Fill( lmcPt, (lrecoPt - lmcPt)/ lmcPt ); | |
2595 | f2dHistAsMCResRXiPlus ->Fill( lmcTransvRadius, (lrecoTransvRadius - lmcTransvRadius)/ lmcTransvRadius ); | |
2596 | f2dHistAsMCResPhiXiPlus ->Fill( lmcPt, lDeltaPhiMcReco ); | |
2597 | f2dHistAsMCPtAntiProtonVsPtXiPlus ->Fill( lmcPtBaryon, lmcPt ); | |
2598 | ||
b67ec6f7 | 2599 | } |
2600 | ||
2601 | else if( lChargeXi < 0 && lAssoOmegaMinus){ | |
2602 | fHistAsMCMassOmegaMinus ->Fill( lInvMassOmegaMinus ); | |
9d670198 | 2603 | if(lIsBachelorKaon) f2dHistAsMCandCombPIDGenPtVsGenYOmegaMinus->Fill( lmcPt, lmcRapCasc ); |
2604 | f2dHistAsMCGenPtVsGenYOmegaMinus ->Fill( lmcPt, lmcRapCasc ); | |
b67ec6f7 | 2605 | fHistAsMCGenEtaOmegaMinus ->Fill( lmcEta ); |
2606 | f2dHistAsMCResPtOmegaMinus ->Fill( lmcPt, (lrecoPt - lmcPt)/ lmcPt ); | |
2607 | f2dHistAsMCResROmegaMinus ->Fill( lmcTransvRadius, (lrecoTransvRadius - lmcTransvRadius)/ lmcTransvRadius ); | |
c525f360 | 2608 | f2dHistAsMCResPhiOmegaMinus ->Fill( lmcPt, lDeltaPhiMcReco ); |
a786bd57 | 2609 | f2dHistAsMCPtProtonVsPtOmegaMinus->Fill( lmcPtBaryon, lmcPt ); |
b67ec6f7 | 2610 | } |
2611 | ||
2612 | else if( lChargeXi > 0 && lAssoOmegaPlus){ | |
a786bd57 | 2613 | fHistAsMCMassOmegaPlus ->Fill( lInvMassOmegaPlus ); |
2614 | if(lIsBachelorKaon) f2dHistAsMCandCombPIDGenPtVsGenYOmegaPlus->Fill( lmcPt, lmcRapCasc ); | |
2615 | f2dHistAsMCGenPtVsGenYOmegaPlus ->Fill( lmcPt, lmcRapCasc ); | |
2616 | fHistAsMCGenEtaOmegaPlus ->Fill( lmcEta ); | |
2617 | f2dHistAsMCResPtOmegaPlus ->Fill( lmcPt, (lrecoPt - lmcPt)/ lmcPt ); | |
2618 | f2dHistAsMCResROmegaPlus ->Fill( lmcTransvRadius, (lrecoTransvRadius - lmcTransvRadius)/ lmcTransvRadius ); | |
2619 | f2dHistAsMCResPhiOmegaPlus ->Fill( lmcPt, lDeltaPhiMcReco ); | |
2620 | f2dHistAsMCPtAntiProtonVsPtOmegaPlus ->Fill( lmcPtBaryon, lmcPt ); | |
c525f360 | 2621 | } |
7e504402 | 2622 | |
2623 | ||
9d670198 | 2624 | // - Step 6 : Containers = Cascade cuts + PID |
2625 | //------------- | |
2626 | ||
2627 | // Double_t lChi2Xi = -1. ; | |
2628 | Double_t lDcaXiDaughters = -1. ; | |
2629 | Double_t lDcaBachToPrimVertexXi = -1. ; | |
2630 | Double_t lXiCosineOfPointingAngle = -1. ; | |
2631 | Double_t lPosXi[3] = { -1000.0, -1000.0, -1000.0 }; | |
2632 | Double_t lXiRadius = -1000. ; | |
7e504402 | 2633 | |
9d670198 | 2634 | Double_t lInvMassLambdaAsCascDghter = 0.; |
2635 | Double_t lDcaV0DaughtersXi = -1.; | |
2636 | // Double_t lV0Chi2Xi = -1. ; | |
2637 | Double_t lV0CosineOfPointingAngleXi = -1.; | |
2638 | Double_t lPosV0Xi[3] = { -1000. , -1000., -1000. }; // Position of VO coming from cascade | |
2639 | Double_t lV0RadiusXi = -1000.; | |
2640 | Double_t lDcaV0ToPrimVertexXi = -1.; | |
2641 | Double_t lDcaPosToPrimVertexXi = -1.; | |
2642 | Double_t lDcaNegToPrimVertexXi = -1.; | |
2643 | ||
a786bd57 | 2644 | //Int_t nTrackWithTPCrefitMultiplicity = 0; |
9d670198 | 2645 | |
7e504402 | 2646 | |
9d670198 | 2647 | // 6.2 - Definition of the needed variables |
7e504402 | 2648 | |
9d670198 | 2649 | //lChi2Xi = xiESD->GetChi2Xi(); |
2650 | lDcaXiDaughters = xiESD->GetDcaXiDaughters(); | |
2651 | lDcaBachToPrimVertexXi = TMath::Abs( bachTrackXi->GetD( lBestPrimaryVtxPos[0], | |
2652 | lBestPrimaryVtxPos[1], | |
2653 | lMagneticField ) ); | |
2654 | // NOTE : AliExternalTrackParam::GetD returns an algebraic value | |
2655 | lXiCosineOfPointingAngle = xiESD->GetCascadeCosineOfPointingAngle( lBestPrimaryVtxPos[0], | |
2656 | lBestPrimaryVtxPos[1], | |
2657 | lBestPrimaryVtxPos[2] ); | |
2658 | // Take care : the best available vertex should be used (like in AliCascadeVertexer) | |
2659 | xiESD->GetXYZcascade( lPosXi[0], lPosXi[1], lPosXi[2] ); | |
2660 | lXiRadius = TMath::Sqrt( lPosXi[0]*lPosXi[0] + lPosXi[1]*lPosXi[1] ); | |
2661 | lInvMassLambdaAsCascDghter = xiESD->GetEffMass(); | |
2662 | // This value shouldn't change, whatever the working hyp. is : Xi-, Xi+, Omega-, Omega+ | |
2663 | lDcaV0DaughtersXi = xiESD->GetDcaV0Daughters(); | |
2664 | // lV0Chi2Xi = xiESD->GetChi2V0(); | |
2665 | lV0CosineOfPointingAngleXi = xiESD->GetV0CosineOfPointingAngle( lBestPrimaryVtxPos[0], | |
2666 | lBestPrimaryVtxPos[1], | |
2667 | lBestPrimaryVtxPos[2] ); | |
2668 | xiESD->GetXYZ( lPosV0Xi[0], lPosV0Xi[1], lPosV0Xi[2] ); | |
2669 | lV0RadiusXi = TMath::Sqrt( lPosV0Xi[0]*lPosV0Xi[0] + lPosV0Xi[1]*lPosV0Xi[1] ); | |
2670 | ||
2671 | lDcaV0ToPrimVertexXi = xiESD->GetD( lBestPrimaryVtxPos[0], | |
2672 | lBestPrimaryVtxPos[1], | |
2673 | lBestPrimaryVtxPos[2] ); | |
2674 | ||
2675 | lDcaPosToPrimVertexXi = TMath::Abs( pTrackXi ->GetD( lBestPrimaryVtxPos[0], | |
2676 | lBestPrimaryVtxPos[1], | |
2677 | lMagneticField ) ); | |
2678 | ||
2679 | lDcaNegToPrimVertexXi = TMath::Abs( nTrackXi ->GetD( lBestPrimaryVtxPos[0], | |
2680 | lBestPrimaryVtxPos[1], | |
2681 | lMagneticField ) ); | |
7e504402 | 2682 | |
7e504402 | 2683 | |
7e504402 | 2684 | |
a786bd57 | 2685 | //nTrackWithTPCrefitMultiplicity = DoESDTrackWithTPCrefitMultiplicity(lESDevent); // FIXME : variable which is not used anymore at the moment ... |
c525f360 | 2686 | // -> keep it while the task is still under development. |
7e504402 | 2687 | |
2688 | ||
9d670198 | 2689 | |
9d670198 | 2690 | // 6.3 - Filling the AliCFContainer (optimisation of topological selections + systematics) |
2691 | Double_t lContainerCutVars[20] = {0.0}; | |
2692 | ||
2693 | lContainerCutVars[0] = lDcaXiDaughters; | |
2694 | lContainerCutVars[1] = lDcaBachToPrimVertexXi; | |
2695 | lContainerCutVars[2] = lXiCosineOfPointingAngle; | |
2696 | lContainerCutVars[3] = lXiRadius; | |
2697 | lContainerCutVars[4] = lInvMassLambdaAsCascDghter; | |
2698 | lContainerCutVars[5] = lDcaV0DaughtersXi; | |
2699 | lContainerCutVars[6] = lV0CosineOfPointingAngleXi; | |
2700 | lContainerCutVars[7] = lV0RadiusXi; | |
2701 | lContainerCutVars[8] = lDcaV0ToPrimVertexXi; | |
2702 | lContainerCutVars[9] = lDcaPosToPrimVertexXi; | |
2703 | lContainerCutVars[10] = lDcaNegToPrimVertexXi; | |
2704 | ||
2705 | lContainerCutVars[13] = lmcPt; | |
2706 | ||
2707 | lContainerCutVars[16] = lBestPrimaryVtxPos[2]; | |
c525f360 | 2708 | lContainerCutVars[17] = nTrackPrimaryMultiplicity; // FIXME : nTrackPrimaryMultiplicity not checked for AOD ... |
a786bd57 | 2709 | lContainerCutVars[18] = nITSandTPCtracksAndSPDtracklets; // FIXME : nITSandTPCtracksAndSPDtracklets is not available for AOD ... |
9d670198 | 2710 | lContainerCutVars[19] = lBachTPCClusters; // FIXME : BachTPCClusters is not available for AOD ... |
2711 | ||
2712 | // All cases should be covered below | |
2713 | if( lChargeXi < 0 && lAssoXiMinus ) { | |
2714 | lContainerCutVars[11] = lInvMassXiMinus; | |
e8fd19de | 2715 | lContainerCutVars[12] = 1.63; |
9d670198 | 2716 | lContainerCutVars[14] = lmcRapCasc; |
2717 | lContainerCutVars[15] = -1.; | |
e8fd19de | 2718 | if( lIsBachelorPionForTPC && lIsPosProtonForTPC && lIsNegPionForTPC ) |
2719 | fCFContAsCascadeCuts->Fill(lContainerCutVars,0); // for Xi- | |
9d670198 | 2720 | } |
2721 | if( lChargeXi > 0 && lAssoXiPlus ){ | |
2722 | lContainerCutVars[11] = lInvMassXiPlus; | |
e8fd19de | 2723 | lContainerCutVars[12] = 1.26; |
9d670198 | 2724 | lContainerCutVars[14] = lmcRapCasc; |
2725 | lContainerCutVars[15] = -1.; | |
e8fd19de | 2726 | if( lIsBachelorPionForTPC && lIsNegProtonForTPC && lIsPosPionForTPC ) |
2727 | fCFContAsCascadeCuts->Fill(lContainerCutVars,1); // for Xi+ | |
9d670198 | 2728 | } |
2729 | if( lChargeXi < 0 && lAssoOmegaMinus ) { | |
e8fd19de | 2730 | lContainerCutVars[11] = 1.63; |
9d670198 | 2731 | lContainerCutVars[12] = lInvMassOmegaMinus; |
2732 | lContainerCutVars[14] = -1.; | |
2733 | lContainerCutVars[15] = lmcRapCasc; | |
a786bd57 | 2734 | if( lIsBachelorKaonForTPC && lIsPosProtonForTPC && lIsNegPionForTPC && (TMath::Abs( lInvMassXiMinus-1.3217 ) > 0.008) ) |
e8fd19de | 2735 | fCFContAsCascadeCuts->Fill(lContainerCutVars,2); // for Omega- |
9d670198 | 2736 | } |
2737 | if( lChargeXi > 0 && lAssoOmegaPlus ){ | |
e8fd19de | 2738 | lContainerCutVars[11] = 1.26; |
9d670198 | 2739 | lContainerCutVars[12] = lInvMassOmegaPlus; |
2740 | lContainerCutVars[14] = -1.; | |
2741 | lContainerCutVars[15] = lmcRapCasc; | |
a786bd57 | 2742 | if( lIsBachelorKaonForTPC && lIsNegProtonForTPC && lIsPosPionForTPC && (TMath::Abs( lInvMassXiPlus-1.3217 ) > 0.008) ) |
e8fd19de | 2743 | fCFContAsCascadeCuts->Fill(lContainerCutVars,3); // for Omega+ |
9d670198 | 2744 | } |
2745 | ||
7e504402 | 2746 | |
9d670198 | 2747 | // 6.4 - Filling the AliCFContainers related to PID |
2748 | ||
2749 | Double_t lContainerPIDVars[4] = {0.0}; | |
2750 | ||
7e504402 | 2751 | |
2752 | // Xi Minus | |
2753 | if( lChargeXi < 0 && lAssoXiMinus ) { | |
2754 | lContainerPIDVars[0] = lmcPt ; | |
2755 | lContainerPIDVars[1] = lInvMassXiMinus ; | |
9d670198 | 2756 | lContainerPIDVars[2] = lmcRapCasc ; |
c525f360 | 2757 | lContainerPIDVars[3] = nTrackPrimaryMultiplicity ; // FIXME : nTrackPrimaryMultiplicity is not checked for AOD ... |
7e504402 | 2758 | |
2759 | // No PID | |
2760 | fCFContCascadePIDAsXiMinus->Fill(lContainerPIDVars, 0); // No PID | |
2761 | // TPC PID | |
2762 | if( lIsBachelorPionForTPC ) | |
e8fd19de | 2763 | fCFContCascadePIDAsXiMinus->Fill(lContainerPIDVars, 1); // TPC PID / 4-#sigma cut on Bachelor track |
7e504402 | 2764 | |
2765 | if( lIsBachelorPionForTPC && | |
2766 | lIsPosProtonForTPC ) | |
e8fd19de | 2767 | fCFContCascadePIDAsXiMinus->Fill(lContainerPIDVars, 2); // TPC PID / 4-#sigma cut on Bachelor+Baryon tracks |
7e504402 | 2768 | |
2769 | if( lIsBachelorPionForTPC && | |
2770 | lIsPosProtonForTPC && | |
2771 | lIsNegPionForTPC ) | |
e8fd19de | 2772 | fCFContCascadePIDAsXiMinus->Fill(lContainerPIDVars, 3); // TPC PID / 4-#sigma cut on Bachelor+Baryon+Meson tracks |
7e504402 | 2773 | |
2774 | // Combined PID | |
2775 | if( lIsBachelorPion ) | |
2776 | fCFContCascadePIDAsXiMinus->Fill(lContainerPIDVars, 4); // Comb. PID / Bachelor | |
2777 | ||
2778 | if( lIsBachelorPion && | |
2779 | lIsPosInXiProton ) | |
2780 | fCFContCascadePIDAsXiMinus->Fill(lContainerPIDVars, 5); // Comb. PID / Bachelor+Baryon | |
2781 | ||
2782 | if(lIsBachelorPion && | |
2783 | lIsPosInXiProton && | |
2784 | lIsNegInXiPion ) | |
2785 | fCFContCascadePIDAsXiMinus->Fill(lContainerPIDVars, 6); // Comb. PID / Bachelor+Baryon+Meson | |
2786 | } | |
2787 | ||
2788 | lContainerPIDVars[0] = 0.; lContainerPIDVars[1] = 0.; lContainerPIDVars[2] = 0.; lContainerPIDVars[3] = 0.; | |
2789 | ||
2790 | // Xi Plus | |
2791 | if( lChargeXi > 0 && lAssoXiPlus ) { | |
2792 | lContainerPIDVars[0] = lmcPt ; | |
2793 | lContainerPIDVars[1] = lInvMassXiPlus ; | |
9d670198 | 2794 | lContainerPIDVars[2] = lmcRapCasc ; |
c525f360 | 2795 | lContainerPIDVars[3] = nTrackPrimaryMultiplicity ; // FIXME : nTrackPrimaryMultiplicity is not checked for AOD ... |
7e504402 | 2796 | |
2797 | // No PID | |
2798 | fCFContCascadePIDAsXiPlus->Fill(lContainerPIDVars, 0); // No PID | |
2799 | // TPC PID | |
2800 | if( lIsBachelorPionForTPC ) | |
e8fd19de | 2801 | fCFContCascadePIDAsXiPlus->Fill(lContainerPIDVars, 1); // TPC PID / 4-#sigma cut on Bachelor track |
7e504402 | 2802 | |
2803 | if( lIsBachelorPionForTPC && | |
2804 | lIsNegProtonForTPC ) | |
e8fd19de | 2805 | fCFContCascadePIDAsXiPlus->Fill(lContainerPIDVars, 2); // TPC PID / 4-#sigma cut on Bachelor+Baryon tracks |
7e504402 | 2806 | |
2807 | if( lIsBachelorPionForTPC && | |
2808 | lIsNegProtonForTPC && | |
2809 | lIsPosPionForTPC ) | |
e8fd19de | 2810 | fCFContCascadePIDAsXiPlus->Fill(lContainerPIDVars, 3); // TPC PID / 4-#sigma cut on Bachelor+Baryon+Meson tracks |
7e504402 | 2811 | |
2812 | // Combined PID | |
2813 | if( lIsBachelorPion ) | |
2814 | fCFContCascadePIDAsXiPlus->Fill(lContainerPIDVars, 4); // Comb. PID / Bachelor | |
2815 | ||
2816 | if( lIsBachelorPion && | |
2817 | lIsNegInXiProton ) | |
2818 | fCFContCascadePIDAsXiPlus->Fill(lContainerPIDVars, 5); // Comb. PID / Bachelor+Baryon | |
2819 | ||
2820 | if(lIsBachelorPion && | |
2821 | lIsNegInXiProton && | |
2822 | lIsPosInXiPion ) | |
2823 | fCFContCascadePIDAsXiPlus->Fill(lContainerPIDVars, 6); // Comb. PID / Bachelor+Baryon+Meson | |
2824 | } | |
2825 | ||
2826 | lContainerPIDVars[0] = 0.; lContainerPIDVars[1] = 0.; lContainerPIDVars[2] = 0.; lContainerPIDVars[3] = 0.; | |
2827 | ||
2828 | // Omega Minus | |
2829 | if( lChargeXi < 0 && lAssoOmegaMinus ) { | |
2830 | lContainerPIDVars[0] = lmcPt ; | |
2831 | lContainerPIDVars[1] = lInvMassOmegaMinus ; | |
9d670198 | 2832 | lContainerPIDVars[2] = lmcRapCasc ; |
c525f360 | 2833 | lContainerPIDVars[3] = nTrackPrimaryMultiplicity ; // FIXME : nTrackPrimaryMultiplicity is not checked for AOD ... |
7e504402 | 2834 | |
2835 | // No PID | |
2836 | fCFContCascadePIDAsOmegaMinus->Fill(lContainerPIDVars, 0); // No PID | |
2837 | // TPC PID | |
2838 | if( lIsBachelorKaonForTPC ) | |
e8fd19de | 2839 | fCFContCascadePIDAsOmegaMinus->Fill(lContainerPIDVars, 1); // TPC PID / 4-#sigma cut on Bachelor track |
7e504402 | 2840 | |
2841 | if( lIsBachelorKaonForTPC && | |
2842 | lIsPosProtonForTPC ) | |
e8fd19de | 2843 | fCFContCascadePIDAsOmegaMinus->Fill(lContainerPIDVars, 2); // TPC PID / 4-#sigma cut on Bachelor+Baryon tracks |
7e504402 | 2844 | |
2845 | if( lIsBachelorKaonForTPC && | |
2846 | lIsPosProtonForTPC && | |
2847 | lIsNegPionForTPC ) | |
e8fd19de | 2848 | fCFContCascadePIDAsOmegaMinus->Fill(lContainerPIDVars, 3); // TPC PID / 4-#sigma cut on Bachelor+Baryon+Meson tracks |
7e504402 | 2849 | |
2850 | // Combined PID | |
2851 | if( lIsBachelorKaon ) | |
2852 | fCFContCascadePIDAsOmegaMinus->Fill(lContainerPIDVars, 4); // Comb. PID / Bachelor | |
2853 | ||
2854 | if( lIsBachelorKaon && | |
2855 | lIsPosInOmegaProton ) | |
2856 | fCFContCascadePIDAsOmegaMinus->Fill(lContainerPIDVars, 5); // Comb. PID / Bachelor+Baryon | |
2857 | ||
2858 | if(lIsBachelorKaon && | |
2859 | lIsPosInOmegaProton && | |
2860 | lIsNegInOmegaPion ) | |
2861 | fCFContCascadePIDAsOmegaMinus->Fill(lContainerPIDVars, 6); // Comb. PID / Bachelor+Baryon+Meson | |
2862 | } | |
2863 | ||
2864 | lContainerPIDVars[0] = 0.; lContainerPIDVars[1] = 0.; lContainerPIDVars[2] = 0.; lContainerPIDVars[3] = 0.; | |
2865 | ||
2866 | // Omega Plus | |
2867 | if( lChargeXi > 0 && lAssoOmegaPlus) { | |
2868 | lContainerPIDVars[0] = lmcPt ; | |
2869 | lContainerPIDVars[1] = lInvMassOmegaPlus ; | |
9d670198 | 2870 | lContainerPIDVars[2] = lmcRapCasc ; |
c525f360 | 2871 | lContainerPIDVars[3] = nTrackPrimaryMultiplicity ; // FIXME : nTrackPrimaryMultiplicity is not checked for AOD ... |
7e504402 | 2872 | |
2873 | // No PID | |
2874 | fCFContCascadePIDAsOmegaPlus->Fill(lContainerPIDVars, 0); // No PID | |
2875 | // TPC PID | |
2876 | if( lIsBachelorKaonForTPC ) | |
e8fd19de | 2877 | fCFContCascadePIDAsOmegaPlus->Fill(lContainerPIDVars, 1); // TPC PID / 4-#sigma cut on Bachelor track |
7e504402 | 2878 | |
2879 | if( lIsBachelorKaonForTPC && | |
2880 | lIsNegProtonForTPC ) | |
e8fd19de | 2881 | fCFContCascadePIDAsOmegaPlus->Fill(lContainerPIDVars, 2); // TPC PID / 4-#sigma cut on Bachelor+Baryon tracks |
7e504402 | 2882 | |
2883 | if( lIsBachelorKaonForTPC && | |
2884 | lIsNegProtonForTPC && | |
2885 | lIsPosPionForTPC ) | |
e8fd19de | 2886 | fCFContCascadePIDAsOmegaPlus->Fill(lContainerPIDVars, 3); // TPC PID / 4-#sigma cut on Bachelor+Baryon+Meson tracks |
7e504402 | 2887 | |
2888 | // Combined PID | |
2889 | if( lIsBachelorKaon ) | |
2890 | fCFContCascadePIDAsOmegaPlus->Fill(lContainerPIDVars, 4); // Comb. PID / Bachelor | |
2891 | ||
2892 | if( lIsBachelorKaon && | |
2893 | lIsNegInOmegaProton ) | |
2894 | fCFContCascadePIDAsOmegaPlus->Fill(lContainerPIDVars, 5); // Comb. PID / Bachelor+Baryon | |
2895 | ||
2896 | if(lIsBachelorKaon && | |
2897 | lIsNegInOmegaProton && | |
2898 | lIsPosInOmegaPion ) | |
2899 | fCFContCascadePIDAsOmegaPlus->Fill(lContainerPIDVars, 6); // Comb. PID / Bachelor+Baryon+Meson | |
2900 | } | |
2901 | ||
b67ec6f7 | 2902 | |
2903 | ||
2904 | }// End of loop over reconstructed cascades | |
2905 | ||
2906 | ||
2907 | ||
2908 | ||
2909 | // Post output data. | |
2910 | PostData(1, fListHistCascade); | |
2911 | } | |
2912 | ||
2913 | ||
2914 | ||
7e504402 | 2915 | Int_t AliAnalysisTaskCheckPerformanceCascade::DoESDTrackWithTPCrefitMultiplicity(const AliESDEvent *lESDevent) |
2916 | { | |
2917 | // Checking the number of tracks with TPCrefit for each event | |
2918 | // Needed for a rough assessment of the event multiplicity | |
2919 | ||
2920 | Int_t nTrackWithTPCrefitMultiplicity = 0; | |
2921 | for(Int_t iTrackIdx = 0; iTrackIdx < (InputEvent())->GetNumberOfTracks(); iTrackIdx++){ | |
2922 | AliESDtrack *esdTrack = 0x0; | |
2923 | esdTrack = lESDevent->GetTrack( iTrackIdx ); | |
2924 | if (!esdTrack) { AliWarning("Pb / Could not retrieve one track within the track loop for TPCrefit check ..."); continue; } | |
2925 | ||
2926 | ULong_t lTrackStatus = esdTrack->GetStatus(); | |
2927 | if ((lTrackStatus&AliESDtrack::kTPCrefit) == 0) continue; | |
2928 | else nTrackWithTPCrefitMultiplicity++; | |
2929 | // FIXME : | |
2930 | // The goal here is to get a better assessment of the event multiplicity. | |
2931 | // (InputEvent())->GetNumberOfTracks() takes into account ITS std alone tracks + global tracks | |
2932 | // This may introduce a bias. Hence the number of TPC refit tracks. | |
9d670198 | 2933 | // Note : the event multiplicity = analysis on its own... See Jacek's or Jan Fiete's analysis on dN/d(pt) and dN/d(eta) |
7e504402 | 2934 | |
2935 | }// end loop over all event tracks | |
2936 | return nTrackWithTPCrefitMultiplicity; | |
2937 | } | |
b67ec6f7 | 2938 | |
2939 | ||
2940 | ||
2941 | ||
2942 | ||
2943 | ||
2944 | ||
2945 | //________________________________________________________________________ | |
2946 | void AliAnalysisTaskCheckPerformanceCascade::Terminate(Option_t *) | |
2947 | { | |
2948 | // Draw result to the screen | |
2949 | // Called once at the end of the query | |
f870ac91 | 2950 | |
c3b8bf85 | 2951 | TList *cRetrievedList = 0x0; |
2952 | cRetrievedList = (TList*)GetOutputData(1); | |
2953 | if(!cRetrievedList){ | |
f870ac91 | 2954 | Printf("ERROR - AliAnalysisTaskCheckPerformanceCascade : ouput data container list not available\n"); |
2955 | return; | |
2956 | } | |
2957 | ||
c3b8bf85 | 2958 | fHistMCTrackMultiplicity = dynamic_cast<TH1F*> ( cRetrievedList->FindObject("fHistMCTrackMultiplicity") ); |
b67ec6f7 | 2959 | if (!fHistMCTrackMultiplicity) { |
c3b8bf85 | 2960 | Printf("ERROR - AliAnalysisTaskCheckPerformanceCascade : fHistMCTrackMultiplicity not available"); |
b67ec6f7 | 2961 | return; |
2962 | } | |
f870ac91 | 2963 | |
2964 | ||
c3b8bf85 | 2965 | TCanvas *canCheckPerformanceCascade = new TCanvas("AliAnalysisTaskCheckPerformanceCascade","Multiplicity",10,10,510,510); |
2966 | canCheckPerformanceCascade->cd(1)->SetLogy(); | |
b67ec6f7 | 2967 | |
2968 | fHistMCTrackMultiplicity->SetMarkerStyle(22); | |
2969 | fHistMCTrackMultiplicity->DrawCopy("E"); | |
b67ec6f7 | 2970 | |
2971 | } |