@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,15 +1,12 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  /**
3
- * Module boundary and integration notes.
4
- * Parses physical registration of the color-site lattice plus a first geometric
5
- * photosensitive-aperture model. Site-center pitch/origin are explicit facts and are never derived
6
- * from NativeImageRaster. The rectangle, when resolved, is a geometric sensitive region only. It does
7
- * not include microlens redirection, charge diffusion, electrical crosstalk, QE, throughput, spectral
8
- * response, or an effective radiometric collection area.
9
- * Resolves one geometric sampling aperture in native sensor physical space. The result provides a
10
- * normalized uniform-area spatial averaging footprint for future image sampling, plus its geometric
11
- * physical area/fill-fraction diagnostics. It deliberately does not promote that geometric area into
12
- * radiometric collection efficiency or physical photodiode truth.
3
+ * Sampling aperture: where the colour-sampling sites sit physically on the sensor, and the
4
+ * light-sensitive area of each site as a simple geometric shape.
5
+ *
6
+ * Site pitch and origin are declared facts, never derived from NativeImageRaster. The sensitive
7
+ * region, when known, is a plain geometric rectangle. It does not include microlens effects, charge
8
+ * diffusion, electrical crosstalk, QE (quantum efficiency), throughput, spectral response or an
9
+ * effective light-collection area.
13
10
  * @see docs/MOTION_AND_SIGNAL.md for equations, coordinate/unit conventions, blockers and support
14
11
  * limits.
15
12
  */
@@ -18,12 +15,15 @@ import { parseEvidenceList } from "../core/evidence-provenance.js";
18
15
  import { InvalidScientificInputError } from "../core/validation.js";
19
16
  import { resolveNativeEffectiveRasterColorSamplingBinding } from "./capture-color-sampling-binding.js";
20
17
  import { resolveColorSamplingSite } from "./color-sampling.js";
