Add regional trigger container (Christian)
[u/mrichter/AliRoot.git] / ITS / AliITSCalibration.cxx
CommitLineData
fcf95fc7 1/**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3 * *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
6 * *
7 * Permission to use, copy, modify and distribute this software and its *
8 * documentation strictly for non-commercial purposes is hereby granted *
9 * without fee, provided that the above copyright notice appears in all *
10 * copies and that both the copyright notice and this permission notice *
11 * appear in the supporting documentation. The authors make no claims *
12 * about the suitability of this software for any purpose. It is *
13 * provided "as is" without express or implied warranty. *
14 **************************************************************************/
15
16
17//////////////////////////////////////////////////////
18// Calibration class for set:ITS //
19// Specific subdetector implementation is done in //
20// AliITSCalibrationSPD //
21// AliITSCalibrationSDD //
22// AliITSCalibrationSSD //
23//////////////////////////////////////////////////////
24
25#include "Riostream.h"
26#include "AliITSCalibration.h"
27
28ClassImp(AliITSCalibration)
29
30//______________________________________________________________________
31AliITSCalibration::AliITSCalibration(){
32 // Default Constructor
33
34 fdv = 0.000375; // 300 microns and 80 volts.
35 fN = 0.0;
36 fT = 300.0;
37 SetGeVToCharge();
38 fResponse = 0;
39}
40//______________________________________________________________________
41AliITSCalibration::AliITSCalibration(Double_t thickness){
42 // Default Constructor
43
44 fdv = thickness/80.0; // 80 volts.
45 fN = 0.0;
46 fT = 300.0;
47 SetGeVToCharge();
48 fResponse = 0;
49}
50//______________________________________________________________________
51AliITSCalibration::AliITSCalibration(const AliITSCalibration &ob) : TObject(ob) {
52 // Copy constructor
53 // Copies are not allowed. The method is protected to avoid misuse.
54 Error("AliITSCalibration","Copy constructor not allowed\n");
55}
56
57//______________________________________________________________________
58AliITSCalibration& AliITSCalibration::operator=(const AliITSCalibration& /* ob */){
59 // Assignment operator
60 // Assignment is not allowed. The method is protected to avoid misuse.
61 Error("= operator","Assignment operator not allowed\n");
62 return *this;
63}
64
65//______________________________________________________________________
66Double_t AliITSCalibration::MobilityElectronSiEmp() const {
67 // Computes the electron mobility in cm^2/volt-sec. Taken from SILVACO
68 // International ATLAS II, 2D Device Simulation Framework, User Manual
69 // Chapter 5 Equation 5-6. An empirical function for low-field mobiliity
70 // in silicon at different tempeatures.
71 // Inputs:
72 // none.
73 // Output:
74 // none.
75 // Return:
76 // The Mobility of electrons in Si at a give temprature and impurity
77 // concentration. [cm^2/Volt-sec]
78 const Double_t km0 = 55.24; // cm^2/Volt-sec
79 const Double_t km1 = 7.12E+08; // cm^2 (degree K)^2.3 / Volt-sec
80 const Double_t kN0 = 1.072E17; // #/cm^3
81 const Double_t kT0 = 300.; // degree K.
82 const Double_t keT0 = -2.3; // Power of Temp.
83 const Double_t keT1 = -3.8; // Power of Temp.
84 const Double_t keN = 0.73; // Power of Dopent Consentrations
85 Double_t m;
86 Double_t tT = fT,nN = fN;
87
88 if(nN<=0.0){ // Simple case.
89 if(tT==300.) return 1350.0; // From Table 5-1 at consentration 1.0E14.
90 m = km1*TMath::Power(tT,keT0);
91 return m;
92 } // if nN<=0.0
93 m = km1*TMath::Power(tT,keT0) - km0;
94 m /= 1.0 + TMath::Power(tT/kT0,keT1)*TMath::Power(nN/kN0,keN);
95 m += km0;
96 return m;
97}
98//______________________________________________________________________
99Double_t AliITSCalibration::MobilityHoleSiEmp() const {
100 // Computes the Hole mobility in cm^2/volt-sec. Taken from SILVACO
101 // International ATLAS II, 2D Device Simulation Framework, User Manual
102 // Chapter 5 Equation 5-7 An empirical function for low-field mobiliity
103 // in silicon at different tempeatures.
104 // Inputs:
105 // none.
106 // Output:
107 // none.
108 // Return:
109 // The Mobility of Hole in Si at a give temprature and impurity
110 // concentration. [cm^2/Volt-sec]
111 const Double_t km0a = 49.74; // cm^2/Volt-sec
112 const Double_t km0b = 49.70; // cm^2/Volt-sec
113 const Double_t km1 = 1.35E+08; // cm^2 (degree K)^2.3 / Volt-sec
114 const Double_t kN0 = 1.606E17; // #/cm^3
115 const Double_t kT0 = 300.; // degree K.
116 const Double_t keT0 = -2.2; // Power of Temp.
117 const Double_t keT1 = -3.7; // Power of Temp.
118 const Double_t keN = 0.70; // Power of Dopent Consentrations
119 Double_t m;
120 Double_t tT = fT,nN = fN;
121
122 if(nN<=0.0){ // Simple case.
123 if(tT==300.) return 495.0; // From Table 5-1 at consentration 1.0E14.
124 m = km1*TMath::Power(tT,keT0) + km0a-km0b;
125 return m;
126 } // if nN<=0.0
127 m = km1*TMath::Power(tT,keT0) - km0b;
128 m /= 1.0 + TMath::Power(tT/kT0,keT1)*TMath::Power(nN/kN0,keN);
129 m += km0a;
130 return m;
131}
132//______________________________________________________________________
133Double_t AliITSCalibration::DiffusionCoefficientElectron() const {
134 // Computes the Diffusion coefficient for electrons in cm^2/sec. Taken
135 // from SILVACO International ATLAS II, 2D Device Simulation Framework,
136 // User Manual Chapter 5 Equation 5-53. Einstein relations for diffusion
137 // coefficient. Note: 1 cm^2/sec = 10 microns^2/nanosec.
138 // Inputs:
139 // none.
140 // Output:
141 // none.
142 // Return:
143 // The Diffusion Coefficient of electrons in Si at a give temprature
144 // and impurity concentration. [cm^2/sec]
145 // const Double_t kb = 1.3806503E-23; // Joules/degree K
146 // const Double_t qe = 1.60217646E-19; // Coulumbs.
147 const Double_t kbqe = 8.617342312E-5; // Volt/degree K
148 Double_t m = MobilityElectronSiEmp();
149 Double_t tT = fT;
150
151 return m*kbqe*tT; // [cm^2/sec]
152}
153//______________________________________________________________________
154Double_t AliITSCalibration::DiffusionCoefficientHole() const {
155 // Computes the Diffusion coefficient for Holes in cm^2/sec. Taken
156 // from SILVACO International ATLAS II, 2D Device Simulation Framework,
157 // User Manual Chapter 5 Equation 5-53. Einstein relations for diffusion
158 // coefficient. Note: 1 cm^2/sec = 10 microns^2/nanosec.
159 // Inputs:
160 // none.
161 // Output:
162 // none.
163 // Return:
164 // The Defusion Coefficient of Hole in Si at a give temprature and
165 // impurity concentration. [cm^2/sec]
166 // and impurity concentration. [cm^2/sec]
167 // const Double_t kb = 1.3806503E-23; // Joules/degree K
168 // const Double_t qe = 1.60217646E-19; // Coulumbs.
169 const Double_t kbqe = 8.617342312E-5; // Volt/degree K
170 Double_t m = MobilityHoleSiEmp();
171 Double_t tT = fT;
172
173 return m*kbqe*tT; // [cm^2/sec]
174}
175//______________________________________________________________________
176Double_t AliITSCalibration::SpeedElectron() const {
177 // Computes the average speed for electrons in Si under the low-field
178 // approximation. [cm/sec].
179 // Inputs:
180 // none.
181 // Output:
182 // none.
183 // Return:
184 // The speed the holes are traveling at due to the low field applied.
185 // [cm/sec]
186 Double_t m = MobilityElectronSiEmp();
187
188 return m/fdv; // [cm/sec]
189}
190//______________________________________________________________________
191Double_t AliITSCalibration::SpeedHole() const {
192 // Computes the average speed for Holes in Si under the low-field
193 // approximation.[cm/sec].
194 // Inputs:
195 // none.
196 // Output:
197 // none.
198 // Return:
199 // The speed the holes are traveling at due to the low field applied.
200 // [cm/sec]
201 Double_t m = MobilityHoleSiEmp();
202
203 return m/fdv; // [cm/sec]
204}
205//______________________________________________________________________
206Double_t AliITSCalibration::SigmaDiffusion3D(Double_t l) const {
207 // Returns the Gaussian sigma^2 == <x^2+y^2+z^2> [cm^2] due to the
208 // defusion of electrons or holes through a distance l [cm] caused
209 // by an applied voltage v [volt] through a distance d [cm] in any
210 // material at a temperature T [degree K]. The sigma diffusion when
211 // expressed in terms of the distance over which the diffusion
212 // occures, l=time/speed, is independent of the mobility and therefore
213 // the properties of the material. The charge distributions is given by
214 // n = exp(-r^2/4Dt)/(4piDt)^1.5. From this <r^2> = 6Dt where D=mkT/e
215 // (m==mobility, k==Boltzman's constant, T==temparature, e==electric
216 // charge. and vel=m*v/d. consiquently sigma^2=6kTdl/ev.
217 // Inputs:
218 // Double_t l Distance the charge has to travel.
219 // Output:
220 // none.
221 // Return:
222 // The Sigma due to the diffution of electrons. [cm]
223 const Double_t kcon = 5.17040258E-04; // == 6k/e [J/col or volts]
224
225 return TMath::Sqrt(kcon*fT*fdv*l); // [cm]
226}
227//______________________________________________________________________
228Double_t AliITSCalibration::SigmaDiffusion2D(Double_t l) const {
229 // Returns the Gaussian sigma^2 == <x^2+z^2> [cm^2] due to the defusion
230 // of electrons or holes through a distance l [cm] caused by an applied
231 // voltage v [volt] through a distance d [cm] in any material at a
232 // temperature T [degree K]. The sigma diffusion when expressed in terms
233 // of the distance over which the diffusion occures, l=time/speed, is
234 // independent of the mobility and therefore the properties of the
235 // material. The charge distributions is given by
236 // n = exp(-r^2/4Dt)/(4piDt)^1.5. From this <x^2+z^2> = 4Dt where D=mkT/e
237 // (m==mobility, k==Boltzman's constant, T==temparature, e==electric
238 // charge. and vel=m*v/d. consiquently sigma^2=4kTdl/ev.
239 // Inputs:
240 // Double_t l Distance the charge has to travel.
241 // Output:
242 // none.
243 // Return:
244 // The Sigma due to the diffution of electrons. [cm]
245 const Double_t kcon = 3.446935053E-04; // == 4k/e [J/col or volts]
246
247 return TMath::Sqrt(kcon*fT*fdv*l); // [cm]
248}
249//______________________________________________________________________
250Double_t AliITSCalibration::SigmaDiffusion1D(Double_t l) const {
251 // Returns the Gaussian sigma^2 == <x^2> [cm^2] due to the defusion
252 // of electrons or holes through a distance l [cm] caused by an applied
253 // voltage v [volt] through a distance d [cm] in any material at a
254 // temperature T [degree K]. The sigma diffusion when expressed in terms
255 // of the distance over which the diffusion occures, l=time/speed, is
256 // independent of the mobility and therefore the properties of the
257 // material. The charge distributions is given by
258 // n = exp(-r^2/4Dt)/(4piDt)^1.5. From this <r^2> = 2Dt where D=mkT/e
259 // (m==mobility, k==Boltzman's constant, T==temparature, e==electric
260 // charge. and vel=m*v/d. consiquently sigma^2=2kTdl/ev.
261 // Inputs:
262 // Double_t l Distance the charge has to travel.
263 // Output:
264 // none.
265 // Return:
266 // The Sigma due to the diffution of electrons. [cm]
267 const Double_t kcon = 1.723467527E-04; // == 2k/e [J/col or volts]
268
269 return TMath::Sqrt(kcon*fT*fdv*l); // [cm]
270}
271//----------------------------------------------------------------------
272Double_t AliITSCalibration::DepletedRegionThicknessA(Double_t dopCons,
273 Double_t voltage,
274 Double_t elecCharge,
275 Double_t voltBuiltIn)const{
276 // Computes the thickness of the depleted region in Si due to the
277 // application of an external bias voltage. From the Particle Data
278 // Book, 28.8 Silicon semiconductor detectors equation 28.19 (2004)
279 // Physics Letters B "Review of Particle Physics" Volume 592, Issue 1-4
280 // July 15 2004, ISSN 0370-2693 page 263. First equation.
281 // Inputs:
282 // Double_t dopCons "N" doping concentration
283 // Double_t voltage "V" external bias voltage
284 // Double_t elecCharge "e" electronic charge
285 // Double_t voltBuiltIn=0.5 "V_bi" "built-in" Voltage (~0.5V for
286 // resistivities typically used in detectors)
287 // Output:
288 // none.
289 // Return:
290 // The thickness of the depleted region
291
292 return TMath::Sqrt(2.0*(voltage+voltBuiltIn)/(dopCons*elecCharge));
293}
294//----------------------------------------------------------------------
295Double_t AliITSCalibration::DepletedRegionThicknessB(Double_t resist,
296 Double_t voltage,
297 Double_t mobility,
298 Double_t voltBuiltIn,
299 Double_t dielConst)const{
300 // Computes the thickness of the depleted region in Si due to the
301 // application of an external bias voltage. From the Particle Data
302 // Book, 28.8 Silicon semiconductor detectors equation 28.19 (2004)
303 // Physics Letters B "Review of Particle Physics" Volume 592, Issue 1-4
304 // July 15 2004, ISSN 0370-2693 page 263. Second Equation.
305 // Inputs:
306 // Double_t resist "rho" resistivity (typically 1-10 kOhm cm)
307 // Double_t voltage "V" external bias voltage
308 // Double_t mobility "mu" charge carrier mobility
309 // (electons 1350, holes 450 cm^2/V/s)
310 // Double_t voltBuiltIn=0.5 "V_bi" "built-in" Voltage (~0.5V for
311 // resistivities typically used in detectors)
312 // Double_t dielConst=1.E-12 "epsilon" dielectric constant = 11.9 *
313 // (permittivity of free space) or ~ 1 pF/cm
314 // Output:
315 // none.
316 // Return:
317 // The thickness of the depleted region
318
319 return TMath::Sqrt(2.8*resist*mobility*dielConst*(voltage+voltBuiltIn));
320}
321//----------------------------------------------------------------------
322Double_t AliITSCalibration::ReverseBiasCurrent(Double_t temp,
323 Double_t revBiasCurT1,
324 Double_t tempT1,
325 Double_t energy)const{
326 // Computes the temperature dependance of the reverse bias current
327 // of Si detectors. From the Particle Data
328 // Book, 28.8 Silicon semiconductor detectors equation 28.21 (2004)
329 // Physics Letters B "Review of Particle Physics" Volume 592, Issue 1-4
330 // July 15 2004, ISSN 0370-2693 page 263.
331 // Inputs:
332 // Double_t temp The temperature at which the current is wanted
333 // Double_t revBiasCurT1 The reference bias current at temp T1
334 // Double_t tempT1 The temperature correstponding to revBiasCurT1
335 // Double_t energy=1.2 Some energy [eV]
336 // Output:
337 // none.
338 // Return:
339 // The reverse bias current at the tempeature temp.
340 const Double_t kBoltz = 8.617343E-5; //[eV/K]
341
342 return revBiasCurT1*(temp*temp/(tempT1*tempT1))*
343 TMath::Exp(-0.5*energy*(tempT1-temp)/(kBoltz*tempT1*temp));
344}
345//----------------------------------------------------------------------
346void AliITSCalibration::Print(ostream *os) const {
347 // Standard output format for this class.
348 // Inputs:
349 *os << fdv << " " << fN << " " << fT << " ";
350 *os << fGeVcharge;
351 // printf("%-10.6e %-10.6e %-10.6e %-10.6e \n",fdv,fN,fT,fGeVcharge);
352 return;
353}
354//----------------------------------------------------------------------
355void AliITSCalibration::Read(istream *is) {
356 // Standard input format for this class.
357 // Inputs:
358 // ostream *is Pointer to the output stream
359 // Outputs:
360 // none:
361 // Return:
362 // none.
363
364 *is >> fdv >> fN >> fT >> fGeVcharge;
365 return;
366}
367//----------------------------------------------------------------------
368
369ostream &operator<<(ostream &os,AliITSCalibration &p){
370 // Standard output streaming function.
371 // Inputs:
372 // ostream *os Pointer to the output stream
373 // Outputs:
374 // none:
375 // Return:
376 // none.
377
378 p.Print(&os);
379 return os;
380}
381
382//----------------------------------------------------------------------
383istream &operator>>(istream &is,AliITSCalibration &r){
384 // Standard input streaming function.
385 // Inputs:
386 // ostream *os Pointer to the output stream
387 // Outputs:
388 // none:
389 // Return:
390 // none.
391
392 r.Read(&is);
393 return is;
394}
395//----------------------------------------------------------------------