add api to split series based on dicom tags
This commit is contained in:
@@ -5,6 +5,7 @@ from ninja import ModelSchema, Router, Schema, Field
|
|||||||
|
|
||||||
# from .decorators import user_is_author_or_rapid_checker
|
# from .decorators import user_is_author_or_rapid_checker
|
||||||
from django.core.exceptions import PermissionDenied
|
from django.core.exceptions import PermissionDenied
|
||||||
|
import pydicom
|
||||||
|
|
||||||
from generic.decorators import check_user_in_group
|
from generic.decorators import check_user_in_group
|
||||||
from generic.constants import Group
|
from generic.constants import Group
|
||||||
@@ -241,3 +242,43 @@ def view_dicom_tags(request, hash: str):
|
|||||||
|
|
||||||
item = SeriesImage.objects.get(image_md5_hash=hash)
|
item = SeriesImage.objects.get(image_md5_hash=hash)
|
||||||
return item.get_dicom_json()
|
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
|
||||||
Reference in New Issue
Block a user