The Bamberg metallicity axis

The v25 delivery carries four metal bands, Z = −2, −1, 0, +1 dex about the standard sdB pattern, and every fit in the archive uses Z0. These are the highest signal-to-noise sdOB and He-sdOB spectra in the BOSS archive, fitted on each band, and then fitted again with metallicity as the third free parameter in place of helium.

12stars
10 / 12improved by the swap
-888total Δchi²
12 / 12best at Z ≥ 0

All four parameters free → — Teff, log g, helium and Z fitted together, and which of them Z is really degenerate with.

What the metals move

sdOBHe-sdOB
-0+1000-10+1Z [dex]J00511+0042 sdOBJ00511+0042 Z=-1 -618J00511+0042 Z=0 +0J00511+0042 Z=+1 +1372J07284+4149 He-sdOBJ07284+4149 Z=-1 +16J07284+4149 Z=0 +0J07284+4149 Z=+1 -26J07403+2049 sdOBJ07403+2049 Z=-1 -127J07403+2049 Z=0 +0J07403+2049 Z=+1 +832J07462+3333 He-sdOBJ07462+3333 Z=-1 -252J07462+3333 Z=0 +0J07462+3333 Z=+1 +701J08251-6314 sdOBJ08251-6314 Z=-1 -51J08251-6314 Z=0 +0J08251-6314 Z=+1 +1264J08590+0233 sdOBJ08590+0233 Z=-1 -103J08590+0233 Z=0 +0J08590+0233 Z=+1 +1135J12533+3006 sdOBJ12533+3006 Z=-1 -158J12533+3006 Z=0 +0J12533+3006 Z=+1 +1382J16387+6728 He-sdOBJ16387+6728 Z=-1 -322J16387+6728 Z=0 +0J16387+6728 Z=+1 +757J17083+3001 sdOBJ17083+3001 Z=-1 -332J17083+3001 Z=0 +0J17083+3001 Z=+1 +778J21133+0017 He-sdOBJ21133+0017 Z=-1 -483J21133+0017 Z=0 +0J21133+0017 Z=+1 +758J21193+0057 He-sdOBJ21193+0057 Z=-1 -292J21193+0057 Z=0 +0J21193+0057 Z=+1 +487J22071+1257 He-sdOBJ22071+1257 Z=-1 +751J22071+1257 Z=0 +0J22071+1257 Z=+1 +352
Temperature against metallicity, each star zeroed at Z0. Both classes climb: metal-rich models make the star hotter, by about 600 K per dex.
-0.00+0.20-10+1Z [dex]J00511+0042 sdOBJ00511+0042 Z=-1 -0.03J00511+0042 Z=0 +0.00J00511+0042 Z=+1 +0.08J07284+4149 He-sdOBJ07284+4149 Z=-1 -0.07J07284+4149 Z=0 +0.00J07284+4149 Z=+1 +0.19J07403+2049 sdOBJ07403+2049 Z=-1 -0.01J07403+2049 Z=0 +0.00J07403+2049 Z=+1 +0.04J07462+3333 He-sdOBJ07462+3333 Z=-1 -0.12J07462+3333 Z=0 +0.00J07462+3333 Z=+1 +0.24J08251-6314 sdOBJ08251-6314 Z=-1 -0.04J08251-6314 Z=0 +0.00J08251-6314 Z=+1 +0.03J08590+0233 sdOBJ08590+0233 Z=-1 -0.01J08590+0233 Z=0 +0.00J08590+0233 Z=+1 +0.03J12533+3006 sdOBJ12533+3006 Z=-1 -0.00J12533+3006 Z=0 +0.00J12533+3006 Z=+1 +0.02J16387+6728 He-sdOBJ16387+6728 Z=-1 -0.12J16387+6728 Z=0 +0.00J16387+6728 Z=+1 +0.24J17083+3001 sdOBJ17083+3001 Z=-1 -0.03J17083+3001 Z=0 +0.00J17083+3001 Z=+1 +0.07J21133+0017 He-sdOBJ21133+0017 Z=-1 -0.13J21133+0017 Z=0 +0.00J21133+0017 Z=+1 +0.24J21193+0057 He-sdOBJ21193+0057 Z=-1 -0.10J21193+0057 Z=0 +0.00J21193+0057 Z=+1 +0.20J22071+1257 He-sdOBJ22071+1257 Z=-1 -0.12J22071+1257 Z=0 +0.00J22071+1257 Z=+1 +0.28
Gravity. The sdOB stars barely move; the helium-rich ones move ten times as far, because helium and metals trade against each other in a helium-dominated atmosphere.
-0.00+0.20-10+1Z [dex]J00511+0042 sdOBJ00511+0042 Z=-1 +0.00J00511+0042 Z=0 +0.00J00511+0042 Z=+1 +0.02J07284+4149 He-sdOBJ07284+4149 Z=-1 +0.01J07284+4149 Z=0 +0.00J07284+4149 Z=+1 -0.02J07403+2049 sdOBJ07403+2049 Z=-1 -0.00J07403+2049 Z=0 +0.00J07403+2049 Z=+1 +0.00J07462+3333 He-sdOBJ07462+3333 Z=-1 -0.05J07462+3333 Z=0 +0.00J07462+3333 Z=+1 +0.17J08251-6314 sdOBJ08251-6314 Z=-1 -0.01J08251-6314 Z=0 +0.00J08251-6314 Z=+1 +0.04J08590+0233 sdOBJ08590+0233 Z=-1 -0.02J08590+0233 Z=0 +0.00J08590+0233 Z=+1 +0.03J12533+3006 sdOBJ12533+3006 Z=-1 -0.02J12533+3006 Z=0 +0.00J12533+3006 Z=+1 -0.03J16387+6728 He-sdOBJ16387+6728 Z=-1 -0.08J16387+6728 Z=0 +0.00J16387+6728 Z=+1 +0.24J17083+3001 sdOBJ17083+3001 Z=-1 +0.03J17083+3001 Z=0 +0.00J17083+3001 Z=+1 -0.11J21133+0017 He-sdOBJ21133+0017 Z=-1 -0.08J21133+0017 Z=0 +0.00J21133+0017 Z=+1 +0.25J21193+0057 He-sdOBJ21193+0057 Z=-1 -0.08J21193+0057 Z=0 +0.00J21193+0057 Z=+1 +0.21J22071+1257 He-sdOBJ22071+1257 Z=-1 -0.05J22071+1257 Z=0 +0.00J22071+1257 Z=+1 +0.20
Helium. Flat for sdOB — which is what makes the axis swap well posed for that class — and not flat for He-sdOB.
-0.000.501.00-10+1Z [dex]J00511+0042 sdOBJ00511+0042 Z=-1 +0.806J00511+0042 Z=0 +0.387J00511+0042 Z=+1 +0.000J07284+4149 He-sdOBJ07284+4149 Z=-1 +0.203J07284+4149 Z=0 +0.000J07284+4149 Z=+1 +0.246J07403+2049 sdOBJ07403+2049 Z=-1 +0.495J07403+2049 Z=0 +0.178J07403+2049 Z=+1 +0.000J07462+3333 He-sdOBJ07462+3333 Z=-1 +0.054J07462+3333 Z=0 +0.000J07462+3333 Z=+1 +0.180J08251-6314 sdOBJ08251-6314 Z=-1 +0.044J08251-6314 Z=0 +0.000J08251-6314 Z=+1 +0.036J08590+0233 sdOBJ08590+0233 Z=-1 +0.155J08590+0233 Z=0 +0.025J08590+0233 Z=+1 +0.000J12533+3006 sdOBJ12533+3006 Z=-1 +0.029J12533+3006 Z=0 +0.000J12533+3006 Z=+1 +0.183J16387+6728 He-sdOBJ16387+6728 Z=-1 +0.474J16387+6728 Z=0 +0.232J16387+6728 Z=+1 +0.000J17083+3001 sdOBJ17083+3001 Z=-1 +0.163J17083+3001 Z=0 +0.000J17083+3001 Z=+1 +1.018J21133+0017 He-sdOBJ21133+0017 Z=-1 +0.048J21133+0017 Z=0 +0.000J21133+0017 Z=+1 +0.210J21193+0057 He-sdOBJ21193+0057 Z=-1 +0.289J21193+0057 Z=0 +0.059J21193+0057 Z=+1 +0.000J22071+1257 He-sdOBJ22071+1257 Z=-1 +0.221J22071+1257 Z=0 +0.046J22071+1257 Z=+1 +0.000
Reduced chi-square, each star measured from its own best band. Nothing prefers metal-poor: the curves rise to the left in almost every case.
1.02.03.01.02.03.0reduced chi2, helium freeequalJ00511+0042 sdOB 1.69 -> 1.27 (-0.42)J07284+4149 He-sdOB 1.78 -> 1.77 (-0.01)J07403+2049 sdOB 1.90 -> 1.57 (-0.33)J07462+3333 He-sdOB 3.06 -> 3.09 (+0.03)J08251-6314 sdOB 3.65 -> 3.61 (-0.04)J08590+0233 sdOB 1.40 -> 1.29 (-0.11)J12533+3006 sdOB 1.05 -> 1.04 (-0.01)J16387+6728 He-sdOB 3.05 -> 2.83 (-0.22)J17083+3001 sdOB 1.31 -> 1.31 (+0.00)J21133+0017 He-sdOB 2.04 -> 2.03 (-0.01)J21193+0057 He-sdOB 2.38 -> 2.30 (-0.08)J22071+1257 He-sdOB 2.01 -> 1.94 (-0.07)
Fitting Z instead of helium. Below the diagonal is an improvement.
0+0.54000050000Teff [K]J00511+0042 sdOB Teff 38667 Z +0.84J07284+4149 He-sdOB Teff 38882 Z +0.27J07403+2049 sdOB Teff 34675 Z +0.68J07462+3333 He-sdOB Teff 48187 Z +0.32J08251-6314 sdOB Teff 33248 Z +0.43J08590+0233 sdOB Teff 34340 Z +0.62J12533+3006 sdOB Teff 34132 Z +0.32J16387+6728 He-sdOB Teff 46809 Z +0.82J17083+3001 sdOB Teff 36856 Z +0.06J21133+0017 He-sdOB Teff 45926 Z -0.02J21193+0057 He-sdOB Teff 46010 Z +0.50J22071+1257 He-sdOB Teff 53817 Z +0.53
Where the free Z lands. Positive in nine of ten, around half a dex above the standard sdB pattern.

Over two dex of metals

classnΔTeff [K]Δlog gΔlog n(He)/n(H)
He-sdOB6+866+0.360+0.275
sdOB6+1276+0.062+0.014

Median of Z = +1 minus Z = −1.

Which lines the bands disagree about

Median over the stars of how far apart the four bands' best fits get on each line, in per cent of the continuum. Each band sits at its own fitted parameters, so this is the disagreement that survives every band doing its best — the part the fit cannot absorb.

lineHe-sdOBsdOB
He II 46861.99.3
Hβ3.32.9
Hγ2.53.3
He II 54122.7—
Hδ2.32.8
Hε3.21.6
He I 49221.32.7
He II 45421.7—
Hη1.81.1
He I 44721.41.1
Hθ2.01.1
Hζ1.20.9
He I 47131.1—
He I 40260.71.2
He II 42000.8—
He I 58760.7—
Hι0.20.6
He I 50160.4—

Every star on every band

starclassS/NbandTefflog glog n(He)/n(H)reduced χ²
J00511+0042sdOB68.2Z-1369396.042-1.132.11
Z0375576.070-1.131.69
Z1389296.150-1.111.30
J07284+4149He-sdOB72.8Z-1390515.743-0.131.98
Z0390355.816-0.141.77
Z1390096.002-0.152.02
J07403+2049sdOB79.1Z-1340205.853-1.602.21
Z0341475.862-1.601.90
Z1349795.903-1.591.72
J07462+3333He-sdOB68.2Z-1477505.948+0.383.11
Z0480026.065+0.433.06
Z1487036.309+0.593.24
J08251-6314sdOB81.9Z-1327626.008-1.653.71
Z0328136.049-1.643.67
Z1340776.083-1.603.71
J08590+0233sdOB74.4Z-1336415.925-1.841.53
Z0337445.937-1.821.40
Z1348795.965-1.791.38
J12533+3006sdOB71.0Z-1336365.824-2.151.08
Z0337945.827-2.131.05
Z1351765.851-2.161.24
J16387+6728He-sdOB74.5Z-1458155.804+0.663.30
Z0461375.927+0.743.05
Z1468946.164+0.982.82
J17083+3001sdOB77.3Z-1364876.118-1.641.48
Z0368196.144-1.671.31
Z1375976.218-1.782.33
J21133+0017He-sdOB69.3Z-1454505.799+0.472.09
Z0459335.933+0.552.04
Z1466916.175+0.792.25
J21193+0057He-sdOB73.7Z-1454565.732+0.582.61
Z0457485.830+0.672.38
Z1462356.032+0.882.33
J22071+1257He-sdOB80.1Z-1544506.023+0.342.18
Z0536996.140+0.392.01
Z1540516.417+0.601.96

