Temporal evolution, two zones, cooling+acc

import warnings
warnings.filterwarnings('ignore')
import matplotlib.pyplot as plt
import numpy as np
import jetset
print('tested on jetset',jetset.__version__)
tested on jetset 1.2.2

This is a very preliminary documentation for the temporal evolution capabilities of jetset. Here we show how to create a decopuled radiative+acceleration region, and how to evolve the system in order to generate both particle spectra, SEDs, and lightcurves

To have full understanding of the analysis presented in this tutorial, it is advised to read the paper Tramacere et al. (2011) [Tramacere2011] for the understanding of stochastic and first order acceleration, and Tramacere et al (2022) [Tramacere2022] for the coupling of radiative and acceleration regions.

definition of the injected particle distribution (q_inj), and of the jet model for the radiative region

from jetset.jet_emitters_factory import InjEmittersFactory
from jetset.jet_model import Jet
jet_model=Jet()
q_inj=InjEmittersFactory().create_inj_emitters('pl',emitters_type='electrons',normalize=True)
q_inj.parameters.gmin.val=9
q_inj.parameters.gmax.val=10
q_inj.parameters.p.val=0.5

jet_model.parameters.beam_obj.val=30
jet_model.parameters.B.val=0.2
jet_model.parameters.z_cosm.val=0.03
jet_model.parameters.R.val=5E15

here we set some relevant parameters taht will be described in detail in the next version of the documentation

flare_duration=1.0E5
duration=flare_duration*10
t_D0=1.5E5
t_A0=2.5E4
T_esc_rad=1E60
L_inj=5.0E39
E_acc_max=4E60
Delta_R_acc_ratio=0.1
B_ratio=1.0
T_SIZE=2E4
NUM_SET=500
Diff_Index=2.0
Acc_Index=1.0

Here we instantiate the JetTimeEvol object, passing the radiative region jet model, and the injected particle class.

from jetset.jet_timedep import JetTimeEvol
temp_ev_acc=JetTimeEvol(jet_rad=jet_model,Q_inj=q_inj,inplace=True)
==> par: z_cosm from model: jet_leptonicacc_region linked to same parameter in model jet_leptonic

The IC cooling is switched off, as default, to make the process faster. to switch on the IC cooling temp_ev_acc.IC_cooling='on'

Now, we setup some relevant parameters

temp_ev_acc.rad_region.jet.nu_min=1E8
temp_ev_acc.acc_region.jet.nu_min=1E8
T_SIZE=np.int(T_SIZE)

if Delta_R_acc_ratio is not None:
    temp_ev_acc.parameters.Delta_R_acc.val=temp_ev_acc.parameters.R_rad_start.val*Delta_R_acc_ratio

T_esc_acc=t_A0/(temp_ev_acc.parameters.Delta_R_acc.val/3E10)*2



temp_ev_acc.parameters.duration.val=duration
temp_ev_acc.parameters.TStart_Acc.val=0
temp_ev_acc.parameters.TStop_Acc.val=flare_duration
temp_ev_acc.parameters.TStart_Inj.val=0
temp_ev_acc.parameters.TStop_Inj.val=flare_duration
temp_ev_acc.parameters.T_esc_acc.val=T_esc_acc
temp_ev_acc.parameters.T_esc_rad.val=T_esc_rad
temp_ev_acc.parameters.t_D0.val=t_D0
temp_ev_acc.parameters.t_A0.val=t_A0
temp_ev_acc.parameters.Esc_Index_acc.val=Diff_Index-2
temp_ev_acc.parameters.Esc_Index_rad.val=0
temp_ev_acc.parameters.Acc_Index.val=Acc_Index
temp_ev_acc.parameters.Diff_Index.val=Diff_Index
temp_ev_acc.parameters.t_size.val=T_SIZE
temp_ev_acc.parameters.num_samples.val=NUM_SET
temp_ev_acc.parameters.E_acc_max.val=E_acc_max
temp_ev_acc.parameters.L_inj.val=L_inj


temp_ev_acc.parameters.gmin_grid.val=1.0
temp_ev_acc.parameters.gmax_grid.val=1E8
temp_ev_acc.parameters.gamma_grid_size.val=1500

temp_ev_acc.parameters.B_acc.val=temp_ev_acc.rad_region.jet.parameters.B.val*B_ratio
temp_ev_acc.init_TempEv()
temp_ev_acc.show_model()
--------------------------------------------------------------------------------
JetTimeEvol model description
--------------------------------------------------------------------------------

