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