]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWG2/SPECTRA/AliAnalysisTaskCheckPerformanceCascade.cxx
Validated macros for the global analysis train...
[u/mrichter/AliRoot.git] / PWG2 / SPECTRA / AliAnalysisTaskCheckPerformanceCascade.cxx
CommitLineData
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//-----------------------------------------------------------------
15// AliAnalysisTaskCheckPerformanceCascade class
16// This task is for a performance study of cascade identification.
17// It works with MC info and ESD/AOD tree.
18// Origin : A.Maire Mar2009, antonin.maire@ires.in2p3.fr
19//-----------------------------------------------------------------
20
21
6b843db3 22#include <Riostream.h>
b67ec6f7 23
24#include "TList.h"
25#include "TFile.h"
26#include "TH1F.h"
27#include "TH2F.h"
28#include "TCanvas.h"
29#include "TParticle.h"
30#include "TMath.h"
31
32#include "AliLog.h"
33#include "AliHeader.h"
34#include "AliMCEvent.h"
35#include "AliStack.h"
36#include "AliInputEventHandler.h"
37
38#include "AliESDEvent.h"
39#include "AliESDcascade.h"
40
41#include "AliAODEvent.h"
42
43#include "AliAnalysisTaskCheckPerformanceCascade.h"
44
45ClassImp(AliAnalysisTaskCheckPerformanceCascade)
46
47
48
49 //_____Dummy constructor________________________________________________________________
50AliAnalysisTaskCheckPerformanceCascade::AliAnalysisTaskCheckPerformanceCascade()
51: AliAnalysisTaskSE(), // <- take care to AliAnalysisTask( empty )
52 fDebugCascade(0), fAnalysisType("ESD"), fCollidingSystems(0),
53
54 // - Cascade part initialisation
55fListHistCascade(0),
56 fHistMCTrackMultiplicity(0),
57
58 fHistEtaGenProton(0),
59 fHistEtaGenAntiProton(0),
60
61 // Xi-
62 fHistEtaGenCascXiMinus(0),
63
64 fHistYGenCascMidRapXiMinus(0),
65 fHistEtaGenCascMidRapXiMinus(0),
66 fHistThetaGenCascMidRapXiMinus(0),
67 fHistPtGenCascMidRapXiMinus(0),
68
69 fHistThetaGenCascXiMinus(0),
70 fHistPtFdblGenCascXiMinus(0),
71
72 fHistThetaLambdaXiMinus(0),
73 fHistThetaBachXiMinus(0),
74
75 fHistThetaMesDghterXiMinus(0),
76 fHistThetaBarDghterXiMinus(0),
77
78 fHistPtBachXiMinus(0),
79 fHistPtMesDghterXiMinus(0),
80 fHistPtBarDghterXiMinus(0),
81
82
83 // Xi+
84 fHistEtaGenCascXiPlus(0),
85
86 fHistYGenCascMidRapXiPlus(0),
87 fHistEtaGenCascMidRapXiPlus(0),
88 fHistThetaGenCascMidRapXiPlus(0),
89 fHistPtGenCascMidRapXiPlus(0),
90
91 fHistThetaGenCascXiPlus(0),
92 fHistPtFdblGenCascXiPlus(0),
93
94 fHistThetaLambdaXiPlus(0),
95 fHistThetaBachXiPlus(0),
96
97 fHistThetaMesDghterXiPlus(0),
98 fHistThetaBarDghterXiPlus(0),
99
100 fHistPtBachXiPlus(0),
101 fHistPtMesDghterXiPlus(0),
102 fHistPtBarDghterXiPlus(0),
103
104 // Omega-
105 fHistEtaGenCascOmegaMinus(0),
106
107 fHistYGenCascMidRapOmegaMinus(0),
108 fHistEtaGenCascMidRapOmegaMinus(0),
109 fHistThetaGenCascMidRapOmegaMinus(0),
110 fHistPtGenCascMidRapOmegaMinus(0),
111
112 fHistThetaGenCascOmegaMinus(0),
113 fHistPtFdblGenCascOmegaMinus(0),
114
115 fHistThetaLambdaOmegaMinus(0),
116 fHistThetaBachOmegaMinus(0),
117
118 fHistThetaMesDghterOmegaMinus(0),
119 fHistThetaBarDghterOmegaMinus(0),
120
121 fHistPtBachOmegaMinus(0),
122 fHistPtMesDghterOmegaMinus(0),
123 fHistPtBarDghterOmegaMinus(0),
124
125
126 // Omega+
127 fHistEtaGenCascOmegaPlus(0),
128
129 fHistYGenCascMidRapOmegaPlus(0),
130 fHistEtaGenCascMidRapOmegaPlus(0),
131 fHistThetaGenCascMidRapOmegaPlus(0),
132 fHistPtGenCascMidRapOmegaPlus(0),
133
134 fHistThetaGenCascOmegaPlus(0),
135 fHistPtFdblGenCascOmegaPlus(0),
136
137 fHistThetaLambdaOmegaPlus(0),
138 fHistThetaBachOmegaPlus(0),
139
140 fHistThetaMesDghterOmegaPlus(0),
141 fHistThetaBarDghterOmegaPlus(0),
142
143 fHistPtBachOmegaPlus(0),
144 fHistPtMesDghterOmegaPlus(0),
145 fHistPtBarDghterOmegaPlus(0),
146
147// Part 2 - Association to MC
148
149 fHistMassXiMinus(0),
150 fHistMassXiPlus(0),
151 fHistMassOmegaMinus(0),
152 fHistMassOmegaPlus(0),
153
154 // - Effective mass histos for the cascade candidates associated with MC
155 fHistAsMCMassXiMinus(0),
156 fHistAsMCMassXiPlus(0),
157 fHistAsMCMassOmegaMinus(0),
158 fHistAsMCMassOmegaPlus(0),
159
160 // - Generated Pt of the the cascade candidates associated with MC
161 fHistAsMCGenPtXiMinus(0),
162 fHistAsMCGenPtXiPlus(0),
163 fHistAsMCGenPtOmegaMinus(0),
164 fHistAsMCGenPtOmegaPlus(0),
165
166 // - Generated Y of the the cascade candidates associated with MC
167 fHistAsMCGenYXiMinus(0),
168 fHistAsMCGenYXiPlus(0),
169 fHistAsMCGenYOmegaMinus(0),
170 fHistAsMCGenYOmegaPlus(0),
171
172 // - Generated Y Vs Generated Pt, for the cascade candidates associated with MC
173 f2dHistAsMCGenYVsGenPtXiMinus(0),
174 f2dHistAsMCGenYVsGenPtXiPlus(0),
175 f2dHistAsMCGenYVsGenPtOmegaMinus(0),
176 f2dHistAsMCGenYVsGenPtOmegaPlus(0),
177
178
179 // - Generated Eta of the the cascade candidates associated with MC
180 fHistAsMCGenEtaXiMinus(0),
181 fHistAsMCGenEtaXiPlus(0),
182 fHistAsMCGenEtaOmegaMinus(0),
183 fHistAsMCGenEtaOmegaPlus(0),
184
185 // - Resolution in Pt as function of generated Pt
186 f2dHistAsMCResPtXiMinus(0),
187 f2dHistAsMCResPtXiPlus(0),
188 f2dHistAsMCResPtOmegaMinus(0),
189 f2dHistAsMCResPtOmegaPlus(0),
190
191 // - Resolution in R(2D) as function of generated R
192 f2dHistAsMCResRXiMinus(0),
193 f2dHistAsMCResRXiPlus(0),
194 f2dHistAsMCResROmegaMinus(0),
195 f2dHistAsMCResROmegaPlus(0)
196
197
198
199{
200// Dummy constructor
201}
202
203
204
205
206//_____Non-default Constructor________________________________________________________________
207AliAnalysisTaskCheckPerformanceCascade::AliAnalysisTaskCheckPerformanceCascade(const char *name)
208 : AliAnalysisTaskSE(name),
209 fDebugCascade(0), fAnalysisType("ESD"), fCollidingSystems(0),
210
211 // - Cascade part initialisation
212fListHistCascade(0),
213 fHistMCTrackMultiplicity(0),
214
215 fHistEtaGenProton(0),
216 fHistEtaGenAntiProton(0),
217
218 // Xi-
219 fHistEtaGenCascXiMinus(0),
220
221 fHistYGenCascMidRapXiMinus(0),
222 fHistEtaGenCascMidRapXiMinus(0),
223 fHistThetaGenCascMidRapXiMinus(0),
224 fHistPtGenCascMidRapXiMinus(0),
225
226 fHistThetaGenCascXiMinus(0),
227 fHistPtFdblGenCascXiMinus(0),
228
229 fHistThetaLambdaXiMinus(0),
230 fHistThetaBachXiMinus(0),
231
232 fHistThetaMesDghterXiMinus(0),
233 fHistThetaBarDghterXiMinus(0),
234
235 fHistPtBachXiMinus(0),
236 fHistPtMesDghterXiMinus(0),
237 fHistPtBarDghterXiMinus(0),
238
239
240 // Xi+
241 fHistEtaGenCascXiPlus(0),
242
243 fHistYGenCascMidRapXiPlus(0),
244 fHistEtaGenCascMidRapXiPlus(0),
245 fHistThetaGenCascMidRapXiPlus(0),
246 fHistPtGenCascMidRapXiPlus(0),
247
248 fHistThetaGenCascXiPlus(0),
249 fHistPtFdblGenCascXiPlus(0),
250
251 fHistThetaLambdaXiPlus(0),
252 fHistThetaBachXiPlus(0),
253
254 fHistThetaMesDghterXiPlus(0),
255 fHistThetaBarDghterXiPlus(0),
256
257 fHistPtBachXiPlus(0),
258 fHistPtMesDghterXiPlus(0),
259 fHistPtBarDghterXiPlus(0),
260
261 // Omega-
262 fHistEtaGenCascOmegaMinus(0),
263
264 fHistYGenCascMidRapOmegaMinus(0),
265 fHistEtaGenCascMidRapOmegaMinus(0),
266 fHistThetaGenCascMidRapOmegaMinus(0),
267 fHistPtGenCascMidRapOmegaMinus(0),
268
269 fHistThetaGenCascOmegaMinus(0),
270 fHistPtFdblGenCascOmegaMinus(0),
271
272 fHistThetaLambdaOmegaMinus(0),
273 fHistThetaBachOmegaMinus(0),
274
275 fHistThetaMesDghterOmegaMinus(0),
276 fHistThetaBarDghterOmegaMinus(0),
277
278 fHistPtBachOmegaMinus(0),
279 fHistPtMesDghterOmegaMinus(0),
280 fHistPtBarDghterOmegaMinus(0),
281
282
283 // Omega+
284 fHistEtaGenCascOmegaPlus(0),
285
286 fHistYGenCascMidRapOmegaPlus(0),
287 fHistEtaGenCascMidRapOmegaPlus(0),
288 fHistThetaGenCascMidRapOmegaPlus(0),
289 fHistPtGenCascMidRapOmegaPlus(0),
290
291 fHistThetaGenCascOmegaPlus(0),
292 fHistPtFdblGenCascOmegaPlus(0),
293
294 fHistThetaLambdaOmegaPlus(0),
295 fHistThetaBachOmegaPlus(0),
296
297 fHistThetaMesDghterOmegaPlus(0),
298 fHistThetaBarDghterOmegaPlus(0),
299
300 fHistPtBachOmegaPlus(0),
301 fHistPtMesDghterOmegaPlus(0),
302 fHistPtBarDghterOmegaPlus(0),
303
304// Part 2 - Association to MC
305
306 fHistMassXiMinus(0),
307 fHistMassXiPlus(0),
308 fHistMassOmegaMinus(0),
309 fHistMassOmegaPlus(0),
310
311 // - Effective mass histos for the cascade candidates associated with MC
312 fHistAsMCMassXiMinus(0),
313 fHistAsMCMassXiPlus(0),
314 fHistAsMCMassOmegaMinus(0),
315 fHistAsMCMassOmegaPlus(0),
316
317 // - Generated Pt of the the cascade candidates associated with MC
318 fHistAsMCGenPtXiMinus(0),
319 fHistAsMCGenPtXiPlus(0),
320 fHistAsMCGenPtOmegaMinus(0),
321 fHistAsMCGenPtOmegaPlus(0),
322
323 // - Generated Y of the the cascade candidates associated with MC
324 fHistAsMCGenYXiMinus(0),
325 fHistAsMCGenYXiPlus(0),
326 fHistAsMCGenYOmegaMinus(0),
327 fHistAsMCGenYOmegaPlus(0),
328
329 // - Generated Y Vs Generated Pt, for the cascade candidates associated with MC
330 f2dHistAsMCGenYVsGenPtXiMinus(0),
331 f2dHistAsMCGenYVsGenPtXiPlus(0),
332 f2dHistAsMCGenYVsGenPtOmegaMinus(0),
333 f2dHistAsMCGenYVsGenPtOmegaPlus(0),
334
335 // - Generated Eta of the the cascade candidates associated with MC
336 fHistAsMCGenEtaXiMinus(0),
337 fHistAsMCGenEtaXiPlus(0),
338 fHistAsMCGenEtaOmegaMinus(0),
339 fHistAsMCGenEtaOmegaPlus(0),
340
341 // - Resolution in Pt as function of generated Pt
342 f2dHistAsMCResPtXiMinus(0),
343 f2dHistAsMCResPtXiPlus(0),
344 f2dHistAsMCResPtOmegaMinus(0),
345 f2dHistAsMCResPtOmegaPlus(0),
346
347 // - Resolution in R(2D) as function of generated R
348 f2dHistAsMCResRXiMinus(0),
349 f2dHistAsMCResRXiPlus(0),
350 f2dHistAsMCResROmegaMinus(0),
351 f2dHistAsMCResROmegaPlus(0)
352
353
354
355
356
357
358{
359 // Constructor
360
361 // Define input and output slots here
362 // Input slot #0 works with a TChain
363 //DefineInput(0, TChain::Class());
364 // Output slot #0 writes into a TList container (cascade)
365 DefineOutput(1, TList::Class());
366
367}
368
369
370
371
372
373//________________________________________________________________________
374void AliAnalysisTaskCheckPerformanceCascade::UserCreateOutputObjects()
375{
376 // Create histograms
377 // Called once
378
379
380 // Option for AliLog
381 AliLog::SetGlobalLogLevel(AliLog::kError);
382 // to suppress the extensive info prompted by a run with MC
383
384
385
386 // Definition of the datamembers
387 fListHistCascade = new TList();
388
389
390 // - General
391
392 if (!fHistMCTrackMultiplicity) {
393 fHistMCTrackMultiplicity = new TH1F("fHistMCTrackMultiplicity", "MC Track Multiplicity;Number of MC tracks;Events", 100, 0, 500);
394 // fHistMCTrackMultiplicity = new TH1F("fHistMCTrackMultiplicity", "Multiplicity distribution;Number of tracks;Events", 200, 0, 40000); //HERE
395 fListHistCascade->Add(fHistMCTrackMultiplicity);
396 }
397
398 if (!fHistEtaGenProton) {
399 fHistEtaGenProton = new TH1F("fHistEtaGenProton", "#eta of any gen. p^{+};#eta;Number of prim. protons", 200, -10, 10);
400 fListHistCascade->Add(fHistEtaGenProton);
401 }
402
403 if (!fHistEtaGenAntiProton) {
404 fHistEtaGenAntiProton = new TH1F("fHistEtaGenAntiProton", "#eta of any gen. #bar{p}^{-};#eta;Number of prim. #bar{p}", 200, -10, 10);
405 fListHistCascade->Add(fHistEtaGenAntiProton);
406 }
407
408
409
410
411
412
413
414 //--------
415 // I - Xi-
416 // - Pseudo-Rapidity distribution
417 if (!fHistEtaGenCascXiMinus) {
418 fHistEtaGenCascXiMinus = new TH1F("fHistEtaGenCascXiMinus", "#eta of any gen. #Xi^{-};#eta;Number of Casc", 200, -10, 10);
419 fListHistCascade->Add(fHistEtaGenCascXiMinus);
420 }
421
422 // - Plots for |y(MC)| < 1
423 if (!fHistYGenCascMidRapXiMinus) {
424 fHistYGenCascMidRapXiMinus = new TH1F("fHistYGenCascMidRapXiMinus", "Y of #Xi^{-} generated at mid rapidity;Y;Number of Casc", 240, -1.2, 1.2);
425 fListHistCascade->Add(fHistYGenCascMidRapXiMinus );
426 }
427
428 if (!fHistEtaGenCascMidRapXiMinus) {
429 fHistEtaGenCascMidRapXiMinus = new TH1F("fHistEtaGenCascMidRapXiMinus", "#eta of #Xi^{-} generated at mid rapidity;#eta;Number of Casc", 100, -5, 5);
430 fListHistCascade->Add(fHistEtaGenCascMidRapXiMinus );
431 }
432
433 if (!fHistThetaGenCascMidRapXiMinus) {
434 fHistThetaGenCascMidRapXiMinus = new TH1F("fHistThetaGenCascMidRapXiMinus", "#theta of #Xi^{-} generated at mid rapidity;#theta (deg);Number of Casc", 200, -10, 190);
435 fListHistCascade->Add(fHistThetaGenCascMidRapXiMinus );
436 }
437
438 if (!fHistPtGenCascMidRapXiMinus) {
439 fHistPtGenCascMidRapXiMinus = new TH1F("fHistPtGenCascMidRapXiMinus", "P_{t} of #Xi^{-} generated at mid rapidity;P_{t} (GeV/c);Number of Casc", 200, 0., 10.);
440 fListHistCascade->Add(fHistPtGenCascMidRapXiMinus );
441 }
442
443
444 // - Info at the generation level of multi-strange particle
445
446 if (!fHistThetaGenCascXiMinus) {
447 fHistThetaGenCascXiMinus = new TH1F("fHistThetaGenCascXiMinus", "#theta of gen. #Xi^{-};#theta;Number of Casc.", 200, -10, 190);
448 fListHistCascade->Add(fHistThetaGenCascXiMinus);
449 }
450
451 if (!fHistPtFdblGenCascXiMinus) {
452 fHistPtFdblGenCascXiMinus = new TH1F("fHistPtFdblGenCascXiMinus","P_{t} of findable generated #Xi^{-};P_{t} (GeV/c);Number of Casc", 200, 0, 10);
453 fListHistCascade->Add(fHistPtFdblGenCascXiMinus );
454 }
455
456 // - Theta distribution the daughters (control plots)
457
458 if (!fHistThetaLambdaXiMinus) {
459 fHistThetaLambdaXiMinus = new TH1F("fHistThetaLambdaXiMinus", "#theta of gen. #Lambda (Xi dghter);#theta_{#Lambda};Number of #Lambda^0", 200, -10, 190);
460 fListHistCascade->Add(fHistThetaLambdaXiMinus);
461 }
462
463 if (!fHistThetaBachXiMinus) {
464 fHistThetaBachXiMinus = new TH1F("fHistThetaBachXiMinus", "#theta of gen. Bach.;#theta_{Bach};Number of Bach.", 200, -10, 190);
465 fListHistCascade->Add(fHistThetaBachXiMinus);
466 }
467
468 if (!fHistThetaMesDghterXiMinus) {
469 fHistThetaMesDghterXiMinus = new TH1F("fHistThetaMesDghterXiMinus", "#theta of gen. Meson #Lambda dghter;#theta_{MesDght};Number of Mes.", 200, -10, 190);
470 fListHistCascade->Add(fHistThetaMesDghterXiMinus);
471 }
472
473 if (!fHistThetaBarDghterXiMinus) {
474 fHistThetaBarDghterXiMinus = new TH1F("fHistThetaBarDghterXiMinus", "#theta of gen. Baryon #Lambda dghter;#theta_{BarDght};Number of Bar.", 200, -10, 190);
475 fListHistCascade->Add(fHistThetaBarDghterXiMinus);
476 }
477
478 // - Pt distribution (control plots)
479
480 if (!fHistPtBachXiMinus) {
481 fHistPtBachXiMinus = new TH1F("fHistPtBachXiMinus", "p_{t} of gen. Bach.;pt_{Bach};Number of Bach.", 200, 0, 10);
482 fListHistCascade->Add(fHistPtBachXiMinus);
483 }
484
485 if (!fHistPtMesDghterXiMinus) {
486 fHistPtMesDghterXiMinus = new TH1F("fHistPtMesDghterXiMinus", "p_{t} of gen. Meson #Lambda dghter;pt_{MesDght};Number of Mes.", 200, 0, 10);
487 fListHistCascade->Add(fHistPtMesDghterXiMinus);
488 }
489
490 if (!fHistPtBarDghterXiMinus) {
491 fHistPtBarDghterXiMinus = new TH1F("fHistPtBarDghterXiMinus", "p_{t} of gen. Baryon #Lambda dghter;pt_{BarDght};Number of Bar.", 200, 0, 10);
492 fListHistCascade->Add(fHistPtBarDghterXiMinus);
493 }
494
495
496
497 //--------
498 // II - Xi+
499 // - Pseudo-Rapidity distribution
500 if (!fHistEtaGenCascXiPlus) {
501 fHistEtaGenCascXiPlus = new TH1F("fHistEtaGenCascXiPlus", "#eta of any gen. #Xi^{+};#eta;Number of Casc", 200, -10, 10);
502 fListHistCascade->Add(fHistEtaGenCascXiPlus);
503 }
504
505 // - Plots for |y(MC)| < 1
506 if (!fHistYGenCascMidRapXiPlus) {
507 fHistYGenCascMidRapXiPlus = new TH1F("fHistYGenCascMidRapXiPlus", "Y of #Xi^{+} generated at mid rapidity;Y;Number of Casc", 240, -1.2, 1.2);
508 fListHistCascade->Add(fHistYGenCascMidRapXiPlus );
509 }
510
511 if (!fHistEtaGenCascMidRapXiPlus) {
512 fHistEtaGenCascMidRapXiPlus = new TH1F("fHistEtaGenCascMidRapXiPlus", "#eta of #Xi^{+} generated at mid rapidity;#eta;Number of Casc", 100, -5, 5);
513 fListHistCascade->Add(fHistEtaGenCascMidRapXiPlus );
514 }
515
516 if (!fHistThetaGenCascMidRapXiPlus) {
517 fHistThetaGenCascMidRapXiPlus = new TH1F("fHistThetaGenCascMidRapXiPlus", "#theta of #Xi^{+} generated at mid rapidity;#theta (deg);Number of Casc", 200, -10, 190);
518 fListHistCascade->Add(fHistThetaGenCascMidRapXiPlus );
519 }
520
521 if (!fHistPtGenCascMidRapXiPlus) {
522 fHistPtGenCascMidRapXiPlus = new TH1F("fHistPtGenCascMidRapXiPlus", "P_{t} of #Xi^{+} generated at mid rapidity;P_{t} (GeV/c);Number of Casc", 200, 0., 10.);
523 fListHistCascade->Add(fHistPtGenCascMidRapXiPlus );
524 }
525
526
527 // - Info at the generation level of multi-strange particle
528
529 if (!fHistThetaGenCascXiPlus) {
530 fHistThetaGenCascXiPlus = new TH1F("fHistThetaGenCascXiPlus", "#theta of gen. #Xi^{+};#theta;Number of Casc.", 200, -10, 190);
531 fListHistCascade->Add(fHistThetaGenCascXiPlus);
532 }
533
534 if (!fHistPtFdblGenCascXiPlus) {
535 fHistPtFdblGenCascXiPlus = new TH1F("fHistPtFdblGenCascXiPlus","P_{t} of findable generated #Xi^{+};P_{t} (GeV/c);Number of Casc", 200, 0, 10);
536 fListHistCascade->Add(fHistPtFdblGenCascXiPlus );
537 }
538
539 // - Theta distribution the daughters (control plots)
540
541 if (!fHistThetaLambdaXiPlus) {
542 fHistThetaLambdaXiPlus = new TH1F("fHistThetaLambdaXiPlus", "#theta of gen. #Lambda (Xi dghter);#theta_{#Lambda};Number of #Lambda", 200, -10, 190);
543 fListHistCascade->Add(fHistThetaLambdaXiPlus);
544 }
545
546 if (!fHistThetaBachXiPlus) {
547 fHistThetaBachXiPlus = new TH1F("fHistThetaBachXiPlus", "#theta of gen. Bach.;#theta_{Bach};Number of Bach.", 200, -10, 190);
548 fListHistCascade->Add(fHistThetaBachXiPlus);
549 }
550
551 if (!fHistThetaMesDghterXiPlus) {
552 fHistThetaMesDghterXiPlus = new TH1F("fHistThetaMesDghterXiPlus", "#theta of gen. Meson #Lambda dghter;#theta_{MesDght};Number of Mes.", 200, -10, 190);
553 fListHistCascade->Add(fHistThetaMesDghterXiPlus);
554 }
555
556 if (!fHistThetaBarDghterXiPlus) {
557 fHistThetaBarDghterXiPlus = new TH1F("fHistThetaBarDghterXiPlus", "#theta of gen. Baryon #Lambda dghter;#theta_{BarDght};Number of Bar.", 200, -10, 190);
558 fListHistCascade->Add(fHistThetaBarDghterXiPlus);
559 }
560
561 // - Pt distribution (control plots)
562
563 if (!fHistPtBachXiPlus) {
564 fHistPtBachXiPlus = new TH1F("fHistPtBachXiPlus", "p_{t} of gen. Bach.;pt_{Bach};Number of Bach.", 200, 0, 10);
565 fListHistCascade->Add(fHistPtBachXiPlus);
566 }
567
568 if (!fHistPtMesDghterXiPlus) {
569 fHistPtMesDghterXiPlus = new TH1F("fHistPtMesDghterXiPlus", "p_{t} of gen. Meson #Lambda dghter);pt_{MesDght};Number of Mes.", 200, 0, 10);
570 fListHistCascade->Add(fHistPtMesDghterXiPlus);
571 }
572
573 if (!fHistPtBarDghterXiPlus) {
574 fHistPtBarDghterXiPlus = new TH1F("fHistPtBarDghterXiPlus", "p_{t} of gen. Baryon #Lambda dghter);pt_{BarDght};Number of Bar.", 200, 0, 10);
575 fListHistCascade->Add(fHistPtBarDghterXiPlus);
576 }
577
578
579 //---------
580 // III - Omega-
581 // - Pseudo-Rapidity distribution
582 if (!fHistEtaGenCascOmegaMinus) {
583 fHistEtaGenCascOmegaMinus = new TH1F("fHistEtaGenCascOmegaMinus", "#eta of any gen. #Omega^{-};#eta;Number of Casc", 200, -10, 10);
584 fListHistCascade->Add(fHistEtaGenCascOmegaMinus);
585 }
586
587 // - Plots for |y(MC)| < 1
588 if (!fHistYGenCascMidRapOmegaMinus) {
589 fHistYGenCascMidRapOmegaMinus = new TH1F("fHistYGenCascMidRapOmegaMinus", "Y of #Omega^{-} generated at mid rapidity;Y;Number of Casc", 240, -1.2, 1.2);
590 fListHistCascade->Add(fHistYGenCascMidRapOmegaMinus );
591 }
592
593 if (!fHistEtaGenCascMidRapOmegaMinus) {
594 fHistEtaGenCascMidRapOmegaMinus = new TH1F("fHistEtaGenCascMidRapOmegaMinus", "#eta of #Omega^{-} generated at mid rapidity;#eta;Number of Casc", 100, -5, 5);
595 fListHistCascade->Add(fHistEtaGenCascMidRapOmegaMinus );
596 }
597
598 if (!fHistThetaGenCascMidRapOmegaMinus) {
599 fHistThetaGenCascMidRapOmegaMinus = new TH1F("fHistThetaGenCascMidRapOmegaMinus", "#theta of #Omega^{-} generated at mid rapidity;#theta (deg);Number of Casc", 200, -10, 190);
600 fListHistCascade->Add(fHistThetaGenCascMidRapOmegaMinus );
601 }
602
603 if (!fHistPtGenCascMidRapOmegaMinus) {
604 fHistPtGenCascMidRapOmegaMinus = new TH1F("fHistPtGenCascMidRapOmegaMinus", "P_{t} of #Omega^{-} generated at mid rapidity;P_{t} (GeV/c);Number of Casc", 200, 0., 10.);
605 fListHistCascade->Add(fHistPtGenCascMidRapOmegaMinus );
606 }
607
608
609
610 // - Info at the generation level of multi-strange particle
611
612 if (!fHistThetaGenCascOmegaMinus) {
613 fHistThetaGenCascOmegaMinus = new TH1F("fHistThetaGenCascOmegaMinus", "#theta of gen. #Omega^{-};#theta;Number of Casc.", 200, -10, 190);
614 fListHistCascade->Add(fHistThetaGenCascOmegaMinus);
615 }
616
617 if (!fHistPtFdblGenCascOmegaMinus) {
618 fHistPtFdblGenCascOmegaMinus = new TH1F("fHistPtFdblGenCascOmegaMinus","P_{t} of findable generated #Omega^{-};P_{t} (GeV/c);Number of Casc", 200, 0, 10);
619 fListHistCascade->Add(fHistPtFdblGenCascOmegaMinus );
620 }
621
622 // - Theta distribution the daughters (control plots)
623
624 if (!fHistThetaLambdaOmegaMinus) {
625 fHistThetaLambdaOmegaMinus = new TH1F("fHistThetaLambdaOmegaMinus", "#theta of gen. #Lambda (Omega dghter);#theta_{#Lambda};Number of #Lambda", 200, -10, 190);
626 fListHistCascade->Add(fHistThetaLambdaOmegaMinus);
627 }
628
629 if (!fHistThetaBachOmegaMinus) {
630 fHistThetaBachOmegaMinus = new TH1F("fHistThetaBachOmegaMinus", "#theta of gen. Bach.;#theta_{Bach};Number of Bach.", 200, -10, 190);
631 fListHistCascade->Add(fHistThetaBachOmegaMinus);
632 }
633
634 if (!fHistThetaMesDghterOmegaMinus) {
635 fHistThetaMesDghterOmegaMinus = new TH1F("fHistThetaMesDghterOmegaMinus", "#theta of gen. Meson #Lambda dghter;#theta_{MesDght};Number of Mes.", 200, -10, 190);
636 fListHistCascade->Add(fHistThetaMesDghterOmegaMinus);
637 }
638
639 if (!fHistThetaBarDghterOmegaMinus) {
640 fHistThetaBarDghterOmegaMinus = new TH1F("fHistThetaBarDghterOmegaMinus", "#theta of gen. Baryon #Lambda dghter;#theta_{BarDght};Number of Bar.", 200, -10, 190);
641 fListHistCascade->Add(fHistThetaBarDghterOmegaMinus);
642 }
643
644 // - Pt distribution (control plots)
645
646 if (!fHistPtBachOmegaMinus) {
647 fHistPtBachOmegaMinus = new TH1F("fHistPtBachOmegaMinus", "p_{t} of gen. Bach.;pt_{Bach};Number of Bach.", 200, 0, 10);
648 fListHistCascade->Add(fHistPtBachOmegaMinus);
649 }
650
651 if (!fHistPtMesDghterOmegaMinus) {
652 fHistPtMesDghterOmegaMinus = new TH1F("fHistPtMesDghterOmegaMinus", "p_{t} of gen. Meson #Lambda dghter);pt_{MesDght};Number of Mes.", 200, 0, 10);
653 fListHistCascade->Add(fHistPtMesDghterOmegaMinus);
654 }
655
656 if (!fHistPtBarDghterOmegaMinus) {
657 fHistPtBarDghterOmegaMinus = new TH1F("fHistPtBarDghterOmegaMinus", "p_{t} of gen. Baryon #Lambda dghter);pt_{BarDght};Number of Bar.", 200, 0, 10);
658 fListHistCascade->Add(fHistPtBarDghterOmegaMinus);
659 }
660
661
662 //---------
663 // IV - Omega+
664 // - Pseudo-Rapidity distribution
665 if (!fHistEtaGenCascOmegaPlus) {
666 fHistEtaGenCascOmegaPlus = new TH1F("fHistEtaGenCascOmegaPlus", "#eta of any gen. #Omega^{+};#eta;Number of Casc", 200, -10, 10);
667 fListHistCascade->Add(fHistEtaGenCascOmegaPlus);
668 }
669
670 // - Plots for |y(MC)| < 1
671 if (!fHistYGenCascMidRapOmegaPlus) {
672 fHistYGenCascMidRapOmegaPlus = new TH1F("fHistYGenCascMidRapOmegaPlus", "Y of #Omega^{+} generated at mid rapidity;Y;Number of Casc", 240, -1.2, 1.2);
673 fListHistCascade->Add(fHistYGenCascMidRapOmegaPlus );
674 }
675
676 if (!fHistEtaGenCascMidRapOmegaPlus) {
677 fHistEtaGenCascMidRapOmegaPlus = new TH1F("fHistEtaGenCascMidRapOmegaPlus", "#eta of #Omega^{+} generated at mid rapidity;#eta;Number of Casc", 100, -5, 5);
678 fListHistCascade->Add(fHistEtaGenCascMidRapOmegaPlus );
679 }
680
681 if (!fHistThetaGenCascMidRapOmegaPlus) {
682 fHistThetaGenCascMidRapOmegaPlus = new TH1F("fHistThetaGenCascMidRapOmegaPlus", "#theta of #Omega^{+} generated at mid rapidity;#theta (deg);Number of Casc", 200, -10, 190);
683 fListHistCascade->Add(fHistThetaGenCascMidRapOmegaPlus );
684 }
685
686 if (!fHistPtGenCascMidRapOmegaPlus) {
687 fHistPtGenCascMidRapOmegaPlus = new TH1F("fHistPtGenCascMidRapOmegaPlus", "P_{t} of #Omega^{+} generated at mid rapidity;P_{t} (GeV/c);Number of Casc", 200, 0., 10.);
688 fListHistCascade->Add(fHistPtGenCascMidRapOmegaPlus );
689 }
690
691
692
693 // - Info at the generation level of multi-strange particle
694
695 if (!fHistThetaGenCascOmegaPlus) {
696 fHistThetaGenCascOmegaPlus = new TH1F("fHistThetaGenCascOmegaPlus", "#theta of gen. #Omega^{+};#theta;Number of Casc.", 200, -10, 190);
697 fListHistCascade->Add(fHistThetaGenCascOmegaPlus);
698 }
699
700 if (!fHistPtFdblGenCascOmegaPlus) {
701 fHistPtFdblGenCascOmegaPlus = new TH1F("fHistPtFdblGenCascOmegaPlus","P_{t} of findable generated #Omega^{+};P_{t} (GeV/c);Number of Casc", 200, 0, 10);
702 fListHistCascade->Add(fHistPtFdblGenCascOmegaPlus );
703 }
704
705 // - Theta distribution the daughters (control plots)
706
707 if (!fHistThetaLambdaOmegaPlus) {
708 fHistThetaLambdaOmegaPlus = new TH1F("fHistThetaLambdaOmegaPlus", "#theta of gen. #Lambda (Omega dghter);#theta_{#Lambda};Number of #Lambda", 200, -10, 190);
709 fListHistCascade->Add(fHistThetaLambdaOmegaPlus);
710 }
711
712 if (!fHistThetaBachOmegaPlus) {
713 fHistThetaBachOmegaPlus = new TH1F("fHistThetaBachOmegaPlus", "#theta of gen. Bach.;#theta_{Bach};Number of Bach.", 200, -10, 190);
714 fListHistCascade->Add(fHistThetaBachOmegaPlus);
715 }
716
717 if (!fHistThetaMesDghterOmegaPlus) {
718 fHistThetaMesDghterOmegaPlus = new TH1F("fHistThetaMesDghterOmegaPlus", "#theta of gen. Meson #Lambda dghter;#theta_{MesDght};Number of Mes.", 200, -10, 190);
719 fListHistCascade->Add(fHistThetaMesDghterOmegaPlus);
720 }
721
722 if (!fHistThetaBarDghterOmegaPlus) {
723 fHistThetaBarDghterOmegaPlus = new TH1F("fHistThetaBarDghterOmegaPlus", "#theta of gen. Baryon #Lambda dghter;#theta_{BarDght};Number of Bar.", 200, -10, 190);
724 fListHistCascade->Add(fHistThetaBarDghterOmegaPlus);
725 }
726
727 // - Pt distribution (control plots)
728
729 if (!fHistPtBachOmegaPlus) {
730 fHistPtBachOmegaPlus = new TH1F("fHistPtBachOmegaPlus", "p_{t} of gen. Bach.;pt_{Bach};Number of Bach.", 200, 0, 10);
731 fListHistCascade->Add(fHistPtBachOmegaPlus);
732 }
733
734 if (!fHistPtMesDghterOmegaPlus) {
735 fHistPtMesDghterOmegaPlus = new TH1F("fHistPtMesDghterOmegaPlus", "p_{t} of gen. Meson #Lambda dghter);pt_{MesDght};Number of Mes.", 200, 0, 10);
736 fListHistCascade->Add(fHistPtMesDghterOmegaPlus);
737 }
738
739 if (!fHistPtBarDghterOmegaPlus) {
740 fHistPtBarDghterOmegaPlus = new TH1F("fHistPtBarDghterOmegaPlus", "p_{t} of gen. Baryon #Lambda dghter);pt_{BarDght};Number of Bar.", 200, 0, 10);
741 fListHistCascade->Add(fHistPtBarDghterOmegaPlus);
742 }
743
744
745
746// Part 2 - Any reconstructed cascades + reconstructed cascades associated with MC
747
748 // - Effective mass histos for cascades candidates.
749
750 if (! fHistMassXiMinus) {
751 fHistMassXiMinus = new TH1F("fHistMassXiMinus","#Xi^{-} candidates;M( #Lambda , #pi^{-} ) (GeV/c^{2});Counts", 200,1.2,2.0);
752 fListHistCascade->Add(fHistMassXiMinus);
753 }
754
755 if (! fHistMassXiPlus) {
756 fHistMassXiPlus = new TH1F("fHistMassXiPlus","#Xi^{+} candidates;M( #bar{#Lambda}^{0} , #pi^{+} ) (GeV/c^{2});Counts",200,1.2,2.0);
757 fListHistCascade->Add(fHistMassXiPlus);
758 }
759
760 if (! fHistMassOmegaMinus) {
761 fHistMassOmegaMinus = new TH1F("fHistMassOmegaMinus","#Omega^{-} candidates;M( #Lambda , K^{-} ) (GeV/c^{2});Counts", 250,1.5,2.5);
762 fListHistCascade->Add(fHistMassOmegaMinus);
763 }
764
765 if (! fHistMassOmegaPlus) {
766 fHistMassOmegaPlus = new TH1F("fHistMassOmegaPlus","#Omega^{+} candidates;M( #bar{#Lambda}^{0} , K^{+} ) (GeV/c^{2});Counts", 250,1.5,2.5);
767 fListHistCascade->Add(fHistMassOmegaPlus);
768 }
769
770 // - Effective mass histos for cascades candidates ASSOCIATED with MC.
771
772 if (! fHistAsMCMassXiMinus) {
773 fHistAsMCMassXiMinus = new TH1F("fHistAsMCMassXiMinus","#Xi^{-} candidates associated to MC;M( #Lambda , #pi^{-} ) (GeV/c^{2});Counts", 200,1.2,2.0);
774 fListHistCascade->Add(fHistAsMCMassXiMinus);
775 }
776
777 if (! fHistAsMCMassXiPlus) {
778 fHistAsMCMassXiPlus = new TH1F("fHistAsMCMassXiPlus","#Xi^{+} candidates associated to MC;M( #bar{#Lambda}^{0} , #pi^{+} ) (GeV/c^{2});Counts",200,1.2,2.0);
779 fListHistCascade->Add(fHistAsMCMassXiPlus);
780 }
781
782 if (! fHistAsMCMassOmegaMinus) {
783 fHistAsMCMassOmegaMinus = new TH1F("fHistAsMCMassOmegaMinus","#Omega^{-} candidates associated to MC;M( #Lambda , K^{-} ) (GeV/c^{2});Counts", 250,1.5,2.5);
784 fListHistCascade->Add(fHistAsMCMassOmegaMinus);
785 }
786
787 if (! fHistAsMCMassOmegaPlus) {
788 fHistAsMCMassOmegaPlus = new TH1F("fHistAsMCMassOmegaPlus","#Omega^{+} candidates associated to MC;M( #bar{#Lambda}^{0} , K^{+} ) (GeV/c^{2});Counts", 250,1.5,2.5);
789 fListHistCascade->Add(fHistAsMCMassOmegaPlus);
790 }
791
792
793 // - Generated Pt of the the cascade candidates associated with MC
794
795 if (!fHistAsMCGenPtXiMinus) {
796 fHistAsMCGenPtXiMinus = new TH1F("fHistAsMCGenPtXiMinus", "P_{t} of gen. #Xi^{-} (associated);P_{t} (GeV/c);Number of Casc", 200, 0., 10.);
797 fListHistCascade->Add(fHistAsMCGenPtXiMinus );
798 }
799
800 if (!fHistAsMCGenPtXiPlus) {
801 fHistAsMCGenPtXiPlus = new TH1F("fHistAsMCGenPtXiPlus", "P_{t} of gen. #Xi^{+} (associated);P_{t} (GeV/c);Number of Casc", 200, 0., 10.);
802 fListHistCascade->Add(fHistAsMCGenPtXiPlus );
803 }
804
805 if (!fHistAsMCGenPtOmegaMinus) {
806 fHistAsMCGenPtOmegaMinus = new TH1F("fHistAsMCGenPtOmegaMinus", "P_{t} of gen. #Omega^{-} (associated);P_{t} (GeV/c);Number of Casc", 200, 0., 10.);
807 fListHistCascade->Add(fHistAsMCGenPtOmegaMinus );
808 }
809
810 if (!fHistAsMCGenPtOmegaPlus) {
811 fHistAsMCGenPtOmegaPlus = new TH1F("fHistAsMCGenPtOmegaPlus", "P_{t} of gen. #Omega^{+} (associated);P_{t} (GeV/c);Number of Casc", 200, 0., 10.);
812 fListHistCascade->Add(fHistAsMCGenPtOmegaPlus );
813 }
814
815
816 // - Generated Y of the the cascade candidates associated with MC
817
818 if (!fHistAsMCGenYXiMinus) {
819 fHistAsMCGenYXiMinus = new TH1F("fHistAsMCGenYXiMinus", "Rapidity, Y of gen. #Xi^{-} (associated);Rapidity, Y;Number of Casc", 240, -1.2, 1.2);
820 fListHistCascade->Add(fHistAsMCGenYXiMinus );
821 }
822
823 if (!fHistAsMCGenYXiPlus) {
824 fHistAsMCGenYXiPlus = new TH1F("fHistAsMCGenYXiPlus", "Rapidity, Y of gen. #Xi^{+} (associated);Rapidity, Y;Number of Casc", 240, -1.2, 1.2);
825 fListHistCascade->Add(fHistAsMCGenYXiPlus );
826 }
827
828 if (!fHistAsMCGenYOmegaMinus) {
829 fHistAsMCGenYOmegaMinus = new TH1F("fHistAsMCGenYOmegaMinus", "Rapidity, Y of gen. #Omega^{-} (associated);Rapidity, Y;Number of Casc", 240, -1.2, 1.2);
830 fListHistCascade->Add(fHistAsMCGenYOmegaMinus );
831 }
832
833 if (!fHistAsMCGenYOmegaPlus) {
834 fHistAsMCGenYOmegaPlus = new TH1F("fHistAsMCGenYOmegaPlus", "Rapidity, Y of gen. #Omega^{+} (associated);Rapidity, Y;Number of Casc", 240, -1.2, 1.2);
835 fListHistCascade->Add(fHistAsMCGenYOmegaPlus );
836 }
837
838 // - Generated Y Vs Generated Pt, for the cascade candidates associated with MC
839
840 if (!f2dHistAsMCGenYVsGenPtXiMinus) {
841 f2dHistAsMCGenYVsGenPtXiMinus = new TH2F("f2dHistAsMCGenYVsGenPtXiMinus", "Y Vs P_{t} of gen. #Xi^{-} (associated);Rapidity, Y;P_{t} (GeV/c)",240, -1.2, 1.2, 200, 0., 10.);
842 fListHistCascade->Add(f2dHistAsMCGenYVsGenPtXiMinus );
843 }
844
845 if (!f2dHistAsMCGenYVsGenPtXiPlus) {
846 f2dHistAsMCGenYVsGenPtXiPlus = new TH2F("f2dHistAsMCGenYVsGenPtXiPlus", "Y Vs P_{t} of gen. #Xi^{+} (associated);Rapidity, Y;P_{t} (GeV/c)",240, -1.2, 1.2, 200, 0., 10.);
847 fListHistCascade->Add(f2dHistAsMCGenYVsGenPtXiPlus );
848 }
849
850 if (!f2dHistAsMCGenYVsGenPtOmegaMinus) {
851 f2dHistAsMCGenYVsGenPtOmegaMinus = new TH2F("f2dHistAsMCGenYVsGenPtOmegaMinus", "Y Vs P_{t} of gen. #Omega^{-} (associated);Rapidity, Y;P_{t} (GeV/c)",240, -1.2, 1.2, 200, 0., 10.);
852 fListHistCascade->Add(f2dHistAsMCGenYVsGenPtOmegaMinus );
853 }
854
855 if (!f2dHistAsMCGenYVsGenPtOmegaPlus) {
856 f2dHistAsMCGenYVsGenPtOmegaPlus = new TH2F("f2dHistAsMCGenYVsGenPtOmegaPlus", "Y Vs P_{t} of gen. #Omega^{+} (associated);Rapidity, Y;P_{t} (GeV/c)",240, -1.2, 1.2, 200, 0., 10.);
857 fListHistCascade->Add(f2dHistAsMCGenYVsGenPtOmegaPlus );
858 }
859
860
861 // - Generated Eta of the the cascade candidates associated with MC
862 if (!fHistAsMCGenEtaXiMinus) {
863 fHistAsMCGenEtaXiMinus = new TH1F("fHistAsMCGenEtaXiMinus", "#eta of gen. #Xi^{-} (associated);#eta;Number of Casc", 100, -5, 5);
864 fListHistCascade->Add( fHistAsMCGenEtaXiMinus );
865 }
866
867 if (!fHistAsMCGenEtaXiPlus) {
868 fHistAsMCGenEtaXiPlus = new TH1F("fHistAsMCGenEtaXiPlus", "#eta of gen. #Xi^{+} (associated);#eta;Number of Casc", 100, -5, 5);
869 fListHistCascade->Add( fHistAsMCGenEtaXiPlus );
870 }
871
872 if (!fHistAsMCGenEtaOmegaMinus) {
873 fHistAsMCGenEtaOmegaMinus = new TH1F("fHistAsMCGenEtaOmegaMinus", "#eta of gen. #Omega^{-} (associated);#eta;Number of Casc", 100, -5, 5);
874 fListHistCascade->Add( fHistAsMCGenEtaOmegaMinus );
875 }
876
877 if (!fHistAsMCGenEtaOmegaPlus) {
878 fHistAsMCGenEtaOmegaPlus = new TH1F("fHistAsMCGenEtaOmegaPlus", "#eta of gen. #Omega^{+} (associated);#eta;Number of Casc", 100, -5, 5);
879 fListHistCascade->Add( fHistAsMCGenEtaOmegaPlus );
880 }
881
882
883
884 // - Resolution in Pt as function of generated Pt
885
886 if(! f2dHistAsMCResPtXiMinus) {
887 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);
888 fListHistCascade->Add(f2dHistAsMCResPtXiMinus);
889 }
890
891 if(! f2dHistAsMCResPtXiPlus) {
892 f2dHistAsMCResPtXiPlus = new TH2F( "f2dHistAsMCResPtXiPlus", "Resolution in Pt reconstruction for #Xi^{+}; Pt_{MC} (GeV/c); (Pt_{reco} - Pt_{MC}) / Pt_{MC} (%)", 200, 0., 10., 200, -0.1, 0.1);
893 fListHistCascade->Add(f2dHistAsMCResPtXiPlus);
894 }
895
896 if(! f2dHistAsMCResPtOmegaMinus) {
897 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);
898 fListHistCascade->Add(f2dHistAsMCResPtOmegaMinus);
899 }
900
901 if(! f2dHistAsMCResPtOmegaPlus) {
902 f2dHistAsMCResPtOmegaPlus = new TH2F( "f2dHistAsMCResPtOmegaPlus", "Resolution in Pt reconstruction for #Omega^{+}; Pt_{MC} (GeV/c); (Pt_{reco} - Pt_{MC}) / Pt_{MC} (%)", 200, 0., 10., 200, -0.1, 0.1);
903 fListHistCascade->Add(f2dHistAsMCResPtOmegaPlus);
904 }
905
906 // - Resolution in R(2D) as function of generated R
907
908 if(! f2dHistAsMCResRXiMinus) {
909 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);
910 fListHistCascade->Add(f2dHistAsMCResRXiMinus);
911 }
912
913 if(! f2dHistAsMCResRXiPlus) {
914 f2dHistAsMCResRXiPlus = new TH2F( "f2dHistAsMCResRXiPlus", "Resolution in transv. position for #Xi^{+}; R_{MC} (cm); (R_{reco} - R_{MC}) / R_{MC} (%)", 450, 0., 45.0, 240, -0.3, 0.3);
915 fListHistCascade->Add(f2dHistAsMCResRXiPlus);
916 }
917
918 if(! f2dHistAsMCResROmegaMinus) {
919 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);
920 fListHistCascade->Add(f2dHistAsMCResROmegaMinus);
921 }
922
923 if(! f2dHistAsMCResROmegaPlus) {
924 f2dHistAsMCResROmegaPlus = new TH2F( "f2dHistAsMCResROmegaPlus", "Resolution in transv. position for #Omega^{+}; R_{MC} (cm); (R_{reco} - R_{MC}) / R_{MC} (%)", 450, 0., 45.0, 240, -0.3, 0.3);
925 fListHistCascade->Add(f2dHistAsMCResROmegaPlus);
926 }
927
928
929}// end CreateOutputObjects
930
931
932
933
934
935
936//________________________________________________________________________
937void AliAnalysisTaskCheckPerformanceCascade::UserExec(Option_t *)
938{
939
940 // Main loop
941 // Called for each event
942
943 AliESDEvent *lESDevent = 0x0;
944 AliAODEvent *lAODevent = 0x0;
945 AliMCEvent *lMCevent = 0x0;
946 AliStack *lMCstack = 0x0;
947 Int_t ncascades = -1;
948
949
950 // Connect to the InputEvent
951 // After these lines, we should have an ESD/AOD event + the number of cascades in it.
952
953 if(fAnalysisType == "ESD"){
954 lESDevent = dynamic_cast<AliESDEvent*>( InputEvent() );
955 if (!lESDevent) {
956 Printf("ERROR: lESDevent not available \n");
957 cout << "Name of the file with pb :" << fInputHandler->GetTree()->GetCurrentFile()->GetName() << endl;
958 return;
959 }
960 ncascades = lESDevent->GetNumberOfCascades();
961 }
962
963 else if(fAnalysisType == "AOD"){
964 lAODevent = dynamic_cast<AliAODEvent*>( InputEvent() );
965 if (!lAODevent) {
966 Printf("ERROR: lAODevent not available \n");
967 cout << "Name of the file with pb :" << fInputHandler->GetTree()->GetCurrentFile()->GetName() << endl;
968 return;
969 }
970 ncascades = lAODevent->GetNumberOfCascades();
971 }
972
973
974 lMCevent = MCEvent();
975 if (!lMCevent) {
976 Printf("ERROR: Could not retrieve MC event \n");
977 cout << "Name of the file with pb :" << fInputHandler->GetTree()->GetCurrentFile()->GetName() << endl;
978 return;
979 }
980
981 lMCstack = lMCevent->Stack();
982 if (!lMCstack) {
983 Printf("ERROR: Could not retrieve MC stack \n");
984 cout << "Name of the file with pb :" << fInputHandler->GetTree()->GetCurrentFile()->GetName() << endl;
985 return;
986
987 }
988
989
990 // cout << "Name of the accessed file :" << fInputHandler->GetTree()->GetCurrentFile()->GetName() << endl;
991
992 // cout << "Tree characteristics ..." << endl;
993 // fInputHandler->GetTree()->Print("toponly");
994 // fInputHandler->GetTree()->GetBranch("PrimaryVertex")->Print();
995 // fInputHandler->GetTree()->GetBranch("SPDVertex")->Print();
996
997
998
999
1000
1001
1002
1003 // ---------------------------------------------------------------
1004 // - Initialisation of the part dedicated to cascade vertices
1005
1006 Int_t iNumberOfPrimaries = -1;
1007 iNumberOfPrimaries = lMCstack->GetNprimary();
1008
1009 if(iNumberOfPrimaries < 1) return;
1010
1011 fHistMCTrackMultiplicity->Fill( lMCstack->GetNtrack() );
1012
1013 // For proton
1014 /*
1015 for (Int_t iCurrentLabelStack = 0; iCurrentLabelStack < iNumberOfPrimaries; iCurrentLabelStack++)
1016 {// This is the begining of the loop on primaries, for protons
1017
1018 TParticle* lCurrentParticle = lMCstack->Particle( iCurrentLabelStack );
1019 if(!lCurrentParticle){
1020 Printf("Proton loop %d - MC TParticle pointer to current stack particle = 0x0 ! Skip ...\n", iCurrentLabelStack );
1021 continue;
1022
1023 }
1024
1025 if( lCurrentParticle->GetPdgCode() == 2212 )
1026 fHistEtaGenProton->Fill( lCurrentParticle->Eta() );
1027
1028 if( lCurrentParticle->GetPdgCode() == -2212 )
1029 fHistEtaGenAntiProton->Fill( lCurrentParticle->Eta() );
1030 }// end loop over primary proton
1031 */
1032
1033
1034
1035//__________________________________________________________________________
1036// Part 1 - Loop over the different types of generated cascades (Xi-+, Omega-+)
1037
1038 // - Initialisation of useful local variables
1039
1040 Int_t lPdgCodeCasc = 0;
1041 Int_t lPdgCodeBach = 0;
1042 Int_t lPdgCodeLambda = 0;
1043 Int_t lPdgCodeDghtMesV0 = 0;
1044 Int_t lPdgCodeDghtBarV0 = 0;
1045
1046 TH1F *lHistEtaGenCasc = 0;
1047
1048 TH1F *lHistYGenCascMidRap = 0;
1049 TH1F *lHistEtaGenCascMidRap = 0;
1050 TH1F *lHistThetaGenCascMidRap = 0;
1051 TH1F *lHistPtGenCascMidRap = 0;
1052
1053 TH1F *lHistThetaGenCasc = 0;
1054 TH1F *lHistPtFdblGenCasc = 0;
1055 TH1F *lHistThetaLambda = 0;
1056 TH1F *lHistThetaBach = 0;
1057 TH1F *lHistThetaBarDghter = 0;
1058 TH1F *lHistThetaMesDghter = 0;
1059 TH1F *lHistPtBach = 0;
1060 TH1F *lHistPtBarDghter = 0;
1061 TH1F *lHistPtMesDghter = 0;
1062
1063
1064for(Int_t CascType = 1; CascType < 5; CascType++)
1065{
1066
1067switch (CascType)
1068 {
1069 case 1: // Xi-
1070 lPdgCodeCasc = 3312; //Xi-
1071 lPdgCodeBach = -211; //Pi-
1072 lPdgCodeLambda = 3122; //Lambda0
1073 lPdgCodeDghtMesV0 = -211; //Pi-
1074 lPdgCodeDghtBarV0 = 2212; //Proton
1075
1076 // any Xi-
1077 lHistEtaGenCasc = (TH1F*)fHistEtaGenCascXiMinus;
1078
1079 // cascades within |y| < 1
1080 lHistYGenCascMidRap = fHistYGenCascMidRapXiMinus;
1081 lHistEtaGenCascMidRap = fHistEtaGenCascMidRapXiMinus;
1082 lHistThetaGenCascMidRap = fHistThetaGenCascMidRapXiMinus;
1083 lHistPtGenCascMidRap = fHistPtGenCascMidRapXiMinus;
1084
1085 // cascades generated within acceptance (cut in pt + theta)
1086 lHistThetaGenCasc = fHistThetaGenCascXiMinus;
1087 lHistPtFdblGenCasc = fHistPtFdblGenCascXiMinus;
1088 lHistThetaLambda = fHistThetaLambdaXiMinus;
1089 lHistThetaBach = fHistThetaBachXiMinus;
1090 lHistThetaBarDghter = fHistThetaBarDghterXiMinus;
1091 lHistThetaMesDghter = fHistThetaMesDghterXiMinus;
1092 lHistPtBach = fHistPtBachXiMinus;
1093 lHistPtBarDghter = fHistPtBarDghterXiMinus;
1094 lHistPtMesDghter = fHistPtMesDghterXiMinus;
1095 break;
1096
1097 case 2: // Xi+
1098 lPdgCodeCasc = -3312; //Xi+
1099 lPdgCodeBach = 211; //Pi+
1100 lPdgCodeLambda = -3122; //AntiLambda0
1101 lPdgCodeDghtMesV0 = 211; //Pi+
1102 lPdgCodeDghtBarV0 = -2212; //AntiProton
1103
1104 // any Xi+
1105 lHistEtaGenCasc = fHistEtaGenCascXiPlus;
1106
1107 // cascades within |y| < 1
1108 lHistYGenCascMidRap = fHistYGenCascMidRapXiPlus;
1109 lHistEtaGenCascMidRap = fHistEtaGenCascMidRapXiPlus;
1110 lHistThetaGenCascMidRap = fHistThetaGenCascMidRapXiPlus;
1111 lHistPtGenCascMidRap = fHistPtGenCascMidRapXiPlus;
1112
1113 // cascades generated within acceptance (cut in pt + theta)
1114 lHistThetaGenCasc = fHistThetaGenCascXiPlus;
1115 lHistPtFdblGenCasc = fHistPtFdblGenCascXiPlus;
1116 lHistThetaLambda = fHistThetaLambdaXiPlus;
1117 lHistThetaBach = fHistThetaBachXiPlus;
1118 lHistThetaBarDghter = fHistThetaBarDghterXiPlus;
1119 lHistThetaMesDghter = fHistThetaMesDghterXiPlus;
1120 lHistPtBach = fHistPtBachXiPlus;
1121 lHistPtBarDghter = fHistPtBarDghterXiPlus;
1122 lHistPtMesDghter = fHistPtMesDghterXiPlus;
1123 break;
1124
1125 case 3: // Omega-
1126 lPdgCodeCasc = 3334; //Omega-
1127 lPdgCodeBach = -321; //K-
1128 lPdgCodeLambda = 3122; //Lambda0
1129 lPdgCodeDghtMesV0 = -211; //Pi-
1130 lPdgCodeDghtBarV0 = 2212; //Proton
1131
1132 // any Omega-
1133 lHistEtaGenCasc = fHistEtaGenCascOmegaMinus;
1134
1135 // cascades within |y| < 1
1136 lHistYGenCascMidRap = fHistYGenCascMidRapOmegaMinus;
1137 lHistEtaGenCascMidRap = fHistEtaGenCascMidRapOmegaMinus;
1138 lHistThetaGenCascMidRap = fHistThetaGenCascMidRapOmegaMinus;
1139 lHistPtGenCascMidRap = fHistPtGenCascMidRapOmegaMinus;
1140
1141 // cascades generated within acceptance (cut in pt + theta)
1142 lHistThetaGenCasc = fHistThetaGenCascOmegaMinus;
1143 lHistPtFdblGenCasc = fHistPtFdblGenCascOmegaMinus;
1144 lHistThetaLambda = fHistThetaLambdaOmegaMinus;
1145 lHistThetaBach = fHistThetaBachOmegaMinus;
1146 lHistThetaBarDghter = fHistThetaBarDghterOmegaMinus;
1147 lHistThetaMesDghter = fHistThetaMesDghterOmegaMinus;
1148 lHistPtBach = fHistPtBachOmegaMinus;
1149 lHistPtBarDghter = fHistPtBarDghterOmegaMinus;
1150 lHistPtMesDghter = fHistPtMesDghterOmegaMinus;
1151 break;
1152
1153 case 4: // Omega+
1154 lPdgCodeCasc = -3334; //Omega+
1155 lPdgCodeBach = 321; //K+
1156 lPdgCodeLambda = -3122; //AntiLambda0
1157 lPdgCodeDghtMesV0 = 211; //Pi+
1158 lPdgCodeDghtBarV0 = -2212; //AntiProton
1159
1160 // any Omega+
1161 lHistEtaGenCasc = fHistEtaGenCascOmegaPlus;
1162
1163 // cascades within |y| < 1
1164 lHistYGenCascMidRap = fHistYGenCascMidRapOmegaPlus;
1165 lHistEtaGenCascMidRap = fHistEtaGenCascMidRapOmegaPlus;
1166 lHistThetaGenCascMidRap = fHistThetaGenCascMidRapOmegaPlus;
1167 lHistPtGenCascMidRap = fHistPtGenCascMidRapOmegaPlus;
1168
1169 // cascades generated within acceptance (cut in pt + theta)
1170 lHistThetaGenCasc = fHistThetaGenCascOmegaPlus;
1171 lHistPtFdblGenCasc = fHistPtFdblGenCascOmegaPlus;
1172 lHistThetaLambda = fHistThetaLambdaOmegaPlus;
1173 lHistThetaBach = fHistThetaBachOmegaPlus;
1174 lHistThetaBarDghter = fHistThetaBarDghterOmegaPlus;
1175 lHistThetaMesDghter = fHistThetaMesDghterOmegaPlus;
1176 lHistPtBach = fHistPtBachOmegaPlus;
1177 lHistPtBarDghter = fHistPtBarDghterOmegaPlus;
1178 lHistPtMesDghter = fHistPtMesDghterOmegaPlus;
1179 break;
1180
1181 }// end switch cascade
1182
1183
1184 for (Int_t iCurrentLabelStack = 0; iCurrentLabelStack < iNumberOfPrimaries; iCurrentLabelStack++)
1185 {// This is the begining of the loop on primaries
1186
1187 TParticle* lCurrentParticle = 0x0;
1188 lCurrentParticle = lMCstack->Particle( iCurrentLabelStack );
1189 if(!lCurrentParticle){
1190 Printf("Cascade loop %d - MC TParticle pointer to current stack particle = 0x0 ! Skip ...\n", iCurrentLabelStack );
1191 continue;
1192
1193 }
1194
1195 if( lCurrentParticle->GetPdgCode() == lPdgCodeCasc ){ // Here !
1196 //cout << "Xi- ds boucle " << iCurrentLabelStack << "/ " << iNumberOfPrimaries << endl;
1197
1198 // - Xi level ... _____________________________________________________________
1199 TParticle* xiMC = 0x0;
1200 xiMC = lCurrentParticle;
1201 if(!xiMC){
1202 Printf("MC TParticle pointer to Cascade = 0x0 ! Skip ...");
1203 continue;
1204
1205 }
1206
1207 Double_t lRadToDeg = 180.0/TMath::Pi();
1208
1209 // Fill the histo in pseudo-rapidity : = any generated Xi, not necessarily within the acceptance
1210 lHistEtaGenCasc->Fill( xiMC->Eta() );
1211
1212
1213 // cascades within |y| < 1
1214 Double_t lRapXi = 0.5*TMath::Log((xiMC->Energy() + xiMC->Pz()) / (xiMC->Energy() - xiMC->Pz() +1.e-13));
1215
1216 if( TMath::Abs(lRapXi) < 1) {
1217 lHistYGenCascMidRap ->Fill( lRapXi );
1218 lHistEtaGenCascMidRap ->Fill( xiMC->Eta() );
1219 lHistThetaGenCascMidRap ->Fill( lRadToDeg * xiMC->Theta() );
1220 lHistPtGenCascMidRap ->Fill( xiMC->Pt() );
1221 }
1222
1223 // Check the emission of particle stays within the acceptance of the detector (cut in pt + theta)
1224 if( xiMC->Theta() < TMath::Pi()/4.0 || xiMC->Theta() > 3.0*TMath::Pi()/4.0 ) continue;
1225 if( xiMC->GetNDaughters() != 2) continue;
1226 if( xiMC->GetDaughter(0) < 0 ) continue;
1227 if( xiMC->GetDaughter(1) < 0 ) continue;
1228
1229 TParticle* lDght0ofXi = lMCstack->Particle( xiMC->GetDaughter(0) );
1230 TParticle* lDght1ofXi = lMCstack->Particle( xiMC->GetDaughter(1) );
1231
1232 TParticle* lLambda = 0;
1233 TParticle* lBach = 0;
1234
1235 // Xi - Case 1
1236 if( lDght0ofXi->GetPdgCode() == lPdgCodeLambda && // Here !
1237 lDght1ofXi->GetPdgCode() == lPdgCodeBach ){ // Here !
1238
1239 lLambda = lDght0ofXi;
1240 lBach = lDght1ofXi;
1241 }// end if dghter 0 = Lambda and dghter 1 = Pi-
1242
1243 // Xi - Case 2
1244 else if( lDght0ofXi->GetPdgCode() == lPdgCodeBach && // Here !
1245 lDght1ofXi->GetPdgCode() == lPdgCodeLambda ){ // Here !
1246
1247 lBach = lDght0ofXi;
1248 lLambda = lDght1ofXi;
1249 }// end if dghter 0 = Pi- and dghter 1 = Lambda
1250
1251 // V0 otherwise - Case 3
1252 else continue;
1253
1254 // Check the emission of particle stays within the acceptance of the detector
1255 if( lLambda->Theta() < TMath::Pi()/4.0 || lLambda->Theta() > 3.0*TMath::Pi()/4.0 ) continue;
1256 if( lBach->Theta() < TMath::Pi()/4.0 || lBach->Theta() > 3.0*TMath::Pi()/4.0 ) continue;
1257
1258 if( lBach->Pt() < 0.2 ) continue;
1259
1260
1261
1262 // - V0 level ... _____________________________________________________________
1263 TParticle* lDghtBarV0 = 0;
1264 TParticle* lDghtMesV0 = 0;
1265
1266 if( lLambda->GetNDaughters() != 2 ) continue;
1267 if( lLambda->GetDaughter(0) < 0 ) continue;
1268 if( lLambda->GetDaughter(1) < 0 ) continue;
1269
1270
1271 TParticle* lDght0ofLambda = lMCstack->Particle( lLambda->GetDaughter(0) );
1272 TParticle* lDght1ofLambda = lMCstack->Particle( lLambda->GetDaughter(1) );
1273
1274 // V0 - Case 1
1275 if( lDght0ofLambda->GetPdgCode() == lPdgCodeDghtBarV0 && // Here !
1276 lDght1ofLambda->GetPdgCode() == lPdgCodeDghtMesV0 ){ // Here !
1277
1278 lDghtBarV0 = lDght0ofLambda;
1279 lDghtMesV0 = lDght1ofLambda;
1280 }// end if dghter 0 = Proton and dghter 1 = Pi-
1281
1282 // V0 - Case 2
1283 else if( lDght0ofLambda->GetPdgCode() == lPdgCodeDghtMesV0 && // Here !
1284 lDght1ofLambda->GetPdgCode() == lPdgCodeDghtBarV0 ){ // Here !
1285
1286 lDghtMesV0 = lDght0ofLambda;
1287 lDghtBarV0 = lDght1ofLambda;
1288 }// end if dghter 0 = Pi- and dghter 1 = proton
1289
1290 // V0 otherwise - Case 3
1291 else continue;
1292
1293
1294 // Check the emission of particle stays within the acceptance of the detector
1295 if( lDghtBarV0->Theta() < TMath::Pi()/4.0 || lDghtBarV0->Theta() > 3.0*TMath::Pi()/4.0 ) continue;
1296 if( lDghtMesV0->Theta() < TMath::Pi()/4.0 || lDghtMesV0->Theta() > 3.0*TMath::Pi()/4.0 ) continue;
1297
1298 if( lDghtBarV0->Pt() < 0.5 ) continue;
1299 if( lDghtMesV0->Pt() < 0.2 ) continue;
1300
1301
1302
1303 // - Just to know which file is currently open : locate the file containing Xi
1304 //cout << "Name of the file containing generated Xi :" << fInputHandler->GetTree()->GetCurrentFile()->GetName()
1305 // << endl;
1306
1307 // - Filling histos ... _________________________________________________________________
1308 lHistThetaGenCasc ->Fill( lRadToDeg * xiMC->Theta() );
1309 lHistPtFdblGenCasc ->Fill( xiMC->Pt() );
1310
1311 // - Fill theta histos for Lambda and Bach
1312 lHistThetaLambda ->Fill( lRadToDeg * lLambda->Theta() );
1313 lHistThetaBach ->Fill( lRadToDeg * lBach->Theta() );
1314
1315 // - Fill theta histos for V0 daughters
1316 lHistThetaBarDghter ->Fill( lRadToDeg * lDghtBarV0->Theta() );
1317 lHistThetaMesDghter ->Fill( lRadToDeg * lDghtMesV0->Theta() );
1318
1319 // - Fill pt histos.
1320 lHistPtBach ->Fill( lBach->Pt() );
1321 lHistPtBarDghter ->Fill( lDghtBarV0->Pt() );
1322 lHistPtMesDghter ->Fill( lDghtMesV0->Pt() );
1323
1324 // - Re-initialisation of the local TH1F pointers
1325 lHistEtaGenCasc = 0x0;
1326
1327 lHistYGenCascMidRap = 0x0;
1328 lHistEtaGenCascMidRap = 0x0;
1329 lHistThetaGenCascMidRap = 0x0;
1330 lHistPtGenCascMidRap = 0x0;
1331
1332 lHistThetaGenCasc = 0x0;
1333 lHistPtFdblGenCasc = 0x0;
1334 lHistThetaLambda = 0x0;
1335 lHistThetaBach = 0x0;
1336 lHistThetaBarDghter = 0x0;
1337 lHistThetaMesDghter = 0x0;
1338 lHistPtBach = 0x0;
1339 lHistPtBarDghter = 0x0;
1340 lHistPtMesDghter = 0x0;
1341
1342
1343 }// end if current particle = Xi-
1344
1345 }// This is the end of the loop on primaries
1346
1347} // end of loop over the different types of cascades (Xi-+, Omega-+)
1348
1349
1350
1351//__________________________________________________________________________
1352// Part 2 - Loop over the reconstructed candidates
1353
1354
1355// Temporary way : AOD awareness of the code to be developed
1356if(fAnalysisType == "AOD") return;
1357
1358
1359for (Int_t iXi = 0; iXi < ncascades; iXi++)
1360{// This is the begining of the Cascade loop
1361
1362 AliESDcascade *xiESD = lESDevent->GetCascade(iXi);
1363
1364 if (!xiESD) continue;
1365
1366 // - Step 1 : Preparing the general info about of the event
1367 //-------------
1368 //const AliESDVertex *lPrimaryVtx = lESDevent->GetPrimaryVertex(); // get the best vtx available
1369 // Double_t lPrimaryVtxPos[3] = {-100.0, -100.0, -100.0};
1370 // lPrimaryVtx->GetXYZ( lPrimaryVtxPos );
1371
1372 // Double_t lMagneticField = lESDevent->GetMagneticField( );
1373
1374
1375 // - Step 2 : Connection to daughter tracks of the current cascade
1376 //-------------
1377
1378 UInt_t lIdxPosXi = (UInt_t) TMath::Abs( xiESD->GetPindex() );
1379 UInt_t lIdxNegXi = (UInt_t) TMath::Abs( xiESD->GetNindex() );
1380 UInt_t lBachIdx = (UInt_t) TMath::Abs( xiESD->GetBindex() );
1381 // abs value not needed ; the index should always be positive (!= label ...)
1382
1383 AliESDtrack *pTrackXi = lESDevent->GetTrack( lIdxPosXi );
1384 AliESDtrack *nTrackXi = lESDevent->GetTrack( lIdxNegXi );
1385 AliESDtrack *bachTrackXi = lESDevent->GetTrack( lBachIdx );
1386 if (!pTrackXi || !nTrackXi || !bachTrackXi ) {
1387 Printf("ERROR: Could not retrieve one of the 3 daughter tracks of the cascade ...");
1388 continue;
1389 }
1390
1391
1392 // - Step 3 : Info over reconstructed cascades
1393 //-------------
1394
1395 Double_t lInvMassXiMinus = 0.;
1396 Double_t lInvMassXiPlus = 0.;
1397 Double_t lInvMassOmegaMinus = 0.;
1398 Double_t lInvMassOmegaPlus = 0.;
1399
1400 Double_t lV0quality = 0.;
1401
1402 if( bachTrackXi->Charge() < 0 ) {
1403 lV0quality = 0.;
1404 xiESD->ChangeMassHypothesis(lV0quality , 3312);
1405 // Calculate the effective mass of the Xi- candidate.
1406 // pdg code 3312 = Xi-
1407 lInvMassXiMinus = xiESD->GetEffMassXi();
1408
1409 lV0quality = 0.;
1410 xiESD->ChangeMassHypothesis(lV0quality , 3334);
1411 // Calculate the effective mass of the Xi- candidate.
1412 // pdg code 3334 = Omega-
1413 lInvMassOmegaMinus = xiESD->GetEffMassXi();
1414
1415 lV0quality = 0.;
1416 xiESD->ChangeMassHypothesis(lV0quality , 3312); // Back to default hyp.
1417
1418 }
1419
1420 if( bachTrackXi->Charge() > 0 ){
1421 lV0quality = 0.;
1422 xiESD->ChangeMassHypothesis(lV0quality , -3312);
1423 // Calculate the effective mass of the Xi+ candidate.
1424 // pdg code -3312 = Xi+
1425 lInvMassXiPlus = xiESD->GetEffMassXi();
1426
1427 lV0quality = 0.;
1428 xiESD->ChangeMassHypothesis(lV0quality , -3334);
1429 // Calculate the effective mass of the Xi+ candidate.
1430 // pdg code -3334 = Omega+
1431 lInvMassOmegaPlus = xiESD->GetEffMassXi();
1432
1433 lV0quality = 0.;
1434 xiESD->ChangeMassHypothesis(lV0quality , -3312); // Back to "default" hyp.
1435 }
1436
1437 Double_t lChargeXi = xiESD->Charge();
1438
1439 if( lChargeXi < 0 ) fHistMassXiMinus ->Fill( lInvMassXiMinus );
1440 if( lChargeXi > 0 ) fHistMassXiPlus ->Fill( lInvMassXiPlus );
1441 if( lChargeXi < 0 ) fHistMassOmegaMinus ->Fill( lInvMassOmegaMinus );
1442 if( lChargeXi > 0 ) fHistMassOmegaPlus ->Fill( lInvMassOmegaPlus );
1443
1444
1445
1446
1447 // - Step 4 : MC association
1448 //-------------
1449
1450 Bool_t lAssoXiMinus = kFALSE;
1451 Bool_t lAssoXiPlus = kFALSE;
1452 Bool_t lAssoOmegaMinus = kFALSE;
1453 Bool_t lAssoOmegaPlus = kFALSE;
1454
1455
1456 if(fDebug > 5)
1457 cout << "MC EventNumber : " << lMCevent->Header()->GetEvent()
1458 << " / MC event Number in Run : " << lMCevent->Header()->GetEventNrInRun() << endl;
1459
1460 // - Step 4.1 : level of the V0 daughters
1461
1462 Int_t lblPosV0Dghter = (Int_t) TMath::Abs( pTrackXi->GetLabel() );
1463 // Abs value = needed ! question of quality track association ...
1464 Int_t lblNegV0Dghter = (Int_t) TMath::Abs( nTrackXi->GetLabel() );
1465
1466 TParticle* mcPosV0Dghter = lMCstack->Particle( lblPosV0Dghter );
1467 TParticle* mcNegV0Dghter = lMCstack->Particle( lblNegV0Dghter );
1468
1469
1470 // - Step 4.2 : level of the Xi daughters
1471
1472 Int_t lblMotherPosV0Dghter = mcPosV0Dghter->GetFirstMother() ;
1473 Int_t lblMotherNegV0Dghter = mcNegV0Dghter->GetFirstMother();
1474
1475 if(lblMotherPosV0Dghter != lblMotherNegV0Dghter) continue; // same mother
1476 if( lblMotherPosV0Dghter < 0 ) continue; // mother != primary (!= -1)
1477 if( lblMotherNegV0Dghter < 0 ) continue;
1478
1479
1480 // mothers = Lambda candidate ... a priori
1481
1482 TParticle* mcMotherPosV0Dghter = lMCstack->Particle( lblMotherPosV0Dghter );
1483 TParticle* mcMotherNegV0Dghter = lMCstack->Particle( lblMotherNegV0Dghter );
1484
1485 Int_t lblBach = (Int_t) TMath::Abs( bachTrackXi->GetLabel() );
1486 TParticle* mcBach = lMCstack->Particle( lblBach );
1487
1488
1489 // - Step 4.3 : level of Xi candidate
1490
1491 Int_t lblGdMotherPosV0Dghter = mcMotherPosV0Dghter->GetFirstMother() ;
1492 Int_t lblGdMotherNegV0Dghter = mcMotherNegV0Dghter->GetFirstMother() ;
1493
1494 if( lblGdMotherPosV0Dghter != lblGdMotherNegV0Dghter ) continue;
1495 if( lblGdMotherPosV0Dghter < 0 ) continue; // primary lambda ...
1496 if( lblGdMotherNegV0Dghter < 0 ) continue; // primary lambda ...
1497
1498
1499 // Gd mothers = Xi candidate ... a priori
1500
1501 TParticle* mcGdMotherPosV0Dghter = lMCstack->Particle( lblGdMotherPosV0Dghter );
1502 TParticle* mcGdMotherNegV0Dghter = lMCstack->Particle( lblGdMotherNegV0Dghter );
1503
1504 Int_t lblMotherBach = (Int_t) TMath::Abs( mcBach->GetFirstMother() );
1505
1506 if( lblMotherBach != lblGdMotherPosV0Dghter ) continue; //same mother for bach and V0 daughters
1507
1508 TParticle* mcMotherBach = lMCstack->Particle( lblMotherBach );
1509
1510
1511 // - Step 4.4 : Manage boolean for association
1512
1513 if( mcMotherBach ->GetPdgCode() == 3312 &&
1514 mcGdMotherPosV0Dghter ->GetPdgCode() == 3312 &&
1515 mcGdMotherNegV0Dghter ->GetPdgCode() == 3312) lAssoXiMinus = kTRUE;
1516
1517 else if( mcMotherBach ->GetPdgCode() == -3312 &&
1518 mcGdMotherPosV0Dghter ->GetPdgCode() == -3312 &&
1519 mcGdMotherNegV0Dghter ->GetPdgCode() == -3312) lAssoXiPlus = kTRUE;
1520
1521 else if( mcMotherBach ->GetPdgCode() == 3334 &&
1522 mcGdMotherPosV0Dghter ->GetPdgCode() == 3334 &&
1523 mcGdMotherNegV0Dghter ->GetPdgCode() == 3334) lAssoOmegaMinus = kTRUE;
1524
1525 else if( mcMotherBach ->GetPdgCode() == -3334 &&
1526 mcGdMotherPosV0Dghter ->GetPdgCode() == -3334 &&
1527 mcGdMotherNegV0Dghter ->GetPdgCode() == -3334) lAssoOmegaPlus = kTRUE;
1528
1529
1530
1531 if(!lAssoXiMinus && !lAssoXiPlus && !lAssoOmegaMinus && !lAssoOmegaPlus) continue; // no association
1532
1533 // If a proper association exists ...
1534
1535 if(fDebug > 4){
1536 cout << "XiMinus = " << lAssoXiMinus << endl;
1537 cout << "XiPlus = " << lAssoXiPlus << endl;
1538 cout << "OmegaMinus = " << lAssoOmegaMinus << endl;
1539 cout << "OmegaPlus = " << lAssoOmegaPlus << endl
1540 << "----" << endl;
1541 }
1542
1543
1544 if(fDebug > 5){
1545 cout << endl;
1546 cout << "- V0 daughters - " << endl;
1547 cout << " + V0 Pos. / Label : " << lblPosV0Dghter
1548 << " - Pdg Code : " << mcPosV0Dghter->GetTitle() << endl;
1549 cout << " - V0 Neg. / Label : " << lblNegV0Dghter
1550 << " - Pdg Code : " << mcNegV0Dghter->GetTitle() << endl;
1551
1552 cout << "- Xi daughters - " << endl;
1553 cout << " + V0 Pos. mother / Label : " << lblMotherPosV0Dghter
1554 << " - Pdg Code : " << mcMotherPosV0Dghter->GetTitle() << endl;
1555 cout << " - V0 Neg. mother / Label : " << lblMotherNegV0Dghter
1556 << " - Pdg Code : " << mcMotherNegV0Dghter->GetTitle() << endl;
1557
1558 cout << " -- Bach. / Label :" << lblBach
1559 << " - Pdg Code : " << mcBach->GetTitle() << endl;
1560
1561 cout << "- Xi candidate -" << endl;
1562 cout << " + V0 Pos. Gd Mother / Label : " << lblGdMotherPosV0Dghter
1563 << " - Pdg Code : " << mcGdMotherPosV0Dghter->GetTitle() << endl;
1564 cout << " - V0 Neg. Gd Mother / Label : " << lblGdMotherNegV0Dghter
1565 << " - Pdg Code : "<< mcGdMotherNegV0Dghter->GetTitle() << endl;
1566
1567 cout << " -- Mother Bach. / Label : " << lblMotherBach
1568 << " - Pdg Code : " << mcMotherBach->GetTitle() << endl;
1569 cout << endl;
1570 }
1571
1572
1573 // - Step 5 : Plots around the cascade candidates associated with MC
1574 //-------------
1575
1576 Double_t lmcPt = mcMotherBach->Pt();
1577 Double_t lmcRapXi = 0.5*TMath::Log( (mcMotherBach->Energy() + mcMotherBach->Pz()) /
1578 (mcMotherBach->Energy() - mcMotherBach->Pz() +1.e-13) );
1579 Double_t lmcEta = mcMotherBach->Eta();
1580 Double_t lmcTransvRadius = mcBach->R(); // to get the decay point of Xi, = the production vertex of Bachelor ...
1581
1582 Double_t lrecoPt = xiESD->Pt();
1583 Double_t lrecoTransvRadius = TMath::Sqrt( xiESD->Xv() * xiESD->Xv() + xiESD->Yv() * xiESD->Yv() );
1584
1585 // - Effective mass histos for the cascade candidates associated with MC
1586
1587 if( lChargeXi < 0 && lAssoXiMinus){
1588 fHistAsMCMassXiMinus ->Fill( lInvMassXiMinus );
1589 fHistAsMCGenPtXiMinus ->Fill( lmcPt );
1590 fHistAsMCGenYXiMinus ->Fill( lmcRapXi );
1591 f2dHistAsMCGenYVsGenPtXiMinus ->Fill( lmcRapXi, lmcPt );
1592 fHistAsMCGenEtaXiMinus ->Fill( lmcEta );
1593 f2dHistAsMCResPtXiMinus ->Fill( lmcPt, (lrecoPt - lmcPt)/ lmcPt );
1594 f2dHistAsMCResRXiMinus ->Fill( lmcTransvRadius, (lrecoTransvRadius - lmcTransvRadius)/ lmcTransvRadius );
1595 }
1596
1597 else if( lChargeXi > 0 && lAssoXiPlus){
1598 fHistAsMCMassXiPlus ->Fill( lInvMassXiPlus );
1599 fHistAsMCGenPtXiPlus ->Fill( lmcPt );
1600 fHistAsMCGenYXiPlus ->Fill( lmcRapXi );
1601 f2dHistAsMCGenYVsGenPtXiPlus ->Fill( lmcRapXi, lmcPt );
1602 fHistAsMCGenEtaXiPlus ->Fill( lmcEta );
1603 f2dHistAsMCResPtXiPlus ->Fill( lmcPt, (lrecoPt - lmcPt)/ lmcPt );
1604 f2dHistAsMCResRXiPlus ->Fill( lmcTransvRadius, (lrecoTransvRadius - lmcTransvRadius)/ lmcTransvRadius );
1605 }
1606
1607 else if( lChargeXi < 0 && lAssoOmegaMinus){
1608 fHistAsMCMassOmegaMinus ->Fill( lInvMassOmegaMinus );
1609 fHistAsMCGenPtOmegaMinus ->Fill( lmcPt );
1610 fHistAsMCGenYOmegaMinus ->Fill( lmcRapXi );
1611 f2dHistAsMCGenYVsGenPtOmegaMinus ->Fill( lmcRapXi, lmcPt );
1612 fHistAsMCGenEtaOmegaMinus ->Fill( lmcEta );
1613 f2dHistAsMCResPtOmegaMinus ->Fill( lmcPt, (lrecoPt - lmcPt)/ lmcPt );
1614 f2dHistAsMCResROmegaMinus ->Fill( lmcTransvRadius, (lrecoTransvRadius - lmcTransvRadius)/ lmcTransvRadius );
1615 }
1616
1617 else if( lChargeXi > 0 && lAssoOmegaPlus){
1618 fHistAsMCMassOmegaPlus ->Fill( lInvMassOmegaPlus );
1619 fHistAsMCGenPtOmegaPlus ->Fill( lmcPt );
1620 fHistAsMCGenYOmegaPlus ->Fill( lmcRapXi );
1621 f2dHistAsMCGenYVsGenPtOmegaPlus ->Fill( lmcRapXi, lmcPt );
1622 fHistAsMCGenEtaOmegaPlus ->Fill( lmcEta );
1623 f2dHistAsMCResPtOmegaPlus ->Fill( lmcPt, (lrecoPt - lmcPt)/ lmcPt );
1624 f2dHistAsMCResROmegaPlus ->Fill( lmcTransvRadius, (lrecoTransvRadius - lmcTransvRadius)/ lmcTransvRadius );
1625 }
1626
1627
1628}// End of loop over reconstructed cascades
1629
1630
1631
1632
1633 // Post output data.
1634 PostData(1, fListHistCascade);
1635}
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646//________________________________________________________________________
1647void AliAnalysisTaskCheckPerformanceCascade::Terminate(Option_t *)
1648{
1649 // Draw result to the screen
1650 // Called once at the end of the query
1651
1652 fHistMCTrackMultiplicity = dynamic_cast<TH1F*> ( ((TList*)GetOutputData(1))->FindObject("fHistMCTrackMultiplicity") );
1653 if (!fHistMCTrackMultiplicity) {
1654 Printf("ERROR: fHistMCTrackMultiplicity not available");
1655 return;
1656 }
1657
1658
1659 TCanvas *c2 = new TCanvas("AliAnalysisTaskCheckPerformanceCascade","Multiplicity",10,10,510,510);
1660 c2->cd(1)->SetLogy();
1661
1662 fHistMCTrackMultiplicity->SetMarkerStyle(22);
1663 fHistMCTrackMultiplicity->DrawCopy("E");
1664 // fHistV0Multiplicity->SetMarkerStyle(26);
1665 // fHistV0Multiplicity->DrawCopy("ESAME");
1666
1667}