@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.
Files changed (1078) hide show
  1. package/CHANGELOG.md +393 -6
  2. package/CITATION.cff +1 -1
  3. package/NODE_SUPPORT.md +64 -12
  4. package/README.md +301 -182
  5. package/SECURITY.md +37 -28
  6. package/THIRD_PARTY.md +148 -4
  7. package/dist/camera/equivalent-focal-length.d.ts +13 -14
  8. package/dist/camera/equivalent-focal-length.js +15 -13
  9. package/dist/camera/equivalent-focal-length.js.map +1 -1
  10. package/dist/camera/field-of-view.d.ts +30 -19
  11. package/dist/camera/field-of-view.js +67 -18
  12. package/dist/camera/field-of-view.js.map +1 -1
  13. package/dist/camera/lens-projection.d.ts +170 -0
  14. package/dist/camera/lens-projection.js +444 -0
  15. package/dist/camera/lens-projection.js.map +1 -0
  16. package/dist/camera/projected-object-size.d.ts +10 -11
  17. package/dist/camera/projected-object-size.js +12 -10
  18. package/dist/camera/projected-object-size.js.map +1 -1
  19. package/dist/capture/capture-export-metadata.d.ts +9 -10
  20. package/dist/capture/capture-export-metadata.js +8 -5
  21. package/dist/capture/capture-export-metadata.js.map +1 -1
  22. package/dist/capture/dng-import.d.ts +91 -0
  23. package/dist/capture/dng-import.js +343 -0
  24. package/dist/capture/dng-import.js.map +1 -0
  25. package/dist/capture/environment-raw-producer.d.ts +37 -17
  26. package/dist/capture/environment-raw-producer.js +43 -19
  27. package/dist/capture/environment-raw-producer.js.map +1 -1
  28. package/dist/capture/export-jpeg.d.ts +35 -4
  29. package/dist/capture/export-jpeg.js +133 -47
  30. package/dist/capture/export-jpeg.js.map +1 -1
  31. package/dist/capture/export-tiff.d.ts +48 -24
  32. package/dist/capture/export-tiff.js +91 -31
  33. package/dist/capture/export-tiff.js.map +1 -1
  34. package/dist/capture/focus-control.d.ts +42 -65
  35. package/dist/capture/focus-control.js +56 -75
  36. package/dist/capture/focus-control.js.map +1 -1
  37. package/dist/capture/host-yield-cadence.d.ts +25 -0
  38. package/dist/capture/host-yield-cadence.js +25 -0
  39. package/dist/capture/host-yield-cadence.js.map +1 -0
  40. package/dist/capture/linear-encoding.d.ts +14 -12
  41. package/dist/capture/linear-encoding.js +14 -13
  42. package/dist/capture/linear-encoding.js.map +1 -1
  43. package/dist/capture/lossless-jpeg.d.ts +27 -0
  44. package/dist/capture/lossless-jpeg.js +237 -0
  45. package/dist/capture/lossless-jpeg.js.map +1 -0
  46. package/dist/capture/native-environment-lean.d.ts +227 -0
  47. package/dist/capture/native-environment-lean.js +974 -0
  48. package/dist/capture/native-environment-lean.js.map +1 -0
  49. package/dist/capture/native-environment-optical-stage.d.ts +97 -0
  50. package/dist/capture/native-environment-optical-stage.js +340 -0
  51. package/dist/capture/native-environment-optical-stage.js.map +1 -0
  52. package/dist/capture/native-environment-raw.d.ts +140 -6
  53. package/dist/capture/native-environment-raw.js +435 -34
  54. package/dist/capture/native-environment-raw.js.map +1 -1
  55. package/dist/capture/native-raw-development.d.ts +116 -9
  56. package/dist/capture/native-raw-development.js +221 -62
  57. package/dist/capture/native-raw-development.js.map +1 -1
  58. package/dist/capture/native-raw-dng.d.ts +60 -0
  59. package/dist/capture/native-raw-dng.js +167 -0
  60. package/dist/capture/native-raw-dng.js.map +1 -0
  61. package/dist/capture/native-raw.d.ts +65 -12
  62. package/dist/capture/native-raw.js +81 -19
  63. package/dist/capture/native-raw.js.map +1 -1
  64. package/dist/capture/packed-sensor-raw.d.ts +160 -0
  65. package/dist/capture/packed-sensor-raw.js +221 -0
  66. package/dist/capture/packed-sensor-raw.js.map +1 -0
  67. package/dist/capture/photographic-export.d.ts +58 -35
  68. package/dist/capture/photographic-export.js +177 -70
  69. package/dist/capture/photographic-export.js.map +1 -1
  70. package/dist/capture/raw-development-kernel.d.ts +52 -0
  71. package/dist/capture/raw-development-kernel.js +88 -0
  72. package/dist/capture/raw-development-kernel.js.map +1 -0
  73. package/dist/capture/raw-frame-limits.d.ts +7 -7
  74. package/dist/capture/raw-frame-limits.js +7 -6
  75. package/dist/capture/raw-frame-limits.js.map +1 -1
  76. package/dist/capture/raw-frame-reconstruction.d.ts +8 -9
  77. package/dist/capture/raw-frame-reconstruction.js +9 -8
  78. package/dist/capture/raw-frame-reconstruction.js.map +1 -1
  79. package/dist/capture/raw-white-level.d.ts +55 -0
  80. package/dist/capture/raw-white-level.js +165 -0
  81. package/dist/capture/raw-white-level.js.map +1 -0
  82. package/dist/capture/release-sequence.d.ts +5 -7
  83. package/dist/capture/release-sequence.js +15 -13
  84. package/dist/capture/release-sequence.js.map +1 -1
  85. package/dist/capture/sensor-raw-frame.d.ts +5 -6
  86. package/dist/capture/sensor-raw-frame.js +26 -9
  87. package/dist/capture/sensor-raw-frame.js.map +1 -1
  88. package/dist/capture/sensor-raw-producer.d.ts +21 -13
  89. package/dist/capture/sensor-raw-producer.js +86 -25
  90. package/dist/capture/sensor-raw-producer.js.map +1 -1
  91. package/dist/capture/simulated-capture.d.ts +15 -16
  92. package/dist/capture/simulated-capture.js +22 -12
  93. package/dist/capture/simulated-capture.js.map +1 -1
  94. package/dist/color/camera-color-matrix.d.ts +69 -0
  95. package/dist/color/camera-color-matrix.js +132 -0
  96. package/dist/color/camera-color-matrix.js.map +1 -0
  97. package/dist/color/capture-color.d.ts +17 -10
  98. package/dist/color/capture-color.js +50 -17
  99. package/dist/color/capture-color.js.map +1 -1
  100. package/dist/color/chromatic-adaptation.d.ts +63 -0
  101. package/dist/color/chromatic-adaptation.js +91 -0
  102. package/dist/color/chromatic-adaptation.js.map +1 -0
  103. package/dist/color/color-difference.d.ts +104 -0
  104. package/dist/color/color-difference.js +205 -0
  105. package/dist/color/color-difference.js.map +1 -0
  106. package/dist/color/color-matching-functions.d.ts +168 -0
  107. package/dist/color/color-matching-functions.js +309 -0
  108. package/dist/color/color-matching-functions.js.map +1 -0
  109. package/dist/color/colorimetry-math.d.ts +52 -0
  110. package/dist/color/colorimetry-math.js +144 -0
  111. package/dist/color/colorimetry-math.js.map +1 -0
  112. package/dist/color/gamut-mapping.d.ts +54 -0
  113. package/dist/color/gamut-mapping.js +107 -0
  114. package/dist/color/gamut-mapping.js.map +1 -0
  115. package/dist/color/illuminants.d.ts +182 -0
  116. package/dist/color/illuminants.js +434 -0
  117. package/dist/color/illuminants.js.map +1 -0
  118. package/dist/color/rgb-color-spaces.d.ts +79 -0
  119. package/dist/color/rgb-color-spaces.js +115 -0
  120. package/dist/color/rgb-color-spaces.js.map +1 -0
  121. package/dist/color/sensor-color-development.d.ts +33 -11
  122. package/dist/color/sensor-color-development.js +104 -30
  123. package/dist/color/sensor-color-development.js.map +1 -1
  124. package/dist/color/srgb-icc.d.ts +9 -2
  125. package/dist/color/srgb-icc.js +16 -5
  126. package/dist/color/srgb-icc.js.map +1 -1
  127. package/dist/color/srgb-transfer.d.ts +1 -2
  128. package/dist/color/srgb-transfer.js +1 -1
  129. package/dist/color/srgb-transfer.js.map +1 -1
  130. package/dist/color/white-balance.d.ts +68 -19
  131. package/dist/color/white-balance.js +168 -35
  132. package/dist/color/white-balance.js.map +1 -1
  133. package/dist/composition/image-formation-plan.d.ts +152 -128
  134. package/dist/composition/image-formation-plan.js +292 -138
  135. package/dist/composition/image-formation-plan.js.map +1 -1
  136. package/dist/composition/plan-consumer.d.ts +6 -7
  137. package/dist/composition/plan-consumer.js +14 -11
  138. package/dist/composition/plan-consumer.js.map +1 -1
  139. package/dist/core/calculation-result.d.ts +21 -14
  140. package/dist/core/calculation-result.js +209 -11
  141. package/dist/core/calculation-result.js.map +1 -1
  142. package/dist/core/canonical-json.d.ts +13 -8
  143. package/dist/core/canonical-json.js +34 -15
  144. package/dist/core/canonical-json.js.map +1 -1
  145. package/dist/core/configuration-error.d.ts +5 -4
  146. package/dist/core/configuration-error.js +5 -3
  147. package/dist/core/configuration-error.js.map +1 -1
  148. package/dist/core/evidence-provenance.d.ts +12 -12
  149. package/dist/core/evidence-provenance.js +10 -9
  150. package/dist/core/evidence-provenance.js.map +1 -1
  151. package/dist/core/image-formation.d.ts +11 -10
  152. package/dist/core/image-formation.js +11 -9
  153. package/dist/core/image-formation.js.map +1 -1
  154. package/dist/core/owned-data.d.ts +9 -17
  155. package/dist/core/owned-data.js +9 -16
  156. package/dist/core/owned-data.js.map +1 -1
  157. package/dist/core/portable-math.d.ts +15 -0
  158. package/dist/core/portable-math.js +56 -0
  159. package/dist/core/portable-math.js.map +1 -0
  160. package/dist/core/record-validation.d.ts +48 -9
  161. package/dist/core/record-validation.js +93 -19
  162. package/dist/core/record-validation.js.map +1 -1
  163. package/dist/core/scientific-assurance.d.ts +16 -14
  164. package/dist/core/scientific-assurance.js +22 -18
  165. package/dist/core/scientific-assurance.js.map +1 -1
  166. package/dist/core/spectral-composition.d.ts +13 -14
  167. package/dist/core/spectral-composition.js +30 -27
  168. package/dist/core/spectral-composition.js.map +1 -1
  169. package/dist/core/spectral.d.ts +5 -6
  170. package/dist/core/spectral.js +9 -7
  171. package/dist/core/spectral.js.map +1 -1
  172. package/dist/core/validation.d.ts +3 -6
  173. package/dist/core/validation.js +3 -5
  174. package/dist/core/validation.js.map +1 -1
  175. package/dist/core/version.d.ts +6 -6
  176. package/dist/core/version.js +6 -5
  177. package/dist/core/version.js.map +1 -1
  178. package/dist/equipment/exposure-capabilities.d.ts +10 -10
  179. package/dist/equipment/exposure-capabilities.js +40 -30
  180. package/dist/equipment/exposure-capabilities.js.map +1 -1
  181. package/dist/equipment/generic-tier-assets.d.ts +13 -6
  182. package/dist/equipment/generic-tier-assets.js +34 -15
  183. package/dist/equipment/generic-tier-assets.js.map +1 -1
  184. package/dist/equipment/generic-tier-presets.d.ts +5 -6
  185. package/dist/equipment/generic-tier-presets.js +15 -13
  186. package/dist/equipment/generic-tier-presets.js.map +1 -1
  187. package/dist/equipment/iso-capabilities.d.ts +21 -22
  188. package/dist/equipment/iso-capabilities.js +49 -44
  189. package/dist/equipment/iso-capabilities.js.map +1 -1
  190. package/dist/equipment/metering-capabilities.d.ts +5 -6
  191. package/dist/equipment/metering-capabilities.js +22 -19
  192. package/dist/equipment/metering-capabilities.js.map +1 -1
  193. package/dist/equipment/release-capabilities.d.ts +3 -4
  194. package/dist/equipment/release-capabilities.js +18 -14
  195. package/dist/equipment/release-capabilities.js.map +1 -1
  196. package/dist/exposure/exposure-duration-control.d.ts +19 -17
  197. package/dist/exposure/exposure-duration-control.js +27 -23
  198. package/dist/exposure/exposure-duration-control.js.map +1 -1
  199. package/dist/exposure/exposure-mode-resolver.d.ts +42 -39
  200. package/dist/exposure/exposure-mode-resolver.js +127 -82
  201. package/dist/exposure/exposure-mode-resolver.js.map +1 -1
  202. package/dist/exposure/exposure.d.ts +17 -16
  203. package/dist/exposure/exposure.js +22 -15
  204. package/dist/exposure/exposure.js.map +1 -1
  205. package/dist/exposure/flash-ttl.d.ts +135 -0
  206. package/dist/exposure/flash-ttl.js +193 -0
  207. package/dist/exposure/flash-ttl.js.map +1 -0
  208. package/dist/exposure/flash.d.ts +144 -36
  209. package/dist/exposure/flash.js +259 -59
  210. package/dist/exposure/flash.js.map +1 -1
  211. package/dist/exposure/metering-scene-radiance.d.ts +10 -10
  212. package/dist/exposure/metering-scene-radiance.js +42 -23
  213. package/dist/exposure/metering-scene-radiance.js.map +1 -1
  214. package/dist/exposure/metering-target.d.ts +8 -8
  215. package/dist/exposure/metering-target.js +30 -20
  216. package/dist/exposure/metering-target.js.map +1 -1
  217. package/dist/exposure/metering-temporal.d.ts +16 -15
  218. package/dist/exposure/metering-temporal.js +41 -19
  219. package/dist/exposure/metering-temporal.js.map +1 -1
  220. package/dist/exposure/metering.d.ts +64 -17
  221. package/dist/exposure/metering.js +159 -30
  222. package/dist/exposure/metering.js.map +1 -1
  223. package/dist/exposure/program-line.d.ts +5 -5
  224. package/dist/exposure/program-line.js +20 -13
  225. package/dist/exposure/program-line.js.map +1 -1
  226. package/dist/facade/camera-preset.d.ts +8 -0
  227. package/dist/facade/camera-preset.js +102 -0
  228. package/dist/facade/camera-preset.js.map +1 -0
  229. package/dist/facade/chart-radiance-batch.d.ts +57 -0
  230. package/dist/facade/chart-radiance-batch.js +121 -0
  231. package/dist/facade/chart-radiance-batch.js.map +1 -0
  232. package/dist/facade/chart-scenes.d.ts +177 -0
  233. package/dist/facade/chart-scenes.js +232 -0
  234. package/dist/facade/chart-scenes.js.map +1 -0
  235. package/dist/facade/host-yield.d.ts +7 -0
  236. package/dist/facade/host-yield.js +23 -0
  237. package/dist/facade/host-yield.js.map +1 -0
  238. package/dist/facade/scene-radiance.d.ts +117 -0
  239. package/dist/facade/scene-radiance.js +205 -0
  240. package/dist/facade/scene-radiance.js.map +1 -0
  241. package/dist/facade/simulate-capture.d.ts +284 -0
  242. package/dist/facade/simulate-capture.js +1026 -0
  243. package/dist/facade/simulate-capture.js.map +1 -0
  244. package/dist/gpu/chart-radiance-gpu.d.ts +17 -0
  245. package/dist/gpu/chart-radiance-gpu.js +176 -0
  246. package/dist/gpu/chart-radiance-gpu.js.map +1 -0
  247. package/dist/gpu/image-kernel-accelerator.d.ts +132 -0
  248. package/dist/gpu/image-kernel-accelerator.js +720 -0
  249. package/dist/gpu/image-kernel-accelerator.js.map +1 -0
  250. package/dist/gpu/image-kernel-execution.d.ts +92 -0
  251. package/dist/gpu/image-kernel-execution.js +84 -0
  252. package/dist/gpu/image-kernel-execution.js.map +1 -0
  253. package/dist/gpu/sensor-stage-gpu.d.ts +44 -0
  254. package/dist/gpu/sensor-stage-gpu.js +317 -0
  255. package/dist/gpu/sensor-stage-gpu.js.map +1 -0
  256. package/dist/gpu/temporal-sum-gpu.d.ts +23 -0
  257. package/dist/gpu/temporal-sum-gpu.js +150 -0
  258. package/dist/gpu/temporal-sum-gpu.js.map +1 -0
  259. package/dist/gpu/webgpu-runtime.d.ts +63 -0
  260. package/dist/gpu/webgpu-runtime.js +215 -0
  261. package/dist/gpu/webgpu-runtime.js.map +1 -0
  262. package/dist/gpu/wgsl-chart-kernel.d.ts +30 -0
  263. package/dist/gpu/wgsl-chart-kernel.js +165 -0
  264. package/dist/gpu/wgsl-chart-kernel.js.map +1 -0
  265. package/dist/gpu/wgsl-kernels.d.ts +53 -0
  266. package/dist/gpu/wgsl-kernels.js +365 -0
  267. package/dist/gpu/wgsl-kernels.js.map +1 -0
  268. package/dist/gpu/wgsl-sensor-kernel.d.ts +64 -0
  269. package/dist/gpu/wgsl-sensor-kernel.js +409 -0
  270. package/dist/gpu/wgsl-sensor-kernel.js.map +1 -0
  271. package/dist/index.d.ts +89 -25
  272. package/dist/index.js +59 -15
  273. package/dist/index.js.map +1 -1
  274. package/dist/motion/camera-rotation.d.ts +92 -40
  275. package/dist/motion/camera-rotation.js +84 -47
  276. package/dist/motion/camera-rotation.js.map +1 -1
  277. package/dist/motion/capture-rotation-inverse-mapping.d.ts +37 -34
  278. package/dist/motion/capture-rotation-inverse-mapping.js +32 -24
  279. package/dist/motion/capture-rotation-inverse-mapping.js.map +1 -1
  280. package/dist/motion/capture-rotation-temporal-quadrature.d.ts +39 -35
  281. package/dist/motion/capture-rotation-temporal-quadrature.js +37 -28
  282. package/dist/motion/capture-rotation-temporal-quadrature.js.map +1 -1
  283. package/dist/motion/capture-rotation-trajectory.d.ts +32 -28
  284. package/dist/motion/capture-rotation-trajectory.js +36 -26
  285. package/dist/motion/capture-rotation-trajectory.js.map +1 -1
  286. package/dist/motion/capture-translation-parallax-temporal-quadrature.d.ts +23 -21
  287. package/dist/motion/capture-translation-parallax-temporal-quadrature.js +33 -14
  288. package/dist/motion/capture-translation-parallax-temporal-quadrature.js.map +1 -1
  289. package/dist/motion/extended-object-projection.d.ts +19 -16
  290. package/dist/motion/extended-object-projection.js +38 -18
  291. package/dist/motion/extended-object-projection.js.map +1 -1
  292. package/dist/motion/projected-motion.d.ts +18 -17
  293. package/dist/motion/projected-motion.js +25 -17
  294. package/dist/motion/projected-motion.js.map +1 -1
  295. package/dist/motion/temporal-exposure-sum.d.ts +55 -0
  296. package/dist/motion/temporal-exposure-sum.js +141 -0
  297. package/dist/motion/temporal-exposure-sum.js.map +1 -0
  298. package/dist/motion/video-sequence.d.ts +111 -0
  299. package/dist/motion/video-sequence.js +179 -0
  300. package/dist/motion/video-sequence.js.map +1 -0
  301. package/dist/optics/aperture.d.ts +14 -15
  302. package/dist/optics/aperture.js +13 -11
  303. package/dist/optics/aperture.js.map +1 -1
  304. package/dist/optics/atmospheric-haze.d.ts +83 -0
  305. package/dist/optics/atmospheric-haze.js +113 -0
  306. package/dist/optics/atmospheric-haze.js.map +1 -0
  307. package/dist/optics/brown-conrady-distortion.d.ts +116 -0
  308. package/dist/optics/brown-conrady-distortion.js +291 -0
  309. package/dist/optics/brown-conrady-distortion.js.map +1 -0
  310. package/dist/optics/circle-of-confusion.d.ts +10 -10
  311. package/dist/optics/circle-of-confusion.js +15 -11
  312. package/dist/optics/circle-of-confusion.js.map +1 -1
  313. package/dist/optics/complex-pupil-psf.d.ts +64 -33
  314. package/dist/optics/complex-pupil-psf.js +190 -98
  315. package/dist/optics/complex-pupil-psf.js.map +1 -1
  316. package/dist/optics/depth-of-field.d.ts +25 -15
  317. package/dist/optics/depth-of-field.js +67 -27
  318. package/dist/optics/depth-of-field.js.map +1 -1
  319. package/dist/optics/diffraction.d.ts +14 -13
  320. package/dist/optics/diffraction.js +14 -10
  321. package/dist/optics/diffraction.js.map +1 -1
  322. package/dist/optics/focus-breathing.d.ts +88 -27
  323. package/dist/optics/focus-breathing.js +114 -23
  324. package/dist/optics/focus-breathing.js.map +1 -1
  325. package/dist/optics/focus-state.d.ts +18 -18
  326. package/dist/optics/focus-state.js +21 -15
  327. package/dist/optics/focus-state.js.map +1 -1
  328. package/dist/optics/front-of-lens-filter.d.ts +45 -14
  329. package/dist/optics/front-of-lens-filter.js +259 -88
  330. package/dist/optics/front-of-lens-filter.js.map +1 -1
  331. package/dist/optics/illumination-vignetting.d.ts +16 -17
  332. package/dist/optics/illumination-vignetting.js +40 -17
  333. package/dist/optics/illumination-vignetting.js.map +1 -1
  334. package/dist/optics/irradiance-convolution.d.ts +59 -0
  335. package/dist/optics/irradiance-convolution.js +138 -0
  336. package/dist/optics/irradiance-convolution.js.map +1 -0
  337. package/dist/optics/lateral-chromatic-aberration.d.ts +33 -30
  338. package/dist/optics/lateral-chromatic-aberration.js +33 -23
  339. package/dist/optics/lateral-chromatic-aberration.js.map +1 -1
  340. package/dist/optics/lens-psf-kernels.d.ts +89 -0
  341. package/dist/optics/lens-psf-kernels.js +175 -0
  342. package/dist/optics/lens-psf-kernels.js.map +1 -0
  343. package/dist/optics/lens-psf-profile.d.ts +78 -46
  344. package/dist/optics/lens-psf-profile.js +335 -124
  345. package/dist/optics/lens-psf-profile.js.map +1 -1
  346. package/dist/optics/longitudinal-chromatic-aberration.d.ts +102 -0
  347. package/dist/optics/longitudinal-chromatic-aberration.js +210 -0
  348. package/dist/optics/longitudinal-chromatic-aberration.js.map +1 -0
  349. package/dist/optics/polygon-diffraction.d.ts +80 -23
  350. package/dist/optics/polygon-diffraction.js +130 -25
  351. package/dist/optics/polygon-diffraction.js.map +1 -1
  352. package/dist/optics/profile-contract.d.ts +5 -6
  353. package/dist/optics/profile-contract.js +14 -11
  354. package/dist/optics/profile-contract.js.map +1 -1
  355. package/dist/optics/psf-foundation.d.ts +23 -23
  356. package/dist/optics/psf-foundation.js +24 -21
  357. package/dist/optics/psf-foundation.js.map +1 -1
  358. package/dist/optics/pupil-vignetting.d.ts +118 -0
  359. package/dist/optics/pupil-vignetting.js +264 -0
  360. package/dist/optics/pupil-vignetting.js.map +1 -0
  361. package/dist/optics/radial-distortion.d.ts +34 -33
  362. package/dist/optics/radial-distortion.js +37 -30
  363. package/dist/optics/radial-distortion.js.map +1 -1
  364. package/dist/optics/scene-to-sensor-irradiance.d.ts +47 -33
  365. package/dist/optics/scene-to-sensor-irradiance.js +73 -45
  366. package/dist/optics/scene-to-sensor-irradiance.js.map +1 -1
  367. package/dist/optics/scene-to-sensor-quadrature.d.ts +23 -18
  368. package/dist/optics/scene-to-sensor-quadrature.js +16 -11
  369. package/dist/optics/scene-to-sensor-quadrature.js.map +1 -1
  370. package/dist/optics/sensor-aperture-rays.d.ts +20 -4
  371. package/dist/optics/sensor-aperture-rays.js +32 -14
  372. package/dist/optics/sensor-aperture-rays.js.map +1 -1
  373. package/dist/optics/sensor-environment-query.d.ts +81 -16
  374. package/dist/optics/sensor-environment-query.js +145 -12
  375. package/dist/optics/sensor-environment-query.js.map +1 -1
  376. package/dist/optics/sensor-psf-quadrature.d.ts +12 -10
  377. package/dist/optics/sensor-psf-quadrature.js +18 -11
  378. package/dist/optics/sensor-psf-quadrature.js.map +1 -1
  379. package/dist/optics/sensor-psf-support.d.ts +8 -6
  380. package/dist/optics/sensor-psf-support.js +8 -5
  381. package/dist/optics/sensor-psf-support.js.map +1 -1
  382. package/dist/optics/stray-light.d.ts +22 -19
  383. package/dist/optics/stray-light.js +18 -12
  384. package/dist/optics/stray-light.js.map +1 -1
  385. package/dist/optics/thin-lens.d.ts +10 -9
  386. package/dist/optics/thin-lens.js +12 -8
  387. package/dist/optics/thin-lens.js.map +1 -1
  388. package/dist/optics/zernike-wavefront.d.ts +154 -0
  389. package/dist/optics/zernike-wavefront.js +352 -0
  390. package/dist/optics/zernike-wavefront.js.map +1 -0
  391. package/dist/output/capture-corrected-sdr.d.ts +16 -8
  392. package/dist/output/capture-corrected-sdr.js +16 -8
  393. package/dist/output/capture-corrected-sdr.js.map +1 -1
  394. package/dist/output/capture-geometry.d.ts +34 -36
  395. package/dist/output/capture-geometry.js +52 -32
  396. package/dist/output/capture-geometry.js.map +1 -1
  397. package/dist/output/capture-sdr.d.ts +7 -6
  398. package/dist/output/capture-sdr.js +11 -8
  399. package/dist/output/capture-sdr.js.map +1 -1
  400. package/dist/output/crop.d.ts +22 -6
  401. package/dist/output/crop.js +40 -6
  402. package/dist/output/crop.js.map +1 -1
  403. package/dist/output/geometric-transforms.d.ts +60 -23
  404. package/dist/output/geometric-transforms.js +111 -24
  405. package/dist/output/geometric-transforms.js.map +1 -1
  406. package/dist/output/lens-corrections.d.ts +27 -19
  407. package/dist/output/lens-corrections.js +29 -13
  408. package/dist/output/lens-corrections.js.map +1 -1
  409. package/dist/output/native-capture-sdr.d.ts +71 -16
  410. package/dist/output/native-capture-sdr.js +190 -33
  411. package/dist/output/native-capture-sdr.js.map +1 -1
  412. package/dist/output/png-encoder.d.ts +65 -0
  413. package/dist/output/png-encoder.js +461 -0
  414. package/dist/output/png-encoder.js.map +1 -0
  415. package/dist/output/print-contrast-reference.d.ts +10 -9
  416. package/dist/output/print-contrast-reference.js +10 -8
  417. package/dist/output/print-contrast-reference.js.map +1 -1
  418. package/dist/output/print-detail.d.ts +18 -17
  419. package/dist/output/print-detail.js +12 -10
  420. package/dist/output/print-detail.js.map +1 -1
  421. package/dist/output/print-jpeg.d.ts +26 -5
  422. package/dist/output/print-jpeg.js +117 -50
  423. package/dist/output/print-jpeg.js.map +1 -1
  424. package/dist/output/print-plan.d.ts +19 -19
  425. package/dist/output/print-plan.js +11 -10
  426. package/dist/output/print-plan.js.map +1 -1
  427. package/dist/output/print-region-statistics.d.ts +14 -15
  428. package/dist/output/print-region-statistics.js +11 -11
  429. package/dist/output/print-region-statistics.js.map +1 -1
  430. package/dist/output/sdr-rendering.d.ts +48 -10
  431. package/dist/output/sdr-rendering.js +114 -25
  432. package/dist/output/sdr-rendering.js.map +1 -1
  433. package/dist/output/subject-framing-crop.d.ts +6 -10
  434. package/dist/output/subject-framing-crop.js +23 -13
  435. package/dist/output/subject-framing-crop.js.map +1 -1
  436. package/dist/processing/demosaic.d.ts +90 -0
  437. package/dist/processing/demosaic.js +275 -0
  438. package/dist/processing/demosaic.js.map +1 -0
  439. package/dist/processing/denoise.d.ts +68 -0
  440. package/dist/processing/denoise.js +214 -0
  441. package/dist/processing/denoise.js.map +1 -0
  442. package/dist/processing/focus-stacking.d.ts +17 -0
  443. package/dist/processing/focus-stacking.js +80 -0
  444. package/dist/processing/focus-stacking.js.map +1 -0
  445. package/dist/processing/hdr.d.ts +54 -0
  446. package/dist/processing/hdr.js +172 -0
  447. package/dist/processing/hdr.js.map +1 -0
  448. package/dist/processing/image-ops.d.ts +66 -0
  449. package/dist/processing/image-ops.js +192 -0
  450. package/dist/processing/image-ops.js.map +1 -0
  451. package/dist/processing/panorama.d.ts +51 -0
  452. package/dist/processing/panorama.js +305 -0
  453. package/dist/processing/panorama.js.map +1 -0
  454. package/dist/processing/processing-task.d.ts +85 -0
  455. package/dist/processing/processing-task.js +164 -0
  456. package/dist/processing/processing-task.js.map +1 -0
  457. package/dist/processing/tone-mapping.d.ts +69 -0
  458. package/dist/processing/tone-mapping.js +310 -0
  459. package/dist/processing/tone-mapping.js.map +1 -0
  460. package/dist/schema/camera.d.ts +5 -4
  461. package/dist/schema/illumination-spectral.d.ts +13 -19
  462. package/dist/schema/illumination-spectral.js +23 -19
  463. package/dist/schema/illumination-spectral.js.map +1 -1
  464. package/dist/schema/illumination-temporal.d.ts +12 -15
  465. package/dist/schema/illumination-temporal.js +43 -28
  466. package/dist/schema/illumination-temporal.js.map +1 -1
  467. package/dist/schema/illumination.d.ts +5 -4
  468. package/dist/schema/illumination.js +55 -20
  469. package/dist/schema/illumination.js.map +1 -1
  470. package/dist/schema/scene-radiance-temporal.d.ts +9 -11
  471. package/dist/schema/scene-radiance-temporal.js +26 -23
  472. package/dist/schema/scene-radiance-temporal.js.map +1 -1
  473. package/dist/schema/scene-radiance.d.ts +17 -17
  474. package/dist/schema/scene-radiance.js +56 -34
  475. package/dist/schema/scene-radiance.js.map +1 -1
  476. package/dist/schema/scene.d.ts +14 -13
  477. package/dist/schema/validation.d.ts +0 -1
  478. package/dist/schema/validation.js +17 -15
  479. package/dist/schema/validation.js.map +1 -1
  480. package/dist/sensor/accumulated-charge.d.ts +45 -64
  481. package/dist/sensor/accumulated-charge.js +41 -47
  482. package/dist/sensor/accumulated-charge.js.map +1 -1
  483. package/dist/sensor/architecture.d.ts +22 -25
  484. package/dist/sensor/architecture.js +17 -16
  485. package/dist/sensor/architecture.js.map +1 -1
  486. package/dist/sensor/camera-saturation-capacity.d.ts +21 -28
  487. package/dist/sensor/camera-saturation-capacity.js +36 -34
  488. package/dist/sensor/camera-saturation-capacity.js.map +1 -1
  489. package/dist/sensor/capture-color-sampling-binding.d.ts +46 -51
  490. package/dist/sensor/capture-color-sampling-binding.js +39 -41
  491. package/dist/sensor/capture-color-sampling-binding.js.map +1 -1
  492. package/dist/sensor/capture-mode-timing.d.ts +8 -9
  493. package/dist/sensor/capture-mode-timing.js +24 -21
  494. package/dist/sensor/capture-mode-timing.js.map +1 -1
  495. package/dist/sensor/capture-mode.d.ts +28 -30
  496. package/dist/sensor/capture-mode.js +33 -31
  497. package/dist/sensor/capture-mode.js.map +1 -1
  498. package/dist/sensor/color-sampling.d.ts +30 -33
  499. package/dist/sensor/color-sampling.js +32 -37
  500. package/dist/sensor/color-sampling.js.map +1 -1
  501. package/dist/sensor/constant-rate-temporal-integration.d.ts +19 -23
  502. package/dist/sensor/constant-rate-temporal-integration.js +28 -26
  503. package/dist/sensor/constant-rate-temporal-integration.js.map +1 -1
  504. package/dist/sensor/dark-current.d.ts +53 -49
  505. package/dist/sensor/dark-current.js +87 -46
  506. package/dist/sensor/dark-current.js.map +1 -1
  507. package/dist/sensor/environment-photo-signal.d.ts +71 -30
  508. package/dist/sensor/environment-photo-signal.js +127 -46
  509. package/dist/sensor/environment-photo-signal.js.map +1 -1
  510. package/dist/sensor/eqe-electron-rate.d.ts +14 -13
  511. package/dist/sensor/eqe-electron-rate.js +34 -14
  512. package/dist/sensor/eqe-electron-rate.js.map +1 -1
  513. package/dist/sensor/eqe-local-exposure.d.ts +24 -24
  514. package/dist/sensor/eqe-local-exposure.js +15 -11
  515. package/dist/sensor/eqe-local-exposure.js.map +1 -1
  516. package/dist/sensor/eqe-temporal-exposure.d.ts +11 -11
  517. package/dist/sensor/eqe-temporal-exposure.js +15 -10
  518. package/dist/sensor/eqe-temporal-exposure.js.map +1 -1
  519. package/dist/sensor/exposure-window.d.ts +48 -34
  520. package/dist/sensor/exposure-window.js +77 -36
  521. package/dist/sensor/exposure-window.js.map +1 -1
  522. package/dist/sensor/fixed-pattern-noise.d.ts +108 -0
  523. package/dist/sensor/fixed-pattern-noise.js +166 -0
  524. package/dist/sensor/fixed-pattern-noise.js.map +1 -0
  525. package/dist/sensor/iso-gain.d.ts +44 -0
  526. package/dist/sensor/iso-gain.js +119 -0
  527. package/dist/sensor/iso-gain.js.map +1 -0
  528. package/dist/sensor/iso-signal-chain.d.ts +25 -48
  529. package/dist/sensor/iso-signal-chain.js +52 -66
  530. package/dist/sensor/iso-signal-chain.js.map +1 -1
  531. package/dist/sensor/local-exposure-binding.d.ts +21 -21
  532. package/dist/sensor/local-exposure-binding.js +22 -18
  533. package/dist/sensor/local-exposure-binding.js.map +1 -1
  534. package/dist/sensor/optical-stack.d.ts +36 -40
  535. package/dist/sensor/optical-stack.js +34 -37
  536. package/dist/sensor/optical-stack.js.map +1 -1
  537. package/dist/sensor/photon-energy.d.ts +22 -28
  538. package/dist/sensor/photon-energy.js +42 -34
  539. package/dist/sensor/photon-energy.js.map +1 -1
  540. package/dist/sensor/physical-charge-capacity.d.ts +20 -30
  541. package/dist/sensor/physical-charge-capacity.js +35 -36
  542. package/dist/sensor/physical-charge-capacity.js.map +1 -1
  543. package/dist/sensor/pixel-pitch.d.ts +2 -3
  544. package/dist/sensor/pixel-pitch.js +4 -2
  545. package/dist/sensor/pixel-pitch.js.map +1 -1
  546. package/dist/sensor/radiometry-readiness.d.ts +13 -15
  547. package/dist/sensor/radiometry-readiness.js +20 -17
  548. package/dist/sensor/radiometry-readiness.js.map +1 -1
  549. package/dist/sensor/raw-readout.d.ts +173 -83
  550. package/dist/sensor/raw-readout.js +425 -160
  551. package/dist/sensor/raw-readout.js.map +1 -1
  552. package/dist/sensor/raw-reconstruction.d.ts +112 -44
  553. package/dist/sensor/raw-reconstruction.js +200 -47
  554. package/dist/sensor/raw-reconstruction.js.map +1 -1
  555. package/dist/sensor/readout-exposure-linkage.d.ts +103 -34
  556. package/dist/sensor/readout-exposure-linkage.js +125 -27
  557. package/dist/sensor/readout-exposure-linkage.js.map +1 -1
  558. package/dist/sensor/readout-timing.d.ts +43 -44
  559. package/dist/sensor/readout-timing.js +38 -30
  560. package/dist/sensor/readout-timing.js.map +1 -1
  561. package/dist/sensor/response-application-compatibility.d.ts +21 -28
  562. package/dist/sensor/response-application-compatibility.js +35 -34
  563. package/dist/sensor/response-application-compatibility.js.map +1 -1
  564. package/dist/sensor/response-operating-range.d.ts +26 -35
  565. package/dist/sensor/response-operating-range.js +40 -39
  566. package/dist/sensor/response-operating-range.js.map +1 -1
  567. package/dist/sensor/responsivity-photocurrent.d.ts +21 -29
  568. package/dist/sensor/responsivity-photocurrent.js +57 -40
  569. package/dist/sensor/responsivity-photocurrent.js.map +1 -1
  570. package/dist/sensor/sampling-aperture.d.ts +21 -25
  571. package/dist/sensor/sampling-aperture.js +29 -28
  572. package/dist/sensor/sampling-aperture.js.map +1 -1
  573. package/dist/sensor/scene-eqe-temporal-exposure.d.ts +14 -12
  574. package/dist/sensor/scene-eqe-temporal-exposure.js +13 -8
  575. package/dist/sensor/scene-eqe-temporal-exposure.js.map +1 -1
  576. package/dist/sensor/sensor-geometry.d.ts +28 -32
  577. package/dist/sensor/sensor-geometry.js +35 -20
  578. package/dist/sensor/sensor-geometry.js.map +1 -1
  579. package/dist/sensor/signal-noise.d.ts +14 -16
  580. package/dist/sensor/signal-noise.js +15 -13
  581. package/dist/sensor/signal-noise.js.map +1 -1
  582. package/dist/sensor/spatial-sample-reduction.d.ts +45 -60
  583. package/dist/sensor/spatial-sample-reduction.js +39 -48
  584. package/dist/sensor/spatial-sample-reduction.js.map +1 -1
  585. package/dist/sensor/spatial-sampling-quadrature.d.ts +46 -54
  586. package/dist/sensor/spatial-sampling-quadrature.js +31 -36
  587. package/dist/sensor/spatial-sampling-quadrature.js.map +1 -1
  588. package/dist/sensor/spatio-spectral-reduction.d.ts +32 -42
  589. package/dist/sensor/spatio-spectral-reduction.js +24 -29
  590. package/dist/sensor/spatio-spectral-reduction.js.map +1 -1
  591. package/dist/sensor/spectral-coverage.d.ts +6 -9
  592. package/dist/sensor/spectral-coverage.js +9 -6
  593. package/dist/sensor/spectral-coverage.js.map +1 -1
  594. package/dist/sensor/spectral-quadrature.d.ts +46 -60
  595. package/dist/sensor/spectral-quadrature.js +38 -48
  596. package/dist/sensor/spectral-quadrature.js.map +1 -1
  597. package/dist/sensor/spectral-response.d.ts +53 -41
  598. package/dist/sensor/spectral-response.js +80 -47
  599. package/dist/sensor/spectral-response.js.map +1 -1
  600. package/dist/sensor/stochastic-seed.d.ts +50 -0
  601. package/dist/sensor/stochastic-seed.js +123 -0
  602. package/dist/sensor/stochastic-seed.js.map +1 -0
  603. package/dist/sensor/temporal-eqe-sum.d.ts +2 -4
  604. package/dist/sensor/temporal-eqe-sum.js +5 -6
  605. package/dist/sensor/temporal-eqe-sum.js.map +1 -1
  606. package/dist/sensor/temporal-photo-signal.d.ts +5 -6
  607. package/dist/sensor/temporal-photo-signal.js +11 -10
  608. package/dist/sensor/temporal-photo-signal.js.map +1 -1
  609. package/dist/sensor/temporal-sample-binding.d.ts +1 -2
  610. package/dist/sensor/temporal-sample-binding.js +3 -3
  611. package/dist/sensor/temporal-sample-binding.js.map +1 -1
  612. package/dist/simulation/poc-simulation.d.ts +16 -16
  613. package/dist/simulation/poc-simulation.js +20 -15
  614. package/dist/simulation/poc-simulation.js.map +1 -1
  615. package/dist/stabilization/camera-shake.d.ts +42 -18
  616. package/dist/stabilization/camera-shake.js +43 -20
  617. package/dist/stabilization/camera-shake.js.map +1 -1
  618. package/dist/stabilization/system.d.ts +44 -41
  619. package/dist/stabilization/system.js +196 -108
  620. package/dist/stabilization/system.js.map +1 -1
  621. package/docs/AGENT_GUIDE.md +183 -0
  622. package/docs/API_REFERENCE.md +761 -2
  623. package/docs/QUICK_START.md +495 -0
  624. package/docs/USAGE.md +1719 -714
  625. package/docs/api/camera-equivalent-focal-length.md +6 -7
  626. package/docs/api/camera-field-of-view.md +16 -8
  627. package/docs/api/camera-lens-projection.md +246 -0
  628. package/docs/api/camera-projected-object-size.md +6 -5
  629. package/docs/api/capture-capture-export-metadata.md +10 -10
  630. package/docs/api/capture-dng-import.md +134 -0
  631. package/docs/api/capture-environment-raw-producer.md +17 -11
  632. package/docs/api/capture-export-jpeg.md +16 -0
  633. package/docs/api/capture-focus-control.md +25 -47
  634. package/docs/api/capture-linear-encoding.md +21 -12
  635. package/docs/api/capture-lossless-jpeg.md +49 -0
  636. package/docs/api/capture-native-environment-optical-stage.md +75 -0
  637. package/docs/api/capture-native-environment-raw.md +161 -4
  638. package/docs/api/capture-native-raw-development.md +69 -8
  639. package/docs/api/capture-native-raw-dng.md +84 -0
  640. package/docs/api/capture-native-raw.md +21 -10
  641. package/docs/api/capture-packed-sensor-raw.md +156 -0
  642. package/docs/api/capture-photographic-export.md +69 -31
  643. package/docs/api/capture-raw-frame-reconstruction.md +8 -8
  644. package/docs/api/capture-raw-white-level.md +37 -0
  645. package/docs/api/capture-release-sequence.md +6 -7
  646. package/docs/api/capture-sensor-raw-frame.md +6 -6
  647. package/docs/api/capture-sensor-raw-producer.md +17 -11
  648. package/docs/api/capture-simulated-capture.md +15 -15
  649. package/docs/api/color-camera-color-matrix.md +103 -0
  650. package/docs/api/color-capture-color.md +22 -11
  651. package/docs/api/color-chromatic-adaptation.md +82 -0
  652. package/docs/api/color-color-difference.md +134 -0
  653. package/docs/api/color-color-matching-functions.md +259 -0
  654. package/docs/api/color-colorimetry-math.md +54 -0
  655. package/docs/api/color-gamut-mapping.md +72 -0
  656. package/docs/api/color-illuminants.md +280 -0
  657. package/docs/api/color-rgb-color-spaces.md +151 -0
  658. package/docs/api/color-sensor-color-development.md +27 -0
  659. package/docs/api/color-srgb-icc.md +2 -4
  660. package/docs/api/color-white-balance.md +95 -19
  661. package/docs/api/composition-image-formation-plan.md +124 -95
  662. package/docs/api/composition-plan-consumer.md +7 -7
  663. package/docs/api/core-calculation-result.md +18 -14
  664. package/docs/api/core-configuration-error.md +1 -1
  665. package/docs/api/core-image-formation.md +7 -7
  666. package/docs/api/core-scientific-assurance.md +12 -10
  667. package/docs/api/core-spectral-composition.md +14 -14
  668. package/docs/api/core-spectral.md +6 -6
  669. package/docs/api/core-validation.md +3 -3
  670. package/docs/api/core-version.md +7 -6
  671. package/docs/api/equipment-exposure-capabilities.md +11 -10
  672. package/docs/api/equipment-generic-tier-assets.md +7 -2
  673. package/docs/api/equipment-generic-tier-presets.md +6 -6
  674. package/docs/api/equipment-iso-capabilities.md +18 -18
  675. package/docs/api/equipment-metering-capabilities.md +6 -6
  676. package/docs/api/equipment-release-capabilities.md +4 -4
  677. package/docs/api/exports.json +2213 -8
  678. package/docs/api/exposure-exposure-duration-control.md +9 -9
  679. package/docs/api/exposure-exposure-mode-resolver.md +35 -31
  680. package/docs/api/exposure-exposure.md +10 -10
  681. package/docs/api/exposure-flash-ttl.md +182 -0
  682. package/docs/api/exposure-flash.md +183 -28
  683. package/docs/api/exposure-metering-scene-radiance.md +11 -10
  684. package/docs/api/exposure-metering-target.md +9 -8
  685. package/docs/api/exposure-metering-temporal.md +8 -8
  686. package/docs/api/exposure-metering.md +69 -9
  687. package/docs/api/exposure-program-line.md +6 -5
  688. package/docs/api/facade-chart-radiance-batch.md +96 -0
  689. package/docs/api/facade-chart-scenes.md +240 -0
  690. package/docs/api/facade-scene-radiance.md +122 -0
  691. package/docs/api/facade-simulate-capture.md +324 -0
  692. package/docs/api/gpu-image-kernel-accelerator.md +157 -0
  693. package/docs/api/gpu-image-kernel-execution.md +152 -0
  694. package/docs/api/motion-camera-rotation.md +43 -26
  695. package/docs/api/motion-capture-rotation-inverse-mapping.md +24 -23
  696. package/docs/api/motion-capture-rotation-temporal-quadrature.md +22 -22
  697. package/docs/api/motion-capture-rotation-trajectory.md +15 -15
  698. package/docs/api/motion-capture-translation-parallax-temporal-quadrature.md +15 -14
  699. package/docs/api/motion-extended-object-projection.md +10 -8
  700. package/docs/api/motion-projected-motion.md +8 -8
  701. package/docs/api/motion-temporal-exposure-sum.md +98 -0
  702. package/docs/api/motion-video-sequence.md +159 -0
  703. package/docs/api/optics-aperture.md +8 -8
  704. package/docs/api/optics-atmospheric-haze.md +104 -0
  705. package/docs/api/optics-brown-conrady-distortion.md +123 -0
  706. package/docs/api/optics-circle-of-confusion.md +5 -4
  707. package/docs/api/optics-complex-pupil-psf.md +57 -16
  708. package/docs/api/optics-depth-of-field.md +12 -6
  709. package/docs/api/optics-diffraction.md +8 -7
  710. package/docs/api/optics-focus-breathing.md +104 -16
  711. package/docs/api/optics-focus-state.md +9 -10
  712. package/docs/api/optics-front-of-lens-filter.md +72 -14
  713. package/docs/api/optics-illumination-vignetting.md +10 -10
  714. package/docs/api/optics-irradiance-convolution.md +95 -0
  715. package/docs/api/optics-lateral-chromatic-aberration.md +22 -21
  716. package/docs/api/optics-lens-psf-kernels.md +72 -0
  717. package/docs/api/optics-lens-psf-profile.md +48 -26
  718. package/docs/api/optics-longitudinal-chromatic-aberration.md +128 -0
  719. package/docs/api/optics-polygon-diffraction.md +78 -13
  720. package/docs/api/optics-profile-contract.md +4 -4
  721. package/docs/api/optics-psf-foundation.md +12 -12
  722. package/docs/api/optics-pupil-vignetting.md +132 -0
  723. package/docs/api/optics-radial-distortion.md +12 -12
  724. package/docs/api/optics-scene-to-sensor-irradiance.md +25 -14
  725. package/docs/api/optics-scene-to-sensor-quadrature.md +15 -12
  726. package/docs/api/optics-sensor-aperture-rays.md +3 -2
  727. package/docs/api/optics-sensor-environment-query.md +52 -9
  728. package/docs/api/optics-sensor-psf-quadrature.md +13 -10
  729. package/docs/api/optics-stray-light.md +12 -11
  730. package/docs/api/optics-thin-lens.md +4 -3
  731. package/docs/api/optics-zernike-wavefront.md +229 -0
  732. package/docs/api/output-capture-corrected-sdr.md +10 -7
  733. package/docs/api/output-capture-geometry.md +35 -36
  734. package/docs/api/output-capture-sdr.md +4 -4
  735. package/docs/api/output-crop.md +7 -4
  736. package/docs/api/output-geometric-transforms.md +65 -19
  737. package/docs/api/output-lens-corrections.md +17 -15
  738. package/docs/api/output-native-capture-sdr.md +26 -13
  739. package/docs/api/output-png-encoder.md +105 -0
  740. package/docs/api/output-print-contrast-reference.md +8 -8
  741. package/docs/api/output-print-detail.md +14 -14
  742. package/docs/api/output-print-jpeg.md +22 -5
  743. package/docs/api/output-print-plan.md +18 -18
  744. package/docs/api/output-print-region-statistics.md +14 -14
  745. package/docs/api/output-sdr-rendering.md +52 -10
  746. package/docs/api/output-subject-framing-crop.md +5 -6
  747. package/docs/api/processing-demosaic.md +120 -0
  748. package/docs/api/processing-denoise.md +148 -0
  749. package/docs/api/processing-focus-stacking.md +41 -0
  750. package/docs/api/processing-hdr.md +113 -0
  751. package/docs/api/processing-panorama.md +82 -0
  752. package/docs/api/processing-processing-task.md +107 -0
  753. package/docs/api/processing-tone-mapping.md +142 -0
  754. package/docs/api/schema-camera.md +6 -4
  755. package/docs/api/schema-illumination-spectral.md +10 -11
  756. package/docs/api/schema-illumination-temporal.md +13 -15
  757. package/docs/api/schema-illumination.md +4 -4
  758. package/docs/api/schema-scene-radiance-temporal.md +10 -11
  759. package/docs/api/schema-scene-radiance.md +18 -17
  760. package/docs/api/schema-scene.md +9 -9
  761. package/docs/api/schema-validation.md +1 -1
  762. package/docs/api/sensor-accumulated-charge.md +12 -20
  763. package/docs/api/sensor-architecture.md +15 -16
  764. package/docs/api/sensor-camera-saturation-capacity.md +9 -11
  765. package/docs/api/sensor-capture-color-sampling-binding.md +47 -51
  766. package/docs/api/sensor-capture-mode-timing.md +9 -9
  767. package/docs/api/sensor-capture-mode.md +29 -30
  768. package/docs/api/sensor-color-sampling.md +31 -33
  769. package/docs/api/sensor-constant-rate-temporal-integration.md +10 -11
  770. package/docs/api/sensor-dark-current.md +30 -14
  771. package/docs/api/sensor-environment-photo-signal.md +13 -6
  772. package/docs/api/sensor-eqe-electron-rate.md +9 -8
  773. package/docs/api/sensor-eqe-local-exposure.md +18 -17
  774. package/docs/api/sensor-eqe-temporal-exposure.md +12 -11
  775. package/docs/api/sensor-exposure-window.md +24 -24
  776. package/docs/api/sensor-fixed-pattern-noise.md +104 -0
  777. package/docs/api/sensor-iso-gain.md +63 -0
  778. package/docs/api/sensor-iso-signal-chain.md +13 -22
  779. package/docs/api/sensor-local-exposure-binding.md +12 -13
  780. package/docs/api/sensor-optical-stack.md +37 -40
  781. package/docs/api/sensor-photon-energy.md +10 -11
  782. package/docs/api/sensor-physical-charge-capacity.md +8 -13
  783. package/docs/api/sensor-pixel-pitch.md +1 -1
  784. package/docs/api/sensor-radiometry-readiness.md +9 -9
  785. package/docs/api/sensor-raw-readout.md +118 -52
  786. package/docs/api/sensor-raw-reconstruction.md +97 -20
  787. package/docs/api/sensor-readout-exposure-linkage.md +120 -24
  788. package/docs/api/sensor-readout-timing.md +33 -35
  789. package/docs/api/sensor-response-application-compatibility.md +9 -11
  790. package/docs/api/sensor-response-operating-range.md +14 -18
  791. package/docs/api/sensor-responsivity-photocurrent.md +9 -12
  792. package/docs/api/sensor-sampling-aperture.md +22 -25
  793. package/docs/api/sensor-scene-eqe-temporal-exposure.md +9 -8
  794. package/docs/api/sensor-sensor-geometry.md +23 -24
  795. package/docs/api/sensor-signal-noise.md +10 -10
  796. package/docs/api/sensor-spatial-sample-reduction.md +27 -30
  797. package/docs/api/sensor-spatial-sampling-quadrature.md +37 -39
  798. package/docs/api/sensor-spatio-spectral-reduction.md +27 -29
  799. package/docs/api/sensor-spectral-coverage.md +5 -5
  800. package/docs/api/sensor-spectral-quadrature.md +33 -35
  801. package/docs/api/sensor-spectral-response.md +28 -16
  802. package/docs/api/sensor-temporal-photo-signal.md +6 -6
  803. package/docs/api/simulation-poc-simulation.md +17 -16
  804. package/docs/api/stabilization-camera-shake.md +29 -10
  805. package/docs/api/stabilization-system.md +25 -21
  806. package/docs/examples/production-request.json +3821 -2157
  807. package/docs/examples/simulate-capture.mjs +14 -0
  808. package/llms.txt +35 -0
  809. package/package.json +32 -12
  810. package/AGENTS.md +0 -674
  811. package/CONTRIBUTING.md +0 -76
  812. package/DCO +0 -33
  813. package/dist/camera/equivalent-focal-length.d.ts.map +0 -1
  814. package/dist/camera/field-of-view.d.ts.map +0 -1
  815. package/dist/camera/projected-object-size.d.ts.map +0 -1
  816. package/dist/capture/capture-export-metadata.d.ts.map +0 -1
  817. package/dist/capture/environment-raw-producer.d.ts.map +0 -1
  818. package/dist/capture/export-jpeg.d.ts.map +0 -1
  819. package/dist/capture/export-tiff.d.ts.map +0 -1
  820. package/dist/capture/focus-control.d.ts.map +0 -1
  821. package/dist/capture/linear-encoding.d.ts.map +0 -1
  822. package/dist/capture/native-environment-raw.d.ts.map +0 -1
  823. package/dist/capture/native-raw-development.d.ts.map +0 -1
  824. package/dist/capture/native-raw.d.ts.map +0 -1
  825. package/dist/capture/photographic-export.d.ts.map +0 -1
  826. package/dist/capture/raw-frame-limits.d.ts.map +0 -1
  827. package/dist/capture/raw-frame-reconstruction.d.ts.map +0 -1
  828. package/dist/capture/release-sequence.d.ts.map +0 -1
  829. package/dist/capture/sensor-raw-frame.d.ts.map +0 -1
  830. package/dist/capture/sensor-raw-producer.d.ts.map +0 -1
  831. package/dist/capture/simulated-capture.d.ts.map +0 -1
  832. package/dist/color/capture-color.d.ts.map +0 -1
  833. package/dist/color/sensor-color-development.d.ts.map +0 -1
  834. package/dist/color/srgb-icc.d.ts.map +0 -1
  835. package/dist/color/srgb-transfer.d.ts.map +0 -1
  836. package/dist/color/white-balance.d.ts.map +0 -1
  837. package/dist/composition/image-formation-plan.d.ts.map +0 -1
  838. package/dist/composition/plan-consumer.d.ts.map +0 -1
  839. package/dist/core/calculation-result.d.ts.map +0 -1
  840. package/dist/core/canonical-json.d.ts.map +0 -1
  841. package/dist/core/configuration-error.d.ts.map +0 -1
  842. package/dist/core/evidence-provenance.d.ts.map +0 -1
  843. package/dist/core/image-formation.d.ts.map +0 -1
  844. package/dist/core/owned-data.d.ts.map +0 -1
  845. package/dist/core/record-validation.d.ts.map +0 -1
  846. package/dist/core/scientific-assurance.d.ts.map +0 -1
  847. package/dist/core/spectral-composition.d.ts.map +0 -1
  848. package/dist/core/spectral.d.ts.map +0 -1
  849. package/dist/core/validation.d.ts.map +0 -1
  850. package/dist/core/version.d.ts.map +0 -1
  851. package/dist/equipment/exposure-capabilities.d.ts.map +0 -1
  852. package/dist/equipment/generic-tier-assets.d.ts.map +0 -1
  853. package/dist/equipment/generic-tier-presets.d.ts.map +0 -1
  854. package/dist/equipment/iso-capabilities.d.ts.map +0 -1
  855. package/dist/equipment/metering-capabilities.d.ts.map +0 -1
  856. package/dist/equipment/release-capabilities.d.ts.map +0 -1
  857. package/dist/exposure/exposure-duration-control.d.ts.map +0 -1
  858. package/dist/exposure/exposure-mode-resolver.d.ts.map +0 -1
  859. package/dist/exposure/exposure.d.ts.map +0 -1
  860. package/dist/exposure/flash.d.ts.map +0 -1
  861. package/dist/exposure/metering-scene-radiance.d.ts.map +0 -1
  862. package/dist/exposure/metering-target.d.ts.map +0 -1
  863. package/dist/exposure/metering-temporal.d.ts.map +0 -1
  864. package/dist/exposure/metering.d.ts.map +0 -1
  865. package/dist/exposure/program-line.d.ts.map +0 -1
  866. package/dist/index.d.ts.map +0 -1
  867. package/dist/motion/camera-rotation.d.ts.map +0 -1
  868. package/dist/motion/capture-rotation-inverse-mapping.d.ts.map +0 -1
  869. package/dist/motion/capture-rotation-temporal-quadrature.d.ts.map +0 -1
  870. package/dist/motion/capture-rotation-trajectory.d.ts.map +0 -1
  871. package/dist/motion/capture-translation-parallax-temporal-quadrature.d.ts.map +0 -1
  872. package/dist/motion/extended-object-projection.d.ts.map +0 -1
  873. package/dist/motion/projected-motion.d.ts.map +0 -1
  874. package/dist/optics/aperture.d.ts.map +0 -1
  875. package/dist/optics/circle-of-confusion.d.ts.map +0 -1
  876. package/dist/optics/complex-pupil-psf.d.ts.map +0 -1
  877. package/dist/optics/depth-of-field.d.ts.map +0 -1
  878. package/dist/optics/diffraction.d.ts.map +0 -1
  879. package/dist/optics/focus-breathing.d.ts.map +0 -1
  880. package/dist/optics/focus-state.d.ts.map +0 -1
  881. package/dist/optics/front-of-lens-filter.d.ts.map +0 -1
  882. package/dist/optics/illumination-vignetting.d.ts.map +0 -1
  883. package/dist/optics/lateral-chromatic-aberration.d.ts.map +0 -1
  884. package/dist/optics/lens-psf-profile.d.ts.map +0 -1
  885. package/dist/optics/polygon-diffraction.d.ts.map +0 -1
  886. package/dist/optics/profile-contract.d.ts.map +0 -1
  887. package/dist/optics/psf-foundation.d.ts.map +0 -1
  888. package/dist/optics/radial-distortion.d.ts.map +0 -1
  889. package/dist/optics/scene-to-sensor-irradiance.d.ts.map +0 -1
  890. package/dist/optics/scene-to-sensor-quadrature.d.ts.map +0 -1
  891. package/dist/optics/sensor-aperture-rays.d.ts.map +0 -1
  892. package/dist/optics/sensor-environment-query.d.ts.map +0 -1
  893. package/dist/optics/sensor-psf-quadrature.d.ts.map +0 -1
  894. package/dist/optics/sensor-psf-support.d.ts.map +0 -1
  895. package/dist/optics/stray-light.d.ts.map +0 -1
  896. package/dist/optics/thin-lens.d.ts.map +0 -1
  897. package/dist/output/capture-corrected-sdr.d.ts.map +0 -1
  898. package/dist/output/capture-geometry.d.ts.map +0 -1
  899. package/dist/output/capture-sdr.d.ts.map +0 -1
  900. package/dist/output/crop.d.ts.map +0 -1
  901. package/dist/output/geometric-transforms.d.ts.map +0 -1
  902. package/dist/output/lens-corrections.d.ts.map +0 -1
  903. package/dist/output/native-capture-sdr.d.ts.map +0 -1
  904. package/dist/output/print-contrast-reference.d.ts.map +0 -1
  905. package/dist/output/print-detail.d.ts.map +0 -1
  906. package/dist/output/print-jpeg.d.ts.map +0 -1
  907. package/dist/output/print-plan.d.ts.map +0 -1
  908. package/dist/output/print-region-statistics.d.ts.map +0 -1
  909. package/dist/output/sdr-rendering.d.ts.map +0 -1
  910. package/dist/output/subject-framing-crop.d.ts.map +0 -1
  911. package/dist/schema/camera.d.ts.map +0 -1
  912. package/dist/schema/camera.js +0 -3
  913. package/dist/schema/camera.js.map +0 -1
  914. package/dist/schema/illumination-spectral.d.ts.map +0 -1
  915. package/dist/schema/illumination-temporal.d.ts.map +0 -1
  916. package/dist/schema/illumination.d.ts.map +0 -1
  917. package/dist/schema/scene-radiance-temporal.d.ts.map +0 -1
  918. package/dist/schema/scene-radiance.d.ts.map +0 -1
  919. package/dist/schema/scene.d.ts.map +0 -1
  920. package/dist/schema/scene.js +0 -3
  921. package/dist/schema/scene.js.map +0 -1
  922. package/dist/schema/validation.d.ts.map +0 -1
  923. package/dist/sensor/accumulated-charge.d.ts.map +0 -1
  924. package/dist/sensor/architecture.d.ts.map +0 -1
  925. package/dist/sensor/camera-saturation-capacity.d.ts.map +0 -1
  926. package/dist/sensor/capture-color-sampling-binding.d.ts.map +0 -1
  927. package/dist/sensor/capture-mode-timing.d.ts.map +0 -1
  928. package/dist/sensor/capture-mode.d.ts.map +0 -1
  929. package/dist/sensor/color-sampling.d.ts.map +0 -1
  930. package/dist/sensor/constant-rate-temporal-integration.d.ts.map +0 -1
  931. package/dist/sensor/dark-current.d.ts.map +0 -1
  932. package/dist/sensor/environment-photo-signal.d.ts.map +0 -1
  933. package/dist/sensor/eqe-electron-rate.d.ts.map +0 -1
  934. package/dist/sensor/eqe-local-exposure.d.ts.map +0 -1
  935. package/dist/sensor/eqe-temporal-exposure.d.ts.map +0 -1
  936. package/dist/sensor/exposure-window.d.ts.map +0 -1
  937. package/dist/sensor/iso-signal-chain.d.ts.map +0 -1
  938. package/dist/sensor/local-exposure-binding.d.ts.map +0 -1
  939. package/dist/sensor/optical-stack.d.ts.map +0 -1
  940. package/dist/sensor/photon-energy.d.ts.map +0 -1
  941. package/dist/sensor/physical-charge-capacity.d.ts.map +0 -1
  942. package/dist/sensor/pixel-pitch.d.ts.map +0 -1
  943. package/dist/sensor/radiometry-readiness.d.ts.map +0 -1
  944. package/dist/sensor/raw-readout.d.ts.map +0 -1
  945. package/dist/sensor/raw-reconstruction.d.ts.map +0 -1
  946. package/dist/sensor/readout-exposure-linkage.d.ts.map +0 -1
  947. package/dist/sensor/readout-timing.d.ts.map +0 -1
  948. package/dist/sensor/response-application-compatibility.d.ts.map +0 -1
  949. package/dist/sensor/response-operating-range.d.ts.map +0 -1
  950. package/dist/sensor/responsivity-photocurrent.d.ts.map +0 -1
  951. package/dist/sensor/sampling-aperture.d.ts.map +0 -1
  952. package/dist/sensor/scene-eqe-temporal-exposure.d.ts.map +0 -1
  953. package/dist/sensor/sensor-geometry.d.ts.map +0 -1
  954. package/dist/sensor/signal-noise.d.ts.map +0 -1
  955. package/dist/sensor/spatial-sample-reduction.d.ts.map +0 -1
  956. package/dist/sensor/spatial-sampling-quadrature.d.ts.map +0 -1
  957. package/dist/sensor/spatio-spectral-reduction.d.ts.map +0 -1
  958. package/dist/sensor/spectral-coverage.d.ts.map +0 -1
  959. package/dist/sensor/spectral-quadrature.d.ts.map +0 -1
  960. package/dist/sensor/spectral-response.d.ts.map +0 -1
  961. package/dist/sensor/temporal-eqe-sum.d.ts.map +0 -1
  962. package/dist/sensor/temporal-photo-signal.d.ts.map +0 -1
  963. package/dist/sensor/temporal-sample-binding.d.ts.map +0 -1
  964. package/dist/simulation/poc-simulation.d.ts.map +0 -1
  965. package/dist/stabilization/camera-shake.d.ts.map +0 -1
  966. package/dist/stabilization/system.d.ts.map +0 -1
  967. package/docs/API_STYLE.md +0 -235
  968. package/docs/ARCHITECTURE.md +0 -356
  969. package/docs/AUTOMATION_COORDINATION.md +0 -190
  970. package/docs/CAPTURE_COLOR.md +0 -25
  971. package/docs/CAPTURE_CORRECTED_SDR.md +0 -25
  972. package/docs/CAPTURE_EXPORT_METADATA.md +0 -27
  973. package/docs/CAPTURE_SDR.md +0 -22
  974. package/docs/DENSE_PUPIL_QUALIFICATION.md +0 -121
  975. package/docs/DEVELOPERS.md +0 -68
  976. package/docs/DIGITAL_OPTICS_FOUNDATION.md +0 -69
  977. package/docs/ENVIRONMENT_RAW_CAPTURE.md +0 -208
  978. package/docs/EXPORT_ACCEPTANCE.md +0 -133
  979. package/docs/GENERIC_TIER_PRESETS.md +0 -269
  980. package/docs/GEOMETRIC_PREPARATION_REUSE.md +0 -141
  981. package/docs/IMAGE_FORMATION.md +0 -247
  982. package/docs/LINEAR_CAPTURE_ENCODING.md +0 -25
  983. package/docs/MOTION_AND_SIGNAL.md +0 -250
  984. package/docs/NATIVE_CAPTURE_SDR.md +0 -70
  985. package/docs/NATIVE_CAPTURE_SDR_REVIEW.md +0 -37
  986. package/docs/NATIVE_CAPTURE_SDR_VALIDATION.md +0 -34
  987. package/docs/NATIVE_RAW_AND_PRINT.md +0 -54
  988. package/docs/NUMERICAL_CORRECTNESS.md +0 -191
  989. package/docs/PERFORMANCE_BASELINE.md +0 -56
  990. package/docs/PHOTOGRAPHIC_EXPORT.md +0 -206
  991. package/docs/PHYSICS_FOUNDATION.md +0 -426
  992. package/docs/POC_API.md +0 -278
  993. package/docs/POC_PROJECTION_PLATFORM_REFERENCE.md +0 -12
  994. package/docs/POC_PROJECTION_REUSE.md +0 -124
  995. package/docs/PRINT_195_196_REVIEW.md +0 -93
  996. package/docs/PRINT_196_ENGINE_ACCEPTANCE.md +0 -45
  997. package/docs/PRINT_CONTRAST_REFERENCE.md +0 -43
  998. package/docs/PRINT_DETAIL_ASSESSMENT.md +0 -81
  999. package/docs/PRINT_DETAIL_JPEG_EVIDENCE.md +0 -36
  1000. package/docs/PRINT_DETAIL_SDR_EVIDENCE.md +0 -29
  1001. package/docs/PRINT_DETAIL_VALIDATION.md +0 -36
  1002. package/docs/PRINT_PLANNING.md +0 -75
  1003. package/docs/PRINT_REGION_STATISTICS.md +0 -38
  1004. package/docs/PROCESSED_OUTPUT.md +0 -157
  1005. package/docs/PRODUCTION_COMPOSITION.md +0 -373
  1006. package/docs/PRODUCTION_ENVIRONMENT_CAPTURE.md +0 -131
  1007. package/docs/PROVENANCE.md +0 -115
  1008. package/docs/PSF_FOUNDATION.md +0 -165
  1009. package/docs/RAW_FRAME_ENVELOPE.md +0 -56
  1010. package/docs/RAW_FRAME_RECONSTRUCTION.md +0 -30
  1011. package/docs/RELEASE_1_0.md +0 -66
  1012. package/docs/RELEASE_1_0_1.md +0 -61
  1013. package/docs/RELEASE_1_1_0.md +0 -25
  1014. package/docs/RELEASE_1_2_0.md +0 -51
  1015. package/docs/RELEASE_1_3_0.md +0 -15
  1016. package/docs/RELEASE_1_4_0.md +0 -23
  1017. package/docs/RELEASE_1_5_0.md +0 -105
  1018. package/docs/RELEASE_AUDIT.md +0 -39
  1019. package/docs/SCENE_RADIANCE_AND_ILLUMINATION.md +0 -298
  1020. package/docs/SCENE_SENSOR_QUADRATURE.md +0 -98
  1021. package/docs/SCENE_SENSOR_TEMPORAL_EXPOSURE.md +0 -86
  1022. package/docs/SCIENTIFIC_ASSURANCE.md +0 -280
  1023. package/docs/SCIENTIFIC_CONFORMANCE.md +0 -83
  1024. package/docs/SDR_RENDERING.md +0 -33
  1025. package/docs/SENSOR_APERTURE_RAYS.md +0 -23
  1026. package/docs/SENSOR_ENVIRONMENT_QUERY.md +0 -86
  1027. package/docs/SENSOR_EQE_LOCAL_EXPOSURE.md +0 -104
  1028. package/docs/SENSOR_EQE_TEMPORAL_EXPOSURE.md +0 -74
  1029. package/docs/SENSOR_PSF_QUADRATURE.md +0 -90
  1030. package/docs/SENSOR_RAW_FRAME.md +0 -20
  1031. package/docs/SENSOR_RAW_PRODUCER.md +0 -77
  1032. package/docs/SEPARABLE_EMISSION_DRAFT.md +0 -103
  1033. package/docs/SIGNAL_CONFORMANCE.md +0 -23
  1034. package/docs/SIMULATED_CAPTURE.md +0 -65
  1035. package/docs/STABILIZATION.md +0 -234
  1036. package/docs/TEMPORAL_PHOTO_RAW.md +0 -83
  1037. package/docs/TIER_ACCEPTANCE.md +0 -129
  1038. package/docs/TIER_PRESET_ACCEPTANCE.md +0 -59
  1039. package/docs/V1_COMPOSITION_MAP.md +0 -123
  1040. package/docs/V1_HELPER_REUSE_REVIEW.md +0 -60
  1041. package/docs/V1_PERFORMANCE_DISPOSITION.md +0 -88
  1042. package/docs/benchmarks/2026-10-01-main-baseline.json +0 -694
  1043. package/docs/benchmarks/2026-10-02-geometric-preparation-reuse.json +0 -2190
  1044. package/docs/benchmarks/2026-10-02-poc-projection-reuse.json +0 -2423
  1045. package/docs/benchmarks/2026-10-02-v1-environment-gc-profile.json +0 -210
  1046. package/docs/benchmarks/2026-10-02-v1-environment-ordinary.json +0 -187
  1047. package/docs/benchmarks/2026-10-02-v1-geometry-gc-profile.json +0 -756
  1048. package/docs/benchmarks/2026-10-02-v1-geometry-ordinary-1.json +0 -711
  1049. package/docs/benchmarks/2026-10-02-v1-geometry-ordinary-2.json +0 -711
  1050. package/docs/benchmarks/2026-10-02-v1-poc-gc-profile.json +0 -885
  1051. package/docs/benchmarks/2026-10-02-v1-poc-ordinary-1.json +0 -868
  1052. package/docs/benchmarks/2026-10-02-v1-poc-ordinary-2.json +0 -868
  1053. package/docs/licenses/castleCSF-MIT.txt +0 -21
  1054. package/docs/validation/dense-pupil-2026-10-06/pilot.jsonl +0 -6
  1055. package/docs/validation/documentation-fragments.json +0 -212
  1056. package/docs/validation/native-capture-sdr-darwin-arm64-node26-review.jsonl +0 -4
  1057. package/docs/validation/native-capture-sdr-darwin-arm64.jsonl +0 -3
  1058. package/docs/validation/native-raw-print-2026-10-04/fractional-asymmetric-crop.jpg +0 -0
  1059. package/docs/validation/native-raw-print-2026-10-04/gray-ramp.jpg +0 -0
  1060. package/docs/validation/native-raw-print-2026-10-04/linear-area-checker.jpg +0 -0
  1061. package/docs/validation/native-raw-print-2026-10-04/manifest.json +0 -218
  1062. package/docs/validation/native-raw-print-2026-10-04/megapixel-native.jpg +0 -0
  1063. package/docs/validation/native-raw-print-2026-10-04/native-color.jpg +0 -0
  1064. package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel-validation.json +0 -9
  1065. package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel.json +0 -29
  1066. package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel.json.codes.u16le.gz +0 -0
  1067. package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel.json.jpg +0 -0
  1068. package/docs/validation/native-raw-print-2026-10-04/photivra-native-full-megapixel.json.rgb.gz +0 -0
  1069. package/docs/validation/native-raw-print-2026-10-04/srgb.icc +0 -0
  1070. package/docs/validation/native-raw-print-2026-10-04/validation.json +0 -41
  1071. package/docs/validation/print-196-candidate-capabilities.json +0 -28
  1072. package/docs/validation/print-196-candidate-evidence.json +0 -356
  1073. package/docs/validation/print-196-engine-acceptance.json +0 -81
  1074. package/docs/validation/print-detail-capabilities.json +0 -103
  1075. package/docs/validation/print-detail-jpeg-evidence.json +0 -116
  1076. package/docs/validation/print-detail-sdr-evidence.json +0 -81
  1077. package/docs/validation/release-audit-inventory.json +0 -1306
  1078. package/docs/validation/tier-acceptance-report-v1.json +0 -2538
