]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
Added centrality selection (Gian Michele)
authordainese <dainese@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 24 Jan 2011 23:08:31 +0000 (23:08 +0000)
committerdainese <dainese@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 24 Jan 2011 23:08:31 +0000 (23:08 +0000)
PWG3/vertexingHF/AliRDHFCuts.cxx
PWG3/vertexingHF/AliRDHFCuts.h

index 3485e353c45bb9b731ae75c24922a3bb30870659..80bc67b7f9e28e51fb6b8149b90f3f71f33c3db9 100644 (file)
@@ -26,6 +26,7 @@
 #include "AliAODEvent.h"
 #include "AliVVertex.h"
 #include "AliESDVertex.h"
+#include "AliLog.h"
 #include "AliAODVertex.h"
 #include "AliESDtrack.h"
 #include "AliAODTrack.h"
@@ -61,7 +62,11 @@ fWhyRejection(0),
 fRemoveDaughtersFromPrimary(kFALSE),
 fOptPileup(0),
 fMinContrPileup(3),
-fMinDzPileup(0.6)
+fMinDzPileup(0.6),
+fUseCentrality(0),
+fMinCentrality(0.),
+fMaxCentrality(100.)
+
 {
   //
   // Default Constructor
@@ -93,7 +98,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
@@ -135,6 +145,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);
@@ -173,9 +186,7 @@ Bool_t AliRDHFCuts::IsEventSelected(AliVEvent *event) {
   fWhyRejection=0;
 
   // multiplicity cuts no implemented yet
-
-
-
+   
   const AliVVertex *vertex = event->GetPrimaryVertex();
 
   if(!vertex) return kFALSE;
@@ -205,6 +216,37 @@ Bool_t AliRDHFCuts::IsEventSelected(AliVEvent *event) {
     }
   }
 
+  //centrality selection
+  if (!(fUseCentrality==kCentOff)){  
+
+    AliAODHeader *header=((AliAODEvent*)event)->GetHeader();
+    AliCentrality *centrality=header->GetCentralityP();
+    if(centrality){
+      Float_t cent=-999.;
+      if (fUseCentrality==kCentV0M) cent=(Float_t)(centrality->GetCentralityPercentile("V0M"));
+      else {
+        if (fUseCentrality==kCentTRK) cent=(Float_t)(centrality->GetCentralityPercentile("TRK"));
+        else{
+         if (fUseCentrality==kCentTKL) cent=(Float_t)(centrality->GetCentralityPercentile("TKL"));
+          else{
+           if (fUseCentrality==kCentCL1) cent=(Float_t)(centrality->GetCentralityPercentile("CL1"));
+            else {
+             fWhyRejection=3;
+             return kFALSE;
+           }
+         }
+        }
+      }
+           
+           
+      if (cent<fMinCentrality || cent>fMaxCentrality){
+       fWhyRejection=2; 
+       return kFALSE; 
+      }
+    }
+  }
+
+
   return kTRUE;
 }
 //---------------------------------------------------------------------------
@@ -326,6 +368,20 @@ void AliRDHFCuts::SetVarsForOpt(Int_t nVars,Bool_t *forOpt) {
 
   return;
 }
