def load_DICOMseries_using_headers(self, H_REC=re.compile('^([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)\.([0-9]+\.[0-9]+\.[0-9]+)\.([0-9]+\.[0-9]+\.[0-9]+)$')): 'Load in one of the dicoms (prefering smaller ones) and use the information inside to construct a dicom_series_info object, which it returns' dicomlist = os.listdir(self.path) self.numdicoms = len(dicomlist) dicompath = None if self.numdicoms == 0: return None elif self.numdicoms == 2: for dicom in dicomlist: result = H_REC.match(dicom) if result != None: tupple = result.groups() if tupple[1] == r'5.24.5': dicompath = os.path.join(self.path, dicom) break if dicompath == None: dicompath = os.path.join(self.path, dicomlist[0]) dicom_series = DICOMseries(subid=self.image.visit.subject.subid, visid=self.image.visit.visid, series=self.image.series, sorted_files=self.numdicoms) try: pydicomobject = pydicom.read_file(dicompath, stop_before_pixels=True) dicom_series.set_from_pydicom(pydicomobject) except Exception: dicom_reader = dcm2txt() series_dict = dicom_reader.make_dict(dicompath) dicom_series.set_from_dict(series_dict) if self.SeriesInstanceUID != dicom_series.SeriesInstanceUID: raise Exception, "File {0} does not have same SeriesInstanceUID as folder\n{1}".format(dicompath, self.path) if self.SeriesNumber != dicom_series.SeriesNumber: raise Exception, "File {0} does not have same SeriesNumber as folder\n{1}".format(dicompath, self.path) return dicom_series
def load_DICOMseries_using_headers( self, H_REC=re.compile( '^([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)\.([0-9]+\.[0-9]+\.[0-9]+)\.([0-9]+\.[0-9]+\.[0-9]+)$' )): 'Load in one of the dicoms (prefering smaller ones) and use the information inside to construct a dicom_series_info object, which it returns' dicomlist = os.listdir(self.path) self.numdicoms = len(dicomlist) dicompath = None if self.numdicoms == 0: return None elif self.numdicoms == 2: for dicom in dicomlist: result = H_REC.match(dicom) if result != None: tupple = result.groups() if tupple[1] == r'5.24.5': dicompath = os.path.join(self.path, dicom) break if dicompath == None: dicompath = os.path.join(self.path, dicomlist[0]) dicom_series = DICOMseries(subid=self.image.visit.subject.subid, visid=self.image.visit.visid, series=self.image.series, sorted_files=self.numdicoms) try: pydicomobject = pydicom.read_file(dicompath, stop_before_pixels=True) dicom_series.set_from_pydicom(pydicomobject) except Exception: dicom_reader = dcm2txt() series_dict = dicom_reader.make_dict(dicompath) dicom_series.set_from_dict(series_dict) if self.SeriesInstanceUID != dicom_series.SeriesInstanceUID: raise Exception, "File {0} does not have same SeriesInstanceUID as folder\n{1}".format( dicompath, self.path) if self.SeriesNumber != dicom_series.SeriesNumber: raise Exception, "File {0} does not have same SeriesNumber as folder\n{1}".format( dicompath, self.path) return dicom_series
def load_unsorted_series(self, H_REC=re.compile('^([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)\.([0-9]+\.[0-9]+\.[0-9]+)\.([0-9]+\.[0-9]+\.[0-9]+)$')): DICOMseries_dict = defaultdict(lambda: defaultdict(dict)) dicomlist = os.listdir(self.study.config.incoming_DICOM_dir) header_dict = {} otherdicoms = [] dicom_reader = dcm2txt() for dicom in dicomlist: if dicom.find('part') != -1: #skip files in transit continue result = H_REC.match(dicom) if result != None: tupple = result.groups() if tupple[1] == r'5.24.5': dicompath = os.path.join(self.study.config.incoming_DICOM_dir, dicom) try: pydicomobject = pydicom.read_file(dicompath, stop_before_pixels=True) dicom_series = DICOMseries.cls_from_pydicom(pydicomobject) except NotImplementedError: series_dict = dicom_reader.make_dict(dicompath) dicom_series = DICOMseries.cls_from_dict(series_dict) dicom_series.subid = self.DICOMseries2study_subid(dicom_series) dicom_series.visid = self.DICOMseries2study_visid(dicom_series) dicom_series.unsorted_dicom_paths.append(dicompath) key = tupple[0] + tupple[2] header_dict[key] = (tupple[0], tupple[1], tupple[2], dicom_series.subid, dicom_series.visid, dicom_series.SeriesInstanceUID) if dicom_series.SeriesInstanceUID not in DICOMseries_dict[dicom_series.subid][dicom_series.visid]: DICOMseries_dict[dicom_series.subid][dicom_series.visid][dicom_series.SeriesInstanceUID] = dicom_series elif dicom_series.is_same_series(DICOMseries_dict[dicom_series.subid][dicom_series.visid][dicom_series.SeriesInstanceUID]): DICOMseries_dict[dicom_series.subid][dicom_series.visid][dicom_series.SeriesInstanceUID].unsorted_dicom_paths.append(dicompath) else: raise FindUnsortedSeriesError(dicom_series, DICOMseries_dict[dicom_series.subid][dicom_series.visid][dicom_series.SeriesInstanceUID]) continue otherdicoms.append(dicom) numloading = 0 for dicom in otherdicoms: numloading = numloading + 1 if numloading % 200 == 0: print "\t\tnumloading: {}".format(numloading) dicompath = os.path.join(self.study.config.incoming_DICOM_dir, dicom) result = H_REC.match(dicom) if result != None: tupple = result.groups() key = tupple[0] + tupple[2] if (key) in header_dict: tupple = header_dict[key] DICOMseries_dict[tupple[3]][tupple[4]][tupple[5]].unsorted_dicom_paths.append(dicompath) continue try: pydicomobject = pydicom.read_file(dicompath, stop_before_pixels=True) dicom_series = DICOMseries.cls_from_pydicom(pydicomobject) except Exception: series_dict = dicom_reader.make_dict(dicompath) dicom_series = DICOMseries.cls_from_dict(series_dict) dicom_series.subid = self.DICOMseries2study_subid(dicom_series) dicom_series.visid = self.DICOMseries2study_visid(dicom_series) dicom_series.unsorted_dicom_paths.append(dicompath) if dicom_series.SeriesInstanceUID not in DICOMseries_dict[dicom_series.subid][dicom_series.visid]: DICOMseries_dict[dicom_series.subid][dicom_series.visid][dicom_series.SeriesInstanceUID] = dicom_series elif dicom_series.is_same_series(DICOMseries_dict[dicom_series.subid][dicom_series.visid][dicom_series.SeriesInstanceUID]): DICOMseries_dict[dicom_series.subid][dicom_series.visid][dicom_series.SeriesInstanceUID].unsorted_dicom_paths.append(dicompath) else: raise FindUnsortedSeriesError(dicom_series, DICOMseries_dict[dicom_series.subid][dicom_series.visid][dicom_series.SeriesInstanceUID]) return DICOMseries_dict
def load_unsorted_series( self, H_REC=re.compile( '^([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)\.([0-9]+\.[0-9]+\.[0-9]+)\.([0-9]+\.[0-9]+\.[0-9]+)$' )): DICOMseries_dict = defaultdict(lambda: defaultdict(dict)) dicomlist = os.listdir(self.study.config.incoming_DICOM_dir) header_dict = {} otherdicoms = [] dicom_reader = dcm2txt() for dicom in dicomlist: if dicom.find('part') != -1: #skip files in transit continue result = H_REC.match(dicom) if result != None: tupple = result.groups() if tupple[1] == r'5.24.5': dicompath = os.path.join( self.study.config.incoming_DICOM_dir, dicom) try: pydicomobject = pydicom.read_file( dicompath, stop_before_pixels=True) dicom_series = DICOMseries.cls_from_pydicom( pydicomobject) except NotImplementedError: series_dict = dicom_reader.make_dict(dicompath) dicom_series = DICOMseries.cls_from_dict(series_dict) dicom_series.subid = self.DICOMseries2study_subid( dicom_series) dicom_series.visid = self.DICOMseries2study_visid( dicom_series) dicom_series.unsorted_dicom_paths.append(dicompath) key = tupple[0] + tupple[2] header_dict[key] = (tupple[0], tupple[1], tupple[2], dicom_series.subid, dicom_series.visid, dicom_series.SeriesInstanceUID) if dicom_series.SeriesInstanceUID not in DICOMseries_dict[ dicom_series.subid][dicom_series.visid]: DICOMseries_dict[dicom_series.subid][ dicom_series.visid][ dicom_series.SeriesInstanceUID] = dicom_series elif dicom_series.is_same_series( DICOMseries_dict[dicom_series.subid] [dicom_series.visid][dicom_series.SeriesInstanceUID]): DICOMseries_dict[dicom_series.subid][ dicom_series.visid][ dicom_series. SeriesInstanceUID].unsorted_dicom_paths.append( dicompath) else: raise FindUnsortedSeriesError( dicom_series, DICOMseries_dict[dicom_series.subid][ dicom_series.visid][ dicom_series.SeriesInstanceUID]) continue otherdicoms.append(dicom) numloading = 0 for dicom in otherdicoms: numloading = numloading + 1 if numloading % 200 == 0: print "\t\tnumloading: {}".format(numloading) dicompath = os.path.join(self.study.config.incoming_DICOM_dir, dicom) result = H_REC.match(dicom) if result != None: tupple = result.groups() key = tupple[0] + tupple[2] if (key) in header_dict: tupple = header_dict[key] DICOMseries_dict[tupple[3]][tupple[4]][ tupple[5]].unsorted_dicom_paths.append(dicompath) continue try: pydicomobject = pydicom.read_file(dicompath, stop_before_pixels=True) dicom_series = DICOMseries.cls_from_pydicom(pydicomobject) except Exception: series_dict = dicom_reader.make_dict(dicompath) dicom_series = DICOMseries.cls_from_dict(series_dict) dicom_series.subid = self.DICOMseries2study_subid(dicom_series) dicom_series.visid = self.DICOMseries2study_visid(dicom_series) dicom_series.unsorted_dicom_paths.append(dicompath) if dicom_series.SeriesInstanceUID not in DICOMseries_dict[ dicom_series.subid][dicom_series.visid]: DICOMseries_dict[dicom_series.subid][dicom_series.visid][ dicom_series.SeriesInstanceUID] = dicom_series elif dicom_series.is_same_series( DICOMseries_dict[dicom_series.subid][dicom_series.visid][ dicom_series.SeriesInstanceUID]): DICOMseries_dict[dicom_series.subid][dicom_series.visid][ dicom_series. SeriesInstanceUID].unsorted_dicom_paths.append(dicompath) else: raise FindUnsortedSeriesError( dicom_series, DICOMseries_dict[dicom_series.subid][ dicom_series.visid][dicom_series.SeriesInstanceUID]) return DICOMseries_dict