Metallicity in place of helium

Helium held at exactly the value the ordinary fit found — each band splined along its own helium axis to it, not snapped to the nearest delivered file — and Z free over −2…+1. Three parameters float either way. The comparison is not quite like for like: helium was fixed at a value measured at Z = 0, so the Z run has had four quantities determined from the data where the helium run had three. Settling it needs a four-dimensional grid.

starclassTeff He freeTeff Z freefitted Zχ² He freeχ² Z freeΔχ² total
J00511+0042sdOB3755738667+0.841.691.27-273
J07284+4149He-sdOB3903538882+0.271.781.77-8
J07403+2049sdOB3414734675+0.681.901.57-214
J07462+3333He-sdOB4800248187+0.323.063.09+25
J08251-6314sdOB3282333248+0.433.653.61-26
J08590+0233sdOB3374534340+0.621.401.29-71
J12533+3006sdOB3379434132+0.321.051.04-7
J16387+6728He-sdOB4613746809+0.823.052.83-182
J17083+3001sdOB3681936856+0.061.311.31+0
J21133+0017He-sdOB4593345926-0.022.042.03-8
J21193+0057He-sdOB4574846010+0.502.382.30-66
J22071+1257He-sdOB5369953817+0.532.011.94-57

How the metallicity fit is done

