#ifndef ALIZDCDIGITIZER_H
#define ALIZDCDIGITIZER_H
#include "AliDigitizer.h"
#include "AliCDBManager.h"
#include "AliCDBStorage.h"
#include "AliZDCPedestals.h"
class TFile;
class AliDigitizationInput;
class AliZDC;
class AliZDCHit;
class AliZDCDigit;
class AliZDCDigitizer: public AliDigitizer {
public:
AliZDCDigitizer();
AliZDCDigitizer(AliDigitizationInput* digInput);
virtual ~AliZDCDigitizer();
virtual Bool_t Init();
virtual void Digitize(Option_t* option=0);
void SetPMGain(Int_t det, Int_t pmDet, Int_t pmGain)
{fPMGain[det][pmDet] = pmGain;}
Float_t GetPMGain(Int_t det, Int_t pmDet) const
{return fPMGain[det][pmDet];}
void SetADCRes(Int_t *adcRes) {for (Int_t i=0;i<2;i++) fADCRes[i] = adcRes[i];}
Float_t GetADCRes(Int_t i) const {return fADCRes[i];}
void SetCalibrationOn() {fIsCalibration=1;}
AliCDBStorage *SetStorage(const char* uri);
AliZDCPedestals *GetPedData() const;
void SetSpectators2Track() {fSpectators2Track=kTRUE;}
void SetBeamEnergy(Float_t beamEnergy) {fBeamEnergy = beamEnergy;}
void SetpAsystem() {fIspASystem=kTRUE;}
void SetRELDISGenerator() {fIsRELDISgen=kTRUE;}
void SpectatorSignal(Int_t SpecType, Int_t numEvents, Float_t pm[3][5]);
private:
AliZDCDigitizer(const AliZDCDigitizer&);
AliZDCDigitizer& operator=(const AliZDCDigitizer&);
void CalculatePMTGains();
void ReadPMTGains();
void Fragmentation(Float_t impPar, Int_t specN, Int_t specP,
Int_t &freeSpecN, Int_t &freeSpecP) const;
Int_t Phe2ADCch(Int_t Detector, Int_t Quadrant, Float_t Light,
Int_t Res) const;
Int_t Pedestal(Int_t Detector, Int_t Quadrant, Int_t Res) const;
Float_t fPMGain[5][5];
Float_t fADCRes[2];
Int_t fIsCalibration;
Bool_t fIsSignalInADCGate;
Float_t fFracLostSignal;
AliZDCPedestals *fPedData;
Bool_t fSpectators2Track;
Float_t fBeamEnergy;
TString fBeamType;
Bool_t fIspASystem;
Bool_t fIsRELDISgen;
TFile *fSpectatorData;
ClassDef(AliZDCDigitizer, 15)
};
#endif