# Changelog This project does not yet follow a formal release schedule. Key additions are listed below in reverse chronological order. Commit history on GitHub is the authoritative source. ## Unreleased ### Line database additions - **Seven UV interstellar absorption lines** added to `REST_LINES_A` (vacuum, Morton 2003): the O I λ1302 + Si II λ1304 blend (`abs_OISiII1303`, single feature), Si II λ1526 (`abs_SiII1526`), Fe II λ1608 (`abs_FeII1608`), the Al III λλ1854,1862 doublet (`abs_AlIII1854`, `abs_AlIII1862`), and the C IV λλ1548,1550 doublet (`abs_CIV1548`, `abs_CIV1550`). All but the C IV pair are included in the default prism and grating line lists. **`abs_CIV1548/1550` are in the database but *not* the default lists**, because they coincide exactly with the `CIV_1`/`CIV_2` emission components — fit them explicitly via `lines=[...]` when C IV is in absorption / P-Cygni. ### Behaviour changes - **Multi-Balmer A_V now uses only lines bluer than the anchor.** `balmer_anchor="HBETA"` (default) uses Hγ/Hβ, Hδ/Hβ, H9/Hβ, H10/Hβ and **excludes Hα/Hβ**; `balmer_anchor="Ha"` uses every other Balmer line (all are bluer than Hα). Previously the Hβ anchor also included Hα/Hβ. Anchor on Hα to include Hα; on Hβ to use only the bluer Balmer series. ### New - **`balmer_pair` option in `compute_abundances`** (and the public `compute_Av_balmer_pair`). Forces the A_V derivation onto a single Balmer decrement, e.g. `balmer_pair=("Ha", "HBETA")` for Hα/Hβ only, instead of the multi-line fit — useful to avoid low-SNR Balmer lines. Overrides `balmer_anchor`/`snr_balmer` for the A_V step; ignored when `Av` is supplied directly. ## 1.1.3 — 2026-06-01 ### Behaviour changes - **O²⁺ and Ne²⁺ are decoupled from the N IV] density.** `T_e([O III])` and the O²⁺/H⁺ and Ne²⁺/H⁺ abundances are now evaluated at the intermediate-ionisation density (C III] λ1907/1909, with a low-zone fallback) instead of the high-ionisation N IV] density. The [O III] 5007/Hβ and [Ne III] 3869/Hβ abundances are density-insensitive below ~10⁴–10⁵ cm⁻³, and C III] (24–48 eV) overlaps the O²⁺ zone (35–55 eV), whereas N IV] (47–77 eV) traces more highly-ionised gas and can spuriously spike — dragging `T_e` down and inflating O/H. N³⁺ and C³⁺ keep the high-ionisation density, so the Martinez+25 ICF 5 ((N²⁺+N³⁺)/O²⁺) still uses the correct density for each nitrogen ion. - **log(U) from O32 / N43 now takes an electron-density input.** The Martinez+25 O32 and N43 log(U) diagnostics are evaluated at the measured density rather than a fixed default. ### Documentation - New **Plotting & visualisation** section consolidating all static (matplotlib) and interactive (plotly) plotting helpers across the suite, with a backend-choice guide and line-marker reference. ### Fixes - `DLAResult.plot()` no longer emits a `tight_layout` warning on the two-panel (data + residual) figure (now uses constrained layout). ## 1.1.2 — 2026-05-29 ### Behaviour changes - **Martinez+2025 ICF/log(U) bounds are now enforced by rejection, not extrapolation.** Inputs outside the calibration domain (`log(O32)`, `log(N43)`, `Z/Z_sun`, or the resulting `log(U)`) are set to `NaN` instead of being extrapolated or clipped to the boundary, so uncalibrated values no longer enter the reported N/O. - **Direct-`T_e` MC and MCMC loops resample to the requested count.** The loop keeps drawing until `n_mc` / `n_posterior` *in-bounds* N/O draws are collected (capped at 20× attempts; a `WARNING` is logged and N/O is left under-sampled if an object is centred outside the bounds). - **O/H is decoupled from the N/O bounds.** Only N/O is gated on the Martinez calibration; O/H, `T_e`, and the C/O, S/O, Ne/O, Ar/O ratios (which do not use the Martinez ICF) are recorded for every drawn sample. As a result the O/H posterior generally holds **more** finite draws than the N/O posterior — the two arrays are independent and need not share a length. See `abundance_methodology` §8.2 and §11.3. ## 1.1.0 — 2026-05-20 ### New public API - **`jwspecfit.fit_redshift`** — strong-line redshift fitter spanning z = 0–20, with auto-detected spectral resolution (`spec.R` → `grating` → pixel-spacing fallback). - **`jwspecfit.show_lines()`** — discovery helper for the line database; `plot_spectrum_interactive` and `plot_2d_1d` accept `add_lines=[…]` for ad-hoc marker additions. - **`jwspecfit.plot_2d_1d`** — matplotlib panel showing the 2D SCI image and 1D extraction for a single FITS file, auto-scaled to the brightest emission line in view. - **`jwspecmcmc.fit_with_broad` + `jwspecfit.fit_hei_broad`** — two-tier BIC selection for HeI broad components (analogous to the Balmer pipeline). ### Behaviour changes - Broad-component control moved from `mode="…"` to dedicated boolean kwargs `fit_balmer_broad=` and `fit_oiii_broad=`; both default to `False`. Two-tier BIC selects between off / single broad / double broad / both, with kinematics tied across [O III] doublet components. - `fit_redshift` excludes [N II] and [S II] from the default line list (avoids false matches in low-metallicity high-z spectra). - Resolution-aware centroid bounds: σ-instrument-scaled limits on narrow-line centroid drift to prevent collapse into a neighbouring line. - `plot_spectrum_interactive` overhaul — emission-line markers, staggered labels, step error band, multi-spectrum legend, custom `add_lines=[…]`, configurable y-range. ### Line database additions - **He II 4200** (Pickering 11→4, vacuum 4201.013 Å) - **He I**: 4027, 4145, 6680, 7065 (vacuum-converted from NIST air values) - **[O I] 6302** - **[Ar III] 7138** ### `jwspecabund` additions - `balmer_anchor` option on `compute_abundances` and `compute_Av_multi_balmer` — A_V can be derived with Hα as the anchor (using Hβ/Hα, Hγ/Hα, Hδ/Hα, H9/Hα, H10/Hα) instead of the default Hβ anchor. - `ciii_doublet_ratio` to fix the C III] ratio from a user-supplied density. - `niv_doublet_ratio` to fix the N IV] ratio from the C III] density. - Cardelli extinction curve extended to the far-UV; DLA fitter overhaul. - `snr_balmer` parameter for the Balmer-line SNR floor used in A_V derivation. ### Fixes - Centroid-bounds collapse for [O III] broad components in the MCMC engine (mirrored from the LS fitter). - HEI_7067 marker label corrected to air-convention "HeI 7065" (vacuum wavelength 7067.138 Å unchanged). - Hard IGM cutoff blueward of Lyα (Gunn–Peterson trough), smoothed by the LSF convolution. ### Docs / branding - Adopted a hex + Gaussian logo; wired into RTD sidebar (`html_logo`), browser favicon (`html_favicon`), and README header. SVG source + PNG fallbacks (16/32/64/128/256 px) under `docs/_static/logos/`. - New notebook walkthrough for `jwspecfit.fit_redshift`. ## 1.0.2 — 2026-05-14 Maintenance release; see commit history for details. ## 1.0.1 — 2026-04-21 Patch release to retry Zenodo DOI minting. The v1.0.0 deposit failed validation because `CITATION.cff` contained a placeholder ORCID; the ORCID field has been removed and the citation metadata cleaned up. No functional code changes. ## 1.0.0 — initial public development release - `jwspecfit` — resolution-aware least-squares fitting with bootstrap uncertainties and BIC broad-Balmer selection. - `jwspecmcmc` — NUTS / emcee / nautilus MCMC fitting. - `jwspecabund` — direct-T_e, forward-model, and strong-line abundance pathways.