physical setup:

--------------------------------------------------------------------------------
Table length=29
namepar typevalunitsval*units*log
delta ttime5.000000e+01s0.00029979245799999996R/cFalse
log. samplingtime0.000000e+00NoneFalse
R/ctime1.667820e+05s1.0R/cFalse
IC coolingoffNoneFalse
Sync coolingonNoneFalse
Adiab. coolingonNoneFalse
Reg. expansionoffNoneFalse
Diff coeff6.666667e-06s-1NoneFalse
Acc coeff4.000000e-05s-1NoneFalse
Diff index2.000000e+00NoneFalse
Acc index1.000000e+00s-1NoneFalse
Tesc acctime5.003461e+04s3.0R_acc/cFalse
Eacc maxenergy4.000000e+60ergNoneFalse
Tesc radtime1.667820e+65s1e+60R/cFalse
Delta R accaccelerator_width5.000000e+14cmNoneFalse
B accmagnetic field2.000000e-01cmNoneFalse
R_rad rad startregion_position5.000000e+15cmNoneFalse
R_H rad startregion_position1.000000e+17cmNoneFalse
T_A0=1/ACC_COEFFtime2.500000e+04s0.149896229R/cFalse
T_D0=1/DIFF_COEFFtime1.500000e+05s0.899377374R/cFalse
T_DA0=1/(2*DIFF_COEFF)time7.500000e+04s0.449688687R/cFalse
gamma Lambda Turb. max1.173358e+11NoneFalse
gamma Lambda Coher. max1.173358e+10NoneFalse
gamma eq Syst. Acc (synch. cool)7.832383e+05NoneFalse
gamma eq Diff. Acc (synch. cool)1.309535e+05NoneFalse
T cooling(gamma_eq=gamma_eq_Diff)1.477242e+05sNoneFalse
T cooling(gamma_eq=gamma_eq_Sys)2.469874e+04sNoneFalse
T min. synch. cooling1.934500e+02sNoneFalse
L inj (electrons)injected lum.5.000000e+39erg/sNoneFalse
model parameters:

--------------------------------------------------------------------------------
Table length=30
model namenamepar typeunitsvalphys. bound. minphys. bound. maxlogfrozen
jet_time_evdurationtime_grids1.000000e+060.000000e+00--FalseTrue
jet_time_evgmin_gridgamma_grid1.000000e+000.000000e+00--FalseTrue
jet_time_evgmax_gridgamma_grid1.000000e+080.000000e+00--FalseTrue
jet_time_evgamma_grid_sizegamma_grid1.500000e+030.000000e+00--FalseTrue
jet_time_evTStart_Acctime_grids0.000000e+000.000000e+00--FalseTrue
jet_time_evTStop_Acctime_grids1.000000e+050.000000e+00--FalseTrue
jet_time_evTStart_Injtime_grids0.000000e+000.000000e+00--FalseTrue
jet_time_evTStop_Injtime_grids1.000000e+050.000000e+00--FalseTrue
jet_time_evT_esc_accescape_time(R_acc/c)*3.000000e+00----FalseTrue
jet_time_evEsc_Index_accfp_coeff_index0.000000e+00----FalseTrue
jet_time_evt_D0acceleration_times1.500000e+050.000000e+00--FalseTrue
jet_time_evt_A0acceleration_times2.500000e+040.000000e+00--FalseTrue
jet_time_evDiff_Indexfp_coeff_indexs2.000000e+000.000000e+00--FalseTrue
jet_time_evAcc_Indexfp_coeff_index1.000000e+00----FalseTrue
jet_time_evDelta_R_accaccelerator_widthcm5.000000e+140.000000e+00--FalseTrue
jet_time_evB_accmagnetic_fieldG2.000000e-010.000000e+00--FalseTrue
jet_time_evE_acc_maxacc_energyerg4.000000e+600.000000e+00--FalseTrue
jet_time_evLambda_max_Turbturbulence_scalecm1.000000e+150.000000e+00--FalseTrue
jet_time_evLambda_choer_Turb_factorturbulence_scalecm1.000000e-010.000000e+00--FalseTrue
jet_time_evT_esc_radescape_time(R/c)*1.000000e+60----FalseTrue
jet_time_evEsc_Index_radfp_coeff_index0.000000e+00----FalseTrue
jet_time_evR_rad_startregion_sizecm5.000000e+150.000000e+00--FalseTrue
jet_time_evR_H_rad_startregion_positioncm1.000000e+170.000000e+00--FalseTrue
jet_time_evm_Bmagnetic_field_index1.000000e+001.000000e+002.000000e+00FalseTrue
jet_time_evt_jet_expexp_start_times1.000000e+050.000000e+00--FalseTrue
jet_time_evbeta_exp_Rbeta_expansionv/c*1.000000e+000.000000e+001.000000e+00FalseTrue
jet_time_evB_radmagnetic_fieldG2.000000e-010.000000e+00--FalseTrue
jet_time_evt_sizetime_grid2.000000e+040.000000e+00--FalseTrue
jet_time_evnum_samplestime_ev_output5.000000e+020.000000e+00--FalseTrue
jet_time_evL_injinj_luminosityerg / s5.000000e+390.000000e+00--FalseTrue
temp_ev_acc.plot_time_profile()
<jetset.plot_sedfit.PlotTempEvDiagram at 0x7f9637ab46d0>
../../../_images/Temp_Ev_two_zones_acc_and_cooling_16_1.png

