Commit d6839add0043034e36e7e1f995581388deadd439

Authored by Paulo Henrique Junqueira Amorim
1 parent 86398ac2

FIX: Fixed problem open promed-0022

invesalius/reader/dicom.py
... ... @@ -296,7 +296,11 @@ class Parser():
296 296 DICOM standard tag (0x0008,0x0022) was used.
297 297 """
298 298 # TODO: internationalize data
299   - date = self.data_image['0008']['0022']
  299 + try:
  300 + date = self.data_image['0008']['0022']
  301 + except(KeyError):
  302 + return ""
  303 +
300 304 if (date) and (date != ''):
301 305 return self.__format_date(str(date))
302 306 return ""
... ... @@ -459,7 +463,11 @@ class Parser():
459 463  
460 464 DICOM standard tag (0x7fe0, 0x0010) was used.
461 465 """
462   - data = self.data_image['7fe0']['0010']
  466 + try:
  467 + data = self.data_image['7fe0']['0010']
  468 + except(KeyError):
  469 + return ""
  470 +
463 471 if (data):
464 472 return int(data.split(':')[1])
465 473 return ""
... ... @@ -473,7 +481,11 @@ class Parser():
473 481  
474 482 DICOM standard tag (0x0020, 0x0011) was used.
475 483 """
476   - data = self.data_image['0020']['0011']
  484 + try:
  485 + data = self.data_image['0020']['0011']
  486 + except(KeyError):
  487 + return ""
  488 +
477 489 if (data) and (data != '""') and (data != "None"):
478 490 return int(data)
479 491 return ""
... ... @@ -489,7 +501,10 @@ class Parser():
489 501  
490 502 DICOM standard tag (0x0028, 0x0030) was used.
491 503 """
492   - data = self.data_image['0028']['0030']
  504 + try:
  505 + data = self.data_image['0028']['0030']
  506 + except(KeyError):
  507 + return ""
493 508 if (data):
494 509 return [eval(value) for value in data.split('\\')]
495 510 return ""
... ... @@ -501,7 +516,11 @@ class Parser():
501 516  
502 517 DICOM standard tag (0x0010, 0x1030) was used.
503 518 """
504   - data = self.data_image['0010']['1030']
  519 + try:
  520 + data = self.data_image['0010']['1030']
  521 + except(KeyError):
  522 + return ""
  523 +
505 524 if (data):
506 525 return float(data)
507 526 return ""
... ... @@ -513,7 +532,11 @@ class Parser():
513 532  
514 533 DICOM standard tag (0x0010, 0x1030) was used.
515 534 """
516   - data = self.data_image['0010']['1020']
  535 + try:
  536 + data = self.data_image['0010']['1020']
  537 + except(KeyError):
  538 + return ""
  539 +
517 540 if (data):
518 541 return float(data)
519 542 return ""
... ... @@ -524,7 +547,10 @@ class Parser():
524 547  
525 548 DICOM standard tag (0x0010, 0x1040) was used.
526 549 """
527   - data = self.data_image['0010']['1040']
  550 + try:
  551 + data = self.data_image['0010']['1040']
  552 + except(KeyError):
  553 + return ""
528 554 if (data):
529 555 return data
530 556 return ""
... ... @@ -536,7 +562,10 @@ class Parser():
536 562  
537 563 DICOM standard tag (0x0010, 0x1080) was used.
538 564 """
539   - data = self.data_image['0010']['1080']
  565 + try:
  566 + data = self.data_image['0010']['1080']
  567 + except(KeyError):
  568 + return ""
540 569 if (data):
541 570 return data
542 571 return ""
... ... @@ -550,7 +579,10 @@ class Parser():
550 579  
551 580 DICOM standard tag (0x0010, 0x1081) was used.
552 581 """
553   - data = self.data_image['0010']['1081']
  582 + try:
  583 + data = self.data_image['0010']['1081']
  584 + except(KeyError):
  585 + return ""
554 586 if (data):
555 587 return data
556 588 return ""
... ... @@ -563,7 +595,11 @@ class Parser():
563 595  
564 596 DICOM standard tag (0x0010, 0x2150) was used.
565 597 """
566   - data = self.data_image['0010']['2150']
  598 + try:
  599 + data = self.data_image['0010']['2150']
  600 + except(KeyError):
  601 + return ""
  602 +
