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