Commit a302c2d1a82dd6bc9090cf886be443cec4a84022

Authored by Paulo Henrique Junqueira Amorim
1 parent e5314ee9

ENH: Replaced the way it reads some data, changed of vtkgdcm to gdcm reader DICOM tags.

Showing 1 changed file with 154 additions and 98 deletions   Show diff stats
invesalius/reader/dicom.py
@@ -104,10 +104,12 @@ class Parser(): @@ -104,10 +104,12 @@ class Parser():
104 DICOM standard tag (0x0008,0x0022) was used. 104 DICOM standard tag (0x0008,0x0022) was used.
105 """ 105 """
106 # TODO: internationalize data 106 # TODO: internationalize data
107 - date = self.vtkgdcm_reader.GetMedicalImageProperties()\  
108 - .GetAcquisitionDate()  
109 - if (date) and (date != ''):  
110 - return self.__format_date(date) 107 + tag = gdcm.Tag(0x0008, 0x0022)
  108 + ds = self.gdcm_reader.GetFile().GetDataSet()
  109 + if ds.FindDataElement(tag):
  110 + date = ds.GetDataElement(tag).GetValue()
  111 + if (date) and (date != ''):
  112 + return self.__format_date(str(date))
111 return "" 113 return ""
112 114
113 def GetAcquisitionNumber(self): 115 def GetAcquisitionNumber(self):
@@ -151,10 +153,12 @@ class Parser(): @@ -151,10 +153,12 @@ class Parser():
151 153
152 DICOM standard tag (0x0008,0x0032) was used. 154 DICOM standard tag (0x0008,0x0032) was used.
153 """ 155 """
154 - time = self.vtkgdcm_reader.GetMedicalImageProperties()\  
155 - .GetAcquisitionTime()  
156 - if (time) and (time != 'None'):  
157 - return self.__format_time(time) 156 + tag = gdcm.Tag(0x0008, 0x0032)
  157 + ds = self.gdcm_reader.GetFile().GetDataSet()
  158 + if ds.FindDataElement(tag):
  159 + data = ds.GetDataElement(tag).GetValue()
  160 + if (data) and (data != ''):
  161 + return self.__format_time(str(data))
158 return "" 162 return ""
159 163
160 def GetPatientAdmittingDiagnosis(self): 164 def GetPatientAdmittingDiagnosis(self):
@@ -164,7 +168,6 @@ class Parser(): @@ -164,7 +168,6 @@ class Parser():
164 168
165 DICOM standard tag (0x0008,0x1080) was used. 169 DICOM standard tag (0x0008,0x1080) was used.
166 """ 170 """
167 -  
168 tag = gdcm.Tag(0x0008, 0x1080) 171 tag = gdcm.Tag(0x0008, 0x1080)
169 sf = gdcm.StringFilter() 172 sf = gdcm.StringFilter()
170 sf.SetFile(self.gdcm_reader.GetFile()) 173 sf.SetFile(self.gdcm_reader.GetFile())
@@ -1063,14 +1066,15 @@ class Parser(): @@ -1063,14 +1066,15 @@ class Parser():
1063 DICOM standard tag (0x0010,0x0030) was used. 1066 DICOM standard tag (0x0010,0x0030) was used.
1064 """ 1067 """
1065 # TODO: internationalize data 1068 # TODO: internationalize data
1066 - date = self.vtkgdcm_reader.GetMedicalImageProperties()\  
1067 - .GetPatientBirthDate()  
1068 - if (date) and (date!='None'):  
1069 - self.__format_date(date) 1069 + tag = gdcm.Tag(0x0010, 0x0030)
  1070 + ds = self.gdcm_reader.GetFile().GetDataSet()
  1071 + if ds.FindDataElement(tag):
  1072 + data = ds.GetDataElement(tag).GetValue()
  1073 + if (data) and (data != 'None'):
  1074 + return self.__format_date(str(data))
