SFR(Hα) Calibrations
Simulation-informed SFR(Hα) calibrations for high-z (4 < z < 10) galaxies, from Kramarenko et al. (2026). Both take the dust-corrected Hα luminosity (LHα) as input and are calibrated on the SPHINX cosmological simulations for the observed LHα > 1041 erg s⁻¹.
Eq. 2 | RMSE = 0.13 dex
Luminosity-only calibration
Depends on LHα alone. Reduces the RMSE in the predicted SFR by ΔRMSE ≈ 0.04 dex relative to the Theios et al. (2019) calibration.
log₁₀ [SFR / M☉ yr⁻¹] = log₁₀ [LHα / erg s⁻¹] − 41.45
+ 0.06 (log₁₀ [LHα / erg s⁻¹] − 41.90)
+ 0.06 (log₁₀ [LHα / erg s⁻¹] − 41.90)
Eq. 3 | RMSE = 0.11 dex | recommended
Luminosity + equivalent width calibration
Adds a correction depending on the Hα equivalent width, EWHα [Å], which traces stellar metallicity and age. Reduces the RMSE by ΔRMSE ≈ 0.06 dex relative to Theios et al. (2019); the best-performing calibration in the paper.
log₁₀ [SFR / M☉ yr⁻¹] = log₁₀ [LHα / erg s⁻¹] − 41.45
− 0.01 (log₁₀ [LHα / erg s⁻¹] − 41.90)
− 0.26 (log₁₀ [EWHα / Å] − 2.67)
− 0.01 (log₁₀ [LHα / erg s⁻¹] − 41.90)
− 0.26 (log₁₀ [EWHα / Å] − 2.67)
Extra
Python function
The new SFR(Hα) calibrations implemented in Python (omit ew_ha to fall back to the luminosity-only calibration).
import numpy as np
def sfr_halpha(l_ha, ew_ha=None):
"""
Convert the Halpha luminosity to a star formation rate.
Parameters
----------
l_ha : float or array_like
Dust-corrected Halpha luminosity, in erg / s.
ew_ha : float or array_like, optional
Halpha equivalent width, in angstrom.
If given, the luminosity + equivalent width
calibration (Eq. 3) is used instead of the
luminosity-only calibration (Eq. 2).
Returns
-------
sfr : float or array_like
Star formation rate, in solar masses per year.
References
----------
.. [1] Kramarenko, I. G., Rosdahl, J., Blaizot, J.,
Matthee, J., Katz, H., & Di Cesare, C. 2026, A&A,
707, A184, "Halpha as a tracer of star formation
in the SPHINX cosmological simulations",
https://doi.org/10.1051/0004-6361/202557114
"""
log_l = np.log10(l_ha)
if ew_ha is None:
log_sfr = log_l - 41.45 + 0.06 * (log_l - 41.90) # Eq. 2
else:
log_ew = np.log10(ew_ha)
log_sfr = (log_l - 41.45
- 0.01 * (log_l - 41.90)
- 0.26 * (log_ew - 2.67)) # Eq. 3
return 10 ** log_sfr