Added PID selection level
authordainese <dainese@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 26 May 2010 10:50:16 +0000 (10:50 +0000)
committerdainese <dainese@f7af4fe6-9843-0410-8265-dc069ae4e863>
Wed, 26 May 2010 10:50:16 +0000 (10:50 +0000)
PWG3/vertexingHF/AliRDHFCuts.cxx
PWG3/vertexingHF/AliRDHFCuts.h
PWG3/vertexingHF/AliRDHFCutsD0toKpi.cxx
PWG3/vertexingHF/AliRDHFCutsD0toKpi.h

index 785b1a4..e83d335 100644 (file)
@@ -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);
index 4c77842..1e01632 100644 (file)
@@ -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
 };
 
index ce36968..88ff181 100644 (file)
@@ -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;
+}
index dc249a4..a48bd44 100644 (file)
@@ -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: