Skip to content

Commit

Permalink
Add explicit reference to sn_subfractions_name for get_rates.
Browse files Browse the repository at this point in the history
  • Loading branch information
robertdstein committed Aug 4, 2020
1 parent c92bc9b commit 21e7886
Show file tree
Hide file tree
Showing 2 changed files with 57 additions and 20 deletions.
58 changes: 44 additions & 14 deletions flarestack/cosmo/rates/ccsn_rates.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,16 +6,40 @@

# Taken from https://arxiv.org/pdf/1509.06574.pdf

sn_types = {
"IIn": 0.064,
"IIP": 0.52,
"Ib": 0.069,
"Ic": 0.176,
"Ibc": 0.069 + 0.176,
"all": 1.0
sn_subclass_rates = {
"li_11": ({
"IIn": 0.064,
"IIP": 0.52,
"IIL": 0.073,
"II": 0.064 + 0.52 + 0.073,
"Ib": 0.069,
"Ic": 0.176,
"Ibc": 0.069 + 0.176,
}, "https://arxiv.org/abs/1006.4612")
}

def get_sn_fraction(sn_subclass=None):
def get_sn_subfraction(sn_subclass_fractions_name=None):
"""Return a value of kcc (SN per unit star formation)
:param sn_subclass_fractions_name: Name of kcc to be used
:return: Value of kcc
"""

if sn_subclass_fractions_name is None:
logging.info("No specified sn_subclass_fractions_name. Assuming default.")
sn_subclass_fractions_name = "li_11"

if sn_subclass_fractions_name not in sn_subclass_rates.keys():
raise Exception(f"Subclass name '{sn_subclass_fractions_name}' not recognised. "
f"The following kcc values are available: {sn_subclass_rates.keys()}")
else:
sn_rates, ref = sn_subclass_rates[sn_subclass_fractions_name]
logging.info(f"Loaded SN subclass fractions '{sn_subclass_fractions_name}' ({ref})")

return sn_rates


def get_sn_fraction(sn_subclass=None, sn_subclass_fractions_name=None):
"""Return SN rates for specific types. These are taken from
https://arxiv.org/pdf/1509.06574.pdf, and are assumed to be fixed
fractions of the overall SN rate. Acceptable types are:
Expand All @@ -26,18 +50,24 @@ def get_sn_fraction(sn_subclass=None):
SNIbc (equal to Ib + Ic)
:param sn_subclass: Type of SN
:param sn_subclass_fractions_name: Name of estimates to use for relative rates of each subclass
:return: fraction represented by that subtype
"""
if sn_subclass is None:
logging.info("No specified subclass of supernova. Assuming overall CCSN rate.")
sn_subclass = "all"
return 1.0

if sn_subclass in sn_types.keys():
logging.info(f"Subclass '{sn_subclass}' is equal to {100.*sn_types[sn_subclass]:.2f}% of the CCSN rate.")
return sn_types[sn_subclass]
else:
raise Exception(f"Supernova type '{sn_subclass}' not recognised. "
f"The following types are available: {sn_types.keys()}")

sn_types = get_sn_subfraction(sn_subclass_fractions_name)

if sn_subclass in sn_types.keys():
logging.info(f"Subclass '{sn_subclass}' is equal to "
f"{100.*sn_types[sn_subclass]:.2f}% of the CCSN rate.")
return sn_types[sn_subclass]
else:
raise Exception(f"Supernova type '{sn_subclass}' not recognised. "
f"The following types are available: {sn_types.keys()}")

kcc_rates = {
"madau_14": (0.0068 / u.solMass, "http://arxiv.org/abs/1403.0007v3"),
Expand Down
19 changes: 13 additions & 6 deletions tests/test_cosmo_rates.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
from flarestack.cosmo.rates import source_maps
from flarestack.cosmo.rates.tde_rates import tde_evolutions, local_tde_rates
from flarestack.cosmo.rates.sfr_rates import sfr_evolutions, local_sfr_rates
from flarestack.cosmo.rates.ccsn_rates import kcc_rates, sn_types
from flarestack.cosmo.rates.ccsn_rates import kcc_rates, sn_subclass_rates
from flarestack.cosmo.rates.grb_rates import grb_evolutions, local_grb_rates
from flarestack.cosmo.rates.fbot_rates import local_fbot_rates

Expand Down Expand Up @@ -48,11 +48,18 @@ def test_sfr_rates(self):
def test_ccsn_rates(self):

for kcc_name in kcc_rates.keys():
for sn_sublass in sn_types.keys():
get_rate("ccsn", kcc_name=kcc_name, sn_sublass=sn_sublass)

f = get_rate("ccsn", subclass="Ibc", fraction=0.5)
true = 0.00029537815392527303 / (u.Mpc**3 * u.yr)
for (subclass_fractions_name, (sn_type, _)) in sn_subclass_rates.items():
for sn_subclass in sn_type.keys():
get_rate(
"ccsn",
kcc_name=kcc_name,
sn_subclass=sn_subclass,
subclass_fractions_name=subclass_fractions_name
)

f = get_rate("ccsn", sn_subclass="Ibc", fraction=0.5)

true = 7.236764771169189e-05 / (u.Mpc**3 * u.yr)

self.assertAlmostEqual(f(1.0)/true, 1.0, delta=0.05)

Expand Down

0 comments on commit 21e7886

Please sign in to comment.