]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWGGA/GammaConv/AliAnalysisTaskGammaConvCalo.cxx
- fully excluded overlapping clusters from other headers, new histogram with overlapp...
[u/mrichter/AliRoot.git] / PWGGA / GammaConv / AliAnalysisTaskGammaConvCalo.cxx
CommitLineData
8bdca7f1 1/**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3 * *
4 * Author: Baldo Sahlmueller, Friederike Bock *
5 * Version 1.0 *
6 * *
7 * *
8 * Permission to use, copy, modify and distribute this software and its *
9 * documentation strictly for non-commercial purposes is hereby granted *
10 * without fee, provided that the above copyright notice appears in all *
11 * copies and that both the copyright notice and this permission notice *
12 * appear in the supporting documentation. The authors make no claims *
13 * about the suitability of this software for any purpose. It is *
14 * provided "as is" without express or implied warranty. *
15 **************************************************************************/
16
17//////////////////////////////////////////////////////////////////
18//----------------------------------------------------------------
19// Class used to do analysis on conversion photons + calo photons
20//----------------------------------------------------------------
21//////////////////////////////////////////////////////////////////
22#include "TChain.h"
23#include "TTree.h"
24#include "TBranch.h"
25#include "TFile.h"
26#include "TH1F.h"
27#include "TH2F.h"
28#include "TH3F.h"
29#include "THnSparse.h"
30#include "TCanvas.h"
31#include "TNtuple.h"
32#include "AliAnalysisTask.h"
33#include "AliAnalysisManager.h"
34#include "AliESDEvent.h"
35#include "AliESDInputHandler.h"
36#include "AliMCEventHandler.h"
37#include "AliMCEvent.h"
38#include "AliMCParticle.h"
39#include "AliCentrality.h"
40#include "AliESDVZERO.h"
41#include "AliESDpid.h"
42#include "AliAnalysisTaskGammaConvCalo.h"
43#include "AliVParticle.h"
44#include "AliESDtrack.h"
45#include "AliESDtrackCuts.h"
46#include "AliKFVertex.h"
47#include "AliV0ReaderV1.h"
48#include "AliGenCocktailEventHeader.h"
49#include "AliConversionAODBGHandlerRP.h"
50#include "AliAODMCParticle.h"
51#include "AliAODMCHeader.h"
52#include "AliEventplane.h"
53#include "AliAnalysisTaskEMCALClusterizeFast.h"
54#include "AliAODEvent.h"
55#include "AliAODInputHandler.h"
56#include "AliESDEvent.h"
57#include "AliESDInputHandler.h"
58#include "AliInputEventHandler.h"
59
60ClassImp(AliAnalysisTaskGammaConvCalo)
61
62//________________________________________________________________________
63AliAnalysisTaskGammaConvCalo::AliAnalysisTaskGammaConvCalo(): AliAnalysisTaskSE(),
64 fV0Reader(NULL),
65 fBGHandler(NULL),
66 fBGHandlerRP(NULL),
67 fBGClusHandler(NULL),
68 fBGClusHandlerRP(NULL),
69 fInputEvent(NULL),
70 fMCEvent(NULL),
71 fMCStack(NULL),
72 fCutFolder(NULL),
73 fESDList(NULL),
74 fBackList(NULL),
75 fMotherList(NULL),
76 fPhotonDCAList(NULL),
77 fMesonDCAList(NULL),
78 fTrueList(NULL),
79 fMCList(NULL),
80 fHeaderNameList(NULL),
81 fTagOutputList(NULL),
82 fOutputContainer(NULL),
83 fReaderGammas(NULL),
84 fGammaCandidates(NULL),
85 fClusterCandidates(NULL),
344100c4 86 fEventCutArray(NULL),
87 fEventCuts(NULL),
8bdca7f1 88 fCutArray(NULL),
89 fConversionCuts(NULL),
90 fClusterCutArray(NULL),
91 fCaloPhotonCuts(NULL),
92 fMesonCutArray(NULL),
93 fMesonCuts(NULL),
94 fHistoConvGammaPt(NULL),
95 fHistoConvGammaR(NULL),
96 fHistoConvGammaEta(NULL),
97 fTreeConvGammaPtDcazCat(NULL),
98 fPtGamma(0),
99 fDCAzPhoton(0),
100 fRConvPhoton(0),
101 fEtaPhoton(0),
102 fCharCatPhoton(0),
103 fCharPhotonMCInfo(0),
104 fHistoMotherInvMassPt(NULL),
d53bf4ac 105 fHistoMotherMatchedInvMassPt(NULL),
8bdca7f1 106 fSparseMotherInvMassPtZM(NULL),
107 fHistoMotherBackInvMassPt(NULL),
108 fSparseMotherBackInvMassPtZM(NULL),
109 fHistoMotherInvMassEalpha(NULL),
110 fHistoMotherPi0PtY(NULL),
111 fHistoMotherEtaPtY(NULL),
112 fHistoMotherPi0PtAlpha(NULL),
113 fHistoMotherEtaPtAlpha(NULL),
114 fHistoMotherPi0PtOpenAngle(NULL),
115 fHistoMotherEtaPtOpenAngle(NULL),
4e8dcc76 116 fHistoMotherPi0ConvPhotonEtaPhi(NULL),
117 fHistoMotherEtaConvPhotonEtaPhi(NULL),
20af4b69 118 fHistoMotherInvMassECalib(NULL),
119 fHistoMotherInvMassECalibalpha(NULL),
8bdca7f1 120 fTreeMesonsInvMassPtDcazMinDcazMaxFlag(NULL),
121 fInvMass(0),
122 fPt(0),
123 fDCAzGammaMin(0),
124 fDCAzGammaMax(0),
125 fCharFlag(0),
126 fCharMesonMCInfo(0),
127 fHistoConvGammaUntagged(NULL),
128 fHistoConvGammaTagged(NULL),
129 fHistoConvGammaPi0Tagged(NULL),
130 fHistoConvGammaEtaTagged(NULL),
131 fHistoPhotonPairAll(NULL),
132 fHistoPhotonPairAllGam(NULL),
133 fHistoClusGammaPt(NULL),
ecd3e131 134 fHistoClusOverlapHeadersGammaPt(NULL),
8bdca7f1 135 fHistoMCHeaders(NULL),
136 fHistoMCAllGammaPt(NULL),
20af4b69 137 fHistoMCAllGammaEMCALAccPt(NULL),
8bdca7f1 138 fHistoMCDecayGammaPi0Pt(NULL),
139 fHistoMCDecayGammaRhoPt(NULL),
140 fHistoMCDecayGammaEtaPt(NULL),
141 fHistoMCDecayGammaOmegaPt(NULL),
142 fHistoMCDecayGammaEtapPt(NULL),
143 fHistoMCDecayGammaPhiPt(NULL),
144 fHistoMCDecayGammaSigmaPt(NULL),
145 fHistoMCConvGammaPt(NULL),
146 fHistoMCConvGammaR(NULL),
147 fHistoMCConvGammaEta(NULL),
148 fHistoMCPi0Pt(NULL),
149 fHistoMCPi0WOWeightPt(NULL),
150 fHistoMCEtaPt(NULL),
151 fHistoMCEtaWOWeightPt(NULL),
152 fHistoMCPi0InAccPt(NULL),
153 fHistoMCEtaInAccPt(NULL),
154 fHistoMCPi0PtY(NULL),
155 fHistoMCEtaPtY(NULL),
de752898 156 fHistoMCPi0PtAlpha(NULL),
157 fHistoMCEtaPtAlpha(NULL),
8bdca7f1 158 fHistoMCK0sPt(NULL),
159 fHistoMCK0sWOWeightPt(NULL),
160 fHistoMCK0sPtY(NULL),
161 fHistoMCSecPi0PtvsSource(NULL),
162 fHistoMCSecPi0Source(NULL),
163 fHistoMCSecEtaPt(NULL),
164 fHistoMCSecEtaSource(NULL),
ed8bc1ca 165 fHistoTruePi0InvMassPt(NULL),
166 fHistoTrueEtaInvMassPt(NULL),
167 fHistoTruePi0CaloPhotonInvMassPt(NULL),
168 fHistoTrueEtaCaloPhotonInvMassPt(NULL),
20af4b69 169 fHistoTruePi0CaloConvertedPhotonInvMassPt(NULL),
170 fHistoTruePi0CaloConvertedPhotonMatchedInvMassPt(NULL),
171 fHistoTrueEtaCaloConvertedPhotonInvMassPt(NULL),
172 fHistoTrueEtaCaloConvertedPhotonMatchedInvMassPt(NULL),
ed8bc1ca 173 fHistoTruePi0CaloElectronInvMassPt(NULL),
174 fHistoTrueEtaCaloElectronInvMassPt(NULL),
175 fHistoTruePi0CaloMergedClusterInvMassPt(NULL),
176 fHistoTrueEtaCaloMergedClusterInvMassPt(NULL),
fd94f234 177 fHistoTrueMotherCaloEMNonLeadingInvMassPt(NULL),
ed8bc1ca 178 fHistoTruePi0CaloMergedClusterPartConvInvMassPt(NULL),
179 fHistoTrueEtaCaloMergedClusterPartConvInvMassPt(NULL),
180 fHistoTruePrimaryPi0InvMassPt(NULL),
181 fHistoTruePrimaryEtaInvMassPt(NULL),
182 fHistoTruePrimaryPi0W0WeightingInvMassPt(NULL),
183 fHistoTruePrimaryEtaW0WeightingInvMassPt(NULL),
184 fProfileTruePrimaryPi0WeightsInvMassPt(NULL),
185 fProfileTruePrimaryEtaWeightsInvMassPt(NULL),
8bdca7f1 186 fHistoTruePrimaryPi0MCPtResolPt(NULL),
187 fHistoTruePrimaryEtaMCPtResolPt(NULL),
ee4b3d66 188 fHistoTrueMotherPi0ConvPhotonEtaPhi(NULL),
189 fHistoTrueMotherEtaConvPhotonEtaPhi(NULL),
ed8bc1ca 190 fHistoTrueSecondaryPi0InvMassPt(NULL),
191 fHistoTrueSecondaryEtaInvMassPt(NULL),
192 fHistoTrueSecondaryPi0FromK0sInvMassPt(NULL),
8bdca7f1 193 fHistoTrueK0sWithPi0DaughterMCPt(NULL),
ed8bc1ca 194 fHistoTrueSecondaryPi0FromEtaInvMassPt(NULL),
8bdca7f1 195 fHistoTrueEtaWithPi0DaughterMCPt(NULL),
ed8bc1ca 196 fHistoTrueSecondaryPi0FromLambdaInvMassPt(NULL),
8bdca7f1 197 fHistoTrueLambdaWithPi0DaughterMCPt(NULL),
198 fHistoTrueBckGGInvMassPt(NULL),
199 fHistoTrueBckContInvMassPt(NULL),
200 fHistoTruePi0PtY(NULL),
201 fHistoTrueEtaPtY(NULL),
202 fHistoTruePi0PtAlpha(NULL),
203 fHistoTrueEtaPtAlpha(NULL),
204 fHistoTruePi0PtOpenAngle(NULL),
205 fHistoTrueEtaPtOpenAngle(NULL),
8bdca7f1 206 fHistoTrueConvGammaPt(NULL),
207 fHistoTrueConvPi0GammaPt(NULL),
208 fHistoTrueConvGammaEta(NULL),
209 fHistoCombinatorialPt(NULL),
210 fHistoTruePrimaryConvGammaPt(NULL),
211 fHistoTruePrimaryConvGammaESDPtMCPt(NULL),
212 fHistoTrueSecondaryConvGammaPt(NULL),
213 fHistoTrueSecondaryConvGammaFromXFromK0sPt(NULL),
214 fHistoTrueSecondaryConvGammaFromXFromLambdaPt(NULL),
8bdca7f1 215 fHistoTrueClusGammaPt(NULL),
fd94f234 216 fHistoTrueClusUnConvGammaPt(NULL),
20af4b69 217 fHistoTrueClusUnConvGammaMCPt(NULL),
fd94f234 218 fHistoTrueClusElectronPt(NULL),
219 fHistoTrueClusConvGammaPt(NULL),
20af4b69 220 fHistoTrueClusConvGammaMCPt(NULL),
fd94f234 221 fHistoTrueClusConvGammaFullyPt(NULL),
222 fHistoTrueClusMergedGammaPt(NULL),
223 fHistoTrueClusMergedPartConvGammaPt(NULL),
224 fHistoTrueClusDalitzPt(NULL),
225 fHistoTrueClusDalitzMergedPt(NULL),
226 fHistoTrueClusPhotonFromElecMotherPt(NULL),
227 fHistoTrueClusShowerPt(NULL),
cc579963 228 fHistoTrueClusSubLeadingPt(NULL),
229 fHistoTrueClusNParticles(NULL),
fd94f234 230 fHistoTrueClusEMNonLeadingPt(NULL),
231 fHistoTrueNLabelsInClus(NULL),
8bdca7f1 232 fHistoTruePrimaryClusGammaPt(NULL),
233 fHistoTruePrimaryClusGammaESDPtMCPt(NULL),
234 fHistoNEvents(NULL),
235 fHistoNGoodESDTracks(NULL),
236 fHistoNGammaCandidates(NULL),
237 fHistoNGoodESDTracksVsNGammaCanditates(NULL),
238 fHistoNV0Tracks(NULL),
239 fProfileEtaShift(NULL),
240 fEventPlaneAngle(-100),
241 fRandom(0),
242 fNGammaCandidates(0),
243 fUnsmearedPx(NULL),
244 fUnsmearedPy(NULL),
245 fUnsmearedPz(NULL),
246 fUnsmearedE(NULL),
247 fMCStackPos(NULL),
248 fMCStackNeg(NULL),
249 fESDArrayPos(NULL),
250 fESDArrayNeg(NULL),
251 fnCuts(0),
252 fiCut(0),
253 fMoveParticleAccordingToVertex(kTRUE),
254 fIsHeavyIon(0),
255 fDoMesonAnalysis(kTRUE),
256 fDoMesonQA(0),
257 fDoPhotonQA(0),
fd94f234 258 fDoClusterQA(0),
8bdca7f1 259 fIsFromMBHeader(kTRUE),
ecd3e131 260 fIsOverlappingWithOtherHeader(kFALSE),
d53bf4ac 261 fIsMC(kFALSE)
8bdca7f1 262{
263
264}
265
266//________________________________________________________________________
267AliAnalysisTaskGammaConvCalo::AliAnalysisTaskGammaConvCalo(const char *name):
268 AliAnalysisTaskSE(name),
269 fV0Reader(NULL),
270 fBGHandler(NULL),
271 fBGHandlerRP(NULL),
272 fBGClusHandler(NULL),
273 fBGClusHandlerRP(NULL),
274 fInputEvent(NULL),
275 fMCEvent(NULL),
276 fMCStack(NULL),
277 fCutFolder(NULL),
278 fESDList(NULL),
279 fBackList(NULL),
280 fMotherList(NULL),
281 fPhotonDCAList(NULL),
282 fMesonDCAList(NULL),
283 fTrueList(NULL),
284 fMCList(NULL),
285 fHeaderNameList(NULL),
286 fTagOutputList(NULL),
287 fOutputContainer(0),
288 fReaderGammas(NULL),
289 fGammaCandidates(NULL),
290 fClusterCandidates(NULL),
344100c4 291 fEventCutArray(NULL),
292 fEventCuts(NULL),
8bdca7f1 293 fCutArray(NULL),
294 fConversionCuts(NULL),
295 fClusterCutArray(NULL),
296 fCaloPhotonCuts(NULL),
297 fMesonCutArray(NULL),
298 fMesonCuts(NULL),
299 fHistoConvGammaPt(NULL),
300 fHistoConvGammaR(NULL),
301 fHistoConvGammaEta(NULL),
302 fTreeConvGammaPtDcazCat(NULL),
303 fPtGamma(0),
304 fDCAzPhoton(0),
305 fRConvPhoton(0),
306 fEtaPhoton(0),
307 fCharCatPhoton(0),
308 fCharPhotonMCInfo(0),
309 fHistoMotherInvMassPt(NULL),
d53bf4ac 310 fHistoMotherMatchedInvMassPt(NULL),
8bdca7f1 311 fSparseMotherInvMassPtZM(NULL),
312 fHistoMotherBackInvMassPt(NULL),
313 fSparseMotherBackInvMassPtZM(NULL),
314 fHistoMotherInvMassEalpha(NULL),
315 fHistoMotherPi0PtY(NULL),
316 fHistoMotherEtaPtY(NULL),
317 fHistoMotherPi0PtAlpha(NULL),
318 fHistoMotherEtaPtAlpha(NULL),
319 fHistoMotherPi0PtOpenAngle(NULL),
320 fHistoMotherEtaPtOpenAngle(NULL),
4e8dcc76 321 fHistoMotherPi0ConvPhotonEtaPhi(NULL),
322 fHistoMotherEtaConvPhotonEtaPhi(NULL),
20af4b69 323 fHistoMotherInvMassECalib(NULL),
324 fHistoMotherInvMassECalibalpha(NULL),
8bdca7f1 325 fTreeMesonsInvMassPtDcazMinDcazMaxFlag(NULL),
326 fInvMass(0),
327 fPt(0),
328 fDCAzGammaMin(0),
329 fDCAzGammaMax(0),
330 fCharFlag(0),
331 fCharMesonMCInfo(0),
332 fHistoConvGammaUntagged(NULL),
333 fHistoConvGammaTagged(NULL),
334 fHistoConvGammaPi0Tagged(NULL),
335 fHistoConvGammaEtaTagged(NULL),
336 fHistoPhotonPairAll(NULL),
337 fHistoPhotonPairAllGam(NULL),
338 fHistoClusGammaPt(NULL),
ecd3e131 339 fHistoClusOverlapHeadersGammaPt(NULL),
8bdca7f1 340 fHistoMCHeaders(NULL),
341 fHistoMCAllGammaPt(NULL),
20af4b69 342 fHistoMCAllGammaEMCALAccPt(NULL),
8bdca7f1 343 fHistoMCDecayGammaPi0Pt(NULL),
344 fHistoMCDecayGammaRhoPt(NULL),
345 fHistoMCDecayGammaEtaPt(NULL),
346 fHistoMCDecayGammaOmegaPt(NULL),
347 fHistoMCDecayGammaEtapPt(NULL),
348 fHistoMCDecayGammaPhiPt(NULL),
349 fHistoMCDecayGammaSigmaPt(NULL),
350 fHistoMCConvGammaPt(NULL),
351 fHistoMCConvGammaR(NULL),
352 fHistoMCConvGammaEta(NULL),
353 fHistoMCPi0Pt(NULL),
354 fHistoMCPi0WOWeightPt(NULL),
355 fHistoMCEtaPt(NULL),
356 fHistoMCEtaWOWeightPt(NULL),
357 fHistoMCPi0InAccPt(NULL),
358 fHistoMCEtaInAccPt(NULL),
359 fHistoMCPi0PtY(NULL),
360 fHistoMCEtaPtY(NULL),
de752898 361 fHistoMCPi0PtAlpha(NULL),
362 fHistoMCEtaPtAlpha(NULL),
8bdca7f1 363 fHistoMCK0sPt(NULL),
364 fHistoMCK0sWOWeightPt(NULL),
365 fHistoMCK0sPtY(NULL),
366 fHistoMCSecPi0PtvsSource(NULL),
367 fHistoMCSecPi0Source(NULL),
368 fHistoMCSecEtaPt(NULL),
369 fHistoMCSecEtaSource(NULL),
ed8bc1ca 370 fHistoTruePi0InvMassPt(NULL),
371 fHistoTrueEtaInvMassPt(NULL),
372 fHistoTruePi0CaloPhotonInvMassPt(NULL),
373 fHistoTrueEtaCaloPhotonInvMassPt(NULL),
20af4b69 374 fHistoTruePi0CaloConvertedPhotonInvMassPt(NULL),
375 fHistoTruePi0CaloConvertedPhotonMatchedInvMassPt(NULL),
376 fHistoTrueEtaCaloConvertedPhotonInvMassPt(NULL),
377 fHistoTrueEtaCaloConvertedPhotonMatchedInvMassPt(NULL),
ed8bc1ca 378 fHistoTruePi0CaloElectronInvMassPt(NULL),
379 fHistoTrueEtaCaloElectronInvMassPt(NULL),
380 fHistoTruePi0CaloMergedClusterInvMassPt(NULL),
381 fHistoTrueEtaCaloMergedClusterInvMassPt(NULL),
fd94f234 382 fHistoTrueMotherCaloEMNonLeadingInvMassPt(NULL),
ed8bc1ca 383 fHistoTruePi0CaloMergedClusterPartConvInvMassPt(NULL),
384 fHistoTrueEtaCaloMergedClusterPartConvInvMassPt(NULL),
385 fHistoTruePrimaryPi0InvMassPt(NULL),
386 fHistoTruePrimaryEtaInvMassPt(NULL),
387 fHistoTruePrimaryPi0W0WeightingInvMassPt(NULL),
388 fHistoTruePrimaryEtaW0WeightingInvMassPt(NULL),
389 fProfileTruePrimaryPi0WeightsInvMassPt(NULL),
390 fProfileTruePrimaryEtaWeightsInvMassPt(NULL),
8bdca7f1 391 fHistoTruePrimaryPi0MCPtResolPt(NULL),
392 fHistoTruePrimaryEtaMCPtResolPt(NULL),
ee4b3d66 393 fHistoTrueMotherPi0ConvPhotonEtaPhi(NULL),
394 fHistoTrueMotherEtaConvPhotonEtaPhi(NULL),
ed8bc1ca 395 fHistoTrueSecondaryPi0InvMassPt(NULL),
396 fHistoTrueSecondaryEtaInvMassPt(NULL),
397 fHistoTrueSecondaryPi0FromK0sInvMassPt(NULL),
8bdca7f1 398 fHistoTrueK0sWithPi0DaughterMCPt(NULL),
ed8bc1ca 399 fHistoTrueSecondaryPi0FromEtaInvMassPt(NULL),
8bdca7f1 400 fHistoTrueEtaWithPi0DaughterMCPt(NULL),
ed8bc1ca 401 fHistoTrueSecondaryPi0FromLambdaInvMassPt(NULL),
8bdca7f1 402 fHistoTrueLambdaWithPi0DaughterMCPt(NULL),
403 fHistoTrueBckGGInvMassPt(NULL),
404 fHistoTrueBckContInvMassPt(NULL),
405 fHistoTruePi0PtY(NULL),
406 fHistoTrueEtaPtY(NULL),
407 fHistoTruePi0PtAlpha(NULL),
408 fHistoTrueEtaPtAlpha(NULL),
409 fHistoTruePi0PtOpenAngle(NULL),
410 fHistoTrueEtaPtOpenAngle(NULL),
8bdca7f1 411 fHistoTrueConvGammaPt(NULL),
412 fHistoTrueConvPi0GammaPt(NULL),
413 fHistoTrueConvGammaEta(NULL),
414 fHistoCombinatorialPt(NULL),
415 fHistoTruePrimaryConvGammaPt(NULL),
416 fHistoTruePrimaryConvGammaESDPtMCPt(NULL),
417 fHistoTrueSecondaryConvGammaPt(NULL),
418 fHistoTrueSecondaryConvGammaFromXFromK0sPt(NULL),
419 fHistoTrueSecondaryConvGammaFromXFromLambdaPt(NULL),
8bdca7f1 420 fHistoTrueClusGammaPt(NULL),
fd94f234 421 fHistoTrueClusUnConvGammaPt(NULL),
20af4b69 422 fHistoTrueClusUnConvGammaMCPt(NULL),
fd94f234 423 fHistoTrueClusElectronPt(NULL),
424 fHistoTrueClusConvGammaPt(NULL),
20af4b69 425 fHistoTrueClusConvGammaMCPt(NULL),
fd94f234 426 fHistoTrueClusConvGammaFullyPt(NULL),
427 fHistoTrueClusMergedGammaPt(NULL),
428 fHistoTrueClusMergedPartConvGammaPt(NULL),
429 fHistoTrueClusDalitzPt(NULL),
430 fHistoTrueClusDalitzMergedPt(NULL),
431 fHistoTrueClusPhotonFromElecMotherPt(NULL),
432 fHistoTrueClusShowerPt(NULL),
cc579963 433 fHistoTrueClusSubLeadingPt(NULL),
434 fHistoTrueClusNParticles(NULL),
fd94f234 435 fHistoTrueClusEMNonLeadingPt(NULL),
436 fHistoTrueNLabelsInClus(NULL),
8bdca7f1 437 fHistoTruePrimaryClusGammaPt(NULL),
438 fHistoTruePrimaryClusGammaESDPtMCPt(NULL),
439 fHistoNEvents(NULL),
440 fHistoNGoodESDTracks(NULL),
441 fHistoNGammaCandidates(NULL),
442 fHistoNGoodESDTracksVsNGammaCanditates(NULL),
443 fHistoNV0Tracks(NULL),
444 fProfileEtaShift(NULL),
445 fEventPlaneAngle(-100),
446 fRandom(0),
447 fNGammaCandidates(0),
448 fUnsmearedPx(NULL),
449 fUnsmearedPy(NULL),
450 fUnsmearedPz(NULL),
451 fUnsmearedE(NULL),
452 fMCStackPos(NULL),
453 fMCStackNeg(NULL),
454 fESDArrayPos(NULL),
455 fESDArrayNeg(NULL),
456 fnCuts(0),
457 fiCut(0),
458 fMoveParticleAccordingToVertex(kTRUE),
459 fIsHeavyIon(0),
460 fDoMesonAnalysis(kTRUE),
461 fDoMesonQA(0),
462 fDoPhotonQA(0),
fd94f234 463 fDoClusterQA(0),
8bdca7f1 464 fIsFromMBHeader(kTRUE),
ecd3e131 465 fIsOverlappingWithOtherHeader(kFALSE),
d53bf4ac 466 fIsMC(kFALSE)
8bdca7f1 467{
468 // Define output slots here
469 DefineOutput(1, TList::Class());
470}
471
472AliAnalysisTaskGammaConvCalo::~AliAnalysisTaskGammaConvCalo()
473{
474 if(fGammaCandidates){
475 delete fGammaCandidates;
476 fGammaCandidates = 0x0;
477 }
478 if(fClusterCandidates){
479 delete fClusterCandidates;
480 fClusterCandidates = 0x0;
481 }
482 if(fBGHandler){
483 delete[] fBGHandler;
484 fBGHandler = 0x0;
485 }
486 if(fBGHandlerRP){
487 delete[] fBGHandlerRP;
488 fBGHandlerRP = 0x0;
489 }
490 if(fBGClusHandler){
491 delete[] fBGClusHandler;
492 fBGClusHandler = 0x0;
493 }
494 if(fBGClusHandlerRP){
495 delete[] fBGClusHandlerRP;
496 fBGClusHandlerRP = 0x0;
497 }
498}
499//___________________________________________________________
500void AliAnalysisTaskGammaConvCalo::InitBack(){
501
502 const Int_t nDim = 4;
503 Int_t nBins[nDim] = {800,250,7,4};
504 Double_t xMin[nDim] = {0,0, 0,0};
505 Double_t xMax[nDim] = {0.8,25,7,4};
506
507 fSparseMotherInvMassPtZM = new THnSparseF*[fnCuts];
508 fSparseMotherBackInvMassPtZM = new THnSparseF*[fnCuts];
509
510 fBGHandler = new AliGammaConversionAODBGHandler*[fnCuts];
511 fBGHandlerRP = new AliConversionAODBGHandlerRP*[fnCuts];
512
513 fBGClusHandler = new AliGammaConversionAODBGHandler*[fnCuts];
514 fBGClusHandlerRP = new AliConversionAODBGHandlerRP*[fnCuts];
515
516 for(Int_t iCut = 0; iCut<fnCuts;iCut++){
517 if (((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->DoBGCalculation()){
344100c4 518 TString cutstringEvent = ((AliConvEventCuts*)fEventCutArray->At(iCut))->GetCutNumber();
519 TString cutstringPhoton = ((AliConversionPhotonCuts*)fCutArray->At(iCut))->GetCutNumber();
520 TString cutstringCalo = ((AliCaloPhotonCuts*)fClusterCutArray->At(iCut))->GetCutNumber();
521 TString cutstringMeson = ((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->GetCutNumber();
8bdca7f1 522
344100c4 523 Int_t collisionSystem = atoi((TString)(((AliConvEventCuts*)fEventCutArray->At(iCut))->GetCutNumber())(0,1));
524 Int_t centMin = atoi((TString)(((AliConvEventCuts*)fEventCutArray->At(iCut))->GetCutNumber())(1,1));
525 Int_t centMax = atoi((TString)(((AliConvEventCuts*)fEventCutArray->At(iCut))->GetCutNumber())(2,1));
8bdca7f1 526
527 if(collisionSystem == 1 || collisionSystem == 2 ||
528 collisionSystem == 5 || collisionSystem == 8 ||
529 collisionSystem == 9){
530 centMin = centMin*10;
531 centMax = centMax*10;
532 if(centMax ==0 && centMax!=centMin) centMax=100;
533 } else if(collisionSystem == 3 || collisionSystem == 6){
534 centMin = centMin*5;
535 centMax = centMax*5;
536 } else if(collisionSystem == 4 || collisionSystem == 7){
537 centMin = ((centMin*5)+45);
538 centMax = ((centMax*5)+45);
539 }
540
541 fBackList[iCut] = new TList();
344100c4 542 fBackList[iCut]->SetName(Form("%s_%s_%s_%s Back histograms",cutstringEvent.Data(),cutstringPhoton.Data(),cutstringCalo.Data(), cutstringMeson.Data()));
8bdca7f1 543 fBackList[iCut]->SetOwner(kTRUE);
544 fCutFolder[iCut]->Add(fBackList[iCut]);
545
546 fSparseMotherBackInvMassPtZM[iCut] = new THnSparseF("Back_Back_InvMass_Pt_z_m","Back_Back_InvMass_Pt_z_m",nDim,nBins,xMin,xMax);
547 fBackList[iCut]->Add(fSparseMotherBackInvMassPtZM[iCut]);
548
549 fMotherList[iCut] = new TList();
344100c4 550 fMotherList[iCut]->SetName(Form("%s_%s_%s_%s Mother histograms",cutstringEvent.Data(),cutstringPhoton.Data(),cutstringCalo.Data(),cutstringMeson.Data()));
8bdca7f1 551 fMotherList[iCut]->SetOwner(kTRUE);
552 fCutFolder[iCut]->Add(fMotherList[iCut]);
553
554 fSparseMotherInvMassPtZM[iCut] = new THnSparseF("Back_Mother_InvMass_Pt_z_m","Back_Mother_InvMass_Pt_z_m",nDim,nBins,xMin,xMax);
555 fMotherList[iCut]->Add(fSparseMotherInvMassPtZM[iCut]);
556
557 if(((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->BackgroundHandlerType() == 0){
558 fBGHandler[iCut] = new AliGammaConversionAODBGHandler(
559 collisionSystem,centMin,centMax,
560 ((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->GetNumberOfBGEvents(),
cfd87ccd 561 ((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->UseTrackMultiplicity(),
562 2,8,7);
8bdca7f1 563 fBGClusHandler[iCut] = new AliGammaConversionAODBGHandler(
564 collisionSystem,centMin,centMax,
565 ((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->GetNumberOfBGEvents(),
cfd87ccd 566 ((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->UseTrackMultiplicity(),
567 2,8,7);
8bdca7f1 568 fBGHandlerRP[iCut] = NULL;
569 } else{
570 fBGHandlerRP[iCut] = new AliConversionAODBGHandlerRP(
344100c4 571 ((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsHeavyIon(),
8bdca7f1 572 ((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->UseTrackMultiplicity(),
573 ((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->GetNumberOfBGEvents());
574 fBGClusHandlerRP[iCut] = new AliConversionAODBGHandlerRP(
344100c4 575 ((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsHeavyIon(),
8bdca7f1 576 ((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->UseTrackMultiplicity(),
577 ((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->GetNumberOfBGEvents());
578 fBGHandler[iCut] = NULL;
579 }
580 }
581 }
582}
583//________________________________________________________________________
584void AliAnalysisTaskGammaConvCalo::UserCreateOutputObjects(){
585
586 // Create histograms
587 if(fOutputContainer != NULL){
588 delete fOutputContainer;
589 fOutputContainer = NULL;
590 }
591 if(fOutputContainer == NULL){
592 fOutputContainer = new TList();
593 fOutputContainer->SetOwner(kTRUE);
594 }
595
596 // Array of current cut's gammas
597 fGammaCandidates = new TList();
598 fClusterCandidates = new TList();
599
600 fCutFolder = new TList*[fnCuts];
601 fESDList = new TList*[fnCuts];
602 fBackList = new TList*[fnCuts];
603 fMotherList = new TList*[fnCuts];
604 fHistoNEvents = new TH1I*[fnCuts];
605 fHistoNGoodESDTracks = new TH1I*[fnCuts];
606 fHistoNGammaCandidates = new TH1I*[fnCuts];
607 fHistoNGoodESDTracksVsNGammaCanditates = new TH2F*[fnCuts];
608 fHistoNV0Tracks = new TH1I*[fnCuts];
609 fProfileEtaShift = new TProfile*[fnCuts];
610 fHistoConvGammaPt = new TH1F*[fnCuts];
611
612 if (fDoPhotonQA == 2){
613 fPhotonDCAList = new TList*[fnCuts];
614 fTreeConvGammaPtDcazCat = new TTree*[fnCuts];
615 }
616 if (fDoPhotonQA > 0){
617 fHistoConvGammaR = new TH1F*[fnCuts];
618 fHistoConvGammaEta = new TH1F*[fnCuts];
619 }
620
621 if(fDoMesonAnalysis){
622 fHistoMotherInvMassPt = new TH2F*[fnCuts];
d53bf4ac 623 fHistoMotherMatchedInvMassPt = new TH2F*[fnCuts];
8bdca7f1 624 fHistoMotherBackInvMassPt = new TH2F*[fnCuts];
625 fHistoMotherInvMassEalpha = new TH2F*[fnCuts];
626 if (fDoMesonQA == 2){
627 fMesonDCAList = new TList*[fnCuts];
628 fTreeMesonsInvMassPtDcazMinDcazMaxFlag = new TTree*[fnCuts];
629 }
630 if (fDoMesonQA > 0){
631 fHistoMotherPi0PtY = new TH2F*[fnCuts];
632 fHistoMotherEtaPtY = new TH2F*[fnCuts];
633 fHistoMotherPi0PtAlpha = new TH2F*[fnCuts];
634 fHistoMotherEtaPtAlpha = new TH2F*[fnCuts];
635 fHistoMotherPi0PtOpenAngle = new TH2F*[fnCuts];
636 fHistoMotherEtaPtOpenAngle = new TH2F*[fnCuts];
4e8dcc76 637 fHistoMotherPi0ConvPhotonEtaPhi = new TH2F*[fnCuts];
638 fHistoMotherEtaConvPhotonEtaPhi = new TH2F*[fnCuts];
8bdca7f1 639 }
20af4b69 640 if(fDoMesonQA == 1){
641 fHistoMotherInvMassECalib = new TH2F*[fnCuts];
642 fHistoMotherInvMassECalibalpha = new TH2F*[fnCuts];
643 }
8bdca7f1 644 }
645 fTagOutputList = new TList*[fnCuts];
646
647 fHistoConvGammaUntagged = new TH1F*[fnCuts];
648 fHistoConvGammaTagged = new TH1F*[fnCuts];
649 fHistoConvGammaPi0Tagged = new TH1F*[fnCuts];
650 fHistoConvGammaEtaTagged = new TH1F*[fnCuts];
651 fHistoPhotonPairAll = new TH2F*[fnCuts];
652 fHistoPhotonPairAllGam = new TH2F*[fnCuts];
653
654 fHistoClusGammaPt = new TH1F*[fnCuts];
655
656 for(Int_t iCut = 0; iCut<fnCuts;iCut++){
344100c4 657 TString cutstringEvent = ((AliConvEventCuts*)fEventCutArray->At(iCut))->GetCutNumber();
658 TString cutstringPhoton = ((AliConversionPhotonCuts*)fCutArray->At(iCut))->GetCutNumber();
659 TString cutstringCalo = ((AliCaloPhotonCuts*)fClusterCutArray->At(iCut))->GetCutNumber();
660 TString cutstringMeson = "NoMesonCut";
8bdca7f1 661 if(fDoMesonAnalysis)cutstringMeson = ((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->GetCutNumber();
662
663 fCutFolder[iCut] = new TList();
344100c4 664 fCutFolder[iCut]->SetName(Form("Cut Number %s_%s_%s_%s",cutstringEvent.Data(),cutstringPhoton.Data(),cutstringCalo.Data(),cutstringMeson.Data()));
8bdca7f1 665 fCutFolder[iCut]->SetOwner(kTRUE);
666 fOutputContainer->Add(fCutFolder[iCut]);
667 fESDList[iCut] = new TList();
344100c4 668 fESDList[iCut]->SetName(Form("%s_%s_%s_%s ESD histograms",cutstringEvent.Data(),cutstringPhoton.Data(),cutstringCalo.Data(),cutstringMeson.Data()));
8bdca7f1 669 fESDList[iCut]->SetOwner(kTRUE);
670 fCutFolder[iCut]->Add(fESDList[iCut]);
671
7f070437 672 fHistoNEvents[iCut] = new TH1I("NEvents","NEvents",10,-0.5,9.5);
8bdca7f1 673 fHistoNEvents[iCut]->GetXaxis()->SetBinLabel(1,"Accepted");
674 fHistoNEvents[iCut]->GetXaxis()->SetBinLabel(2,"Centrality");
675 fHistoNEvents[iCut]->GetXaxis()->SetBinLabel(3,"Missing MC");
f57c67ac 676 if (((AliConvEventCuts*)fEventCutArray->At(iCut))->IsSpecialTrigger() > 1 ){
8bdca7f1 677 TString TriggerNames = "Not Trigger: ";
344100c4 678 TriggerNames = TriggerNames+ ( (AliConvEventCuts*)fEventCutArray->At(iCut))->GetSpecialTriggerName();
8bdca7f1 679 fHistoNEvents[iCut]->GetXaxis()->SetBinLabel(4,TriggerNames.Data());
680 } else {
681 fHistoNEvents[iCut]->GetXaxis()->SetBinLabel(4,"Trigger");
682 }
683 fHistoNEvents[iCut]->GetXaxis()->SetBinLabel(5,"Vertex Z");
684 fHistoNEvents[iCut]->GetXaxis()->SetBinLabel(6,"Cont. Vertex");
685 fHistoNEvents[iCut]->GetXaxis()->SetBinLabel(7,"Pile-Up");
686 fHistoNEvents[iCut]->GetXaxis()->SetBinLabel(8,"no SDD");
687 fHistoNEvents[iCut]->GetXaxis()->SetBinLabel(9,"no V0AND");
7f070437 688 fHistoNEvents[iCut]->GetXaxis()->SetBinLabel(10,"EMCAL problem");
8bdca7f1 689 fESDList[iCut]->Add(fHistoNEvents[iCut]);
690
691 if(fIsHeavyIon == 1) fHistoNGoodESDTracks[iCut] = new TH1I("GoodESDTracks","GoodESDTracks",4000,0,4000);
692 else if(fIsHeavyIon == 2) fHistoNGoodESDTracks[iCut] = new TH1I("GoodESDTracks","GoodESDTracks",400,0,400);
693 else fHistoNGoodESDTracks[iCut] = new TH1I("GoodESDTracks","GoodESDTracks",200,0,200);
694 fESDList[iCut]->Add(fHistoNGoodESDTracks[iCut]);
695 if(fIsHeavyIon == 1) fHistoNGammaCandidates[iCut] = new TH1I("GammaCandidates","GammaCandidates",100,0,100);
696 else if(fIsHeavyIon == 2) fHistoNGammaCandidates[iCut] = new TH1I("GammaCandidates","GammaCandidates",50,0,50);
697 else fHistoNGammaCandidates[iCut] = new TH1I("GammaCandidates","GammaCandidates",50,0,50);
698 fESDList[iCut]->Add(fHistoNGammaCandidates[iCut]);
699 if(fIsHeavyIon == 1) fHistoNGoodESDTracksVsNGammaCanditates[iCut] = new TH2F("GoodESDTracksVsGammaCandidates","GoodESDTracksVsGammaCandidates",4000,0,4000,100,0,100);
700 else if(fIsHeavyIon == 2) fHistoNGoodESDTracksVsNGammaCanditates[iCut] = new TH2F("GoodESDTracksVsGammaCandidates","GoodESDTracksVsGammaCandidates",400,0,400,50,0,50);
701 else fHistoNGoodESDTracksVsNGammaCanditates[iCut] = new TH2F("GoodESDTracksVsGammaCandidates","GoodESDTracksVsGammaCandidates",200,0,200,50,0,50);
702 fESDList[iCut]->Add(fHistoNGoodESDTracksVsNGammaCanditates[iCut]);
703
704
705 if(fIsHeavyIon == 1) fHistoNV0Tracks[iCut] = new TH1I("V0 Multiplicity","V0 Multiplicity",30000,0,30000);
706 else if(fIsHeavyIon == 2) fHistoNV0Tracks[iCut] = new TH1I("V0 Multiplicity","V0 Multiplicity",2500,0,2500);
707 else fHistoNV0Tracks[iCut] = new TH1I("V0 Multiplicity","V0 Multiplicity",1500,0,1500);
708 fESDList[iCut]->Add(fHistoNV0Tracks[iCut]);
709 fProfileEtaShift[iCut] = new TProfile("Eta Shift","Eta Shift",1, -0.5,0.5);
710 fESDList[iCut]->Add(fProfileEtaShift[iCut]);
711 fHistoConvGammaPt[iCut] = new TH1F("ESD_ConvGamma_Pt","ESD_ConvGamma_Pt",250,0,25);
712 fESDList[iCut]->Add(fHistoConvGammaPt[iCut]);
713
714 if (fDoPhotonQA == 2){
715 fPhotonDCAList[iCut] = new TList();
344100c4 716 fPhotonDCAList[iCut]->SetName(Form("%s_%s_%s_%s Photon DCA tree",cutstringEvent.Data(),cutstringPhoton.Data(),cutstringCalo.Data(),cutstringMeson.Data()));
8bdca7f1 717 fPhotonDCAList[iCut]->SetOwner(kTRUE);
718 fCutFolder[iCut]->Add(fPhotonDCAList[iCut]);
719
720 fTreeConvGammaPtDcazCat[iCut] = new TTree("ESD_ConvGamma_Pt_Dcaz_R_Eta","ESD_ConvGamma_Pt_Dcaz_R_Eta_Cat");
721 fTreeConvGammaPtDcazCat[iCut]->Branch("Pt",&fPtGamma,"fPtGamma/F");
722 fTreeConvGammaPtDcazCat[iCut]->Branch("DcaZPhoton",&fDCAzPhoton,"fDCAzPhoton/F");
723 // fTreeConvGammaPtDcazCat[iCut]->Branch("R",&fRConvPhoton,"fRConvPhoton/F");
724 // fTreeConvGammaPtDcazCat[iCut]->Branch("Eta",&fEtaPhoton,"fEtaPhoton/F");
725
726 fTreeConvGammaPtDcazCat[iCut]->Branch("cat",&fCharCatPhoton,"fCharCatPhoton/b");
727 if(fIsMC){
728 fTreeConvGammaPtDcazCat[iCut]->Branch("photonMCInfo",&fCharPhotonMCInfo,"fCharPhotonMCInfo/b");
729 }
730 fPhotonDCAList[iCut]->Add(fTreeConvGammaPtDcazCat[iCut]);
731 }
732
733 if (fDoPhotonQA > 0){
734 fHistoConvGammaR[iCut] = new TH1F("ESD_ConvGamma_R","ESD_ConvGamma_R",800,0,200);
735 fESDList[iCut]->Add(fHistoConvGammaR[iCut]);
736 fHistoConvGammaEta[iCut] = new TH1F("ESD_ConvGamma_Eta","ESD_ConvGamma_Eta",2000,-2,2);
737 fESDList[iCut]->Add(fHistoConvGammaEta[iCut]);
738 }
739
740 fTagOutputList[iCut] = new TList();
344100c4 741 fTagOutputList[iCut]->SetName(Form("%s_%s_%s_%s Tagging Output",cutstringEvent.Data(),cutstringPhoton.Data(),cutstringCalo.Data(),cutstringMeson.Data()));
8bdca7f1 742 fTagOutputList[iCut]->SetOwner(1);
743 fCutFolder[iCut]->Add(fTagOutputList[iCut]);
744
745 const Int_t nptbins = 200;
746 const Double_t ptmin = 0.;
747 const Double_t ptmax = 20.;
748
749 const Int_t nmbins = 180;
750 const Double_t mmin = 0.;
751 const Double_t mmax = 0.9;
752
753 // photon candidates
754 // this is maybe not necessary ...
755
756 fHistoConvGammaUntagged[iCut] = new TH1F("ConvGammaUntagged","",nptbins,ptmin,ptmax);
757 fHistoConvGammaUntagged[iCut]->SetXTitle("p_{T} (GeV/c)");
758 fTagOutputList[iCut]->Add(fHistoConvGammaUntagged[iCut]);
759
760 fHistoConvGammaTagged[iCut] = new TH1F("ConvGammaTagged","",nptbins,ptmin,ptmax);
761 fHistoConvGammaTagged[iCut]->SetXTitle("p_{T} (GeV/c)");
762 fTagOutputList[iCut]->Add(fHistoConvGammaTagged[iCut]);
763
764 fHistoConvGammaPi0Tagged[iCut] = new TH1F("ConvGammaPi0Tagged","",nptbins,ptmin,ptmax);
765 fHistoConvGammaPi0Tagged[iCut]->SetXTitle("p_{T} (GeV/c)");
766 fTagOutputList[iCut]->Add(fHistoConvGammaPi0Tagged[iCut]);
767
768 fHistoConvGammaEtaTagged[iCut] = new TH1F("ConvGammaEtaTagged","",nptbins,ptmin,ptmax);
769 fHistoConvGammaEtaTagged[iCut]->SetXTitle("p_{T} (GeV/c)");
770 fTagOutputList[iCut]->Add(fHistoConvGammaEtaTagged[iCut]);
771
772 // pairs
773 fHistoPhotonPairAll[iCut] = new TH2F("PhotonPairAll","",nmbins,mmin,mmax,nptbins,ptmin,ptmax);
774 fHistoPhotonPairAll[iCut]->SetXTitle("M_{inv} (GeV/cc)");
775 fHistoPhotonPairAll[iCut]->SetYTitle("p_{T} (GeV/c)");
776 fTagOutputList[iCut]->Add(fHistoPhotonPairAll[iCut]);
777
778 fHistoPhotonPairAllGam[iCut] = new TH2F("PhotonPairAllGammaConvPt","",nmbins,mmin,mmax,nptbins,ptmin,ptmax);
779 fHistoPhotonPairAllGam[iCut]->SetXTitle("M_{inv} (GeV/cc)");
780 fHistoPhotonPairAllGam[iCut]->SetYTitle("#gamma^{conv} p_{T} (GeV/c)");
781 fTagOutputList[iCut]->Add(fHistoPhotonPairAllGam[iCut]);
782
783 fHistoClusGammaPt[iCut] = new TH1F("ClusGamma_Pt","ClusGamma_Pt",250,0,25);
784 fTagOutputList[iCut]->Add(fHistoClusGammaPt[iCut]);
785
786
787 if(fDoMesonAnalysis){
788 fHistoMotherInvMassPt[iCut] = new TH2F("ESD_Mother_InvMass_Pt","ESD_Mother_InvMass_Pt",800,0,0.8,250,0,25);
789 fESDList[iCut]->Add(fHistoMotherInvMassPt[iCut]);
d53bf4ac 790 fHistoMotherMatchedInvMassPt[iCut] = new TH2F("ESD_MotherMatched_InvMass_Pt","ESD_MotherMatched_InvMass_Pt",800,0,0.8,250,0,25);
791 fESDList[iCut]->Add(fHistoMotherMatchedInvMassPt[iCut]);
8bdca7f1 792 fHistoMotherBackInvMassPt[iCut] = new TH2F("ESD_Background_InvMass_Pt","ESD_Background_InvMass_Pt",800,0,0.8,250,0,25);
793 fESDList[iCut]->Add(fHistoMotherBackInvMassPt[iCut]);
794 fHistoMotherInvMassEalpha[iCut] = new TH2F("ESD_Mother_InvMass_vs_E_alpha","ESD_Mother_InvMass_vs_E_alpha",800,0,0.8,250,0,25);
795 fESDList[iCut]->Add(fHistoMotherInvMassEalpha[iCut]);
796 if (fDoMesonQA == 2){
797 fMesonDCAList[iCut] = new TList();
344100c4 798 fMesonDCAList[iCut]->SetName(Form("%s_%s_%s_%s Meson DCA tree",cutstringEvent.Data(),cutstringPhoton.Data(),cutstringCalo.Data(),cutstringMeson.Data()));
8bdca7f1 799 fMesonDCAList[iCut]->SetOwner(kTRUE);
800 fCutFolder[iCut]->Add(fMesonDCAList[iCut]);
801
802 fTreeMesonsInvMassPtDcazMinDcazMaxFlag[iCut] = new TTree("ESD_Mesons_InvMass_Pt_DcazMin_DcazMax_Flag","ESD_Mesons_InvMass_Pt_DcazMin_DcazMax_Flag");
803 fTreeMesonsInvMassPtDcazMinDcazMaxFlag[iCut]->Branch("InvMass",&fInvMass,"fInvMass/F");
804 fTreeMesonsInvMassPtDcazMinDcazMaxFlag[iCut]->Branch("Pt",&fPt,"fPt/F");
805 fTreeMesonsInvMassPtDcazMinDcazMaxFlag[iCut]->Branch("DcaZMin",&fDCAzGammaMin,"fDCAzGammaMin/F");
806 fTreeMesonsInvMassPtDcazMinDcazMaxFlag[iCut]->Branch("DcaZMax",&fDCAzGammaMax,"fDCAzGammaMax/F");
807 fTreeMesonsInvMassPtDcazMinDcazMaxFlag[iCut]->Branch("kind",&fCharFlag,"fCharFlag/b");
808 if(fIsMC){
809 fTreeMesonsInvMassPtDcazMinDcazMaxFlag[iCut]->Branch("mesonMCInfo",&fCharMesonMCInfo,"fCharMesonMCInfo/b");
810 }
811 fMesonDCAList[iCut]->Add(fTreeMesonsInvMassPtDcazMinDcazMaxFlag[iCut]);
812
813 }
20af4b69 814 if(fDoMesonQA == 1){
41ed7315 815 fHistoMotherInvMassECalib[iCut] = new TH2F("ESD_Mother_InvMass_E_Calib","ESD_Mother_InvMass_E_Calib",800,0,0.8,250,0,25);
20af4b69 816 fESDList[iCut]->Add(fHistoMotherInvMassECalib[iCut]);
817 fHistoMotherInvMassECalibalpha[iCut] = new TH2F("ESD_Mother_InvMass_vs_E_Calib_alpha","ESD_Mother_InvMass_vs_E_Calib_alpha",800,0,0.8,250,0,25);
818 fESDList[iCut]->Add(fHistoMotherInvMassECalibalpha[iCut]);
819 }
820
8bdca7f1 821 if (fDoMesonQA > 0 ){
822 fHistoMotherPi0PtY[iCut] = new TH2F("ESD_MotherPi0_Pt_Y","ESD_MotherPi0_Pt_Y",150,0.03,15.,150,-1.5,1.5);
823 SetLogBinningXTH2(fHistoMotherPi0PtY[iCut]);
824 fESDList[iCut]->Add(fHistoMotherPi0PtY[iCut]);
825 fHistoMotherEtaPtY[iCut] = new TH2F("ESD_MotherEta_Pt_Y","ESD_MotherEta_Pt_Y",150,0.03,15.,150,-1.5,1.5);
826 SetLogBinningXTH2(fHistoMotherEtaPtY[iCut]);
827 fESDList[iCut]->Add(fHistoMotherEtaPtY[iCut]);
828 fHistoMotherPi0PtAlpha[iCut] = new TH2F("ESD_MotherPi0_Pt_Alpha","ESD_MotherPi0_Pt_Alpha",150,0.03,15.,100,0,1);
829 SetLogBinningXTH2(fHistoMotherPi0PtAlpha[iCut]);
830 fESDList[iCut]->Add(fHistoMotherPi0PtAlpha[iCut]);
831 fHistoMotherEtaPtAlpha[iCut] = new TH2F("ESD_MotherEta_Pt_Alpha","ESD_MotherEta_Pt_Alpha",150,0.03,15.,100,0,1);
832 SetLogBinningXTH2(fHistoMotherEtaPtAlpha[iCut]);
833 fESDList[iCut]->Add(fHistoMotherEtaPtAlpha[iCut]);
f57c67ac 834 fHistoMotherPi0PtOpenAngle[iCut] = new TH2F("ESD_MotherPi0_Pt_OpenAngle","ESD_MotherPi0_Pt_OpenAngle",150,0.03,15.,100,0,TMath::Pi());
8bdca7f1 835 SetLogBinningXTH2(fHistoMotherPi0PtOpenAngle[iCut]);
836 fESDList[iCut]->Add(fHistoMotherPi0PtOpenAngle[iCut]);
f57c67ac 837 fHistoMotherEtaPtOpenAngle[iCut] = new TH2F("ESD_MotherEta_Pt_OpenAngle","ESD_MotherEta_Pt_OpenAngle",150,0.03,15.,100,0,TMath::Pi());
8bdca7f1 838 SetLogBinningXTH2(fHistoMotherEtaPtOpenAngle[iCut]);
839 fESDList[iCut]->Add(fHistoMotherEtaPtOpenAngle[iCut]);
4e8dcc76 840 fHistoMotherPi0ConvPhotonEtaPhi[iCut] = new TH2F("ESD_MotherPi0ConvPhoton_Eta_Phi","ESD_MotherPi0ConvPhoton_Eta_Phi",600,0,2*TMath::Pi(),400,-2,2);
841 fESDList[iCut]->Add(fHistoMotherPi0ConvPhotonEtaPhi[iCut]);
842 fHistoMotherEtaConvPhotonEtaPhi[iCut] = new TH2F("ESD_MotherEtaConvPhoton_Eta_Phi","ESD_MotherEtaConvPhoton_Eta_Phi",600,0,2*TMath::Pi(),400,-2,2);
843 fESDList[iCut]->Add(fHistoMotherEtaConvPhotonEtaPhi[iCut]);
8bdca7f1 844 }
845 }
846 }
847 if(fDoMesonAnalysis){
848 InitBack(); // Init Background Handler
849 }
850
851 if(fIsMC){
852 // MC Histogramms
fd94f234 853 fMCList = new TList*[fnCuts];
8bdca7f1 854 // True Histogramms
fd94f234 855 fTrueList = new TList*[fnCuts];
8bdca7f1 856 // Selected Header List
fd94f234 857 fHeaderNameList = new TList*[fnCuts];
858 fHistoMCHeaders = new TH1I*[fnCuts];
859 fHistoMCAllGammaPt = new TH1F*[fnCuts];
20af4b69 860 fHistoMCAllGammaEMCALAccPt = new TH1F*[fnCuts];
fd94f234 861 fHistoMCDecayGammaPi0Pt = new TH1F*[fnCuts];
862 fHistoMCDecayGammaRhoPt = new TH1F*[fnCuts];
863 fHistoMCDecayGammaEtaPt = new TH1F*[fnCuts];
864 fHistoMCDecayGammaOmegaPt = new TH1F*[fnCuts];
865 fHistoMCDecayGammaEtapPt = new TH1F*[fnCuts];
866 fHistoMCDecayGammaPhiPt = new TH1F*[fnCuts];
867 fHistoMCDecayGammaSigmaPt = new TH1F*[fnCuts];
868 fHistoMCConvGammaPt = new TH1F*[fnCuts];
869 fHistoTrueConvGammaPt = new TH1F*[fnCuts];
870 fHistoTrueConvPi0GammaPt = new TH1F*[fnCuts];
8bdca7f1 871
fd94f234 872 fHistoCombinatorialPt = new TH2F*[fnCuts];
873 fHistoTruePrimaryConvGammaPt = new TH1F*[fnCuts];
874 fHistoTruePrimaryConvGammaESDPtMCPt = new TH2F*[fnCuts];
875 fHistoTrueSecondaryConvGammaPt = new TH1F*[fnCuts];
876 fHistoTrueSecondaryConvGammaFromXFromK0sPt = new TH1F*[fnCuts];
877 fHistoTrueSecondaryConvGammaFromXFromLambdaPt = new TH1F*[fnCuts];
8bdca7f1 878
fd94f234 879 fHistoTrueClusGammaPt = new TH1F*[fnCuts];
880 fHistoTruePrimaryClusGammaPt = new TH1F*[fnCuts];
8bdca7f1 881 fHistoTruePrimaryClusGammaESDPtMCPt = new TH2F*[fnCuts];
882
883 if (fDoPhotonQA > 0){
fd94f234 884 fHistoMCConvGammaR = new TH1F*[fnCuts];
885 fHistoMCConvGammaEta = new TH1F*[fnCuts];
886 fHistoTrueConvGammaEta = new TH1F*[fnCuts];
887 }
888 if (fDoClusterQA > 0){
889 fHistoTrueClusUnConvGammaPt = new TH1F*[fnCuts];
20af4b69 890 fHistoTrueClusUnConvGammaMCPt = new TH1F*[fnCuts];
fd94f234 891 fHistoTrueClusElectronPt = new TH1F*[fnCuts];
892 fHistoTrueClusConvGammaPt = new TH1F*[fnCuts];
20af4b69 893 fHistoTrueClusConvGammaMCPt = new TH1F*[fnCuts];
fd94f234 894 fHistoTrueClusConvGammaFullyPt = new TH1F*[fnCuts];
895 fHistoTrueClusMergedGammaPt = new TH1F*[fnCuts];
896 fHistoTrueClusMergedPartConvGammaPt = new TH1F*[fnCuts];
897 fHistoTrueClusDalitzPt = new TH1F*[fnCuts];
898 fHistoTrueClusDalitzMergedPt = new TH1F*[fnCuts];
899 fHistoTrueClusPhotonFromElecMotherPt= new TH1F*[fnCuts];
900 fHistoTrueClusShowerPt = new TH1F*[fnCuts];
cc579963 901 fHistoTrueClusSubLeadingPt = new TH1F*[fnCuts];
902 fHistoTrueClusNParticles = new TH1I*[fnCuts];
fd94f234 903 fHistoTrueClusEMNonLeadingPt = new TH1F*[fnCuts];
904 fHistoTrueNLabelsInClus = new TH1F*[fnCuts];
8bdca7f1 905 }
906
907 if(fDoMesonAnalysis){
fd94f234 908 fHistoMCPi0Pt = new TH1F*[fnCuts];
909 fHistoMCPi0WOWeightPt = new TH1F*[fnCuts];
910 fHistoMCEtaPt = new TH1F*[fnCuts];
911 fHistoMCEtaWOWeightPt = new TH1F*[fnCuts];
912 fHistoMCPi0InAccPt = new TH1F*[fnCuts];
913 fHistoMCEtaInAccPt = new TH1F*[fnCuts];
8bdca7f1 914
ed8bc1ca 915 fHistoTruePi0InvMassPt = new TH2F*[fnCuts];
916 fHistoTrueEtaInvMassPt = new TH2F*[fnCuts];
917 fHistoTruePrimaryPi0InvMassPt = new TH2F*[fnCuts];
918 fHistoTruePrimaryEtaInvMassPt = new TH2F*[fnCuts];
919 fHistoTruePrimaryPi0W0WeightingInvMassPt = new TH2F*[fnCuts];
920 fHistoTruePrimaryEtaW0WeightingInvMassPt = new TH2F*[fnCuts];
921 fProfileTruePrimaryPi0WeightsInvMassPt = new TProfile2D*[fnCuts];
922 fProfileTruePrimaryEtaWeightsInvMassPt = new TProfile2D*[fnCuts];
923 fHistoTrueSecondaryPi0InvMassPt = new TH2F*[fnCuts];
924 fHistoTrueSecondaryEtaInvMassPt = new TH2F*[fnCuts];
925 fHistoTrueSecondaryPi0FromK0sInvMassPt = new TH2F*[fnCuts];
926 fHistoTrueSecondaryPi0FromEtaInvMassPt = new TH2F*[fnCuts];
927 fHistoTrueSecondaryPi0FromLambdaInvMassPt = new TH2F*[fnCuts];
8bdca7f1 928 if (fDoMesonQA > 0){
fd94f234 929 fHistoMCPi0PtY = new TH2F*[fnCuts];
930 fHistoMCEtaPtY = new TH2F*[fnCuts];
de752898 931 fHistoMCPi0PtAlpha = new TH2F*[fnCuts];
932 fHistoMCEtaPtAlpha = new TH2F*[fnCuts];
fd94f234 933 fHistoMCK0sPt = new TH1F*[fnCuts];
934 fHistoMCK0sWOWeightPt = new TH1F*[fnCuts];
935 fHistoMCK0sPtY = new TH2F*[fnCuts];
936 fHistoMCSecPi0PtvsSource = new TH2F*[fnCuts];
937 fHistoMCSecPi0Source = new TH1F*[fnCuts];
938 fHistoMCSecEtaPt = new TH1F*[fnCuts];
939 fHistoMCSecEtaSource = new TH1F*[fnCuts];
ed8bc1ca 940 fHistoTruePi0CaloPhotonInvMassPt = new TH2F*[fnCuts];
941 fHistoTrueEtaCaloPhotonInvMassPt = new TH2F*[fnCuts];
20af4b69 942 fHistoTruePi0CaloConvertedPhotonInvMassPt = new TH2F*[fnCuts];
943 fHistoTruePi0CaloConvertedPhotonMatchedInvMassPt = new TH2F*[fnCuts];
944 fHistoTrueEtaCaloConvertedPhotonInvMassPt = new TH2F*[fnCuts];
945 fHistoTrueEtaCaloConvertedPhotonMatchedInvMassPt = new TH2F*[fnCuts];
ed8bc1ca 946 fHistoTruePi0CaloElectronInvMassPt = new TH2F*[fnCuts];
947 fHistoTrueEtaCaloElectronInvMassPt = new TH2F*[fnCuts];
948 fHistoTruePi0CaloMergedClusterInvMassPt = new TH2F*[fnCuts];
949 fHistoTrueEtaCaloMergedClusterInvMassPt = new TH2F*[fnCuts];
950 fHistoTruePi0CaloMergedClusterPartConvInvMassPt = new TH2F*[fnCuts];
951 fHistoTrueEtaCaloMergedClusterPartConvInvMassPt = new TH2F*[fnCuts];
fd94f234 952 fHistoTrueMotherCaloEMNonLeadingInvMassPt = new TH2F*[fnCuts];
953 fHistoTruePrimaryPi0MCPtResolPt = new TH2F*[fnCuts];
954 fHistoTruePrimaryEtaMCPtResolPt = new TH2F*[fnCuts];
955 fHistoTrueK0sWithPi0DaughterMCPt = new TH1F*[fnCuts];
956 fHistoTrueEtaWithPi0DaughterMCPt = new TH1F*[fnCuts];
957 fHistoTrueLambdaWithPi0DaughterMCPt = new TH1F*[fnCuts];
958 fHistoTrueBckGGInvMassPt = new TH2F*[fnCuts];
959 fHistoTrueBckContInvMassPt = new TH2F*[fnCuts];
960 fHistoTruePi0PtY = new TH2F*[fnCuts];
961 fHistoTrueEtaPtY = new TH2F*[fnCuts];
962 fHistoTruePi0PtAlpha = new TH2F*[fnCuts];
963 fHistoTrueEtaPtAlpha = new TH2F*[fnCuts];
964 fHistoTruePi0PtOpenAngle = new TH2F*[fnCuts];
965 fHistoTrueEtaPtOpenAngle = new TH2F*[fnCuts];
c2405f5c 966 fHistoTrueMotherPi0ConvPhotonEtaPhi = new TH2F*[fnCuts];
967 fHistoTrueMotherEtaConvPhotonEtaPhi = new TH2F*[fnCuts];
8bdca7f1 968 }
969 }
970
971
972
973 for(Int_t iCut = 0; iCut<fnCuts;iCut++){
344100c4 974 TString cutstringEvent = ((AliConvEventCuts*)fEventCutArray->At(iCut))->GetCutNumber();
975 TString cutstringPhoton = ((AliConversionPhotonCuts*)fCutArray->At(iCut))->GetCutNumber();
976 TString cutstringCalo = ((AliCaloPhotonCuts*)fClusterCutArray->At(iCut))->GetCutNumber();
977 TString cutstringMeson = "NoMesonCut";
8bdca7f1 978 if(fDoMesonAnalysis)cutstringMeson = ((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->GetCutNumber();
979
980 fMCList[iCut] = new TList();
344100c4 981 fMCList[iCut]->SetName(Form("%s_%s_%s_%s MC histograms",cutstringEvent.Data(),cutstringPhoton.Data(),cutstringCalo.Data(),cutstringMeson.Data()));
8bdca7f1 982 fMCList[iCut]->SetOwner(kTRUE);
983 fCutFolder[iCut]->Add(fMCList[iCut]);
984 fHistoMCHeaders[iCut] = new TH1I("MC_Headers","MC_Headers",20,0,20);
985 fMCList[iCut]->Add(fHistoMCHeaders[iCut]);
986 fHistoMCAllGammaPt[iCut] = new TH1F("MC_AllGamma_Pt","MC_AllGamma_Pt",250,0,25);
987 fMCList[iCut]->Add(fHistoMCAllGammaPt[iCut]);
d404157c 988 fHistoMCAllGammaEMCALAccPt[iCut] = new TH1F("MC_AllGammaEMCALAcc_Pt","MC_AllGammaEMCALAcc_Pt",250,0,25);
20af4b69 989 fMCList[iCut]->Add(fHistoMCAllGammaEMCALAccPt[iCut]);
8bdca7f1 990 fHistoMCDecayGammaPi0Pt[iCut] = new TH1F("MC_DecayGammaPi0_Pt","MC_DecayGammaPi0_Pt",250,0,25);
991 fMCList[iCut]->Add(fHistoMCDecayGammaPi0Pt[iCut]);
992 fHistoMCDecayGammaRhoPt[iCut] = new TH1F("MC_DecayGammaRho_Pt","MC_DecayGammaRho_Pt",250,0,25);
993 fMCList[iCut]->Add(fHistoMCDecayGammaRhoPt[iCut]);
994 fHistoMCDecayGammaEtaPt[iCut] = new TH1F("MC_DecayGammaEta_Pt","MC_DecayGammaEta_Pt",250,0,25);
995 fMCList[iCut]->Add(fHistoMCDecayGammaEtaPt[iCut]);
996 fHistoMCDecayGammaOmegaPt[iCut] = new TH1F("MC_DecayGammaOmega_Pt","MC_DecayGammaOmmega_Pt",250,0,25);
997 fMCList[iCut]->Add(fHistoMCDecayGammaOmegaPt[iCut]);
998 fHistoMCDecayGammaEtapPt[iCut] = new TH1F("MC_DecayGammaEtap_Pt","MC_DecayGammaEtap_Pt",250,0,25);
999 fMCList[iCut]->Add(fHistoMCDecayGammaEtapPt[iCut]);
1000 fHistoMCDecayGammaPhiPt[iCut] = new TH1F("MC_DecayGammaPhi_Pt","MC_DecayGammaPhi_Pt",250,0,25);
1001 fMCList[iCut]->Add(fHistoMCDecayGammaPhiPt[iCut]);
1002 fHistoMCDecayGammaSigmaPt[iCut] = new TH1F("MC_DecayGammaSigma_Pt","MC_DecayGammaSigma_Pt",250,0,25);
1003 fMCList[iCut]->Add(fHistoMCDecayGammaSigmaPt[iCut]);
1004 fHistoMCConvGammaPt[iCut] = new TH1F("MC_ConvGamma_Pt","MC_ConvGamma_Pt",250,0,25);
1005 fMCList[iCut]->Add(fHistoMCConvGammaPt[iCut]);
1006
1007 if (fDoPhotonQA > 0){
1008 fHistoMCConvGammaR[iCut] = new TH1F("MC_ConvGamma_R","MC_ConvGamma_R",800,0,200);
1009 fMCList[iCut]->Add(fHistoMCConvGammaR[iCut]);
1010 fHistoMCConvGammaEta[iCut] = new TH1F("MC_ConvGamma_Eta","MC_ConvGamma_Eta",2000,-2,2);
1011 fMCList[iCut]->Add(fHistoMCConvGammaEta[iCut]);
1012 }
1013
1014 if(fDoMesonAnalysis){
1015 fHistoMCPi0Pt[iCut] = new TH1F("MC_Pi0_Pt","MC_Pi0_Pt",250,0,25);
1016 fHistoMCPi0Pt[iCut]->Sumw2();
1017 fMCList[iCut]->Add(fHistoMCPi0Pt[iCut]);
1018 fHistoMCPi0WOWeightPt[iCut] = new TH1F("MC_Pi0_WOWeights_Pt","MC_Pi0_WOWeights_Pt",250,0,25);
1019 fHistoMCPi0WOWeightPt[iCut]->Sumw2();
1020 fMCList[iCut]->Add(fHistoMCPi0WOWeightPt[iCut]);
1021
1022 fHistoMCEtaPt[iCut] = new TH1F("MC_Eta_Pt","MC_Eta_Pt",250,0,25);
1023 fHistoMCEtaPt[iCut]->Sumw2();
1024 fMCList[iCut]->Add(fHistoMCEtaPt[iCut]);
1025 fHistoMCEtaWOWeightPt[iCut] = new TH1F("MC_Eta_WOWeights_Pt","MC_Eta_WOWeights_Pt",250,0,25);
1026 fHistoMCEtaWOWeightPt[iCut]->Sumw2();
1027 fMCList[iCut]->Add(fHistoMCEtaWOWeightPt[iCut]);
1028 fHistoMCPi0InAccPt[iCut] = new TH1F("MC_Pi0InAcc_Pt","MC_Pi0InAcc_Pt",250,0,25);
1029 fHistoMCPi0InAccPt[iCut]->Sumw2();
1030 fMCList[iCut]->Add(fHistoMCPi0InAccPt[iCut]);
1031 fHistoMCEtaInAccPt[iCut] = new TH1F("MC_EtaInAcc_Pt","MC_EtaInAcc_Pt",250,0,25);
1032 fHistoMCEtaInAccPt[iCut]->Sumw2();
1033 fMCList[iCut]->Add(fHistoMCEtaInAccPt[iCut]);
1034 if (fDoMesonQA > 0){
1035 fHistoMCPi0PtY[iCut] = new TH2F("MC_Pi0_Pt_Y","MC_Pi0_Pt_Y",150,0.03,15.,150,-1.5,1.5);
1036 fHistoMCPi0PtY[iCut]->Sumw2();
1037 SetLogBinningXTH2(fHistoMCPi0PtY[iCut]);
1038 fMCList[iCut]->Add(fHistoMCPi0PtY[iCut]);
1039 fHistoMCEtaPtY[iCut] = new TH2F("MC_Eta_Pt_Y","MC_Eta_Pt_Y",150,0.03,15.,150,-1.5,1.5);
1040 fHistoMCEtaPtY[iCut]->Sumw2();
1041 SetLogBinningXTH2(fHistoMCEtaPtY[iCut]);
1042 fMCList[iCut]->Add(fHistoMCEtaPtY[iCut]);
de752898 1043 fHistoMCPi0PtAlpha[iCut] = new TH2F("MC_Pi0_Pt_Alpha","MC_Pi0_Pt_Alpha",150,0.03,15.,100,0,1);
1044 SetLogBinningXTH2(fHistoMCPi0PtAlpha[iCut]);
1045 fMCList[iCut]->Add(fHistoMCPi0PtAlpha[iCut]);
1046 fHistoMCEtaPtAlpha[iCut] = new TH2F("MC_Eta_Pt_Alpha","MC_Eta_Pt_Alpha",150,0.03,15.,100,0,1);
1047 SetLogBinningXTH2(fHistoMCEtaPtAlpha[iCut]);
1048 fMCList[iCut]->Add(fHistoMCEtaPtAlpha[iCut]);
1049
8bdca7f1 1050 fHistoMCK0sPt[iCut] = new TH1F("MC_K0s_Pt","MC_K0s_Pt",150,0,15);
1051 fHistoMCK0sPt[iCut]->Sumw2();
1052 fMCList[iCut]->Add(fHistoMCK0sPt[iCut]);
1053 fHistoMCK0sWOWeightPt[iCut] = new TH1F("MC_K0s_WOWeights_Pt","MC_K0s_WOWeights_Pt",150,0,15);
1054 fHistoMCK0sWOWeightPt[iCut]->Sumw2();
1055 fMCList[iCut]->Add(fHistoMCK0sWOWeightPt[iCut]);
1056 fHistoMCK0sPtY[iCut] = new TH2F("MC_K0s_Pt_Y","MC_K0s_Pt_Y",150,0.03,15.,150,-1.5,1.5);
1057 fHistoMCK0sPtY[iCut]->Sumw2();
1058 SetLogBinningXTH2(fHistoMCK0sPtY[iCut]);
1059 fMCList[iCut]->Add(fHistoMCK0sPtY[iCut]);
1060
1061 fHistoMCSecPi0Source[iCut] = new TH1F("MC_SecPi0_Source","MC_SecPi0_Source",5000,0.,5000);
1062 fMCList[iCut]->Add(fHistoMCSecPi0Source[iCut]);
1063 fHistoMCSecEtaSource[iCut] = new TH1F("MC_SecEta_Source","MC_SecEta_Source",5000,0,5000);
1064 fMCList[iCut]->Add(fHistoMCSecEtaSource[iCut]);
1065 fHistoMCSecPi0PtvsSource[iCut] = new TH2F("MC_SecPi0_Pt_Source","MC_SecPi0_Pt_Source",250,0.0,25.,16,-0.5,15.5);
1066 fHistoMCSecPi0PtvsSource[iCut]->Sumw2();
1067 fMCList[iCut]->Add(fHistoMCSecPi0PtvsSource[iCut]);
1068 fHistoMCSecEtaPt[iCut] = new TH1F("MC_SecEta_Pt","MC_SecEta_Pt",250,0,25);
1069 fHistoMCSecEtaPt[iCut]->Sumw2();
1070 fMCList[iCut]->Add(fHistoMCSecEtaPt[iCut]);
1071 }
1072
1073 }
1074 fTrueList[iCut] = new TList();
344100c4 1075 fTrueList[iCut]->SetName(Form("%s_%s_%s_%s True histograms",cutstringEvent.Data(),cutstringPhoton.Data(),cutstringCalo.Data(),cutstringMeson.Data()));
8bdca7f1 1076 fTrueList[iCut]->SetOwner(kTRUE);
1077 fCutFolder[iCut]->Add(fTrueList[iCut]);
1078
1079 fHistoTrueConvGammaPt[iCut] = new TH1F("ESD_TrueConvGamma_Pt","ESD_TrueConvGamma_Pt",250,0,25);
1080 fTrueList[iCut]->Add(fHistoTrueConvGammaPt[iCut]);
1081
41ed7315 1082 fHistoTrueConvPi0GammaPt[iCut] = new TH1F("ESD_TrueConvPi0Gamma_Pt","ESD_TrueConvPi0Gamma_Pt",250,0,25);
8bdca7f1 1083 fTrueList[iCut]->Add(fHistoTrueConvPi0GammaPt[iCut]);
1084
1085 fHistoCombinatorialPt[iCut] = new TH2F("ESD_TrueCombinatorial_Pt","ESD_TrueCombinatorial_Pt",250,0,25,16,-0.5,15.5);
1086 fHistoCombinatorialPt[iCut]->GetYaxis()->SetBinLabel( 1,"Elec+Elec");
1087 fHistoCombinatorialPt[iCut]->GetYaxis()->SetBinLabel( 2,"Elec+Pion");
1088 fHistoCombinatorialPt[iCut]->GetYaxis()->SetBinLabel( 3,"Elec+Kaon");
1089 fHistoCombinatorialPt[iCut]->GetYaxis()->SetBinLabel( 4,"Elec+Proton");
1090 fHistoCombinatorialPt[iCut]->GetYaxis()->SetBinLabel( 5,"Elec+Muon");
1091 fHistoCombinatorialPt[iCut]->GetYaxis()->SetBinLabel( 6,"Pion+Pion");
1092 fHistoCombinatorialPt[iCut]->GetYaxis()->SetBinLabel( 7,"Pion+Kaon");
1093 fHistoCombinatorialPt[iCut]->GetYaxis()->SetBinLabel( 8,"Pion+Proton");
1094 fHistoCombinatorialPt[iCut]->GetYaxis()->SetBinLabel( 9,"Pion+Muon");
1095 fHistoCombinatorialPt[iCut]->GetYaxis()->SetBinLabel(10,"Kaon+Kaon");
1096 fHistoCombinatorialPt[iCut]->GetYaxis()->SetBinLabel(11,"Kaon+Proton");
1097 fHistoCombinatorialPt[iCut]->GetYaxis()->SetBinLabel(12,"Kaon+Muon");
1098 fHistoCombinatorialPt[iCut]->GetYaxis()->SetBinLabel(13,"Proton+Proton");
1099 fHistoCombinatorialPt[iCut]->GetYaxis()->SetBinLabel(14,"Proton+Muon");
1100 fHistoCombinatorialPt[iCut]->GetYaxis()->SetBinLabel(15,"Muon+Muon");
1101 fHistoCombinatorialPt[iCut]->GetYaxis()->SetBinLabel(16,"Rest");
1102 fTrueList[iCut]->Add(fHistoCombinatorialPt[iCut]);
1103 fHistoTruePrimaryConvGammaPt[iCut] = new TH1F("ESD_TruePrimaryConvGamma_Pt","ESD_TruePrimaryConvGamma_Pt",250,0,25);
1104 fTrueList[iCut]->Add(fHistoTruePrimaryConvGammaPt[iCut]);
1105 fHistoTrueSecondaryConvGammaPt[iCut] = new TH1F("ESD_TrueSecondaryConvGamma_Pt","ESD_TrueSecondaryConvGamma_Pt",250,0,25);
1106 fTrueList[iCut]->Add(fHistoTrueSecondaryConvGammaPt[iCut]);
1107
1108 fHistoTrueSecondaryConvGammaFromXFromK0sPt[iCut] = new TH1F("ESD_TrueSecondaryConvGammaFromXFromK0s_Pt", "ESD_TrueSecondaryConvGammaFromXFromK0s_Pt",250,0,25);
1109 fTrueList[iCut]->Add(fHistoTrueSecondaryConvGammaFromXFromK0sPt[iCut]);
1110 fHistoTrueSecondaryConvGammaFromXFromLambdaPt[iCut] = new TH1F("ESD_TrueSecondaryConvGammaFromXFromLambda_Pt", "ESD_TrueSecondaryConvGammaFromXFromLambda_Pt",250,0,25);
1111 fTrueList[iCut]->Add(fHistoTrueSecondaryConvGammaFromXFromLambdaPt[iCut]);
fd94f234 1112
8bdca7f1 1113 fHistoTruePrimaryConvGammaESDPtMCPt[iCut] = new TH2F("ESD_TruePrimaryConvGammaESD_PtMCPt", "ESD_TruePrimaryConvGammaESD_PtMCPt",250,0,25,250,0,25);
1114 fTrueList[iCut]->Add(fHistoTruePrimaryConvGammaESDPtMCPt[iCut]);
1115
fd94f234 1116 fHistoTrueClusGammaPt[iCut] = new TH1F("TrueClusGamma_Pt","ESD_TrueClusGamma_Pt",250,0,25);
8bdca7f1 1117 fTagOutputList[iCut]->Add(fHistoTrueClusGammaPt[iCut]);
1118 fHistoTruePrimaryClusGammaPt[iCut] = new TH1F("TruePrimaryClusGamma_Pt","ESD_TruePrimaryClusGamma_Pt",250,0,25);
1119 fTagOutputList[iCut]->Add(fHistoTruePrimaryClusGammaPt[iCut]);
1120 fHistoTruePrimaryClusGammaESDPtMCPt[iCut] = new TH2F("TruePrimaryClusGamma_Pt_MCPt","ESD_TruePrimaryClusGamma_MCPt",250,0,25,250,0,25);
1121 fTagOutputList[iCut]->Add(fHistoTruePrimaryClusGammaESDPtMCPt[iCut]);
1122
fd94f234 1123 if (fDoPhotonQA > 0){
1124 fHistoTrueConvGammaEta[iCut] = new TH1F("ESD_TrueConvGamma_Eta","ESD_TrueConvGamma_Eta",2000,-2,2);
1125 fTrueList[iCut]->Add(fHistoTrueConvGammaEta[iCut]);
1126 }
1127 if (fDoClusterQA > 0){
1128 fHistoTrueClusUnConvGammaPt[iCut] = new TH1F("TrueClusUnConvGamma_Pt","TrueClusUnConvGamma_Pt",250,0,25);
1129 fTagOutputList[iCut]->Add(fHistoTrueClusUnConvGammaPt[iCut]);
20af4b69 1130 fHistoTrueClusUnConvGammaMCPt[iCut] = new TH1F("TrueClusUnConvGamma_MCPt","TrueClusUnConvGamma_MCPt",250,0,25);
1131 fTagOutputList[iCut]->Add(fHistoTrueClusUnConvGammaMCPt[iCut]);
fd94f234 1132 fHistoTrueClusElectronPt[iCut] = new TH1F("TrueClusElectron_Pt","TrueElectronGamma_Pt",250,0,25);
1133 fTagOutputList[iCut]->Add(fHistoTrueClusElectronPt[iCut]);
fd94f234 1134 fHistoTrueClusConvGammaPt[iCut] = new TH1F("TrueClusConvGamma_Pt","TrueClusConvGamma_Pt",250,0,25);
1135 fTagOutputList[iCut]->Add(fHistoTrueClusConvGammaPt[iCut]);
20af4b69 1136 fHistoTrueClusConvGammaMCPt[iCut] = new TH1F("TrueClusConvGamma_MCPt","TrueClusConvGamma_MCPt",250,0,25);
1137 fTagOutputList[iCut]->Add(fHistoTrueClusConvGammaMCPt[iCut]);
fd94f234 1138 fHistoTrueClusConvGammaFullyPt[iCut] = new TH1F("TrueClusConvGammaFullyContained_Pt","TrueClusConvGammaFullyContained_Pt",250,0,25);
1139 fTagOutputList[iCut]->Add(fHistoTrueClusConvGammaFullyPt[iCut]);
1140 fHistoTrueClusMergedGammaPt[iCut] = new TH1F("TrueClusMergedGamma_Pt","TrueClusMergedGamma_Pt",250,0,25);
1141 fTagOutputList[iCut]->Add(fHistoTrueClusMergedGammaPt[iCut]);
1142 fHistoTrueClusMergedPartConvGammaPt[iCut] = new TH1F("TrueClusMergedPartConvGamma_Pt","TrueClusMergedPartConvGamma_Pt",250,0,25);
1143 fTagOutputList[iCut]->Add(fHistoTrueClusMergedPartConvGammaPt[iCut]);
1144 fHistoTrueClusDalitzPt[iCut] = new TH1F("TrueClusDalitz_Pt","TrueClusDalitz_Pt",250,0,25);
1145 fTagOutputList[iCut]->Add(fHistoTrueClusDalitzPt[iCut]);
1146 fHistoTrueClusDalitzMergedPt[iCut] = new TH1F("TrueClusDalitzMerged_Pt","TrueClusDalitzMerged_Pt",250,0,25);
1147 fTagOutputList[iCut]->Add(fHistoTrueClusDalitzMergedPt[iCut]);
1148 fHistoTrueClusPhotonFromElecMotherPt[iCut] = new TH1F("TrueClusPhotonFromElecMother_Pt","TrueClusPhotonFromElecMother_Pt",250,0,25);
1149 fTagOutputList[iCut]->Add(fHistoTrueClusPhotonFromElecMotherPt[iCut]);
1150 fHistoTrueClusShowerPt[iCut] = new TH1F("TrueClusShower_Pt","TrueClusShower_Pt",250,0,25);
1151 fTagOutputList[iCut]->Add(fHistoTrueClusShowerPt[iCut]);
cc579963 1152 fHistoTrueClusSubLeadingPt[iCut] = new TH1F("TrueClusSubleading_Pt","TrueClusSubleading_Pt",250,0,25);
1153 fTagOutputList[iCut]->Add(fHistoTrueClusSubLeadingPt[iCut]);
1154 fHistoTrueClusNParticles[iCut] = new TH1I("TrueClusNParticles","TrueClusNParticles",20,0,20);
1155 fTagOutputList[iCut]->Add(fHistoTrueClusNParticles[iCut]);
fd94f234 1156 fHistoTrueClusEMNonLeadingPt[iCut] = new TH1F("TrueClusEMNonLeading_Pt","TrueClusEMNonLeading_Pt",250,0,25);
1157 fTagOutputList[iCut]->Add(fHistoTrueClusEMNonLeadingPt[iCut]);
1158 fHistoTrueNLabelsInClus[iCut] = new TH1F("TrueNLabelsInClus","TrueNLabelsInClus",100,-0.5,99.5);
1159 fTagOutputList[iCut]->Add(fHistoTrueNLabelsInClus[iCut]);
1160 }
1161
8bdca7f1 1162 if(fDoMesonAnalysis){
ed8bc1ca 1163 fHistoTruePi0InvMassPt[iCut] = new TH2F("ESD_TruePi0_InvMass_Pt","ESD_TruePi0_InvMass_Pt",800,0,0.8,250,0,25);
1164 fTrueList[iCut]->Add(fHistoTruePi0InvMassPt[iCut]);
1165 fHistoTrueEtaInvMassPt[iCut] = new TH2F("ESD_TrueEta_InvMass_Pt","ESD_TrueEta_InvMass_Pt",800,0,0.8,250,0,25);
1166 fTrueList[iCut]->Add(fHistoTrueEtaInvMassPt[iCut]);
1167
1168 fHistoTruePrimaryPi0InvMassPt[iCut] = new TH2F("ESD_TruePrimaryPi0_InvMass_Pt", "ESD_TruePrimaryPi0_InvMass_Pt", 800,0,0.8,250,0,25);
1169 fHistoTruePrimaryPi0InvMassPt[iCut]->Sumw2();
1170 fTrueList[iCut]->Add(fHistoTruePrimaryPi0InvMassPt[iCut]);
1171 fHistoTruePrimaryEtaInvMassPt[iCut] = new TH2F("ESD_TruePrimaryEta_InvMass_Pt", "ESD_TruePrimaryEta_InvMass_Pt", 800,0,0.8,250,0,25);
1172 fHistoTruePrimaryEtaInvMassPt[iCut]->Sumw2();
1173 fTrueList[iCut]->Add(fHistoTruePrimaryEtaInvMassPt[iCut]);
1174
1175 fHistoTruePrimaryPi0W0WeightingInvMassPt[iCut] = new TH2F("ESD_TruePrimaryPi0W0Weights_InvMass_Pt", "ESD_TruePrimaryPi0W0Weights_InvMass_Pt", 800,0,0.8,250,0,25);
1176 fHistoTruePrimaryPi0W0WeightingInvMassPt[iCut]->Sumw2();
1177 fTrueList[iCut]->Add(fHistoTruePrimaryPi0W0WeightingInvMassPt[iCut]);
1178 fHistoTruePrimaryEtaW0WeightingInvMassPt[iCut] = new TH2F("ESD_TruePrimaryEtaW0Weights_InvMass_Pt", "ESD_TruePrimaryEtaW0Weights_InvMass_Pt", 800,0,0.8,250,0,25);
1179 fHistoTruePrimaryEtaW0WeightingInvMassPt[iCut]->Sumw2();
1180 fTrueList[iCut]->Add(fHistoTruePrimaryEtaW0WeightingInvMassPt[iCut]);
1181
1182 fProfileTruePrimaryPi0WeightsInvMassPt[iCut] = new TProfile2D("ESD_TruePrimaryPi0Weights_InvMass_Pt", "ESD_TruePrimaryPi0Weights_InvMass_Pt", 800,0,0.8,250,0,25);
1183 fProfileTruePrimaryPi0WeightsInvMassPt[iCut]->Sumw2();
1184 fTrueList[iCut]->Add(fProfileTruePrimaryPi0WeightsInvMassPt[iCut]);
1185 fProfileTruePrimaryEtaWeightsInvMassPt[iCut] = new TProfile2D("ESD_TruePrimaryEtaWeights_InvMass_Pt", "ESD_TruePrimaryEtaWeights_InvMass_Pt", 800,0,0.8,250,0,25);
1186 fProfileTruePrimaryEtaWeightsInvMassPt[iCut]->Sumw2();
1187 fTrueList[iCut]->Add(fProfileTruePrimaryEtaWeightsInvMassPt[iCut]);
20af4b69 1188
ed8bc1ca 1189 fHistoTrueSecondaryPi0InvMassPt[iCut] = new TH2F("ESD_TrueSecondaryPi0_InvMass_Pt", "ESD_TrueSecondaryPi0_InvMass_Pt", 800,0,0.8,250,0,25);
1190 fHistoTrueSecondaryPi0InvMassPt[iCut]->Sumw2();
1191 fTrueList[iCut]->Add(fHistoTrueSecondaryPi0InvMassPt[iCut]);
1192 fHistoTrueSecondaryEtaInvMassPt[iCut] = new TH2F("ESD_TrueSecondaryEta_InvMass_Pt", "ESD_TrueSecondaryEta_InvMass_Pt", 800,0,0.8,250,0,25);
1193 fHistoTrueSecondaryEtaInvMassPt[iCut]->Sumw2();
1194 fTrueList[iCut]->Add(fHistoTrueSecondaryEtaInvMassPt[iCut]);
1195
1196 fHistoTrueSecondaryPi0FromK0sInvMassPt[iCut] = new TH2F("ESD_TrueSecondaryPi0FromK0s_InvMass_Pt","ESD_TrueSecondaryPi0FromK0s_InvMass_Pt",800,0,0.8,250,0,25);
1197 fHistoTrueSecondaryPi0FromK0sInvMassPt[iCut]->Sumw2();
1198 fTrueList[iCut]->Add(fHistoTrueSecondaryPi0FromK0sInvMassPt[iCut]);
1199 fHistoTrueSecondaryPi0FromEtaInvMassPt[iCut] = new TH2F("ESD_TrueSecondaryPi0FromEta_InvMass_Pt","ESD_TrueSecondaryPi0FromEta_InvMass_Pt",800,0,0.8,250,0,25);
1200 fTrueList[iCut]->Add(fHistoTrueSecondaryPi0FromEtaInvMassPt[iCut]);
1201 fHistoTrueSecondaryPi0FromLambdaInvMassPt[iCut] = new TH2F("ESD_TrueSecondaryPi0FromLambda_InvMass_Pt","ESD_TrueSecondaryPi0FromLambda_InvMass_Pt",800,0,0.8,250,0,25);
1202 fTrueList[iCut]->Add(fHistoTrueSecondaryPi0FromLambdaInvMassPt[iCut]);
1203 if (fDoMesonQA > 0){
1204 fHistoTruePi0CaloPhotonInvMassPt[iCut] = new TH2F("ESD_TruePi0CaloPhoton_InvMass_Pt","ESD_TruePi0CaloPhoton_InvMass_Pt",800,0,0.8,250,0,25);
1205 fTrueList[iCut]->Add(fHistoTruePi0CaloPhotonInvMassPt[iCut]);
1206 fHistoTrueEtaCaloPhotonInvMassPt[iCut] = new TH2F("ESD_TrueEtaCaloPhoton_InvMass_Pt","ESD_TrueEtaCaloPhoton_InvMass_Pt",800,0,0.8,250,0,25);
1207 fTrueList[iCut]->Add(fHistoTrueEtaCaloPhotonInvMassPt[iCut]);
20af4b69 1208 fHistoTruePi0CaloConvertedPhotonInvMassPt[iCut] = new TH2F("ESD_TruePi0CaloConvertedPhoton_InvMass_Pt","ESD_TruePi0CaloConvertedPhoton_InvMass_Pt",800,0,0.8,250,0,25);
1209 fTrueList[iCut]->Add(fHistoTruePi0CaloConvertedPhotonInvMassPt[iCut]);
1210 fHistoTruePi0CaloConvertedPhotonMatchedInvMassPt[iCut] = new TH2F("ESD_TruePi0CaloConvertedPhotonMatched_InvMass_Pt","ESD_TruePi0CaloConvertedPhotonMatched_InvMass_Pt",800,0,0.8,250,0,25);
1211 fTrueList[iCut]->Add(fHistoTruePi0CaloConvertedPhotonMatchedInvMassPt[iCut]);
20af4b69 1212 fHistoTrueEtaCaloConvertedPhotonInvMassPt[iCut] = new TH2F("ESD_TrueEtaCaloConvertedPhoton_InvMass_Pt","ESD_TrueEtaCaloConvertedPhoton_InvMass_Pt",800,0,0.8,250,0,25);
1213 fTrueList[iCut]->Add(fHistoTrueEtaCaloConvertedPhotonInvMassPt[iCut]);
1214 fHistoTrueEtaCaloConvertedPhotonMatchedInvMassPt[iCut] = new TH2F("ESD_TrueEtaCaloConvertedPhotonMatched_InvMass_Pt","ESD_TrueEtaCaloConvertedPhotonMatched_InvMass_Pt",800,0,0.8,250,0,25);
1215 fTrueList[iCut]->Add(fHistoTrueEtaCaloConvertedPhotonMatchedInvMassPt[iCut]);
1216
d404157c 1217 fHistoTruePi0CaloElectronInvMassPt[iCut] = new TH2F("ESD_TruePi0CaloElectron_InvMass_Pt","ESD_TruePi0CaloElectron_InvMass_Pt",800,0,0.8,250,0,25);
ed8bc1ca 1218 fTrueList[iCut]->Add(fHistoTruePi0CaloElectronInvMassPt[iCut]);
1219 fHistoTrueEtaCaloElectronInvMassPt[iCut] = new TH2F("ESD_TrueEtaCaloElectron_InvMass_Pt","ESD_TrueEtaCaloElectron_InvMass_Pt",800,0,0.8,250,0,25);
1220 fTrueList[iCut]->Add(fHistoTrueEtaCaloElectronInvMassPt[iCut]);
1221
1222 fHistoTruePi0CaloMergedClusterInvMassPt[iCut] = new TH2F("ESD_TruePi0CaloMergedCluster_InvMass_Pt","ESD_TruePi0CaloMergedCluster_InvMass_Pt",800,0,0.8,250,0,25);
1223 fTrueList[iCut]->Add(fHistoTruePi0CaloMergedClusterInvMassPt[iCut]);
1224 fHistoTrueEtaCaloMergedClusterInvMassPt[iCut] = new TH2F("ESD_TrueEtaCaloMergedCluster_InvMass_Pt","ESD_TrueEtaCaloMergedCluster_InvMass_Pt",800,0,0.8,250,0,25);
1225 fTrueList[iCut]->Add(fHistoTrueEtaCaloMergedClusterInvMassPt[iCut]);
1226
fd94f234 1227 fHistoTrueMotherCaloEMNonLeadingInvMassPt[iCut] = new TH2F("ESD_TrueMotherCaloEMNonLeading_InvMass_Pt","ESD_TrueMotherCaloEMNonLeading_InvMass_Pt",800,0,0.8,250,0,25);
1228 fTrueList[iCut]->Add(fHistoTrueMotherCaloEMNonLeadingInvMassPt[iCut]);
ed8bc1ca 1229 fHistoTruePi0CaloMergedClusterPartConvInvMassPt[iCut] = new TH2F("ESD_TruePi0CaloMergedClusterPartConv_InvMass_Pt","ESD_TruePi0CaloMergedClusterPartConv_InvMass_Pt",800,0,0.8,250,0,25);
1230 fTrueList[iCut]->Add(fHistoTruePi0CaloMergedClusterPartConvInvMassPt[iCut]);
1231 fHistoTrueEtaCaloMergedClusterPartConvInvMassPt[iCut] = new TH2F("ESD_TrueEtaCaloMergedClusterPartConv_InvMass_Pt","ESD_TrueEtaCaloMergedClusterPartConv_InvMass_Pt",800,0,0.8,250,0,25);
1232 fTrueList[iCut]->Add(fHistoTrueEtaCaloMergedClusterPartConvInvMassPt[iCut]);
fd94f234 1233
8bdca7f1 1234 fHistoTruePrimaryPi0MCPtResolPt[iCut] = new TH2F("ESD_TruePrimaryPi0_MCPt_ResolPt","ESD_TruePrimaryPi0_ResolPt_MCPt",500,0.03,25,1000,-1.,1.);
1235 fHistoTruePrimaryPi0MCPtResolPt[iCut]->Sumw2();
1236 SetLogBinningXTH2(fHistoTruePrimaryPi0MCPtResolPt[iCut]);
1237 fTrueList[iCut]->Add(fHistoTruePrimaryPi0MCPtResolPt[iCut]);
1238 fHistoTruePrimaryEtaMCPtResolPt[iCut] = new TH2F("ESD_TruePrimaryEta_MCPt_ResolPt","ESD_TruePrimaryEta_ResolPt_MCPt",500,0.03,25,1000,-1.,1.);
1239 fHistoTruePrimaryEtaMCPtResolPt[iCut]->Sumw2();
1240 SetLogBinningXTH2(fHistoTruePrimaryEtaMCPtResolPt[iCut]);
1241 fTrueList[iCut]->Add(fHistoTruePrimaryEtaMCPtResolPt[iCut]);
1242 fHistoTrueBckGGInvMassPt[iCut] = new TH2F("ESD_TrueBckGG_InvMass_Pt","ESD_TrueBckGG_InvMass_Pt",800,0,0.8,250,0,25);
1243 fTrueList[iCut]->Add(fHistoTrueBckGGInvMassPt[iCut]);
1244 fHistoTrueBckContInvMassPt[iCut] = new TH2F("ESD_TrueBckCont_InvMass_Pt","ESD_TrueBckCont_InvMass_Pt",800,0,0.8,250,0,25);
1245 fTrueList[iCut]->Add(fHistoTrueBckContInvMassPt[iCut]);
1246 fHistoTrueK0sWithPi0DaughterMCPt[iCut] = new TH1F("ESD_TrueK0sWithPi0Daughter_MCPt","ESD_TrueK0sWithPi0Daughter_MCPt",250,0,25);
1247 fTrueList[iCut]->Add(fHistoTrueK0sWithPi0DaughterMCPt[iCut]);
1248 fHistoTrueEtaWithPi0DaughterMCPt[iCut] = new TH1F("ESD_TrueEtaWithPi0Daughter_MCPt","ESD_TrueEtaWithPi0Daughter_MCPt",250,0,25);
1249 fTrueList[iCut]->Add(fHistoTrueEtaWithPi0DaughterMCPt[iCut]);
1250 fHistoTrueLambdaWithPi0DaughterMCPt[iCut] = new TH1F("ESD_TrueLambdaWithPi0Daughter_MCPt","ESD_TrueLambdaWithPi0Daughter_MCPt",250,0,25);
1251 fTrueList[iCut]->Add(fHistoTrueLambdaWithPi0DaughterMCPt[iCut]);
1252
1253 fHistoTruePi0PtY[iCut] = new TH2F("ESD_TruePi0_Pt_Y","ESD_TruePi0_Pt_Y",150,0.03,15.,150,-1.5,1.5);
1254 SetLogBinningXTH2(fHistoTruePi0PtY[iCut]);
1255 fTrueList[iCut]->Add(fHistoTruePi0PtY[iCut]);
1256 fHistoTrueEtaPtY[iCut] = new TH2F("ESD_TrueEta_Pt_Y","ESD_TrueEta_Pt_Y",150,0.03,15.,150,-1.5,1.5);
1257 SetLogBinningXTH2(fHistoTrueEtaPtY[iCut]);
1258 fTrueList[iCut]->Add(fHistoTrueEtaPtY[iCut]);
1259 fHistoTruePi0PtAlpha[iCut] = new TH2F("ESD_TruePi0_Pt_Alpha","ESD_TruePi0_Pt_Alpha",150,0.03,15.,100,0,1);
1260 SetLogBinningXTH2(fHistoTruePi0PtAlpha[iCut]);
1261 fTrueList[iCut]->Add(fHistoTruePi0PtAlpha[iCut]);
1262 fHistoTrueEtaPtAlpha[iCut] = new TH2F("ESD_TrueEta_Pt_Alpha","ESD_TrueEta_Pt_Alpha",150,0.03,15.,100,0,1);
1263 SetLogBinningXTH2(fHistoTrueEtaPtAlpha[iCut]);
1264 fTrueList[iCut]->Add(fHistoTrueEtaPtAlpha[iCut]);
1265
1266 fHistoTruePi0PtOpenAngle[iCut] = new TH2F("ESD_TruePi0_Pt_OpenAngle","ESD_TruePi0_Pt_OpenAngle",150,0.03,15.,200,0,2*TMath::Pi());
1267 SetLogBinningXTH2(fHistoTruePi0PtOpenAngle[iCut]);
1268 fTrueList[iCut]->Add(fHistoTruePi0PtOpenAngle[iCut]);
1269 fHistoTrueEtaPtOpenAngle[iCut] = new TH2F("ESD_TrueEta_Pt_OpenAngle","ESD_TrueEta_Pt_OpenAngle",150,0.03,15.,200,0,2*TMath::Pi());
1270 SetLogBinningXTH2(fHistoTrueEtaPtOpenAngle[iCut]);
1271 fTrueList[iCut]->Add(fHistoTrueEtaPtOpenAngle[iCut]);
ee4b3d66 1272
1273 fHistoTrueMotherPi0ConvPhotonEtaPhi[iCut] = new TH2F("ESD_TrueMotherPi0ConvPhoton_Eta_Phi","ESD_TrueMotherPi0ConvPhoton_Eta_Phi",600,0,2*TMath::Pi(),400,-2,2);
1274 fTrueList[iCut]->Add(fHistoTrueMotherPi0ConvPhotonEtaPhi[iCut]);
1275 fHistoTrueMotherEtaConvPhotonEtaPhi[iCut] = new TH2F("ESD_TrueMotherEtaConvPhoton_Eta_Phi","ESD_TrueMotherEtaConvPhoton_Eta_Phi",600,0,2*TMath::Pi(),400,-2,2);
1276 fTrueList[iCut]->Add(fHistoTrueMotherEtaConvPhotonEtaPhi[iCut]);
1277
8bdca7f1 1278 }
1279 }
1280 }
1281 }
1282
1283 fV0Reader=(AliV0ReaderV1*)AliAnalysisManager::GetAnalysisManager()->GetTask("V0ReaderV1");
1284 if(!fV0Reader){printf("Error: No V0 Reader");return;} // GetV0Reader
1285
1286 if(fV0Reader)
344100c4 1287 if((AliConversionPhotonCuts*)fV0Reader->GetConversionCuts())
1288 if(((AliConversionPhotonCuts*)fV0Reader->GetConversionCuts())->GetCutHistograms())
1289 fOutputContainer->Add(((AliConversionPhotonCuts*)fV0Reader->GetConversionCuts())->GetCutHistograms());
1290 if(fV0Reader)
1291 if((AliConvEventCuts*)fV0Reader->GetEventCuts())
1292 if(((AliConvEventCuts*)fV0Reader->GetEventCuts())->GetCutHistograms())
1293 fOutputContainer->Add(((AliConvEventCuts*)fV0Reader->GetEventCuts())->GetCutHistograms());
1294
1295
8bdca7f1 1296 for(Int_t iCut = 0; iCut<fnCuts;iCut++){
344100c4 1297 if(!((AliConvEventCuts*)fEventCutArray->At(iCut))) continue;
1298 if(((AliConvEventCuts*)fEventCutArray->At(iCut))->GetCutHistograms()){
1299 fCutFolder[iCut]->Add(((AliConvEventCuts*)fEventCutArray->At(iCut))->GetCutHistograms());
1300 }
1301 if(!((AliConversionPhotonCuts*)fCutArray->At(iCut))) continue;
1302 if(((AliConversionPhotonCuts*)fCutArray->At(iCut))->GetCutHistograms()){
1303 fCutFolder[iCut]->Add(((AliConversionPhotonCuts*)fCutArray->At(iCut))->GetCutHistograms());
8bdca7f1 1304 }
1305 if(!((AliCaloPhotonCuts*)fClusterCutArray->At(iCut))) continue;
1306 if(((AliCaloPhotonCuts*)fClusterCutArray->At(iCut))->GetCutHistograms()){
1307 fCutFolder[iCut]->Add(((AliCaloPhotonCuts*)fClusterCutArray->At(iCut))->GetCutHistograms());
1308 }
1309 if(fDoMesonAnalysis){
1310 if(!((AliConversionMesonCuts*)fMesonCutArray->At(iCut))) continue;
1311 if(((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->GetCutHistograms()){
1312 fCutFolder[iCut]->Add(((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->GetCutHistograms());
1313 }
1314 }
1315 }
1316 PostData(1, fOutputContainer);
1317}
1318//_____________________________________________________________________________
1319Bool_t AliAnalysisTaskGammaConvCalo::Notify()
1320{
1321 for(Int_t iCut = 0; iCut<fnCuts;iCut++){
344100c4 1322 if(!((AliConvEventCuts*)fEventCutArray->At(iCut))->GetDoEtaShift()){
1323 fProfileEtaShift[iCut]->Fill(0.,(((AliConvEventCuts*)fEventCutArray->At(iCut))->GetEtaShift()));
8bdca7f1 1324 continue; // No Eta Shift requested, continue
1325 }
344100c4 1326 if(((AliConvEventCuts*)fEventCutArray->At(iCut))->GetEtaShift() == 0.0){ // Eta Shift requested but not set, get shift automatically
1327 ((AliConvEventCuts*)fEventCutArray->At(iCut))->GetCorrectEtaShiftFromPeriod(fV0Reader->GetPeriodName());
1328 fProfileEtaShift[iCut]->Fill(0.,(((AliConvEventCuts*)fEventCutArray->At(iCut))->GetEtaShift()));
1329 ((AliConvEventCuts*)fEventCutArray->At(iCut))->DoEtaShift(kFALSE); // Eta Shift Set, make sure that it is called only once
8bdca7f1 1330 continue;
1331 }
1332 else{
1333 printf(" Gamma Conversion Task %s :: Eta Shift Manually Set to %f \n\n",
344100c4 1334 (((AliConvEventCuts*)fEventCutArray->At(iCut))->GetCutNumber()).Data(),((AliConvEventCuts*)fEventCutArray->At(iCut))->GetEtaShift());
1335 fProfileEtaShift[iCut]->Fill(0.,(((AliConvEventCuts*)fEventCutArray->At(iCut))->GetEtaShift()));
1336 ((AliConvEventCuts*)fEventCutArray->At(iCut))->DoEtaShift(kFALSE); // Eta Shift Set, make sure that it is called only once
8bdca7f1 1337 }
1338 }
1339
1340 return kTRUE;
1341}
1342//_____________________________________________________________________________
1343void AliAnalysisTaskGammaConvCalo::UserExec(Option_t *)
1344{
1345 //
1346 // Called for each event
1347 //
344100c4 1348 Int_t eventQuality = ((AliConvEventCuts*)fV0Reader->GetEventCuts())->GetEventQuality();
8bdca7f1 1349 if(eventQuality == 2 || eventQuality == 3){// Event Not Accepted due to MC event missing or wrong trigger for V0ReaderV1
1350 for(Int_t iCut = 0; iCut<fnCuts; iCut++){
1351 fHistoNEvents[iCut]->Fill(eventQuality);
1352 }
1353 return;
1354 }
1355
1356 if(fIsMC) fMCEvent = MCEvent();
1357 if(fMCEvent == NULL) fIsMC = kFALSE;
1358
1359 fInputEvent = InputEvent();
1360
1361 if(fIsMC && fInputEvent->IsA()==AliESDEvent::Class()){
1362 fMCStack = fMCEvent->Stack();
1363 if(fMCStack == NULL) fIsMC = kFALSE;
1364 }
1365
d404157c 1366 if(fInputEvent->IsA()==AliAODEvent::Class()){
1367 fInputEvent->InitMagneticField();
1368 }
1369
8bdca7f1 1370 fReaderGammas = fV0Reader->GetReconstructedGammas(); // Gammas from default Cut
1371
1372 // ------------------- BeginEvent ----------------------------
1373
1374 AliEventplane *EventPlane = fInputEvent->GetEventplane();
1375 if(fIsHeavyIon ==1)fEventPlaneAngle = EventPlane->GetEventplane("V0",fInputEvent,2);
1376 else fEventPlaneAngle=0.0;
1377
1378 if(fIsMC && fInputEvent->IsA()==AliAODEvent::Class() && !(fV0Reader->AreAODsRelabeled())){
1379 RelabelAODPhotonCandidates(kTRUE); // In case of AODMC relabeling MC
1380 fV0Reader->RelabelAODs(kTRUE);
1381 }
1382
1383
1384 for(Int_t iCut = 0; iCut<fnCuts; iCut++){
1385
1386 fiCut = iCut;
7f070437 1387
1388 Bool_t isRunningEMCALrelAna = kFALSE;
1389 if (((AliCaloPhotonCuts*)fClusterCutArray->At(fiCut))->GetClusterType() == 1) isRunningEMCALrelAna = kTRUE;
1390
1391 Int_t eventNotAccepted = ((AliConvEventCuts*)fEventCutArray->At(iCut))->IsEventAcceptedByCut(fV0Reader->GetEventCuts(),fInputEvent,fMCEvent,fIsHeavyIon,isRunningEMCALrelAna);
8bdca7f1 1392
1393 if(eventNotAccepted){
1394 // cout << "event rejected due to wrong trigger: " <<eventNotAccepted << endl;
1395 fHistoNEvents[iCut]->Fill(eventNotAccepted); // Check Centrality, PileUp, SDD and V0AND --> Not Accepted => eventQuality = 1
1396 continue;
1397 }
1398
1399 if(eventQuality != 0){// Event Not Accepted
1400 //cout << "event rejected due to: " <<eventQuality << endl;
1401 fHistoNEvents[iCut]->Fill(eventQuality);
1402 continue;
1403 }
1404
1405 fHistoNEvents[iCut]->Fill(eventQuality); // Should be 0 here
1406 fHistoNGoodESDTracks[iCut]->Fill(fV0Reader->GetNumberOfPrimaryTracks());
344100c4 1407 if(((AliConvEventCuts*)fEventCutArray->At(iCut))->IsHeavyIon() == 2) fHistoNV0Tracks[iCut]->Fill(fInputEvent->GetVZEROData()->GetMTotV0A());
8bdca7f1 1408 else fHistoNV0Tracks[iCut]->Fill(fInputEvent->GetVZEROData()->GetMTotV0A()+fInputEvent->GetVZEROData()->GetMTotV0C());
1409
1410 if(fIsMC){
1411 // Process MC Particle
344100c4 1412 if(((AliConvEventCuts*)fEventCutArray->At(iCut))->GetSignalRejection() != 0){
8bdca7f1 1413 if(fInputEvent->IsA()==AliESDEvent::Class()){
344100c4 1414 ((AliConvEventCuts*)fEventCutArray->At(iCut))->GetNotRejectedParticles(((AliConvEventCuts*)fEventCutArray->At(iCut))->GetSignalRejection(),
1415 ((AliConvEventCuts*)fEventCutArray->At(iCut))->GetAcceptedHeader(),
8bdca7f1 1416 fMCEvent);
1417 }
1418 else if(fInputEvent->IsA()==AliAODEvent::Class()){
344100c4 1419 ((AliConvEventCuts*)fEventCutArray->At(iCut))->GetNotRejectedParticles(((AliConvEventCuts*)fEventCutArray->At(iCut))->GetSignalRejection(),
1420 ((AliConvEventCuts*)fEventCutArray->At(iCut))->GetAcceptedHeader(),
8bdca7f1 1421 fInputEvent);
1422 }
1423
344100c4 1424 if(((AliConvEventCuts*)fEventCutArray->At(iCut))->GetAcceptedHeader()){
1425 for(Int_t i = 0;i<(((AliConvEventCuts*)fEventCutArray->At(iCut))->GetAcceptedHeader())->GetEntries();i++){
8bdca7f1 1426 TString nameBin= fHistoMCHeaders[iCut]->GetXaxis()->GetBinLabel(i+1);
1427 if (nameBin.CompareTo("")== 0){
344100c4 1428 TString nameHeader = ((TObjString*)((TList*)((AliConvEventCuts*)fEventCutArray->At(iCut))
1429 ->GetAcceptedHeader())->At(i))->GetString();
1430 fHistoMCHeaders[iCut]->GetXaxis()->SetBinLabel(i+1,nameHeader.Data());
8bdca7f1 1431 }
1432 }
1433 }
1434 }
1435 }
1436 if(fIsMC){
1437 if(fInputEvent->IsA()==AliESDEvent::Class())
1438 ProcessMCParticles();
1439 if(fInputEvent->IsA()==AliAODEvent::Class())
1440 ProcessAODMCParticles();
1441 }
1442
1443 // it is in the loop to have the same conversion cut string (used also for MC stuff that should be same for V0 and Cluster)
1444 ProcessClusters(); // process calo clusters
1445 ProcessPhotonCandidates(); // Process this cuts gammas
1446
1447 fHistoNGammaCandidates[iCut]->Fill(fGammaCandidates->GetEntries());
1448 fHistoNGoodESDTracksVsNGammaCanditates[iCut]->Fill(fV0Reader->GetNumberOfPrimaryTracks(),fGammaCandidates->GetEntries());
1449 if(fDoMesonAnalysis){ // Meson Analysis
1450 if(((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->UseMCPSmearing() && fIsMC){
1451 fUnsmearedPx = new Double_t[fGammaCandidates->GetEntries()]; // Store unsmeared Momenta
1452 fUnsmearedPy = new Double_t[fGammaCandidates->GetEntries()];
1453 fUnsmearedPz = new Double_t[fGammaCandidates->GetEntries()];
1454 fUnsmearedE = new Double_t[fGammaCandidates->GetEntries()];
1455
1456 for(Int_t gamma=0;gamma<fGammaCandidates->GetEntries();gamma++){ // Smear the AODPhotons in MC
1457 fUnsmearedPx[gamma] = ((AliAODConversionPhoton*)fGammaCandidates->At(gamma))->Px();
1458 fUnsmearedPy[gamma] = ((AliAODConversionPhoton*)fGammaCandidates->At(gamma))->Py();
1459 fUnsmearedPz[gamma] = ((AliAODConversionPhoton*)fGammaCandidates->At(gamma))->Pz();
1460 fUnsmearedE[gamma] = ((AliAODConversionPhoton*)fGammaCandidates->At(gamma))->E();
1461 ((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->SmearParticle(dynamic_cast<AliAODConversionPhoton*>(fGammaCandidates->At(gamma)));
1462 }
1463 }
1464
1465 PhotonTagging(); // tag PCM photons with calorimeter
1466
1467 CalculatePi0Candidates(); // Combine Gammas from conversion and from calo
1468
1469 if(((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->DoBGCalculation()){
1470 if(((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->BackgroundHandlerType() == 0){
1471 CalculateBackground(); // Combinatorial Background
1472 UpdateEventByEventData(); // Store Event for mixed Events
1473 }
1474 else{
1475 CalculateBackgroundRP(); // Combinatorial Background
1476 fBGHandlerRP[iCut]->AddEvent(fGammaCandidates,fInputEvent); // Store Event for mixed Events
1477 fBGClusHandlerRP[iCut]->AddEvent(fClusterCandidates,fInputEvent); // Store Event for mixed Events
1478 }
1479 }
1480 if(((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->UseMCPSmearing() && fIsMC){
1481 for(Int_t gamma=0;gamma<fGammaCandidates->GetEntries();gamma++){ // Smear the AODPhotons in MC
1482 ((AliAODConversionPhoton*)fGammaCandidates->At(gamma))->SetPx(fUnsmearedPx[gamma]); // Reset Unsmeared Momenta
1483 ((AliAODConversionPhoton*)fGammaCandidates->At(gamma))->SetPy(fUnsmearedPy[gamma]);
1484 ((AliAODConversionPhoton*)fGammaCandidates->At(gamma))->SetPz(fUnsmearedPz[gamma]);
1485 ((AliAODConversionPhoton*)fGammaCandidates->At(gamma))->SetE(fUnsmearedE[gamma]);
1486 }
1487 delete[] fUnsmearedPx; fUnsmearedPx = 0x0;
1488 delete[] fUnsmearedPy; fUnsmearedPy = 0x0;
1489 delete[] fUnsmearedPz; fUnsmearedPz = 0x0;
1490 delete[] fUnsmearedE; fUnsmearedE = 0x0;
1491 }
1492 }
1493
1494 fGammaCandidates->Clear(); // delete this cuts good gammas
1495 fClusterCandidates->Clear(); // delete cluster candidates
1496 }
1497
1498 if(fIsMC && fInputEvent->IsA()==AliAODEvent::Class() && !(fV0Reader->AreAODsRelabeled())){
1499 RelabelAODPhotonCandidates(kFALSE); // Back to ESDMC Label
1500 fV0Reader->RelabelAODs(kFALSE);
1501 }
1502
1503 PostData(1, fOutputContainer);
1504}
1505
1506//________________________________________________________________________
1507void AliAnalysisTaskGammaConvCalo::ProcessClusters()
1508{
1509
1510 Int_t nclus = 0;
1511 nclus = fInputEvent->GetNumberOfCaloClusters();
1512
9df9736d 1513// cout << nclus << endl;
8bdca7f1 1514
1515 if(nclus == 0) return;
1516
1517 // vertex
1518 Double_t vertex[3] = {0};
1519 InputEvent()->GetPrimaryVertex()->GetXYZ(vertex);
1520
1521 // Loop over EMCal clusters
d53bf4ac 1522 for(Long_t i = 0; i < nclus; i++){
8bdca7f1 1523
20af4b69 1524 AliVCluster* clus = NULL;
1525 clus = fInputEvent->GetCaloCluster(i);
8bdca7f1 1526 if (!clus) continue;
1527 if(!((AliCaloPhotonCuts*)fClusterCutArray->At(fiCut))->ClusterIsSelected(clus,fInputEvent,fIsMC)) continue;
1528 // TLorentzvector with cluster
1529 TLorentzVector clusterVector;
1530 clus->GetMomentum(clusterVector,vertex);
1531
1532 TLorentzVector* tmpvec = new TLorentzVector();
1533 tmpvec->SetPxPyPzE(clusterVector.Px(),clusterVector.Py(),clusterVector.Pz(),clusterVector.E());
1534
1535 // convert to AODConversionPhoton
1536 AliAODConversionPhoton *PhotonCandidate=new AliAODConversionPhoton(tmpvec);
1537 if(!PhotonCandidate) continue;
fd94f234 1538
1539 // Flag Photon as CaloPhoton
1540 PhotonCandidate->SetIsCaloPhoton();
d53bf4ac 1541 PhotonCandidate->SetCaloClusterRef(i);
8bdca7f1 1542 // get MC label
8bdca7f1 1543 if(fIsMC){
fd94f234 1544 Int_t* mclabelsCluster = clus->GetLabels();
1545 PhotonCandidate->SetNCaloPhotonMCLabels(clus->GetNLabels());
1546// cout << clus->GetNLabels() << endl;
1547 if (clus->GetNLabels()>0){
1548 for (Int_t k =0; k< (Int_t)clus->GetNLabels(); k++){
cc579963 1549 if (k< 20)PhotonCandidate->SetCaloPhotonMCLabel(k,mclabelsCluster[k]);
fd94f234 1550// Int_t pdgCode = fMCStack->Particle(mclabelsCluster[k])->GetPdgCode();
1551// cout << "label " << k << "\t" << mclabelsCluster[k] << " pdg code: " << pdgCode << endl;
1552 }
1553 }
8bdca7f1 1554 }
1555
fd94f234 1556 fIsFromMBHeader = kTRUE;
ecd3e131 1557 fIsOverlappingWithOtherHeader = kFALSE;
fd94f234 1558 // test whether largest contribution to cluster orginates in added signals
1559 if (fIsMC && ((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsParticleFromBGEvent(PhotonCandidate->GetCaloPhotonMCLabel(0), fMCStack, fInputEvent) == 0) fIsFromMBHeader = kFALSE;
ecd3e131 1560 if (fIsMC ){
1561 if (clus->GetNLabels()>1){
1562 Int_t* mclabelsCluster = clus->GetLabels();
1563 for (Int_t l = 1; l < (Int_t)clus->GetNLabels(); l++ ){
1564 if (((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsParticleFromBGEvent(mclabelsCluster[l], fMCStack, fInputEvent) == 0) fIsOverlappingWithOtherHeader = kTRUE;
1565 }
1566 }
1567 }
1568
1569 if (fIsFromMBHeader && !fIsOverlappingWithOtherHeader){
1570 fHistoClusGammaPt[fiCut]->Fill(PhotonCandidate->Pt());
1571 fClusterCandidates->Add(PhotonCandidate); // if no second loop is required add to events good gammas
1572 }
1573 if (fIsFromMBHeader && fIsOverlappingWithOtherHeader) fHistoClusOverlapHeadersGammaPt[fiCut]->Fill(PhotonCandidate->Pt());
8bdca7f1 1574
8bdca7f1 1575 if(fIsMC){
fd94f234 1576 if(fInputEvent->IsA()==AliESDEvent::Class()){
1577 ProcessTrueClusterCandidates(PhotonCandidate);
1578 } else {
1579 ProcessTrueClusterCandidatesAOD(PhotonCandidate);
1580 }
8bdca7f1 1581 }
1582
344100c4 1583 delete tmpvec;
8bdca7f1 1584 }
1585
1586}
1587
1588//________________________________________________________________________
1589void AliAnalysisTaskGammaConvCalo::ProcessTrueClusterCandidates(AliAODConversionPhoton *TruePhotonCandidate)
1590{
fd94f234 1591
1592 TParticle *Photon = NULL;
1593 if (!TruePhotonCandidate->GetIsCaloPhoton()) AliFatal("CaloPhotonFlag has not been set task will abort");
1594 fHistoTrueNLabelsInClus[fiCut]->Fill(TruePhotonCandidate->GetNCaloPhotonMCLabels());
8bdca7f1 1595
fd94f234 1596 if (TruePhotonCandidate->GetNCaloPhotonMCLabels()>0)Photon = fMCStack->Particle(TruePhotonCandidate->GetCaloPhotonMCLabel(0));
1597 else return;
1598
8bdca7f1 1599 if(Photon == NULL){
1600 // cout << "no photon" << endl;
1601 return;
1602 }
fd94f234 1603
1604 TruePhotonCandidate->SetCaloPhotonMCFlags(fMCStack);
8bdca7f1 1605
1606 // True Photon
ecd3e131 1607 if(fIsFromMBHeader && !fIsOverlappingWithOtherHeader){
fd94f234 1608 if (TruePhotonCandidate->IsLargestComponentPhoton() || TruePhotonCandidate->IsLargestComponentElectron() )fHistoTrueClusGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1609 else fHistoTrueClusEMNonLeadingPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1610 if (fDoClusterQA > 0){
20af4b69 1611 if (TruePhotonCandidate->IsLargestComponentPhoton()){
fd94f234 1612 fHistoTrueClusUnConvGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
20af4b69 1613 fHistoTrueClusUnConvGammaMCPt[fiCut]->Fill(Photon->Pt());
1614 }
fd94f234 1615 if (TruePhotonCandidate->IsLargestComponentElectron())
1616 fHistoTrueClusElectronPt[fiCut]->Fill(TruePhotonCandidate->Pt());
20af4b69 1617 if (TruePhotonCandidate->IsLargestComponentElectron() && TruePhotonCandidate->IsConversion()){
fd94f234 1618 fHistoTrueClusConvGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
20af4b69 1619 fHistoTrueClusConvGammaMCPt[fiCut]->Fill(((TParticle*)fMCStack->Particle(Photon->GetMother(0)))->Pt());
1620 }
fd94f234 1621 if (TruePhotonCandidate->IsLargestComponentElectron() && TruePhotonCandidate->IsConversion() && TruePhotonCandidate->IsConversionFullyContained())
1622 fHistoTrueClusConvGammaFullyPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1623 if (TruePhotonCandidate->IsMerged() || TruePhotonCandidate->IsMergedPartConv() || TruePhotonCandidate->IsDalitzMerged())
1624 fHistoTrueClusMergedGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1625 if (TruePhotonCandidate->IsMergedPartConv())
1626 fHistoTrueClusMergedPartConvGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1627 if (TruePhotonCandidate->IsDalitz())
1628 fHistoTrueClusDalitzPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1629 if (TruePhotonCandidate->IsDalitzMerged())
1630 fHistoTrueClusDalitzMergedPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1631 if (TruePhotonCandidate->IsPhotonWithElecMother())
1632 fHistoTrueClusPhotonFromElecMotherPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1633 if (TruePhotonCandidate->IsShower())
1634 fHistoTrueClusShowerPt[fiCut]->Fill(TruePhotonCandidate->Pt());
cc579963 1635 if (TruePhotonCandidate->IsSubLeadingEM())
1636 fHistoTrueClusSubLeadingPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1637 fHistoTrueClusNParticles[fiCut]->Fill(TruePhotonCandidate->GetNCaloPhotonMotherMCLabels());
fd94f234 1638 }
8bdca7f1 1639 }
1640
1641 if(Photon->GetMother(0) <= fMCStack->GetNprimary()){
1642 // Count just primary MC Gammas as true --> For Ratio esdtruegamma / mcconvgamma
1643 if(fIsFromMBHeader){
344100c4 1644 fHistoTruePrimaryClusGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1645 fHistoTruePrimaryClusGammaESDPtMCPt[fiCut]->Fill(TruePhotonCandidate->Pt(),Photon->Pt()); // Allways Filled
8bdca7f1 1646 }
fd94f234 1647 }
1648 return;
1649}
1650
1651
1652//________________________________________________________________________
1653void AliAnalysisTaskGammaConvCalo::ProcessTrueClusterCandidatesAOD(AliAODConversionPhoton *TruePhotonCandidate)
1654{
1655 AliAODMCParticle *Photon = NULL;
1656 TClonesArray *AODMCTrackArray = dynamic_cast<TClonesArray*>(fInputEvent->FindListObject(AliAODMCParticle::StdBranchName()));
1657 if (AODMCTrackArray){
1658 if (!TruePhotonCandidate->GetIsCaloPhoton()) AliFatal("CaloPhotonFlag has not been set task will abort");
1659 if (TruePhotonCandidate->GetNCaloPhotonMCLabels()>0) Photon = (AliAODMCParticle*) AODMCTrackArray->At(TruePhotonCandidate->GetCaloPhotonMCLabel(0));
1660 else return;
1661 } else {
1662 AliInfo("AODMCTrackArray could not be loaded");
1663 return;
8bdca7f1 1664 }
1665
fd94f234 1666 if(Photon == NULL){
cc579963 1667 // cout << "no photon" << endl;
fd94f234 1668 return;
1669 }
1670 TruePhotonCandidate->SetCaloPhotonMCFlagsAOD(fInputEvent);
d404157c 1671 fHistoTrueNLabelsInClus[fiCut]->Fill(TruePhotonCandidate->GetNCaloPhotonMCLabels());
fd94f234 1672 // True Photon
ecd3e131 1673 if(fIsFromMBHeader && !fIsOverlappingWithOtherHeader){
fd94f234 1674 if (TruePhotonCandidate->IsLargestComponentPhoton() || TruePhotonCandidate->IsLargestComponentElectron() )fHistoTrueClusGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1675 else fHistoTrueClusEMNonLeadingPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1676 if (fDoClusterQA > 0){
20af4b69 1677 if (TruePhotonCandidate->IsLargestComponentPhoton()) {
fd94f234 1678 fHistoTrueClusUnConvGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
20af4b69 1679 fHistoTrueClusUnConvGammaMCPt[fiCut]->Fill(Photon->Pt());
1680 }
fd94f234 1681 if (TruePhotonCandidate->IsLargestComponentElectron())
1682 fHistoTrueClusElectronPt[fiCut]->Fill(TruePhotonCandidate->Pt());
20af4b69 1683 if (TruePhotonCandidate->IsLargestComponentElectron() && TruePhotonCandidate->IsConversion()) {
fd94f234 1684 fHistoTrueClusConvGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
20af4b69 1685 AliAODMCParticle *Mother = (AliAODMCParticle*) AODMCTrackArray->At(Photon->GetMother());
1686 fHistoTrueClusConvGammaMCPt[fiCut]->Fill(Mother->Pt());
1687 }
fd94f234 1688 if (TruePhotonCandidate->IsLargestComponentElectron() && TruePhotonCandidate->IsConversion() && TruePhotonCandidate->IsConversionFullyContained())
1689 fHistoTrueClusConvGammaFullyPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1690 if (TruePhotonCandidate->IsMerged() || TruePhotonCandidate->IsMergedPartConv() || TruePhotonCandidate->IsDalitzMerged())
1691 fHistoTrueClusMergedGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1692 if (TruePhotonCandidate->IsMergedPartConv())
1693 fHistoTrueClusMergedPartConvGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1694 if (TruePhotonCandidate->IsDalitz())
1695 fHistoTrueClusDalitzPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1696 if (TruePhotonCandidate->IsDalitzMerged())
1697 fHistoTrueClusDalitzMergedPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1698 if (TruePhotonCandidate->IsPhotonWithElecMother())
1699 fHistoTrueClusPhotonFromElecMotherPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1700 if (TruePhotonCandidate->IsShower())
1701 fHistoTrueClusShowerPt[fiCut]->Fill(TruePhotonCandidate->Pt());
cc579963 1702 if (TruePhotonCandidate->IsSubLeadingEM())
1703 fHistoTrueClusSubLeadingPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1704 fHistoTrueClusNParticles[fiCut]->Fill(TruePhotonCandidate->GetNCaloPhotonMotherMCLabels());
fd94f234 1705 }
1706 }
8bdca7f1 1707
fd94f234 1708 // True Photon
1709 if(fIsFromMBHeader){
1710 fHistoTrueClusGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1711// if (fDoPhotonQA > 0) fHistoTrueConvGammaEta[fiCut]->Fill(TruePhotonCandidate->Eta());
1712 }
1713
1714 if(Photon->IsPrimary()){
1715 // Count just primary MC Gammas as true --> For Ratio esdtruegamma / mcconvgamma
1716 if(fIsFromMBHeader){
1717 fHistoTruePrimaryClusGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1718 fHistoTruePrimaryClusGammaESDPtMCPt[fiCut]->Fill(TruePhotonCandidate->Pt(),Photon->Pt()); // Allways Filled
1719 }
1720 }
1721}
8bdca7f1 1722
1723//________________________________________________________________________
1724void AliAnalysisTaskGammaConvCalo::ProcessPhotonCandidates()
1725{
1726 Int_t nV0 = 0;
1727 TList *GammaCandidatesStepOne = new TList();
1728 TList *GammaCandidatesStepTwo = new TList();
1729 // Loop over Photon Candidates allocated by ReaderV1
1730 for(Int_t i = 0; i < fReaderGammas->GetEntriesFast(); i++){
1731 AliAODConversionPhoton* PhotonCandidate = (AliAODConversionPhoton*) fReaderGammas->At(i);
1732 if(!PhotonCandidate) continue;
1733 fIsFromMBHeader = kTRUE;
344100c4 1734 if(fIsMC && ((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetSignalRejection() != 0){
1735 Int_t isPosFromMBHeader = ((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsParticleFromBGEvent(PhotonCandidate->GetMCLabelPositive(), fMCStack, fInputEvent);
1736 if(isPosFromMBHeader == 0 && ((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetSignalRejection() != 3) continue;
1737 Int_t isNegFromMBHeader = ((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsParticleFromBGEvent(PhotonCandidate->GetMCLabelNegative(), fMCStack, fInputEvent);
1738 if(isNegFromMBHeader == 0 && ((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetSignalRejection() != 3) continue;
8bdca7f1 1739 if( (isNegFromMBHeader+isPosFromMBHeader) != 4) fIsFromMBHeader = kFALSE;
1740 }
1741
344100c4 1742 if(!((AliConversionPhotonCuts*)fCutArray->At(fiCut))->PhotonIsSelected(PhotonCandidate,fInputEvent)) continue;
1743 if(!((AliConversionPhotonCuts*)fCutArray->At(fiCut))->InPlaneOutOfPlaneCut(PhotonCandidate->GetPhotonPhi(),fEventPlaneAngle)) continue;
1744 if(!((AliConversionPhotonCuts*)fCutArray->At(fiCut))->UseElecSharingCut() &&
1745 !((AliConversionPhotonCuts*)fCutArray->At(fiCut))->UseToCloseV0sCut()){
8bdca7f1 1746 fGammaCandidates->Add(PhotonCandidate); // if no second loop is required add to events good gammas
1747
1748 if(fIsFromMBHeader){
1749 fHistoConvGammaPt[fiCut]->Fill(PhotonCandidate->Pt());
1750 if (fDoPhotonQA > 0){
1751 fHistoConvGammaR[fiCut]->Fill(PhotonCandidate->GetConversionRadius());
1752 fHistoConvGammaEta[fiCut]->Fill(PhotonCandidate->Eta());
1753 }
1754 }
1755 if(fIsMC){
1756 if(fInputEvent->IsA()==AliESDEvent::Class())
1757 ProcessTruePhotonCandidates(PhotonCandidate);
1758 if(fInputEvent->IsA()==AliAODEvent::Class())
1759 ProcessTruePhotonCandidatesAOD(PhotonCandidate);
1760 }
1761 if (fIsFromMBHeader && fDoPhotonQA == 2){
1762 if (fIsHeavyIon == 1 && PhotonCandidate->Pt() > 0.399 && PhotonCandidate->Pt() < 12.){
344100c4 1763 fPtGamma = PhotonCandidate->Pt();
1764 fDCAzPhoton = PhotonCandidate->GetDCAzToPrimVtx();
1765 fRConvPhoton = PhotonCandidate->GetConversionRadius();
1766 fEtaPhoton = PhotonCandidate->GetPhotonEta();
1767 fCharCatPhoton = PhotonCandidate->GetPhotonQuality();
1768 fTreeConvGammaPtDcazCat[fiCut]->Fill();
8bdca7f1 1769 } else if ( PhotonCandidate->Pt() > 0.299 && PhotonCandidate->Pt() < 16.){
344100c4 1770 fPtGamma = PhotonCandidate->Pt();
1771 fDCAzPhoton = PhotonCandidate->GetDCAzToPrimVtx();
1772 fRConvPhoton = PhotonCandidate->GetConversionRadius();
1773 fEtaPhoton = PhotonCandidate->GetPhotonEta();
1774 fCharCatPhoton = PhotonCandidate->GetPhotonQuality();
1775 fTreeConvGammaPtDcazCat[fiCut]->Fill();
8bdca7f1 1776 }
1777 }
344100c4 1778 } else if(((AliConversionPhotonCuts*)fCutArray->At(fiCut))->UseElecSharingCut()){ // if Shared Electron cut is enabled, Fill array, add to step one
1779 ((AliConversionPhotonCuts*)fCutArray->At(fiCut))->FillElectonLabelArray(PhotonCandidate,nV0);
8bdca7f1 1780 nV0++;
1781 GammaCandidatesStepOne->Add(PhotonCandidate);
344100c4 1782 } else if(!((AliConversionPhotonCuts*)fCutArray->At(fiCut))->UseElecSharingCut() &&
1783 ((AliConversionPhotonCuts*)fCutArray->At(fiCut))->UseToCloseV0sCut()){ // shared electron is disabled, step one not needed -> step two
8bdca7f1 1784 GammaCandidatesStepTwo->Add(PhotonCandidate);
1785 }
1786 }
344100c4 1787 if(((AliConversionPhotonCuts*)fCutArray->At(fiCut))->UseElecSharingCut()){
8bdca7f1 1788 for(Int_t i = 0;i<GammaCandidatesStepOne->GetEntries();i++){
1789 AliAODConversionPhoton *PhotonCandidate= (AliAODConversionPhoton*) GammaCandidatesStepOne->At(i);
1790 if(!PhotonCandidate) continue;
1791 fIsFromMBHeader = kTRUE;
344100c4 1792 if(fMCStack && ((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetSignalRejection() != 0){
1793 Int_t isPosFromMBHeader = ((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsParticleFromBGEvent(PhotonCandidate->GetMCLabelPositive(), fMCStack, fInputEvent);
1794 Int_t isNegFromMBHeader = ((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsParticleFromBGEvent(PhotonCandidate->GetMCLabelNegative(), fMCStack, fInputEvent);
8bdca7f1 1795 if( (isNegFromMBHeader+isPosFromMBHeader) != 4) fIsFromMBHeader = kFALSE;
1796 }
344100c4 1797 if(!((AliConversionPhotonCuts*)fCutArray->At(fiCut))->RejectSharedElectronV0s(PhotonCandidate,i,GammaCandidatesStepOne->GetEntries())) continue;
1798 if(!((AliConversionPhotonCuts*)fCutArray->At(fiCut))->UseToCloseV0sCut()){ // To Colse v0s cut diabled, step two not needed
8bdca7f1 1799 fGammaCandidates->Add(PhotonCandidate);
1800 if(fIsFromMBHeader){
1801 fHistoConvGammaPt[fiCut]->Fill(PhotonCandidate->Pt());
1802 if (fDoPhotonQA > 0){
1803 fHistoConvGammaR[fiCut]->Fill(PhotonCandidate->GetConversionRadius());
1804 fHistoConvGammaEta[fiCut]->Fill(PhotonCandidate->Eta());
1805 }
1806 }
1807 }
1808 if(fIsMC){
1809 if(fInputEvent->IsA()==AliESDEvent::Class())
1810 ProcessTruePhotonCandidates(PhotonCandidate);
1811 if(fInputEvent->IsA()==AliAODEvent::Class())
1812 ProcessTruePhotonCandidatesAOD(PhotonCandidate);
1813 } else GammaCandidatesStepTwo->Add(PhotonCandidate); // Close v0s cut enabled -> add to list two
1814
1815 if (fIsFromMBHeader && fDoPhotonQA == 2){
1816 if (fIsHeavyIon ==1 && PhotonCandidate->Pt() > 0.399 && PhotonCandidate->Pt() < 12.){
1817 fPtGamma = PhotonCandidate->Pt();
1818 fDCAzPhoton = PhotonCandidate->GetDCAzToPrimVtx();
1819 fRConvPhoton = PhotonCandidate->GetConversionRadius();
1820 fEtaPhoton = PhotonCandidate->GetPhotonEta();
1821 fCharCatPhoton = PhotonCandidate->GetPhotonQuality();
1822 fTreeConvGammaPtDcazCat[fiCut]->Fill();
1823 } else if ( PhotonCandidate->Pt() > 0.299 && PhotonCandidate->Pt() < 16.){
1824 fPtGamma = PhotonCandidate->Pt();
1825 fDCAzPhoton = PhotonCandidate->GetDCAzToPrimVtx();
1826 fRConvPhoton = PhotonCandidate->GetConversionRadius();
1827 fEtaPhoton = PhotonCandidate->GetPhotonEta();
1828 fCharCatPhoton = PhotonCandidate->GetPhotonQuality();
1829 fTreeConvGammaPtDcazCat[fiCut]->Fill();
1830 }
1831 }
1832 }
1833 }
344100c4 1834 if(((AliConversionPhotonCuts*)fCutArray->At(fiCut))->UseToCloseV0sCut()){
8bdca7f1 1835 for(Int_t i = 0;i<GammaCandidatesStepTwo->GetEntries();i++){
1836 AliAODConversionPhoton* PhotonCandidate = (AliAODConversionPhoton*) GammaCandidatesStepTwo->At(i);
1837 if(!PhotonCandidate) continue;
1838 fIsFromMBHeader = kTRUE;
344100c4 1839 if(fMCStack && ((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetSignalRejection() != 0){
1840 Int_t isPosFromMBHeader = ((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsParticleFromBGEvent(PhotonCandidate->GetMCLabelPositive(), fMCStack, fInputEvent);
1841 Int_t isNegFromMBHeader = ((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsParticleFromBGEvent(PhotonCandidate->GetMCLabelNegative(), fMCStack, fInputEvent);
8bdca7f1 1842 if( (isNegFromMBHeader+isPosFromMBHeader) != 4) fIsFromMBHeader = kFALSE;
1843 }
344100c4 1844 if(!((AliConversionPhotonCuts*)fCutArray->At(fiCut))->RejectToCloseV0s(PhotonCandidate,GammaCandidatesStepTwo,i)) continue;
8bdca7f1 1845 fGammaCandidates->Add(PhotonCandidate); // Add gamma to current cut TList
1846 if(fIsFromMBHeader){
1847 fHistoConvGammaPt[fiCut]->Fill(PhotonCandidate->Pt());
1848 if (fDoPhotonQA > 0){
1849 fHistoConvGammaR[fiCut]->Fill(PhotonCandidate->GetConversionRadius());
1850 fHistoConvGammaEta[fiCut]->Fill(PhotonCandidate->Eta());
1851 }
1852 }
1853 if(fIsMC){
1854 if(fInputEvent->IsA()==AliESDEvent::Class())
1855 ProcessTruePhotonCandidates(PhotonCandidate);
1856 if(fInputEvent->IsA()==AliAODEvent::Class())
1857 ProcessTruePhotonCandidatesAOD(PhotonCandidate);
1858 }
1859 if (fIsFromMBHeader){
1860 if (fIsHeavyIon == 1 && PhotonCandidate->Pt() > 0.399 && PhotonCandidate->Pt() < 12.){
1861 fPtGamma = PhotonCandidate->Pt();
1862 fDCAzPhoton = PhotonCandidate->GetDCAzToPrimVtx();
1863 fRConvPhoton = PhotonCandidate->GetConversionRadius();
1864 fEtaPhoton = PhotonCandidate->GetPhotonEta();
1865 fCharCatPhoton = PhotonCandidate->GetPhotonQuality();
1866 fTreeConvGammaPtDcazCat[fiCut]->Fill();
1867 } else if ( PhotonCandidate->Pt() > 0.299 && PhotonCandidate->Pt() < 16.){
1868 fPtGamma = PhotonCandidate->Pt();
1869 fDCAzPhoton = PhotonCandidate->GetDCAzToPrimVtx();
1870 fRConvPhoton = PhotonCandidate->GetConversionRadius();
1871 fEtaPhoton = PhotonCandidate->GetPhotonEta();
1872 fCharCatPhoton = PhotonCandidate->GetPhotonQuality();
1873 fTreeConvGammaPtDcazCat[fiCut]->Fill();
1874 }
1875 }
1876 }
1877 }
1878
1879 delete GammaCandidatesStepOne;
1880 GammaCandidatesStepOne = 0x0;
1881 delete GammaCandidatesStepTwo;
1882 GammaCandidatesStepTwo = 0x0;
1883
1884}
1885//________________________________________________________________________
1886void AliAnalysisTaskGammaConvCalo::ProcessTruePhotonCandidatesAOD(AliAODConversionPhoton *TruePhotonCandidate)
1887{
1888
1889 Double_t magField = fInputEvent->GetMagneticField();
1890 if( magField < 0.0 ){
1891 magField = 1.0;
1892 }
1893 else {
1894 magField = -1.0;
1895 }
1896
1897 TClonesArray *AODMCTrackArray = dynamic_cast<TClonesArray*>(fInputEvent->FindListObject(AliAODMCParticle::StdBranchName()));
1898 AliAODMCParticle *posDaughter = (AliAODMCParticle*) AODMCTrackArray->At(TruePhotonCandidate->GetMCLabelPositive());
1899 AliAODMCParticle *negDaughter = (AliAODMCParticle*) AODMCTrackArray->At(TruePhotonCandidate->GetMCLabelNegative());
1900 fCharPhotonMCInfo = 0;
1901
1902 if(posDaughter == NULL || negDaughter == NULL) return; // One particle does not exist
1903 Int_t pdgCode[2] = {abs(posDaughter->GetPdgCode()),abs(negDaughter->GetPdgCode())};
1904
1905 if(posDaughter->GetMother() != negDaughter->GetMother()){
1906 FillPhotonCombinatorialBackgroundHist(TruePhotonCandidate, pdgCode);
1907 fCharPhotonMCInfo = 1;
1908 return;
1909 }
1910 else if(posDaughter->GetMother() == -1){
1911 FillPhotonCombinatorialBackgroundHist(TruePhotonCandidate, pdgCode);
1912 fCharPhotonMCInfo = 1;
1913 return;
1914 }
1915
1916 if(pdgCode[0]!=11 || pdgCode[1]!=11){
1917 fCharPhotonMCInfo = 1;
1918 return; //One Particle is not a electron
1919 }
fd94f234 1920
8bdca7f1 1921 if(posDaughter->GetPdgCode()==negDaughter->GetPdgCode()){
1922 fCharPhotonMCInfo = 1;
1923 return; // Same Charge
1924 }
1925
fd94f234 1926 AliAODMCParticle *Photon = (AliAODMCParticle*) AODMCTrackArray->At(posDaughter->GetMother());
8bdca7f1 1927 if(Photon->GetPdgCode() != 22){
8bdca7f1 1928 fCharPhotonMCInfo = 1;
1929 return; // Mother is no Photon
1930 }
1931
1932 if(((posDaughter->GetMCProcessCode())) != 5 || ((negDaughter->GetMCProcessCode())) != 5){
1933 fCharPhotonMCInfo = 1;
1934 return;// check if the daughters come from a conversion
1935 }
1936 // STILL A BUG IN ALIROOT >>8 HAS TPO BE REMOVED AFTER FIX
1937
1938
1939
1940 // True Photon
1941 if(fIsFromMBHeader){
1942 fHistoTrueConvGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1943 if (fDoPhotonQA > 0) fHistoTrueConvGammaEta[fiCut]->Fill(TruePhotonCandidate->Eta());
1944 }
8bdca7f1 1945 if(Photon->IsPrimary()){
1946 // Count just primary MC Gammas as true --> For Ratio esdtruegamma / mcconvgamma
1947 if(fIsFromMBHeader){
1948 fCharPhotonMCInfo = 6;
1949 fHistoTruePrimaryConvGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1950 fHistoTruePrimaryConvGammaESDPtMCPt[fiCut]->Fill(TruePhotonCandidate->Pt(),Photon->Pt()); // Allways Filled
1951 }
1952 // (Not Filled for i6, Extra Signal Gamma (parambox) are secondary)
1953 } else {
1954 if(fIsFromMBHeader){
1955 fHistoTrueSecondaryConvGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1956 fCharPhotonMCInfo = 2;
1957 if(((AliAODMCParticle*)AODMCTrackArray->At(Photon->GetMother()))->GetMother() > -1 &&
1958 ((AliAODMCParticle*)AODMCTrackArray->At(((AliAODMCParticle*)AODMCTrackArray->At(Photon->GetMother()))->GetMother()))->GetPdgCode() == 3122){
1959 fCharPhotonMCInfo = 5;
1960 fHistoTrueSecondaryConvGammaFromXFromLambdaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1961 }
1962 if(((AliAODMCParticle*)AODMCTrackArray->At(Photon->GetMother()))->GetMother() > -1 &&
1963 ((AliAODMCParticle*)AODMCTrackArray->At(((AliAODMCParticle*)AODMCTrackArray->At(Photon->GetMother()))->GetMother()))->GetPdgCode() == 310){
1964 fCharPhotonMCInfo = 4;
1965 fHistoTrueSecondaryConvGammaFromXFromK0sPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1966 }
1967 if(((AliAODMCParticle*)AODMCTrackArray->At(Photon->GetMother()))->GetMother() > -1 &&
1968 ((AliAODMCParticle*)AODMCTrackArray->At(((AliAODMCParticle*)AODMCTrackArray->At(Photon->GetMother()))->GetMother()))->GetPdgCode() == 221){
1969 fCharPhotonMCInfo = 3;
1970 }
1971 }
41ed7315 1972 }
1973 if( ((AliAODMCParticle*)AODMCTrackArray->At(Photon->GetMother()))->GetPdgCode() == 111 ){
1974 fHistoTrueConvPi0GammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
1975 }
8bdca7f1 1976}
1977//________________________________________________________________________
1978void AliAnalysisTaskGammaConvCalo::ProcessTruePhotonCandidates(AliAODConversionPhoton *TruePhotonCandidate)
1979{
cc579963 1980
8bdca7f1 1981 Double_t magField = fInputEvent->GetMagneticField();
1982 if( magField < 0.0 ){
1983 magField = 1.0;
1984 }
1985 else {
1986 magField = -1.0;
1987 }
cc579963 1988
8bdca7f1 1989 // Process True Photons
1990 TParticle *posDaughter = TruePhotonCandidate->GetPositiveMCDaughter(fMCStack);
1991 TParticle *negDaughter = TruePhotonCandidate->GetNegativeMCDaughter(fMCStack);
1992 fCharPhotonMCInfo = 0;
1993
1994 if(posDaughter == NULL || negDaughter == NULL) return; // One particle does not exist
1995 Int_t pdgCode[2] = {abs(posDaughter->GetPdgCode()),abs(negDaughter->GetPdgCode())};
1996 fCharPhotonMCInfo = 1;
1997 if(posDaughter->GetMother(0) != negDaughter->GetMother(0)){
1998 FillPhotonCombinatorialBackgroundHist(TruePhotonCandidate, pdgCode);
1999 return;
2000 }
2001 else if(posDaughter->GetMother(0) == -1){
2002 FillPhotonCombinatorialBackgroundHist(TruePhotonCandidate, pdgCode);
2003 return;
2004 }
2005
2006 if(pdgCode[0]!=11 || pdgCode[1]!=11) return; //One Particle is not a electron
2007
2008 if(posDaughter->GetPdgCode()==negDaughter->GetPdgCode()) return; // Same Charge
cc579963 2009
8bdca7f1 2010 TParticle *Photon = TruePhotonCandidate->GetMCParticle(fMCStack);
8bdca7f1 2011
2012 if(Photon->GetPdgCode() != 22){
8bdca7f1 2013 return; // Mother is no Photon
2014 }
2015
2016 if(posDaughter->GetUniqueID() != 5 || negDaughter->GetUniqueID() !=5) return;// check if the daughters come from a conversion
2017
8bdca7f1 2018 // True Photon
2019 if(fIsFromMBHeader){
2020 fHistoTrueConvGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
2021 if (fDoPhotonQA > 0) fHistoTrueConvGammaEta[fiCut]->Fill(TruePhotonCandidate->Eta());
2022 }
8bdca7f1 2023 if(posDaughter->GetMother(0) <= fMCStack->GetNprimary()){
2024 // Count just primary MC Gammas as true --> For Ratio esdtruegamma / mcconvgamma
2025 if(fIsFromMBHeader){
2026 fCharPhotonMCInfo = 6;
2027 fHistoTruePrimaryConvGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
2028 fHistoTruePrimaryConvGammaESDPtMCPt[fiCut]->Fill(TruePhotonCandidate->Pt(),Photon->Pt()); // Allways Filled
2029
2030 }
2031 // (Not Filled for i6, Extra Signal Gamma (parambox) are secondary)
2032 }
2033 else{
2034 if(fIsFromMBHeader){
2035 fCharPhotonMCInfo = 2;
2036 fHistoTrueSecondaryConvGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
2037 if(fMCStack->Particle(Photon->GetMother(0))->GetMother(0) > -1 &&
2038 fMCStack->Particle(fMCStack->Particle(Photon->GetMother(0))->GetMother(0))->GetPdgCode() == 3122){
2039 fHistoTrueSecondaryConvGammaFromXFromLambdaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
2040 fCharPhotonMCInfo = 5;
2041 }
2042 if(fMCStack->Particle(Photon->GetMother(0))->GetMother(0) > -1 &&
2043 fMCStack->Particle(fMCStack->Particle(Photon->GetMother(0))->GetMother(0))->GetPdgCode() == 310){
2044 fHistoTrueSecondaryConvGammaFromXFromK0sPt[fiCut]->Fill(TruePhotonCandidate->Pt());
2045 fCharPhotonMCInfo = 4;
2046 }
2047 if(fMCStack->Particle(Photon->GetMother(0))->GetMother(0) > -1 &&
2048 fMCStack->Particle(fMCStack->Particle(Photon->GetMother(0))->GetMother(0))->GetPdgCode() == 221){
2049 fCharPhotonMCInfo = 3;
2050 }
2051 }
2052 }
cc579963 2053
8bdca7f1 2054 // pi0 photon
2055 //Bool_t bpi0 = 0;
2056 Int_t imother = Photon->GetMother(0);
cc579963 2057 if(imother > -1){
2058 AliMCParticle* McMother = static_cast<AliMCParticle*>(fMCEvent->GetTrack(imother));
2059 //cout << fMCEvent->GetRunNumber() << " " << imother << " " << fMCEvent->GetNumberOfTracks() << endl;
2060 if(McMother->PdgCode() == 111) fHistoTrueConvPi0GammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
8bdca7f1 2061 }
cc579963 2062 return;
8bdca7f1 2063}
2064//________________________________________________________________________
2065void AliAnalysisTaskGammaConvCalo::ProcessAODMCParticles()
2066{
2067
2068 TClonesArray *AODMCTrackArray = dynamic_cast<TClonesArray*>(fInputEvent->FindListObject(AliAODMCParticle::StdBranchName()));
2069
2070 // Loop over all primary MC particle
2071 for(Int_t i = 0; i < AODMCTrackArray->GetEntriesFast(); i++) {
2072
2073 AliAODMCParticle* particle = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(i));
2074 if (!particle) continue;
2075 if (!particle->IsPrimary()) continue;
2076
2077 Int_t isMCFromMBHeader = -1;
344100c4 2078 if(((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetSignalRejection() != 0){
2079 isMCFromMBHeader = ((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsParticleFromBGEvent(i, fMCStack, fInputEvent);
2080 if(isMCFromMBHeader == 0 && ((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetSignalRejection() != 3) continue;
8bdca7f1 2081 }
2082
344100c4 2083 if(!((AliConversionPhotonCuts*)fCutArray->At(fiCut))->InPlaneOutOfPlaneCut(particle->Phi(),fEventPlaneAngle,kFALSE)) continue;
2084 if(((AliConversionPhotonCuts*)fCutArray->At(fiCut))->PhotonIsSelectedAODMC(particle,AODMCTrackArray,kFALSE)){
8bdca7f1 2085 fHistoMCAllGammaPt[fiCut]->Fill(particle->Pt()); // All MC Gamma
d404157c 2086 if (abs(particle->Eta()) < 0.66 ){
2087 if (particle->Phi() > 1.39626 && particle->Phi() < 3.125) fHistoMCAllGammaEMCALAccPt[fiCut]->Fill(particle->Pt());
8bdca7f1 2088 }
d404157c 2089 if(particle->GetMother() >-1){ // Meson Decay Gamma
2090 switch((static_cast<AliAODMCParticle*>(AODMCTrackArray->At(particle->GetMother())))->GetPdgCode()){
2091 case 111: // Pi0
2092 fHistoMCDecayGammaPi0Pt[fiCut]->Fill(particle->Pt());
2093 break;
2094 case 113: // Rho0
2095 fHistoMCDecayGammaRhoPt[fiCut]->Fill(particle->Pt());
2096 break;
2097 case 221: // Eta
2098 fHistoMCDecayGammaEtaPt[fiCut]->Fill(particle->Pt());
2099 break;
2100 case 223: // Omega
2101 fHistoMCDecayGammaOmegaPt[fiCut]->Fill(particle->Pt());
2102 break;
2103 case 331: // Eta'
2104 fHistoMCDecayGammaEtapPt[fiCut]->Fill(particle->Pt());
2105 break;
2106 case 333: // Phi
2107 fHistoMCDecayGammaPhiPt[fiCut]->Fill(particle->Pt());
2108 break;
2109 case 3212: // Sigma
2110 fHistoMCDecayGammaSigmaPt[fiCut]->Fill(particle->Pt());
2111 break;
8bdca7f1 2112 }
d404157c 2113 }
2114 }
2115 if(((AliConversionPhotonCuts*)fCutArray->At(fiCut))->PhotonIsSelectedAODMC(particle,AODMCTrackArray,kTRUE)){
2116 Double_t rConv = 0;
2117 for(Int_t daughterIndex=particle->GetDaughter(0);daughterIndex<=particle->GetDaughter(1);daughterIndex++){
2118 AliAODMCParticle *tmpDaughter = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(daughterIndex));
2119 if(!tmpDaughter) continue;
2120 if(abs(tmpDaughter->GetPdgCode()) == 11){
2121 rConv = sqrt( (tmpDaughter->Xv()*tmpDaughter->Xv()) + (tmpDaughter->Yv()*tmpDaughter->Yv()) );
8bdca7f1 2122 }
2123 }
d404157c 2124 fHistoMCConvGammaPt[fiCut]->Fill(particle->Pt());
2125 if (fDoPhotonQA > 0){
2126 fHistoMCConvGammaR[fiCut]->Fill(rConv);
2127 fHistoMCConvGammaEta[fiCut]->Fill(particle->Eta());
2128 }
2129 }
2130 // Converted MC Gamma
2131 if(fDoMesonAnalysis){
8bdca7f1 2132 if(particle->GetPdgCode() == 310 && fDoMesonQA > 0){
2133 Double_t mesonY = 10.;
2134 if(particle->E() - particle->Pz() == 0 || particle->E() + particle->Pz() == 0){
344100c4 2135 mesonY=10.-((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift();
8bdca7f1 2136 } else {
344100c4 2137 mesonY = 0.5*(TMath::Log((particle->E()+particle->Pz()) / (particle->E()-particle->Pz())))-((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift();
8bdca7f1 2138 }
2139 Float_t weightedK0s= 1;
344100c4 2140 if(((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsParticleFromBGEvent(i, fMCStack, fInputEvent)){
8bdca7f1 2141 if (particle->Pt()>0.005){
344100c4 2142 weightedK0s= ((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),i, 0x0, fInputEvent);
8bdca7f1 2143 //cout << "MC input \t"<<i << "\t" << particle->Pt()<<"\t"<<weighted << endl;
2144 }
2145 }
2146 fHistoMCK0sPt[fiCut]->Fill(particle->Pt(),weightedK0s);
2147 fHistoMCK0sWOWeightPt[fiCut]->Fill(particle->Pt());
2148 fHistoMCK0sPtY[fiCut]->Fill(particle->Pt(),mesonY,weightedK0s);
2149 }
2150 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))
344100c4 2151 ->MesonIsSelectedAODMC(particle,AODMCTrackArray,((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift())){
8bdca7f1 2152 AliAODMCParticle* daughter0 = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(particle->GetDaughter(0)));
2153 AliAODMCParticle* daughter1 = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(particle->GetDaughter(1)));
2154 Float_t weighted= 1;
344100c4 2155 if(((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsParticleFromBGEvent(i, fMCStack, fInputEvent)){
8bdca7f1 2156 if (particle->Pt()>0.005){
344100c4 2157 weighted= ((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),i, 0x0, fInputEvent);
8bdca7f1 2158 // if(particle->GetPdgCode() == 221){
2159 // cout << "MC input \t"<<i << "\t" << particle->Pt()<<"\t"<<weighted << endl;
2160 // }
2161 }
2162 }
2163 Double_t mesonY = 10.;
2164 if(particle->E() - particle->Pz() == 0 || particle->E() + particle->Pz() == 0){
344100c4 2165 mesonY=10.-((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift();
8bdca7f1 2166 } else{
344100c4 2167 mesonY = 0.5*(TMath::Log((particle->E()+particle->Pz()) / (particle->E()-particle->Pz())))-((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift();
8bdca7f1 2168 }
2169
de752898 2170 Double_t alpha = -1;
2171 if (particle->GetPdgCode() == 111 || particle->GetPdgCode() == 221){
2172 alpha = TMath::Abs((daughter0->E() - daughter1->E()))/(daughter0->E() + daughter1->E());
2173 }
2174
2175
8bdca7f1 2176 if(particle->GetPdgCode() == 111){
2177 fHistoMCPi0Pt[fiCut]->Fill(particle->Pt(),weighted); // All MC Pi0
2178 fHistoMCPi0WOWeightPt[fiCut]->Fill(particle->Pt());
de752898 2179 if (fDoMesonQA > 0){
2180 fHistoMCPi0PtY[fiCut]->Fill(particle->Pt(),mesonY,weighted); // All MC Pi0
2181 fHistoMCPi0PtAlpha[fiCut]->Fill(particle->Pt(),alpha); // All MC Pi0
2182 }
8bdca7f1 2183 } else if(particle->GetPdgCode() == 221){
2184 fHistoMCEtaPt[fiCut]->Fill(particle->Pt(),weighted); // All MC Eta
2185 fHistoMCEtaWOWeightPt[fiCut]->Fill(particle->Pt());
de752898 2186 if (fDoMesonQA > 0){
2187 fHistoMCEtaPtY[fiCut]->Fill(particle->Pt(),mesonY,weighted); // All MC Pi0
2188 fHistoMCEtaPtAlpha[fiCut]->Fill(particle->Pt(),alpha); // All MC Pi0
2189 }
8bdca7f1 2190 }
2191
2192 // Check the acceptance for both gammas
344100c4 2193 if(((AliConversionPhotonCuts*)fCutArray->At(fiCut))->PhotonIsSelectedAODMC(daughter0,AODMCTrackArray,kFALSE) &&
2194 ((AliConversionPhotonCuts*)fCutArray->At(fiCut))->PhotonIsSelectedAODMC(daughter1,AODMCTrackArray,kFALSE) &&
2195 ((AliConversionPhotonCuts*)fCutArray->At(fiCut))->InPlaneOutOfPlaneCut(daughter0->Phi(),fEventPlaneAngle,kFALSE) &&
2196 ((AliConversionPhotonCuts*)fCutArray->At(fiCut))->InPlaneOutOfPlaneCut(daughter1->Phi(),fEventPlaneAngle,kFALSE)){
8bdca7f1 2197
2198 if(particle->GetPdgCode() == 111){
2199 fHistoMCPi0InAccPt[fiCut]->Fill(particle->Pt(),weighted); // MC Pi0 with gamma in acc
2200 } else if(particle->GetPdgCode() == 221){
2201 fHistoMCEtaInAccPt[fiCut]->Fill(particle->Pt(),weighted); // MC Eta with gamma in acc
2202 }
2203 }
2204 }
2205 }
2206 }
2207
2208}
2209//________________________________________________________________________
2210void AliAnalysisTaskGammaConvCalo::ProcessMCParticles()
2211{
2212 // Loop over all primary MC particle
2213 for(Int_t i = 0; i < fMCStack->GetNprimary(); i++) {
2214 TParticle* particle = (TParticle *)fMCStack->Particle(i);
2215 if (!particle) continue;
2216
2217 Int_t isMCFromMBHeader = -1;
344100c4 2218 if(((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetSignalRejection() != 0){
2219 isMCFromMBHeader = ((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsParticleFromBGEvent(i, fMCStack, fInputEvent);
2220 if(isMCFromMBHeader == 0 && ((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetSignalRejection() != 3) continue;
8bdca7f1 2221 }
2222
344100c4 2223 if(!((AliConversionPhotonCuts*)fCutArray->At(fiCut))->InPlaneOutOfPlaneCut(particle->Phi(),fEventPlaneAngle,kFALSE)) continue;
2224 if(((AliConversionPhotonCuts*)fCutArray->At(fiCut))->PhotonIsSelectedMC(particle,fMCStack,kFALSE)){
8bdca7f1 2225 fHistoMCAllGammaPt[fiCut]->Fill(particle->Pt()); // All MC Gamma
20af4b69 2226 if (abs(particle->Eta()) < 0.66 ){
2227 if (particle->Phi() > 1.39626 && particle->Phi() < 3.125) fHistoMCAllGammaEMCALAccPt[fiCut]->Fill(particle->Pt());
2228 }
2229
8bdca7f1 2230 if(particle->GetMother(0) >-1){ // Meson Decay Gamma
2231 switch(fMCStack->Particle(particle->GetMother(0))->GetPdgCode()){
2232 case 111: // Pi0
2233 fHistoMCDecayGammaPi0Pt[fiCut]->Fill(particle->Pt());
2234 break;
2235 case 113: // Rho0
2236 fHistoMCDecayGammaRhoPt[fiCut]->Fill(particle->Pt());
2237 break;
2238 case 221: // Eta
2239 fHistoMCDecayGammaEtaPt[fiCut]->Fill(particle->Pt());
2240 break;
2241 case 223: // Omega
2242 fHistoMCDecayGammaOmegaPt[fiCut]->Fill(particle->Pt());
2243 break;
2244 case 331: // Eta'
2245 fHistoMCDecayGammaEtapPt[fiCut]->Fill(particle->Pt());
2246 break;
2247 case 333: // Phi
2248 fHistoMCDecayGammaPhiPt[fiCut]->Fill(particle->Pt());
2249 break;
2250 case 3212: // Sigma
2251 fHistoMCDecayGammaSigmaPt[fiCut]->Fill(particle->Pt());
2252 break;
2253 }
2254 }
2255 }
344100c4 2256 if(((AliConversionPhotonCuts*)fCutArray->At(fiCut))->PhotonIsSelectedMC(particle,fMCStack,kTRUE)){
8bdca7f1 2257 fHistoMCConvGammaPt[fiCut]->Fill(particle->Pt());
2258 if (fDoPhotonQA > 0){
2259 fHistoMCConvGammaR[fiCut]->Fill(((TParticle*)fMCStack->Particle(particle->GetFirstDaughter()))->R());
2260 fHistoMCConvGammaEta[fiCut]->Fill(particle->Eta());
2261 }
2262 } // Converted MC Gamma
2263 if(fDoMesonAnalysis){
2264 if(particle->GetPdgCode() == 310 && fDoMesonQA > 0){
2265 Double_t mesonY = 10.;
2266 if(particle->Energy() - particle->Pz() == 0 || particle->Energy() + particle->Pz() == 0){
344100c4 2267 mesonY=10.-((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift();
8bdca7f1 2268 } else{
344100c4 2269 mesonY = 0.5*(TMath::Log((particle->Energy()+particle->Pz()) / (particle->Energy()-particle->Pz())))-((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift();
8bdca7f1 2270 }
2271 Float_t weightedK0s= 1;
344100c4 2272 if(((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsParticleFromBGEvent(i, fMCStack, fInputEvent)){
8bdca7f1 2273 if (particle->Pt()>0.005){
344100c4 2274 weightedK0s= ((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),i, fMCStack, fInputEvent);
8bdca7f1 2275 //cout << "MC input \t"<<i << "\t" << particle->Pt()<<"\t"<<weighted << endl;
2276 }
2277 }
2278 if (fMCStack->IsPhysicalPrimary(i)){
2279 fHistoMCK0sPt[fiCut]->Fill(particle->Pt(),weightedK0s);
2280 fHistoMCK0sWOWeightPt[fiCut]->Fill(particle->Pt());
2281 fHistoMCK0sPtY[fiCut]->Fill(particle->Pt(),mesonY,weightedK0s);
2282 }
2283 }
2284 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))
344100c4 2285 ->MesonIsSelectedMC(particle,fMCStack,((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift())){
8bdca7f1 2286 TParticle* daughter0 = (TParticle*)fMCStack->Particle(particle->GetFirstDaughter());
2287 TParticle* daughter1 = (TParticle*)fMCStack->Particle(particle->GetLastDaughter());
2288
2289 Float_t weighted= 1;
344100c4 2290 if(((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsParticleFromBGEvent(i, fMCStack, fInputEvent)){
8bdca7f1 2291 if (particle->Pt()>0.005){
344100c4 2292 weighted= ((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),i, fMCStack, fInputEvent);
8bdca7f1 2293 // if(particle->GetPdgCode() == 221){
2294 // cout << "MC input \t"<<i << "\t" << particle->Pt()<<"\t"<<weighted << endl;
2295 // }
2296 }
2297 }
2298 Double_t mesonY = 10.;
2299 if(particle->Energy() - particle->Pz() == 0 || particle->Energy() + particle->Pz() == 0){
344100c4 2300 mesonY=10.-((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift();
8bdca7f1 2301 } else{
344100c4 2302 mesonY = 0.5*(TMath::Log((particle->Energy()+particle->Pz()) / (particle->Energy()-particle->Pz())))-((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift();
8bdca7f1 2303 }
de752898 2304
2305 Double_t alpha = -1;
2306 if (particle->GetPdgCode() == 111 || particle->GetPdgCode() == 221){
2307 alpha = TMath::Abs((daughter0->Energy() - daughter1->Energy()))/(daughter0->Energy() + daughter1->Energy());
2308 }
2309
8bdca7f1 2310 if(particle->GetPdgCode() == 111){
2311 fHistoMCPi0Pt[fiCut]->Fill(particle->Pt(),weighted); // All MC Pi0
2312 fHistoMCPi0WOWeightPt[fiCut]->Fill(particle->Pt());
de752898 2313 if (fDoMesonQA > 0){
2314 fHistoMCPi0PtY[fiCut]->Fill(particle->Pt(),mesonY,weighted); // All MC Pi0
2315 fHistoMCPi0PtAlpha[fiCut]->Fill(particle->Pt(),alpha); // All MC Pi0
2316 }
8bdca7f1 2317 } else if(particle->GetPdgCode() == 221){
2318 fHistoMCEtaPt[fiCut]->Fill(particle->Pt(),weighted); // All MC Eta
2319 fHistoMCEtaWOWeightPt[fiCut]->Fill(particle->Pt());
de752898 2320 if (fDoMesonQA > 0){
2321 fHistoMCEtaPtY[fiCut]->Fill(particle->Pt(),mesonY,weighted); // All MC Pi0
2322 fHistoMCEtaPtAlpha[fiCut]->Fill(particle->Pt(),alpha); // All MC Pi0
2323 }
8bdca7f1 2324 }
2325
2326 // Check the acceptance for both gammas
344100c4 2327 if(((AliConversionPhotonCuts*)fCutArray->At(fiCut))->PhotonIsSelectedMC(daughter0,fMCStack,kFALSE) &&
2328 ((AliConversionPhotonCuts*)fCutArray->At(fiCut))->PhotonIsSelectedMC(daughter1,fMCStack,kFALSE) &&
2329 ((AliConversionPhotonCuts*)fCutArray->At(fiCut))->InPlaneOutOfPlaneCut(daughter0->Phi(),fEventPlaneAngle,kFALSE) &&
2330 ((AliConversionPhotonCuts*)fCutArray->At(fiCut))->InPlaneOutOfPlaneCut(daughter1->Phi(),fEventPlaneAngle,kFALSE)){
8bdca7f1 2331
2332 if(particle->GetPdgCode() == 111){
2333 fHistoMCPi0InAccPt[fiCut]->Fill(particle->Pt(),weighted); // MC Pi0 with gamma in acc
2334 } else if(particle->GetPdgCode() == 221){
2335 fHistoMCEtaInAccPt[fiCut]->Fill(particle->Pt(),weighted); // MC Eta with gamma in acc
2336 }
2337 }
2338 }
2339 }
2340 }
2341
2342 if (fDoMesonQA){
2343 for(Int_t i = fMCStack->GetNprimary(); i < fMCStack->GetNtrack(); i++) {
2344 TParticle* particle = (TParticle *)fMCStack->Particle(i);
2345 if (!particle) continue;
2346
2347 Int_t isMCFromMBHeader = -1;
344100c4 2348 if(((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetSignalRejection() != 0){
2349 isMCFromMBHeader = ((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsParticleFromBGEvent(i, fMCStack, fInputEvent);
2350 if(isMCFromMBHeader == 0 && ((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetSignalRejection() != 3) continue;
8bdca7f1 2351 }
2352
2353 if(fDoMesonAnalysis){
344100c4 2354 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->MesonIsSelectedMC(particle,fMCStack,((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift())){
8bdca7f1 2355 Float_t weighted= 1;
344100c4 2356 if(((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsParticleFromBGEvent(i, fMCStack, fInputEvent)){
8bdca7f1 2357 if (particle->Pt()>0.005){
344100c4 2358 weighted= ((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),i, fMCStack, fInputEvent);
8bdca7f1 2359 // if(particle->GetPdgCode() == 221){
2360 // cout << "MC input \t"<<i << "\t" << particle->Pt()<<"\t"<<weighted << endl;
2361 // }
2362 }
2363 }
2364
2365 if(particle->GetPdgCode() == 111){
2366 Int_t pdgCode = ((TParticle*)fMCStack->Particle( particle->GetFirstMother() ))->GetPdgCode();
2367 Int_t source = GetSourceClassification(111,pdgCode);
2368 fHistoMCSecPi0PtvsSource[fiCut]->Fill(particle->Pt(),source,weighted); // All MC Pi0
2369 fHistoMCSecPi0Source[fiCut]->Fill(pdgCode);
2370 } else if(particle->GetPdgCode() == 221){
2371 Int_t pdgCode = ((TParticle*)fMCStack->Particle( particle->GetFirstMother() ))->GetPdgCode();
2372 fHistoMCSecEtaPt[fiCut]->Fill(particle->Pt(),weighted); // All MC Pi0
2373 fHistoMCSecEtaSource[fiCut]->Fill(pdgCode);
2374 }
2375 }
2376 }
2377 }
2378 }
2379}
2380
2381//________________________________________________________________________
2382void AliAnalysisTaskGammaConvCalo::PhotonTagging(){
2383
2384 // Conversion Gammas
2385 if(fGammaCandidates->GetEntries()>0){
2386
2387 for(Int_t firstGammaIndex=0;firstGammaIndex<fGammaCandidates->GetEntries()-1;firstGammaIndex++){
2388
2389 // get conversion photon
2390 AliAODConversionPhoton *gamma0=dynamic_cast<AliAODConversionPhoton*>(fGammaCandidates->At(firstGammaIndex));
2391 if (gamma0==NULL) continue;
2392
2393 TLorentzVector photonVector;
2394 photonVector.SetPxPyPzE(gamma0->GetPx(),gamma0->GetPy(),gamma0->GetPz(),gamma0->GetPhotonP());
2395
2396 Bool_t btagpi0 = 0;
2397 Bool_t btageta = 0;
2398
2399 // loop over clusters
2400 for(Int_t secondGammaIndex = 0; secondGammaIndex<fClusterCandidates->GetEntries(); ++secondGammaIndex) {
2401
2402 AliAODConversionPhoton *gamma1=dynamic_cast<AliAODConversionPhoton*>(fClusterCandidates->At(secondGammaIndex));
2403 if (gamma1==NULL) continue;
2404
2405 TLorentzVector clusterVector;
2406 clusterVector.SetPxPyPzE(gamma1->GetPx(),gamma1->GetPy(),gamma1->GetPz(),gamma1->GetPhotonP());
2407
2408 // do the tagging
2409 TLorentzVector pairVector = photonVector+clusterVector;
2410
2411 // see if pi0?
2412 if((pairVector.M() > 0.11 && pairVector.M() < 0.15)){
344100c4 2413 btagpi0 = 1;
8bdca7f1 2414 }
2415 // or eta
2416 if((pairVector.M() > 0.50 && pairVector.M() < 0.6)){
344100c4 2417 btageta = 1;
8bdca7f1 2418 }
2419 }// end loop over clusters
2420
2421 if(btagpi0 && btageta)
2422 fHistoConvGammaTagged[fiCut]->Fill(photonVector.Pt());
2423 else if(btagpi0 && !btageta)
2424 fHistoConvGammaPi0Tagged[fiCut]->Fill(photonVector.Pt());
2425 else if(btageta && !btagpi0)
2426 fHistoConvGammaEtaTagged[fiCut]->Fill(photonVector.Pt());
2427 else
2428 fHistoConvGammaUntagged[fiCut]->Fill(photonVector.Pt());
2429
2430 }// end loop over gammas
2431 }// end if
2432 return;
2433}
2434
2435//________________________________________________________________________
2436void AliAnalysisTaskGammaConvCalo::CalculatePi0Candidates(){
2437
2438 // Conversion Gammas
2439 if(fGammaCandidates->GetEntries()>0){
2440
2441 // vertex
2442 Double_t vertex[3] = {0};
2443 InputEvent()->GetPrimaryVertex()->GetXYZ(vertex);
2444
2445 for(Int_t firstGammaIndex=0;firstGammaIndex<fGammaCandidates->GetEntries();firstGammaIndex++){
2446 AliAODConversionPhoton *gamma0=dynamic_cast<AliAODConversionPhoton*>(fGammaCandidates->At(firstGammaIndex));
2447 if (gamma0==NULL) continue;
2448
2449 for(Int_t secondGammaIndex=0;secondGammaIndex<fClusterCandidates->GetEntries();secondGammaIndex++){
d53bf4ac 2450 Bool_t matched = kFALSE;
8bdca7f1 2451 AliAODConversionPhoton *gamma1=dynamic_cast<AliAODConversionPhoton*>(fClusterCandidates->At(secondGammaIndex));
2452 if (gamma1==NULL) continue;
2453
d53bf4ac 2454 if (gamma1->GetIsCaloPhoton()){
2455 AliVCluster* cluster = fInputEvent->GetCaloCluster(gamma1->GetCaloClusterRef());
2456 matched = ((AliCaloPhotonCuts*)fClusterCutArray->At(fiCut))->MatchConvPhotonToCluster(gamma0,cluster, fInputEvent );
2457 }
2458
8bdca7f1 2459 AliAODConversionMother *pi0cand = new AliAODConversionMother(gamma0,gamma1);
2460 pi0cand->SetLabels(firstGammaIndex,secondGammaIndex);
2461
d53bf4ac 2462
2463
344100c4 2464 if((((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->MesonIsSelected(pi0cand,kTRUE,((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift()))){
d53bf4ac 2465 if (matched){
2466 fHistoMotherMatchedInvMassPt[fiCut]->Fill(pi0cand->M(),pi0cand->Pt());
2467 } else {
2468 fHistoMotherInvMassPt[fiCut]->Fill(pi0cand->M(),pi0cand->Pt());
2469 }
8bdca7f1 2470 // fill new histograms
d53bf4ac 2471 if (!matched){
2472 fHistoPhotonPairAll[fiCut]->Fill(pi0cand->M(),pi0cand->Pt());
2473 fHistoPhotonPairAllGam[fiCut]->Fill(pi0cand->M(),gamma0->Pt());
8bdca7f1 2474
d53bf4ac 2475 if(pi0cand->GetAlpha()<0.1)
2476 fHistoMotherInvMassEalpha[fiCut]->Fill(pi0cand->M(),pi0cand->E());
2477
2478 if (fDoMesonQA > 0){
2479 if ( pi0cand->M() > 0.05 && pi0cand->M() < 0.17){
2480 fHistoMotherPi0PtY[fiCut]->Fill(pi0cand->Pt(),pi0cand->Rapidity()-((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift());
2481 fHistoMotherPi0PtAlpha[fiCut]->Fill(pi0cand->Pt(),pi0cand->GetAlpha());
4e8dcc76 2482 fHistoMotherPi0PtOpenAngle[fiCut]->Fill(pi0cand->Pt(),pi0cand->GetOpeningAngle());
2483 fHistoMotherPi0ConvPhotonEtaPhi[fiCut]->Fill(gamma0->GetPhotonPhi(), gamma0->GetPhotonEta());
8bdca7f1 2484 }
d53bf4ac 2485 if ( pi0cand->M() > 0.45 && pi0cand->M() < 0.65){
2486 fHistoMotherEtaPtY[fiCut]->Fill(pi0cand->Pt(),pi0cand->Rapidity()-((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift());
2487 fHistoMotherEtaPtAlpha[fiCut]->Fill(pi0cand->Pt(),pi0cand->GetAlpha());
2488 fHistoMotherEtaPtOpenAngle[fiCut]->Fill(pi0cand->Pt(),pi0cand->GetOpeningAngle());
4e8dcc76 2489 fHistoMotherEtaConvPhotonEtaPhi[fiCut]->Fill(gamma0->GetPhotonPhi(), gamma0->GetPhotonEta());
d53bf4ac 2490 }
2491 }
2492 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->DoBGCalculation()){
2493 Int_t zbin = 0;
2494 Int_t mbin = 0;
2495
2496 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->BackgroundHandlerType() == 0){
2497 zbin = fBGHandler[fiCut]->GetZBinIndex(fInputEvent->GetPrimaryVertex()->GetZ());
2498 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->UseTrackMultiplicity()){
2499 mbin = fBGHandler[fiCut]->GetMultiplicityBinIndex(fV0Reader->GetNumberOfPrimaryTracks());
2500 } else {
2501 mbin = fBGHandler[fiCut]->GetMultiplicityBinIndex(fGammaCandidates->GetEntries());
2502 }
2503 } else{
2504 zbin = fBGHandlerRP[fiCut]->GetZBinIndex(fInputEvent->GetPrimaryVertex()->GetZ());
2505 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->UseTrackMultiplicity()){
2506 mbin = fBGHandlerRP[fiCut]->GetMultiplicityBinIndex(fV0Reader->GetNumberOfPrimaryTracks());
2507 } else {
2508 mbin = fBGHandlerRP[fiCut]->GetMultiplicityBinIndex(fGammaCandidates->GetEntries());
2509 }
8bdca7f1 2510 }
d53bf4ac 2511 Double_t sparesFill[4] = {pi0cand->M(),pi0cand->Pt(),(Double_t)zbin,(Double_t)mbin};
2512 fSparseMotherInvMassPtZM[fiCut]->Fill(sparesFill,1);
8bdca7f1 2513 }
8bdca7f1 2514 }
2515
8bdca7f1 2516 if(fIsMC){
2517 if(fInputEvent->IsA()==AliESDEvent::Class())
d53bf4ac 2518 ProcessTrueMesonCandidates(pi0cand,gamma0,gamma1, matched);
8bdca7f1 2519 if(fInputEvent->IsA()==AliAODEvent::Class())
d53bf4ac 2520 ProcessTrueMesonCandidatesAOD(pi0cand,gamma0,gamma1, matched);
8bdca7f1 2521 }
d53bf4ac 2522 if (!matched){
2523 if (fDoMesonQA == 2){
2524 fInvMass = pi0cand->M();
2525 fPt = pi0cand->Pt();
2526 if (abs(gamma0->GetDCAzToPrimVtx()) < abs(gamma1->GetDCAzToPrimVtx())){
2527 fDCAzGammaMin = gamma0->GetDCAzToPrimVtx();
2528 fDCAzGammaMax = gamma1->GetDCAzToPrimVtx();
2529 } else {
2530 fDCAzGammaMin = gamma1->GetDCAzToPrimVtx();
2531 fDCAzGammaMax = gamma0->GetDCAzToPrimVtx();
2532 }
2533 fCharFlag = pi0cand->GetMesonQuality();
2534 // cout << "gamma 0: " << gamma0->GetV0Index()<< "\t" << gamma0->GetPx() << "\t" << gamma0->GetPy() << "\t" << gamma0->GetPz() << "\t" << endl;
2535 // cout << "gamma 1: " << gamma1->GetV0Index()<< "\t"<< gamma1->GetPx() << "\t" << gamma1->GetPy() << "\t" << gamma1->GetPz() << "\t" << endl;
2536 // cout << "pi0: "<<fInvMass << "\t" << fPt <<"\t" << fDCAzGammaMin << "\t" << fDCAzGammaMax << "\t" << (Int_t)fCharFlag << "\t" << (Int_t)fCharMesonMCInfo <<endl;
2537 if (fIsHeavyIon == 1 && fPt > 0.399 && fPt < 20. ) {
2538 if (fInvMass > 0.08 && fInvMass < 0.2) fTreeMesonsInvMassPtDcazMinDcazMaxFlag[fiCut]->Fill();
2539 if ((fInvMass > 0.45 && fInvMass < 0.6) && (fPt > 0.999 && fPt < 20.) )fTreeMesonsInvMassPtDcazMinDcazMaxFlag[fiCut]->Fill();
2540 } else if (fPt > 0.299 && fPt < 20. ) {
2541 if ( (fInvMass > 0.08 && fInvMass < 0.2) || (fInvMass > 0.45 && fInvMass < 0.6)) fTreeMesonsInvMassPtDcazMinDcazMaxFlag[fiCut]->Fill();
2542 }
8bdca7f1 2543 }
d53bf4ac 2544 if (fDoMesonQA == 1){
2545 fHistoMotherInvMassECalib[fiCut]->Fill(pi0cand->M(),gamma1->E());
2546 if(pi0cand->GetAlpha()<0.1)
2547 fHistoMotherInvMassECalibalpha[fiCut]->Fill(pi0cand->M(),gamma1->E());
8bdca7f1 2548 }
2549 }
2550 }
2551 delete pi0cand;
2552 pi0cand=0x0;
2553 }
2554 }
2555 }
2556}
2557//______________________________________________________________________
d53bf4ac 2558void AliAnalysisTaskGammaConvCalo::ProcessTrueMesonCandidates(AliAODConversionMother *Pi0Candidate, AliAODConversionPhoton *TrueGammaCandidate0, AliAODConversionPhoton *TrueGammaCandidate1, Bool_t matched)
8bdca7f1 2559{
2560 // Process True Mesons
2561 AliStack *MCStack = fMCEvent->Stack();
2562 fCharMesonMCInfo = 0;
2563 if(TrueGammaCandidate0->GetV0Index()<fInputEvent->GetNumberOfV0s()){
2564 Bool_t isTruePi0 = kFALSE;
2565 Bool_t isTrueEta = kFALSE;
8bdca7f1 2566 Int_t gamma0MCLabel = TrueGammaCandidate0->GetMCParticleLabel(MCStack);
2567 Int_t gamma0MotherLabel = -1;
2568 if(gamma0MCLabel != -1){ // Gamma is Combinatorial; MC Particles don't belong to the same Mother
fd94f234 2569 // Daughters Gamma 0
2570 TParticle * negativeMC = (TParticle*)TrueGammaCandidate0->GetNegativeMCDaughter(MCStack);
2571 TParticle * positiveMC = (TParticle*)TrueGammaCandidate0->GetPositiveMCDaughter(MCStack);
2572 TParticle * gammaMC0 = (TParticle*)MCStack->Particle(gamma0MCLabel);
2573 if(abs(negativeMC->GetPdgCode())==11 && abs(positiveMC->GetPdgCode())==11){ // Electrons ...
2574 if(negativeMC->GetUniqueID() == 5 && positiveMC->GetUniqueID() ==5){ // ... From Conversion ...
2575 if(gammaMC0->GetPdgCode() == 22){ // ... with Gamma Mother
2576 gamma0MotherLabel=gammaMC0->GetFirstMother();
2577 }
8bdca7f1 2578 }
2579 }
fd94f234 2580 }
2581 if (!TrueGammaCandidate1->GetIsCaloPhoton()) AliFatal("CaloPhotonFlag has not been set. Aborting");
2582
2583 Int_t gamma1MCLabel = TrueGammaCandidate1->GetCaloPhotonMCLabel(0); // get most probable MC label
2584 Int_t gamma1MotherLabel = -1;
2585 // check if
2586
2587 if(gamma1MCLabel != -1){ // Gamma is Combinatorial; MC Particles don't belong to the same Mother
2588 // Daughters Gamma 1
2589 TParticle * gammaMC1 = (TParticle*)MCStack->Particle(gamma1MCLabel);
2590 if (TrueGammaCandidate1->IsLargestComponentPhoton() || TrueGammaCandidate1->IsLargestComponentElectron()){ // largest component is electro magnetic
2591 // get mother of interest (pi0 or eta)
2592 if (TrueGammaCandidate1->IsLargestComponentPhoton()){ // for photons its the direct mother
2593 gamma1MotherLabel=gammaMC1->GetMother(0);
2594 } else if (TrueGammaCandidate1->IsLargestComponentElectron()){ // for electrons its either the direct mother or for conversions the grandmother
2595 if (TrueGammaCandidate1->IsConversion()) gamma1MotherLabel=MCStack->Particle(gammaMC1->GetMother(0))->GetMother(0);
2596 else gamma1MotherLabel=gammaMC1->GetMother(0);
2597 }
2598 } else {
2599 if (fDoMesonQA > 0) fHistoTrueMotherCaloEMNonLeadingInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2600 }
2601 }
2602
2603 if(gamma0MotherLabel>=0 && gamma0MotherLabel==gamma1MotherLabel){
2604 if(((TParticle*)MCStack->Particle(gamma1MotherLabel))->GetPdgCode() == 111){
2605 isTruePi0=kTRUE;
8bdca7f1 2606 }
fd94f234 2607 if(((TParticle*)MCStack->Particle(gamma1MotherLabel))->GetPdgCode() == 221){
2608 isTrueEta=kTRUE;
8bdca7f1 2609 }
2610 }
fd94f234 2611
2612 if(isTruePi0 || isTrueEta){// True Pion or Eta
ed8bc1ca 2613 if (!matched){
2614 if (isTruePi0)fHistoTruePi0InvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2615 if (isTrueEta)fHistoTrueEtaInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2616 }
fd94f234 2617 if (fDoMesonQA > 0){
ed8bc1ca 2618 if (TrueGammaCandidate1->IsLargestComponentPhoton() && !matched){
2619 if(isTruePi0) fHistoTruePi0CaloPhotonInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2620 if(isTrueEta) fHistoTrueEtaCaloPhotonInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2621 }
2622 if (TrueGammaCandidate1->IsLargestComponentElectron() && !matched){
2623 if(isTruePi0) fHistoTruePi0CaloElectronInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2624 if(isTrueEta) fHistoTrueEtaCaloElectronInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2625 }
d53bf4ac 2626 if (TrueGammaCandidate1->IsLargestComponentElectron() && TrueGammaCandidate1->IsConversion() ){
d53bf4ac 2627 if (isTruePi0 && !matched)fHistoTruePi0CaloConvertedPhotonInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2628 if (isTrueEta && !matched)fHistoTrueEtaCaloConvertedPhotonInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2629 if ((TrueGammaCandidate0->GetMCLabelPositive() == gamma1MCLabel || TrueGammaCandidate0->GetMCLabelNegative() == gamma1MCLabel) && isTruePi0){
20af4b69 2630 fHistoTruePi0CaloConvertedPhotonMatchedInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
d53bf4ac 2631 }
2632 if ((TrueGammaCandidate0->GetMCLabelPositive() == gamma1MCLabel || TrueGammaCandidate0->GetMCLabelNegative() == gamma1MCLabel) && isTrueEta){
20af4b69 2633 fHistoTrueEtaCaloConvertedPhotonMatchedInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
d53bf4ac 2634 }
20af4b69 2635 }
ed8bc1ca 2636 if ((TrueGammaCandidate1->IsMerged() || TrueGammaCandidate1->IsMergedPartConv() || TrueGammaCandidate1->IsDalitzMerged()) && !matched ){
2637 if (isTruePi0 )fHistoTruePi0CaloMergedClusterInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2638 if (isTrueEta )fHistoTrueEtaCaloMergedClusterInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2639 }
2640 if (TrueGammaCandidate1->IsMergedPartConv() && !matched){
2641 if (isTruePi0) fHistoTruePi0CaloMergedClusterPartConvInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2642 if (isTrueEta) fHistoTrueEtaCaloMergedClusterPartConvInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2643 }
fd94f234 2644 }
d53bf4ac 2645 if (!matched){
2646 if (fDoMesonQA > 0){
2647 if (isTruePi0){
2648 if ( Pi0Candidate->M() > 0.05 && Pi0Candidate->M() < 0.17){
2649 fHistoTruePi0PtY[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->Rapidity()-((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift());
2650 fHistoTruePi0PtAlpha[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->GetAlpha());
2651 fHistoTruePi0PtOpenAngle[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->GetOpeningAngle());
ee4b3d66 2652 fHistoTrueMotherPi0ConvPhotonEtaPhi[fiCut]->Fill(TrueGammaCandidate0->GetPhotonPhi(), TrueGammaCandidate0->GetPhotonEta());
d53bf4ac 2653 }
2654 } else if (isTrueEta){
2655 if ( Pi0Candidate->M() > 0.45 && Pi0Candidate->M() < 0.65){
2656 fHistoTrueEtaPtY[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->Rapidity()-((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift());
2657 fHistoTrueEtaPtAlpha[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->GetAlpha());
2658 fHistoTrueEtaPtOpenAngle[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->GetOpeningAngle());
ee4b3d66 2659 fHistoTrueMotherEtaConvPhotonEtaPhi[fiCut]->Fill(TrueGammaCandidate0->GetPhotonPhi(), TrueGammaCandidate0->GetPhotonEta());
d53bf4ac 2660 }
8bdca7f1 2661 }
2662 }
d53bf4ac 2663
2664 if(gamma0MotherLabel >= MCStack->GetNprimary()){ // Secondary Meson
2665 Int_t secMotherLabel = ((TParticle*)MCStack->Particle(gamma0MotherLabel))->GetMother(0);
2666 Float_t weightedSec= 1;
2667 if(((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsParticleFromBGEvent(secMotherLabel, fMCStack, fInputEvent) && MCStack->Particle(secMotherLabel)->GetPdgCode()==310){
2668 weightedSec= ((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),secMotherLabel, fMCStack, fInputEvent)/2.; //invariant mass is additive thus the weight for the daughters has to be devide by two for the K0s at a certain pt
2669 //cout << "MC input \t"<<i << "\t" << particle->Pt()<<"\t"<<weighted << endl;
8bdca7f1 2670 }
ed8bc1ca 2671 if (isTruePi0) fHistoTrueSecondaryPi0InvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weightedSec);
2672 if (isTrueEta) fHistoTrueSecondaryEtaInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weightedSec);
d53bf4ac 2673 fCharMesonMCInfo = 2;
2674 if (secMotherLabel >-1){
ed8bc1ca 2675 if(MCStack->Particle(secMotherLabel)->GetPdgCode()==310 && isTruePi0 ){
d53bf4ac 2676 fCharMesonMCInfo = 4;
ed8bc1ca 2677 fHistoTrueSecondaryPi0FromK0sInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weightedSec);
d53bf4ac 2678 if (fDoMesonQA > 0)fHistoTrueK0sWithPi0DaughterMCPt[fiCut]->Fill(MCStack->Particle(secMotherLabel)->Pt());
2679 }
ed8bc1ca 2680 if(MCStack->Particle(secMotherLabel)->GetPdgCode()==221 && isTruePi0){
d53bf4ac 2681 fCharMesonMCInfo = 3;
ed8bc1ca 2682 fHistoTrueSecondaryPi0FromEtaInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weightedSec);
d53bf4ac 2683 if (fDoMesonQA > 0)fHistoTrueEtaWithPi0DaughterMCPt[fiCut]->Fill(MCStack->Particle(secMotherLabel)->Pt());
2684 }
ed8bc1ca 2685 if(MCStack->Particle(secMotherLabel)->GetPdgCode()==3122 && isTruePi0){
d53bf4ac 2686 fCharMesonMCInfo = 7;
ed8bc1ca 2687 fHistoTrueSecondaryPi0FromLambdaInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weightedSec);
d53bf4ac 2688 if (fDoMesonQA > 0)fHistoTrueLambdaWithPi0DaughterMCPt[fiCut]->Fill(MCStack->Particle(secMotherLabel)->Pt());
2689 }
8bdca7f1 2690 }
d53bf4ac 2691 } else { // Only primary pi0 for efficiency calculation
2692 fCharMesonMCInfo = 6;
2693 Float_t weighted= 1;
2694 if(((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsParticleFromBGEvent(gamma1MotherLabel, fMCStack, fInputEvent)){
2695 if (((TParticle*)MCStack->Particle(gamma1MotherLabel))->Pt()>0.005){
2696 weighted= ((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),gamma1MotherLabel, fMCStack, fInputEvent);
2697 // cout << "rec \t " <<gamma1MotherLabel << "\t" << weighted << endl;
2698 }
fd94f234 2699 }
ed8bc1ca 2700 if (isTruePi0){
2701 fHistoTruePrimaryPi0InvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weighted);
2702 fHistoTruePrimaryPi0W0WeightingInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2703 fProfileTruePrimaryPi0WeightsInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weighted);
2704 } else if (isTrueEta) {
2705 fHistoTruePrimaryEtaInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weighted);
2706 fHistoTruePrimaryEtaW0WeightingInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2707 fProfileTruePrimaryEtaWeightsInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weighted);
2708 }
d53bf4ac 2709
2710 if (fDoMesonQA > 0){
2711 if(isTruePi0){ // Only primary pi0 for resolution
2712 fHistoTruePrimaryPi0MCPtResolPt[fiCut]->Fill(((TParticle*)MCStack->Particle(gamma1MotherLabel))->Pt(),(Pi0Candidate->Pt()-((TParticle*)MCStack->Particle(gamma1MotherLabel))->Pt())/((TParticle*)MCStack->Particle(gamma1MotherLabel))->Pt(),weighted);
2713 }
2714 if (isTrueEta){ // Only primary eta for resolution
2715 fHistoTruePrimaryEtaMCPtResolPt[fiCut]->Fill(((TParticle*)MCStack->Particle(gamma1MotherLabel))->Pt(),(Pi0Candidate->Pt()-((TParticle*)MCStack->Particle(gamma1MotherLabel))->Pt())/((TParticle*)MCStack->Particle(gamma1MotherLabel))->Pt(),weighted);
2716 }
8bdca7f1 2717 }
2718 }
d53bf4ac 2719 }
fd94f234 2720 } else if(!isTruePi0 && !isTrueEta){ // Background
2721 if (fDoMesonQA > 0){
2722 if(gamma0MotherLabel>-1 && gamma1MotherLabel>-1){ // Both Tracks are Photons and have a mother but not Pi0 or Eta
2723 fHistoTrueBckGGInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2724 fCharMesonMCInfo = 1;
2725 } else { // No photon or without mother
2726 fHistoTrueBckContInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
8bdca7f1 2727 }
2728 }
2729 }
2730 }
2731}
2732//______________________________________________________________________
d53bf4ac 2733void AliAnalysisTaskGammaConvCalo::ProcessTrueMesonCandidatesAOD(AliAODConversionMother *Pi0Candidate, AliAODConversionPhoton *TrueGammaCandidate0, AliAODConversionPhoton *TrueGammaCandidate1, Bool_t matched)
8bdca7f1 2734{
2735
2736 // Process True Mesons
2737 TClonesArray *AODMCTrackArray = dynamic_cast<TClonesArray*>(fInputEvent->FindListObject(AliAODMCParticle::StdBranchName()));
2738 Bool_t isTruePi0 = kFALSE;
2739 Bool_t isTrueEta = kFALSE;
8bdca7f1 2740
2741 AliAODMCParticle *positiveMC = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(TrueGammaCandidate0->GetMCLabelPositive()));
2742 AliAODMCParticle *negativeMC = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(TrueGammaCandidate0->GetMCLabelNegative()));
2743
2744 fCharMesonMCInfo = 0;
2745 Int_t gamma0MCLabel = -1;
2746 Int_t gamma0MotherLabel = -1;
2747 if(!positiveMC||!negativeMC)
2748 return;
2749
2750 if(positiveMC->GetMother()>-1&&(negativeMC->GetMother() == positiveMC->GetMother())){
2751 gamma0MCLabel = positiveMC->GetMother();
2752 }
2753
2754 if(gamma0MCLabel != -1){ // Gamma is Combinatorial; MC Particles don't belong to the same Mother
2755 // Daughters Gamma 0
2756 AliAODMCParticle * gammaMC0 = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma0MCLabel));
2757 if(abs(negativeMC->GetPdgCode())==11 && abs(positiveMC->GetPdgCode())==11){ // Electrons ...
2758 if(((positiveMC->GetMCProcessCode())) == 5 && ((negativeMC->GetMCProcessCode())) == 5){ // ... From Conversion ...
2759 if(gammaMC0->GetPdgCode() == 22){ // ... with Gamma Mother
2760 gamma0MotherLabel=gammaMC0->GetMother();
2761 }
2762 }
8bdca7f1 2763 }
fd94f234 2764 }
2765
2766 Int_t gamma1MCLabel = TrueGammaCandidate1->GetCaloPhotonMCLabel(0); // get most probable MC label
8bdca7f1 2767 Int_t gamma1MotherLabel = -1;
fd94f234 2768 // check if
2769
8bdca7f1 2770 if(gamma1MCLabel != -1){ // Gamma is Combinatorial; MC Particles don't belong to the same Mother
2771 // Daughters Gamma 1
2772 AliAODMCParticle * gammaMC1 = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MCLabel));
fd94f234 2773 if (TrueGammaCandidate1->IsLargestComponentPhoton() || TrueGammaCandidate1->IsLargestComponentElectron()){ // largest component is electro magnetic
2774 // get mother of interest (pi0 or eta)
2775 if (TrueGammaCandidate1->IsLargestComponentPhoton()){ // for photons its the direct mother
8bdca7f1 2776 gamma1MotherLabel=gammaMC1->GetMother();
fd94f234 2777 } else if (TrueGammaCandidate1->IsLargestComponentElectron()){ // for electrons its either the direct mother or for conversions the grandmother
2778 if (TrueGammaCandidate1->IsConversion()){
2779 AliAODMCParticle * gammaGrandMotherMC1 = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gammaMC1->GetMother()));
2780 gamma1MotherLabel=gammaGrandMotherMC1->GetMother();
2781 } else gamma1MotherLabel=gammaMC1->GetMother();
8bdca7f1 2782 }
fd94f234 2783 } else {
2784 if (fDoMesonQA > 0) fHistoTrueMotherCaloEMNonLeadingInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2785 }
8bdca7f1 2786 }
fd94f234 2787
8bdca7f1 2788 if(gamma0MotherLabel>=0 && gamma0MotherLabel==gamma1MotherLabel){
fd94f234 2789 if(((AliAODMCParticle*)AODMCTrackArray->At(gamma1MotherLabel))->GetPdgCode() == 111){
8bdca7f1 2790 isTruePi0=kTRUE;
2791 }
fd94f234 2792 if(((AliAODMCParticle*)AODMCTrackArray->At(gamma1MotherLabel))->GetPdgCode() == 221){
8bdca7f1 2793 isTrueEta=kTRUE;
2794 }
2795 }
2796
8bdca7f1 2797 if(isTruePi0 || isTrueEta){// True Pion or Eta
ed8bc1ca 2798 if (!matched){
2799 if (isTruePi0)fHistoTruePi0InvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2800 if (isTrueEta)fHistoTrueEtaInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2801 }
fd94f234 2802 if (fDoMesonQA > 0){
ed8bc1ca 2803 if (TrueGammaCandidate1->IsLargestComponentPhoton() && !matched){
2804 if (isTruePi0) fHistoTruePi0CaloPhotonInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2805 if (isTrueEta) fHistoTrueEtaCaloPhotonInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2806 }
2807 if (TrueGammaCandidate1->IsLargestComponentElectron() && !matched) {
2808 if (isTruePi0) fHistoTruePi0CaloElectronInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2809 if (isTrueEta) fHistoTrueEtaCaloElectronInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2810 }
20af4b69 2811 if (TrueGammaCandidate1->IsLargestComponentElectron() && TrueGammaCandidate1->IsConversion()){
d53bf4ac 2812 if (isTruePi0 && !matched)fHistoTruePi0CaloConvertedPhotonInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2813 if (isTrueEta && !matched)fHistoTrueEtaCaloConvertedPhotonInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
20af4b69 2814 if ((TrueGammaCandidate0->GetMCLabelPositive() == gamma1MCLabel || TrueGammaCandidate0->GetMCLabelNegative() == gamma1MCLabel) && isTruePi0)
2815 fHistoTruePi0CaloConvertedPhotonMatchedInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2816 if ((TrueGammaCandidate0->GetMCLabelPositive() == gamma1MCLabel || TrueGammaCandidate0->GetMCLabelNegative() == gamma1MCLabel) && isTrueEta)
2817 fHistoTrueEtaCaloConvertedPhotonMatchedInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2818 }
ed8bc1ca 2819 if ((TrueGammaCandidate1->IsMerged() || TrueGammaCandidate1->IsMergedPartConv() || TrueGammaCandidate1->IsDalitzMerged()) && !matched ){
2820 if (isTruePi0) fHistoTruePi0CaloMergedClusterInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2821 if (isTrueEta) fHistoTrueEtaCaloMergedClusterInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2822 }
2823 if (TrueGammaCandidate1->IsMergedPartConv() && !matched) {
2824 if (isTruePi0) fHistoTruePi0CaloMergedClusterPartConvInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2825 if (isTrueEta) fHistoTrueEtaCaloMergedClusterPartConvInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2826 }
fd94f234 2827 }
2828
d53bf4ac 2829 if ( !matched){
2830 if (fDoMesonQA > 0){
2831 if (isTruePi0){
2832 if ( Pi0Candidate->M() > 0.05 && Pi0Candidate->M() < 0.17){
ee4b3d66 2833 fHistoTruePi0PtY[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->Rapidity()-((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift());
2834 fHistoTruePi0PtAlpha[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->GetAlpha());
2835 fHistoTruePi0PtOpenAngle[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->GetOpeningAngle());
2836 fHistoTrueMotherPi0ConvPhotonEtaPhi[fiCut]->Fill(TrueGammaCandidate0->GetPhotonPhi(), TrueGammaCandidate0->GetPhotonEta());
d53bf4ac 2837 }
2838 } else if (isTrueEta){
2839 if ( Pi0Candidate->M() > 0.45 && Pi0Candidate->M() < 0.65){
ee4b3d66 2840 fHistoTrueEtaPtY[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->Rapidity()-((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift());
2841 fHistoTrueEtaPtAlpha[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->GetAlpha());
2842 fHistoTrueEtaPtOpenAngle[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->GetOpeningAngle());
2843 fHistoTrueMotherEtaConvPhotonEtaPhi[fiCut]->Fill(TrueGammaCandidate0->GetPhotonPhi(), TrueGammaCandidate0->GetPhotonEta());
d53bf4ac 2844 }
8bdca7f1 2845 }
2846 }
d53bf4ac 2847 if(!(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma0MotherLabel))->IsPrimary())){ // Secondary Meson
2848 Int_t secMotherLabel = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->GetMother();
2849 Float_t weightedSec= 1;
2850 if(((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsParticleFromBGEvent(secMotherLabel, 0x0, fInputEvent) && static_cast<AliAODMCParticle*>(AODMCTrackArray->At(secMotherLabel))->GetPdgCode()==310){
2851 weightedSec= ((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),secMotherLabel, 0x0, fInputEvent)/2.; //invariant mass is additive thus the weight for the daughters has to be devide by two for the K0s at a certain pt
2852 //cout << "MC input \t"<<i << "\t" << particle->Pt()<<"\t"<<weighted << endl;
8bdca7f1 2853 }
ed8bc1ca 2854 if (isTruePi0) fHistoTrueSecondaryPi0InvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weightedSec);
2855 if (isTrueEta) fHistoTrueSecondaryEtaInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weightedSec);
2856
d53bf4ac 2857 fCharMesonMCInfo = 2;
2858 if (secMotherLabel >-1){
ed8bc1ca 2859 if(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(secMotherLabel))->GetPdgCode()==310 && isTruePi0){
d53bf4ac 2860 fCharMesonMCInfo = 4;
ed8bc1ca 2861 fHistoTrueSecondaryPi0FromK0sInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weightedSec);
d53bf4ac 2862 if (fDoMesonQA > 0)fHistoTrueK0sWithPi0DaughterMCPt[fiCut]->Fill(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(secMotherLabel))->Pt());
2863 }
ed8bc1ca 2864 if(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(secMotherLabel))->GetPdgCode()==221 && isTruePi0){
d53bf4ac 2865 fCharMesonMCInfo = 3;
ed8bc1ca 2866 fHistoTrueSecondaryPi0FromEtaInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weightedSec);
d53bf4ac 2867 if (fDoMesonQA > 0)fHistoTrueEtaWithPi0DaughterMCPt[fiCut]->Fill(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(secMotherLabel))->Pt());
2868 }
ed8bc1ca 2869 if(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(secMotherLabel))->GetPdgCode()==3122 && isTruePi0){
d53bf4ac 2870 fCharMesonMCInfo = 7;
ed8bc1ca 2871 fHistoTrueSecondaryPi0FromLambdaInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weightedSec);
d53bf4ac 2872 if (fDoMesonQA > 0)fHistoTrueLambdaWithPi0DaughterMCPt[fiCut]->Fill(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(secMotherLabel))->Pt());
2873 }
8bdca7f1 2874 }
d53bf4ac 2875 } else{ // Only primary pi0 for efficiency calculation
2876 Float_t weighted= 1;
2877 fCharMesonMCInfo = 6;
2878 if(((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsParticleFromBGEvent(gamma1MotherLabel, 0x0, fInputEvent)){
2879 if (static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->Pt()>0.005){
2880 weighted= ((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),gamma1MotherLabel, 0x0, fInputEvent);
2881 // cout << "rec \t " <<gamma1MotherLabel << "\t" << weighted << endl;
2882 }
8bdca7f1 2883 }
ed8bc1ca 2884 if (isTruePi0){
2885 fHistoTruePrimaryPi0InvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weighted);
2886 fHistoTruePrimaryPi0W0WeightingInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2887 fProfileTruePrimaryPi0WeightsInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weighted);
2888 } else if (isTrueEta){
2889 fHistoTruePrimaryEtaInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weighted);
2890 fHistoTruePrimaryEtaW0WeightingInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2891 fProfileTruePrimaryEtaWeightsInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weighted);
2892 }
d53bf4ac 2893 if (fDoMesonQA > 0){
2894 if(isTruePi0){ // Only primary pi0 for resolution
2895 fHistoTruePrimaryPi0MCPtResolPt[fiCut]->Fill(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->Pt(),
2896 (Pi0Candidate->Pt()-static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->Pt())/static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->Pt(),weighted);
2897
2898 }
2899 if (isTrueEta){ // Only primary eta for resolution
2900 fHistoTruePrimaryEtaMCPtResolPt[fiCut]->Fill(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->Pt(),
2901 (Pi0Candidate->Pt()-static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->Pt())/static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->Pt(),weighted);
2902 }
8bdca7f1 2903 }
2904 }
d53bf4ac 2905 }
8bdca7f1 2906 } else if(!isTruePi0 && !isTrueEta) { // Background
2907 if (fDoMesonQA > 0){
2908 if(gamma0MotherLabel>-1 && gamma1MotherLabel>-1){ // Both Tracks are Photons and have a mother but not Pi0 or Eta
2909 fHistoTrueBckGGInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2910 fCharMesonMCInfo = 1;
2911 } else { // No photon or without mother
2912 fHistoTrueBckContInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2913 }
2914 }
8bdca7f1 2915 }
2916}
344100c4 2917
8bdca7f1 2918//________________________________________________________________________
2919void AliAnalysisTaskGammaConvCalo::CalculateBackground(){
2920
2921 Int_t zbin= fBGClusHandler[fiCut]->GetZBinIndex(fInputEvent->GetPrimaryVertex()->GetZ());
2922 Int_t mbin = 0;
2923
2924 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->UseTrackMultiplicity()){
2925 mbin = fBGClusHandler[fiCut]->GetMultiplicityBinIndex(fV0Reader->GetNumberOfPrimaryTracks());
2926 } else {
2927 mbin = fBGClusHandler[fiCut]->GetMultiplicityBinIndex(fGammaCandidates->GetEntries());
2928 }
2929
2930 AliGammaConversionAODBGHandler::GammaConversionVertex *bgEventVertex = NULL;
2931 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->UseTrackMultiplicity()){
2932 for(Int_t nEventsInBG=0;nEventsInBG<fBGClusHandler[fiCut]->GetNBGEvents();nEventsInBG++){
2933 AliGammaConversionAODVector *previousEventV0s = fBGClusHandler[fiCut]->GetBGGoodV0s(zbin,mbin,nEventsInBG);
2934 if(fMoveParticleAccordingToVertex == kTRUE){
2935 bgEventVertex = fBGClusHandler[fiCut]->GetBGEventVertex(zbin,mbin,nEventsInBG);
2936 }
2937
2938 for(Int_t iCurrent=0;iCurrent<fGammaCandidates->GetEntries();iCurrent++){
2939 AliAODConversionPhoton currentEventGoodV0 = *(AliAODConversionPhoton*)(fGammaCandidates->At(iCurrent));
2940 for(UInt_t iPrevious=0;iPrevious<previousEventV0s->size();iPrevious++){
2941 AliAODConversionPhoton previousGoodV0 = (AliAODConversionPhoton)(*(previousEventV0s->at(iPrevious)));
2942 if(fMoveParticleAccordingToVertex == kTRUE){
2943 MoveParticleAccordingToVertex(&previousGoodV0,bgEventVertex);
2944 }
344100c4 2945 if(((AliConversionPhotonCuts*)fCutArray->At(fiCut))->GetInPlaneOutOfPlaneCut() != 0){
8bdca7f1 2946 RotateParticleAccordingToEP(&previousGoodV0,bgEventVertex->fEP,fEventPlaneAngle);
2947 }
2948
2949 AliAODConversionMother *backgroundCandidate = new AliAODConversionMother(&currentEventGoodV0,&previousGoodV0);
2950 backgroundCandidate->CalculateDistanceOfClossetApproachToPrimVtx(fInputEvent->GetPrimaryVertex());
2951 if((((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))
344100c4 2952 ->MesonIsSelected(backgroundCandidate,kFALSE,((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift()))){
8bdca7f1 2953 fHistoMotherBackInvMassPt[fiCut]->Fill(backgroundCandidate->M(),backgroundCandidate->Pt());
2954 Double_t sparesFill[4] = {backgroundCandidate->M(),backgroundCandidate->Pt(),(Double_t)zbin,(Double_t)mbin};
2955 fSparseMotherBackInvMassPtZM[fiCut]->Fill(sparesFill,1);
2956 }
2957 delete backgroundCandidate;
2958 backgroundCandidate = 0x0;
2959 }
2960 }
2961 }
2962 } else {
2963 for(Int_t nEventsInBG=0;nEventsInBG <fBGClusHandler[fiCut]->GetNBGEvents();nEventsInBG++){
2964 AliGammaConversionAODVector *previousEventV0s = fBGClusHandler[fiCut]->GetBGGoodV0s(zbin,mbin,nEventsInBG);
2965 if(previousEventV0s){
2966 if(fMoveParticleAccordingToVertex == kTRUE){
2967 bgEventVertex = fBGClusHandler[fiCut]->GetBGEventVertex(zbin,mbin,nEventsInBG);
2968 }
2969 for(Int_t iCurrent=0;iCurrent<fGammaCandidates->GetEntries();iCurrent++){
2970 AliAODConversionPhoton currentEventGoodV0 = *(AliAODConversionPhoton*)(fGammaCandidates->At(iCurrent));
2971 for(UInt_t iPrevious=0;iPrevious<previousEventV0s->size();iPrevious++){
2972
2973 AliAODConversionPhoton previousGoodV0 = (AliAODConversionPhoton)(*(previousEventV0s->at(iPrevious)));
2974
2975 if(fMoveParticleAccordingToVertex == kTRUE){
2976 MoveParticleAccordingToVertex(&previousGoodV0,bgEventVertex);
2977 }
344100c4 2978 if(((AliConversionPhotonCuts*)fCutArray->At(fiCut))->GetInPlaneOutOfPlaneCut() != 0){
8bdca7f1 2979 RotateParticleAccordingToEP(&previousGoodV0,bgEventVertex->fEP,fEventPlaneAngle);
2980 }
2981
8bdca7f1 2982 AliAODConversionMother *backgroundCandidate = new AliAODConversionMother(&currentEventGoodV0,&previousGoodV0);
2983 backgroundCandidate->CalculateDistanceOfClossetApproachToPrimVtx(fInputEvent->GetPrimaryVertex());
344100c4 2984 if((((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->MesonIsSelected(backgroundCandidate,kFALSE,((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift()))){
8bdca7f1 2985 fHistoMotherBackInvMassPt[fiCut]->Fill(backgroundCandidate->M(),backgroundCandidate->Pt());
2986 Double_t sparesFill[4] = {backgroundCandidate->M(),backgroundCandidate->Pt(),(Double_t)zbin,(Double_t)mbin};
2987 fSparseMotherBackInvMassPtZM[fiCut]->Fill(sparesFill,1);
2988 }
2989 delete backgroundCandidate;
2990 backgroundCandidate = 0x0;
2991 }
2992 }
2993 }
2994 }
2995 }
2996}
2997
2998//________________________________________________________________________
2999void AliAnalysisTaskGammaConvCalo::CalculateBackgroundRP(){
3000
3001 Int_t zbin= fBGHandlerRP[fiCut]->GetZBinIndex(fInputEvent->GetPrimaryVertex()->GetZ());
3002 Int_t mbin = 0;
3003 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->UseTrackMultiplicity()){
3004 mbin = fBGHandlerRP[fiCut]->GetMultiplicityBinIndex(fV0Reader->GetNumberOfPrimaryTracks());
3005 } else {
3006 mbin = fBGHandlerRP[fiCut]->GetMultiplicityBinIndex(fGammaCandidates->GetEntries());
3007 }
3008
3009
3010 //Rotation Method
3011 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->UseRotationMethod()){
3012 // Correct for the number of rotations
3013 // BG is for rotation the same, except for factor NRotations
3014 Double_t weight=1./Double_t(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->GetNumberOfBGEvents());
3015
3016 for(Int_t firstGammaIndex=0;firstGammaIndex<fGammaCandidates->GetEntries();firstGammaIndex++){
3017
3018 AliAODConversionPhoton *gamma0=dynamic_cast<AliAODConversionPhoton*>(fGammaCandidates->At(firstGammaIndex));
3019 if (gamma0==NULL) continue;
3020 for(Int_t secondGammaIndex=firstGammaIndex+1;secondGammaIndex<fGammaCandidates->GetEntries();secondGammaIndex++){
3021 AliAODConversionPhoton *gamma1=dynamic_cast<AliAODConversionPhoton*>(fGammaCandidates->At(secondGammaIndex));
3022 if (gamma1 == NULL) continue;
344100c4 3023 if(!((AliConversionPhotonCuts*)fCutArray->At(fiCut))->PhotonIsSelected(gamma1,fInputEvent))continue;
8bdca7f1 3024 for(Int_t nRandom=0;nRandom<((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->GetNumberOfBGEvents();nRandom++){
3025
3026 RotateParticle(gamma1);
3027 AliAODConversionMother backgroundCandidate(gamma0,gamma1);
3028 backgroundCandidate.CalculateDistanceOfClossetApproachToPrimVtx(fInputEvent->GetPrimaryVertex());
3029 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))
344100c4 3030 ->MesonIsSelected(&backgroundCandidate,kFALSE,((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift())){
8bdca7f1 3031 fHistoMotherBackInvMassPt[fiCut]->Fill(backgroundCandidate.M(),backgroundCandidate.Pt());
3032 Double_t sparesFill[4] = {backgroundCandidate.M(),backgroundCandidate.Pt(),(Double_t)zbin,(Double_t)mbin};
3033 fSparseMotherBackInvMassPtZM[fiCut]->Fill(sparesFill,weight);
3034 }
3035 }
3036 }
3037 }
344100c4 3038 } else {
8bdca7f1 3039 // Do Event Mixing
3040 for(Int_t nEventsInBG=0;nEventsInBG <fBGHandlerRP[fiCut]->GetNBGEvents(fGammaCandidates,fInputEvent);nEventsInBG++){
3041
3042 AliGammaConversionPhotonVector *previousEventGammas = fBGHandlerRP[fiCut]->GetBGGoodGammas(fGammaCandidates,fInputEvent,nEventsInBG);
3043
3044 if(previousEventGammas){
3045 // test weighted background
3046 Double_t weight=1.0;
3047 // Correct for the number of eventmixing:
3048 // N gammas -> (N-1) + (N-2) +(N-3) ...+ (N-(N-1)) using sum formula sum(i)=N*(N-1)/2 -> N*(N-1)/2
3049 // real combinations (since you cannot combine a photon with its own)
3050 // but BG leads to N_{a}*N_{b} combinations
3051 weight*=0.5*(Double_t(fGammaCandidates->GetEntries()-1))/Double_t(previousEventGammas->size());
3052
3053 for(Int_t iCurrent=0;iCurrent<fGammaCandidates->GetEntries();iCurrent++){
3054 AliAODConversionPhoton *gamma0 = (AliAODConversionPhoton*)(fGammaCandidates->At(iCurrent));
3055 for(UInt_t iPrevious=0;iPrevious<previousEventGammas->size();iPrevious++){
3056
3057 AliAODConversionPhoton *gamma1 = (AliAODConversionPhoton*)(previousEventGammas->at(iPrevious));
3058
3059 AliAODConversionMother backgroundCandidate(gamma0,gamma1);
3060 backgroundCandidate.CalculateDistanceOfClossetApproachToPrimVtx(fInputEvent->GetPrimaryVertex());
3061 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))
344100c4 3062 ->MesonIsSelected(&backgroundCandidate,kFALSE,((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift())){
8bdca7f1 3063 fHistoMotherBackInvMassPt[fiCut]->Fill(backgroundCandidate.M(),backgroundCandidate.Pt());
3064 Double_t sparesFill[4] = {backgroundCandidate.M(),backgroundCandidate.Pt(),(Double_t)zbin,(Double_t)mbin};
3065 fSparseMotherBackInvMassPtZM[fiCut]->Fill(sparesFill,weight);
3066 }
3067 }
3068 }
3069 }
3070 }
3071 }
3072}
3073//________________________________________________________________________
3074void AliAnalysisTaskGammaConvCalo::RotateParticle(AliAODConversionPhoton *gamma){
3075 Int_t fNDegreesPMBackground= ((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->NDegreesRotation();
3076 Double_t nRadiansPM = fNDegreesPMBackground*TMath::Pi()/180;
3077 Double_t rotationValue = fRandom.Rndm()*2*nRadiansPM + TMath::Pi()-nRadiansPM;
3078 gamma->RotateZ(rotationValue);
3079}
3080
3081//________________________________________________________________________
3082void AliAnalysisTaskGammaConvCalo::RotateParticleAccordingToEP(AliAODConversionPhoton *gamma, Double_t previousEventEP, Double_t thisEventEP){
3083
3084 previousEventEP=previousEventEP+TMath::Pi();
3085 thisEventEP=thisEventEP+TMath::Pi();
3086 Double_t rotationValue= thisEventEP-previousEventEP;
3087 gamma->RotateZ(rotationValue);
3088}
3089
3090//________________________________________________________________________
3091void AliAnalysisTaskGammaConvCalo::MoveParticleAccordingToVertex(AliAODConversionPhoton* particle,const AliGammaConversionAODBGHandler::GammaConversionVertex *vertex){
3092 //see header file for documentation
3093
3094 Double_t dx = vertex->fX - fInputEvent->GetPrimaryVertex()->GetX();
3095 Double_t dy = vertex->fY - fInputEvent->GetPrimaryVertex()->GetY();
3096 Double_t dz = vertex->fZ - fInputEvent->GetPrimaryVertex()->GetZ();
3097
3098 Double_t movedPlace[3] = {particle->GetConversionX() - dx,particle->GetConversionY() - dy,particle->GetConversionZ() - dz};
3099 particle->SetConversionPoint(movedPlace);
3100}
3101//________________________________________________________________________
3102void AliAnalysisTaskGammaConvCalo::UpdateEventByEventData(){
3103 //see header file for documentation
3104 if(fGammaCandidates->GetEntries() >0 ){
3105 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->UseTrackMultiplicity()){
3106 fBGHandler[fiCut]->AddEvent(fGammaCandidates,fInputEvent->GetPrimaryVertex()->GetX(),fInputEvent->GetPrimaryVertex()->GetY(),fInputEvent->GetPrimaryVertex()->GetZ(),fV0Reader->GetNumberOfPrimaryTracks(),fEventPlaneAngle);
3107 fBGClusHandler[fiCut]->AddEvent(fClusterCandidates,fInputEvent->GetPrimaryVertex()->GetX(),fInputEvent->GetPrimaryVertex()->GetY(),fInputEvent->GetPrimaryVertex()->GetZ(),fV0Reader->GetNumberOfPrimaryTracks(),fEventPlaneAngle);
3108 } else { // means we use #V0s for multiplicity
3109 fBGHandler[fiCut]->AddEvent(fGammaCandidates,fInputEvent->GetPrimaryVertex()->GetX(),fInputEvent->GetPrimaryVertex()->GetY(),fInputEvent->GetPrimaryVertex()->GetZ(),fGammaCandidates->GetEntries(),fEventPlaneAngle);
3110 fBGClusHandler[fiCut]->AddEvent(fClusterCandidates,fInputEvent->GetPrimaryVertex()->GetX(),fInputEvent->GetPrimaryVertex()->GetY(),fInputEvent->GetPrimaryVertex()->GetZ(),fGammaCandidates->GetEntries(),fEventPlaneAngle);
3111 }
3112 }
3113}
3114
3115
3116//________________________________________________________________________
3117void AliAnalysisTaskGammaConvCalo::FillPhotonCombinatorialBackgroundHist(AliAODConversionPhoton *TruePhotonCandidate, Int_t pdgCode[])
3118{
3119 // Combinatorial Bck = 0 ee, 1 ep,i 2 ek, 3 ep, 4 emu, 5 pipi, 6 pik, 7 pip, 8 pimu, 9 kk, 10 kp, 11 kmu, 12 pp, 13 pmu, 14 mumu, 15 Rest
3120 if(pdgCode[0]==11 && pdgCode[1]==11){if(fIsFromMBHeader)fHistoCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),0);}
3121 else if( (pdgCode[0]==11 && pdgCode[1]==211) || (pdgCode[0]==211 && pdgCode[1]==11) )
3122 {if(fIsFromMBHeader)fHistoCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),1);}
3123 else if( (pdgCode[0]==11 && pdgCode[1]==321) || (pdgCode[0]==321 && pdgCode[1]==11) )
3124 {if(fIsFromMBHeader)fHistoCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),2);}
3125 else if( (pdgCode[0]==11 && pdgCode[1]==2212) || (pdgCode[0]==2212 && pdgCode[1]==11) )
3126 {if(fIsFromMBHeader)fHistoCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),3);}
3127 else if( (pdgCode[0]==11 && pdgCode[1]==13) || (pdgCode[0]==13 && pdgCode[1]==11) )
3128 {if(fIsFromMBHeader)fHistoCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),4);}
3129 else if( pdgCode[0]==211 && pdgCode[1]==211 ){if(fIsFromMBHeader)fHistoCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),5);}
3130 else if( (pdgCode[0]==211 && pdgCode[1]==321) || (pdgCode[0]==321 && pdgCode[1]==211) )
3131 {if(fIsFromMBHeader)fHistoCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),6);}
3132 else if( (pdgCode[0]==211 && pdgCode[1]==2212) || (pdgCode[0]==2212 && pdgCode[1]==211) )
3133 {if(fIsFromMBHeader)fHistoCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),7);}
3134 else if( (pdgCode[0]==211 && pdgCode[1]==13) || (pdgCode[0]==13 && pdgCode[1]==211) )
3135 {if(fIsFromMBHeader)fHistoCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),8);}
3136 else if( pdgCode[0]==321 && pdgCode[1]==321 ){if(fIsFromMBHeader)fHistoCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),9);}
3137 else if( (pdgCode[0]==321 && pdgCode[1]==2212) || (pdgCode[0]==2212 && pdgCode[1]==321) )
3138 {if(fIsFromMBHeader)fHistoCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),10);}
3139 else if( (pdgCode[0]==321 && pdgCode[1]==13) || (pdgCode[0]==13 && pdgCode[1]==321) )
3140 {if(fIsFromMBHeader)fHistoCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),11);}
3141 else if( pdgCode[0]==2212 && pdgCode[1]==2212 ){if(fIsFromMBHeader)fHistoCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),12);}
3142 else if( (pdgCode[0]==2212 && pdgCode[1]==13) || (pdgCode[0]==13 && pdgCode[1]==2212) )
3143 {if(fIsFromMBHeader)fHistoCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),13);}
3144 else if( pdgCode[0]==13 && pdgCode[1]==13 ){if(fIsFromMBHeader)fHistoCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),14);}
3145 else {if(fIsFromMBHeader)fHistoCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),15);}
3146}
3147//________________________________________________________________________
3148void AliAnalysisTaskGammaConvCalo::RelabelAODPhotonCandidates(Bool_t mode){
3149
3150 // Relabeling For AOD Event
3151 // ESDiD -> AODiD
3152 // MCLabel -> AODMCLabel
3153
3154 if(mode){
3155 fMCStackPos = new Int_t[fReaderGammas->GetEntries()];
3156 fMCStackNeg = new Int_t[fReaderGammas->GetEntries()];
3157 fESDArrayPos = new Int_t[fReaderGammas->GetEntries()];
3158 fESDArrayNeg = new Int_t[fReaderGammas->GetEntries()];
3159 }
3160
3161 for(Int_t iGamma = 0;iGamma<fReaderGammas->GetEntries();iGamma++){
3162 AliAODConversionPhoton* PhotonCandidate = (AliAODConversionPhoton*) fReaderGammas->At(iGamma);
3163 if(!PhotonCandidate) continue;
3164 if(!mode){// Back to ESD Labels
3165 PhotonCandidate->SetMCLabelPositive(fMCStackPos[iGamma]);
3166 PhotonCandidate->SetMCLabelNegative(fMCStackNeg[iGamma]);
3167 PhotonCandidate->SetLabelPositive(fESDArrayPos[iGamma]);
3168 PhotonCandidate->SetLabelNegative(fESDArrayNeg[iGamma]);
3169 continue;
3170 }
3171 fMCStackPos[iGamma] = PhotonCandidate->GetMCLabelPositive();
3172 fMCStackNeg[iGamma] = PhotonCandidate->GetMCLabelNegative();
3173 fESDArrayPos[iGamma] = PhotonCandidate->GetTrackLabelPositive();
3174 fESDArrayNeg[iGamma] = PhotonCandidate->GetTrackLabelNegative();
3175
3176 Bool_t AODLabelPos = kFALSE;
3177 Bool_t AODLabelNeg = kFALSE;
3178
3179 for(Int_t i = 0; i<fInputEvent->GetNumberOfTracks();i++){
3180 AliAODTrack *tempDaughter = static_cast<AliAODTrack*>(fInputEvent->GetTrack(i));
3181 if(!AODLabelPos){
3182 if( tempDaughter->GetID() == PhotonCandidate->GetTrackLabelPositive() ){
3183 PhotonCandidate->SetMCLabelPositive(abs(tempDaughter->GetLabel()));
3184 PhotonCandidate->SetLabelPositive(i);
3185 AODLabelPos = kTRUE;
3186 }
3187 }
3188 if(!AODLabelNeg){
3189 if( tempDaughter->GetID() == PhotonCandidate->GetTrackLabelNegative()){
3190 PhotonCandidate->SetMCLabelNegative(abs(tempDaughter->GetLabel()));
3191 PhotonCandidate->SetLabelNegative(i);
3192 AODLabelNeg = kTRUE;
3193 }
3194 }
3195 if(AODLabelNeg && AODLabelPos){
3196 break;
3197 }
3198 }
3199 if(!AODLabelPos || !AODLabelNeg){
3200 cout<<"WARNING!!! AOD TRACKS NOT FOUND FOR"<<endl;
3201 }
3202 }
3203
3204
3205 if(!mode){
3206 delete[] fMCStackPos;
3207 delete[] fMCStackNeg;
3208 delete[] fESDArrayPos;
3209 delete[] fESDArrayNeg;
3210 }
3211}
3212
3213void AliAnalysisTaskGammaConvCalo::SetLogBinningXTH2(TH2* histoRebin){
3214 TAxis *axisafter = histoRebin->GetXaxis();
3215 Int_t bins = axisafter->GetNbins();
3216 Double_t from = axisafter->GetXmin();
3217 Double_t to = axisafter->GetXmax();
3218 Double_t *newbins = new Double_t[bins+1];
3219 newbins[0] = from;
3220 Double_t factor = TMath::Power(to/from, 1./bins);
3221 for(Int_t i=1; i<=bins; ++i) newbins[i] = factor * newbins[i-1];
3222 axisafter->Set(bins, newbins);
3223 delete [] newbins;
3224}
3225
3226//________________________________________________________________________
3227void AliAnalysisTaskGammaConvCalo::Terminate(const Option_t *)
3228{
3229
3230 //fOutputContainer->Print(); // Will crash on GRID
3231}
3232
3233//________________________________________________________________________
3234Int_t AliAnalysisTaskGammaConvCalo::GetSourceClassification(Int_t daughter, Int_t pdgCode){
3235
3236 if (daughter == 111) {
3237 if (abs(pdgCode) == 310) return 1; // k0s
3238 else if (abs(pdgCode) == 3122) return 2; // Lambda
3239 else if (abs(pdgCode) == 130) return 3; // K0L
3240 else if (abs(pdgCode) == 2212) return 4; // proton
3241 else if (abs(pdgCode) == 2112) return 5; // neutron
3242 else if (abs(pdgCode) == 211) return 6; // pion
3243 else if (abs(pdgCode) == 321) return 7; // kaon
3244 else if (abs(pdgCode) == 113 || abs(pdgCode) == 213 ) return 8; // rho 0,+,-
3245 else if (abs(pdgCode) == 3222 || abs(pdgCode) == 3212 || abs(pdgCode) == 3112 ) return 9; // Sigma
3246 else if (abs(pdgCode) == 2224 || abs(pdgCode) == 2214 || abs(pdgCode) == 2114 || abs(pdgCode) == 1114 ) return 10; // Delta
3247 else if (abs(pdgCode) == 313 || abs(pdgCode) == 323 ) return 11; // K*
3248 else return 15;
3249 }
3250 return 15;
3251
3252}