]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWGGA/GammaConv/AliAnalysisTaskGammaCalo.cxx
Merge branch 'master' of https://git.cern.ch/reps/AliRoot
[u/mrichter/AliRoot.git] / PWGGA / GammaConv / AliAnalysisTaskGammaCalo.cxx
index eb623a1b8887b5193491086e92adea8fb63c3656..b42c31c8e5a0cb1df319ec63a8c1eb56fbf166bf 100644 (file)
@@ -95,6 +95,7 @@ AliAnalysisTaskGammaCalo::AliAnalysisTaskGammaCalo(): AliAnalysisTaskSE(),
        fHistoMotherInvMassECalib(NULL),
        fHistoMotherInvMassECalibalpha(NULL),
        fHistoClusGammaPt(NULL),
+       fHistoClusOverlapHeadersGammaPt(NULL),
        fHistoMCHeaders(NULL),
        fHistoMCAllGammaPt(NULL),
        fHistoMCDecayGammaPi0Pt(NULL),
@@ -137,6 +138,20 @@ AliAnalysisTaskGammaCalo::AliAnalysisTaskGammaCalo(): AliAnalysisTaskSE(),
        fHistoTrueEtaCaloMergedClusterPartConvInvMassPt(NULL),
        fHistoTruePi0NonMergedElectronPhotonInvMassPt(NULL),
        fHistoTruePi0NonMergedElectronMergedPhotonInvMassPt(NULL),
+       fHistoTruePi0Category1(NULL),
+       fHistoTrueEtaCategory1(NULL),
+       fHistoTruePi0Category2(NULL),
+       fHistoTrueEtaCategory2(NULL),
+       fHistoTruePi0Category3(NULL),
+       fHistoTrueEtaCategory3(NULL),
+       fHistoTruePi0Category4_6(NULL),
+       fHistoTrueEtaCategory4_6(NULL),
+       fHistoTruePi0Category5(NULL),
+       fHistoTrueEtaCategory5(NULL),
+       fHistoTruePi0Category7(NULL),
+       fHistoTrueEtaCategory7(NULL),
+       fHistoTruePi0Category8(NULL),
+       fHistoTrueEtaCategory8(NULL),
        fHistoTruePrimaryPi0InvMassPt(NULL),
        fHistoTruePrimaryEtaInvMassPt(NULL),
        fHistoTruePrimaryPi0W0WeightingInvMassPt(NULL),
@@ -146,7 +161,6 @@ AliAnalysisTaskGammaCalo::AliAnalysisTaskGammaCalo(): AliAnalysisTaskSE(),
        fHistoTruePrimaryPi0MCPtResolPt(NULL),
        fHistoTruePrimaryEtaMCPtResolPt(NULL),
        fHistoTrueSecondaryPi0InvMassPt(NULL),
-       fHistoTrueSecondaryEtaInvMassPt(NULL),
        fHistoTrueSecondaryPi0FromK0sInvMassPt(NULL),
        fHistoTrueK0sWithPi0DaughterMCPt(NULL),
        fHistoTrueSecondaryPi0FromEtaInvMassPt(NULL),
@@ -207,6 +221,7 @@ AliAnalysisTaskGammaCalo::AliAnalysisTaskGammaCalo(): AliAnalysisTaskSE(),
        fDoMesonQA(0),
        fDoClusterQA(0),
        fIsFromMBHeader(kTRUE),