Nothing in the interpolation ever knew that its third axis was helium. It splines over whatever numbers the axis carries, one axis at a time, and hands back that axis's own first derivative along with the value — which is what gives Levenberg–Marquardt an analytic Jacobian for the price of the interpolation it had to do anyway. So a set of models at one helium abundance and several metallicities makes a grid whose third parameter is Z, fitted exactly the way helium is. The one library change was to let GridSet.load take the axis values explicitly rather than reading each file's own helium header.

Z−1Z0Z+16 helium files each(of the thirteen delivered)spline along helium to the value the ordinary fit found — not the nearest filelog g × Tlog g × Tlog g × Tstack along Zone grid, third axis = Zfit Teff, log g, Zthe spline returns d/dZ exactly as it returned d/dHe
Helium is not snapped to the nearest delivered file: the points are half a dex apart at the metal-poor end, and snapping would put a tenth of a dex of helium error into a measurement of something else. Each band is splined along its own helium axis to the exact value the ordinary fit found, and the results are stacked along Z.

Three parameters float either way — Teff, log g, and one of helium or Z — so the two reduced chi-squares compare directly. This is not a four-parameter fit: in the Z run helium is held, and it is held at a value that was itself measured at Z = 0. That is the caveat above, stated as machinery: the Z run has had four quantities determined from the data where the helium run had three.

Towards four free parameters

Floating Teff, log g, helium and Z together is the clean test, and the arithmetic for it is written and checked (nd_prototype.py) even though no star has yet been fitted with four free parameters. The derivative chain generalises to a loop: at each axis the value array is splined for its value and the new derivative, while each derivative carried from an earlier axis is splined for its value only — differentiating it again would be a second derivative, which the Jacobian does not want. The stack grows by one per axis, so k axes cost 1+2+…+k spline passes: six now, ten with four.

checkresult
all four analytic derivatives against central finite differencesagree to 1.4×10−9 … 1.9×10−7 relative
the same routine restricted to three axes, against the shipped interpolationidentical bit for bit — value and all three derivatives
memory for a four-axis block over a twelve-line window57 MB
time to assemble it2.3 s cold, 0.54 s warm

What remains is plumbing rather than numerics — the result object, the output writers, the bounds and the error scaling all count to three — and two decisions that change published numbers: whether Z should be bounded to the delivered range (unlike temperature and gravity, where a fit walking out of the grid is a deliberate diagnostic, a cubic through four points a dex apart is wild outside them), and whether the reduced chi-square should divide by n − len(free) rather than the n − 2 it uses today.