light_section op• Data kinds: कोई नहीं → table (केवल arguments से तय होने वाला op — यह कोई image या data input नहीं लेता)
• Call: import fullseye as fs; fs.ledger.light_section_speckle_floor(wavelength_um=0.65, sin_u_obs=0.1, sin_theta=0.5, line_width_um=40.0, pixel_um=1.0, length_um=None, method='centroid', n_trials=12, n_columns=1024, n_rows=160, n_patterns=1, polarizations=1, noise_rel=0.0, pixel_oversample=2, seed=0, center_kw=None, smooth_surface=False) (implementation को सीधे call करना हो तो import lightsection; lightsection.light_section_speckle_floor(wavelength_um=0.65, sin_u_obs=0.1, sin_theta=0.5, line_width_um=40.0, pixel_um=1.0, length_um=None, method='centroid', n_trials=12, n_columns=1024, n_rows=160, n_patterns=1, polarizations=1, noise_rel=0.0, pixel_oversample=2, seed=0, center_kw=None, smooth_surface=False), registry से लेना हो तो opsoptics.get("light_section_speckle_floor"))
• GPU: नहीं (केवल CPU reference implementation)
light-section height का speckle floor, simulation और closed form साथ-साथ (table)।
> नीचे का विस्तृत विवरण मूल text में है — सारांश और headings का अनुवाद हो चुका है।
シミュ: coherent.laser_line_coherent で粗面のスペックル込みの光条を n_trials 枚(高さは乱数、部品ごとに別の位相スクリーン)描き、method の中心抽出で列ごとの中心を取り、長さ length_um(既定 = 光条の幅)ごとに平均して高さに直す(z = Δrow · pixel / sin θ、coherent の三角測量の約束)。真の高さとの差の標準偏差が sim_delta_z_um(95 % の χ² 区間つき)。
閉形式の側: δz = C λ / (2π sin u_obs sin θ) · √(w/L)、C = 1/√(n_patterns · polarizations) (coherent.speckle_reduction)。★前半 C λ / (2π sin u sin θ) が Dorsch らの式(dorsch_delta_z_um)で、後ろの √(w/L)(averaging_factor)は長さ L の平均の 実測の規則であって Dorsch の式の一部ではない。closed_form_delta_z_um はその積(L < w では Dorsch の式より大きい: w 173.2 µm・L 50 µm で 1.86 倍)。読み出し雑音 noise_rel(光条の頂の平均に対する比)は
シミュに入り、閉形式の側は light_section_uncertainty_budget の雑音の項と合わせて closed_form_total_um に入る。
Simulates n_trials speckled lines with coherent.laser_line_coherent, extracts the centre per column with method, averages over length_um (default = the line width) and converts to height (z = Δrow · pixel / sin θ). Returns the simulated standard deviation (with its χ² 95 % interval), the closed form closed_form_delta_z_um = Dorsch × √(w/L) (the √(w/L) averaging over length_um is a measured rule, not part of Dorsch's formula), the pure Dorsch value dorsch_delta_z_um with averaging_factor = √(w/L) and ratio_sim_to_dorsch, the ratios, and the additive-noise term. smooth_surface=True renders a mirror-smooth part (phase 0: no speckle, contrast 0) so that only noise_rel is left — the gate for the budget's read-noise term. center_kw overrides the estimator's settings (defaults: centroid over the whole column without clipping; gauss with half_window = the line's 1/e² half-width in pixels; steger with sigma = w/(pixel·√3)). ★Columns within one block share speckle; blocks are treated as independent samples (the χ² interval assumes that). ★The 2π constant is from the open-access Ettl et al. 2014, which cites Dorsch et al. 1994; the primary text was not read.
★The fine step pixel_um / pixel_oversample must be at most the intensity's Nyquist λ/(4 sin_u_obs) (|E|² has bandwidth 2 sin_u/λ), else ValueError naming the smallest pixel_oversample; up to λ/(5 sin_u_obs) a RuntimeWarning (the floor converges from there). Checking only the field's band let steps of up to λ/(2 sin u) through and the simulated floor came out 0.5–0.8 of its converged value (2026-11-09). Both numbers are returned as fine_step_um / intensity_nyquist_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। घोषित अपवाद: 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_3d_sensor_modalities — py -3.11 examples/poc_3d_sensor_modalities.py
• poc_light_section_step_weld_floor — py -3.11 examples/poc_light_section_step_weld_floor.py
table को input के रूप में लेते हैं)abcd_matrix · wavefront_stats · sfr_from_edge · paraxial_trace · seidel_coefficients · spot_stats · tolerance_analysis · wavefront_from_opd
light_section)laser_line_center_centroid · laser_line_center_gauss · laser_line_center_steger · light_section_rig · light_section_targets · light_section_render · light_plane_calibrate · light_section_profile
*Provenance: lightsection.py — OPTICS operator registry. यह per-op note tools/opdocs.py md से अपने-आप generate होता है (हाथ से edit न करें)।*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.