linescan op• Data kinds: कोई नहीं → table (केवल arguments से तय होने वाला op — यह कोई image या data input नहीं लेता)
• Call: import fullseye as fs; fs.ledger.tdi_snr(photons_per_stage=200.0, stages=(1, 2, 4, 8, 16, 32, 64, 128), eta=0.6, sigma_d=20.0, K=0.1, architecture='charge', sigma_q2=0.08333333333333333) (implementation को सीधे call करना हो तो import linescan; linescan.tdi_snr(photons_per_stage=200.0, stages=(1, 2, 4, 8, 16, 32, 64, 128), eta=0.6, sigma_d=20.0, K=0.1, architecture='charge', sigma_q2=0.08333333333333333), registry से लेना हो तो opsoptics.get("tdi_snr"))
हर TDI stage संख्या N के लिए SNR (table) — EMVA 1288 के linear model को stages की संख्या से गुणा करके।
> नीचे का विस्तृत विवरण मूल text में है — सारांश और headings का अनुवाद हो चुका है।
1 段あたりの平均光子数 μ_p(*photons_per_stage*)、量子効率 η、暗時雑音 σ_d [e⁻]、システムゲイン K [DN/e⁻]、量子化雑音の分散 σ_q² [DN²] は sensorchar.emva_snr_curve と同じ意味。
• architecture="charge"(CCD 型・電荷領域で足す): 電荷を段から段へ送って最後に 1 回だけ読む。EMVA 1288 6.4 節のとおり「露光が N 倍の 1 画素」: SNR = Nημ_p / √(σ_d² + σ_q²/K² + Nημ_p)。
• architecture="digital"(CMOS 型・各段で読んでから足す): 読み出しと量子化の雑音も N 回積もる: SNR = Nημ_p / √(N(σ_d² + σ_q²/K²) + Nημ_p) = √N · SNR(1 段)—— どの明るさでも厳密に √N。
ショット雑音律の領域(ημ_p ≫ σ_d²)では両方とも √N。差が出るのは暗いとき(電荷加算は最大 N 倍まで伸びる)。返り値 dict: stages(int 配列)/ snr / snr_one_stage / gain(snr / snr_one_stage)/ sqrt_n / signal_e(Nημ_p)/ noise_e(電子の単位の雑音)/ architecture。
Raises ValueError: μ_p が負 / 段数が 1 未満・上限超え・整数でない / η が (0, 1] の外 / σ_d・σ_q² が負 / K が正でない / architecture が違う。
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_tdi_linescan — py -3.11 examples/poc_tdi_linescan.py
table को input के रूप में लेते हैं)abcd_matrix · wavefront_stats · sfr_from_edge · paraxial_trace · seidel_coefficients · spot_stats · tolerance_analysis · wavefront_from_opd
linescan)tdi_sync_mtf · linescan_acquire · lens_field_profile · linescan_lens_columns · linescan_lens_example
*Provenance: linescan.py — OPTICS operator registry. यह per-op note tools/opdocs.py md से अपने-आप generate होता है (हाथ से edit न करें)।*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.