More debug printout.
[u/mrichter/AliRoot.git] / VZERO / AliVZERODigitizer.h
1 #ifndef ALIVZERODigitizer_H
2 #define ALIVZERODigitizer_H
3 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4  * See cxx source for full Copyright notice                               */
5   
6 ///_________________________________________________________________________
7 ///
8 ///  Class for making Digits in VZERO 
9 ///_________________________________________________________________________   
10
11
12 // --- Standard library ---
13
14 // --- AliRoot header files ---
15
16 #include "AliDigitizer.h"
17
18 #include "AliVZEROConst.h"
19
20 class TClonesArray;
21 class TF1;
22 class AliDigitizationInput;
23 class AliCDBManager;
24 class AliCDBStorage;
25 class AliVZEROCalibData;
26 class AliVZERO;
27
28 class AliVZERODigitizer: public AliDigitizer {
29
30  public:
31
32    enum DigiTask_t { 
33      kHits2Digits, 
34      kHits2SDigits
35    };
36   
37    AliVZERODigitizer() ;                       // default constructor
38    AliVZERODigitizer(AliVZERO *vzero, DigiTask_t task);         // constructor
39    AliVZERODigitizer(AliDigitizationInput* digInput); // constructor
40    virtual ~AliVZERODigitizer() ;              // destructor
41
42    virtual Bool_t Init();
43    virtual void   Digitize(Option_t* option=0);
44
45    void DigitizeHits();
46    void DigitizeSDigits();
47    void WriteDigits(AliLoader *loader);
48    void WriteSDigits(AliLoader *loader);
49    void ReadSDigits();
50
51    void AddDigit(Int_t pmnumber, Float_t time, Float_t width, Bool_t integrator, Short_t *chargeADC, Int_t *labels);
52    void AddSDigit(Int_t pmnumber, Int_t nbins, Float_t *charges, Int_t *labels);
53    TClonesArray* DigitsArray(); 
54    TClonesArray* SDigitsArray(); 
55    void ResetDigits();
56                                                 
57    AliVZEROCalibData *GetCalibData() const;
58
59    TF1*   GetSignalShape() const { return fSignalShape; }
60    TF1*   GetPMResponse() const { return fPMResponse; }
61    TF1*   GetSinglePhESpectrum() const { return fSinglePhESpectrum; }
62    double SignalShape(double *x, double *par);
63    double PMResponse(double *x, double *par);
64    double SinglePhESpectrum(double *x, double *par);
65
66    Int_t  Cell2Pmt(Int_t cell) const;
67
68  protected:
69  
70    AliVZEROCalibData *fCalibData;  //! calibration data
71  
72  private:
73  
74    AliVZERODigitizer(const AliVZERODigitizer& /*digitizer*/); 
75       
76    AliVZERODigitizer& operator = (const AliVZERODigitizer& /*digitizer*/); 
77   
78    Float_t  fPhotoCathodeEfficiency; // Photocathode efficiency
79
80    Int_t    fNdigits;                //! Number of digits
81    TClonesArray *fDigits;            //! List of digits
82    
83    TF1*     fSignalShape;            // function which describes the PMT signal shape
84    TF1*     fPMResponse;             // function which describes the PM time response
85    TF1*     fSinglePhESpectrum;      // function which describes the single ph.e. PM response
86
87    Float_t  fAdc[64][kNClocks];      //! Container for ADC samples
88    Float_t  fLeadingTime[64];        //! Leading time container
89    Float_t  fTimeWidth[64];          //! Time width container
90    Float_t  fAdcPedestal[64][2];     //! Pedestals, one per integrator
91    Float_t  fAdcSigma[64][2];        //! Sigma of pedestals
92    Float_t  fPmGain[64];             //! PMT gains
93    Int_t    fNBins[64];              //! Number of bins in fTime container
94    Int_t    fNBinsLT[64];            //! Number of bins in fTime container (match window only)
95    Float_t  fBinSize[64];            //! Bin size in fTime container
96    Float_t  fHptdcOffset[64];        //! HPTDC time offsets channel by channel
97    Float_t  fClockOffset[64];        //! Clock offsets channel by channel
98
99    Float_t *fTime[64];               //! Main container used in digitization
100    Int_t    fLabels[64][3];          //! Container for MC labels
101    Bool_t   fEvenOrOdd;              //! Choise of integrator in central ADC sample
102
103    DigiTask_t fTask;                 //! The task (to be) executed by the digitizer
104    AliVZERO  *fVZERO;                //! Pointer to AliDetector object
105
106    ClassDef(AliVZERODigitizer,7)     // digitizer for VZERO
107
108 };
109
110 #endif // AliVZERODigitizer_H