+       fIsOverlappingWithOtherHeader(kFALSE),
        fIsMC(kFALSE)
 {
   
@@ -250,6 +265,7 @@ AliAnalysisTaskGammaCalo::AliAnalysisTaskGammaCalo(const char *name):
        fHistoMotherInvMassECalib(NULL),
        fHistoMotherInvMassECalibalpha(NULL),
        fHistoClusGammaPt(NULL),
+       fHistoClusOverlapHeadersGammaPt(NULL),
        fHistoMCHeaders(NULL),
        fHistoMCAllGammaPt(NULL),
        fHistoMCDecayGammaPi0Pt(NULL),
@@ -292,6 +308,20 @@ AliAnalysisTaskGammaCalo::AliAnalysisTaskGammaCalo(const char *name):
        fHistoTrueEtaCaloMergedClusterPartConvInvMassPt(NULL),
        fHistoTruePi0NonMergedElectronPhotonInvMassPt(NULL),
        fHistoTruePi0NonMergedElectronMergedPhotonInvMassPt(NULL),
+       fHistoTruePi0Category1(NULL),
+       fHistoTrueEtaCategory1(NULL),
+       fHistoTruePi0Category2(NULL),
+       fHistoTrueEtaCategory2(NULL),
+       fHistoTruePi0Category3(NULL),
+       fHistoTrueEtaCategory3(NULL),
+       fHistoTruePi0Category4_6(NULL),
+       fHistoTrueEtaCategory4_6(NULL),
+       fHistoTruePi0Category5(NULL),
+       fHistoTrueEtaCategory5(NULL),
+       fHistoTruePi0Category7(NULL),
+       fHistoTrueEtaCategory7(NULL),
+       fHistoTruePi0Category8(NULL),
+       fHistoTrueEtaCategory8(NULL),
        fHistoTruePrimaryPi0InvMassPt(NULL),
        fHistoTruePrimaryEtaInvMassPt(NULL),
        fHistoTruePrimaryPi0W0WeightingInvMassPt(NULL),
@@ -301,7 +331,6 @@ AliAnalysisTaskGammaCalo::AliAnalysisTaskGammaCalo(const char *name):
        fHistoTruePrimaryPi0MCPtResolPt(NULL),
        fHistoTruePrimaryEtaMCPtResolPt(NULL),
        fHistoTrueSecondaryPi0InvMassPt(NULL),
-       fHistoTrueSecondaryEtaInvMassPt(NULL),
        fHistoTrueSecondaryPi0FromK0sInvMassPt(NULL),
        fHistoTrueK0sWithPi0DaughterMCPt(NULL),
        fHistoTrueSecondaryPi0FromEtaInvMassPt(NULL),
@@ -362,6 +391,7 @@ AliAnalysisTaskGammaCalo::AliAnalysisTaskGammaCalo(const char *name):
        fDoMesonQA(0),
        fDoClusterQA(0),
        fIsFromMBHeader(kTRUE),
+       fIsOverlappingWithOtherHeader(kFALSE),
        fIsMC(kFALSE)
 {
   // Define output slots here
@@ -490,6 +520,7 @@ void AliAnalysisTaskGammaCalo::UserCreateOutputObjects(){
        }
                
        fHistoClusGammaPt = new TH1F*[fnCuts];
+       fHistoClusOverlapHeadersGammaPt = new TH1F*[fnCuts];
        
        for(Int_t iCut = 0; iCut<fnCuts;iCut++){
                TString cutstringEvent  = ((AliConvEventCuts*)fEventCutArray->At(iCut))->GetCutNumber();
@@ -506,7 +537,7 @@ void AliAnalysisTaskGammaCalo::UserCreateOutputObjects(){
                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");
@@ -522,6 +553,7 @@ void AliAnalysisTaskGammaCalo::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 problems");
                fESDList[iCut]->Add(fHistoNEvents[iCut]);
                
                if(fIsHeavyIon == 1) fHistoNGoodESDTracks[iCut] = new TH1I("GoodESDTracks","GoodESDTracks",4000,0,4000);
@@ -547,7 +579,8 @@ void AliAnalysisTaskGammaCalo::UserCreateOutputObjects(){
     
                fHistoClusGammaPt[iCut] = new TH1F("ClusGamma_Pt","ClusGamma_Pt",250,0,25);
                fESDList[iCut]->Add(fHistoClusGammaPt[iCut]);
-
+               fHistoClusOverlapHeadersGammaPt[iCut] = new TH1F("ClusGammaOverlapHeaders_Pt","ClusGammaOverlapHeaders_Pt",250,0,25);
+               fESDList[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);
@@ -661,7 +694,6 @@ void AliAnalysisTaskGammaCalo::UserCreateOutputObjects(){
                        fProfileTruePrimaryPi0WeightsInvMassPt  = new TProfile2D*[fnCuts];
                        fProfileTruePrimaryEtaWeightsInvMassPt  = new TProfile2D*[fnCuts];
                        fHistoTrueSecondaryPi0InvMassPt                         = new TH2F*[fnCuts];
-                       fHistoTrueSecondaryEtaInvMassPt                         = new TH2F*[fnCuts];
                        fHistoTrueSecondaryPi0FromK0sInvMassPt  = new TH2F*[fnCuts];
                        fHistoTrueSecondaryPi0FromEtaInvMassPt  = new TH2F*[fnCuts];
                        fHistoTrueSecondaryPi0FromLambdaInvMassPt = new TH2F*[fnCuts];
@@ -705,6 +737,22 @@ void AliAnalysisTaskGammaCalo::UserCreateOutputObjects(){
                                fHistoTruePi0PtOpenAngle                                        = new TH2F*[fnCuts];
                                fHistoTrueEtaPtOpenAngle                                        = new TH2F*[fnCuts];
                        }
+                       if (fDoMesonQA==2){
+                               fHistoTruePi0Category1                                          = new TH2F*[fnCuts];
+                               fHistoTrueEtaCategory1                                          = new TH2F*[fnCuts];                            
+                               fHistoTruePi0Category2                                          = new TH2F*[fnCuts];
+                               fHistoTrueEtaCategory2                                          = new TH2F*[fnCuts];                            
+                               fHistoTruePi0Category3                                          = new TH2F*[fnCuts];
+                               fHistoTrueEtaCategory3                                          = new TH2F*[fnCuts];                            
+                               fHistoTruePi0Category4_6                                        = new TH2F*[fnCuts];
+                               fHistoTrueEtaCategory4_6                                        = new TH2F*[fnCuts];                            
+                               fHistoTruePi0Category5                                          = new TH2F*[fnCuts];
+                               fHistoTrueEtaCategory5                                          = new TH2F*[fnCuts];                            
+                               fHistoTruePi0Category7                                          = new TH2F*[fnCuts];
+                               fHistoTrueEtaCategory7                                          = new TH2F*[fnCuts];                            
+                               fHistoTruePi0Category8                                          = new TH2F*[fnCuts];
+                               fHistoTrueEtaCategory8                                          = new TH2F*[fnCuts];                            
+                       }       
                }
     
     
@@ -920,9 +968,6 @@ void AliAnalysisTaskGammaCalo::UserCreateOutputObjects(){
                                fHistoTrueSecondaryPi0InvMassPt[iCut] = new TH2F("ESD_TrueSecondaryPi0_InvMass_Pt", "ESD_TrueSecondaryPi0_InvMass_Pt", 800,0,0.8,250,0,25);
                                fHistoTrueSecondaryPi0InvMassPt[iCut]->Sumw2();
                                fTrueList[iCut]->Add(fHistoTrueSecondaryPi0InvMassPt[iCut]);
-                               fHistoTrueSecondaryEtaInvMassPt[iCut] = new TH2F("ESD_TrueSecondaryEta_InvMass_Pt", "ESD_TrueSecondaryEta_InvMass_Pt", 800,0,0.8,250,0,25);
-                               fHistoTrueSecondaryEtaInvMassPt[iCut]->Sumw2();
-                               fTrueList[iCut]->Add(fHistoTrueSecondaryEtaInvMassPt[iCut]);
 
                                fHistoTrueSecondaryPi0FromK0sInvMassPt[iCut] = new TH2F("ESD_TrueSecondaryPi0FromK0s_InvMass_Pt","ESD_TrueSecondaryPi0FromK0s_InvMass_Pt",800,0,0.8,250,0,25);
                                fHistoTrueSecondaryPi0FromK0sInvMassPt[iCut]->Sumw2();
@@ -1006,6 +1051,37 @@ void AliAnalysisTaskGammaCalo::UserCreateOutputObjects(){
                                        SetLogBinningXTH2(fHistoTrueEtaPtOpenAngle[iCut]);
                                        fTrueList[iCut]->Add(fHistoTrueEtaPtOpenAngle[iCut]);
                                }
+                               
+                               if (fDoMesonQA == 2){
+                                       fHistoTruePi0Category1[iCut] = new TH2F("ESD_TruePi0Category1_InvMass_Pt","ESD_TruePi0Category1_InvMass_Pt",800,0,0.8,250,0,25);
+                                       fTrueList[iCut]->Add(fHistoTruePi0Category1[iCut]);
+                                       fHistoTrueEtaCategory1[iCut] = new TH2F("ESD_TrueEtaCategory1_InvMass_Pt","ESD_TrueEtaCategory1_InvMass_Pt",800,0,0.8,250,0,25);
+                                       fTrueList[iCut]->Add(fHistoTrueEtaCategory1[iCut]);                                     
+                                       fHistoTruePi0Category2[iCut] = new TH2F("ESD_TruePi0Category2_InvMass_Pt","ESD_TruePi0Category2_InvMass_Pt",800,0,0.8,250,0,25);
+                                       fTrueList[iCut]->Add(fHistoTruePi0Category2[iCut]);
+                                       fHistoTrueEtaCategory2[iCut] = new TH2F("ESD_TrueEtaCategory2_InvMass_Pt","ESD_TrueEtaCategory2_InvMass_Pt",800,0,0.8,250,0,25);
+                                       fTrueList[iCut]->Add(fHistoTrueEtaCategory2[iCut]);                                     
+                                       fHistoTruePi0Category3[iCut] = new TH2F("ESD_TruePi0Category3_InvMass_Pt","ESD_TruePi0Category3_InvMass_Pt",800,0,0.8,250,0,25);
+                                       fTrueList[iCut]->Add(fHistoTruePi0Category3[iCut]);
+                                       fHistoTrueEtaCategory3[iCut] = new TH2F("ESD_TrueEtaCategory3_InvMass_Pt","ESD_TrueEtaCategory3_InvMass_Pt",800,0,0.8,250,0,25);
+                                       fTrueList[iCut]->Add(fHistoTrueEtaCategory3[iCut]);                                     
+                                       fHistoTruePi0Category4_6[iCut] = new TH2F("ESD_TruePi0Category4_6_InvMass_Pt","ESD_TruePi0Category4_6_InvMass_Pt",800,0,0.8,250,0,25);
+                                       fTrueList[iCut]->Add(fHistoTruePi0Category4_6[iCut]);
+                                       fHistoTrueEtaCategory4_6[iCut] = new TH2F("ESD_TrueEtaCategory4_6_InvMass_Pt","ESD_TrueEtaCategory4_6_InvMass_Pt",800,0,0.8,250,0,25);
+                                       fTrueList[iCut]->Add(fHistoTrueEtaCategory4_6[iCut]);                                   
+                                       fHistoTruePi0Category5[iCut] = new TH2F("ESD_TruePi0Category5_InvMass_Pt","ESD_TruePi0Category5_InvMass_Pt",800,0,0.8,250,0,25);
+                                       fTrueList[iCut]->Add(fHistoTruePi0Category5[iCut]);
+                                       fHistoTrueEtaCategory5[iCut] = new TH2F("ESD_TrueEtaCategory5_InvMass_Pt","ESD_TrueEtaCategory5_InvMass_Pt",800,0,0.8,250,0,25);
+                                       fTrueList[iCut]->Add(fHistoTrueEtaCategory5[iCut]);                                     
+                                       fHistoTruePi0Category7[iCut] = new TH2F("ESD_TruePi0Category7_InvMass_Pt","ESD_TruePi0Category7_InvMass_Pt",800,0,0.8,250,0,25);
+                                       fTrueList[iCut]->Add(fHistoTruePi0Category7[iCut]);
+                                       fHistoTrueEtaCategory7[iCut] = new TH2F("ESD_TrueEtaCategory7_InvMass_Pt","ESD_TrueEtaCategory7_InvMass_Pt",800,0,0.8,250,0,25);
+                                       fTrueList[iCut]->Add(fHistoTrueEtaCategory7[iCut]);                                     
+                                       fHistoTruePi0Category8[iCut] = new TH2F("ESD_TruePi0Category8_InvMass_Pt","ESD_TruePi0Category8_InvMass_Pt",800,0,0.8,250,0,25);
+                                       fTrueList[iCut]->Add(fHistoTruePi0Category8[iCut]);
+                                       fHistoTrueEtaCategory8[iCut] = new TH2F("ESD_TrueEtaCategory8_InvMass_Pt","ESD_TrueEtaCategory8_InvMass_Pt",800,0,0.8,250,0,25);
+                                       fTrueList[iCut]->Add(fHistoTrueEtaCategory8[iCut]);                                     
+                               }
                        }
                }
        }  
@@ -1098,7 +1174,11 @@ void AliAnalysisTaskGammaCalo::UserExec(Option_t *)
        for(Int_t iCut = 0; iCut<fnCuts; iCut++){
                
                fiCut = iCut;
-               Int_t eventNotAccepted = ((AliConvEventCuts*)fEventCutArray->At(iCut))->IsEventAcceptedByCut(fV0Reader->GetEventCuts(),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;
@@ -1156,10 +1236,8 @@ void AliAnalysisTaskGammaCalo::UserExec(Option_t *)
                fHistoNGammaCandidates[iCut]->Fill(fClusterCandidates->GetEntries());
                fHistoNGoodESDTracksVsNGammaCanditates[iCut]->Fill(fV0Reader->GetNumberOfPrimaryTracks(),fClusterCandidates->GetEntries());
                if(fDoMesonAnalysis){ // Meson Analysis
-
                        
                        CalculatePi0Candidates(); // Combine Gammas from conversion and from calo
-
                        if(((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->DoBGCalculation()){
                                if(((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->BackgroundHandlerType() == 0){
                                        
@@ -1227,11 +1305,24 @@ void AliAnalysisTaskGammaCalo::ProcessClusters()
                }
                
                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 (fIsFromMBHeader)fHistoClusGammaPt[fiCut]->Fill(PhotonCandidate->Pt());
-               fClusterCandidates->Add(PhotonCandidate); // if no second loop is required add to events good gammas
+               if (fIsFromMBHeader && !fIsOverlappingWithOtherHeader){
+                       fHistoClusGammaPt[fiCut]->Fill(PhotonCandidate->Pt());  
+                       fClusterCandidates->Add(PhotonCandidate);
+               }
+               if (fIsFromMBHeader && fIsOverlappingWithOtherHeader) fHistoClusOverlapHeadersGammaPt[fiCut]->Fill(PhotonCandidate->Pt());
+                // if no second loop is required add to events good gammas
                
                if(fIsMC){
                        if(fInputEvent->IsA()==AliESDEvent::Class()){
@@ -1266,7 +1357,7 @@ void AliAnalysisTaskGammaCalo::ProcessTrueClusterCandidates(AliAODConversionPhot
        TruePhotonCandidate->SetCaloPhotonMCFlags(fMCStack);
        
        // True Photon
-       if(fIsFromMBHeader){
+       if(fIsFromMBHeader && !fIsOverlappingWithOtherHeader){
                if (TruePhotonCandidate->IsLargestComponentPhoton() || TruePhotonCandidate->IsLargestComponentElectron() )fHistoTrueClusGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
                        else fHistoTrueClusEMNonLeadingPt[fiCut]->Fill(TruePhotonCandidate->Pt());
                if (fDoClusterQA > 0){
@@ -1368,7 +1459,7 @@ void AliAnalysisTaskGammaCalo::ProcessTrueClusterCandidatesAOD(AliAODConversionP
        TruePhotonCandidate->SetCaloPhotonMCFlagsAOD(fInputEvent);
        
        // True Photon
-       if(fIsFromMBHeader){
+       if(fIsFromMBHeader && !fIsOverlappingWithOtherHeader){
                if (TruePhotonCandidate->IsLargestComponentPhoton() || TruePhotonCandidate->IsLargestComponentElectron() )fHistoTrueClusGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
                        else fHistoTrueClusEMNonLeadingPt[fiCut]->Fill(TruePhotonCandidate->Pt());
                if (fDoClusterQA > 0){
@@ -1819,8 +1910,12 @@ void AliAnalysisTaskGammaCalo::ProcessTrueMesonCandidates(AliAODConversionMother
        // Process True Mesons
        AliStack *MCStack = fMCEvent->Stack();
        
-       Bool_t isTruePi0 = kFALSE;
-       Bool_t isTrueEta = kFALSE;
+       Bool_t isTruePi0                                = kFALSE;
+       Bool_t isTrueEta                                = kFALSE;
+       Bool_t isSameConvertedGamma     = kFALSE;
+       Int_t convertedPhotonLabel0             = -1;
+       Int_t convertedPhotonLabel1             = -1;
+       
        Int_t gamma0MCLabel = TrueGammaCandidate0->GetCaloPhotonMCLabel(0);     // get most probable MC label
        Int_t gamma0MotherLabel = -1;
 
@@ -1831,6 +1926,7 @@ void AliAnalysisTaskGammaCalo::ProcessTrueMesonCandidates(AliAODConversionMother
                        if (TrueGammaCandidate0->IsLargestComponentPhoton()){                                                                                                           // for photons its the direct mother 
                                gamma0MotherLabel=gammaMC0->GetMother(0);
                        } else if (TrueGammaCandidate0->IsLargestComponentElectron()){                                                                                          // for electrons its either the direct mother or for conversions the grandmother
+                               convertedPhotonLabel0 = gammaMC0->GetMother(0);
                                if (TrueGammaCandidate0->IsConversion()) gamma0MotherLabel=MCStack->Particle(gammaMC0->GetMother(0))->GetMother(0);
                                else gamma0MotherLabel=gammaMC0->GetMother(0); 
                        }
@@ -1850,6 +1946,7 @@ void AliAnalysisTaskGammaCalo::ProcessTrueMesonCandidates(AliAODConversionMother
                        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
+                               convertedPhotonLabel1 = gammaMC1->GetMother(0);
                                if (TrueGammaCandidate1->IsConversion()) gamma1MotherLabel=MCStack->Particle(gammaMC1->GetMother(0))->GetMother(0);
                                else gamma1MotherLabel=gammaMC1->GetMother(0); 
                        }
@@ -1865,6 +1962,10 @@ void AliAnalysisTaskGammaCalo::ProcessTrueMesonCandidates(AliAODConversionMother
                }
        }
        
+       if (convertedPhotonLabel0 > -1 && convertedPhotonLabel1 > -1){
+               if (convertedPhotonLabel0==convertedPhotonLabel1) isSameConvertedGamma = kTRUE;
+       }
+       
        if(isTruePi0 || isTrueEta){// True Pion or Eta
                if (isTruePi0)  fHistoTruePi0InvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
                if (isTrueEta)  fHistoTrueEtaInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
@@ -1916,6 +2017,71 @@ void AliAnalysisTaskGammaCalo::ProcessTrueMesonCandidates(AliAODConversionMother
                        }       
                }
        
+               if (fDoMesonQA == 2){
+                       // category 1: 2 real photons unmerged
+                       if (TrueGammaCandidate0->IsLargestComponentPhoton() && !TrueGammaCandidate0->IsMerged() && TrueGammaCandidate1->IsLargestComponentPhoton() && !TrueGammaCandidate1->IsMerged()) {
+                               if (isTruePi0) fHistoTruePi0Category1[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
+                               if (isTrueEta) fHistoTrueEtaCategory1[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
+                       }
+                       // category 2, 3: 1 real photons unmerged,  1 electron (category 2 merged, category 3 unmerged )
+                       // -> photon 0 is unconverted
+                       if ( (TrueGammaCandidate0->IsLargestComponentPhoton() && !TrueGammaCandidate0->IsMerged()) && (TrueGammaCandidate1->IsLargestComponentElectron() && TrueGammaCandidate1->IsConversion())) {
+                               if (isTruePi0){
+                                       if (TrueGammaCandidate1->IsMergedPartConv())    fHistoTruePi0Category2[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
+                                       if (!TrueGammaCandidate1->IsMergedPartConv()){
+                                               fHistoTruePi0Category3[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
+                                       }       
+                               }
+                               if (isTrueEta){
+                                       if (TrueGammaCandidate1->IsMergedPartConv())    fHistoTrueEtaCategory2[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
+                                       if (!TrueGammaCandidate1->IsMergedPartConv())   fHistoTrueEtaCategory3[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
+                               }       
+                       }
+                       // -> photon 1 is unconverted
+                       if ( ( TrueGammaCandidate1->IsLargestComponentPhoton() && !TrueGammaCandidate1->IsMerged()) && (TrueGammaCandidate0->IsLargestComponentElectron() && TrueGammaCandidate0->IsConversion())) {
+                               if (isTruePi0){
+                                       if (TrueGammaCandidate0->IsMergedPartConv())    fHistoTruePi0Category2[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
+                                       if (!TrueGammaCandidate0->IsMergedPartConv()){
+                                               fHistoTruePi0Category3[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
+                                       }       
+                               }
+                               if (isTrueEta){
+                                       if (TrueGammaCandidate0->IsMergedPartConv())    fHistoTrueEtaCategory2[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
+                                       if (!TrueGammaCandidate0->IsMergedPartConv())   fHistoTrueEtaCategory3[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
+                               }       
+                       }
+                       
+                       // category 4 & 6, 5, 7, 8
+                       if ( (TrueGammaCandidate0->IsLargestComponentElectron() && TrueGammaCandidate0->IsConversion()) && (TrueGammaCandidate1->IsLargestComponentElectron() && TrueGammaCandidate1->IsConversion()) ){
+                               if (isTruePi0){
+                                       // category 4: both electrons are from same conversion 
+                                       if (isSameConvertedGamma && !TrueGammaCandidate0->IsMergedPartConv() && !TrueGammaCandidate1->IsMergedPartConv() ) fHistoTruePi0Category4_6[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
+                                       if (!isSameConvertedGamma ){
+                                               if (!TrueGammaCandidate0->IsMergedPartConv() && !TrueGammaCandidate1->IsMergedPartConv()){              // category 5: both electrons from different converted photons, electrons not merged
+                                                       fHistoTruePi0Category5[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
+                                               } else if (TrueGammaCandidate0->IsMergedPartConv() && TrueGammaCandidate1->IsMergedPartConv()){ // category 8: both electrons from different converted photons, both electrons merged           
+                                                       fHistoTruePi0Category8[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());  
+                                               } else {                                                                                                                                                // category 7: both electrons from different converted photons, 1 electrons not merged, 1 electron merged               
+                                                       fHistoTruePi0Category7[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
+                                               }       
+                                       }       
+                               }
+                               if (isTrueEta){
+                                       // category 4: both electrons are from same conversion 
+                                       if (isSameConvertedGamma && !TrueGammaCandidate0->IsMergedPartConv() && !TrueGammaCandidate1->IsMergedPartConv()) fHistoTrueEtaCategory4_6[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
+                                       if (!isSameConvertedGamma ){
+                                               if (!TrueGammaCandidate0->IsMergedPartConv() && !TrueGammaCandidate1->IsMergedPartConv()){              // category 5: both electrons from different converted photons, electrons not merged
+                                                       fHistoTrueEtaCategory5[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
+                                               } else if (TrueGammaCandidate0->IsMergedPartConv() && TrueGammaCandidate1->IsMergedPartConv()){ // category 8: both electrons from different converted photons, both electrons merged           
+                                                       fHistoTrueEtaCategory8[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());  
+                                               } else {                                                                                                                                                // category 7: both electrons from different converted photons, 1 electrons not merged, 1 electron merged               
+                                                       fHistoTrueEtaCategory7[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
+                                               }       
+                                       }       
+                               }
+                       }
+               }
+       
                if (fDoMesonQA > 0){
                        if (isTruePi0){
                                if ( Pi0Candidate->M() > 0.05 && Pi0Candidate->M() < 0.17){
@@ -1940,7 +2106,6 @@ void AliAnalysisTaskGammaCalo::ProcessTrueMesonCandidates(AliAODConversionMother
                                //cout << "MC input \t"<<i << "\t" <<  particle->Pt()<<"\t"<<weighted << endl;
                        }
                        if (isTruePi0) fHistoTrueSecondaryPi0InvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weightedSec);
-                       if (isTrueEta) fHistoTrueSecondaryEtaInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weightedSec);
                        if (secMotherLabel >-1){
                                if(MCStack->Particle(secMotherLabel)->GetPdgCode()==310 && isTruePi0){
                                        fHistoTrueSecondaryPi0FromK0sInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weightedSec);
@@ -1999,13 +2164,16 @@ void AliAnalysisTaskGammaCalo::ProcessTrueMesonCandidatesAOD(AliAODConversionMot
        
        // Process True Mesons
        TClonesArray *AODMCTrackArray = dynamic_cast<TClonesArray*>(fInputEvent->FindListObject(AliAODMCParticle::StdBranchName()));
-       Bool_t isTruePi0 = kFALSE;
-       Bool_t isTrueEta = kFALSE;
+       Bool_t isTruePi0                                = kFALSE;
+       Bool_t isTrueEta                                = kFALSE;
+       Bool_t isSameConvertedGamma     = kFALSE;
+       Int_t convertedPhotonLabel0             = -1;
+       Int_t convertedPhotonLabel1             = -1;
                
-       Int_t gamma0MCLabel = TrueGammaCandidate0->GetCaloPhotonMCLabel(0);     // get most probable MC label
-       Int_t gamma0MotherLabel = -1;
-               // check if 
-
+       Int_t gamma0MCLabel                     = TrueGammaCandidate0->GetCaloPhotonMCLabel(0);         // get most probable MC label
+       Int_t gamma0MotherLabel                 = -1;
+       
+       // check if 
        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));
@@ -2015,6 +2183,7 @@ void AliAnalysisTaskGammaCalo::ProcessTrueMesonCandidatesAOD(AliAODConversionMot
                                gamma0MotherLabel=gammaMC0->GetMother();
                        } else if (TrueGammaCandidate0->IsLargestComponentElectron()){                                                                                          // for electrons its either the direct mother or for conversions the grandmother
                                if (TrueGammaCandidate0->IsConversion()){
+                                       convertedPhotonLabel0 = gammaMC0->GetMother();
                                        AliAODMCParticle * gammaGrandMotherMC0 =  static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gammaMC0->GetMother()));
                                        gamma0MotherLabel=gammaGrandMotherMC0->GetMother();
                                } else gamma0MotherLabel=gammaMC0->GetMother(); 
@@ -2022,10 +2191,10 @@ void AliAnalysisTaskGammaCalo::ProcessTrueMesonCandidatesAOD(AliAODConversionMot
                }       
        }
 
-       Int_t gamma1MCLabel = TrueGammaCandidate1->GetCaloPhotonMCLabel(0);     // get most probable MC label
-       Int_t gamma1MotherLabel = -1;
-               // check if 
-
+       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
                AliAODMCParticle * gammaMC1 = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MCLabel));
@@ -2035,6 +2204,7 @@ void AliAnalysisTaskGammaCalo::ProcessTrueMesonCandidatesAOD(AliAODConversionMot
                                gamma1MotherLabel=gammaMC1->GetMother();
                        } else if (TrueGammaCandidate1->IsLargestComponentElectron()){                                                                                          // for electrons its either the direct mother or for conversions the grandmother
                                if (TrueGammaCandidate1->IsConversion()){
+                                       convertedPhotonLabel1 = gammaMC1->GetMother();
                                        AliAODMCParticle * gammaGrandMotherMC1 =  static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gammaMC1->GetMother()));
                                        gamma1MotherLabel=gammaGrandMotherMC1->GetMother();
                                } else gamma1MotherLabel=gammaMC1->GetMother(); 
@@ -2050,6 +2220,11 @@ void AliAnalysisTaskGammaCalo::ProcessTrueMesonCandidatesAOD(AliAODConversionMot
                        isTrueEta=kTRUE;
                }
        }
+
+       if (convertedPhotonLabel0 > -1 && convertedPhotonLabel1 > 1){
+               if (convertedPhotonLabel0==convertedPhotonLabel1) isSameConvertedGamma = kTRUE;
+       }
+
        
        if(isTruePi0 || isTrueEta){// True Pion or Eta
                if (isTruePi0)fHistoTruePi0InvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
@@ -2102,6 +2277,67 @@ void AliAnalysisTaskGammaCalo::ProcessTrueMesonCandidatesAOD(AliAODConversionMot
                        }       
                }
 
+               if (fDoMesonQA == 2){
+                       // category 1: 2 real photons unmerged
+                       if (TrueGammaCandidate0->IsLargestComponentPhoton() && !TrueGammaCandidate0->IsMerged() && TrueGammaCandidate1->IsLargestComponentPhoton() && !TrueGammaCandidate1->IsMerged()) {
+                               if (isTruePi0) fHistoTruePi0Category1[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
+                               if (isTrueEta) fHistoTrueEtaCategory1[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
+                       }
+                       // category 2, 3: 1 real photons unmerged,  1 electron (category 2 merged, category 3 unmerged )
+                       // -> photon 0 is unconverted
+                       if ( (TrueGammaCandidate0->IsLargestComponentPhoton() && !TrueGammaCandidate0->IsMerged()) && (TrueGammaCandidate1->IsLargestComponentElectron() && TrueGammaCandidate1->IsConversion())) {
+                               if (isTruePi0){
+                                       if (TrueGammaCandidate1->IsMergedPartConv())    fHistoTruePi0Category2[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
+                                       if (!TrueGammaCandidate1->IsMergedPartConv())   fHistoTruePi0Category3[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
+                               }
+                               if (isTrueEta){
+                                       if (TrueGammaCandidate1->IsMergedPartConv())    fHistoTrueEtaCategory2[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
+                                       if (!TrueGammaCandidate1->IsMergedPartConv())   fHistoTrueEtaCategory3[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
+                               }       
+                       }
+                       // -> photon 1 is unconverted
+                       if ( ( TrueGammaCandidate1->IsLargestComponentPhoton() && !TrueGammaCandidate1->IsMerged()) && (TrueGammaCandidate0->IsLargestComponentElectron() && TrueGammaCandidate0->IsConversion())) {
+                               if (isTruePi0){
+                                       if (TrueGammaCandidate0->IsMergedPartConv())    fHistoTruePi0Category2[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
+                                       if (!TrueGammaCandidate0->IsMergedPartConv())   fHistoTruePi0Category3[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
+                               }
+                               if (isTrueEta){
+                                       if (TrueGammaCandidate0->IsMergedPartConv())    fHistoTrueEtaCategory2[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
+                                       if (!TrueGammaCandidate0->IsMergedPartConv())   fHistoTrueEtaCategory3[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
+                               }       
+                       }
+                       
+                       // category 4 & 6, 5, 7, 8
+                       if ( (TrueGammaCandidate0->IsLargestComponentElectron() && TrueGammaCandidate0->IsConversion()) && (TrueGammaCandidate1->IsLargestComponentElectron() && TrueGammaCandidate1->IsConversion()) ){
+                               if (isTruePi0){
+                                       // category 4: both electrons are from same conversion 
+                                       if (isSameConvertedGamma && !TrueGammaCandidate0->IsMergedPartConv() && !TrueGammaCandidate1->IsMergedPartConv() ) fHistoTruePi0Category4_6[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
+                                       if (!isSameConvertedGamma ){
+                                               if (!TrueGammaCandidate0->IsMergedPartConv() && !TrueGammaCandidate1->IsMerged()){              // category 5: both electrons from different converted photons, electrons not merged
+                                                       fHistoTruePi0Category5[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
+                                               } else if (TrueGammaCandidate0->IsMergedPartConv() && TrueGammaCandidate1->IsMerged()){ // category 8: both electrons from different converted photons, both electrons merged           
+                                                       fHistoTruePi0Category8[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());  
+                                               } else {                                                                                                                                                // category 7: both electrons from different converted photons, 1 electrons not merged, 1 electron merged               
+                                                       fHistoTruePi0Category7[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
+                                               }       
+                                       }       
+                               }
+                               if (isTrueEta){
+                                       // category 4: both electrons are from same conversion 
+                                       if (isSameConvertedGamma && !TrueGammaCandidate0->IsMergedPartConv() && !TrueGammaCandidate1->IsMergedPartConv()) fHistoTrueEtaCategory4_6[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
+                                       if (!isSameConvertedGamma ){
+                                               if (!TrueGammaCandidate0->IsMergedPartConv() && !TrueGammaCandidate1->IsMergedPartConv()){              // category 5: both electrons from different converted photons, electrons not merged
+                                                       fHistoTrueEtaCategory5[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
+                                               } else if (TrueGammaCandidate0->IsMergedPartConv() && TrueGammaCandidate1->IsMergedPartConv()){ // category 8: both electrons from different converted photons, both electrons merged           
+                                                       fHistoTrueEtaCategory8[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());  
+                                               } else {                                                                                                                                                // category 7: both electrons from different converted photons, 1 electrons not merged, 1 electron merged               
+                                                       fHistoTrueEtaCategory7[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
+                                               }       
+                                       }       
+                               }
+                       }
+               }
+               
                if (fDoMesonQA > 0){
                        if (isTruePi0){
                                if ( Pi0Candidate->M() > 0.05 && Pi0Candidate->M() < 0.17){
@@ -2125,7 +2361,6 @@ void AliAnalysisTaskGammaCalo::ProcessTrueMesonCandidatesAOD(AliAODConversionMot
                                //cout << "MC input \t"<<i << "\t" <<  particle->Pt()<<"\t"<<weighted << endl;
                        }
                        if (isTruePi0) fHistoTrueSecondaryPi0InvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weightedSec);
-                       if (isTrueEta) fHistoTrueSecondaryEtaInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weightedSec);
                        if (secMotherLabel >-1){
                                if(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(secMotherLabel))->GetPdgCode()==310 && isTruePi0 ){
                                        fHistoTrueSecondaryPi0FromK0sInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weightedSec);