#ifndef ALITOFSDIGITIZER_H
#define ALITOFSDIGITIZER_H
#include "TNamed.h"
class TF1;
class TString;
class AliLoader;
class AliRunLoader;
class AliTOFcalib;
class AliTOFSDigitizer: public TNamed {
public:
AliTOFSDigitizer() ;
AliTOFSDigitizer(const char* HeaderFile, Int_t evNumber1=-1, Int_t nEvents=0) ;
AliTOFSDigitizer(const AliTOFSDigitizer &source);
AliTOFSDigitizer& operator=(const AliTOFSDigitizer &);
virtual ~AliTOFSDigitizer() ;
virtual void Digitize(Option_t *verboseOption);
void SetSDigitsFile(char * ) const {;}
void InitParameters();
virtual void PrintParameters() const ;
virtual void SimulateDetectorResponse(Float_t z0, Float_t x0, Float_t geantTime, Int_t& nActivatedPads, Int_t& nFiredPads, Bool_t* isFired, Int_t* nPlace, Float_t* qInduced, Float_t* tofTime, Float_t& averageTime);
virtual void SimulateDetectorResponseOLD(Float_t z0, Float_t x0, Float_t geantTime, Int_t& nActivatedPads, Int_t& nFiredPads, Bool_t* isFired, Int_t* nPlace, Float_t* qInduced, Float_t* tofTime, Float_t& averageTime);
virtual void Print(Option_t* opt) const ;
void SetFirstEvent(Int_t event1) {fEvent1 = event1;}
void SetSecondEvent(Int_t event2) {fEvent2 = event2;}
Int_t GetFirstEvent() const {return fEvent1;}
Int_t GetSecondEvent() const {return fEvent2;}
Int_t GetNEvents() const {return (fEvent2-fEvent1);}
void SelectSectorAndPlate(Int_t sector, Int_t plate);
void SetPadefficiency(Float_t padefficiency) {fpadefficiency=padefficiency;}
void SetEdgeEffect(Int_t edgeEffect) {fEdgeEffect=edgeEffect;}
void SetEdgeTails(Int_t edgeTails) {fEdgeTails=edgeTails;}
void SetHparameter(Float_t hparameter) {fHparameter=hparameter;}
void SetH2parameter(Float_t h2parameter) {fH2parameter=h2parameter;}
void SetKparameter(Float_t kparameter) {fKparameter=kparameter;}
void SetK2parameter(Float_t k2parameter) {fK2parameter=k2parameter;}
void SetEffCenter(Float_t effCenter) {fEffCenter=effCenter;}
void SetEffBoundary(Float_t effBoundary) {fEffBoundary=effBoundary;}
void SetEff2Boundary(Float_t eff2Boundary) {fEff2Boundary=eff2Boundary;}
void SetEff3Boundary(Float_t eff3Boundary) {fEff3Boundary=eff3Boundary;}
void SetAddTRes(Float_t addTRes) {fAddTRes=addTRes;}
void SetResCenter (Float_t resCenter) {fResCenter=resCenter;}
void SetResBoundary(Float_t resBoundary) {fResBoundary=resBoundary;}
void SetResSlope(Float_t resSlope) {fResSlope=resSlope;}
void SetTimeWalkCenter(Float_t timeWalkCenter) {fTimeWalkCenter=timeWalkCenter;}
void SetTimeWalkBoundary(Float_t timeWalkBoundary){fTimeWalkBoundary=timeWalkBoundary;}
void SetTimeWalkSlope(Float_t timeWalkSlope) {fTimeWalkSlope=timeWalkSlope;}
void SetTimeDelayFlag(Int_t timeDelayFlag) {fTimeDelayFlag=timeDelayFlag;}
void SetPulseHeightSlope(Float_t pulseHeightSlope){fPulseHeightSlope=pulseHeightSlope;}
void SetTimeDelaySlope(Float_t timeDelaySlope) {fTimeDelaySlope=timeDelaySlope;}
void SetMinimumCharge(Float_t minimumCharge) {fMinimumCharge=minimumCharge;}
void SetChargeSmearing(Float_t chargeSmearing) {fChargeSmearing=chargeSmearing;}
void SetLogChargeSmearing(Float_t logChargeSmearing){fLogChargeSmearing=logChargeSmearing;}
void SetTimeSmearing(Float_t timeSmearing) {fTimeSmearing=timeSmearing;}
void SetAverageTimeFlag(Int_t averageTimeFlag) {fAverageTimeFlag=averageTimeFlag;}
void SetAdcBin(Float_t adcBin) {fAdcBin=adcBin;}
void SetAdcMean(Float_t adcMean) {fAdcMean=adcMean;}
void SetAdcRms(Float_t adcRms) {fAdcRms=adcRms;}
void SetTimeResolution(Float_t time) {fTimeResolution=time;}
Float_t GetPadefficiency() const {return fpadefficiency;}
Int_t GetEdgeEffect() const {return fEdgeEffect;}
Int_t GetEdgeTails() const {return fEdgeTails;}
Float_t GetHparameter() const {return fHparameter;}
Float_t GetH2parameter() const {return fH2parameter;}
Float_t GetKparameter() const {return fKparameter;}
Float_t GetK2parameter() const {return fK2parameter;}
Float_t GetEffCenter() const {return fEffCenter;}
Float_t GetEffBoundary() const {return fEffBoundary;}
Float_t GetEff2Boundary() const {return fEff2Boundary;}
Float_t GetEff3Boundary() const {return fEff3Boundary;}
Float_t GetAddTRes () const {return fAddTRes;}
Float_t GetResCenter () const {return fResCenter;}
Float_t GetResBoundary() const {return fResBoundary;}
Float_t GetResSlope() const {return fResSlope;}
Float_t GetTimeWalkCenter() const {return fTimeWalkCenter;}
Float_t GetTimeWalkBoundary() const {return fTimeWalkBoundary;}
Float_t GetTimeWalkSlope() const {return fTimeWalkSlope;}
Int_t GetTimeDelayFlag() const {return fTimeDelayFlag;}
Float_t GetPulseHeightSlope() const {return fPulseHeightSlope;}
Float_t GetTimeDelaySlope() const {return fTimeDelaySlope;}
Float_t GetMinimumCharge() const {return fMinimumCharge;}
Float_t GetChargeSmearing() const {return fChargeSmearing;}
Float_t GetLogChargeSmearing()const {return fLogChargeSmearing;}
Float_t GetTimeSmearing() const {return fTimeSmearing;}
Int_t GetAverageTimeFlag() const {return fAverageTimeFlag;}
Float_t GetAdcBin() const {return fAdcBin;}
Float_t GetAdcMean() const {return fAdcMean;}
Float_t GetAdcRms() const {return fAdcRms;}
Float_t GetTimeResolution() const {return fTimeResolution;}
protected:
private:
Int_t fEvent1;
Int_t fEvent2;
TF1 *ftail;
TString fHeadersFile;
AliRunLoader* fRunLoader;
AliLoader* fTOFLoader;
Int_t fSelectedSector;
Int_t fSelectedPlate ;
Float_t fTimeResolution;
Float_t fpadefficiency;
Int_t fEdgeEffect;
Int_t fEdgeTails;
Float_t fHparameter;
Float_t fH2parameter;
Float_t fKparameter;
Float_t fK2parameter;
Float_t fEffCenter;
Float_t fEffBoundary;
Float_t fEff2Boundary;
Float_t fEff3Boundary;
Float_t fAddTRes;
Float_t fResCenter;
Float_t fResBoundary;
Float_t fResSlope;
Float_t fTimeWalkCenter;
Float_t fTimeWalkBoundary;
Float_t fTimeWalkSlope;
Int_t fTimeDelayFlag;
Float_t fPulseHeightSlope;
Float_t fTimeDelaySlope;
Float_t fMinimumCharge;
Float_t fChargeSmearing;
Float_t fLogChargeSmearing;
Float_t fTimeSmearing;
Int_t fAverageTimeFlag;
Float_t fAdcBin;
Float_t fAdcMean;
Float_t fAdcRms;
AliTOFcalib * fCalib;
ClassDef(AliTOFSDigitizer,5)
};
#endif // AliTOFSDIGITIZER_H