]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWGGA/GammaConv/AliAnalysisTaskGammaConvV1.cxx
Merge branch 'master' into TRDdev
[u/mrichter/AliRoot.git] / PWGGA / GammaConv / AliAnalysisTaskGammaConvV1.cxx
index 55457804240dc8a41a0902a3fce07d3c39cdb92d..5c8af547426fbb1ac8bdba2b1875e6f4207ac3da 100644 (file)
@@ -53,6 +53,7 @@
 #include "AliConversionAODBGHandlerRP.h"
 #include "AliAODMCParticle.h"
 #include "AliAODMCHeader.h"
+#include "AliEventplane.h"
 
 ClassImp(AliAnalysisTaskGammaConvV1)
 
@@ -71,7 +72,6 @@ AliAnalysisTaskGammaConvV1::AliAnalysisTaskGammaConvV1(): AliAnalysisTaskSE(),
    fPhotonDCAList(NULL),
    fMesonDCAList(NULL),        
    fTrueList(NULL),
-   fTrueMotherRapList(NULL),
    fMCList(NULL),
    fHeaderNameList(NULL),
    fOutputContainer(0),
@@ -82,6 +82,8 @@ AliAnalysisTaskGammaConvV1::AliAnalysisTaskGammaConvV1(): AliAnalysisTaskSE(),
    fMesonCutArray(NULL),
    fMesonCuts(NULL),
    hESDConvGammaPt(NULL),
+   hESDConvGammaR(NULL),
+   hESDConvGammaEta(NULL),
    tESDConvGammaPtDcazCat(NULL),
    fPtGamma(0),
    fDCAzPhoton(0),
@@ -94,6 +96,12 @@ AliAnalysisTaskGammaConvV1::AliAnalysisTaskGammaConvV1(): AliAnalysisTaskSE(),
    hESDMotherBackInvMassPt(NULL),
    sESDMotherBackInvMassPtZM(NULL),
    hESDMotherInvMassEalpha(NULL),
+   hESDMotherPi0PtY(NULL),
+   hESDMotherEtaPtY(NULL),
+   hESDMotherPi0PtAlpha(NULL),
+   hESDMotherEtaPtAlpha(NULL),
+   hESDMotherPi0PtOpenAngle(NULL),
+   hESDMotherEtaPtOpenAngle(NULL),
    hMCHeaders(NULL),
    hMCAllGammaPt(NULL),
    hMCDecayGammaPi0Pt(NULL),
@@ -106,12 +114,10 @@ AliAnalysisTaskGammaConvV1::AliAnalysisTaskGammaConvV1(): AliAnalysisTaskSE(),
    hMCConvGammaPt(NULL),
    hMCConvGammaR(NULL),
    hMCConvGammaEta(NULL),
-   hMCConvGammaRSPt(NULL),
-   hMCConvGammaRSR(NULL),
-   hMCConvGammaRSEta(NULL),
    hMCPi0Pt(NULL),
    hMCPi0WOWeightPt(NULL),
    hMCEtaPt(NULL),
+   hMCEtaWOWeightPt(NULL),
    hMCPi0InAccPt(NULL),
    hMCEtaInAccPt(NULL),
    hMCPi0PtY(NULL),
@@ -119,6 +125,10 @@ AliAnalysisTaskGammaConvV1::AliAnalysisTaskGammaConvV1(): AliAnalysisTaskSE(),
    hMCK0sPt(NULL),
    hMCK0sWOWeightPt(NULL),
    hMCK0sPtY(NULL),
+   hMCSecPi0PtvsSource(NULL),
+   hMCSecPi0Source(NULL),
+   hMCSecEtaPt(NULL),
+   hMCSecEtaSource(NULL),
    hESDTrueMotherInvMassPt(NULL),
    hESDTruePrimaryMotherInvMassPt(NULL),
    hESDTruePrimaryMotherW0WeightingInvMassPt(NULL),
@@ -130,14 +140,22 @@ AliAnalysisTaskGammaConvV1::AliAnalysisTaskGammaConvV1(): AliAnalysisTaskSE(),
    hESDTrueK0sWithPi0DaughterMCPt(NULL),
    hESDTrueSecondaryMotherFromEtaInvMassPt(NULL),
    hESDTrueEtaWithPi0DaughterMCPt(NULL),
+   hESDTrueSecondaryMotherFromLambdaInvMassPt(NULL),
+   hESDTrueLambdaWithPi0DaughterMCPt(NULL),
    hESDTrueBckGGInvMassPt(NULL),
    hESDTrueBckContInvMassPt(NULL),
+   hESDTruePi0PtY(NULL),
+   hESDTrueEtaPtY(NULL),
+   hESDTruePi0PtAlpha(NULL),
+   hESDTrueEtaPtAlpha(NULL),
+   hESDTruePi0PtOpenAngle(NULL),
+   hESDTrueEtaPtOpenAngle(NULL),
    hESDTrueMotherDalitzInvMassPt(NULL),
    hESDTrueConvGammaPt(NULL),
+   hESDTrueConvGammaEta(NULL),
    hESDCombinatorialPt(NULL),
    hESDTruePrimaryConvGammaPt(NULL),
    hESDTruePrimaryConvGammaESDPtMCPt(NULL),
-   hESDTruePrimaryConvGammaRSESDPtMCPt(NULL),
    hESDTrueSecondaryConvGammaPt(NULL),
    hESDTrueSecondaryConvGammaFromXFromK0sPt(NULL),
    hESDTrueSecondaryConvGammaFromXFromLambdaPt(NULL),
@@ -146,6 +164,7 @@ AliAnalysisTaskGammaConvV1::AliAnalysisTaskGammaConvV1(): AliAnalysisTaskSE(),
    hNEvents(NULL),
    hNGoodESDTracks(NULL),
    hNGammaCandidates(NULL),
+   hNGoodESDTracksVsNGammaCanditates(NULL),
    hNV0Tracks(NULL),
    hEtaShift(NULL),
    tESDMesonsInvMassPtDcazMinDcazMaxFlag(NULL),
@@ -155,6 +174,7 @@ AliAnalysisTaskGammaConvV1::AliAnalysisTaskGammaConvV1(): AliAnalysisTaskSE(),
    fDCAzGammaMax(0),
    iFlag(0),
    iMesonMCInfo(0),
+   fEventPlaneAngle(-100),
    fRandom(0),
    fnGammaCandidates(0),
    fUnsmearedPx(NULL),
@@ -168,10 +188,10 @@ AliAnalysisTaskGammaConvV1::AliAnalysisTaskGammaConvV1(): AliAnalysisTaskSE(),
    fnCuts(0),
    fiCut(0),
    fMoveParticleAccordingToVertex(kTRUE),
-   fIsHeavyIon(kFALSE),
+   fIsHeavyIon(0),
    fDoMesonAnalysis(kTRUE),
-   fDoMesonQA(kFALSE),
-   fDoPhotonQA(kFALSE),
+   fDoMesonQA(0),
+   fDoPhotonQA(0),
    fIsFromMBHeader(kTRUE),
    fIsMC(kFALSE)
 {
@@ -194,7 +214,6 @@ AliAnalysisTaskGammaConvV1::AliAnalysisTaskGammaConvV1(const char *name):
    fPhotonDCAList(NULL),
    fMesonDCAList(NULL),
    fTrueList(NULL),
-   fTrueMotherRapList(NULL),
    fMCList(NULL),
    fHeaderNameList(NULL),
    fOutputContainer(0),
@@ -205,6 +224,8 @@ AliAnalysisTaskGammaConvV1::AliAnalysisTaskGammaConvV1(const char *name):
    fMesonCutArray(NULL),
    fMesonCuts(NULL),
    hESDConvGammaPt(NULL),
+   hESDConvGammaR(NULL),
+   hESDConvGammaEta(NULL),
    tESDConvGammaPtDcazCat(NULL),
    fPtGamma(0),
    fDCAzPhoton(0),
@@ -217,6 +238,12 @@ AliAnalysisTaskGammaConvV1::AliAnalysisTaskGammaConvV1(const char *name):
    hESDMotherBackInvMassPt(NULL),
    sESDMotherBackInvMassPtZM(NULL),
    hESDMotherInvMassEalpha(NULL),
+   hESDMotherPi0PtY(NULL),
+   hESDMotherEtaPtY(NULL),
+   hESDMotherPi0PtAlpha(NULL),
+   hESDMotherEtaPtAlpha(NULL),
+   hESDMotherPi0PtOpenAngle(NULL),
+   hESDMotherEtaPtOpenAngle(NULL),
    hMCHeaders(NULL),
    hMCAllGammaPt(NULL),
    hMCDecayGammaPi0Pt(NULL),
@@ -229,12 +256,10 @@ AliAnalysisTaskGammaConvV1::AliAnalysisTaskGammaConvV1(const char *name):
    hMCConvGammaPt(NULL),
    hMCConvGammaR(NULL),
    hMCConvGammaEta(NULL),
-   hMCConvGammaRSPt(NULL),
-   hMCConvGammaRSR(NULL),
-   hMCConvGammaRSEta(NULL),
    hMCPi0Pt(NULL),
    hMCPi0WOWeightPt(NULL),
    hMCEtaPt(NULL),
+   hMCEtaWOWeightPt(NULL),
    hMCPi0InAccPt(NULL),
    hMCEtaInAccPt(NULL),
    hMCPi0PtY(NULL),
@@ -242,6 +267,10 @@ AliAnalysisTaskGammaConvV1::AliAnalysisTaskGammaConvV1(const char *name):
    hMCK0sPt(NULL),
    hMCK0sWOWeightPt(NULL),
    hMCK0sPtY(NULL),
+   hMCSecPi0PtvsSource(NULL),
+   hMCSecPi0Source(NULL),
+   hMCSecEtaPt(NULL),
+   hMCSecEtaSource(NULL),
    hESDTrueMotherInvMassPt(NULL),
    hESDTruePrimaryMotherInvMassPt(NULL),
    hESDTruePrimaryMotherW0WeightingInvMassPt(NULL),
@@ -253,14 +282,22 @@ AliAnalysisTaskGammaConvV1::AliAnalysisTaskGammaConvV1(const char *name):
    hESDTrueK0sWithPi0DaughterMCPt(NULL),
    hESDTrueSecondaryMotherFromEtaInvMassPt(NULL),
    hESDTrueEtaWithPi0DaughterMCPt(NULL),
+   hESDTrueSecondaryMotherFromLambdaInvMassPt(NULL),
+   hESDTrueLambdaWithPi0DaughterMCPt(NULL),
    hESDTrueBckGGInvMassPt(NULL),
    hESDTrueBckContInvMassPt(NULL),
+   hESDTruePi0PtY(NULL),
+   hESDTrueEtaPtY(NULL),
+   hESDTruePi0PtAlpha(NULL),
+   hESDTrueEtaPtAlpha(NULL),
+   hESDTruePi0PtOpenAngle(NULL),
+   hESDTrueEtaPtOpenAngle(NULL),
    hESDTrueMotherDalitzInvMassPt(NULL),
    hESDTrueConvGammaPt(NULL),
+   hESDTrueConvGammaEta(NULL),
    hESDCombinatorialPt(NULL),
    hESDTruePrimaryConvGammaPt(NULL),
    hESDTruePrimaryConvGammaESDPtMCPt(NULL),
-   hESDTruePrimaryConvGammaRSESDPtMCPt(NULL),
    hESDTrueSecondaryConvGammaPt(NULL),
    hESDTrueSecondaryConvGammaFromXFromK0sPt(NULL),
    hESDTrueSecondaryConvGammaFromXFromLambdaPt(NULL),
@@ -269,6 +306,7 @@ AliAnalysisTaskGammaConvV1::AliAnalysisTaskGammaConvV1(const char *name):
    hNEvents(NULL),
    hNGoodESDTracks(NULL),
    hNGammaCandidates(NULL),
+   hNGoodESDTracksVsNGammaCanditates(NULL),
    hNV0Tracks(NULL),
    hEtaShift(NULL),
    tESDMesonsInvMassPtDcazMinDcazMaxFlag(NULL),
@@ -278,6 +316,7 @@ AliAnalysisTaskGammaConvV1::AliAnalysisTaskGammaConvV1(const char *name):
    fDCAzGammaMax(0),
    iFlag(0),
    iMesonMCInfo(0),
+   fEventPlaneAngle(-100),
    fRandom(0),
    fnGammaCandidates(0),
    fUnsmearedPx(NULL),
@@ -291,10 +330,10 @@ AliAnalysisTaskGammaConvV1::AliAnalysisTaskGammaConvV1(const char *name):
    fnCuts(0),
    fiCut(0),
    fMoveParticleAccordingToVertex(kTRUE),
-   fIsHeavyIon(kFALSE),
+   fIsHeavyIon(0),
    fDoMesonAnalysis(kTRUE),
-   fDoMesonQA(kFALSE),
-   fDoPhotonQA(kFALSE),
+   fDoMesonQA(0),
+   fDoPhotonQA(0),
    fIsFromMBHeader(kTRUE),
    fIsMC(kFALSE)
 {
@@ -344,6 +383,7 @@ void AliAnalysisTaskGammaConvV1::InitBack(){
             collisionSystem == 9){
             centMin = centMin*10;
             centMax = centMax*10; 
+            if(centMax ==0 && centMax!=centMin) centMax=100;
          }
          else if(collisionSystem == 3 || collisionSystem == 6){
             centMin = centMin*5;
@@ -388,418 +428,514 @@ void AliAnalysisTaskGammaConvV1::InitBack(){
    }
 }
 //________________________________________________________________________
-void AliAnalysisTaskGammaConvV1::UserCreateOutputObjects()
-{
-
-   // Create histograms
-   if(fOutputContainer != NULL){
-      delete fOutputContainer;
-      fOutputContainer = NULL;
-   }
-   if(fOutputContainer == NULL){
-      fOutputContainer = new TList();
-      fOutputContainer->SetOwner(kTRUE);
-   }
-
-   // Array of current cut's gammas
-   fGammaCandidates = new TList();
-
-   fCutFolder = new TList*[fnCuts];
-   fESDList = new TList*[fnCuts];
-   fBackList = new TList*[fnCuts];
-   fMotherList = new TList*[fnCuts];
-   hNEvents = new TH1I*[fnCuts];
-   hNGoodESDTracks = new TH1I*[fnCuts];
-   hNGammaCandidates = new TH1I*[fnCuts];
-   hNV0Tracks = new TH1I*[fnCuts];
-   hEtaShift = new TProfile*[fnCuts];
-   hESDConvGammaPt = new TH1F*[fnCuts];
-
-   if (fDoPhotonQA){
-      fPhotonDCAList = new TList*[fnCuts];
-      tESDConvGammaPtDcazCat = new TTree*[fnCuts];
-   }
-   
-   if(fDoMesonAnalysis){
-      hESDMotherInvMassPt = new TH2F*[fnCuts];
-      hESDMotherBackInvMassPt = new TH2F*[fnCuts];
-      hESDMotherInvMassEalpha = new TH2F*[fnCuts];
-      if (fDoMesonQA){
-         fMesonDCAList = new TList*[fnCuts];
-         tESDMesonsInvMassPtDcazMinDcazMaxFlag = new TTree*[fnCuts];
-      }
-   }
-
-   for(Int_t iCut = 0; iCut<fnCuts;iCut++){
-
-      TString cutstring = ((AliConversionCuts*)fCutArray->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",cutstring.Data(),cutstringMeson.Data()));
-      fCutFolder[iCut]->SetOwner(kTRUE);
-      fOutputContainer->Add(fCutFolder[iCut]);
-      fESDList[iCut] = new TList();
-      fESDList[iCut]->SetName(Form("%s_%s ESD histograms",cutstring.Data(),cutstringMeson.Data()));
-      fESDList[iCut]->SetOwner(kTRUE);
-      fCutFolder[iCut]->Add(fESDList[iCut]);
-
-      hNEvents[iCut] = new TH1I("NEvents","NEvents",9,-0.5,8.5);
-      hNEvents[iCut]->GetXaxis()->SetBinLabel(1,"Accepted");
-      hNEvents[iCut]->GetXaxis()->SetBinLabel(2,"Centrality");
-      hNEvents[iCut]->GetXaxis()->SetBinLabel(3,"Missing MC");
-      if (((AliConversionCuts*)fCutArray->At(iCut))->IsSpecialTrigger() == 4 ){
-         TString TriggerNames = "Not Trigger: ";
-         TriggerNames = TriggerNames+ ( (AliConversionCuts*)fCutArray->At(iCut))->GetSpecialTriggerName();
-         hNEvents[iCut]->GetXaxis()->SetBinLabel(4,TriggerNames.Data());
-      } else {
-         hNEvents[iCut]->GetXaxis()->SetBinLabel(4,"Trigger");
-      }
-      hNEvents[iCut]->GetXaxis()->SetBinLabel(5,"Vertex Z");
-      hNEvents[iCut]->GetXaxis()->SetBinLabel(6,"Cont. Vertex");
-      hNEvents[iCut]->GetXaxis()->SetBinLabel(7,"Pile-Up");
-      hNEvents[iCut]->GetXaxis()->SetBinLabel(8,"no SDD");
-      hNEvents[iCut]->GetXaxis()->SetBinLabel(9,"no V0AND");
-      fESDList[iCut]->Add(hNEvents[iCut]);
-      if(fIsHeavyIon) hNGoodESDTracks[iCut] = new TH1I("GoodESDTracks","GoodESDTracks",4000,0,4000);
-      else hNGoodESDTracks[iCut] = new TH1I("GoodESDTracks","GoodESDTracks",200,0,200);
-      fESDList[iCut]->Add(hNGoodESDTracks[iCut]);
-      if(fIsHeavyIon) hNGammaCandidates[iCut] = new TH1I("GammaCandidates","GammaCandidates",100,0,100);
-      else hNGammaCandidates[iCut] = new TH1I("GammaCandidates","GammaCandidates",50,0,50);
-      fESDList[iCut]->Add(hNGammaCandidates[iCut]);
-      if(fIsHeavyIon) hNV0Tracks[iCut] = new TH1I("V0 Multiplicity","V0 Multiplicity",30000,0,30000);
-      else hNV0Tracks[iCut] = new TH1I("V0 Multiplicity","V0 Multiplicity",2000,0,2000);
-      fESDList[iCut]->Add(hNV0Tracks[iCut]);
-      hEtaShift[iCut] = new TProfile("Eta Shift","Eta Shift",1, -0.5,0.5);
-      fESDList[iCut]->Add(hEtaShift[iCut]);
-      hESDConvGammaPt[iCut] = new TH1F("ESD_ConvGamma_Pt","ESD_ConvGamma_Pt",250,0,25);
-      fESDList[iCut]->Add(hESDConvGammaPt[iCut]);
-
-      if (fDoPhotonQA){
-         fPhotonDCAList[iCut] = new TList();
-         fPhotonDCAList[iCut]->SetName(Form("%s_%s Photon DCA tree",cutstring.Data(),cutstringMeson.Data()));
-         fPhotonDCAList[iCut]->SetOwner(kTRUE);
-         fCutFolder[iCut]->Add(fPhotonDCAList[iCut]);
-            
-        tESDConvGammaPtDcazCat[iCut] = new TTree("ESD_ConvGamma_Pt_Dcaz_R_Eta","ESD_ConvGamma_Pt_Dcaz_R_Eta_Cat");   
-         tESDConvGammaPtDcazCat[iCut]->Branch("Pt",&fPtGamma,"fPtGamma/F");
-         tESDConvGammaPtDcazCat[iCut]->Branch("DcaZPhoton",&fDCAzPhoton,"fDCAzPhoton/F");
-//          tESDConvGammaPtDcazCat[iCut]->Branch("R",&fRConvPhoton,"fRConvPhoton/F");
-//          tESDConvGammaPtDcazCat[iCut]->Branch("Eta",&fEtaPhoton,"fEtaPhoton/F");
-         
-         tESDConvGammaPtDcazCat[iCut]->Branch("cat",&iCatPhoton,"iCatPhoton/b");
-         if(fIsMC){
-            tESDConvGammaPtDcazCat[iCut]->Branch("photonMCInfo",&iPhotonMCInfo,"iPhotonMCInfo/b");
-         }
-         fPhotonDCAList[iCut]->Add(tESDConvGammaPtDcazCat[iCut]);
-      }
-
-      if(fDoMesonAnalysis){
-         hESDMotherInvMassPt[iCut] = new TH2F("ESD_Mother_InvMass_Pt","ESD_Mother_InvMass_Pt",800,0,0.8,250,0,25);
-         fESDList[iCut]->Add(hESDMotherInvMassPt[iCut]);
-         hESDMotherBackInvMassPt[iCut] = new TH2F("ESD_Background_InvMass_Pt","ESD_Background_InvMass_Pt",800,0,0.8,250,0,25);
-         fESDList[iCut]->Add(hESDMotherBackInvMassPt[iCut]);
-         hESDMotherInvMassEalpha[iCut] = new TH2F("ESD_Mother_InvMass_vs_E_alpha","ESD_Mother_InvMass_vs_E_alpha",800,0,0.8,250,0,25);
-         fESDList[iCut]->Add(hESDMotherInvMassEalpha[iCut]);
-         if (fDoMesonQA){    
-            fMesonDCAList[iCut] = new TList();
-            fMesonDCAList[iCut]->SetName(Form("%s_%s Meson DCA tree",cutstring.Data(),cutstringMeson.Data()));
-            fMesonDCAList[iCut]->SetOwner(kTRUE);
-            fCutFolder[iCut]->Add(fMesonDCAList[iCut]);
-            
-            tESDMesonsInvMassPtDcazMinDcazMaxFlag[iCut] = new TTree("ESD_Mesons_InvMass_Pt_DcazMin_DcazMax_Flag","ESD_Mesons_InvMass_Pt_DcazMin_DcazMax_Flag");   
-            tESDMesonsInvMassPtDcazMinDcazMaxFlag[iCut]->Branch("InvMass",&fInvMass,"fInvMass/F");
-            tESDMesonsInvMassPtDcazMinDcazMaxFlag[iCut]->Branch("Pt",&fPt,"fPt/F");
-            tESDMesonsInvMassPtDcazMinDcazMaxFlag[iCut]->Branch("DcaZMin",&fDCAzGammaMin,"fDCAzGammaMin/F");
-            tESDMesonsInvMassPtDcazMinDcazMaxFlag[iCut]->Branch("DcaZMax",&fDCAzGammaMax,"fDCAzGammaMax/F");
-            tESDMesonsInvMassPtDcazMinDcazMaxFlag[iCut]->Branch("kind",&iFlag,"iFlag/b");
-            if(fIsMC){
-               tESDMesonsInvMassPtDcazMinDcazMaxFlag[iCut]->Branch("mesonMCInfo",&iMesonMCInfo,"iMesonMCInfo/b");
-            }
-            fMesonDCAList[iCut]->Add(tESDMesonsInvMassPtDcazMinDcazMaxFlag[iCut]);
-              
-         }
-      }
-
-
-   }
-   if(fDoMesonAnalysis){
-      InitBack(); // Init Background Handler
-   }
-
-   if(fIsMC){
-      // MC Histogramms
-      fMCList = new TList*[fnCuts];
-      // True Histogramms
-      fTrueList = new TList*[fnCuts];
-      // Selected Header List
-      fHeaderNameList = new TList*[fnCuts];
-      hMCHeaders = new TH1I*[fnCuts];
-      hMCAllGammaPt = new TH1F*[fnCuts];
-      hMCDecayGammaPi0Pt = new TH1F*[fnCuts];
-      hMCDecayGammaRhoPt = new TH1F*[fnCuts];
-      hMCDecayGammaEtaPt = new TH1F*[fnCuts];
-      hMCDecayGammaOmegaPt = new TH1F*[fnCuts];
-      hMCDecayGammaEtapPt = new TH1F*[fnCuts];
-      hMCDecayGammaPhiPt = new TH1F*[fnCuts];
-      hMCDecayGammaSigmaPt = new TH1F*[fnCuts];
-      hMCConvGammaPt = new TH1F*[fnCuts];
-      hMCConvGammaRSPt = new TH1F*[fnCuts];
-      hESDTrueConvGammaPt = new TH1F*[fnCuts];
-
-      hESDCombinatorialPt = new TH2F*[fnCuts];
-      hESDTruePrimaryConvGammaPt = new TH1F*[fnCuts];
-      hESDTruePrimaryConvGammaESDPtMCPt = new TH2F*[fnCuts];
-      hESDTruePrimaryConvGammaRSESDPtMCPt = new TH2F*[fnCuts];
-      hESDTrueSecondaryConvGammaPt = new TH1F*[fnCuts];
-      hESDTrueSecondaryConvGammaFromXFromK0sPt = new TH1F*[fnCuts];
-      hESDTrueSecondaryConvGammaFromXFromLambdaPt = new TH1F*[fnCuts];
-
-      hESDTrueDalitzPsiPairDeltaPhi= new TH2F*[fnCuts];
-      hESDTrueGammaPsiPairDeltaPhi= new TH2F*[fnCuts];
-
-      if (fDoPhotonQA){
-         hMCConvGammaR = new TH1F*[fnCuts];
-         hMCConvGammaEta = new TH1F*[fnCuts];
-         hMCConvGammaRSR = new TH1F*[fnCuts];
-         hMCConvGammaRSEta = new TH1F*[fnCuts];
-      }
-
-      if(fDoMesonAnalysis){
-         hMCPi0Pt = new TH1F*[fnCuts];
-         hMCPi0WOWeightPt = new TH1F*[fnCuts];
-         hMCEtaPt = new TH1F*[fnCuts];
-         hMCPi0InAccPt = new TH1F*[fnCuts];
-         hMCEtaInAccPt = new TH1F*[fnCuts];
-
-         hESDTrueMotherInvMassPt = new TH2F*[fnCuts];
-         hESDTruePrimaryMotherInvMassPt = new TH2F*[fnCuts];
-         hESDTruePrimaryMotherW0WeightingInvMassPt = new TH2F*[fnCuts];
-         pESDTruePrimaryMotherWeightsInvMassPt = new TProfile2D*[fnCuts];
-         hESDTrueSecondaryMotherInvMassPt = new TH2F*[fnCuts];
-         hESDTrueSecondaryMotherFromK0sInvMassPt = new TH2F*[fnCuts];
-         hESDTrueSecondaryMotherFromEtaInvMassPt = new TH2F*[fnCuts];
-         if (fDoMesonQA){
-            hMCPi0PtY = new TH2F*[fnCuts];
-            hMCEtaPtY = new TH2F*[fnCuts];
-            hMCK0sPt = new TH1F*[fnCuts];
-            hMCK0sWOWeightPt = new TH1F*[fnCuts];
-            hMCK0sPtY = new TH2F*[fnCuts];
-            hESDTruePrimaryPi0MCPtResolPt = new TH2F*[fnCuts];
-            hESDTruePrimaryEtaMCPtResolPt = new TH2F*[fnCuts];
-            hESDTrueK0sWithPi0DaughterMCPt = new TH1F*[fnCuts];
-            hESDTrueEtaWithPi0DaughterMCPt = new TH1F*[fnCuts];
-            hESDTrueBckGGInvMassPt = new TH2F*[fnCuts];
-            hESDTrueBckContInvMassPt = new TH2F*[fnCuts];
-            hESDTrueMotherDalitzInvMassPt = new TH2F*[fnCuts];
-            fTrueMotherRapList = new TList*[fnCuts];
-         }
-      }
-
-      for(Int_t iCut = 0; iCut<fnCuts;iCut++){
-         TString cutstring = ((AliConversionCuts*)fCutArray->At(iCut))->GetCutNumber();
-         TString cutstringMeson = "NoMesonCut";
-         if(fDoMesonAnalysis)cutstringMeson = ((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->GetCutNumber();
-
-         fMCList[iCut] = new TList();
-         fMCList[iCut]->SetName(Form("%s_%s MC histograms",cutstring.Data(),cutstringMeson.Data()));
-         fMCList[iCut]->SetOwner(kTRUE);
-         fCutFolder[iCut]->Add(fMCList[iCut]);
-         hMCHeaders[iCut] = new TH1I("MC_Headers","MC_Headers",20,0,20);
-         fMCList[iCut]->Add(hMCHeaders[iCut]);
-         hMCAllGammaPt[iCut] = new TH1F("MC_AllGamma_Pt","MC_AllGamma_Pt",250,0,25);
-         fMCList[iCut]->Add(hMCAllGammaPt[iCut]);
-         hMCDecayGammaPi0Pt[iCut] = new TH1F("MC_DecayGammaPi0_Pt","MC_DecayGammaPi0_Pt",250,0,25);
-         fMCList[iCut]->Add(hMCDecayGammaPi0Pt[iCut]);
-         hMCDecayGammaRhoPt[iCut] = new TH1F("MC_DecayGammaRho_Pt","MC_DecayGammaRho_Pt",250,0,25);
-         fMCList[iCut]->Add(hMCDecayGammaRhoPt[iCut]);
-         hMCDecayGammaEtaPt[iCut] = new TH1F("MC_DecayGammaEta_Pt","MC_DecayGammaEta_Pt",250,0,25);
-         fMCList[iCut]->Add(hMCDecayGammaEtaPt[iCut]);
-         hMCDecayGammaOmegaPt[iCut] = new TH1F("MC_DecayGammaOmega_Pt","MC_DecayGammaOmmega_Pt",250,0,25);
-         fMCList[iCut]->Add(hMCDecayGammaOmegaPt[iCut]);
-         hMCDecayGammaEtapPt[iCut] = new TH1F("MC_DecayGammaEtap_Pt","MC_DecayGammaEtap_Pt",250,0,25);
-         fMCList[iCut]->Add(hMCDecayGammaEtapPt[iCut]);
-         hMCDecayGammaPhiPt[iCut] = new TH1F("MC_DecayGammaPhi_Pt","MC_DecayGammaPhi_Pt",250,0,25);
-         fMCList[iCut]->Add(hMCDecayGammaPhiPt[iCut]);
-         hMCDecayGammaSigmaPt[iCut] = new TH1F("MC_DecayGammaSigma_Pt","MC_DecayGammaSigma_Pt",250,0,25);
-         fMCList[iCut]->Add(hMCDecayGammaSigmaPt[iCut]);
-         hMCConvGammaPt[iCut] = new TH1F("MC_ConvGamma_Pt","MC_ConvGamma_Pt",250,0,25);
-         fMCList[iCut]->Add(hMCConvGammaPt[iCut]);
-         hMCConvGammaRSPt[iCut] = new TH1F("MC_ConvGamma_RS_Pt","MC_ConvGamma_RS_Pt",250,0,25);
-         fMCList[iCut]->Add(hMCConvGammaRSPt[iCut]);
-
-         if (fDoPhotonQA){
-            hMCConvGammaR[iCut] = new TH1F("MC_ConvGamma_R","MC_ConvGamma_R",800,0,200);
-            fMCList[iCut]->Add(hMCConvGammaR[iCut]);
-            hMCConvGammaEta[iCut] = new TH1F("MC_ConvGamma_Eta","MC_ConvGamma_Eta",100,-4,4);
-            fMCList[iCut]->Add(hMCConvGammaEta[iCut]);
-            hMCConvGammaRSR[iCut] = new TH1F("MC_ConvGamma_RS_R","MC_ConvGamma_RS_R",800,0,200);
-            fMCList[iCut]->Add(hMCConvGammaRSR[iCut]);
-            hMCConvGammaRSEta[iCut] = new TH1F("MC_ConvGamma_RS_Eta","MC_ConvGamma_RS_Eta",100,-4,4);
-            fMCList[iCut]->Add(hMCConvGammaRSEta[iCut]);
-         }
-
-         if(fDoMesonAnalysis){
-            hMCPi0Pt[iCut] = new TH1F("MC_Pi0_Pt","MC_Pi0_Pt",250,0,25);
-            hMCPi0Pt[iCut]->Sumw2();
-            fMCList[iCut]->Add(hMCPi0Pt[iCut]);
-            hMCPi0WOWeightPt[iCut] = new TH1F("MC_Pi0_WOWeights_Pt","MC_Pi0_WOWeights_Pt",250,0,25);
-            hMCPi0WOWeightPt[iCut]->Sumw2();
-            fMCList[iCut]->Add(hMCPi0WOWeightPt[iCut]);
-            
-            hMCEtaPt[iCut] = new TH1F("MC_Eta_Pt","MC_Eta_Pt",250,0,25);
-            hMCEtaPt[iCut]->Sumw2();
-            fMCList[iCut]->Add(hMCEtaPt[iCut]);
-            hMCPi0InAccPt[iCut] = new TH1F("MC_Pi0InAcc_Pt","MC_Pi0InAcc_Pt",250,0,25);
-            hMCPi0InAccPt[iCut]->Sumw2();
-            fMCList[iCut]->Add(hMCPi0InAccPt[iCut]);
-            hMCEtaInAccPt[iCut] = new TH1F("MC_EtaInAcc_Pt","MC_EtaInAcc_Pt",250,0,25);
-            hMCEtaInAccPt[iCut]->Sumw2();
-            fMCList[iCut]->Add(hMCEtaInAccPt[iCut]);
-            if (fDoMesonQA){
-               hMCPi0PtY[iCut] = new TH2F("MC_Pi0_Pt_Y","MC_Pi0_Pt_Y",250,0,25,20,-1,1);
-               hMCPi0PtY[iCut]->Sumw2();
-               fMCList[iCut]->Add(hMCPi0PtY[iCut]);
-               hMCEtaPtY[iCut] = new TH2F("MC_Eta_Pt_Y","MC_Eta_Pt_Y",250,0,25,20,-1,1);
-               hMCEtaPtY[iCut]->Sumw2();
-               fMCList[iCut]->Add(hMCEtaPtY[iCut]);
-               hMCK0sPt[iCut] = new TH1F("MC_K0s_Pt","MC_K0s_Pt",250,0,25);
-               hMCK0sPt[iCut]->Sumw2();
-               fMCList[iCut]->Add(hMCK0sPt[iCut]);
-               hMCK0sWOWeightPt[iCut] = new TH1F("MC_K0s_WOWeights_Pt","MC_K0s_WOWeights_Pt",250,0,25);
-               hMCK0sWOWeightPt[iCut]->Sumw2();
-               fMCList[iCut]->Add(hMCK0sWOWeightPt[iCut]);
-               hMCK0sPtY[iCut] = new TH2F("MC_K0s_Pt_Y","MC_K0s_Pt_Y",250,0,25,20,-1,1);
-               hMCK0sPtY[iCut]->Sumw2();
-               fMCList[iCut]->Add(hMCK0sPtY[iCut]);
-               
-            }
-
-         }
-         fTrueList[iCut] = new TList();
-         fTrueList[iCut]->SetName(Form("%s_%s True histograms",cutstring.Data(),cutstringMeson.Data()));
-         fTrueList[iCut]->SetOwner(kTRUE);
-         fCutFolder[iCut]->Add(fTrueList[iCut]);
-
-         hESDTrueConvGammaPt[iCut] = new TH1F("ESD_TrueConvGamma_Pt","ESD_TrueConvGamma_Pt",250,0,25);
-         fTrueList[iCut]->Add(hESDTrueConvGammaPt[iCut]);
-
-         hESDCombinatorialPt[iCut] = new TH2F("ESD_TrueCombinatorial_Pt","ESD_TrueCombinatorial_Pt",250,0,25,16,-0.5,15.5);
-         hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel( 1,"Elec+Elec");
-         hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel( 2,"Elec+Pion");
-         hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel( 3,"Elec+Kaon");
-         hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel( 4,"Elec+Proton");
-         hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel( 5,"Elec+Muon");
-         hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel( 6,"Pion+Pion");
-         hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel( 7,"Pion+Kaon");
-         hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel( 8,"Pion+Proton");
-         hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel( 9,"Pion+Muon");
-         hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel(10,"Kaon+Kaon");
-         hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel(11,"Kaon+Proton");
-         hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel(12,"Kaon+Muon");
-         hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel(13,"Proton+Proton");
-         hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel(14,"Proton+Muon");
-         hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel(15,"Muon+Muon");
-         hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel(16,"Rest");
-         fTrueList[iCut]->Add(hESDCombinatorialPt[iCut]);
-         hESDTruePrimaryConvGammaPt[iCut] = new TH1F("ESD_TruePrimaryConvGamma_Pt","ESD_TruePrimaryConvGamma_Pt",250,0,25);
-         fTrueList[iCut]->Add(hESDTruePrimaryConvGammaPt[iCut]);
-         hESDTrueSecondaryConvGammaPt[iCut] = new TH1F("ESD_TrueSecondaryConvGamma_Pt","ESD_TrueSecondaryConvGamma_Pt",250,0,25);
-         fTrueList[iCut]->Add(hESDTrueSecondaryConvGammaPt[iCut]);
-
-         hESDTrueSecondaryConvGammaFromXFromK0sPt[iCut]
-            = new TH1F("ESD_TrueSecondaryConvGammaFromXFromK0s_Pt", "ESD_TrueSecondaryConvGammaFromXFromK0s_Pt",250,0,25);
-         fTrueList[iCut]->Add(hESDTrueSecondaryConvGammaFromXFromK0sPt[iCut]);
-         hESDTrueSecondaryConvGammaFromXFromLambdaPt[iCut]
-            = new TH1F("ESD_TrueSecondaryConvGammaFromXFromLambda_Pt", "ESD_TrueSecondaryConvGammaFromXFromLambda_Pt",250,0,25);
-         fTrueList[iCut]->Add(hESDTrueSecondaryConvGammaFromXFromLambdaPt[iCut]);
-
-         hESDTrueDalitzPsiPairDeltaPhi[iCut]
-            = new TH2F("ESD_TrueDalitzPsiPairDeltaPhi_Pt", "ESD_TrueDalitzPsiPairDeltaPhi_Pt",400,-2,2,400,-2,2);
-         fTrueList[iCut]->Add(hESDTrueDalitzPsiPairDeltaPhi[iCut]);
-         
-         hESDTrueGammaPsiPairDeltaPhi[iCut]
-            = new TH2F("ESD_TrueGammaPsiPairDeltaPhi_Pt", "ESD_TrueGammaPsiPairDeltaPhi_Pt",200,-2,2,400,-2,2);
-         fTrueList[iCut]->Add(hESDTrueGammaPsiPairDeltaPhi[iCut]);
-
-         
-         hESDTruePrimaryConvGammaESDPtMCPt[iCut] = new TH2F("ESD_TruePrimaryConvGammaESD_PtMCPt", "ESD_TruePrimaryConvGammaESD_PtMCPt",250,0,25,250,0,25);
-         fTrueList[iCut]->Add(hESDTruePrimaryConvGammaESDPtMCPt[iCut]);
-         hESDTruePrimaryConvGammaRSESDPtMCPt[iCut]
-            = new TH2F("ESD_TruePrimaryConvGammaESD_RS_PtMCPt", "ESD_TruePrimaryConvGammaESD_RS_PtMCPt",250,0,25,250,0,25);
-         fTrueList[iCut]->Add(hESDTruePrimaryConvGammaRSESDPtMCPt[iCut]);
-
-         if(fDoMesonAnalysis){
-            hESDTrueMotherInvMassPt[iCut] = new TH2F("ESD_TrueMother_InvMass_Pt","ESD_TrueMother_InvMass_Pt",800,0,0.8,250,0,25);
-            fTrueList[iCut]->Add(hESDTrueMotherInvMassPt[iCut]);
-            hESDTruePrimaryMotherInvMassPt[iCut]
-               = new TH2F("ESD_TruePrimaryMother_InvMass_Pt", "ESD_TruePrimaryMother_InvMass_Pt", 800,0,0.8,250,0,25);
-            hESDTruePrimaryMotherInvMassPt[iCut]->Sumw2();
-            fTrueList[iCut]->Add(hESDTruePrimaryMotherInvMassPt[iCut]);
-            hESDTruePrimaryMotherW0WeightingInvMassPt[iCut]
-               = new TH2F("ESD_TruePrimaryMotherW0Weights_InvMass_Pt", "ESD_TruePrimaryMotherW0Weights_InvMass_Pt", 800,0,0.8,250,0,25);
-            hESDTruePrimaryMotherW0WeightingInvMassPt[iCut]->Sumw2();
-            fTrueList[iCut]->Add(hESDTruePrimaryMotherW0WeightingInvMassPt[iCut]);
-            pESDTruePrimaryMotherWeightsInvMassPt[iCut]
-               = new TProfile2D("ESD_TruePrimaryMotherWeights_InvMass_Pt", "ESD_TruePrimaryMotherWeights_InvMass_Pt", 800,0,0.8,250,0,25);
-            pESDTruePrimaryMotherWeightsInvMassPt[iCut]->Sumw2();
-            fTrueList[iCut]->Add(pESDTruePrimaryMotherWeightsInvMassPt[iCut]);
-            hESDTrueSecondaryMotherInvMassPt[iCut]
-               = new TH2F("ESD_TrueSecondaryMother_InvMass_Pt", "ESD_TrueSecondaryMother_InvMass_Pt", 800,0,0.8,250,0,25);
-            hESDTrueSecondaryMotherInvMassPt[iCut]->Sumw2();
-            fTrueList[iCut]->Add(hESDTrueSecondaryMotherInvMassPt[iCut]);
-            hESDTrueSecondaryMotherFromK0sInvMassPt[iCut]
-               = new TH2F("ESD_TrueSecondaryMotherFromK0s_InvMass_Pt","ESD_TrueSecondaryMotherFromK0s_InvMass_Pt",800,0,0.8,250,0,25);
-            hESDTrueSecondaryMotherFromK0sInvMassPt[iCut]->Sumw2();
-            fTrueList[iCut]->Add(hESDTrueSecondaryMotherFromK0sInvMassPt[iCut]);
-            hESDTrueSecondaryMotherFromEtaInvMassPt[iCut]
-               = new TH2F("ESD_TrueSecondaryMotherFromEta_InvMass_Pt","ESD_TrueSecondaryMotherFromEta_InvMass_Pt",800,0,0.8,250,0,25);
-            fTrueList[iCut]->Add(hESDTrueSecondaryMotherFromEtaInvMassPt[iCut]);
-         
-            if (fDoMesonQA){
-               hESDTruePrimaryPi0MCPtResolPt[iCut] = new TH2F("ESD_TruePrimaryPi0_MCPt_ResolPt","ESD_TruePrimaryPi0_ResolPt_MCPt",500,0,25,1000,-1.,1.);
-               hESDTruePrimaryPi0MCPtResolPt[iCut]->Sumw2();
-               fTrueList[iCut]->Add(hESDTruePrimaryPi0MCPtResolPt[iCut]);
-               hESDTruePrimaryEtaMCPtResolPt[iCut]  = new TH2F("ESD_TruePrimaryEta_MCPt_ResolPt","ESD_TruePrimaryEta_ResolPt_MCPt",500,0,25,1000,-1.,1.);
-               hESDTruePrimaryEtaMCPtResolPt[iCut]->Sumw2();
-               fTrueList[iCut]->Add(hESDTruePrimaryEtaMCPtResolPt[iCut]);
-               hESDTrueBckGGInvMassPt[iCut] = new TH2F("ESD_TrueBckGG_InvMass_Pt","ESD_TrueBckGG_InvMass_Pt",800,0,0.8,250,0,25);
-               fTrueList[iCut]->Add(hESDTrueBckGGInvMassPt[iCut]);
-               hESDTrueBckContInvMassPt[iCut] = new TH2F("ESD_TrueBckCont_InvMass_Pt","ESD_TrueBckCont_InvMass_Pt",800,0,0.8,250,0,25);
-               fTrueList[iCut]->Add(hESDTrueBckContInvMassPt[iCut]);
-               hESDTrueMotherDalitzInvMassPt[iCut] = new TH2F("ESD_TrueDalitz_InvMass_Pt","ESD_TrueDalitz_InvMass_Pt",800,0,0.8,250,0,25);
-               fTrueList[iCut]->Add(hESDTrueMotherDalitzInvMassPt[iCut]);
-               hESDTrueK0sWithPi0DaughterMCPt[iCut] = new TH1F("ESD_TrueK0sWithPi0Daughter_MCPt","ESD_TrueK0sWithPi0Daughter_MCPt",250,0,25);
-               fTrueList[iCut]->Add(hESDTrueK0sWithPi0DaughterMCPt[iCut]);
-               hESDTrueEtaWithPi0DaughterMCPt[iCut] = new TH1F("ESD_TrueEtaWithPi0Daughter_MCPt","ESD_TrueEtaWithPi0Daughter_MCPt",250,0,25);
-               fTrueList[iCut]->Add(hESDTrueEtaWithPi0DaughterMCPt[iCut]);
-            }
-         }
-      }
-   }
-
-   fV0Reader=(AliV0ReaderV1*)AliAnalysisManager::GetAnalysisManager()->GetTask("V0ReaderV1");
-   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());
-
-   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(fDoMesonAnalysis){
-         if(!((AliConversionMesonCuts*)fMesonCutArray->At(iCut))) continue;
-         if(((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->GetCutHistograms()){
-            fCutFolder[iCut]->Add(((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->GetCutHistograms());
-         }
-      }
-   }
-   PostData(1, fOutputContainer);
+void AliAnalysisTaskGammaConvV1::UserCreateOutputObjects(){
+
+       // Create histograms
+       if(fOutputContainer != NULL){
+               delete fOutputContainer;
+               fOutputContainer = NULL;
+       }
+       if(fOutputContainer == NULL){
+               fOutputContainer = new TList();
+               fOutputContainer->SetOwner(kTRUE);
+       }
+
+       // Array of current cut's gammas
+       fGammaCandidates = new TList();
+
+       fCutFolder = new TList*[fnCuts];
+       fESDList = new TList*[fnCuts];
+       fBackList = new TList*[fnCuts];
+       fMotherList = new TList*[fnCuts];
+       hNEvents = new TH1I*[fnCuts];
+       hNGoodESDTracks = new TH1I*[fnCuts];
+       hNGammaCandidates = new TH1I*[fnCuts];
+       hNGoodESDTracksVsNGammaCanditates = new TH2F*[fnCuts];
+       hNV0Tracks = new TH1I*[fnCuts];
+       hEtaShift = new TProfile*[fnCuts];
+       hESDConvGammaPt = new TH1F*[fnCuts];
+
+       if (fDoPhotonQA == 2){
+               fPhotonDCAList = new TList*[fnCuts];
+               tESDConvGammaPtDcazCat = new TTree*[fnCuts];
+       }
+       if (fDoPhotonQA > 0){
+               hESDConvGammaR = new TH1F*[fnCuts];
+               hESDConvGammaEta = new TH1F*[fnCuts];
+       } 
+       
+       if(fDoMesonAnalysis){
+               hESDMotherInvMassPt = new TH2F*[fnCuts];
+               hESDMotherBackInvMassPt = new TH2F*[fnCuts];
+               hESDMotherInvMassEalpha = new TH2F*[fnCuts];
+               if (fDoMesonQA == 2){
+                       fMesonDCAList = new TList*[fnCuts];
+                       tESDMesonsInvMassPtDcazMinDcazMaxFlag = new TTree*[fnCuts];
+               }
+               if (fDoMesonQA > 0){
+                       hESDMotherPi0PtY =  new TH2F*[fnCuts];
+                       hESDMotherEtaPtY =  new TH2F*[fnCuts];
+                       hESDMotherPi0PtAlpha =  new TH2F*[fnCuts];
+                       hESDMotherEtaPtAlpha =  new TH2F*[fnCuts];
+                       hESDMotherPi0PtOpenAngle =  new TH2F*[fnCuts];
+                       hESDMotherEtaPtOpenAngle =  new TH2F*[fnCuts];
+               }   
+       }
+
+       for(Int_t iCut = 0; iCut<fnCuts;iCut++){
+
+               TString cutstring = ((AliConversionCuts*)fCutArray->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",cutstring.Data(),cutstringMeson.Data()));
+               fCutFolder[iCut]->SetOwner(kTRUE);
+               fOutputContainer->Add(fCutFolder[iCut]);
+               fESDList[iCut] = new TList();
+               fESDList[iCut]->SetName(Form("%s_%s ESD histograms",cutstring.Data(),cutstringMeson.Data()));
+               fESDList[iCut]->SetOwner(kTRUE);
+               fCutFolder[iCut]->Add(fESDList[iCut]);
+
+               hNEvents[iCut] = new TH1I("NEvents","NEvents",9,-0.5,8.5);
+               hNEvents[iCut]->GetXaxis()->SetBinLabel(1,"Accepted");
+               hNEvents[iCut]->GetXaxis()->SetBinLabel(2,"Centrality");
+               hNEvents[iCut]->GetXaxis()->SetBinLabel(3,"Missing MC");
+               if (((AliConversionCuts*)fCutArray->At(iCut))->IsSpecialTrigger() == 4 ){
+                       TString TriggerNames = "Not Trigger: ";
+                       TriggerNames = TriggerNames+ ( (AliConversionCuts*)fCutArray->At(iCut))->GetSpecialTriggerName();
+                       hNEvents[iCut]->GetXaxis()->SetBinLabel(4,TriggerNames.Data());
+               } else {
+                       hNEvents[iCut]->GetXaxis()->SetBinLabel(4,"Trigger");
+               }
+               hNEvents[iCut]->GetXaxis()->SetBinLabel(5,"Vertex Z");
+               hNEvents[iCut]->GetXaxis()->SetBinLabel(6,"Cont. Vertex");
+               hNEvents[iCut]->GetXaxis()->SetBinLabel(7,"Pile-Up");
+               hNEvents[iCut]->GetXaxis()->SetBinLabel(8,"no SDD");
+               hNEvents[iCut]->GetXaxis()->SetBinLabel(9,"no V0AND");
+               fESDList[iCut]->Add(hNEvents[iCut]);
+               
+               if(fIsHeavyIon == 1) hNGoodESDTracks[iCut] = new TH1I("GoodESDTracks","GoodESDTracks",4000,0,4000);
+               else if(fIsHeavyIon == 2) hNGoodESDTracks[iCut] = new TH1I("GoodESDTracks","GoodESDTracks",400,0,400);
+               else hNGoodESDTracks[iCut] = new TH1I("GoodESDTracks","GoodESDTracks",200,0,200);
+               fESDList[iCut]->Add(hNGoodESDTracks[iCut]);
+               if(fIsHeavyIon == 1) hNGammaCandidates[iCut] = new TH1I("GammaCandidates","GammaCandidates",100,0,100);
+               else if(fIsHeavyIon == 2) hNGammaCandidates[iCut] = new TH1I("GammaCandidates","GammaCandidates",50,0,50);
+               else hNGammaCandidates[iCut] = new TH1I("GammaCandidates","GammaCandidates",50,0,50);
+               fESDList[iCut]->Add(hNGammaCandidates[iCut]);
+               if(fIsHeavyIon == 1) hNGoodESDTracksVsNGammaCanditates[iCut] = new TH2F("GoodESDTracksVsGammaCandidates","GoodESDTracksVsGammaCandidates",4000,0,4000,100,0,100);
+               else if(fIsHeavyIon == 2) hNGoodESDTracksVsNGammaCanditates[iCut] = new TH2F("GoodESDTracksVsGammaCandidates","GoodESDTracksVsGammaCandidates",400,0,400,50,0,50);
+               else hNGoodESDTracksVsNGammaCanditates[iCut] = new TH2F("GoodESDTracksVsGammaCandidates","GoodESDTracksVsGammaCandidates",200,0,200,50,0,50);
+               fESDList[iCut]->Add(hNGoodESDTracksVsNGammaCanditates[iCut]);
+
+               
+               if(fIsHeavyIon == 1) hNV0Tracks[iCut] = new TH1I("V0 Multiplicity","V0 Multiplicity",30000,0,30000);
+               else if(fIsHeavyIon == 2) hNV0Tracks[iCut] = new TH1I("V0 Multiplicity","V0 Multiplicity",2500,0,2500);
+               else hNV0Tracks[iCut] = new TH1I("V0 Multiplicity","V0 Multiplicity",1500,0,1500);
+               fESDList[iCut]->Add(hNV0Tracks[iCut]);
+               hEtaShift[iCut] = new TProfile("Eta Shift","Eta Shift",1, -0.5,0.5);
+               fESDList[iCut]->Add(hEtaShift[iCut]);
+               hESDConvGammaPt[iCut] = new TH1F("ESD_ConvGamma_Pt","ESD_ConvGamma_Pt",250,0,25);
+               fESDList[iCut]->Add(hESDConvGammaPt[iCut]);
+
+               if (fDoPhotonQA == 2){
+                       fPhotonDCAList[iCut] = new TList();
+                       fPhotonDCAList[iCut]->SetName(Form("%s_%s Photon DCA tree",cutstring.Data(),cutstringMeson.Data()));
+                       fPhotonDCAList[iCut]->SetOwner(kTRUE);
+                       fCutFolder[iCut]->Add(fPhotonDCAList[iCut]);
+                               
+                       tESDConvGammaPtDcazCat[iCut] = new TTree("ESD_ConvGamma_Pt_Dcaz_R_Eta","ESD_ConvGamma_Pt_Dcaz_R_Eta_Cat");   
+                       tESDConvGammaPtDcazCat[iCut]->Branch("Pt",&fPtGamma,"fPtGamma/F");
+                       tESDConvGammaPtDcazCat[iCut]->Branch("DcaZPhoton",&fDCAzPhoton,"fDCAzPhoton/F");
+       //          tESDConvGammaPtDcazCat[iCut]->Branch("R",&fRConvPhoton,"fRConvPhoton/F");
+       //          tESDConvGammaPtDcazCat[iCut]->Branch("Eta",&fEtaPhoton,"fEtaPhoton/F");
+                       
+                       tESDConvGammaPtDcazCat[iCut]->Branch("cat",&iCatPhoton,"iCatPhoton/b");
+                       if(fIsMC){
+                               tESDConvGammaPtDcazCat[iCut]->Branch("photonMCInfo",&iPhotonMCInfo,"iPhotonMCInfo/b");
+                       }
+                       fPhotonDCAList[iCut]->Add(tESDConvGammaPtDcazCat[iCut]);
+               }
+
+               if (fDoPhotonQA > 0){
+                       hESDConvGammaR[iCut] = new TH1F("ESD_ConvGamma_R","ESD_ConvGamma_R",800,0,200);
+                       fESDList[iCut]->Add(hESDConvGammaR[iCut]);
+                       hESDConvGammaEta[iCut] = new TH1F("ESD_ConvGamma_Eta","ESD_ConvGamma_Eta",2000,-2,2);
+                       fESDList[iCut]->Add(hESDConvGammaEta[iCut]);
+               }
+               
+               if(fDoMesonAnalysis){
+                       hESDMotherInvMassPt[iCut] = new TH2F("ESD_Mother_InvMass_Pt","ESD_Mother_InvMass_Pt",800,0,0.8,250,0,25);
+                       fESDList[iCut]->Add(hESDMotherInvMassPt[iCut]);
+                       hESDMotherBackInvMassPt[iCut] = new TH2F("ESD_Background_InvMass_Pt","ESD_Background_InvMass_Pt",800,0,0.8,250,0,25);
+                       fESDList[iCut]->Add(hESDMotherBackInvMassPt[iCut]);
+                       hESDMotherInvMassEalpha[iCut] = new TH2F("ESD_Mother_InvMass_vs_E_alpha","ESD_Mother_InvMass_vs_E_alpha",800,0,0.8,250,0,25);
+                       fESDList[iCut]->Add(hESDMotherInvMassEalpha[iCut]);
+                       if (fDoMesonQA == 2){    
+                               fMesonDCAList[iCut] = new TList();
+                               fMesonDCAList[iCut]->SetName(Form("%s_%s Meson DCA tree",cutstring.Data(),cutstringMeson.Data()));
+                               fMesonDCAList[iCut]->SetOwner(kTRUE);
+                               fCutFolder[iCut]->Add(fMesonDCAList[iCut]);
+                               
+                               tESDMesonsInvMassPtDcazMinDcazMaxFlag[iCut] = new TTree("ESD_Mesons_InvMass_Pt_DcazMin_DcazMax_Flag","ESD_Mesons_InvMass_Pt_DcazMin_DcazMax_Flag");   
+                               tESDMesonsInvMassPtDcazMinDcazMaxFlag[iCut]->Branch("InvMass",&fInvMass,"fInvMass/F");
+                               tESDMesonsInvMassPtDcazMinDcazMaxFlag[iCut]->Branch("Pt",&fPt,"fPt/F");
+                               tESDMesonsInvMassPtDcazMinDcazMaxFlag[iCut]->Branch("DcaZMin",&fDCAzGammaMin,"fDCAzGammaMin/F");
+                               tESDMesonsInvMassPtDcazMinDcazMaxFlag[iCut]->Branch("DcaZMax",&fDCAzGammaMax,"fDCAzGammaMax/F");
+                               tESDMesonsInvMassPtDcazMinDcazMaxFlag[iCut]->Branch("kind",&iFlag,"iFlag/b");
+                               if(fIsMC){
+                               tESDMesonsInvMassPtDcazMinDcazMaxFlag[iCut]->Branch("mesonMCInfo",&iMesonMCInfo,"iMesonMCInfo/b");
+                               }
+                               fMesonDCAList[iCut]->Add(tESDMesonsInvMassPtDcazMinDcazMaxFlag[iCut]);
+                               
+                       }
+                       if (fDoMesonQA > 0 ){
+                               hESDMotherPi0PtY[iCut] = new TH2F("ESD_MotherPi0_Pt_Y","ESD_MotherPi0_Pt_Y",150,0.03,15.,150,-1.5,1.5);            
+                               SetLogBinningXTH2(hESDMotherPi0PtY[iCut]);
+                               fESDList[iCut]->Add(hESDMotherPi0PtY[iCut]);
+                               hESDMotherEtaPtY[iCut] = new TH2F("ESD_MotherEta_Pt_Y","ESD_MotherEta_Pt_Y",150,0.03,15.,150,-1.5,1.5);
+                               SetLogBinningXTH2(hESDMotherEtaPtY[iCut]);
+                               fESDList[iCut]->Add(hESDMotherEtaPtY[iCut]);
+                               hESDMotherPi0PtAlpha[iCut] = new TH2F("ESD_MotherPi0_Pt_Alpha","ESD_MotherPi0_Pt_Alpha",150,0.03,15.,100,0,1);            
+                               SetLogBinningXTH2(hESDMotherPi0PtAlpha[iCut]);
+                               fESDList[iCut]->Add(hESDMotherPi0PtAlpha[iCut]);
+                               hESDMotherEtaPtAlpha[iCut] = new TH2F("ESD_MotherEta_Pt_Alpha","ESD_MotherEta_Pt_Alpha",150,0.03,15.,100,0,1);
+                               SetLogBinningXTH2(hESDMotherEtaPtAlpha[iCut]);
+                               fESDList[iCut]->Add(hESDMotherEtaPtAlpha[iCut]);
+                               hESDMotherPi0PtOpenAngle[iCut] = new TH2F("ESD_MotherPi0_Pt_OpenAngle","ESD_MotherPi0_Pt_OpenAngle",150,0.03,15.,200,0,2*TMath::Pi());            
+                               SetLogBinningXTH2(hESDMotherPi0PtOpenAngle[iCut]);
+                               fESDList[iCut]->Add(hESDMotherPi0PtOpenAngle[iCut]);
+                               hESDMotherEtaPtOpenAngle[iCut] = new TH2F("ESD_MotherEta_Pt_OpenAngle","ESD_MotherEta_Pt_OpenAngle",150,0.03,15.,200,0,2*TMath::Pi());            
+                               SetLogBinningXTH2(hESDMotherEtaPtOpenAngle[iCut]);
+                               fESDList[iCut]->Add(hESDMotherEtaPtOpenAngle[iCut]);
+                       }
+                       
+                               
+               }
+
+
+       }
+       if(fDoMesonAnalysis){
+               InitBack(); // Init Background Handler
+       }
+
+       if(fIsMC){
+               // MC Histogramms
+               fMCList = new TList*[fnCuts];
+               // True Histogramms
+               fTrueList = new TList*[fnCuts];
+               // Selected Header List
+               fHeaderNameList = new TList*[fnCuts];
+               hMCHeaders = new TH1I*[fnCuts];
+               hMCAllGammaPt = new TH1F*[fnCuts];
+               hMCDecayGammaPi0Pt = new TH1F*[fnCuts];
+               hMCDecayGammaRhoPt = new TH1F*[fnCuts];
+               hMCDecayGammaEtaPt = new TH1F*[fnCuts];
+               hMCDecayGammaOmegaPt = new TH1F*[fnCuts];
+               hMCDecayGammaEtapPt = new TH1F*[fnCuts];
+               hMCDecayGammaPhiPt = new TH1F*[fnCuts];
+               hMCDecayGammaSigmaPt = new TH1F*[fnCuts];
+               hMCConvGammaPt = new TH1F*[fnCuts];
+               hESDTrueConvGammaPt = new TH1F*[fnCuts];
+
+               hESDCombinatorialPt = new TH2F*[fnCuts];
+               hESDTruePrimaryConvGammaPt = new TH1F*[fnCuts];
+               hESDTruePrimaryConvGammaESDPtMCPt = new TH2F*[fnCuts];
+               hESDTrueSecondaryConvGammaPt = new TH1F*[fnCuts];
+               hESDTrueSecondaryConvGammaFromXFromK0sPt = new TH1F*[fnCuts];
+               hESDTrueSecondaryConvGammaFromXFromLambdaPt = new TH1F*[fnCuts];
+
+               hESDTrueDalitzPsiPairDeltaPhi= new TH2F*[fnCuts];
+               hESDTrueGammaPsiPairDeltaPhi= new TH2F*[fnCuts];
+
+               if (fDoPhotonQA > 0){
+                       hMCConvGammaR = new TH1F*[fnCuts];
+                       hMCConvGammaEta = new TH1F*[fnCuts];
+               hESDTrueConvGammaEta = new TH1F*[fnCuts];
+               }
+
+               if(fDoMesonAnalysis){
+                       hMCPi0Pt = new TH1F*[fnCuts];
+                       hMCPi0WOWeightPt = new TH1F*[fnCuts];
+                       hMCEtaPt = new TH1F*[fnCuts];
+                       hMCEtaWOWeightPt = new TH1F*[fnCuts];
+                       hMCPi0InAccPt = new TH1F*[fnCuts];
+                       hMCEtaInAccPt = new TH1F*[fnCuts];
+
+                       hESDTrueMotherInvMassPt = new TH2F*[fnCuts];
+                       hESDTruePrimaryMotherInvMassPt = new TH2F*[fnCuts];
+                       hESDTruePrimaryMotherW0WeightingInvMassPt = new TH2F*[fnCuts];
+                       pESDTruePrimaryMotherWeightsInvMassPt = new TProfile2D*[fnCuts];
+                       hESDTrueSecondaryMotherInvMassPt = new TH2F*[fnCuts];
+                       hESDTrueSecondaryMotherFromK0sInvMassPt = new TH2F*[fnCuts];
+                       hESDTrueSecondaryMotherFromEtaInvMassPt = new TH2F*[fnCuts];
+                       hESDTrueSecondaryMotherFromLambdaInvMassPt = new TH2F*[fnCuts];
+                       hESDTrueMotherDalitzInvMassPt = new TH2F*[fnCuts];
+                       if (fDoMesonQA > 0){
+                               hMCPi0PtY = new TH2F*[fnCuts];
+                               hMCEtaPtY = new TH2F*[fnCuts];
+                               hMCK0sPt = new TH1F*[fnCuts];
+                               hMCK0sWOWeightPt = new TH1F*[fnCuts];
+                               hMCK0sPtY = new TH2F*[fnCuts];
+                               hMCSecPi0PtvsSource= new TH2F*[fnCuts];
+                               hMCSecPi0Source = new TH1F*[fnCuts];
+                               hMCSecEtaPt = new TH1F*[fnCuts];
+                               hMCSecEtaSource = new TH1F*[fnCuts];
+                               hESDTruePrimaryPi0MCPtResolPt = new TH2F*[fnCuts];
+                               hESDTruePrimaryEtaMCPtResolPt = new TH2F*[fnCuts];
+                               hESDTrueK0sWithPi0DaughterMCPt = new TH1F*[fnCuts];
+                               hESDTrueEtaWithPi0DaughterMCPt = new TH1F*[fnCuts];
+                               hESDTrueLambdaWithPi0DaughterMCPt = new TH1F*[fnCuts];
+                               hESDTrueBckGGInvMassPt = new TH2F*[fnCuts];
+                               hESDTrueBckContInvMassPt = new TH2F*[fnCuts];
+                               hESDTruePi0PtY = new TH2F*[fnCuts];
+                               hESDTrueEtaPtY = new TH2F*[fnCuts];
+                               hESDTruePi0PtAlpha = new TH2F*[fnCuts];
+                               hESDTrueEtaPtAlpha = new TH2F*[fnCuts];
+                               hESDTruePi0PtOpenAngle = new TH2F*[fnCuts];
+                               hESDTrueEtaPtOpenAngle = new TH2F*[fnCuts];
+                       }
+               }
+
+               for(Int_t iCut = 0; iCut<fnCuts;iCut++){
+                       TString cutstring = ((AliConversionCuts*)fCutArray->At(iCut))->GetCutNumber();
+                       TString cutstringMeson = "NoMesonCut";
+                       if(fDoMesonAnalysis)cutstringMeson = ((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->GetCutNumber();
+
+                       fMCList[iCut] = new TList();
+                       fMCList[iCut]->SetName(Form("%s_%s MC histograms",cutstring.Data(),cutstringMeson.Data()));
+                       fMCList[iCut]->SetOwner(kTRUE);
+                       fCutFolder[iCut]->Add(fMCList[iCut]);
+                       hMCHeaders[iCut] = new TH1I("MC_Headers","MC_Headers",20,0,20);
+                       fMCList[iCut]->Add(hMCHeaders[iCut]);
+                       hMCAllGammaPt[iCut] = new TH1F("MC_AllGamma_Pt","MC_AllGamma_Pt",250,0,25);
+                       fMCList[iCut]->Add(hMCAllGammaPt[iCut]);
+                       hMCDecayGammaPi0Pt[iCut] = new TH1F("MC_DecayGammaPi0_Pt","MC_DecayGammaPi0_Pt",250,0,25);
+                       fMCList[iCut]->Add(hMCDecayGammaPi0Pt[iCut]);
+                       hMCDecayGammaRhoPt[iCut] = new TH1F("MC_DecayGammaRho_Pt","MC_DecayGammaRho_Pt",250,0,25);
+                       fMCList[iCut]->Add(hMCDecayGammaRhoPt[iCut]);
+                       hMCDecayGammaEtaPt[iCut] = new TH1F("MC_DecayGammaEta_Pt","MC_DecayGammaEta_Pt",250,0,25);
+                       fMCList[iCut]->Add(hMCDecayGammaEtaPt[iCut]);
+                       hMCDecayGammaOmegaPt[iCut] = new TH1F("MC_DecayGammaOmega_Pt","MC_DecayGammaOmmega_Pt",250,0,25);
+                       fMCList[iCut]->Add(hMCDecayGammaOmegaPt[iCut]);
+                       hMCDecayGammaEtapPt[iCut] = new TH1F("MC_DecayGammaEtap_Pt","MC_DecayGammaEtap_Pt",250,0,25);
+                       fMCList[iCut]->Add(hMCDecayGammaEtapPt[iCut]);
+                       hMCDecayGammaPhiPt[iCut] = new TH1F("MC_DecayGammaPhi_Pt","MC_DecayGammaPhi_Pt",250,0,25);
+                       fMCList[iCut]->Add(hMCDecayGammaPhiPt[iCut]);
+                       hMCDecayGammaSigmaPt[iCut] = new TH1F("MC_DecayGammaSigma_Pt","MC_DecayGammaSigma_Pt",250,0,25);
+                       fMCList[iCut]->Add(hMCDecayGammaSigmaPt[iCut]);
+                       hMCConvGammaPt[iCut] = new TH1F("MC_ConvGamma_Pt","MC_ConvGamma_Pt",250,0,25);
+                       fMCList[iCut]->Add(hMCConvGammaPt[iCut]);
+               
+                       if (fDoPhotonQA > 0){
+                               hMCConvGammaR[iCut] = new TH1F("MC_ConvGamma_R","MC_ConvGamma_R",800,0,200);
+                               fMCList[iCut]->Add(hMCConvGammaR[iCut]);
+                               hMCConvGammaEta[iCut] = new TH1F("MC_ConvGamma_Eta","MC_ConvGamma_Eta",2000,-2,2);
+                               fMCList[iCut]->Add(hMCConvGammaEta[iCut]);
+                       }
+
+                       if(fDoMesonAnalysis){
+                               hMCPi0Pt[iCut] = new TH1F("MC_Pi0_Pt","MC_Pi0_Pt",250,0,25);
+                               hMCPi0Pt[iCut]->Sumw2();
+                               fMCList[iCut]->Add(hMCPi0Pt[iCut]);
+                               hMCPi0WOWeightPt[iCut] = new TH1F("MC_Pi0_WOWeights_Pt","MC_Pi0_WOWeights_Pt",250,0,25);
+                               hMCPi0WOWeightPt[iCut]->Sumw2();
+                               fMCList[iCut]->Add(hMCPi0WOWeightPt[iCut]);
+                               
+                               hMCEtaPt[iCut] = new TH1F("MC_Eta_Pt","MC_Eta_Pt",250,0,25);
+                               hMCEtaPt[iCut]->Sumw2();
+                               fMCList[iCut]->Add(hMCEtaPt[iCut]);
+                               hMCEtaWOWeightPt[iCut] = new TH1F("MC_Eta_WOWeights_Pt","MC_Eta_WOWeights_Pt",250,0,25);
+                               hMCEtaWOWeightPt[iCut]->Sumw2();
+                               fMCList[iCut]->Add(hMCEtaWOWeightPt[iCut]);
+                               hMCPi0InAccPt[iCut] = new TH1F("MC_Pi0InAcc_Pt","MC_Pi0InAcc_Pt",250,0,25);
+                               hMCPi0InAccPt[iCut]->Sumw2();
+                               fMCList[iCut]->Add(hMCPi0InAccPt[iCut]);
+                               hMCEtaInAccPt[iCut] = new TH1F("MC_EtaInAcc_Pt","MC_EtaInAcc_Pt",250,0,25);
+                               hMCEtaInAccPt[iCut]->Sumw2();
+                               fMCList[iCut]->Add(hMCEtaInAccPt[iCut]);
+                               if (fDoMesonQA > 0){
+                                       hMCPi0PtY[iCut] = new TH2F("MC_Pi0_Pt_Y","MC_Pi0_Pt_Y",150,0.03,15.,150,-1.5,1.5);
+                                       hMCPi0PtY[iCut]->Sumw2();
+                                       SetLogBinningXTH2(hMCPi0PtY[iCut]);
+                                       fMCList[iCut]->Add(hMCPi0PtY[iCut]);
+                                       hMCEtaPtY[iCut] = new TH2F("MC_Eta_Pt_Y","MC_Eta_Pt_Y",150,0.03,15.,150,-1.5,1.5);
+                                       hMCEtaPtY[iCut]->Sumw2();
+                                       SetLogBinningXTH2(hMCEtaPtY[iCut]);
+                                       fMCList[iCut]->Add(hMCEtaPtY[iCut]);
+                                       hMCK0sPt[iCut] = new TH1F("MC_K0s_Pt","MC_K0s_Pt",150,0,15);
+                                       hMCK0sPt[iCut]->Sumw2();
+                                       fMCList[iCut]->Add(hMCK0sPt[iCut]);
+                                       hMCK0sWOWeightPt[iCut] = new TH1F("MC_K0s_WOWeights_Pt","MC_K0s_WOWeights_Pt",150,0,15);
+                                       hMCK0sWOWeightPt[iCut]->Sumw2();
+                                       fMCList[iCut]->Add(hMCK0sWOWeightPt[iCut]);
+                                       hMCK0sPtY[iCut] = new TH2F("MC_K0s_Pt_Y","MC_K0s_Pt_Y",150,0.03,15.,150,-1.5,1.5);
+                                       hMCK0sPtY[iCut]->Sumw2();
+                                       SetLogBinningXTH2(hMCK0sPtY[iCut]);
+                                       fMCList[iCut]->Add(hMCK0sPtY[iCut]);
+                                       
+                                       hMCSecPi0Source[iCut] = new TH1F("MC_SecPi0_Source","MC_SecPi0_Source",5000,0.,5000);
+                                       fMCList[iCut]->Add(hMCSecPi0Source[iCut]);
+                                       hMCSecEtaSource[iCut] = new TH1F("MC_SecEta_Source","MC_SecEta_Source",5000,0,5000);
+                                       fMCList[iCut]->Add(hMCSecEtaSource[iCut]);
+                                       hMCSecPi0PtvsSource[iCut] = new TH2F("MC_SecPi0_Pt_Source","MC_SecPi0_Pt_Source",250,0.0,25.,16,-0.5,15.5);
+                                       hMCSecPi0PtvsSource[iCut]->Sumw2();
+                                       fMCList[iCut]->Add(hMCSecPi0PtvsSource[iCut]);
+                                       hMCSecEtaPt[iCut] = new TH1F("MC_SecEta_Pt","MC_SecEta_Pt",250,0,25);
+                                       hMCSecEtaPt[iCut]->Sumw2();
+                                       fMCList[iCut]->Add(hMCSecEtaPt[iCut]);
+                               }
+
+                       }
+                       fTrueList[iCut] = new TList();
+                       fTrueList[iCut]->SetName(Form("%s_%s True histograms",cutstring.Data(),cutstringMeson.Data()));
+                       fTrueList[iCut]->SetOwner(kTRUE);
+                       fCutFolder[iCut]->Add(fTrueList[iCut]);
+
+                       hESDTrueConvGammaPt[iCut] = new TH1F("ESD_TrueConvGamma_Pt","ESD_TrueConvGamma_Pt",250,0,25);
+                       fTrueList[iCut]->Add(hESDTrueConvGammaPt[iCut]);
+
+                       hESDCombinatorialPt[iCut] = new TH2F("ESD_TrueCombinatorial_Pt","ESD_TrueCombinatorial_Pt",250,0,25,16,-0.5,15.5);
+                       hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel( 1,"Elec+Elec");
+                       hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel( 2,"Elec+Pion");
+                       hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel( 3,"Elec+Kaon");
+                       hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel( 4,"Elec+Proton");
+                       hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel( 5,"Elec+Muon");
+                       hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel( 6,"Pion+Pion");
+                       hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel( 7,"Pion+Kaon");
+                       hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel( 8,"Pion+Proton");
+                       hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel( 9,"Pion+Muon");
+                       hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel(10,"Kaon+Kaon");
+                       hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel(11,"Kaon+Proton");
+                       hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel(12,"Kaon+Muon");
+                       hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel(13,"Proton+Proton");
+                       hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel(14,"Proton+Muon");
+                       hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel(15,"Muon+Muon");
+                       hESDCombinatorialPt[iCut]->GetYaxis()->SetBinLabel(16,"Rest");
+                       fTrueList[iCut]->Add(hESDCombinatorialPt[iCut]);
+                       hESDTruePrimaryConvGammaPt[iCut] = new TH1F("ESD_TruePrimaryConvGamma_Pt","ESD_TruePrimaryConvGamma_Pt",250,0,25);
+                       fTrueList[iCut]->Add(hESDTruePrimaryConvGammaPt[iCut]);
+                       hESDTrueSecondaryConvGammaPt[iCut] = new TH1F("ESD_TrueSecondaryConvGamma_Pt","ESD_TrueSecondaryConvGamma_Pt",250,0,25);
+                       fTrueList[iCut]->Add(hESDTrueSecondaryConvGammaPt[iCut]);
+
+                       hESDTrueSecondaryConvGammaFromXFromK0sPt[iCut]
+                               = new TH1F("ESD_TrueSecondaryConvGammaFromXFromK0s_Pt", "ESD_TrueSecondaryConvGammaFromXFromK0s_Pt",250,0,25);
+                       fTrueList[iCut]->Add(hESDTrueSecondaryConvGammaFromXFromK0sPt[iCut]);
+                       hESDTrueSecondaryConvGammaFromXFromLambdaPt[iCut]
+                               = new TH1F("ESD_TrueSecondaryConvGammaFromXFromLambda_Pt", "ESD_TrueSecondaryConvGammaFromXFromLambda_Pt",250,0,25);
+                       fTrueList[iCut]->Add(hESDTrueSecondaryConvGammaFromXFromLambdaPt[iCut]);
+
+                       hESDTrueDalitzPsiPairDeltaPhi[iCut]
+                               = new TH2F("ESD_TrueDalitzPsiPairDeltaPhi_Pt", "ESD_TrueDalitzPsiPairDeltaPhi_Pt",100,-0.5,2,100,-0.5,0.5);
+                       fTrueList[iCut]->Add(hESDTrueDalitzPsiPairDeltaPhi[iCut]);
+                       
+                       hESDTrueGammaPsiPairDeltaPhi[iCut]
+                               = new TH2F("ESD_TrueGammaPsiPairDeltaPhi_Pt", "ESD_TrueGammaPsiPairDeltaPhi_Pt",100,-0.5,2,100,-0.5,0.5);
+                       fTrueList[iCut]->Add(hESDTrueGammaPsiPairDeltaPhi[iCut]);
+
+                       hESDTruePrimaryConvGammaESDPtMCPt[iCut] = new TH2F("ESD_TruePrimaryConvGammaESD_PtMCPt", "ESD_TruePrimaryConvGammaESD_PtMCPt",250,0,25,250,0,25);
+                       fTrueList[iCut]->Add(hESDTruePrimaryConvGammaESDPtMCPt[iCut]);
+                       
+                       if(fDoMesonAnalysis){
+                               hESDTrueMotherInvMassPt[iCut] = new TH2F("ESD_TrueMother_InvMass_Pt","ESD_TrueMother_InvMass_Pt",800,0,0.8,250,0,25);
+                               fTrueList[iCut]->Add(hESDTrueMotherInvMassPt[iCut]);
+                               hESDTruePrimaryMotherInvMassPt[iCut]
+                               = new TH2F("ESD_TruePrimaryMother_InvMass_Pt", "ESD_TruePrimaryMother_InvMass_Pt", 800,0,0.8,250,0,25);
+                               hESDTruePrimaryMotherInvMassPt[iCut]->Sumw2();
+                               fTrueList[iCut]->Add(hESDTruePrimaryMotherInvMassPt[iCut]);
+                               hESDTruePrimaryMotherW0WeightingInvMassPt[iCut]
+                               = new TH2F("ESD_TruePrimaryMotherW0Weights_InvMass_Pt", "ESD_TruePrimaryMotherW0Weights_InvMass_Pt", 800,0,0.8,250,0,25);
+                               hESDTruePrimaryMotherW0WeightingInvMassPt[iCut]->Sumw2();
+                               fTrueList[iCut]->Add(hESDTruePrimaryMotherW0WeightingInvMassPt[iCut]);
+                               pESDTruePrimaryMotherWeightsInvMassPt[iCut]
+                               = new TProfile2D("ESD_TruePrimaryMotherWeights_InvMass_Pt", "ESD_TruePrimaryMotherWeights_InvMass_Pt", 800,0,0.8,250,0,25);
+                               pESDTruePrimaryMotherWeightsInvMassPt[iCut]->Sumw2();
+                               fTrueList[iCut]->Add(pESDTruePrimaryMotherWeightsInvMassPt[iCut]);
+                               hESDTrueSecondaryMotherInvMassPt[iCut]
+                               = new TH2F("ESD_TrueSecondaryMother_InvMass_Pt", "ESD_TrueSecondaryMother_InvMass_Pt", 800,0,0.8,250,0,25);
+                               hESDTrueSecondaryMotherInvMassPt[iCut]->Sumw2();
+                               fTrueList[iCut]->Add(hESDTrueSecondaryMotherInvMassPt[iCut]);
+                               hESDTrueSecondaryMotherFromK0sInvMassPt[iCut]
+                               = new TH2F("ESD_TrueSecondaryMotherFromK0s_InvMass_Pt","ESD_TrueSecondaryMotherFromK0s_InvMass_Pt",800,0,0.8,250,0,25);
+                               hESDTrueSecondaryMotherFromK0sInvMassPt[iCut]->Sumw2();
+                               fTrueList[iCut]->Add(hESDTrueSecondaryMotherFromK0sInvMassPt[iCut]);
+                               hESDTrueSecondaryMotherFromEtaInvMassPt[iCut]
+                               = new TH2F("ESD_TrueSecondaryMotherFromEta_InvMass_Pt","ESD_TrueSecondaryMotherFromEta_InvMass_Pt",800,0,0.8,250,0,25);
+                               fTrueList[iCut]->Add(hESDTrueSecondaryMotherFromEtaInvMassPt[iCut]);
+                               hESDTrueSecondaryMotherFromLambdaInvMassPt[iCut]
+                               = new TH2F("ESD_TrueSecondaryMotherFromLambda_InvMass_Pt","ESD_TrueSecondaryMotherFromLambda_InvMass_Pt",800,0,0.8,250,0,25);
+                               fTrueList[iCut]->Add(hESDTrueSecondaryMotherFromLambdaInvMassPt[iCut]);
+                               hESDTrueMotherDalitzInvMassPt[iCut] = new TH2F("ESD_TrueDalitz_InvMass_Pt","ESD_TrueDalitz_InvMass_Pt",800,0,0.8,250,0,25);
+                               fTrueList[iCut]->Add(hESDTrueMotherDalitzInvMassPt[iCut]);         
+                               if (fDoMesonQA > 0){
+                                       hESDTruePrimaryPi0MCPtResolPt[iCut] = new TH2F("ESD_TruePrimaryPi0_MCPt_ResolPt","ESD_TruePrimaryPi0_ResolPt_MCPt",500,0.03,25,1000,-1.,1.);
+                                       hESDTruePrimaryPi0MCPtResolPt[iCut]->Sumw2();
+                                       SetLogBinningXTH2(hESDTruePrimaryPi0MCPtResolPt[iCut]);
+                                       fTrueList[iCut]->Add(hESDTruePrimaryPi0MCPtResolPt[iCut]);
+                                       hESDTruePrimaryEtaMCPtResolPt[iCut]  = new TH2F("ESD_TruePrimaryEta_MCPt_ResolPt","ESD_TruePrimaryEta_ResolPt_MCPt",500,0.03,25,1000,-1.,1.);
+                                       hESDTruePrimaryEtaMCPtResolPt[iCut]->Sumw2();
+                                       SetLogBinningXTH2(hESDTruePrimaryEtaMCPtResolPt[iCut]);
+                                       fTrueList[iCut]->Add(hESDTruePrimaryEtaMCPtResolPt[iCut]);
+                                       hESDTrueBckGGInvMassPt[iCut] = new TH2F("ESD_TrueBckGG_InvMass_Pt","ESD_TrueBckGG_InvMass_Pt",800,0,0.8,250,0,25);
+                                       fTrueList[iCut]->Add(hESDTrueBckGGInvMassPt[iCut]);
+                                       hESDTrueBckContInvMassPt[iCut] = new TH2F("ESD_TrueBckCont_InvMass_Pt","ESD_TrueBckCont_InvMass_Pt",800,0,0.8,250,0,25);
+                                       fTrueList[iCut]->Add(hESDTrueBckContInvMassPt[iCut]);
+                                       hESDTrueK0sWithPi0DaughterMCPt[iCut] = new TH1F("ESD_TrueK0sWithPi0Daughter_MCPt","ESD_TrueK0sWithPi0Daughter_MCPt",250,0,25);
+                                       fTrueList[iCut]->Add(hESDTrueK0sWithPi0DaughterMCPt[iCut]);
+                                       hESDTrueEtaWithPi0DaughterMCPt[iCut] = new TH1F("ESD_TrueEtaWithPi0Daughter_MCPt","ESD_TrueEtaWithPi0Daughter_MCPt",250,0,25);
+                                       fTrueList[iCut]->Add(hESDTrueEtaWithPi0DaughterMCPt[iCut]);
+                                       hESDTrueLambdaWithPi0DaughterMCPt[iCut] = new TH1F("ESD_TrueLambdaWithPi0Daughter_MCPt","ESD_TrueLambdaWithPi0Daughter_MCPt",250,0,25);
+                                       fTrueList[iCut]->Add(hESDTrueLambdaWithPi0DaughterMCPt[iCut]);
+
+                                       hESDTruePi0PtY[iCut] = new TH2F("ESD_TruePi0_Pt_Y","ESD_TruePi0_Pt_Y",150,0.03,15.,150,-1.5,1.5);
+                                       SetLogBinningXTH2(hESDTruePi0PtY[iCut]);
+                                       fTrueList[iCut]->Add(hESDTruePi0PtY[iCut]);
+                                       hESDTrueEtaPtY[iCut] = new TH2F("ESD_TrueEta_Pt_Y","ESD_TrueEta_Pt_Y",150,0.03,15.,150,-1.5,1.5);
+                                       SetLogBinningXTH2(hESDTrueEtaPtY[iCut]);
+                                       fTrueList[iCut]->Add(hESDTrueEtaPtY[iCut]);
+                                       hESDTruePi0PtAlpha[iCut] = new TH2F("ESD_TruePi0_Pt_Alpha","ESD_TruePi0_Pt_Alpha",150,0.03,15.,100,0,1);
+                                       SetLogBinningXTH2(hESDTruePi0PtAlpha[iCut]);
+                                       fTrueList[iCut]->Add(hESDTruePi0PtAlpha[iCut]);
+                                       hESDTrueEtaPtAlpha[iCut] = new TH2F("ESD_TrueEta_Pt_Alpha","ESD_TrueEta_Pt_Alpha",150,0.03,15.,100,0,1);
+                                       SetLogBinningXTH2(hESDTrueEtaPtAlpha[iCut]);
+                                       fTrueList[iCut]->Add(hESDTrueEtaPtAlpha[iCut]);
+                                       
+                                       hESDTruePi0PtOpenAngle[iCut] = new TH2F("ESD_TruePi0_Pt_OpenAngle","ESD_TruePi0_Pt_OpenAngle",150,0.03,15.,200,0,2*TMath::Pi());            
+                                       SetLogBinningXTH2(hESDTruePi0PtOpenAngle[iCut]);
+                                       fTrueList[iCut]->Add(hESDTruePi0PtOpenAngle[iCut]);
+                                       hESDTrueEtaPtOpenAngle[iCut] = new TH2F("ESD_TrueEta_Pt_OpenAngle","ESD_TrueEta_Pt_OpenAngle",150,0.03,15.,200,0,2*TMath::Pi());            
+                                       SetLogBinningXTH2(hESDTrueEtaPtOpenAngle[iCut]);
+                                       fTrueList[iCut]->Add(hESDTrueEtaPtOpenAngle[iCut]);
+
+                                       hESDTrueConvGammaEta[iCut] = new TH1F("ESD_TrueConvGamma_Eta","ESD_TrueConvGamma_Eta",2000,-2,2);
+                                       fTrueList[iCut]->Add(hESDTrueConvGammaEta[iCut]);
+
+                               }
+                       }
+               }
+       }
+
+       fV0Reader=(AliV0ReaderV1*)AliAnalysisManager::GetAnalysisManager()->GetTask("V0ReaderV1");
+       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());
+
+       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(fDoMesonAnalysis){
+                       if(!((AliConversionMesonCuts*)fMesonCutArray->At(iCut))) continue;
+                       if(((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->GetCutHistograms()){
+                               fCutFolder[iCut]->Add(((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->GetCutHistograms());
+                       }
+               }
+       }
+       PostData(1, fOutputContainer);
 }
 //_____________________________________________________________________________
 Bool_t AliAnalysisTaskGammaConvV1::Notify()
@@ -853,6 +989,10 @@ void AliAnalysisTaskGammaConvV1::UserExec(Option_t *)
    
    // ------------------- BeginEvent ----------------------------
 
+   AliEventplane *EventPlane = fInputEvent->GetEventplane();
+   if(fIsHeavyIon ==1)fEventPlaneAngle = EventPlane->GetEventplane("V0",fInputEvent,2);
+   else fEventPlaneAngle=0.0;
+   
    if(fIsMC && fInputEvent->IsA()==AliAODEvent::Class() && !(fV0Reader->AreAODsRelabeled())){
       RelabelAODPhotonCandidates(kTRUE);    // In case of AODMC relabeling MC
       fV0Reader->RelabelAODs(kTRUE);
@@ -915,6 +1055,7 @@ void AliAnalysisTaskGammaConvV1::UserExec(Option_t *)
       ProcessPhotonCandidates(); // Process this cuts gammas
 
       hNGammaCandidates[iCut]->Fill(fGammaCandidates->GetEntries());
+         hNGoodESDTracksVsNGammaCanditates[iCut]->Fill(fV0Reader->GetNumberOfPrimaryTracks(),fGammaCandidates->GetEntries());
       if(fDoMesonAnalysis){ // Meson Analysis
          if(((AliConversionMesonCuts*)fMesonCutArray->At(iCut))->UseMCPSmearing() && fIsMC){
             fUnsmearedPx = new Double_t[fGammaCandidates->GetEntries()]; // Store unsmeared Momenta
@@ -988,12 +1129,17 @@ void AliAnalysisTaskGammaConvV1::ProcessPhotonCandidates()
       }
 
       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()){
          fGammaCandidates->Add(PhotonCandidate); // if no second loop is required add to events good gammas
 
          if(fIsFromMBHeader){
             hESDConvGammaPt[fiCut]->Fill(PhotonCandidate->Pt());
+            if (fDoPhotonQA > 0){
+               hESDConvGammaR[fiCut]->Fill(PhotonCandidate->GetConversionRadius());
+               hESDConvGammaEta[fiCut]->Fill(PhotonCandidate->Eta());
+            }   
          }
          if(fIsMC){
             if(fInputEvent->IsA()==AliESDEvent::Class())
@@ -1001,8 +1147,8 @@ void AliAnalysisTaskGammaConvV1::ProcessPhotonCandidates()
             if(fInputEvent->IsA()==AliAODEvent::Class())
                ProcessTruePhotonCandidatesAOD(PhotonCandidate);
          }
-         if (fIsFromMBHeader && fDoPhotonQA){
-            if (fIsHeavyIon && PhotonCandidate->Pt() > 0.399 && PhotonCandidate->Pt() < 12.){
+         if (fIsFromMBHeader && fDoPhotonQA == 2){
+            if (fIsHeavyIon == 1 && PhotonCandidate->Pt() > 0.399 && PhotonCandidate->Pt() < 12.){
                fPtGamma = PhotonCandidate->Pt();
                fDCAzPhoton = PhotonCandidate->GetDCAzToPrimVtx();
                fRConvPhoton = PhotonCandidate->GetConversionRadius();
@@ -1044,6 +1190,10 @@ void AliAnalysisTaskGammaConvV1::ProcessPhotonCandidates()
             fGammaCandidates->Add(PhotonCandidate);
             if(fIsFromMBHeader){
                hESDConvGammaPt[fiCut]->Fill(PhotonCandidate->Pt());
+               if (fDoPhotonQA > 0){
+                  hESDConvGammaR[fiCut]->Fill(PhotonCandidate->GetConversionRadius());
+                  hESDConvGammaEta[fiCut]->Fill(PhotonCandidate->Eta());
+               }
             }
          }
          if(fIsMC){
@@ -1053,8 +1203,8 @@ void AliAnalysisTaskGammaConvV1::ProcessPhotonCandidates()
                ProcessTruePhotonCandidatesAOD(PhotonCandidate);
          } else GammaCandidatesStepTwo->Add(PhotonCandidate); // Close v0s cut enabled -> add to list two
          
-           if (fIsFromMBHeader && fDoPhotonQA){
-            if (fIsHeavyIon && PhotonCandidate->Pt() > 0.399 && PhotonCandidate->Pt() < 12.){
+           if (fIsFromMBHeader && fDoPhotonQA == 2){
+            if (fIsHeavyIon ==1 && PhotonCandidate->Pt() > 0.399 && PhotonCandidate->Pt() < 12.){
                fPtGamma = PhotonCandidate->Pt();
                fDCAzPhoton = PhotonCandidate->GetDCAzToPrimVtx();
                fRConvPhoton = PhotonCandidate->GetConversionRadius();
@@ -1088,6 +1238,10 @@ void AliAnalysisTaskGammaConvV1::ProcessPhotonCandidates()
          fGammaCandidates->Add(PhotonCandidate); // Add gamma to current cut TList
          if(fIsFromMBHeader){
             hESDConvGammaPt[fiCut]->Fill(PhotonCandidate->Pt());
+            if (fDoPhotonQA > 0){
+               hESDConvGammaR[fiCut]->Fill(PhotonCandidate->GetConversionRadius());
+               hESDConvGammaEta[fiCut]->Fill(PhotonCandidate->Eta());
+            }
          }
          if(fIsMC){
             if(fInputEvent->IsA()==AliESDEvent::Class())
@@ -1181,16 +1335,18 @@ void AliAnalysisTaskGammaConvV1::ProcessTruePhotonCandidatesAOD(AliAODConversion
    
    
    // True Photon
-   if(fIsFromMBHeader)hESDTrueConvGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
+   if(fIsFromMBHeader){
+     hESDTrueConvGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
+     if (fDoPhotonQA > 0) hESDTrueConvGammaEta[fiCut]->Fill(TruePhotonCandidate->Eta());
+   }
    hESDTrueGammaPsiPairDeltaPhi[fiCut]->Fill(deltaPhi,TruePhotonCandidate->GetPsiPair());  
    if(Photon->IsPrimary()){ 
       // Count just primary MC Gammas as true --> For Ratio esdtruegamma / mcconvgamma
       if(fIsFromMBHeader){
          iPhotonMCInfo = 6;
          hESDTruePrimaryConvGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
-         hESDTruePrimaryConvGammaRSESDPtMCPt[fiCut]->Fill(TruePhotonCandidate->Pt(),Photon->Pt()); // Allways Filled
+         hESDTruePrimaryConvGammaESDPtMCPt[fiCut]->Fill(TruePhotonCandidate->Pt(),Photon->Pt()); // Allways Filled
       }
-      hESDTruePrimaryConvGammaESDPtMCPt[fiCut]->Fill(TruePhotonCandidate->Pt(),Photon->Pt()); // Allways Filled
       // (Not Filled for i6, Extra Signal Gamma (parambox) are secondary)
    }
    else{
@@ -1264,18 +1420,19 @@ void AliAnalysisTaskGammaConvV1::ProcessTruePhotonCandidates(AliAODConversionPho
    
    
    // True Photon
-   if(fIsFromMBHeader){
-      hESDTrueConvGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
+    if(fIsFromMBHeader){
+     hESDTrueConvGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
+     if (fDoPhotonQA > 0) hESDTrueConvGammaEta[fiCut]->Fill(TruePhotonCandidate->Eta());
    }
    hESDTrueGammaPsiPairDeltaPhi[fiCut]->Fill(deltaPhi,TruePhotonCandidate->GetPsiPair());  
    if(posDaughter->GetMother(0) <= fMCStack->GetNprimary()){
       // Count just primary MC Gammas as true --> For Ratio esdtruegamma / mcconvgamma
       if(fIsFromMBHeader){
          iPhotonMCInfo = 6;
-         hESDTruePrimaryConvGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());
-         hESDTruePrimaryConvGammaRSESDPtMCPt[fiCut]->Fill(TruePhotonCandidate->Pt(),Photon->Pt()); // Allways Filled
+         hESDTruePrimaryConvGammaPt[fiCut]->Fill(TruePhotonCandidate->Pt());  
+         hESDTruePrimaryConvGammaESDPtMCPt[fiCut]->Fill(TruePhotonCandidate->Pt(),Photon->Pt()); // Allways Filled
+
       }
-      hESDTruePrimaryConvGammaESDPtMCPt[fiCut]->Fill(TruePhotonCandidate->Pt(),Photon->Pt()); // Allways Filled
       // (Not Filled for i6, Extra Signal Gamma (parambox) are secondary)
    }
    else{
@@ -1312,15 +1469,14 @@ void AliAnalysisTaskGammaConvV1::ProcessAODMCParticles()
       if (!particle) continue;
       if (!particle->IsPrimary()) continue;
 
-      Bool_t mcIsFromMB = kTRUE;
       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(isMCFromMBHeader != 2) mcIsFromMB = kFALSE;
       }
-
+      
+      if(!((AliConversionCuts*)fCutArray->At(fiCut))->InPlaneOutOfPlaneCut(particle->Phi(),fEventPlaneAngle,kFALSE)) continue;
       if(((AliConversionCuts*)fCutArray->At(fiCut))->PhotonIsSelectedAODMC(particle,AODMCTrackArray,kFALSE)){
          hMCAllGammaPt[fiCut]->Fill(particle->Pt()); // All MC Gamma
          if(particle->GetMother() >-1){ // Meson Decay Gamma
@@ -1359,21 +1515,14 @@ void AliAnalysisTaskGammaConvV1::ProcessAODMCParticles()
             }
          }
          hMCConvGammaPt[fiCut]->Fill(particle->Pt());
-         if (fDoPhotonQA){
+         if (fDoPhotonQA > 0){
             hMCConvGammaR[fiCut]->Fill(rConv);
             hMCConvGammaEta[fiCut]->Fill(particle->Eta());
          }
-         if(mcIsFromMB){
-            hMCConvGammaRSPt[fiCut]->Fill(particle->Pt());
-            if (fDoPhotonQA){
-               hMCConvGammaRSR[fiCut]->Fill(rConv);
-               hMCConvGammaRSEta[fiCut]->Fill(particle->Eta());
-            }
-         }
       }
       // Converted MC Gamma
       if(fDoMesonAnalysis){
-         if(particle->GetPdgCode() == 310 && fDoMesonQA){
+         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();
@@ -1400,7 +1549,9 @@ void AliAnalysisTaskGammaConvV1::ProcessAODMCParticles()
             if(((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(i, fMCStack, fInputEvent)){
                if (particle->Pt()>0.005){
                   weighted= ((AliConversionCuts*)fCutArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),i, 0x0, fInputEvent);
-                  //cout << "MC input \t"<<i << "\t" <<  particle->Pt()<<"\t"<<weighted << endl;
+//                   if(particle->GetPdgCode() == 221){
+//                      cout << "MC input \t"<<i << "\t" <<  particle->Pt()<<"\t"<<weighted << endl;
+//                   }
                }
             }
             Double_t mesonY = 10.;
@@ -1414,15 +1565,18 @@ void AliAnalysisTaskGammaConvV1::ProcessAODMCParticles()
             if(particle->GetPdgCode() == 111){
                hMCPi0Pt[fiCut]->Fill(particle->Pt(),weighted); // All MC Pi0
                hMCPi0WOWeightPt[fiCut]->Fill(particle->Pt());
-               if (fDoMesonQA) hMCPi0PtY[fiCut]->Fill(particle->Pt(),mesonY,weighted); // All MC Pi0
+               if (fDoMesonQA > 0) hMCPi0PtY[fiCut]->Fill(particle->Pt(),mesonY,weighted); // All MC Pi0
             } else if(particle->GetPdgCode() == 221){
                hMCEtaPt[fiCut]->Fill(particle->Pt(),weighted); // All MC Eta
-               if (fDoMesonQA) hMCEtaPtY[fiCut]->Fill(particle->Pt(),mesonY,weighted); // All MC Pi0
+               hMCEtaWOWeightPt[fiCut]->Fill(particle->Pt());
+               if (fDoMesonQA > 0) hMCEtaPtY[fiCut]->Fill(particle->Pt(),mesonY,weighted); // 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))->PhotonIsSelectedAODMC(daughter1,AODMCTrackArray,kFALSE)  &&
+               ((AliConversionCuts*)fCutArray->At(fiCut))->InPlaneOutOfPlaneCut(daughter0->Phi(),fEventPlaneAngle,kFALSE) &&
+               ((AliConversionCuts*)fCutArray->At(fiCut))->InPlaneOutOfPlaneCut(daughter1->Phi(),fEventPlaneAngle,kFALSE)){
 
                if(particle->GetPdgCode() == 111){
                   hMCPi0InAccPt[fiCut]->Fill(particle->Pt(),weighted); // MC Pi0 with gamma in acc
@@ -1433,6 +1587,7 @@ void AliAnalysisTaskGammaConvV1::ProcessAODMCParticles()
          }
       }
    }
+   
 }
 //________________________________________________________________________
 void AliAnalysisTaskGammaConvV1::ProcessMCParticles()
@@ -1442,15 +1597,14 @@ void AliAnalysisTaskGammaConvV1::ProcessMCParticles()
       TParticle* particle = (TParticle *)fMCStack->Particle(i);
       if (!particle) continue;
 
-      Bool_t mcIsFromMB = kTRUE;
       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(isMCFromMBHeader != 2) mcIsFromMB = kFALSE;
       }
 
+      if(!((AliConversionCuts*)fCutArray->At(fiCut))->InPlaneOutOfPlaneCut(particle->Phi(),fEventPlaneAngle,kFALSE)) continue;
       if(((AliConversionCuts*)fCutArray->At(fiCut))->PhotonIsSelectedMC(particle,fMCStack,kFALSE)){
          hMCAllGammaPt[fiCut]->Fill(particle->Pt()); // All MC Gamma
          if(particle->GetMother(0) >-1){ // Meson Decay Gamma
@@ -1481,20 +1635,13 @@ void AliAnalysisTaskGammaConvV1::ProcessMCParticles()
       }
       if(((AliConversionCuts*)fCutArray->At(fiCut))->PhotonIsSelectedMC(particle,fMCStack,kTRUE)){
          hMCConvGammaPt[fiCut]->Fill(particle->Pt());
-         if (fDoPhotonQA){
+         if (fDoPhotonQA > 0){
             hMCConvGammaR[fiCut]->Fill(((TParticle*)fMCStack->Particle(particle->GetFirstDaughter()))->R());
             hMCConvGammaEta[fiCut]->Fill(particle->Eta());
          }
-         if(mcIsFromMB){
-            hMCConvGammaRSPt[fiCut]->Fill(particle->Pt());
-            if (fDoPhotonQA){
-               hMCConvGammaRSR[fiCut]->Fill(((TParticle*)fMCStack->Particle(particle->GetFirstDaughter()))->R());
-               hMCConvGammaRSEta[fiCut]->Fill(particle->Eta());
-            }
-         }
       } // Converted MC Gamma
       if(fDoMesonAnalysis){
-         if(particle->GetPdgCode() == 310 && fDoMesonQA){
+         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();
@@ -1509,9 +1656,11 @@ void AliAnalysisTaskGammaConvV1::ProcessMCParticles()
                   //cout << "MC input \t"<<i << "\t" <<  particle->Pt()<<"\t"<<weighted << endl;
                }
             }
-            hMCK0sPt[fiCut]->Fill(particle->Pt(),weightedK0s);
-            hMCK0sWOWeightPt[fiCut]->Fill(particle->Pt());
-            hMCK0sPtY[fiCut]->Fill(particle->Pt(),mesonY,weightedK0s);
+            if (fMCStack->IsPhysicalPrimary(i)){
+                               hMCK0sPt[fiCut]->Fill(particle->Pt(),weightedK0s);
+                               hMCK0sWOWeightPt[fiCut]->Fill(particle->Pt());
+                               hMCK0sPtY[fiCut]->Fill(particle->Pt(),mesonY,weightedK0s);
+                       }       
          }
          if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))
             ->MesonIsSelectedMC(particle,fMCStack,((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift())){
@@ -1522,7 +1671,9 @@ void AliAnalysisTaskGammaConvV1::ProcessMCParticles()
             if(((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(i, fMCStack, fInputEvent)){
                if (particle->Pt()>0.005){
                   weighted= ((AliConversionCuts*)fCutArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),i, fMCStack, fInputEvent);
-                  //cout << "MC input \t"<<i << "\t" <<  particle->Pt()<<"\t"<<weighted << endl;
+//                   if(particle->GetPdgCode() == 221){
+//                      cout << "MC input \t"<<i << "\t" <<  particle->Pt()<<"\t"<<weighted << endl;
+//                   }
                }
             }
             Double_t mesonY = 10.;
@@ -1536,15 +1687,18 @@ void AliAnalysisTaskGammaConvV1::ProcessMCParticles()
             if(particle->GetPdgCode() == 111){
                hMCPi0Pt[fiCut]->Fill(particle->Pt(),weighted); // All MC Pi0
                hMCPi0WOWeightPt[fiCut]->Fill(particle->Pt());
-               if (fDoMesonQA) hMCPi0PtY[fiCut]->Fill(particle->Pt(),mesonY,weighted); // All MC Pi0
+               if (fDoMesonQA > 0) hMCPi0PtY[fiCut]->Fill(particle->Pt(),mesonY,weighted); // All MC Pi0
             } else if(particle->GetPdgCode() == 221){
                hMCEtaPt[fiCut]->Fill(particle->Pt(),weighted); // All MC Eta
-               if (fDoMesonQA) hMCEtaPtY[fiCut]->Fill(particle->Pt(),mesonY,weighted); // All MC Pi0
+               hMCEtaWOWeightPt[fiCut]->Fill(particle->Pt());
+               if (fDoMesonQA > 0) hMCEtaPtY[fiCut]->Fill(particle->Pt(),mesonY,weighted); // 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))->PhotonIsSelectedMC(daughter1,fMCStack,kFALSE)  &&
+               ((AliConversionCuts*)fCutArray->At(fiCut))->InPlaneOutOfPlaneCut(daughter0->Phi(),fEventPlaneAngle,kFALSE) &&
+               ((AliConversionCuts*)fCutArray->At(fiCut))->InPlaneOutOfPlaneCut(daughter1->Phi(),fEventPlaneAngle,kFALSE)){
 
                if(particle->GetPdgCode() == 111){
                   hMCPi0InAccPt[fiCut]->Fill(particle->Pt(),weighted); // MC Pi0 with gamma in acc
@@ -1555,6 +1709,46 @@ void AliAnalysisTaskGammaConvV1::ProcessMCParticles()
          }
       }
    }
+   
+       if (fDoMesonQA){
+               for(Int_t i = fMCStack->GetNprimary(); i < fMCStack->GetNtrack(); i++) {
+                       TParticle* particle = (TParticle *)fMCStack->Particle(i);                       
+                       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(fDoMesonAnalysis){
+                               if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))
+            ->MesonIsSelectedMC(particle,fMCStack,((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift())){
+                                       Float_t weighted= 1;
+                                       if(((AliConversionCuts*)fCutArray->At(fiCut))->IsParticleFromBGEvent(i, fMCStack, fInputEvent)){
+                                               if (particle->Pt()>0.005){
+                                                       weighted= ((AliConversionCuts*)fCutArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),i, fMCStack, fInputEvent);
+                       //                   if(particle->GetPdgCode() == 221){
+                       //                      cout << "MC input \t"<<i << "\t" <<  particle->Pt()<<"\t"<<weighted << endl;
+                       //                   }
+                                               }
+                                       }
+                                       
+                                       if(particle->GetPdgCode() == 111){      
+                                               Int_t pdgCode = ((TParticle*)fMCStack->Particle( particle->GetFirstMother() ))->GetPdgCode();
+                                               Int_t source = GetSourceClassification(111,pdgCode);
+                                               hMCSecPi0PtvsSource[fiCut]->Fill(particle->Pt(),source,weighted); // All MC Pi0
+                                               hMCSecPi0Source[fiCut]->Fill(pdgCode);                                          
+                                       } else if(particle->GetPdgCode() == 221){
+                                               Int_t pdgCode = ((TParticle*)fMCStack->Particle( particle->GetFirstMother() ))->GetPdgCode();
+                                               hMCSecEtaPt[fiCut]->Fill(particle->Pt(),weighted); // All MC Pi0
+                                               hMCSecEtaSource[fiCut]->Fill(pdgCode);
+                                       } 
+                               }
+                       }
+               }
+       }
 }
 //________________________________________________________________________
 void AliAnalysisTaskGammaConvV1::CalculatePi0Candidates(){
@@ -1582,6 +1776,20 @@ void AliAnalysisTaskGammaConvV1::CalculatePi0Candidates(){
                hESDMotherInvMassPt[fiCut]->Fill(pi0cand->M(),pi0cand->Pt());
                if(pi0cand->GetAlpha()<0.1)
                   hESDMotherInvMassEalpha[fiCut]->Fill(pi0cand->M(),pi0cand->E());
+               
+               if (fDoMesonQA > 0){
+                  if ( pi0cand->M() > 0.05 && pi0cand->M() < 0.17){
+                     hESDMotherPi0PtY[fiCut]->Fill(pi0cand->Pt(),pi0cand->Rapidity()-((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift());  
+                     hESDMotherPi0PtAlpha[fiCut]->Fill(pi0cand->Pt(),pi0cand->GetAlpha());  
+                     hESDMotherPi0PtOpenAngle[fiCut]->Fill(pi0cand->Pt(),pi0cand->GetOpeningAngle()); 
+                     
+                  } 
+                  if ( pi0cand->M() > 0.45 && pi0cand->M() < 0.65){
+                     hESDMotherEtaPtY[fiCut]->Fill(pi0cand->Pt(),pi0cand->Rapidity()-((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift());  
+                     hESDMotherEtaPtAlpha[fiCut]->Fill(pi0cand->Pt(),pi0cand->GetAlpha());  
+                     hESDMotherEtaPtOpenAngle[fiCut]->Fill(pi0cand->Pt(),pi0cand->GetOpeningAngle());       
+                  }
+               }   
                if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->DoBGCalculation()){
                   Int_t zbin = 0;
                   Int_t mbin = 0;
@@ -1613,7 +1821,7 @@ void AliAnalysisTaskGammaConvV1::CalculatePi0Candidates(){
                   if(fInputEvent->IsA()==AliAODEvent::Class())
                      ProcessTrueMesonCandidatesAOD(pi0cand,gamma0,gamma1);
                }
-               if (fDoMesonQA){
+               if (fDoMesonQA == 2){
                   fInvMass = pi0cand->M();
                   fPt  = pi0cand->Pt();
                   if (abs(gamma0->GetDCAzToPrimVtx()) < abs(gamma1->GetDCAzToPrimVtx())){
@@ -1650,6 +1858,10 @@ void AliAnalysisTaskGammaConvV1::ProcessTrueMesonCandidates(AliAODConversionMoth
    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 gamma0MotherLabel = -1;
       if(gamma0MCLabel != -1){ // Gamma is Combinatorial; MC Particles don't belong to the same Mother
@@ -1663,10 +1875,12 @@ void AliAnalysisTaskGammaConvV1::ProcessTrueMesonCandidates(AliAODConversionMoth
                   gamma0MotherLabel=gammaMC0->GetFirstMother();
                }
             }
-            if(gammaMC0->GetPdgCode() ==111){ // Conversion but Pi0 Mother
+            if(gammaMC0->GetPdgCode() ==111){ // Dalitz candidate
+               gamma0DalitzCand = kTRUE;
                gamma0MotherLabel=-111;
             }
-            if(gammaMC0->GetPdgCode() ==221){ // Conversion but Eta Mother
+            if(gammaMC0->GetPdgCode() ==221){ // Dalitz candidate
+               gamma0DalitzCand = kTRUE;
                gamma0MotherLabel=-221;
             }
          }
@@ -1685,11 +1899,13 @@ void AliAnalysisTaskGammaConvV1::ProcessTrueMesonCandidates(AliAODConversionMoth
                      gamma1MotherLabel=gammaMC1->GetFirstMother();
                   }
                }
-               if(gammaMC1->GetPdgCode() ==111){ // Conversion but Pi0 Mother
-                  gamma1MotherLabel=-111;
+               if(gammaMC1->GetPdgCode() ==111 ){ // Dalitz candidate
+                 gamma1DalitzCand = kTRUE;
+                 gamma1MotherLabel=-111;
                }
-               if(gammaMC1->GetPdgCode() ==221){ // Conversion but Eta Mother
-                  gamma1MotherLabel=-221;
+               if(gammaMC1->GetPdgCode() ==221){ // Dalitz candidate
+                 gamma1DalitzCand = kTRUE;
+                 gamma1MotherLabel=-221;
                }
             }
          }
@@ -1701,8 +1917,37 @@ void AliAnalysisTaskGammaConvV1::ProcessTrueMesonCandidates(AliAODConversionMoth
                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
             hESDTrueMotherInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt()); 
+            if (fDoMesonQA > 0){
+               if (isTruePi0){
+                  if ( Pi0Candidate->M() > 0.05 && Pi0Candidate->M() < 0.17){
+                     hESDTruePi0PtY[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->Rapidity()-((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift()); 
+                     hESDTruePi0PtAlpha[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->GetAlpha()); 
+                     hESDTruePi0PtOpenAngle[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->GetOpeningAngle()); 
+                  }
+               } else if (isTrueEta){   
+                  if ( Pi0Candidate->M() > 0.45 && Pi0Candidate->M() < 0.65){
+                     hESDTrueEtaPtY[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->Rapidity()-((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift()); 
+                     hESDTrueEtaPtAlpha[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->GetAlpha()); 
+                     hESDTrueEtaPtOpenAngle[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->GetOpeningAngle()); 
+                  }
+               }
+            }   
             if(gamma0MotherLabel >= MCStack->GetNprimary()){ // Secondary Meson
                Int_t secMotherLabel = ((TParticle*)MCStack->Particle(gamma1MotherLabel))->GetMother(0);
                Float_t weightedSec= 1;
@@ -1716,13 +1961,19 @@ void AliAnalysisTaskGammaConvV1::ProcessTrueMesonCandidates(AliAODConversionMoth
                   if(MCStack->Particle(secMotherLabel)->GetPdgCode()==310){
                      iMesonMCInfo = 4;
                      hESDTrueSecondaryMotherFromK0sInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weightedSec);
-                     if (fDoMesonQA)hESDTrueK0sWithPi0DaughterMCPt[fiCut]
+                     if (fDoMesonQA > 0)hESDTrueK0sWithPi0DaughterMCPt[fiCut]
                                        ->Fill(MCStack->Particle(secMotherLabel)->Pt());
                   }
                   if(MCStack->Particle(secMotherLabel)->GetPdgCode()==221){
                      iMesonMCInfo = 3;
                      hESDTrueSecondaryMotherFromEtaInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weightedSec);
-                     if (fDoMesonQA)hESDTrueEtaWithPi0DaughterMCPt[fiCut]
+                     if (fDoMesonQA > 0)hESDTrueEtaWithPi0DaughterMCPt[fiCut]
+                                       ->Fill(MCStack->Particle(secMotherLabel)->Pt());
+                  }
+                  if(MCStack->Particle(secMotherLabel)->GetPdgCode()==3122){
+                     iMesonMCInfo = 7;
+                     hESDTrueSecondaryMotherFromLambdaInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weightedSec);
+                     if (fDoMesonQA > 0)hESDTrueLambdaWithPi0DaughterMCPt[fiCut]
                                        ->Fill(MCStack->Particle(secMotherLabel)->Pt());
                   }
                }
@@ -1738,7 +1989,9 @@ void AliAnalysisTaskGammaConvV1::ProcessTrueMesonCandidates(AliAODConversionMoth
                hESDTruePrimaryMotherInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weighted);
                hESDTruePrimaryMotherW0WeightingInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
                pESDTruePrimaryMotherWeightsInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weighted);
-               if (fDoMesonQA){
+              
+               
+               if (fDoMesonQA > 0){
                   if(isTruePi0){ // Only primary pi0 for resolution
                      hESDTruePrimaryPi0MCPtResolPt[fiCut]->Fill(((TParticle*)MCStack->Particle(gamma1MotherLabel))->Pt(),(Pi0Candidate->Pt()-((TParticle*)MCStack->Particle(gamma1MotherLabel))->Pt())/((TParticle*)MCStack->Particle(gamma1MotherLabel))->Pt(),weighted);
                   }
@@ -1747,19 +2000,22 @@ void AliAnalysisTaskGammaConvV1::ProcessTrueMesonCandidates(AliAODConversionMoth
                   }
                }
             }
-         }
-         else if(!isTruePi0 && !isTrueEta && fDoMesonQA){ // Background
-            if(gamma0MotherLabel>-1 && gamma1MotherLabel>-1){ // Both Tracks are Photons and have a mother but not Pi0 or Eta
-               hESDTrueBckGGInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
-               iMesonMCInfo = 1;
-            } else { // No photon or without mother
-               hESDTrueBckContInvMassPt[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
+                  hESDTrueBckGGInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
+                  iMesonMCInfo = 1;
+               } else { // No photon or without mother
+                  hESDTrueBckContInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
+               }
             }
-            if((gamma0MotherLabel==-111 || gamma1MotherLabel==-111 || gamma0MotherLabel==-221 || gamma1MotherLabel==-221) ){
+            if( isTruePi0Dalitz || isTrueEtaDalitz ){
                // Dalitz
                iMesonMCInfo = 5;
                hESDTrueMotherDalitzInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
-            }
+            } else if (gamma0DalitzCand || gamma1DalitzCand){
+               if (fDoMesonQA > 0)hESDTrueBckContInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
+            }   
          }
       }
    }
@@ -1772,6 +2028,10 @@ void AliAnalysisTaskGammaConvV1::ProcessTrueMesonCandidatesAOD(AliAODConversionM
    TClonesArray *AODMCTrackArray = dynamic_cast<TClonesArray*>(fInputEvent->FindListObject(AliAODMCParticle::StdBranchName()));
    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()));
@@ -1790,15 +2050,17 @@ void AliAnalysisTaskGammaConvV1::ProcessTrueMesonCandidatesAOD(AliAODConversionM
       // 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 ...     // STILL A BUG IN ALIROOT >>8 HAS TPO BE REMOVED AFTER FIX
+         if(((positiveMC->GetMCProcessCode())) == 5 && ((negativeMC->GetMCProcessCode())) == 5){ // ... From Conversion ...     
             if(gammaMC0->GetPdgCode() == 22){ // ... with Gamma Mother
                gamma0MotherLabel=gammaMC0->GetMother();
             }
          }
-         if(gammaMC0->GetPdgCode() ==111){ // Conversion but Pi0 Mother
+         if(gammaMC0->GetPdgCode() ==111){ // Dalitz candidate
+            gamma0DalitzCand = kTRUE;
             gamma0MotherLabel=-111;
          }
-         if(gammaMC0->GetPdgCode() ==221){ // Conversion but Eta Mother
+         if(gammaMC0->GetPdgCode() ==221){ // Dalitz candidate
+            gamma0DalitzCand = kTRUE;
             gamma0MotherLabel=-221;
          }
       }
@@ -1818,15 +2080,17 @@ void AliAnalysisTaskGammaConvV1::ProcessTrueMesonCandidatesAOD(AliAODConversionM
       // 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 ...     // STILL A BUG IN ALIROOT >>8 HAS TPO BE REMOVED AFTER FIX
+         if(((positiveMC->GetMCProcessCode())) == 5 && ((negativeMC->GetMCProcessCode())) == 5){ // ... From Conversion ...     
             if(gammaMC1->GetPdgCode() == 22){ // ... with Gamma Mother
                gamma1MotherLabel=gammaMC1->GetMother();
             }
          }
-         if(gammaMC1->GetPdgCode() ==111){ // Conversion but Pi0 Mother
-            gamma1MotherLabel=-111;
+         if(gammaMC1->GetPdgCode() ==111 ){ // Dalitz candidate
+                 gamma1DalitzCand = kTRUE;
+                 gamma1MotherLabel=-111;
          }
-         if(gammaMC1->GetPdgCode() ==221){ // Conversion but Eta Mother
+         if(gammaMC1->GetPdgCode() ==221){ // Dalitz candidate
+            gamma1DalitzCand = kTRUE;
             gamma1MotherLabel=-221;
          }
       }
@@ -1839,9 +2103,36 @@ void AliAnalysisTaskGammaConvV1::ProcessTrueMesonCandidatesAOD(AliAODConversionM
          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
       hESDTrueMotherInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
-      
+      if (fDoMesonQA > 0){
+         if (isTruePi0){
+            if ( Pi0Candidate->M() > 0.05 && Pi0Candidate->M() < 0.17){
+               hESDTruePi0PtY[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->Rapidity()-((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift());
+               hESDTruePi0PtAlpha[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->GetAlpha()); 
+               hESDTruePi0PtOpenAngle[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->GetOpeningAngle()); 
+            }
+         } else if (isTrueEta){   
+            if ( Pi0Candidate->M() > 0.45 && Pi0Candidate->M() < 0.65){
+               hESDTrueEtaPtY[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->Rapidity()-((AliConversionCuts*)fCutArray->At(fiCut))->GetEtaShift()); 
+               hESDTrueEtaPtAlpha[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->GetAlpha()); 
+               hESDTrueEtaPtOpenAngle[fiCut]->Fill(Pi0Candidate->Pt(),Pi0Candidate->GetOpeningAngle()); 
+            }
+         }
+      }
       if(!(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma0MotherLabel))->IsPrimary())){ // Secondary Meson
          Int_t secMotherLabel = static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->GetMother();
          Float_t weightedSec= 1;
@@ -1855,13 +2146,19 @@ void AliAnalysisTaskGammaConvV1::ProcessTrueMesonCandidatesAOD(AliAODConversionM
             if(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(secMotherLabel))->GetPdgCode()==310){
                iMesonMCInfo = 4;
                hESDTrueSecondaryMotherFromK0sInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weightedSec);
-               if (fDoMesonQA)hESDTrueK0sWithPi0DaughterMCPt[fiCut]
+               if (fDoMesonQA > 0)hESDTrueK0sWithPi0DaughterMCPt[fiCut]
                                  ->Fill(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(secMotherLabel))->Pt());
             }
             if(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(secMotherLabel))->GetPdgCode()==221){
                iMesonMCInfo = 3;
                hESDTrueSecondaryMotherFromEtaInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weightedSec);
-               if (fDoMesonQA)hESDTrueEtaWithPi0DaughterMCPt[fiCut]
+               if (fDoMesonQA > 0)hESDTrueEtaWithPi0DaughterMCPt[fiCut]
+                                 ->Fill(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(secMotherLabel))->Pt());
+            }
+            if(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(secMotherLabel))->GetPdgCode()==3122){
+               iMesonMCInfo = 7;
+               hESDTrueSecondaryMotherFromLambdaInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weightedSec);
+               if (fDoMesonQA > 0)hESDTrueLambdaWithPi0DaughterMCPt[fiCut]
                                  ->Fill(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(secMotherLabel))->Pt());
             }
          }
@@ -1878,10 +2175,11 @@ void AliAnalysisTaskGammaConvV1::ProcessTrueMesonCandidatesAOD(AliAODConversionM
          hESDTruePrimaryMotherW0WeightingInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
          pESDTruePrimaryMotherWeightsInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weighted);
               
-         if (fDoMesonQA){
+         if (fDoMesonQA > 0){
             if(isTruePi0){ // Only primary pi0 for resolution
                hESDTruePrimaryPi0MCPtResolPt[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
                hESDTruePrimaryEtaMCPtResolPt[fiCut]->Fill(static_cast<AliAODMCParticle*>(AODMCTrackArray->At(gamma1MotherLabel))->Pt(),
@@ -1889,18 +2187,21 @@ void AliAnalysisTaskGammaConvV1::ProcessTrueMesonCandidatesAOD(AliAODConversionM
             }
          }
       }
-   }
-   else if(!isTruePi0 && !isTrueEta && fDoMesonQA){ // Background
-      if(gamma0MotherLabel>-1 && gamma1MotherLabel>-1){ // Both Tracks are Photons and have a mother but not Pi0 or Eta
-         iMesonMCInfo = 1;
-         hESDTrueBckGGInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
-      } else { // No photon or without mother
-         hESDTrueBckContInvMassPt[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
+            hESDTrueBckGGInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
+            iMesonMCInfo = 1;
+         } else { // No photon or without mother
+            hESDTrueBckContInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
+         }
       }
-      if((gamma0MotherLabel==-111 || gamma1MotherLabel==-111 || gamma0MotherLabel==-221 || gamma1MotherLabel==-221) ){
+      if( isTruePi0Dalitz || isTrueEtaDalitz ){
          // Dalitz
          iMesonMCInfo = 5;
          hESDTrueMotherDalitzInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
+      } else if (gamma0DalitzCand || gamma1DalitzCand){
+         if (fDoMesonQA > 0)hESDTrueBckContInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
       }
    }
 }
@@ -1968,6 +2269,9 @@ void AliAnalysisTaskGammaConvV1::CalculateBackground(){
                   if(fMoveParticleAccordingToVertex == kTRUE){
                      MoveParticleAccordingToVertex(&previousGoodV0,bgEventVertex);
                   }
+                  if(((AliConversionCuts*)fCutArray->At(fiCut))->GetInPlaneOutOfPlaneCut() != 0){
+                     RotateParticleAccordingToEP(&previousGoodV0,bgEventVertex->fEP,fEventPlaneAngle);
+                  }
 
                   AliAODConversionMother *backgroundCandidate = new AliAODConversionMother(&currentEventGoodV0,&previousGoodV0);
                   backgroundCandidate->CalculateDistanceOfClossetApproachToPrimVtx(fInputEvent->GetPrimaryVertex());
@@ -1999,6 +2303,10 @@ void AliAnalysisTaskGammaConvV1::CalculateBackground(){
                      if(fMoveParticleAccordingToVertex == kTRUE){
                         MoveParticleAccordingToVertex(&previousGoodV0,bgEventVertex);
                      }
+                     if(((AliConversionCuts*)fCutArray->At(fiCut))->GetInPlaneOutOfPlaneCut() != 0){
+                        RotateParticleAccordingToEP(&previousGoodV0,bgEventVertex->fEP,fEventPlaneAngle);
+                     }
+
 
                      AliAODConversionMother *backgroundCandidate = new AliAODConversionMother(&currentEventGoodV0,&previousGoodV0);
                      backgroundCandidate->CalculateDistanceOfClossetApproachToPrimVtx(fInputEvent->GetPrimaryVertex());
@@ -2103,6 +2411,16 @@ void AliAnalysisTaskGammaConvV1::RotateParticle(AliAODConversionPhoton *gamma){
    Double_t rotationValue = fRandom.Rndm()*2*nRadiansPM + TMath::Pi()-nRadiansPM;
    gamma->RotateZ(rotationValue);
 }
+
+//________________________________________________________________________
+void AliAnalysisTaskGammaConvV1::RotateParticleAccordingToEP(AliAODConversionPhoton *gamma, Double_t previousEventEP, Double_t thisEventEP){
+
+   previousEventEP=previousEventEP+TMath::Pi();
+   thisEventEP=thisEventEP+TMath::Pi();
+   Double_t rotationValue= thisEventEP-previousEventEP;
+   gamma->RotateZ(rotationValue);
+}
+
 //________________________________________________________________________
 void AliAnalysisTaskGammaConvV1::MoveParticleAccordingToVertex(AliAODConversionPhoton* particle,const AliGammaConversionAODBGHandler::GammaConversionVertex *vertex){
    //see header file for documentation
@@ -2119,10 +2437,10 @@ void AliAnalysisTaskGammaConvV1::UpdateEventByEventData(){
    //see header file for documentation
    if(fGammaCandidates->GetEntries() >0 ){
       if(((AliConversionMesonCuts*)fMesonCutArray->At(fiCut))->UseTrackMultiplicity()){
-         fBGHandler[fiCut]->AddEvent(fGammaCandidates,fInputEvent->GetPrimaryVertex()->GetX(),fInputEvent->GetPrimaryVertex()->GetY(),fInputEvent->GetPrimaryVertex()->GetZ(),fV0Reader->GetNumberOfPrimaryTracks());
+         fBGHandler[fiCut]->AddEvent(fGammaCandidates,fInputEvent->GetPrimaryVertex()->GetX(),fInputEvent->GetPrimaryVertex()->GetY(),fInputEvent->GetPrimaryVertex()->GetZ(),fV0Reader->GetNumberOfPrimaryTracks(),fEventPlaneAngle);
       }
       else{ // means we use #V0s for multiplicity
-         fBGHandler[fiCut]->AddEvent(fGammaCandidates,fInputEvent->GetPrimaryVertex()->GetX(),fInputEvent->GetPrimaryVertex()->GetY(),fInputEvent->GetPrimaryVertex()->GetZ(),fGammaCandidates->GetEntries());
+         fBGHandler[fiCut]->AddEvent(fGammaCandidates,fInputEvent->GetPrimaryVertex()->GetX(),fInputEvent->GetPrimaryVertex()->GetY(),fInputEvent->GetPrimaryVertex()->GetZ(),fGammaCandidates->GetEntries(),fEventPlaneAngle);
       }
    }
 }
@@ -2224,9 +2542,45 @@ void AliAnalysisTaskGammaConvV1::RelabelAODPhotonCandidates(Bool_t mode){
       delete[] fESDArrayNeg;
    }
 }
+
+void AliAnalysisTaskGammaConvV1::SetLogBinningXTH2(TH2* histoRebin){
+   TAxis *axisafter = histoRebin->GetXaxis(); 
+   Int_t bins = axisafter->GetNbins();
+   Double_t from = axisafter->GetXmin();
+   Double_t to = axisafter->GetXmax();
+   Double_t *newbins = new Double_t[bins+1];
+   newbins[0] = from;
+   Double_t factor = TMath::Power(to/from, 1./bins);
+   for(Int_t i=1; i<=bins; ++i) newbins[i] = factor * newbins[i-1];
+   axisafter->Set(bins, newbins);
+   delete [] newbins;
+
+}
+
 //________________________________________________________________________
 void AliAnalysisTaskGammaConvV1::Terminate(const Option_t *)
 {
 
    //fOutputContainer->Print(); // Will crash on GRID
 }
+
+//________________________________________________________________________
+Int_t AliAnalysisTaskGammaConvV1::GetSourceClassification(Int_t daughter, Int_t pdgCode){
+
+       if (daughter == 111) {
+               if (abs(pdgCode) == 310) return 1; // k0s
+               else if (abs(pdgCode) == 3122) return 2; // Lambda
+               else if (abs(pdgCode) == 130) return 3; // K0L
+               else if (abs(pdgCode) == 2212) return 4; // proton
+               else if (abs(pdgCode) == 2112) return 5; // neutron
+               else if (abs(pdgCode) == 211) return 6; // pion
+               else if (abs(pdgCode) == 321) return 7; // kaon
+               else if (abs(pdgCode) == 113 || abs(pdgCode) == 213 ) return 8; // rho 0,+,-
+               else if (abs(pdgCode) == 3222 || abs(pdgCode) == 3212 || abs(pdgCode) == 3112  ) return 9; // Sigma
+               else if (abs(pdgCode) == 2224 || abs(pdgCode) == 2214 || abs(pdgCode) == 2114 || abs(pdgCode) == 1114  ) return 10; // Delta
+               else if (abs(pdgCode) == 313 || abs(pdgCode) == 323   ) return 11; // K*
+               else return 15;         
+       } 
+       return 15;
+
+}
\ No newline at end of file