Skip to content

Sr utils

sr_utils #

Functions:

Name Description
sr_reference_uids

Get the ReferencedSeriesInstanceUIDs from an SR file

SR_RefSOPs #

Bases: list

Represents a list of unique SOPInstanceUIDs referenced in by a SR file

SR_RefSeries #

Bases: list

Represents a list of SeriesInstanceUIDs referenced by a SR file

sr_reference_uids #

sr_reference_uids(
    sr: pydicom.dataset.Dataset,
) -> tuple[
    imgtools.dicom.dicom_metadata.modality_utils.sr_utils.SR_RefSeries,
    imgtools.dicom.dicom_metadata.modality_utils.sr_utils.SR_RefSOPs,
]

Get the ReferencedSeriesInstanceUIDs from an SR file

SR Dicom files can reference multiple SeriesInstanceUIDs and many SOPInstanceUIDs

Since we might need to match on SOP Instance UIDs if the reference is a MR, we also get the SOP Instance UIDs This function extracts all unique references from the CurrentRequestedProcedureEvidenceSequence.

Parameters:

Name Type Description Default

sr #

pydicom.dataset.Dataset

DICOM Structured Report dataset as a pydicom Dataset.

required

Returns:

Type Description
tuple[imgtools.dicom.dicom_metadata.modality_utils.sr_utils.SR_RefSeries, imgtools.dicom.dicom_metadata.modality_utils.sr_utils.SR_RefSOPs]

A tuple containing: - series_uids: SR_RefSeries - List of unique referenced SeriesInstanceUIDs (empty list if none) - sop_uids: SR_RefSOPs - List of unique referenced SOPInstanceUIDs (empty list if none)

Source code in src/imgtools/dicom/dicom_metadata/modality_utils/sr_utils.py
def sr_reference_uids(
    sr: Dataset,
) -> tuple[SR_RefSeries, SR_RefSOPs]:
    """Get the `ReferencedSeriesInstanceUID`s from an SR file

    SR Dicom files can reference multiple SeriesInstanceUIDs and many SOPInstanceUIDs

    Since we might need to match on SOP Instance UIDs if the reference is
    a MR, we also get the SOP Instance UIDs
    This function extracts all unique references from the
    CurrentRequestedProcedureEvidenceSequence.

    Parameters
    ----------
    sr : Dataset
        DICOM Structured Report dataset as a pydicom Dataset.

    Returns
    -------
    tuple[SR_RefSeries, SR_RefSOPs]
        A tuple containing:
        - series_uids: SR_RefSeries - List of unique referenced SeriesInstanceUIDs (empty list if none)
        - sop_uids: SR_RefSOPs - List of unique referenced SOPInstanceUIDs (empty list if none)
    """

    series_uids = set()
    sop_uids = set()
    if "CurrentRequestedProcedureEvidenceSequence" not in sr:
        return SR_RefSeries([]), SR_RefSOPs([])

    for evidence_seq in sr.CurrentRequestedProcedureEvidenceSequence:
        if "ReferencedSeriesSequence" not in evidence_seq:
            continue

        for series_seq in evidence_seq.ReferencedSeriesSequence:
            series_uids.add(series_seq.SeriesInstanceUID)

            if "ReferencedSOPSequence" not in series_seq:
                continue
            for ref_seq in series_seq.ReferencedSOPSequence:
                sop_uids.add(ref_seq.ReferencedSOPInstanceUID)

    series_list = SR_RefSeries(series_uids)
    sop_list = SR_RefSOPs(sop_uids)

    return series_list, sop_list