567 603 if (data):
568 604 return data
569 605 return ""
... ... @@ -576,7 +612,11 @@ class Parser():
576 612  
577 613 DICOM standard tag (0x0010, 0x2152) was used.
578 614 """
579   - data = self.data_image['0010']['2152']
  615 + try:
  616 + data = self.data_image['0010']['2152']
  617 + except(KeyError):
  618 + return ""
  619 +
580 620 if (data):
581 621 return data
582 622 return ""
... ... @@ -588,7 +628,11 @@ class Parser():
588 628  
589 629 DICOM standard tag (0x0010, 0x2154) was used.
590 630 """
591   - data = self.data_image['0010']['2154']
  631 + try:
  632 + data = self.data_image['0010']['2154']
  633 + except(KeyError):
  634 + return ""
  635 +
592 636 if (data):
593 637 return data
594 638 return ""
... ... @@ -601,7 +645,11 @@ class Parser():
601 645  
602 646 DICOM standard tag (0x0010, 0x2297) was used.
603 647 """
604   - data = self.data_image['0010']['2297']
  648 + try:
  649 + data = self.data_image['0010']['2297']
  650 + except(KeyError):
  651 + return ""
  652 +
605 653 if (data):
606 654 return data
607 655 return ""
... ... @@ -614,7 +662,11 @@ class Parser():
614 662  
615 663 DICOM standard tag (0x0010, 0x2298) was used.
616 664 """
617   - data = self.data_image['0010']['2298']
  665 + try:
  666 + data = self.data_image['0010']['2298']
  667 + except(KeyError):
  668 + return ""
  669 +
618 670 if (data):
619 671 return data
620 672 return ""
... ... @@ -627,7 +679,11 @@ class Parser():
627 679  
628 680 DICOM standard tag (0x0010, 0x2299) was used.
629 681 """
630   - data = self.data_image['0010']['2299']
  682 + try:
  683 + data = self.data_image['0010']['2299']
  684 + except(KeyError):
  685 + return ""
  686 +
631 687 if (data):
632 688 return data
633 689 return ""
... ... @@ -640,7 +696,11 @@ class Parser():
640 696  
641 697 DICOM standard tag (0x0010, 0x2000) was used.
642 698 """
643   - data = self.data_image['0010']['2000']
  699 + try:
  700 + data = self.data_image['0010']['2000']
  701 + except(KeyError):
  702 + return ""
  703 +
644 704 if (data):
645 705 return data
646 706 return ""
... ... @@ -653,7 +713,11 @@ class Parser():
653 713  
654 714 DICOM standard tag (0x0008, 0x2110) was used.
655 715 """
656   - data = self.data_image['0008']['2110']
  716 + try:
  717 + data = self.data_image['0008']['2110']
  718 + except(KeyError):
  719 + return ""
  720 +
657 721 if (data):
658 722 return data
659 723 return ""
... ... @@ -667,7 +731,11 @@ class Parser():
667 731  
668 732 DICOM standard tag (0x0008, 0x0090) was used.
669 733 """
670   - data = self.data_image['0008']['0090']
  734 + try:
  735 + data = self.data_image['0008']['0090']
  736 + except(KeyError):
  737 + return ""
  738 +
671 739 if data == "None":
672 740 return ""
673 741 if (data):
... ... @@ -682,7 +750,11 @@ class Parser():
682 750  
683 751 DICOM standard tag (0x0008, 0x0092) was used.
684 752 """
685   - data = self.data_image['0008']['0092']
  753 + try:
  754 + data = self.data_image['0008']['0092']
  755 + except(KeyError):
  756 + return ""
  757 +
686 758 if (data):
687 759 return data
688 760 return ""
... ... @@ -694,7 +766,11 @@ class Parser():
694 766  
695 767 DICOM standard tag (0x0008, 0x0094) was used.
696 768 """
697   - data = self.data_image['0008']['0094']
  769 + try:
  770 + data = self.data_image['0008']['0094']
  771 + except(KeyError):
  772 + return ""
  773 +
