#ifndef ALIESDPID_H
#define ALIESDPID_H
#include <Rtypes.h>
#include "AliESDtrack.h"
#include "AliMCEventHandler.h"
#include "AliPIDResponse.h"
class AliESDEvent;
class AliVEvent;
class AliVParticle;
class AliESDpid : public AliPIDResponse {
public:
AliESDpid(Bool_t forMC=kFALSE): AliPIDResponse(forMC), fRangeTOFMismatch(5.), fEventHandler(NULL) {;}
AliESDpid(const AliESDpid&a): AliPIDResponse(a), fRangeTOFMismatch(a.fRangeTOFMismatch), fEventHandler(NULL){;};
AliESDpid& operator=(const AliESDpid& a){if (this==&a) return *this; AliPIDResponse::operator=(a); fRangeTOFMismatch=a.fRangeTOFMismatch; fEventHandler=NULL; return *this;};
virtual ~AliESDpid() {}
Int_t MakePID(AliESDEvent *event, Bool_t TPCOnly = kFALSE, Float_t timeZeroTOF=9999) const;
void MakePIDForTracking(AliESDEvent *event) const;
void MakeTPCPID(AliESDtrack *track) const;
void MakeITSPID(AliESDtrack *track) const;
void MakeTOFPID(AliESDtrack *track, Float_t ) const;
Bool_t CheckTOFMatching(AliESDtrack *track) const;
void MakeTRDPID(AliESDtrack *track) const;
void CombinePID(AliESDtrack *track) const;
void SetPIDForTracking(AliESDtrack *track) const;
void SetNMaxSigmaTOFTPCMismatch(Float_t range) {fRangeTOFMismatch=range;}
Float_t GetNMaxSigmaTOFTPCMismatch() const {return fRangeTOFMismatch;}
Float_t GetTPCsignalTunedOnData(const AliVTrack *t) const;
Float_t GetTOFsignalTunedOnData(const AliVTrack *t) const;
void SetEventHandler(AliVEventHandler *event){fEventHandler=event;};
protected:
virtual Float_t GetSignalDeltaTOFold(const AliVParticle *track, AliPID::EParticleType type, Bool_t ratio=kFALSE) const;
virtual Float_t GetNumberOfSigmasTOFold(const AliVParticle *track, AliPID::EParticleType type) const;
private:
Float_t fRangeTOFMismatch;
AliVEventHandler *fEventHandler;
ClassDef(AliESDpid,7)
};
#endif