illumination op• Datenarten: keine → table (ein Operator, der allein durch seine Argumente bestimmt ist — er nimmt kein Bild und keine Daten entgegen)
• Aufruf: import fullseye as fs; fs.ledger.illumination_train(kind='kohler', source_mm=2.0, collector_f_mm=20.0, condenser_f_mm=10.0, field_stop_mm=6.0, aperture_stop_mm=6.0, source_distance_mm=30.0) (die Implementierung direkt: import illumdesign; illumdesign.illumination_train(kind='kohler', source_mm=2.0, collector_f_mm=20.0, condenser_f_mm=10.0, field_stop_mm=6.0, aperture_stop_mm=6.0, source_distance_mm=30.0); aus dem Register: opsoptics.get("illumination_train"))
Ein Mikroskop-Beleuchtungsstrahlengang (kohler oder critical), paraxial angeordnet (table).
> Die ausführliche Beschreibung unten ist der Originaltext — Zusammenfassung und Überschriften sind übersetzt.
Planes along the axis (thin lenses, distances in mm, z = 0 at the source):
• the source (a disc of diameter *source_mm*) at z = 0;
• the collector (focal length *collector_f_mm*) at z = *source_distance_mm*, with the field stop (diameter *field_stop_mm*) right at it; it images the source to z_A;
• the aperture stop (diameter *aperture_stop_mm*) at z_A, on the intermediate source image;
• the condenser (focal length *condenser_f_mm*):
• kohler: one focal length behind the aperture stop (the stop sits in its front focal plane, so the source is imaged to infinity), and the specimen where the condenser images the field stop;
• critical: two focal lengths behind the source image (a 1:1 relay), and the specimen where the condenser images the source. The aperture stop then sits at the source image (it trims the source), the field stop is in a pupil-like plane.
Returns the element list (elements: dicts with type lens / stop / source / specimen, z_mm, f_mm or radius_mm) that illumination_field traces, plus the conjugate bookkeeping read off the ABCD matrices: source_to_specimen and field_stop_to_specimen (A, B, C, D — B = 0 means "imaged onto the specimen"), source_magnification / field_stop_magnification (A when B = 0, else None), field_diameter_mm (the lit field: field stop x |M| for Koehler, source x |M| for critical), illumination_na (on-axis marginal ray: the smallest stop-limited angle), source_image_z_mm.
Raises ValueError: unknown kind, non-positive sizes or focal lengths, a source closer than the collector focal length (no real intermediate image), a specimen that would be virtual.
Jeder optics-Operator prüft seine Eingabe vor der Berechnung (nichts rutscht stillschweigend durch):
• Einheiten stecken im Argumentnamen — _mm / _um / _deg / _mrad. Eine Verwechslung von mm und µm stürzt nicht ab, sondern liefert eine plausibel aussehende falsche Antwort; der Name verhindert das. Aus der Größenordnung wird nie auf die Einheit geschlossen.
• Strings lösen ValueError aus — float('50') gelingt, sodass ein ungeparster Konfigurationswert als Länge durchrutschen würde (gemessen: thin_lens('50', '200') lieferte plausible 66,667 mm). bool wird als implizite Hochstufung True == 1 ebenfalls abgelehnt.
• complex / Masked Arrays lösen ValueError aus (nur reelle Slots; das stille Verwerfen des Imaginärteils bzw. Abstreifen der Maske wird abgelehnt). NaN/Inf löst bei jeder Eingabe ValueError aus.
• Division durch null und Verwandtes wird namentlich abgelehnt: Brennweite 0, Krümmungsradius 0, Brechzahl <= 0, undurchlässige Blende (alles 0, die Normierung wird 0/0), PSF mit Summe <= 0, Stokes-Vektor mit S0 = 0 und ein Objekt im vorderen Brennpunkt (Bild im Unendlichen).
• Nur zwei Operatoren liefern einen nicht-endlichen Wert, und beide halten das vertraglich fest: depth_of_field liefert jenseits der hyperfokalen Distanz far_mm = inf (genau das bedeutet die hyperfokale Distanz), und gaussian_beam liefert an der Taille wavefront_radius_mm = inf (der Krümmungsradius einer ebenen Wellenfront). Beide liefern zusätzlich einen endlichen Partner (far_is_infinite / curvature_per_mm). Jedes andere stille NaN/Inf wird intern erkannt und löst ValueError aus — "float64 ist übergelaufen" und "die Antwort ist unendlich" sind verschiedene Aussagen; die erste wird nie im Gewand der zweiten geliefert.
• Größenobergrenzen: erzeugte Gitter durch optics.MAX_GRID (4096), übergebene Felder/PSFs/Blenden durch optics.MAX_FIELD_ELEMENTS (2^24), ABCD-Elementketten durch optics.MAX_SYSTEM_ELEMENTS (1024), Zernike durch MAX_ZERNIKE_TERMS (512) / MAX_ZERNIKE_ORDER (40) / MAX_ZERNIKE_BASIS (2^25). Damit werden Pfade fail-closed geschlossen, in denen ein kleines Argument eine riesige interne Allokation auslöst (gemessen: n_max=40 × 4096² braucht 108 GB).
• Physikalisch unmögliche Zustände werden ebenfalls abgelehnt: Stokes-Vektor mit Polarisationsgrad > 1, negative Transmission, negative Intensität und ungültige Zernike-Indizes wie ungerades n-|m|.
• Leitfaden zur Familie optics_imaging
• mv_illumination_practice — Beleuchtung in der Praxis — Wellenlänge, Polarisation, Ansteuerung, Fremdlicht, Sicherheit
• Katalog der Beispieldaten (Download-URLs / Lizenzen) — 2-D nutzt skimage.data (BSD/Public Domain) plus synthetische Bilder, 3-D nennt Download-URLs echter Datenquellen (Stanford, PDS, …).
• Herkunft und Literatur der Operatoren — die Quellen der Forschung/Verfahren, auf denen diese Operatorfamilie beruht.
• Der kanonische Algorithmus (Autor, Jahr) und seine Anwendungen stehen im Familienleitfaden oben.
• poc_spectrometer_illumination — py -3.11 examples/poc_spectrometer_illumination.py
table als Eingabe)abcd_matrix · wavefront_stats · sfr_from_edge · paraxial_trace · seidel_coefficients · spot_stats · tolerance_analysis · wavefront_from_opd
illumination)light_source · irradiance_map · illumination_uniformity · defect_contrast · lighting_sweep · illumination_design · solid_angle_light · solid_angle_boundaries
*Provenance: illumdesign.py — OPTICS Operator-Registry. Diese Notiz wird von tools/opdocs.py md erzeugt (nicht von Hand bearbeiten).*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.