#ifndef ALIRSNCUTPID_H
#define ALIRSNCUTPID_H
#include "AliPID.h"
#include "AliRsnCut.h"
class AliRsnDaughter;
class AliRsnCutPID : public AliRsnCut {
public:
enum EDetector {
kITS,
kTPC,
kTRD,
kTOF,
kHMPID,
kDetectors
};
AliRsnCutPID();
AliRsnCutPID(const char *name, AliPID::EParticleType pid, Double_t probMin = 0.0, Bool_t perfectPID = kFALSE);
virtual ~AliRsnCutPID() {;};
void SetDefault(Bool_t yn = kTRUE) {fUseDefault = yn;}
void SetPrior(Int_t i, Double_t value) {if (i >= 0 && i < AliPID::kSPECIES) fPrior[i] = value;}
void SetPerfect(Bool_t yn = kTRUE) {fPerfect = yn;}
void IncludeDetector(EDetector det, Double_t threshold = 0., Bool_t goAbove = kTRUE);
void ExcludeDetector(EDetector det) {if (CheckBounds(det)) fUseDetector[det] = kFALSE;}
Bool_t ComputeWeights(AliRsnDaughter *daughter);
Int_t RealisticPID(AliRsnDaughter *const daughter, Double_t &prob);
Int_t PerfectPID(AliRsnDaughter *const daughter);
Double_t GetWeight(Int_t i) const {if (i >= 0 && i < AliPID::kSPECIES) return fWeight[i]; return 0.0;}
virtual Bool_t IsSelected(TObject *object);
protected:
Bool_t CheckBounds(EDetector det) const {return (det >= kITS && det < kDetectors);}
Bool_t CheckThreshold(EDetector det, Double_t value) const;
Double_t fPrior[AliPID::kSPECIES];
Double_t fWeight[AliPID::kSPECIES];
Bool_t fPerfect;
Bool_t fUseDefault;
Bool_t fUseDetector[kDetectors];
Double_t fPtThreshold[kDetectors];
Double_t fGoAboveThreshold[kDetectors];
ClassDef(AliRsnCutPID, 1)
};
#endif