Reduces a set of knife-edge readings, taken against a pin stick
or a Couder mask,
into the wavefront your mirror actually has — and into the number you want,
the maximum error as a fraction of a wave. A port of Lindner and Phillips’
tex, checked against it.
One row per zone. Paste a column or a block straight from a spreadsheet; arrow keys and Enter move between cells.
Each zone’s reading is jittered by its own measured scatter and the whole reduction is run again, a thousand times over, to see how much the verdict moves.
The fourteen rows the C program prints, transposed so they grow downward with the zones.
The reduction is a line-by-line port of calc() from
tex.c, checked against the compiled C program on the reading sets
in fixtures/. Where it looks numerically odd — the constant
found by walking cnst += tdev/150000, the hand-tuned tolerances in
the parabola search — that is deliberate, and changing it would break
agreement with numbers makers wrote down decades ago.
Pin-stick mode is the exception. tex has no pin stick, so
there is no C output to check it against. What is checked is the one thing that
differs: the pin radius, against the closed form the Stellafane zone calculator
publishes, Center(X) = √(X+0.5)/√N. Everything downstream
of that radius is the same code the Couder path uses, and that path is checked
against the C.
What it cannot tell you: the Foucault test at the centre of curvature says nothing about astigmatism unless you take readings on more than one diameter, and nothing at all about the surface between your zones.
A zone at radius h on a perfect paraboloid returns to the axis
further out than the centre does, by
h² / R
Which h depends on what marked the zone. A pin stick puts a pin at
the zone’s equal-area radius and you null on the pin, so that is the
radius the reading belongs to. A Couder mask exposes the whole band, and
tex attributes it to the band’s arithmetic mean:
pin h = √((in² + out²) / 2)
mask h = (in + out) / 2
Subtract that from the reading, subtract one constant chosen so the largest
errors come out equal and opposite, and what is left is the figure error as a
longitudinal distance. Scaled by h/4f it becomes a transverse
aberration, and integrated across the zones it becomes the wavefront:
u = −20 · λf / R
W(i) = W(i−1) + u(i−1) · (outer − inner)
Finally the best reference parabola is subtracted, because a parabolic term in the wavefront is only a change of focus, not an error.
Centre of curvature only, Foucault knife-edge only. No Ronchi, no autocollimation, no star test. For the Ronchi pattern the same mirror should show, see Web Ronchi.
Deliberate departures from the C are recorded in docs/adr/: the
canonical millimetre, the dead calc_wavefront(), the dropped
-s sphere flag, and why the graphs are the ones they are.