Source code for jetset.jet_radio_component

__author__ = "Andrea Tramacere"


import numpy as np 
from jetset.analytical_model import AnalyticalParameter
from jetset.model_parameters import ModelParameterArray
from jetset.base_model import Model
from jetset.spectral_shapes import SED

[docs] class RadioSpectrum(Model): """Simple analytical radio-spectrum component with SSA turnover. Notes ----- Implements a smooth synchrotron-like radio shape controlled by spectral slope, self-absorption turnover, high-frequency cutoff, and normalization. """ def __init__(self,nu_size=100,cosmo=None,**keywords): """Create a new `RadioSpectrum` instance. Parameters ---------- nu_size : int, optional Number of points for frequency grids. cosmo : object, optional Cosmology helper used for frame/luminosity conversions. **keywords : dict Additional keyword arguments. """ super(RadioSpectrum,self).__init__( nu_size=nu_size, cosmo=cosmo, nu_min=1E6, nu_max=1E12, **keywords) self.name='radio_spectrum' self.model_type='radio_spectrum' self.SED = SED(name=self.model_type) self.parameters = ModelParameterArray() self.parameters.add_par(AnalyticalParameter(self,name='alpha_radio',par_type='spectral-slope',val=0.0,val_min=-10.,val_max=10.,units='')) self.parameters.add_par(AnalyticalParameter(self,name='nu_ssa',par_type='turn-over freq',val=1E9,val_min=1E6,val_max=1E12,units='Hz')) self.parameters.add_par(AnalyticalParameter(self,name='nu_cut',par_type='',val=1E11,val_min=1E6,val_max=1E13,units='Hz')) self.parameters.add_par(AnalyticalParameter(self,name='nuFnu_p',par_type='flux-const',val=1E-13,val_min=1E-30,val_max=1E-5,units='erg cm2 s-1')) def _func(self,nu,nu_ssa,s2,nu_cut): return np.power(nu,2.5)*(1.+(nu/nu_ssa))**(-(s2+2.5))*np.exp(-(nu/nu_cut))*nu
[docs] def lin_func(self,nu): """Lin func. Parameters ---------- nu : object Frequency values in Hz. Returns ------- object Computed result. """ s2=self.parameters.get_par_by_name('alpha_radio').val nu_ssa=self.parameters.get_par_by_name('nu_ssa').val nuFnu_p=self.parameters.get_par_by_name('nuFnu_p').val nu_cut=self.parameters.get_par_by_name('nu_cut').val res= self._func(nu,nu_ssa,s2,nu_cut) _Norm=nuFnu_p/self._func(nu_cut,nu_ssa,s2,nu_cut) return res*_Norm