Fix for the case of non-existent calibration files
[u/mrichter/AliRoot.git] / ITS / AliITSSimuParam.cxx
1 /**************************************************************************
2  * Copyright(c) 2007-2009, ALICE Experiment at CERN, All rights reserved. *
3  *                                                                        *
4  * Author: The ALICE Off-line Project.                                    *
5  * Contributors are mentioned in the code where appropriate.              *
6  *                                                                        *
7  * Permission to use, copy, modify and distribute this software and its   *
8  * documentation strictly for non-commercial purposes is hereby granted   *
9  * without fee, provided that the above copyright notice appears in all   *
10  * copies and that both the copyright notice and this permission notice   *
11  * appear in the supporting documentation. The authors make no claims     *
12  * about the suitability of this software for any purpose. It is          *
13  * provided "as is" without express or implied warranty.                  *
14  **************************************************************************/
15
16 /* $Id$ */
17
18 ///////////////////////////////////////////////////////////////////
19 //                                                               //
20 // Implementation of the class to store the parameters used in   //
21 // the simulation of SPD, SDD and SSD detectors                  //
22 // Origin: F.Prino, Torino, prino@to.infn.it                     //
23 //                                                               //
24 ///////////////////////////////////////////////////////////////////
25
26 #include "AliITSSimuParam.h"
27 #include <TMath.h>
28
29 const Float_t  AliITSSimuParam::fgkSPDBiasVoltageDefault = 18.182;
30 const Double_t AliITSSimuParam::fgkSPDThreshDefault = 3000.;
31 const Double_t AliITSSimuParam::fgkSPDSigmaDefault = 250.;
32 const TString  AliITSSimuParam::fgkSPDCouplingOptDefault = "old";
33 const Double_t AliITSSimuParam::fgkSPDCouplColDefault = 0.;
34 const Double_t AliITSSimuParam::fgkSPDCouplRowDefault = 0.055;
35 const Float_t  AliITSSimuParam::fgkSPDEccDiffDefault = 0.85;
36 const Float_t  AliITSSimuParam::fgkSPDLorentzHoleWeightDefault = 1.0;
37 const Float_t  AliITSSimuParam::fgkSDDDiffCoeffDefault = 3.23;
38 const Float_t  AliITSSimuParam::fgkSDDDiffCoeff1Default = 30.;
39 const Float_t  AliITSSimuParam::fgkSDDJitterErrorDefault = 20.; // 20 um from beam test 2001
40 const Float_t  AliITSSimuParam::fgkSDDDynamicRangeDefault = 1400./2.5; // mV/MOhm = nA
41 const Int_t    AliITSSimuParam::fgkSDDMaxAdcDefault = 1024;
42 const Float_t  AliITSSimuParam::fgkSDDChargeLossDefault = 0.;
43 const Float_t  AliITSSimuParam::fgkSDDTrigDelayDefault = 54.3;
44 const Float_t  AliITSSimuParam::fgkSDDMapPrecDefault = 20.; // 20 um from laser tests
45 const Float_t  AliITSSimuParam::fgkSDDkeVtoADCDefault = 3.42;
46 const Double_t AliITSSimuParam::fgkSSDCouplingPRDefault = 0.01;
47 const Double_t AliITSSimuParam::fgkSSDCouplingPLDefault = 0.01;
48 const Double_t AliITSSimuParam::fgkSSDCouplingNRDefault = 0.01;
49 const Double_t AliITSSimuParam::fgkSSDCouplingNLDefault = 0.01;
50 const Int_t    AliITSSimuParam::fgkSSDZSThresholdDefault = 3;
51
52 const Float_t AliITSSimuParam::fgkNsigmasDefault = 3.;
53 const Int_t AliITSSimuParam::fgkNcompsDefault = 121;
54
55 ClassImp(AliITSSimuParam)
56
57 //______________________________________________________________________
58 AliITSSimuParam::AliITSSimuParam():
59   TObject(),
60   fGeVcharge(0.),
61   fDOverV(0.),
62 //fSPDBiasVoltage(fgkSPDBiasVoltageDefault),
63 //fSPDThresh(fgkSPDThreshDefault),
64 //fSPDSigma(fgkSPDSigmaDefault),
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.)
95 {  
96   // default constructor
97   SetSPDBiasVoltageAll(fgkSPDBiasVoltageDefault);
98   SetSPDThresholdsAll(fgkSPDThreshDefault,fgkSPDSigmaDefault);
99   SetSPDNoiseAll(0,0);
100   SetGeVToCharge();
101   SetDistanceOverVoltage();
102   SetSPDCouplingOption(fgkSPDCouplingOptDefault);
103   SetSPDSigmaDiffusionAsymmetry(fgkSPDEccDiffDefault);
104   SetSDDElectronics();
105   SetSDDDiffCoeff(fgkSDDDiffCoeffDefault,fgkSDDDiffCoeff1Default);
106   SetSDDMaxAdc((Double_t)fgkSDDMaxAdcDefault);
107   SetSSDCouplings(fgkSSDCouplingPRDefault,fgkSSDCouplingPLDefault,fgkSSDCouplingNRDefault,fgkSSDCouplingNLDefault);
108 }
109 //______________________________________________________________________
110 AliITSSimuParam::AliITSSimuParam(const AliITSSimuParam &simpar):
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){
147   // copy constructor
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   }
155 }
156
157 //______________________________________________________________________
158 AliITSSimuParam& AliITSSimuParam::operator=(const AliITSSimuParam& source){
159   // Assignment operator. 
160   this->~AliITSSimuParam();
161   new(this) AliITSSimuParam(source);
162   return *this;
163   
164 }
165
166
167 //______________________________________________________________________
168 AliITSSimuParam::~AliITSSimuParam() {
169   // destructor
170   if(fGaus) delete fGaus;
171 }
172 //________________________________________________________________________
173 void 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 //________________________________________________________________________
184 void AliITSSimuParam::PrintParameters() const{
185   // Dump all parameters
186   printf("GeVToCharge               = %G\n",fGeVcharge);
187   printf("DistanveOverVoltage       = %f \n",fDOverV);
188   printf("\n");
189   printf("=====  SPD parameters  =====\n");
190   printf("Bias Voltage              = %f \n",fSPDBiasVoltage[0]);
191   printf("Threshold and sigma       = %f %f\n",fSPDThresh[0],fSPDSigma[0]);
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);
196   printf("Flag to add Lorentz Drift = %d\n",fSPDLorentzDrift);
197   printf("Weight of Holes in Lor.Drift = %f\n",fSPDLorentzHoleWeight);
198   printf("Flag to add noisy         = %d\n",fSPDAddNoisyFlag);
199   printf("Flag to remove dead       = %d\n",fSPDRemoveDeadFlag);
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);  
208   printf("Trigger Delay (ns)        = %f\n",fSDDTrigDelay);  
209   printf("Smear from map (um)       = %f\n",fSDDMapPrec);
210   printf("keV->ADC conv. fact.        = %f\n",fSDDkeVtoADC);
211   printf("Raw Data Format           = %d\n",fSDDRawFormat);  
212   printf("\n");
213   printf("=====  SSD parameters  =====\n");
214   printf("Flag to add Lorentz Drift = %d\n",fSSDLorentzDrift);
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 }
221 //______________________________________________________________________
222 Double_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 //______________________________________________________________________
255 Double_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 //______________________________________________________________________
289 Double_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 //______________________________________________________________________
310 Double_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 //______________________________________________________________________
332 Double_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 //______________________________________________________________________
357 Double_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 //______________________________________________________________________
382 Double_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 //______________________________________________________________________
397 Double_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 //______________________________________________________________________
412 Double_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 //______________________________________________________________________
434 Double_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 //______________________________________________________________________
456 Double_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 //----------------------------------------------------------------------
478 Double_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 //----------------------------------------------------------------------
501 Double_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 //----------------------------------------------------------------------
528 Double_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 {
553    // Get SPD threshold values
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 {
565    //Get SPD noise and baseline values
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