Source code for frb.em

""" Module for EM calculations
"""
from __future__ import print_function, absolute_import, division, unicode_literals

import numpy as np

from astropy import units
from astropy import constants


[docs] def em_from_halpha(sb_obs, z, T=1e4*units.K): """ Estimate EM from the observed Halpha surface brightness Follows the Reynolds 1977 formalism Args: sb_obs (Quantity): Observed surface brightness z (float): Redshift of the galaxy T (Quantity, optional): Temperature for the analysis Returns: Quantity: EM """ # Correct for surface brightness dimming sb_corr = sb_obs * (1+z)**4 # Halpha energy Ha = 6564.613 * units.Angstrom E_Ha_photon = constants.c * constants.h / Ha # Intensity in Rayleighs I_R = (sb_corr * units.ph / E_Ha_photon).to('rayleigh') # EM EM_Ha = 2.75 * units.pc / units.cm**6 * (T.to('K').value/1e4)**0.9 * I_R.to('rayleigh').value # Return return EM_Ha
[docs] def dm_from_em(EM, L, ff=1., eps=1., cloudcloud=2.): """ This follows the formalism presented in Tendulkar+2017 which follows Reynolds 1977 and Cordes+2016 Args: EM (Quantity): Emission measure L (Quantity): Linear size of the source ff (float, optional): Filling factor eps (float, optional): fractional variation inside discrete clouds due to turbulent-like density variations cloudcloud (float, optional): cloud-to-cloud density variations in the ionized region of depth L in kpc. Returns: Quantity: DM at the source; correct for (1+z)^-1 at your liking """ # DM at the source DM_s = 387 * units.pc / units.cm**3 * np.sqrt(L.to('kpc').value) * np.sqrt( ff/(cloudcloud * (1+eps**2)/4)) * np.sqrt(EM.to('pc/cm**6').value/600) # Return return DM_s