#ifndef ALIADCALIBDATA_H
#define ALIADCALIBDATA_H
#include "TNamed.h"
#include "AliADConst.h"
class AliADDataDCS;
class AliADCalibData: public TNamed {
public:
AliADCalibData();
AliADCalibData(const char* name);
AliADCalibData(const AliADCalibData &calibda);
AliADCalibData& operator= (const AliADCalibData &calibda);
virtual ~AliADCalibData();
void Reset();
void FillDCSData(AliADDataDCS * data);
Float_t GetPedestal(Int_t channel) const {return fPedestal[channel];}
Float_t* GetPedestal() const {return (float*)fPedestal;}
Float_t GetSigma(Int_t channel) const {return fSigma[channel];}
Float_t* GetSigma() const {return (float*)fSigma;}
Float_t GetADCmean(Int_t channel) const {return fADCmean[channel];}
Float_t* GetADCmean() const {return (float*)fADCmean;}
Float_t GetADCsigma(Int_t channel) const {return fADCsigma[channel];}
Float_t* GetADCsigma() const {return (float*)fADCsigma;}
Float_t GetMeanHV(Int_t channel) const {return fMeanHV[channel];}
Float_t* GetMeanHV() const {return (float*)fMeanHV;}
Float_t GetWidthHV(Int_t channel) const {return fWidthHV[channel];}
Float_t* GetWidthHV() const {return (float*)fWidthHV;}
Bool_t IsChannelDead(Int_t channel) const {return fDeadChannel[channel];}
Bool_t* GetDeadMap() const {return (bool*)fDeadChannel;}
Float_t GetGain(Int_t channel);
Float_t GetTimeOffset(Int_t channel) const {return fTimeOffset[channel];}
Float_t* GetTimeOffset() const {return (float*)fTimeOffset;}
Float_t GetTimeGain(Int_t channel) const {return fTimeGain[channel];}
Float_t* GetTimeGain() const {return (float*)fTimeGain;}
Float_t* GetTimeResolution() const {return (Float_t*) fTimeResolution;};
Float_t GetTimeResolution(Int_t board ) const {return ((board>=0 && board<kNCIUBoards)?fTimeResolution[board]:0);};
Float_t* GetWidthResolution() const {return (Float_t*) fWidthResolution;};
Float_t GetWidthResolution(Int_t board ) const {return ((board>=0 && board<kNCIUBoards)?fWidthResolution[board]:0);};
const UInt_t* GetMatchWindow() const { return fMatchWindow; }
UInt_t GetMatchWindow(Int_t board) const { return ((board>=0 && board<kNCIUBoards)?fMatchWindow[board]:0); }
const UInt_t* GetSearchWindow() const { return fSearchWindow; }
UInt_t GetSearchWindow(Int_t board) const { return ((board>=0 && board<kNCIUBoards)?fSearchWindow[board]:0); }
const UInt_t* GetTriggerCountOffset() const { return fTriggerCountOffset; }
UInt_t GetTriggerCountOffset(Int_t board) const { return ((board>=0 && board<kNCIUBoards)?fTriggerCountOffset[board]:0); }
const UInt_t* GetRollOver() const { return fRollOver; }
UInt_t GetRollOver(Int_t board) const { return ((board>=0 && board<kNCIUBoards)?fRollOver[board]:0); }
Float_t GetDiscriThr(Int_t channel) const {return fDiscriThr[channel];}
Float_t* GetDiscriThr() const {return (Float_t*)fDiscriThr;}
Float_t GetCalibDiscriThr(Int_t channel, Bool_t scaled);
static Int_t GetBoardNumber(Int_t channel);
static Int_t GetFEEChannelNumber(Int_t channel);
static Int_t GetOfflineChannelNumber(Int_t board, Int_t channel);
Float_t GetLightYields(Int_t channel);
Float_t *GetPMGainsA() const { return fPMGainsA; }
Float_t *GetPMGainsB() const { return fPMGainsB; }
void SetPedestal(Float_t val, Int_t channel) {fPedestal[channel]=val;}
void SetPedestal(const Float_t* Pedestal);
void SetSigma(Float_t val, Int_t channel) {fSigma[channel]=val;}
void SetSigma(const Float_t* Sigma);
void SetADCmean(Float_t val, Int_t channel) {fADCmean[channel]=val;}
void SetADCmean(const Float_t* ADCmean);
void SetADCsigma(Float_t val, Int_t channel) {fADCsigma[channel]=val;}
void SetADCsigma(const Float_t* ADCsigma);
void SetMeanHV(Float_t val, Int_t channel) {fMeanHV[channel]=val;}
void SetMeanHV(const Float_t* MeanHV);
void SetWidthHV(Float_t val, Int_t channel) {fWidthHV[channel]=val;}
void SetWidthHV(const Float_t* WidthHV);
void SetDeadChannel(Bool_t val, Int_t channel) {fDeadChannel[channel]=val;}
void SetDeadMap(const Bool_t* deadMap);
void SetTimeOffset(Float_t val, Int_t board, Int_t channel);
void SetTimeOffset(const Float_t* TimeOffset);
void SetTimeGain(Float_t val, Int_t channel) {fTimeGain[channel]=val;}
void SetTimeGain(const Float_t* TimeGain);
void SetParameter(TString name, Int_t val);
void SetTimeResolution(UShort_t *resols);
void SetTimeResolution(UShort_t resol, Int_t board);
void SetWidthResolution(UShort_t *resols);
void SetWidthResolution(UShort_t resol, Int_t board);
void SetMatchWindow(UInt_t *windows);
void SetMatchWindow(UInt_t window, Int_t board);
void SetSearchWindow(UInt_t *windows);
void SetSearchWindow(UInt_t window, Int_t board);
void SetTriggerCountOffset(UInt_t *offsets);
void SetTriggerCountOffset(UInt_t offset, Int_t board);
void SetRollOver(UInt_t *offsets);
void SetRollOver(UInt_t offset, Int_t board);
void SetDiscriThr(Float_t thr, Int_t board, Int_t channel);
void SetDiscriThr(const Float_t* thresholds);
protected:
void InitLightYields();
void InitPMGains();
Float_t fPedestal[32];
Float_t fSigma[32];
Float_t fADCmean[32];
Float_t fADCsigma[32];
Float_t fMeanHV[16];
Float_t fWidthHV[16];
Float_t fTimeOffset[16];
Float_t fTimeGain[16];
Bool_t fDeadChannel[16];
Float_t fTimeResolution[kNCIUBoards];
Float_t fWidthResolution[kNCIUBoards];
UInt_t fMatchWindow[kNCIUBoards];
UInt_t fSearchWindow[kNCIUBoards];
UInt_t fTriggerCountOffset[kNCIUBoards];
UInt_t fRollOver[kNCIUBoards];
Float_t fDiscriThr[16];
Float_t *fLightYields;
Float_t *fPMGainsA;
Float_t *fPMGainsB;
ClassDef(AliADCalibData,1)
};
#endif