+
+//---------------------------------------------------------------------------
+
+void AliRDHFCuts::SetUseCentrality(Int_t flag) {
+  //
+  // enable centrality selection  
+  //
+  fUseCentrality=flag;
+  if(fUseCentrality>=kCentInvalid) AliWarning("Centrality estimator not valid");
+  return;
+}
+
+
 //---------------------------------------------------------------------------
 void AliRDHFCuts::SetCuts(Int_t nVars,Int_t nPtBins,Float_t **cutsRD) {
   //
@@ -499,6 +555,32 @@ Float_t AliRDHFCuts::GetCutValue(Int_t iVar,Int_t iPtBin) const {
   return fCutsRD[GetGlobalIndex(iVar,iPtBin)];
 }
 //-------------------------------------------------------------------
+Float_t AliRDHFCuts::GetCentrality(AliAODEvent* aodEvent) {
+  //
+  // centrality percentile
+  //
+  AliAODHeader *header=aodEvent->GetHeader();
+  AliCentrality *centrality=header->GetCentralityP();
+  Float_t cent=-999.;
+  if(centrality){ 
+     if (fUseCentrality==kCentV0M) cent=(Float_t)(centrality->GetCentralityPercentile("V0M"));
+     else {
+       if (fUseCentrality==kCentTRK) cent=(Float_t)(centrality->GetCentralityPercentile("TRK"));
+       else{
+        if (fUseCentrality==kCentTKL) cent=(Float_t)(centrality->GetCentralityPercentile("TKL"));
+         else{
+          if (fUseCentrality==kCentCL1) cent=(Float_t)(centrality->GetCentralityPercentile("CL1"));
+           else {
+            AliWarning("Centrality estimator not valid");
+            return kFALSE;
+          }
+        }
+       }
+     } 
+   }
+  return cent;
+}
+//-------------------------------------------------------------------
 Bool_t AliRDHFCuts::CompareCuts(const AliRDHFCuts *obj) const {
   //
   // Compare two cuts objects
index 582b7cbf33654548a9bef10b96b82a5b7082b40d..8e791f97375abf685f294691cb944dde0f48f3da 100644 (file)
@@ -33,6 +33,9 @@ class AliRDHFCuts : public AliAnalysisCuts
   virtual void SetStandardCutsPP2010() {return;}  
   virtual void SetStandardCutsPbPb2010() {return;}  
 
+
+  void SetMinCentrality(Float_t minCentrality=0.) {fMinCentrality=minCentrality;} 
+  void SetMaxCentrality(Float_t maxCentrality=100.) {fMinCentrality=maxCentrality;} 
   void SetMinVtxType(Int_t type=3) {fMinVtxType=type;}  
   void SetMinVtxContr(Int_t contr=1) {fMinVtxContr=contr;}  
   void SetMaxVtxRdChi2(Float_t chi2=1e6) {fMaxVtxRedChi2=chi2;}  
@@ -49,6 +52,7 @@ class AliRDHFCuts : public AliAnalysisCuts
   void AddTrackCuts(const AliESDtrackCuts *cuts) 
          {fTrackCuts=new AliESDtrackCuts(*cuts); return;}
   void SetUsePID(Bool_t flag=kTRUE) {fUsePID=flag; return;}
+  void SetUseCentrality(Int_t flag=1);    // see enum below
   void SetPidHF(AliAODPidHF* pidObj) {
     if(fPidHF) delete fPidHF;
     fPidHF=new AliAODPidHF(*pidObj);
@@ -74,6 +78,7 @@ class AliRDHFCuts : public AliAnalysisCuts
   const Float_t *GetCuts() const {return fCutsRD;} 
   void    GetCuts(Float_t**& cutsRD) const;
   Float_t GetCutValue(Int_t iVar,Int_t iPtBin) const;
+  Float_t GetCentrality(AliAODEvent* aodEvent);
   Bool_t  *GetIsUpperCut() const {return fIsUpperCut;}
   AliESDtrackCuts *GetTrackCuts() const {return fTrackCuts;}
   virtual void GetCutVarsForOpt(AliAODRecoDecayHF *d,Float_t *vars,Int_t nvars,Int_t *pdgdaughters) = 0;
@@ -82,7 +87,9 @@ class AliRDHFCuts : public AliAnalysisCuts
   Bool_t  GetIsUsePID() const {return fUsePID;}
   Bool_t  GetIsPrimaryWithoutDaughters() const {return fRemoveDaughtersFromPrimary;}
   Bool_t GetOptPileUp() const {return fOptPileup;}
-
+  Int_t GetUseCentrality() const {return fUseCentrality;}
+  Float_t GetMinCentrality() const {return fMinCentrality;}
+  Float_t GetMaxCentrality() const {return fMaxCentrality;}
   Bool_t IsSelected(TObject *obj) {return IsSelected(obj,AliRDHFCuts::kAll);}
   Bool_t IsSelected(TList *list) {if(!list) return kTRUE; return kFALSE;}
   Bool_t IsEventSelected(AliVEvent *event);
@@ -106,6 +113,7 @@ class AliRDHFCuts : public AliAnalysisCuts
 
   enum{kAll,kTracks,kPID,kCandidate};
   enum{kNoPileupSelection,kRejectPileupEvent,kRejectTracksFromPileupVertex};
+  enum{kCentOff,kCentV0M,kCentTRK,kCentTKL,kCentCL1,kCentInvalid};
 
  protected:
 
@@ -139,9 +147,15 @@ class AliRDHFCuts : public AliAnalysisCuts
   Int_t  fOptPileup;      // option for pielup selection
   Int_t  fMinContrPileup; // min. n. of tracklets in pileup vertex
   Float_t fMinDzPileup;   // min deltaz between main and pileup vertices
-
-  ClassDef(AliRDHFCuts,7);  // base class for cuts on AOD reconstructed heavy-flavour decays
+  Int_t   fUseCentrality; // off =0 (default)
+                          // 1 = V0 
+                          // 2 = Tracks
+                          // 3 = Tracklets
+                          // 4 = SPD clusters outer 
+  Float_t fMinCentrality; // minimum centrality for selected events
+  Float_t fMaxCentrality; // maximum centrality for selected events
+
+  ClassDef(AliRDHFCuts,8);  // base class for cuts on AOD reconstructed heavy-flavour decays
 };
 
 #endif
-