aef4863f554706a28b1d8343e7c31dd888c6d2b4
[u/mrichter/AliRoot.git] / TRD / AliTRDdigitizer.h
1 #ifndef ALITRDDIGITIZER_H
2 #define ALITRDDIGITIZER_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
10 // Time response function of the preamp
11 Double_t TRFlandau(Double_t *x, Double_t *par);
12
13 class TFile;
14 class TF1;
15
16 class AliTRD;
17 class AliTRDdigitsManager;
18 class AliTRDgeometry;
19
20 ///////////////////////////////////////////////////////
21 //  Produces digits from the hits information        //
22 ///////////////////////////////////////////////////////
23
24 class AliTRDdigitizer : public TNamed {
25
26  public:
27
28   AliTRDdigitizer();
29   AliTRDdigitizer(const Text_t* name, const Text_t* title);
30   AliTRDdigitizer(const AliTRDdigitizer &d);
31   virtual ~AliTRDdigitizer();
32   AliTRDdigitizer &operator=(const AliTRDdigitizer &d);
33
34   virtual void         Copy(TObject &d);
35   virtual void         Init();
36   virtual Bool_t       Open(const Char_t *name, Int_t nEvent = 0);
37   virtual Bool_t       MakeDigits();
38   virtual Bool_t       WriteDigits();
39   virtual Bool_t       InitDetector();
40
41   virtual void         SetGasGain(Float_t gasgain)      { fGasGain       = gasgain;  };
42   virtual void         SetNoise(Float_t noise)          { fNoise         = noise;    };
43   virtual void         SetChipGain(Float_t chipgain)    { fChipGain      = chipgain; };
44   virtual void         SetADCoutRange(Float_t range)    { fADCoutRange   = range;    };
45   virtual void         SetADCinRange(Float_t range)     { fADCinRange    = range;    };
46   virtual void         SetADCthreshold(Int_t thresh)    { fADCthreshold  = thresh;   };
47   virtual void         SetDiffusion(Int_t diffOn = 1)   { fDiffusionOn   = diffOn;   };
48   virtual void         SetDiffusionT(Float_t diff)      { fDiffusionT    = diff;     };
49   virtual void         SetDiffusionL(Float_t diff)      { fDiffusionL    = diff;     };
50   virtual void         SetElAttach(Int_t elOn = 1)      { fElAttachOn    = elOn;     };
51   virtual void         SetElAttachProp(Float_t prop)    { fElAttachProp  = prop;     };
52   virtual void         SetExB(Int_t exbOn = 1)          { fExBOn         = exbOn;    };
53   virtual void         SetOmegaTau(Float_t ot)          { fOmegaTau      = ot;       };
54   virtual void         SetPadResponse(Int_t prfOn = 1)  { fPRFOn         = prfOn;    };
55   virtual void         SetPRF(TF1 *prf);
56   virtual void         SetTimeResponse(Int_t trfOn = 1) { fTRFOn         = trfOn;    };
57   virtual void         SetTRF(TF1 *trf);
58   virtual void         SetDriftVelocity(Float_t v)      { fDriftVelocity = v;        };
59   virtual void         SetCompress(Int_t c = 1)         { fCompress      = c;        };
60   virtual void         SetVerbose(Int_t v = 1)          { fVerbose       = v;        };
61
62   AliTRDdigitsManager *Digits() const                   { return fDigits;            };
63
64   virtual Float_t      GetGasGain() const               { return fGasGain;           };
65   virtual Float_t      GetNoise() const                 { return fNoise;             };
66   virtual Float_t      GetChipGain() const              { return fChipGain;          };
67   virtual Float_t      GetADCoutRange() const           { return fADCoutRange;       };
68   virtual Float_t      GetADCinRange() const            { return fADCinRange;        };
69   virtual Int_t        GetADCthreshold() const          { return fADCthreshold;      };
70   virtual Float_t      GetDiffusionT() const            { return fDiffusionT;        };
71   virtual Float_t      GetDiffusionL() const            { return fDiffusionL;        };
72   virtual Float_t      GetElAttachProp() const          { return fElAttachProp;      };
73   virtual Float_t      GetOmegaTau() const              { return fOmegaTau;          };
74   virtual TF1         *GetPadResponse() const           { return fPRF;               };
75   virtual TF1         *GetTimeResponse() const          { return fTRF;               };
76   virtual Float_t      GetDriftVelocity() const         { return fDriftVelocity;     };
77   virtual Bool_t       GetCompress() const              { return fCompress;          };
78
79  protected:
80
81   TFile               *fInputFile;       //! ALIROOT-filename
82   AliTRDdigitsManager *fDigits;          //! TRD digits manager
83   AliTRD              *fTRD;             //! TRD detector class
84   AliTRDgeometry      *fGeo;             //! TRD geometry
85   
86   Int_t                fEvent;           //! Event number
87
88   Float_t              fGasGain;         // Gas gain
89   Float_t              fNoise;           // Electronics noise
90   Float_t              fChipGain;        // Electronics gain
91   Float_t              fADCoutRange;     // ADC output range (number of channels)
92   Float_t              fADCinRange;      // ADC input range (input charge)
93   Int_t                fADCthreshold;    // ADC threshold in ADC channel
94   Int_t                fDiffusionOn;     // Switch for the diffusion
95   Float_t              fDiffusionT;      // Diffusion in transverse direction
96   Float_t              fDiffusionL;      // Diffusion in longitudinal direction
97   Int_t                fElAttachOn;      // Switch for the electron attachment
98   Float_t              fElAttachProp;    // Propability for electron attachment (for 1m)
99   Int_t                fExBOn;           // Switch for the ExB effects
100   Float_t              fOmegaTau;        // Tangens of the Lorentz angle 
101   Float_t              fLorentzFactor;   // Factor due to Lorentz force
102   Int_t                fPRFOn;           // Switch for the pad response
103   TF1                 *fPRF;             // Pad response function
104   Float_t             *fPRFsmp;          //!Sampled pad response
105   Int_t                fPRFbin;          // Number of bins for the PRF
106   Float_t              fPRFlo;           // Lower boundary of the PRF
107   Float_t              fPRFhi;           // Higher boundary of the PRF
108   Float_t              fPRFwid;          // Bin width of the sampled PRF
109   Int_t                fPRFpad;          // Distance to next pad in PRF
110   Int_t                fTRFOn;           // Switch for the time response
111   TF1                 *fTRF;             // Time response function of the shaper
112   Float_t             *fTRFint;          //!Integrated time response
113   Int_t                fTRFbin;          // Number of bins for the TRF
114   Float_t              fTRFlo;           // Lower boundary of the TRF
115   Float_t              fTRFhi;           // Higher boundary of the TRF
116   Float_t              fTRFwid;          // Bin width of the integrated TRF
117   Float_t              fDriftVelocity;   // Drift velocity (cm / mus)
118   Bool_t               fCompress;        // Switch to keep only compressed data in memory
119   Int_t                fVerbose;         // Sets the verbose level
120
121  private:
122
123   virtual Int_t        Diffusion(Float_t driftlength, Float_t *xyz);
124   virtual Int_t        ExB(Float_t driftlength, Float_t *xyz);  
125   virtual Int_t        PadResponse(Float_t signal, Float_t dist, Float_t *pad);
126   virtual Float_t      TimeResponse(Float_t time);  
127   virtual Bool_t       CheckDetector(Int_t plane, Int_t chamber, Int_t sector);
128   virtual void         SamplePRF();
129   virtual void         IntegrateTRF();
130
131   ClassDef(AliTRDdigitizer,2)            // Produces TRD-Digits
132
133 };
134
135 #endif