light_section_speckle_floor — OPTICS 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)。読み出し雑音 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 Dorsch closed form, their ratio, 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.

पूरी 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_light_section_step_weld_floor — py -3.11 examples/poc_light_section_step_weld_floor.py

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

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

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