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