Optical Prescription Report
Optiland features a powerful, automated Prescription Report Generator that automatically extracts and formats system properties, surface geometry, materials, and aberrations into standard professional reports.
Optional Dependencies
To use all rendering options of the prescription generator, you must install the optional dependencies: - All Features (Console and PDF): pip install optiland[prescription] - Console-only (Requires rich): pip install optiland[prescription-console] - PDF-only (Requires reportlab): pip install optiland[prescription-pdf]
[1]:
from optiland.samples.objectives import CookeTriplet
from optiland.prescription import Prescription
Loading a Sample System
Let’s load the classic Cooke Triplet objective lens sample system.
[2]:
lens = CookeTriplet()
Printing the Prescription to the Console
To view the report instantly inside your console or terminal, use the .view() method. This utilizes the rich library to draw clean, beautifully formatted tables and sections.
[3]:
prescription = Prescription(lens)
prescription.view()
╭─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │ Optical Prescription — Unnamed System │ ╰──────────────────────────────────────── Generated: 2026-05-20 15:35 UTC ────────────────────────────────────────╯
───────────────────────────────────────────────── System Overview ─────────────────────────────────────────────────
Name (unnamed) Surfaces 6 Stop Surface 4.0000 Aperture Type EPDAperture Aperture Value 10.0000 Object Distance ∞ Image Distance 42.2078
Wavelengths
# Wavelength (µm) Primary ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1 0.4800 2 0.5500 ✓ 3 0.6500
Fields
# Type X Y Weight ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1 AngleField 0.0000 0.0000 1.0000 2 AngleField 0.0000 14.0000 1.0000 3 AngleField 0.0000 20.0000 1.0000
───────────────────────────────────────────── First-Order Properties ──────────────────────────────────────────────
Effective Focal Length (EFL) 49.9998 Front Focal Length (FFL) -49.9998 Back Focal Length (BFL) 0.2071 Front Principal Plane (P1) 12.6541 Back Principal Plane (P2) -49.7927 Front Nodal Plane (N1) 12.6541 Back Nodal Plane (N2) -49.7927 Image-Space F/# 5.0000 Entrance Pupil Diameter 10.0000 Entrance Pupil Location 11.5122 Exit Pupil Diameter 10.2337 Exit Pupil Location -50.9613 Transverse Magnification -0.0000 Lagrange Invariant -1.8199
───────────────────────────────────────────── Surface Data — Geometry ─────────────────────────────────────────────
S# Type Radius (mm) Thickness (mm) Conic Stop Comment ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 0 Plane ∞ ∞ — 1 standard 22.0136 3.2590 0.0000 2 standard -435.7604 6.0076 0.0000 3 standard -22.2133 1.0000 0.0000 4 standard 20.2919 4.7504 0.0000 ✓ 5 standard 79.6836 2.9521 0.0000 6 standard -18.3953 42.2078 0.0000 7 standard ∞ 0.0000 —
──────────────────────────────────────────── Surface Data — Materials ─────────────────────────────────────────────
S# Material nd Vd Semi-Diameter (mm) Coating ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 0 Air 1.0000 — — — 1 SK16 1.6204 60.2809 — — 2 Air 1.0000 — — — 3 F2 1.6200 36.3665 — — 4 Air 1.0000 — — — 5 SK16 1.6204 60.2809 — — 6 Air 1.0000 — — — 7 Air 1.0000 — — —
───────────────────────────────────────── Seidel Aberration Coefficients ──────────────────────────────────────────
S# SI (Sph) SII (Coma) SIII (Astig) SIV (Petz) SV (Dist) CL (LCA) CT (TCA) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1 -0.013855 -0.010591 -0.008096 -0.057727 -0.050318 -0.014412 -0.011017 2 -0.011256 0.035011 -0.108897 -0.002916 0.347781 -0.010088 0.031376 3 0.052115 -0.081389 0.127106 0.057268 -0.287939 0.031745 -0.049577 4 0.024135 0.043874 0.079756 0.062690 0.258946 0.021172 0.038488 5 -0.004080 -0.016132 -0.063784 -0.015948 -0.315255 -0.006189 -0.024472 6 -0.054020 0.030462 -0.017178 -0.069082 0.048643 -0.017462 0.009847 Total -0.006960 0.001235 0.008907 -0.025716 0.001859 0.004767 -0.005356
Explaining Report Sections
By default, the report generates five standard sections: 1. System Overview: General details, wavelengths, and field definitions. 2. First-Order Properties: Paraxial parameters (EFL, F-Number, magnification, pupil parameters). 3. Surface Data - Geometry: Radii of curvature, thicknesses, stop designations, and conic constants. 4. Surface Data - Materials: Material names and corresponding refractive indices (\(n_d\), \(V_d\)). 5. Seidel Aberration Coefficients: Monochromatic and chromatic Seidel aberrations per surface and system totals.
Customizing Sections
You can customize and re-order the sections included in your report by passing a list of section instances to the Prescription constructor:
[4]:
from optiland.prescription.sections import FirstOrderSection, SurfaceGeometryTableSection
# Create a prescription containing only first-order and surface geometry data
custom_sections = [
FirstOrderSection(),
SurfaceGeometryTableSection()
]
custom_prescription = Prescription(lens, sections=custom_sections)
custom_prescription.view()
╭─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╮ │ Optical Prescription — Unnamed System │ ╰──────────────────────────────────────── Generated: 2026-05-20 15:35 UTC ────────────────────────────────────────╯
───────────────────────────────────────────── First-Order Properties ──────────────────────────────────────────────
Effective Focal Length (EFL) 49.9998 Front Focal Length (FFL) -49.9998 Back Focal Length (BFL) 0.2071 Front Principal Plane (P1) 12.6541 Back Principal Plane (P2) -49.7927 Front Nodal Plane (N1) 12.6541 Back Nodal Plane (N2) -49.7927 Image-Space F/# 5.0000 Entrance Pupil Diameter 10.0000 Entrance Pupil Location 11.5122 Exit Pupil Diameter 10.2337 Exit Pupil Location -50.9613 Transverse Magnification -0.0000 Lagrange Invariant -1.8199
───────────────────────────────────────────── Surface Data — Geometry ─────────────────────────────────────────────
S# Type Radius (mm) Thickness (mm) Conic Stop Comment ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 0 Plane ∞ ∞ — 1 standard 22.0136 3.2590 0.0000 2 standard -435.7604 6.0076 0.0000 3 standard -22.2133 1.0000 0.0000 4 standard 20.2919 4.7504 0.0000 ✓ 5 standard 79.6836 2.9521 0.0000 6 standard -18.3953 42.2078 0.0000 7 standard ∞ 0.0000 —
Saving and Exporting Reports
You can save the report to a file using the .save(path) method. The file output format is automatically inferred from the file extension: - Plain Text (``.txt``, ``.log``, etc.): Renders standard plain-text tables. - PDF (``.pdf``): Generates a professional PDF document.
[5]:
# Export as plain-text
prescription.save("cooke_triplet_prescription.txt")
# Export as a formatted PDF document
prescription.save("cooke_triplet_prescription.pdf")