]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWGHF/vertexingHF/AliAnalysisTaskSED0Mass.cxx
increase streamer version
[u/mrichter/AliRoot.git] / PWGHF / vertexingHF / AliAnalysisTaskSED0Mass.cxx
index 4fd37c3672af97ba84d179e979b2415107cf0cd4..7236b85c912da1c4474e967223399b02458348da 100644 (file)
@@ -23,8 +23,8 @@
 // Authors: A.Dainese, andrea.dainese@lnl.infn.it
 // Chiara Bianchin, chiara.bianchin@pd.infn.it (invariant mass)
 // Carmelo Di Giglio, carmelo.digiglio@ba.infn.it (like sign)
-// Jeremy Wilkinson, jwilkinson@physi.uni-heidelberg.de (weighted Bayesian)
-/////////////////////////////////////////////////////////////
+// Jeremy Wilkinson, jwilkinson@physi.uni-heidelberg.de (weighted Bayesian
+////////////////////////////////////////////////////////////
 
 #include <Riostream.h>
 #include <TClonesArray.h>
@@ -65,6 +65,7 @@ AliAnalysisTaskSED0Mass::AliAnalysisTaskSED0Mass():
 AliAnalysisTaskSE(),
   fOutputMass(0),
   fOutputMassPt(0),
+  fOutputMassY(0),
   fDistr(0),
   fNentries(0), 
   fCuts(0),
@@ -82,6 +83,7 @@ AliAnalysisTaskSE(),
   fSys(0),
   fIsRejectSDDClusters(0),
   fFillPtHist(kTRUE),
+  fFillYHist(kFALSE),
   fFillImpParHist(kFALSE),
   fUseSelectionBit(kTRUE),
   fWriteVariableTree(kFALSE),
