Source code for frb.experiment

""" Module for calculations related to FRB experiments
"""

from __future__ import print_function, absolute_import, division, unicode_literals

import numpy as np

import importlib_resources

from astropy import units as u

from frb import utils

[docs] class Experiment(object): """ """
[docs] def __init__(self, name): """ Parameters ---------- name : str See YAML files in data/experiment """ self.name = name # self.setup()
[docs] def setup(self): """ Load the characteristics of the experiment """ self.data_file=importlib_resources.files('frb.data.experiments')/f'{self.name.lower()}.yaml' self.data = utils.loadyaml(self.data_file)
[docs] def signal_to_noise(self, frb, beta=1., T_Sky=None, t_scatt=None): """ Follows Cordes & McLaughlin 2003 Parameters ---------- frb : FRB beta : float, optional Factor for digitization losses t_scatt : Quantity, optional Scattering time Returns ------- s2n : float """ # TODO -- Add t_samp to experiment data t_samp = 0 * u.s # t_scatt if t_scatt is None: try: t_scatt = frb.t_scatt except AttributeError: t_scatt = 0.*u.s # t_chan (Lorimer & Kramer 2005) t_chan = 8.3e-6*u.s * (self.data['Dnu'].to('MHz').value/self.data['Channels']) * ( frb.nu_c.to('GHz').value)**(-3) * frb.DM.to('pc/cm**3').value # Wb Wb = np.sqrt(frb.Wi**2 + t_chan**2 + t_samp**2 + t_scatt**2) # T_Sky if T_Sky is None: T_Sky = utils.Tsky(frb.nu_c) # sqrt_term = np.sqrt(Wb/(self.data['np']*self.data['Dnu'])) # Here we go s2n = frb.S * self.data['G'] * frb.Wi / beta / ( self.data['Trec'] + T_Sky) / sqrt_term # Return return s2n.decompose()
def __repr__(self): txt = '<{:s}: name={:s} data={}'.format( self.__class__.__name__, self.name, self.data) # Finish txt = txt + '>' return (txt)