]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGGA/GammaConv/AliAnalysisTaskGammaConvCalo.cxx
Merge branch 'master' of https://git.cern.ch/reps/AliRoot
[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(),400,-2,2);
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(),400,-2,2);
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         AliAODMCParticle *posDaughter = (AliAODMCParticle*) AODMCTrackArray->At(TruePhotonCandidate->GetMCLabelPositive());
2031         AliAODMCParticle *negDaughter = (AliAODMCParticle*) AODMCTrackArray->At(TruePhotonCandidate->GetMCLabelNegative());
2032         fCharPhotonMCInfo = 0;
2033         
2034         if(posDaughter == NULL || negDaughter == NULL) return; // One particle does not exist
2035         Int_t pdgCode[2] = {abs(posDaughter->GetPdgCode()),abs(negDaughter->GetPdgCode())};
2036         
2037         if(posDaughter->GetMother() != negDaughter->GetMother()){
2038                 FillPhotonCombinatorialBackgroundHist(TruePhotonCandidate, pdgCode);
2039                 fCharPhotonMCInfo = 1;
2040                 return;
2041         }
2042         else if(posDaughter->GetMother() == -1){
2043                 FillPhotonCombinatorialBackgroundHist(TruePhotonCandidate, pdgCode);
2044                 fCharPhotonMCInfo = 1;
2045                 return;
2046         }
2047         
2048         if(pdgCode[0]!=11 || pdgCode[1]!=11){
2049                 fCharPhotonMCInfo = 1;
2050                 return; //One Particle is not a electron
2051         }
2052         
2053         if(posDaughter->GetPdgCode()==negDaughter->GetPdgCode()){
2054                 fCharPhotonMCInfo = 1;
2055                 return; // Same Charge
2056         }
2057         
2058         AliAODMCParticle *Photon = (AliAODMCParticle*) AODMCTrackArray->At(posDaughter->GetMother());   
2059         if(Photon->GetPdgCode() != 22){
2060                 fCharPhotonMCInfo = 1;
2061                 return; // Mother is no Photon
2062         }
2063         
2064         if(((posDaughter->GetMCProcessCode())) != 5 || ((negDaughter->GetMCProcessCode())) != 5){
2065                 fCharPhotonMCInfo = 1;
2066                 return;// check if the daughters come from a conversion
2067         }
2068         // STILL A BUG IN ALIROOT >>8 HAS TPO BE REMOVED AFTER FIX
2069         
2070         
2071         
2072         // True Photon
2073         if(fIsFromMBHeader){
2074                 fHistoTrueConvGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
2075                 if (fDoPhotonQA > 0) fHistoTrueConvGammaEta[fiCut]->Fill(TruePhotonCandidate->Eta());
2076         }
2077         if(Photon->IsPrimary()){
2078                 // Count just primary MC Gammas as true --> For Ratio esdtruegamma / mcconvgamma
2079                 if(fIsFromMBHeader){
2080                         fCharPhotonMCInfo = 6;
2081                         fHistoTruePrimaryConvGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
2082                         fHistoTruePrimaryConvGammaESDPtMCPt[fiCut]->Fill(TruePhotonCandidate->Pt(),Photon->Pt()); // Allways Filled
2083                 }
2084                 // (Not Filled for i6, Extra Signal Gamma (parambox) are secondary)
2085         } else {
2086                 if(fIsFromMBHeader){
2087                         fHistoTrueSecondaryConvGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
2088                         fCharPhotonMCInfo = 2;
2089                         if(((AliAODMCParticle*)AODMCTrackArray->At(Photon->GetMother()))->GetMother() > -1 &&
2090                                 ((AliAODMCParticle*)AODMCTrackArray->At(((AliAODMCParticle*)AODMCTrackArray->At(Photon->GetMother()))->GetMother()))->GetPdgCode() == 3122){
2091                                 fCharPhotonMCInfo = 5;
2092                                 fHistoTrueSecondaryConvGammaFromXFromLambdaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
2093                         }
2094                         if(((AliAODMCParticle*)AODMCTrackArray->At(Photon->GetMother()))->GetMother() > -1 &&
2095                                 ((AliAODMCParticle*)AODMCTrackArray->At(((AliAODMCParticle*)AODMCTrackArray->At(Photon->GetMother()))->GetMother()))->GetPdgCode() == 310){
2096                                 fCharPhotonMCInfo = 4;
2097                                 fHistoTrueSecondaryConvGammaFromXFromK0sPt[fiCut]->Fill(TruePhotonCandidate->Pt());
2098                         }
2099                         if(((AliAODMCParticle*)AODMCTrackArray->At(Photon->GetMother()))->GetMother() > -1 &&
2100                                 ((AliAODMCParticle*)AODMCTrackArray->At(((AliAODMCParticle*)AODMCTrackArray->At(Photon->GetMother()))->GetMother()))->GetPdgCode() == 221){
2101                                 fCharPhotonMCInfo = 3;
2102                         }
2103                 }
2104         }
2105         TruePhotonCandidate->SetIsTrueConvertedPhoton();
2106 }
2107
2108 //________________________________________________________________________
2109 void AliAnalysisTaskGammaConvCalo::ProcessTruePhotonCandidates(AliAODConversionPhoton *TruePhotonCandidate)
2110 {
2111
2112         Double_t magField = fInputEvent->GetMagneticField();
2113         if( magField  < 0.0 ){
2114                 magField =  1.0;
2115         }
2116         else {
2117                 magField =  -1.0;
2118         }
2119
2120         // Process True Photons
2121         TParticle *posDaughter = TruePhotonCandidate->GetPositiveMCDaughter(fMCStack);
2122         TParticle *negDaughter = TruePhotonCandidate->GetNegativeMCDaughter(fMCStack);  
2123         fCharPhotonMCInfo = 0;
2124         
2125         if(posDaughter == NULL || negDaughter == NULL) return; // One particle does not exist
2126         Int_t pdgCode[2] = {abs(posDaughter->GetPdgCode()),abs(negDaughter->GetPdgCode())};
2127         fCharPhotonMCInfo = 1;
2128         if(posDaughter->GetMother(0) != negDaughter->GetMother(0)){
2129                 FillPhotonCombinatorialBackgroundHist(TruePhotonCandidate, pdgCode);
2130                 return;
2131         }
2132         else if(posDaughter->GetMother(0) == -1){
2133                 FillPhotonCombinatorialBackgroundHist(TruePhotonCandidate, pdgCode);
2134                 return;
2135         }
2136         
2137         if(pdgCode[0]!=11 || pdgCode[1]!=11) return; //One Particle is not a electron
2138         
2139         if(posDaughter->GetPdgCode()==negDaughter->GetPdgCode()) return; // Same Charge
2140
2141         TParticle *Photon = TruePhotonCandidate->GetMCParticle(fMCStack);
2142         
2143         if(Photon->GetPdgCode() != 22){
2144                 return; // Mother is no Photon
2145         }
2146         
2147         if(posDaughter->GetUniqueID() != 5 || negDaughter->GetUniqueID() !=5) return;// check if the daughters come from a conversion
2148         
2149         // True Photon
2150         if(fIsFromMBHeader){
2151                 fHistoTrueConvGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
2152                 if (fDoPhotonQA > 0) fHistoTrueConvGammaEta[fiCut]->Fill(TruePhotonCandidate->Eta());
2153         }
2154         if(posDaughter->GetMother(0) <= fMCStack->GetNprimary()){
2155                 // Count just primary MC Gammas as true --> For Ratio esdtruegamma / mcconvgamma
2156                 if(fIsFromMBHeader){
2157                         fCharPhotonMCInfo = 6;
2158                         fHistoTruePrimaryConvGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
2159                         fHistoTruePrimaryConvGammaESDPtMCPt[fiCut]->Fill(TruePhotonCandidate->Pt(),Photon->Pt()); // Allways Filled
2160                 }
2161                 // (Not Filled for i6, Extra Signal Gamma (parambox) are secondary)
2162         } else {
2163                 if(fIsFromMBHeader){
2164                         fCharPhotonMCInfo = 2;
2165                         fHistoTrueSecondaryConvGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
2166                         if(fMCStack->Particle(Photon->GetMother(0))->GetMother(0) > -1 &&
2167                                 fMCStack->Particle(fMCStack->Particle(Photon->GetMother(0))->GetMother(0))->GetPdgCode() == 3122){
2168                                 fHistoTrueSecondaryConvGammaFromXFromLambdaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
2169                                 fCharPhotonMCInfo = 5;
2170                         }
2171                         if(fMCStack->Particle(Photon->GetMother(0))->GetMother(0) > -1 &&
2172                                 fMCStack->Particle(fMCStack->Particle(Photon->GetMother(0))->GetMother(0))->GetPdgCode() == 310){
2173                                 fHistoTrueSecondaryConvGammaFromXFromK0sPt[fiCut]->Fill(TruePhotonCandidate->Pt());
2174                                 fCharPhotonMCInfo = 4;
2175                         }
2176                         if(fMCStack->Particle(Photon->GetMother(0))->GetMother(0) > -1 &&
2177                                 fMCStack->Particle(fMCStack->Particle(Photon->GetMother(0))->GetMother(0))->GetPdgCode() == 221){
2178                                 fCharPhotonMCInfo = 3;
2179                         }
2180                 }
2181         }
2182         TruePhotonCandidate->SetIsTrueConvertedPhoton();
2183         return;
2184 }
2185 //________________________________________________________________________
2186 void AliAnalysisTaskGammaConvCalo::ProcessAODMCParticles()
2187 {
2188         
2189         TClonesArray *AODMCTrackArray = dynamic_cast<TClonesArray*>(fInputEvent->FindListObject(AliAODMCParticle::StdBranchName()));
2190         
2191         // Loop over all primary MC particle
2192         for(Int_t i = 0; i < AODMCTrackArray->GetEntriesFast(); i++) {
2193                 
2194                 AliAODMCParticle* particle = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(i));
2195                 if (!particle) continue;
2196                 if (!particle->IsPrimary()) continue;
2197                 
2198                 Int_t isMCFromMBHeader = -1;
2199                 if(((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetSignalRejection() != 0){
2200                         isMCFromMBHeader = ((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsParticleFromBGEvent(i, fMCStack, fInputEvent);
2201                         if(isMCFromMBHeader == 0 && ((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetSignalRejection() != 3) continue;
2202                 }
2203                 
2204                 if(!((AliConversionPhotonCuts*)fCutArray->At(fiCut))->InPlaneOutOfPlaneCut(particle->Phi(),fEventPlaneAngle,kFALSE)) continue;
2205                 if(((AliConversionPhotonCuts*)fCutArray->At(fiCut))->PhotonIsSelectedAODMC(particle,AODMCTrackArray,kFALSE)){
2206                         fHistoMCAllGammaPt[fiCut]->Fill(particle->Pt()); // All MC Gamma
2207                         if (abs(particle->Eta()) < 0.66 ){
2208                                 if (particle->Phi() > 1.39626 && particle->Phi() < 3.125) fHistoMCAllGammaEMCALAccPt[fiCut]->Fill(particle->Pt());
2209                         }
2210                         if(particle->GetMother() >-1){ // Meson Decay Gamma
2211                                 switch((static_cast<AliAODMCParticle*>(AODMCTrackArray->At(particle->GetMother())))->GetPdgCode()){
2212                                 case 111: // Pi0
2213                                         fHistoMCDecayGammaPi0Pt[fiCut]->Fill(particle->Pt());
2214                                         break;
2215                                 case 113: // Rho0
2216                                         fHistoMCDecayGammaRhoPt[fiCut]->Fill(particle->Pt());
2217                                         break;
2218                                 case 221: // Eta
2219                                         fHistoMCDecayGammaEtaPt[fiCut]->Fill(particle->Pt());
2220                                         break;
2221                                 case 223: // Omega
2222                                         fHistoMCDecayGammaOmegaPt[fiCut]->Fill(particle->Pt());
2223                                         break;
2224                                 case 331: // Eta'
2225                                         fHistoMCDecayGammaEtapPt[fiCut]->Fill(particle->Pt());
2226                                         break;
2227                                 case 333: // Phi
2228                                         fHistoMCDecayGammaPhiPt[fiCut]->Fill(particle->Pt());
2229                                         break;
2230                                 case 3212: // Sigma
2231                                         fHistoMCDecayGammaSigmaPt[fiCut]->Fill(particle->Pt());
2232                                         break;
2233                                 }
2234                         }
2235                 }
2236                 if(((AliConversionPhotonCuts*)fCutArray->At(fiCut))->PhotonIsSelectedAODMC(particle,AODMCTrackArray,kTRUE)){
2237                         Double_t rConv = 0;
2238                         for(Int_t daughterIndex=particle->GetDaughter(0);daughterIndex<=particle->GetDaughter(1);daughterIndex++){
2239                                 AliAODMCParticle *tmpDaughter = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(daughterIndex));
2240                                 if(!tmpDaughter) continue;
2241                                 if(abs(tmpDaughter->GetPdgCode()) == 11){
2242                                         rConv = sqrt( (tmpDaughter->Xv()*tmpDaughter->Xv()) + (tmpDaughter->Yv()*tmpDaughter->Yv()) );
2243                                 }
2244                         }
2245                         fHistoMCConvGammaPt[fiCut]->Fill(particle->Pt());
2246                         if (fDoPhotonQA > 0){
2247                                 fHistoMCConvGammaR[fiCut]->Fill(rConv);
2248                                 fHistoMCConvGammaEta[fiCut]->Fill(particle->Eta());
2249                         }
2250                 }
2251                 // Converted MC Gamma
2252                 if(fDoMesonAnalysis){
2253                         if(particle->GetPdgCode() == 310 && fDoMesonQA > 0){
2254                                 Double_t mesonY = 10.;
2255                                 if(particle->E() - particle->Pz() == 0 || particle->E() + particle->Pz() == 0){
2256                                         mesonY=10.-((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift();
2257                                 } else {
2258                                         mesonY = 0.5*(TMath::Log((particle->E()+particle->Pz()) / (particle->E()-particle->Pz())))-((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift();
2259                                 }
2260                                 Float_t weightedK0s= 1;
2261                                 if(((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsParticleFromBGEvent(i, fMCStack, fInputEvent)){
2262                                         if (particle->Pt()>0.005){
2263                                                 weightedK0s= ((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),i, 0x0, fInputEvent);
2264                                                 //cout << "MC input \t"<<i << "\t" <<  particle->Pt()<<"\t"<<weighted << endl;
2265                                         }
2266                                 }
2267                                 fHistoMCK0sPt[fiCut]->Fill(particle->Pt(),weightedK0s);
2268                                 fHistoMCK0sWOWeightPt[fiCut]->Fill(particle->Pt());
2269                                 fHistoMCK0sPtY[fiCut]->Fill(particle->Pt(),mesonY,weightedK0s);
2270                         }
2271                         if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))
2272                                 ->MesonIsSelectedAODMC(particle,AODMCTrackArray,((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift())){
2273                                 AliAODMCParticle* daughter0 = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(particle->GetDaughter(0)));
2274                                 AliAODMCParticle* daughter1 = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(particle->GetDaughter(1)));
2275                                 Float_t weighted= 1;
2276                                 if(((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsParticleFromBGEvent(i, fMCStack, fInputEvent)){
2277                                         if (particle->Pt()>0.005){
2278                                                 weighted= ((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),i, 0x0, fInputEvent);
2279                                                 //                   if(particle->GetPdgCode() == 221){
2280                                                 //                      cout << "MC input \t"<<i << "\t" <<  particle->Pt()<<"\t"<<weighted << endl;
2281                                                 //                   }
2282                                         }
2283                                 }
2284                                 Double_t mesonY = 10.;
2285                                 if(particle->E() - particle->Pz() == 0 || particle->E() + particle->Pz() == 0){
2286                                         mesonY=10.-((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift();
2287                                 } else{
2288                                         mesonY = 0.5*(TMath::Log((particle->E()+particle->Pz()) / (particle->E()-particle->Pz())))-((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift();
2289                                 }
2290                                 
2291                                 Double_t alpha = -1;
2292                                 if (particle->GetPdgCode() == 111 || particle->GetPdgCode() == 221){
2293                                         alpha = TMath::Abs((daughter0->E() - daughter1->E()))/(daughter0->E() + daughter1->E());
2294                                 }
2295
2296                                 
2297                                 if(particle->GetPdgCode() == 111){
2298                                         fHistoMCPi0Pt[fiCut]->Fill(particle->Pt(),weighted); // All MC Pi0
2299                                         fHistoMCPi0WOWeightPt[fiCut]->Fill(particle->Pt());
2300                                         if (fDoMesonQA > 0){
2301                                                 fHistoMCPi0PtY[fiCut]->Fill(particle->Pt(),mesonY,weighted); // All MC Pi0
2302                                                 fHistoMCPi0PtAlpha[fiCut]->Fill(particle->Pt(),alpha); // All MC Pi0
2303                                         }       
2304                                 } else if(particle->GetPdgCode() == 221){
2305                                         fHistoMCEtaPt[fiCut]->Fill(particle->Pt(),weighted); // All MC Eta
2306                                         fHistoMCEtaWOWeightPt[fiCut]->Fill(particle->Pt());
2307                                         if (fDoMesonQA > 0){
2308                                                 fHistoMCEtaPtY[fiCut]->Fill(particle->Pt(),mesonY,weighted); // All MC Pi0
2309                                                 fHistoMCEtaPtAlpha[fiCut]->Fill(particle->Pt(),alpha); // All MC Pi0
2310                                         }       
2311                                 }
2312                                 
2313                                 // Check the acceptance for both gammas
2314                                 if(((AliConversionPhotonCuts*)fCutArray->At(fiCut))->PhotonIsSelectedAODMC(daughter0,AODMCTrackArray,kFALSE) &&
2315                                 ((AliConversionPhotonCuts*)fCutArray->At(fiCut))->PhotonIsSelectedAODMC(daughter1,AODMCTrackArray,kFALSE)  &&
2316                                 ((AliConversionPhotonCuts*)fCutArray->At(fiCut))->InPlaneOutOfPlaneCut(daughter0->Phi(),fEventPlaneAngle,kFALSE) &&
2317                                 ((AliConversionPhotonCuts*)fCutArray->At(fiCut))->InPlaneOutOfPlaneCut(daughter1->Phi(),fEventPlaneAngle,kFALSE)){
2318                                         
2319                                         if(particle->GetPdgCode() == 111){
2320                                                 fHistoMCPi0InAccPt[fiCut]->Fill(particle->Pt(),weighted); // MC Pi0 with gamma in acc
2321                                         } else if(particle->GetPdgCode() == 221){
2322                                                 fHistoMCEtaInAccPt[fiCut]->Fill(particle->Pt(),weighted); // MC Eta with gamma in acc
2323                                         }
2324                                 }
2325                         }
2326                 }
2327         }
2328         
2329 }
2330 //________________________________________________________________________
2331 void AliAnalysisTaskGammaConvCalo::ProcessMCParticles()
2332 {
2333         // Loop over all primary MC particle
2334         for(Int_t i = 0; i < fMCStack->GetNprimary(); i++) {
2335                 TParticle* particle = (TParticle *)fMCStack->Particle(i);
2336                 if (!particle) continue;
2337                 
2338                 Int_t isMCFromMBHeader = -1;
2339                 if(((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetSignalRejection() != 0){
2340                         isMCFromMBHeader = ((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsParticleFromBGEvent(i, fMCStack, fInputEvent);
2341                         if(isMCFromMBHeader == 0 && ((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetSignalRejection() != 3) continue;
2342                 }
2343                 
2344                 if(!((AliConversionPhotonCuts*)fCutArray->At(fiCut))->InPlaneOutOfPlaneCut(particle->Phi(),fEventPlaneAngle,kFALSE)) continue;
2345                 if(((AliConversionPhotonCuts*)fCutArray->At(fiCut))->PhotonIsSelectedMC(particle,fMCStack,kFALSE)){
2346                         fHistoMCAllGammaPt[fiCut]->Fill(particle->Pt()); // All MC Gamma
2347                         if (abs(particle->Eta()) < 0.66 ){
2348                                 if (particle->Phi() > 1.39626 && particle->Phi() < 3.125) fHistoMCAllGammaEMCALAccPt[fiCut]->Fill(particle->Pt());
2349                         }       
2350                         
2351                         if(particle->GetMother(0) >-1){ // Meson Decay Gamma
2352                                 switch(fMCStack->Particle(particle->GetMother(0))->GetPdgCode()){
2353                                 case 111: // Pi0
2354                                         fHistoMCDecayGammaPi0Pt[fiCut]->Fill(particle->Pt());
2355                                         break;
2356                                 case 113: // Rho0
2357                                         fHistoMCDecayGammaRhoPt[fiCut]->Fill(particle->Pt());
2358                                         break;
2359                                 case 221: // Eta
2360                                         fHistoMCDecayGammaEtaPt[fiCut]->Fill(particle->Pt());
2361                                         break;
2362                                 case 223: // Omega
2363                                         fHistoMCDecayGammaOmegaPt[fiCut]->Fill(particle->Pt());
2364                                         break;
2365                                 case 331: // Eta'
2366                                         fHistoMCDecayGammaEtapPt[fiCut]->Fill(particle->Pt());
2367                                         break;
2368                                 case 333: // Phi
2369                                         fHistoMCDecayGammaPhiPt[fiCut]->Fill(particle->Pt());
2370                                         break;
2371                                 case 3212: // Sigma
2372                                         fHistoMCDecayGammaSigmaPt[fiCut]->Fill(particle->Pt());
2373                                         break;
2374                                 }
2375                         }
2376                 }
2377                 if(((AliConversionPhotonCuts*)fCutArray->At(fiCut))->PhotonIsSelectedMC(particle,fMCStack,kTRUE)){
2378                         fHistoMCConvGammaPt[fiCut]->Fill(particle->Pt());
2379                         if (fDoPhotonQA > 0){
2380                                 fHistoMCConvGammaR[fiCut]->Fill(((TParticle*)fMCStack->Particle(particle->GetFirstDaughter()))->R());
2381                                 fHistoMCConvGammaEta[fiCut]->Fill(particle->Eta());
2382                         }
2383                 } // Converted MC Gamma
2384                 if(fDoMesonAnalysis){
2385                         if(particle->GetPdgCode() == 310 && fDoMesonQA > 0){
2386                                 Double_t mesonY = 10.;
2387                                 if(particle->Energy() - particle->Pz() == 0 || particle->Energy() + particle->Pz() == 0){
2388                                         mesonY=10.-((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift();
2389                                 } else{
2390                                         mesonY = 0.5*(TMath::Log((particle->Energy()+particle->Pz()) / (particle->Energy()-particle->Pz())))-((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift();
2391                                 }
2392                                 Float_t weightedK0s= 1;
2393                                 if(((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsParticleFromBGEvent(i, fMCStack, fInputEvent)){
2394                                         if (particle->Pt()>0.005){
2395                                                 weightedK0s= ((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),i, fMCStack, fInputEvent);
2396                                                 //cout << "MC input \t"<<i << "\t" <<  particle->Pt()<<"\t"<<weighted << endl;
2397                                         }
2398                                 }
2399                                 if (fMCStack->IsPhysicalPrimary(i)){
2400                                         fHistoMCK0sPt[fiCut]->Fill(particle->Pt(),weightedK0s);
2401                                         fHistoMCK0sWOWeightPt[fiCut]->Fill(particle->Pt());
2402                                         fHistoMCK0sPtY[fiCut]->Fill(particle->Pt(),mesonY,weightedK0s);
2403                                 }
2404                         }
2405                         if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))
2406                                 ->MesonIsSelectedMC(particle,fMCStack,((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift())){
2407                                 TParticle* daughter0 = (TParticle*)fMCStack->Particle(particle->GetFirstDaughter());
2408                                 TParticle* daughter1 = (TParticle*)fMCStack->Particle(particle->GetLastDaughter());
2409                                 
2410                                 Float_t weighted= 1;
2411                                 if(((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsParticleFromBGEvent(i, fMCStack, fInputEvent)){
2412                                         if (particle->Pt()>0.005){
2413                                                 weighted= ((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),i, fMCStack, fInputEvent);
2414                                                 //                   if(particle->GetPdgCode() == 221){
2415                                                 //                      cout << "MC input \t"<<i << "\t" <<  particle->Pt()<<"\t"<<weighted << endl;
2416                                                 //                   }
2417                                         }
2418                                 }
2419                                 Double_t mesonY = 10.;
2420                                 if(particle->Energy() - particle->Pz() == 0 || particle->Energy() + particle->Pz() == 0){
2421                                         mesonY=10.-((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift();
2422                                 } else{
2423                                         mesonY = 0.5*(TMath::Log((particle->Energy()+particle->Pz()) / (particle->Energy()-particle->Pz())))-((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift();
2424                                 }
2425
2426                                 Double_t alpha = -1;
2427                                 if (particle->GetPdgCode() == 111 || particle->GetPdgCode() == 221){
2428                                         alpha = TMath::Abs((daughter0->Energy() - daughter1->Energy()))/(daughter0->Energy() + daughter1->Energy());
2429                                 }
2430
2431                                 if(particle->GetPdgCode() == 111){
2432                                         fHistoMCPi0Pt[fiCut]->Fill(particle->Pt(),weighted); // All MC Pi0
2433                                         fHistoMCPi0WOWeightPt[fiCut]->Fill(particle->Pt());
2434                                         if (fDoMesonQA > 0){
2435                                                 fHistoMCPi0PtY[fiCut]->Fill(particle->Pt(),mesonY,weighted); // All MC Pi0
2436                                                 fHistoMCPi0PtAlpha[fiCut]->Fill(particle->Pt(),alpha); // All MC Pi0
2437                                         }       
2438                                 } else if(particle->GetPdgCode() == 221){
2439                                         fHistoMCEtaPt[fiCut]->Fill(particle->Pt(),weighted); // All MC Eta
2440                                         fHistoMCEtaWOWeightPt[fiCut]->Fill(particle->Pt());
2441                                         if (fDoMesonQA > 0){
2442                                                 fHistoMCEtaPtY[fiCut]->Fill(particle->Pt(),mesonY,weighted); // All MC Pi0
2443                                                 fHistoMCEtaPtAlpha[fiCut]->Fill(particle->Pt(),alpha); // All MC Pi0
2444                                         }       
2445                                 }
2446                                 
2447                                 // Check the acceptance for both gammas
2448                                 if(((AliConversionPhotonCuts*)fCutArray->At(fiCut))->PhotonIsSelectedMC(daughter0,fMCStack,kFALSE) &&
2449                                 ((AliConversionPhotonCuts*)fCutArray->At(fiCut))->PhotonIsSelectedMC(daughter1,fMCStack,kFALSE)  &&
2450                                 ((AliConversionPhotonCuts*)fCutArray->At(fiCut))->InPlaneOutOfPlaneCut(daughter0->Phi(),fEventPlaneAngle,kFALSE) &&
2451                                 ((AliConversionPhotonCuts*)fCutArray->At(fiCut))->InPlaneOutOfPlaneCut(daughter1->Phi(),fEventPlaneAngle,kFALSE)){
2452                                         
2453                                         if(particle->GetPdgCode() == 111){
2454                                                 fHistoMCPi0InAccPt[fiCut]->Fill(particle->Pt(),weighted); // MC Pi0 with gamma in acc
2455                                         } else if(particle->GetPdgCode() == 221){
2456                                                 fHistoMCEtaInAccPt[fiCut]->Fill(particle->Pt(),weighted); // MC Eta with gamma in acc
2457                                         }
2458                                 }
2459                         }
2460                 }
2461         }
2462   
2463         if (fDoMesonQA){
2464                 for(Int_t i = fMCStack->GetNprimary(); i < fMCStack->GetNtrack(); i++) {
2465                         TParticle* particle = (TParticle *)fMCStack->Particle(i);
2466                         if (!particle) continue;
2467       
2468                         Int_t isMCFromMBHeader = -1;
2469                         if(((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetSignalRejection() != 0){
2470                                 isMCFromMBHeader = ((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsParticleFromBGEvent(i, fMCStack, fInputEvent);
2471                                 if(isMCFromMBHeader == 0 && ((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetSignalRejection() != 3) continue;
2472                         }
2473       
2474                         if(fDoMesonAnalysis){
2475                                 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->MesonIsSelectedMC(particle,fMCStack,((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift())){
2476                                         Float_t weighted= 1;
2477                                         if(((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsParticleFromBGEvent(i, fMCStack, fInputEvent)){
2478                                                 if (particle->Pt()>0.005){
2479                                                         weighted= ((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),i, fMCStack, fInputEvent);
2480               //                   if(particle->GetPdgCode() == 221){
2481               //                      cout << "MC input \t"<<i << "\t" <<  particle->Pt()<<"\t"<<weighted << endl;
2482               //                   }
2483                                                 }
2484                                         }
2485                                         
2486                                         if(particle->GetPdgCode() == 111){
2487                                                 Int_t pdgCode = ((TParticle*)fMCStack->Particle( particle->GetFirstMother() ))->GetPdgCode();
2488                                                 Int_t source = GetSourceClassification(111,pdgCode);
2489                                                 fHistoMCSecPi0PtvsSource[fiCut]->Fill(particle->Pt(),source,weighted); // All MC Pi0
2490                                                 fHistoMCSecPi0Source[fiCut]->Fill(pdgCode);
2491                                         } else if(particle->GetPdgCode() == 221){
2492                                                 Int_t pdgCode = ((TParticle*)fMCStack->Particle( particle->GetFirstMother() ))->GetPdgCode();
2493                                                 fHistoMCSecEtaPt[fiCut]->Fill(particle->Pt(),weighted); // All MC Pi0
2494                                                 fHistoMCSecEtaSource[fiCut]->Fill(pdgCode);
2495                                         }
2496                                 }
2497                         }
2498                 }
2499         }
2500 }
2501
2502 //________________________________________________________________________
2503 void AliAnalysisTaskGammaConvCalo::CalculatePi0Candidates(){
2504         
2505         // Conversion Gammas
2506         if(fGammaCandidates->GetEntries()>0){
2507
2508                 // vertex
2509                 Double_t vertex[3] = {0};
2510                 InputEvent()->GetPrimaryVertex()->GetXYZ(vertex);
2511
2512                 for(Int_t firstGammaIndex=0;firstGammaIndex<fGammaCandidates->GetEntries();firstGammaIndex++){
2513                         AliAODConversionPhoton *gamma0=dynamic_cast<AliAODConversionPhoton*>(fGammaCandidates->At(firstGammaIndex));
2514                         if (gamma0==NULL) continue;
2515                         
2516                         for(Int_t secondGammaIndex=0;secondGammaIndex<fClusterCandidates->GetEntries();secondGammaIndex++){
2517                                 Bool_t matched = kFALSE;
2518                                 AliAODConversionPhoton *gamma1=dynamic_cast<AliAODConversionPhoton*>(fClusterCandidates->At(secondGammaIndex));
2519                                 if (gamma1==NULL) continue;
2520                                 
2521                                 if (gamma1->GetIsCaloPhoton()){
2522                                         AliVCluster* cluster = fInputEvent->GetCaloCluster(gamma1->GetCaloClusterRef());
2523                                         matched = ((AliCaloPhotonCuts*)fClusterCutArray->At(fiCut))->MatchConvPhotonToCluster(gamma0,cluster, fInputEvent );
2524                                 }       
2525                                 
2526                                 AliAODConversionMother *pi0cand = new AliAODConversionMother(gamma0,gamma1);
2527                                 pi0cand->SetLabels(firstGammaIndex,secondGammaIndex);
2528                                 
2529                                 
2530                                 
2531                                 if((((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->MesonIsSelected(pi0cand,kTRUE,((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift()))){
2532                                         if (matched){
2533                                                 fHistoMotherMatchedInvMassPt[fiCut]->Fill(pi0cand->M(),pi0cand->Pt());
2534                                         } else {
2535                                                 fHistoMotherInvMassPt[fiCut]->Fill(pi0cand->M(),pi0cand->Pt());
2536                                         }       
2537                                         // fill new histograms
2538                                         if (!matched){
2539                                                 fHistoPhotonPairPtconv[fiCut]->Fill(pi0cand->M(),gamma0->Pt());
2540                                                 if(pi0cand->GetAlpha()<0.1)
2541                                                         fHistoMotherInvMassEalpha[fiCut]->Fill(pi0cand->M(),pi0cand->E());
2542                                                 
2543                                                 if (fDoMesonQA > 0){
2544                                                         if ( pi0cand->M() > 0.05 && pi0cand->M() < 0.17){
2545                                                                 fHistoMotherPi0PtY[fiCut]->Fill(pi0cand->Pt(),pi0cand->Rapidity()-((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift());
2546                                                                 fHistoMotherPi0PtAlpha[fiCut]->Fill(pi0cand->Pt(),pi0cand->GetAlpha());
2547                                 fHistoMotherPi0PtOpenAngle[fiCut]->Fill(pi0cand->Pt(),pi0cand->GetOpeningAngle());
2548                                 fHistoMotherPi0ConvPhotonEtaPhi[fiCut]->Fill(gamma0->GetPhotonPhi(), gamma0->GetPhotonEta());
2549                                                         }
2550                                                         if ( pi0cand->M() > 0.45 && pi0cand->M() < 0.65){
2551                                                                 fHistoMotherEtaPtY[fiCut]->Fill(pi0cand->Pt(),pi0cand->Rapidity()-((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift());
2552                                                                 fHistoMotherEtaPtAlpha[fiCut]->Fill(pi0cand->Pt(),pi0cand->GetAlpha());
2553                                                                 fHistoMotherEtaPtOpenAngle[fiCut]->Fill(pi0cand->Pt(),pi0cand->GetOpeningAngle());
2554                                 fHistoMotherEtaConvPhotonEtaPhi[fiCut]->Fill(gamma0->GetPhotonPhi(), gamma0->GetPhotonEta());
2555                                                         }
2556                                                 }
2557                                                 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->DoBGCalculation()){
2558                                                         Int_t zbin = 0;
2559                                                         Int_t mbin = 0;
2560                                                         
2561                                                         if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->BackgroundHandlerType() == 0){
2562                                                                 zbin = fBGHandler[fiCut]->GetZBinIndex(fInputEvent->GetPrimaryVertex()->GetZ());
2563                                                                 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->UseTrackMultiplicity()){
2564                                                                         mbin = fBGHandler[fiCut]->GetMultiplicityBinIndex(fV0Reader->GetNumberOfPrimaryTracks());
2565                                                                 } else {
2566                                                                         mbin = fBGHandler[fiCut]->GetMultiplicityBinIndex(fGammaCandidates->GetEntries());
2567                                                                 }
2568                                                         } else{
2569                                                                 zbin = fBGHandlerRP[fiCut]->GetZBinIndex(fInputEvent->GetPrimaryVertex()->GetZ());
2570                                                                 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->UseTrackMultiplicity()){
2571                                                                         mbin = fBGHandlerRP[fiCut]->GetMultiplicityBinIndex(fV0Reader->GetNumberOfPrimaryTracks());
2572                                                                 } else {
2573                                                                         mbin = fBGHandlerRP[fiCut]->GetMultiplicityBinIndex(fGammaCandidates->GetEntries());
2574                                                                 }
2575                                                         }
2576                                                         Double_t sparesFill[4] = {pi0cand->M(),pi0cand->Pt(),(Double_t)zbin,(Double_t)mbin};
2577                                                         fSparseMotherInvMassPtZM[fiCut]->Fill(sparesFill,1);
2578                                                 }
2579                                         }
2580                                         
2581                                         if(fIsMC){
2582                                                 if(fInputEvent->IsA()==AliESDEvent::Class())
2583                                                         ProcessTrueMesonCandidates(pi0cand,gamma0,gamma1, matched);
2584                                                 if(fInputEvent->IsA()==AliAODEvent::Class())
2585                                                         ProcessTrueMesonCandidatesAOD(pi0cand,gamma0,gamma1, matched);
2586                                         }
2587                                         if (!matched){
2588                                                 if (fDoMesonQA == 1){
2589                                                         fHistoMotherInvMassECalib[fiCut]->Fill(pi0cand->M(),gamma1->E());
2590                                                         if(pi0cand->GetAlpha()<0.1)
2591                                                         fHistoMotherInvMassECalibalpha[fiCut]->Fill(pi0cand->M(),gamma1->E());            
2592                                                 }
2593                                         }
2594                                 }
2595                                 delete pi0cand;
2596                                 pi0cand=0x0;
2597                         }
2598                 }
2599         }
2600 }
2601 //______________________________________________________________________
2602 void AliAnalysisTaskGammaConvCalo::ProcessTrueMesonCandidates(AliAODConversionMother *Pi0Candidate, AliAODConversionPhoton *TrueGammaCandidate0, AliAODConversionPhoton *TrueGammaCandidate1, Bool_t matched)
2603 {
2604         // Process True Mesons
2605         if(TrueGammaCandidate0->GetV0Index()<fInputEvent->GetNumberOfV0s()){
2606                 Bool_t isTruePi0 = kFALSE;
2607                 Bool_t isTrueEta = kFALSE;
2608                 Int_t gamma0MCLabel = -1;
2609                 Int_t gamma0MotherLabel = -1;
2610                 if (TrueGammaCandidate0->IsTrueConvertedPhoton()){
2611                         gamma0MCLabel = TrueGammaCandidate0->GetMCParticleLabel(fMCStack);
2612                         TParticle * gammaMC0 = (TParticle*)fMCStack->Particle(gamma0MCLabel);
2613                         gamma0MotherLabel=gammaMC0->GetFirstMother();
2614         
2615                 }
2616                 if (!TrueGammaCandidate1->GetIsCaloPhoton()) AliFatal("CaloPhotonFlag has not been set. Aborting");
2617                 
2618                 Int_t gamma1MCLabel = TrueGammaCandidate1->GetCaloPhotonMCLabel(0);     // get most probable MC label
2619                 Int_t gamma1MotherLabel = -1;
2620                 // check if 
2621
2622                 if(gamma1MCLabel != -1){ // Gamma is Combinatorial; MC Particles don't belong to the same Mother
2623                         // Daughters Gamma 1
2624                         TParticle * gammaMC1 = (TParticle*)fMCStack->Particle(gamma1MCLabel);
2625                         if (TrueGammaCandidate1->IsLargestComponentPhoton() || TrueGammaCandidate1->IsLargestComponentElectron()){              // largest component is electro magnetic
2626                                 // get mother of interest (pi0 or eta)
2627                                 if (TrueGammaCandidate1->IsLargestComponentPhoton()){                                                                                                           // for photons its the direct mother 
2628                                         gamma1MotherLabel=gammaMC1->GetMother(0);
2629                                 } else if (TrueGammaCandidate1->IsLargestComponentElectron()){                                                                                          // for electrons its either the direct mother or for conversions the grandmother
2630                                         if (TrueGammaCandidate1->IsConversion()) gamma1MotherLabel=fMCStack->Particle(gammaMC1->GetMother(0))->GetMother(0);
2631                                         else gamma1MotherLabel=gammaMC1->GetMother(0); 
2632                                 }
2633                         } else {
2634                                 if (fDoMesonQA > 0) fHistoTrueMotherCaloEMNonLeadingInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2635                         }       
2636                 }
2637                                 
2638                 if(gamma0MotherLabel>=0 && gamma0MotherLabel==gamma1MotherLabel){
2639                         if(((TParticle*)fMCStack->Particle(gamma1MotherLabel))->GetPdgCode() == 111){
2640                                 isTruePi0=kTRUE;
2641                         }
2642                         if(((TParticle*)fMCStack->Particle(gamma1MotherLabel))->GetPdgCode() == 221){
2643                                 isTrueEta=kTRUE;
2644                         }
2645                 }
2646                 
2647                 if(isTruePi0 || isTrueEta){// True Pion or Eta
2648                         if (!matched){
2649                                 if (isTruePi0)fHistoTruePi0InvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2650                                 if (isTrueEta)fHistoTrueEtaInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2651                         }       
2652                         if (fDoMesonQA > 0){
2653                                 if (TrueGammaCandidate1->IsLargestComponentPhoton() && !matched){
2654                                         if(isTruePi0) fHistoTruePi0CaloPhotonInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2655                                         if(isTrueEta) fHistoTrueEtaCaloPhotonInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2656                                 }       
2657                                 if (TrueGammaCandidate1->IsLargestComponentElectron() && !matched){
2658                                         if(isTruePi0) fHistoTruePi0CaloElectronInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2659                                         if(isTrueEta) fHistoTrueEtaCaloElectronInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2660                                 }       
2661                                 if (TrueGammaCandidate1->IsLargestComponentElectron() && TrueGammaCandidate1->IsConversion() ){
2662                                         if (isTruePi0 && !matched)fHistoTruePi0CaloConvertedPhotonInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2663                                         if (isTrueEta && !matched)fHistoTrueEtaCaloConvertedPhotonInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2664                                         if ((TrueGammaCandidate0->GetMCLabelPositive() == gamma1MCLabel || TrueGammaCandidate0->GetMCLabelNegative() == gamma1MCLabel) && isTruePi0){
2665                                                 fHistoTruePi0CaloConvertedPhotonMatchedInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2666                                         }       
2667                                         if ((TrueGammaCandidate0->GetMCLabelPositive() == gamma1MCLabel || TrueGammaCandidate0->GetMCLabelNegative() == gamma1MCLabel) && isTrueEta){
2668                                                 fHistoTrueEtaCaloConvertedPhotonMatchedInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2669                                         }       
2670                                 }       
2671                                 if ((TrueGammaCandidate1->IsMerged() || TrueGammaCandidate1->IsMergedPartConv() || TrueGammaCandidate1->IsDalitzMerged()) && !matched ){
2672                                         if (isTruePi0 )fHistoTruePi0CaloMergedClusterInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2673                                         if (isTrueEta )fHistoTrueEtaCaloMergedClusterInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2674                                 }       
2675                                 if (TrueGammaCandidate1->IsMergedPartConv() && !matched){
2676                                         if (isTruePi0) fHistoTruePi0CaloMergedClusterPartConvInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2677                                         if (isTrueEta) fHistoTrueEtaCaloMergedClusterPartConvInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2678                                 }       
2679                         }
2680                         if (!matched){
2681                                 if (fDoMesonQA > 0){
2682                                         if (isTruePi0){
2683                                                 if ( Pi0Candidate->M() > 0.05 && Pi0Candidate->M() < 0.17){
2684                                                         fHistoTruePi0PtY[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->Rapidity()-((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift());
2685                                                         fHistoTruePi0PtAlpha[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->GetAlpha());
2686                                                         fHistoTruePi0PtOpenAngle[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->GetOpeningAngle());
2687                                                         fHistoTrueMotherPi0ConvPhotonEtaPhi[fiCut]->Fill(TrueGammaCandidate0->GetPhotonPhi(), TrueGammaCandidate0->GetPhotonEta());
2688                                                 }
2689                                         } else if (isTrueEta){
2690                                                 if ( Pi0Candidate->M() > 0.45 && Pi0Candidate->M() < 0.65){
2691                                                         fHistoTrueEtaPtY[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->Rapidity()-((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift());
2692                                                         fHistoTrueEtaPtAlpha[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->GetAlpha());
2693                                                         fHistoTrueEtaPtOpenAngle[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->GetOpeningAngle());
2694                                                         fHistoTrueMotherEtaConvPhotonEtaPhi[fiCut]->Fill(TrueGammaCandidate0->GetPhotonPhi(), TrueGammaCandidate0->GetPhotonEta());
2695                                                 }
2696                                         }
2697                                 }
2698                                 
2699                                 if(gamma0MotherLabel >= fMCStack->GetNprimary()){ // Secondary Meson
2700                                         Int_t secMotherLabel = ((TParticle*)fMCStack->Particle(gamma0MotherLabel))->GetMother(0);
2701                                         Float_t weightedSec= 1;
2702                                         if(((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsParticleFromBGEvent(secMotherLabel, fMCStack, fInputEvent) && fMCStack->Particle(secMotherLabel)->GetPdgCode()==310){
2703                                                 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
2704                                                 //cout << "MC input \t"<<i << "\t" <<  particle->Pt()<<"\t"<<weighted << endl;
2705                                         }
2706                                         if (isTruePi0){
2707                                                 fHistoTrueSecondaryPi0InvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weightedSec);
2708                                                 fHistoTrueSecondaryPi0PhotonPairPtconv[fiCut]->Fill(Pi0Candidate->M(),TrueGammaCandidate0->Pt(),weightedSec);
2709                                                 if(CheckIfContainedInString(fStringRecTruePi0s[fiCut],gamma0MotherLabel)){
2710                                                         fHistoTrueSecondaryPi0DCPtconv[fiCut]->Fill(TrueGammaCandidate0->Pt(),weightedSec);
2711                                                 }       
2712                                         }       
2713                                         if (secMotherLabel >-1){
2714                                                 if(fMCStack->Particle(secMotherLabel)->GetPdgCode()==310 && isTruePi0 ){
2715                                                         fHistoTrueSecondaryPi0FromK0sInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weightedSec);
2716                                                         if (fDoMesonQA > 0)fHistoTrueK0sWithPi0DaughterMCPt[fiCut]->Fill(fMCStack->Particle(secMotherLabel)->Pt());
2717                                                 }
2718                                                 if(fMCStack->Particle(secMotherLabel)->GetPdgCode()==221 && isTruePi0){
2719                                                         fHistoTrueSecondaryPi0FromEtaInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weightedSec);
2720                                                         if (fDoMesonQA > 0)fHistoTrueEtaWithPi0DaughterMCPt[fiCut]->Fill(fMCStack->Particle(secMotherLabel)->Pt());
2721                                                 }
2722                                                 if(fMCStack->Particle(secMotherLabel)->GetPdgCode()==3122 && isTruePi0){
2723                                                         fHistoTrueSecondaryPi0FromLambdaInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weightedSec);
2724                                                         if (fDoMesonQA > 0)fHistoTrueLambdaWithPi0DaughterMCPt[fiCut]->Fill(fMCStack->Particle(secMotherLabel)->Pt());
2725                                                 }
2726                                         }
2727                                 } else { // Only primary pi0 for efficiency calculation
2728                                         Float_t weighted= 1;
2729                                         if(((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsParticleFromBGEvent(gamma1MotherLabel, fMCStack, fInputEvent)){
2730                                                 if (((TParticle*)fMCStack->Particle(gamma1MotherLabel))->Pt()>0.005){
2731                                                         weighted= ((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),gamma1MotherLabel, fMCStack, fInputEvent);
2732                                                         //                      cout << "rec \t " <<gamma1MotherLabel << "\t" <<  weighted << endl;
2733                                                 }
2734                                         }
2735                                         if (isTruePi0){
2736                                                 fHistoTruePrimaryPi0InvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weighted);
2737                                                 fHistoTruePrimaryPi0PhotonPairPtconv[fiCut]->Fill(Pi0Candidate->M(),TrueGammaCandidate0->Pt(),weighted);
2738                                                 fHistoTruePrimaryPi0W0WeightingInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2739                                                 fProfileTruePrimaryPi0WeightsInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weighted);
2740                                                 if(CheckIfContainedInString(fStringRecTruePi0s[fiCut],gamma0MotherLabel)){
2741                                                         fHistoTruePrimaryPi0DCPtconv[fiCut]->Fill(TrueGammaCandidate0->Pt(),weighted);
2742                                                 }       
2743
2744                                         } else if (isTrueEta) {
2745                                                 fHistoTruePrimaryEtaInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weighted);
2746                                                 fHistoTruePrimaryEtaPhotonPairPtconv[fiCut]->Fill(Pi0Candidate->M(),TrueGammaCandidate0->Pt(),weighted);
2747                                                 fHistoTruePrimaryEtaW0WeightingInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2748                                                 fProfileTruePrimaryEtaWeightsInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weighted);
2749                                                 if(CheckIfContainedInString(fStringRecTrueEtas[fiCut],gamma0MotherLabel)){
2750                                                         fHistoTruePrimaryEtaDCPtconv[fiCut]->Fill(TrueGammaCandidate0->Pt(),weighted);
2751                                                 }                                                       
2752                                         }       
2753                                                 
2754                                         if (fDoMesonQA > 0){
2755                                                 if(isTruePi0){ // Only primary pi0 for resolution
2756                                                         fHistoTruePrimaryPi0MCPtResolPt[fiCut]->Fill(((TParticle*)fMCStack->Particle(gamma1MotherLabel))->Pt(),(Pi0Candidate->Pt()-((TParticle*)fMCStack->Particle(gamma1MotherLabel))->Pt())/((TParticle*)fMCStack->Particle(gamma1MotherLabel))->Pt(),weighted);
2757                                                 }
2758                                                 if (isTrueEta){ // Only primary eta for resolution
2759                                                         fHistoTruePrimaryEtaMCPtResolPt[fiCut]->Fill(((TParticle*)fMCStack->Particle(gamma1MotherLabel))->Pt(),(Pi0Candidate->Pt()-((TParticle*)fMCStack->Particle(gamma1MotherLabel))->Pt())/((TParticle*)fMCStack->Particle(gamma1MotherLabel))->Pt(),weighted);
2760                                                 }
2761                                         }
2762                                 }
2763                         }       
2764                 } else if(!isTruePi0 && !isTrueEta){ // Background
2765                         if (fDoMesonQA > 0){
2766                                 if(gamma0MotherLabel>-1 && gamma1MotherLabel>-1){ // Both Tracks are Photons and have a mother but not Pi0 or Eta
2767                                         fHistoTrueBckGGInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2768                                 } else { // No photon or without mother
2769                                         fHistoTrueBckContInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2770                                 }
2771                         }
2772                 }
2773                 if (isTrueEta && !matched){
2774                         fStringRecTrueEtas[fiCut].Append(Form("%i,",gamma0MotherLabel));
2775                 }
2776                 if (isTruePi0 && !matched){
2777                         fStringRecTruePi0s[fiCut].Append(Form("%i,",gamma0MotherLabel));
2778                 }       
2779
2780         }
2781 }
2782 //______________________________________________________________________
2783 void AliAnalysisTaskGammaConvCalo::ProcessTrueMesonCandidatesAOD(AliAODConversionMother *Pi0Candidate, AliAODConversionPhoton *TrueGammaCandidate0, AliAODConversionPhoton *TrueGammaCandidate1, Bool_t matched)
2784 {
2785         
2786         // Process True Mesons
2787         TClonesArray *AODMCTrackArray = dynamic_cast<TClonesArray*>(fInputEvent->FindListObject(AliAODMCParticle::StdBranchName()));
2788         Bool_t isTruePi0 = kFALSE;
2789         Bool_t isTrueEta = kFALSE;
2790         
2791         AliAODMCParticle *positiveMC = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(TrueGammaCandidate0->GetMCLabelPositive()));
2792         AliAODMCParticle *negativeMC = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(TrueGammaCandidate0->GetMCLabelNegative()));
2793         
2794         Int_t gamma0MCLabel = -1;
2795         Int_t gamma0MotherLabel = -1;
2796         if(!positiveMC||!negativeMC)
2797                 return;
2798         
2799         if (TrueGammaCandidate0->IsTrueConvertedPhoton()){
2800                 gamma0MCLabel = positiveMC->GetMother();
2801                 AliAODMCParticle * gammaMC0 = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma0MCLabel));
2802                 gamma0MotherLabel=gammaMC0->GetMother();
2803         }       
2804
2805         if (!TrueGammaCandidate1->GetIsCaloPhoton()) AliFatal("CaloPhotonFlag has not been set. Aborting");
2806         Int_t gamma1MCLabel = TrueGammaCandidate1->GetCaloPhotonMCLabel(0);     // get most probable MC label
2807         Int_t gamma1MotherLabel = -1;
2808                 // check if 
2809
2810         if(gamma1MCLabel != -1){ // Gamma is Combinatorial; MC Particles don't belong to the same Mother
2811                 // Daughters Gamma 1
2812                 AliAODMCParticle * gammaMC1 = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MCLabel));
2813                 if (TrueGammaCandidate1->IsLargestComponentPhoton() || TrueGammaCandidate1->IsLargestComponentElectron()){              // largest component is electro magnetic
2814                         // get mother of interest (pi0 or eta)
2815                         if (TrueGammaCandidate1->IsLargestComponentPhoton()){                                                                                                           // for photons its the direct mother 
2816                                 gamma1MotherLabel=gammaMC1->GetMother();
2817                         } else if (TrueGammaCandidate1->IsLargestComponentElectron()){                                                                                          // for electrons its either the direct mother or for conversions the grandmother
2818                                 if (TrueGammaCandidate1->IsConversion()){
2819                                         AliAODMCParticle * gammaGrandMotherMC1 =  static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gammaMC1->GetMother()));
2820                                         gamma1MotherLabel=gammaGrandMotherMC1->GetMother();
2821                                 } else gamma1MotherLabel=gammaMC1->GetMother(); 
2822                         }
2823                 } else {
2824                         if (fDoMesonQA > 0) fHistoTrueMotherCaloEMNonLeadingInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2825                 }       
2826         }
2827                         
2828         if(gamma0MotherLabel>=0 && gamma0MotherLabel==gamma1MotherLabel){
2829                 if(((AliAODMCParticle*)AODMCTrackArray->At(gamma1MotherLabel))->GetPdgCode() == 111){
2830                         isTruePi0=kTRUE;
2831                 }
2832                 if(((AliAODMCParticle*)AODMCTrackArray->At(gamma1MotherLabel))->GetPdgCode() == 221){
2833                         isTrueEta=kTRUE;
2834                 }
2835         }
2836         
2837         if(isTruePi0 || isTrueEta){// True Pion or Eta
2838                 if (!matched){
2839                         if (isTruePi0)fHistoTruePi0InvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2840                         if (isTrueEta)fHistoTrueEtaInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2841                 }       
2842                 if (fDoMesonQA > 0){
2843                         if (TrueGammaCandidate1->IsLargestComponentPhoton() && !matched){
2844                                 if (isTruePi0) fHistoTruePi0CaloPhotonInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2845                                 if (isTrueEta) fHistoTrueEtaCaloPhotonInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2846                         }       
2847                         if (TrueGammaCandidate1->IsLargestComponentElectron() && !matched) {
2848                                 if (isTruePi0) fHistoTruePi0CaloElectronInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2849                                 if (isTrueEta) fHistoTrueEtaCaloElectronInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2850                         }       
2851                         if (TrueGammaCandidate1->IsLargestComponentElectron() && TrueGammaCandidate1->IsConversion()){
2852                                 if (isTruePi0 && !matched)fHistoTruePi0CaloConvertedPhotonInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2853                                 if (isTrueEta && !matched)fHistoTrueEtaCaloConvertedPhotonInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2854                                 if ((TrueGammaCandidate0->GetMCLabelPositive() == gamma1MCLabel || TrueGammaCandidate0->GetMCLabelNegative() == gamma1MCLabel) && isTruePi0)
2855                                         fHistoTruePi0CaloConvertedPhotonMatchedInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2856                                 if ((TrueGammaCandidate0->GetMCLabelPositive() == gamma1MCLabel || TrueGammaCandidate0->GetMCLabelNegative() == gamma1MCLabel) && isTrueEta)
2857                                         fHistoTrueEtaCaloConvertedPhotonMatchedInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2858                         }       
2859                         if ((TrueGammaCandidate1->IsMerged() || TrueGammaCandidate1->IsMergedPartConv() || TrueGammaCandidate1->IsDalitzMerged()) && !matched ){
2860                                 if (isTruePi0) fHistoTruePi0CaloMergedClusterInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2861                                 if (isTrueEta) fHistoTrueEtaCaloMergedClusterInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2862                         }       
2863                         if (TrueGammaCandidate1->IsMergedPartConv() && !matched) {
2864                                 if (isTruePi0) fHistoTruePi0CaloMergedClusterPartConvInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2865                                 if (isTrueEta) fHistoTrueEtaCaloMergedClusterPartConvInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2866                         }       
2867                 }
2868
2869                 if ( !matched){
2870                         if (fDoMesonQA > 0){
2871                                 if (isTruePi0){
2872                                         if ( Pi0Candidate->M() > 0.05 && Pi0Candidate->M() < 0.17){
2873                                                 fHistoTruePi0PtY[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->Rapidity()-((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift());
2874                                                 fHistoTruePi0PtAlpha[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->GetAlpha());
2875                                                 fHistoTruePi0PtOpenAngle[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->GetOpeningAngle());
2876                                                 fHistoTrueMotherPi0ConvPhotonEtaPhi[fiCut]->Fill(TrueGammaCandidate0->GetPhotonPhi(), TrueGammaCandidate0->GetPhotonEta());
2877                                         }
2878                                 } else if (isTrueEta){
2879                                         if ( Pi0Candidate->M() > 0.45 && Pi0Candidate->M() < 0.65){
2880                                                 fHistoTrueEtaPtY[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->Rapidity()-((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift());
2881                                                 fHistoTrueEtaPtAlpha[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->GetAlpha());
2882                                                 fHistoTrueEtaPtOpenAngle[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->GetOpeningAngle());
2883                                                 fHistoTrueMotherEtaConvPhotonEtaPhi[fiCut]->Fill(TrueGammaCandidate0->GetPhotonPhi(), TrueGammaCandidate0->GetPhotonEta());
2884                                         }
2885                                 }
2886                         }
2887                         if(!(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma0MotherLabel))->IsPrimary())){ // Secondary Meson
2888                                 Int_t secMotherLabel = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->GetMother();
2889                                 Float_t weightedSec= 1;
2890                                 if(((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsParticleFromBGEvent(secMotherLabel, 0x0, fInputEvent) && static_cast<AliAODMCParticle*>(AODMCTrackArray->At(secMotherLabel))->GetPdgCode()==310){
2891                                         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
2892                                         //cout << "MC input \t"<<i << "\t" <<  particle->Pt()<<"\t"<<weighted << endl;
2893                                 }
2894                                 if (isTruePi0){
2895                                         fHistoTrueSecondaryPi0InvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weightedSec);
2896                                         fHistoTrueSecondaryPi0PhotonPairPtconv[fiCut]->Fill(Pi0Candidate->M(),TrueGammaCandidate0->Pt(),weightedSec);
2897                                         if(CheckIfContainedInString(fStringRecTruePi0s[fiCut],gamma0MotherLabel)){
2898                                                 fHistoTrueSecondaryPi0DCPtconv[fiCut]->Fill(TrueGammaCandidate0->Pt(),weightedSec);
2899                                         }                                               
2900                                 }       
2901                                 if (secMotherLabel >-1){
2902                                         if(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(secMotherLabel))->GetPdgCode()==310 && isTruePi0){
2903                                                 fHistoTrueSecondaryPi0FromK0sInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weightedSec);
2904                                                 if (fDoMesonQA > 0)fHistoTrueK0sWithPi0DaughterMCPt[fiCut]->Fill(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(secMotherLabel))->Pt());
2905                                         }
2906                                         if(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(secMotherLabel))->GetPdgCode()==221 && isTruePi0){
2907                                                 fHistoTrueSecondaryPi0FromEtaInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weightedSec);
2908                                                 if (fDoMesonQA > 0)fHistoTrueEtaWithPi0DaughterMCPt[fiCut]->Fill(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(secMotherLabel))->Pt());
2909                                         }
2910                                         if(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(secMotherLabel))->GetPdgCode()==3122 && isTruePi0){
2911                                                 fHistoTrueSecondaryPi0FromLambdaInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weightedSec);
2912                                                 if (fDoMesonQA > 0)fHistoTrueLambdaWithPi0DaughterMCPt[fiCut]->Fill(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(secMotherLabel))->Pt());
2913                                         }
2914                                 }
2915                         } else{ // Only primary pi0 for efficiency calculation
2916                                 Float_t weighted= 1;
2917                                 if(((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsParticleFromBGEvent(gamma1MotherLabel, 0x0, fInputEvent)){
2918                                         if (static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->Pt()>0.005){
2919                                         weighted= ((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),gamma1MotherLabel, 0x0, fInputEvent);
2920                                         //                      cout << "rec \t " <<gamma1MotherLabel << "\t" <<  weighted << endl;
2921                                         }
2922                                 }
2923                                 if (isTruePi0){
2924                                         fHistoTruePrimaryPi0InvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weighted);
2925                                         fHistoTruePrimaryPi0W0WeightingInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2926                                         fHistoTruePrimaryPi0PhotonPairPtconv[fiCut]->Fill(Pi0Candidate->M(),TrueGammaCandidate0->Pt(),weighted);
2927                                         fProfileTruePrimaryPi0WeightsInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weighted);
2928                                         if(CheckIfContainedInString(fStringRecTruePi0s[fiCut],gamma0MotherLabel)){
2929                                                 fHistoTruePrimaryPi0DCPtconv[fiCut]->Fill(TrueGammaCandidate0->Pt(),weighted);
2930                                         }                                               
2931                                 } else if (isTrueEta){
2932                                         fHistoTruePrimaryEtaInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weighted);
2933                                         fHistoTruePrimaryEtaW0WeightingInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2934                                         fHistoTruePrimaryEtaPhotonPairPtconv[fiCut]->Fill(Pi0Candidate->M(),TrueGammaCandidate0->Pt(),weighted);
2935                                         fProfileTruePrimaryEtaWeightsInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weighted);                                     
2936                                         if(CheckIfContainedInString(fStringRecTrueEtas[fiCut],gamma0MotherLabel)){
2937                                                 fHistoTruePrimaryEtaDCPtconv[fiCut]->Fill(TrueGammaCandidate0->Pt(),weighted);
2938                                         }                                                                                               
2939                                 }       
2940                                 if (fDoMesonQA > 0){
2941                                         if(isTruePi0){ // Only primary pi0 for resolution
2942                                                 fHistoTruePrimaryPi0MCPtResolPt[fiCut]->Fill(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->Pt(),
2943                                                                                                                                 (Pi0Candidate->Pt()-static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->Pt())/static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->Pt(),weighted);
2944                                         
2945                                         }
2946                                         if (isTrueEta){ // Only primary eta for resolution
2947                                                 fHistoTruePrimaryEtaMCPtResolPt[fiCut]->Fill(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->Pt(),
2948                                                                                                                                 (Pi0Candidate->Pt()-static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->Pt())/static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->Pt(),weighted);
2949                                         }
2950                                 }
2951                         }
2952                 }       
2953         } else if(!isTruePi0 && !isTrueEta) { // Background
2954                 if (fDoMesonQA > 0){
2955                         if(gamma0MotherLabel>-1 && gamma1MotherLabel>-1){ // Both Tracks are Photons and have a mother but not Pi0 or Eta
2956                                 fHistoTrueBckGGInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2957                         } else { // No photon or without mother
2958                                 fHistoTrueBckContInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
2959                         }
2960                 }
2961         }
2962         
2963         if (isTrueEta && !matched){
2964                 fStringRecTrueEtas[fiCut].Append(Form("%i,",gamma0MotherLabel));
2965         }
2966         if (isTruePi0 && !matched){
2967                 fStringRecTruePi0s[fiCut].Append(Form("%i,",gamma0MotherLabel));
2968         }       
2969
2970
2971         
2972 }
2973
2974 //________________________________________________________________________
2975 void AliAnalysisTaskGammaConvCalo::CalculateBackground(){
2976         
2977         Int_t zbin= fBGClusHandler[fiCut]->GetZBinIndex(fInputEvent->GetPrimaryVertex()->GetZ());
2978         Int_t mbin = 0;
2979         
2980         if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->UseTrackMultiplicity()){
2981                 mbin = fBGClusHandler[fiCut]->GetMultiplicityBinIndex(fV0Reader->GetNumberOfPrimaryTracks());
2982         } else {
2983                 mbin = fBGClusHandler[fiCut]->GetMultiplicityBinIndex(fGammaCandidates->GetEntries());
2984         }
2985         
2986         AliGammaConversionAODBGHandler::GammaConversionVertex *bgEventVertex = NULL;    
2987         if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->UseTrackMultiplicity()){
2988                 for(Int_t nEventsInBG=0;nEventsInBG<fBGClusHandler[fiCut]->GetNBGEvents();nEventsInBG++){
2989                         AliGammaConversionAODVector *previousEventV0s = fBGClusHandler[fiCut]->GetBGGoodV0s(zbin,mbin,nEventsInBG);
2990                         if(fMoveParticleAccordingToVertex == kTRUE){
2991                                 bgEventVertex = fBGClusHandler[fiCut]->GetBGEventVertex(zbin,mbin,nEventsInBG);
2992                         }
2993                         
2994                         for(Int_t iCurrent=0;iCurrent<fGammaCandidates->GetEntries();iCurrent++){
2995                                 AliAODConversionPhoton currentEventGoodV0 = *(AliAODConversionPhoton*)(fGammaCandidates->At(iCurrent));
2996                                 for(UInt_t iPrevious=0;iPrevious<previousEventV0s->size();iPrevious++){
2997                                         AliAODConversionPhoton previousGoodV0 = (AliAODConversionPhoton)(*(previousEventV0s->at(iPrevious)));
2998                                         if(fMoveParticleAccordingToVertex == kTRUE){
2999                                                 MoveParticleAccordingToVertex(&previousGoodV0,bgEventVertex);
3000                                         }
3001                                         if(((AliConversionPhotonCuts*)fCutArray->At(fiCut))->GetInPlaneOutOfPlaneCut() != 0){
3002                                                 RotateParticleAccordingToEP(&previousGoodV0,bgEventVertex->fEP,fEventPlaneAngle);
3003                                         }
3004                                         
3005                                         AliAODConversionMother *backgroundCandidate = new AliAODConversionMother(&currentEventGoodV0,&previousGoodV0);
3006                                         backgroundCandidate->CalculateDistanceOfClossetApproachToPrimVtx(fInputEvent->GetPrimaryVertex());
3007                                         if((((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))
3008                                                 ->MesonIsSelected(backgroundCandidate,kFALSE,((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift()))){
3009                                                 fHistoMotherBackInvMassPt[fiCut]->Fill(backgroundCandidate->M(),backgroundCandidate->Pt());
3010                                                 fHistoPhotonPairMixedEventPtconv[fiCut]->Fill(backgroundCandidate->M(),currentEventGoodV0.Pt());
3011                                                 Double_t sparesFill[4] = {backgroundCandidate->M(),backgroundCandidate->Pt(),(Double_t)zbin,(Double_t)mbin};
3012                                                 fSparseMotherBackInvMassPtZM[fiCut]->Fill(sparesFill,1);
3013                                         }
3014                                         delete backgroundCandidate;
3015                                         backgroundCandidate = 0x0;
3016                                 }
3017                         }
3018                 }
3019         } else {
3020                 for(Int_t nEventsInBG=0;nEventsInBG <fBGClusHandler[fiCut]->GetNBGEvents();nEventsInBG++){
3021                         AliGammaConversionAODVector *previousEventV0s = fBGClusHandler[fiCut]->GetBGGoodV0s(zbin,mbin,nEventsInBG);
3022                         if(previousEventV0s){
3023                                 if(fMoveParticleAccordingToVertex == kTRUE){
3024                                         bgEventVertex = fBGClusHandler[fiCut]->GetBGEventVertex(zbin,mbin,nEventsInBG);
3025                                 }
3026                                 for(Int_t iCurrent=0;iCurrent<fGammaCandidates->GetEntries();iCurrent++){
3027                                         AliAODConversionPhoton currentEventGoodV0 = *(AliAODConversionPhoton*)(fGammaCandidates->At(iCurrent));
3028                                         for(UInt_t iPrevious=0;iPrevious<previousEventV0s->size();iPrevious++){
3029                                 
3030                                                 AliAODConversionPhoton previousGoodV0 = (AliAODConversionPhoton)(*(previousEventV0s->at(iPrevious)));
3031                                         
3032                                                 if(fMoveParticleAccordingToVertex == kTRUE){
3033                                                         MoveParticleAccordingToVertex(&previousGoodV0,bgEventVertex);
3034                                                 }
3035                                                 if(((AliConversionPhotonCuts*)fCutArray->At(fiCut))->GetInPlaneOutOfPlaneCut() != 0){
3036                                                         RotateParticleAccordingToEP(&previousGoodV0,bgEventVertex->fEP,fEventPlaneAngle);
3037                                                 }
3038                                         
3039                                                 AliAODConversionMother *backgroundCandidate = new AliAODConversionMother(&currentEventGoodV0,&previousGoodV0);
3040                                                 backgroundCandidate->CalculateDistanceOfClossetApproachToPrimVtx(fInputEvent->GetPrimaryVertex());
3041                                                 if((((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->MesonIsSelected(backgroundCandidate,kFALSE,((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift()))){
3042                                                         fHistoMotherBackInvMassPt[fiCut]->Fill(backgroundCandidate->M(),backgroundCandidate->Pt());
3043                                                         fHistoPhotonPairMixedEventPtconv[fiCut]->Fill(backgroundCandidate->M(),currentEventGoodV0.Pt());
3044                                                         Double_t sparesFill[4] = {backgroundCandidate->M(),backgroundCandidate->Pt(),(Double_t)zbin,(Double_t)mbin};
3045                                                         fSparseMotherBackInvMassPtZM[fiCut]->Fill(sparesFill,1);
3046                                                 }
3047                                                 delete backgroundCandidate;
3048                                                 backgroundCandidate = 0x0;
3049                                         }
3050                                 }
3051                         }
3052                 }
3053         }       
3054 }
3055
3056 //________________________________________________________________________
3057 void AliAnalysisTaskGammaConvCalo::CalculateBackgroundRP(){
3058         
3059         Int_t zbin= fBGHandlerRP[fiCut]->GetZBinIndex(fInputEvent->GetPrimaryVertex()->GetZ());
3060         Int_t mbin = 0;
3061         if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->UseTrackMultiplicity()){
3062                 mbin = fBGHandlerRP[fiCut]->GetMultiplicityBinIndex(fV0Reader->GetNumberOfPrimaryTracks());
3063         } else {
3064                 mbin = fBGHandlerRP[fiCut]->GetMultiplicityBinIndex(fGammaCandidates->GetEntries());
3065         }
3066         
3067         
3068         //Rotation Method
3069         if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->UseRotationMethod()){
3070                 // Correct for the number of rotations
3071                 // BG is for rotation the same, except for factor NRotations
3072                 Double_t weight=1./Double_t(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->GetNumberOfBGEvents());
3073                 
3074                 for(Int_t firstGammaIndex=0;firstGammaIndex<fGammaCandidates->GetEntries();firstGammaIndex++){
3075                         
3076                         AliAODConversionPhoton *gamma0=dynamic_cast<AliAODConversionPhoton*>(fGammaCandidates->At(firstGammaIndex));
3077                         if (gamma0==NULL) continue;
3078                         for(Int_t secondGammaIndex=firstGammaIndex+1;secondGammaIndex<fGammaCandidates->GetEntries();secondGammaIndex++){
3079                                 AliAODConversionPhoton *gamma1=dynamic_cast<AliAODConversionPhoton*>(fGammaCandidates->At(secondGammaIndex));
3080                                 if (gamma1 == NULL) continue;
3081                                 if(!((AliConversionPhotonCuts*)fCutArray->At(fiCut))->PhotonIsSelected(gamma1,fInputEvent))continue;
3082                                 for(Int_t nRandom=0;nRandom<((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->GetNumberOfBGEvents();nRandom++){
3083                                 
3084                                         RotateParticle(gamma1);                                 
3085                                         AliAODConversionMother backgroundCandidate(gamma0,gamma1);
3086                                         backgroundCandidate.CalculateDistanceOfClossetApproachToPrimVtx(fInputEvent->GetPrimaryVertex());
3087                                         if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))
3088                                                 ->MesonIsSelected(&backgroundCandidate,kFALSE,((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift())){
3089                                                 fHistoMotherBackInvMassPt[fiCut]->Fill(backgroundCandidate.M(),backgroundCandidate.Pt());
3090                                                 fHistoPhotonPairMixedEventPtconv[fiCut]->Fill(backgroundCandidate.M(),gamma0->Pt());
3091                                                 Double_t sparesFill[4] = {backgroundCandidate.M(),backgroundCandidate.Pt(),(Double_t)zbin,(Double_t)mbin};
3092                                                 fSparseMotherBackInvMassPtZM[fiCut]->Fill(sparesFill,weight);
3093                                         }
3094                                 }
3095                         }
3096                 }
3097         } else {
3098                 // Do Event Mixing
3099                 for(Int_t nEventsInBG=0;nEventsInBG <fBGHandlerRP[fiCut]->GetNBGEvents(fGammaCandidates,fInputEvent);nEventsInBG++){
3100                 
3101                         AliGammaConversionPhotonVector *previousEventGammas = fBGHandlerRP[fiCut]->GetBGGoodGammas(fGammaCandidates,fInputEvent,nEventsInBG);
3102                         
3103                         if(previousEventGammas){
3104                                 // test weighted background
3105                                 Double_t weight=1.0;
3106                                 // Correct for the number of eventmixing:
3107                                 // N gammas -> (N-1) + (N-2) +(N-3) ...+ (N-(N-1))  using sum formula sum(i)=N*(N-1)/2  -> N*(N-1)/2
3108                                 // real combinations (since you cannot combine a photon with its own)
3109                                 // but BG leads to N_{a}*N_{b} combinations
3110                                 weight*=0.5*(Double_t(fGammaCandidates->GetEntries()-1))/Double_t(previousEventGammas->size());
3111                                 
3112                                 for(Int_t iCurrent=0;iCurrent<fGammaCandidates->GetEntries();iCurrent++){
3113                                         AliAODConversionPhoton *gamma0 = (AliAODConversionPhoton*)(fGammaCandidates->At(iCurrent));                                     
3114                                         for(UInt_t iPrevious=0;iPrevious<previousEventGammas->size();iPrevious++){
3115                                                 
3116                                                 AliAODConversionPhoton *gamma1 = (AliAODConversionPhoton*)(previousEventGammas->at(iPrevious));
3117                                                 
3118                                                 AliAODConversionMother backgroundCandidate(gamma0,gamma1);
3119                                                 backgroundCandidate.CalculateDistanceOfClossetApproachToPrimVtx(fInputEvent->GetPrimaryVertex());
3120                                                 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))
3121                                                 ->MesonIsSelected(&backgroundCandidate,kFALSE,((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift())){
3122                                                         fHistoMotherBackInvMassPt[fiCut]->Fill(backgroundCandidate.M(),backgroundCandidate.Pt());
3123                                                         fHistoPhotonPairMixedEventPtconv[fiCut]->Fill(backgroundCandidate.M(),gamma0->Pt());
3124                                                         Double_t sparesFill[4] = {backgroundCandidate.M(),backgroundCandidate.Pt(),(Double_t)zbin,(Double_t)mbin};
3125                                                         fSparseMotherBackInvMassPtZM[fiCut]->Fill(sparesFill,weight);
3126                                                 }
3127                                         }
3128                                 }
3129                         }
3130                 }
3131         }
3132 }
3133 //________________________________________________________________________
3134 void AliAnalysisTaskGammaConvCalo::RotateParticle(AliAODConversionPhoton *gamma){
3135         Int_t fNDegreesPMBackground= ((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->NDegreesRotation();
3136         Double_t nRadiansPM = fNDegreesPMBackground*TMath::Pi()/180;
3137         Double_t rotationValue = fRandom.Rndm()*2*nRadiansPM + TMath::Pi()-nRadiansPM;
3138         gamma->RotateZ(rotationValue);
3139 }
3140
3141 //________________________________________________________________________
3142 void AliAnalysisTaskGammaConvCalo::RotateParticleAccordingToEP(AliAODConversionPhoton *gamma, Double_t previousEventEP, Double_t thisEventEP){
3143         
3144         previousEventEP=previousEventEP+TMath::Pi();
3145         thisEventEP=thisEventEP+TMath::Pi();
3146         Double_t rotationValue= thisEventEP-previousEventEP;
3147         gamma->RotateZ(rotationValue);
3148 }
3149
3150 //________________________________________________________________________
3151 void AliAnalysisTaskGammaConvCalo::MoveParticleAccordingToVertex(AliAODConversionPhoton* particle,const AliGammaConversionAODBGHandler::GammaConversionVertex *vertex){
3152         //see header file for documentation
3153         
3154         Double_t dx = vertex->fX - fInputEvent->GetPrimaryVertex()->GetX();
3155         Double_t dy = vertex->fY - fInputEvent->GetPrimaryVertex()->GetY();
3156         Double_t dz = vertex->fZ - fInputEvent->GetPrimaryVertex()->GetZ();
3157         
3158         Double_t movedPlace[3] = {particle->GetConversionX() - dx,particle->GetConversionY() - dy,particle->GetConversionZ() - dz};
3159         particle->SetConversionPoint(movedPlace);
3160 }
3161 //________________________________________________________________________
3162 void AliAnalysisTaskGammaConvCalo::UpdateEventByEventData(){
3163         //see header file for documentation
3164         if(fGammaCandidates->GetEntries() >0 ){
3165                 if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->UseTrackMultiplicity()){
3166                         fBGHandler[fiCut]->AddEvent(fGammaCandidates,fInputEvent->GetPrimaryVertex()->GetX(),fInputEvent->GetPrimaryVertex()->GetY(),fInputEvent->GetPrimaryVertex()->GetZ(),fV0Reader->GetNumberOfPrimaryTracks(),fEventPlaneAngle);
3167                         fBGClusHandler[fiCut]->AddEvent(fClusterCandidates,fInputEvent->GetPrimaryVertex()->GetX(),fInputEvent->GetPrimaryVertex()->GetY(),fInputEvent->GetPrimaryVertex()->GetZ(),fV0Reader->GetNumberOfPrimaryTracks(),fEventPlaneAngle);
3168                 } else { // means we use #V0s for multiplicity
3169                         fBGHandler[fiCut]->AddEvent(fGammaCandidates,fInputEvent->GetPrimaryVertex()->GetX(),fInputEvent->GetPrimaryVertex()->GetY(),fInputEvent->GetPrimaryVertex()->GetZ(),fGammaCandidates->GetEntries(),fEventPlaneAngle);
3170                         fBGClusHandler[fiCut]->AddEvent(fClusterCandidates,fInputEvent->GetPrimaryVertex()->GetX(),fInputEvent->GetPrimaryVertex()->GetY(),fInputEvent->GetPrimaryVertex()->GetZ(),fGammaCandidates->GetEntries(),fEventPlaneAngle);
3171                 }
3172         }
3173 }
3174
3175
3176 //________________________________________________________________________
3177 void AliAnalysisTaskGammaConvCalo::FillPhotonCombinatorialBackgroundHist(AliAODConversionPhoton *TruePhotonCandidate, Int_t pdgCode[])
3178 {
3179         // 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
3180         if(pdgCode[0]==11   && pdgCode[1]==11){if(fIsFromMBHeader)fHistoCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),0);}
3181         else if( (pdgCode[0]==11   && pdgCode[1]==211) || (pdgCode[0]==211  && pdgCode[1]==11) )
3182         {if(fIsFromMBHeader)fHistoCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),1);}
3183         else if( (pdgCode[0]==11   && pdgCode[1]==321) || (pdgCode[0]==321  && pdgCode[1]==11) )
3184         {if(fIsFromMBHeader)fHistoCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),2);}
3185         else if( (pdgCode[0]==11   && pdgCode[1]==2212) || (pdgCode[0]==2212 && pdgCode[1]==11) )
3186         {if(fIsFromMBHeader)fHistoCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),3);}
3187         else if( (pdgCode[0]==11   && pdgCode[1]==13) || (pdgCode[0]==13   && pdgCode[1]==11) )
3188         {if(fIsFromMBHeader)fHistoCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),4);}
3189         else if(  pdgCode[0]==211  && pdgCode[1]==211 ){if(fIsFromMBHeader)fHistoCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),5);}
3190         else if( (pdgCode[0]==211  && pdgCode[1]==321) || (pdgCode[0]==321  && pdgCode[1]==211) )
3191         {if(fIsFromMBHeader)fHistoCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),6);}
3192         else if( (pdgCode[0]==211  && pdgCode[1]==2212) || (pdgCode[0]==2212 && pdgCode[1]==211) )
3193         {if(fIsFromMBHeader)fHistoCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),7);}
3194         else if( (pdgCode[0]==211  && pdgCode[1]==13) || (pdgCode[0]==13   && pdgCode[1]==211) )
3195         {if(fIsFromMBHeader)fHistoCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),8);}
3196         else if(  pdgCode[0]==321  && pdgCode[1]==321 ){if(fIsFromMBHeader)fHistoCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),9);}
3197         else if( (pdgCode[0]==321  && pdgCode[1]==2212) || (pdgCode[0]==2212 && pdgCode[1]==321) )
3198         {if(fIsFromMBHeader)fHistoCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),10);}
3199         else if( (pdgCode[0]==321  && pdgCode[1]==13) || (pdgCode[0]==13   && pdgCode[1]==321) )
3200         {if(fIsFromMBHeader)fHistoCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),11);}
3201         else if(  pdgCode[0]==2212   && pdgCode[1]==2212  ){if(fIsFromMBHeader)fHistoCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),12);}
3202         else if( (pdgCode[0]==2212  && pdgCode[1]==13) || (pdgCode[0]==13   && pdgCode[1]==2212) )
3203         {if(fIsFromMBHeader)fHistoCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),13);}
3204         else if(  pdgCode[0]==13   && pdgCode[1]==13  ){if(fIsFromMBHeader)fHistoCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),14);}
3205         else {if(fIsFromMBHeader)fHistoCombinatorialPt[fiCut]->Fill(TruePhotonCandidate->Pt(),15);}
3206 }
3207 //________________________________________________________________________
3208 void AliAnalysisTaskGammaConvCalo::RelabelAODPhotonCandidates(Bool_t mode){
3209         
3210         // Relabeling For AOD Event
3211         // ESDiD -> AODiD
3212         // MCLabel -> AODMCLabel
3213         
3214         if(mode){
3215                 fMCStackPos = new Int_t[fReaderGammas->GetEntries()];
3216                 fMCStackNeg = new Int_t[fReaderGammas->GetEntries()];
3217                 fESDArrayPos = new Int_t[fReaderGammas->GetEntries()];
3218                 fESDArrayNeg = new Int_t[fReaderGammas->GetEntries()];
3219         }
3220         
3221         for(Int_t iGamma = 0;iGamma<fReaderGammas->GetEntries();iGamma++){
3222                 AliAODConversionPhoton* PhotonCandidate = (AliAODConversionPhoton*) fReaderGammas->At(iGamma);
3223                 if(!PhotonCandidate) continue;
3224                 if(!mode){// Back to ESD Labels
3225                 PhotonCandidate->SetMCLabelPositive(fMCStackPos[iGamma]);
3226                 PhotonCandidate->SetMCLabelNegative(fMCStackNeg[iGamma]);
3227                 PhotonCandidate->SetLabelPositive(fESDArrayPos[iGamma]);
3228                 PhotonCandidate->SetLabelNegative(fESDArrayNeg[iGamma]);
3229                 continue;
3230                 }
3231                 fMCStackPos[iGamma] =  PhotonCandidate->GetMCLabelPositive();
3232                 fMCStackNeg[iGamma] =  PhotonCandidate->GetMCLabelNegative();
3233                 fESDArrayPos[iGamma] = PhotonCandidate->GetTrackLabelPositive();
3234                 fESDArrayNeg[iGamma] = PhotonCandidate->GetTrackLabelNegative();
3235                 
3236                 Bool_t AODLabelPos = kFALSE;
3237                 Bool_t AODLabelNeg = kFALSE;
3238                 
3239                 for(Int_t i = 0; i<fInputEvent->GetNumberOfTracks();i++){
3240                 AliAODTrack *tempDaughter = static_cast<AliAODTrack*>(fInputEvent->GetTrack(i));
3241                 if(!AODLabelPos){
3242                         if( tempDaughter->GetID() == PhotonCandidate->GetTrackLabelPositive() ){
3243                         PhotonCandidate->SetMCLabelPositive(abs(tempDaughter->GetLabel()));
3244                         PhotonCandidate->SetLabelPositive(i);
3245                         AODLabelPos = kTRUE;
3246                         }
3247                 }
3248                 if(!AODLabelNeg){
3249                         if( tempDaughter->GetID() == PhotonCandidate->GetTrackLabelNegative()){
3250                         PhotonCandidate->SetMCLabelNegative(abs(tempDaughter->GetLabel()));
3251                         PhotonCandidate->SetLabelNegative(i);
3252                         AODLabelNeg = kTRUE;
3253                         }
3254                 }
3255                 if(AODLabelNeg && AODLabelPos){
3256                         break;
3257                 }
3258                 }
3259                 if(!AODLabelPos || !AODLabelNeg){
3260                 cout<<"WARNING!!! AOD TRACKS NOT FOUND FOR"<<endl;
3261                 }
3262         }
3263         
3264         
3265         if(!mode){
3266                 delete[] fMCStackPos;
3267                 delete[] fMCStackNeg;
3268                 delete[] fESDArrayPos;
3269                 delete[] fESDArrayNeg;
3270         }
3271 }
3272
3273 void AliAnalysisTaskGammaConvCalo::SetLogBinningXTH2(TH2* histoRebin){
3274         TAxis *axisafter = histoRebin->GetXaxis();
3275         Int_t bins = axisafter->GetNbins();
3276         Double_t from = axisafter->GetXmin();
3277         Double_t to = axisafter->GetXmax();
3278         Double_t *newbins = new Double_t[bins+1];
3279         newbins[0] = from;
3280         Double_t factor = TMath::Power(to/from, 1./bins);
3281         for(Int_t i=1; i<=bins; ++i) newbins[i] = factor * newbins[i-1];
3282         axisafter->Set(bins, newbins);
3283         delete [] newbins;
3284 }
3285
3286 //________________________________________________________________________
3287 void AliAnalysisTaskGammaConvCalo::Terminate(const Option_t *)
3288 {
3289   
3290   //fOutputContainer->Print(); // Will crash on GRID
3291 }
3292
3293 //________________________________________________________________________
3294 Int_t AliAnalysisTaskGammaConvCalo::GetSourceClassification(Int_t daughter, Int_t pdgCode){
3295   
3296         if (daughter == 111) {
3297                 if (abs(pdgCode) == 310) return 1; // k0s
3298                 else if (abs(pdgCode) == 3122) return 2; // Lambda
3299                 else if (abs(pdgCode) == 130) return 3; // K0L
3300                 else if (abs(pdgCode) == 2212) return 4; // proton
3301                 else if (abs(pdgCode) == 2112) return 5; // neutron
3302                 else if (abs(pdgCode) == 211) return 6; // pion
3303                 else if (abs(pdgCode) == 321) return 7; // kaon
3304                 else if (abs(pdgCode) == 113 || abs(pdgCode) == 213 ) return 8; // rho 0,+,-
3305                 else if (abs(pdgCode) == 3222 || abs(pdgCode) == 3212 || abs(pdgCode) == 3112  ) return 9; // Sigma
3306                 else if (abs(pdgCode) == 2224 || abs(pdgCode) == 2214 || abs(pdgCode) == 2114 || abs(pdgCode) == 1114  ) return 10; // Delta
3307                 else if (abs(pdgCode) == 313 || abs(pdgCode) == 323   ) return 11; // K*
3308                 else return 15;
3309         }
3310         return 15;
3311   
3312 }
3313
3314 //_________________________________________________________________________________
3315 Bool_t AliAnalysisTaskGammaConvCalo::CheckIfContainedInString(TString input, Int_t tobechecked){
3316         TObjArray *arr = input.Tokenize(",");
3317         for (Int_t i = 0; i < arr->GetEntriesFast();i++){
3318                 TString tempStr = ((TObjString*)arr->At(i))->GetString();
3319                 if (tempStr.Atoi() == tobechecked) return kTRUE;
3320         }       
3321         return kFALSE;
3322 }
3323
3324 //_________________________________________________________________________________
3325 Bool_t AliAnalysisTaskGammaConvCalo::CheckIfContainedInStringAndAppend(TString &input, Int_t tobechecked){
3326         TObjArray *arr = input.Tokenize(",");
3327         Bool_t isContained = kFALSE;
3328         for (Int_t i = 0; i < arr->GetEntriesFast();i++){
3329                 TString tempStr = ((TObjString*)arr->At(i))->GetString();
3330                 if (tempStr.Atoi() == tobechecked) isContained= kTRUE;
3331         }       
3332         if (!isContained)input.Append(Form("%i,",tobechecked)); 
3333         return isContained;
3334 }
3335
3336 //_________________________________________________________________________________
3337 void AliAnalysisTaskGammaConvCalo::ProcessConversionPhotonsForMissingTags (){
3338
3339         if (!fMCStack) return;
3340
3341         for(Int_t firstGammaIndex=0;firstGammaIndex<fGammaCandidates->GetEntries();firstGammaIndex++){
3342                 AliAODConversionPhoton *gamma0=dynamic_cast<AliAODConversionPhoton*>(fGammaCandidates->At(firstGammaIndex));
3343                 if (gamma0->IsTrueConvertedPhoton()){
3344                         Int_t gamma0MotherLabel = -1;
3345                         Int_t gamma0MCLabel = gamma0->GetMCParticleLabel(fMCStack);
3346                         if(gamma0MCLabel != -1){ 
3347                                 TParticle * gammaMC0 = (TParticle*)fMCStack->Particle(gamma0MCLabel);
3348                                 gamma0MotherLabel=gammaMC0->GetFirstMother();
3349                                 if (gamma0MotherLabel>-1){
3350                                         if(((TParticle*)fMCStack->Particle(gamma0MotherLabel))->GetPdgCode() == 111){
3351                                                 if (!CheckIfContainedInStringAndAppend(fStringRecTruePi0s[fiCut],gamma0MotherLabel)){ 
3352                                                         if (gamma0MotherLabel >= fMCStack->GetNprimary()){
3353                                                                 Int_t secMotherLabel = ((TParticle*)fMCStack->Particle(gamma0MotherLabel))->GetMother(0);
3354                                                                 Float_t weightedSec= 1;
3355                                                                 if(((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsParticleFromBGEvent(secMotherLabel, fMCStack, fInputEvent) && fMCStack->Particle(secMotherLabel)->GetPdgCode()==310){
3356                                                                         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
3357                                                                 }
3358                                                                 fHistoTrueSecondaryPi0MissingPtconv[fiCut]->Fill(gamma0->Pt(),weightedSec);
3359                                                         } else {
3360                                                                 Float_t weighted= 1;
3361                                                                 if(((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsParticleFromBGEvent(gamma0MotherLabel, fMCStack, fInputEvent)){
3362                                                                         if (((TParticle*)fMCStack->Particle(gamma0MotherLabel))->Pt()>0.005){
3363                                                                                 weighted= ((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),gamma0MotherLabel, fMCStack, fInputEvent);
3364                                                                         }
3365                                                                 }
3366                                                                 fHistoTruePrimaryPi0MissingPtconv[fiCut]->Fill(gamma0->Pt(),weighted);          
3367                                                         }       
3368                                                 }
3369                                         } else if(((TParticle*)fMCStack->Particle(gamma0MotherLabel))->GetPdgCode() == 221){
3370                                                 if (!CheckIfContainedInStringAndAppend(fStringRecTrueEtas[fiCut],gamma0MotherLabel)){
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                                                         fHistoTruePrimaryEtaMissingPtconv[fiCut]->Fill(gamma0->Pt(),weighted);
3378                                                 }       
3379                                         }       
3380                                 }
3381                         }       
3382                 }       
3383         }       
3384         return;
3385 }
3386
3387 //_________________________________________________________________________________
3388 void AliAnalysisTaskGammaConvCalo::ProcessConversionPhotonsForMissingTagsAOD (){
3389
3390         TClonesArray *AODMCTrackArray = dynamic_cast<TClonesArray*>(fInputEvent->FindListObject(AliAODMCParticle::StdBranchName()));
3391                 
3392         for(Int_t firstGammaIndex=0;firstGammaIndex<fGammaCandidates->GetEntries();firstGammaIndex++){
3393                 AliAODConversionPhoton *gamma0=dynamic_cast<AliAODConversionPhoton*>(fGammaCandidates->At(firstGammaIndex));
3394
3395                 if (gamma0->IsTrueConvertedPhoton()){
3396                         AliAODMCParticle *positiveMC = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma0->GetMCLabelPositive()));
3397                         AliAODMCParticle *negativeMC = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma0->GetMCLabelNegative()));
3398                         
3399                         Int_t gamma0MCLabel = -1;
3400                         Int_t gamma0MotherLabel = -1;
3401                         if(!positiveMC||!negativeMC)
3402                                 return;
3403                         
3404                         if (gamma0->IsTrueConvertedPhoton()){
3405                                 gamma0MCLabel = positiveMC->GetMother();
3406                                 AliAODMCParticle * gammaMC0 = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma0MCLabel));
3407                                 gamma0MotherLabel=gammaMC0->GetMother();
3408
3409                                 if (gamma0MotherLabel>-1){
3410                                         if(((AliAODMCParticle*)AODMCTrackArray->At(gamma0MotherLabel))->GetPdgCode() == 111){
3411                                                 if (!CheckIfContainedInStringAndAppend(fStringRecTruePi0s[fiCut],gamma0MotherLabel)){ 
3412                                                         if (!(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma0MotherLabel))->IsPrimary())){
3413                                                                 Int_t secMotherLabel = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma0MotherLabel))->GetMother();
3414                                                                 Float_t weightedSec= 1;
3415                                                                 if(((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsParticleFromBGEvent(secMotherLabel, 0x0, fInputEvent) && static_cast<AliAODMCParticle*>(AODMCTrackArray->At(secMotherLabel))->GetPdgCode()==310){
3416                                                                         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
3417                                                                 }
3418                                                                 fHistoTrueSecondaryPi0MissingPtconv[fiCut]->Fill(gamma0->Pt(),weightedSec);
3419                                                         } else {
3420                                                                 Float_t weighted= 1;
3421                                                                 if(((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsParticleFromBGEvent(gamma0MotherLabel, 0x0, fInputEvent)){
3422                                                                         if (static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma0MotherLabel))->Pt()>0.005){
3423                                                                                 weighted= ((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),gamma0MotherLabel, 0x0, fInputEvent);
3424                                                                         }
3425                                                                 }
3426                                                                 fHistoTruePrimaryPi0MissingPtconv[fiCut]->Fill(gamma0->Pt(),weighted);          
3427                                                         }       
3428                                                 }
3429                                         } else if(((AliAODMCParticle*)AODMCTrackArray->At(gamma0MotherLabel))->GetPdgCode() == 221){
3430                                                 if (!CheckIfContainedInStringAndAppend(fStringRecTrueEtas[fiCut],gamma0MotherLabel)){
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                                                         fHistoTruePrimaryEtaMissingPtconv[fiCut]->Fill(gamma0->Pt(),weighted);
3438                                                 }       
3439                                         }       
3440                                 }
3441                         }       
3442                 }       
3443         }       
3444         return;
3445 }