Skip to content

Commit 3101b5b

Browse files
Handle autofluorescence channels and pass through unknown image types (#368)
Co-authored-by: Luca Marconato <m.lucalmer@gmail.com>
1 parent d13a407 commit 3101b5b

3 files changed

Lines changed: 45 additions & 4 deletions

File tree

.gitignore

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,5 +50,5 @@ data
5050
# data folder
5151
data/
5252
tests/data
53-
uv.lock
54-
.asv/
53+
.venv
54+
.uv.lock

src/spatialdata_io/readers/macsima.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
"B": "bleach", # v1
3939
"AntigenCycle": "stain", # v0
4040
"S": "stain", # v1
41+
"AF": "autofluorescence", # v1
4142
}
4243

4344

@@ -499,7 +500,7 @@ def _parse_v0_ome_metadata(ome: OME) -> dict[str, Any]:
499500

500501
# Harmonize imagetype across versions
501502
if metadata["imagetype"]:
502-
metadata["imagetype"] = IMAGETYPE_DICT[metadata["imagetype"]]
503+
metadata["imagetype"] = IMAGETYPE_DICT.get(metadata["imagetype"], metadata["imagetype"])
503504

504505
return metadata
505506

@@ -579,7 +580,7 @@ def _parse_v1_ome_metadata(ome: OME) -> dict[str, Any]:
579580

580581
# Harmonize imagetype across versions
581582
if metadata["imagetype"]:
582-
metadata["imagetype"] = IMAGETYPE_DICT[metadata["imagetype"]]
583+
metadata["imagetype"] = IMAGETYPE_DICT.get(metadata["imagetype"], metadata["imagetype"])
583584

584585
return metadata
585586

tests/test_macsima.py

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -551,6 +551,26 @@ def test_parse_v0_ome_metadata_bleach_cycle_appends_background() -> None:
551551
assert md["name"] == "CD4_background"
552552

553553

554+
def test_parse_v0_ome_metadata_handles_unknown_imagetypes() -> None:
555+
ome = OME(
556+
structured_annotations=StructuredAnnotations(
557+
map_annotations=[
558+
MapAnnotation(
559+
value={
560+
"MICS cycle type": "NOT A VALID TYPE",
561+
}
562+
)
563+
]
564+
),
565+
screens=[Screen(reagents=[Reagent(name="CD4__RPA-T4")])],
566+
)
567+
568+
md = _parse_v0_ome_metadata(ome)
569+
570+
# Unknown types should just be passed through
571+
assert md["imagetype"] == "NOT A VALID TYPE"
572+
573+
554574
def test_parse_v1_ome_metadata_basic_extraction_and_conversions() -> None:
555575
ome = OME(
556576
structured_annotations=StructuredAnnotations(
@@ -605,6 +625,26 @@ def test_parse_v1_ome_metadata_invalid_numerics_become_none() -> None:
605625
assert md["roi"] is None
606626

607627

628+
def test_parse_v1_ome_metadata_handles_unknown_imagetypes() -> None:
629+
ome = OME(
630+
structured_annotations=StructuredAnnotations(
631+
map_annotations=[
632+
MapAnnotation(
633+
value={
634+
"ScanType": "NOT A VALID TYPE",
635+
}
636+
)
637+
]
638+
),
639+
screens=[Screen(reagents=[Reagent(name="CD4__RPA-T4")])],
640+
)
641+
642+
md = _parse_v1_ome_metadata(ome)
643+
644+
# Unknown types should just be passed through
645+
assert md["imagetype"] == "NOT A VALID TYPE"
646+
647+
608648
def make_ome_with_version(version_value: str, extra_ma: dict[str, Any] | None = None) -> OME:
609649
base = {"SoftwareVersion": version_value}
610650
if extra_ma:

0 commit comments

Comments
 (0)