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,82 @@
|
|
|
1
|
+
import numpy
|
|
2
|
+
from astropy.cosmology import Planck18 as cosmo
|
|
3
|
+
import redback.constants as cc
|
|
4
|
+
from redback.utils import lambda_to_nu, fnu_to_flambda
|
|
5
|
+
import redback.sed as sed
|
|
6
|
+
import redback.transient_models.phenomenological_models as pm
|
|
7
|
+
|
|
8
|
+
def _get_blackbody_spectrum(angstrom, temperature, r_photosphere, distance):
|
|
9
|
+
"""
|
|
10
|
+
:param angstrom: wavelength array in angstroms
|
|
11
|
+
:param temperature: temperature in Kelvin
|
|
12
|
+
:param r_photosphere: photosphere radius in cm
|
|
13
|
+
:param distance: distance in cm
|
|
14
|
+
:return: flux in ergs/s/cm^2/angstrom
|
|
15
|
+
"""
|
|
16
|
+
frequency = lambda_to_nu(angstrom)
|
|
17
|
+
flux_density = sed.blackbody_to_flux_density(frequency=frequency,
|
|
18
|
+
temperature=temperature,
|
|
19
|
+
r_photosphere=r_photosphere,
|
|
20
|
+
dl=distance)
|
|
21
|
+
flux_density = fnu_to_flambda(f_nu=flux_density, wavelength_A=angstrom)
|
|
22
|
+
return flux_density.value
|
|
23
|
+
|
|
24
|
+
def _get_powerlaw_spectrum(angstrom, alpha, aa):
|
|
25
|
+
"""
|
|
26
|
+
:param angstrom: wavelength array in angstroms
|
|
27
|
+
:param alpha: power law index
|
|
28
|
+
:param aa: normalization
|
|
29
|
+
:return: flux in ergs/s/cm^2/angstrom
|
|
30
|
+
"""
|
|
31
|
+
return aa*angstrom**alpha
|
|
32
|
+
|
|
33
|
+
def powerlaw_spectrum_with_absorption_and_emission_lines(angstroms, alpha, aa, lc1, ls1,
|
|
34
|
+
v1, lc2, ls2, v2, **kwargs):
|
|
35
|
+
"""
|
|
36
|
+
A power law spectrum with one absorption line and one emission line.
|
|
37
|
+
One can add more lines if needed. Or turn the line strength to zero to remove the line.
|
|
38
|
+
|
|
39
|
+
:param angstroms: wavelength array in angstroms
|
|
40
|
+
:param alpha: power law index
|
|
41
|
+
:param aa: normalization
|
|
42
|
+
:param lc1: center of emission line
|
|
43
|
+
:param ls1: strength of emission line
|
|
44
|
+
:param v1: velocity of emission line
|
|
45
|
+
:param lc2: center of absorption line
|
|
46
|
+
:param ls2: strength of absorption line
|
|
47
|
+
:param v2: velocity of absorption line
|
|
48
|
+
:return: flux in ergs/s/cm^2/angstrom
|
|
49
|
+
"""
|
|
50
|
+
flux = _get_powerlaw_spectrum(angstrom=angstroms, alpha=alpha, aa=aa)
|
|
51
|
+
fp1 = pm.line_spectrum_with_velocity_dispersion(angstroms, lc1, ls1, v1)
|
|
52
|
+
fp2 = pm.line_spectrum_with_velocity_dispersion(angstroms, lc2, ls2, v2)
|
|
53
|
+
return flux + fp1 - fp2
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
def blackbody_spectrum_with_absorption_and_emission_lines(angstroms, redshift,
|
|
57
|
+
rph, temp,
|
|
58
|
+
lc1, ls1, v1,
|
|
59
|
+
lc2, ls2, v2, **kwargs):
|
|
60
|
+
"""
|
|
61
|
+
A blackbody spectrum with one absorption line and one emission line.
|
|
62
|
+
One can add more lines if needed. Or turn the line strength to zero to remove the line.
|
|
63
|
+
|
|
64
|
+
:param angstroms: wavelength array in angstroms
|
|
65
|
+
:param redshift: redshift
|
|
66
|
+
:param rph: photosphere radius in cm
|
|
67
|
+
:param temp: photosphere temperature in Kelvin
|
|
68
|
+
:param lc1: center of emission line
|
|
69
|
+
:param ls1: strength of emission line
|
|
70
|
+
:param v1: velocity of emission line
|
|
71
|
+
:param lc2: center of absorption line
|
|
72
|
+
:param ls2: strength of absorption line
|
|
73
|
+
:param v2: velocity of absorption line
|
|
74
|
+
:return: flux in ergs/s/cm^2/angstrom
|
|
75
|
+
"""
|
|
76
|
+
cosmology = kwargs.get('cosmology', cosmo)
|
|
77
|
+
dl = cosmology.luminosity_distance(redshift).cgs.value
|
|
78
|
+
flux = _get_blackbody_spectrum(angstrom=angstroms, distance=dl,
|
|
79
|
+
r_photosphere=rph, temperature=temp)
|
|
80
|
+
fp1 = pm.line_spectrum_with_velocity_dispersion(angstroms, lc1, ls1, v1)
|
|
81
|
+
fp2 = pm.line_spectrum_with_velocity_dispersion(angstroms, lc2, ls2, v2)
|
|
82
|
+
return flux + fp1 - fp2
|
|
@@ -3,7 +3,7 @@ import pandas as pd
|
|
|
3
3
|
from redback.transient_models.phenomenological_models import exponential_powerlaw, fallback_lbol
|
|
4
4
|
from redback.transient_models.magnetar_models import magnetar_only, basic_magnetar
|
|
5
5
|
from redback.transient_models.magnetar_driven_ejecta_models import _ejecta_dynamics_and_interaction
|
|
6
|
-
from redback.transient_models.shock_powered_models import
|
|
6
|
+
from redback.transient_models.shock_powered_models import _shocked_cocoon, _csm_shock_breakout
|
|
7
7
|
import redback.interaction_processes as ip
|
|
8
8
|
import redback.sed as sed
|
|
9
9
|
import redback.photosphere as photosphere
|
|
@@ -115,6 +115,36 @@ def sncosmo_models(time, redshift, model_kwargs=None, **kwargs):
|
|
|
115
115
|
elif kwargs['output_format'] == 'sncosmo_source':
|
|
116
116
|
return model
|
|
117
117
|
|
|
118
|
+
@citation_wrapper('https://ui.adsabs.harvard.edu/abs/2007A%26A...466...11G/abstract, sncosmo')
|
|
119
|
+
def salt2(time, redshift, x0, x1, c, peak_time, **kwargs):
|
|
120
|
+
"""
|
|
121
|
+
A wrapper to the salt2 model in sncosmo
|
|
122
|
+
|
|
123
|
+
:param time: time in days in observer frame (in mjd days)
|
|
124
|
+
:param redshift: redshift
|
|
125
|
+
:param x0: x0
|
|
126
|
+
:param x1: x1
|
|
127
|
+
:param c: c
|
|
128
|
+
:param peak_time: peak time in mjd
|
|
129
|
+
:param kwargs: Additional keyword arguments
|
|
130
|
+
:param cosmology: astropy cosmology object by default set to Planck18
|
|
131
|
+
:param mw_extinction: Boolean for whether there is MW extinction or not. Default True
|
|
132
|
+
:param host_extinction: Boolean for whether there is host extinction or not. Default True
|
|
133
|
+
if used adds an extra parameter ebv which must also be in kwargs; host galaxy E(B-V). Set to 0.1 by default
|
|
134
|
+
:param use_set_peak_magnitude: Boolean for whether to set the peak magnitude or not. Default False,
|
|
135
|
+
if True the following keyword arguments also apply. Else the brightness is set by the model_kwargs.
|
|
136
|
+
:param peak_abs_mag: SNe peak absolute magnitude default set to -19
|
|
137
|
+
:param peak_abs_mag_band: Band corresponding to the peak abs mag limit, default to standard::b. Must be in SNCosmo
|
|
138
|
+
:param magnitude_system: Mag system; default ab
|
|
139
|
+
:param output_format: 'flux_density', 'magnitude', 'spectra', 'flux', 'sncosmo_source'
|
|
140
|
+
:return: set by output format - 'flux_density', 'magnitude', 'flux', 'sncosmo_source'
|
|
141
|
+
"""
|
|
142
|
+
kwargs['sncosmo_model'] = 'salt2'
|
|
143
|
+
kwargs['peak_time'] = peak_time
|
|
144
|
+
model_kwargs = {'x0':x0, 'x1':x1, 'c':c}
|
|
145
|
+
out = sncosmo_models(time=time, redshift=redshift, model_kwargs=model_kwargs, **kwargs)
|
|
146
|
+
return out
|
|
147
|
+
|
|
118
148
|
@citation_wrapper('redback')
|
|
119
149
|
def exponential_powerlaw_bolometric(time, lbol_0, alpha_1, alpha_2, tpeak_d, **kwargs):
|
|
120
150
|
"""
|
|
@@ -363,10 +393,40 @@ def arnett(time, redshift, f_nickel, mej, **kwargs):
|
|
|
363
393
|
spectra=spectra, lambda_array=lambda_observer_frame,
|
|
364
394
|
**kwargs)
|
|
365
395
|
|
|
366
|
-
|
|
396
|
+
def shock_cooling_and_arnett_bolometric(time, log10_mass, log10_radius, log10_energy,
|
|
397
|
+
f_nickel, mej, vej, kappa, kappa_gamma, temperature_floor, **kwargs):
|
|
398
|
+
"""
|
|
399
|
+
Bolometric luminosity of shock cooling and arnett model
|
|
400
|
+
|
|
401
|
+
:param time: time in days in source frame
|
|
402
|
+
:param log10_mass: log10 mass of extended material in solar masses
|
|
403
|
+
:param log10_radius: log10 radius of extended material in cm
|
|
404
|
+
:param log10_energy: log10 energy of extended material in ergs
|
|
405
|
+
:param f_nickel: fraction of nickel mass
|
|
406
|
+
:param mej: total ejecta mass in solar masses
|
|
407
|
+
:param vej: velocity of ejecta in km/s
|
|
408
|
+
:param kappa: opacity in cm^2/g
|
|
409
|
+
:param kappa_gamma: gamma-ray opacity in cm^2/g
|
|
410
|
+
:param temperature_floor: temperature floor in K
|
|
411
|
+
:param kwargs: Additional keyword arguments
|
|
412
|
+
:param nn: density power law slope
|
|
413
|
+
:param delta: inner density power law slope
|
|
414
|
+
:return: bolometric luminosity in erg/s
|
|
415
|
+
"""
|
|
416
|
+
from redback.transient_models.shock_powered_models import shock_cooling_bolometric
|
|
417
|
+
lbol_1 = shock_cooling_bolometric(time=time * day_to_s, log10_mass=log10_mass, log10_radius=log10_radius,
|
|
418
|
+
log10_energy=log10_energy, **kwargs)
|
|
419
|
+
lbol_2 = arnett_bolometric(time=time, f_nickel=f_nickel, mej=mej, vej=vej, kappa=kappa,
|
|
420
|
+
kappa_gamma=kappa_gamma, temperature_floor=temperature_floor, **kwargs)
|
|
421
|
+
return lbol_1 + lbol_2
|
|
422
|
+
|
|
423
|
+
|
|
424
|
+
@citation_wrapper('https://ui.adsabs.harvard.edu/abs/1982ApJ...253..785A/abstract, Piro+2021')
|
|
367
425
|
def shock_cooling_and_arnett(time, redshift, log10_mass, log10_radius, log10_energy,
|
|
368
|
-
f_nickel, mej, **kwargs):
|
|
426
|
+
f_nickel, mej, vej, kappa, kappa_gamma, temperature_floor, **kwargs):
|
|
369
427
|
"""
|
|
428
|
+
Photometric light curve of shock cooling and arnett model
|
|
429
|
+
|
|
370
430
|
:param time: time in days
|
|
371
431
|
:param redshift: source redshift
|
|
372
432
|
:param log10_mass: log10 mass of extended material in solar masses
|
|
@@ -374,12 +434,13 @@ def shock_cooling_and_arnett(time, redshift, log10_mass, log10_radius, log10_ene
|
|
|
374
434
|
:param log10_energy: log10 energy of extended material in ergs
|
|
375
435
|
:param f_nickel: fraction of nickel mass
|
|
376
436
|
:param mej: total ejecta mass in solar masses
|
|
377
|
-
:param
|
|
378
|
-
|
|
437
|
+
:param vej: velocity of ejecta in km/s
|
|
438
|
+
:param kappa: opacity in cm^2/g
|
|
439
|
+
:param kappa_gamma: gamma-ray opacity in cm^2/g
|
|
440
|
+
:param temperature_floor: temperature floor in K
|
|
441
|
+
:param kwargs: Additional keyword arguments
|
|
379
442
|
:param nn: density power law slope
|
|
380
443
|
:param delta: inner density power law slope
|
|
381
|
-
:param interaction_process: Default is Diffusion.
|
|
382
|
-
Can also be None in which case the output is just the raw engine luminosity, or another interaction process.
|
|
383
444
|
:param photosphere: Default is TemperatureFloor.
|
|
384
445
|
kwargs must have vej or relevant parameters if using different photosphere model
|
|
385
446
|
:param sed: Default is blackbody.
|
|
@@ -391,32 +452,19 @@ def shock_cooling_and_arnett(time, redshift, log10_mass, log10_radius, log10_ene
|
|
|
391
452
|
:param cosmology: Cosmology to use for luminosity distance calculation. Defaults to Planck18. Must be a astropy.cosmology object.
|
|
392
453
|
:return: set by output format - 'flux_density', 'magnitude', 'spectra', 'flux', 'sncosmo_source'
|
|
393
454
|
"""
|
|
394
|
-
kwargs['interaction_process'] = kwargs.get("interaction_process", ip.Diffusion)
|
|
395
455
|
kwargs['photosphere'] = kwargs.get("photosphere", photosphere.TemperatureFloor)
|
|
396
456
|
kwargs['sed'] = kwargs.get("sed", sed.Blackbody)
|
|
397
457
|
cosmology = kwargs.get('cosmology', cosmo)
|
|
398
458
|
dl = cosmology.luminosity_distance(redshift).cgs.value
|
|
399
|
-
mass = 10 ** log10_mass
|
|
400
|
-
radius = 10 ** log10_radius
|
|
401
|
-
energy = 10 ** log10_energy
|
|
402
459
|
|
|
403
460
|
if kwargs['output_format'] == 'flux_density':
|
|
404
461
|
frequency = kwargs['frequency']
|
|
405
462
|
frequency, time = calc_kcorrected_properties(frequency=frequency, redshift=redshift, time=time)
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
if kwargs['interaction_process'] is not None:
|
|
412
|
-
dense_resolution = kwargs.get("dense_resolution", 1000)
|
|
413
|
-
dense_times = np.linspace(0, time[-1]+100, dense_resolution)
|
|
414
|
-
dense_lbols = _nickelcobalt_engine(time=dense_times, f_nickel=f_nickel, mej=mej)
|
|
415
|
-
dense_lbols += _shock_cooling(dense_times * day_to_s, mass=mass, radius=radius, energy=energy, **kwargs).lbol
|
|
416
|
-
interaction_class = kwargs['interaction_process'](time=time, dense_times=dense_times, luminosity=dense_lbols,
|
|
417
|
-
mej=mej, **kwargs)
|
|
418
|
-
lbol = interaction_class.new_luminosity
|
|
419
|
-
photo = kwargs['photosphere'](time=time, luminosity=lbol, **kwargs)
|
|
463
|
+
lbol = shock_cooling_and_arnett_bolometric(time, log10_mass=log10_mass, log10_radius=log10_radius,
|
|
464
|
+
log10_energy=log10_energy, f_nickel=f_nickel,
|
|
465
|
+
mej=mej, vej=vej, kappa=kappa, kappa_gamma=kappa_gamma,
|
|
466
|
+
temperature_floor=temperature_floor, **kwargs)
|
|
467
|
+
photo = kwargs['photosphere'](time=time, luminosity=lbol, vej=vej, temperature_floor=temperature_floor, **kwargs)
|
|
420
468
|
|
|
421
469
|
sed_1 = kwargs['sed'](temperature=photo.photosphere_temperature, r_photosphere=photo.r_photosphere,
|
|
422
470
|
frequency=frequency, luminosity_distance=dl)
|
|
@@ -429,10 +477,11 @@ def shock_cooling_and_arnett(time, redshift, log10_mass, log10_radius, log10_ene
|
|
|
429
477
|
time_observer_frame = time_temp * (1. + redshift)
|
|
430
478
|
frequency, time = calc_kcorrected_properties(frequency=lambda_to_nu(lambda_observer_frame),
|
|
431
479
|
redshift=redshift, time=time_observer_frame)
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
480
|
+
lbol = shock_cooling_and_arnett_bolometric(time, log10_mass=log10_mass, log10_radius=log10_radius,
|
|
481
|
+
log10_energy=log10_energy, f_nickel=f_nickel,
|
|
482
|
+
mej=mej, vej=vej, kappa=kappa, kappa_gamma=kappa_gamma,
|
|
483
|
+
temperature_floor=temperature_floor, **kwargs)
|
|
484
|
+
photo = kwargs['photosphere'](time=time, luminosity=lbol, vej=vej, temperature_floor=temperature_floor, **kwargs)
|
|
436
485
|
sed_1 = kwargs['sed'](temperature=photo.photosphere_temperature, r_photosphere=photo.r_photosphere,
|
|
437
486
|
frequency=frequency[:,None], luminosity_distance=dl)
|
|
438
487
|
fmjy = sed_1.flux_density.T
|
|
@@ -447,6 +496,181 @@ def shock_cooling_and_arnett(time, redshift, log10_mass, log10_radius, log10_ene
|
|
|
447
496
|
spectra=spectra, lambda_array=lambda_observer_frame,
|
|
448
497
|
**kwargs)
|
|
449
498
|
|
|
499
|
+
@citation_wrapper('https://academic.oup.com/mnras/article/522/2/2764/7086123#443111844, https://ui.adsabs.harvard.edu/abs/1982ApJ...253..785A/abstract')
|
|
500
|
+
def shockcooling_morag_and_arnett_bolometric(time, v_shock, m_env, mej, f_rho, f_nickel, radius, kappa, **kwargs):
|
|
501
|
+
"""
|
|
502
|
+
Assumes Shock cooling following Morag+ and arnett model for radioactive decay
|
|
503
|
+
|
|
504
|
+
:param time: time in source frame in days
|
|
505
|
+
:param v_shock: shock speed in km/s, also the ejecta velocity in the arnett calculation
|
|
506
|
+
:param m_env: envelope mass in solar masses
|
|
507
|
+
:param mej: ejecta mass in solar masses
|
|
508
|
+
:param f_rho: f_rho. Typically, of order unity
|
|
509
|
+
:param f_nickel: fraction of nickel mass
|
|
510
|
+
:param radius: star/envelope radius in units of 10^13 cm
|
|
511
|
+
:param kappa: opacity in cm^2/g
|
|
512
|
+
:param kwargs: Additional parameters required by model
|
|
513
|
+
:return: bolometric luminosity in erg/s
|
|
514
|
+
"""
|
|
515
|
+
from redback.transient_models.shock_powered_models import shockcooling_morag_bolometric
|
|
516
|
+
f_rho_m = f_rho * mej
|
|
517
|
+
nickel_lbol = arnett_bolometric(time=time, f_nickel=f_nickel,
|
|
518
|
+
mej=mej, interaction_process=ip.Diffusion, kappa=kappa, vej=v_shock, **kwargs)
|
|
519
|
+
sbo_output = shockcooling_morag_bolometric(time=time, v_shock=v_shock, m_env=m_env, f_rho_m=f_rho_m,
|
|
520
|
+
radius=radius, kappa=kappa, **kwargs)
|
|
521
|
+
lbol = nickel_lbol + sbo_output
|
|
522
|
+
return lbol
|
|
523
|
+
|
|
524
|
+
@citation_wrapper('https://academic.oup.com/mnras/article/522/2/2764/7086123#443111844, https://ui.adsabs.harvard.edu/abs/1982ApJ...253..785A/abstract')
|
|
525
|
+
def shockcooling_morag_and_arnett(time, redshift, v_shock, m_env, mej, f_rho, f_nickel, radius, kappa, **kwargs):
|
|
526
|
+
"""
|
|
527
|
+
Assumes Shock cooling following Morag+ and arnett model for radioactive decay
|
|
528
|
+
|
|
529
|
+
:param time: time in observer frame in days
|
|
530
|
+
:param redshift: source redshift
|
|
531
|
+
:param v_shock: shock speed in km/s, also the ejecta velocity in the arnett calculation
|
|
532
|
+
:param m_env: envelope mass in solar masses
|
|
533
|
+
:param mej: ejecta mass in solar masses
|
|
534
|
+
:param f_rho: f_rho. Typically, of order unity
|
|
535
|
+
:param f_nickel: fraction of nickel mass
|
|
536
|
+
:param radius: star/envelope radius in units of 10^13 cm
|
|
537
|
+
:param kappa: opacity in cm^2/g
|
|
538
|
+
:param kwargs: Additional parameters required by model
|
|
539
|
+
:param frequency: Required if output_format is 'flux_density'.
|
|
540
|
+
frequency to calculate - Must be same length as time array or a single number).
|
|
541
|
+
:param bands: Required if output_format is 'magnitude' or 'flux'.
|
|
542
|
+
:param output_format: 'flux_density', 'magnitude', 'spectra', 'flux', 'sncosmo_source'
|
|
543
|
+
:param lambda_array: Optional argument to set your desired wavelength array (in Angstroms) to evaluate the SED on.
|
|
544
|
+
:param cosmology: Cosmology to use for luminosity distance calculation. Defaults to Planck18. Must be a astropy.cosmology object.
|
|
545
|
+
:return: set by output format - 'flux_density', 'magnitude', 'spectra', 'flux', 'sncosmo_source'
|
|
546
|
+
"""
|
|
547
|
+
cosmology = kwargs.get('cosmology', cosmo)
|
|
548
|
+
dl = cosmology.luminosity_distance(redshift).cgs.value
|
|
549
|
+
|
|
550
|
+
if kwargs['output_format'] == 'flux_density':
|
|
551
|
+
frequency = kwargs['frequency']
|
|
552
|
+
frequency, time = calc_kcorrected_properties(frequency=frequency, redshift=redshift, time=time)
|
|
553
|
+
lbol = shockcooling_morag_and_arnett_bolometric(time=time, v_shock=v_shock, m_env=m_env, mej=mej,
|
|
554
|
+
f_rho=f_rho, f_nickel=f_nickel, radius=radius, kappa=kappa, **kwargs)
|
|
555
|
+
photo = photosphere.TemperatureFloor(time=time, luminosity=lbol, vej=v_shock, **kwargs)
|
|
556
|
+
sed_1 = sed.Blackbody(temperature=photo.photosphere_temperature, r_photosphere=photo.r_photosphere,
|
|
557
|
+
frequency=frequency, luminosity_distance=dl)
|
|
558
|
+
flux_density = sed_1.flux_density
|
|
559
|
+
return flux_density.to(uu.mJy).value
|
|
560
|
+
else:
|
|
561
|
+
time_obs = time
|
|
562
|
+
lambda_observer_frame = kwargs.get('lambda_array', np.geomspace(100, 60000, 100))
|
|
563
|
+
time_temp = np.geomspace(0.1, 3000, 300) # in days
|
|
564
|
+
time_observer_frame = time_temp * (1. + redshift)
|
|
565
|
+
frequency, time = calc_kcorrected_properties(frequency=lambda_to_nu(lambda_observer_frame),
|
|
566
|
+
redshift=redshift, time=time_observer_frame)
|
|
567
|
+
lbol = shockcooling_morag_and_arnett_bolometric(time=time, v_shock=v_shock, m_env=m_env, mej=mej,
|
|
568
|
+
f_rho=f_rho, f_nickel=f_nickel, radius=radius, kappa=kappa, **kwargs)
|
|
569
|
+
photo = photosphere.TemperatureFloor(time=time, luminosity=lbol, vej=v_shock, **kwargs)
|
|
570
|
+
sed_1 = sed.Blackbody(temperature=photo.photosphere_temperature, r_photosphere=photo.r_photosphere,
|
|
571
|
+
frequency=frequency[:, None], luminosity_distance=dl)
|
|
572
|
+
fmjy = sed_1.flux_density.T
|
|
573
|
+
spectra = fmjy.to(uu.mJy).to(uu.erg / uu.cm ** 2 / uu.s / uu.Angstrom,
|
|
574
|
+
equivalencies=uu.spectral_density(wav=lambda_observer_frame * uu.Angstrom))
|
|
575
|
+
if kwargs['output_format'] == 'spectra':
|
|
576
|
+
return namedtuple('output', ['time', 'lambdas', 'spectra'])(time=time_observer_frame,
|
|
577
|
+
lambdas=lambda_observer_frame,
|
|
578
|
+
spectra=spectra)
|
|
579
|
+
else:
|
|
580
|
+
return sed.get_correct_output_format_from_spectra(time=time_obs, time_eval=time_observer_frame,
|
|
581
|
+
spectra=spectra, lambda_array=lambda_observer_frame,
|
|
582
|
+
**kwargs)
|
|
583
|
+
|
|
584
|
+
@citation_wrapper('https://iopscience.iop.org/article/10.3847/1538-4357/aa64df, https://ui.adsabs.harvard.edu/abs/1982ApJ...253..785A/abstract')
|
|
585
|
+
def shockcooling_sapirwaxman_and_arnett_bolometric(time, v_shock, m_env, mej, f_rho, f_nickel, radius, kappa, **kwargs):
|
|
586
|
+
"""
|
|
587
|
+
Assumes Shock cooling following Sapir and Waxman and arnett model for radioactive decay
|
|
588
|
+
|
|
589
|
+
:param time: time in source frame in days
|
|
590
|
+
:param v_shock: shock speed in km/s, also the ejecta velocity in the arnett calculation
|
|
591
|
+
:param m_env: envelope mass in solar masses
|
|
592
|
+
:param mej: ejecta mass in solar masses
|
|
593
|
+
:param f_rho: f_rho. Typically, of order unity
|
|
594
|
+
:param f_nickel: fraction of nickel mass
|
|
595
|
+
:param radius: star/envelope radius in units of 10^13 cm
|
|
596
|
+
:param kappa: opacity in cm^2/g
|
|
597
|
+
:param kwargs: Additional parameters required by model
|
|
598
|
+
:param n: index of progenitor density profile, 1.5 (default) or 3.0
|
|
599
|
+
:param RW: If True, use the simplified Rabinak & Waxman formulation (off by default)
|
|
600
|
+
:return: bolometric luminosity in erg/s
|
|
601
|
+
"""
|
|
602
|
+
from redback.transient_models.shock_powered_models import shockcooling_sapirandwaxman_bolometric
|
|
603
|
+
f_rho_m = f_rho * mej
|
|
604
|
+
nickel_lbol = arnett_bolometric(time=time, f_nickel=f_nickel,
|
|
605
|
+
mej=mej, interaction_process=ip.Diffusion, kappa=kappa, vej=v_shock, **kwargs)
|
|
606
|
+
sbo_output = shockcooling_sapirandwaxman_bolometric(time=time, v_shock=v_shock, m_env=m_env, f_rho_m=f_rho_m,
|
|
607
|
+
radius=radius, kappa=kappa, **kwargs)
|
|
608
|
+
lbol = nickel_lbol + sbo_output
|
|
609
|
+
return lbol
|
|
610
|
+
|
|
611
|
+
@citation_wrapper('https://iopscience.iop.org/article/10.3847/1538-4357/aa64df, https://ui.adsabs.harvard.edu/abs/1982ApJ...253..785A/abstract')
|
|
612
|
+
def shockcooling_sapirwaxman_and_arnett(time, redshift, v_shock, m_env, mej, f_rho, f_nickel, radius, kappa, **kwargs):
|
|
613
|
+
"""
|
|
614
|
+
Assumes Shock cooling following Sapir and Waxman and arnett model for radioactive decay
|
|
615
|
+
|
|
616
|
+
:param time: time in source frame in days
|
|
617
|
+
:param v_shock: shock speed in km/s, also the ejecta velocity in the arnett calculation
|
|
618
|
+
:param m_env: envelope mass in solar masses
|
|
619
|
+
:param mej: ejecta mass in solar masses
|
|
620
|
+
:param f_rho: f_rho. Typically, of order unity
|
|
621
|
+
:param f_nickel: fraction of nickel mass
|
|
622
|
+
:param radius: star/envelope radius in units of 10^13 cm
|
|
623
|
+
:param kappa: opacity in cm^2/g
|
|
624
|
+
:param kwargs: Additional parameters required by model
|
|
625
|
+
:param n: index of progenitor density profile, 1.5 (default) or 3.0
|
|
626
|
+
:param RW: If True, use the simplified Rabinak & Waxman formulation (off by default)
|
|
627
|
+
:param frequency: Required if output_format is 'flux_density'.
|
|
628
|
+
frequency to calculate - Must be same length as time array or a single number).
|
|
629
|
+
:param bands: Required if output_format is 'magnitude' or 'flux'.
|
|
630
|
+
:param output_format: 'flux_density', 'magnitude', 'spectra', 'flux', 'sncosmo_source'
|
|
631
|
+
:param lambda_array: Optional argument to set your desired wavelength array (in Angstroms) to evaluate the SED on.
|
|
632
|
+
:param cosmology: Cosmology to use for luminosity distance calculation. Defaults to Planck18. Must be a astropy.cosmology object.
|
|
633
|
+
:return: set by output format - 'flux_density', 'magnitude', 'spectra', 'flux', 'sncosmo_source'
|
|
634
|
+
"""
|
|
635
|
+
cosmology = kwargs.get('cosmology', cosmo)
|
|
636
|
+
dl = cosmology.luminosity_distance(redshift).cgs.value
|
|
637
|
+
|
|
638
|
+
if kwargs['output_format'] == 'flux_density':
|
|
639
|
+
frequency = kwargs['frequency']
|
|
640
|
+
frequency, time = calc_kcorrected_properties(frequency=frequency, redshift=redshift, time=time)
|
|
641
|
+
lbol = shockcooling_morag_and_arnett_bolometric(time=time, v_shock=v_shock, m_env=m_env, mej=mej,
|
|
642
|
+
f_rho=f_rho, f_nickel=f_nickel, radius=radius, kappa=kappa,
|
|
643
|
+
**kwargs)
|
|
644
|
+
photo = photosphere.TemperatureFloor(time=time, luminosity=lbol, vej=v_shock, **kwargs)
|
|
645
|
+
sed_1 = sed.Blackbody(temperature=photo.photosphere_temperature, r_photosphere=photo.r_photosphere,
|
|
646
|
+
frequency=frequency, luminosity_distance=dl)
|
|
647
|
+
flux_density = sed_1.flux_density
|
|
648
|
+
return flux_density.to(uu.mJy).value
|
|
649
|
+
else:
|
|
650
|
+
time_obs = time
|
|
651
|
+
lambda_observer_frame = kwargs.get('lambda_array', np.geomspace(100, 60000, 100))
|
|
652
|
+
time_temp = np.geomspace(0.1, 3000, 300) # in days
|
|
653
|
+
time_observer_frame = time_temp * (1. + redshift)
|
|
654
|
+
frequency, time = calc_kcorrected_properties(frequency=lambda_to_nu(lambda_observer_frame),
|
|
655
|
+
redshift=redshift, time=time_observer_frame)
|
|
656
|
+
lbol = shockcooling_morag_and_arnett_bolometric(time=time, v_shock=v_shock, m_env=m_env, mej=mej,
|
|
657
|
+
f_rho=f_rho, f_nickel=f_nickel, radius=radius, kappa=kappa,
|
|
658
|
+
**kwargs)
|
|
659
|
+
photo = photosphere.TemperatureFloor(time=time, luminosity=lbol, vej=v_shock, **kwargs)
|
|
660
|
+
sed_1 = sed.Blackbody(temperature=photo.photosphere_temperature, r_photosphere=photo.r_photosphere,
|
|
661
|
+
frequency=frequency[:, None], luminosity_distance=dl)
|
|
662
|
+
fmjy = sed_1.flux_density.T
|
|
663
|
+
spectra = fmjy.to(uu.mJy).to(uu.erg / uu.cm ** 2 / uu.s / uu.Angstrom,
|
|
664
|
+
equivalencies=uu.spectral_density(wav=lambda_observer_frame * uu.Angstrom))
|
|
665
|
+
if kwargs['output_format'] == 'spectra':
|
|
666
|
+
return namedtuple('output', ['time', 'lambdas', 'spectra'])(time=time_observer_frame,
|
|
667
|
+
lambdas=lambda_observer_frame,
|
|
668
|
+
spectra=spectra)
|
|
669
|
+
else:
|
|
670
|
+
return sed.get_correct_output_format_from_spectra(time=time_obs, time_eval=time_observer_frame,
|
|
671
|
+
spectra=spectra, lambda_array=lambda_observer_frame,
|
|
672
|
+
**kwargs)
|
|
673
|
+
|
|
450
674
|
@citation_wrapper('redback')
|
|
451
675
|
def basic_magnetar_powered_bolometric(time, p0, bp, mass_ns, theta_pb, **kwargs):
|
|
452
676
|
"""
|
|
@@ -707,7 +931,6 @@ def magnetar_nickel(time, redshift, f_nickel, mej, p0, bp, mass_ns, theta_pb, **
|
|
|
707
931
|
**kwargs)
|
|
708
932
|
|
|
709
933
|
|
|
710
|
-
|
|
711
934
|
@citation_wrapper('redback')
|
|
712
935
|
def homologous_expansion_supernova_model_bolometric(time, mej, ek, **kwargs):
|
|
713
936
|
"""
|
|
@@ -1619,12 +1842,12 @@ def csm_shock_and_arnett_bolometric(time, mej, f_nickel, csm_mass, v_min, beta,
|
|
|
1619
1842
|
lbol = nickel_lbol + sbo_output
|
|
1620
1843
|
return lbol
|
|
1621
1844
|
|
|
1622
|
-
|
|
1623
1845
|
@citation_wrapper('https://ui.adsabs.harvard.edu/abs/2022ApJ...933..238M/abstract, https://ui.adsabs.harvard.edu/abs/1982ApJ...253..785A/abstract')
|
|
1624
1846
|
def csm_shock_and_arnett(time, redshift, mej, f_nickel, csm_mass, v_min, beta, shell_radius,
|
|
1625
1847
|
shell_width_ratio, kappa, **kwargs):
|
|
1626
1848
|
"""
|
|
1627
1849
|
Assumes CSM interaction for a shell-like CSM with a hard outer boundary and arnett model for radioactive decay
|
|
1850
|
+
Assumes one single photosphere from the sum of the bolometric luminosities
|
|
1628
1851
|
|
|
1629
1852
|
:param time: time in days in observer frame
|
|
1630
1853
|
:param redshift: source redshift
|
|
@@ -1674,6 +1897,157 @@ def csm_shock_and_arnett(time, redshift, mej, f_nickel, csm_mass, v_min, beta, s
|
|
|
1674
1897
|
sed_1 = sed.Blackbody(temperature=photo.photosphere_temperature, r_photosphere=photo.r_photosphere,
|
|
1675
1898
|
frequency=frequency[:, None], luminosity_distance=dl)
|
|
1676
1899
|
fmjy = sed_1.flux_density.T
|
|
1900
|
+
spectra = fmjy.to(uu.mJy).to(uu.erg / uu.cm ** 2 / uu.s / uu.Angstrom,
|
|
1901
|
+
equivalencies=uu.spectral_density(wav=lambda_observer_frame * uu.Angstrom))
|
|
1902
|
+
if kwargs['output_format'] == 'spectra':
|
|
1903
|
+
return namedtuple('output', ['time', 'lambdas', 'spectra'])(time=time_observer_frame,
|
|
1904
|
+
lambdas=lambda_observer_frame,
|
|
1905
|
+
spectra=spectra)
|
|
1906
|
+
else:
|
|
1907
|
+
return sed.get_correct_output_format_from_spectra(time=time_obs, time_eval=time_observer_frame,
|
|
1908
|
+
spectra=spectra, lambda_array=lambda_observer_frame,
|
|
1909
|
+
**kwargs)
|
|
1910
|
+
|
|
1911
|
+
@citation_wrapper('https://ui.adsabs.harvard.edu/abs/2022ApJ...933..238M/abstract, https://ui.adsabs.harvard.edu/abs/1982ApJ...253..785A/abstract')
|
|
1912
|
+
def csm_shock_and_arnett_two_rphots(time, redshift, mej, f_nickel, csm_mass, v_min, beta, shell_radius,
|
|
1913
|
+
shell_width_ratio, kappa, **kwargs):
|
|
1914
|
+
"""
|
|
1915
|
+
Assumes CSM interaction for a shell-like CSM with a hard outer boundary and arnett model for radioactive decay.
|
|
1916
|
+
Assumes the photospheres for the CSM-interaction and the Arnett model are different.
|
|
1917
|
+
|
|
1918
|
+
:param time: time in days in observer frame
|
|
1919
|
+
:param redshift: source redshift
|
|
1920
|
+
:param mej: ejecta mass in solar masses
|
|
1921
|
+
:param f_nickel: fraction of nickel mass
|
|
1922
|
+
:param csm_mass: csm mass in solar masses
|
|
1923
|
+
:param v_min: ejecta velocity in km/s
|
|
1924
|
+
:param beta: velocity ratio in c (beta < 1)
|
|
1925
|
+
:param shell_radius: radius of shell in 10^14 cm
|
|
1926
|
+
:param kappa: opacity
|
|
1927
|
+
:param shell_width_ratio: shell width ratio (deltaR/R0)
|
|
1928
|
+
:param kwargs: kappa_gamma, temperature_floor, and any kwarg to
|
|
1929
|
+
change any other input physics/parameters from default.
|
|
1930
|
+
:param frequency: Required if output_format is 'flux_density'.
|
|
1931
|
+
frequency to calculate - Must be same length as time array or a single number).
|
|
1932
|
+
:param bands: Required if output_format is 'magnitude' or 'flux'.
|
|
1933
|
+
:param output_format: 'flux_density', 'magnitude', 'spectra', 'flux', 'sncosmo_source'
|
|
1934
|
+
:param lambda_array: Optional argument to set your desired wavelength array (in Angstroms) to evaluate the SED on.
|
|
1935
|
+
:param cosmology: Cosmology to use for luminosity distance calculation. Defaults to Planck18. Must be a astropy.cosmology object.
|
|
1936
|
+
:return: set by output format - 'flux_density', 'magnitude', 'spectra', 'flux', 'sncosmo_source'
|
|
1937
|
+
"""
|
|
1938
|
+
cosmology = kwargs.get('cosmology', cosmo)
|
|
1939
|
+
dl = cosmology.luminosity_distance(redshift).cgs.value
|
|
1940
|
+
|
|
1941
|
+
if kwargs['output_format'] == 'flux_density':
|
|
1942
|
+
frequency = kwargs['frequency']
|
|
1943
|
+
frequency, time = calc_kcorrected_properties(frequency=frequency, redshift=redshift, time=time)
|
|
1944
|
+
|
|
1945
|
+
output = _csm_shock_breakout(time=time, csm_mass=csm_mass*solar_mass, v_min=v_min, beta=beta, kappa=kappa,
|
|
1946
|
+
shell_radius=shell_radius, shell_width_ratio=shell_width_ratio, **kwargs)
|
|
1947
|
+
r_phot = output.r_photosphere
|
|
1948
|
+
temp = output.temperature
|
|
1949
|
+
flux_density = sed.blackbody_to_flux_density(temperature=temp, r_photosphere=r_phot, dl=dl, frequency=frequency)
|
|
1950
|
+
lbol = arnett_bolometric(time=time, f_nickel=f_nickel, mej=mej, vej=v_min, kappa=kappa,
|
|
1951
|
+
interaction_process=ip.Diffusion, **kwargs)
|
|
1952
|
+
photo = photosphere.TemperatureFloor(time=time, luminosity=lbol, vej=v_min, **kwargs)
|
|
1953
|
+
sed_1 = sed.Blackbody(temperature=photo.photosphere_temperature,
|
|
1954
|
+
r_photosphere=photo.r_photosphere, frequency=frequency, luminosity_distance=dl)
|
|
1955
|
+
flux_density += sed_1.flux_density
|
|
1956
|
+
return flux_density.to(uu.mJy).value
|
|
1957
|
+
else:
|
|
1958
|
+
time_obs = time
|
|
1959
|
+
lambda_observer_frame = kwargs.get('lambda_array', np.geomspace(100, 60000, 100))
|
|
1960
|
+
time_temp = np.geomspace(0.1, 300, 300) # in days
|
|
1961
|
+
time_observer_frame = time_temp * (1. + redshift)
|
|
1962
|
+
frequency, time = calc_kcorrected_properties(frequency=lambda_to_nu(lambda_observer_frame),
|
|
1963
|
+
redshift=redshift, time=time_observer_frame)
|
|
1964
|
+
output = _csm_shock_breakout(time=time, csm_mass=csm_mass * solar_mass, v_min=v_min, beta=beta, kappa=kappa,
|
|
1965
|
+
shell_radius=shell_radius, shell_width_ratio=shell_width_ratio, **kwargs)
|
|
1966
|
+
fmjy = sed.blackbody_to_flux_density(temperature=output.temperature,
|
|
1967
|
+
r_photosphere=output.r_photosphere, frequency=frequency[:, None], dl=dl)
|
|
1968
|
+
lbol = arnett_bolometric(time=time, f_nickel=f_nickel, mej=mej, vej=v_min, kappa=kappa,
|
|
1969
|
+
interaction_process=ip.Diffusion, **kwargs)
|
|
1970
|
+
photo = photosphere.TemperatureFloor(time=time, luminosity=lbol, vej=v_min, **kwargs)
|
|
1971
|
+
sed_1 = sed.Blackbody(temperature=photo.photosphere_temperature,
|
|
1972
|
+
r_photosphere=photo.r_photosphere, frequency=frequency[:, None], luminosity_distance=dl)
|
|
1973
|
+
fmjy += sed_1.flux_density
|
|
1974
|
+
fmjy = fmjy.T
|
|
1975
|
+
spectra = fmjy.to(uu.mJy).to(uu.erg / uu.cm ** 2 / uu.s / uu.Angstrom,
|
|
1976
|
+
equivalencies=uu.spectral_density(wav=lambda_observer_frame * uu.Angstrom))
|
|
1977
|
+
if kwargs['output_format'] == 'spectra':
|
|
1978
|
+
return namedtuple('output', ['time', 'lambdas', 'spectra'])(time=time_observer_frame,
|
|
1979
|
+
lambdas=lambda_observer_frame,
|
|
1980
|
+
spectra=spectra)
|
|
1981
|
+
else:
|
|
1982
|
+
return sed.get_correct_output_format_from_spectra(time=time_obs, time_eval=time_observer_frame,
|
|
1983
|
+
spectra=spectra, lambda_array=lambda_observer_frame,
|
|
1984
|
+
**kwargs)
|
|
1985
|
+
|
|
1986
|
+
def shocked_cocoon_and_arnett(time, redshift, mej_c, vej_c, eta, tshock, shocked_fraction, cos_theta_cocoon, kappa,
|
|
1987
|
+
mej, f_nickel, vej, **kwargs):
|
|
1988
|
+
"""
|
|
1989
|
+
Emission from a shocked cocoon and arnett model for radioactive decay.
|
|
1990
|
+
We assume two different photospheres here.
|
|
1991
|
+
|
|
1992
|
+
:param time: Time in days in observer frame
|
|
1993
|
+
:param redshift: redshift
|
|
1994
|
+
:param mej_c: cocoon mass (in solar masses)
|
|
1995
|
+
:param vej_c: cocoon material velocity (in c)
|
|
1996
|
+
:param eta: slope for the cocoon density profile
|
|
1997
|
+
:param tshock: shock breakout time (in seconds)
|
|
1998
|
+
:param shocked_fraction: fraction of the cocoon shocked
|
|
1999
|
+
:param cos_theta_cocoon: cosine of the cocoon opening angle
|
|
2000
|
+
:param kappa: opacity
|
|
2001
|
+
:param mej: supernova ejecta mass (in solar masses)
|
|
2002
|
+
:param f_nickel: fraction of nickel for ejecta mass
|
|
2003
|
+
:param vej: supernova ejecta velocity (in km/s)
|
|
2004
|
+
:param kwargs: Extra parameters used by model e.g., kappa_gamma, temperature_floor, and any kwarg to
|
|
2005
|
+
change any other input physics/parameters from default.
|
|
2006
|
+
:param frequency: Required if output_format is 'flux_density'.
|
|
2007
|
+
frequency to calculate - Must be same length as time array or a single number).
|
|
2008
|
+
:param bands: Required if output_format is 'magnitude' or 'flux'.
|
|
2009
|
+
:param output_format: 'flux_density', 'magnitude', 'spectra', 'flux', 'sncosmo_source'
|
|
2010
|
+
:param lambda_array: Optional argument to set your desired wavelength array (in Angstroms) to evaluate the SED on.
|
|
2011
|
+
:param cosmology: Cosmology to use for luminosity distance calculation. Defaults to Planck18. Must be a astropy.cosmology object.
|
|
2012
|
+
:return: set by output format - 'flux_density', 'magnitude', 'spectra', 'flux', 'sncosmo_source'
|
|
2013
|
+
"""
|
|
2014
|
+
cosmology = kwargs.get('cosmology', cosmo)
|
|
2015
|
+
dl = cosmology.luminosity_distance(redshift).cgs.value
|
|
2016
|
+
time_obs = time
|
|
2017
|
+
|
|
2018
|
+
if kwargs['output_format'] == 'flux_density':
|
|
2019
|
+
frequency = kwargs['frequency']
|
|
2020
|
+
frequency, time = calc_kcorrected_properties(frequency=frequency, redshift=redshift, time=time)
|
|
2021
|
+
output = _shocked_cocoon(time=time, mej=mej_c, vej=vej_c, eta=eta,
|
|
2022
|
+
tshock=tshock, shocked_fraction=shocked_fraction,
|
|
2023
|
+
cos_theta_cocoon=cos_theta_cocoon, kappa=kappa)
|
|
2024
|
+
flux_density = sed.blackbody_to_flux_density(temperature=output.temperature, r_photosphere=output.r_photosphere,
|
|
2025
|
+
dl=dl, frequency=frequency)
|
|
2026
|
+
lbol = arnett_bolometric(time=time, f_nickel=f_nickel, mej=mej, vej=vej,
|
|
2027
|
+
interaction_process=ip.Diffusion, kappa=kappa, **kwargs)
|
|
2028
|
+
photo = photosphere.TemperatureFloor(time=time, luminosity=lbol, vej=vej, **kwargs)
|
|
2029
|
+
sed_1 = sed.Blackbody(temperature=photo.photosphere_temperature,
|
|
2030
|
+
r_photosphere=photo.r_photosphere, frequency=frequency, luminosity_distance=dl)
|
|
2031
|
+
flux_density += sed_1.flux_density
|
|
2032
|
+
return flux_density.to(uu.mJy).value
|
|
2033
|
+
else:
|
|
2034
|
+
lambda_observer_frame = kwargs.get('frequency_array', np.geomspace(100, 60000, 200))
|
|
2035
|
+
time_temp = np.linspace(1e-2, 300, 300)
|
|
2036
|
+
time_observer_frame = time_temp
|
|
2037
|
+
frequency, time = calc_kcorrected_properties(frequency=lambda_to_nu(lambda_observer_frame),
|
|
2038
|
+
redshift=redshift, time=time_observer_frame)
|
|
2039
|
+
output = _shocked_cocoon(time=time, mej=mej_c, vej=vej_c, eta=eta,
|
|
2040
|
+
tshock=tshock, shocked_fraction=shocked_fraction,
|
|
2041
|
+
cos_theta_cocoon=cos_theta_cocoon, kappa=kappa)
|
|
2042
|
+
fmjy = sed.blackbody_to_flux_density(temperature=output.temperature,
|
|
2043
|
+
r_photosphere=output.r_photosphere, frequency=frequency[:, None], dl=dl)
|
|
2044
|
+
lbol = arnett_bolometric(time=time, f_nickel=f_nickel, mej=mej, vej=vej,
|
|
2045
|
+
interaction_process=ip.Diffusion, kappa=kappa, **kwargs)
|
|
2046
|
+
photo = photosphere.TemperatureFloor(time=time, luminosity=lbol, vej=vej, **kwargs)
|
|
2047
|
+
sed_1 = sed.Blackbody(temperature=photo.photosphere_temperature,
|
|
2048
|
+
r_photosphere=photo.r_photosphere, frequency=frequency[:, None], luminosity_distance=dl)
|
|
2049
|
+
fmjy += sed_1.flux_density
|
|
2050
|
+
fmjy = fmjy.T
|
|
1677
2051
|
spectra = fmjy.to(uu.mJy).to(uu.erg / uu.cm ** 2 / uu.s / uu.Angstrom,
|
|
1678
2052
|
equivalencies=uu.spectral_density(wav=lambda_observer_frame * uu.Angstrom))
|
|
1679
2053
|
if kwargs['output_format'] == 'spectra':
|