spectrometer_bandpass — OPTICS spectrometer op

• Data kinds: table → table

• Call: import fullseye as fs; fs.ledger.spectrometer_bandpass(design, slit_width_um=25.0, pixel_um=14.0, input_na=0.1, wavelengths_nm=None, slit_height_mm=1.0, pupil='circular') (implementation को सीधे call करना हो तो import gratingspec; gratingspec.spectrometer_bandpass(design, slit_width_um=25.0, pixel_um=14.0, input_na=0.1, wavelengths_nm=None, slit_height_mm=1.0, pupil='circular'), registry से लेना हो तो opsoptics.get("spectrometer_bandpass"))

उपयोग

slit, pixel और diffraction से हर wavelength पर spectrometer की bandpass (instrument line shape का FWHM) देता है।

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

design: czerny_turner_design の表。

slit_width_um: 入口スリットの幅 w。0 は理想の点(回折と画素だけが残る)。

pixel_um: 検出器の画素の幅(分散方向)。0 は理想の連続の検出器。

input_na: スリットに入る光の NA(コリメータで平行になったビームの直径 D = 2 f_col tan(asin NA) を決め、

照らされた溝の数 N = D / (d cos α) と回折の線幅を決める)。

wavelengths_nm: 評価する波長(None なら帯域の 5 点)。

slit_height_mm: スリットの高さ(エタンデュだけに効く)。

pupil: "circular"(円いビーム、既定)/ "rectangular"(一様に照らした矩形 = 教科書の mN)。

返り値(table、波長ごとの配列):

• slit_image_um —— w' = w (f_cam / f_col)(cos α / cos β)(Palmer (8-11a)、焦点面の上、収差なし)。

• reciprocal_dispersion_nm_per_mm —— P = d cos β / (|m| f_cam)(焦点面の上)。

• slit_image_flat_um / reciprocal_dispersion_flat_nm_per_mm / obliquity_factor —— カメラの軸に垂直な平らな検出器の上(局所の倍率 1 / cos²(β − β_c)、czerny_turner_design の写像 x = f tan(β − β_c) と同じ)。装置関数と FWHM はこちらで作る。積 w' P(スリットで決まる帯域)はどちらでも同じ。

• slit_limited_nm (= w d cos α / (|m| f_col)、β に依らない) / pixel_limited_nm (= p P) / palmer_bandpass_nm (= P sup(w', p)、Palmer (8-12)) / diffraction_fwhm_nm(回折だけの FWHM)/ rayleigh_limit_nm (= λ / (|m| N))。

• fwhm_um / fwhm_nm —— 装置関数(回折 ⊗ スリットの像 ⊗ 画素)の FWHM。

• resolving_power (= λ / FWHM) / grating_resolving_power (= |m| N) / pixels_per_fwhm。

• regime —— 最も幅の大きい寄与("slit" / "pixel" / "diffraction")。

• line_shapes —— 波長ごとの装置関数 pairs(Δλ [nm], 最大 1 に正規化)。

• etendue_mm2sr —— スリットの面積 × π NA²(スループットはこれに比例する。w と分解能の取引)。

Raises ValueError: 設計の表でない、帯域の外の波長、NA が (0, 0.95] の外、幅が負、瞳の名前の誤り。

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

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

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

इसी category के (spectrometer)

grating_dispersion · czerny_turner_design · spectrometer_slit_image · spectrometer_spectrum


*Provenance: gratingspec.py — OPTICS operator registry. यह per-op note tools/opdocs.py md से अपने-आप generate होता है (हाथ से edit न करें)।*

© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.