698 774 if (data):
699 775 return data
700 776 return ""
... ... @@ -706,7 +782,11 @@ class Parser():
706 782  
707 783 DICOM standard tag (0x0018, 0x1030) was used.
708 784 """
709   - data = self.data_image['0018']['1030']
  785 + try:
  786 + data = self.data_image['0018']['1030']
  787 + except(KeyError):
  788 + return None
  789 +
710 790 if (data):
711 791 return data
712 792 return None
... ... @@ -740,7 +820,11 @@ class Parser():
740 820  
741 821 Critical DICOM tag (0x0008, 0x0016). Cannot be edited.
742 822 """
743   - data = self.data_image['0008']['0016']
  823 + try:
  824 + data = self.data_image['0008']['0016']
  825 + except(KeyError):
  826 + return ""
  827 +
744 828 if (data):
745 829 return data
746 830 return ""
... ... @@ -753,7 +837,11 @@ class Parser():
753 837  
754 838 Critical DICOM tag (0x0008, 0x0018). Cannot be edited.
755 839 """
756   - data = self.data_image['0008']['0018']
  840 + try:
  841 + data = self.data_image['0008']['0018']
  842 + except(KeyError):
  843 + return ""
  844 +
757 845 if (data):
758 846 return data
759 847 return ""
... ... @@ -764,7 +852,11 @@ class Parser():
764 852  
765 853 DICOM tag (0x0008, 0x1030). Cannot be edited.
766 854 """
767   - data = self.data_image['0008']['1030']
  855 + try:
  856 + data = self.data_image['0008']['1030']
  857 + except(KeyError):
  858 + return ""
  859 +
768 860 if (data):
769 861 return data
770 862 return ""
... ... @@ -777,7 +869,11 @@ class Parser():
777 869  
778 870 Critical DICOM Tag (0x0020,0x000D). Cannot be edited.
779 871 """
780   - data = self.data_image['0020']['000D']
  872 + try:
  873 + data = self.data_image['0020']['000D']
  874 + except(KeyError):
  875 + return ""
  876 +
781 877 if (data):
782 878 return data
783 879 return ""
... ... @@ -793,7 +889,11 @@ class Parser():
793 889  
794 890 Critical DICOM tag (0x0020,0x0037). Cannot be edited.
795 891 """
796   - data = self.data_image['0020']['0037']
  892 + try:
  893 + data = self.data_image['0020']['0037']
  894 + except(KeyError):
  895 + return [1.0, 0.0, 0.0, 0.0, 1.0, 0.0]
  896 +
797 897 if (data):
798 898 return [float(value) for value in data.split('\\')]
799 899 return [1.0, 0.0, 0.0, 0.0, 1.0, 0.0]
... ... @@ -807,7 +907,11 @@ class Parser():
807 907  
808 908 Critical DICOM tag (0x0020,0x0037). Cannot be edited.
809 909 """
810   - data = self.data_image['0020']['0037']
  910 + try:
  911 + data = self.data_image['0020']['0037']
  912 + except(KeyError):
  913 + return [0.0, 1.0, 0.0]
  914 +
811 915 if (data):
812 916 return [float(value) for value in data.split('\\')[3:6]]
813 917 return [0.0, 1.0, 0.0]
... ... @@ -821,7 +925,11 @@ class Parser():
821 925  
822 926 Critical DICOM tag (0x0020,0x0037). Cannot be edited.
823 927 """
824   - data = self.data_image['0020']['0037']
  928 + try:
  929 + data = self.data_image['0020']['0037']
  930 + except(KeyError):
  931 + return [1.0, 0.0, 0.0]
  932 +
825 933 if (data):
826 934 return [float(value) for value in data.split('\\')[0:3]]
827 935 return [1.0, 0.0, 0.0]
... ... @@ -833,7 +941,11 @@ class Parser():
833 941  
834 942 Critical DICOM tag (0x0020,0x0052). Cannot be edited.
835 943 """
836   - data = self.data_image['0020']['0052']
  944 + try:
  945 + data = self.data_image['0020']['0052']
  946 + except(KeyError):
  947 + return ""
  948 +
837 949 if (data):
838 950 return data
839 951 return ""
... ... @@ -933,7 +1045,11 @@ class Parser():
933 1045  
934 1046 Critical DICOM tag (0x0018, 0x0020). Cannot be edited.
935 1047 """
936   - data = self.data_image['0018']['0020']
  1048 + try:
  1049 + data = self.data_image['0018']['0020']
  1050 + except(KeyError):
  1051 + return ""
  1052 +
