illumination op• Data kinds: table → image2d
• Call: import fullseye as fs; fs.ledger.illumination_field(train, source_radiance=None, shape=(65, 65), field_mm=None, n_pupil=16) (implementation को सीधे call करना हो तो import illumdesign; illumdesign.illumination_field(train, source_radiance=None, shape=(65, 65), field_mm=None, n_pupil=16), registry से लेना हो तो opsoptics.get("illumination_field"))
paraxial backward tracing से source तक जाकर illumination train द्वारा specimen पर irradiance (image2d) निकालता है।
> नीचे का विस्तृत विवरण मूल text में है — सारांश और headings का अनुवाद हो चुका है।
For every specimen pixel (x, y) and every direction (u, v) on an *n_pupil* x *n_pupil* grid of the illumination cone, the ray is traced back through each stop (rays outside a stop are blocked) to the source plane, where the radiance is looked up: E(x) = sum L(source point) du dv (paraxial, so for a uniform source filling the cone E = L pi NA^2 — a gate).
*train*: the table from illumination_train (or the same element list built by hand). *source_radiance*: None = uniform radiance 1 over the source disc; or a 2-D array of non-negative radiance laid over the square [-r, r]^2 of the source (r = source radius), bilinear lookup, zero outside the disc — a filament, an LED die, a fibre bundle. *shape*: the output grid (rows, cols). *field_mm*: half-width of the square specimen window (None = 0.65 x the lit field diameter). *n_pupil*: direction samples per axis.
Returns the irradiance map (float64, rows = +y down to -y as an image), in radiance x sr units.
Raises ValueError: not a train, non-finite/negative radiance map, work above MAX_TRAIN_WORK, no light reaching the specimen.
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।
• mv_illumination_practice — Lighting व्यवहार में — wavelength, polarisation, drive modes, ambient light, safety
• 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_document_scan — py -3.11 examples/poc_document_scan.py
• poc_spectrometer_illumination — py -3.11 examples/poc_spectrometer_illumination.py
image2d को input के रूप में लेते हैं)fraunhofer_pattern · pupil_psf · pupil_blur · psf_to_mtf · encircled_energy · ensquared_energy · energy_radii · mtf_tangential_sagittal
illumination)light_source · irradiance_map · illumination_uniformity · defect_contrast · lighting_sweep · illumination_design · solid_angle_light · solid_angle_boundaries
*Provenance: illumdesign.py — OPTICS operator registry. यह per-op note tools/opdocs.py md से अपने-आप generate होता है (हाथ से edit न करें)।*
© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.