]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWG3/vertexingHF/AliRDHFCuts.cxx
Skip tracks without ITS
[u/mrichter/AliRoot.git] / PWG3 / vertexingHF / AliRDHFCuts.cxx
index 926b88cdcc04fa549f3d2b776f26ce746e3747f2..e11577d52b36ce4fe3e87c1cc425545dd5d20d7c 100644 (file)
 #include "AliAODEvent.h"
 #include "AliVVertex.h"
 #include "AliESDVertex.h"
+#include "AliLog.h"
 #include "AliAODVertex.h"
 #include "AliESDtrack.h"
 #include "AliAODTrack.h"
 #include "AliESDtrackCuts.h"
+#include "AliCentrality.h"
 #include "AliAODRecoDecayHF.h"
 #include "AliRDHFCuts.h"
 
@@ -41,6 +43,7 @@ AliAnalysisCuts(name,title),
 fMinVtxType(3),
 fMinVtxContr(1),
 fMaxVtxRedChi2(1e6),
+fMaxVtxZ(1e6),
 fMinSPDMultiplicity(0),
 fTriggerMask(0),
 fTrackCuts(0),
@@ -60,7 +63,11 @@ fWhyRejection(0),
 fRemoveDaughtersFromPrimary(kFALSE),
 fOptPileup(0),
 fMinContrPileup(3),
