__author__ = "Andrea Tramacere"
import copy
from .jetkernel_models_dic import allowed_disk_type
from .jet_paramters import *
__all__=[ 'build_emitting_region_dict','build_ExtFields_dic','BLR_constraints','DT_constraints','clean_numba']
[docs]
def build_emitting_region_dict(cosmo, beaming_expr='delta',emitters_type='electrons'):
"""
Builds a dictionary to init the :class:`.JetParameter`
objects for the emitting region:
- **R**, the radius of the emitting region in cm
- **B**, the magnetic field in G
- **beaming**, the beaming factor
- **z**, the redshift
"""
model_dic = {}
model_dic['R'] = JetModelDictionaryPar(ptype='region_size', vmin=1E3, vmax=1E30, punit='cm', froz=False, log=False,
jetkernel_par_name='core.R')
# ['region_size',0,30,'cm',False,True]
model_dic['R_H'] = JetModelDictionaryPar(ptype='region_position', vmin=0, vmax=None, punit='cm', froz=True,
jetkernel_par_name='core.R_H')
# ['region_position', 0, None, 'cm']
model_dic['B'] = JetModelDictionaryPar(ptype='magnetic_field', vmin=0, vmax=None, punit='gauss',
jetkernel_par_name='core.B')
if emitters_type=='electrons':
model_dic['NH_cold_to_rel_e'] = JetModelDictionaryPar(ptype='cold_p_to_rel_e_ratio', vmin=0, vmax=None, punit='',
froz=True, log=False,
jetkernel_par_name='emitters.NH_cold_to_rel_e')
if emitters_type=='protons':
model_dic['T_esc_e_secondaries'] = JetModelDictionaryPar(ptype='escape_time', vmin=1, vmax=None, punit='R/c',
froz=False, log=False,
val=1.0,
jetkernel_par_name='emitters.T_esc_e_secondaries')
if beaming_expr == 'bulk_theta':
model_dic['theta'] = JetModelDictionaryPar(ptype='jet-viewing-angle', vmin=0, vmax=90, punit='deg',
jetkernel_par_name='core.theta')
# ['jet-viewing-angle',0.0,None,'deg']
model_dic['BulkFactor'] = JetModelDictionaryPar(ptype='jet-bulk-factor', vmin=1.0, vmax=1E5,
punit='lorentz-factor',
jetkernel_par_name='core.BulkFactor')
# ['jet-bulk-factor',1.0,None,'Lorentz-factor']
elif beaming_expr == 'delta' or beaming_expr == '':
model_dic['beam_obj'] = JetModelDictionaryPar(ptype='beaming', vmin=1E-4, vmax=None, punit='',
jetkernel_par_name='core.beam_obj')
# ['beaming', 1, None, '']
else:
raise RuntimeError('''wrong beaming_expr="%s" value, allowed 'delta' or 'bulk_theta' ''' % (beaming_expr))
if cosmo._c is not None:
model_dic['z_cosm'] = JetModelDictionaryPar(ptype='redshift', vmin=0, vmax=None, punit='',
jetkernel_par_name='core.z_cosm')
else:
model_dic['z_cosm'] = JetModelDictionaryPar(ptype='redshift', vmin=0, vmax=None, val=0, punit='', froz=True,
jetkernel_par_name='core.z_cosm')
return model_dic
[docs]
def BLR_constraints(L_Disk):
"""Blr constraints.
Parameters
----------
L_Disk : object
Parameter controlling l disk.
Returns
-------
object
Computed result.
"""
r1_min = 1E17 * (L_Disk / 1E45) ** 0.5
r2_min = r1_min * 1.01
r2_max = r1_min * 2
print('-> BLR constraints', L_Disk, r1_min, r2_min, r2_max)
return r1_min, r2_min, r2_max
[docs]
def DT_constraints(L_Disk):
"""Dt constraints.
Parameters
----------
L_Disk : object
Parameter controlling l disk.
Returns
-------
object
Computed result.
"""
return 1E18 * (L_Disk / 1E45) ** 0.5
[docs]
def build_ExtFields_dic(EC_model_list,disk_type ):
"""Build ext fields dic.
Parameters
----------
EC_model_list : object
List of external-Compton model components.
disk_type : object
Accretion-disk template/type identifier.
Returns
-------
object
Computed value.
"""
model_dic = {}
for EC_model in EC_model_list:
if 'Disk' in EC_model:
if disk_type is not None:
model_dic['disk_type'] = JetModelDictionaryPar(ptype='Disk', vmin=None, vmax=None, punit='', froz=True,
allowed_values=allowed_disk_type,
jetkernel_par_name='core.disk_type')
model_dic['L_Disk'] = JetModelDictionaryPar(ptype='Disk', vmin=0, vmax=None, punit='erg/s',
jetkernel_par_name='Disk.L_Disk')
if disk_type == 'BB' or disk_type == 'Mono':
model_dic['T_Disk'] = JetModelDictionaryPar(ptype='Disk', vmin=0, vmax=None, punit='K',
jetkernel_par_name='Disk.T_Disk')
if disk_type == 'MultiBB':
model_dic['R_inner_Sw'] = JetModelDictionaryPar(ptype='Disk', vmin=0, vmax=None,
punit='Sw. radii',
jetkernel_par_name='Disk.R_inner_Sw')
model_dic['R_ext_Sw'] = JetModelDictionaryPar(ptype='Disk', vmin=0, vmax=None, punit='Sw. radii',
jetkernel_par_name='Disk.R_ext_Sw')
model_dic['accr_eff'] = JetModelDictionaryPar(ptype='Disk', vmin=0.06, vmax=0.1, punit='',
jetkernel_par_name='Disk.accr_eff')
model_dic['M_BH'] = JetModelDictionaryPar(ptype='Disk', vmin=0, vmax=None, punit='M_sun',
jetkernel_par_name='Disk.M_BH')
if 'BLR' in EC_model:
# r1_BLR_min, r2_BLR_min, r2_BLR_max = BLR_constraints(L_Disk)
model_dic['tau_BLR'] = JetModelDictionaryPar(ptype='BLR', vmin=0, vmax=1.0, punit='',
jetkernel_par_name='BLR.tau_BLR')
# ['BLR',0.0,1.0,'']
model_dic['R_BLR_in'] = JetModelDictionaryPar(ptype='BLR', vmin=0, vmax=None, punit='cm', froz=True,
jetkernel_par_name='BLR.R_BLR_in')
# ['BLR',0,None,'cm',True]
model_dic['R_BLR_out'] = JetModelDictionaryPar(ptype='BLR', vmin=0, vmax=None, punit='cm', froz=True,
jetkernel_par_name='BLR.R_BLR_out')
# ['BLR',0,None,'cm',True]
if 'DT' in EC_model:
model_dic['T_DT'] = JetModelDictionaryPar(ptype='DT', vmin=0, vmax=None, punit='K',
jetkernel_par_name='DT.T_DT')
# ['DT',0.0,None,'K']
model_dic['R_DT'] = JetModelDictionaryPar(ptype='DT', vmin=0, vmax=None, punit='cm',
jetkernel_par_name='DT.R_DT')
# ['DT',0,None,'cm',True]
model_dic['tau_DT'] = JetModelDictionaryPar(ptype='DT', vmin=0, vmax=1.0, punit='',
jetkernel_par_name='DT.tau_DT')
# ['DT',0.0,1.0,'']
if 'Star' in EC_model:
model_dic['L_Star'] = JetModelDictionaryPar(ptype='Star', vmin=0, vmax=None, punit='erg s-1',
jetkernel_par_name='Star.L_Star')
# ['DT',0.0,None,'K']
model_dic['T_Star'] = JetModelDictionaryPar(ptype='Star', vmin=0, vmax=None, punit='K',
jetkernel_par_name='Star.T_Star')
model_dic['theta_Star'] = JetModelDictionaryPar(ptype='Star', vmin=0, vmax=180, punit='deg',
jetkernel_par_name='Star.theta_Star')
model_dic['R_H_Star'] = JetModelDictionaryPar(ptype='Star', vmin=0, vmax=None, punit='cm',
jetkernel_par_name='Star.R_H_Star')
return model_dic
[docs]
def clean_numba(distr):
"""Clean numba.
Parameters
----------
distr : object
Parameter controlling distr.
"""
if hasattr(distr,'_py_distr_func'):
setattr(distr,'distr_func',copy.deepcopy(distr._py_distr_func))
elif hasattr(distr.distr_func,'py_func'):
setattr(distr,'distr_func',copy.deepcopy(distr.distr_func.py_func))