confocal op• Data kinds: pairs → table
• Call: import fullseye as fs; fs.ledger.chromatic_confocal_peaks(spectrum, reference=None, max_peaks: 'int' = 2, mode: 'str' = 'gaussian', min_prominence: 'float' = 0.15, subtract_background: 'bool' = True) -> 'list' (implementation को सीधे call करना हो तो import chromconf; chromconf.chromatic_confocal_peaks(spectrum, reference=None, max_peaks: 'int' = 2, mode: 'str' = 'gaussian', min_prominence: 'float' = 0.15, subtract_background: 'bool' = True) -> 'list', registry से लेना हो तो opsoptics.get("chromatic_confocal_peaks"))
लौटे spectrum की peak wavelengths (एक, या पारदर्शी वस्तु की आगे-पीछे की दो) को एक bin से सूक्ष्म शुद्धता से निकालता है।
> नीचे का विस्तृत विवरण मूल text में है — सारांश और headings का अनुवाद हो चुका है।
reference: 白色参照(鏡を測定範囲いっぱいに動かして取った光源 × 分光器の応答、pairs)。与えると
スペクトルをこれで割ってから探す —— 光源のむらがピークを引っ張る偏りの補正。
max_peaks: 返すピークの最大数(大きい順に取り、波長順に並べ直す)。
mode: "gaussian"(3 点の対数の放物線)/ "parabolic"(3 点の放物線)/
"centroid"(半値より上の連続区間の重心)/ "peak"(最大のビン)。sinc² の応答に対して
どれが偏るかは PoC が測る(ガウスの式は sinc² には厳密でない)。
min_prominence: ピークと認める突出(scipy.signal.find_peaks の prominence)の、最大値に対する割合。subtract_background: 中央値を引いて 0 で切ってから探す。
返り値: ピークごとの dict の列(波長順): wavelength_nm / amplitude / fwhm_nm / bin。Raises ValueError: pairs でない・波長が等間隔でない・負の値、参照が帯域を覆わないか 0 を含む、ピークが 1 本も無い(平らなスペクトル)、ピークが最初か最後のビン(較正の範囲外)、頂上が 3 ビン以上平ら(飽和)、未知の mode。
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।
• शून्य से भाग और उससे जुड़े मामलों को नाम लेकर अस्वीकार किया जाता है: 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 हुआ" और "उत्तर अनंत है" अलग-अलग दावे हैं, इसलिए पहले को दूसरे का चेहरा पहनाकर नहीं लौटाया जाता।
• 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
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_readout · 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.