@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,561 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
/**
|
|
3
|
+
* Module boundary and integration notes.
|
|
4
|
+
* Converts pre-response geometric-aperture spectral radiant power into incident-photon rate and
|
|
5
|
+
* expected generated-electron rate. This function applies response per wavelength node. It never
|
|
6
|
+
* applies one broadband-average QE to total radiant power. Temporal exposure integration remains
|
|
7
|
+
* downstream, so all outputs are rates (per second), not photon/electron counts.
|
|
8
|
+
* @see docs/MOTION_AND_SIGNAL.md for equations, coordinate/unit conventions, blockers and support
|
|
9
|
+
* limits.
|
|
10
|
+
*/
|
|
11
|
+
import { approximationResult } from "../core/calculation-result.js";
|
|
12
|
+
import { InvalidScientificInputError } from "../core/validation.js";
|
|
13
|
+
import { calculatePhotonEnergyFromWavelength } from "./photon-energy.js";
|
|
14
|
+
import { parseSensorColorSamplingProfile } from "./color-sampling.js";
|
|
15
|
+
import { createSensorSpectralResponseChannelBinding, parseSensorSpectralResponseProfile, resolveParsedSensorSpectralResponseAtWavelength } from "./spectral-response.js";
|
|
16
|
+
const REDUCTION_TOLERANCE = 1e-10;
|
|
17
|
+
function addCompensated(state, value) {
|
|
18
|
+
const adjusted = value - state.correction;
|
|
19
|
+
const next = state.sum + adjusted;
|
|
20
|
+
state.correction =
|
|
21
|
+
(next - state.sum) - adjusted;
|
|
22
|
+
state.sum = next;
|
|
23
|
+
}
|
|
24
|
+
function requireNonNegativeFinite(value, path) {
|
|
25
|
+
if (typeof value !== "number" ||
|
|
26
|
+
!Number.isFinite(value) ||
|
|
27
|
+
value < 0) {
|
|
28
|
+
throw new InvalidScientificInputError(path +
|
|
29
|
+
" must be finite and greater than or equal to zero.");
|
|
30
|
+
}
|
|
31
|
+
return value;
|
|
32
|
+
}
|
|
33
|
+
function requirePositiveFinite(value, path) {
|
|
34
|
+
if (typeof value !== "number" ||
|
|
35
|
+
!Number.isFinite(value) ||
|
|
36
|
+
value <= 0) {
|
|
37
|
+
throw new InvalidScientificInputError(path +
|
|
38
|
+
" must be finite and greater than zero.");
|
|
39
|
+
}
|
|
40
|
+
return value;
|
|
41
|
+
}
|
|
42
|
+
function requireSafeNonNegativeInteger(value, path) {
|
|
43
|
+
if (typeof value !== "number" ||
|
|
44
|
+
!Number.isSafeInteger(value) ||
|
|
45
|
+
value < 0) {
|
|
46
|
+
throw new InvalidScientificInputError(path +
|
|
47
|
+
" must be a non-negative safe integer.");
|
|
48
|
+
}
|
|
49
|
+
return value;
|
|
50
|
+
}
|
|
51
|
+
function approximatelyEqual(actual, expected) {
|
|
52
|
+
const scale = Math.max(1, Math.abs(actual), Math.abs(expected));
|
|
53
|
+
return (Math.abs(actual - expected) <=
|
|
54
|
+
REDUCTION_TOLERANCE * scale);
|
|
55
|
+
}
|
|
56
|
+
function canonicalJson(value) {
|
|
57
|
+
return JSON.stringify(value);
|
|
58
|
+
}
|
|
59
|
+
function requireEquivalent(actual, expected, message) {
|
|
60
|
+
if (canonicalJson(actual) !==
|
|
61
|
+
canonicalJson(expected)) {
|
|
62
|
+
throw new InvalidScientificInputError(message);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
function validateAuthorizationChain(reduction, compatibility, operatingRange) {
|
|
66
|
+
if (reduction.outputMeaning !==
|
|
67
|
+
"pre-response-spatio-spectral-radiometric-reduction" ||
|
|
68
|
+
reduction
|
|
69
|
+
.spectralResponseApplicationPerformed !==
|
|
70
|
+
false ||
|
|
71
|
+
reduction.quantumEfficiencyApplied !==
|
|
72
|
+
false ||
|
|
73
|
+
reduction.temporalIntegrationApplied !==
|
|
74
|
+
false) {
|
|
75
|
+
throw new InvalidScientificInputError("reduction must remain pre-response and pre-temporal before EQE rate conversion.");
|
|
76
|
+
}
|
|
77
|
+
if (!compatibility
|
|
78
|
+
.structuralCompatibilityEstablished ||
|
|
79
|
+
compatibility.compatibilityStatus ===
|
|
80
|
+
"blocked" ||
|
|
81
|
+
compatibility.blockers.length !== 0 ||
|
|
82
|
+
!compatibility.sourcePlaneMatched ||
|
|
83
|
+
compatibility.requiredSignalPath !==
|
|
84
|
+
"photon-rate-to-electrons") {
|
|
85
|
+
throw new InvalidScientificInputError("compatibility must establish a non-blocked photon-rate-to-electrons response path.");
|
|
86
|
+
}
|
|
87
|
+
if (compatibility.spectralResponseProfileId !==
|
|
88
|
+
reduction.responseProfileId ||
|
|
89
|
+
compatibility.colorSamplingProfileId !==
|
|
90
|
+
reduction.colorSamplingProfileId ||
|
|
91
|
+
compatibility.channelId !==
|
|
92
|
+
reduction.channelId ||
|
|
93
|
+
compatibility.responseScope !==
|
|
94
|
+
reduction.responseScope) {
|
|
95
|
+
throw new InvalidScientificInputError("compatibility identities must exactly match the reduction.");
|
|
96
|
+
}
|
|
97
|
+
if (!operatingRange
|
|
98
|
+
.operatingRangeCompatibilityAssessed ||
|
|
99
|
+
!operatingRange
|
|
100
|
+
.instantaneousResponseRangeCompatible ||
|
|
101
|
+
!operatingRange
|
|
102
|
+
.responseRateConversionAuthorized ||
|
|
103
|
+
operatingRange.status === "blocked" ||
|
|
104
|
+
operatingRange.blockers.length !== 0 ||
|
|
105
|
+
operatingRange.requiredSignalPath !==
|
|
106
|
+
"photon-rate-to-electrons" ||
|
|
107
|
+
operatingRange
|
|
108
|
+
.responseApplicationPerformed !==
|
|
109
|
+
false ||
|
|
110
|
+
operatingRange
|
|
111
|
+
.photonConversionPerformed !== false ||
|
|
112
|
+
operatingRange
|
|
113
|
+
.electronConversionPerformed !== false ||
|
|
114
|
+
operatingRange
|
|
115
|
+
.temporalIntegrationAuthorized !== false) {
|
|
116
|
+
throw new InvalidScientificInputError("operatingRange must authorize a clean photon-rate-to-electrons conversion path.");
|
|
117
|
+
}
|
|
118
|
+
if (!operatingRange
|
|
119
|
+
.spectralNodeRangeCompatibilityAssessed ||
|
|
120
|
+
operatingRange
|
|
121
|
+
.spectralInputModel.kind !==
|
|
122
|
+
"per-spectral-bin") {
|
|
123
|
+
throw new InvalidScientificInputError("operatingRange must establish per-spectral-bin input-range applicability before wavelength-dependent EQE conversion.");
|
|
124
|
+
}
|
|
125
|
+
if (operatingRange
|
|
126
|
+
.spatialLinearityModel.kind !==
|
|
127
|
+
"linear-superposition-over-geometric-aperture") {
|
|
128
|
+
throw new InvalidScientificInputError("operatingRange must establish linear superposition over the geometric aperture.");
|
|
129
|
+
}
|
|
130
|
+
if (operatingRange.spectralResponseProfileId !==
|
|
131
|
+
reduction.responseProfileId ||
|
|
132
|
+
operatingRange.colorSamplingProfileId !==
|
|
133
|
+
reduction.colorSamplingProfileId ||
|
|
134
|
+
operatingRange.channelId !==
|
|
135
|
+
reduction.channelId ||
|
|
136
|
+
operatingRange.responseApplicationProfileId !==
|
|
137
|
+
compatibility.applicationProfileId) {
|
|
138
|
+
throw new InvalidScientificInputError("operatingRange identities must exactly match the reduction and compatibility assessment.");
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
function validateReductionSpectralNodes(reduction) {
|
|
142
|
+
if (!Array.isArray(reduction.perWavelength) ||
|
|
143
|
+
!Number.isSafeInteger(reduction.spectralNodeCount) ||
|
|
144
|
+
reduction.spectralNodeCount <= 0 ||
|
|
145
|
+
reduction.perWavelength.length !==
|
|
146
|
+
reduction.spectralNodeCount) {
|
|
147
|
+
throw new InvalidScientificInputError("reduction.perWavelength must contain exactly spectralNodeCount entries.");
|
|
148
|
+
}
|
|
149
|
+
let previousWavelength = Number.NEGATIVE_INFINITY;
|
|
150
|
+
let normalizedWeightSum = 0;
|
|
151
|
+
const integratedPower = {
|
|
152
|
+
sum: 0,
|
|
153
|
+
correction: 0
|
|
154
|
+
};
|
|
155
|
+
reduction.perWavelength.forEach((entry, arrayIndex) => {
|
|
156
|
+
const sampleIndex = requireSafeNonNegativeInteger(entry.spectralSampleIndex, "reduction.perWavelength[" +
|
|
157
|
+
arrayIndex +
|
|
158
|
+
"].spectralSampleIndex");
|
|
159
|
+
if (sampleIndex !== arrayIndex) {
|
|
160
|
+
throw new InvalidScientificInputError("reduction spectralSampleIndex values must form the exact contiguous range 0..spectralNodeCount-1.");
|
|
161
|
+
}
|
|
162
|
+
const wavelength = requirePositiveFinite(entry.wavelengthNanometers, "reduction.perWavelength[" +
|
|
163
|
+
arrayIndex +
|
|
164
|
+
"].wavelengthNanometers");
|
|
165
|
+
if (wavelength <=
|
|
166
|
+
previousWavelength) {
|
|
167
|
+
throw new InvalidScientificInputError("reduction per-wavelength samples must be strictly increasing in wavelength.");
|
|
168
|
+
}
|
|
169
|
+
previousWavelength =
|
|
170
|
+
wavelength;
|
|
171
|
+
const measure = requirePositiveFinite(entry.wavelengthMeasureNanometers, "reduction.perWavelength[" +
|
|
172
|
+
arrayIndex +
|
|
173
|
+
"].wavelengthMeasureNanometers");
|
|
174
|
+
const normalizedWeight = requirePositiveFinite(entry.normalizedWavelengthWeight, "reduction.perWavelength[" +
|
|
175
|
+
arrayIndex +
|
|
176
|
+
"].normalizedWavelengthWeight");
|
|
177
|
+
const fluxDensity = requireNonNegativeFinite(entry
|
|
178
|
+
.geometricApertureIncidentSpectralFluxWattsPerNanometer, "reduction.perWavelength[" +
|
|
179
|
+
arrayIndex +
|
|
180
|
+
"].geometricApertureIncidentSpectralFluxWattsPerNanometer");
|
|
181
|
+
const contribution = requireNonNegativeFinite(entry
|
|
182
|
+
.wavelengthIntegratedGeometricApertureIncidentFluxContributionWatts, "reduction.perWavelength[" +
|
|
183
|
+
arrayIndex +
|
|
184
|
+
"].wavelengthIntegratedGeometricApertureIncidentFluxContributionWatts");
|
|
185
|
+
const expectedContribution = fluxDensity * measure;
|
|
186
|
+
if (!Number.isFinite(expectedContribution) ||
|
|
187
|
+
!approximatelyEqual(contribution, expectedContribution)) {
|
|
188
|
+
throw new InvalidScientificInputError("reduction per-wavelength radiant-power contribution must equal spectral flux density × d-lambda.");
|
|
189
|
+
}
|
|
190
|
+
normalizedWeightSum +=
|
|
191
|
+
normalizedWeight;
|
|
192
|
+
if (!Number.isFinite(normalizedWeightSum)) {
|
|
193
|
+
throw new InvalidScientificInputError("reduction normalized wavelength weights must remain finite.");
|
|
194
|
+
}
|
|
195
|
+
addCompensated(integratedPower, contribution);
|
|
196
|
+
});
|
|
197
|
+
if (!approximatelyEqual(normalizedWeightSum, 1)) {
|
|
198
|
+
throw new InvalidScientificInputError("reduction normalized wavelength weights must sum to 1.");
|
|
199
|
+
}
|
|
200
|
+
const totalPower = requireNonNegativeFinite(reduction
|
|
201
|
+
.wavelengthIntegratedGeometricApertureIncidentFluxWatts, "reduction.wavelengthIntegratedGeometricApertureIncidentFluxWatts");
|
|
202
|
+
if (!approximatelyEqual(integratedPower.sum, totalPower)) {
|
|
203
|
+
throw new InvalidScientificInputError("reduction total geometric-aperture radiant power must match the sum of per-wavelength contributions.");
|
|
204
|
+
}
|
|
205
|
+
return reduction.perWavelength;
|
|
206
|
+
}
|
|
207
|
+
function validateOperatingRangeNodeBinding(reduction, nodes, operatingRange) {
|
|
208
|
+
const evaluated = operatingRange
|
|
209
|
+
.evaluatedSpectralNodeInputs;
|
|
210
|
+
if (evaluated === undefined ||
|
|
211
|
+
evaluated.length !== nodes.length) {
|
|
212
|
+
throw new InvalidScientificInputError("operatingRange must carry one evaluated spectral-node input for every reduction wavelength node.");
|
|
213
|
+
}
|
|
214
|
+
if (operatingRange
|
|
215
|
+
.evaluatedWavelengthRangeNanometers
|
|
216
|
+
.minimum !==
|
|
217
|
+
reduction.wavelengthRangeNanometers
|
|
218
|
+
.minimum ||
|
|
219
|
+
operatingRange
|
|
220
|
+
.evaluatedWavelengthRangeNanometers
|
|
221
|
+
.maximum !==
|
|
222
|
+
reduction.wavelengthRangeNanometers
|
|
223
|
+
.maximum) {
|
|
224
|
+
throw new InvalidScientificInputError("operatingRange wavelength range must exactly match the reduction.");
|
|
225
|
+
}
|
|
226
|
+
evaluated.forEach((entry, index) => {
|
|
227
|
+
const node = nodes[index];
|
|
228
|
+
if (entry.spectralSampleIndex !==
|
|
229
|
+
node.spectralSampleIndex ||
|
|
230
|
+
entry.wavelengthNanometers !==
|
|
231
|
+
node.wavelengthNanometers ||
|
|
232
|
+
entry.wavelengthMeasureNanometers !==
|
|
233
|
+
node.wavelengthMeasureNanometers) {
|
|
234
|
+
throw new InvalidScientificInputError("operatingRange spectral-node identities must exactly match the reduction.");
|
|
235
|
+
}
|
|
236
|
+
const expected = operatingRange.inputRange.kind ===
|
|
237
|
+
"wavelength-integrated-geometric-aperture-radiant-power"
|
|
238
|
+
? node
|
|
239
|
+
.wavelengthIntegratedGeometricApertureIncidentFluxContributionWatts
|
|
240
|
+
: node
|
|
241
|
+
.wavelengthIntegratedSpatialAverageContributionWattsPerSquareMeter;
|
|
242
|
+
if (entry.kind !==
|
|
243
|
+
operatingRange.inputRange.kind ||
|
|
244
|
+
entry.unit !==
|
|
245
|
+
operatingRange.inputRange.unit ||
|
|
246
|
+
!approximatelyEqual(entry.value, expected)) {
|
|
247
|
+
throw new InvalidScientificInputError("operatingRange spectral-node values must match the reduction values in the calibrated input domain.");
|
|
248
|
+
}
|
|
249
|
+
});
|
|
250
|
+
}
|
|
251
|
+
function parseAirContext(reduction, nodes, context) {
|
|
252
|
+
if (reduction.wavelengthBasis ===
|
|
253
|
+
"vacuum") {
|
|
254
|
+
if (context !== undefined) {
|
|
255
|
+
throw new InvalidScientificInputError("airPhotonEnergyContext must be omitted for vacuum-basis EQE conversion.");
|
|
256
|
+
}
|
|
257
|
+
return new Map();
|
|
258
|
+
}
|
|
259
|
+
if (reduction.wavelengthBasis !== "air") {
|
|
260
|
+
throw new InvalidScientificInputError("EQE electron-rate conversion requires a resolved air or vacuum wavelength basis.");
|
|
261
|
+
}
|
|
262
|
+
if (context === undefined ||
|
|
263
|
+
!Array.isArray(context.samples) ||
|
|
264
|
+
context.samples.length !==
|
|
265
|
+
nodes.length) {
|
|
266
|
+
throw new InvalidScientificInputError("Air-basis EQE conversion requires exactly one refractive-index sample for every spectral node.");
|
|
267
|
+
}
|
|
268
|
+
const byIndex = new Map();
|
|
269
|
+
context.samples.forEach((entry, arrayIndex) => {
|
|
270
|
+
if (typeof entry !== "object" ||
|
|
271
|
+
entry === null) {
|
|
272
|
+
throw new InvalidScientificInputError("airPhotonEnergyContext.samples[" +
|
|
273
|
+
arrayIndex +
|
|
274
|
+
"] must be an object.");
|
|
275
|
+
}
|
|
276
|
+
const spectralSampleIndex = requireSafeNonNegativeInteger(entry.spectralSampleIndex, "airPhotonEnergyContext.samples[" +
|
|
277
|
+
arrayIndex +
|
|
278
|
+
"].spectralSampleIndex");
|
|
279
|
+
if (spectralSampleIndex >=
|
|
280
|
+
nodes.length ||
|
|
281
|
+
byIndex.has(spectralSampleIndex)) {
|
|
282
|
+
throw new InvalidScientificInputError("airPhotonEnergyContext must contain unique in-range spectral sample identities.");
|
|
283
|
+
}
|
|
284
|
+
byIndex.set(spectralSampleIndex, entry.refractiveIndex);
|
|
285
|
+
});
|
|
286
|
+
return byIndex;
|
|
287
|
+
}
|
|
288
|
+
function responseEvidenceMatches(actual, expected) {
|
|
289
|
+
return (canonicalJson(actual) ===
|
|
290
|
+
canonicalJson(expected));
|
|
291
|
+
}
|
|
292
|
+
function validateResponseBinding(resolved, reduction) {
|
|
293
|
+
if (resolved.profileId !==
|
|
294
|
+
reduction.responseProfileId ||
|
|
295
|
+
resolved.colorSamplingProfileId !==
|
|
296
|
+
reduction.colorSamplingProfileId ||
|
|
297
|
+
resolved.channelId !==
|
|
298
|
+
reduction.channelId ||
|
|
299
|
+
resolved.sourceResponseKind !==
|
|
300
|
+
reduction.sourceResponseKind ||
|
|
301
|
+
resolved.responseScope !==
|
|
302
|
+
reduction.responseScope ||
|
|
303
|
+
resolved.scientificStatus !==
|
|
304
|
+
reduction.responseScientificStatus) {
|
|
305
|
+
throw new InvalidScientificInputError("Resolved spectral response metadata must exactly match the response used to construct the reduction.");
|
|
306
|
+
}
|
|
307
|
+
requireEquivalent(resolved.uncertainty, reduction.responseUncertainty, "Resolved spectral response uncertainty must match the reduction.");
|
|
308
|
+
const expectedEvidence = reduction.componentEvidence.spectral;
|
|
309
|
+
if (!responseEvidenceMatches(resolved.componentEvidence.profile, expectedEvidence.profile) ||
|
|
310
|
+
!responseEvidenceMatches(resolved.componentEvidence.channel, expectedEvidence.channel) ||
|
|
311
|
+
canonicalJson(resolved.componentEvidence.curves) !==
|
|
312
|
+
canonicalJson(expectedEvidence.curves)) {
|
|
313
|
+
throw new InvalidScientificInputError("Resolved spectral response evidence must match the calibration evidence carried by the reduction.");
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
function validateExactResponseDataBinding(responseProfile, reduction) {
|
|
317
|
+
const response = responseProfile.channels.find((entry) => entry.channelId ===
|
|
318
|
+
reduction.channelId);
|
|
319
|
+
if (response === undefined ||
|
|
320
|
+
reduction.responseChannelBinding ===
|
|
321
|
+
undefined ||
|
|
322
|
+
canonicalJson(createSensorSpectralResponseChannelBinding(response)) !==
|
|
323
|
+
canonicalJson(reduction.responseChannelBinding)) {
|
|
324
|
+
throw new InvalidScientificInputError("Supplied spectral response channel data must exactly match the response-channel binding carried by the reduction.");
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
function requireEqeResponse(response) {
|
|
328
|
+
if (response.kind !==
|
|
329
|
+
"effective-external-quantum-efficiency") {
|
|
330
|
+
throw new InvalidScientificInputError("EQE electron-rate conversion cannot consume A/W spectral responsivity.");
|
|
331
|
+
}
|
|
332
|
+
return response;
|
|
333
|
+
}
|
|
334
|
+
/**
|
|
335
|
+
* Converts pre-response geometric-aperture spectral radiant power into
|
|
336
|
+
* incident-photon rate and expected generated-electron rate.
|
|
337
|
+
*
|
|
338
|
+
* This function applies response per wavelength node. It never applies one
|
|
339
|
+
* broadband-average QE to total radiant power.
|
|
340
|
+
*
|
|
341
|
+
* Temporal exposure integration remains downstream, so all outputs are rates
|
|
342
|
+
* (per second), not photon/electron counts.
|
|
343
|
+
*/
|
|
344
|
+
export function calculateSensorEqeElectronRate(input) {
|
|
345
|
+
validateAuthorizationChain(input.reduction, input.compatibility, input.operatingRange);
|
|
346
|
+
if (input.reduction
|
|
347
|
+
.sourceResponseKind ===
|
|
348
|
+
"effective-spectral-responsivity") {
|
|
349
|
+
throw new InvalidScientificInputError("EQE electron-rate conversion requires an EQE or filter×detector-EQE response, not A/W responsivity.");
|
|
350
|
+
}
|
|
351
|
+
const colorProfile = parseSensorColorSamplingProfile(input.colorSamplingProfile);
|
|
352
|
+
const responseProfile = parseSensorSpectralResponseProfile(input.spectralResponseProfile);
|
|
353
|
+
if (colorProfile.profileId !==
|
|
354
|
+
input.reduction
|
|
355
|
+
.colorSamplingProfileId ||
|
|
356
|
+
responseProfile.profileId !==
|
|
357
|
+
input.reduction
|
|
358
|
+
.responseProfileId ||
|
|
359
|
+
responseProfile
|
|
360
|
+
.colorSamplingProfileId !==
|
|
361
|
+
colorProfile.profileId) {
|
|
362
|
+
throw new InvalidScientificInputError("Supplied color/spectral response profiles must exactly match the reduction identities.");
|
|
363
|
+
}
|
|
364
|
+
validateExactResponseDataBinding(responseProfile, input.reduction);
|
|
365
|
+
const nodes = validateReductionSpectralNodes(input.reduction);
|
|
366
|
+
validateOperatingRangeNodeBinding(input.reduction, nodes, input.operatingRange);
|
|
367
|
+
const airIndices = parseAirContext(input.reduction, nodes, input.airPhotonEnergyContext);
|
|
368
|
+
const photonRateSum = {
|
|
369
|
+
sum: 0,
|
|
370
|
+
correction: 0
|
|
371
|
+
};
|
|
372
|
+
const electronRateSum = {
|
|
373
|
+
sum: 0,
|
|
374
|
+
correction: 0
|
|
375
|
+
};
|
|
376
|
+
const perWavelength = [];
|
|
377
|
+
let responseBindingValidated = false;
|
|
378
|
+
let channelFilterTransmissionApplied = false;
|
|
379
|
+
for (const node of nodes) {
|
|
380
|
+
const resolved = resolveParsedSensorSpectralResponseAtWavelength({
|
|
381
|
+
colorSamplingProfile: colorProfile,
|
|
382
|
+
spectralResponseProfile: responseProfile,
|
|
383
|
+
channelId: input.reduction.channelId,
|
|
384
|
+
wavelengthNanometers: node.wavelengthNanometers,
|
|
385
|
+
wavelengthBasis: input.reduction
|
|
386
|
+
.wavelengthBasis
|
|
387
|
+
});
|
|
388
|
+
if (!responseBindingValidated) {
|
|
389
|
+
validateResponseBinding(resolved.value, input.reduction);
|
|
390
|
+
responseBindingValidated =
|
|
391
|
+
true;
|
|
392
|
+
}
|
|
393
|
+
const eqe = requireEqeResponse(resolved.value.response);
|
|
394
|
+
const airIndex = airIndices.get(node.spectralSampleIndex);
|
|
395
|
+
const photonEnergy = calculatePhotonEnergyFromWavelength({
|
|
396
|
+
wavelengthNanometers: node.wavelengthNanometers,
|
|
397
|
+
wavelengthBasis: input.reduction
|
|
398
|
+
.wavelengthBasis,
|
|
399
|
+
...(input.reduction
|
|
400
|
+
.wavelengthBasis === "air"
|
|
401
|
+
? {
|
|
402
|
+
airPhaseRefractiveIndex: airIndex,
|
|
403
|
+
...(input.airPhotonEnergyContext
|
|
404
|
+
.operatingConditions ===
|
|
405
|
+
undefined
|
|
406
|
+
? {}
|
|
407
|
+
: {
|
|
408
|
+
airOperatingConditions: input
|
|
409
|
+
.airPhotonEnergyContext
|
|
410
|
+
.operatingConditions
|
|
411
|
+
}),
|
|
412
|
+
airConditionPolicy: input.airPhotonEnergyContext
|
|
413
|
+
.conditionPolicy
|
|
414
|
+
}
|
|
415
|
+
: {})
|
|
416
|
+
}).value;
|
|
417
|
+
const radiantPowerContributionWatts = node
|
|
418
|
+
.geometricApertureIncidentSpectralFluxWattsPerNanometer *
|
|
419
|
+
node.wavelengthMeasureNanometers;
|
|
420
|
+
const incidentPhotonRatePerSecond = radiantPowerContributionWatts /
|
|
421
|
+
photonEnergy.photonEnergyJoules;
|
|
422
|
+
const expectedGeneratedElectronRatePerSecond = incidentPhotonRatePerSecond *
|
|
423
|
+
eqe.externalQuantumEfficiency;
|
|
424
|
+
if (!Number.isFinite(radiantPowerContributionWatts) ||
|
|
425
|
+
!Number.isFinite(incidentPhotonRatePerSecond) ||
|
|
426
|
+
!Number.isFinite(expectedGeneratedElectronRatePerSecond)) {
|
|
427
|
+
throw new InvalidScientificInputError("EQE wavelength-node rate calculation must remain finite.");
|
|
428
|
+
}
|
|
429
|
+
addCompensated(photonRateSum, incidentPhotonRatePerSecond);
|
|
430
|
+
addCompensated(electronRateSum, expectedGeneratedElectronRatePerSecond);
|
|
431
|
+
if (eqe.composition ===
|
|
432
|
+
"channel-filter-transmittance-times-detector-eqe") {
|
|
433
|
+
channelFilterTransmissionApplied =
|
|
434
|
+
true;
|
|
435
|
+
}
|
|
436
|
+
perWavelength.push({
|
|
437
|
+
spectralSampleIndex: node.spectralSampleIndex,
|
|
438
|
+
wavelengthNanometers: node.wavelengthNanometers,
|
|
439
|
+
wavelengthMeasureNanometers: node.wavelengthMeasureNanometers,
|
|
440
|
+
geometricApertureIncidentSpectralFluxWattsPerNanometer: node
|
|
441
|
+
.geometricApertureIncidentSpectralFluxWattsPerNanometer,
|
|
442
|
+
radiantPowerContributionWatts,
|
|
443
|
+
vacuumWavelengthNanometers: photonEnergy
|
|
444
|
+
.vacuumWavelengthNanometers,
|
|
445
|
+
photonEnergyJoules: photonEnergy
|
|
446
|
+
.photonEnergyJoules,
|
|
447
|
+
wavelengthConversion: photonEnergy
|
|
448
|
+
.wavelengthConversion,
|
|
449
|
+
...(photonEnergy
|
|
450
|
+
.phaseRefractiveIndexUsed ===
|
|
451
|
+
undefined
|
|
452
|
+
? {}
|
|
453
|
+
: {
|
|
454
|
+
phaseRefractiveIndexUsed: photonEnergy
|
|
455
|
+
.phaseRefractiveIndexUsed
|
|
456
|
+
}),
|
|
457
|
+
...(photonEnergy
|
|
458
|
+
.airConditionCompatibility ===
|
|
459
|
+
undefined
|
|
460
|
+
? {}
|
|
461
|
+
: {
|
|
462
|
+
airConditionCompatibility: photonEnergy
|
|
463
|
+
.airConditionCompatibility
|
|
464
|
+
}),
|
|
465
|
+
...(photonEnergy
|
|
466
|
+
.airRefractiveIndexEvidence ===
|
|
467
|
+
undefined
|
|
468
|
+
? {}
|
|
469
|
+
: {
|
|
470
|
+
airRefractiveIndexEvidence: photonEnergy
|
|
471
|
+
.airRefractiveIndexEvidence
|
|
472
|
+
}),
|
|
473
|
+
incidentPhotonRatePerSecond,
|
|
474
|
+
effectiveExternalQuantumEfficiency: eqe.externalQuantumEfficiency,
|
|
475
|
+
responseComposition: eqe.composition,
|
|
476
|
+
...(eqe.channelFilterTransmittance ===
|
|
477
|
+
undefined
|
|
478
|
+
? {}
|
|
479
|
+
: {
|
|
480
|
+
channelFilterTransmittance: eqe.channelFilterTransmittance
|
|
481
|
+
}),
|
|
482
|
+
...(eqe
|
|
483
|
+
.detectorExternalQuantumEfficiency ===
|
|
484
|
+
undefined
|
|
485
|
+
? {}
|
|
486
|
+
: {
|
|
487
|
+
detectorExternalQuantumEfficiency: eqe
|
|
488
|
+
.detectorExternalQuantumEfficiency
|
|
489
|
+
}),
|
|
490
|
+
responseInterpolationUsed: resolved.value
|
|
491
|
+
.interpolationUsed,
|
|
492
|
+
expectedGeneratedElectronRatePerSecond
|
|
493
|
+
});
|
|
494
|
+
}
|
|
495
|
+
if (!Number.isFinite(photonRateSum.sum) ||
|
|
496
|
+
!Number.isFinite(electronRateSum.sum)) {
|
|
497
|
+
throw new InvalidScientificInputError("Total EQE photon/electron rates must remain finite.");
|
|
498
|
+
}
|
|
499
|
+
return approximationResult({
|
|
500
|
+
colorSamplingProfileId: input.reduction
|
|
501
|
+
.colorSamplingProfileId,
|
|
502
|
+
responseProfileId: input.reduction
|
|
503
|
+
.responseProfileId,
|
|
504
|
+
responseApplicationProfileId: input.compatibility
|
|
505
|
+
.applicationProfileId,
|
|
506
|
+
operatingRangeProfileId: input.operatingRange
|
|
507
|
+
.operatingRangeProfileId,
|
|
508
|
+
site: {
|
|
509
|
+
...input.reduction.site
|
|
510
|
+
},
|
|
511
|
+
channelId: input.reduction.channelId,
|
|
512
|
+
sourceResponseKind: input.reduction
|
|
513
|
+
.sourceResponseKind,
|
|
514
|
+
responseScope: input.reduction.responseScope,
|
|
515
|
+
responseReferencePlane: input.compatibility
|
|
516
|
+
.requiredSourcePlane,
|
|
517
|
+
wavelengthBasis: input.reduction
|
|
518
|
+
.wavelengthBasis,
|
|
519
|
+
wavelengthRangeNanometers: {
|
|
520
|
+
...input.reduction
|
|
521
|
+
.wavelengthRangeNanometers
|
|
522
|
+
},
|
|
523
|
+
spectralNodeCount: nodes.length,
|
|
524
|
+
perWavelength,
|
|
525
|
+
incidentPhotonRatePerSecond: photonRateSum.sum,
|
|
526
|
+
expectedGeneratedElectronRatePerSecond: electronRateSum.sum,
|
|
527
|
+
summationMethod: "kahan-compensated",
|
|
528
|
+
responseApplicationPerformed: true,
|
|
529
|
+
quantumEfficiencyApplied: true,
|
|
530
|
+
spectralResponsivityApplied: false,
|
|
531
|
+
channelFilterTransmissionApplied,
|
|
532
|
+
photonRateCalculated: true,
|
|
533
|
+
electronRateCalculated: true,
|
|
534
|
+
photonCountCalculated: false,
|
|
535
|
+
electronCountCalculated: false,
|
|
536
|
+
currentCalculated: false,
|
|
537
|
+
temporalIntegrationApplied: false,
|
|
538
|
+
exposureDurationApplied: false,
|
|
539
|
+
saturationAssessed: false,
|
|
540
|
+
shotNoiseApplied: false,
|
|
541
|
+
readNoiseApplied: false,
|
|
542
|
+
adcQuantizationApplied: false,
|
|
543
|
+
rawCodeValueProduced: false,
|
|
544
|
+
responseUncertaintyPropagated: false,
|
|
545
|
+
photonEnergyUncertaintyPropagated: false,
|
|
546
|
+
quadratureConvergenceErrorEstimated: false
|
|
547
|
+
}, "sensor-eqe-electron-rate", "1.0.0", [
|
|
548
|
+
"Response is evaluated independently at every wavelength quadrature node; broadband radiant power is never multiplied by an average QE.",
|
|
549
|
+
"Each node converts radiant power to photon rate using photon energy hν, then applies effective external QE to obtain expected generated-electron rate.",
|
|
550
|
+
"Direct effective EQE is preserved as direct response; explicitly separable channel-filter transmittance × detector EQE is multiplied only through the existing spectral-response resolver.",
|
|
551
|
+
"The response calibration metadata/evidence must match the spectral evidence carried by the pre-response reduction; matching profile IDs alone is insufficient.",
|
|
552
|
+
"The structural compatibility and operating-range assessments must both be non-blocked and authorize the photon-rate→electron path.",
|
|
553
|
+
"Operating-range authorization must be per spectral bin, with spectral-node identities and calibrated-domain values bound back to the exact reduction used for conversion.",
|
|
554
|
+
"Operating-range authorization must establish linear superposition over the geometric aperture so spatial reduction may precede response application without hiding sub-aperture nonlinear behavior.",
|
|
555
|
+
"Air-basis spectral nodes require one exact-wavelength sourced phase refractive index per spectral sample plus the photon-energy atmosphere compatibility policy.",
|
|
556
|
+
"Kahan compensated summation is used across wavelength nodes to reduce loss of small contributions when rates span large dynamic ranges.",
|
|
557
|
+
"Outputs are instantaneous expected rates only. Exposure duration, photon/electron counts, full-well saturation, shot/read noise, ADC/RAW conversion and reconstruction remain downstream.",
|
|
558
|
+
"Response/refractive-index uncertainties and quadrature convergence error are not propagated into a combined output uncertainty by this version."
|
|
559
|
+
]);
|
|
560
|
+
}
|
|
561
|
+
//# sourceMappingURL=eqe-electron-rate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"eqe-electron-rate.js","sourceRoot":"","sources":["../../src/sensor/eqe-electron-rate.ts"],"names":[],"mappings":"AAAA,sCAAsC;AAEtC;;;;;;;;GAQG;AAEH,OAAO,EACL,mBAAmB,EAEpB,MAAM,+BAA+B,CAAC;AAIvC,OAAO,EAAE,2BAA2B,EAAE,MAAM,uBAAuB,CAAC;AACpE,OAAO,EACL,mCAAmC,EAIpC,MAAM,oBAAoB,CAAC;AAO5B,OAAO,EACL,+BAA+B,EAEhC,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,0CAA0C,EAC1C,kCAAkC,EAClC,+CAA+C,EAGhD,MAAM,wBAAwB,CAAC;AAMhC,MAAM,mBAAmB,GAAG,KAAK,CAAC;AAwHlC,SAAS,cAAc,CACrB,KAAqB,EACrB,KAAa;IAEb,MAAM,QAAQ,GACZ,KAAK,GAAG,KAAK,CAAC,UAAU,CAAC;IAC3B,MAAM,IAAI,GACR,KAAK,CAAC,GAAG,GAAG,QAAQ,CAAC;IACvB,KAAK,CAAC,UAAU;QACd,CAAC,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC;IAChC,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC;AACnB,CAAC;AAED,SAAS,wBAAwB,CAC/B,KAAc,EACd,IAAY;IAEZ,IACE,OAAO,KAAK,KAAK,QAAQ;QACzB,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;QACvB,KAAK,GAAG,CAAC,EACT,CAAC;QACD,MAAM,IAAI,2BAA2B,CACnC,IAAI;YACF,oDAAoD,CACvD,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,qBAAqB,CAC5B,KAAc,EACd,IAAY;IAEZ,IACE,OAAO,KAAK,KAAK,QAAQ;QACzB,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;QACvB,KAAK,IAAI,CAAC,EACV,CAAC;QACD,MAAM,IAAI,2BAA2B,CACnC,IAAI;YACF,wCAAwC,CAC3C,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,6BAA6B,CACpC,KAAc,EACd,IAAY;IAEZ,IACE,OAAO,KAAK,KAAK,QAAQ;QACzB,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC;QAC5B,KAAK,GAAG,CAAC,EACT,CAAC;QACD,MAAM,IAAI,2BAA2B,CACnC,IAAI;YACF,uCAAuC,CAC1C,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,kBAAkB,CACzB,MAAc,EACd,QAAgB;IAEhB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CACpB,CAAC,EACD,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,EAChB,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CACnB,CAAC;IACF,OAAO,CACL,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,QAAQ,CAAC;QAC3B,mBAAmB,GAAG,KAAK,CAC5B,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CACpB,KAAc;IAEd,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AAC/B,CAAC;AAED,SAAS,iBAAiB,CACxB,MAAe,EACf,QAAiB,EACjB,OAAe;IAEf,IACE,aAAa,CAAC,MAAM,CAAC;QACrB,aAAa,CAAC,QAAQ,CAAC,EACvB,CAAC;QACD,MAAM,IAAI,2BAA2B,CACnC,OAAO,CACR,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAS,0BAA0B,CACjC,SACyC,EACzC,aACkD,EAClD,cACwC;IAExC,IACE,SAAS,CAAC,aAAa;QACrB,oDAAoD;QACtD,SAAS;aACN,oCAAoC;YACrC,KAAK;QACP,SAAS,CAAC,wBAAwB;YAChC,KAAK;QACP,SAAS,CAAC,0BAA0B;YAClC,KAAK,EACP,CAAC;QACD,MAAM,IAAI,2BAA2B,CACnC,iFAAiF,CAClF,CAAC;IACJ,CAAC;IAED,IACE,CAAC,aAAa;SACX,kCAAkC;QACrC,aAAa,CAAC,mBAAmB;YAC/B,SAAS;QACX,aAAa,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC;QACnC,CAAC,aAAa,CAAC,kBAAkB;QACjC,aAAa,CAAC,kBAAkB;YAC9B,0BAA0B,EAC5B,CAAC;QACD,MAAM,IAAI,2BAA2B,CACnC,oFAAoF,CACrF,CAAC;IACJ,CAAC;IAED,IACE,aAAa,CAAC,yBAAyB;QACrC,SAAS,CAAC,iBAAiB;QAC7B,aAAa,CAAC,sBAAsB;YAClC,SAAS,CAAC,sBAAsB;QAClC,aAAa,CAAC,SAAS;YACrB,SAAS,CAAC,SAAS;QACrB,aAAa,CAAC,aAAa;YACzB,SAAS,CAAC,aAAa,EACzB,CAAC;QACD,MAAM,IAAI,2BAA2B,CACnC,4DAA4D,CAC7D,CAAC;IACJ,CAAC;IAED,IACE,CAAC,cAAc;SACZ,mCAAmC;QACtC,CAAC,cAAc;aACZ,oCAAoC;QACvC,CAAC,cAAc;aACZ,gCAAgC;QACnC,cAAc,CAAC,MAAM,KAAK,SAAS;QACnC,cAAc,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC;QACpC,cAAc,CAAC,kBAAkB;YAC/B,0BAA0B;QAC5B,cAAc;aACX,4BAA4B;YAC7B,KAAK;QACP,cAAc;aACX,yBAAyB,KAAK,KAAK;QACtC,cAAc;aACX,2BAA2B,KAAK,KAAK;QACxC,cAAc;aACX,6BAA6B,KAAK,KAAK,EAC1C,CAAC;QACD,MAAM,IAAI,2BAA2B,CACnC,iFAAiF,CAClF,CAAC;IACJ,CAAC;IAED,IACE,CAAC,cAAc;SACZ,sCAAsC;QACzC,cAAc;aACX,kBAAkB,CAAC,IAAI;YACxB,kBAAkB,EACpB,CAAC;QACD,MAAM,IAAI,2BAA2B,CACnC,sHAAsH,CACvH,CAAC;IACJ,CAAC;IAED,IACE,cAAc;SACX,qBAAqB,CAAC,IAAI;QAC3B,8CAA8C,EAChD,CAAC;QACD,MAAM,IAAI,2BAA2B,CACnC,iFAAiF,CAClF,CAAC;IACJ,CAAC;IAED,IACE,cAAc,CAAC,yBAAyB;QACtC,SAAS,CAAC,iBAAiB;QAC7B,cAAc,CAAC,sBAAsB;YACnC,SAAS,CAAC,sBAAsB;QAClC,cAAc,CAAC,SAAS;YACtB,SAAS,CAAC,SAAS;QACrB,cAAc,CAAC,4BAA4B;YACzC,aAAa,CAAC,oBAAoB,EACpC,CAAC;QACD,MAAM,IAAI,2BAA2B,CACnC,0FAA0F,CAC3F,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAS,8BAA8B,CACrC,SACyC;IAEzC,IACE,CAAC,KAAK,CAAC,OAAO,CACZ,SAAS,CAAC,aAAa,CACxB;QACD,CAAC,MAAM,CAAC,aAAa,CACnB,SAAS,CAAC,iBAAiB,CAC5B;QACD,SAAS,CAAC,iBAAiB,IAAI,CAAC;QAChC,SAAS,CAAC,aAAa,CAAC,MAAM;YAC5B,SAAS,CAAC,iBAAiB,EAC7B,CAAC;QACD,MAAM,IAAI,2BAA2B,CACnC,yEAAyE,CAC1E,CAAC;IACJ,CAAC;IAED,IAAI,kBAAkB,GACpB,MAAM,CAAC,iBAAiB,CAAC;IAC3B,IAAI,mBAAmB,GAAG,CAAC,CAAC;IAC5B,MAAM,eAAe,GACF;QACf,GAAG,EAAE,CAAC;QACN,UAAU,EAAE,CAAC;KACd,CAAC;IAEJ,SAAS,CAAC,aAAa,CAAC,OAAO,CAC7B,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE;QACpB,MAAM,WAAW,GACf,6BAA6B,CAC3B,KAAK,CAAC,mBAAmB,EACzB,0BAA0B;YACxB,UAAU;YACV,uBAAuB,CAC1B,CAAC;QACJ,IAAI,WAAW,KAAK,UAAU,EAAE,CAAC;YAC/B,MAAM,IAAI,2BAA2B,CACnC,mGAAmG,CACpG,CAAC;QACJ,CAAC;QAED,MAAM,UAAU,GACd,qBAAqB,CACnB,KAAK,CAAC,oBAAoB,EAC1B,0BAA0B;YACxB,UAAU;YACV,wBAAwB,CAC3B,CAAC;QACJ,IACE,UAAU;YACV,kBAAkB,EAClB,CAAC;YACD,MAAM,IAAI,2BAA2B,CACnC,6EAA6E,CAC9E,CAAC;QACJ,CAAC;QACD,kBAAkB;YAChB,UAAU,CAAC;QAEb,MAAM,OAAO,GACX,qBAAqB,CACnB,KAAK,CAAC,2BAA2B,EACjC,0BAA0B;YACxB,UAAU;YACV,+BAA+B,CAClC,CAAC;QACJ,MAAM,gBAAgB,GACpB,qBAAqB,CACnB,KAAK,CAAC,0BAA0B,EAChC,0BAA0B;YACxB,UAAU;YACV,8BAA8B,CACjC,CAAC;QACJ,MAAM,WAAW,GACf,wBAAwB,CACtB,KAAK;aACF,sDAAsD,EACzD,0BAA0B;YACxB,UAAU;YACV,0DAA0D,CAC7D,CAAC;QACJ,MAAM,YAAY,GAChB,wBAAwB,CACtB,KAAK;aACF,kEAAkE,EACrE,0BAA0B;YACxB,UAAU;YACV,sEAAsE,CACzE,CAAC;QACJ,MAAM,oBAAoB,GACxB,WAAW,GAAG,OAAO,CAAC;QACxB,IACE,CAAC,MAAM,CAAC,QAAQ,CACd,oBAAoB,CACrB;YACD,CAAC,kBAAkB,CACjB,YAAY,EACZ,oBAAoB,CACrB,EACD,CAAC;YACD,MAAM,IAAI,2BAA2B,CACnC,kGAAkG,CACnG,CAAC;QACJ,CAAC;QAED,mBAAmB;YACjB,gBAAgB,CAAC;QACnB,IACE,CAAC,MAAM,CAAC,QAAQ,CACd,mBAAmB,CACpB,EACD,CAAC;YACD,MAAM,IAAI,2BAA2B,CACnC,6DAA6D,CAC9D,CAAC;QACJ,CAAC;QACD,cAAc,CACZ,eAAe,EACf,YAAY,CACb,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,IACE,CAAC,kBAAkB,CACjB,mBAAmB,EACnB,CAAC,CACF,EACD,CAAC;QACD,MAAM,IAAI,2BAA2B,CACnC,wDAAwD,CACzD,CAAC;IACJ,CAAC;IAED,MAAM,UAAU,GACd,wBAAwB,CACtB,SAAS;SACN,sDAAsD,EACzD,kEAAkE,CACnE,CAAC;IACJ,IACE,CAAC,kBAAkB,CACjB,eAAe,CAAC,GAAG,EACnB,UAAU,CACX,EACD,CAAC;QACD,MAAM,IAAI,2BAA2B,CACnC,sGAAsG,CACvG,CAAC;IACJ,CAAC;IAED,OAAO,SAAS,CAAC,aAAa,CAAC;AACjC,CAAC;AAED,SAAS,iCAAiC,CACxC,SACyC,EACzC,KACoD,EACpD,cACwC;IAExC,MAAM,SAAS,GACb,cAAc;SACX,2BAA2B,CAAC;IAEjC,IACE,SAAS,KAAK,SAAS;QACvB,SAAS,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,EACjC,CAAC;QACD,MAAM,IAAI,2BAA2B,CACnC,kGAAkG,CACnG,CAAC;IACJ,CAAC;IAED,IACE,cAAc;SACX,kCAAkC;SAClC,OAAO;QACR,SAAS,CAAC,yBAAyB;aAChC,OAAO;QACZ,cAAc;aACX,kCAAkC;aAClC,OAAO;YACR,SAAS,CAAC,yBAAyB;iBAChC,OAAO,EACZ,CAAC;QACD,MAAM,IAAI,2BAA2B,CACnC,mEAAmE,CACpE,CAAC;IACJ,CAAC;IAED,SAAS,CAAC,OAAO,CACf,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;QACf,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAE,CAAC;QAC3B,IACE,KAAK,CAAC,mBAAmB;YACvB,IAAI,CAAC,mBAAmB;YAC1B,KAAK,CAAC,oBAAoB;gBACxB,IAAI,CAAC,oBAAoB;YAC3B,KAAK,CAAC,2BAA2B;gBAC/B,IAAI,CAAC,2BAA2B,EAClC,CAAC;YACD,MAAM,IAAI,2BAA2B,CACnC,2EAA2E,CAC5E,CAAC;QACJ,CAAC;QAED,MAAM,QAAQ,GACZ,cAAc,CAAC,UAAU,CAAC,IAAI;YAC5B,wDAAwD;YACxD,CAAC,CAAC,IAAI;iBACD,kEAAkE;YACvE,CAAC,CAAC,IAAI;iBACD,iEAAiE,CAAC;QAE3E,IACE,KAAK,CAAC,IAAI;YACR,cAAc,CAAC,UAAU,CAAC,IAAI;YAChC,KAAK,CAAC,IAAI;gBACR,cAAc,CAAC,UAAU,CAAC,IAAI;YAChC,CAAC,kBAAkB,CACjB,KAAK,CAAC,KAAK,EACX,QAAQ,CACT,EACD,CAAC;YACD,MAAM,IAAI,2BAA2B,CACnC,qGAAqG,CACtG,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CACtB,SACyC,EACzC,KACoD,EACpD,OAEW;IAKX,IACE,SAAS,CAAC,eAAe;QACvB,QAAQ,EACV,CAAC;QACD,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,MAAM,IAAI,2BAA2B,CACnC,yEAAyE,CAC1E,CAAC;QACJ,CAAC;QACD,OAAO,IAAI,GAAG,EAAE,CAAC;IACnB,CAAC;IAED,IACE,SAAS,CAAC,eAAe,KAAK,KAAK,EACnC,CAAC;QACD,MAAM,IAAI,2BAA2B,CACnC,kFAAkF,CACnF,CAAC;IACJ,CAAC;IAED,IACE,OAAO,KAAK,SAAS;QACrB,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC;QAC/B,OAAO,CAAC,OAAO,CAAC,MAAM;YACpB,KAAK,CAAC,MAAM,EACd,CAAC;QACD,MAAM,IAAI,2BAA2B,CACnC,gGAAgG,CACjG,CAAC;IACJ,CAAC;IAED,MAAM,OAAO,GACX,IAAI,GAAG,EAGJ,CAAC;IAEN,OAAO,CAAC,OAAO,CAAC,OAAO,CACrB,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE;QACpB,IACE,OAAO,KAAK,KAAK,QAAQ;YACzB,KAAK,KAAK,IAAI,EACd,CAAC;YACD,MAAM,IAAI,2BAA2B,CACnC,iCAAiC;gBAC/B,UAAU;gBACV,sBAAsB,CACzB,CAAC;QACJ,CAAC;QAED,MAAM,mBAAmB,GACvB,6BAA6B,CAC3B,KAAK,CAAC,mBAAmB,EACzB,iCAAiC;YAC/B,UAAU;YACV,uBAAuB,CAC1B,CAAC;QACJ,IACE,mBAAmB;YACjB,KAAK,CAAC,MAAM;YACd,OAAO,CAAC,GAAG,CACT,mBAAmB,CACpB,EACD,CAAC;YACD,MAAM,IAAI,2BAA2B,CACnC,iFAAiF,CAClF,CAAC;QACJ,CAAC;QACD,OAAO,CAAC,GAAG,CACT,mBAAmB,EACnB,KAAK,CAAC,eAAe,CACtB,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,uBAAuB,CAC9B,MAC+B,EAC/B,QAC+B;IAE/B,OAAO,CACL,aAAa,CAAC,MAAM,CAAC;QACrB,aAAa,CAAC,QAAQ,CAAC,CACxB,CAAC;AACJ,CAAC;AAED,SAAS,uBAAuB,CAC9B,QAGY,EACZ,SACyC;IAEzC,IACE,QAAQ,CAAC,SAAS;QAChB,SAAS,CAAC,iBAAiB;QAC7B,QAAQ,CAAC,sBAAsB;YAC7B,SAAS,CAAC,sBAAsB;QAClC,QAAQ,CAAC,SAAS;YAChB,SAAS,CAAC,SAAS;QACrB,QAAQ,CAAC,kBAAkB;YACzB,SAAS,CAAC,kBAAkB;QAC9B,QAAQ,CAAC,aAAa;YACpB,SAAS,CAAC,aAAa;QACzB,QAAQ,CAAC,gBAAgB;YACvB,SAAS,CAAC,wBAAwB,EACpC,CAAC;QACD,MAAM,IAAI,2BAA2B,CACnC,sGAAsG,CACvG,CAAC;IACJ,CAAC;IAED,iBAAiB,CACf,QAAQ,CAAC,WAAW,EACpB,SAAS,CAAC,mBAAmB,EAC7B,kEAAkE,CACnE,CAAC;IAEF,MAAM,gBAAgB,GACpB,SAAS,CAAC,iBAAiB,CAAC,QAAQ,CAAC;IACvC,IACE,CAAC,uBAAuB,CACtB,QAAQ,CAAC,iBAAiB,CAAC,OAAO,EAClC,gBAAgB,CAAC,OAAO,CACzB;QACD,CAAC,uBAAuB,CACtB,QAAQ,CAAC,iBAAiB,CAAC,OAAO,EAClC,gBAAgB,CAAC,OAAO,CACzB;QACD,aAAa,CACX,QAAQ,CAAC,iBAAiB,CAAC,MAAM,CAClC;YACC,aAAa,CACX,gBAAgB,CAAC,MAAM,CACxB,EACH,CAAC;QACD,MAAM,IAAI,2BAA2B,CACnC,mGAAmG,CACpG,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAS,gCAAgC,CACvC,eAC+B,EAC/B,SACyC;IAEzC,MAAM,QAAQ,GACZ,eAAe,CAAC,QAAQ,CAAC,IAAI,CAC3B,CAAC,KAAK,EAAE,EAAE,CACR,KAAK,CAAC,SAAS;QACf,SAAS,CAAC,SAAS,CACtB,CAAC;IACJ,IACE,QAAQ,KAAK,SAAS;QACtB,SAAS,CAAC,sBAAsB;YAC9B,SAAS;QACX,aAAa,CACX,0CAA0C,CACxC,QAAQ,CACT,CACF;YACC,aAAa,CACX,SAAS,CAAC,sBAAsB,CACjC,EACH,CAAC;QACD,MAAM,IAAI,2BAA2B,CACnC,mHAAmH,CACpH,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAS,kBAAkB,CACzB,QACqC;IAQrC,IACE,QAAQ,CAAC,IAAI;QACb,uCAAuC,EACvC,CAAC;QACD,MAAM,IAAI,2BAA2B,CACnC,wEAAwE,CACzE,CAAC;IACJ,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,8BAA8B,CAC5C,KACqC;IAErC,0BAA0B,CACxB,KAAK,CAAC,SAAS,EACf,KAAK,CAAC,aAAa,EACnB,KAAK,CAAC,cAAc,CACrB,CAAC;IAEF,IACE,KAAK,CAAC,SAAS;SACZ,kBAAkB;QACnB,iCAAiC,EACnC,CAAC;QACD,MAAM,IAAI,2BAA2B,CACnC,qGAAqG,CACtG,CAAC;IACJ,CAAC;IAED,MAAM,YAAY,GAChB,+BAA+B,CAC7B,KAAK,CAAC,oBAAoB,CAC3B,CAAC;IACJ,MAAM,eAAe,GACnB,kCAAkC,CAChC,KAAK,CAAC,uBAAuB,CAC9B,CAAC;IAEJ,IACE,YAAY,CAAC,SAAS;QACpB,KAAK,CAAC,SAAS;aACZ,sBAAsB;QAC3B,eAAe,CAAC,SAAS;YACvB,KAAK,CAAC,SAAS;iBACZ,iBAAiB;QACtB,eAAe;aACZ,sBAAsB;YACvB,YAAY,CAAC,SAAS,EACxB,CAAC;QACD,MAAM,IAAI,2BAA2B,CACnC,wFAAwF,CACzF,CAAC;IACJ,CAAC;IAED,gCAAgC,CAC9B,eAAe,EACf,KAAK,CAAC,SAAS,CAChB,CAAC;IAEF,MAAM,KAAK,GACT,8BAA8B,CAC5B,KAAK,CAAC,SAAS,CAChB,CAAC;IACJ,iCAAiC,CAC/B,KAAK,CAAC,SAAS,EACf,KAAK,EACL,KAAK,CAAC,cAAc,CACrB,CAAC;IAEF,MAAM,UAAU,GACd,eAAe,CACb,KAAK,CAAC,SAAS,EACf,KAAK,EACL,KAAK,CAAC,sBAAsB,CAC7B,CAAC;IAEJ,MAAM,aAAa,GACA;QACf,GAAG,EAAE,CAAC;QACN,UAAU,EAAE,CAAC;KACd,CAAC;IACJ,MAAM,eAAe,GACF;QACf,GAAG,EAAE,CAAC;QACN,UAAU,EAAE,CAAC;KACd,CAAC;IACJ,MAAM,aAAa,GAEf,EAAE,CAAC;IAEP,IAAI,wBAAwB,GAC1B,KAAK,CAAC;IACR,IAAI,gCAAgC,GAClC,KAAK,CAAC;IAER,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,QAAQ,GACZ,+CAA+C,CAAC;YAC9C,oBAAoB,EAClB,YAAY;YACd,uBAAuB,EACrB,eAAe;YACjB,SAAS,EACP,KAAK,CAAC,SAAS,CAAC,SAAS;YAC3B,oBAAoB,EAClB,IAAI,CAAC,oBAAoB;YAC3B,eAAe,EACb,KAAK,CAAC,SAAS;iBACZ,eAAe;SACrB,CAAC,CAAC;QAEL,IAAI,CAAC,wBAAwB,EAAE,CAAC;YAC9B,uBAAuB,CACrB,QAAQ,CAAC,KAAK,EACd,KAAK,CAAC,SAAS,CAChB,CAAC;YACF,wBAAwB;gBACtB,IAAI,CAAC;QACT,CAAC;QAED,MAAM,GAAG,GACP,kBAAkB,CAChB,QAAQ,CAAC,KAAK,CAAC,QAAQ,CACxB,CAAC;QAEJ,MAAM,QAAQ,GACZ,UAAU,CAAC,GAAG,CACZ,IAAI,CAAC,mBAAmB,CACzB,CAAC;QACJ,MAAM,YAAY,GAChB,mCAAmC,CAAC;YAClC,oBAAoB,EAClB,IAAI,CAAC,oBAAoB;YAC3B,eAAe,EACb,KAAK,CAAC,SAAS;iBACZ,eAAe;YACpB,GAAG,CAAC,KAAK,CAAC,SAAS;iBAChB,eAAe,KAAK,KAAK;gBAC1B,CAAC,CAAC;oBACE,uBAAuB,EACrB,QAAS;oBACX,GAAG,CAAC,KAAK,CAAC,sBAAuB;yBAC9B,mBAAmB;wBACtB,SAAS;wBACP,CAAC,CAAC,EAAE;wBACJ,CAAC,CAAC;4BACE,sBAAsB,EACpB,KAAK;iCACF,sBAAuB;iCACvB,mBAAmB;yBACzB,CAAC;oBACN,kBAAkB,EAChB,KAAK,CAAC,sBAAuB;yBAC1B,eAAe;iBACrB;gBACH,CAAC,CAAC,EAAE,CAAC;SACR,CAAC,CAAC,KAAK,CAAC;QAEX,MAAM,6BAA6B,GACjC,IAAI;aACD,sDAAsD;YACzD,IAAI,CAAC,2BAA2B,CAAC;QACnC,MAAM,2BAA2B,GAC/B,6BAA6B;YAC7B,YAAY,CAAC,kBAAkB,CAAC;QAClC,MAAM,sCAAsC,GAC1C,2BAA2B;YAC3B,GAAG,CAAC,yBAAyB,CAAC;QAEhC,IACE,CAAC,MAAM,CAAC,QAAQ,CACd,6BAA6B,CAC9B;YACD,CAAC,MAAM,CAAC,QAAQ,CACd,2BAA2B,CAC5B;YACD,CAAC,MAAM,CAAC,QAAQ,CACd,sCAAsC,CACvC,EACD,CAAC;YACD,MAAM,IAAI,2BAA2B,CACnC,0DAA0D,CAC3D,CAAC;QACJ,CAAC;QAED,cAAc,CACZ,aAAa,EACb,2BAA2B,CAC5B,CAAC;QACF,cAAc,CACZ,eAAe,EACf,sCAAsC,CACvC,CAAC;QAEF,IACE,GAAG,CAAC,WAAW;YACf,iDAAiD,EACjD,CAAC;YACD,gCAAgC;gBAC9B,IAAI,CAAC;QACT,CAAC;QAED,aAAa,CAAC,IAAI,CAAC;YACjB,mBAAmB,EACjB,IAAI,CAAC,mBAAmB;YAC1B,oBAAoB,EAClB,IAAI,CAAC,oBAAoB;YAC3B,2BAA2B,EACzB,IAAI,CAAC,2BAA2B;YAClC,sDAAsD,EACpD,IAAI;iBACD,sDAAsD;YAC3D,6BAA6B;YAC7B,0BAA0B,EACxB,YAAY;iBACT,0BAA0B;YAC/B,kBAAkB,EAChB,YAAY;iBACT,kBAAkB;YACvB,oBAAoB,EAClB,YAAY;iBACT,oBAAoB;YACzB,GAAG,CAAC,YAAY;iBACb,wBAAwB;gBAC3B,SAAS;gBACP,CAAC,CAAC,EAAE;gBACJ,CAAC,CAAC;oBACE,wBAAwB,EACtB,YAAY;yBACT,wBAAwB;iBAC9B,CAAC;YACN,GAAG,CAAC,YAAY;iBACb,yBAAyB;gBAC5B,SAAS;gBACP,CAAC,CAAC,EAAE;gBACJ,CAAC,CAAC;oBACE,yBAAyB,EACvB,YAAY;yBACT,yBAAyB;iBAC/B,CAAC;YACN,GAAG,CAAC,YAAY;iBACb,0BAA0B;gBAC7B,SAAS;gBACP,CAAC,CAAC,EAAE;gBACJ,CAAC,CAAC;oBACE,0BAA0B,EACxB,YAAY;yBACT,0BAA0B;iBAChC,CAAC;YACN,2BAA2B;YAC3B,kCAAkC,EAChC,GAAG,CAAC,yBAAyB;YAC/B,mBAAmB,EACjB,GAAG,CAAC,WAAW;YACjB,GAAG,CAAC,GAAG,CAAC,0BAA0B;gBAClC,SAAS;gBACP,CAAC,CAAC,EAAE;gBACJ,CAAC,CAAC;oBACE,0BAA0B,EACxB,GAAG,CAAC,0BAA0B;iBACjC,CAAC;YACN,GAAG,CAAC,GAAG;iBACJ,iCAAiC;gBACpC,SAAS;gBACP,CAAC,CAAC,EAAE;gBACJ,CAAC,CAAC;oBACE,iCAAiC,EAC/B,GAAG;yBACA,iCAAiC;iBACvC,CAAC;YACN,yBAAyB,EACvB,QAAQ,CAAC,KAAK;iBACX,iBAAiB;YACtB,sCAAsC;SACvC,CAAC,CAAC;IACL,CAAC;IAED,IACE,CAAC,MAAM,CAAC,QAAQ,CACd,aAAa,CAAC,GAAG,CAClB;QACD,CAAC,MAAM,CAAC,QAAQ,CACd,eAAe,CAAC,GAAG,CACpB,EACD,CAAC;QACD,MAAM,IAAI,2BAA2B,CACnC,qDAAqD,CACtD,CAAC;IACJ,CAAC;IAED,OAAO,mBAAmB,CACxB;QACE,sBAAsB,EACpB,KAAK,CAAC,SAAS;aACZ,sBAAsB;QAC3B,iBAAiB,EACf,KAAK,CAAC,SAAS;aACZ,iBAAiB;QACtB,4BAA4B,EAC1B,KAAK,CAAC,aAAa;aAChB,oBAAoB;QACzB,uBAAuB,EACrB,KAAK,CAAC,cAAc;aACjB,uBAAuB;QAC5B,IAAI,EAAE;YACJ,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI;SACxB;QACD,SAAS,EACP,KAAK,CAAC,SAAS,CAAC,SAAS;QAC3B,kBAAkB,EAChB,KAAK,CAAC,SAAS;aACZ,kBAAkB;QACvB,aAAa,EACX,KAAK,CAAC,SAAS,CAAC,aAAa;QAC/B,sBAAsB,EACpB,KAAK,CAAC,aAAa;aAChB,mBAAmB;QACxB,eAAe,EACb,KAAK,CAAC,SAAS;aACZ,eAAe;QACpB,yBAAyB,EAAE;YACzB,GAAG,KAAK,CAAC,SAAS;iBACf,yBAAyB;SAC7B;QACD,iBAAiB,EACf,KAAK,CAAC,MAAM;QACd,aAAa;QACb,2BAA2B,EACzB,aAAa,CAAC,GAAG;QACnB,sCAAsC,EACpC,eAAe,CAAC,GAAG;QACrB,eAAe,EACb,mBAAmB;QACrB,4BAA4B,EAC1B,IAAI;QACN,wBAAwB,EACtB,IAAI;QACN,2BAA2B,EACzB,KAAK;QACP,gCAAgC;QAChC,oBAAoB,EAAE,IAAI;QAC1B,sBAAsB,EAAE,IAAI;QAC5B,qBAAqB,EAAE,KAAK;QAC5B,uBAAuB,EAAE,KAAK;QAC9B,iBAAiB,EAAE,KAAK;QACxB,0BAA0B,EACxB,KAAK;QACP,uBAAuB,EAAE,KAAK;QAC9B,kBAAkB,EAAE,KAAK;QACzB,gBAAgB,EAAE,KAAK;QACvB,gBAAgB,EAAE,KAAK;QACvB,sBAAsB,EACpB,KAAK;QACP,oBAAoB,EAAE,KAAK;QAC3B,6BAA6B,EAC3B,KAAK;QACP,iCAAiC,EAC/B,KAAK;QACP,mCAAmC,EACjC,KAAK;KACR,EACD,0BAA0B,EAC1B,OAAO,EACP;QACE,wIAAwI;QACxI,wJAAwJ;QACxJ,4LAA4L;QAC5L,gKAAgK;QAChK,oIAAoI;QACpI,2KAA2K;QAC3K,qMAAqM;QACrM,kKAAkK;QAClK,yIAAyI;QACzI,2LAA2L;QAC3L,iJAAiJ;KAClJ,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Module boundary and integration notes.
|
|
3
|
+
* Compose validated irradiance reduction, response applicability/range, EQE conversion and stationary
|
|
4
|
+
* local integration. The exposure value is suitable for accumulated-charge photoSignal;
|
|
5
|
+
* dark/completeness/capacity/readout remain explicit downstream inputs. Invalid or unsupported
|
|
6
|
+
* evidence fails closed.
|
|
7
|
+
* Internal shared instantaneous path; no stationarity or exposure accumulation.
|
|
8
|
+
* @see docs/MOTION_AND_SIGNAL.md for equations, coordinate/unit conventions, blockers and support
|
|
9
|
+
* limits.
|
|
10
|
+
*/
|
|
11
|
+
import { type CalculationResult } from "../core/calculation-result.js";
|
|
12
|
+
import { calculateSensorSpatialSamplingQuadrature, type CalculateSensorSpatialSamplingQuadratureInput } from "./spatial-sampling-quadrature.js";
|
|
13
|
+
import { calculateSensorSpectralQuadrature, type CalculateSensorSpectralQuadratureInput } from "./spectral-quadrature.js";
|
|
14
|
+
import { reduceSensorSpatioSpectralIrradiance, type ReduceSensorSpatioSpectralIrradianceInput } from "./spatio-spectral-reduction.js";
|
|
15
|
+
import { assessSensorResponseApplicationCompatibility, type AssessSensorResponseApplicationCompatibilityInput } from "./response-application-compatibility.js";
|
|
16
|
+
import { assessSensorResponseOperatingRange, type AssessSensorResponseOperatingRangeInput } from "./response-operating-range.js";
|
|
17
|
+
import { calculateSensorEqeElectronRate, type CalculateSensorEqeElectronRateInput } from "./eqe-electron-rate.js";
|
|
18
|
+
import { bindSensorRateToLocalExposure, type BindSensorRateToLocalExposureInput } from "./local-exposure-binding.js";
|
|
19
|
+
import { type SensorEqeExposureIntegration, type SensorRateTemporalStationarityProfile } from "./constant-rate-temporal-integration.js";
|
|
20
|
+
/** Explicit post-optics irradiance samples and evidence; no renderer or RGB conversion. */
|
|
21
|
+
export interface CalculateSensorEqeLocalExposureInput {
|
|
22
|
+
/** Physical area, registered aperture/lattice, AA support and destination site. */
|
|
23
|
+
spatialSampling: Omit<CalculateSensorSpatialSamplingQuadratureInput, "colorSamplingProfile" | "colorSamplingBindingProfile" | "nativeRaster">;
|
|
24
|
+
/** Explicit wavelength basis/range, channel and midpoint subdivision budget. */
|
|
25
|
+
spectralSampling: Omit<CalculateSensorSpectralQuadratureInput, "colorSamplingProfile" | "spectralResponseProfile">;
|
|
26
|
+
/** One W/m²/nm value per identified pre-AA spatial/spectral node. */
|
|
27
|
+
irradianceSamples: ReduceSensorSpatioSpectralIrradianceInput["sampleValues"];
|
|
28
|
+
/** Source-plane, collection-area and reference-condition evidence. */
|
|
29
|
+
responseApplication: Omit<AssessSensorResponseApplicationCompatibilityInput, "reduction">;
|
|
30
|
+
/** Evidence-backed linear response domain; no extrapolation is authorized. */
|
|
31
|
+
operatingRangeProfile: AssessSensorResponseOperatingRangeInput["operatingRangeProfile"];
|
|
32
|
+
/** Destination CFA/channel identity shared by every composed step. */
|
|
33
|
+
colorSamplingProfile: CalculateSensorEqeElectronRateInput["colorSamplingProfile"];
|
|
34
|
+
/** Direct or separable EQE response; A/W responsivity is unsupported here. */
|
|
35
|
+
spectralResponseProfile: CalculateSensorEqeElectronRateInput["spectralResponseProfile"];
|
|
36
|
+
/** Required explicit photon-energy conversion context for air wavelengths. */
|
|
37
|
+
airPhotonEnergyContext?: CalculateSensorEqeElectronRateInput["airPhotonEnergyContext"];
|
|
38
|
+
/** Native one-to-one site binding and one opening/closing shutter event. */
|
|
39
|
+
localExposure: Omit<BindSensorRateToLocalExposureInput, "rate" | "colorSamplingProfile">;
|
|
40
|
+
/** Separate declaration authorizing a constant rate across this exact window. */
|
|
41
|
+
stationarityProfile: SensorRateTemporalStationarityProfile;
|
|
42
|
+
}
|
|
43
|
+
/** Child envelopes retain separate provenance, validity and unpropagated uncertainty. */
|
|
44
|
+
export interface SensorEqeLocalExposure {
|
|
45
|
+
upstreamOrigin: "declared-spatio-spectral-irradiance-samples";
|
|
46
|
+
upstreamSceneAndOpticsVerified: false;
|
|
47
|
+
spatialQuadrature: ReturnType<typeof calculateSensorSpatialSamplingQuadrature>;
|
|
48
|
+
spectralQuadrature: ReturnType<typeof calculateSensorSpectralQuadrature>;
|
|
49
|
+
reduction: ReturnType<typeof reduceSensorSpatioSpectralIrradiance>;
|
|
50
|
+
compatibility: ReturnType<typeof assessSensorResponseApplicationCompatibility>;
|
|
51
|
+
operatingRange: ReturnType<typeof assessSensorResponseOperatingRange>;
|
|
52
|
+
electronRate: ReturnType<typeof calculateSensorEqeElectronRate>;
|
|
53
|
+
exposureBinding: ReturnType<typeof bindSensorRateToLocalExposure>;
|
|
54
|
+
exposure: CalculationResult<SensorEqeExposureIntegration>;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Compose validated irradiance reduction, response applicability/range, EQE
|
|
58
|
+
* conversion and stationary local integration. The exposure value is suitable
|
|
59
|
+
* for accumulated-charge photoSignal; dark/completeness/capacity/readout remain
|
|
60
|
+
* explicit downstream inputs. Invalid or unsupported evidence fails closed.
|
|
61
|
+
*/
|
|
62
|
+
export declare function calculateSensorEqeLocalExposure(input: CalculateSensorEqeLocalExposureInput): CalculationResult<SensorEqeLocalExposure>;
|
|
63
|
+
/** Internal shared instantaneous path; no stationarity or exposure accumulation. */
|
|
64
|
+
export declare function calculateSensorEqeLocalRate(input: Omit<CalculateSensorEqeLocalExposureInput, "stationarityProfile">): Omit<SensorEqeLocalExposure, "upstreamOrigin" | "upstreamSceneAndOpticsVerified" | "exposure">;
|
|
65
|
+
//# sourceMappingURL=eqe-local-exposure.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"eqe-local-exposure.d.ts","sourceRoot":"","sources":["../../src/sensor/eqe-local-exposure.ts"],"names":[],"mappings":"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"}
|