@photivra/engine 1.4.0 → 2.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/CHANGELOG.md +401 -6
- package/CITATION.cff +1 -1
- package/NODE_SUPPORT.md +64 -12
- package/README.md +301 -182
- package/SECURITY.md +37 -28
- package/THIRD_PARTY.md +148 -4
- package/dist/camera/equivalent-focal-length.d.ts +13 -14
- package/dist/camera/equivalent-focal-length.js +15 -13
- package/dist/camera/equivalent-focal-length.js.map +1 -1
- package/dist/camera/field-of-view.d.ts +30 -19
- package/dist/camera/field-of-view.js +67 -18
- package/dist/camera/field-of-view.js.map +1 -1
- package/dist/camera/lens-projection.d.ts +170 -0
- package/dist/camera/lens-projection.js +444 -0
- package/dist/camera/lens-projection.js.map +1 -0
- package/dist/camera/projected-object-size.d.ts +10 -11
- package/dist/camera/projected-object-size.js +12 -10
- package/dist/camera/projected-object-size.js.map +1 -1
- package/dist/capture/capture-export-metadata.d.ts +9 -10
- package/dist/capture/capture-export-metadata.js +8 -5
- package/dist/capture/capture-export-metadata.js.map +1 -1
- package/dist/capture/dng-import.d.ts +91 -0
- package/dist/capture/dng-import.js +343 -0
- package/dist/capture/dng-import.js.map +1 -0
- package/dist/capture/environment-raw-producer.d.ts +37 -17
- package/dist/capture/environment-raw-producer.js +43 -19
- package/dist/capture/environment-raw-producer.js.map +1 -1
- package/dist/capture/export-jpeg.d.ts +35 -4
- package/dist/capture/export-jpeg.js +133 -47
- package/dist/capture/export-jpeg.js.map +1 -1
- package/dist/capture/export-tiff.d.ts +48 -24
- package/dist/capture/export-tiff.js +91 -31
- package/dist/capture/export-tiff.js.map +1 -1
- package/dist/capture/focus-control.d.ts +42 -65
- package/dist/capture/focus-control.js +56 -75
- package/dist/capture/focus-control.js.map +1 -1
- package/dist/capture/host-yield-cadence.d.ts +25 -0
- package/dist/capture/host-yield-cadence.js +25 -0
- package/dist/capture/host-yield-cadence.js.map +1 -0
- package/dist/capture/linear-encoding.d.ts +14 -12
- package/dist/capture/linear-encoding.js +14 -13
- package/dist/capture/linear-encoding.js.map +1 -1
- package/dist/capture/lossless-jpeg.d.ts +27 -0
- package/dist/capture/lossless-jpeg.js +237 -0
- package/dist/capture/lossless-jpeg.js.map +1 -0
- package/dist/capture/native-environment-lean.d.ts +227 -0
- package/dist/capture/native-environment-lean.js +974 -0
- package/dist/capture/native-environment-lean.js.map +1 -0
- package/dist/capture/native-environment-optical-stage.d.ts +97 -0
- package/dist/capture/native-environment-optical-stage.js +340 -0
- package/dist/capture/native-environment-optical-stage.js.map +1 -0
- package/dist/capture/native-environment-raw.d.ts +140 -6
- package/dist/capture/native-environment-raw.js +435 -34
- package/dist/capture/native-environment-raw.js.map +1 -1
- package/dist/capture/native-raw-development.d.ts +118 -5
- package/dist/capture/native-raw-development.js +224 -59
- package/dist/capture/native-raw-development.js.map +1 -1
- package/dist/capture/native-raw-dng.d.ts +60 -0
- package/dist/capture/native-raw-dng.js +167 -0
- package/dist/capture/native-raw-dng.js.map +1 -0
- package/dist/capture/native-raw.d.ts +67 -10
- package/dist/capture/native-raw.js +90 -24
- package/dist/capture/native-raw.js.map +1 -1
- package/dist/capture/packed-sensor-raw.d.ts +160 -0
- package/dist/capture/packed-sensor-raw.js +221 -0
- package/dist/capture/packed-sensor-raw.js.map +1 -0
- package/dist/capture/photographic-export.d.ts +58 -35
- package/dist/capture/photographic-export.js +177 -70
- package/dist/capture/photographic-export.js.map +1 -1
- package/dist/capture/raw-development-kernel.d.ts +52 -0
- package/dist/capture/raw-development-kernel.js +88 -0
- package/dist/capture/raw-development-kernel.js.map +1 -0
- package/dist/capture/raw-frame-limits.d.ts +7 -7
- package/dist/capture/raw-frame-limits.js +7 -6
- package/dist/capture/raw-frame-limits.js.map +1 -1
- package/dist/capture/raw-frame-reconstruction.d.ts +8 -9
- package/dist/capture/raw-frame-reconstruction.js +9 -8
- package/dist/capture/raw-frame-reconstruction.js.map +1 -1
- package/dist/capture/raw-white-level.d.ts +55 -0
- package/dist/capture/raw-white-level.js +165 -0
- package/dist/capture/raw-white-level.js.map +1 -0
- package/dist/capture/release-sequence.d.ts +5 -7
- package/dist/capture/release-sequence.js +15 -13
- package/dist/capture/release-sequence.js.map +1 -1
- package/dist/capture/sensor-raw-frame.d.ts +5 -6
- package/dist/capture/sensor-raw-frame.js +26 -9
- package/dist/capture/sensor-raw-frame.js.map +1 -1
- package/dist/capture/sensor-raw-producer.d.ts +21 -13
- package/dist/capture/sensor-raw-producer.js +86 -25
- package/dist/capture/sensor-raw-producer.js.map +1 -1
- package/dist/capture/simulated-capture.d.ts +15 -16
- package/dist/capture/simulated-capture.js +22 -12
- package/dist/capture/simulated-capture.js.map +1 -1
- package/dist/color/camera-color-matrix.d.ts +69 -0
- package/dist/color/camera-color-matrix.js +132 -0
- package/dist/color/camera-color-matrix.js.map +1 -0
- package/dist/color/capture-color.d.ts +17 -10
- package/dist/color/capture-color.js +50 -17
- package/dist/color/capture-color.js.map +1 -1
- package/dist/color/chromatic-adaptation.d.ts +63 -0
- package/dist/color/chromatic-adaptation.js +91 -0
- package/dist/color/chromatic-adaptation.js.map +1 -0
- package/dist/color/color-difference.d.ts +104 -0
- package/dist/color/color-difference.js +205 -0
- package/dist/color/color-difference.js.map +1 -0
- package/dist/color/color-matching-functions.d.ts +168 -0
- package/dist/color/color-matching-functions.js +309 -0
- package/dist/color/color-matching-functions.js.map +1 -0
- package/dist/color/colorimetry-math.d.ts +52 -0
- package/dist/color/colorimetry-math.js +144 -0
- package/dist/color/colorimetry-math.js.map +1 -0
- package/dist/color/gamut-mapping.d.ts +54 -0
- package/dist/color/gamut-mapping.js +107 -0
- package/dist/color/gamut-mapping.js.map +1 -0
- package/dist/color/illuminants.d.ts +182 -0
- package/dist/color/illuminants.js +434 -0
- package/dist/color/illuminants.js.map +1 -0
- package/dist/color/rgb-color-spaces.d.ts +79 -0
- package/dist/color/rgb-color-spaces.js +115 -0
- package/dist/color/rgb-color-spaces.js.map +1 -0
- package/dist/color/sensor-color-development.d.ts +33 -11
- package/dist/color/sensor-color-development.js +104 -30
- package/dist/color/sensor-color-development.js.map +1 -1
- package/dist/color/srgb-icc.d.ts +9 -2
- package/dist/color/srgb-icc.js +16 -5
- package/dist/color/srgb-icc.js.map +1 -1
- package/dist/color/srgb-transfer.d.ts +1 -2
- package/dist/color/srgb-transfer.js +1 -1
- package/dist/color/srgb-transfer.js.map +1 -1
- package/dist/color/white-balance.d.ts +68 -19
- package/dist/color/white-balance.js +168 -35
- package/dist/color/white-balance.js.map +1 -1
- package/dist/composition/image-formation-plan.d.ts +152 -128
- package/dist/composition/image-formation-plan.js +292 -138
- package/dist/composition/image-formation-plan.js.map +1 -1
- package/dist/composition/plan-consumer.d.ts +6 -7
- package/dist/composition/plan-consumer.js +14 -11
- package/dist/composition/plan-consumer.js.map +1 -1
- package/dist/core/calculation-result.d.ts +21 -14
- package/dist/core/calculation-result.js +209 -11
- package/dist/core/calculation-result.js.map +1 -1
- package/dist/core/canonical-json.d.ts +13 -8
- package/dist/core/canonical-json.js +34 -15
- package/dist/core/canonical-json.js.map +1 -1
- package/dist/core/configuration-error.d.ts +5 -4
- package/dist/core/configuration-error.js +5 -3
- package/dist/core/configuration-error.js.map +1 -1
- package/dist/core/evidence-provenance.d.ts +12 -12
- package/dist/core/evidence-provenance.js +10 -9
- package/dist/core/evidence-provenance.js.map +1 -1
- package/dist/core/image-formation.d.ts +11 -10
- package/dist/core/image-formation.js +11 -9
- package/dist/core/image-formation.js.map +1 -1
- package/dist/core/owned-data.d.ts +9 -17
- package/dist/core/owned-data.js +9 -16
- package/dist/core/owned-data.js.map +1 -1
- package/dist/core/portable-math.d.ts +15 -0
- package/dist/core/portable-math.js +56 -0
- package/dist/core/portable-math.js.map +1 -0
- package/dist/core/record-validation.d.ts +48 -9
- package/dist/core/record-validation.js +93 -19
- package/dist/core/record-validation.js.map +1 -1
- package/dist/core/scientific-assurance.d.ts +16 -14
- package/dist/core/scientific-assurance.js +22 -18
- package/dist/core/scientific-assurance.js.map +1 -1
- package/dist/core/spectral-composition.d.ts +13 -14
- package/dist/core/spectral-composition.js +30 -27
- package/dist/core/spectral-composition.js.map +1 -1
- package/dist/core/spectral.d.ts +5 -6
- package/dist/core/spectral.js +9 -7
- package/dist/core/spectral.js.map +1 -1
- package/dist/core/validation.d.ts +3 -6
- package/dist/core/validation.js +3 -5
- package/dist/core/validation.js.map +1 -1
- package/dist/core/version.d.ts +6 -6
- package/dist/core/version.js +6 -5
- package/dist/core/version.js.map +1 -1
- package/dist/equipment/exposure-capabilities.d.ts +10 -10
- package/dist/equipment/exposure-capabilities.js +40 -30
- package/dist/equipment/exposure-capabilities.js.map +1 -1
- package/dist/equipment/generic-tier-assets.d.ts +13 -6
- package/dist/equipment/generic-tier-assets.js +34 -15
- package/dist/equipment/generic-tier-assets.js.map +1 -1
- package/dist/equipment/generic-tier-presets.d.ts +5 -6
- package/dist/equipment/generic-tier-presets.js +15 -13
- package/dist/equipment/generic-tier-presets.js.map +1 -1
- package/dist/equipment/iso-capabilities.d.ts +21 -22
- package/dist/equipment/iso-capabilities.js +49 -44
- package/dist/equipment/iso-capabilities.js.map +1 -1
- package/dist/equipment/metering-capabilities.d.ts +5 -6
- package/dist/equipment/metering-capabilities.js +22 -19
- package/dist/equipment/metering-capabilities.js.map +1 -1
- package/dist/equipment/release-capabilities.d.ts +3 -4
- package/dist/equipment/release-capabilities.js +18 -14
- package/dist/equipment/release-capabilities.js.map +1 -1
- package/dist/exposure/exposure-duration-control.d.ts +19 -17
- package/dist/exposure/exposure-duration-control.js +27 -23
- package/dist/exposure/exposure-duration-control.js.map +1 -1
- package/dist/exposure/exposure-mode-resolver.d.ts +42 -39
- package/dist/exposure/exposure-mode-resolver.js +127 -82
- package/dist/exposure/exposure-mode-resolver.js.map +1 -1
- package/dist/exposure/exposure.d.ts +17 -16
- package/dist/exposure/exposure.js +22 -15
- package/dist/exposure/exposure.js.map +1 -1
- package/dist/exposure/flash-ttl.d.ts +135 -0
- package/dist/exposure/flash-ttl.js +193 -0
- package/dist/exposure/flash-ttl.js.map +1 -0
- package/dist/exposure/flash.d.ts +144 -36
- package/dist/exposure/flash.js +259 -59
- package/dist/exposure/flash.js.map +1 -1
- package/dist/exposure/metering-scene-radiance.d.ts +10 -10
- package/dist/exposure/metering-scene-radiance.js +42 -23
- package/dist/exposure/metering-scene-radiance.js.map +1 -1
- package/dist/exposure/metering-target.d.ts +8 -8
- package/dist/exposure/metering-target.js +30 -20
- package/dist/exposure/metering-target.js.map +1 -1
- package/dist/exposure/metering-temporal.d.ts +16 -15
- package/dist/exposure/metering-temporal.js +41 -19
- package/dist/exposure/metering-temporal.js.map +1 -1
- package/dist/exposure/metering.d.ts +64 -17
- package/dist/exposure/metering.js +159 -30
- package/dist/exposure/metering.js.map +1 -1
- package/dist/exposure/program-line.d.ts +5 -5
- package/dist/exposure/program-line.js +20 -13
- package/dist/exposure/program-line.js.map +1 -1
- package/dist/facade/camera-preset.d.ts +8 -0
- package/dist/facade/camera-preset.js +102 -0
- package/dist/facade/camera-preset.js.map +1 -0
- package/dist/facade/chart-radiance-batch.d.ts +57 -0
- package/dist/facade/chart-radiance-batch.js +121 -0
- package/dist/facade/chart-radiance-batch.js.map +1 -0
- package/dist/facade/chart-scenes.d.ts +177 -0
- package/dist/facade/chart-scenes.js +232 -0
- package/dist/facade/chart-scenes.js.map +1 -0
- package/dist/facade/host-yield.d.ts +7 -0
- package/dist/facade/host-yield.js +23 -0
- package/dist/facade/host-yield.js.map +1 -0
- package/dist/facade/scene-radiance.d.ts +117 -0
- package/dist/facade/scene-radiance.js +205 -0
- package/dist/facade/scene-radiance.js.map +1 -0
- package/dist/facade/simulate-capture.d.ts +284 -0
- package/dist/facade/simulate-capture.js +1026 -0
- package/dist/facade/simulate-capture.js.map +1 -0
- package/dist/gpu/chart-radiance-gpu.d.ts +17 -0
- package/dist/gpu/chart-radiance-gpu.js +176 -0
- package/dist/gpu/chart-radiance-gpu.js.map +1 -0
- package/dist/gpu/image-kernel-accelerator.d.ts +132 -0
- package/dist/gpu/image-kernel-accelerator.js +720 -0
- package/dist/gpu/image-kernel-accelerator.js.map +1 -0
- package/dist/gpu/image-kernel-execution.d.ts +92 -0
- package/dist/gpu/image-kernel-execution.js +84 -0
- package/dist/gpu/image-kernel-execution.js.map +1 -0
- package/dist/gpu/sensor-stage-gpu.d.ts +44 -0
- package/dist/gpu/sensor-stage-gpu.js +317 -0
- package/dist/gpu/sensor-stage-gpu.js.map +1 -0
- package/dist/gpu/temporal-sum-gpu.d.ts +23 -0
- package/dist/gpu/temporal-sum-gpu.js +150 -0
- package/dist/gpu/temporal-sum-gpu.js.map +1 -0
- package/dist/gpu/webgpu-runtime.d.ts +63 -0
- package/dist/gpu/webgpu-runtime.js +215 -0
- package/dist/gpu/webgpu-runtime.js.map +1 -0
- package/dist/gpu/wgsl-chart-kernel.d.ts +30 -0
- package/dist/gpu/wgsl-chart-kernel.js +165 -0
- package/dist/gpu/wgsl-chart-kernel.js.map +1 -0
- package/dist/gpu/wgsl-kernels.d.ts +53 -0
- package/dist/gpu/wgsl-kernels.js +365 -0
- package/dist/gpu/wgsl-kernels.js.map +1 -0
- package/dist/gpu/wgsl-sensor-kernel.d.ts +64 -0
- package/dist/gpu/wgsl-sensor-kernel.js +409 -0
- package/dist/gpu/wgsl-sensor-kernel.js.map +1 -0
- package/dist/index.d.ts +89 -25
- package/dist/index.js +59 -15
- package/dist/index.js.map +1 -1
- package/dist/motion/camera-rotation.d.ts +92 -40
- package/dist/motion/camera-rotation.js +84 -47
- package/dist/motion/camera-rotation.js.map +1 -1
- package/dist/motion/capture-rotation-inverse-mapping.d.ts +37 -34
- package/dist/motion/capture-rotation-inverse-mapping.js +32 -24
- package/dist/motion/capture-rotation-inverse-mapping.js.map +1 -1
- package/dist/motion/capture-rotation-temporal-quadrature.d.ts +39 -35
- package/dist/motion/capture-rotation-temporal-quadrature.js +37 -28
- package/dist/motion/capture-rotation-temporal-quadrature.js.map +1 -1
- package/dist/motion/capture-rotation-trajectory.d.ts +32 -28
- package/dist/motion/capture-rotation-trajectory.js +36 -26
- package/dist/motion/capture-rotation-trajectory.js.map +1 -1
- package/dist/motion/capture-translation-parallax-temporal-quadrature.d.ts +23 -21
- package/dist/motion/capture-translation-parallax-temporal-quadrature.js +33 -14
- package/dist/motion/capture-translation-parallax-temporal-quadrature.js.map +1 -1
- package/dist/motion/extended-object-projection.d.ts +19 -16
- package/dist/motion/extended-object-projection.js +38 -18
- package/dist/motion/extended-object-projection.js.map +1 -1
- package/dist/motion/projected-motion.d.ts +18 -17
- package/dist/motion/projected-motion.js +25 -17
- package/dist/motion/projected-motion.js.map +1 -1
- package/dist/motion/temporal-exposure-sum.d.ts +55 -0
- package/dist/motion/temporal-exposure-sum.js +141 -0
- package/dist/motion/temporal-exposure-sum.js.map +1 -0
- package/dist/motion/video-sequence.d.ts +111 -0
- package/dist/motion/video-sequence.js +179 -0
- package/dist/motion/video-sequence.js.map +1 -0
- package/dist/optics/aperture.d.ts +14 -15
- package/dist/optics/aperture.js +13 -11
- package/dist/optics/aperture.js.map +1 -1
- package/dist/optics/atmospheric-haze.d.ts +83 -0
- package/dist/optics/atmospheric-haze.js +113 -0
- package/dist/optics/atmospheric-haze.js.map +1 -0
- package/dist/optics/brown-conrady-distortion.d.ts +116 -0
- package/dist/optics/brown-conrady-distortion.js +291 -0
- package/dist/optics/brown-conrady-distortion.js.map +1 -0
- package/dist/optics/circle-of-confusion.d.ts +10 -10
- package/dist/optics/circle-of-confusion.js +15 -11
- package/dist/optics/circle-of-confusion.js.map +1 -1
- package/dist/optics/complex-pupil-psf.d.ts +64 -33
- package/dist/optics/complex-pupil-psf.js +190 -98
- package/dist/optics/complex-pupil-psf.js.map +1 -1
- package/dist/optics/depth-of-field.d.ts +25 -15
- package/dist/optics/depth-of-field.js +67 -27
- package/dist/optics/depth-of-field.js.map +1 -1
- package/dist/optics/diffraction.d.ts +14 -13
- package/dist/optics/diffraction.js +14 -10
- package/dist/optics/diffraction.js.map +1 -1
- package/dist/optics/focus-breathing.d.ts +88 -27
- package/dist/optics/focus-breathing.js +114 -23
- package/dist/optics/focus-breathing.js.map +1 -1
- package/dist/optics/focus-state.d.ts +18 -18
- package/dist/optics/focus-state.js +21 -15
- package/dist/optics/focus-state.js.map +1 -1
- package/dist/optics/front-of-lens-filter.d.ts +45 -14
- package/dist/optics/front-of-lens-filter.js +259 -88
- package/dist/optics/front-of-lens-filter.js.map +1 -1
- package/dist/optics/illumination-vignetting.d.ts +16 -17
- package/dist/optics/illumination-vignetting.js +40 -17
- package/dist/optics/illumination-vignetting.js.map +1 -1
- package/dist/optics/irradiance-convolution.d.ts +59 -0
- package/dist/optics/irradiance-convolution.js +138 -0
- package/dist/optics/irradiance-convolution.js.map +1 -0
- package/dist/optics/lateral-chromatic-aberration.d.ts +33 -30
- package/dist/optics/lateral-chromatic-aberration.js +33 -23
- package/dist/optics/lateral-chromatic-aberration.js.map +1 -1
- package/dist/optics/lens-psf-kernels.d.ts +89 -0
- package/dist/optics/lens-psf-kernels.js +175 -0
- package/dist/optics/lens-psf-kernels.js.map +1 -0
- package/dist/optics/lens-psf-profile.d.ts +78 -46
- package/dist/optics/lens-psf-profile.js +335 -124
- package/dist/optics/lens-psf-profile.js.map +1 -1
- package/dist/optics/longitudinal-chromatic-aberration.d.ts +102 -0
- package/dist/optics/longitudinal-chromatic-aberration.js +210 -0
- package/dist/optics/longitudinal-chromatic-aberration.js.map +1 -0
- package/dist/optics/polygon-diffraction.d.ts +80 -23
- package/dist/optics/polygon-diffraction.js +130 -25
- package/dist/optics/polygon-diffraction.js.map +1 -1
- package/dist/optics/profile-contract.d.ts +5 -6
- package/dist/optics/profile-contract.js +14 -11
- package/dist/optics/profile-contract.js.map +1 -1
- package/dist/optics/psf-foundation.d.ts +23 -23
- package/dist/optics/psf-foundation.js +24 -21
- package/dist/optics/psf-foundation.js.map +1 -1
- package/dist/optics/pupil-vignetting.d.ts +118 -0
- package/dist/optics/pupil-vignetting.js +264 -0
- package/dist/optics/pupil-vignetting.js.map +1 -0
- package/dist/optics/radial-distortion.d.ts +34 -33
- package/dist/optics/radial-distortion.js +37 -30
- package/dist/optics/radial-distortion.js.map +1 -1
- package/dist/optics/scene-to-sensor-irradiance.d.ts +47 -33
- package/dist/optics/scene-to-sensor-irradiance.js +73 -45
- package/dist/optics/scene-to-sensor-irradiance.js.map +1 -1
- package/dist/optics/scene-to-sensor-quadrature.d.ts +23 -18
- package/dist/optics/scene-to-sensor-quadrature.js +16 -11
- package/dist/optics/scene-to-sensor-quadrature.js.map +1 -1
- package/dist/optics/sensor-aperture-rays.d.ts +20 -4
- package/dist/optics/sensor-aperture-rays.js +32 -14
- package/dist/optics/sensor-aperture-rays.js.map +1 -1
- package/dist/optics/sensor-environment-query.d.ts +81 -16
- package/dist/optics/sensor-environment-query.js +145 -12
- package/dist/optics/sensor-environment-query.js.map +1 -1
- package/dist/optics/sensor-psf-quadrature.d.ts +12 -10
- package/dist/optics/sensor-psf-quadrature.js +18 -11
- package/dist/optics/sensor-psf-quadrature.js.map +1 -1
- package/dist/optics/sensor-psf-support.d.ts +8 -6
- package/dist/optics/sensor-psf-support.js +8 -5
- package/dist/optics/sensor-psf-support.js.map +1 -1
- package/dist/optics/stray-light.d.ts +22 -19
- package/dist/optics/stray-light.js +18 -12
- package/dist/optics/stray-light.js.map +1 -1
- package/dist/optics/thin-lens.d.ts +10 -9
- package/dist/optics/thin-lens.js +12 -8
- package/dist/optics/thin-lens.js.map +1 -1
- package/dist/optics/zernike-wavefront.d.ts +154 -0
- package/dist/optics/zernike-wavefront.js +352 -0
- package/dist/optics/zernike-wavefront.js.map +1 -0
- package/dist/output/capture-corrected-sdr.d.ts +16 -8
- package/dist/output/capture-corrected-sdr.js +16 -8
- package/dist/output/capture-corrected-sdr.js.map +1 -1
- package/dist/output/capture-geometry.d.ts +34 -36
- package/dist/output/capture-geometry.js +52 -32
- package/dist/output/capture-geometry.js.map +1 -1
- package/dist/output/capture-sdr.d.ts +7 -6
- package/dist/output/capture-sdr.js +11 -8
- package/dist/output/capture-sdr.js.map +1 -1
- package/dist/output/crop.d.ts +22 -6
- package/dist/output/crop.js +40 -6
- package/dist/output/crop.js.map +1 -1
- package/dist/output/geometric-transforms.d.ts +60 -23
- package/dist/output/geometric-transforms.js +111 -24
- package/dist/output/geometric-transforms.js.map +1 -1
- package/dist/output/lens-corrections.d.ts +27 -19
- package/dist/output/lens-corrections.js +29 -13
- package/dist/output/lens-corrections.js.map +1 -1
- package/dist/output/native-capture-sdr.d.ts +71 -16
- package/dist/output/native-capture-sdr.js +190 -33
- package/dist/output/native-capture-sdr.js.map +1 -1
- package/dist/output/png-encoder.d.ts +65 -0
- package/dist/output/png-encoder.js +461 -0
- package/dist/output/png-encoder.js.map +1 -0
- package/dist/output/print-contrast-reference.d.ts +10 -9
- package/dist/output/print-contrast-reference.js +10 -8
- package/dist/output/print-contrast-reference.js.map +1 -1
- package/dist/output/print-detail.d.ts +18 -17
- package/dist/output/print-detail.js +12 -10
- package/dist/output/print-detail.js.map +1 -1
- package/dist/output/print-jpeg.d.ts +26 -5
- package/dist/output/print-jpeg.js +117 -50
- package/dist/output/print-jpeg.js.map +1 -1
- package/dist/output/print-plan.d.ts +19 -19
- package/dist/output/print-plan.js +11 -10
- package/dist/output/print-plan.js.map +1 -1
- package/dist/output/print-region-statistics.d.ts +14 -15
- package/dist/output/print-region-statistics.js +11 -11
- package/dist/output/print-region-statistics.js.map +1 -1
- package/dist/output/sdr-rendering.d.ts +48 -10
- package/dist/output/sdr-rendering.js +114 -25
- package/dist/output/sdr-rendering.js.map +1 -1
- package/dist/output/subject-framing-crop.d.ts +6 -10
- package/dist/output/subject-framing-crop.js +23 -13
- package/dist/output/subject-framing-crop.js.map +1 -1
- package/dist/processing/demosaic.d.ts +90 -0
- package/dist/processing/demosaic.js +275 -0
- package/dist/processing/demosaic.js.map +1 -0
- package/dist/processing/denoise.d.ts +68 -0
- package/dist/processing/denoise.js +214 -0
- package/dist/processing/denoise.js.map +1 -0
- package/dist/processing/focus-stacking.d.ts +17 -0
- package/dist/processing/focus-stacking.js +80 -0
- package/dist/processing/focus-stacking.js.map +1 -0
- package/dist/processing/hdr.d.ts +54 -0
- package/dist/processing/hdr.js +172 -0
- package/dist/processing/hdr.js.map +1 -0
- package/dist/processing/image-ops.d.ts +66 -0
- package/dist/processing/image-ops.js +192 -0
- package/dist/processing/image-ops.js.map +1 -0
- package/dist/processing/panorama.d.ts +51 -0
- package/dist/processing/panorama.js +305 -0
- package/dist/processing/panorama.js.map +1 -0
- package/dist/processing/processing-task.d.ts +85 -0
- package/dist/processing/processing-task.js +164 -0
- package/dist/processing/processing-task.js.map +1 -0
- package/dist/processing/tone-mapping.d.ts +69 -0
- package/dist/processing/tone-mapping.js +310 -0
- package/dist/processing/tone-mapping.js.map +1 -0
- package/dist/schema/camera.d.ts +5 -4
- package/dist/schema/illumination-spectral.d.ts +13 -19
- package/dist/schema/illumination-spectral.js +23 -19
- package/dist/schema/illumination-spectral.js.map +1 -1
- package/dist/schema/illumination-temporal.d.ts +12 -15
- package/dist/schema/illumination-temporal.js +43 -28
- package/dist/schema/illumination-temporal.js.map +1 -1
- package/dist/schema/illumination.d.ts +5 -4
- package/dist/schema/illumination.js +55 -20
- package/dist/schema/illumination.js.map +1 -1
- package/dist/schema/scene-radiance-temporal.d.ts +9 -11
- package/dist/schema/scene-radiance-temporal.js +26 -23
- package/dist/schema/scene-radiance-temporal.js.map +1 -1
- package/dist/schema/scene-radiance.d.ts +17 -17
- package/dist/schema/scene-radiance.js +56 -34
- package/dist/schema/scene-radiance.js.map +1 -1
- package/dist/schema/scene.d.ts +14 -13
- package/dist/schema/validation.d.ts +0 -1
- package/dist/schema/validation.js +17 -15
- package/dist/schema/validation.js.map +1 -1
- package/dist/sensor/accumulated-charge.d.ts +45 -64
- package/dist/sensor/accumulated-charge.js +41 -47
- package/dist/sensor/accumulated-charge.js.map +1 -1
- package/dist/sensor/architecture.d.ts +22 -25
- package/dist/sensor/architecture.js +17 -16
- package/dist/sensor/architecture.js.map +1 -1
- package/dist/sensor/camera-saturation-capacity.d.ts +21 -28
- package/dist/sensor/camera-saturation-capacity.js +36 -34
- package/dist/sensor/camera-saturation-capacity.js.map +1 -1
- package/dist/sensor/capture-color-sampling-binding.d.ts +46 -51
- package/dist/sensor/capture-color-sampling-binding.js +39 -41
- package/dist/sensor/capture-color-sampling-binding.js.map +1 -1
- package/dist/sensor/capture-mode-timing.d.ts +8 -9
- package/dist/sensor/capture-mode-timing.js +24 -21
- package/dist/sensor/capture-mode-timing.js.map +1 -1
- package/dist/sensor/capture-mode.d.ts +28 -30
- package/dist/sensor/capture-mode.js +33 -31
- package/dist/sensor/capture-mode.js.map +1 -1
- package/dist/sensor/color-sampling.d.ts +30 -33
- package/dist/sensor/color-sampling.js +32 -37
- package/dist/sensor/color-sampling.js.map +1 -1
- package/dist/sensor/constant-rate-temporal-integration.d.ts +19 -23
- package/dist/sensor/constant-rate-temporal-integration.js +28 -26
- package/dist/sensor/constant-rate-temporal-integration.js.map +1 -1
- package/dist/sensor/dark-current.d.ts +53 -49
- package/dist/sensor/dark-current.js +87 -46
- package/dist/sensor/dark-current.js.map +1 -1
- package/dist/sensor/environment-photo-signal.d.ts +71 -30
- package/dist/sensor/environment-photo-signal.js +127 -46
- package/dist/sensor/environment-photo-signal.js.map +1 -1
- package/dist/sensor/eqe-electron-rate.d.ts +14 -13
- package/dist/sensor/eqe-electron-rate.js +34 -14
- package/dist/sensor/eqe-electron-rate.js.map +1 -1
- package/dist/sensor/eqe-local-exposure.d.ts +24 -24
- package/dist/sensor/eqe-local-exposure.js +15 -11
- package/dist/sensor/eqe-local-exposure.js.map +1 -1
- package/dist/sensor/eqe-temporal-exposure.d.ts +11 -11
- package/dist/sensor/eqe-temporal-exposure.js +15 -10
- package/dist/sensor/eqe-temporal-exposure.js.map +1 -1
- package/dist/sensor/exposure-window.d.ts +48 -34
- package/dist/sensor/exposure-window.js +77 -36
- package/dist/sensor/exposure-window.js.map +1 -1
- package/dist/sensor/fixed-pattern-noise.d.ts +108 -0
- package/dist/sensor/fixed-pattern-noise.js +166 -0
- package/dist/sensor/fixed-pattern-noise.js.map +1 -0
- package/dist/sensor/iso-gain.d.ts +44 -0
- package/dist/sensor/iso-gain.js +119 -0
- package/dist/sensor/iso-gain.js.map +1 -0
- package/dist/sensor/iso-signal-chain.d.ts +25 -48
- package/dist/sensor/iso-signal-chain.js +52 -66
- package/dist/sensor/iso-signal-chain.js.map +1 -1
- package/dist/sensor/local-exposure-binding.d.ts +21 -21
- package/dist/sensor/local-exposure-binding.js +22 -18
- package/dist/sensor/local-exposure-binding.js.map +1 -1
- package/dist/sensor/optical-stack.d.ts +36 -40
- package/dist/sensor/optical-stack.js +34 -37
- package/dist/sensor/optical-stack.js.map +1 -1
- package/dist/sensor/photon-energy.d.ts +22 -28
- package/dist/sensor/photon-energy.js +42 -34
- package/dist/sensor/photon-energy.js.map +1 -1
- package/dist/sensor/physical-charge-capacity.d.ts +20 -30
- package/dist/sensor/physical-charge-capacity.js +35 -36
- package/dist/sensor/physical-charge-capacity.js.map +1 -1
- package/dist/sensor/pixel-pitch.d.ts +2 -3
- package/dist/sensor/pixel-pitch.js +4 -2
- package/dist/sensor/pixel-pitch.js.map +1 -1
- package/dist/sensor/radiometry-readiness.d.ts +13 -15
- package/dist/sensor/radiometry-readiness.js +20 -17
- package/dist/sensor/radiometry-readiness.js.map +1 -1
- package/dist/sensor/raw-readout.d.ts +173 -83
- package/dist/sensor/raw-readout.js +425 -160
- package/dist/sensor/raw-readout.js.map +1 -1
- package/dist/sensor/raw-reconstruction.d.ts +112 -44
- package/dist/sensor/raw-reconstruction.js +200 -47
- package/dist/sensor/raw-reconstruction.js.map +1 -1
- package/dist/sensor/readout-exposure-linkage.d.ts +103 -34
- package/dist/sensor/readout-exposure-linkage.js +125 -27
- package/dist/sensor/readout-exposure-linkage.js.map +1 -1
- package/dist/sensor/readout-timing.d.ts +43 -44
- package/dist/sensor/readout-timing.js +38 -30
- package/dist/sensor/readout-timing.js.map +1 -1
- package/dist/sensor/response-application-compatibility.d.ts +21 -28
- package/dist/sensor/response-application-compatibility.js +35 -34
- package/dist/sensor/response-application-compatibility.js.map +1 -1
- package/dist/sensor/response-operating-range.d.ts +26 -35
- package/dist/sensor/response-operating-range.js +40 -39
- package/dist/sensor/response-operating-range.js.map +1 -1
- package/dist/sensor/responsivity-photocurrent.d.ts +21 -29
- package/dist/sensor/responsivity-photocurrent.js +57 -40
- package/dist/sensor/responsivity-photocurrent.js.map +1 -1
- package/dist/sensor/sampling-aperture.d.ts +21 -25
- package/dist/sensor/sampling-aperture.js +29 -28
- package/dist/sensor/sampling-aperture.js.map +1 -1
- package/dist/sensor/scene-eqe-temporal-exposure.d.ts +14 -12
- package/dist/sensor/scene-eqe-temporal-exposure.js +13 -8
- package/dist/sensor/scene-eqe-temporal-exposure.js.map +1 -1
- package/dist/sensor/sensor-geometry.d.ts +28 -32
- package/dist/sensor/sensor-geometry.js +35 -20
- package/dist/sensor/sensor-geometry.js.map +1 -1
- package/dist/sensor/signal-noise.d.ts +14 -16
- package/dist/sensor/signal-noise.js +15 -13
- package/dist/sensor/signal-noise.js.map +1 -1
- package/dist/sensor/spatial-sample-reduction.d.ts +45 -60
- package/dist/sensor/spatial-sample-reduction.js +39 -48
- package/dist/sensor/spatial-sample-reduction.js.map +1 -1
- package/dist/sensor/spatial-sampling-quadrature.d.ts +46 -54
- package/dist/sensor/spatial-sampling-quadrature.js +31 -36
- package/dist/sensor/spatial-sampling-quadrature.js.map +1 -1
- package/dist/sensor/spatio-spectral-reduction.d.ts +32 -42
- package/dist/sensor/spatio-spectral-reduction.js +24 -29
- package/dist/sensor/spatio-spectral-reduction.js.map +1 -1
- package/dist/sensor/spectral-coverage.d.ts +6 -9
- package/dist/sensor/spectral-coverage.js +9 -6
- package/dist/sensor/spectral-coverage.js.map +1 -1
- package/dist/sensor/spectral-quadrature.d.ts +46 -60
- package/dist/sensor/spectral-quadrature.js +38 -48
- package/dist/sensor/spectral-quadrature.js.map +1 -1
- package/dist/sensor/spectral-response.d.ts +53 -41
- package/dist/sensor/spectral-response.js +80 -47
- package/dist/sensor/spectral-response.js.map +1 -1
- package/dist/sensor/stochastic-seed.d.ts +50 -0
- package/dist/sensor/stochastic-seed.js +123 -0
- package/dist/sensor/stochastic-seed.js.map +1 -0
- package/dist/sensor/temporal-eqe-sum.d.ts +2 -4
- package/dist/sensor/temporal-eqe-sum.js +5 -6
- package/dist/sensor/temporal-eqe-sum.js.map +1 -1
- package/dist/sensor/temporal-photo-signal.d.ts +5 -6
- package/dist/sensor/temporal-photo-signal.js +11 -10
- package/dist/sensor/temporal-photo-signal.js.map +1 -1
- package/dist/sensor/temporal-sample-binding.d.ts +1 -2
- package/dist/sensor/temporal-sample-binding.js +3 -3
- package/dist/sensor/temporal-sample-binding.js.map +1 -1
- package/dist/simulation/poc-simulation.d.ts +16 -16
- package/dist/simulation/poc-simulation.js +20 -15
- package/dist/simulation/poc-simulation.js.map +1 -1
- package/dist/stabilization/camera-shake.d.ts +42 -18
- package/dist/stabilization/camera-shake.js +43 -20
- package/dist/stabilization/camera-shake.js.map +1 -1
- package/dist/stabilization/system.d.ts +44 -41
- package/dist/stabilization/system.js +196 -108
- package/dist/stabilization/system.js.map +1 -1
- package/docs/AGENT_GUIDE.md +183 -0
- package/docs/API_REFERENCE.md +761 -2
- package/docs/QUICK_START.md +495 -0
- package/docs/USAGE.md +1719 -714
- package/docs/api/camera-equivalent-focal-length.md +6 -7
- package/docs/api/camera-field-of-view.md +16 -8
- package/docs/api/camera-lens-projection.md +246 -0
- package/docs/api/camera-projected-object-size.md +6 -5
- package/docs/api/capture-capture-export-metadata.md +10 -10
- package/docs/api/capture-dng-import.md +134 -0
- package/docs/api/capture-environment-raw-producer.md +17 -11
- package/docs/api/capture-export-jpeg.md +16 -0
- package/docs/api/capture-focus-control.md +25 -47
- package/docs/api/capture-linear-encoding.md +21 -12
- package/docs/api/capture-lossless-jpeg.md +49 -0
- package/docs/api/capture-native-environment-optical-stage.md +75 -0
- package/docs/api/capture-native-environment-raw.md +161 -4
- package/docs/api/capture-native-raw-development.md +69 -4
- package/docs/api/capture-native-raw-dng.md +84 -0
- package/docs/api/capture-native-raw.md +23 -8
- package/docs/api/capture-packed-sensor-raw.md +156 -0
- package/docs/api/capture-photographic-export.md +69 -31
- package/docs/api/capture-raw-frame-reconstruction.md +8 -8
- package/docs/api/capture-raw-white-level.md +37 -0
- package/docs/api/capture-release-sequence.md +6 -7
- package/docs/api/capture-sensor-raw-frame.md +6 -6
- package/docs/api/capture-sensor-raw-producer.md +17 -11
- package/docs/api/capture-simulated-capture.md +15 -15
- package/docs/api/color-camera-color-matrix.md +103 -0
- package/docs/api/color-capture-color.md +22 -11
- package/docs/api/color-chromatic-adaptation.md +82 -0
- package/docs/api/color-color-difference.md +134 -0
- package/docs/api/color-color-matching-functions.md +259 -0
- package/docs/api/color-colorimetry-math.md +54 -0
- package/docs/api/color-gamut-mapping.md +72 -0
- package/docs/api/color-illuminants.md +280 -0
- package/docs/api/color-rgb-color-spaces.md +151 -0
- package/docs/api/color-sensor-color-development.md +27 -0
- package/docs/api/color-srgb-icc.md +2 -4
- package/docs/api/color-white-balance.md +95 -19
- package/docs/api/composition-image-formation-plan.md +124 -95
- package/docs/api/composition-plan-consumer.md +7 -7
- package/docs/api/core-calculation-result.md +18 -14
- package/docs/api/core-configuration-error.md +1 -1
- package/docs/api/core-image-formation.md +7 -7
- package/docs/api/core-scientific-assurance.md +12 -10
- package/docs/api/core-spectral-composition.md +14 -14
- package/docs/api/core-spectral.md +6 -6
- package/docs/api/core-validation.md +3 -3
- package/docs/api/core-version.md +7 -6
- package/docs/api/equipment-exposure-capabilities.md +11 -10
- package/docs/api/equipment-generic-tier-assets.md +7 -2
- package/docs/api/equipment-generic-tier-presets.md +6 -6
- package/docs/api/equipment-iso-capabilities.md +18 -18
- package/docs/api/equipment-metering-capabilities.md +6 -6
- package/docs/api/equipment-release-capabilities.md +4 -4
- package/docs/api/exports.json +2213 -8
- package/docs/api/exposure-exposure-duration-control.md +9 -9
- package/docs/api/exposure-exposure-mode-resolver.md +35 -31
- package/docs/api/exposure-exposure.md +10 -10
- package/docs/api/exposure-flash-ttl.md +182 -0
- package/docs/api/exposure-flash.md +183 -28
- package/docs/api/exposure-metering-scene-radiance.md +11 -10
- package/docs/api/exposure-metering-target.md +9 -8
- package/docs/api/exposure-metering-temporal.md +8 -8
- package/docs/api/exposure-metering.md +69 -9
- package/docs/api/exposure-program-line.md +6 -5
- package/docs/api/facade-chart-radiance-batch.md +96 -0
- package/docs/api/facade-chart-scenes.md +240 -0
- package/docs/api/facade-scene-radiance.md +122 -0
- package/docs/api/facade-simulate-capture.md +324 -0
- package/docs/api/gpu-image-kernel-accelerator.md +157 -0
- package/docs/api/gpu-image-kernel-execution.md +152 -0
- package/docs/api/motion-camera-rotation.md +43 -26
- package/docs/api/motion-capture-rotation-inverse-mapping.md +24 -23
- package/docs/api/motion-capture-rotation-temporal-quadrature.md +22 -22
- package/docs/api/motion-capture-rotation-trajectory.md +15 -15
- package/docs/api/motion-capture-translation-parallax-temporal-quadrature.md +15 -14
- package/docs/api/motion-extended-object-projection.md +10 -8
- package/docs/api/motion-projected-motion.md +8 -8
- package/docs/api/motion-temporal-exposure-sum.md +98 -0
- package/docs/api/motion-video-sequence.md +159 -0
- package/docs/api/optics-aperture.md +8 -8
- package/docs/api/optics-atmospheric-haze.md +104 -0
- package/docs/api/optics-brown-conrady-distortion.md +123 -0
- package/docs/api/optics-circle-of-confusion.md +5 -4
- package/docs/api/optics-complex-pupil-psf.md +57 -16
- package/docs/api/optics-depth-of-field.md +12 -6
- package/docs/api/optics-diffraction.md +8 -7
- package/docs/api/optics-focus-breathing.md +104 -16
- package/docs/api/optics-focus-state.md +9 -10
- package/docs/api/optics-front-of-lens-filter.md +72 -14
- package/docs/api/optics-illumination-vignetting.md +10 -10
- package/docs/api/optics-irradiance-convolution.md +95 -0
- package/docs/api/optics-lateral-chromatic-aberration.md +22 -21
- package/docs/api/optics-lens-psf-kernels.md +72 -0
- package/docs/api/optics-lens-psf-profile.md +48 -26
- package/docs/api/optics-longitudinal-chromatic-aberration.md +128 -0
- package/docs/api/optics-polygon-diffraction.md +78 -13
- package/docs/api/optics-profile-contract.md +4 -4
- package/docs/api/optics-psf-foundation.md +12 -12
- package/docs/api/optics-pupil-vignetting.md +132 -0
- package/docs/api/optics-radial-distortion.md +12 -12
- package/docs/api/optics-scene-to-sensor-irradiance.md +25 -14
- package/docs/api/optics-scene-to-sensor-quadrature.md +15 -12
- package/docs/api/optics-sensor-aperture-rays.md +3 -2
- package/docs/api/optics-sensor-environment-query.md +52 -9
- package/docs/api/optics-sensor-psf-quadrature.md +13 -10
- package/docs/api/optics-stray-light.md +12 -11
- package/docs/api/optics-thin-lens.md +4 -3
- package/docs/api/optics-zernike-wavefront.md +229 -0
- package/docs/api/output-capture-corrected-sdr.md +10 -7
- package/docs/api/output-capture-geometry.md +35 -36
- package/docs/api/output-capture-sdr.md +4 -4
- package/docs/api/output-crop.md +7 -4
- package/docs/api/output-geometric-transforms.md +65 -19
- package/docs/api/output-lens-corrections.md +17 -15
- package/docs/api/output-native-capture-sdr.md +26 -13
- package/docs/api/output-png-encoder.md +105 -0
- package/docs/api/output-print-contrast-reference.md +8 -8
- package/docs/api/output-print-detail.md +14 -14
- package/docs/api/output-print-jpeg.md +22 -5
- package/docs/api/output-print-plan.md +18 -18
- package/docs/api/output-print-region-statistics.md +14 -14
- package/docs/api/output-sdr-rendering.md +52 -10
- package/docs/api/output-subject-framing-crop.md +5 -6
- package/docs/api/processing-demosaic.md +120 -0
- package/docs/api/processing-denoise.md +148 -0
- package/docs/api/processing-focus-stacking.md +41 -0
- package/docs/api/processing-hdr.md +113 -0
- package/docs/api/processing-panorama.md +82 -0
- package/docs/api/processing-processing-task.md +107 -0
- package/docs/api/processing-tone-mapping.md +142 -0
- package/docs/api/schema-camera.md +6 -4
- package/docs/api/schema-illumination-spectral.md +10 -11
- package/docs/api/schema-illumination-temporal.md +13 -15
- package/docs/api/schema-illumination.md +4 -4
- package/docs/api/schema-scene-radiance-temporal.md +10 -11
- package/docs/api/schema-scene-radiance.md +18 -17
- package/docs/api/schema-scene.md +9 -9
- package/docs/api/schema-validation.md +1 -1
- package/docs/api/sensor-accumulated-charge.md +12 -20
- package/docs/api/sensor-architecture.md +15 -16
- package/docs/api/sensor-camera-saturation-capacity.md +9 -11
- package/docs/api/sensor-capture-color-sampling-binding.md +47 -51
- package/docs/api/sensor-capture-mode-timing.md +9 -9
- package/docs/api/sensor-capture-mode.md +29 -30
- package/docs/api/sensor-color-sampling.md +31 -33
- package/docs/api/sensor-constant-rate-temporal-integration.md +10 -11
- package/docs/api/sensor-dark-current.md +30 -14
- package/docs/api/sensor-environment-photo-signal.md +13 -6
- package/docs/api/sensor-eqe-electron-rate.md +9 -8
- package/docs/api/sensor-eqe-local-exposure.md +18 -17
- package/docs/api/sensor-eqe-temporal-exposure.md +12 -11
- package/docs/api/sensor-exposure-window.md +24 -24
- package/docs/api/sensor-fixed-pattern-noise.md +104 -0
- package/docs/api/sensor-iso-gain.md +63 -0
- package/docs/api/sensor-iso-signal-chain.md +13 -22
- package/docs/api/sensor-local-exposure-binding.md +12 -13
- package/docs/api/sensor-optical-stack.md +37 -40
- package/docs/api/sensor-photon-energy.md +10 -11
- package/docs/api/sensor-physical-charge-capacity.md +8 -13
- package/docs/api/sensor-pixel-pitch.md +1 -1
- package/docs/api/sensor-radiometry-readiness.md +9 -9
- package/docs/api/sensor-raw-readout.md +118 -52
- package/docs/api/sensor-raw-reconstruction.md +97 -20
- package/docs/api/sensor-readout-exposure-linkage.md +120 -24
- package/docs/api/sensor-readout-timing.md +33 -35
- package/docs/api/sensor-response-application-compatibility.md +9 -11
- package/docs/api/sensor-response-operating-range.md +14 -18
- package/docs/api/sensor-responsivity-photocurrent.md +9 -12
- package/docs/api/sensor-sampling-aperture.md +22 -25
- package/docs/api/sensor-scene-eqe-temporal-exposure.md +9 -8
- package/docs/api/sensor-sensor-geometry.md +23 -24
- package/docs/api/sensor-signal-noise.md +10 -10
- package/docs/api/sensor-spatial-sample-reduction.md +27 -30
- package/docs/api/sensor-spatial-sampling-quadrature.md +37 -39
- package/docs/api/sensor-spatio-spectral-reduction.md +27 -29
- package/docs/api/sensor-spectral-coverage.md +5 -5
- package/docs/api/sensor-spectral-quadrature.md +33 -35
- package/docs/api/sensor-spectral-response.md +28 -16
- package/docs/api/sensor-temporal-photo-signal.md +6 -6
- package/docs/api/simulation-poc-simulation.md +17 -16
- package/docs/api/stabilization-camera-shake.md +29 -10
- package/docs/api/stabilization-system.md +25 -21
- package/docs/examples/production-request.json +3821 -2157
- package/docs/examples/simulate-capture.mjs +14 -0
- package/llms.txt +35 -0
- package/package.json +32 -12
- package/AGENTS.md +0 -674
- package/CONTRIBUTING.md +0 -76
- package/DCO +0 -33
- package/dist/camera/equivalent-focal-length.d.ts.map +0 -1
- package/dist/camera/field-of-view.d.ts.map +0 -1
- package/dist/camera/projected-object-size.d.ts.map +0 -1
- package/dist/capture/capture-export-metadata.d.ts.map +0 -1
- package/dist/capture/environment-raw-producer.d.ts.map +0 -1
- package/dist/capture/export-jpeg.d.ts.map +0 -1
- package/dist/capture/export-tiff.d.ts.map +0 -1
- package/dist/capture/focus-control.d.ts.map +0 -1
- package/dist/capture/linear-encoding.d.ts.map +0 -1
- package/dist/capture/native-environment-raw.d.ts.map +0 -1
- package/dist/capture/native-raw-development.d.ts.map +0 -1
- package/dist/capture/native-raw.d.ts.map +0 -1
- package/dist/capture/photographic-export.d.ts.map +0 -1
- package/dist/capture/raw-frame-limits.d.ts.map +0 -1
- package/dist/capture/raw-frame-reconstruction.d.ts.map +0 -1
- package/dist/capture/release-sequence.d.ts.map +0 -1
- package/dist/capture/sensor-raw-frame.d.ts.map +0 -1
- package/dist/capture/sensor-raw-producer.d.ts.map +0 -1
- package/dist/capture/simulated-capture.d.ts.map +0 -1
- package/dist/color/capture-color.d.ts.map +0 -1
- package/dist/color/sensor-color-development.d.ts.map +0 -1
- package/dist/color/srgb-icc.d.ts.map +0 -1
- package/dist/color/srgb-transfer.d.ts.map +0 -1
- package/dist/color/white-balance.d.ts.map +0 -1
- package/dist/composition/image-formation-plan.d.ts.map +0 -1
- package/dist/composition/plan-consumer.d.ts.map +0 -1
- package/dist/core/calculation-result.d.ts.map +0 -1
- package/dist/core/canonical-json.d.ts.map +0 -1
- package/dist/core/configuration-error.d.ts.map +0 -1
- package/dist/core/evidence-provenance.d.ts.map +0 -1
- package/dist/core/image-formation.d.ts.map +0 -1
- package/dist/core/owned-data.d.ts.map +0 -1
- package/dist/core/record-validation.d.ts.map +0 -1
- package/dist/core/scientific-assurance.d.ts.map +0 -1
- package/dist/core/spectral-composition.d.ts.map +0 -1
- package/dist/core/spectral.d.ts.map +0 -1
- package/dist/core/validation.d.ts.map +0 -1
- package/dist/core/version.d.ts.map +0 -1
- package/dist/equipment/exposure-capabilities.d.ts.map +0 -1
- package/dist/equipment/generic-tier-assets.d.ts.map +0 -1
- package/dist/equipment/generic-tier-presets.d.ts.map +0 -1
- package/dist/equipment/iso-capabilities.d.ts.map +0 -1
- package/dist/equipment/metering-capabilities.d.ts.map +0 -1
- package/dist/equipment/release-capabilities.d.ts.map +0 -1
- package/dist/exposure/exposure-duration-control.d.ts.map +0 -1
- package/dist/exposure/exposure-mode-resolver.d.ts.map +0 -1
- package/dist/exposure/exposure.d.ts.map +0 -1
- package/dist/exposure/flash.d.ts.map +0 -1
- package/dist/exposure/metering-scene-radiance.d.ts.map +0 -1
- package/dist/exposure/metering-target.d.ts.map +0 -1
- package/dist/exposure/metering-temporal.d.ts.map +0 -1
- package/dist/exposure/metering.d.ts.map +0 -1
- package/dist/exposure/program-line.d.ts.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/motion/camera-rotation.d.ts.map +0 -1
- package/dist/motion/capture-rotation-inverse-mapping.d.ts.map +0 -1
- package/dist/motion/capture-rotation-temporal-quadrature.d.ts.map +0 -1
- package/dist/motion/capture-rotation-trajectory.d.ts.map +0 -1
- package/dist/motion/capture-translation-parallax-temporal-quadrature.d.ts.map +0 -1
- package/dist/motion/extended-object-projection.d.ts.map +0 -1
- package/dist/motion/projected-motion.d.ts.map +0 -1
- package/dist/optics/aperture.d.ts.map +0 -1
- package/dist/optics/circle-of-confusion.d.ts.map +0 -1
- package/dist/optics/complex-pupil-psf.d.ts.map +0 -1
- package/dist/optics/depth-of-field.d.ts.map +0 -1
- package/dist/optics/diffraction.d.ts.map +0 -1
- package/dist/optics/focus-breathing.d.ts.map +0 -1
- package/dist/optics/focus-state.d.ts.map +0 -1
- package/dist/optics/front-of-lens-filter.d.ts.map +0 -1
- package/dist/optics/illumination-vignetting.d.ts.map +0 -1
- package/dist/optics/lateral-chromatic-aberration.d.ts.map +0 -1
- package/dist/optics/lens-psf-profile.d.ts.map +0 -1
- package/dist/optics/polygon-diffraction.d.ts.map +0 -1
- package/dist/optics/profile-contract.d.ts.map +0 -1
- package/dist/optics/psf-foundation.d.ts.map +0 -1
- package/dist/optics/radial-distortion.d.ts.map +0 -1
- package/dist/optics/scene-to-sensor-irradiance.d.ts.map +0 -1
- package/dist/optics/scene-to-sensor-quadrature.d.ts.map +0 -1
- package/dist/optics/sensor-aperture-rays.d.ts.map +0 -1
- package/dist/optics/sensor-environment-query.d.ts.map +0 -1
- package/dist/optics/sensor-psf-quadrature.d.ts.map +0 -1
- package/dist/optics/sensor-psf-support.d.ts.map +0 -1
- package/dist/optics/stray-light.d.ts.map +0 -1
- package/dist/optics/thin-lens.d.ts.map +0 -1
- package/dist/output/capture-corrected-sdr.d.ts.map +0 -1
- package/dist/output/capture-geometry.d.ts.map +0 -1
- package/dist/output/capture-sdr.d.ts.map +0 -1
- package/dist/output/crop.d.ts.map +0 -1
- package/dist/output/geometric-transforms.d.ts.map +0 -1
- package/dist/output/lens-corrections.d.ts.map +0 -1
- package/dist/output/native-capture-sdr.d.ts.map +0 -1
- package/dist/output/print-contrast-reference.d.ts.map +0 -1
- package/dist/output/print-detail.d.ts.map +0 -1
- package/dist/output/print-jpeg.d.ts.map +0 -1
- package/dist/output/print-plan.d.ts.map +0 -1
- package/dist/output/print-region-statistics.d.ts.map +0 -1
- package/dist/output/sdr-rendering.d.ts.map +0 -1
- package/dist/output/subject-framing-crop.d.ts.map +0 -1
- package/dist/schema/camera.d.ts.map +0 -1
- package/dist/schema/camera.js +0 -3
- package/dist/schema/camera.js.map +0 -1
- package/dist/schema/illumination-spectral.d.ts.map +0 -1
- package/dist/schema/illumination-temporal.d.ts.map +0 -1
- package/dist/schema/illumination.d.ts.map +0 -1
- package/dist/schema/scene-radiance-temporal.d.ts.map +0 -1
- package/dist/schema/scene-radiance.d.ts.map +0 -1
- package/dist/schema/scene.d.ts.map +0 -1
- package/dist/schema/scene.js +0 -3
- package/dist/schema/scene.js.map +0 -1
- package/dist/schema/validation.d.ts.map +0 -1
- package/dist/sensor/accumulated-charge.d.ts.map +0 -1
- package/dist/sensor/architecture.d.ts.map +0 -1
- package/dist/sensor/camera-saturation-capacity.d.ts.map +0 -1
- package/dist/sensor/capture-color-sampling-binding.d.ts.map +0 -1
- package/dist/sensor/capture-mode-timing.d.ts.map +0 -1
- package/dist/sensor/capture-mode.d.ts.map +0 -1
- package/dist/sensor/color-sampling.d.ts.map +0 -1
- package/dist/sensor/constant-rate-temporal-integration.d.ts.map +0 -1
- package/dist/sensor/dark-current.d.ts.map +0 -1
- package/dist/sensor/environment-photo-signal.d.ts.map +0 -1
- package/dist/sensor/eqe-electron-rate.d.ts.map +0 -1
- package/dist/sensor/eqe-local-exposure.d.ts.map +0 -1
- package/dist/sensor/eqe-temporal-exposure.d.ts.map +0 -1
- package/dist/sensor/exposure-window.d.ts.map +0 -1
- package/dist/sensor/iso-signal-chain.d.ts.map +0 -1
- package/dist/sensor/local-exposure-binding.d.ts.map +0 -1
- package/dist/sensor/optical-stack.d.ts.map +0 -1
- package/dist/sensor/photon-energy.d.ts.map +0 -1
- package/dist/sensor/physical-charge-capacity.d.ts.map +0 -1
- package/dist/sensor/pixel-pitch.d.ts.map +0 -1
- package/dist/sensor/radiometry-readiness.d.ts.map +0 -1
- package/dist/sensor/raw-readout.d.ts.map +0 -1
- package/dist/sensor/raw-reconstruction.d.ts.map +0 -1
- package/dist/sensor/readout-exposure-linkage.d.ts.map +0 -1
- package/dist/sensor/readout-timing.d.ts.map +0 -1
- package/dist/sensor/response-application-compatibility.d.ts.map +0 -1
- package/dist/sensor/response-operating-range.d.ts.map +0 -1
- package/dist/sensor/responsivity-photocurrent.d.ts.map +0 -1
- package/dist/sensor/sampling-aperture.d.ts.map +0 -1
- package/dist/sensor/scene-eqe-temporal-exposure.d.ts.map +0 -1
- package/dist/sensor/sensor-geometry.d.ts.map +0 -1
- package/dist/sensor/signal-noise.d.ts.map +0 -1
- package/dist/sensor/spatial-sample-reduction.d.ts.map +0 -1
- package/dist/sensor/spatial-sampling-quadrature.d.ts.map +0 -1
- package/dist/sensor/spatio-spectral-reduction.d.ts.map +0 -1
- package/dist/sensor/spectral-coverage.d.ts.map +0 -1
- package/dist/sensor/spectral-quadrature.d.ts.map +0 -1
- package/dist/sensor/spectral-response.d.ts.map +0 -1
- package/dist/sensor/temporal-eqe-sum.d.ts.map +0 -1
- package/dist/sensor/temporal-photo-signal.d.ts.map +0 -1
- package/dist/sensor/temporal-sample-binding.d.ts.map +0 -1
- package/dist/simulation/poc-simulation.d.ts.map +0 -1
- package/dist/stabilization/camera-shake.d.ts.map +0 -1
- package/dist/stabilization/system.d.ts.map +0 -1
- package/docs/API_STYLE.md +0 -235
- package/docs/ARCHITECTURE.md +0 -356
- package/docs/AUTOMATION_COORDINATION.md +0 -190
- package/docs/CAPTURE_COLOR.md +0 -25
- package/docs/CAPTURE_CORRECTED_SDR.md +0 -25
- package/docs/CAPTURE_EXPORT_METADATA.md +0 -27
- package/docs/CAPTURE_SDR.md +0 -22
- package/docs/DEVELOPERS.md +0 -68
- package/docs/DIGITAL_OPTICS_FOUNDATION.md +0 -69
- package/docs/ENVIRONMENT_RAW_CAPTURE.md +0 -208
- package/docs/EXPORT_ACCEPTANCE.md +0 -133
- package/docs/GENERIC_TIER_PRESETS.md +0 -269
- package/docs/GEOMETRIC_PREPARATION_REUSE.md +0 -141
- package/docs/IMAGE_FORMATION.md +0 -247
- package/docs/LINEAR_CAPTURE_ENCODING.md +0 -25
- package/docs/MOTION_AND_SIGNAL.md +0 -250
- package/docs/NATIVE_CAPTURE_SDR.md +0 -70
- package/docs/NATIVE_CAPTURE_SDR_REVIEW.md +0 -37
- package/docs/NATIVE_CAPTURE_SDR_VALIDATION.md +0 -34
- package/docs/NATIVE_RAW_AND_PRINT.md +0 -47
- package/docs/NUMERICAL_CORRECTNESS.md +0 -191
- package/docs/PERFORMANCE_BASELINE.md +0 -56
- package/docs/PHOTOGRAPHIC_EXPORT.md +0 -206
- package/docs/PHYSICS_FOUNDATION.md +0 -426
- package/docs/POC_API.md +0 -278
- package/docs/POC_PROJECTION_PLATFORM_REFERENCE.md +0 -12
- package/docs/POC_PROJECTION_REUSE.md +0 -124
- package/docs/PRINT_195_196_REVIEW.md +0 -93
- package/docs/PRINT_196_ENGINE_ACCEPTANCE.md +0 -45
- package/docs/PRINT_CONTRAST_REFERENCE.md +0 -43
- package/docs/PRINT_DETAIL_ASSESSMENT.md +0 -81
- package/docs/PRINT_DETAIL_JPEG_EVIDENCE.md +0 -36
- package/docs/PRINT_DETAIL_SDR_EVIDENCE.md +0 -29
- package/docs/PRINT_DETAIL_VALIDATION.md +0 -36
- package/docs/PRINT_PLANNING.md +0 -75
- package/docs/PRINT_REGION_STATISTICS.md +0 -38
- package/docs/PROCESSED_OUTPUT.md +0 -157
- package/docs/PRODUCTION_COMPOSITION.md +0 -373
- package/docs/PRODUCTION_ENVIRONMENT_CAPTURE.md +0 -131
- package/docs/PROVENANCE.md +0 -115
- package/docs/PSF_FOUNDATION.md +0 -165
- package/docs/RAW_FRAME_ENVELOPE.md +0 -56
- package/docs/RAW_FRAME_RECONSTRUCTION.md +0 -30
- package/docs/RELEASE_1_0.md +0 -66
- package/docs/RELEASE_1_0_1.md +0 -61
- package/docs/RELEASE_1_1_0.md +0 -25
- package/docs/RELEASE_1_2_0.md +0 -51
- package/docs/RELEASE_1_3_0.md +0 -15
- package/docs/RELEASE_1_4_0.md +0 -23
- package/docs/RELEASE_AUDIT.md +0 -39
- package/docs/SCENE_RADIANCE_AND_ILLUMINATION.md +0 -298
- package/docs/SCENE_SENSOR_QUADRATURE.md +0 -98
- package/docs/SCENE_SENSOR_TEMPORAL_EXPOSURE.md +0 -86
- package/docs/SCIENTIFIC_ASSURANCE.md +0 -280
- package/docs/SCIENTIFIC_CONFORMANCE.md +0 -83
- package/docs/SDR_RENDERING.md +0 -33
- package/docs/SENSOR_APERTURE_RAYS.md +0 -23
- package/docs/SENSOR_ENVIRONMENT_QUERY.md +0 -86
- package/docs/SENSOR_EQE_LOCAL_EXPOSURE.md +0 -104
- package/docs/SENSOR_EQE_TEMPORAL_EXPOSURE.md +0 -74
- package/docs/SENSOR_PSF_QUADRATURE.md +0 -90
- package/docs/SENSOR_RAW_FRAME.md +0 -20
- package/docs/SENSOR_RAW_PRODUCER.md +0 -77
- package/docs/SIGNAL_CONFORMANCE.md +0 -23
- package/docs/SIMULATED_CAPTURE.md +0 -65
- package/docs/STABILIZATION.md +0 -234
- package/docs/TEMPORAL_PHOTO_RAW.md +0 -83
- package/docs/TIER_ACCEPTANCE.md +0 -129
- package/docs/TIER_PRESET_ACCEPTANCE.md +0 -59
- package/docs/V1_COMPOSITION_MAP.md +0 -123
- package/docs/V1_HELPER_REUSE_REVIEW.md +0 -60
- package/docs/V1_PERFORMANCE_DISPOSITION.md +0 -88
- package/docs/benchmarks/2026-10-01-main-baseline.json +0 -694
- package/docs/benchmarks/2026-10-02-geometric-preparation-reuse.json +0 -2190
- package/docs/benchmarks/2026-10-02-poc-projection-reuse.json +0 -2423
- package/docs/benchmarks/2026-10-02-v1-environment-gc-profile.json +0 -210
- package/docs/benchmarks/2026-10-02-v1-environment-ordinary.json +0 -187
- package/docs/benchmarks/2026-10-02-v1-geometry-gc-profile.json +0 -756
- package/docs/benchmarks/2026-10-02-v1-geometry-ordinary-1.json +0 -711
- package/docs/benchmarks/2026-10-02-v1-geometry-ordinary-2.json +0 -711
- package/docs/benchmarks/2026-10-02-v1-poc-gc-profile.json +0 -885
- package/docs/benchmarks/2026-10-02-v1-poc-ordinary-1.json +0 -868
- package/docs/benchmarks/2026-10-02-v1-poc-ordinary-2.json +0 -868
- package/docs/licenses/castleCSF-MIT.txt +0 -21
- package/docs/validation/documentation-fragments.json +0 -212
- package/docs/validation/native-capture-sdr-darwin-arm64-node26-review.jsonl +0 -4
- package/docs/validation/native-capture-sdr-darwin-arm64.jsonl +0 -3
- package/docs/validation/native-raw-print-2026-10-04/fractional-asymmetric-crop.jpg +0 -0
- package/docs/validation/native-raw-print-2026-10-04/gray-ramp.jpg +0 -0
- package/docs/validation/native-raw-print-2026-10-04/linear-area-checker.jpg +0 -0
- package/docs/validation/native-raw-print-2026-10-04/manifest.json +0 -218
- package/docs/validation/native-raw-print-2026-10-04/megapixel-native.jpg +0 -0
- package/docs/validation/native-raw-print-2026-10-04/native-color.jpg +0 -0
- package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel-validation.json +0 -9
- package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel.json +0 -29
- package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel.json.codes.u16le.gz +0 -0
- package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel.json.jpg +0 -0
- package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel.json.rgb.gz +0 -0
- package/docs/validation/native-raw-print-2026-10-04/srgb.icc +0 -0
- package/docs/validation/native-raw-print-2026-10-04/validation.json +0 -41
- package/docs/validation/print-196-candidate-capabilities.json +0 -28
- package/docs/validation/print-196-candidate-evidence.json +0 -356
- package/docs/validation/print-196-engine-acceptance.json +0 -81
- package/docs/validation/print-detail-capabilities.json +0 -103
- package/docs/validation/print-detail-jpeg-evidence.json +0 -116
- package/docs/validation/print-detail-sdr-evidence.json +0 -81
- package/docs/validation/release-audit-inventory.json +0 -1306
- package/docs/validation/tier-acceptance-report-v1.json +0 -2538
|
@@ -1,15 +1,12 @@
|
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
* normalized uniform-area spatial averaging footprint for future image sampling, plus its geometric
|
|
11
|
-
* physical area/fill-fraction diagnostics. It deliberately does not promote that geometric area into
|
|
12
|
-
* radiometric collection efficiency or physical photodiode truth.
|
|
3
|
+
* Sampling aperture: where the colour-sampling sites sit physically on the sensor, and the
|
|
4
|
+
* light-sensitive area of each site as a simple geometric shape.
|
|
5
|
+
*
|
|
6
|
+
* Site pitch and origin are declared facts, never derived from NativeImageRaster. The sensitive
|
|
7
|
+
* region, when known, is a plain geometric rectangle. It does not include microlens effects, charge
|
|
8
|
+
* diffusion, electrical crosstalk, QE (quantum efficiency), throughput, spectral response or an
|
|
9
|
+
* effective light-collection area.
|
|
13
10
|
* @see docs/MOTION_AND_SIGNAL.md for equations, coordinate/unit conventions, blockers and support
|
|
14
11
|
* limits.
|
|
15
12
|
*/
|
|
@@ -18,12 +15,15 @@ import { parseEvidenceList } from "../core/evidence-provenance.js";
|
|
|
18
15
|
import { InvalidScientificInputError } from "../core/validation.js";
|
|
19
16
|
import { resolveNativeEffectiveRasterColorSamplingBinding } from "./capture-color-sampling-binding.js";
|
|
20
17
|
import { resolveColorSamplingSite } from "./color-sampling.js";
|
|
21
|
-
|
|
18
|
+
import { requireInputObject, requireInputKeys, rejectUnknownFields } from "../core/record-validation.js";
|
|
19
|
+
function requireRecord(value, path, allowedKeys) {
|
|
22
20
|
if (typeof value !== "object" ||
|
|
23
21
|
value === null ||
|
|
24
22
|
Array.isArray(value)) {
|
|
25
23
|
throw new InvalidConfigurationError(path + " must be an object.");
|
|
26
24
|
}
|
|
25
|
+
if (allowedKeys !== null)
|
|
26
|
+
rejectUnknownFields(value, allowedKeys, path);
|
|
27
27
|
return value;
|
|
28
28
|
}
|
|
29
29
|
function requireNonEmptyString(value, path) {
|
|
@@ -50,7 +50,7 @@ function requireFinite(value, path) {
|
|
|
50
50
|
return value;
|
|
51
51
|
}
|
|
52
52
|
function parseSiteCenterLattice(value, path) {
|
|
53
|
-
const record = requireRecord(value, path);
|
|
53
|
+
const record = requireRecord(value, path, ["kind", "coordinateSystem", "firstSiteCenterFromImagingAreaTopLeftMicrometers", "pitchXMicrometers", "pitchYMicrometers", "evidence"]);
|
|
54
54
|
if (record.kind !==
|
|
55
55
|
"regular-rectangular-site-center-lattice") {
|
|
56
56
|
throw new InvalidConfigurationError(path + ".kind is invalid.");
|
|
@@ -61,7 +61,7 @@ function parseSiteCenterLattice(value, path) {
|
|
|
61
61
|
'.coordinateSystem must be "native-sensor-physical".');
|
|
62
62
|
}
|
|
63
63
|
const firstCenter = requireRecord(record.firstSiteCenterFromImagingAreaTopLeftMicrometers, path +
|
|
64
|
-
".firstSiteCenterFromImagingAreaTopLeftMicrometers");
|
|
64
|
+
".firstSiteCenterFromImagingAreaTopLeftMicrometers", ["x", "y"]);
|
|
65
65
|
const firstX = requireFinite(firstCenter.x, path +
|
|
66
66
|
".firstSiteCenterFromImagingAreaTopLeftMicrometers.x");
|
|
67
67
|
const firstY = requireFinite(firstCenter.y, path +
|
|
@@ -83,7 +83,7 @@ function parseSiteCenterLattice(value, path) {
|
|
|
83
83
|
};
|
|
84
84
|
}
|
|
85
85
|
function parseGeometricSensitiveAperture(value, path, lattice) {
|
|
86
|
-
const record = requireRecord(value, path);
|
|
86
|
+
const record = requireRecord(value, path, ["kind", "widthMicrometers", "heightMicrometers", "centerOffsetFromSiteCenterMicrometers", "evidence"]);
|
|
87
87
|
if (record.kind === "unresolved") {
|
|
88
88
|
if (record.widthMicrometers !== undefined ||
|
|
89
89
|
record.heightMicrometers !== undefined ||
|
|
@@ -104,7 +104,7 @@ function parseGeometricSensitiveAperture(value, path, lattice) {
|
|
|
104
104
|
const widthMicrometers = requirePositiveFinite(record.widthMicrometers, path + ".widthMicrometers");
|
|
105
105
|
const heightMicrometers = requirePositiveFinite(record.heightMicrometers, path + ".heightMicrometers");
|
|
106
106
|
const offset = requireRecord(record.centerOffsetFromSiteCenterMicrometers, path +
|
|
107
|
-
".centerOffsetFromSiteCenterMicrometers");
|
|
107
|
+
".centerOffsetFromSiteCenterMicrometers", ["x", "y"]);
|
|
108
108
|
const offsetX = requireFinite(offset.x, path +
|
|
109
109
|
".centerOffsetFromSiteCenterMicrometers.x");
|
|
110
110
|
const offsetY = requireFinite(offset.y, path +
|
|
@@ -132,17 +132,16 @@ function parseGeometricSensitiveAperture(value, path, lattice) {
|
|
|
132
132
|
};
|
|
133
133
|
}
|
|
134
134
|
/**
|
|
135
|
-
* Parses
|
|
136
|
-
*
|
|
135
|
+
* Parses where the colour-sampling sites sit physically, plus a simple geometric
|
|
136
|
+
* model of each site's light-sensitive area.
|
|
137
137
|
*
|
|
138
|
-
* Site
|
|
139
|
-
*
|
|
140
|
-
*
|
|
141
|
-
*
|
|
142
|
-
* radiometric collection area.
|
|
138
|
+
* Site pitch and origin are declared facts, never derived from NativeImageRaster.
|
|
139
|
+
* The rectangle, when given, is a geometric sensitive region only. It does not
|
|
140
|
+
* include microlens effects, charge diffusion, electrical crosstalk, QE,
|
|
141
|
+
* throughput, spectral response or an effective light-collection area.
|
|
143
142
|
*/
|
|
144
143
|
export function parseSensorSamplingApertureProfile(value) {
|
|
145
|
-
const profile = requireRecord(value, "sensorSamplingAperture");
|
|
144
|
+
const profile = requireRecord(value, "sensorSamplingAperture", ["schemaVersion", "siteCenterLattice", "profileId", "colorSamplingProfileId", "colorSamplingBindingId", "evidence", "geometricSensitiveAperture"]);
|
|
146
145
|
if (profile.schemaVersion !== "0.1.0") {
|
|
147
146
|
throw new InvalidConfigurationError('sensorSamplingAperture.schemaVersion must be "0.1.0".');
|
|
148
147
|
}
|
|
@@ -167,6 +166,7 @@ function requireSiteIndex(value, path) {
|
|
|
167
166
|
return value;
|
|
168
167
|
}
|
|
169
168
|
function requirePositiveImagingArea(imagingArea) {
|
|
169
|
+
requireInputObject(imagingArea, "imagingArea input");
|
|
170
170
|
if (!Number.isFinite(imagingArea.widthMm) ||
|
|
171
171
|
imagingArea.widthMm <= 0 ||
|
|
172
172
|
!Number.isFinite(imagingArea.heightMm) ||
|
|
@@ -175,14 +175,15 @@ function requirePositiveImagingArea(imagingArea) {
|
|
|
175
175
|
}
|
|
176
176
|
}
|
|
177
177
|
/**
|
|
178
|
-
* Resolves one geometric sampling aperture in native sensor physical space.
|
|
178
|
+
* Resolves one site's geometric sampling aperture in native sensor physical space.
|
|
179
179
|
*
|
|
180
|
-
* The result
|
|
181
|
-
*
|
|
182
|
-
*
|
|
183
|
-
*
|
|
180
|
+
* The result is a normalized footprint that averages evenly over its area, for
|
|
181
|
+
* image sampling, plus its physical area and fill fraction. That geometric area
|
|
182
|
+
* is deliberately not treated as light-collection efficiency or as the true
|
|
183
|
+
* photodiode shape.
|
|
184
184
|
*/
|
|
185
185
|
export function resolveSensorSamplingAperture(input) {
|
|
186
|
+
requireInputKeys(input, "resolveSensorSamplingAperture", ["imagingArea", "nativeRaster", "colorSamplingProfile", "colorSamplingBindingProfile", "samplingApertureProfile", "site"]);
|
|
186
187
|
requirePositiveImagingArea(input.imagingArea);
|
|
187
188
|
const profile = parseSensorSamplingApertureProfile(input.samplingApertureProfile);
|
|
188
189
|
const binding = resolveNativeEffectiveRasterColorSamplingBinding({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sampling-aperture.js","sourceRoot":"","sources":["../../src/sensor/sampling-aperture.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sampling-aperture.js","sourceRoot":"","sources":["../../src/sensor/sampling-aperture.ts"],"names":[],"mappings":"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","sourcesContent":["// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Sampling aperture: where the colour-sampling sites sit physically on the sensor, and the\n * light-sensitive area of each site as a simple geometric shape.\n *\n * Site pitch and origin are declared facts, never derived from NativeImageRaster. The sensitive\n * region, when known, is a plain geometric rectangle. It does not include microlens effects, charge\n * diffusion, electrical crosstalk, QE (quantum efficiency), throughput, spectral response or an\n * effective light-collection area.\n * @see docs/MOTION_AND_SIGNAL.md for equations, coordinate/unit conventions, blockers and support\n * limits.\n */\n\nimport { InvalidConfigurationError } from \"../core/configuration-error.js\";\nimport {\n parseEvidenceList,\n type EvidenceProvenance\n} from \"../core/evidence-provenance.js\";\nimport { InvalidScientificInputError } from \"../core/validation.js\";\nimport {\n resolveNativeEffectiveRasterColorSamplingBinding,\n type NativeEffectiveRasterColorSamplingBindingProfile\n} from \"./capture-color-sampling-binding.js\";\nimport {\n resolveColorSamplingSite,\n type NativeColorSamplingSiteIndex,\n type SensorColorSamplingProfile\n} from \"./color-sampling.js\";\nimport type {\n NativeImageRaster,\n SensorImagingArea\n} from \"./sensor-geometry.js\";\nimport { requireInputObject, requireInputKeys, rejectUnknownFields } from \"../core/record-validation.js\";\n\ntype UnknownRecord = Record<string, unknown>;\n\nexport interface SensorSiteCenterLatticeRegistration {\n kind: \"regular-rectangular-site-center-lattice\";\n coordinateSystem: \"native-sensor-physical\";\n /** Horizontal centre-to-centre site spacing (pitch) in micrometres. */\n pitchXMicrometers: number;\n /** Vertical centre-to-centre site spacing (pitch) in micrometres. */\n pitchYMicrometers: number;\n /**\n * Centre of the first site, measured from the imaging area's physical\n * top-left corner. +X right, +Y down. Units: micrometres.\n */\n firstSiteCenterFromImagingAreaTopLeftMicrometers: {\n x: number;\n y: number;\n };\n evidence: readonly EvidenceProvenance[];\n}\n\nexport type SensorGeometricSensitiveAperture =\n | {\n /**\n * The light-sensitive area is known to matter, but its shape is not\n * known well enough to use.\n */\n kind: \"unresolved\";\n evidence: readonly EvidenceProvenance[];\n }\n | {\n /**\n * A simple approximation of the sensitive area as a rectangle.\n *\n * The rectangle must stay inside one grid cell, so neighbouring\n * sensitive areas never overlap in schema 0.1.0.\n */\n kind: \"uniform-axis-aligned-rectangle\";\n widthMicrometers: number;\n heightMicrometers: number;\n centerOffsetFromSiteCenterMicrometers: {\n x: number;\n y: number;\n };\n evidence: readonly EvidenceProvenance[];\n };\n\nexport interface SensorSamplingApertureProfile {\n schemaVersion: \"0.1.0\";\n profileId: string;\n colorSamplingProfileId: string;\n colorSamplingBindingId: string;\n evidence: readonly EvidenceProvenance[];\n siteCenterLattice: SensorSiteCenterLatticeRegistration;\n geometricSensitiveAperture: SensorGeometricSensitiveAperture;\n}\n\nexport interface ResolveSensorSamplingApertureInput {\n imagingArea: SensorImagingArea;\n nativeRaster: NativeImageRaster;\n colorSamplingProfile: SensorColorSamplingProfile;\n colorSamplingBindingProfile: NativeEffectiveRasterColorSamplingBindingProfile;\n samplingApertureProfile: SensorSamplingApertureProfile;\n site: NativeColorSamplingSiteIndex;\n}\n\nexport interface NativeSensorPhysicalPointMm {\n x: number;\n y: number;\n}\n\nexport interface NativeSensorPhysicalBoundsMm {\n left: number;\n right: number;\n top: number;\n bottom: number;\n}\n\nexport interface ResolvedSensorSamplingAperture {\n profileId: string;\n colorSamplingProfileId: string;\n colorSamplingBindingId: string;\n coordinateSystem: \"native-sensor-physical\";\n site: NativeColorSamplingSiteIndex;\n channelId: string;\n siteGrid: {\n widthSites: number;\n heightSites: number;\n };\n lattice: {\n pitchXMicrometers: number;\n pitchYMicrometers: number;\n firstSiteCenterFromImagingAreaTopLeftMicrometers: {\n x: number;\n y: number;\n };\n siteCenterFromImagingAreaTopLeftMicrometers: {\n x: number;\n y: number;\n };\n siteCenterFromOpticalAxisMm: NativeSensorPhysicalPointMm;\n nominalCellAreaSquareMicrometers: number;\n };\n geometricSensitiveAperture: {\n kind: \"uniform-axis-aligned-rectangle\";\n widthMicrometers: number;\n heightMicrometers: number;\n centerOffsetFromSiteCenterMicrometers: {\n x: number;\n y: number;\n };\n centerFromOpticalAxisMm: NativeSensorPhysicalPointMm;\n boundsFromOpticalAxisMm: NativeSensorPhysicalBoundsMm;\n areaSquareMicrometers: number;\n geometricSensitiveAreaFractionOfLatticeCell: number;\n spatialWeighting:\n \"uniform-unit-area-average\";\n neighboringGeometricApertureOverlap:\n \"none-by-model\";\n };\n /**\n * Fixed statements of what this result does not establish.\n */\n sitePitchDerivedFromNativeImageRaster: false;\n apertureDerivedFromSitePitch: false;\n antiAliasingResponseIncluded: false;\n microlensSpatialRedistributionIncluded: false;\n chargeDiffusionIncluded: false;\n electricalCrosstalkIncluded: false;\n spectralResponseIncluded: false;\n quantumEfficiencyIncluded: false;\n opticalThroughputIncluded: false;\n radiometricCollectionAreaEstablished: false;\n physicalPhotodiodeGeometryEstablished: false;\n provenance: {\n profile: readonly EvidenceProvenance[];\n lattice: readonly EvidenceProvenance[];\n aperture: readonly EvidenceProvenance[];\n };\n}\n\nfunction requireRecord(\n value: unknown,\n path: string,\n allowedKeys: readonly string[] | null\n): UnknownRecord {\n if (\n typeof value !== \"object\" ||\n value === null ||\n Array.isArray(value)\n ) {\n throw new InvalidConfigurationError(\n path + \" must be an object.\"\n );\n }\n if (allowedKeys !== null) rejectUnknownFields(value, allowedKeys, path);\n return value as UnknownRecord;\n}\n\nfunction requireNonEmptyString(\n value: unknown,\n path: string\n): string {\n if (\n typeof value !== \"string\" ||\n value.trim().length === 0\n ) {\n throw new InvalidConfigurationError(\n path + \" must be a non-empty string.\"\n );\n }\n return value;\n}\n\nfunction requirePositiveFinite(\n value: unknown,\n path: string\n): number {\n if (\n typeof value !== \"number\" ||\n !Number.isFinite(value) ||\n value <= 0\n ) {\n throw new InvalidConfigurationError(\n path +\n \" must be a finite number greater than zero.\"\n );\n }\n return value;\n}\n\nfunction requireFinite(\n value: unknown,\n path: string\n): number {\n if (\n typeof value !== \"number\" ||\n !Number.isFinite(value)\n ) {\n throw new InvalidConfigurationError(\n path + \" must be a finite number.\"\n );\n }\n return value;\n}\n\nfunction parseSiteCenterLattice(\n value: unknown,\n path: string\n): SensorSiteCenterLatticeRegistration {\n const record = requireRecord(value, path, [\"kind\", \"coordinateSystem\", \"firstSiteCenterFromImagingAreaTopLeftMicrometers\", \"pitchXMicrometers\", \"pitchYMicrometers\", \"evidence\"]);\n\n if (\n record.kind !==\n \"regular-rectangular-site-center-lattice\"\n ) {\n throw new InvalidConfigurationError(\n path + \".kind is invalid.\"\n );\n }\n if (\n record.coordinateSystem !==\n \"native-sensor-physical\"\n ) {\n throw new InvalidConfigurationError(\n path +\n '.coordinateSystem must be \"native-sensor-physical\".'\n );\n }\n\n const firstCenter = requireRecord(\n record.firstSiteCenterFromImagingAreaTopLeftMicrometers,\n path +\n \".firstSiteCenterFromImagingAreaTopLeftMicrometers\", [\"x\", \"y\"]\n );\n\n const firstX = requireFinite(\n firstCenter.x,\n path +\n \".firstSiteCenterFromImagingAreaTopLeftMicrometers.x\"\n );\n const firstY = requireFinite(\n firstCenter.y,\n path +\n \".firstSiteCenterFromImagingAreaTopLeftMicrometers.y\"\n );\n\n if (firstX < 0 || firstY < 0) {\n throw new InvalidConfigurationError(\n path +\n \".firstSiteCenterFromImagingAreaTopLeftMicrometers must not be negative.\"\n );\n }\n\n return {\n kind:\n \"regular-rectangular-site-center-lattice\",\n coordinateSystem:\n \"native-sensor-physical\",\n pitchXMicrometers:\n requirePositiveFinite(\n record.pitchXMicrometers,\n path + \".pitchXMicrometers\"\n ),\n pitchYMicrometers:\n requirePositiveFinite(\n record.pitchYMicrometers,\n path + \".pitchYMicrometers\"\n ),\n firstSiteCenterFromImagingAreaTopLeftMicrometers:\n {\n x: firstX,\n y: firstY\n },\n evidence: parseEvidenceList(\n record.evidence,\n path + \".evidence\"\n )\n };\n}\n\nfunction parseGeometricSensitiveAperture(\n value: unknown,\n path: string,\n lattice: SensorSiteCenterLatticeRegistration\n): SensorGeometricSensitiveAperture {\n const record = requireRecord(value, path, [\"kind\", \"widthMicrometers\", \"heightMicrometers\", \"centerOffsetFromSiteCenterMicrometers\", \"evidence\"]);\n\n if (record.kind === \"unresolved\") {\n if (\n record.widthMicrometers !== undefined ||\n record.heightMicrometers !== undefined ||\n record.centerOffsetFromSiteCenterMicrometers !==\n undefined\n ) {\n throw new InvalidConfigurationError(\n path +\n \" unresolved aperture must omit rectangle fields.\"\n );\n }\n return {\n kind: \"unresolved\",\n evidence: parseEvidenceList(\n record.evidence,\n path + \".evidence\"\n )\n };\n }\n\n if (\n record.kind !==\n \"uniform-axis-aligned-rectangle\"\n ) {\n throw new InvalidConfigurationError(\n path + \".kind is invalid.\"\n );\n }\n\n const widthMicrometers =\n requirePositiveFinite(\n record.widthMicrometers,\n path + \".widthMicrometers\"\n );\n const heightMicrometers =\n requirePositiveFinite(\n record.heightMicrometers,\n path + \".heightMicrometers\"\n );\n const offset = requireRecord(\n record.centerOffsetFromSiteCenterMicrometers,\n path +\n \".centerOffsetFromSiteCenterMicrometers\", [\"x\", \"y\"]\n );\n const offsetX = requireFinite(\n offset.x,\n path +\n \".centerOffsetFromSiteCenterMicrometers.x\"\n );\n const offsetY = requireFinite(\n offset.y,\n path +\n \".centerOffsetFromSiteCenterMicrometers.y\"\n );\n\n const halfCellX =\n lattice.pitchXMicrometers / 2;\n const halfCellY =\n lattice.pitchYMicrometers / 2;\n\n if (\n Math.abs(offsetX) +\n widthMicrometers / 2 >\n halfCellX ||\n Math.abs(offsetY) +\n heightMicrometers / 2 >\n halfCellY\n ) {\n throw new InvalidConfigurationError(\n path +\n \" rectangle must remain within one regular site lattice cell.\"\n );\n }\n\n return {\n kind:\n \"uniform-axis-aligned-rectangle\",\n widthMicrometers,\n heightMicrometers,\n centerOffsetFromSiteCenterMicrometers:\n {\n x: offsetX,\n y: offsetY\n },\n evidence: parseEvidenceList(\n record.evidence,\n path + \".evidence\"\n )\n };\n}\n\n/**\n * Parses where the colour-sampling sites sit physically, plus a simple geometric\n * model of each site's light-sensitive area.\n *\n * Site pitch and origin are declared facts, never derived from NativeImageRaster.\n * The rectangle, when given, is a geometric sensitive region only. It does not\n * include microlens effects, charge diffusion, electrical crosstalk, QE,\n * throughput, spectral response or an effective light-collection area.\n */\nexport function parseSensorSamplingApertureProfile(\n value: unknown\n): SensorSamplingApertureProfile {\n const profile = requireRecord(\n value,\n \"sensorSamplingAperture\", [\"schemaVersion\", \"siteCenterLattice\", \"profileId\", \"colorSamplingProfileId\", \"colorSamplingBindingId\", \"evidence\", \"geometricSensitiveAperture\"]\n );\n\n if (profile.schemaVersion !== \"0.1.0\") {\n throw new InvalidConfigurationError(\n 'sensorSamplingAperture.schemaVersion must be \"0.1.0\".'\n );\n }\n\n const siteCenterLattice =\n parseSiteCenterLattice(\n profile.siteCenterLattice,\n \"sensorSamplingAperture.siteCenterLattice\"\n );\n\n return {\n schemaVersion: \"0.1.0\",\n profileId: requireNonEmptyString(\n profile.profileId,\n \"sensorSamplingAperture.profileId\"\n ),\n colorSamplingProfileId:\n requireNonEmptyString(\n profile.colorSamplingProfileId,\n \"sensorSamplingAperture.colorSamplingProfileId\"\n ),\n colorSamplingBindingId:\n requireNonEmptyString(\n profile.colorSamplingBindingId,\n \"sensorSamplingAperture.colorSamplingBindingId\"\n ),\n evidence: parseEvidenceList(\n profile.evidence,\n \"sensorSamplingAperture.evidence\"\n ),\n siteCenterLattice,\n geometricSensitiveAperture:\n parseGeometricSensitiveAperture(\n profile.geometricSensitiveAperture,\n \"sensorSamplingAperture.geometricSensitiveAperture\",\n siteCenterLattice\n )\n };\n}\n\nfunction requireSiteIndex(\n value: unknown,\n path: string\n): number {\n if (\n typeof value !== \"number\" ||\n !Number.isSafeInteger(value) ||\n value < 0\n ) {\n throw new InvalidScientificInputError(\n path +\n \" must be a non-negative safe integer color-sampling-site index.\"\n );\n }\n return value;\n}\n\nfunction requirePositiveImagingArea(\n imagingArea: SensorImagingArea\n): void {\n requireInputObject(imagingArea, \"imagingArea input\");\n if (\n !Number.isFinite(imagingArea.widthMm) ||\n imagingArea.widthMm <= 0 ||\n !Number.isFinite(imagingArea.heightMm) ||\n imagingArea.heightMm <= 0\n ) {\n throw new InvalidScientificInputError(\n \"imagingArea width/height must be finite and greater than zero.\"\n );\n }\n}\n\n/**\n * Resolves one site's geometric sampling aperture in native sensor physical space.\n *\n * The result is a normalized footprint that averages evenly over its area, for\n * image sampling, plus its physical area and fill fraction. That geometric area\n * is deliberately not treated as light-collection efficiency or as the true\n * photodiode shape.\n */\nexport function resolveSensorSamplingAperture(\n input: ResolveSensorSamplingApertureInput\n): ResolvedSensorSamplingAperture {\n requireInputKeys(input, \"resolveSensorSamplingAperture\", [\"imagingArea\", \"nativeRaster\", \"colorSamplingProfile\", \"colorSamplingBindingProfile\", \"samplingApertureProfile\", \"site\"]);\n requirePositiveImagingArea(\n input.imagingArea\n );\n\n const profile =\n parseSensorSamplingApertureProfile(\n input.samplingApertureProfile\n );\n const binding =\n resolveNativeEffectiveRasterColorSamplingBinding(\n {\n nativeRaster: input.nativeRaster,\n colorSamplingProfile:\n input.colorSamplingProfile,\n bindingProfile:\n input.colorSamplingBindingProfile\n }\n );\n\n if (\n profile.colorSamplingProfileId !==\n binding.colorSamplingProfileId\n ) {\n throw new InvalidScientificInputError(\n \"Sampling-aperture colorSamplingProfileId must match the resolved color-sampling profile.\"\n );\n }\n if (\n profile.colorSamplingBindingId !==\n binding.bindingId\n ) {\n throw new InvalidScientificInputError(\n \"Sampling-aperture colorSamplingBindingId must match the resolved color-sampling binding.\"\n );\n }\n\n if (\n profile.geometricSensitiveAperture.kind ===\n \"unresolved\"\n ) {\n throw new InvalidScientificInputError(\n \"Geometric sensitive aperture is unresolved; a spatial sampling aperture cannot be produced.\"\n );\n }\n\n const siteX = requireSiteIndex(\n input.site.x,\n \"site.x\"\n );\n const siteY = requireSiteIndex(\n input.site.y,\n \"site.y\"\n );\n\n if (\n siteX >=\n binding.colorSamplingSiteGrid.widthSites ||\n siteY >=\n binding.colorSamplingSiteGrid.heightSites\n ) {\n throw new InvalidScientificInputError(\n \"site must lie within the bound color-sampling site grid.\"\n );\n }\n\n const lattice =\n profile.siteCenterLattice;\n const gridWidth =\n binding.colorSamplingSiteGrid.widthSites;\n const gridHeight =\n binding.colorSamplingSiteGrid.heightSites;\n const imagingWidthMicrometers =\n input.imagingArea.widthMm * 1000;\n const imagingHeightMicrometers =\n input.imagingArea.heightMm * 1000;\n\n const lastCenterX =\n lattice\n .firstSiteCenterFromImagingAreaTopLeftMicrometers\n .x +\n (gridWidth - 1) *\n lattice.pitchXMicrometers;\n const lastCenterY =\n lattice\n .firstSiteCenterFromImagingAreaTopLeftMicrometers\n .y +\n (gridHeight - 1) *\n lattice.pitchYMicrometers;\n\n if (\n lastCenterX > imagingWidthMicrometers ||\n lastCenterY > imagingHeightMicrometers\n ) {\n throw new InvalidScientificInputError(\n \"Declared site-center lattice extends beyond the supplied physical imaging area.\"\n );\n }\n\n const aperture =\n profile.geometricSensitiveAperture;\n const apertureOffsetX =\n aperture.centerOffsetFromSiteCenterMicrometers.x;\n const apertureOffsetY =\n aperture.centerOffsetFromSiteCenterMicrometers.y;\n const apertureHalfWidth =\n aperture.widthMicrometers / 2;\n const apertureHalfHeight =\n aperture.heightMicrometers / 2;\n\n const firstApertureLeft =\n lattice.firstSiteCenterFromImagingAreaTopLeftMicrometers.x +\n apertureOffsetX -\n apertureHalfWidth;\n const firstApertureTop =\n lattice.firstSiteCenterFromImagingAreaTopLeftMicrometers.y +\n apertureOffsetY -\n apertureHalfHeight;\n const lastApertureRight =\n lastCenterX +\n apertureOffsetX +\n apertureHalfWidth;\n const lastApertureBottom =\n lastCenterY +\n apertureOffsetY +\n apertureHalfHeight;\n\n if (\n firstApertureLeft < 0 ||\n firstApertureTop < 0 ||\n lastApertureRight > imagingWidthMicrometers ||\n lastApertureBottom > imagingHeightMicrometers\n ) {\n throw new InvalidScientificInputError(\n \"Declared geometric sensitive aperture does not fit within the supplied physical imaging area across the complete site grid.\"\n );\n }\n\n const siteCenterFromTopLeftX =\n lattice\n .firstSiteCenterFromImagingAreaTopLeftMicrometers\n .x +\n siteX * lattice.pitchXMicrometers;\n const siteCenterFromTopLeftY =\n lattice\n .firstSiteCenterFromImagingAreaTopLeftMicrometers\n .y +\n siteY * lattice.pitchYMicrometers;\n\n const apertureCenterFromTopLeftX =\n siteCenterFromTopLeftX +\n aperture\n .centerOffsetFromSiteCenterMicrometers\n .x;\n const apertureCenterFromTopLeftY =\n siteCenterFromTopLeftY +\n aperture\n .centerOffsetFromSiteCenterMicrometers\n .y;\n const apertureLeftTopX =\n apertureCenterFromTopLeftX -\n aperture.widthMicrometers / 2;\n const apertureRightBottomX =\n apertureCenterFromTopLeftX +\n aperture.widthMicrometers / 2;\n const apertureLeftTopY =\n apertureCenterFromTopLeftY -\n aperture.heightMicrometers / 2;\n const apertureRightBottomY =\n apertureCenterFromTopLeftY +\n aperture.heightMicrometers / 2;\n\n if (\n apertureLeftTopX < 0 ||\n apertureLeftTopY < 0 ||\n apertureRightBottomX >\n imagingWidthMicrometers ||\n apertureRightBottomY >\n imagingHeightMicrometers\n ) {\n throw new InvalidScientificInputError(\n \"Resolved geometric sensitive aperture extends beyond the supplied physical imaging area.\"\n );\n }\n\n const siteCenterFromOpticalAxisMm = {\n x:\n -input.imagingArea.widthMm / 2 +\n siteCenterFromTopLeftX / 1000,\n y:\n -input.imagingArea.heightMm / 2 +\n siteCenterFromTopLeftY / 1000\n };\n const apertureCenterFromOpticalAxisMm = {\n x:\n -input.imagingArea.widthMm / 2 +\n apertureCenterFromTopLeftX / 1000,\n y:\n -input.imagingArea.heightMm / 2 +\n apertureCenterFromTopLeftY / 1000\n };\n const boundsFromOpticalAxisMm = {\n left:\n -input.imagingArea.widthMm / 2 +\n apertureLeftTopX / 1000,\n right:\n -input.imagingArea.widthMm / 2 +\n apertureRightBottomX / 1000,\n top:\n -input.imagingArea.heightMm / 2 +\n apertureLeftTopY / 1000,\n bottom:\n -input.imagingArea.heightMm / 2 +\n apertureRightBottomY / 1000\n };\n\n const areaSquareMicrometers =\n aperture.widthMicrometers *\n aperture.heightMicrometers;\n const nominalCellAreaSquareMicrometers =\n lattice.pitchXMicrometers *\n lattice.pitchYMicrometers;\n const geometricSensitiveAreaFractionOfLatticeCell =\n areaSquareMicrometers /\n nominalCellAreaSquareMicrometers;\n\n if (\n !Number.isFinite(areaSquareMicrometers) ||\n !Number.isFinite(\n nominalCellAreaSquareMicrometers\n ) ||\n !Number.isFinite(\n geometricSensitiveAreaFractionOfLatticeCell\n )\n ) {\n throw new InvalidScientificInputError(\n \"Derived sampling-aperture geometry must remain finite.\"\n );\n }\n\n const channel =\n resolveColorSamplingSite({\n profile: input.colorSamplingProfile,\n site: {\n x: siteX,\n y: siteY\n }\n });\n\n return {\n profileId: profile.profileId,\n colorSamplingProfileId:\n profile.colorSamplingProfileId,\n colorSamplingBindingId:\n profile.colorSamplingBindingId,\n coordinateSystem:\n \"native-sensor-physical\",\n site: {\n x: siteX,\n y: siteY\n },\n channelId: channel.mapping.channelId,\n siteGrid: {\n widthSites: gridWidth,\n heightSites: gridHeight\n },\n lattice: {\n pitchXMicrometers:\n lattice.pitchXMicrometers,\n pitchYMicrometers:\n lattice.pitchYMicrometers,\n firstSiteCenterFromImagingAreaTopLeftMicrometers:\n {\n ...lattice\n .firstSiteCenterFromImagingAreaTopLeftMicrometers\n },\n siteCenterFromImagingAreaTopLeftMicrometers:\n {\n x: siteCenterFromTopLeftX,\n y: siteCenterFromTopLeftY\n },\n siteCenterFromOpticalAxisMm,\n nominalCellAreaSquareMicrometers\n },\n geometricSensitiveAperture: {\n kind:\n \"uniform-axis-aligned-rectangle\",\n widthMicrometers:\n aperture.widthMicrometers,\n heightMicrometers:\n aperture.heightMicrometers,\n centerOffsetFromSiteCenterMicrometers:\n {\n ...aperture\n .centerOffsetFromSiteCenterMicrometers\n },\n centerFromOpticalAxisMm:\n apertureCenterFromOpticalAxisMm,\n boundsFromOpticalAxisMm,\n areaSquareMicrometers,\n geometricSensitiveAreaFractionOfLatticeCell,\n spatialWeighting:\n \"uniform-unit-area-average\",\n neighboringGeometricApertureOverlap:\n \"none-by-model\"\n },\n sitePitchDerivedFromNativeImageRaster:\n false,\n apertureDerivedFromSitePitch: false,\n antiAliasingResponseIncluded: false,\n microlensSpatialRedistributionIncluded:\n false,\n chargeDiffusionIncluded: false,\n electricalCrosstalkIncluded: false,\n spectralResponseIncluded: false,\n quantumEfficiencyIncluded: false,\n opticalThroughputIncluded: false,\n radiometricCollectionAreaEstablished:\n false,\n physicalPhotodiodeGeometryEstablished:\n false,\n provenance: {\n profile: profile.evidence,\n lattice: lattice.evidence,\n aperture: aperture.evidence\n }\n };\n}\n"]}
|
|
@@ -1,21 +1,23 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
* shutter midpoint
|
|
5
|
-
*
|
|
2
|
+
* Photo signal for one site over one exposure, starting from declared scene radiance: paraxial
|
|
3
|
+
* (small-angle) optics, then the EQE (external quantum efficiency) response, at every exact local
|
|
4
|
+
* shutter midpoint time.
|
|
5
|
+
*
|
|
6
|
+
* Light is never averaged before the response checks. No projection, renderer, PSF (point-spread
|
|
7
|
+
* function), charge, noise or production stage runs.
|
|
6
8
|
* @see docs/MOTION_AND_SIGNAL.md for equations, coordinate/unit conventions, blockers and support
|
|
7
9
|
* limits.
|
|
8
10
|
*/
|
|
9
11
|
import { type CalculationResult } from "../core/calculation-result.js";
|
|
10
12
|
import { calculateSceneToSensorIrradianceQuadrature, type CalculateSceneToSensorIrradianceQuadratureInput } from "../optics/scene-to-sensor-quadrature.js";
|
|
11
13
|
import { calculateSensorEqeTemporalExposure, type CalculateSensorEqeTemporalExposureInput } from "./eqe-temporal-exposure.js";
|
|
12
|
-
/**
|
|
14
|
+
/** Input: declared physical scene radiance at every spatial position, wavelength and local shutter midpoint time. */
|
|
13
15
|
export interface CalculateSceneSensorEqeTemporalExposureInput {
|
|
14
|
-
/** One destination site, response and local shutter event
|
|
16
|
+
/** One destination site, its response and one local shutter event. No constant-rate declaration is needed. */
|
|
15
17
|
sensor: Omit<CalculateSensorEqeTemporalExposureInput, "samples">;
|
|
16
18
|
sceneBindings: CalculateSceneToSensorIrradianceQuadratureInput["sceneBindings"];
|
|
17
19
|
optics: CalculateSceneToSensorIrradianceQuadratureInput["optics"];
|
|
18
|
-
/**
|
|
20
|
+
/** States that scene query times are seconds from the shutter's first opening boundary. */
|
|
19
21
|
timeReference: "first-opening-boundary-phase";
|
|
20
22
|
samples: readonly {
|
|
21
23
|
temporalSampleIndex: number;
|
|
@@ -23,7 +25,7 @@ export interface CalculateSceneSensorEqeTemporalExposureInput {
|
|
|
23
25
|
sceneSamples: CalculateSceneToSensorIrradianceQuadratureInput["samples"];
|
|
24
26
|
}[];
|
|
25
27
|
}
|
|
26
|
-
/**
|
|
28
|
+
/** Result. The optical and sensor results each keep their own approximation labels and evidence. */
|
|
27
29
|
export interface SceneSensorEqeTemporalExposure {
|
|
28
30
|
sourcePlane: "sensor-package-incident";
|
|
29
31
|
sourceTargetProjectionVerified: false;
|
|
@@ -37,9 +39,9 @@ export interface SceneSensorEqeTemporalExposure {
|
|
|
37
39
|
exposure: ReturnType<typeof calculateSensorEqeTemporalExposure>;
|
|
38
40
|
}
|
|
39
41
|
/**
|
|
40
|
-
*
|
|
41
|
-
* at every exact local shutter midpoint. Light is never averaged
|
|
42
|
-
*
|
|
42
|
+
* Runs declared scene radiance through paraxial optics and the instantaneous EQE
|
|
43
|
+
* response at every exact local shutter midpoint time. Light is never averaged
|
|
44
|
+
* before the response checks. No projection, renderer, PSF, charge, noise or
|
|
45
|
+
* production stage runs.
|
|
43
46
|
*/
|
|
44
47
|
export declare function calculateSceneSensorEqeTemporalExposure(input: CalculateSceneSensorEqeTemporalExposureInput): CalculationResult<SceneSensorEqeTemporalExposure>;
|
|
45
|
-
//# sourceMappingURL=scene-eqe-temporal-exposure.d.ts.map
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
* shutter midpoint
|
|
6
|
-
*
|
|
3
|
+
* Photo signal for one site over one exposure, starting from declared scene radiance: paraxial
|
|
4
|
+
* (small-angle) optics, then the EQE (external quantum efficiency) response, at every exact local
|
|
5
|
+
* shutter midpoint time.
|
|
6
|
+
*
|
|
7
|
+
* Light is never averaged before the response checks. No projection, renderer, PSF (point-spread
|
|
8
|
+
* function), charge, noise or production stage runs.
|
|
7
9
|
* @see docs/MOTION_AND_SIGNAL.md for equations, coordinate/unit conventions, blockers and support
|
|
8
10
|
* limits.
|
|
9
11
|
*/
|
|
@@ -14,19 +16,22 @@ import { calculateSensorEqeTemporalExposure } from "./eqe-temporal-exposure.js";
|
|
|
14
16
|
import { calculateSensorSpatialSamplingQuadrature } from "./spatial-sampling-quadrature.js";
|
|
15
17
|
import { calculateSensorSpectralQuadrature } from "./spectral-quadrature.js";
|
|
16
18
|
import { bindSensorTemporalSamples } from "./temporal-sample-binding.js";
|
|
19
|
+
import { requireInputKeys } from "../core/record-validation.js";
|
|
17
20
|
/**
|
|
18
|
-
*
|
|
19
|
-
* at every exact local shutter midpoint. Light is never averaged
|
|
20
|
-
*
|
|
21
|
+
* Runs declared scene radiance through paraxial optics and the instantaneous EQE
|
|
22
|
+
* response at every exact local shutter midpoint time. Light is never averaged
|
|
23
|
+
* before the response checks. No projection, renderer, PSF, charge, noise or
|
|
24
|
+
* production stage runs.
|
|
21
25
|
*/
|
|
22
26
|
export function calculateSceneSensorEqeTemporalExposure(input) {
|
|
27
|
+
requireInputKeys(input, "calculateSceneSensorEqeTemporalExposure", ["sensor", "sceneBindings", "optics", "timeReference", "samples"]);
|
|
23
28
|
if (input.timeReference !== "first-opening-boundary-phase") {
|
|
24
29
|
throw new InvalidScientificInputError("Scene samples must use the explicit first-opening-boundary-phase time reference.");
|
|
25
30
|
}
|
|
26
31
|
if (input.sensor.responseApplication.sourcePlane.value !== "sensor-package-incident") {
|
|
27
32
|
throw new InvalidScientificInputError("Scene optical output requires a sensor-package-incident response application.");
|
|
28
33
|
}
|
|
29
|
-
//
|
|
34
|
+
// Check the total declared work against its limit before any per-instant optical calculation.
|
|
30
35
|
const ordered = bindSensorTemporalSamples(input.samples, sample => sample.sceneSamples);
|
|
31
36
|
const spatialQuadrature = calculateSensorSpatialSamplingQuadrature({ ...input.sensor.spatialSampling,
|
|
32
37
|
colorSamplingProfile: input.sensor.colorSamplingProfile,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scene-eqe-temporal-exposure.js","sourceRoot":"","sources":["../../src/sensor/scene-eqe-temporal-exposure.ts"],"names":[],"mappings":"AAAA,sCAAsC;AAEtC
|
|
1
|
+
{"version":3,"file":"scene-eqe-temporal-exposure.js","sourceRoot":"","sources":["../../src/sensor/scene-eqe-temporal-exposure.ts"],"names":[],"mappings":"AAAA,sCAAsC;AAEtC;;;;;;;;;GASG;AAEH,OAAO,EAAE,mBAAmB,EAA0B,MAAM,+BAA+B,CAAC;AAC5F,OAAO,EAAE,2BAA2B,EAAE,MAAM,uBAAuB,CAAC;AACpE,OAAO,EAAE,0CAA0C,EACK,MAAM,yCAAyC,CAAC;AACxG,OAAO,EAAE,kCAAkC,EAAgD,MAAM,4BAA4B,CAAC;AAC9H,OAAO,EAAE,wCAAwC,EAAE,MAAM,kCAAkC,CAAC;AAC5F,OAAO,EAAE,iCAAiC,EAAE,MAAM,0BAA0B,CAAC;AAC7E,OAAO,EAAE,yBAAyB,EAAE,MAAM,8BAA8B,CAAC;AACzE,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AA+BhE;;;;;GAKG;AACH,MAAM,UAAU,uCAAuC,CACrD,KAAmD;IAEnD,gBAAgB,CAAC,KAAK,EAAE,yCAAyC,EAAE,CAAC,QAAQ,EAAE,eAAe,EAAE,QAAQ,EAAE,eAAe,EAAE,SAAS,CAAC,CAAC,CAAC;IACtI,IAAI,KAAK,CAAC,aAAa,KAAK,8BAA8B,EAAE,CAAC;QAC3D,MAAM,IAAI,2BAA2B,CAAC,kFAAkF,CAAC,CAAC;IAC5H,CAAC;IACD,IAAI,KAAK,CAAC,MAAM,CAAC,mBAAmB,CAAC,WAAW,CAAC,KAAK,KAAK,yBAAyB,EAAE,CAAC;QACrF,MAAM,IAAI,2BAA2B,CAAC,+EAA+E,CAAC,CAAC;IACzH,CAAC;IACD,8FAA8F;IAC9F,MAAM,OAAO,GAAG,yBAAyB,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;IACxF,MAAM,iBAAiB,GAAG,wCAAwC,CAAC,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,eAAe;QAClG,oBAAoB,EAAE,KAAK,CAAC,MAAM,CAAC,oBAAoB;QACvD,2BAA2B,EAAE,KAAK,CAAC,MAAM,CAAC,aAAa,CAAC,cAAc;QACtE,YAAY,EAAE,KAAK,CAAC,MAAM,CAAC,aAAa,CAAC,mBAAmB,CAAC,YAAY,EAAE,CAAC,CAAC,KAAK,CAAC;IACrF,MAAM,kBAAkB,GAAG,iCAAiC,CAAC,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,gBAAgB;QAC7F,oBAAoB,EAAE,KAAK,CAAC,MAAM,CAAC,oBAAoB;QACvD,uBAAuB,EAAE,KAAK,CAAC,MAAM,CAAC,uBAAuB,EAAE,CAAC,CAAC,KAAK,CAAC;IACzE,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;IACpC,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;QAC1C,MAAM,MAAM,GAAG,0CAA0C,CAAC,EAAE,iBAAiB,EAAE,kBAAkB;YAC/F,aAAa,EAAE,KAAK,CAAC,aAAa,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM;YACxD,4BAA4B,EAAE,MAAM,CAAC,+BAA+B,EAAE,OAAO,EAAE,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC;QACxG,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;YACxC,IAAI,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACzC,MAAM,IAAI,2BAA2B,CAAC,wEAAwE,CAAC,CAAC;YAClH,CAAC;YACD,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACvC,CAAC;QACD,OAAO,EAAE,mBAAmB,EAAE,MAAM,CAAC,mBAAmB;YACtD,+BAA+B,EAAE,MAAM,CAAC,+BAA+B,EAAE,MAAM,EAAE,CAAC;IACtF,CAAC,CAAC,CAAC;IACH,MAAM,QAAQ,GAAG,kCAAkC,CAAC,EAAE,GAAG,KAAK,CAAC,MAAM;QACnE,OAAO,EAAE,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,mBAAmB,EAAE,MAAM,CAAC,mBAAmB;YACtF,+BAA+B,EAAE,MAAM,CAAC,+BAA+B;YACvE,iBAAiB,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,iBAAiB,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACpE,OAAO,mBAAmB,CAAC,EAAE,WAAW,EAAE,yBAAyB,EAAE,8BAA8B,EAAE,KAAK;QACxG,8BAA8B,EAAE,KAAK,EAAE,wBAAwB,EAAE,KAAK,EAAE,cAAc,EAAE,QAAQ;KACjG,EAAE,oCAAoC,EAAE,OAAO,EAAE;QAChD,kHAAkH;QAClH,0GAA0G;QAC1G,6GAA6G;KAC9G,CAAC,CAAC;AACL,CAAC","sourcesContent":["// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Photo signal for one site over one exposure, starting from declared scene radiance: paraxial\n * (small-angle) optics, then the EQE (external quantum efficiency) response, at every exact local\n * shutter midpoint time.\n *\n * Light is never averaged before the response checks. No projection, renderer, PSF (point-spread\n * function), charge, noise or production stage runs.\n * @see docs/MOTION_AND_SIGNAL.md for equations, coordinate/unit conventions, blockers and support\n * limits.\n */\n\nimport { approximationResult, type CalculationResult } from \"../core/calculation-result.js\";\nimport { InvalidScientificInputError } from \"../core/validation.js\";\nimport { calculateSceneToSensorIrradianceQuadrature,\n type CalculateSceneToSensorIrradianceQuadratureInput } from \"../optics/scene-to-sensor-quadrature.js\";\nimport { calculateSensorEqeTemporalExposure, type CalculateSensorEqeTemporalExposureInput } from \"./eqe-temporal-exposure.js\";\nimport { calculateSensorSpatialSamplingQuadrature } from \"./spatial-sampling-quadrature.js\";\nimport { calculateSensorSpectralQuadrature } from \"./spectral-quadrature.js\";\nimport { bindSensorTemporalSamples } from \"./temporal-sample-binding.js\";\nimport { requireInputKeys } from \"../core/record-validation.js\";\n\n/** Input: declared physical scene radiance at every spatial position, wavelength and local shutter midpoint time. */\nexport interface CalculateSceneSensorEqeTemporalExposureInput {\n /** One destination site, its response and one local shutter event. No constant-rate declaration is needed. */\n sensor: Omit<CalculateSensorEqeTemporalExposureInput, \"samples\">;\n sceneBindings: CalculateSceneToSensorIrradianceQuadratureInput[\"sceneBindings\"];\n optics: CalculateSceneToSensorIrradianceQuadratureInput[\"optics\"];\n /** States that scene query times are seconds from the shutter's first opening boundary. */\n timeReference: \"first-opening-boundary-phase\";\n samples: readonly {\n temporalSampleIndex: number;\n timeSecondsFromOpeningReference: number;\n sceneSamples: CalculateSceneToSensorIrradianceQuadratureInput[\"samples\"];\n }[];\n}\n\n/** Result. The optical and sensor results each keep their own approximation labels and evidence. */\nexport interface SceneSensorEqeTemporalExposure {\n sourcePlane: \"sensor-package-incident\";\n sourceTargetProjectionVerified: false;\n sceneProviderExecutionVerified: false;\n psfRedistributionApplied: false;\n opticalSamples: readonly {\n temporalSampleIndex: number;\n timeSecondsFromOpeningReference: number;\n optics: ReturnType<typeof calculateSceneToSensorIrradianceQuadrature>;\n }[];\n exposure: ReturnType<typeof calculateSensorEqeTemporalExposure>;\n}\n\n/**\n * Runs declared scene radiance through paraxial optics and the instantaneous EQE\n * response at every exact local shutter midpoint time. Light is never averaged\n * before the response checks. No projection, renderer, PSF, charge, noise or\n * production stage runs.\n */\nexport function calculateSceneSensorEqeTemporalExposure(\n input: CalculateSceneSensorEqeTemporalExposureInput\n): CalculationResult<SceneSensorEqeTemporalExposure> {\n requireInputKeys(input, \"calculateSceneSensorEqeTemporalExposure\", [\"sensor\", \"sceneBindings\", \"optics\", \"timeReference\", \"samples\"]);\n if (input.timeReference !== \"first-opening-boundary-phase\") {\n throw new InvalidScientificInputError(\"Scene samples must use the explicit first-opening-boundary-phase time reference.\");\n }\n if (input.sensor.responseApplication.sourcePlane.value !== \"sensor-package-incident\") {\n throw new InvalidScientificInputError(\"Scene optical output requires a sensor-package-incident response application.\");\n }\n // Check the total declared work against its limit before any per-instant optical calculation.\n const ordered = bindSensorTemporalSamples(input.samples, sample => sample.sceneSamples);\n const spatialQuadrature = calculateSensorSpatialSamplingQuadrature({ ...input.sensor.spatialSampling,\n colorSamplingProfile: input.sensor.colorSamplingProfile,\n colorSamplingBindingProfile: input.sensor.localExposure.bindingProfile,\n nativeRaster: input.sensor.localExposure.exposureWindowInput.nativeRaster }).value;\n const spectralQuadrature = calculateSensorSpectralQuadrature({ ...input.sensor.spectralSampling,\n colorSamplingProfile: input.sensor.colorSamplingProfile,\n spectralResponseProfile: input.sensor.spectralResponseProfile }).value;\n const sampleIds = new Set<string>();\n const opticalSamples = ordered.map(sample => {\n const optics = calculateSceneToSensorIrradianceQuadrature({ spatialQuadrature, spectralQuadrature,\n sceneBindings: input.sceneBindings, optics: input.optics,\n timeSecondsFromExposureStart: sample.timeSecondsFromOpeningReference, samples: sample.sceneSamples });\n for (const node of optics.value.samples) {\n if (sampleIds.has(node.request.sampleId)) {\n throw new InvalidScientificInputError(\"Scene sampleId must be unique across the complete temporal quadrature.\");\n }\n sampleIds.add(node.request.sampleId);\n }\n return { temporalSampleIndex: sample.temporalSampleIndex,\n timeSecondsFromOpeningReference: sample.timeSecondsFromOpeningReference, optics };\n });\n const exposure = calculateSensorEqeTemporalExposure({ ...input.sensor,\n samples: opticalSamples.map(sample => ({ temporalSampleIndex: sample.temporalSampleIndex,\n timeSecondsFromOpeningReference: sample.timeSecondsFromOpeningReference,\n irradianceSamples: sample.optics.value.irradianceSamples })) });\n return approximationResult({ sourcePlane: \"sensor-package-incident\", sourceTargetProjectionVerified: false,\n sceneProviderExecutionVerified: false, psfRedistributionApplied: false, opticalSamples, exposure\n }, \"scene-sensor-eqe-temporal-exposure\", \"0.1.0\", [\n \"Scene targets, visibility and provider transport remain declared; projection and PSF execution are not verified.\",\n \"Paraxial optical irradiance and EQE validity are evaluated independently at each local shutter midpoint.\",\n \"Child uncertainties are not combined; no quadrature convergence bound or production activation is asserted.\"\n ]);\n}\n"]}
|
|
@@ -1,20 +1,18 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
* sampling pitch is geometric sample spacing only and must not be interpreted as photosite fill factor
|
|
9
|
-
* or photon-collection area.
|
|
2
|
+
* Sensor geometry: physical size of the imaging area (diagonal, aspect ratio, 35 mm crop factor) and
|
|
3
|
+
* the native pixel grid (megapixels, pixel pitch).
|
|
4
|
+
*
|
|
5
|
+
* Sensor size and resolution are kept independent. Crop factor is the ratio of diagonals to a
|
|
6
|
+
* 36 × 24 mm frame, and does not include any digital or output crop. Pixel pitch here is only the
|
|
7
|
+
* spacing between samples; it is not the photosite's fill factor or light-collecting area.
|
|
10
8
|
* @see docs/MOTION_AND_SIGNAL.md for equations, coordinate/unit conventions, blockers and support
|
|
11
9
|
* limits.
|
|
12
10
|
*/
|
|
13
11
|
import { type CalculationResult } from "../core/calculation-result.js";
|
|
14
12
|
/**
|
|
15
|
-
*
|
|
13
|
+
* The physical light-sensitive imaging area used for image formation.
|
|
16
14
|
*
|
|
17
|
-
*
|
|
15
|
+
* It is deliberately not the size of the sensor package or die.
|
|
18
16
|
*/
|
|
19
17
|
export interface SensorImagingArea {
|
|
20
18
|
/** Physical active imaging width in millimetres. */
|
|
@@ -23,10 +21,10 @@ export interface SensorImagingArea {
|
|
|
23
21
|
heightMm: number;
|
|
24
22
|
}
|
|
25
23
|
/**
|
|
26
|
-
*
|
|
24
|
+
* Width and height of an image grid in pixels.
|
|
27
25
|
*
|
|
28
|
-
*
|
|
29
|
-
*
|
|
26
|
+
* Pixels here are image samples. That does not mean each sample matches one
|
|
27
|
+
* physical photodiode (photosite).
|
|
30
28
|
*/
|
|
31
29
|
export interface RasterDimensions {
|
|
32
30
|
/** Horizontal image-sample/pixel count. */
|
|
@@ -35,10 +33,10 @@ export interface RasterDimensions {
|
|
|
35
33
|
pixelHeight: number;
|
|
36
34
|
}
|
|
37
35
|
/**
|
|
38
|
-
*
|
|
36
|
+
* The native pixel grid of an imaging area.
|
|
39
37
|
*
|
|
40
|
-
* This alias
|
|
41
|
-
* use RasterDimensions
|
|
38
|
+
* This alias names the role. For other grids, such as active or output
|
|
39
|
+
* images, use RasterDimensions.
|
|
42
40
|
*/
|
|
43
41
|
export type NativeImageRaster = RasterDimensions;
|
|
44
42
|
export interface ImagingAreaMetrics {
|
|
@@ -49,8 +47,8 @@ export interface ImagingAreaMetrics {
|
|
|
49
47
|
/**
|
|
50
48
|
* Diagonal crop factor relative to a 36 × 24 mm reference frame.
|
|
51
49
|
*
|
|
52
|
-
*
|
|
53
|
-
* digital
|
|
50
|
+
* It describes the physical imaging area only, and does not include any
|
|
51
|
+
* later digital or output crop.
|
|
54
52
|
*/
|
|
55
53
|
cropFactor35Mm: number;
|
|
56
54
|
}
|
|
@@ -70,15 +68,15 @@ export interface SensorGeometryMetrics {
|
|
|
70
68
|
};
|
|
71
69
|
sampling: {
|
|
72
70
|
/**
|
|
73
|
-
* Horizontal
|
|
71
|
+
* Horizontal sample spacing (pitch) in micrometres.
|
|
74
72
|
*
|
|
75
|
-
* This is image
|
|
73
|
+
* This is the spacing between image samples, not the photodiode's active area.
|
|
76
74
|
*/
|
|
77
75
|
pitchXMicrometers: number;
|
|
78
76
|
/**
|
|
79
|
-
* Vertical
|
|
77
|
+
* Vertical sample spacing (pitch) in micrometres.
|
|
80
78
|
*
|
|
81
|
-
* This is image
|
|
79
|
+
* This is the spacing between image samples, not the photodiode's active area.
|
|
82
80
|
*/
|
|
83
81
|
pitchYMicrometers: number;
|
|
84
82
|
/** Horizontal sampling pitch divided by vertical sampling pitch. */
|
|
@@ -86,26 +84,24 @@ export interface SensorGeometryMetrics {
|
|
|
86
84
|
};
|
|
87
85
|
}
|
|
88
86
|
/**
|
|
89
|
-
* Calculates physical imaging
|
|
90
|
-
* density.
|
|
87
|
+
* Calculates metrics of the physical imaging area, independent of pixel count.
|
|
91
88
|
*
|
|
92
|
-
* Crop factor
|
|
93
|
-
*
|
|
89
|
+
* Crop factor is the ratio of diagonals to a 36 × 24 mm reference frame. It
|
|
90
|
+
* does not include any digital or output crop.
|
|
94
91
|
*
|
|
95
92
|
* @param imagingArea Physical photosensitive imaging area.
|
|
96
93
|
* @returns Physical diagonal, aspect ratio, and diagonal 35 mm crop factor.
|
|
97
94
|
*/
|
|
98
95
|
export declare function calculateImagingAreaMetrics(imagingArea: SensorImagingArea): CalculationResult<ImagingAreaMetrics>;
|
|
99
96
|
/**
|
|
100
|
-
* Calculates physical imaging
|
|
101
|
-
*
|
|
97
|
+
* Calculates metrics of the physical imaging area, the native pixel grid and
|
|
98
|
+
* the sample spacing, keeping sensor size and resolution independent.
|
|
102
99
|
*
|
|
103
|
-
* The
|
|
104
|
-
*
|
|
105
|
-
*
|
|
100
|
+
* The grid is assumed to cover the whole imaging area. The derived pitch is
|
|
101
|
+
* only the spacing between samples. Do not read it as the photosite's fill
|
|
102
|
+
* factor or light-collecting area.
|
|
106
103
|
*
|
|
107
104
|
* @param input Physical imaging area and native effective image raster.
|
|
108
105
|
* @returns Derived imaging-area, raster, and sampling metrics.
|
|
109
106
|
*/
|
|
110
107
|
export declare function calculateSensorGeometryMetrics(input: CalculateSensorGeometryMetricsInput): CalculationResult<SensorGeometryMetrics>;
|
|
111
|
-
//# sourceMappingURL=sensor-geometry.d.ts.map
|
|
@@ -1,58 +1,73 @@
|
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
* sampling pitch is geometric sample spacing only and must not be interpreted as photosite fill factor
|
|
10
|
-
* or photon-collection area.
|
|
3
|
+
* Sensor geometry: physical size of the imaging area (diagonal, aspect ratio, 35 mm crop factor) and
|
|
4
|
+
* the native pixel grid (megapixels, pixel pitch).
|
|
5
|
+
*
|
|
6
|
+
* Sensor size and resolution are kept independent. Crop factor is the ratio of diagonals to a
|
|
7
|
+
* 36 × 24 mm frame, and does not include any digital or output crop. Pixel pitch here is only the
|
|
8
|
+
* spacing between samples; it is not the photosite's fill factor or light-collecting area.
|
|
11
9
|
* @see docs/MOTION_AND_SIGNAL.md for equations, coordinate/unit conventions, blockers and support
|
|
12
10
|
* limits.
|
|
13
11
|
*/
|
|
14
12
|
import { calculatedResult } from "../core/calculation-result.js";
|
|
15
13
|
import { InvalidScientificInputError, requirePositiveFinite, requirePositiveInteger } from "../core/validation.js";
|
|
14
|
+
import { portableHypot } from "../core/portable-math.js";
|
|
15
|
+
import { requireInputObject, requireInputKeys } from "../core/record-validation.js";
|
|
16
16
|
const REFERENCE_35MM_WIDTH_MM = 36;
|
|
17
17
|
const REFERENCE_35MM_HEIGHT_MM = 24;
|
|
18
|
-
|
|
18
|
+
/** 36² + 24² mm²: the squared diagonal of the 35 mm reference frame (exact as a double). */
|
|
19
|
+
const REFERENCE_35MM_DIAGONAL_SQUARED_MM2 = REFERENCE_35MM_WIDTH_MM * REFERENCE_35MM_WIDTH_MM +
|
|
20
|
+
REFERENCE_35MM_HEIGHT_MM * REFERENCE_35MM_HEIGHT_MM;
|
|
21
|
+
/**
|
|
22
|
+
* Diagonal 35 mm crop factor, √(1872 / (w² + h²)). It uses only correctly rounded operations, so the
|
|
23
|
+
* stored value is bit-identical in every JavaScript engine (see core/portable-math.ts).
|
|
24
|
+
*/
|
|
25
|
+
function diagonalCropFactor35Mm(widthMm, heightMm, diagonalMm) {
|
|
26
|
+
const diagonalSquaredMm2 = widthMm * widthMm + heightMm * heightMm;
|
|
27
|
+
return Number.isFinite(diagonalSquaredMm2) && diagonalSquaredMm2 > 0
|
|
28
|
+
? Math.sqrt(REFERENCE_35MM_DIAGONAL_SQUARED_MM2 / diagonalSquaredMm2)
|
|
29
|
+
: Math.sqrt(REFERENCE_35MM_DIAGONAL_SQUARED_MM2) / diagonalMm;
|
|
30
|
+
}
|
|
19
31
|
/**
|
|
20
|
-
* Calculates physical imaging
|
|
21
|
-
* density.
|
|
32
|
+
* Calculates metrics of the physical imaging area, independent of pixel count.
|
|
22
33
|
*
|
|
23
|
-
* Crop factor
|
|
24
|
-
*
|
|
34
|
+
* Crop factor is the ratio of diagonals to a 36 × 24 mm reference frame. It
|
|
35
|
+
* does not include any digital or output crop.
|
|
25
36
|
*
|
|
26
37
|
* @param imagingArea Physical photosensitive imaging area.
|
|
27
38
|
* @returns Physical diagonal, aspect ratio, and diagonal 35 mm crop factor.
|
|
28
39
|
*/
|
|
29
40
|
export function calculateImagingAreaMetrics(imagingArea) {
|
|
41
|
+
requireInputKeys(imagingArea, "calculateImagingAreaMetrics", ["widthMm", "heightMm"]);
|
|
30
42
|
requirePositiveFinite("imagingArea.widthMm", imagingArea.widthMm);
|
|
31
43
|
requirePositiveFinite("imagingArea.heightMm", imagingArea.heightMm);
|
|
32
|
-
const diagonalMm =
|
|
44
|
+
const diagonalMm = portableHypot(imagingArea.widthMm, imagingArea.heightMm);
|
|
33
45
|
return calculatedResult({
|
|
34
46
|
diagonalMm,
|
|
35
47
|
aspectRatio: imagingArea.widthMm / imagingArea.heightMm,
|
|
36
|
-
cropFactor35Mm:
|
|
48
|
+
cropFactor35Mm: diagonalCropFactor35Mm(imagingArea.widthMm, imagingArea.heightMm, diagonalMm)
|
|
37
49
|
}, "sensor-imaging-area", "1.0.0", [
|
|
38
50
|
"35 mm reference frame is 36 × 24 mm and crop factor is diagonal-based.",
|
|
39
51
|
"Digital/output cropping is excluded from physical imaging-area crop factor."
|
|
40
52
|
]);
|
|
41
53
|
}
|
|
42
54
|
/**
|
|
43
|
-
* Calculates physical imaging
|
|
44
|
-
*
|
|
55
|
+
* Calculates metrics of the physical imaging area, the native pixel grid and
|
|
56
|
+
* the sample spacing, keeping sensor size and resolution independent.
|
|
45
57
|
*
|
|
46
|
-
* The
|
|
47
|
-
*
|
|
48
|
-
*
|
|
58
|
+
* The grid is assumed to cover the whole imaging area. The derived pitch is
|
|
59
|
+
* only the spacing between samples. Do not read it as the photosite's fill
|
|
60
|
+
* factor or light-collecting area.
|
|
49
61
|
*
|
|
50
62
|
* @param input Physical imaging area and native effective image raster.
|
|
51
63
|
* @returns Derived imaging-area, raster, and sampling metrics.
|
|
52
64
|
*/
|
|
53
65
|
export function calculateSensorGeometryMetrics(input) {
|
|
66
|
+
requireInputKeys(input, "calculateSensorGeometryMetrics", ["imagingArea", "nativeRaster"]);
|
|
67
|
+
requireInputObject(input.imagingArea, "imagingArea");
|
|
54
68
|
requirePositiveFinite("imagingArea.widthMm", input.imagingArea.widthMm);
|
|
55
69
|
requirePositiveFinite("imagingArea.heightMm", input.imagingArea.heightMm);
|
|
70
|
+
requireInputObject(input.nativeRaster, "nativeRaster");
|
|
56
71
|
requirePositiveInteger("nativeRaster.pixelWidth", input.nativeRaster.pixelWidth);
|
|
57
72
|
requirePositiveInteger("nativeRaster.pixelHeight", input.nativeRaster.pixelHeight);
|
|
58
73
|
const totalImageSamples = input.nativeRaster.pixelWidth * input.nativeRaster.pixelHeight;
|