ROOT logo
#ifndef ALIRDHFCUTS_H
#define ALIRDHFCUTS_H
/* Copyright(c) 1998-2010, ALICE Experiment at CERN, All rights reserved. *
 * See cxx source for full Copyright notice                               */

/* $Id$ */

//***********************************************************
// Class AliRDHFCuts
// base class for cuts on AOD reconstructed heavy-flavour decays
// Author: A.Dainese, andrea.dainese@pd.infn.it
//***********************************************************

#include <TString.h>

#include "AliAnalysisCuts.h"
#include "AliESDtrackCuts.h"
#include "AliAODPidHF.h"
#include "AliAODEvent.h"
#include "AliVEvent.h"

class AliAODTrack;
class AliAODRecoDecayHF;
class AliESDVertex;
class TF1;
class TFormula;

class AliRDHFCuts : public AliAnalysisCuts 
{
 public:

  enum ECentrality {kCentOff,kCentV0M,kCentTRK,kCentTKL,kCentCL1,kCentZNA,kCentZPA,kCentV0A,kCentInvalid};
  enum ESelLevel {kAll,kTracks,kPID,kCandidate};
  enum EPileup {kNoPileupSelection,kRejectPileupEvent,kRejectTracksFromPileupVertex,kRejectMVPileupEvent};
  enum ESele {kD0toKpiCuts,kD0toKpiPID,kD0fromDstarCuts,kD0fromDstarPID,kDplusCuts,kDplusPID,kDsCuts,kDsPID,kLcCuts,kLcPID,kDstarCuts,kDstarPID};
  enum ERejBits {kNotSelTrigger,kNoVertex,kTooFewVtxContrib,kZVtxOutFid,kPileup,kOutsideCentrality,kPhysicsSelection,kBadSPDVertex,kZVtxSPDOutFid,kCentralityFlattening,kBadTrackV0Correl};
  enum EV0sel  {kAllV0s = 0, kOnlyOfflineV0s = 1, kOnlyOnTheFlyV0s = 2};

  AliRDHFCuts(const Char_t* name="RDHFCuts", const Char_t* title="");
  
  virtual ~AliRDHFCuts();
  
  AliRDHFCuts(const AliRDHFCuts& source);
  AliRDHFCuts& operator=(const AliRDHFCuts& source);

  virtual void SetStandardCutsPP2010() {return;}
  virtual void SetStandardCutsPbPb2010() {return;}
  virtual void SetStandardCutsPbPb2011() {return;}


  void SetMinCentrality(Float_t minCentrality=0.) {fMinCentrality=minCentrality;}
  void SetMaxCentrality(Float_t maxCentrality=100.) {fMaxCentrality=maxCentrality;} 
  void SetMinVtxType(Int_t type=3) {fMinVtxType=type;}  
  void SetUseEventsWithOnlySPDVertex(Bool_t flag=kTRUE){ 
    if(flag) fMinVtxType=1;
    else fMinVtxType=3;
  }
  void SetMinVtxContr(Int_t contr=1) {fMinVtxContr=contr;}  
  void SetMaxVtxRdChi2(Float_t chi2=1e6) {fMaxVtxRedChi2=chi2;}  
  void SetMaxVtxZ(Float_t z=1e6) {fMaxVtxZ=z;}  
  void SetMinSPDMultiplicity(Int_t mult=0) {fMinSPDMultiplicity=mult;}  

  void SetTriggerMask(ULong64_t mask=0) {fTriggerMask=mask;}
  void SetUseOnlyOneTrigger(Bool_t onlyOne) {fUseOnlyOneTrigger=onlyOne;}
  ULong64_t GetTriggerMask() {return fTriggerMask;}
  Bool_t GetUseOnlyOneTrigger() {return fUseOnlyOneTrigger;}

