-add new PID execution ranges by adding a varcut object (needed for best TRD pid)
authorjbook <jbook@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 25 Mar 2013 09:01:42 +0000 (09:01 +0000)
committerjbook <jbook@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 25 Mar 2013 09:01:42 +0000 (09:01 +0000)
PWGDQ/dielectron/AliDielectronPID.cxx
PWGDQ/dielectron/AliDielectronPID.h

index 1deca30..4732c9b 100644 (file)
@@ -40,6 +40,7 @@ Detailed description
 #include <AliAODPid.h>
 
 #include "AliDielectronVarManager.h"
+#include "AliDielectronVarCuts.h"
 
 #include "AliDielectronPID.h"
 
@@ -74,6 +75,7 @@ AliDielectronPID::AliDielectronPID() :
     fSigmaFunLow[icut]=0;
     fSigmaFunUp[icut]=0;
     fFunSigma[icut]=0x0;
+    fVarCuts[icut]=0x0;
   }
 }
 
@@ -101,6 +103,7 @@ AliDielectronPID::AliDielectronPID(const char* name, const char* title) :
     fSigmaFunLow[icut]=0;
     fSigmaFunUp[icut]=0;
     fFunSigma[icut]=0x0;
+    fVarCuts[icut]=0x0;
   }
 }
 
@@ -219,6 +222,42 @@ void AliDielectronPID::AddCut(DetType det, AliPID::EParticleType type, Double_t
 }
 
 //______________________________________________
+void AliDielectronPID::AddCut(DetType det, AliPID::EParticleType type, Double_t nSigmaLow, Double_t nSigmaUp,
+                              AliDielectronVarCuts *var, Bool_t exclude/*=kFALSE*/,
+                              UInt_t pidBitType/*=AliDielectronPID::kRequire*/)
+{
+  //
+  // Add a pid nsigma cut
+  // use response of detector 'det' in the ranges for variables defined in var
+  // use a sigma band between 'nSigmaLow' and 'nSigmaUp'
+  // if nSigmaUp==-99999. then nSigmaLow will be uesd as a symmetric band +- nSigmaLow
+  // specify whether to 'exclude' the given band
+  //
+  if(!var) return;
+  if (fNcuts>=kNmaxPID){
+    AliError(Form("only %d pid cut ranges allowed",kNmaxPID));
+    return;
+  }
+  if (TMath::Abs(nSigmaUp+99999.)<1e-20){
+    nSigmaUp=TMath::Abs(nSigmaLow);
+    nSigmaLow=-1.*nSigmaUp;
+  }
+  fDetType[fNcuts]=det;
+  fPartType[fNcuts]=type;
+  fNsigmaLow[fNcuts]=nSigmaLow;
+  fNsigmaUp[fNcuts]=nSigmaUp;
+  fExclude[fNcuts]=exclude;
+  fRequirePIDbit[fNcuts]=pidBitType;
+  fVarCuts[fNcuts]=var;
+
+  AliDebug(1,Form("Add PID cut %d: sigma [% .1f,% .1f] \n",
+                 fNcuts,nSigmaLow,nSigmaUp));
+  
+  ++fNcuts;
+
+}
+
+//______________________________________________
 Bool_t AliDielectronPID::IsSelected(TObject* track)
 {
   //
@@ -255,10 +294,14 @@ Bool_t AliDielectronPID::IsSelected(TObject* track)
     Double_t min=fmin[icut];
     Double_t max=fmax[icut];
     Double_t val=values[fActiveCuts[icut]];
-    
-    // test var range. In case min==max do not cut
-    if ( (TMath::Abs(min-max)>1e-20) && (val<min || val>=max) ) continue;
 
+    // test var range. In case min==max do not cut
+    if ( fVarCuts[icut] ) {
+      if ( !fVarCuts[icut]->IsSelected(part) ) continue;
+    }
+    else if ( ( (TMath::Abs(min-max)>1e-20) && (val<min || val>=max) ) ) {
+       continue;
+    }
 
     // check if fFunSigma is set, then check if 'part' is in sigma range of the function
     if(fFunSigma[icut]){
index 4470300..d7312ed 100644 (file)
@@ -29,6 +29,7 @@ class AliVTrack;
 class TGraph;
 class AliPIDResponse;
 class AliDielectronVarManager;
+class AliDielectronVarCuts;
 
 class AliDielectronPID : public AliAnalysisCuts {
 public:
@@ -56,6 +57,8 @@ public:
               Double_t min=0, Double_t max=0, Bool_t exclude=kFALSE, UInt_t pidBitType=AliDielectronPID::kRequire, 
              Int_t var=-1);
   void AddCut(DetType det, AliPID::EParticleType type, Double_t nSigmaLow, Double_t nSigmaUp, Double_t min, Double_t max, Bool_t exclude, UInt_t pidBitType,              TF1 * const funSigma);
+  void AddCut(DetType det, AliPID::EParticleType type, Double_t nSigmaLow, Double_t nSigmaUp,
+             AliDielectronVarCuts *varcuts, Bool_t exclude=kFALSE, UInt_t pidBitType=AliDielectronPID::kRequire );
   
   void SetDefaults(Int_t def);
 
@@ -98,7 +101,7 @@ private:
   Double_t fSigmaFunLow[kNmaxPID]; // lower bound for fFunSigma
   Double_t fSigmaFunUp[kNmaxPID];  // upper bound for fFunSigma
   TF1      *fFunSigma[kNmaxPID];   // use function as cut range
-
+  AliDielectronVarCuts *fVarCuts[kNmaxPID]; // varcuts
 
   AliPIDResponse *fPIDResponse;   //! pid response object
   
@@ -109,6 +112,8 @@ private:
                                   // was called
   static TF1    *fgFunEtaCorr;    //function for eta correction of electron sigma
   static TGraph *fgdEdxRunCorr;   //run by run correction for dEdx
+
+
   
   Bool_t IsSelectedITS(AliVTrack * const part, Int_t icut);
   Bool_t IsSelectedTPC(AliVTrack * const part, Int_t icut);