]> git.uio.no Git - u/mrichter/AliRoot.git/blob - ITS/AliITSSimuParam.cxx
New AliITSMisAligner class. It replaces MakeITS...MisAlignment.C macros and class...
[u/mrichter/AliRoot.git] / ITS / AliITSSimuParam.cxx
1 /**************************************************************************
2  * Copyright(c) 2007-2009, 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
18 ///////////////////////////////////////////////////////////////////
19 //                                                               //
20 // Implementation of the class to store the parameters used in   //
21 // the simulation of SPD, SDD and SSD detectors                  //
22 // Origin: F.Prino, Torino, prino@to.infn.it                     //
23 //                                                               //
24 ///////////////////////////////////////////////////////////////////
25
26 #include "AliITSSimuParam.h"
27 #include <TMath.h>
28
29 const Float_t  AliITSSimuParam::fgkSPDBiasVoltageDefault = 18.182;
30 const Double_t AliITSSimuParam::fgkSPDThreshDefault = 3000.;
31 const Double_t AliITSSimuParam::fgkSPDSigmaDefault = 250.;
32 const TString  AliITSSimuParam::fgkSPDCouplingOptDefault = "old";
33 const Double_t AliITSSimuParam::fgkSPDCouplColDefault = 0.;
34 const Double_t AliITSSimuParam::fgkSPDCouplRowDefault = 0.055;
35 const Float_t  AliITSSimuParam::fgkSPDEccDiffDefault = 0.85;
36 const Float_t  AliITSSimuParam::fgkSDDDiffCoeffDefault = 3.23;
37 const Float_t  AliITSSimuParam::fgkSDDDiffCoeff1Default = 30.;
38 const Float_t  AliITSSimuParam::fgkSDDJitterErrorDefault = 20.; // 20 um from beam test 2001
39 const Float_t  AliITSSimuParam::fgkSDDDynamicRangeDefault = 1400./2.5; // mV/MOhm = nA
40 const Int_t    AliITSSimuParam::fgkSDDMaxAdcDefault = 1024;
41 const Float_t  AliITSSimuParam::fgkSDDChargeLossDefault = 0.;
42 const Double_t AliITSSimuParam::fgkSSDCouplingPRDefault = 0.01;
43 const Double_t AliITSSimuParam::fgkSSDCouplingPLDefault = 0.01;
44 const Double_t AliITSSimuParam::fgkSSDCouplingNRDefault = 0.01;
45 const Double_t AliITSSimuParam::fgkSSDCouplingNLDefault = 0.01;
46 const Int_t    AliITSSimuParam::fgkSSDZSThresholdDefault = 3;
47
48 const Float_t AliITSSimuParam::fgkNsigmasDefault = 3.;
49 const Int_t AliITSSimuParam::fgkNcompsDefault = 121;
50
51 ClassImp(AliITSSimuParam)
52
53 //______________________________________________________________________
54 AliITSSimuParam::AliITSSimuParam():
55   TObject(),
56 fGeVcharge(0.),
57 fDOverV(0.),
58 //fSPDBiasVoltage(fgkSPDBiasVoltageDefault),
59 //fSPDThresh(fgkSPDThreshDefault),
60 //fSPDSigma(fgkSPDSigmaDefault),
61 fSPDCouplOpt(0),
62 fSPDCouplCol(fgkSPDCouplColDefault),
63 fSPDCouplRow(fgkSPDCouplRowDefault),
64 fSPDEccDiff(0.),
65 fSDDElectronics(0),
66 fSDDDiffCoeff(0.),
67 fSDDDiffCoeff1(0.),
68 fSDDJitterError(fgkSDDJitterErrorDefault),
69 fSDDDynamicRange(fgkSDDDynamicRangeDefault),
70 fSDDMaxAdc(0.),
71 fSDDChargeLoss(fgkSDDChargeLossDefault),
72 fSSDCouplingPR(0),
73 fSSDCouplingPL(0),
74 fSSDCouplingNR(0),
75 fSSDCouplingNL(0),
76 fSSDZSThreshold(fgkSSDZSThresholdDefault),
77 fNsigmas(fgkNsigmasDefault),
78 fNcomps(fgkNcompsDefault),
79 fGaus(),
80 fN(0.),
81 fT(300.)
82 {  
83   // default constructor
84   SetSPDBiasVoltageAll(fgkSPDBiasVoltageDefault);
85   SetSPDThresholdsAll(fgkSPDThreshDefault,fgkSPDSigmaDefault);
86   SetSPDNoiseAll(0,0);
87   SetGeVToCharge();
88   SetDistanceOverVoltage();
89   SetSPDCouplingOption(fgkSPDCouplingOptDefault);
90   SetSPDSigmaDiffusionAsymmetry(fgkSPDEccDiffDefault);
91   SetSDDElectronics();
92   SetSDDDiffCoeff(fgkSDDDiffCoeffDefault,fgkSDDDiffCoeff1Default);
93   SetSDDMaxAdc((Double_t)fgkSDDMaxAdcDefault);
94   SetSSDCouplings(fgkSSDCouplingPRDefault,fgkSSDCouplingPLDefault,fgkSSDCouplingNRDefault,fgkSSDCouplingNLDefault);
95 }
96 //______________________________________________________________________
97 AliITSSimuParam::AliITSSimuParam(const AliITSSimuParam &simpar):
98 TObject(),
99 fGeVcharge(simpar.fGeVcharge),
100 fDOverV(simpar.fDOverV),
101 //fSPDBiasVoltage(simpar.fSPDBiasVoltage),
102 //fSPDThresh(simpar.fSPDThresh),
103 //fSPDSigma(simpar.fSPDSigma),
104 fSPDCouplOpt(simpar.fSPDCouplOpt),
105 fSPDCouplCol(simpar.fSPDCouplCol),
106 fSPDCouplRow(simpar.fSPDCouplRow),
107 fSPDEccDiff(simpar.fSPDEccDiff),
108 fSDDElectronics(simpar.fSDDElectronics),
109 fSDDDiffCoeff(simpar.fSDDDiffCoeff),
110 fSDDDiffCoeff1(simpar.fSDDDiffCoeff1),
111 fSDDJitterError(simpar.fSDDJitterError),
112 fSDDDynamicRange(simpar.fSDDDynamicRange),
113 fSDDMaxAdc(simpar.fSDDMaxAdc),
114 fSDDChargeLoss(simpar.fSDDChargeLoss),
115 fSSDCouplingPR(simpar.fSSDCouplingPR),
116 fSSDCouplingPL(simpar.fSSDCouplingPL),
117 fSSDCouplingNR(simpar.fSSDCouplingNR),
118 fSSDCouplingNL(simpar.fSSDCouplingNL),
119 fSSDZSThreshold(simpar.fSSDZSThreshold),
120 fNsigmas(simpar.fNsigmas),
121 fNcomps(simpar.fNcomps),
122 fGaus(),
123 fN(simpar.fN),
124 fT(simpar.fT){
125   // copy constructor
126   for (Int_t i=0;i<240;i++) {
127     fSPDBiasVoltage[i]=simpar.fSPDBiasVoltage[i];
128     fSPDThresh[i]=simpar.fSPDThresh[i];
129     fSPDSigma[i]=simpar.fSPDSigma[i];
130     fSPDNoise[i]=simpar.fSPDNoise[i];
131     fSPDBaseline[i]=simpar.fSPDBaseline[i];
132   }
133 }
134
135 //______________________________________________________________________
136 AliITSSimuParam& AliITSSimuParam::operator=(const AliITSSimuParam& source){
137     // Assignment operator. 
138     this->~AliITSSimuParam();
139     new(this) AliITSSimuParam(source);
140     return *this;
141
142 }
143
144
145 //______________________________________________________________________
146 AliITSSimuParam::~AliITSSimuParam() {
147   // destructor
148   if(fGaus) delete fGaus;
149 }
150 //________________________________________________________________________
151 void AliITSSimuParam::SetNLookUp(Int_t p1){
152   // Set number of sigmas over which cluster disintegration is performed
153   fNcomps=p1;
154   if (fGaus) delete fGaus;
155   fGaus = new TArrayF(fNcomps+1);
156   for(Int_t i=0; i<=fNcomps; i++) {
157     Float_t x = -fNsigmas + (2.*i*fNsigmas)/(fNcomps-1);
158     (*fGaus)[i] = exp(-((x*x)/2));
159   }
160 }
161 //________________________________________________________________________
162 void AliITSSimuParam::PrintParameters() const{
163   printf("GeVToCharge               = %G\n",fGeVcharge);
164   printf("DistanveOverVoltage       = %f \n",fDOverV);
165   printf("\n");
166   printf("=====  SPD parameters  =====\n");
167   printf("Bias Voltage              = %f \n",fSPDBiasVoltage[0]);
168   printf("Threshold and sigma       = %f %f\n",fSPDThresh[0],fSPDSigma[0]);
169   printf("Coupling Option           = %s\n",fSPDCouplOpt.Data());
170   printf("Coupling value (column)   = %f\n",fSPDCouplCol);
171   printf("Coupling value (row)      = %f\n",fSPDCouplRow);
172   printf("Eccentricity in diffusion = %f\n",fSPDEccDiff);
173   printf("\n");
174   printf("=====  SDD parameters  =====\n");
175   printf("Electronic chips          = %d\n",fSDDElectronics);
176   printf("Diffusion Coefficients    = %f %f\n",fSDDDiffCoeff,fSDDDiffCoeff1);
177   printf("Jitter Error              = %f um\n",fSDDJitterError);
178   printf("Dynamic Range             = %f\n",fSDDDynamicRange);
179   printf("Max. ADC                  = %f\n",fSDDMaxAdc);
180   printf("Charge Loss               = %f\n",fSDDChargeLoss);  
181   printf("\n");
182   printf("=====  SSD parameters  =====\n");
183   printf("Coupling PR               = %f\n",fSSDCouplingPR);
184   printf("Coupling PL               = %f\n",fSSDCouplingPL);
185   printf("Coupling NR               = %f\n",fSSDCouplingNR);
186   printf("Coupling NL               = %f\n",fSSDCouplingNL);
187   printf("Zero Supp threshold       = %d\n",fSSDZSThreshold);
188 }
189 //______________________________________________________________________
190 Double_t AliITSSimuParam::MobilityElectronSiEmp() const {
191     // Computes the electron mobility in cm^2/volt-sec. Taken from SILVACO
192     // International ATLAS II, 2D Device Simulation Framework, User Manual
193     // Chapter 5 Equation 5-6. An empirical function for low-field mobiliity
194     // in silicon at different tempeatures.
195     // Inputs:
196     //    none.
197     // Output:
198     //    none.
199     // Return:
200     //    The Mobility of electrons in Si at a give temprature and impurity
201     //    concentration. [cm^2/Volt-sec]
202     const Double_t km0  = 55.24; // cm^2/Volt-sec
203     const Double_t km1  = 7.12E+08; // cm^2 (degree K)^2.3 / Volt-sec
204     const Double_t kN0  = 1.072E17; // #/cm^3
205     const Double_t kT0  = 300.; // degree K.
206     const Double_t keT0 = -2.3; // Power of Temp.
207     const Double_t keT1 = -3.8; // Power of Temp.
208     const Double_t keN  = 0.73; // Power of Dopent Consentrations
209     Double_t m;
210     Double_t tT = fT,nN = fN;
211
212     if(nN<=0.0){ // Simple case.
213         if(tT==300.) return 1350.0; // From Table 5-1 at consentration 1.0E14.
214         m = km1*TMath::Power(tT,keT0);
215         return m;
216     } // if nN<=0.0
217     m = km1*TMath::Power(tT,keT0) - km0;
218     m /= 1.0 + TMath::Power(tT/kT0,keT1)*TMath::Power(nN/kN0,keN);
219     m += km0;
220     return m;
221 }
222 //______________________________________________________________________
223 Double_t AliITSSimuParam::MobilityHoleSiEmp() const {
224     // Computes the Hole mobility in cm^2/volt-sec. Taken from SILVACO
225     // International ATLAS II, 2D Device Simulation Framework, User Manual
226     // Chapter 5 Equation 5-7 An empirical function for low-field mobiliity
227     // in silicon at different tempeatures.
228     // Inputs:
229     //    none.
230     // Output:
231     //    none.
232     // Return:
233     //    The Mobility of Hole in Si at a give temprature and impurity
234     //    concentration. [cm^2/Volt-sec]
235     const Double_t km0a = 49.74; // cm^2/Volt-sec
236     const Double_t km0b = 49.70; // cm^2/Volt-sec
237     const Double_t km1  = 1.35E+08; // cm^2 (degree K)^2.3 / Volt-sec
238     const Double_t kN0  = 1.606E17; // #/cm^3
239     const Double_t kT0  = 300.; // degree K.
240     const Double_t keT0 = -2.2; // Power of Temp.
241     const Double_t keT1 = -3.7; // Power of Temp.
242     const Double_t keN  = 0.70; // Power of Dopent Consentrations
243     Double_t m;
244     Double_t tT = fT,nN = fN;
245
246     if(nN<=0.0){ // Simple case.
247         if(tT==300.) return 495.0; // From Table 5-1 at consentration 1.0E14.
248         m = km1*TMath::Power(tT,keT0) + km0a-km0b;
249         return m;
250     } // if nN<=0.0
251     m = km1*TMath::Power(tT,keT0) - km0b;
252     m /= 1.0 + TMath::Power(tT/kT0,keT1)*TMath::Power(nN/kN0,keN);
253     m += km0a;
254     return m;
255 }
256 //______________________________________________________________________
257 Double_t AliITSSimuParam::DiffusionCoefficientElectron() const {
258     // Computes the Diffusion coefficient for electrons in cm^2/sec. Taken
259     // from SILVACO International ATLAS II, 2D Device Simulation Framework,
260     // User Manual Chapter 5 Equation 5-53. Einstein relations for diffusion
261     // coefficient. Note: 1 cm^2/sec = 10 microns^2/nanosec.
262     // Inputs:
263     //    none.
264     // Output:
265     //    none.
266     // Return:
267     //    The Diffusion Coefficient of electrons in Si at a give temprature
268     //    and impurity concentration. [cm^2/sec]
269     // const Double_t kb = 1.3806503E-23; // Joules/degree K
270     // const Double_t qe = 1.60217646E-19; // Coulumbs.
271     const Double_t kbqe = 8.617342312E-5; // Volt/degree K
272     Double_t m = MobilityElectronSiEmp();
273     Double_t tT = fT;
274
275     return m*kbqe*tT;  // [cm^2/sec]
276 }
277 //______________________________________________________________________
278 Double_t AliITSSimuParam::DiffusionCoefficientHole() const {
279     // Computes the Diffusion coefficient for Holes in cm^2/sec. Taken
280     // from SILVACO International ATLAS II, 2D Device Simulation Framework,
281     // User Manual Chapter 5 Equation 5-53. Einstein relations for diffusion
282     // coefficient. Note: 1 cm^2/sec = 10 microns^2/nanosec.
283     // Inputs:
284     //    none.
285     // Output:
286     //    none.
287     // Return:
288     //    The Defusion Coefficient of Hole in Si at a give temprature and
289     //    impurity concentration. [cm^2/sec]
290     //    and impurity concentration. [cm^2/sec]
291     // const Double_t kb = 1.3806503E-23; // Joules/degree K
292     // const Double_t qe = 1.60217646E-19; // Coulumbs.
293     const Double_t kbqe = 8.617342312E-5; // Volt/degree K
294     Double_t m = MobilityHoleSiEmp();
295     Double_t tT = fT;
296
297     return m*kbqe*tT;  // [cm^2/sec]
298 }
299 //______________________________________________________________________
300 Double_t AliITSSimuParam::LorentzAngleHole(Double_t B) const {
301    // Computes the Lorentz angle for electrons in Si
302    // Input: magnetic Field in KGauss
303    // Output: Lorentz angle in radians (positive if Bz is positive)
304    // Main Reference: NIM A 497 (2003) 389–396.
305    // "An algorithm for calculating the Lorentz angle in silicon detectors", V. Bartsch et al.
306    //
307    const Double_t krH=0.70; // Hall scattering factor for Hole
308    const Double_t kT0  = 300.;       // reference Temperature (degree K).
309    const Double_t kmulow0 = 470.5;   // cm^2/Volt-sec
310    const Double_t keT0 = -2.5;       // Power of Temp.
311    const Double_t beta0 = 1.213;     // beta coeff. at T0=300K
312    const Double_t keT1 = 0.17;       // Power of Temp. for beta
313    const Double_t kvsat0 = 8.37E+06; // saturated velocity at T0=300K (cm/sec)
314    const Double_t keT2 = 0.52;       // Power of Temp. for vsat
315    Double_t tT = fT;
316    Double_t eE= 1./fDOverV;
317    Double_t muLow=kmulow0*TMath::Power(tT/kT0,keT0);
318    Double_t beta=beta0*TMath::Power(tT/kT0,keT1);
319    Double_t vsat=kvsat0*TMath::Power(tT/kT0,keT2);
320    Double_t mu=muLow/TMath::Power(1+TMath::Power(muLow*eE/vsat,beta),1/beta);
321    Double_t angle=TMath::ATan(krH*mu*B*1.E-05); // Conversion Factor
322    return angle;
323 }
324 //______________________________________________________________________
325 Double_t AliITSSimuParam::LorentzAngleElectron(Double_t B) const {
326    // Computes the Lorentz angle for electrons in Si
327    // Input: magnetic Field in KGauss
328    // Output: Lorentz angle in radians (positive if Bz is positive)
329    // Main Reference: NIM A 497 (2003) 389–396.
330    // "An algorithm for calculating the Lorentz angle in silicon detectors", V. Bartsch et al.
331    //
332    const Double_t krH=1.15; // Hall scattering factor for Electron
333    const Double_t kT0  = 300.;       // reference Temperature (degree K).
334    const Double_t kmulow0 = 1417.0;  // cm^2/Volt-sec
335    const Double_t keT0 = -2.2;       // Power of Temp.
336    const Double_t beta0 = 1.109;     // beta coeff. at T0=300K
337    const Double_t keT1 = 0.66;       // Power of Temp. for beta
338    const Double_t kvsat0 = 1.07E+07; // saturated velocity at T0=300K (cm/sec)
339    const Double_t keT2 = 0.87;       // Power of Temp. for vsat
340    Double_t tT = fT;
341    Double_t eE= 1./fDOverV;
342    Double_t muLow=kmulow0*TMath::Power(tT/kT0,keT0);
343    Double_t beta=beta0*TMath::Power(tT/kT0,keT1);
344    Double_t vsat=kvsat0*TMath::Power(tT/kT0,keT2);
345    Double_t mu=muLow/TMath::Power(1+TMath::Power(muLow*eE/vsat,beta),1/beta);
346    Double_t angle=TMath::ATan(krH*mu*B*1.E-05);
347    return angle;
348 }
349 //______________________________________________________________________
350 Double_t AliITSSimuParam::SpeedElectron() const {
351     // Computes the average speed for electrons in Si under the low-field
352     // approximation. [cm/sec].
353     // Inputs:
354     //    none.
355     // Output:
356     //    none.
357     // Return:
358     //    The speed the holes are traveling at due to the low field applied.
359     //    [cm/sec]
360     Double_t m = MobilityElectronSiEmp();
361
362     return m/fDOverV;  // [cm/sec]
363 }
364 //______________________________________________________________________
365 Double_t AliITSSimuParam::SpeedHole() const {
366     // Computes the average speed for Holes in Si under the low-field
367     // approximation.[cm/sec].
368     // Inputs:
369     //    none.
370     // Output:
371     //    none.
372     // Return:
373     //    The speed the holes are traveling at due to the low field applied.
374     //    [cm/sec]
375     Double_t m = MobilityHoleSiEmp();
376
377     return m/fDOverV;  // [cm/sec]
378 }
379 //______________________________________________________________________
380 Double_t AliITSSimuParam::SigmaDiffusion3D(Double_t l) const {
381     // Returns the Gaussian sigma^2 == <x^2+y^2+z^2> [cm^2] due to the
382     // defusion of electrons or holes through a distance l [cm] caused
383     // by an applied voltage v [volt] through a distance d [cm] in any
384     //  material at a temperature T [degree K]. The sigma diffusion when
385     //  expressed in terms of the distance over which the diffusion
386     // occures, l=time/speed, is independent of the mobility and therefore
387     //  the properties of the material. The charge distributions is given by
388     // n = exp(-r^2/4Dt)/(4piDt)^1.5. From this <r^2> = 6Dt where D=mkT/e
389     // (m==mobility, k==Boltzman's constant, T==temparature, e==electric
390     // charge. and vel=m*v/d. consiquently sigma^2=6kTdl/ev.
391     // Inputs:
392     //    Double_t l   Distance the charge has to travel.
393     // Output:
394     //    none.
395     // Return:
396     //    The Sigma due to the diffution of electrons. [cm]
397     const Double_t kcon = 5.17040258E-04; // == 6k/e [J/col or volts]
398
399     return TMath::Sqrt(kcon*fT*fDOverV*l);  // [cm]
400 }
401 //______________________________________________________________________
402 Double_t AliITSSimuParam::SigmaDiffusion2D(Double_t l) const {
403     // Returns the Gaussian sigma^2 == <x^2+z^2> [cm^2] due to the defusion
404     // of electrons or holes through a distance l [cm] caused by an applied
405     // voltage v [volt] through a distance d [cm] in any material at a
406     // temperature T [degree K]. The sigma diffusion when expressed in terms
407     // of the distance over which the diffusion occures, l=time/speed, is
408     // independent of the mobility and therefore the properties of the
409     // material. The charge distributions is given by
410     // n = exp(-r^2/4Dt)/(4piDt)^1.5. From this <x^2+z^2> = 4Dt where D=mkT/e
411     // (m==mobility, k==Boltzman's constant, T==temparature, e==electric
412     // charge. and vel=m*v/d. consiquently sigma^2=4kTdl/ev.
413     // Inputs:
414     //    Double_t l   Distance the charge has to travel.
415     // Output:
416     //    none.
417     // Return:
418     //    The Sigma due to the diffution of electrons. [cm]
419     const Double_t kcon = 3.446935053E-04; // == 4k/e [J/col or volts]
420
421     return TMath::Sqrt(kcon*fT*fDOverV*l);  // [cm]
422 }
423 //______________________________________________________________________
424 Double_t AliITSSimuParam::SigmaDiffusion1D(Double_t l) const {
425     // Returns the Gaussian sigma^2 == <x^2> [cm^2] due to the defusion
426     // of electrons or holes through a distance l [cm] caused by an applied
427     // voltage v [volt] through a distance d [cm] in any material at a
428     // temperature T [degree K]. The sigma diffusion when expressed in terms
429     // of the distance over which the diffusion occures, l=time/speed, is
430     // independent of the mobility and therefore the properties of the
431     // material. The charge distributions is given by
432     // n = exp(-r^2/4Dt)/(4piDt)^1.5. From this <r^2> = 2Dt where D=mkT/e
433     // (m==mobility, k==Boltzman's constant, T==temparature, e==electric
434     // charge. and vel=m*v/d. consiquently sigma^2=2kTdl/ev.
435     // Inputs:
436     //    Double_t l   Distance the charge has to travel.
437     // Output:
438     //    none.
439     // Return:
440     //    The Sigma due to the diffution of electrons. [cm]
441     const Double_t kcon = 1.723467527E-04; // == 2k/e [J/col or volts]
442
443     return TMath::Sqrt(kcon*fT*fDOverV*l);  // [cm]
444 }
445 //----------------------------------------------------------------------
446 Double_t AliITSSimuParam::DepletedRegionThicknessA(Double_t dopCons,
447                                                  Double_t voltage,
448                                                  Double_t elecCharge,
449                                                  Double_t voltBuiltIn)const{
450     // Computes the thickness of the depleted region in Si due to the
451     // application of an external bias voltage. From the Particle Data
452     // Book, 28.8 Silicon semiconductor detectors equation 28.19 (2004)
453     // Physics Letters B "Review of Particle Physics" Volume 592, Issue 1-4
454     // July 15 2004, ISSN 0370-2693 page 263. First equation.
455     // Inputs:
456     //    Double_t dopCons           "N" doping concentration
457     //    Double_t voltage           "V" external bias voltage
458     //    Double_t elecCharge        "e" electronic charge
459     //    Double_t voltBuiltIn=0.5   "V_bi" "built-in" Voltage (~0.5V for
460     //                               resistivities typically used in detectors)
461     // Output:
462     //    none.
463     // Return:
464     //    The thickness of the depleted region
465
466     return TMath::Sqrt(2.0*(voltage+voltBuiltIn)/(dopCons*elecCharge));
467 }
468 //----------------------------------------------------------------------
469 Double_t AliITSSimuParam::DepletedRegionThicknessB(Double_t resist,
470                                                  Double_t voltage,
471                                                  Double_t mobility,
472                                                  Double_t voltBuiltIn,
473                                                  Double_t dielConst)const{
474     // Computes the thickness of the depleted region in Si due to the
475     // application of an external bias voltage. From the Particle Data
476     // Book, 28.8 Silicon semiconductor detectors equation 28.19 (2004)
477     // Physics Letters B "Review of Particle Physics" Volume 592, Issue 1-4
478     // July 15 2004, ISSN 0370-2693 page 263. Second Equation.
479     // Inputs:
480     //    Double_t resist            "rho" resistivity (typically 1-10 kOhm cm)
481     //    Double_t voltage           "V" external bias voltage
482     //    Double_t mobility          "mu" charge carrier mobility
483     //                                  (electons 1350, holes 450 cm^2/V/s)
484     //    Double_t voltBuiltIn=0.5   "V_bi" "built-in" Voltage (~0.5V for
485     //                               resistivities typically used in detectors)
486     //    Double_t dielConst=1.E-12  "epsilon" dielectric constant = 11.9 *
487     //                                (permittivity of free space) or ~ 1 pF/cm
488     // Output:
489     //    none.
490     // Return:
491     //    The thickness of the depleted region
492
493     return TMath::Sqrt(2.8*resist*mobility*dielConst*(voltage+voltBuiltIn));
494 }
495 //----------------------------------------------------------------------
496 Double_t AliITSSimuParam::ReverseBiasCurrent(Double_t temp,
497                                             Double_t revBiasCurT1,
498                                             Double_t tempT1,
499                                             Double_t energy)const{
500     // Computes the temperature dependance of the reverse bias current
501     // of Si detectors. From the Particle Data
502     // Book, 28.8 Silicon semiconductor detectors equation 28.21 (2004)
503     // Physics Letters B "Review of Particle Physics" Volume 592, Issue 1-4
504     // July 15 2004, ISSN 0370-2693 page 263.
505     // Inputs:
506     //    Double_t temp         The temperature at which the current is wanted
507     //    Double_t revBiasCurT1 The reference bias current at temp T1
508     //    Double_t tempT1       The temperature correstponding to revBiasCurT1
509     //    Double_t energy=1.2   Some energy [eV]
510     // Output:
511     //    none.
512     // Return:
513     //    The reverse bias current at the tempeature temp.
514     const Double_t kBoltz = 8.617343E-5; //[eV/K]
515
516     return revBiasCurT1*(temp*temp/(tempT1*tempT1))*
517         TMath::Exp(-0.5*energy*(tempT1-temp)/(kBoltz*tempT1*temp));
518 }
519 //______________________________________________________________________
520  void   AliITSSimuParam::SPDThresholds(const Int_t mod, Double_t& thresh, Double_t& sigma) const {
521     if(mod<0 || mod>239) {
522        thresh=0;
523        sigma=0; 
524        return;
525      } 
526      thresh=fSPDThresh[mod];
527      sigma=fSPDSigma[mod];
528      return;
529 }
530 //_______________________________________________________________________
531  void   AliITSSimuParam::SPDNoise(const Int_t mod,Double_t &noise, Double_t &baseline) const {
532      if(mod<0 || mod>239) {
533        noise=0;
534        baseline=0; 
535        return;
536      } 
537      noise=fSPDNoise[mod];
538      baseline=fSPDBaseline[mod];
539      return;
540 }
541