redback 1.0.1__py3-none-any.whl → 1.0.3__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 +4 -0
- redback/constraints.py +46 -25
- redback/eos.py +1 -0
- redback/get_data/fink.py +1 -1
- redback/get_data/lasair.py +3 -4
- redback/get_data/swift.py +7 -7
- redback/interaction_processes.py +1 -4
- redback/likelihoods.py +207 -21
- redback/model_library.py +2 -2
- redback/plotting.py +10 -10
- redback/priors/bazin_sne.prior +5 -0
- redback/priors/csm_interaction.prior +6 -7
- redback/priors/csm_nickel.prior +3 -3
- redback/priors/csm_shock_and_arnett.prior +11 -0
- redback/priors/csm_shock_and_arnett_bolometric.prior +10 -0
- redback/priors/csm_shock_breakout.prior +7 -0
- redback/priors/nicholl_bns.prior +2 -1
- redback/priors/one_comp_kne_rosswog_heatingrate.prior +5 -0
- redback/priors/pwn.prior +7 -0
- redback/priors/shocked_cocoon.prior +6 -6
- redback/priors/sn_fallback.prior +8 -0
- redback/priors/stream_stream_tde.prior +10 -0
- redback/priors/stream_stream_tde_bolometric.prior +9 -0
- redback/priors/tde_analytical.prior +5 -5
- redback/priors/tde_analytical_bolometric.prior +6 -4
- redback/priors/tde_fallback.prior +9 -0
- redback/priors/tde_fallback_bolometric.prior +6 -0
- redback/priors/tde_synchrotron.prior +6 -0
- redback/priors/tophat_from_emulator.prior +9 -0
- redback/priors/two_comp_kne_rosswog_heatingrate.prior +9 -0
- redback/priors/two_layer_stratified_kilonova.prior +1 -1
- redback/priors/villar_sne.prior +7 -0
- redback/priors.py +12 -1
- redback/sed.py +194 -2
- redback/simulate_transients.py +71 -35
- redback/tables/GRBs_w_redshift.txt +430 -413
- redback/tables/LGRB_table.txt +70 -6
- redback/tables/SGRB_table.txt +139 -135
- redback/tables/filters.csv +14 -0
- redback/tables/qdot_rosswogkorobkin24.pck +0 -0
- redback/tables/ztf.tar.gz +0 -0
- redback/transient/afterglow.py +17 -7
- redback/transient/kilonova.py +6 -3
- redback/transient/prompt.py +14 -4
- redback/transient/supernova.py +7 -3
- redback/transient/tde.py +6 -3
- redback/transient/transient.py +29 -12
- redback/transient_models/afterglow_models.py +152 -146
- redback/transient_models/combined_models.py +69 -48
- redback/transient_models/extinction_models.py +6 -6
- redback/transient_models/general_synchrotron_models.py +518 -0
- redback/transient_models/integrated_flux_afterglow_models.py +2 -2
- redback/transient_models/kilonova_models.py +310 -61
- redback/transient_models/magnetar_driven_ejecta_models.py +2 -2
- redback/transient_models/magnetar_models.py +1 -1
- redback/transient_models/phenomenological_models.py +69 -1
- redback/transient_models/shock_powered_models.py +159 -110
- redback/transient_models/supernova_models.py +211 -43
- redback/transient_models/tde_models.py +975 -5
- redback/utils.py +309 -16
- {redback-1.0.1.dist-info → redback-1.0.3.dist-info}/METADATA +46 -6
- {redback-1.0.1.dist-info → redback-1.0.3.dist-info}/RECORD +65 -49
- {redback-1.0.1.dist-info → redback-1.0.3.dist-info}/WHEEL +1 -1
- redback/tables/ztf_obslog.csv +0 -106649
- {redback-1.0.1.dist-info → redback-1.0.3.dist-info}/LICENCE.md +0 -0
- {redback-1.0.1.dist-info → redback-1.0.3.dist-info}/top_level.txt +0 -0
redback/model_library.py
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
from redback.transient_models import afterglow_models, \
|
|
2
2
|
extinction_models, kilonova_models, fireball_models, \
|
|
3
3
|
gaussianprocess_models, magnetar_models, magnetar_driven_ejecta_models, phase_models, phenomenological_models, \
|
|
4
|
-
prompt_models, shock_powered_models, supernova_models, tde_models, integrated_flux_afterglow_models, combined_models
|
|
4
|
+
prompt_models, shock_powered_models, supernova_models, tde_models, integrated_flux_afterglow_models, combined_models, general_synchrotron_models
|
|
5
5
|
from redback.utils import get_functions_dict
|
|
6
6
|
|
|
7
7
|
modules = [afterglow_models, extinction_models, fireball_models,
|
|
8
8
|
gaussianprocess_models, integrated_flux_afterglow_models, kilonova_models,
|
|
9
9
|
magnetar_models, magnetar_driven_ejecta_models,
|
|
10
|
-
phase_models, phenomenological_models, prompt_models, shock_powered_models, supernova_models, tde_models, combined_models]
|
|
10
|
+
phase_models, phenomenological_models, prompt_models, shock_powered_models, supernova_models, tde_models, combined_models, general_synchrotron_models]
|
|
11
11
|
|
|
12
12
|
all_models_dict = dict()
|
|
13
13
|
modules_dict = dict()
|
redback/plotting.py
CHANGED
|
@@ -346,7 +346,7 @@ class IntegratedFluxPlotter(Plotter):
|
|
|
346
346
|
axes.plot(times, ys, color=self.random_sample_color, alpha=self.random_sample_alpha, lw=self.linewidth,
|
|
347
347
|
zorder=self.zorder)
|
|
348
348
|
elif self.uncertainty_mode == "credible_intervals":
|
|
349
|
-
lower_bound, upper_bound, _ = redback.utils.calc_credible_intervals(samples=random_ys_list)
|
|
349
|
+
lower_bound, upper_bound, _ = redback.utils.calc_credible_intervals(samples=random_ys_list, interval=self.credible_interval_level)
|
|
350
350
|
axes.fill_between(
|
|
351
351
|
times, lower_bound, upper_bound, alpha=self.uncertainty_band_alpha, color=self.max_likelihood_color)
|
|
352
352
|
|
|
@@ -391,11 +391,11 @@ class LuminosityPlotter(IntegratedFluxPlotter):
|
|
|
391
391
|
|
|
392
392
|
class MagnitudePlotter(Plotter):
|
|
393
393
|
|
|
394
|
-
xlim_low_phase_model_multiplier = 0.9
|
|
395
|
-
xlim_high_phase_model_multiplier = 1.1
|
|
396
|
-
xlim_high_multiplier = 1.2
|
|
397
|
-
ylim_low_magnitude_multiplier = 0.8
|
|
398
|
-
ylim_high_magnitude_multiplier = 1.2
|
|
394
|
+
xlim_low_phase_model_multiplier = KwargsAccessorWithDefault("xlim_low_multiplier", 0.9)
|
|
395
|
+
xlim_high_phase_model_multiplier = KwargsAccessorWithDefault("xlim_high_multiplier", 1.1)
|
|
396
|
+
xlim_high_multiplier = KwargsAccessorWithDefault("xlim_high_multiplier", 1.2)
|
|
397
|
+
ylim_low_magnitude_multiplier = KwargsAccessorWithDefault("ylim_low_multiplier", 0.8)
|
|
398
|
+
ylim_high_magnitude_multiplier = KwargsAccessorWithDefault("ylim_high_multiplier", 1.2)
|
|
399
399
|
ncols = KwargsAccessorWithDefault("ncols", 2)
|
|
400
400
|
|
|
401
401
|
@property
|
|
@@ -635,11 +635,11 @@ class MagnitudePlotter(Plotter):
|
|
|
635
635
|
elif self.uncertainty_mode == "credible_intervals":
|
|
636
636
|
if band in self.band_scaling:
|
|
637
637
|
if self.band_scaling.get("type") == 'x':
|
|
638
|
-
lower_bound, upper_bound, _ = redback.utils.calc_credible_intervals(samples=np.array(random_ys_list) * self.band_scaling.get(band))
|
|
638
|
+
lower_bound, upper_bound, _ = redback.utils.calc_credible_intervals(samples=np.array(random_ys_list) * self.band_scaling.get(band), interval=self.credible_interval_level)
|
|
639
639
|
elif self.band_scaling.get("type") == '+':
|
|
640
|
-
lower_bound, upper_bound, _ = redback.utils.calc_credible_intervals(samples=np.array(random_ys_list) + self.band_scaling.get(band))
|
|
640
|
+
lower_bound, upper_bound, _ = redback.utils.calc_credible_intervals(samples=np.array(random_ys_list) + self.band_scaling.get(band), interval=self.credible_interval_level)
|
|
641
641
|
else:
|
|
642
|
-
lower_bound, upper_bound, _ = redback.utils.calc_credible_intervals(samples=np.array(random_ys_list))
|
|
642
|
+
lower_bound, upper_bound, _ = redback.utils.calc_credible_intervals(samples=np.array(random_ys_list), interval=self.credible_interval_level)
|
|
643
643
|
axes.fill_between(
|
|
644
644
|
times - self._reference_mjd_date, lower_bound, upper_bound,
|
|
645
645
|
alpha=self.uncertainty_band_alpha, color=color_sample)
|
|
@@ -789,7 +789,7 @@ class MagnitudePlotter(Plotter):
|
|
|
789
789
|
axes[ii].plot(times - self._reference_mjd_date, random_ys, color=color_sample,
|
|
790
790
|
alpha=self.random_sample_alpha, lw=self.linewidth, zorder=self.zorder)
|
|
791
791
|
elif self.uncertainty_mode == "credible_intervals":
|
|
792
|
-
lower_bound, upper_bound, _ = redback.utils.calc_credible_intervals(samples=random_ys_list)
|
|
792
|
+
lower_bound, upper_bound, _ = redback.utils.calc_credible_intervals(samples=random_ys_list, interval=self.credible_interval_level)
|
|
793
793
|
axes[ii].fill_between(
|
|
794
794
|
times - self._reference_mjd_date, lower_bound, upper_bound,
|
|
795
795
|
alpha=self.uncertainty_band_alpha, color=color_sample)
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
aa = LogUniform(1e-15,1e15,name='aa', latex_label = r'$A$')
|
|
2
|
+
bb = LogUniform(1e-15,1e15,name='bb', latex_label = r'$B$')
|
|
3
|
+
t0 = Uniform(0,50,name='t0', latex_label = r'$t_0$')
|
|
4
|
+
tau_rise = Uniform(0.01, 50, name='tau_rise', latex_label = r'$\\tau_{\\mathrm{rise}}$')
|
|
5
|
+
tau_fall = Uniform(1, 300, name='tau_fall', latex_label = r'$\\tau_{\\mathrm{fall}}$')
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
redshift = Uniform(1e-3,3,name='redshift', latex_label = r'$z$')
|
|
2
|
-
mej = LogUniform(
|
|
3
|
-
csm_mass = LogUniform(
|
|
2
|
+
mej = LogUniform(1, 100, 'mej', latex_label = r'$M_{\mathrm{ej} }~(M_\odot)$')
|
|
3
|
+
csm_mass = LogUniform(1, 100, 'csm_mass', latex_label = r'$M_{\mathrm{csm}}~(M_\odot)$')
|
|
4
4
|
vej = LogUniform(1e3, 1e5, 'vej', latex_label = r'$v_{\mathrm{ej}}~(\mathrm{km}/\mathrm{s})$')
|
|
5
|
-
eta = Uniform(0,
|
|
6
|
-
rho =
|
|
7
|
-
r0 = Uniform(
|
|
5
|
+
eta = Uniform(0, 2, '\\eta', latex_label = r'$\\eta$')
|
|
6
|
+
rho = LogUniform(1e-14, 1e-12, 'rho', latex_label = r'$\\rho$')
|
|
7
|
+
r0 = Uniform(50, 700, 'r0', latex_label=r'$r_0~({\mathrm{AU}})$')
|
|
8
8
|
kappa = Uniform(0.05, 2, 'kappa', latex_label = r'$\\kappa~(\mathrm{cm}^{2}/\mathrm{g})$')
|
|
9
|
-
|
|
10
|
-
temperature_floor = LogUniform(1e3,1e5,name = 'temperature_floor', latex_label = r'$T_{\mathrm{floor}}~(\mathrm{K})$')
|
|
9
|
+
temperature_floor = LogUniform(100,1e4,name = 'temperature_floor', latex_label = r'$T_{\mathrm{floor}}~(\mathrm{K})$')
|
redback/priors/csm_nickel.prior
CHANGED
|
@@ -3,9 +3,9 @@ mej = LogUniform(1e-4, 100, 'mej', latex_label = r'$M_{\mathrm{ej} }~(M_\odot)$'
|
|
|
3
3
|
f_nickel = LogUniform(1e-3,1,name='f_nickel', latex_label = r'$f_{\mathrm{Ni}}$')
|
|
4
4
|
csm_mass = LogUniform(1e-4, 100, 'csm_mass', latex_label = r'$M_{\mathrm{csm}}~(M_\odot)$')
|
|
5
5
|
ek = LogUniform(1e48, 1e52, 'ek', latex_label = r'$E_{\mathrm{kin}}~(\mathrm{ erg})$')
|
|
6
|
-
eta = Uniform(0,
|
|
7
|
-
rho =
|
|
6
|
+
eta = Uniform(0, 2, '\\eta', latex_label = r'$\\eta$')
|
|
7
|
+
rho = LogUniform(1e-15, 1e-12, 'rho', latex_label = r'$\\rho$')
|
|
8
8
|
r0 = Uniform(4, 8, 'r0', latex_label=r'$r_0~({\mathrm{AU}})$')
|
|
9
9
|
kappa = Uniform(0.05, 2, 'kappa', latex_label = r'$\\kappa~(\mathrm{cm}^{2}/\mathrm{g})$')
|
|
10
10
|
kappa_gamma = LogUniform(1e-4, 1e4, 'kappa_gamma', latex_label = r'$\\kappa_{\\gamma}~(\mathrm{cm}^{2}/\mathrm{g})$')
|
|
11
|
-
temperature_floor = LogUniform(
|
|
11
|
+
temperature_floor = LogUniform(100,1e4,name = 'temperature_floor', latex_label = r'$T_{\mathrm{floor}}~(\mathrm{K})$')
|
|
@@ -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,10 @@
|
|
|
1
|
+
mej = LogUniform(1e-4, 30, 'mej', latex_label = r'$M_{\mathrm{ej}}~(M_\odot)$')
|
|
2
|
+
f_nickel = LogUniform(1e-3,1,name='f_nickel', latex_label = r'$f_{\mathrm{Ni}}$')
|
|
3
|
+
csm_mass = LogUniform(1e-3, 5, 'csm_mass', latex_label=r'$M_{\mathrm{CSM}}~(M_{\odot})$')
|
|
4
|
+
v_min = LogUniform(1e3, 3e4, 'vej', latex_label = r'$v_{\mathrm{ej}}~(\mathrm{km}/\mathrm{s})$')
|
|
5
|
+
beta = Uniform(0.4, 0.5, 'beta', latex_label=r'$\\beta$')
|
|
6
|
+
kappa = Uniform(0.01, 1, 'kappa', latex_label = r'$\\kappa~(\mathrm{cm}^{2}/\mathrm{g})$')
|
|
7
|
+
shell_radius = Uniform(1e-2, 10, 'shell_radius', latex_label=r'$R_{\mathrm{shell}}~(10^{14}~\mathrm{cm})$')
|
|
8
|
+
shell_width_ratio = Uniform(0.1, 0.5, 'shell_width_ratio', latex_label=r'$\\Delta~R_{\mathrm{shell}}/R_{\mathrm{shell}}$')
|
|
9
|
+
kappa_gamma = LogUniform(1e-4, 1e4, 'kappa_gamma', latex_label = r'$\\kappa_{\\gamma}~(\mathrm{cm}^{2}/\mathrm{g})$')
|
|
10
|
+
temperature_floor = LogUniform(1e3,1e5,name = 'temperature_floor', latex_label = r'$T_{\mathrm{floor}}~(\mathrm{K})$')
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
redshift = Uniform(0.01, 1, 'redshift', latex_label=r'$z$')
|
|
2
|
+
csm_mass = LogUniform(1e-3, 2, 'csm_mass', latex_label=r'$M_{\mathrm{CSM}}~(M_{\odot})$')
|
|
3
|
+
v_min = LogUniform(1e3, 3e4, 'vej', latex_label = r'$v_{\mathrm{ej}}~(\mathrm{km}/\mathrm{s})$')
|
|
4
|
+
beta = Uniform(0.4, 0.5, 'beta', latex_label=r'$\\beta$')
|
|
5
|
+
kappa = Uniform(0.01, 1, 'kappa', latex_label = r'$\\kappa~(\mathrm{cm}^{2}/\mathrm{g})$')
|
|
6
|
+
shell_radius = Uniform(1e-2, 10, 'shell_radius', latex_label=r'$R_{\mathrm{shell}}~(10^{14}~\mathrm{cm})$')
|
|
7
|
+
shell_width_ratio = Uniform(0.1, 0.5, 'shell_width_ratio', latex_label=r'$\\Delta~R_{\mathrm{shell}}/R_{\mathrm{shell}}$')
|
redback/priors/nicholl_bns.prior
CHANGED
|
@@ -8,7 +8,8 @@ mtov = Uniform(2.05, 2.4, 'mtov', latex_label = r'$M_{\mathrm{TOV}}~(M_\odot)$')
|
|
|
8
8
|
epsilon = Uniform(0.05, 0.6, 'zeta', latex_label = r'$\\epsilon$')
|
|
9
9
|
alpha = Uniform(0.1, 1, 'alpha', latex_label = r'$\\alpha$')
|
|
10
10
|
cos_theta = Uniform(0.0, 1.0, 'cos_theta', latex_label = r'$\cos~\\theta$')
|
|
11
|
-
|
|
11
|
+
cos_theta_open = Uniform(0.707, 0.866, 'cos_theta_open', latex_label = r'$\cos~\\theta_{\mathrm{open}}$')
|
|
12
|
+
cos_theta_cocoon = Uniform(0.866, 1.0, 'cos_theta_cocoon', latex_label = r'$\cos~\\theta_{\mathrm{cocoon}}$')
|
|
12
13
|
temperature_floor_1 = LogUniform(100, 6000, 'temperature_floor_1', latex_label = r'$T_{\mathrm{floor}~1}$ (K)')
|
|
13
14
|
temperature_floor_2 = LogUniform(100, 6000, 'temperature_floor_2', latex_label = r'$T_{\mathrm{floor}~2}$ (K)')
|
|
14
15
|
temperature_floor_3 = LogUniform(100, 6000, 'temperature_floor_3', latex_label = r'$T_{\mathrm{floor}~3}$ (K)')
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
redshift = Uniform(1e-6, 0.1, 'redshift', latex_label = r'$z$')
|
|
2
|
+
mej = Uniform(1e-2, 0.05, 'mej', latex_label = r'$M_{\mathrm{ej} }~(M_\odot)$')
|
|
3
|
+
vej = Uniform(0.05, 0.3, 'vej', latex_label = r'$v_{\mathrm{ej}}~(c)$')
|
|
4
|
+
ye = Uniform(0.05, 0.4, 'ye', latex_label = r'$Y_{e}$')
|
|
5
|
+
temperature_floor = LogUniform(100, 6000, 'temperature_floor', latex_label = r'$T_{\mathrm{floor}}~(\mathrm{K})$')
|
redback/priors/pwn.prior
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
redshift = Uniform(1e-6,3,name='redshift', latex_label = r'$z$')
|
|
2
|
+
l0 = LogUniform(1e40, 1e50, 'l0', latex_label = r'$L_{\mathrm{0}} [erg s^{-1}]$')
|
|
3
|
+
tau_sd = LogUniform(1e2, 1e8, 'tau_sd', latex_label = r'$t_{\mathrm{SD}} [s]$')
|
|
4
|
+
nn = LogUniform(1.5, 10, 'nn', latex_label = r'$n$')
|
|
5
|
+
mej = LogUniform(1e-1, 100, 'mej', latex_label = r'$M_{\mathrm{ej}} [M_{\odot}]$')
|
|
6
|
+
eps_b = LogUniform(1e-7, 1, 'eps_b', latex_label = r'$\epsilon_{\mathrm{B}}$')
|
|
7
|
+
gamma_b = LogUniform(1e2, 1e7, 'gamma_b', latex_label = r'$\gamma_{\mathrm{b}}$')
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
redshift = Uniform(1e-3,3,name='redshift', latex_label = r'$z$')
|
|
2
|
-
mej = Uniform(1e-4, 0.
|
|
3
|
-
vej = Uniform(0.
|
|
2
|
+
mej = Uniform(1e-4, 0.2, 'mej', latex_label = r'$M_{\mathrm{ej} }~(M_\odot)$')
|
|
3
|
+
vej = Uniform(0.01, 0.7, 'vej', latex_label = r'$v_{\mathrm{ej}}~(c)$')
|
|
4
4
|
eta = Uniform(1, 5, '\\eta', latex_label = r'$\\eta$')
|
|
5
|
-
tshock = Uniform(1,
|
|
6
|
-
shocked_fraction = Uniform(0.
|
|
7
|
-
cos_theta_cocoon = Uniform(0.
|
|
8
|
-
kappa = Uniform(1, 30, 'kappa', latex_label = r'$\\kappa~(\mathrm{cm}^{2}/\mathrm{g})$')
|
|
5
|
+
tshock = Uniform(0.1, 10, '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
|
+
kappa = Uniform(0.1, 30, 'kappa', latex_label = r'$\\kappa~(\mathrm{cm}^{2}/\mathrm{g})$')
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
redshift = Uniform(1e-3,3,name='redshift', latex_label = r'$z$')
|
|
2
|
+
logl1 = Uniform(51, 57, name='logl1', latex_label=r'$\log_{10}L_{1} [erg~s^{-1}]$')
|
|
3
|
+
tr = LogUniform(1e-4, 100, name='tr', latex_label=r'T_{r} [day]')
|
|
4
|
+
mej = LogUniform(1e-4, 100, 'mej', latex_label = r'$M_{\mathrm{ej}}~(M_\odot)$')
|
|
5
|
+
vej = LogUniform(1e3, 1e5, 'vej', latex_label = r'$v_{\mathrm{ej}}~(\mathrm{km}/\mathrm{s})$')
|
|
6
|
+
kappa = Uniform(0.05, 2, 'kappa', latex_label = r'$\\kappa~(\mathrm{cm}^{2}/\mathrm{g})$')
|
|
7
|
+
kappa_gamma = LogUniform(1e-4, 1e4, 'kappa_gamma', latex_label = r'$\\kappa_{\\gamma}~(\mathrm{cm}^{2}/\mathrm{g})$')
|
|
8
|
+
temperature_floor = LogUniform(1e3,1e5,name = 'temperature_floor', latex_label = r'$T_{\mathrm{floor}}~(\mathrm{K})$')
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
redshift = Uniform(1e-6, 3, 'redshift', latex_label = r'$z$')
|
|
2
|
+
peak_time = LogUniform(0.1,60, name='peak_time', latex_label = r'$t_{\mathrm{peak}}~(\mathrm{day})$')
|
|
3
|
+
sigma_t = LogUniform(10,60, name='sigma_t', latex_label = r'$\\sigma~(\mathrm{day})$')
|
|
4
|
+
mbh_6 = LogUniform(0.01, 20, name='mbh_6', latex_label = r'$M_{\mathrm{BH}}~(10^{6}~M_\odot)$')
|
|
5
|
+
mstar = LogUniform(0.1, 10, name='stellar_mass', latex_label = r'$M_{\mathrm{star}}~(M_\odot)$')
|
|
6
|
+
c1 = 1.0
|
|
7
|
+
del_omega = 2.0
|
|
8
|
+
f = 0.2
|
|
9
|
+
h_r = 0.2
|
|
10
|
+
inc_tcool = 1
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
peak_time = LogUniform(0.1,60, name='peak_time', latex_label = r'$t_{\mathrm{peak}}~(\mathrm{day})$')
|
|
2
|
+
sigma_t = LogUniform(10,60, name='sigma_t', latex_label = r'$\\sigma~(\mathrm{day})$')
|
|
3
|
+
mbh_6 = LogUniform(0.01, 20, name='mbh_6', latex_label = r'$M_{\mathrm{BH}}~(10^{6}~M_\odot)$')
|
|
4
|
+
mstar = LogUniform(0.1, 10, name='stellar_mass', latex_label = r'$M_{\mathrm{star}}~(M_\odot)$')
|
|
5
|
+
c1 = 1.0
|
|
6
|
+
del_omega = 2.0
|
|
7
|
+
f = 0.2
|
|
8
|
+
h_r = 0.2
|
|
9
|
+
inc_tcool = 1
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
redshift = Uniform(0.01, 3, 'redshift', latex_label=r'$z$')
|
|
2
|
-
mej = LogUniform(
|
|
2
|
+
mej = LogUniform(0.1, 100, 'mej', latex_label = r'$M_{\mathrm{ej} }~(M_\odot)$')
|
|
3
3
|
vej = LogUniform(1e3, 1e5, 'vej', latex_label = r'$v_{\mathrm{ej}}~(\mathrm{km}/\mathrm{s})$')
|
|
4
|
-
kappa = Uniform(0.05,
|
|
4
|
+
kappa = Uniform(0.05, 1e2, 'kappa', latex_label = r'$\\kappa~(\mathrm{cm}^{2}/\mathrm{g})$')
|
|
5
5
|
kappa_gamma = LogUniform(1e-4, 1e4, 'kappa_gamma', latex_label = r'$\\kappa_{\\gamma}~(\mathrm{cm}^{2}/\mathrm{g})$')
|
|
6
|
-
temperature_floor = LogUniform(1e3,
|
|
7
|
-
l0 = LogUniform(1e51,
|
|
8
|
-
t_0_turn = LogUniform(1e-4,
|
|
6
|
+
temperature_floor = LogUniform(1e3,1e4,name = 'temperature_floor', latex_label = r'$T_{\mathrm{floor}}~(\mathrm{K})$')
|
|
7
|
+
l0 = LogUniform(1e51, 1e60, "l0", latex_label="$l_0$")
|
|
8
|
+
t_0_turn = LogUniform(1e-4, 5e2, "t_0_turn", latex_label="$t_{0 t}$")
|
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
|
|
1
|
+
redshift = Uniform(0.01, 3, 'redshift', latex_label=r'$z$')
|
|
2
|
+
mej = LogUniform(0.1, 100, 'mej', latex_label = r'$M_{\mathrm{ej} }~(M_\odot)$')
|
|
2
3
|
vej = LogUniform(1e3, 1e5, 'vej', latex_label = r'$v_{\mathrm{ej}}~(\mathrm{km}/\mathrm{s})$')
|
|
3
|
-
kappa = Uniform(0.05,
|
|
4
|
+
kappa = Uniform(0.05, 1e2, 'kappa', latex_label = r'$\\kappa~(\mathrm{cm}^{2}/\mathrm{g})$')
|
|
4
5
|
kappa_gamma = LogUniform(1e-4, 1e4, 'kappa_gamma', latex_label = r'$\\kappa_{\\gamma}~(\mathrm{cm}^{2}/\mathrm{g})$')
|
|
5
|
-
|
|
6
|
-
|
|
6
|
+
temperature_floor = LogUniform(1e3,1e4,name = 'temperature_floor', latex_label = r'$T_{\mathrm{floor}}~(\mathrm{K})$')
|
|
7
|
+
l0 = LogUniform(1e51, 1e60, "l0", latex_label="$l_0$")
|
|
8
|
+
t_0_turn = LogUniform(1e-4, 5e2, "t_0_turn", latex_label="$t_{0 t}$")
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
redshift = Uniform(1e-6, 3, 'redshift', latex_label = r'$z$')
|
|
2
|
+
mbh6 = Uniform(0.01, 20, name='mbh_6', latex_label = r'$M_{\mathrm{BH}}~[10^{6}~M_{\odot}]$')
|
|
3
|
+
mstar = Uniform(0.1, 30, name='mstar', latex_label = r'$M_{\mathrm{star}} [M_{\odot}]$')
|
|
4
|
+
tvisc = LogUniform(1e-3, 1e2, name='tvisc', latex_label = r'$t_{\mathrm{visc}}$')
|
|
5
|
+
bb = Uniform(0, 2, name='bb', latex_label = r'$\\beta^{\star}$')
|
|
6
|
+
eta = LogUniform(1e-4, 0.4, name='eta', latex_label=r'$\eta$')
|
|
7
|
+
leddlimit = 1
|
|
8
|
+
rph0 = LogUniform(1e-4, 1e4, name='rph_0', latex_label = r'$R_{\mathrm{ph-0}}$')
|
|
9
|
+
lphoto = Uniform(0, 2, name='lphoto', latex_label = r'$L_{\mathrm{photo}}^{\star}$')
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
mbh6 = Uniform(0.01, 20, name='mbh_6', latex_label = r'$M_{\mathrm{BH}}~[10^{6}~M_{\odot}]$')
|
|
2
|
+
mstar = Uniform(0.1, 30, name='mstar', latex_label = r'$M_{\mathrm{star}} [M_{\odot}]$')
|
|
3
|
+
tvisc = LogUniform(1e-3, 1e2, name='tvisc', latex_label = r'$t_{\mathrm{visc}}$')
|
|
4
|
+
bb = Uniform(0, 2, name='bb', latex_label = r'$\\beta^{\star}$')
|
|
5
|
+
eta = LogUniform(1e-4, 0.4, name='eta', latex_label=r'$\eta$')
|
|
6
|
+
leddlimit = 1
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
redshift = Uniform(0.01, 3, 'redshift', latex_label=r'$z$')
|
|
2
|
+
Mej = Uniform(0.1, 10, 'Mej', latex_label = r'$M_{\mathrm{ej}}~(M_\odot)$')
|
|
3
|
+
vej = Uniform(1e3, 3e4, 'vej', latex_label = r'$v_{\mathrm{ej}}~(\mathrm{km}/\mathrm{s})$')
|
|
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,9 @@
|
|
|
1
|
+
redshift = Uniform(0.01, 3, 'redshift', latex_label=r'$z$')
|
|
2
|
+
thv = Sine(name='thv', maximum=np.pi/2, latex_label=r'$\\theta_{\mathrm{observer}}~(\mathrm{rad})$')
|
|
3
|
+
loge0 = Uniform(44, 54, 'loge0', latex_label=r'$\log_{10}~E_{0} / {\mathrm{erg}}$')
|
|
4
|
+
thc = Uniform(0.01, 0.1, 'thc', latex_label=r'$\\theta_{\mathrm{core}}~({\mathrm{rad}})$')
|
|
5
|
+
logn0 = Uniform(-5, 2, 'logn0', latex_label=r'$\log_{10}~n_{\mathrm{ism}} / {\mathrm{cm}}^{-3}$')
|
|
6
|
+
p = Uniform(2, 3, 'p', latex_label=r'$p$')
|
|
7
|
+
logepse = Uniform(-5, 0, 'logepse', latex_label=r'$\log_{10}~\\epsilon_{e}$')
|
|
8
|
+
logepsb = Uniform(-5, 0, 'logepsb', latex_label=r'$\log_{10}~\\epsilon_{B}$')
|
|
9
|
+
g0 = Uniform(100,2000, 'g0', latex_label=r'$\\Gamma_{0}$')
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
redshift = Uniform(1e-6, 0.1, 'redshift', latex_label = r'$z$')
|
|
2
|
+
mej_1 = Uniform(1e-2, 0.05, 'mej', latex_label = r'$M_{\mathrm{ej}~1}~(M_\odot)$')
|
|
3
|
+
vej_1 = Uniform(0.05, 0.3, 'vej', latex_label = r'$v_{\mathrm{ej}~1}~(c)$')
|
|
4
|
+
ye_1 = Uniform(0.05, 0.5, 'ye', latex_label = r'$Y_{e~1}$')
|
|
5
|
+
temperature_floor_1 = LogUniform(100, 6000, 'temperature_floor', latex_label = r'$T_{\mathrm{floor}~1}~(\mathrm{K})$')
|
|
6
|
+
mej_2 = Uniform(1e-2, 0.05, 'mej', latex_label = r'$M_{\mathrm{ej}~2}~(M_\odot)$')
|
|
7
|
+
vej_2 = Uniform(0.05, 0.3, 'vej', latex_label = r'$v_{\mathrm{ej}~2}~(c)$')
|
|
8
|
+
ye_2 = Uniform(0.05, 0.5, 'ye', latex_label = r'$Y_{e~2}$')
|
|
9
|
+
temperature_floor_2 = LogUniform(100, 6000, 'temperature_floor', latex_label = r'$T_{\mathrm{floor}~2}~(\mathrm{K})$')
|
|
@@ -3,4 +3,4 @@ mej = Uniform(1e-2, 0.05, 'mej', latex_label = r'$M_{\mathrm{ej}}~(M_\odot)$')
|
|
|
3
3
|
vej_1 = Uniform(0.05, 0.2, 'vej_1', latex_label = r'$v_{\mathrm{ej}~1}~(c)$')
|
|
4
4
|
vej_2 = Uniform(0.3, 0.5, 'vej_2', latex_label = r'$v_{\mathrm{ej}~2}~(c)$')
|
|
5
5
|
kappa = Uniform(1, 30, 'kappa', latex_label = r'$\\kappa~(\mathrm{cm}^{2}/\mathrm{g})$')
|
|
6
|
-
beta = Uniform(1
|
|
6
|
+
beta = Uniform(3.1, 8, 'beta', latex_label = r'$\\beta$')
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
aa = LogUniform(1e-15,1e15,name='aa', latex_label = r'$A$')
|
|
2
|
+
cc = LogUniform(1e-15,1e15,name='bb', latex_label = r'$C$')
|
|
3
|
+
t0 = Uniform(0,50,name='t0', latex_label = r'$t_0$')
|
|
4
|
+
tau_rise = Uniform(0.01, 50, name='tau_rise', latex_label = r'$\\tau_{\\mathrm{rise}}$')
|
|
5
|
+
tau_fall = Uniform(1, 300, name='tau_fall', latex_label = r'$\\tau_{\\mathrm{fall}}$')
|
|
6
|
+
gamma = Uniform(0.1, 100, name='gamma', latex_label = r'$\\gamma$')
|
|
7
|
+
nu = Uniform(0, 1, name='nu', latex_label = r'$\\nu$')
|
redback/priors.py
CHANGED
|
@@ -9,7 +9,18 @@ from redback.utils import logger
|
|
|
9
9
|
|
|
10
10
|
|
|
11
11
|
def get_priors(model, times=None, y=None, yerr=None, dt=None, **kwargs):
|
|
12
|
-
|
|
12
|
+
"""
|
|
13
|
+
Get the prior for the given model. If the model is a prompt model, the times, y, and yerr must be provided.
|
|
14
|
+
|
|
15
|
+
:param model: String referring to a name of a model implemented in Redback.
|
|
16
|
+
:param times: Time array
|
|
17
|
+
:param y: Y values, arbitrary units
|
|
18
|
+
:param yerr: Error on y values, arbitrary units
|
|
19
|
+
:param dt: time interval
|
|
20
|
+
:param kwargs: Extra arguments to be passed to the prior function
|
|
21
|
+
:return: priors: PriorDict object
|
|
22
|
+
"""
|
|
23
|
+
prompt_prior_functions = dict(gaussian_prompt=get_gaussian_priors, skew_gaussian=get_skew_gaussian_priors,
|
|
13
24
|
skew_exponential=get_skew_exponential_priors, fred=get_fred_priors,
|
|
14
25
|
fred_extended=get_fred_extended_priors)
|
|
15
26
|
|
redback/sed.py
CHANGED
|
@@ -6,6 +6,193 @@ from sncosmo import TimeSeriesSource
|
|
|
6
6
|
from redback.constants import *
|
|
7
7
|
from redback.utils import nu_to_lambda, bandpass_magnitude_to_flux
|
|
8
8
|
|
|
9
|
+
def _bandflux_single_redback(model, band, time_or_phase):
|
|
10
|
+
"""
|
|
11
|
+
|
|
12
|
+
Synthetic photometry of a model through a single bandpass
|
|
13
|
+
|
|
14
|
+
:param model: Source object
|
|
15
|
+
:param band: Bandpass
|
|
16
|
+
:param time_or_phase: Time or phase numpy array
|
|
17
|
+
:return: bandflux through the bandpass
|
|
18
|
+
"""
|
|
19
|
+
from sncosmo.utils import integration_grid
|
|
20
|
+
HC_ERG_AA = 1.9864458571489284e-08 # planck * speed_of_light in AA/s
|
|
21
|
+
MODEL_BANDFLUX_SPACING = 5.0 # Angstroms
|
|
22
|
+
|
|
23
|
+
if (band.minwave() < model.minwave() or band.maxwave() > model.maxwave()):
|
|
24
|
+
raise ValueError('bandpass {0!r:s} [{1:.6g}, .., {2:.6g}] '
|
|
25
|
+
'outside spectral range [{3:.6g}, .., {4:.6g}]'
|
|
26
|
+
.format(band.name, band.minwave(), band.maxwave(),
|
|
27
|
+
model.minwave(), model.maxwave()))
|
|
28
|
+
|
|
29
|
+
# Set up wavelength grid. Spacing (dwave) evenly divides the bandpass,
|
|
30
|
+
# closest to 5 angstroms without going over.
|
|
31
|
+
wave, dwave = integration_grid(band.minwave(), band.maxwave(),
|
|
32
|
+
MODEL_BANDFLUX_SPACING)
|
|
33
|
+
trans = band(wave)
|
|
34
|
+
f = model._flux(time_or_phase, wave)
|
|
35
|
+
f = np.abs(f)
|
|
36
|
+
return np.sum(wave * trans * f, axis=1) * dwave / HC_ERG_AA
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
def _bandflux_redback(model, band, time_or_phase, zp, zpsys):
|
|
40
|
+
"""
|
|
41
|
+
Support function for bandflux in Source and Model. Follows SNCOSMO
|
|
42
|
+
|
|
43
|
+
This is necessary to have outside because ``phase`` is used in Source
|
|
44
|
+
and ``time`` is used in Model, and we want the method signatures to
|
|
45
|
+
have the right variable name.
|
|
46
|
+
"""
|
|
47
|
+
from sncosmo.magsystems import get_magsystem
|
|
48
|
+
from sncosmo.bandpasses import get_bandpass
|
|
49
|
+
|
|
50
|
+
if zp is not None and zpsys is None:
|
|
51
|
+
raise ValueError('zpsys must be given if zp is not None')
|
|
52
|
+
|
|
53
|
+
# broadcast arrays
|
|
54
|
+
if zp is None:
|
|
55
|
+
time_or_phase, band = np.broadcast_arrays(time_or_phase, band)
|
|
56
|
+
else:
|
|
57
|
+
time_or_phase, band, zp, zpsys = \
|
|
58
|
+
np.broadcast_arrays(time_or_phase, band, zp, zpsys)
|
|
59
|
+
|
|
60
|
+
# Convert all to 1-d arrays.
|
|
61
|
+
ndim = time_or_phase.ndim # Save input ndim for return val.
|
|
62
|
+
time_or_phase = np.atleast_1d(time_or_phase)
|
|
63
|
+
band = np.atleast_1d(band)
|
|
64
|
+
if zp is not None:
|
|
65
|
+
zp = np.atleast_1d(zp)
|
|
66
|
+
zpsys = np.atleast_1d(zpsys)
|
|
67
|
+
|
|
68
|
+
# initialize output arrays
|
|
69
|
+
bandflux = np.zeros(time_or_phase.shape, dtype=float)
|
|
70
|
+
|
|
71
|
+
# Loop over unique bands.
|
|
72
|
+
for b in set(band):
|
|
73
|
+
mask = band == b
|
|
74
|
+
b = get_bandpass(b)
|
|
75
|
+
|
|
76
|
+
fsum = _bandflux_single_redback(model, b, time_or_phase[mask])
|
|
77
|
+
|
|
78
|
+
if zp is not None:
|
|
79
|
+
zpnorm = 10. ** (0.4 * zp[mask])
|
|
80
|
+
bandzpsys = zpsys[mask]
|
|
81
|
+
for ms in set(bandzpsys):
|
|
82
|
+
mask2 = bandzpsys == ms
|
|
83
|
+
ms = get_magsystem(ms)
|
|
84
|
+
zpnorm[mask2] = zpnorm[mask2] / ms.zpbandflux(b)
|
|
85
|
+
fsum *= zpnorm
|
|
86
|
+
|
|
87
|
+
bandflux[mask] = fsum
|
|
88
|
+
|
|
89
|
+
if ndim == 0:
|
|
90
|
+
return bandflux[0]
|
|
91
|
+
return bandflux
|
|
92
|
+
|
|
93
|
+
def _bandmag_redback(model, band, magsys, time_or_phase):
|
|
94
|
+
"""
|
|
95
|
+
Support function for bandflux in Source and Model.
|
|
96
|
+
This is necessary to have outside the models because ``phase`` is used in
|
|
97
|
+
Source and ``time`` is used in Model.
|
|
98
|
+
"""
|
|
99
|
+
from sncosmo.magsystems import get_magsystem
|
|
100
|
+
|
|
101
|
+
bandflux = _bandflux_redback(model, band, time_or_phase, None, None)
|
|
102
|
+
band, magsys, bandflux = np.broadcast_arrays(band, magsys, bandflux)
|
|
103
|
+
return_scalar = (band.ndim == 0)
|
|
104
|
+
band = band.ravel()
|
|
105
|
+
magsys = magsys.ravel()
|
|
106
|
+
bandflux = bandflux.ravel()
|
|
107
|
+
|
|
108
|
+
result = np.empty(bandflux.shape, dtype=float)
|
|
109
|
+
for i, (b, ms, f) in enumerate(zip(band, magsys, bandflux)):
|
|
110
|
+
ms = get_magsystem(ms)
|
|
111
|
+
zpf = ms.zpbandflux(b)
|
|
112
|
+
result[i] = -2.5 * np.log10(f / zpf)
|
|
113
|
+
|
|
114
|
+
if return_scalar:
|
|
115
|
+
return result[0]
|
|
116
|
+
return result
|
|
117
|
+
|
|
118
|
+
class RedbackTimeSeriesSource(TimeSeriesSource):
|
|
119
|
+
def __init__(self, phase, wave, flux, **kwargs):
|
|
120
|
+
"""
|
|
121
|
+
RedbackTimeSeriesSource is a subclass of sncosmo.TimeSeriesSource that adds the ability to return the
|
|
122
|
+
flux density at a given time and wavelength, and changes
|
|
123
|
+
the behaviour of the _flux method to better handle models with very low flux values.
|
|
124
|
+
|
|
125
|
+
:param phase: phase/time array
|
|
126
|
+
:param wave: wavelength array in Angstrom
|
|
127
|
+
:param spectra: spectra in erg/cm^2/s/A evaluated at all times and frequencies; shape (len(times), len(frequency_array))
|
|
128
|
+
:param kwargs: additional arguments
|
|
129
|
+
"""
|
|
130
|
+
super(RedbackTimeSeriesSource, self).__init__(phase=phase, wave=wave, flux=flux, **kwargs)
|
|
131
|
+
|
|
132
|
+
def get_flux_density(self, time, wavelength):
|
|
133
|
+
"""
|
|
134
|
+
Get the flux density at a given time and wavelength.
|
|
135
|
+
|
|
136
|
+
:param time: time in days
|
|
137
|
+
:param wavelength: wavelength in Angstrom
|
|
138
|
+
:return: flux density in erg/cm^2/s/A
|
|
139
|
+
"""
|
|
140
|
+
return self._flux(time, wavelength)
|
|
141
|
+
|
|
142
|
+
def bandflux(self, band, phase, zp=None, zpsys=None):
|
|
143
|
+
"""
|
|
144
|
+
Flux through the given bandpass(es) at the given phase(s).
|
|
145
|
+
|
|
146
|
+
Default return value is flux in photons / s / cm^2. If zp and zpsys
|
|
147
|
+
are given, flux(es) are scaled to the requested zeropoints.
|
|
148
|
+
|
|
149
|
+
Parameters
|
|
150
|
+
----------
|
|
151
|
+
band : str or list_like
|
|
152
|
+
Name(s) of bandpass(es) in registry.
|
|
153
|
+
phase : float or list_like, optional
|
|
154
|
+
Phase(s) in days. Default is `None`, which corresponds to the full
|
|
155
|
+
native phase sampling of the model.
|
|
156
|
+
zp : float or list_like, optional
|
|
157
|
+
If given, zeropoint to scale flux to (must also supply ``zpsys``).
|
|
158
|
+
If not given, flux is not scaled.
|
|
159
|
+
zpsys : str or list_like, optional
|
|
160
|
+
Name of a magnitude system in the registry, specifying the system
|
|
161
|
+
that ``zp`` is in.
|
|
162
|
+
|
|
163
|
+
Returns
|
|
164
|
+
-------
|
|
165
|
+
bandflux : float or `~numpy.ndarray`
|
|
166
|
+
Flux in photons / s /cm^2, unless `zp` and `zpsys` are
|
|
167
|
+
given, in which case flux is scaled so that it corresponds
|
|
168
|
+
to the requested zeropoint. Return value is `float` if all
|
|
169
|
+
input parameters are scalars, `~numpy.ndarray` otherwise.
|
|
170
|
+
"""
|
|
171
|
+
return _bandflux_redback(self, band, phase, zp, zpsys)
|
|
172
|
+
|
|
173
|
+
def bandmag(self, band, magsys, phase):
|
|
174
|
+
"""Magnitude at the given phase(s) through the given
|
|
175
|
+
bandpass(es), and for the given magnitude system(s).
|
|
176
|
+
|
|
177
|
+
Parameters
|
|
178
|
+
----------
|
|
179
|
+
band : str or list_like
|
|
180
|
+
Name(s) of bandpass in registry.
|
|
181
|
+
magsys : str or list_like
|
|
182
|
+
Name(s) of `~sncosmo.MagSystem` in registry.
|
|
183
|
+
phase : float or list_like
|
|
184
|
+
Phase(s) in days.
|
|
185
|
+
|
|
186
|
+
Returns
|
|
187
|
+
-------
|
|
188
|
+
mag : float or `~numpy.ndarray`
|
|
189
|
+
Magnitude for each item in band, magsys, phase.
|
|
190
|
+
The return value is a float if all parameters are not iterables.
|
|
191
|
+
The return value is an `~numpy.ndarray` if any are iterable.
|
|
192
|
+
"""
|
|
193
|
+
return _bandmag_redback(self, band, magsys, phase)
|
|
194
|
+
|
|
195
|
+
|
|
9
196
|
|
|
10
197
|
def blackbody_to_flux_density(temperature, r_photosphere, dl, frequency):
|
|
11
198
|
"""
|
|
@@ -298,13 +485,18 @@ def get_correct_output_format_from_spectra(time, time_eval, spectra, lambda_arra
|
|
|
298
485
|
:param time: times in observer frame in days to evaluate the model on
|
|
299
486
|
:param time_eval: times in observer frame where spectra are evaluated. A densely sampled array for accuracy
|
|
300
487
|
:param bands: band array - must be same length as time array or a single band
|
|
301
|
-
:param spectra: spectra in
|
|
488
|
+
:param spectra: spectra in erg/cm^2/s/A evaluated at all times and frequencies; shape (len(times), len(frequency_array))
|
|
302
489
|
:param lambda_array: wavelenth array in Angstrom in observer frame
|
|
303
490
|
:param kwargs: Additional parameters
|
|
304
491
|
:param output_format: 'flux', 'magnitude', 'sncosmo_source', 'flux_density'
|
|
305
492
|
:return: flux, magnitude or SNcosmo TimeSeries Source depending on output format kwarg
|
|
306
493
|
"""
|
|
307
|
-
|
|
494
|
+
# clean up spectrum to remove nonsensical values before creating sncosmo source
|
|
495
|
+
spectra = np.nan_to_num(spectra)
|
|
496
|
+
spectra[spectra.value == np.nan_to_num(np.inf)] = 1e-30 * np.mean(spectra[5])
|
|
497
|
+
spectra[spectra.value == 0.] = 1e-30 * np.mean(spectra[5])
|
|
498
|
+
|
|
499
|
+
source = RedbackTimeSeriesSource(phase=time_eval, wave=lambda_array, flux=spectra)
|
|
308
500
|
if kwargs['output_format'] == 'flux':
|
|
309
501
|
bands = kwargs['bands']
|
|
310
502
|
magnitude = source.bandmag(phase=time, band=bands, magsys='ab')
|