#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"
fMinVtxType(3),
fMinVtxContr(1),
fMaxVtxRedChi2(1e6),
+fMaxVtxZ(1e6),
fMinSPDMultiplicity(0),
fTriggerMask(0),
fTrackCuts(0),
fRemoveDaughtersFromPrimary(kFALSE),
fOptPileup(0),
fMinContrPileup(3),
-fMinDzPileup(0.6)
+fMinDzPileup(0.6),
+fUseCentrality(0),
+fMinCentrality(0.),
+fMaxCentrality(100.)
+
{
//
// Default Constructor
fMinVtxType(source.fMinVtxType),
fMinVtxContr(source.fMinVtxContr),
fMaxVtxRedChi2(source.fMaxVtxRedChi2),
+ fMaxVtxZ(source.fMaxVtxZ),
fMinSPDMultiplicity(source.fMinSPDMultiplicity),
fTriggerMask(source.fTriggerMask),
fTrackCuts(0),
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
fMinVtxType=source.fMinVtxType;
fMinVtxContr=source.fMinVtxContr;
fMaxVtxRedChi2=source.fMaxVtxRedChi2;
+ fMaxVtxZ=source.fMaxVtxZ;
fMinSPDMultiplicity=source.fMinSPDMultiplicity;
fTriggerMask=source.fTriggerMask;
fnPtBins=source.fnPtBins;
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;
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)
}
}
+ //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;
}
//---------------------------------------------------------------------------
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) {
//
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;
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