#ifndef ALIADDigitizer_H
#define ALIADDigitizer_H
#include "AliDigitizer.h"
#include "AliADConst.h"
class TClonesArray;
class TF1;
class AliDigitizationInput;
class AliCDBManager;
class AliCDBStorage;
class AliADCalibData;
class AliAD;
class AliADDigitizer: public AliDigitizer {
public:
enum DigiTask_t {
kHits2Digits,
kHits2SDigits
};
AliADDigitizer() ;
AliADDigitizer(AliAD *AD, DigiTask_t task);
AliADDigitizer(AliDigitizationInput* digInput);
virtual ~AliADDigitizer() ;
virtual Bool_t Init();
virtual void Digitize(Option_t* option=0);
void DigitizeHits();
void DigitizeSDigits();
void WriteDigits(AliLoader *loader);
void WriteSDigits(AliLoader *loader);
void ReadSDigits();
void AddDigit(Int_t pmnumber, Float_t time, Float_t width, Bool_t integrator, Short_t *chargeADC, Int_t *labels);
void AddSDigit(Int_t pmnumber, Int_t nbins, Float_t *charges, Int_t *labels);
TClonesArray* DigitsArray();
TClonesArray* SDigitsArray();
void ResetDigits();
AliADCalibData *GetCalibData() const;
TF1* GetSignalShape() const { return fSignalShape; }
TF1* GetPMResponse() const { return fPMResponse; }
TF1* GetSinglePhESpectrum() const { return fSinglePhESpectrum; }
double SignalShape(double *x, double *par);
double PMResponse(double *x, double *par);
double SinglePhESpectrum(double *x, double *par);
protected:
AliADCalibData *fCalibData;
private:
AliADDigitizer(const AliADDigitizer& );
AliADDigitizer& operator = (const AliADDigitizer& );
Int_t fNdigits;
TClonesArray *fDigits;
TF1* fSignalShape;
TF1* fPMResponse;
TF1* fSinglePhESpectrum;
Float_t fAdc[16][kNClocks];
Float_t fLeadingTime[16];
Float_t fTimeWidth[16];
Float_t fAdcPedestal[16][2];
Float_t fAdcSigma[16][2];
Float_t fPmGain[16];
Int_t fNBins[16];
Int_t fNBinsLT[16];
Float_t fBinSize[16];
Float_t fHptdcOffset[16];
Float_t fClockOffset[16];
Float_t *fTime[16];
Int_t fLabels[16][3];
Bool_t fEvenOrOdd;
DigiTask_t fTask;
AliAD *fAD;
ClassDef(AliADDigitizer,1)
};
#endif // AliADDigitizer_H