#include "AliAODEvent.h"
#include "AliVVertex.h"
#include "AliESDVertex.h"
+#include "AliLog.h"
#include "AliAODVertex.h"
#include "AliESDtrack.h"
#include "AliAODTrack.h"
fRemoveDaughtersFromPrimary(kFALSE),
fOptPileup(0),
fMinContrPileup(3),
-fMinDzPileup(0.6)
+fMinDzPileup(0.6),
+fUseCentrality(0),
+fMinCentrality(0.),
+fMaxCentrality(100.)
+
{
//
// Default Constructor
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
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);
fWhyRejection=0;
// multiplicity cuts no implemented yet
-
-
-
+
const AliVVertex *vertex = event->GetPrimaryVertex();
if(!vertex) return kFALSE;
}
}
+ //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;
}
//---------------------------------------------------------------------------
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) {
//
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
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;}
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);
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;
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);
enum{kAll,kTracks,kPID,kCandidate};
enum{kNoPileupSelection,kRejectPileupEvent,kRejectTracksFromPileupVertex};
+ enum{kCentOff,kCentV0M,kCentTRK,kCentTKL,kCentCL1,kCentInvalid};
protected:
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
-