spectrometer op• Data kinds: कोई नहीं → table (केवल arguments से तय होने वाला op — यह कोई image या data input नहीं लेता)
• Call: import fullseye as fs; fs.ledger.grating_dispersion(groove_density_per_mm=1200.0, wavelength_nm=550.0, incidence_deg=10.0, order=1, focal_length_mm=100.0, illuminated_width_mm=25.0) (implementation को सीधे call करना हो तो import gratingspec; gratingspec.grating_dispersion(groove_density_per_mm=1200.0, wavelength_nm=550.0, incidence_deg=10.0, order=1, focal_length_mm=100.0, illuminated_width_mm=25.0), registry से लेना हो तो opsoptics.get("grating_dispersion"))
grating equation mλ = d(sin α + sin β) हल करके angular dispersion, reciprocal linear dispersion, resolving power और overlap करने वाले orders की table बनाता है।
> नीचे का विस्तृत विवरण मूल text में है — सारांश और headings का अनुवाद हो चुका है।
groove_density_per_mm: 溝の密度 G [本/mm]。溝の間隔は d = 1/G。
wavelength_nm: 波長 λ。incidence_deg: 入射角 α(法線から、Palmer の符号)。order: 次数 m(0 は拒否)。
focal_length_mm: カメラ(結像側)の焦点距離 f(線分散に使う)。illuminated_width_mm: 照らされた格子の幅 W(分散方向)。溝の数 N = W/d。
返り値(table):
• beta_deg —— 回折角 β。deviation_deg = α − β(入射光と回折光のなす角)。
• angular_dispersion_deg_per_nm / angular_dispersion_rad_per_nm —— dβ/dλ = m / (d cos β)。
• reciprocal_linear_dispersion_nm_per_mm —— P = d cos β / (|m| f)。
• anamorphic_magnification —— cos α / cos β(回折光と入射光のビーム幅の比)。
• grooves_illuminated / resolving_power (= |m| N) / resolving_power_max (= 2W/λ) / rayleigh_limit_nm (= λ / (|m| N)) / diffraction_fwhm_nm (= 0.8859 λ / (|m| N))。
• free_spectral_range_nm —— λ / |m|。littrow_deg —— この次数で α = β になる角(無ければ None)。
• orders —— 伝わる全次数の (m, β [deg]) の表。
• overlaps —— 同じ β へ出る他の次数の波長 (m', λ' = mλ/m')(迷光の次数。λ' は 50 nm 以上のみ)。
Raises ValueError: 0 次、伝わらない次数、非正の密度・波長・焦点距離・幅、|α| ≥ 90°。
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_spectrometer_illumination — py -3.11 examples/poc_spectrometer_illumination.py
table को input के रूप में लेते हैं)abcd_matrix · wavefront_stats · sfr_from_edge · paraxial_trace · seidel_coefficients · spot_stats · tolerance_analysis · wavefront_from_opd
spectrometer)czerny_turner_design · spectrometer_bandpass · 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.