Anonymising a DICOM dataset using pixl_dcmd.anonymise_dicom() should pass the validation checks as implemented in pixl_dcmd._dicom_helpers.DicomValidator.
Testing
At a minimum, the following tests should pass:
# pixl_dcmd/tests/test_main.py
from pixl_dcmd.main import anonymise_and_validate_dicom
def test_anonymisation_and_validation(vanilla_dicom_image: Dataset, caplog) -> None:
"""
Test whether anonymisation and validation works as expected on a vanilla DICOM dataset
No warnings should be generated for a valid anonymisation
"""
caplog.clear()
caplog.set_level(logging.WARNING)
validation_errors = anonymise_and_validate_dicom(vanilla_dicom_image)
# Check no warnings were generated
assert "WARNING" not in [record.levelname for record in caplog.records]
assert not validation_errors
# pixl_dcmd/tests/test_dicom_validation.py
from pixl_dcmd._dicom_helpers import DicomValidator
from pixl_dcmd.main import anonymise_dicom
def test_validation_after_anonymisation_works(vanilla_dicom_image: Dataset) -> None:
"""
GIVEN a DICOM dataset
WHEN the dataset is validated after anonymisation
THEN no errors should be raised
"""
validator = DicomValidator()
validator.validate_original(vanilla_dicom_image)
anonymise_dicom(vanilla_dicom_image)
assert not validator.validate_anonymised(vanilla_dicom_image)
Documentation
No response
Dependencies
[ ] #414
Details and Comments
DICOM validation is added in #414 but this made apparent that our anonymisation results in non-compliant DICOM. Some common errors that were observed are the following:
{
'Frame of Reference': {'Tag (0020,1040) (Position Reference Indicator) is missing': [...]},
'General Series': {"Tag (0018,5100) (Patient Position) is missing due to condition:\n ...1.1.4.3" or "1.2.840.10008.5.1.4.1.1.4.2"\''},
'General Study': {
'Tag (0008,0020) (Study Date) is missing': [...],
'Tag (0008,0030) (Study Time) is missing': [...],
"Tag (0008,0090) (Referring Physician's Name) is missing": [...]
},
'Image Plane': {
'Tag (0018,0050) (Slice Thickness) is missing': [...],
'Tag (0020,0032) (Image Position (Patient)) is missing': [...],
'Tag (0020,0037) (Image Orientation (Patient)) is missing': [...]
},
'MR Image': {
'Tag (0018,0020) (Scanning Sequence) is missing': [...],
'Tag (0018,0021) (Sequence Variant) is missing': [...],
'Tag (0018,0022) (Scan Options) is missing': [...],
'Tag (0018,0023) (MR Acquisition Type) is missing': [...],
'Tag (0018,0081) (Echo Time) is missing': [...],
'Tag (0018,0091) (Echo Train Length) is missing': [...]
},
'Patient': {
"Tag (0010,0030) (Patient's Birth Date) is missing": [...],
"Tag (0010,0040) (Patient's Sex) is missing": [...]
}
}
Definition of Done / Acceptance Criteria
Anonymising a DICOM dataset using
pixl_dcmd.anonymise_dicom()
should pass the validation checks as implemented inpixl_dcmd._dicom_helpers.DicomValidator
.Testing
At a minimum, the following tests should pass:
Documentation
No response
Dependencies
Details and Comments
DICOM validation is added in #414 but this made apparent that our anonymisation results in non-compliant DICOM. Some common errors that were observed are the following: