From 3320f7e99f6466247847f0c9fd4966c2784ca33a Mon Sep 17 00:00:00 2001 From: Ross Date: Mon, 30 Oct 2023 12:45:16 +0000 Subject: [PATCH] add api to split series based on dicom tags --- atlas/api.py | 43 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 42 insertions(+), 1 deletion(-) diff --git a/atlas/api.py b/atlas/api.py index 8ab36967..381edcdb 100644 --- a/atlas/api.py +++ b/atlas/api.py @@ -5,6 +5,7 @@ from ninja import ModelSchema, Router, Schema, Field # from .decorators import user_is_author_or_rapid_checker from django.core.exceptions import PermissionDenied +import pydicom from generic.decorators import check_user_in_group from generic.constants import Group @@ -240,4 +241,44 @@ def generate_image_hash(request, id: int): def view_dicom_tags(request, hash: str): item = SeriesImage.objects.get(image_md5_hash=hash) - return item.get_dicom_json() \ No newline at end of file + 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): + series = get_object_or_404(Series, pk=series_id) + + image_map = defaultdict(list) + + # Split teh associated images + for image in series.images.all(): + ds = image.get_dicom_data() + + if dicom_tag in ds: + val = ds[dicom_tag].value + + if type(val) == pydicom.multival.MultiValue: + image_map[",".join((val))].append(image) + else: + image_map[val].append(image) + else: + return {f"{dicom_tag} not found"} + + new_series = [] + case = series.case.all() + authors = series.author.all() + + for n, option in enumerate(image_map): + if n == 0: + series.images.set(image_map[option]) + + else: + series.pk = None + series.save() + series.case.set(case) + series.author.set(authors) + series.images.set(image_map[option]) + + new_series.append(series.pk) + + + return new_series \ No newline at end of file