From c96634a269febf53bb70cd7b73e62e50e44bc1c9 Mon Sep 17 00:00:00 2001 From: dainese Date: Wed, 26 May 2010 10:50:16 +0000 Subject: [PATCH] Added PID selection level --- PWG3/vertexingHF/AliRDHFCuts.cxx | 7 ++- PWG3/vertexingHF/AliRDHFCuts.h | 9 +++- PWG3/vertexingHF/AliRDHFCutsD0toKpi.cxx | 58 ++++++++++++++++++++++--- PWG3/vertexingHF/AliRDHFCutsD0toKpi.h | 5 ++- 4 files changed, 68 insertions(+), 11 deletions(-) diff --git a/PWG3/vertexingHF/AliRDHFCuts.cxx b/PWG3/vertexingHF/AliRDHFCuts.cxx index 785b1a4bce5..e83d335695f 100644 --- a/PWG3/vertexingHF/AliRDHFCuts.cxx +++ b/PWG3/vertexingHF/AliRDHFCuts.cxx @@ -53,7 +53,8 @@ fnVarsForOpt(0), fVarsForOpt(0), fGlobalIndex(1), fCutsRD(0), -fIsUpperCut(0) +fIsUpperCut(0), +fUsePID(kFALSE) { // // Default Constructor @@ -77,7 +78,8 @@ AliRDHFCuts::AliRDHFCuts(const AliRDHFCuts &source) : fVarsForOpt(0), fGlobalIndex(source.fGlobalIndex), fCutsRD(0), - fIsUpperCut(0) + fIsUpperCut(0), + fUsePID(source.fUsePID) { // // Copy constructor @@ -110,6 +112,7 @@ AliRDHFCuts &AliRDHFCuts::operator=(const AliRDHFCuts &source) fnVars=source.fnVars; fGlobalIndex=source.fGlobalIndex; fnVarsForOpt=source.fnVarsForOpt; + fUsePID=source.fUsePID; if(source.GetTrackCuts()) AddTrackCuts(source.GetTrackCuts()); if(source.fPtBinLimits) SetPtBins(source.fnPtBinLimits,source.fPtBinLimits); diff --git a/PWG3/vertexingHF/AliRDHFCuts.h b/PWG3/vertexingHF/AliRDHFCuts.h index 4c77842913d..1e01632c509 100644 --- a/PWG3/vertexingHF/AliRDHFCuts.h +++ b/PWG3/vertexingHF/AliRDHFCuts.h @@ -40,6 +40,7 @@ class AliRDHFCuts : public AliAnalysisCuts void SetCuts(Int_t glIndex, Float_t* cutsRDGlob); void AddTrackCuts(const AliESDtrackCuts *cuts) {fTrackCuts=new AliESDtrackCuts(*cuts); return;} + void SetUsePID(Bool_t flag=kTRUE) {fUsePID=flag; return;} Float_t *GetPtBinLimits() const {return fPtBinLimits;} Int_t GetNPtBins() const {return fnPtBins;} @@ -60,13 +61,16 @@ class AliRDHFCuts : public AliAnalysisCuts Bool_t IsSelected(TList *list) {if(!list) return kTRUE; return kFALSE;} Bool_t IsEventSelected(AliVEvent *event) const; Bool_t AreDaughtersSelected(AliAODRecoDecayHF *rd) const; + virtual Int_t IsSelectedPID(AliAODRecoDecayHF * /*rd*/) const {return 1;} virtual Int_t IsSelected(TObject* obj,Int_t selectionLevel) = 0; Int_t PtBin(Double_t pt) const; void PrintAll()const; - enum{kAll,kTracks,kCandidate}; + virtual Bool_t IsInFiducialAcceptance(Double_t /*pt*/,Double_t /*y*/) const {return kTRUE;} + + enum{kAll,kTracks,kPID,kCandidate}; protected: @@ -92,8 +96,9 @@ class AliRDHFCuts : public AliAnalysisCuts Int_t fGlobalIndex; // fnVars*fnPtBins Float_t *fCutsRD; //[fGlobalIndex] the cuts values Bool_t *fIsUpperCut; //[fnVars] use > or < to select + Bool_t fUsePID; // enable PID usage (off by default) - ClassDef(AliRDHFCuts,1); // base class for cuts on AOD reconstructed + ClassDef(AliRDHFCuts,2); // base class for cuts on AOD reconstructed // heavy-flavour decays }; diff --git a/PWG3/vertexingHF/AliRDHFCutsD0toKpi.cxx b/PWG3/vertexingHF/AliRDHFCutsD0toKpi.cxx index ce36968bc72..88ff1817df8 100644 --- a/PWG3/vertexingHF/AliRDHFCutsD0toKpi.cxx +++ b/PWG3/vertexingHF/AliRDHFCutsD0toKpi.cxx @@ -201,7 +201,18 @@ Int_t AliRDHFCutsD0toKpi::IsSelected(TObject* obj,Int_t selectionLevel) { } - Int_t returnvalue=1; + // returnvalue: 0 not sel, 1 only D0, 2 only D0bar, 3 both + Int_t returnvaluePID=3; + Int_t returnvalueCuts=3; + Int_t returnvalue=3; + + // selection on PID + if(selectionLevel==AliRDHFCuts::kAll || + selectionLevel==AliRDHFCuts::kPID) { + returnvaluePID = IsSelectedPID(d); + } + + // selection on candidate if(selectionLevel==AliRDHFCuts::kAll || @@ -245,9 +256,29 @@ Int_t AliRDHFCutsD0toKpi::IsSelected(TObject* obj,Int_t selectionLevel) { if(d->CosPointingAngle() < fCutsRD[GetGlobalIndex(8,ptbin)]) return 0; - if (okD0) returnvalue=1; //cuts passed as D0 - if (okD0bar) returnvalue=2; //cuts passed as D0bar - if (okD0 && okD0bar) returnvalue=3; //cuts passed as D0 and D0bar + if (okD0) returnvalueCuts=1; //cuts passed as D0 + if (okD0bar) returnvalueCuts=2; //cuts passed as D0bar + if (okD0 && okD0bar) returnvalueCuts=3; //cuts passed as D0 and D0bar + } + + + // combine PID and Cuts results + switch(returnvaluePID) { + case 0: + returnvalue=0; + break; + case 1: + returnvalue=((returnvalueCuts==1 || returnvalueCuts==3) ? 1 : 0); + break; + case 2: + returnvalue=((returnvalueCuts==2 || returnvalueCuts==3) ? 2 : 0); + break; + case 3: + returnvalue=returnvalueCuts; + break; + default: + returnvalue=0; + break; } return returnvalue; @@ -259,7 +290,7 @@ Bool_t AliRDHFCutsD0toKpi::IsInFiducialAcceptance(Double_t pt, Double_t y) const // Checking if D0 is in fiducial acceptance region // - if(pt > 5){ + if(pt > 5.) { // applying cut for pt > 5 GeV AliInfo(Form("pt of D0 = %f (> 5), cutting at |y| < 0.8\n",pt)); if (TMath::Abs(y) > 0.8){ @@ -274,7 +305,22 @@ Bool_t AliRDHFCutsD0toKpi::IsInFiducialAcceptance(Double_t pt, Double_t y) const return kFALSE; } } + return kTRUE; - } +//--------------------------------------------------------------------------- +Int_t AliRDHFCutsD0toKpi::IsSelectedPID(AliAODRecoDecayHF* rd) const { + // + // Apply PID selection + // (return: 0 not sel, 1 only D0, 2 only D0bar, 3 both) + // + + if(!fUsePID) return 3; + + Int_t returnvalue=0; + // HERE LOOP ON DAUGHTERS, USE AliAODpidHF CLASS, ETC... + + + return returnvalue; +} diff --git a/PWG3/vertexingHF/AliRDHFCutsD0toKpi.h b/PWG3/vertexingHF/AliRDHFCutsD0toKpi.h index dc249a42b99..a48bd44272f 100644 --- a/PWG3/vertexingHF/AliRDHFCutsD0toKpi.h +++ b/PWG3/vertexingHF/AliRDHFCutsD0toKpi.h @@ -30,7 +30,10 @@ class AliRDHFCutsD0toKpi : public AliRDHFCuts Float_t GetMassCut(Int_t iPtBin=0) const { return (GetCuts() ? fCutsRD[GetGlobalIndex(0,iPtBin)] : 1.e6);} Float_t GetDCACut(Int_t iPtBin=0) const { return (GetCuts() ? fCutsRD[GetGlobalIndex(1,iPtBin)] : 1.e6);} - Bool_t IsInFiducialAcceptance(Double_t pt,Double_t y) const; + virtual Bool_t IsInFiducialAcceptance(Double_t pt,Double_t y) const; + + virtual Int_t IsSelectedPID(AliAODRecoDecayHF *rd) const; + protected: -- 2.43.0