we do not want to evolve the particle in the ``jet_rad``, so we set ``only_injection=True``, and we set ``do_injection=True`` to injet the particle defined by ``q_inj``

setting cache_SEDs_rad=True will generate and cache all the SED at any time of the NUM_SET. This will increase the computational time during the run. Anyhow, will speed up the computation of SEDs and light curves. Moreover, these SEDs will be saved in the model, and read if you will reload the model in the future.

setting cache_SEDs_acc=True will generate and cache also the SEDs in the acceleration region.

only_injection=True
do_injection=True
plot_fit_model=True
plot_fit_distr=True
plot_emitters=True
plot_lcs=True
delta_t_out=1000
eval_cross_time=False
rest_frame='obs'
temp_ev_acc.run(only_injection=only_injection,
                do_injection=do_injection,
                cache_SEDs_acc=True,
                cache_SEDs_rad=True)
temporal evolution running
0%|          | 0/20000 [00:00<?, ?it/s]
temporal evolution completed
caching SED for each saved distribution: start
0%|          | 0/500 [00:00<?, ?it/s]
caching SED for each saved distribution: done
caching SED for each saved distribution: start
0%|          | 0/500 [00:00<?, ?it/s]
caching SED for each saved distribution: done

Particle spectrum in the radiative region

p=temp_ev_acc.plot_tempev_emitters(region='rad',loglog=False,energy_unit='gamma',pow=0)
p.ax.axvline(temp_ev_acc.temp_ev.gamma_eq_t_A, ls='--')
p.ax.axvline(temp_ev_acc.temp_ev.gamma_eq_t_DA, ls='--')
p.setlim(x_max=1E7,x_min=1,y_min=1E-18,y_max=100)
../../../_images/Temp_Ev_two_zones_acc_and_cooling_22_0.png

Particle spectrum in the acceleration region

p=temp_ev_acc.plot_tempev_emitters(region='acc',loglog=False,energy_unit='gamma',pow=0)
p.ax.axvline(temp_ev_acc.temp_ev.gamma_eq_t_A, ls='--')
p.ax.axvline(temp_ev_acc.temp_ev.gamma_eq_t_DA, ls='--')
p.setlim(x_max=1E7,x_min=1,y_min=1E-30,y_max=100)
../../../_images/Temp_Ev_two_zones_acc_and_cooling_24_0.png

SEDs in the acceleration region

p=temp_ev_acc.plot_tempev_model(region='rad',sed_data=None, use_cached = True)
p.setlim(y_min=1E-18,x_min=1E7)
../../../_images/Temp_Ev_two_zones_acc_and_cooling_26_0.png

SEDs in the acceleration region

p=temp_ev_acc.plot_tempev_model(region='acc',sed_data=None, use_cached = True)
p.setlim(y_min=1E-18,x_min=1E7)
../../../_images/Temp_Ev_two_zones_acc_and_cooling_28_0.png

We generate a lightcurve in the range nu1=2.4E22 Hz, nu2=7.2E25 Hz, without the effect of the light crossing time, in the observer frame

