9823b830ca11f27c7a8bf9f34a79f80412d52db0
[u/mrichter/AliRoot.git] / TRD / AliTRDdigitizer.h
1 #ifndef TRDdigitizer_h
2 #define TRDdigitizer_h
3 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4  * See cxx source for full Copyright notice                               */
5
6 /* $Id$ */
7
8 #include <TNamed.h>
9 #include <TFile.h>
10 #include <TF1.h>
11
12 #include "AliHit.h" 
13 #include "AliTRDdigit.h"
14 #include "AliTRDconst.h"
15 #include "AliTRDgeometry.h"
16
17 class AliTRDdigitsManager;
18
19 ///////////////////////////////////////////////////////
20 //  Produces digits from the hits information        //
21 ///////////////////////////////////////////////////////
22
23 class AliTRDdigitizer : public TNamed {
24
25  public:
26
27   AliTRDdigitizer();
28   AliTRDdigitizer(const Text_t* name, const Text_t* title);
29   ~AliTRDdigitizer();
30
31   virtual void         Init();
32   virtual Bool_t       Open(const Char_t *name, Int_t nEvent = 0);
33   virtual Bool_t       MakeDigits();
34   virtual Bool_t       WriteDigits();
35
36   virtual void         SetGasGain(Float_t gasgain)     { fGasGain       = gasgain;  };
37   virtual void         SetNoise(Float_t noise)         { fNoise         = noise;    };
38   virtual void         SetChipGain(Float_t chipgain)   { fChipGain      = chipgain; };
39   virtual void         SetADCoutRange(Float_t range)   { fADCoutRange   = range;    };
40   virtual void         SetADCinRange(Float_t range)    { fADCinRange    = range;    };
41   virtual void         SetADCthreshold(Int_t thresh)   { fADCthreshold  = thresh;   };
42   virtual void         SetDiffusion(Int_t diff_on = 1) { fDiffusionOn   = diff_on;  };
43   virtual void         SetDiffusionT(Float_t diff)     { fDiffusionT    = diff;     };
44   virtual void         SetDiffusionL(Float_t diff)     { fDiffusionL    = diff;     };
45   virtual void         SetElAttach(Int_t el_on = 1)    { fElAttachOn    = el_on;    };
46   virtual void         SetElAttachProp(Float_t prop)   { fElAttachProp  = prop;     };
47   virtual void         SetExB(Int_t exb_on = 1)        { fExBOn         = exb_on;   };
48   virtual void         SetLorentzAngle(Float_t angle)  { fLorentzAngle  = angle;    };
49   virtual void         SetPadResponse(TF1 *PRF)        { if (fPRF) delete fPRF;
50                                                          fPRF           = PRF;      };
51
52   AliTRDdigitsManager *Digits()                        { return fDigits;        };
53
54   virtual Float_t      GetGasGain()                    { return fGasGain;       };
55   virtual Float_t      GetNoise()                      { return fNoise;         };
56   virtual Float_t      GetChipGain()                   { return fChipGain;      };
57   virtual Float_t      GetADCoutRange()                { return fADCoutRange;   };
58   virtual Float_t      GetADCinRange()                 { return fADCinRange;    };
59   virtual Int_t        GetADCthreshold()               { return fADCthreshold;  };
60   virtual Float_t      GetDiffusionT()                 { return fDiffusionT;    };
61   virtual Float_t      GetDiffusionL()                 { return fDiffusionL;    };
62   virtual Float_t      GetElAttachProp()               { return fElAttachProp;  };
63   virtual Float_t      GetLorentzAngle()               { return fLorentzAngle;  };
64   virtual TF1         *GetPadResponse()                { return fPRF;           };
65
66  protected:
67
68   TFile               *fInputFile;       //! ALIROOT-filename
69   AliTRDdigitsManager *fDigits;          //! TRD digits manager
70   AliTRD              *fTRD;             //! TRD detector class
71   AliTRDgeometry      *fGeo;             //! TRD geometry
72   
73   Int_t                fEvent;           //! Event number
74
75   Float_t              fGasGain;         // Gas gain
76   Float_t              fNoise;           // Electronics noise
77   Float_t              fChipGain;        // Electronics gain
78   Float_t              fADCoutRange;     // ADC output range (number of channels)
79   Float_t              fADCinRange;      // ADC input range (input charge)
80   Int_t                fADCthreshold;    // ADC threshold in ADC channel
81   Int_t                fDiffusionOn;     // Switch for the diffusion
82   Float_t              fDiffusionT;      // Diffusion in transverse direction
83   Float_t              fDiffusionL;      // Diffusion in longitudinal direction
84   Int_t                fElAttachOn;      // Switch for the electron attachment
85   Float_t              fElAttachProp;    // Propability for electron attachment (for 1m)
86   Int_t                fExBOn;           // Switch for the ExB effects
87   Float_t              fLorentzAngle;    // Lorentz angle 
88   Float_t              fLorentzFactor;   // Factor due to Lorentz force
89   TF1                 *fPRF;             // Pad response function
90
91  private:
92
93   virtual Int_t       Diffusion(Float_t driftlength, Float_t *xyz);
94   virtual Int_t       ExB(Float_t driftlength, Float_t *xyz);  
95   
96   ClassDef(AliTRDdigitizer,1)            // Produces TRD-Digits
97
98 };
99
100 #endif