Turbulent Scattering

The formalism developed by Macquart&Koay13 has been ingested into the Turbulence class for calculations of temporal smearing and angular broadening.

Turbulence

This class describes the turbulence from a single object with properties listed in the following Table:

Parameter

Unit

Description

Required?

ne

density; cm**-3

Fiducial value of electron density

Yes

l0

length; AU

Inner length scale

Yes

L0

length; pc

Outer length scale

Yes

zL

unitless

Redshift of scattering medium

Yes

beta

unitless

Exponent of turbulence

Yes

DL

length; kpc

Thickness of the object

Required for SM

lobs

length; cm

Wavelength of interest

Input for tau, theta

Here is a simple instantiation:

def_l0 = 1*u.AU
def_L0 = 0.001 * u.pc
def_ne = 1e-2 / u.cm**3
def_DL = 1 * u.kpc
def_zL = 1.
turb = Turbulence(def_ne, def_l0, def_L0)

The resultant object can then be used for scattering calculations. Note that in this instantiation, beta has a default value of 11/3 (Kolmogorov) and zL=0.

Temporal Smearing

With a Turbulence object defined as above, one can calculate the temporal smearing of a source at a given redshift and for a given observed wavelength (or frequency). Here is an example:

from astropy import constants as const
turb = Turbulence(def_ne, def_l0, def_L0, def_zL)
inu = 1 * u.GHz
lobs = (const.c/inu).to('cm')
# SM, rdiff
turb.set_SM_obj(def_DL)
turb.set_rdiff(lobs)
# tau
zsource = 2.
tau = turb.temporal_smearing(lobs, zsource)
print(tau)  # Given in ms

Angular Broadening

With a Turbulence object defined as above, one can calculate the angular broadening of a source at a given redshift and for a given observed wavelength (or frequency). Here is an example:

theta = turb.angular_broadening(lobs, zsource) # Returned in arcsec

Intervening Galaxies

One may generate a set of random draws for temporal smearing due to the ISM of intervening galaxies towards a source with given redshift using the monte_tau method:

from frb.dlas import monte_tau
zeval = np.array([0.,1.,2.])
taus = monte_tau(np.array(zeval))  # Returned unitless but in ms