// --- AliRoot header files ---
#include "AliDigitizer.h"
-
-// #include "AliADConst.h"
+#include "AliADConst.h"
class TClonesArray;
+class TF1;
class AliDigitizationInput;
class AliCDBManager;
class AliCDBStorage;
+class AliADCalibData;
+class AliAD;
class AliADDigitizer: public AliDigitizer {
public:
- AliADDigitizer() ; // default constructor
- AliADDigitizer(AliDigitizationInput* digInput); // constructor
- virtual ~AliADDigitizer() ; // destructor
-
- virtual Bool_t Init();
- virtual void Digitize(Option_t* option=0);
- void AddDigit(Int_t* track, Int_t module, Float_t cell);
- void AddDigit(Int_t* modul, Float_t cell);
-
+ enum DigiTask_t {
+ kHits2Digits,
+ kHits2SDigits
+ };
+
+ AliADDigitizer() ; // default constructor
+ AliADDigitizer(AliAD *AD, DigiTask_t task); // constructor
+ AliADDigitizer(AliDigitizationInput* digInput); // constructor
+ virtual ~AliADDigitizer() ; // destructor
+
+ 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;
- void ResetDigit();
-
+ 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:
-private:
+ AliADCalibData *fCalibData; //! calibration data
- AliADDigitizer(const AliADDigitizer& /*digitizer*/);
- AliADDigitizer& operator = (const AliADDigitizer& /*digitizer*/);
-
+ private:
+
+ AliADDigitizer(const AliADDigitizer& /*digitizer*/);
+
+ AliADDigitizer& operator = (const AliADDigitizer& /*digitizer*/);
+
+ Int_t fNdigits; //! Number of digits
+ TClonesArray *fDigits; //! List of digits
+
+ TF1* fSignalShape; // function which describes the PMT signal shape
+ TF1* fPMResponse; // function which describes the PM time response
+ TF1* fSinglePhESpectrum; // function which describes the single ph.e. PM response
+
+ Float_t fAdc[16][kNClocks]; //! Container for ADC samples
+ Float_t fLeadingTime[16]; //! Leading time container
+ Float_t fTimeWidth[16]; //! Time width container
+ Float_t fAdcPedestal[16][2]; //! Pedestals, one per integrator
+ Float_t fAdcSigma[16][2]; //! Sigma of pedestals
+ Float_t fPmGain[16]; //! PMT gains
+ Int_t fNBins[16]; //! Number of bins in fTime container
+ Int_t fNBinsLT[16]; //! Number of bins in fTime container (match window only)
+ Float_t fBinSize[16]; //! Bin size in fTime container
+ Float_t fHptdcOffset[16]; //! HPTDC time offsets channel by channel
+ Float_t fClockOffset[16]; //! Clock offsets channel by channel
- Int_t fNdigits; //! Number of digits
- TClonesArray* fDigits; //! List of digits
+ Float_t *fTime[16]; //! Main container used in digitization
+ Int_t fLabels[16][3]; //! Container for MC labels
+ Bool_t fEvenOrOdd; //! Choise of integrator in central ADC sample
+ DigiTask_t fTask; //! The task (to be) executed by the digitizer
+ AliAD *fAD; //! Pointer to AliDetector object
ClassDef(AliADDigitizer,1) // digitizer for AD
};