1070 return "" 1075 return ""
1071 1076
1072 1077
1073 -  
1074 def GetStudyID(self): 1078 def GetStudyID(self):
1075 """ 1079 """
1076 Return string containing the Study ID. 1080 Return string containing the Study ID.
@@ -1078,13 +1082,14 @@ class Parser(): @@ -1078,13 +1082,14 @@ class Parser():
1078 1082
1079 DICOM standard tag (0x0020,0x0010) was used. 1083 DICOM standard tag (0x0020,0x0010) was used.
1080 """ 1084 """
1081 -  
1082 - data = self.vtkgdcm_reader.GetMedicalImageProperties()\  
1083 - .GetStudyID()  
1084 - if (data):  
1085 - return data 1085 + tag = gdcm.Tag(0x0020, 0x0010)
  1086 + ds = self.gdcm_reader.GetFile().GetDataSet()
  1087 + if ds.FindDataElement(tag):
  1088 + data = ds.GetDataElement(tag).GetValue()
  1089 + if (data):
  1090 + return str(data)
1086 return "" 1091 return ""
1087 - 1092 +
1088 def GetAcquisitionGantryTilt(self): 1093 def GetAcquisitionGantryTilt(self):
1089 """ 1094 """
1090 Return floating point containing nominal angle of 1095 Return floating point containing nominal angle of
@@ -1093,10 +1098,14 @@ class Parser(): @@ -1093,10 +1098,14 @@ class Parser():
1093 1098
1094 DICOM standard tag (0x0018,0x1120) was used. 1099 DICOM standard tag (0x0018,0x1120) was used.
1095 """ 1100 """
1096 - data = self.vtkgdcm_reader.GetMedicalImageProperties()\  
1097 - .GetGantryTilt()  
1098 - if (data):  
1099 - return float(data) 1101 + tag = gdcm.Tag(0x0018, 0x1120)
  1102 + ds = self.gdcm_reader.GetFile().GetDataSet()
  1103 + if ds.FindDataElement(tag):
  1104 + data = ds.GetDataElement(tag).GetValue()
  1105 +
  1106 + if (data):
  1107 + return float(str(data))
  1108 +
1100 return 0.0 1109 return 0.0
1101 1110
1102 def GetPatientGender(self): 1111 def GetPatientGender(self):
@@ -1109,10 +1118,13 @@ class Parser(): @@ -1109,10 +1118,13 @@ class Parser():
1109 1118
1110 DICOM standard tag (0x0010,0x0040) was used. 1119 DICOM standard tag (0x0010,0x0040) was used.
1111 """ 1120 """
1112 - data = self.vtkgdcm_reader.GetMedicalImageProperties()\  
1113 - .GetPatientSex()  
1114 - if (data):  
1115 - return data 1121 + tag = gdcm.Tag(0x0010, 0x0040)
  1122 + ds = self.gdcm_reader.GetFile().GetDataSet()
  1123 + if ds.FindDataElement(tag):
  1124 + data = ds.GetDataElement(tag).GetValue()
  1125 +
  1126 + if (data):
  1127 + return str(data)
1116 return "" 1128 return ""
1117 1129
1118 def GetPatientAge(self): 1130 def GetPatientAge(self):
@@ -1123,14 +1135,17 @@ class Parser(): @@ -1123,14 +1135,17 @@ class Parser():
1123 1135
1124 DICOM standard tag (0x0010, 0x1010) was used. 1136 DICOM standard tag (0x0010, 0x1010) was used.
1125 """ 1137 """
1126 - data = self.vtkgdcm_reader.GetMedicalImageProperties()\  
1127 - .GetPatientAge()  
1128 - if (data):  
1129 - age = (data.split('Y')[0])  
1130 - try:  
1131 - return int(age)  
1132 - except ValueError:  
1133 - return age 1138 + tag = gdcm.Tag(0x0010, 0x1010)
  1139 + ds = self.gdcm_reader.GetFile().GetDataSet()
  1140 + if ds.FindDataElement(tag):
  1141 + data = str(ds.GetDataElement(tag).GetValue())
  1142 +
  1143 + if (data):
  1144 + age = (data.split('Y')[0])
  1145 + try:
  1146 + return int(age)
  1147 + except ValueError:
  1148 + return age
1134 return "" 1149 return ""
1135 1150
1136 def GetPatientName(self): 1151 def GetPatientName(self):
@@ -1140,14 +1155,16 @@ class Parser(): @@ -1140,14 +1155,16 @@ class Parser():
1140 1155
1141 DICOM standard tag (0x0010,0x0010) was used. 1156 DICOM standard tag (0x0010,0x0010) was used.
1142 """ 1157 """
1143 - data = self.vtkgdcm_reader.GetMedicalImageProperties()\  
1144 - .GetPatientName() 1158 + tag = gdcm.Tag(0x0010, 0x0010)
  1159 + ds = self.gdcm_reader.GetFile().GetDataSet()
  1160 + if ds.FindDataElement(tag):
  1161 + data = str(ds.GetDataElement(tag).GetValue())
