Example #1
0
    def __init__(self, mchi, a, b, tempkd, bree, braa, omegah2=0.12):
        # Initialize the Input_Interface
        self._sII = InputInterface(locate_sm_file())

        # The mass of the dark-matter particle
        self._sMchi = mchi  # in MeV
        # The s-wave and p-wave parts of <sigma v>
        self._sSwave = a  # in cm^3/s
        self._sPwave = b  # in cm^3/s
        # The dark matter decoupling temperature in MeV
        # For Tkd=0, the dark matter partices stays in
        # kinetic equilibrium with the SM heat bath
        self._sTkd = tempkd  # in MeV
        # The injection energy
        self._sE0 = self._sMchi  # in MeV

        # The branching ratio into electron-positron pairs
        self._sBRee = bree
        # The branching ratio into two photons
        self._sBRaa = braa

        # The density parameter of dark matter
        self._sOmgh2 = omegah2

        # Call the super constructor
        super(AnnihilationModel, self).__init__(self._sE0, self._sII)
Example #2
0
    def __init__(self, mphi, tau, temp0, n0a, bree, braa):
        # Initialize the Input_Interface
        self._sII = InputInterface(locate_sm_file())

        # The mass of the decaying particle
        self._sMphi = mphi  # in MeV
        # The lifetime of the decaying particle
        self._sTau = tau  # in s
        # The injection energy
        self._sE0 = self._sMphi / 2.  # in MeV

        # The number density of the mediator
        # (relative to photons) ...
        self._sN0a = n0a
        # ... at T = temp0 ...
        self._sT0 = temp0  # in MeV
        # ... corresponding to t = t(temp0)
        self._st0 = self._sII.time(self._sT0)

        # The branching ratio into electron-positron pairs
        self._sBRee = bree
        # The branching ratio into two photons
        self._sBRaa = braa

        # Call the super constructor
        super(DecayModel, self).__init__(self._sE0, self._sII)
Example #3
0
    def __init__(self, input_file):
        # Initialize the Input_Interface
        self._sII = InputInterface(input_file)

        # The mass of the decaying particle
        self._sMphi = self._sII.parameter("mphi")  # in MeV
        # The lifetime of the decaying particle
        self._sTau = self._sII.parameter("tau")  # in s
        # The injection energy
        self._sE0 = self._sMphi / 2.

        # The number density of the decaying particle
        # as a function of temperature
        self._number_density = lambda T: self._sII.cosmo_column(5, T)

        # The branching ratio into electron-positron pairs
        self._sBRee = self._sII.parameter("bree")
        # The branching ratio into two photons
        self._sBRaa = self._sII.parameter("braa")

        # Call the super constructor
        super(EmModel, self).__init__(self._sE0, self._sII)
Example #4
0
class EmModel(AbstractModel):
    def __init__(self, input_file):
        # Initialize the Input_Interface
        self._sII = InputInterface(input_file)

        # The mass of the decaying particle
        self._sMphi = self._sII.parameter("mphi")  # in MeV
        # The lifetime of the decaying particle
        self._sTau = self._sII.parameter("tau")  # in s
        # The injection energy
        self._sE0 = self._sMphi / 2.

        # The number density of the decaying particle
        # as a function of temperature
        self._number_density = lambda T: self._sII.cosmo_column(5, T)

        # The branching ratio into electron-positron pairs
        self._sBRee = self._sII.parameter("bree")
        # The branching ratio into two photons
        self._sBRaa = self._sII.parameter("braa")

        # Call the super constructor
        super(EmModel, self).__init__(self._sE0, self._sII)

    # ABSTRACT METHODS ##################################################################

    def _temperature_range(self):
        # The number of degrees-of-freedom to span
        mag = 2.
        # Calculate the approximate decay temperature
        Td = self._sII.temperature(self._sTau)
        # Calculate Tmin and Tmax from Td
        Td_ofm = log10(Td)
        # Here we choose -1.5 (+0.5) orders of magnitude
        # below (above) the approx. decay temperature,
        # since the main part happens after t = \tau
        Tmin = 10.**(Td_ofm - 3. * mag / 4.)
        Tmax = 10.**(Td_ofm + 1. * mag / 4.)

        return (Tmin, Tmax)

    def _source_photon_0(self, T):
        return self._sBRaa * 2. * self._number_density(T) * (hbar / self._sTau)

    def _source_electron_0(self, T):
        return self._sBRee * self._number_density(T) * (hbar / self._sTau)

    def _source_photon_c(self, E, T):
        EX = self._sE0

        x = E / EX
        y = me2 / (4. * EX**2.)

        if 1. - y < x:
            return 0.

        _sp = self._source_electron_0(T)

        # Divide by 2. since only one photon is produced
        return (_sp / EX) * (alpha / pi) * (1. + (1. - x)**2.) / x * log(
            (1. - x) / y)
Example #5
0
class AnnihilationModel(AbstractModel):
    def __init__(self, mchi, a, b, tempkd, bree, braa, omegah2=0.12):
        # Initialize the Input_Interface
        self._sII = InputInterface(locate_sm_file())

        # The mass of the dark-matter particle
        self._sMchi = mchi  # in MeV
        # The s-wave and p-wave parts of <sigma v>
        self._sSwave = a  # in cm^3/s
        self._sPwave = b  # in cm^3/s
        # The dark matter decoupling temperature in MeV
        # For Tkd=0, the dark matter partices stays in
        # kinetic equilibrium with the SM heat bath
        self._sTkd = tempkd  # in MeV
        # The injection energy
        self._sE0 = self._sMchi  # in MeV

        # The branching ratio into electron-positron pairs
        self._sBRee = bree
        # The branching ratio into two photons
        self._sBRaa = braa

        # The density parameter of dark matter
        self._sOmgh2 = omegah2

        # Call the super constructor
        super(AnnihilationModel, self).__init__(self._sE0, self._sII)

    # DEPENDENT QUANTITIES ##############################################################

    def _number_density(self, T):
        rho_d0 = 8.095894680377574e-35 * self._sOmgh2  # DM density today in MeV^4
        T0 = 2.72548 * 8.6173324e-11  # CMB temperature today in MeV

        sf_ratio = self._sII.scale_factor(T0) / self._sII.scale_factor(T)

        return rho_d0 * sf_ratio**3. / self._sMchi

    def _dm_temperature(self, T):
        if T >= self._sTkd:
            return T

        sf_ratio = self._sII.scale_factor(
            self._sTkd) / self._sII.scale_factor(T)

        return self._sTkd * sf_ratio**2.

    def _sigma_v(self, T):
        swave_nu = self._sSwave / ((hbar**2.) * (c_si**3.))
        pwave_nu = self._sPwave / ((hbar**2.) * (c_si**3.))

        v2 = 6. * self._dm_temperature(T) / self._sMchi

        return swave_nu + pwave_nu * v2

    # ABSTRACT METHODS ##################################################################

    def _temperature_range(self):
        # The number of degrees-of-freedom to span
        mag = 4.
        # Tmax is determined by the Be7 threshold
        # (The factor 0.5 takes into account effects
        # of the high-energy tail)
        Tmax = me2 / (22. * .5 * Emin)
        # For smaller T the annihilation rate is suppressed
        # --> falls off at least with T^(-6)
        Tmin = 10.**(log10(Tmax) - mag)

        return (Tmin, Tmax)

    def _source_photon_0(self, T):
        return self._sBRaa * (self._number_density(T)**2.) * self._sigma_v(T)

    def _source_electron_0(self, T):
        return self._sBRee * .5 * (self._number_density(T)**
                                   2.) * self._sigma_v(T)

    def _source_photon_c(self, E, T):
        EX = self._sE0

        x = E / EX
        y = me2 / (4. * EX**2.)

        if 1. - y < x:
            return 0.

        _sp = self._source_electron_0(T)

        # Divide by 2. since only one photon is produced
        return (_sp / EX) * (alpha / pi) * (1. + (1. - x)**2.) / x * log(
            (1. - x) / y)
Example #6
0
class DecayModel(AbstractModel):
    def __init__(self, mphi, tau, temp0, n0a, bree, braa):
        # Initialize the Input_Interface
        self._sII = InputInterface(locate_sm_file())

        # The mass of the decaying particle
        self._sMphi = mphi  # in MeV
        # The lifetime of the decaying particle
        self._sTau = tau  # in s
        # The injection energy
        self._sE0 = self._sMphi / 2.  # in MeV

        # The number density of the mediator
        # (relative to photons) ...
        self._sN0a = n0a
        # ... at T = temp0 ...
        self._sT0 = temp0  # in MeV
        # ... corresponding to t = t(temp0)
        self._st0 = self._sII.time(self._sT0)

        # The branching ratio into electron-positron pairs
        self._sBRee = bree
        # The branching ratio into two photons
        self._sBRaa = braa

        # Call the super constructor
        super(DecayModel, self).__init__(self._sE0, self._sII)

    # DEPENDENT QUANTITIES ##############################################################

    def _number_density(self, T):
        sf_ratio = self._sII.scale_factor(
            self._sT0) / self._sII.scale_factor(T)

        delta_t = self._sII.time(T) - self._st0
        n_gamma = (2. * zeta3) * (self._sT0**3.) / (pi**2.)

        return self._sN0a * n_gamma * sf_ratio**3. * exp(-delta_t / self._sTau)

    # ABSTRACT METHODS ##################################################################

    def _temperature_range(self):
        # The number of degrees-of-freedom to span
        mag = 2.
        # Calculate the approximate decay temperature
        Td = self._sII.temperature(self._sTau)
        # Calculate Tmin and Tmax from Td
        Td_ofm = log10(Td)
        # Here we choose -1.5 (+0.5) orders of magnitude
        # below (above) the approx. decay temperature,
        # since the main part happens after t = \tau
        Tmin = 10.**(Td_ofm - 3. * mag / 4.)
        Tmax = 10.**(Td_ofm + 1. * mag / 4.)

        return (Tmin, Tmax)

    def _source_photon_0(self, T):
        return self._sBRaa * 2. * self._number_density(T) * (hbar / self._sTau)

    def _source_electron_0(self, T):
        return self._sBRee * self._number_density(T) * (hbar / self._sTau)

    def _source_photon_c(self, E, T):
        EX = self._sE0

        x = E / EX
        y = me2 / (4. * EX**2.)

        if 1. - y < x:
            return 0.

        _sp = self._source_electron_0(T)

        # Divide by 2. since only one photon is produced
        return (_sp / EX) * (alpha / pi) * (1. + (1. - x)**2.) / x * log(
            (1. - x) / y)