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