v2.6.0
One rule for sampling the field and the pupil (#219)
linearize documented pupil as cell vertices, then defaulted to two grids which were neither vertices nor each other: area_effective invented its own, while the distortion and vignetting fits took grid_input.pupil. Passing the grid the docstring named gave a vignetting model 163% away from the default, and nothing errored.
Both axes are now cell vertices, and passing the defaults back reproduces leaving them out. Stratifying the field is what the vertices buy: the field average used to wander with the sampling rather than converge, and now does both monotonically.
Measured on the ESIS as-built model: the distorted position moves by 0.013 pix against a 2.81 pix resolution element, illumination by 1.37%, and the effective area by 1.77% — all inside the 5.8% photon noise implied by its SNR requirement.
The sampling can be seeded (#220)
The field and the pupil are sampled at a point drawn inside each cell, which is what keeps the quadrature from aliasing against an edge falling between samples. Nothing could fix that sampling, so nothing computed through it could be reproduced: two calls to area_effective on the ESIS model gave effective areas about two percent apart.
area_effective now takes a seed, as does the sampling behind image. The default draws as before, so nothing computed today moves.
With the sampling fixed, refining the grids converges as it should: on the ESIS passband the roughness of the curve falls from 0.0137 at 12x12 to 0.0047 at 20x20, tracking 1/sqrt(N), and then stops improving — what is left is the structure of the measured coatings rather than noise.
Requires
named-arrays~=2.9.