#ifndef ALIRDHFCUTSD0TOKPI_H
#define ALIRDHFCUTSD0TOKPI_H
#include "AliRDHFCuts.h"
class AliAODEvent;
class AliAODRecoDecayHF;
class AliAODRecoDecayHF2Prong;
class AliRDHFCutsD0toKpi : public AliRDHFCuts
{
public:
AliRDHFCutsD0toKpi(const char* name="CutsD0toKpi");
virtual ~AliRDHFCutsD0toKpi();
AliRDHFCutsD0toKpi(const AliRDHFCutsD0toKpi& source);
AliRDHFCutsD0toKpi& operator=(const AliRDHFCutsD0toKpi& source);
using AliRDHFCuts::GetCutVarsForOpt;
virtual void GetCutVarsForOpt(AliAODRecoDecayHF *d,Float_t *vars,Int_t nvars,Int_t *pdgdaughters){
return GetCutVarsForOpt(d,vars,nvars,pdgdaughters,0x0);
}
virtual void GetCutVarsForOpt(AliAODRecoDecayHF *d,Float_t *vars,Int_t nvars,Int_t *pdgdaughters,AliAODEvent *aod);
using AliRDHFCuts::IsSelected;
virtual Int_t IsSelected(TObject* obj,Int_t selectionLevel)
{return IsSelected(obj,selectionLevel,0);}
virtual Int_t IsSelected(TObject* obj,Int_t selectionLevel,AliAODEvent* aod);
virtual Int_t IsSelectedCombPID(AliAODRecoDecayHF* d);
virtual void CalculateBayesianWeights(AliAODRecoDecayHF* d);
Float_t GetMassCut(Int_t iPtBin=0) const { return (GetCuts() ? fCutsRD[GetGlobalIndex(0,iPtBin)] : 1.e6);}
Float_t GetDCACut(Int_t iPtBin=0) const { return (GetCuts() ? fCutsRD[GetGlobalIndex(1,iPtBin)] : 1.e6);}
Int_t CombineSelectionLevels(Int_t selectionvalTrack,Int_t selectionvalCand,Int_t selectionvalPID)const;
virtual Bool_t IsInFiducialAcceptance(Double_t pt,Double_t y) const;
virtual void SetStandardCutsPP2010();
virtual void SetStandardCutsPP2010vsMult();
virtual void SetStandardCutsPP2011_276TeV();
virtual void SetStandardCutsPbPb2010();
virtual void SetStandardCutsPbPb2011();
void SetStandardCutsPbPb2010Peripherals();
virtual Int_t IsSelectedPID(AliAODRecoDecayHF *rd);
Int_t IsSelectedPIDdefault(AliAODRecoDecayHF *rd);
Int_t IsSelectedSpecialCuts(AliAODRecoDecayHF *d) const;
void SetUseSpecialCuts(Bool_t useSpecialCuts) {fUseSpecialCuts=useSpecialCuts;}
void SetMaximumPtSpecialCuts(Double_t pt) { fPtMaxSpecialCuts=pt; }
void SetMaximumPforPID(Double_t p){fmaxPtrackForPID=p;}
Double_t GetMaximumPforPID(){return fmaxPtrackForPID;}
Double_t GetMaximumPtSpecialCuts() const { return fPtMaxSpecialCuts; }
void SetLowPt(Bool_t lowpt,Double_t ptlow=2.) {fLowPt=lowpt;fPtLowPID=ptlow;}
Bool_t GetUseSpecialCuts() const {return fUseSpecialCuts;}
void SetUseDefaultPID(Bool_t defPID){fDefaultPID=defPID;}
Bool_t GetIsUsedDefPID(){return fDefaultPID;}
Double_t GetPtForPIDtight()const {return fPtLowPID;}
void SetUseKF(Bool_t useKF);
Bool_t GetIsUsedKF() const {return fUseKF;}
void SetWeightsPositive(Double_t* weights){
for (Int_t i = 0; i<AliPID::kSPECIES; i++) {
fWeightsPositive[i] = weights[i];
}
}
Double_t *GetWeightsPositive() const {return fWeightsPositive;}
void SetWeightsNegative(Double_t* weights){
for (Int_t i = 0; i<AliPID::kSPECIES; i++) {
fWeightsNegative[i] = weights[i];
}
}
Double_t *GetWeightsNegative() const {return fWeightsNegative;}
void SetBayesianStrategy(Int_t strat) {fBayesianStrategy=strat;}
Int_t GetBayesianStrategy() const {return fBayesianStrategy;}
enum EBayesianStrategy {
kBayesMomentum,
kBayesWeight,
kBayesWeightNoFilter,
kBayesSimple
};
enum EBayesianCondition {
kMaxProb,
kAbovePrior,
kThreshold
};
void SetBayesianCondition(Int_t cond) {fBayesianCondition=cond;}
Int_t GetBayesianCondition() const {return fBayesianCondition;}
void SetCombPID(Bool_t CombPID){fCombPID=CombPID;}
Bool_t GetCombPID() const {return fCombPID;}
void SetBayesProbThreshold(Double_t thresh){fProbThreshold=thresh;}
Double_t GetBayesProbThreshold() const {return fProbThreshold;}
protected:
Int_t IsSelectedKF(AliAODRecoDecayHF2Prong* d,AliAODEvent* aod) const;
Bool_t fUseSpecialCuts;
Bool_t fLowPt;
Bool_t fDefaultPID;
Bool_t fUseKF;
Double_t fPtLowPID;
Double_t fPtMaxSpecialCuts;
Double_t fmaxPtrackForPID;
Bool_t fCombPID;
Int_t fnSpecies;
Double_t* fWeightsPositive;
Double_t* fWeightsNegative;
Double_t fProbThreshold;
Int_t fBayesianStrategy;
Int_t fBayesianCondition;
ClassDef(AliRDHFCutsD0toKpi,11);
};
#endif