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