confocal op• Data kinds: table × table → table
• Call: import fullseye as fs; fs.ledger.chromatic_confocal_readout(peaks, probe, layer_material=None) -> 'dict' (implementation को सीधे call करना हो तो import chromconf; chromconf.chromatic_confocal_readout(peaks, probe, layer_material=None) -> 'dict', registry से लेना हो तो opsoptics.get("chromatic_confocal_readout"))
• GPU: नहीं (केवल CPU reference implementation)
peak wavelengths को calibration table से ऊँचाई (z) में बदलता है, और दो peaks हों तो पारदर्शी परत की मोटाई देता है।
> नीचे का विस्तृत विवरण मूल text में है — सारांश और headings का अनुवाद हो चुका है।
peaks: chromatic_confocal_peaks の返り値(dict の列)か、波長 [nm] の列。
probe: chromatic_confocal_probe の dict。z は較正表を 3 次スプラインで逆引き(単調なので一意)。
layer_material: 上の 2 ピークのあいだの層の材料(材料表の名前か屈折率の数)。与えると厚さを返す:
• thickness_paraxial_um = n(λ₂) × (z₂ − z₁) —— 見かけの厚さ × 屈折率(近軸)。λ₂ は下の面のピーク波長(下の面に焦点を結んでいるのはこの色なので、群屈折率でなく位相屈折率)。
• thickness_um = n(λ₂)(z₂ − z₁) / (1 − n·g/2)、g = 1/n − cos α/√(n² − sin²α)。z と LSA は空気中で鏡を動かした実空間座標であり、平板の LSA t·g の半分だけ応答ピークが動く。NA は λ₂ の較正の NA。
返り値: heights_um(各ピークの z、遠いほど大)/ wavelengths_nm / 層を指定したとき apparent_thickness_um / n_layer / na / thickness_paraxial_um / thickness_um。Raises ValueError: 空のピーク列、較正の帯域の外の波長、層を指定したのにピークが 2 本でない(薄すぎる膜は 1 本に潰れる —— 厚さを当て推量しない)。
optics के सभी ops गणना से पहले input की जाँच करते हैं (कुछ भी चुपचाप पास नहीं होता):
• Unit argument के नाम में ही लिखी होती है — _mm / _um / _deg / _mrad। mm और µm की गड़बड़ी crash नहीं करती, बल्कि "सही दिखने वाला पर गलत उत्तर" देती है, इसलिए नाम से इसे रोका जाता है। मान के आकार से unit का अनुमान बिल्कुल नहीं लगाया जाता।
• String से ValueError — float('50') सफल हो जाता है, इसलिए बिना parse किया config value length के रूप में निकल जाता (मापा गया: thin_lens('50', '200') सही दिखने वाला 66.667 mm लौटा रहा था)। bool को भी True == 1 वाले implicit promotion के रूप में अस्वीकार किया जाता है।
• complex / masked array से ValueError (केवल real-valued slots; imaginary part को चुपचाप छोड़ना या mask हटाना अस्वीकार)। हर input पर NaN/Inf से ValueError। घोषित अपवाद: bottle_fit_from_pattern का u_map न मापे जा सके पिक्सेल को NaN के रूप में लेता है (अनंत अब भी अस्वीकार)।
• शून्य से भाग और उससे जुड़े मामलों को नाम लेकर अस्वीकार किया जाता है: focal length 0, radius of curvature 0, refractive index <= 0, पूरी तरह opaque aperture (सब 0, इसलिए normalisation 0/0), ऐसा PSF जिसका योग <= 0 हो, S0 = 0 वाला Stokes vector, और front focal point पर रखा object (image अनंत पर)।
• केवल 2 ops non-finite value लौटाते हैं, और वह भी contract के रूप में लिखा हुआ: depth_of_field hyperfocal distance से आगे far_mm = inf (hyperfocal distance की परिभाषा यही है) और gaussian_beam waist पर wavefront_radius_mm = inf (plane wavefront की radius of curvature)। दोनों साथ में एक finite साथी (far_is_infinite / curvature_per_mm) भी लौटाते हैं। इसके अलावा कोई भी चुपचाप आया NaN/Inf अंदर ही पकड़ा जाता है और ValueError देता है — "float64 overflow हुआ" और "उत्तर अनंत है" अलग-अलग दावे हैं, इसलिए पहले को दूसरे का चेहरा पहनाकर नहीं लौटाया जाता। घोषित अपवाद: bottle_background_map जिन पिक्सेल की किरण अनुपयोगी है (पूर्ण आंतरिक परावर्तन आदि) उनके लिए u_mm में NaN लौटाता है, साथ में valid मास्क और गिनती भी।
• Size की सीमा: generate होने वाले grid के लिए optics.MAX_GRID (4096), दिए गए field/PSF/aperture के लिए optics.MAX_FIELD_ELEMENTS (2^24), ABCD element chain के लिए optics.MAX_SYSTEM_ELEMENTS (1024), Zernike के लिए MAX_ZERNIKE_TERMS (512) / MAX_ZERNIKE_ORDER (40) / MAX_ZERNIKE_BASIS (2^25)। छोटे argument से बहुत बड़ा internal allocation होने वाले रास्तों (मापा गया: n_max=40 × 4096² पर 108 GB) को fail-closed ढंग से बंद किया गया है।
• भौतिक रूप से असंभव states भी अस्वीकार: degree of polarisation > 1 वाला Stokes vector, ऋणात्मक transmittance, ऋणात्मक intensity, और n-|m| odd जैसे अमान्य Zernike indices।
• Sample data catalog (DL URL / license) — 2-D के लिए skimage.data (BSD/public) + synthetic, 3-D के लिए real data sources (Stanford/PDS आदि) के DL URL।
• Operators का स्रोत और संदर्भ — इस op family के मूल research/methods के स्रोत।
• Algorithm का मानक स्रोत (लेखक, वर्ष) और उपयोग ऊपर की family usage guide में दिए गए हैं।
• poc_chromatic_confocal — py -3.11 examples/poc_chromatic_confocal.py
• poc_spectrometer_illumination — py -3.11 examples/poc_spectrometer_illumination.py
table को input के रूप में लेते हैं)abcd_matrix · wavefront_stats · sfr_from_edge · paraxial_trace · seidel_coefficients · spot_stats · tolerance_analysis · wavefront_from_opd
confocal)chromatic_confocal_probe · confocal_axial_response · chromatic_confocal_spectrum · chromatic_confocal_peaks · chromatic_confocal_limits
*Provenance: chromconf.py — OPTICS operator registry. यह per-op note tools/opdocs.py md से अपने-आप generate होता है (हाथ से edit न करें)।*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.