Skip to content

v3.0 draft#11

Open
michaelvacha wants to merge 8 commits into
mainfrom
dev
Open

v3.0 draft#11
michaelvacha wants to merge 8 commits into
mainfrom
dev

Conversation

@michaelvacha

@michaelvacha michaelvacha commented Jun 19, 2026

Copy link
Copy Markdown
Collaborator

Main changes:

  • rescale slope/intercept: any value is allowed (with warnings)
  • units: CPS not allowed, CNTS only with Philips scale factors
  • dose: added DROs 3_2_3, 3_4_3, and 3_5_3 with Manufacturer = "SYNTHETIC" for testing "vendor-neutral" strategy
  • admin time: new strategy for recognizing wrong dates and fallback to time offset when wrong/absent date & short-lived radionuclide + new DROs for that (DRO_4_3 - DRO_4_5)
  • other SOP classes: detailed strategy (including flowchart) and DROs for Enhanced PET SOP class (DRO_7_x_x), short comment for legacy converted PET SOP class
  • other SUV types: short comment on computation
  • error DROs (DRO_error_x_x): typical examples of images where SUV shouldn't be computed
  • tables with required attributes

@michaelvacha michaelvacha self-assigned this Jun 19, 2026
@michaelvacha

michaelvacha commented Jun 19, 2026

Copy link
Copy Markdown
Collaborator Author

Still to do (me):

  • check compatibilty of DROs with clinical tools
  • recalculate all new DROs
  • double-check / rephrase manual
  • edit docx manual (visual side) and update readme before merging
  • (add expected values for other SUV types ?)

@michaelvacha michaelvacha marked this pull request as draft June 19, 2026 14:19
@michaelvacha michaelvacha marked this pull request as ready for review June 24, 2026 12:20
@alexzwanenburg

Copy link
Copy Markdown
Member

I have been testing the new DROs, and still have to test the enhanced PET DROs.

The only issue I was able to identify so far was with DRO_error_4_2, where Radiopharmaceutical Start DateTime was absent (like DRO_error_4_1), instead of anonymised.

@alexzwanenburg

Copy link
Copy Markdown
Member

MIRP has difficult parsing the timezone (+0100) in the Radiopharmaceutical DateTime string ('20250101100000.000000+0100'). Since its usage is supported in the DICOM standard (https://dicom.nema.org/medical/dicom/current/output/chtml/part05/sect_6.2.html), I will make the necessary changes.

@alexzwanenburg

Copy link
Copy Markdown
Member

I stumbled across the following standard nomenclature for PET and SUV units in DICOM:

Enhanced PET can have multiple Real World Value Mapping Sequences, which suggests the following order of checks:

  • Check if there is a real world value mapping sequence with the desired SUV present.
    • If yes: use Real World Value Intercept and Slope (or lookup table, if present) to convert pixel values to the desired SUV.
  • If the desired SUV is not present: Check if there is a real world value mapping sequence with another SUV conversion present.
    • If yes: use Real World Value Intercept and Slope (or lookup table, if present) to convert pixel values to that SUV.
    • Then convert between SUV.
  • If another SUV is not present: Check if there is a real world value mapping sequence with Bq/ml present.
    • If yes: use Real World Value Intercept and Slope (or lookup table, if present) to convert pixel values to Bq/ml.
    • Then convert to SUV.
  • If there are no Real World Value Mapping Sequences with Bq/ml or SUV present: Check if the Rescale Type (0028, 1054) is set to a recognisable value (BQML, or any of the legacy SUV units):
    • If yes: Use the rescale intercept and slope from the Pixel Value Transformation Sequence.
    • Then convert to or between SUV.
  • If no: you cannot compute SUV.

I think its important to note that for Enhanced PET the Rescale Intercept and Slope are a fall-back option, and that Real World Value Intercept and Slope should be used preferably.

@michaelvacha

Copy link
Copy Markdown
Collaborator Author

The real-world value slope / intercept are already mentioned in the manual:
Rescaling: stored within the Real World Value Mapping Sequence (0040,9096) as attributes Real World Value Slope (0040,9225) and Real World Value Intercept (0040,9224). Alternatively, rescaling may be done using the attribute Real World Value LUT Data (0040,9212).

However, I did not consider multiple Real World Value Mapping Sequences being present, and I will add your strategy to the manual.

@alexzwanenburg

Copy link
Copy Markdown
Member

Ok, I can replicate:

  • DRO_7_0_0
  • DRO_7_2_0
  • DRO_7_3_0

I cannot replicate:

  • DRO_7_1_0: 0.20000, 1.00000, 5.33334
  • DRO_7_3_1: 0.20002, 1.00010, 4.12867 <-- Frame Reference DateTime is the same for all frames, but should be different?

@michaelvacha

Copy link
Copy Markdown
Collaborator Author

I have found the error and updated DROs 7_1_0, 7_3_0, and 7_3_1. Hope they work properly now :-)

@alexzwanenburg

Copy link
Copy Markdown
Member

MIRP is now able to reproduce the values.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants