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)
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)
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)
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)
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)
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)