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
|
@@ -1178,8 +1178,8 @@ def fitted_pl_decay(time, redshift, log_mh, a_bh, m_disc, r0, tvi, t_form, incl,
|
|
|
1178
1178
|
nulnus_decay = np.zeros(len(time))
|
|
1179
1179
|
|
|
1180
1180
|
if len(freqs_un) == 1:
|
|
1181
|
-
nulnus_plateau = m.model_UV(time, log_mh, a_bh, m_disc, r0, tvi, t_form, ang,
|
|
1182
|
-
nulnus_decay = m.decay_model(time, log_L,
|
|
1181
|
+
nulnus_plateau = m.model_UV(time, log_mh, a_bh, m_disc, r0, tvi, t_form, ang, v=freqs_un[0])
|
|
1182
|
+
nulnus_decay = m.decay_model(time, log_L, t_decay, p, t_peak, log_T, v=freqs_un[0])
|
|
1183
1183
|
nulnus_rise = m.rise_model(time, log_L, sigma, t_peak, log_T, v=freqs_un[0])
|
|
1184
1184
|
else:
|
|
1185
1185
|
for i in range(0,len(freqs_un)):
|
|
@@ -1199,9 +1199,11 @@ def fitted_pl_decay(time, redshift, log_mh, a_bh, m_disc, r0, tvi, t_form, incl,
|
|
|
1199
1199
|
frequency, time = calc_kcorrected_properties(frequency=lambda_to_nu(lambda_observer_frame),
|
|
1200
1200
|
redshift=redshift, time=time_observer_frame)
|
|
1201
1201
|
nulnus_plateau = m.model_SEDs(time, log_mh, a_bh, m_disc, r0, tvi, t_form, ang, frequency)
|
|
1202
|
-
|
|
1203
|
-
|
|
1204
|
-
|
|
1202
|
+
|
|
1203
|
+
freq_0 = 6e14
|
|
1204
|
+
l_e_amp = (model.decay_model(time, log_L, t_decay, t_peak, log_T, freq_0) + model.rise_model(time, log_L, sigma, t_peak, log_T, freq_0))
|
|
1205
|
+
nulnus_risedecay = ((l_e_amp[:, None] * (frequency/freq_0)**4 *
|
|
1206
|
+
(np.exp(cc.planck * freq_0/(cc.boltzmann_constant * 10**log_T)) - 1)/(np.exp(cc.planck * frequency/(cc.boltzmann_constant * 10**log_T)) - 1)).T)
|
|
1205
1207
|
flux_density = ((nulnus_risedecay + nulnus_plateau)/(4.0 * np.pi * dl**2 * frequency[:,np.newaxis] * 1.0e-26))
|
|
1206
1208
|
fmjy = flux_density.T
|
|
1207
1209
|
spectra = (fmjy * uu.mJy).to(uu.erg / uu.cm ** 2 / uu.s / uu.Angstrom,
|
|
@@ -1259,8 +1261,8 @@ def fitted_exp_decay(time, redshift, log_mh, a_bh, m_disc, r0, tvi, t_form, incl
|
|
|
1259
1261
|
nulnus_decay = np.zeros(len(time))
|
|
1260
1262
|
|
|
1261
1263
|
if len(freqs_un) == 1:
|
|
1262
|
-
nulnus_plateau = m.model_UV(time, log_mh, a_bh, m_disc, r0, tvi, t_form, ang,
|
|
1263
|
-
nulnus_decay = m.decay_model(time, log_L,
|
|
1264
|
+
nulnus_plateau = m.model_UV(time, log_mh, a_bh, m_disc, r0, tvi, t_form, ang, v=freqs_un[0])
|
|
1265
|
+
nulnus_decay = m.decay_model(time, log_L, t_decay, t_peak, log_T, v=freqs_un[0])
|
|
1264
1266
|
nulnus_rise = m.rise_model(time, log_L, sigma, t_peak, log_T, v=freqs_un[0])
|
|
1265
1267
|
else:
|
|
1266
1268
|
for i in range(0,len(freqs_un)):
|
|
@@ -1280,9 +1282,11 @@ def fitted_exp_decay(time, redshift, log_mh, a_bh, m_disc, r0, tvi, t_form, incl
|
|
|
1280
1282
|
frequency, time = calc_kcorrected_properties(frequency=lambda_to_nu(lambda_observer_frame),
|
|
1281
1283
|
redshift=redshift, time=time_observer_frame)
|
|
1282
1284
|
nulnus_plateau = m.model_SEDs(time, log_mh, a_bh, m_disc, r0, tvi, t_form, ang, frequency)
|
|
1283
|
-
|
|
1284
|
-
|
|
1285
|
-
|
|
1285
|
+
|
|
1286
|
+
freq_0 = 6e14
|
|
1287
|
+
l_e_amp = (m.decay_model(time, log_L, t_decay, t_peak, log_T, freq_0) + m.rise_model(time, log_L, sigma, t_peak, log_T, freq_0))
|
|
1288
|
+
nulnus_risedecay = ((l_e_amp[:, None] * (frequency/freq_0)**4 *
|
|
1289
|
+
(np.exp(cc.planck * freq_0/(cc.boltzmann_constant * 10**log_T)) - 1)/(np.exp(cc.planck * frequency/(cc.boltzmann_constant * 10**log_T)) - 1)).T)
|
|
1286
1290
|
flux_density = ((nulnus_risedecay + nulnus_plateau)/(4.0 * np.pi * dl**2 * frequency[:,np.newaxis] * 1.0e-26))
|
|
1287
1291
|
fmjy = flux_density.T
|
|
1288
1292
|
spectra = (fmjy * uu.mJy).to(uu.erg / uu.cm ** 2 / uu.s / uu.Angstrom,
|
|
@@ -1378,11 +1382,10 @@ def stream_stream_tde_bolometric(time, mbh_6, mstar, c1, f, h_r, inc_tcool, del_
|
|
|
1378
1382
|
norm = output.bolometric_luminosity[0] / f1
|
|
1379
1383
|
|
|
1380
1384
|
#evaluate giant array of bolometric luminosities
|
|
1381
|
-
tt_pre_fb = np.linspace(0, output.time_temp[0], 100)
|
|
1385
|
+
tt_pre_fb = np.linspace(0, output.time_temp[0]-0.001, 100)
|
|
1382
1386
|
tt_post_fb = output.time_temp
|
|
1383
1387
|
full_time = np.concatenate([tt_pre_fb, tt_post_fb])
|
|
1384
|
-
f1 =
|
|
1385
|
-
peak_time=peak_time * cc.day_to_s, sigma_t=sigma_t * cc.day_to_s)
|
|
1388
|
+
f1 = norm * np.exp(-(tt_pre_fb - (peak_time * cc.day_to_s))**2.0 / (2 * (sigma_t * cc.day_to_s) **2.0))
|
|
1386
1389
|
f2 = output.bolometric_luminosity
|
|
1387
1390
|
full_lbol = np.concatenate([f1, f2])
|
|
1388
1391
|
lbol_func = interp1d(full_time, y=full_lbol, fill_value='extrapolate')
|
|
@@ -1420,7 +1423,7 @@ def stream_stream_tde(time, redshift, mbh_6, mstar, c1, f, h_r, inc_tcool, del_o
|
|
|
1420
1423
|
#get bolometric and temperature info
|
|
1421
1424
|
f1 = pm.gaussian_rise(time=output.time_temp[0] / cc.day_to_s, a_1=1, peak_time=peak_time, sigma_t=sigma_t)
|
|
1422
1425
|
norm = output.bolometric_luminosity[0] / f1
|
|
1423
|
-
tt_pre_fb = np.linspace(0, output.time_temp[0], 100)
|
|
1426
|
+
tt_pre_fb = np.linspace(0, output.time_temp[0]-0.001, 100)
|
|
1424
1427
|
tt_post_fb = output.time_temp
|
|
1425
1428
|
full_time = np.concatenate([tt_pre_fb, tt_post_fb])
|
|
1426
1429
|
f1_src = pm.gaussian_rise(time=tt_pre_fb, a_1=norm,
|
|
@@ -1436,34 +1439,47 @@ def stream_stream_tde(time, redshift, mbh_6, mstar, c1, f, h_r, inc_tcool, del_o
|
|
|
1436
1439
|
if kwargs['output_format'] == 'flux_density':
|
|
1437
1440
|
frequency = kwargs['frequency']
|
|
1438
1441
|
if isinstance(frequency, float):
|
|
1439
|
-
frequency = np.ones(len(time)) * frequency
|
|
1440
|
-
|
|
1441
|
-
else:
|
|
1442
|
-
bands = kwargs['bands']
|
|
1443
|
-
if isinstance(bands, str):
|
|
1444
|
-
bands = [str(bands) for x in range(len(time))]
|
|
1445
|
-
frequency=bands_to_frequency(bands)
|
|
1442
|
+
frequency = np.ones(len(time)) * frequency
|
|
1446
1443
|
|
|
1447
|
-
|
|
1448
|
-
|
|
1449
|
-
|
|
1450
|
-
|
|
1451
|
-
|
|
1452
|
-
|
|
1453
|
-
|
|
1454
|
-
|
|
1455
|
-
|
|
1444
|
+
# convert to source frame time and frequency
|
|
1445
|
+
frequency, time = calc_kcorrected_properties(frequency=frequency, redshift=redshift, time=time)
|
|
1446
|
+
unique_frequency = np.sort(np.unique(frequency))
|
|
1447
|
+
|
|
1448
|
+
# build flux density function for each frequency
|
|
1449
|
+
flux_den_interp_func = {}
|
|
1450
|
+
total_time = full_time * (1 + redshift)
|
|
1451
|
+
for freq in unique_frequency:
|
|
1452
|
+
flux_den = sed.blackbody_to_flux_density(temperature=full_temp,
|
|
1456
1453
|
r_photosphere=r_eff,
|
|
1457
1454
|
dl=dl, frequency=freq).to(uu.mJy)
|
|
1458
|
-
|
|
1455
|
+
flux_den_interp_func[freq] = interp1d(total_time, flux_den, fill_value='extrapolate')
|
|
1459
1456
|
|
|
1460
|
-
|
|
1461
|
-
|
|
1462
|
-
|
|
1463
|
-
|
|
1464
|
-
|
|
1465
|
-
|
|
1466
|
-
|
|
1467
|
-
|
|
1468
|
-
|
|
1469
|
-
|
|
1457
|
+
# interpolate onto actual observed frequency and time values
|
|
1458
|
+
flux_density = []
|
|
1459
|
+
for freq, tt in zip(frequency, time):
|
|
1460
|
+
flux_density.append(flux_den_interp_func[freq](tt * cc.day_to_s))
|
|
1461
|
+
flux_density = flux_density * uu.mJy
|
|
1462
|
+
return flux_density.to(uu.mJy).value
|
|
1463
|
+
|
|
1464
|
+
else:
|
|
1465
|
+
time_obs = time
|
|
1466
|
+
lambda_observer_frame = kwargs.get('lambda_array', np.geomspace(100, 60000, 100))
|
|
1467
|
+
time_observer_frame = full_time * (1. + redshift)
|
|
1468
|
+
frequency, time = calc_kcorrected_properties(frequency=lambda_to_nu(lambda_observer_frame),
|
|
1469
|
+
redshift=redshift, time=time_observer_frame)
|
|
1470
|
+
freq_0 = 6e14
|
|
1471
|
+
flux_den = sed.blackbody_to_flux_density(temperature=full_temp,
|
|
1472
|
+
r_photosphere=r_eff,
|
|
1473
|
+
dl=dl, frequency=freq_0).to(uu.mJy)
|
|
1474
|
+
fmjy = ((flux_den[:, None] * (frequency/freq_0)**4 *
|
|
1475
|
+
(np.exp(cc.planck * freq_0/(cc.boltzmann_constant * full_temp[:, None])) - 1) / (np.exp(cc.planck * frequency/(cc.boltzmann_constant * full_temp[:, None])) - 1)).T)
|
|
1476
|
+
spectra = fmjy.T.to(uu.erg / uu.cm ** 2 / uu.s / uu.Angstrom,
|
|
1477
|
+
equivalencies=uu.spectral_density(wav=lambda_observer_frame * uu.Angstrom))
|
|
1478
|
+
if kwargs['output_format'] == 'spectra':
|
|
1479
|
+
return namedtuple('output', ['time', 'lambdas', 'spectra'])(time=time_observer_frame,
|
|
1480
|
+
lambdas=lambda_observer_frame,
|
|
1481
|
+
spectra=spectra)
|
|
1482
|
+
else:
|
|
1483
|
+
return sed.get_correct_output_format_from_spectra(time=time_obs, time_eval=time_observer_frame/cc.day_to_s,
|
|
1484
|
+
spectra=spectra, lambda_array=lambda_observer_frame,
|
|
1485
|
+
**kwargs)
|