@@ -101,6 +103,7 @@ AliAnalysisTaskSED0Mass::AliAnalysisTaskSED0Mass(const char *name,AliRDHFCutsD0t
   AliAnalysisTaskSE(name),
   fOutputMass(0),
   fOutputMassPt(0),
+  fOutputMassY(0),
   fDistr(0),
   fNentries(0),
   fCuts(0),
@@ -118,6 +121,7 @@ AliAnalysisTaskSED0Mass::AliAnalysisTaskSED0Mass(const char *name,AliRDHFCutsD0t
   fSys(0),
   fIsRejectSDDClusters(0),
   fFillPtHist(kTRUE),
+  fFillYHist(kFALSE),
   fFillImpParHist(kFALSE),
   fUseSelectionBit(kTRUE),
   fWriteVariableTree(kFALSE),
@@ -150,6 +154,8 @@ AliAnalysisTaskSED0Mass::AliAnalysisTaskSED0Mass(const char *name,AliRDHFCutsD0t
   DefineOutput(7,TTree::Class());  //My private outpu
   // Output slot #8 writes into a TList container (Detector signals)
   DefineOutput(8, TList::Class()); //My private output
+  // Output slot #9 stores the mass vs rapidity (y) distributions
+  DefineOutput(9, TList::Class()); //My private output
 }
 
 //________________________________________________________________________
@@ -163,6 +169,10 @@ AliAnalysisTaskSED0Mass::~AliAnalysisTaskSED0Mass()
     delete fOutputMassPt;
     fOutputMassPt = 0;
   }
+  if (fOutputMassY) {
+    delete fOutputMassY;
+    fOutputMassY = 0;
+  }
   if (fDistr) {
     delete fDistr;
     fDistr = 0;
@@ -228,6 +238,10 @@ void AliAnalysisTaskSED0Mass::UserCreateOutputObjects()
   fOutputMassPt->SetOwner();
   fOutputMassPt->SetName("listMassPt");
 
+  fOutputMassY = new TList();
+  fOutputMassY->SetOwner();
+  fOutputMassY->SetName("listMassY");
+
   fDistr = new TList();
   fDistr->SetOwner();
   fDistr->SetName("distributionslist");
@@ -238,7 +252,9 @@ void AliAnalysisTaskSED0Mass::UserCreateOutputObjects()
 
   TString nameMass=" ",nameSgn27=" ",nameSgn=" ", nameBkg=" ", nameRfl=" ",nameMassNocutsS =" ",nameMassNocutsB =" ", namedistr=" ";
   TString nameMassPt="", nameSgnPt="", nameBkgPt="", nameRflPt="";
+  TString nameMassY="", nameSgnY="", nameBkgY="", nameRflY="";
   Int_t nbins2dPt=60; Float_t binInPt=0., binFinPt=30.;
+  Int_t nbins2dY=60; Float_t binInY=-1.5, binFinY=1.5;
 
   for(Int_t i=0;i<fCuts->GetNPtBins();i++){
 
@@ -260,6 +276,55 @@ void AliAnalysisTaskSED0Mass::UserCreateOutputObjects()
     //histograms of cut variable distributions
     if(fFillVarHists){
       if(fReadMC){
+
+       namedistr="hNclsD0vsptS_";
+       namedistr+=i;
+       TH2F *hNclsD0vsptS = new TH2F(namedistr.Data(),"N cls distrubution [S];p_{T} [GeV/c];N cls",200,0.,20.,100,0.,200.);
+       namedistr="hNclsD0barvsptS_";
+       namedistr+=i;
+       TH2F *hNclsD0barvsptS = new TH2F(namedistr.Data(),"N cls distrubution [S];p_{T} [GeV/c];N cls",200,0.,20.,100,0.,200.);
+       
+       namedistr="hNITSpointsD0vsptS_";
+       namedistr+=i;
+       TH2F *hNITSpointsD0vsptS = new TH2F(namedistr.Data(),"N ITS points distrubution [S];p_{T} [GeV/c];N points",200,0.,20.,7,0.,7.);
+       
+       namedistr="hNSPDpointsD0S_";
+       namedistr+=i;
+       TH1I *hNSPDpointsD0S = new TH1I(namedistr.Data(),"N SPD points distrubution [S]; ;N tracks",4,0,4);
+       hNSPDpointsD0S->GetXaxis()->SetBinLabel(1, "no SPD");
+       hNSPDpointsD0S->GetXaxis()->SetBinLabel(2, "kOnlyFirst");
+       hNSPDpointsD0S->GetXaxis()->SetBinLabel(3, "kOnlySecond");
+       hNSPDpointsD0S->GetXaxis()->SetBinLabel(4, "kBoth");
+      
+       namedistr="hptD0S_";
+       namedistr+=i;
+       TH1F *hptD0S = new TH1F(namedistr.Data(), "p_{T} distribution [S];p_{T} [GeV/c]",200,0.,20.);
+       namedistr="hptD0barS_";
+       namedistr+=i;
+       TH1F *hptD0barS = new TH1F(namedistr.Data(), "p_{T} distribution [S];p_{T} [GeV/c]",200,0.,20.);
+      
+       namedistr="hphiD0S_";
+       namedistr+=i;
+       TH1F *hphiD0S = new TH1F(namedistr.Data(), "#phi distribution [S];#phi [rad]",100,0.,2*TMath::Pi());
+       namedistr="hphiD0barS_";
+       namedistr+=i;
+       TH1F *hphiD0barS = new TH1F(namedistr.Data(), "#phi distribution [S];#phi [rad]",100,0.,2*TMath::Pi());
+
+
+       namedistr="hetaphiD0candidateS_";
+       namedistr+=i;
+       TH2F *hetaphiD0candidateS = new TH2F(namedistr.Data(), "D^{0} candidates #eta #phi distribution [S];#eta;#phi [rad]",100, -1.5, 1.5, 100, 0.,2*TMath::Pi());
+       namedistr="hetaphiD0barcandidateS_";
+       namedistr+=i;
+       TH2F *hetaphiD0barcandidateS = new TH2F(namedistr.Data(), "anti-D^{0} candidates #eta #phi distribution [S];#eta;#phi [rad]",100, -1.5, 1.5, 100, 0.,2*TMath::Pi());
+
+       namedistr="hetaphiD0candidatesignalregionS_";
+       namedistr+=i;
+       TH2F *hetaphiD0candidatesignalregionS = new TH2F(namedistr.Data(), "D^{0} candidates #eta #phi distribution [S] [mass cut];#eta;#phi [rad]",100, -1.5, 1.5, 100, 0.,2*TMath::Pi());
+       namedistr="hetaphiD0barcandidatesignalregionS_";
+       namedistr+=i;
+       TH2F *hetaphiD0barcandidatesignalregionS = new TH2F(namedistr.Data(), "anti-D^{0} candidates #eta #phi distribution [S] [mass cut];#eta;#phi [rad]",100, -1.5, 1.5, 100, 0.,2*TMath::Pi());
+
        //  dca
        namedistr="hdcaS_";
        namedistr+=i;
@@ -312,6 +377,18 @@ void AliAnalysisTaskSED0Mass::UserCreateOutputObjects()
        TH1F* tmpMS = new TH1F(nameMassNocutsS.Data(),"D^{0} invariant mass; M [GeV]; Entries",300,1.5648,2.1648); //range (MD0-300MeV, mD0 + 300MeV)
        tmpMS->Sumw2();
 
+       fDistr->Add(hNclsD0vsptS);
+       fDistr->Add(hNclsD0barvsptS);
+       fDistr->Add(hNITSpointsD0vsptS);
+       fDistr->Add(hNSPDpointsD0S);
+       fDistr->Add(hptD0S);
+       fDistr->Add(hphiD0S);
+       fDistr->Add(hptD0barS);
+       fDistr->Add(hphiD0barS);
+       fDistr->Add(hetaphiD0candidateS);
+       fDistr->Add(hetaphiD0candidatesignalregionS);
+       fDistr->Add(hetaphiD0barcandidateS);
+       fDistr->Add(hetaphiD0barcandidatesignalregionS);
 
        fDistr->Add(hdcaS);
 
@@ -338,6 +415,56 @@ void AliAnalysisTaskSED0Mass::UserCreateOutputObjects()
        fDistr->Add(tmpMS);
       }
 
+
+      //Ncls, phi, pt distrubutions
+
+      namedistr="hNclsD0vsptB_";
+      namedistr+=i;
+      TH2F *hNclsD0vsptB = new TH2F(namedistr.Data(),"N cls distrubution [B];p_{T} [GeV/c];N cls",200,0.,20.,100,0.,200.);
+      namedistr="hNclsD0barvsptB_";
+      namedistr+=i;
+      TH2F *hNclsD0barvsptB = new TH2F(namedistr.Data(),"N cls distrubution [B];p_{T} [GeV/c];N cls",200,0.,20.,100,0.,200.);
+
+      namedistr="hNITSpointsD0vsptB_";
+      namedistr+=i;
+      TH2F *hNITSpointsD0vsptB = new TH2F(namedistr.Data(),"N ITS points distrubution [B];p_{T} [GeV/c];N points",200,0.,20.,7,0.,7.);
+
+      namedistr="hNSPDpointsD0B_";
+      namedistr+=i;
+      TH1I *hNSPDpointsD0B = new TH1I(namedistr.Data(),"N SPD points distrubution [B]; ;N tracks",4,0,4);
+      hNSPDpointsD0B->GetXaxis()->SetBinLabel(1, "no SPD");
+      hNSPDpointsD0B->GetXaxis()->SetBinLabel(2, "kOnlyFirst");
+      hNSPDpointsD0B->GetXaxis()->SetBinLabel(3, "kOnlySecond");
+      hNSPDpointsD0B->GetXaxis()->SetBinLabel(4, "kBoth");
+
+      namedistr="hptD0B_";
+      namedistr+=i;
+      TH1F *hptD0B = new TH1F(namedistr.Data(), "p_{T} distribution [B];p_{T} [GeV/c]",200,0.,20.);
+      namedistr="hptD0barB_";
+      namedistr+=i;
+      TH1F *hptD0barB = new TH1F(namedistr.Data(), "p_{T} distribution [B];p_{T} [GeV/c]",200,0.,20.);
+      
+      namedistr="hphiD0B_";
+      namedistr+=i;
+      TH1F *hphiD0B = new TH1F(namedistr.Data(), "#phi distribution [B];#phi [rad]",100,0.,2*TMath::Pi());
+      namedistr="hphiD0barB_";
+      namedistr+=i;
+      TH1F *hphiD0barB = new TH1F(namedistr.Data(), "#phi distribution [B];#phi [rad]",100,0.,2*TMath::Pi());
+
+      namedistr="hetaphiD0candidateB_";
+      namedistr+=i;
+      TH2F *hetaphiD0candidateB = new TH2F(namedistr.Data(), "D^{0} candidates #eta #phi distribution [B];#eta;#phi [rad]",100, -1.5, 1.5, 100, 0.,2*TMath::Pi());
+      namedistr="hetaphiD0barcandidateB_";
+      namedistr+=i;
+      TH2F *hetaphiD0barcandidateB = new TH2F(namedistr.Data(), "anti-D^{0} candidates #eta #phi distribution [B];#eta;#phi [rad]",100, -1.5, 1.5, 100, 0.,2*TMath::Pi());
+      
+      namedistr="hetaphiD0candidatesignalregionB_";
+      namedistr+=i;
+      TH2F *hetaphiD0candidatesignalregionB = new TH2F(namedistr.Data(), "D^{0} candidates #eta #phi distribution [B] [mass cut];#eta;#phi [rad]",100, -1.5, 1.5, 100, 0.,2*TMath::Pi());
+      namedistr="hetaphiD0barcandidatesignalregionB_";
+      namedistr+=i;
+      TH2F *hetaphiD0barcandidatesignalregionB = new TH2F(namedistr.Data(), "anti-D^{0} candidates #eta #phi distribution [B] [mass cut];#eta;#phi [rad]",100, -1.5, 1.5, 100, 0.,2*TMath::Pi());
+      
       //  dca
       namedistr="hdcaB_";
       namedistr+=i;
@@ -389,7 +516,19 @@ void AliAnalysisTaskSED0Mass::UserCreateOutputObjects()
       tmpMB->Sumw2();
 
 
-
+      fDistr->Add(hNclsD0vsptB);
+      fDistr->Add(hNclsD0barvsptB);
+      fDistr->Add(hNITSpointsD0vsptB);
+      fDistr->Add(hNSPDpointsD0B);
+      fDistr->Add(hptD0B);
+      fDistr->Add(hphiD0B);
+      fDistr->Add(hptD0barB);
+      fDistr->Add(hphiD0barB);
+      fDistr->Add(hetaphiD0candidateB);
+      fDistr->Add(hetaphiD0candidatesignalregionB);
+      fDistr->Add(hetaphiD0barcandidateB);
+      fDistr->Add(hetaphiD0barcandidatesignalregionB);
+     
       fDistr->Add(hdcaB);
 
       fDistr->Add(hd0B);
@@ -712,6 +851,39 @@ void AliAnalysisTaskSED0Mass::UserCreateOutputObjects()
   }
 
   if(fFillImpParHist) CreateImpactParameterHistos();
+  
+  // 2D Y distributions
+  
+  if(fFillYHist) {
+    for(Int_t i=0;i<fCuts->GetNPtBins();i++){
+      nameMassY="histMassY_";
+      nameMassY+=i;
+      nameSgnY="histSgnY_";
+      nameSgnY+=i;
+      nameBkgY="histBkgY_";
+      nameBkgY+=i;
+      nameRflY="histRflY_";
+      nameRflY+=i;
+      //MC signal
+      if(fReadMC){
+       TH2F* tmpStY = new TH2F(nameSgnY.Data(), "D^{0} invariant mass - MC; M [GeV]; Entries; y",200,1.5648,2.16484,nbins2dY,binInY,binFinY);
+       tmpStY->Sumw2();
+       //Reflection: histo filled with D0MassV1 which pass the cut (also) as D0bar and with D0bar which pass (also) the cut as D0
+       TH2F* tmpRtY = new TH2F(nameRflY.Data(), "Reflected signal invariant mass - MC; M [GeV]; Entries; y",200,1.5648,2.1648,nbins2dY,binInY,binFinY);
+       TH2F* tmpBtY = new TH2F(nameBkgY.Data(), "Background invariant mass - MC; M [GeV]; Entries; y",200,1.5648,2.1648,nbins2dY,binInY,binFinY);
+       tmpBtY->Sumw2();
+       tmpRtY->Sumw2();
+      
+       fOutputMassY->Add(tmpStY);
+       fOutputMassY->Add(tmpRtY);
+       fOutputMassY->Add(tmpBtY);
+      }
+      TH2F* tmpMtY = new TH2F(nameMassY.Data(),"D^{0} invariant mass; M [GeV]; Entries; y",200,1.5648,2.1648,nbins2dY,binInY,binFinY);
+      tmpMtY->Sumw2();      
+      fOutputMassY->Add(tmpMtY);
+    }
+  }
+
 
   const char* nameoutput=GetOutputSlot(3)->GetContainer()->GetName();
 
@@ -775,7 +947,6 @@ void AliAnalysisTaskSED0Mass::UserCreateOutputObjects()
   //
   // Output slot 8 : List for detector response histograms
   //
-  fDetSignal = new TList();
   if (fDrawDetSignal) {
     TH2F *TOFSigBefPID = new TH2F("TOFSigBefPID", "TOF signal of daughters before PID;p(daught)(GeV/c);Signal", 500, 0, 10, 5000, 0, 50e3);
     TH2F *TOFSigAftPID = new TH2F("TOFSigAftPID", "TOF signal after PID;p(daught)(GeV/c);Signal", 500, 0, 10, 5000, 0, 50e3);
@@ -797,6 +968,7 @@ void AliAnalysisTaskSED0Mass::UserCreateOutputObjects()
   PostData(6,fOutputMassPt);
   PostData(7,fVariablesTree);
   PostData(8, fDetSignal);
+  PostData(9,fOutputMassY);
 
   return;
 }
@@ -1089,7 +1261,7 @@ void AliAnalysisTaskSED0Mass::FillVarHists(AliAODEvent* aod,AliAODRecoDecayHF2Pr
 
   Double_t invmasscut=0.03;
 
-  TString fillthispi="",fillthisK="",fillthis="", fillthispt="";
+  TString fillthispi="",fillthisK="",fillthis="", fillthispt="", fillthisetaphi="";
 
   Int_t ptbin=cuts->PtBin(part->Pt());
   Double_t pt = part->Pt();
@@ -1136,6 +1308,8 @@ void AliAnalysisTaskSED0Mass::FillVarHists(AliAODEvent* aod,AliAODRecoDecayHF2Pr
   Double_t decayLength2 = -1, decayLengthxy=-1;
   Double_t ptProng[2]={-99,-99};
   Double_t d0Prong[2]={-99,-99};
+  Double_t etaD = 99.;
+  Double_t phiD = 99.;
   
 
   //disable the PID
@@ -1187,6 +1361,11 @@ void AliAnalysisTaskSED0Mass::FillVarHists(AliAODEvent* aod,AliAODRecoDecayHF2Pr
     }
 
     //no mass cut ditributions: mass
+
+    etaD = part->Eta();
+    phiD = part->Phi();
+
+
     fillthis="hMassS_";
     fillthis+=ptbin;
     fillthispt="histSgnPt";
@@ -1195,11 +1374,33 @@ void AliAnalysisTaskSED0Mass::FillVarHists(AliAODEvent* aod,AliAODRecoDecayHF2Pr
        || (!fReadMC && (isSelectedPID==1 || isSelectedPID==3))){//D0
       ((TH1F*)listout->FindObject(fillthis))->Fill(minvD0);
       if(fFillPtHist && fReadMC) ((TH2F*)fOutputMassPt->FindObject(fillthispt))->Fill(minvD0,pt);
+      
+      fillthisetaphi="hetaphiD0candidateS_";   
+      fillthisetaphi+=ptbin;
+      ((TH2F*)listout->FindObject(fillthisetaphi))->Fill(etaD, phiD);
+    
+      if(TMath::Abs(minvD0-mPDG)<0.05){
+       fillthisetaphi="hetaphiD0candidatesignalregionS_";      
+       fillthisetaphi+=ptbin;
+       ((TH2F*)listout->FindObject(fillthisetaphi))->Fill(etaD, phiD);
+      }
+
     }
     else { //D0bar
       if(fReadMC || (!fReadMC && isSelectedPID > 1)){
        ((TH1F*)listout->FindObject(fillthis))->Fill(minvD0bar);
        if(fFillPtHist && fReadMC) ((TH2F*)fOutputMassPt->FindObject(fillthispt))->Fill(minvD0bar,pt);
+
+       fillthisetaphi="hetaphiD0barcandidateS_";       
+       fillthisetaphi+=ptbin;
+       ((TH2F*)listout->FindObject(fillthisetaphi))->Fill(etaD, phiD);
+       
+       if(TMath::Abs(minvD0bar-mPDG)<0.05){
+         fillthisetaphi="hetaphiD0barcandidatesignalregionS_"; 
+         fillthisetaphi+=ptbin;
+         ((TH2F*)listout->FindObject(fillthisetaphi))->Fill(etaD, phiD);
+       }
+
       }
     }
 
@@ -1239,6 +1440,7 @@ void AliAnalysisTaskSED0Mass::FillVarHists(AliAODEvent* aod,AliAODRecoDecayHF2Pr
            fillthispi+=ptbin;
            ((TH1F*)listout->FindObject(fillthispi))->Fill(ptProng[iprong]);
          }
+
          fillthispi="hd0piS_";
          fillthispi+=ptbin;
          ((TH1F*)listout->FindObject(fillthispi))->Fill(d0Prong[iprong]);
@@ -1258,6 +1460,8 @@ void AliAnalysisTaskSED0Mass::FillVarHists(AliAODEvent* aod,AliAODRecoDecayHF2Pr
            fillthisK+=ptbin;
            ((TH1F*)listout->FindObject(fillthisK))->Fill(ptProng[iprong]);
          }
+
+
          fillthisK="hd0KS_";
          fillthisK+=ptbin;
          ((TH1F*)listout->FindObject(fillthisK))->Fill(d0Prong[iprong]);
@@ -1344,12 +1548,106 @@ void AliAnalysisTaskSED0Mass::FillVarHists(AliAODEvent* aod,AliAODRecoDecayHF2Pr
        ((TH2F*)listout->FindObject(fillthis))->Fill(cosPointingAngle,part->Prodd0d0());
       }
 
-    } //end mass cut
+      if ((fReadMC && ((AliAODMCParticle*)arrMC->At(lab))->GetPdgCode() == 421)){
+       for(Int_t it=0; it<2; it++){
+         fillthis="hptD0S_";
+         fillthis+=ptbin;
+         ((TH1F*)listout->FindObject(fillthis))->Fill(((AliAODTrack*)fDaughterTracks.UncheckedAt(it))->Pt());
+         fillthis="hphiD0S_";
+         fillthis+=ptbin;
+         ((TH1F*)listout->FindObject(fillthis))->Fill(((AliAODTrack*)fDaughterTracks.UncheckedAt(it))->Phi());
+         Int_t nPointsITS = 0;
+         for (Int_t il=0; il<6; il++){ 
+           if(((AliAODTrack*)fDaughterTracks.UncheckedAt(it))->HasPointOnITSLayer(il)) nPointsITS++;
+         }
+         fillthis="hNITSpointsD0vsptS_";
+         fillthis+=ptbin;
+         ((TH2F*)listout->FindObject(fillthis))->Fill(((AliAODTrack*)fDaughterTracks.UncheckedAt(it))->Pt(),nPointsITS);
+         fillthis="hNSPDpointsD0S_";
+         fillthis+=ptbin;
+         if(!(((AliAODTrack*)fDaughterTracks.UncheckedAt(it))->HasPointOnITSLayer(0)) && !(((AliAODTrack*)fDaughterTracks.UncheckedAt(it))->HasPointOnITSLayer(1))){ //no SPD points
+           ((TH1I*)listout->FindObject(fillthis))->Fill(0);
+         } 
+         if(((AliAODTrack*)fDaughterTracks.UncheckedAt(it))->HasPointOnITSLayer(0) && !(((AliAODTrack*)(fDaughterTracks.UncheckedAt(it)))->HasPointOnITSLayer(1))){ //kOnlyFirst
+           ((TH1I*)listout->FindObject(fillthis))->Fill(1);
+         } 
+         if(!(((AliAODTrack*)fDaughterTracks.UncheckedAt(it))->HasPointOnITSLayer(0)) && ((AliAODTrack*)fDaughterTracks.UncheckedAt(it))->HasPointOnITSLayer(1)){ //kOnlySecond
+           ((TH1I*)listout->FindObject(fillthis))->Fill(2);
+         }
+         if(((AliAODTrack*)fDaughterTracks.UncheckedAt(it))->HasPointOnITSLayer(0) && ((AliAODTrack*)fDaughterTracks.UncheckedAt(it))->HasPointOnITSLayer(1)){ //kboth
+           ((TH1I*)listout->FindObject(fillthis))->Fill(3);
+         } 
+         fillthis="hNclsD0vsptS_";
+         fillthis+=ptbin;
+         Float_t mom = ((AliAODTrack*)fDaughterTracks.UncheckedAt(it))->Pt();
+         Float_t ncls = (Float_t)((AliAODTrack*)fDaughterTracks.UncheckedAt(0))->GetTPCNcls();
+         ((TH2F*)listout->FindObject(fillthis))->Fill(mom, ncls);
+       }
+      }
+      else {
+       if (fReadMC || isSelectedPID>1){
+         for(Int_t it=0; it<2; it++){
+           fillthis="hptD0barS_";
+           fillthis+=ptbin;
+           ((TH1F*)listout->FindObject(fillthis))->Fill(((AliAODTrack*)fDaughterTracks.UncheckedAt(it))->Pt());
+           fillthis="hphiD0barS_";
+           fillthis+=ptbin;
+           ((TH1F*)listout->FindObject(fillthis))->Fill(((AliAODTrack*)fDaughterTracks.UncheckedAt(it))->Phi());
+           fillthis="hNclsD0barvsptS_";
+           fillthis+=ptbin;
+           Float_t mom = ((AliAODTrack*)fDaughterTracks.UncheckedAt(it))->Pt();
+           Float_t ncls = (Float_t)((AliAODTrack*)fDaughterTracks.UncheckedAt(it))->GetTPCNcls();
+           ((TH2F*)listout->FindObject(fillthis))->Fill(mom, ncls);
+         }       
+       }
+       if(isSelectedPID==1 || isSelectedPID==3){
+         for(Int_t it=0; it<2; it++){
+           fillthis="hptD0S_";
+           fillthis+=ptbin;
+           ((TH1F*)listout->FindObject(fillthis))->Fill(((AliAODTrack*)fDaughterTracks.UncheckedAt(it))->Pt());
+           fillthis="hphiD0S_";
+           fillthis+=ptbin;
+           ((TH1F*)listout->FindObject(fillthis))->Fill(((AliAODTrack*)fDaughterTracks.UncheckedAt(it))->Phi());
+           Int_t nPointsITS = 0;
+           for (Int_t il=0; il<6; il++){ 
+             if(((AliAODTrack*)fDaughterTracks.UncheckedAt(it))->HasPointOnITSLayer(il)) nPointsITS++;
+           }
+           fillthis="hNITSpointsD0vsptS_";
+           fillthis+=ptbin;
+           ((TH2F*)listout->FindObject(fillthis))->Fill(((AliAODTrack*)fDaughterTracks.UncheckedAt(it))->Pt(), nPointsITS);
+           fillthis="hNSPDpointsD0S_";
+           fillthis+=ptbin;
+           if(!(((AliAODTrack*)fDaughterTracks.UncheckedAt(it))->HasPointOnITSLayer(0)) && !(((AliAODTrack*)fDaughterTracks.UncheckedAt(it))->HasPointOnITSLayer(1))){ //no SPD points
+             ((TH1I*)listout->FindObject(fillthis))->Fill(0);
+           } 
+           if(((AliAODTrack*)fDaughterTracks.UncheckedAt(it))->HasPointOnITSLayer(0) && !(((AliAODTrack*)(fDaughterTracks.UncheckedAt(it)))->HasPointOnITSLayer(1))){ //kOnlyFirst
+             ((TH1I*)listout->FindObject(fillthis))->Fill(1);
+           } 
+           if(!(((AliAODTrack*)fDaughterTracks.UncheckedAt(it))->HasPointOnITSLayer(0)) && ((AliAODTrack*)fDaughterTracks.UncheckedAt(it))->HasPointOnITSLayer(1)){ //kOnlySecond
+             ((TH1I*)listout->FindObject(fillthis))->Fill(2);
+           }
+           if(((AliAODTrack*)fDaughterTracks.UncheckedAt(it))->HasPointOnITSLayer(0) && ((AliAODTrack*)fDaughterTracks.UncheckedAt(it))->HasPointOnITSLayer(1)){ //kboth
+             ((TH1I*)listout->FindObject(fillthis))->Fill(3);
+           } 
+                   fillthis="hNclsD0vsptS_";
+           fillthis+=ptbin;
+           Float_t mom = ((AliAODTrack*)fDaughterTracks.UncheckedAt(it))->Pt();
+           Float_t ncls = (Float_t)((AliAODTrack*)fDaughterTracks.UncheckedAt(0))->GetTPCNcls();
+           ((TH2F*)listout->FindObject(fillthis))->Fill(mom, ncls);
+         }
+       }         
+      }
+      
+      
+      } //end mass cut
     
   } else{ //Background or LS
     //if(!fReadMC){
     //cout<<"is background"<<endl;
-     
+
+    etaD = part->Eta();
+    phiD = part->Phi();
+           
     //no mass cut distributions: mass, ptbis
     fillthis="hMassB_";
     fillthis+=ptbin;
@@ -1358,10 +1656,31 @@ void AliAnalysisTaskSED0Mass::FillVarHists(AliAODEvent* aod,AliAODRecoDecayHF2Pr
     if (!fCutOnDistr || (fCutOnDistr && (fIsSelectedCandidate==1 || fIsSelectedCandidate==3))) {
       ((TH1F*)listout->FindObject(fillthis))->Fill(minvD0);
       if(fFillPtHist && fReadMC) ((TH2F*)fOutputMassPt->FindObject(fillthispt))->Fill(minvD0,pt);
+      
+      fillthisetaphi="hetaphiD0candidateB_";
+      fillthisetaphi+=ptbin;
+      ((TH2F*)listout->FindObject(fillthisetaphi))->Fill(etaD, phiD);
+    
+      if(TMath::Abs(minvD0-mPDG)<0.05){
+       fillthisetaphi="hetaphiD0candidatesignalregionB_";
+       fillthisetaphi+=ptbin;
+       ((TH2F*)listout->FindObject(fillthisetaphi))->Fill(etaD, phiD);
+      }
     }
     if (!fCutOnDistr || (fCutOnDistr && fIsSelectedCandidate>1)) {
       ((TH1F*)listout->FindObject(fillthis))->Fill(minvD0bar);
       if(fFillPtHist && fReadMC) ((TH2F*)fOutputMassPt->FindObject(fillthispt))->Fill(minvD0bar,pt);
+
+      fillthisetaphi="hetaphiD0barcandidateB_";        
+      fillthisetaphi+=ptbin;
+      ((TH2F*)listout->FindObject(fillthisetaphi))->Fill(etaD, phiD);
+      
+      if(TMath::Abs(minvD0bar-mPDG)<0.05){
+       fillthisetaphi="hetaphiD0barcandidatesignalregionB_";   
+       fillthisetaphi+=ptbin;
+       ((TH2F*)listout->FindObject(fillthisetaphi))->Fill(etaD, phiD);
+      }
+
     }
     if(fSys==0){
       fillthis="hptB1prongnoMcut_";
@@ -1374,8 +1693,10 @@ void AliAnalysisTaskSED0Mass::FillVarHists(AliAODEvent* aod,AliAODRecoDecayHF2Pr
       ((TH1F*)listout->FindObject(fillthis))->Fill(((AliAODTrack*)fDaughterTracks.UncheckedAt(0))->Pt());
       ((TH1F*)listout->FindObject(fillthis))->Fill(((AliAODTrack*)fDaughterTracks.UncheckedAt(0))->Pt());
     }
-    //apply cut on invariant mass on the pair
-    if(TMath::Abs(minvD0-mPDG)<invmasscut || TMath::Abs(minvD0bar-mPDG)<invmasscut){
+
+
+      //apply cut on invariant mass on the pair
+      if(TMath::Abs(minvD0-mPDG)<invmasscut || TMath::Abs(minvD0bar-mPDG)<invmasscut){
       if(fSys==0){
        ptProng[0]=((AliAODTrack*)fDaughterTracks.UncheckedAt(0))->Pt(); ptProng[1]=((AliAODTrack*)fDaughterTracks.UncheckedAt(0))->Pt();
        cosThetaStarD0 = part->CosThetaStarD0();
@@ -1388,7 +1709,7 @@ void AliAnalysisTaskSED0Mass::FillVarHists(AliAODEvent* aod,AliAODRecoDecayHF2Pr
       decayLengthxy = part->DecayLengthXY();
       normalizedDecayLengthxy=decayLengthxy/part->DecayLengthXYError();
       d0Prong[0]=part->Getd0Prong(0); d0Prong[1]=part->Getd0Prong(1);
-
+     
 
       AliAODTrack *prongg=(AliAODTrack*)fDaughterTracks.UncheckedAt(0);
       if(!prongg) {
@@ -1406,6 +1727,64 @@ void AliAnalysisTaskSED0Mass::FillVarHists(AliAODEvent* aod,AliAODRecoDecayHF2Pr
          }
        }
       }
+
+      //fill pt and phi distrib for prongs with M cut
+
+      if (!fCutOnDistr || (fCutOnDistr && (fIsSelectedCandidate==1 || fIsSelectedCandidate==3))){
+         for(Int_t it=0; it<2; it++){
+           fillthis="hptD0B_";
+           fillthis+=ptbin;
+           ((TH1F*)listout->FindObject(fillthis))->Fill(((AliAODTrack*)fDaughterTracks.UncheckedAt(it))->Pt());
+           fillthis="hphiD0B_";
+           fillthis+=ptbin;
+           ((TH1F*)listout->FindObject(fillthis))->Fill(((AliAODTrack*)fDaughterTracks.UncheckedAt(it))->Phi());
+
+           Int_t nPointsITS = 0;
+           for (Int_t il=0; il<6; il++){ 
+             if(((AliAODTrack*)fDaughterTracks.UncheckedAt(it))->HasPointOnITSLayer(il)) nPointsITS++;
+           }
+           fillthis="hNITSpointsD0vsptB_";
+           fillthis+=ptbin;
+           ((TH2F*)listout->FindObject(fillthis))->Fill(((AliAODTrack*)fDaughterTracks.UncheckedAt(it))->Pt(), nPointsITS);
+           fillthis="hNSPDpointsD0B_";
+           fillthis+=ptbin;
+           if(!(((AliAODTrack*)fDaughterTracks.UncheckedAt(it))->HasPointOnITSLayer(0)) && !(((AliAODTrack*)fDaughterTracks.UncheckedAt(it))->HasPointOnITSLayer(1))){ //no SPD points
+             ((TH1I*)listout->FindObject(fillthis))->Fill(0);
+           } 
+           if(((AliAODTrack*)fDaughterTracks.UncheckedAt(it))->HasPointOnITSLayer(0) && !(((AliAODTrack*)(fDaughterTracks.UncheckedAt(it)))->HasPointOnITSLayer(1))){ //kOnlyFirst
+             ((TH1I*)listout->FindObject(fillthis))->Fill(1);
+           } 
+           if(!(((AliAODTrack*)fDaughterTracks.UncheckedAt(it))->HasPointOnITSLayer(0)) && ((AliAODTrack*)fDaughterTracks.UncheckedAt(it))->HasPointOnITSLayer(1)){ //kOnlySecond
+             ((TH1I*)listout->FindObject(fillthis))->Fill(2);
+           }
+           if(((AliAODTrack*)fDaughterTracks.UncheckedAt(it))->HasPointOnITSLayer(0) && ((AliAODTrack*)fDaughterTracks.UncheckedAt(it))->HasPointOnITSLayer(1)){ //kboth
+             ((TH1I*)listout->FindObject(fillthis))->Fill(3);
+           } 
+           fillthis="hNclsD0vsptB_";
+           fillthis+=ptbin;
+           Float_t mom = ((AliAODTrack*)fDaughterTracks.UncheckedAt(it))->Pt();
+           Float_t ncls = (Float_t)((AliAODTrack*)fDaughterTracks.UncheckedAt(it))->GetTPCNcls();
+           ((TH2F*)listout->FindObject(fillthis))->Fill(mom, ncls);        
+         }
+
+
+       }
+
+       if (!fCutOnDistr || (fCutOnDistr && fIsSelectedCandidate>1)) {
+         for(Int_t it=0; it<2; it++){
+           fillthis="hptD0barB_";
+           fillthis+=ptbin;
+           ((TH1F*)listout->FindObject(fillthis))->Fill(((AliAODTrack*)fDaughterTracks.UncheckedAt(it))->Pt());
+           fillthis="hphiD0barB_";
+           fillthis+=ptbin;
+           ((TH1F*)listout->FindObject(fillthis))->Fill(((AliAODTrack*)fDaughterTracks.UncheckedAt(it))->Phi());
+           fillthis="hNclsD0barvsptB_";
+           fillthis+=ptbin;
+           Float_t mom = ((AliAODTrack*)fDaughterTracks.UncheckedAt(it))->Pt();
+           Float_t ncls = (Float_t)((AliAODTrack*)fDaughterTracks.UncheckedAt(it))->GetTPCNcls();
+           ((TH2F*)listout->FindObject(fillthis))->Fill(mom, ncls);
+         }
+       }
        
       fillthis="hd0B_";
       fillthis+=ptbin;
@@ -1567,7 +1946,8 @@ void AliAnalysisTaskSED0Mass::FillVarHists(AliAODEvent* aod,AliAODRecoDecayHF2Pr
 
       fillthis="hnormdeclxyd0d0B_";
       fillthis+=ptbin;
-      ((TH2F*)listout->FindObject(fillthis))->Fill(normalizedDecayLengthxy,d0Prong[0]*d0Prong[1]);     
+      ((TH2F*)listout->FindObject(fillthis))->Fill(normalizedDecayLengthxy,d0Prong[0]*d0Prong[1]);
+
 
       if(recalcvtx) {
 
@@ -1635,6 +2015,7 @@ void AliAnalysisTaskSED0Mass::FillMassHists(AliAODRecoDecayHF2Prong *part, TClon
   //printf("SELECTED\n");
   Int_t ptbin=cuts->PtBin(part->Pt());
   Double_t pt = part->Pt();
+  Double_t y = part->YD0();
   
   Double_t impparXY=part->ImpParXY()*10000.;
   Double_t trueImpParXY=0.;
@@ -1668,7 +2049,7 @@ void AliAnalysisTaskSED0Mass::FillMassHists(AliAODRecoDecayHF2Prong *part, TClon
   //   }
   // }
  
-  TString fillthis="", fillthispt="", fillthismasspt="";
+  TString fillthis="", fillthispt="", fillthismasspt="", fillthismassy="";
   Int_t pdgDgD0toKpi[2]={321,211};
   Int_t labD0=-1;
   Bool_t isPrimary=kTRUE;
@@ -1725,6 +2106,12 @@ void AliAnalysisTaskSED0Mass::FillMassHists(AliAODRecoDecayHF2Prong *part, TClon
            }
          }
 
+         if(fFillYHist){ 
+           fillthismassy="histSgnY_";
+           fillthismassy+=ptbin;
+           ((TH2F*)(fOutputMassY->FindObject(fillthismassy)))->Fill(invmassD0,y,weigD0);
+         }
+
          if(fSys==0){
            if(TMath::Abs(invmassD0 - mPDG) < 0.027 && fFillVarHists){
              fillthis="histSgn27_";
@@ -1743,6 +2130,13 @@ void AliAnalysisTaskSED0Mass::FillMassHists(AliAODRecoDecayHF2Prong *part, TClon
            ((TH2F*)(fOutputMassPt->FindObject(fillthismasspt)))->Fill(invmassD0,pt,weigD0);
          }
 
+         if(fFillYHist){ 
+           fillthismassy="histRflY_";
+           fillthismassy+=ptbin;
+           //      cout << " Filling "<<fillthismassy<<" D0bar"<<endl;     
+           ((TH2F*)(fOutputMassY->FindObject(fillthismassy)))->Fill(invmassD0,y,weigD0);
+         }
+
        }
       } else {//background
        fillthis="histBkg_";
@@ -1756,6 +2150,13 @@ void AliAnalysisTaskSED0Mass::FillMassHists(AliAODRecoDecayHF2Prong *part, TClon
        }
        if(fFillImpParHist) fHistMassPtImpParTC[4]->Fill(arrayForSparse,weigD0);
 
+       if(fFillYHist){ 
+         fillthismassy="histBkgY_";
+         fillthismassy+=ptbin;
+         //      cout << " Filling "<<fillthismassy<<" D0bar"<<endl;
+         ((TH2F*)(fOutputMassY->FindObject(fillthismassy)))->Fill(invmassD0,y,weigD0);
+       }
+
       }
 
     }else{
@@ -1777,6 +2178,13 @@ void AliAnalysisTaskSED0Mass::FillMassHists(AliAODRecoDecayHF2Prong *part, TClon
        fHistMassPtImpParTC[0]->Fill(arrayForSparse,weigD0);
       }
 
+      if(fFillYHist){ 
+       fillthismassy="histMassY_";
+       fillthismassy+=ptbin;
+       //      cout<<"Filling "<<fillthismassy<<endl;
+       ((TH2F*)(fOutputMassY->FindObject(fillthismassy)))->Fill(invmassD0,y,weigD0);
+      }
+
     }
      
   }
@@ -1819,6 +2227,13 @@ void AliAnalysisTaskSED0Mass::FillMassHists(AliAODRecoDecayHF2Prong *part, TClon
              fHistMassPtImpParTC[3]->Fill(arrayForSparseTrue,weigD0bar);
            }
          }
+
+         if(fFillYHist){ 
+           fillthismassy="histSgnY_";
+           fillthismassy+=ptbin;
+           //      cout<<" Filling "<< fillthismassy << endl;
+           ((TH2F*)(fOutputMassY->FindObject(fillthismassy)))->Fill(invmassD0bar,y,weigD0bar);
+         }
          
        } else{
          fillthis="histRfl_";
@@ -1829,6 +2244,12 @@ void AliAnalysisTaskSED0Mass::FillMassHists(AliAODRecoDecayHF2Prong *part, TClon
            //      cout << " Filling "<<fillthismasspt<<endl;
            ((TH2F*)(fOutputMassPt->FindObject(fillthismasspt)))->Fill(invmassD0bar,pt,weigD0bar);
          }
+         if(fFillYHist){ 
+           fillthismassy="histRflY_";
+           fillthismassy+=ptbin;
+           //      cout << " Filling "<<fillthismassy<<endl;
+           ((TH2F*)(fOutputMassY->FindObject(fillthismassy)))->Fill(invmassD0bar,y,weigD0bar);
+         }
        }
       } else {//background or LS
        fillthis="histBkg_";
@@ -1841,7 +2262,12 @@ void AliAnalysisTaskSED0Mass::FillMassHists(AliAODRecoDecayHF2Prong *part, TClon
          ((TH2F*)(fOutputMassPt->FindObject(fillthismasspt)))->Fill(invmassD0bar,pt,weigD0bar);
        }
        if(fFillImpParHist) fHistMassPtImpParTC[4]->Fill(arrayForSparse,weigD0bar);
-
+       if(fFillYHist){ 
+         fillthismassy="histBkgY_";
+         fillthismassy+=ptbin;
+         //      cout<<" Filling "<< fillthismassy << endl;
+         ((TH2F*)(fOutputMassY->FindObject(fillthismassy)))->Fill(invmassD0bar,y,weigD0bar);
+       }
       }
     }else{
       fillthis="histMass_";
@@ -1857,7 +2283,12 @@ void AliAnalysisTaskSED0Mass::FillMassHists(AliAODRecoDecayHF2Prong *part, TClon
        ((TH2F*)(fOutputMassPt->FindObject(fillthismasspt)))->Fill(invmassD0bar,pt,weigD0bar);
       }
       if(fFillImpParHist) fHistMassPtImpParTC[0]->Fill(arrayForSparse,weigD0bar);
-
+      if(fFillYHist){ 
+       fillthismassy="histMassY_";
+       fillthismassy+=ptbin;
+       //      cout<<" Filling "<< fillthismassy << endl;
+       ((TH2F*)(fOutputMassY->FindObject(fillthismassy)))->Fill(invmassD0bar,y,weigD0bar);
+      }
     }
   }
 
@@ -1964,6 +2395,14 @@ void AliAnalysisTaskSED0Mass::Terminate(Option_t */*option*/)
       return;
     }
   }
+  if(fFillYHist){
+    fOutputMassY = dynamic_cast<TList*> (GetOutputData(9));
+    if (fFillYHist && !fOutputMassY) {
+      printf("ERROR: fOutputMassY not available\n");
+      return;
+    }
+  }
+
   Int_t nptbins=fCuts->GetNPtBins();
   for(Int_t ipt=0;ipt<nptbins;ipt++){