SDSS fit: J102839.11+450009.4 with tight Fe FWHM priors#
This notebook fetches the SDSS spectrum for J102839.11+450009.4, overrides Fe UV/optical FWHM priors, and fits with decompose_host=False.
Current default: fit_method="optax" runs staged SVI/Optax MAP optimization (continuum warm start, then full model). fit_method="optax+nuts" uses that staged MAP point to initialize NUTS.
[ ]:
import numpy as np
from astroquery.sdss import SDSS
from astropy.coordinates import SkyCoord
from astropy import units as u
import jaxqsofit
from jaxqsofit import QSOFit
[ ]:
coord = SkyCoord.from_name("J102839.11+450009.4")
xid = SDSS.query_region(coord, spectro=True, radius=5 * u.arcsec)
sp = SDSS.get_spectra(matches=xid[:1])[0]
tb = sp[1].data
lam = np.asarray(10 ** tb["loglam"], dtype=float)
flux = np.asarray(tb["flux"], dtype=float)
ivar = np.asarray(tb["ivar"], dtype=float)
err = np.full_like(flux, 1e-6)
m = np.isfinite(ivar) & (ivar > 0)
err[m] = 1.0 / np.sqrt(ivar[m])
z = float(sp[2].data["z"][0])
ra = float(coord.ra.deg)
dec = float(coord.dec.deg)
plateid = int(sp[0].header.get("plateid", 0))
mjd = int(sp[0].header.get("mjd", 0))
fiberid = int(sp[0].header.get("fiberid", 0))
sdss_filename = f"{plateid:04d}-{mjd}-{fiberid:04d}"
lam.size, z, sdss_filename
[ ]:
flux_for_priors = flux * (1.0 + z)
prior_config = jaxqsofit.defaults.build_default_prior_config(flux=flux_for_priors)
# Tight Fe priors make this notebook emphasize the iron-template behavior.
prior_config["log_Fe_uv_FWHM"] = {"loc": np.log(100.0), "scale": 0.1}
prior_config["log_Fe_op_FWHM"] = {"loc": np.log(100.0), "scale": 0.1}
line_table = prior_config["line"]["table"]
# Increase ngauss by +1 for existing broad Mg II and Hbeta entries
#for name in ("Hb_br"): # "MgII_br",
# row = next((r for r in line_table if r.get("linename") == name), None)
# if row is not None:
# row["ngauss"] = int(row.get("ngauss", 1)) + 1
# quick check
[(r["linename"], r["ngauss"]) for r in line_table if r.get("linename") in ("MgII_br", "Hb_br")]
[ ]:
q = QSOFit(
lam=lam,
flux=flux,
err=err,
z=z,
ra=ra,
dec=dec,
filename=sdss_filename,
output_path=".",
)
q.fit(
deredden=True,
fit_method="optax+nuts",
fit_lines=True,
decompose_host=False,
fit_pl=True,
fit_fe=True,
fit_bc=False,
fit_poly=True,
prior_config=prior_config,
dsps_ssp_fn="../tempdata.h5",
optax_steps=600,
optax_lr=1e-2,
nuts_warmup=50,
nuts_samples=50,
nuts_chains=1,
plot_fig=True,
save_fig=False,
save_result=False,
)
[ ]:
q.plot_mcmc_diagnostics(
param_names='Fe_uv_FWHM',
do_trace=True,
do_corner=True,
max_vector_elems=2,
corner_bins=25,
corner_max_points=1500,
)
[ ]: