moire_align op• Data kinds: कोई नहीं → table (केवल arguments से तय होने वाला op — यह कोई image या data input नहीं लेता)
• Call: import fullseye as fs; fs.ledger.moire_differential_shift(phase_a=0.3, phase_b=-0.3, phase_ref_a=0.0, phase_ref_b=0.0, p_mask_um=2.0, p_wafer_um=2.04, moving='wafer') (implementation को सीधे call करना हो तो import moirealign; moirealign.moire_differential_shift(phase_a=0.3, phase_b=-0.3, phase_ref_a=0.0, phase_ref_b=0.0, p_mask_um=2.0, p_wafer_um=2.04, moving='wafer'), registry से लेना हो तो opsoptics.get("moire_differential_shift"))
विपरीत pitch अंतर वाले दो जोड़ों (A = (p_m, p_w), B = (p_w, p_m)) से साझा त्रुटियाँ हटाकर विस्थापन पढ़ता है।
> नीचे का विस्तृत विवरण मूल text में है — सारांश और headings का अनुवाद हो चुका है।
ずれ δ では 2 つの縞が逆向きに動き(dφ_A/dδ と dφ_B/dδ の符号が逆)、マーク全体がカメラに対して s 動くと 同じ向きに同じ量(−2π|f|s)動く。だから
δ = wrap(Δφ_A − Δφ_B) / (g_A − g_B)、 共通 = Δφ_A − g_A δ
で、像の流れ・ステージの振動・カメラの倍率(どちらの縞にも同じに効く分)は δ から消える。捕捉範囲は 2π/|g_A − g_B| = p_m p_w / (p_m + p_w)(単一の対のおよそ半分)。
返り値: dict(shift_nm, common_phase_rad, drift_nm(共通の位相を像の流れに換算)、ambiguity_nm, single_a_nm / single_b_nm(各対だけで読んだ場合 —— 共通の誤差がそのまま乗る))。Raises ValueError: 位相が有限でない、同じピッチ、綴り違い。
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_moire_alignment — py -3.11 examples/poc_moire_alignment.py
• poc_moire_screen — py -3.11 examples/poc_moire_screen.py
table को input के रूप में लेते हैं)abcd_matrix · wavefront_stats · sfr_from_edge · paraxial_trace · seidel_coefficients · spot_stats · tolerance_analysis · wavefront_from_opd
moire_align)moire_magnification · moire_talbot_gap · moire_overlay_image · moire_phase · moire_phase_to_shift · moire_mark_read · moire_phase_crlb
*Provenance: moirealign.py — OPTICS operator registry. यह per-op note tools/opdocs.py md से अपने-आप generate होता है (हाथ से edit न करें)।*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.