]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - VZERO/AliVZERODigitizer.h
Complete reshuffling of the digitization code. Now VZERO has operational direct Hits...
[u/mrichter/AliRoot.git] / VZERO / AliVZERODigitizer.h
index 31126befc017a571f9ea3ddd0051447b1904aa62..5ed9fc7f72b7ffdd83cbeca91bfa8496efecbd06 100644 (file)
 
 #include "AliDigitizer.h"
 
+#include "AliVZEROConst.h"
+
 class TClonesArray;
+class TF1;
 class AliRunDigitizer;
-
+class AliCDBManager;
+class AliCDBStorage;
+class AliVZEROCalibData;
+class AliVZERO;
 
 class AliVZERODigitizer: public AliDigitizer {
 
-public:
+ public:
 
-  AliVZERODigitizer() ;                       // constructor
-  AliVZERODigitizer(AliRunDigitizer *manager);// constructor
-  virtual ~AliVZERODigitizer() ;              // destructor
+   enum DigiTask_t { 
+     kHits2Digits, 
+     kHits2SDigits
+   };
   
-  virtual Bool_t Init();
-  virtual void   Exec(Option_t* option=0);
+   AliVZERODigitizer() ;                       // default constructor
+   AliVZERODigitizer(AliVZERO *vzero, DigiTask_t task);         // constructor
+   AliVZERODigitizer(AliRunDigitizer *manager); // constructor
+   virtual ~AliVZERODigitizer() ;              // destructor
+
+   virtual Bool_t Init();
+   virtual void   Exec(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();
+                                               
+   AliVZEROCalibData *GetCalibData() const;
 
-  void AddDigit(Int_t cellnumber, Int_t adc, Int_t time);
-  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);
 
+   Int_t  Cell2Pmt(Int_t cell) const;
+
+ protected:
+   AliVZEROCalibData *fCalibData;  //! calibration data
  private:
-  AliVZERODigitizer(const AliVZERODigitizer& digitizer): 
-    AliDigitizer(digitizer)
-    {Fatal("AliVZERODigitizer", "copy constructor not implemented");}
-  AliVZERODigitizer& operator = (const AliVZERODigitizer& /*digitizer*/) 
-    {Fatal("operator=", "assignment operator not implemented"); return *this;}
+   AliVZERODigitizer(const AliVZERODigitizer& /*digitizer*/); 
+      
+   AliVZERODigitizer& operator = (const AliVZERODigitizer& /*digitizer*/); 
   
-  Float_t fPhotoCathodeEfficiency; // Photocathode efficiency
-  Float_t fPMVoltage ;             // Photomultiplier voltage
-  Float_t fPMGain;                 // Photomultiplier gain
+   Float_t  fPhotoCathodeEfficiency; // Photocathode efficiency
+
+   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[64][kNClocks];      //! Container for ADC samples
+   Float_t  fLeadingTime[64];        //! Leading time container
+   Float_t  fTimeWidth[64];          //! Time width container
+   Float_t  fAdcPedestal[64][2];     //! Pedestals, one per integrator
+   Float_t  fAdcSigma[64][2];        //! Sigma of pedestals
+   Float_t  fPmGain[64];             //! PMT gains
+   Int_t    fNBins[64];              //! Number of bins in fTime container
+   Int_t    fNBinsLT[64];            //! Number of bins in fTime container (match window only)
+   Float_t  fBinSize[64];            //! Bin size in fTime container
+   Float_t  fHptdcOffset[64];        //! HPTDC time offsets channel by channel
+
+   Float_t *fTime[64];               //! Main container used in digitization
+   Int_t    fLabels[64][3];          //! Container for MC labels
+   Bool_t   fEvenOrOdd;              //! Choise of integrator in central ADC sample
 
-  Int_t   fNdigits;               //! Number of digits
-  TClonesArray *fDigits;          //! List of digits
+   DigiTask_t fTask;                 //! The task (to be) executed by the digitizer
+   AliVZERO  *fVZERO;                //! Pointer to AliDetector object
 
-  ClassDef(AliVZERODigitizer,2)   // digitizer for VZERO
+   ClassDef(AliVZERODigitizer,6)     // digitizer for VZERO
 
 };