]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWG2/SPECTRA/AliAnalysisTaskCheckV0.cxx
i) Add Armenteros-Podolanski at the QA level; ii) Update the QA displayed in Terminat...
[u/mrichter/AliRoot.git] / PWG2 / SPECTRA / AliAnalysisTaskCheckV0.cxx
CommitLineData
96cad837 1/**************************************************************************
2 * Author: 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//-----------------------------------------------------------------
c8eada4f 15// AliAnalysisTaskCheckV0 class
16// This task is for QAing the V0s from ESD/AOD
96cad837 17// Origin: B.H. Nov2007, hippolyt@in2p3.fr
18//-----------------------------------------------------------------
96cad837 19#include "TList.h"
20#include "TH1F.h"
50b713dc 21#include "TH2F.h"
22
23#include "TStyle.h"
96cad837 24#include "TCanvas.h"
c8eada4f 25#include "TLegend.h"
96cad837 26
c8eada4f 27#include "AliAnalysisTaskSE.h"
96cad837 28
29#include "AliESDEvent.h"
b638d7f5 30#include "AliESDVertex.h"
c8eada4f 31#include "AliAODEvent.h"
96cad837 32
33#include "AliESDv0.h"
34
c8eada4f 35#include "AliAnalysisTaskCheckV0.h"
96cad837 36
c8eada4f 37ClassImp(AliAnalysisTaskCheckV0)
96cad837 38
b638d7f5 39//________________________________________________________________________
40AliAnalysisTaskCheckV0::AliAnalysisTaskCheckV0()
976dc218 41 : AliAnalysisTaskSE(), fAnalysisType("ESD"), fCollidingSystems(0), fListHist(),
b638d7f5 42 fHistPrimaryVertexPosX(0), fHistPrimaryVertexPosY(0), fHistPrimaryVertexPosZ(0),
43 fHistTrackMultiplicity(0), fHistV0Multiplicity(0), fHistV0OnFlyStatus(0),
50b713dc 44 fHistV0MultiplicityOff(0),
45 fHistV0Chi2Off(0),
b638d7f5 46 fHistDcaV0DaughtersOff(0), fHistV0CosineOfPointingAngleOff(0),
47 fHistV0RadiusOff(0),fHistDcaV0ToPrimVertexOff(0),
48 fHistDcaPosToPrimVertexOff(0),fHistDcaNegToPrimVertexOff(0),
9ea746fc 49 fHistMassK0sOff(0),fHistMassLambdaOff(0),fHistMassAntiLambdaOff(0),
50b713dc 50 fHistArmenterosPodolanskiOff(0),
51 fHistV0MultiplicityOn(0),
52 fHistV0Chi2On(0),
b638d7f5 53 fHistDcaV0DaughtersOn(0), fHistV0CosineOfPointingAngleOn(0),
54 fHistV0RadiusOn(0),fHistDcaV0ToPrimVertexOn(0),
55 fHistDcaPosToPrimVertexOn(0),fHistDcaNegToPrimVertexOn(0),
50b713dc 56 fHistMassK0sOn(0),fHistMassLambdaOn(0),fHistMassAntiLambdaOn(0),
57 fHistArmenterosPodolanskiOn(0)
b638d7f5 58{
59 // Dummy constructor
60}
96cad837 61//________________________________________________________________________
c8eada4f 62AliAnalysisTaskCheckV0::AliAnalysisTaskCheckV0(const char *name)
976dc218 63 : AliAnalysisTaskSE(name), fAnalysisType("ESD"), fCollidingSystems(0), fListHist(),
b638d7f5 64 fHistPrimaryVertexPosX(0), fHistPrimaryVertexPosY(0), fHistPrimaryVertexPosZ(0),
96cad837 65 fHistTrackMultiplicity(0), fHistV0Multiplicity(0), fHistV0OnFlyStatus(0),
50b713dc 66 fHistV0MultiplicityOff(0),
67 fHistV0Chi2Off(0),
96cad837 68 fHistDcaV0DaughtersOff(0), fHistV0CosineOfPointingAngleOff(0),
69 fHistV0RadiusOff(0),fHistDcaV0ToPrimVertexOff(0),
70 fHistDcaPosToPrimVertexOff(0),fHistDcaNegToPrimVertexOff(0),
9ea746fc 71 fHistMassK0sOff(0),fHistMassLambdaOff(0),fHistMassAntiLambdaOff(0),
50b713dc 72 fHistArmenterosPodolanskiOff(0),
73 fHistV0MultiplicityOn(0),
74 fHistV0Chi2On(0),
96cad837 75 fHistDcaV0DaughtersOn(0), fHistV0CosineOfPointingAngleOn(0),
76 fHistV0RadiusOn(0),fHistDcaV0ToPrimVertexOn(0),
77 fHistDcaPosToPrimVertexOn(0),fHistDcaNegToPrimVertexOn(0),
50b713dc 78 fHistMassK0sOn(0),fHistMassLambdaOn(0),fHistMassAntiLambdaOn(0),
79 fHistArmenterosPodolanskiOn(0)
96cad837 80{
81 // Constructor
976dc218 82 // Define output slots only here
83 // Output slot #1 writes into a TList container
84 DefineOutput(1, TList::Class());
96cad837 85}
86
87//________________________________________________________________________
976dc218 88void AliAnalysisTaskCheckV0::UserCreateOutputObjects()
96cad837 89{
90 // Create histograms
91 // Called once
92
93 // Distinguish Track and V0 Multiplicity !
94
95 fListHist = new TList();
b638d7f5 96
97 if (!fHistPrimaryVertexPosX) {
98 fHistPrimaryVertexPosX = new TH1F("fHistPrimaryVertexPosX", "Primary vertex position in x;Position in x (cm);Events;",100,-1,1);
99 fListHist->Add(fHistPrimaryVertexPosX);
100 }
101 if (!fHistPrimaryVertexPosY) {
102 fHistPrimaryVertexPosY = new TH1F("fHistPrimaryVertexPosY", "Primary vertex position in y;Position in y (cm);Events;",100,-1,1);
103 fListHist->Add(fHistPrimaryVertexPosY);
104 }
105 if (!fHistPrimaryVertexPosZ) {
106 fHistPrimaryVertexPosZ = new TH1F("fHistPrimaryVertexPosZ", "Primary vertex position in z;Position in z (cm);Events;",100,-1,1);
107 fListHist->Add(fHistPrimaryVertexPosZ);
108 }
96cad837 109
110 if (!fHistTrackMultiplicity) {
c8eada4f 111 if (fCollidingSystems)
112 fHistTrackMultiplicity = new TH1F("fHistTrackMultiplicity", "Multiplicity distribution;Number of tracks;Events", 200, 0, 40000);
113 else
114 fHistTrackMultiplicity = new TH1F("fHistTrackMultiplicity", "Multiplicity distribution;Number of tracks;Events", 250, 0, 250);
96cad837 115 fListHist->Add(fHistTrackMultiplicity);
116 }
117 if (!fHistV0Multiplicity) {
c8eada4f 118 if (fCollidingSystems)
119 fHistV0Multiplicity = new TH1F("fHistV0Multiplicity", "Multiplicity distribution;Number of V0s;Events", 200, 0, 40000);
120 else
121 fHistV0Multiplicity = new TH1F("fHistV0Multiplicity", "Multiplicity distribution;Number of V0s;Events", 50, 0, 50);
96cad837 122 fListHist->Add(fHistV0Multiplicity);
123 }
124 if (!fHistV0OnFlyStatus) {
125 fHistV0OnFlyStatus = new TH1F("fHistV0OnFlyStatus", "V0 On fly status;status;Number of V0s", 3, 0, 3);
126 fListHist->Add(fHistV0OnFlyStatus);
127 }
128
129 // V0 offline distributions
130 if (!fHistV0MultiplicityOff) {
c8eada4f 131 if (fCollidingSystems)
132 fHistV0MultiplicityOff = new TH1F("fHistV0MultiplicityOff", "Multiplicity distribution;Number of V0s;Events", 200, 0, 40000);
133 else
134 fHistV0MultiplicityOff = new TH1F("fHistV0MultiplicityOff", "Multiplicity distribution;Number of V0s;Events", 50, 0, 50);
96cad837 135 fListHist->Add(fHistV0MultiplicityOff);
136 }
137 if (!fHistV0Chi2Off) {
138 fHistV0Chi2Off = new TH1F("fHistV0Chi2Off", "V0 chi2;chi2;Number of V0s", 33, 0, 33);
139 fListHist->Add(fHistV0Chi2Off);
140 }
141 if (!fHistDcaV0DaughtersOff) {
142 fHistDcaV0DaughtersOff = new TH1F("fHistDcaV0DaughtersOff", "DCA between V0 daughters;DCA (cm);Number of V0s", 300, 0, 3);
143 fListHist->Add(fHistDcaV0DaughtersOff);
144 }
145 if (!fHistV0CosineOfPointingAngleOff) {
146 fHistV0CosineOfPointingAngleOff = new TH1F("fHistV0CosineOfPointingAngleOff", "V0 Cosine of Pointing Angle;Number of V0s", 200, 0, 1);
147 fListHist->Add(fHistV0CosineOfPointingAngleOff);
148 }
149 if (!fHistV0RadiusOff) {
150 fHistV0RadiusOff = new TH1F("fHistV0RadiusOff", "V0 decay radius;Radius (cm);Number of V0s", 33, 0, 33);
151 fListHist->Add(fHistV0RadiusOff);
152 }
153 if (!fHistDcaV0ToPrimVertexOff) {
154 fHistDcaV0ToPrimVertexOff = new TH1F("fHistDcaV0ToPrimVertexOff", "DCA of V0 to Prim. Vertex;DCA (cm);Number of V0s", 300, 0, 3);
155 fListHist->Add(fHistDcaV0ToPrimVertexOff);
156 }
157 if (!fHistDcaPosToPrimVertexOff) {
158 fHistDcaPosToPrimVertexOff = new TH1F("fHistDcaPosToPrimVertexOff", "DCA of V0 neg daughter to Prim. Vertex;DCA (cm);Number of V0s", 300, 0, 3);
159 fListHist->Add(fHistDcaPosToPrimVertexOff);
160 }
161 if (!fHistDcaNegToPrimVertexOff) {
162 fHistDcaNegToPrimVertexOff = new TH1F("fHistDcaNegToPrimVertexOff", "DCA of V0 pos daughter to Prim. Vertex;DCA (cm);Number of V0s", 300, 0, 3);
163 fListHist->Add(fHistDcaNegToPrimVertexOff);
164 }
165
9ea746fc 166 if (!fHistMassK0sOff) {
167 fHistMassK0sOff = new TH1F("fHistMassK0sOff","K^{0} candidates;M(#pi^{+}#pi^{-}) (GeV/c^{2});Counts",100,0.4,0.6);
168 fListHist->Add(fHistMassK0sOff);
96cad837 169 }
170 if (!fHistMassLambdaOff) {
c8eada4f 171 fHistMassLambdaOff = new TH1F("fHistMassLambdaOff","#Lambda^{0} candidates;M(p#pi^{-}) (GeV/c^{2});Counts",75,1.05,1.2);
96cad837 172 fListHist->Add(fHistMassLambdaOff);
173 }
174 if (!fHistMassAntiLambdaOff) {
c8eada4f 175 fHistMassAntiLambdaOff = new TH1F("fHistMassAntiLambdaOff","#bar{#Lambda}^{0} candidates;M(#bar{p}#pi^{+}) (GeV/c^{2});Counts",75,1.05,1.2);
96cad837 176 fListHist->Add(fHistMassAntiLambdaOff);
177 }
50b713dc 178 if (!fHistArmenterosPodolanskiOff) {
179 fHistArmenterosPodolanskiOff = new TH2F("fHistArmenterosPodolanskiOff","Armenteros-Podolanski Offline phase space;#alpha;p_{t} arm",100,-1.0,1.0,50,0,0.5);
180 fListHist->Add(fHistArmenterosPodolanskiOff);
181 }
96cad837 182
183 // V0 on-the-fly distributions
184 if (!fHistV0MultiplicityOn) {
c8eada4f 185 if (fCollidingSystems)
186 fHistV0MultiplicityOn = new TH1F("fHistV0MultiplicityOn", "Multiplicity distribution;Number of V0s;Events", 200, 0, 40000);
187 else
188 fHistV0MultiplicityOn = new TH1F("fHistV0MultiplicityOn", "Multiplicity distribution;Number of V0s;Events", 50, 0, 50);
96cad837 189 fListHist->Add(fHistV0MultiplicityOn);
190 }
191 if (!fHistV0Chi2On) {
192 fHistV0Chi2On = new TH1F("fHistV0Chi2On", "V0 chi2;chi2;Number of V0s", 33, 0, 33);
193 fListHist->Add(fHistV0Chi2On);
194 }
195 if (!fHistDcaV0DaughtersOn) {
196 fHistDcaV0DaughtersOn = new TH1F("fHistDcaV0DaughtersOn", "DCA between V0 daughters;DCA (cm);Number of V0s", 300, 0, 3);
197 fListHist->Add(fHistDcaV0DaughtersOn);
198 }
199 if (!fHistV0CosineOfPointingAngleOn) {
200 fHistV0CosineOfPointingAngleOn = new TH1F("fHistV0CosineOfPointingAngleOn", "V0 Cosine of Pointing Angle;Number of V0s", 200, 0, 1);
201 fListHist->Add(fHistV0CosineOfPointingAngleOn);
202 }
203 if (!fHistV0RadiusOn) {
204 fHistV0RadiusOn = new TH1F("fHistV0RadiusOn", "V0 decay radius;Radius (cm);Number of V0s", 33, 0, 33);
205 fListHist->Add(fHistV0RadiusOn);
206 }
207 if (!fHistDcaV0ToPrimVertexOn) {
208 fHistDcaV0ToPrimVertexOn = new TH1F("fHistDcaV0ToPrimVertexOn", "DCA of V0 to Prim. Vertex;DCA (cm);Number of V0s", 300, 0, 3);
209 fListHist->Add(fHistDcaV0ToPrimVertexOn);
210 }
211 if (!fHistDcaPosToPrimVertexOn) {
212 fHistDcaPosToPrimVertexOn = new TH1F("fHistDcaPosToPrimVertexOn", "DCA of V0 neg daughter to Prim. Vertex;DCA (cm);Number of V0s", 300, 0, 3);
213 fListHist->Add(fHistDcaPosToPrimVertexOn);
214 }
215 if (!fHistDcaNegToPrimVertexOn) {
216 fHistDcaNegToPrimVertexOn = new TH1F("fHistDcaNegToPrimVertexOn", "DCA of V0 pos daughter to Prim. Vertex;DCA (cm);Number of V0s", 300, 0, 3);
217 fListHist->Add(fHistDcaNegToPrimVertexOn);
218 }
219
9ea746fc 220 if (!fHistMassK0sOn) {
221 fHistMassK0sOn = new TH1F("fHistMassK0sOn","K^{0} candidates;M(#pi^{+}#pi^{-}) (GeV/c^{2});Counts",100,0.4,0.6);
222 fListHist->Add(fHistMassK0sOn);
96cad837 223 }
224 if (!fHistMassLambdaOn) {
c8eada4f 225 fHistMassLambdaOn = new TH1F("fHistMassLambdaOn","#Lambda^{0} candidates;M(p#pi^{-}) (GeV/c^{2});Counts",75,1.05,1.2);
96cad837 226 fListHist->Add(fHistMassLambdaOn);
227 }
228 if (!fHistMassAntiLambdaOn) {
c8eada4f 229 fHistMassAntiLambdaOn = new TH1F("fHistMassAntiLambdaOn","#bar{#Lambda}^{0} candidates;M(#bar{p}#pi^{+}) (GeV/c^{2});Counts",75,1.05,1.2);
96cad837 230 fListHist->Add(fHistMassAntiLambdaOn);
231 }
50b713dc 232 if (!fHistArmenterosPodolanskiOn) {
233 fHistArmenterosPodolanskiOn = new TH2F("fHistArmenterosPodolanskiOn","Armenteros-Podolanski Onthefly phase space;#alpha;p_{t} arm",100,-1.0,1.0,50,0,0.5);
234 fListHist->Add(fHistArmenterosPodolanskiOn);
235 }
96cad837 236
237}
238
239//________________________________________________________________________
976dc218 240void AliAnalysisTaskCheckV0::UserExec(Option_t *)
96cad837 241{
242 // Main loop
243 // Called for each event
976dc218 244 AliVEvent* lEvent = InputEvent();
245 if (!lEvent) {
246 Printf("ERROR: Event not available");
247 return;
248 }
249 fHistTrackMultiplicity->Fill(lEvent->GetNumberOfTracks());
250
251 Double_t tPrimaryVtxPosition[3];
252 Int_t nv0s = 0;
253 nv0s = lEvent->GetNumberOfV0s();
83db4a5d 254 // Printf("CheckV0 analysis task: There are %d v0s in this event",nv0s);
976dc218 255
256 Int_t lOnFlyStatus = 0, nv0sOn = 0, nv0sOff = 0;
257 Double_t lChi2V0 = 0;
258 Double_t lDcaV0Daughters = 0, lDcaV0ToPrimVertex = 0;
259 Double_t lDcaPosToPrimVertex = 0, lDcaNegToPrimVertex = 0;
260 Double_t lV0CosineOfPointingAngle = 0;
261 Double_t lV0Radius = 0;
9ea746fc 262 Double_t lInvMassK0s = 0, lInvMassLambda = 0, lInvMassAntiLambda = 0;
50b713dc 263 Double_t lAlphaV0 = 0, lPtArmV0 = 0;
96cad837 264
c8eada4f 265 if(fAnalysisType == "ESD") {
266
976dc218 267 const AliESDVertex *primaryVtx = ((AliESDEvent*)lEvent)->GetPrimaryVertex();
b638d7f5 268 tPrimaryVtxPosition[0] = primaryVtx->GetXv();
269 tPrimaryVtxPosition[1] = primaryVtx->GetYv();
270 tPrimaryVtxPosition[2] = primaryVtx->GetZv();
271
272 fHistPrimaryVertexPosX->Fill(tPrimaryVtxPosition[0]);
273 fHistPrimaryVertexPosY->Fill(tPrimaryVtxPosition[1]);
274 fHistPrimaryVertexPosZ->Fill(tPrimaryVtxPosition[2]);
275
bd7ae1e4 276 Double_t lMagneticField = ((AliESDEvent*)lEvent)->GetMagneticField();
277
c8eada4f 278 for (Int_t iV0 = 0; iV0 < nv0s; iV0++)
279 {// This is the begining of the V0 loop
976dc218 280 AliESDv0 *v0 = ((AliESDEvent*)lEvent)->GetV0(iV0);
c8eada4f 281 if (!v0) continue;
282
283 Double_t tDecayVertexV0[3]; v0->GetXYZ(tDecayVertexV0[0],tDecayVertexV0[1],tDecayVertexV0[2]);
284
285 lV0Radius = TMath::Sqrt(tDecayVertexV0[0]*tDecayVertexV0[0]+tDecayVertexV0[1]*tDecayVertexV0[1]);
286
287 UInt_t lKeyPos = (UInt_t)TMath::Abs(v0->GetPindex());
288 UInt_t lKeyNeg = (UInt_t)TMath::Abs(v0->GetNindex());
289
290 Double_t lMomPos[3]; v0->GetPPxPyPz(lMomPos[0],lMomPos[1],lMomPos[2]);
291 Double_t lMomNeg[3]; v0->GetNPxPyPz(lMomNeg[0],lMomNeg[1],lMomNeg[2]);
292
976dc218 293 AliESDtrack *pTrack=((AliESDEvent*)lEvent)->GetTrack(lKeyPos);
294 AliESDtrack *nTrack=((AliESDEvent*)lEvent)->GetTrack(lKeyNeg);
c8eada4f 295 if (!pTrack || !nTrack) {
296 Printf("ERROR: Could not retreive one of the daughter track");
297 continue;
298 }
299
bd7ae1e4 300 lDcaPosToPrimVertex = TMath::Abs(pTrack->GetD(tPrimaryVtxPosition[0],
301 tPrimaryVtxPosition[1],
302 lMagneticField) );
c8eada4f 303
bd7ae1e4 304 lDcaNegToPrimVertex = TMath::Abs(nTrack->GetD(tPrimaryVtxPosition[0],
305 tPrimaryVtxPosition[1],
306 lMagneticField) );
c8eada4f 307
308 lOnFlyStatus = v0->GetOnFlyStatus();
309 lChi2V0 = v0->GetChi2V0();
310 lDcaV0Daughters = v0->GetDcaV0Daughters();
60c8c322 311 lDcaV0ToPrimVertex = v0->GetD(tPrimaryVtxPosition[0],tPrimaryVtxPosition[1],tPrimaryVtxPosition[2]);
312 lV0CosineOfPointingAngle = v0->GetV0CosineOfPointingAngle(tPrimaryVtxPosition[0],tPrimaryVtxPosition[1],tPrimaryVtxPosition[2]);
c8eada4f 313
314 // Getting invariant mass infos directly from ESD
315 v0->ChangeMassHypothesis(310);
9ea746fc 316 lInvMassK0s = v0->GetEffMass();
c8eada4f 317 v0->ChangeMassHypothesis(3122);
318 lInvMassLambda = v0->GetEffMass();
319 v0->ChangeMassHypothesis(-3122);
320 lInvMassAntiLambda = v0->GetEffMass();
50b713dc 321 lAlphaV0 = v0->AlphaV0();
322 lPtArmV0 = v0->PtArmV0();
c8eada4f 323
324 fHistV0OnFlyStatus->Fill(lOnFlyStatus);
325 if(!lOnFlyStatus){
326 nv0sOff++;
327 fHistV0Chi2Off->Fill(lChi2V0);
328 fHistDcaV0ToPrimVertexOff->Fill(lDcaV0ToPrimVertex);
329 fHistDcaV0DaughtersOff->Fill(lDcaV0Daughters);
330 fHistV0CosineOfPointingAngleOff->Fill(lV0CosineOfPointingAngle);
331
332 fHistV0RadiusOff->Fill(lV0Radius);
333 fHistDcaPosToPrimVertexOff->Fill(lDcaPosToPrimVertex);
334 fHistDcaNegToPrimVertexOff->Fill(lDcaNegToPrimVertex);
335
336 // Filling invariant mass histos for all candidates
9ea746fc 337 fHistMassK0sOff->Fill(lInvMassK0s);
c8eada4f 338 fHistMassLambdaOff->Fill(lInvMassLambda);
339 fHistMassAntiLambdaOff->Fill(lInvMassAntiLambda);
50b713dc 340 fHistArmenterosPodolanskiOff->Fill(lAlphaV0,lPtArmV0);
c8eada4f 341 }
342 else {
343 nv0sOn++;
344 fHistV0Chi2On->Fill(lChi2V0);
345 fHistDcaV0ToPrimVertexOn->Fill(lDcaV0ToPrimVertex);
346 fHistDcaV0DaughtersOn->Fill(lDcaV0Daughters);
347 fHistV0CosineOfPointingAngleOn->Fill(lV0CosineOfPointingAngle);
348
349 fHistV0RadiusOn->Fill(lV0Radius);
350 fHistDcaPosToPrimVertexOn->Fill(lDcaPosToPrimVertex);
351 fHistDcaNegToPrimVertexOn->Fill(lDcaNegToPrimVertex);
352
353 // Filling invariant mass histos for all candidates
9ea746fc 354 fHistMassK0sOn->Fill(lInvMassK0s);
c8eada4f 355 fHistMassLambdaOn->Fill(lInvMassLambda);
356 fHistMassAntiLambdaOn->Fill(lInvMassAntiLambda);
50b713dc 357 fHistArmenterosPodolanskiOn->Fill(lAlphaV0,lPtArmV0);
c8eada4f 358 }
359 }// This is the end of the V0 loop
c8eada4f 360 } // end of "ESD" analysis
361
362 else if(fAnalysisType == "AOD") {
363
976dc218 364 const AliAODVertex *primaryVtx = ((AliAODEvent*)lEvent)->GetPrimaryVertex();
b638d7f5 365 tPrimaryVtxPosition[0] = primaryVtx->GetX();
366 tPrimaryVtxPosition[1] = primaryVtx->GetY();
367 tPrimaryVtxPosition[2] = primaryVtx->GetZ();
368
369 fHistPrimaryVertexPosX->Fill(tPrimaryVtxPosition[0]);
370 fHistPrimaryVertexPosY->Fill(tPrimaryVtxPosition[1]);
371 fHistPrimaryVertexPosZ->Fill(tPrimaryVtxPosition[2]);
372
c8eada4f 373 for (Int_t iV0 = 0; iV0 < nv0s; iV0++)
374 {// This is the begining of the V0 loop
976dc218 375 AliAODv0 *v0 = ((AliAODEvent*)lEvent)->GetV0(iV0);
c8eada4f 376 if (!v0) continue;
377
378 lV0Radius = v0->RadiusV0();
379 lDcaPosToPrimVertex = v0->DcaPosToPrimVertex();
380 lDcaNegToPrimVertex = v0->DcaNegToPrimVertex();
381
382
b638d7f5 383 lOnFlyStatus = v0->GetOnFlyStatus();
c8eada4f 384 lChi2V0 = v0->Chi2V0();
385 lDcaV0Daughters = v0->DcaV0Daughters();
386 lDcaV0ToPrimVertex = v0->DcaV0ToPrimVertex();
b638d7f5 387 lV0CosineOfPointingAngle = v0->CosPointingAngle(tPrimaryVtxPosition);
c8eada4f 388
9ea746fc 389 lInvMassK0s = v0->MassK0Short();
c8eada4f 390 lInvMassLambda = v0->MassLambda();
391 lInvMassAntiLambda = v0->MassAntiLambda();
50b713dc 392 lAlphaV0 = v0->AlphaV0();
393 lPtArmV0 = v0->PtArmV0();
c8eada4f 394
395 fHistV0OnFlyStatus->Fill(lOnFlyStatus);
396 if(!lOnFlyStatus){
397 nv0sOff++;
398 fHistV0Chi2Off->Fill(lChi2V0);
399 fHistDcaV0ToPrimVertexOff->Fill(lDcaV0ToPrimVertex);
400 fHistDcaV0DaughtersOff->Fill(lDcaV0Daughters);
401 fHistV0CosineOfPointingAngleOff->Fill(lV0CosineOfPointingAngle);
402
403 fHistV0RadiusOff->Fill(lV0Radius);
404 fHistDcaPosToPrimVertexOff->Fill(lDcaPosToPrimVertex);
405 fHistDcaNegToPrimVertexOff->Fill(lDcaNegToPrimVertex);
406
407 // Filling invariant mass histos for all candidates
9ea746fc 408 fHistMassK0sOff->Fill(lInvMassK0s);
c8eada4f 409 fHistMassLambdaOff->Fill(lInvMassLambda);
410 fHistMassAntiLambdaOff->Fill(lInvMassAntiLambda);
50b713dc 411 fHistArmenterosPodolanskiOff->Fill(lAlphaV0,lPtArmV0);
c8eada4f 412 }
413 else {
414 nv0sOn++;
415 fHistV0Chi2On->Fill(lChi2V0);
416 fHistDcaV0ToPrimVertexOn->Fill(lDcaV0ToPrimVertex);
417 fHistDcaV0DaughtersOn->Fill(lDcaV0Daughters);
418 fHistV0CosineOfPointingAngleOn->Fill(lV0CosineOfPointingAngle);
419
420 fHistV0RadiusOn->Fill(lV0Radius);
421 fHistDcaPosToPrimVertexOn->Fill(lDcaPosToPrimVertex);
422 fHistDcaNegToPrimVertexOn->Fill(lDcaNegToPrimVertex);
423
424 // Filling invariant mass histos for all candidates
9ea746fc 425 fHistMassK0sOn->Fill(lInvMassK0s);
c8eada4f 426 fHistMassLambdaOn->Fill(lInvMassLambda);
427 fHistMassAntiLambdaOn->Fill(lInvMassAntiLambda);
50b713dc 428 fHistArmenterosPodolanskiOn->Fill(lAlphaV0,lPtArmV0);
c8eada4f 429 }
430 }// This is the end of the V0 loop
c8eada4f 431 } // end of "AOD" analysis
96cad837 432
976dc218 433 fHistV0Multiplicity->Fill(nv0s);
434 fHistV0MultiplicityOff->Fill(nv0sOff);
435 fHistV0MultiplicityOn->Fill(nv0sOn);
436
96cad837 437 // Post output data.
976dc218 438 PostData(1, fListHist);
96cad837 439}
440
441//________________________________________________________________________
c8eada4f 442void AliAnalysisTaskCheckV0::Terminate(Option_t *)
96cad837 443{
444 // Draw result to the screen
445 // Called once at the end of the query
446
50b713dc 447 // Implement a decent style
448 TStyle *myStyle = new TStyle("myStyle","my style");
449 Int_t font = 42;
450 myStyle->SetCanvasColor(10);
451 myStyle->SetStatColor(10);
452 myStyle->SetPadColor(10);
453 myStyle->SetDrawBorder(0);
454 myStyle->SetCanvasBorderMode(0);
455 myStyle->SetPadBorderMode(0);
456 myStyle->SetTextFont(font);
457 myStyle->SetStatFont(font);
458 myStyle->SetLabelFont(font,"xyz");
459 myStyle->SetTitleFont(font);
460 myStyle->SetPalette(1,0);
461 myStyle->cd();
462
976dc218 463 fHistTrackMultiplicity = dynamic_cast<TH1F*> (((TList*)GetOutputData(1))->FindObject("fHistTrackMultiplicity"));
96cad837 464 if (!fHistTrackMultiplicity) {
465 Printf("ERROR: fHistTrackMultiplicity not available");
466 return;
467 }
976dc218 468 fHistV0Multiplicity = dynamic_cast<TH1F*> (((TList*)GetOutputData(1))->FindObject("fHistV0Multiplicity"));
96cad837 469 if (!fHistV0Multiplicity) {
470 Printf("ERROR: fHistV0Multiplicity not available");
471 return;
472 }
976dc218 473 fHistV0MultiplicityOff = dynamic_cast<TH1F*> (((TList*)GetOutputData(1))->FindObject("fHistV0MultiplicityOff"));
96cad837 474 if (!fHistV0MultiplicityOff) {
475 Printf("ERROR: fHistV0MultiplicityOff not available");
476 return;
477 }
976dc218 478 fHistV0MultiplicityOn = dynamic_cast<TH1F*> (((TList*)GetOutputData(1))->FindObject("fHistV0MultiplicityOn"));
96cad837 479 if (!fHistV0MultiplicityOn) {
480 Printf("ERROR: fHistV0MultiplicityOn not available");
481 return;
482 }
50b713dc 483
484 TCanvas *canCheckV0 = new TCanvas("AliAnalysisTaskCheckV0","Check V0",10,10,510,700);
485 canCheckV0->Divide(2,3);
976dc218 486 if (fHistTrackMultiplicity->GetMaximum() > 0.) canCheckV0->cd(1)->SetLogy();
b638d7f5 487 fHistTrackMultiplicity->SetMarkerStyle(26);
96cad837 488 fHistTrackMultiplicity->DrawCopy("E");
b638d7f5 489 fHistV0Multiplicity->SetMarkerStyle(25);
96cad837 490 fHistV0Multiplicity->DrawCopy("ESAME");
491 fHistV0MultiplicityOff->SetMarkerStyle(24);
492 fHistV0MultiplicityOff->DrawCopy("ESAME");
493 fHistV0MultiplicityOn->SetMarkerStyle(20);
494 fHistV0MultiplicityOn->DrawCopy("ESAME");
c8eada4f 495
a95976c8 496 TLegend *legendMultiplicity = new TLegend(0.5,0.5,0.75,0.75);
c8eada4f 497 legendMultiplicity->AddEntry(fHistTrackMultiplicity,"tracks");
498 legendMultiplicity->AddEntry(fHistV0Multiplicity,"all V^{0}");
499 legendMultiplicity->AddEntry(fHistV0MultiplicityOff,"offline V^{0}");
500 legendMultiplicity->AddEntry(fHistV0MultiplicityOn,"onthefly V^{0}");
501 legendMultiplicity->Draw();
502
9ea746fc 503 fHistMassK0sOff = dynamic_cast<TH1F*> (((TList*)GetOutputData(1))->FindObject("fHistMassK0sOff"));
504 if (!fHistMassK0sOff) {
505 Printf("ERROR: fHistMassK0sOff not available");
c8eada4f 506 return;
507 }
9ea746fc 508 fHistMassK0sOn = dynamic_cast<TH1F*> (((TList*)GetOutputData(1))->FindObject("fHistMassK0sOn"));
509 if (!fHistMassK0sOn) {
510 Printf("ERROR: fHistMassK0sOn not available");
c8eada4f 511 return;
512 }
976dc218 513 fHistMassLambdaOff = dynamic_cast<TH1F*> (((TList*)GetOutputData(1))->FindObject("fHistMassLambdaOff"));
c8eada4f 514 if (!fHistMassLambdaOff) {
515 Printf("ERROR: fHistMassLambdaOff not available");
516 return;
517 }
976dc218 518 fHistMassLambdaOn = dynamic_cast<TH1F*> (((TList*)GetOutputData(1))->FindObject("fHistMassLambdaOn"));
c8eada4f 519 if (!fHistMassLambdaOn) {
520 Printf("ERROR: fHistMassLambdaOn not available");
521 return;
522 }
976dc218 523 fHistMassAntiLambdaOff = dynamic_cast<TH1F*> (((TList*)GetOutputData(1))->FindObject("fHistMassAntiLambdaOff"));
c8eada4f 524 if (!fHistMassAntiLambdaOff) {
525 Printf("ERROR: fHistMassAntiLambdaOff not available");
526 return;
527 }
976dc218 528 fHistMassAntiLambdaOn = dynamic_cast<TH1F*> (((TList*)GetOutputData(1))->FindObject("fHistMassAntiLambdaOn"));
c8eada4f 529 if (!fHistMassAntiLambdaOn) {
530 Printf("ERROR: fHistMassAntiLambdaOn not available");
531 return;
532 }
50b713dc 533 fHistArmenterosPodolanskiOff = dynamic_cast<TH2F*> (((TList*)GetOutputData(1))->FindObject("fHistArmenterosPodolanskiOff"));
534 if (!fHistArmenterosPodolanskiOff) {
535 Printf("ERROR: fHistArmenterosPodolanskiOff not available");
536 return;
537 }
538 fHistArmenterosPodolanskiOn = dynamic_cast<TH2F*> (((TList*)GetOutputData(1))->FindObject("fHistArmenterosPodolanskiOn"));
539 if (!fHistArmenterosPodolanskiOn) {
540 Printf("ERROR: fHistArmenterosPodolanskiOn not available");
541 return;
542 }
c8eada4f 543
544 canCheckV0->cd(2);
9ea746fc 545 fHistMassK0sOn->SetMarkerStyle(20);
546 fHistMassK0sOn->DrawCopy("E");
547 fHistMassK0sOff->SetMarkerStyle(24);
548 fHistMassK0sOff->DrawCopy("ESAME");
c8eada4f 549
550 canCheckV0->cd(3);
c8eada4f 551 fHistMassLambdaOn->SetMarkerStyle(20);
a95976c8 552 fHistMassLambdaOn->DrawCopy("E");
553 fHistMassLambdaOff->SetMarkerStyle(24);
554 fHistMassLambdaOff->DrawCopy("ESAME");
c8eada4f 555
556 canCheckV0->cd(4);
c8eada4f 557 fHistMassAntiLambdaOn->SetMarkerStyle(20);
a95976c8 558 fHistMassAntiLambdaOn->DrawCopy("E");
559 fHistMassAntiLambdaOff->SetMarkerStyle(24);
560 fHistMassAntiLambdaOff->DrawCopy("ESAME");
976dc218 561
50b713dc 562 canCheckV0->cd(5);
563 fHistArmenterosPodolanskiOff->DrawCopy("COL2Z");
564 canCheckV0->cd(6);
565 fHistArmenterosPodolanskiOn->DrawCopy("COL2Z");
566
96cad837 567}