21
- function requireRecord(value, path) {
18
+ import { requireInputObject, requireInputKeys, rejectUnknownFields } from "../core/record-validation.js";
19
+ function requireRecord(value, path, allowedKeys) {
22
20
  if (typeof value !== "object" ||
23
21
  value === null ||
24
22
  Array.isArray(value)) {
25
23
  throw new InvalidConfigurationError(path + " must be an object.");
26
24
  }
25
+ if (allowedKeys !== null)
26
+ rejectUnknownFields(value, allowedKeys, path);
27
27
  return value;
28
28
  }
29
29
  function requireNonEmptyString(value, path) {
@@ -50,7 +50,7 @@ function requireFinite(value, path) {
50
50
  return value;
51
51
  }
52
52
  function parseSiteCenterLattice(value, path) {
53
- const record = requireRecord(value, path);
53
+ const record = requireRecord(value, path, ["kind", "coordinateSystem", "firstSiteCenterFromImagingAreaTopLeftMicrometers", "pitchXMicrometers", "pitchYMicrometers", "evidence"]);
54
54
  if (record.kind !==
55
55
  "regular-rectangular-site-center-lattice") {
56
56
  throw new InvalidConfigurationError(path + ".kind is invalid.");
@@ -61,7 +61,7 @@ function parseSiteCenterLattice(value, path) {
61
61
  '.coordinateSystem must be "native-sensor-physical".');
62
62
  }
63
63
  const firstCenter = requireRecord(record.firstSiteCenterFromImagingAreaTopLeftMicrometers, path +
64
- ".firstSiteCenterFromImagingAreaTopLeftMicrometers");
64
+ ".firstSiteCenterFromImagingAreaTopLeftMicrometers", ["x", "y"]);
65
65
  const firstX = requireFinite(firstCenter.x, path +
66
66
  ".firstSiteCenterFromImagingAreaTopLeftMicrometers.x");
67
67
  const firstY = requireFinite(firstCenter.y, path +
@@ -83,7 +83,7 @@ function parseSiteCenterLattice(value, path) {
83
83
  };
84
84
  }
85
85
  function parseGeometricSensitiveAperture(value, path, lattice) {
86
- const record = requireRecord(value, path);
86
+ const record = requireRecord(value, path, ["kind", "widthMicrometers", "heightMicrometers", "centerOffsetFromSiteCenterMicrometers", "evidence"]);
87
87
  if (record.kind === "unresolved") {
88
88
  if (record.widthMicrometers !== undefined ||
89
89
  record.heightMicrometers !== undefined ||
@@ -104,7 +104,7 @@ function parseGeometricSensitiveAperture(value, path, lattice) {
104
104
  const widthMicrometers = requirePositiveFinite(record.widthMicrometers, path + ".widthMicrometers");
105
105
  const heightMicrometers = requirePositiveFinite(record.heightMicrometers, path + ".heightMicrometers");
106
106
  const offset = requireRecord(record.centerOffsetFromSiteCenterMicrometers, path +
107
- ".centerOffsetFromSiteCenterMicrometers");
107
+ ".centerOffsetFromSiteCenterMicrometers", ["x", "y"]);
108
108
  const offsetX = requireFinite(offset.x, path +
109
109
  ".centerOffsetFromSiteCenterMicrometers.x");
110
110
  const offsetY = requireFinite(offset.y, path +
@@ -132,17 +132,16 @@ function parseGeometricSensitiveAperture(value, path, lattice) {
132
132
  };
133
133
  }
134
134
  /**
135
- * Parses physical registration of the color-site lattice plus a first geometric
136
- * photosensitive-aperture model.
135
+ * Parses where the colour-sampling sites sit physically, plus a simple geometric
136
+ * model of each site's light-sensitive area.
137
137
  *
138
- * Site-center pitch/origin are explicit facts and are never derived from
139
- * NativeImageRaster. The rectangle, when resolved, is a geometric sensitive
140
- * region only. It does not include microlens redirection, charge diffusion,
141
- * electrical crosstalk, QE, throughput, spectral response, or an effective
142
- * radiometric collection area.
138
+ * Site pitch and origin are declared facts, never derived from NativeImageRaster.
139
+ * The rectangle, when given, is a geometric sensitive region only. It does not
140
+ * include microlens effects, charge diffusion, electrical crosstalk, QE,
141
+ * throughput, spectral response or an effective light-collection area.
143
142
  */
144
143
  export function parseSensorSamplingApertureProfile(value) {
145
- const profile = requireRecord(value, "sensorSamplingAperture");
144
+ const profile = requireRecord(value, "sensorSamplingAperture", ["schemaVersion", "siteCenterLattice", "profileId", "colorSamplingProfileId", "colorSamplingBindingId", "evidence", "geometricSensitiveAperture"]);
146
145
  if (profile.schemaVersion !== "0.1.0") {
147
146
  throw new InvalidConfigurationError('sensorSamplingAperture.schemaVersion must be "0.1.0".');
148
147
  }
@@ -167,6 +166,7 @@ function requireSiteIndex(value, path) {
167
166
  return value;
168
167
  }
169
168
  function requirePositiveImagingArea(imagingArea) {
169
+ requireInputObject(imagingArea, "imagingArea input");
170
170
  if (!Number.isFinite(imagingArea.widthMm) ||
171
171
  imagingArea.widthMm <= 0 ||
172
172
  !Number.isFinite(imagingArea.heightMm) ||
@@ -175,14 +175,15 @@ function requirePositiveImagingArea(imagingArea) {
175
175
  }
176
176
  }
177
177
  /**
178
- * Resolves one geometric sampling aperture in native sensor physical space.
178
+ * Resolves one site's geometric sampling aperture in native sensor physical space.
179
179
  *
180
- * The result provides a normalized uniform-area spatial averaging footprint for
181
- * future image sampling, plus its geometric physical area/fill-fraction
182
- * diagnostics. It deliberately does not promote that geometric area into
183
- * radiometric collection efficiency or physical photodiode truth.
180
+ * The result is a normalized footprint that averages evenly over its area, for
181
+ * image sampling, plus its physical area and fill fraction. That geometric area
182
+ * is deliberately not treated as light-collection efficiency or as the true
183
+ * photodiode shape.
184
184
  */
185
185
  export function resolveSensorSamplingAperture(input) {
186
+ requireInputKeys(input, "resolveSensorSamplingAperture", ["imagingArea", "nativeRaster", "colorSamplingProfile", "colorSamplingBindingProfile", "samplingApertureProfile", "site"]);
186
187
  requirePositiveImagingArea(input.imagingArea);
187
188
  const profile = parseSensorSamplingApertureProfile(input.samplingApertureProfile);
188
189
  const binding = resolveNativeEffectiveRasterColorSamplingBinding({
@@ -1 +1 @@
1
- {"version":3,"file":"sampling-aperture.js","sourceRoot":"","sources":["../../src/sensor/sampling-aperture.ts"],"names":[],"mappings":"AAAA,sCAAsC;AAEtC;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,yBAAyB,EAAE,MAAM,gCAAgC,CAAC;AAC3E,OAAO,EACL,iBAAiB,EAElB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,2BAA2B,EAAE,MAAM,uBAAuB,CAAC;AACpE,OAAO,EACL,gDAAgD,EAEjD,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EACL,wBAAwB,EAGzB,MAAM,qBAAqB,CAAC;AAoJ7B,SAAS,aAAa,CACpB,KAAc,EACd,IAAY;IAEZ,IACE,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACd,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EACpB,CAAC;QACD,MAAM,IAAI,yBAAyB,CACjC,IAAI,GAAG,qBAAqB,CAC7B,CAAC;IACJ,CAAC;IACD,OAAO,KAAsB,CAAC;AAChC,CAAC;AAED,SAAS,qBAAqB,CAC5B,KAAc,EACd,IAAY;IAEZ,IACE,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EACzB,CAAC;QACD,MAAM,IAAI,yBAAyB,CACjC,IAAI,GAAG,8BAA8B,CACtC,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,qBAAqB,CAC5B,KAAc,EACd,IAAY;IAEZ,IACE,OAAO,KAAK,KAAK,QAAQ;QACzB,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;QACvB,KAAK,IAAI,CAAC,EACV,CAAC;QACD,MAAM,IAAI,yBAAyB,CACjC,IAAI;YACF,6CAA6C,CAChD,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,aAAa,CACpB,KAAc,EACd,IAAY;IAEZ,IACE,OAAO,KAAK,KAAK,QAAQ;QACzB,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EACvB,CAAC;QACD,MAAM,IAAI,yBAAyB,CACjC,IAAI,GAAG,2BAA2B,CACnC,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,sBAAsB,CAC7B,KAAc,EACd,IAAY;IAEZ,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAE1C,IACE,MAAM,CAAC,IAAI;QACX,yCAAyC,EACzC,CAAC;QACD,MAAM,IAAI,yBAAyB,CACjC,IAAI,GAAG,mBAAmB,CAC3B,CAAC;IACJ,CAAC;IACD,IACE,MAAM,CAAC,gBAAgB;QACvB,wBAAwB,EACxB,CAAC;QACD,MAAM,IAAI,yBAAyB,CACjC,IAAI;YACF,qDAAqD,CACxD,CAAC;IACJ,CAAC;IAED,MAAM,WAAW,GAAG,aAAa,CAC/B,MAAM,CAAC,gDAAgD,EACvD,IAAI;QACF,mDAAmD,CACtD,CAAC;IAEF,MAAM,MAAM,GAAG,aAAa,CAC1B,WAAW,CAAC,CAAC,EACb,IAAI;QACF,qDAAqD,CACxD,CAAC;IACF,MAAM,MAAM,GAAG,aAAa,CAC1B,WAAW,CAAC,CAAC,EACb,IAAI;QACF,qDAAqD,CACxD,CAAC;IAEF,IAAI,MAAM,GAAG,CAAC,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,yBAAyB,CACjC,IAAI;YACF,yEAAyE,CAC5E,CAAC;IACJ,CAAC;IAED,OAAO;QACL,IAAI,EACF,yCAAyC;QAC3C,gBAAgB,EACd,wBAAwB;QAC1B,iBAAiB,EACf,qBAAqB,CACnB,MAAM,CAAC,iBAAiB,EACxB,IAAI,GAAG,oBAAoB,CAC5B;QACH,iBAAiB,EACf,qBAAqB,CACnB,MAAM,CAAC,iBAAiB,EACxB,IAAI,GAAG,oBAAoB,CAC5B;QACH,gDAAgD,EAC9C;YACE,CAAC,EAAE,MAAM;YACT,CAAC,EAAE,MAAM;SACV;QACH,QAAQ,EAAE,iBAAiB,CACzB,MAAM,CAAC,QAAQ,EACf,IAAI,GAAG,WAAW,CACnB;KACF,CAAC;AACJ,CAAC;AAED,SAAS,+BAA+B,CACtC,KAAc,EACd,IAAY,EACZ,OAA4C;IAE5C,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAE1C,IAAI,MAAM,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;QACjC,IACE,MAAM,CAAC,gBAAgB,KAAK,SAAS;YACrC,MAAM,CAAC,iBAAiB,KAAK,SAAS;YACtC,MAAM,CAAC,qCAAqC;gBAC1C,SAAS,EACX,CAAC;YACD,MAAM,IAAI,yBAAyB,CACjC,IAAI;gBACF,kDAAkD,CACrD,CAAC;QACJ,CAAC;QACD,OAAO;YACL,IAAI,EAAE,YAAY;YAClB,QAAQ,EAAE,iBAAiB,CACzB,MAAM,CAAC,QAAQ,EACf,IAAI,GAAG,WAAW,CACnB;SACF,CAAC;IACJ,CAAC;IAED,IACE,MAAM,CAAC,IAAI;QACX,gCAAgC,EAChC,CAAC;QACD,MAAM,IAAI,yBAAyB,CACjC,IAAI,GAAG,mBAAmB,CAC3B,CAAC;IACJ,CAAC;IAED,MAAM,gBAAgB,GACpB,qBAAqB,CACnB,MAAM,CAAC,gBAAgB,EACvB,IAAI,GAAG,mBAAmB,CAC3B,CAAC;IACJ,MAAM,iBAAiB,GACrB,qBAAqB,CACnB,MAAM,CAAC,iBAAiB,EACxB,IAAI,GAAG,oBAAoB,CAC5B,CAAC;IACJ,MAAM,MAAM,GAAG,aAAa,CAC1B,MAAM,CAAC,qCAAqC,EAC5C,IAAI;QACF,wCAAwC,CAC3C,CAAC;IACF,MAAM,OAAO,GAAG,aAAa,CAC3B,MAAM,CAAC,CAAC,EACR,IAAI;QACF,0CAA0C,CAC7C,CAAC;IACF,MAAM,OAAO,GAAG,aAAa,CAC3B,MAAM,CAAC,CAAC,EACR,IAAI;QACF,0CAA0C,CAC7C,CAAC;IAEF,MAAM,SAAS,GACb,OAAO,CAAC,iBAAiB,GAAG,CAAC,CAAC;IAChC,MAAM,SAAS,GACb,OAAO,CAAC,iBAAiB,GAAG,CAAC,CAAC;IAEhC,IACE,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC;QACf,gBAAgB,GAAG,CAAC;QACpB,SAAS;QACX,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC;YACf,iBAAiB,GAAG,CAAC;YACrB,SAAS,EACX,CAAC;QACD,MAAM,IAAI,yBAAyB,CACjC,IAAI;YACF,8DAA8D,CACjE,CAAC;IACJ,CAAC;IAED,OAAO;QACL,IAAI,EACF,gCAAgC;QAClC,gBAAgB;QAChB,iBAAiB;QACjB,qCAAqC,EACnC;YACE,CAAC,EAAE,OAAO;YACV,CAAC,EAAE,OAAO;SACX;QACH,QAAQ,EAAE,iBAAiB,CACzB,MAAM,CAAC,QAAQ,EACf,IAAI,GAAG,WAAW,CACnB;KACF,CAAC;AACJ,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,kCAAkC,CAChD,KAAc;IAEd,MAAM,OAAO,GAAG,aAAa,CAC3B,KAAK,EACL,wBAAwB,CACzB,CAAC;IAEF,IAAI,OAAO,CAAC,aAAa,KAAK,OAAO,EAAE,CAAC;QACtC,MAAM,IAAI,yBAAyB,CACjC,uDAAuD,CACxD,CAAC;IACJ,CAAC;IAED,MAAM,iBAAiB,GACrB,sBAAsB,CACpB,OAAO,CAAC,iBAAiB,EACzB,0CAA0C,CAC3C,CAAC;IAEJ,OAAO;QACL,aAAa,EAAE,OAAO;QACtB,SAAS,EAAE,qBAAqB,CAC9B,OAAO,CAAC,SAAS,EACjB,kCAAkC,CACnC;QACD,sBAAsB,EACpB,qBAAqB,CACnB,OAAO,CAAC,sBAAsB,EAC9B,+CAA+C,CAChD;QACH,sBAAsB,EACpB,qBAAqB,CACnB,OAAO,CAAC,sBAAsB,EAC9B,+CAA+C,CAChD;QACH,QAAQ,EAAE,iBAAiB,CACzB,OAAO,CAAC,QAAQ,EAChB,iCAAiC,CAClC;QACD,iBAAiB;QACjB,0BAA0B,EACxB,+BAA+B,CAC7B,OAAO,CAAC,0BAA0B,EAClC,mDAAmD,EACnD,iBAAiB,CAClB;KACJ,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CACvB,KAAc,EACd,IAAY;IAEZ,IACE,OAAO,KAAK,KAAK,QAAQ;QACzB,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC;QAC5B,KAAK,GAAG,CAAC,EACT,CAAC;QACD,MAAM,IAAI,2BAA2B,CACnC,IAAI;YACF,iEAAiE,CACpE,CAAC;IACJ,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,0BAA0B,CACjC,WAA8B;IAE9B,IACE,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,OAAO,CAAC;QACrC,WAAW,CAAC,OAAO,IAAI,CAAC;QACxB,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,QAAQ,CAAC;QACtC,WAAW,CAAC,QAAQ,IAAI,CAAC,EACzB,CAAC;QACD,MAAM,IAAI,2BAA2B,CACnC,gEAAgE,CACjE,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,6BAA6B,CAC3C,KAAyC;IAEzC,0BAA0B,CACxB,KAAK,CAAC,WAAW,CAClB,CAAC;IAEF,MAAM,OAAO,GACX,kCAAkC,CAChC,KAAK,CAAC,uBAAuB,CAC9B,CAAC;IACJ,MAAM,OAAO,GACX,gDAAgD,CAC9C;QACE,YAAY,EAAE,KAAK,CAAC,YAAY;QAChC,oBAAoB,EAClB,KAAK,CAAC,oBAAoB;QAC5B,cAAc,EACZ,KAAK,CAAC,2BAA2B;KACpC,CACF,CAAC;IAEJ,IACE,OAAO,CAAC,sBAAsB;QAC9B,OAAO,CAAC,sBAAsB,EAC9B,CAAC;QACD,MAAM,IAAI,2BAA2B,CACnC,0FAA0F,CAC3F,CAAC;IACJ,CAAC;IACD,IACE,OAAO,CAAC,sBAAsB;QAC9B,OAAO,CAAC,SAAS,EACjB,CAAC;QACD,MAAM,IAAI,2BAA2B,CACnC,0FAA0F,CAC3F,CAAC;IACJ,CAAC;IAED,IACE,OAAO,CAAC,0BAA0B,CAAC,IAAI;QACvC,YAAY,EACZ,CAAC;QACD,MAAM,IAAI,2BAA2B,CACnC,6FAA6F,CAC9F,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,GAAG,gBAAgB,CAC5B,KAAK,CAAC,IAAI,CAAC,CAAC,EACZ,QAAQ,CACT,CAAC;IACF,MAAM,KAAK,GAAG,gBAAgB,CAC5B,KAAK,CAAC,IAAI,CAAC,CAAC,EACZ,QAAQ,CACT,CAAC;IAEF,IACE,KAAK;QACH,OAAO,CAAC,qBAAqB,CAAC,UAAU;QAC1C,KAAK;YACH,OAAO,CAAC,qBAAqB,CAAC,WAAW,EAC3C,CAAC;QACD,MAAM,IAAI,2BAA2B,CACnC,0DAA0D,CAC3D,CAAC;IACJ,CAAC;IAED,MAAM,OAAO,GACX,OAAO,CAAC,iBAAiB,CAAC;IAC5B,MAAM,SAAS,GACb,OAAO,CAAC,qBAAqB,CAAC,UAAU,CAAC;IAC3C,MAAM,UAAU,GACd,OAAO,CAAC,qBAAqB,CAAC,WAAW,CAAC;IAC5C,MAAM,uBAAuB,GAC3B,KAAK,CAAC,WAAW,CAAC,OAAO,GAAG,IAAI,CAAC;IACnC,MAAM,wBAAwB,GAC5B,KAAK,CAAC,WAAW,CAAC,QAAQ,GAAG,IAAI,CAAC;IAEpC,MAAM,WAAW,GACf,OAAO;SACJ,gDAAgD;SAChD,CAAC;QACJ,CAAC,SAAS,GAAG,CAAC,CAAC;YACb,OAAO,CAAC,iBAAiB,CAAC;IAC9B,MAAM,WAAW,GACf,OAAO;SACJ,gDAAgD;SAChD,CAAC;QACJ,CAAC,UAAU,GAAG,CAAC,CAAC;YACd,OAAO,CAAC,iBAAiB,CAAC;IAE9B,IACE,WAAW,GAAG,uBAAuB;QACrC,WAAW,GAAG,wBAAwB,EACtC,CAAC;QACD,MAAM,IAAI,2BAA2B,CACnC,iFAAiF,CAClF,CAAC;IACJ,CAAC;IAED,MAAM,QAAQ,GACZ,OAAO,CAAC,0BAA0B,CAAC;IACrC,MAAM,eAAe,GACnB,QAAQ,CAAC,qCAAqC,CAAC,CAAC,CAAC;IACnD,MAAM,eAAe,GACnB,QAAQ,CAAC,qCAAqC,CAAC,CAAC,CAAC;IACnD,MAAM,iBAAiB,GACrB,QAAQ,CAAC,gBAAgB,GAAG,CAAC,CAAC;IAChC,MAAM,kBAAkB,GACtB,QAAQ,CAAC,iBAAiB,GAAG,CAAC,CAAC;IAEjC,MAAM,iBAAiB,GACrB,OAAO,CAAC,gDAAgD,CAAC,CAAC;QAC1D,eAAe;QACf,iBAAiB,CAAC;IACpB,MAAM,gBAAgB,GACpB,OAAO,CAAC,gDAAgD,CAAC,CAAC;QAC1D,eAAe;QACf,kBAAkB,CAAC;IACrB,MAAM,iBAAiB,GACrB,WAAW;QACX,eAAe;QACf,iBAAiB,CAAC;IACpB,MAAM,kBAAkB,GACtB,WAAW;QACX,eAAe;QACf,kBAAkB,CAAC;IAErB,IACE,iBAAiB,GAAG,CAAC;QACrB,gBAAgB,GAAG,CAAC;QACpB,iBAAiB,GAAG,uBAAuB;QAC3C,kBAAkB,GAAG,wBAAwB,EAC7C,CAAC;QACD,MAAM,IAAI,2BAA2B,CACnC,6HAA6H,CAC9H,CAAC;IACJ,CAAC;IAED,MAAM,sBAAsB,GAC1B,OAAO;SACJ,gDAAgD;SAChD,CAAC;QACJ,KAAK,GAAG,OAAO,CAAC,iBAAiB,CAAC;IACpC,MAAM,sBAAsB,GAC1B,OAAO;SACJ,gDAAgD;SAChD,CAAC;QACJ,KAAK,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAEpC,MAAM,0BAA0B,GAC9B,sBAAsB;QACtB,QAAQ;aACL,qCAAqC;aACrC,CAAC,CAAC;IACP,MAAM,0BAA0B,GAC9B,sBAAsB;QACtB,QAAQ;aACL,qCAAqC;aACrC,CAAC,CAAC;IACP,MAAM,gBAAgB,GACpB,0BAA0B;QAC1B,QAAQ,CAAC,gBAAgB,GAAG,CAAC,CAAC;IAChC,MAAM,oBAAoB,GACxB,0BAA0B;QAC1B,QAAQ,CAAC,gBAAgB,GAAG,CAAC,CAAC;IAChC,MAAM,gBAAgB,GACpB,0BAA0B;QAC1B,QAAQ,CAAC,iBAAiB,GAAG,CAAC,CAAC;IACjC,MAAM,oBAAoB,GACxB,0BAA0B;QAC1B,QAAQ,CAAC,iBAAiB,GAAG,CAAC,CAAC;IAEjC,IACE,gBAAgB,GAAG,CAAC;QACpB,gBAAgB,GAAG,CAAC;QACpB,oBAAoB;YAClB,uBAAuB;QACzB,oBAAoB;YAClB,wBAAwB,EAC1B,CAAC;QACD,MAAM,IAAI,2BAA2B,CACnC,0FAA0F,CAC3F,CAAC;IACJ,CAAC;IAED,MAAM,2BAA2B,GAAG;QAClC,CAAC,EACC,CAAC,KAAK,CAAC,WAAW,CAAC,OAAO,GAAG,CAAC;YAC9B,sBAAsB,GAAG,IAAI;QAC/B,CAAC,EACC,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ,GAAG,CAAC;YAC/B,sBAAsB,GAAG,IAAI;KAChC,CAAC;IACF,MAAM,+BAA+B,GAAG;QACtC,CAAC,EACC,CAAC,KAAK,CAAC,WAAW,CAAC,OAAO,GAAG,CAAC;YAC9B,0BAA0B,GAAG,IAAI;QACnC,CAAC,EACC,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ,GAAG,CAAC;YAC/B,0BAA0B,GAAG,IAAI;KACpC,CAAC;IACF,MAAM,uBAAuB,GAAG;QAC9B,IAAI,EACF,CAAC,KAAK,CAAC,WAAW,CAAC,OAAO,GAAG,CAAC;YAC9B,gBAAgB,GAAG,IAAI;QACzB,KAAK,EACH,CAAC,KAAK,CAAC,WAAW,CAAC,OAAO,GAAG,CAAC;YAC9B,oBAAoB,GAAG,IAAI;QAC7B,GAAG,EACD,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ,GAAG,CAAC;YAC/B,gBAAgB,GAAG,IAAI;QACzB,MAAM,EACJ,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ,GAAG,CAAC;YAC/B,oBAAoB,GAAG,IAAI;KAC9B,CAAC;IAEF,MAAM,qBAAqB,GACzB,QAAQ,CAAC,gBAAgB;QACzB,QAAQ,CAAC,iBAAiB,CAAC;IAC7B,MAAM,gCAAgC,GACpC,OAAO,CAAC,iBAAiB;QACzB,OAAO,CAAC,iBAAiB,CAAC;IAC5B,MAAM,2CAA2C,GAC/C,qBAAqB;QACrB,gCAAgC,CAAC;IAEnC,IACE,CAAC,MAAM,CAAC,QAAQ,CAAC,qBAAqB,CAAC;QACvC,CAAC,MAAM,CAAC,QAAQ,CACd,gCAAgC,CACjC;QACD,CAAC,MAAM,CAAC,QAAQ,CACd,2CAA2C,CAC5C,EACD,CAAC;QACD,MAAM,IAAI,2BAA2B,CACnC,wDAAwD,CACzD,CAAC;IACJ,CAAC;IAED,MAAM,OAAO,GACX,wBAAwB,CAAC;QACvB,OAAO,EAAE,KAAK,CAAC,oBAAoB;QACnC,IAAI,EAAE;YACJ,CAAC,EAAE,KAAK;YACR,CAAC,EAAE,KAAK;SACT;KACF,CAAC,CAAC;IAEL,OAAO;QACL,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,sBAAsB,EACpB,OAAO,CAAC,sBAAsB;QAChC,sBAAsB,EACpB,OAAO,CAAC,sBAAsB;QAChC,gBAAgB,EACd,wBAAwB;QAC1B,IAAI,EAAE;YACJ,CAAC,EAAE,KAAK;YACR,CAAC,EAAE,KAAK;SACT;QACD,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,SAAS;QACpC,QAAQ,EAAE;YACR,UAAU,EAAE,SAAS;YACrB,WAAW,EAAE,UAAU;SACxB;QACD,OAAO,EAAE;YACP,iBAAiB,EACf,OAAO,CAAC,iBAAiB;YAC3B,iBAAiB,EACf,OAAO,CAAC,iBAAiB;YAC3B,gDAAgD,EAC9C;gBACE,GAAG,OAAO;qBACP,gDAAgD;aACpD;YACH,2CAA2C,EACzC;gBACE,CAAC,EAAE,sBAAsB;gBACzB,CAAC,EAAE,sBAAsB;aAC1B;YACH,2BAA2B;YAC3B,gCAAgC;SACjC;QACD,0BAA0B,EAAE;YAC1B,IAAI,EACF,gCAAgC;YAClC,gBAAgB,EACd,QAAQ,CAAC,gBAAgB;YAC3B,iBAAiB,EACf,QAAQ,CAAC,iBAAiB;YAC5B,qCAAqC,EACnC;gBACE,GAAG,QAAQ;qBACR,qCAAqC;aACzC;YACH,uBAAuB,EACrB,+BAA+B;YACjC,uBAAuB;YACvB,qBAAqB;YACrB,2CAA2C;YAC3C,gBAAgB,EACd,2BAA2B;YAC7B,mCAAmC,EACjC,eAAe;SAClB;QACD,qCAAqC,EACnC,KAAK;QACP,4BAA4B,EAAE,KAAK;QACnC,4BAA4B,EAAE,KAAK;QACnC,sCAAsC,EACpC,KAAK;QACP,uBAAuB,EAAE,KAAK;QAC9B,2BAA2B,EAAE,KAAK;QAClC,wBAAwB,EAAE,KAAK;QAC/B,yBAAyB,EAAE,KAAK;QAChC,yBAAyB,EAAE,KAAK;QAChC,oCAAoC,EAClC,KAAK;QACP,qCAAqC,EACnC,KAAK;QACP,UAAU,EAAE;YACV,OAAO,EAAE,OAAO,CAAC,QAAQ;YACzB,OAAO,EAAE,OAAO,CAAC,QAAQ;YACzB,QAAQ,EAAE,QAAQ,CAAC,QAAQ;SAC5B;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"sampling-aperture.js","sourceRoot":"","sources":["../../src/sensor/sampling-aperture.ts"],"names":[],"mappings":"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","sourcesContent":["// SPDX-License-Identifier: Apache-2.0\n\n/**\n * Sampling aperture: where the colour-sampling sites sit physically on the sensor, and the\n * light-sensitive area of each site as a simple geometric shape.\n *\n * Site pitch and origin are declared facts, never derived from NativeImageRaster. The sensitive\n * region, when known, is a plain geometric rectangle. It does not include microlens effects, charge\n * diffusion, electrical crosstalk, QE (quantum efficiency), throughput, spectral response or an\n * effective light-collection area.\n * @see docs/MOTION_AND_SIGNAL.md for equations, coordinate/unit conventions, blockers and support\n * limits.\n */\n\nimport { InvalidConfigurationError } from \"../core/configuration-error.js\";\nimport {\n parseEvidenceList,\n type EvidenceProvenance\n} from \"../core/evidence-provenance.js\";\nimport { InvalidScientificInputError } from \"../core/validation.js\";\nimport {\n resolveNativeEffectiveRasterColorSamplingBinding,\n type NativeEffectiveRasterColorSamplingBindingProfile\n} from \"./capture-color-sampling-binding.js\";\nimport {\n resolveColorSamplingSite,\n type NativeColorSamplingSiteIndex,\n type SensorColorSamplingProfile\n} from \"./color-sampling.js\";\nimport type {\n NativeImageRaster,\n SensorImagingArea\n} from \"./sensor-geometry.js\";\nimport { requireInputObject, requireInputKeys, rejectUnknownFields } from \"../core/record-validation.js\";\n\ntype UnknownRecord = Record<string, unknown>;\n\nexport interface SensorSiteCenterLatticeRegistration {\n kind: \"regular-rectangular-site-center-lattice\";\n coordinateSystem: \"native-sensor-physical\";\n /** Horizontal centre-to-centre site spacing (pitch) in micrometres. */\n pitchXMicrometers: number;\n /** Vertical centre-to-centre site spacing (pitch) in micrometres. */\n pitchYMicrometers: number;\n /**\n * Centre of the first site, measured from the imaging area's physical\n * top-left corner. +X right, +Y down. Units: micrometres.\n */\n firstSiteCenterFromImagingAreaTopLeftMicrometers: {\n x: number;\n y: number;\n };\n evidence: readonly EvidenceProvenance[];\n}\n\nexport type SensorGeometricSensitiveAperture =\n | {\n /**\n * The light-sensitive area is known to matter, but its shape is not\n * known well enough to use.\n */\n kind: \"unresolved\";\n evidence: readonly EvidenceProvenance[];\n }\n | {\n /**\n * A simple approximation of the sensitive area as a rectangle.\n *\n * The rectangle must stay inside one grid cell, so neighbouring\n * sensitive areas never overlap in schema 0.1.0.\n */\n kind: \"uniform-axis-aligned-rectangle\";\n widthMicrometers: number;\n heightMicrometers: number;\n centerOffsetFromSiteCenterMicrometers: {\n x: number;\n y: number;\n };\n evidence: readonly EvidenceProvenance[];\n };\n\nexport interface SensorSamplingApertureProfile {\n schemaVersion: \"0.1.0\";\n profileId: string;\n colorSamplingProfileId: string;\n colorSamplingBindingId: string;\n evidence: readonly EvidenceProvenance[];\n siteCenterLattice: SensorSiteCenterLatticeRegistration;\n geometricSensitiveAperture: SensorGeometricSensitiveAperture;\n}\n\nexport interface ResolveSensorSamplingApertureInput {\n imagingArea: SensorImagingArea;\n nativeRaster: NativeImageRaster;\n colorSamplingProfile: SensorColorSamplingProfile;\n colorSamplingBindingProfile: NativeEffectiveRasterColorSamplingBindingProfile;\n samplingApertureProfile: SensorSamplingApertureProfile;\n site: NativeColorSamplingSiteIndex;\n}\n\nexport interface NativeSensorPhysicalPointMm {\n x: number;\n y: number;\n}\n\nexport interface NativeSensorPhysicalBoundsMm {\n left: number;\n right: number;\n top: number;\n bottom: number;\n}\n\nexport interface ResolvedSensorSamplingAperture {\n profileId: string;\n colorSamplingProfileId: string;\n colorSamplingBindingId: string;\n coordinateSystem: \"native-sensor-physical\";\n site: NativeColorSamplingSiteIndex;\n channelId: string;\n siteGrid: {\n widthSites: number;\n heightSites: number;\n };\n lattice: {\n pitchXMicrometers: number;\n pitchYMicrometers: number;\n firstSiteCenterFromImagingAreaTopLeftMicrometers: {\n x: number;\n y: number;\n };\n siteCenterFromImagingAreaTopLeftMicrometers: {\n x: number;\n y: number;\n };\n siteCenterFromOpticalAxisMm: NativeSensorPhysicalPointMm;\n nominalCellAreaSquareMicrometers: number;\n };\n geometricSensitiveAperture: {\n kind: \"uniform-axis-aligned-rectangle\";\n widthMicrometers: number;\n heightMicrometers: number;\n centerOffsetFromSiteCenterMicrometers: {\n x: number;\n y: number;\n };\n centerFromOpticalAxisMm: NativeSensorPhysicalPointMm;\n boundsFromOpticalAxisMm: NativeSensorPhysicalBoundsMm;\n areaSquareMicrometers: number;\n geometricSensitiveAreaFractionOfLatticeCell: number;\n spatialWeighting:\n \"uniform-unit-area-average\";\n neighboringGeometricApertureOverlap:\n \"none-by-model\";\n };\n /**\n * Fixed statements of what this result does not establish.\n */\n sitePitchDerivedFromNativeImageRaster: false;\n apertureDerivedFromSitePitch: false;\n antiAliasingResponseIncluded: false;\n microlensSpatialRedistributionIncluded: false;\n chargeDiffusionIncluded: false;\n electricalCrosstalkIncluded: false;\n spectralResponseIncluded: false;\n quantumEfficiencyIncluded: false;\n opticalThroughputIncluded: false;\n radiometricCollectionAreaEstablished: false;\n physicalPhotodiodeGeometryEstablished: false;\n provenance: {\n profile: readonly EvidenceProvenance[];\n lattice: readonly EvidenceProvenance[];\n aperture: readonly EvidenceProvenance[];\n };\n}\n\nfunction requireRecord(\n value: unknown,\n path: string,\n allowedKeys: readonly string[] | null\n): UnknownRecord {\n if (\n typeof value !== \"object\" ||\n value === null ||\n Array.isArray(value)\n ) {\n throw new InvalidConfigurationError(\n path + \" must be an object.\"\n );\n }\n if (allowedKeys !== null) rejectUnknownFields(value, allowedKeys, path);\n return value as UnknownRecord;\n}\n\nfunction requireNonEmptyString(\n value: unknown,\n path: string\n): string {\n if (\n typeof value !== \"string\" ||\n value.trim().length === 0\n ) {\n throw new InvalidConfigurationError(\n path + \" must be a non-empty string.\"\n );\n }\n return value;\n}\n\nfunction requirePositiveFinite(\n value: unknown,\n path: string\n): number {\n if (\n typeof value !== \"number\" ||\n !Number.isFinite(value) ||\n value <= 0\n ) {\n throw new InvalidConfigurationError(\n path +\n \" must be a finite number greater than zero.\"\n );\n }\n return value;\n}\n\nfunction requireFinite(\n value: unknown,\n path: string\n): number {\n if (\n typeof value !== \"number\" ||\n !Number.isFinite(value)\n ) {\n throw new InvalidConfigurationError(\n path + \" must be a finite number.\"\n );\n }\n return value;\n}\n\nfunction parseSiteCenterLattice(\n value: unknown,\n path: string\n): SensorSiteCenterLatticeRegistration {\n const record = requireRecord(value, path, [\"kind\", \"coordinateSystem\", \"firstSiteCenterFromImagingAreaTopLeftMicrometers\", \"pitchXMicrometers\", \"pitchYMicrometers\", \"evidence\"]);\n\n if (\n record.kind !==\n \"regular-rectangular-site-center-lattice\"\n ) {\n throw new InvalidConfigurationError(\n path + \".kind is invalid.\"\n );\n }\n if (\n record.coordinateSystem !==\n \"native-sensor-physical\"\n ) {\n throw new InvalidConfigurationError(\n path +\n '.coordinateSystem must be \"native-sensor-physical\".'\n );\n }\n\n const firstCenter = requireRecord(\n record.firstSiteCenterFromImagingAreaTopLeftMicrometers,\n path +\n \".firstSiteCenterFromImagingAreaTopLeftMicrometers\", [\"x\", \"y\"]\n );\n\n const firstX = requireFinite(\n firstCenter.x,\n path +\n \".firstSiteCenterFromImagingAreaTopLeftMicrometers.x\"\n );\n const firstY = requireFinite(\n firstCenter.y,\n path +\n \".firstSiteCenterFromImagingAreaTopLeftMicrometers.y\"\n );\n\n if (firstX < 0 || firstY < 0) {\n throw new InvalidConfigurationError(\n path +\n \".firstSiteCenterFromImagingAreaTopLeftMicrometers must not be negative.\"\n );\n }\n\n return {\n kind:\n \"regular-rectangular-site-center-lattice\",\n coordinateSystem:\n \"native-sensor-physical\",\n pitchXMicrometers:\n requirePositiveFinite(\n record.pitchXMicrometers,\n path + \".pitchXMicrometers\"\n ),\n pitchYMicrometers:\n requirePositiveFinite(\n record.pitchYMicrometers,\n path + \".pitchYMicrometers\"\n ),\n firstSiteCenterFromImagingAreaTopLeftMicrometers:\n {\n x: firstX,\n y: firstY\n },\n evidence: parseEvidenceList(\n record.evidence,\n path + \".evidence\"\n )\n };\n}\n\nfunction parseGeometricSensitiveAperture(\n value: unknown,\n path: string,\n lattice: SensorSiteCenterLatticeRegistration\n): SensorGeometricSensitiveAperture {\n const record = requireRecord(value, path, [\"kind\", \"widthMicrometers\", \"heightMicrometers\", \"centerOffsetFromSiteCenterMicrometers\", \"evidence\"]);\n\n if (record.kind === \"unresolved\") {\n if (\n record.widthMicrometers !== undefined ||\n record.heightMicrometers !== undefined ||\n record.centerOffsetFromSiteCenterMicrometers !==\n undefined\n ) {\n throw new InvalidConfigurationError(\n path +\n \" unresolved aperture must omit rectangle fields.\"\n );\n }\n return {\n kind: \"unresolved\",\n evidence: parseEvidenceList(\n record.evidence,\n path + \".evidence\"\n )\n };\n }\n\n if (\n record.kind !==\n \"uniform-axis-aligned-rectangle\"\n ) {\n throw new InvalidConfigurationError(\n path + \".kind is invalid.\"\n );\n }\n\n const widthMicrometers =\n requirePositiveFinite(\n record.widthMicrometers,\n path + \".widthMicrometers\"\n );\n const heightMicrometers =\n requirePositiveFinite(\n record.heightMicrometers,\n path + \".heightMicrometers\"\n );\n const offset = requireRecord(\n record.centerOffsetFromSiteCenterMicrometers,\n path +\n \".centerOffsetFromSiteCenterMicrometers\", [\"x\", \"y\"]\n );\n const offsetX = requireFinite(\n offset.x,\n path +\n \".centerOffsetFromSiteCenterMicrometers.x\"\n );\n const offsetY = requireFinite(\n offset.y,\n path +\n \".centerOffsetFromSiteCenterMicrometers.y\"\n );\n\n const halfCellX =\n lattice.pitchXMicrometers / 2;\n const halfCellY =\n lattice.pitchYMicrometers / 2;\n\n if (\n Math.abs(offsetX) +\n widthMicrometers / 2 >\n halfCellX ||\n Math.abs(offsetY) +\n heightMicrometers / 2 >\n halfCellY\n ) {\n throw new InvalidConfigurationError(\n path +\n \" rectangle must remain within one regular site lattice cell.\"\n );\n }\n\n return {\n kind:\n \"uniform-axis-aligned-rectangle\",\n widthMicrometers,\n heightMicrometers,\n centerOffsetFromSiteCenterMicrometers:\n {\n x: offsetX,\n y: offsetY\n },\n evidence: parseEvidenceList(\n record.evidence,\n path + \".evidence\"\n )\n };\n}\n\n/**\n * Parses where the colour-sampling sites sit physically, plus a simple geometric\n * model of each site's light-sensitive area.\n *\n * Site pitch and origin are declared facts, never derived from NativeImageRaster.\n * The rectangle, when given, is a geometric sensitive region only. It does not\n * include microlens effects, charge diffusion, electrical crosstalk, QE,\n * throughput, spectral response or an effective light-collection area.\n */\nexport function parseSensorSamplingApertureProfile(\n value: unknown\n): SensorSamplingApertureProfile {\n const profile = requireRecord(\n value,\n \"sensorSamplingAperture\", [\"schemaVersion\", \"siteCenterLattice\", \"profileId\", \"colorSamplingProfileId\", \"colorSamplingBindingId\", \"evidence\", \"geometricSensitiveAperture\"]\n );\n\n if (profile.schemaVersion !== \"0.1.0\") {\n throw new InvalidConfigurationError(\n 'sensorSamplingAperture.schemaVersion must be \"0.1.0\".'\n );\n }\n\n const siteCenterLattice =\n parseSiteCenterLattice(\n profile.siteCenterLattice,\n \"sensorSamplingAperture.siteCenterLattice\"\n );\n\n return {\n schemaVersion: \"0.1.0\",\n profileId: requireNonEmptyString(\n profile.profileId,\n \"sensorSamplingAperture.profileId\"\n ),\n colorSamplingProfileId:\n requireNonEmptyString(\n profile.colorSamplingProfileId,\n \"sensorSamplingAperture.colorSamplingProfileId\"\n ),\n colorSamplingBindingId:\n requireNonEmptyString(\n profile.colorSamplingBindingId,\n \"sensorSamplingAperture.colorSamplingBindingId\"\n ),\n evidence: parseEvidenceList(\n profile.evidence,\n \"sensorSamplingAperture.evidence\"\n ),\n siteCenterLattice,\n geometricSensitiveAperture:\n parseGeometricSensitiveAperture(\n profile.geometricSensitiveAperture,\n \"sensorSamplingAperture.geometricSensitiveAperture\",\n siteCenterLattice\n )\n };\n}\n\nfunction requireSiteIndex(\n value: unknown,\n path: string\n): number {\n if (\n typeof value !== \"number\" ||\n !Number.isSafeInteger(value) ||\n value < 0\n ) {\n throw new InvalidScientificInputError(\n path +\n \" must be a non-negative safe integer color-sampling-site index.\"\n );\n }\n return value;\n}\n\nfunction requirePositiveImagingArea(\n imagingArea: SensorImagingArea\n): void {\n requireInputObject(imagingArea, \"imagingArea input\");\n if (\n !Number.isFinite(imagingArea.widthMm) ||\n imagingArea.widthMm <= 0 ||\n !Number.isFinite(imagingArea.heightMm) ||\n imagingArea.heightMm <= 0\n ) {\n throw new InvalidScientificInputError(\n \"imagingArea width/height must be finite and greater than zero.\"\n );\n }\n}\n\n/**\n * Resolves one site's geometric sampling aperture in native sensor physical space.\n *\n * The result is a normalized footprint that averages evenly over its area, for\n * image sampling, plus its physical area and fill fraction. That geometric area\n * is deliberately not treated as light-collection efficiency or as the true\n * photodiode shape.\n */\nexport function resolveSensorSamplingAperture(\n input: ResolveSensorSamplingApertureInput\n): ResolvedSensorSamplingAperture {\n requireInputKeys(input, \"resolveSensorSamplingAperture\", [\"imagingArea\", \"nativeRaster\", \"colorSamplingProfile\", \"colorSamplingBindingProfile\", \"samplingApertureProfile\", \"site\"]);\n requirePositiveImagingArea(\n input.imagingArea\n );\n\n const profile =\n parseSensorSamplingApertureProfile(\n input.samplingApertureProfile\n );\n const binding =\n resolveNativeEffectiveRasterColorSamplingBinding(\n {\n nativeRaster: input.nativeRaster,\n colorSamplingProfile:\n input.colorSamplingProfile,\n bindingProfile:\n input.colorSamplingBindingProfile\n }\n );\n\n if (\n profile.colorSamplingProfileId !==\n binding.colorSamplingProfileId\n ) {\n throw new InvalidScientificInputError(\n \"Sampling-aperture colorSamplingProfileId must match the resolved color-sampling profile.\"\n );\n }\n if (\n profile.colorSamplingBindingId !==\n binding.bindingId\n ) {\n throw new InvalidScientificInputError(\n \"Sampling-aperture colorSamplingBindingId must match the resolved color-sampling binding.\"\n );\n }\n\n if (\n profile.geometricSensitiveAperture.kind ===\n \"unresolved\"\n ) {\n throw new InvalidScientificInputError(\n \"Geometric sensitive aperture is unresolved; a spatial sampling aperture cannot be produced.\"\n );\n }\n\n const siteX = requireSiteIndex(\n input.site.x,\n \"site.x\"\n );\n const siteY = requireSiteIndex(\n input.site.y,\n \"site.y\"\n );\n\n if (\n siteX >=\n binding.colorSamplingSiteGrid.widthSites ||\n siteY >=\n binding.colorSamplingSiteGrid.heightSites\n ) {\n throw new InvalidScientificInputError(\n \"site must lie within the bound color-sampling site grid.\"\n );\n }\n\n const lattice =\n profile.siteCenterLattice;\n const gridWidth =\n binding.colorSamplingSiteGrid.widthSites;\n const gridHeight =\n binding.colorSamplingSiteGrid.heightSites;\n const imagingWidthMicrometers =\n input.imagingArea.widthMm * 1000;\n const imagingHeightMicrometers =\n input.imagingArea.heightMm * 1000;\n\n const lastCenterX =\n lattice\n .firstSiteCenterFromImagingAreaTopLeftMicrometers\n .x +\n (gridWidth - 1) *\n lattice.pitchXMicrometers;\n const lastCenterY =\n lattice\n .firstSiteCenterFromImagingAreaTopLeftMicrometers\n .y +\n (gridHeight - 1) *\n lattice.pitchYMicrometers;\n\n if (\n lastCenterX > imagingWidthMicrometers ||\n lastCenterY > imagingHeightMicrometers\n ) {\n throw new InvalidScientificInputError(\n \"Declared site-center lattice extends beyond the supplied physical imaging area.\"\n );\n }\n\n const aperture =\n profile.geometricSensitiveAperture;\n const apertureOffsetX =\n aperture.centerOffsetFromSiteCenterMicrometers.x;\n const apertureOffsetY =\n aperture.centerOffsetFromSiteCenterMicrometers.y;\n const apertureHalfWidth =\n aperture.widthMicrometers / 2;\n const apertureHalfHeight =\n aperture.heightMicrometers / 2;\n\n const firstApertureLeft =\n lattice.firstSiteCenterFromImagingAreaTopLeftMicrometers.x +\n apertureOffsetX -\n apertureHalfWidth;\n const firstApertureTop =\n lattice.firstSiteCenterFromImagingAreaTopLeftMicrometers.y +\n apertureOffsetY -\n apertureHalfHeight;\n const lastApertureRight =\n lastCenterX +\n apertureOffsetX +\n apertureHalfWidth;\n const lastApertureBottom =\n lastCenterY +\n apertureOffsetY +\n apertureHalfHeight;\n\n if (\n firstApertureLeft < 0 ||\n firstApertureTop < 0 ||\n lastApertureRight > imagingWidthMicrometers ||\n lastApertureBottom > imagingHeightMicrometers\n ) {\n throw new InvalidScientificInputError(\n \"Declared geometric sensitive aperture does not fit within the supplied physical imaging area across the complete site grid.\"\n );\n }\n\n const siteCenterFromTopLeftX =\n lattice\n .firstSiteCenterFromImagingAreaTopLeftMicrometers\n .x +\n siteX * lattice.pitchXMicrometers;\n const siteCenterFromTopLeftY =\n lattice\n .firstSiteCenterFromImagingAreaTopLeftMicrometers\n .y +\n siteY * lattice.pitchYMicrometers;\n\n const apertureCenterFromTopLeftX =\n siteCenterFromTopLeftX +\n aperture\n .centerOffsetFromSiteCenterMicrometers\n .x;\n const apertureCenterFromTopLeftY =\n siteCenterFromTopLeftY +\n aperture\n .centerOffsetFromSiteCenterMicrometers\n .y;\n const apertureLeftTopX =\n apertureCenterFromTopLeftX -\n aperture.widthMicrometers / 2;\n const apertureRightBottomX =\n apertureCenterFromTopLeftX +\n aperture.widthMicrometers / 2;\n const apertureLeftTopY =\n apertureCenterFromTopLeftY -\n aperture.heightMicrometers / 2;\n const apertureRightBottomY =\n apertureCenterFromTopLeftY +\n aperture.heightMicrometers / 2;\n\n if (\n apertureLeftTopX < 0 ||\n apertureLeftTopY < 0 ||\n apertureRightBottomX >\n imagingWidthMicrometers ||\n apertureRightBottomY >\n imagingHeightMicrometers\n ) {\n throw new InvalidScientificInputError(\n \"Resolved geometric sensitive aperture extends beyond the supplied physical imaging area.\"\n );\n }\n\n const siteCenterFromOpticalAxisMm = {\n x:\n -input.imagingArea.widthMm / 2 +\n siteCenterFromTopLeftX / 1000,\n y:\n -input.imagingArea.heightMm / 2 +\n siteCenterFromTopLeftY / 1000\n };\n const apertureCenterFromOpticalAxisMm = {\n x:\n -input.imagingArea.widthMm / 2 +\n apertureCenterFromTopLeftX / 1000,\n y:\n -input.imagingArea.heightMm / 2 +\n apertureCenterFromTopLeftY / 1000\n };\n const boundsFromOpticalAxisMm = {\n left:\n -input.imagingArea.widthMm / 2 +\n apertureLeftTopX / 1000,\n right:\n -input.imagingArea.widthMm / 2 +\n apertureRightBottomX / 1000,\n top:\n -input.imagingArea.heightMm / 2 +\n apertureLeftTopY / 1000,\n bottom:\n -input.imagingArea.heightMm / 2 +\n apertureRightBottomY / 1000\n };\n\n const areaSquareMicrometers =\n aperture.widthMicrometers *\n aperture.heightMicrometers;\n const nominalCellAreaSquareMicrometers =\n lattice.pitchXMicrometers *\n lattice.pitchYMicrometers;\n const geometricSensitiveAreaFractionOfLatticeCell =\n areaSquareMicrometers /\n nominalCellAreaSquareMicrometers;\n\n if (\n !Number.isFinite(areaSquareMicrometers) ||\n !Number.isFinite(\n nominalCellAreaSquareMicrometers\n ) ||\n !Number.isFinite(\n geometricSensitiveAreaFractionOfLatticeCell\n )\n ) {\n throw new InvalidScientificInputError(\n \"Derived sampling-aperture geometry must remain finite.\"\n );\n }\n\n const channel =\n resolveColorSamplingSite({\n profile: input.colorSamplingProfile,\n site: {\n x: siteX,\n y: siteY\n }\n });\n\n return {\n profileId: profile.profileId,\n colorSamplingProfileId:\n profile.colorSamplingProfileId,\n colorSamplingBindingId:\n profile.colorSamplingBindingId,\n coordinateSystem:\n \"native-sensor-physical\",\n site: {\n x: siteX,\n y: siteY\n },\n channelId: channel.mapping.channelId,\n siteGrid: {\n widthSites: gridWidth,\n heightSites: gridHeight\n },\n lattice: {\n pitchXMicrometers:\n lattice.pitchXMicrometers,\n pitchYMicrometers:\n lattice.pitchYMicrometers,\n firstSiteCenterFromImagingAreaTopLeftMicrometers:\n {\n ...lattice\n .firstSiteCenterFromImagingAreaTopLeftMicrometers\n },\n siteCenterFromImagingAreaTopLeftMicrometers:\n {\n x: siteCenterFromTopLeftX,\n y: siteCenterFromTopLeftY\n },\n siteCenterFromOpticalAxisMm,\n nominalCellAreaSquareMicrometers\n },\n geometricSensitiveAperture: {\n kind:\n \"uniform-axis-aligned-rectangle\",\n widthMicrometers:\n aperture.widthMicrometers,\n heightMicrometers:\n aperture.heightMicrometers,\n centerOffsetFromSiteCenterMicrometers:\n {\n ...aperture\n .centerOffsetFromSiteCenterMicrometers\n },\n centerFromOpticalAxisMm:\n apertureCenterFromOpticalAxisMm,\n boundsFromOpticalAxisMm,\n areaSquareMicrometers,\n geometricSensitiveAreaFractionOfLatticeCell,\n spatialWeighting:\n \"uniform-unit-area-average\",\n neighboringGeometricApertureOverlap:\n \"none-by-model\"\n },\n sitePitchDerivedFromNativeImageRaster:\n false,\n apertureDerivedFromSitePitch: false,\n antiAliasingResponseIncluded: false,\n microlensSpatialRedistributionIncluded:\n false,\n chargeDiffusionIncluded: false,\n electricalCrosstalkIncluded: false,\n spectralResponseIncluded: false,\n quantumEfficiencyIncluded: false,\n opticalThroughputIncluded: false,\n radiometricCollectionAreaEstablished:\n false,\n physicalPhotodiodeGeometryEstablished:\n false,\n provenance: {\n profile: profile.evidence,\n lattice: lattice.evidence,\n aperture: aperture.evidence\n }\n };\n}\n"]}
@@ -1,21 +1,23 @@
1
1
  /**
2
- * Module boundary and integration notes.
3
- * Compose declared scene radiance through paraxial optics and instantaneous EQE at every exact local
4
- * shutter midpoint. Light is never averaged before response validity. No projection, renderer, PSF,
5
- * charge/noise or production stage executes.
2
+ * Photo signal for one site over one exposure, starting from declared scene radiance: paraxial
3
+ * (small-angle) optics, then the EQE (external quantum efficiency) response, at every exact local
4
+ * shutter midpoint time.
5
+ *
6
+ * Light is never averaged before the response checks. No projection, renderer, PSF (point-spread
7
+ * function), charge, noise or production stage runs.
6
8
  * @see docs/MOTION_AND_SIGNAL.md for equations, coordinate/unit conventions, blockers and support
7
9
  * limits.
8
10
  */
9
11
  import { type CalculationResult } from "../core/calculation-result.js";
10
12
  import { calculateSceneToSensorIrradianceQuadrature, type CalculateSceneToSensorIrradianceQuadratureInput } from "../optics/scene-to-sensor-quadrature.js";
11
13
  import { calculateSensorEqeTemporalExposure, type CalculateSensorEqeTemporalExposureInput } from "./eqe-temporal-exposure.js";
12
- /** Declared physical scene radiance at every spatial/wavelength/local-shutter midpoint. */
14
+ /** Input: declared physical scene radiance at every spatial position, wavelength and local shutter midpoint time. */
13
15
  export interface CalculateSceneSensorEqeTemporalExposureInput {
14
- /** One destination site, response and local shutter event; no stationarity declaration. */
16
+ /** One destination site, its response and one local shutter event. No constant-rate declaration is needed. */
15
17
  sensor: Omit<CalculateSensorEqeTemporalExposureInput, "samples">;
16
18
  sceneBindings: CalculateSceneToSensorIrradianceQuadratureInput["sceneBindings"];
17
19
  optics: CalculateSceneToSensorIrradianceQuadratureInput["optics"];
18
- /** Explicitly binds scene query seconds to the shutter's first-opening boundary. */
20
+ /** States that scene query times are seconds from the shutter's first opening boundary. */
19
21
  timeReference: "first-opening-boundary-phase";
20
22
  samples: readonly {
21
23
  temporalSampleIndex: number;
@@ -23,7 +25,7 @@ export interface CalculateSceneSensorEqeTemporalExposureInput {
23
25
  sceneSamples: CalculateSceneToSensorIrradianceQuadratureInput["samples"];
24
26
  }[];
25
27
  }
26
- /** Child optical and sensor envelopes retain approximation/evidence independently. */
28
+ /** Result. The optical and sensor results each keep their own approximation labels and evidence. */
27
29
  export interface SceneSensorEqeTemporalExposure {
28
30
  sourcePlane: "sensor-package-incident";
29
31
  sourceTargetProjectionVerified: false;
@@ -37,9 +39,9 @@ export interface SceneSensorEqeTemporalExposure {
37
39
  exposure: ReturnType<typeof calculateSensorEqeTemporalExposure>;
38
40
  }
39
41
  /**
40
- * Compose declared scene radiance through paraxial optics and instantaneous EQE
41
- * at every exact local shutter midpoint. Light is never averaged before response
42
- * validity. No projection, renderer, PSF, charge/noise or production stage executes.
42
+ * Runs declared scene radiance through paraxial optics and the instantaneous EQE
43
+ * response at every exact local shutter midpoint time. Light is never averaged
44
+ * before the response checks. No projection, renderer, PSF, charge, noise or
45
+ * production stage runs.
43
46
  */
44
47
  export declare function calculateSceneSensorEqeTemporalExposure(input: CalculateSceneSensorEqeTemporalExposureInput): CalculationResult<SceneSensorEqeTemporalExposure>;
45
- //# sourceMappingURL=scene-eqe-temporal-exposure.d.ts.map
@@ -1,9 +1,11 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  /**
3
- * Module boundary and integration notes.
4
- * Compose declared scene radiance through paraxial optics and instantaneous EQE at every exact local
5
- * shutter midpoint. Light is never averaged before response validity. No projection, renderer, PSF,
6
- * charge/noise or production stage executes.
3
+ * Photo signal for one site over one exposure, starting from declared scene radiance: paraxial
4
+ * (small-angle) optics, then the EQE (external quantum efficiency) response, at every exact local
5
+ * shutter midpoint time.
6
+ *
7
+ * Light is never averaged before the response checks. No projection, renderer, PSF (point-spread
8
+ * function), charge, noise or production stage runs.
7
9
  * @see docs/MOTION_AND_SIGNAL.md for equations, coordinate/unit conventions, blockers and support
8
10
  * limits.
9
11
  */
@@ -14,19 +16,22 @@ import { calculateSensorEqeTemporalExposure } from "./eqe-temporal-exposure.js";
14
16
  import { calculateSensorSpatialSamplingQuadrature } from "./spatial-sampling-quadrature.js";
15
17
  import { calculateSensorSpectralQuadrature } from "./spectral-quadrature.js";
16
18
  import { bindSensorTemporalSamples } from "./temporal-sample-binding.js";
19
+ import { requireInputKeys } from "../core/record-validation.js";
17
20
  /**
18
- * Compose declared scene radiance through paraxial optics and instantaneous EQE
19
- * at every exact local shutter midpoint. Light is never averaged before response
20
- * validity. No projection, renderer, PSF, charge/noise or production stage executes.
21
+ * Runs declared scene radiance through paraxial optics and the instantaneous EQE
22
+ * response at every exact local shutter midpoint time. Light is never averaged
23
+ * before the response checks. No projection, renderer, PSF, charge, noise or
24
+ * production stage runs.
21
25
  */
22
26
  export function calculateSceneSensorEqeTemporalExposure(input) {
27
+ requireInputKeys(input, "calculateSceneSensorEqeTemporalExposure", ["sensor", "sceneBindings", "optics", "timeReference", "samples"]);
23
28
  if (input.timeReference !== "first-opening-boundary-phase") {
24
29
  throw new InvalidScientificInputError("Scene samples must use the explicit first-opening-boundary-phase time reference.");
25
30
  }
26
31
  if (input.sensor.responseApplication.sourcePlane.value !== "sensor-package-incident") {
27
32
  throw new InvalidScientificInputError("Scene optical output requires a sensor-package-incident response application.");
28
33
  }
29
- // Bound total declared work before any per-instant optical calculation.
34
+ // Check the total declared work against its limit before any per-instant optical calculation.
30
35
  const ordered = bindSensorTemporalSamples(input.samples, sample => sample.sceneSamples);
31
36
  const spatialQuadrature = calculateSensorSpatialSamplingQuadrature({ ...input.sensor.spatialSampling,
32
37
  colorSamplingProfile: input.sensor.colorSamplingProfile,
@@ -1 +1 @@
1
- {"version":3,"file":"scene-eqe-temporal-exposure.js","sourceRoot":"","sources":["../../src/sensor/scene-eqe-temporal-exposure.ts"],"names":[],"mappings":"AAAA,sCAAsC;AAEtC;;;;;;;GAOG;AAEH,OAAO,EAAE,mBAAmB,EAA0B,MAAM,+BAA+B,CAAC;AAC5F,OAAO,EAAE,2BAA2B,EAAE,MAAM,uBAAuB,CAAC;AACpE,OAAO,EAAE,0CAA0C,EACK,MAAM,yCAAyC,CAAC;AACxG,OAAO,EAAE,kCAAkC,EAAgD,MAAM,4BAA4B,CAAC;AAC9H,OAAO,EAAE,wCAAwC,EAAE,MAAM,kCAAkC,CAAC;AAC5F,OAAO,EAAE,iCAAiC,EAAE,MAAM,0BAA0B,CAAC;AAC7E,OAAO,EAAE,yBAAyB,EAAE,MAAM,8BAA8B,CAAC;AA+BzE;;;;GAIG;AACH,MAAM,UAAU,uCAAuC,CACrD,KAAmD;IAEnD,IAAI,KAAK,CAAC,aAAa,KAAK,8BAA8B,EAAE,CAAC;QAC3D,MAAM,IAAI,2BAA2B,CAAC,kFAAkF,CAAC,CAAC;IAC5H,CAAC;IACD,IAAI,KAAK,CAAC,MAAM,CAAC,mBAAmB,CAAC,WAAW,CAAC,KAAK,KAAK,yBAAyB,EAAE,CAAC;QACrF,MAAM,IAAI,2BAA2B,CAAC,+EAA+E,CAAC,CAAC;IACzH,CAAC;IACD,wEAAwE;IACxE,MAAM,OAAO,GAAG,yBAAyB,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;IACxF,MAAM,iBAAiB,GAAG,wCAAwC,CAAC,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,eAAe;QAClG,oBAAoB,EAAE,KAAK,CAAC,MAAM,CAAC,oBAAoB;QACvD,2BAA2B,EAAE,KAAK,CAAC,MAAM,CAAC,aAAa,CAAC,cAAc;QACtE,YAAY,EAAE,KAAK,CAAC,MAAM,CAAC,aAAa,CAAC,mBAAmB,CAAC,YAAY,EAAE,CAAC,CAAC,KAAK,CAAC;IACrF,MAAM,kBAAkB,GAAG,iCAAiC,CAAC,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,gBAAgB;QAC7F,oBAAoB,EAAE,KAAK,CAAC,MAAM,CAAC,oBAAoB;QACvD,uBAAuB,EAAE,KAAK,CAAC,MAAM,CAAC,uBAAuB,EAAE,CAAC,CAAC,KAAK,CAAC;IACzE,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;IACpC,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE;QAC1C,MAAM,MAAM,GAAG,0CAA0C,CAAC,EAAE,iBAAiB,EAAE,kBAAkB;YAC/F,aAAa,EAAE,KAAK,CAAC,aAAa,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM;YACxD,4BAA4B,EAAE,MAAM,CAAC,+BAA+B,EAAE,OAAO,EAAE,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC;QACxG,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;YACxC,IAAI,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACzC,MAAM,IAAI,2BAA2B,CAAC,wEAAwE,CAAC,CAAC;YAClH,CAAC;YACD,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACvC,CAAC;QACD,OAAO,EAAE,mBAAmB,EAAE,MAAM,CAAC,mBAAmB;YACtD,+BAA+B,EAAE,MAAM,CAAC,+BAA+B,EAAE,MAAM,EAAE,CAAC;IACtF,CAAC,CAAC,CAAC;IACH,MAAM,QAAQ,GAAG,kCAAkC,CAAC,EAAE,GAAG,KAAK,CAAC,MAAM;QACnE,OAAO,EAAE,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,EAAE,mBAAmB,EAAE,MAAM,CAAC,mBAAmB;YACtF,+BAA+B,EAAE,MAAM,CAAC,+BAA+B;YACvE,iBAAiB,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,iBAAiB,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;IACpE,OAAO,mBAAmB,CAAC,EAAE,WAAW,EAAE,yBAAyB,EAAE,8BAA8B,EAAE,KAAK;QACxG,8BAA8B,EAAE,KAAK,EAAE,wBAAwB,EAAE,KAAK,EAAE,cAAc,EAAE,QAAQ;KACjG,EAAE,oCAAoC,EAAE,OAAO,EAAE;QAChD,kHAAkH;QAClH,0GAA0G;QAC1G,6GAA6G;KAC9G,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"scene-eqe-temporal-exposure.js","sourceRoot":"","sources":["../../src/sensor/scene-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, starting from declared scene radiance: paraxial\n * (small-angle) optics, then the EQE (external quantum efficiency) response, at every exact local\n * shutter midpoint time.\n *\n * Light is never averaged before the response checks. No projection, renderer, PSF (point-spread\n * function), charge, noise or production stage runs.\n * @see docs/MOTION_AND_SIGNAL.md for equations, coordinate/unit conventions, blockers and support\n * limits.\n */\n\nimport { approximationResult, type CalculationResult } from \"../core/calculation-result.js\";\nimport { InvalidScientificInputError } from \"../core/validation.js\";\nimport { calculateSceneToSensorIrradianceQuadrature,\n type CalculateSceneToSensorIrradianceQuadratureInput } from \"../optics/scene-to-sensor-quadrature.js\";\nimport { calculateSensorEqeTemporalExposure, type CalculateSensorEqeTemporalExposureInput } from \"./eqe-temporal-exposure.js\";\nimport { calculateSensorSpatialSamplingQuadrature } from \"./spatial-sampling-quadrature.js\";\nimport { calculateSensorSpectralQuadrature } from \"./spectral-quadrature.js\";\nimport { bindSensorTemporalSamples } from \"./temporal-sample-binding.js\";\nimport { requireInputKeys } from \"../core/record-validation.js\";\n\n/** Input: declared physical scene radiance at every spatial position, wavelength and local shutter midpoint time. */\nexport interface CalculateSceneSensorEqeTemporalExposureInput {\n /** One destination site, its response and one local shutter event. No constant-rate declaration is needed. */\n sensor: Omit<CalculateSensorEqeTemporalExposureInput, \"samples\">;\n sceneBindings: CalculateSceneToSensorIrradianceQuadratureInput[\"sceneBindings\"];\n optics: CalculateSceneToSensorIrradianceQuadratureInput[\"optics\"];\n /** States that scene query times are seconds from the shutter's first opening boundary. */\n timeReference: \"first-opening-boundary-phase\";\n samples: readonly {\n temporalSampleIndex: number;\n timeSecondsFromOpeningReference: number;\n sceneSamples: CalculateSceneToSensorIrradianceQuadratureInput[\"samples\"];\n }[];\n}\n\n/** Result. The optical and sensor results each keep their own approximation labels and evidence. */\nexport interface SceneSensorEqeTemporalExposure {\n sourcePlane: \"sensor-package-incident\";\n sourceTargetProjectionVerified: false;\n sceneProviderExecutionVerified: false;\n psfRedistributionApplied: false;\n opticalSamples: readonly {\n temporalSampleIndex: number;\n timeSecondsFromOpeningReference: number;\n optics: ReturnType<typeof calculateSceneToSensorIrradianceQuadrature>;\n }[];\n exposure: ReturnType<typeof calculateSensorEqeTemporalExposure>;\n}\n\n/**\n * Runs declared scene radiance through paraxial optics and the instantaneous EQE\n * response at every exact local shutter midpoint time. Light is never averaged\n * before the response checks. No projection, renderer, PSF, charge, noise or\n * production stage runs.\n */\nexport function calculateSceneSensorEqeTemporalExposure(\n input: CalculateSceneSensorEqeTemporalExposureInput\n): CalculationResult<SceneSensorEqeTemporalExposure> {\n requireInputKeys(input, \"calculateSceneSensorEqeTemporalExposure\", [\"sensor\", \"sceneBindings\", \"optics\", \"timeReference\", \"samples\"]);\n if (input.timeReference !== \"first-opening-boundary-phase\") {\n throw new InvalidScientificInputError(\"Scene samples must use the explicit first-opening-boundary-phase time reference.\");\n }\n if (input.sensor.responseApplication.sourcePlane.value !== \"sensor-package-incident\") {\n throw new InvalidScientificInputError(\"Scene optical output requires a sensor-package-incident response application.\");\n }\n // Check the total declared work against its limit before any per-instant optical calculation.\n const ordered = bindSensorTemporalSamples(input.samples, sample => sample.sceneSamples);\n const spatialQuadrature = calculateSensorSpatialSamplingQuadrature({ ...input.sensor.spatialSampling,\n colorSamplingProfile: input.sensor.colorSamplingProfile,\n colorSamplingBindingProfile: input.sensor.localExposure.bindingProfile,\n nativeRaster: input.sensor.localExposure.exposureWindowInput.nativeRaster }).value;\n const spectralQuadrature = calculateSensorSpectralQuadrature({ ...input.sensor.spectralSampling,\n colorSamplingProfile: input.sensor.colorSamplingProfile,\n spectralResponseProfile: input.sensor.spectralResponseProfile }).value;\n const sampleIds = new Set<string>();\n const opticalSamples = ordered.map(sample => {\n const optics = calculateSceneToSensorIrradianceQuadrature({ spatialQuadrature, spectralQuadrature,\n sceneBindings: input.sceneBindings, optics: input.optics,\n timeSecondsFromExposureStart: sample.timeSecondsFromOpeningReference, samples: sample.sceneSamples });\n for (const node of optics.value.samples) {\n if (sampleIds.has(node.request.sampleId)) {\n throw new InvalidScientificInputError(\"Scene sampleId must be unique across the complete temporal quadrature.\");\n }\n sampleIds.add(node.request.sampleId);\n }\n return { temporalSampleIndex: sample.temporalSampleIndex,\n timeSecondsFromOpeningReference: sample.timeSecondsFromOpeningReference, optics };\n });\n const exposure = calculateSensorEqeTemporalExposure({ ...input.sensor,\n samples: opticalSamples.map(sample => ({ temporalSampleIndex: sample.temporalSampleIndex,\n timeSecondsFromOpeningReference: sample.timeSecondsFromOpeningReference,\n irradianceSamples: sample.optics.value.irradianceSamples })) });\n return approximationResult({ sourcePlane: \"sensor-package-incident\", sourceTargetProjectionVerified: false,\n sceneProviderExecutionVerified: false, psfRedistributionApplied: false, opticalSamples, exposure\n }, \"scene-sensor-eqe-temporal-exposure\", \"0.1.0\", [\n \"Scene targets, visibility and provider transport remain declared; projection and PSF execution are not verified.\",\n \"Paraxial optical irradiance and EQE validity are evaluated independently at each local shutter midpoint.\",\n \"Child uncertainties are not combined; no quadrature convergence bound or production activation is asserted.\"\n ]);\n}\n"]}
@@ -1,20 +1,18 @@
1
1
  /**
2
- * Module boundary and integration notes.
3
- * Calculates physical imaging-area metrics independently from native raster density. Crop factor uses
4
- * the diagonal ratio to a 36 × 24 mm reference frame. Digital/output crops are not part of this
5
- * physical imaging-area quantity.
6
- * Calculates physical imaging-area, native-raster, and geometric sampling metrics without coupling
7
- * sensor size to resolution. The supplied raster is assumed to span the supplied imaging area. Derived
8
- * sampling pitch is geometric sample spacing only and must not be interpreted as photosite fill factor
9
- * or photon-collection area.
2
+ * Sensor geometry: physical size of the imaging area (diagonal, aspect ratio, 35 mm crop factor) and
3
+ * the native pixel grid (megapixels, pixel pitch).
4
+ *
5
+ * Sensor size and resolution are kept independent. Crop factor is the ratio of diagonals to a
6
+ * 36 × 24 mm frame, and does not include any digital or output crop. Pixel pitch here is only the
7
+ * spacing between samples; it is not the photosite's fill factor or light-collecting area.
10
8
  * @see docs/MOTION_AND_SIGNAL.md for equations, coordinate/unit conventions, blockers and support
11
9
  * limits.
12
10
  */
13
11
  import { type CalculationResult } from "../core/calculation-result.js";
14
12
  /**
15
- * Physical photosensitive imaging area used for image formation.
13
+ * The physical light-sensitive imaging area used for image formation.
16
14
  *
17
- * This is deliberately not a sensor package/die dimension.
15
+ * It is deliberately not the size of the sensor package or die.
18
16
  */
19
17
  export interface SensorImagingArea {
20
18
  /** Physical active imaging width in millimetres. */
@@ -23,10 +21,10 @@ export interface SensorImagingArea {
23
21
  heightMm: number;
24
22
  }
25
23
  /**
26
- * Native effective image-sampling raster associated with an imaging area.
24
+ * Width and height of an image grid in pixels.
27
25
  *
28
- * The raster describes effective image samples. It does not imply that each
29
- * sample corresponds one-to-one with a physical photodiode/photosite.
26
+ * Pixels here are image samples. That does not mean each sample matches one
27
+ * physical photodiode (photosite).
30
28
  */
31
29
  export interface RasterDimensions {
32
30
  /** Horizontal image-sample/pixel count. */
@@ -35,10 +33,10 @@ export interface RasterDimensions {
35
33
  pixelHeight: number;
36
34
  }
37
35
  /**
38
- * Native effective image-sampling raster associated with an imaging area.
36
+ * The native pixel grid of an imaging area.
39
37
  *
40
- * This alias identifies semantic role; generic active/output rasters should
41
- * use RasterDimensions instead.
38
+ * This alias names the role. For other grids, such as active or output
39
+ * images, use RasterDimensions.
42
40
  */
43
41
  export type NativeImageRaster = RasterDimensions;
44
42
  export interface ImagingAreaMetrics {
@@ -49,8 +47,8 @@ export interface ImagingAreaMetrics {
49
47
  /**
50
48
  * Diagonal crop factor relative to a 36 × 24 mm reference frame.
51
49
  *
52
- * This is a physical imaging-area quantity and does not include later
53
- * digital/output cropping.
50
+ * It describes the physical imaging area only, and does not include any
51
+ * later digital or output crop.
54
52
  */
55
53
  cropFactor35Mm: number;
56
54
  }
@@ -70,15 +68,15 @@ export interface SensorGeometryMetrics {
70
68
  };
71
69
  sampling: {
72
70
  /**
73
- * Horizontal geometric sampling pitch in micrometres.
71
+ * Horizontal sample spacing (pitch) in micrometres.
74
72
  *
75
- * This is image-sample spacing, not physical photodiode active area.
73
+ * This is the spacing between image samples, not the photodiode's active area.
76
74
  */
77
75
  pitchXMicrometers: number;
78
76
  /**
79
- * Vertical geometric sampling pitch in micrometres.
77
+ * Vertical sample spacing (pitch) in micrometres.
80
78
  *
81
- * This is image-sample spacing, not physical photodiode active area.
79
+ * This is the spacing between image samples, not the photodiode's active area.
82
80
  */
83
81
  pitchYMicrometers: number;
84
82
  /** Horizontal sampling pitch divided by vertical sampling pitch. */
@@ -86,26 +84,24 @@ export interface SensorGeometryMetrics {
86
84
  };
87
85
  }
88
86
  /**
89
- * Calculates physical imaging-area metrics independently from native raster
90
- * density.
87
+ * Calculates metrics of the physical imaging area, independent of pixel count.
91
88
  *
92
- * Crop factor uses the diagonal ratio to a 36 × 24 mm reference frame.
93
- * Digital/output crops are not part of this physical imaging-area quantity.
89
+ * Crop factor is the ratio of diagonals to a 36 × 24 mm reference frame. It
90
+ * does not include any digital or output crop.
94
91
  *
95
92
  * @param imagingArea Physical photosensitive imaging area.
96
93
  * @returns Physical diagonal, aspect ratio, and diagonal 35 mm crop factor.
97
94
  */
98
95
  export declare function calculateImagingAreaMetrics(imagingArea: SensorImagingArea): CalculationResult<ImagingAreaMetrics>;
99
96
  /**
100
- * Calculates physical imaging-area, native-raster, and geometric sampling
101
- * metrics without coupling sensor size to resolution.
97
+ * Calculates metrics of the physical imaging area, the native pixel grid and
98
+ * the sample spacing, keeping sensor size and resolution independent.
102
99
  *
103
- * The supplied raster is assumed to span the supplied imaging area. Derived
104
- * sampling pitch is geometric sample spacing only and must not be interpreted
105
- * as photosite fill factor or photon-collection area.
100
+ * The grid is assumed to cover the whole imaging area. The derived pitch is
101
+ * only the spacing between samples. Do not read it as the photosite's fill
102
+ * factor or light-collecting area.
106
103
  *
107
104
  * @param input Physical imaging area and native effective image raster.
108
105
  * @returns Derived imaging-area, raster, and sampling metrics.
109
106
  */
110
107
  export declare function calculateSensorGeometryMetrics(input: CalculateSensorGeometryMetricsInput): CalculationResult<SensorGeometryMetrics>;
111
- //# sourceMappingURL=sensor-geometry.d.ts.map
@@ -1,58 +1,73 @@
1
1
  // SPDX-License-Identifier: Apache-2.0
2
2
  /**
3
- * Module boundary and integration notes.
4
- * Calculates physical imaging-area metrics independently from native raster density. Crop factor uses
5
- * the diagonal ratio to a 36 × 24 mm reference frame. Digital/output crops are not part of this
6
- * physical imaging-area quantity.
7
- * Calculates physical imaging-area, native-raster, and geometric sampling metrics without coupling
8
- * sensor size to resolution. The supplied raster is assumed to span the supplied imaging area. Derived
9
- * sampling pitch is geometric sample spacing only and must not be interpreted as photosite fill factor
10
- * or photon-collection area.
3
+ * Sensor geometry: physical size of the imaging area (diagonal, aspect ratio, 35 mm crop factor) and
4
+ * the native pixel grid (megapixels, pixel pitch).
5
+ *
6
+ * Sensor size and resolution are kept independent. Crop factor is the ratio of diagonals to a
7
+ * 36 × 24 mm frame, and does not include any digital or output crop. Pixel pitch here is only the
8
+ * spacing between samples; it is not the photosite's fill factor or light-collecting area.
11
9
  * @see docs/MOTION_AND_SIGNAL.md for equations, coordinate/unit conventions, blockers and support
12
10
  * limits.
13
11
  */
14
12
  import { calculatedResult } from "../core/calculation-result.js";
15
13
  import { InvalidScientificInputError, requirePositiveFinite, requirePositiveInteger } from "../core/validation.js";
14
+ import { portableHypot } from "../core/portable-math.js";
15
+ import { requireInputObject, requireInputKeys } from "../core/record-validation.js";
16
16
  const REFERENCE_35MM_WIDTH_MM = 36;
17
17
  const REFERENCE_35MM_HEIGHT_MM = 24;
18
- const REFERENCE_35MM_DIAGONAL_MM = Math.hypot(REFERENCE_35MM_WIDTH_MM, REFERENCE_35MM_HEIGHT_MM);
18
+ /** 36² + 24² mm²: the squared diagonal of the 35 mm reference frame (exact as a double). */
19
+ const REFERENCE_35MM_DIAGONAL_SQUARED_MM2 = REFERENCE_35MM_WIDTH_MM * REFERENCE_35MM_WIDTH_MM +
20
+ REFERENCE_35MM_HEIGHT_MM * REFERENCE_35MM_HEIGHT_MM;
21
+ /**
22
+ * Diagonal 35 mm crop factor, √(1872 / (w² + h²)). It uses only correctly rounded operations, so the
23
+ * stored value is bit-identical in every JavaScript engine (see core/portable-math.ts).
24
+ */
25
+ function diagonalCropFactor35Mm(widthMm, heightMm, diagonalMm) {
26
+ const diagonalSquaredMm2 = widthMm * widthMm + heightMm * heightMm;
27
+ return Number.isFinite(diagonalSquaredMm2) && diagonalSquaredMm2 > 0
28
+ ? Math.sqrt(REFERENCE_35MM_DIAGONAL_SQUARED_MM2 / diagonalSquaredMm2)
29
+ : Math.sqrt(REFERENCE_35MM_DIAGONAL_SQUARED_MM2) / diagonalMm;
30
+ }
19
31
  /**
20
- * Calculates physical imaging-area metrics independently from native raster
21
- * density.
32
+ * Calculates metrics of the physical imaging area, independent of pixel count.
22
33
  *
23
- * Crop factor uses the diagonal ratio to a 36 × 24 mm reference frame.
24
- * Digital/output crops are not part of this physical imaging-area quantity.
34
+ * Crop factor is the ratio of diagonals to a 36 × 24 mm reference frame. It
35
+ * does not include any digital or output crop.
25
36
  *
26
37
  * @param imagingArea Physical photosensitive imaging area.
27
38
  * @returns Physical diagonal, aspect ratio, and diagonal 35 mm crop factor.
28
39
  */
29
40
  export function calculateImagingAreaMetrics(imagingArea) {
41
+ requireInputKeys(imagingArea, "calculateImagingAreaMetrics", ["widthMm", "heightMm"]);
30
42
  requirePositiveFinite("imagingArea.widthMm", imagingArea.widthMm);
31
43
  requirePositiveFinite("imagingArea.heightMm", imagingArea.heightMm);
32
- const diagonalMm = Math.hypot(imagingArea.widthMm, imagingArea.heightMm);
44
+ const diagonalMm = portableHypot(imagingArea.widthMm, imagingArea.heightMm);
33
45
  return calculatedResult({
34
46
  diagonalMm,
35
47
  aspectRatio: imagingArea.widthMm / imagingArea.heightMm,
36
- cropFactor35Mm: REFERENCE_35MM_DIAGONAL_MM / diagonalMm
48
+ cropFactor35Mm: diagonalCropFactor35Mm(imagingArea.widthMm, imagingArea.heightMm, diagonalMm)
37
49
  }, "sensor-imaging-area", "1.0.0", [
38
50
  "35 mm reference frame is 36 × 24 mm and crop factor is diagonal-based.",
39
51
  "Digital/output cropping is excluded from physical imaging-area crop factor."
40
52
  ]);
41
53
  }
42
54
  /**
43
- * Calculates physical imaging-area, native-raster, and geometric sampling
44
- * metrics without coupling sensor size to resolution.
55
+ * Calculates metrics of the physical imaging area, the native pixel grid and
56
+ * the sample spacing, keeping sensor size and resolution independent.
45
57
  *
46
- * The supplied raster is assumed to span the supplied imaging area. Derived
47
- * sampling pitch is geometric sample spacing only and must not be interpreted
48
- * as photosite fill factor or photon-collection area.
58
+ * The grid is assumed to cover the whole imaging area. The derived pitch is
59
+ * only the spacing between samples. Do not read it as the photosite's fill
60
+ * factor or light-collecting area.
49
61
  *
50
62
  * @param input Physical imaging area and native effective image raster.
51
63
  * @returns Derived imaging-area, raster, and sampling metrics.
52
64
  */
53
65
  export function calculateSensorGeometryMetrics(input) {
66
+ requireInputKeys(input, "calculateSensorGeometryMetrics", ["imagingArea", "nativeRaster"]);
67
+ requireInputObject(input.imagingArea, "imagingArea");
54
68
  requirePositiveFinite("imagingArea.widthMm", input.imagingArea.widthMm);
55
69
  requirePositiveFinite("imagingArea.heightMm", input.imagingArea.heightMm);
70
+ requireInputObject(input.nativeRaster, "nativeRaster");
56
71
  requirePositiveInteger("nativeRaster.pixelWidth", input.nativeRaster.pixelWidth);
57
72
  requirePositiveInteger("nativeRaster.pixelHeight", input.nativeRaster.pixelHeight);
58
73
  const totalImageSamples = input.nativeRaster.pixelWidth * input.nativeRaster.pixelHeight;