]>
Commit | Line | Data |
---|---|---|
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 | 37 | ClassImp(AliAnalysisTaskCheckV0) |
96cad837 | 38 | |
b638d7f5 | 39 | //________________________________________________________________________ |
40 | AliAnalysisTaskCheckV0::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 | 62 | AliAnalysisTaskCheckV0::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 | 88 | void 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 | 240 | void 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 | 442 | void 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 | } |