Source code for neuroreg.segreg.atlas
"""Bundled centroid target resources for segmentation-based registration."""
from __future__ import annotations
from importlib import resources
import numpy as np
import numpy.typing as npt
from .io import CentroidDict, GeometryDict, TargetFile, read_target_json
_ATLAS_FILES = {
"fsaverage": "fsaverage.json",
"mni_icbm152_t1_tal_nlin_asym_09c": "mni_icbm152_t1_tal_nlin_asym_09c.json",
}
def _resource(name: str) -> resources.abc.Traversable:
"""Return a handle to a bundled target resource."""
return resources.files("neuroreg.segreg").joinpath("data", name)
[docs]
def available_atlases() -> tuple[str, ...]:
"""Return the names of bundled centroid targets."""
return tuple(sorted(_ATLAS_FILES))
[docs]
def load_atlas_target(name: str) -> TargetFile:
"""Load a supported bundled centroid target."""
resource_name = _ATLAS_FILES.get(name)
if resource_name is None:
raise ValueError(f"Unknown atlas '{name}'. Available atlases: {', '.join(available_atlases())}.")
with resources.as_file(_resource(resource_name)) as path:
return read_target_json(path)
[docs]
def load_fsaverage_centroids() -> CentroidDict:
"""Load bundled fsaverage centroid coordinates."""
return load_atlas_centroids("fsaverage")
[docs]
def load_fsaverage_data() -> tuple[npt.NDArray[np.float64], GeometryDict]:
"""Load bundled fsaverage geometry metadata."""
return load_atlas_data("fsaverage")
[docs]
def load_atlas_centroids(name: str) -> CentroidDict:
"""Load centroid coordinates for a supported bundled target."""
return load_atlas_target(name).centroids
[docs]
def load_atlas_data(name: str) -> tuple[npt.NDArray[np.float64], GeometryDict]:
"""Load geometry metadata for a supported bundled target."""
target = load_atlas_target(name)
if target.geometry is None:
raise ValueError(f"Atlas '{name}' does not include bundled geometry metadata.")
return affine_from_header(target.geometry), target.geometry