@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,24 +1,25 @@
|
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
* delta-like line measures require a different integration path from continuous per-nanometre
|
|
10
|
-
* densities.
|
|
3
|
+
* Combines the wavelength coverage of several spectral inputs (light source, filters, sensor
|
|
4
|
+
* response) before they are multiplied and integrated.
|
|
5
|
+
*
|
|
6
|
+
* Continuous spectra (values per nanometre) and discrete lines (narrow emission lines treated as
|
|
7
|
+
* delta functions) are handled separately, because they integrate differently. This module
|
|
8
|
+
* describes wavelength ranges and interpolation breakpoints only, not spectral values.
|
|
11
9
|
* @see docs/SCENE_RADIANCE_AND_ILLUMINATION.md for equations, coordinate/unit conventions, blockers
|
|
12
10
|
* and support limits.
|
|
13
11
|
*/
|
|
14
12
|
import { InvalidConfigurationError } from "./configuration-error.js";
|
|
15
13
|
import { parseSpectralWavelengthBasis, parseSpectralWavelengthRangeNanometers } from "./spectral.js";
|
|
16
|
-
|
|
14
|
+
import { requireInputKeys, rejectUnknownFields } from "./record-validation.js";
|
|
15
|
+
function requireRecord(value, path, allowedKeys) {
|
|
17
16
|
if (typeof value !== "object" ||
|
|
18
17
|
value === null ||
|
|
19
18
|
Array.isArray(value)) {
|
|
20
19
|
throw new InvalidConfigurationError(path + " must be an object.");
|
|
21
20
|
}
|
|
21
|
+
if (allowedKeys !== null)
|
|
22
|
+
rejectUnknownFields(value, allowedKeys, path);
|
|
22
23
|
return value;
|
|
23
24
|
}
|
|
24
25
|
function requireNonEmptyString(value, path) {
|
|
@@ -86,13 +87,13 @@ function parseBreakpoints(value, range, path) {
|
|
|
86
87
|
});
|
|
87
88
|
}
|
|
88
89
|
/**
|
|
89
|
-
* Parses one continuous spectral
|
|
90
|
+
* Parses the wavelength coverage of one continuous spectral input.
|
|
90
91
|
*
|
|
91
|
-
*
|
|
92
|
-
*
|
|
92
|
+
* It describes only the wavelength range (support) and interpolation breakpoints. It
|
|
93
|
+
* carries no spectral values, transmission, response, radiance or uncertainty.
|
|
93
94
|
*/
|
|
94
95
|
export function parseSpectralCoverageParticipant(value, path = "spectralCoverageParticipant") {
|
|
95
|
-
const record = requireRecord(value, path);
|
|
96
|
+
const record = requireRecord(value, path, ["wavelengthRangeNanometers", "participantId", "role", "wavelengthBasis", "breakpointsNanometers"]);
|
|
96
97
|
const range = parseSpectralWavelengthRangeNanometers(record.wavelengthRangeNanometers, path +
|
|
97
98
|
".wavelengthRangeNanometers");
|
|
98
99
|
return {
|
|
@@ -105,14 +106,15 @@ export function parseSpectralCoverageParticipant(value, path = "spectralCoverage
|
|
|
105
106
|
};
|
|
106
107
|
}
|
|
107
108
|
/**
|
|
108
|
-
*
|
|
109
|
-
*
|
|
109
|
+
* Finds the wavelength range that all continuous inputs share, and collects every
|
|
110
|
+
* interpolation breakpoint inside it.
|
|
110
111
|
*
|
|
111
|
-
* Air
|
|
112
|
-
*
|
|
113
|
-
*
|
|
112
|
+
* Air and vacuum wavelengths are never converted implicitly. Discrete lines are not
|
|
113
|
+
* accepted here: a delta-like line is integrated differently from a continuous
|
|
114
|
+
* per-nanometre density.
|
|
114
115
|
*/
|
|
115
116
|
export function composeSpectralCoverage(input) {
|
|
117
|
+
requireInputKeys(input, "composeSpectralCoverage", ["participants"]);
|
|
116
118
|
if (!Array.isArray(input.participants) ||
|
|
117
119
|
input.participants.length === 0) {
|
|
118
120
|
throw new InvalidConfigurationError("participants must be a non-empty array.");
|
|
@@ -171,13 +173,13 @@ export function composeSpectralCoverage(input) {
|
|
|
171
173
|
}
|
|
172
174
|
const LINE_WEIGHT_TOLERANCE = 1e-9;
|
|
173
175
|
/**
|
|
174
|
-
* Parses a normalized set of
|
|
176
|
+
* Parses a normalized set of discrete spectral lines (each treated as a delta function).
|
|
175
177
|
*
|
|
176
|
-
* Each weight is
|
|
177
|
-
* density sample. The weights must sum to one.
|
|
178
|
+
* Each weight is the fraction of the total carried by that line. It is not a
|
|
179
|
+
* per-nanometre density sample. The weights must sum to one.
|
|
178
180
|
*/
|
|
179
181
|
export function parseNormalizedDiscreteSpectralLineDistribution(value, path = "discreteSpectralLineDistribution") {
|
|
180
|
-
const record = requireRecord(value, path);
|
|
182
|
+
const record = requireRecord(value, path, ["lineModel", "normalization", "lines", "wavelengthBasis"]);
|
|
181
183
|
if (record.lineModel !==
|
|
182
184
|
"delta-like-integrated") {
|
|
183
185
|
throw new InvalidConfigurationError(path +
|
|
@@ -201,7 +203,7 @@ export function parseNormalizedDiscreteSpectralLineDistribution(value, path = "d
|
|
|
201
203
|
const linePath = path + ".lines[" +
|
|
202
204
|
index +
|
|
203
205
|
"]";
|
|
204
|
-
const line = requireRecord(entry, linePath);
|
|
206
|
+
const line = requireRecord(entry, linePath, ["lineId", "wavelengthNanometers", "normalizedIntegratedWeight"]);
|
|
205
207
|
const lineId = requireNonEmptyString(line.lineId, linePath + ".lineId");
|
|
206
208
|
const wavelengthNanometers = requirePositiveFinite(line.wavelengthNanometers, linePath +
|
|
207
209
|
".wavelengthNanometers");
|
|
@@ -255,6 +257,7 @@ function parseQuantityUnit(value, path) {
|
|
|
255
257
|
* line fractions without inventing a continuous line width.
|
|
256
258
|
*/
|
|
257
259
|
export function distributeIntegratedQuantityAcrossDiscreteSpectralLines(input) {
|
|
260
|
+
requireInputKeys(input, "distributeIntegratedQuantityAcrossDiscreteSpectralLines", ["distribution", "totalIntegratedQuantity", "quantityUnit"]);
|
|
258
261
|
const distribution = parseNormalizedDiscreteSpectralLineDistribution(input.distribution, "distribution");
|
|
259
262
|
const totalIntegratedQuantity = requireNonNegativeFinite(input.totalIntegratedQuantity, "totalIntegratedQuantity");
|
|
260
263
|
const quantityUnit = parseQuantityUnit(input.quantityUnit, "quantityUnit");
|
|
@@ -274,11 +277,11 @@ export function distributeIntegratedQuantityAcrossDiscreteSpectralLines(input) {
|
|
|
274
277
|
};
|
|
275
278
|
}
|
|
276
279
|
/**
|
|
277
|
-
* Integrates
|
|
278
|
-
*
|
|
280
|
+
* Integrates over discrete lines by summing their contributions, which are already
|
|
281
|
+
* integrated over wavelength. No dλ (wavelength step) factor is applied.
|
|
279
282
|
*/
|
|
280
283
|
export function integrateDiscreteSpectralLineMeasure(measure) {
|
|
281
|
-
const record = requireRecord(measure, "measure");
|
|
284
|
+
const record = requireRecord(measure, "measure", ["wavelengthBasis", "quantityUnit", "lineModel", "continuousSpectralDensityAssumed", "wavelengthMeasureMultiplicationRequired", "lines"]);
|
|
282
285
|
const wavelengthBasis = parseResolvedBasis(record.wavelengthBasis, "measure.wavelengthBasis");
|
|
283
286
|
const quantityUnit = parseQuantityUnit(record.quantityUnit, "measure.quantityUnit");
|
|
284
287
|
if (record.lineModel !==
|
|
@@ -300,7 +303,7 @@ export function integrateDiscreteSpectralLineMeasure(measure) {
|
|
|
300
303
|
let integratedQuantity = 0;
|
|
301
304
|
for (let index = 0; index < record.lines.length; index += 1) {
|
|
302
305
|
const linePath = "measure.lines[" + index + "]";
|
|
303
|
-
const line = requireRecord(record.lines[index], linePath);
|
|
306
|
+
const line = requireRecord(record.lines[index], linePath, ["lineId", "wavelengthNanometers", "integratedQuantity"]);
|
|
304
307
|
const lineId = requireNonEmptyString(line.lineId, linePath + ".lineId");
|
|
305
308
|
const wavelengthNanometers = requirePositiveFinite(line.wavelengthNanometers, linePath +
|
|
306
309
|
".wavelengthNanometers");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spectral-composition.js","sourceRoot":"","sources":["../../src/core/spectral-composition.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"spectral-composition.js","sourceRoot":"","sources":["../../src/core/spectral-composition.ts"],"names":[],"mappings":"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","sourcesContent":["// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Combines the wavelength coverage of several spectral inputs (light source, filters, sensor\n * response) before they are multiplied and integrated.\n *\n * Continuous spectra (values per nanometre) and discrete lines (narrow emission lines treated as\n * delta functions) are handled separately, because they integrate differently. This module\n * describes wavelength ranges and interpolation breakpoints only, not spectral values.\n * @see docs/SCENE_RADIANCE_AND_ILLUMINATION.md for equations, coordinate/unit conventions, blockers\n * and support limits.\n */\n\nimport { InvalidConfigurationError } from \"./configuration-error.js\";\nimport {\n parseSpectralWavelengthBasis,\n parseSpectralWavelengthRangeNanometers,\n type SpectralWavelengthBasis,\n type SpectralWavelengthRangeNanometers\n} from \"./spectral.js\";\nimport { requireInputKeys, rejectUnknownFields } from \"./record-validation.js\";\n\ntype UnknownRecord = Record<string, unknown>;\n\nexport type ResolvedSpectralWavelengthBasis =\n Exclude<SpectralWavelengthBasis, \"unspecified\">;\n\nexport type SpectralCoverageParticipantRole =\n | \"illumination-source\"\n | \"scene-radiance\"\n | \"material-response\"\n | \"optical-transmission\"\n | \"sensor-response\"\n | \"other\";\n\nexport interface SpectralCoverageParticipant {\n participantId: string;\n role: SpectralCoverageParticipantRole;\n wavelengthBasis:\n ResolvedSpectralWavelengthBasis;\n wavelengthRangeNanometers:\n SpectralWavelengthRangeNanometers;\n /**\n * Internal piecewise-continuous breakpoints. Range endpoints are carried\n * separately and must not be duplicated here.\n */\n breakpointsNanometers:\n readonly number[];\n}\n\nexport interface ComposeSpectralCoverageInput {\n participants:\n readonly SpectralCoverageParticipant[];\n}\n\nexport interface SpectralCoverageComposition {\n wavelengthBasis:\n ResolvedSpectralWavelengthBasis;\n commonWavelengthRangeNanometers:\n SpectralWavelengthRangeNanometers;\n /**\n * Common-range endpoints plus every participant breakpoint that falls\n * strictly inside the common overlap.\n */\n segmentBoundariesNanometers:\n readonly number[];\n participantIds: readonly string[];\n participantRoles:\n readonly SpectralCoverageParticipantRole[];\n continuousCoverageIntersectionEstablished:\n true;\n breakpointUnionEstablished: true;\n responseValuesApplied: false;\n spectralDensityIntegrated: false;\n discreteLinesIncluded: false;\n airVacuumConversionPerformed: false;\n}\n\nexport interface NormalizedDiscreteSpectralLine {\n lineId: string;\n wavelengthNanometers: number;\n normalizedIntegratedWeight: number;\n}\n\nexport interface NormalizedDiscreteSpectralLineDistribution {\n wavelengthBasis:\n ResolvedSpectralWavelengthBasis;\n lineModel: \"delta-like-integrated\";\n normalization:\n \"sum-normalized-integrated-weight-to-one\";\n lines:\n readonly NormalizedDiscreteSpectralLine[];\n}\n\nexport type DiscreteSpectralLineQuantityUnit =\n | \"relative\"\n | \"W/sr\"\n | \"W/m^2\"\n | \"W/m^2/sr\";\n\nexport interface DiscreteSpectralLineMeasureEntry {\n lineId: string;\n wavelengthNanometers: number;\n integratedQuantity: number;\n}\n\nexport interface DiscreteSpectralLineMeasure {\n wavelengthBasis:\n ResolvedSpectralWavelengthBasis;\n quantityUnit:\n DiscreteSpectralLineQuantityUnit;\n lineModel: \"delta-like-integrated\";\n lines:\n readonly DiscreteSpectralLineMeasureEntry[];\n continuousSpectralDensityAssumed: false;\n wavelengthMeasureMultiplicationRequired:\n false;\n}\n\nexport interface IntegratedDiscreteSpectralLineMeasure {\n wavelengthBasis:\n ResolvedSpectralWavelengthBasis;\n quantityUnit:\n DiscreteSpectralLineQuantityUnit;\n integratedQuantity: number;\n lineCount: number;\n continuousQuadratureApplied: false;\n wavelengthMeasureMultiplicationApplied:\n false;\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 requirePositiveFinite(\n value: unknown,\n path: string\n): number {\n if (\n typeof value !== \"number\" ||\n !Number.isFinite(value) ||\n value <= 0\n ) {\n throw new InvalidConfigurationError(\n path +\n \" must be finite and greater than zero.\"\n );\n }\n return value;\n}\n\nfunction requireNonNegativeFinite(\n value: unknown,\n path: string\n): number {\n if (\n typeof value !== \"number\" ||\n !Number.isFinite(value) ||\n value < 0\n ) {\n throw new InvalidConfigurationError(\n path +\n \" must be finite and greater than or equal to zero.\"\n );\n }\n return value;\n}\n\nfunction parseResolvedBasis(\n value: unknown,\n path: string\n): ResolvedSpectralWavelengthBasis {\n const basis =\n parseSpectralWavelengthBasis(\n value,\n path\n );\n if (basis === \"unspecified\") {\n throw new InvalidConfigurationError(\n path +\n \" must be air or vacuum for spectral composition.\"\n );\n }\n return basis;\n}\n\nfunction parseRole(\n value: unknown,\n path: string\n): SpectralCoverageParticipantRole {\n if (\n value !== \"illumination-source\" &&\n value !== \"scene-radiance\" &&\n value !== \"material-response\" &&\n value !== \"optical-transmission\" &&\n value !== \"sensor-response\" &&\n value !== \"other\"\n ) {\n throw new InvalidConfigurationError(\n path + \" is invalid.\"\n );\n }\n return value;\n}\n\nfunction parseBreakpoints(\n value: unknown,\n range:\n SpectralWavelengthRangeNanometers,\n path: string\n): readonly number[] {\n if (!Array.isArray(value)) {\n throw new InvalidConfigurationError(\n path + \" must be an array.\"\n );\n }\n\n let previous =\n Number.NEGATIVE_INFINITY;\n return value.map((entry, index) => {\n const breakpoint =\n requirePositiveFinite(\n entry,\n path + \"[\" + index + \"]\"\n );\n if (\n breakpoint <= range.minimum ||\n breakpoint >= range.maximum\n ) {\n throw new InvalidConfigurationError(\n path +\n \" values must lie strictly inside the participant wavelength range.\"\n );\n }\n if (breakpoint <= previous) {\n throw new InvalidConfigurationError(\n path +\n \" must be strictly increasing with no duplicates.\"\n );\n }\n previous = breakpoint;\n return breakpoint;\n });\n}\n\n/**\n * Parses the wavelength coverage of one continuous spectral input.\n *\n * It describes only the wavelength range (support) and interpolation breakpoints. It\n * carries no spectral values, transmission, response, radiance or uncertainty.\n */\nexport function parseSpectralCoverageParticipant(\n value: unknown,\n path = \"spectralCoverageParticipant\"\n): SpectralCoverageParticipant {\n const record = requireRecord(\n value,\n path, [\"wavelengthRangeNanometers\", \"participantId\", \"role\", \"wavelengthBasis\", \"breakpointsNanometers\"]\n );\n const range =\n parseSpectralWavelengthRangeNanometers(\n record.wavelengthRangeNanometers,\n path +\n \".wavelengthRangeNanometers\"\n );\n return {\n participantId:\n requireNonEmptyString(\n record.participantId,\n path + \".participantId\"\n ),\n role: parseRole(\n record.role,\n path + \".role\"\n ),\n wavelengthBasis:\n parseResolvedBasis(\n record.wavelengthBasis,\n path + \".wavelengthBasis\"\n ),\n wavelengthRangeNanometers:\n range,\n breakpointsNanometers:\n parseBreakpoints(\n record.breakpointsNanometers,\n range,\n path +\n \".breakpointsNanometers\"\n )\n };\n}\n\n/**\n * Finds the wavelength range that all continuous inputs share, and collects every\n * interpolation breakpoint inside it.\n *\n * Air and vacuum wavelengths are never converted implicitly. Discrete lines are not\n * accepted here: a delta-like line is integrated differently from a continuous\n * per-nanometre density.\n */\nexport function composeSpectralCoverage(\n input: ComposeSpectralCoverageInput\n): SpectralCoverageComposition {\n requireInputKeys(input, \"composeSpectralCoverage\", [\"participants\"]);\n if (\n !Array.isArray(input.participants) ||\n input.participants.length === 0\n ) {\n throw new InvalidConfigurationError(\n \"participants must be a non-empty array.\"\n );\n }\n\n const participants =\n input.participants.map(\n (entry, index) =>\n parseSpectralCoverageParticipant(\n entry,\n \"participants[\" +\n index +\n \"]\"\n )\n );\n const participantIds =\n participants.map(\n (entry) => entry.participantId\n );\n if (\n new Set(participantIds).size !==\n participantIds.length\n ) {\n throw new InvalidConfigurationError(\n \"participants[].participantId must not contain duplicates.\"\n );\n }\n\n const wavelengthBasis =\n participants[0]!\n .wavelengthBasis;\n if (\n participants.some(\n (entry) =>\n entry.wavelengthBasis !==\n wavelengthBasis\n )\n ) {\n throw new InvalidConfigurationError(\n \"All spectral-coverage participants must use the same resolved wavelengthBasis; air/vacuum conversion is not implicit.\"\n );\n }\n\n const minimum = Math.max(\n ...participants.map(\n (entry) =>\n entry\n .wavelengthRangeNanometers\n .minimum\n )\n );\n const maximum = Math.min(\n ...participants.map(\n (entry) =>\n entry\n .wavelengthRangeNanometers\n .maximum\n )\n );\n if (!(minimum < maximum)) {\n throw new InvalidConfigurationError(\n \"Spectral-coverage participants do not share a non-empty wavelength interval.\"\n );\n }\n\n const boundaries =\n new Set<number>([\n minimum,\n maximum\n ]);\n for (const participant of participants) {\n for (\n const breakpoint of\n participant.breakpointsNanometers\n ) {\n if (\n breakpoint > minimum &&\n breakpoint < maximum\n ) {\n boundaries.add(breakpoint);\n }\n }\n }\n\n return {\n wavelengthBasis,\n commonWavelengthRangeNanometers: {\n minimum,\n maximum\n },\n segmentBoundariesNanometers:\n [...boundaries].sort(\n (a, b) => a - b\n ),\n participantIds,\n participantRoles:\n participants.map(\n (entry) => entry.role\n ),\n continuousCoverageIntersectionEstablished:\n true,\n breakpointUnionEstablished: true,\n responseValuesApplied: false,\n spectralDensityIntegrated: false,\n discreteLinesIncluded: false,\n airVacuumConversionPerformed: false\n };\n}\n\nconst LINE_WEIGHT_TOLERANCE = 1e-9;\n\n/**\n * Parses a normalized set of discrete spectral lines (each treated as a delta function).\n *\n * Each weight is the fraction of the total carried by that line. It is not a\n * per-nanometre density sample. The weights must sum to one.\n */\nexport function parseNormalizedDiscreteSpectralLineDistribution(\n value: unknown,\n path =\n \"discreteSpectralLineDistribution\"\n): NormalizedDiscreteSpectralLineDistribution {\n const record = requireRecord(\n value,\n path, [\"lineModel\", \"normalization\", \"lines\", \"wavelengthBasis\"]\n );\n if (\n record.lineModel !==\n \"delta-like-integrated\"\n ) {\n throw new InvalidConfigurationError(\n path +\n '.lineModel must be \"delta-like-integrated\".'\n );\n }\n if (\n record.normalization !==\n \"sum-normalized-integrated-weight-to-one\"\n ) {\n throw new InvalidConfigurationError(\n path +\n '.normalization must be \"sum-normalized-integrated-weight-to-one\".'\n );\n }\n if (\n !Array.isArray(record.lines) ||\n record.lines.length === 0\n ) {\n throw new InvalidConfigurationError(\n path +\n \".lines must be a non-empty array.\"\n );\n }\n\n const wavelengthBasis =\n parseResolvedBasis(\n record.wavelengthBasis,\n path + \".wavelengthBasis\"\n );\n let previousWavelength =\n Number.NEGATIVE_INFINITY;\n const lineIds: string[] = [];\n let weightSum = 0;\n\n const lines = record.lines.map(\n (entry, index) => {\n const linePath =\n path + \".lines[\" +\n index +\n \"]\";\n const line = requireRecord(\n entry,\n linePath, [\"lineId\", \"wavelengthNanometers\", \"normalizedIntegratedWeight\"]\n );\n const lineId =\n requireNonEmptyString(\n line.lineId,\n linePath + \".lineId\"\n );\n const wavelengthNanometers =\n requirePositiveFinite(\n line.wavelengthNanometers,\n linePath +\n \".wavelengthNanometers\"\n );\n if (\n wavelengthNanometers <=\n previousWavelength\n ) {\n throw new InvalidConfigurationError(\n path +\n \".lines wavelengths must be strictly increasing with no duplicates.\"\n );\n }\n previousWavelength =\n wavelengthNanometers;\n const normalizedIntegratedWeight =\n requirePositiveFinite(\n line.normalizedIntegratedWeight,\n linePath +\n \".normalizedIntegratedWeight\"\n );\n lineIds.push(lineId);\n weightSum +=\n normalizedIntegratedWeight;\n return {\n lineId,\n wavelengthNanometers,\n normalizedIntegratedWeight\n };\n }\n );\n\n if (\n new Set(lineIds).size !==\n lineIds.length\n ) {\n throw new InvalidConfigurationError(\n path +\n \".lines[].lineId must not contain duplicates.\"\n );\n }\n if (\n !Number.isFinite(weightSum) ||\n Math.abs(weightSum - 1) >\n LINE_WEIGHT_TOLERANCE\n ) {\n throw new InvalidConfigurationError(\n path +\n \".lines normalizedIntegratedWeight values must sum to 1.\"\n );\n }\n\n return {\n wavelengthBasis,\n lineModel:\n \"delta-like-integrated\",\n normalization:\n \"sum-normalized-integrated-weight-to-one\",\n lines\n };\n}\n\nfunction parseQuantityUnit(\n value: unknown,\n path: string\n): DiscreteSpectralLineQuantityUnit {\n if (\n value !== \"relative\" &&\n value !== \"W/sr\" &&\n value !== \"W/m^2\" &&\n value !== \"W/m^2/sr\"\n ) {\n throw new InvalidConfigurationError(\n path + \" is invalid.\"\n );\n }\n return value;\n}\n\nexport interface DistributeIntegratedQuantityAcrossDiscreteLinesInput {\n distribution:\n NormalizedDiscreteSpectralLineDistribution;\n totalIntegratedQuantity: number;\n quantityUnit:\n DiscreteSpectralLineQuantityUnit;\n}\n\n/**\n * Distributes one wavelength-integrated quantity across normalized discrete\n * line fractions without inventing a continuous line width.\n */\nexport function distributeIntegratedQuantityAcrossDiscreteSpectralLines(\n input:\n DistributeIntegratedQuantityAcrossDiscreteLinesInput\n): DiscreteSpectralLineMeasure {\n requireInputKeys(input, \"distributeIntegratedQuantityAcrossDiscreteSpectralLines\", [\"distribution\", \"totalIntegratedQuantity\", \"quantityUnit\"]);\n const distribution =\n parseNormalizedDiscreteSpectralLineDistribution(\n input.distribution,\n \"distribution\"\n );\n const totalIntegratedQuantity =\n requireNonNegativeFinite(\n input.totalIntegratedQuantity,\n \"totalIntegratedQuantity\"\n );\n const quantityUnit =\n parseQuantityUnit(\n input.quantityUnit,\n \"quantityUnit\"\n );\n\n return {\n wavelengthBasis:\n distribution.wavelengthBasis,\n quantityUnit,\n lineModel:\n \"delta-like-integrated\",\n lines:\n distribution.lines.map(\n (line) => ({\n lineId: line.lineId,\n wavelengthNanometers:\n line.wavelengthNanometers,\n integratedQuantity:\n totalIntegratedQuantity *\n line\n .normalizedIntegratedWeight\n })\n ),\n continuousSpectralDensityAssumed:\n false,\n wavelengthMeasureMultiplicationRequired:\n false\n };\n}\n\n/**\n * Integrates over discrete lines by summing their contributions, which are already\n * integrated over wavelength. No dλ (wavelength step) factor is applied.\n */\nexport function integrateDiscreteSpectralLineMeasure(\n measure:\n DiscreteSpectralLineMeasure\n): IntegratedDiscreteSpectralLineMeasure {\n const record = requireRecord(\n measure,\n \"measure\", [\"wavelengthBasis\", \"quantityUnit\", \"lineModel\", \"continuousSpectralDensityAssumed\", \"wavelengthMeasureMultiplicationRequired\", \"lines\"]\n );\n const wavelengthBasis =\n parseResolvedBasis(\n record.wavelengthBasis,\n \"measure.wavelengthBasis\"\n );\n const quantityUnit =\n parseQuantityUnit(\n record.quantityUnit,\n \"measure.quantityUnit\"\n );\n\n if (\n record.lineModel !==\n \"delta-like-integrated\"\n ) {\n throw new InvalidConfigurationError(\n 'measure.lineModel must be \"delta-like-integrated\".'\n );\n }\n if (\n record.continuousSpectralDensityAssumed !==\n false ||\n record.wavelengthMeasureMultiplicationRequired !==\n false\n ) {\n throw new InvalidConfigurationError(\n \"Discrete spectral line measures must not claim continuous-density or d-lambda integration semantics.\"\n );\n }\n if (\n !Array.isArray(record.lines) ||\n record.lines.length === 0\n ) {\n throw new InvalidConfigurationError(\n \"measure.lines must be a non-empty array.\"\n );\n }\n\n let previousWavelength =\n Number.NEGATIVE_INFINITY;\n const lineIds: string[] = [];\n let integratedQuantity = 0;\n\n for (\n let index = 0;\n index < record.lines.length;\n index += 1\n ) {\n const linePath =\n \"measure.lines[\" + index + \"]\";\n const line = requireRecord(\n record.lines[index],\n linePath, [\"lineId\", \"wavelengthNanometers\", \"integratedQuantity\"]\n );\n const lineId =\n requireNonEmptyString(\n line.lineId,\n linePath + \".lineId\"\n );\n const wavelengthNanometers =\n requirePositiveFinite(\n line.wavelengthNanometers,\n linePath +\n \".wavelengthNanometers\"\n );\n if (\n wavelengthNanometers <=\n previousWavelength\n ) {\n throw new InvalidConfigurationError(\n \"measure.lines wavelengths must be strictly increasing with no duplicates.\"\n );\n }\n previousWavelength =\n wavelengthNanometers;\n lineIds.push(lineId);\n\n integratedQuantity +=\n requireNonNegativeFinite(\n line.integratedQuantity,\n linePath +\n \".integratedQuantity\"\n );\n if (\n !Number.isFinite(\n integratedQuantity\n )\n ) {\n throw new InvalidConfigurationError(\n \"Discrete spectral line integrated quantity must remain finite.\"\n );\n }\n }\n\n if (\n new Set(lineIds).size !==\n lineIds.length\n ) {\n throw new InvalidConfigurationError(\n \"measure.lines[].lineId must not contain duplicates.\"\n );\n }\n\n return {\n wavelengthBasis,\n quantityUnit,\n integratedQuantity,\n lineCount: record.lines.length,\n continuousQuadratureApplied: false,\n wavelengthMeasureMultiplicationApplied:\n false\n };\n}\n"]}
|
package/dist/core/spectral.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Whether wavelengths are measured in air or in vacuum.
|
|
3
3
|
*
|
|
4
|
-
* "unspecified" is
|
|
5
|
-
*
|
|
6
|
-
*
|
|
4
|
+
* "unspecified" is allowed only where a downstream contract explicitly accepts
|
|
5
|
+
* unresolved or approximate wavelengths. Calibrated physical calculations must
|
|
6
|
+
* resolve the basis first.
|
|
7
7
|
*/
|
|
8
8
|
export type SpectralWavelengthBasis = "air" | "vacuum" | "unspecified";
|
|
9
9
|
/**
|
|
@@ -20,7 +20,7 @@ export interface SpectralWavelengthRangeNanometers {
|
|
|
20
20
|
maximum: number;
|
|
21
21
|
}
|
|
22
22
|
/**
|
|
23
|
-
* Parses a wavelength basis
|
|
23
|
+
* Parses a wavelength basis. It never converts between air and vacuum.
|
|
24
24
|
*/
|
|
25
25
|
export declare function parseSpectralWavelengthBasis(value: unknown, path?: string): SpectralWavelengthBasis;
|
|
26
26
|
/**
|
|
@@ -31,4 +31,3 @@ export declare function parseSpectralWavelengthSample(value: unknown, path?: str
|
|
|
31
31
|
* Parses a positive non-empty wavelength interval in nanometres.
|
|
32
32
|
*/
|
|
33
33
|
export declare function parseSpectralWavelengthRangeNanometers(value: unknown, path?: string): SpectralWavelengthRangeNanometers;
|
|
34
|
-
//# sourceMappingURL=spectral.d.ts.map
|
package/dist/core/spectral.js
CHANGED
|
@@ -1,17 +1,19 @@
|
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
* Parses one positive wavelength coordinate in nanometres.
|
|
3
|
+
* Wavelength types and parsers: a wavelength basis (air or vacuum), a single wavelength and a
|
|
4
|
+
* wavelength interval, all in nanometres.
|
|
6
5
|
* @see docs/API_STYLE.md for equations, coordinate/unit conventions, blockers and support limits.
|
|
7
6
|
*/
|
|
7
|
+
import { rejectUnknownFields } from "./record-validation.js";
|
|
8
8
|
import { InvalidConfigurationError } from "./configuration-error.js";
|
|
9
|
-
function requireRecord(value, path) {
|
|
9
|
+
function requireRecord(value, path, allowedKeys) {
|
|
10
10
|
if (typeof value !== "object" ||
|
|
11
11
|
value === null ||
|
|
12
12
|
Array.isArray(value)) {
|
|
13
13
|
throw new InvalidConfigurationError(path + " must be an object.");
|
|
14
14
|
}
|
|
15
|
+
if (allowedKeys !== null)
|
|
16
|
+
rejectUnknownFields(value, allowedKeys, path);
|
|
15
17
|
return value;
|
|
16
18
|
}
|
|
17
19
|
function requirePositiveFinite(value, path) {
|
|
@@ -23,7 +25,7 @@ function requirePositiveFinite(value, path) {
|
|
|
23
25
|
return value;
|
|
24
26
|
}
|
|
25
27
|
/**
|
|
26
|
-
* Parses a wavelength basis
|
|
28
|
+
* Parses a wavelength basis. It never converts between air and vacuum.
|
|
27
29
|
*/
|
|
28
30
|
export function parseSpectralWavelengthBasis(value, path = "wavelengthBasis") {
|
|
29
31
|
if (value !== "air" &&
|
|
@@ -37,7 +39,7 @@ export function parseSpectralWavelengthBasis(value, path = "wavelengthBasis") {
|
|
|
37
39
|
* Parses one positive wavelength coordinate in nanometres.
|
|
38
40
|
*/
|
|
39
41
|
export function parseSpectralWavelengthSample(value, path = "spectralSample") {
|
|
40
|
-
const record = requireRecord(value, path);
|
|
42
|
+
const record = requireRecord(value, path, ["wavelengthNanometers"]);
|
|
41
43
|
return {
|
|
42
44
|
wavelengthNanometers: requirePositiveFinite(record.wavelengthNanometers, path + ".wavelengthNanometers")
|
|
43
45
|
};
|
|
@@ -46,7 +48,7 @@ export function parseSpectralWavelengthSample(value, path = "spectralSample") {
|
|
|
46
48
|
* Parses a positive non-empty wavelength interval in nanometres.
|
|
47
49
|
*/
|
|
48
50
|
export function parseSpectralWavelengthRangeNanometers(value, path = "wavelengthRangeNanometers") {
|
|
49
|
-
const record = requireRecord(value, path);
|
|
51
|
+
const record = requireRecord(value, path, ["minimum", "maximum"]);
|
|
50
52
|
const minimum = requirePositiveFinite(record.minimum, path + ".minimum");
|
|
51
53
|
const maximum = requirePositiveFinite(record.maximum, path + ".maximum");
|
|
52
54
|
if (!(minimum < maximum)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spectral.js","sourceRoot":"","sources":["../../src/core/spectral.ts"],"names":[],"mappings":"AAAA,sCAAsC;AAEtC
|
|
1
|
+
{"version":3,"file":"spectral.js","sourceRoot":"","sources":["../../src/core/spectral.ts"],"names":[],"mappings":"AAAA,sCAAsC;AAEtC;;;;GAIG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AA+BrE,SAAS,aAAa,CACpB,KAAc,EACd,IAAY,EACZ,WAAqC;IAErC,IACE,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACd,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EACpB,CAAC;QACD,MAAM,IAAI,yBAAyB,CACjC,IAAI,GAAG,qBAAqB,CAC7B,CAAC;IACJ,CAAC;IACD,IAAI,WAAW,KAAK,IAAI;QAAE,mBAAmB,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,CAAC,CAAC;IACxE,OAAO,KAAsB,CAAC;AAChC,CAAC;AAED,SAAS,qBAAqB,CAC5B,KAAc,EACd,IAAY;IAEZ,IACE,OAAO,KAAK,KAAK,QAAQ;QACzB,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;QACvB,KAAK,IAAI,CAAC,EACV,CAAC;QACD,MAAM,IAAI,yBAAyB,CACjC,IAAI,GAAG,wCAAwC,CAChD,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,4BAA4B,CAC1C,KAAc,EACd,IAAI,GAAG,iBAAiB;IAExB,IACE,KAAK,KAAK,KAAK;QACf,KAAK,KAAK,QAAQ;QAClB,KAAK,KAAK,aAAa,EACvB,CAAC;QACD,MAAM,IAAI,yBAAyB,CACjC,IAAI,GAAG,cAAc,CACtB,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,6BAA6B,CAC3C,KAAc,EACd,IAAI,GAAG,gBAAgB;IAEvB,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,sBAAsB,CAAC,CAAC,CAAC;IACpE,OAAO;QACL,oBAAoB,EAClB,qBAAqB,CACnB,MAAM,CAAC,oBAAoB,EAC3B,IAAI,GAAG,uBAAuB,CAC/B;KACJ,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,sCAAsC,CACpD,KAAc,EACd,IAAI,GAAG,2BAA2B;IAElC,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;IAClE,MAAM,OAAO,GAAG,qBAAqB,CACnC,MAAM,CAAC,OAAO,EACd,IAAI,GAAG,UAAU,CAClB,CAAC;IACF,MAAM,OAAO,GAAG,qBAAqB,CACnC,MAAM,CAAC,OAAO,EACd,IAAI,GAAG,UAAU,CAClB,CAAC;IAEF,IAAI,CAAC,CAAC,OAAO,GAAG,OAAO,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,yBAAyB,CACjC,IAAI,GAAG,qCAAqC,CAC7C,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;AAC9B,CAAC","sourcesContent":["// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Wavelength types and parsers: a wavelength basis (air or vacuum), a single wavelength and a\n * wavelength interval, all in nanometres.\n * @see docs/API_STYLE.md for equations, coordinate/unit conventions, blockers and support limits.\n */\n\nimport { rejectUnknownFields } from \"./record-validation.js\";\nimport { InvalidConfigurationError } from \"./configuration-error.js\";\n\ntype UnknownRecord = Record<string, unknown>;\n\n/**\n * Whether wavelengths are measured in air or in vacuum.\n *\n * \"unspecified\" is allowed only where a downstream contract explicitly accepts\n * unresolved or approximate wavelengths. Calibrated physical calculations must\n * resolve the basis first.\n */\nexport type SpectralWavelengthBasis =\n | \"air\"\n | \"vacuum\"\n | \"unspecified\";\n\n/**\n * One wavelength coordinate expressed in nanometres.\n */\nexport interface SpectralWavelengthSample {\n wavelengthNanometers: number;\n}\n\n/**\n * Closed wavelength interval expressed in nanometres.\n */\nexport interface SpectralWavelengthRangeNanometers {\n minimum: number;\n maximum: number;\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 requirePositiveFinite(\n value: unknown,\n path: string\n): number {\n if (\n typeof value !== \"number\" ||\n !Number.isFinite(value) ||\n value <= 0\n ) {\n throw new InvalidConfigurationError(\n path + \" must be finite and greater than zero.\"\n );\n }\n return value;\n}\n\n/**\n * Parses a wavelength basis. It never converts between air and vacuum.\n */\nexport function parseSpectralWavelengthBasis(\n value: unknown,\n path = \"wavelengthBasis\"\n): SpectralWavelengthBasis {\n if (\n value !== \"air\" &&\n value !== \"vacuum\" &&\n value !== \"unspecified\"\n ) {\n throw new InvalidConfigurationError(\n path + \" is invalid.\"\n );\n }\n return value;\n}\n\n/**\n * Parses one positive wavelength coordinate in nanometres.\n */\nexport function parseSpectralWavelengthSample(\n value: unknown,\n path = \"spectralSample\"\n): SpectralWavelengthSample {\n const record = requireRecord(value, path, [\"wavelengthNanometers\"]);\n return {\n wavelengthNanometers:\n requirePositiveFinite(\n record.wavelengthNanometers,\n path + \".wavelengthNanometers\"\n )\n };\n}\n\n/**\n * Parses a positive non-empty wavelength interval in nanometres.\n */\nexport function parseSpectralWavelengthRangeNanometers(\n value: unknown,\n path = \"wavelengthRangeNanometers\"\n): SpectralWavelengthRangeNanometers {\n const record = requireRecord(value, path, [\"minimum\", \"maximum\"]);\n const minimum = requirePositiveFinite(\n record.minimum,\n path + \".minimum\"\n );\n const maximum = requirePositiveFinite(\n record.maximum,\n path + \".maximum\"\n );\n\n if (!(minimum < maximum)) {\n throw new InvalidConfigurationError(\n path + \".minimum must be less than maximum.\"\n );\n }\n\n return { minimum, maximum };\n}\n"]}
|
|
@@ -1,7 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
* Requires a finite number greater than zero.
|
|
4
|
-
* Requires a positive safe integer.
|
|
2
|
+
* Error types for invalid input and non-finite results, plus basic numeric input checks.
|
|
5
3
|
* @see docs/API_STYLE.md for equations, coordinate/unit conventions, blockers and support limits.
|
|
6
4
|
*/
|
|
7
5
|
/**
|
|
@@ -12,8 +10,8 @@ export declare class InvalidScientificInputError extends RangeError {
|
|
|
12
10
|
constructor(message: string);
|
|
13
11
|
}
|
|
14
12
|
/**
|
|
15
|
-
* Error thrown when a
|
|
16
|
-
*
|
|
13
|
+
* Error thrown when a calculation would return a non-finite number (NaN or ±Infinity).
|
|
14
|
+
* Such values cannot be stored in JSON and break downstream consumers.
|
|
17
15
|
*/
|
|
18
16
|
export declare class InvalidScientificResultError extends RangeError {
|
|
19
17
|
readonly code = "INVALID_SCIENTIFIC_RESULT";
|
|
@@ -33,4 +31,3 @@ export declare function requirePositiveFinite(name: string, value: number): void
|
|
|
33
31
|
* @param value Value to validate.
|
|
34
32
|
*/
|
|
35
33
|
export declare function requirePositiveInteger(name: string, value: number): void;
|
|
36
|
-
//# sourceMappingURL=validation.d.ts.map
|
package/dist/core/validation.js
CHANGED
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
4
|
-
* Requires a finite number greater than zero.
|
|
5
|
-
* Requires a positive safe integer.
|
|
3
|
+
* Error types for invalid input and non-finite results, plus basic numeric input checks.
|
|
6
4
|
* @see docs/API_STYLE.md for equations, coordinate/unit conventions, blockers and support limits.
|
|
7
5
|
*/
|
|
8
6
|
/**
|
|
@@ -16,8 +14,8 @@ export class InvalidScientificInputError extends RangeError {
|
|
|
16
14
|
}
|
|
17
15
|
}
|
|
18
16
|
/**
|
|
19
|
-
* Error thrown when a
|
|
20
|
-
*
|
|
17
|
+
* Error thrown when a calculation would return a non-finite number (NaN or ±Infinity).
|
|
18
|
+
* Such values cannot be stored in JSON and break downstream consumers.
|
|
21
19
|
*/
|
|
22
20
|
export class InvalidScientificResultError extends RangeError {
|
|
23
21
|
code = "INVALID_SCIENTIFIC_RESULT";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/core/validation.ts"],"names":[],"mappings":"AAAA,sCAAsC;AAEtC
|
|
1
|
+
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../../src/core/validation.ts"],"names":[],"mappings":"AAAA,sCAAsC;AAEtC;;;GAGG;AAEH;;GAEG;AACH,MAAM,OAAO,2BAA4B,SAAQ,UAAU;IAChD,IAAI,GAAG,0BAA0B,CAAC;IAE3C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,6BAA6B,CAAC;IAC5C,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,OAAO,4BAA6B,SAAQ,UAAU;IACjD,IAAI,GAAG,2BAA2B,CAAC;IAE5C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,8BAA8B,CAAC;IAC7C,CAAC;CACF;AAED;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CAAC,IAAY,EAAE,KAAa;IAC/D,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;QAC1C,MAAM,IAAI,2BAA2B,CACnC,GAAG,IAAI,6CAA6C,CACrD,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,sBAAsB,CAAC,IAAY,EAAE,KAAa;IAChE,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;QAC/C,MAAM,IAAI,2BAA2B,CACnC,GAAG,IAAI,mCAAmC,CAC3C,CAAC;IACJ,CAAC;AACH,CAAC","sourcesContent":["// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Error types for invalid input and non-finite results, plus basic numeric input checks.\n * @see docs/API_STYLE.md for equations, coordinate/unit conventions, blockers and support limits.\n */\n\n/**\n * Error thrown when a public scientific calculation receives invalid input.\n */\nexport class InvalidScientificInputError extends RangeError {\n readonly code = \"INVALID_SCIENTIFIC_INPUT\";\n\n constructor(message: string) {\n super(message);\n this.name = \"InvalidScientificInputError\";\n }\n}\n\n/**\n * Error thrown when a calculation would return a non-finite number (NaN or ±Infinity).\n * Such values cannot be stored in JSON and break downstream consumers.\n */\nexport class InvalidScientificResultError extends RangeError {\n readonly code = \"INVALID_SCIENTIFIC_RESULT\";\n\n constructor(message: string) {\n super(message);\n this.name = \"InvalidScientificResultError\";\n }\n}\n\n/**\n * Requires a finite number greater than zero.\n *\n * @param name Public parameter name.\n * @param value Value to validate.\n */\nexport function requirePositiveFinite(name: string, value: number): void {\n if (!Number.isFinite(value) || value <= 0) {\n throw new InvalidScientificInputError(\n `${name} must be a finite number greater than zero.`\n );\n }\n}\n\n/**\n * Requires a positive safe integer.\n *\n * @param name Public parameter name.\n * @param value Value to validate.\n */\nexport function requirePositiveInteger(name: string, value: number): void {\n if (!Number.isSafeInteger(value) || value <= 0) {\n throw new InvalidScientificInputError(\n `${name} must be a positive safe integer.`\n );\n }\n}\n"]}
|
package/dist/core/version.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Version of the
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
2
|
+
* Version of the engine release. Since 1.0.1 it equals the npm package version.
|
|
3
|
+
*
|
|
4
|
+
* New captures and plans record this version as their creator. Archived records keep the
|
|
5
|
+
* version they were made with. Proof-of-concept (POC), schema and model contracts have their
|
|
6
|
+
* own versions. Release checks confirm it matches package.json and the packed package.
|
|
6
7
|
* @see docs/RELEASE_1_0_1.md
|
|
7
8
|
*/
|
|
8
|
-
export declare const ENGINE_API_VERSION: "
|
|
9
|
-
//# sourceMappingURL=version.d.ts.map
|
|
9
|
+
export declare const ENGINE_API_VERSION: "2.0.0";
|
package/dist/core/version.js
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
|
2
2
|
/**
|
|
3
|
-
* Version of the
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
3
|
+
* Version of the engine release. Since 1.0.1 it equals the npm package version.
|
|
4
|
+
*
|
|
5
|
+
* New captures and plans record this version as their creator. Archived records keep the
|
|
6
|
+
* version they were made with. Proof-of-concept (POC), schema and model contracts have their
|
|
7
|
+
* own versions. Release checks confirm it matches package.json and the packed package.
|
|
7
8
|
* @see docs/RELEASE_1_0_1.md
|
|
8
9
|
*/
|
|
9
|
-
export const ENGINE_API_VERSION = "
|
|
10
|
+
export const ENGINE_API_VERSION = "2.0.0";
|
|
10
11
|
//# sourceMappingURL=version.js.map
|
package/dist/core/version.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/core/version.ts"],"names":[],"mappings":"AAAA,sCAAsC;AAEtC
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/core/version.ts"],"names":[],"mappings":"AAAA,sCAAsC;AAEtC;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,OAAgB,CAAC","sourcesContent":["// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Version of the engine release. Since 1.0.1 it equals the npm package version.\n *\n * New captures and plans record this version as their creator. Archived records keep the\n * version they were made with. Proof-of-concept (POC), schema and model contracts have their\n * own versions. Release checks confirm it matches package.json and the packed package.\n * @see docs/RELEASE_1_0_1.md\n */\nexport const ENGINE_API_VERSION = \"2.0.0\" as const;\n"]}
|
|
@@ -85,8 +85,8 @@ export interface ResolvedGenericEquipmentExposureCapabilities {
|
|
|
85
85
|
settingGrid: ResolvedNumericSettingGrid;
|
|
86
86
|
autoIsoAvailability: GenericCapabilityAvailability;
|
|
87
87
|
/**
|
|
88
|
-
* Optional Auto
|
|
89
|
-
* maximum and the complete standard setting grid.
|
|
88
|
+
* Optional bounds that apply only to Auto ISO. Manual ISO still uses the
|
|
89
|
+
* minimum, the maximum and the complete standard setting grid.
|
|
90
90
|
*/
|
|
91
91
|
autoIsoMinimum?: number;
|
|
92
92
|
autoIsoMaximum?: number;
|
|
@@ -102,24 +102,24 @@ export interface ResolveGenericEquipmentExposureCapabilitiesInput {
|
|
|
102
102
|
/**
|
|
103
103
|
* Parses a generic Photivra body exposure-capability profile.
|
|
104
104
|
*
|
|
105
|
-
* This is capability metadata only. ISO values
|
|
106
|
-
*
|
|
107
|
-
* mechanism or sensor-readout schedule.
|
|
105
|
+
* This is capability metadata only. ISO values say nothing about how noise or
|
|
106
|
+
* gain is implemented. Shutter-duration capability does not imply a
|
|
107
|
+
* particular shutter mechanism or sensor-readout schedule.
|
|
108
108
|
*/
|
|
109
109
|
export declare function parseGenericBodyExposureCapabilityProfile(value: unknown): GenericBodyExposureCapabilityProfile;
|
|
110
110
|
/**
|
|
111
111
|
* Parses a generic Photivra lens exposure-capability profile.
|
|
112
112
|
*
|
|
113
|
-
* "Widest"
|
|
114
|
-
*
|
|
113
|
+
* "Widest" means the smallest available f-number. This avoids the ambiguous
|
|
114
|
+
* phrases "minimum aperture" and "maximum aperture".
|
|
115
115
|
*/
|
|
116
116
|
export declare function parseGenericLensExposureCapabilityProfile(value: unknown): GenericLensExposureCapabilityProfile;
|
|
117
117
|
/**
|
|
118
118
|
* Resolves the exposure-relevant capability subset for one generic body+lens
|
|
119
119
|
* combination at one selected focal length.
|
|
120
120
|
*
|
|
121
|
-
*
|
|
122
|
-
* settings
|
|
121
|
+
* The source profiles are not changed. This resolver does not choose exposure
|
|
122
|
+
* settings. It only provides the range of available settings (the capability
|
|
123
|
+
* envelope) that the exposure-mode resolvers use.
|
|
123
124
|
*/
|
|
124
125
|
export declare function resolveGenericEquipmentExposureCapabilities(input: ResolveGenericEquipmentExposureCapabilitiesInput): ResolvedGenericEquipmentExposureCapabilities;
|
|
125
|
-
//# sourceMappingURL=exposure-capabilities.d.ts.map
|