]>
Commit | Line | Data |
---|---|---|
45ee0bcc | 1 | |
2 | /************************************************************************** | |
3 | * Authors : Antonin Maire, Boris Hippolyte * | |
4 | * Contributors are mentioned in the code where appropriate. * | |
5 | * * | |
6 | * Permission to use, copy, modify and distribute this software and its * | |
7 | * documentation strictly for non-commercial purposes is hereby granted * | |
8 | * without fee, provided that the above copyright notice appears in all * | |
9 | * copies and that both the copyright notice and this permission notice * | |
10 | * appear in the supporting documentation. The authors make no claims * | |
11 | * about the suitability of this software for any purpose. It is * | |
12 | * provided "as is" without express or implied warranty. * | |
13 | **************************************************************************/ | |
14 | ||
15 | //----------------------------------------------------------------- | |
16 | // AliAnalysisTaskCheckCascade class | |
684aef2e | 17 | // This task is for QAing the Cascades from ESD and AOD |
e9c3f0b6 | 18 | // Origin : Antonin Maire Fev2008, antonin.maire@ires.in2p3.fr |
19 | // Modified : A.Maire June 2009 | |
45ee0bcc | 20 | //----------------------------------------------------------------- |
21 | ||
22 | ||
23 | ||
24 | ||
25 | class TTree; | |
26 | class TParticle; | |
27 | class TVector3; | |
28 | ||
29 | //class AliMCEventHandler; | |
30 | //class AliMCEvent; | |
31 | //class AliStack; | |
32 | ||
33 | class AliESDVertex; | |
34 | class AliAODVertex; | |
35 | class AliESDv0; | |
36 | class AliAODv0; | |
37 | ||
f87cd3db | 38 | #include <Riostream.h> |
45ee0bcc | 39 | |
40 | #include "TList.h" | |
6dc8b253 | 41 | #include "TH1.h" |
42 | #include "TH2.h" | |
ff0753e1 | 43 | #include "TH3.h" |
45ee0bcc | 44 | #include "TCanvas.h" |
45 | #include "TMath.h" | |
46 | ||
47 | #include "AliLog.h" | |
48 | ||
49 | #include "AliESDEvent.h" | |
50 | #include "AliAODEvent.h" | |
51 | //#include "AliCascadeVertexer.h" | |
52 | ||
53 | #include "AliESDcascade.h" | |
54 | #include "AliAODcascade.h" | |
55 | ||
56 | #include "AliAnalysisTaskCheckCascade.h" | |
57 | ||
58 | ClassImp(AliAnalysisTaskCheckCascade) | |
59 | ||
60 | ||
61 | ||
62 | //________________________________________________________________________ | |
63 | AliAnalysisTaskCheckCascade::AliAnalysisTaskCheckCascade() | |
64 | : AliAnalysisTaskSE(), fAnalysisType("ESD"), fCollidingSystems(0), | |
65 | ||
66 | // - Cascade part initialisation | |
67 | fListHistCascade(0), | |
68 | fHistTrackMultiplicity(0), fHistCascadeMultiplicity(0), | |
69 | fHistVtxStatus(0), | |
70 | ||
71 | fHistPosTrkgPrimaryVtxX(0), fHistPosTrkgPrimaryVtxY(0), fHistPosTrkgPrimaryVtxZ(0), fHistTrkgPrimaryVtxRadius(0), | |
72 | fHistPosBestPrimaryVtxX(0), fHistPosBestPrimaryVtxY(0), fHistPosBestPrimaryVtxZ(0), fHistBestPrimaryVtxRadius(0), | |
73 | f2dHistTrkgPrimVtxVsBestPrimVtx(0), | |
74 | ||
75 | fHistEffMassXi(0), fHistChi2Xi(0), | |
76 | fHistDcaXiDaughters(0), fHistDcaBachToPrimVertex(0), fHistXiCosineOfPointingAngle(0), fHistXiRadius(0), | |
77 | ||
78 | fHistMassLambdaAsCascDghter(0), | |
79 | fHistV0Chi2Xi(0), | |
80 | fHistDcaV0DaughtersXi(0), | |
81 | fHistDcaV0ToPrimVertexXi(0), | |
82 | fHistV0CosineOfPointingAngleXi(0), | |
83 | fHistV0RadiusXi(0), | |
84 | fHistDcaPosToPrimVertexXi(0), fHistDcaNegToPrimVertexXi(0), | |
85 | ||
86 | fHistMassXiMinus(0), fHistMassXiPlus(0), | |
87 | fHistMassOmegaMinus(0), fHistMassOmegaPlus(0), | |
f87cd3db | 88 | fHistMassWithCombPIDXiMinus(0), fHistMassWithCombPIDXiPlus(0), |
89 | fHistMassWithCombPIDOmegaMinus(0), fHistMassWithCombPIDOmegaPlus(0), | |
45ee0bcc | 90 | |
91 | fHistXiTransvMom(0), fHistXiTotMom(0), | |
92 | fHistBachTransvMom(0), fHistBachTotMom(0), | |
93 | ||
94 | fHistChargeXi(0), | |
95 | fHistV0toXiCosineOfPointingAngle(0), | |
96 | ||
97 | fHistRapXi(0), fHistRapOmega(0), fHistEta(0), | |
98 | fHistTheta(0), fHistPhi(0), | |
99 | ||
100 | f2dHistArmenteros(0), | |
101 | f2dHistEffMassLambdaVsEffMassXiMinus(0), f2dHistEffMassXiVsEffMassOmegaMinus(0), | |
102 | f2dHistEffMassLambdaVsEffMassXiPlus(0), f2dHistEffMassXiVsEffMassOmegaPlus(0), | |
e9c3f0b6 | 103 | f2dHistXiRadiusVsEffMassXiMinus(0), f2dHistXiRadiusVsEffMassXiPlus(0), |
104 | f2dHistXiRadiusVsEffMassOmegaMinus(0), f2dHistXiRadiusVsEffMassOmegaPlus(0), | |
105 | ||
ff0753e1 | 106 | f3dHistXiPtVsEffMassVsYXiMinus(0), f3dHistXiPtVsEffMassVsYXiPlus(0), |
107 | f3dHistXiPtVsEffMassVsYOmegaMinus(0), f3dHistXiPtVsEffMassVsYOmegaPlus(0) | |
45ee0bcc | 108 | |
109 | { | |
110 | // Dummy Constructor | |
111 | } | |
112 | ||
113 | ||
114 | ||
115 | ||
116 | ||
117 | ||
118 | ||
119 | ||
120 | //________________________________________________________________________ | |
121 | AliAnalysisTaskCheckCascade::AliAnalysisTaskCheckCascade(const char *name) | |
122 | : AliAnalysisTaskSE(name), fAnalysisType("ESD"), fCollidingSystems(0), | |
123 | ||
124 | // - Cascade part initialisation | |
125 | fListHistCascade(0), | |
126 | fHistTrackMultiplicity(0), fHistCascadeMultiplicity(0), | |
127 | fHistVtxStatus(0), | |
128 | ||
129 | fHistPosTrkgPrimaryVtxX(0), fHistPosTrkgPrimaryVtxY(0), fHistPosTrkgPrimaryVtxZ(0), fHistTrkgPrimaryVtxRadius(0), | |
130 | fHistPosBestPrimaryVtxX(0), fHistPosBestPrimaryVtxY(0), fHistPosBestPrimaryVtxZ(0), fHistBestPrimaryVtxRadius(0), | |
131 | f2dHistTrkgPrimVtxVsBestPrimVtx(0), | |
132 | ||
133 | fHistEffMassXi(0), fHistChi2Xi(0), | |
134 | fHistDcaXiDaughters(0), fHistDcaBachToPrimVertex(0), fHistXiCosineOfPointingAngle(0), fHistXiRadius(0), | |
135 | ||
136 | fHistMassLambdaAsCascDghter(0), | |
137 | fHistV0Chi2Xi(0), | |
138 | fHistDcaV0DaughtersXi(0), | |
139 | fHistDcaV0ToPrimVertexXi(0), | |
140 | fHistV0CosineOfPointingAngleXi(0), | |
141 | fHistV0RadiusXi(0), | |
142 | fHistDcaPosToPrimVertexXi(0), fHistDcaNegToPrimVertexXi(0), | |
143 | ||
144 | fHistMassXiMinus(0), fHistMassXiPlus(0), | |
145 | fHistMassOmegaMinus(0), fHistMassOmegaPlus(0), | |
f87cd3db | 146 | fHistMassWithCombPIDXiMinus(0), fHistMassWithCombPIDXiPlus(0), |
147 | fHistMassWithCombPIDOmegaMinus(0), fHistMassWithCombPIDOmegaPlus(0), | |
45ee0bcc | 148 | |
149 | fHistXiTransvMom(0), fHistXiTotMom(0), | |
150 | fHistBachTransvMom(0), fHistBachTotMom(0), | |
151 | ||
152 | fHistChargeXi(0), | |
153 | fHistV0toXiCosineOfPointingAngle(0), | |
154 | ||
155 | fHistRapXi(0), fHistRapOmega(0), fHistEta(0), | |
156 | fHistTheta(0), fHistPhi(0), | |
157 | ||
158 | f2dHistArmenteros(0), | |
159 | f2dHistEffMassLambdaVsEffMassXiMinus(0), f2dHistEffMassXiVsEffMassOmegaMinus(0), | |
160 | f2dHistEffMassLambdaVsEffMassXiPlus(0), f2dHistEffMassXiVsEffMassOmegaPlus(0), | |
e9c3f0b6 | 161 | f2dHistXiRadiusVsEffMassXiMinus(0), f2dHistXiRadiusVsEffMassXiPlus(0), |
162 | f2dHistXiRadiusVsEffMassOmegaMinus(0), f2dHistXiRadiusVsEffMassOmegaPlus(0), | |
163 | ||
ff0753e1 | 164 | f3dHistXiPtVsEffMassVsYXiMinus(0), f3dHistXiPtVsEffMassVsYXiPlus(0), |
165 | f3dHistXiPtVsEffMassVsYOmegaMinus(0), f3dHistXiPtVsEffMassVsYOmegaPlus(0) | |
45ee0bcc | 166 | |
167 | { | |
168 | // Constructor | |
169 | ||
170 | // Define input and output slots here | |
171 | // Input slot #0 works with a TChain | |
172 | ||
173 | // Output slot #0 writes into a TList container (Cascade) | |
174 | DefineOutput(1, TList::Class()); | |
175 | } | |
176 | ||
177 | ||
178 | ||
179 | ||
180 | ||
181 | ||
182 | //________________________________________________________________________ | |
183 | void AliAnalysisTaskCheckCascade::UserCreateOutputObjects() | |
184 | { | |
185 | // Create histograms | |
186 | // Called once | |
187 | ||
188 | ||
189 | ||
190 | fListHistCascade = new TList(); | |
191 | ||
192 | ||
193 | // - General histos | |
194 | ||
195 | if(! fHistTrackMultiplicity) { | |
196 | if(fCollidingSystems)// AA collisions | |
197 | fHistTrackMultiplicity = new TH1F("fHistTrackMultiplicity", | |
198 | "Multiplicity distribution;Number of tracks;Events", | |
199 | 200, 0, 40000); | |
200 | else // pp collisions | |
201 | fHistTrackMultiplicity = new TH1F("fHistTrackMultiplicity", | |
202 | "Track Multiplicity;Nbr of tracks/Evt;Events", | |
203 | 200, 0, 200); | |
204 | fListHistCascade->Add(fHistTrackMultiplicity); | |
205 | } | |
206 | ||
207 | if(! fHistCascadeMultiplicity) { | |
208 | if(fCollidingSystems)// AA collisions | |
209 | fHistCascadeMultiplicity = new TH1F("fHistCascadeMultiplicity", | |
210 | "Multiplicity distribution;Number of Cascades;Events", | |
211 | 25, 0, 25); | |
212 | else // pp collisions | |
213 | fHistCascadeMultiplicity = new TH1F("fHistCascadeMultiplicity", | |
214 | "Cascades per event;Nbr of Cascades/Evt;Events", | |
215 | 10, 0, 10); | |
216 | fListHistCascade->Add(fHistCascadeMultiplicity); | |
217 | } | |
218 | ||
219 | ||
220 | ||
221 | if(! fHistVtxStatus ){ | |
222 | fHistVtxStatus = new TH1F( "fHistVtxStatus" , "Does a Trckg Prim.vtx exist ?; true=1 or false=0; Nb of Events" , 4, -1.0, 3.0 ); | |
223 | fListHistCascade->Add(fHistVtxStatus); | |
224 | } | |
225 | ||
226 | ||
227 | ||
228 | ||
229 | ||
230 | ||
231 | // - Vertex Positions | |
232 | ||
233 | if(! fHistPosTrkgPrimaryVtxX ){ | |
234 | fHistPosTrkgPrimaryVtxX = new TH1F( "fHistPosTrkgPrimaryVtxX" , "Trkg Prim. Vertex Position in x; x (cm); Events" , 200, -0.5, 0.5 ); | |
235 | fListHistCascade->Add(fHistPosTrkgPrimaryVtxX); | |
236 | } | |
237 | ||
238 | ||
239 | if(! fHistPosTrkgPrimaryVtxY){ | |
240 | fHistPosTrkgPrimaryVtxY = new TH1F( "fHistPosTrkgPrimaryVtxY" , "Trkg Prim. Vertex Position in y; y (cm); Events" , 200, -0.5, 0.5 ); | |
241 | fListHistCascade->Add(fHistPosTrkgPrimaryVtxY); | |
242 | } | |
243 | ||
244 | if(! fHistPosTrkgPrimaryVtxZ ){ | |
245 | fHistPosTrkgPrimaryVtxZ = new TH1F( "fHistPosTrkgPrimaryVtxZ" , "Trkg Prim. Vertex Position in z; z (cm); Events" , 100, -15.0, 15.0 ); | |
246 | fListHistCascade->Add(fHistPosTrkgPrimaryVtxZ); | |
247 | } | |
248 | ||
249 | if(! fHistTrkgPrimaryVtxRadius ){ | |
250 | fHistTrkgPrimaryVtxRadius = new TH1F( "fHistTrkgPrimaryVtxRadius", "Trkg Prim. Vertex radius; r (cm); Events" , 150, 0., 15.0 ); | |
251 | fListHistCascade->Add(fHistTrkgPrimaryVtxRadius); | |
252 | } | |
253 | ||
254 | ||
255 | ||
256 | ||
257 | if(! fHistPosBestPrimaryVtxX ){ | |
258 | fHistPosBestPrimaryVtxX = new TH1F( "fHistPosBestPrimaryVtxX" , "Best Prim. Vertex Position in x; x (cm); Events" , 200, -0.5, 0.5 ); | |
259 | fListHistCascade->Add(fHistPosBestPrimaryVtxX); | |
260 | } | |
261 | ||
262 | if(! fHistPosBestPrimaryVtxY){ | |
263 | fHistPosBestPrimaryVtxY = new TH1F( "fHistPosBestPrimaryVtxY" , "Best Prim. Vertex Position in y; y (cm); Events" , 200, -0.5, 0.5 ); | |
264 | fListHistCascade->Add(fHistPosBestPrimaryVtxY); | |
265 | } | |
266 | ||
267 | if(! fHistPosBestPrimaryVtxZ ){ | |
268 | fHistPosBestPrimaryVtxZ = new TH1F( "fHistPosBestPrimaryVtxZ" , "Best Prim. Vertex Position in z; z (cm); Events" , 100, -15.0, 15.0 ); | |
269 | fListHistCascade->Add(fHistPosBestPrimaryVtxZ); | |
270 | } | |
271 | ||
272 | if(! fHistBestPrimaryVtxRadius ){ | |
273 | fHistBestPrimaryVtxRadius = new TH1F( "fHistBestPrimaryVtxRadius", "Best Prim. vertex radius; r (cm); Events" , 150, 0., 15.0 ); | |
274 | fListHistCascade->Add(fHistBestPrimaryVtxRadius); | |
275 | } | |
276 | ||
277 | if(! f2dHistTrkgPrimVtxVsBestPrimVtx) { | |
278 | f2dHistTrkgPrimVtxVsBestPrimVtx = new TH2F( "f2dHistTrkgPrimVtxVsBestPrimVtx", "r_{Trck Prim. Vtx} Vs r_{Best Prim. Vtx}; r_{Track Vtx} (cm); r_{Best Vtx} (cm)", 300, 0., 15.0, 300, 0., 15.); | |
279 | fListHistCascade->Add(f2dHistTrkgPrimVtxVsBestPrimVtx); | |
280 | } | |
281 | ||
282 | ||
283 | ||
284 | ||
285 | // - Typical histos for cascades | |
286 | ||
287 | ||
288 | if(! fHistEffMassXi) { | |
289 | fHistEffMassXi = new TH1F("fHistEffMassXi", "Cascade candidates ; Invariant Mass (GeV/c^{2}) ; Counts", 200, 1.2, 2.0); | |
290 | fListHistCascade->Add(fHistEffMassXi); | |
291 | } | |
292 | ||
293 | if(! fHistChi2Xi ){ | |
294 | fHistChi2Xi = new TH1F("fHistChi2Xi", "Cascade #chi^{2}; #chi^{2}; Number of Cascades", 160, 0, 40); | |
295 | fListHistCascade->Add(fHistChi2Xi); | |
296 | } | |
297 | ||
298 | if(! fHistDcaXiDaughters ){ | |
299 | fHistDcaXiDaughters = new TH1F( "fHistDcaXiDaughters", "DCA between Xi Daughters; DCA (cm) ; Number of Cascades", 100, 0., 0.5); | |
300 | fListHistCascade->Add(fHistDcaXiDaughters); | |
301 | } | |
302 | ||
303 | if(! fHistDcaBachToPrimVertex) { | |
304 | fHistDcaBachToPrimVertex = new TH1F("fHistDcaBachToPrimVertex", "DCA of Bach. to Prim. Vertex;DCA (cm);Number of Cascades", 250, 0., 0.25); | |
305 | fListHistCascade->Add(fHistDcaBachToPrimVertex); | |
306 | } | |
307 | ||
308 | if(! fHistXiCosineOfPointingAngle) { | |
309 | fHistXiCosineOfPointingAngle = new TH1F("fHistXiCosineOfPointingAngle", "Cosine of Xi Pointing Angle; Cos (Xi Point.Angl);Number of Xis", 200, 0.98, 1.0); | |
310 | fListHistCascade->Add(fHistXiCosineOfPointingAngle); | |
311 | } | |
312 | ||
313 | if(! fHistXiRadius ){ | |
314 | fHistXiRadius = new TH1F( "fHistXiRadius", "Casc. decay transv. radius; r (cm); Counts" , 200, 0., 20.0 ); | |
315 | fListHistCascade->Add(fHistXiRadius); | |
316 | } | |
317 | ||
318 | ||
319 | // - Histos about ~ the "V0 part" of the cascade, coming by inheritance from AliESDv0 | |
320 | ||
321 | ||
322 | ||
323 | if (! fHistMassLambdaAsCascDghter) { | |
324 | fHistMassLambdaAsCascDghter = new TH1F("fHistMassLambdaAsCascDghter","#Lambda associated to Casc. candidates;Eff. Mass (GeV/c^{2});Counts", 160,1.00,1.8); | |
325 | fListHistCascade->Add(fHistMassLambdaAsCascDghter); | |
326 | } | |
327 | ||
328 | if (! fHistV0Chi2Xi) { | |
329 | fHistV0Chi2Xi = new TH1F("fHistV0Chi2Xi", "V0 #chi^{2}, in cascade; #chi^{2};Counts", 160, 0, 40); | |
330 | fListHistCascade->Add(fHistV0Chi2Xi); | |
331 | } | |
332 | ||
333 | if (! fHistDcaV0DaughtersXi) { | |
334 | fHistDcaV0DaughtersXi = new TH1F("fHistDcaV0DaughtersXi", "DCA between V0 daughters, in cascade;DCA (cm);Number of V0s", 120, 0., 0.6); | |
335 | fListHistCascade->Add(fHistDcaV0DaughtersXi); | |
336 | } | |
337 | ||
338 | if (! fHistDcaV0ToPrimVertexXi) { | |
339 | fHistDcaV0ToPrimVertexXi = new TH1F("fHistDcaV0ToPrimVertexXi", "DCA of V0 to Prim. Vertex, in cascade;DCA (cm);Number of Cascades", 200, 0., 1.); | |
340 | fListHistCascade->Add(fHistDcaV0ToPrimVertexXi); | |
341 | } | |
342 | ||
343 | if (! fHistV0CosineOfPointingAngleXi) { | |
344 | fHistV0CosineOfPointingAngleXi = new TH1F("fHistV0CosineOfPointingAngleXi", "Cosine of V0 Pointing Angle, in cascade;Cos(V0 Point. Angl); Counts", 200, 0.98, 1.0); | |
345 | fListHistCascade->Add(fHistV0CosineOfPointingAngleXi); | |
346 | } | |
347 | ||
348 | if (! fHistV0RadiusXi) { | |
349 | fHistV0RadiusXi = new TH1F("fHistV0RadiusXi", "V0 decay radius, in cascade; radius (cm); Counts", 200, 0, 20); | |
350 | fListHistCascade->Add(fHistV0RadiusXi); | |
351 | } | |
352 | ||
353 | if (! fHistDcaPosToPrimVertexXi) { | |
354 | fHistDcaPosToPrimVertexXi = new TH1F("fHistDcaPosToPrimVertexXi", "DCA of V0 pos daughter to Prim. Vertex;DCA (cm);Counts", 300, 0, 3); | |
355 | fListHistCascade->Add(fHistDcaPosToPrimVertexXi); | |
356 | } | |
357 | ||
358 | if (! fHistDcaNegToPrimVertexXi) { | |
359 | fHistDcaNegToPrimVertexXi = new TH1F("fHistDcaNegToPrimVertexXi", "DCA of V0 neg daughter to Prim. Vertex;DCA (cm);Counts", 300, 0, 3); | |
360 | fListHistCascade->Add(fHistDcaNegToPrimVertexXi); | |
361 | } | |
362 | ||
363 | ||
364 | ||
365 | ||
366 | // - Effective mass histos for cascades. | |
f87cd3db | 367 | // By cascade hyp |
45ee0bcc | 368 | if (! fHistMassXiMinus) { |
369 | fHistMassXiMinus = new TH1F("fHistMassXiMinus","#Xi^{-} candidates;M( #Lambda , #pi^{-} ) (GeV/c^{2});Counts", 200,1.2,2.0); | |
370 | fListHistCascade->Add(fHistMassXiMinus); | |
371 | } | |
372 | ||
373 | if (! fHistMassXiPlus) { | |
374 | fHistMassXiPlus = new TH1F("fHistMassXiPlus","#Xi^{+} candidates;M( #bar{#Lambda}^{0} , #pi^{+} ) (GeV/c^{2});Counts",200,1.2,2.0); | |
375 | fListHistCascade->Add(fHistMassXiPlus); | |
376 | } | |
377 | ||
378 | if (! fHistMassOmegaMinus) { | |
379 | fHistMassOmegaMinus = new TH1F("fHistMassOmegaMinus","#Omega^{-} candidates;M( #Lambda , K^{-} ) (GeV/c^{2});Counts", 250,1.5,2.5); | |
380 | fListHistCascade->Add(fHistMassOmegaMinus); | |
381 | } | |
382 | ||
383 | if (! fHistMassOmegaPlus) { | |
384 | fHistMassOmegaPlus = new TH1F("fHistMassOmegaPlus","#Omega^{+} candidates;M( #bar{#Lambda}^{0} , K^{+} ) (GeV/c^{2});Counts", 250,1.5,2.5); | |
385 | fListHistCascade->Add(fHistMassOmegaPlus); | |
386 | } | |
387 | ||
f87cd3db | 388 | // By cascade hyp + bachelor PID |
389 | if (! fHistMassWithCombPIDXiMinus) { | |
390 | fHistMassWithCombPIDXiMinus = new TH1F("fHistMassWithCombPIDXiMinus","#Xi^{-} candidates, with Bach. comb. PID;M( #Lambda , #pi^{-} ) (GeV/c^{2});Counts", 200,1.2,2.0); | |
391 | fListHistCascade->Add(fHistMassWithCombPIDXiMinus); | |
392 | } | |
393 | ||
394 | if (! fHistMassWithCombPIDXiPlus) { | |
395 | fHistMassWithCombPIDXiPlus = new TH1F("fHistMassWithCombPIDXiPlus","#Xi^{+} candidates, with Bach. comb. PID;M( #bar{#Lambda}^{0} , #pi^{+} ) (GeV/c^{2});Counts",200,1.2,2.0); | |
396 | fListHistCascade->Add(fHistMassWithCombPIDXiPlus); | |
397 | } | |
398 | ||
399 | if (! fHistMassWithCombPIDOmegaMinus) { | |
400 | fHistMassWithCombPIDOmegaMinus = new TH1F("fHistMassWithCombPIDOmegaMinus","#Omega^{-} candidates, with Bach. comb. PID;M( #Lambda , K^{-} ) (GeV/c^{2});Counts", 250,1.5,2.5); | |
401 | fListHistCascade->Add(fHistMassWithCombPIDOmegaMinus); | |
402 | } | |
403 | ||
404 | if (! fHistMassWithCombPIDOmegaPlus) { | |
405 | fHistMassWithCombPIDOmegaPlus = new TH1F("fHistMassWithCombPIDOmegaPlus","#Omega^{+} candidates, with Bach. comb. PID;M( #bar{#Lambda}^{0} , K^{+} ) (GeV/c^{2});Counts", 250,1.5,2.5); | |
406 | fListHistCascade->Add(fHistMassWithCombPIDOmegaPlus); | |
407 | } | |
408 | ||
45ee0bcc | 409 | |
410 | ||
411 | // - Complements for QA | |
412 | ||
413 | if(! fHistXiTransvMom ){ | |
414 | fHistXiTransvMom = new TH1F( "fHistXiTransvMom" , "Xi transverse momentum ; p_{t}(#Xi) (GeV/c); Counts", 100, 0.0, 10.0); | |
415 | fListHistCascade->Add(fHistXiTransvMom); | |
416 | } | |
417 | ||
418 | if(! fHistXiTotMom ){ | |
419 | fHistXiTotMom = new TH1F( "fHistXiTotMom" , "Xi momentum norm; p_{tot}(#Xi) (GeV/c); Counts", 150, 0.0, 15.0); | |
420 | fListHistCascade->Add(fHistXiTotMom); | |
421 | } | |
422 | ||
423 | ||
424 | if(! fHistBachTransvMom ){ | |
425 | fHistBachTransvMom = new TH1F( "fHistBachTransvMom" , "Bach. transverse momentum ; p_{t}(Bach.) (GeV/c); Counts", 100, 0.0, 5.0); | |
426 | fListHistCascade->Add(fHistBachTransvMom); | |
427 | } | |
428 | ||
429 | if(! fHistBachTotMom ){ | |
430 | fHistBachTotMom = new TH1F( "fHistBachTotMom" , "Bach. momentum norm; p_{tot}(Bach.) (GeV/c); Counts", 100, 0.0, 5.0); | |
431 | fListHistCascade->Add(fHistBachTotMom); | |
432 | } | |
433 | ||
434 | ||
435 | if(! fHistChargeXi ){ | |
436 | fHistChargeXi = new TH1F( "fHistChargeXi" , "Charge of casc. candidates ; Sign ; Counts", 5, -2.0, 3.0); | |
437 | fListHistCascade->Add(fHistChargeXi); | |
438 | } | |
439 | ||
440 | ||
441 | if (! fHistV0toXiCosineOfPointingAngle) { | |
442 | fHistV0toXiCosineOfPointingAngle = new TH1F("fHistV0toXiCosineOfPointingAngle", "Cos. of V0 Ptng Angl / Xi vtx ;Cos(V0 Point. Angl / Xi vtx); Counts", 100, 0.99, 1.0); | |
443 | fListHistCascade->Add(fHistV0toXiCosineOfPointingAngle); | |
444 | } | |
445 | ||
446 | ||
447 | if(! fHistRapXi ){ | |
448 | fHistRapXi = new TH1F( "fHistRapXi" , "Rapidity of Xi candidates ; y ; Counts", 200, -5.0, 5.0); | |
449 | fListHistCascade->Add(fHistRapXi); | |
450 | } | |
451 | ||
452 | if(! fHistRapOmega ){ | |
453 | fHistRapOmega = new TH1F( "fHistRapOmega" , "Rapidity of Omega candidates ; y ; Counts", 200, -5.0, 5.0); | |
454 | fListHistCascade->Add(fHistRapOmega); | |
455 | } | |
456 | ||
457 | if(! fHistEta ){ | |
458 | fHistEta = new TH1F( "fHistEta" , "Pseudo-rap. of casc. candidates ; #eta ; Counts", 120, -3.0, 3.0); | |
459 | fListHistCascade->Add(fHistEta); | |
460 | } | |
461 | ||
462 | if(! fHistTheta ){ | |
463 | fHistTheta = new TH1F( "fHistTheta" , "#theta of casc. candidates ; #theta (deg) ; Counts", 180, 0., 180.0); | |
464 | fListHistCascade->Add(fHistTheta); | |
465 | } | |
466 | ||
467 | if(! fHistPhi ){ | |
468 | fHistPhi = new TH1F( "fHistPhi" , "#phi of casc. candidates ; #phi (deg) ; Counts", 360, 0., 360.); | |
469 | fListHistCascade->Add(fHistPhi); | |
470 | } | |
471 | ||
472 | ||
473 | if(! f2dHistArmenteros) { | |
474 | f2dHistArmenteros = new TH2F( "f2dHistArmenteros", "#alpha_{Arm}(casc. cand.) Vs Pt_{Arm}(casc. cand.); #alpha_{Arm} ; Pt_{Arm} (GeV/c)", 140, -1.2, 1.2, 300, 0., 0.3); | |
475 | fListHistCascade->Add(f2dHistArmenteros); | |
476 | } | |
477 | ||
e9c3f0b6 | 478 | //------- |
479 | ||
45ee0bcc | 480 | if(! f2dHistEffMassLambdaVsEffMassXiMinus) { |
481 | f2dHistEffMassLambdaVsEffMassXiMinus = new TH2F( "f2dHistEffMassLambdaVsEffMassXiMinus", "M_{#Lambda} Vs M_{#Xi^{-} candidates} ; Inv. M_{#Lambda^{0}} (GeV/c^{2}) ; M( #Lambda , #pi^{-} ) (GeV/c^{2})", 300, 1.1,1.13, 200, 1.2, 2.0); | |
482 | fListHistCascade->Add(f2dHistEffMassLambdaVsEffMassXiMinus); | |
483 | } | |
484 | ||
485 | if(! f2dHistEffMassXiVsEffMassOmegaMinus) { | |
486 | f2dHistEffMassXiVsEffMassOmegaMinus = new TH2F( "f2dHistEffMassXiVsEffMassOmegaMinus", "M_{#Xi^{-} candidates} Vs M_{#Omega^{-} candidates} ; M( #Lambda , #pi^{-} ) (GeV/c^{2}) ; M( #Lambda , K^{-} ) (GeV/c^{2})", 200, 1.2, 2.0, 250, 1.5, 2.5); | |
487 | fListHistCascade->Add(f2dHistEffMassXiVsEffMassOmegaMinus); | |
488 | } | |
489 | ||
490 | if(! f2dHistEffMassLambdaVsEffMassXiPlus) { | |
491 | f2dHistEffMassLambdaVsEffMassXiPlus = new TH2F( "f2dHistEffMassLambdaVsEffMassXiPlus", "M_{#Lambda} Vs M_{#Xi^{+} candidates} ; Inv. M_{#Lambda^{0}} (GeV/c^{2}) ; M( #Lambda , #pi^{+} ) (GeV/c^{2})", 300, 1.1,1.13, 200, 1.2, 2.0); | |
492 | fListHistCascade->Add(f2dHistEffMassLambdaVsEffMassXiPlus); | |
493 | } | |
494 | ||
495 | if(! f2dHistEffMassXiVsEffMassOmegaPlus) { | |
496 | f2dHistEffMassXiVsEffMassOmegaPlus = new TH2F( "f2dHistEffMassXiVsEffMassOmegaPlus", "M_{#Xi^{+} candidates} Vs M_{#Omega^{+} candidates} ; M( #Lambda , #pi^{+} ) (GeV/c^{2}) ; M( #Lambda , K^{+} ) (GeV/c^{2})", 200, 1.2, 2.0, 250, 1.5, 2.5); | |
497 | fListHistCascade->Add(f2dHistEffMassXiVsEffMassOmegaPlus); | |
498 | } | |
499 | ||
e9c3f0b6 | 500 | //------- |
501 | ||
45ee0bcc | 502 | if(! f2dHistXiRadiusVsEffMassXiMinus) { |
e9c3f0b6 | 503 | f2dHistXiRadiusVsEffMassXiMinus = new TH2F( "f2dHistXiRadiusVsEffMassXiMinus", "Transv. R_{Xi Decay} Vs M_{#Xi^{-} candidates}; r_{cascade} (cm); M( #Lambda , #pi^{-} ) (GeV/c^{2}) ", 450, 0., 45.0, 200, 1.2, 2.0); |
45ee0bcc | 504 | fListHistCascade->Add(f2dHistXiRadiusVsEffMassXiMinus); |
505 | } | |
506 | ||
507 | if(! f2dHistXiRadiusVsEffMassXiPlus) { | |
e9c3f0b6 | 508 | f2dHistXiRadiusVsEffMassXiPlus = new TH2F( "f2dHistXiRadiusVsEffMassXiPlus", "Transv. R_{Xi Decay} Vs M_{#Xi^{+} candidates}; r_{cascade} (cm); M( #Lambda , #pi^{+} ) (GeV/c^{2}) ", 450, 0., 45.0, 200, 1.2, 2.0); |
45ee0bcc | 509 | fListHistCascade->Add(f2dHistXiRadiusVsEffMassXiPlus); |
510 | } | |
511 | ||
e9c3f0b6 | 512 | if(! f2dHistXiRadiusVsEffMassOmegaMinus) { |
513 | f2dHistXiRadiusVsEffMassOmegaMinus = new TH2F( "f2dHistXiRadiusVsEffMassOmegaMinus", "Transv. R_{Xi Decay} Vs M_{#Omega^{-} candidates}; r_{cascade} (cm); M( #Lambda , K^{-} ) (GeV/c^{2}) ", 450, 0., 45.0, 250, 1.5, 2.5); | |
514 | fListHistCascade->Add(f2dHistXiRadiusVsEffMassOmegaMinus); | |
515 | } | |
516 | ||
517 | if(! f2dHistXiRadiusVsEffMassOmegaPlus) { | |
518 | f2dHistXiRadiusVsEffMassOmegaPlus = new TH2F( "f2dHistXiRadiusVsEffMassOmegaPlus", "Transv. R_{Xi Decay} Vs M_{#Omega^{+} candidates}; r_{cascade} (cm); M( #Lambda , K^{+} ) (GeV/c^{2}) ", 450, 0., 45.0, 250, 1.5, 2.5); | |
519 | fListHistCascade->Add(f2dHistXiRadiusVsEffMassOmegaPlus); | |
520 | } | |
521 | ||
522 | ||
523 | //------- | |
45ee0bcc | 524 | |
ff0753e1 | 525 | if(! f3dHistXiPtVsEffMassVsYXiMinus) { |
526 | f3dHistXiPtVsEffMassVsYXiMinus = new TH3F( "f3dHistXiPtVsEffMassVsYXiMinus", "Pt_{cascade} Vs M_{#Xi^{-} candidates} Vs Y_{#Xi}; Pt_{cascade} (GeV/c); M( #Lambda , #pi^{-} ) (GeV/c^{2}) ;Y_{#Xi} ", 100, 0., 10.0, 200, 1.2, 2.0, 48, -1.2,1.2); | |
527 | fListHistCascade->Add(f3dHistXiPtVsEffMassVsYXiMinus); | |
e9c3f0b6 | 528 | } |
529 | ||
ff0753e1 | 530 | if(! f3dHistXiPtVsEffMassVsYXiPlus) { |
531 | f3dHistXiPtVsEffMassVsYXiPlus = new TH3F( "f3dHistXiPtVsEffMassVsYXiPlus", "Pt_{cascade} Vs M_{#Xi^{+} candidates} Vs Y_{#Xi}; Pt_{cascade} (GeV/c); M( #Lambda , #pi^{+} ) (GeV/c^{2}); Y_{#Xi}", 100, 0., 10.0, 200, 1.2, 2.0, 48, -1.2,1.2); | |
532 | fListHistCascade->Add(f3dHistXiPtVsEffMassVsYXiPlus); | |
e9c3f0b6 | 533 | } |
534 | ||
ff0753e1 | 535 | if(! f3dHistXiPtVsEffMassVsYOmegaMinus) { |
536 | f3dHistXiPtVsEffMassVsYOmegaMinus = new TH3F( "f3dHistXiPtVsEffMassVsYOmegaMinus", "Pt_{cascade} Vs M_{#Omega^{-} candidates} Vs Y_{#Omega}; Pt_{cascade} (GeV/c); M( #Lambda , K^{-} ) (GeV/c^{2}); Y_{#Omega}", 100, 0., 10.0, 250, 1.5, 2.5, 48, -1.2,1.2); | |
537 | fListHistCascade->Add(f3dHistXiPtVsEffMassVsYOmegaMinus); | |
e9c3f0b6 | 538 | } |
539 | ||
ff0753e1 | 540 | if(! f3dHistXiPtVsEffMassVsYOmegaPlus) { |
541 | f3dHistXiPtVsEffMassVsYOmegaPlus = new TH3F( "f3dHistXiPtVsEffMassVsYOmegaPlus", "Pt_{cascade} Vs M_{#Omega^{+} candidates} Vs Y_{#Omega}; Pt_{cascade} (GeV/c); M( #Lambda , K^{+} ) (GeV/c^{2}); Y_{#Omega}", 100, 0., 10.0, 250, 1.5, 2.5, 48, -1.2,1.2); | |
542 | fListHistCascade->Add(f3dHistXiPtVsEffMassVsYOmegaPlus); | |
e9c3f0b6 | 543 | } |
45ee0bcc | 544 | |
545 | ||
546 | }// end UserCreateOutputObjects | |
547 | ||
548 | ||
549 | ||
550 | ||
551 | ||
552 | ||
553 | //________________________________________________________________________ | |
554 | void AliAnalysisTaskCheckCascade::UserExec(Option_t *) | |
555 | { | |
556 | // Main loop | |
557 | // Called for each event | |
558 | ||
559 | AliESDEvent *lESDevent = 0x0; | |
560 | AliAODEvent *lAODevent = 0x0; | |
561 | Int_t ncascades = -1; | |
562 | ||
563 | ||
564 | // Connect to the InputEvent | |
565 | // After these lines, we should have an ESD/AOD event + the number of cascades in it. | |
566 | ||
567 | if(fAnalysisType == "ESD"){ | |
568 | lESDevent = dynamic_cast<AliESDEvent*>( InputEvent() ); | |
569 | if (!lESDevent) { | |
570 | Printf("ERROR: lESDevent not available \n"); | |
571 | return; | |
572 | } | |
573 | ncascades = lESDevent->GetNumberOfCascades(); | |
574 | } | |
575 | ||
576 | if(fAnalysisType == "AOD"){ | |
577 | lAODevent = dynamic_cast<AliAODEvent*>( InputEvent() ); | |
578 | if (!lAODevent) { | |
579 | Printf("ERROR: lAODevent not available \n"); | |
580 | return; | |
581 | } | |
582 | ncascades = lAODevent->GetNumberOfCascades(); | |
ff0753e1 | 583 | // printf("Number of cascade(s) = %d \n", ncascades); |
45ee0bcc | 584 | } |
585 | ||
586 | // --------------------------------------------------------------- | |
587 | // I - Initialisation of the local variables that will be needed | |
588 | ||
589 | ||
590 | // - 0th part of initialisation : around primary vertex ... | |
591 | Short_t lStatusTrackingPrimVtx = -2; | |
592 | Double_t lTrkgPrimaryVtxPos[3] = {-100.0, -100.0, -100.0}; | |
593 | Double_t lTrkgPrimaryVtxRadius3D = -500.0; | |
594 | ||
595 | Double_t lBestPrimaryVtxPos[3] = {-100.0, -100.0, -100.0}; | |
596 | Double_t lBestPrimaryVtxRadius3D = -500.0; | |
597 | ||
598 | // - 1st part of initialisation : variables needed to store AliESDCascade data members | |
599 | Double_t lEffMassXi = 0. ; | |
600 | Double_t lChi2Xi = 0. ; | |
601 | Double_t lDcaXiDaughters = 0. ; | |
602 | Double_t lXiCosineOfPointingAngle = 0. ; | |
603 | Double_t lPosXi[3] = { -1000.0, -1000.0, -1000.0 }; | |
604 | Double_t lXiRadius = 0. ; | |
605 | ||
606 | ||
607 | // - 2nd part of initialisation : about V0 part in cascades | |
608 | ||
609 | Double_t lInvMassLambdaAsCascDghter = 0.; | |
610 | Double_t lV0Chi2Xi = 0. ; | |
611 | Double_t lDcaV0DaughtersXi = 0.; | |
612 | ||
613 | Double_t lDcaBachToPrimVertexXi = 0., lDcaV0ToPrimVertexXi = 0.; | |
614 | Double_t lDcaPosToPrimVertexXi = 0.; | |
615 | Double_t lDcaNegToPrimVertexXi = 0.; | |
616 | Double_t lV0CosineOfPointingAngleXi = 0. ; | |
617 | Double_t lPosV0Xi[3] = { -1000. , -1000., -1000. }; // Position of VO coming from cascade | |
618 | Double_t lV0RadiusXi = -1000.0; | |
619 | Double_t lV0quality = 0.; | |
620 | ||
621 | ||
622 | // - 3rd part of initialisation : Effective masses | |
623 | ||
624 | Double_t lInvMassXiMinus = 0.; | |
625 | Double_t lInvMassXiPlus = 0.; | |
626 | Double_t lInvMassOmegaMinus = 0.; | |
627 | Double_t lInvMassOmegaPlus = 0.; | |
f87cd3db | 628 | |
629 | // - 4th part of initialisation : PID treatment of the bachelor track | |
630 | Bool_t lIsBachelorKaon = kFALSE; | |
631 | Bool_t lIsBachelorPion = kFALSE; | |
45ee0bcc | 632 | |
633 | ||
f87cd3db | 634 | // - 5th part of initialisation : extra info for QA |
45ee0bcc | 635 | |
636 | Double_t lXiMomX = 0., lXiMomY = 0., lXiMomZ = 0.; | |
637 | Double_t lXiTransvMom = 0. ; | |
638 | Double_t lXiTotMom = 0. ; | |
639 | ||
640 | Double_t lBachMomX = 0., lBachMomY = 0., lBachMomZ = 0.; | |
641 | Double_t lBachTransvMom = 0.; | |
642 | Double_t lBachTotMom = 0.; | |
643 | ||
644 | Short_t lChargeXi = -2; | |
645 | Double_t lV0toXiCosineOfPointingAngle = 0. ; | |
646 | ||
647 | Double_t lRapXi = -20.0, lRapOmega = -20.0, lEta = -20.0, lTheta = 360., lPhi = 720. ; | |
648 | Double_t lAlphaXi = -200., lPtArmXi = -200.0; | |
649 | ||
650 | ||
651 | ||
652 | //------------------------------------------------- | |
653 | // O - Cascade vertexer (ESD) | |
654 | ||
655 | // if(fAnalysisType == "ESD" ){ | |
656 | // lESDevent->ResetCascades(); | |
657 | // AliCascadeVertexer CascVtxer; | |
658 | // CascVtxer.V0sTracks2CascadeVertices(lESDevent); | |
659 | // } | |
660 | ||
661 | ||
662 | // --------------------------------------------------------------- | |
663 | // I - General histos (filled for any event) - (ESD) | |
664 | ||
665 | fHistTrackMultiplicity ->Fill( (InputEvent())->GetNumberOfTracks() ); | |
666 | fHistCascadeMultiplicity->Fill( ncascades ); | |
667 | ||
668 | ||
45ee0bcc | 669 | for (Int_t iXi = 0; iXi < ncascades; iXi++) |
670 | {// This is the begining of the Cascade loop (ESD or AOD) | |
671 | ||
672 | ||
673 | if(fAnalysisType == "ESD"){ | |
674 | ||
675 | // ------------------------------------- | |
676 | // II - Calcultaion Part dedicated to Xi vertices (ESD) | |
677 | ||
678 | AliESDcascade *xi = lESDevent->GetCascade(iXi); | |
679 | if (!xi) continue; | |
680 | ||
681 | // Just to know which file is currently open : locate the file containing Xi | |
682 | // cout << "Name of the file containing Xi candidate(s) :" | |
683 | // << fInputHandler->GetTree()->GetCurrentFile()->GetName() | |
684 | // << endl; | |
685 | ||
686 | ||
687 | // - II.Step 1 : Characteristics of the event : prim. Vtx + magnetic field (ESD) | |
688 | //------------- | |
689 | ||
690 | // For new code (v4-16-Release-Rev06 or trunk) | |
691 | ||
692 | const AliESDVertex *lPrimaryTrackingVtx = lESDevent->GetPrimaryVertexTracks(); | |
693 | // get the vtx stored in ESD found with tracks | |
694 | ||
695 | lPrimaryTrackingVtx->GetXYZ( lTrkgPrimaryVtxPos ); | |
696 | lTrkgPrimaryVtxRadius3D = TMath::Sqrt( lTrkgPrimaryVtxPos[0] * lTrkgPrimaryVtxPos[0] + | |
697 | lTrkgPrimaryVtxPos[1] * lTrkgPrimaryVtxPos[1] + | |
698 | lTrkgPrimaryVtxPos[2] * lTrkgPrimaryVtxPos[2] ); | |
699 | ||
700 | lStatusTrackingPrimVtx = lPrimaryTrackingVtx->GetStatus(); | |
701 | ||
702 | ||
703 | const AliESDVertex *lPrimaryBestVtx = lESDevent->GetPrimaryVertex(); | |
704 | // get the best primary vertex available for the event | |
705 | // As done in AliCascadeVertexer, we keep the one which is the best one available. | |
706 | // between : Tracking vertex > SPD vertex > TPC vertex > default SPD vertex | |
707 | // This one will be used for next calculations (DCA essentially) | |
708 | ||
709 | lPrimaryBestVtx->GetXYZ( lBestPrimaryVtxPos ); | |
710 | lBestPrimaryVtxRadius3D = TMath::Sqrt( lBestPrimaryVtxPos[0] * lBestPrimaryVtxPos[0] + | |
711 | lBestPrimaryVtxPos[1] * lBestPrimaryVtxPos[1] + | |
712 | lBestPrimaryVtxPos[2] * lBestPrimaryVtxPos[2] ); | |
713 | ||
714 | ||
715 | // For older evts | |
716 | ||
717 | // const AliESDVertex *lPrimaryTrackingVtx = lESDevent->GetPrimaryVertexTracks(); | |
718 | // get the vtx stored in ESD found with tracks | |
719 | // Double_t lTrkgPrimaryVtxPos[3] = {-100.0, -100.0, -100.0}; | |
720 | // lPrimaryTrackingVtx->GetXYZ( lTrkgPrimaryVtxPos ); | |
721 | // Double_t lTrkgPrimaryVtxRadius3D = TMath::Sqrt( lTrkgPrimaryVtxPos[0]*lTrkgPrimaryVtxPos[0] + | |
722 | // lTrkgPrimaryVtxPos[1] * lTrkgPrimaryVtxPos[1] + | |
723 | // lTrkgPrimaryVtxPos[2] * lTrkgPrimaryVtxPos[2] ); | |
724 | // | |
725 | // const AliESDVertex *lPrimarySPDVtx = lESDevent->GetPrimaryVertexSPD(); | |
726 | // get the vtx found by exclusive use of SPD | |
727 | // Double_t lSPDPrimaryVtxPos[3] = {-100.0, -100.0, -100.0}; | |
728 | // lPrimarySPDVtx->GetXYZ( lSPDPrimaryVtxPos ); | |
729 | // | |
730 | // // As done in AliCascadeVertexer, we keep, between both retrieved vertices, | |
731 | // // the one which is the best one available. | |
732 | // // This one will be used for next calculations (DCA essentially) | |
733 | // | |
734 | // Double_t lBestPrimaryVtxPos[3] = {-100.0, -100.0, -100.0}; | |
735 | // if( lPrimaryTrackingVtx->GetStatus() ) { // if tracking vtx = ok | |
736 | // lBestPrimaryVtxPos[0] = lTrkgPrimaryVtxPos[0]; | |
737 | // lBestPrimaryVtxPos[1] = lTrkgPrimaryVtxPos[1]; | |
738 | // lBestPrimaryVtxPos[2] = lTrkgPrimaryVtxPos[2]; | |
739 | // } | |
740 | // else{ | |
741 | // lBestPrimaryVtxPos[0] = lSPDPrimaryVtxPos[0]; | |
742 | // lBestPrimaryVtxPos[1] = lSPDPrimaryVtxPos[1]; | |
743 | // lBestPrimaryVtxPos[2] = lSPDPrimaryVtxPos[2]; | |
744 | // } | |
745 | // | |
746 | // Double_t lBestPrimaryVtxRadius3D = TMath::Sqrt( lBestPrimaryVtxPos[0]*lBestPrimaryVtxPos[0] + | |
747 | // lBestPrimaryVtxPos[1] * lBestPrimaryVtxPos[1] + | |
748 | // lBestPrimaryVtxPos[2] * lBestPrimaryVtxPos[2] ); | |
749 | ||
750 | // Back to normal | |
751 | ||
752 | Double_t lMagneticField = lESDevent->GetMagneticField( ); | |
753 | ||
754 | ||
755 | ||
756 | // - II.Step 2 : Assigning the necessary variables for specific AliESDcascade data members (ESD) | |
757 | //------------- | |
758 | lV0quality = 0.; | |
759 | xi->ChangeMassHypothesis(lV0quality , 3312); // default working hypothesis : cascade = Xi- decay | |
760 | ||
761 | lEffMassXi = xi->GetEffMassXi(); | |
762 | lChi2Xi = xi->GetChi2Xi(); | |
763 | lDcaXiDaughters = xi->GetDcaXiDaughters(); | |
764 | lXiCosineOfPointingAngle = xi->GetCascadeCosineOfPointingAngle( lBestPrimaryVtxPos[0], | |
765 | lBestPrimaryVtxPos[1], | |
766 | lBestPrimaryVtxPos[2] ); | |
767 | // Take care : the best available vertex should be used (like in AliCascadeVertexer) | |
768 | ||
769 | xi->GetXYZcascade( lPosXi[0], lPosXi[1], lPosXi[2] ); | |
770 | lXiRadius = TMath::Sqrt( lPosXi[0]*lPosXi[0] + lPosXi[1]*lPosXi[1] ); | |
771 | ||
772 | ||
773 | ||
774 | // - II.Step 3 : around the tracks : Bach + V0 (ESD) | |
775 | // ~ Necessary variables for ESDcascade data members coming from the ESDv0 part (inheritance) | |
776 | //------------- | |
777 | ||
778 | UInt_t lIdxPosXi = (UInt_t) TMath::Abs( xi->GetPindex() ); | |
779 | UInt_t lIdxNegXi = (UInt_t) TMath::Abs( xi->GetNindex() ); | |
780 | UInt_t lBachIdx = (UInt_t) TMath::Abs( xi->GetBindex() ); | |
781 | // Care track label can be negative in MC production (linked with the track quality) | |
782 | // However = normally, not the case for track index ... | |
783 | ||
784 | AliESDtrack *pTrackXi = lESDevent->GetTrack( lIdxPosXi ); | |
785 | AliESDtrack *nTrackXi = lESDevent->GetTrack( lIdxNegXi ); | |
786 | AliESDtrack *bachTrackXi = lESDevent->GetTrack( lBachIdx ); | |
787 | if (!pTrackXi || !nTrackXi || !bachTrackXi ) { | |
788 | Printf("ERROR: Could not retrieve one of the 3 daughter tracks of the cascade ..."); | |
789 | continue; | |
790 | } | |
791 | ||
792 | lInvMassLambdaAsCascDghter = xi->GetEffMass(); | |
793 | // This value shouldn't change, whatever the working hyp. is : Xi-, Xi+, Omega-, Omega+ | |
794 | lDcaV0DaughtersXi = xi->GetDcaV0Daughters(); | |
795 | lV0Chi2Xi = xi->GetChi2V0(); | |
796 | ||
797 | lV0CosineOfPointingAngleXi = xi->GetV0CosineOfPointingAngle( lBestPrimaryVtxPos[0], | |
798 | lBestPrimaryVtxPos[1], | |
799 | lBestPrimaryVtxPos[2] ); | |
800 | ||
801 | lDcaV0ToPrimVertexXi = xi->GetD( lBestPrimaryVtxPos[0], | |
802 | lBestPrimaryVtxPos[1], | |
803 | lBestPrimaryVtxPos[2] ); | |
804 | ||
805 | lDcaBachToPrimVertexXi = TMath::Abs( bachTrackXi->GetD( lBestPrimaryVtxPos[0], | |
806 | lBestPrimaryVtxPos[1], | |
807 | lMagneticField ) ); | |
808 | // Note : AliExternalTrackParam::GetD returns an algebraic value ... | |
809 | ||
810 | xi->GetXYZ( lPosV0Xi[0], lPosV0Xi[1], lPosV0Xi[2] ); | |
811 | lV0RadiusXi = TMath::Sqrt( lPosV0Xi[0]*lPosV0Xi[0] + lPosV0Xi[1]*lPosV0Xi[1] ); | |
812 | ||
813 | lDcaPosToPrimVertexXi = TMath::Abs( pTrackXi ->GetD( lBestPrimaryVtxPos[0], | |
814 | lBestPrimaryVtxPos[1], | |
815 | lMagneticField ) ); | |
816 | ||
817 | lDcaNegToPrimVertexXi = TMath::Abs( nTrackXi ->GetD( lBestPrimaryVtxPos[0], | |
818 | lBestPrimaryVtxPos[1], | |
819 | lMagneticField ) ); | |
820 | ||
821 | ||
822 | // - II.Step 4 : around effective masses (ESD) | |
823 | // ~ change mass hypotheses to cover all the possibilities : Xi-/+, Omega -/+ | |
824 | //------------- | |
825 | ||
2dd4214d | 826 | |
2dd4214d | 827 | if( bachTrackXi->Charge() < 0 ) { |
828 | lV0quality = 0.; | |
829 | xi->ChangeMassHypothesis(lV0quality , 3312); | |
830 | // Calculate the effective mass of the Xi- candidate. | |
831 | // pdg code 3312 = Xi- | |
832 | lInvMassXiMinus = xi->GetEffMassXi(); | |
45ee0bcc | 833 | |
2dd4214d | 834 | lV0quality = 0.; |
835 | xi->ChangeMassHypothesis(lV0quality , 3334); | |
836 | // Calculate the effective mass of the Xi- candidate. | |
837 | // pdg code 3334 = Omega- | |
838 | lInvMassOmegaMinus = xi->GetEffMassXi(); | |
839 | ||
840 | lV0quality = 0.; | |
841 | xi->ChangeMassHypothesis(lV0quality , 3312); // Back to default hyp. | |
f87cd3db | 842 | }// end if negative bachelor |
843 | ||
2dd4214d | 844 | |
845 | if( bachTrackXi->Charge() > 0 ){ | |
846 | lV0quality = 0.; | |
847 | xi->ChangeMassHypothesis(lV0quality , -3312); | |
848 | // Calculate the effective mass of the Xi+ candidate. | |
849 | // pdg code -3312 = Xi+ | |
850 | lInvMassXiPlus = xi->GetEffMassXi(); | |
851 | ||
852 | lV0quality = 0.; | |
853 | xi->ChangeMassHypothesis(lV0quality , -3334); | |
854 | // Calculate the effective mass of the Xi+ candidate. | |
855 | // pdg code -3334 = Omega+ | |
856 | lInvMassOmegaPlus = xi->GetEffMassXi(); | |
857 | ||
858 | lV0quality = 0.; | |
859 | xi->ChangeMassHypothesis(lV0quality , -3312); // Back to "default" hyp. | |
f87cd3db | 860 | }// end if positive bachelor |
861 | ||
862 | ||
863 | ||
864 | // - II.Step 5 : PID on the bachelor | |
865 | //------------- | |
866 | ||
867 | // Reasonable guess for the priors for the cascade track sample | |
868 | Double_t lPriorsGuessXi[5] = {0.0, 0.0, 2, 0, 1}; | |
869 | Double_t lPriorsGuessOmega[5] = {0.0, 0.0, 1, 1, 1}; | |
870 | AliPID pidXi; pidXi.SetPriors( lPriorsGuessXi ); | |
871 | AliPID pidOmega; pidOmega.SetPriors( lPriorsGuessOmega ); | |
872 | ||
873 | if( bachTrackXi->IsOn(AliESDtrack::kESDpid) ){ // Combined PID exists | |
874 | Double_t r[10]; bachTrackXi->GetESDpid(r); | |
875 | pidXi.SetProbabilities(r); | |
876 | pidOmega.SetProbabilities(r); | |
877 | // Check if the bachelor track is a pion | |
878 | Double_t ppion = pidXi.GetProbability(AliPID::kPion); | |
879 | if (ppion > pidXi.GetProbability(AliPID::kElectron) && | |
880 | ppion > pidXi.GetProbability(AliPID::kMuon) && | |
881 | ppion > pidXi.GetProbability(AliPID::kKaon) && | |
882 | ppion > pidXi.GetProbability(AliPID::kProton) ) lIsBachelorPion = kTRUE; | |
883 | // Check if the bachelor track is a kaon | |
884 | Double_t pkaon = pidOmega.GetProbability(AliPID::kKaon); | |
885 | if (pkaon > pidOmega.GetProbability(AliPID::kElectron) && | |
886 | pkaon > pidOmega.GetProbability(AliPID::kMuon) && | |
887 | pkaon > pidOmega.GetProbability(AliPID::kPion) && | |
888 | pkaon > pidOmega.GetProbability(AliPID::kProton) ) lIsBachelorKaon = kTRUE; | |
2dd4214d | 889 | |
f87cd3db | 890 | }// end if bachelor track with existing combined PID |
2dd4214d | 891 | |
f87cd3db | 892 | |
893 | ||
894 | // - II.Step 6 : extra info for QA (ESD) | |
45ee0bcc | 895 | // miscellaneous pieces onf info that may help regarding data quality assessment. |
896 | //------------- | |
897 | ||
898 | xi->GetPxPyPz( lXiMomX, lXiMomY, lXiMomZ ); | |
899 | lXiTransvMom = TMath::Sqrt( lXiMomX*lXiMomX + lXiMomY*lXiMomY ); | |
900 | lXiTotMom = TMath::Sqrt( lXiMomX*lXiMomX + lXiMomY*lXiMomY + lXiMomZ*lXiMomZ ); | |
901 | ||
902 | xi->GetBPxPyPz( lBachMomX, lBachMomY, lBachMomZ ); | |
903 | lBachTransvMom = TMath::Sqrt( lBachMomX*lBachMomX + lBachMomY*lBachMomY ); | |
904 | lBachTotMom = TMath::Sqrt( lBachMomX*lBachMomX + lBachMomY*lBachMomY + lBachMomZ*lBachMomZ ); | |
905 | ||
906 | lChargeXi = xi->Charge(); | |
907 | ||
908 | lV0toXiCosineOfPointingAngle = xi->GetV0CosineOfPointingAngle( lPosXi[0], lPosXi[1], lPosXi[2] ); | |
909 | ||
910 | lRapXi = xi->RapXi(); | |
911 | lRapOmega = xi->RapOmega(); | |
912 | lEta = xi->Eta(); | |
913 | lTheta = xi->Theta() *180.0/TMath::Pi(); | |
914 | lPhi = xi->Phi() *180.0/TMath::Pi(); | |
915 | lAlphaXi = xi->AlphaXi(); | |
916 | lPtArmXi = xi->PtArmXi(); | |
917 | ||
918 | ||
919 | }// end of ESD treatment | |
920 | ||
921 | ||
922 | if(fAnalysisType == "AOD"){ | |
923 | ||
924 | // ------------------------------------- | |
925 | // II - Calcultaion Part dedicated to Xi vertices (ESD) | |
926 | ||
927 | const AliAODcascade *xi = lAODevent->GetCascade(iXi); | |
928 | if (!xi) continue; | |
929 | ||
930 | // Just to know which file is currently open : locate the file containing Xi | |
931 | // cout << "Name of the file containing Xi candidate(s) :" << fesdH->GetTree()->GetCurrentFile()->GetName() << endl; | |
932 | ||
933 | ||
934 | // - II.Step 1 : Characteristics of the event : prim. Vtx + magnetic field (AOD) | |
935 | //------------- | |
936 | ||
937 | lTrkgPrimaryVtxPos[0] = -100.0; | |
938 | lTrkgPrimaryVtxPos[1] = -100.0; | |
939 | lTrkgPrimaryVtxPos[2] = -100.0; | |
940 | lTrkgPrimaryVtxRadius3D = -500. ; | |
941 | // We don't have the different prim. vertex at the AOD level -> nothing to do. | |
942 | ||
943 | const AliAODVertex *lPrimaryBestVtx = lAODevent->GetPrimaryVertex(); | |
944 | // get the best primary vertex available for the event | |
945 | // We may keep the one which is the best one available = GetVertex(0) | |
946 | // Pb with pile-up to expect | |
947 | // This one will be used for next calculations (DCA essentially) | |
948 | ||
949 | lPrimaryBestVtx->GetXYZ( lBestPrimaryVtxPos ); | |
950 | lBestPrimaryVtxRadius3D = TMath::Sqrt( lBestPrimaryVtxPos[0] * lBestPrimaryVtxPos[0] + | |
951 | lBestPrimaryVtxPos[1] * lBestPrimaryVtxPos[1] + | |
952 | lBestPrimaryVtxPos[2] * lBestPrimaryVtxPos[2] ); | |
953 | ||
954 | ||
955 | // - II.Step 2 : Assigning the necessary variables for specific AliAODcascade data members (AOD) | |
956 | //------------- | |
957 | ||
958 | lEffMassXi = xi->MassXi(); // default working hypothesis : cascade = Xi- decay | |
959 | lChi2Xi = xi->Chi2Xi(); | |
960 | lDcaXiDaughters = xi->DcaXiDaughters(); | |
961 | lXiCosineOfPointingAngle = xi->CosPointingAngleXi( lBestPrimaryVtxPos[0], | |
962 | lBestPrimaryVtxPos[1], | |
963 | lBestPrimaryVtxPos[2] ); | |
964 | // Take care : | |
965 | // the best available vertex should be used (like in AliCascadeVertexer) | |
966 | ||
967 | lPosXi[0] = xi->DecayVertexXiX(); | |
968 | lPosXi[1] = xi->DecayVertexXiY(); | |
969 | lPosXi[2] = xi->DecayVertexXiZ(); | |
970 | lXiRadius = TMath::Sqrt( lPosXi[0]*lPosXi[0] + lPosXi[1]*lPosXi[1] ); | |
971 | ||
972 | ||
973 | // - II.Step 3 : around the tracks : Bach + V0 (AOD) | |
974 | // ~ Necessary variables for AODcascade data members coming from the AODv0 part (inheritance) | |
975 | //------------- | |
976 | ||
977 | lChargeXi = xi->ChargeXi(); | |
978 | ||
979 | if( lChargeXi < 0) | |
980 | lInvMassLambdaAsCascDghter = xi->MassLambda(); | |
981 | else | |
982 | lInvMassLambdaAsCascDghter = xi->MassAntiLambda(); | |
983 | ||
984 | lDcaV0DaughtersXi = xi->DcaV0Daughters(); | |
985 | lV0Chi2Xi = xi->Chi2V0(); | |
986 | ||
987 | lV0CosineOfPointingAngleXi = xi->CosPointingAngle( lBestPrimaryVtxPos ); | |
988 | lDcaV0ToPrimVertexXi = xi->DcaV0ToPrimVertex(); | |
989 | ||
990 | lDcaBachToPrimVertexXi = xi->DcaBachToPrimVertex(); | |
991 | ||
992 | ||
993 | lPosV0Xi[0] = xi->DecayVertexV0X(); | |
994 | lPosV0Xi[1] = xi->DecayVertexV0Y(); | |
995 | lPosV0Xi[2] = xi->DecayVertexV0Z(); | |
996 | lV0RadiusXi = TMath::Sqrt( lPosV0Xi[0]*lPosV0Xi[0] + lPosV0Xi[1]*lPosV0Xi[1] ); | |
997 | ||
998 | lDcaPosToPrimVertexXi = xi->DcaPosToPrimVertex(); | |
999 | lDcaNegToPrimVertexXi = xi->DcaNegToPrimVertex(); | |
1000 | ||
1001 | ||
1002 | // - II.Step 4 : around effective masses (AOD) | |
1003 | // ~ change mass hypotheses to cover all the possibilities : Xi-/+, Omega -/+ | |
1004 | //------------- | |
1005 | ||
1006 | if( lChargeXi < 0 ) lInvMassXiMinus = xi->MassXi(); | |
1007 | if( lChargeXi > 0 ) lInvMassXiPlus = xi->MassXi(); | |
1008 | if( lChargeXi < 0 ) lInvMassOmegaMinus = xi->MassOmega(); | |
1009 | if( lChargeXi > 0 ) lInvMassOmegaPlus = xi->MassOmega(); | |
1010 | ||
1011 | ||
f87cd3db | 1012 | // - II.Step 5 : PID on the bachelor |
1013 | //------------- | |
1014 | ||
ff0753e1 | 1015 | /* |
1016 | // Reasonable guess for the priors for the cascade track sample | |
1017 | Double_t lPriorsGuessXi[5] = {0.0, 0.0, 2, 0, 1}; | |
1018 | Double_t lPriorsGuessOmega[5] = {0.0, 0.0, 1, 1, 1}; | |
1019 | AliPID pidXi; pidXi.SetPriors( lPriorsGuessXi ); | |
1020 | AliPID pidOmega; pidOmega.SetPriors( lPriorsGuessOmega ); | |
1021 | ||
1022 | const AliAODTrack *bachTrackXi = lAODevent->GetTrack( xi->GetBachID() ); | |
1023 | ||
1024 | if( bachTrackXi->IsOn(AliESDtrack::kESDpid) ){ // Combined PID exists, the AOD flags = a copy of the ESD ones | |
1025 | Double_t r[10]; bachTrackXi->GetPID(r); | |
1026 | pidXi.SetProbabilities(r); | |
1027 | pidOmega.SetProbabilities(r); | |
1028 | // Check if the bachelor track is a pion | |
1029 | Double_t ppion = pidXi.GetProbability(AliPID::kPion); | |
1030 | if (ppion > pidXi.GetProbability(AliPID::kElectron) && | |
1031 | ppion > pidXi.GetProbability(AliPID::kMuon) && | |
1032 | ppion > pidXi.GetProbability(AliPID::kKaon) && | |
1033 | ppion > pidXi.GetProbability(AliPID::kProton) ) lIsBachelorPion = kTRUE; | |
1034 | // Check if the bachelor track is a kaon | |
1035 | Double_t pkaon = pidOmega.GetProbability(AliPID::kKaon); | |
1036 | if (pkaon > pidOmega.GetProbability(AliPID::kElectron) && | |
1037 | pkaon > pidOmega.GetProbability(AliPID::kMuon) && | |
1038 | pkaon > pidOmega.GetProbability(AliPID::kPion) && | |
1039 | pkaon > pidOmega.GetProbability(AliPID::kProton) ) lIsBachelorKaon = kTRUE; | |
1040 | ||
1041 | }// end if bachelor track with existing combined PID | |
1042 | */ | |
f87cd3db | 1043 | |
f87cd3db | 1044 | |
1045 | // - II.Step 6 : extra info for QA (AOD) | |
45ee0bcc | 1046 | // miscellaneous pieces onf info that may help regarding data quality assessment. |
1047 | //------------- | |
1048 | ||
1049 | lXiMomX = xi->MomXiX(); | |
1050 | lXiMomY = xi->MomXiY(); | |
1051 | lXiMomZ = xi->MomXiZ(); | |
1052 | lXiTransvMom = TMath::Sqrt( lXiMomX*lXiMomX + lXiMomY*lXiMomY ); | |
1053 | lXiTotMom = TMath::Sqrt( lXiMomX*lXiMomX + lXiMomY*lXiMomY + lXiMomZ*lXiMomZ ); | |
1054 | ||
1055 | lBachMomX = xi->MomBachX(); | |
1056 | lBachMomY = xi->MomBachY(); | |
1057 | lBachMomZ = xi->MomBachZ(); | |
1058 | lBachTransvMom = TMath::Sqrt( lBachMomX*lBachMomX + lBachMomY*lBachMomY ); | |
1059 | lBachTotMom = TMath::Sqrt( lBachMomX*lBachMomX + lBachMomY*lBachMomY + lBachMomZ*lBachMomZ ); | |
1060 | ||
1061 | ||
1062 | lV0toXiCosineOfPointingAngle = xi->CosPointingAngle( xi->GetDecayVertexXi() ); | |
1063 | ||
1064 | lRapXi = xi->RapXi(); | |
1065 | lRapOmega = xi->RapOmega(); | |
1066 | lEta = xi->Eta(); // Will not work ! need a method Pz(), Py() Px() | |
1067 | lTheta = xi->Theta() *180.0/TMath::Pi(); // in AODcascade. | |
1068 | lPhi = xi->Phi() *180.0/TMath::Pi(); // Here, we will get eta, theta, phi for the V0 ... | |
1069 | lAlphaXi = xi->AlphaXi(); | |
1070 | lPtArmXi = xi->PtArmXi(); | |
1071 | ||
1072 | ||
1073 | }// end of AOD treatment | |
1074 | ||
1075 | ||
1076 | // ------------------------------------- | |
ff0753e1 | 1077 | // III - Filling the TH1,2,3Fs |
45ee0bcc | 1078 | |
1079 | ||
1080 | // - III.Step 1 | |
1081 | ||
1082 | fHistVtxStatus ->Fill( lStatusTrackingPrimVtx ); // 1 if tracking vtx = ok | |
1083 | ||
1084 | if( lStatusTrackingPrimVtx ){ | |
1085 | fHistPosTrkgPrimaryVtxX ->Fill( lTrkgPrimaryVtxPos[0] ); | |
1086 | fHistPosTrkgPrimaryVtxY ->Fill( lTrkgPrimaryVtxPos[1] ); | |
1087 | fHistPosTrkgPrimaryVtxZ ->Fill( lTrkgPrimaryVtxPos[2] ); | |
1088 | fHistTrkgPrimaryVtxRadius->Fill( lTrkgPrimaryVtxRadius3D ); | |
1089 | } | |
1090 | ||
1091 | fHistPosBestPrimaryVtxX ->Fill( lBestPrimaryVtxPos[0] ); | |
1092 | fHistPosBestPrimaryVtxY ->Fill( lBestPrimaryVtxPos[1] ); | |
1093 | fHistPosBestPrimaryVtxZ ->Fill( lBestPrimaryVtxPos[2] ); | |
1094 | fHistBestPrimaryVtxRadius ->Fill( lBestPrimaryVtxRadius3D ); | |
1095 | ||
1096 | f2dHistTrkgPrimVtxVsBestPrimVtx->Fill( lTrkgPrimaryVtxRadius3D, lBestPrimaryVtxRadius3D ); | |
1097 | ||
1098 | ||
1099 | // - III.Step 2 | |
1100 | fHistEffMassXi ->Fill( lEffMassXi ); | |
1101 | fHistChi2Xi ->Fill( lChi2Xi ); // Flag CascadeVtxer: Cut Variable a | |
1102 | fHistDcaXiDaughters ->Fill( lDcaXiDaughters ); // Flag CascadeVtxer: Cut Variable e | |
1103 | fHistDcaBachToPrimVertex ->Fill( lDcaBachToPrimVertexXi ); // Flag CascadeVtxer: Cut Variable d | |
1104 | fHistXiCosineOfPointingAngle ->Fill( lXiCosineOfPointingAngle ); // Flag CascadeVtxer: Cut Variable f | |
1105 | fHistXiRadius ->Fill( lXiRadius ); // Flag CascadeVtxer: Cut Variable g+h | |
1106 | ||
1107 | ||
1108 | // - III.Step 3 | |
1109 | fHistMassLambdaAsCascDghter ->Fill( lInvMassLambdaAsCascDghter ); // Flag CascadeVtxer: Cut Variable c | |
1110 | fHistV0Chi2Xi ->Fill( lV0Chi2Xi ); | |
1111 | fHistDcaV0DaughtersXi ->Fill( lDcaV0DaughtersXi ); | |
1112 | fHistV0CosineOfPointingAngleXi ->Fill( lV0CosineOfPointingAngleXi ); | |
1113 | fHistV0RadiusXi ->Fill( lV0RadiusXi ); | |
1114 | ||
1115 | fHistDcaV0ToPrimVertexXi ->Fill( lDcaV0ToPrimVertexXi ); // Flag CascadeVtxer: Cut Variable b | |
1116 | fHistDcaPosToPrimVertexXi ->Fill( lDcaPosToPrimVertexXi ); | |
1117 | fHistDcaNegToPrimVertexXi ->Fill( lDcaNegToPrimVertexXi ); | |
1118 | ||
1119 | ||
f87cd3db | 1120 | // - III.Step 4+5 |
1121 | if( lChargeXi < 0 ){ | |
1122 | fHistMassXiMinus ->Fill( lInvMassXiMinus ); | |
1123 | fHistMassOmegaMinus ->Fill( lInvMassOmegaMinus ); | |
1124 | if(lIsBachelorPion) fHistMassWithCombPIDXiMinus ->Fill( lInvMassXiMinus ); | |
1125 | if(lIsBachelorKaon) fHistMassWithCombPIDOmegaMinus ->Fill( lInvMassOmegaMinus ); | |
1126 | } | |
1127 | ||
1128 | if( lChargeXi > 0 ){ | |
1129 | fHistMassXiPlus ->Fill( lInvMassXiPlus ); | |
1130 | fHistMassOmegaPlus ->Fill( lInvMassOmegaPlus ); | |
1131 | if(lIsBachelorPion) fHistMassWithCombPIDXiPlus ->Fill( lInvMassXiPlus ); | |
1132 | if(lIsBachelorKaon) fHistMassWithCombPIDOmegaPlus ->Fill( lInvMassOmegaPlus ); | |
1133 | } | |
1134 | ||
45ee0bcc | 1135 | |
1136 | // if( bachTrackXi->Charge() < 0 ) fHistMassXiMinus ->Fill( lInvMassXiMinus ); | |
1137 | // if( bachTrackXi->Charge() > 0 ) fHistMassXiPlus ->Fill( lInvMassXiPlus ); | |
1138 | // if( bachTrackXi->Charge() < 0 ) fHistMassOmegaMinus ->Fill( lInvMassOmegaMinus ); | |
1139 | // if( bachTrackXi->Charge() > 0 ) fHistMassOmegaPlus ->Fill( lInvMassOmegaPlus ); | |
1140 | ||
1141 | ||
1142 | // - III.Step 5 | |
1143 | fHistXiTransvMom ->Fill( lXiTransvMom ); | |
1144 | fHistXiTotMom ->Fill( lXiTotMom ); | |
1145 | ||
1146 | fHistBachTransvMom ->Fill( lBachTransvMom ); | |
1147 | fHistBachTotMom ->Fill( lBachTotMom ); | |
1148 | ||
1149 | fHistChargeXi ->Fill( lChargeXi ); | |
1150 | fHistV0toXiCosineOfPointingAngle->Fill( lV0toXiCosineOfPointingAngle ); | |
1151 | ||
1152 | fHistRapXi ->Fill( lRapXi ); | |
1153 | fHistRapOmega ->Fill( lRapOmega ); | |
1154 | fHistEta ->Fill( lEta ); | |
1155 | fHistTheta ->Fill( lTheta ); | |
1156 | fHistPhi ->Fill( lPhi ); | |
1157 | ||
1158 | f2dHistArmenteros ->Fill( lAlphaXi, lPtArmXi ); | |
1159 | ||
1160 | if( lChargeXi < 0 ) { | |
1161 | f2dHistEffMassLambdaVsEffMassXiMinus->Fill( lInvMassLambdaAsCascDghter, lInvMassXiMinus ); | |
1162 | f2dHistEffMassXiVsEffMassOmegaMinus ->Fill( lInvMassXiMinus, lInvMassOmegaMinus ); | |
1163 | f2dHistXiRadiusVsEffMassXiMinus ->Fill( lXiRadius, lInvMassXiMinus ); | |
e9c3f0b6 | 1164 | f2dHistXiRadiusVsEffMassOmegaMinus ->Fill( lXiRadius, lInvMassOmegaMinus ); |
ff0753e1 | 1165 | f3dHistXiPtVsEffMassVsYXiMinus ->Fill( lXiTransvMom, lInvMassXiMinus, lRapXi ); |
1166 | f3dHistXiPtVsEffMassVsYOmegaMinus ->Fill( lXiTransvMom, lInvMassOmegaMinus, lRapOmega ); | |
45ee0bcc | 1167 | } |
1168 | else{ | |
1169 | f2dHistEffMassLambdaVsEffMassXiPlus ->Fill( lInvMassLambdaAsCascDghter, lInvMassXiPlus ); | |
1170 | f2dHistEffMassXiVsEffMassOmegaPlus ->Fill( lInvMassXiPlus, lInvMassOmegaPlus ); | |
e9c3f0b6 | 1171 | f2dHistXiRadiusVsEffMassXiPlus ->Fill( lXiRadius, lInvMassXiPlus); |
1172 | f2dHistXiRadiusVsEffMassOmegaPlus ->Fill( lXiRadius, lInvMassOmegaPlus ); | |
ff0753e1 | 1173 | f3dHistXiPtVsEffMassVsYXiPlus ->Fill( lXiTransvMom, lInvMassXiPlus, lRapXi ); |
1174 | f3dHistXiPtVsEffMassVsYOmegaPlus ->Fill( lXiTransvMom, lInvMassOmegaPlus, lRapOmega ); | |
45ee0bcc | 1175 | } |
1176 | ||
1177 | ||
1178 | }// end of the Cascade loop (ESD or AOD) | |
1179 | ||
1180 | ||
1181 | // Post output data. | |
1182 | PostData(1, fListHistCascade); | |
1183 | } | |
1184 | ||
1185 | ||
1186 | ||
1187 | ||
1188 | ||
1189 | ||
1190 | ||
1191 | ||
1192 | ||
1193 | ||
1194 | //________________________________________________________________________ | |
1195 | void AliAnalysisTaskCheckCascade::Terminate(Option_t *) | |
1196 | { | |
1197 | // Draw result to the screen | |
1198 | // Called once at the end of the query | |
1199 | ||
cd9188c9 | 1200 | TList *cRetrievedList = 0x0; |
1201 | cRetrievedList = (TList*)GetOutputData(1); | |
1202 | if(!cRetrievedList){ | |
1203 | Printf("ERROR - AliAnalysisTaskCheckCascade: ouput data container list not available\n"); | |
1204 | return; | |
1205 | } | |
1206 | ||
1207 | fHistTrackMultiplicity = dynamic_cast<TH1F*> ( cRetrievedList->FindObject("fHistTrackMultiplicity") ); | |
1208 | if (!fHistTrackMultiplicity) { | |
1209 | Printf("ERROR - AliAnalysisTaskCheckCascade: fHistTrackMultiplicity not available\n"); | |
1210 | return; | |
1211 | } | |
45ee0bcc | 1212 | |
cd9188c9 | 1213 | fHistCascadeMultiplicity = dynamic_cast<TH1F*> ( cRetrievedList->FindObject("fHistCascadeMultiplicity")); |
1214 | if (!fHistCascadeMultiplicity) { | |
1215 | Printf("ERROR - AliAnalysisTaskCheckCascade: fHistCascadeMultiplicity not available\n"); | |
1216 | return; | |
1217 | } | |
45ee0bcc | 1218 | |
cd9188c9 | 1219 | TCanvas *canCheckCascade = new TCanvas("AliAnalysisTaskCheckCascade","Multiplicity",10,10,510,510); |
1220 | canCheckCascade->cd(1)->SetLogy(); | |
45ee0bcc | 1221 | |
1222 | fHistTrackMultiplicity->SetMarkerStyle(22); | |
1223 | fHistTrackMultiplicity->DrawCopy("E"); | |
1224 | ||
1225 | fHistCascadeMultiplicity->SetMarkerStyle(26); | |
1226 | fHistCascadeMultiplicity->DrawCopy("ESAME"); | |
1227 | ||
1228 | } |