]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - ITS/AliITSSimuParam.cxx
Added protection against degenerate covariance matrix; corrected track direction...
[u/mrichter/AliRoot.git] / ITS / AliITSSimuParam.cxx
index 66de4b79bac82bd8e8ab9bf4401e7d2927720d7c..d4bb8a0d737381ddfd92c0959a8615822cb88c0b 100644 (file)
@@ -13,7 +13,7 @@
  * provided "as is" without express or implied warranty.                  *
  **************************************************************************/
 
-/* $Id:$ */
+/* $Id$ */
 
 ///////////////////////////////////////////////////////////////////
 //                                                               //
@@ -36,7 +36,7 @@ const Float_t  AliITSSimuParam::fgkSPDEccDiffDefault = 0.85;
 const Float_t  AliITSSimuParam::fgkSDDDiffCoeffDefault = 3.23;
 const Float_t  AliITSSimuParam::fgkSDDDiffCoeff1Default = 30.;
 const Float_t  AliITSSimuParam::fgkSDDJitterErrorDefault = 20.; // 20 um from beam test 2001
-const Float_t  AliITSSimuParam::fgkSDDDynamicRangeDefault = 132.;
+const Float_t  AliITSSimuParam::fgkSDDDynamicRangeDefault = 1400./2.5; // mV/MOhm = nA
 const Int_t    AliITSSimuParam::fgkSDDMaxAdcDefault = 1024;
 const Float_t  AliITSSimuParam::fgkSDDChargeLossDefault = 0.;
 const Double_t AliITSSimuParam::fgkSSDCouplingPRDefault = 0.01;
@@ -55,13 +55,15 @@ AliITSSimuParam::AliITSSimuParam():
   TObject(),
 fGeVcharge(0.),
 fDOverV(0.),
-fSPDBiasVoltage(fgkSPDBiasVoltageDefault),
-fSPDThresh(fgkSPDThreshDefault),
-fSPDSigma(fgkSPDSigmaDefault),
+//fSPDBiasVoltage(fgkSPDBiasVoltageDefault),
+//fSPDThresh(fgkSPDThreshDefault),
+//fSPDSigma(fgkSPDSigmaDefault),
 fSPDCouplOpt(0),
 fSPDCouplCol(fgkSPDCouplColDefault),
 fSPDCouplRow(fgkSPDCouplRowDefault),
 fSPDEccDiff(0.),
+fSPDAddNoisyFlag(kFALSE),
+fSPDRemoveDeadFlag(kFALSE),
 fSDDElectronics(0),
 fSDDDiffCoeff(0.),
 fSDDDiffCoeff1(0.),
@@ -69,7 +71,7 @@ fSDDJitterError(fgkSDDJitterErrorDefault),
 fSDDDynamicRange(fgkSDDDynamicRangeDefault),
 fSDDMaxAdc(0.),
 fSDDChargeLoss(fgkSDDChargeLossDefault),
-fSSDADCpereV(0.),
+fSDDRawFormat(7),
 fSSDCouplingPR(0),
 fSSDCouplingPL(0),
 fSSDCouplingNR(0),
@@ -77,9 +79,14 @@ fSSDCouplingNL(0),
 fSSDZSThreshold(fgkSSDZSThresholdDefault),
 fNsigmas(fgkNsigmasDefault),
 fNcomps(fgkNcompsDefault),
-fGaus()
+fGaus(),
+fN(0.),
+fT(300.)
 {  
   // default constructor
+  SetSPDBiasVoltageAll(fgkSPDBiasVoltageDefault);
+  SetSPDThresholdsAll(fgkSPDThreshDefault,fgkSPDSigmaDefault);
+  SetSPDNoiseAll(0,0);
   SetGeVToCharge();
   SetDistanceOverVoltage();
   SetSPDCouplingOption(fgkSPDCouplingOptDefault);
@@ -87,7 +94,6 @@ fGaus()
   SetSDDElectronics();
   SetSDDDiffCoeff(fgkSDDDiffCoeffDefault,fgkSDDDiffCoeff1Default);
   SetSDDMaxAdc((Double_t)fgkSDDMaxAdcDefault);
-  SetSSDADCpereV();
   SetSSDCouplings(fgkSSDCouplingPRDefault,fgkSSDCouplingPLDefault,fgkSSDCouplingNRDefault,fgkSSDCouplingNLDefault);
 }
 //______________________________________________________________________
