#ifndef ALITRDDIGITIZER_H
#define ALITRDDIGITIZER_H
#include "AliDigitizer.h"
class TFile;
class TF1;
class AliDigitizationInput;
class AliRunLoader;
class AliTRD;
class AliTRDdigitsManager;
class AliTRDgeometry;
class AliTRDarraySignal;
class AliTRDarrayADC;
class AliTRDmcmSim;
class AliTRDdigitizer : public AliDigitizer {
public:
AliTRDdigitizer();
AliTRDdigitizer(const Text_t *name, const Text_t *title);
AliTRDdigitizer(AliDigitizationInput* digInput, const Text_t *name, const Text_t *title);
AliTRDdigitizer(AliDigitizationInput* digInput);
AliTRDdigitizer(const AliTRDdigitizer &d);
virtual ~AliTRDdigitizer();
AliTRDdigitizer &operator=(const AliTRDdigitizer &d);
virtual void Copy(TObject &d) const;
Bool_t InitDetector();
void InitOutput(Int_t iEvent);
virtual void Digitize(const Option_t * option = 0);
virtual Bool_t Open(const Char_t *file, Int_t nEvent = 0);
virtual Bool_t Open(AliRunLoader * const runLoader, Int_t nEvent = 0);
virtual Bool_t MakeBranch(TTree *tree) const;
virtual Bool_t WriteDigits() const;
virtual void AddSDigitsManager(AliTRDdigitsManager *manager);
virtual void DeleteSDigitsManager();
virtual Bool_t MakeDigits();
Bool_t SortHits(Float_t **hits, Int_t *nhit);
Bool_t ConvertHits(Int_t det, const Float_t * const hits, Int_t nhit, AliTRDarraySignal *signals);
Bool_t ConvertSignals(Int_t det, AliTRDarraySignal *signals);
Bool_t Digits2SDigits(AliTRDdigitsManager * const manDig, AliTRDdigitsManager * const manSDig);
Bool_t SDigits2Digits();
Bool_t MergeSDigits();
Bool_t ConvertSDigits();
Bool_t Signal2ADC(Int_t det, AliTRDarraySignal *signals);
Bool_t Signal2SDigits(Int_t det, AliTRDarraySignal *signals);
Bool_t CopyDictionary(Int_t det);
void CompressOutputArrays(Int_t det);
void SetCompress(Int_t c = 1) { fCompress = c; }
void SetSDigits(Int_t v = 1) { fSDigits = v; }
void SetEvent(Int_t v = 0) { fEvent = v; }
void SetManager(AliTRDdigitsManager * const man) { fDigitsManager = man; }
void SetGeometry(AliTRDgeometry * const geo) { fGeo = geo; }
void SetMergeSignalOnly(Bool_t m = kTRUE) { fMergeSignalOnly = m; }
AliTRDdigitsManager *Digits() const { return fDigitsManager; }
Bool_t GetCompress() const { return fCompress; }
Bool_t GetSDigits() const { return fSDigits; }
Int_t Diffusion(Float_t vdrift, Double_t absdriftlength, Double_t exbvalue
, Double_t &lRow, Double_t &lCol, Double_t &lTime);
void RunDigitalProcessing(Int_t det = 0);
protected:
AliRunLoader *fRunLoader;
AliTRDdigitsManager *fDigitsManager;
AliTRDdigitsManager *fSDigitsManager;
TList *fSDigitsManagerList;
AliTRD *fTRD;
AliTRDgeometry *fGeo;
AliTRDmcmSim *fMcmSim;
Int_t fEvent;
Int_t *fMasks;
Bool_t fCompress;
Bool_t fSDigits;
Bool_t fMergeSignalOnly;
ClassDef(AliTRDdigitizer,20)
};
#endif