1145 1162
1146 - if (data):  
1147 - name = data.strip()  
1148 - encoding = self.GetEncoding()  
1149 - # Returns a unicode decoded in the own dicom encoding  
1150 - return name.decode(encoding) 1163 + if (data):
  1164 + name = data.strip()
  1165 + encoding = self.GetEncoding()
  1166 + # Returns a unicode decoded in the own dicom encoding
  1167 + return name.decode(encoding)
1151 return "" 1168 return ""
1152 1169
1153 def GetPatientID(self): 1170 def GetPatientID(self):
@@ -1158,12 +1175,15 @@ class Parser(): @@ -1158,12 +1175,15 @@ class Parser():
1158 1175
1159 DICOM standard tag (0x0010,0x0020) was used. 1176 DICOM standard tag (0x0010,0x0020) was used.
1160 """ 1177 """
1161 - data = self.vtkgdcm_reader.GetMedicalImageProperties()\  
1162 - .GetPatientID()  
1163 - if (data):  
1164 - encoding = self.GetEncoding()  
1165 - # Returns a unicode decoded in the own dicom encoding  
1166 - return data.decode(encoding) 1178 + tag = gdcm.Tag(0x0010, 0x0020)
  1179 + ds = self.gdcm_reader.GetFile().GetDataSet()
  1180 + if ds.FindDataElement(tag):
  1181 + data = str(ds.GetDataElement(tag).GetValue())
  1182 +
  1183 + if (data):
  1184 + encoding = self.GetEncoding()
  1185 + # Returns a unicode decoded in the own dicom encoding
  1186 + return data.decode(encoding)
1167 return "" 1187 return ""
1168 1188
1169 1189
@@ -1212,10 +1232,13 @@ class Parser(): @@ -1212,10 +1232,13 @@ class Parser():
1212 1232
1213 DICOM standard tag (0x0018,0x1151) was used. 1233 DICOM standard tag (0x0018,0x1151) was used.
1214 """ 1234 """
1215 - data = self.vtkgdcm_reader.GetMedicalImageProperties()\  
1216 - .GetXRayTubeCurrent()  
1217 - if (data):  
1218 - return data 1235 + tag = gdcm.Tag(0x0018, 0x1151)
  1236 + ds = self.gdcm_reader.GetFile().GetDataSet()
  1237 + if ds.FindDataElement(tag):
  1238 + data = str(ds.GetDataElement(tag).GetValue())
  1239 +
  1240 + if (data):
  1241 + return data
1219 return "" 1242 return ""
1220 1243
1221 def GetExposureTime(self): 1244 def GetExposureTime(self):
@@ -1226,10 +1249,13 @@ class Parser(): @@ -1226,10 +1249,13 @@ class Parser():
1226 1249
1227 DICOM standard tag (0x0018, 0x1152) was used. 1250 DICOM standard tag (0x0018, 0x1152) was used.
1228 """ 1251 """
1229 - data = self.vtkgdcm_reader.GetMedicalImageProperties()\  
1230 - .GetExposureTime()  
1231 - if (data):  
1232 - return float(data) 1252 + tag = gdcm.Tag(0x0018, 0x1152)
  1253 + ds = self.gdcm_reader.GetFile().GetDataSet()
  1254 + if ds.FindDataElement(tag):
  1255 + data = str(ds.GetDataElement(tag).GetValue())
  1256 +
  1257 + if (data):
  1258 + return float(data)
1233 return "" 1259 return ""
1234 1260
1235 def GetEquipmentKVP(self): 1261 def GetEquipmentKVP(self):
@@ -1240,10 +1266,13 @@ class Parser(): @@ -1240,10 +1266,13 @@ class Parser():
1240 1266
1241 DICOM standard tag (0x0018,0x0060) was used. 1267 DICOM standard tag (0x0018,0x0060) was used.
1242 """ 1268 """
1243 - data = self.vtkgdcm_reader.GetMedicalImageProperties()\  
1244 - .GetKVP()  
1245 - if (data):  
1246 - return float(data) 1269 + tag = gdcm.Tag(0x0018, 0x0060)
  1270 + ds = self.gdcm_reader.GetFile().GetDataSet()
  1271 + if ds.FindDataElement(tag):
  1272 + data = str(ds.GetDataElement(tag).GetValue())
  1273 +
  1274 + if (data):
  1275 + return float(data)
