6b2d173259c22360ca6cd8970731aa6f82ad34ff
[u/mrichter/AliRoot.git] / TRD / AliTRDSimParam.h
1 #ifndef ALITRDSIMPARAM_H
2 #define ALITRDSIMPARAM_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 ////////////////////////////////////////////////////////////////////////////
9 //                                                                        //
10 // Class containing constant simulation parameters                        //
11 //                                                                        //
12 ////////////////////////////////////////////////////////////////////////////
13
14 #include "TObject.h"
15
16 class AliTRDSimParam : public TObject {
17   
18  public:
19   
20           enum { kNplan =   6
21                , kNcham =   5
22                , kNsect =  18
23                , kNdet  = 540 };
24
25   static  AliTRDSimParam *Instance();
26   static  void     Terminate();
27   
28   AliTRDSimParam(const AliTRDSimParam &p);   
29   AliTRDSimParam &operator=(const AliTRDSimParam &p); 
30
31   virtual void     Copy(TObject &p) const;
32   
33           void     SetGasGain(Float_t gasgain)               { fGasGain         = gasgain;         }
34           void     SetNoise(Float_t noise)                   { fNoise           = noise;           }
35           void     SetChipGain(Float_t chipgain)             { fChipGain        = chipgain;        }
36           void     SetADCoutRange(Float_t range)             { fADCoutRange     = range;           }
37           void     SetADCinRange(Float_t range)              { fADCinRange      = range;           }
38           void     SetADCthreshold(Int_t thresh)             { fADCthreshold    = thresh;          }
39           void     SetADCbaseline(Int_t basel)               { fADCbaseline     = basel;           }   
40           void     SetDiffusion(Int_t diffOn = 1)            { fDiffusionOn     = diffOn;          }
41           void     SetElAttach(Int_t elOn = 1)               { fElAttachOn      = elOn;            }
42           void     SetElAttachProp(Float_t prop)             { fElAttachProp    = prop;            }
43           void     SetTimeResponse(Int_t trfOn = 1)          { fTRFOn           = trfOn; ReInit(); }  
44           void     SetCrossTalk(Int_t ctOn = 1)              { fCTOn            = ctOn; ReInit();  }
45           void     SetPadCoupling(Float_t v)                 { fPadCoupling     = v;               }
46           void     SetTimeCoupling(Float_t v)                { fTimeCoupling    = v;               }
47           void     SetAnodeWireOffset(Float_t offset = 0.25) { fAnodeWireOffset = offset;          }
48           void     SetTimeStruct(Bool_t tsOn = 1)            { fTimeStructOn    = tsOn;            }
49           void     SetPadResponse(Int_t prfOn = 1)           { fPRFOn           = prfOn;           }
50     
51           Float_t  GetGasGain() const                        { return fGasGain;                    }
52           Float_t  GetNoise() const                          { return fNoise;                      }
53           Float_t  GetChipGain() const                       { return fChipGain;                   }
54           Float_t  GetADCoutRange() const                    { return fADCoutRange;                }
55           Float_t  GetADCinRange() const                     { return fADCinRange;                 }
56           Int_t    GetADCthreshold() const                   { return fADCthreshold;               }
57           Int_t    GetADCbaseline() const                    { return fADCbaseline;                }
58           Float_t  GetTRFlo() const                          { return fTRFlo;                      }
59           Float_t  GetTRFhi() const                          { return fTRFhi;                      }
60           Float_t  GetPadCoupling() const                    { return fPadCoupling;                }
61           Float_t  GetTimeCoupling() const                   { return fTimeCoupling;               }
62           Float_t  GetAnodeWireOffset() const                { return fAnodeWireOffset;            }
63
64           Bool_t   DiffusionOn() const                       { return fDiffusionOn;                }
65           Bool_t   ElAttachOn() const                        { return fElAttachOn;                 } 
66           Float_t  GetElAttachProp() const                   { return fElAttachProp;               }
67           Bool_t   TRFOn() const                             { return fTRFOn;                      }
68           Bool_t   CTOn() const                              { return fCTOn;                       }
69           Bool_t   TimeStructOn() const                      { return fTimeStructOn;               }
70           Bool_t   PRFOn() const                             { return fPRFOn;                      }
71
72           Double_t TimeResponse(Double_t time) const;  
73           Double_t CrossTalk(Double_t time) const; 
74   
75 protected:
76
77   static AliTRDSimParam* fgInstance;  //  Instance of this class (singleton implementation)
78   static  Bool_t   fgTerminated;      //  Defines if this class has already been terminated and
79                                       //  therefore does not return instances in GetInstance anymore
80   
81           // Digitization parameter
82           Float_t  fGasGain;          //  Gas gain
83           Float_t  fNoise;            //  Electronics noise
84           Float_t  fChipGain;         //  Electronics gain
85   
86           Float_t  fADCoutRange;      //  ADC output range (number of channels)
87           Float_t  fADCinRange;       //  ADC input range (input charge)
88           Int_t    fADCthreshold;     //  ADC threshold in ADC channel
89           Int_t    fADCbaseline;      //  ADC baseline in ADC chann
90   
91           Int_t    fDiffusionOn;      //  Switch for the diffusion
92   
93           Int_t    fElAttachOn;       //  Switch for the electron attachment
94           Float_t  fElAttachProp;     //  Propability for electron attachment (for 1m)
95   
96           Int_t    fTRFOn;            //  Switch for the time response
97           Float_t *fTRFsmp;           //! Integrated time response
98           Int_t    fTRFbin;           //  Number of bins for the TRF
99           Float_t  fTRFlo;            //  Lower boundary of the TRF
100           Float_t  fTRFhi;            //  Higher boundary of the TRF
101           Float_t  fTRFwid;           //  Bin width of the integrated TRF
102   
103           Int_t    fCTOn;             //  Switch for cross talk
104           Float_t *fCTsmp;            //! Integrated cross talk
105   
106           Float_t  fAnodeWireOffset;  //  Distance of first anode wire from pad edge
107           Float_t  fPadCoupling;      //  Pad coupling factor
108           Float_t  fTimeCoupling;     //  Time coupling factor (image charge of moving ions)
109           Int_t    fTimeStructOn;     //  Switch for cell time structure
110   
111           Int_t    fPRFOn;            //  Switch for the pad response
112   
113  private:
114
115   // This is a singleton, constructor is private!  
116   AliTRDSimParam();
117   virtual ~AliTRDSimParam();
118
119           void Init();
120           void ReInit();
121           void SampleTRF();
122   
123   ClassDef(AliTRDSimParam,1)          // The TRD simulation parameters
124
125 };
126
127 #endif