lg=temp_ev_acc.rad_region.make_lc(nu1=2.4E22,nu2=7.2E25,name='gamma',eval_cross_time=False,delta_t_out=100,use_cached=True,frame='obs')
lg
Table length=344
timefluxR_blobt_blob
serg / (cm2 s)cms
float64float64float64float64
0.00.05000000000000000.00.0
100.00.05000000000000000.02912.6213592233007
200.00.05000000000000000.05825.242718446601
300.04.4098133455386786e-865000000000000000.08737.864077669903
400.01.8338347214189153e-755000000000000000.011650.485436893203
500.04.619818537702253e-615000000000000000.014563.106796116504
600.04.074119989099911e-555000000000000000.017475.728155339806
700.04.480719706093064e-475000000000000000.020388.349514563106
800.03.859369921272289e-435000000000000000.023300.970873786406
............
33400.01.1745865571978132e-105000000000000000.0972815.5339805826
33500.01.1673644350909526e-105000000000000000.0975728.1553398059
33600.01.1601953475096658e-105000000000000000.0978640.7766990291
33700.01.1530745106216505e-105000000000000000.0981553.3980582524
33800.01.1460037834025703e-105000000000000000.0984466.0194174757
33900.01.1389825349049919e-105000000000000000.0987378.6407766991
34000.01.1320085680491812e-105000000000000000.0990291.2621359223
34100.01.1250852647156014e-105000000000000000.0993203.8834951456
34200.01.1182065068926023e-105000000000000000.0996116.5048543689
34300.01.1113794126859807e-105000000000000000.0999029.1262135921
plt.plot(lg['time'],lg['flux'])
plt.xlabel('time (%s)'%lg['time'].unit)
plt.ylabel('flux (%s)'%lg['flux'].unit)
Text(0, 0.5, 'flux (erg / (cm2 s))')
../../../_images/Temp_Ev_two_zones_acc_and_cooling_32_1.png

We generate a lightcurve in the range nu1=2.4E22 Hz, nu2=7.2E25 Hz, with the effect of the light crossing time, in the observer frame

lg_cross=temp_ev_acc.rad_region.make_lc(nu1=2.4E22,nu2=7.2E25,name='gamma',eval_cross_time=True,delta_t_out=100,use_cached=True,frame='obs',cross_time_slices=100)
plt.plot(lg['time'],lg['flux'])
plt.plot(lg_cross['time'],lg_cross['flux'])

plt.xlabel('time (%s)'%lg['time'].unit)
plt.ylabel('flux (%s)'%lg['flux'].unit)
Text(0, 0.5, 'flux (erg / (cm2 s))')
../../../_images/Temp_Ev_two_zones_acc_and_cooling_35_1.png

We can save the model and reuse it later for plotting lightcurcves, SEDs, and electron distributions

temp_ev_acc.save_model('two_zone_rad_acc.pkl')
temp_ev_acc_1=JetTimeEvol.load_model('two_zone_rad_acc.pkl')
temp_ev_acc_1.show_model()
--------------------------------------------------------------------------------
JetTimeEvol model description
--------------------------------------------------------------------------------

physical setup:

--------------------------------------------------------------------------------
Table length=29
namepar typevalunitsval*units*log
delta ttime5.000000e+01s0.00029979245799999996R/cFalse
log. samplingtime0.000000e+00NoneFalse
R/ctime1.667820e+05s1.0R/cFalse
IC coolingoffNoneFalse
Sync coolingonNoneFalse
Adiab. coolingonNoneFalse
Reg. expansionoffNoneFalse
Diff coeff6.666667e-06s-1NoneFalse
Acc coeff4.000000e-05s-1NoneFalse
Diff index2.000000e+00NoneFalse
Acc index1.000000e+00s-1NoneFalse
Tesc acctime5.003461e+04s3.0R_acc/cFalse
Eacc maxenergy4.000000e+60ergNoneFalse
Tesc radtime1.667820e+65s1e+60R/cFalse
Delta R accaccelerator_width5.000000e+14cmNoneFalse
B accmagnetic field2.000000e-01cmNoneFalse
R_rad rad startregion_position5.000000e+15cmNoneFalse
R_H rad startregion_position1.000000e+17cmNoneFalse
T_A0=1/ACC_COEFFtime2.500000e+04s0.149896229R/cFalse
T_D0=1/DIFF_COEFFtime1.500000e+05s0.899377374R/cFalse
T_DA0=1/(2*DIFF_COEFF)time7.500000e+04s0.449688687R/cFalse
gamma Lambda Turb. max1.173358e+11NoneFalse
gamma Lambda Coher. max1.173358e+10NoneFalse
gamma eq Syst. Acc (synch. cool)7.832383e+05NoneFalse
gamma eq Diff. Acc (synch. cool)1.309535e+05NoneFalse
T cooling(gamma_eq=gamma_eq_Diff)1.477242e+05sNoneFalse
T cooling(gamma_eq=gamma_eq_Sys)2.469874e+04sNoneFalse
T min. synch. cooling1.934500e+02sNoneFalse
L inj (electrons)injected lum.5.000000e+39erg/sNoneFalse
model parameters:

