#ifndef ALITOFT0V1_H
#define ALITOFT0V1_H
#include "TObject.h"
#include "TObjArray.h"
class AliESDtrack;
class AliESDEvent;
class AliESDpid;
class TObjArray;
class AliTOFT0v1: public TObject {
public:
AliTOFT0v1(AliESDpid *extPID=NULL);
AliTOFT0v1(AliESDEvent *event,AliESDpid *extPID=NULL);
virtual ~AliTOFT0v1() ;
Double_t* DefineT0(Option_t *option,Float_t pMinCut=3,Float_t pMaxCut=5);
void SetMomBounds(Float_t pLow, Float_t pUp) { fLowerMomBound=pLow; fUpperMomBound=pUp;}
void SetTimeCorr(Float_t timecorr) {fTimeCorr=timecorr;}
Float_t GetMomError(Int_t index, Float_t mom, Float_t texp) const;
Double_t GetResult(Int_t i){if(i < 6) return fT0SigmaT0def[i]; else return -1.;};
void SetTimeResolution(Float_t ){};
void SetOptimization(Bool_t flag=kFALSE){fOptFlag=flag;};
void Init(AliESDEvent *event);
private:
Float_t ToCalculatePower(Float_t base, Int_t exponent) const ;
Int_t ToCalculatePower(Int_t base, Int_t exponent) const ;
AliTOFT0v1(const AliTOFT0v1 &);
AliTOFT0v1 & operator=(const AliTOFT0v1 &) ;
Bool_t AcceptTrack(AliESDtrack *track);
Float_t GetSigmaToVertex(AliESDtrack *track) const;
Bool_t CheckTPCMatching(AliESDtrack *track,Int_t imass) const;
Float_t fLowerMomBound;
Float_t fUpperMomBound;
Float_t fTimeCorr;
AliESDEvent* fEvent;
Double_t fT0SigmaT0def[6];
Int_t fLookupPowerThree[15];
AliESDpid *fPIDesd;
TObjArray *fTracks;
TObjArray *fGTracks;
TObjArray *fTracksT0;
Bool_t fOptFlag;
ClassDef(AliTOFT0v1,5);
};
#endif