ohif-viewer/extensions
Alireza 70421225d7
fix(pt): resolve Philips PET private SUV bulkdata before scaling (#6096)
* fix(pt): resolve Philips PET private SUV bulkdata before scaling

When a DICOMweb server delivers the Philips PET private tags SUVScaleFactor
(7053,1000) / ActivityConcentrationScaleFactor (7053,1009) as bulkdata, dcmjs
naturalization leaves them as { BulkDataURI } objects. These were fed verbatim
to calculate-suv, which treats the object as a valid value and silently
corrupts the SUV scaling factors.

Resolve these scalar private tags to numbers during ingestion - in both the
lazy (async) and non-lazy (sync) DICOMweb metadata paths, before INSTANCES_ADDED
fires - by decoding the bulkdata (VR-aware: DS/IS text or little-endian FL/FD).
Harden getPTImageIdInstanceMetadata to coerce values to finite numbers (reusing
@ohif/core utils.toNumber) and reject unresolved bulkdata objects so they can
never reach calculate-suv. Share the bulkdata-attach helper between both
metadata paths. Adds unit tests for the bulkdata decoder/resolver and for
getPTImageIdInstanceMetadata.

* refactor(bulkdata): move PET bulkdata resolution to a generic core tag registry

Generalize resolvePETPrivateScalarBulkData into a datasource-agnostic
utils.resolveBulkDataTags in @ohif/core, backed by a static tag registry
seeded with the Philips PET SUV/activity-concentration scalar tags and
extensible via registerResolvedBulkDataTags.

* fix(bulkdata): strip NUL padding and refresh qido auth before resolution

Address review feedback:
- decodeText now strips NUL (0x00) padding, which String.trim() leaves
  intact, so NUL-padded DS/IS values no longer decode as NaN. Adds a
  regression test.
- refresh qidoDicomWebClient.headers before resolveBulkDataTags in both
  series-metadata paths; retrieveBulkData is bound to qidoDicomWebClient,
  matching every other qido op in this file.

* fix(dicomweb): await deferred metadata storage

* fix(dicomweb): support single-part bulkdata responses
2026-07-11 12:16:32 -04:00
..
cornerstone feat(next): native Generic Viewport migration (useNextViewports) (#6101) 2026-07-11 12:13:54 -04:00
cornerstone-dicom-pmap feat(next): native Generic Viewport migration (useNextViewports) (#6101) 2026-07-11 12:13:54 -04:00
cornerstone-dicom-rt chore(version): Update package versions to 3.13.0-beta.122 [skip ci] 2026-07-11 06:24:30 +00:00
cornerstone-dicom-seg feat(next): native Generic Viewport migration (useNextViewports) (#6101) 2026-07-11 12:13:54 -04:00
cornerstone-dicom-sr feat(next): native Generic Viewport migration (useNextViewports) (#6101) 2026-07-11 12:13:54 -04:00
cornerstone-dynamic-volume feat(next): native Generic Viewport migration (useNextViewports) (#6101) 2026-07-11 12:13:54 -04:00
default fix(pt): resolve Philips PET private SUV bulkdata before scaling (#6096) 2026-07-11 12:16:32 -04:00
dicom-microscopy chore(version): Update package versions to 3.13.0-beta.122 [skip ci] 2026-07-11 06:24:30 +00:00
dicom-pdf chore(version): Update package versions to 3.13.0-beta.122 [skip ci] 2026-07-11 06:24:30 +00:00
dicom-video chore(version): Update package versions to 3.13.0-beta.122 [skip ci] 2026-07-11 06:24:30 +00:00
measurement-tracking feat(next): native Generic Viewport migration (useNextViewports) (#6101) 2026-07-11 12:13:54 -04:00
test-extension chore(version): Update package versions to 3.13.0-beta.122 [skip ci] 2026-07-11 06:24:30 +00:00
tmtv feat(next): native Generic Viewport migration (useNextViewports) (#6101) 2026-07-11 12:13:54 -04:00
usAnnotation feat(next): native Generic Viewport migration (useNextViewports) (#6101) 2026-07-11 12:13:54 -04:00