cavity op• Data kinds: कोई नहीं → table (केवल arguments से तय होने वाला op — यह कोई image या data input नहीं लेता)
• Call: import fullseye as fs; fs.ledger.fabry_perot_response(length_m: 'float' = 3994.5, wavelength_nm: 'float' = 1064.0, *, itm_transmittance: 'float' = 0.014, etm_transmittance: 'float' = 5e-06, itm_loss: 'float' = 0.0, etm_loss: 'float' = 0.0) -> 'dict' (implementation को सीधे call करना हो तो import cavityoptics; cavityoptics.fabry_perot_response(length_m: 'float' = 3994.5, wavelength_nm: 'float' = 1064.0, *, itm_transmittance: 'float' = 0.014, etm_transmittance: 'float' = 5e-06, itm_loss: 'float' = 0.0, etm_loss: 'float' = 0.0) -> 'dict', registry से लेना हो तो opsoptics.get("fabry_perot_response"))
Fabry-Perot cavity की design मात्राएँ (FSR, finesse, linewidth, pole, power gain, storage time) closed form में।
> नीचे का विस्तृत विवरण मूल text में है — सारांश और headings का अनुवाद हो चुका है।
length_m : float
共振器長 L [m]。既定は aLIGO の腕(3994.5 m)。
wavelength_nm : float
レーザー波長 [nm]。既定 1064 nm(Nd:YAG)。
itm_transmittance, etm_transmittance : float
入力鏡・終端鏡の強度透過率(0 ≤ T < 1)。既定は aLIGO(1.4 % / 5 ppm)。
itm_loss, etm_loss : float
各鏡の強度損失(吸収 + 散乱)。T + ℓ < 1。
dict
fsr_hz = c/2L、finesse = π√(r₁r₂)/(1 − r₁r₂)、
linewidth_hz(半値全幅、厳密に FSR·(2/π)·asin(π/2F))、
linewidth_approx_hz = FSR/F、pole_hz = 線幅の半分(共振器の極)、
storage_time_s = 1/(2π·pole)、power_gain = 共振での循環光量/入射光量
= T₁/(1 − r₁r₂)²、transmission_max = T₁T₂/(1 − r₁r₂)²、
reflection_min = 共振での反射率 ((r₁ − r₂(1−ℓ₁... ))/(1 − r₁r₂))² の
損失なし形 ((r₁ − r₂)/(1 − r₁r₂))²、r1 / r2、round_trip_phase_per_hz
= 4πL/c、free_spectral_range_mode_number = 2L/λ(共振の次数、参考値)。
aLIGO の既定値で F ≈ 445、FSR 37.5 kHz、線幅 84 Hz、極 42 Hz、循環光量 ≈ 280 倍(入力鏡の透過 1.4 % に対して)。linewidth_hz と pole_hz は Airy 関数の半値を 厳密に与える(asin 形)ので、tests では透過曲線を細かく標本化して半値の交点を独立に探し、この値と突き合わせる。
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_gw_detector_pseudo_simulation — py -3.11 examples/poc_gw_detector_pseudo_simulation.py
table को input के रूप में लेते हैं)abcd_matrix · wavefront_stats · sfr_from_edge · paraxial_trace · seidel_coefficients · spot_stats · tolerance_analysis · wavefront_from_opd
cavity)cavity_strain_transfer · michelson_dc_readout · pdh_error_signal · quantum_noise_budget
*Provenance: cavityoptics.py — OPTICS operator registry. यह per-op note tools/opdocs.py md से अपने-आप generate होता है (हाथ से edit न करें)।*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.