GDCM: ManipulateSequence.py

GDCM 3.2.11

ManipulateSequence.py
"""
Usage:
python ManipulateSequence.py input.dcm output.dcm
This was tested using:
python ManipulateSequence.py gdcmData/D_CLUNIE_CT1_J2KI.dcm myoutput.dcm
This is a dummy example on how to modify a value set in a nested-nested dataset
WARNING:
Do not use as-is in production, this is just an example
This example works in an undefined length Item only (you need to explicitly recompute the length otherwise)
"""
import sys
import gdcm
if __name__ == "__main__":
file1 = sys.argv[1]
file2 = sys.argv[2]
r = gdcm.Reader()
r.SetFileName( file1 )
if not r.Read():
sys.exit(1)
f = r.GetFile()
ds = f.GetDataSet()
tsis = gdcm.Tag(0x0008,0x2112) # SourceImageSequence
if ds.FindDataElement( tsis ):
sis = ds.GetDataElement( tsis )
#sqsis = sis.GetSequenceOfItems()
# GetValueAsSQ handle more cases
sqsis = sis.GetValueAsSQ()
if sqsis.GetNumberOfItems():
item1 = sqsis.GetItem(1)
nestedds = item1.GetNestedDataSet()
tprcs = gdcm.Tag(0x0040,0xa170) # PurposeOfReferenceCodeSequence
if nestedds.FindDataElement( tprcs ):
prcs = nestedds.GetDataElement( tprcs )
sqprcs = prcs.GetSequenceOfItems()
if sqprcs.GetNumberOfItems():
item2 = sqprcs.GetItem(1)
nestedds2 = item2.GetNestedDataSet()
# (0008,0104) LO [Uncompressed predecessor] # 24, 1 CodeMeaning
tcm = gdcm.Tag(0x0008,0x0104)
if nestedds2.FindDataElement( tcm ):
cm = nestedds2.GetDataElement( tcm )
mystr = "GDCM was here"
cm.SetByteStringValue( mystr )
w = gdcm.Writer()
w.SetFile( f )
w.SetFileName( file2 )
if not w.Write():
sys.exit(1)
gdcm::Reader
Reader ala DOM (Document Object Model).
Definition gdcmReader.h:54
gdcm::Tag
Class to represent a DICOM Data Element (Attribute) Tag (Group, Element).
Definition gdcmTag.h:39
gdcm::Writer
Writer ala DOM (Document Object Model).
Definition gdcmWriter.h:49