diff --git a/siibra/core/region.py b/siibra/core/region.py index a1ff991e9..caa0e8afd 100644 --- a/siibra/core/region.py +++ b/siibra/core/region.py @@ -877,9 +877,21 @@ def vol_to_id_dict(vol: VolumeSrc): for parcvol in parc_volumes if parcvol.volume_type == "neuroglancer/precomputed" and parcvol.space is space] - map_idx = self.index.map - if map_idx is not None: - pev.has_annotation.visualized_in = vol_to_id_dict(ng_parc_volumes[map_idx]) + + # self.index.label can sometimes be None. e.g. "basal forebrain" + # in such a case, do not populate visualized in + if self.index.label is not None: + + # self.index.map can sometimes be None, but label is defined + if self.index.map is None: + + # In rare instances, e.g. julich brain 2.9, "Ch 123 (Basal Forebrain)" + # self.index.map is undefined (expect a single volume?) + # but there exist multiple volumes (in the example, one for left/ one for right hemisphere) + if len(ng_parc_volumes) == 1: + pev.has_annotation.visualized_in = vol_to_id_dict(ng_parc_volumes[0]) + else: + pev.has_annotation.visualized_in = vol_to_id_dict(ng_parc_volumes[self.index.map]) except IndexError: pass diff --git a/test/core/test_region.py b/test/core/test_region.py index 294992c4e..280437170 100644 --- a/test/core/test_region.py +++ b/test/core/test_region.py @@ -1,6 +1,7 @@ import unittest from unittest.mock import MagicMock import pytest +import re from siibra import parcellations, spaces, retrieval from siibra.core.region import Region @@ -161,5 +162,19 @@ def test_detail_region(parc_spec,region_spec,space_spec,expect_raise): assert model.has_annotation is not None assert model.has_annotation.best_view_point is not None +has_inspired_by = [ + ("julich 2.9", "hoc1 left", "mni152"), + ("long bundle", "Left short cingulate fibres", "mni152") +] + +@pytest.mark.parametrize('parc_spec, region_spec, space_spec', has_inspired_by) +def test_has_inspired_by(parc_spec, region_spec, space_spec): + p = siibra.parcellations[parc_spec] + r = p.decode_region(region_spec) + model = r.to_model(space=siibra.spaces[space_spec]) + assert model.has_annotation.visualized_in is not None, f"expecting has_annotation.visualized_in is defined" + assert re.match(r"^precomputed:\/\/", model.has_annotation.visualized_in["@id"]), f"expecting has_annotation.visualized_in starts with precomputed://" + + if __name__ == "__main__": unittest.main()