From dc6f53de11c043d60fa5ca8835660b03d3503ed0 Mon Sep 17 00:00:00 2001 From: Ross Date: Mon, 30 Oct 2023 16:11:28 +0000 Subject: [PATCH] add tag ids to dicom info --- atlas/api.py | 15 ++++++++++++--- generic/models.py | 3 +++ helpers/images.py | 8 +++----- 3 files changed, 18 insertions(+), 8 deletions(-) diff --git a/atlas/api.py b/atlas/api.py index 381edcdb..3de73fcc 100644 --- a/atlas/api.py +++ b/atlas/api.py @@ -243,8 +243,8 @@ def view_dicom_tags(request, hash: str): item = SeriesImage.objects.get(image_md5_hash=hash) return item.get_dicom_json() -@router.get("/split_series_by_dicom_tag/{series_id}/{dicom_tag}", auth=django_auth) -def split_series_by_tag(request, series_id: int, dicom_tag): +@router.get("/series_split_by_dicom_tag/{series_id}/{dicom_tag}", auth=django_auth) +def series_split_by_tag(request, series_id: int, dicom_tag:str): series = get_object_or_404(Series, pk=series_id) image_map = defaultdict(list) @@ -281,4 +281,13 @@ def split_series_by_tag(request, series_id: int, dicom_tag): new_series.append(series.pk) - return new_series \ No newline at end of file + return new_series + + +@router.get("/split_order_by_dicom_tag/{series_id}/{dicom_tag}", auth=django_auth) +def series_order_by_tag(request, series_id: int, dicom_tag:str): + series = get_object_or_404(Series, pk=series_id) + + series.order_by_dicom(dicom_tag) + + return [f"{series} ordered by {dicom_tag}"] \ No newline at end of file diff --git a/generic/models.py b/generic/models.py index de48664b..a21f73a7 100644 --- a/generic/models.py +++ b/generic/models.py @@ -378,6 +378,9 @@ class SeriesBase(models.Model): print("skipped, no {}: {}".format(field, skipcount)) + if not slices: + return + # ensure they are in the correct order slices = sorted(slices, key=lambda s: s[field].value) diff --git a/helpers/images.py b/helpers/images.py index d37ec5d2..ec3083d9 100644 --- a/helpers/images.py +++ b/helpers/images.py @@ -125,7 +125,7 @@ def pretty_print_dicom(dataset, indent=0): return "".join(l) -def print_dicom(dataset, indent=0): +def print_dicom(dataset, indent=0, include_tag_ids=True): """Go through all items in the dataset and print them with custom format Modelled after Dataset._pretty_str() @@ -139,7 +139,7 @@ def print_dicom(dataset, indent=0): for data_element in dataset: if data_element.VR == "SQ": # a sequence - l.append(f"{indent_string}{data_element.name}") + l.append(f"{data_element.tag}: {indent_string}{data_element.name}") for sequence_item in data_element.value: l.append(print_dicom(sequence_item, indent + 1)) l.append(next_indent_string + "---------") @@ -150,9 +150,7 @@ def print_dicom(dataset, indent=0): repr_value = repr(data_element.value) if len(repr_value) > 50: repr_value = repr_value[:50] + "..." - l.append("{0:s} {1:s} = {2:s}".format(indent_string, - data_element.name, - repr_value)) + l.append(f"{data_element.tag}: {indent_string:s} {data_element.name:s} = {repr_value:s}") return "\n
".join(l) def get_image_dicom_hash(img, dataset=None) -> (str, bool):