  void SetUseAnyTrigger() {fTriggerMask=AliVEvent::kAny;}
  void EnableMBTrigger(){
    fTriggerMask|=AliVEvent::kMB;
    fUseOnlyOneTrigger=kFALSE;
  }
  void ResetMaskAndEnableMBTrigger(){
    fTriggerMask=AliVEvent::kMB;
    fUseOnlyOneTrigger=kFALSE;
  }
  void SetUseMBTriggerExclusively(){
    fTriggerMask=AliVEvent::kMB;
    fUseOnlyOneTrigger=kTRUE;
  }
  void EnableCentralTrigger(){
    fTriggerMask|=AliVEvent::kCentral;
    fUseOnlyOneTrigger=kFALSE;
  }
  void ResetMaskAndEnableCentralTrigger(){
    fTriggerMask=AliVEvent::kCentral;
    fUseOnlyOneTrigger=kFALSE;
  }
  void SetUseCentralTriggerExclusively(){
    fTriggerMask=AliVEvent::kCentral;
    fUseOnlyOneTrigger=kTRUE;
  }
  void EnableSemiCentralTrigger(){
    fTriggerMask|=AliVEvent::kSemiCentral;
    fUseOnlyOneTrigger=kFALSE;
  }
  void ResetMaskAndEnableSemiCentralTrigger(){
    fTriggerMask=AliVEvent::kSemiCentral;
    fUseOnlyOneTrigger=kFALSE;
  }
  void SetUseSemiCentralTriggerExclusively(){
    fTriggerMask=AliVEvent::kSemiCentral;
    fUseOnlyOneTrigger=kTRUE;
  }
  void EnableEMCALTrigger(){
    fTriggerMask|=(AliVEvent::kEMCEJE|AliVEvent::kEMCEGA);
    fUseOnlyOneTrigger=kFALSE;
  }
  void ResetMaskAndEnableEMCALTrigger(){
    fTriggerMask=(AliVEvent::kEMCEJE|AliVEvent::kEMCEGA);
    fUseOnlyOneTrigger=kFALSE;
  } 
  void SetUseEMCALTriggerExclusively(){
    fTriggerMask=(AliVEvent::kEMCEJE|AliVEvent::kEMCEGA);
    fUseOnlyOneTrigger=kTRUE;
  }
  //
  //  Setters (helpers) for pp 2012 data
  void SetUseInt1TriggerPP2012(){
    fTriggerMask=AliVEvent::kMB;
    fTriggerClass[0]="CINT1";
    fUseOnlyOneTrigger=kFALSE;
  }
  void SetUseInt7TriggerPP2012(){
    fTriggerMask=AliVEvent::kINT7;
    fTriggerClass[0]="CINT7";
    fUseOnlyOneTrigger=kFALSE;
  }
  void SetUseInt8TriggerPP2012(){
    fTriggerMask=AliVEvent::kINT8;
    fTriggerClass[0]="CINT8";
    fUseOnlyOneTrigger=kFALSE;
  }
  void SetUseEMCAL7TriggerPP2012(){
    fTriggerMask=AliVEvent::kEMC7;
    fTriggerClass[0]="CEMC7";
    fUseOnlyOneTrigger=kFALSE;
  }
  void SetUseEMCAL8TriggerPP2012(){
    fTriggerMask=AliVEvent::kEMC8;
    fTriggerClass[0]="CEMC8";
    fUseOnlyOneTrigger=kFALSE;
  }
  void SetUseEMCALJET7TriggerPP2012(){
    fTriggerMask=AliVEvent::kEMCEJE;
    fTriggerClass[0]="CEMC7EJE";
    fUseOnlyOneTrigger=kFALSE;
  }
  void SetUseEMCALJET8TriggerPP2012(){
    fTriggerMask=AliVEvent::kEMCEJE;
    fTriggerClass[0]="CEMC8EJE";
    fUseOnlyOneTrigger=kFALSE;
  }
  void SetUseEMCALGA7TriggerPP2012(){
    fTriggerMask=AliVEvent::kEMCEGA;
    fTriggerClass[0]="CEMC7EGA";
    fUseOnlyOneTrigger=kFALSE;
  }
  void SetUseEMCALGA8TriggerPP2012(){
    fTriggerMask=AliVEvent::kEMCEGA;
    fTriggerClass[0]="CEMC8EGA";
    fUseOnlyOneTrigger=kFALSE;
  }
  void SetUseSPI7TriggerPP2012(){
    fTriggerMask=AliVEvent::kSPI7;
    fTriggerClass[0]="CSPI7";
    fUseOnlyOneTrigger=kFALSE;
  }
  void SetUseSPI8TriggerPP2012(){
    fTriggerMask=AliVEvent::kSPI;
    fTriggerClass[0]="CSPI8";
    fUseOnlyOneTrigger=kFALSE;
  }
  void SetUseHighMult7TriggerPP2012(){
    fTriggerMask=AliVEvent::kHighMult;
    fTriggerClass[0]="CSHM7";
    fUseOnlyOneTrigger=kFALSE;
  }
  void SetUseHighMult8TriggerPP2012(){
    fTriggerMask=AliVEvent::kHighMult;
    fTriggerClass[0]="CSHM8";
    fUseOnlyOneTrigger=kFALSE;
  }

