GDCM  2.2.0
ReadAndDumpDICOMDIR.py
################################################################################
#
# 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.
#
# File: ReadAndDumpDICOMDIR.py
#
# Author: Lukas Batteau (lbatteau gmail)
#
# This example shows how to read and dump a DICOMDIR File.
# Based on Tom Marynowski's (lordglub gmail) example.
#
# Usage:
# python ReadAndDumpDICOMDIR.py [DICOMDIR file]
############################################################################
import sys
import gdcm
if __name__ == "__main__":
# Check arguments
if (len(sys.argv) < 2):
# No filename passed
print "No input filename found"
quit()
filename = sys.argv[1]
# Read file
reader = gdcm.Reader()
reader.SetFileName(filename)
if (not reader.Read()):
print "Unable to read %s" % (filename)
quit()
file = reader.GetFile()
# Retrieve header information
fileMetaInformation = file.GetHeader()
print fileMetaInformation
# Retrieve data set
dataSet = file.GetDataSet()
#print dataSet
# Check media storage
mediaStorage = gdcm.MediaStorage()
mediaStorage.SetFromFile(file)
if (gdcm.MediaStorage.GetMSType(str(mediaStorage)) != gdcm.MediaStorage.MediaStorageDirectoryStorage):
# File is not a DICOMDIR
print "This file is not a DICOMDIR (Media storage type: %s)" % (str(mediaStorage))
quit()
# Check Media Storage SOP Class
if (fileMetaInformation.FindDataElement(gdcm.Tag(0x0002, 0x0002))):
sopClassUid = str(fileMetaInformation.GetDataElement(gdcm.Tag(0x0002, 0x0002)).GetValue())
# Check SOP UID
if (sopClassUid != "1.2.840.10008.1.3.10"):
# File is not a DICOMDIR
print "This file is not a DICOMDIR"
else:
# Not present
print "Media Storage SOP Class not present"
quit()
# Iterate through the DICOMDIR data set
iterator = dataSet.GetDES().begin()
while (not iterator.equal(dataSet.GetDES().end())):
dataElement = iterator.next()
# Check the element tag
if (dataElement.GetTag() == gdcm.Tag(0x004, 0x1220)):
# The 'Directory Record Sequence' element
sequence = dataElement.GetValueAsSQ()
# Loop through the sequence items
itemNr = 1
while (itemNr < sequence.GetNumberOfItems()):
item = sequence.GetItem(itemNr)
# Check the element tag
if (item.FindDataElement(gdcm.Tag(0x0004, 0x1430))):
# The 'Directory Record Type' element
value = str(item.GetDataElement(gdcm.Tag(0x0004, 0x1430)).GetValue())
# PATIENT
while (value.strip() == "PATIENT"):
print value.strip()
# Print patient name
if (item.FindDataElement(gdcm.Tag(0x0010, 0x0010))):
value = str(item.GetDataElement(gdcm.Tag(0x0010, 0x0010)).GetValue())
print value
# Print patient ID
if (item.FindDataElement(gdcm.Tag(0x0010, 0x0020))):
value = str(item.GetDataElement(gdcm.Tag(0x0010, 0x0020)).GetValue())
print value
# Next
itemNr = itemNr + 1
item = sequence.GetItem(itemNr)
if (item.FindDataElement(gdcm.Tag(0x0004, 0x1430))):
value = str(item.GetDataElement(gdcm.Tag(0x0004, 0x1430)).GetValue())
# STUDY
while (value.strip() == "STUDY"):
print value.strip()
# Print study UID
if (item.FindDataElement(gdcm.Tag(0x0020, 0x000d))):
value = str(item.GetDataElement(gdcm.Tag(0x0020, 0x000d)).GetValue())
print value
# Print study date
if (item.FindDataElement(gdcm.Tag(0x0008, 0x0020))):
value = str(item.GetDataElement(gdcm.Tag(0x0008, 0x0020)).GetValue())
print value
# Print study description
if (item.FindDataElement(gdcm.Tag(0x0008, 0x1030))):
value = str(item.GetDataElement(gdcm.Tag(0x0008, 0x1030)).GetValue())
print value
# Next
itemNr = itemNr + 1
item = sequence.GetItem(itemNr)
if (item.FindDataElement(gdcm.Tag(0x0004, 0x1430))):
value = str(item.GetDataElement(gdcm.Tag(0x0004, 0x1430)).GetValue())
# SERIES
while (value.strip() == "SERIES"):
print value.strip()
# Print series UID
if (item.FindDataElement(gdcm.Tag(0x0020, 0x000e))):
value = str(item.GetDataElement(gdcm.Tag(0x0020, 0x000e)).GetValue())
print value
# Print series modality
if (item.FindDataElement(gdcm.Tag(0x0008, 0x0060))):
value = str(item.GetDataElement(gdcm.Tag(0x0008, 0x0060)).GetValue())
print "Modality"
print value
# Print series description
if (item.FindDataElement(gdcm.Tag(0x0008, 0x103e))):
value = str(item.GetDataElement(gdcm.Tag(0x0008, 0x103e)).GetValue())
print "Description"
print value
# Next
itemNr = itemNr + 1
item = sequence.GetItem(itemNr)
if (item.FindDataElement(gdcm.Tag(0x0004, 0x1430))):
value = str(item.GetDataElement(gdcm.Tag(0x0004, 0x1430)).GetValue())
# IMAGE
while (value.strip() == "IMAGE"):
print value.strip()
# Print image UID
if (item.FindDataElement(gdcm.Tag(0x0004, 0x1511))):
value = str(item.GetDataElement(gdcm.Tag(0x0004, 0x1511)).GetValue())
print value
# Next
if (itemNr < sequence.GetNumberOfItems()):
itemNr = itemNr + 1
else:
break
item = sequence.GetItem(itemNr)
if (item.FindDataElement(gdcm.Tag(0x0004, 0x1430))):
value = str(item.GetDataElement(gdcm.Tag(0x0004, 0x1430)).GetValue())
# Next
itemNr = itemNr + 1

Generated on Wed Jun 13 2012 20:40:36 for GDCM by doxygen 1.8.1
SourceForge.net Logo