#ifndef ALIHELPERPID_H
#define ALIHELPERPID_H
class AliAODEvent;
class AliVEvent;
class TH1F;
class TH2F;
class TList;
class AliVTrack;
class AliVParticle;
class AliStack;
class TParticle;
class AliPIDResponse;
class AliPIDCombined;
#include "TNamed.h"
namespace AliHelperPIDNameSpace {
enum PIDType_t
{
kNSigmaTPC = 0,
kNSigmaTOF,
kNSigmaTPCTOF,
kBayes
};
const Int_t kNSigmaPIDType=kNSigmaTPCTOF;
enum AliHelperDetectorType_t
{
kITS = 0,
kTPC,
kTOF,
kNDetectors
};
enum AliHelperParticleSpecies_t
{
kSpPion = 0,
kSpKaon,
kSpProton,
kNSpecies,
kSpUndefined=999
};
enum AliHelperCharge_t
{
kChPos = 0,
kChNeg,
kNCharge
};
}
using namespace AliHelperPIDNameSpace;
class AliHelperPID : public TNamed
{
public:
AliHelperPID();
virtual ~AliHelperPID() {}
Bool_t GetisMC(){return fisMC;}
void SetisMC(Bool_t mc){fisMC=mc;}
void SetPIDType(PIDType_t PIDType) { fPIDType = PIDType; }
PIDType_t GetPIDType() {return fPIDType; }
void SetNSigmaCut(Double_t nsigma) { fNSigmaPID = nsigma; }
Double_t GetNSigmaCut() {return fNSigmaPID; }
void SetfRequestTOFPID(Bool_t tof){fRequestTOFPID=tof;}
Bool_t GetfRequestTOFPID(){return fRequestTOFPID;}
void SetfRemoveTracksT0Fill(Bool_t tof){fRemoveTracksT0Fill=tof;}
Bool_t GetfRemoveTracksT0Fill(){return fRemoveTracksT0Fill;}
void SetfUseExclusiveNSigma(Bool_t nsigEx){fUseExclusiveNSigma=nsigEx;}
Bool_t GetfUseExclusiveNSigma(){return fUseExclusiveNSigma;}
Double_t GetPtTOFPID(){return fPtTOFPID;}
void SetfPtTOFPID(Double_t pttof){fPtTOFPID=pttof;}
void SetPIDCombined(AliPIDCombined *obj){fPIDCombined=obj;}
AliPIDCombined *GetPIDCombined(){return fPIDCombined;}
void SetBayesCut(Double_t cut){fBayesCut=cut;}
Double_t GetBayesCut(){return fBayesCut;}
TList * GetOutputList() {return fOutputList;}
Double_t* GetNSigmas(AliHelperParticleSpecies_t species) {return fnsigmas[species];}
Bool_t* GetfHasDoubleCounting() {return fHasDoubleCounting;}
TH2F* GetHistogram2D(const char * name);
Int_t GetParticleSpecies(AliVTrack * trk, Bool_t FIllQAHistos);
Int_t GetParticleSpecies(AliVParticle * part);
Int_t GetIDBayes(AliVTrack * trk, Bool_t FIllQAHistos);
UInt_t CalcPIDCombined(const AliVTrack *track,const AliPIDResponse *PIDResponse, Int_t detMask, Double_t* prob) const;
void CalculateNSigmas(AliVTrack * trk, Bool_t FIllQAHistos);
Int_t FindMinNSigma(AliVTrack * trk, Bool_t FIllQAHistos);
Bool_t* GetDoubleCounting(AliVTrack * trk, Bool_t FIllQAHistos);
Bool_t* GetAllCompatibleIdentitiesNSigma(AliVTrack * trk, Bool_t FIllQAHistos);
Int_t GetMCParticleSpecie(AliVEvent* event, AliVTrack * trk, Bool_t FIllQAHistos);
void CheckTOF(AliVTrack * trk);
Double_t TOFBetaCalc(AliVTrack *track) const;
Double_t GetMass(AliHelperParticleSpecies_t id) const;
Long64_t Merge(TCollection* list);
private:
Bool_t fisMC;
PIDType_t fPIDType;
Double_t fNSigmaPID;
Double_t fBayesCut;
AliPIDResponse *fPIDResponse;
AliPIDCombined *fPIDCombined;
TList *fOutputList;
Double_t fnsigmas[kNSpecies][kNSigmaPIDType+1];
Bool_t fHasDoubleCounting[kNSpecies];
Bool_t fRequestTOFPID;
Bool_t fRemoveTracksT0Fill;
Bool_t fUseExclusiveNSigma;
Double_t fPtTOFPID;
Bool_t fHasTOFPID;
AliHelperPID(const AliHelperPID&);
AliHelperPID& operator=(const AliHelperPID&);
ClassDef(AliHelperPID, 8);
};
#endif