X-Git-Url: http://git.uio.no/git/?a=blobdiff_plain;ds=sidebyside;f=ITS%2FAliITSSimuParam.cxx;h=f409113222d0cca57c6a096e111633432d9e397d;hb=c37908f34a269a12183dbf4791e17c6d8c9668bc;hp=66de4b79bac82bd8e8ab9bf4401e7d2927720d7c;hpb=cd2a00451357b48dd1fcefc1ad9e435345f2af6a;p=u%2Fmrichter%2FAliRoot.git diff --git a/ITS/AliITSSimuParam.cxx b/ITS/AliITSSimuParam.cxx index 66de4b79bac..f409113222d 100644 --- a/ITS/AliITSSimuParam.cxx +++ b/ITS/AliITSSimuParam.cxx @@ -13,7 +13,7 @@ * provided "as is" without express or implied warranty. * **************************************************************************/ -/* $Id:$ */ +/* $Id$ */ /////////////////////////////////////////////////////////////////// // // @@ -33,12 +33,16 @@ const TString AliITSSimuParam::fgkSPDCouplingOptDefault = "old"; const Double_t AliITSSimuParam::fgkSPDCouplColDefault = 0.; const Double_t AliITSSimuParam::fgkSPDCouplRowDefault = 0.055; const Float_t AliITSSimuParam::fgkSPDEccDiffDefault = 0.85; +const Float_t AliITSSimuParam::fgkSPDLorentzHoleWeightDefault = 1.0; 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 Float_t AliITSSimuParam::fgkSDDTrigDelayDefault = 54.3; +const Float_t AliITSSimuParam::fgkSDDMapPrecDefault = 20.; // 20 um from laser tests +const Float_t AliITSSimuParam::fgkSDDkeVtoADCDefault = 3.42; const Double_t AliITSSimuParam::fgkSSDCouplingPRDefault = 0.01; const Double_t AliITSSimuParam::fgkSSDCouplingPLDefault = 0.01; const Double_t AliITSSimuParam::fgkSSDCouplingNRDefault = 0.01; @@ -53,33 +57,46 @@ ClassImp(AliITSSimuParam) //______________________________________________________________________ AliITSSimuParam::AliITSSimuParam(): TObject(), -fGeVcharge(0.), -fDOverV(0.), -fSPDBiasVoltage(fgkSPDBiasVoltageDefault), -fSPDThresh(fgkSPDThreshDefault), -fSPDSigma(fgkSPDSigmaDefault), -fSPDCouplOpt(0), -fSPDCouplCol(fgkSPDCouplColDefault), -fSPDCouplRow(fgkSPDCouplRowDefault), -fSPDEccDiff(0.), -fSDDElectronics(0), -fSDDDiffCoeff(0.), -fSDDDiffCoeff1(0.), -fSDDJitterError(fgkSDDJitterErrorDefault), -fSDDDynamicRange(fgkSDDDynamicRangeDefault), -fSDDMaxAdc(0.), -fSDDChargeLoss(fgkSDDChargeLossDefault), -fSSDADCpereV(0.), -fSSDCouplingPR(0), -fSSDCouplingPL(0), -fSSDCouplingNR(0), -fSSDCouplingNL(0), -fSSDZSThreshold(fgkSSDZSThresholdDefault), -fNsigmas(fgkNsigmasDefault), -fNcomps(fgkNcompsDefault), -fGaus() + fGeVcharge(0.), + fDOverV(0.), +//fSPDBiasVoltage(fgkSPDBiasVoltageDefault), +//fSPDThresh(fgkSPDThreshDefault), +//fSPDSigma(fgkSPDSigmaDefault), + fSPDCouplOpt(0), + fSPDCouplCol(fgkSPDCouplColDefault), + fSPDCouplRow(fgkSPDCouplRowDefault), + fSPDEccDiff(0.), + fSPDLorentzDrift(kTRUE), + fSPDLorentzHoleWeight(fgkSPDLorentzHoleWeightDefault), + fSPDAddNoisyFlag(kFALSE), + fSPDRemoveDeadFlag(kFALSE), + fSDDElectronics(0), + fSDDDiffCoeff(0.), + fSDDDiffCoeff1(0.), + fSDDJitterError(fgkSDDJitterErrorDefault), + fSDDDynamicRange(fgkSDDDynamicRangeDefault), + fSDDMaxAdc(0.), + fSDDChargeLoss(fgkSDDChargeLossDefault), + fSDDTrigDelay(fgkSDDTrigDelayDefault), + fSDDMapPrec(fgkSDDMapPrecDefault), + fSDDkeVtoADC(fgkSDDkeVtoADCDefault), + fSDDRawFormat(7), + fSSDLorentzDrift(kTRUE), + fSSDCouplingPR(0), + fSSDCouplingPL(0), + fSSDCouplingNR(0), + fSSDCouplingNL(0), + fSSDZSThreshold(fgkSSDZSThresholdDefault), + fNsigmas(fgkNsigmasDefault), + fNcomps(fgkNcompsDefault), + fGaus(), + fN(0.), + fT(300.) { // default constructor + SetSPDBiasVoltageAll(fgkSPDBiasVoltageDefault); + SetSPDThresholdsAll(fgkSPDThreshDefault,fgkSPDSigmaDefault); + SetSPDNoiseAll(0,0); SetGeVToCharge(); SetDistanceOverVoltage(); SetSPDCouplingOption(fgkSPDCouplingOptDefault); @@ -87,47 +104,63 @@ fGaus() SetSDDElectronics(); SetSDDDiffCoeff(fgkSDDDiffCoeffDefault,fgkSDDDiffCoeff1Default); SetSDDMaxAdc((Double_t)fgkSDDMaxAdcDefault); - SetSSDADCpereV(); SetSSDCouplings(fgkSSDCouplingPRDefault,fgkSSDCouplingPLDefault,fgkSSDCouplingNRDefault,fgkSSDCouplingNLDefault); } //______________________________________________________________________ AliITSSimuParam::AliITSSimuParam(const AliITSSimuParam &simpar): -TObject(), -fGeVcharge(simpar.fGeVcharge), -fDOverV(simpar.fDOverV), -fSPDBiasVoltage(simpar.fSPDBiasVoltage), -fSPDThresh(simpar.fSPDThresh), -fSPDSigma(simpar.fSPDSigma), -fSPDCouplOpt(simpar.fSPDCouplOpt), -fSPDCouplCol(simpar.fSPDCouplCol), -fSPDCouplRow(simpar.fSPDCouplRow), -fSPDEccDiff(simpar.fSPDEccDiff), -fSDDElectronics(simpar.fSDDElectronics), -fSDDDiffCoeff(simpar.fSDDDiffCoeff), -fSDDDiffCoeff1(simpar.fSDDDiffCoeff1), -fSDDJitterError(simpar.fSDDJitterError), -fSDDDynamicRange(simpar.fSDDDynamicRange), -fSDDMaxAdc(simpar.fSDDMaxAdc), -fSDDChargeLoss(simpar.fSDDChargeLoss), -fSSDADCpereV(simpar.fSSDADCpereV), -fSSDCouplingPR(simpar.fSSDCouplingPR), -fSSDCouplingPL(simpar.fSSDCouplingPL), -fSSDCouplingNR(simpar.fSSDCouplingNR), -fSSDCouplingNL(simpar.fSSDCouplingNL), -fSSDZSThreshold(simpar.fSSDZSThreshold), -fNsigmas(simpar.fNsigmas), -fNcomps(simpar.fNcomps), -fGaus(){ + TObject(), + fGeVcharge(simpar.fGeVcharge), + fDOverV(simpar.fDOverV), + //fSPDBiasVoltage(simpar.fSPDBiasVoltage), + //fSPDThresh(simpar.fSPDThresh), + //fSPDSigma(simpar.fSPDSigma), + fSPDCouplOpt(simpar.fSPDCouplOpt), + fSPDCouplCol(simpar.fSPDCouplCol), + fSPDCouplRow(simpar.fSPDCouplRow), + fSPDEccDiff(simpar.fSPDEccDiff), + fSPDLorentzDrift(simpar.fSPDLorentzDrift), + fSPDLorentzHoleWeight(simpar.fSPDLorentzHoleWeight), + fSPDAddNoisyFlag(simpar.fSPDAddNoisyFlag), + fSPDRemoveDeadFlag(simpar.fSPDRemoveDeadFlag), + fSDDElectronics(simpar.fSDDElectronics), + fSDDDiffCoeff(simpar.fSDDDiffCoeff), + fSDDDiffCoeff1(simpar.fSDDDiffCoeff1), + fSDDJitterError(simpar.fSDDJitterError), + fSDDDynamicRange(simpar.fSDDDynamicRange), + fSDDMaxAdc(simpar.fSDDMaxAdc), + fSDDChargeLoss(simpar.fSDDChargeLoss), + fSDDTrigDelay(simpar.fSDDTrigDelay), + fSDDMapPrec(simpar.fSDDMapPrec), + fSDDkeVtoADC(simpar.fSDDkeVtoADC), + fSDDRawFormat(simpar.fSDDRawFormat), + fSSDLorentzDrift(simpar.fSSDLorentzDrift), + fSSDCouplingPR(simpar.fSSDCouplingPR), + fSSDCouplingPL(simpar.fSSDCouplingPL), + fSSDCouplingNR(simpar.fSSDCouplingNR), + fSSDCouplingNL(simpar.fSSDCouplingNL), + fSSDZSThreshold(simpar.fSSDZSThreshold), + fNsigmas(simpar.fNsigmas), + fNcomps(simpar.fNcomps), + 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]; + } } //______________________________________________________________________ AliITSSimuParam& AliITSSimuParam::operator=(const AliITSSimuParam& source){ - // Assignment operator. - this->~AliITSSimuParam(); - new(this) AliITSSimuParam(source); - return *this; - + // Assignment operator. + this->~AliITSSimuParam(); + new(this) AliITSSimuParam(source); + return *this; + } @@ -149,16 +182,21 @@ void AliITSSimuParam::SetNLookUp(Int_t p1){ } //________________________________________________________________________ void AliITSSimuParam::PrintParameters() const{ + // Dump all parameters printf("GeVToCharge = %G\n",fGeVcharge); 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 Lorentz Drift = %d\n",fSPDLorentzDrift); + printf("Weight of Holes in Lor.Drift = %f\n",fSPDLorentzHoleWeight); + 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 +205,371 @@ void AliITSSimuParam::PrintParameters() const{ printf("Dynamic Range = %f\n",fSDDDynamicRange); printf("Max. ADC = %f\n",fSDDMaxAdc); printf("Charge Loss = %f\n",fSDDChargeLoss); + printf("Trigger Delay (ns) = %f\n",fSDDTrigDelay); + printf("Smear from map (um) = %f\n",fSDDMapPrec); + printf("keV->ADC conv. fact. = %f\n",fSDDkeVtoADC); + printf("Raw Data Format = %d\n",fSDDRawFormat); printf("\n"); printf("===== SSD parameters =====\n"); - printf("ADC per eV = %f\n",fSSDADCpereV); + printf("Flag to add Lorentz Drift = %d\n",fSSDLorentzDrift); 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 == [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 = 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 == [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 = 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 == [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 = 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 { + // Get SPD threshold values + 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 { + //Get SPD noise and baseline values + if(mod<0 || mod>239) { + noise=0; + baseline=0; + return; + } + noise=fSPDNoise[mod]; + baseline=fSPDBaseline[mod]; + return; +} +