]> git.uio.no Git - u/mrichter/AliRoot.git/blame_incremental - ITS/AliITSSimuParam.cxx
Changes to use the raw OCDB for SDD (F.Prino)
[u/mrichter/AliRoot.git] / ITS / AliITSSimuParam.cxx
... / ...
CommitLineData
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
29const Float_t AliITSSimuParam::fgkSPDBiasVoltageDefault = 18.182;
30const Double_t AliITSSimuParam::fgkSPDThreshDefault = 3000.;
31const Double_t AliITSSimuParam::fgkSPDSigmaDefault = 250.;
32const TString AliITSSimuParam::fgkSPDCouplingOptDefault = "old";
33const Double_t AliITSSimuParam::fgkSPDCouplColDefault = 0.;
34const Double_t AliITSSimuParam::fgkSPDCouplRowDefault = 0.055;
35const Float_t AliITSSimuParam::fgkSPDEccDiffDefault = 0.85;
36const Float_t AliITSSimuParam::fgkSPDLorentzHoleWeightDefault = 1.0;
37const Float_t AliITSSimuParam::fgkSDDDiffCoeffDefault = 3.23;
38const Float_t AliITSSimuParam::fgkSDDDiffCoeff1Default = 30.;
39const Float_t AliITSSimuParam::fgkSDDJitterErrorDefault = 20.; // 20 um from beam test 2001
40const Float_t AliITSSimuParam::fgkSDDDynamicRangeDefault = 1400./2.5; // mV/MOhm = nA
41const Int_t AliITSSimuParam::fgkSDDMaxAdcDefault = 1024;
42const Float_t AliITSSimuParam::fgkSDDChargeLossDefault = 0.;
43const Float_t AliITSSimuParam::fgkSDDTrigDelayDefault = 54.3;
44const Double_t AliITSSimuParam::fgkSSDCouplingPRDefault = 0.01;
45const Double_t AliITSSimuParam::fgkSSDCouplingPLDefault = 0.01;
46const Double_t AliITSSimuParam::fgkSSDCouplingNRDefault = 0.01;
47const Double_t AliITSSimuParam::fgkSSDCouplingNLDefault = 0.01;
48const Int_t AliITSSimuParam::fgkSSDZSThresholdDefault = 3;
49
50const Float_t AliITSSimuParam::fgkNsigmasDefault = 3.;
51const Int_t AliITSSimuParam::fgkNcompsDefault = 121;
52
53ClassImp(AliITSSimuParam)
54
55//______________________________________________________________________
56AliITSSimuParam::AliITSSimuParam():
57 TObject(),
58fGeVcharge(0.),
59fDOverV(0.),
60//fSPDBiasVoltage(fgkSPDBiasVoltageDefault),
61//fSPDThresh(fgkSPDThreshDefault),
62//fSPDSigma(fgkSPDSigmaDefault),
63fSPDCouplOpt(0),
64fSPDCouplCol(fgkSPDCouplColDefault),
65fSPDCouplRow(fgkSPDCouplRowDefault),
66fSPDEccDiff(0.),
67fSPDLorentzDrift(kTRUE),
68fSPDLorentzHoleWeight(fgkSPDLorentzHoleWeightDefault),
69fSPDAddNoisyFlag(kFALSE),
70fSPDRemoveDeadFlag(kFALSE),
71fSDDElectronics(0),
72fSDDDiffCoeff(0.),
73fSDDDiffCoeff1(0.),
74fSDDJitterError(fgkSDDJitterErrorDefault),
75fSDDDynamicRange(fgkSDDDynamicRangeDefault),
76fSDDMaxAdc(0.),
77fSDDChargeLoss(fgkSDDChargeLossDefault),
78fSDDTrigDelay(fgkSDDTrigDelayDefault),
79fSDDRawFormat(7),
80fSSDLorentzDrift(kTRUE),
81fSSDCouplingPR(0),
82fSSDCouplingPL(0),
83fSSDCouplingNR(0),
84fSSDCouplingNL(0),
85fSSDZSThreshold(fgkSSDZSThresholdDefault),
86fNsigmas(fgkNsigmasDefault),
87fNcomps(fgkNcompsDefault),
88fGaus(),
89fN(0.),
90fT(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//______________________________________________________________________
106AliITSSimuParam::AliITSSimuParam(const AliITSSimuParam &simpar):
107TObject(),
108fGeVcharge(simpar.fGeVcharge),
109fDOverV(simpar.fDOverV),
110//fSPDBiasVoltage(simpar.fSPDBiasVoltage),
111//fSPDThresh(simpar.fSPDThresh),
112//fSPDSigma(simpar.fSPDSigma),
113fSPDCouplOpt(simpar.fSPDCouplOpt),
114fSPDCouplCol(simpar.fSPDCouplCol),
115fSPDCouplRow(simpar.fSPDCouplRow),
116fSPDEccDiff(simpar.fSPDEccDiff),
117fSPDLorentzDrift(simpar.fSPDLorentzDrift),
118fSPDLorentzHoleWeight(simpar.fSPDLorentzHoleWeight),
119fSPDAddNoisyFlag(simpar.fSPDAddNoisyFlag),
120fSPDRemoveDeadFlag(simpar.fSPDRemoveDeadFlag),
121fSDDElectronics(simpar.fSDDElectronics),
122fSDDDiffCoeff(simpar.fSDDDiffCoeff),
123fSDDDiffCoeff1(simpar.fSDDDiffCoeff1),
124fSDDJitterError(simpar.fSDDJitterError),
125fSDDDynamicRange(simpar.fSDDDynamicRange),
126fSDDMaxAdc(simpar.fSDDMaxAdc),
127fSDDChargeLoss(simpar.fSDDChargeLoss),
128fSDDTrigDelay(simpar.fSDDTrigDelay),
129fSDDRawFormat(simpar.fSDDRawFormat),
130fSSDLorentzDrift(simpar.fSSDLorentzDrift),
131fSSDCouplingPR(simpar.fSSDCouplingPR),
132fSSDCouplingPL(simpar.fSSDCouplingPL),
133fSSDCouplingNR(simpar.fSSDCouplingNR),
134fSSDCouplingNL(simpar.fSSDCouplingNL),
135fSSDZSThreshold(simpar.fSSDZSThreshold),
136fNsigmas(simpar.fNsigmas),
137fNcomps(simpar.fNcomps),
138fGaus(),
139fN(simpar.fN),
140fT(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//______________________________________________________________________
152AliITSSimuParam& AliITSSimuParam::operator=(const AliITSSimuParam& source){
153 // Assignment operator.
154 this->~AliITSSimuParam();
155 new(this) AliITSSimuParam(source);
156 return *this;
157
158}
159
160
161//______________________________________________________________________
162AliITSSimuParam::~AliITSSimuParam() {
163 // destructor
164 if(fGaus) delete fGaus;
165}
166//________________________________________________________________________
167void 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//________________________________________________________________________
178void 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//______________________________________________________________________
213Double_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//______________________________________________________________________
246Double_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//______________________________________________________________________
280Double_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//______________________________________________________________________
301Double_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//______________________________________________________________________
323Double_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//______________________________________________________________________
348Double_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//______________________________________________________________________
373Double_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//______________________________________________________________________
388Double_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//______________________________________________________________________
403Double_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//______________________________________________________________________
425Double_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//______________________________________________________________________
447Double_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//----------------------------------------------------------------------
469Double_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//----------------------------------------------------------------------
492Double_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//----------------------------------------------------------------------
519Double_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