oct_ascan — OPTICS oct op

• Data kinds: table → table

• Call: import fullseye as fs; fs.ledger.oct_ascan(interferogram, window='hann', dc='reference', zero_pad=2, quadrature=None, a2=0.0, a3=0.0, k_center=None) (implementation को सीधे call करना हो तो import octscan; octscan.oct_ascan(interferogram, window='hann', dc='reference', zero_pad=2, quadrature=None, a2=0.0, a3=0.0, k_center=None), registry से लेना हो तो opsoptics.get("oct_ascan"))

उपयोग

k-linear spectral interferogram → A-scan (गहराई के साथ परावर्तन का आयाम, table)।

> नीचे का विस्तृत विवरण मूल text में है — सारांश और headings का अनुवाद हो चुका है।

手順: DC 除去(dc: "reference" = 参照腕だけのスペクトルを引く / "reference+sample" = 試料腕だけも引く(自己相関のアーチファクトを消す)/ "mean"(束なら列の中央値)/ "smooth"(各スペクトルの緩やかな包絡 = 幅 N/80 のガウスの低域を引く。参照を測っていない記録向け)/ "none")→ 窓(window)→ 分散補償(a2・a3、0 なら何もしない) → zero_pad 倍に詰めて FFT。深さ = 片道の光路(空気中 µm)z_j = π j/(N_pad δk)、範囲 z_max = π/(2δk)。

実数のスペクトルは ±z が区別できない(鏡像: 参照腕より手前の面は同じ深さに折り返して見える)ので正の側だけを返す。quadrature に参照腕の位相を π/2 ずらしたスペクトル(同じ表の形)を渡すと複素のスペクトル I₀ + i I_{π/2} を組み、両側(−z_max〜+z_max)を返す(full range)。分散補償を掛けたスペクトル(複素、oct_dispersion_compensate の出力)は片側。

返り値: dict(kind="oct_ascan", z_um, amplitude(|A|)、db(20 log10 |A|)、noise_sigma(|A|² の中央値から推定した雑音の rms、信号が深さの一部しか占めない前提)、snr_db(最大ピーク)、z_max_um、center_nm、bandwidth_nm、two_sided)。

पूरी family का input contract (fail-closed)

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।

उपयोग की विस्तृत guide

• optics_imaging family guide

संदर्भ (sample data, साहित्य)

• 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 में दिए गए हैं।

चलाए जा सकने वाले उदाहरण (verified samples जो सच में यह op call करते हैं)

• poc_industrial_oct — py -3.11 examples/poc_industrial_oct.py

वे अगले ops जिनसे type जुड़ता है (table को input के रूप में लेते हैं)

abcd_matrix · wavefront_stats · sfr_from_edge · paraxial_trace · seidel_coefficients · spot_stats · tolerance_analysis · wavefront_from_opd

इसी category के (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.