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