@@ -1 +1 @@
1
- {"version":3,"file":"eqe-electron-rate.js","sourceRoot":"","sources":["../../src/sensor/eqe-electron-rate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"eqe-electron-rate.js","sourceRoot":"","sources":["../../src/sensor/eqe-electron-rate.ts"],"names":[],"mappings":"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","sourcesContent":["// SPDX-License-Identifier: Apache-2.0\n\n/**\n * EQE electron rate: converts the light power reaching a sensor site into a photon rate and an\n * expected electron rate, using the sensor's EQE (external quantum efficiency, the fraction of\n * incident photons that produce a collected electron).\n *\n * The response is applied at each wavelength node. One broadband-average QE is never applied to the\n * total power. Outputs are rates per second; integrating over the exposure time happens later.\n * @see docs/MOTION_AND_SIGNAL.md for equations, coordinate/unit conventions, blockers and support\n * limits.\n */\n\nimport {\n approximationResult,\n type CalculationResult\n} from \"../core/calculation-result.js\";\nimport type {\n EvidenceProvenance\n} from \"../core/evidence-provenance.js\";\nimport { stringifyCanonicalJson } from \"../core/canonical-json.js\";\nimport { InvalidScientificInputError } from \"../core/validation.js\";\nimport {\n calculatePhotonEnergyFromWavelength,\n type AirRefractiveIndexConditionPolicy,\n type AirRefractiveIndexReferenceConditions,\n type SourcedAirPhaseRefractiveIndex\n} from \"./photon-energy.js\";\nimport type {\n SensorResponseApplicationCompatibilityAssessment\n} from \"./response-application-compatibility.js\";\nimport type {\n SensorResponseOperatingRangeAssessment\n} from \"./response-operating-range.js\";\nimport {\n parseSensorColorSamplingProfile,\n type SensorColorSamplingProfile\n} from \"./color-sampling.js\";\nimport {\n createSensorSpectralResponseChannelBinding,\n requireCurrentSensorSpectralResponseChannelBinding,\n parseSensorSpectralResponseProfile,\n resolveParsedSensorSpectralResponseAtWavelength,\n type ResolvedSensorSpectralResponseValue,\n type SensorSpectralResponseProfile\n} from \"./spectral-response.js\";\nimport type {\n SensorSpatioSpectralIrradianceReduction,\n SensorSpatioSpectralWavelengthReduction\n} from \"./spatio-spectral-reduction.js\";\nimport { requireInputObject, requireInputKeys } from \"../core/record-validation.js\";\nimport { InvalidConfigurationError } from \"../core/configuration-error.js\";\n\nconst REDUCTION_TOLERANCE = 1e-10;\n\nexport interface SensorEqeAirRefractiveIndexSample {\n spectralSampleIndex: number;\n refractiveIndex:\n SourcedAirPhaseRefractiveIndex;\n}\n\nexport interface SensorEqeAirPhotonEnergyContext {\n samples:\n readonly SensorEqeAirRefractiveIndexSample[];\n operatingConditions?:\n AirRefractiveIndexReferenceConditions;\n conditionPolicy:\n AirRefractiveIndexConditionPolicy;\n}\n\nexport interface CalculateSensorEqeElectronRateInput {\n reduction:\n SensorSpatioSpectralIrradianceReduction;\n compatibility:\n SensorResponseApplicationCompatibilityAssessment;\n operatingRange:\n SensorResponseOperatingRangeAssessment;\n colorSamplingProfile:\n SensorColorSamplingProfile;\n spectralResponseProfile:\n SensorSpectralResponseProfile;\n airPhotonEnergyContext?:\n SensorEqeAirPhotonEnergyContext;\n}\n\nexport interface SensorEqeWavelengthRateContribution {\n spectralSampleIndex: number;\n wavelengthNanometers: number;\n wavelengthMeasureNanometers: number;\n geometricApertureIncidentSpectralFluxWattsPerNanometer:\n number;\n radiantPowerContributionWatts: number;\n vacuumWavelengthNanometers: number;\n photonEnergyJoules: number;\n wavelengthConversion:\n | \"vacuum-identity\"\n | \"air-to-vacuum-via-phase-refractive-index\";\n phaseRefractiveIndexUsed?: number;\n airConditionCompatibility?:\n | \"exact-match\"\n | \"assumed-compatible\";\n airRefractiveIndexEvidence?:\n readonly EvidenceProvenance[];\n incidentPhotonRatePerSecond: number;\n effectiveExternalQuantumEfficiency: number;\n responseComposition:\n | \"direct-effective-response\"\n | \"channel-filter-transmittance-times-detector-eqe\";\n channelFilterTransmittance?: number;\n detectorExternalQuantumEfficiency?: number;\n responseInterpolationUsed: boolean;\n expectedGeneratedElectronRatePerSecond:\n number;\n}\n\nexport interface SensorEqeElectronRate {\n colorSamplingProfileId: string;\n responseProfileId: string;\n responseApplicationProfileId: string;\n operatingRangeProfileId: string;\n /** The exact source colour site. Results produced by the engine fill this in. */\n site?: {\n x: number;\n y: number;\n };\n channelId: string;\n sourceResponseKind:\n | \"effective-external-quantum-efficiency\"\n | \"separable-channel-filter-and-detector-eqe\";\n responseScope:\n SensorSpatioSpectralIrradianceReduction[\"responseScope\"];\n responseReferencePlane:\n SensorResponseApplicationCompatibilityAssessment[\"requiredSourcePlane\"];\n wavelengthBasis:\n SensorSpatioSpectralIrradianceReduction[\"wavelengthBasis\"];\n wavelengthRangeNanometers:\n SensorSpatioSpectralIrradianceReduction[\"wavelengthRangeNanometers\"];\n spectralNodeCount: number;\n perWavelength:\n readonly SensorEqeWavelengthRateContribution[];\n incidentPhotonRatePerSecond: number;\n expectedGeneratedElectronRatePerSecond:\n number;\n summationMethod:\n \"kahan-compensated\";\n responseApplicationPerformed: true;\n quantumEfficiencyApplied: true;\n spectralResponsivityApplied: false;\n channelFilterTransmissionApplied:\n boolean;\n photonRateCalculated: true;\n electronRateCalculated: true;\n photonCountCalculated: false;\n electronCountCalculated: false;\n currentCalculated: false;\n temporalIntegrationApplied: false;\n exposureDurationApplied: false;\n saturationAssessed: false;\n shotNoiseApplied: false;\n readNoiseApplied: false;\n adcQuantizationApplied: false;\n rawCodeValueProduced: false;\n responseUncertaintyPropagated: false;\n photonEnergyUncertaintyPropagated: false;\n quadratureConvergenceErrorEstimated:\n false;\n}\n\ninterface CompensatedSum {\n sum: number;\n correction: number;\n}\n\nfunction addCompensated(\n state: CompensatedSum,\n value: number\n): void {\n const adjusted =\n value - state.correction;\n const next =\n state.sum + adjusted;\n state.correction =\n (next - state.sum) - adjusted;\n state.sum = next;\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 InvalidScientificInputError(\n path +\n \" must be finite and greater than or equal to zero.\"\n );\n }\n return value;\n}\n\nfunction requirePositiveFinite(\n value: unknown,\n path: string\n): number {\n if (\n typeof value !== \"number\" ||\n !Number.isFinite(value) ||\n value <= 0\n ) {\n throw new InvalidScientificInputError(\n path +\n \" must be finite and greater than zero.\"\n );\n }\n return value;\n}\n\nfunction requireSafeNonNegativeInteger(\n value: unknown,\n path: string\n): number {\n if (\n typeof value !== \"number\" ||\n !Number.isSafeInteger(value) ||\n value < 0\n ) {\n throw new InvalidScientificInputError(\n path +\n \" must be a non-negative safe integer.\"\n );\n }\n return value;\n}\n\nfunction approximatelyEqual(\n actual: number,\n expected: number\n): boolean {\n const scale = Math.max(\n 1,\n Math.abs(actual),\n Math.abs(expected)\n );\n return (\n Math.abs(actual - expected) <=\n REDUCTION_TOLERANCE * scale\n );\n}\n\n/**\n * Identity string for parsed plain data that ignores key order, so records with\n * the same content compare equal whatever order their properties were added in.\n */\nfunction canonicalJson(\n value: unknown\n): string {\n if (value === undefined) return \"undefined\";\n return stringifyCanonicalJson(value, {\n undefinedObjectProperties: \"omit\",\n nonFiniteNumberMessage:\n \"EQE electron-rate identity data must contain finite numbers.\",\n unsupportedValueMessage:\n \"EQE electron-rate identity data must be plain JSON data.\"\n });\n}\n\nfunction requireEquivalent(\n actual: unknown,\n expected: unknown,\n message: string\n): void {\n if (\n canonicalJson(actual) !==\n canonicalJson(expected)\n ) {\n throw new InvalidScientificInputError(\n message\n );\n }\n}\n\nfunction validateAuthorizationChain(\n reduction:\n SensorSpatioSpectralIrradianceReduction,\n compatibility:\n SensorResponseApplicationCompatibilityAssessment,\n operatingRange:\n SensorResponseOperatingRangeAssessment\n): void {\n requireInputObject(reduction, \"reduction input\");\n if (\n reduction.outputMeaning !==\n \"pre-response-spatio-spectral-radiometric-reduction\" ||\n reduction\n .spectralResponseApplicationPerformed !==\n false ||\n reduction.quantumEfficiencyApplied !==\n false ||\n reduction.temporalIntegrationApplied !==\n false\n ) {\n throw new InvalidScientificInputError(\n \"reduction must remain pre-response and pre-temporal before EQE rate conversion.\"\n );\n }\n\n if (\n !compatibility\n .structuralCompatibilityEstablished ||\n compatibility.compatibilityStatus ===\n \"blocked\" ||\n compatibility.blockers.length !== 0 ||\n !compatibility.sourcePlaneMatched ||\n compatibility.requiredSignalPath !==\n \"photon-rate-to-electrons\"\n ) {\n throw new InvalidScientificInputError(\n \"compatibility must establish a non-blocked photon-rate-to-electrons response path.\"\n );\n }\n\n if (\n compatibility.spectralResponseProfileId !==\n reduction.responseProfileId ||\n compatibility.colorSamplingProfileId !==\n reduction.colorSamplingProfileId ||\n compatibility.channelId !==\n reduction.channelId ||\n compatibility.responseScope !==\n reduction.responseScope\n ) {\n throw new InvalidScientificInputError(\n \"compatibility identities must exactly match the reduction.\"\n );\n }\n\n if (\n !operatingRange\n .operatingRangeCompatibilityAssessed ||\n !operatingRange\n .instantaneousResponseRangeCompatible ||\n !operatingRange\n .responseRateConversionAuthorized ||\n operatingRange.status === \"blocked\" ||\n operatingRange.blockers.length !== 0 ||\n operatingRange.requiredSignalPath !==\n \"photon-rate-to-electrons\" ||\n operatingRange\n .responseApplicationPerformed !==\n false ||\n operatingRange\n .photonConversionPerformed !== false ||\n operatingRange\n .electronConversionPerformed !== false ||\n operatingRange\n .temporalIntegrationAuthorized !== false\n ) {\n throw new InvalidScientificInputError(\n \"operatingRange must authorize a clean photon-rate-to-electrons conversion path.\"\n );\n }\n\n if (\n !operatingRange\n .spectralNodeRangeCompatibilityAssessed ||\n operatingRange\n .spectralInputModel.kind !==\n \"per-spectral-bin\"\n ) {\n throw new InvalidScientificInputError(\n \"operatingRange must establish per-spectral-bin input-range applicability before wavelength-dependent EQE conversion.\"\n );\n }\n\n if (\n operatingRange\n .spatialLinearityModel.kind !==\n \"linear-superposition-over-geometric-aperture\"\n ) {\n throw new InvalidScientificInputError(\n \"operatingRange must establish linear superposition over the geometric aperture.\"\n );\n }\n\n if (\n operatingRange.spectralResponseProfileId !==\n reduction.responseProfileId ||\n operatingRange.colorSamplingProfileId !==\n reduction.colorSamplingProfileId ||\n operatingRange.channelId !==\n reduction.channelId ||\n operatingRange.responseApplicationProfileId !==\n compatibility.applicationProfileId\n ) {\n throw new InvalidScientificInputError(\n \"operatingRange identities must exactly match the reduction and compatibility assessment.\"\n );\n }\n}\n\nfunction validateReductionSpectralNodes(\n reduction:\n SensorSpatioSpectralIrradianceReduction\n): readonly SensorSpatioSpectralWavelengthReduction[] {\n if (\n !Array.isArray(\n reduction.perWavelength\n ) ||\n !Number.isSafeInteger(\n reduction.spectralNodeCount\n ) ||\n reduction.spectralNodeCount <= 0 ||\n reduction.perWavelength.length !==\n reduction.spectralNodeCount\n ) {\n throw new InvalidScientificInputError(\n \"reduction.perWavelength must contain exactly spectralNodeCount entries.\"\n );\n }\n\n let previousWavelength =\n Number.NEGATIVE_INFINITY;\n let normalizedWeightSum = 0;\n const integratedPower:\n CompensatedSum = {\n sum: 0,\n correction: 0\n };\n\n reduction.perWavelength.forEach(\n (entry, arrayIndex) => {\n const sampleIndex =\n requireSafeNonNegativeInteger(\n entry.spectralSampleIndex,\n \"reduction.perWavelength[\" +\n arrayIndex +\n \"].spectralSampleIndex\"\n );\n if (sampleIndex !== arrayIndex) {\n throw new InvalidScientificInputError(\n \"reduction spectralSampleIndex values must form the exact contiguous range 0..spectralNodeCount-1.\"\n );\n }\n\n const wavelength =\n requirePositiveFinite(\n entry.wavelengthNanometers,\n \"reduction.perWavelength[\" +\n arrayIndex +\n \"].wavelengthNanometers\"\n );\n if (\n wavelength <=\n previousWavelength\n ) {\n throw new InvalidScientificInputError(\n \"reduction per-wavelength samples must be strictly increasing in wavelength.\"\n );\n }\n previousWavelength =\n wavelength;\n\n const measure =\n requirePositiveFinite(\n entry.wavelengthMeasureNanometers,\n \"reduction.perWavelength[\" +\n arrayIndex +\n \"].wavelengthMeasureNanometers\"\n );\n const normalizedWeight =\n requirePositiveFinite(\n entry.normalizedWavelengthWeight,\n \"reduction.perWavelength[\" +\n arrayIndex +\n \"].normalizedWavelengthWeight\"\n );\n const fluxDensity =\n requireNonNegativeFinite(\n entry\n .geometricApertureIncidentSpectralFluxWattsPerNanometer,\n \"reduction.perWavelength[\" +\n arrayIndex +\n \"].geometricApertureIncidentSpectralFluxWattsPerNanometer\"\n );\n const contribution =\n requireNonNegativeFinite(\n entry\n .wavelengthIntegratedGeometricApertureIncidentFluxContributionWatts,\n \"reduction.perWavelength[\" +\n arrayIndex +\n \"].wavelengthIntegratedGeometricApertureIncidentFluxContributionWatts\"\n );\n const expectedContribution =\n fluxDensity * measure;\n if (\n !Number.isFinite(\n expectedContribution\n ) ||\n !approximatelyEqual(\n contribution,\n expectedContribution\n )\n ) {\n throw new InvalidScientificInputError(\n \"reduction per-wavelength radiant-power contribution must equal spectral flux density × d-lambda.\"\n );\n }\n\n normalizedWeightSum +=\n normalizedWeight;\n if (\n !Number.isFinite(\n normalizedWeightSum\n )\n ) {\n throw new InvalidScientificInputError(\n \"reduction normalized wavelength weights must remain finite.\"\n );\n }\n addCompensated(\n integratedPower,\n contribution\n );\n }\n );\n\n if (\n !approximatelyEqual(\n normalizedWeightSum,\n 1\n )\n ) {\n throw new InvalidScientificInputError(\n \"reduction normalized wavelength weights must sum to 1.\"\n );\n }\n\n const totalPower =\n requireNonNegativeFinite(\n reduction\n .wavelengthIntegratedGeometricApertureIncidentFluxWatts,\n \"reduction.wavelengthIntegratedGeometricApertureIncidentFluxWatts\"\n );\n if (\n !approximatelyEqual(\n integratedPower.sum,\n totalPower\n )\n ) {\n throw new InvalidScientificInputError(\n \"reduction total geometric-aperture radiant power must match the sum of per-wavelength contributions.\"\n );\n }\n\n return reduction.perWavelength;\n}\n\nfunction validateOperatingRangeNodeBinding(\n reduction:\n SensorSpatioSpectralIrradianceReduction,\n nodes:\n readonly SensorSpatioSpectralWavelengthReduction[],\n operatingRange:\n SensorResponseOperatingRangeAssessment\n): void {\n const evaluated =\n operatingRange\n .evaluatedSpectralNodeInputs;\n\n if (\n evaluated === undefined ||\n evaluated.length !== nodes.length\n ) {\n throw new InvalidScientificInputError(\n \"operatingRange must carry one evaluated spectral-node input for every reduction wavelength node.\"\n );\n }\n\n if (\n operatingRange\n .evaluatedWavelengthRangeNanometers\n .minimum !==\n reduction.wavelengthRangeNanometers\n .minimum ||\n operatingRange\n .evaluatedWavelengthRangeNanometers\n .maximum !==\n reduction.wavelengthRangeNanometers\n .maximum\n ) {\n throw new InvalidScientificInputError(\n \"operatingRange wavelength range must exactly match the reduction.\"\n );\n }\n\n evaluated.forEach(\n (entry, index) => {\n const node = nodes[index]!;\n if (\n entry.spectralSampleIndex !==\n node.spectralSampleIndex ||\n entry.wavelengthNanometers !==\n node.wavelengthNanometers ||\n entry.wavelengthMeasureNanometers !==\n node.wavelengthMeasureNanometers\n ) {\n throw new InvalidScientificInputError(\n \"operatingRange spectral-node identities must exactly match the reduction.\"\n );\n }\n\n const expected =\n operatingRange.inputRange.kind ===\n \"wavelength-integrated-geometric-aperture-radiant-power\"\n ? node\n .wavelengthIntegratedGeometricApertureIncidentFluxContributionWatts\n : node\n .wavelengthIntegratedSpatialAverageContributionWattsPerSquareMeter;\n\n if (\n entry.kind !==\n operatingRange.inputRange.kind ||\n entry.unit !==\n operatingRange.inputRange.unit ||\n !approximatelyEqual(\n entry.value,\n expected\n )\n ) {\n throw new InvalidScientificInputError(\n \"operatingRange spectral-node values must match the reduction values in the calibrated input domain.\"\n );\n }\n }\n );\n}\n\nfunction parseAirContext(\n reduction:\n SensorSpatioSpectralIrradianceReduction,\n nodes:\n readonly SensorSpatioSpectralWavelengthReduction[],\n context:\n SensorEqeAirPhotonEnergyContext |\n undefined\n): ReadonlyMap<\n number,\n SourcedAirPhaseRefractiveIndex\n> {\n if (\n reduction.wavelengthBasis ===\n \"vacuum\"\n ) {\n if (context !== undefined) {\n throw new InvalidScientificInputError(\n \"airPhotonEnergyContext must be omitted for vacuum-basis EQE conversion.\"\n );\n }\n return new Map();\n }\n\n if (\n reduction.wavelengthBasis !== \"air\"\n ) {\n throw new InvalidScientificInputError(\n \"EQE electron-rate conversion requires a resolved air or vacuum wavelength basis.\"\n );\n }\n\n if (\n context === undefined ||\n !Array.isArray(context.samples) ||\n context.samples.length !==\n nodes.length\n ) {\n throw new InvalidScientificInputError(\n \"Air-basis EQE conversion requires exactly one refractive-index sample for every spectral node.\"\n );\n }\n\n const byIndex =\n new Map<\n number,\n SourcedAirPhaseRefractiveIndex\n >();\n\n context.samples.forEach(\n (entry, arrayIndex) => {\n if (\n typeof entry !== \"object\" ||\n entry === null\n ) {\n throw new InvalidConfigurationError(\n \"airPhotonEnergyContext.samples[\" +\n arrayIndex +\n \"] must be an object.\"\n );\n }\n\n const spectralSampleIndex =\n requireSafeNonNegativeInteger(\n entry.spectralSampleIndex,\n \"airPhotonEnergyContext.samples[\" +\n arrayIndex +\n \"].spectralSampleIndex\"\n );\n if (\n spectralSampleIndex >=\n nodes.length ||\n byIndex.has(\n spectralSampleIndex\n )\n ) {\n throw new InvalidScientificInputError(\n \"airPhotonEnergyContext must contain unique in-range spectral sample identities.\"\n );\n }\n byIndex.set(\n spectralSampleIndex,\n entry.refractiveIndex\n );\n }\n );\n\n return byIndex;\n}\n\nfunction responseEvidenceMatches(\n actual:\n readonly EvidenceProvenance[],\n expected:\n readonly EvidenceProvenance[]\n): boolean {\n return (\n canonicalJson(actual) ===\n canonicalJson(expected)\n );\n}\n\nfunction validateResponseBinding(\n resolved:\n ReturnType<\n typeof resolveParsedSensorSpectralResponseAtWavelength\n >[\"value\"],\n reduction:\n SensorSpatioSpectralIrradianceReduction\n): void {\n if (\n resolved.profileId !==\n reduction.responseProfileId ||\n resolved.colorSamplingProfileId !==\n reduction.colorSamplingProfileId ||\n resolved.channelId !==\n reduction.channelId ||\n resolved.sourceResponseKind !==\n reduction.sourceResponseKind ||\n resolved.responseScope !==\n reduction.responseScope ||\n resolved.scientificStatus !==\n reduction.responseScientificStatus\n ) {\n throw new InvalidScientificInputError(\n \"Resolved spectral response metadata must exactly match the response used to construct the reduction.\"\n );\n }\n\n requireEquivalent(\n resolved.uncertainty,\n reduction.responseUncertainty,\n \"Resolved spectral response uncertainty must match the reduction.\"\n );\n\n const expectedEvidence =\n reduction.componentEvidence.spectral;\n if (\n !responseEvidenceMatches(\n resolved.componentEvidence.profile,\n expectedEvidence.profile\n ) ||\n !responseEvidenceMatches(\n resolved.componentEvidence.channel,\n expectedEvidence.channel\n ) ||\n canonicalJson(\n resolved.componentEvidence.curves\n ) !==\n canonicalJson(\n expectedEvidence.curves\n )\n ) {\n throw new InvalidScientificInputError(\n \"Resolved spectral response evidence must match the calibration evidence carried by the reduction.\"\n );\n }\n}\n\nfunction validateExactResponseDataBinding(\n responseProfile:\n SensorSpectralResponseProfile,\n reduction:\n SensorSpatioSpectralIrradianceReduction\n): void {\n const response =\n responseProfile.channels.find(\n (entry) =>\n entry.channelId ===\n reduction.channelId\n );\n if (reduction.responseChannelBinding !== undefined) {\n requireCurrentSensorSpectralResponseChannelBinding(\n reduction.responseChannelBinding\n );\n }\n if (\n response === undefined ||\n reduction.responseChannelBinding ===\n undefined ||\n canonicalJson(\n createSensorSpectralResponseChannelBinding(\n response\n )\n ) !==\n canonicalJson(\n reduction.responseChannelBinding\n )\n ) {\n throw new InvalidScientificInputError(\n \"Supplied spectral response channel data must exactly match the response-channel binding carried by the reduction.\"\n );\n }\n}\n\nfunction requireEqeResponse(\n response:\n ResolvedSensorSpectralResponseValue\n): Extract<\n ResolvedSensorSpectralResponseValue,\n {\n kind:\n \"effective-external-quantum-efficiency\";\n }\n> {\n if (\n response.kind !==\n \"effective-external-quantum-efficiency\"\n ) {\n throw new InvalidScientificInputError(\n \"EQE electron-rate conversion cannot consume A/W spectral responsivity.\"\n );\n }\n return response;\n}\n\n/**\n * Converts the spectral radiant power collected by the site's geometric aperture\n * (before the sensor response) into an incident photon rate and an expected\n * generated electron rate.\n *\n * The response is applied at each wavelength node. One broadband-average QE is\n * never applied to the total power.\n *\n * Integration over exposure time happens later, so all outputs are rates per\n * second, not photon or electron counts.\n */\nexport function calculateSensorEqeElectronRate(\n input:\n CalculateSensorEqeElectronRateInput\n): CalculationResult<SensorEqeElectronRate> {\n requireInputKeys(input, \"calculateSensorEqeElectronRate\", [\"reduction\", \"compatibility\", \"operatingRange\", \"colorSamplingProfile\", \"spectralResponseProfile\", \"airPhotonEnergyContext\"]);\n validateAuthorizationChain(\n input.reduction,\n input.compatibility,\n input.operatingRange\n );\n\n if (\n input.reduction\n .sourceResponseKind ===\n \"effective-spectral-responsivity\"\n ) {\n throw new InvalidScientificInputError(\n \"EQE electron-rate conversion requires an EQE or filter×detector-EQE response, not A/W responsivity.\"\n );\n }\n\n const colorProfile =\n parseSensorColorSamplingProfile(\n input.colorSamplingProfile\n );\n const responseProfile =\n parseSensorSpectralResponseProfile(\n input.spectralResponseProfile\n );\n\n if (\n colorProfile.profileId !==\n input.reduction\n .colorSamplingProfileId ||\n responseProfile.profileId !==\n input.reduction\n .responseProfileId ||\n responseProfile\n .colorSamplingProfileId !==\n colorProfile.profileId\n ) {\n throw new InvalidScientificInputError(\n \"Supplied color/spectral response profiles must exactly match the reduction identities.\"\n );\n }\n\n validateExactResponseDataBinding(\n responseProfile,\n input.reduction\n );\n\n const nodes =\n validateReductionSpectralNodes(\n input.reduction\n );\n validateOperatingRangeNodeBinding(\n input.reduction,\n nodes,\n input.operatingRange\n );\n\n const airIndices =\n parseAirContext(\n input.reduction,\n nodes,\n input.airPhotonEnergyContext\n );\n\n const photonRateSum:\n CompensatedSum = {\n sum: 0,\n correction: 0\n };\n const electronRateSum:\n CompensatedSum = {\n sum: 0,\n correction: 0\n };\n const perWavelength:\n SensorEqeWavelengthRateContribution[] =\n [];\n\n let responseBindingValidated =\n false;\n let channelFilterTransmissionApplied =\n false;\n\n for (const node of nodes) {\n const resolved =\n resolveParsedSensorSpectralResponseAtWavelength({\n colorSamplingProfile:\n colorProfile,\n spectralResponseProfile:\n responseProfile,\n channelId:\n input.reduction.channelId,\n wavelengthNanometers:\n node.wavelengthNanometers,\n wavelengthBasis:\n input.reduction\n .wavelengthBasis\n });\n\n if (!responseBindingValidated) {\n validateResponseBinding(\n resolved.value,\n input.reduction\n );\n responseBindingValidated =\n true;\n }\n\n const eqe =\n requireEqeResponse(\n resolved.value.response\n );\n\n const airIndex =\n airIndices.get(\n node.spectralSampleIndex\n );\n const photonEnergy =\n calculatePhotonEnergyFromWavelength({\n wavelengthNanometers:\n node.wavelengthNanometers,\n wavelengthBasis:\n input.reduction\n .wavelengthBasis,\n ...(input.reduction\n .wavelengthBasis === \"air\"\n ? {\n airPhaseRefractiveIndex:\n airIndex!,\n ...(input.airPhotonEnergyContext!\n .operatingConditions ===\n undefined\n ? {}\n : {\n airOperatingConditions:\n input\n .airPhotonEnergyContext!\n .operatingConditions\n }),\n airConditionPolicy:\n input.airPhotonEnergyContext!\n .conditionPolicy\n }\n : {})\n }).value;\n\n const radiantPowerContributionWatts =\n node\n .geometricApertureIncidentSpectralFluxWattsPerNanometer *\n node.wavelengthMeasureNanometers;\n const incidentPhotonRatePerSecond =\n radiantPowerContributionWatts /\n photonEnergy.photonEnergyJoules;\n const expectedGeneratedElectronRatePerSecond =\n incidentPhotonRatePerSecond *\n eqe.externalQuantumEfficiency;\n\n if (\n !Number.isFinite(\n radiantPowerContributionWatts\n ) ||\n !Number.isFinite(\n incidentPhotonRatePerSecond\n ) ||\n !Number.isFinite(\n expectedGeneratedElectronRatePerSecond\n )\n ) {\n throw new InvalidScientificInputError(\n \"EQE wavelength-node rate calculation must remain finite.\"\n );\n }\n\n addCompensated(\n photonRateSum,\n incidentPhotonRatePerSecond\n );\n addCompensated(\n electronRateSum,\n expectedGeneratedElectronRatePerSecond\n );\n\n if (\n eqe.composition ===\n \"channel-filter-transmittance-times-detector-eqe\"\n ) {\n channelFilterTransmissionApplied =\n true;\n }\n\n perWavelength.push({\n spectralSampleIndex:\n node.spectralSampleIndex,\n wavelengthNanometers:\n node.wavelengthNanometers,\n wavelengthMeasureNanometers:\n node.wavelengthMeasureNanometers,\n geometricApertureIncidentSpectralFluxWattsPerNanometer:\n node\n .geometricApertureIncidentSpectralFluxWattsPerNanometer,\n radiantPowerContributionWatts,\n vacuumWavelengthNanometers:\n photonEnergy\n .vacuumWavelengthNanometers,\n photonEnergyJoules:\n photonEnergy\n .photonEnergyJoules,\n wavelengthConversion:\n photonEnergy\n .wavelengthConversion,\n ...(photonEnergy\n .phaseRefractiveIndexUsed ===\n undefined\n ? {}\n : {\n phaseRefractiveIndexUsed:\n photonEnergy\n .phaseRefractiveIndexUsed\n }),\n ...(photonEnergy\n .airConditionCompatibility ===\n undefined\n ? {}\n : {\n airConditionCompatibility:\n photonEnergy\n .airConditionCompatibility\n }),\n ...(photonEnergy\n .airRefractiveIndexEvidence ===\n undefined\n ? {}\n : {\n airRefractiveIndexEvidence:\n photonEnergy\n .airRefractiveIndexEvidence\n }),\n incidentPhotonRatePerSecond,\n effectiveExternalQuantumEfficiency:\n eqe.externalQuantumEfficiency,\n responseComposition:\n eqe.composition,\n ...(eqe.channelFilterTransmittance ===\n undefined\n ? {}\n : {\n channelFilterTransmittance:\n eqe.channelFilterTransmittance\n }),\n ...(eqe\n .detectorExternalQuantumEfficiency ===\n undefined\n ? {}\n : {\n detectorExternalQuantumEfficiency:\n eqe\n .detectorExternalQuantumEfficiency\n }),\n responseInterpolationUsed:\n resolved.value\n .interpolationUsed,\n expectedGeneratedElectronRatePerSecond\n });\n }\n\n if (\n !Number.isFinite(\n photonRateSum.sum\n ) ||\n !Number.isFinite(\n electronRateSum.sum\n )\n ) {\n throw new InvalidScientificInputError(\n \"Total EQE photon/electron rates must remain finite.\"\n );\n }\n\n return approximationResult(\n {\n colorSamplingProfileId:\n input.reduction\n .colorSamplingProfileId,\n responseProfileId:\n input.reduction\n .responseProfileId,\n responseApplicationProfileId:\n input.compatibility\n .applicationProfileId,\n operatingRangeProfileId:\n input.operatingRange\n .operatingRangeProfileId,\n site: {\n ...input.reduction.site\n },\n channelId:\n input.reduction.channelId,\n sourceResponseKind:\n input.reduction\n .sourceResponseKind,\n responseScope:\n input.reduction.responseScope,\n responseReferencePlane:\n input.compatibility\n .requiredSourcePlane,\n wavelengthBasis:\n input.reduction\n .wavelengthBasis,\n wavelengthRangeNanometers: {\n ...input.reduction\n .wavelengthRangeNanometers\n },\n spectralNodeCount:\n nodes.length,\n perWavelength,\n incidentPhotonRatePerSecond:\n photonRateSum.sum,\n expectedGeneratedElectronRatePerSecond:\n electronRateSum.sum,\n summationMethod:\n \"kahan-compensated\",\n responseApplicationPerformed:\n true,\n quantumEfficiencyApplied:\n true,\n spectralResponsivityApplied:\n false,\n channelFilterTransmissionApplied,\n photonRateCalculated: true,\n electronRateCalculated: true,\n photonCountCalculated: false,\n electronCountCalculated: false,\n currentCalculated: false,\n temporalIntegrationApplied:\n false,\n exposureDurationApplied: false,\n saturationAssessed: false,\n shotNoiseApplied: false,\n readNoiseApplied: false,\n adcQuantizationApplied:\n false,\n rawCodeValueProduced: false,\n responseUncertaintyPropagated:\n false,\n photonEnergyUncertaintyPropagated:\n false,\n quadratureConvergenceErrorEstimated:\n false\n },\n \"sensor-eqe-electron-rate\",\n \"1.0.0\",\n [\n \"Response is evaluated independently at every wavelength quadrature node; broadband radiant power is never multiplied by an average QE.\",\n \"Each node converts radiant power to photon rate using photon energy hν, then applies effective external QE to obtain expected generated-electron rate.\",\n \"Direct effective EQE is preserved as direct response; explicitly separable channel-filter transmittance × detector EQE is multiplied only through the existing spectral-response resolver.\",\n \"The response calibration metadata/evidence must match the spectral evidence carried by the pre-response reduction; matching profile IDs alone is insufficient.\",\n \"The structural compatibility and operating-range assessments must both be non-blocked and authorize the photon-rate→electron path.\",\n \"Operating-range authorization must be per spectral bin, with spectral-node identities and calibrated-domain values bound back to the exact reduction used for conversion.\",\n \"Operating-range authorization must establish linear superposition over the geometric aperture so spatial reduction may precede response application without hiding sub-aperture nonlinear behavior.\",\n \"Air-basis spectral nodes require one exact-wavelength sourced phase refractive index per spectral sample plus the photon-energy atmosphere compatibility policy.\",\n \"Kahan compensated summation is used across wavelength nodes to reduce loss of small contributions when rates span large dynamic ranges.\",\n \"Outputs are instantaneous expected rates only. Exposure duration, photon/electron counts, full-well saturation, shot/read noise, ADC/RAW conversion and reconstruction remain downstream.\",\n \"Response/refractive-index uncertainties and quadrature convergence error are not propagated into a combined output uncertainty by this version.\"\n ]\n );\n}\n"]}
@@ -1,10 +1,10 @@
1
1
  /**
2
- * Module boundary and integration notes.
3
- * Compose validated irradiance reduction, response applicability/range, EQE conversion and stationary
4
- * local integration. The exposure value is suitable for accumulated-charge photoSignal;
5
- * dark/completeness/capacity/readout remain explicit downstream inputs. Invalid or unsupported
6
- * evidence fails closed.
7
- * Internal shared instantaneous path; no stationarity or exposure accumulation.
2
+ * Photo signal for one site over one exposure, assuming constant light. It chains four existing steps:
3
+ * reduce irradiance samples over the site, check the response applies and is in range, convert with
4
+ * EQE (external quantum efficiency), and integrate the constant rate over the local exposure.
5
+ *
6
+ * The result can be used as the photoSignal for accumulated charge. Dark current, completeness,
7
+ * capacity and readout are separate later inputs. Invalid or unsupported evidence is rejected.
8
8
  * @see docs/MOTION_AND_SIGNAL.md for equations, coordinate/unit conventions, blockers and support
9
9
  * limits.
10
10
  */
@@ -17,30 +17,30 @@ import { assessSensorResponseOperatingRange, type AssessSensorResponseOperatingR
17
17
  import { calculateSensorEqeElectronRate, type CalculateSensorEqeElectronRateInput } from "./eqe-electron-rate.js";
18
18
  import { bindSensorRateToLocalExposure, type BindSensorRateToLocalExposureInput } from "./local-exposure-binding.js";
19
19
  import { type SensorEqeExposureIntegration, type SensorRateTemporalStationarityProfile } from "./constant-rate-temporal-integration.js";
20
- /** Explicit post-optics irradiance samples and evidence; no renderer or RGB conversion. */
20
+ /** Input: explicit irradiance samples after the optics, with evidence. No renderer or RGB conversion is involved. */
21
21
  export interface CalculateSensorEqeLocalExposureInput {
22
- /** Physical area, registered aperture/lattice, AA support and destination site. */
22
+ /** Physical area, the site's aperture on its grid, anti-aliasing (AA) support and the destination site. */
23
23
  spatialSampling: Omit<CalculateSensorSpatialSamplingQuadratureInput, "colorSamplingProfile" | "colorSamplingBindingProfile" | "nativeRaster">;
24
- /** Explicit wavelength basis/range, channel and midpoint subdivision budget. */
24
+ /** Wavelength basis and range, channel, and the budget for midpoint subdivisions. */
25
25
  spectralSampling: Omit<CalculateSensorSpectralQuadratureInput, "colorSamplingProfile" | "spectralResponseProfile">;
26
- /** One W/m²/nm value per identified pre-AA spatial/spectral node. */
26
+ /** One value in W/m²/nm for each identified spatial and spectral node, before anti-aliasing. */
27
27
  irradianceSamples: ReduceSensorSpatioSpectralIrradianceInput["sampleValues"];
28
- /** Source-plane, collection-area and reference-condition evidence. */
28
+ /** Evidence about the source plane, collection area and reference conditions of the response data. */
29
29
  responseApplication: Omit<AssessSensorResponseApplicationCompatibilityInput, "reduction">;
30
- /** Evidence-backed linear response domain; no extrapolation is authorized. */
30
+ /** Evidence-backed range in which the response is linear. No extrapolation beyond it is allowed. */
31
31
  operatingRangeProfile: AssessSensorResponseOperatingRangeInput["operatingRangeProfile"];
32
- /** Destination CFA/channel identity shared by every composed step. */
32
+ /** The destination CFA site and channel, shared by every step. */
33
33
  colorSamplingProfile: CalculateSensorEqeElectronRateInput["colorSamplingProfile"];
34
- /** Direct or separable EQE response; A/W responsivity is unsupported here. */
34
+ /** EQE response, given directly or as separable factors. A/W responsivity is not supported here. */
35
35
  spectralResponseProfile: CalculateSensorEqeElectronRateInput["spectralResponseProfile"];
36
- /** Required explicit photon-energy conversion context for air wavelengths. */
36
+ /** Required for air wavelengths: the explicit context for converting to photon energy. */
37
37
  airPhotonEnergyContext?: CalculateSensorEqeElectronRateInput["airPhotonEnergyContext"];
38
- /** Native one-to-one site binding and one opening/closing shutter event. */
38
+ /** One-to-one native site binding and one shutter opening and closing. */
39
39
  localExposure: Omit<BindSensorRateToLocalExposureInput, "rate" | "colorSamplingProfile">;
40
- /** Separate declaration authorizing a constant rate across this exact window. */
40
+ /** A separate declaration that the rate is constant over this exact window. */
41
41
  stationarityProfile: SensorRateTemporalStationarityProfile;
42
42
  }
43
- /** Child envelopes retain separate provenance, validity and unpropagated uncertainty. */
43
+ /** Result. Each step's result keeps its own provenance, validity and uncertainty; uncertainties are not combined. */
44
44
  export interface SensorEqeLocalExposure {
45
45
  upstreamOrigin: "declared-spatio-spectral-irradiance-samples";
46
46
  upstreamSceneAndOpticsVerified: false;
@@ -54,12 +54,12 @@ export interface SensorEqeLocalExposure {
54
54
  exposure: CalculationResult<SensorEqeExposureIntegration>;
55
55
  }
56
56
  /**
57
- * Compose validated irradiance reduction, response applicability/range, EQE
58
- * conversion and stationary local integration. The exposure value is suitable
59
- * for accumulated-charge photoSignal; dark/completeness/capacity/readout remain
60
- * explicit downstream inputs. Invalid or unsupported evidence fails closed.
57
+ * Runs irradiance reduction, the response applicability and range checks, EQE
58
+ * conversion and constant-rate integration over the local exposure. The result
59
+ * can be the photoSignal for accumulated charge. Dark current, completeness,
60
+ * capacity and readout are separate later inputs. Invalid or unsupported
61
+ * evidence is rejected.
61
62
  */
62
63
  export declare function calculateSensorEqeLocalExposure(input: CalculateSensorEqeLocalExposureInput): CalculationResult<SensorEqeLocalExposure>;
63
- /** Internal shared instantaneous path; no stationarity or exposure accumulation. */
64
+ /** Internal: the same chain for one instant (a rate). No stationarity check and no integration over the exposure. */
64
65
  export declare function calculateSensorEqeLocalRate(input: Omit<CalculateSensorEqeLocalExposureInput, "stationarityProfile">): Omit<SensorEqeLocalExposure, "upstreamOrigin" | "upstreamSceneAndOpticsVerified" | "exposure">;
65
- //# sourceMappingURL=eqe-local-exposure.d.ts.map
@@ -1,11 +1,11 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  /**
3
- * Module boundary and integration notes.
4
- * Compose validated irradiance reduction, response applicability/range, EQE conversion and stationary
5
- * local integration. The exposure value is suitable for accumulated-charge photoSignal;
6
- * dark/completeness/capacity/readout remain explicit downstream inputs. Invalid or unsupported
7
- * evidence fails closed.
8
- * Internal shared instantaneous path; no stationarity or exposure accumulation.
3
+ * Photo signal for one site over one exposure, assuming constant light. It chains four existing steps:
4
+ * reduce irradiance samples over the site, check the response applies and is in range, convert with
5
+ * EQE (external quantum efficiency), and integrate the constant rate over the local exposure.
6
+ *
7
+ * The result can be used as the photoSignal for accumulated charge. Dark current, completeness,
8
+ * capacity and readout are separate later inputs. Invalid or unsupported evidence is rejected.
9
9
  * @see docs/MOTION_AND_SIGNAL.md for equations, coordinate/unit conventions, blockers and support
10
10
  * limits.
11
11
  */
@@ -19,13 +19,16 @@ import { assessSensorResponseOperatingRange } from "./response-operating-range.j
19
19
  import { calculateSensorEqeElectronRate } from "./eqe-electron-rate.js";
20
20
  import { bindSensorRateToLocalExposure } from "./local-exposure-binding.js";
21
21
  import { integrateStationarySensorRateOverLocalExposure } from "./constant-rate-temporal-integration.js";
22
+ import { requireInputObject, requireInputKeys } from "../core/record-validation.js";
22
23
  /**
23
- * Compose validated irradiance reduction, response applicability/range, EQE
24
- * conversion and stationary local integration. The exposure value is suitable
25
- * for accumulated-charge photoSignal; dark/completeness/capacity/readout remain
26
- * explicit downstream inputs. Invalid or unsupported evidence fails closed.
24
+ * Runs irradiance reduction, the response applicability and range checks, EQE
25
+ * conversion and constant-rate integration over the local exposure. The result
26
+ * can be the photoSignal for accumulated charge. Dark current, completeness,
27
+ * capacity and readout are separate later inputs. Invalid or unsupported
28
+ * evidence is rejected.
27
29
  */
28
30
  export function calculateSensorEqeLocalExposure(input) {
31
+ requireInputKeys(input, "calculateSensorEqeLocalExposure", ["spatialSampling", "spectralSampling", "irradianceSamples", "responseApplication", "operatingRangeProfile", "colorSamplingProfile", "spectralResponseProfile", "airPhotonEnergyContext", "localExposure", "stationarityProfile"]);
29
32
  const stages = calculateSensorEqeLocalRate(input);
30
33
  const { spatialQuadrature, spectralQuadrature, reduction, compatibility, operatingRange, electronRate, exposureBinding } = stages;
31
34
  const exposure = integrateStationarySensorRateOverLocalExposure({
@@ -46,8 +49,9 @@ export function calculateSensorEqeLocalExposure(input) {
46
49
  "Uncertainty and quadrature convergence errors are not propagated or combined."
47
50
  ]);
48
51
  }
49
- /** Internal shared instantaneous path; no stationarity or exposure accumulation. */
52
+ /** Internal: the same chain for one instant (a rate). No stationarity check and no integration over the exposure. */
50
53
  export function calculateSensorEqeLocalRate(input) {
54
+ requireInputObject(input.localExposure, "localExposure");
51
55
  const spatialQuadrature = calculateSensorSpatialSamplingQuadrature({
52
56
  ...input.spatialSampling, colorSamplingProfile: input.colorSamplingProfile,
53
57
  colorSamplingBindingProfile: input.localExposure.bindingProfile,
@@ -1 +1 @@
1
- {"version":3,"file":"eqe-local-exposure.js","sourceRoot":"","sources":["../../src/sensor/eqe-local-exposure.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"eqe-local-exposure.js","sourceRoot":"","sources":["../../src/sensor/eqe-local-exposure.ts"],"names":[],"mappings":"AAAA,sCAAsC;AAEtC;;;;;;;;;GASG;AAEH,OAAO,EAAE,mBAAmB,EAA0B,MAAM,+BAA+B,CAAC;AAC5F,OAAO,EAAE,2BAA2B,EAAE,MAAM,uBAAuB,CAAC;AACpE,OAAO,EAAE,wCAAwC,EAAsD,MAAM,kCAAkC,CAAC;AAChJ,OAAO,EAAE,iCAAiC,EAA+C,MAAM,0BAA0B,CAAC;AAC1H,OAAO,EAAE,oCAAoC,EAAkD,MAAM,gCAAgC,CAAC;AACtI,OAAO,EAAE,4CAA4C,EAA0D,MAAM,yCAAyC,CAAC;AAC/J,OAAO,EAAE,kCAAkC,EAAgD,MAAM,+BAA+B,CAAC;AACjI,OAAO,EAAE,8BAA8B,EAA4C,MAAM,wBAAwB,CAAC;AAClH,OAAO,EAAE,6BAA6B,EAA2C,MAAM,6BAA6B,CAAC;AACrH,OAAO,EAAE,8CAA8C,EAAiF,MAAM,yCAAyC,CAAC;AACxL,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AA0CpF;;;;;;GAMG;AACH,MAAM,UAAU,+BAA+B,CAC7C,KAA2C;IAE3C,gBAAgB,CAAC,KAAK,EAAE,iCAAiC,EAAE,CAAC,iBAAiB,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,sBAAsB,EAAE,yBAAyB,EAAE,wBAAwB,EAAE,eAAe,EAAE,qBAAqB,CAAC,CAAC,CAAC;IAC9R,MAAM,MAAM,GAAG,2BAA2B,CAAC,KAAK,CAAC,CAAC;IAClD,MAAM,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,SAAS,EAAE,aAAa,EAAE,cAAc,EAAE,YAAY,EAAE,eAAe,EAAE,GAAG,MAAM,CAAC;IAClI,MAAM,QAAQ,GAAG,8CAA8C,CAAC;QAC9D,IAAI,EAAE,YAAY,CAAC,KAAK,EAAE,eAAe,EAAE,eAAe,CAAC,KAAK;QAChE,mBAAmB,EAAE,KAAK,CAAC,mBAAmB;KAC/C,CAAC,CAAC;IACH,IAAI,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,qBAAqB,EAAE,CAAC;QAClD,MAAM,IAAI,2BAA2B,CAAC,uDAAuD,CAAC,CAAC;IACjG,CAAC;IACD,OAAO,mBAAmB,CAAC;QACzB,cAAc,EAAE,6CAA6C;QAC7D,8BAA8B,EAAE,KAAK;QACrC,iBAAiB,EAAE,kBAAkB,EAAE,SAAS,EAAE,aAAa,EAAE,cAAc,EAAE,YAAY,EAAE,eAAe;QAC9G,QAAQ,EAAE,EAAE,GAAG,QAAQ,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE;KACjD,EAAE,uCAAuC,EAAE,OAAO,EAAE;QACnD,qFAAqF;QACrF,+FAA+F;QAC/F,+EAA+E;KAChF,CAAC,CAAC;AACL,CAAC;AAED,qHAAqH;AACrH,MAAM,UAAU,2BAA2B,CACzC,KAAwE;IAExE,kBAAkB,CAAC,KAAK,CAAC,aAAa,EAAE,eAAe,CAAC,CAAC;IACzD,MAAM,iBAAiB,GAAG,wCAAwC,CAAC;QACjE,GAAG,KAAK,CAAC,eAAe,EAAE,oBAAoB,EAAE,KAAK,CAAC,oBAAoB;QAC1E,2BAA2B,EAAE,KAAK,CAAC,aAAa,CAAC,cAAc;QAC/D,YAAY,EAAE,KAAK,CAAC,aAAa,CAAC,mBAAmB,CAAC,YAAY;KACnE,CAAC,CAAC;IACH,MAAM,kBAAkB,GAAG,iCAAiC,CAAC;QAC3D,GAAG,KAAK,CAAC,gBAAgB,EAAE,oBAAoB,EAAE,KAAK,CAAC,oBAAoB;QAC3E,uBAAuB,EAAE,KAAK,CAAC,uBAAuB;KACvD,CAAC,CAAC;IACH,MAAM,SAAS,GAAG,oCAAoC,CAAC;QACrD,iBAAiB,EAAE,iBAAiB,CAAC,KAAK,EAAE,kBAAkB,EAAE,kBAAkB,CAAC,KAAK;QACxF,YAAY,EAAE,KAAK,CAAC,iBAAiB;KACtC,CAAC,CAAC;IACH,MAAM,aAAa,GAAG,4CAA4C,CAAC;QACjE,GAAG,KAAK,CAAC,mBAAmB,EAAE,SAAS,EAAE,SAAS,CAAC,KAAK;KACzD,CAAC,CAAC;IACH,MAAM,cAAc,GAAG,kCAAkC,CAAC;QACxD,SAAS,EAAE,SAAS,CAAC,KAAK,EAAE,aAAa,EAAE,aAAa,CAAC,KAAK;QAC9D,qBAAqB,EAAE,KAAK,CAAC,qBAAqB;KACnD,CAAC,CAAC;IACH,MAAM,YAAY,GAAG,8BAA8B,CAAC;QAClD,SAAS,EAAE,SAAS,CAAC,KAAK,EAAE,aAAa,EAAE,aAAa,CAAC,KAAK;QAC9D,cAAc,EAAE,cAAc,CAAC,KAAK;QACpC,oBAAoB,EAAE,KAAK,CAAC,oBAAoB;QAChD,uBAAuB,EAAE,KAAK,CAAC,uBAAuB;QACtD,GAAG,CAAC,KAAK,CAAC,sBAAsB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,sBAAsB,EAAE,KAAK,CAAC,sBAAsB,EAAE,CAAC;KAChH,CAAC,CAAC;IACH,MAAM,eAAe,GAAG,6BAA6B,CAAC;QACpD,GAAG,KAAK,CAAC,aAAa,EAAE,IAAI,EAAE,YAAY,CAAC,KAAK;QAChD,oBAAoB,EAAE,KAAK,CAAC,oBAAoB;KACjD,CAAC,CAAC;IACH,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,SAAS,EAAE,aAAa,EAAE,cAAc,EAAE,YAAY,EAAE,eAAe,EAAE,CAAC;AAC5H,CAAC","sourcesContent":["// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Photo signal for one site over one exposure, assuming constant light. It chains four existing steps:\n * reduce irradiance samples over the site, check the response applies and is in range, convert with\n * EQE (external quantum efficiency), and integrate the constant rate over the local exposure.\n *\n * The result can be used as the photoSignal for accumulated charge. Dark current, completeness,\n * capacity and readout are separate later inputs. Invalid or unsupported evidence is rejected.\n * @see docs/MOTION_AND_SIGNAL.md for equations, coordinate/unit conventions, blockers and support\n * limits.\n */\n\nimport { approximationResult, type CalculationResult } from \"../core/calculation-result.js\";\nimport { InvalidScientificInputError } from \"../core/validation.js\";\nimport { calculateSensorSpatialSamplingQuadrature, type CalculateSensorSpatialSamplingQuadratureInput } from \"./spatial-sampling-quadrature.js\";\nimport { calculateSensorSpectralQuadrature, type CalculateSensorSpectralQuadratureInput } from \"./spectral-quadrature.js\";\nimport { reduceSensorSpatioSpectralIrradiance, type ReduceSensorSpatioSpectralIrradianceInput } from \"./spatio-spectral-reduction.js\";\nimport { assessSensorResponseApplicationCompatibility, type AssessSensorResponseApplicationCompatibilityInput } from \"./response-application-compatibility.js\";\nimport { assessSensorResponseOperatingRange, type AssessSensorResponseOperatingRangeInput } from \"./response-operating-range.js\";\nimport { calculateSensorEqeElectronRate, type CalculateSensorEqeElectronRateInput } from \"./eqe-electron-rate.js\";\nimport { bindSensorRateToLocalExposure, type BindSensorRateToLocalExposureInput } from \"./local-exposure-binding.js\";\nimport { integrateStationarySensorRateOverLocalExposure, type SensorEqeExposureIntegration, type SensorRateTemporalStationarityProfile } from \"./constant-rate-temporal-integration.js\";\nimport { requireInputObject, requireInputKeys } from \"../core/record-validation.js\";\n\n/** Input: explicit irradiance samples after the optics, with evidence. No renderer or RGB conversion is involved. */\nexport interface CalculateSensorEqeLocalExposureInput {\n /** Physical area, the site's aperture on its grid, anti-aliasing (AA) support and the destination site. */\n spatialSampling: Omit<CalculateSensorSpatialSamplingQuadratureInput,\n \"colorSamplingProfile\" | \"colorSamplingBindingProfile\" | \"nativeRaster\">;\n /** Wavelength basis and range, channel, and the budget for midpoint subdivisions. */\n spectralSampling: Omit<CalculateSensorSpectralQuadratureInput,\n \"colorSamplingProfile\" | \"spectralResponseProfile\">;\n /** One value in W/m²/nm for each identified spatial and spectral node, before anti-aliasing. */\n irradianceSamples: ReduceSensorSpatioSpectralIrradianceInput[\"sampleValues\"];\n /** Evidence about the source plane, collection area and reference conditions of the response data. */\n responseApplication: Omit<AssessSensorResponseApplicationCompatibilityInput, \"reduction\">;\n /** Evidence-backed range in which the response is linear. No extrapolation beyond it is allowed. */\n operatingRangeProfile: AssessSensorResponseOperatingRangeInput[\"operatingRangeProfile\"];\n /** The destination CFA site and channel, shared by every step. */\n colorSamplingProfile: CalculateSensorEqeElectronRateInput[\"colorSamplingProfile\"];\n /** EQE response, given directly or as separable factors. A/W responsivity is not supported here. */\n spectralResponseProfile: CalculateSensorEqeElectronRateInput[\"spectralResponseProfile\"];\n /** Required for air wavelengths: the explicit context for converting to photon energy. */\n airPhotonEnergyContext?: CalculateSensorEqeElectronRateInput[\"airPhotonEnergyContext\"];\n /** One-to-one native site binding and one shutter opening and closing. */\n localExposure: Omit<BindSensorRateToLocalExposureInput, \"rate\" | \"colorSamplingProfile\">;\n /** A separate declaration that the rate is constant over this exact window. */\n stationarityProfile: SensorRateTemporalStationarityProfile;\n}\n\n/** Result. Each step's result keeps its own provenance, validity and uncertainty; uncertainties are not combined. */\nexport interface SensorEqeLocalExposure {\n upstreamOrigin: \"declared-spatio-spectral-irradiance-samples\";\n upstreamSceneAndOpticsVerified: false;\n spatialQuadrature: ReturnType<typeof calculateSensorSpatialSamplingQuadrature>;\n spectralQuadrature: ReturnType<typeof calculateSensorSpectralQuadrature>;\n reduction: ReturnType<typeof reduceSensorSpatioSpectralIrradiance>;\n compatibility: ReturnType<typeof assessSensorResponseApplicationCompatibility>;\n operatingRange: ReturnType<typeof assessSensorResponseOperatingRange>;\n electronRate: ReturnType<typeof calculateSensorEqeElectronRate>;\n exposureBinding: ReturnType<typeof bindSensorRateToLocalExposure>;\n exposure: CalculationResult<SensorEqeExposureIntegration>;\n}\n\n/**\n * Runs irradiance reduction, the response applicability and range checks, EQE\n * conversion and constant-rate integration over the local exposure. The result\n * can be the photoSignal for accumulated charge. Dark current, completeness,\n * capacity and readout are separate later inputs. Invalid or unsupported\n * evidence is rejected.\n */\nexport function calculateSensorEqeLocalExposure(\n input: CalculateSensorEqeLocalExposureInput\n): CalculationResult<SensorEqeLocalExposure> {\n requireInputKeys(input, \"calculateSensorEqeLocalExposure\", [\"spatialSampling\", \"spectralSampling\", \"irradianceSamples\", \"responseApplication\", \"operatingRangeProfile\", \"colorSamplingProfile\", \"spectralResponseProfile\", \"airPhotonEnergyContext\", \"localExposure\", \"stationarityProfile\"]);\n const stages = calculateSensorEqeLocalRate(input);\n const { spatialQuadrature, spectralQuadrature, reduction, compatibility, operatingRange, electronRate, exposureBinding } = stages;\n const exposure = integrateStationarySensorRateOverLocalExposure({\n rate: electronRate.value, exposureBinding: exposureBinding.value,\n stationarityProfile: input.stationarityProfile\n });\n if (exposure.value.kind !== \"eqe-expected-counts\") {\n throw new InvalidScientificInputError(\"EQE local exposure requires expected electron counts.\");\n }\n return approximationResult({\n upstreamOrigin: \"declared-spatio-spectral-irradiance-samples\",\n upstreamSceneAndOpticsVerified: false,\n spatialQuadrature, spectralQuadrature, reduction, compatibility, operatingRange, electronRate, exposureBinding,\n exposure: { ...exposure, value: exposure.value }\n }, \"sensor-eqe-local-exposure-composition\", \"0.1.0\", [\n \"Irradiance node values and upstream scene/optics origin are declared, not verified.\",\n \"Finite quadrature and explicit response/stationarity evidence retain their child limitations.\",\n \"Uncertainty and quadrature convergence errors are not propagated or combined.\"\n ]);\n}\n\n/** Internal: the same chain for one instant (a rate). No stationarity check and no integration over the exposure. */\nexport function calculateSensorEqeLocalRate(\n input: Omit<CalculateSensorEqeLocalExposureInput, \"stationarityProfile\">\n): Omit<SensorEqeLocalExposure, \"upstreamOrigin\" | \"upstreamSceneAndOpticsVerified\" | \"exposure\"> {\n requireInputObject(input.localExposure, \"localExposure\");\n const spatialQuadrature = calculateSensorSpatialSamplingQuadrature({\n ...input.spatialSampling, colorSamplingProfile: input.colorSamplingProfile,\n colorSamplingBindingProfile: input.localExposure.bindingProfile,\n nativeRaster: input.localExposure.exposureWindowInput.nativeRaster\n });\n const spectralQuadrature = calculateSensorSpectralQuadrature({\n ...input.spectralSampling, colorSamplingProfile: input.colorSamplingProfile,\n spectralResponseProfile: input.spectralResponseProfile\n });\n const reduction = reduceSensorSpatioSpectralIrradiance({\n spatialQuadrature: spatialQuadrature.value, spectralQuadrature: spectralQuadrature.value,\n sampleValues: input.irradianceSamples\n });\n const compatibility = assessSensorResponseApplicationCompatibility({\n ...input.responseApplication, reduction: reduction.value\n });\n const operatingRange = assessSensorResponseOperatingRange({\n reduction: reduction.value, compatibility: compatibility.value,\n operatingRangeProfile: input.operatingRangeProfile\n });\n const electronRate = calculateSensorEqeElectronRate({\n reduction: reduction.value, compatibility: compatibility.value,\n operatingRange: operatingRange.value,\n colorSamplingProfile: input.colorSamplingProfile,\n spectralResponseProfile: input.spectralResponseProfile,\n ...(input.airPhotonEnergyContext === undefined ? {} : { airPhotonEnergyContext: input.airPhotonEnergyContext })\n });\n const exposureBinding = bindSensorRateToLocalExposure({\n ...input.localExposure, rate: electronRate.value,\n colorSamplingProfile: input.colorSamplingProfile\n });\n return { spatialQuadrature, spectralQuadrature, reduction, compatibility, operatingRange, electronRate, exposureBinding };\n}\n"]}
@@ -1,17 +1,17 @@
1
1
  import { type CalculationResult } from "../core/calculation-result.js";
2
2
  import { calculateSensorEqeLocalRate, type CalculateSensorEqeLocalExposureInput } from "./eqe-local-exposure.js";
3
- /** Shared response/site/shutter state, with separately evaluated physical light at each time. */
3
+ /** Input: shared response, site and shutter settings, plus the light evaluated separately at each time. */
4
4
  export interface CalculateSensorEqeTemporalExposureInput extends Omit<CalculateSensorEqeLocalExposureInput, "irradianceSamples" | "stationarityProfile"> {
5
- /** Complete uniform-midpoint coverage; array order is not temporal identity. */
5
+ /** One sample for every uniform midpoint time. Array order does not define which time a sample is. */
6
6
  samples: readonly {
7
7
  temporalSampleIndex: number;
8
- /** Seconds on the shutter's first-opening-boundary-phase reference. */
8
+ /** Seconds from the shutter's reference time (the first opening boundary). */
9
9
  timeSecondsFromOpeningReference: number;
10
- /** Complete W/m²/nm Cartesian irradiance coverage for this instant. */
10
+ /** Irradiance in W/m²/nm at every spatial × spectral node, for this instant. */
11
11
  irradianceSamples: CalculateSensorEqeLocalExposureInput["irradianceSamples"];
12
12
  }[];
13
13
  }
14
- /** Nonstationary photo expectation, deliberately distinct from stationary RAW producer inputs. */
14
+ /** Expected photo signal with light that varies over time. Kept separate from the constant-rate inputs of the RAW producer. */
15
15
  export interface SensorEqeTemporalExposure {
16
16
  kind: "eqe-temporal-quadrature-expected-counts";
17
17
  colorSamplingProfileId: string;
@@ -36,7 +36,7 @@ export interface SensorEqeTemporalExposure {
36
36
  physicalFullWellAssessmentAuthorized: false;
37
37
  shotNoiseApplied: false;
38
38
  rawCodeValueProduced: false;
39
- /** Canonical order, seconds-valued integration measures and independent child evidence. */
39
+ /** Samples in canonical order, each with its time step in seconds and its own evidence. */
40
40
  samples: readonly {
41
41
  temporalSampleIndex: number;
42
42
  timeSecondsFromOpeningReference: number;
@@ -46,10 +46,10 @@ export interface SensorEqeTemporalExposure {
46
46
  }[];
47
47
  }
48
48
  /**
49
- * Evaluate response validity and EQE independently at each declared shutter
50
- * midpoint, then sum rates times seconds. This is quadrature, not a stationarity
51
- * claim or convergence proof. Shared profile/geometry state prevents combining
52
- * rates from different sites or shutter events. No renderer executes here.
49
+ * Runs the response checks and EQE conversion separately at each declared
50
+ * midpoint time, then sums rate × time step. This is numerical quadrature. It does
51
+ * not claim the light is constant or prove convergence. Shared profile and
52
+ * geometry stop rates from different sites or shutter events being mixed. No
53
+ * renderer runs here.
53
54
  */
54
55
  export declare function calculateSensorEqeTemporalExposure(input: CalculateSensorEqeTemporalExposureInput): CalculationResult<SensorEqeTemporalExposure>;
55
- //# sourceMappingURL=eqe-temporal-exposure.d.ts.map
@@ -1,10 +1,12 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  /**
3
- * Module boundary and integration notes.
4
- * Evaluate response validity and EQE independently at each declared shutter midpoint, then sum rates
5
- * times seconds. This is quadrature, not a stationarity claim or convergence proof. Shared
6
- * profile/geometry state prevents combining rates from different sites or shutter events. No renderer
7
- * executes here.
3
+ * Photo signal for one site over one exposure when the light changes over time.
4
+ *
5
+ * The response checks and EQE (external quantum efficiency) conversion run separately at each
6
+ * declared midpoint time of the shutter interval. The rates are then multiplied by their time steps
7
+ * and summed (numerical quadrature). This does not claim the light is constant, and does not prove
8
+ * the sum has converged. All samples share one profile and geometry, so rates from different sites
9
+ * or shutter events cannot be mixed. No renderer runs here.
8
10
  * @see docs/MOTION_AND_SIGNAL.md for equations, coordinate/unit conventions, blockers and support
9
11
  * limits.
10
12
  */
@@ -13,13 +15,16 @@ import { bindSensorTemporalSamples } from "./temporal-sample-binding.js";
13
15
  import { approximationResult } from "../core/calculation-result.js";
14
16
  import { InvalidScientificInputError } from "../core/validation.js";
15
17
  import { calculateSensorEqeLocalRate } from "./eqe-local-exposure.js";
18
+ import { requireInputKeys } from "../core/record-validation.js";
16
19
  /**
17
- * Evaluate response validity and EQE independently at each declared shutter
18
- * midpoint, then sum rates times seconds. This is quadrature, not a stationarity
19
- * claim or convergence proof. Shared profile/geometry state prevents combining
20
- * rates from different sites or shutter events. No renderer executes here.
20
+ * Runs the response checks and EQE conversion separately at each declared
21
+ * midpoint time, then sums rate × time step. This is numerical quadrature. It does
22
+ * not claim the light is constant or prove convergence. Shared profile and
23
+ * geometry stop rates from different sites or shutter events being mixed. No
24
+ * renderer runs here.
21
25
  */
22
26
  export function calculateSensorEqeTemporalExposure(input) {
27
+ requireInputKeys(input, "calculateSensorEqeTemporalExposure", ["samples", "spatialSampling", "spectralSampling", "responseApplication", "operatingRangeProfile", "colorSamplingProfile", "spectralResponseProfile", "airPhotonEnergyContext", "localExposure"]);
23
28
  const ordered = bindSensorTemporalSamples(input.samples, sample => sample.irradianceSamples);
24
29
  const count = ordered.length;
25
30
  const samples = [];
@@ -31,7 +36,7 @@ export function calculateSensorEqeTemporalExposure(input) {
31
36
  const start = binding.localExposureWindow.startOffsetSecondsFromOpeningReference;
32
37
  const measure = binding.localExposureDurationSeconds / count;
33
38
  const time = start + (index + 0.5) * measure;
34
- // Exact shared construction rejects stale/global-clock samples without an implicit tolerance.
39
+ // Times are built the same way and must match exactly, so a stale sample or one on a global clock is rejected with no hidden tolerance.
35
40
  if (sample.timeSecondsFromOpeningReference !== time || !Number.isFinite(measure) || measure <= 0 ||
36
41
  !(time > start && time > previousTime && time < binding.localExposureWindow.endOffsetSecondsFromOpeningReference)) {
37
42
  throw new InvalidScientificInputError("Temporal sample must match its representable local shutter midpoint exactly.");
@@ -1 +1 @@
1
- {"version":3,"file":"eqe-temporal-exposure.js","sourceRoot":"","sources":["../../src/sensor/eqe-temporal-exposure.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"eqe-temporal-exposure.js","sourceRoot":"","sources":["../../src/sensor/eqe-temporal-exposure.ts"],"names":[],"mappings":"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","sourcesContent":["// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Photo signal for one site over one exposure when the light changes over time.\n *\n * The response checks and EQE (external quantum efficiency) conversion run separately at each\n * declared midpoint time of the shutter interval. The rates are then multiplied by their time steps\n * and summed (numerical quadrature). This does not claim the light is constant, and does not prove\n * the sum has converged. All samples share one profile and geometry, so rates from different sites\n * or shutter events cannot be mixed. No renderer runs here.\n * @see docs/MOTION_AND_SIGNAL.md for equations, coordinate/unit conventions, blockers and support\n * limits.\n */\n\nimport { sumTemporalEqeRateExpectations } from \"./temporal-eqe-sum.js\";\nimport { bindSensorTemporalSamples } from \"./temporal-sample-binding.js\";\nimport { approximationResult, type CalculationResult } from \"../core/calculation-result.js\";\nimport { InvalidScientificInputError } from \"../core/validation.js\";\nimport { calculateSensorEqeLocalRate, type CalculateSensorEqeLocalExposureInput } from \"./eqe-local-exposure.js\";\nimport { requireInputKeys } from \"../core/record-validation.js\";\n\n/** Input: shared response, site and shutter settings, plus the light evaluated separately at each time. */\nexport interface CalculateSensorEqeTemporalExposureInput\n extends Omit<CalculateSensorEqeLocalExposureInput, \"irradianceSamples\" | \"stationarityProfile\"> {\n /** One sample for every uniform midpoint time. Array order does not define which time a sample is. */\n samples: readonly {\n temporalSampleIndex: number;\n /** Seconds from the shutter's reference time (the first opening boundary). */\n timeSecondsFromOpeningReference: number;\n /** Irradiance in W/m²/nm at every spatial × spectral node, for this instant. */\n irradianceSamples: CalculateSensorEqeLocalExposureInput[\"irradianceSamples\"];\n }[];\n}\n\n/** Expected photo signal with light that varies over time. Kept separate from the constant-rate inputs of the RAW producer. */\nexport interface SensorEqeTemporalExposure {\n kind: \"eqe-temporal-quadrature-expected-counts\";\n colorSamplingProfileId: string;\n channelId: string;\n site: { x: number; y: number };\n bindingId: string;\n timeReference: \"first-opening-boundary-phase\";\n startOffsetSecondsFromOpeningReference: number;\n endOffsetSecondsFromOpeningReference: number;\n localExposureDurationSeconds: number;\n expectedIncidentPhotonCount: number;\n expectedGeneratedElectronCount: number;\n integrationMethod: \"uniform-midpoint-rate-quadrature\";\n timeStationarityEstablished: false;\n timeVaryingSignalIntegrated: true;\n temporalIntegrationApplied: true;\n upstreamSceneAndOpticsVerified: false;\n accumulatedSignalCompleteness: \"photo-signal-only\";\n physicalFullWellAssessmentAuthorized: false;\n shotNoiseApplied: false;\n rawCodeValueProduced: false;\n /** Samples in canonical order, each with its time step in seconds and its own evidence. */\n samples: readonly {\n temporalSampleIndex: number;\n timeSecondsFromOpeningReference: number;\n integrationMeasureSeconds: number;\n timeAverageWeight: number;\n stages: ReturnType<typeof calculateSensorEqeLocalRate>;\n }[];\n}\n\n/**\n * Runs the response checks and EQE conversion separately at each declared\n * midpoint time, then sums rate × time step. This is numerical quadrature. It does\n * not claim the light is constant or prove convergence. Shared profile and\n * geometry stop rates from different sites or shutter events being mixed. No\n * renderer runs here.\n */\nexport function calculateSensorEqeTemporalExposure(\n input: CalculateSensorEqeTemporalExposureInput\n): CalculationResult<SensorEqeTemporalExposure> {\n requireInputKeys(input, \"calculateSensorEqeTemporalExposure\", [\"samples\", \"spatialSampling\", \"spectralSampling\", \"responseApplication\", \"operatingRangeProfile\", \"colorSamplingProfile\", \"spectralResponseProfile\", \"airPhotonEnergyContext\", \"localExposure\"]);\n const ordered = bindSensorTemporalSamples(input.samples, sample => sample.irradianceSamples);\n const count = ordered.length;\n const samples: SensorEqeTemporalExposure[\"samples\"][number][] = [];\n let previousTime = -Infinity;\n for (let index = 0; index < count; index++) {\n const sample = ordered[index]!;\n const stages = calculateSensorEqeLocalRate({ ...input, irradianceSamples: sample.irradianceSamples });\n const binding = stages.exposureBinding.value;\n const start = binding.localExposureWindow.startOffsetSecondsFromOpeningReference;\n const measure = binding.localExposureDurationSeconds / count;\n const time = start + (index + 0.5) * measure;\n // Times are built the same way and must match exactly, so a stale sample or one on a global clock is rejected with no hidden tolerance.\n if (sample.timeSecondsFromOpeningReference !== time || !Number.isFinite(measure) || measure <= 0 ||\n !(time > start && time > previousTime && time < binding.localExposureWindow.endOffsetSecondsFromOpeningReference)) {\n throw new InvalidScientificInputError(\"Temporal sample must match its representable local shutter midpoint exactly.\");\n }\n previousTime = time;\n samples.push({ temporalSampleIndex: index, timeSecondsFromOpeningReference: time,\n integrationMeasureSeconds: measure, timeAverageWeight: 1 / count, stages });\n }\n const { photonCount, electronCount } = sumTemporalEqeRateExpectations(\n samples.map(s => s.stages.electronRate.value), samples[0]!.integrationMeasureSeconds);\n const binding = samples[0]!.stages.exposureBinding.value;\n return approximationResult({ kind: \"eqe-temporal-quadrature-expected-counts\",\n colorSamplingProfileId: binding.colorSamplingProfileId, channelId: binding.channelId, site: { ...binding.site },\n bindingId: binding.bindingId, timeReference: \"first-opening-boundary-phase\",\n startOffsetSecondsFromOpeningReference: binding.localExposureWindow.startOffsetSecondsFromOpeningReference,\n endOffsetSecondsFromOpeningReference: binding.localExposureWindow.endOffsetSecondsFromOpeningReference,\n localExposureDurationSeconds: binding.localExposureDurationSeconds,\n expectedIncidentPhotonCount: photonCount, expectedGeneratedElectronCount: electronCount,\n integrationMethod: \"uniform-midpoint-rate-quadrature\", timeStationarityEstablished: false,\n timeVaryingSignalIntegrated: true, temporalIntegrationApplied: true, upstreamSceneAndOpticsVerified: false,\n accumulatedSignalCompleteness: \"photo-signal-only\", physicalFullWellAssessmentAuthorized: false,\n shotNoiseApplied: false, rawCodeValueProduced: false, samples\n }, \"sensor-eqe-temporal-exposure\", \"0.1.0\", [\n \"Irradiance at each time is declared; scene transport, projection and PSF execution are not verified.\",\n \"Uniform midpoint quadrature has no asserted convergence bound or combined uncertainty.\",\n \"Nonstationary counts are not the existing stationary charge/RAW producer contract; downstream integration remains required.\"\n ]);\n}\n"]}
@@ -1,14 +1,18 @@
1
1
  /**
2
- * Module boundary and integration notes.
3
- * Resolves local capture exposure windows from independent opening and closing boundary schedules. The
4
- * returned time basis is seconds from the first opening-boundary phase. This is intentionally not the
5
- * existing camera-rotation API's global "exposure start" semantic; a later integration layer must bind
6
- * those time bases explicitly. The mechanism identifies whether each boundary is mechanical or
7
- * electronic, but does not supply any traversal duration or direction. Every non-simultaneous timing
8
- * value and direction is caller-declared with evidence. The first model supports simultaneous
9
- * boundaries and uniform-linear single-axis native-sensor scans only. It does not model curtain
10
- * acceleration, segmented/nonlinear electronic schedules, flash/flicker, rolling-shutter image
11
- * distortion, shutter shock, or EFCS-specific pupil/bokeh behavior.
2
+ * Exposure windows: when each point on the sensor starts and stops collecting light.
3
+ *
4
+ * The shutter has an opening boundary and a closing boundary, each with its own schedule. With a
5
+ * rolling or curtain shutter the boundaries sweep across the sensor, so each point has its own
6
+ * (local) window. Times are seconds from the first opening boundary. That is deliberately not the
7
+ * same as the camera-rotation API's global "exposure start"; a later layer must link the two
8
+ * explicitly.
9
+ *
10
+ * The mechanism records whether each boundary is mechanical or electronic, but supplies no sweep
11
+ * duration or direction. Every timing value and direction for a non-simultaneous boundary is declared
12
+ * by the caller, with evidence. Only simultaneous boundaries and a uniform linear sweep along one
13
+ * native sensor axis are supported. Not modelled: curtain acceleration, segmented or non-linear
14
+ * electronic schedules, flash or flicker, rolling-shutter image distortion, shutter shock, and
15
+ * EFCS (electronic first-curtain shutter) effects on the pupil or bokeh.
12
16
  * @see docs/MOTION_AND_SIGNAL.md for equations, coordinate/unit conventions, blockers and support
13
17
  * limits.
14
18
  */
@@ -34,25 +38,25 @@ export type ExposureBoundarySchedule = SimultaneousExposureBoundarySchedule | Un
34
38
  export interface CalculateCaptureExposureWindowsInput {
35
39
  nativeRaster: NativeImageRaster;
36
40
  /**
37
- * Active capture rectangle in invariant native-raster coordinates.
41
+ * Active capture rectangle, in fixed native pixel coordinates.
38
42
  *
39
- * Defaults to the complete native raster. Boundary traversal timing is never
40
- * inferred by scaling a full-frame timing value to this rectangle.
43
+ * Defaults to the whole native image. Sweep timing is never worked out by
44
+ * scaling a full-frame timing value to this rectangle.
41
45
  */
42
46
  activeCaptureRect?: RasterRect;
43
47
  shutterMechanism: CaptureShutterMechanism;
44
48
  /**
45
- * Nominal interval between the zero-phase opening and closing references.
49
+ * Nominal time between the opening and closing reference points (phase zero).
46
50
  *
47
- * Local exposure duration may differ from this value when opening and closing
48
- * boundary schedules have different spatial phase behavior.
51
+ * A point's local exposure can differ from this when the opening and closing
52
+ * boundaries sweep differently across the sensor.
49
53
  */
50
54
  nominalExposureDurationSeconds: SourcedCaptureTimingSeconds;
51
55
  opening: ExposureBoundarySchedule;
52
56
  closing: ExposureBoundarySchedule;
53
57
  /**
54
- * Optional continuous native raster edge-coordinate points for diagnostics.
55
- * Pixel centers may be represented with +0.5 offsets.
58
+ * Optional points, in continuous native pixel coordinates measured from pixel
59
+ * edges, to report windows for. A pixel centre is at +0.5.
56
60
  */
57
61
  samplePointsNative?: readonly RasterPoint[];
58
62
  }
@@ -72,11 +76,11 @@ export interface CaptureExposureWindowSample {
72
76
  openingNormalizedScanPosition: number | null;
73
77
  closingNormalizedScanPosition: number | null;
74
78
  /**
75
- * Seconds from the first opening-boundary phase.
79
+ * Seconds from the first opening boundary.
76
80
  */
77
81
  startOffsetSecondsFromOpeningReference: number;
78
82
  /**
79
- * Seconds from the first opening-boundary phase.
83
+ * Seconds from the first opening boundary.
80
84
  */
81
85
  endOffsetSecondsFromOpeningReference: number;
82
86
  localExposureDurationSeconds: number;
@@ -95,23 +99,33 @@ export interface CaptureExposureWindows {
95
99
  };
96
100
  samples: readonly CaptureExposureWindowSample[];
97
101
  }
102
+ /** Parses a sourced duration in seconds (`{ unit: "s", value, evidence }`). Not a root export. */
103
+ export declare function parseSecondsFact(value: unknown, path: string): SourcedCaptureTimingSeconds;
104
+ /** Parses one exposure boundary schedule (opening or closing). Not a root export. */
105
+ export declare function parseBoundarySchedule(value: unknown, path: string): ExposureBoundarySchedule;
98
106
  /**
99
- * Resolves local capture exposure windows from independent opening and closing
100
- * boundary schedules.
107
+ * Works out each point's local exposure window from separate opening and
108
+ * closing boundary schedules.
101
109
  *
102
- * The returned time basis is seconds from the first opening-boundary phase.
103
- * This is intentionally not the existing camera-rotation API's global
104
- * "exposure start" semantic; a later integration layer must bind those time
105
- * bases explicitly.
110
+ * Times are seconds from the first opening boundary. This is deliberately not
111
+ * the camera-rotation API's global "exposure start"; a later layer must link the
112
+ * two explicitly.
106
113
  *
107
- * The mechanism identifies whether each boundary is mechanical or electronic,
108
- * but does not supply any traversal duration or direction. Every non-simultaneous
109
- * timing value and direction is caller-declared with evidence.
114
+ * The mechanism records whether each boundary is mechanical or electronic, but
115
+ * supplies no sweep duration or direction. Every timing value and direction for
116
+ * a non-simultaneous boundary is declared by the caller, with evidence.
110
117
  *
111
- * The first model supports simultaneous boundaries and uniform-linear
112
- * single-axis native-sensor scans only. It does not model curtain acceleration,
113
- * segmented/nonlinear electronic schedules, flash/flicker, rolling-shutter
114
- * image distortion, shutter shock, or EFCS-specific pupil/bokeh behavior.
118
+ * Only simultaneous boundaries and a uniform linear sweep along one native
119
+ * sensor axis are supported. Not modelled: curtain acceleration, segmented or
120
+ * non-linear electronic schedules, flash or flicker, rolling-shutter image
121
+ * distortion, shutter shock, and EFCS (electronic first-curtain shutter)
122
+ * effects on the pupil or bokeh.
115
123
  */
116
124
  export declare function calculateCaptureExposureWindows(input: CalculateCaptureExposureWindowsInput): CalculationResult<CaptureExposureWindows>;
117
- //# sourceMappingURL=exposure-window.d.ts.map
125
+ /**
126
+ * Internal, for the faster ("lean") native environment executor (a 2.0 performance change). It checks a
127
+ * schedule once with every check of calculateCaptureExposureWindows, then returns a per-point sampler that
128
+ * uses the same point validation and the same createWindowSample arithmetic. So each sampled window is
129
+ * identical to what calculateCaptureExposureWindows returns for that point. Not exported from the package.
130
+ */
131
+ export declare function prepareCaptureExposureWindowSampler(input: Omit<CalculateCaptureExposureWindowsInput, "samplePointsNative">): (point: RasterPoint) => CaptureExposureWindowSample;