937 1053 if (data):
938 1054 return data
939 1055 return ""
... ... @@ -945,7 +1061,11 @@ class Parser():
945 1061  
946 1062 DICOM standard tag (0x0008, 0x0080) was used.
947 1063 """
948   - data = self.data_image['0008']['0080']
  1064 + try:
  1065 + data = self.data_image['0008']['0080']
  1066 + except(KeyError):
  1067 + return ""
  1068 +
949 1069 if (data):
950 1070 return data
951 1071 return ""
... ... @@ -959,7 +1079,11 @@ class Parser():
959 1079  
960 1080 DICOM standard tag (0x0008, 0x0081) was used.
961 1081 """
962   - data = self.data_image['0008']['0081']
  1082 + try:
  1083 + data = self.data_image['0008']['0081']
  1084 + except(KeyError):
  1085 + return ""
  1086 +
963 1087 if (data):
964 1088 return data
965 1089 return ""
... ... @@ -972,7 +1096,11 @@ class Parser():
972 1096  
973 1097 Critical DICOM tag (0x0020, 0x000D). Cannot be edited.
974 1098 """
975   - data = self.data_image['0020']['000D']
  1099 + try:
  1100 + data = self.data_image['0020']['000D']
  1101 + except(KeyError):
  1102 + return ""
  1103 +
976 1104 if (data):
977 1105 return data
978 1106 return ""
... ... @@ -984,7 +1112,11 @@ class Parser():
984 1112  
985 1113 DICOM standard tag (0x0010,0x2180) was used.
986 1114 """
987   - data = self.data_image['0010']['2180']
  1115 + try:
  1116 + data = self.data_image['0010']['2180']
  1117 + except(KeyError):
  1118 + return ""
  1119 +
988 1120 if (data):
989 1121 return data
990 1122 return ""
... ... @@ -1018,7 +1150,11 @@ class Parser():
1018 1150 #sf = gdcm.StringFilter()
1019 1151 #sf.SetFile(self.gdcm_reader.GetFile())
1020 1152 #res = sf.ToStringPair(tag)
1021   - data = self.data_image['0028']['0100']
  1153 + try:
  1154 + data = self.data_image['0028']['0100']
  1155 + except(KeyError):
  1156 + return ""
  1157 +
1022 1158 if (data):
1023 1159 return int(data)
1024 1160 return ""
... ... @@ -1033,7 +1169,11 @@ class Parser():
1033 1169 DICOM standard tag (0x0010,0x0030) was used.
1034 1170 """
1035 1171 # TODO: internationalize data
1036   - data = self.data_image['0010']['0030']
  1172 + try:
  1173 + data = self.data_image['0010']['0030']
  1174 + except(KeyError):
  1175 + return ""
  1176 +
1037 1177 if (data) and (data != 'None'):
1038 1178 return self.__format_date(str(data))
1039 1179 return ""
... ... @@ -1046,7 +1186,11 @@ class Parser():
1046 1186  
1047 1187 DICOM standard tag (0x0020,0x0010) was used.
1048 1188 """
1049   - data = self.data_image['0020']['0010']
  1189 + try:
  1190 + data = self.data_image['0020']['0010']
  1191 + except(KeyError):
  1192 + return ""
  1193 +
1050 1194 if (data):
1051 1195 return str(data)
1052 1196 return ""
... ... @@ -1059,7 +1203,11 @@ class Parser():
1059 1203  
1060 1204 DICOM standard tag (0x0018,0x1120) was used.
1061 1205 """
1062   - data = self.data_image['0018']['1120']
  1206 + try:
  1207 + data = self.data_image['0018']['1120']
  1208 + except(KeyError):
  1209 + return 0.0
  1210 +
1063 1211 if (data):
1064 1212 return float(str(data))
1065 1213 return 0.0
... ... @@ -1074,7 +1222,11 @@ class Parser():
1074 1222  
1075 1223 DICOM standard tag (0x0010,0x0040) was used.
1076 1224 """
1077   - data = self.data_image['0010']['0040']
  1225 + try:
  1226 + data = self.data_image['0010']['0040']
  1227 + except(KeyError):
  1228 + return ""
  1229 +
