]>
Commit | Line | Data |
---|---|---|
2bb2434e | 1 | /************************************************************************** |
2 | * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * | |
e5b6e8a6 | 3 | * * |
4 | * Authors: Svein Lindal, Daniel Lohner * | |
5 | * Version 1.0 * | |
6 | * * | |
7 | * Permission to use, copy, modify and distribute this software and its * | |
8 | * documentation strictly for non-commercial purposes is hereby granted * | |
9 | * without fee, provided that the above copyright notice appears in all * | |
10 | * copies and that both the copyright notice and this permission notice * | |
11 | * appear in the supporting documentation. The authors make no claims * | |
12 | * about the suitability of this software for any purpose. It is * | |
13 | * provided "as is" without express or implied warranty. * | |
2bb2434e | 14 | **************************************************************************/ |
15 | ||
16 | //////////////////////////////////////////////// | |
17 | //--------------------------------------------- | |
18 | // QA Task for V0 Reader V1 | |
19 | //--------------------------------------------- | |
20 | //////////////////////////////////////////////// | |
21 | ||
22 | #include "AliAnalysisTaskConversionQA.h" | |
23 | #include "TChain.h" | |
24 | #include "AliAnalysisManager.h" | |
25 | #include "TParticle.h" | |
26 | #include "TVectorF.h" | |
27 | #include "AliPIDResponse.h" | |
28 | #include "TFile.h" | |
e5b6e8a6 | 29 | #include "AliESDtrackCuts.h" |
ae947965 | 30 | #include "AliAODMCParticle.h" |
31 | #include "AliAODMCHeader.h" | |
32 | ||
2bb2434e | 33 | |
34 | class iostream; | |
35 | ||
36 | using namespace std; | |
37 | ||
38 | ClassImp(AliAnalysisTaskConversionQA) | |
39 | ||
40 | //________________________________________________________________________ | |
ae947965 | 41 | AliAnalysisTaskConversionQA::AliAnalysisTaskConversionQA() : AliAnalysisTaskSE(), |
344100c4 | 42 | fV0Reader(NULL), |
43 | fConversionGammas(NULL), | |
44 | fConversionCuts(NULL), | |
45 | fEventCuts(NULL), | |
46 | fInputEvent(NULL), | |
47 | fNumberOfESDTracks(0), | |
48 | fMCEvent(NULL), | |
49 | fMCStack(NULL), | |
50 | fTreeQA(NULL), | |
51 | fIsHeavyIon(kFALSE), | |
52 | ffillTree(kFALSE), | |
53 | ffillHistograms(kFALSE), | |
54 | fOutputList(NULL), | |
55 | fTreeList(NULL), | |
56 | fESDList(NULL), | |
57 | hVertexZ(NULL), | |
58 | hNGoodESDTracks(NULL), | |
59 | hNV0Tracks(NULL), | |
60 | hNContributorsVertex(NULL), | |
61 | hITSClusterPhi(NULL), | |
62 | hGammaPt(NULL), | |
63 | hGammaPhi(NULL), | |
64 | hGammaEta(NULL), | |
65 | hGammaChi2perNDF(NULL), | |
66 | hGammaPsiPair(NULL), | |
67 | hGammaArmenteros(NULL), | |
68 | hGammaCosinePointingAngle(NULL), | |
69 | hGammaInvMass(NULL), | |
70 | hElecPt(NULL), | |
71 | hElecEta(NULL), | |
72 | hElecPhi(NULL), | |
73 | hElecNfindableClsTPC(NULL), | |
74 | hPosiNfindableClsTPC(NULL), | |
75 | hElecClsTPC(NULL), | |
76 | hPosiClsTPC(NULL), | |
77 | hElectrondEdxP(NULL), | |
78 | hElectronITSdEdxP(NULL), | |
79 | hElectronTOFP(NULL), | |
80 | hElectronNSigmadEdxP(NULL), | |
81 | hElectronNSigmadEdxEta(NULL), | |
82 | hElectronNSigmaPiondEdxP(NULL), | |
83 | hElectronNSigmaITSP(NULL), | |
84 | hElectronNSigmaTOFP(NULL), | |
85 | hPositrondEdxP(NULL), | |
86 | hPositronITSdEdxP(NULL), | |
87 | hPositronTOFP(NULL), | |
88 | hPositronNSigmadEdxP(NULL), | |
89 | hPositronNSigmadEdxEta(NULL), | |
90 | hPositronNSigmaPiondEdxP(NULL), | |
91 | hPositronNSigmaITSP(NULL), | |
92 | hPositronNSigmaTOFP(NULL), | |
93 | // hElecAsymP(NULL), | |
94 | // fTrueList(NULL), | |
95 | // hTrueResolutionR(NULL), | |
96 | // hTrueResolutionZ(NULL), | |
97 | // hTrueResolutionPhi(NULL), | |
98 | // hTrueGammaPt(NULL), | |
99 | // hTrueGammaPhi(NULL), | |
100 | // hTrueGammaEta(NULL), | |
101 | // hTrueGammaMass(NULL), | |
102 | // hTrueGammaChi2perNDF(NULL), | |
103 | // hTrueGammaPsiPair(NULL), | |
104 | // hTrueGammaQt(NULL), | |
105 | // hTrueGammaCosinePointingAngle(NULL), | |
106 | // hTrueGammaXY(NULL), | |
107 | // hTrueGammaZR(NULL), | |
108 | // hTrueElecPt(NULL), | |
109 | // hTrueElecEta(NULL), | |
110 | // hTrueElecPhi(NULL), | |
111 | // hTrueElecNfindableClsTPC(NULL), | |
112 | // hTruePosiNfindableClsTPC(NULL), | |
113 | // hTrueElecAsymP(NULL), | |
114 | fGammaPt(0), | |
115 | fGammaTheta(0), | |
116 | fGammaChi2NDF(0), | |
117 | fGammaPhotonProp(5), | |
118 | fGammaConvCoord(5), | |
119 | fDaughterProp(24), | |
120 | fKind(0), | |
121 | fIsMC(kFALSE), | |
122 | fnGammaCandidates(1), | |
123 | fMCStackPos(NULL), | |
124 | fMCStackNeg(NULL) | |
ae947965 | 125 | { |
126 | ||
127 | } | |
72395bd9 | 128 | |
2bb2434e | 129 | AliAnalysisTaskConversionQA::AliAnalysisTaskConversionQA(const char *name) : AliAnalysisTaskSE(name), |
344100c4 | 130 | fV0Reader(NULL), |
131 | fConversionGammas(NULL), | |
132 | fConversionCuts(NULL), | |
133 | fEventCuts(NULL), | |
134 | fInputEvent(NULL), | |
135 | fNumberOfESDTracks(0), | |
136 | fMCEvent(NULL), | |
137 | fMCStack(NULL), | |
138 | fTreeQA(NULL), | |
139 | fIsHeavyIon(kFALSE), | |
140 | ffillTree(kFALSE), | |
141 | ffillHistograms(kFALSE), | |
142 | fOutputList(NULL), | |
143 | fTreeList(NULL), | |
144 | fESDList(NULL), | |
145 | hVertexZ(NULL), | |
146 | hNGoodESDTracks(NULL), | |
147 | hNV0Tracks(NULL), | |
148 | hNContributorsVertex(NULL), | |
149 | hITSClusterPhi(NULL), | |
150 | hGammaPt(NULL), | |
151 | hGammaPhi(NULL), | |
152 | hGammaEta(NULL), | |
153 | hGammaChi2perNDF(NULL), | |
154 | hGammaPsiPair(NULL), | |
155 | hGammaArmenteros(NULL), | |
156 | hGammaCosinePointingAngle(NULL), | |
157 | hGammaInvMass(NULL), | |
158 | hElecPt(NULL), | |
159 | hElecEta(NULL), | |
160 | hElecPhi(NULL), | |
161 | hElecNfindableClsTPC(NULL), | |
162 | hPosiNfindableClsTPC(NULL), | |
163 | hElecClsTPC(NULL), | |
164 | hPosiClsTPC(NULL), | |
165 | hElectrondEdxP(NULL), | |
166 | hElectronITSdEdxP(NULL), | |
167 | hElectronTOFP(NULL), | |
168 | hElectronNSigmadEdxP(NULL), | |
169 | hElectronNSigmadEdxEta(NULL), | |
170 | hElectronNSigmaPiondEdxP(NULL), | |
171 | hElectronNSigmaITSP(NULL), | |
172 | hElectronNSigmaTOFP(NULL), | |
173 | hPositrondEdxP(NULL), | |
174 | hPositronITSdEdxP(NULL), | |
175 | hPositronTOFP(NULL), | |
176 | hPositronNSigmadEdxP(NULL), | |
177 | hPositronNSigmadEdxEta(NULL), | |
178 | hPositronNSigmaPiondEdxP(NULL), | |
179 | hPositronNSigmaITSP(NULL), | |
180 | hPositronNSigmaTOFP(NULL), | |
181 | // hGammaXY(NULL), | |
182 | // hGammaZR(NULL), | |
183 | // hElecAsymP(NULL), | |
184 | // fTrueList(NULL), | |
185 | // hTrueResolutionR(NULL), | |
186 | // hTrueResolutionZ(NULL), | |
187 | // hTrueResolutionPhi(NULL), | |
188 | // hTrueGammaPt(NULL), | |
189 | // hTrueGammaPhi(NULL), | |
190 | // hTrueGammaEta(NULL), | |
191 | // hTrueGammaMass(NULL), | |
192 | // hTrueGammaChi2perNDF(NULL), | |
193 | // hTrueGammaPsiPair(NULL), | |
194 | // hTrueGammaQt(NULL), | |
195 | // hTrueGammaCosinePointingAngle(NULL), | |
196 | // hTrueGammaXY(NULL), | |
197 | // hTrueGammaZR(NULL), | |
198 | // hTrueElecPt(NULL), | |
199 | // hTrueElecEta(NULL), | |
200 | // hTrueElecPhi(NULL), | |
201 | // hTrueElecNfindableClsTPC(NULL), | |
202 | // hTruePosiNfindableClsTPC(NULL), | |
203 | // hTrueElecAsymP(NULL), | |
204 | fGammaPt(0), | |
205 | fGammaTheta(0), | |
206 | fGammaChi2NDF(0), | |
207 | fGammaPhotonProp(5), | |
208 | fGammaConvCoord(5), | |
209 | fDaughterProp(24), | |
210 | fKind(0), | |
211 | fIsMC(kFALSE), | |
212 | fnGammaCandidates(1), | |
213 | fMCStackPos(NULL), | |
214 | fMCStackNeg(NULL) | |
2bb2434e | 215 | { |
344100c4 | 216 | // Default constructor |
2bb2434e | 217 | |
344100c4 | 218 | DefineInput(0, TChain::Class()); |
219 | DefineOutput(1, TList::Class()); | |
2bb2434e | 220 | } |
221 | ||
222 | //________________________________________________________________________ | |
223 | AliAnalysisTaskConversionQA::~AliAnalysisTaskConversionQA() | |
224 | { | |
344100c4 | 225 | // default deconstructor |
226 | ||
2bb2434e | 227 | } |
228 | //________________________________________________________________________ | |
229 | void AliAnalysisTaskConversionQA::UserCreateOutputObjects() | |
230 | { | |
344100c4 | 231 | // Create User Output Objects |
232 | ||
233 | if(fOutputList != NULL){ | |
234 | delete fOutputList; | |
235 | fOutputList = NULL; | |
236 | } | |
237 | if(fOutputList == NULL){ | |
238 | fOutputList = new TList(); | |
239 | fOutputList->SetOwner(kTRUE); | |
240 | } | |
241 | ||
242 | if(ffillHistograms){ | |
243 | fESDList = new TList(); | |
244 | fESDList->SetOwner(kTRUE); | |
245 | fESDList->SetName("ESD QA"); | |
246 | fOutputList->Add(fESDList); | |
247 | ||
248 | hVertexZ = new TH1F("Vertex_Z","Vertex_Z",300,-15,15); | |
249 | fESDList->Add(hVertexZ); | |
250 | hNContributorsVertex = new TH1I("ContrVertex_Z","ContrVertex_Z",3000,0,3000); | |
251 | fESDList->Add(hNContributorsVertex); | |
252 | if(fIsHeavyIon) hNGoodESDTracks = new TH1I("GoodESDTracks","GoodESDTracks",4000,0,4000); | |
253 | else hNGoodESDTracks = new TH1I("GoodESDTracks","GoodESDTracks",200,0,200); | |
254 | fESDList->Add(hNGoodESDTracks); | |
255 | if(fIsHeavyIon) hNV0Tracks = new TH1I("V0 Multiplicity","V0 Multiplicity",30000,0,30000); | |
256 | else hNV0Tracks = new TH1I("V0 Multiplicity","V0 Multiplicity",2000,0,2000); | |
257 | fESDList->Add(hNV0Tracks); | |
258 | ||
259 | hITSClusterPhi = new TH2F("ITSClusterPhi","hITSClusterPhi",72,0,2*TMath::Pi(),7,0,7); | |
260 | fESDList->Add(hITSClusterPhi); | |
261 | hGammaPt = new TH1F("Gamma_Pt","Gamma_Pt",250,0,25); | |
262 | fESDList->Add(hGammaPt); | |
263 | hGammaPhi = new TH1F("Gamma_Phi","Gamma_Phi",360,0,2*TMath::Pi()); | |
264 | fESDList->Add(hGammaPhi); | |
265 | hGammaEta = new TH1F("Gamma_Eta","Gamma_Eta",600,-1.5,1.5); | |
266 | fESDList->Add(hGammaEta); | |
267 | hGammaChi2perNDF = new TH1F("Gamma_Chi2perNDF","Gamma_Chi2perNDF",500,0,100); | |
268 | fESDList->Add(hGammaChi2perNDF); | |
269 | hGammaPsiPair = new TH1F("Gamma_PsiPair","Gamma_PsiPair",500,0,2); | |
270 | fESDList->Add(hGammaPsiPair); | |
271 | hGammaArmenteros = new TH2F("Gamma_Armenteros","Gamma_Armenteros",200,-1,1,400,0,0.1); | |
272 | fESDList->Add(hGammaArmenteros); | |
273 | hGammaCosinePointingAngle = new TH1F("Gamma_CosinePointingAngle","Gamma_CosinePointingAngle",1000,-1.,1.); | |
274 | fESDList->Add(hGammaCosinePointingAngle); | |
275 | hGammaInvMass = new TH1F( "Gamma_InvMass","",200, 0, 0.2); | |
276 | fESDList->Add(hGammaInvMass); | |
277 | hElecPt = new TH2F("Electron_Positron_Pt","Electron_Positron_Pt",250,0,25,250,0,25); | |
278 | fESDList->Add(hElecPt); | |
279 | hElecEta = new TH2F("Electron_Positron_Eta","Electron_Positron_Eta",600,-1.5,1.5,600,-1.5,1.5); | |
280 | fESDList->Add(hElecEta); | |
281 | hElecPhi = new TH2F("Electron_Positron_Phi","Electron_Positron_Phi",360,0,2*TMath::Pi(),360,0,2*TMath::Pi()); | |
282 | fESDList->Add(hElecPhi); | |
283 | hElecClsTPC = new TH1F("Electron_ClusterTPC","Electron_ClusterTPC",200,0,200); | |
284 | fESDList->Add(hElecClsTPC); | |
285 | hPosiClsTPC = new TH1F("Positron_ClusterTPC","Positron_ClusterTPC",200,0,200); | |
286 | fESDList->Add(hPosiClsTPC); | |
287 | ||
288 | hElecNfindableClsTPC = new TH1F("Electron_findableClusterTPC","Electron_findableClusterTPC",100,0,1); | |
289 | fESDList->Add(hElecNfindableClsTPC); | |
290 | hPosiNfindableClsTPC = new TH1F("Positron_findableClusterTPC","Positron_findableClusterTPC",100,0,1); | |
291 | fESDList->Add(hPosiNfindableClsTPC); | |
292 | ||
293 | hElectrondEdxP = new TH2F("Electron_dEdx_P","Electron_dEdx_P",100, 0.05, 20, 200, 0, 200); | |
294 | SetLogBinningXTH2(hElectrondEdxP); | |
295 | fESDList->Add(hElectrondEdxP); | |
296 | hPositrondEdxP = new TH2F("Positron_dEdx_P","Positron_dEdx_P",100, 0.05, 20, 200, 0, 200); | |
297 | SetLogBinningXTH2(hPositrondEdxP); | |
298 | fESDList->Add(hPositrondEdxP); | |
299 | hElectronNSigmadEdxP = new TH2F("Electron_NSigmadEdx_P","Electron_NSigmadEdx_P",100, 0.05, 20, 200, -10, 10); | |
300 | SetLogBinningXTH2(hElectronNSigmadEdxP); | |
301 | fESDList->Add(hElectronNSigmadEdxP); | |
302 | hElectronNSigmadEdxEta = new TH2F("Electron_NSigmadEdx_Eta","Electron_NSigmadEdx_Eta",140, -1.4, 1.4, 200, -10, 10); | |
303 | fESDList->Add(hElectronNSigmadEdxEta); | |
304 | hPositronNSigmadEdxP = new TH2F("Positron_NSigmadEdx_P","Positron_NSigmadEdx_P",100, 0.05, 20, 200, -10, 10); | |
305 | SetLogBinningXTH2(hPositronNSigmadEdxP); | |
306 | fESDList->Add(hPositronNSigmadEdxP); | |
307 | hPositronNSigmadEdxEta = new TH2F("Positron_NSigmadEdx_Eta","Positron_NSigmadEdx_Eta",140, -1.4, 1.4, 200, -10, 10); | |
308 | fESDList->Add(hPositronNSigmadEdxEta); | |
309 | hElectronNSigmaPiondEdxP = new TH2F("Electron_NSigmaPiondEdx_P","Electron_NSigmaPiondEdx_P",100, 0.05, 20, 200, -10, 10); | |
310 | SetLogBinningXTH2(hElectronNSigmaPiondEdxP); | |
311 | fESDList->Add(hElectronNSigmaPiondEdxP); | |
312 | hPositronNSigmaPiondEdxP = new TH2F("Positron_NSigmaPiondEdx_P","Positron_NSigmaPiondEdx_P",100, 0.05, 20, 200, -10, 10); | |
313 | SetLogBinningXTH2(hPositronNSigmaPiondEdxP); | |
314 | fESDList->Add(hPositronNSigmaPiondEdxP); | |
315 | ||
316 | hElectronTOFP = new TH2F("Electron_TOF_P","Electron_TOF_P",100, 0.05, 20, 600, -1000, 29000); | |
317 | SetLogBinningXTH2(hElectronTOFP); | |
318 | fESDList->Add(hElectronTOFP); | |
319 | hPositronTOFP = new TH2F("Positron_TOF_P","Positron_TOF_P",100, 0.05, 20, 600, -1000, 29000); | |
320 | SetLogBinningXTH2(hPositronTOFP); | |
321 | fESDList->Add(hPositronTOFP); | |
322 | hElectronNSigmaTOFP = new TH2F("Electron_NSigmaTOF_P","Electron_NSigmaTOF_P",100, 0.05, 20, 200, -10, 10); | |
323 | SetLogBinningXTH2(hElectronNSigmaTOFP); | |
324 | fESDList->Add(hElectronNSigmaTOFP); | |
325 | hPositronNSigmaTOFP = new TH2F("Positron_NSigmaTOF_P","Positron_NSigmaTOF_P",100, 0.05, 20, 200, -10, 10); | |
326 | SetLogBinningXTH2(hPositronNSigmaTOFP); | |
327 | fESDList->Add(hPositronNSigmaTOFP); | |
328 | ||
329 | hElectronITSdEdxP = new TH2F("Electron_ITSdEdx_P","Electron_ITSdEdx_P",100, 0.05, 20, 200, 0, 200); | |
330 | SetLogBinningXTH2(hElectronITSdEdxP); | |
331 | fESDList->Add(hElectronITSdEdxP); | |
332 | hPositronITSdEdxP = new TH2F("Positron_ITSdEdx_P","Positron_ITSdEdx_P",100, 0.05, 20, 200, 0, 200); | |
333 | SetLogBinningXTH2(hPositronITSdEdxP); | |
334 | fESDList->Add(hPositronITSdEdxP); | |
335 | hElectronNSigmaITSP = new TH2F("Electron_NSigmaITS_P","Electron_NSigmaITS_P",100, 0.05, 20, 200, -10, 10); | |
336 | SetLogBinningXTH2(hElectronNSigmaITSP); | |
337 | fESDList->Add(hElectronNSigmaITSP); | |
338 | hPositronNSigmaITSP = new TH2F("Positron_NSigmaITS_P","Positron_NSigmaITS_P",100, 0.05, 20, 200, -10, 10); | |
339 | SetLogBinningXTH2(hPositronNSigmaITSP); | |
340 | fESDList->Add(hPositronNSigmaITSP); | |
341 | ||
342 | // hGammaXY = new TH2F("Gamma_ConversionPoint_XY","Gamma_ConversionPoint_XY",960,-120,120,960,-120,120); | |
343 | // fESDList->Add(hGammaXY); | |
344 | // hGammaZR= new TH2F("Gamma_ConversionPoint_ZR","Gamma_ConversionPoint_ZR",1200,-150,150,480,0,120); | |
345 | // fESDList->Add(hGammaZR); | |
346 | ||
347 | ||
348 | // hElecAsymP = new TH2F("Electron_Asym_vs_P", "Electron_Asym_vs_P",200,0.,20.,200,0.,1.); | |
349 | // fESDList->Add(hElecAsymP); | |
350 | ||
351 | // if(fIsMC){ | |
352 | // fTrueList = new TList(); | |
353 | // fTrueList->SetOwner(kTRUE); | |
354 | // fTrueList->SetName("True QA"); | |
355 | // fOutputList->Add(fTrueList); | |
356 | // | |
357 | // hTrueResolutionR = new TH2F("True_ConversionPointResolution_R","True_ConversionPointResolution_R",240,0,120,200,-20,20); | |
358 | // fTrueList->Add(hTrueResolutionR); | |
359 | // hTrueResolutionZ = new TH2F("True_ConversionPointResolution_Z","True_ConversionPointResolution_Z",480,-120,120,200,-20,20); | |
360 | // fTrueList->Add(hTrueResolutionZ); | |
361 | // hTrueResolutionPhi = new TH2F("True_ConversionPointResolution_Phi","True_ConversionPointResolution_Phi",360,0,2*TMath::Pi(),200,-TMath::Pi()/30., TMath::Pi()/30.); | |
362 | // fTrueList->Add(hTrueResolutionPhi); | |
363 | // | |
364 | // hTrueGammaPt = new TH1F("True_Gamma_Pt","True_Gamma_Pt",250,0,25); | |
365 | // fTrueList->Add(hTrueGammaPt); | |
366 | // hTrueGammaPhi = new TH1F("True_Gamma_Phi","True_Gamma_Phi",360,0,2*TMath::Pi()); | |
367 | // fTrueList->Add(hTrueGammaPhi); | |
368 | // hTrueGammaEta = new TH1F("True_Gamma_Eta","True_Gamma_Eta",600,-1.5,1.5); | |
369 | // fTrueList->Add(hTrueGammaEta); | |
370 | // hTrueGammaMass = new TH1F("True_Gamma_Mass","True_Gamma_Mass",1000,0,0.3); | |
371 | // fTrueList->Add(hTrueGammaMass); | |
372 | // hTrueGammaChi2perNDF = new TH1F("True_Gamma_Chi2perNDF","True_Gamma_Chi2perNDF",500,0,100); | |
373 | // fTrueList->Add(hTrueGammaChi2perNDF); | |
374 | // hTrueGammaPsiPair = new TH1F("True_Gamma_PsiPair","True_Gamma_PsiPair",500,0,2); | |
375 | // fTrueList->Add(hTrueGammaPsiPair); | |
376 | // hTrueGammaQt = new TH1F("True_Gamma_Qt","True_Gamma_Qt",400,0,0.1); | |
377 | // fTrueList->Add(hTrueGammaQt); | |
378 | // hTrueGammaCosinePointingAngle = new TH1F("True_Gamma_CosinePointingAngle","True_Gamma_CosinePointingAngle",900,0.7,1.); | |
379 | // fTrueList->Add(hTrueGammaCosinePointingAngle); | |
380 | // hTrueGammaXY = new TH2F("True_Gamma_ConversionPoint_XY","True_Gamma_ConversionPoint_XY",960,-120,120,960,-120,120); | |
381 | // fTrueList->Add(hTrueGammaXY); | |
382 | // hTrueGammaZR= new TH2F("TrueGamma_ConversionPoint_ZR","TrueGamma_ConversionPoint_ZR",1200,-150,150,480,0,120); | |
383 | // fTrueList->Add(hTrueGammaZR); | |
384 | // | |
385 | // hTrueElecPt = new TH2F("True_Electron_Positron_Pt","True_Electron_Positron_Pt",250,0,25,250,0,25); | |
386 | // fTrueList->Add(hTrueElecPt); | |
387 | // hTrueElecEta = new TH2F("True_Electron_Positron_Eta","True_Electron_Positron_Eta",600,-1.5,1.5,600,-1.5,1.5); | |
388 | // fTrueList->Add(hTrueElecEta); | |
389 | // hTrueElecPhi = new TH2F("True_Electron_Positron_Phi","True_Electron_Positron_Phi",360,0,2*TMath::Pi(),360,0,2*TMath::Pi()); | |
390 | // fTrueList->Add(hTrueElecPhi); | |
391 | // hTrueElecNfindableClsTPC = new TH1F("True_Electron_findableClusterTPC","True_Electron_findableClusterTPC",100,0,1); | |
392 | // fTrueList->Add(hTrueElecNfindableClsTPC); | |
393 | // hTruePosiNfindableClsTPC = new TH1F("True_Positron_findableClusterTPC","True_Positron_findableClusterTPC",100,0,1); | |
394 | // fTrueList->Add(hTruePosiNfindableClsTPC); | |
395 | // hTrueElecAsymP = new TH2F("True_Electron_Asym_vs_P", "True_Electron_Asym_vs_P",200,0.,20.,200,0.,1.); | |
396 | // fTrueList->Add(hTrueElecAsymP); | |
397 | // } | |
398 | if(fConversionCuts->GetCutHistograms()){ | |
399 | fOutputList->Add(fConversionCuts->GetCutHistograms()); | |
400 | } | |
401 | } | |
402 | ||
403 | if(ffillTree){ | |
404 | fTreeList = new TList(); | |
405 | fTreeList->SetOwner(kTRUE); | |
406 | fTreeList->SetName("TreeList"); | |
407 | fOutputList->Add(fTreeList); | |
408 | ||
409 | fTreeQA = new TTree("PhotonQA","PhotonQA"); | |
410 | ||
411 | fTreeQA->Branch("daughterProp",&fDaughterProp); | |
412 | fTreeQA->Branch("recCords",&fGammaConvCoord); | |
413 | fTreeQA->Branch("photonProp",&fGammaPhotonProp); | |
414 | fTreeQA->Branch("pt",&fGammaPt,"fGammaPt/F"); | |
415 | fTreeQA->Branch("theta",&fGammaTheta,"fGammaTheta/F"); | |
416 | fTreeQA->Branch("chi2ndf",&fGammaChi2NDF,"fGammaChi2NDF/F"); | |
417 | if (fIsMC) { | |
418 | fTreeQA->Branch("kind",&fKind,"fKind/b"); | |
419 | } | |
420 | fTreeList->Add(fTreeQA); | |
421 | } | |
422 | ||
423 | fV0Reader=(AliV0ReaderV1*)AliAnalysisManager::GetAnalysisManager()->GetTask("V0ReaderV1"); | |
424 | ||
425 | PostData(1, fOutputList); | |
2bb2434e | 426 | } |
11c1e680 | 427 | //_____________________________________________________________________________ |
428 | Bool_t AliAnalysisTaskConversionQA::Notify() | |
429 | { | |
344100c4 | 430 | if(!fEventCuts->GetDoEtaShift()) return kTRUE;; // No Eta Shift requested, continue |
431 | ||
432 | if(fEventCuts->GetEtaShift() == 0.0){ // Eta Shift requested but not set, get shift automatically | |
433 | fEventCuts->GetCorrectEtaShiftFromPeriod(fV0Reader->GetPeriodName()); | |
434 | fEventCuts->DoEtaShift(kFALSE); // Eta Shift Set, make sure that it is called only once | |
435 | return kTRUE; | |
436 | } | |
437 | else{ | |
438 | printf(" Gamma Conversion QA Task %s :: Eta Shift Manually Set to %f \n\n", | |
439 | (fEventCuts->GetCutNumber()).Data(),fEventCuts->GetEtaShift()); | |
440 | fEventCuts->DoEtaShift(kFALSE); // Eta Shift Set, make sure that it is called only once | |
441 | } | |
442 | ||
443 | return kTRUE; | |
11c1e680 | 444 | } |
2bb2434e | 445 | //________________________________________________________________________ |
446 | void AliAnalysisTaskConversionQA::UserExec(Option_t *){ | |
a280ac15 | 447 | |
344100c4 | 448 | Int_t eventQuality = ((AliConvEventCuts*)fV0Reader->GetEventCuts())->GetEventQuality(); |
449 | if(eventQuality != 0){// Event Not Accepted | |
450 | return; | |
451 | } | |
452 | fInputEvent = InputEvent(); | |
453 | if(fIsMC) fMCEvent = MCEvent(); | |
454 | if(fMCEvent && fInputEvent->IsA()==AliESDEvent::Class()){ fMCStack = fMCEvent->Stack(); } | |
455 | ||
456 | Int_t eventNotAccepted = | |
7f070437 | 457 | fEventCuts->IsEventAcceptedByCut(fV0Reader->GetEventCuts(),fInputEvent,fMCEvent,fIsHeavyIon,kFALSE); |
344100c4 | 458 | if(eventNotAccepted) return; // Check Centrality, PileUp, SDD and V0AND --> Not Accepted => eventQuality = 1 |
459 | ||
460 | fConversionGammas=fV0Reader->GetReconstructedGammas(); | |
461 | ||
462 | if(fMCEvent){ | |
463 | if(fEventCuts->GetSignalRejection() != 0){ | |
464 | if(fInputEvent->IsA()==AliESDEvent::Class()){ | |
465 | fEventCuts->GetNotRejectedParticles(fEventCuts->GetSignalRejection(), | |
466 | fEventCuts->GetAcceptedHeader(), | |
467 | fMCEvent); | |
468 | } | |
469 | else if(fInputEvent->IsA()==AliAODEvent::Class()){ | |
470 | fEventCuts->GetNotRejectedParticles(fEventCuts->GetSignalRejection(), | |
471 | fEventCuts->GetAcceptedHeader(), | |
472 | fInputEvent); | |
473 | } | |
474 | } | |
475 | } | |
11c1e680 | 476 | |
344100c4 | 477 | if(ffillHistograms){ |
478 | CountTracks(); | |
479 | hVertexZ->Fill(fInputEvent->GetPrimaryVertex()->GetZ()); | |
480 | hNContributorsVertex->Fill(fEventCuts->GetNumberOfContributorsVtx(fInputEvent)); | |
481 | hNGoodESDTracks->Fill(fNumberOfESDTracks); | |
482 | hNV0Tracks->Fill(fInputEvent->GetVZEROData()->GetMTotV0A()+fInputEvent->GetVZEROData()->GetMTotV0C()); | |
483 | } | |
2bb2434e | 484 | |
344100c4 | 485 | if(fMCEvent && fInputEvent->IsA()==AliAODEvent::Class() && !(fV0Reader->AreAODsRelabeled())){ |
486 | RelabelAODPhotonCandidates(kTRUE); // In case of AODMC relabeling MC | |
487 | fV0Reader->RelabelAODs(kTRUE); | |
488 | } | |
489 | ||
490 | ||
491 | for(Int_t firstGammaIndex=0;firstGammaIndex<fConversionGammas->GetEntriesFast();firstGammaIndex++){ | |
492 | AliAODConversionPhoton *gamma=dynamic_cast<AliAODConversionPhoton*>(fConversionGammas->At(firstGammaIndex)); | |
493 | if (gamma==NULL) continue; | |
494 | if(fMCEvent && fEventCuts->GetSignalRejection() != 0){ | |
495 | if(!fEventCuts->IsParticleFromBGEvent(gamma->GetMCLabelPositive(), fMCStack, fInputEvent)) | |
496 | continue; | |
497 | if(!fEventCuts->IsParticleFromBGEvent(gamma->GetMCLabelNegative(), fMCStack, fInputEvent)) | |
498 | continue; | |
499 | } | |
500 | if(!fConversionCuts->PhotonIsSelected(gamma,fInputEvent)){ | |
501 | continue; | |
502 | } | |
503 | ||
504 | if(ffillTree) ProcessQATree(gamma); | |
505 | if(ffillHistograms) ProcessQA(gamma); | |
506 | } | |
507 | ||
508 | if(fMCEvent && fInputEvent->IsA()==AliAODEvent::Class() && !(fV0Reader->AreAODsRelabeled())){ | |
509 | RelabelAODPhotonCandidates(kFALSE); // Back to ESDMC Label | |
510 | fV0Reader->RelabelAODs(kFALSE); | |
511 | } | |
512 | ||
513 | PostData(1, fOutputList); | |
a280ac15 | 514 | } |
515 | ||
516 | ||
517 | ///________________________________________________________________________ | |
518 | void AliAnalysisTaskConversionQA::ProcessQATree(AliAODConversionPhoton *gamma){ | |
519 | ||
344100c4 | 520 | // Fill Histograms for QA and MC |
521 | AliVEvent* event = (AliVEvent*) InputEvent(); | |
522 | ||
523 | AliPIDResponse* pidResonse = ((AliConversionPhotonCuts*)fV0Reader->GetConversionCuts())->GetPIDResponse(); | |
524 | ||
525 | fGammaPt = gamma->GetPhotonPt(); | |
526 | ||
527 | fGammaTheta = gamma->Theta(); | |
528 | fGammaChi2NDF = gamma->GetChi2perNDF(); | |
529 | ||
530 | fGammaPhotonProp(0) = gamma->GetArmenterosQt(); | |
531 | fGammaPhotonProp(1) = gamma->GetArmenterosAlpha(); | |
532 | fGammaPhotonProp(2) = gamma->GetPsiPair(); | |
533 | fGammaPhotonProp(3) = fConversionCuts->GetCosineOfPointingAngle(gamma,event); | |
534 | fGammaPhotonProp(4) = gamma->GetMass(); | |
535 | ||
536 | fGammaConvCoord(0) = gamma->GetConversionX(); | |
537 | fGammaConvCoord(1) = gamma->GetConversionY(); | |
538 | fGammaConvCoord(2) = gamma->GetConversionZ(); | |
539 | fGammaConvCoord(3) = gamma->GetConversionRadius(); | |
540 | fGammaConvCoord(4) = gamma->GetPhotonPhi(); | |
541 | ||
542 | AliVTrack * negTrack = fConversionCuts->GetTrack(event, gamma->GetTrackLabelNegative()); | |
543 | AliVTrack * posTrack = fConversionCuts->GetTrack(event, gamma->GetTrackLabelPositive()); | |
544 | ||
545 | ||
546 | if(!negTrack||!posTrack)return; | |
547 | ||
548 | fKind = 9; | |
549 | if(fMCEvent && fInputEvent->IsA()==AliESDEvent::Class()){ | |
550 | fKind = IsTruePhotonESD(gamma); | |
551 | } else if (fMCEvent && fInputEvent->IsA()==AliAODEvent::Class()){ | |
552 | // cout << "entering IsTruePhotonAOD" << endl; | |
553 | fKind = IsTruePhotonAOD(gamma); | |
554 | } | |
a280ac15 | 555 | |
344100c4 | 556 | fDaughterProp(0) = posTrack->Pt(); |
557 | fDaughterProp(7) = negTrack->Pt(); | |
558 | fDaughterProp(1) = posTrack->Theta(); | |
559 | fDaughterProp(8) = negTrack->Theta(); | |
560 | // dEdx TPC | |
561 | fDaughterProp(2) = posTrack->GetTPCsignal(); | |
562 | fDaughterProp(3) = pidResonse->NumberOfSigmasTPC(posTrack,AliPID::kElectron); | |
563 | fDaughterProp(22) = pidResonse->NumberOfSigmasTPC(posTrack,AliPID::kPion); | |
564 | fDaughterProp(9) = negTrack->GetTPCsignal(); | |
565 | fDaughterProp(10) = pidResonse->NumberOfSigmasTPC(negTrack,AliPID::kElectron); | |
566 | fDaughterProp(23) = pidResonse->NumberOfSigmasTPC(negTrack,AliPID::kPion); | |
567 | Int_t nPosClusterITS = 0; | |
568 | Int_t nNegClusterITS = 0; | |
569 | for(Int_t itsLayer = 0; itsLayer<6;itsLayer++){ | |
570 | if(TESTBIT(negTrack->GetITSClusterMap(),itsLayer)){ | |
571 | nNegClusterITS++; | |
572 | } | |
573 | if(TESTBIT(posTrack->GetITSClusterMap(),itsLayer)){ | |
574 | nPosClusterITS++; | |
575 | } | |
576 | } | |
577 | ||
578 | // ITS signal | |
579 | fDaughterProp(14) = (Float_t)nPosClusterITS; | |
580 | fDaughterProp(15) = (Float_t)nNegClusterITS; | |
581 | if (nPosClusterITS > 0 ){ | |
582 | fDaughterProp(16) = posTrack->GetITSsignal(); | |
583 | fDaughterProp(20) = pidResonse->NumberOfSigmasITS(posTrack,AliPID::kElectron); | |
584 | } else { | |
585 | fDaughterProp(16) = 1000; | |
586 | fDaughterProp(20) = 20; | |
587 | } | |
588 | if (nNegClusterITS > 0 ){ | |
589 | fDaughterProp(17) = negTrack->GetITSsignal(); | |
590 | fDaughterProp(21) = pidResonse->NumberOfSigmasITS(negTrack,AliPID::kElectron); | |
591 | } else { | |
592 | fDaughterProp(17) = 1000; | |
593 | fDaughterProp(21) = 20; | |
594 | } | |
a280ac15 | 595 | |
344100c4 | 596 | // TOF |
597 | if((posTrack->GetStatus() & AliESDtrack::kTOFpid) && !(posTrack->GetStatus() & AliESDtrack::kTOFmismatch)){ | |
598 | Double_t t0pos = pidResonse->GetTOFResponse().GetStartTime(posTrack->P()); | |
599 | Double_t timesPos[9]; | |
600 | posTrack->GetIntegratedTimes(timesPos); | |
601 | Double_t TOFsignalPos = posTrack->GetTOFsignal(); | |
602 | Double_t dTpos = TOFsignalPos - t0pos - timesPos[0]; | |
603 | fDaughterProp(4) = dTpos; | |
604 | fDaughterProp(5) = pidResonse->NumberOfSigmasTOF(posTrack, AliPID::kElectron); | |
605 | } else { | |
606 | fDaughterProp(4) = 20000; | |
607 | fDaughterProp(5) = -20; | |
608 | } | |
609 | if((negTrack->GetStatus() & AliESDtrack::kTOFpid) && !(negTrack->GetStatus() & AliESDtrack::kTOFmismatch)){ | |
610 | Double_t t0neg = pidResonse->GetTOFResponse().GetStartTime(negTrack->P()); | |
611 | Double_t timesNeg[9]; | |
612 | negTrack->GetIntegratedTimes(timesNeg); | |
613 | Double_t TOFsignalNeg = negTrack->GetTOFsignal(); | |
614 | Double_t dTneg = TOFsignalNeg - t0neg - timesNeg[0]; | |
615 | fDaughterProp(11) = dTneg; | |
616 | fDaughterProp(12) = pidResonse->NumberOfSigmasTOF(negTrack, AliPID::kElectron); | |
617 | } else { | |
618 | fDaughterProp(11) = 20000; | |
619 | fDaughterProp(12) = -20; | |
620 | } | |
621 | ||
622 | fDaughterProp(6) = (Float_t)posTrack->GetTPCClusterInfo(2,0,fConversionCuts->GetFirstTPCRow(gamma->GetConversionRadius())); | |
623 | fDaughterProp(18) = posTrack->GetNcls(1); | |
624 | fDaughterProp(13) = (Float_t)negTrack->GetTPCClusterInfo(2,0,fConversionCuts->GetFirstTPCRow(gamma->GetConversionRadius())); | |
625 | fDaughterProp(19) = negTrack->GetNcls(1); | |
626 | ||
627 | if (fTreeQA){ | |
628 | fTreeQA->Fill(); | |
629 | } | |
2bb2434e | 630 | } |
a280ac15 | 631 | |
e5b6e8a6 | 632 | //_____________________________________________________________________________________________________ |
a280ac15 | 633 | void AliAnalysisTaskConversionQA::ProcessQA(AliAODConversionPhoton *gamma){ |
e5b6e8a6 | 634 | |
344100c4 | 635 | AliPIDResponse* pidResonse = ((AliConversionPhotonCuts*)fV0Reader->GetConversionCuts())->GetPIDResponse(); |
636 | ||
637 | // Fill Histograms for QA and MC | |
638 | ||
639 | hGammaPt->Fill(gamma->GetPhotonPt()); | |
640 | hGammaPhi->Fill(gamma->GetPhotonPhi()); | |
641 | hGammaEta->Fill(gamma->Eta()); | |
642 | hGammaChi2perNDF->Fill(gamma->GetChi2perNDF()); | |
643 | hGammaPsiPair->Fill(gamma->GetPsiPair()); | |
644 | hGammaArmenteros->Fill(gamma->GetArmenterosAlpha(),gamma->GetArmenterosQt()); | |
645 | hGammaCosinePointingAngle->Fill(fConversionCuts->GetCosineOfPointingAngle(gamma,fInputEvent)); | |
646 | hGammaInvMass->Fill(gamma->GetMass()); | |
647 | // hGammaXY->Fill(gamma->GetConversionX(),gamma->GetConversionY()); | |
648 | // hGammaZR->Fill(gamma->GetConversionZ(),gamma->GetConversionRadius()); | |
649 | ||
650 | AliVTrack * negTrack = fConversionCuts->GetTrack(fInputEvent, gamma->GetTrackLabelNegative()); | |
651 | AliVTrack * posTrack = fConversionCuts->GetTrack(fInputEvent, gamma->GetTrackLabelPositive()); | |
652 | if(!negTrack||!posTrack)return; | |
653 | ||
654 | ||
655 | hElecPt->Fill(negTrack->Pt(),posTrack->Pt()); | |
656 | hElecEta->Fill(negTrack->Eta(),posTrack->Eta()); | |
657 | hElecPhi->Fill(negTrack->Phi(),posTrack->Phi()); | |
658 | ||
659 | hElecNfindableClsTPC->Fill((Float_t)posTrack->GetTPCClusterInfo(2,0,fConversionCuts->GetFirstTPCRow(gamma->GetConversionRadius()))); | |
660 | hPosiNfindableClsTPC->Fill((Float_t)negTrack->GetTPCClusterInfo(2,0,fConversionCuts->GetFirstTPCRow(gamma->GetConversionRadius()))); | |
661 | hElecClsTPC->Fill(negTrack->GetNcls(1)); | |
662 | hPosiClsTPC->Fill(posTrack->GetNcls(1)); | |
663 | //TPC dEdx | |
664 | hElectrondEdxP->Fill(negTrack->P() ,negTrack->GetTPCsignal()); | |
665 | hElectronNSigmadEdxP->Fill(negTrack->P() ,pidResonse->NumberOfSigmasTPC(negTrack, AliPID::kElectron)); | |
666 | hElectronNSigmadEdxEta->Fill(negTrack->Eta() ,pidResonse->NumberOfSigmasTPC(negTrack, AliPID::kElectron)); | |
667 | hElectronNSigmaPiondEdxP->Fill(negTrack->P() ,pidResonse->NumberOfSigmasTPC(negTrack, AliPID::kPion)); | |
668 | hPositrondEdxP->Fill(posTrack->P() ,posTrack->GetTPCsignal()); | |
669 | hPositronNSigmadEdxP->Fill(posTrack->P() ,pidResonse->NumberOfSigmasTPC(posTrack, AliPID::kElectron)); | |
670 | hPositronNSigmadEdxEta->Fill(posTrack->Eta() ,pidResonse->NumberOfSigmasTPC(posTrack, AliPID::kElectron)); | |
671 | hPositronNSigmaPiondEdxP->Fill(posTrack->P() ,pidResonse->NumberOfSigmasTPC(posTrack, AliPID::kPion)); | |
672 | ||
673 | //TOF signal | |
674 | if((negTrack->GetStatus() & AliESDtrack::kTOFpid) && !(negTrack->GetStatus() & AliESDtrack::kTOFmismatch)){ | |
675 | Double_t t0neg = pidResonse->GetTOFResponse().GetStartTime(negTrack->P()); | |
676 | Double_t timesNeg[9]; | |
677 | negTrack->GetIntegratedTimes(timesNeg); | |
678 | Double_t TOFsignalNeg = negTrack->GetTOFsignal(); | |
679 | Double_t dTneg = TOFsignalNeg - t0neg - timesNeg[0]; | |
680 | hElectronTOFP->Fill(negTrack->P() ,dTneg); | |
681 | hElectronNSigmaTOFP->Fill(negTrack->P() ,pidResonse->NumberOfSigmasTOF(negTrack, AliPID::kElectron)); | |
682 | } | |
683 | if((posTrack->GetStatus() & AliESDtrack::kTOFpid) && !(posTrack->GetStatus() & AliESDtrack::kTOFmismatch)){ | |
684 | Double_t t0pos = pidResonse->GetTOFResponse().GetStartTime(posTrack->P()); | |
685 | Double_t timesPos[9]; | |
686 | posTrack->GetIntegratedTimes(timesPos); | |
687 | Double_t TOFsignalPos = posTrack->GetTOFsignal(); | |
688 | Double_t dTpos = TOFsignalPos - t0pos - timesPos[0]; | |
689 | hPositronTOFP->Fill(posTrack->P() ,dTpos); | |
690 | hPositronNSigmaTOFP->Fill(posTrack->P() ,pidResonse->NumberOfSigmasTOF(posTrack, AliPID::kElectron)); | |
691 | } | |
692 | ||
693 | Int_t nPosClusterITS = 0; | |
694 | Int_t nNegClusterITS = 0; | |
695 | for(Int_t itsLayer = 0; itsLayer<6;itsLayer++){ | |
696 | if(TESTBIT(negTrack->GetITSClusterMap(),itsLayer)){ | |
697 | nNegClusterITS++; | |
698 | } | |
699 | if(TESTBIT(posTrack->GetITSClusterMap(),itsLayer)){ | |
700 | nPosClusterITS++; | |
701 | } | |
702 | } | |
703 | Double_t negtrackPhi = negTrack->Phi(); | |
704 | Double_t postrackPhi = posTrack->Phi(); | |
705 | hITSClusterPhi->Fill(negtrackPhi,nNegClusterITS); | |
706 | hITSClusterPhi->Fill(postrackPhi,nPosClusterITS); | |
707 | ||
708 | // ITS signal | |
709 | if (nPosClusterITS > 0 ){ | |
710 | hPositronITSdEdxP->Fill(posTrack->P() ,posTrack->GetITSsignal()); | |
711 | hPositronNSigmaITSP->Fill(posTrack->P() ,pidResonse->NumberOfSigmasITS(posTrack,AliPID::kElectron)); | |
712 | } | |
713 | if (nNegClusterITS > 0 ){ | |
714 | hElectronITSdEdxP->Fill(negTrack->P() ,negTrack->GetITSsignal()); | |
715 | hElectronNSigmaITSP->Fill(negTrack->P() ,pidResonse->NumberOfSigmasITS(negTrack,AliPID::kElectron)); | |
716 | } | |
616d5128 | 717 | |
344100c4 | 718 | |
e5b6e8a6 | 719 | } |
a280ac15 | 720 | |
ae947965 | 721 | |
e5b6e8a6 | 722 | //________________________________________________________________________ |
ae947965 | 723 | void AliAnalysisTaskConversionQA::CountTracks(){ |
e5b6e8a6 | 724 | |
344100c4 | 725 | if(fInputEvent->IsA()==AliESDEvent::Class()){ |
726 | // Using standard function for setting Cuts | |
727 | Bool_t selectPrimaries=kTRUE; | |
728 | AliESDtrackCuts *EsdTrackCuts = AliESDtrackCuts::GetStandardITSTPCTrackCuts2010(selectPrimaries); | |
729 | EsdTrackCuts->SetMaxDCAToVertexZ(2); | |
730 | EsdTrackCuts->SetEtaRange(-0.8, 0.8); | |
731 | EsdTrackCuts->SetPtRange(0.15); | |
732 | fNumberOfESDTracks = 0; | |
733 | for(Int_t iTracks = 0; iTracks < fInputEvent->GetNumberOfTracks(); iTracks++){ | |
734 | AliESDtrack* curTrack = (AliESDtrack*) fInputEvent->GetTrack(iTracks); | |
735 | if(!curTrack) continue; | |
736 | if(EsdTrackCuts->AcceptTrack(curTrack) ) fNumberOfESDTracks++; | |
737 | } | |
738 | delete EsdTrackCuts; | |
739 | EsdTrackCuts=0x0; | |
740 | } | |
741 | else if(fInputEvent->IsA()==AliAODEvent::Class()){ | |
742 | fNumberOfESDTracks = 0; | |
743 | for(Int_t iTracks = 0; iTracks<fInputEvent->GetNumberOfTracks(); iTracks++){ | |
744 | AliAODTrack* curTrack = (AliAODTrack*) fInputEvent->GetTrack(iTracks); | |
745 | if(curTrack->GetID()<0) continue; // Avoid double counting of tracks | |
746 | if(!curTrack->IsHybridGlobalConstrainedGlobal()) continue; | |
747 | if(abs(curTrack->Eta())>0.8) continue; | |
748 | if(curTrack->Pt()<0.15) continue; | |
749 | fNumberOfESDTracks++; | |
750 | } | |
751 | } | |
752 | return; | |
e5b6e8a6 | 753 | } |
a280ac15 | 754 | |
4803eb1f | 755 | UInt_t AliAnalysisTaskConversionQA::IsTruePhotonESD(AliAODConversionPhoton *TruePhotonCandidate) |
756 | { | |
4803eb1f | 757 | UInt_t kind = 9; |
758 | TParticle *posDaughter = TruePhotonCandidate->GetPositiveMCDaughter(fMCStack); | |
759 | TParticle *negDaughter = TruePhotonCandidate->GetNegativeMCDaughter(fMCStack); | |
4803eb1f | 760 | Int_t motherLabelPhoton; |
72395bd9 | 761 | Int_t pdgCodePos = 0; |
762 | Int_t pdgCodeNeg = 0; | |
763 | Int_t pdgCode = 0; | |
4803eb1f | 764 | |
4803eb1f | 765 | if(posDaughter == NULL || negDaughter == NULL) { |
766 | kind = 9; | |
767 | // return kFALSE; // One particle does not exist | |
768 | ||
85b56575 | 769 | } else if( posDaughter->GetMother(0) != negDaughter->GetMother(0) || (posDaughter->GetMother(0) == negDaughter->GetMother(0) && posDaughter->GetMother(0) ==-1)) { |
770 | kind = 1; | |
771 | // return 1; | |
4803eb1f | 772 | pdgCodePos=TMath::Abs(posDaughter->GetPdgCode()); |
773 | pdgCodeNeg=TMath::Abs(negDaughter->GetPdgCode()); | |
774 | if(pdgCodePos==11 && pdgCodeNeg==11) return 10; //Electron Combinatorial | |
775 | if(pdgCodePos==11 && pdgCodeNeg==11 && | |
776 | (posDaughter->GetMother(0) == negDaughter->GetMother(0) && posDaughter->GetMother(0) ==-1)) return 15; //direct Electron Combinatorial | |
777 | ||
778 | if(pdgCodePos==211 && pdgCodeNeg==211) return 11; //Pion Combinatorial | |
779 | if((pdgCodePos==211 && pdgCodeNeg==2212) ||(pdgCodePos==2212 && pdgCodeNeg==211)) return 12; //Pion, Proton Combinatorics | |
780 | if((pdgCodePos==211 && pdgCodeNeg==11) ||(pdgCodePos==11 && pdgCodeNeg==211)) return 13; //Pion, Electron Combinatorics | |
781 | if(pdgCodePos==321 || pdgCodeNeg==321) return 14; //Kaon combinatorics | |
782 | }else{ | |
85b56575 | 783 | TParticle *Photon = TruePhotonCandidate->GetMCParticle(fMCStack); |
4803eb1f | 784 | pdgCodePos=posDaughter->GetPdgCode(); |
785 | pdgCodeNeg=negDaughter->GetPdgCode(); | |
85b56575 | 786 | motherLabelPhoton= Photon->GetMother(0); |
4803eb1f | 787 | if ( TruePhotonCandidate->GetMCParticle(fMCStack)->GetPdgCode()) pdgCode = TruePhotonCandidate->GetMCParticle(fMCStack)->GetPdgCode(); |
788 | ||
789 | if(TMath::Abs(pdgCodePos)!=11 || TMath::Abs(pdgCodeNeg)!=11) return 2; // true from hadronic decays | |
790 | else if ( !(pdgCodeNeg==pdgCodePos)){ | |
791 | if(pdgCode == 111) return 3; // pi0 Dalitz | |
792 | else if (pdgCode == 221) return 4; // eta Dalitz | |
793 | else if (!(negDaughter->GetUniqueID() != 5 || posDaughter->GetUniqueID() !=5)){ | |
794 | if(pdgCode == 22 && motherLabelPhoton < fMCStack->GetNprimary()){ | |
795 | return 0; // primary photons | |
796 | } else if (pdgCode == 22){ | |
797 | return 5; //secondary photons | |
798 | } | |
799 | } | |
800 | } | |
801 | } | |
802 | ||
803 | return kind; | |
804 | } | |
2bb2434e | 805 | |
ae947965 | 806 | //________________________________________________________________________ |
4803eb1f | 807 | UInt_t AliAnalysisTaskConversionQA::IsTruePhotonAOD(AliAODConversionPhoton *TruePhotonCandidate) |
ae947965 | 808 | { |
ae947965 | 809 | |
4803eb1f | 810 | UInt_t kind = 9; |
2d49ea4c | 811 | TClonesArray *AODMCTrackArray = dynamic_cast<TClonesArray*>(fInputEvent->FindListObject(AliAODMCParticle::StdBranchName())); |
85b56575 | 812 | if (AODMCTrackArray!=NULL && TruePhotonCandidate!=NULL){ |
813 | AliAODMCParticle *posDaughter = (AliAODMCParticle*) AODMCTrackArray->At(TruePhotonCandidate->GetMCLabelPositive()); | |
814 | AliAODMCParticle *negDaughter = (AliAODMCParticle*) AODMCTrackArray->At(TruePhotonCandidate->GetMCLabelNegative()); | |
815 | Int_t pdgCodePos = 0; | |
816 | Int_t pdgCodeNeg = 0; | |
817 | Int_t pdgCode = 0; | |
818 | if(posDaughter == NULL || negDaughter == NULL) { | |
819 | kind = 9; | |
820 | } else if( posDaughter->GetMother() != negDaughter->GetMother() || (posDaughter->GetMother() == negDaughter->GetMother() && posDaughter->GetMother() ==-1)) { | |
821 | kind = 1; | |
822 | pdgCodePos=TMath::Abs(posDaughter->GetPdgCode()); | |
823 | pdgCodeNeg=TMath::Abs(negDaughter->GetPdgCode()); | |
824 | if(pdgCodePos==11 && pdgCodeNeg==11) kind = 10; //Electron Combinatorial | |
825 | if(pdgCodePos==11 && pdgCodeNeg==11 && | |
826 | (posDaughter->GetMother() == negDaughter->GetMother() && posDaughter->GetMother() ==-1))kind = 15; //direct Electron Combinatorial | |
827 | ||
828 | if(pdgCodePos==211 && pdgCodeNeg==211) kind = 11; //Pion Combinatorial | |
829 | if((pdgCodePos==211 && pdgCodeNeg==2212) ||(pdgCodePos==2212 && pdgCodeNeg==211)) kind = 12; //Pion, Proton Combinatorics | |
830 | if((pdgCodePos==211 && pdgCodeNeg==11) ||(pdgCodePos==11 && pdgCodeNeg==211)) kind = 13; //Pion, Electron Combinatorics | |
831 | if(pdgCodePos==321 || pdgCodeNeg==321) kind = 14; //Kaon combinatorics | |
832 | }else{ | |
833 | AliAODMCParticle *Photon = (AliAODMCParticle*) AODMCTrackArray->At(posDaughter->GetMother()); | |
834 | pdgCodePos=posDaughter->GetPdgCode(); | |
835 | pdgCodeNeg=negDaughter->GetPdgCode(); | |
836 | ||
837 | if ( Photon->GetPdgCode()) | |
838 | pdgCode = Photon->GetPdgCode(); | |
839 | if(TMath::Abs(pdgCodePos)!=11 || TMath::Abs(pdgCodeNeg)!=11) kind = 2; // true from hadronic decays | |
840 | else if ( !(pdgCodeNeg==pdgCodePos)){ | |
841 | if(pdgCode == 111) kind = 3; // pi0 Dalitz | |
842 | else if (pdgCode == 221) kind = 4; // eta Dalitz | |
843 | else if (!(negDaughter->GetMCProcessCode() != 5 || posDaughter->GetMCProcessCode() !=5)){ | |
844 | if(pdgCode == 22 && Photon->IsPrimary()){ | |
845 | kind = 0; // primary photons | |
846 | } else if (pdgCode == 22){ | |
847 | kind = 5; //secondary photons | |
848 | } | |
4803eb1f | 849 | } |
850 | } | |
851 | } | |
4803eb1f | 852 | |
85b56575 | 853 | return kind; |
854 | } | |
4803eb1f | 855 | return kind; |
ae947965 | 856 | } |
857 | ||
858 | //________________________________________________________________________ | |
859 | void AliAnalysisTaskConversionQA::RelabelAODPhotonCandidates(Bool_t mode){ | |
860 | ||
344100c4 | 861 | // Relabeling For AOD Event |
862 | // ESDiD -> AODiD | |
863 | // MCLabel -> AODMCLabel | |
864 | ||
865 | if(mode){ | |
866 | fMCStackPos = new Int_t[fConversionGammas->GetEntries()]; | |
867 | fMCStackNeg = new Int_t[fConversionGammas->GetEntries()]; | |
868 | } | |
869 | ||
870 | for(Int_t iGamma = 0;iGamma<fConversionGammas->GetEntries();iGamma++){ | |
871 | AliAODConversionPhoton* PhotonCandidate = (AliAODConversionPhoton*) fConversionGammas->At(iGamma); | |
872 | if(!PhotonCandidate) continue; | |
873 | if(!mode){// Back to ESD Labels | |
874 | PhotonCandidate->SetMCLabelPositive(fMCStackPos[iGamma]); | |
875 | PhotonCandidate->SetMCLabelNegative(fMCStackNeg[iGamma]); | |
876 | //PhotonCandidate->IsAODMCLabel(kFALSE); | |
877 | continue; | |
878 | } | |
879 | fMCStackPos[iGamma] = PhotonCandidate->GetMCLabelPositive(); | |
880 | fMCStackNeg[iGamma] = PhotonCandidate->GetMCLabelNegative(); | |
881 | ||
882 | Bool_t AODLabelPos = kFALSE; | |
883 | Bool_t AODLabelNeg = kFALSE; | |
884 | ||
885 | for(Int_t i = 0; i<fInputEvent->GetNumberOfTracks();i++){ | |
886 | AliAODTrack *tempDaughter = static_cast<AliAODTrack*>(fInputEvent->GetTrack(i)); | |
887 | if(!AODLabelPos){ | |
888 | if( tempDaughter->GetID() == PhotonCandidate->GetTrackLabelPositive() ){ | |
889 | PhotonCandidate->SetMCLabelPositive(abs(tempDaughter->GetLabel())); | |
890 | AODLabelPos = kTRUE; | |
891 | } | |
892 | } | |
893 | if(!AODLabelNeg){ | |
894 | if( tempDaughter->GetID() == PhotonCandidate->GetTrackLabelNegative()){ | |
895 | PhotonCandidate->SetMCLabelNegative(abs(tempDaughter->GetLabel())); | |
896 | AODLabelNeg = kTRUE; | |
897 | } | |
898 | } | |
899 | if(AODLabelNeg && AODLabelPos){ | |
900 | break; | |
901 | } | |
902 | } // Both ESD Tracks have AOD Tracks with Positive IDs | |
903 | if(!AODLabelPos || !AODLabelNeg){ | |
904 | for(Int_t i = 0; i<fInputEvent->GetNumberOfTracks();i++){ | |
905 | AliAODTrack *tempDaughter = static_cast<AliAODTrack*>(fInputEvent->GetTrack(i)); | |
906 | if(tempDaughter->GetID()<0){ | |
907 | if(!AODLabelPos){ | |
908 | if( (abs(tempDaughter->GetID())-1) == PhotonCandidate->GetTrackLabelPositive()){ | |
909 | PhotonCandidate->SetMCLabelPositive(abs(tempDaughter->GetLabel())); | |
910 | AODLabelPos = kTRUE; | |
911 | } | |
912 | } | |
913 | if(!AODLabelNeg){ | |
914 | if( (abs(tempDaughter->GetID())-1) == PhotonCandidate->GetTrackLabelNegative()){ | |
915 | PhotonCandidate->SetMCLabelNegative(abs(tempDaughter->GetLabel())); | |
916 | AODLabelNeg = kTRUE; | |
917 | } | |
918 | } | |
919 | } | |
920 | if(AODLabelNeg && AODLabelPos){ | |
921 | break; | |
922 | } | |
923 | } | |
924 | if(!AODLabelPos || !AODLabelNeg){ | |
925 | cout<<"WARNING!!! AOD TRACKS NOT FOUND FOR"<<endl; | |
926 | } | |
927 | } | |
928 | } | |
929 | ||
930 | if(!mode){ | |
931 | delete[] fMCStackPos; | |
932 | delete[] fMCStackNeg; | |
933 | } | |
ae947965 | 934 | } |
935 | ||
616d5128 | 936 | void AliAnalysisTaskConversionQA::SetLogBinningXTH2(TH2* histoRebin){ |
344100c4 | 937 | TAxis *axisafter = histoRebin->GetXaxis(); |
938 | Int_t bins = axisafter->GetNbins(); | |
939 | Double_t from = axisafter->GetXmin(); | |
940 | Double_t to = axisafter->GetXmax(); | |
941 | Double_t *newbins = new Double_t[bins+1]; | |
942 | newbins[0] = from; | |
943 | Double_t factor = TMath::Power(to/from, 1./bins); | |
944 | for(Int_t i=1; i<=bins; ++i) newbins[i] = factor * newbins[i-1]; | |
945 | axisafter->Set(bins, newbins); | |
946 | delete [] newbins; | |
616d5128 | 947 | |
948 | } | |
949 | ||
2bb2434e | 950 | //________________________________________________________________________ |
951 | void AliAnalysisTaskConversionQA::Terminate(Option_t *) | |
952 | { | |
a280ac15 | 953 | |
2bb2434e | 954 | } |