From 1c76e0696c00e2df324609041c3842f35b8bf7c0 Mon Sep 17 00:00:00 2001 From: Ross Date: Mon, 18 May 2026 07:48:24 +0100 Subject: [PATCH] feat(tasks): Refactor series_reconstruct_task and add _stamp_derived_dataset for improved dataset handling --- atlas/tasks.py | 20 ++---- atlas/templates/atlas/series_viewer.html | 4 +- atlas/views.py | 83 ++++++++++++++++++++++-- 3 files changed, 88 insertions(+), 19 deletions(-) diff --git a/atlas/tasks.py b/atlas/tasks.py index e752705d..d312269e 100644 --- a/atlas/tasks.py +++ b/atlas/tasks.py @@ -86,7 +86,6 @@ from generic.models import CimarCase from rad.settings import REMOTE_URL, CIMAR_USERNAME, CIMAR_PASSWORD from helpers.cimar import CimarAPI, NotFoundError from pydicom.uid import generate_uid -from datetime import datetime from django.contrib.auth.models import User from django.core.files.base import ContentFile from django.core.cache import cache @@ -392,9 +391,6 @@ def series_reconstruct_task( recon_series = atlas_views._create_series_derivative(series, f"Recon {plane_norm.title()} ({source_plane.title()} src)") recon_series.series_instance_uid = generate_uid() recon_series.save(update_fields=["series_instance_uid"]) - now = datetime.utcnow() - date_str = now.strftime("%Y%m%d") - time_str = now.strftime("%H%M%S.%f")[:13] for idx in range(int(cfg["count"])): arr2d = cfg["slice_fn"](idx) @@ -404,18 +400,16 @@ def series_reconstruct_task( ds_new.Rows = int(arr2d.shape[0]) ds_new.Columns = int(arr2d.shape[1]) ds_new.InstanceNumber = idx + 1 - ds_new.SOPInstanceUID = generate_uid() - ds_new.SeriesInstanceUID = recon_series.series_instance_uid - ds_new.SeriesDescription = recon_series.description or f"Recon {plane_norm.title()}" - ds_new.ImageType = ["DERIVED", "SECONDARY", "MPR"] - ds_new.DerivationDescription = ( + atlas_views._stamp_derived_dataset( + ds_new, + series_instance_uid=recon_series.series_instance_uid, + series_description=recon_series.description or f"Recon {plane_norm.title()}", + derivation_description=( f"{plane_norm.title()} reconstruction; mode={recon_thickness_mode}; " f"thickness={float(cfg['slice_thickness_out']):.3f}mm; spacing={float(cfg['spacing_between_slices_out']):.3f}mm" + ), + image_type=["DERIVED", "SECONDARY", "MPR"], ) - ds_new.ContentDate = date_str - ds_new.ContentTime = time_str - ds_new.InstanceCreationDate = date_str - ds_new.InstanceCreationTime = time_str ds_new.PixelData = arr2d.tobytes() ds_new.PixelSpacing = [float(cfg["pixel_spacing_out"][0]), float(cfg["pixel_spacing_out"][1])] ds_new.ImageOrientationPatient = cfg["image_orientation_out"] diff --git a/atlas/templates/atlas/series_viewer.html b/atlas/templates/atlas/series_viewer.html index d2331315..f41155a8 100755 --- a/atlas/templates/atlas/series_viewer.html +++ b/atlas/templates/atlas/series_viewer.html @@ -212,7 +212,7 @@
@@ -255,7 +255,7 @@