Documentation
Ray-Optics Designer
Operating reference for the sequential ray tracer: every convention the numbers read against, what each analysis computes, where every pinned value came from, and what the model does not claim.
1. What this tool is
The Ray-Optics Designer is a sequential ray-tracing design tool that runs in your browser. You type a prescription — a list of optical surfaces in the order light meets them — and the tool traces exact real rays through it, computes the first-order (Gaussian) properties, and analyzes the image: spot diagrams, ray fans with interpretation labels, Seidel aberration sums, chromatic focal shifts, wavefront error, PSF, MTF, field curves, ghost reflections, and how the design moves with temperature and pressure. On top of the analysis sit two design engines: a damped-least-squares optimizer and a tolerancing engine with Monte Carlo yield prediction, both part of Ray-Optics Design Pro. Designs travel as share links, save to your library, and import from and export to the .zmx and CODE V (.seq) lens file formats (§14).
“Sequential” is the load-bearing word. Light visits the surfaces in the order you list them — surface 1, then surface 2, and so on to the image plane. That is the correct model for lenses, telescopes, camera objectives and relay systems, and it is what makes exact aberration bookkeeping possible. The one deliberate exception is the Ghost images view (§9), which asks what happens when light disobeys the prescription once — a reflection pair inside an otherwise sequential system. For genuinely non-sequential problems — integrating spheres, lightpipes, stray light in an enclosure, illumination — the right tool is the Illumination Analyzer, which is built on a different engine with different statistics.
Everything in the analysis half computes client-side, in your browser, in double precision. The optimizer and the tolerancer run on our servers.
2. Conventions and the prescription
Every number in the tool reads against these conventions. They are stated once, here, and the engine’s acceptance suite enforces them.
- Axis and direction. Light initially travels in +z. Surfaces are listed in the order light meets them.
- Radius sign. R > 0 when the center of curvature lies to the right of the vertex (further along +z). A plane is entered as an empty radius, not as a large number.
- Thickness. Each row’s thickness t is the axial distance from that surface to the next. On the unfolded axis of a mirror system, gaps after an odd number of reflections are negative and refractive indices flip sign — Welford’s n → −n bookkeeping, which lets one paraxial formalism cover mirrors exactly. A row marked “Folds the axis” uses the other formalism: the coordinate frame follows the reflected axis and thicknesses stay positive. The two formalisms never mix on one surface. After an odd number of reflections EFL, BFL, f/# and NA are therefore reported signed; the physical focal length is their magnitude, and the first-order panel says so beside the numbers.
- Units. Lengths in millimeters, wavelengths in micrometers.
- Wavelengths. Entered in µm; one of them is the reference wavelength. A new design starts at the Fraunhofer d line (0.5876 µm); chromatic analysis reads the F (0.4861 µm) and C (0.6563 µm) lines when they are in the list, and the presets carry their own line sets.
- Aperture. Specified as the entrance pupil diameter (EPD), in mm. f/# and NA are derived, never entered.
- Fields. Field angles in degrees for an object at infinity; object heights in mm for a finite conjugate. Setting an object distance switches the field axis; the two never coexist.
- The stop. One surface is the aperture stop. The entrance pupil is the paraxial image of the stop through the surfaces ahead of it, and every pupil-aimed analysis launches its rays through that pupil. If the stop images to infinity in object space (an object-space telecentric system), the entrance pupil has no finite position, field rays cannot be aimed at it, and the first-order panel says so rather than aiming them somewhere else.
Surface shapes. A row is a sphere, a conic, an even asphere or a toroid:
with c = 1/R the curvature, K the conic constant and h the radial coordinate. The editor exposes a₄ and a₆; higher even orders arriving through a file import (a₈ … a₂₀, §14) are preserved, traced, and shown read-only. A toroid is the swept-torus surface z = R_rot − √((R_rot − p(y))² − x²) with the sweep axis parallel to y, where p(y) is the meridional profile above; a blank sweep radius is the cylinder limit of the same formula.
Tilts and folds — the two-class rule. A row may carry a tilt about its local x axis, and a tilted flat mirror may fold the axis. The analyses distinguish two cases:
- Class A — every tilted surface is a flat folding mirror. The system unfolds rigorously into an equivalent straight system (a flat fold in one medium has no power and contributes exactly zero to every aberration sum), so all analyses run and return the straight system’s numbers. Only the layout bends.
- Class B — any tilted or decentered surface with power, including a tilted refractive plane (a prism). There is no single optical axis, so every pupil-aimed analysis (first-order data, Seidel, spots, fans, OPD, PSF, MTF, field plots) is suppressed with its reason shown. What runs: the layout, per-ray tables, and aperture-referenced fans — parallel bundles across the first clear aperture, flagged as not pupil-aimed, evaluated at the image plane your own last gap defines.
Finite conjugates. An object distance turns the same prescription into a finite-conjugate system: fields become object heights, the marginal ray follows the conjugate, magnification and object/image distances join the first-order panel, and spot bundles aim from the object point through the entrance pupil.
3. Media and the glass catalog
Each surface row names the medium after it. Five kinds:
| Medium kind | What it is | Dispersion |
|---|---|---|
| Air | the default | none (n = 1) |
| Catalog glass | one of the 399 glasses below | full dispersion formula |
| Constant index | a typed n | none — chromatic analysis reports “no dispersion model” |
| Published-line table | (λ, n) pairs at named spectral lines | exact at the listed lines only |
| Your own material | a tabulated material from your account | linear interpolation between samples, refused outside the table’s range |
The catalog: 399 glasses. SCHOTT (156), OHARA S-line (38), CDGM (15) and HOYA (190), with each record’s dispersion formula and coefficients reproduced from the CC0-licensed subset of the RefractiveIndex.INFO database. SCHOTT, OHARA and CDGM records evaluate through the Sellmeier form; HOYA records through their published power-series form. Every glass shows its vendor and catalog release date (“vintage”) in the picker — SCHOTT and OHARA records are from 2017 catalog data, CDGM from 2022, HOYA from 2017 — because glass catalogs are revised: verify against the vendor’s current datasheet before committing a design to fabrication. Each record is fitted over a stated wavelength range; a reference wavelength outside it is evaluated as an extrapolation of that fit, and the first-order panel says so. Vendor names are their owners’ trademarks; the data is reproduced, not endorsed.
Legacy names. 26 discontinued or renamed glasses resolve through an alias table (25 OHARA vendor-succession pairs plus BK7 → N-BK7), each showing the measured Δn_d and ΔV_d between the old and new record — the largest V-number difference in the table is 0.069. The tool never invents values for a classic glass with no record in a permitted source; an unresolvable name imports as an unbound medium that blocks analysis by name rather than guessing (§14).
Your own materials. A tabulated material you define is evaluated by linear interpolation between your samples and refused outside your table’s wavelength range — no extrapolation, and no smoothing curve you did not type. The same material may evaluate slightly differently in tools that spline their tables; the difference is bounded by the interpolation gap (about 6 × 10⁻⁶ for 10 nm sample spacing) and is documented rather than hidden.
4. Ray tracing and first-order data
Real rays. The trace is exact: closed-form intersection with spheres and conics, Newton iteration to machine precision for the polynomial asphere terms, exact vector refraction and reflection at each surface. There is no small-angle approximation anywhere in the real-ray path. A ray that misses a surface’s extent, or hits total internal reflection, is reported as exactly that — counted, excluded, and named in the analysis that launched it, never silently dropped.
Paraxial engine. Alongside the real trace runs the standard y-nu paraxial trace, which supplies EFL, BFL, FFL, pupil positions and diameters, NA and f/#, magnification and conjugate positions. The first-order panel shows: EFL, BFL, FFL, image-space NA, entrance and exit pupil position and diameter, and — when both the F and C lines are in the wavelength list — axial color as BFL(F) − BFL(C) from a direct paraxial re-trace at each wavelength.
Afocal systems. A telescope or beam expander has no finite focal length, and near-zero total power the EFL is numerically meaningless (its sign flips through ±∞). The tool detects this state instead of printing a huge number: the first-order panel replaces EFL/BFL/FFL with “afocal” and shows the two quantities that are well defined there — the angular magnification M and the beam ratio A (exit/entrance beam diameter, with A = 1/M exactly at afocality).
5. Spot diagrams and ray fans
Spot diagrams. For each field and wavelength the tool launches a hexapolar bundle through the entrance pupil: the chief ray plus r rings, ring r carrying 6r rays, 1 + 3r(r + 1) rays in total — 127 at the default 6 rings. The spot is plotted at the image plane about its centroid, with RMS and geometric radii reported, and vignetted or failed rays counted and excluded from the statistics.
Ray fans. 21-point transverse aberration fans, meridional (ε_y vs pupil y) and sagittal (ε_x vs pupil x), referred to the chief ray at each field.
Interpretation labels. Under each fan the tool fits a least-squares polynomial in the pupil coordinate (powers 1 through 5, no constant term — chief-referencing makes the fan zero at the pupil center) and names what it sees, with the per-term shares always displayed beside the label. The convention, stated as a convention because no literature standard exists for “coma-dominant”:
- a term is named when its share of the fan’s measured RMS reaches 60 % (shares are fractions of the fan’s own RMS — the same denominator the residual rule below uses);
- a second term is listed at 25 %;
- if more than 10 % of the fan’s RMS is left unexplained by the degree-5 fit, no aberration is named — the label never outruns the fit;
- a fan whose whole excursion lies inside the diffraction core (the Airy radius 1.22·λ·N at that fan’s own wavelength, not the reference wavelength) is labeled diffraction-limited and gets no aberration name — naming the shape of round-off noise would be fiction;
- fewer than 15 surviving points, no fit at all.
6. Seidel aberrations
The Seidel view is the third-order aberration ledger: per-surface contributions and sums of the five Seidel coefficients S_I (spherical), S_II (coma), S_III (astigmatism), S_IV (Petzval field curvature) and S_V (distortion), in Welford’s formulation, computed from a paraxial marginal ray and a pupil-centered chief ray. Conic and asphere terms enter through the standard aspheric increments; mirrors are handled exactly by the n → −n substitution. Two cases are suppressed with their reasons shown rather than approximated: toroids (two principal sections — a single-axis formalism does not apply) and Class B tilted systems (§2).
How the sums scale. With normalized pupil radius ρ and normalized field h, the transverse third-order aberrations scale as:
| Aberration | Pupil | Field |
|---|---|---|
| Spherical (S_I) | ρ³ | — |
| Coma (S_II) | ρ² | h |
| Astigmatism, field curvature (S_III, S_IV) | ρ | h² |
| Distortion (S_V) | — | h³ |
This is why aperture is expensive: opening a lens by one stop multiplies the spherical aberration blur by (√2)³ ≈ 2.8 while the diffraction limit only shrinks by √2. It is also why the fan labels of §5 work: on the meridional fan the sums appear as
and on the sagittal fan as ε_x(P) = [S_I·P³ + (S_III + S_IV)·P] / (2·n′u′), with P the fractional pupil coordinate, n′u′ the image-space marginal optical slope, and the sums evaluated at the fan’s field. Distortion is absent from both because the fans are chief-referenced. Note that the sums are third-order predictions; the fans and spots are exact real-ray results, and where they disagree the real rays are the truth — that disagreement is precisely the higher-order aberration content. What each of the five does to a point image, and how each grows with aperture and field, is worked through on a single lens in Optical aberrations: the five Seidel terms; the same ledger read surface by surface on a corrected triplet is in Correcting aberrations.
7. Chromatic analysis
With a dispersive medium in the system and both the F and C lines in the wavelength list, the tool reports axial color — BFL(F) − BFL(C), from a direct paraxial re-trace at each wavelength, no thin-lens approximation — and lateral color at each field. Media published only at named spectral lines get the honest branch: if a medium has no published index at F or C, the tool says so instead of interpolating an unpublished value.
Worked anchor, from the startup preset: the Cemented Achromat Doublet (N-BK7 + N-SF5, the classic crown-flint pair) has EFL 87.8784 mm and axial color +0.1715 mm. Compare the Biconvex Singlet preset with a real glass bound: −0.8925 mm over the same F−C span. That pair of numbers is the flint’s whole job, on a geometry that was never color-optimized.
8. Wavefront, PSF, MTF and field plots
OPD. The optical path difference map: physical optical path length accumulated along each real ray, referred to a reference sphere centered on the chief ray’s image-plane intersection and passing through the exit-pupil center. Displayed as tangential/sagittal OPD fans and a pupil map, with peak-to-valley, RMS and the excluded-ray count. Sign convention: OPD = OPL(chief) − OPL(ray), so W(0,0) = 0 by construction and positive OPD means the ray’s optical path is shorter than the chief’s — under it, the ρ⁴ coefficient of third-order spherical aberration is +S_I/8. Telecentric systems (exit pupil at infinity) use the same reference-sphere machinery through the last vertex — there is no separate planar-reference branch, because the defocus term’s sign flips on a planar reference and the two references disagree measurably.
Zernike. A least-squares fit of the OPD map on Zernike polynomials in Noll’s indexing, with the RMS fit residual displayed next to the coefficients — a large residual means the truncated basis is not describing this pupil, and the table says so. Rank-deficient pupils (heavy vignetting) refuse the fit rather than returning noise.
PSF. The point-spread function by pupil-plane FFT of the complex pupil function e^(2πi·W/λ), Strehl-normalized: the displayed Strehl ratio is the aberrated peak against the unaberrated peak of the same pupil, obstruction included, following Mahajan’s convention — an obstructed but unaberrated pupil reads Strehl = 1. The excluded-ray count is always displayed beside the Strehl, because a Strehl computed from half a pupil is a different claim than one from all of it. A wavefront too steep for the sampling (phase stepping more than π between samples) blocks the computation with a message rather than rendering an aliased picture. Polychromatic PSF is the incoherent, weight-summed stack of the monochromatic PSFs, resampled onto the reference wavelength’s µm grid.
MTF. Tangential and sagittal modulation transfer, computed from the PSF, plotted to the diffraction cutoff against the diffraction-limited curve.
Field plots. Distortion in percent against the paraxial image height f·tanθ/n′ (n′ is the image-space index; the division bites only on mirror systems, where an odd number of reflections makes n′ negative), and tangential/sagittal field curvature from differential real rays across the field.
9. Ghost images
Every refracting surface reflects a little; any pair of surfaces therefore sends a doubly-reflected copy of the scene toward the image. The Ghost images view enumerates every double-bounce path — for each pair of refracting surfaces (a, b) with a ahead of b on the light’s path, the light transmits forward to b, reflects there, travels back to a, reflects again, and continues to the image — and ranks them by how much irradiance they put on the image plane relative to the nominal image.
The flux of a ghost path. Reflecting at surfaces a and b and transmitting everything between them twice:
The surfaces outside the pair are traversed once by both the nominal and the ghost beam, so they cancel. For a bare glass plate in air (n = 1.5, R = 0.04 exactly at normal incidence) the one ghost pair gives F_g/F_nom = 0.04² = 1.6 × 10⁻³ — the number every stray-light discussion starts from.
The ranking. Flux alone does not decide visibility: a ghost spread over a large defocused disc is dimmer than the same flux near focus. Each path’s paraxial ghost focus is computed, its blur radius r_g at the image plane found, and the ranking quantity is
where r_A is the Airy radius — the diffraction core is the honest floor: a ghost focused more tightly than diffraction allows cannot be brighter than “all its flux in one diffraction spot”, and a naive F/r² would diverge there.
What the estimate leaves out. The table is a paraxial estimate, and the view says so above it. Reflectance is taken at normal incidence from the prescription’s own indices; real marginal-ray angles differ, which is small at a typical numerical aperture but is not bounded here. One reference wavelength, on-axis bundle only, and the ghost focus and blur radius come from the paraxial trace. And the ghost path is not clipped by any aperture: real ghost paths often vignette hard, so the flux here over-states them, which is the conservative direction for a warning. A ghost that ranks low here can be dismissed; one that ranks high still deserves a real-ray check.
Sensor ghosts. The image sensor itself reflects. Once you type a sensor reflectance R_s, the view adds the surface-to-sensor paths (F = R_a·R_s·ΠT², product over surfaces after a). There is no default sensor reflectance — an untyped “1 % AR” would be fabricated data — so until one is entered the sensor rows are absent, with a note naming the missing input.
Refusals, by name. Mirror and folded prescriptions are refused on physics: a ghost’s backward leg cannot transmit through a mirror, so the double-bounce enumeration does not describe such a system. Tilted systems, toroids, systems with no accessible image and unbound media are likewise refused with their reasons, not approximated.
10. Multiple configurations
A prescription can carry up to 4 configurations — a zoom’s wide/mid/tele plus a focus state is the textbook case. Configurations share one surface list; each configuration is an overlay of specific values on top of it. Four things can take a per-configuration value: any gap thickness, the entrance pupil diameter, the object distance, and the field list (as a whole). Everything not overlaid is shared by construction, so editing a shared radius edits it in every configuration at once.
Analyses read the active configuration. In the optimizer (§12), each operand row names the configuration it is evaluated in, the merit sums over all of them, and a variable can be shared (one value moving everywhere) or owned by one configuration — the zoom spacing that differs per state is per-configuration; the curvatures that are one piece of glass are shared. A configuration may switch conjugates (an infinite-conjugate wide state and a close-focus state in one design); each operand’s field values are read in its own configuration’s convention.
11. Thermal analysis
The Thermal view answers one question: what happens to this design at a temperature it was not specified at. Two things move at once. Every material’s refractive index follows its own published temperature curve, measured from the temperature that curve is stated at; and every length — radii, center thicknesses, semi-diameters, and the airspaces set by the barrel between the elements — follows a linear expansion coefficient, measured from the temperature your drawing’s millimeters are stated at. The view evaluates the design at both temperatures through one code path and reports the difference, so the headline is a statement about temperature and not about two different calculations. At the specified temperature the expansion factor is exactly 1 and the millimeters are the prescription’s own; analyzing at the specified temperature gives a shift of exactly zero, and analyzing at the catalog’s own reference conditions reproduces the first-order panel’s numbers exactly. The view needs a free account; the coefficients can be typed at every tier, and Plus fills them from the catalog (§16).
The model
For a glass at vacuum wavelength λ, environment temperature T and pressure P, with the catalog record’s reference temperature T₀ and P₀ = 101.325 kPa, the index chain is
with n = n_abs(λ, T₀), ΔT = T − T₀ and λ in µm. The first line puts the catalog’s index, which every glass catalog states relative to air, on the absolute (vacuum) scale; the second is the six-coefficient temperature model published with the glass, in the form SCHOTT’s TIE-19 gives it, which is the form the other vendors’ records state too; the third returns to the index relative to the air the lens is actually in, which is the index the ray trace uses. N-BK7’s record, for example, carries D₀ = 1.86 × 10⁻⁶, D₁ = 1.31 × 10⁻⁸, D₂ = −1.37 × 10⁻¹¹, E₀ = 4.34 × 10⁻⁷, E₁ = 6.27 × 10⁻¹⁰ and λ_TK = 0.17 µm, stated at 293 K, with an expansion coefficient of 7.1 × 10⁻⁶/K.
The air. n_air is Edlén’s 1966 dispersion and density formula for dry air with standard carbon dioxide, with the constants transcribed from the paper and cross-checked against a second published statement of them; the wavelengths you enter are taken as vacuum wavelengths in it. At the d line, 20 °C and 101.325 kPa the index of air is 1 + 2.724 × 10⁻⁴; at 70 kPa it is 1 + 1.882 × 10⁻⁴. The humidity term is omitted, and the modern revision of the same formula (Birch and Downs, 1993) is noted in the references rather than silently substituted. Every gap is at the pressure you enter — a vented housing.
The geometry. Each glass center thickness, radius and semi-diameter scales by (1 + α_g·ΔT) with its own glass’s expansion coefficient; each airspace scales by (1 + α_h·ΔT) with the housing coefficient you type, because what sets the distance between two elements is the barrel, not the air. A cemented interface belongs to two glasses at once and is scaled by the arithmetic mean of their two coefficients: either pure choice differs from the mean by half their spread, the largest spread in the catalog is 1.04 × 10⁻⁵/K, and at a 50 K excursion the ambiguity in that surface’s curvature is therefore bounded by 2.6 × 10⁻⁴ relative — an order below the index effects the view exists to show. A surface with glass on neither side (a stop plane in air, a dummy surface, a mirror whose substrate the model does not carry) is left alone and listed as unscaled rather than scaled by a guessed coefficient; a plane stays a plane. The view lists which surfaces were scaled with one element’s coefficient, which with a cemented mean, and which were left alone.
What the headline is. The back focal shift is how far the lens’s own back focal point moved between the two temperatures, printed in micrometers to two significant figures because the inputs it is a difference of carry two or three: the temperatures are typed to a degree and the published coefficients to two or three figures. The two absolute back focal lengths beside it are printed to seven figures so the shift is visible in their last digits, and the focal length change is printed the same way as the shift. Where the detector sits is not part of it: a sensor mount expands too, and this tool does not know yours.
Worked anchor, from the startup preset with the catalog’s coefficients: the Cemented Achromat Doublet specified at 20 °C and analyzed at 30 °C in air at 101.325 kPa has a back focal length of 83.32959 mm at 20 °C and 83.33008 mm at 30 °C — a back focal shift of +0.50 µm (the back focal length grows) and a focal length change of +0.74 µm, which is 2.2 % of its quarter-wave depth of focus of ±22.7 µm at f/4.39. At 60 °C the shift is 1.6 µm, 7.1 % of the same depth, and the view also reports that 60 °C is outside the range the air formula is published for (below). The housing coefficient does not enter this example, and the view gives the identical shift whatever you type for it, because a cemented doublet has no airspace between its elements. On the Air-Spaced Triplet preset over the same 20 to 30 °C it does: a rigid housing gives 18 µm, and each 10 × 10⁻⁶/K of housing expansion takes about 1.6 µm off it (16, 15 and 13 µm at 10, 20 and 30 × 10⁻⁶/K), against a depth of ±25.0 µm.
Two consequences of evaluating both states through the chain, stated so the numbers are not a surprise. The 20 °C back focal length differs from the first-order panel’s by 0.084 µm on the doublet, because the catalog states its indices at 293 K — 19.85 °C — and the view evaluates the design at the temperature you typed, not at the record’s. And pressure enters both states, as the air the design is evaluated in at both temperatures, so the headline is a temperature difference at the stated pressure and a change of pressure alone prints a shift of zero; to see an altitude effect, compare the absolute back focal lengths of two runs — the doublet’s is 83.32959 mm at 101.325 kPa and 83.30469 mm at 70 kPa, 25 µm shorter at the lower pressure, which is larger than its 40 K temperature shift.
Two temperatures, and why both are typed
The view asks for two temperatures and defaults neither. Specified at is the temperature the millimeters in your prescription are stated at — a fact about your drawing that appears in no glass record, so it is typed rather than assumed. A silent 20 °C would be our claim about someone else’s drawing; and a mixed-supplier design carries two index reference temperatures (293 K for SCHOTT, HOYA and CDGM records, 298 K for OHARA’s) but one drawing datum, so a record’s temperature is structurally the wrong number for it, not merely an unverified one. A 5 K error in this datum moves every 100 mm of a barrel expanding at 24 × 10⁻⁶/K by 12 µm — the size of the shifts being measured.
Analyze at is the environment. Each material’s index shift is measured from its own record’s reference temperature, shown beside the material as “Stated at” and converted exactly — a 293 K record reads 19.85 °C, not a rounded 20 — never from the drawing datum; the two temperature differences are different quantities and the view keeps them apart. The vendor’s own files state 20.0 °C where the record states 293 K; the record’s value is what ships, and the 0.15 K between them moves an index by at most 0.15 K times its dn/dT, about 4 × 10⁻⁷ for a typical glass.
Coefficients: yours, or the catalog’s
Two ways to supply a material’s coefficients, one chain. With a free account you type them per material in use, from the vendor table you already have: an absolute dn/dT, an expansion coefficient, and, where the record states no reference temperature, the temperature your values are stated at. Absolute means measured against vacuum; vendor tables print both, and the relative one, measured against air, differs by roughly n times the temperature slope of the air index — for N-BK7 at the d line between 20 and 30 °C the relative slope is 2.82 × 10⁻⁶/K and the absolute slope 1.45 × 10⁻⁶/K. A single dn/dT collapses the full curve to one number, so it is valid near the wavelength and temperature the value was taken at, and the view says so. Every non-air medium in the design is addressed this way, including a constant-index or published-line medium, which states no reference temperature and therefore asks for one.
With Plus, the view fills the coefficients from the catalog’s own records: 390 of the 399 glasses carry the six-coefficient curve and an expansion coefficient (the −30 to +70 °C value, stated as 243 K to 343 K in the record), reproduced from the same CC0-licensed RefractiveIndex.INFO records as the dispersion data and pinned to the same release. The nine that do not — SCHOTT F2G12, LAK9G15, LF5G15, P-BK7, P-LAF37, P-SK57Q1 and SF66, and HOYA E-FD2 and E-FEL2 — are named as carrying no thermal coefficients in our record and wait for typed values, never a proxy glass or an interpolated one. For 112 of the 390, all HOYA records, the published curve is a single constant (D₀ only), and the table says so plainly rather than implying a richer model. For a catalog material the dn/dT column shows the average slope of the published curve between the two temperatures, relative to air; the curve itself is what the analysis uses, not that number. Every value in the materials table says which path produced it — “your value” or “catalog” — because a typed number under a vendor’s glass name must never read as the vendor’s.
Published ranges
The view never refuses an environment. It states, as advisories, every published range the environment falls outside of, each with the source’s own bounds, and the numbers below the advisory still come from the same fit; nothing is substituted. Three ranges exist:
- The air formula. Edlén states the density formula for dry air from 5 to 30 °C, on measurements spanning 100 to 800 torr (13.3 to 106.7 kPa). Outside that the air index is an extrapolation of the same fit. Most environments a lens is thermally designed for lie outside it, which is why the advisory exists.
- The index coefficients. SCHOTT states its constants for −100 to +140 °C and 0.365 to 1.014 µm, and the advisory fires for SCHOTT glasses at an environment temperature or a design wavelength outside that. The other vendors’ records state no window in this chain, so none is claimed for them.
- The expansion coefficient. The −30 to +70 °C value is used at any temperature, and the advisory says so when the environment is outside that range. A typed value carries no window and is given none.
Depth of focus
A shift on its own is not a verdict. The view reads it against the classical tolerance for a focus shift, the quarter-wave depth of focus: how far the image plane can move from best focus before the wavefront error at the edge of the pupil reaches a quarter of a wave. For a beam converging at f-number N, a defocus δ adds a wavefront error of δ / (8N²) at the pupil edge; setting that to λ/4 gives
computed from this design’s own infinite-conjugate f-number (EFL/EPD) at its reference wavelength, which is the wavelength the quarter wave is a quarter of, and printed in micrometers to three figures. The printed fraction is the shift’s magnitude over δ; a shift of one depth sits exactly on the limit, not comfortably inside it. Two things the reference assumes, stated rather than hidden. It is the depth for an image formed in air: every shipped preset images into air, and for a design whose last medium has index n′ the true depth is the printed value divided by n′, so the printed fraction is understated by that factor. And it uses the infinite-conjugate f-number: at finite conjugates the working f-number is larger and the true depth with it, so the printed reference is the conservative one. An afocal system has no f-number, and the view says it has no depth of focus to read the shift against, rather than printing a dash.
What the model does not carry
Not modeled, and not approximated: stress birefringence, temperature gradients across an element, mount-induced deformation, humidity, sealed cavities (every gap is at the pressure you enter), and where your detector sits. One environment governs the whole design, and it is a viewing state of the page: not part of the prescription, not carried by a share link, and not written to an exported file (§14, §17). Aspheric coefficients are not scaled with temperature. A uniform expansion by s = 1 + αΔT takes the curvature to c/s, leaves a conic constant unchanged, and would take each polynomial coefficient a₂ₘ to a₂ₘ · s^(1 − 2m); the view scales the radius and leaves the coefficients as typed, so the error is at most (2m − 1) · |αΔT| of each term’s own sag — about 1.1 × 10⁻³ of the a₄ term’s sag at a 50 K excursion, which is about a nanometer on the shipped asphere preset — and the view says so whenever an aspheric surface meets a nonzero temperature change.
12. Optimization
The Optimize view changes the design instead of analyzing it. It is part of Ray-Optics Design Pro and runs on our servers: you choose variables and operands, and a damped-least-squares engine (Levenberg–Marquardt) iterates the variables to minimize the merit function — up to 60 iterations by default, hard-capped at 200, with the merit history reported so you can see the descent.
The merit function
The merit function is the entire statement of what you want. Each operand contributes residuals of the form (value − target); the merit is the sum of their squares, with each operand’s weight multiplying its total squared contribution (multi-sample operands like spot RMS are normalized by their sample count, so weights are comparable across operands). The optimizer descends this number and nothing else: a requirement not expressed as an operand has weight exactly zero, no matter how obviously the design “should” satisfy it.
The operand set:
| Operand | Measures | Notes |
|---|---|---|
spot_rms | RMS transverse ray error at a field and wavelength | hexapolar merit grid, ring count adjustable 1–6 (default 2 rings = 19 rays) |
efl / bfl | effective / back focal length, mm | scale anchors |
axial_color | BFL(F) − BFL(C), mm | needs both lines |
angular_mag | afocal angular magnification M (signed) | infinite conjugates only |
beam_ratio | afocal beam ratio A (signed) | infinite conjugates only |
collimation | exit marginal slope of the conjugate’s own bundle | the afocal anchor that also works at finite conjugates |
angular_spot | exit-slope spread about the bundle mean, radians | the afocal image-quality operand |
thickness_min / thickness_max | bounds on a center thickness or air gap, mm | one-sided |
edge_thickness_min | bound on a glass element’s edge thickness, mm | see below |
var_min / var_max | bounds on a variable itself | keeps a curvature or index physical |
Variables: any curvature, thickness, conic constant, a₄ coefficient, or — through the model glass below — a glass’s n_d and V_d.
What cannot be sent. The panel refuses to submit, naming the surface and the reason, a design with a toroid (two principal sections; the operands are single-axis quantities), a tilted surface, or a gap whose medium the optimizer cannot take: a constant index or a published-line table with no model-glass pair assigned to it, or one of your own materials. Assigning the pair (below) is the fix for the first two media; a tabulated material of your own has no continuous form for the optimizer to move.
Variables that cannot move. After a run, any variable whose column of the Jacobian was identically zero — no operand in the merit responded to it — is listed by name with the run’s warnings, left at its starting value. The optimizer solves for a step of exactly zero in that coordinate, and without the list it would report convergence with the variable untouched. The classic case is an image-distance variable in a merit with no spot or wavefront operand to focus; others are a curvature behind a stop that no operand samples, and an aspheric coefficient whose effect is below the finite-difference floor. The fix is a merit that samples what the variable affects.
Two rules the panel enforces rather than advises. First, every merit needs a scale anchor — a focal length, or for an afocal system an angular magnification, beam ratio or collimation operand. Without one, shrinking the whole lens shrinks every blur, and the optimizer will happily take that offer; the panel refuses to submit rather than spend a run proving it. Second, an afocal or image-less starting point with a spot_rms operand and no angular operand gets a warning: spot RMS at a finite plane measures the beam footprint of a collimated bundle, not blur, and it fights the anchors instead of helping them. efl is also the wrong operand near afocality — it has a pole there (the sign flips through ±∞), so its residual landscape is split into two basins the optimizer cannot cross; the angular operands are polynomial-smooth through that manifold, which is why they exist.
Edge thickness and sag
Sag is the depth of a surface at height h from the axis: for a sphere, z(h) = R − √(R² − h²); in general the full even-asphere formula of §2. Edge thickness of a glass element occupying surfaces g and g+1 is
— the center thickness, minus the front surface’s sag, plus the rear surface’s, both evaluated at the clear semi-aperture h. The edge_thickness_min operand bounds this quantity during optimization, and it exists because a center-thickness floor is not a monotone guarantee of the edge: sag depends on the very curvatures the optimizer is moving, so a design can satisfy every center bound in its merit and still come out with a negative edge — a lens shape no shop can make. The h it audits at is yours, frozen for the run: the tool seeds it from the design’s real-ray clear aperture but never solves for an aperture inside a residual. The operand is refused, by name, on air gaps, mirror surfaces and last surfaces — each of those would still produce a number, and the number would mean nothing.
Model glass and the snap
Real glasses come in a discrete catalog, and a discrete choice cannot be descended by gradients. The optimizer’s answer is the standard two-step: while glass is a variable, the medium becomes a model glass — a continuous (n_d, V_d) pair whose dispersion follows the normal-glass line — and the optimizer moves through that continuous plane freely. When the run ends, each model glass snaps to the nearest real catalog glass, nearest in the normalized distance
— one step in index “costs” the same as five steps in V-number, the classic glass-map scaling. What n_d and V_d mean, why the map’s upper left is nearly empty, and why a crown is paired with a flint, is worked through on a real doublet in Chromatic aberration and the achromatic doublet. The snap report then shows two numbers per glass: the merit at the model optimum and the merit re-optimized at the snapped real glass. The second is the only one you can buy. A model glass is a direction to search, not a destination, and the report is written so you cannot mistake the fiction for the deliverable.
Recipes
Five one-click merit builders — Balanced spot, Achromat, On-axis sharp, Afocal telescope / loupe, Beam expander / collimator — each assembled from the same operand table underneath, every generated row editable. A recipe is a starting point with the scale-anchor rule already satisfied, not a different engine.
13. Tolerancing
The Tolerance view answers the third question: not “what does this design do” (analysis) or “make it better” (optimization) but “how much can it change and still work” — the budget a fabricator is held to. Part of Ray-Optics Design Pro, server-side, and deliberately a separate view: you tolerance a design you have stopped optimizing.
The perturbation rows. Eight kinds, addressed to a surface, a gap, or an element (a maximal run of surfaces joined by glass — a cemented doublet perturbs as one element):
| Kind | Unit | What it models |
|---|---|---|
| Radius | fringes (or mm) | surface form error from the polishing test |
| Thickness | mm | a gap ground thick or thin; moves every vertex behind it |
| Index | ±Δn | melt index error; the whole curve shifts, the F−C split does not |
| V-number | % of the glass’s own V_d | melt dispersion error, base curve kept underneath |
| Surface wedge | arcmin | one surface rotated about its own vertex |
| Surface decenter | mm | one surface off-axis |
| Element tilt | arcmin | the whole element rotated about its front vertex — the exact rigid-body transform |
| Element decenter | mm | the whole element off-axis — a mounting error |
Fringes, the optical-shop convention (ISO 10110-5): N fringes of power is N·λ/2 of sag error at the clear semi-aperture h, applied as a curvature change δc = N·λ/h² at the test wavelength (default 546.07 nm, the e-line). A plane takes fringes natively; the alternative radius entry in millimeters is applied as the exact reciprocal 1/(R + δR), never a first-order approximation, and has no meaning on a plane. Two seedable tolerance classes fill a full budget in one click — Commercial (5 fringes, 0.1 mm thickness, ±0.001 index, 0.8 % V-number, 3′/0.1 mm element tilt/decenter, 1′/0.05 mm surface wedge/decenter) and Precision (1 fringe, 0.025 mm, ±0.0005, 0.5 %, 0.5′/0.02 mm, …) — and every seeded row stays editable. Mirror surfaces accept radius, thickness and index rows only: a tilt or decenter on a mirror is refused rather than approximated, because the signed-index mirror bookkeeping and the tilt formalism do not compose.
The criterion is the RMS spot radius over all bundles (fields × wavelengths), in mm — one number per perturbed system, the same real-ray machinery as §5. A prescription with no accessible paraxial image is refused by name; in particular an afocal system is refused, because a spot criterion on a collimated bundle measures the beam footprint, not blur, and a sensitivity table built on it would look authoritative and mean nothing. (An angular criterion for afocal systems is planned; until it ships the refusal is the honest answer.)
The compensator
Real assemblies are not built blind: after the elements are mounted, someone focuses. The tolerancer models exactly that one adjustment — with refocus on (the default), every perturbed trial re-solves the image distance before the criterion is evaluated, which is the adjustment every real assembly gets. Uncompensated numbers answer a different question — what happens with no adjustment at all — and the display never mixes the two: compensated results are compared against the refocused nominal and uncompensated against the raw one, because the raw nominal criterion normally sits above the entire compensated distribution, and drawing it across one would report that fabrication errors improved the design. The last air gap’s thickness row is the compensator’s own variable — with refocus on, its effect is nulled by construction, which makes that row a good way to see what the compensator is worth and a poor way to see anything else.
Sensitivity and Monte Carlo
Sensitivity perturbs one row at a time to its full ± tolerance and tables the criterion change, ranked — the row that dominates the budget is the row worth spending money on. Monte Carlo draws every row simultaneously per trial — 1000 trials by default, hard cap 2000 — and reports the criterion distribution: percentiles (P2, P10, median, P90, P98), a histogram, and, against a criterion threshold you set, the yield: the fraction of surviving trials at or below it. A trial whose perturbed system fails to trace at all is counted and reported separately — it joins neither side of the yield fraction, and the report says how many there were. Each row’s draw follows its distribution: the default tnorm2 is a truncated normal with σ = tolerance/2, truncated at ±2σ (so the tolerance is the hard edge and about 95 % of an untruncated normal would fall inside it); uniform draws flat across ±tolerance. Tilt and decenter rows draw independent meridional and sagittal components (the sensitivity table perturbs the meridional one). The seed is always echoed in the result — type it back in and the run reproduces trial for trial, which is what makes a published yield number checkable.
14. .zmx and CODE V (.seq) import and export
The tool reads and writes two lens file formats, so a design can arrive from or travel to other optics software: .zmx (Zemax OpticStudio’s sequential lens file format, widely used as an interchange format) and .seq (the sequence file of CODE V, a third-party optical design program). The readers and writers for both formats are this tool’s own, and they run in your browser: nothing is uploaded.
Format names and trademarks. File format names, including CODE V and Zemax, are the trademarks of their respective owners. Photizon Inc. is not affiliated with, endorsed by, sponsored by, or supported by Keysight Technologies, Inc., Synopsys, Inc., Ansys, Inc., or Zemax, LLC. Photizon’s readers and writers are independent implementations; no format owner has tested, certified, or endorsed them.
The .zmx format
Import. Import a .zmx file from the header’s Design menu (Design ▾ → Import .zmx…). The importer maps the sequential subset: surfaces, radii/curvatures, thicknesses, conics, even-asphere coefficients (a₄ through a₁₆ — orders above a₆ are kept and traced, shown read-only), units (MM/CM/IN/M, with every length and every asphere coefficient converted at its own power of the unit), glass names, wavelengths, fields (angles, or heights paired with the file’s object distance), the stop, semi-diameters, and the literal image distance the file states. Glass names resolve through a ladder: exact catalog match → your own materials → the legacy-alias table → unresolved. An unresolved name imports the surface and leaves the medium unbound — analyses that need the glass block and say so; the importer never substitutes air or a nearest-index guess. Every line of the file gets a fate in the import report (mapped, ignored, or rejected, with counts), so nothing is dropped silently — including the one legal-but-inexpressible case: a file with a finite object distance and angle-based fields imports at infinite conjugates with its angles kept, and the report says so on the object row.
Model glasses. A .zmx “model glass” entry (___BLANK) states an (n_d, V_d) pair whose dispersion formula is the vendor’s own and unpublished. With V_d = 0 — the format’s zero-dispersion sentinel — it maps exactly to a constant-index medium. With V_d ≠ 0 it binds nothing: the tool carries the numbers and re-exports the entry byte-identically, but will not evaluate a dispersion curve it cannot know. Reconstructing one would be fabrication.
Export. The export (Design ▾ → Export .zmx…) writes the current design as a .zmx file, client-side — nothing is uploaded. The writer is byte-deterministic (the same design always produces the identical file, with no timestamp), states its attribution in the file header, and is verified round-trip: a fresh export re-imports to the same design, and an imported file’s glass lines survive re-export byte-identically. Constant-index media export as the model-glass form above, annotated in the export report. What cannot be written honestly is refused with the reason, file withheld: tilted and folded rows (the format’s coordinate-break mapping is not something this tool can invent a reading of), media defined only as published-line tables, and non-finite values. A solved image distance is written as its solved value.
The .seq format
Import. Import a .seq file from the same menu (Design ▾ → Import CODE V (.seq)…). The importer maps the sequential subset: the title; the length unit (millimeters, centimeters or inches, with every length and every asphere coefficient converted at its own power of the unit); the entrance pupil diameter (an f-number or numerical aperture in the file is converted to a pupil diameter through the paraxial trace, and the report says so); wavelengths, which the format states in nanometers and the tool reads by moving the decimal point, so the micrometer value is exactly the decimal the file wrote; the reference wavelength; fields (angles, or object heights paired with a finite object distance); surfaces with their radii or curvatures, thicknesses and glass names; the stop; clear semi-diameters; conics and even-asphere coefficients (a₄ through a₂₀; orders above a₆ are kept and traced, shown read-only); mirrors; the file’s private glass catalog; the paraxial image solve; and a focus shift stated at the image surface, which is added to the last gap so the image plane sits where the file puts it. Every command in the file gets a fate in the same import report (mapped, ignored, or rejected, with the reason), listed under Starting design.
Radii or curvatures. A .seq file need not say whether its surface values are radii or curvatures (the RDM line). When the line is present it governs the whole file. When it is absent the tool reads curvatures, states that assumption in a note beside the imported design, and checks it: the file is read both ways and each reading gets a first-order trace. If the curvature reading gives a lens the file cannot describe (a marginal ray meeting a surface beyond that surface’s own radius, or an image plane where the beam is wider than at any powered surface), the note says so, prints the focal length under both readings, and tells you to add an RDM line and import again. Nothing is changed automatically.
Glass names, private catalogs and glass codes. A glass name in the format’s NAME_VENDOR form resolves through the same ladder as .zmx (exact catalog match → your own materials → the legacy-alias table → unresolved); the hyphen-less spelling the format uses (NBK7_SCHOTT) matches N-BK7 directly, and a vendor suffix that contradicts the record leaves the name unresolved rather than binding the wrong glass. A private-catalog block (PRV) becomes a constant-index medium when its table states one index at every wavelength and a published-line medium otherwise, evaluable at the table’s own wavelengths only (§3); a formula row in the block is carried by name, never evaluated, and re-exported with its block as written. A numeric glass code (500.700) encodes n_d and V_d, but the dispersion curve behind it is the vendor’s own and unpublished, so, like a .zmx model glass, it is carried and re-exported verbatim and binds nothing; analyses that need the glass block and name it.
Refused or dropped on import, by name. A file with no surface lines is refused as a whole (“No lens surfaces found in this file”). A tilted or decentered mirror refuses the whole file (“This file has a tilted or otherwise unsupported MIRROR, so nothing was imported”), because dropping a reflection would leave a different lens. A tilted or decentered refracting surface is dropped and listed with its command and value; so are cylinders, toroids, anamorphic surfaces, gratings, diffractive, user-defined and special surfaces, non-sequential ranges, and a surface line carrying both a glass and a reflect token. Image-height field types are not one of this tool’s field kinds, so the field list is left for you to set by hand. Zoom data, variable codes, weights and vignetting factors are ignored with the reason; a solve or pickup is ignored because the surface line carries the resolved value, which is what imports.
Export. The export (Design ▾ → Export CODE V (.seq)…) writes the current design as a .seq file, client-side. The file declares radius mode and millimeters, writes each radius as the value the tool holds (so a fresh export re-imports to the same design, bit for bit on every geometric field), writes wavelengths in nanometers by moving the decimal point, names the stop, and writes the image-distance solve as PIM with its solved value. Catalog glasses go out as names in the format’s spelling (NBK7_SCHOTT); the receiving software resolves a name against its own catalog and its own coefficients, so the index it shows may differ from this tool’s in the fourth decimal, and the export report says so. A constant-index medium is written as a private-catalog table stating the same index at every wavelength of the table, which is what a constant index is; the table is padded to at least six wavelengths so a reader that fits a curve through it has enough points. A published-line medium is written at its own lines only, and the recipient’s software interpolates between them. Your own material goes by name and as a private-catalog table of its index, evaluated by this tool at the file’s wavelengths and padded by the same ladder as a constant medium, but only inside the wavelength range your material states; when that range cannot hold six points the table carries what fits, and the report says so on that block. It comes back to you by name against your own library, and the recipient gets the table. A medium that arrived with another file’s private catalog leaves exactly as it arrived. The writer is byte-deterministic (the same design always produces the identical file) and states its attribution in a comment line at the top.
Refused, with the reason and no file: tilted, decentered and folded rows (no mapping to a CODE V tilt has been settled, and the importer refuses the same commands in the other direction); toroids and cylinders (no spelling of one that this tool can verify in an independent reader); a mirror whose medium differs from the medium in front of it (a CODE V REFL keeps the entry medium, so a coated-back element must be expressed by surface order); a private-catalog medium with no index at every wavelength on the table’s list (a table with a hole in it is not that medium); a design that needs both another file’s private catalog, carried verbatim, and a private-catalog row of its own (a .seq file carries one private catalog, and this tool will not rewrite someone else’s block to merge them); asphere terms of order a₂₂ and above (the format’s letter run ends at a₂₀, and so does this tool’s reader); and non-finite values. Every blocker is listed, never just the first. Not written, and said so in the report: computed apertures (only your explicit semi-diameters are), a model-glass marking from the optimizer (§12), configurations other than the one on screen (§10), and the temperature and pressure of the Thermal view (§11) — a viewing state, not part of the prescription, so the recipient’s software applies its own.
Two independent readers, and their limits. Both directions are checked against two open-source readers of this format, rayoptics 0.9.9 and optiland 0.6.2, on this tool’s own files and on fresh constructions; they have not been checked in CODE V itself. Each reader has limits of its own that a recipient may meet. rayoptics 0.9.9 cannot open a file naming 143 of this tool’s 399 catalog glasses (the hyphenated HOYA and CDGM names, SCHOTT’s P- glasses and OHARA S-LAL7, whose hyphen it cannot restore from the format’s spelling), nor a private-catalog table with fewer than four wavelengths. optiland 0.6.2 resolves 343 of the 399 names, treats the other 56 as air with a warning, and reads no private catalog at all, so a constant-index, published-line or custom medium arrives there as air. The export report names every medium it wrote into the private catalog.
15. The presets
Nine presets, each either a machine-verified teaching anchor or a historical design read from its primary source. Loading one reproduces its frozen first-order values to the dataset’s print precision; the patent presets carry their citations in the picker.
| Preset | What it is |
|---|---|
| Biconvex Singlet (teaching) | one N-BK7 element; axial color −0.8925 mm, the uncorrected baseline |
| Even-Asphere Singlet (asphere demo) | the same singlet with a₄/a₆ terms working |
| Cemented Achromat Doublet (aberration anchor) | N-BK7 + N-SF5, EFL 87.8784 mm, axial color +0.1715 mm; the startup design |
| Air-Spaced Triplet (anchor) | N-PSK53A crowns + E-FD7 flint |
| Folded Doublet (45° mirror) | the doublet with a flat fold — Class A: identical numbers, bent layout |
| Tessar f/5.5 (Rudolph 1902, US 721,240) | read digit-by-digit from the patent scan |
| Cooke Triplet (Taylor 1896 patent, rated f/6.5) | likewise; the design our camera-triplet guide starts from |
| Newtonian Paraboloid f/5 (mirror preset) | K = −1 primary, stigmatic on axis by construction |
| Classical Cassegrain f/8 (two-mirror preset) | secondary conic K₂ = −((m+1)/(m−1))², m the secondary magnification — stigmatic on axis by construction |
Patent radii are printed to three significant figures, so the reproduced focal lengths sit within 1–2 % of nominal — that is the patents’ own rounding, not trace error.
16. Design size, accounts, and Pro
Design size. A prescription may hold up to 6 editable surface rows anonymously and 12 with a free account; Ray-Optics Design Pro removes the cap. (Object and image are not rows; a standalone stop plane or fold counts.) The caps were sized so that the classical educational systems fit: a Cooke triplet is exactly 6 (its stop is designated on the flint’s rear surface, not on a separate row), a double Gauss with its stop row is 11. A preset above your cap asks for the sign-in it needs before loading — the Tessar, at 8 rows, is the one shipped preset above the anonymous limit. A share link, saved design or imported file above your cap is never refused: it opens read-only, fully analyzable, with editing available at the tier that fits it.
What needs an account. The editor, layout, first-order panel, presets (with their catalog glasses and full chromatic analysis), share links, and .zmx and .seq import are available to everyone. A free account adds the analysis views — spot diagrams, ray fans, Seidel, the wavefront/diffraction/field set, ghost images, and thermal analysis with coefficients you type — plus choosing different catalog glasses, multiple configurations, and .zmx and .seq export. Defining your own materials, saving designs to your library, and filling thermal coefficients from the catalog come with Plus. The optimizer and the tolerancer are Ray-Optics Design Pro and run server-side; every analysis view remains client-side at every tier.
18. How this tool is verified
Summarized because it is the reason to trust the numbers above. The verification record, check by check with its reference, its number and the difference, is on the Ray-Optics Designer benchmark page.
- Independent oracle. Ray coordinates, first-order data and third-order sums are cross-checked against an independent open-source raytracing package (rayoptics) on suites of fixed systems and on fresh systems constructed for each verification round — agreement at the 10⁻¹²–10⁻¹⁵ mm level, i.e. at double-precision round-off.
- Closed-form anchors. Systems with exact analytic answers are pinned at tolerance zero or machine epsilon: paraboloid and Cassegrain stigmatism (the conic conditions of §15), the thin-prism deviation tan((n − 1)θ), exact-afocal constructions built from dyadic rationals so the afocality is exact in floating point, the Seidel-to-ray-fan identity of §6.
- Glass data. Catalog records are cross-checked against an independent evaluation of the same vendor data at the last-ulp level; the alias deltas are computed from record pairs, never typed.
- Thermal data. The air-index constants reproduce Edlén’s own tabulated refractivities to 0.072 × 10⁻⁸, his print rounding; the full index chain reproduces SCHOTT’s own same-release dn/dT tables for five glasses at three spectral lines to 0.07 × 10⁻⁶/K, relative and absolute; the coefficient ordering was confirmed digit for digit on 118 SCHOTT records against the vendor’s datasheets; and an independent 50-digit evaluation of the whole chain agrees with the double-precision engine to within 5 units in the last place.
- Adversarial testing. Defects were planted in the engines on purpose (a sign flip in the Seidel sums, an approximate refraction, a skipped asphere iteration, a wrong ghost-flux form), and each had to be caught by a named check; the record keeps which check caught which defect. A check that cannot catch the bug it exists for is not a check.
- Interop.
.zmxand.seqfiles are verified as round-trip fixed points through this tool’s own readers and against independent readers (rayoptics for.zmx; rayoptics and optiland for.seq), on fresh constructions as well as fixed files — which catches the failure mode a same-codebase round-trip cannot: a writer and reader sharing one misunderstanding. - The patents. The Tessar and Cooke prescriptions were read from the patent scans at native resolution, with the era’s sign conventions resolved by machine vote: the reading that reproduces the patent’s stated focal length is the right one.
19. What this page does not claim
- Numerical precision is not design truth. The trace is exact to round-off for the prescription you typed; nothing checks that the prescription describes the lens in your hand.
- Sequential only. Light visits surfaces in listed order. The ghost view covers exactly one disobedience (double bounces); scattered light, multiple ghost orders and true non-sequential transport belong to the Illumination Analyzer.
- Scalar diffraction, monochromatic pupils. PSF/MTF come from the scalar pupil function; no polarization, no vector high-NA model, and polychromatic results are incoherent sums. Interference and thin-film coating physics live in the Thin-Film Coating Simulator.
- Seidel is third order. The sums predict; the real rays decide. The fan labels state their fit shares precisely so the label never claims more than the fit.
- Glass data has a vintage. Catalog records, thermal coefficients included, are reproduced from dated releases (§3, §11); verify against the vendor’s current datasheet before fabrication. Melt-to-melt variation is exactly what the tolerancer’s index/V-number rows are for.
- The tolerance model is a model. Truncated-normal and uniform draws at the tolerances you typed — not your shop’s actual process distributions. The seed makes every yield number reproducible; it does not make it a guarantee.
- The optimizer is local. Damped least squares descends from your starting point to a nearby minimum. It will not find a different design form, and a snapped glass is re-optimized locally, not globally.
.zmxand.seqcoverage is a subset, and says so. For both formats, every line’s fate is in the import report, and what cannot be exported honestly is refused with the reason. Model glasses and numeric glass codes with unpublished dispersion are carried, never evaluated. A glass name written to a.seqfile is resolved by the receiving software against its own catalog.- Thermal analysis models index and expansion, not the mount. Indices follow the published coefficients and every length follows a linear expansion with one housing coefficient; stress birefringence, gradients across an element, mount-induced deformation, humidity and sealed cavities are not modeled, aspheric coefficients are not rescaled, and where the detector sits is a fact about your camera, not about the lens (§11).
Try it: the Ray-Optics Designer — load the doublet preset and check §7’s axial color against the panel yourself.
References
- W. T. Welford, Aberrations of Optical Systems, Adam Hilger (1986) — Seidel sums, aspheric increments, the n → −n mirror bookkeeping. [textbook]
- M. Born, E. Wolf, Principles of Optics, 7th ed., Cambridge (1999) — the Airy pattern, diffraction imaging, and the Rayleigh quarter-wave rule (ch. 9). [textbook]
- R. J. Noll, “Zernike polynomials and atmospheric turbulence,” J. Opt. Soc. Am. 66, 207 (1976) — the Zernike indexing.
- V. N. Mahajan, “Strehl ratio for primary aberrations: some analytical results for circular and annular pupils,” J. Opt. Soc. Am. 71, 75 (1981) — the Strehl convention with obstruction.
- J. C. Wyant, K. Creath, “Basic Wavefront Aberration Theory for Optical Metrology,” in Applied Optics and Optical Engineering XI, Academic Press (1992) — OPD sign convention.
- K. Levenberg, Quart. Appl. Math. 2, 164 (1944); D. W. Marquardt, J. SIAM 11, 431 (1963) — damped least squares.
- ISO 10110-5, Optics and photonics — Preparation of drawings for optical elements and systems — Part 5: Surface form tolerances — fringes of power.
- E. Fest, Stray Light Analysis and Control, SPIE Press (2013) — ghost-path analysis context. [textbook]
- RefractiveIndex.INFO database, CC0-licensed subset — the glass catalog records, with per-glass vintages shown in the tool.
- US Patent 721,240 (P. Rudolph, 1902); US Patent 568,052 (H. D. Taylor, 1896) — the two historical presets.
- B. Edlén, “The refractive index of air,” Metrologia 2, 71 (1966) — the index of air: eq. (1) for standard-air dispersion and eq. (12) for the density scaling.
- F. E. Jones, “The refractivity of air,” J. Res. Natl. Bur. Stand. 86, 27 (1981) — the second published statement the air constants were checked against.
- K. P. Birch, M. J. Downs, “An updated Edlén equation for the refractive index of air,” Metrologia 30, 155 (1993) — the modern revision, noted and not substituted.
- SCHOTT, TIE-19: Temperature Coefficient of the Refractive Index, Technical Information, August 2023 — the six-coefficient index model (eq. 3) and its stated validity range.
- ISO 1:2022, Geometrical product specifications (GPS) — Standard reference temperature for the specification of geometrical and dimensional properties — the 20 °C standard reference temperature (clause 4).