#ifndef ALITOFTENDERSUPPLY_H
#define ALITOFTENDERSUPPLY_H
#include <AliTenderSupply.h>
#include <AliLog.h>
#include <AliESDpid.h>
class AliESDpid;
class AliTOFcalib;
class AliTOFT0maker;
class AliESDEevent;
class AliESDtrack;
class AliTOFTenderSupply: public AliTenderSupply {
public:
AliTOFTenderSupply();
AliTOFTenderSupply(const char *name, const AliTender *tender=NULL);
virtual ~AliTOFTenderSupply(){;}
virtual void Init();
virtual void ProcessEvent();
void SetIsMC(Bool_t flag=kFALSE){fIsMC=flag;}
void SetCorrectExpTimes(Bool_t flag=kTRUE){fCorrectExpTimes=flag;}
void SetT0DetectorAdjust(Bool_t flag=kFALSE){fT0DetectorAdjust=flag;}
void SetDebugLevel(Int_t flag=0){fDebugLevel=flag;}
void SetLHC10dPatch(Bool_t flag=kFALSE){
if (flag == kTRUE) {
AliInfo(" **** TOF Tender: special setting LHC10d patch is ON");
AliInfo(" **** TOF Tender: this setting is valid only on LHC10d pass2");
}
fLHC10dPatch=flag;
return;
}
void SetAutomaticSettings(Bool_t flag=kTRUE){fAutomaticSettings=flag;}
void SetForceCorrectTRDBug(Bool_t flag=kTRUE){fForceCorrectTRDBug=flag;}
void SetUserRecoPass(Int_t flag=0){fUserRecoPass=flag;}
Int_t GetRecoPass(void){return fRecoPass;}
void DetectRecoPass();
static Float_t GetBetaTh(Float_t m, Float_t p) {return TMath::Sqrt(1. / (1. + m * m / (p * p)));};
static Float_t GetExpTimeTh(Float_t m, Float_t p, Float_t L) {return L / 2.99792457999999984e-02 / GetBetaTh(m, p);};
void RecomputeTExp(AliESDEvent *event) const;
void RecomputeTExp(AliESDtrack *track) const;
void FixTRDBug(AliESDEvent *event);
void FixTRDBug(AliESDtrack *track);
void InitGeom();
void FindTRDFix(AliESDtrack *track,Double_t *corr);
Double_t EstimateLengthInTRD1(AliESDtrack *track);
Double_t EstimateLengthInTRD2(AliESDtrack *track);
Double_t EstimateLengthOutTRD(AliESDtrack *track);
void CorrectDeltaTimes(Double_t pT, Double_t length, Bool_t isTRDout, Double_t *corrections);
Double_t CorrectExpectedProtonTime(Double_t pT,Double_t length, Bool_t isTRDout);
Double_t CorrectExpectedKaonTime(Double_t pT,Double_t length, Bool_t isTRDout);
Double_t CorrectExpectedPionTime(Double_t pT,Double_t length, Bool_t isTRDout);
Int_t GetOCDBVersion(Int_t runNumber);
void LoadTOFPIDParams(Int_t runNumber);
Double_t SampleT0Signal(Int_t side, Double_t zvertex, Double_t tracklets) const;
void GetTrackletsForT0(AliESDEvent *event, Double_t *trkA, Double_t *trkC) const;
private:
AliESDpid *fESDpid;
Bool_t fTenderNoAction;
Bool_t fIsMC;
Bool_t fCorrectExpTimes;
Bool_t fCorrectTRDBug;
Bool_t fLHC10dPatch;
Bool_t fT0DetectorAdjust;
Int_t fDebugLevel;
Bool_t fAutomaticSettings;
Int_t fRecoPass;
Int_t fUserRecoPass;
Bool_t fForceCorrectTRDBug;
Bool_t fT0Simulate;
AliTOFPIDParams *fTOFPIDParams;
AliTOFcalib *fTOFCalib;
AliTOFT0maker *fTOFT0maker;
Float_t fT0shift[4];
Float_t fT0IntercalibrationShift;
static Float_t fgT0Aresolution;
static Float_t fgT0Cresolution;
Bool_t fGeomSet;
Bool_t fIsEnteringInTRD;
Bool_t fInTRD;
Bool_t fIsComingOutTRD;
Bool_t fOutTRD;
Float_t fRhoTRDin;
Float_t fRhoTRDout;
Float_t fStep;
Double_t fMagField;
ULong64_t fCDBkey;
AliTOFTenderSupply(const AliTOFTenderSupply&c);
AliTOFTenderSupply& operator= (const AliTOFTenderSupply&c);
ClassDef(AliTOFTenderSupply, 12);
};
#endif