Source code for scarce.silicon

""" Collection of (semi-) empiric functions describing silicon properties.
"""

import numpy as np
from scipy import constants

from scarce import constant


def get_thermal_velocity(temperature, is_electron=True):
    ''' Calculate the thermal velocity [cm/s] for a given temperature [K].

        From: IEEE TRANSACTIONS ON NUCLEAR SCIENCE, VOL. 56, NO. 3, JUNE 2009

        Note: This paper result is likely wrong since the simulated diffusion is (in contrast to the
        claim in the paper) dependent on the step size. Diffusion is only independent of
        the step size for large numbers of steps that follow a normal distribution! This
        is not statisfied.
    '''
    # Effective mass
    if is_electron:
        m_eff = 0.26 * constants.electron_mass
    else:
        m_eff = 0.386 * constants.electron_mass
    return np.sqrt(3. * constants.Boltzmann * temperature / m_eff) * 100.


[docs]def get_depletion_depth(V_bias, n_eff, temperature): ''' Depletion depth [um] of silcon with an effective doping concentration n_eff [10^12 /cm^3] at a temperature [K] and reverse bias V_bias [V]. Check/citetation of formulars needed!''' # Relative permitivity of silicon epsilon_r = constant.epsilon_s / constants.epsilon_0 V_bi = get_diffusion_potential(n_eff=n_eff, temperature=temperature) # Depletion depth [m] return np.sqrt( 2. * constants.epsilon_0 * epsilon_r * (V_bi + V_bias) / (constants.elementary_charge * n_eff * 10 ** 6))
[docs]def get_depletion_voltage(n_eff, distance): """ This function returns the full depletion Voltage [V] as a function of the effective doping concentration Neff [10^12 /cm^-3] and the distance between electrodes [um]. Formular is standard and for example used in: G. Kramberger et al., Nucl. Inst. And. Meth. A 476 (2002) 645-651 'Determination of effective trapping times for electrons and holes in irradiated silicon'. """ return constants.elementary_charge * (n_eff / (constant.epsilon_s) * distance ** 2. / 2 * 1e6)
[docs]def get_diffusion_potential(n_eff, temperature): ''' Diffusion potential [V] as a function of the effective doping concentration n_eff [10^12 / cm^3] and the temperature [K]. Check/citetation of formulars needed!''' # [10^12/cm^3] empirical fit at K = 300 range N_i = 9.38 * 10 ** 7. * \ (temperature / 300.) ** 2 * np.exp(-6884. / temperature) # Diffusion potential in thermal equilibrium [V] return constants.Boltzmann * (temperature / constants.elementary_charge * np.log(n_eff ** 2. / N_i ** 2))
[docs]def get_eff_acceptor_concentration(fluence, n_eff_0, is_ntype, is_oxygenated): """ Effective acceptor concentration [10^12 cm^-3] of irradiated n- and p- type silicon with and without oxygen enriched as a function of the fluence [10^12 cm^-2]. The data can be desribed by different line fits. The parameters were extracted from a plot taken for n-type silicon from: CERN/LHCC 2000-009 LEB Status Report/RD48 31 Dec. 1999 and for p-type silicon from: RD50 Status Report 2006 CERN-LHCC-2007-005, p. 4-6 Due to the difference in the data for different technologies a rather large error on the propotionality factor of 10% is assumed. """ fluence = np.atleast_1d(fluence) # Constants if is_ntype: # n-type silicon # [cm^-1], slope before type inversion beta_n = -5.5e-2 # [cm^-1], slope after type inversion, standart silicon FZ beta_n_fz = 2.83e-2 # [cm^-1], slope after type inversion, oxygenated silicon FZ beta_n_ofz = 0.94e-2 Phi_inv = -n_eff_0 / beta_n # Inversion point N_eq [10^14 cm^-2] # After type inversion if is_oxygenated: # Oxygenated silicon n_eff = beta_n_ofz * (fluence - Phi_inv) else: # Standart silicon n_eff = beta_n_fz * (fluence - Phi_inv) # Before type inversion n_eff[fluence < Phi_inv] = n_eff_0 + \ beta_n * fluence[fluence < Phi_inv] else: # p-type silicons beta_n_fz = 2.3e-2 # [cm^-1] beta_n_ofz = 2.7e-2 # [cm^-1] if is_oxygenated: # Oxygenated silicon n_eff = n_eff_0 + beta_n_ofz * fluence else: # Standart silicon n_eff = n_eff_0 + beta_n_fz * fluence return n_eff
[docs]def get_free_path(fluence, e_field, temperature, is_electron=True): ''' Calculate mean free path [cm] of charge carriers from trapping propability and the velocity. The trapping propability is a function of the fluence and the velocity is a function of the electric field and the temperature. The electric field itself depends on the electrode geometry and the bias voltage. velocity = get_mobility(e_field, temperature, is_electron) * e_field trapping_time = get_trapping(fluence, is_electron, paper=1) ''' velocity = get_mobility(e_field, temperature, is_electron) * e_field trapping_time = get_trapping(fluence, is_electron, paper=1) return velocity * trapping_time * 10e-9
[docs]def get_mobility(e_field, temperature, is_electron): ''' Calculate the mobility [cm^2/Vs] of charge carriers in silicon from the electrical field (E [V/cm]) the temperature (T [K]) and the charge carrier type (isElectron [0/1] otherwise hole). Formular derived from measured data of high purity silicon and the corresponding fit function parameters are used here. From: C. Jacononi et al., Solid state electronics, 1977, vol 20., p. 87 'A review of some charge transport properties of silicon' Note ---- The doping concentration is irrelevant for n_eff < 10^16/cm^3 ''' if is_electron: v_m = 1.53e9 * temperature ** (-0.87) # [cm/s] E_c = 1.01 * temperature ** 1.55 # [V/cm] beta = 2.57e-2 * temperature ** 0.66 else: # Holes v_m = 1.62e8 * temperature ** (-0.52) # [cm/s] E_c = 1.24 * temperature ** 1.68 # [V/cm] beta = 0.46 * temperature ** 0.17 mu = v_m / E_c / (1. + (np.abs(e_field) / E_c) ** beta) ** (1. / beta) return mu
[docs]def get_resistivity(n_eff, is_n_type=True, temperature=300, e_field=1e3): ''' Calculate the resitivity from: The effective doping concentration n_eff [10^12 / cm^3] the mobility [cm^2/Vs] for n- and p-type silicon. The mobility istself is a function of the temperature [K] and the electric field [V/cm]. From http://ecee.colorado.edu/~bart/book/mobility.htm TODO: If you take the mobility[E_field] equation seriously, then there is no constant resitivity since the mobility depends also on the electric field. For low E-Fields <= 1000 V/cm the mobility is independent of the E flied and thus the resistivity. Likely this parameter is always given in low field approximation?! Source needed! ''' mobility = get_mobility(e_field, temperature, is_electron=is_n_type) return 1. / (constants.e * n_eff * mobility * 1e12)
[docs]def get_trapping(fluence, is_electron, paper=1): ''' Calculate the trapping time tr (e^-(tr) in ns) of charge carriers in silicon as a function of the fluence [Neq/cm^2]. There was also a dependence on the temperature measured, that is omitted here! ''' # Assume 100 us before irradiation try: fluence[0] except TypeError: if fluence == 0.: return 100000. if paper == 1: # Newer paper where the finding was that there is no difference # in electron / hole trapping propability. Electron trapping is similar # to Kramberger et. al. but hole trapping much lower. # IEEE TRANSACTIONS ON NUCLEAR SCIENCE, VOL. 51, NO. 6, DECEMBER 2004 # 'Measurement of Trapping Time Constants in # Proton-Irradiated Silicon Pad Detectors' if is_electron: beta = 5.13e-16 # [cm^2/ns] # beta_error = 0.16e-16 # [cm^2/ns] else: beta = 5.04e-16 # [cm^2/ns] # beta_error = 0.18e-16 # [cm^2/ns] tr = 1. / (fluence * beta) # tr_error = 1. / (fluence * beta ** 2) * beta_error return tr elif paper == 2: # Oldest most cited reference, with irradiation to 2 e 14 only. # Calculates the trapping time tr (e^-(tr) in ns) of charge carriers in # silicon at a temperature of T = 263 K as a function of the # fluence. This was measured with a laser and # planar silicon sensors with a fluence up to 2*10^14 Neq/cm^2. There # was a linear behaviour between fluence and the effective trapping # propability measured intepended of the silicon type (oxygenated or # not and with different doping concentrations) from: # G. Kramberger et al., Nucl. Inst. And. Meth. A 476 (2002) 645-651 # 'Determination of effective trapping times for electrons and holes # in irradiated silicon' # Also compatible values for neutron were archieved in a follow up paper # G. Kramberger et al.NIM A481 2002 297-305 # There a dependence on the particle type was found, making proton irradiation more severe and # this does not scale with NIEL! if is_electron: beta = 4.1e-16 # [cm^2/ns] # beta_error = 0.3e-16 # [cm^2/ns] else: beta = 6.0e-16 # [cm^2/ns] # beta_error = 0.3e-16 # [cm^2/ns] tr = 1. / (fluence * beta) # tr_error = 1. / (fluence * beta ** 2) * beta_error return tr else: raise RuntimeError('Unknown paper selected!')