diff --git a/atlas/views.py b/atlas/views.py index db5f1013..4f396c9b 100755 --- a/atlas/views.py +++ b/atlas/views.py @@ -1,4 +1,5 @@ import json +import pprint from dal import autocomplete from django.shortcuts import render, get_object_or_404, redirect from django import forms @@ -1064,11 +1065,11 @@ def image_diff(request): diff = difflib.HtmlDiff().make_table(f, s) - #dict_diff = compare_dicom_datasets(first_ds, second_ds) + dict_diff = pprint.pformat(compare_dicom_datasets(first_ds, second_ds)) - return HttpResponse(diff) + #return HttpResponse(diff) - #return HttpResponse(f"
{dict_diff}

{diff}") + return HttpResponse(f"
{dict_diff}

{diff}") return HttpResponse("Fail") diff --git a/helpers/images.py b/helpers/images.py index b811a4e7..3960ad51 100644 --- a/helpers/images.py +++ b/helpers/images.py @@ -220,8 +220,15 @@ def get_image_hash(img, dataset=None, hash_type="blake3", direct_pixel_data=True def compare_dicom_elements(element1: pydicom.DataElement, element2: pydicom.DataElement): + dont_print = ['Pixel Data', 'File Meta Information Version'] + + if element1.name in dont_print: + return {} + differences = {} + vr_exists = False + # Compare the element tags try: if element1.tag != element2.tag: @@ -230,15 +237,20 @@ def compare_dicom_elements(element1: pydicom.DataElement, element2: pydicom.Data pass # Compare the VR (Value Representation) - if element1.VR != element2.VR: - differences['VR'] = (element1.VR, element2.VR) + try: + if element1.VR != element2.VR: + vr_exists = True + differences['VR'] = (element1.VR, element2.VR) + + except AttributeError: + pass # Compare the value if element1.value != element2.value: differences['value'] = (element1.value, element2.value) # Recursively compare the child elements - if element1.VR == 'SQ' and element2.VR == 'SQ': + if vr_exists and element1.VR == 'SQ' and element2.VR == 'SQ': for i, (item1, item2) in enumerate(zip(element1.value, element2.value)): item_differences = compare_dicom_elements(item1, item2) if item_differences: @@ -253,17 +265,17 @@ def compare_dicom_datasets(dataset1: pydicom.Dataset, dataset2: pydicom.Dataset) for element1 in dataset1: element2 = dataset2.get(element1.tag) if element2 is None: - differences[element1.tag] = ('missing', element1.value) + differences[f"{element1.tag} {element1.name}"] = ('missing', element1.value) else: element_differences = compare_dicom_elements(element1, element2) if element_differences: - differences[element1.tag] = element_differences + differences[f"{element1.tag} {element1.name}"] = element_differences # Check for any extra elements in dataset2 for element2 in dataset2: element1 = dataset1.get(element2.tag) if element1 is None: - differences[element2.tag] = ('extra', element2.value) + differences[f"{element1.tag} {element1.name}"] = ('extra', element2.value) return differences