--------------------------------------------------------------------------------
Table length=30
model namenamepar typeunitsvalphys. bound. minphys. bound. maxlogfrozen
jet_time_evdurationtime_grids1.000000e+060.000000e+00--FalseTrue
jet_time_evgmin_gridgamma_grid1.000000e+000.000000e+00--FalseTrue
jet_time_evgmax_gridgamma_grid1.000000e+080.000000e+00--FalseTrue
jet_time_evgamma_grid_sizegamma_grid1.500000e+030.000000e+00--FalseTrue
jet_time_evTStart_Acctime_grids0.000000e+000.000000e+00--FalseTrue
jet_time_evTStop_Acctime_grids1.000000e+050.000000e+00--FalseTrue
jet_time_evTStart_Injtime_grids0.000000e+000.000000e+00--FalseTrue
jet_time_evTStop_Injtime_grids1.000000e+050.000000e+00--FalseTrue
jet_time_evT_esc_accescape_time(R_acc/c)*3.000000e+00----FalseTrue
jet_time_evEsc_Index_accfp_coeff_index0.000000e+00----FalseTrue
jet_time_evt_D0acceleration_times1.500000e+050.000000e+00--FalseTrue
jet_time_evt_A0acceleration_times2.500000e+040.000000e+00--FalseTrue
jet_time_evDiff_Indexfp_coeff_indexs2.000000e+000.000000e+00--FalseTrue
jet_time_evAcc_Indexfp_coeff_index1.000000e+00----FalseTrue
jet_time_evDelta_R_accaccelerator_widthcm5.000000e+140.000000e+00--FalseTrue
jet_time_evB_accmagnetic_fieldG2.000000e-010.000000e+00--FalseTrue
jet_time_evE_acc_maxacc_energyerg4.000000e+600.000000e+00--FalseTrue
jet_time_evLambda_max_Turbturbulence_scalecm1.000000e+150.000000e+00--FalseTrue
jet_time_evLambda_choer_Turb_factorturbulence_scalecm1.000000e-010.000000e+00--FalseTrue
jet_time_evT_esc_radescape_time(R/c)*1.000000e+60----FalseTrue
jet_time_evEsc_Index_radfp_coeff_index0.000000e+00----FalseTrue
jet_time_evR_rad_startregion_sizecm5.000000e+150.000000e+00--FalseTrue
jet_time_evR_H_rad_startregion_positioncm1.000000e+170.000000e+00--FalseTrue
jet_time_evm_Bmagnetic_field_index1.000000e+001.000000e+002.000000e+00FalseTrue
jet_time_evt_jet_expexp_start_times1.000000e+050.000000e+00--FalseTrue
jet_time_evbeta_exp_Rbeta_expansionv/c*1.000000e+000.000000e+001.000000e+00FalseTrue
jet_time_evB_radmagnetic_fieldG2.000000e-010.000000e+00--FalseTrue
jet_time_evt_sizetime_grid2.000000e+040.000000e+00--FalseTrue
jet_time_evnum_samplestime_ev_output5.000000e+020.000000e+00--FalseTrue
jet_time_evL_injinj_luminosityerg / s5.000000e+390.000000e+00--FalseTrue
p=temp_ev_acc_1.plot_tempev_model(region='rad',sed_data=None, use_cached = True)
../../../_images/Temp_Ev_two_zones_acc_and_cooling_40_0.png
lx=temp_ev_acc_1.rad_region.make_lc(nu1=1E17,nu2=1E18,name='X',eval_cross_time=False,delta_t_out=100,use_cached=True,frame='obs')
plt.plot(lx['time'],lx['flux'])
plt.xlabel('time (%s)'%lg['time'].unit)
plt.ylabel('flux (%s)'%lg['flux'].unit)
Text(0, 0.5, 'flux (erg / (cm2 s))')
../../../_images/Temp_Ev_two_zones_acc_and_cooling_41_1.png