]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWGGA/GammaConv/AliAnalysisTaskGammaConvDalitzV1.cxx
set magnetic field if not set
[u/mrichter/AliRoot.git] / PWGGA / GammaConv / AliAnalysisTaskGammaConvDalitzV1.cxx
index 6764450181a29955d420b6f51ee7ac01f7df4552..543713119c6a2aa8ee5cb832d2592e4f31bfaf99 100644 (file)
@@ -68,6 +68,7 @@ fV0Reader(NULL),
    fCutFolder(NULL),
    fESDList(NULL),
    fBackList(NULL),
+   fMotherList(NULL),
    fTrueList(NULL),
    fMCList(NULL),
    fOutputContainer(0),
@@ -126,15 +127,22 @@ fV0Reader(NULL),
    hMCChiCPt(NULL),
    hMCChiCInAccPt(NULL),
    hESDEposEnegTruePi0DalitzInvMassPt(NULL),
+   hESDEposEnegTruePi0DalitzPsiPairDPhi(NULL),
    hESDEposEnegTrueEtaDalitzInvMassPt(NULL),
+   hESDEposEnegTrueEtaDalitzPsiPairDPhi(NULL),
    hESDEposEnegTruePhotonInvMassPt(NULL),
+   hESDEposEnegTruePhotonPsiPairDPhi(NULL),
    hESDEposEnegTrueJPsiInvMassPt(NULL),
    hESDTrueMotherChiCInvMassPt(NULL),
    hESDTrueMotherChiCDiffInvMassPt(NULL),
    hESDTrueMotherInvMassPt(NULL),
    hESDTrueMotherDalitzInvMassPt(NULL),
    hESDTrueMotherPi0GGInvMassPt(NULL),
+   hESDTruePrimaryMotherPi0GGInvMassPt(NULL),
+   hESDTrueSecondaryMotherPi0GGInvMassPt(NULL),
    hESDTruePrimaryMotherInvMassMCPt(NULL),
+   hESDTruePrimaryMotherInvMassPt(NULL),
+   hESDTruePrimaryMotherW0WeightingInvMassPt(NULL),
    hESDTruePrimaryPi0DalitzESDPtMCPt(NULL),
    hESDTrueSecondaryMotherInvMassPt(NULL),
    hESDTrueSecondaryMotherFromK0sInvMassPt(NULL),
@@ -155,6 +163,7 @@ fV0Reader(NULL),
    hESDTruePi0DalitzSecElectronPt(NULL),
    hNEvents(NULL),
    hNGoodESDTracks(NULL),
+   hEtaShift(NULL),
    fRandom(0),
    fUnsmearedPx(NULL),
    fUnsmearedPy(NULL),
@@ -166,6 +175,8 @@ fV0Reader(NULL),
    fMoveParticleAccordingToVertex(kFALSE),
    fIsHeavyIon(kFALSE),
    fDoMesonAnalysis(kTRUE),