1078 1230 if (data):
1079 1231 return str(data)
1080 1232 return ""
... ... @@ -1087,7 +1239,11 @@ class Parser():
1087 1239  
1088 1240 DICOM standard tag (0x0010, 0x1010) was used.
1089 1241 """
1090   - data = self.data_image['0010']['0010']
  1242 + try:
  1243 + data = self.data_image['0010']['0010']
  1244 + except(KeyError):
  1245 + return ""
  1246 +
1091 1247 if (data):
1092 1248 age = (data.split('Y')[0])
1093 1249 try:
... ... @@ -1103,7 +1259,11 @@ class Parser():
1103 1259  
1104 1260 DICOM standard tag (0x0010,0x0010) was used.
1105 1261 """
1106   - data = self.data_image['0010']['0010']
  1262 + try:
  1263 + data = self.data_image['0010']['0010']
  1264 + except(KeyError):
  1265 + return ""
  1266 +
1107 1267 if (data):
1108 1268 name = data.strip()
1109 1269 encoding = self.GetEncoding()
... ... @@ -1119,7 +1279,11 @@ class Parser():
1119 1279  
1120 1280 DICOM standard tag (0x0010,0x0020) was used.
1121 1281 """
1122   - data = self.data_image['0010']['0020']
  1282 + try:
  1283 + data = self.data_image['0010']['0020']
  1284 + except(KeyError):
  1285 + return ""
  1286 +
1123 1287 if (data):
1124 1288 encoding = self.GetEncoding()
1125 1289 # Returns a unicode decoded in the own dicom encoding
... ... @@ -1135,7 +1299,11 @@ class Parser():
1135 1299  
1136 1300 DICOM standard tag (0x0018,0x1151) was used.
1137 1301 """
1138   - data = self.data_image['0018']['1151']
  1302 + try:
  1303 + data = self.data_image['0018']['1151']
  1304 + except(KeyError):
  1305 + return ""
  1306 +
1139 1307 if (data):
1140 1308 return data
1141 1309 return ""
... ... @@ -1148,7 +1316,11 @@ class Parser():
1148 1316  
1149 1317 DICOM standard tag (0x0018, 0x1152) was used.
1150 1318 """
1151   - data = self.data_image['0018']['1152']
  1319 + try:
  1320 + data = self.data_image['0018']['1152']
  1321 + except(KeyError):
  1322 + return ""
  1323 +
1152 1324 if (data):
1153 1325 return float(data)
1154 1326 return ""
... ... @@ -1161,7 +1333,11 @@ class Parser():
1161 1333  
1162 1334 DICOM standard tag (0x0018,0x0060) was used.
1163 1335 """
1164   - data = self.data_image['0018']['0060']
  1336 + try:
  1337 + data = self.data_image['0018']['0060']
  1338 + except(KeyError):
  1339 + return ""
  1340 +
1165 1341 if (data):
1166 1342 return float(data)
1167 1343 return ""
... ... @@ -1174,7 +1350,10 @@ class Parser():
1174 1350  
1175 1351 DICOM standard tag (0x0018,0x0050) was used.
1176 1352 """
1177   - data = self.data_image['0018']['0050']
  1353 + try:
  1354 + data = self.data_image['0018']['0050']
  1355 + except(KeyError):
  1356 + return 0
1178 1357 if (data):
1179 1358 return float(data)
1180 1359 return 0
... ... @@ -1189,7 +1368,11 @@ class Parser():
1189 1368  
1190 1369 DICOM standard tag (0x0018,0x1210) was used.
1191 1370 """
1192   - data = self.data_image['0018']['1210']
  1371 + try:
  1372 + data = self.data_image['0018']['1210']
  1373 + except(KeyError):
  1374 + return ""
  1375 +
