File: ReadAndDumpDICOMDIR.py

package info (click to toggle)
gdcm 2.4.4-3%2Bdeb8u1
  • links: PTS, VCS
  • area: main
  • in suites: jessie
  • size: 32,912 kB
  • ctags: 52,166
  • sloc: cpp: 188,527; ansic: 124,526; xml: 41,799; sh: 7,162; python: 3,667; cs: 2,128; java: 1,344; lex: 1,290; tcl: 677; php: 128; makefile: 116
file content (187 lines) | stat: -rw-r--r-- 8,113 bytes parent folder | download | duplicates (8)
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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
################################################################################ 
#
#  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