@@ -95,13 +101,15 @@ AliITSSimuParam::AliITSSimuParam(const AliITSSimuParam &simpar):
 TObject(),
 fGeVcharge(simpar.fGeVcharge),
 fDOverV(simpar.fDOverV),
-fSPDBiasVoltage(simpar.fSPDBiasVoltage),
-fSPDThresh(simpar.fSPDThresh),
-fSPDSigma(simpar.fSPDSigma),
+//fSPDBiasVoltage(simpar.fSPDBiasVoltage),
+//fSPDThresh(simpar.fSPDThresh),
+//fSPDSigma(simpar.fSPDSigma),
 fSPDCouplOpt(simpar.fSPDCouplOpt),
 fSPDCouplCol(simpar.fSPDCouplCol),
 fSPDCouplRow(simpar.fSPDCouplRow),
 fSPDEccDiff(simpar.fSPDEccDiff),
+fSPDAddNoisyFlag(simpar.fSPDAddNoisyFlag),
+fSPDRemoveDeadFlag(simpar.fSPDRemoveDeadFlag),
 fSDDElectronics(simpar.fSDDElectronics),
 fSDDDiffCoeff(simpar.fSDDDiffCoeff),
 fSDDDiffCoeff1(simpar.fSDDDiffCoeff1),
@@ -109,7 +117,7 @@ fSDDJitterError(simpar.fSDDJitterError),
 fSDDDynamicRange(simpar.fSDDDynamicRange),
 fSDDMaxAdc(simpar.fSDDMaxAdc),
 fSDDChargeLoss(simpar.fSDDChargeLoss),
-fSSDADCpereV(simpar.fSSDADCpereV),
+fSDDRawFormat(simpar.fSDDRawFormat),
 fSSDCouplingPR(simpar.fSSDCouplingPR),
 fSSDCouplingPL(simpar.fSSDCouplingPL),
 fSSDCouplingNR(simpar.fSSDCouplingNR),
@@ -117,8 +125,17 @@ fSSDCouplingNL(simpar.fSSDCouplingNL),
 fSSDZSThreshold(simpar.fSSDZSThreshold),
 fNsigmas(simpar.fNsigmas),
 fNcomps(simpar.fNcomps),
