@photivra/engine 0.6.0 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +674 -0
- package/CHANGELOG.md +186 -0
- package/CITATION.cff +1 -1
- package/CONTRIBUTING.md +76 -0
- package/DCO +33 -0
- package/NODE_SUPPORT.md +37 -0
- package/NOTICE +2 -0
- package/README.md +138 -71
- package/SECURITY.md +55 -0
- package/THIRD_PARTY.md +63 -0
- package/dist/camera/equivalent-focal-length.d.ts +9 -0
- package/dist/camera/equivalent-focal-length.d.ts.map +1 -1
- package/dist/camera/equivalent-focal-length.js +9 -0
- package/dist/camera/equivalent-focal-length.js.map +1 -1
- package/dist/camera/field-of-view.d.ts +13 -0
- package/dist/camera/field-of-view.d.ts.map +1 -1
- package/dist/camera/field-of-view.js +13 -0
- package/dist/camera/field-of-view.js.map +1 -1
- package/dist/camera/projected-object-size.d.ts +8 -0
- package/dist/camera/projected-object-size.d.ts.map +1 -1
- package/dist/camera/projected-object-size.js +8 -0
- package/dist/camera/projected-object-size.js.map +1 -1
- package/dist/capture/capture-export-metadata.d.ts +60 -0
- package/dist/capture/capture-export-metadata.d.ts.map +1 -0
- package/dist/capture/capture-export-metadata.js +62 -0
- package/dist/capture/capture-export-metadata.js.map +1 -0
- package/dist/capture/environment-raw-producer.d.ts +55 -0
- package/dist/capture/environment-raw-producer.d.ts.map +1 -0
- package/dist/capture/environment-raw-producer.js +88 -0
- package/dist/capture/environment-raw-producer.js.map +1 -0
- package/dist/capture/export-jpeg.d.ts +12 -0
- package/dist/capture/export-jpeg.d.ts.map +1 -0
- package/dist/capture/export-jpeg.js +126 -0
- package/dist/capture/export-jpeg.js.map +1 -0
- package/dist/capture/export-tiff.d.ts +45 -0
- package/dist/capture/export-tiff.d.ts.map +1 -0
- package/dist/capture/export-tiff.js +129 -0
- package/dist/capture/export-tiff.js.map +1 -0
- package/dist/capture/focus-control.d.ts +210 -0
- package/dist/capture/focus-control.d.ts.map +1 -0
- package/dist/capture/focus-control.js +664 -0
- package/dist/capture/focus-control.js.map +1 -0
- package/dist/capture/linear-encoding.d.ts +59 -0
- package/dist/capture/linear-encoding.d.ts.map +1 -0
- package/dist/capture/linear-encoding.js +98 -0
- package/dist/capture/linear-encoding.js.map +1 -0
- package/dist/capture/photographic-export.d.ts +135 -0
- package/dist/capture/photographic-export.d.ts.map +1 -0
- package/dist/capture/photographic-export.js +273 -0
- package/dist/capture/photographic-export.js.map +1 -0
- package/dist/capture/raw-frame-limits.d.ts +12 -0
- package/dist/capture/raw-frame-limits.d.ts.map +1 -0
- package/dist/capture/raw-frame-limits.js +13 -0
- package/dist/capture/raw-frame-limits.js.map +1 -0
- package/dist/capture/raw-frame-reconstruction.d.ts +48 -0
- package/dist/capture/raw-frame-reconstruction.d.ts.map +1 -0
- package/dist/capture/raw-frame-reconstruction.js +146 -0
- package/dist/capture/raw-frame-reconstruction.js.map +1 -0
- package/dist/capture/release-sequence.d.ts +120 -0
- package/dist/capture/release-sequence.d.ts.map +1 -0
- package/dist/capture/release-sequence.js +446 -0
- package/dist/capture/release-sequence.js.map +1 -0
- package/dist/capture/sensor-raw-frame.d.ts +34 -0
- package/dist/capture/sensor-raw-frame.d.ts.map +1 -0
- package/dist/capture/sensor-raw-frame.js +106 -0
- package/dist/capture/sensor-raw-frame.js.map +1 -0
- package/dist/capture/sensor-raw-producer.d.ts +51 -0
- package/dist/capture/sensor-raw-producer.d.ts.map +1 -0
- package/dist/capture/sensor-raw-producer.js +235 -0
- package/dist/capture/sensor-raw-producer.js.map +1 -0
- package/dist/capture/simulated-capture.d.ts +125 -0
- package/dist/capture/simulated-capture.d.ts.map +1 -0
- package/dist/capture/simulated-capture.js +248 -0
- package/dist/capture/simulated-capture.js.map +1 -0
- package/dist/color/capture-color.d.ts +73 -0
- package/dist/color/capture-color.d.ts.map +1 -0
- package/dist/color/capture-color.js +145 -0
- package/dist/color/capture-color.js.map +1 -0
- package/dist/color/sensor-color-development.d.ts +23 -0
- package/dist/color/sensor-color-development.d.ts.map +1 -0
- package/dist/color/sensor-color-development.js +56 -0
- package/dist/color/sensor-color-development.js.map +1 -0
- package/dist/color/white-balance.d.ts +175 -0
- package/dist/color/white-balance.d.ts.map +1 -0
- package/dist/color/white-balance.js +606 -0
- package/dist/color/white-balance.js.map +1 -0
- package/dist/composition/image-formation-plan.d.ts +481 -0
- package/dist/composition/image-formation-plan.d.ts.map +1 -0
- package/dist/composition/image-formation-plan.js +2499 -0
- package/dist/composition/image-formation-plan.js.map +1 -0
- package/dist/composition/plan-consumer.d.ts +53 -0
- package/dist/composition/plan-consumer.d.ts.map +1 -0
- package/dist/composition/plan-consumer.js +119 -0
- package/dist/composition/plan-consumer.js.map +1 -0
- package/dist/core/calculation-result.d.ts.map +1 -1
- package/dist/core/calculation-result.js +6 -0
- package/dist/core/calculation-result.js.map +1 -1
- package/dist/core/canonical-json.d.ts +18 -0
- package/dist/core/canonical-json.d.ts.map +1 -0
- package/dist/core/canonical-json.js +44 -0
- package/dist/core/canonical-json.js.map +1 -0
- package/dist/core/configuration-error.d.ts +6 -0
- package/dist/core/configuration-error.d.ts.map +1 -1
- package/dist/core/configuration-error.js +6 -0
- package/dist/core/configuration-error.js.map +1 -1
- package/dist/core/evidence-provenance.d.ts +6 -0
- package/dist/core/evidence-provenance.d.ts.map +1 -1
- package/dist/core/evidence-provenance.js +7 -0
- package/dist/core/evidence-provenance.js.map +1 -1
- package/dist/core/image-formation.d.ts +9 -3
- package/dist/core/image-formation.d.ts.map +1 -1
- package/dist/core/image-formation.js +29 -5
- package/dist/core/image-formation.js.map +1 -1
- package/dist/core/owned-data.d.ts +25 -0
- package/dist/core/owned-data.d.ts.map +1 -0
- package/dist/core/owned-data.js +34 -0
- package/dist/core/owned-data.js.map +1 -0
- package/dist/core/record-validation.d.ts +17 -0
- package/dist/core/record-validation.d.ts.map +1 -0
- package/dist/core/record-validation.js +44 -0
- package/dist/core/record-validation.js.map +1 -0
- package/dist/core/scientific-assurance.d.ts +101 -0
- package/dist/core/scientific-assurance.d.ts.map +1 -0
- package/dist/core/scientific-assurance.js +301 -0
- package/dist/core/scientific-assurance.js.map +1 -0
- package/dist/core/spectral-composition.d.ts +106 -0
- package/dist/core/spectral-composition.d.ts.map +1 -0
- package/dist/core/spectral-composition.js +334 -0
- package/dist/core/spectral-composition.js.map +1 -0
- package/dist/core/spectral.d.ts +34 -0
- package/dist/core/spectral.d.ts.map +1 -0
- package/dist/core/spectral.js +57 -0
- package/dist/core/spectral.js.map +1 -0
- package/dist/core/validation.d.ts +6 -0
- package/dist/core/validation.d.ts.map +1 -1
- package/dist/core/validation.js +6 -0
- package/dist/core/validation.js.map +1 -1
- package/dist/core/version.d.ts +14 -0
- package/dist/core/version.d.ts.map +1 -0
- package/dist/core/version.js +15 -0
- package/dist/core/version.js.map +1 -0
- package/dist/equipment/exposure-capabilities.d.ts +125 -0
- package/dist/equipment/exposure-capabilities.d.ts.map +1 -0
- package/dist/equipment/exposure-capabilities.js +391 -0
- package/dist/equipment/exposure-capabilities.js.map +1 -0
- package/dist/equipment/generic-tier-assets.d.ts +82 -0
- package/dist/equipment/generic-tier-assets.d.ts.map +1 -0
- package/dist/equipment/generic-tier-assets.js +119 -0
- package/dist/equipment/generic-tier-assets.js.map +1 -0
- package/dist/equipment/generic-tier-presets.d.ts +57 -0
- package/dist/equipment/generic-tier-presets.d.ts.map +1 -0
- package/dist/equipment/generic-tier-presets.js +122 -0
- package/dist/equipment/generic-tier-presets.js.map +1 -0
- package/dist/equipment/iso-capabilities.d.ts +143 -0
- package/dist/equipment/iso-capabilities.d.ts.map +1 -0
- package/dist/equipment/iso-capabilities.js +578 -0
- package/dist/equipment/iso-capabilities.js.map +1 -0
- package/dist/equipment/metering-capabilities.d.ts +58 -0
- package/dist/equipment/metering-capabilities.d.ts.map +1 -0
- package/dist/equipment/metering-capabilities.js +151 -0
- package/dist/equipment/metering-capabilities.js.map +1 -0
- package/dist/equipment/release-capabilities.d.ts +33 -0
- package/dist/equipment/release-capabilities.d.ts.map +1 -0
- package/dist/equipment/release-capabilities.js +176 -0
- package/dist/equipment/release-capabilities.js.map +1 -0
- package/dist/exposure/exposure-duration-control.d.ts +72 -0
- package/dist/exposure/exposure-duration-control.d.ts.map +1 -0
- package/dist/exposure/exposure-duration-control.js +161 -0
- package/dist/exposure/exposure-duration-control.js.map +1 -0
- package/dist/exposure/exposure-mode-resolver.d.ts +637 -0
- package/dist/exposure/exposure-mode-resolver.d.ts.map +1 -0
- package/dist/exposure/exposure-mode-resolver.js +1905 -0
- package/dist/exposure/exposure-mode-resolver.js.map +1 -0
- package/dist/exposure/exposure.d.ts +8 -0
- package/dist/exposure/exposure.d.ts.map +1 -1
- package/dist/exposure/exposure.js +8 -0
- package/dist/exposure/exposure.js.map +1 -1
- package/dist/exposure/flash.d.ts +179 -0
- package/dist/exposure/flash.d.ts.map +1 -0
- package/dist/exposure/flash.js +644 -0
- package/dist/exposure/flash.js.map +1 -0
- package/dist/exposure/metering-scene-radiance.d.ts +72 -0
- package/dist/exposure/metering-scene-radiance.d.ts.map +1 -0
- package/dist/exposure/metering-scene-radiance.js +222 -0
- package/dist/exposure/metering-scene-radiance.js.map +1 -0
- package/dist/exposure/metering-target.d.ts +67 -0
- package/dist/exposure/metering-target.d.ts.map +1 -0
- package/dist/exposure/metering-target.js +265 -0
- package/dist/exposure/metering-target.js.map +1 -0
- package/dist/exposure/metering-temporal.d.ts +76 -0
- package/dist/exposure/metering-temporal.d.ts.map +1 -0
- package/dist/exposure/metering-temporal.js +210 -0
- package/dist/exposure/metering-temporal.js.map +1 -0
- package/dist/exposure/metering.d.ts +124 -0
- package/dist/exposure/metering.d.ts.map +1 -0
- package/dist/exposure/metering.js +422 -0
- package/dist/exposure/metering.js.map +1 -0
- package/dist/exposure/program-line.d.ts +29 -0
- package/dist/exposure/program-line.d.ts.map +1 -0
- package/dist/exposure/program-line.js +126 -0
- package/dist/exposure/program-line.js.map +1 -0
- package/dist/index.d.ts +87 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +85 -6
- package/dist/index.js.map +1 -1
- package/dist/motion/camera-rotation.d.ts +16 -0
- package/dist/motion/camera-rotation.d.ts.map +1 -1
- package/dist/motion/camera-rotation.js +16 -0
- package/dist/motion/camera-rotation.js.map +1 -1
- package/dist/motion/capture-rotation-inverse-mapping.d.ts +13 -0
- package/dist/motion/capture-rotation-inverse-mapping.d.ts.map +1 -1
- package/dist/motion/capture-rotation-inverse-mapping.js +13 -0
- package/dist/motion/capture-rotation-inverse-mapping.js.map +1 -1
- package/dist/motion/capture-rotation-temporal-quadrature.d.ts +15 -0
- package/dist/motion/capture-rotation-temporal-quadrature.d.ts.map +1 -1
- package/dist/motion/capture-rotation-temporal-quadrature.js +15 -0
- package/dist/motion/capture-rotation-temporal-quadrature.js.map +1 -1
- package/dist/motion/capture-rotation-trajectory.d.ts +15 -0
- package/dist/motion/capture-rotation-trajectory.d.ts.map +1 -1
- package/dist/motion/capture-rotation-trajectory.js +15 -0
- package/dist/motion/capture-rotation-trajectory.js.map +1 -1
- package/dist/motion/capture-translation-parallax-temporal-quadrature.d.ts +119 -0
- package/dist/motion/capture-translation-parallax-temporal-quadrature.d.ts.map +1 -0
- package/dist/motion/capture-translation-parallax-temporal-quadrature.js +263 -0
- package/dist/motion/capture-translation-parallax-temporal-quadrature.js.map +1 -0
- package/dist/motion/extended-object-projection.d.ts +175 -0
- package/dist/motion/extended-object-projection.d.ts.map +1 -0
- package/dist/motion/extended-object-projection.js +402 -0
- package/dist/motion/extended-object-projection.js.map +1 -0
- package/dist/motion/projected-motion.d.ts +11 -0
- package/dist/motion/projected-motion.d.ts.map +1 -1
- package/dist/motion/projected-motion.js +11 -0
- package/dist/motion/projected-motion.js.map +1 -1
- package/dist/optics/aperture.d.ts +9 -0
- package/dist/optics/aperture.d.ts.map +1 -1
- package/dist/optics/aperture.js +9 -0
- package/dist/optics/aperture.js.map +1 -1
- package/dist/optics/circle-of-confusion.d.ts +8 -0
- package/dist/optics/circle-of-confusion.d.ts.map +1 -1
- package/dist/optics/circle-of-confusion.js +8 -0
- package/dist/optics/circle-of-confusion.js.map +1 -1
- package/dist/optics/complex-pupil-psf.d.ts +128 -0
- package/dist/optics/complex-pupil-psf.d.ts.map +1 -0
- package/dist/optics/complex-pupil-psf.js +462 -0
- package/dist/optics/complex-pupil-psf.js.map +1 -0
- package/dist/optics/depth-of-field.d.ts +18 -0
- package/dist/optics/depth-of-field.d.ts.map +1 -1
- package/dist/optics/depth-of-field.js +29 -4
- package/dist/optics/depth-of-field.js.map +1 -1
- package/dist/optics/diffraction.d.ts +8 -0
- package/dist/optics/diffraction.d.ts.map +1 -1
- package/dist/optics/diffraction.js +8 -0
- package/dist/optics/diffraction.js.map +1 -1
- package/dist/optics/focus-breathing.d.ts +13 -0
- package/dist/optics/focus-breathing.d.ts.map +1 -1
- package/dist/optics/focus-breathing.js +13 -0
- package/dist/optics/focus-breathing.js.map +1 -1
- package/dist/optics/focus-state.d.ts +47 -0
- package/dist/optics/focus-state.d.ts.map +1 -0
- package/dist/optics/focus-state.js +78 -0
- package/dist/optics/focus-state.js.map +1 -0
- package/dist/optics/front-of-lens-filter.d.ts +114 -0
- package/dist/optics/front-of-lens-filter.d.ts.map +1 -0
- package/dist/optics/front-of-lens-filter.js +468 -0
- package/dist/optics/front-of-lens-filter.js.map +1 -0
- package/dist/optics/illumination-vignetting.d.ts +9 -0
- package/dist/optics/illumination-vignetting.d.ts.map +1 -1
- package/dist/optics/illumination-vignetting.js +9 -0
- package/dist/optics/illumination-vignetting.js.map +1 -1
- package/dist/optics/lateral-chromatic-aberration.d.ts +11 -0
- package/dist/optics/lateral-chromatic-aberration.d.ts.map +1 -1
- package/dist/optics/lateral-chromatic-aberration.js +11 -0
- package/dist/optics/lateral-chromatic-aberration.js.map +1 -1
- package/dist/optics/lens-psf-profile.d.ts +217 -0
- package/dist/optics/lens-psf-profile.d.ts.map +1 -0
- package/dist/optics/lens-psf-profile.js +823 -0
- package/dist/optics/lens-psf-profile.js.map +1 -0
- package/dist/optics/polygon-diffraction.d.ts +67 -0
- package/dist/optics/polygon-diffraction.d.ts.map +1 -0
- package/dist/optics/polygon-diffraction.js +145 -0
- package/dist/optics/polygon-diffraction.js.map +1 -0
- package/dist/optics/profile-contract.d.ts +42 -0
- package/dist/optics/profile-contract.d.ts.map +1 -0
- package/dist/optics/profile-contract.js +92 -0
- package/dist/optics/profile-contract.js.map +1 -0
- package/dist/optics/psf-foundation.d.ts +16 -3
- package/dist/optics/psf-foundation.d.ts.map +1 -1
- package/dist/optics/psf-foundation.js +28 -15
- package/dist/optics/psf-foundation.js.map +1 -1
- package/dist/optics/radial-distortion.d.ts +18 -0
- package/dist/optics/radial-distortion.d.ts.map +1 -1
- package/dist/optics/radial-distortion.js +18 -0
- package/dist/optics/radial-distortion.js.map +1 -1
- package/dist/optics/scene-to-sensor-irradiance.d.ts +213 -0
- package/dist/optics/scene-to-sensor-irradiance.d.ts.map +1 -0
- package/dist/optics/scene-to-sensor-irradiance.js +662 -0
- package/dist/optics/scene-to-sensor-irradiance.js.map +1 -0
- package/dist/optics/scene-to-sensor-quadrature.d.ts +63 -0
- package/dist/optics/scene-to-sensor-quadrature.d.ts.map +1 -0
- package/dist/optics/scene-to-sensor-quadrature.js +82 -0
- package/dist/optics/scene-to-sensor-quadrature.js.map +1 -0
- package/dist/optics/sensor-environment-query.d.ts +60 -0
- package/dist/optics/sensor-environment-query.d.ts.map +1 -0
- package/dist/optics/sensor-environment-query.js +50 -0
- package/dist/optics/sensor-environment-query.js.map +1 -0
- package/dist/optics/sensor-psf-quadrature.d.ts +70 -0
- package/dist/optics/sensor-psf-quadrature.d.ts.map +1 -0
- package/dist/optics/sensor-psf-quadrature.js +101 -0
- package/dist/optics/sensor-psf-quadrature.js.map +1 -0
- package/dist/optics/sensor-psf-support.d.ts +20 -0
- package/dist/optics/sensor-psf-support.d.ts.map +1 -0
- package/dist/optics/sensor-psf-support.js +13 -0
- package/dist/optics/sensor-psf-support.js.map +1 -0
- package/dist/optics/stray-light.d.ts +91 -0
- package/dist/optics/stray-light.d.ts.map +1 -0
- package/dist/optics/stray-light.js +110 -0
- package/dist/optics/stray-light.js.map +1 -0
- package/dist/optics/thin-lens.d.ts +8 -0
- package/dist/optics/thin-lens.d.ts.map +1 -1
- package/dist/optics/thin-lens.js +8 -0
- package/dist/optics/thin-lens.js.map +1 -1
- package/dist/output/capture-corrected-sdr.d.ts +49 -0
- package/dist/output/capture-corrected-sdr.d.ts.map +1 -0
- package/dist/output/capture-corrected-sdr.js +149 -0
- package/dist/output/capture-corrected-sdr.js.map +1 -0
- package/dist/output/capture-geometry.d.ts.map +1 -1
- package/dist/output/capture-geometry.js +8 -0
- package/dist/output/capture-geometry.js.map +1 -1
- package/dist/output/capture-sdr.d.ts +49 -0
- package/dist/output/capture-sdr.d.ts.map +1 -0
- package/dist/output/capture-sdr.js +90 -0
- package/dist/output/capture-sdr.js.map +1 -0
- package/dist/output/crop.d.ts +6 -0
- package/dist/output/crop.d.ts.map +1 -1
- package/dist/output/crop.js +6 -0
- package/dist/output/crop.js.map +1 -1
- package/dist/output/geometric-transforms.d.ts +137 -0
- package/dist/output/geometric-transforms.d.ts.map +1 -0
- package/dist/output/geometric-transforms.js +225 -0
- package/dist/output/geometric-transforms.js.map +1 -0
- package/dist/output/lens-corrections.d.ts +121 -0
- package/dist/output/lens-corrections.d.ts.map +1 -0
- package/dist/output/lens-corrections.js +210 -0
- package/dist/output/lens-corrections.js.map +1 -0
- package/dist/output/sdr-rendering.d.ts +81 -0
- package/dist/output/sdr-rendering.d.ts.map +1 -0
- package/dist/output/sdr-rendering.js +106 -0
- package/dist/output/sdr-rendering.js.map +1 -0
- package/dist/output/subject-framing-crop.d.ts +8 -0
- package/dist/output/subject-framing-crop.d.ts.map +1 -1
- package/dist/output/subject-framing-crop.js +8 -0
- package/dist/output/subject-framing-crop.js.map +1 -1
- package/dist/schema/camera.d.ts +6 -0
- package/dist/schema/camera.d.ts.map +1 -1
- package/dist/schema/illumination-spectral.d.ts +51 -0
- package/dist/schema/illumination-spectral.d.ts.map +1 -0
- package/dist/schema/illumination-spectral.js +132 -0
- package/dist/schema/illumination-spectral.js.map +1 -0
- package/dist/schema/illumination-temporal.d.ts +156 -0
- package/dist/schema/illumination-temporal.d.ts.map +1 -0
- package/dist/schema/illumination-temporal.js +554 -0
- package/dist/schema/illumination-temporal.js.map +1 -0
- package/dist/schema/illumination.d.ts +138 -0
- package/dist/schema/illumination.d.ts.map +1 -0
- package/dist/schema/illumination.js +483 -0
- package/dist/schema/illumination.js.map +1 -0
- package/dist/schema/scene-radiance-temporal.d.ts +107 -0
- package/dist/schema/scene-radiance-temporal.d.ts.map +1 -0
- package/dist/schema/scene-radiance-temporal.js +259 -0
- package/dist/schema/scene-radiance-temporal.js.map +1 -0
- package/dist/schema/scene-radiance.d.ts +185 -0
- package/dist/schema/scene-radiance.d.ts.map +1 -0
- package/dist/schema/scene-radiance.js +535 -0
- package/dist/schema/scene-radiance.js.map +1 -0
- package/dist/schema/scene.d.ts +7 -0
- package/dist/schema/scene.d.ts.map +1 -1
- package/dist/schema/validation.d.ts.map +1 -1
- package/dist/schema/validation.js +7 -0
- package/dist/schema/validation.js.map +1 -1
- package/dist/sensor/accumulated-charge.d.ts +199 -0
- package/dist/sensor/accumulated-charge.d.ts.map +1 -0
- package/dist/sensor/accumulated-charge.js +450 -0
- package/dist/sensor/accumulated-charge.js.map +1 -0
- package/dist/sensor/architecture.d.ts +48 -13
- package/dist/sensor/architecture.d.ts.map +1 -1
- package/dist/sensor/architecture.js +58 -16
- package/dist/sensor/architecture.js.map +1 -1
- package/dist/sensor/camera-saturation-capacity.d.ts +138 -0
- package/dist/sensor/camera-saturation-capacity.d.ts.map +1 -0
- package/dist/sensor/camera-saturation-capacity.js +356 -0
- package/dist/sensor/camera-saturation-capacity.js.map +1 -0
- package/dist/sensor/capture-color-sampling-binding.d.ts +1 -0
- package/dist/sensor/capture-color-sampling-binding.d.ts.map +1 -1
- package/dist/sensor/capture-color-sampling-binding.js +14 -0
- package/dist/sensor/capture-color-sampling-binding.js.map +1 -1
- package/dist/sensor/capture-mode-timing.d.ts +63 -0
- package/dist/sensor/capture-mode-timing.d.ts.map +1 -0
- package/dist/sensor/capture-mode-timing.js +270 -0
- package/dist/sensor/capture-mode-timing.js.map +1 -0
- package/dist/sensor/capture-mode.d.ts.map +1 -1
- package/dist/sensor/capture-mode.js +13 -0
- package/dist/sensor/capture-mode.js.map +1 -1
- package/dist/sensor/color-sampling.d.ts.map +1 -1
- package/dist/sensor/color-sampling.js +19 -0
- package/dist/sensor/color-sampling.js.map +1 -1
- package/dist/sensor/constant-rate-temporal-integration.d.ts +126 -0
- package/dist/sensor/constant-rate-temporal-integration.d.ts.map +1 -0
- package/dist/sensor/constant-rate-temporal-integration.js +382 -0
- package/dist/sensor/constant-rate-temporal-integration.js.map +1 -0
- package/dist/sensor/dark-current.d.ts +169 -0
- package/dist/sensor/dark-current.d.ts.map +1 -0
- package/dist/sensor/dark-current.js +427 -0
- package/dist/sensor/dark-current.js.map +1 -0
- package/dist/sensor/environment-photo-signal.d.ts +123 -0
- package/dist/sensor/environment-photo-signal.d.ts.map +1 -0
- package/dist/sensor/environment-photo-signal.js +186 -0
- package/dist/sensor/environment-photo-signal.js.map +1 -0
- package/dist/sensor/eqe-electron-rate.d.ts +107 -0
- package/dist/sensor/eqe-electron-rate.d.ts.map +1 -0
- package/dist/sensor/eqe-electron-rate.js +561 -0
- package/dist/sensor/eqe-electron-rate.js.map +1 -0
- package/dist/sensor/eqe-local-exposure.d.ts +65 -0
- package/dist/sensor/eqe-local-exposure.d.ts.map +1 -0
- package/dist/sensor/eqe-local-exposure.js +84 -0
- package/dist/sensor/eqe-local-exposure.js.map +1 -0
- package/dist/sensor/eqe-temporal-exposure.d.ts +55 -0
- package/dist/sensor/eqe-temporal-exposure.d.ts.map +1 -0
- package/dist/sensor/eqe-temporal-exposure.js +62 -0
- package/dist/sensor/eqe-temporal-exposure.js.map +1 -0
- package/dist/sensor/exposure-window.d.ts +14 -0
- package/dist/sensor/exposure-window.d.ts.map +1 -1
- package/dist/sensor/exposure-window.js +14 -0
- package/dist/sensor/exposure-window.js.map +1 -1
- package/dist/sensor/iso-signal-chain.d.ts +148 -0
- package/dist/sensor/iso-signal-chain.d.ts.map +1 -0
- package/dist/sensor/iso-signal-chain.js +411 -0
- package/dist/sensor/iso-signal-chain.js.map +1 -0
- package/dist/sensor/local-exposure-binding.d.ts +87 -0
- package/dist/sensor/local-exposure-binding.d.ts.map +1 -0
- package/dist/sensor/local-exposure-binding.js +214 -0
- package/dist/sensor/local-exposure-binding.js.map +1 -0
- package/dist/sensor/optical-stack.d.ts.map +1 -1
- package/dist/sensor/optical-stack.js +17 -0
- package/dist/sensor/optical-stack.js.map +1 -1
- package/dist/sensor/photon-energy.d.ts +97 -0
- package/dist/sensor/photon-energy.d.ts.map +1 -0
- package/dist/sensor/photon-energy.js +390 -0
- package/dist/sensor/photon-energy.js.map +1 -0
- package/dist/sensor/physical-charge-capacity.d.ts +130 -0
- package/dist/sensor/physical-charge-capacity.d.ts.map +1 -0
- package/dist/sensor/physical-charge-capacity.js +345 -0
- package/dist/sensor/physical-charge-capacity.js.map +1 -0
- package/dist/sensor/pixel-pitch.d.ts +6 -0
- package/dist/sensor/pixel-pitch.d.ts.map +1 -1
- package/dist/sensor/pixel-pitch.js +6 -0
- package/dist/sensor/pixel-pitch.js.map +1 -1
- package/dist/sensor/radiometry-readiness.d.ts +10 -0
- package/dist/sensor/radiometry-readiness.d.ts.map +1 -1
- package/dist/sensor/radiometry-readiness.js +10 -0
- package/dist/sensor/radiometry-readiness.js.map +1 -1
- package/dist/sensor/raw-readout.d.ts +314 -0
- package/dist/sensor/raw-readout.d.ts.map +1 -0
- package/dist/sensor/raw-readout.js +914 -0
- package/dist/sensor/raw-readout.js.map +1 -0
- package/dist/sensor/raw-reconstruction.d.ts +170 -0
- package/dist/sensor/raw-reconstruction.d.ts.map +1 -0
- package/dist/sensor/raw-reconstruction.js +424 -0
- package/dist/sensor/raw-reconstruction.js.map +1 -0
- package/dist/sensor/readout-exposure-linkage.d.ts +12 -0
- package/dist/sensor/readout-exposure-linkage.d.ts.map +1 -1
- package/dist/sensor/readout-exposure-linkage.js +12 -0
- package/dist/sensor/readout-exposure-linkage.js.map +1 -1
- package/dist/sensor/readout-timing.d.ts +13 -0
- package/dist/sensor/readout-timing.d.ts.map +1 -1
- package/dist/sensor/readout-timing.js +13 -0
- package/dist/sensor/readout-timing.js.map +1 -1
- package/dist/sensor/response-application-compatibility.d.ts +136 -0
- package/dist/sensor/response-application-compatibility.d.ts.map +1 -0
- package/dist/sensor/response-application-compatibility.js +408 -0
- package/dist/sensor/response-application-compatibility.js.map +1 -0
- package/dist/sensor/response-operating-range.d.ts +173 -0
- package/dist/sensor/response-operating-range.d.ts.map +1 -0
- package/dist/sensor/response-operating-range.js +672 -0
- package/dist/sensor/response-operating-range.js.map +1 -0
- package/dist/sensor/responsivity-photocurrent.d.ts +158 -0
- package/dist/sensor/responsivity-photocurrent.d.ts.map +1 -0
- package/dist/sensor/responsivity-photocurrent.js +644 -0
- package/dist/sensor/responsivity-photocurrent.js.map +1 -0
- package/dist/sensor/sampling-aperture.d.ts.map +1 -1
- package/dist/sensor/sampling-aperture.js +14 -0
- package/dist/sensor/sampling-aperture.js.map +1 -1
- package/dist/sensor/scene-eqe-temporal-exposure.d.ts +45 -0
- package/dist/sensor/scene-eqe-temporal-exposure.d.ts.map +1 -0
- package/dist/sensor/scene-eqe-temporal-exposure.js +64 -0
- package/dist/sensor/scene-eqe-temporal-exposure.js.map +1 -0
- package/dist/sensor/sensor-geometry.d.ts +12 -0
- package/dist/sensor/sensor-geometry.d.ts.map +1 -1
- package/dist/sensor/sensor-geometry.js +12 -0
- package/dist/sensor/sensor-geometry.js.map +1 -1
- package/dist/sensor/signal-noise.d.ts +10 -0
- package/dist/sensor/signal-noise.d.ts.map +1 -1
- package/dist/sensor/signal-noise.js +10 -0
- package/dist/sensor/signal-noise.js.map +1 -1
- package/dist/sensor/spatial-sample-reduction.d.ts +44 -1
- package/dist/sensor/spatial-sample-reduction.d.ts.map +1 -1
- package/dist/sensor/spatial-sample-reduction.js +51 -5
- package/dist/sensor/spatial-sample-reduction.js.map +1 -1
- package/dist/sensor/spatial-sampling-quadrature.d.ts +24 -0
- package/dist/sensor/spatial-sampling-quadrature.d.ts.map +1 -1
- package/dist/sensor/spatial-sampling-quadrature.js +27 -0
- package/dist/sensor/spatial-sampling-quadrature.js.map +1 -1
- package/dist/sensor/spatio-spectral-reduction.d.ts +187 -0
- package/dist/sensor/spatio-spectral-reduction.d.ts.map +1 -0
- package/dist/sensor/spatio-spectral-reduction.js +373 -0
- package/dist/sensor/spatio-spectral-reduction.js.map +1 -0
- package/dist/sensor/spectral-coverage.d.ts +24 -0
- package/dist/sensor/spectral-coverage.d.ts.map +1 -0
- package/dist/sensor/spectral-coverage.js +86 -0
- package/dist/sensor/spectral-coverage.js.map +1 -0
- package/dist/sensor/spectral-quadrature.d.ts +169 -0
- package/dist/sensor/spectral-quadrature.d.ts.map +1 -0
- package/dist/sensor/spectral-quadrature.js +542 -0
- package/dist/sensor/spectral-quadrature.js.map +1 -0
- package/dist/sensor/spectral-response.d.ts +192 -0
- package/dist/sensor/spectral-response.d.ts.map +1 -0
- package/dist/sensor/spectral-response.js +664 -0
- package/dist/sensor/spectral-response.js.map +1 -0
- package/dist/sensor/temporal-eqe-sum.d.ts +15 -0
- package/dist/sensor/temporal-eqe-sum.d.ts.map +1 -0
- package/dist/sensor/temporal-eqe-sum.js +30 -0
- package/dist/sensor/temporal-eqe-sum.js.map +1 -0
- package/dist/sensor/temporal-photo-signal.d.ts +38 -0
- package/dist/sensor/temporal-photo-signal.d.ts.map +1 -0
- package/dist/sensor/temporal-photo-signal.js +110 -0
- package/dist/sensor/temporal-photo-signal.js.map +1 -0
- package/dist/sensor/temporal-sample-binding.d.ts +6 -0
- package/dist/sensor/temporal-sample-binding.d.ts.map +1 -0
- package/dist/sensor/temporal-sample-binding.js +32 -0
- package/dist/sensor/temporal-sample-binding.js.map +1 -0
- package/dist/simulation/poc-simulation.d.ts.map +1 -1
- package/dist/simulation/poc-simulation.js +34 -11
- package/dist/simulation/poc-simulation.js.map +1 -1
- package/dist/stabilization/camera-shake.d.ts +11 -0
- package/dist/stabilization/camera-shake.d.ts.map +1 -1
- package/dist/stabilization/camera-shake.js +11 -0
- package/dist/stabilization/camera-shake.js.map +1 -1
- package/dist/stabilization/system.d.ts +218 -0
- package/dist/stabilization/system.d.ts.map +1 -0
- package/dist/stabilization/system.js +695 -0
- package/dist/stabilization/system.js.map +1 -0
- package/docs/API_REFERENCE.md +2017 -0
- package/docs/API_STYLE.md +132 -0
- package/docs/ARCHITECTURE.md +134 -24
- package/docs/AUTOMATION_COORDINATION.md +2 -0
- package/docs/CAPTURE_COLOR.md +25 -0
- package/docs/CAPTURE_CORRECTED_SDR.md +25 -0
- package/docs/CAPTURE_EXPORT_METADATA.md +27 -0
- package/docs/CAPTURE_SDR.md +20 -0
- package/docs/DEVELOPERS.md +60 -0
- package/docs/DIGITAL_OPTICS_FOUNDATION.md +69 -0
- package/docs/ENVIRONMENT_RAW_CAPTURE.md +187 -0
- package/docs/EXPORT_ACCEPTANCE.md +133 -0
- package/docs/GENERIC_TIER_PRESETS.md +269 -0
- package/docs/GEOMETRIC_PREPARATION_REUSE.md +141 -0
- package/docs/IMAGE_FORMATION.md +80 -10
- package/docs/LINEAR_CAPTURE_ENCODING.md +25 -0
- package/docs/MOTION_AND_SIGNAL.md +5 -3
- package/docs/NUMERICAL_CORRECTNESS.md +191 -0
- package/docs/PERFORMANCE_BASELINE.md +56 -0
- package/docs/PHOTOGRAPHIC_EXPORT.md +206 -0
- package/docs/PHYSICS_FOUNDATION.md +152 -5
- package/docs/POC_API.md +2 -0
- package/docs/POC_PROJECTION_REUSE.md +124 -0
- package/docs/PROCESSED_OUTPUT.md +157 -0
- package/docs/PRODUCTION_COMPOSITION.md +373 -0
- package/docs/PRODUCTION_ENVIRONMENT_CAPTURE.md +131 -0
- package/docs/PROVENANCE.md +4 -0
- package/docs/PSF_FOUNDATION.md +110 -88
- package/docs/RAW_FRAME_ENVELOPE.md +56 -0
- package/docs/RAW_FRAME_RECONSTRUCTION.md +30 -0
- package/docs/RELEASE_1_0.md +65 -0
- package/docs/RELEASE_AUDIT.md +38 -0
- package/docs/SCENE_RADIANCE_AND_ILLUMINATION.md +298 -0
- package/docs/SCENE_SENSOR_QUADRATURE.md +98 -0
- package/docs/SCENE_SENSOR_TEMPORAL_EXPOSURE.md +86 -0
- package/docs/SCIENTIFIC_ASSURANCE.md +280 -0
- package/docs/SCIENTIFIC_CONFORMANCE.md +83 -0
- package/docs/SDR_RENDERING.md +33 -0
- package/docs/SENSOR_ENVIRONMENT_QUERY.md +86 -0
- package/docs/SENSOR_EQE_LOCAL_EXPOSURE.md +104 -0
- package/docs/SENSOR_EQE_TEMPORAL_EXPOSURE.md +74 -0
- package/docs/SENSOR_PSF_QUADRATURE.md +90 -0
- package/docs/SENSOR_RAW_FRAME.md +20 -0
- package/docs/SENSOR_RAW_PRODUCER.md +77 -0
- package/docs/SIGNAL_CONFORMANCE.md +23 -0
- package/docs/SIMULATED_CAPTURE.md +65 -0
- package/docs/STABILIZATION.md +160 -17
- package/docs/TEMPORAL_PHOTO_RAW.md +83 -0
- package/docs/TIER_ACCEPTANCE.md +129 -0
- package/docs/TIER_PRESET_ACCEPTANCE.md +59 -0
- package/docs/USAGE.md +5050 -1047
- package/docs/V1_COMPOSITION_MAP.md +123 -0
- package/docs/V1_HELPER_REUSE_REVIEW.md +60 -0
- package/docs/V1_PERFORMANCE_DISPOSITION.md +88 -0
- package/docs/api/camera-equivalent-focal-length.md +53 -0
- package/docs/api/camera-field-of-view.md +119 -0
- package/docs/api/camera-projected-object-size.md +54 -0
- package/docs/api/capture-capture-export-metadata.md +107 -0
- package/docs/api/capture-environment-raw-producer.md +56 -0
- package/docs/api/capture-focus-control.md +419 -0
- package/docs/api/capture-linear-encoding.md +99 -0
- package/docs/api/capture-photographic-export.md +172 -0
- package/docs/api/capture-raw-frame-reconstruction.md +87 -0
- package/docs/api/capture-release-sequence.md +252 -0
- package/docs/api/capture-sensor-raw-frame.md +66 -0
- package/docs/api/capture-sensor-raw-producer.md +98 -0
- package/docs/api/capture-simulated-capture.md +179 -0
- package/docs/api/color-capture-color.md +122 -0
- package/docs/api/color-white-balance.md +386 -0
- package/docs/api/composition-image-formation-plan.md +825 -0
- package/docs/api/composition-plan-consumer.md +98 -0
- package/docs/api/core-calculation-result.md +220 -0
- package/docs/api/core-configuration-error.md +19 -0
- package/docs/api/core-image-formation.md +204 -0
- package/docs/api/core-scientific-assurance.md +214 -0
- package/docs/api/core-spectral-composition.md +268 -0
- package/docs/api/core-spectral.md +78 -0
- package/docs/api/core-validation.md +34 -0
- package/docs/api/core-version.md +14 -0
- package/docs/api/equipment-exposure-capabilities.md +270 -0
- package/docs/api/equipment-generic-tier-assets.md +82 -0
- package/docs/api/equipment-generic-tier-presets.md +103 -0
- package/docs/api/equipment-iso-capabilities.md +295 -0
- package/docs/api/equipment-metering-capabilities.md +126 -0
- package/docs/api/equipment-release-capabilities.md +91 -0
- package/docs/api/exports.json +5656 -0
- package/docs/api/exposure-exposure-duration-control.md +115 -0
- package/docs/api/exposure-exposure-mode-resolver.md +966 -0
- package/docs/api/exposure-exposure.md +150 -0
- package/docs/api/exposure-flash.md +327 -0
- package/docs/api/exposure-metering-scene-radiance.md +154 -0
- package/docs/api/exposure-metering-target.md +134 -0
- package/docs/api/exposure-metering-temporal.md +77 -0
- package/docs/api/exposure-metering.md +172 -0
- package/docs/api/exposure-program-line.md +64 -0
- package/docs/api/motion-camera-rotation.md +215 -0
- package/docs/api/motion-capture-rotation-inverse-mapping.md +128 -0
- package/docs/api/motion-capture-rotation-temporal-quadrature.md +127 -0
- package/docs/api/motion-capture-rotation-trajectory.md +132 -0
- package/docs/api/motion-capture-translation-parallax-temporal-quadrature.md +171 -0
- package/docs/api/motion-extended-object-projection.md +312 -0
- package/docs/api/motion-projected-motion.md +60 -0
- package/docs/api/optics-aperture.md +69 -0
- package/docs/api/optics-circle-of-confusion.md +46 -0
- package/docs/api/optics-complex-pupil-psf.md +193 -0
- package/docs/api/optics-depth-of-field.md +92 -0
- package/docs/api/optics-diffraction.md +46 -0
- package/docs/api/optics-focus-breathing.md +119 -0
- package/docs/api/optics-focus-state.md +64 -0
- package/docs/api/optics-front-of-lens-filter.md +263 -0
- package/docs/api/optics-illumination-vignetting.md +95 -0
- package/docs/api/optics-lateral-chromatic-aberration.md +225 -0
- package/docs/api/optics-lens-psf-profile.md +380 -0
- package/docs/api/optics-polygon-diffraction.md +68 -0
- package/docs/api/optics-profile-contract.md +47 -0
- package/docs/api/optics-psf-foundation.md +181 -0
- package/docs/api/optics-radial-distortion.md +194 -0
- package/docs/api/optics-scene-to-sensor-irradiance.md +371 -0
- package/docs/api/optics-scene-to-sensor-quadrature.md +78 -0
- package/docs/api/optics-sensor-environment-query.md +58 -0
- package/docs/api/optics-sensor-psf-quadrature.md +81 -0
- package/docs/api/optics-stray-light.md +109 -0
- package/docs/api/optics-thin-lens.md +53 -0
- package/docs/api/output-capture-corrected-sdr.md +71 -0
- package/docs/api/output-capture-geometry.md +500 -0
- package/docs/api/output-capture-sdr.md +69 -0
- package/docs/api/output-crop.md +47 -0
- package/docs/api/output-geometric-transforms.md +199 -0
- package/docs/api/output-lens-corrections.md +162 -0
- package/docs/api/output-sdr-rendering.md +122 -0
- package/docs/api/output-subject-framing-crop.md +59 -0
- package/docs/api/schema-camera.md +84 -0
- package/docs/api/schema-illumination-spectral.md +77 -0
- package/docs/api/schema-illumination-temporal.md +289 -0
- package/docs/api/schema-illumination.md +246 -0
- package/docs/api/schema-scene-radiance-temporal.md +215 -0
- package/docs/api/schema-scene-radiance.md +415 -0
- package/docs/api/schema-scene.md +105 -0
- package/docs/api/schema-validation.md +25 -0
- package/docs/api/sensor-accumulated-charge.md +273 -0
- package/docs/api/sensor-architecture.md +155 -0
- package/docs/api/sensor-camera-saturation-capacity.md +215 -0
- package/docs/api/sensor-capture-color-sampling-binding.md +323 -0
- package/docs/api/sensor-capture-mode-timing.md +123 -0
- package/docs/api/sensor-capture-mode.md +321 -0
- package/docs/api/sensor-color-sampling.md +228 -0
- package/docs/api/sensor-constant-rate-temporal-integration.md +152 -0
- package/docs/api/sensor-dark-current.md +227 -0
- package/docs/api/sensor-environment-photo-signal.md +77 -0
- package/docs/api/sensor-eqe-electron-rate.md +166 -0
- package/docs/api/sensor-eqe-local-exposure.md +68 -0
- package/docs/api/sensor-eqe-temporal-exposure.md +73 -0
- package/docs/api/sensor-exposure-window.md +183 -0
- package/docs/api/sensor-iso-signal-chain.md +264 -0
- package/docs/api/sensor-local-exposure-binding.md +126 -0
- package/docs/api/sensor-optical-stack.md +211 -0
- package/docs/api/sensor-photon-energy.md +149 -0
- package/docs/api/sensor-physical-charge-capacity.md +196 -0
- package/docs/api/sensor-pixel-pitch.md +41 -0
- package/docs/api/sensor-radiometry-readiness.md +240 -0
- package/docs/api/sensor-raw-readout.md +499 -0
- package/docs/api/sensor-raw-reconstruction.md +260 -0
- package/docs/api/sensor-readout-exposure-linkage.md +172 -0
- package/docs/api/sensor-readout-timing.md +209 -0
- package/docs/api/sensor-response-application-compatibility.md +256 -0
- package/docs/api/sensor-response-operating-range.md +293 -0
- package/docs/api/sensor-responsivity-photocurrent.md +245 -0
- package/docs/api/sensor-sampling-aperture.md +221 -0
- package/docs/api/sensor-scene-eqe-temporal-exposure.md +56 -0
- package/docs/api/sensor-sensor-geometry.md +143 -0
- package/docs/api/sensor-signal-noise.md +75 -0
- package/docs/api/sensor-spatial-sample-reduction.md +186 -0
- package/docs/api/sensor-spatial-sampling-quadrature.md +188 -0
- package/docs/api/sensor-spatio-spectral-reduction.md +217 -0
- package/docs/api/sensor-spectral-coverage.md +33 -0
- package/docs/api/sensor-spectral-quadrature.md +183 -0
- package/docs/api/sensor-spectral-response.md +291 -0
- package/docs/api/sensor-temporal-photo-signal.md +62 -0
- package/docs/api/simulation-poc-simulation.md +364 -0
- package/docs/api/stabilization-camera-shake.md +71 -0
- package/docs/api/stabilization-system.md +442 -0
- package/docs/benchmarks/2026-10-01-main-baseline.json +694 -0
- package/docs/benchmarks/2026-10-02-geometric-preparation-reuse.json +2190 -0
- package/docs/benchmarks/2026-10-02-poc-projection-reuse.json +2423 -0
- package/docs/benchmarks/2026-10-02-v1-environment-gc-profile.json +210 -0
- package/docs/benchmarks/2026-10-02-v1-environment-ordinary.json +187 -0
- package/docs/benchmarks/2026-10-02-v1-geometry-gc-profile.json +756 -0
- package/docs/benchmarks/2026-10-02-v1-geometry-ordinary-1.json +711 -0
- package/docs/benchmarks/2026-10-02-v1-geometry-ordinary-2.json +711 -0
- package/docs/benchmarks/2026-10-02-v1-poc-gc-profile.json +885 -0
- package/docs/benchmarks/2026-10-02-v1-poc-ordinary-1.json +868 -0
- package/docs/benchmarks/2026-10-02-v1-poc-ordinary-2.json +868 -0
- package/docs/examples/production-capture.mjs +34 -0
- package/docs/examples/production-request.json +4613 -0
- package/docs/examples/quick-start.mjs +12 -0
- package/docs/validation/documentation-fragments.json +212 -0
- package/docs/validation/release-audit-inventory.json +1306 -0
- package/docs/validation/tier-acceptance-report-v1.json +2538 -0
- package/package.json +15 -3
|
@@ -0,0 +1,462 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
/**
|
|
3
|
+
* Module boundary and integration notes.
|
|
4
|
+
* Validate an untrusted declaration and return the normalized typed contract. Unknown enum values,
|
|
5
|
+
* missing required fields and incompatible scientific data fail at this boundary. Complex pupil
|
|
6
|
+
* evaluation sums declared amplitude and phase on a bounded regular pupil grid. PSF shape is
|
|
7
|
+
* normalized separately from pupil throughput; coherent phase, pupil energy and spectral/field
|
|
8
|
+
* applicability cannot be replaced by a scalar blur radius. Numeric profiles require owned or
|
|
9
|
+
* reusable-data provenance.
|
|
10
|
+
* Evaluate a declared complex pupil with explicit amplitude/phase and sampling support; normalize PSF
|
|
11
|
+
* shape and retain pupil throughput as a separate quantity. Complex pupil evaluation sums declared
|
|
12
|
+
* amplitude and phase on a bounded regular pupil grid. PSF shape is normalized separately from pupil
|
|
13
|
+
* throughput; coherent phase, pupil energy and spectral/field applicability cannot be replaced by a
|
|
14
|
+
* scalar blur radius. Numeric profiles require owned or reusable-data provenance.
|
|
15
|
+
* @see docs/PSF_FOUNDATION.md for equations, coordinate/unit conventions, blockers and support limits.
|
|
16
|
+
*/
|
|
17
|
+
import { approximationResult } from "../core/calculation-result.js";
|
|
18
|
+
import { InvalidConfigurationError } from "../core/configuration-error.js";
|
|
19
|
+
import { parseEvidenceList } from "../core/evidence-provenance.js";
|
|
20
|
+
import { InvalidScientificInputError } from "../core/validation.js";
|
|
21
|
+
import { parseFocusPlane } from "./focus-state.js";
|
|
22
|
+
export const LENS_COMPLEX_PUPIL_PROFILE_SCHEMA_VERSION = "0.1.0";
|
|
23
|
+
function requireRecord(value, path) {
|
|
24
|
+
if (typeof value !== "object" ||
|
|
25
|
+
value === null ||
|
|
26
|
+
Array.isArray(value)) {
|
|
27
|
+
throw new InvalidConfigurationError(path + " must be an object.");
|
|
28
|
+
}
|
|
29
|
+
return value;
|
|
30
|
+
}
|
|
31
|
+
function requireNonEmptyString(value, path) {
|
|
32
|
+
if (typeof value !== "string" ||
|
|
33
|
+
value.trim().length === 0) {
|
|
34
|
+
throw new InvalidConfigurationError(path +
|
|
35
|
+
" must be a non-empty string.");
|
|
36
|
+
}
|
|
37
|
+
return value.trim();
|
|
38
|
+
}
|
|
39
|
+
function requireFinite(value, path) {
|
|
40
|
+
if (typeof value !== "number" ||
|
|
41
|
+
!Number.isFinite(value)) {
|
|
42
|
+
throw new InvalidConfigurationError(path + " must be finite.");
|
|
43
|
+
}
|
|
44
|
+
return value;
|
|
45
|
+
}
|
|
46
|
+
function requirePositiveFinite(value, path) {
|
|
47
|
+
const parsed = requireFinite(value, path);
|
|
48
|
+
if (parsed <= 0) {
|
|
49
|
+
throw new InvalidConfigurationError(path +
|
|
50
|
+
" must be greater than zero.");
|
|
51
|
+
}
|
|
52
|
+
return parsed;
|
|
53
|
+
}
|
|
54
|
+
function requireUnitInterval(value, path) {
|
|
55
|
+
const parsed = requireFinite(value, path);
|
|
56
|
+
if (parsed < 0 ||
|
|
57
|
+
parsed > 1) {
|
|
58
|
+
throw new InvalidConfigurationError(path +
|
|
59
|
+
" must lie from zero through one.");
|
|
60
|
+
}
|
|
61
|
+
return parsed;
|
|
62
|
+
}
|
|
63
|
+
function requirePositiveSafeInteger(value, path) {
|
|
64
|
+
if (typeof value !== "number" ||
|
|
65
|
+
!Number.isSafeInteger(value) ||
|
|
66
|
+
value <= 0) {
|
|
67
|
+
throw new InvalidConfigurationError(path +
|
|
68
|
+
" must be a positive safe integer.");
|
|
69
|
+
}
|
|
70
|
+
return value;
|
|
71
|
+
}
|
|
72
|
+
function requireNonNegativeSafeInteger(value, path) {
|
|
73
|
+
if (typeof value !== "number" ||
|
|
74
|
+
!Number.isSafeInteger(value) ||
|
|
75
|
+
value < 0) {
|
|
76
|
+
throw new InvalidConfigurationError(path +
|
|
77
|
+
" must be a non-negative safe integer.");
|
|
78
|
+
}
|
|
79
|
+
return value;
|
|
80
|
+
}
|
|
81
|
+
function parseStatus(value, path) {
|
|
82
|
+
if (value !== "calibrated" &&
|
|
83
|
+
value !== "approximation") {
|
|
84
|
+
throw new InvalidConfigurationError(path + " is invalid.");
|
|
85
|
+
}
|
|
86
|
+
return value;
|
|
87
|
+
}
|
|
88
|
+
function parseUncertainty(value, path) {
|
|
89
|
+
const record = requireRecord(value, path);
|
|
90
|
+
if (record.kind === "relative") {
|
|
91
|
+
const fraction = requireFinite(record.fraction, path + ".fraction");
|
|
92
|
+
if (fraction < 0) {
|
|
93
|
+
throw new InvalidConfigurationError(path +
|
|
94
|
+
".fraction must be nonnegative.");
|
|
95
|
+
}
|
|
96
|
+
return {
|
|
97
|
+
kind: "relative",
|
|
98
|
+
fraction,
|
|
99
|
+
basis: requireNonEmptyString(record.basis, path + ".basis")
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
if (record.kind ===
|
|
103
|
+
"not-quantified") {
|
|
104
|
+
return {
|
|
105
|
+
kind: "not-quantified",
|
|
106
|
+
limitation: requireNonEmptyString(record.limitation, path +
|
|
107
|
+
".limitation")
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
throw new InvalidConfigurationError(path + ".kind is invalid.");
|
|
111
|
+
}
|
|
112
|
+
function parseLimitations(value, path) {
|
|
113
|
+
if (!Array.isArray(value)) {
|
|
114
|
+
throw new InvalidConfigurationError(path + " must be an array.");
|
|
115
|
+
}
|
|
116
|
+
const parsed = value.map((entry, index) => requireNonEmptyString(entry, path +
|
|
117
|
+
"[" +
|
|
118
|
+
index +
|
|
119
|
+
"]"));
|
|
120
|
+
if (new Set(parsed).size !==
|
|
121
|
+
parsed.length) {
|
|
122
|
+
throw new InvalidConfigurationError(path +
|
|
123
|
+
" must not contain duplicates.");
|
|
124
|
+
}
|
|
125
|
+
return parsed;
|
|
126
|
+
}
|
|
127
|
+
function parseGrid(value) {
|
|
128
|
+
const record = requireRecord(value, "lensComplexPupil.grid");
|
|
129
|
+
const widthSamples = requirePositiveSafeInteger(record.widthSamples, "lensComplexPupil.grid.widthSamples");
|
|
130
|
+
const heightSamples = requirePositiveSafeInteger(record.heightSamples, "lensComplexPupil.grid.heightSamples");
|
|
131
|
+
const total = widthSamples *
|
|
132
|
+
heightSamples;
|
|
133
|
+
if (!Number.isSafeInteger(total) ||
|
|
134
|
+
total > 4096) {
|
|
135
|
+
throw new InvalidConfigurationError("lensComplexPupil grid must contain at most 4096 samples.");
|
|
136
|
+
}
|
|
137
|
+
const centerSampleX = requireNonNegativeSafeInteger(record.centerSampleX, "lensComplexPupil.grid.centerSampleX");
|
|
138
|
+
const centerSampleY = requireNonNegativeSafeInteger(record.centerSampleY, "lensComplexPupil.grid.centerSampleY");
|
|
139
|
+
if (centerSampleX >=
|
|
140
|
+
widthSamples ||
|
|
141
|
+
centerSampleY >=
|
|
142
|
+
heightSamples) {
|
|
143
|
+
throw new InvalidConfigurationError("lensComplexPupil grid center must lie within the pupil array.");
|
|
144
|
+
}
|
|
145
|
+
if (!Array.isArray(record.relativeAmplitude) ||
|
|
146
|
+
record.relativeAmplitude
|
|
147
|
+
.length !== total) {
|
|
148
|
+
throw new InvalidConfigurationError("lensComplexPupil.grid.relativeAmplitude length must equal widthSamples × heightSamples.");
|
|
149
|
+
}
|
|
150
|
+
if (!Array.isArray(record
|
|
151
|
+
.opticalPathDifferenceMicrometers) ||
|
|
152
|
+
record
|
|
153
|
+
.opticalPathDifferenceMicrometers
|
|
154
|
+
.length !== total) {
|
|
155
|
+
throw new InvalidConfigurationError("lensComplexPupil.grid.opticalPathDifferenceMicrometers length must equal widthSamples × heightSamples.");
|
|
156
|
+
}
|
|
157
|
+
const relativeAmplitude = record.relativeAmplitude.map((entry, index) => requireUnitInterval(entry, "lensComplexPupil.grid.relativeAmplitude[" +
|
|
158
|
+
index +
|
|
159
|
+
"]"));
|
|
160
|
+
if (!relativeAmplitude.some((value) => value > 0)) {
|
|
161
|
+
throw new InvalidConfigurationError("lensComplexPupil must contain at least one non-zero pupil-amplitude sample.");
|
|
162
|
+
}
|
|
163
|
+
const opd = record
|
|
164
|
+
.opticalPathDifferenceMicrometers
|
|
165
|
+
.map((entry, index) => requireFinite(entry, "lensComplexPupil.grid.opticalPathDifferenceMicrometers[" +
|
|
166
|
+
index +
|
|
167
|
+
"]"));
|
|
168
|
+
return {
|
|
169
|
+
widthSamples,
|
|
170
|
+
heightSamples,
|
|
171
|
+
pupilSamplePitchMmX: requirePositiveFinite(record
|
|
172
|
+
.pupilSamplePitchMmX, "lensComplexPupil.grid.pupilSamplePitchMmX"),
|
|
173
|
+
pupilSamplePitchMmY: requirePositiveFinite(record
|
|
174
|
+
.pupilSamplePitchMmY, "lensComplexPupil.grid.pupilSamplePitchMmY"),
|
|
175
|
+
centerSampleX,
|
|
176
|
+
centerSampleY,
|
|
177
|
+
relativeAmplitude,
|
|
178
|
+
opticalPathDifferenceMicrometers: opd
|
|
179
|
+
};
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Validate an untrusted declaration and return the normalized typed contract. Unknown enum values,
|
|
183
|
+
* missing required fields and incompatible scientific data fail at this boundary.
|
|
184
|
+
*
|
|
185
|
+
* Complex pupil evaluation sums declared amplitude and phase on a bounded regular pupil grid. PSF
|
|
186
|
+
* shape is normalized separately from pupil throughput; coherent phase, pupil energy and
|
|
187
|
+
* spectral/field applicability cannot be replaced by a scalar blur radius. Numeric profiles require
|
|
188
|
+
* owned or reusable-data provenance.
|
|
189
|
+
* @param value - unknown. Treated as untrusted data; static typing alone is not validation.
|
|
190
|
+
* @returns LensComplexPupilProfile. Return shape and scientific status are explicit; no calibration is inferred from successful execution.
|
|
191
|
+
*
|
|
192
|
+
* @see docs/API_REFERENCE.md for the root export and exact type graph.
|
|
193
|
+
*/
|
|
194
|
+
export function parseLensComplexPupilProfile(value) {
|
|
195
|
+
const record = requireRecord(value, "lensComplexPupil");
|
|
196
|
+
if (record.schemaVersion !==
|
|
197
|
+
LENS_COMPLEX_PUPIL_PROFILE_SCHEMA_VERSION) {
|
|
198
|
+
throw new InvalidConfigurationError('lensComplexPupil.schemaVersion must be "' +
|
|
199
|
+
LENS_COMPLEX_PUPIL_PROFILE_SCHEMA_VERSION +
|
|
200
|
+
'".');
|
|
201
|
+
}
|
|
202
|
+
if (record.opticalDomain !==
|
|
203
|
+
"lens-primary-optical-path-only" ||
|
|
204
|
+
record.representation !==
|
|
205
|
+
"complex-pupil-amplitude-plus-opd" ||
|
|
206
|
+
record.pupilCoordinateSystem !==
|
|
207
|
+
"pupil-plane-metric-aligned-to-image-plane" ||
|
|
208
|
+
record.imageFieldAxes !==
|
|
209
|
+
"+X right, +Y up" ||
|
|
210
|
+
record.amplitudeMeaning !==
|
|
211
|
+
"relative-complex-pupil-amplitude-shape" ||
|
|
212
|
+
record.wavefrontMeaning !==
|
|
213
|
+
"optical-path-difference-micrometers" ||
|
|
214
|
+
record.throughputOwnership !==
|
|
215
|
+
"separate-relative-pupil-throughput-factor" ||
|
|
216
|
+
record.kernelEnergyNormalization !==
|
|
217
|
+
"unit-energy-shape" ||
|
|
218
|
+
record.propagationModel !==
|
|
219
|
+
"scalar-fraunhofer-discrete-reference") {
|
|
220
|
+
throw new InvalidConfigurationError("lensComplexPupil representation/coordinate/energy semantics are invalid.");
|
|
221
|
+
}
|
|
222
|
+
if (record.sensorOpticalStackIncluded !==
|
|
223
|
+
false ||
|
|
224
|
+
record.sensorSamplingIncluded !==
|
|
225
|
+
false ||
|
|
226
|
+
record.reconstructionIncluded !==
|
|
227
|
+
false ||
|
|
228
|
+
record.strayLightIncluded !==
|
|
229
|
+
false) {
|
|
230
|
+
throw new InvalidConfigurationError("V1 complex pupil profiles must exclude sensor/reconstruction/stray-light effects.");
|
|
231
|
+
}
|
|
232
|
+
const status = parseStatus(record.scientificStatus, "lensComplexPupil.scientificStatus");
|
|
233
|
+
const uncertainty = parseUncertainty(record.uncertainty, "lensComplexPupil.uncertainty");
|
|
234
|
+
if (status === "calibrated" &&
|
|
235
|
+
uncertainty.kind ===
|
|
236
|
+
"not-quantified") {
|
|
237
|
+
throw new InvalidConfigurationError("Calibrated complex-pupil profiles must declare quantified relative uncertainty.");
|
|
238
|
+
}
|
|
239
|
+
const context = requireRecord(record.context, "lensComplexPupil.context");
|
|
240
|
+
const field = requireRecord(context.fieldPointMm, "lensComplexPupil.context.fieldPointMm");
|
|
241
|
+
const response = requireRecord(record.responseIncludes, "lensComplexPupil.responseIncludes");
|
|
242
|
+
if (response.diffraction !==
|
|
243
|
+
true ||
|
|
244
|
+
typeof response.aberration !==
|
|
245
|
+
"boolean" ||
|
|
246
|
+
typeof response.defocus !==
|
|
247
|
+
"boolean" ||
|
|
248
|
+
typeof response.pupilClippingShape !==
|
|
249
|
+
"boolean") {
|
|
250
|
+
throw new InvalidConfigurationError("lensComplexPupil.responseIncludes is invalid; diffraction must be included in this pupil propagation path.");
|
|
251
|
+
}
|
|
252
|
+
return {
|
|
253
|
+
schemaVersion: LENS_COMPLEX_PUPIL_PROFILE_SCHEMA_VERSION,
|
|
254
|
+
profileId: requireNonEmptyString(record.profileId, "lensComplexPupil.profileId"),
|
|
255
|
+
profileVersion: requireNonEmptyString(record.profileVersion, "lensComplexPupil.profileVersion"),
|
|
256
|
+
scientificStatus: status,
|
|
257
|
+
opticalDomain: "lens-primary-optical-path-only",
|
|
258
|
+
representation: "complex-pupil-amplitude-plus-opd",
|
|
259
|
+
pupilCoordinateSystem: "pupil-plane-metric-aligned-to-image-plane",
|
|
260
|
+
imageFieldAxes: "+X right, +Y up",
|
|
261
|
+
amplitudeMeaning: "relative-complex-pupil-amplitude-shape",
|
|
262
|
+
wavefrontMeaning: "optical-path-difference-micrometers",
|
|
263
|
+
throughputOwnership: "separate-relative-pupil-throughput-factor",
|
|
264
|
+
kernelEnergyNormalization: "unit-energy-shape",
|
|
265
|
+
propagationModel: "scalar-fraunhofer-discrete-reference",
|
|
266
|
+
context: {
|
|
267
|
+
focalLengthMm: requirePositiveFinite(context.focalLengthMm, "lensComplexPupil.context.focalLengthMm"),
|
|
268
|
+
focus: parseFocusPlane(context.focus),
|
|
269
|
+
apertureFNumber: requirePositiveFinite(context.apertureFNumber, "lensComplexPupil.context.apertureFNumber"),
|
|
270
|
+
fieldPointMm: {
|
|
271
|
+
x: requireFinite(field.x, "lensComplexPupil.context.fieldPointMm.x"),
|
|
272
|
+
y: requireFinite(field.y, "lensComplexPupil.context.fieldPointMm.y")
|
|
273
|
+
},
|
|
274
|
+
wavelengthNm: requirePositiveFinite(context.wavelengthNm, "lensComplexPupil.context.wavelengthNm"),
|
|
275
|
+
signedDefocusImagePlaneMicrometers: requireFinite(context
|
|
276
|
+
.signedDefocusImagePlaneMicrometers, "lensComplexPupil.context.signedDefocusImagePlaneMicrometers")
|
|
277
|
+
},
|
|
278
|
+
responseIncludes: {
|
|
279
|
+
diffraction: true,
|
|
280
|
+
aberration: response.aberration,
|
|
281
|
+
defocus: response.defocus,
|
|
282
|
+
pupilClippingShape: response
|
|
283
|
+
.pupilClippingShape
|
|
284
|
+
},
|
|
285
|
+
relativePupilThroughputFactor: requireUnitInterval(record
|
|
286
|
+
.relativePupilThroughputFactor, "lensComplexPupil.relativePupilThroughputFactor"),
|
|
287
|
+
grid: parseGrid(record.grid),
|
|
288
|
+
sensorOpticalStackIncluded: false,
|
|
289
|
+
sensorSamplingIncluded: false,
|
|
290
|
+
reconstructionIncluded: false,
|
|
291
|
+
strayLightIncluded: false,
|
|
292
|
+
evidence: parseEvidenceList(record.evidence, "lensComplexPupil.evidence"),
|
|
293
|
+
uncertainty,
|
|
294
|
+
limitations: parseLimitations(record.limitations, "lensComplexPupil.limitations")
|
|
295
|
+
};
|
|
296
|
+
}
|
|
297
|
+
function pupilComplexValue(amplitude, opdMicrometers, wavelengthMicrometers) {
|
|
298
|
+
const phase = 2 *
|
|
299
|
+
Math.PI *
|
|
300
|
+
opdMicrometers /
|
|
301
|
+
wavelengthMicrometers;
|
|
302
|
+
return {
|
|
303
|
+
re: amplitude *
|
|
304
|
+
Math.cos(phase),
|
|
305
|
+
im: amplitude *
|
|
306
|
+
Math.sin(phase)
|
|
307
|
+
};
|
|
308
|
+
}
|
|
309
|
+
function calculateDiscreteFraunhoferKernel(profile) {
|
|
310
|
+
const grid = profile.grid;
|
|
311
|
+
const width = grid.widthSamples;
|
|
312
|
+
const height = grid.heightSamples;
|
|
313
|
+
const wavelengthMicrometers = profile.context
|
|
314
|
+
.wavelengthNm /
|
|
315
|
+
1000;
|
|
316
|
+
const wavelengthMm = profile.context
|
|
317
|
+
.wavelengthNm /
|
|
318
|
+
1_000_000;
|
|
319
|
+
const pupil = grid.relativeAmplitude.map((amplitude, index) => pupilComplexValue(amplitude, grid
|
|
320
|
+
.opticalPathDifferenceMicrometers[index], wavelengthMicrometers));
|
|
321
|
+
const intensity = new Array(width * height).fill(0);
|
|
322
|
+
for (let outY = 0; outY < height; outY += 1) {
|
|
323
|
+
const ky = outY -
|
|
324
|
+
grid.centerSampleY;
|
|
325
|
+
for (let outX = 0; outX < width; outX += 1) {
|
|
326
|
+
const kx = outX -
|
|
327
|
+
grid.centerSampleX;
|
|
328
|
+
let re = 0;
|
|
329
|
+
let im = 0;
|
|
330
|
+
for (let y = 0; y < height; y += 1) {
|
|
331
|
+
const py = y -
|
|
332
|
+
grid.centerSampleY;
|
|
333
|
+
for (let x = 0; x < width; x += 1) {
|
|
334
|
+
const px = x -
|
|
335
|
+
grid.centerSampleX;
|
|
336
|
+
const source = pupil[y * width +
|
|
337
|
+
x];
|
|
338
|
+
const angle = -2 *
|
|
339
|
+
Math.PI *
|
|
340
|
+
(kx * px /
|
|
341
|
+
width +
|
|
342
|
+
ky * py /
|
|
343
|
+
height);
|
|
344
|
+
const cos = Math.cos(angle);
|
|
345
|
+
const sin = Math.sin(angle);
|
|
346
|
+
re +=
|
|
347
|
+
source.re *
|
|
348
|
+
cos -
|
|
349
|
+
source.im *
|
|
350
|
+
sin;
|
|
351
|
+
im +=
|
|
352
|
+
source.re *
|
|
353
|
+
sin +
|
|
354
|
+
source.im *
|
|
355
|
+
cos;
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
intensity[outY * width +
|
|
359
|
+
outX] =
|
|
360
|
+
re * re +
|
|
361
|
+
im * im;
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
const sum = intensity.reduce((acc, value) => acc + value, 0);
|
|
365
|
+
if (!Number.isFinite(sum) ||
|
|
366
|
+
sum <= 0) {
|
|
367
|
+
throw new InvalidScientificInputError("Complex-pupil propagation must produce finite positive PSF energy.");
|
|
368
|
+
}
|
|
369
|
+
const normalized = intensity.map((value) => value / sum);
|
|
370
|
+
const samplePitchMmX = wavelengthMm *
|
|
371
|
+
profile.context
|
|
372
|
+
.focalLengthMm /
|
|
373
|
+
(width *
|
|
374
|
+
grid
|
|
375
|
+
.pupilSamplePitchMmX);
|
|
376
|
+
const samplePitchMmY = wavelengthMm *
|
|
377
|
+
profile.context
|
|
378
|
+
.focalLengthMm /
|
|
379
|
+
(height *
|
|
380
|
+
grid
|
|
381
|
+
.pupilSamplePitchMmY);
|
|
382
|
+
if (!Number.isFinite(samplePitchMmX) ||
|
|
383
|
+
!Number.isFinite(samplePitchMmY) ||
|
|
384
|
+
samplePitchMmX <= 0 ||
|
|
385
|
+
samplePitchMmY <= 0) {
|
|
386
|
+
throw new InvalidScientificInputError("Complex-pupil PSF sample pitch must remain finite and positive.");
|
|
387
|
+
}
|
|
388
|
+
return {
|
|
389
|
+
widthSamples: width,
|
|
390
|
+
heightSamples: height,
|
|
391
|
+
samplePitchMicrometersX: samplePitchMmX *
|
|
392
|
+
1000,
|
|
393
|
+
samplePitchMicrometersY: samplePitchMmY *
|
|
394
|
+
1000,
|
|
395
|
+
centerSampleX: grid.centerSampleX,
|
|
396
|
+
centerSampleY: grid.centerSampleY,
|
|
397
|
+
normalizedIntensity: normalized
|
|
398
|
+
};
|
|
399
|
+
}
|
|
400
|
+
/**
|
|
401
|
+
* Evaluate a declared complex pupil with explicit amplitude/phase and sampling support; normalize PSF
|
|
402
|
+
* shape and retain pupil throughput as a separate quantity.
|
|
403
|
+
*
|
|
404
|
+
* Complex pupil evaluation sums declared amplitude and phase on a bounded regular pupil grid. PSF
|
|
405
|
+
* shape is normalized separately from pupil throughput; coherent phase, pupil energy and
|
|
406
|
+
* spectral/field applicability cannot be replaced by a scalar blur radius. Numeric profiles require
|
|
407
|
+
* owned or reusable-data provenance.
|
|
408
|
+
* @param input - CalculateLensComplexPupilPsfInput. See the linked contract for coordinate, unit and profile binding semantics.
|
|
409
|
+
* @returns CalculationResult<LensComplexPupilPsf>. Return shape and scientific status are explicit; no calibration is inferred from successful execution.
|
|
410
|
+
*
|
|
411
|
+
* @see docs/API_REFERENCE.md for the root export and exact type graph.
|
|
412
|
+
*/
|
|
413
|
+
export function calculateLensComplexPupilPsf(input) {
|
|
414
|
+
const profile = parseLensComplexPupilProfile(input.profile);
|
|
415
|
+
const kernel = calculateDiscreteFraunhoferKernel(profile);
|
|
416
|
+
return approximationResult({
|
|
417
|
+
profileId: profile.profileId,
|
|
418
|
+
profileVersion: profile.profileVersion,
|
|
419
|
+
scientificStatus: profile.scientificStatus,
|
|
420
|
+
context: {
|
|
421
|
+
...profile.context,
|
|
422
|
+
focus: {
|
|
423
|
+
...profile.context.focus
|
|
424
|
+
},
|
|
425
|
+
fieldPointMm: {
|
|
426
|
+
...profile.context
|
|
427
|
+
.fieldPointMm
|
|
428
|
+
}
|
|
429
|
+
},
|
|
430
|
+
kernel,
|
|
431
|
+
relativePupilThroughputFactor: profile
|
|
432
|
+
.relativePupilThroughputFactor,
|
|
433
|
+
throughputOwnership: "separate-relative-pupil-throughput-factor",
|
|
434
|
+
diffractionAndAberrationJointlyEvaluated: true,
|
|
435
|
+
pupilClippingShapeIncluded: profile
|
|
436
|
+
.responseIncludes
|
|
437
|
+
.pupilClippingShape,
|
|
438
|
+
pupilClippingThroughputAppliedToKernel: false,
|
|
439
|
+
scalarFraunhoferReference: true,
|
|
440
|
+
full2dOrientationPreserved: true,
|
|
441
|
+
geometricDistortionModified: false,
|
|
442
|
+
lateralChromaticPositionShiftApplied: false,
|
|
443
|
+
sensorOpticalStackIncluded: false,
|
|
444
|
+
sensorSamplingIncluded: false,
|
|
445
|
+
reconstructionIncluded: false,
|
|
446
|
+
strayLightIncluded: false,
|
|
447
|
+
scalarSharpnessScoreProduced: false,
|
|
448
|
+
componentEvidence: {
|
|
449
|
+
pupilProfile: profile.evidence
|
|
450
|
+
},
|
|
451
|
+
uncertainty: profile.uncertainty
|
|
452
|
+
}, "lens-complex-pupil-fraunhofer-psf", "1.0.0", [
|
|
453
|
+
"The reference evaluator performs deterministic scalar Fraunhofer propagation of one explicit complex pupil amplitude plus optical-path-difference grid.",
|
|
454
|
+
"Diffraction and aberration phase are evaluated together in the same pupil propagation; callers must not stack an independent diffraction blur over this result.",
|
|
455
|
+
"The output PSF is unit-energy normalized. The explicit relativePupilThroughputFactor is not multiplied into the kernel and remains owned by the separate optical-throughput path.",
|
|
456
|
+
"Pupil amplitude shape can represent mechanical clipping/cat-eye geometry without silently encoding unknown transmission loss.",
|
|
457
|
+
"The pupil and image-plane axes preserve full 2D orientation; no radial or sagittal/tangential averaging is imposed.",
|
|
458
|
+
"This scalar Fraunhofer grid is a bounded reference approximation, not a full vector electromagnetic, polarization, stray-light or sensor-system model.",
|
|
459
|
+
"Sensor OLPF, microlens, CFA, sampling and reconstruction are downstream and excluded."
|
|
460
|
+
]);
|
|
461
|
+
}
|
|
462
|
+
//# sourceMappingURL=complex-pupil-psf.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"complex-pupil-psf.js","sourceRoot":"","sources":["../../src/optics/complex-pupil-psf.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Module boundary and integration notes.
|
|
3
|
+
* Calculates thin-lens depth-of-field limits using the conventional hyperfocal-distance formulation.
|
|
4
|
+
* The model is geometric and does not include diffraction, aberrations, focus breathing, pupil
|
|
5
|
+
* magnification, or macro/high-magnification effects.
|
|
6
|
+
* Calculates the geometric defocus-circle diameter at the sensor plane for a subject plane away from
|
|
7
|
+
* the selected focus plane.
|
|
8
|
+
* @see docs/PHYSICS_FOUNDATION.md for equations, coordinate/unit conventions, blockers and support
|
|
9
|
+
* limits.
|
|
10
|
+
*/
|
|
1
11
|
import { type CalculationResult } from "../core/calculation-result.js";
|
|
2
12
|
export interface CalculateDepthOfFieldInput {
|
|
3
13
|
/** Lens focal length in millimetres. */
|
|
@@ -50,4 +60,12 @@ export interface DefocusCircle {
|
|
|
50
60
|
* @returns Geometric blur-circle diameter.
|
|
51
61
|
*/
|
|
52
62
|
export declare function calculateDefocusCircle(input: CalculateDefocusCircleInput): CalculationResult<DefocusCircle>;
|
|
63
|
+
/** @internal Immutable request-local identity; never a root public cache/API. */
|
|
64
|
+
export interface ResolvedDefocusFocusProjection {
|
|
65
|
+
readonly focalLengthMm: number;
|
|
66
|
+
readonly focusDistanceM: number;
|
|
67
|
+
readonly imageDistanceMm: number;
|
|
68
|
+
}
|
|
69
|
+
/** @internal Reuses a projection already calculated for this exact POC request. */
|
|
70
|
+
export declare function calculateDefocusCircleUsingFocusProjection(input: CalculateDefocusCircleInput, projection?: ResolvedDefocusFocusProjection): CalculationResult<DefocusCircle>;
|
|
53
71
|
//# sourceMappingURL=depth-of-field.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"depth-of-field.d.ts","sourceRoot":"","sources":["../../src/optics/depth-of-field.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,KAAK,iBAAiB,EACvB,MAAM,+BAA+B,CAAC;AAOvC,MAAM,WAAW,0BAA0B;IACzC,wCAAwC;IACxC,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,oDAAoD;IACpD,cAAc,EAAE,MAAM,CAAC;IACvB,8DAA8D;IAC9D,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,YAAY;IAC3B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,6CAA6C;IAC7C,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,qDAAqD;IACrD,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;CACnC;AAED;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,0BAA0B,GAChC,iBAAiB,CAAC,YAAY,CAAC,CA6CjC;AAED,MAAM,WAAW,2BAA2B;IAC1C,wCAAwC;IACxC,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,0DAA0D;IAC1D,cAAc,EAAE,MAAM,CAAC;IACvB,4DAA4D;IAC5D,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,aAAa;IAC5B,yEAAyE;IACzE,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,2BAA2B,GACjC,iBAAiB,CAAC,aAAa,CAAC,
|
|
1
|
+
{"version":3,"file":"depth-of-field.d.ts","sourceRoot":"","sources":["../../src/optics/depth-of-field.ts"],"names":[],"mappings":"AAEA;;;;;;;;;GASG;AAEH,OAAO,EAEL,KAAK,iBAAiB,EACvB,MAAM,+BAA+B,CAAC;AAOvC,MAAM,WAAW,0BAA0B;IACzC,wCAAwC;IACxC,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,oDAAoD;IACpD,cAAc,EAAE,MAAM,CAAC;IACvB,8DAA8D;IAC9D,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,YAAY;IAC3B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,6CAA6C;IAC7C,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,qDAAqD;IACrD,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;CACnC;AAED;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,0BAA0B,GAChC,iBAAiB,CAAC,YAAY,CAAC,CA6CjC;AAED,MAAM,WAAW,2BAA2B;IAC1C,wCAAwC;IACxC,aAAa,EAAE,MAAM,CAAC;IACtB,gBAAgB;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,0DAA0D;IAC1D,cAAc,EAAE,MAAM,CAAC;IACvB,4DAA4D;IAC5D,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,aAAa;IAC5B,yEAAyE;IACzE,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,2BAA2B,GACjC,iBAAiB,CAAC,aAAa,CAAC,CAElC;AAED,iFAAiF;AACjF,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;CAClC;AAED,mFAAmF;AACnF,wBAAgB,0CAA0C,CACxD,KAAK,EAAE,2BAA2B,EAClC,UAAU,CAAC,EAAE,8BAA8B,GAC1C,iBAAiB,CAAC,aAAa,CAAC,CAgDlC"}
|
|
@@ -1,4 +1,14 @@
|
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
/**
|
|
3
|
+
* Module boundary and integration notes.
|
|
4
|
+
* Calculates thin-lens depth-of-field limits using the conventional hyperfocal-distance formulation.
|
|
5
|
+
* The model is geometric and does not include diffraction, aberrations, focus breathing, pupil
|
|
6
|
+
* magnification, or macro/high-magnification effects.
|
|
7
|
+
* Calculates the geometric defocus-circle diameter at the sensor plane for a subject plane away from
|
|
8
|
+
* the selected focus plane.
|
|
9
|
+
* @see docs/PHYSICS_FOUNDATION.md for equations, coordinate/unit conventions, blockers and support
|
|
10
|
+
* limits.
|
|
11
|
+
*/
|
|
2
12
|
import { calculatedResult } from "../core/calculation-result.js";
|
|
3
13
|
import { InvalidScientificInputError, requirePositiveFinite } from "../core/validation.js";
|
|
4
14
|
import { calculateThinLensImageDistance } from "./thin-lens.js";
|
|
@@ -50,6 +60,10 @@ export function calculateDepthOfField(input) {
|
|
|
50
60
|
* @returns Geometric blur-circle diameter.
|
|
51
61
|
*/
|
|
52
62
|
export function calculateDefocusCircle(input) {
|
|
63
|
+
return calculateDefocusCircleUsingFocusProjection(input);
|
|
64
|
+
}
|
|
65
|
+
/** @internal Reuses a projection already calculated for this exact POC request. */
|
|
66
|
+
export function calculateDefocusCircleUsingFocusProjection(input, projection) {
|
|
53
67
|
requirePositiveFinite("focalLengthMm", input.focalLengthMm);
|
|
54
68
|
requirePositiveFinite("aperture", input.aperture);
|
|
55
69
|
requirePositiveFinite("focusDistanceM", input.focusDistanceM);
|
|
@@ -57,10 +71,21 @@ export function calculateDefocusCircle(input) {
|
|
|
57
71
|
let focusImageDistanceMm;
|
|
58
72
|
let subjectImageDistanceMm;
|
|
59
73
|
try {
|
|
60
|
-
|
|
61
|
-
focalLengthMm
|
|
62
|
-
|
|
63
|
-
|
|
74
|
+
if (projection !== undefined) {
|
|
75
|
+
if (projection.focalLengthMm !== input.focalLengthMm ||
|
|
76
|
+
projection.focusDistanceM !== input.focusDistanceM ||
|
|
77
|
+
input.focusDistanceM * 1000 <= input.focalLengthMm) {
|
|
78
|
+
throw new InvalidScientificInputError("Resolved focus projection identity differs from the request.");
|
|
79
|
+
}
|
|
80
|
+
requirePositiveFinite("resolvedFocusImageDistanceMm", projection.imageDistanceMm);
|
|
81
|
+
focusImageDistanceMm = projection.imageDistanceMm;
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
focusImageDistanceMm = calculateThinLensImageDistance({
|
|
85
|
+
focalLengthMm: input.focalLengthMm,
|
|
86
|
+
objectDistanceM: input.focusDistanceM
|
|
87
|
+
}).value.imageDistanceMm;
|
|
88
|
+
}
|
|
64
89
|
subjectImageDistanceMm = calculateThinLensImageDistance({
|
|
65
90
|
focalLengthMm: input.focalLengthMm,
|
|
66
91
|
objectDistanceM: input.subjectDistanceM
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"depth-of-field.js","sourceRoot":"","sources":["../../src/optics/depth-of-field.ts"],"names":[],"mappings":"AAAA,sCAAsC;AAEtC,OAAO,EACL,gBAAgB,EAEjB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACL,2BAA2B,EAC3B,qBAAqB,EACtB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,8BAA8B,EAAE,MAAM,gBAAgB,CAAC;AAsBhE;;;;;;;;;GASG;AACH,MAAM,UAAU,qBAAqB,CACnC,KAAiC;IAEjC,qBAAqB,CAAC,eAAe,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;IAC5D,qBAAqB,CAAC,UAAU,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;IAClD,qBAAqB,CAAC,gBAAgB,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC;IAC9D,qBAAqB,CAAC,qBAAqB,EAAE,KAAK,CAAC,mBAAmB,CAAC,CAAC;IAExE,MAAM,eAAe,GAAG,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC;IACpD,IAAI,eAAe,IAAI,KAAK,CAAC,aAAa,EAAE,CAAC;QAC3C,MAAM,IAAI,2BAA2B,CACnC,oEAAoE,CACrE,CAAC;IACJ,CAAC;IAED,MAAM,oBAAoB,GACxB,CAAC,KAAK,CAAC,aAAa,GAAG,KAAK,CAAC,aAAa,CAAC;QACzC,CAAC,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC,mBAAmB,CAAC;QAC9C,KAAK,CAAC,aAAa,CAAC;IAEtB,MAAM,aAAa,GAAG,eAAe,GAAG,KAAK,CAAC,aAAa,CAAC;IAC5D,MAAM,WAAW,GACf,CAAC,oBAAoB,GAAG,eAAe,CAAC;QACxC,CAAC,oBAAoB,GAAG,aAAa,CAAC,CAAC;IAEzC,MAAM,cAAc,GAAG,oBAAoB,GAAG,aAAa,CAAC;IAC5D,MAAM,UAAU,GACd,cAAc,IAAI,CAAC;QACjB,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,CAAC,oBAAoB,GAAG,eAAe,CAAC,GAAG,cAAc,CAAC;IAEhE,OAAO,gBAAgB,CACrB;QACE,mBAAmB,EAAE,oBAAoB,GAAG,IAAI;QAChD,UAAU,EAAE,WAAW,GAAG,IAAI;QAC9B,SAAS,EAAE,UAAU,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,GAAG,IAAI;QACzD,kBAAkB,EAChB,UAAU,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,GAAG,WAAW,CAAC,GAAG,IAAI;KACjE,EACD,0BAA0B,EAC1B,OAAO,EACP;QACE,2BAA2B;QAC3B,+CAA+C;QAC/C,kDAAkD;KACnD,CACF,CAAC;AACJ,CAAC;AAkBD;;;;;;GAMG;AACH,MAAM,UAAU,sBAAsB,CACpC,KAAkC;IAElC,qBAAqB,CAAC,eAAe,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;IAC5D,qBAAqB,CAAC,UAAU,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;IAClD,qBAAqB,CAAC,gBAAgB,EAAE,KAAK,CAAC,cAAc,CAAC,CAAC;IAC9D,qBAAqB,CAAC,kBAAkB,EAAE,KAAK,CAAC,gBAAgB,CAAC,CAAC;IAElE,IAAI,oBAA4B,CAAC;IACjC,IAAI,sBAA8B,CAAC;IACnC,IAAI,CAAC;QACH,oBAAoB,GAAG,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"depth-of-field.js","sourceRoot":"","sources":["../../src/optics/depth-of-field.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Module boundary and integration notes.
|
|
3
|
+
* Calculates the first-zero Airy-disk diameter for an ideal circular aperture. This uses the
|
|
4
|
+
* established diffraction relation d = 2.44 * lambda * N. It is an independent implementation of the
|
|
5
|
+
* mathematical relation and does not model lens aberrations or non-circular pupil geometry.
|
|
6
|
+
* @see docs/PHYSICS_FOUNDATION.md for equations, coordinate/unit conventions, blockers and support
|
|
7
|
+
* limits.
|
|
8
|
+
*/
|
|
1
9
|
import { type CalculationResult } from "../core/calculation-result.js";
|
|
2
10
|
export interface CalculateAiryDiskInput {
|
|
3
11
|
/** F-number. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diffraction.d.ts","sourceRoot":"","sources":["../../src/optics/diffraction.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,KAAK,iBAAiB,EACvB,MAAM,+BAA+B,CAAC;AAGvC,MAAM,WAAW,sBAAsB;IACrC,gBAAgB;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,4EAA4E;IAC5E,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,QAAQ;IACvB;;;OAGG;IACH,4BAA4B,EAAE,MAAM,CAAC;CACtC;AAED;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,sBAAsB,GAC5B,iBAAiB,CAAC,QAAQ,CAAC,CAa7B"}
|
|
1
|
+
{"version":3,"file":"diffraction.d.ts","sourceRoot":"","sources":["../../src/optics/diffraction.ts"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AAEH,OAAO,EAEL,KAAK,iBAAiB,EACvB,MAAM,+BAA+B,CAAC;AAGvC,MAAM,WAAW,sBAAsB;IACrC,gBAAgB;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,4EAA4E;IAC5E,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,QAAQ;IACvB;;;OAGG;IACH,4BAA4B,EAAE,MAAM,CAAC;CACtC;AAED;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,sBAAsB,GAC5B,iBAAiB,CAAC,QAAQ,CAAC,CAa7B"}
|
|
@@ -1,4 +1,12 @@
|
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
/**
|
|
3
|
+
* Module boundary and integration notes.
|
|
4
|
+
* Calculates the first-zero Airy-disk diameter for an ideal circular aperture. This uses the
|
|
5
|
+
* established diffraction relation d = 2.44 * lambda * N. It is an independent implementation of the
|
|
6
|
+
* mathematical relation and does not model lens aberrations or non-circular pupil geometry.
|
|
7
|
+
* @see docs/PHYSICS_FOUNDATION.md for equations, coordinate/unit conventions, blockers and support
|
|
8
|
+
* limits.
|
|
9
|
+
*/
|
|
2
10
|
import { calculatedResult } from "../core/calculation-result.js";
|
|
3
11
|
import { requirePositiveFinite } from "../core/validation.js";
|
|
4
12
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diffraction.js","sourceRoot":"","sources":["../../src/optics/diffraction.ts"],"names":[],"mappings":"AAAA,sCAAsC;AAEtC,OAAO,EACL,gBAAgB,EAEjB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAiB9D;;;;;;;;;GASG;AACH,MAAM,UAAU,iBAAiB,CAC/B,KAA6B;IAE7B,qBAAqB,CAAC,UAAU,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;IAClD,qBAAqB,CAAC,cAAc,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;IAE1D,OAAO,gBAAgB,CACrB;QACE,4BAA4B,EAC1B,IAAI,GAAG,CAAC,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC,QAAQ;KACtD,EACD,mCAAmC,EACnC,OAAO,EACP,CAAC,yBAAyB,EAAE,0BAA0B,CAAC,CACxD,CAAC;AACJ,CAAC"}
|
|
1
|
+
{"version":3,"file":"diffraction.js","sourceRoot":"","sources":["../../src/optics/diffraction.ts"],"names":[],"mappings":"AAAA,sCAAsC;AAEtC;;;;;;;GAOG;AAEH,OAAO,EACL,gBAAgB,EAEjB,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAiB9D;;;;;;;;;GASG;AACH,MAAM,UAAU,iBAAiB,CAC/B,KAA6B;IAE7B,qBAAqB,CAAC,UAAU,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;IAClD,qBAAqB,CAAC,cAAc,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;IAE1D,OAAO,gBAAgB,CACrB;QACE,4BAA4B,EAC1B,IAAI,GAAG,CAAC,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC,QAAQ;KACtD,EACD,mCAAmC,EACnC,OAAO,EACP,CAAC,yBAAyB,EAAE,0BAA0B,CAAC,CACxD,CAAC;AACJ,CAAC"}
|
|
@@ -1,3 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Module boundary and integration notes.
|
|
3
|
+
* Applies a caller-declared focus-breathing projection scale to the ideal Gaussian thin-lens
|
|
4
|
+
* projection for one focus state. Photivra does not infer the scale from focal length, focus distance,
|
|
5
|
+
* lens identity, or marketing data. A value of 1 exactly preserves the current thin-lens projection.
|
|
6
|
+
* This is a generic approximation of focus-dependent projection/magnification, not a calibrated
|
|
7
|
+
* real-lens model. The physical focal length remains authoritative and unchanged.
|
|
8
|
+
* Calculates one-axis field of view for the generic declared-scale focus- breathing projection and
|
|
9
|
+
* reports the corresponding ideal thin-lens FOV. A breathingProjectionScale of 1 reproduces the
|
|
10
|
+
* current focus-aware thin-lens field-of-view result exactly.
|
|
11
|
+
* @see docs/PHYSICS_FOUNDATION.md for equations, coordinate/unit conventions, blockers and support
|
|
12
|
+
* limits.
|
|
13
|
+
*/
|
|
1
14
|
import { type CalculationResult } from "../core/calculation-result.js";
|
|
2
15
|
export interface CalculateFocusBreathingProjectionInput {
|
|
3
16
|
/** Physical lens focal length in millimetres. This value is never rewritten. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"focus-breathing.d.ts","sourceRoot":"","sources":["../../src/optics/focus-breathing.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,KAAK,iBAAiB,EACvB,MAAM,+BAA+B,CAAC;AAIvC,MAAM,WAAW,sCAAsC;IACrD,gFAAgF;IAChF,aAAa,EAAE,MAAM,CAAC;IACtB,yCAAyC;IACzC,cAAc,EAAE,MAAM,CAAC;IACvB;;;;;;;OAOG;IACH,wBAAwB,EAAE,MAAM,CAAC;CAClC;AAED,MAAM,WAAW,wBAAwB;IACvC,kEAAkE;IAClE,qBAAqB,EAAE,MAAM,CAAC;IAC9B,cAAc,EAAE,MAAM,CAAC;IACvB,2EAA2E;IAC3E,yBAAyB,EAAE,MAAM,CAAC;IAClC;;;;;OAKG;IACH,6BAA6B,EAAE,MAAM,CAAC;IACtC,oEAAoE;IACpE,wBAAwB,EAAE,MAAM,CAAC;IACjC,6EAA6E;IAC7E,kBAAkB,EAAE,MAAM,CAAC;IAC3B,gDAAgD;IAChD,sBAAsB,EAAE,MAAM,CAAC;CAChC;AAED,MAAM,WAAW,uCACf,SAAQ,sCAAsC;IAC9C,mFAAmF;IACnF,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,yBAAyB;IACxC,qBAAqB,EAAE,MAAM,CAAC;IAC9B,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,wBAAwB,EAAE,MAAM,CAAC;IACjC,yBAAyB,EAAE,MAAM,CAAC;IAClC,6BAA6B,EAAE,MAAM,CAAC;IACtC,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,iCAAiC,CAC/C,KAAK,EAAE,sCAAsC,GAC5C,iBAAiB,CAAC,wBAAwB,CAAC,CAsC7C;AAED;;;;;;GAMG;AACH,wBAAgB,kCAAkC,CAChD,KAAK,EAAE,uCAAuC,GAC7C,iBAAiB,CAAC,yBAAyB,CAAC,CAwC9C"}
|
|
1
|
+
{"version":3,"file":"focus-breathing.d.ts","sourceRoot":"","sources":["../../src/optics/focus-breathing.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAEL,KAAK,iBAAiB,EACvB,MAAM,+BAA+B,CAAC;AAIvC,MAAM,WAAW,sCAAsC;IACrD,gFAAgF;IAChF,aAAa,EAAE,MAAM,CAAC;IACtB,yCAAyC;IACzC,cAAc,EAAE,MAAM,CAAC;IACvB;;;;;;;OAOG;IACH,wBAAwB,EAAE,MAAM,CAAC;CAClC;AAED,MAAM,WAAW,wBAAwB;IACvC,kEAAkE;IAClE,qBAAqB,EAAE,MAAM,CAAC;IAC9B,cAAc,EAAE,MAAM,CAAC;IACvB,2EAA2E;IAC3E,yBAAyB,EAAE,MAAM,CAAC;IAClC;;;;;OAKG;IACH,6BAA6B,EAAE,MAAM,CAAC;IACtC,oEAAoE;IACpE,wBAAwB,EAAE,MAAM,CAAC;IACjC,6EAA6E;IAC7E,kBAAkB,EAAE,MAAM,CAAC;IAC3B,gDAAgD;IAChD,sBAAsB,EAAE,MAAM,CAAC;CAChC;AAED,MAAM,WAAW,uCACf,SAAQ,sCAAsC;IAC9C,mFAAmF;IACnF,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,yBAAyB;IACxC,qBAAqB,EAAE,MAAM,CAAC;IAC9B,cAAc,EAAE,MAAM,CAAC;IACvB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,wBAAwB,EAAE,MAAM,CAAC;IACjC,yBAAyB,EAAE,MAAM,CAAC;IAClC,6BAA6B,EAAE,MAAM,CAAC;IACtC,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,iCAAiC,CAC/C,KAAK,EAAE,sCAAsC,GAC5C,iBAAiB,CAAC,wBAAwB,CAAC,CAsC7C;AAED;;;;;;GAMG;AACH,wBAAgB,kCAAkC,CAChD,KAAK,EAAE,uCAAuC,GAC7C,iBAAiB,CAAC,yBAAyB,CAAC,CAwC9C"}
|