1247 return "" 1276 return ""
1248 1277
1249 def GetImageThickness(self): 1278 def GetImageThickness(self):
@@ -1254,10 +1283,13 @@ class Parser(): @@ -1254,10 +1283,13 @@ class Parser():
1254 1283
1255 DICOM standard tag (0x0018,0x0050) was used. 1284 DICOM standard tag (0x0018,0x0050) was used.
1256 """ 1285 """
1257 - data = self.vtkgdcm_reader.GetMedicalImageProperties()\  
1258 - .GetSliceThickness()  
1259 - if (data):  
1260 - return float(data) 1286 + tag = gdcm.Tag(0x0018, 0x1050)
  1287 + ds = self.gdcm_reader.GetFile().GetDataSet()
  1288 + if ds.FindDataElement(tag):
  1289 + data = str(ds.GetDataElement(tag).GetValue())
  1290 +
  1291 + if (data):
  1292 + return float(data)
1261 return 0 1293 return 0
1262 1294
1263 def GetImageConvolutionKernel(self): 1295 def GetImageConvolutionKernel(self):
@@ -1270,10 +1302,13 @@ class Parser(): @@ -1270,10 +1302,13 @@ class Parser():
1270 1302
1271 DICOM standard tag (0x0018,0x1210) was used. 1303 DICOM standard tag (0x0018,0x1210) was used.
1272 """ 1304 """
1273 - data = self.vtkgdcm_reader.GetMedicalImageProperties()\  
1274 - .GetConvolutionKernel()  
1275 - if (data):  
1276 - return data 1305 + tag = gdcm.Tag(0x0018, 0x1210)
  1306 + ds = self.gdcm_reader.GetFile().GetDataSet()
  1307 + if ds.FindDataElement(tag):
  1308 + data = str(ds.GetDataElement(tag).GetValue())
  1309 +
  1310 + if (data):
  1311 + return data
1277 return "" 1312 return ""
1278 1313
1279 def GetEquipmentInstitutionName(self): 1314 def GetEquipmentInstitutionName(self):
@@ -1284,10 +1319,13 @@ class Parser(): @@ -1284,10 +1319,13 @@ class Parser():
1284 1319
1285 DICOM standard tag (0x0008,0x0080) was used. 1320 DICOM standard tag (0x0008,0x0080) was used.
1286 """ 1321 """
1287 - data = self.vtkgdcm_reader.GetMedicalImageProperties()\  
1288 - .GetInstitutionName()  
1289 - if (data):  
1290 - return data 1322 + tag = gdcm.Tag(0x0008, 0x0080)
  1323 + ds = self.gdcm_reader.GetFile().GetDataSet()
  1324 + if ds.FindDataElement(tag):
  1325 + data = str(ds.GetDataElement(tag).GetValue())
  1326 +
  1327 + if (data):
  1328 + return data
1291 return "" 1329 return ""
1292 1330
1293 def GetStationName(self): 1331 def GetStationName(self):
@@ -1298,10 +1336,13 @@ class Parser(): @@ -1298,10 +1336,13 @@ class Parser():
1298 1336
1299 DICOM standard tag (0x0008, 0x1010) was used. 1337 DICOM standard tag (0x0008, 0x1010) was used.
1300 """ 1338 """
1301 - data = self.vtkgdcm_reader.GetMedicalImageProperties()\  
1302 - .GetStationName()  
1303 - if (data):  
1304 - return data 1339 + tag = gdcm.Tag(0x0008, 0x1010)
  1340 + ds = self.gdcm_reader.GetFile().GetDataSet()
  1341 + if ds.FindDataElement(tag):
  1342 + data = str(ds.GetDataElement(tag).GetValue())
  1343 +
  1344 + if (data):
  1345 + return data
1305 return "" 1346 return ""
1306 1347
1307 def GetManufacturerModelName(self): 1348 def GetManufacturerModelName(self):
@@ -1312,10 +1353,13 @@ class Parser(): @@ -1312,10 +1353,13 @@ class Parser():
1312 1353
1313 DICOM standard tag (0x0008,0x1090) was used. 1354 DICOM standard tag (0x0008,0x1090) was used.
1314 """ 1355 """
1315 - data = self.vtkgdcm_reader.GetMedicalImageProperties()\  
1316 - .GetManufacturerModelName()  
1317 - if (data):  
1318 - return data 1356 + tag = gdcm.Tag(0x0008, 0x1090)
  1357 + ds = self.gdcm_reader.GetFile().GetDataSet()
  1358 + if ds.FindDataElement(tag):
  1359 + data = str(ds.GetDataElement(tag).GetValue())
  1360 +
  1361 + if (data):
  1362 + return data
