From c135594e505eac2ad036b4925726252b61aa5581 Mon Sep 17 00:00:00 2001 From: dainese Date: Mon, 4 Apr 2011 21:01:00 +0000 Subject: [PATCH] Update (Francesco, Gian Michele) --- PWG3/vertexingHF/AliAnalysisTaskSEDs.cxx | 53 ++++---- PWG3/vertexingHF/AliAnalysisTaskSEDs.h | 2 +- .../AliAnalysisTaskSESignificance.cxx | 123 ++++++++++++------ .../AliAnalysisTaskSESignificance.h | 23 +++- 4 files changed, 131 insertions(+), 70 deletions(-) diff --git a/PWG3/vertexingHF/AliAnalysisTaskSEDs.cxx b/PWG3/vertexingHF/AliAnalysisTaskSEDs.cxx index 0a8e67d1d6d..89854e21c1c 100644 --- a/PWG3/vertexingHF/AliAnalysisTaskSEDs.cxx +++ b/PWG3/vertexingHF/AliAnalysisTaskSEDs.cxx @@ -197,6 +197,9 @@ void AliAnalysisTaskSEDs::Init() if(fDebug > 1) printf("AnalysisTaskSEDs::Init() \n"); fListCuts=new TList(); + fListCuts->SetOwner(); + fListCuts->SetName("CutObjects"); + AliRDHFCutsDstoKKpi *production = new AliRDHFCutsDstoKKpi(*fProdCuts); production->SetName("ProductionCuts"); AliRDHFCutsDstoKKpi *analysis = new AliRDHFCutsDstoKKpi(*fAnalysisCuts); @@ -250,10 +253,10 @@ void AliAnalysisTaskSEDs::UserCreateOutputObjects() fMassHist[index]=new TH1F(hisname.Data(),hisname.Data(),nInvMassBins,minMass,maxMass); fMassHist[index]->Sumw2(); hisname.Form("hMass%sPt%dphi",htype.Data(),i); - fMassHistPhi[index]=new TH1F(hisname.Data(),hisname.Data(),100,minMass,maxMass); + fMassHistPhi[index]=new TH1F(hisname.Data(),hisname.Data(),nInvMassBins,minMass,maxMass); fMassHistPhi[index]->Sumw2(); hisname.Form("hMass%sPt%dk0st",htype.Data(),i); - fMassHistK0st[index]=new TH1F(hisname.Data(),hisname.Data(),100,minMass,maxMass); + fMassHistK0st[index]=new TH1F(hisname.Data(),hisname.Data(),nInvMassBins,minMass,maxMass); fMassHistK0st[index]->Sumw2(); hisname.Form("hCosP%sPt%d",htype.Data(),i); fCosPHist[index]=new TH1F(hisname.Data(),hisname.Data(),100,0.5,1.); @@ -316,10 +319,10 @@ void AliAnalysisTaskSEDs::UserCreateOutputObjects() fOutput->Add(fDalitzK0st[i]); } - fChanHist[0] = new TH1F("hChanAll", "KKpi and piKK candidates",16,-0.5,15.5); - fChanHist[1] = new TH1F("hChanSig", "KKpi and piKK candidates",16,-0.5,15.5); - fChanHist[2] = new TH1F("hChanBkg", "KKpi and piKK candidates",16,-0.5,15.5); - fChanHist[3] = new TH1F("hChanReflSig", "KKpi and piKK candidates",16,-0.5,15.5); + fChanHist[0] = new TH1F("hChanAll", "KKpi and piKK candidates",64,-0.5,63.5); + fChanHist[1] = new TH1F("hChanSig", "KKpi and piKK candidates",64,-0.5,63.5); + fChanHist[2] = new TH1F("hChanBkg", "KKpi and piKK candidates",64,-0.5,63.5); + fChanHist[3] = new TH1F("hChanReflSig", "KKpi and piKK candidates",64,-0.5,63.5); for(Int_t i=0;i<4;i++){ fChanHist[i]->Sumw2(); fChanHist[i]->SetMinimum(0); @@ -454,8 +457,10 @@ void AliAnalysisTaskSEDs::UserExec(Option_t */*option*/) Int_t isKKpi=retCodeAnalysisCuts&1; Int_t ispiKK=retCodeAnalysisCuts&2; - Int_t isPhi=retCodeAnalysisCuts&4; - Int_t isK0star=retCodeAnalysisCuts&8; + Int_t isPhiKKpi=retCodeAnalysisCuts&4; + Int_t isPhipiKK=retCodeAnalysisCuts&8; + Int_t isK0starKKpi=retCodeAnalysisCuts&16; + Int_t isK0starpiKK=retCodeAnalysisCuts&32; fChanHist[0]->Fill(retCodeAnalysisCuts); @@ -500,24 +505,24 @@ void AliAnalysisTaskSEDs::UserExec(Option_t */*option*/) Double_t invMass=d->InvMassDsKKpi(); fMassHist[index]->Fill(invMass); fPtVsMass->Fill(invMass,ptCand); - if(isPhi) fMassHistPhi[index]->Fill(invMass); - if(isK0star) fMassHistK0st[index]->Fill(invMass); + if(isPhiKKpi) fMassHistPhi[index]->Fill(invMass); + if(isK0starKKpi) fMassHistK0st[index]->Fill(invMass); if(fReadMC && indexMCKKpi!=-1){ fMassHist[indexMCKKpi]->Fill(invMass); - if(isPhi) fMassHistPhi[indexMCKKpi]->Fill(invMass); - if(isK0star) fMassHistK0st[indexMCKKpi]->Fill(invMass); + if(isPhiKKpi) fMassHistPhi[indexMCKKpi]->Fill(invMass); + if(isK0starKKpi) fMassHistK0st[indexMCKKpi]->Fill(invMass); } } if(ispiKK){ Double_t invMass=d->InvMassDspiKK(); fMassHist[index]->Fill(invMass); fPtVsMass->Fill(invMass,ptCand); - if(isPhi) fMassHistPhi[index]->Fill(invMass); - if(isK0star) fMassHistK0st[index]->Fill(invMass); + if(isPhipiKK) fMassHistPhi[index]->Fill(invMass); + if(isK0starpiKK) fMassHistK0st[index]->Fill(invMass); if(fReadMC && indexMCpiKK!=-1){ fMassHist[indexMCpiKK]->Fill(invMass); - if(isPhi) fMassHistPhi[indexMCpiKK]->Fill(invMass); - if(isK0star) fMassHistK0st[indexMCpiKK]->Fill(invMass); + if(isPhipiKK) fMassHistPhi[indexMCpiKK]->Fill(invMass); + if(isK0starpiKK) fMassHistK0st[indexMCpiKK]->Fill(invMass); } } @@ -547,12 +552,12 @@ void AliAnalysisTaskSEDs::UserExec(Option_t */*option*/) Double_t massKK=d->InvMass2Prongs(0,1,321,321); Double_t massKp=d->InvMass2Prongs(1,2,321,211); fDalitz[index]->Fill(massKK,massKp); - if(isPhi) fDalitzPhi[index]->Fill(massKK,massKp); - if(isK0star) fDalitzK0st[index]->Fill(massKK,massKp); + if(isPhiKKpi) fDalitzPhi[index]->Fill(massKK,massKp); + if(isK0starKKpi) fDalitzK0st[index]->Fill(massKK,massKp); if(fReadMC && indexMCKKpi!=-1){ fDalitz[indexMCKKpi]->Fill(massKK,massKp); - if(isPhi) fDalitzPhi[indexMCKKpi]->Fill(massKK,massKp); - if(isK0star) fDalitzK0st[indexMCKKpi]->Fill(massKK,massKp); + if(isPhiKKpi) fDalitzPhi[indexMCKKpi]->Fill(massKK,massKp); + if(isK0starKKpi) fDalitzK0st[indexMCKKpi]->Fill(massKK,massKp); fCosPHist[indexMCKKpi]->Fill(cosp); fDLenHist[indexMCKKpi]->Fill(dlen); fSigVertHist[indexMCKKpi]->Fill(sigvert); @@ -569,12 +574,12 @@ void AliAnalysisTaskSEDs::UserExec(Option_t */*option*/) Double_t massKK=d->InvMass2Prongs(1,2,321,321); Double_t massKp=d->InvMass2Prongs(0,1,211,321); fDalitz[index]->Fill(massKK,massKp); - if(isPhi) fDalitzPhi[index]->Fill(massKK,massKp); - if(isK0star) fDalitzK0st[index]->Fill(massKK,massKp); + if(isPhipiKK) fDalitzPhi[index]->Fill(massKK,massKp); + if(isK0starpiKK) fDalitzK0st[index]->Fill(massKK,massKp); if(fReadMC && indexMCpiKK!=-1){ fDalitz[indexMCpiKK]->Fill(massKK,massKp); - if(isPhi) fDalitzPhi[indexMCpiKK]->Fill(massKK,massKp); - if(isK0star) fDalitzK0st[indexMCpiKK]->Fill(massKK,massKp); + if(isPhipiKK) fDalitzPhi[indexMCpiKK]->Fill(massKK,massKp); + if(isK0starpiKK) fDalitzK0st[indexMCpiKK]->Fill(massKK,massKp); fCosPHist[indexMCpiKK]->Fill(cosp); fDLenHist[indexMCpiKK]->Fill(dlen); fSigVertHist[indexMCpiKK]->Fill(sigvert); diff --git a/PWG3/vertexingHF/AliAnalysisTaskSEDs.h b/PWG3/vertexingHF/AliAnalysisTaskSEDs.h index 68dd11228e9..6e108abdc9c 100644 --- a/PWG3/vertexingHF/AliAnalysisTaskSEDs.h +++ b/PWG3/vertexingHF/AliAnalysisTaskSEDs.h @@ -51,7 +51,7 @@ class AliAnalysisTaskSEDs : public AliAnalysisTaskSE Int_t GetBackgroundHistoIndex(Int_t iPtBin) const { return iPtBin*4+2;} Int_t GetReflSignalHistoIndex(Int_t iPtBin) const { return iPtBin*4+3;} - enum {kMaxPtBins=10}; + enum {kMaxPtBins=20}; AliAnalysisTaskSEDs(const AliAnalysisTaskSEDs &source); AliAnalysisTaskSEDs& operator=(const AliAnalysisTaskSEDs& source); diff --git a/PWG3/vertexingHF/AliAnalysisTaskSESignificance.cxx b/PWG3/vertexingHF/AliAnalysisTaskSESignificance.cxx index 71b1cd15f25..3f7e741e63b 100644 --- a/PWG3/vertexingHF/AliAnalysisTaskSESignificance.cxx +++ b/PWG3/vertexingHF/AliAnalysisTaskSESignificance.cxx @@ -81,10 +81,12 @@ AliAnalysisTaskSESignificance::AliAnalysisTaskSESignificance(): fSelectionlevel(0), fNVars(0), fNBins(100), - fPartOrAndAntiPart(0) + fPartOrAndAntiPart(0), + fDsChannel(0) { // Default constructor SetPDGCodes(); + SetDsChannel(kPhi); } //________________________________________________________________________ @@ -106,10 +108,12 @@ AliAnalysisTaskSESignificance::AliAnalysisTaskSESignificance(const char *name, T fSelectionlevel(selectionlevel), fNVars(0), fNBins(100), - fPartOrAndAntiPart(0) + fPartOrAndAntiPart(0), + fDsChannel(0) { SetPDGCodes(); + SetDsChannel(kPhi); SetMassLimits(0.15,fPDGmother); //check range fNPtBins=fRDCuts->GetNPtBins(); @@ -533,11 +537,13 @@ void AliAnalysisTaskSESignificance::UserExec(Option_t */*option*/) if(fDebug>1) printf("+++++++Is Selected\n"); Int_t nVals=0; + if(fDecChannel==3) SetPDGdaughterDstoKKpi(); fRDCuts->GetCutVarsForOpt(d,fVars,fNVars,fPDGdaughters); Int_t ptbin=fRDCuts->PtBin(d->Pt()); if(ptbin==-1) continue; TString mdvname=Form("multiDimVectorPtBin%d",ptbin); AliMultiDimVector* muvec=(AliMultiDimVector*)fCutList->FindObject(mdvname.Data()); + ULong64_t *addresses = muvec->GetGlobalAddressesAboveCuts(fVars,(Float_t)d->Pt(),nVals); if(fDebug>1)printf("nvals = %d\n",nVals); for(Int_t ivals=0;ivalsFill(3); - + //fill the histograms with the appropriate method switch (fDecChannel){ case 0: @@ -561,7 +567,9 @@ void AliAnalysisTaskSESignificance::UserExec(Option_t */*option*/) FillDstar(d,arrayMC,(Int_t)(ptbin*nHistpermv+addresses[ivals]),isSelected); break; case 3: - FillDs(d,arrayMC,(Int_t)(ptbin*nHistpermv+addresses[ivals]),isSelected); + if(isSelected&1){ + FillDs(d,arrayMC,(Int_t)(ptbin*nHistpermv+addresses[ivals]),isSelected,1); + } break; case 4: FillD04p(d,arrayMC,(Int_t)(ptbin*nHistpermv+addresses[ivals]),isSelected); @@ -574,6 +582,25 @@ void AliAnalysisTaskSESignificance::UserExec(Option_t */*option*/) } } + + if (fDecChannel==3 && isSelected&2){ + SetPDGdaughterDstopiKK(); + nVals=0; + fRDCuts->GetCutVarsForOpt(d,fVars,fNVars,fPDGdaughters); + addresses = muvec->GetGlobalAddressesAboveCuts(fVars,(Float_t)d->Pt(),nVals); + if(fDebug>1)printf("nvals = %d\n",nVals); + for(Int_t ivals=0;ivals=muvec->GetNTotCells()){ + if (fDebug>1) printf("Overflow!!\n"); + delete [] addresses; + return; + } + FillDs(d,arrayMC,(Int_t)(ptbin*nHistpermv+addresses[ivals]),isSelected,0); + + } + + } + delete [] addresses; }// end if selected @@ -680,9 +707,9 @@ void AliAnalysisTaskSESignificance::FillDstar(AliAODRecoDecayHF* /*d*/,TClonesAr } -void AliAnalysisTaskSESignificance::FillDs(AliAODRecoDecayHF* d,TClonesArray *arrayMC,Int_t index,Int_t isSel){ +void AliAnalysisTaskSESignificance::FillDs(AliAODRecoDecayHF* d,TClonesArray *arrayMC,Int_t index,Int_t isSel,Int_t optDecay){ - //AliInfo("Ds channel not implemented\n"); + // Fill Ds histos Int_t pdgDsKKpi[3]={321,321,211};//K,K,pi @@ -695,53 +722,65 @@ void AliAnalysisTaskSESignificance::FillDs(AliAODRecoDecayHF* d,TClonesArray *ar if(fReadMC){ labDs = d->MatchToMC(431,arrayMC,3,pdgDsKKpi); } - - - if(isSel&1 && fPartOrAndAntiPart*d->GetCharge()>=0) { - - fMassHist[index]->Fill(masses[0]); - - if(fReadMC){ - if(labDs>=0){ - Int_t labDau0=((AliAODTrack*)d->GetDaughter(0))->GetLabel(); - AliAODMCParticle* p=(AliAODMCParticle*)arrayMC->UncheckedAt(labDau0); - Int_t pdgCode0=TMath::Abs(p->GetPdgCode()); - - if(pdgCode0==321) { - - fSigHist[index]->Fill(masses[0]); //signal + Int_t isKKpi=isSel&1; + Int_t ispiKK=isSel&2; + Int_t isPhiKKpi=isSel&4; + Int_t isPhipiKK=isSel&8; + Int_t isK0starKKpi=isSel&16; + Int_t isK0starpiKK=isSel&32; + + + if(fDsChannel==kPhi && (isPhiKKpi==0 && isPhipiKK==0)) return; + if(fDsChannel==kK0star && (isK0starKKpi==0 && isK0starpiKK==0)) return; + + if (optDecay==1){ + if(isKKpi && fPartOrAndAntiPart*d->GetCharge()>=0) { + if(fDsChannel==kPhi && isPhiKKpi==0) return; + if(fDsChannel==kK0star && isK0starKKpi==0) return; + + fMassHist[index]->Fill(masses[0]); + + if(fReadMC){ + if(labDs>=0){ + Int_t labDau0=((AliAODTrack*)d->GetDaughter(0))->GetLabel(); + AliAODMCParticle* p=(AliAODMCParticle*)arrayMC->UncheckedAt(labDau0); + Int_t pdgCode0=TMath::Abs(p->GetPdgCode()); + if(pdgCode0==321) { + fSigHist[index]->Fill(masses[0]); //signal + }else{ + fRflHist[index]->Fill(masses[0]); //Reflected signal + } }else{ - fRflHist[index]->Fill(masses[0]); //Reflected signal + fBkgHist[index]->Fill(masses[0]); // Background } - }else{ - fBkgHist[index]->Fill(masses[0]); // Background } } } - if(isSel&2 && fPartOrAndAntiPart*d->GetCharge()>=0){ - fMassHist[index]->Fill(masses[1]); - if(fReadMC){ - if(labDs>=0){ - Int_t labDau0=((AliAODTrack*)d->GetDaughter(0))->GetLabel(); - AliAODMCParticle* p=(AliAODMCParticle*)arrayMC->UncheckedAt(labDau0); - Int_t pdgCode0=TMath::Abs(p->GetPdgCode()); - - if(pdgCode0==211) { - - fSigHist[index]->Fill(masses[1]); + if (optDecay==0){ + if(ispiKK && fPartOrAndAntiPart*d->GetCharge()>=0){ + if(fDsChannel==kPhi && isPhipiKK==0) return; + if(fDsChannel==kK0star && isK0starpiKK==0) return; + + fMassHist[index]->Fill(masses[1]); + + if(fReadMC){ + if(labDs>=0){ + Int_t labDau0=((AliAODTrack*)d->GetDaughter(0))->GetLabel(); + AliAODMCParticle* p=(AliAODMCParticle*)arrayMC->UncheckedAt(labDau0); + Int_t pdgCode0=TMath::Abs(p->GetPdgCode()); + if(pdgCode0==211) { + fSigHist[index]->Fill(masses[1]); + }else{ + fRflHist[index]->Fill(masses[1]); + } }else{ - fRflHist[index]->Fill(masses[1]); + fBkgHist[index]->Fill(masses[1]); } - }else{ - fBkgHist[index]->Fill(masses[1]); } } } - - - } void AliAnalysisTaskSESignificance::FillD04p(AliAODRecoDecayHF* /*d*/,TClonesArray */*arrayMC*/,Int_t /*index*/,Int_t /*matchtoMC*/){ diff --git a/PWG3/vertexingHF/AliAnalysisTaskSESignificance.h b/PWG3/vertexingHF/AliAnalysisTaskSESignificance.h index 3c4d186444e..2a94b713d26 100644 --- a/PWG3/vertexingHF/AliAnalysisTaskSESignificance.h +++ b/PWG3/vertexingHF/AliAnalysisTaskSESignificance.h @@ -27,6 +27,7 @@ class AliAnalysisTaskSESignificance : public AliAnalysisTaskSE public: enum FeedDownEnum {kBoth,kCharmOnly,kBeautyOnly}; + enum ChanDs {kAllReson,kPhi,kK0star}; AliAnalysisTaskSESignificance(); AliAnalysisTaskSESignificance(const char *name, TList *listMDV,AliRDHFCuts *RDCuts, Int_t decaychannel,Int_t selectionlevel=AliRDHFCuts::kAll); @@ -42,12 +43,15 @@ class AliAnalysisTaskSESignificance : public AliAnalysisTaskSE void SetMassLimits(Float_t lowlimit, Float_t uplimit); void SetNBins(Int_t nbins){fNBins=nbins;} void SetFillWithPartAntiPartBoth(Int_t value){fPartOrAndAntiPart=value;} + void SetDsChannel(Int_t chan){fDsChannel=chan;} + //void SetMultiVector(const AliMultiDimVector *MultiDimVec){fMultiDimVec->CopyStructure(MultiDimVec);} Float_t GetUpperMassLimit()const {return fUpmasslimit;} Float_t GetLowerMassLimit()const {return fLowmasslimit;} Int_t GetNBins()const {return fNBins;} Int_t GetFillWithPartAntiPartBoth()const {return fPartOrAndAntiPart;} Int_t GetBFeedDown()const {return fBFeedDown;} + Int_t GetDsChannel()const {return fDsChannel;} // Implementation of interface methods virtual void UserCreateOutputObjects(); @@ -57,6 +61,19 @@ class AliAnalysisTaskSESignificance : public AliAnalysisTaskSE private: + void SetPDGdaughterDstoKKpi(){ + fPDGdaughters[0]=321;//K + fPDGdaughters[1]=321;//K + fPDGdaughters[2]=211;//pi + fPDGdaughters[3]=0; //empty + } + void SetPDGdaughterDstopiKK(){ + fPDGdaughters[0]=211;//pi + fPDGdaughters[1]=321;//K + fPDGdaughters[2]=321;//K + fPDGdaughters[3]=0; //empty + } + AliAnalysisTaskSESignificance(const AliAnalysisTaskSESignificance &source); AliAnalysisTaskSESignificance& operator=(const AliAnalysisTaskSESignificance& source); void SetPDGCodes(); @@ -68,7 +85,7 @@ class AliAnalysisTaskSESignificance : public AliAnalysisTaskSE void FillDplus(AliAODRecoDecayHF* d,TClonesArray *arrayMC,Int_t index,Int_t isSel); void FillD02p(AliAODRecoDecayHF* d,TClonesArray *arrayMC,Int_t index, Int_t isSel); - void FillDs(AliAODRecoDecayHF* d,TClonesArray *arrayMC,Int_t index,Int_t isSel); + void FillDs(AliAODRecoDecayHF* d,TClonesArray *arrayMC,Int_t index,Int_t isSel,Int_t optDecay); void FillDstar(AliAODRecoDecayHF* d,TClonesArray *arrayMC,Int_t index,Int_t isSel); void FillD04p(AliAODRecoDecayHF* d,TClonesArray *arrayMC,Int_t index,Int_t isSel); void FillLambdac(AliAODRecoDecayHF* d,TClonesArray *arrayMC,Int_t index, Int_t isSel); @@ -103,10 +120,10 @@ class AliAnalysisTaskSESignificance : public AliAnalysisTaskSE Float_t fVars[kMaxCutVar]; // array with values of cut variables Int_t fNBins; //number of bins in the mass histograms Int_t fPartOrAndAntiPart; //fill histograms with particle only (+1), antiparticle only (-1), both (0) + Int_t fDsChannel; // Ds resonant channel selected - ClassDef(AliAnalysisTaskSESignificance,3); // AliAnalysisTaskSE for the MC association of heavy-flavour decay candidates + ClassDef(AliAnalysisTaskSESignificance,4); // AliAnalysisTaskSE for the MC association of heavy-flavour decay candidates }; #endif - -- 2.43.0