#ifndef ALIESDPIDCUTS_H
#define ALIESDPIDCUTS_H
#ifndef ALIANALYSISCUTS_H
#include "AliAnalysisCuts.h"
#endif
#ifndef ALIPID_H
#include "AliPID.h"
#endif
class TCollection;
class TH1F;
class TH1I;
class TH2I;
class TList;
class AliESDtrack;
class AliESDEvent;
class AliESDpid;
class AliESDpidCuts : public AliAnalysisCuts{
enum{
kHasHistograms = BIT(17)
};
public:
AliESDpidCuts(const Char_t *name = "AliESDpidCuts", const Char_t *title = "");
AliESDpidCuts(const AliESDpidCuts &ref);
AliESDpidCuts &operator=(const AliESDpidCuts &ref);
virtual ~AliESDpidCuts();
virtual void Init();
virtual void Copy(TObject &c) const;
virtual Long64_t Merge(TCollection *coll);
Bool_t HasHistograms() const { return TestBit(kHasHistograms); }
void DefineHistograms(Color_t color = kRed);
void DrawHistograms();
void SaveHistograms(const Char_t *location = NULL);
virtual Bool_t IsSelected(TObject *);
virtual Bool_t IsSelected(TList * ) {return kTRUE; }
virtual Bool_t AcceptTrack(const AliESDtrack *track, const AliESDEvent *event);
void SetPIDResponse(AliPIDResponse * pidresponse) { fPIDresponse = pidresponse; }
AliPIDResponse *GetPIDresponse() { return fPIDresponse; };
void SetTPCclusterRatioCut(Float_t clr) { fCutTPCclusterRatio = clr; }
inline void SetTPCnSigmaCut(AliPID::EParticleType itype, Float_t nSigma);
inline void SetTPCnSigmaCut(AliPID::EParticleType itype, Float_t negSigma, Float_t posSigma);
inline void SetTOFnSigmaCut(AliPID::EParticleType itype, Float_t nSigma);
inline void SetTOFnSigmaCut(AliPID::EParticleType itype, Float_t negSigma, Float_t posSigma);
void SetMinMomentumTOF(Float_t mom) { fMinMomentumTOF = mom; }
protected:
static const Int_t kNcuts;
AliPIDResponse *fPIDresponse;
Char_t fTPCsigmaCutRequired;
Char_t fTOFsigmaCutRequired;
Float_t fCutTPCnSigma[AliPID::kSPECIES * 2];
Float_t fCutTOFnSigma[AliPID::kSPECIES * 2];
Float_t fCutTPCclusterRatio;
Float_t fMinMomentumTOF;
TH1I *fHcutStatistics;
TH2I *fHcutCorrelation;
TH1F *fHclusterRatio[2];
TH1F *fHnSigmaTPC[AliPID::kSPECIES][2];
TH1F *fHnSigmaTOF[AliPID::kSPECIES][2];
ClassDef(AliESDpidCuts, 3)
};
void AliESDpidCuts::SetTPCnSigmaCut(AliPID::EParticleType itype, Float_t nSigma){
fCutTPCnSigma[itype * 2] = -nSigma;
fCutTPCnSigma[itype * 2 + 1] = nSigma;
fTPCsigmaCutRequired |= 1 << static_cast<Int_t >(itype);
}
void AliESDpidCuts::SetTPCnSigmaCut(AliPID::EParticleType itype, Float_t negSigma, Float_t posSigma){
fCutTPCnSigma[itype * 2] = negSigma;
fCutTPCnSigma[itype * 2 + 1] = posSigma;
fTPCsigmaCutRequired |= 1 << static_cast<Int_t >(itype);
}
void AliESDpidCuts::SetTOFnSigmaCut(AliPID::EParticleType itype, Float_t nSigma){
fCutTOFnSigma[itype * 2] = -nSigma;
fCutTOFnSigma[itype * 2 + 1] = nSigma;
fTOFsigmaCutRequired |= 1 << static_cast<Int_t >(itype);
}
void AliESDpidCuts::SetTOFnSigmaCut(AliPID::EParticleType itype, Float_t negSigma, Float_t posSigma){
fCutTOFnSigma[itype * 2] = negSigma;
fCutTOFnSigma[itype * 2 + 1] = posSigma;
fTOFsigmaCutRequired |= 1 << static_cast<Int_t >(itype);
}
#endif