  void SetMaxDifferenceTRKV0Centraltity(Double_t maxd=5.) {fMaxDiffTRKV0Centr=maxd;}
  void SetNotUseCutOnTRKVsV0Centraltity() {fMaxDiffTRKV0Centr=-1.;}
  void SetRemoveTrackletOutliers(Bool_t opt) {fRemoveTrackletOutliers=opt;}
  void SetCutOnzVertexSPD(Int_t opt) {
    if(opt>=0 && opt<=2) fCutOnzVertexSPD=opt;
    else AliError("Wrong option for cut on zVertexSPD");
  }
  void SetTriggerClass(TString trclass0, TString trclass1="") {fTriggerClass[0]=trclass0; fTriggerClass[1]=trclass1;} 
  void ApplySPDDeadPbPb2011(){fApplySPDDeadPbPb2011=kTRUE;}
  void ApplySPDMisalignedCutPP2012(){fApplySPDMisalignedPP2012=kTRUE;}
  void SetVarsForOpt(Int_t nVars,Bool_t *forOpt);
  void SetGlobalIndex(){fGlobalIndex=fnVars*fnPtBins;}
  void SetGlobalIndex(Int_t nVars,Int_t nptBins){fnVars=nVars; fnPtBins=nptBins; SetGlobalIndex();}
  void SetVarNames(Int_t nVars,TString *varNames,Bool_t *isUpperCut);  
  void SetPtBins(Int_t nPtBinLimits,Float_t *ptBinLimits);
  void SetCuts(Int_t nVars,Int_t nPtBins,Float_t** cutsRD);
  void SetCuts(Int_t glIndex, Float_t* cutsRDGlob);
  void AddTrackCuts(const AliESDtrackCuts *cuts) 
          {delete fTrackCuts; fTrackCuts=new AliESDtrackCuts(*cuts); return;}
  void SetUsePID(Bool_t flag=kTRUE) {fUsePID=flag; return;}
  void SetUseAOD049(Bool_t flag=kTRUE) {fUseAOD049=flag; return;}
  void SetKinkRejection(Bool_t flag=kTRUE) {fKinkReject=flag; return;}
  void SetUseTrackSelectionWithFilterBits(Bool_t flag=kTRUE){ 
    fUseTrackSelectionWithFilterBits=flag; return;}
  void SetUseCentrality(Int_t flag=1);    // see enum below
  void SetPidHF(AliAODPidHF* pidObj) {
    if(fPidHF) delete fPidHF;
    fPidHF=new AliAODPidHF(*pidObj);
  }
  void SetRemoveDaughtersFromPrim(Bool_t removeDaughtersPrim) {fRemoveDaughtersFromPrimary=removeDaughtersPrim;}
  void SetMinPtCandidate(Double_t ptCand=-1.) {fMinPtCand=ptCand; return;}
  void SetMaxPtCandidate(Double_t ptCand=1000.) {fMaxPtCand=ptCand; return;}
  void SetMaxRapidityCandidate(Double_t ycand) {fMaxRapidityCand=ycand; return;}
  void SetOptPileup(Int_t opt=0){
    // see enum below
    fOptPileup=opt;
  }
  void SetHistoForCentralityFlattening(TH1F *h,Double_t minCentr,Double_t maxCentr,Double_t centrRef=0.,Int_t switchTRand=0);
  void ConfigurePileupCuts(Int_t minContrib=3, Float_t minDz=0.6){
    fMinContrPileup=minContrib;
    fMinDzPileup=minDz;
  }
  void SetMinCrossedRowsTPCPtDep(const char *rows="");
  void SetMinRatioClsOverCrossRowsTPC(Float_t ratio=0.) {fCutRatioClsOverCrossRowsTPC = ratio;}
  void SetMinRatioSignalNOverCrossRowsTPC(Float_t ratio=0.) {fCutRatioSignalNOverCrossRowsTPC = ratio;}

