// 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>
AliAnalysisTaskSE(),
fOutputMass(0),
fOutputMassPt(0),
+ fOutputMassY(0),
fDistr(0),
fNentries(0),
fCuts(0),
fSys(0),
fIsRejectSDDClusters(0),
fFillPtHist(kTRUE),
+ fFillYHist(kFALSE),
fFillImpParHist(kFALSE),
fUseSelectionBit(kTRUE),
fWriteVariableTree(kFALSE),
AliAnalysisTaskSE(name),
fOutputMass(0),
fOutputMassPt(0),
+ fOutputMassY(0),
fDistr(0),
fNentries(0),
fCuts(0),
fSys(0),
fIsRejectSDDClusters(0),
fFillPtHist(kTRUE),
+ fFillYHist(kFALSE),
fFillImpParHist(kFALSE),
fUseSelectionBit(kTRUE),
fWriteVariableTree(kFALSE),
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
}
//________________________________________________________________________
delete fOutputMassPt;
fOutputMassPt = 0;
}
+ if (fOutputMassY) {
+ delete fOutputMassY;
+ fOutputMassY = 0;
+ }
if (fDistr) {
delete fDistr;
fDistr = 0;
fOutputMassPt->SetOwner();
fOutputMassPt->SetName("listMassPt");
+ fOutputMassY = new TList();
+ fOutputMassY->SetOwner();
+ fOutputMassY->SetName("listMassY");
+
fDistr = new TList();
fDistr->SetOwner();
fDistr->SetName("distributionslist");
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++){
//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;
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);
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;
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);
}
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();
//
// 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);
PostData(6,fOutputMassPt);
PostData(7,fVariablesTree);
PostData(8, fDetSignal);
+ PostData(9,fOutputMassY);
return;
}
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();
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
}
//no mass cut ditributions: mass
+
+ etaD = part->Eta();
+ phiD = part->Phi();
+
+
fillthis="hMassS_";
fillthis+=ptbin;
fillthispt="histSgnPt";
|| (!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);
+ }
+
}
}
fillthispi+=ptbin;
((TH1F*)listout->FindObject(fillthispi))->Fill(ptProng[iprong]);
}
+
fillthispi="hd0piS_";
fillthispi+=ptbin;
((TH1F*)listout->FindObject(fillthispi))->Fill(d0Prong[iprong]);
fillthisK+=ptbin;
((TH1F*)listout->FindObject(fillthisK))->Fill(ptProng[iprong]);
}
+
+
fillthisK="hd0KS_";
fillthisK+=ptbin;
((TH1F*)listout->FindObject(fillthisK))->Fill(d0Prong[iprong]);
((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;
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_";
((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();
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) {
}
}
}
+
+ //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;
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) {
//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.;
// }
// }
- TString fillthis="", fillthispt="", fillthismasspt="";
+ TString fillthis="", fillthispt="", fillthismasspt="", fillthismassy="";
Int_t pdgDgD0toKpi[2]={321,211};
Int_t labD0=-1;
Bool_t isPrimary=kTRUE;
}
}
+ 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_";
((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_";
}
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{
fHistMassPtImpParTC[0]->Fill(arrayForSparse,weigD0);
}
+ if(fFillYHist){
+ fillthismassy="histMassY_";
+ fillthismassy+=ptbin;
+ // cout<<"Filling "<<fillthismassy<<endl;
+ ((TH2F*)(fOutputMassY->FindObject(fillthismassy)))->Fill(invmassD0,y,weigD0);
+ }
+
}
}
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_";
// 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_";
((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_";
((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);
+ }
}
}
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++){