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