  AliAODPidHF* GetPidHF() const {return fPidHF;}
  Float_t *GetPtBinLimits() const {return fPtBinLimits;}
  Int_t   GetNPtBins() const {return fnPtBins;}
  Int_t   GetNVars() const {return fnVars;} 
  TString *GetVarNames() const {return fVarNames;} 
  Bool_t  *GetVarsForOpt() const {return fVarsForOpt;} 
  Int_t   GetNVarsForOpt() const {return fnVarsForOpt;}
  const Float_t *GetCuts() const {return fCutsRD;} 
  void    GetCuts(Float_t**& cutsRD) const;
  Float_t GetCutValue(Int_t iVar,Int_t iPtBin) const;
  Double_t GetMaxVtxZ() const {return fMaxVtxZ;}  
  Float_t GetCentrality(AliAODEvent* aodEvent){return GetCentrality(aodEvent,(AliRDHFCuts::ECentrality)fUseCentrality);}
  Float_t GetCentrality(AliAODEvent* aodEvent, AliRDHFCuts::ECentrality estimator);
  Bool_t  *GetIsUpperCut() const {return fIsUpperCut;}
  AliESDtrackCuts *GetTrackCuts() const {return fTrackCuts;}
  virtual AliESDtrackCuts *GetTrackCutsSoftPi() const {return 0;}
  virtual AliESDtrackCuts *GetTrackCutsV0daughters() const {return 0;}
  virtual void GetCutVarsForOpt(AliAODRecoDecayHF *d,Float_t *vars,Int_t nvars,Int_t *pdgdaughters) = 0;
  virtual void GetCutVarsForOpt(AliAODRecoDecayHF *d,Float_t *vars,Int_t nvars,Int_t *pdgdaughters,AliAODEvent * /*aod*/)
            {return GetCutVarsForOpt(d,vars,nvars,pdgdaughters);}
  Int_t   GetGlobalIndex(Int_t iVar,Int_t iPtBin) const;
  void    GetVarPtIndex(Int_t iGlob, Int_t& iVar, Int_t& iPtBin) const;
  Bool_t  GetIsUsePID() const {return fUsePID;}
  Bool_t  GetUseAOD049() const {return fUseAOD049;}
  Bool_t  GetUseKinkRejection() const {return fKinkReject;}
  Bool_t  GetUseEventsWithOnlySPDVertex() const{
    if(fMinVtxType==1 || fMinVtxType==2) return kTRUE;
    return kFALSE;
  }
  Bool_t  GetUseTrackSelectionWithFilterBits() const{return fUseTrackSelectionWithFilterBits;}
  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;}
  Double_t GetMinPtCandidate() const {return fMinPtCand;}
  Double_t GetMaxPtCandidate() const {return fMaxPtCand;}
  TH1F *GetHistoForCentralityFlattening(){return fHistCentrDistr;}
  void SetUseCentralityFlatteningInMC(Bool_t opt){fUseCentrFlatteningInMC=opt;}
  const char* GetMinCrossedRowsTPCPtDep() const {return fCutMinCrossedRowsTPCPtDep;}
  Float_t GetMinRatioClsOverCrossRowsTPC() const {return fCutRatioClsOverCrossRowsTPC;}
  Float_t GetMinRatioSignalNOverCrossRowsTPC() const {return fCutRatioSignalNOverCrossRowsTPC;}
  Bool_t IsSelected(TObject *obj) {return IsSelected(obj,AliRDHFCuts::kAll);}
  Bool_t IsSelected(TList *list) {if(!list) return kTRUE; return kFALSE;}
  Int_t  IsEventSelectedInCentrality(AliVEvent *event);
  Bool_t IsEventSelectedForCentrFlattening(Float_t centvalue);
  Bool_t IsEventSelected(AliVEvent *event);
  Bool_t AreDaughtersSelected(AliAODRecoDecayHF *rd) const;
  Bool_t IsDaughterSelected(AliAODTrack *track,const AliESDVertex *primary,AliESDtrackCuts *cuts) const;
  virtual Int_t IsSelectedPID(AliAODRecoDecayHF * /*rd*/) {return 1;}
  void SetupPID(AliVEvent *event);

  virtual Int_t IsSelected(TObject* obj,Int_t selectionLevel) = 0;
  virtual Int_t IsSelected(TObject* obj,Int_t selectionLevel,AliAODEvent* /*aod*/)
                {return IsSelected(obj,selectionLevel);}
  Int_t PtBin(Double_t pt) const;
  virtual void PrintAll()const;
  void PrintTrigger() const;

  virtual Bool_t IsInFiducialAcceptance(Double_t /*pt*/,Double_t /*y*/) const {return kTRUE;}

  void SetWhyRejection(Int_t why) {fWhyRejection=why; return;}
  Int_t GetWhyRejection() const {return fWhyRejection;}
  UInt_t GetEventRejectionBitMap() const {return fEvRejectionBits;}
  Bool_t IsEventRejectedDueToTrigger() const {
    return fEvRejectionBits&(1<<kNotSelTrigger);
  }
  Bool_t IsEventRejectedDueToNotRecoVertex() const {
    return fEvRejectionBits&(1<<kNoVertex);
  }
  Bool_t IsEventRejectedDueToVertexContributors() const {
    return fEvRejectionBits&(1<<kTooFewVtxContrib);
  }
  Bool_t IsEventRejectedDueToZVertexOutsideFiducialRegion() const {
    return fEvRejectionBits&(1<<kZVtxOutFid);
  }
  Bool_t IsEventRejectedDueToPileup() const {
    return fEvRejectionBits&(1<<kPileup);
  }
  Bool_t IsEventRejectedDueToCentrality() const {
    return fEvRejectionBits&(1<<kOutsideCentrality);
  }
  Bool_t IsEventRejectedDueToCentralityFlattening() const {
    return fEvRejectionBits&(1<<kCentralityFlattening);
  }
  Bool_t IsEventRejectedDueToTRKV0CentralityCorrel() const {
    return fEvRejectionBits&(1<<kBadTrackV0Correl);
  }
  Bool_t IsEventRejectedDuePhysicsSelection() const {
    return fEvRejectionBits&(1<<kPhysicsSelection);
  }


  void SetFixRefs(Bool_t fix=kTRUE) {fFixRefs=fix; return;}
  void SetUsePhysicsSelection(Bool_t use=kTRUE){fUsePhysicsSelection=use; return;}
  Bool_t GetUsePhysicsSelection() const { return fUsePhysicsSelection; }



  Bool_t CompareCuts(const AliRDHFCuts *obj) const;
  void MakeTable()const;

  Int_t GetIsSelectedCuts() const {return fIsSelectedCuts;}
  Int_t GetIsSelectedPID() const  {return fIsSelectedPID;}

  void SetUseMCVertex() { fUseMCVertex=kTRUE; }
  Bool_t GetUseMCVertex() const { return fUseMCVertex; }

  Bool_t RecalcOwnPrimaryVtx(AliAODRecoDecayHF *d,AliAODEvent *aod) const;
  Bool_t SetMCPrimaryVtx(AliAODRecoDecayHF *d,AliAODEvent *aod) const;
  void   CleanOwnPrimaryVtx(AliAODRecoDecayHF *d,AliAODEvent *aod,AliAODVertex *origownvtx) const;

  Bool_t CountEventForNormalization() const 
  { if(fWhyRejection==0) {return kTRUE;} else {return kFALSE;} }

  void SetKeepSignalMC() {fKeepSignalMC=kTRUE; return;}

  // Flag and pt-maximum to check if the candidate daughters fulfill the kFirst criteria
  void SetSelectCandTrackSPDFirst( Bool_t flag, Double_t ptmax )
  { fIsCandTrackSPDFirst=flag; fMaxPtCandTrackSPDFirst=ptmax; }
  Bool_t IsSelectCandTrackSPDFirst() const { return fIsCandTrackSPDFirst; }
  Double_t IsMaxCandTrackSPDFirst() const { return fMaxPtCandTrackSPDFirst; }

  Bool_t CheckPtDepCrossedRows(TString rows,Bool_t print=kFALSE) const;



 protected:

  void SetNPtBins(Int_t nptBins){fnPtBins=nptBins;}
  void SetNVars(Int_t nVars){fnVars=nVars;}

  Bool_t IsSignalMC(AliAODRecoDecay *d,AliAODEvent *aod,Int_t pdg) const;
  Bool_t RecomputePrimaryVertex(AliAODEvent* event) const;

  // cuts on the event
  Int_t fMinVtxType; // 0: not cut; 1: SPDZ; 2: SPD3D; 3: Tracks
  Int_t fMinVtxContr;   // minimum vertex contributors
  Float_t fMaxVtxRedChi2; // maximum chi2/ndf
  Float_t fMaxVtxZ; // maximum |z| of primary vertex
  Int_t fMinSPDMultiplicity; // SPD multiplicity
  ULong64_t fTriggerMask; // trigger mask
  Bool_t fUseOnlyOneTrigger; // flag to select one trigger only
  TString  fTriggerClass[2]; // trigger class
  // quality cuts on the daughter tracks
  AliESDtrackCuts *fTrackCuts; // tracks for daughter tracks (AOD converted to ESD on the flight!)
  // cuts on the candidate
  Int_t fnPtBins;  // number of pt bins for cuts
  Int_t fnPtBinLimits; // "number of limits", that is fnPtBins+1
  Float_t* fPtBinLimits; //[fnPtBinLimits]  pt bins
  Int_t fnVars;    // number of cut vars for candidates
  TString *fVarNames; //[fnVars] names of the variables
  Int_t fnVarsForOpt;    // number of cut vars to be optimized for candidates
  Bool_t *fVarsForOpt; //[fnVars] kTRUE for vars to be used in optimization
  Int_t fGlobalIndex; // fnVars*fnPtBins
  Float_t *fCutsRD; //[fGlobalIndex] the cuts values
  Bool_t  *fIsUpperCut; //[fnVars] use > or < to select
  Bool_t fUsePID; // enable PID usage (off by default)
  Bool_t fUseAOD049; // enable AOD049 centrality cleanup
  AliAODPidHF *fPidHF; // PID for heavy flavours manager
  Int_t fWhyRejection; // used to code the step at which candidate was rejected
  UInt_t fEvRejectionBits; //bit map storing the full info about event rejection
  Bool_t fRemoveDaughtersFromPrimary; // flag to switch on the removal of duaghters from the primary vertex computation
  Bool_t fUseMCVertex; // use MC primary vertex 
  Bool_t fUsePhysicsSelection; // use Physics selection criteria
  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
  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
  Bool_t  fFixRefs;       // fix the daughter track references 
  Int_t  fIsSelectedCuts; // outcome of cuts selection
  Int_t  fIsSelectedPID;  // outcome of PID selection
  Double_t fMinPtCand; // minimum pt of the candidate
  Double_t fMaxPtCand; // minimum pt of the candidate
  Double_t fMaxRapidityCand; // max rapidity of candidate (if !=-999 overrides IsInFiducialAcceptance)
  Bool_t  fKeepSignalMC; // IsSelected returns always kTRUE for MC signal
  Bool_t fIsCandTrackSPDFirst; // flag to select the track kFirst criteria for pt < ptlimit
  Double_t fMaxPtCandTrackSPDFirst; // maximum pt of the candidate for which to check if the daughters fulfill kFirst criteria
  Bool_t fApplySPDDeadPbPb2011;  // flag to apply SPD dead module map of PbPb2011
  Bool_t fApplySPDMisalignedPP2012; // flag to apply cut on tracks crossing SPD misaligned modules for PP2012 data
  Double_t fMaxDiffTRKV0Centr;   // Max. difference between TRK and V0 centrality (remove TPC pileup for PbPb 2011)
  Bool_t fRemoveTrackletOutliers; // flag to apply cut on tracklets vs. centrality for 2011 data
  Int_t fCutOnzVertexSPD; // cut on zSPD vertex to remove outliers in centrality vs. tracklets (0=no cut, 1= cut at 12 cm, 2= cut on difference to z of vtx tracks
  Bool_t fKinkReject; // flag to reject kink daughters
  Bool_t fUseTrackSelectionWithFilterBits; // flag to enable/disable the check on filter bits
  Bool_t fUseCentrFlatteningInMC; // flag for enabling/diabling centrality flattening in MC
  TH1F *fHistCentrDistr;   // histogram with reference centrality distribution for centrality distribution flattening
  Float_t fCutRatioClsOverCrossRowsTPC; // min. value ratio NTPCClusters/NTPCCrossedRows, cut if !=0
  Float_t fCutRatioSignalNOverCrossRowsTPC;   // min. value ratio TPCPointsUsedForPID/NTPCCrossedRows, cut if !=0 
  TString fCutMinCrossedRowsTPCPtDep; // pT-dep cut in TPC minimum n crossed rows
  TFormula *f1CutMinNCrossedRowsTPCPtDep; // pT-dep cut in TPC minimum n crossed rows
 

  ClassDef(AliRDHFCuts,36);  // base class for cuts on AOD reconstructed heavy-flavour decays
};

