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