oct_bscan_simulate — OPTICS oct op

• Data kinds: कोई नहीं → table (केवल arguments से तय होने वाला op — यह कोई image या data input नहीं लेता)

• Call: import fullseye as fs; fs.ledger.oct_bscan_simulate(sample2d=None, width_um=1500.0, n_columns=256, center_nm=840.0, bandwidth_nm=50.0, mode='sd', n_pixels=1024, wl_min_nm=None, wl_max_nm=None, spectrometer_fwhm_px=1.0, linewidth_nm=None, sweep_nonlinearity=0.0, photons_ref_per_pixel=20000.0, photons_mirror_per_pixel=None, eta=0.8, sigma_d=10.0, K=1.0, beam_waist_um=6.0, focus_um=None, illumination='point', focus_medium_index=1.5, oversample=4, noise=True, seed=0) (implementation को सीधे call करना हो तो import octscan; octscan.oct_bscan_simulate(sample2d=None, width_um=1500.0, n_columns=256, center_nm=840.0, bandwidth_nm=50.0, mode='sd', n_pixels=1024, wl_min_nm=None, wl_max_nm=None, spectrometer_fwhm_px=1.0, linewidth_nm=None, sweep_nonlinearity=0.0, photons_ref_per_pixel=20000.0, photons_mirror_per_pixel=None, eta=0.8, sigma_d=10.0, K=1.0, beam_waist_um=6.0, focus_um=None, illumination='point', focus_medium_index=1.5, oversample=4, noise=True, seed=0), registry से लेना हो तो opsoptics.get("oct_bscan_simulate"))

उपयोग

किसी cross-section (sample2d) पर पार्श्व scan से बना B-scan के spectral interferograms का समूह (table)।

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

sample2d = {"materials": [周囲, 層 1, …, 基板], "interfaces_um": [(W_fine,) の物理深さ, …] (上から、W_fine は任意の本数で横に線形補間。深さ 0 = 周囲の媒質の中の基準面)、"surface_um": 基準面の光路(参照腕との差、空気中 µm)、"scatter": [{"layer": i, "density_per_mm2", "amplitude"}] (断面内の点散乱体 —— 塗装の顔料・接着剤のフィラー)、

"inclusions": [{"x_um", "z_um", "radius_um", "material"}] (空洞・異物。上下の面で反射し、その下の界面の光路を変える)、"points": [{"x_um", "z_um", "amplitude"}] (置いた点散乱体 —— 横の点像の採点用)、"attenuation_per_mm": 層ごとの減衰}。省略時は段差を越えるコートの例。

各列: 細かい横の副標本(ビーム半径の 1/3 間隔)ごとに上から材料の区間を作り、境界 = 反射体、光路 = 材料ごとの距離。ビームの重み exp(−2(x − x')²/w(z)²)(往復、w(z) = w0 √(1 + (Δz/z_R)²))、

共焦点の結合: illumination="point" は (1 + u²)^(−1/2)、"line"(ライン照明、片方向だけ共焦点)は(1 + u²)^(−1/4)、u = (z − z_f)/z_R、z_R = π w0² n/λ0。ライン照明は 1 回で全列を撮る(走査の時間ずれなし)。

返り値: dict(kind="oct_bscan_spectra", spectra (W, N), wavelength_nm, k_rad_per_um, reference_spectrum, sample_only_spectrum(列ごとの試料腕だけ・雑音なし —— 自己相関のアーチファクトの素), x_um, truth={interfaces_um (n_if, W), inclusions}, settings)。

पूरी 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_from_spectra · oct_k_linearize · oct_dispersion_estimate · oct_dispersion_compensate · oct_ascan


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