]> git.uio.no Git - u/mrichter/AliRoot.git/blame - ITS/AliITSSimuParam.cxx
New macro to plot SDD offline calibration quantities
[u/mrichter/AliRoot.git] / ITS / AliITSSimuParam.cxx
CommitLineData
cd2a0045 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
2ae37d58 16/* $Id$ */
cd2a0045 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::fgkSDDDiffCoeffDefault = 3.23;
37const Float_t AliITSSimuParam::fgkSDDDiffCoeff1Default = 30.;
38const Float_t AliITSSimuParam::fgkSDDJitterErrorDefault = 20.; // 20 um from beam test 2001
aebba721 39const Float_t AliITSSimuParam::fgkSDDDynamicRangeDefault = 1400./2.5; // mV/MOhm = nA
cd2a0045 40const Int_t AliITSSimuParam::fgkSDDMaxAdcDefault = 1024;
41const Float_t AliITSSimuParam::fgkSDDChargeLossDefault = 0.;
417ff3f4 42const Float_t AliITSSimuParam::fgkSDDTrigDelayDefault = 0.;
cd2a0045 43const Double_t AliITSSimuParam::fgkSSDCouplingPRDefault = 0.01;
44const Double_t AliITSSimuParam::fgkSSDCouplingPLDefault = 0.01;
45const Double_t AliITSSimuParam::fgkSSDCouplingNRDefault = 0.01;
46const Double_t AliITSSimuParam::fgkSSDCouplingNLDefault = 0.01;
47const Int_t AliITSSimuParam::fgkSSDZSThresholdDefault = 3;
48
49const Float_t AliITSSimuParam::fgkNsigmasDefault = 3.;
50const Int_t AliITSSimuParam::fgkNcompsDefault = 121;
51
52ClassImp(AliITSSimuParam)
53
54//______________________________________________________________________
55AliITSSimuParam::AliITSSimuParam():
56 TObject(),
57fGeVcharge(0.),
58fDOverV(0.),
2ae37d58 59//fSPDBiasVoltage(fgkSPDBiasVoltageDefault),
60//fSPDThresh(fgkSPDThreshDefault),
61//fSPDSigma(fgkSPDSigmaDefault),
cd2a0045 62fSPDCouplOpt(0),
63fSPDCouplCol(fgkSPDCouplColDefault),
64fSPDCouplRow(fgkSPDCouplRowDefault),
65fSPDEccDiff(0.),
dba117de 66fSPDAddNoisyFlag(kFALSE),
67fSPDRemoveDeadFlag(kFALSE),
cd2a0045 68fSDDElectronics(0),
69fSDDDiffCoeff(0.),
70fSDDDiffCoeff1(0.),
71fSDDJitterError(fgkSDDJitterErrorDefault),
72fSDDDynamicRange(fgkSDDDynamicRangeDefault),
73fSDDMaxAdc(0.),
74fSDDChargeLoss(fgkSDDChargeLossDefault),
417ff3f4 75fSDDTrigDelay(fgkSDDTrigDelayDefault),
d9ed1779 76fSDDRawFormat(7),
cd2a0045 77fSSDCouplingPR(0),
78fSSDCouplingPL(0),
79fSSDCouplingNR(0),
80fSSDCouplingNL(0),
81fSSDZSThreshold(fgkSSDZSThresholdDefault),
82fNsigmas(fgkNsigmasDefault),
83fNcomps(fgkNcompsDefault),
2ae37d58 84fGaus(),
85fN(0.),
86fT(300.)
cd2a0045 87{
88 // default constructor
2ae37d58 89 SetSPDBiasVoltageAll(fgkSPDBiasVoltageDefault);
90 SetSPDThresholdsAll(fgkSPDThreshDefault,fgkSPDSigmaDefault);
91 SetSPDNoiseAll(0,0);
cd2a0045 92 SetGeVToCharge();
93 SetDistanceOverVoltage();
94 SetSPDCouplingOption(fgkSPDCouplingOptDefault);
95 SetSPDSigmaDiffusionAsymmetry(fgkSPDEccDiffDefault);
96 SetSDDElectronics();
97 SetSDDDiffCoeff(fgkSDDDiffCoeffDefault,fgkSDDDiffCoeff1Default);
98 SetSDDMaxAdc((Double_t)fgkSDDMaxAdcDefault);
cd2a0045 99 SetSSDCouplings(fgkSSDCouplingPRDefault,fgkSSDCouplingPLDefault,fgkSSDCouplingNRDefault,fgkSSDCouplingNLDefault);
100}
101//______________________________________________________________________
102AliITSSimuParam::AliITSSimuParam(const AliITSSimuParam &simpar):
103TObject(),
104fGeVcharge(simpar.fGeVcharge),
105fDOverV(simpar.fDOverV),
2ae37d58 106//fSPDBiasVoltage(simpar.fSPDBiasVoltage),
107//fSPDThresh(simpar.fSPDThresh),
108//fSPDSigma(simpar.fSPDSigma),
cd2a0045 109fSPDCouplOpt(simpar.fSPDCouplOpt),
110fSPDCouplCol(simpar.fSPDCouplCol),
111fSPDCouplRow(simpar.fSPDCouplRow),
112fSPDEccDiff(simpar.fSPDEccDiff),
dba117de 113fSPDAddNoisyFlag(simpar.fSPDAddNoisyFlag),
114fSPDRemoveDeadFlag(simpar.fSPDRemoveDeadFlag),
cd2a0045 115fSDDElectronics(simpar.fSDDElectronics),
116fSDDDiffCoeff(simpar.fSDDDiffCoeff),
117fSDDDiffCoeff1(simpar.fSDDDiffCoeff1),
118fSDDJitterError(simpar.fSDDJitterError),
119fSDDDynamicRange(simpar.fSDDDynamicRange),
120fSDDMaxAdc(simpar.fSDDMaxAdc),
121fSDDChargeLoss(simpar.fSDDChargeLoss),
417ff3f4 122fSDDTrigDelay(simpar.fSDDTrigDelay),
d9ed1779 123fSDDRawFormat(simpar.fSDDRawFormat),
cd2a0045 124fSSDCouplingPR(simpar.fSSDCouplingPR),
125fSSDCouplingPL(simpar.fSSDCouplingPL),
126fSSDCouplingNR(simpar.fSSDCouplingNR),
127fSSDCouplingNL(simpar.fSSDCouplingNL),
128fSSDZSThreshold(simpar.fSSDZSThreshold),
129fNsigmas(simpar.fNsigmas),
130fNcomps(simpar.fNcomps),
2ae37d58 131fGaus(),
132fN(simpar.fN),
133fT(simpar.fT){
cd2a0045 134 // copy constructor
2ae37d58 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 }
cd2a0045 142}
143
144//______________________________________________________________________
145AliITSSimuParam& AliITSSimuParam::operator=(const AliITSSimuParam& source){
146 // Assignment operator.
147 this->~AliITSSimuParam();
148 new(this) AliITSSimuParam(source);
149 return *this;
150
151}
152
153
154//______________________________________________________________________
155AliITSSimuParam::~AliITSSimuParam() {
156 // destructor
157 if(fGaus) delete fGaus;
158}
159//________________________________________________________________________
160void 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//________________________________________________________________________
171void AliITSSimuParam::PrintParameters() const{
172 printf("GeVToCharge = %G\n",fGeVcharge);
173 printf("DistanveOverVoltage = %f \n",fDOverV);
174 printf("\n");
175 printf("===== SPD parameters =====\n");
2ae37d58 176 printf("Bias Voltage = %f \n",fSPDBiasVoltage[0]);
177 printf("Threshold and sigma = %f %f\n",fSPDThresh[0],fSPDSigma[0]);
cd2a0045 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);
d600da26 182 printf("Flag to add noisy = %d\n",fSPDAddNoisyFlag);
183 printf("Flag to remove dead = %d\n",fSPDRemoveDeadFlag);
cd2a0045 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);
417ff3f4 192 printf("Trigger Delay (ns) = %f\n",fSDDTrigDelay);
d9ed1779 193 printf("Raw Data Format = %d\n",fSDDRawFormat);
cd2a0045 194 printf("\n");
195 printf("===== SSD parameters =====\n");
cd2a0045 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}
2ae37d58 202//______________________________________________________________________
203Double_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//______________________________________________________________________
236Double_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//______________________________________________________________________
270Double_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//______________________________________________________________________
291Double_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//______________________________________________________________________
313Double_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//______________________________________________________________________
338Double_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//______________________________________________________________________
363Double_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//______________________________________________________________________
378Double_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//______________________________________________________________________
393Double_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//______________________________________________________________________
415Double_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//______________________________________________________________________
437Double_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//----------------------------------------------------------------------
459Double_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//----------------------------------------------------------------------
482Double_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//----------------------------------------------------------------------
509Double_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