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