specsrbench.figures.fig5_per_line_snr

Figure 5 – per-line behaviour: S/N, line shape and position, detection.

Six rows over the four diagnostic lines, ordered so that what an observer measures from a line comes first:

  • Median S/N, over the subset where the reference itself detects the line.

  • FWHM_pred - FWHM_obs, in nm, against the width fitted to the grating reference (“obs”).

  • (FWHM_pred - FWHM_obs) / FWHM_obs – the same bias as a fraction of the reference width, which is what makes the scale plain: the grating lines are only ~2-3 nm wide, so the classical reconstructions overestimate widths by roughly 4-19 times the true width, SR2 by about a third of it.

  • Line-center offset, the median |v_pred - v_obs| in km/s between the centre fitted to a reconstruction and the centre fitted to the reference. The fit bounds each centre to +-10 nm of its catalog position; a fit at the bound found no line there, and where many are (classical H-beta, up to 54%) the median offset is a lower limit. The fraction at the bound is printed.

  • Detection fraction at S/N > 5, with the reference’s own rate marked.

  • False detection rate – how often a method reports S/N > 5 where the reference says the line is absent (S/N < 3). This is the row where SR2 separates from every classical method: 0.30 on Hbeta and 0.44 on [O II], against <= 0.09 for anything classical.

A method can lead the first row by inventing lines, and only the last row shows it. They are drawn together for that reason.

Widths and centres use spectra where the reference line is detected at S/N > 5, so that “obs” is a measurement and not a fit to noise.

Module Attributes

HR_DETECT_THRESH

The reference detects a line above this; below TRUE_ABSENT it says there is none, and anything a method "finds" there is false.

FWHM_MIN_SN

Widths and centres are only meaningful where the reference line is solidly detected.

MU_BOUND_UM

build.lines.fit_gauss bounds each centre to +- this of the catalog one.

Functions

build([cache, outdir])

compute(cache)

Every row, each as {method key: [value per line]}.

specsrbench.figures.fig5_per_line_snr.HR_DETECT_THRESH = 5.0

The reference detects a line above this; below TRUE_ABSENT it says there is none, and anything a method “finds” there is false.

specsrbench.figures.fig5_per_line_snr.FWHM_MIN_SN = 5.0

Widths and centres are only meaningful where the reference line is solidly detected.

specsrbench.figures.fig5_per_line_snr.MU_BOUND_UM = 0.01

build.lines.fit_gauss bounds each centre to +- this of the catalog one.

specsrbench.figures.fig5_per_line_snr.compute(cache)[source]

Every row, each as {method key: [value per line]}.

Besides the six plotted rows, centre_bias (the signed median offset, km/s) and centre_at_bound (fraction of centres at the fit bound) are returned for the text and the tests.

Return type:

dict[str, dict[str, list[float]]]

specsrbench.figures.fig5_per_line_snr.build(cache=None, outdir=None)[source]
Parameters:

outdir (Path | None)

Return type:

Path