* provided "as is" without express or implied warranty. *
**************************************************************************/
-/* $Id:$ */
+/* $Id$ */
///////////////////////////////////////////////////////////////////
// //
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;
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.),
fSDDDynamicRange(fgkSDDDynamicRangeDefault),
fSDDMaxAdc(0.),
fSDDChargeLoss(fgkSDDChargeLossDefault),
-fSSDADCpereV(0.),
+fSDDRawFormat(7),
fSSDCouplingPR(0),
fSSDCouplingPL(0),
fSSDCouplingNR(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);
SetSDDElectronics();
SetSDDDiffCoeff(fgkSDDDiffCoeffDefault,fgkSDDDiffCoeff1Default);
SetSDDMaxAdc((Double_t)fgkSDDMaxAdcDefault);
- SetSSDADCpereV();
SetSSDCouplings(fgkSSDCouplingPRDefault,fgkSSDCouplingPLDefault,fgkSSDCouplingNRDefault,fgkSSDCouplingNLDefault);
}
//______________________________________________________________________
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),
fSDDDynamicRange(simpar.fSDDDynamicRange),
fSDDMaxAdc(simpar.fSDDMaxAdc),
fSDDChargeLoss(simpar.fSDDChargeLoss),
-fSSDADCpereV(simpar.fSSDADCpereV),
+fSDDRawFormat(simpar.fSDDRawFormat),
fSSDCouplingPR(simpar.fSSDCouplingPR),
fSSDCouplingPL(simpar.fSSDCouplingPL),
fSSDCouplingNR(simpar.fSSDCouplingNR),
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];
+ }
}
//______________________________________________________________________
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);
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;
+}
+