-fGaus(){
+fGaus(),
+fN(simpar.fN),
+fT(simpar.fT){
   // copy constructor
+  for (Int_t i=0;i<240;i++) {
+    fSPDBiasVoltage[i]=simpar.fSPDBiasVoltage[i];
+    fSPDThresh[i]=simpar.fSPDThresh[i];
+    fSPDSigma[i]=simpar.fSPDSigma[i];
+    fSPDNoise[i]=simpar.fSPDNoise[i];
+    fSPDBaseline[i]=simpar.fSPDBaseline[i];
+  }
 }
 
 //______________________________________________________________________
@@ -153,12 +170,14 @@ void AliITSSimuParam::PrintParameters() const{
   printf("DistanveOverVoltage       = %f \n",fDOverV);
   printf("\n");
   printf("=====  SPD parameters  =====\n");
-  printf("Bias Voltage              = %f \n",fSPDBiasVoltage);
-  printf("Threshold and sigma       = %f %f\n",fSPDThresh,fSPDSigma);
+  printf("Bias Voltage              = %f \n",fSPDBiasVoltage[0]);
+  printf("Threshold and sigma       = %f %f\n",fSPDThresh[0],fSPDSigma[0]);
   printf("Coupling Option           = %s\n",fSPDCouplOpt.Data());
   printf("Coupling value (column)   = %f\n",fSPDCouplCol);
   printf("Coupling value (row)      = %f\n",fSPDCouplRow);
   printf("Eccentricity in diffusion = %f\n",fSPDEccDiff);
+  printf("Flag to add noisy         = %d\n",fSPDAddNoisyFlag);
+  printf("Flag to remove dead       = %d\n",fSPDRemoveDeadFlag);
   printf("\n");
   printf("=====  SDD parameters  =====\n");
   printf("Electronic chips          = %d\n",fSDDElectronics);
@@ -167,12 +186,365 @@ void AliITSSimuParam::PrintParameters() const{
   printf("Dynamic Range             = %f\n",fSDDDynamicRange);
   printf("Max. ADC                  = %f\n",fSDDMaxAdc);
   printf("Charge Loss               = %f\n",fSDDChargeLoss);  
+  printf("Raw Data Format           = %d\n",fSDDRawFormat);  
   printf("\n");
   printf("=====  SSD parameters  =====\n");
-  printf("ADC per eV                = %f\n",fSSDADCpereV);
   printf("Coupling PR               = %f\n",fSSDCouplingPR);
   printf("Coupling PL               = %f\n",fSSDCouplingPL);
   printf("Coupling NR               = %f\n",fSSDCouplingNR);
   printf("Coupling NL               = %f\n",fSSDCouplingNL);
   printf("Zero Supp threshold       = %d\n",fSSDZSThreshold);
 }
+//______________________________________________________________________
+Double_t AliITSSimuParam::MobilityElectronSiEmp() const {
+    // Computes the electron mobility in cm^2/volt-sec. Taken from SILVACO
+    // International ATLAS II, 2D Device Simulation Framework, User Manual
+    // Chapter 5 Equation 5-6. An empirical function for low-field mobiliity
+    // in silicon at different tempeatures.
+    // Inputs:
+    //    none.
+    // Output:
+    //    none.
+    // Return:
+    //    The Mobility of electrons in Si at a give temprature and impurity
+    //    concentration. [cm^2/Volt-sec]
+    const Double_t km0  = 55.24; // cm^2/Volt-sec
+    const Double_t km1  = 7.12E+08; // cm^2 (degree K)^2.3 / Volt-sec
+    const Double_t kN0  = 1.072E17; // #/cm^3
+    const Double_t kT0  = 300.; // degree K.
+    const Double_t keT0 = -2.3; // Power of Temp.
+    const Double_t keT1 = -3.8; // Power of Temp.
+    const Double_t keN  = 0.73; // Power of Dopent Consentrations
+    Double_t m;
+    Double_t tT = fT,nN = fN;
+
+    if(nN<=0.0){ // Simple case.
+        if(tT==300.) return 1350.0; // From Table 5-1 at consentration 1.0E14.
+        m = km1*TMath::Power(tT,keT0);
+        return m;
+    } // if nN<=0.0
+    m = km1*TMath::Power(tT,keT0) - km0;
+    m /= 1.0 + TMath::Power(tT/kT0,keT1)*TMath::Power(nN/kN0,keN);
+    m += km0;
+    return m;
+}
+//______________________________________________________________________
+Double_t AliITSSimuParam::MobilityHoleSiEmp() const {
+    // Computes the Hole mobility in cm^2/volt-sec. Taken from SILVACO
+    // International ATLAS II, 2D Device Simulation Framework, User Manual
+    // Chapter 5 Equation 5-7 An empirical function for low-field mobiliity
+    // in silicon at different tempeatures.
+    // Inputs:
+    //    none.
+    // Output:
+    //    none.
+    // Return:
+    //    The Mobility of Hole in Si at a give temprature and impurity
+    //    concentration. [cm^2/Volt-sec]
+    const Double_t km0a = 49.74; // cm^2/Volt-sec
+    const Double_t km0b = 49.70; // cm^2/Volt-sec
+    const Double_t km1  = 1.35E+08; // cm^2 (degree K)^2.3 / Volt-sec
+    const Double_t kN0  = 1.606E17; // #/cm^3
+    const Double_t kT0  = 300.; // degree K.
+    const Double_t keT0 = -2.2; // Power of Temp.
+    const Double_t keT1 = -3.7; // Power of Temp.
+    const Double_t keN  = 0.70; // Power of Dopent Consentrations
+    Double_t m;
+    Double_t tT = fT,nN = fN;
+
+    if(nN<=0.0){ // Simple case.
+        if(tT==300.) return 495.0; // From Table 5-1 at consentration 1.0E14.
+        m = km1*TMath::Power(tT,keT0) + km0a-km0b;
+        return m;
+    } // if nN<=0.0
+    m = km1*TMath::Power(tT,keT0) - km0b;
+    m /= 1.0 + TMath::Power(tT/kT0,keT1)*TMath::Power(nN/kN0,keN);
+    m += km0a;
+    return m;
+}
+//______________________________________________________________________
+Double_t AliITSSimuParam::DiffusionCoefficientElectron() const {
+    // Computes the Diffusion coefficient for electrons in cm^2/sec. Taken
+    // from SILVACO International ATLAS II, 2D Device Simulation Framework,
+    // User Manual Chapter 5 Equation 5-53. Einstein relations for diffusion
+    // coefficient. Note: 1 cm^2/sec = 10 microns^2/nanosec.
+    // Inputs:
+    //    none.
+    // Output:
+    //    none.
+    // Return:
+    //    The Diffusion Coefficient of electrons in Si at a give temprature
+    //    and impurity concentration. [cm^2/sec]
+    // const Double_t kb = 1.3806503E-23; // Joules/degree K
+    // const Double_t qe = 1.60217646E-19; // Coulumbs.
+    const Double_t kbqe = 8.617342312E-5; // Volt/degree K
+    Double_t m = MobilityElectronSiEmp();
+    Double_t tT = fT;
+
+    return m*kbqe*tT;  // [cm^2/sec]
+}
+//______________________________________________________________________
+Double_t AliITSSimuParam::DiffusionCoefficientHole() const {
+    // Computes the Diffusion coefficient for Holes in cm^2/sec. Taken
+    // from SILVACO International ATLAS II, 2D Device Simulation Framework,
+    // User Manual Chapter 5 Equation 5-53. Einstein relations for diffusion
+    // coefficient. Note: 1 cm^2/sec = 10 microns^2/nanosec.
+    // Inputs:
+    //    none.
+    // Output:
+    //    none.
+    // Return:
+    //    The Defusion Coefficient of Hole in Si at a give temprature and
+    //    impurity concentration. [cm^2/sec]
+    //    and impurity concentration. [cm^2/sec]
+    // const Double_t kb = 1.3806503E-23; // Joules/degree K
+    // const Double_t qe = 1.60217646E-19; // Coulumbs.
+    const Double_t kbqe = 8.617342312E-5; // Volt/degree K
+    Double_t m = MobilityHoleSiEmp();
+    Double_t tT = fT;
+
+    return m*kbqe*tT;  // [cm^2/sec]
+}
+//______________________________________________________________________
+Double_t AliITSSimuParam::LorentzAngleHole(Double_t B) const {
+   // Computes the Lorentz angle for electrons in Si
+   // Input: magnetic Field in KGauss
+   // Output: Lorentz angle in radians (positive if Bz is positive)
+   // Main Reference: NIM A 497 (2003) 389–396.
+   // "An algorithm for calculating the Lorentz angle in silicon detectors", V. Bartsch et al.
+   //
+   const Double_t krH=0.70; // Hall scattering factor for Hole
+   const Double_t kT0  = 300.;       // reference Temperature (degree K).
+   const Double_t kmulow0 = 470.5;   // cm^2/Volt-sec
+   const Double_t keT0 = -2.5;       // Power of Temp.
+   const Double_t beta0 = 1.213;     // beta coeff. at T0=300K
+   const Double_t keT1 = 0.17;       // Power of Temp. for beta
+   const Double_t kvsat0 = 8.37E+06; // saturated velocity at T0=300K (cm/sec)
+   const Double_t keT2 = 0.52;       // Power of Temp. for vsat
+   Double_t tT = fT;
+   Double_t eE= 1./fDOverV;
+   Double_t muLow=kmulow0*TMath::Power(tT/kT0,keT0);
+   Double_t beta=beta0*TMath::Power(tT/kT0,keT1);
+   Double_t vsat=kvsat0*TMath::Power(tT/kT0,keT2);
+   Double_t mu=muLow/TMath::Power(1+TMath::Power(muLow*eE/vsat,beta),1/beta);
+   Double_t angle=TMath::ATan(krH*mu*B*1.E-05); // Conversion Factor
+   return angle;
+}
+//______________________________________________________________________
+Double_t AliITSSimuParam::LorentzAngleElectron(Double_t B) const {
+   // Computes the Lorentz angle for electrons in Si
+   // Input: magnetic Field in KGauss
+   // Output: Lorentz angle in radians (positive if Bz is positive)
+   // Main Reference: NIM A 497 (2003) 389–396.
+   // "An algorithm for calculating the Lorentz angle in silicon detectors", V. Bartsch et al.
+   //
+   const Double_t krH=1.15; // Hall scattering factor for Electron
+   const Double_t kT0  = 300.;       // reference Temperature (degree K).
+   const Double_t kmulow0 = 1417.0;  // cm^2/Volt-sec
+   const Double_t keT0 = -2.2;       // Power of Temp.
+   const Double_t beta0 = 1.109;     // beta coeff. at T0=300K
+   const Double_t keT1 = 0.66;       // Power of Temp. for beta
+   const Double_t kvsat0 = 1.07E+07; // saturated velocity at T0=300K (cm/sec)
+   const Double_t keT2 = 0.87;       // Power of Temp. for vsat
+   Double_t tT = fT;
+   Double_t eE= 1./fDOverV;
+   Double_t muLow=kmulow0*TMath::Power(tT/kT0,keT0);
+   Double_t beta=beta0*TMath::Power(tT/kT0,keT1);
+   Double_t vsat=kvsat0*TMath::Power(tT/kT0,keT2);
+   Double_t mu=muLow/TMath::Power(1+TMath::Power(muLow*eE/vsat,beta),1/beta);
+   Double_t angle=TMath::ATan(krH*mu*B*1.E-05);
+   return angle;
+}
+//______________________________________________________________________
+Double_t AliITSSimuParam::SpeedElectron() const {
+    // Computes the average speed for electrons in Si under the low-field
+    // approximation. [cm/sec].
+    // Inputs:
+    //    none.
+    // Output:
+    //    none.
+    // Return:
+    //    The speed the holes are traveling at due to the low field applied.
+    //    [cm/sec]
+    Double_t m = MobilityElectronSiEmp();
+
+    return m/fDOverV;  // [cm/sec]
+}
+//______________________________________________________________________
+Double_t AliITSSimuParam::SpeedHole() const {
+    // Computes the average speed for Holes in Si under the low-field
+    // approximation.[cm/sec].
+    // Inputs:
+    //    none.
+    // Output:
+    //    none.
+    // Return:
+    //    The speed the holes are traveling at due to the low field applied.
+    //    [cm/sec]
+    Double_t m = MobilityHoleSiEmp();
+
+    return m/fDOverV;  // [cm/sec]
+}
+//______________________________________________________________________
+Double_t AliITSSimuParam::SigmaDiffusion3D(Double_t l) const {
+    // Returns the Gaussian sigma^2 == <x^2+y^2+z^2> [cm^2] due to the
+    // defusion of electrons or holes through a distance l [cm] caused
+    // by an applied voltage v [volt] through a distance d [cm] in any
+    //  material at a temperature T [degree K]. The sigma diffusion when
+    //  expressed in terms of the distance over which the diffusion
+    // occures, l=time/speed, is independent of the mobility and therefore
+    //  the properties of the material. The charge distributions is given by
+    // n = exp(-r^2/4Dt)/(4piDt)^1.5. From this <r^2> = 6Dt where D=mkT/e
+    // (m==mobility, k==Boltzman's constant, T==temparature, e==electric
+    // charge. and vel=m*v/d. consiquently sigma^2=6kTdl/ev.
+    // Inputs:
+    //    Double_t l   Distance the charge has to travel.
+    // Output:
+    //    none.
+    // Return:
+    //    The Sigma due to the diffution of electrons. [cm]
+    const Double_t kcon = 5.17040258E-04; // == 6k/e [J/col or volts]
+
+    return TMath::Sqrt(kcon*fT*fDOverV*l);  // [cm]
+}
+//______________________________________________________________________
+Double_t AliITSSimuParam::SigmaDiffusion2D(Double_t l) const {
+    // Returns the Gaussian sigma^2 == <x^2+z^2> [cm^2] due to the defusion
+    // of electrons or holes through a distance l [cm] caused by an applied
+    // voltage v [volt] through a distance d [cm] in any material at a
+    // temperature T [degree K]. The sigma diffusion when expressed in terms
+    // of the distance over which the diffusion occures, l=time/speed, is
+    // independent of the mobility and therefore the properties of the
+    // material. The charge distributions is given by
+    // n = exp(-r^2/4Dt)/(4piDt)^1.5. From this <x^2+z^2> = 4Dt where D=mkT/e
+    // (m==mobility, k==Boltzman's constant, T==temparature, e==electric
+    // charge. and vel=m*v/d. consiquently sigma^2=4kTdl/ev.
+    // Inputs:
+    //    Double_t l   Distance the charge has to travel.
+    // Output:
+    //    none.
+    // Return:
+    //    The Sigma due to the diffution of electrons. [cm]
+    const Double_t kcon = 3.446935053E-04; // == 4k/e [J/col or volts]
+
+    return TMath::Sqrt(kcon*fT*fDOverV*l);  // [cm]
+}
+//______________________________________________________________________
+Double_t AliITSSimuParam::SigmaDiffusion1D(Double_t l) const {
+    // Returns the Gaussian sigma^2 == <x^2> [cm^2] due to the defusion
+    // of electrons or holes through a distance l [cm] caused by an applied
+    // voltage v [volt] through a distance d [cm] in any material at a
+    // temperature T [degree K]. The sigma diffusion when expressed in terms
+    // of the distance over which the diffusion occures, l=time/speed, is
+    // independent of the mobility and therefore the properties of the
+    // material. The charge distributions is given by
+    // n = exp(-r^2/4Dt)/(4piDt)^1.5. From this <r^2> = 2Dt where D=mkT/e
+    // (m==mobility, k==Boltzman's constant, T==temparature, e==electric
+    // charge. and vel=m*v/d. consiquently sigma^2=2kTdl/ev.
+    // Inputs:
+    //    Double_t l   Distance the charge has to travel.
+    // Output:
+    //    none.
+    // Return:
+    //    The Sigma due to the diffution of electrons. [cm]
+    const Double_t kcon = 1.723467527E-04; // == 2k/e [J/col or volts]
+
+    return TMath::Sqrt(kcon*fT*fDOverV*l);  // [cm]
+}
+//----------------------------------------------------------------------
+Double_t AliITSSimuParam::DepletedRegionThicknessA(Double_t dopCons,
+                                                 Double_t voltage,
+                                                 Double_t elecCharge,
+                                                 Double_t voltBuiltIn)const{
+    // Computes the thickness of the depleted region in Si due to the
+    // application of an external bias voltage. From the Particle Data
+    // Book, 28.8 Silicon semiconductor detectors equation 28.19 (2004)
+    // Physics Letters B "Review of Particle Physics" Volume 592, Issue 1-4
+    // July 15 2004, ISSN 0370-2693 page 263. First equation.
+    // Inputs:
+    //    Double_t dopCons           "N" doping concentration
+    //    Double_t voltage           "V" external bias voltage
+    //    Double_t elecCharge        "e" electronic charge
+    //    Double_t voltBuiltIn=0.5   "V_bi" "built-in" Voltage (~0.5V for
+    //                               resistivities typically used in detectors)
+    // Output:
+    //    none.
+    // Return:
+    //    The thickness of the depleted region
+
+    return TMath::Sqrt(2.0*(voltage+voltBuiltIn)/(dopCons*elecCharge));
+}
+//----------------------------------------------------------------------
+Double_t AliITSSimuParam::DepletedRegionThicknessB(Double_t resist,
+                                                 Double_t voltage,
+                                                 Double_t mobility,
+                                                 Double_t voltBuiltIn,
+                                                 Double_t dielConst)const{
+    // Computes the thickness of the depleted region in Si due to the
+    // application of an external bias voltage. From the Particle Data
+    // Book, 28.8 Silicon semiconductor detectors equation 28.19 (2004)
+    // Physics Letters B "Review of Particle Physics" Volume 592, Issue 1-4
+    // July 15 2004, ISSN 0370-2693 page 263. Second Equation.
+    // Inputs:
+    //    Double_t resist            "rho" resistivity (typically 1-10 kOhm cm)
+    //    Double_t voltage           "V" external bias voltage
+    //    Double_t mobility          "mu" charge carrier mobility
+    //                                  (electons 1350, holes 450 cm^2/V/s)
+    //    Double_t voltBuiltIn=0.5   "V_bi" "built-in" Voltage (~0.5V for
+    //                               resistivities typically used in detectors)
+    //    Double_t dielConst=1.E-12  "epsilon" dielectric constant = 11.9 *
+    //                                (permittivity of free space) or ~ 1 pF/cm
+    // Output:
+    //    none.
+    // Return:
+    //    The thickness of the depleted region
+
+    return TMath::Sqrt(2.8*resist*mobility*dielConst*(voltage+voltBuiltIn));
+}
+//----------------------------------------------------------------------
+Double_t AliITSSimuParam::ReverseBiasCurrent(Double_t temp,
+                                            Double_t revBiasCurT1,
+                                            Double_t tempT1,
+                                            Double_t energy)const{
+    // Computes the temperature dependance of the reverse bias current
+    // of Si detectors. From the Particle Data
+    // Book, 28.8 Silicon semiconductor detectors equation 28.21 (2004)
+    // Physics Letters B "Review of Particle Physics" Volume 592, Issue 1-4
+    // July 15 2004, ISSN 0370-2693 page 263.
+    // Inputs:
+    //    Double_t temp         The temperature at which the current is wanted
+    //    Double_t revBiasCurT1 The reference bias current at temp T1
+    //    Double_t tempT1       The temperature correstponding to revBiasCurT1
+    //    Double_t energy=1.2   Some energy [eV]
+    // Output:
+    //    none.
+    // Return:
+    //    The reverse bias current at the tempeature temp.
+    const Double_t kBoltz = 8.617343E-5; //[eV/K]
+
+    return revBiasCurT1*(temp*temp/(tempT1*tempT1))*
+        TMath::Exp(-0.5*energy*(tempT1-temp)/(kBoltz*tempT1*temp));
+}
+//______________________________________________________________________
+ void   AliITSSimuParam::SPDThresholds(const Int_t mod, Double_t& thresh, Double_t& sigma) const {
+    if(mod<0 || mod>239) {
+       thresh=0;
+       sigma=0; 
+       return;
+     } 
+     thresh=fSPDThresh[mod];
+     sigma=fSPDSigma[mod];
+     return;
+}
+//_______________________________________________________________________
+ void   AliITSSimuParam::SPDNoise(const Int_t mod,Double_t &noise, Double_t &baseline) const {
+     if(mod<0 || mod>239) {
+       noise=0;
+       baseline=0; 
+       return;
+     } 
+     noise=fSPDNoise[mod];
+     baseline=fSPDBaseline[mod];
+     return;
+}
+