@photivra/engine 1.5.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 +393 -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 +116 -9
- package/dist/capture/native-raw-development.js +221 -62
- 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 +65 -12
- package/dist/capture/native-raw.js +81 -19
- 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 -8
- package/docs/api/capture-native-raw-dng.md +84 -0
- package/docs/api/capture-native-raw.md +21 -10
- 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/DENSE_PUPIL_QUALIFICATION.md +0 -121
- 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 -54
- 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_1_5_0.md +0 -105
- 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/SEPARABLE_EMISSION_DRAFT.md +0 -103
- 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/dense-pupil-2026-10-06/pilot.jsonl +0 -6
- 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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"raw-readout.js","sourceRoot":"","sources":["../../src/sensor/raw-readout.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"raw-readout.js","sourceRoot":"","sources":["../../src/sensor/raw-readout.ts"],"names":[],"mappings":"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","sourcesContent":["// SPDX-License-Identifier: Apache-2.0\n\n/**\n * RAW readout: turns the expected charge in a sensor site into a RAW code, with shot noise, read\n * noise and the ADC (analogue-to-digital converter).\n *\n * The steps, in order:\n * 1. expected charge;\n * 2. separately seeded random photo and dark draws (Poisson shot noise);\n * 3. signed electronic read noise;\n * 4. the upper pre-ADC clipping threshold;\n * 5. the black pedestal (offset);\n * 6. ADC quantization, rounding to nearest with ties up;\n * 7. limits on the unsigned code.\n *\n * Values below black stay signed until the final code clamp. Physical storage saturation, pre-ADC\n * clipping and digital clipping are reported separately. The ISO setting never invents a conversion\n * regime; regimes are declared.\n * @see docs/SENSOR_RAW_PRODUCER.md for equations, coordinate/unit conventions, blockers and support\n * limits.\n */\n\nimport {\n approximationResult,\n type CalculationResult\n} from \"../core/calculation-result.js\";\nimport { InvalidConfigurationError } from \"../core/configuration-error.js\";\nimport {\n parseEvidenceList,\n type EvidenceBackedFact,\n type EvidenceProvenance\n} from \"../core/evidence-provenance.js\";\nimport { InvalidScientificInputError } from \"../core/validation.js\";\nimport {\n createDeterministicUniformStream,\n sampleDeterministicStandardNormal,\n type DeterministicUniformStream\n} from \"./stochastic-seed.js\";\nimport type {\n SensorPhotoAccumulatedChargeComposition as SensorAccumulatedChargeComposition\n} from \"./accumulated-charge.js\";\nimport type {\n SensorPhysicalChargeCapacityAssessment\n} from \"./physical-charge-capacity.js\";\nimport type {\n SensorSpectralResponseScientificStatus\n} from \"./spectral-response.js\";\nimport { requireInputKeys, rejectUnknownFields } from \"../core/record-validation.js\";\nimport {\n evaluateParsedFixedPatternSite,\n parseSensorFixedPatternNoiseProfile,\n type SensorFixedPatternNoiseProfile,\n type SensorFixedPatternSiteValues\n} from \"./fixed-pattern-noise.js\";\n\ntype UnknownRecord = Record<string, unknown>;\n\nexport const SENSOR_CHARGE_SAMPLING_PROFILE_SCHEMA_VERSION =\n \"0.1.0\" as const;\nexport const SENSOR_READOUT_CONVERSION_PROFILE_SCHEMA_VERSION =\n \"0.1.0\" as const;\n\nexport type SensorAdditionalChargeSamplingModel =\n | \"poisson\"\n | \"deterministic-expected-electron-equivalent\";\n\nexport interface SensorAdditionalChargeSamplingPolicy {\n componentId: string;\n model:\n SensorAdditionalChargeSamplingModel;\n}\n\nexport interface SensorChargeSamplingProfile {\n schemaVersion:\n typeof SENSOR_CHARGE_SAMPLING_PROFILE_SCHEMA_VERSION;\n profileId: string;\n completenessProfileId: string;\n scientificStatus: \"approximation\";\n photoShotNoiseModel: \"poisson\";\n darkShotNoiseModel: \"poisson\";\n additionalComponentPolicies:\n readonly SensorAdditionalChargeSamplingPolicy[];\n evidence:\n readonly EvidenceProvenance[];\n limitations: readonly string[];\n}\n\nexport interface SimulateSensorChargeRealizationInput {\n accumulatedCharge:\n SensorAccumulatedChargeComposition;\n samplingProfile:\n SensorChargeSamplingProfile;\n seedUint32: number;\n /**\n * Optional fixed-pattern noise for this sensor. PRNU (photo-response non-uniformity) scales the\n * photo Poisson mean; DSNU (dark-signal non-uniformity) and hot pixels scale the dark Poisson mean.\n * If omitted, the result is exactly the uniform population model.\n */\n fixedPatternNoise?:\n SensorFixedPatternNoiseProfile;\n}\n\nexport interface SensorChargeRealization {\n samplingProfileId: string;\n completenessProfileId: string;\n colorSamplingProfileId: string;\n channelId: string;\n site: {\n x: number;\n y: number;\n };\n bindingId: string;\n seedUint32: number;\n photoExpectedElectronCount: number;\n photoRealizedElectronCount: number;\n darkExpectedElectronCount: number;\n darkRealizedElectronCount: number;\n /** Fixed-pattern profile applied to this realization, or null for the uniform population model. */\n fixedPatternNoiseProfileId:\n string | null;\n /** PRNU gain applied to the photo expectation (exactly 1 without a fixed pattern). */\n photoResponseGainFactor: number;\n /** DSNU/hot-pixel factor applied to the dark expectation (exactly 1 without a fixed pattern). */\n darkCurrentFactor: number;\n hotPixel: boolean;\n /** Poisson means actually sampled: expectation × the site's fixed-pattern factor. */\n photoSampledMeanElectronCount: number;\n darkSampledMeanElectronCount: number;\n additionalComponents:\n readonly {\n componentId: string;\n expectedElectronCount: number;\n realizedElectronEquivalentCount:\n number;\n model:\n SensorAdditionalChargeSamplingModel;\n }[];\n totalExpectedStoredElectronCount:\n number;\n totalRealizedStoredElectronEquivalentCount:\n number;\n photoShotNoiseApplied: true;\n darkShotNoiseApplied: true;\n electronicReadNoiseApplied: false;\n physicalSaturationApplied: false;\n bloomingModeled: false;\n conversionGainApplied: false;\n adcQuantizationApplied: false;\n rawCodeValueProduced: false;\n stochasticModel:\n \"independent-poisson-photo-dark-explicit-additional-policy\";\n deterministicSeededRealization:\n true;\n}\n\n/**\n * Optional ADC integral non-linearity (INL): an offset in code units (LSB, least significant bit),\n * piecewise linear in the ideal continuous ADC input code, added before quantization. The points must\n * start at code 0 and end at the ADC maximum code. If omitted, the ADC is ideal and uniform.\n */\nexport interface SensorAdcIntegralNonLinearity {\n kind: \"piecewise-linear-code-offset\";\n knots: readonly { code: number; offsetCodes: number }[];\n evidence: readonly EvidenceProvenance[];\n}\n\n/**\n * Optional record of how one regime's ISO gain was derived (the exposure index of CIPA DC-004,\n * relative to the base exposure index). The readout equations still use\n * systemConversionGainElectronsPerCode (analog, before the ADC) and adc.digitalGain (after the ADC).\n * This record must agree with them and never replaces them.\n */\nexport interface SensorReadoutExposureIndexGain {\n exposureIndex: number;\n baseExposureIndex: number;\n /** Analog (pre-ADC) gain relative to the base-exposure-index regime. */\n analogGain: number;\n /** Post-ADC digital gain; equals adc.digitalGain (1 when omitted). */\n digitalGain: number;\n conversionGainMode:\n | \"single-conversion-gain\"\n | \"low-conversion-gain\"\n | \"high-conversion-gain\";\n evidence: readonly EvidenceProvenance[];\n}\n\nexport interface SensorElectronicReadNoiseComponent {\n componentId: string;\n rmsElectrons:\n EvidenceBackedFact<number>;\n evidence:\n readonly EvidenceProvenance[];\n}\n\n/**\n * One explicitly selected electronic conversion regime. It has a sourced number of\n * electrons per code, an upper pre-ADC threshold in electron equivalents, separate\n * read-noise components (RMS electrons) and an unsigned ADC coding policy. The black\n * pedestal and digital saturation are in code units. The regime does not guess its\n * hardware mechanism, is not chosen from ISO automatically, and does not replace\n * physical storage capacity.\n */\nexport interface SensorReadoutConversionRegime {\n regimeId: string;\n scientificStatus:\n SensorSpectralResponseScientificStatus;\n systemConversionGainElectronsPerCode:\n EvidenceBackedFact<number>;\n preAdcSaturationElectronEquivalent:\n EvidenceBackedFact<number>;\n readNoiseComponents:\n readonly SensorElectronicReadNoiseComponent[];\n adc: {\n bitDepth: number;\n blackLevelCode: number;\n digitalSaturationCode: number;\n transfer:\n \"uniform-round-half-up\";\n /**\n * Optional post-ADC digital gain (>= 1) applied about the black level:\n * code = roundHalfUp((adcCode - black) * digitalGain + black). Omission means 1.\n */\n digitalGain?: number;\n integralNonLinearity?:\n SensorAdcIntegralNonLinearity;\n };\n exposureIndexGain?:\n SensorReadoutExposureIndexGain;\n evidence:\n readonly EvidenceProvenance[];\n limitations: readonly string[];\n}\n\nexport interface SensorReadoutConversionProfile {\n schemaVersion:\n typeof SENSOR_READOUT_CONVERSION_PROFILE_SCHEMA_VERSION;\n profileId: string;\n colorSamplingProfileId: string;\n channelId: string;\n regimes:\n readonly SensorReadoutConversionRegime[];\n regimeSelectionOwnedBy:\n \"explicit-upstream-camera-state-not-inferred-from-iso\";\n evidence:\n readonly EvidenceProvenance[];\n}\n\nexport interface ResolveSensorReadoutRegimeInput {\n profile:\n SensorReadoutConversionProfile;\n regimeId: string;\n}\n\nexport interface ResolvedSensorReadoutRegime {\n profileId: string;\n colorSamplingProfileId: string;\n channelId: string;\n regime:\n SensorReadoutConversionRegime;\n regimeSelectionOwnedBy:\n \"explicit-upstream-camera-state-not-inferred-from-iso\";\n adcMaximumCode: number;\n combinedReadNoiseRmsElectrons:\n number;\n}\n\nexport interface CalculateExpectedSensorReadoutInput {\n accumulatedCharge:\n SensorAccumulatedChargeComposition;\n physicalCapacityAssessment:\n SensorPhysicalChargeCapacityAssessment;\n readoutProfile:\n SensorReadoutConversionProfile;\n regimeId: string;\n}\n\nexport interface SensorExpectedReadoutSignal {\n readoutProfileId: string;\n regimeId: string;\n completenessProfileId: string;\n capacityProfileId: string;\n colorSamplingProfileId: string;\n channelId: string;\n site: {\n x: number;\n y: number;\n };\n bindingId: string;\n expectedStoredElectronCount:\n number;\n expectedStoredChargeBelowOrAtPhysicalCapacity:\n true;\n expectedElectronEquivalentAfterPreAdcSaturation:\n number;\n preAdcSaturationAppliedToExpectation:\n boolean;\n systemConversionGainElectronsPerCode:\n number;\n expectedCodeBeforeBlackOffset:\n number;\n blackLevelCode: number;\n /** Continuous ADC input code including any declared INL offset. */\n expectedCodeBeforeQuantization:\n number;\n adcIntegralNonLinearityOffsetCodes:\n number;\n digitalGain: number;\n /** Continuous code after post-ADC digital gain about black (equals the ADC input without one). */\n expectedCodeAfterDigitalGain:\n number;\n adcBitDepth: number;\n adcMaximumCode: number;\n digitalSaturationCode: number;\n expectedDigitalSaturation:\n boolean;\n electronicReadNoiseMeanElectrons:\n 0;\n electronicReadNoiseRmsElectrons:\n number;\n electronicReadNoiseSampled: false;\n adcQuantizationApplied: false;\n rawCodeValueProduced: false;\n isoUsedToInferRegime: false;\n}\n\nexport interface SimulateSensorRawCodeInput {\n chargeRealization:\n SensorChargeRealization;\n physicalCapacityAssessment:\n SensorPhysicalChargeCapacityAssessment;\n readoutProfile:\n SensorReadoutConversionProfile;\n regimeId: string;\n readNoiseSeedUint32: number;\n /**\n * Optional fixed pattern; must be the same profile used for the charge realization. Its static\n * row/column offsets are added with read noise before the pre-ADC threshold.\n */\n fixedPatternNoise?:\n SensorFixedPatternNoiseProfile;\n}\n\nexport interface SensorRawCodeSample {\n readoutProfileId: string;\n regimeId: string;\n samplingProfileId: string;\n completenessProfileId: string;\n capacityProfileId: string;\n colorSamplingProfileId: string;\n channelId: string;\n site: {\n x: number;\n y: number;\n };\n bindingId: string;\n chargeSeedUint32: number;\n readNoiseSeedUint32: number;\n realizedStoredElectronEquivalentCountBeforePhysicalCapacity:\n number;\n physicalChargeCapacityElectrons:\n number;\n electronEquivalentAfterPhysicalScalarSaturation:\n number;\n physicalScalarSaturationApplied:\n boolean;\n overflowElectronEquivalentDiagnostic:\n number;\n bloomingModeled: false;\n electronicReadNoiseComponents:\n readonly {\n componentId: string;\n rmsElectrons: number;\n sampledElectrons: number;\n }[];\n totalElectronicReadNoiseElectrons:\n number;\n /** Fixed-pattern profile applied at readout, or null. */\n fixedPatternNoiseProfileId:\n string | null;\n /** Static fixed-pattern row + column offset in input-referred electrons (0 without a pattern). */\n fixedPatternReadoutOffsetElectrons:\n number;\n electronEquivalentAfterReadNoise:\n number;\n preAdcSaturationElectronEquivalent:\n number;\n /** Signed electronic signal after the upper (pre-ADC) clip, before conversion and the black pedestal. */\n electronEquivalentAfterPreAdcSaturation:\n number;\n preAdcSaturationApplied:\n boolean;\n systemConversionGainElectronsPerCode:\n number;\n blackLevelCode: number;\n /** Continuous ADC input code including any declared integral non-linearity offset. */\n codeBeforeQuantization:\n number;\n /** INL offset added before quantization (0 for an ideal ADC). */\n adcIntegralNonLinearityOffsetCodes:\n number;\n /** ADC output after quantization and the ADC code-range limit, before digital gain. */\n adcCodeBeforeDigitalGain:\n number;\n /** Post-ADC digital gain (1 when the regime declares none). */\n digitalGain: number;\n quantizedCodeBeforeDigitalClamp:\n number;\n adcBitDepth: number;\n adcMaximumCode: number;\n digitalSaturationCode: number;\n rawCode: number;\n digitalSaturationApplied:\n boolean;\n lowerCodeClampApplied:\n boolean;\n adcTransfer:\n \"uniform-round-half-up\";\n physicalSaturationApplied: boolean;\n electronicReadNoiseApplied:\n boolean;\n conversionGainApplied: true;\n adcQuantizationApplied: true;\n rawCodeValueProduced: true;\n isoUsedToInferRegime: false;\n deterministicSeededRealization:\n true;\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.trim();\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 finite.\"\n );\n }\n return value;\n}\n\nfunction requireNonNegativeFinite(\n value: unknown,\n path: string\n): number {\n const parsed =\n requireFinite(value, path);\n if (parsed < 0) {\n throw new InvalidConfigurationError(\n path +\n \" must be greater than or equal to zero.\"\n );\n }\n return parsed;\n}\n\nfunction requirePositiveFinite(\n value: unknown,\n path: string\n): number {\n const parsed =\n requireFinite(value, path);\n if (parsed <= 0) {\n throw new InvalidConfigurationError(\n path +\n \" must be greater than zero.\"\n );\n }\n return parsed;\n}\n\nfunction requireUint32(\n value: unknown,\n path: string\n): number {\n if (\n typeof value !== \"number\" ||\n !Number.isSafeInteger(value) ||\n value < 0 ||\n value > 0xffff_ffff\n ) {\n throw new InvalidScientificInputError(\n path +\n \" must be an unsigned 32-bit integer.\"\n );\n }\n return value;\n}\n\nfunction requireSafeInteger(\n value: unknown,\n path: string\n): number {\n if (\n typeof value !== \"number\" ||\n !Number.isSafeInteger(value)\n ) {\n throw new InvalidConfigurationError(\n path + \" must be a safe integer.\"\n );\n }\n return value;\n}\n\nfunction parseLimitations(\n value: unknown,\n path: string\n): readonly string[] {\n if (!Array.isArray(value)) {\n throw new InvalidConfigurationError(\n path + \" must be an array.\"\n );\n }\n const parsed =\n value.map((entry, index) =>\n requireNonEmptyString(\n entry,\n path +\n \"[\" +\n index +\n \"]\"\n )\n );\n if (\n new Set(parsed).size !==\n parsed.length\n ) {\n throw new InvalidConfigurationError(\n path +\n \" must not contain duplicates.\"\n );\n }\n return parsed;\n}\n\nfunction parsePositiveFact(\n value: unknown,\n path: string\n): EvidenceBackedFact<number> {\n const record =\n requireRecord(value, path, [\"value\", \"evidence\"]);\n return {\n value:\n requirePositiveFinite(\n record.value,\n path + \".value\"\n ),\n evidence:\n parseEvidenceList(\n record.evidence,\n path + \".evidence\"\n )\n };\n}\n\nfunction parseNonNegativeFact(\n value: unknown,\n path: string\n): EvidenceBackedFact<number> {\n const record =\n requireRecord(value, path, [\"value\", \"evidence\"]);\n return {\n value:\n requireNonNegativeFinite(\n record.value,\n path + \".value\"\n ),\n evidence:\n parseEvidenceList(\n record.evidence,\n path + \".evidence\"\n )\n };\n}\n\n/**\n * Validates untrusted input and returns it as a normalized, typed value. Unknown enum values,\n * missing required fields and inconsistent scientific data are rejected.\n *\n * The profile sets how expected charge is sampled into random photo and dark counts.\n * @param value - Untrusted data. TypeScript types alone are not validation.\n * @returns The result. Success does not imply calibration.\n *\n * @see docs/API_REFERENCE.md for the package export and its full type definitions.\n */\nexport function parseSensorChargeSamplingProfile(\n value: unknown\n): SensorChargeSamplingProfile {\n const record =\n requireRecord(\n value,\n \"sensorChargeSamplingProfile\", [\"schemaVersion\", \"scientificStatus\", \"photoShotNoiseModel\", \"darkShotNoiseModel\", \"additionalComponentPolicies\", \"profileId\", \"completenessProfileId\", \"evidence\", \"limitations\"]\n );\n\n if (\n record.schemaVersion !==\n SENSOR_CHARGE_SAMPLING_PROFILE_SCHEMA_VERSION\n ) {\n throw new InvalidConfigurationError(\n 'sensorChargeSamplingProfile.schemaVersion must be \"' +\n SENSOR_CHARGE_SAMPLING_PROFILE_SCHEMA_VERSION +\n '\".'\n );\n }\n if (\n record.scientificStatus !==\n \"approximation\"\n ) {\n throw new InvalidConfigurationError(\n 'sensorChargeSamplingProfile.scientificStatus must be \"approximation\".'\n );\n }\n if (\n record.photoShotNoiseModel !==\n \"poisson\" ||\n record.darkShotNoiseModel !==\n \"poisson\"\n ) {\n throw new InvalidConfigurationError(\n \"sensorChargeSamplingProfile photo/dark shot-noise models must be Poisson.\"\n );\n }\n if (\n !Array.isArray(\n record.additionalComponentPolicies\n )\n ) {\n throw new InvalidConfigurationError(\n \"sensorChargeSamplingProfile.additionalComponentPolicies must be an array.\"\n );\n }\n\n const additionalComponentPolicies =\n record.additionalComponentPolicies.map(\n (entry, index) => {\n const path =\n \"sensorChargeSamplingProfile.additionalComponentPolicies[\" +\n index +\n \"]\";\n const policy =\n requireRecord(\n entry,\n path, [\"model\", \"componentId\"]\n );\n if (\n policy.model !==\n \"poisson\" &&\n policy.model !==\n \"deterministic-expected-electron-equivalent\"\n ) {\n throw new InvalidConfigurationError(\n path +\n \".model is invalid.\"\n );\n }\n return {\n componentId:\n requireNonEmptyString(\n policy.componentId,\n path +\n \".componentId\"\n ),\n model:\n policy.model\n } as SensorAdditionalChargeSamplingPolicy;\n }\n );\n\n const ids =\n additionalComponentPolicies.map(\n (policy) =>\n policy.componentId\n );\n if (\n new Set(ids).size !==\n ids.length\n ) {\n throw new InvalidConfigurationError(\n \"sensorChargeSamplingProfile.additionalComponentPolicies must not contain duplicate componentId values.\"\n );\n }\n\n return {\n schemaVersion:\n SENSOR_CHARGE_SAMPLING_PROFILE_SCHEMA_VERSION,\n profileId:\n requireNonEmptyString(\n record.profileId,\n \"sensorChargeSamplingProfile.profileId\"\n ),\n completenessProfileId:\n requireNonEmptyString(\n record.completenessProfileId,\n \"sensorChargeSamplingProfile.completenessProfileId\"\n ),\n scientificStatus:\n \"approximation\",\n photoShotNoiseModel:\n \"poisson\",\n darkShotNoiseModel:\n \"poisson\",\n additionalComponentPolicies,\n evidence:\n parseEvidenceList(\n record.evidence,\n \"sensorChargeSamplingProfile.evidence\"\n ),\n limitations:\n parseLimitations(\n record.limitations,\n \"sensorChargeSamplingProfile.limitations\"\n )\n };\n}\n\nfunction parseStatus(\n value: unknown,\n path: string\n): SensorSpectralResponseScientificStatus {\n if (\n value !== \"calibrated\" &&\n value !== \"approximation\"\n ) {\n throw new InvalidConfigurationError(\n path + \" is invalid.\"\n );\n }\n return value;\n}\n\nfunction parseReadNoiseComponent(\n value: unknown,\n path: string\n): SensorElectronicReadNoiseComponent {\n const record =\n requireRecord(value, path, [\"componentId\", \"rmsElectrons\", \"evidence\"]);\n return {\n componentId:\n requireNonEmptyString(\n record.componentId,\n path + \".componentId\"\n ),\n rmsElectrons:\n parseNonNegativeFact(\n record.rmsElectrons,\n path + \".rmsElectrons\"\n ),\n evidence:\n parseEvidenceList(\n record.evidence,\n path + \".evidence\"\n )\n };\n}\n\nfunction parseIntegralNonLinearity(\n value: unknown,\n path: string,\n adcMaximumCode: number\n): SensorAdcIntegralNonLinearity {\n const record =\n requireRecord(value, path, [\"kind\", \"knots\", \"evidence\"]);\n if (\n record.kind !==\n \"piecewise-linear-code-offset\"\n ) {\n throw new InvalidConfigurationError(\n path +\n '.kind must be \"piecewise-linear-code-offset\".'\n );\n }\n if (\n !Array.isArray(record.knots) ||\n record.knots.length < 2 ||\n record.knots.length > 4096\n ) {\n throw new InvalidConfigurationError(\n path +\n \".knots must contain 2 through 4096 knots.\"\n );\n }\n const knots =\n record.knots.map(\n (entry: unknown, index: number) => {\n const knot =\n requireRecord(\n entry,\n path + \".knots[\" + index + \"]\", [\"code\", \"offsetCodes\"]\n );\n return {\n code: requireFinite(\n knot.code,\n path + \".knots[\" + index + \"].code\"\n ),\n offsetCodes: requireFinite(\n knot.offsetCodes,\n path + \".knots[\" + index + \"].offsetCodes\"\n )\n };\n }\n );\n if (\n knots[0]!.code !== 0 ||\n knots[knots.length - 1]!.code !==\n adcMaximumCode ||\n knots.some(\n (knot, index) =>\n index > 0 &&\n knot.code <=\n knots[index - 1]!.code\n ) ||\n knots.some(\n (knot) =>\n Math.abs(knot.offsetCodes) >\n adcMaximumCode\n )\n ) {\n throw new InvalidConfigurationError(\n path +\n \".knots must strictly increase from code 0 to the ADC maximum code with bounded offsets.\"\n );\n }\n return {\n kind:\n \"piecewise-linear-code-offset\",\n knots,\n evidence:\n parseEvidenceList(\n record.evidence,\n path + \".evidence\"\n )\n };\n}\n\nfunction parseExposureIndexGain(\n value: unknown,\n path: string,\n adcDigitalGain: number\n): SensorReadoutExposureIndexGain {\n const record =\n requireRecord(value, path, [\"exposureIndex\", \"baseExposureIndex\", \"analogGain\", \"digitalGain\", \"conversionGainMode\", \"evidence\"]);\n const exposureIndex =\n requirePositiveFinite(\n record.exposureIndex,\n path + \".exposureIndex\"\n );\n const baseExposureIndex =\n requirePositiveFinite(\n record.baseExposureIndex,\n path + \".baseExposureIndex\"\n );\n const analogGain =\n requirePositiveFinite(\n record.analogGain,\n path + \".analogGain\"\n );\n const digitalGain =\n requirePositiveFinite(\n record.digitalGain,\n path + \".digitalGain\"\n );\n const mode =\n record.conversionGainMode;\n if (\n mode !== \"single-conversion-gain\" &&\n mode !== \"low-conversion-gain\" &&\n mode !== \"high-conversion-gain\"\n ) {\n throw new InvalidConfigurationError(\n path +\n \".conversionGainMode is invalid.\"\n );\n }\n const ratio =\n exposureIndex /\n baseExposureIndex;\n if (\n digitalGain !==\n adcDigitalGain ||\n Math.abs(\n analogGain * digitalGain -\n ratio\n ) >\n 1e-12 * ratio\n ) {\n throw new InvalidConfigurationError(\n path +\n \" must satisfy analogGain x digitalGain = exposureIndex / baseExposureIndex and digitalGain = adc.digitalGain.\"\n );\n }\n return {\n exposureIndex,\n baseExposureIndex,\n analogGain,\n digitalGain,\n conversionGainMode: mode,\n evidence:\n parseEvidenceList(\n record.evidence,\n path + \".evidence\"\n )\n };\n}\n\nfunction parseRegime(\n value: unknown,\n path: string\n): SensorReadoutConversionRegime {\n const record =\n requireRecord(value, path, [\"adc\", \"readNoiseComponents\", \"systemConversionGainElectronsPerCode\", \"exposureIndexGain\", \"regimeId\", \"scientificStatus\", \"preAdcSaturationElectronEquivalent\", \"evidence\", \"limitations\"]);\n const adc =\n requireRecord(\n record.adc,\n path + \".adc\", [\"bitDepth\", \"blackLevelCode\", \"digitalSaturationCode\", \"transfer\", \"digitalGain\", \"integralNonLinearity\"]\n );\n const bitDepth =\n requireSafeInteger(\n adc.bitDepth,\n path + \".adc.bitDepth\"\n );\n if (\n bitDepth < 1 ||\n bitDepth > 30\n ) {\n throw new InvalidConfigurationError(\n path +\n \".adc.bitDepth must be from 1 through 30.\"\n );\n }\n const adcMaximumCode =\n 2 ** bitDepth - 1;\n const blackLevelCode =\n requireSafeInteger(\n adc.blackLevelCode,\n path + \".adc.blackLevelCode\"\n );\n const digitalSaturationCode =\n requireSafeInteger(\n adc.digitalSaturationCode,\n path +\n \".adc.digitalSaturationCode\"\n );\n\n if (\n blackLevelCode < 0 ||\n blackLevelCode >\n adcMaximumCode\n ) {\n throw new InvalidConfigurationError(\n path +\n \".adc.blackLevelCode must lie inside the unsigned ADC code range.\"\n );\n }\n if (\n digitalSaturationCode <=\n blackLevelCode ||\n digitalSaturationCode >\n adcMaximumCode\n ) {\n throw new InvalidConfigurationError(\n path +\n \".adc.digitalSaturationCode must be greater than blackLevelCode and at most the ADC maximum code.\"\n );\n }\n if (\n adc.transfer !==\n \"uniform-round-half-up\"\n ) {\n throw new InvalidConfigurationError(\n path +\n '.adc.transfer must be \"uniform-round-half-up\".'\n );\n }\n if (\n !Array.isArray(\n record.readNoiseComponents\n )\n ) {\n throw new InvalidConfigurationError(\n path +\n \".readNoiseComponents must be an array.\"\n );\n }\n const readNoiseComponents =\n record.readNoiseComponents.map(\n (entry, index) =>\n parseReadNoiseComponent(\n entry,\n path +\n \".readNoiseComponents[\" +\n index +\n \"]\"\n )\n );\n const componentIds =\n readNoiseComponents.map(\n (entry) =>\n entry.componentId\n );\n if (\n new Set(componentIds).size !==\n componentIds.length\n ) {\n throw new InvalidConfigurationError(\n path +\n \".readNoiseComponents must not contain duplicate componentId values.\"\n );\n }\n\n const digitalGain =\n adc.digitalGain === undefined\n ? undefined\n : requireFinite(\n adc.digitalGain,\n path + \".adc.digitalGain\"\n );\n if (\n digitalGain !== undefined &&\n (digitalGain < 1 ||\n digitalGain > 65536)\n ) {\n throw new InvalidConfigurationError(\n path +\n \".adc.digitalGain must be from 1 through 65536.\"\n );\n }\n const integralNonLinearity =\n adc.integralNonLinearity === undefined\n ? undefined\n : parseIntegralNonLinearity(\n adc.integralNonLinearity,\n path + \".adc.integralNonLinearity\",\n adcMaximumCode\n );\n const systemConversionGainElectronsPerCode =\n parsePositiveFact(\n record\n .systemConversionGainElectronsPerCode,\n path +\n \".systemConversionGainElectronsPerCode\"\n );\n const exposureIndexGain =\n record.exposureIndexGain === undefined\n ? undefined\n : parseExposureIndexGain(\n record.exposureIndexGain,\n path + \".exposureIndexGain\",\n digitalGain ?? 1\n );\n\n return {\n regimeId:\n requireNonEmptyString(\n record.regimeId,\n path + \".regimeId\"\n ),\n scientificStatus:\n parseStatus(\n record.scientificStatus,\n path +\n \".scientificStatus\"\n ),\n systemConversionGainElectronsPerCode,\n preAdcSaturationElectronEquivalent:\n parsePositiveFact(\n record\n .preAdcSaturationElectronEquivalent,\n path +\n \".preAdcSaturationElectronEquivalent\"\n ),\n readNoiseComponents,\n adc: {\n bitDepth,\n blackLevelCode,\n digitalSaturationCode,\n transfer:\n \"uniform-round-half-up\",\n ...(digitalGain === undefined\n ? {}\n : { digitalGain }),\n ...(integralNonLinearity === undefined\n ? {}\n : { integralNonLinearity })\n },\n ...(exposureIndexGain === undefined\n ? {}\n : { exposureIndexGain }),\n evidence:\n parseEvidenceList(\n record.evidence,\n path + \".evidence\"\n ),\n limitations:\n parseLimitations(\n record.limitations,\n path + \".limitations\"\n )\n };\n}\n\n/**\n * Validates untrusted input and returns it as a normalized, typed value. Unknown enum values,\n * missing required fields and inconsistent scientific data are rejected.\n *\n * The profile lists the declared conversion regimes. ISO never invents a regime.\n * @param value - Untrusted data. TypeScript types alone are not validation.\n * @returns The result. Success does not imply calibration.\n *\n * @see docs/API_REFERENCE.md for the package export and its full type definitions.\n */\nexport function parseSensorReadoutConversionProfile(\n value: unknown\n): SensorReadoutConversionProfile {\n const record =\n requireRecord(\n value,\n \"sensorReadoutConversionProfile\", [\"schemaVersion\", \"regimeSelectionOwnedBy\", \"regimes\", \"profileId\", \"colorSamplingProfileId\", \"channelId\", \"evidence\"]\n );\n if (\n record.schemaVersion !==\n SENSOR_READOUT_CONVERSION_PROFILE_SCHEMA_VERSION\n ) {\n throw new InvalidConfigurationError(\n 'sensorReadoutConversionProfile.schemaVersion must be \"' +\n SENSOR_READOUT_CONVERSION_PROFILE_SCHEMA_VERSION +\n '\".'\n );\n }\n if (\n record.regimeSelectionOwnedBy !==\n \"explicit-upstream-camera-state-not-inferred-from-iso\"\n ) {\n throw new InvalidConfigurationError(\n 'sensorReadoutConversionProfile.regimeSelectionOwnedBy must be \"explicit-upstream-camera-state-not-inferred-from-iso\".'\n );\n }\n if (\n !Array.isArray(\n record.regimes\n ) ||\n record.regimes.length === 0\n ) {\n throw new InvalidConfigurationError(\n \"sensorReadoutConversionProfile.regimes must be a non-empty array.\"\n );\n }\n const regimes =\n record.regimes.map(\n (entry, index) =>\n parseRegime(\n entry,\n \"sensorReadoutConversionProfile.regimes[\" +\n index +\n \"]\"\n )\n );\n const ids =\n regimes.map(\n (regime) =>\n regime.regimeId\n );\n if (\n new Set(ids).size !==\n ids.length\n ) {\n throw new InvalidConfigurationError(\n \"sensorReadoutConversionProfile.regimes must not contain duplicate regimeId values.\"\n );\n }\n\n return {\n schemaVersion:\n SENSOR_READOUT_CONVERSION_PROFILE_SCHEMA_VERSION,\n profileId:\n requireNonEmptyString(\n record.profileId,\n \"sensorReadoutConversionProfile.profileId\"\n ),\n colorSamplingProfileId:\n requireNonEmptyString(\n record.colorSamplingProfileId,\n \"sensorReadoutConversionProfile.colorSamplingProfileId\"\n ),\n channelId:\n requireNonEmptyString(\n record.channelId,\n \"sensorReadoutConversionProfile.channelId\"\n ),\n regimes,\n regimeSelectionOwnedBy:\n \"explicit-upstream-camera-state-not-inferred-from-iso\",\n evidence:\n parseEvidenceList(\n record.evidence,\n \"sensorReadoutConversionProfile.evidence\"\n )\n };\n}\n\n/**\n * Selects a declared readout regime and checks it against the exact channel and profile identity.\n * The regime is never inferred from ISO.\n * @param input - The input; see `ResolveSensorReadoutRegimeInput` for its fields, units and coordinates.\n * @returns The result. Success does not imply calibration.\n *\n * @see docs/API_REFERENCE.md for the package export and its full type definitions.\n */\nexport function resolveSensorReadoutRegime(\n input:\n ResolveSensorReadoutRegimeInput\n): ResolvedSensorReadoutRegime {\n requireInputKeys(input, \"resolveSensorReadoutRegime\", [\"profile\", \"regimeId\"]);\n const profile =\n parseSensorReadoutConversionProfile(\n input.profile\n );\n if (\n typeof input.regimeId !==\n \"string\" ||\n input.regimeId.trim().length ===\n 0\n ) {\n throw new InvalidConfigurationError(\n \"regimeId must be a non-empty string.\"\n );\n }\n const regimeId =\n input.regimeId.trim();\n const regime =\n profile.regimes.find(\n (entry) =>\n entry.regimeId === regimeId\n );\n if (regime === undefined) {\n throw new InvalidScientificInputError(\n \"regimeId is not declared by the sensor readout conversion profile.\"\n );\n }\n const combinedReadNoiseRmsElectrons =\n Math.sqrt(\n regime.readNoiseComponents.reduce(\n (sum, component) =>\n sum +\n component\n .rmsElectrons.value *\n component\n .rmsElectrons.value,\n 0\n )\n );\n\n return {\n profileId:\n profile.profileId,\n colorSamplingProfileId:\n profile.colorSamplingProfileId,\n channelId:\n profile.channelId,\n regime,\n regimeSelectionOwnedBy:\n profile\n .regimeSelectionOwnedBy,\n adcMaximumCode:\n 2 **\n regime.adc.bitDepth -\n 1,\n combinedReadNoiseRmsElectrons\n };\n}\n\nfunction validateChargeIdentity(\n charge:\n SensorAccumulatedChargeComposition,\n capacity:\n SensorPhysicalChargeCapacityAssessment,\n readout:\n ResolvedSensorReadoutRegime\n): true {\n if (\n charge.completenessProfileId !==\n capacity\n .completenessProfileId ||\n charge.colorSamplingProfileId !==\n capacity\n .colorSamplingProfileId ||\n charge.channelId !==\n capacity.channelId ||\n charge.site.x !==\n capacity.site.x ||\n charge.site.y !==\n capacity.site.y ||\n charge.bindingId !==\n capacity.bindingId\n ) {\n throw new InvalidScientificInputError(\n \"Physical capacity assessment identity must match the accumulated charge.\"\n );\n }\n // The assessment copies the complete expected stored-electron total exactly from the charge it\n // assessed. So the match must be exact: an assessment made for any other charge is out of date.\n if (\n charge\n .totalExpectedStoredElectronCount !==\n capacity\n .totalExpectedStoredElectronCount\n ) {\n throw new InvalidScientificInputError(\n \"Physical capacity assessment must be computed for the supplied accumulated charge; its total expected stored electrons differ.\"\n );\n }\n if (\n readout\n .colorSamplingProfileId !==\n charge.colorSamplingProfileId ||\n readout.channelId !==\n charge.channelId\n ) {\n throw new InvalidScientificInputError(\n \"Sensor readout profile color/channel identity must match the accumulated charge.\"\n );\n }\n const belowOrAtCapacity =\n capacity\n .totalExpectedStoredElectronCount <=\n capacity\n .physicalChargeCapacityElectrons;\n if (\n capacity\n .expectedChargeCapacityStatus ===\n \"above-capacity\" ||\n !belowOrAtCapacity\n ) {\n throw new InvalidScientificInputError(\n \"Expected stored charge above physical capacity cannot enter linear expected readout; the actual post-saturation stored charge is not defined by the upstream assessment.\"\n );\n }\n if (\n charge.saturationAssessed !==\n false ||\n charge.adcQuantizationApplied !==\n false ||\n charge.rawCodeValueProduced !==\n false\n ) {\n throw new InvalidScientificInputError(\n \"Sensor readout requires the unmodified accumulated-charge result.\"\n );\n }\n return belowOrAtCapacity;\n}\n\nfunction additionalPolicyMap(\n profile:\n SensorChargeSamplingProfile,\n charge:\n SensorAccumulatedChargeComposition\n): ReadonlyMap<\n string,\n SensorAdditionalChargeSamplingPolicy\n> {\n if (\n profile.completenessProfileId !==\n charge.completenessProfileId\n ) {\n throw new InvalidScientificInputError(\n \"Charge sampling profile completenessProfileId must match the accumulated charge.\"\n );\n }\n\n const chargeIds =\n charge.additionalComponents.map(\n (component) =>\n component.componentId\n ).sort();\n const policyIds =\n profile\n .additionalComponentPolicies\n .map(\n (policy) =>\n policy.componentId\n )\n .sort();\n\n if (\n chargeIds.length !==\n policyIds.length ||\n chargeIds.some(\n (id, index) =>\n id !== policyIds[index]\n )\n ) {\n throw new InvalidScientificInputError(\n \"Charge sampling profile must declare exactly one policy for every accumulated additional-charge component.\"\n );\n }\n\n return new Map(\n profile.additionalComponentPolicies.map(\n (policy) => [\n policy.componentId,\n policy\n ] as const\n )\n );\n}\n\ntype DeterministicRandom = DeterministicUniformStream;\n\nfunction createRandom(\n seedUint32: number\n): DeterministicRandom {\n return createDeterministicUniformStream(seedUint32);\n}\n\n/**\n * Computes log(n!) without forming the factorial, which would overflow. Small counts\n * sum the logarithms directly. Larger counts use Stirling's formula with the\n * correction terms 1/(12n) - 1/(360n³). This is internal to the Poisson rejection\n * sampler; it is not a claim about physical accuracy or uncertainty.\n */\nfunction logFactorial(\n n: number\n): number {\n if (n < 2) {\n return 0;\n }\n if (n < 256) {\n let sum = 0;\n for (\n let value = 2;\n value <= n;\n value += 1\n ) {\n sum += Math.log(value);\n }\n return sum;\n }\n\n const inverse = 1 / n;\n const inverseCubed =\n inverse * inverse * inverse;\n return (\n (n + 0.5) * Math.log(n) -\n n +\n 0.5 *\n Math.log(\n 2 * Math.PI\n ) +\n inverse / 12 -\n inverseCubed / 360\n );\n}\n\n/** Means at or above this use the continuity-corrected normal approximation. */\nconst POISSON_NORMAL_APPROXIMATION_MINIMUM_MEAN =\n 1e9;\n\n/**\n * Draws a nonnegative integer from a Poisson distribution with the given mean.\n *\n * - Mean 0 returns exactly 0.\n * - Mean below 30: multiply uniform random numbers until the product drops below e^(−mean).\n * - Mean from 30 to below 1e9: Hörmann's (1993) PTRS transformed rejection, comparing log\n * probabilities to avoid overflow.\n * - Mean of 1e9 and above: a continuity-corrected normal approximation, because the log terms lose\n * precision there.\n *\n * The same mean and random stream reproduce the same draw. Increasing the mean does not guarantee\n * that each individual draw increases. Exported internally for the lean native executor, which must\n * draw exactly as simulateSensorChargeRealization does; not exported from the package.\n */\nexport function samplePoisson(\n mean: number,\n random:\n DeterministicRandom\n): number {\n if (\n !Number.isFinite(mean) ||\n mean < 0\n ) {\n throw new InvalidScientificInputError(\n \"Poisson mean must be finite and nonnegative.\"\n );\n }\n if (mean === 0) {\n return 0;\n }\n\n if (\n mean >=\n POISSON_NORMAL_APPROXIMATION_MINIMUM_MEAN\n ) {\n // Above 1e9 the log-probability terms of the rejection test reach about 1e10 and cancel badly\n // (variance/mean is 1.012 at 1e14). Here the continuity-corrected normal approximation has a\n // relative skewness error of 1/sqrt(mean) <= 3.2e-5 (Poisson skewness 1/sqrt(mean): NIST/SEMATECH\n // e-Handbook of Statistical Methods, sec. 1.3.6.6.19, free; normal approximation with continuity\n // correction: SOCR, University of Michigan, free. Also see: Johnson, Kemp & Kotz, Univariate\n // Discrete Distributions, 3rd ed., section 4.4).\n return Math.max(\n 0,\n Math.floor(\n mean +\n Math.sqrt(mean) *\n sampleStandardNormal(\n random\n ) +\n 0.5\n )\n );\n }\n\n if (mean < 30) {\n const threshold =\n Math.exp(-mean);\n let product = 1;\n let count = 0;\n do {\n count += 1;\n product *=\n random.next();\n } while (\n product > threshold\n );\n return count - 1;\n }\n\n const sqrtMean =\n Math.sqrt(mean);\n const b =\n 0.931 +\n 2.53 * sqrtMean;\n const a =\n -0.059 +\n 0.02483 * b;\n const inverseAlpha =\n 1.1239 +\n 1.1328 /\n (b - 3.4);\n const vR =\n 0.9277 -\n 3.6224 /\n (b - 2);\n\n for (;;) {\n const u =\n random.next() - 0.5;\n const v =\n random.next();\n const uS =\n 0.5 - Math.abs(u);\n if (uS <= 0) {\n continue;\n }\n const k =\n Math.floor(\n (2 * a / uS + b) *\n u +\n mean +\n 0.43\n );\n\n if (\n uS >= 0.07 &&\n v <= vR &&\n k >= 0\n ) {\n return k;\n }\n if (\n k < 0 ||\n (\n uS < 0.013 &&\n v > uS\n )\n ) {\n continue;\n }\n\n const lhs =\n Math.log(\n v *\n inverseAlpha /\n (a /\n (uS * uS) +\n b)\n );\n const rhs =\n -mean +\n k * Math.log(mean) -\n logFactorial(k);\n\n if (lhs <= rhs) {\n return k;\n }\n }\n}\n\n/**\n * Internal (not exported from the package): draws `count` Poisson samples of one mean from one seeded\n * stream, exactly as the charge realization does. Used by the sampler's distribution tests.\n */\nexport function samplePoissonStreamForValidation(\n mean: number,\n seedUint32: number,\n count: number\n): number[] {\n const random =\n createRandom(seedUint32);\n return Array.from(\n { length: count },\n () =>\n samplePoisson(\n mean,\n random\n )\n );\n}\n\n/**\n * Internal (not exported from the package): draws `count` standard normal values from one seeded\n * stream, exactly as the read-noise path does. Used by the sampler's distribution tests.\n */\nexport function sampleStandardNormalStreamForValidation(\n seedUint32: number,\n count: number\n): number[] {\n const random =\n createRandom(seedUint32);\n return Array.from(\n { length: count },\n () =>\n sampleStandardNormal(\n random\n )\n );\n}\n\nfunction sampleStandardNormal(\n random:\n DeterministicRandom\n): number {\n return sampleDeterministicStandardNormal(random);\n}\n\n/**\n * Draws deterministic, separately seeded Poisson counts for photo and dark charge, and applies the\n * declared policies for additional components, starting from the expected accumulated charge.\n *\n * This is steps 1–2 of the readout order (see the module notes). Physical storage saturation is\n * reported separately from later clipping.\n * @param input - The input; see `SimulateSensorChargeRealizationInput` for its fields, units and coordinates.\n * @returns The result. Success does not imply calibration.\n *\n * @see docs/API_REFERENCE.md for the package export and its full type definitions.\n */\nexport function simulateSensorChargeRealization(\n input:\n SimulateSensorChargeRealizationInput\n): CalculationResult<SensorChargeRealization> {\n requireInputKeys(input, \"simulateSensorChargeRealization\", [\"accumulatedCharge\", \"samplingProfile\", \"seedUint32\", \"fixedPatternNoise\"]);\n const profile =\n parseSensorChargeSamplingProfile(\n input.samplingProfile\n );\n const seed =\n requireUint32(\n input.seedUint32,\n \"seedUint32\"\n );\n const charge =\n input.accumulatedCharge;\n\n if (\n charge.accumulatedChargeCompleteness !==\n \"complete-for-physical-storage-capacity-assessment\" ||\n charge.saturationAssessed !==\n false ||\n charge.adcQuantizationApplied !==\n false ||\n charge.rawCodeValueProduced !==\n false\n ) {\n throw new InvalidScientificInputError(\n \"Charge realization requires a complete unsaturated pre-readout accumulated-charge result.\"\n );\n }\n\n const policies =\n additionalPolicyMap(\n profile,\n charge\n );\n const pattern =\n input.fixedPatternNoise === undefined\n ? null\n : fixedPatternAtSite(\n parseSensorFixedPatternNoiseProfile(\n input.fixedPatternNoise\n ),\n charge\n .colorSamplingProfileId,\n charge.site\n );\n const photoGain =\n pattern === null\n ? 1\n : pattern\n .photoResponseGainFactor;\n const darkFactor =\n pattern === null\n ? 1\n : pattern.darkCurrentFactor;\n const photoMean =\n pattern === null\n ? charge\n .photoExpectedElectronCount\n : charge\n .photoExpectedElectronCount *\n photoGain;\n const darkMean =\n pattern === null\n ? charge\n .darkExpectedElectronCount\n : charge\n .darkExpectedElectronCount *\n darkFactor;\n const random =\n createRandom(seed);\n const photoRealized =\n samplePoisson(\n photoMean,\n random\n );\n const darkRealized =\n samplePoisson(\n darkMean,\n random\n );\n\n const additionalComponents =\n charge.additionalComponents.map(\n (component) => {\n const policy =\n policies.get(\n component.componentId\n )!;\n const realized =\n policy.model ===\n \"poisson\"\n ? samplePoisson(\n component\n .expectedElectronCount,\n random\n )\n : component\n .expectedElectronCount;\n return {\n componentId:\n component.componentId,\n expectedElectronCount:\n component\n .expectedElectronCount,\n realizedElectronEquivalentCount:\n realized,\n model:\n policy.model\n };\n }\n );\n\n const additionalRealized =\n additionalComponents.reduce(\n (sum, component) =>\n sum +\n component\n .realizedElectronEquivalentCount,\n 0\n );\n const totalRealized =\n photoRealized +\n darkRealized +\n additionalRealized;\n\n if (\n !Number.isFinite(\n totalRealized\n ) ||\n totalRealized < 0\n ) {\n throw new InvalidScientificInputError(\n \"Realized stored charge must remain finite and nonnegative.\"\n );\n }\n\n return approximationResult(\n {\n samplingProfileId:\n profile.profileId,\n completenessProfileId:\n charge\n .completenessProfileId,\n colorSamplingProfileId:\n charge\n .colorSamplingProfileId,\n channelId:\n charge.channelId,\n site: {\n ...charge.site\n },\n bindingId:\n charge.bindingId,\n seedUint32:\n seed,\n photoExpectedElectronCount:\n charge\n .photoExpectedElectronCount,\n photoRealizedElectronCount:\n photoRealized,\n darkExpectedElectronCount:\n charge\n .darkExpectedElectronCount,\n darkRealizedElectronCount:\n darkRealized,\n fixedPatternNoiseProfileId:\n pattern === null\n ? null\n : pattern.profileId,\n photoResponseGainFactor:\n photoGain,\n darkCurrentFactor:\n darkFactor,\n hotPixel:\n pattern?.hotPixel ?? false,\n photoSampledMeanElectronCount:\n photoMean,\n darkSampledMeanElectronCount:\n darkMean,\n additionalComponents,\n totalExpectedStoredElectronCount:\n charge\n .totalExpectedStoredElectronCount,\n totalRealizedStoredElectronEquivalentCount:\n totalRealized,\n photoShotNoiseApplied:\n true,\n darkShotNoiseApplied:\n true,\n electronicReadNoiseApplied:\n false,\n physicalSaturationApplied:\n false,\n bloomingModeled: false,\n conversionGainApplied:\n false,\n adcQuantizationApplied:\n false,\n rawCodeValueProduced:\n false,\n stochasticModel:\n \"independent-poisson-photo-dark-explicit-additional-policy\",\n deterministicSeededRealization:\n true\n },\n \"sensor-charge-stochastic-realization\",\n \"3.0.0\",\n [\n \"An optional explicit fixed-pattern profile multiplies the photo Poisson mean by the site's PRNU gain and the dark Poisson mean by its DSNU/hot-pixel factor; without one the uniform population expectation is sampled. Fixed-pattern values are deterministic per sensor instance and colour-sampling site.\",\n \"Poisson means of 1e9 electrons and above use a continuity-corrected normal approximation.\",\n \"Photo-generated and dark-generated electron counts are sampled independently from Poisson distributions using an explicit deterministic seed.\",\n \"Each additional stored-charge component uses its explicitly declared Poisson or deterministic electron-equivalent policy; Photivra does not infer defect/leakage statistics from the component name.\",\n \"This is a pre-saturation, pre-electronic-read-noise charge realization and remains separate from expectation-value calculations.\",\n \"The seeded PRNG is a deterministic simulation mechanism and is not cryptographically secure; its seed is scrambled by the MurmurHash3 fmix32 finalizer so nearby seeds give unrelated streams.\"\n ]\n );\n}\n\nfunction fixedPatternAtSite(\n profile:\n SensorFixedPatternNoiseProfile,\n colorSamplingProfileId: string,\n site: { x: number; y: number }\n): SensorFixedPatternSiteValues {\n if (\n profile.colorSamplingProfileId !==\n colorSamplingProfileId\n ) {\n throw new InvalidScientificInputError(\n \"Fixed-pattern noise profile colour-sampling identity must match the charge.\"\n );\n }\n return evaluateParsedFixedPatternSite(\n profile,\n site\n );\n}\n\nfunction fixedPatternForRealization(\n value:\n SensorFixedPatternNoiseProfile | undefined,\n charge:\n SensorChargeRealization\n): SensorFixedPatternSiteValues | null {\n if (value === undefined) {\n if (\n charge.fixedPatternNoiseProfileId !==\n null &&\n charge.fixedPatternNoiseProfileId !==\n undefined\n ) {\n throw new InvalidScientificInputError(\n \"A charge realization with a fixed pattern requires the same fixed-pattern profile at readout.\"\n );\n }\n return null;\n }\n const profile =\n parseSensorFixedPatternNoiseProfile(\n value\n );\n if (\n charge.fixedPatternNoiseProfileId !==\n profile.profileId\n ) {\n throw new InvalidScientificInputError(\n \"Readout fixed-pattern profile must be the profile used for the charge realization.\"\n );\n }\n return fixedPatternAtSite(\n profile,\n charge.colorSamplingProfileId,\n charge.site\n );\n}\n\nfunction validateCapacityAgainstRealization(\n charge:\n SensorChargeRealization,\n capacity:\n SensorPhysicalChargeCapacityAssessment,\n readout:\n ResolvedSensorReadoutRegime\n): void {\n if (\n charge.completenessProfileId !==\n capacity\n .completenessProfileId ||\n charge.colorSamplingProfileId !==\n capacity\n .colorSamplingProfileId ||\n charge.channelId !==\n capacity.channelId ||\n charge.site.x !==\n capacity.site.x ||\n charge.site.y !==\n capacity.site.y ||\n charge.bindingId !==\n capacity.bindingId\n ) {\n throw new InvalidScientificInputError(\n \"Physical capacity assessment identity must match the charge realization.\"\n );\n }\n if (\n charge\n .totalExpectedStoredElectronCount !==\n capacity\n .totalExpectedStoredElectronCount\n ) {\n throw new InvalidScientificInputError(\n \"Physical capacity assessment must be computed for the charge behind the realization; its total expected stored electrons differ.\"\n );\n }\n if (\n readout\n .colorSamplingProfileId !==\n charge.colorSamplingProfileId ||\n readout.channelId !==\n charge.channelId\n ) {\n throw new InvalidScientificInputError(\n \"Sensor readout profile color/channel identity must match the charge realization.\"\n );\n }\n}\n\n/**\n * Maps the expected charge through the declared gain, offset and readout limits, with no random\n * sampling. Each kind of clipping (physical storage, pre-ADC, digital) is reported separately.\n * @param input - The input; see `CalculateExpectedSensorReadoutInput` for its fields, units and coordinates.\n * @returns The result. Success does not imply calibration.\n *\n * @see docs/API_REFERENCE.md for the package export and its full type definitions.\n */\nexport function calculateExpectedSensorReadout(\n input:\n CalculateExpectedSensorReadoutInput\n): CalculationResult<SensorExpectedReadoutSignal> {\n requireInputKeys(input, \"calculateExpectedSensorReadout\", [\"accumulatedCharge\", \"physicalCapacityAssessment\", \"readoutProfile\", \"regimeId\"]);\n const readout =\n resolveSensorReadoutRegime({\n profile:\n input.readoutProfile,\n regimeId:\n input.regimeId\n });\n const expectedStoredChargeBelowOrAtPhysicalCapacity =\n validateChargeIdentity(\n input.accumulatedCharge,\n input\n .physicalCapacityAssessment,\n readout\n );\n\n const expected =\n input.accumulatedCharge\n .totalExpectedStoredElectronCount;\n const threshold =\n readout.regime\n .preAdcSaturationElectronEquivalent\n .value;\n const afterPreAdc =\n Math.min(\n expected,\n threshold\n );\n const codeSignal =\n afterPreAdc /\n readout.regime\n .systemConversionGainElectronsPerCode\n .value;\n const inlOffset =\n integralNonLinearityOffset(\n readout.regime.adc\n .integralNonLinearity,\n codeSignal +\n readout.regime\n .adc.blackLevelCode\n );\n const codeBeforeQuantization =\n codeSignal +\n readout.regime\n .adc.blackLevelCode +\n inlOffset;\n const digitalGain =\n readout.regime.adc\n .digitalGain ?? 1;\n const codeAfterDigitalGain =\n readout.regime.adc\n .digitalGain === undefined\n ? codeBeforeQuantization\n : (Math.min(\n codeBeforeQuantization,\n readout.adcMaximumCode\n ) -\n readout.regime.adc\n .blackLevelCode) *\n digitalGain +\n readout.regime.adc\n .blackLevelCode;\n\n return approximationResult(\n {\n readoutProfileId:\n readout.profileId,\n regimeId:\n readout.regime\n .regimeId,\n completenessProfileId:\n input.accumulatedCharge\n .completenessProfileId,\n capacityProfileId:\n input\n .physicalCapacityAssessment\n .capacityProfileId,\n colorSamplingProfileId:\n input.accumulatedCharge\n .colorSamplingProfileId,\n channelId:\n input.accumulatedCharge\n .channelId,\n site: {\n ...input\n .accumulatedCharge\n .site\n },\n bindingId:\n input.accumulatedCharge\n .bindingId,\n expectedStoredElectronCount:\n expected,\n expectedStoredChargeBelowOrAtPhysicalCapacity,\n expectedElectronEquivalentAfterPreAdcSaturation:\n afterPreAdc,\n preAdcSaturationAppliedToExpectation:\n afterPreAdc < expected,\n systemConversionGainElectronsPerCode:\n readout.regime\n .systemConversionGainElectronsPerCode\n .value,\n expectedCodeBeforeBlackOffset:\n codeSignal,\n blackLevelCode:\n readout.regime\n .adc.blackLevelCode,\n expectedCodeBeforeQuantization:\n codeBeforeQuantization,\n adcIntegralNonLinearityOffsetCodes:\n inlOffset,\n digitalGain,\n expectedCodeAfterDigitalGain:\n codeAfterDigitalGain,\n adcBitDepth:\n readout.regime\n .adc.bitDepth,\n adcMaximumCode:\n readout.adcMaximumCode,\n digitalSaturationCode:\n readout.regime\n .adc\n .digitalSaturationCode,\n expectedDigitalSaturation:\n codeAfterDigitalGain >=\n readout.regime\n .adc\n .digitalSaturationCode,\n electronicReadNoiseMeanElectrons:\n 0,\n electronicReadNoiseRmsElectrons:\n readout\n .combinedReadNoiseRmsElectrons,\n electronicReadNoiseSampled:\n false,\n adcQuantizationApplied:\n false,\n rawCodeValueProduced:\n false,\n isoUsedToInferRegime:\n false\n },\n \"sensor-expected-electronic-readout\",\n \"2.0.0\",\n [\n \"Expected readout uses complete expected stored charge only after the upstream physical-capacity assessment confirms the expectation is not above physical capacity.\",\n \"Electronic read-noise mean is zero and is not sampled in this expectation result.\",\n \"The explicitly selected conversion regime is not inferred from ISO, sensor technology family or marketing mode names; an ISO signal chain may bind an exposure index to a declared regime.\",\n \"Declared ADC integral non-linearity and post-ADC digital gain are applied to the continuous expectation without quantization.\",\n \"Pre-ADC electron-equivalent saturation, black offset and ADC/digital saturation remain separate domains.\",\n \"ADC quantization is not applied to the expectation value.\"\n ]\n );\n}\n\n/**\n * Nearest integer, with ties going towards +infinity. Math.round is exact for every double. (In\n * contrast, floor(x + 0.5) returns 1 for 0.49999999999999994, because the addition rounds up.)\n * Adding 0 turns -0 into +0.\n */\nfunction roundHalfUp(\n value: number\n): number {\n return Math.round(value) + 0;\n}\n\nfunction integralNonLinearityOffset(\n inl:\n SensorAdcIntegralNonLinearity | undefined,\n code: number\n): number {\n if (inl === undefined) {\n return 0;\n }\n const knots = inl.knots;\n const first = knots[0]!;\n const last = knots[knots.length - 1]!;\n if (code <= first.code) {\n return first.offsetCodes;\n }\n if (code >= last.code) {\n return last.offsetCodes;\n }\n let low = 0;\n let high = knots.length - 1;\n while (high - low > 1) {\n const middle = (low + high) >> 1;\n if (knots[middle]!.code <= code) {\n low = middle;\n } else {\n high = middle;\n }\n }\n const a = knots[low]!;\n const b = knots[high]!;\n return (\n a.offsetCodes +\n ((code - a.code) /\n (b.code - a.code)) *\n (b.offsetCodes - a.offsetCodes)\n );\n}\n\n/**\n * Shared ADC transfer function: continuous input code (signal/gain + black + INL), rounded half up\n * and limited to the ADC code range, then optional post-ADC digital gain about black, rounded again.\n * The caller applies the final clamp to [0, digitalSaturationCode]. Exported internally for the lean\n * native executor; not exported from the package.\n */\nexport function adcTransfer(\n regime:\n SensorReadoutConversionRegime,\n adcMaximumCode: number,\n electronEquivalent: number\n): {\n codeBeforeQuantization: number;\n inlOffset: number;\n adcCode: number;\n digitalGain: number;\n quantized: number;\n} {\n const ideal =\n electronEquivalent /\n regime\n .systemConversionGainElectronsPerCode\n .value +\n regime.adc.blackLevelCode;\n const inlOffset =\n integralNonLinearityOffset(\n regime.adc.integralNonLinearity,\n ideal\n );\n const codeBeforeQuantization =\n ideal + inlOffset;\n const quantizedAdc =\n roundHalfUp(\n codeBeforeQuantization\n );\n const digitalGain =\n regime.adc.digitalGain ?? 1;\n if (\n regime.adc.digitalGain ===\n undefined\n ) {\n return {\n codeBeforeQuantization,\n inlOffset,\n adcCode:\n quantizedAdc,\n digitalGain,\n quantized:\n quantizedAdc\n };\n }\n const adcCode =\n Math.max(\n 0,\n Math.min(\n quantizedAdc,\n adcMaximumCode\n )\n );\n return {\n codeBeforeQuantization,\n inlOffset,\n adcCode,\n digitalGain,\n quantized:\n roundHalfUp(\n (adcCode -\n regime.adc\n .blackLevelCode) *\n digitalGain +\n regime.adc\n .blackLevelCode\n )\n };\n}\n\n/**\n * Simulates one RAW code from a charge realization with the declared seed and regime: steps 3–7 of\n * the readout order (see the module notes). Signed read noise is kept through the black pedestal and\n * quantization, and only the final code is clamped. Returns the bounded native ADC code and per-step\n * diagnostics.\n * @param input - The input; see `SimulateSensorRawCodeInput` for its fields, units and coordinates.\n * @returns The result. Success does not imply calibration.\n *\n * @see docs/API_REFERENCE.md for the package export and its full type definitions.\n */\nexport function simulateSensorRawCode(\n input:\n SimulateSensorRawCodeInput\n): CalculationResult<SensorRawCodeSample> {\n requireInputKeys(input, \"simulateSensorRawCode\", [\"chargeRealization\", \"physicalCapacityAssessment\", \"readoutProfile\", \"regimeId\", \"readNoiseSeedUint32\", \"fixedPatternNoise\"]);\n const readout =\n resolveSensorReadoutRegime({\n profile:\n input.readoutProfile,\n regimeId:\n input.regimeId\n });\n validateCapacityAgainstRealization(\n input.chargeRealization,\n input\n .physicalCapacityAssessment,\n readout\n );\n const readNoiseSeed =\n requireUint32(\n input.readNoiseSeedUint32,\n \"readNoiseSeedUint32\"\n );\n const random =\n createRandom(\n readNoiseSeed\n );\n\n const realized =\n input.chargeRealization\n .totalRealizedStoredElectronEquivalentCount;\n if (\n !Number.isFinite(realized) ||\n realized < 0\n ) {\n throw new InvalidScientificInputError(\n \"Charge realization total must be finite and nonnegative.\"\n );\n }\n\n const physicalCapacity =\n input\n .physicalCapacityAssessment\n .physicalChargeCapacityElectrons;\n const afterPhysical =\n Math.min(\n realized,\n physicalCapacity\n );\n const physicalSaturation =\n afterPhysical < realized;\n const overflow =\n Math.max(\n 0,\n realized -\n physicalCapacity\n );\n\n const readNoiseComponents =\n readout.regime\n .readNoiseComponents.map(\n (component) => {\n const sampled =\n component\n .rmsElectrons.value ===\n 0\n ? 0\n : sampleStandardNormal(\n random\n ) *\n component\n .rmsElectrons.value;\n return {\n componentId:\n component\n .componentId,\n rmsElectrons:\n component\n .rmsElectrons\n .value,\n sampledElectrons:\n sampled\n };\n }\n );\n const totalReadNoise =\n readNoiseComponents.reduce(\n (sum, component) =>\n sum +\n component\n .sampledElectrons,\n 0\n );\n const pattern =\n fixedPatternForRealization(\n input.fixedPatternNoise,\n input.chargeRealization\n );\n const fixedPatternOffset =\n pattern === null\n ? 0\n : pattern\n .readoutOffsetElectrons;\n\n const afterReadNoise =\n afterPhysical +\n totalReadNoise +\n fixedPatternOffset;\n const preAdcThreshold =\n readout.regime\n .preAdcSaturationElectronEquivalent\n .value;\n // Stored charge is nonnegative, but the electronic signal after it is signed.\n // Keep negative read noise until the black pedestal and the unsigned ADC limit.\n const afterPreAdc =\n Math.min(\n afterReadNoise,\n preAdcThreshold\n );\n const preAdcSaturation =\n afterReadNoise >\n preAdcThreshold;\n\n const transfer =\n adcTransfer(\n readout.regime,\n readout.adcMaximumCode,\n afterPreAdc\n );\n const codeBeforeQuantization =\n transfer.codeBeforeQuantization;\n const quantized =\n transfer.quantized;\n const rawCode =\n Math.max(\n 0,\n Math.min(\n quantized,\n readout.regime\n .adc\n .digitalSaturationCode\n )\n );\n\n return approximationResult(\n {\n readoutProfileId:\n readout.profileId,\n regimeId:\n readout.regime\n .regimeId,\n samplingProfileId:\n input.chargeRealization\n .samplingProfileId,\n completenessProfileId:\n input.chargeRealization\n .completenessProfileId,\n capacityProfileId:\n input\n .physicalCapacityAssessment\n .capacityProfileId,\n colorSamplingProfileId:\n input.chargeRealization\n .colorSamplingProfileId,\n channelId:\n input.chargeRealization\n .channelId,\n site: {\n ...input\n .chargeRealization.site\n },\n bindingId:\n input.chargeRealization\n .bindingId,\n chargeSeedUint32:\n input.chargeRealization\n .seedUint32,\n readNoiseSeedUint32:\n readNoiseSeed,\n realizedStoredElectronEquivalentCountBeforePhysicalCapacity:\n realized,\n physicalChargeCapacityElectrons:\n physicalCapacity,\n electronEquivalentAfterPhysicalScalarSaturation:\n afterPhysical,\n physicalScalarSaturationApplied:\n physicalSaturation,\n overflowElectronEquivalentDiagnostic:\n overflow,\n bloomingModeled: false,\n electronicReadNoiseComponents:\n readNoiseComponents,\n totalElectronicReadNoiseElectrons:\n totalReadNoise,\n fixedPatternNoiseProfileId:\n pattern === null\n ? null\n : pattern.profileId,\n fixedPatternReadoutOffsetElectrons:\n fixedPatternOffset,\n electronEquivalentAfterReadNoise:\n afterReadNoise,\n preAdcSaturationElectronEquivalent:\n preAdcThreshold,\n electronEquivalentAfterPreAdcSaturation:\n afterPreAdc,\n preAdcSaturationApplied:\n preAdcSaturation,\n systemConversionGainElectronsPerCode:\n readout.regime\n .systemConversionGainElectronsPerCode\n .value,\n blackLevelCode:\n readout.regime\n .adc.blackLevelCode,\n codeBeforeQuantization,\n adcIntegralNonLinearityOffsetCodes:\n transfer.inlOffset,\n adcCodeBeforeDigitalGain:\n transfer.adcCode,\n digitalGain:\n transfer.digitalGain,\n quantizedCodeBeforeDigitalClamp:\n quantized,\n adcBitDepth:\n readout.regime\n .adc.bitDepth,\n adcMaximumCode:\n readout.adcMaximumCode,\n digitalSaturationCode:\n readout.regime\n .adc\n .digitalSaturationCode,\n rawCode,\n digitalSaturationApplied:\n quantized >=\n readout.regime\n .adc\n .digitalSaturationCode,\n lowerCodeClampApplied:\n quantized < 0,\n adcTransfer:\n \"uniform-round-half-up\",\n physicalSaturationApplied:\n physicalSaturation,\n electronicReadNoiseApplied:\n readNoiseComponents\n .some(\n (component) =>\n component\n .rmsElectrons >\n 0\n ),\n conversionGainApplied:\n true,\n adcQuantizationApplied:\n true,\n rawCodeValueProduced:\n true,\n isoUsedToInferRegime:\n false,\n deterministicSeededRealization:\n true\n },\n \"sensor-raw-code-stochastic-readout\",\n \"4.0.0\",\n [\n \"A stochastic stored-charge realization is scalar-clamped at the explicit physical storage capacity; this is a bounded saturation approximation and does not model blooming, neighbor transport or anti-blooming behavior.\",\n \"Independent input-referred Gaussian electronic read-noise components, plus any declared static fixed-pattern row/column offsets, are added after physical charge saturation and before the explicit pre-ADC electron-equivalent saturation threshold.\",\n \"System conversion gain is expressed in electrons per digital-number code unit for the explicitly selected regime; an ISO-dependent gain exists only where an explicit ISO signal chain binds the setting to a declared regime.\",\n \"Signed electronic read noise survives the upper-only pre-ADC saturation threshold. Black level and any declared ADC integral non-linearity are added before uniform round-half-up quantization (exact ties toward +infinity); an optional post-ADC digital gain about black is re-quantized; codes are then clamped to zero/digital saturation and valid below-black codes are retained.\",\n \"Physical storage capacity, pre-ADC saturation and digital/ADC saturation remain separate thresholds.\",\n \"The charge seed and read-noise seed are separate deterministic simulation identities; neither is cryptographically secure.\"\n ]\n );\n}\n"]}
|
|
@@ -1,16 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* CFA phase is absolute and
|
|
7
|
-
* does not infer
|
|
8
|
-
* algorithm.
|
|
9
|
-
*
|
|
10
|
-
* reconstruction. Reconstruction consumes explicitly bound native post-ADC samples and declared
|
|
11
|
-
* normalized channel kernels. Native CFA phase is absolute and orientation/crop remain downstream.
|
|
12
|
-
* This structural linear reconstruction does not infer spectral sensor primaries, calibrated color or
|
|
13
|
-
* a complete arbitrary demosaic algorithm.
|
|
2
|
+
* RAW reconstruction (demosaicing): estimates every colour channel at each pixel from the RAW samples
|
|
3
|
+
* of nearby CFA (colour filter array) sites, using declared linear kernels.
|
|
4
|
+
*
|
|
5
|
+
* It uses native RAW samples (after the ADC) that are explicitly bound to their sites, and declared
|
|
6
|
+
* normalized kernels for each channel. The CFA phase is absolute; orientation and crop are applied
|
|
7
|
+
* later. This is a fixed linear reconstruction. It does not infer the sensor's spectral primaries or
|
|
8
|
+
* calibrated colour, and is not a general demosaic algorithm. Built-in bilinear Bayer kernels are
|
|
9
|
+
* provided.
|
|
14
10
|
* @see docs/MOTION_AND_SIGNAL.md for equations, coordinate/unit conventions, blockers and support
|
|
15
11
|
* limits.
|
|
16
12
|
*/
|
|
@@ -18,13 +14,18 @@ import { type CalculationResult } from "../core/calculation-result.js";
|
|
|
18
14
|
import { type EvidenceProvenance } from "../core/evidence-provenance.js";
|
|
19
15
|
import type { ResolvedCaptureModeColorSamplingContributors } from "./capture-color-sampling-binding.js";
|
|
20
16
|
import { type SensorColorSamplingProfile } from "./color-sampling.js";
|
|
21
|
-
import type { SensorRawCodeSample } from "./raw-readout.js";
|
|
17
|
+
import type { SensorAdcIntegralNonLinearity, SensorRawCodeSample } from "./raw-readout.js";
|
|
22
18
|
import type { SensorSpectralResponseScientificStatus } from "./spectral-response.js";
|
|
23
19
|
export declare const SENSOR_RAW_CAPTURE_SAMPLE_VERSION: "0.1.0";
|
|
24
20
|
export declare const SENSOR_RAW_RECONSTRUCTION_PROFILE_SCHEMA_VERSION: "0.1.0";
|
|
25
21
|
export interface CreateSensorRawCaptureSampleInput {
|
|
26
22
|
rawCode: SensorRawCodeSample;
|
|
27
23
|
contributors: ResolvedCaptureModeColorSamplingContributors;
|
|
24
|
+
/**
|
|
25
|
+
* The selected readout regime's declared ADC integral non-linearity (INL), if any. The code sample
|
|
26
|
+
* records INL only at its own code, but the effective white level needs it at saturation.
|
|
27
|
+
*/
|
|
28
|
+
adcIntegralNonLinearity?: SensorAdcIntegralNonLinearity;
|
|
28
29
|
}
|
|
29
30
|
export interface SensorRawCaptureSample {
|
|
30
31
|
version: typeof SENSOR_RAW_CAPTURE_SAMPLE_VERSION;
|
|
@@ -44,6 +45,12 @@ export interface SensorRawCaptureSample {
|
|
|
44
45
|
blackLevelCode: number;
|
|
45
46
|
digitalSaturationCode: number;
|
|
46
47
|
blackSubtractedNormalizedCode: number;
|
|
48
|
+
/** Full-saturation code from `calculateEffectiveSaturationCode`; constant per CFA phase. */
|
|
49
|
+
effectiveSaturationCode: number;
|
|
50
|
+
/** Regime system conversion gain, e⁻ per code (DNG NoiseProfile input). */
|
|
51
|
+
systemConversionGainElectronsPerCode: number;
|
|
52
|
+
/** Total read noise in e⁻: the square root of the sum of the squared RMS components (DNG NoiseProfile input). */
|
|
53
|
+
readNoiseRmsElectrons: number;
|
|
47
54
|
readoutProfileId: string;
|
|
48
55
|
readoutRegimeId: string;
|
|
49
56
|
sourceChargeSeedUint32: number;
|
|
@@ -126,50 +133,111 @@ export interface SensorRawReconstructedPixel {
|
|
|
126
133
|
reconstructionDoesNotModifyRawSamples: true;
|
|
127
134
|
}
|
|
128
135
|
/**
|
|
129
|
-
*
|
|
130
|
-
* missing required fields and
|
|
136
|
+
* Validates untrusted input and returns it as a normalized, typed value. Unknown enum values,
|
|
137
|
+
* missing required fields and inconsistent scientific data are rejected.
|
|
131
138
|
*
|
|
132
|
-
*
|
|
133
|
-
*
|
|
134
|
-
*
|
|
135
|
-
*
|
|
136
|
-
* @param value - unknown. Treated as untrusted data; static typing alone is not validation.
|
|
137
|
-
* @returns SensorRawReconstructionProfile. Return shape and scientific status are explicit; no calibration is inferred from successful execution.
|
|
139
|
+
* The profile declares a normalized linear kernel for each output channel. It does not infer the
|
|
140
|
+
* sensor's spectral primaries or calibrated colour.
|
|
141
|
+
* @param value - Untrusted data. TypeScript types alone are not validation.
|
|
142
|
+
* @returns The result. Success does not imply calibration.
|
|
138
143
|
*
|
|
139
|
-
* @see docs/API_REFERENCE.md for the
|
|
144
|
+
* @see docs/API_REFERENCE.md for the package export and its full type definitions.
|
|
140
145
|
*/
|
|
141
146
|
export declare function parseSensorRawReconstructionProfile(value: unknown): SensorRawReconstructionProfile;
|
|
142
147
|
/**
|
|
143
|
-
*
|
|
144
|
-
* reconstruction.
|
|
145
|
-
*
|
|
146
|
-
*
|
|
147
|
-
* kernels. Native CFA phase is absolute and orientation/crop remain downstream. This structural linear
|
|
148
|
-
* reconstruction does not infer spectral sensor primaries, calibrated color or a complete arbitrary
|
|
149
|
-
* demosaic algorithm.
|
|
150
|
-
* @param input - CreateSensorRawCaptureSampleInput. See the linked contract for coordinate, unit and profile binding semantics.
|
|
151
|
-
* @returns SensorRawCaptureSample. Return shape and scientific status are explicit; no calibration is inferred from successful execution.
|
|
148
|
+
* Commits one validated native RAW sample, with its exact site, channel and exposure event, for use
|
|
149
|
+
* in reconstruction.
|
|
150
|
+
* @param input - The input; see `CreateSensorRawCaptureSampleInput` for its fields, units and coordinates.
|
|
151
|
+
* @returns The result. Success does not imply calibration.
|
|
152
152
|
*
|
|
153
|
-
* @see docs/API_REFERENCE.md for the
|
|
153
|
+
* @see docs/API_REFERENCE.md for the package export and its full type definitions.
|
|
154
154
|
*/
|
|
155
155
|
export declare function createSensorRawCaptureSample(input: CreateSensorRawCaptureSampleInput): SensorRawCaptureSample;
|
|
156
156
|
/**
|
|
157
|
-
*
|
|
158
|
-
*
|
|
157
|
+
* Combines the supplied native samples through explicit normalized kernels, keeping CFA identity
|
|
158
|
+
* and signed black-subtracted values.
|
|
159
159
|
*
|
|
160
|
-
*
|
|
161
|
-
*
|
|
162
|
-
*
|
|
163
|
-
*
|
|
164
|
-
* @param input - ResolveSensorRawReconstructionInput. See the linked contract for coordinate, unit and profile binding semantics.
|
|
165
|
-
* @returns CalculationResult<SensorRawReconstructedPixel>. Return shape and scientific status are explicit; no calibration is inferred from successful execution.
|
|
160
|
+
* The CFA phase is absolute; orientation and crop come later. This fixed linear reconstruction does
|
|
161
|
+
* not infer spectral primaries or calibrated colour, and is not a general demosaic algorithm.
|
|
162
|
+
* @param input - The input; see `ResolveSensorRawReconstructionInput` for its fields, units and coordinates.
|
|
163
|
+
* @returns The result. Success does not imply calibration.
|
|
166
164
|
*
|
|
167
|
-
* @see docs/API_REFERENCE.md for the
|
|
165
|
+
* @see docs/API_REFERENCE.md for the package export and its full type definitions.
|
|
168
166
|
*/
|
|
169
167
|
export declare function resolveSensorRawReconstruction(input: ResolveSensorRawReconstructionInput): CalculationResult<SensorRawReconstructedPixel>;
|
|
170
|
-
/**
|
|
168
|
+
/**
|
|
169
|
+
* Internal: sums one channel's weighted contributions. The reference and packed paths use the same
|
|
170
|
+
* order of operations. With `mirrorBounds`, a contribution site outside the native frame is read from
|
|
171
|
+
* its mirror image (reflect-101, see `reflectRawSiteIndex`). Without it (the default), such a site is
|
|
172
|
+
* rejected.
|
|
173
|
+
*/
|
|
171
174
|
export declare function calculateRawReconstructionChannel(kernel: SensorRawReconstructionChannelKernel, center: {
|
|
172
175
|
x: number;
|
|
173
176
|
y: number;
|
|
174
|
-
}, read: (x: number, y: number, channelId: string) => number
|
|
175
|
-
|
|
177
|
+
}, read: (x: number, y: number, channelId: string) => number, mirrorBounds?: {
|
|
178
|
+
width: number;
|
|
179
|
+
height: number;
|
|
180
|
+
}): SensorRawReconstructedPixel["outputChannels"][number];
|
|
181
|
+
/** How a reconstruction neighbourhood that leaves the native frame is handled. */
|
|
182
|
+
export type RawReconstructionBorderHandling = "reject" | "mirror";
|
|
183
|
+
/**
|
|
184
|
+
* Mirror index ("reflect-101"): −1 → 1, −2 → 2, n → n−2. The edge site itself is not repeated, so
|
|
185
|
+
* for a CFA that repeats every 2 sites (Bayer) each mirrored site has the same channel as the site the
|
|
186
|
+
* repeating pattern would put there. Requires size ≥ 1; for size 1 every index maps to 0.
|
|
187
|
+
*/
|
|
188
|
+
export declare function reflectRawSiteIndex(index: number, size: number): number;
|
|
189
|
+
/**
|
|
190
|
+
* Internal: proves that mirrored (reflect-101) reads at the border return the channel the repeating
|
|
191
|
+
* CFA would put at every virtual site within `reach` of each frame edge, for every row and column
|
|
192
|
+
* phase. Mirroring works per axis, so checking each axis over every phase also covers the corners.
|
|
193
|
+
* Throws otherwise.
|
|
194
|
+
*/
|
|
195
|
+
export declare function validateMirrorBorderCfaConsistency(layout: {
|
|
196
|
+
repeatWidthSites: number;
|
|
197
|
+
repeatHeightSites: number;
|
|
198
|
+
siteChannelIds: readonly string[];
|
|
199
|
+
}, width: number, height: number, reach: number): void;
|
|
200
|
+
/** Internal: largest absolute site offset of any contribution (the neighbourhood reach). */
|
|
201
|
+
export declare function rawReconstructionKernelReach(profiles: readonly {
|
|
202
|
+
profile: SensorRawReconstructionProfile;
|
|
203
|
+
}[]): number;
|
|
204
|
+
export type BuiltInBayerDemosaicKernel = "bilinear";
|
|
205
|
+
export declare const BUILT_IN_BAYER_DEMOSAIC_MODEL_VERSION: "1.0.0";
|
|
206
|
+
export interface CreateBuiltInBayerDemosaicProfilesInput {
|
|
207
|
+
kernel: BuiltInBayerDemosaicKernel;
|
|
208
|
+
/** Capture mode the RAW frame belongs to; copied into every phase profile. */
|
|
209
|
+
captureModeId: string;
|
|
210
|
+
/** Must be a 2×2 periodic Bayer mosaic: one red, one blue and two diagonal green sites. */
|
|
211
|
+
colorSamplingProfile: SensorColorSamplingProfile;
|
|
212
|
+
/** CFA channel IDs for the red, green and blue roles. This is also the output channel order. */
|
|
213
|
+
channelRoles: {
|
|
214
|
+
red: string;
|
|
215
|
+
green: string;
|
|
216
|
+
blue: string;
|
|
217
|
+
};
|
|
218
|
+
}
|
|
219
|
+
export interface BuiltInBayerDemosaicProfiles {
|
|
220
|
+
kernel: BuiltInBayerDemosaicKernel;
|
|
221
|
+
/** One profile per absolute CFA phase, row-major (`phaseY`, then `phaseX`). */
|
|
222
|
+
phaseProfiles: {
|
|
223
|
+
phaseX: number;
|
|
224
|
+
phaseY: number;
|
|
225
|
+
profile: SensorRawReconstructionProfile;
|
|
226
|
+
}[];
|
|
227
|
+
outputChannelIds: [string, string, string];
|
|
228
|
+
/** Largest |offset| of any contribution: 1 for bilinear. */
|
|
229
|
+
kernelReachSites: number;
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* Builds the per-phase linear reconstruction profiles of the built-in bilinear Bayer demosaic kernel.
|
|
233
|
+
*
|
|
234
|
+
* The result is the ordinary `explicit-linear-native-neighborhood` profile used by RAW frame
|
|
235
|
+
* reconstruction, native RAW development and `createCfaPlaneReconstructionTask`; there is no special
|
|
236
|
+
* code path. Edge pixels need either a region whose neighbourhood stays inside the frame, or mirror
|
|
237
|
+
* border handling.
|
|
238
|
+
*
|
|
239
|
+
* Approximation: fixed linear interpolation, not a calibrated or adaptive demosaic. Bilinear blurs
|
|
240
|
+
* and shows "zipper" artefacts at edges. Aliasing and moiré are not modelled. The adaptive AHD method
|
|
241
|
+
* is `createAhdDemosaicTask`.
|
|
242
|
+
*/
|
|
243
|
+
export declare function createBuiltInBayerDemosaicProfiles(input: CreateBuiltInBayerDemosaicProfilesInput): CalculationResult<BuiltInBayerDemosaicProfiles>;
|