diff --git a/e2e/volumes/test_parcellationmap.py b/e2e/volumes/test_parcellationmap.py index 464d6415f..22ed92b5b 100644 --- a/e2e/volumes/test_parcellationmap.py +++ b/e2e/volumes/test_parcellationmap.py @@ -6,6 +6,7 @@ from siibra.volumes.volume import Subvolume from itertools import product +import numpy as np maps_to_compress = [ siibra.get_map("2.9", "mni152"), # contains fragments @@ -123,3 +124,19 @@ def test_fetching_merged_volume(): mp = siibra.get_map("julich 2.9", "bigbrain") assert len(mp) > 1 _ = mp.fetch() + + +@pytest.mark.parametrize("siibramap", [ + siibra.get_map('julich 3', 'fsaverage'), + siibra.get_map('julich 3', 'mni152'), +]) +def test_fetching_mask(siibramap: Map): + for fmt in siibramap.formats: + for region in siibramap.regions: + mesh_or_img = siibramap.fetch(region, format=fmt) + arr = mesh_or_img['labels'] if isinstance(mesh_or_img, dict) else mesh_or_img.dataobj + unq_vals = np.unique(arr) + assert np.array_equal(unq_vals, [0, 1]), ( + f"{siibramap}, {fmt}. Mask for {region} should only contain 0 " + f"and 1 but found: {unq_vals}" + ) diff --git a/siibra/volumes/providers/gifti.py b/siibra/volumes/providers/gifti.py index b5f4d545f..ae9535917 100644 --- a/siibra/volumes/providers/gifti.py +++ b/siibra/volumes/providers/gifti.py @@ -134,14 +134,17 @@ def __init__(self, url: Union[str, dict]): else: raise NotImplementedError(f"Urls for {self.__class__.__name__} are expected to be of type str or dict.") - def fetch(self, fragment: str = None, **kwargs): + def fetch(self, fragment: str = None, label: int = None, **kwargs): """Returns a 1D numpy array of label indices.""" labels = [] for fragment_name, loader in self._loaders.items(): if fragment is not None and fragment.lower() not in fragment_name.lower(): continue assert len(loader.data.darrays) == 1 - labels.append(loader.data.darrays[0].data) + if label is not None: + labels.append((loader.data.darrays[0].data == label).astype('uint8')) + else: + labels.append(loader.data.darrays[0].data) return {"labels": np.hstack(labels)}