change_header¶
Modify DICOM header information to simulate failing QA.
Functions
|
Change specified tags of all dicoms in a directory. |
Generate DataElements for random acquisition day and time. |
|
|
Make random date of birth, age, and sex. |
|
Generate ID DataElements. |
Exercise header modification code to make example data we can use. |
- change_header.change_tags(dcm_dir, new_data, out_dir=None)[source]¶
Change specified tags of all dicoms in a directory. Optionally make copies in out_dir.
sideffect: writes copies of
dcm_dir
dicoms intoout_dir
unlessout_dir
isNone
.- Parameters:
dcm_dir (Path) – input directory with dicom files (
MR*
,*IMA
, or*dcm
)new_data (List[DataElement]) – list of data elements to replace like
[pydicom.DataElement(value="newpname", VR="LO", tag=(0x0018, 0x1030))]
out_dir (Path | None) – Optional. Where to save modified dicoms
- Returns:
example modified dicom. last if out_dir, first and only if no
out_dir
.- Return type:
FileDataset | None
>>> new_data = [pydicom.DataElement(value="newpname", VR="LO", tag=(0x0018, 0x1030))] >>> ex_path = Path('example_dicoms/') >>> ex = change_tags(ex_path, new_data) >>> ex.ProtocolName 'newpname'
- change_header.gen_acqdates()[source]¶
Generate DataElements for random acquisition day and time.
- Returns:
ID DataElements List
- Return type:
List[DataElement]
See
gen_anon()
for tag and VR info.
- change_header.gen_anon()[source]¶
Make random date of birth, age, and sex.
- Returns:
list of DataElements with randomized values
- Return type:
List[DataElement]
Tip
Field tag type and location can be extracted like:
x = pydicom.dcmread(example_fname) fields = ['AcquisitionDate', 'AcquisitionTime', 'PatientBirthDate', 'PatientAge', 'PatientSex'] [x[k] for k in fields] # yields [(0008,0022) Acquisition Date DA: '20221222', (0008,0032) Acquisition Time TM: '092132.722500', (0010,0030) Patient's Birth Date DA: '20070404', (0010,1010) Patient's Age AS: '015Y', (0010,0040) Patient's Sex CS: 'F']
Where the tag is the tuple and “
XX
:” is the type
- change_header.gen_ids(new_id)[source]¶
Generate ID DataElements.
- Parameters:
new_id (str) – id string to put into pat name and pat id dicom headers.
- Returns:
ID DataElements List
- Return type:
List[DataElement]
See
gen_anon()
for tag and VR info.>>> data_els = gen_ids('example_name') >>> data_els[0].value 'example_name' >>> data_els[0].VR 'PN' >>> data_els[0].tag (0010, 0010)
- change_header.main_make_mods()[source]¶
Exercise header modification code to make example data we can use.
We can confirm changes are made from shell using AFNI’s
dicom_hinfo
find example/dicom/mod* -iname 'MR*' -exec dicom_hinfo -tag 0010,0010 -sepstr $'\t' -last {} \+ # mod1 example/dicom/mod1/HabitTask/MR.1.3.12.2.1107.5.2.43.167046.2022122209214150118864465 # mod1 example/dicom/mod1/HabitTask/MR.1.3.12.2.1107.5.2.43.167046.2022122209214176799264617 # mod2 example/dicom/mod2/HabitTask/MR.1.3.12.2.1107.5.2.43.167046.2022122209214150118864465 # mod2 example/dicom/mod2/HabitTask/MR.1.3.12.2.1107.5.2.43.167046.2022122209214176799264617