]> git.uio.no Git - u/mrichter/AliRoot.git/blame - ITS/AliITSSimuParam.cxx
Implemented ZDC time cut in phsyics selection and in trigger analysis for MC. Trackle...
[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;
cd2a0045 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.),
2ae37d58 60//fSPDBiasVoltage(fgkSPDBiasVoltageDefault),
61//fSPDThresh(fgkSPDThreshDefault),
62//fSPDSigma(fgkSPDSigmaDefault),
cd2a0045 63fSPDCouplOpt(0),
64fSPDCouplCol(fgkSPDCouplColDefault),
65fSPDCouplRow(fgkSPDCouplRowDefault),
66fSPDEccDiff(0.),
a0a6914c 67fSPDLorentzDrift(kTRUE),
68fSPDLorentzHoleWeight(fgkSPDLorentzHoleWeightDefault),
dba117de 69fSPDAddNoisyFlag(kFALSE),
70fSPDRemoveDeadFlag(kFALSE),
cd2a0045 71fSDDElectronics(0),
72fSDDDiffCoeff(0.),
73fSDDDiffCoeff1(0.),
74fSDDJitterError(fgkSDDJitterErrorDefault),
75fSDDDynamicRange(fgkSDDDynamicRangeDefault),
76fSDDMaxAdc(0.),
77fSDDChargeLoss(fgkSDDChargeLossDefault),
417ff3f4 78fSDDTrigDelay(fgkSDDTrigDelayDefault),
d9ed1779 79fSDDRawFormat(7),
66b89079 80fSSDLorentzDrift(kTRUE),
cd2a0045 81fSSDCouplingPR(0),
82fSSDCouplingPL(0),
83fSSDCouplingNR(0),
84fSSDCouplingNL(0),
85fSSDZSThreshold(fgkSSDZSThresholdDefault),
86fNsigmas(fgkNsigmasDefault),
87fNcomps(fgkNcompsDefault),
2ae37d58 88fGaus(),
89fN(0.),
90fT(300.)
cd2a0045 91{
92 // default constructor
2ae37d58 93 SetSPDBiasVoltageAll(fgkSPDBiasVoltageDefault);
94 SetSPDThresholdsAll(fgkSPDThreshDefault,fgkSPDSigmaDefault);
95 SetSPDNoiseAll(0,0);
cd2a0045 96 SetGeVToCharge();
97 SetDistanceOverVoltage();
98 SetSPDCouplingOption(fgkSPDCouplingOptDefault);
99 SetSPDSigmaDiffusionAsymmetry(fgkSPDEccDiffDefault);
100 SetSDDElectronics();
101 SetSDDDiffCoeff(fgkSDDDiffCoeffDefault,fgkSDDDiffCoeff1Default);
102 SetSDDMaxAdc((Double_t)fgkSDDMaxAdcDefault);
cd2a0045 103 SetSSDCouplings(fgkSSDCouplingPRDefault,fgkSSDCouplingPLDefault,fgkSSDCouplingNRDefault,fgkSSDCouplingNLDefault);
104}
105//______________________________________________________________________
106AliITSSimuParam::AliITSSimuParam(const AliITSSimuParam &simpar):
107TObject(),
108fGeVcharge(simpar.fGeVcharge),
109fDOverV(simpar.fDOverV),
2ae37d58 110//fSPDBiasVoltage(simpar.fSPDBiasVoltage),
111//fSPDThresh(simpar.fSPDThresh),
112//fSPDSigma(simpar.fSPDSigma),
cd2a0045 113fSPDCouplOpt(simpar.fSPDCouplOpt),
114fSPDCouplCol(simpar.fSPDCouplCol),
115fSPDCouplRow(simpar.fSPDCouplRow),
116fSPDEccDiff(simpar.fSPDEccDiff),
a0a6914c 117fSPDLorentzDrift(simpar.fSPDLorentzDrift),
118fSPDLorentzHoleWeight(simpar.fSPDLorentzHoleWeight),
dba117de 119fSPDAddNoisyFlag(simpar.fSPDAddNoisyFlag),
120fSPDRemoveDeadFlag(simpar.fSPDRemoveDeadFlag),
cd2a0045 121fSDDElectronics(simpar.fSDDElectronics),
122fSDDDiffCoeff(simpar.fSDDDiffCoeff),
123fSDDDiffCoeff1(simpar.fSDDDiffCoeff1),
124fSDDJitterError(simpar.fSDDJitterError),
125fSDDDynamicRange(simpar.fSDDDynamicRange),
126fSDDMaxAdc(simpar.fSDDMaxAdc),
127fSDDChargeLoss(simpar.fSDDChargeLoss),
417ff3f4 128fSDDTrigDelay(simpar.fSDDTrigDelay),
d9ed1779 129fSDDRawFormat(simpar.fSDDRawFormat),
66b89079 130fSSDLorentzDrift(simpar.fSSDLorentzDrift),
cd2a0045 131fSSDCouplingPR(simpar.fSSDCouplingPR),
132fSSDCouplingPL(simpar.fSSDCouplingPL),
133fSSDCouplingNR(simpar.fSSDCouplingNR),
134fSSDCouplingNL(simpar.fSSDCouplingNL),
135fSSDZSThreshold(simpar.fSSDZSThreshold),
136fNsigmas(simpar.fNsigmas),
137fNcomps(simpar.fNcomps),
2ae37d58 138fGaus(),
139fN(simpar.fN),
140fT(simpar.fT){
cd2a0045 141 // copy constructor
2ae37d58 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 }
cd2a0045 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");
2ae37d58 183 printf("Bias Voltage = %f \n",fSPDBiasVoltage[0]);
184 printf("Threshold and sigma = %f %f\n",fSPDThresh[0],fSPDSigma[0]);
cd2a0045 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);
a0a6914c 189 printf("Flag to add Lorentz Drift = %d\n",fSPDLorentzDrift);
190 printf("Weight of Holes in Lor.Drift = %f\n",fSPDLorentzHoleWeight);
d600da26 191 printf("Flag to add noisy = %d\n",fSPDAddNoisyFlag);
192 printf("Flag to remove dead = %d\n",fSPDRemoveDeadFlag);
cd2a0045 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);
417ff3f4 201 printf("Trigger Delay (ns) = %f\n",fSDDTrigDelay);
d9ed1779 202 printf("Raw Data Format = %d\n",fSDDRawFormat);
cd2a0045 203 printf("\n");
204 printf("===== SSD parameters =====\n");
66b89079 205 printf("Flag to add Lorentz Drift = %d\n",fSSDLorentzDrift);
cd2a0045 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}
2ae37d58 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