]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWGGA/GammaConv/AliAnalysisTaskGammaConvCalo.cxx
Merge branch 'master' of https://git.cern.ch/reps/AliRoot
[u/mrichter/AliRoot.git] / PWGGA / GammaConv / AliAnalysisTaskGammaConvCalo.cxx
index 85fe4c8cef85784c74d48e681a696ff77d802726..cc105f9e8ec2fd8b2da898c841c0d68860e68f08 100644 (file)
@@ -74,15 +74,16 @@ AliAnalysisTaskGammaConvCalo::AliAnalysisTaskGammaConvCalo(): AliAnalysisTaskSE(
        fBackList(NULL),
        fMotherList(NULL),
        fPhotonDCAList(NULL),
-       fMesonDCAList(NULL),
        fTrueList(NULL),
        fMCList(NULL),
        fHeaderNameList(NULL),
-       fTagOutputList(NULL),
+       fClusterOutputList(NULL),
        fOutputContainer(NULL),
        fReaderGammas(NULL),
        fGammaCandidates(NULL),
        fClusterCandidates(NULL),
+       fEventCutArray(NULL),
+       fEventCuts(NULL),
        fCutArray(NULL),
        fConversionCuts(NULL),
        fClusterCutArray(NULL),
@@ -100,6 +101,7 @@ AliAnalysisTaskGammaConvCalo::AliAnalysisTaskGammaConvCalo(): AliAnalysisTaskSE(
        fCharCatPhoton(0),
        fCharPhotonMCInfo(0),
        fHistoMotherInvMassPt(NULL),
+       fHistoMotherMatchedInvMassPt(NULL),
        fSparseMotherInvMassPtZM(NULL),
        fHistoMotherBackInvMassPt(NULL),
        fSparseMotherBackInvMassPtZM(NULL),
@@ -110,22 +112,17 @@ AliAnalysisTaskGammaConvCalo::AliAnalysisTaskGammaConvCalo(): AliAnalysisTaskSE(
        fHistoMotherEtaPtAlpha(NULL),
        fHistoMotherPi0PtOpenAngle(NULL),
        fHistoMotherEtaPtOpenAngle(NULL),
-       fTreeMesonsInvMassPtDcazMinDcazMaxFlag(NULL),
-       fInvMass(0),
-       fPt(0),
-       fDCAzGammaMin(0),
-       fDCAzGammaMax(0),
-       fCharFlag(0),
-       fCharMesonMCInfo(0),
-       fHistoConvGammaUntagged(NULL),
-       fHistoConvGammaTagged(NULL),
-       fHistoConvGammaPi0Tagged(NULL),
-       fHistoConvGammaEtaTagged(NULL),
-       fHistoPhotonPairAll(NULL),
-       fHistoPhotonPairAllGam(NULL),
+    fHistoMotherPi0ConvPhotonEtaPhi(NULL),
+    fHistoMotherEtaConvPhotonEtaPhi(NULL),
+       fHistoMotherInvMassECalib(NULL),
+       fHistoMotherInvMassECalibalpha(NULL),
+       fHistoPhotonPairPtconv(NULL),
+       fHistoPhotonPairMixedEventPtconv(NULL),
        fHistoClusGammaPt(NULL),
+       fHistoClusOverlapHeadersGammaPt(NULL),
        fHistoMCHeaders(NULL),
        fHistoMCAllGammaPt(NULL),
+       fHistoMCAllGammaEMCALAccPt(NULL),
        fHistoMCDecayGammaPi0Pt(NULL),
        fHistoMCDecayGammaRhoPt(NULL),
        fHistoMCDecayGammaEtaPt(NULL),
@@ -144,6 +141,8 @@ AliAnalysisTaskGammaConvCalo::AliAnalysisTaskGammaConvCalo(): AliAnalysisTaskSE(
        fHistoMCEtaInAccPt(NULL),
        fHistoMCPi0PtY(NULL),
        fHistoMCEtaPtY(NULL),
+       fHistoMCPi0PtAlpha(NULL),
+       fHistoMCEtaPtAlpha(NULL),
        fHistoMCK0sPt(NULL),
        fHistoMCK0sWOWeightPt(NULL),
        fHistoMCK0sPtY(NULL),
@@ -151,18 +150,37 @@ AliAnalysisTaskGammaConvCalo::AliAnalysisTaskGammaConvCalo(): AliAnalysisTaskSE(
        fHistoMCSecPi0Source(NULL),
        fHistoMCSecEtaPt(NULL),
        fHistoMCSecEtaSource(NULL),
-       fHistoTrueMotherInvMassPt(NULL),
-       fHistoTruePrimaryMotherInvMassPt(NULL),
-       fHistoTruePrimaryMotherW0WeightingInvMassPt(NULL),
-       fProfileTruePrimaryMotherWeightsInvMassPt(NULL),
+       fHistoTruePi0InvMassPt(NULL),
+       fHistoTrueEtaInvMassPt(NULL),
+       fHistoTruePi0CaloPhotonInvMassPt(NULL),
+       fHistoTrueEtaCaloPhotonInvMassPt(NULL),
+       fHistoTruePi0CaloConvertedPhotonInvMassPt(NULL),
+       fHistoTruePi0CaloConvertedPhotonMatchedInvMassPt(NULL),
+       fHistoTrueEtaCaloConvertedPhotonInvMassPt(NULL),
+       fHistoTrueEtaCaloConvertedPhotonMatchedInvMassPt(NULL),
+       fHistoTruePi0CaloElectronInvMassPt(NULL),
+       fHistoTrueEtaCaloElectronInvMassPt(NULL),
+       fHistoTruePi0CaloMergedClusterInvMassPt(NULL),
+       fHistoTrueEtaCaloMergedClusterInvMassPt(NULL),
+       fHistoTrueMotherCaloEMNonLeadingInvMassPt(NULL),
+       fHistoTruePi0CaloMergedClusterPartConvInvMassPt(NULL),
+       fHistoTrueEtaCaloMergedClusterPartConvInvMassPt(NULL),
+       fHistoTruePrimaryPi0InvMassPt(NULL),
+       fHistoTruePrimaryEtaInvMassPt(NULL),
+       fHistoTruePrimaryPi0W0WeightingInvMassPt(NULL),
+       fHistoTruePrimaryEtaW0WeightingInvMassPt(NULL),
+       fProfileTruePrimaryPi0WeightsInvMassPt(NULL),
+       fProfileTruePrimaryEtaWeightsInvMassPt(NULL),
        fHistoTruePrimaryPi0MCPtResolPt(NULL),
        fHistoTruePrimaryEtaMCPtResolPt(NULL),
-       fHistoTrueSecondaryMotherInvMassPt(NULL),
-       fHistoTrueSecondaryMotherFromK0sInvMassPt(NULL),
+    fHistoTrueMotherPi0ConvPhotonEtaPhi(NULL),
+    fHistoTrueMotherEtaConvPhotonEtaPhi(NULL),
+       fHistoTrueSecondaryPi0InvMassPt(NULL),
+       fHistoTrueSecondaryPi0FromK0sInvMassPt(NULL),
        fHistoTrueK0sWithPi0DaughterMCPt(NULL),
-       fHistoTrueSecondaryMotherFromEtaInvMassPt(NULL),
+       fHistoTrueSecondaryPi0FromEtaInvMassPt(NULL),
        fHistoTrueEtaWithPi0DaughterMCPt(NULL),
-       fHistoTrueSecondaryMotherFromLambdaInvMassPt(NULL),
+       fHistoTrueSecondaryPi0FromLambdaInvMassPt(NULL),
        fHistoTrueLambdaWithPi0DaughterMCPt(NULL),
        fHistoTrueBckGGInvMassPt(NULL),
        fHistoTrueBckContInvMassPt(NULL),
@@ -172,7 +190,6 @@ AliAnalysisTaskGammaConvCalo::AliAnalysisTaskGammaConvCalo(): AliAnalysisTaskSE(
        fHistoTrueEtaPtAlpha(NULL),
        fHistoTruePi0PtOpenAngle(NULL),
        fHistoTrueEtaPtOpenAngle(NULL),
-       fHistoTrueMotherDalitzInvMassPt(NULL),
        fHistoTrueConvGammaPt(NULL),
        fHistoTrueConvPi0GammaPt(NULL),
        fHistoTrueConvGammaEta(NULL),
@@ -182,11 +199,36 @@ AliAnalysisTaskGammaConvCalo::AliAnalysisTaskGammaConvCalo(): AliAnalysisTaskSE(
        fHistoTrueSecondaryConvGammaPt(NULL),
        fHistoTrueSecondaryConvGammaFromXFromK0sPt(NULL),
        fHistoTrueSecondaryConvGammaFromXFromLambdaPt(NULL),
-       fHistoTrueDalitzPsiPairDeltaPhi(NULL),
-       fHistoTrueGammaPsiPairDeltaPhi(NULL),
        fHistoTrueClusGammaPt(NULL),
+       fHistoTrueClusUnConvGammaPt(NULL),
+       fHistoTrueClusUnConvGammaMCPt(NULL),
+       fHistoTrueClusElectronPt(NULL),
+       fHistoTrueClusConvGammaPt(NULL),
+       fHistoTrueClusConvGammaMCPt(NULL),
+       fHistoTrueClusConvGammaFullyPt(NULL),
+       fHistoTrueClusMergedGammaPt(NULL),
+       fHistoTrueClusMergedPartConvGammaPt(NULL),
+       fHistoTrueClusDalitzPt(NULL),
+       fHistoTrueClusDalitzMergedPt(NULL),
+       fHistoTrueClusPhotonFromElecMotherPt(NULL),
+       fHistoTrueClusShowerPt(NULL),
+       fHistoTrueClusSubLeadingPt(NULL),
+       fHistoTrueClusNParticles(NULL),
+       fHistoTrueClusEMNonLeadingPt(NULL),
+       fHistoTrueNLabelsInClus(NULL),
        fHistoTruePrimaryClusGammaPt(NULL),
        fHistoTruePrimaryClusGammaESDPtMCPt(NULL),
+       fHistoTruePrimaryPi0PhotonPairPtconv(NULL),
+       fHistoTruePrimaryPi0DCPtconv(NULL),
+       fHistoTruePrimaryPi0MissingPtconv(NULL),
+       fHistoTruePrimaryEtaPhotonPairPtconv(NULL),
+       fHistoTruePrimaryEtaDCPtconv(NULL),
+       fHistoTruePrimaryEtaMissingPtconv(NULL),
+       fHistoTrueSecondaryPi0PhotonPairPtconv(NULL),
+       fHistoTrueSecondaryPi0DCPtconv(NULL),
+       fHistoTrueSecondaryPi0MissingPtconv(NULL),
+       fStringRecTruePi0s(NULL),
+       fStringRecTrueEtas(NULL),
        fHistoNEvents(NULL),
        fHistoNGoodESDTracks(NULL),
        fHistoNGammaCandidates(NULL),
@@ -211,11 +253,10 @@ AliAnalysisTaskGammaConvCalo::AliAnalysisTaskGammaConvCalo(): AliAnalysisTaskSE(
        fDoMesonAnalysis(kTRUE),
        fDoMesonQA(0),
        fDoPhotonQA(0),
+       fDoClusterQA(0),
        fIsFromMBHeader(kTRUE),
-       fIsMC(kFALSE),
-       fMinE(0.1),
-       fNminCells(2),
-       fEMCm02cut(0.5)
+       fIsOverlappingWithOtherHeader(kFALSE),
+       fIsMC(kFALSE)
 {
   
 }
@@ -236,15 +277,16 @@ AliAnalysisTaskGammaConvCalo::AliAnalysisTaskGammaConvCalo(const char *name):
        fBackList(NULL),
        fMotherList(NULL),
        fPhotonDCAList(NULL),
-       fMesonDCAList(NULL),
        fTrueList(NULL),
        fMCList(NULL),
        fHeaderNameList(NULL),
-       fTagOutputList(NULL),
+       fClusterOutputList(NULL),
        fOutputContainer(0),
        fReaderGammas(NULL),
        fGammaCandidates(NULL),
        fClusterCandidates(NULL),
+       fEventCutArray(NULL),
+       fEventCuts(NULL),
        fCutArray(NULL),
        fConversionCuts(NULL),
        fClusterCutArray(NULL),
@@ -262,6 +304,7 @@ AliAnalysisTaskGammaConvCalo::AliAnalysisTaskGammaConvCalo(const char *name):
        fCharCatPhoton(0),
        fCharPhotonMCInfo(0),
        fHistoMotherInvMassPt(NULL),
+       fHistoMotherMatchedInvMassPt(NULL),
        fSparseMotherInvMassPtZM(NULL),
        fHistoMotherBackInvMassPt(NULL),
        fSparseMotherBackInvMassPtZM(NULL),
@@ -272,22 +315,17 @@ AliAnalysisTaskGammaConvCalo::AliAnalysisTaskGammaConvCalo(const char *name):
        fHistoMotherEtaPtAlpha(NULL),
        fHistoMotherPi0PtOpenAngle(NULL),
        fHistoMotherEtaPtOpenAngle(NULL),
-       fTreeMesonsInvMassPtDcazMinDcazMaxFlag(NULL),
-       fInvMass(0),
-       fPt(0),
-       fDCAzGammaMin(0),
-       fDCAzGammaMax(0),
-       fCharFlag(0),
-       fCharMesonMCInfo(0),
-       fHistoConvGammaUntagged(NULL),
-       fHistoConvGammaTagged(NULL),
-       fHistoConvGammaPi0Tagged(NULL),
-       fHistoConvGammaEtaTagged(NULL),
-       fHistoPhotonPairAll(NULL),
-       fHistoPhotonPairAllGam(NULL),
+    fHistoMotherPi0ConvPhotonEtaPhi(NULL),
+    fHistoMotherEtaConvPhotonEtaPhi(NULL),
+       fHistoMotherInvMassECalib(NULL),
+       fHistoMotherInvMassECalibalpha(NULL),
+       fHistoPhotonPairPtconv(NULL),
+       fHistoPhotonPairMixedEventPtconv(NULL),
        fHistoClusGammaPt(NULL),
+       fHistoClusOverlapHeadersGammaPt(NULL),
        fHistoMCHeaders(NULL),
        fHistoMCAllGammaPt(NULL),
+       fHistoMCAllGammaEMCALAccPt(NULL),
        fHistoMCDecayGammaPi0Pt(NULL),
        fHistoMCDecayGammaRhoPt(NULL),
        fHistoMCDecayGammaEtaPt(NULL),
@@ -306,6 +344,8 @@ AliAnalysisTaskGammaConvCalo::AliAnalysisTaskGammaConvCalo(const char *name):
        fHistoMCEtaInAccPt(NULL),
        fHistoMCPi0PtY(NULL),
        fHistoMCEtaPtY(NULL),
+       fHistoMCPi0PtAlpha(NULL),
+       fHistoMCEtaPtAlpha(NULL),
        fHistoMCK0sPt(NULL),
        fHistoMCK0sWOWeightPt(NULL),
        fHistoMCK0sPtY(NULL),
@@ -313,18 +353,37 @@ AliAnalysisTaskGammaConvCalo::AliAnalysisTaskGammaConvCalo(const char *name):
        fHistoMCSecPi0Source(NULL),
        fHistoMCSecEtaPt(NULL),
        fHistoMCSecEtaSource(NULL),
-       fHistoTrueMotherInvMassPt(NULL),
-       fHistoTruePrimaryMotherInvMassPt(NULL),
-       fHistoTruePrimaryMotherW0WeightingInvMassPt(NULL),
-       fProfileTruePrimaryMotherWeightsInvMassPt(NULL),
+       fHistoTruePi0InvMassPt(NULL),
+       fHistoTrueEtaInvMassPt(NULL),
+       fHistoTruePi0CaloPhotonInvMassPt(NULL),
+       fHistoTrueEtaCaloPhotonInvMassPt(NULL),
+       fHistoTruePi0CaloConvertedPhotonInvMassPt(NULL),
+       fHistoTruePi0CaloConvertedPhotonMatchedInvMassPt(NULL),
+       fHistoTrueEtaCaloConvertedPhotonInvMassPt(NULL),
+       fHistoTrueEtaCaloConvertedPhotonMatchedInvMassPt(NULL),
+       fHistoTruePi0CaloElectronInvMassPt(NULL),
+       fHistoTrueEtaCaloElectronInvMassPt(NULL),
+       fHistoTruePi0CaloMergedClusterInvMassPt(NULL),
+       fHistoTrueEtaCaloMergedClusterInvMassPt(NULL),
+       fHistoTrueMotherCaloEMNonLeadingInvMassPt(NULL),
+       fHistoTruePi0CaloMergedClusterPartConvInvMassPt(NULL),
+       fHistoTrueEtaCaloMergedClusterPartConvInvMassPt(NULL),
+       fHistoTruePrimaryPi0InvMassPt(NULL),
+       fHistoTruePrimaryEtaInvMassPt(NULL),
+       fHistoTruePrimaryPi0W0WeightingInvMassPt(NULL),
+       fHistoTruePrimaryEtaW0WeightingInvMassPt(NULL),
+       fProfileTruePrimaryPi0WeightsInvMassPt(NULL),
+       fProfileTruePrimaryEtaWeightsInvMassPt(NULL),
        fHistoTruePrimaryPi0MCPtResolPt(NULL),
        fHistoTruePrimaryEtaMCPtResolPt(NULL),
-       fHistoTrueSecondaryMotherInvMassPt(NULL),
-       fHistoTrueSecondaryMotherFromK0sInvMassPt(NULL),
+    fHistoTrueMotherPi0ConvPhotonEtaPhi(NULL),
+    fHistoTrueMotherEtaConvPhotonEtaPhi(NULL),
+       fHistoTrueSecondaryPi0InvMassPt(NULL),
+       fHistoTrueSecondaryPi0FromK0sInvMassPt(NULL),
        fHistoTrueK0sWithPi0DaughterMCPt(NULL),
-       fHistoTrueSecondaryMotherFromEtaInvMassPt(NULL),
+       fHistoTrueSecondaryPi0FromEtaInvMassPt(NULL),
        fHistoTrueEtaWithPi0DaughterMCPt(NULL),
-       fHistoTrueSecondaryMotherFromLambdaInvMassPt(NULL),
+       fHistoTrueSecondaryPi0FromLambdaInvMassPt(NULL),
        fHistoTrueLambdaWithPi0DaughterMCPt(NULL),
        fHistoTrueBckGGInvMassPt(NULL),
        fHistoTrueBckContInvMassPt(NULL),
@@ -334,7 +393,6 @@ AliAnalysisTaskGammaConvCalo::AliAnalysisTaskGammaConvCalo(const char *name):
        fHistoTrueEtaPtAlpha(NULL),
        fHistoTruePi0PtOpenAngle(NULL),
        fHistoTrueEtaPtOpenAngle(NULL),
-       fHistoTrueMotherDalitzInvMassPt(NULL),
        fHistoTrueConvGammaPt(NULL),
        fHistoTrueConvPi0GammaPt(NULL),
        fHistoTrueConvGammaEta(NULL),
@@ -344,11 +402,36 @@ AliAnalysisTaskGammaConvCalo::AliAnalysisTaskGammaConvCalo(const char *name):
        fHistoTrueSecondaryConvGammaPt(NULL),
        fHistoTrueSecondaryConvGammaFromXFromK0sPt(NULL),
        fHistoTrueSecondaryConvGammaFromXFromLambdaPt(NULL),
-       fHistoTrueDalitzPsiPairDeltaPhi(NULL),
-       fHistoTrueGammaPsiPairDeltaPhi(NULL),
        fHistoTrueClusGammaPt(NULL),
+       fHistoTrueClusUnConvGammaPt(NULL),
+       fHistoTrueClusUnConvGammaMCPt(NULL),
+       fHistoTrueClusElectronPt(NULL),
+       fHistoTrueClusConvGammaPt(NULL),
+       fHistoTrueClusConvGammaMCPt(NULL),
+       fHistoTrueClusConvGammaFullyPt(NULL),
+       fHistoTrueClusMergedGammaPt(NULL),
+       fHistoTrueClusMergedPartConvGammaPt(NULL),
+       fHistoTrueClusDalitzPt(NULL),
+       fHistoTrueClusDalitzMergedPt(NULL),
+       fHistoTrueClusPhotonFromElecMotherPt(NULL),
+       fHistoTrueClusShowerPt(NULL),
+       fHistoTrueClusSubLeadingPt(NULL),
+       fHistoTrueClusNParticles(NULL),
+       fHistoTrueClusEMNonLeadingPt(NULL),
+       fHistoTrueNLabelsInClus(NULL),
        fHistoTruePrimaryClusGammaPt(NULL),
        fHistoTruePrimaryClusGammaESDPtMCPt(NULL),
+       fHistoTruePrimaryPi0PhotonPairPtconv(NULL),
+       fHistoTruePrimaryPi0DCPtconv(NULL),
+       fHistoTruePrimaryPi0MissingPtconv(NULL),
+       fHistoTruePrimaryEtaPhotonPairPtconv(NULL),
+       fHistoTruePrimaryEtaDCPtconv(NULL),
+       fHistoTruePrimaryEtaMissingPtconv(NULL),
+       fHistoTrueSecondaryPi0PhotonPairPtconv(NULL),
+       fHistoTrueSecondaryPi0DCPtconv(NULL),
+       fHistoTrueSecondaryPi0MissingPtconv(NULL),
+       fStringRecTruePi0s(NULL),
+       fStringRecTrueEtas(NULL),
        fHistoNEvents(NULL),
        fHistoNGoodESDTracks(NULL),
        fHistoNGammaCandidates(NULL),
@@ -373,11 +456,10 @@ AliAnalysisTaskGammaConvCalo::AliAnalysisTaskGammaConvCalo(const char *name):
        fDoMesonAnalysis(kTRUE),
        fDoMesonQA(0),
        fDoPhotonQA(0),
+       fDoClusterQA(0),
        fIsFromMBHeader(kTRUE),
-       fIsMC(kFALSE),
-       fMinE(0.1),
-       fNminCells(2),
-       fEMCm02cut(0.5)
+       fIsOverlappingWithOtherHeader(kFALSE),
+       fIsMC(kFALSE)
 {
   // Define output slots here
   DefineOutput(1, TList::Class());
@@ -429,13 +511,14 @@ void AliAnalysisTaskGammaConvCalo::InitBack(){
        
        for(Int_t iCut = 0; iCut<fnCuts;iCut++){
                if (((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->DoBGCalculation()){
-                       TString cutstring = ((AliConversionCuts*)fCutArray->At(iCut))->GetCutNumber();
-                       TString cutstringCalo = ((AliCaloPhotonCuts*)fClusterCutArray->At(iCut))->GetCutNumber();
-                       TString cutstringMeson = ((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->GetCutNumber();
+                       TString cutstringEvent  = ((AliConvEventCuts*)fEventCutArray->At(iCut))->GetCutNumber();
+                       TString cutstringPhoton = ((AliConversionPhotonCuts*)fCutArray->At(iCut))->GetCutNumber();
+                       TString cutstringCalo   = ((AliCaloPhotonCuts*)fClusterCutArray->At(iCut))->GetCutNumber();
+                       TString cutstringMeson  = ((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->GetCutNumber();
                        
-                       Int_t collisionSystem = atoi((TString)(((AliConversionCuts*)fCutArray->At(iCut))->GetCutNumber())(0,1));
-                       Int_t centMin = atoi((TString)(((AliConversionCuts*)fCutArray->At(iCut))->GetCutNumber())(1,1));
-                       Int_t centMax = atoi((TString)(((AliConversionCuts*)fCutArray->At(iCut))->GetCutNumber())(2,1));
+                       Int_t collisionSystem = atoi((TString)(((AliConvEventCuts*)fEventCutArray->At(iCut))->GetCutNumber())(0,1));
+                       Int_t centMin = atoi((TString)(((AliConvEventCuts*)fEventCutArray->At(iCut))->GetCutNumber())(1,1));
+                       Int_t centMax = atoi((TString)(((AliConvEventCuts*)fEventCutArray->At(iCut))->GetCutNumber())(2,1));
                        
                        if(collisionSystem == 1 || collisionSystem == 2 ||
                                collisionSystem == 5 || collisionSystem == 8 ||
@@ -452,7 +535,7 @@ void AliAnalysisTaskGammaConvCalo::InitBack(){
                        }
                        
                        fBackList[iCut] = new TList();
-                       fBackList[iCut]->SetName(Form("%s_%s_%s Back histograms",cutstring.Data(),cutstringCalo.Data(), cutstringMeson.Data()));
+                       fBackList[iCut]->SetName(Form("%s_%s_%s_%s Back histograms",cutstringEvent.Data(),cutstringPhoton.Data(),cutstringCalo.Data(), cutstringMeson.Data()));
                        fBackList[iCut]->SetOwner(kTRUE);
                        fCutFolder[iCut]->Add(fBackList[iCut]);
                        
@@ -460,7 +543,7 @@ void AliAnalysisTaskGammaConvCalo::InitBack(){
                        fBackList[iCut]->Add(fSparseMotherBackInvMassPtZM[iCut]);
                        
                        fMotherList[iCut] = new TList();
-                       fMotherList[iCut]->SetName(Form("%s_%s_%s Mother histograms",cutstring.Data(),cutstringCalo.Data(),cutstringMeson.Data()));
+                       fMotherList[iCut]->SetName(Form("%s_%s_%s_%s Mother histograms",cutstringEvent.Data(),cutstringPhoton.Data(),cutstringCalo.Data(),cutstringMeson.Data()));
                        fMotherList[iCut]->SetOwner(kTRUE);
                        fCutFolder[iCut]->Add(fMotherList[iCut]);
                        
@@ -471,19 +554,21 @@ void AliAnalysisTaskGammaConvCalo::InitBack(){
                                fBGHandler[iCut] = new AliGammaConversionAODBGHandler(
                                                                                                                                        collisionSystem,centMin,centMax,
                                                                                                                                        ((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->GetNumberOfBGEvents(),
-                                                                                                                                       ((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->UseTrackMultiplicity());
+                                                                                                                                       ((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->UseTrackMultiplicity(),
+                                                                                                                                       2,8,7);
                                fBGClusHandler[iCut] = new AliGammaConversionAODBGHandler(
                                                                                                                                        collisionSystem,centMin,centMax,
                                                                                                                                        ((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->GetNumberOfBGEvents(),
-                                                                                                                                       ((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->UseTrackMultiplicity());
+                                                                                                                                       ((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->UseTrackMultiplicity(),
+                                                                                                                                       2,8,7);
                                fBGHandlerRP[iCut] = NULL;
                        } else{
                                fBGHandlerRP[iCut] = new AliConversionAODBGHandlerRP(
-                                                                                                                                       ((AliConversionCuts*)fCutArray->At(fiCut))->IsHeavyIon(),
+                                                                                                                                       ((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsHeavyIon(),
                                                                                                                                        ((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->UseTrackMultiplicity(),
                                                                                                                                        ((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->GetNumberOfBGEvents());
                                fBGClusHandlerRP[iCut] = new AliConversionAODBGHandlerRP(
-                                                                                                                                       ((AliConversionCuts*)fCutArray->At(fiCut))->IsHeavyIon(),
+                                                                                                                                       ((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsHeavyIon(),
                                                                                                                                        ((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->UseTrackMultiplicity(),
                                                                                                                                        ((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->GetNumberOfBGEvents());
                                fBGHandler[iCut] = NULL;
@@ -531,12 +616,11 @@ void AliAnalysisTaskGammaConvCalo::UserCreateOutputObjects(){
        
        if(fDoMesonAnalysis){
                fHistoMotherInvMassPt = new TH2F*[fnCuts];
+               fHistoMotherMatchedInvMassPt = new TH2F*[fnCuts];
                fHistoMotherBackInvMassPt = new TH2F*[fnCuts];
                fHistoMotherInvMassEalpha = new TH2F*[fnCuts];
-               if (fDoMesonQA == 2){
-                       fMesonDCAList = new TList*[fnCuts];
-                       fTreeMesonsInvMassPtDcazMinDcazMaxFlag = new TTree*[fnCuts];
-               }
+               fHistoPhotonPairPtconv = new TH2F*[fnCuts];
+               fHistoPhotonPairMixedEventPtconv = new TH2F*[fnCuts];
                if (fDoMesonQA > 0){
                        fHistoMotherPi0PtY =  new TH2F*[fnCuts];
                        fHistoMotherEtaPtY =  new TH2F*[fnCuts];
@@ -544,42 +628,42 @@ void AliAnalysisTaskGammaConvCalo::UserCreateOutputObjects(){
                        fHistoMotherEtaPtAlpha =  new TH2F*[fnCuts];
                        fHistoMotherPi0PtOpenAngle =  new TH2F*[fnCuts];
                        fHistoMotherEtaPtOpenAngle =  new TH2F*[fnCuts];
+            fHistoMotherPi0ConvPhotonEtaPhi = new TH2F*[fnCuts];
+            fHistoMotherEtaConvPhotonEtaPhi = new TH2F*[fnCuts];
+               }
+               if(fDoMesonQA == 1){
+                       fHistoMotherInvMassECalib = new TH2F*[fnCuts];
+                       fHistoMotherInvMassECalibalpha = new TH2F*[fnCuts];
                }
        }
-       fTagOutputList = new TList*[fnCuts];
-       
-       fHistoConvGammaUntagged = new TH1F*[fnCuts];
-       fHistoConvGammaTagged = new TH1F*[fnCuts];
-       fHistoConvGammaPi0Tagged = new TH1F*[fnCuts];
-       fHistoConvGammaEtaTagged = new TH1F*[fnCuts];
-       fHistoPhotonPairAll = new TH2F*[fnCuts];
-       fHistoPhotonPairAllGam = new TH2F*[fnCuts];
        
+       fClusterOutputList = new TList*[fnCuts];
        fHistoClusGammaPt = new TH1F*[fnCuts];
-       
-       for(Int_t iCut = 0; iCut<fnCuts;iCut++){
+       fHistoClusOverlapHeadersGammaPt = new TH1F*[fnCuts];
 
-               TString cutstring = ((AliConversionCuts*)fCutArray->At(iCut))->GetCutNumber();
-               TString cutstringCalo = ((AliCaloPhotonCuts*)fClusterCutArray->At(iCut))->GetCutNumber();
-               TString cutstringMeson = "NoMesonCut";
+       for(Int_t iCut = 0; iCut<fnCuts;iCut++){
+               TString cutstringEvent  = ((AliConvEventCuts*)fEventCutArray->At(iCut))->GetCutNumber();
+               TString cutstringPhoton = ((AliConversionPhotonCuts*)fCutArray->At(iCut))->GetCutNumber();
+               TString cutstringCalo   = ((AliCaloPhotonCuts*)fClusterCutArray->At(iCut))->GetCutNumber();
+               TString cutstringMeson  = "NoMesonCut";
                if(fDoMesonAnalysis)cutstringMeson = ((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->GetCutNumber();
     
                fCutFolder[iCut] = new TList();
-               fCutFolder[iCut]->SetName(Form("Cut Number %s_%s_%s",cutstring.Data(),cutstringCalo.Data(),cutstringMeson.Data()));
+               fCutFolder[iCut]->SetName(Form("Cut Number %s_%s_%s_%s",cutstringEvent.Data(),cutstringPhoton.Data(),cutstringCalo.Data(),cutstringMeson.Data()));
                fCutFolder[iCut]->SetOwner(kTRUE);
                fOutputContainer->Add(fCutFolder[iCut]);
                fESDList[iCut] = new TList();
-               fESDList[iCut]->SetName(Form("%s_%s_%s ESD histograms",cutstring.Data(),cutstringCalo.Data(),cutstringMeson.Data()));
+               fESDList[iCut]->SetName(Form("%s_%s_%s_%s ESD histograms",cutstringEvent.Data(),cutstringPhoton.Data(),cutstringCalo.Data(),cutstringMeson.Data()));
                fESDList[iCut]->SetOwner(kTRUE);
                fCutFolder[iCut]->Add(fESDList[iCut]);
     
-               fHistoNEvents[iCut] = new TH1I("NEvents","NEvents",9,-0.5,8.5);
+               fHistoNEvents[iCut] = new TH1I("NEvents","NEvents",10,-0.5,9.5);
                fHistoNEvents[iCut]->GetXaxis()->SetBinLabel(1,"Accepted");
                fHistoNEvents[iCut]->GetXaxis()->SetBinLabel(2,"Centrality");
                fHistoNEvents[iCut]->GetXaxis()->SetBinLabel(3,"Missing MC");
-               if (((AliConversionCuts*)fCutArray->At(iCut))->IsSpecialTrigger() == 4 ){
+               if (((AliConvEventCuts*)fEventCutArray->At(iCut))->IsSpecialTrigger() > 1 ){ 
                        TString TriggerNames = "Not Trigger: ";
-                       TriggerNames = TriggerNames+ ( (AliConversionCuts*)fCutArray->At(iCut))->GetSpecialTriggerName();
+                       TriggerNames = TriggerNames+ ( (AliConvEventCuts*)fEventCutArray->At(iCut))->GetSpecialTriggerName();
                        fHistoNEvents[iCut]->GetXaxis()->SetBinLabel(4,TriggerNames.Data());
                } else {
                        fHistoNEvents[iCut]->GetXaxis()->SetBinLabel(4,"Trigger");
@@ -589,43 +673,49 @@ void AliAnalysisTaskGammaConvCalo::UserCreateOutputObjects(){
                fHistoNEvents[iCut]->GetXaxis()->SetBinLabel(7,"Pile-Up");
                fHistoNEvents[iCut]->GetXaxis()->SetBinLabel(8,"no SDD");
                fHistoNEvents[iCut]->GetXaxis()->SetBinLabel(9,"no V0AND");
+               fHistoNEvents[iCut]->GetXaxis()->SetBinLabel(10,"EMCAL problem");
                fESDList[iCut]->Add(fHistoNEvents[iCut]);
                
                if(fIsHeavyIon == 1) fHistoNGoodESDTracks[iCut] = new TH1I("GoodESDTracks","GoodESDTracks",4000,0,4000);
                else if(fIsHeavyIon == 2) fHistoNGoodESDTracks[iCut] = new TH1I("GoodESDTracks","GoodESDTracks",400,0,400);
                else fHistoNGoodESDTracks[iCut] = new TH1I("GoodESDTracks","GoodESDTracks",200,0,200);
+               fHistoNGoodESDTracks[iCut]->SetXTitle("# TPC tracks");
                fESDList[iCut]->Add(fHistoNGoodESDTracks[iCut]);
+               
                if(fIsHeavyIon == 1) fHistoNGammaCandidates[iCut] = new TH1I("GammaCandidates","GammaCandidates",100,0,100);
                else if(fIsHeavyIon == 2) fHistoNGammaCandidates[iCut] = new TH1I("GammaCandidates","GammaCandidates",50,0,50);
                else fHistoNGammaCandidates[iCut] = new TH1I("GammaCandidates","GammaCandidates",50,0,50);
+               fHistoNGammaCandidates[iCut]->SetXTitle("# accepted $#gamma_{conv}");
                fESDList[iCut]->Add(fHistoNGammaCandidates[iCut]);
+               
                if(fIsHeavyIon == 1) fHistoNGoodESDTracksVsNGammaCanditates[iCut] = new TH2F("GoodESDTracksVsGammaCandidates","GoodESDTracksVsGammaCandidates",4000,0,4000,100,0,100);
                else if(fIsHeavyIon == 2) fHistoNGoodESDTracksVsNGammaCanditates[iCut] = new TH2F("GoodESDTracksVsGammaCandidates","GoodESDTracksVsGammaCandidates",400,0,400,50,0,50);
                else fHistoNGoodESDTracksVsNGammaCanditates[iCut] = new TH2F("GoodESDTracksVsGammaCandidates","GoodESDTracksVsGammaCandidates",200,0,200,50,0,50);
+               fHistoNGoodESDTracksVsNGammaCanditates[iCut]->SetXTitle("# TPC tracks");
+               fHistoNGoodESDTracksVsNGammaCanditates[iCut]->SetYTitle("# accepted $#gamma_{conv}");
                fESDList[iCut]->Add(fHistoNGoodESDTracksVsNGammaCanditates[iCut]);
     
                
                if(fIsHeavyIon == 1) fHistoNV0Tracks[iCut] = new TH1I("V0 Multiplicity","V0 Multiplicity",30000,0,30000);
                else if(fIsHeavyIon == 2) fHistoNV0Tracks[iCut] = new TH1I("V0 Multiplicity","V0 Multiplicity",2500,0,2500);
                else fHistoNV0Tracks[iCut] = new TH1I("V0 Multiplicity","V0 Multiplicity",1500,0,1500);
+               fHistoNV0Tracks[iCut]->SetXTitle("VZERO amp [arb. units]");
                fESDList[iCut]->Add(fHistoNV0Tracks[iCut]);
                fProfileEtaShift[iCut] = new TProfile("Eta Shift","Eta Shift",1, -0.5,0.5);
                fESDList[iCut]->Add(fProfileEtaShift[iCut]);
                fHistoConvGammaPt[iCut] = new TH1F("ESD_ConvGamma_Pt","ESD_ConvGamma_Pt",250,0,25);
+               fHistoConvGammaPt[iCut]->SetXTitle("p_{T,conv} (GeV/c)");
                fESDList[iCut]->Add(fHistoConvGammaPt[iCut]);
     
                if (fDoPhotonQA == 2){
                        fPhotonDCAList[iCut] = new TList();
-                       fPhotonDCAList[iCut]->SetName(Form("%s_%s_%s Photon DCA tree",cutstring.Data(),cutstringCalo.Data(),cutstringMeson.Data()));
+                       fPhotonDCAList[iCut]->SetName(Form("%s_%s_%s_%s Photon DCA tree",cutstringEvent.Data(),cutstringPhoton.Data(),cutstringCalo.Data(),cutstringMeson.Data()));
                        fPhotonDCAList[iCut]->SetOwner(kTRUE);
                        fCutFolder[iCut]->Add(fPhotonDCAList[iCut]);
       
                        fTreeConvGammaPtDcazCat[iCut] = new TTree("ESD_ConvGamma_Pt_Dcaz_R_Eta","ESD_ConvGamma_Pt_Dcaz_R_Eta_Cat");
                        fTreeConvGammaPtDcazCat[iCut]->Branch("Pt",&fPtGamma,"fPtGamma/F");
-                       fTreeConvGammaPtDcazCat[iCut]->Branch("DcaZPhoton",&fDCAzPhoton,"fDCAzPhoton/F");
-      //          fTreeConvGammaPtDcazCat[iCut]->Branch("R",&fRConvPhoton,"fRConvPhoton/F");
-      //          fTreeConvGammaPtDcazCat[iCut]->Branch("Eta",&fEtaPhoton,"fEtaPhoton/F");
-                       
+                       fTreeConvGammaPtDcazCat[iCut]->Branch("DcaZPhoton",&fDCAzPhoton,"fDCAzPhoton/F");                       
                        fTreeConvGammaPtDcazCat[iCut]->Branch("cat",&fCharCatPhoton,"fCharCatPhoton/b");
                        if(fIsMC){
                                fTreeConvGammaPtDcazCat[iCut]->Branch("photonMCInfo",&fCharPhotonMCInfo,"fCharPhotonMCInfo/b");
@@ -635,102 +725,107 @@ void AliAnalysisTaskGammaConvCalo::UserCreateOutputObjects(){
     
                if (fDoPhotonQA > 0){
                        fHistoConvGammaR[iCut] = new TH1F("ESD_ConvGamma_R","ESD_ConvGamma_R",800,0,200);
+                       fHistoConvGammaR[iCut]->SetXTitle("R_{conv} (cm)");
                        fESDList[iCut]->Add(fHistoConvGammaR[iCut]);
                        fHistoConvGammaEta[iCut] = new TH1F("ESD_ConvGamma_Eta","ESD_ConvGamma_Eta",2000,-2,2);
+                       fHistoConvGammaEta[iCut]->SetXTitle("#eta_{conv}");
                        fESDList[iCut]->Add(fHistoConvGammaEta[iCut]);
                }
 
-               fTagOutputList[iCut] = new TList();
-               fTagOutputList[iCut]->SetName(Form("Tagging Output Cut Number %s_%s_%s",cutstring.Data(),cutstringCalo.Data(),cutstringMeson.Data()));
-               fTagOutputList[iCut]->SetOwner(1);
-               fCutFolder[iCut]->Add(fTagOutputList[iCut]);
-               
-               const Int_t nptbins = 200;
-               const Double_t ptmin = 0.;
-               const Double_t ptmax = 20.;
-               
-               const Int_t nmbins = 180;
-               const Double_t mmin = 0.;
-               const Double_t mmax = 0.9;
-               
-               // photon candidates
-               // this is maybe not necessary ...
-                       
-               fHistoConvGammaUntagged[iCut] = new TH1F("ConvGammaUntagged","",nptbins,ptmin,ptmax);
-               fHistoConvGammaUntagged[iCut]->SetXTitle("p_{T} (GeV/c)");
-               fTagOutputList[iCut]->Add(fHistoConvGammaUntagged[iCut]);
-               
-               fHistoConvGammaTagged[iCut] = new TH1F("ConvGammaTagged","",nptbins,ptmin,ptmax);
-               fHistoConvGammaTagged[iCut]->SetXTitle("p_{T} (GeV/c)");
-               fTagOutputList[iCut]->Add(fHistoConvGammaTagged[iCut]);
-               
-               fHistoConvGammaPi0Tagged[iCut] = new TH1F("ConvGammaPi0Tagged","",nptbins,ptmin,ptmax);
-               fHistoConvGammaPi0Tagged[iCut]->SetXTitle("p_{T} (GeV/c)");
-               fTagOutputList[iCut]->Add(fHistoConvGammaPi0Tagged[iCut]);
+               fClusterOutputList[iCut] = new TList();
+               fClusterOutputList[iCut]->SetName(Form("%s_%s_%s_%s Cluster Output",cutstringEvent.Data(),cutstringPhoton.Data(),cutstringCalo.Data(),cutstringMeson.Data()));
+               fClusterOutputList[iCut]->SetOwner(1);
+               fCutFolder[iCut]->Add(fClusterOutputList[iCut]);
                
-               fHistoConvGammaEtaTagged[iCut] = new TH1F("ConvGammaEtaTagged","",nptbins,ptmin,ptmax);
-               fHistoConvGammaEtaTagged[iCut]->SetXTitle("p_{T} (GeV/c)");
-               fTagOutputList[iCut]->Add(fHistoConvGammaEtaTagged[iCut]);
-               
-               // pairs
-               fHistoPhotonPairAll[iCut] = new TH2F("PhotonPairAll","",nmbins,mmin,mmax,nptbins,ptmin,ptmax);
-               fHistoPhotonPairAll[iCut]->SetXTitle("M_{inv} (GeV/cc)");
-               fHistoPhotonPairAll[iCut]->SetYTitle("p_{T} (GeV/c)");
-               fTagOutputList[iCut]->Add(fHistoPhotonPairAll[iCut]);
-               
-               fHistoPhotonPairAllGam[iCut] = new TH2F("PhotonPairAllGammaConvPt","",nmbins,mmin,mmax,nptbins,ptmin,ptmax);
-               fHistoPhotonPairAllGam[iCut]->SetXTitle("M_{inv} (GeV/cc)");
-               fHistoPhotonPairAllGam[iCut]->SetYTitle("#gamma^{conv} p_{T} (GeV/c)");
-               fTagOutputList[iCut]->Add(fHistoPhotonPairAllGam[iCut]);
-       
                fHistoClusGammaPt[iCut] = new TH1F("ClusGamma_Pt","ClusGamma_Pt",250,0,25);
-               fTagOutputList[iCut]->Add(fHistoClusGammaPt[iCut]);
+               fHistoClusGammaPt[iCut]->SetXTitle("p_{T,clus} (GeV/c)");
+               fClusterOutputList[iCut]->Add(fHistoClusGammaPt[iCut]);
+               fHistoClusOverlapHeadersGammaPt[iCut] = new TH1F("ClusGammaOverlapHeaders_Pt","ClusGammaOverlapHeaders_Pt",250,0,25);
+               fHistoClusOverlapHeadersGammaPt[iCut]->SetXTitle("p_{T,clus} (GeV/c), selected header w/ overlap");
+               fClusterOutputList[iCut]->Add(fHistoClusOverlapHeadersGammaPt[iCut]);
 
-               
                if(fDoMesonAnalysis){
                        fHistoMotherInvMassPt[iCut] = new TH2F("ESD_Mother_InvMass_Pt","ESD_Mother_InvMass_Pt",800,0,0.8,250,0,25);
+                       fHistoMotherInvMassPt[iCut]->SetXTitle("M_{inv} (GeV/c^{2})");
+                       fHistoMotherInvMassPt[iCut]->SetYTitle("p_{T,pair} (GeV/c)");
                        fESDList[iCut]->Add(fHistoMotherInvMassPt[iCut]);
+                       
+                       fHistoMotherMatchedInvMassPt[iCut] = new TH2F("ESD_MotherMatched_InvMass_Pt","ESD_MotherMatched_InvMass_Pt",800,0,0.8,250,0,25);
+                       fHistoMotherMatchedInvMassPt[iCut]->SetXTitle("M_{inv} (GeV/c^{2}) matched conv e^{+/-} to cluster");
+                       fHistoMotherMatchedInvMassPt[iCut]->SetYTitle("p_{T,pair} (GeV/c)");
+                       fESDList[iCut]->Add(fHistoMotherMatchedInvMassPt[iCut]);
+                       
                        fHistoMotherBackInvMassPt[iCut] = new TH2F("ESD_Background_InvMass_Pt","ESD_Background_InvMass_Pt",800,0,0.8,250,0,25);
+                       fHistoMotherBackInvMassPt[iCut]->SetXTitle("M_{inv, mxed} (GeV/c^{2})");
+                       fHistoMotherBackInvMassPt[iCut]->SetYTitle("p_{T,BG pair} (GeV/c)");
                        fESDList[iCut]->Add(fHistoMotherBackInvMassPt[iCut]);
+                       
                        fHistoMotherInvMassEalpha[iCut] = new TH2F("ESD_Mother_InvMass_vs_E_alpha","ESD_Mother_InvMass_vs_E_alpha",800,0,0.8,250,0,25);
+                       fHistoMotherInvMassEalpha[iCut]->SetXTitle("M_{inv} (GeV/c^{2})");
+                       fHistoMotherInvMassEalpha[iCut]->SetYTitle("p_{T,pair} (GeV/c)");
                        fESDList[iCut]->Add(fHistoMotherInvMassEalpha[iCut]);
-                       if (fDoMesonQA == 2){
-                               fMesonDCAList[iCut] = new TList();
-                               fMesonDCAList[iCut]->SetName(Form("%s_%s_%s Meson DCA tree",cutstring.Data(),cutstringCalo.Data(),cutstringMeson.Data()));
-                               fMesonDCAList[iCut]->SetOwner(kTRUE);
-                               fCutFolder[iCut]->Add(fMesonDCAList[iCut]);
-                               
-                               fTreeMesonsInvMassPtDcazMinDcazMaxFlag[iCut] = new TTree("ESD_Mesons_InvMass_Pt_DcazMin_DcazMax_Flag","ESD_Mesons_InvMass_Pt_DcazMin_DcazMax_Flag");
-                               fTreeMesonsInvMassPtDcazMinDcazMaxFlag[iCut]->Branch("InvMass",&fInvMass,"fInvMass/F");
-                               fTreeMesonsInvMassPtDcazMinDcazMaxFlag[iCut]->Branch("Pt",&fPt,"fPt/F");
-                               fTreeMesonsInvMassPtDcazMinDcazMaxFlag[iCut]->Branch("DcaZMin",&fDCAzGammaMin,"fDCAzGammaMin/F");
-                               fTreeMesonsInvMassPtDcazMinDcazMaxFlag[iCut]->Branch("DcaZMax",&fDCAzGammaMax,"fDCAzGammaMax/F");
-                               fTreeMesonsInvMassPtDcazMinDcazMaxFlag[iCut]->Branch("kind",&fCharFlag,"fCharFlag/b");
-                               if(fIsMC){
-                                       fTreeMesonsInvMassPtDcazMinDcazMaxFlag[iCut]->Branch("mesonMCInfo",&fCharMesonMCInfo,"fCharMesonMCInfo/b");
-                               }
-                               fMesonDCAList[iCut]->Add(fTreeMesonsInvMassPtDcazMinDcazMaxFlag[iCut]);
+
+                       fHistoPhotonPairPtconv[iCut] = new TH2F("ESD_Mother_InvMass_PtConv","",800,0,0.8,250,0,25);
+                       fHistoPhotonPairPtconv[iCut]->SetXTitle("M_{inv} (GeV/c^{2})");
+                       fHistoPhotonPairPtconv[iCut]->SetYTitle("#gamma^{conv} p_{T} (GeV/c)");
+                       fESDList[iCut]->Add(fHistoPhotonPairPtconv[iCut]);
+
+                       fHistoPhotonPairMixedEventPtconv[iCut] = new TH2F("ESD_Background_InvMass_PtConv","",800,0,0.8,250,0,25);
+                       fHistoPhotonPairMixedEventPtconv[iCut]->SetXTitle("M_{inv,mixed} (GeV/c^{2})");
+                       fHistoPhotonPairMixedEventPtconv[iCut]->SetYTitle("#gamma^{conv} p_{T} (GeV/c)");
+                       fESDList[iCut]->Add(fHistoPhotonPairMixedEventPtconv[iCut]);
+
+                       if(fDoMesonQA == 1){
+                fHistoMotherInvMassECalib[iCut] = new TH2F("ESD_Mother_InvMass_E_Calib","ESD_Mother_InvMass_E_Calib",800,0,0.8,250,0,25);
+                               fHistoMotherInvMassECalib[iCut]->SetXTitle("M_{inv} (GeV/c^{2})");
+                               fHistoMotherInvMassECalib[iCut]->SetYTitle("p_{T,cluster} (GeV/c)");
+                               fESDList[iCut]->Add(fHistoMotherInvMassECalib[iCut]);
                                
+                               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);
+                               fHistoMotherInvMassECalibalpha[iCut]->SetXTitle("M_{inv} (GeV/c^{2})");
+                               fHistoMotherInvMassECalibalpha[iCut]->SetYTitle("p_{T,cluster} (GeV/c)");
+                               fESDList[iCut]->Add(fHistoMotherInvMassECalibalpha[iCut]);
                        }
+
                        if (fDoMesonQA > 0 ){
                                fHistoMotherPi0PtY[iCut] = new TH2F("ESD_MotherPi0_Pt_Y","ESD_MotherPi0_Pt_Y",150,0.03,15.,150,-1.5,1.5);
+                               fHistoMotherPi0PtY[iCut]->SetXTitle("p_{T, #pi^{0} cand} (GeV/c)");
+                               fHistoMotherPi0PtY[iCut]->SetYTitle("y_{#pi^{0} cand}");
                                SetLogBinningXTH2(fHistoMotherPi0PtY[iCut]);
                                fESDList[iCut]->Add(fHistoMotherPi0PtY[iCut]);
-                               fHistoMotherEtaPtY[iCut] = new TH2F("ESD_MotherEta_Pt_Y","ESD_MotherEta_Pt_Y",150,0.03,15.,150,-1.5,1.5);
+                               fHistoMotherEtaPtY[iCut] = new TH2F("ESD_MotaherEta_Pt_Y","ESD_MotherEta_Pt_Y",150,0.03,15.,150,-1.5,1.5);
+                               fHistoMotherEtaPtY[iCut]->SetXTitle("p_{T, #eta cand} (GeV/c)");
+                               fHistoMotherEtaPtY[iCut]->SetYTitle("y_{ #eta cand}");
                                SetLogBinningXTH2(fHistoMotherEtaPtY[iCut]);
                                fESDList[iCut]->Add(fHistoMotherEtaPtY[iCut]);
                                fHistoMotherPi0PtAlpha[iCut] = new TH2F("ESD_MotherPi0_Pt_Alpha","ESD_MotherPi0_Pt_Alpha",150,0.03,15.,100,0,1);
+                               fHistoMotherPi0PtAlpha[iCut]->SetXTitle("p_{T, #pi^{0} cand} (GeV/c)");
+                               fHistoMotherPi0PtAlpha[iCut]->SetYTitle("#alpha_{#pi^{0} cand}");
                                SetLogBinningXTH2(fHistoMotherPi0PtAlpha[iCut]);
                                fESDList[iCut]->Add(fHistoMotherPi0PtAlpha[iCut]);
                                fHistoMotherEtaPtAlpha[iCut] = new TH2F("ESD_MotherEta_Pt_Alpha","ESD_MotherEta_Pt_Alpha",150,0.03,15.,100,0,1);
+                               fHistoMotherEtaPtAlpha[iCut]->SetXTitle("p_{T, #eta cand} (GeV/c)");
+                               fHistoMotherEtaPtAlpha[iCut]->SetYTitle("#alpha_{#eta cand}");
                                SetLogBinningXTH2(fHistoMotherEtaPtAlpha[iCut]);
                                fESDList[iCut]->Add(fHistoMotherEtaPtAlpha[iCut]);
-                               fHistoMotherPi0PtOpenAngle[iCut] = new TH2F("ESD_MotherPi0_Pt_OpenAngle","ESD_MotherPi0_Pt_OpenAngle",150,0.03,15.,200,0,2*TMath::Pi());
+                               fHistoMotherPi0PtOpenAngle[iCut] = new TH2F("ESD_MotherPi0_Pt_OpenAngle","ESD_MotherPi0_Pt_OpenAngle",150,0.03,15.,100,0,TMath::Pi());
+                               fHistoMotherPi0PtOpenAngle[iCut]->SetXTitle("p_{T, #pi^{0} cand} (GeV/c)");
+                               fHistoMotherPi0PtOpenAngle[iCut]->SetYTitle("#theta_{#pi^{0} cand}");
                                SetLogBinningXTH2(fHistoMotherPi0PtOpenAngle[iCut]);
                                fESDList[iCut]->Add(fHistoMotherPi0PtOpenAngle[iCut]);
-                               fHistoMotherEtaPtOpenAngle[iCut] = new TH2F("ESD_MotherEta_Pt_OpenAngle","ESD_MotherEta_Pt_OpenAngle",150,0.03,15.,200,0,2*TMath::Pi());
+                               fHistoMotherEtaPtOpenAngle[iCut] = new TH2F("ESD_MotherEta_Pt_OpenAngle","ESD_MotherEta_Pt_OpenAngle",150,0.03,15.,100,0,TMath::Pi());
+                               fHistoMotherEtaPtOpenAngle[iCut]->SetXTitle("p_{T, #eta cand} (GeV/c)");
+                               fHistoMotherEtaPtOpenAngle[iCut]->SetYTitle("#theta_{#eta cand}");
                                SetLogBinningXTH2(fHistoMotherEtaPtOpenAngle[iCut]);
                                fESDList[iCut]->Add(fHistoMotherEtaPtOpenAngle[iCut]);
+                fHistoMotherPi0ConvPhotonEtaPhi[iCut] = new TH2F("ESD_MotherPi0ConvPhoton_Eta_Phi","ConvPhoton under #pi^{0} peak",600,0,2*TMath::Pi(),200,-1,1);
+                               fHistoMotherPi0ConvPhotonEtaPhi[iCut]->SetXTitle("#phi_{#gamma_{conv}} (rad)");
+                               fHistoMotherPi0ConvPhotonEtaPhi[iCut]->SetYTitle("#eta_{#gamma_{conv}}"); 
+                               fESDList[iCut]->Add(fHistoMotherPi0ConvPhotonEtaPhi[iCut]);
+                fHistoMotherEtaConvPhotonEtaPhi[iCut] = new TH2F("ESD_MotherEtaConvPhoton_Eta_Phi","ConvPhoton under #eta peak",600,0,2*TMath::Pi(),200,-1,1);
+                               fHistoMotherEtaConvPhotonEtaPhi[iCut]->SetXTitle("#phi_{#gamma_{conv}} (rad)");
+                               fHistoMotherEtaConvPhotonEtaPhi[iCut]->SetYTitle("#eta_{#gamma_{conv}}");
+                               fESDList[iCut]->Add(fHistoMotherEtaConvPhotonEtaPhi[iCut]);
                        }
                }    
        }
@@ -740,103 +835,152 @@ void AliAnalysisTaskGammaConvCalo::UserCreateOutputObjects(){
   
        if(fIsMC){
                // MC Histogramms
-               fMCList = new TList*[fnCuts];
+               fMCList         = new TList*[fnCuts];
                // True Histogramms
-               fTrueList = new TList*[fnCuts];
+               fTrueList       = new TList*[fnCuts];
                // Selected Header List
-               fHeaderNameList = new TList*[fnCuts];
-               fHistoMCHeaders = new TH1I*[fnCuts];
-               fHistoMCAllGammaPt = new TH1F*[fnCuts];
-               fHistoMCDecayGammaPi0Pt = new TH1F*[fnCuts];
-               fHistoMCDecayGammaRhoPt = new TH1F*[fnCuts];
-               fHistoMCDecayGammaEtaPt = new TH1F*[fnCuts];
-               fHistoMCDecayGammaOmegaPt = new TH1F*[fnCuts];
-               fHistoMCDecayGammaEtapPt = new TH1F*[fnCuts];
-               fHistoMCDecayGammaPhiPt = new TH1F*[fnCuts];
-               fHistoMCDecayGammaSigmaPt = new TH1F*[fnCuts];
-               fHistoMCConvGammaPt = new TH1F*[fnCuts];
-               fHistoTrueConvGammaPt = new TH1F*[fnCuts];
-               fHistoTrueConvPi0GammaPt = new TH1F*[fnCuts];
+               fHeaderNameList                                         = new TList*[fnCuts];
+               fHistoMCHeaders                                         = new TH1I*[fnCuts];
+               fHistoMCAllGammaPt                                      = new TH1F*[fnCuts];
+               fHistoMCAllGammaEMCALAccPt                      = new TH1F*[fnCuts];
+               fHistoMCDecayGammaPi0Pt                         = new TH1F*[fnCuts];
+               fHistoMCDecayGammaRhoPt                         = new TH1F*[fnCuts];
+               fHistoMCDecayGammaEtaPt                         = new TH1F*[fnCuts];
+               fHistoMCDecayGammaOmegaPt                       = new TH1F*[fnCuts];
+               fHistoMCDecayGammaEtapPt                        = new TH1F*[fnCuts];
+               fHistoMCDecayGammaPhiPt                         = new TH1F*[fnCuts];
+               fHistoMCDecayGammaSigmaPt                       = new TH1F*[fnCuts];
+               fHistoMCConvGammaPt                             = new TH1F*[fnCuts];
+               fHistoTrueConvGammaPt                           = new TH1F*[fnCuts];
+               fHistoTrueConvPi0GammaPt                        = new TH1F*[fnCuts];
     
-               fHistoCombinatorialPt = new TH2F*[fnCuts];
-               fHistoTruePrimaryConvGammaPt = new TH1F*[fnCuts];
-               fHistoTruePrimaryConvGammaESDPtMCPt = new TH2F*[fnCuts];
-               fHistoTrueSecondaryConvGammaPt = new TH1F*[fnCuts];
-               fHistoTrueSecondaryConvGammaFromXFromK0sPt = new TH1F*[fnCuts];
-               fHistoTrueSecondaryConvGammaFromXFromLambdaPt = new TH1F*[fnCuts];
+               fHistoCombinatorialPt                                                   = new TH2F*[fnCuts];
+               fHistoTruePrimaryConvGammaPt                                    = new TH1F*[fnCuts];
+               fHistoTruePrimaryConvGammaESDPtMCPt                     = new TH2F*[fnCuts];
+               fHistoTrueSecondaryConvGammaPt                                  = new TH1F*[fnCuts];
+               fHistoTrueSecondaryConvGammaFromXFromK0sPt              = new TH1F*[fnCuts];
+               fHistoTrueSecondaryConvGammaFromXFromLambdaPt   = new TH1F*[fnCuts];
     
-               fHistoTrueDalitzPsiPairDeltaPhi= new TH2F*[fnCuts];
-               fHistoTrueGammaPsiPairDeltaPhi= new TH2F*[fnCuts];
-
-               fHistoTrueClusGammaPt = new TH1F*[fnCuts];
-               fHistoTruePrimaryClusGammaPt = new TH1F*[fnCuts];
+               fHistoTrueClusGammaPt                           = new TH1F*[fnCuts];
+               fHistoTruePrimaryClusGammaPt            = new TH1F*[fnCuts];
                fHistoTruePrimaryClusGammaESDPtMCPt = new TH2F*[fnCuts];
 
                if (fDoPhotonQA > 0){
-                       fHistoMCConvGammaR = new TH1F*[fnCuts];
-                       fHistoMCConvGammaEta = new TH1F*[fnCuts];
-                       fHistoTrueConvGammaEta = new TH1F*[fnCuts];
+                       fHistoMCConvGammaR                                      = new TH1F*[fnCuts];
+                       fHistoMCConvGammaEta                            = new TH1F*[fnCuts];
+                       fHistoTrueConvGammaEta                          = new TH1F*[fnCuts];
+               }
+               if (fDoClusterQA > 0){  
+                       fHistoTrueClusUnConvGammaPt             = new TH1F*[fnCuts];
+                       fHistoTrueClusUnConvGammaMCPt           = new TH1F*[fnCuts];
+                       fHistoTrueClusElectronPt                        = new TH1F*[fnCuts];
+                       fHistoTrueClusConvGammaPt                       = new TH1F*[fnCuts];
+                       fHistoTrueClusConvGammaMCPt                     = new TH1F*[fnCuts];
+                       fHistoTrueClusConvGammaFullyPt          = new TH1F*[fnCuts];
+                       fHistoTrueClusMergedGammaPt             = new TH1F*[fnCuts];
+                       fHistoTrueClusMergedPartConvGammaPt = new TH1F*[fnCuts];
+                       fHistoTrueClusDalitzPt                          = new TH1F*[fnCuts];
+                       fHistoTrueClusDalitzMergedPt            = new TH1F*[fnCuts];
+                       fHistoTrueClusPhotonFromElecMotherPt= new TH1F*[fnCuts];
+                       fHistoTrueClusShowerPt                          = new TH1F*[fnCuts];
+                       fHistoTrueClusSubLeadingPt                      = new TH1F*[fnCuts];
+                       fHistoTrueClusNParticles                        = new TH1I*[fnCuts];
+                       fHistoTrueClusEMNonLeadingPt            = new TH1F*[fnCuts];
+                       fHistoTrueNLabelsInClus                         = new TH1F*[fnCuts];                    
                }
     
                if(fDoMesonAnalysis){
-                       fHistoMCPi0Pt = new TH1F*[fnCuts];
-                       fHistoMCPi0WOWeightPt = new TH1F*[fnCuts];
-                       fHistoMCEtaPt = new TH1F*[fnCuts];
-                       fHistoMCEtaWOWeightPt = new TH1F*[fnCuts];
-                       fHistoMCPi0InAccPt = new TH1F*[fnCuts];
-                       fHistoMCEtaInAccPt = new TH1F*[fnCuts];
+                       fHistoMCPi0Pt                                   = new TH1F*[fnCuts];
+                       fHistoMCPi0WOWeightPt                   = new TH1F*[fnCuts];
+                       fHistoMCEtaPt                                   = new TH1F*[fnCuts];
+                       fHistoMCEtaWOWeightPt                   = new TH1F*[fnCuts];
+                       fHistoMCPi0InAccPt                              = new TH1F*[fnCuts];
+                       fHistoMCEtaInAccPt                              = new TH1F*[fnCuts];
       
-                       fHistoTrueMotherInvMassPt = new TH2F*[fnCuts];
-                       fHistoTruePrimaryMotherInvMassPt = new TH2F*[fnCuts];
-                       fHistoTruePrimaryMotherW0WeightingInvMassPt = new TH2F*[fnCuts];
-                       fProfileTruePrimaryMotherWeightsInvMassPt = new TProfile2D*[fnCuts];
-                       fHistoTrueSecondaryMotherInvMassPt = new TH2F*[fnCuts];
-                       fHistoTrueSecondaryMotherFromK0sInvMassPt = new TH2F*[fnCuts];
-                       fHistoTrueSecondaryMotherFromEtaInvMassPt = new TH2F*[fnCuts];
-                       fHistoTrueSecondaryMotherFromLambdaInvMassPt = new TH2F*[fnCuts];
-                       fHistoTrueMotherDalitzInvMassPt = new TH2F*[fnCuts];
+                       fHistoTruePi0InvMassPt                                          = new TH2F*[fnCuts];
+                       fHistoTrueEtaInvMassPt                                          = new TH2F*[fnCuts];
+                       fHistoTruePrimaryPi0InvMassPt                           = new TH2F*[fnCuts];
+                       fHistoTruePrimaryEtaInvMassPt                           = new TH2F*[fnCuts];
+                       fHistoTruePrimaryPi0W0WeightingInvMassPt        = new TH2F*[fnCuts];
+                       fHistoTruePrimaryEtaW0WeightingInvMassPt        = new TH2F*[fnCuts];
+                       fProfileTruePrimaryPi0WeightsInvMassPt          = new TProfile2D*[fnCuts];
+                       fProfileTruePrimaryEtaWeightsInvMassPt          = new TProfile2D*[fnCuts];
+                       fHistoTrueSecondaryPi0InvMassPt                         = new TH2F*[fnCuts];
+                       fHistoTrueSecondaryPi0FromK0sInvMassPt          = new TH2F*[fnCuts];
+                       fHistoTrueSecondaryPi0FromEtaInvMassPt          = new TH2F*[fnCuts];
+                       fHistoTrueSecondaryPi0FromLambdaInvMassPt       = new TH2F*[fnCuts];
+                       fHistoTruePrimaryPi0PhotonPairPtconv            = new TH2F*[fnCuts];
+                       fHistoTrueSecondaryPi0PhotonPairPtconv          = new TH2F*[fnCuts];
+                       fHistoTruePrimaryEtaPhotonPairPtconv            = new TH2F*[fnCuts];
+                       fHistoTruePrimaryPi0DCPtconv                            = new TH1F*[fnCuts];
+                       fHistoTrueSecondaryPi0DCPtconv                          = new TH1F*[fnCuts];
+                       fHistoTruePrimaryEtaDCPtconv                            = new TH1F*[fnCuts];
+                       fHistoTruePrimaryPi0MissingPtconv                       = new TH1F*[fnCuts];
+                       fHistoTrueSecondaryPi0MissingPtconv             = new TH1F*[fnCuts];
+                       fHistoTruePrimaryEtaMissingPtconv                       = new TH1F*[fnCuts];
+                       fStringRecTruePi0s                                                      = new TString[fnCuts];
+                       fStringRecTrueEtas                                                      = new TString[fnCuts];
+                       
                        if (fDoMesonQA > 0){
-                               fHistoMCPi0PtY = new TH2F*[fnCuts];
-                               fHistoMCEtaPtY = new TH2F*[fnCuts];
-                               fHistoMCK0sPt = new TH1F*[fnCuts];
-                               fHistoMCK0sWOWeightPt = new TH1F*[fnCuts];
-                               fHistoMCK0sPtY = new TH2F*[fnCuts];
-                               fHistoMCSecPi0PtvsSource= new TH2F*[fnCuts];
-                               fHistoMCSecPi0Source = new TH1F*[fnCuts];
-                               fHistoMCSecEtaPt = new TH1F*[fnCuts];
-                               fHistoMCSecEtaSource = new TH1F*[fnCuts];
-                               fHistoTruePrimaryPi0MCPtResolPt = new TH2F*[fnCuts];
-                               fHistoTruePrimaryEtaMCPtResolPt = new TH2F*[fnCuts];
-                               fHistoTrueK0sWithPi0DaughterMCPt = new TH1F*[fnCuts];
-                               fHistoTrueEtaWithPi0DaughterMCPt = new TH1F*[fnCuts];
-                               fHistoTrueLambdaWithPi0DaughterMCPt = new TH1F*[fnCuts];
-                               fHistoTrueBckGGInvMassPt = new TH2F*[fnCuts];
-                               fHistoTrueBckContInvMassPt = new TH2F*[fnCuts];
-                               fHistoTruePi0PtY = new TH2F*[fnCuts];
-                               fHistoTrueEtaPtY = new TH2F*[fnCuts];
-                               fHistoTruePi0PtAlpha = new TH2F*[fnCuts];
-                               fHistoTrueEtaPtAlpha = new TH2F*[fnCuts];
-                               fHistoTruePi0PtOpenAngle = new TH2F*[fnCuts];
-                               fHistoTrueEtaPtOpenAngle = new TH2F*[fnCuts];
-                       }
-               }
-    
-    
-    
+                               fHistoMCPi0PtY                                                          = new TH2F*[fnCuts];
+                               fHistoMCEtaPtY                                                          = new TH2F*[fnCuts];
+                               fHistoMCPi0PtAlpha                                                      = new TH2F*[fnCuts];
+                               fHistoMCEtaPtAlpha                                                      = new TH2F*[fnCuts];
+                               fHistoMCK0sPt                                                           = new TH1F*[fnCuts];
+                               fHistoMCK0sWOWeightPt                                           = new TH1F*[fnCuts];
+                               fHistoMCK0sPtY                                                          = new TH2F*[fnCuts];
+                               fHistoMCSecPi0PtvsSource                                        = new TH2F*[fnCuts];
+                               fHistoMCSecPi0Source                                            = new TH1F*[fnCuts];
+                               fHistoMCSecEtaPt                                                        = new TH1F*[fnCuts];
+                               fHistoMCSecEtaSource                                            = new TH1F*[fnCuts];
+                               fHistoTruePi0CaloPhotonInvMassPt                        = new TH2F*[fnCuts];
+                               fHistoTrueEtaCaloPhotonInvMassPt                        = new TH2F*[fnCuts];
+                               fHistoTruePi0CaloConvertedPhotonInvMassPt       = new TH2F*[fnCuts];
+                               fHistoTruePi0CaloConvertedPhotonMatchedInvMassPt = new TH2F*[fnCuts];
+                               fHistoTrueEtaCaloConvertedPhotonInvMassPt       = new TH2F*[fnCuts];
+                               fHistoTrueEtaCaloConvertedPhotonMatchedInvMassPt = new TH2F*[fnCuts];
+                               fHistoTruePi0CaloElectronInvMassPt              = new TH2F*[fnCuts];
+                               fHistoTrueEtaCaloElectronInvMassPt              = new TH2F*[fnCuts];
+                               fHistoTruePi0CaloMergedClusterInvMassPt         = new TH2F*[fnCuts];
+                               fHistoTrueEtaCaloMergedClusterInvMassPt         = new TH2F*[fnCuts];
+                               fHistoTruePi0CaloMergedClusterPartConvInvMassPt         = new TH2F*[fnCuts];
+                               fHistoTrueEtaCaloMergedClusterPartConvInvMassPt         = new TH2F*[fnCuts];
+                               fHistoTrueMotherCaloEMNonLeadingInvMassPt       = new TH2F*[fnCuts];
+                               fHistoTruePrimaryPi0MCPtResolPt                         = new TH2F*[fnCuts];
+                               fHistoTruePrimaryEtaMCPtResolPt                         = new TH2F*[fnCuts];
+                               fHistoTrueK0sWithPi0DaughterMCPt                        = new TH1F*[fnCuts];
+                               fHistoTrueEtaWithPi0DaughterMCPt                        = new TH1F*[fnCuts];
+                               fHistoTrueLambdaWithPi0DaughterMCPt             = new TH1F*[fnCuts];
+                               fHistoTrueBckGGInvMassPt                                        = new TH2F*[fnCuts];
+                               fHistoTrueBckContInvMassPt                                      = new TH2F*[fnCuts];
+                               fHistoTruePi0PtY                                                        = new TH2F*[fnCuts];
+                               fHistoTrueEtaPtY                                                        = new TH2F*[fnCuts];
+                               fHistoTruePi0PtAlpha                                            = new TH2F*[fnCuts];
+                               fHistoTrueEtaPtAlpha                                            = new TH2F*[fnCuts];
+                               fHistoTruePi0PtOpenAngle                                        = new TH2F*[fnCuts];
+                               fHistoTrueEtaPtOpenAngle                                        = new TH2F*[fnCuts];
+                fHistoTrueMotherPi0ConvPhotonEtaPhi         = new TH2F*[fnCuts];
+                fHistoTrueMotherEtaConvPhotonEtaPhi                    = new TH2F*[fnCuts];
+                       }
+               }
+     
                for(Int_t iCut = 0; iCut<fnCuts;iCut++){
-                       TString cutstring = ((AliConversionCuts*)fCutArray->At(iCut))->GetCutNumber();
-                       TString cutstringCalo = ((AliCaloPhotonCuts*)fClusterCutArray->At(iCut))->GetCutNumber();
-                       TString cutstringMeson = "NoMesonCut";
+                       TString cutstringEvent  = ((AliConvEventCuts*)fEventCutArray->At(iCut))->GetCutNumber();
+                       TString cutstringPhoton = ((AliConversionPhotonCuts*)fCutArray->At(iCut))->GetCutNumber();
+                       TString cutstringCalo   = ((AliCaloPhotonCuts*)fClusterCutArray->At(iCut))->GetCutNumber();
+                       TString cutstringMeson  = "NoMesonCut";
                        if(fDoMesonAnalysis)cutstringMeson = ((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->GetCutNumber();
       
                        fMCList[iCut] = new TList();
-                       fMCList[iCut]->SetName(Form("%s_%s_%s MC histograms",cutstring.Data(),cutstringCalo.Data(),cutstringMeson.Data()));
+                       fMCList[iCut]->SetName(Form("%s_%s_%s_%s MC histograms",cutstringEvent.Data(),cutstringPhoton.Data(),cutstringCalo.Data(),cutstringMeson.Data()));
                        fMCList[iCut]->SetOwner(kTRUE);
                        fCutFolder[iCut]->Add(fMCList[iCut]);
                        fHistoMCHeaders[iCut] = new TH1I("MC_Headers","MC_Headers",20,0,20);
                        fMCList[iCut]->Add(fHistoMCHeaders[iCut]);
                        fHistoMCAllGammaPt[iCut] = new TH1F("MC_AllGamma_Pt","MC_AllGamma_Pt",250,0,25);
                        fMCList[iCut]->Add(fHistoMCAllGammaPt[iCut]);
+                       fHistoMCAllGammaEMCALAccPt[iCut] = new TH1F("MC_AllGammaEMCALAcc_Pt","MC_AllGammaEMCALAcc_Pt",250,0,25);
+                       fMCList[iCut]->Add(fHistoMCAllGammaEMCALAccPt[iCut]);
                        fHistoMCDecayGammaPi0Pt[iCut] = new TH1F("MC_DecayGammaPi0_Pt","MC_DecayGammaPi0_Pt",250,0,25);
                        fMCList[iCut]->Add(fHistoMCDecayGammaPi0Pt[iCut]);
                        fHistoMCDecayGammaRhoPt[iCut] = new TH1F("MC_DecayGammaRho_Pt","MC_DecayGammaRho_Pt",250,0,25);
@@ -890,6 +1034,13 @@ void AliAnalysisTaskGammaConvCalo::UserCreateOutputObjects(){
                                        fHistoMCEtaPtY[iCut]->Sumw2();
                                        SetLogBinningXTH2(fHistoMCEtaPtY[iCut]);
                                        fMCList[iCut]->Add(fHistoMCEtaPtY[iCut]);
+                                       fHistoMCPi0PtAlpha[iCut] = new TH2F("MC_Pi0_Pt_Alpha","MC_Pi0_Pt_Alpha",150,0.03,15.,100,0,1);
+                                       SetLogBinningXTH2(fHistoMCPi0PtAlpha[iCut]);
+                                       fMCList[iCut]->Add(fHistoMCPi0PtAlpha[iCut]);
+                                       fHistoMCEtaPtAlpha[iCut] = new TH2F("MC_Eta_Pt_Alpha","MC_Eta_Pt_Alpha",150,0.03,15.,100,0,1);
+                                       SetLogBinningXTH2(fHistoMCEtaPtAlpha[iCut]);
+                                       fMCList[iCut]->Add(fHistoMCEtaPtAlpha[iCut]);
+
                                        fHistoMCK0sPt[iCut] = new TH1F("MC_K0s_Pt","MC_K0s_Pt",150,0,15);
                                        fHistoMCK0sPt[iCut]->Sumw2();
                                        fMCList[iCut]->Add(fHistoMCK0sPt[iCut]);
@@ -915,14 +1066,14 @@ void AliAnalysisTaskGammaConvCalo::UserCreateOutputObjects(){
         
                        }
                        fTrueList[iCut] = new TList();
-                       fTrueList[iCut]->SetName(Form("%s_%s_%s True histograms",cutstring.Data(),cutstringCalo.Data(),cutstringMeson.Data()));
+                       fTrueList[iCut]->SetName(Form("%s_%s_%s_%s True histograms",cutstringEvent.Data(),cutstringPhoton.Data(),cutstringCalo.Data(),cutstringMeson.Data()));
                        fTrueList[iCut]->SetOwner(kTRUE);
                        fCutFolder[iCut]->Add(fTrueList[iCut]);
       
                        fHistoTrueConvGammaPt[iCut] = new TH1F("ESD_TrueConvGamma_Pt","ESD_TrueConvGamma_Pt",250,0,25);
                        fTrueList[iCut]->Add(fHistoTrueConvGammaPt[iCut]);
       
-                       fHistoTrueConvPi0GammaPt[iCut] = new TH1F("ESD_TrueConvGamma_Pt","ESD_TrueConvGamma_Pt",250,0,25);
+            fHistoTrueConvPi0GammaPt[iCut] = new TH1F("ESD_TrueConvPi0Gamma_Pt","ESD_TrueConvPi0Gamma_Pt",250,0,25);
                        fTrueList[iCut]->Add(fHistoTrueConvPi0GammaPt[iCut]);
       
                        fHistoCombinatorialPt[iCut] = new TH2F("ESD_TrueCombinatorial_Pt","ESD_TrueCombinatorial_Pt",250,0,25,16,-0.5,15.5);
@@ -952,90 +1103,302 @@ void AliAnalysisTaskGammaConvCalo::UserCreateOutputObjects(){
                        fTrueList[iCut]->Add(fHistoTrueSecondaryConvGammaFromXFromK0sPt[iCut]);
                        fHistoTrueSecondaryConvGammaFromXFromLambdaPt[iCut] = new TH1F("ESD_TrueSecondaryConvGammaFromXFromLambda_Pt", "ESD_TrueSecondaryConvGammaFromXFromLambda_Pt",250,0,25);
                        fTrueList[iCut]->Add(fHistoTrueSecondaryConvGammaFromXFromLambdaPt[iCut]);
-      
-                       fHistoTrueDalitzPsiPairDeltaPhi[iCut] = new TH2F("ESD_TrueDalitzPsiPairDeltaPhi_Pt", "ESD_TrueDalitzPsiPairDeltaPhi_Pt",100,-0.5,2,100,-0.5,0.5);
-                       fTrueList[iCut]->Add(fHistoTrueDalitzPsiPairDeltaPhi[iCut]);
-                       
-                       fHistoTrueGammaPsiPairDeltaPhi[iCut] = new TH2F("ESD_TrueGammaPsiPairDeltaPhi_Pt", "ESD_TrueGammaPsiPairDeltaPhi_Pt",100,-0.5,2,100,-0.5,0.5);
-                       fTrueList[iCut]->Add(fHistoTrueGammaPsiPairDeltaPhi[iCut]);
-      
+                             
                        fHistoTruePrimaryConvGammaESDPtMCPt[iCut] = new TH2F("ESD_TruePrimaryConvGammaESD_PtMCPt", "ESD_TruePrimaryConvGammaESD_PtMCPt",250,0,25,250,0,25);
                        fTrueList[iCut]->Add(fHistoTruePrimaryConvGammaESDPtMCPt[iCut]);
                
-                       fHistoTrueClusGammaPt[iCut] = new TH1F("TrueClusGamma_Pt","ESD_TruePrimaryClusGamma_Pt",250,0,25);
-                       fTagOutputList[iCut]->Add(fHistoTrueClusGammaPt[iCut]);
+                       fHistoTrueClusGammaPt[iCut] = new TH1F("TrueClusGamma_Pt","ESD_TrueClusGamma_Pt",250,0,25);
+                       fClusterOutputList[iCut]->Add(fHistoTrueClusGammaPt[iCut]);
                        fHistoTruePrimaryClusGammaPt[iCut] = new TH1F("TruePrimaryClusGamma_Pt","ESD_TruePrimaryClusGamma_Pt",250,0,25);
-                       fTagOutputList[iCut]->Add(fHistoTruePrimaryClusGammaPt[iCut]);
+                       fClusterOutputList[iCut]->Add(fHistoTruePrimaryClusGammaPt[iCut]);
                        fHistoTruePrimaryClusGammaESDPtMCPt[iCut] = new TH2F("TruePrimaryClusGamma_Pt_MCPt","ESD_TruePrimaryClusGamma_MCPt",250,0,25,250,0,25);
-                       fTagOutputList[iCut]->Add(fHistoTruePrimaryClusGammaESDPtMCPt[iCut]);
+                       fClusterOutputList[iCut]->Add(fHistoTruePrimaryClusGammaESDPtMCPt[iCut]);
+
+                       if (fDoPhotonQA > 0){
+                               fHistoTrueConvGammaEta[iCut] = new TH1F("ESD_TrueConvGamma_Eta","ESD_TrueConvGamma_Eta",2000,-2,2);
+                               fTrueList[iCut]->Add(fHistoTrueConvGammaEta[iCut]);             
+                       }       
+                       if (fDoClusterQA > 0){  
+                               fHistoTrueClusUnConvGammaPt[iCut] = new TH1F("TrueClusUnConvGamma_Pt","TrueClusUnConvGamma_Pt",250,0,25);
+                               fClusterOutputList[iCut]->Add(fHistoTrueClusUnConvGammaPt[iCut]);
+                               fHistoTrueClusUnConvGammaMCPt[iCut] = new TH1F("TrueClusUnConvGamma_MCPt","TrueClusUnConvGamma_MCPt",250,0,25);
+                               fClusterOutputList[iCut]->Add(fHistoTrueClusUnConvGammaMCPt[iCut]);
+                               fHistoTrueClusElectronPt[iCut] = new TH1F("TrueClusElectron_Pt","TrueElectronGamma_Pt",250,0,25);
+                               fClusterOutputList[iCut]->Add(fHistoTrueClusElectronPt[iCut]);
+                               fHistoTrueClusConvGammaPt[iCut] = new TH1F("TrueClusConvGamma_Pt","TrueClusConvGamma_Pt",250,0,25);
+                               fClusterOutputList[iCut]->Add(fHistoTrueClusConvGammaPt[iCut]);
+                               fHistoTrueClusConvGammaMCPt[iCut] = new TH1F("TrueClusConvGamma_MCPt","TrueClusConvGamma_MCPt",250,0,25);
+                               fClusterOutputList[iCut]->Add(fHistoTrueClusConvGammaMCPt[iCut]);
+                               fHistoTrueClusConvGammaFullyPt[iCut] = new TH1F("TrueClusConvGammaFullyContained_Pt","TrueClusConvGammaFullyContained_Pt",250,0,25);
+                               fClusterOutputList[iCut]->Add(fHistoTrueClusConvGammaFullyPt[iCut]);
+                               fHistoTrueClusMergedGammaPt[iCut] = new TH1F("TrueClusMergedGamma_Pt","TrueClusMergedGamma_Pt",250,0,25);
+                               fClusterOutputList[iCut]->Add(fHistoTrueClusMergedGammaPt[iCut]);
+                               fHistoTrueClusMergedPartConvGammaPt[iCut] = new TH1F("TrueClusMergedPartConvGamma_Pt","TrueClusMergedPartConvGamma_Pt",250,0,25);
+                               fClusterOutputList[iCut]->Add(fHistoTrueClusMergedPartConvGammaPt[iCut]);
+                               fHistoTrueClusDalitzPt[iCut] = new TH1F("TrueClusDalitz_Pt","TrueClusDalitz_Pt",250,0,25);
+                               fClusterOutputList[iCut]->Add(fHistoTrueClusDalitzPt[iCut]);
+                               fHistoTrueClusDalitzMergedPt[iCut] = new TH1F("TrueClusDalitzMerged_Pt","TrueClusDalitzMerged_Pt",250,0,25);
+                               fClusterOutputList[iCut]->Add(fHistoTrueClusDalitzMergedPt[iCut]);
+                               fHistoTrueClusPhotonFromElecMotherPt[iCut] = new TH1F("TrueClusPhotonFromElecMother_Pt","TrueClusPhotonFromElecMother_Pt",250,0,25);
+                               fClusterOutputList[iCut]->Add(fHistoTrueClusPhotonFromElecMotherPt[iCut]);
+                               fHistoTrueClusShowerPt[iCut] = new TH1F("TrueClusShower_Pt","TrueClusShower_Pt",250,0,25);
+                               fClusterOutputList[iCut]->Add(fHistoTrueClusShowerPt[iCut]);
+                               fHistoTrueClusSubLeadingPt[iCut] = new TH1F("TrueClusSubleading_Pt","TrueClusSubleading_Pt",250,0,25);
+                               fClusterOutputList[iCut]->Add(fHistoTrueClusSubLeadingPt[iCut]);
+                               fHistoTrueClusNParticles[iCut] = new TH1I("TrueClusNParticles","TrueClusNParticles",20,0,20);
+                               fClusterOutputList[iCut]->Add(fHistoTrueClusNParticles[iCut]);
+                               fHistoTrueClusEMNonLeadingPt[iCut] = new TH1F("TrueClusEMNonLeading_Pt","TrueClusEMNonLeading_Pt",250,0,25);
+                               fClusterOutputList[iCut]->Add(fHistoTrueClusEMNonLeadingPt[iCut]);
+                               fHistoTrueNLabelsInClus[iCut] = new TH1F("TrueNLabelsInClus","TrueNLabelsInClus",100,-0.5,99.5);
+                               fClusterOutputList[iCut]->Add(fHistoTrueNLabelsInClus[iCut]);   
+                       }       
 
                        if(fDoMesonAnalysis){
-                               fHistoTrueMotherInvMassPt[iCut] = new TH2F("ESD_TrueMother_InvMass_Pt","ESD_TrueMother_InvMass_Pt",800,0,0.8,250,0,25);
-                               fTrueList[iCut]->Add(fHistoTrueMotherInvMassPt[iCut]);
-                               fHistoTruePrimaryMotherInvMassPt[iCut] = new TH2F("ESD_TruePrimaryMother_InvMass_Pt", "ESD_TruePrimaryMother_InvMass_Pt", 800,0,0.8,250,0,25);
-                               fHistoTruePrimaryMotherInvMassPt[iCut]->Sumw2();
-                               fTrueList[iCut]->Add(fHistoTruePrimaryMotherInvMassPt[iCut]);
-                               fHistoTruePrimaryMotherW0WeightingInvMassPt[iCut] = new TH2F("ESD_TruePrimaryMotherW0Weights_InvMass_Pt", "ESD_TruePrimaryMotherW0Weights_InvMass_Pt", 800,0,0.8,250,0,25);
-                               fHistoTruePrimaryMotherW0WeightingInvMassPt[iCut]->Sumw2();
-                               fTrueList[iCut]->Add(fHistoTruePrimaryMotherW0WeightingInvMassPt[iCut]);
-                               fProfileTruePrimaryMotherWeightsInvMassPt[iCut] = new TProfile2D("ESD_TruePrimaryMotherWeights_InvMass_Pt", "ESD_TruePrimaryMotherWeights_InvMass_Pt", 800,0,0.8,250,0,25);
-                               fProfileTruePrimaryMotherWeightsInvMassPt[iCut]->Sumw2();
-                               fTrueList[iCut]->Add(fProfileTruePrimaryMotherWeightsInvMassPt[iCut]);
-                               fHistoTrueSecondaryMotherInvMassPt[iCut] = new TH2F("ESD_TrueSecondaryMother_InvMass_Pt", "ESD_TrueSecondaryMother_InvMass_Pt", 800,0,0.8,250,0,25);
-                               fHistoTrueSecondaryMotherInvMassPt[iCut]->Sumw2();
-                               fTrueList[iCut]->Add(fHistoTrueSecondaryMotherInvMassPt[iCut]);
-                               fHistoTrueSecondaryMotherFromK0sInvMassPt[iCut] = new TH2F("ESD_TrueSecondaryMotherFromK0s_InvMass_Pt","ESD_TrueSecondaryMotherFromK0s_InvMass_Pt",800,0,0.8,250,0,25);
-                               fHistoTrueSecondaryMotherFromK0sInvMassPt[iCut]->Sumw2();
-                               fTrueList[iCut]->Add(fHistoTrueSecondaryMotherFromK0sInvMassPt[iCut]);
-                               fHistoTrueSecondaryMotherFromEtaInvMassPt[iCut] = new TH2F("ESD_TrueSecondaryMotherFromEta_InvMass_Pt","ESD_TrueSecondaryMotherFromEta_InvMass_Pt",800,0,0.8,250,0,25);
-                               fTrueList[iCut]->Add(fHistoTrueSecondaryMotherFromEtaInvMassPt[iCut]);
-                               fHistoTrueSecondaryMotherFromLambdaInvMassPt[iCut] = new TH2F("ESD_TrueSecondaryMotherFromLambda_InvMass_Pt","ESD_TrueSecondaryMotherFromLambda_InvMass_Pt",800,0,0.8,250,0,25);
-                               fTrueList[iCut]->Add(fHistoTrueSecondaryMotherFromLambdaInvMassPt[iCut]);
-                               fHistoTrueMotherDalitzInvMassPt[iCut] = new TH2F("ESD_TrueDalitz_InvMass_Pt","ESD_TrueDalitz_InvMass_Pt",800,0,0.8,250,0,25);
-                               fTrueList[iCut]->Add(fHistoTrueMotherDalitzInvMassPt[iCut]);
+                               fHistoTruePi0InvMassPt[iCut] = new TH2F("ESD_TruePi0_InvMass_Pt","ESD_TruePi0_InvMass_Pt",800,0,0.8,250,0,25);
+                               fHistoTruePi0InvMassPt[iCut]->SetXTitle("M_{inv,#pi^{0}} (GeV/c^{2})");
+                               fHistoTruePi0InvMassPt[iCut]->SetYTitle("#pi^{0} p_{T} (GeV/c)");
+                               fTrueList[iCut]->Add(fHistoTruePi0InvMassPt[iCut]);
+                               fHistoTrueEtaInvMassPt[iCut] = new TH2F("ESD_TrueEta_InvMass_Pt","ESD_TrueEta_InvMass_Pt",800,0,0.8,250,0,25);
+                               fHistoTruePi0InvMassPt[iCut]->SetXTitle("M_{inv,#eta} (GeV/c^{2})");
+                               fHistoTruePi0InvMassPt[iCut]->SetYTitle("#eta p_{T} (GeV/c)");
+                               fTrueList[iCut]->Add(fHistoTrueEtaInvMassPt[iCut]);
+
+                               fHistoTruePrimaryPi0InvMassPt[iCut] = new TH2F("ESD_TruePrimaryPi0_InvMass_Pt", "ESD_TruePrimaryPi0_InvMass_Pt", 800,0,0.8,250,0,25);
+                               fHistoTruePrimaryPi0InvMassPt[iCut]->SetXTitle("M_{inv,prim #pi^{0}} (GeV/c^{2})");
+                               fHistoTruePrimaryPi0InvMassPt[iCut]->SetYTitle("#pi^{0} p_{T} (GeV/c)");
+                               fHistoTruePrimaryPi0InvMassPt[iCut]->Sumw2();
+                               fTrueList[iCut]->Add(fHistoTruePrimaryPi0InvMassPt[iCut]);
+                               
+                               fHistoTruePrimaryEtaInvMassPt[iCut] = new TH2F("ESD_TruePrimaryEta_InvMass_Pt", "ESD_TruePrimaryEta_InvMass_Pt", 800,0,0.8,250,0,25);
+                               fHistoTruePrimaryEtaInvMassPt[iCut]->SetXTitle("M_{inv,prim #eta} (GeV/c^{2})");
+                               fHistoTruePrimaryEtaInvMassPt[iCut]->SetYTitle("#eta p_{T} (GeV/c)");
+                               fHistoTruePrimaryEtaInvMassPt[iCut]->Sumw2();
+                               fTrueList[iCut]->Add(fHistoTruePrimaryEtaInvMassPt[iCut]);
+
+                               fHistoTruePrimaryPi0W0WeightingInvMassPt[iCut] = new TH2F("ESD_TruePrimaryPi0W0Weights_InvMass_Pt", "ESD_TruePrimaryPi0W0Weights_InvMass_Pt", 800,0,0.8,250,0,25);
+                               fHistoTruePrimaryPi0W0WeightingInvMassPt[iCut]->SetXTitle("M_{inv,prim #pi^{0}} (GeV/c^{2})");
+                               fHistoTruePrimaryPi0W0WeightingInvMassPt[iCut]->SetYTitle("#pi^{0} p_{T} (GeV/c)");
+                               fTrueList[iCut]->Add(fHistoTruePrimaryPi0W0WeightingInvMassPt[iCut]);
+                               
+                               fHistoTruePrimaryEtaW0WeightingInvMassPt[iCut] = new TH2F("ESD_TruePrimaryEtaW0Weights_InvMass_Pt", "ESD_TruePrimaryEtaW0Weights_InvMass_Pt", 800,0,0.8,250,0,25);
+                               fHistoTruePrimaryEtaW0WeightingInvMassPt[iCut]->SetXTitle("M_{inv,prim #eta} (GeV/c^{2})");
+                               fHistoTruePrimaryEtaW0WeightingInvMassPt[iCut]->SetYTitle("#eta p_{T} (GeV/c)");
+                               fTrueList[iCut]->Add(fHistoTruePrimaryEtaW0WeightingInvMassPt[iCut]);
+
+                               fProfileTruePrimaryPi0WeightsInvMassPt[iCut] = new TProfile2D("ESD_TruePrimaryPi0Weights_InvMass_Pt", "ESD_TruePrimaryPi0Weights_InvMass_Pt", 800,0,0.8,250,0,25);
+                               fProfileTruePrimaryPi0WeightsInvMassPt[iCut]->SetXTitle("M_{inv,prim #pi^{0}} (GeV/c^{2})");
+                               fProfileTruePrimaryPi0WeightsInvMassPt[iCut]->SetYTitle("#pi^{0} p_{T} (GeV/c)");
+                               fProfileTruePrimaryPi0WeightsInvMassPt[iCut]->Sumw2();
+                               fTrueList[iCut]->Add(fProfileTruePrimaryPi0WeightsInvMassPt[iCut]);
+                               fProfileTruePrimaryEtaWeightsInvMassPt[iCut] = new TProfile2D("ESD_TruePrimaryEtaWeights_InvMass_Pt", "ESD_TruePrimaryEtaWeights_InvMass_Pt", 800,0,0.8,250,0,25);
+                               fProfileTruePrimaryEtaWeightsInvMassPt[iCut]->SetXTitle("M_{inv,prim #eta} (GeV/c^{2})");
+                               fProfileTruePrimaryEtaWeightsInvMassPt[iCut]->SetYTitle("#eta p_{T} (GeV/c)");
+                               fProfileTruePrimaryEtaWeightsInvMassPt[iCut]->Sumw2();
+                               fTrueList[iCut]->Add(fProfileTruePrimaryEtaWeightsInvMassPt[iCut]);
+
+                               fHistoTrueSecondaryPi0InvMassPt[iCut] = new TH2F("ESD_TrueSecondaryPi0_InvMass_Pt", "ESD_TrueSecondaryPi0_InvMass_Pt", 800,0,0.8,250,0,25);
+                               fHistoTrueSecondaryPi0InvMassPt[iCut]->SetXTitle("M_{inv,sec #pi^{0}} (GeV/c^{2})");
+                               fHistoTrueSecondaryPi0InvMassPt[iCut]->SetYTitle("#pi^{0} p_{T} (GeV/c)");
+                               fHistoTrueSecondaryPi0InvMassPt[iCut]->Sumw2();
+                               fTrueList[iCut]->Add(fHistoTrueSecondaryPi0InvMassPt[iCut]);
+
+                               fHistoTrueSecondaryPi0FromK0sInvMassPt[iCut] = new TH2F("ESD_TrueSecondaryPi0FromK0s_InvMass_Pt","ESD_TrueSecondaryPi0FromK0s_InvMass_Pt",800,0,0.8,250,0,25);
+                               fHistoTrueSecondaryPi0FromK0sInvMassPt[iCut]->SetXTitle("M_{inv,#pi^{0} from K^{0}_{S}} (GeV/c^{2})");
+                               fHistoTrueSecondaryPi0FromK0sInvMassPt[iCut]->SetYTitle("#pi^{0} p_{T} (GeV/c)");
+                               fHistoTrueSecondaryPi0FromK0sInvMassPt[iCut]->Sumw2();
+                               fTrueList[iCut]->Add(fHistoTrueSecondaryPi0FromK0sInvMassPt[iCut]);
+                               fHistoTrueSecondaryPi0FromEtaInvMassPt[iCut] = new TH2F("ESD_TrueSecondaryPi0FromEta_InvMass_Pt","ESD_TrueSecondaryPi0FromEta_InvMass_Pt",800,0,0.8,250,0,25);
+                               fHistoTrueSecondaryPi0FromEtaInvMassPt[iCut]->SetXTitle("M_{inv,#pi^{0} from #eta} (GeV/c^{2})");
+                               fHistoTrueSecondaryPi0FromEtaInvMassPt[iCut]->SetYTitle("#pi^{0}  p_{T} (GeV/c)");
+                               fTrueList[iCut]->Add(fHistoTrueSecondaryPi0FromEtaInvMassPt[iCut]);
+                               fHistoTrueSecondaryPi0FromLambdaInvMassPt[iCut] = new TH2F("ESD_TrueSecondaryPi0FromLambda_InvMass_Pt","ESD_TrueSecondaryPi0FromLambda_InvMass_Pt",800,0,0.8,250,0,25);
+                               fHistoTrueSecondaryPi0FromLambdaInvMassPt[iCut]->SetXTitle("M_{inv,#pi^{0} from #Lambda} (GeV/c^{2})");
+                               fHistoTrueSecondaryPi0FromLambdaInvMassPt[iCut]->SetYTitle("#pi^{0}  p_{T} (GeV/c)");
+                               fTrueList[iCut]->Add(fHistoTrueSecondaryPi0FromLambdaInvMassPt[iCut]);
+
+                               fHistoTruePrimaryPi0PhotonPairPtconv[iCut] = new TH2F("ESD_TruePrimaryPi0_InvMass_PtConv","",800,0,0.8,250,0,25);
+                               fHistoTruePrimaryPi0PhotonPairPtconv[iCut]->SetXTitle("M_{inv,#pi^{0}} (GeV/c^{2})");
+                               fHistoTruePrimaryPi0PhotonPairPtconv[iCut]->SetYTitle("#gamma^{conv} p_{T} (GeV/c)");
+                               fHistoTruePrimaryPi0PhotonPairPtconv[iCut]->Sumw2();
+                               fTrueList[iCut]->Add(fHistoTruePrimaryPi0PhotonPairPtconv[iCut]);
+
+                               fHistoTrueSecondaryPi0PhotonPairPtconv[iCut] = new TH2F("ESD_TrueSecondaryPi0_InvMass_PtConv","",800,0,0.8,250,0,25);
+                               fHistoTrueSecondaryPi0PhotonPairPtconv[iCut]->SetXTitle("M_{inv,#pi^{0}} (GeV/c^{2})");
+                               fHistoTrueSecondaryPi0PhotonPairPtconv[iCut]->SetYTitle("#gamma^{conv} p_{T} (GeV/c)");
+                               fHistoTrueSecondaryPi0PhotonPairPtconv[iCut]->Sumw2();
+                               fTrueList[iCut]->Add(fHistoTrueSecondaryPi0PhotonPairPtconv[iCut]);
+
+                               fHistoTruePrimaryEtaPhotonPairPtconv[iCut] = new TH2F("ESD_TruePrimaryEta_InvMass_PtConv","",800,0,0.8,250,0,25);
+                               fHistoTruePrimaryEtaPhotonPairPtconv[iCut]->SetXTitle("M_{inv,#eta} (GeV/c^{2})");
+                               fHistoTruePrimaryEtaPhotonPairPtconv[iCut]->SetYTitle("#gamma^{conv} p_{T} (GeV/c)");
+                               fHistoTruePrimaryEtaPhotonPairPtconv[iCut]->Sumw2();
+                               fTrueList[iCut]->Add(fHistoTruePrimaryEtaPhotonPairPtconv[iCut]);
+
+                               fHistoTruePrimaryPi0DCPtconv[iCut] = new TH1F("ESD_TruePrimaryPi0DC_PtConv","",250,0,25);
+                               fHistoTruePrimaryPi0DCPtconv[iCut]->SetXTitle("#gamma^{conv} p_{T} (GeV/c)");
+                               fHistoTruePrimaryPi0DCPtconv[iCut]->Sumw2();
+                               fTrueList[iCut]->Add(fHistoTruePrimaryPi0DCPtconv[iCut]);
+
+                               fHistoTrueSecondaryPi0DCPtconv[iCut] = new TH1F("ESD_TrueSecondaryPi0DC_PtConv","",250,0,25);
+                               fHistoTrueSecondaryPi0DCPtconv[iCut]->SetXTitle("#gamma^{conv} p_{T} (GeV/c)");
+                               fHistoTrueSecondaryPi0DCPtconv[iCut]->Sumw2();
+                               fTrueList[iCut]->Add(fHistoTrueSecondaryPi0DCPtconv[iCut]);
+
+                               fHistoTruePrimaryEtaDCPtconv[iCut] = new TH1F("ESD_TruePrimaryEtaDC_PtConv","",250,0,25);
+                               fHistoTruePrimaryEtaDCPtconv[iCut]->SetXTitle("#gamma^{conv} p_{T} (GeV/c)");
+                               fHistoTruePrimaryEtaDCPtconv[iCut]->Sumw2();
+                               fTrueList[iCut]->Add(fHistoTruePrimaryEtaDCPtconv[iCut]);
+
+                               fHistoTruePrimaryPi0MissingPtconv[iCut] = new TH1F("ESD_TruePrimaryPi0Missing_PtConv","",250,0,25);
+                               fHistoTruePrimaryPi0MissingPtconv[iCut]->SetXTitle("#gamma^{conv} p_{T} (GeV/c)");
+                               fHistoTruePrimaryPi0MissingPtconv[iCut]->Sumw2();
+                               fTrueList[iCut]->Add(fHistoTruePrimaryPi0MissingPtconv[iCut]);
+
+                               fHistoTrueSecondaryPi0MissingPtconv[iCut] = new TH1F("ESD_TrueSecondaryPi0Missing_PtConv","",250,0,25);
+                               fHistoTrueSecondaryPi0MissingPtconv[iCut]->SetXTitle("#gamma^{conv} p_{T} (GeV/c)");
+                               fHistoTrueSecondaryPi0MissingPtconv[iCut]->Sumw2();
+                               fTrueList[iCut]->Add(fHistoTrueSecondaryPi0MissingPtconv[iCut]);
+
+                               fHistoTruePrimaryEtaMissingPtconv[iCut] = new TH1F("ESD_TruePrimaryEtaMissing_PtConv","",250,0,25);
+                               fHistoTruePrimaryEtaMissingPtconv[iCut]->SetXTitle("#gamma^{conv} p_{T} (GeV/c)");
+                               fHistoTruePrimaryEtaMissingPtconv[iCut]->Sumw2();
+                               fTrueList[iCut]->Add(fHistoTruePrimaryEtaMissingPtconv[iCut]);
+                               
                                if (fDoMesonQA > 0){
+                                       fHistoTruePi0CaloPhotonInvMassPt[iCut] = new TH2F("ESD_TruePi0CaloPhoton_InvMass_Pt","ESD_TruePi0CaloPhoton_InvMass_Pt",800,0,0.8,250,0,25);
+                                       fHistoTruePi0CaloPhotonInvMassPt[iCut]->SetXTitle("M_{inv,#pi^{0}} (GeV/c^{2}) #gamma #gamma");
+                                       fHistoTruePi0CaloPhotonInvMassPt[iCut]->SetYTitle("#pi^{0} p_{T} (GeV/c)");
+                                       fTrueList[iCut]->Add(fHistoTruePi0CaloPhotonInvMassPt[iCut]);
+                                       
+                                       fHistoTrueEtaCaloPhotonInvMassPt[iCut] = new TH2F("ESD_TrueEtaCaloPhoton_InvMass_Pt","ESD_TrueEtaCaloPhoton_InvMass_Pt",800,0,0.8,250,0,25);
+                                       fHistoTrueEtaCaloPhotonInvMassPt[iCut]->SetXTitle("M_{inv,#eta} (GeV/c^{2}) #gamma #gamma");
+                                       fHistoTrueEtaCaloPhotonInvMassPt[iCut]->SetYTitle("#eta p_{T} (GeV/c)");
+                                       fTrueList[iCut]->Add(fHistoTrueEtaCaloPhotonInvMassPt[iCut]);
+                                       
+                                       fHistoTruePi0CaloConvertedPhotonInvMassPt[iCut] = new TH2F("ESD_TruePi0CaloConvertedPhoton_InvMass_Pt","ESD_TruePi0CaloConvertedPhoton_InvMass_Pt",800,0,0.8,250,0,25);
+                                       fHistoTruePi0CaloConvertedPhotonInvMassPt[iCut]->SetXTitle("M_{inv,#pi^{0}} (GeV/c^{2}) #gamma #gamma_{conv}");
+                                       fHistoTruePi0CaloConvertedPhotonInvMassPt[iCut]->SetYTitle("#pi^{0} p_{T} (GeV/c)");
+                                       fTrueList[iCut]->Add(fHistoTruePi0CaloConvertedPhotonInvMassPt[iCut]);
+                                       
+                                       fHistoTruePi0CaloConvertedPhotonMatchedInvMassPt[iCut] = new TH2F("ESD_TruePi0CaloConvertedPhotonMatched_InvMass_Pt","ESD_TruePi0CaloConvertedPhotonMatched_InvMass_Pt",800,0,0.8,250,0,25);
+                                       fHistoTruePi0CaloConvertedPhotonMatchedInvMassPt[iCut]->SetXTitle("M_{inv,#pi^{0}} (GeV/c^{2}) #gamma #gamma_{conv,matched}");
+                                       fHistoTruePi0CaloConvertedPhotonMatchedInvMassPt[iCut]->SetYTitle("#pi^{0} p_{T} (GeV/c)");
+                                       fTrueList[iCut]->Add(fHistoTruePi0CaloConvertedPhotonMatchedInvMassPt[iCut]);
+                                       
+                                       fHistoTrueEtaCaloConvertedPhotonInvMassPt[iCut] = new TH2F("ESD_TrueEtaCaloConvertedPhoton_InvMass_Pt","ESD_TrueEtaCaloConvertedPhoton_InvMass_Pt",800,0,0.8,250,0,25);
+                                       fHistoTrueEtaCaloConvertedPhotonInvMassPt[iCut]->SetXTitle("M_{inv,#eta} (GeV/c^{2}) #gamma #gamma_{conv}");
+                                       fHistoTrueEtaCaloConvertedPhotonInvMassPt[iCut]->SetYTitle("#eta p_{T} (GeV/c)");
+                                       fTrueList[iCut]->Add(fHistoTrueEtaCaloConvertedPhotonInvMassPt[iCut]);
+                                       
+                                       fHistoTrueEtaCaloConvertedPhotonMatchedInvMassPt[iCut] = new TH2F("ESD_TrueEtaCaloConvertedPhotonMatched_InvMass_Pt","ESD_TrueEtaCaloConvertedPhotonMatched_InvMass_Pt",800,0,0.8,250,0,25);
+                                       fHistoTrueEtaCaloConvertedPhotonMatchedInvMassPt[iCut]->SetXTitle("M_{inv,#eta} (GeV/c^{2}) #gamma #gamma_{conv,matched}");
+                                       fHistoTrueEtaCaloConvertedPhotonMatchedInvMassPt[iCut]->SetYTitle("#eta p_{T} (GeV/c)");
+                                       fTrueList[iCut]->Add(fHistoTrueEtaCaloConvertedPhotonMatchedInvMassPt[iCut]);
+
+                                       fHistoTruePi0CaloElectronInvMassPt[iCut] = new TH2F("ESD_TruePi0CaloElectron_InvMass_Pt","ESD_TruePi0CaloElectron_InvMass_Pt",800,0,0.8,250,0,25);
+                                       fHistoTruePi0CaloElectronInvMassPt[iCut]->SetXTitle("M_{inv,#pi^{0}} (GeV/c^{2}) #gamma e^{#pm}");
+                                       fHistoTruePi0CaloElectronInvMassPt[iCut]->SetYTitle("#pi^{0} p_{T} (GeV/c)");
+                                       fTrueList[iCut]->Add(fHistoTruePi0CaloElectronInvMassPt[iCut]);
+                                       fHistoTrueEtaCaloElectronInvMassPt[iCut] = new TH2F("ESD_TrueEtaCaloElectron_InvMass_Pt","ESD_TrueEtaCaloElectron_InvMass_Pt",800,0,0.8,250,0,25);
+                                       fHistoTrueEtaCaloElectronInvMassPt[iCut]->SetXTitle("M_{inv,#eta} (GeV/c^{2}) #gamma e^{#pm}");
+                                       fHistoTrueEtaCaloElectronInvMassPt[iCut]->SetYTitle("#eta p_{T} (GeV/c)");
+                                       fTrueList[iCut]->Add(fHistoTrueEtaCaloElectronInvMassPt[iCut]);
+
+                                       fHistoTruePi0CaloMergedClusterInvMassPt[iCut] = new TH2F("ESD_TruePi0CaloMergedCluster_InvMass_Pt","ESD_TruePi0CaloMergedCluster_InvMass_Pt",800,0,0.8,250,0,25);
+                                       fHistoTruePi0CaloMergedClusterInvMassPt[iCut]->SetXTitle("M_{inv,#pi^{0}} (GeV/c^{2}) #gamma merged cluster");
+                                       fHistoTruePi0CaloMergedClusterInvMassPt[iCut]->SetYTitle("#pi^{0} p_{T} (GeV/c)");
+                                       fTrueList[iCut]->Add(fHistoTruePi0CaloMergedClusterInvMassPt[iCut]);
+                                       fHistoTrueEtaCaloMergedClusterInvMassPt[iCut] = new TH2F("ESD_TrueEtaCaloMergedCluster_InvMass_Pt","ESD_TrueEtaCaloMergedCluster_InvMass_Pt",800,0,0.8,250,0,25);
+                                       fHistoTrueEtaCaloMergedClusterInvMassPt[iCut]->SetXTitle("M_{inv,#eta} (GeV/c^{2}) #gamma merged cluster");
+                                       fHistoTrueEtaCaloMergedClusterInvMassPt[iCut]->SetYTitle("#eta p_{T} (GeV/c)");
+                                       fTrueList[iCut]->Add(fHistoTrueEtaCaloMergedClusterInvMassPt[iCut]);
+
+                                       fHistoTrueMotherCaloEMNonLeadingInvMassPt[iCut] = new TH2F("ESD_TrueMotherCaloEMNonLeading_InvMass_Pt","ESD_TrueMotherCaloEMNonLeading_InvMass_Pt",800,0,0.8,250,0,25);
+                                       fHistoTrueMotherCaloEMNonLeadingInvMassPt[iCut]->SetXTitle("M_{inv} (GeV/c^{2}) #gamma cluster no leading EM");
+                                       fHistoTrueMotherCaloEMNonLeadingInvMassPt[iCut]->SetYTitle("#pair p_{T} (GeV/c)");
+                                       fTrueList[iCut]->Add(fHistoTrueMotherCaloEMNonLeadingInvMassPt[iCut]);
+                                       fHistoTruePi0CaloMergedClusterPartConvInvMassPt[iCut] = new TH2F("ESD_TruePi0CaloMergedClusterPartConv_InvMass_Pt","ESD_TruePi0CaloMergedClusterPartConv_InvMass_Pt",800,0,0.8,250,0,25);
+                                       fHistoTruePi0CaloMergedClusterPartConvInvMassPt[iCut]->SetXTitle("M_{inv,#pi^{0}} (GeV/c^{2}) #gamma merged cluster, part conv");
+                                       fHistoTruePi0CaloMergedClusterPartConvInvMassPt[iCut]->SetYTitle("#pi^{0} p_{T} (GeV/c)");
+                                       fTrueList[iCut]->Add(fHistoTruePi0CaloMergedClusterPartConvInvMassPt[iCut]);
+                                       fHistoTrueEtaCaloMergedClusterPartConvInvMassPt[iCut] = new TH2F("ESD_TrueEtaCaloMergedClusterPartConv_InvMass_Pt","ESD_TrueEtaCaloMergedClusterPartConv_InvMass_Pt",800,0,0.8,250,0,25);
+                                       fHistoTrueEtaCaloMergedClusterPartConvInvMassPt[iCut]->SetXTitle("M_{inv,#eta} (GeV/c^{2}) #gamma merged cluster, part conv");
+                                       fHistoTrueEtaCaloMergedClusterPartConvInvMassPt[iCut]->SetYTitle("#eta p_{T} (GeV/c)");
+                                       fTrueList[iCut]->Add(fHistoTrueEtaCaloMergedClusterPartConvInvMassPt[iCut]);
+                                       
                                        fHistoTruePrimaryPi0MCPtResolPt[iCut] = new TH2F("ESD_TruePrimaryPi0_MCPt_ResolPt","ESD_TruePrimaryPi0_ResolPt_MCPt",500,0.03,25,1000,-1.,1.);
+                                       fHistoTruePrimaryPi0MCPtResolPt[iCut]->SetXTitle("#pi^{0} p_{T,MC} (GeV/c)");
+                                       fHistoTruePrimaryPi0MCPtResolPt[iCut]->SetYTitle("#pi^{0} (p_{T,rec}-p_{T,MC})/p_{T,MC} ()");   
                                        fHistoTruePrimaryPi0MCPtResolPt[iCut]->Sumw2();
                                        SetLogBinningXTH2(fHistoTruePrimaryPi0MCPtResolPt[iCut]);
                                        fTrueList[iCut]->Add(fHistoTruePrimaryPi0MCPtResolPt[iCut]);
+                                       
                                        fHistoTruePrimaryEtaMCPtResolPt[iCut]  = new TH2F("ESD_TruePrimaryEta_MCPt_ResolPt","ESD_TruePrimaryEta_ResolPt_MCPt",500,0.03,25,1000,-1.,1.);
+                                       fHistoTruePrimaryEtaMCPtResolPt[iCut]->SetXTitle("#eta p_{T,MC} (GeV/c)");
+                                       fHistoTruePrimaryEtaMCPtResolPt[iCut]->SetYTitle("#eta (p_{T,rec}-p_{T,MC})/p_{T,MC} ()");      
                                        fHistoTruePrimaryEtaMCPtResolPt[iCut]->Sumw2();
                                        SetLogBinningXTH2(fHistoTruePrimaryEtaMCPtResolPt[iCut]);
                                        fTrueList[iCut]->Add(fHistoTruePrimaryEtaMCPtResolPt[iCut]);
+                                       
                                        fHistoTrueBckGGInvMassPt[iCut] = new TH2F("ESD_TrueBckGG_InvMass_Pt","ESD_TrueBckGG_InvMass_Pt",800,0,0.8,250,0,25);
+                                       fHistoTrueBckGGInvMassPt[iCut]->SetXTitle("M_{inv} (GeV/c^{2}) #gamma #gamma no signal");
+                                       fHistoTrueBckGGInvMassPt[iCut]->SetYTitle("#pair p_{T} (GeV/c)");                                       
                                        fTrueList[iCut]->Add(fHistoTrueBckGGInvMassPt[iCut]);
                                        fHistoTrueBckContInvMassPt[iCut] = new TH2F("ESD_TrueBckCont_InvMass_Pt","ESD_TrueBckCont_InvMass_Pt",800,0,0.8,250,0,25);
+                                       fHistoTrueBckContInvMassPt[iCut]->SetXTitle("M_{inv} (GeV/c^{2}) contamination");
+                                       fHistoTrueBckContInvMassPt[iCut]->SetYTitle("#pair p_{T} (GeV/c)");                                     
                                        fTrueList[iCut]->Add(fHistoTrueBckContInvMassPt[iCut]);
                                        fHistoTrueK0sWithPi0DaughterMCPt[iCut] = new TH1F("ESD_TrueK0sWithPi0Daughter_MCPt","ESD_TrueK0sWithPi0Daughter_MCPt",250,0,25);
+                                       fHistoTrueK0sWithPi0DaughterMCPt[iCut]->SetXTitle("K^{0}_{s} p_{MC,T} (GeV/c) for K^{0}_{s} where #pi^{0} rec ");                       
                                        fTrueList[iCut]->Add(fHistoTrueK0sWithPi0DaughterMCPt[iCut]);
                                        fHistoTrueEtaWithPi0DaughterMCPt[iCut] = new TH1F("ESD_TrueEtaWithPi0Daughter_MCPt","ESD_TrueEtaWithPi0Daughter_MCPt",250,0,25);
+                                       fHistoTrueEtaWithPi0DaughterMCPt[iCut]->SetXTitle("#eta p_{MC,T} (GeV/c) for #eta where #pi^{0} rec ");                 
                                        fTrueList[iCut]->Add(fHistoTrueEtaWithPi0DaughterMCPt[iCut]);
                                        fHistoTrueLambdaWithPi0DaughterMCPt[iCut] = new TH1F("ESD_TrueLambdaWithPi0Daughter_MCPt","ESD_TrueLambdaWithPi0Daughter_MCPt",250,0,25);
+                                       fHistoTrueLambdaWithPi0DaughterMCPt[iCut]->SetXTitle("#Lambda p_{MC,T} (GeV/c) for #Lambda where #pi^{0} rec ");                        
                                        fTrueList[iCut]->Add(fHistoTrueLambdaWithPi0DaughterMCPt[iCut]);
           
                                        fHistoTruePi0PtY[iCut] = new TH2F("ESD_TruePi0_Pt_Y","ESD_TruePi0_Pt_Y",150,0.03,15.,150,-1.5,1.5);
+                                       fHistoTruePi0PtY[iCut]->SetYTitle("Y_{#pi^{0}}");
+                                       fHistoTruePi0PtY[iCut]->SetXTitle("#pi^{0} p_{T} (GeV/c)");                                     
                                        SetLogBinningXTH2(fHistoTruePi0PtY[iCut]);
                                        fTrueList[iCut]->Add(fHistoTruePi0PtY[iCut]);
                                        fHistoTrueEtaPtY[iCut] = new TH2F("ESD_TrueEta_Pt_Y","ESD_TrueEta_Pt_Y",150,0.03,15.,150,-1.5,1.5);
+                                       fHistoTrueEtaPtY[iCut]->SetYTitle("Y_{#eta}");
+                                       fHistoTrueEtaPtY[iCut]->SetXTitle("#eta p_{T} (GeV/c)");                                        
                                        SetLogBinningXTH2(fHistoTrueEtaPtY[iCut]);
                                        fTrueList[iCut]->Add(fHistoTrueEtaPtY[iCut]);
                                        fHistoTruePi0PtAlpha[iCut] = new TH2F("ESD_TruePi0_Pt_Alpha","ESD_TruePi0_Pt_Alpha",150,0.03,15.,100,0,1);
+                                       fHistoTruePi0PtAlpha[iCut]->SetYTitle("#alpha_{#pi^{0}}");
+                                       fHistoTruePi0PtAlpha[iCut]->SetXTitle("#pi^{0} p_{T} (GeV/c)");         
                                        SetLogBinningXTH2(fHistoTruePi0PtAlpha[iCut]);
                                        fTrueList[iCut]->Add(fHistoTruePi0PtAlpha[iCut]);
                                        fHistoTrueEtaPtAlpha[iCut] = new TH2F("ESD_TrueEta_Pt_Alpha","ESD_TrueEta_Pt_Alpha",150,0.03,15.,100,0,1);
+                                       fHistoTrueEtaPtAlpha[iCut]->SetYTitle("#alpha_{#eta}");
+                                       fHistoTrueEtaPtAlpha[iCut]->SetXTitle("#eta p_{T} (GeV/c)");            
                                        SetLogBinningXTH2(fHistoTrueEtaPtAlpha[iCut]);
                                        fTrueList[iCut]->Add(fHistoTrueEtaPtAlpha[iCut]);
                                        
                                        fHistoTruePi0PtOpenAngle[iCut] = new TH2F("ESD_TruePi0_Pt_OpenAngle","ESD_TruePi0_Pt_OpenAngle",150,0.03,15.,200,0,2*TMath::Pi());
+                                       fHistoTruePi0PtOpenAngle[iCut]->SetYTitle("#theta_{#pi^{0}}");
+                                       fHistoTruePi0PtOpenAngle[iCut]->SetXTitle("#pi^{0} p_{T} (GeV/c)");
                                        SetLogBinningXTH2(fHistoTruePi0PtOpenAngle[iCut]);
                                        fTrueList[iCut]->Add(fHistoTruePi0PtOpenAngle[iCut]);
                                        fHistoTrueEtaPtOpenAngle[iCut] = new TH2F("ESD_TrueEta_Pt_OpenAngle","ESD_TrueEta_Pt_OpenAngle",150,0.03,15.,200,0,2*TMath::Pi());
+                                       fHistoTrueEtaPtOpenAngle[iCut]->SetYTitle("#theta_{#eta}");
+                                       fHistoTrueEtaPtOpenAngle[iCut]->SetXTitle("#eta p_{T} (GeV/c)");
                                        SetLogBinningXTH2(fHistoTrueEtaPtOpenAngle[iCut]);
                                        fTrueList[iCut]->Add(fHistoTrueEtaPtOpenAngle[iCut]);
-          
-                                       fHistoTrueConvGammaEta[iCut] = new TH1F("ESD_TrueConvGamma_Eta","ESD_TrueConvGamma_Eta",2000,-2,2);
-                                       fTrueList[iCut]->Add(fHistoTrueConvGammaEta[iCut]);
-          
+                                       
+                                       fHistoTrueMotherPi0ConvPhotonEtaPhi[iCut] = new TH2F("ESD_TrueMotherPi0ConvPhoton_Eta_Phi","conv photons for true #pi^{0}",600,0,2*TMath::Pi(),200,-1,1);
+                                       fHistoTrueMotherPi0ConvPhotonEtaPhi[iCut]->SetXTitle("#phi_{#gamma_{conv}} (rad)");
+                                       fHistoTrueMotherPi0ConvPhotonEtaPhi[iCut]->SetYTitle("#eta_{#gamma_{conv}}");
+                                       fTrueList[iCut]->Add(fHistoTrueMotherPi0ConvPhotonEtaPhi[iCut]);
+                                       fHistoTrueMotherEtaConvPhotonEtaPhi[iCut] = new TH2F("ESD_TrueMotherEtaConvPhoton_Eta_Phi","conv photons for true #eta",600,0,2*TMath::Pi(),200,-1,1);
+                                       fHistoTrueMotherEtaConvPhotonEtaPhi[iCut]->SetXTitle("#phi_{#gamma_{conv}} (rad)");
+                                       fHistoTrueMotherEtaConvPhotonEtaPhi[iCut]->SetYTitle("#eta_{#gamma_{conv}}");
+                                       fTrueList[iCut]->Add(fHistoTrueMotherEtaConvPhotonEtaPhi[iCut]);
+
                                }
                        }
                }
@@ -1045,14 +1408,23 @@ void AliAnalysisTaskGammaConvCalo::UserCreateOutputObjects(){
        if(!fV0Reader){printf("Error: No V0 Reader");return;} // GetV0Reader
   
        if(fV0Reader)
-               if((AliConversionCuts*)fV0Reader->GetConversionCuts())
-                       if(((AliConversionCuts*)fV0Reader->GetConversionCuts())->GetCutHistograms())
-                               fOutputContainer->Add(((AliConversionCuts*)fV0Reader->GetConversionCuts())->GetCutHistograms());
-  
+               if((AliConversionPhotonCuts*)fV0Reader->GetConversionCuts())
+                       if(((AliConversionPhotonCuts*)fV0Reader->GetConversionCuts())->GetCutHistograms())
+                               fOutputContainer->Add(((AliConversionPhotonCuts*)fV0Reader->GetConversionCuts())->GetCutHistograms());
+       if(fV0Reader)
+               if((AliConvEventCuts*)fV0Reader->GetEventCuts())
+                       if(((AliConvEventCuts*)fV0Reader->GetEventCuts())->GetCutHistograms())
+                               fOutputContainer->Add(((AliConvEventCuts*)fV0Reader->GetEventCuts())->GetCutHistograms());
+
+                       
        for(Int_t iCut = 0; iCut<fnCuts;iCut++){
-               if(!((AliConversionCuts*)fCutArray->At(iCut))) continue;
-               if(((AliConversionCuts*)fCutArray->At(iCut))->GetCutHistograms()){
-                       fCutFolder[iCut]->Add(((AliConversionCuts*)fCutArray->At(iCut))->GetCutHistograms());
+               if(!((AliConvEventCuts*)fEventCutArray->At(iCut))) continue;
+               if(((AliConvEventCuts*)fEventCutArray->At(iCut))->GetCutHistograms()){
+                       fCutFolder[iCut]->Add(((AliConvEventCuts*)fEventCutArray->At(iCut))->GetCutHistograms());
+               }
+               if(!((AliConversionPhotonCuts*)fCutArray->At(iCut))) continue;
+               if(((AliConversionPhotonCuts*)fCutArray->At(iCut))->GetCutHistograms()){
+                       fCutFolder[iCut]->Add(((AliConversionPhotonCuts*)fCutArray->At(iCut))->GetCutHistograms());
                }
                if(!((AliCaloPhotonCuts*)fClusterCutArray->At(iCut))) continue;
                if(((AliCaloPhotonCuts*)fClusterCutArray->At(iCut))->GetCutHistograms()){
@@ -1071,21 +1443,21 @@ void AliAnalysisTaskGammaConvCalo::UserCreateOutputObjects(){
 Bool_t AliAnalysisTaskGammaConvCalo::Notify()
 {
        for(Int_t iCut = 0; iCut<fnCuts;iCut++){
-               if(!((AliConversionCuts*)fCutArray->At(iCut))->GetDoEtaShift()){
-                       fProfileEtaShift[iCut]->Fill(0.,(((AliConversionCuts*)fCutArray->At(iCut))->GetEtaShift()));
+               if(!((AliConvEventCuts*)fEventCutArray->At(iCut))->GetDoEtaShift()){
+                       fProfileEtaShift[iCut]->Fill(0.,(((AliConvEventCuts*)fEventCutArray->At(iCut))->GetEtaShift()));
                        continue; // No Eta Shift requested, continue
                }
-               if(((AliConversionCuts*)fCutArray->At(iCut))->GetEtaShift() == 0.0){ // Eta Shift requested but not set, get shift automatically
-                       ((AliConversionCuts*)fCutArray->At(iCut))->GetCorrectEtaShiftFromPeriod(fV0Reader->GetPeriodName());
-                       fProfileEtaShift[iCut]->Fill(0.,(((AliConversionCuts*)fCutArray->At(iCut))->GetEtaShift()));
-                       ((AliConversionCuts*)fCutArray->At(iCut))->DoEtaShift(kFALSE); // Eta Shift Set, make sure that it is called only once
+               if(((AliConvEventCuts*)fEventCutArray->At(iCut))->GetEtaShift() == 0.0){ // Eta Shift requested but not set, get shift automatically
+                       ((AliConvEventCuts*)fEventCutArray->At(iCut))->GetCorrectEtaShiftFromPeriod(fV0Reader->GetPeriodName());
+                       fProfileEtaShift[iCut]->Fill(0.,(((AliConvEventCuts*)fEventCutArray->At(iCut))->GetEtaShift()));
+                       ((AliConvEventCuts*)fEventCutArray->At(iCut))->DoEtaShift(kFALSE); // Eta Shift Set, make sure that it is called only once
                        continue;
                }
                else{
                        printf(" Gamma Conversion Task %s :: Eta Shift Manually Set to %f \n\n",
-                                       (((AliConversionCuts*)fCutArray->At(iCut))->GetCutNumber()).Data(),((AliConversionCuts*)fCutArray->At(iCut))->GetEtaShift());
-                       fProfileEtaShift[iCut]->Fill(0.,(((AliConversionCuts*)fCutArray->At(iCut))->GetEtaShift()));
-                       ((AliConversionCuts*)fCutArray->At(iCut))->DoEtaShift(kFALSE); // Eta Shift Set, make sure that it is called only once
+                                       (((AliConvEventCuts*)fEventCutArray->At(iCut))->GetCutNumber()).Data(),((AliConvEventCuts*)fEventCutArray->At(iCut))->GetEtaShift());
+                       fProfileEtaShift[iCut]->Fill(0.,(((AliConvEventCuts*)fEventCutArray->At(iCut))->GetEtaShift()));
+                       ((AliConvEventCuts*)fEventCutArray->At(iCut))->DoEtaShift(kFALSE); // Eta Shift Set, make sure that it is called only once
                }
        }
        
@@ -1097,7 +1469,7 @@ void AliAnalysisTaskGammaConvCalo::UserExec(Option_t *)
        //
        // Called for each event
        //
-       Int_t eventQuality = ((AliConversionCuts*)fV0Reader->GetConversionCuts())->GetEventQuality();
+       Int_t eventQuality = ((AliConvEventCuts*)fV0Reader->GetEventCuts())->GetEventQuality();
        if(eventQuality == 2 || eventQuality == 3){// Event Not Accepted due to MC event missing or wrong trigger for V0ReaderV1
                for(Int_t iCut = 0; iCut<fnCuts; iCut++){
                fHistoNEvents[iCut]->Fill(eventQuality);
@@ -1115,6 +1487,10 @@ void AliAnalysisTaskGammaConvCalo::UserExec(Option_t *)
                if(fMCStack == NULL) fIsMC = kFALSE;
        }
        
+       if(fInputEvent->IsA()==AliAODEvent::Class()){
+               fInputEvent->InitMagneticField();
+       }
+       
        fReaderGammas = fV0Reader->GetReconstructedGammas(); // Gammas from default Cut
 
        // ------------------- BeginEvent ----------------------------
@@ -1132,7 +1508,11 @@ void AliAnalysisTaskGammaConvCalo::UserExec(Option_t *)
        for(Int_t iCut = 0; iCut<fnCuts; iCut++){
                
                fiCut = iCut;
-               Int_t eventNotAccepted = ((AliConversionCuts*)fCutArray->At(iCut))->IsEventAcceptedByConversionCut(fV0Reader->GetConversionCuts(),fInputEvent,fMCEvent,fIsHeavyIon);
+               
+               Bool_t isRunningEMCALrelAna = kFALSE;
+               if (((AliCaloPhotonCuts*)fClusterCutArray->At(fiCut))->GetClusterType() == 1) isRunningEMCALrelAna = kTRUE;
+
+               Int_t eventNotAccepted = ((AliConvEventCuts*)fEventCutArray->At(iCut))->IsEventAcceptedByCut(fV0Reader->GetEventCuts(),fInputEvent,fMCEvent,fIsHeavyIon,isRunningEMCALrelAna);
                
                if(eventNotAccepted){
                // cout << "event rejected due to wrong trigger: " <<eventNotAccepted << endl;
@@ -1148,40 +1528,42 @@ void AliAnalysisTaskGammaConvCalo::UserExec(Option_t *)
 
                fHistoNEvents[iCut]->Fill(eventQuality); // Should be 0 here
                fHistoNGoodESDTracks[iCut]->Fill(fV0Reader->GetNumberOfPrimaryTracks());
-               if(((AliConversionCuts*)fCutArray->At(iCut))->IsHeavyIon() == 2)        fHistoNV0Tracks[iCut]->Fill(fInputEvent->GetVZEROData()->GetMTotV0A());
+               if(((AliConvEventCuts*)fEventCutArray->At(iCut))->IsHeavyIon() == 2)    fHistoNV0Tracks[iCut]->Fill(fInputEvent->GetVZEROData()->GetMTotV0A());
                        else fHistoNV0Tracks[iCut]->Fill(fInputEvent->GetVZEROData()->GetMTotV0A()+fInputEvent->GetVZEROData()->GetMTotV0C());
 
                if(fIsMC){
                        // Process MC Particle
-                       if(((AliConversionCuts*)fCutArray->At(iCut))->GetSignalRejection() != 0){
+                       fStringRecTruePi0s[iCut] = "";
+                       fStringRecTrueEtas[iCut] = "";
+                       if(((AliConvEventCuts*)fEventCutArray->At(iCut))->GetSignalRejection() != 0){
                                if(fInputEvent->IsA()==AliESDEvent::Class()){
-                               ((AliConversionCuts*)fCutArray->At(iCut))->GetNotRejectedParticles(((AliConversionCuts*)fCutArray->At(iCut))->GetSignalRejection(),
-                                                                                                                                                                       ((AliConversionCuts*)fCutArray->At(iCut))->GetAcceptedHeader(),
+                               ((AliConvEventCuts*)fEventCutArray->At(iCut))->GetNotRejectedParticles(((AliConvEventCuts*)fEventCutArray->At(iCut))->GetSignalRejection(),
+                                                                                                                                                                       ((AliConvEventCuts*)fEventCutArray->At(iCut))->GetAcceptedHeader(),
                                                                                                                                                                        fMCEvent);
                                }
                                else if(fInputEvent->IsA()==AliAODEvent::Class()){
-                               ((AliConversionCuts*)fCutArray->At(iCut))->GetNotRejectedParticles(((AliConversionCuts*)fCutArray->At(iCut))->GetSignalRejection(),
-                                                                                                                                                                       ((AliConversionCuts*)fCutArray->At(iCut))->GetAcceptedHeader(),
+                               ((AliConvEventCuts*)fEventCutArray->At(iCut))->GetNotRejectedParticles(((AliConvEventCuts*)fEventCutArray->At(iCut))->GetSignalRejection(),
+                                                                                                                                                                       ((AliConvEventCuts*)fEventCutArray->At(iCut))->GetAcceptedHeader(),
                                                                                                                                                                        fInputEvent);
                                }
 
-                               if(((AliConversionCuts*)fCutArray->At(iCut))->GetAcceptedHeader()){
-                                       for(Int_t i = 0;i<(((AliConversionCuts*)fCutArray->At(iCut))->GetAcceptedHeader())->GetEntries();i++){
+                               if(((AliConvEventCuts*)fEventCutArray->At(iCut))->GetAcceptedHeader()){
+                                       for(Int_t i = 0;i<(((AliConvEventCuts*)fEventCutArray->At(iCut))->GetAcceptedHeader())->GetEntries();i++){
                                                TString nameBin= fHistoMCHeaders[iCut]->GetXaxis()->GetBinLabel(i+1);
                                                if (nameBin.CompareTo("")== 0){
-                                               TString nameHeader = ((TObjString*)((TList*)((AliConversionCuts*)fCutArray->At(iCut))
-                                                                                                                       ->GetAcceptedHeader())->At(i))->GetString();
-                                               fHistoMCHeaders[iCut]->GetXaxis()->SetBinLabel(i+1,nameHeader.Data());
+                                                       TString nameHeader = ((TObjString*)((TList*)((AliConvEventCuts*)fEventCutArray->At(iCut))
+                                                                                                                               ->GetAcceptedHeader())->At(i))->GetString();
+                                                       fHistoMCHeaders[iCut]->GetXaxis()->SetBinLabel(i+1,nameHeader.Data());
                                                }
                                        }
                                }
                        }
                }
                if(fIsMC){
-               if(fInputEvent->IsA()==AliESDEvent::Class())
-                       ProcessMCParticles();
-               if(fInputEvent->IsA()==AliAODEvent::Class())
-                       ProcessAODMCParticles();
+                       if(fInputEvent->IsA()==AliESDEvent::Class())
+                               ProcessMCParticles();
+                       if(fInputEvent->IsA()==AliAODEvent::Class())
+                               ProcessAODMCParticles();
                }
                
                // 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)
@@ -1206,21 +1588,26 @@ void AliAnalysisTaskGammaConvCalo::UserExec(Option_t *)
                        }
                }
 
-               PhotonTagging(); // tag PCM photons with calorimeter
-
                CalculatePi0Candidates(); // Combine Gammas from conversion and from calo
 
                if(((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->DoBGCalculation()){
                        if(((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->BackgroundHandlerType() == 0){
-                       CalculateBackground(); // Combinatorial Background
-                       UpdateEventByEventData(); // Store Event for mixed Events
+                               CalculateBackground(); // Combinatorial Background
+                               UpdateEventByEventData(); // Store Event for mixed Events
                        }
                        else{
-                       CalculateBackgroundRP(); // Combinatorial Background
-                       fBGHandlerRP[iCut]->AddEvent(fGammaCandidates,fInputEvent); // Store Event for mixed Events
-                       fBGClusHandlerRP[iCut]->AddEvent(fClusterCandidates,fInputEvent); // Store Event for mixed Events
+                               CalculateBackgroundRP(); // Combinatorial Background
+                               fBGHandlerRP[iCut]->AddEvent(fGammaCandidates,fInputEvent); // Store Event for mixed Events
+                               fBGClusHandlerRP[iCut]->AddEvent(fClusterCandidates,fInputEvent); // Store Event for mixed Events
                        }
                }
+               
+               if(fIsMC && fInputEvent->IsA()==AliAODEvent::Class()){
+                       ProcessConversionPhotonsForMissingTagsAOD(); //Count missing tags
+               } else if (fIsMC && fInputEvent->IsA()==AliESDEvent::Class()){  
+                       ProcessConversionPhotonsForMissingTags(); //Count missing tags
+               }
+               
                if(((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->UseMCPSmearing() && fIsMC){
                        for(Int_t gamma=0;gamma<fGammaCandidates->GetEntries();gamma++){ // Smear the AODPhotons in MC
                        ((AliAODConversionPhoton*)fGammaCandidates->At(gamma))->SetPx(fUnsmearedPx[gamma]); // Reset Unsmeared Momenta
@@ -1254,7 +1641,7 @@ void AliAnalysisTaskGammaConvCalo::ProcessClusters()
        Int_t nclus = 0;
        nclus = fInputEvent->GetNumberOfCaloClusters();
        
-       cout << nclus << endl;
+//     cout << nclus << endl;
        
        if(nclus == 0)  return;
        
@@ -1263,9 +1650,10 @@ void AliAnalysisTaskGammaConvCalo::ProcessClusters()
        InputEvent()->GetPrimaryVertex()->GetXYZ(vertex);
        
        // Loop over EMCal clusters
-       for(Int_t i = 0; i < nclus; i++){
+       for(Long_t i = 0; i < nclus; i++){
                
-               AliVCluster* clus = fInputEvent->GetCaloCluster(i);             
+               AliVCluster* clus = NULL;
+               clus = fInputEvent->GetCaloCluster(i);          
                if (!clus) continue;
                if(!((AliCaloPhotonCuts*)fClusterCutArray->At(fiCut))->ClusterIsSelected(clus,fInputEvent,fIsMC)) continue;
                // TLorentzvector with cluster
@@ -1278,63 +1666,52 @@ void AliAnalysisTaskGammaConvCalo::ProcessClusters()
                // convert to AODConversionPhoton
                AliAODConversionPhoton *PhotonCandidate=new AliAODConversionPhoton(tmpvec);
                if(!PhotonCandidate) continue;
-
+               
+               // Flag Photon as CaloPhoton
+               PhotonCandidate->SetIsCaloPhoton();
+               PhotonCandidate->SetCaloClusterRef(i);
                // get MC label
-               Int_t mclab[2] = {0,0};         
                if(fIsMC){
-                       mclab[0] = clus->GetLabel();
-                       mclab[1] = clus->GetLabel();
-                       cout << "mclabels: " << mclab[0] << " " << mclab[1] << endl;
+                       Int_t* mclabelsCluster = clus->GetLabels();
+                       PhotonCandidate->SetNCaloPhotonMCLabels(clus->GetNLabels());
+//                     cout << clus->GetNLabels() << endl;
+                       if (clus->GetNLabels()>0){
+                               for (Int_t k =0; k< (Int_t)clus->GetNLabels(); k++){
+                                       if (k< 20)PhotonCandidate->SetCaloPhotonMCLabel(k,mclabelsCluster[k]);
+//                                     Int_t pdgCode = fMCStack->Particle(mclabelsCluster[k])->GetPdgCode();
+//                                     cout << "label " << k << "\t" << mclabelsCluster[k] << " pdg code: " << pdgCode << endl;
+                               }       
+                       }
                }
                
-               PhotonCandidate->SetMCLabel(mclab);
-               
-       //    fIsFromMBHeader = kTRUE;
-       //    if(fIsMC){
-       //      Int_t isPosFromMBHeader
-       //      = ((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(mclab, fMCStack, fInputEvent);
-       //      if(isPosFromMBHeader == 0 && ((AliConversionCuts*)fCutArray->At(fiCut))->GetSignalRejection() != 3) continue;
-       // 
-       //      Int_t isNegFromMBHeader
-       //      = ((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(mclab, fMCStack, fInputEvent);
-       //      if(isNegFromMBHeader == 0 && ((AliConversionCuts*)fCutArray->At(fiCut))->GetSignalRejection() != 3) continue;
-       //      
-       //      if( (isNegFromMBHeader+isPosFromMBHeader) != 4) fIsFromMBHeader = kFALSE;
-       //    }
-               
-               fHistoClusGammaPt[fiCut]->Fill(PhotonCandidate->Pt());
-               fClusterCandidates->Add(PhotonCandidate); // if no second loop is required add to events good gammas
-               
-       //    if(fIsFromMBHeader){
-       //      fHistoConvGammaPt[fiCut]->Fill(PhotonCandidate->Pt());
-       //      if (fDoPhotonQA > 0){
-       //        fHistoConvGammaR[fiCut]->Fill(PhotonCandidate->GetConversionRadius());
-       //        fHistoConvGammaEta[fiCut]->Fill(PhotonCandidate->Eta());
-       //      }
-       //    }
+               fIsFromMBHeader = kTRUE; 
+               fIsOverlappingWithOtherHeader = kFALSE;
+               // test whether largest contribution to cluster orginates in added signals
+               if (fIsMC && ((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsParticleFromBGEvent(PhotonCandidate->GetCaloPhotonMCLabel(0), fMCStack, fInputEvent) == 0) fIsFromMBHeader = kFALSE;
+               if (fIsMC ){
+                       if (clus->GetNLabels()>1){
+                               Int_t* mclabelsCluster = clus->GetLabels();
+                               for (Int_t l = 1; l < (Int_t)clus->GetNLabels(); l++ ){
+                                       if (((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsParticleFromBGEvent(mclabelsCluster[l], fMCStack, fInputEvent) == 0) fIsOverlappingWithOtherHeader = kTRUE;
+                               }       
+                       }       
+               }       
 
-               if(fIsMC){
-                       ProcessTrueClusterCandidates(PhotonCandidate);
+               if (fIsFromMBHeader && !fIsOverlappingWithOtherHeader){
+                       fHistoClusGammaPt[fiCut]->Fill(PhotonCandidate->Pt());
+                       fClusterCandidates->Add(PhotonCandidate); // if no second loop is required add to events good gammas
                }
+               if (fIsFromMBHeader && fIsOverlappingWithOtherHeader) fHistoClusOverlapHeadersGammaPt[fiCut]->Fill(PhotonCandidate->Pt());
                
-       //    if (fIsFromMBHeader && fDoPhotonQA == 2){
-       //      if (fIsHeavyIon == 1 && PhotonCandidate->Pt() > 0.399 && PhotonCandidate->Pt() < 12.){
-       //        fPtGamma = PhotonCandidate->Pt();
-       //        fDCAzPhoton = PhotonCandidate->GetDCAzToPrimVtx();
-       //        fRConvPhoton = PhotonCandidate->GetConversionRadius();
-       //        fEtaPhoton = PhotonCandidate->GetPhotonEta();
-       //        fCharCatPhoton = PhotonCandidate->GetPhotonQuality();
-       //        fTreeConvGammaPtDcazCat[fiCut]->Fill();
-       //    } else if ( PhotonCandidate->Pt() > 0.299 && PhotonCandidate->Pt() < 16.){
-       //        fPtGamma = PhotonCandidate->Pt();
-       //        fDCAzPhoton = PhotonCandidate->GetDCAzToPrimVtx();
-       //        fRConvPhoton = PhotonCandidate->GetConversionRadius();
-       //        fEtaPhoton = PhotonCandidate->GetPhotonEta();
-       //        fCharCatPhoton = PhotonCandidate->GetPhotonQuality();
-       //        fTreeConvGammaPtDcazCat[fiCut]->Fill();
-       //      }
-       //    }
+               if(fIsMC){
+                       if(fInputEvent->IsA()==AliESDEvent::Class()){
+                               ProcessTrueClusterCandidates(PhotonCandidate);
+                       } else {
+                               ProcessTrueClusterCandidatesAOD(PhotonCandidate);
+                       }       
+               }
                
+               delete tmpvec;
        }
        
 }
@@ -1342,57 +1719,138 @@ void AliAnalysisTaskGammaConvCalo::ProcessClusters()
 //________________________________________________________________________
 void AliAnalysisTaskGammaConvCalo::ProcessTrueClusterCandidates(AliAODConversionPhoton *TruePhotonCandidate)
 {
+               
+       TParticle *Photon = NULL;
+       if (!TruePhotonCandidate->GetIsCaloPhoton()) AliFatal("CaloPhotonFlag has not been set task will abort");
+       fHistoTrueNLabelsInClus[fiCut]->Fill(TruePhotonCandidate->GetNCaloPhotonMCLabels());
        
-       TParticle *Photon = TruePhotonCandidate->GetMCParticle(fMCStack);
-       
+       if (TruePhotonCandidate->GetNCaloPhotonMCLabels()>0)Photon = fMCStack->Particle(TruePhotonCandidate->GetCaloPhotonMCLabel(0));
+               else return;
+               
        if(Photon == NULL){
        //    cout << "no photon" << endl;
                return;
        }
+
+       TruePhotonCandidate->SetCaloPhotonMCFlags(fMCStack);
        
-       if(Photon->GetPdgCode() != 22){
-       //    cout << "pdg code: " << Photon->GetPdgCode() << endl;
-               return; // Particle is no Photon
+       // True Photon
+       if(fIsFromMBHeader && !fIsOverlappingWithOtherHeader){
+               if (TruePhotonCandidate->IsLargestComponentPhoton() || TruePhotonCandidate->IsLargestComponentElectron() )fHistoTrueClusGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
+                       else fHistoTrueClusEMNonLeadingPt[fiCut]->Fill(TruePhotonCandidate->Pt());
+               if (fDoClusterQA > 0){
+                       if (TruePhotonCandidate->IsLargestComponentPhoton()){ 
+                               fHistoTrueClusUnConvGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
+                               fHistoTrueClusUnConvGammaMCPt[fiCut]->Fill(Photon->Pt());
+                       }       
+                       if (TruePhotonCandidate->IsLargestComponentElectron()) 
+                               fHistoTrueClusElectronPt[fiCut]->Fill(TruePhotonCandidate->Pt());
+                       if (TruePhotonCandidate->IsLargestComponentElectron() && TruePhotonCandidate->IsConversion()){
+                               fHistoTrueClusConvGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
+                               fHistoTrueClusConvGammaMCPt[fiCut]->Fill(((TParticle*)fMCStack->Particle(Photon->GetMother(0)))->Pt());
+                       }       
+                       if (TruePhotonCandidate->IsLargestComponentElectron() && TruePhotonCandidate->IsConversion() && TruePhotonCandidate->IsConversionFullyContained()) 
+                               fHistoTrueClusConvGammaFullyPt[fiCut]->Fill(TruePhotonCandidate->Pt());
+                       if (TruePhotonCandidate->IsMerged() || TruePhotonCandidate->IsMergedPartConv() || TruePhotonCandidate->IsDalitzMerged())
+                               fHistoTrueClusMergedGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
+                       if (TruePhotonCandidate->IsMergedPartConv())
+                               fHistoTrueClusMergedPartConvGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
+                       if (TruePhotonCandidate->IsDalitz()) 
+                               fHistoTrueClusDalitzPt[fiCut]->Fill(TruePhotonCandidate->Pt());
+                       if (TruePhotonCandidate->IsDalitzMerged()) 
+                               fHistoTrueClusDalitzMergedPt[fiCut]->Fill(TruePhotonCandidate->Pt());
+                       if (TruePhotonCandidate->IsPhotonWithElecMother()) 
+                               fHistoTrueClusPhotonFromElecMotherPt[fiCut]->Fill(TruePhotonCandidate->Pt());
+                       if (TruePhotonCandidate->IsShower()) 
+                               fHistoTrueClusShowerPt[fiCut]->Fill(TruePhotonCandidate->Pt());
+                       if (TruePhotonCandidate->IsSubLeadingEM())
+                               fHistoTrueClusSubLeadingPt[fiCut]->Fill(TruePhotonCandidate->Pt());
+                       fHistoTrueClusNParticles[fiCut]->Fill(TruePhotonCandidate->GetNCaloPhotonMotherMCLabels());
+               }
        }
-       
+
+       if(Photon->GetMother(0) <= fMCStack->GetNprimary()){
+               // Count just primary MC Gammas as true --> For Ratio esdtruegamma / mcconvgamma
+               if(fIsFromMBHeader){
+                       fHistoTruePrimaryClusGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
+                       fHistoTruePrimaryClusGammaESDPtMCPt[fiCut]->Fill(TruePhotonCandidate->Pt(),Photon->Pt()); // Allways Filled
+               }
+       }       
+       return;
+}
+
+
+//________________________________________________________________________
+void AliAnalysisTaskGammaConvCalo::ProcessTrueClusterCandidatesAOD(AliAODConversionPhoton *TruePhotonCandidate)
+{
+       AliAODMCParticle *Photon = NULL;
+       TClonesArray *AODMCTrackArray = dynamic_cast<TClonesArray*>(fInputEvent->FindListObject(AliAODMCParticle::StdBranchName()));
+       if (AODMCTrackArray){
+               if (!TruePhotonCandidate->GetIsCaloPhoton()) AliFatal("CaloPhotonFlag has not been set task will abort");
+               if (TruePhotonCandidate->GetNCaloPhotonMCLabels()>0) Photon = (AliAODMCParticle*) AODMCTrackArray->At(TruePhotonCandidate->GetCaloPhotonMCLabel(0));
+                       else return;
+       } else {
+               AliInfo("AODMCTrackArray could not be loaded");
+               return;
+       }
+
+       if(Photon == NULL){
+       //      cout << "no photon" << endl;
+               return;
+       }
+       TruePhotonCandidate->SetCaloPhotonMCFlagsAOD(fInputEvent);
+       fHistoTrueNLabelsInClus[fiCut]->Fill(TruePhotonCandidate->GetNCaloPhotonMCLabels());    
+       // True Photon
+       if(fIsFromMBHeader && !fIsOverlappingWithOtherHeader){
+               if (TruePhotonCandidate->IsLargestComponentPhoton() || TruePhotonCandidate->IsLargestComponentElectron() )fHistoTrueClusGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
+                       else fHistoTrueClusEMNonLeadingPt[fiCut]->Fill(TruePhotonCandidate->Pt());
+               if (fDoClusterQA > 0){
+                       if (TruePhotonCandidate->IsLargestComponentPhoton()) {
+                               fHistoTrueClusUnConvGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
+                               fHistoTrueClusUnConvGammaMCPt[fiCut]->Fill(Photon->Pt());
+                       }       
+                       if (TruePhotonCandidate->IsLargestComponentElectron()) 
+                               fHistoTrueClusElectronPt[fiCut]->Fill(TruePhotonCandidate->Pt());
+                       if (TruePhotonCandidate->IsLargestComponentElectron() && TruePhotonCandidate->IsConversion()) {
+                               fHistoTrueClusConvGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
+                               AliAODMCParticle *Mother = (AliAODMCParticle*) AODMCTrackArray->At(Photon->GetMother());
+                               fHistoTrueClusConvGammaMCPt[fiCut]->Fill(Mother->Pt());
+                       }       
+                       if (TruePhotonCandidate->IsLargestComponentElectron() && TruePhotonCandidate->IsConversion() && TruePhotonCandidate->IsConversionFullyContained()) 
+                               fHistoTrueClusConvGammaFullyPt[fiCut]->Fill(TruePhotonCandidate->Pt());
+                       if (TruePhotonCandidate->IsMerged() || TruePhotonCandidate->IsMergedPartConv() || TruePhotonCandidate->IsDalitzMerged())
+                               fHistoTrueClusMergedGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
+                       if (TruePhotonCandidate->IsMergedPartConv())
+                               fHistoTrueClusMergedPartConvGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
+                       if (TruePhotonCandidate->IsDalitz()) 
+                               fHistoTrueClusDalitzPt[fiCut]->Fill(TruePhotonCandidate->Pt());
+                       if (TruePhotonCandidate->IsDalitzMerged()) 
+                               fHistoTrueClusDalitzMergedPt[fiCut]->Fill(TruePhotonCandidate->Pt());
+                       if (TruePhotonCandidate->IsPhotonWithElecMother()) 
+                               fHistoTrueClusPhotonFromElecMotherPt[fiCut]->Fill(TruePhotonCandidate->Pt());
+                       if (TruePhotonCandidate->IsShower()) 
+                               fHistoTrueClusShowerPt[fiCut]->Fill(TruePhotonCandidate->Pt());
+                       if (TruePhotonCandidate->IsSubLeadingEM())
+                               fHistoTrueClusSubLeadingPt[fiCut]->Fill(TruePhotonCandidate->Pt());
+                       fHistoTrueClusNParticles[fiCut]->Fill(TruePhotonCandidate->GetNCaloPhotonMotherMCLabels());
+               }
+       }
+
        // True Photon
        if(fIsFromMBHeader){
                fHistoTrueClusGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
-               if (fDoPhotonQA > 0) fHistoTrueConvGammaEta[fiCut]->Fill(TruePhotonCandidate->Eta());
+//             if (fDoPhotonQA > 0) fHistoTrueConvGammaEta[fiCut]->Fill(TruePhotonCandidate->Eta());
        }
 
-       if(Photon->GetMother(0) <= fMCStack->GetNprimary()){
+       if(Photon->IsPrimary()){
                // Count just primary MC Gammas as true --> For Ratio esdtruegamma / mcconvgamma
                if(fIsFromMBHeader){
-               fHistoTruePrimaryClusGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
-               fHistoTruePrimaryClusGammaESDPtMCPt[fiCut]->Fill(TruePhotonCandidate->Pt(),Photon->Pt()); // Allways Filled
-               }
-       }
-
-       // maybe later
-       //  else{
-       //    if(fIsFromMBHeader){
-       //      fCharPhotonMCInfo = 2;
-       //      fHistoTrueSecondaryConvGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
-       //      if(fMCStack->Particle(Photon->GetMother(0))->GetMother(0) > -1 &&
-       //         fMCStack->Particle(fMCStack->Particle(Photon->GetMother(0))->GetMother(0))->GetPdgCode() == 3122){
-       //        fHistoTrueSecondaryConvGammaFromXFromLambdaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
-       //        fCharPhotonMCInfo = 5;
-       //      }
-       //      if(fMCStack->Particle(Photon->GetMother(0))->GetMother(0) > -1 &&
-       //         fMCStack->Particle(fMCStack->Particle(Photon->GetMother(0))->GetMother(0))->GetPdgCode() == 310){
-       //        fHistoTrueSecondaryConvGammaFromXFromK0sPt[fiCut]->Fill(TruePhotonCandidate->Pt());
-       //        fCharPhotonMCInfo = 4;
-       //      }
-       //      if(fMCStack->Particle(Photon->GetMother(0))->GetMother(0) > -1 &&
-       //         fMCStack->Particle(fMCStack->Particle(Photon->GetMother(0))->GetMother(0))->GetPdgCode() == 221){
-       //        fCharPhotonMCInfo = 3;
-       //      }
-       //    }
-       //  }
+                       fHistoTruePrimaryClusGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
+                       fHistoTruePrimaryClusGammaESDPtMCPt[fiCut]->Fill(TruePhotonCandidate->Pt(),Photon->Pt()); // Allways Filled
+               }
+       }       
 }
 
-
 //________________________________________________________________________
 void AliAnalysisTaskGammaConvCalo::ProcessPhotonCandidates()
 {
@@ -1404,21 +1862,18 @@ void AliAnalysisTaskGammaConvCalo::ProcessPhotonCandidates()
                AliAODConversionPhoton* PhotonCandidate = (AliAODConversionPhoton*) fReaderGammas->At(i);
                if(!PhotonCandidate) continue;
                fIsFromMBHeader = kTRUE;
-               if(fIsMC && ((AliConversionCuts*)fCutArray->At(fiCut))->GetSignalRejection() != 0){
-                       Int_t isPosFromMBHeader
-                       = ((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(PhotonCandidate->GetMCLabelPositive(), fMCStack, fInputEvent);
-                       if(isPosFromMBHeader == 0 && ((AliConversionCuts*)fCutArray->At(fiCut))->GetSignalRejection() != 3) continue;
-                       Int_t isNegFromMBHeader
-                       = ((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(PhotonCandidate->GetMCLabelNegative(), fMCStack, fInputEvent);
-                       if(isNegFromMBHeader == 0 && ((AliConversionCuts*)fCutArray->At(fiCut))->GetSignalRejection() != 3) continue;
-                       
+               if(fIsMC && ((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetSignalRejection() != 0){
+                       Int_t isPosFromMBHeader = ((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsParticleFromBGEvent(PhotonCandidate->GetMCLabelPositive(), fMCStack, fInputEvent);
+                       if(isPosFromMBHeader == 0 && ((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetSignalRejection() != 3) continue;
+                       Int_t isNegFromMBHeader = ((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsParticleFromBGEvent(PhotonCandidate->GetMCLabelNegative(), fMCStack, fInputEvent);
+                       if(isNegFromMBHeader == 0 && ((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetSignalRejection() != 3) continue;
                        if( (isNegFromMBHeader+isPosFromMBHeader) != 4) fIsFromMBHeader = kFALSE;
                }
                
-               if(!((AliConversionCuts*)fCutArray->At(fiCut))->PhotonIsSelected(PhotonCandidate,fInputEvent)) continue;
-               if(!((AliConversionCuts*)fCutArray->At(fiCut))->InPlaneOutOfPlaneCut(PhotonCandidate->GetPhotonPhi(),fEventPlaneAngle)) continue;
-               if(!((AliConversionCuts*)fCutArray->At(fiCut))->UseElecSharingCut() &&
-               !((AliConversionCuts*)fCutArray->At(fiCut))->UseToCloseV0sCut()){
+               if(!((AliConversionPhotonCuts*)fCutArray->At(fiCut))->PhotonIsSelected(PhotonCandidate,fInputEvent)) continue;
+               if(!((AliConversionPhotonCuts*)fCutArray->At(fiCut))->InPlaneOutOfPlaneCut(PhotonCandidate->GetPhotonPhi(),fEventPlaneAngle)) continue;
+               if(!((AliConversionPhotonCuts*)fCutArray->At(fiCut))->UseElecSharingCut() &&
+               !((AliConversionPhotonCuts*)fCutArray->At(fiCut))->UseToCloseV0sCut()){
                        fGammaCandidates->Add(PhotonCandidate); // if no second loop is required add to events good gammas
                        
                        if(fIsFromMBHeader){
@@ -1436,44 +1891,42 @@ void AliAnalysisTaskGammaConvCalo::ProcessPhotonCandidates()
                        }
                        if (fIsFromMBHeader && fDoPhotonQA == 2){
                                if (fIsHeavyIon == 1 && PhotonCandidate->Pt() > 0.399 && PhotonCandidate->Pt() < 12.){
-                               fPtGamma = PhotonCandidate->Pt();
-                               fDCAzPhoton = PhotonCandidate->GetDCAzToPrimVtx();
-                               fRConvPhoton = PhotonCandidate->GetConversionRadius();
-                               fEtaPhoton = PhotonCandidate->GetPhotonEta();
-                               fCharCatPhoton = PhotonCandidate->GetPhotonQuality();
-                               fTreeConvGammaPtDcazCat[fiCut]->Fill();
+                                       fPtGamma = PhotonCandidate->Pt();
+                                       fDCAzPhoton = PhotonCandidate->GetDCAzToPrimVtx();
+                                       fRConvPhoton = PhotonCandidate->GetConversionRadius();
+                                       fEtaPhoton = PhotonCandidate->GetPhotonEta();
+                                       fCharCatPhoton = PhotonCandidate->GetPhotonQuality();
+                                       fTreeConvGammaPtDcazCat[fiCut]->Fill();
                                } else if ( PhotonCandidate->Pt() > 0.299 && PhotonCandidate->Pt() < 16.){
-                               fPtGamma = PhotonCandidate->Pt();
-                               fDCAzPhoton = PhotonCandidate->GetDCAzToPrimVtx();
-                               fRConvPhoton = PhotonCandidate->GetConversionRadius();
-                               fEtaPhoton = PhotonCandidate->GetPhotonEta();
-                               fCharCatPhoton = PhotonCandidate->GetPhotonQuality();
-                               fTreeConvGammaPtDcazCat[fiCut]->Fill();
+                                       fPtGamma = PhotonCandidate->Pt();
+                                       fDCAzPhoton = PhotonCandidate->GetDCAzToPrimVtx();
+                                       fRConvPhoton = PhotonCandidate->GetConversionRadius();
+                                       fEtaPhoton = PhotonCandidate->GetPhotonEta();
+                                       fCharCatPhoton = PhotonCandidate->GetPhotonQuality();
+                                       fTreeConvGammaPtDcazCat[fiCut]->Fill();
                                }
                        }
-               } else if(((AliConversionCuts*)fCutArray->At(fiCut))->UseElecSharingCut()){ // if Shared Electron cut is enabled, Fill array, add to step one
-                       ((AliConversionCuts*)fCutArray->At(fiCut))->FillElectonLabelArray(PhotonCandidate,nV0);
+               } else if(((AliConversionPhotonCuts*)fCutArray->At(fiCut))->UseElecSharingCut()){ // if Shared Electron cut is enabled, Fill array, add to step one
+                       ((AliConversionPhotonCuts*)fCutArray->At(fiCut))->FillElectonLabelArray(PhotonCandidate,nV0);
                        nV0++;
                        GammaCandidatesStepOne->Add(PhotonCandidate);
-               } else if(!((AliConversionCuts*)fCutArray->At(fiCut))->UseElecSharingCut() &&
-                               ((AliConversionCuts*)fCutArray->At(fiCut))->UseToCloseV0sCut()){ // shared electron is disabled, step one not needed -> step two
+               } else if(!((AliConversionPhotonCuts*)fCutArray->At(fiCut))->UseElecSharingCut() &&
+                               ((AliConversionPhotonCuts*)fCutArray->At(fiCut))->UseToCloseV0sCut()){ // shared electron is disabled, step one not needed -> step two
                        GammaCandidatesStepTwo->Add(PhotonCandidate);
                }
        }
-       if(((AliConversionCuts*)fCutArray->At(fiCut))->UseElecSharingCut()){
+       if(((AliConversionPhotonCuts*)fCutArray->At(fiCut))->UseElecSharingCut()){
                for(Int_t i = 0;i<GammaCandidatesStepOne->GetEntries();i++){
                        AliAODConversionPhoton *PhotonCandidate= (AliAODConversionPhoton*) GammaCandidatesStepOne->At(i);
                        if(!PhotonCandidate) continue;
                        fIsFromMBHeader = kTRUE;
-                       if(fMCStack && ((AliConversionCuts*)fCutArray->At(fiCut))->GetSignalRejection() != 0){
-                               Int_t isPosFromMBHeader
-                               = ((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(PhotonCandidate->GetMCLabelPositive(), fMCStack, fInputEvent);
-                               Int_t isNegFromMBHeader
-                               = ((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(PhotonCandidate->GetMCLabelNegative(), fMCStack, fInputEvent);
+                       if(fMCStack && ((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetSignalRejection() != 0){
+                               Int_t isPosFromMBHeader = ((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsParticleFromBGEvent(PhotonCandidate->GetMCLabelPositive(), fMCStack, fInputEvent);
+                               Int_t isNegFromMBHeader = ((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsParticleFromBGEvent(PhotonCandidate->GetMCLabelNegative(), fMCStack, fInputEvent);
                                if( (isNegFromMBHeader+isPosFromMBHeader) != 4) fIsFromMBHeader = kFALSE;
                        }
-                       if(!((AliConversionCuts*)fCutArray->At(fiCut))->RejectSharedElectronV0s(PhotonCandidate,i,GammaCandidatesStepOne->GetEntries())) continue;
-                       if(!((AliConversionCuts*)fCutArray->At(fiCut))->UseToCloseV0sCut()){ // To Colse v0s cut diabled, step two not needed
+                       if(!((AliConversionPhotonCuts*)fCutArray->At(fiCut))->RejectSharedElectronV0s(PhotonCandidate,i,GammaCandidatesStepOne->GetEntries())) continue;
+                       if(!((AliConversionPhotonCuts*)fCutArray->At(fiCut))->UseToCloseV0sCut()){ // To Colse v0s cut diabled, step two not needed
                                fGammaCandidates->Add(PhotonCandidate);
                                if(fIsFromMBHeader){
                                        fHistoConvGammaPt[fiCut]->Fill(PhotonCandidate->Pt());
@@ -1509,19 +1962,17 @@ void AliAnalysisTaskGammaConvCalo::ProcessPhotonCandidates()
                        }
                }
        }
-       if(((AliConversionCuts*)fCutArray->At(fiCut))->UseToCloseV0sCut()){
+       if(((AliConversionPhotonCuts*)fCutArray->At(fiCut))->UseToCloseV0sCut()){
                for(Int_t i = 0;i<GammaCandidatesStepTwo->GetEntries();i++){
                        AliAODConversionPhoton* PhotonCandidate = (AliAODConversionPhoton*) GammaCandidatesStepTwo->At(i);
                        if(!PhotonCandidate) continue;
                        fIsFromMBHeader = kTRUE;
-                       if(fMCStack && ((AliConversionCuts*)fCutArray->At(fiCut))->GetSignalRejection() != 0){
-                               Int_t isPosFromMBHeader
-                               = ((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(PhotonCandidate->GetMCLabelPositive(), fMCStack, fInputEvent);
-                               Int_t isNegFromMBHeader
-                               = ((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(PhotonCandidate->GetMCLabelNegative(), fMCStack, fInputEvent);
+                       if(fMCStack && ((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetSignalRejection() != 0){
+                               Int_t isPosFromMBHeader = ((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsParticleFromBGEvent(PhotonCandidate->GetMCLabelPositive(), fMCStack, fInputEvent);
+                               Int_t isNegFromMBHeader = ((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsParticleFromBGEvent(PhotonCandidate->GetMCLabelNegative(), fMCStack, fInputEvent);
                                if( (isNegFromMBHeader+isPosFromMBHeader) != 4) fIsFromMBHeader = kFALSE;
                        }
-                       if(!((AliConversionCuts*)fCutArray->At(fiCut))->RejectToCloseV0s(PhotonCandidate,GammaCandidatesStepTwo,i)) continue;
+                       if(!((AliConversionPhotonCuts*)fCutArray->At(fiCut))->RejectToCloseV0s(PhotonCandidate,GammaCandidatesStepTwo,i)) continue;
                        fGammaCandidates->Add(PhotonCandidate); // Add gamma to current cut TList
                        if(fIsFromMBHeader){
                                fHistoConvGammaPt[fiCut]->Fill(PhotonCandidate->Pt());
@@ -1562,6 +2013,7 @@ void AliAnalysisTaskGammaConvCalo::ProcessPhotonCandidates()
        GammaCandidatesStepTwo = 0x0;
   
 }
+
 //________________________________________________________________________
 void AliAnalysisTaskGammaConvCalo::ProcessTruePhotonCandidatesAOD(AliAODConversionPhoton *TruePhotonCandidate)
 {
@@ -1575,6 +2027,7 @@ void AliAnalysisTaskGammaConvCalo::ProcessTruePhotonCandidatesAOD(AliAODConversi
        }
        
        TClonesArray *AODMCTrackArray = dynamic_cast<TClonesArray*>(fInputEvent->FindListObject(AliAODMCParticle::StdBranchName()));
+       if (AODMCTrackArray == NULL) return;
        AliAODMCParticle *posDaughter = (AliAODMCParticle*) AODMCTrackArray->At(TruePhotonCandidate->GetMCLabelPositive());
        AliAODMCParticle *negDaughter = (AliAODMCParticle*) AODMCTrackArray->At(TruePhotonCandidate->GetMCLabelNegative());
        fCharPhotonMCInfo = 0;
@@ -1597,18 +2050,14 @@ void AliAnalysisTaskGammaConvCalo::ProcessTruePhotonCandidatesAOD(AliAODConversi
                fCharPhotonMCInfo = 1;
                return; //One Particle is not a electron
        }
+       
        if(posDaughter->GetPdgCode()==negDaughter->GetPdgCode()){
                fCharPhotonMCInfo = 1;
                return; // Same Charge
        }
        
-       AliAODMCParticle *Photon = (AliAODMCParticle*) AODMCTrackArray->At(posDaughter->GetMother());
-       AliVTrack * electronCandidate = ((AliConversionCuts*)fCutArray->At(fiCut))->GetTrack(fInputEvent,TruePhotonCandidate->GetTrackLabelNegative() );
-       AliVTrack * positronCandidate = ((AliConversionCuts*)fCutArray->At(fiCut))->GetTrack(fInputEvent,TruePhotonCandidate->GetTrackLabelPositive() );
-       Double_t deltaPhi = magField * TVector2::Phi_mpi_pi( electronCandidate->Phi()-positronCandidate->Phi());
-       
+       AliAODMCParticle *Photon = (AliAODMCParticle*) AODMCTrackArray->At(posDaughter->GetMother());   
        if(Photon->GetPdgCode() != 22){
-               fHistoTrueDalitzPsiPairDeltaPhi[fiCut]->Fill(deltaPhi,TruePhotonCandidate->GetPsiPair());
                fCharPhotonMCInfo = 1;
                return; // Mother is no Photon
        }
@@ -1626,7 +2075,6 @@ void AliAnalysisTaskGammaConvCalo::ProcessTruePhotonCandidatesAOD(AliAODConversi
                fHistoTrueConvGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
                if (fDoPhotonQA > 0) fHistoTrueConvGammaEta[fiCut]->Fill(TruePhotonCandidate->Eta());
        }
-       fHistoTrueGammaPsiPairDeltaPhi[fiCut]->Fill(deltaPhi,TruePhotonCandidate->GetPsiPair());
        if(Photon->IsPrimary()){
                // Count just primary MC Gammas as true --> For Ratio esdtruegamma / mcconvgamma
                if(fIsFromMBHeader){
@@ -1655,12 +2103,13 @@ void AliAnalysisTaskGammaConvCalo::ProcessTruePhotonCandidatesAOD(AliAODConversi
                        }
                }
        }
-  
+       TruePhotonCandidate->SetIsTrueConvertedPhoton();
 }
+
 //________________________________________________________________________
 void AliAnalysisTaskGammaConvCalo::ProcessTruePhotonCandidates(AliAODConversionPhoton *TruePhotonCandidate)
 {
-       
+
        Double_t magField = fInputEvent->GetMagneticField();
        if( magField  < 0.0 ){
                magField =  1.0;
@@ -1668,7 +2117,7 @@ void AliAnalysisTaskGammaConvCalo::ProcessTruePhotonCandidates(AliAODConversionP
        else {
                magField =  -1.0;
        }
-       
+
        // Process True Photons
        TParticle *posDaughter = TruePhotonCandidate->GetPositiveMCDaughter(fMCStack);
        TParticle *negDaughter = TruePhotonCandidate->GetNegativeMCDaughter(fMCStack);  
@@ -1689,38 +2138,29 @@ void AliAnalysisTaskGammaConvCalo::ProcessTruePhotonCandidates(AliAODConversionP
        if(pdgCode[0]!=11 || pdgCode[1]!=11) return; //One Particle is not a electron
        
        if(posDaughter->GetPdgCode()==negDaughter->GetPdgCode()) return; // Same Charge
-       
+
        TParticle *Photon = TruePhotonCandidate->GetMCParticle(fMCStack);
-       AliVTrack * electronCandidate = ((AliConversionCuts*)fCutArray->At(fiCut))->GetTrack(fInputEvent,TruePhotonCandidate->GetTrackLabelNegative() );
-       AliVTrack * positronCandidate = ((AliConversionCuts*)fCutArray->At(fiCut))->GetTrack(fInputEvent,TruePhotonCandidate->GetTrackLabelPositive() );
-       Double_t deltaPhi = magField * TVector2::Phi_mpi_pi( electronCandidate->Phi()-positronCandidate->Phi());
        
        if(Photon->GetPdgCode() != 22){
-               fHistoTrueDalitzPsiPairDeltaPhi[fiCut]->Fill(deltaPhi,TruePhotonCandidate->GetPsiPair());
                return; // Mother is no Photon
        }
        
        if(posDaughter->GetUniqueID() != 5 || negDaughter->GetUniqueID() !=5) return;// check if the daughters come from a conversion
        
-       
-       
        // True Photon
        if(fIsFromMBHeader){
                fHistoTrueConvGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
                if (fDoPhotonQA > 0) fHistoTrueConvGammaEta[fiCut]->Fill(TruePhotonCandidate->Eta());
        }
-       fHistoTrueGammaPsiPairDeltaPhi[fiCut]->Fill(deltaPhi,TruePhotonCandidate->GetPsiPair());
        if(posDaughter->GetMother(0) <= fMCStack->GetNprimary()){
                // Count just primary MC Gammas as true --> For Ratio esdtruegamma / mcconvgamma
                if(fIsFromMBHeader){
                        fCharPhotonMCInfo = 6;
                        fHistoTruePrimaryConvGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
                        fHistoTruePrimaryConvGammaESDPtMCPt[fiCut]->Fill(TruePhotonCandidate->Pt(),Photon->Pt()); // Allways Filled
-               
                }
                // (Not Filled for i6, Extra Signal Gamma (parambox) are secondary)
-       }
-       else{
+       } else {
                if(fIsFromMBHeader){
                        fCharPhotonMCInfo = 2;
                        fHistoTrueSecondaryConvGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
@@ -1740,21 +2180,15 @@ void AliAnalysisTaskGammaConvCalo::ProcessTruePhotonCandidates(AliAODConversionP
                        }
                }
        }
-       
-       // pi0 photon
-       //Bool_t bpi0 = 0;
-       Int_t imother = Photon->GetMother(0);
-       AliMCParticle *McMother = static_cast<AliMCParticle*>(fMCEvent->GetTrack(imother));
-       if(McMother->PdgCode() == 111){
-               fHistoTrueConvPi0GammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
-       }
-  
+       TruePhotonCandidate->SetIsTrueConvertedPhoton();
+       return;
 }
 //________________________________________________________________________
 void AliAnalysisTaskGammaConvCalo::ProcessAODMCParticles()
 {
        
        TClonesArray *AODMCTrackArray = dynamic_cast<TClonesArray*>(fInputEvent->FindListObject(AliAODMCParticle::StdBranchName()));
+       if (AODMCTrackArray == NULL) return;
        
        // Loop over all primary MC particle
        for(Int_t i = 0; i < AODMCTrackArray->GetEntriesFast(); i++) {
@@ -1764,69 +2198,71 @@ void AliAnalysisTaskGammaConvCalo::ProcessAODMCParticles()
                if (!particle->IsPrimary()) continue;
                
                Int_t isMCFromMBHeader = -1;
-               if(((AliConversionCuts*)fCutArray->At(fiCut))->GetSignalRejection() != 0){
-                       isMCFromMBHeader
-                       = ((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(i, fMCStack, fInputEvent);
-                       if(isMCFromMBHeader == 0 && ((AliConversionCuts*)fCutArray->At(fiCut))->GetSignalRejection() != 3) continue;
+               if(((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetSignalRejection() != 0){
+                       isMCFromMBHeader = ((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsParticleFromBGEvent(i, fMCStack, fInputEvent);
+                       if(isMCFromMBHeader == 0 && ((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetSignalRejection() != 3) continue;
                }
                
-               if(!((AliConversionCuts*)fCutArray->At(fiCut))->InPlaneOutOfPlaneCut(particle->Phi(),fEventPlaneAngle,kFALSE)) continue;
-               if(((AliConversionCuts*)fCutArray->At(fiCut))->PhotonIsSelectedAODMC(particle,AODMCTrackArray,kFALSE)){
+               if(!((AliConversionPhotonCuts*)fCutArray->At(fiCut))->InPlaneOutOfPlaneCut(particle->Phi(),fEventPlaneAngle,kFALSE)) continue;
+               if(((AliConversionPhotonCuts*)fCutArray->At(fiCut))->PhotonIsSelectedAODMC(particle,AODMCTrackArray,kFALSE)){
                        fHistoMCAllGammaPt[fiCut]->Fill(particle->Pt()); // All MC Gamma
-                               if(particle->GetMother() >-1){ // Meson Decay Gamma
-                                       switch((static_cast<AliAODMCParticle*>(AODMCTrackArray->At(particle->GetMother())))->GetPdgCode()){
-                                       case 111: // Pi0
-                                               fHistoMCDecayGammaPi0Pt[fiCut]->Fill(particle->Pt());
-                                               break;
-                                       case 113: // Rho0
-                                               fHistoMCDecayGammaRhoPt[fiCut]->Fill(particle->Pt());
-                                               break;
-                                       case 221: // Eta
-                                               fHistoMCDecayGammaEtaPt[fiCut]->Fill(particle->Pt());
-                                               break;
-                                       case 223: // Omega
-                                               fHistoMCDecayGammaOmegaPt[fiCut]->Fill(particle->Pt());
-                                               break;
-                                       case 331: // Eta'
-                                               fHistoMCDecayGammaEtapPt[fiCut]->Fill(particle->Pt());
-                                               break;
-                                       case 333: // Phi
-                                               fHistoMCDecayGammaPhiPt[fiCut]->Fill(particle->Pt());
-                                               break;
-                                       case 3212: // Sigma
-                                               fHistoMCDecayGammaSigmaPt[fiCut]->Fill(particle->Pt());
-                                               break;
-                                       }
-                               }
+                       if (abs(particle->Eta()) < 0.66 ){
+                               if (particle->Phi() > 1.39626 && particle->Phi() < 3.125) fHistoMCAllGammaEMCALAccPt[fiCut]->Fill(particle->Pt());
                        }
-                       if(((AliConversionCuts*)fCutArray->At(fiCut))->PhotonIsSelectedAODMC(particle,AODMCTrackArray,kTRUE)){
-                               Double_t rConv = 0;
-                               for(Int_t daughterIndex=particle->GetDaughter(0);daughterIndex<=particle->GetDaughter(1);daughterIndex++){
-                                       AliAODMCParticle *tmpDaughter = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(daughterIndex));
-                                       if(!tmpDaughter) continue;
-                                       if(abs(tmpDaughter->GetPdgCode()) == 11){
-                                               rConv = sqrt( (tmpDaughter->Xv()*tmpDaughter->Xv()) + (tmpDaughter->Yv()*tmpDaughter->Yv()) );
-                                       }
+                       if(particle->GetMother() >-1){ // Meson Decay Gamma
+                               switch((static_cast<AliAODMCParticle*>(AODMCTrackArray->At(particle->GetMother())))->GetPdgCode()){
+                               case 111: // Pi0
+                                       fHistoMCDecayGammaPi0Pt[fiCut]->Fill(particle->Pt());
+                                       break;
+                               case 113: // Rho0
+                                       fHistoMCDecayGammaRhoPt[fiCut]->Fill(particle->Pt());
+                                       break;
+                               case 221: // Eta
+                                       fHistoMCDecayGammaEtaPt[fiCut]->Fill(particle->Pt());
+                                       break;
+                               case 223: // Omega
+                                       fHistoMCDecayGammaOmegaPt[fiCut]->Fill(particle->Pt());
+                                       break;
+                               case 331: // Eta'
+                                       fHistoMCDecayGammaEtapPt[fiCut]->Fill(particle->Pt());
+                                       break;
+                               case 333: // Phi
+                                       fHistoMCDecayGammaPhiPt[fiCut]->Fill(particle->Pt());
+                                       break;
+                               case 3212: // Sigma
+                                       fHistoMCDecayGammaSigmaPt[fiCut]->Fill(particle->Pt());
+                                       break;
                                }
-                               fHistoMCConvGammaPt[fiCut]->Fill(particle->Pt());
-                               if (fDoPhotonQA > 0){
-                                       fHistoMCConvGammaR[fiCut]->Fill(rConv);
-                                       fHistoMCConvGammaEta[fiCut]->Fill(particle->Eta());
+                       }
+               }
+               if(((AliConversionPhotonCuts*)fCutArray->At(fiCut))->PhotonIsSelectedAODMC(particle,AODMCTrackArray,kTRUE)){
+                       Double_t rConv = 0;
+                       for(Int_t daughterIndex=particle->GetDaughter(0);daughterIndex<=particle->GetDaughter(1);daughterIndex++){
+                               AliAODMCParticle *tmpDaughter = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(daughterIndex));
+                               if(!tmpDaughter) continue;
+                               if(abs(tmpDaughter->GetPdgCode()) == 11){
+                                       rConv = sqrt( (tmpDaughter->Xv()*tmpDaughter->Xv()) + (tmpDaughter->Yv()*tmpDaughter->Yv()) );
                                }
                        }
-                       // Converted MC Gamma
-                       if(fDoMesonAnalysis){
+                       fHistoMCConvGammaPt[fiCut]->Fill(particle->Pt());
+                       if (fDoPhotonQA > 0){
+                               fHistoMCConvGammaR[fiCut]->Fill(rConv);
+                               fHistoMCConvGammaEta[fiCut]->Fill(particle->Eta());
+                       }
+               }
+               // Converted MC Gamma
+               if(fDoMesonAnalysis){
                        if(particle->GetPdgCode() == 310 && fDoMesonQA > 0){
                                Double_t mesonY = 10.;
                                if(particle->E() - particle->Pz() == 0 || particle->E() + particle->Pz() == 0){
-                                       mesonY=10.-((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift();
+                                       mesonY=10.-((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift();
                                } else {
-                                       mesonY = 0.5*(TMath::Log((particle->E()+particle->Pz()) / (particle->E()-particle->Pz())))-((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift();
+                                       mesonY = 0.5*(TMath::Log((particle->E()+particle->Pz()) / (particle->E()-particle->Pz())))-((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift();
                                }
                                Float_t weightedK0s= 1;
-                               if(((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(i, fMCStack, fInputEvent)){
+                               if(((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsParticleFromBGEvent(i, fMCStack, fInputEvent)){
                                        if (particle->Pt()>0.005){
-                                               weightedK0s= ((AliConversionCuts*)fCutArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),i, 0x0, fInputEvent);
+                                               weightedK0s= ((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),i, 0x0, fInputEvent);
                                                //cout << "MC input \t"<<i << "\t" <<  particle->Pt()<<"\t"<<weighted << endl;
                                        }
                                }
@@ -1835,13 +2271,13 @@ void AliAnalysisTaskGammaConvCalo::ProcessAODMCParticles()
                                fHistoMCK0sPtY[fiCut]->Fill(particle->Pt(),mesonY,weightedK0s);
                        }
                        if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))
-                               ->MesonIsSelectedAODMC(particle,AODMCTrackArray,((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift())){
+                               ->MesonIsSelectedAODMC(particle,AODMCTrackArray,((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift())){
                                AliAODMCParticle* daughter0 = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(particle->GetDaughter(0)));
                                AliAODMCParticle* daughter1 = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(particle->GetDaughter(1)));
                                Float_t weighted= 1;
-                               if(((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(i, fMCStack, fInputEvent)){
+                               if(((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsParticleFromBGEvent(i, fMCStack, fInputEvent)){
                                        if (particle->Pt()>0.005){
-                                               weighted= ((AliConversionCuts*)fCutArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),i, 0x0, fInputEvent);
+                                               weighted= ((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),i, 0x0, fInputEvent);
                                                //                   if(particle->GetPdgCode() == 221){
                                                //                      cout << "MC input \t"<<i << "\t" <<  particle->Pt()<<"\t"<<weighted << endl;
                                                //                   }
@@ -1849,26 +2285,38 @@ void AliAnalysisTaskGammaConvCalo::ProcessAODMCParticles()
                                }
                                Double_t mesonY = 10.;
                                if(particle->E() - particle->Pz() == 0 || particle->E() + particle->Pz() == 0){
-                                       mesonY=10.-((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift();
+                                       mesonY=10.-((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift();
                                } else{
-                                       mesonY = 0.5*(TMath::Log((particle->E()+particle->Pz()) / (particle->E()-particle->Pz())))-((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift();
+                                       mesonY = 0.5*(TMath::Log((particle->E()+particle->Pz()) / (particle->E()-particle->Pz())))-((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift();
+                               }
+                               
+                               Double_t alpha = -1;
+                               if (particle->GetPdgCode() == 111 || particle->GetPdgCode() == 221){
+                                       alpha = TMath::Abs((daughter0->E() - daughter1->E()))/(daughter0->E() + daughter1->E());
                                }
+
                                
                                if(particle->GetPdgCode() == 111){
                                        fHistoMCPi0Pt[fiCut]->Fill(particle->Pt(),weighted); // All MC Pi0
                                        fHistoMCPi0WOWeightPt[fiCut]->Fill(particle->Pt());
-                                       if (fDoMesonQA > 0) fHistoMCPi0PtY[fiCut]->Fill(particle->Pt(),mesonY,weighted); // All MC Pi0
+                                       if (fDoMesonQA > 0){
+                                               fHistoMCPi0PtY[fiCut]->Fill(particle->Pt(),mesonY,weighted); // All MC Pi0
+                                               fHistoMCPi0PtAlpha[fiCut]->Fill(particle->Pt(),alpha); // All MC Pi0
+                                       }       
                                } else if(particle->GetPdgCode() == 221){
                                        fHistoMCEtaPt[fiCut]->Fill(particle->Pt(),weighted); // All MC Eta
                                        fHistoMCEtaWOWeightPt[fiCut]->Fill(particle->Pt());
-                                       if (fDoMesonQA > 0) fHistoMCEtaPtY[fiCut]->Fill(particle->Pt(),mesonY,weighted); // All MC Pi0
+                                       if (fDoMesonQA > 0){
+                                               fHistoMCEtaPtY[fiCut]->Fill(particle->Pt(),mesonY,weighted); // All MC Pi0
+                                               fHistoMCEtaPtAlpha[fiCut]->Fill(particle->Pt(),alpha); // All MC Pi0
+                                       }       
                                }
                                
                                // Check the acceptance for both gammas
-                               if(((AliConversionCuts*)fCutArray->At(fiCut))->PhotonIsSelectedAODMC(daughter0,AODMCTrackArray,kFALSE) &&
-                               ((AliConversionCuts*)fCutArray->At(fiCut))->PhotonIsSelectedAODMC(daughter1,AODMCTrackArray,kFALSE)  &&
-                               ((AliConversionCuts*)fCutArray->At(fiCut))->InPlaneOutOfPlaneCut(daughter0->Phi(),fEventPlaneAngle,kFALSE) &&
-                               ((AliConversionCuts*)fCutArray->At(fiCut))->InPlaneOutOfPlaneCut(daughter1->Phi(),fEventPlaneAngle,kFALSE)){
+                               if(((AliConversionPhotonCuts*)fCutArray->At(fiCut))->PhotonIsSelectedAODMC(daughter0,AODMCTrackArray,kFALSE) &&
+                               ((AliConversionPhotonCuts*)fCutArray->At(fiCut))->PhotonIsSelectedAODMC(daughter1,AODMCTrackArray,kFALSE)  &&
+                               ((AliConversionPhotonCuts*)fCutArray->At(fiCut))->InPlaneOutOfPlaneCut(daughter0->Phi(),fEventPlaneAngle,kFALSE) &&
+                               ((AliConversionPhotonCuts*)fCutArray->At(fiCut))->InPlaneOutOfPlaneCut(daughter1->Phi(),fEventPlaneAngle,kFALSE)){
                                        
                                        if(particle->GetPdgCode() == 111){
                                                fHistoMCPi0InAccPt[fiCut]->Fill(particle->Pt(),weighted); // MC Pi0 with gamma in acc
@@ -1890,15 +2338,18 @@ void AliAnalysisTaskGammaConvCalo::ProcessMCParticles()
                if (!particle) continue;
                
                Int_t isMCFromMBHeader = -1;
-               if(((AliConversionCuts*)fCutArray->At(fiCut))->GetSignalRejection() != 0){
-                       isMCFromMBHeader
-                       = ((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(i, fMCStack, fInputEvent);
-                       if(isMCFromMBHeader == 0 && ((AliConversionCuts*)fCutArray->At(fiCut))->GetSignalRejection() != 3) continue;
+               if(((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetSignalRejection() != 0){
+                       isMCFromMBHeader = ((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsParticleFromBGEvent(i, fMCStack, fInputEvent);
+                       if(isMCFromMBHeader == 0 && ((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetSignalRejection() != 3) continue;
                }
                
-               if(!((AliConversionCuts*)fCutArray->At(fiCut))->InPlaneOutOfPlaneCut(particle->Phi(),fEventPlaneAngle,kFALSE)) continue;
-               if(((AliConversionCuts*)fCutArray->At(fiCut))->PhotonIsSelectedMC(particle,fMCStack,kFALSE)){
+               if(!((AliConversionPhotonCuts*)fCutArray->At(fiCut))->InPlaneOutOfPlaneCut(particle->Phi(),fEventPlaneAngle,kFALSE)) continue;
+               if(((AliConversionPhotonCuts*)fCutArray->At(fiCut))->PhotonIsSelectedMC(particle,fMCStack,kFALSE)){
                        fHistoMCAllGammaPt[fiCut]->Fill(particle->Pt()); // All MC Gamma
+                       if (abs(particle->Eta()) < 0.66 ){
+                               if (particle->Phi() > 1.39626 && particle->Phi() < 3.125) fHistoMCAllGammaEMCALAccPt[fiCut]->Fill(particle->Pt());
+                       }       
+                       
                        if(particle->GetMother(0) >-1){ // Meson Decay Gamma
                                switch(fMCStack->Particle(particle->GetMother(0))->GetPdgCode()){
                                case 111: // Pi0
@@ -1925,7 +2376,7 @@ void AliAnalysisTaskGammaConvCalo::ProcessMCParticles()
                                }
                        }
                }
-               if(((AliConversionCuts*)fCutArray->At(fiCut))->PhotonIsSelectedMC(particle,fMCStack,kTRUE)){
+               if(((AliConversionPhotonCuts*)fCutArray->At(fiCut))->PhotonIsSelectedMC(particle,fMCStack,kTRUE)){
                        fHistoMCConvGammaPt[fiCut]->Fill(particle->Pt());
                        if (fDoPhotonQA > 0){
                                fHistoMCConvGammaR[fiCut]->Fill(((TParticle*)fMCStack->Particle(particle->GetFirstDaughter()))->R());
@@ -1936,14 +2387,14 @@ void AliAnalysisTaskGammaConvCalo::ProcessMCParticles()
                        if(particle->GetPdgCode() == 310 && fDoMesonQA > 0){
                                Double_t mesonY = 10.;
                                if(particle->Energy() - particle->Pz() == 0 || particle->Energy() + particle->Pz() == 0){
-                                       mesonY=10.-((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift();
+                                       mesonY=10.-((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift();
                                } else{
-                                       mesonY = 0.5*(TMath::Log((particle->Energy()+particle->Pz()) / (particle->Energy()-particle->Pz())))-((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift();
+                                       mesonY = 0.5*(TMath::Log((particle->Energy()+particle->Pz()) / (particle->Energy()-particle->Pz())))-((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift();
                                }
                                Float_t weightedK0s= 1;
-                               if(((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(i, fMCStack, fInputEvent)){
+                               if(((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsParticleFromBGEvent(i, fMCStack, fInputEvent)){
                                        if (particle->Pt()>0.005){
-                                               weightedK0s= ((AliConversionCuts*)fCutArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),i, fMCStack, fInputEvent);
+                                               weightedK0s= ((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),i, fMCStack, fInputEvent);
                                                //cout << "MC input \t"<<i << "\t" <<  particle->Pt()<<"\t"<<weighted << endl;
                                        }
                                }
@@ -1954,14 +2405,14 @@ void AliAnalysisTaskGammaConvCalo::ProcessMCParticles()
                                }
                        }
                        if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))
-                               ->MesonIsSelectedMC(particle,fMCStack,((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift())){
+                               ->MesonIsSelectedMC(particle,fMCStack,((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift())){
                                TParticle* daughter0 = (TParticle*)fMCStack->Particle(particle->GetFirstDaughter());
                                TParticle* daughter1 = (TParticle*)fMCStack->Particle(particle->GetLastDaughter());
                                
                                Float_t weighted= 1;
-                               if(((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(i, fMCStack, fInputEvent)){
+                               if(((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsParticleFromBGEvent(i, fMCStack, fInputEvent)){
                                        if (particle->Pt()>0.005){
-                                               weighted= ((AliConversionCuts*)fCutArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),i, fMCStack, fInputEvent);
+                                               weighted= ((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),i, fMCStack, fInputEvent);
                                                //                   if(particle->GetPdgCode() == 221){
                                                //                      cout << "MC input \t"<<i << "\t" <<  particle->Pt()<<"\t"<<weighted << endl;
                                                //                   }
@@ -1969,26 +2420,37 @@ void AliAnalysisTaskGammaConvCalo::ProcessMCParticles()
                                }
                                Double_t mesonY = 10.;
                                if(particle->Energy() - particle->Pz() == 0 || particle->Energy() + particle->Pz() == 0){
-                                       mesonY=10.-((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift();
+                                       mesonY=10.-((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift();
                                } else{
-                                       mesonY = 0.5*(TMath::Log((particle->Energy()+particle->Pz()) / (particle->Energy()-particle->Pz())))-((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift();
+                                       mesonY = 0.5*(TMath::Log((particle->Energy()+particle->Pz()) / (particle->Energy()-particle->Pz())))-((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift();
                                }
-                               
+
+                               Double_t alpha = -1;
+                               if (particle->GetPdgCode() == 111 || particle->GetPdgCode() == 221){
+                                       alpha = TMath::Abs((daughter0->Energy() - daughter1->Energy()))/(daughter0->Energy() + daughter1->Energy());
+                               }
+
                                if(particle->GetPdgCode() == 111){
                                        fHistoMCPi0Pt[fiCut]->Fill(particle->Pt(),weighted); // All MC Pi0
                                        fHistoMCPi0WOWeightPt[fiCut]->Fill(particle->Pt());
-                                       if (fDoMesonQA > 0) fHistoMCPi0PtY[fiCut]->Fill(particle->Pt(),mesonY,weighted); // All MC Pi0
+                                       if (fDoMesonQA > 0){
+                                               fHistoMCPi0PtY[fiCut]->Fill(particle->Pt(),mesonY,weighted); // All MC Pi0
+                                               fHistoMCPi0PtAlpha[fiCut]->Fill(particle->Pt(),alpha); // All MC Pi0
+                                       }       
                                } else if(particle->GetPdgCode() == 221){
                                        fHistoMCEtaPt[fiCut]->Fill(particle->Pt(),weighted); // All MC Eta
                                        fHistoMCEtaWOWeightPt[fiCut]->Fill(particle->Pt());
-                                       if (fDoMesonQA > 0) fHistoMCEtaPtY[fiCut]->Fill(particle->Pt(),mesonY,weighted); // All MC Pi0
+                                       if (fDoMesonQA > 0){
+                                               fHistoMCEtaPtY[fiCut]->Fill(particle->Pt(),mesonY,weighted); // All MC Pi0
+                                               fHistoMCEtaPtAlpha[fiCut]->Fill(particle->Pt(),alpha); // All MC Pi0
+                                       }       
                                }
                                
                                // Check the acceptance for both gammas
-                               if(((AliConversionCuts*)fCutArray->At(fiCut))->PhotonIsSelectedMC(daughter0,fMCStack,kFALSE) &&
-                               ((AliConversionCuts*)fCutArray->At(fiCut))->PhotonIsSelectedMC(daughter1,fMCStack,kFALSE)  &&
-                               ((AliConversionCuts*)fCutArray->At(fiCut))->InPlaneOutOfPlaneCut(daughter0->Phi(),fEventPlaneAngle,kFALSE) &&
-                               ((AliConversionCuts*)fCutArray->At(fiCut))->InPlaneOutOfPlaneCut(daughter1->Phi(),fEventPlaneAngle,kFALSE)){
+                               if(((AliConversionPhotonCuts*)fCutArray->At(fiCut))->PhotonIsSelectedMC(daughter0,fMCStack,kFALSE) &&
+                               ((AliConversionPhotonCuts*)fCutArray->At(fiCut))->PhotonIsSelectedMC(daughter1,fMCStack,kFALSE)  &&
+                               ((AliConversionPhotonCuts*)fCutArray->At(fiCut))->InPlaneOutOfPlaneCut(daughter0->Phi(),fEventPlaneAngle,kFALSE) &&
+                               ((AliConversionPhotonCuts*)fCutArray->At(fiCut))->InPlaneOutOfPlaneCut(daughter1->Phi(),fEventPlaneAngle,kFALSE)){
                                        
                                        if(particle->GetPdgCode() == 111){
                                                fHistoMCPi0InAccPt[fiCut]->Fill(particle->Pt(),weighted); // MC Pi0 with gamma in acc
@@ -2006,19 +2468,17 @@ void AliAnalysisTaskGammaConvCalo::ProcessMCParticles()
                        if (!particle) continue;
       
                        Int_t isMCFromMBHeader = -1;
-                       if(((AliConversionCuts*)fCutArray->At(fiCut))->GetSignalRejection() != 0){
-                               isMCFromMBHeader
-        = ((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(i, fMCStack, fInputEvent);
-                               if(isMCFromMBHeader == 0 && ((AliConversionCuts*)fCutArray->At(fiCut))->GetSignalRejection() != 3) continue;
+                       if(((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetSignalRejection() != 0){
+                               isMCFromMBHeader = ((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsParticleFromBGEvent(i, fMCStack, fInputEvent);
+                               if(isMCFromMBHeader == 0 && ((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetSignalRejection() != 3) continue;
                        }
       
                        if(fDoMesonAnalysis){
-                               if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))
-           ->MesonIsSelectedMC(particle,fMCStack,((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift())){
+                               if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->MesonIsSelectedMC(particle,fMCStack,((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift())){
                                        Float_t weighted= 1;
-                                       if(((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(i, fMCStack, fInputEvent)){
+                                       if(((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsParticleFromBGEvent(i, fMCStack, fInputEvent)){
                                                if (particle->Pt()>0.005){
-                                                       weighted= ((AliConversionCuts*)fCutArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),i, fMCStack, fInputEvent);
+                                                       weighted= ((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),i, fMCStack, fInputEvent);
               //                   if(particle->GetPdgCode() == 221){
               //                      cout << "MC input \t"<<i << "\t" <<  particle->Pt()<<"\t"<<weighted << endl;
               //                   }
@@ -2041,60 +2501,6 @@ void AliAnalysisTaskGammaConvCalo::ProcessMCParticles()
        }
 }
 
-//________________________________________________________________________
-void AliAnalysisTaskGammaConvCalo::PhotonTagging(){
-       
-       // Conversion Gammas
-       if(fGammaCandidates->GetEntries()>0){
-
-               for(Int_t firstGammaIndex=0;firstGammaIndex<fGammaCandidates->GetEntries()-1;firstGammaIndex++){
-               
-                       // get conversion photon
-                       AliAODConversionPhoton *gamma0=dynamic_cast<AliAODConversionPhoton*>(fGammaCandidates->At(firstGammaIndex));
-                       if (gamma0==NULL) continue;
-                       
-                       TLorentzVector photonVector;
-                       photonVector.SetPxPyPzE(gamma0->GetPx(),gamma0->GetPy(),gamma0->GetPz(),gamma0->GetPhotonP());
-                       
-                       Bool_t btagpi0 = 0;
-                       Bool_t btageta = 0;
-                       
-                       // loop over clusters
-                       for(Int_t secondGammaIndex = 0; secondGammaIndex<fClusterCandidates->GetEntries(); ++secondGammaIndex) {
-                               
-                               AliAODConversionPhoton *gamma1=dynamic_cast<AliAODConversionPhoton*>(fClusterCandidates->At(secondGammaIndex));
-                               if (gamma1==NULL) continue;
-                               
-                               TLorentzVector clusterVector;
-                               clusterVector.SetPxPyPzE(gamma1->GetPx(),gamma1->GetPy(),gamma1->GetPz(),gamma1->GetPhotonP());
-                               
-                               // do the tagging
-                               TLorentzVector pairVector = photonVector+clusterVector;
-                               
-                               // see if pi0?
-                               if((pairVector.M() > 0.11 && pairVector.M() < 0.15)){
-                               btagpi0 = 1;
-                               }
-                               // or eta
-                               if((pairVector.M() > 0.50 && pairVector.M() < 0.6)){
-                               btageta = 1;
-                               }
-                       }// end loop over clusters
-                       
-                       if(btagpi0 && btageta)
-                               fHistoConvGammaTagged[fiCut]->Fill(photonVector.Pt());
-                       else if(btagpi0 && !btageta)
-                               fHistoConvGammaPi0Tagged[fiCut]->Fill(photonVector.Pt());
-                       else if(btageta && !btagpi0)
-                               fHistoConvGammaEtaTagged[fiCut]->Fill(photonVector.Pt());
-                       else
-                               fHistoConvGammaUntagged[fiCut]->Fill(photonVector.Pt());
-
-               }// end loop over gammas
-       }// end if
-       return;
-}
-
 //________________________________________________________________________
 void AliAnalysisTaskGammaConvCalo::CalculatePi0Candidates(){
        
@@ -2110,84 +2516,81 @@ void AliAnalysisTaskGammaConvCalo::CalculatePi0Candidates(){
                        if (gamma0==NULL) continue;
                        
                        for(Int_t secondGammaIndex=0;secondGammaIndex<fClusterCandidates->GetEntries();secondGammaIndex++){
-
+                               Bool_t matched = kFALSE;
                                AliAODConversionPhoton *gamma1=dynamic_cast<AliAODConversionPhoton*>(fClusterCandidates->At(secondGammaIndex));
                                if (gamma1==NULL) continue;
                                
+                               if (gamma1->GetIsCaloPhoton()){
+                                       AliVCluster* cluster = fInputEvent->GetCaloCluster(gamma1->GetCaloClusterRef());
+                                       matched = ((AliCaloPhotonCuts*)fClusterCutArray->At(fiCut))->MatchConvPhotonToCluster(gamma0,cluster, fInputEvent );
+                               }       
+                               
                                AliAODConversionMother *pi0cand = new AliAODConversionMother(gamma0,gamma1);
                                pi0cand->SetLabels(firstGammaIndex,secondGammaIndex);
                                
-                               if((((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->MesonIsSelected(pi0cand,kTRUE,((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift()))){
-                                       fHistoMotherInvMassPt[fiCut]->Fill(pi0cand->M(),pi0cand->Pt());
-                                       
+                               
+                               
+                               if((((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->MesonIsSelected(pi0cand,kTRUE,((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift()))){
+                                       if (matched){
+                                               fHistoMotherMatchedInvMassPt[fiCut]->Fill(pi0cand->M(),pi0cand->Pt());
+                                       } else {
+                                               fHistoMotherInvMassPt[fiCut]->Fill(pi0cand->M(),pi0cand->Pt());
+                                       }       
                                        // fill new histograms
-                                       fHistoPhotonPairAll[fiCut]->Fill(pi0cand->M(),pi0cand->Pt());
-                                       fHistoPhotonPairAllGam[fiCut]->Fill(pi0cand->M(),gamma0->Pt());
-                                       
-                                       if(pi0cand->GetAlpha()<0.1)
-                                               fHistoMotherInvMassEalpha[fiCut]->Fill(pi0cand->M(),pi0cand->E());
-                                       
-                                       if (fDoMesonQA > 0){
-                                               if ( pi0cand->M() > 0.05 && pi0cand->M() < 0.17){
-                                                       fHistoMotherPi0PtY[fiCut]->Fill(pi0cand->Pt(),pi0cand->Rapidity()-((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift());
-                                                       fHistoMotherPi0PtAlpha[fiCut]->Fill(pi0cand->Pt(),pi0cand->GetAlpha());
-                                                       fHistoMotherPi0PtOpenAngle[fiCut]->Fill(pi0cand->Pt(),pi0cand->GetOpeningAngle());      
-                                               }
-                                               if ( pi0cand->M() > 0.45 && pi0cand->M() < 0.65){
-                                                       fHistoMotherEtaPtY[fiCut]->Fill(pi0cand->Pt(),pi0cand->Rapidity()-((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift());
-                                                       fHistoMotherEtaPtAlpha[fiCut]->Fill(pi0cand->Pt(),pi0cand->GetAlpha());
-                                                       fHistoMotherEtaPtOpenAngle[fiCut]->Fill(pi0cand->Pt(),pi0cand->GetOpeningAngle());
-                                               }
-                                       }
-                                       if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->DoBGCalculation()){
-                                               Int_t zbin = 0;
-                                               Int_t mbin = 0;
+                                       if (!matched){
+                                               fHistoPhotonPairPtconv[fiCut]->Fill(pi0cand->M(),gamma0->Pt());
+                                               if(pi0cand->GetAlpha()<0.1)
+                                                       fHistoMotherInvMassEalpha[fiCut]->Fill(pi0cand->M(),pi0cand->E());
                                                
-                                               if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->BackgroundHandlerType() == 0){
-                                                       zbin = fBGHandler[fiCut]->GetZBinIndex(fInputEvent->GetPrimaryVertex()->GetZ());
-                                                       if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->UseTrackMultiplicity()){
-                                                               mbin = fBGHandler[fiCut]->GetMultiplicityBinIndex(fV0Reader->GetNumberOfPrimaryTracks());
-                                                       } else {
-                                                               mbin = fBGHandler[fiCut]->GetMultiplicityBinIndex(fGammaCandidates->GetEntries());
+                                               if (fDoMesonQA > 0){
+                                                       if ( pi0cand->M() > 0.05 && pi0cand->M() < 0.17){
+                                                               fHistoMotherPi0PtY[fiCut]->Fill(pi0cand->Pt(),pi0cand->Rapidity()-((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift());
+                                                               fHistoMotherPi0PtAlpha[fiCut]->Fill(pi0cand->Pt(),pi0cand->GetAlpha());
+                                fHistoMotherPi0PtOpenAngle[fiCut]->Fill(pi0cand->Pt(),pi0cand->GetOpeningAngle());
+                                fHistoMotherPi0ConvPhotonEtaPhi[fiCut]->Fill(gamma0->GetPhotonPhi(), gamma0->GetPhotonEta());
                                                        }
-                                               } else{
-                                                       zbin = fBGHandlerRP[fiCut]->GetZBinIndex(fInputEvent->GetPrimaryVertex()->GetZ());
-                                                       if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->UseTrackMultiplicity()){
-                                                               mbin = fBGHandlerRP[fiCut]->GetMultiplicityBinIndex(fV0Reader->GetNumberOfPrimaryTracks());
-                                                       } else {
-                                                               mbin = fBGHandlerRP[fiCut]->GetMultiplicityBinIndex(fGammaCandidates->GetEntries());
+                                                       if ( pi0cand->M() > 0.45 && pi0cand->M() < 0.65){
+                                                               fHistoMotherEtaPtY[fiCut]->Fill(pi0cand->Pt(),pi0cand->Rapidity()-((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift());
+                                                               fHistoMotherEtaPtAlpha[fiCut]->Fill(pi0cand->Pt(),pi0cand->GetAlpha());
+                                                               fHistoMotherEtaPtOpenAngle[fiCut]->Fill(pi0cand->Pt(),pi0cand->GetOpeningAngle());
+                                fHistoMotherEtaConvPhotonEtaPhi[fiCut]->Fill(gamma0->GetPhotonPhi(), gamma0->GetPhotonEta());
+                                                       }
+                                               }
+                                               if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->DoBGCalculation()){
+                                                       Int_t zbin = 0;
+                                                       Int_t mbin = 0;
+                                                       
+                                                       if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->BackgroundHandlerType() == 0){
+                                                               zbin = fBGHandler[fiCut]->GetZBinIndex(fInputEvent->GetPrimaryVertex()->GetZ());
+                                                               if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->UseTrackMultiplicity()){
+                                                                       mbin = fBGHandler[fiCut]->GetMultiplicityBinIndex(fV0Reader->GetNumberOfPrimaryTracks());
+                                                               } else {
+                                                                       mbin = fBGHandler[fiCut]->GetMultiplicityBinIndex(fGammaCandidates->GetEntries());
+                                                               }
+                                                       } else{
+                                                               zbin = fBGHandlerRP[fiCut]->GetZBinIndex(fInputEvent->GetPrimaryVertex()->GetZ());
+                                                               if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->UseTrackMultiplicity()){
+                                                                       mbin = fBGHandlerRP[fiCut]->GetMultiplicityBinIndex(fV0Reader->GetNumberOfPrimaryTracks());
+                                                               } else {
+                                                                       mbin = fBGHandlerRP[fiCut]->GetMultiplicityBinIndex(fGammaCandidates->GetEntries());
+                                                               }
                                                        }
+                                                       Double_t sparesFill[4] = {pi0cand->M(),pi0cand->Pt(),(Double_t)zbin,(Double_t)mbin};
+                                                       fSparseMotherInvMassPtZM[fiCut]->Fill(sparesFill,1);
                                                }
-                                               Double_t sparesFill[4] = {pi0cand->M(),pi0cand->Pt(),(Double_t)zbin,(Double_t)mbin};
-                                               fSparseMotherInvMassPtZM[fiCut]->Fill(sparesFill,1);
                                        }
                                        
-                                       
                                        if(fIsMC){
                                                if(fInputEvent->IsA()==AliESDEvent::Class())
-                                                       ProcessTrueMesonCandidates(pi0cand,gamma0,gamma1);
+                                                       ProcessTrueMesonCandidates(pi0cand,gamma0,gamma1, matched);
                                                if(fInputEvent->IsA()==AliAODEvent::Class())
-                                                       ProcessTrueMesonCandidatesAOD(pi0cand,gamma0,gamma1);
+                                                       ProcessTrueMesonCandidatesAOD(pi0cand,gamma0,gamma1, matched);
                                        }
-                                       if (fDoMesonQA == 2){
-                                               fInvMass = pi0cand->M();
-                                               fPt  = pi0cand->Pt();
-                                               if (abs(gamma0->GetDCAzToPrimVtx()) < abs(gamma1->GetDCAzToPrimVtx())){
-                                                       fDCAzGammaMin = gamma0->GetDCAzToPrimVtx();
-                                                       fDCAzGammaMax = gamma1->GetDCAzToPrimVtx();
-                                               } else {
-                                                       fDCAzGammaMin = gamma1->GetDCAzToPrimVtx();
-                                                       fDCAzGammaMax = gamma0->GetDCAzToPrimVtx();
-                                               }
-                                               fCharFlag = pi0cand->GetMesonQuality();
-                                               //                   cout << "gamma 0: " << gamma0->GetV0Index()<< "\t" << gamma0->GetPx() << "\t" << gamma0->GetPy() << "\t" <<  gamma0->GetPz() << "\t" << endl;
-                                               //                   cout << "gamma 1: " << gamma1->GetV0Index()<< "\t"<< gamma1->GetPx() << "\t" << gamma1->GetPy() << "\t" <<  gamma1->GetPz() << "\t" << endl;
-                                               //                    cout << "pi0: "<<fInvMass << "\t" << fPt <<"\t" << fDCAzGammaMin << "\t" << fDCAzGammaMax << "\t" << (Int_t)fCharFlag << "\t" << (Int_t)fCharMesonMCInfo <<endl;
-                                               if (fIsHeavyIon == 1 && fPt > 0.399 && fPt < 20. ) {
-                                               if (fInvMass > 0.08 && fInvMass < 0.2) fTreeMesonsInvMassPtDcazMinDcazMaxFlag[fiCut]->Fill();
-                                               if ((fInvMass > 0.45 && fInvMass < 0.6) &&  (fPt > 0.999 && fPt < 20.) )fTreeMesonsInvMassPtDcazMinDcazMaxFlag[fiCut]->Fill();
-                                               } else if (fPt > 0.299 && fPt < 20. )  {
-                                               if ( (fInvMass > 0.08 && fInvMass < 0.2) || (fInvMass > 0.45 && fInvMass < 0.6)) fTreeMesonsInvMassPtDcazMinDcazMaxFlag[fiCut]->Fill();
+                                       if (!matched){
+                                               if (fDoMesonQA == 1){
+                                                       fHistoMotherInvMassECalib[fiCut]->Fill(pi0cand->M(),gamma1->E());
+                                                       if(pi0cand->GetAlpha()<0.1)
+                                                       fHistoMotherInvMassECalibalpha[fiCut]->Fill(pi0cand->M(),gamma1->E());            
                                                }
                                        }
                                }
@@ -2198,355 +2601,379 @@ void AliAnalysisTaskGammaConvCalo::CalculatePi0Candidates(){
        }
 }
 //______________________________________________________________________
-void AliAnalysisTaskGammaConvCalo::ProcessTrueMesonCandidates(AliAODConversionMother *Pi0Candidate, AliAODConversionPhoton *TrueGammaCandidate0, AliAODConversionPhoton *TrueGammaCandidate1)
+void AliAnalysisTaskGammaConvCalo::ProcessTrueMesonCandidates(AliAODConversionMother *Pi0Candidate, AliAODConversionPhoton *TrueGammaCandidate0, AliAODConversionPhoton *TrueGammaCandidate1, Bool_t matched)
 {
        // Process True Mesons
-       AliStack *MCStack = fMCEvent->Stack();
-       fCharMesonMCInfo = 0;
        if(TrueGammaCandidate0->GetV0Index()<fInputEvent->GetNumberOfV0s()){
                Bool_t isTruePi0 = kFALSE;
                Bool_t isTrueEta = kFALSE;
-               Bool_t isTruePi0Dalitz = kFALSE;
-               Bool_t isTrueEtaDalitz = kFALSE;
-               Bool_t gamma0DalitzCand = kFALSE;
-               Bool_t gamma1DalitzCand = kFALSE;
-               Int_t gamma0MCLabel = TrueGammaCandidate0->GetMCParticleLabel(MCStack);
+               Int_t gamma0MCLabel = -1;
                Int_t gamma0MotherLabel = -1;
-               if(gamma0MCLabel != -1){ // Gamma is Combinatorial; MC Particles don't belong to the same Mother
-               // Daughters Gamma 0
-               TParticle * negativeMC = (TParticle*)TrueGammaCandidate0->GetNegativeMCDaughter(MCStack);
-               TParticle * positiveMC = (TParticle*)TrueGammaCandidate0->GetPositiveMCDaughter(MCStack);
-               TParticle * gammaMC0 = (TParticle*)MCStack->Particle(gamma0MCLabel);
-               if(abs(negativeMC->GetPdgCode())==11 && abs(positiveMC->GetPdgCode())==11){  // Electrons ...
-                       if(negativeMC->GetUniqueID() == 5 && positiveMC->GetUniqueID() ==5){ // ... From Conversion ...
-                               if(gammaMC0->GetPdgCode() == 22){ // ... with Gamma Mother
-                                       gamma0MotherLabel=gammaMC0->GetFirstMother();
-                               }
-                       }
-                       if(gammaMC0->GetPdgCode() ==111){ // Dalitz candidate
-                               gamma0DalitzCand = kTRUE;
-                               gamma0MotherLabel=-111;
-                       }
-                       if(gammaMC0->GetPdgCode() ==221){ // Dalitz candidate
-                               gamma0DalitzCand = kTRUE;
-                               gamma0MotherLabel=-221;
-                       }
-               }
+               if (TrueGammaCandidate0->IsTrueConvertedPhoton()){
+                       gamma0MCLabel = TrueGammaCandidate0->GetMCParticleLabel(fMCStack);
+                       TParticle * gammaMC0 = (TParticle*)fMCStack->Particle(gamma0MCLabel);
+                       gamma0MotherLabel=gammaMC0->GetFirstMother();
+       
                }
-               if(TrueGammaCandidate1->GetV0Index()<fInputEvent->GetNumberOfV0s()){
-                       Int_t gamma1MCLabel = TrueGammaCandidate1->GetMCParticleLabel(MCStack);
-                       Int_t gamma1MotherLabel = -1;
-                       if(gamma1MCLabel != -1){ // Gamma is Combinatorial; MC Particles don't belong to the same Mother
-                               // Daughters Gamma 1
-                               TParticle * negativeMC = (TParticle*)TrueGammaCandidate1->GetNegativeMCDaughter(MCStack);
-                               TParticle * positiveMC = (TParticle*)TrueGammaCandidate1->GetPositiveMCDaughter(MCStack);
-                               TParticle * gammaMC1 = (TParticle*)MCStack->Particle(gamma1MCLabel);
-                               if(abs(negativeMC->GetPdgCode())==11 && abs(positiveMC->GetPdgCode())==11){  // Electrons ...
-                                       if(negativeMC->GetUniqueID() == 5 && positiveMC->GetUniqueID() ==5){ // ... From Conversion ...
-                                               if(gammaMC1->GetPdgCode() == 22){ // ... with Gamma Mother
-                                               gamma1MotherLabel=gammaMC1->GetFirstMother();
-                                               }
-                                       }
-                                       if(gammaMC1->GetPdgCode() ==111 ){ // Dalitz candidate
-                                               gamma1DalitzCand = kTRUE;
-                                               gamma1MotherLabel=-111;
-                                       }
-                                       if(gammaMC1->GetPdgCode() ==221){ // Dalitz candidate
-                                               gamma1DalitzCand = kTRUE;
-                                               gamma1MotherLabel=-221;
-                                       }
-                               }
-                       }
-                       if(gamma0MotherLabel>=0 && gamma0MotherLabel==gamma1MotherLabel){
-                               if(((TParticle*)MCStack->Particle(gamma1MotherLabel))->GetPdgCode() == 111){
-                                       isTruePi0=kTRUE;
-                               }
-                               if(((TParticle*)MCStack->Particle(gamma1MotherLabel))->GetPdgCode() == 221){
-                                       isTrueEta=kTRUE;
+               if (!TrueGammaCandidate1->GetIsCaloPhoton()) AliFatal("CaloPhotonFlag has not been set. Aborting");
+               
+               Int_t gamma1MCLabel = TrueGammaCandidate1->GetCaloPhotonMCLabel(0);     // get most probable MC label
+               Int_t gamma1MotherLabel = -1;
+               // check if 
+
+               if(gamma1MCLabel != -1){ // Gamma is Combinatorial; MC Particles don't belong to the same Mother
+                       // Daughters Gamma 1
+                       TParticle * gammaMC1 = (TParticle*)fMCStack->Particle(gamma1MCLabel);
+                       if (TrueGammaCandidate1->IsLargestComponentPhoton() || TrueGammaCandidate1->IsLargestComponentElectron()){              // largest component is electro magnetic
+                               // get mother of interest (pi0 or eta)
+                               if (TrueGammaCandidate1->IsLargestComponentPhoton()){                                                                                                           // for photons its the direct mother 
+                                       gamma1MotherLabel=gammaMC1->GetMother(0);
+                               } else if (TrueGammaCandidate1->IsLargestComponentElectron()){                                                                                          // for electrons its either the direct mother or for conversions the grandmother
+                                       if (TrueGammaCandidate1->IsConversion()) gamma1MotherLabel=fMCStack->Particle(gammaMC1->GetMother(0))->GetMother(0);
+                                       else gamma1MotherLabel=gammaMC1->GetMother(0); 
                                }
+                       } else {
+                               if (fDoMesonQA > 0) fHistoTrueMotherCaloEMNonLeadingInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
+                       }       
+               }
+                               
+               if(gamma0MotherLabel>=0 && gamma0MotherLabel==gamma1MotherLabel){
+                       if(((TParticle*)fMCStack->Particle(gamma1MotherLabel))->GetPdgCode() == 111){
+                               isTruePi0=kTRUE;
                        }
-                       
-                       //Identify Dalitz candidate
-                       if (gamma1DalitzCand || gamma0DalitzCand){
-                               if (gamma0DalitzCand && gamma0MCLabel >=0 && gamma0MCLabel==gamma1MotherLabel){
-                                       if (gamma0MotherLabel == -111) isTruePi0Dalitz = kTRUE;
-                                       if (gamma0MotherLabel == -221) isTrueEtaDalitz = kTRUE;
-                               }
-                               if (gamma1DalitzCand && gamma1MCLabel >=0 && gamma1MCLabel==gamma0MotherLabel){
-                                       if (gamma1MotherLabel == -111) isTruePi0Dalitz = kTRUE;
-                                       if (gamma1MotherLabel == -221) isTrueEtaDalitz = kTRUE;
-                               }
+                       if(((TParticle*)fMCStack->Particle(gamma1MotherLabel))->GetPdgCode() == 221){
+                               isTrueEta=kTRUE;
                        }
-                       
-                       
-                       if(isTruePi0 || isTrueEta){// True Pion or Eta
-                               fHistoTrueMotherInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
+               }
+               
+               if(isTruePi0 || isTrueEta){// True Pion or Eta
+                       if (!matched){
+                               if (isTruePi0)fHistoTruePi0InvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
+                               if (isTrueEta)fHistoTrueEtaInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
+                       }       
+                       if (fDoMesonQA > 0){
+                               if (TrueGammaCandidate1->IsLargestComponentPhoton() && !matched){
+                                       if(isTruePi0) fHistoTruePi0CaloPhotonInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
+                                       if(isTrueEta) fHistoTrueEtaCaloPhotonInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
+                               }       
+                               if (TrueGammaCandidate1->IsLargestComponentElectron() && !matched){
+                                       if(isTruePi0) fHistoTruePi0CaloElectronInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
+                                       if(isTrueEta) fHistoTrueEtaCaloElectronInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
+                               }       
+                               if (TrueGammaCandidate1->IsLargestComponentElectron() && TrueGammaCandidate1->IsConversion() ){
+                                       if (isTruePi0 && !matched)fHistoTruePi0CaloConvertedPhotonInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
+                                       if (isTrueEta && !matched)fHistoTrueEtaCaloConvertedPhotonInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
+                                       if ((TrueGammaCandidate0->GetMCLabelPositive() == gamma1MCLabel || TrueGammaCandidate0->GetMCLabelNegative() == gamma1MCLabel) && isTruePi0){
+                                               fHistoTruePi0CaloConvertedPhotonMatchedInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
+                                       }       
+                                       if ((TrueGammaCandidate0->GetMCLabelPositive() == gamma1MCLabel || TrueGammaCandidate0->GetMCLabelNegative() == gamma1MCLabel) && isTrueEta){
+                                               fHistoTrueEtaCaloConvertedPhotonMatchedInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
+                                       }       
+                               }       
+                               if ((TrueGammaCandidate1->IsMerged() || TrueGammaCandidate1->IsMergedPartConv() || TrueGammaCandidate1->IsDalitzMerged()) && !matched ){
+                                       if (isTruePi0 )fHistoTruePi0CaloMergedClusterInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
+                                       if (isTrueEta )fHistoTrueEtaCaloMergedClusterInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
+                               }       
+                               if (TrueGammaCandidate1->IsMergedPartConv() && !matched){
+                                       if (isTruePi0) fHistoTruePi0CaloMergedClusterPartConvInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
+                                       if (isTrueEta) fHistoTrueEtaCaloMergedClusterPartConvInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
+                               }       
+                       }
+                       if (!matched){
                                if (fDoMesonQA > 0){
                                        if (isTruePi0){
                                                if ( Pi0Candidate->M() > 0.05 && Pi0Candidate->M() < 0.17){
-                                                       fHistoTruePi0PtY[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->Rapidity()-((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift());
+                                                       fHistoTruePi0PtY[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->Rapidity()-((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift());
                                                        fHistoTruePi0PtAlpha[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->GetAlpha());
                                                        fHistoTruePi0PtOpenAngle[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->GetOpeningAngle());
+                                                       fHistoTrueMotherPi0ConvPhotonEtaPhi[fiCut]->Fill(TrueGammaCandidate0->GetPhotonPhi(), TrueGammaCandidate0->GetPhotonEta());
                                                }
                                        } else if (isTrueEta){
                                                if ( Pi0Candidate->M() > 0.45 && Pi0Candidate->M() < 0.65){
-                                                       fHistoTrueEtaPtY[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->Rapidity()-((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift());
+                                                       fHistoTrueEtaPtY[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->Rapidity()-((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift());
                                                        fHistoTrueEtaPtAlpha[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->GetAlpha());
                                                        fHistoTrueEtaPtOpenAngle[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->GetOpeningAngle());
+                                                       fHistoTrueMotherEtaConvPhotonEtaPhi[fiCut]->Fill(TrueGammaCandidate0->GetPhotonPhi(), TrueGammaCandidate0->GetPhotonEta());
                                                }
                                        }
                                }
-                               if(gamma0MotherLabel >= MCStack->GetNprimary()){ // Secondary Meson
-                                       Int_t secMotherLabel = ((TParticle*)MCStack->Particle(gamma1MotherLabel))->GetMother(0);
+                               
+                               if(gamma0MotherLabel >= fMCStack->GetNprimary()){ // Secondary Meson
+                                       Int_t secMotherLabel = ((TParticle*)fMCStack->Particle(gamma0MotherLabel))->GetMother(0);
                                        Float_t weightedSec= 1;
-                                       if(((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(secMotherLabel, fMCStack, fInputEvent) && MCStack->Particle(secMotherLabel)->GetPdgCode()==310){
-                                               weightedSec= ((AliConversionCuts*)fCutArray->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
+                                       if(((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsParticleFromBGEvent(secMotherLabel, fMCStack, fInputEvent) && fMCStack->Particle(secMotherLabel)->GetPdgCode()==310){
+                                               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
                                                //cout << "MC input \t"<<i << "\t" <<  particle->Pt()<<"\t"<<weighted << endl;
                                        }
-                                       fHistoTrueSecondaryMotherInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weightedSec);
-                                       fCharMesonMCInfo = 2;
+                                       if (isTruePi0){
+                                               fHistoTrueSecondaryPi0InvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weightedSec);
+                                               fHistoTrueSecondaryPi0PhotonPairPtconv[fiCut]->Fill(Pi0Candidate->M(),TrueGammaCandidate0->Pt(),weightedSec);
+                                               if(CheckIfContainedInString(fStringRecTruePi0s[fiCut],gamma0MotherLabel)){
+                                                       fHistoTrueSecondaryPi0DCPtconv[fiCut]->Fill(TrueGammaCandidate0->Pt(),weightedSec);
+                                               }       
+                                       }       
                                        if (secMotherLabel >-1){
-                                               if(MCStack->Particle(secMotherLabel)->GetPdgCode()==310){
-                                                       fCharMesonMCInfo = 4;
-                                                       fHistoTrueSecondaryMotherFromK0sInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weightedSec);
-                                                       if (fDoMesonQA > 0)fHistoTrueK0sWithPi0DaughterMCPt[fiCut]->Fill(MCStack->Particle(secMotherLabel)->Pt());
+                                               if(fMCStack->Particle(secMotherLabel)->GetPdgCode()==310 && isTruePi0 ){
+                                                       fHistoTrueSecondaryPi0FromK0sInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weightedSec);
+                                                       if (fDoMesonQA > 0)fHistoTrueK0sWithPi0DaughterMCPt[fiCut]->Fill(fMCStack->Particle(secMotherLabel)->Pt());
                                                }
-                                               if(MCStack->Particle(secMotherLabel)->GetPdgCode()==221){
-                                               fCharMesonMCInfo = 3;
-                                               fHistoTrueSecondaryMotherFromEtaInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weightedSec);
-                                               if (fDoMesonQA > 0)fHistoTrueEtaWithPi0DaughterMCPt[fiCut]->Fill(MCStack->Particle(secMotherLabel)->Pt());
+                                               if(fMCStack->Particle(secMotherLabel)->GetPdgCode()==221 && isTruePi0){
+                                                       fHistoTrueSecondaryPi0FromEtaInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weightedSec);
+                                                       if (fDoMesonQA > 0)fHistoTrueEtaWithPi0DaughterMCPt[fiCut]->Fill(fMCStack->Particle(secMotherLabel)->Pt());
                                                }
-                                               if(MCStack->Particle(secMotherLabel)->GetPdgCode()==3122){
-                                                       fCharMesonMCInfo = 7;
-                                                       fHistoTrueSecondaryMotherFromLambdaInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weightedSec);
-                                                       if (fDoMesonQA > 0)fHistoTrueLambdaWithPi0DaughterMCPt[fiCut]->Fill(MCStack->Particle(secMotherLabel)->Pt());
+                                               if(fMCStack->Particle(secMotherLabel)->GetPdgCode()==3122 && isTruePi0){
+                                                       fHistoTrueSecondaryPi0FromLambdaInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weightedSec);
+                                                       if (fDoMesonQA > 0)fHistoTrueLambdaWithPi0DaughterMCPt[fiCut]->Fill(fMCStack->Particle(secMotherLabel)->Pt());
                                                }
                                        }
                                } else { // Only primary pi0 for efficiency calculation
-                                       fCharMesonMCInfo = 6;
                                        Float_t weighted= 1;
-                                       if(((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(gamma1MotherLabel, fMCStack, fInputEvent)){
-                                               if (((TParticle*)MCStack->Particle(gamma1MotherLabel))->Pt()>0.005){
-                                                       weighted= ((AliConversionCuts*)fCutArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),gamma1MotherLabel, fMCStack, fInputEvent);
+                                       if(((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsParticleFromBGEvent(gamma1MotherLabel, fMCStack, fInputEvent)){
+                                               if (((TParticle*)fMCStack->Particle(gamma1MotherLabel))->Pt()>0.005){
+                                                       weighted= ((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),gamma1MotherLabel, fMCStack, fInputEvent);
                                                        //                      cout << "rec \t " <<gamma1MotherLabel << "\t" <<  weighted << endl;
                                                }
                                        }
-                                       fHistoTruePrimaryMotherInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weighted);
-                                       fHistoTruePrimaryMotherW0WeightingInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
-                                       fProfileTruePrimaryMotherWeightsInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weighted);
-                                       
-                                       
+                                       if (isTruePi0){
+                                               fHistoTruePrimaryPi0InvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weighted);
+                                               fHistoTruePrimaryPi0PhotonPairPtconv[fiCut]->Fill(Pi0Candidate->M(),TrueGammaCandidate0->Pt(),weighted);
+                                               fHistoTruePrimaryPi0W0WeightingInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
+                                               fProfileTruePrimaryPi0WeightsInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weighted);
+                                               if(CheckIfContainedInString(fStringRecTruePi0s[fiCut],gamma0MotherLabel)){
+                                                       fHistoTruePrimaryPi0DCPtconv[fiCut]->Fill(TrueGammaCandidate0->Pt(),weighted);
+                                               }       
+
+                                       } else if (isTrueEta) {
+                                               fHistoTruePrimaryEtaInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weighted);
+                                               fHistoTruePrimaryEtaPhotonPairPtconv[fiCut]->Fill(Pi0Candidate->M(),TrueGammaCandidate0->Pt(),weighted);
+                                               fHistoTruePrimaryEtaW0WeightingInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
+                                               fProfileTruePrimaryEtaWeightsInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weighted);
+                                               if(CheckIfContainedInString(fStringRecTrueEtas[fiCut],gamma0MotherLabel)){
+                                                       fHistoTruePrimaryEtaDCPtconv[fiCut]->Fill(TrueGammaCandidate0->Pt(),weighted);
+                                               }                                                       
+                                       }       
+                                               
                                        if (fDoMesonQA > 0){
                                                if(isTruePi0){ // Only primary pi0 for resolution
-                                                       fHistoTruePrimaryPi0MCPtResolPt[fiCut]->Fill(((TParticle*)MCStack->Particle(gamma1MotherLabel))->Pt(),(Pi0Candidate->Pt()-((TParticle*)MCStack->Particle(gamma1MotherLabel))->Pt())/((TParticle*)MCStack->Particle(gamma1MotherLabel))->Pt(),weighted);
+                                                       fHistoTruePrimaryPi0MCPtResolPt[fiCut]->Fill(((TParticle*)fMCStack->Particle(gamma1MotherLabel))->Pt(),(Pi0Candidate->Pt()-((TParticle*)fMCStack->Particle(gamma1MotherLabel))->Pt())/((TParticle*)fMCStack->Particle(gamma1MotherLabel))->Pt(),weighted);
                                                }
                                                if (isTrueEta){ // Only primary eta for resolution
-                                                       fHistoTruePrimaryEtaMCPtResolPt[fiCut]->Fill(((TParticle*)MCStack->Particle(gamma1MotherLabel))->Pt(),(Pi0Candidate->Pt()-((TParticle*)MCStack->Particle(gamma1MotherLabel))->Pt())/((TParticle*)MCStack->Particle(gamma1MotherLabel))->Pt(),weighted);
+                                                       fHistoTruePrimaryEtaMCPtResolPt[fiCut]->Fill(((TParticle*)fMCStack->Particle(gamma1MotherLabel))->Pt(),(Pi0Candidate->Pt()-((TParticle*)fMCStack->Particle(gamma1MotherLabel))->Pt())/((TParticle*)fMCStack->Particle(gamma1MotherLabel))->Pt(),weighted);
                                                }
                                        }
                                }
-                       } else if(!isTruePi0 && !isTrueEta){ // Background
-                               if (fDoMesonQA > 0){
-                                       if(gamma0MotherLabel>-1 && gamma1MotherLabel>-1){ // Both Tracks are Photons and have a mother but not Pi0 or Eta
-                                               fHistoTrueBckGGInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
-                                               fCharMesonMCInfo = 1;
-                                       } else { // No photon or without mother
-                                               fHistoTrueBckContInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
-                                       }
-                               }
-                               if( isTruePi0Dalitz || isTrueEtaDalitz ){
-                                       // Dalitz
-                                       fCharMesonMCInfo = 5;
-                                       fHistoTrueMotherDalitzInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
-                               } else if (gamma0DalitzCand || gamma1DalitzCand){
-                                       if (fDoMesonQA > 0)fHistoTrueBckContInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
+                       }       
+               } else if(!isTruePi0 && !isTrueEta){ // Background
+                       if (fDoMesonQA > 0){
+                               if(gamma0MotherLabel>-1 && gamma1MotherLabel>-1){ // Both Tracks are Photons and have a mother but not Pi0 or Eta
+                                       fHistoTrueBckGGInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
+                               } else { // No photon or without mother
+                                       fHistoTrueBckContInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
                                }
                        }
                }
+               if (isTrueEta && !matched){
+                       fStringRecTrueEtas[fiCut].Append(Form("%i,",gamma0MotherLabel));
+               }
+               if (isTruePi0 && !matched){
+                       fStringRecTruePi0s[fiCut].Append(Form("%i,",gamma0MotherLabel));
+               }       
+
        }
 }
 //______________________________________________________________________
-void AliAnalysisTaskGammaConvCalo::ProcessTrueMesonCandidatesAOD(AliAODConversionMother *Pi0Candidate, AliAODConversionPhoton *TrueGammaCandidate0, AliAODConversionPhoton *TrueGammaCandidate1)
+void AliAnalysisTaskGammaConvCalo::ProcessTrueMesonCandidatesAOD(AliAODConversionMother *Pi0Candidate, AliAODConversionPhoton *TrueGammaCandidate0, AliAODConversionPhoton *TrueGammaCandidate1, Bool_t matched)
 {
        
        // Process True Mesons
        TClonesArray *AODMCTrackArray = dynamic_cast<TClonesArray*>(fInputEvent->FindListObject(AliAODMCParticle::StdBranchName()));
+       if (AODMCTrackArray == NULL) return;
        Bool_t isTruePi0 = kFALSE;
        Bool_t isTrueEta = kFALSE;
-       Bool_t isTruePi0Dalitz = kFALSE;
-       Bool_t isTrueEtaDalitz = kFALSE;
-       Bool_t gamma0DalitzCand = kFALSE;
-       Bool_t gamma1DalitzCand = kFALSE;
        
        AliAODMCParticle *positiveMC = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(TrueGammaCandidate0->GetMCLabelPositive()));
        AliAODMCParticle *negativeMC = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(TrueGammaCandidate0->GetMCLabelNegative()));
        
-       fCharMesonMCInfo = 0;
        Int_t gamma0MCLabel = -1;
        Int_t gamma0MotherLabel = -1;
        if(!positiveMC||!negativeMC)
                return;
        
-       if(positiveMC->GetMother()>-1&&(negativeMC->GetMother() == positiveMC->GetMother())){
+       if (TrueGammaCandidate0->IsTrueConvertedPhoton()){
                gamma0MCLabel = positiveMC->GetMother();
-       }
-       
-       if(gamma0MCLabel != -1){ // Gamma is Combinatorial; MC Particles don't belong to the same Mother
-               // Daughters Gamma 0
                AliAODMCParticle * gammaMC0 = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma0MCLabel));
-               if(abs(negativeMC->GetPdgCode())==11 && abs(positiveMC->GetPdgCode())==11){  // Electrons ...
-                       if(((positiveMC->GetMCProcessCode())) == 5 && ((negativeMC->GetMCProcessCode())) == 5){ // ... From Conversion ...
-                               if(gammaMC0->GetPdgCode() == 22){ // ... with Gamma Mother
-                               gamma0MotherLabel=gammaMC0->GetMother();
-                               }
-                       }
-                       if(gammaMC0->GetPdgCode() ==111){ // Dalitz candidate
-                               gamma0DalitzCand = kTRUE;
-                               gamma0MotherLabel=-111;
-                       }
-                       if(gammaMC0->GetPdgCode() ==221){ // Dalitz candidate
-                               gamma0DalitzCand = kTRUE;
-                               gamma0MotherLabel=-221;
-                       }
-               }
-       }
-       positiveMC = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(TrueGammaCandidate1->GetMCLabelPositive()));
-       negativeMC = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(TrueGammaCandidate1->GetMCLabelNegative()));
-       
-       Int_t gamma1MCLabel = -1;
+               gamma0MotherLabel=gammaMC0->GetMother();
+       }       
+
+       if (!TrueGammaCandidate1->GetIsCaloPhoton()) AliFatal("CaloPhotonFlag has not been set. Aborting");
+       Int_t gamma1MCLabel = TrueGammaCandidate1->GetCaloPhotonMCLabel(0);     // get most probable MC label
        Int_t gamma1MotherLabel = -1;
-       if(!positiveMC||!negativeMC)
-               return;
-       
-       if(positiveMC->GetMother()>-1&&(negativeMC->GetMother() == positiveMC->GetMother())){
-               gamma1MCLabel = positiveMC->GetMother();
-       }
+               // check if 
+
        if(gamma1MCLabel != -1){ // Gamma is Combinatorial; MC Particles don't belong to the same Mother
                // Daughters Gamma 1
                AliAODMCParticle * gammaMC1 = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MCLabel));
-               if(abs(negativeMC->GetPdgCode())==11 && abs(positiveMC->GetPdgCode())==11){  // Electrons ...
-                       if(((positiveMC->GetMCProcessCode())) == 5 && ((negativeMC->GetMCProcessCode())) == 5){ // ... From Conversion ...
-                               if(gammaMC1->GetPdgCode() == 22){ // ... with Gamma Mother
+               if (TrueGammaCandidate1->IsLargestComponentPhoton() || TrueGammaCandidate1->IsLargestComponentElectron()){              // largest component is electro magnetic
+                       // get mother of interest (pi0 or eta)
+                       if (TrueGammaCandidate1->IsLargestComponentPhoton()){                                                                                                           // for photons its the direct mother 
                                gamma1MotherLabel=gammaMC1->GetMother();
-                               }
+                       } else if (TrueGammaCandidate1->IsLargestComponentElectron()){                                                                                          // for electrons its either the direct mother or for conversions the grandmother
+                               if (TrueGammaCandidate1->IsConversion()){
+                                       AliAODMCParticle * gammaGrandMotherMC1 =  static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gammaMC1->GetMother()));
+                                       gamma1MotherLabel=gammaGrandMotherMC1->GetMother();
+                               } else gamma1MotherLabel=gammaMC1->GetMother(); 
                        }
-                       if(gammaMC1->GetPdgCode() ==111 ){ // Dalitz candidate
-                               gamma1DalitzCand = kTRUE;
-                               gamma1MotherLabel=-111;
-                       }
-                       if(gammaMC1->GetPdgCode() ==221){ // Dalitz candidate
-                               gamma1DalitzCand = kTRUE;
-                               gamma1MotherLabel=-221;
-                       }
-               }
+               } else {
+                       if (fDoMesonQA > 0) fHistoTrueMotherCaloEMNonLeadingInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
+               }       
        }
+                       
        if(gamma0MotherLabel>=0 && gamma0MotherLabel==gamma1MotherLabel){
-               if(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->GetPdgCode() == 111){
+               if(((AliAODMCParticle*)AODMCTrackArray->At(gamma1MotherLabel))->GetPdgCode() == 111){
                        isTruePi0=kTRUE;
                }
-               if(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->GetPdgCode() == 221){
+               if(((AliAODMCParticle*)AODMCTrackArray->At(gamma1MotherLabel))->GetPdgCode() == 221){
                        isTrueEta=kTRUE;
                }
        }
        
-       //Identify Dalitz candidate
-       if (gamma1DalitzCand || gamma0DalitzCand){
-               if (gamma0DalitzCand && gamma0MCLabel >=0 && gamma0MCLabel==gamma1MotherLabel){
-                       if (gamma0MotherLabel == -111) isTruePi0Dalitz = kTRUE;
-                       if (gamma0MotherLabel == -221) isTrueEtaDalitz = kTRUE;
-               }
-               if (gamma1DalitzCand && gamma1MCLabel >=0 && gamma1MCLabel==gamma0MotherLabel){
-                       if (gamma1MotherLabel == -111) isTruePi0Dalitz = kTRUE;
-                       if (gamma1MotherLabel == -221) isTrueEtaDalitz = kTRUE;
-               }
-       }
-       
        if(isTruePi0 || isTrueEta){// True Pion or Eta
-               fHistoTrueMotherInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
+               if (!matched){
+                       if (isTruePi0)fHistoTruePi0InvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
+                       if (isTrueEta)fHistoTrueEtaInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
+               }       
                if (fDoMesonQA > 0){
-                       if (isTruePi0){
-                               if ( Pi0Candidate->M() > 0.05 && Pi0Candidate->M() < 0.17){
-                               fHistoTruePi0PtY[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->Rapidity()-((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift());
-                               fHistoTruePi0PtAlpha[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->GetAlpha());
-                               fHistoTruePi0PtOpenAngle[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->GetOpeningAngle());
-                               }
-                       } else if (isTrueEta){
-                               if ( Pi0Candidate->M() > 0.45 && Pi0Candidate->M() < 0.65){
-                               fHistoTrueEtaPtY[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->Rapidity()-((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift());
-                               fHistoTrueEtaPtAlpha[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->GetAlpha());
-                               fHistoTrueEtaPtOpenAngle[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->GetOpeningAngle());
-                               }
-                       }
+                       if (TrueGammaCandidate1->IsLargestComponentPhoton() && !matched){
+                               if (isTruePi0) fHistoTruePi0CaloPhotonInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
+                               if (isTrueEta) fHistoTrueEtaCaloPhotonInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
+                       }       
+                       if (TrueGammaCandidate1->IsLargestComponentElectron() && !matched) {
+                               if (isTruePi0) fHistoTruePi0CaloElectronInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
+                               if (isTrueEta) fHistoTrueEtaCaloElectronInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
+                       }       
+                       if (TrueGammaCandidate1->IsLargestComponentElectron() && TrueGammaCandidate1->IsConversion()){
+                               if (isTruePi0 && !matched)fHistoTruePi0CaloConvertedPhotonInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
+                               if (isTrueEta && !matched)fHistoTrueEtaCaloConvertedPhotonInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
+                               if ((TrueGammaCandidate0->GetMCLabelPositive() == gamma1MCLabel || TrueGammaCandidate0->GetMCLabelNegative() == gamma1MCLabel) && isTruePi0)
+                                       fHistoTruePi0CaloConvertedPhotonMatchedInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
+                               if ((TrueGammaCandidate0->GetMCLabelPositive() == gamma1MCLabel || TrueGammaCandidate0->GetMCLabelNegative() == gamma1MCLabel) && isTrueEta)
+                                       fHistoTrueEtaCaloConvertedPhotonMatchedInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
+                       }       
+                       if ((TrueGammaCandidate1->IsMerged() || TrueGammaCandidate1->IsMergedPartConv() || TrueGammaCandidate1->IsDalitzMerged()) && !matched ){
+                               if (isTruePi0) fHistoTruePi0CaloMergedClusterInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
+                               if (isTrueEta) fHistoTrueEtaCaloMergedClusterInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
+                       }       
+                       if (TrueGammaCandidate1->IsMergedPartConv() && !matched) {
+                               if (isTruePi0) fHistoTruePi0CaloMergedClusterPartConvInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
+                               if (isTrueEta) fHistoTrueEtaCaloMergedClusterPartConvInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
+                       }       
                }
-               if(!(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma0MotherLabel))->IsPrimary())){ // Secondary Meson
-                       Int_t secMotherLabel = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->GetMother();
-                       Float_t weightedSec= 1;
-                       if(((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(secMotherLabel, 0x0, fInputEvent) && static_cast<AliAODMCParticle*>(AODMCTrackArray->At(secMotherLabel))->GetPdgCode()==310){
-                               weightedSec= ((AliConversionCuts*)fCutArray->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
-                               //cout << "MC input \t"<<i << "\t" <<  particle->Pt()<<"\t"<<weighted << endl;
-                       }
-                       fHistoTrueSecondaryMotherInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weightedSec);
-                       fCharMesonMCInfo = 2;
-                       if (secMotherLabel >-1){
-                               if(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(secMotherLabel))->GetPdgCode()==310){
-                                       fCharMesonMCInfo = 4;
-                                       fHistoTrueSecondaryMotherFromK0sInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weightedSec);
-                                       if (fDoMesonQA > 0)fHistoTrueK0sWithPi0DaughterMCPt[fiCut]->Fill(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(secMotherLabel))->Pt());
-                               }
-                               if(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(secMotherLabel))->GetPdgCode()==221){
-                                       fCharMesonMCInfo = 3;
-                                       fHistoTrueSecondaryMotherFromEtaInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weightedSec);
-                                       if (fDoMesonQA > 0)fHistoTrueEtaWithPi0DaughterMCPt[fiCut]->Fill(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(secMotherLabel))->Pt());
-                               }
-                               if(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(secMotherLabel))->GetPdgCode()==3122){
-                                       fCharMesonMCInfo = 7;
-                                       fHistoTrueSecondaryMotherFromLambdaInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weightedSec);
-                                       if (fDoMesonQA > 0)fHistoTrueLambdaWithPi0DaughterMCPt[fiCut]->Fill(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(secMotherLabel))->Pt());
+
+               if ( !matched){
+                       if (fDoMesonQA > 0){
+                               if (isTruePi0){
+                                       if ( Pi0Candidate->M() > 0.05 && Pi0Candidate->M() < 0.17){
+                                               fHistoTruePi0PtY[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->Rapidity()-((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift());
+                                               fHistoTruePi0PtAlpha[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->GetAlpha());
+                                               fHistoTruePi0PtOpenAngle[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->GetOpeningAngle());
+                                               fHistoTrueMotherPi0ConvPhotonEtaPhi[fiCut]->Fill(TrueGammaCandidate0->GetPhotonPhi(), TrueGammaCandidate0->GetPhotonEta());
+                                       }
+                               } else if (isTrueEta){
+                                       if ( Pi0Candidate->M() > 0.45 && Pi0Candidate->M() < 0.65){
+                                               fHistoTrueEtaPtY[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->Rapidity()-((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift());
+                                               fHistoTrueEtaPtAlpha[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->GetAlpha());
+                                               fHistoTrueEtaPtOpenAngle[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->GetOpeningAngle());
+                                               fHistoTrueMotherEtaConvPhotonEtaPhi[fiCut]->Fill(TrueGammaCandidate0->GetPhotonPhi(), TrueGammaCandidate0->GetPhotonEta());
+                                       }
                                }
                        }
-               }else{ // Only primary pi0 for efficiency calculation
-                       Float_t weighted= 1;
-                       fCharMesonMCInfo = 6;
-                       if(((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(gamma1MotherLabel, 0x0, fInputEvent)){
-                               if (static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->Pt()>0.005){
-                               weighted= ((AliConversionCuts*)fCutArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),gamma1MotherLabel, 0x0, fInputEvent);
-                               //                      cout << "rec \t " <<gamma1MotherLabel << "\t" <<  weighted << endl;
+                       if(!(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma0MotherLabel))->IsPrimary())){ // Secondary Meson
+                               Int_t secMotherLabel = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->GetMother();
+                               Float_t weightedSec= 1;
+                               if(((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsParticleFromBGEvent(secMotherLabel, 0x0, fInputEvent) && static_cast<AliAODMCParticle*>(AODMCTrackArray->At(secMotherLabel))->GetPdgCode()==310){
+                                       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
+                                       //cout << "MC input \t"<<i << "\t" <<  particle->Pt()<<"\t"<<weighted << endl;
                                }
-                       }
-                       fHistoTruePrimaryMotherInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weighted);
-                       fHistoTruePrimaryMotherW0WeightingInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
-                       fProfileTruePrimaryMotherWeightsInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weighted);
-                       
-                       if (fDoMesonQA > 0){
-                               if(isTruePi0){ // Only primary pi0 for resolution
-                                       fHistoTruePrimaryPi0MCPtResolPt[fiCut]->Fill(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->Pt(),
-                                                                                                                       (Pi0Candidate->Pt()-static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->Pt())/static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->Pt(),weighted);
-                               
+                               if (isTruePi0){
+                                       fHistoTrueSecondaryPi0InvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weightedSec);
+                                       fHistoTrueSecondaryPi0PhotonPairPtconv[fiCut]->Fill(Pi0Candidate->M(),TrueGammaCandidate0->Pt(),weightedSec);
+                                       if(CheckIfContainedInString(fStringRecTruePi0s[fiCut],gamma0MotherLabel)){
+                                               fHistoTrueSecondaryPi0DCPtconv[fiCut]->Fill(TrueGammaCandidate0->Pt(),weightedSec);
+                                       }                                               
+                               }       
+                               if (secMotherLabel >-1){
+                                       if(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(secMotherLabel))->GetPdgCode()==310 && isTruePi0){
+                                               fHistoTrueSecondaryPi0FromK0sInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weightedSec);
+                                               if (fDoMesonQA > 0)fHistoTrueK0sWithPi0DaughterMCPt[fiCut]->Fill(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(secMotherLabel))->Pt());
+                                       }
+                                       if(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(secMotherLabel))->GetPdgCode()==221 && isTruePi0){
+                                               fHistoTrueSecondaryPi0FromEtaInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weightedSec);
+                                               if (fDoMesonQA > 0)fHistoTrueEtaWithPi0DaughterMCPt[fiCut]->Fill(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(secMotherLabel))->Pt());
+                                       }
+                                       if(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(secMotherLabel))->GetPdgCode()==3122 && isTruePi0){
+                                               fHistoTrueSecondaryPi0FromLambdaInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weightedSec);
+                                               if (fDoMesonQA > 0)fHistoTrueLambdaWithPi0DaughterMCPt[fiCut]->Fill(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(secMotherLabel))->Pt());
+                                       }
+                               }
+                       } else{ // Only primary pi0 for efficiency calculation
+                               Float_t weighted= 1;
+                               if(((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsParticleFromBGEvent(gamma1MotherLabel, 0x0, fInputEvent)){
+                                       if (static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->Pt()>0.005){
+                                       weighted= ((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),gamma1MotherLabel, 0x0, fInputEvent);
+                                       //                      cout << "rec \t " <<gamma1MotherLabel << "\t" <<  weighted << endl;
+                                       }
                                }
-                               if (isTrueEta){ // Only primary eta for resolution
-                                       fHistoTruePrimaryEtaMCPtResolPt[fiCut]->Fill(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->Pt(),
-                                                                                                                       (Pi0Candidate->Pt()-static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->Pt())/static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->Pt(),weighted);
+                               if (isTruePi0){
+                                       fHistoTruePrimaryPi0InvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weighted);
+                                       fHistoTruePrimaryPi0W0WeightingInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
+                                       fHistoTruePrimaryPi0PhotonPairPtconv[fiCut]->Fill(Pi0Candidate->M(),TrueGammaCandidate0->Pt(),weighted);
+                                       fProfileTruePrimaryPi0WeightsInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weighted);
+                                       if(CheckIfContainedInString(fStringRecTruePi0s[fiCut],gamma0MotherLabel)){
+                                               fHistoTruePrimaryPi0DCPtconv[fiCut]->Fill(TrueGammaCandidate0->Pt(),weighted);
+                                       }                                               
+                               } else if (isTrueEta){
+                                       fHistoTruePrimaryEtaInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weighted);
+                                       fHistoTruePrimaryEtaW0WeightingInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
+                                       fHistoTruePrimaryEtaPhotonPairPtconv[fiCut]->Fill(Pi0Candidate->M(),TrueGammaCandidate0->Pt(),weighted);
+                                       fProfileTruePrimaryEtaWeightsInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weighted);                                     
+                                       if(CheckIfContainedInString(fStringRecTrueEtas[fiCut],gamma0MotherLabel)){
+                                               fHistoTruePrimaryEtaDCPtconv[fiCut]->Fill(TrueGammaCandidate0->Pt(),weighted);
+                                       }                                                                                               
+                               }       
+                               if (fDoMesonQA > 0){
+                                       if(isTruePi0){ // Only primary pi0 for resolution
+                                               fHistoTruePrimaryPi0MCPtResolPt[fiCut]->Fill(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->Pt(),
+                                                                                                                               (Pi0Candidate->Pt()-static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->Pt())/static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->Pt(),weighted);
+                                       
+                                       }
+                                       if (isTrueEta){ // Only primary eta for resolution
+                                               fHistoTruePrimaryEtaMCPtResolPt[fiCut]->Fill(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->Pt(),
+                                                                                                                               (Pi0Candidate->Pt()-static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->Pt())/static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->Pt(),weighted);
+                                       }
                                }
                        }
-               }
+               }       
        } else if(!isTruePi0 && !isTrueEta) { // Background
                if (fDoMesonQA > 0){
                        if(gamma0MotherLabel>-1 && gamma1MotherLabel>-1){ // Both Tracks are Photons and have a mother but not Pi0 or Eta
                                fHistoTrueBckGGInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
-                               fCharMesonMCInfo = 1;
                        } else { // No photon or without mother
                                fHistoTrueBckContInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
                        }
                }
-               if( isTruePi0Dalitz || isTrueEtaDalitz ){
-                       // Dalitz
-                       fCharMesonMCInfo = 5;
-                       fHistoTrueMotherDalitzInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
-               } else if (gamma0DalitzCand || gamma1DalitzCand){
-                       if (fDoMesonQA > 0)fHistoTrueBckContInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
-               }
        }
+       
+       if (isTrueEta && !matched){
+               fStringRecTrueEtas[fiCut].Append(Form("%i,",gamma0MotherLabel));
+       }
+       if (isTruePi0 && !matched){
+               fStringRecTruePi0s[fiCut].Append(Form("%i,",gamma0MotherLabel));
+       }       
+
+
+       
 }
+
 //________________________________________________________________________
 void AliAnalysisTaskGammaConvCalo::CalculateBackground(){
        
@@ -2563,7 +2990,7 @@ void AliAnalysisTaskGammaConvCalo::CalculateBackground(){
        if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->UseTrackMultiplicity()){
                for(Int_t nEventsInBG=0;nEventsInBG<fBGClusHandler[fiCut]->GetNBGEvents();nEventsInBG++){
                        AliGammaConversionAODVector *previousEventV0s = fBGClusHandler[fiCut]->GetBGGoodV0s(zbin,mbin,nEventsInBG);
-                       if(fMoveParticleAccordingToVertex == kTRUE){
+                       if(fMoveParticleAccordingToVertex == kTRUE || ((AliConversionPhotonCuts*)fCutArray->At(fiCut))->GetInPlaneOutOfPlaneCut() != 0){
                                bgEventVertex = fBGClusHandler[fiCut]->GetBGEventVertex(zbin,mbin,nEventsInBG);
                        }
                        
@@ -2572,17 +2999,22 @@ void AliAnalysisTaskGammaConvCalo::CalculateBackground(){
                                for(UInt_t iPrevious=0;iPrevious<previousEventV0s->size();iPrevious++){
                                        AliAODConversionPhoton previousGoodV0 = (AliAODConversionPhoton)(*(previousEventV0s->at(iPrevious)));
                                        if(fMoveParticleAccordingToVertex == kTRUE){
-                                               MoveParticleAccordingToVertex(&previousGoodV0,bgEventVertex);
+                                               if (bgEventVertex){
+                                                       MoveParticleAccordingToVertex(&previousGoodV0,bgEventVertex);
+                                               }       
                                        }
-                                       if(((AliConversionCuts*)fCutArray->At(fiCut))->GetInPlaneOutOfPlaneCut() != 0){
-                                               RotateParticleAccordingToEP(&previousGoodV0,bgEventVertex->fEP,fEventPlaneAngle);
+                                       if(((AliConversionPhotonCuts*)fCutArray->At(fiCut))->GetInPlaneOutOfPlaneCut() != 0){
+                                               if (bgEventVertex){
+                                                       RotateParticleAccordingToEP(&previousGoodV0,bgEventVertex->fEP,fEventPlaneAngle);
+                                               }       
                                        }
                                        
                                        AliAODConversionMother *backgroundCandidate = new AliAODConversionMother(&currentEventGoodV0,&previousGoodV0);
                                        backgroundCandidate->CalculateDistanceOfClossetApproachToPrimVtx(fInputEvent->GetPrimaryVertex());
                                        if((((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))
-                                               ->MesonIsSelected(backgroundCandidate,kFALSE,((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift()))){
+                                               ->MesonIsSelected(backgroundCandidate,kFALSE,((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift()))){
                                                fHistoMotherBackInvMassPt[fiCut]->Fill(backgroundCandidate->M(),backgroundCandidate->Pt());
+                                               fHistoPhotonPairMixedEventPtconv[fiCut]->Fill(backgroundCandidate->M(),currentEventGoodV0.Pt());
                                                Double_t sparesFill[4] = {backgroundCandidate->M(),backgroundCandidate->Pt(),(Double_t)zbin,(Double_t)mbin};
                                                fSparseMotherBackInvMassPtZM[fiCut]->Fill(sparesFill,1);
                                        }
@@ -2595,7 +3027,7 @@ void AliAnalysisTaskGammaConvCalo::CalculateBackground(){
                for(Int_t nEventsInBG=0;nEventsInBG <fBGClusHandler[fiCut]->GetNBGEvents();nEventsInBG++){
                        AliGammaConversionAODVector *previousEventV0s = fBGClusHandler[fiCut]->GetBGGoodV0s(zbin,mbin,nEventsInBG);
                        if(previousEventV0s){
-                               if(fMoveParticleAccordingToVertex == kTRUE){
+                               if(fMoveParticleAccordingToVertex == kTRUE || ((AliConversionPhotonCuts*)fCutArray->At(fiCut))->GetInPlaneOutOfPlaneCut() != 0 ){
                                        bgEventVertex = fBGClusHandler[fiCut]->GetBGEventVertex(zbin,mbin,nEventsInBG);
                                }
                                for(Int_t iCurrent=0;iCurrent<fGammaCandidates->GetEntries();iCurrent++){
@@ -2605,17 +3037,21 @@ void AliAnalysisTaskGammaConvCalo::CalculateBackground(){
                                                AliAODConversionPhoton previousGoodV0 = (AliAODConversionPhoton)(*(previousEventV0s->at(iPrevious)));
                                        
                                                if(fMoveParticleAccordingToVertex == kTRUE){
-                                                       MoveParticleAccordingToVertex(&previousGoodV0,bgEventVertex);
+                                                       if (bgEventVertex){
+                                                               MoveParticleAccordingToVertex(&previousGoodV0,bgEventVertex);
+                                                       }       
                                                }
-                                               if(((AliConversionCuts*)fCutArray->At(fiCut))->GetInPlaneOutOfPlaneCut() != 0){
-                                                       RotateParticleAccordingToEP(&previousGoodV0,bgEventVertex->fEP,fEventPlaneAngle);
+                                               if(((AliConversionPhotonCuts*)fCutArray->At(fiCut))->GetInPlaneOutOfPlaneCut() != 0){
+                                                       if (bgEventVertex){
+                                                               RotateParticleAccordingToEP(&previousGoodV0,bgEventVertex->fEP,fEventPlaneAngle);
+                                                       }       
                                                }
                                        
-                                       
                                                AliAODConversionMother *backgroundCandidate = new AliAODConversionMother(&currentEventGoodV0,&previousGoodV0);
                                                backgroundCandidate->CalculateDistanceOfClossetApproachToPrimVtx(fInputEvent->GetPrimaryVertex());
-                                               if((((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->MesonIsSelected(backgroundCandidate,kFALSE,((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift()))){
+                                               if((((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->MesonIsSelected(backgroundCandidate,kFALSE,((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift()))){
                                                        fHistoMotherBackInvMassPt[fiCut]->Fill(backgroundCandidate->M(),backgroundCandidate->Pt());
+                                                       fHistoPhotonPairMixedEventPtconv[fiCut]->Fill(backgroundCandidate->M(),currentEventGoodV0.Pt());
                                                        Double_t sparesFill[4] = {backgroundCandidate->M(),backgroundCandidate->Pt(),(Double_t)zbin,(Double_t)mbin};
                                                        fSparseMotherBackInvMassPtZM[fiCut]->Fill(sparesFill,1);
                                                }
@@ -2625,7 +3061,7 @@ void AliAnalysisTaskGammaConvCalo::CalculateBackground(){
                                }
                        }
                }
-       }
+       }       
 }
 
 //________________________________________________________________________
@@ -2653,23 +3089,23 @@ void AliAnalysisTaskGammaConvCalo::CalculateBackgroundRP(){
                        for(Int_t secondGammaIndex=firstGammaIndex+1;secondGammaIndex<fGammaCandidates->GetEntries();secondGammaIndex++){
                                AliAODConversionPhoton *gamma1=dynamic_cast<AliAODConversionPhoton*>(fGammaCandidates->At(secondGammaIndex));
                                if (gamma1 == NULL) continue;
-                               if(!((AliConversionCuts*)fCutArray->At(fiCut))->PhotonIsSelected(gamma1,fInputEvent))continue;
+                               if(!((AliConversionPhotonCuts*)fCutArray->At(fiCut))->PhotonIsSelected(gamma1,fInputEvent))continue;
                                for(Int_t nRandom=0;nRandom<((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->GetNumberOfBGEvents();nRandom++){
                                
                                        RotateParticle(gamma1);                                 
                                        AliAODConversionMother backgroundCandidate(gamma0,gamma1);
                                        backgroundCandidate.CalculateDistanceOfClossetApproachToPrimVtx(fInputEvent->GetPrimaryVertex());
                                        if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))
-                                               ->MesonIsSelected(&backgroundCandidate,kFALSE,((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift())){
+                                               ->MesonIsSelected(&backgroundCandidate,kFALSE,((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift())){
                                                fHistoMotherBackInvMassPt[fiCut]->Fill(backgroundCandidate.M(),backgroundCandidate.Pt());
+                                               fHistoPhotonPairMixedEventPtconv[fiCut]->Fill(backgroundCandidate.M(),gamma0->Pt());
                                                Double_t sparesFill[4] = {backgroundCandidate.M(),backgroundCandidate.Pt(),(Double_t)zbin,(Double_t)mbin};
                                                fSparseMotherBackInvMassPtZM[fiCut]->Fill(sparesFill,weight);
                                        }
                                }
                        }
                }
-       }
-       else{
+       } else {
                // Do Event Mixing
                for(Int_t nEventsInBG=0;nEventsInBG <fBGHandlerRP[fiCut]->GetNBGEvents(fGammaCandidates,fInputEvent);nEventsInBG++){
                
@@ -2693,10 +3129,11 @@ void AliAnalysisTaskGammaConvCalo::CalculateBackgroundRP(){
                                                AliAODConversionMother backgroundCandidate(gamma0,gamma1);
                                                backgroundCandidate.CalculateDistanceOfClossetApproachToPrimVtx(fInputEvent->GetPrimaryVertex());
                                                if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))
-                                               ->MesonIsSelected(&backgroundCandidate,kFALSE,((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift())){
-                                               fHistoMotherBackInvMassPt[fiCut]->Fill(backgroundCandidate.M(),backgroundCandidate.Pt());
-                                               Double_t sparesFill[4] = {backgroundCandidate.M(),backgroundCandidate.Pt(),(Double_t)zbin,(Double_t)mbin};
-                                               fSparseMotherBackInvMassPtZM[fiCut]->Fill(sparesFill,weight);
+                                               ->MesonIsSelected(&backgroundCandidate,kFALSE,((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetEtaShift())){
+                                                       fHistoMotherBackInvMassPt[fiCut]->Fill(backgroundCandidate.M(),backgroundCandidate.Pt());
+                                                       fHistoPhotonPairMixedEventPtconv[fiCut]->Fill(backgroundCandidate.M(),gamma0->Pt());
+                                                       Double_t sparesFill[4] = {backgroundCandidate.M(),backgroundCandidate.Pt(),(Double_t)zbin,(Double_t)mbin};
+                                                       fSparseMotherBackInvMassPtZM[fiCut]->Fill(sparesFill,weight);
                                                }
                                        }
                                }
@@ -2885,29 +3322,135 @@ Int_t AliAnalysisTaskGammaConvCalo::GetSourceClassification(Int_t daughter, Int_
   
 }
 
-// //________________________________________________________________________
-// Double_t AliAnalysisTaskGammaConvCalo::GetMaxCellEnergy(const AliVCluster *cluster, Short_t &id) const
-// {
-//   // Get maximum energy of attached cell.
-//   
-//   id = -1;
-//   Double_t maxe = 0;
-//   Int_t ncells = cluster->GetNCells();
-//   if (fEsdCells) {
-//     for (Int_t i=0; i<ncells; i++) {
-//       Double_t e = fEsdCells->GetCellAmplitude(TMath::Abs(cluster->GetCellAbsId(i)));
-//       if (e>maxe) {
-//         maxe = e;
-//         id   = cluster->GetCellAbsId(i);
-//       }
-//     }
-//   } else {
-//     for (Int_t i=0; i<ncells; i++) {
-//       Double_t e = fAodCells->GetCellAmplitude(TMath::Abs(cluster->GetCellAbsId(i)));
-//       if (e>maxe)
-//         maxe = e;
-//       id   = cluster->GetCellAbsId(i);
-//     }
-//   }
-//   return maxe;
-// }
+//_________________________________________________________________________________
+Bool_t AliAnalysisTaskGammaConvCalo::CheckIfContainedInString(TString input, Int_t tobechecked){
+       TObjArray *arr = input.Tokenize(",");
+       for (Int_t i = 0; i < arr->GetEntriesFast();i++){
+               TString tempStr = ((TObjString*)arr->At(i))->GetString();
+               if (tempStr.Atoi() == tobechecked) return kTRUE;
+       }       
+       return kFALSE;
+}
+
+//_________________________________________________________________________________
+Bool_t AliAnalysisTaskGammaConvCalo::CheckIfContainedInStringAndAppend(TString &input, Int_t tobechecked){
+       TObjArray *arr = input.Tokenize(",");
+       Bool_t isContained = kFALSE;
+       for (Int_t i = 0; i < arr->GetEntriesFast();i++){
+               TString tempStr = ((TObjString*)arr->At(i))->GetString();
+               if (tempStr.Atoi() == tobechecked) isContained= kTRUE;
+       }       
+       if (!isContained)input.Append(Form("%i,",tobechecked)); 
+       return isContained;
+}
+
+//_________________________________________________________________________________
+void AliAnalysisTaskGammaConvCalo::ProcessConversionPhotonsForMissingTags (){
+
+       if (!fMCStack) return;
+
+       for(Int_t firstGammaIndex=0;firstGammaIndex<fGammaCandidates->GetEntries();firstGammaIndex++){
+               AliAODConversionPhoton *gamma0=dynamic_cast<AliAODConversionPhoton*>(fGammaCandidates->At(firstGammaIndex));
+               if (gamma0->IsTrueConvertedPhoton()){
+                       Int_t gamma0MotherLabel = -1;
+                       Int_t gamma0MCLabel = gamma0->GetMCParticleLabel(fMCStack);
+                       if(gamma0MCLabel != -1){ 
+                               TParticle * gammaMC0 = (TParticle*)fMCStack->Particle(gamma0MCLabel);
+                               gamma0MotherLabel=gammaMC0->GetFirstMother();
+                               if (gamma0MotherLabel>-1){
+                                       if(((TParticle*)fMCStack->Particle(gamma0MotherLabel))->GetPdgCode() == 111){
+                                               if (!CheckIfContainedInStringAndAppend(fStringRecTruePi0s[fiCut],gamma0MotherLabel)){ 
+                                                       if (gamma0MotherLabel >= fMCStack->GetNprimary()){
+                                                               Int_t secMotherLabel = ((TParticle*)fMCStack->Particle(gamma0MotherLabel))->GetMother(0);
+                                                               Float_t weightedSec= 1;
+                                                               if(((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsParticleFromBGEvent(secMotherLabel, fMCStack, fInputEvent) && fMCStack->Particle(secMotherLabel)->GetPdgCode()==310){
+                                                                       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
+                                                               }
+                                                               fHistoTrueSecondaryPi0MissingPtconv[fiCut]->Fill(gamma0->Pt(),weightedSec);
+                                                       } else {
+                                                               Float_t weighted= 1;
+                                                               if(((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsParticleFromBGEvent(gamma0MotherLabel, fMCStack, fInputEvent)){
+                                                                       if (((TParticle*)fMCStack->Particle(gamma0MotherLabel))->Pt()>0.005){
+                                                                               weighted= ((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),gamma0MotherLabel, fMCStack, fInputEvent);
+                                                                       }
+                                                               }
+                                                               fHistoTruePrimaryPi0MissingPtconv[fiCut]->Fill(gamma0->Pt(),weighted);          
+                                                       }       
+                                               }
+                                       } else if(((TParticle*)fMCStack->Particle(gamma0MotherLabel))->GetPdgCode() == 221){
+                                               if (!CheckIfContainedInStringAndAppend(fStringRecTrueEtas[fiCut],gamma0MotherLabel)){
+                                                       Float_t weighted= 1;
+                                                       if(((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsParticleFromBGEvent(gamma0MotherLabel, fMCStack, fInputEvent)){
+                                                               if (((TParticle*)fMCStack->Particle(gamma0MotherLabel))->Pt()>0.005){
+                                                                       weighted= ((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),gamma0MotherLabel, fMCStack, fInputEvent);
+                                                               }
+                                                       }
+                                                       fHistoTruePrimaryEtaMissingPtconv[fiCut]->Fill(gamma0->Pt(),weighted);
+                                               }       
+                                       }       
+                               }
+                       }       
+               }       
+       }       
+       return;
+}
+
+//_________________________________________________________________________________
+void AliAnalysisTaskGammaConvCalo::ProcessConversionPhotonsForMissingTagsAOD (){
+
+       TClonesArray *AODMCTrackArray = dynamic_cast<TClonesArray*>(fInputEvent->FindListObject(AliAODMCParticle::StdBranchName()));
+               
+       for(Int_t firstGammaIndex=0;firstGammaIndex<fGammaCandidates->GetEntries();firstGammaIndex++){
+               AliAODConversionPhoton *gamma0=dynamic_cast<AliAODConversionPhoton*>(fGammaCandidates->At(firstGammaIndex));
+
+               if (gamma0->IsTrueConvertedPhoton()){
+                       AliAODMCParticle *positiveMC = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma0->GetMCLabelPositive()));
+                       AliAODMCParticle *negativeMC = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma0->GetMCLabelNegative()));
+                       
+                       Int_t gamma0MCLabel = -1;
+                       Int_t gamma0MotherLabel = -1;
+                       if(!positiveMC||!negativeMC)
+                               return;
+                       
+                       if (gamma0->IsTrueConvertedPhoton()){
+                               gamma0MCLabel = positiveMC->GetMother();
+                               AliAODMCParticle * gammaMC0 = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma0MCLabel));
+                               gamma0MotherLabel=gammaMC0->GetMother();
+
+                               if (gamma0MotherLabel>-1){
+                                       if(((AliAODMCParticle*)AODMCTrackArray->At(gamma0MotherLabel))->GetPdgCode() == 111){
+                                               if (!CheckIfContainedInStringAndAppend(fStringRecTruePi0s[fiCut],gamma0MotherLabel)){ 
+                                                       if (!(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma0MotherLabel))->IsPrimary())){
+                                                               Int_t secMotherLabel = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma0MotherLabel))->GetMother();
+                                                               Float_t weightedSec= 1;
+                                                               if(((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsParticleFromBGEvent(secMotherLabel, 0x0, fInputEvent) && static_cast<AliAODMCParticle*>(AODMCTrackArray->At(secMotherLabel))->GetPdgCode()==310){
+                                                                       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
+                                                               }
+                                                               fHistoTrueSecondaryPi0MissingPtconv[fiCut]->Fill(gamma0->Pt(),weightedSec);
+                                                       } else {
+                                                               Float_t weighted= 1;
+                                                               if(((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsParticleFromBGEvent(gamma0MotherLabel, 0x0, fInputEvent)){
+                                                                       if (static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma0MotherLabel))->Pt()>0.005){
+                                                                               weighted= ((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),gamma0MotherLabel, 0x0, fInputEvent);
+                                                                       }
+                                                               }
+                                                               fHistoTruePrimaryPi0MissingPtconv[fiCut]->Fill(gamma0->Pt(),weighted);          
+                                                       }       
+                                               }
+                                       } else if(((AliAODMCParticle*)AODMCTrackArray->At(gamma0MotherLabel))->GetPdgCode() == 221){
+                                               if (!CheckIfContainedInStringAndAppend(fStringRecTrueEtas[fiCut],gamma0MotherLabel)){
+                                                       Float_t weighted= 1;
+                                                       if(((AliConvEventCuts*)fEventCutArray->At(fiCut))->IsParticleFromBGEvent(gamma0MotherLabel, 0x0, fInputEvent)){
+                                                               if (static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma0MotherLabel))->Pt()>0.005){
+                                                                       weighted= ((AliConvEventCuts*)fEventCutArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),gamma0MotherLabel, 0x0, fInputEvent);
+                                                               }
+                                                       }
+                                                       fHistoTruePrimaryEtaMissingPtconv[fiCut]->Fill(gamma0->Pt(),weighted);
+                                               }       
+                                       }       
+                               }
+                       }       
+               }       
+       }       
+       return;
+}      
\ No newline at end of file