1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
|
############################################################################
#
# Program: GDCM (Grassroots DICOM). A DICOM library
#
# Copyright (c) 2006-2011 Mathieu Malaterre
# All rights reserved.
# See Copyright.txt or http://gdcm.sourceforge.net/Copyright.html for details.
#
# This software is distributed WITHOUT ANY WARRANTY; without even
# the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
# PURPOSE. See the above copyright notice for more information.
#
############################################################################
"""
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 explicitely 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.SetByteValue( mystr, gdcm.VL( len(mystr) ) )
w = gdcm.Writer()
w.SetFile( f )
w.SetFileName( file2 )
if not w.Write():
sys.exit(1)
|