pdh_error_signal — OPTICS cavity op

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

• Call: import fullseye as fs; fs.ledger.pdh_error_signal(length_m: 'float' = 1.0, *, itm_transmittance: 'float' = 0.01, etm_transmittance: 'float' = 0.01, mod_freq_hz: 'float' = 20000000.0, mod_depth: 'float' = 1.08, power_w: 'float' = 1.0, span_linewidths: 'float' = 6.0, n_points: 'int' = 1201) -> 'np.ndarray' (implementation को सीधे call करना हो तो import cavityoptics; cavityoptics.pdh_error_signal(length_m: 'float' = 1.0, *, itm_transmittance: 'float' = 0.01, etm_transmittance: 'float' = 0.01, mod_freq_hz: 'float' = 20000000.0, mod_depth: 'float' = 1.08, power_w: 'float' = 1.0, span_linewidths: 'float' = 6.0, n_points: 'int' = 1201) -> 'np.ndarray', registry से लेना हो तो opsoptics.get("pdh_error_signal"))

उपयोग

resonance से detuning δ [Hz] के function के रूप में Pound-Drever-Hall error signal ε(δ) (pairs)।

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

Parameters

length_m : float

共振器長 L [m]。

itm_transmittance, etm_transmittance : float

鏡の強度透過率(損失なし)。

mod_freq_hz : float

位相変調周波数 Ω/2π [Hz]。線幅より十分大きいと傾きが Black の式 15 に乗る。

mod_depth : float

変調指数 β。搬送波 P_c = J₀(β)²P、側帯波 P_s = J₁(β)²P(β = 1.08 で P_c·P_s 最大)。

power_w : float

入射光量 P [W]。

span_linewidths : float

表示する離調の範囲(線幅の何倍まで、±)。

n_points : int

点数(奇数なら δ = 0 を含む)。

Returns

numpy.ndarray

(n_points, 2): 列 0 = 離調 δ [Hz]、列 1 = ε [W]

= 2√(P_c P_s)·Im[F(δ)F*(δ+Ω) − F*(δ)F(δ−Ω)]。

Notes

門(tests): 反対称 ε(−δ) = −ε(δ)(1e-12)、ε(0) = 0、対称共振器(T₁ = T₂)で Ω ≫ δν のとき共振近傍の傾き dε/dδ = −8√(P_c P_s)/δν(Black 2001 式 15)に 1 % 以内。側帯波が共振に乗る δ = ±Ω 付近の小さな山も含めて返す(表示範囲が届けば)。

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

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

mtf50 · energy_to_photons · spectral_product · spectral_integral · spectral_stats · kubelka_munk_reflectance · hyperspectral_capture · film_thickness_fft

इसी category के (cavity)

fabry_perot_response · cavity_strain_transfer · michelson_dc_readout · 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.