#endif
 AliRDHFCuts.h:1
 AliRDHFCuts.h:2
 AliRDHFCuts.h:3
 AliRDHFCuts.h:4
 AliRDHFCuts.h:5
 AliRDHFCuts.h:6
 AliRDHFCuts.h:7
 AliRDHFCuts.h:8
 AliRDHFCuts.h:9
 AliRDHFCuts.h:10
 AliRDHFCuts.h:11
 AliRDHFCuts.h:12
 AliRDHFCuts.h:13
 AliRDHFCuts.h:14
 AliRDHFCuts.h:15
 AliRDHFCuts.h:16
 AliRDHFCuts.h:17
 AliRDHFCuts.h:18
 AliRDHFCuts.h:19
 AliRDHFCuts.h:20
 AliRDHFCuts.h:21
 AliRDHFCuts.h:22
 AliRDHFCuts.h:23
 AliRDHFCuts.h:24
 AliRDHFCuts.h:25
 AliRDHFCuts.h:26
 AliRDHFCuts.h:27
 AliRDHFCuts.h:28
 AliRDHFCuts.h:29
 AliRDHFCuts.h:30
 AliRDHFCuts.h:31
 AliRDHFCuts.h:32
 AliRDHFCuts.h:33
 AliRDHFCuts.h:34
 AliRDHFCuts.h:35
 AliRDHFCuts.h:36
 AliRDHFCuts.h:37
 AliRDHFCuts.h:38
 AliRDHFCuts.h:39
 AliRDHFCuts.h:40
 AliRDHFCuts.h:41
 AliRDHFCuts.h:42
 AliRDHFCuts.h:43
 AliRDHFCuts.h:44
 AliRDHFCuts.h:45
 AliRDHFCuts.h:46
 AliRDHFCuts.h:47
 AliRDHFCuts.h:48
 AliRDHFCuts.h:49
 AliRDHFCuts.h:50
 AliRDHFCuts.h:51
 AliRDHFCuts.h:52
 AliRDHFCuts.h:53
 AliRDHFCuts.h:54
 AliRDHFCuts.h:55
 AliRDHFCuts.h:56
 AliRDHFCuts.h:57
 AliRDHFCuts.h:58
 AliRDHFCuts.h:59
 AliRDHFCuts.h:60
 AliRDHFCuts.h:61
 AliRDHFCuts.h:62
 AliRDHFCuts.h:63
 AliRDHFCuts.h:64
 AliRDHFCuts.h:65
 AliRDHFCuts.h:66
 AliRDHFCuts.h:67
 AliRDHFCuts.h:68
 AliRDHFCuts.h:69
 AliRDHFCuts.h:70
 AliRDHFCuts.h:71
 AliRDHFCuts.h:72
 AliRDHFCuts.h:73
 AliRDHFCuts.h:74
 AliRDHFCuts.h:75
 AliRDHFCuts.h:76
 AliRDHFCuts.h:77
 AliRDHFCuts.h:78
 AliRDHFCuts.h:79
 AliRDHFCuts.h:80
 AliRDHFCuts.h:81
 AliRDHFCuts.h:82
 AliRDHFCuts.h:83
 AliRDHFCuts.h:84
 AliRDHFCuts.h:85
 AliRDHFCuts.h:86
 AliRDHFCuts.h:87
 AliRDHFCuts.h:88
 AliRDHFCuts.h:89
 AliRDHFCuts.h:90
 AliRDHFCuts.h:91
 AliRDHFCuts.h:92
 AliRDHFCuts.h:93
 AliRDHFCuts.h:94
 AliRDHFCuts.h:95
 AliRDHFCuts.h:96
 AliRDHFCuts.h:97
 AliRDHFCuts.h:98
 AliRDHFCuts.h:99
 AliRDHFCuts.h:100
 AliRDHFCuts.h:101
 AliRDHFCuts.h:102
 AliRDHFCuts.h:103
 AliRDHFCuts.h:104
 AliRDHFCuts.h:105
 AliRDHFCuts.h:106
 AliRDHFCuts.h:107
 AliRDHFCuts.h:108
 AliRDHFCuts.h:109
 AliRDHFCuts.h:110
 AliRDHFCuts.h:111
 AliRDHFCuts.h:112
 AliRDHFCuts.h:113
 AliRDHFCuts.h:114
 AliRDHFCuts.h:115
 AliRDHFCuts.h:116
 AliRDHFCuts.h:117
 AliRDHFCuts.h:118
 AliRDHFCuts.h:119
 AliRDHFCuts.h:120
 AliRDHFCuts.h:121
 AliRDHFCuts.h:122
 AliRDHFCuts.h:123
 AliRDHFCuts.h:124
 AliRDHFCuts.h:125
 AliRDHFCuts.h:126
 AliRDHFCuts.h:127
 AliRDHFCuts.h:128
 AliRDHFCuts.h:129
 AliRDHFCuts.h:130
 AliRDHFCuts.h:131
 AliRDHFCuts.h:132
 AliRDHFCuts.h:133
 AliRDHFCuts.h:134
 AliRDHFCuts.h:135
 AliRDHFCuts.h:136
 AliRDHFCuts.h:137
 AliRDHFCuts.h:138
 AliRDHFCuts.h:139
 AliRDHFCuts.h:140
 AliRDHFCuts.h:141
 AliRDHFCuts.h:142
 AliRDHFCuts.h:143
 AliRDHFCuts.h:144
 AliRDHFCuts.h:145
 AliRDHFCuts.h:146
 AliRDHFCuts.h:147
 AliRDHFCuts.h:148
 AliRDHFCuts.h:149
 AliRDHFCuts.h:150
 AliRDHFCuts.h:151
 AliRDHFCuts.h:152
 AliRDHFCuts.h:153
 AliRDHFCuts.h:154
 AliRDHFCuts.h:155
 AliRDHFCuts.h:156
 AliRDHFCuts.h:157
 AliRDHFCuts.h:158
 AliRDHFCuts.h:159
 AliRDHFCuts.h:160
 AliRDHFCuts.h:161
 AliRDHFCuts.h:162
 AliRDHFCuts.h:163
 AliRDHFCuts.h:164
 AliRDHFCuts.h:165
 AliRDHFCuts.h:166
 AliRDHFCuts.h:167
 AliRDHFCuts.h:168
 AliRDHFCuts.h:169
 AliRDHFCuts.h:170
 AliRDHFCuts.h:171
 AliRDHFCuts.h:172
 AliRDHFCuts.h:173
 AliRDHFCuts.h:174
 AliRDHFCuts.h:175
 AliRDHFCuts.h:176
 AliRDHFCuts.h:177
 AliRDHFCuts.h:178
 AliRDHFCuts.h:179
 AliRDHFCuts.h:180
 AliRDHFCuts.h:181
 AliRDHFCuts.h:182
 AliRDHFCuts.h:183
 AliRDHFCuts.h:184
 AliRDHFCuts.h:185
 AliRDHFCuts.h:186
 AliRDHFCuts.h:187
 AliRDHFCuts.h:188
 AliRDHFCuts.h:189
 AliRDHFCuts.h:190
 AliRDHFCuts.h:191
 AliRDHFCuts.h:192
 AliRDHFCuts.h:193
 AliRDHFCuts.h:194
 AliRDHFCuts.h:195
 AliRDHFCuts.h:196
 AliRDHFCuts.h:197
 AliRDHFCuts.h:198
 AliRDHFCuts.h:199
 AliRDHFCuts.h:200
 AliRDHFCuts.h:201
 AliRDHFCuts.h:202
 AliRDHFCuts.h:203
 AliRDHFCuts.h:204
 AliRDHFCuts.h:205
 AliRDHFCuts.h:206
 AliRDHFCuts.h:207
 AliRDHFCuts.h:208
 AliRDHFCuts.h:209
 AliRDHFCuts.h:210
 AliRDHFCuts.h:211
 AliRDHFCuts.h:212
 AliRDHFCuts.h:213
 AliRDHFCuts.h:214
 AliRDHFCuts.h:215
 AliRDHFCuts.h:216
 AliRDHFCuts.h:217
 AliRDHFCuts.h:218
 AliRDHFCuts.h:219
 AliRDHFCuts.h:220
 AliRDHFCuts.h:221
 AliRDHFCuts.h:222
 AliRDHFCuts.h:223
 AliRDHFCuts.h:224
 AliRDHFCuts.h:225
 AliRDHFCuts.h:226
 AliRDHFCuts.h:227
 AliRDHFCuts.h:228
 AliRDHFCuts.h:229
 AliRDHFCuts.h:230
 AliRDHFCuts.h:231
 AliRDHFCuts.h:232
 AliRDHFCuts.h:233
 AliRDHFCuts.h:234
 AliRDHFCuts.h:235
 AliRDHFCuts.h:236
 AliRDHFCuts.h:237
 AliRDHFCuts.h:238
 AliRDHFCuts.h:239
 AliRDHFCuts.h:240
 AliRDHFCuts.h:241
 AliRDHFCuts.h:242
 AliRDHFCuts.h:243
 AliRDHFCuts.h:244
 AliRDHFCuts.h:245
 AliRDHFCuts.h:246
 AliRDHFCuts.h:247
 AliRDHFCuts.h:248
 AliRDHFCuts.h:249
 AliRDHFCuts.h:250
 AliRDHFCuts.h:251
 AliRDHFCuts.h:252
 AliRDHFCuts.h:253
 AliRDHFCuts.h:254
 AliRDHFCuts.h:255
 AliRDHFCuts.h:256
 AliRDHFCuts.h:257
 AliRDHFCuts.h:258
 AliRDHFCuts.h:259
 AliRDHFCuts.h:260
 AliRDHFCuts.h:261
 AliRDHFCuts.h:262
 AliRDHFCuts.h:263
 AliRDHFCuts.h:264
 AliRDHFCuts.h:265
 AliRDHFCuts.h:266
 AliRDHFCuts.h:267
 AliRDHFCuts.h:268
 AliRDHFCuts.h:269
 AliRDHFCuts.h:270
 AliRDHFCuts.h:271
 AliRDHFCuts.h:272
 AliRDHFCuts.h:273
 AliRDHFCuts.h:274
 AliRDHFCuts.h:275
 AliRDHFCuts.h:276
 AliRDHFCuts.h:277
 AliRDHFCuts.h:278
 AliRDHFCuts.h:279
 AliRDHFCuts.h:280
 AliRDHFCuts.h:281
 AliRDHFCuts.h:282
 AliRDHFCuts.h:283
 AliRDHFCuts.h:284
 AliRDHFCuts.h:285
 AliRDHFCuts.h:286
 AliRDHFCuts.h:287
 AliRDHFCuts.h:288
 AliRDHFCuts.h:289
 AliRDHFCuts.h:290
 AliRDHFCuts.h:291
 AliRDHFCuts.h:292
 AliRDHFCuts.h:293
 AliRDHFCuts.h:294
 AliRDHFCuts.h:295
 AliRDHFCuts.h:296
 AliRDHFCuts.h:297
 AliRDHFCuts.h:298
 AliRDHFCuts.h:299
 AliRDHFCuts.h:300
 AliRDHFCuts.h:301
 AliRDHFCuts.h:302
 AliRDHFCuts.h:303
 AliRDHFCuts.h:304
 AliRDHFCuts.h:305
 AliRDHFCuts.h:306
 AliRDHFCuts.h:307
 AliRDHFCuts.h:308
 AliRDHFCuts.h:309
 AliRDHFCuts.h:310
 AliRDHFCuts.h:311
 AliRDHFCuts.h:312
 AliRDHFCuts.h:313
 AliRDHFCuts.h:314
 AliRDHFCuts.h:315
 AliRDHFCuts.h:316
 AliRDHFCuts.h:317
 AliRDHFCuts.h:318
 AliRDHFCuts.h:319
 AliRDHFCuts.h:320
 AliRDHFCuts.h:321
 AliRDHFCuts.h:322
 AliRDHFCuts.h:323
 AliRDHFCuts.h:324
 AliRDHFCuts.h:325
 AliRDHFCuts.h:326
 AliRDHFCuts.h:327
 AliRDHFCuts.h:328
 AliRDHFCuts.h:329
 AliRDHFCuts.h:330
 AliRDHFCuts.h:331
 AliRDHFCuts.h:332
 AliRDHFCuts.h:333
 AliRDHFCuts.h:334
 AliRDHFCuts.h:335
 AliRDHFCuts.h:336
 AliRDHFCuts.h:337
 AliRDHFCuts.h:338
 AliRDHFCuts.h:339
 AliRDHFCuts.h:340
 AliRDHFCuts.h:341
 AliRDHFCuts.h:342
 AliRDHFCuts.h:343
 AliRDHFCuts.h:344
 AliRDHFCuts.h:345
 AliRDHFCuts.h:346
 AliRDHFCuts.h:347
 AliRDHFCuts.h:348
 AliRDHFCuts.h:349
 AliRDHFCuts.h:350
 AliRDHFCuts.h:351
 AliRDHFCuts.h:352
 AliRDHFCuts.h:353
 AliRDHFCuts.h:354
 AliRDHFCuts.h:355
 AliRDHFCuts.h:356
 AliRDHFCuts.h:357
 AliRDHFCuts.h:358
 AliRDHFCuts.h:359
 AliRDHFCuts.h:360
 AliRDHFCuts.h:361
 AliRDHFCuts.h:362
 AliRDHFCuts.h:363
 AliRDHFCuts.h:364
 AliRDHFCuts.h:365
 AliRDHFCuts.h:366
 AliRDHFCuts.h:367
 AliRDHFCuts.h:368
 AliRDHFCuts.h:369
 AliRDHFCuts.h:370
 AliRDHFCuts.h:371
 AliRDHFCuts.h:372
 AliRDHFCuts.h:373
 AliRDHFCuts.h:374
 AliRDHFCuts.h:375
 AliRDHFCuts.h:376
 AliRDHFCuts.h:377
 AliRDHFCuts.h:378
 AliRDHFCuts.h:379
 AliRDHFCuts.h:380
 AliRDHFCuts.h:381
 AliRDHFCuts.h:382
 AliRDHFCuts.h:383
 AliRDHFCuts.h:384
 AliRDHFCuts.h:385
 AliRDHFCuts.h:386
 AliRDHFCuts.h:387
 AliRDHFCuts.h:388
 AliRDHFCuts.h:389
 AliRDHFCuts.h:390
 AliRDHFCuts.h:391
 AliRDHFCuts.h:392
 AliRDHFCuts.h:393
 AliRDHFCuts.h:394
 AliRDHFCuts.h:395
 AliRDHFCuts.h:396
 AliRDHFCuts.h:397
 AliRDHFCuts.h:398
 AliRDHFCuts.h:399
 AliRDHFCuts.h:400
 AliRDHFCuts.h:401
 AliRDHFCuts.h:402
 AliRDHFCuts.h:403
 AliRDHFCuts.h:404
 AliRDHFCuts.h:405
 AliRDHFCuts.h:406
 AliRDHFCuts.h:407
 AliRDHFCuts.h:408
 AliRDHFCuts.h:409
 AliRDHFCuts.h:410
 AliRDHFCuts.h:411
 AliRDHFCuts.h:412
 AliRDHFCuts.h:413
 AliRDHFCuts.h:414
 AliRDHFCuts.h:415
 AliRDHFCuts.h:416
 AliRDHFCuts.h:417
 AliRDHFCuts.h:418
 AliRDHFCuts.h:419
 AliRDHFCuts.h:420
 AliRDHFCuts.h:421
 AliRDHFCuts.h:422
 AliRDHFCuts.h:423
 AliRDHFCuts.h:424
 AliRDHFCuts.h:425
 AliRDHFCuts.h:426
 AliRDHFCuts.h:427
 AliRDHFCuts.h:428
 AliRDHFCuts.h:429
 AliRDHFCuts.h:430
 AliRDHFCuts.h:431
 AliRDHFCuts.h:432
 AliRDHFCuts.h:433