chromatic_confocal_spectrum — OPTICS confocal op

• Datenarten: table → pairs

• Aufruf: import fullseye as fs; fs.ledger.chromatic_confocal_spectrum(probe, surface_um: 'float' = 500.0, stack=(), substrate='AL', source=None, detector=None, wl_step_nm: 'float' = 0.5, tilt_deg: 'float' = 0.0, roughness_nm: 'float' = 0.0, spectrometer_fwhm_nm: 'float' = 0.0, photons_per_peak: 'float' = 0.0, read_noise: 'float' = 0.0, seed: 'int' = 0) -> 'np.ndarray' (die Implementierung direkt: import chromconf; chromconf.chromatic_confocal_spectrum(probe, surface_um: 'float' = 500.0, stack=(), substrate='AL', source=None, detector=None, wl_step_nm: 'float' = 0.5, tilt_deg: 'float' = 0.0, roughness_nm: 'float' = 0.0, spectrometer_fwhm_nm: 'float' = 0.0, photons_per_peak: 'float' = 0.0, read_noise: 'float' = 0.0, seed: 'int' = 0) -> 'np.ndarray'; aus dem Register: opsoptics.get("chromatic_confocal_spectrum"))

Verwendung

Synthetisiert das zurückkehrende Spektrum eines chromatisch-konfokalen Sensors aus Oberflächenlage und Schichtaufbau (Vorwärtsmodell).

> Die ausführliche Beschreibung unten ist der Originaltext — Zusammenfassung und Überschriften sind übersetzt.

戻りスペクトル S(λ) = 光源(λ) × 検出器(λ) × Σ_界面 [反射率 × 往復の透過 × 傾き・粗さ × 共焦点の軸応答(界面の見かけの位置 − 近軸焦点(λ); λ, NA(λ), LSA(λ))]、それを分光器の応答(ガウス、FWHM)でぼかし、光子のショット雑音と読出し雑音を足す。

probe: chromatic_confocal_probe の dict。波長の格子は較正の帯域を *wl_step_nm* で刻む。

surface_um: 最上面の位置(較正表の z、µm)。

stack: 最上面の下の透明な層の列 ((材料, 厚さ µm), ...)。材料は材料表の名前(GLASS_CROWN /

"PMMA" / "WATER" …)か屈折率の数。k があれば往復の吸収 exp(−4πk·2t/λ) が入る。

substrate: 最下層の下の媒質(材料表の名前 —— "AL" / "AU" / "CU" / "SI" … —— か数、

空気なら 1.0)。界面の反射率は両側の複素屈折率から垂直入射の Fresnel |(m₁ − m₂)/(m₁ + m₂)|²。

source / detector: 光源の分光分布と検出器の分光感度(pairs、帯域を覆うこと)。None は平坦。

tilt_deg: 面の傾き(全界面に共通)。鏡面成分は瞳との重なりの割合だけ戻る(sin 2θ ≥ 2NA で 0)。

roughness_nm: 面の粗さ σ(RMS)。最上面の鏡面成分は exp(−(4πσ/λ)²)、残りは Lambert で NA² だけ

戻り、点物体の応答で広がる。

spectrometer_fwhm_nm: 分光器の線幅(0 は理想)。

photons_per_peak: 0 なら雑音なしの期待値(最大を 1 に規格化)。正なら最大が平均この光子数になる

ように拡大し、Poisson のショット雑音を足す。read_noise: 読出し雑音(光子数の単位の σ)。

seed: 雑音の乱数の種(整数)。

返り値: pairs(λ [nm], 強度)。負は 0 に切る(分光器は負の光を読まない)。Raises ValueError: probe の形の誤り、帯域を覆わない source / detector、層の厚さ ≤ 0、材料表の区間外の波長、どの界面にも焦点が合わない(全部の界面が較正の範囲外)。

Familienweiter Eingabevertrag (fail-closed)

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|.

Ausführlicher Anwendungsleitfaden

• Leitfaden zur Familie optics_imaging

Referenzen (Beispieldaten, Literatur)

• 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.

Ausführbare Beispiele (verifizierte Samples, die diesen Operator wirklich aufrufen)

• poc_chromatic_confocal — py -3.11 examples/poc_chromatic_confocal.py

Typkompatible Folge-Operatoren (nehmen pairs als Eingabe)

mtf50 · energy_to_photons · spectral_product · spectral_integral · spectral_stats · kubelka_munk_reflectance · hyperspectral_capture · film_thickness_fft

Gleiche Kategorie (confocal)

chromatic_confocal_probe · confocal_axial_response · chromatic_confocal_peaks · chromatic_confocal_readout · chromatic_confocal_limits


*Provenance: chromconf.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.