talbot_grating_design — OPTICS grating_interf op

• Data kinds: कोई नहीं → table (केवल arguments से तय होने वाला op — यह कोई image या data input नहीं लेता)

• Call: import fullseye as fs; fs.ledger.talbot_grating_design(period_um=4.0, wavelength_nm=None, energy_kev=None, grating='pi', order=1, source_distance_mm=None) (implementation को सीधे call करना हो तो import gratinginterf; gratinginterf.talbot_grating_design(period_um=4.0, wavelength_nm=None, energy_kev=None, grating='pi', order=1, source_distance_mm=None), registry से लेना हो तो opsoptics.get("talbot_grating_design"))

उपयोग

grating interferometer की ज्यामिति: पहले grating की self-image दूरियाँ (fractional Talbot distances), fringe और analyser grating के period, source grating का period (closed form)।

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

第 1 格子(周期 period_um = p1)を通った波は、ある距離で格子の像(またはその周期の半分の像)を結ぶ。その距離に周期の合った吸収格子(分析格子)を置き、どちらかの格子を 1 周期ずらしながら撮ると、各画素で縞の正弦が取れる。この op はその距離と周期を返す。

grating:

"pi" 位相 π の格子(線の幅が周期の半分)。縞の周期 p1/2、距離 d_m = (m − 1/2)·p1²/(4λ)

(Weitkamp ら 2005, Opt. Express 13, 6296 の式 2)。

"pi_half" 位相 π/2 の格子。縞の周期 p1、d_m = (m − 1/2)·p1²/λ。

"absorption" 吸収格子。縞の周期 p1、d_m = m·p1²/λ(m = 2 がタルボ長 z_T = 2p1²/λ)。

order: m(1 以上の整数)。source_distance_mm: 線源から第 1 格子までの距離 L。None は平面波(L = ∞)。有限なら距離は d' = L·d/(L − d) に伸び(同じ文献)、縞は M = (L + d')/L 倍に拡大される。L ≤ d では自己像が結ばれない(分母が 0 以下)ので拒否する。

返り値 dict:

wavelength_nm / talbot_length_mm(z_T = 2p1²/λ、平面波)/ distance_plane_mm(d_m)/

distance_mm(d'、円錐ビームで伸びた距離。平面波なら d_m と同じ)/ magnification(M)/

fringe_period_um(第 1 格子の直後での縞の周期)/ analyzer_period_um(p2 = M × 縞の周期)/

source_grating_period_um(Lau の条件 p0 = p2·L/d'、Pfeiffer ら 2006。平面波なら None)/

angular_sensitivity(縞の位相 / 屈折角 = 2π d'/p2 [rad/rad])/

correlation_length_um(暗視野の自己相関長 ξ = λ d'/p2)/

relative_bandwidth(縞の振幅が 0 になるまでの波長の幅 Δλ/λ = 1/(2m − 1)。位相 π の格子だけ。

Weitkamp ら 2005 の式 3。他の格子は None)。

例(公表値): 14.4 keV、p1 = 4 µm、位相 π、m = 1 → d = 23.2 mm、p2 = 2 µm(平面波。Weitkamp ら 2005 の図 4 の装置)。Raises ValueError: 正でない周期・波長、wavelength_nm と energy_kev の両方(どちらも無ければ 28 keV)、未知の grating、order が 1..1000 の外、L ≤ d。

पूरी 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 करते हैं)

• grating_interferometry — py -3.11 examples/grating_interferometry.py

• poc_grating_interferometry — py -3.11 examples/poc_grating_interferometry.py

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

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

इसी category के (grating_interf)

grating_stepping_simulate · grating_three_image_retrieve · darkfield_scatter_relation · talbot_carpet · talbot_source_visibility · grating_step_period_estimate · dpc_integrate


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

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