Skip to content
Draft
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 17 additions & 4 deletions rhscripts/dcm.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
#!/usr/bin/env python
import os, math
import os
import math
import pydicom as dicom
import configparser
import glob
Expand Down Expand Up @@ -227,13 +228,20 @@ def anonymize_folder(self,foldername: str,output_foldername: str,

def get_suv_constants(
file:Union[str, Path, dicom.Dataset],
overwrite_values:Dict=None
overwrite_values:Dict=None,
time_tag:str='series'
) -> Tuple[Dict, Callable[[float], float]]:
""" Extract the constants used for SUV normalization
Parameters
----------
file:
Path to string with dicom dataset, or pre-loaded dicom dataset
time_tag:
DICOM tag to base time calculation on. Can be either `series` or `acquisition`

`series` (default): Use Series Time tag `(0008,0031)`. **Reccomended method**, as this does not change if a PET scan has multiple views

`acquisition`: Uses Acquisition Time tag `(0008,0032)`. This is not always the correct time for SUV-bw calculations.

Returns
-------
Expand All @@ -244,15 +252,20 @@ def get_suv_constants(

"""
if isinstance(file, (str, Path)):
ds = dcmread(file)
ds = dcmread(file, stop_before_pixels=True)
else:
ds = file

# Injection time
inj_time = ds[0x54,0x16][0][0x18,0x1072].value

# Scan time
acq_time = ds.AcquisitionTime
if time_tag == 'series':
acq_time = ds[0x0008,0x0031].value # Series time
elif time_tag == 'acquisition':
acq_time = ds.AcquisitionTime
else:
raise ValueError("'time_tag' must be 'series' or 'acquisition'")

# Injected dose
dose = int(ds[0x54,0x16][0][0x18,0x1074].value)
Expand Down
Loading