]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWGDQ/dielectron/AliDielectronTrackCuts.cxx
Merge branch 'master' of https://git.cern.ch/reps/AliRoot
[u/mrichter/AliRoot.git] / PWGDQ / dielectron / AliDielectronTrackCuts.cxx
index b476b3a7fe8af6e89160d2bb15fc7162380cccf7..64d61e7e2ec215b82bca81d2a1ba16a83aebbb37 100644 (file)
@@ -30,6 +30,7 @@ Detailed description
 
 #include "AliDielectronTrackCuts.h"
 #include "AliVTrack.h"
+#include "AliAODTrack.h"
 
 ClassImp(AliDielectronTrackCuts)
 
@@ -41,7 +42,10 @@ AliDielectronTrackCuts::AliDielectronTrackCuts() :
   fITSclusterCutType(kOneOf),
   fRequireITSRefit(kFALSE),
   fRequireTPCRefit(kFALSE),
-  fTPCNclRobustCut(-1)
+  fTPCNclRobustCut(-1),
+  fTPCcrossedOverFindable(-1.),
+  fAODFilterBit(kSwitchOff),
+  fWaiveITSNcls(-1)
 {
   //
   // Default Constructor
@@ -61,7 +65,10 @@ AliDielectronTrackCuts::AliDielectronTrackCuts(const char* name, const char* tit
   fITSclusterCutType(kOneOf),
   fRequireITSRefit(kFALSE),
   fRequireTPCRefit(kFALSE),
-  fTPCNclRobustCut(-1)
+  fTPCNclRobustCut(-1),
+  fTPCcrossedOverFindable(-1.),
+  fAODFilterBit(kSwitchOff),
+  fWaiveITSNcls(-1)
 {
   //
   // Named Constructor
@@ -108,14 +115,45 @@ Bool_t AliDielectronTrackCuts::IsSelected(TObject* track)
   //more flexible ITS cluster cut
   if (fITSclusterBitMap) accept*=CheckITSClusterCut(vtrack->GetITSClusterMap());
 
+  //different its cluster cut
+  if (fWaiveITSNcls > -1) {
+    Int_t nITScls      = 0;
+    Int_t requiredNcls = 7;
+    for(Int_t i=5; i>=0; i--) {
+      if(TESTBIT(vtrack->GetITSClusterMap(),i)) {
+       nITScls++;
+       requiredNcls=6-fWaiveITSNcls-i; 
+      }
+    }
+    accept*=(requiredNcls<=nITScls);
+  }
+
   //its and tpc refit
   if (fRequireITSRefit) accept*=(vtrack->GetStatus()&AliVTrack::kITSrefit)>0;
   if (fRequireTPCRefit) accept*=(vtrack->GetStatus()&AliVTrack::kTPCrefit)>0;
 
+  Int_t nclr=TMath::Nint(vtrack->GetTPCClusterInfo(2,1));
   if (fTPCNclRobustCut>0){
-    Int_t nclr=TMath::Nint(vtrack->GetTPCClusterInfo(2,1));
-    accept*=(nclr>fTPCNclRobustCut);
+       accept*=(nclr>fTPCNclRobustCut);
   }
+  if (fTPCcrossedOverFindable > 0.) {
+       Int_t tpcNclsF = vtrack->GetTPCNclsF();
+       accept*=(tpcNclsF); //ESDtrackCut would return here true
+       if (tpcNclsF != 0) {//'accept' already negated above in this case above
+         accept*=(((Double_t)nclr/(Double_t)vtrack->GetTPCNclsF()) >= fTPCcrossedOverFindable);
+       }
+  }
+
+
+  // use filter bit to speed up the AOD analysis (track pre-filter)
+  // relevant filter bits are:
+  // kTPCqual==1             -> TPC quality cuts
+  // kTPCqualSPDany==4       -> + SPD any
+  // kTPCqualSPDanyPIDele==8 -> + nSigmaTPCele +-3 (inclusion) 
+  if (track->IsA()==AliAODTrack::Class() && fAODFilterBit!=kSwitchOff) {
+    accept*=((AliAODTrack*)track)->TestFilterBit(fAODFilterBit);
+  }
+
   return accept;
 }