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