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(self):
     'returns a dicom_series_info object created with information from the directory structure without actually looking at the dicoms'
     dicomlist = os.listdir(self.path)
     self.numdicoms = len(dicomlist)
     dicom_series = DICOMseries(subid=self.image.visit.subject.subid, visid=self.image.visit.visid, series=self.image.series, sorted_files=self.numdicoms)
     dicom_series.SeriesInstanceUID = self.SeriesInstanceUID
     dicom_series.SeriesNumber = self.SeriesNumber
     return dicom_series
Example #3
0
 def load_DICOMseries(self):
     'returns a dicom_series_info object created with information from the directory structure without actually looking at the dicoms'
     dicomlist = os.listdir(self.path)
     self.numdicoms = len(dicomlist)
     dicom_series = DICOMseries(subid=self.image.visit.subject.subid,
                                visid=self.image.visit.visid,
                                series=self.image.series,
                                sorted_files=self.numdicoms)
     dicom_series.SeriesInstanceUID = self.SeriesInstanceUID
     dicom_series.SeriesNumber = self.SeriesNumber
     return dicom_series
Example #4
0
 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