Diagnostics¶
Tools enabled by end-to-end differentiability of the forward model. These provide Fisher information analysis, gradient SEDs (saliency maps), and Green’s function time-sensitivity analysis.
Fisher Information¶
- tengri.analysis.diagnostics.fisher.compute_jacobian(predict_fn, params, param_keys)[source]¶
Compute the Jacobian ∂m/∂θ of model predictions w.r.t. parameters.
- tengri.analysis.diagnostics.fisher.compute_fisher_matrix(forward_model, params, noise, data_type='photometry', param_names=None)[source]¶
Compute the Fisher Information Matrix.
F_ij = sum_k (1/sigma_k^2) * (dm_k/dtheta_i) * (dm_k/dtheta_j)
- Parameters:
forward_model (ForwardModel) – Configured forward model.
params (dict) – Parameter values at which to evaluate the FIM.
noise (array) – 1-sigma uncertainties on the data.
data_type (str) – “photometry” or “spectroscopy”.
param_names (list of str, optional) – Which parameters to include. Defaults to all physical params (excludes xi — the GP latent is high-dimensional).
- Returns:
fim (array, shape (n_params, n_params)) – Fisher Information Matrix.
names (list of str) – Parameter names corresponding to FIM rows/columns.
- tengri.analysis.diagnostics.fisher.fisher_parameter_errors(fim)[source]¶
Compute 1-sigma parameter uncertainties from the FIM.
sigma_i = sqrt((F^{-1})_ii)
Saliency (Gradient SEDs)¶
- tengri.analysis.diagnostics.saliency.compute_gradient_sed(forward_model, params, param_name)[source]¶
Compute ∂SED(λ)/∂θ — the gradient of the SED w.r.t. one parameter.
- Parameters:
- Returns:
gradient_sed (array, shape (n_wave,)) – ∂SED/∂θ at each wavelength.
wavelength (array, shape (n_wave,)) – Rest-frame wavelengths (Angstrom).
- tengri.analysis.diagnostics.saliency.compute_all_gradient_seds(forward_model, params, param_names=None)[source]¶
Compute gradient SEDs for all physical parameters.
- Parameters:
- Returns:
gradients (dict of {param_name: array (n_wave,)}) – Gradient SED per parameter.
wavelength (array, shape (n_wave,)) – Rest-frame wavelengths.
- tengri.analysis.diagnostics.saliency.compute_photometry_sensitivity(forward_model, params, param_names=None)[source]¶
Compute ∂flux_band/∂θ for each filter and parameter.
Returns a matrix showing how sensitive each photometric band is to each parameter — useful for understanding degeneracies and planning filter sets.
- Parameters:
- Returns:
sensitivity (array, shape (n_filters, n_params)) – ∂flux_band/∂θ_param matrix.
param_names (list of str) – Parameter names (columns).
Green’s Functions¶
- tengri.analysis.diagnostics.green_functions.compute_green_function(ssp_flux_at_z, ssp_wave, filter_wave=None, filter_trans=None, wave_target=None)[source]¶
Compute Green’s function G(t_age) for a filter or wavelength.
G(t_age) = flux contribution per unit stellar mass at age t_age.
- For photometry: G = int L_SSP(lambda|t_age) * T(lambda) * lambda dlambda
/ int T(lambda) * lambda dlambda
For a single wavelength: G = L_SSP(wave_target | t_age)
- Parameters:
ssp_flux_at_z (array, shape (n_age, n_wave)) – SSP spectra at fixed metallicity.
ssp_wave (array, shape (n_wave,)) – Wavelength grid (Angstrom).
filter_wave (array, optional) – Filter wavelength grid.
filter_trans (array, optional) – Filter transmission.
wave_target (float, optional) – Single wavelength (Angstrom). Used if no filter provided.
- Returns:
Green’s function G(t_age).
- Return type:
array, shape (n_age,)
- tengri.analysis.diagnostics.green_functions.compute_window_function(green_fn, mean_sfr_on_ages)[source]¶
Compute window function W(t_age) = G(t_age) * <SFR(t_age)>.
The window function tells you which lookback times actually contribute to the observed flux, given the galaxy’s mean SFH.
- tengri.analysis.diagnostics.green_functions.compute_window_function_fourier(window_fn, ssp_ages_yr)[source]¶
Compute Fourier transform of window function.
|W_tilde(omega)|^2 tells you the PSD sensitivity: how much power at frequency omega contributes to the variance of this observable.
- From Munoz+2026 Eq. 11:
sigma^2_L = int |W_tilde(omega)|^2 P(omega) d_omega / (2*pi)
- Parameters:
- Returns:
power_transfer (array, shape (n_freq,)) – |W_tilde(omega)|^2 — the PSD-to-observable transfer function.
omega (array, shape (n_freq,)) – Angular frequencies (rad/yr).
- tengri.analysis.diagnostics.green_functions.compute_time_sensitivity_matrix(ssp_flux_at_z, ssp_wave, wavelengths_target)[source]¶
Compute sensitivity of multiple wavelengths to different ages.
Returns a matrix G(wavelength, age) showing which wavelengths are sensitive to which stellar population ages.
- Parameters:
ssp_flux_at_z (array, shape (n_age, n_wave)) – SSP spectra at fixed metallicity.
ssp_wave (array, shape (n_wave,)) – Wavelength grid (Angstrom).
wavelengths_target (array, shape (n_target,)) – Target wavelengths to evaluate (Angstrom). E.g., [1500, 2500, 4000, 5500, 6563, 8000, 16000] for FUV, NUV, Balmer break, V-band, H-alpha, I-band, H-band.
- Returns:
sensitivity – G(wavelength, age) matrix. Each row is the Green’s function at that wavelength.
- Return type:
array, shape (n_target, n_age)