-fMinDzPileup(0.6)
+fMinDzPileup(0.6),
+fUseCentrality(0),
+fMinCentrality(0.),
+fMaxCentrality(100.)
+
 {
   //
   // Default Constructor
@@ -72,6 +79,7 @@ AliRDHFCuts::AliRDHFCuts(const AliRDHFCuts &source) :
   fMinVtxType(source.fMinVtxType),
   fMinVtxContr(source.fMinVtxContr),
   fMaxVtxRedChi2(source.fMaxVtxRedChi2),
+  fMaxVtxZ(source.fMaxVtxZ),
   fMinSPDMultiplicity(source.fMinSPDMultiplicity),
   fTriggerMask(source.fTriggerMask),
   fTrackCuts(0),
@@ -91,7 +99,12 @@ AliRDHFCuts::AliRDHFCuts(const AliRDHFCuts &source) :
   fRemoveDaughtersFromPrimary(source.fRemoveDaughtersFromPrimary),
   fOptPileup(source.fOptPileup),
   fMinContrPileup(source.fMinContrPileup),
-  fMinDzPileup(source.fMinDzPileup)  
+  fMinDzPileup(source.fMinDzPileup),
+  fUseCentrality(source.fUseCentrality),
+  fMinCentrality(source.fMinCentrality),
+  fMaxCentrality(source.fMaxCentrality)
+
+
 {
   //
   // Copy constructor
@@ -119,6 +132,7 @@ AliRDHFCuts &AliRDHFCuts::operator=(const AliRDHFCuts &source)
   fMinVtxType=source.fMinVtxType;
   fMinVtxContr=source.fMinVtxContr;
   fMaxVtxRedChi2=source.fMaxVtxRedChi2;
+  fMaxVtxZ=source.fMaxVtxZ;
   fMinSPDMultiplicity=source.fMinSPDMultiplicity;
   fTriggerMask=source.fTriggerMask;
   fnPtBins=source.fnPtBins;
@@ -132,6 +146,9 @@ AliRDHFCuts &AliRDHFCuts::operator=(const AliRDHFCuts &source)
   fOptPileup=source.fOptPileup;
   fMinContrPileup=source.fMinContrPileup;
   fMinDzPileup=source.fMinDzPileup;
+  fUseCentrality=source.fUseCentrality;
+  fMinCentrality=source.fMinCentrality;
+  fMaxCentrality=source.fMaxCentrality;
 
   if(source.GetTrackCuts()) AddTrackCuts(source.GetTrackCuts());
   if(source.fPtBinLimits) SetPtBins(source.fnPtBinLimits,source.fPtBinLimits);
@@ -170,9 +187,7 @@ Bool_t AliRDHFCuts::IsEventSelected(AliVEvent *event) {
   fWhyRejection=0;
 
   // multiplicity cuts no implemented yet
-
-
-
+   
   const AliVVertex *vertex = event->GetPrimaryVertex();
 
   if(!vertex) return kFALSE;
@@ -183,6 +198,8 @@ Bool_t AliRDHFCuts::IsEventSelected(AliVEvent *event) {
 
   if(vertex->GetNContributors()<fMinVtxContr) return kFALSE; 
 
+  if(TMath::Abs(vertex->GetZ())>fMaxVtxZ) return kFALSE;
+
   // switch to settings for 1-pad cls in TPC
   if(fPidHF) {
     if(event->GetRunNumber()>121693 && event->GetRunNumber()<136851) 
@@ -200,6 +217,29 @@ Bool_t AliRDHFCuts::IsEventSelected(AliVEvent *event) {
     }
   }
 
+  //centrality selection
+  if (!(fUseCentrality==kCentOff)){  
+    if(fUseCentrality<kCentOff||fUseCentrality>=kCentInvalid){
+      AliWarning("Centrality estimator not valid");
+      fWhyRejection=3;
+      return kFALSE;
+    }else{
+      Float_t centvalue=GetCentrality((AliAODEvent*)event);
+      if (centvalue<0.){
+       if (fWhyRejection==3) return kFALSE;
+       else return kTRUE;
+      }
+      else{
+       
+       if (centvalue<fMinCentrality || centvalue>fMaxCentrality){
+         fWhyRejection=2; 
+         return kFALSE; 
+       }
+      }
+    }
+  }
+
+
   return kTRUE;
 }
 //---------------------------------------------------------------------------
@@ -321,6 +361,19 @@ void AliRDHFCuts::SetVarsForOpt(Int_t nVars,Bool_t *forOpt) {
 
   return;
 }
+
+//---------------------------------------------------------------------------
+void AliRDHFCuts::SetUseCentrality(Int_t flag) {
+  //
+  // set centrality estimator  
+  //
+  fUseCentrality=flag;
+  if(fUseCentrality<kCentOff||fUseCentrality>=kCentInvalid) AliWarning("Centrality estimator not valid");
+  return;
+}
+
+
 //---------------------------------------------------------------------------
 void AliRDHFCuts::SetCuts(Int_t nVars,Int_t nPtBins,Float_t **cutsRD) {
   //
@@ -382,6 +435,17 @@ void AliRDHFCuts::PrintAll() const {
   printf("Min SPD mult %d\n",fMinSPDMultiplicity);
   printf("Use PID %d\n",(Int_t)fUsePID);
   printf("Remove daughters from vtx %d\n",(Int_t)fRemoveDaughtersFromPrimary);
+  printf("Pileup rejection: %s\n",(fOptPileup > 0) ? "Yes" : "No");
+  if(fOptPileup==1) printf(" -- Reject pileup event");
+  if(fOptPileup==2) printf(" -- Reject tracks from pileup vtx");
+  if(fUseCentrality>0) {
+    TString estimator="";
+    if(fUseCentrality==1) estimator = "V0";
+    if(fUseCentrality==2) estimator = "Tracks";
+    if(fUseCentrality==3) estimator = "Tracklets";
+    if(fUseCentrality==4) estimator = "SPD clusters outer"; 
+    printf("Centrality class considered: %.1f-%.1f, estimated with %s",fMinCentrality,fMaxCentrality,estimator.Data());
+  }
 
   if(fVarNames){
     cout<<"Array of variables"<<endl;
@@ -494,6 +558,33 @@ Float_t AliRDHFCuts::GetCutValue(Int_t iVar,Int_t iPtBin) const {
   return fCutsRD[GetGlobalIndex(iVar,iPtBin)];
 }
 //-------------------------------------------------------------------
+Float_t AliRDHFCuts::GetCentrality(AliAODEvent* aodEvent,AliRDHFCuts::ECentrality estimator) const {
+  //
+  // Get centrality percentile
+  //
+  AliAODHeader *header=aodEvent->GetHeader();
+  AliCentrality *centrality=header->GetCentralityP();
+  Float_t cent=-999.;
+  if(!centrality) return cent;
+  else{
+    if (estimator==kCentV0M) cent=(Float_t)(centrality->GetCentralityPercentile("V0M"));
+    else {
+      if (estimator==kCentTRK) cent=(Float_t)(centrality->GetCentralityPercentile("TRK"));
+      else{
+       if (estimator==kCentTKL) cent=(Float_t)(centrality->GetCentralityPercentile("TKL"));
+       else{
+         if (estimator==kCentCL1) cent=(Float_t)(centrality->GetCentralityPercentile("CL1"));
+         else {
+           AliWarning("Centrality estimator not valid");
+
+         }
+       }
+      }
+    } 
+  }
+  return cent;
+}
+//-------------------------------------------------------------------
 Bool_t AliRDHFCuts::CompareCuts(const AliRDHFCuts *obj) const {
   //
   // Compare two cuts objects