X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;f=PWGHF%2FvertexingHF%2FAliAnalysisTaskSED0Mass.cxx;h=7236b85c912da1c4474e967223399b02458348da;hb=bbeea05b761ba109b0280af9f1d57254222b059a;hp=4fd37c3672af97ba84d179e979b2415107cf0cd4;hpb=19678166bd326f83f1466290297990665b55005a;p=u%2Fmrichter%2FAliRoot.git diff --git a/PWGHF/vertexingHF/AliAnalysisTaskSED0Mass.cxx b/PWGHF/vertexingHF/AliAnalysisTaskSED0Mass.cxx index 4fd37c3672a..7236b85c912 100644 --- a/PWGHF/vertexingHF/AliAnalysisTaskSED0Mass.cxx +++ b/PWGHF/vertexingHF/AliAnalysisTaskSED0Mass.cxx @@ -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 #include @@ -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;iGetNPtBins();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;iGetNPtBins();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"<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)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 "<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 "<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 "<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 "<FindObject(fillthismasspt)))->Fill(invmassD0bar,pt,weigD0bar); } + if(fFillYHist){ + fillthismassy="histRflY_"; + fillthismassy+=ptbin; + // cout << " Filling "<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 (GetOutputData(9)); + if (fFillYHist && !fOutputMassY) { + printf("ERROR: fOutputMassY not available\n"); + return; + } + } + Int_t nptbins=fCuts->GetNPtBins(); for(Int_t ipt=0;ipt