1193 1376 if (data):
1194 1377 return data
1195 1378 return ""
... ... @@ -1202,7 +1385,11 @@ class Parser():
1202 1385  
1203 1386 DICOM standard tag (0x0008,0x0080) was used.
1204 1387 """
1205   - data = self.data_image['0008']['0080']
  1388 + try:
  1389 + data = self.data_image['0008']['0080']
  1390 + except(KeyError):
  1391 + return ""
  1392 +
1206 1393 if (data):
1207 1394 return data
1208 1395 return ""
... ... @@ -1215,7 +1402,11 @@ class Parser():
1215 1402  
1216 1403 DICOM standard tag (0x0008, 0x1010) was used.
1217 1404 """
1218   - data = self.data_image['0008']['1010']
  1405 + try:
  1406 + data = self.data_image['0008']['1010']
  1407 + except(KeyError):
  1408 + return ""
  1409 +
1219 1410 if (data):
1220 1411 return data
1221 1412 return ""
... ... @@ -1228,7 +1419,11 @@ class Parser():
1228 1419  
1229 1420 DICOM standard tag (0x0008,0x1090) was used.
1230 1421 """
1231   - data = self.data_image['0008']['1090']
  1422 + try:
  1423 + data = self.data_image['0008']['1090']
  1424 + except(KeyError):
  1425 + return ""
  1426 +
1232 1427 if (data):
1233 1428 return data
1234 1429 return ""
... ... @@ -1240,7 +1435,11 @@ class Parser():
1240 1435  
1241 1436 DICOM standard tag (0x0008, 0x1010) was used.
1242 1437 """
1243   - data = self.data_image['0008']['1010']
  1438 + try:
  1439 + data = self.data_image['0008']['1010']
  1440 + except(KeyError):
  1441 + return ""
  1442 +
1244 1443 if (data):
1245 1444 return data
1246 1445 return ""
... ... @@ -1254,7 +1453,11 @@ class Parser():
1254 1453  
1255 1454 DICOM standard tag (0x0008,0x0060) was used.
1256 1455 """
1257   - data = self.data_image['0008']['0060']
  1456 + try:
  1457 + data = self.data_image['0008']['0060']
  1458 + except(KeyError):
  1459 + return ""
  1460 +
1258 1461 if (data):
1259 1462 return data
1260 1463 return ""
... ... @@ -1342,7 +1545,11 @@ class Parser():
1342 1545 Return the acquisition time.
1343 1546 DICOM standard tag (0x0008,0x032) was used.
1344 1547 """
1345   - data = self.data_image['0008']['0032']
  1548 + try:
  1549 + data = self.data_image['0008']['0032']
  1550 + except(KeyError):
  1551 + return ""
  1552 +
1346 1553 if (data):
1347 1554 return self.__format_time(data)
1348 1555 return ""
... ... @@ -1352,7 +1559,11 @@ class Parser():
1352 1559 Return the serie number
1353 1560 DICOM standard tag (0x0020, 0x0011) was used.
1354 1561 """
1355   - data = self.data_image['0020']['0011']
  1562 + try:
  1563 + data = self.data_image['0020']['0011']
  1564 + except(KeyError):
  1565 + return ""
  1566 +
1356 1567 if (data):
1357 1568 return data
1358 1569 return ""
... ...
invesalius/reader/dicom_reader.py
... ... @@ -259,8 +259,16 @@ def GetDicomGroups(directory, recursive=True, gui=True):
259 259 # -------------------------------------------------------------
260 260 filepath = os.path.abspath(filename)
261 261 dict_file[filepath] = data_dict
262   -
263   - if (data_dict['0002']['0002'] != "1.2.840.10008.1.3.10"): #DICOMDIR
  262 +
  263 + #---------- Verify is DICOMDir -------------------------------
  264 + is_dicom_dir = 1
  265 + try:
  266 + if (data_dict['0002']['0002'] != "1.2.840.10008.1.3.10"): #DICOMDIR
  267 + is_dicom_dir = 0
  268 + except(KeyError):
  269 + is_dicom_dir = 0
  270 +
  271 + if not(is_dicom_dir):
264 272 parser = dicom.Parser()
265 273 parser.SetDataImage(dict_file[filepath], filepath)
266 274  
... ...