def run(self): grouper = self.grouper reader = gdcm.ImageReader() if _has_win32api: try: reader.SetFileName( utils.encode(win32api.GetShortPathName(self.filepath), const.FS_ENCODE)) except TypeError: reader.SetFileName(win32api.GetShortPathName(self.filepath)) else: try: reader.SetFileName(utils.encode(self.filepath, const.FS_ENCODE)) except TypeError: reader.SetFileName(self.filepath) if (reader.Read()): file = reader.GetFile() # Retrieve data set dataSet = file.GetDataSet() # Retrieve header header = file.GetHeader() stf = gdcm.StringFilter() stf.SetFile(file) field_dict = {} data_dict = {} tag = gdcm.Tag(0x0008, 0x0005) ds = reader.GetFile().GetDataSet() if ds.FindDataElement(tag): encoding_value = str( ds.GetDataElement(tag).GetValue()).split('\\')[0] if encoding_value.startswith("Loaded"): encoding = "ISO_IR 100" else: try: encoding = const.DICOM_ENCODING_TO_PYTHON[ encoding_value] except KeyError: encoding = 'ISO_IR 100' else: encoding = "ISO_IR 100" # Iterate through the Header iterator = header.GetDES().begin() while (not iterator.equal(header.GetDES().end())): dataElement = iterator.next() if not dataElement.IsUndefinedLength(): tag = dataElement.GetTag() data = stf.ToStringPair(tag) stag = tag.PrintAsPipeSeparatedString() group = str(tag.GetGroup()) field = str(tag.GetElement()) tag_labels[stag] = data[0] if not group in data_dict.keys(): data_dict[group] = {} if not (utils.VerifyInvalidPListCharacter(data[1])): data_dict[group][field] = utils.decode( data[1], encoding) else: data_dict[group][field] = "Invalid Character" # Iterate through the Data set iterator = dataSet.GetDES().begin() while (not iterator.equal(dataSet.GetDES().end())): dataElement = iterator.next() if not dataElement.IsUndefinedLength(): tag = dataElement.GetTag() # if (tag.GetGroup() == 0x0009 and tag.GetElement() == 0x10e3) \ # or (tag.GetGroup() == 0x0043 and tag.GetElement() == 0x1027): # continue data = stf.ToStringPair(tag) stag = tag.PrintAsPipeSeparatedString() group = str(tag.GetGroup()) field = str(tag.GetElement()) tag_labels[stag] = data[0] if not group in data_dict.keys(): data_dict[group] = {} if not (utils.VerifyInvalidPListCharacter(data[1])): data_dict[group][field] = utils.decode( data[1], encoding, 'replace') else: data_dict[group][field] = "Invalid Character" # -------------- To Create DICOM Thumbnail ----------- try: data = data_dict[str(0x028)][str(0x1050)] level = [float(value) for value in data.split('\\')][0] data = data_dict[str(0x028)][str(0x1051)] window = [float(value) for value in data.split('\\')][0] except (KeyError, ValueError): level = None window = None if _has_win32api: thumbnail_path = imagedata_utils.create_dicom_thumbnails( win32api.GetShortPathName(self.filepath), window, level) else: thumbnail_path = imagedata_utils.create_dicom_thumbnails( self.filepath, window, level) #------ Verify the orientation -------------------------------- img = reader.GetImage() direc_cosines = img.GetDirectionCosines() orientation = gdcm.Orientation() try: _type = orientation.GetType(tuple(direc_cosines)) except TypeError: _type = orientation.GetType(direc_cosines) label = orientation.GetLabel(_type) # ---------- Refactory -------------------------------------- data_dict['invesalius'] = {'orientation_label': label} # ------------------------------------------------------------- dict_file[self.filepath] = data_dict #---------- Verify is DICOMDir ------------------------------- is_dicom_dir = 1 try: if (data_dict[str(0x002)][str(0x002)] != "1.2.840.10008.1.3.10"): #DICOMDIR is_dicom_dir = 0 except (KeyError): is_dicom_dir = 0 if not (is_dicom_dir): parser = dicom.Parser() parser.SetDataImage(dict_file[self.filepath], self.filepath, thumbnail_path) dcm = dicom.Dicom() #self.l.acquire() dcm.SetParser(parser) grouper.AddFile(dcm)
def run(self): grouper = self.grouper reader = gdcm.ImageReader() if _has_win32api: try: reader.SetFileName(utils.encode(win32api.GetShortPathName(self.filepath), const.FS_ENCODE)) except TypeError: reader.SetFileName(win32api.GetShortPathName(self.filepath)) else: try: reader.SetFileName(utils.encode(self.filepath, const.FS_ENCODE)) except TypeError: reader.SetFileName(self.filepath) if (reader.Read()): file = reader.GetFile() # Retrieve data set dataSet = file.GetDataSet() # Retrieve header header = file.GetHeader() stf = gdcm.StringFilter() stf.SetFile(file) field_dict = {} data_dict = {} tag = gdcm.Tag(0x0008, 0x0005) ds = reader.GetFile().GetDataSet() if ds.FindDataElement(tag): encoding_value = str(ds.GetDataElement(tag).GetValue()).split('\\')[0] if encoding_value.startswith("Loaded"): encoding = "ISO_IR 100" else: try: encoding = const.DICOM_ENCODING_TO_PYTHON[encoding_value] except KeyError: encoding = 'ISO_IR 100' else: encoding = "ISO_IR 100" # Iterate through the Header iterator = header.GetDES().begin() while (not iterator.equal(header.GetDES().end())): dataElement = iterator.next() if not dataElement.IsUndefinedLength(): tag = dataElement.GetTag() data = stf.ToStringPair(tag) stag = tag.PrintAsPipeSeparatedString() group = str(tag.GetGroup()) field = str(tag.GetElement()) tag_labels[stag] = data[0] if not group in data_dict.keys(): data_dict[group] = {} if not(utils.VerifyInvalidPListCharacter(data[1])): data_dict[group][field] = utils.decode(data[1], encoding) else: data_dict[group][field] = "Invalid Character" # Iterate through the Data set iterator = dataSet.GetDES().begin() while (not iterator.equal(dataSet.GetDES().end())): dataElement = iterator.next() if not dataElement.IsUndefinedLength(): tag = dataElement.GetTag() # if (tag.GetGroup() == 0x0009 and tag.GetElement() == 0x10e3) \ # or (tag.GetGroup() == 0x0043 and tag.GetElement() == 0x1027): # continue data = stf.ToStringPair(tag) stag = tag.PrintAsPipeSeparatedString() group = str(tag.GetGroup()) field = str(tag.GetElement()) tag_labels[stag] = data[0] if not group in data_dict.keys(): data_dict[group] = {} if not(utils.VerifyInvalidPListCharacter(data[1])): data_dict[group][field] = utils.decode(data[1], encoding, 'replace') else: data_dict[group][field] = "Invalid Character" # -------------- To Create DICOM Thumbnail ----------- try: data = data_dict[str(0x028)][str(0x1050)] level = [float(value) for value in data.split('\\')][0] data = data_dict[str(0x028)][str(0x1051)] window = [float(value) for value in data.split('\\')][0] except(KeyError, ValueError): level = None window = None if _has_win32api: thumbnail_path = imagedata_utils.create_dicom_thumbnails(win32api.GetShortPathName(self.filepath), window, level) else: thumbnail_path = imagedata_utils.create_dicom_thumbnails(self.filepath, window, level) #------ Verify the orientation -------------------------------- img = reader.GetImage() direc_cosines = img.GetDirectionCosines() orientation = gdcm.Orientation() try: _type = orientation.GetType(tuple(direc_cosines)) except TypeError: _type = orientation.GetType(direc_cosines) label = orientation.GetLabel(_type) # ---------- Refactory -------------------------------------- data_dict['invesalius'] = {'orientation_label' : label} # ------------------------------------------------------------- dict_file[self.filepath] = data_dict #---------- Verify is DICOMDir ------------------------------- is_dicom_dir = 1 try: if (data_dict[str(0x002)][str(0x002)] != "1.2.840.10008.1.3.10"): #DICOMDIR is_dicom_dir = 0 except(KeyError): is_dicom_dir = 0 if not(is_dicom_dir): parser = dicom.Parser() parser.SetDataImage(dict_file[self.filepath], self.filepath, thumbnail_path) dcm = dicom.Dicom() #self.l.acquire() dcm.SetParser(parser) grouper.AddFile(dcm)