redback 1.0.31__py3-none-any.whl → 1.12.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- redback/__init__.py +3 -2
- redback/analysis.py +321 -4
- redback/filters.py +57 -23
- redback/get_data/directory.py +18 -0
- redback/likelihoods.py +260 -0
- redback/model_library.py +12 -2
- redback/plotting.py +335 -4
- redback/priors/blackbody_spectrum_with_absorption_and_emission_lines.prior +9 -0
- redback/priors/csm_shock_and_arnett_two_rphots.prior +11 -0
- redback/priors/exp_rise_powerlaw_decline.prior +6 -0
- redback/priors/powerlaw_spectrum_with_absorption_and_emission_lines.prior +8 -0
- redback/priors/salt2.prior +6 -0
- redback/priors/shock_cooling_and_arnett_bolometric.prior +11 -0
- redback/priors/shockcooling_morag.prior +6 -0
- redback/priors/shockcooling_morag_and_arnett.prior +10 -0
- redback/priors/shockcooling_morag_and_arnett_bolometric.prior +9 -0
- redback/priors/shockcooling_morag_bolometric.prior +5 -0
- redback/priors/shockcooling_sapirandwaxman.prior +6 -0
- redback/priors/shockcooling_sapirandwaxman_bolometric.prior +5 -0
- redback/priors/shockcooling_sapirwaxman_and_arnett.prior +10 -0
- redback/priors/shockcooling_sapirwaxman_and_arnett_bolometric.prior +9 -0
- redback/priors/shocked_cocoon_and_arnett.prior +13 -0
- redback/priors/synchrotron_ism.prior +6 -0
- redback/priors/synchrotron_massloss.prior +6 -0
- redback/priors/synchrotron_pldensity.prior +7 -0
- redback/priors/thermal_synchrotron_v2_fluxdensity.prior +8 -0
- redback/priors/thermal_synchrotron_v2_lnu.prior +7 -0
- redback/priors.py +10 -3
- redback/result.py +9 -1
- redback/sampler.py +46 -4
- redback/sed.py +48 -1
- redback/simulate_transients.py +5 -1
- redback/tables/filters.csv +265 -254
- redback/transient/__init__.py +2 -3
- redback/transient/transient.py +648 -10
- redback/transient_models/__init__.py +3 -2
- redback/transient_models/extinction_models.py +3 -2
- redback/transient_models/gaussianprocess_models.py +45 -0
- redback/transient_models/general_synchrotron_models.py +296 -6
- redback/transient_models/phenomenological_models.py +154 -7
- redback/transient_models/shock_powered_models.py +503 -40
- redback/transient_models/spectral_models.py +82 -0
- redback/transient_models/supernova_models.py +405 -31
- redback/transient_models/tde_models.py +57 -41
- redback/utils.py +302 -51
- {redback-1.0.31.dist-info → redback-1.12.0.dist-info}/METADATA +8 -6
- {redback-1.0.31.dist-info → redback-1.12.0.dist-info}/RECORD +50 -29
- {redback-1.0.31.dist-info → redback-1.12.0.dist-info}/WHEEL +1 -1
- {redback-1.0.31.dist-info → redback-1.12.0.dist-info/licenses}/LICENCE.md +0 -0
- {redback-1.0.31.dist-info → redback-1.12.0.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
redshift = Uniform(0.01, 1, 'redshift', latex_label=r'$z$')
|
|
2
|
+
mej = LogUniform(1e-4, 30, 'mej', latex_label = r'$M_{\mathrm{ej}}~(M_\odot)$')
|
|
3
|
+
f_nickel = LogUniform(1e-3,1,name='f_nickel', latex_label = r'$f_{\mathrm{Ni}}$')
|
|
4
|
+
csm_mass = LogUniform(1e-3, 5, 'csm_mass', latex_label=r'$M_{\mathrm{CSM}}~(M_{\odot})$')
|
|
5
|
+
v_min = LogUniform(1e3, 3e4, 'vej', latex_label = r'$v_{\mathrm{ej}}~(\mathrm{km}/\mathrm{s})$')
|
|
6
|
+
beta = Uniform(0.4, 0.5, 'beta', latex_label=r'$\\beta$')
|
|
7
|
+
kappa = Uniform(0.01, 1, 'kappa', latex_label = r'$\\kappa~(\mathrm{cm}^{2}/\mathrm{g})$')
|
|
8
|
+
shell_radius = Uniform(1e-2, 10, 'shell_radius', latex_label=r'$R_{\mathrm{shell}}~(10^{14}~\mathrm{cm})$')
|
|
9
|
+
shell_width_ratio = Uniform(0.1, 0.5, 'shell_width_ratio', latex_label=r'$\\Delta~R_{\mathrm{shell}}/R_{\mathrm{shell}}$')
|
|
10
|
+
kappa_gamma = LogUniform(1e-4, 1e4, 'kappa_gamma', latex_label = r'$\\kappa_{\\gamma}~(\mathrm{cm}^{2}/\mathrm{g})$')
|
|
11
|
+
temperature_floor = LogUniform(1e3,1e5,name = 'temperature_floor', latex_label = r'$T_{\mathrm{floor}}~(\mathrm{K})$')
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
t0 = Uniform(58000, 59000, 't0', latex_label = '$t_0$')
|
|
2
|
+
m_peak = Uniform(16, 20, 'm_peak', latex_label = '$m_{peak}$')
|
|
3
|
+
tau_rise = Uniform(0.1, 10.0, 'tau_rise', latex_label = '$\\tau_{rise}$')
|
|
4
|
+
tau_decline = Uniform(0.1, 10.0, 'tau_decline', latex_label = '$\\tau_{decline}$')
|
|
5
|
+
alpha = Uniform(0.1, 5.0, 'alpha', latex_label = '$\\alpha$')
|
|
6
|
+
t_peak = Uniform(59000, 59500, 't_peak', latex_label = '$t_{peak}$')
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
aa = LogUniform(1e-2, 1e2, name='aa', latex_label=r'$A$')
|
|
2
|
+
alpha = Uniform(minimum=-5, maximum=5, name='alpha', latex_label=r'$\\alpha$')
|
|
3
|
+
lc1 = Uniform(2000, 7000, name='lc1', latex_label=r'$\Lambda_{\mathrm{emission}}$')
|
|
4
|
+
lc2 = Uniform(2000,7000, name='lc2', latex_label=r'$\Lambda_{\mathrm{absorption}}$')
|
|
5
|
+
ls1 = LogUniform(1e-34, 1e-31, name='ls1', latex_label=r'line_stength$_{\mathrm{emission}}$')
|
|
6
|
+
ls2 = LogUniform(1e-34, 1e-31, name='ls2', latex_label=r'line_stength$_{\mathrm{absorption}}$')
|
|
7
|
+
v1 = Uniform(1e3, 1e4, name='v1', latex_label=r'$v_{\mathrm{emission}}$')
|
|
8
|
+
v2 = Uniform(1e3, 1e4, name='v2', latex_label=r'$v_{\mathrm{absorption}}$')
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
redshift = Uniform(0.1, 0.2, name='redshift', latex_label=r'$z$')
|
|
2
|
+
peak_time = Uniform(10, 20, name='peak_time', latex_label=r'$t_{\mathrm{peak}}~(\mathrm{days})$')
|
|
3
|
+
t0 = Uniform(0, 1, name='t0', latex_label=r'$t_0~(\mathrm{days})$')
|
|
4
|
+
x0 = Uniform(1e-10, 1e-1, name='x0', latex_label=r'$x_0$')
|
|
5
|
+
x1 = Normal(0, 1, name='x1', latex_label=r'$x_1$')
|
|
6
|
+
c = Normal(0, 0.1, name='c', latex_label=r'$c$')
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
log10_mass = Uniform(-2, 3, 'log10_mass', latex_label=r'$\log_{10}~m_{\mathrm{en}} / M_\odot$')
|
|
2
|
+
log10_radius = Uniform(10, 14, 'log10_radius', latex_label=r'$\log_{10}~R_{\mathrm{en}} / {\mathrm{cm}}^{-3}$')
|
|
3
|
+
log10_energy = Uniform(40, 52, 'log10_energy', latex_label=r'$\log_{10}~E_{\mathrm{en}} / {\mathrm{erg}}$')
|
|
4
|
+
nn = Uniform(8, 12, 'nn', latex_label=r'$nn$')
|
|
5
|
+
delta = Uniform(1, 1.5, 'delta', latex_label=r'$\\Delta$')
|
|
6
|
+
f_nickel = LogUniform(1e-3,1,name='f_nickel', latex_label = r'$f_{\mathrm{Ni}}$')
|
|
7
|
+
mej = LogUniform(1e-4, 100, 'mej', latex_label = r'$M_{\mathrm{ej} }~(M_\odot)$')
|
|
8
|
+
vej = LogUniform(1e3, 1e5, 'vej', latex_label = r'$v_{\mathrm{ej}}~(\mathrm{km}/\mathrm{s})$')
|
|
9
|
+
kappa = Uniform(0.05, 2, 'kappa', latex_label = r'$\\kappa~(\mathrm{cm}^{2}/\mathrm{g})$')
|
|
10
|
+
kappa_gamma = LogUniform(1e-4, 1e4, 'kappa_gamma', latex_label = r'$\\kappa_\\gamma~(\mathrm{cm}^{2}/\mathrm{g})$')
|
|
11
|
+
temperature_floor = LogUniform(1e3,1e5,name = 'temperature_floor', latex_label = r'$T_{\mathrm{floor}}~(\mathrm{K})$')
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
redshift = Uniform(0.05, 0.3, 'redshift', latex_label = r'$z$')
|
|
2
|
+
v_shock = LogUniform(1e3, 5e4, 'vej', latex_label = r'$v_{\mathrm{ej}}~(\mathrm{km}/\mathrm{s})$')
|
|
3
|
+
m_env = LogUniform(1e-3, 5, 'm_env', latex_label = r'$M_{\mathrm{env}}~(M_{\odot})$')
|
|
4
|
+
f_rho_m = Uniform(0.01, 20, 'f_rho_m', latex_label = r'$f_{\\rho_{m}}$')
|
|
5
|
+
radius = LogUniform(1e-2, 10, 'radius', latex_label=r'$R_{\mathrm{star}}~(10^{13}~\mathrm{cm})$')
|
|
6
|
+
kappa = Uniform(0.01, 1, 'kappa', latex_label = r'$\\kappa~(\mathrm{cm}^{2}/\mathrm{g})$')
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
redshift = Uniform(0.05, 0.3, 'redshift', latex_label = r'$z$')
|
|
2
|
+
v_shock = LogUniform(1e3, 5e4, 'vej', latex_label = r'$v_{\mathrm{ej}}~(\mathrm{km}/\mathrm{s})$')
|
|
3
|
+
m_env = LogUniform(1e-3, 5, 'm_env', latex_label = r'$M_{\mathrm{env}}~(M_{\odot})$')
|
|
4
|
+
mej = LogUniform(1e-4, 100, 'mej', latex_label = r'$M_{\mathrm{ej} }~(M_\odot)$')
|
|
5
|
+
f_rho = Uniform(0.5, 3, 'f_rho', latex_label = r'$f_{\\rho}$')
|
|
6
|
+
f_nickel = LogUniform(1e-3,1,name='f_nickel', latex_label = r'$f_{\mathrm{Ni}}$')
|
|
7
|
+
radius = LogUniform(1e-3, 10, 'radius', latex_label=r'$R_{\mathrm{star}}~(10^{13}~\mathrm{cm})$')
|
|
8
|
+
kappa = Uniform(0.01, 1, 'kappa', latex_label = r'$\\kappa~(\mathrm{cm}^{2}/\mathrm{g})$')
|
|
9
|
+
kappa_gamma = LogUniform(1e-4, 1e4, 'kappa_gamma', latex_label = r'$\\kappa_\\gamma~(\mathrm{cm}^{2}/\mathrm{g})$')
|
|
10
|
+
temperature_floor = LogUniform(1e3,8e3,name = 'temperature_floor', latex_label = r'$T_{\mathrm{floor}}~(\mathrm{K})$')
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
v_shock = LogUniform(1e3, 5e4, 'vej', latex_label = r'$v_{\mathrm{ej}}~(\mathrm{km}/\mathrm{s})$')
|
|
2
|
+
m_env = LogUniform(1e-3, 5, 'm_env', latex_label = r'$M_{\mathrm{env}}~(M_{\odot})$')
|
|
3
|
+
mej = LogUniform(1e-4, 100, 'mej', latex_label = r'$M_{\mathrm{ej} }~(M_\odot)$')
|
|
4
|
+
f_rho = Uniform(0.5, 3, 'f_rho', latex_label = r'$f_{\\rho}$')
|
|
5
|
+
f_nickel = LogUniform(1e-3,1,name='f_nickel', latex_label = r'$f_{\mathrm{Ni}}$')
|
|
6
|
+
radius = LogUniform(1e-3, 10, 'radius', latex_label=r'$R_{\mathrm{star}}~(10^{13}~\mathrm{cm})$')
|
|
7
|
+
kappa = Uniform(0.01, 1, 'kappa', latex_label = r'$\\kappa~(\mathrm{cm}^{2}/\mathrm{g})$')
|
|
8
|
+
kappa_gamma = LogUniform(1e-4, 1e4, 'kappa_gamma', latex_label = r'$\\kappa_\\gamma~(\mathrm{cm}^{2}/\mathrm{g})$')
|
|
9
|
+
temperature_floor = LogUniform(1e3,8e3,name = 'temperature_floor', latex_label = r'$T_{\mathrm{floor}}~(\mathrm{K})$')
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
v_shock = LogUniform(1e3, 5e4, 'vej', latex_label = r'$v_{\mathrm{ej}}~(\mathrm{km}/\mathrm{s})$')
|
|
2
|
+
m_env = LogUniform(1e-3, 5, 'm_env', latex_label = r'$M_{\mathrm{env}}~(M_{\odot})$')
|
|
3
|
+
f_rho_m = Uniform(0.01, 20, 'f_rho_m', latex_label = r'$f_{\\rho_{m}}$')
|
|
4
|
+
radius = LogUniform(1e-2, 10, 'radius', latex_label=r'$R_{\mathrm{star}}~(10^{13}~\mathrm{cm})$')
|
|
5
|
+
kappa = Uniform(0.01, 1, 'kappa', latex_label = r'$\\kappa~(\mathrm{cm}^{2}/\mathrm{g})$')
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
redshift = Uniform(0.05, 0.3, 'redshift', latex_label = r'$z$')
|
|
2
|
+
v_shock = LogUniform(1e3, 5e4, 'vej', latex_label = r'$v_{\mathrm{ej}}~(\mathrm{km}/\mathrm{s})$')
|
|
3
|
+
m_env = LogUniform(1e-3, 5, 'm_env', latex_label = r'$M_{\mathrm{env}}~(M_{\odot})$')
|
|
4
|
+
f_rho_m = Uniform(0.01, 20, 'f_rho_m', latex_label = r'$f_{\\rho_{m}}$')
|
|
5
|
+
radius = LogUniform(1e-2, 10, 'radius', latex_label=r'$R_{\mathrm{star}}~(10^{13}~\mathrm{cm})$')
|
|
6
|
+
kappa = Uniform(0.01, 1, 'kappa', latex_label = r'$\\kappa~(\mathrm{cm}^{2}/\mathrm{g})$')
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
v_shock = LogUniform(1e3, 5e4, 'vej', latex_label = r'$v_{\mathrm{ej}}~(\mathrm{km}/\mathrm{s})$')
|
|
2
|
+
m_env = Uniform(1e-3, 5, 'm_env', latex_label = r'$M_{\mathrm{env}}~(M_{\odot})$')
|
|
3
|
+
f_rho_m = Uniform(0.01, 20, 'f_rho_m', latex_label = r'$f_{\\rho_{m}}$')
|
|
4
|
+
radius = Uniform(1e-2, 10, 'radius', latex_label=r'$R_{\mathrm{star}}~(10^{13}~\mathrm{cm})$')
|
|
5
|
+
kappa = Uniform(0.01, 1, 'kappa', latex_label = r'$\\kappa~(\mathrm{cm}^{2}/\mathrm{g})$')
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
redshift = Uniform(0.05, 0.3, 'redshift', latex_label = r'$z$')
|
|
2
|
+
v_shock = LogUniform(1e3, 5e4, 'vej', latex_label = r'$v_{\mathrm{ej}}~(\mathrm{km}/\mathrm{s})$')
|
|
3
|
+
m_env = LogUniform(1e-3, 5, 'm_env', latex_label = r'$M_{\mathrm{env}}~(M_{\odot})$')
|
|
4
|
+
mej = LogUniform(1e-4, 100, 'mej', latex_label = r'$M_{\mathrm{ej} }~(M_\odot)$')
|
|
5
|
+
f_rho = Uniform(0.5, 3, 'f_rho', latex_label = r'$f_{\\rho}$')
|
|
6
|
+
f_nickel = LogUniform(1e-3,1,name='f_nickel', latex_label = r'$f_{\mathrm{Ni}}$')
|
|
7
|
+
radius = LogUniform(1e-3, 10, 'radius', latex_label=r'$R_{\mathrm{star}}~(10^{13}~\mathrm{cm})$')
|
|
8
|
+
kappa = Uniform(0.01, 1, 'kappa', latex_label = r'$\\kappa~(\mathrm{cm}^{2}/\mathrm{g})$')
|
|
9
|
+
kappa_gamma = LogUniform(1e-4, 1e4, 'kappa_gamma', latex_label = r'$\\kappa_\\gamma~(\mathrm{cm}^{2}/\mathrm{g})$')
|
|
10
|
+
temperature_floor = LogUniform(1e3,8e3,name = 'temperature_floor', latex_label = r'$T_{\mathrm{floor}}~(\mathrm{K})$')
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
v_shock = LogUniform(1e3, 5e4, 'vej', latex_label = r'$v_{\mathrm{ej}}~(\mathrm{km}/\mathrm{s})$')
|
|
2
|
+
m_env = LogUniform(1e-3, 5, 'm_env', latex_label = r'$M_{\mathrm{env}}~(M_{\odot})$')
|
|
3
|
+
mej = LogUniform(1e-4, 100, 'mej', latex_label = r'$M_{\mathrm{ej} }~(M_\odot)$')
|
|
4
|
+
f_rho = Uniform(0.5, 3, 'f_rho', latex_label = r'$f_{\\rho}$')
|
|
5
|
+
f_nickel = LogUniform(1e-3,1,name='f_nickel', latex_label = r'$f_{\mathrm{Ni}}$')
|
|
6
|
+
radius = LogUniform(1e-3, 10, 'radius', latex_label=r'$R_{\mathrm{star}}~(10^{13}~\mathrm{cm})$')
|
|
7
|
+
kappa = Uniform(0.01, 1, 'kappa', latex_label = r'$\\kappa~(\mathrm{cm}^{2}/\mathrm{g})$')
|
|
8
|
+
kappa_gamma = LogUniform(1e-4, 1e4, 'kappa_gamma', latex_label = r'$\\kappa_\\gamma~(\mathrm{cm}^{2}/\mathrm{g})$')
|
|
9
|
+
temperature_floor = LogUniform(1e3,8e3,name = 'temperature_floor', latex_label = r'$T_{\mathrm{floor}}~(\mathrm{K})$')
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
redshift = Uniform(1e-3,3,name='redshift', latex_label = r'$z$')
|
|
2
|
+
mej_c = Uniform(0.1, 2, 'mej_c', latex_label = r'$M_{\mathrm{cocoon} }~(M_\odot)$')
|
|
3
|
+
vej_c = Uniform(0.01, 0.3, 'vej_c', latex_label = r'$v_{\mathrm{cocoon}}~(c)$')
|
|
4
|
+
eta = Uniform(1, 5, '\\eta', latex_label = r'$\\eta$')
|
|
5
|
+
tshock = Uniform(0.1, 100, 'tshock', latex_label = r'$t_{\mathrm{shock}}~(\mathrm{s})$')
|
|
6
|
+
shocked_fraction = Uniform(0.01, 1, 'shocked_fraction', latex_label = r'$f_{\mathrm{shocked}}$')
|
|
7
|
+
cos_theta_cocoon = Uniform(0.866, 1.0, 'cos_theta_cocoon', latex_label = r'$\cos~\\theta_{\mathrm{cocoon}}$')
|
|
8
|
+
f_nickel = LogUniform(1e-3,1,name='f_nickel', latex_label = r'$f_{\mathrm{Ni}}$')
|
|
9
|
+
mej = LogUniform(0.1, 100, 'mej', latex_label = r'$M_{\mathrm{ej}}~(M_\odot)$')
|
|
10
|
+
vej = LogUniform(1e3, 1e5, 'vej', latex_label = r'$v_{\mathrm{ej}}~(\mathrm{km}/\mathrm{s})$')
|
|
11
|
+
kappa = Uniform(0.05, 2, 'kappa', latex_label = r'$\\kappa~(\mathrm{cm}^{2}/\mathrm{g})$')
|
|
12
|
+
kappa_gamma = LogUniform(1e-4, 1e4, 'kappa_gamma', latex_label = r'$\\kappa_{\\gamma}~(\mathrm{cm}^{2}/\mathrm{g})$')
|
|
13
|
+
temperature_floor = LogUniform(1e3,1e5,name = 'temperature_floor', latex_label = r'$T_{\mathrm{floor}}~(\mathrm{K})$')
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
redshift = Uniform(0.01, 3, 'redshift', latex_label=r'$z$')
|
|
2
|
+
v_s = Uniform(1e3, 3e4, 'vej', latex_label = r'$v_{\mathrm{s}}~(\mathrm{km}/\mathrm{s})$')
|
|
3
|
+
logn0 = Uniform(-5, 2, 'logn0', latex_label=r'$\log_{10}~n_{\mathrm{ism}} / {\mathrm{cm}}^{-3}$')
|
|
4
|
+
logepse = Uniform(-5, 0, 'logepse', latex_label=r'$\log_{10}~\\epsilon_{e}$')
|
|
5
|
+
logepsb = Uniform(-5, 0, 'logepsb', latex_label=r'$\log_{10}~\\epsilon_{B}$')
|
|
6
|
+
p = Uniform(2, 3, 'p', latex_label=r'$p$')
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
redshift = Uniform(0.01, 3, 'redshift', latex_label=r'$z$')
|
|
2
|
+
v_s = Uniform(1e3, 3e4, 'vej', latex_label = r'$v_{\mathrm{s}}~(\mathrm{km}/\mathrm{s})$')
|
|
3
|
+
log_Mdot_vwind = Uniform(-10, -4, 'log_Mdot_vwind', latex_label = r'$\dot{M}/u_{\mathrm{wind}}~(M_\odot \mathrm{s km year}^{-1})$')
|
|
4
|
+
logepse = Uniform(-5, 0, 'logepse', latex_label=r'$\log_{10}~\\epsilon_{e}$')
|
|
5
|
+
logepsb = Uniform(-5, 0, 'logepsb', latex_label=r'$\log_{10}~\\epsilon_{B}$')
|
|
6
|
+
p = Uniform(2, 3, 'p', latex_label=r'$p$')
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
redshift = Uniform(0.01, 3, 'redshift', latex_label=r'$z$')
|
|
2
|
+
v_s = Uniform(1e3, 3e4, 'vej', latex_label = r'$v_{\mathrm{s}}~(\mathrm{km}/\mathrm{s})$')
|
|
3
|
+
logA = Uniform(-5, 5, 'logA', latex_label=r'$A / {\mathrm{cm}}^{-3}$')
|
|
4
|
+
s = Uniform(0, 2, 's', latex_label=r'$s$')
|
|
5
|
+
logepse = Uniform(-5, 0, 'logepse', latex_label=r'$\log_{10}~\\epsilon_{e}$')
|
|
6
|
+
logepsb = Uniform(-5, 0, 'logepsb', latex_label=r'$\log_{10}~\\epsilon_{B}$')
|
|
7
|
+
p = Uniform(2, 3, 'p', latex_label=r'$p$')
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
redshift = Uniform(0.01, 3, 'redshift', latex_label=r'$z$')
|
|
2
|
+
bG_sh = Uniform(0.1, 10, 'bG_sh', latex_label=r'$\\Gamma\\beta$')
|
|
3
|
+
log_Mdot_vwind = Uniform(-10, -4, 'log_Mdot_vwind', latex_label = r'$\dot{M}/u_{\mathrm{wind}}~(M_\odot \mathrm{s km year}^{-1})$')
|
|
4
|
+
n_ism = Uniform(0, 10, 'n_ism', latex_label=r'$n_{\mathrm{ism}} / {\mathrm{cm}}^{-3}$')
|
|
5
|
+
logepse = Uniform(-5, 0, 'logepse', latex_label=r'$\log_{10}~\\epsilon_{e}$')
|
|
6
|
+
logepsb = Uniform(-5, 0, 'logepsb', latex_label=r'$\log_{10}~\\epsilon_{B}$')
|
|
7
|
+
xi = Uniform(0.01, 1., 'xi', latex_label=r'$\\xi_{N}$')
|
|
8
|
+
p = Uniform(2, 3, 'p', latex_label=r'$p$')
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
bG_sh = Uniform(0.1, 10, 'bG_sh', latex_label=r'$\\\Gamma\\beta$')
|
|
2
|
+
log_Mdot_vwind = Uniform(-10, -4, 'log_Mdot_vwind', latex_label = r'$\dot{M}/u_{\mathrm{wind}}~(M_\odot \mathrm{s km year}^{-1})$')
|
|
3
|
+
n_ism = Uniform(0, 10, 'n_ism', latex_label=r'$n_{\mathrm{ism}} / {\mathrm{cm}}^{-3}$')
|
|
4
|
+
logepse = Uniform(-5, 0, 'logepse', latex_label=r'$\log_{10}~\\epsilon_{e}$')
|
|
5
|
+
logepsb = Uniform(-5, 0, 'logepsb', latex_label=r'$\log_{10}~\\epsilon_{B}$')
|
|
6
|
+
xi = Uniform(0.01, 1., 'xi', latex_label=r'$\\xi_{N}$')
|
|
7
|
+
p = Uniform(2, 3, 'p', latex_label=r'$p$')
|
redback/priors.py
CHANGED
|
@@ -40,12 +40,19 @@ def get_priors(model, times=None, y=None, yerr=None, dt=None, **kwargs):
|
|
|
40
40
|
return priors
|
|
41
41
|
|
|
42
42
|
priors = PriorDict()
|
|
43
|
+
|
|
44
|
+
if model in redback.model_library.base_models_dict:
|
|
45
|
+
logger.info(f'Setting up prior for base model {model}.')
|
|
46
|
+
logger.info(f'You will need to explicitly set a prior on t0 and or extinction if relevant')
|
|
47
|
+
|
|
43
48
|
try:
|
|
44
49
|
filename = os.path.join(os.path.dirname(__file__), 'priors', f'{model}.prior')
|
|
45
50
|
priors.from_file(filename)
|
|
46
|
-
except FileNotFoundError
|
|
47
|
-
logger.warning(
|
|
48
|
-
|
|
51
|
+
except FileNotFoundError:
|
|
52
|
+
logger.warning(f'No prior file found for model {model}. '
|
|
53
|
+
f'Perhaps you also want to set up the prior for the base model? '
|
|
54
|
+
f'Or you may need to set up your prior explicitly.')
|
|
55
|
+
logger.info('Returning Empty PriorDict.')
|
|
49
56
|
return priors
|
|
50
57
|
|
|
51
58
|
|
redback/result.py
CHANGED
|
@@ -136,6 +136,14 @@ class RedbackResult(Result):
|
|
|
136
136
|
return self.transient.plot_lightcurve(model=model, posterior=self.posterior,
|
|
137
137
|
model_kwargs=self.model_kwargs, **kwargs)
|
|
138
138
|
|
|
139
|
+
def plot_spectrum(self, model: Union[callable, str] = None, **kwargs: None) -> matplotlib.axes.Axes:
|
|
140
|
+
""" Reconstructs the transient and calls the specific `plot_spectrum` method.
|
|
141
|
+
Detailed documentation appears below by running `print(plot_spectrum.__doc__)` """
|
|
142
|
+
if model is None:
|
|
143
|
+
model = model_library.all_models_dict[self.model]
|
|
144
|
+
return self.transient.plot_spectrum(model=model, posterior=self.posterior,
|
|
145
|
+
model_kwargs=self.model_kwargs, **kwargs)
|
|
146
|
+
|
|
139
147
|
def plot_residual(self, model: Union[callable, str] = None, **kwargs: None) -> matplotlib.axes.Axes:
|
|
140
148
|
"""Reconstructs the transient and calls the specific `plot_residual` method.
|
|
141
149
|
Detailed documentation appears below by running `print(plot_residual.__doc__)` """
|
|
@@ -168,7 +176,7 @@ class RedbackResult(Result):
|
|
|
168
176
|
plot_multiband.__doc__ = plot_multiband.__doc__ + redback.transient.Transient.plot_multiband.__doc__
|
|
169
177
|
plot_multiband_lightcurve.__doc__ = \
|
|
170
178
|
plot_multiband_lightcurve.__doc__ + redback.transient.Transient.plot_multiband_lightcurve.__doc__
|
|
171
|
-
|
|
179
|
+
plot_spectrum.__doc__ = plot_spectrum.__doc__ + redback.transient.Spectrum.plot_spectrum.__doc__
|
|
172
180
|
|
|
173
181
|
def read_in_result(
|
|
174
182
|
filename: str = None, outdir: str = None, label: str = None,
|
redback/sampler.py
CHANGED
|
@@ -12,7 +12,7 @@ from redback.result import RedbackResult
|
|
|
12
12
|
from redback.utils import logger
|
|
13
13
|
from redback.transient.afterglow import Afterglow
|
|
14
14
|
from redback.transient.prompt import PromptTimeSeries
|
|
15
|
-
from redback.transient.transient import OpticalTransient, Transient
|
|
15
|
+
from redback.transient.transient import OpticalTransient, Transient, Spectrum
|
|
16
16
|
|
|
17
17
|
|
|
18
18
|
dirname = os.path.dirname(__file__)
|
|
@@ -40,11 +40,13 @@ def fit_model(
|
|
|
40
40
|
:param resume: Whether to resume the run from a checkpoint if available.
|
|
41
41
|
:param save_format: The format to save the result in. (Default value = 'json'_
|
|
42
42
|
:param model_kwargs: Additional keyword arguments for the model.
|
|
43
|
-
:param
|
|
43
|
+
:param clean: If True, rerun the fitting, if false try to use previous results in the output directory.
|
|
44
44
|
:param plot: If True, create corner and lightcurve plot
|
|
45
|
+
:param kwargs: Additional parameters that will be passed to the sampler
|
|
45
46
|
:return: Redback result object, transient specific data object
|
|
46
47
|
"""
|
|
47
48
|
if isinstance(model, str):
|
|
49
|
+
modelname = model
|
|
48
50
|
model = all_models_dict[model]
|
|
49
51
|
|
|
50
52
|
if transient.data_mode in ["flux_density", "magnitude"]:
|
|
@@ -53,12 +55,22 @@ def fit_model(
|
|
|
53
55
|
f"Transient data mode {transient.data_mode} is inconsistent with "
|
|
54
56
|
f"output format {model_kwargs['output_format']}. These should be the same.")
|
|
55
57
|
|
|
56
|
-
|
|
58
|
+
if prior is None:
|
|
59
|
+
prior = bilby.prior.PriorDict(filename=f"{dirname}/priors/{modelname}.prior")
|
|
60
|
+
logger.warning(f"No prior given. Using default priors for {modelname}")
|
|
61
|
+
else:
|
|
62
|
+
prior = prior
|
|
57
63
|
outdir = outdir or f"{transient.directory_structure.directory_path}/{model.__name__}"
|
|
58
64
|
Path(outdir).mkdir(parents=True, exist_ok=True)
|
|
59
65
|
label = label or transient.name
|
|
60
66
|
|
|
61
|
-
if isinstance(transient,
|
|
67
|
+
if isinstance(transient, Spectrum):
|
|
68
|
+
return _fit_spectrum(transient=transient, model=model, outdir=outdir, label=label, sampler=sampler,
|
|
69
|
+
nlive=nlive, prior=prior, walks=walks,
|
|
70
|
+
resume=resume, save_format=save_format, model_kwargs=model_kwargs,
|
|
71
|
+
plot=plot, **kwargs)
|
|
72
|
+
|
|
73
|
+
elif isinstance(transient, Afterglow):
|
|
62
74
|
return _fit_grb(
|
|
63
75
|
transient=transient, model=model, outdir=outdir, label=label, sampler=sampler, nlive=nlive, prior=prior,
|
|
64
76
|
walks=walks, use_photon_index_prior=use_photon_index_prior, resume=resume, save_format=save_format,
|
|
@@ -82,7 +94,37 @@ def fit_model(
|
|
|
82
94
|
else:
|
|
83
95
|
raise ValueError(f'Source type {transient.__class__.__name__} not known')
|
|
84
96
|
|
|
97
|
+
def _fit_spectrum(transient, model, outdir, label, likelihood=None, sampler='dynesty', nlive=3000, prior=None, walks=1000,
|
|
98
|
+
resume=True, save_format='json', model_kwargs=None, plot=True, **kwargs):
|
|
99
|
+
x, y, y_err = transient.angstroms, transient.flux_density, transient.flux_density_err
|
|
100
|
+
likelihood = likelihood or GaussianLikelihood(x=x, y=y, sigma=y_err, function=model, kwargs=model_kwargs)
|
|
101
|
+
|
|
102
|
+
meta_data = dict(model=model.__name__, transient_type=transient.__class__.__name__.lower())
|
|
103
|
+
transient_kwargs = {k.lstrip("_"): v for k, v in transient.__dict__.items()}
|
|
104
|
+
meta_data.update(transient_kwargs)
|
|
105
|
+
model_kwargs = redback.utils.check_kwargs_validity(model_kwargs)
|
|
106
|
+
meta_data['model_kwargs'] = model_kwargs
|
|
107
|
+
nthreads = kwargs.get('nthreads', 1)
|
|
108
|
+
|
|
109
|
+
result = None
|
|
110
|
+
if not kwargs.get("clean", False):
|
|
111
|
+
try:
|
|
112
|
+
result = redback.result.read_in_result(
|
|
113
|
+
outdir=outdir, label=label, extension=kwargs.get("extension", "json"), gzip=kwargs.get("gzip", False))
|
|
114
|
+
plt.close('all')
|
|
115
|
+
return result
|
|
116
|
+
except Exception:
|
|
117
|
+
pass
|
|
85
118
|
|
|
119
|
+
result = result or bilby.run_sampler(
|
|
120
|
+
likelihood=likelihood, priors=prior, label=label, sampler=sampler, nlive=nlive,
|
|
121
|
+
outdir=outdir, plot=plot, use_ratio=False, walks=walks, resume=resume,
|
|
122
|
+
maxmcmc=10 * walks, result_class=RedbackResult, meta_data=meta_data,
|
|
123
|
+
nthreads=nthreads, save_bounds=False, nsteps=nlive, nwalkers=walks, save=save_format, **kwargs)
|
|
124
|
+
plt.close('all')
|
|
125
|
+
if plot:
|
|
126
|
+
result.plot_spectrum(model=model)
|
|
127
|
+
return result
|
|
86
128
|
|
|
87
129
|
def _fit_grb(transient, model, outdir, label, likelihood=None, sampler='dynesty', nlive=3000, prior=None, walks=1000,
|
|
88
130
|
use_photon_index_prior=False, resume=True, save_format='json', model_kwargs=None, plot=True, **kwargs):
|
redback/sed.py
CHANGED
|
@@ -203,7 +203,7 @@ def blackbody_to_flux_density(temperature, r_photosphere, dl, frequency):
|
|
|
203
203
|
:param dl: luminosity_distance in cm
|
|
204
204
|
:param frequency: frequency to calculate in Hz - Must be same length as time array or a single number.
|
|
205
205
|
In source frame
|
|
206
|
-
:return: flux_density
|
|
206
|
+
:return: flux_density in erg/s/Hz/cm^2
|
|
207
207
|
"""
|
|
208
208
|
# adding units back in to ensure dimensions are correct
|
|
209
209
|
frequency = frequency * uu.Hz
|
|
@@ -248,6 +248,53 @@ class _SED(object):
|
|
|
248
248
|
# convert to mJy
|
|
249
249
|
return flux_density.to(uu.mJy)
|
|
250
250
|
|
|
251
|
+
def boosted_bolometric_luminosity(temperature, radius, lambda_cut):
|
|
252
|
+
"""
|
|
253
|
+
Compute the boosted bolometric luminosity for a blackbody with temperature T (K)
|
|
254
|
+
and radius R (cm) to account for missing blue flux.
|
|
255
|
+
|
|
256
|
+
It uses:
|
|
257
|
+
L_bb = 4π R² σ_SB T⁴,
|
|
258
|
+
F_tot = σ_SB T⁴, and integrates the flux density redward of lambda_cut.
|
|
259
|
+
|
|
260
|
+
Parameters
|
|
261
|
+
----------
|
|
262
|
+
temperature : float
|
|
263
|
+
Temperature (K)
|
|
264
|
+
radius : float
|
|
265
|
+
Photospheric radius (cm)
|
|
266
|
+
lambda_cut : float
|
|
267
|
+
Cutoff wavelength in centimeters (i.e. converted from angstroms by multiplying by 1e-8)
|
|
268
|
+
|
|
269
|
+
Returns
|
|
270
|
+
-------
|
|
271
|
+
L_boosted : float
|
|
272
|
+
The corrected bolometric luminosity (erg/s)
|
|
273
|
+
"""
|
|
274
|
+
from scipy.integrate import quad
|
|
275
|
+
sigma_SB = sigma_sb # Stefan–Boltzmann constant in cgs
|
|
276
|
+
|
|
277
|
+
# Compute pure-blackbody bolometric luminosity.
|
|
278
|
+
L_bb = 4.0 * np.pi * radius ** 2 * sigma_SB * temperature ** 4
|
|
279
|
+
# Total flux per unit area (erg/s/cm^2)
|
|
280
|
+
F_tot = sigma_SB * temperature ** 4
|
|
281
|
+
|
|
282
|
+
# Define the Planck function B_lambda (in erg/s/cm^2/cm/sr)
|
|
283
|
+
def planck_lambda(lam, T):
|
|
284
|
+
h = planck # erg s
|
|
285
|
+
c = speed_of_light # cm/s
|
|
286
|
+
k = boltzmann_constant # erg/K
|
|
287
|
+
return (2.0 * h * c ** 2) / (lam ** 5) / (np.exp(h * c / (lam * k * T)) - 1.0)
|
|
288
|
+
|
|
289
|
+
# Integrand: π * B_lambda gives flux per unit wavelength (erg/s/cm²/cm)
|
|
290
|
+
integrand = lambda lam, T: np.pi * planck_lambda(lam, T)
|
|
291
|
+
# Integrate from lambda_cut to infinity to get the red flux.
|
|
292
|
+
F_red, integration_error = quad(integrand, lambda_cut, np.inf, args=(temperature,))
|
|
293
|
+
# Compute boost factor.
|
|
294
|
+
Boost = F_tot / F_red
|
|
295
|
+
# Corrected luminosity.
|
|
296
|
+
return Boost * L_bb, L_bb
|
|
297
|
+
|
|
251
298
|
|
|
252
299
|
class CutoffBlackbody(_SED):
|
|
253
300
|
|
redback/simulate_transients.py
CHANGED
|
@@ -76,7 +76,7 @@ class SimulateGenericTransient(object):
|
|
|
76
76
|
injection_kwargs = self.parameters.copy()
|
|
77
77
|
if 'bands' in model_kwargs.keys():
|
|
78
78
|
injection_kwargs['bands'] = self.subset_bands
|
|
79
|
-
injection_kwargs['output_format'] = '
|
|
79
|
+
injection_kwargs['output_format'] = model_kwargs['output_format']
|
|
80
80
|
if 'frequency' in model_kwargs.keys():
|
|
81
81
|
injection_kwargs['frequency'] = self.subset_frequency
|
|
82
82
|
injection_kwargs['output_format'] = 'flux_density'
|
|
@@ -534,6 +534,10 @@ class SimulateOpticalTransient(object):
|
|
|
534
534
|
Function to wrap user models into sncosmo model format for full functionality.
|
|
535
535
|
:return: sncosmo source
|
|
536
536
|
"""
|
|
537
|
+
# Ensure sncosmo_kwargs is a dictionary
|
|
538
|
+
if self.sncosmo_kwargs is None:
|
|
539
|
+
self.sncosmo_kwargs = {}
|
|
540
|
+
|
|
537
541
|
self.sncosmo_kwargs['max_time'] = self.sncosmo_kwargs.get('max_time', 100)
|
|
538
542
|
self.parameters['wavelength_observer_frame'] = self.parameters.get('wavelength_observer_frame',
|
|
539
543
|
np.geomspace(100,60000,100))
|