+   fDoChicAnalysis(kFALSE),
+   fDoMesonQA(kFALSE),
    fIsFromMBHeader(kTRUE),
    fIsMC(kFALSE)
 {
@@ -184,6 +195,7 @@ AliAnalysisTaskGammaConvDalitzV1::AliAnalysisTaskGammaConvDalitzV1( const char*
    fCutFolder(NULL),
    fESDList(NULL),
    fBackList(NULL),
+   fMotherList(NULL),
    fTrueList(NULL),
    fMCList(NULL),
    fOutputContainer(0),
@@ -242,15 +254,22 @@ AliAnalysisTaskGammaConvDalitzV1::AliAnalysisTaskGammaConvDalitzV1( const char*
    hMCChiCPt(NULL),
    hMCChiCInAccPt(NULL),
    hESDEposEnegTruePi0DalitzInvMassPt(NULL),
+   hESDEposEnegTruePi0DalitzPsiPairDPhi(NULL),
    hESDEposEnegTrueEtaDalitzInvMassPt(NULL),
+   hESDEposEnegTrueEtaDalitzPsiPairDPhi(NULL),
    hESDEposEnegTruePhotonInvMassPt(NULL),
+   hESDEposEnegTruePhotonPsiPairDPhi(NULL),
    hESDEposEnegTrueJPsiInvMassPt(NULL),
    hESDTrueMotherChiCInvMassPt(NULL),
    hESDTrueMotherChiCDiffInvMassPt(NULL),
    hESDTrueMotherInvMassPt(NULL),
    hESDTrueMotherDalitzInvMassPt(NULL),
    hESDTrueMotherPi0GGInvMassPt(NULL),
+   hESDTruePrimaryMotherPi0GGInvMassPt(NULL),
+   hESDTrueSecondaryMotherPi0GGInvMassPt(NULL),
    hESDTruePrimaryMotherInvMassMCPt(NULL),
+   hESDTruePrimaryMotherInvMassPt(NULL),
+   hESDTruePrimaryMotherW0WeightingInvMassPt(NULL),
    hESDTruePrimaryPi0DalitzESDPtMCPt(NULL),
    hESDTrueSecondaryMotherInvMassPt(NULL),
    hESDTrueSecondaryMotherFromK0sInvMassPt(NULL),
@@ -271,6 +290,7 @@ AliAnalysisTaskGammaConvDalitzV1::AliAnalysisTaskGammaConvDalitzV1( const char*
    hESDTruePi0DalitzSecElectronPt(NULL),
    hNEvents(NULL),
    hNGoodESDTracks(NULL),
+   hEtaShift(NULL),
    fRandom(0),
    fUnsmearedPx(NULL),
    fUnsmearedPy(NULL),
@@ -282,6 +302,8 @@ AliAnalysisTaskGammaConvDalitzV1::AliAnalysisTaskGammaConvDalitzV1( const char*
    fMoveParticleAccordingToVertex(kFALSE),
    fIsHeavyIon(kFALSE),
    fDoMesonAnalysis(kTRUE),
+   fDoChicAnalysis(kFALSE),
+   fDoMesonQA(kFALSE),
    fIsFromMBHeader(kTRUE),
    fIsMC(kFALSE)
 {
@@ -321,98 +343,77 @@ AliAnalysisTaskGammaConvDalitzV1::~AliAnalysisTaskGammaConvDalitzV1()
       fGammasPool = 0x0;
    }
 }
-
 //___________________________________________________________
 void AliAnalysisTaskGammaConvDalitzV1::InitBack(){
 
-   Double_t *zBinLimitsArray= new Double_t[9];
-   zBinLimitsArray[0] = -50.00;
-   zBinLimitsArray[1] = -3.375;
-   zBinLimitsArray[2] = -1.605;
-   zBinLimitsArray[3] = -0.225;
-   zBinLimitsArray[4] = 1.065;
-   zBinLimitsArray[5] = 2.445;
-   zBinLimitsArray[6] = 4.245;
-   zBinLimitsArray[7] = 50.00;
-   zBinLimitsArray[8] = 1000.00;
-
-   Double_t *multiplicityBinLimitsArrayTracks= new Double_t[6];
-   multiplicityBinLimitsArrayTracks[0] = 0;
-   multiplicityBinLimitsArrayTracks[1] = 8.5;
-   multiplicityBinLimitsArrayTracks[2] = 16.5;
-   multiplicityBinLimitsArrayTracks[3] = 27.5;
-   multiplicityBinLimitsArrayTracks[4] = 41.5;
-   multiplicityBinLimitsArrayTracks[5] = 200.;
-
-   if(fIsHeavyIon){
-      multiplicityBinLimitsArrayTracks[0] = 0;
-      multiplicityBinLimitsArrayTracks[1] = 200.;
-      multiplicityBinLimitsArrayTracks[2] = 500.;
-      multiplicityBinLimitsArrayTracks[3] = 1000.;
-      multiplicityBinLimitsArrayTracks[4] = 1500.;
-      multiplicityBinLimitsArrayTracks[5] = 5000.;
-   }
-
-   Double_t *multiplicityBinLimitsArrayV0s= new Double_t[5];
-
-   multiplicityBinLimitsArrayV0s[0] = 2;
-   multiplicityBinLimitsArrayV0s[1] = 3;
-   multiplicityBinLimitsArrayV0s[2] = 4;
-   multiplicityBinLimitsArrayV0s[3] = 5;
-   multiplicityBinLimitsArrayV0s[4] = 9999;
-
-   if(fIsHeavyIon){
-      multiplicityBinLimitsArrayV0s[0] = 2;
-      multiplicityBinLimitsArrayV0s[1] = 10;
-      multiplicityBinLimitsArrayV0s[2] = 30;
-      multiplicityBinLimitsArrayV0s[3] = 50;
-      multiplicityBinLimitsArrayV0s[4] = 9999;
-   }
-
    const Int_t nDim = 4;
-   Int_t    nBins[nDim] = {1000,250,8,5};
-   Double_t xMin[nDim]  = {0,0, 0,0};
-   Double_t xMax[nDim]  = {1,25,8,5};
-
-   sESDMotherInvMassPtZM     = new THnSparseF*[fnCuts];
+   Int_t nBins[nDim] = {800,250,7,4};
+   Double_t xMin[nDim] = {0,0, 0,0};
+   Double_t xMax[nDim] = {0.8,25,7,4};
+   
+   sESDMotherInvMassPtZM = new THnSparseF*[fnCuts];
    sESDMotherBackInvMassPtZM = new THnSparseF*[fnCuts];
 
-
    fBGHandler = new AliGammaConversionAODBGHandler*[fnCuts];
-
+   //fBGHandlerRP = new AliConversionAODBGHandlerRP*[fnCuts];
    for(Int_t iCut = 0; iCut<fnCuts;iCut++){
+      //if (((AliConversionMesonCuts*)fCutMesonArray->At(iCut))->DoBGCalculation()){
+
+         
+         TString cutstringElectron     =   ((AliDalitzElectronCuts*)fCutElectronArray->At(iCut))->GetCutNumber();
+         TString cutstringMeson        =   ((AliConversionMesonCuts*)fCutMesonArray->At(iCut))->GetCutNumber();
+         TString cutstringGamma        =   ((AliConversionCuts*)fCutGammaArray->At(iCut))->GetCutNumber();
 
 
-      TString cutstringElectron     =   ((AliDalitzElectronCuts*)fCutElectronArray->At(iCut))->GetCutNumber();
-      TString cutstringMeson        =   ((AliConversionMesonCuts*)fCutMesonArray->At(iCut))->GetCutNumber();
-      TString cutstringGamma        =   ((AliConversionCuts*)fCutGammaArray->At(iCut))->GetCutNumber();
+         
+         Int_t collisionSystem = atoi((TString)(((AliConversionCuts*)fCutGammaArray->At(iCut))->GetCutNumber())(0,1));
+         Int_t centMin = atoi((TString)(((AliConversionCuts*)fCutGammaArray->At(iCut))->GetCutNumber())(1,1));
+         Int_t centMax = atoi((TString)(((AliConversionCuts*)fCutGammaArray->At(iCut))->GetCutNumber())(2,1));
+         
+         if(collisionSystem == 1 || collisionSystem == 2 ||
+            collisionSystem == 5 || collisionSystem == 8 ||
+            collisionSystem == 9){
+            centMin = centMin*10;
+            centMax = centMax*10; 
+         }
+         else if(collisionSystem == 3 || collisionSystem == 6){
+            centMin = centMin*5;
+            centMax = centMax*5;
+         }
+         else if(collisionSystem == 4 || collisionSystem == 7){
+            centMin = ((centMin*5)+45);
+            centMax = ((centMax*5)+45);
+         }
 
 
-      fBackList[iCut] = new TList();
-      fBackList[iCut]->SetName(Form("%s_%s_%s Back histograms",cutstringGamma.Data(),cutstringElectron.Data(),cutstringMeson.Data()));
-      fBackList[iCut]->SetOwner(kTRUE);
-      fCutFolder[iCut]->Add(fBackList[iCut]);
+         fBackList[iCut] = new TList();
+         fBackList[iCut]->SetName(Form("%s_%s_%s Back histograms",cutstringGamma.Data(),cutstringElectron.Data(),cutstringMeson.Data()));
+         fBackList[iCut]->SetOwner(kTRUE);
+         fCutFolder[iCut]->Add(fBackList[iCut]);
 
-      sESDMotherInvMassPtZM[iCut] = new THnSparseF("Back_Mother_InvMass_Pt_z_m","Back_Mother_InvMass_Pt_z_m",nDim,nBins,xMin,xMax);
-      sESDMotherInvMassPtZM[iCut]->Sumw2();
-      fBackList[iCut]->Add(sESDMotherInvMassPtZM[iCut]);
-      sESDMotherBackInvMassPtZM[iCut] = new THnSparseF("Back_Back_InvMass_Pt_z_m","Back_Back_InvMass_Pt_z_m",nDim,nBins,xMin,xMax);
-      sESDMotherBackInvMassPtZM[iCut]->Sumw2();
-      fBackList[iCut]->Add(sESDMotherBackInvMassPtZM[iCut]);
+         sESDMotherBackInvMassPtZM[iCut] = new THnSparseF("Back_Back_InvMass_Pt_z_m","Back_Back_InvMass_Pt_z_m",nDim,nBins,xMin,xMax);
+         fBackList[iCut]->Add(sESDMotherBackInvMassPtZM[iCut]);
 
-      if(((AliDalitzElectronCuts*)fCutElectronArray->At(iCut))->UseTrackMultiplicity()) {
-         fBGHandler[iCut] = new AliGammaConversionAODBGHandler(9,6,((AliDalitzElectronCuts*)fCutElectronArray->At(iCut))->NumberOfRotationEvents());
-         fBGHandler[iCut]->Initialize(zBinLimitsArray, multiplicityBinLimitsArrayTracks);
-      }
-      else{
-         fBGHandler[iCut] = new AliGammaConversionAODBGHandler(9,5,((AliDalitzElectronCuts*)fCutElectronArray->At(iCut))->NumberOfRotationEvents());
-         fBGHandler[iCut]->Initialize(zBinLimitsArray, multiplicityBinLimitsArrayV0s);
-      }
-      if( ( (AliDalitzElectronCuts*)fCutElectronArray->At(iCut))->GetBKGMethod() == 3 ){
+         fMotherList[iCut] = new TList();
+         fMotherList[iCut]->SetName(Form("%s_%s_%s Mother histograms",cutstringGamma.Data(),cutstringElectron.Data(),cutstringMeson.Data()));
+         fMotherList[iCut]->SetOwner(kTRUE);
+         fCutFolder[iCut]->Add(fMotherList[iCut]);
+
+         sESDMotherInvMassPtZM[iCut] = new THnSparseF("Back_Mother_InvMass_Pt_z_m","Back_Mother_InvMass_Pt_z_m",nDim,nBins,xMin,xMax);
+         fMotherList[iCut]->Add(sESDMotherInvMassPtZM[iCut]);
+
+         
+         fBGHandler[iCut] = new AliGammaConversionAODBGHandler(
+                                                                  collisionSystem,centMin,centMax,
+                                                                  ((AliDalitzElectronCuts*)fCutElectronArray->At(iCut))->NumberOfRotationEvents(),
+                                                                  ((AliDalitzElectronCuts*)fCutElectronArray->At(iCut))->UseTrackMultiplicity());
+        
+        if( ( (AliDalitzElectronCuts*)fCutElectronArray->At(iCut))->GetBKGMethod() == 3 ){
          fGammasPool[iCut] = new TList();
-      }
-   }
+        }
 
+      //}
+   }
 }
 
 //______________________________________________________________________
@@ -445,13 +446,17 @@ void AliAnalysisTaskGammaConvDalitzV1::UserCreateOutputObjects()
    fCutFolder                      = new TList*[fnCuts];
    fESDList                        = new TList*[fnCuts];
    fBackList                       = new TList*[fnCuts];
+   fMotherList                     = new TList*[fnCuts];
    hNEvents                        = new TH1I*[fnCuts];
    hNGoodESDTracks                 = new TH1I*[fnCuts];
+   hEtaShift                       = new TProfile*[fnCuts];
    hESDConvGammaPt                 = new TH1F*[fnCuts];
    hESDDalitzElectronPt            = new TH1F*[fnCuts];
    hESDDalitzPositronPt            = new TH1F*[fnCuts];
    hESDDalitzElectronPhi          = new TH1F*[fnCuts];
    hESDDalitzPositronPhi          = new TH1F*[fnCuts];
+   
+   if( fDoMesonQA ) {
    hESDDalitzElectronAfterPt      = new TH1F*[fnCuts];
    hESDDalitzPositronAfterPt       = new TH1F*[fnCuts];
    hESDDalitzElectronAfterPhi      = new TH1F*[fnCuts];
@@ -466,10 +471,20 @@ void AliAnalysisTaskGammaConvDalitzV1::UserCreateOutputObjects()
    hESDEposEnegPsiPairDPhi         = new TH2F*[fnCuts];
    hESDEposEnegInvMassPt           = new TH2F*[fnCuts];
    hESDEposEnegLikeSignBackInvMassPt = new TH2F*[fnCuts];
+   
+   }
+   
+   
+   
    hESDMotherInvMassPt             = new TH2F*[fnCuts];
+   
+   if(fDoChicAnalysis) {
    hESDPi0MotherInvMassPt          = new TH2F*[fnCuts];
    hESDPi0MotherDiffInvMassPt      = new TH2F*[fnCuts];
-   hESDPi0MotherDiffLimInvMassPt      = new TH2F*[fnCuts];
+   hESDPi0MotherDiffLimInvMassPt   = new TH2F*[fnCuts];
+   }
+   
+   
    hESDMotherBackInvMassPt         = new TH2F*[fnCuts];
 
 
@@ -509,6 +524,9 @@ void AliAnalysisTaskGammaConvDalitzV1::UserCreateOutputObjects()
       else hNGoodESDTracks[iCut] = new TH1I("GoodESDTracks","GoodESDTracks",200,0,200);
       fESDList[iCut]->Add(hNGoodESDTracks[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]);
 
@@ -525,15 +543,18 @@ void AliAnalysisTaskGammaConvDalitzV1::UserCreateOutputObjects()
       hESDDalitzPositronPhi[iCut] = new TH1F("ESD_DalitzPositron_Phi","ESD_DalitzPositron_Phi",360,0,2*TMath::Pi());
       fESDList[iCut]->Add(hESDDalitzPositronPhi[iCut]);
       
+     
       
+      if ( fDoMesonQA ) {
+       
+        
       
       hESDDalitzElectronAfterPt[iCut] = new TH1F("ESD_DalitzElectron_After_Pt","ESD_DalitzElectron_After_Pt",1000,0,25);
       fESDList[iCut]->Add(hESDDalitzElectronAfterPt[iCut]);
 
       hESDDalitzPositronAfterPt[iCut] = new TH1F("ESD_DalitzPositron_After_Pt","ESD_DalitzPositron_After_Pt",1000,0,25);
       fESDList[iCut]->Add(hESDDalitzPositronAfterPt[iCut]);
-      
-      
+                  
       hESDDalitzElectronAfterPhi[iCut] = new TH1F("ESD_DalitzElectron_After_Phi","ESD_DalitzElectron_After_Phi",360,0,2*TMath::Pi());
       fESDList[iCut]->Add(hESDDalitzElectronAfterPhi[iCut]);
 
@@ -558,6 +579,9 @@ void AliAnalysisTaskGammaConvDalitzV1::UserCreateOutputObjects()
       hESDDalitzPosEleAfterTPCdEdxSignal[iCut] =new TH2F("ESD_DalitzPosEle_After_TPCdEdxSignal","ESD_DalitzPosEle_After_TPCdEdxSignal" ,150,0.05,20.0,800,0.0,200);
       fESDList[iCut]->Add(hESDDalitzPosEleAfterTPCdEdxSignal[iCut]);  
       
+      hESDMotherPhi[iCut] = new TH1F("ESD_DalitzMother_Phi","ESD_DalitzMother_Phi",360,0,2*TMath::Pi());
+      fESDList[iCut]->Add(hESDMotherPhi[iCut]);
+      
       hESDEposEnegPsiPairDPhi[iCut] = new TH2F("ESD_EposEneg_PsiPair_DPhi","ESD_EposEneg_PsiPair_DPhi", 100, -1.0,1.0,100,-1.0,1.0 );
       fESDList[iCut]->Add(hESDEposEnegPsiPairDPhi[iCut]);
 
@@ -566,12 +590,21 @@ void AliAnalysisTaskGammaConvDalitzV1::UserCreateOutputObjects()
       
       hESDEposEnegLikeSignBackInvMassPt[iCut]  = new TH2F("ESD_EposEneg_LikeSignBack_InvMassPt","ESD_EposEneg_LikeSignBack_InvMassPt",5000,0.,5.,100,0.,10.);
       fESDList[iCut]->Add(hESDEposEnegLikeSignBackInvMassPt[iCut]);
+      
+      }
+      
+      
+      
+      
+      
+      
+     
 
-      hESDMotherInvMassPt[iCut] = new TH2F("ESD_DalitzMother_InvMass_Pt","ESD_DalitzMother_InvMass_Pt",1000,0,1,250,0,25);
+      hESDMotherInvMassPt[iCut] = new TH2F("ESD_DalitzMother_InvMass_Pt","ESD_DalitzMother_InvMass_Pt",800,0,0.8,250,0,25);
       fESDList[iCut]->Add(hESDMotherInvMassPt[iCut]);
                                                                                  
-      hESDMotherPhi[iCut] = new TH1F("ESD_DalitzMother_Phi","ESD_DalitzMother_Phi",360,0,2*TMath::Pi());
-      fESDList[iCut]->Add(hESDMotherPhi[iCut]);
+       
+      if( fDoChicAnalysis) {
                   
       hESDPi0MotherInvMassPt[iCut] = new TH2F("ESD_Pi0Mother_InvMass_Pt","ESD_Pi0Mother_InvMass_Pt",4000,0,4,250,0,25);
       fESDList[iCut]->Add(hESDPi0MotherInvMassPt[iCut]);
@@ -581,12 +614,16 @@ void AliAnalysisTaskGammaConvDalitzV1::UserCreateOutputObjects()
 
       hESDPi0MotherDiffLimInvMassPt[iCut] = new TH2F("ESD_Pi0Mother_DiffLimInvMass_Pt","ESD_Pi0Mother_DiffLimInvMass_Pt",2000,0,2,250,0,25);
       fESDList[iCut]->Add(hESDPi0MotherDiffLimInvMassPt[iCut]);
+      
+      }
 
-      hESDMotherBackInvMassPt[iCut] = new TH2F("ESD_DalitzBackground_InvMass_Pt","ESD_DalitzBackground_InvMass_Pt",1000,0,1,250,0,25);
-      fESDList[iCut]->Add(hESDMotherBackInvMassPt[iCut]);
 
+      hESDMotherBackInvMassPt[iCut] = new TH2F("ESD_DalitzBackground_InvMass_Pt","ESD_DalitzBackground_InvMass_Pt",800,0,0.8,250,0,25);
+      fESDList[iCut]->Add(hESDMotherBackInvMassPt[iCut]);
 
 
+      if ( fDoMesonQA ) {
+       
       TAxis *AxisAfter = hESDDalitzPosEleAfterTPCdEdx[iCut]->GetXaxis(); 
       Int_t bins = AxisAfter->GetNbins();
       Double_t from = AxisAfter->GetXmin();
@@ -601,6 +638,8 @@ void AliAnalysisTaskGammaConvDalitzV1::UserCreateOutputObjects()
       AxisAfter->Set(bins, newBins);
 
       delete [] newBins;
+      
+      }
 
             
       
@@ -648,19 +687,34 @@ void AliAnalysisTaskGammaConvDalitzV1::UserCreateOutputObjects()
       hMCEtaInAccPt = new TH1F*[fnCuts];
                        hMCChiCPt = new TH1F*[fnCuts];
                        hMCChiCInAccPt = new TH1F*[fnCuts];
+                       
+                       
+      if ( fDoMesonQA ) {
+       hESDEposEnegTruePi0DalitzInvMassPt           = new TH2F*[fnCuts];
+        hESDEposEnegTruePi0DalitzPsiPairDPhi         = new TH2F*[fnCuts];
+       hESDEposEnegTrueEtaDalitzInvMassPt           = new TH2F*[fnCuts];
+        hESDEposEnegTrueEtaDalitzPsiPairDPhi         = new TH2F*[fnCuts];
+       hESDEposEnegTruePhotonInvMassPt              = new TH2F*[fnCuts];
+        hESDEposEnegTruePhotonPsiPairDPhi            = new TH2F*[fnCuts];
+       hESDEposEnegTrueJPsiInvMassPt                = new TH2F*[fnCuts];
+      }
       
-      hESDEposEnegTruePi0DalitzInvMassPt           = new TH2F*[fnCuts];
-      hESDEposEnegTrueEtaDalitzInvMassPt           = new TH2F*[fnCuts];
-      hESDEposEnegTruePhotonInvMassPt              = new TH2F*[fnCuts];
-      hESDEposEnegTrueJPsiInvMassPt                = new TH2F*[fnCuts];
       
+      if( fDoChicAnalysis ){
       hESDTrueMotherChiCInvMassPt = new TH2F*[fnCuts];
       hESDTrueMotherChiCDiffInvMassPt = new TH2F*[fnCuts];
+      }
+      
+      
       hESDTrueMotherInvMassPt = new TH2F*[fnCuts];
       hESDTrueMotherDalitzInvMassPt = new TH2F*[fnCuts];
       hESDTrueMotherPi0GGInvMassPt = new TH2F*[fnCuts];
+      hESDTruePrimaryMotherPi0GGInvMassPt = new TH2F*[fnCuts];
+      hESDTrueSecondaryMotherPi0GGInvMassPt = new TH2F*[fnCuts];
       hESDTruePrimaryPi0DalitzESDPtMCPt = new TH2F*[fnCuts];
       hESDTruePrimaryMotherInvMassMCPt = new TH2F*[fnCuts];
+      hESDTruePrimaryMotherInvMassPt   = new TH2F*[fnCuts];
+      hESDTruePrimaryMotherW0WeightingInvMassPt = new TH2F*[fnCuts];
       hESDTrueSecondaryMotherInvMassPt = new TH2F*[fnCuts];
       hESDTrueSecondaryMotherFromK0sInvMassPt = new TH2F*[fnCuts];
       hESDTrueBckGGInvMassPt = new TH2F*[fnCuts];
@@ -696,31 +750,40 @@ void AliAnalysisTaskGammaConvDalitzV1::UserCreateOutputObjects()
                                 fMCList[iCut]->Add(hMCAllElectronsPt[iCut]);
                                 
                                 hMCPi0DalitzGammaPt[iCut] = new TH1F("MC_Pi0DalitzGamma_Pt","MC_Pi0DalitzGamma_Pt",250,0,25);
+                                 hMCPi0DalitzGammaPt[iCut]->Sumw2();
                                 fMCList[iCut]->Add(hMCPi0DalitzGammaPt[iCut]);
                                 
                                 hMCPi0DalitzPositronPt[iCut] = new TH1F("MC_Pi0DalitzPositron_Pt","MC_Pi0DalitzPositron_Pt",1000,0,25);
+                                 hMCPi0DalitzPositronPt[iCut]->Sumw2();
                                 fMCList[iCut]->Add(hMCPi0DalitzPositronPt[iCut]);
                                 
                                 hMCPi0DalitzElectronPt[iCut] = new TH1F("MC_Pi0DalitzElectron_Pt","MC_Pi0DalitzElectron_Pt",1000,0,25);
+                                 hMCPi0DalitzElectronPt[iCut]->Sumw2();
                                 fMCList[iCut]->Add(hMCPi0DalitzElectronPt[iCut]);
                                 
                                 
                                 hMCPi0Pt[iCut] = new TH1F("MC_Pi0_Pt","MC_Pi0_Pt",250,0,25);
+                                 hMCPi0Pt[iCut]->Sumw2();
                                 fMCList[iCut]->Add(hMCPi0Pt[iCut]);
                                 
                                 hMCPi0GGPt[iCut] = new TH1F("MC_Pi0_GG_Pt","MC_Pi0_GG_Pt",250,0,25);
+                                 hMCPi0GGPt[iCut]->Sumw2();
                                 fMCList[iCut]->Add(hMCPi0GGPt[iCut]);
                                 
                                 hMCEtaPt[iCut] = new TH1F("MC_Eta_Pt","MC_Eta_Pt",250,0,25);
+                                 hMCEtaPt[iCut]->Sumw2();
                                 fMCList[iCut]->Add(hMCEtaPt[iCut]);
 
                                 hMCEtaGGPt[iCut] = new TH1F("MC_Eta_GG_Pt","MC_Eta_GG_Pt",250,0,25);
+                                 hMCEtaGGPt[iCut]->Sumw2();
                                 fMCList[iCut]->Add(hMCEtaGGPt[iCut]);
                                 
                                 hMCPi0InAccPt[iCut] = new TH1F("MC_Pi0DalitzInAcc_Pt","MC_Pi0DalitzInAcc_Pt",250,0,25);
+                                 hMCPi0InAccPt[iCut]->Sumw2();
                                 fMCList[iCut]->Add(hMCPi0InAccPt[iCut]);
 
                                 hMCEtaInAccPt[iCut] = new TH1F("MC_EtaDalitzInAcc_Pt","MC_EtaDalitzInAcc_Pt",250,0,25);
+                                 hMCEtaInAccPt[iCut]->Sumw2();
                                 fMCList[iCut]->Add(hMCEtaInAccPt[iCut]);
 
                                 hMCChiCPt[iCut] = new TH1F("MC_ChiC_Pt","MC_ChiC_Pt",250,0,25);
@@ -734,20 +797,38 @@ void AliAnalysisTaskGammaConvDalitzV1::UserCreateOutputObjects()
          fTrueList[iCut]->SetOwner(kTRUE);
          fCutFolder[iCut]->Add(fTrueList[iCut]);
 
-        
+        if ( fDoMesonQA ) {
+
+
         hESDEposEnegTruePi0DalitzInvMassPt[iCut] = new TH2F("ESD_EposEneg_TruePi0Dalitz_InvMassPt","ESD_EposEneg_TruePi0Dalitz_InvMassPt",5000,0.,5.,100,0.,10.);
         fTrueList[iCut]->Add(hESDEposEnegTruePi0DalitzInvMassPt[iCut]);
+
+         hESDEposEnegTruePi0DalitzPsiPairDPhi[iCut] = new TH2F("ESD_EposEneg_TruePi0Dalitz_PsiPair_DPhi","ESD_EposEneg_TruePi0Dalitz_PsiPair_DPhi", 100, -1.0,1.0,100,-1.0,1.0 );
+         fTrueList[iCut]->Add(hESDEposEnegTruePi0DalitzPsiPairDPhi[iCut]);
+
         
         hESDEposEnegTrueEtaDalitzInvMassPt[iCut] = new TH2F("ESD_EposEneg_TrueEtaDalitz_InvMassPt","ESD_EposEneg_TrueEtaDalitz_InvMassPt",5000,0.,5.,100,0.,10.);
         fTrueList[iCut]->Add(hESDEposEnegTrueEtaDalitzInvMassPt[iCut]);
+
+         hESDEposEnegTrueEtaDalitzPsiPairDPhi[iCut] = new TH2F("ESD_EposEneg_TrueEtaDalitz_PsiPair_DPhi","ESD_EposEneg_TrueEtaDalitz_PsiPair_DPhi", 100, -1.0,1.0,100,-1.0,1.0 );
+         fTrueList[iCut]->Add(hESDEposEnegTrueEtaDalitzPsiPairDPhi[iCut]);
         
         hESDEposEnegTruePhotonInvMassPt[iCut] = new TH2F("ESD_EposEneg_TruePhoton_InvMassPt","ESD_EposEneg_TruePhoton_InvMassPt",5000,0.,5.,100,0.,10.);
         fTrueList[iCut]->Add(hESDEposEnegTruePhotonInvMassPt[iCut]);
-        
+        
+         hESDEposEnegTruePhotonPsiPairDPhi[iCut] = new TH2F("ESD_EposEneg_TruePhoton_PsiPair_DPhi","ESD_EposEneg_TruePhoton_PsiPair_DPhi", 100, -1.0,1.0,100,-1.0,1.0 );
+         fTrueList[iCut]->Add(hESDEposEnegTruePhotonPsiPairDPhi[iCut]);
         hESDEposEnegTrueJPsiInvMassPt[iCut] = new TH2F("ESD_EposEneg_TrueJPsi_InvMassPt","ESD_EposEneg_TrueJPsi_InvMassPt",5000,0.,5.,100,0.,10.);
         fTrueList[iCut]->Add(hESDEposEnegTrueJPsiInvMassPt[iCut]);
 
 
+
+
+
+        }
+
+
          hESDTruePositronPt[iCut] = new TH1F("ESD_TruePositron_Pt","ESD_TruePositron_Pt",1000,0,25);
          fTrueList[iCut]->Add(hESDTruePositronPt[iCut]);
 
@@ -784,41 +865,108 @@ void AliAnalysisTaskGammaConvDalitzV1::UserCreateOutputObjects()
          hESDTruePi0DalitzSecPositronPt[iCut] = new TH1F("ESD_TruePi0DalitzSecPositron_Pt","ESD_TruePi0DalitzSecPositron_Pt",1000,0,25);
          fTrueList[iCut]->Add(hESDTruePi0DalitzSecPositronPt[iCut]);
 
-        hESDTrueMotherChiCInvMassPt[iCut] = new TH2F("ESD_TrueMotherChiC_InvMass_Pt","ESD_TrueMotherChiC_InvMass_Pt",1000,0,4,250,0,25);
+        if( fDoChicAnalysis) { 
+          
+        hESDTrueMotherChiCInvMassPt[iCut] = new TH2F("ESD_TrueMotherChiC_InvMass_Pt","ESD_TrueMotherChiC_InvMass_Pt",4000,0,4,250,0,25);
          fTrueList[iCut]->Add(hESDTrueMotherChiCInvMassPt[iCut]);
 
-        hESDTrueMotherChiCDiffInvMassPt[iCut] = new TH2F("ESD_TrueMotherChiCDiff_InvMass_Pt","ESD_TrueMotherChiCDiff_InvMass_Pt",1000,0,1,250,0,25);
+        hESDTrueMotherChiCDiffInvMassPt[iCut] = new TH2F("ESD_TrueMotherChiCDiff_InvMass_Pt","ESD_TrueMotherChiCDiff_InvMass_Pt",2000,0,2,250,0,25);
          fTrueList[iCut]->Add(hESDTrueMotherChiCDiffInvMassPt[iCut]);
+        
+        }
 
-         hESDTrueMotherInvMassPt[iCut] = new TH2F("ESD_TrueMother_InvMass_Pt","ESD_TrueMother_InvMass_Pt",1000,0,1,250,0,25);
+        hESDTrueMotherInvMassPt[iCut] = new TH2F("ESD_TrueMother_InvMass_Pt","ESD_TrueMother_InvMass_Pt",800,0,0.8,250,0,25);
+         hESDTrueMotherInvMassPt[iCut]->Sumw2();
          fTrueList[iCut]->Add(hESDTrueMotherInvMassPt[iCut]);
         
-        hESDTrueMotherDalitzInvMassPt[iCut] = new TH2F("ESD_TrueMother_Dalitz_InvMass_Pt","ESD_TrueMother_Dalitz_InvMass_Pt",1000,0,1,250,0,25);
+        hESDTrueMotherDalitzInvMassPt[iCut] = new TH2F("ESD_TrueMother_Dalitz_InvMass_Pt","ESD_TrueMother_Dalitz_InvMass_Pt",800,0,0.8,250,0,25);
+         hESDTrueMotherDalitzInvMassPt[iCut]->Sumw2();
          fTrueList[iCut]->Add(hESDTrueMotherDalitzInvMassPt[iCut]);
         
         
         
         
 
-         hESDTrueMotherPi0GGInvMassPt[iCut] = new TH2F("ESD_TrueMotherPi0GG_InvMass_Pt","ESD_TrueMotherPi0GG_InvMass_Pt",1000,0,1,250,0,25);
+         hESDTrueMotherPi0GGInvMassPt[iCut] = new TH2F("ESD_TrueMotherPi0GG_InvMass_Pt","ESD_TrueMotherPi0GG_InvMass_Pt",800,0,0.8,250,0,25);
+         hESDTrueMotherPi0GGInvMassPt[iCut]->Sumw2();
          fTrueList[iCut]->Add(hESDTrueMotherPi0GGInvMassPt[iCut]);
+
+         hESDTruePrimaryMotherPi0GGInvMassPt[iCut] = new TH2F("ESD_TruePrimaryMotherPi0GG_InvMass_Pt","ESD_TruePrimaryMotherPi0GG_InvMass_Pt",800,0,0.8,250,0,25);
+         hESDTruePrimaryMotherPi0GGInvMassPt[iCut]->Sumw2();
+         fTrueList[iCut]->Add(hESDTruePrimaryMotherPi0GGInvMassPt[iCut]);
+
+         hESDTrueSecondaryMotherPi0GGInvMassPt[iCut] = new TH2F("ESD_TrueSecondaryMotherPi0GG_InvMass_Pt","ESD_TrueSecondaryMotherPi0GG_InvMass_Pt",800,0,0.8,250,0,25);
+         hESDTrueSecondaryMotherPi0GGInvMassPt[iCut]->Sumw2();
+         fTrueList[iCut]->Add(hESDTrueSecondaryMotherPi0GGInvMassPt[iCut]);
+
          hESDTruePrimaryPi0DalitzESDPtMCPt[iCut] = new TH2F("ESD_TruePrimaryPi0Dalitz_ESDPt_MCPt","ESD_TruePrimaryPi0Dalitz_ESDPt_MCPt",250,0,25,250,0,25);
+         hESDTruePrimaryPi0DalitzESDPtMCPt[iCut]->Sumw2();
          fTrueList[iCut]->Add(hESDTruePrimaryPi0DalitzESDPtMCPt[iCut]);
-         hESDTruePrimaryMotherInvMassMCPt[iCut] = new TH2F("ESD_TruePrimaryMother_InvMass_MCPt","ESD_TrueDalitzPrimaryMother_InvMass_MCPt",1000,0,1,250,0,25);
+         hESDTruePrimaryMotherInvMassMCPt[iCut] = new TH2F("ESD_TruePrimaryMother_InvMass_MCPt","ESD_TrueDalitzPrimaryMother_InvMass_MCPt",800,0,0.8,250,0,25);
+         hESDTruePrimaryMotherInvMassMCPt[iCut]->Sumw2();
          fTrueList[iCut]->Add(hESDTruePrimaryMotherInvMassMCPt[iCut]);
-         hESDTrueSecondaryMotherInvMassPt[iCut] = new TH2F("ESD_TrueDalitzSecondaryMother_InvMass_Pt","ESD_TrueDalitzSecondaryMother_InvMass_Pt",1000,0,1,250,0,25);
+         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_TruePrimaryMotherW0Weighting_InvMass_Pt","ESD_TruePrimaryMotherW0Weighting_InvMass_Pt",800,0,0.8,250,0,25);
+         hESDTruePrimaryMotherW0WeightingInvMassPt[iCut]->Sumw2();
+         fTrueList[iCut]->Add(hESDTruePrimaryMotherW0WeightingInvMassPt[iCut]); 
+
+         hESDTrueSecondaryMotherInvMassPt[iCut] = new TH2F("ESD_TrueDalitzSecondaryMother_InvMass_Pt","ESD_TrueDalitzSecondaryMother_InvMass_Pt",800,0,0.8,250,0,25);
+         hESDTrueSecondaryMotherInvMassPt[iCut]->Sumw2();
          fTrueList[iCut]->Add(hESDTrueSecondaryMotherInvMassPt[iCut]);
          //                            hESDTrueSecondaryMotherFromK0sInvMassPt[iCut] = new TH2F("ESD_TrueDalitzSecondaryMotherFromK0s_InvMass_Pt","ESD_TrueDalitzSecondaryMotherFromK0s_InvMass_Pt",1000,0,1,250,0,25);
          //                            fTrueList[iCut]->Add(hESDTrueSecondaryMotherFromK0sInvMassPt[iCut]);
-         hESDTrueBckGGInvMassPt[iCut] = new TH2F("ESD_TrueDalitzBckGG_InvMass_Pt","ESD_TrueDalitzBckGG_InvMass_Pt",1000,0,1,250,0,25);
+         hESDTrueBckGGInvMassPt[iCut] = new TH2F("ESD_TrueDalitzBckGG_InvMass_Pt","ESD_TrueDalitzBckGG_InvMass_Pt",800,0,0.8,250,0,25);
          fTrueList[iCut]->Add(hESDTrueBckGGInvMassPt[iCut]);
-         hESDTrueBckContInvMassPt[iCut] = new TH2F("ESD_TrueDalitzBckCont_InvMass_Pt","ESD_TrueDalitzBckCont_InvMass_Pt",1000,0,1,250,0,25);
+         hESDTrueBckContInvMassPt[iCut] = new TH2F("ESD_TrueDalitzBckCont_InvMass_Pt","ESD_TrueDalitzBckCont_InvMass_Pt",800,0,0.8,250,0,25);
          fTrueList[iCut]->Add(hESDTrueBckContInvMassPt[iCut]);
          //                            hESDTrueMotherGGInvMassPt[iCut] = new TH2F("ESD_TrueGammaGamma_InvMass_Pt","ESD_TrueGammaGamma_InvMass_Pt",1000,0,1,250,0,25);
          //                            fTrueList[iCut]->Add(hESDTrueMotherGGInvMassPt[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());
+        
+        
+        
+   fElecSelector=(AliDalitzElectronSelector*)AliAnalysisManager::GetAnalysisManager()->GetTask("ElectronSelector");
+   if(!fElecSelector){printf("Error: No ElectronSelector");return;} // GetV0Reader
+     
+    if( fElecSelector ){
+
+      if ( ((AliDalitzElectronCuts*)fElecSelector->GetDalitzElectronCuts())->GetCutHistograms() ){
+         fOutputContainer->Add( ((AliDalitzElectronCuts*)fElecSelector->GetDalitzElectronCuts())->GetCutHistograms() );
+      }
+   }  
+
+   for(Int_t iCut = 0; iCut<fnCuts;iCut++){
+
+      if( fCutElectronArray ){
+         if( ((AliDalitzElectronCuts*)fCutElectronArray->At(iCut))->GetCutHistograms() ) {
+            fCutFolder[iCut]->Add( ((AliDalitzElectronCuts*)fCutElectronArray->At(iCut))->GetCutHistograms() );
+         }
+      }
+
+      if( fCutMesonArray  ) {
+         if( ((AliConversionMesonCuts*)fCutMesonArray->At(iCut))->GetCutHistograms() ) {
+            fCutFolder[iCut]->Add( ((AliConversionMesonCuts*)fCutMesonArray->At(iCut))->GetCutHistograms());
+         }
+      }
+
+      if( fCutGammaArray ) {
+         if( ((AliConversionCuts*)fCutGammaArray->At(iCut))->GetCutHistograms() ) {
+            fCutFolder[iCut]->Add( ((AliConversionCuts*)fCutGammaArray->At(iCut))->GetCutHistograms()  );
+         }
+      }
+   }
 
    PostData(1, fOutputContainer);
 
@@ -856,7 +1004,8 @@ void AliAnalysisTaskGammaConvDalitzV1::UserExec(Option_t *)
    fSelectorElectronIndex = fElecSelector->GetReconstructedElectronsIndex(); // Electrons from default Cut
    fSelectorPositronIndex = fElecSelector->GetReconstructedPositronsIndex(); // Positrons from default Cut
 
-   CountESDTracks(); // Estimate Event Multiplicity
+   //CountESDTracks(); // Estimate Event Multiplicity
+   fNumberOfESDTracks = fV0Reader->GetNumberOfPrimaryTracks();
    //AddTaskContainers(); //Add conatiner
 
    for(Int_t iCut = 0; iCut<fnCuts; iCut++){
@@ -953,19 +1102,36 @@ void AliAnalysisTaskGammaConvDalitzV1::UserExec(Option_t *)
 Bool_t AliAnalysisTaskGammaConvDalitzV1::Notify()
 {
    for(Int_t iCut = 0; iCut<fnCuts;iCut++){
-      if(!((AliConversionCuts*)fCutGammaArray->At(iCut))->GetDoEtaShift()) continue; // No Eta Shift requested, continue
+      
+
+      if( !((AliConversionCuts*)fCutGammaArray->At(iCut))->GetDoEtaShift() ){
+
+         /*if (((AliConversionCuts*)fCutGammaArray->At(iCut))->GetEtaShift() != 0.){
+            printf("Error: Gamma Conversion Dalitz Task %s :: Eta Shift not requested but set to %f, reset to 00. \n\n",
+                   (((AliConversionCuts*)fCutGammaArray->At(iCut))->GetCutNumber()).Data(),((AliConversionCuts*)fCutGammaArray->At(iCut))->GetEtaShift());
+            ((AliConversionCuts*)fCutGammaArray->At(iCut))->SetEtaShift(0.);
+            ((AliDalitzElectronCuts*)fCutElectronArray->At(iCut))->SetEtaShift(0.);
+      
+            
+         }*/
+         hEtaShift[iCut]->Fill(0.,0.);
+         continue; // No Eta Shift requested, continue
+      }
+    
       
       if( ((AliConversionCuts*)fCutGammaArray->At(iCut))->GetEtaShift() == 0.0){ // Eta Shift requested but not set, get shift automatically
          ((AliConversionCuts*)fCutGammaArray->At(iCut))->GetCorrectEtaShiftFromPeriod(fV0Reader->GetPeriodName());
          ((AliConversionCuts*)fCutGammaArray->At(iCut))->DoEtaShift(kFALSE); // Eta Shift Set, make sure that it is called only once   
         ((AliDalitzElectronCuts*)fCutElectronArray->At(iCut))->SetEtaShift( ((AliConversionCuts*)fCutGammaArray->At(iCut))->GetEtaShift() );
+         hEtaShift[iCut]->Fill(0.,(((AliConversionCuts*)fCutGammaArray->At(iCut))->GetEtaShift()));
          continue;
       }
       else{
-         printf(" Gamma Conversion Task %s :: Eta Shift Manually Set to %f \n\n",
+         printf(" Gamma Conversion Dalitz Task %s :: Eta Shift Manually Set to %f \n\n",
          (((AliConversionCuts*)fCutGammaArray->At(iCut))->GetCutNumber()).Data(),((AliConversionCuts*)fCutGammaArray->At(iCut))->GetEtaShift());
          ((AliConversionCuts*)fCutGammaArray->At(iCut))->DoEtaShift(kFALSE); // Eta Shift Set, make sure that it is called only once   
         ((AliDalitzElectronCuts*)fCutElectronArray->At(iCut))->SetEtaShift( ((AliConversionCuts*)fCutGammaArray->At(iCut))->GetEtaShift() );
+          hEtaShift[iCut]->Fill(0.,(((AliConversionCuts*)fCutGammaArray->At(iCut))->GetEtaShift()));
       }
    }
    
@@ -976,40 +1142,7 @@ Bool_t AliAnalysisTaskGammaConvDalitzV1::Notify()
 void AliAnalysisTaskGammaConvDalitzV1::Terminate(const Option_t *)
 {
 
-   if( fElecSelector ){
-
-      if ( ((AliDalitzElectronCuts*)fElecSelector->GetDalitzElectronCuts())->GetCutHistograms() ){
-         fOutputContainer->Add( ((AliDalitzElectronCuts*)fElecSelector->GetDalitzElectronCuts())->GetCutHistograms() );
-      }
-   }
-
-  if ( fV0Reader ) {
-
-      if ( ((AliConversionCuts*)fV0Reader->GetConversionCuts())->GetCutHistograms() ){
-         fOutputContainer->Add(  ((AliConversionCuts*)fV0Reader->GetConversionCuts())->GetCutHistograms() );
-      }
-   }
-
-   for(Int_t iCut = 0; iCut<fnCuts;iCut++){
-
-      if( fCutElectronArray ){
-         if( ((AliDalitzElectronCuts*)fCutElectronArray->At(iCut))->GetCutHistograms() ) {
-            fCutFolder[iCut]->Add( ((AliDalitzElectronCuts*)fCutElectronArray->At(iCut))->GetCutHistograms() );
-         }
-      }
-
-      if( fCutMesonArray  ) {
-         if( ((AliConversionMesonCuts*)fCutMesonArray->At(iCut))->GetCutHistograms() ) {
-            fCutFolder[iCut]->Add( ((AliConversionMesonCuts*)fCutMesonArray->At(iCut))->GetCutHistograms());
-         }
-      }
-
-      if( fCutGammaArray ) {
-         if( ((AliConversionCuts*)fCutGammaArray->At(iCut))->GetCutHistograms() ) {
-            fCutFolder[iCut]->Add( ((AliConversionCuts*)fCutGammaArray->At(iCut))->GetCutHistograms()  );
-         }
-      }
-   }
+///Grid
 
 }
 //________________________________________________________________________
@@ -1196,14 +1329,16 @@ void AliAnalysisTaskGammaConvDalitzV1::ProcessElectronCandidates(){
    }
 
 
-   vector<Int_t> lGoodElectronIndex(0);
-   vector<Int_t> lGoodPositronIndex(0);
-
+   vector<Int_t> lGoodElectronIndexPrev(0);
+   vector<Int_t> lGoodPositronIndexPrev(0);
+   
+   
+  
 
    for(UInt_t i = 0; i < fSelectorElectronIndex.size(); i++){
     AliESDtrack* electronCandidate = fESDEvent->GetTrack(fSelectorElectronIndex[i]);
     if(! ((AliDalitzElectronCuts*)fCutElectronArray->At(fiCut))->ElectronIsSelected(electronCandidate) ) continue;
-       lGoodElectronIndex.push_back(   fSelectorElectronIndex[i] );
+       lGoodElectronIndexPrev.push_back(   fSelectorElectronIndex[i] );
        hESDDalitzElectronPt[fiCut]->Fill(electronCandidate->Pt());
         hESDDalitzElectronPhi[fiCut]->Fill(electronCandidate->Phi());
          if( fMCEvent ) {
@@ -1234,7 +1369,7 @@ void AliAnalysisTaskGammaConvDalitzV1::ProcessElectronCandidates(){
 
       AliESDtrack* positronCandidate = fESDEvent->GetTrack( fSelectorPositronIndex[i] );
       if(! ((AliDalitzElectronCuts*)fCutElectronArray->At(fiCut))->ElectronIsSelected(positronCandidate) ) continue;
-       lGoodPositronIndex.push_back(   fSelectorPositronIndex[i]  );
+       lGoodPositronIndexPrev.push_back(   fSelectorPositronIndex[i]  );
         hESDDalitzPositronPt[fiCut]->Fill( positronCandidate->Pt() );
        hESDDalitzPositronPhi[fiCut]->Fill( positronCandidate->Phi() );
       
@@ -1263,18 +1398,18 @@ void AliAnalysisTaskGammaConvDalitzV1::ProcessElectronCandidates(){
     }
 
 
-   vector<Bool_t> lElectronPsiIndex(lGoodElectronIndex.size(), kTRUE);
-   vector<Bool_t> lPositronPsiIndex(lGoodPositronIndex.size(), kTRUE);
+   vector<Bool_t> lElectronPsiIndex(lGoodElectronIndexPrev.size(), kTRUE);
+   vector<Bool_t> lPositronPsiIndex(lGoodPositronIndexPrev.size(), kTRUE);
 
 
    if( ((AliDalitzElectronCuts*)fCutElectronArray->At(fiCut))->DoPsiPairCut() == kTRUE ){
 
-      for( UInt_t i = 0; i < lGoodElectronIndex.size(); i++ ) {
+      for( UInt_t i = 0; i < lGoodElectronIndexPrev.size(); i++ ) {
 
-         AliESDtrack *electronCandidate = fESDEvent->GetTrack(lGoodElectronIndex[i]);
+         AliESDtrack *electronCandidate = fESDEvent->GetTrack(lGoodElectronIndexPrev[i]);
 
-         for(UInt_t j = 0; j <  lGoodPositronIndex.size(); j++){
-            AliESDtrack *positronCandidate = fESDEvent->GetTrack(lGoodPositronIndex[j]);
+         for(UInt_t j = 0; j <  lGoodPositronIndexPrev.size(); j++){
+            AliESDtrack *positronCandidate = fESDEvent->GetTrack(lGoodPositronIndexPrev[j]);
             Double_t psiPair = GetPsiPair(positronCandidate,electronCandidate);
             Double_t deltaPhi = magField * TVector2::Phi_mpi_pi( electronCandidate->GetConstrainedParam()->Phi()-positronCandidate->GetConstrainedParam()->Phi());
 
@@ -1287,11 +1422,29 @@ void AliAnalysisTaskGammaConvDalitzV1::ProcessElectronCandidates(){
    }
 
 
+   vector<Int_t> lGoodElectronIndex(0);
+   vector<Int_t> lGoodPositronIndex(0);
+   
+
+   for( UInt_t i = 0; i < lGoodElectronIndexPrev.size(); i++ ) {
+
+       if(  lElectronPsiIndex[i] == kTRUE )
+       lGoodElectronIndex.push_back(   lGoodElectronIndexPrev[i]  );
+   }
+
+   for( UInt_t i = 0; i < lGoodPositronIndexPrev.size(); i++ ) {
+
+        if(  lPositronPsiIndex[i] == kTRUE )
+        lGoodPositronIndex.push_back(   lGoodPositronIndexPrev[i]  );
+   }
+
 
 
+    
+   
    for(UInt_t i = 0; i < lGoodElectronIndex.size(); i++){
 
-      if( lElectronPsiIndex[i] == kFALSE ) continue;
+      //if( lElectronPsiIndex[i] == kFALSE ) continue;
 
 
       AliESDtrack *electronCandidate = fESDEvent->GetTrack(lGoodElectronIndex[i]);
@@ -1300,7 +1453,7 @@ void AliAnalysisTaskGammaConvDalitzV1::ProcessElectronCandidates(){
 
       for(UInt_t j = 0; j < lGoodPositronIndex.size(); j++){
 
-         if( lPositronPsiIndex[j] == kFALSE ) continue;
+         //if( lPositronPsiIndex[j] == kFALSE ) continue;
 
          AliESDtrack *positronCandidate = fESDEvent->GetTrack(lGoodPositronIndex[j]);
          AliKFParticle positronCandidateKF( *positronCandidate->GetConstrainedParam(), ::kPositron );
@@ -1313,8 +1466,8 @@ void AliAnalysisTaskGammaConvDalitzV1::ProcessElectronCandidates(){
          Double_t deltaPhi = magField * TVector2::Phi_mpi_pi( electronCandidate->GetConstrainedParam()->Phi()-positronCandidate->GetConstrainedParam()->Phi());
          
 
-
-         AliKFConversionPhoton* virtualPhoton = new AliKFConversionPhoton(electronCandidateKF,positronCandidateKF);
+        AliKFConversionPhoton* virtualPhoton = NULL;
+         virtualPhoton = new AliKFConversionPhoton(electronCandidateKF,positronCandidateKF);
 
 
          AliKFVertex primaryVertexImproved(*fInputEvent->GetPrimaryVertex());
@@ -1322,62 +1475,111 @@ void AliAnalysisTaskGammaConvDalitzV1::ProcessElectronCandidates(){
          virtualPhoton->SetProductionVertex(primaryVertexImproved);
 
          virtualPhoton->SetTrackLabels( lGoodPositronIndex[j], lGoodElectronIndex[i]);
-
-         if(fMCEvent){
-
-            // AliStack *fMCStack= fMCEvent->Stack();
-            Int_t labeln=TMath::Abs(electronCandidate->GetLabel());
-            Int_t labelp=TMath::Abs(positronCandidate->GetLabel());
-            TParticle *fNegativeMCParticle = fMCStack->Particle(labeln);
-            TParticle *fPositiveMCParticle = fMCStack->Particle(labelp);
-            if( fPositiveMCParticle && fNegativeMCParticle) {
+        
+         
+        if( fMCEvent ) {
+          
+         Int_t labeln=TMath::Abs(electronCandidate->GetLabel());
+          Int_t labelp=TMath::Abs(positronCandidate->GetLabel());
+          TParticle *fNegativeMCParticle = fMCStack->Particle(labeln);
+          TParticle *fPositiveMCParticle = fMCStack->Particle(labelp);
+          
+           if( fPositiveMCParticle && fNegativeMCParticle) {
                virtualPhoton->SetMCLabelPositive(labelp);
                virtualPhoton->SetMCLabelNegative(labeln);
-            
-                                               }
-            
-            TParticle *mcVgamma=virtualPhoton->GetMCParticle(fMCStack);
-                                               
-                                               
-                                               if(mcVgamma){
-                                                       // Check if it is a true photon
-                                                       if(mcVgamma->GetPdgCode() == 22){
-                                                               isPhoton = kTRUE;
-                                                       }else if(mcVgamma->GetPdgCode() == 443){
-                                                               isJPsi = kTRUE;
-                                                       }
-                                                       else if( IsDalitz( mcVgamma ) ){
-                                                               if     ( mcVgamma->GetPdgCode() == 111 ) isPi0Dalitz = kTRUE;
-                                                               else if( mcVgamma->GetPdgCode() == 221 ) isEtaDalitz = kTRUE;
-                                                       }
-                                               }
-                                }
-                                
-         
-         AliAODConversionPhoton *vphoton = new AliAODConversionPhoton(virtualPhoton); //To Apply PsiPairCut
-                                
+           }
+        }
+        
+         AliAODConversionPhoton *vphoton = new AliAODConversionPhoton(virtualPhoton); //To Apply PsiPairCut
+           
+         if ( fDoMesonQA ) {
+
+             if( fMCEvent ) {
+
+             TParticle *mcVgamma=virtualPhoton->GetMCParticle(fMCStack);
+
+             if(mcVgamma){
+             // Check if it is a true photon
+             if(mcVgamma->GetPdgCode() == 22){
+               isPhoton = kTRUE;
+             }else if(mcVgamma->GetPdgCode() == 443){
+               isJPsi = kTRUE;
+             }
+             else if( IsDalitz( mcVgamma ) ){
+               if     ( mcVgamma->GetPdgCode() == 111 ) isPi0Dalitz = kTRUE;
+               else if( mcVgamma->GetPdgCode() == 221 ) isEtaDalitz = kTRUE;
+             }
+             }
+
+             if(isPhoton){
+                    hESDEposEnegTruePhotonInvMassPt[fiCut]->Fill(vphoton->GetMass(),vphoton->Pt());
+                    hESDEposEnegTruePhotonPsiPairDPhi[fiCut]->Fill(deltaPhi,psiPair);
+              }
+             else if(isJPsi){
+                    hESDEposEnegTrueJPsiInvMassPt[fiCut]->Fill(vphoton->GetMass(),vphoton->Pt());
+              }
+             else if(isPi0Dalitz){
+                    hESDEposEnegTruePi0DalitzInvMassPt[fiCut]->Fill(vphoton->GetMass(),vphoton->Pt());
+                    hESDEposEnegTruePi0DalitzPsiPairDPhi[fiCut]->Fill(deltaPhi,psiPair);
+              }
+             else if(isEtaDalitz){
+                    hESDEposEnegTrueEtaDalitzInvMassPt[fiCut]->Fill(vphoton->GetMass(),vphoton->Pt());
+                    hESDEposEnegTrueEtaDalitzPsiPairDPhi[fiCut]->Fill(deltaPhi,psiPair);
+              }
+           }
+         }
+        
+      
+        
+        if ( fDoMesonQA ) {
+          
          hESDEposEnegPsiPairDPhi[fiCut]->Fill(deltaPhi,psiPair);   
          hESDEposEnegInvMassPt[fiCut]->Fill(vphoton->GetMass(),vphoton->Pt());
+                        
+        }
                                 
-                               if( fMCEvent ) {
-                               if(isPhoton)    hESDEposEnegTruePhotonInvMassPt[fiCut]->Fill(vphoton->GetMass(),vphoton->Pt());
-                               else if(isJPsi) hESDEposEnegTrueJPsiInvMassPt[fiCut]->Fill(vphoton->GetMass(),vphoton->Pt());
-                               else if(isPi0Dalitz)hESDEposEnegTruePi0DalitzInvMassPt[fiCut]->Fill(vphoton->GetMass(),vphoton->Pt());
-                               else if(isEtaDalitz)hESDEposEnegTrueEtaDalitzInvMassPt[fiCut]->Fill(vphoton->GetMass(),vphoton->Pt());
-                                        
-                                }
-                                
-                                fGoodVirtualGammas->Add(  vphoton );
+        if( ! fDoChicAnalysis ) {
+       
+                 if (  ((AliDalitzElectronCuts*) fCutElectronArray->At(fiCut))->DoMassCut() == kTRUE )  {
+                   
+                    Double_t MassCutMax = 1000.0;
+                    if(  ((AliDalitzElectronCuts*) fCutElectronArray->At(fiCut))->GetMassCutLowPt() >= ((AliDalitzElectronCuts*) fCutElectronArray->At(fiCut))->GetMassCutHighPt() ){
+                      MassCutMax = ((AliDalitzElectronCuts*) fCutElectronArray->At(fiCut))->GetMassCutLowPt();
+                    }
+                    else {
+                      MassCutMax = ((AliDalitzElectronCuts*) fCutElectronArray->At(fiCut))->GetMassCutHighPt();
+                    }
+                    
+                    if( vphoton->GetMass() > MassCutMax ) {
+                      
+                      
+                      delete vphoton;
+                      vphoton = 0x0;
+                      delete virtualPhoton;
+                      virtualPhoton = 0x0;
+                      continue;
+                      
+                    }
+                    
+                 }
+        }
+        
+        
+         fGoodVirtualGammas->Add(  vphoton );
+        delete virtualPhoton;
+        virtualPhoton=NULL;
                                 
       }
    }
    
-   
    //Computing mixing event
+   
+   if(  fDoMesonQA ) {
 
-   for(UInt_t i = 0; i < lGoodElectronIndex.size(); i++){
+      for(UInt_t i = 0; i < lGoodElectronIndex.size(); i++){
          
-         if( lElectronPsiIndex[i] == kFALSE ) continue;
+         //if( lElectronPsiIndex[i] == kFALSE ) continue;
          
           AliESDtrack *electronCandidate1 = fESDEvent->GetTrack(lGoodElectronIndex[i]);
 
@@ -1386,7 +1588,7 @@ void AliAnalysisTaskGammaConvDalitzV1::ProcessElectronCandidates(){
         
           for(UInt_t j = i+1; j < lGoodElectronIndex.size(); j++){
            
-              if( lElectronPsiIndex[j] == kFALSE ) continue;
+              //if( lElectronPsiIndex[j] == kFALSE ) continue;
               
               
                AliESDtrack *electronCandidate2 = fESDEvent->GetTrack(lGoodElectronIndex[j]);
@@ -1404,15 +1606,18 @@ void AliAnalysisTaskGammaConvDalitzV1::ProcessElectronCandidates(){
                hESDEposEnegLikeSignBackInvMassPt[fiCut]->Fill(vphoton->GetMass(),vphoton->Pt());
                delete vphoton;
                delete virtualPhoton;
-                           
+               vphoton = 0x0;
+               virtualPhoton = 0x0;            
           
          }
    }   
    
    
-   for(UInt_t i = 0; i < lGoodPositronIndex.size(); i++){
+      for(UInt_t i = 0; i < lGoodPositronIndex.size(); i++){
+     
+   
          
-         if( lPositronPsiIndex[i] == kFALSE ) continue;
+         //if( lPositronPsiIndex[i] == kFALSE ) continue;
          
           AliESDtrack *positronCandidate1 = fESDEvent->GetTrack(lGoodPositronIndex[i]);
 
@@ -1421,7 +1626,7 @@ void AliAnalysisTaskGammaConvDalitzV1::ProcessElectronCandidates(){
         
           for(UInt_t j = i+1; j < lGoodPositronIndex.size(); j++){
            
-              if( lPositronPsiIndex[j] == kFALSE ) continue;
+             // if( lPositronPsiIndex[j] == kFALSE ) continue;
               
                AliESDtrack *positronCandidate2 = fESDEvent->GetTrack(lGoodPositronIndex[j]);
 
@@ -1437,12 +1642,14 @@ void AliAnalysisTaskGammaConvDalitzV1::ProcessElectronCandidates(){
                
                
                delete vphoton;
-               delete virtualPhoton;        
+               delete virtualPhoton;  
+               vphoton = 0x0;
+               virtualPhoton = 0x0;
           
          }
    }   
 
-
+   }
 }
 
 //________________________________________________________________________
@@ -1473,8 +1680,11 @@ void AliAnalysisTaskGammaConvDalitzV1::CalculatePi0DalitzCandidates(){
 
             AliAODConversionMother *pi0cand = new AliAODConversionMother(gamma,Vgamma);
             pi0cand->SetLabels(GammaIndex,virtualGammaIndex);
+                      
 
-            if( ( ((AliConversionMesonCuts*)fCutMesonArray->At(fiCut))->MesonIsSelected(pi0cand,kTRUE)) ){
+            if( ( ((AliConversionMesonCuts*)fCutMesonArray->At(fiCut))->MesonIsSelected(pi0cand,kTRUE,((AliConversionCuts*)fCutGammaArray->At(fiCut))->GetEtaShift())) ){
+             
+             //cout<< "Meson Accepted "<<endl;
              
               Int_t zbin= fBGHandler[fiCut]->GetZBinIndex(fESDEvent->GetPrimaryVertex()->GetZ());
                Int_t mbin = 0;
@@ -1484,31 +1694,47 @@ void AliAnalysisTaskGammaConvDalitzV1::CalculatePi0DalitzCandidates(){
                   mbin = fBGHandler[fiCut]->GetMultiplicityBinIndex(fGoodGammas->GetEntries());
                }
              
-             AliESDtrack *positronVgamma = fESDEvent->GetTrack( Vgamma->GetTrackLabelPositive() );
-             AliESDtrack *electronVgamma = fESDEvent->GetTrack( Vgamma->GetTrackLabelNegative() );
-             Double_t clsToFPos = ((AliDalitzElectronCuts*)fCutElectronArray->At(fiCut))->GetNFindableClustersTPC(positronVgamma);
-             Double_t clsToFNeg = ((AliDalitzElectronCuts*)fCutElectronArray->At(fiCut))->GetNFindableClustersTPC(electronVgamma);
+             AliESDtrack *positronVgamma = 0;
+             AliESDtrack *electronVgamma = 0;
              
-             Float_t bPos[2];
-             Float_t bCovPos[3];
-             positronVgamma->GetImpactParameters(bPos,bCovPos);
-             if (bCovPos[0]<=0 || bCovPos[2]<=0) {
-               AliDebug(1, "Estimated b resolution lower or equal zero!");
-               bCovPos[0]=0; bCovPos[2]=0;
-             }
+             Double_t clsToFPos = -1.0;
+             Double_t clsToFNeg = -1.0;
              
-             Float_t bNeg[2];
-             Float_t bCovNeg[3];
-             positronVgamma->GetImpactParameters(bNeg,bCovNeg);
-             if (bCovNeg[0]<=0 || bCovNeg[2]<=0) {
-               AliDebug(1, "Estimated b resolution lower or equal zero!");
-               bCovNeg[0]=0; bCovNeg[2]=0;
-             }
+             Float_t dcaToVertexXYPos = -1.0;
+             Float_t dcaToVertexZPos  = -1.0;
+             Float_t dcaToVertexXYNeg = -1.0;
+             Float_t dcaToVertexZNeg  = -1.0;
+             
+             
+              if ( fDoMesonQA ) {
+             
+               positronVgamma = fESDEvent->GetTrack( Vgamma->GetTrackLabelPositive() );
+               electronVgamma = fESDEvent->GetTrack( Vgamma->GetTrackLabelNegative() );
+               clsToFPos = ((AliDalitzElectronCuts*)fCutElectronArray->At(fiCut))->GetNFindableClustersTPC(positronVgamma);
+               clsToFNeg = ((AliDalitzElectronCuts*)fCutElectronArray->At(fiCut))->GetNFindableClustersTPC(electronVgamma);
              
-             Float_t dcaToVertexXYPos = bPos[0];
-             Float_t dcaToVertexZPos  = bPos[1];
-             Float_t dcaToVertexXYNeg = bNeg[0];
-             Float_t dcaToVertexZNeg  = bNeg[1];
+               Float_t bPos[2];
+               Float_t bCovPos[3];
+               positronVgamma->GetImpactParameters(bPos,bCovPos);
+               if (bCovPos[0]<=0 || bCovPos[2]<=0) {
+                 AliDebug(1, "Estimated b resolution lower or equal zero!");
+                 bCovPos[0]=0; bCovPos[2]=0;
+               }
+             
+               Float_t bNeg[2];
+               Float_t bCovNeg[3];
+               positronVgamma->GetImpactParameters(bNeg,bCovNeg);
+               if (bCovNeg[0]<=0 || bCovNeg[2]<=0) {
+                 AliDebug(1, "Estimated b resolution lower or equal zero!");
+                 bCovNeg[0]=0; bCovNeg[2]=0;
+               }
+             
+               dcaToVertexXYPos = bPos[0];
+               dcaToVertexZPos  = bPos[1];
+               dcaToVertexXYNeg = bNeg[0];
+               dcaToVertexZNeg  = bNeg[1];
+             
+              }
                      
              
               if(  ((AliDalitzElectronCuts*) fCutElectronArray->At(fiCut))->DoMassCut() == kTRUE ) {
@@ -1517,35 +1743,40 @@ void AliAnalysisTaskGammaConvDalitzV1::CalculatePi0DalitzCandidates(){
                 if( ((AliDalitzElectronCuts*) fCutElectronArray->At(fiCut))->MassCut( pi0cand->Pt() , Vgamma->GetMass() ) == kTRUE ){
          
                 hESDMotherInvMassPt[fiCut]->Fill(pi0cand->M(),pi0cand->Pt());
-                hESDMotherPhi[fiCut]->Fill(pi0cand->Phi());
+               
                 Double_t sparesFill[4] = {pi0cand->M(),pi0cand->Pt(),(Double_t)zbin,(Double_t)mbin};
                  sESDMotherInvMassPtZM[fiCut]->Fill(sparesFill,1);
                 
-                   if( lGoodVirtualGamma[virtualGammaIndex] == kFALSE ) {
                 
-                     hESDDalitzElectronAfterPt[fiCut]->Fill(  electronVgamma->Pt()  );
-                     hESDDalitzPositronAfterPt[fiCut]->Fill(  positronVgamma->Pt()  );
+                   if ( fDoMesonQA ) {
+                   
+                    hESDMotherPhi[fiCut]->Fill(pi0cand->Phi());
                 
-                     hESDDalitzElectronAfterPhi[fiCut]->Fill( electronVgamma->Phi() );
-                     hESDDalitzPositronAfterPhi[fiCut]->Fill( positronVgamma->Phi() );
+                       if( lGoodVirtualGamma[virtualGammaIndex] == kFALSE ) {
+                
+                         hESDDalitzElectronAfterPt[fiCut]->Fill(  electronVgamma->Pt()  );
+                         hESDDalitzPositronAfterPt[fiCut]->Fill(  positronVgamma->Pt()  );
+                
+                         hESDDalitzElectronAfterPhi[fiCut]->Fill( electronVgamma->Phi() );
+                         hESDDalitzPositronAfterPhi[fiCut]->Fill( positronVgamma->Phi() );
                      
-                     hESDDalitzElectronAfterNFindClsTPC[fiCut]->Fill(clsToFNeg,electronVgamma->Pt());
-                     hESDDalitzPositronAfterNFindClsTPC[fiCut]->Fill(clsToFPos,positronVgamma->Pt());
+                         hESDDalitzElectronAfterNFindClsTPC[fiCut]->Fill(clsToFNeg,electronVgamma->Pt());
+                         hESDDalitzPositronAfterNFindClsTPC[fiCut]->Fill(clsToFPos,positronVgamma->Pt());
                      
                      
-                     hESDDalitzPosEleAfterDCAxy[fiCut]->Fill(  dcaToVertexXYNeg, electronVgamma->Pt() );
-                     hESDDalitzPosEleAfterDCAz[fiCut]->Fill(   dcaToVertexZNeg,  electronVgamma->Pt() );
-                     hESDDalitzPosEleAfterDCAxy[fiCut]->Fill(  dcaToVertexXYPos, positronVgamma->Pt() );
-                     hESDDalitzPosEleAfterDCAz[fiCut]->Fill(   dcaToVertexZPos,  positronVgamma->Pt() );
+                         hESDDalitzPosEleAfterDCAxy[fiCut]->Fill(  dcaToVertexXYNeg, electronVgamma->Pt() );
+                         hESDDalitzPosEleAfterDCAz[fiCut]->Fill(   dcaToVertexZNeg,  electronVgamma->Pt() );
+                         hESDDalitzPosEleAfterDCAxy[fiCut]->Fill(  dcaToVertexXYPos, positronVgamma->Pt() );
+                         hESDDalitzPosEleAfterDCAz[fiCut]->Fill(   dcaToVertexZPos,  positronVgamma->Pt() );
                      
-                     hESDDalitzPosEleAfterTPCdEdx[fiCut]->Fill( positronVgamma->P(),((AliDalitzElectronCuts*)fCutElectronArray->At(fiCut))->GetPIDResponse()->NumberOfSigmasTPC(positronVgamma, AliPID::kElectron) );
-                     hESDDalitzPosEleAfterTPCdEdx[fiCut]->Fill( electronVgamma->P(),((AliDalitzElectronCuts*)fCutElectronArray->At(fiCut))->GetPIDResponse()->NumberOfSigmasTPC(electronVgamma, AliPID::kElectron) );
+                         hESDDalitzPosEleAfterTPCdEdx[fiCut]->Fill( positronVgamma->P(),((AliDalitzElectronCuts*)fCutElectronArray->At(fiCut))->GetPIDResponse()->NumberOfSigmasTPC(positronVgamma, AliPID::kElectron) );
+                         hESDDalitzPosEleAfterTPCdEdx[fiCut]->Fill( electronVgamma->P(),((AliDalitzElectronCuts*)fCutElectronArray->At(fiCut))->GetPIDResponse()->NumberOfSigmasTPC(electronVgamma, AliPID::kElectron) );
                      
-                     hESDDalitzPosEleAfterTPCdEdxSignal[fiCut]->Fill( positronVgamma->P(), TMath::Abs(positronVgamma->GetTPCsignal()));
-                     hESDDalitzPosEleAfterTPCdEdxSignal[fiCut]->Fill( electronVgamma->P(), TMath::Abs(electronVgamma->GetTPCsignal()));
-                      
+                         hESDDalitzPosEleAfterTPCdEdxSignal[fiCut]->Fill( positronVgamma->P(), TMath::Abs(positronVgamma->GetTPCsignal()));
+                         hESDDalitzPosEleAfterTPCdEdxSignal[fiCut]->Fill( electronVgamma->P(), TMath::Abs(electronVgamma->GetTPCsignal()));
                      
-                     lGoodVirtualGamma[virtualGammaIndex] = kTRUE;
+                         lGoodVirtualGamma[virtualGammaIndex] = kTRUE;
+                     }
                    }
       
                 
@@ -1556,7 +1787,12 @@ void AliAnalysisTaskGammaConvDalitzV1::CalculatePi0DalitzCandidates(){
                 Double_t sparesFill[4] = {pi0cand->M(),pi0cand->Pt(),(Double_t)zbin,(Double_t)mbin};
                  sESDMotherInvMassPtZM[fiCut]->Fill(sparesFill,1);
                 
-                 if( lGoodVirtualGamma[virtualGammaIndex] == kFALSE ) {
+                
+                  if ( fDoMesonQA ) {
+                
+                   hESDMotherPhi[fiCut]->Fill(pi0cand->Phi());
+                
+                   if( lGoodVirtualGamma[virtualGammaIndex] == kFALSE ) {
                 
                      hESDDalitzElectronAfterPt[fiCut]->Fill(  electronVgamma->Pt()  );
                      hESDDalitzPositronAfterPt[fiCut]->Fill(  positronVgamma->Pt()  );
@@ -1581,10 +1817,11 @@ void AliAnalysisTaskGammaConvDalitzV1::CalculatePi0DalitzCandidates(){
                      
                      lGoodVirtualGamma[virtualGammaIndex] = kTRUE;
                 
-                 }
+                   }
+                  }
              }
               
-              
+              if( fDoChicAnalysis) {
               
                hESDPi0MotherInvMassPt[fiCut]->Fill(pi0cand->M(),pi0cand->Pt());
                 
@@ -1592,9 +1829,10 @@ void AliAnalysisTaskGammaConvDalitzV1::CalculatePi0DalitzCandidates(){
     
                hESDPi0MotherDiffInvMassPt[fiCut]->Fill( diffMass , pi0cand->Pt() );
        
-             if(Vgamma->GetMass() > 2.5 && Vgamma->GetMass()<3.4       ){
+               if( Vgamma->GetMass() > 2.5 && Vgamma->GetMass() < 3.4){
                hESDPi0MotherDiffLimInvMassPt[fiCut]->Fill( diffMass , pi0cand->Pt() );
-             }
+               }
+              }
                
               if(fMCEvent){
                   ProcessTrueMesonCandidates(pi0cand,gamma,Vgamma);
@@ -1649,7 +1887,9 @@ void AliAnalysisTaskGammaConvDalitzV1::CalculateBackground(){
                   }
 
                   AliAODConversionMother *backgroundCandidate = new AliAODConversionMother(&currentEventGoodV0,&previousGoodV0);
-                  if( ( ((AliConversionMesonCuts*)fCutMesonArray->At(fiCut))->MesonIsSelected(backgroundCandidate,kFALSE) ) ){
+                            
+
+                  if( ( ((AliConversionMesonCuts*)fCutMesonArray->At(fiCut))->MesonIsSelected(backgroundCandidate,kFALSE, ((AliConversionCuts*)fCutGammaArray->At(fiCut))->GetEtaShift()))){
                      if(  ((AliDalitzElectronCuts*) fCutElectronArray->At(fiCut))->DoMassCut() == kTRUE ) {
                        
                        if( ((AliDalitzElectronCuts*) fCutElectronArray->At(fiCut))->MassCut( backgroundCandidate->Pt() , currentEventGoodV0.GetMass() ) == kTRUE ){
@@ -1692,7 +1932,8 @@ void AliAnalysisTaskGammaConvDalitzV1::CalculateBackground(){
                      }
 
                      AliAODConversionMother *backgroundCandidate = new AliAODConversionMother(&currentEventGoodV0,&previousGoodV0);
-                     if((((AliConversionMesonCuts*)fCutMesonArray->At(fiCut))->MesonIsSelected(backgroundCandidate,kFALSE))){
+                               
+                     if((((AliConversionMesonCuts*)fCutMesonArray->At(fiCut))->MesonIsSelected(backgroundCandidate,kFALSE,((AliConversionCuts*)fCutGammaArray->At(fiCut))->GetEtaShift()))){
                       
                       if(  ((AliDalitzElectronCuts*) fCutElectronArray->At(fiCut))->DoMassCut() == kTRUE ) {
                        
@@ -1731,8 +1972,9 @@ void AliAnalysisTaskGammaConvDalitzV1::CalculateBackground(){
 
 
             AliAODConversionMother *backgroundCandidate = new AliAODConversionMother(&currentEventGoodV0,&previousGoodV0);
+                      
 
-            if((((AliConversionMesonCuts*)fCutMesonArray->At(fiCut))->MesonIsSelected(backgroundCandidate,kFALSE))){
+            if((((AliConversionMesonCuts*)fCutMesonArray->At(fiCut))->MesonIsSelected(backgroundCandidate,kFALSE, ((AliConversionCuts*)fCutGammaArray->At(fiCut))->GetEtaShift()))){
              
               if(  ((AliDalitzElectronCuts*) fCutElectronArray->At(fiCut))->DoMassCut() == kTRUE ) {
                
@@ -1768,6 +2010,9 @@ void AliAnalysisTaskGammaConvDalitzV1::UpdateEventByEventData(){
 
    method = ( (AliDalitzElectronCuts*)fCutElectronArray->At(fiCut))->GetBKGMethod();
 
+   
+
+
    if( method == 1 ) {
 
       if(fGoodGammas->GetEntries() > 0 ){
@@ -1817,12 +2062,15 @@ void AliAnalysisTaskGammaConvDalitzV1::ProcessTrueMesonCandidates(AliAODConversi
    AliStack *MCStack = fMCEvent->Stack();
 
    if( TrueGammaCandidate->GetV0Index()<fESDEvent->GetNumberOfV0s()    ){
+     
+     
+     //cout<<"Entro True Meson"<<endl;
 
 
       Bool_t isTruePi0 = kFALSE;
       Bool_t isTrueEta = kFALSE;
       Bool_t massCutAccept = kFALSE;
-      Bool_t isTrueChiC = kFALSE;
+      //Bool_t isTrueChiC = kFALSE;
       Int_t gammaMCLabel = TrueGammaCandidate->GetMCParticleLabel(MCStack);
       Int_t gammaMotherLabel = -1;
 
@@ -1905,46 +2153,90 @@ void AliAnalysisTaskGammaConvDalitzV1::ProcessTrueMesonCandidates(AliAODConversi
         
        }
 
-                       if(gammaMotherLabel>=0 && ( gammaMotherLabel == virtualGammaGrandMotherLabel) ){
-                               if(((TParticle*)MCStack->Particle(virtualGammaGrandMotherLabel))->GetPdgCode() == 445 ||
-                                        ((TParticle*)MCStack->Particle(virtualGammaGrandMotherLabel))->GetPdgCode() == 10443 ||
-                                        ((TParticle*)MCStack->Particle(virtualGammaGrandMotherLabel))->GetPdgCode() == 20443 ){
-                                       isTrueChiC=kTRUE;
-                                       hESDTrueMotherChiCInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
-                                       hESDTrueMotherChiCDiffInvMassPt[fiCut]->Fill(Pi0Candidate->M()-TrueVirtualGammaCandidate->GetMass(),Pi0Candidate->Pt());
-                               }
-                       }
+       if( fDoChicAnalysis) {
+       if(gammaMotherLabel>=0 && ( gammaMotherLabel == virtualGammaGrandMotherLabel) ){
+         if(((TParticle*)MCStack->Particle(virtualGammaGrandMotherLabel))->GetPdgCode() == 445 ||
+           ((TParticle*)MCStack->Particle(virtualGammaGrandMotherLabel))->GetPdgCode() == 10443 ||
+           ((TParticle*)MCStack->Particle(virtualGammaGrandMotherLabel))->GetPdgCode() == 20443 ){
+             //isTrueChiC=kTRUE;
+             hESDTrueMotherChiCInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
+             hESDTrueMotherChiCDiffInvMassPt[fiCut]->Fill(Pi0Candidate->M()-TrueVirtualGammaCandidate->GetMass(),Pi0Candidate->Pt());
+            }
+         }  
+       }
 
       if( ( isTruePi0 || isTrueEta) && massCutAccept ){ // True Pion or Eta
        
-         if ( virtualGamma == 1 ) { //True Dalitz
-          
-            hESDTrueMotherInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
-           hESDTrueMotherDalitzInvMassPt[fiCut]->Fill( TrueVirtualGammaCandidate->GetMass(),Pi0Candidate->Pt());
-           
+         if ( virtualGamma == 1 ) { //True Dalitz      
+
+            Float_t weighted= 1;
+            
+            if( ((AliDalitzElectronCuts*) fCutElectronArray->At(fiCut))->DoWeights() ) {
+                if(((AliConversionCuts*)fCutGammaArray->At(fiCut))->IsParticleFromBGEvent(gammaMotherLabel, fMCStack,fInputEvent)){
+                    if (((TParticle*)MCStack->Particle(gammaMotherLabel))->Pt()>0.005){
+                        weighted= ((AliConversionCuts*)fCutGammaArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),gammaMotherLabel,fMCStack,fInputEvent);
+                    }
+                }
+            }
+
+            hESDTrueMotherInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weighted);
+           hESDTrueMotherDalitzInvMassPt[fiCut]->Fill( TrueVirtualGammaCandidate->GetMass(),Pi0Candidate->Pt(),weighted);
+
             if(gammaMotherLabel < MCStack->GetNprimary()){ // Only primary pi0 for efficiency calculation
              
-              Float_t weighted= 1;
-               if(((AliConversionCuts*)fCutGammaArray->At(fiCut))->IsParticleFromBGEvent(gammaMotherLabel, fMCStack,fInputEvent)){
-                  if (((TParticle*)MCStack->Particle(gammaMotherLabel))->Pt()>0.005){
-                     weighted= ((AliConversionCuts*)fCutGammaArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),gammaMotherLabel,fMCStack,fInputEvent);
-                  }
-               }
+              
+               hESDTruePrimaryMotherInvMassPt[fiCut]->Fill( Pi0Candidate->M(),Pi0Candidate->Pt(),weighted);
+              hESDTruePrimaryMotherW0WeightingInvMassPt[fiCut]->Fill( Pi0Candidate->M(), Pi0Candidate->Pt() );
+              
                hESDTruePrimaryMotherInvMassMCPt[fiCut]->Fill(Pi0Candidate->M(),((TParticle*)MCStack->Particle(virtualGammaMotherLabel))->Pt(),weighted);
                if(isTruePi0){ // Only primaries for unfolding
                   hESDTruePrimaryPi0DalitzESDPtMCPt[fiCut]->Fill(Pi0Candidate->Pt(),((TParticle*)MCStack->Particle(virtualGammaMotherLabel))->Pt(),weighted);
                }
             }
             else { // Secondary Meson
-               hESDTrueSecondaryMotherInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
-               //if (((TParticle*)MCStack->Particle(virtualGammaMotherLabel))->GetMother(0) >-1){
-               //   if(MCStack->Particle(((TParticle*)MCStack->Particle(virtualGammaMotherLabel))->GetMother(0))->GetPdgCode()==kK0Short){
-               //      hESDTrueSecondaryMotherFromK0sInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt());
-               //   }
+              Float_t weightedSec= 1;
+
+              if( ((AliDalitzElectronCuts*) fCutElectronArray->At(fiCut))->DoWeights() ) { 
+                  Int_t secMotherLabel = ((TParticle*)MCStack->Particle(gammaMotherLabel))->GetMother(0);
+                  if(((AliConversionCuts*)fCutGammaArray->At(fiCut))->IsParticleFromBGEvent(gammaMotherLabel, fMCStack, fInputEvent) && MCStack->Particle(gammaMotherLabel)->GetPdgCode()==310){
+                    weightedSec= ((AliConversionCuts*)fCutGammaArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),secMotherLabel, fMCStack, fInputEvent)/2.; //invariant mass is additive thus the weight for the daughters has to be devide by two for the K0s at a certain pt
+                  }
+              }
+
+              hESDTrueSecondaryMotherInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weightedSec); 
             }
          }
+
+         
          else if ( virtualGamma == 0 ){
-            hESDTrueMotherPi0GGInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt()); // Pi0 from GG
+
+              Float_t weighted= 1;
+
+             if( ((AliDalitzElectronCuts*) fCutElectronArray->At(fiCut))->DoWeights() ) {
+              if(((AliConversionCuts*)fCutGammaArray->At(fiCut))->IsParticleFromBGEvent(gammaMotherLabel, fMCStack,fInputEvent)){
+                if (((TParticle*)MCStack->Particle(gammaMotherLabel))->Pt()>0.005){
+                    weighted= ((AliConversionCuts*)fCutGammaArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),gammaMotherLabel,fMCStack,fInputEvent);
+                }
+              }
+            }
+
+            hESDTrueMotherPi0GGInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weighted); // Pi0 from GG
+
+            if( gammaMotherLabel < MCStack->GetNprimary() ){
+                hESDTruePrimaryMotherPi0GGInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weighted);
+            }
+            else {
+            
+            Float_t weightedSec= 1;
+           
+            if( ((AliDalitzElectronCuts*) fCutElectronArray->At(fiCut))->DoWeights() ) { 
+                Int_t secMotherLabel = ((TParticle*)MCStack->Particle(gammaMotherLabel))->GetMother(0);
+                   if(((AliConversionCuts*)fCutGammaArray->At(fiCut))->IsParticleFromBGEvent(gammaMotherLabel, fMCStack, fInputEvent) && MCStack->Particle(gammaMotherLabel)->GetPdgCode()==310){
+                            weightedSec= ((AliConversionCuts*)fCutGammaArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),secMotherLabel, fMCStack, fInputEvent)/2.; //invariant mass is additive thus the weight for the daughters has to be devide by two for the K0s at a certain pt
+                   }
+            }
+                    hESDTrueSecondaryMotherPi0GGInvMassPt[fiCut]->Fill(Pi0Candidate->M(),Pi0Candidate->Pt(),weightedSec);
+            }
          }
       }
 
@@ -2033,16 +2325,18 @@ void AliAnalysisTaskGammaConvDalitzV1::ProcessMCParticles()
                        if( particle->GetPdgCode() ==  11)hMCAllElectronsPt[fiCut]->Fill(particle->Pt()); // All electrons
       }
        
-      if(((AliConversionMesonCuts*)fCutMesonArray->At(fiCut))->MesonIsSelectedMC(particle,fMCStack,((AliConversionCuts*)fCutGammaArray->At(fiCut))->GetEtaShift()) ){
+      if(((AliConversionMesonCuts*)fCutMesonArray->At(fiCut))->MesonIsSelectedMC( particle,fMCStack,((AliConversionCuts*)fCutGammaArray->At(fiCut))->GetEtaShift() ) ){
        
                        Float_t weighted= 1;
-       
+                   
+                    if( ((AliDalitzElectronCuts*) fCutElectronArray->At(fiCut))->DoWeights() ) { 
                        if(((AliConversionCuts*)fCutGammaArray->At(fiCut))->IsParticleFromBGEvent(i, fMCStack, fInputEvent)){
                          if (particle->Pt()>0.005){
                            weighted= ((AliConversionCuts*)fCutGammaArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),i, fMCStack,fInputEvent);
                          }
                        }
-       
+                   }
+
                        if(particle->GetPdgCode() == 111)hMCPi0GGPt[fiCut]->Fill( particle->Pt() , weighted); // All MC Pi0 GG decay
                        if(particle->GetPdgCode() == 221)hMCEtaGGPt[fiCut]->Fill( particle->Pt() , weighted); // All MC Eta GG decay
       }
@@ -2057,14 +2351,14 @@ void AliAnalysisTaskGammaConvDalitzV1::ProcessMCParticles()
       {
        
        
-                       Float_t weighted= 1;
-       
+               Float_t weighted= 1;
+                  if( ((AliDalitzElectronCuts*) fCutElectronArray->At(fiCut))->DoWeights() ) { 
                        if(((AliConversionCuts*)fCutGammaArray->At(fiCut))->IsParticleFromBGEvent(i, fMCStack,fInputEvent)){
                          if (particle->Pt()>0.005){
                            weighted= ((AliConversionCuts*)fCutGammaArray->At(fiCut))->GetWeightForMeson(fV0Reader->GetPeriodName(),i, fMCStack,fInputEvent);
                          }
                        }
-       
+                  }
                        if(particle->GetPdgCode() == 111)hMCPi0Pt[fiCut]->Fill(particle->Pt(), weighted); // All MC Pi0
                        if(particle->GetPdgCode() == 221)hMCEtaPt[fiCut]->Fill(particle->Pt(), weighted); // All MC Eta