1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
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 **************************************************************************/
18 ////////////////////////////////////////////////
19 // Response class for set:ITS //
20 ////////////////////////////////////////////////
21 #include <Riostream.h>
25 #include "AliITSresponse.h"
27 ClassImp(AliITSresponse)
29 //______________________________________________________________________
30 AliITSresponse::AliITSresponse(){
31 // Default Constructor
33 fdv = 0.000375; // 300 microns and 80 volts.
38 //______________________________________________________________________
39 AliITSresponse::AliITSresponse(Double_t thickness){
40 // Default Constructor
42 fdv = thickness/80.0; // 80 volts.
47 //______________________________________________________________________
48 Double_t AliITSresponse::MobilityElectronSiEmp() const {
49 // Computes the electron mobility in cm^2/volt-sec. Taken from SILVACO
50 // International ATLAS II, 2D Device Simulation Framework, User Manual
51 // Chapter 5 Equation 5-6. An empirical function for low-field mobiliity
52 // in silicon at different tempeatures.
58 // The Mobility of electrons in Si at a give temprature and impurity
59 // concentration. [cm^2/Volt-sec]
60 const Double_t m0 = 55.24; // cm^2/Volt-sec
61 const Double_t m1 = 7.12E+08; // cm^2 (degree K)^2.3 / Volt-sec
62 const Double_t N0 = 1.072E17; // #/cm^3
63 const Double_t T0 = 300.; // degree K.
64 const Double_t eT0 = -2.3; // Power of Temp.
65 const Double_t eT1 = -3.8; // Power of Temp.
66 const Double_t eN = 0.73; // Power of Dopent Consentrations
68 Double_t T = fT,N = fN;
70 if(N<=0.0){ // Simple case.
71 if(T==300.) return 1350.0; // From Table 5-1 at consentration 1.0E14.
72 m = m1*TMath::Power(T,eT0);
75 m = m1*TMath::Power(T,eT0) - m0;
76 m /= 1.0 + TMath::Power(T/T0,eT1)*TMath::Power(N/N0,eN);
80 //______________________________________________________________________
81 Double_t AliITSresponse::MobilityHoleSiEmp() const {
82 // Computes the Hole mobility in cm^2/volt-sec. Taken from SILVACO
83 // International ATLAS II, 2D Device Simulation Framework, User Manual
84 // Chapter 5 Equation 5-7 An empirical function for low-field mobiliity
85 // in silicon at different tempeatures.
91 // The Mobility of Hole in Si at a give temprature and impurity
92 // concentration. [cm^2/Volt-sec]
93 const Double_t m0a = 49.74; // cm^2/Volt-sec
94 const Double_t m0b = 49.70; // cm^2/Volt-sec
95 const Double_t m1 = 1.35E+08; // cm^2 (degree K)^2.3 / Volt-sec
96 const Double_t N0 = 1.606E17; // #/cm^3
97 const Double_t T0 = 300.; // degree K.
98 const Double_t eT0 = -2.2; // Power of Temp.
99 const Double_t eT1 = -3.7; // Power of Temp.
100 const Double_t eN = 0.70; // Power of Dopent Consentrations
102 Double_t T = fT,N = fN;
104 if(N<=0.0){ // Simple case.
105 if(T==300.) return 495.0; // From Table 5-1 at consentration 1.0E14.
106 m = m1*TMath::Power(T,eT0) + m0a-m0b;
109 m = m1*TMath::Power(T,eT0) - m0b;
110 m /= 1.0 + TMath::Power(T/T0,eT1)*TMath::Power(N/N0,eN);
114 //______________________________________________________________________
115 Double_t AliITSresponse::DiffusionCoefficientElectron() const {
116 // Computes the Diffusion coefficient for electrons in cm^2/sec. Taken
117 // from SILVACO International ATLAS II, 2D Device Simulation Framework,
118 // User Manual Chapter 5 Equation 5-53. Einstein relations for diffusion
119 // coefficient. Note: 1 cm^2/sec = 10 microns^2/nanosec.
125 // The Diffusion Coefficient of electrons in Si at a give temprature
126 // and impurity concentration. [cm^2/sec]
127 // const Double_t kb = 1.3806503E-23; // Joules/degree K
128 // const Double_t qe = 1.60217646E-19; // Coulumbs.
129 const Double_t kbqe = 8.617342312E-5; // Volt/degree K
130 Double_t m = MobilityElectronSiEmp();
133 return m*kbqe*T; // [cm^2/sec]
135 //______________________________________________________________________
136 Double_t AliITSresponse::DiffusionCoefficientHole() const {
137 // Computes the Diffusion coefficient for Holes in cm^2/sec. Taken
138 // from SILVACO International ATLAS II, 2D Device Simulation Framework,
139 // User Manual Chapter 5 Equation 5-53. Einstein relations for diffusion
140 // coefficient. Note: 1 cm^2/sec = 10 microns^2/nanosec.
146 // The Defusion Coefficient of Hole in Si at a give temprature and
147 // impurity concentration. [cm^2/sec]
148 // and impurity concentration. [cm^2/sec]
149 // const Double_t kb = 1.3806503E-23; // Joules/degree K
150 // const Double_t qe = 1.60217646E-19; // Coulumbs.
151 const Double_t kbqe = 8.617342312E-5; // Volt/degree K
152 Double_t m = MobilityHoleSiEmp();
155 return m*kbqe*T; // [cm^2/sec]
157 //______________________________________________________________________
158 Double_t AliITSresponse::SpeedElectron() const {
159 // Computes the average speed for electrons in Si under the low-field
160 // approximation. [cm/sec].
166 // The speed the holes are traveling at due to the low field applied.
168 Double_t m = MobilityElectronSiEmp();
170 return m/fdv; // [cm/sec]
172 //______________________________________________________________________
173 Double_t AliITSresponse::SpeedHole() const {
174 // Computes the average speed for Holes in Si under the low-field
175 // approximation.[cm/sec].
181 // The speed the holes are traveling at due to the low field applied.
183 Double_t m = MobilityHoleSiEmp();
185 return m/fdv; // [cm/sec]
187 //______________________________________________________________________
188 Double_t AliITSresponse::SigmaDiffusion3D(Double_t l) const {
189 // Returns the Gaussian sigma^2 == <x^2+y^2+z^2> [cm^2] due to the
190 // defusion of electrons or holes through a distance l [cm] caused
191 // by an applied voltage v [volt] through a distance d [cm] in any
192 // material at a temperature T [degree K]. The sigma diffusion when
193 // expressed in terms of the distance over which the diffusion
194 // occures, l=time/speed, is independent of the mobility and therefore
195 // the properties of the material. The charge distributions is given by
196 // n = exp(-r^2/4Dt)/(4piDt)^1.5. From this <r^2> = 6Dt where D=mkT/e
197 // (m==mobility, k==Boltzman's constant, T==temparature, e==electric
198 // charge. and vel=m*v/d. consiquently sigma^2=6kTdl/ev.
200 // Double_t l Distance the charge has to travel.
204 // The Sigma due to the diffution of electrons. [cm]
205 const Double_t con = 5.17040258E-04; // == 6k/e [J/col or volts]
207 return TMath::Sqrt(con*fT*fdv*l); // [cm]
209 //______________________________________________________________________
210 Double_t AliITSresponse::SigmaDiffusion2D(Double_t l) const {
211 // Returns the Gaussian sigma^2 == <x^2+z^2> [cm^2] due to the defusion
212 // of electrons or holes through a distance l [cm] caused by an applied
213 // voltage v [volt] through a distance d [cm] in any material at a
214 // temperature T [degree K]. The sigma diffusion when expressed in terms
215 // of the distance over which the diffusion occures, l=time/speed, is
216 // independent of the mobility and therefore the properties of the
217 // material. The charge distributions is given by
218 // n = exp(-r^2/4Dt)/(4piDt)^1.5. From this <x^2+z^2> = 4Dt where D=mkT/e
219 // (m==mobility, k==Boltzman's constant, T==temparature, e==electric
220 // charge. and vel=m*v/d. consiquently sigma^2=4kTdl/ev.
222 // Double_t l Distance the charge has to travel.
226 // The Sigma due to the diffution of electrons. [cm]
227 const Double_t con = 3.446935053E-04; // == 4k/e [J/col or volts]
229 return TMath::Sqrt(con*fT*fdv*l); // [cm]
231 //______________________________________________________________________
232 Double_t AliITSresponse::SigmaDiffusion1D(Double_t l) const {
233 // Returns the Gaussian sigma^2 == <x^2> [cm^2] due to the defusion
234 // of electrons or holes through a distance l [cm] caused by an applied
235 // voltage v [volt] through a distance d [cm] in any material at a
236 // temperature T [degree K]. The sigma diffusion when expressed in terms
237 // of the distance over which the diffusion occures, l=time/speed, is
238 // independent of the mobility and therefore the properties of the
239 // material. The charge distributions is given by
240 // n = exp(-r^2/4Dt)/(4piDt)^1.5. From this <r^2> = 2Dt where D=mkT/e
241 // (m==mobility, k==Boltzman's constant, T==temparature, e==electric
242 // charge. and vel=m*v/d. consiquently sigma^2=2kTdl/ev.
244 // Double_t l Distance the charge has to travel.
248 // The Sigma due to the diffution of electrons. [cm]
249 const Double_t con = 1.723467527E-04; // == 2k/e [J/col or volts]
251 return TMath::Sqrt(con*fT*fdv*l); // [cm]
253 //----------------------------------------------------------------------
254 void AliITSresponse::Print(ostream *os){
255 // Standard output format for this class.
257 // ostream *os Pointer to the output stream
269 #if defined __ICC || defined __ECC
276 fmt = os->setf(ios::scientific); // set scientific floating point output
277 *os << fdv << " " << fN << " " << fT << " ";
279 // *os << " " << endl;
280 os->flags(fmt); // reset back to old formating.
283 //----------------------------------------------------------------------
284 void AliITSresponse::Read(istream *is){
285 // Standard input format for this class.
287 // ostream *os Pointer to the output stream
293 *is >> fdv >> fN >> fT >> fGeVcharge;
296 //----------------------------------------------------------------------
297 ostream &operator<<(ostream &os,AliITSresponse &p){
298 // Standard output streaming function.
300 // ostream *os Pointer to the output stream
309 //----------------------------------------------------------------------
310 istream &operator>>(istream &is,AliITSresponse &r){
311 // Standard input streaming function.
313 // ostream *os Pointer to the output stream
322 //----------------------------------------------------------------------