oct op• Data kinds: table → table
• Call: import fullseye as fs; fs.ledger.oct_layer_thickness(ascan, n_group=None, n_interfaces=None, min_snr_db=12.0, z_range_um=None, min_separation_um=None, min_separation_fwhm=1.4, min_prominence_db=0.0, dynamic_range_db=80.0) (implementation को सीधे call करना हो तो import octscan; octscan.oct_layer_thickness(ascan, n_group=None, n_interfaces=None, min_snr_db=12.0, z_range_um=None, min_separation_um=None, min_separation_fwhm=1.4, min_prominence_db=0.0, dynamic_range_db=80.0), registry से लेना हो तो opsoptics.get("oct_layer_thickness"))
A-scan के interface peaks → layer की optical और physical मोटाई (table)। interfaces अलग न हो सकें या दिखें नहीं तो इनकार करता है।
> नीचे का विस्तृत विवरण मूल text में है — सारांश और headings का अनुवाद हो चुका है।
ピーク: 雑音の rms(oct_ascan の noise_sigma)の min_snr_db 上を超える極大(dsp.find_peaks、間隔 ≥ min_separation_um、既定は軸分解能 0.44 λ0²/Δλ の 0.8 倍)を、n_interfaces 本(強い順に選んで深さ順に並べる)。位置は dsp.peak_subbin(mode="gauss")(ガウスの頂点 = 対数放物線で厳密)。光学厚 = 隣の界面の光路の差、物理厚 = 光学厚 / n_g。n_group は層ごとの群屈折率(数・materials の名前・{"n", "n_group"} の模型)、None なら光学厚だけ。
拒否(ValueError): 見えた界面が n_interfaces より少ない(薄すぎて 2 本が 1 本に融合した / 散乱で下の界面が雑音に沈んだ / 深さ範囲の外)、または隣の界面の間隔が点像の幅(oct_ascan の psf_fwhm_um、窓込み) の min_separation_fwhm 倍より狭い —— 2 つの点像が重なると互いの頂点を引き寄せ、干渉で形も歪むので、分離して見えても厚さは偏る(1.4 倍で偏りが 1 % を切る —— PoC poc_industrial_oct の掃引)。dynamic_range_db: 探す範囲の最大のピークよりこれ以上弱い極大は数えない(窓の副ローブと数値の床 —— 雑音の無い合成や SNR が 100 dB を超える強い面では、雑音の床の上に副ローブが「界面」として立つ)。min_prominence_db > 0 なら、ピークが周りの谷から立つ高さ(scipy.signal.peak_prominences、探す範囲の中だけで数える)がそれ未満のものを界面と数えない —— 強く散乱する層(白の塗装)の中は滑らかに減衰する連続体で、その揺らぎの小さな極大を「下の面」と読まないため。メッセージに見えた本数と分解能を書く。
返り値: dict(kind="oct_layers", z_opt_um(界面)、peak_db、optical_thickness_um、group_index、thickness_um、resolution_um、snr_db・prominence_db(界面ごと)、separation_limit_um(受け入れる最小の光学厚 = min_separation_fwhm × 点像の幅)、min_thickness_um(それを層ごとの群屈折率で割った、測れる最も薄い物理厚))。
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_industrial_oct — py -3.11 examples/poc_industrial_oct.py
table को input के रूप में लेते हैं)abcd_matrix · wavefront_stats · sfr_from_edge · paraxial_trace · seidel_coefficients · spot_stats · tolerance_analysis · wavefront_from_opd
oct)oct_design · oct_dispersion_broadening · oct_interferogram · oct_bscan_simulate · oct_from_spectra · oct_k_linearize · oct_dispersion_estimate · oct_dispersion_compensate
*Provenance: octscan.py — OPTICS operator registry. यह per-op note tools/opdocs.py md से अपने-आप generate होता है (हाथ से edit न करें)।*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.