Skip to content

Commit d93c3f2

Browse files
committed
Fix indentation bug in ImageLibrary
1 parent 66af872 commit d93c3f2

2 files changed

Lines changed: 97 additions & 45 deletions

File tree

src/highdicom/sr/templates.py

Lines changed: 49 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -5134,58 +5134,63 @@ def __init__(
51345134
51355135
"""
51365136
super().__init__()
5137+
5138+
if len(datasets) == 0:
5139+
raise ValueError(
5140+
"Argument 'datasets' must contain at least one item."
5141+
)
5142+
51375143
library_item = ContainerContentItem(
51385144
name=codes.DCM.ImageLibrary,
51395145
relationship_type=RelationshipTypeValues.CONTAINS
51405146
)
51415147
library_item.ContentSequence = ContentSequence()
5142-
if datasets is not None:
5143-
groups = collections.defaultdict(list)
5144-
for ds in datasets:
5145-
modality = _get_coded_modality(ds.SOPClassUID)
5146-
image_item = ImageContentItem(
5147-
name=CodedConcept(
5148-
value='260753009',
5149-
meaning='Source',
5150-
scheme_designator='SCT'
5151-
),
5152-
referenced_sop_instance_uid=ds.SOPInstanceUID,
5153-
referenced_sop_class_uid=ds.SOPClassUID,
5154-
relationship_type=RelationshipTypeValues.CONTAINS
5148+
groups = collections.defaultdict(list)
5149+
for ds in datasets:
5150+
modality = _get_coded_modality(ds.SOPClassUID)
5151+
image_item = ImageContentItem(
5152+
name=CodedConcept(
5153+
value='260753009',
5154+
meaning='Source',
5155+
scheme_designator='SCT'
5156+
),
5157+
referenced_sop_instance_uid=ds.SOPInstanceUID,
5158+
referenced_sop_class_uid=ds.SOPClassUID,
5159+
relationship_type=RelationshipTypeValues.CONTAINS
5160+
)
5161+
descriptors = ImageLibraryEntryDescriptors(ds)
5162+
5163+
image_item.ContentSequence = ContentSequence()
5164+
image_item.ContentSequence.extend(descriptors)
5165+
if 'FrameOfReferenceUID' in ds:
5166+
# Only type 1 attributes
5167+
shared_descriptors = (
5168+
modality,
5169+
ds.FrameOfReferenceUID,
51555170
)
5156-
descriptors = ImageLibraryEntryDescriptors(ds)
5157-
5158-
image_item.ContentSequence = ContentSequence()
5159-
image_item.ContentSequence.extend(descriptors)
5160-
if 'FrameOfReferenceUID' in ds:
5161-
# Only type 1 attributes
5162-
shared_descriptors = (
5163-
modality,
5164-
ds.FrameOfReferenceUID,
5165-
)
5166-
else:
5167-
shared_descriptors = (
5168-
modality,
5169-
)
5170-
groups[shared_descriptors].append(image_item)
5171-
5172-
for shared_descriptors, image_items in groups.items():
5173-
image = image_items[0]
5174-
group_item = ContainerContentItem(
5175-
name=codes.DCM.ImageLibraryGroup,
5176-
relationship_type=RelationshipTypeValues.CONTAINS
5171+
else:
5172+
shared_descriptors = (
5173+
modality,
51775174
)
5178-
group_item.ContentSequence = ContentSequence()
5179-
5180-
if 'FrameOfReferenceUID' in image:
5181-
group_item.ContentSequence.append(
5182-
UIDRefContentItem(
5183-
name=codes.DCM.FrameOfReferenceUID,
5184-
value=shared_descriptors[1],
5185-
relationship_type=RelationshipTypeValues.HAS_ACQ_CONTEXT # noqa: E501
5186-
)
5175+
groups[shared_descriptors].append(image_item)
5176+
5177+
for shared_descriptors, image_items in groups.items():
5178+
image = image_items[0]
5179+
group_item = ContainerContentItem(
5180+
name=codes.DCM.ImageLibraryGroup,
5181+
relationship_type=RelationshipTypeValues.CONTAINS
5182+
)
5183+
group_item.ContentSequence = ContentSequence()
5184+
5185+
if 'FrameOfReferenceUID' in image:
5186+
group_item.ContentSequence.append(
5187+
UIDRefContentItem(
5188+
name=codes.DCM.FrameOfReferenceUID,
5189+
value=shared_descriptors[1],
5190+
relationship_type=RelationshipTypeValues.HAS_ACQ_CONTEXT # noqa: E501
51875191
)
5188-
group_item.ContentSequence.extend(image_items)
5192+
)
5193+
group_item.ContentSequence.extend(image_items)
51895194
if len(group_item) > 0:
51905195
library_item.ContentSequence.append(group_item)
51915196

tests/test_sr.py

Lines changed: 48 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5729,7 +5729,9 @@ def test_construction(self):
57295729

57305730
library_items = ImageLibrary([self._ref_sm_dataset])
57315731
assert len(library_items) == 1
5732-
library_group_item = library_items[0].ContentSequence[0]
5732+
library_groups = library_items[0].ContentSequence
5733+
assert len(library_groups) == 1
5734+
library_group_item = library_groups[0]
57335735
assert len(library_group_item.ContentSequence) == 1
57345736
assert library_group_item.name == codes.DCM.ImageLibraryGroup
57355737
content_item = library_group_item.ContentSequence[0]
@@ -5742,3 +5744,48 @@ def test_construction(self):
57425744
self._ref_sm_dataset.SOPInstanceUID
57435745
assert ref_sop_class_uid == \
57445746
self._ref_sm_dataset.SOPClassUID
5747+
5748+
def test_construction_multiple_groups(self):
5749+
file_path = Path(__file__)
5750+
data_dir = file_path.parent.parent.joinpath('data')
5751+
self._ref_sm_dataset = dcmread(
5752+
str(data_dir.joinpath('test_files', 'sm_image.dcm'))
5753+
)
5754+
self._ref_ct_dataset = dcmread(
5755+
str(data_dir.joinpath('test_files', 'ct_image.dcm'))
5756+
)
5757+
5758+
library_items = ImageLibrary(
5759+
[self._ref_sm_dataset, self._ref_ct_dataset]
5760+
)
5761+
assert len(library_items) == 1
5762+
library_groups = library_items[0].ContentSequence
5763+
assert len(library_groups) == 2
5764+
5765+
sm_group_item = library_items[0].ContentSequence[0]
5766+
assert len(sm_group_item.ContentSequence) == 1
5767+
assert sm_group_item.name == codes.DCM.ImageLibraryGroup
5768+
content_item = sm_group_item.ContentSequence[0]
5769+
assert isinstance(content_item, ImageContentItem)
5770+
ref_sop_instance_uid = \
5771+
content_item.ReferencedSOPSequence[0].ReferencedSOPInstanceUID
5772+
ref_sop_class_uid = \
5773+
content_item.ReferencedSOPSequence[0].ReferencedSOPClassUID
5774+
assert ref_sop_instance_uid == \
5775+
self._ref_sm_dataset.SOPInstanceUID
5776+
assert ref_sop_class_uid == \
5777+
self._ref_sm_dataset.SOPClassUID
5778+
5779+
ct_group_item = library_items[0].ContentSequence[1]
5780+
assert len(ct_group_item.ContentSequence) == 1
5781+
assert ct_group_item.name == codes.DCM.ImageLibraryGroup
5782+
content_item = ct_group_item.ContentSequence[0]
5783+
assert isinstance(content_item, ImageContentItem)
5784+
ref_sop_instance_uid = \
5785+
content_item.ReferencedSOPSequence[0].ReferencedSOPInstanceUID
5786+
ref_sop_class_uid = \
5787+
content_item.ReferencedSOPSequence[0].ReferencedSOPClassUID
5788+
assert ref_sop_instance_uid == \
5789+
self._ref_ct_dataset.SOPInstanceUID
5790+
assert ref_sop_class_uid == \
5791+
self._ref_ct_dataset.SOPClassUID

0 commit comments

Comments
 (0)