1319 return "" 1363 return ""
1320 1364
1321 def GetEquipmentManufacturer(self): 1365 def GetEquipmentManufacturer(self):
@@ -1325,10 +1369,13 @@ class Parser(): @@ -1325,10 +1369,13 @@ class Parser():
1325 1369
1326 DICOM standard tag (0x0008, 0x1010) was used. 1370 DICOM standard tag (0x0008, 0x1010) was used.
1327 """ 1371 """
1328 - data = self.vtkgdcm_reader.GetMedicalImageProperties()\  
1329 - .GetManufacturer()  
1330 - if (data):  
1331 - return data 1372 + tag = gdcm.Tag(0x0008, 0x1010)
  1373 + ds = self.gdcm_reader.GetFile().GetDataSet()
  1374 + if ds.FindDataElement(tag):
  1375 + data = str(ds.GetDataElement(tag).GetValue())
  1376 +
  1377 + if (data):
  1378 + return data
1332 return "" 1379 return ""
1333 1380
1334 def GetAcquisitionModality(self): 1381 def GetAcquisitionModality(self):
@@ -1340,10 +1387,13 @@ class Parser(): @@ -1340,10 +1387,13 @@ class Parser():
1340 1387
1341 DICOM standard tag (0x0008,0x0060) was used. 1388 DICOM standard tag (0x0008,0x0060) was used.
1342 """ 1389 """
1343 - data = self.vtkgdcm_reader.GetMedicalImageProperties()\  
1344 - .GetModality()  
1345 - if (data):  
1346 - return data 1390 + tag = gdcm.Tag(0x0008, 0x0060)
  1391 + ds = self.gdcm_reader.GetFile().GetDataSet()
  1392 + if ds.FindDataElement(tag):
  1393 + data = str(ds.GetDataElement(tag).GetValue())
  1394 +
  1395 + if (data):
  1396 + return data
1347 return "" 1397 return ""
1348 1398
1349 1399
@@ -1354,10 +1404,13 @@ class Parser(): @@ -1354,10 +1404,13 @@ class Parser():
1354 1404
1355 DICOM standard tag (0x0020,0x0013) was used. 1405 DICOM standard tag (0x0020,0x0013) was used.
1356 """ 1406 """
1357 - data = self.vtkgdcm_reader.GetMedicalImageProperties()\  
1358 - .GetImageNumber()  
1359 - if (data):  
1360 - return int(data) 1407 + tag = gdcm.Tag(0x0020, 0x0013)
  1408 + ds = self.gdcm_reader.GetFile().GetDataSet()
  1409 + if ds.FindDataElement(tag):
  1410 + data = str(ds.GetDataElement(tag).GetValue())
  1411 +
  1412 + if (data):
  1413 + return int(data)
1361 return "" 1414 return ""
1362 1415
1363 def GetStudyDescription(self): 1416 def GetStudyDescription(self):
@@ -1367,11 +1420,14 @@ class Parser(): @@ -1367,11 +1420,14 @@ class Parser():
1367 1420
1368 DICOM standard tag (0x0008,0x1030) was used. 1421 DICOM standard tag (0x0008,0x1030) was used.
1369 """ 1422 """
1370 - data = self.vtkgdcm_reader.GetMedicalImageProperties()\  
1371 - .GetStudyDescription()  
1372 - if (data):  
1373 - encoding = self.GetEncoding()  
1374 - return data.decode(encoding) 1423 + tag = gdcm.Tag(0x0008, 0x1030)
  1424 + ds = self.gdcm_reader.GetFile().GetDataSet()
  1425 + if ds.FindDataElement(tag):
  1426 + data = str(ds.GetDataElement(tag).GetValue())
  1427 +
  1428 + if (data):
  1429 + encoding = self.GetEncoding()
  1430 + return data.decode(encoding)
1375 return "" 1431 return ""
1376 1432
1377 def GetStudyAdmittingDiagnosis(self): 1433 def GetStudyAdmittingDiagnosis(self):