Siibra: a software tool suite for realizing a Multilevel Human Brain Atlas from complex data resources.
The 25 matches
- [1] § Results › Multimodal comparison of brain areas ↔ examples/tutorials/2025-paper-fig5.py, lines 17–38 · score 0.98 · high resolution scans, underlying cloud resource, chosen position, oriented cortical, motor area, full resolution image
- [2] § Results › Anatomical evaluation of subcortical maps ↔ examples/tutorials/2025-paper-fig6.py, lines 16–49 · score 0.84 · ventral intermediate nucleus, subcortical maps, structural connectivity, thalamus, diffusion, Precentral
- [3] § Results › Multimodal comparison of brain areas ↔ siibra/livequeries/bigbrain.py, lines 253–394 · score 0.79 · intersected layer IV, cortical image patch, cortical layer surface, BigBrain, closest, oriented
- [4] § Methods › Memory-efficient representation of sparse regional maps ↔ siibra/volumes/parcellationmap.py, lines 1142–1283 · score 0.77 · Statistical maps, region maps, image volume, parcellation maps, coordinate space, numerical
- [5] § Results › Anatomically guided reproducible extraction of microscopy data ↔ examples/tutorials/2025-paper-fig5.py, lines 17–38 · score 0.74 · high resolution image, siibra allows, full resolution, BigBrain, precomputed, microscopy
- [6] § Results › Design and architecture of siibra ↔ backend/app/bkwdcompat.py, lines 104–173 · score 0.74 · DiFuMo, MNI Colin, cytoarchitectonic maps, cortical layer, Julich Brain, bundle
- [7] § Methods › Support of FAIR principles ↔ siibra/volumes/sparsemap.py, lines 489–545 · score 0.72 · NumPy, Nifti1Image, nibabel, nilearn, fetching, siibra
- [8] § Methods › Modeling spatial entities in different reference coordinate systems ↔ siibra/livequeries/bigbrain.py, lines 253–394 · score 0.69 · cortical image patch, point clouds, BigBrain, vertices, probability, locations
- [9] § Methods › Memory-efficient representation of sparse regional maps ↔ siibra/volumes/sparsemap.py, lines 338–468 · score 0.67 · bounding boxes, Statistical maps, image volume, sparse, weights, probabilistic
- [10] § Methods › Separation of content from code › Live queries ↔ siibra/livequeries/ebrains.py, lines 34–145 · score 0.64 · EBRAINS Knowledge Graph, anatomically anchored, live queries, siibra, Atlas
- [11] § Results › Anatomical characterization and multimodal profiling for regions of interest ↔ siibra/volumes/parcellationmap.py, lines 1142–1283 · score 0.63 · statistical maps, image volume, brain regions, reference space, correlation, assignment
- [12] § Methods › Modular software architecture ↔ siibra/core/space.py, lines 26–143 · score 0.61 · inflated surface, FreeSurfer, pial, volumetric, space, siibra
- [13] § Methods › Modeling spatial entities in different reference coordinate systems ↔ hbp_spatial_backend/__init__.py, lines 150–224 · score 0.61 · folding patterns, transform coordinates, alignment, diffeomorphisms, Brain
- [14] § Results › Visually guided exploration from full brain networks to cells ↔ backend/app/bkwdcompat.py, lines 104–173 · score 0.61 · MNI Colin, cytoarchitectonic maps, cortical layer, Julich Brain, parcellation, space
- [15] § Results › Expansion with new contents ↔ backend/app/bkwdcompat.py, lines 69–102 · score 0.61 · Allen Mouse Brain, Waxholm Space, Rat Brain, Brain Atlas, parcellation
- [16] § Results › Anatomically guided reproducible extraction of microscopy data ↔ siibra/features/image/sections.py, lines 38–107 · score 0.59 · cortical patch, bounding box, BigBrain, fetch, resolutions, volume
- [17] § Results › Anatomical characterization and multimodal profiling for regions of interest ↔ siibra/volumes/parcellationmap.py, lines 1285–1383 · score 0.59 · Gaussian blob, uncertain coordinates, kernel, split, assignment, volume
- [18] § Results › Anatomical characterization and multimodal profiling for regions of interest ↔ siibra/livequeries/allen.py, lines 69–120 · score 0.59 · Allen Human Brain, gene expression, Human Brain Atlas, microarray, tissue, connectivity
- [19] § Results › Anatomical characterization and multimodal profiling for regions of interest ↔ siibra/features/tabular/gene_expression.py, lines 30–170 · score 0.58 · gene expression, molecular, Human Brain Atlas, tabular, microarray, Allen
- [20] § Methods › Linking data features to atlas elements ↔ siibra/features/tabular/tabular.py, lines 29–157 · score 0.57 · neurotransmitter receptor, tissue samples, properties, locations, anatomical, brain
- [21] § Methods › Separation of content from code › Live queries ↔ siibra/livequeries/allen.py, lines 69–120 · score 0.56 · Allen Human Brain, live queries, microarray, API, interfaces, connecting
- [22] § Methods › Linking data features to atlas elements ↔ examples/tutorials/2025-paper-fig6.py, lines 16–49 · score 0.55 · inter subject variability, reliable, histological, anatomical, maps
- [23] § Results › Anatomical characterization and multimodal profiling for regions of interest ↔ siibra/features/tabular/gene_expression.py, lines 30–170 · score 0.53 · gene expressions, Human Brain Atlas, tabular, Allen, co, retrieved
- [24] § Results › Multimodal comparison of brain areas ↔ siibra/livequeries/allen.py, lines 142–200 · score 0.52 · microarray probe, tissue samples, donors, Allen, genes, MNI
- [25] § Methods › Modular software architecture ↔ src/viewerModule/nehuba/nehubaViewerGlue/nehubaViewerGlue.component.spec.ts, lines 1–66 · score 0.51 · user interactions, user interface, touch, reactive, Angular, viewer
Paper
Loaded from Europe PMC by your browser, not stored by OSCR: doi.org · Europe PMC
The paper is loaded when this pane is shown.
The authors' code
Python · 1,859 lines · 73 KB · Apache-2.0 · 3 matches
- # Copyright 2018-2026
- # Institute of Neuroscience and Medicine (INM-1), Forschungszentrum Jülich GmbH
- # Licensed under the Apache License, Version 2.0 (the "License");
- # you may not use this file except in compliance with the License.
- # You may obtain a copy of the License at
- # http://www.apache.org/licenses/LICENSE-2.0
- # Unless required by applicable law or agreed to in writing, software
- # distributed under the License is distributed on an "AS IS" BASIS,
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- # See the License for the specific language governing permissions and
- # limitations under the License.
- """Provides spatial representations for parcellations and regions."""
- from collections import defaultdict
- from dataclasses import dataclass, asdict
- from typing import Union, Dict, List, TYPE_CHECKING, Iterable, Tuple, Literal, NamedTuple
- import numpy as np
- import pandas as pd
- from scipy.ndimage import distance_transform_edt
- from . import volume as _volume
- from .providers import provider
- from .. import exceptions
- from ..commons import (
- MapIndex,
- MapType,
- compare_arrays,
- resample_img_to_img,
- connected_components,
- clear_name,
- create_key,
- create_gaussian_kernel,
- siibra_tqdm,
- Species,
- CompareMapsResult,
- generate_uuid,
- logger,
- QUIET,
- )
- from ..core import concept, space, parcellation, region as _region
- from ..locations import location, point, pointcloud
- if TYPE_CHECKING:
- from ..core.region import Region
- from nilearn.maskers import NiftiLabelsMasker, SurfaceLabelsMasker
- import json
- from itertools import groupby
- from os import path, rename
- from ..retrieval.cache import CACHE
- @dataclass
- class MapAssignment:
- input_structure: int
- centroid: Union[Tuple[np.ndarray], point.Point]
- volume: int
- fragment: str
- map_value: np.ndarray
- time: Union[int, float, None]
- @dataclass
- class AssignImageResult(CompareMapsResult, MapAssignment):
- pass
- class _CompressedMapSpec(NamedTuple):
- """What a compression produces, before `compress()` wraps it as a Map."""
- volumes: List[_volume.Volume]
- indices: Dict[str, List[Dict]]
- class Map(concept.AtlasConcept, configuration_folder="maps"):
- def __init__(
- self,
- identifier: str,
- name: str,
- space_spec: dict,
- parcellation_spec: dict,
- indices: Dict[str, List[Dict]],
- volumes: list = [],
- shortname: str = "",
- description: str = "",
- modality: str = None,
- publications: list = [],
- datasets: list = [],
- prerelease: bool = False,
- ):
- """
- Constructs a new parcellation object.
- Parameters
- ----------
- identifier: str
- Unique identifier of the parcellation
- name: str
- Human-readable name of the parcellation
- space_spec: dict
- Specification of the space (use @id or name fields)
- parcellation_spec: str
- Specification of the parcellation (use @id or name fields)
- indices: dict
- Dictionary of indices for the brain regions.
- Keys are exact region names.
- Per region name, a list of dictionaries with fields "volume" and "label" is expected,
- where "volume" points to the index of the Volume object where this region is mapped,
- and optional "label" is the voxel label for that region.
- For continuous / probability maps, the "label" can be null or omitted.
- For single-volume labelled maps, the "volume" can be null or omitted.
- volumes: list[Volume]
- parcellation volumes
- shortname: str, optional
- Shortform of human-readable name
- description: str, optional
- Textual description of the parcellation
- modality: str, default: None
- Specification of the modality used for creating the parcellation
- publications: list
- List of associated publications, each a dictionary with "doi" and/or "citation" fields
- datasets : list
- datasets associated with this concept
- """
- concept.AtlasConcept.__init__(
- self,
- identifier=identifier,
- name=name,
- species=None, # inherits species from space
- shortname=shortname,
- description=description,
- publications=publications,
- datasets=datasets,
- modality=modality,
- prerelease=prerelease,
- )
- self._space_spec = space_spec
- self._parcellation_spec = parcellation_spec
- # Since the volumes might include 4D arrays, where the actual
- # volume index points to a z coordinate, we create subvolume
- # indexers from the given volume provider if 'z' is specified.
- self._indices: Dict[str, List[MapIndex]] = {}
- self.volumes: List[_volume.Volume] = []
- remap_volumes = {}
- # TODO: This assumes knowledge of the preconfigruation specs wrt. z.
- # z to subvolume conversion should probably go to the factory.
- for regionname, indexlist in indices.items():
- k = clear_name(regionname)
- self._indices[k] = []
- for index in indexlist:
- vol = index.get('volume', 0)
- assert vol in range(len(volumes))
- z = index.get('z')
- if (vol, z) not in remap_volumes:
- if z is None:
- self.volumes.append(volumes[vol])
- else:
- self.volumes.append(_volume.Subvolume(volumes[vol], z))
- remap_volumes[vol, z] = len(self.volumes) - 1
- self._indices[k].append(
- MapIndex(volume=remap_volumes[vol, z], label=index.get('label'), fragment=index.get('fragment'))
- )
- # make sure the indices are unique - each map/label pair should appear at most once
- all_indices = sum(self._indices.values(), [])
- seen = set()
- duplicates = {x for x in all_indices if x in seen or seen.add(x)}
- self._nonunique_indices = duplicates
- self._affine_cached = None
- self._compressed_cached: Dict[tuple, "Map"] = {}
- @property
- def key(self):
- _id = self.id
- return create_key(_id[len("siibra-map-v0.0.1"):])
- @property
- def species(self) -> Species:
- # lazy implementation
- if self._species_cached is None:
- self._species_cached = self.space.species
- return self.space._species_cached
- def get_index(self, region: Union[str, "Region"]):
- """
- Returns the unique index corresponding to the specified region.
- Tip
- ----
- Use find_indices() method for a less strict search returning all matches.
- Parameters
- ----------
- region: str or Region
- Returns
- -------
- MapIndex
- Raises
- ------
- NonUniqueIndexError
- If not unique or not defined in this parcellation map.
- """
- matches = self.find_indices(region)
- if len(matches) > 1:
- # if there is an exact match, we still use it. If not, we cannot proceed.
- regionname = region.name if isinstance(region, _region.Region) \
- else region
- for index, matched_name in matches.items():
- if matched_name == regionname:
- return index
- raise exceptions.NonUniqueIndexError(
- f"The specification '{region}' matches multiple mapped "
- f"structures in {str(self)}: {list(matches.values())}"
- )
- elif len(matches) == 0:
- raise exceptions.NonUniqueIndexError(
- f"The specification '{region}' does not match to any structure mapped in {self}"
- )
- else:
- return next(iter(matches))
- def find_indices(self, region: Union[str, "Region"]):
- """
- Returns the volume/label indices in this map which match the given
- region specification.
- Parameters
- ----------
- region: str or Region
- Returns
- -------
- dict
- - keys: MapIndex
- - values: region name
- """
- if region in self._indices:
- return {
- idx: region
- for idx in self._indices[region]
- }
- regionname = region.name if isinstance(region, _region.Region) else region
- matched_region_names = set(_.name for _ in (self.parcellation.find(regionname)))
- matches = matched_region_names & self._indices.keys()
- if len(matches) == 0:
- logger.warning(f"Region {regionname} not defined in {self}")
- return {
- idx: regionname
- for regionname in matches
- for idx in self._indices[regionname]
- }
- def get_region(self, label: int = None, volume: int = 0, index: MapIndex = None):
- """
- Returns the region mapped by the given index, if any.
- Tip
- ----
- Use get_index() or find_indices() methods to obtain the MapIndex.
- Parameters
- ----------
- label: int, default: None
- volume: int, default: 0
- index: MapIndex, default: None
- Returns
- -------
- Region
- A region object defined in the parcellation map.
- """
- if isinstance(label, MapIndex) and index is None:
- raise TypeError("Specify MapIndex with 'index' keyword.")
- if index is None:
- index = MapIndex(volume, label)
- matches = [
- regionname
- for regionname, indexlist in self._indices.items()
- if index in indexlist
- ]
- if len(matches) == 0:
- logger.warning(f"Index {index} not defined in {self}")
- return None
- elif len(matches) == 1:
- return self.parcellation.get_region(matches[0])
- else:
- # this should not happen, already tested in constructor
- raise RuntimeError(f"Index {index} is not unique in {self}")
- @property
- def space(self):
- for key in ["@id", "name"]:
- if key in self._space_spec:
- return space.Space.get_instance(self._space_spec[key])
- return space.Space(None, "Unspecified space", species=Species.UNSPECIFIED_SPECIES)
- @property
- def parcellation(self):
- for key in ["@id", "name"]:
- if key in self._parcellation_spec:
- return parcellation.Parcellation.get_instance(self._parcellation_spec[key])
- logger.warning(
- f"Cannot determine parcellation of {self.__class__.__name__} "
- f"{self.name} from {self._parcellation_spec}"
- )
- return None
- @property
- def labels(self):
- """
- The set of all label indices defined in this map, including "None" if
- not defined for one or more regions.
- """
- return {d.label for v in self._indices.values() for d in v}
- @property
- def has_unique_labels(self) -> bool:
- """
- True if every mapped region carries a distinct label across all volumes and
- fragments. Surface and fragmented volumetric maps are commonly labelled per
- hemisphere, so the same label may denote two different regions.
- """
- labels = [ix.label for ixs in self._indices.values() for ix in ixs]
- return None not in labels and len(labels) == len(set(labels))
- @property
- def maptype(self) -> MapType:
- if all(isinstance(_, int) for _ in self.labels):
- return MapType.LABELLED
- elif self.labels == {None}:
- return MapType.STATISTICAL
- else:
- raise RuntimeError(
- f"Inconsistent label indices encountered in {self}"
- )
- def __len__(self):
- return len(self.volumes)
- @property
- def regions(self):
- return list(self._indices)
- def get_volume(
- self,
- region: Union[str, "Region"] = None,
- *,
- index: MapIndex = None,
- **kwargs,
- ) -> Union[_volume.Volume, _volume.FilteredVolume, _volume.Subvolume]:
- try:
- length = len([arg for arg in [region, index] if arg is not None])
- assert length == 1
- except AssertionError:
- if length > 1:
- raise exceptions.ExcessiveArgumentException(
- "One and only one of region or index can be defined for `get_volume`."
- )
- mapindex = None
- if region is not None:
- try:
- assert isinstance(region, (str, _region.Region))
- except AssertionError:
- raise TypeError(f"Please provide a region name or region instance, not a {type(region)}")
- mapindex = self.get_index(region)
- if index is not None:
- assert isinstance(index, MapIndex)
- mapindex = index
- if mapindex is None:
- if len(self) == 1:
- mapindex = MapIndex(volume=0, label=None)
- elif len(self) > 1:
- assert self.maptype == MapType.LABELLED, f"Cannot merge multiple volumes of map type {self.maptype}. Please specify a region or index."
- logger.info(
- "Map provides multiple volumes and no region specification is"
- " provided. Reducing them to a single volume resampled to space template."
- )
- labels = list(range(1, len(self.volumes) + 1)) if self.labels == {1} else None
- merged_volume = _volume.ReducedVolume(self.volumes, labels)
- return merged_volume
- else:
- raise exceptions.NoVolumeFound("Map provides no volumes.")
- kwargs_fragment = kwargs.pop("fragment", None)
- if kwargs_fragment is not None:
- if (mapindex.fragment is not None) and (kwargs_fragment != mapindex.fragment):
- raise exceptions.ConflictingArgumentException(
- f"Conflicting specifications for fetching volume fragment{f' for region {region}'}: "
- f"supplied: {kwargs_fragment}, preconfigured: {mapindex.fragment}"
- )
- if mapindex.volume is None:
- mapindex.volume = 0
- if mapindex.volume >= len(self.volumes):
- raise IndexError(
- f"{self} provides {len(self)} mapped volumes, but #{mapindex.volume} was requested."
- )
- if mapindex.label is None and mapindex.fragment is None:
- return self.volumes[mapindex.volume]
- return _volume.FilteredVolume(
- parent_volume=self.volumes[mapindex.volume],
- label=mapindex.label,
- fragment=kwargs_fragment or mapindex.fragment,
- )
- def fetch(
- self,
- region: Union[str, "Region"] = None,
- *,
- index: MapIndex = None,
- **fetch_kwargs
- ):
- """
- Fetches one particular volume of this parcellation map.
- If there's only one volume, this is the default, otherwise further
- specification is requested:
- - the volume index,
- - the MapIndex (which results in a regional map being returned)
- You might also consider fetch_iter() to iterate the volumes, or
- compress() to produce a single-volume parcellation map.
- Parameters
- ----------
- region: str, Region
- Specification of a region name, resulting in a regional map
- (mask or statistical map) to be returned.
- index: MapIndex
- Explicit specification of the map index, typically resulting
- in a regional map (mask or statistical map) to be returned.
- Note that supplying 'region' will result in retrieving the map index of that region
- automatically.
- **fetch_kwargs
- - resolution_mm: resolution in millimeters as float or a tuple of floats
- - format: the format of the volume, like "mesh" or "nii"
- - voi: a BoundingBox of interest
- Note
- ----
- Not all keyword arguments are supported for volume formats. Format
- is restricted by available formats (check formats property).
- Returns
- -------
- An image or mesh
- """
- vol = self.get_volume(region=region, index=index, **fetch_kwargs)
- return vol.fetch(**fetch_kwargs)
- def fetch_iter(self, **kwargs):
- """
- Returns an iterator to fetch all mapped volumes sequentially.
- All arguments are passed on to function Map.fetch(). By default, it
- will go through all fragments as well.
- """
- fragments = {kwargs.pop('fragment', None)} or self.fragments or {None}
- return (
- self.fetch(
- index=MapIndex(volume=i, label=None, fragment=frag), **kwargs
- )
- for frag in fragments
- for i in range(len(self))
- )
- @property
- def provides_image(self):
- return any(v.provides_image for v in self.volumes)
- @property
- def fragments(self):
- return sorted({
- index.fragment
- for indices in self._indices.values()
- for index in indices
- if index.fragment is not None
- })
- @property
- def provides_mesh(self):
- return any(v.provides_mesh for v in self.volumes)
- @property
- def formats(self):
- return {f for v in self.volumes for f in v.formats}
- @property
- def is_labelled(self):
- return self.maptype == MapType.LABELLED
- @property
- def affine(self):
- if self._affine_cached is None:
- # we compute the affine from a volumetric volume provider
- for fmt in _volume.Volume.SUPPORTED_FORMATS:
- if fmt not in _volume.Volume.MESH_FORMATS:
- if fmt not in self.formats:
- continue
- try:
- self._affine_cached = self.fetch(index=MapIndex(volume=0), format=fmt).affine
- break
- except Exception:
- logger.debug("Caught exceptions:\n", exc_info=1)
- continue
- else:
- raise RuntimeError(f"No volumetric provider in {self} to derive the affine matrix.")
- if not isinstance(self._affine_cached, np.ndarray):
- logger.error("invalid affine:", self._affine_cached)
- return self._affine_cached
- def __iter__(self):
- return self.fetch_iter()
- def compress(self, **kwargs) -> "Map":
- """
- Convert this map into an equivalent map whose labels are unique across the
- whole image or surface, re-labelling regions sequentially from 1.
- Volumetric maps are merged into a single labelled volume on the grid of the
- space template. Surface maps keep their fragments, since a vertex belongs to
- exactly one of them, and are relabelled so that a label identifies one region
- rather than one region per hemisphere.
- The compressed image is built and kept as a memory-mapped array on disk, so
- neither building nor using it holds the full volume in RAM. Results are also
- cached per instance, keyed by the fetch arguments.
- Note
- ----
- Labels that no region claims are dropped to background. Surface maps
- sometimes carry such labels for technical reasons (e.g. a brainstem label
- so the map loads in freesurfer) and they have no name to report.
- Parameters
- ----------
- **kwargs
- Fetch arguments applied both to the space template, which defines the
- output grid, and to the mapped volumes, so that sources are read at the
- same resolution and resampling is usually unnecessary. `variant` is
- passed to the template only.
- Returns
- -------
- parcellationmap.Map
- Raises
- ------
- ValueError
- If this map is not labelled.
- RuntimeError
- If there is nothing to merge.
- """
- if not self.is_labelled:
- raise ValueError(f"Compression is not possible for {self.maptype} maps.")
- if len(self.volumes) == 1 and (not self.fragments or self.has_unique_labels):
- raise RuntimeError(
- "The map cannot be compressed: it is already a single, uniquely labelled volume."
- )
- key = tuple(sorted(kwargs.items()))
- try:
- hash(key)
- except TypeError: # an unhashable fetch argument, e.g. target_affine
- logger.debug(f"Cannot cache compression of {self} for {kwargs}.")
- key = None
- if key is not None and key in self._compressed_cached:
- return self._compressed_cached[key]
- entries = sorted(
- (index.volume, index.fragment or "", index.label, regionname)
- for regionname, indices in self._indices.items()
- for index in indices
- )
- relabelling_plan = [
- (MapIndex(volume=vol, fragment=frag or None, label=label), regionname, newlabel)
- for newlabel, (vol, frag, label, regionname) in enumerate(entries, start=1)
- ]
- # everything that shapes the result, so a changed configuration or changed
- # fetch arguments never reuse a stale artifact
- signature = json.dumps(
- {
- "map": self.id,
- "space": self.space.id,
- "kwargs": {k: str(v) for k, v in sorted(kwargs.items())},
- "indices": [
- [index.volume, index.fragment, index.label, regionname]
- for index, regionname, _ in relabelling_plan
- ],
- },
- sort_keys=True, # ensure_ascii=True by default: CACHE encodes as ascii
- )
- if self.provides_image:
- spec = self._compress_image_map(relabelling_plan, signature, **kwargs)
- elif self.provides_mesh:
- if kwargs:
- logger.info(f"Fetch arguments {list(kwargs)} are ignored when compressing a surface map.")
- spec = self._compress_surface_map(relabelling_plan, signature)
- else:
- raise NotImplementedError(f"{self} provides neither image nor mesh data to compress.")
- compressed = Map(
- identifier=f"{create_key(self.name)}_compressed",
- name=f"{self.name} compressed",
- space_spec=self._space_spec,
- parcellation_spec=self._parcellation_spec,
- indices=spec.indices,
- volumes=spec.volumes,
- )
- if key is not None:
- self._compressed_cached[key] = compressed
- return compressed
- def _compress_image_map(
- self, plan: List[Tuple[MapIndex, str, int]], signature: str, **kwargs
- ) -> "_CompressedMapSpec":
- """
- Merge the volumes and fragments of a volumetric map into a single labelled
- volume on the template grid. See `compress()`.
- Source volumes are streamed one at a time into a memory-mapped output array,
- so peak memory is one source volume rather than the whole map. Where regions
- overlap, the later entry of the relabelling plan wins; the number of
- contested voxels is reported.
- """
- cachefile = CACHE.build_filename(signature, suffix=".npy")
- metafile = f"{cachefile}.json"
- if path.isfile(cachefile) and path.isfile(metafile):
- try:
- with open(metafile) as f:
- meta = json.load(f)
- data = np.lib.format.open_memmap(cachefile, mode="r")
- logger.debug(f"Reusing the compressed {self} from {cachefile}")
- return _CompressedMapSpec(
- volumes=[_volume.from_array(
- data, np.array(meta["affine"]), self.space.id,
- name=self.name + " compressed", cache=False,
- )],
- indices=meta["indices"],
- )
- except (ValueError, OSError, KeyError):
- logger.debug(f"Discarding unreadable compression cache {cachefile}")
- # only the grid of the template is needed - never load its data, which for
- # large templates (e.g. BigBrain) dominates both time and memory
- variant = kwargs.pop("variant", None)
- template_img = self.space.get_template(variant=variant).fetch(**kwargs)
- shape, affine = tuple(template_img.shape[:3]), template_img.affine
- dtype = np.min_scalar_type(len(plan)) # sized by region count, not by the template
- nbytes = int(np.prod(shape)) * np.dtype(dtype).itemsize
- gib = nbytes / 1024**3
- logger.info(
- f"Compressing {self} into a {gib:.2f} GiB labelled volume "
- f"(shape {shape}, {np.dtype(dtype).name}) from {len(self.volumes)} volume(s)."
- )
- units = [(unit, list(entries)) for unit, entries in groupby(
- plan, key=lambda entry: (entry[0].volume, entry[0].fragment)
- )]
- tempfile = f"{cachefile}_temp"
- result = np.lib.format.open_memmap(tempfile, mode="w+", dtype=dtype, shape=shape)
- region_indices = defaultdict(list)
- contested, unmapped = 0, []
- try:
- with provider.SubvolumeProvider.UseCaching():
- for (volume, fragment), entries in siibra_tqdm(
- units, total=len(units), unit=" maps",
- desc=f"Compressing {len(self.volumes)} volume(s) and "
- f"{len(self.fragments) or 1} fragment(s) of {self.name}",
- disable=len(units) == 1,
- ):
- img = self.fetch(index=MapIndex(volume=volume, fragment=fragment), **kwargs)
- if tuple(img.shape[:3]) == shape and np.allclose(img.affine, affine):
- img_data = np.asanyarray(img.dataobj)
- else:
- logger.debug(f"Compression requires resampling volume {volume} (nearest)")
- img_data = np.asanyarray(resample_img_to_img(img, template_img).dataobj)
- observed = set(np.unique(img_data)) - {0}
- for index, regionname, newlabel in entries:
- update_voxels = img_data == index.label
- if not update_voxels.any():
- unmapped.append(regionname)
- contested += int(np.count_nonzero(result[update_voxels]))
- result[update_voxels] = newlabel
- region_indices[regionname].append({"volume": 0, "label": newlabel})
- observed.discard(index.label)
- if observed:
- logger.warning(
- f"Labels {sorted(observed)} are observed in volume {volume} "
- f"(fragment {fragment}) of {self}, but no region is defined for them."
- )
- del img_data
- result.flush()
- finally:
- del result # close the memmap before renaming, required on Windows
- rename(tempfile, cachefile)
- with open(metafile, "w") as f:
- json.dump({"affine": affine.tolist(), "indices": region_indices}, f)
- if contested:
- logger.info(
- f"{contested} voxel(s) are mapped by more than one region in {self}; "
- "the last entry of the relabelling order was kept for each."
- )
- if unmapped:
- logger.warning(f"{len(unmapped)} region(s) have no voxels after compression:\n{unmapped}")
- return _CompressedMapSpec(
- volumes=[_volume.from_array(
- np.lib.format.open_memmap(cachefile, mode="r"), affine, self.space.id,
- name=self.name + " compressed", cache=False,
- )],
- indices=region_indices,
- )
- def _compress_surface_map(
- self, plan: List[Tuple[MapIndex, str, int]], signature: str
- ) -> "_CompressedMapSpec":
- """
- Relabel the fragments of a surface map so that every region has a globally
- unique label. Fragments are preserved, since a vertex belongs to exactly one
- of them. See `compress()`.
- The label arrays are one per-vertex value per fragment, well under a megabyte
- even for the densest fsaverage mesh, so they are held in memory rather than
- memory-mapped, and written as GIFTI label files.
- Results are cached per fragment as GIFTI label files; a cache hit skips the
- relabelling and therefore also its warnings about unnamed labels and empty
- regions.
- """
- from nibabel import gifti
- from os import replace
- if len(self.volumes) > 1:
- raise NotImplementedError(
- f"{self} provides {len(self.volumes)} surface volumes; compression expects one."
- )
- prov = self.volumes[0]._providers["gii-label"]
- filemap, region_indices = {}, defaultdict(list)
- units = [(unit, list(entries)) for unit, entries in groupby(
- plan, key=lambda entry: (entry[0].volume, entry[0].fragment)
- )]
- for (_, fragment), entries in siibra_tqdm(
- units, total=len(units), unit=" fragments",
- desc=f"Relabelling {len(units)} surface fragment(s) of {self.name}",
- ):
- filename = CACHE.build_filename(f"{signature}-{fragment}", suffix=".label.gii")
- if not path.isfile(filename):
- # read from the provider: Volume.fetch() would also pull the template mesh
- data = prov.fetch(fragment=fragment)["labels"]
- # GIFTI data arrays support uint8, int32 and float32 only
- relabelled = np.zeros_like(data, dtype="int32")
- observed = set(np.unique(data)) - {0}
- unmapped = []
- for index, regionname, newlabel in entries:
- selection = data == index.label
- if not selection.any():
- unmapped.append(regionname)
- relabelled[selection] = newlabel
- observed.discard(index.label)
- if observed:
- logger.warning(
- f"Labels {sorted(observed)} are observed in fragment '{fragment}' of "
- f"{self}, but no region is defined for them."
- )
- if unmapped:
- logger.warning(
- f"{len(unmapped)} region(s) have no vertices in fragment "
- f"'{fragment}' of {self}:\n{unmapped}"
- )
- tempfile = CACHE.build_filename(f"{signature}-{fragment}-temp", suffix=".label.gii")
- gifti.GiftiImage(darrays=[
- gifti.GiftiDataArray(relabelled, intent="NIFTI_INTENT_LABEL")
- ]).to_filename(tempfile)
- replace(tempfile, filename)
- for index, regionname, newlabel in entries:
- region_indices[regionname].append(
- {"volume": 0, "fragment": fragment, "label": newlabel}
- )
- filemap[fragment] = filename
- return _CompressedMapSpec(
- volumes=[_volume.from_file(
- filemap, space=self.space.id, name=self.name + " compressed", format="gii-label",
- )],
- indices=region_indices,
- )
- def compute_centroids(self, split_components: bool = True, **fetch_kwargs) -> Dict[str, pointcloud.PointCloud]:
- """
- Compute a dictionary of all regions in this map to their centroids.
- By default, the regional masks will be split to connected components
- and each point in the PointCloud corresponds to a region component.
- Parameters
- ----------
- split_components: bool, default: True
- If True, finds the spatial properties for each connected component
- found by skimage.measure.label.
- Returns
- -------
- Dict[str, point.Point]
- Region names as keys and computed centroids as items.
- """
- assert self.provides_image, "Centroid computation for meshes is not supported yet."
- centroids = dict()
- for regionname, indexlist in siibra_tqdm(
- self._indices.items(), unit="regions", desc="Computing centroids"
- ):
- assert regionname not in centroids
- # get the mask of the region in this map
- with QUIET:
- if len(indexlist) >= 1:
- merged_volume = _volume.merge(
- [
- _volume.from_nifti(
- self.fetch(index=index, **fetch_kwargs),
- self.space,
- f"{self.name} - {index}"
- )
- for index in indexlist
- ],
- labels=[1] * len(indexlist)
- )
- mapimg = merged_volume.fetch()
- elif len(indexlist) == 1:
- index = indexlist[0]
- mapimg = self.fetch(index=index, **fetch_kwargs) # returns a mask of the region
- props = _volume.ComponentSpatialProperties.compute_from_image(
- img=mapimg,
- space=self.space,
- split_components=split_components,
- )
- try:
- centroids[regionname] = pointcloud.from_points([c.centroid for c in props])
- except exceptions.EmptyPointCloudError:
- centroids[regionname] = None
- return centroids
- def get_resampled_template(self, **fetch_kwargs) -> _volume.Volume:
- """
- Resample the reference space template to fetched map image. Uses
- nilearn.image.resample_to_img to resample the template.
- Parameters
- ----------
- **fetch_kwargs: takes the arguments of Map.fetch()
- Returns
- -------
- Volume
- """
- from nilearn.image import resample_to_img
- source_template = self.space.get_template().fetch()
- map_image = self.fetch(**fetch_kwargs)
- img = resample_to_img(source_template, map_image, interpolation='continuous')
- return _volume.from_array(
- data=img.dataobj,
- affine=img.affine,
- space=self.space,
- name=f"{source_template} resampled to coordinate system of {self}"
- )
- def colorize(
- self,
- values: Union[dict, "pd.Series", "pd.DataFrame"],
- background_label: Union[int, float] = 0,
- **masker_kwargs
- ):
- """Colorize the map with the provided regional values.
- Parameters
- ----------
- values : dict
- Dictionary mapping regions to values
- Return
- ------
- Nifti1Image
- """
- if not self.is_labelled:
- raise NotImplementedError("Since statistical maps can overlap, this is not yet implemented.")
- if isinstance(values, dict):
- resolved = {}
- for spec, value in values.items():
- matched = set(self.find_indices(spec).values()) # {MapIndex: regionname}
- if not matched:
- logger.warning(f"'{spec}' is not mapped in {self} - skipped in colorization.")
- continue
- for regionname in matched:
- resolved[regionname] = value
- if not resolved:
- raise ValueError(f"None of the {len(values)} provided keys are mapped in {self}.")
- values = pd.Series({r: resolved.get(r, background_label) for r in self.regions})
- masker_kwargs.setdefault("background_label", background_label)
- masker = self.as_nilearn_masker(**masker_kwargs)
- masker.fit()
- # ensure the order of columns follow the bids table used for masker
- values = values[masker.lut["name"]]
- return masker.inverse_transform(values)
- def get_colormap(self, region_specs: Iterable = None, *, fill_uncolored: bool = False):
- """
- Generate a matplotlib colormap from known rgb values of label indices.
- Parameters
- ----------
- region_specs: iterable(regions), optional
- Optional parameter to only color the desired regions.
- fill_uncolored: bool , optional
- If a region has no preconfigured color, a color will be randomly (reproducible) created.
- Returns
- -------
- ListedColormap
- """
- try:
- from matplotlib.colors import ListedColormap
- except ImportError as e:
- logger.error(
- "matplotlib not available. Please install matplotlib to create a matplotlib colormap."
- )
- raise e
- if fill_uncolored:
- seed = len(self.regions)
- np.random.seed(seed)
- logger.info(f"Random colors are allowed for regions without preconfgirued colors. Random seed: {seed}.")
- colors = {}
- if region_specs is not None:
- include_region_names = {
- self.parcellation.get_region(region_spec).name for region_spec in region_specs
- }
- else:
- include_region_names = None
- use_volindx = False
- if len(self.volumes) > 1 and self.labels == {1}:
- use_volindx = True
- logger.info("Using sequential relabling determined by the order of volumes.")
- no_predefined_color = []
- for regionname, indices in self._indices.items():
- for index in indices:
- if index.label is None:
- continue
- if (include_region_names is not None) and (regionname not in include_region_names):
- continue
- else:
- region = self.get_region(index=index)
- if region.rgb is not None:
- if use_volindx:
- colors[index.volume + 1] = region.rgb
- else:
- colors[index.label] = region.rgb
- elif fill_uncolored:
- random_clr = [np.random.randint(0, 255) for r in range(3)]
- while random_clr in list(colors.values()):
- random_clr = [np.random.randint(0, 255) for r in range(3)]
- colors[index.label] = random_clr
- else:
- no_predefined_color.append(region.name)
- if len(colors) == 0:
- raise exceptions.NoPredifinedColormapException(
- f"There is no predefined/preconfigured colormap for '{self}'."
- "Set `fill_uncolored=True` to get a reproducible colormap."
- )
- if no_predefined_color:
- logger.info(
- f"No preconfigured color found for the following regions."
- "Use `fill_uncolored=True` to display with a non-background color.\n"
- f"{no_predefined_color}"
- )
- max_label_index = max(colors.keys())
- palette = np.array(
- [
- list(colors[i]) + [1] if i in colors else [0, 0, 0, 0]
- for i in range(max_label_index + 1)
- ]
- ) / [255, 255, 255, 1]
- return ListedColormap(palette)
- def sample_locations(self, regionspec, numpoints: int):
- """ Sample 3D locations inside a given region.
- The probability distribution is approximated from the region mask based
- on the squared distance transform.
- Parameters
- ----------
- regionspec: Region or str
- Region to be used
- numpoints: int
- Number of samples to draw
- Returns
- -------
- PointCloud
- Sample points in physical coordinates corresponding to this
- parcellationmap
- """
- index = self.get_index(regionspec)
- mask = self.fetch(index=index)
- arr = np.asanyarray(mask.dataobj)
- if arr.dtype.char in np.typecodes['AllInteger']:
- # a binary mask - use distance transform to get sampling weights
- W = distance_transform_edt(np.asanyarray(mask.dataobj))**2
- else:
- # a statistical map - interpret directly as weights
- W = arr
- p = (W / W.sum()).ravel()
- XYZ_ = np.array(
- np.unravel_index(np.random.choice(len(p), numpoints, p=p), W.shape)
- ).T
- XYZ = np.dot(mask.affine, np.c_[XYZ_, np.ones(numpoints)].T)[:3, :].T
- return pointcloud.PointCloud(XYZ, space=self.space)
- def to_sparse(self):
- """
- Creates a SparseMap object from this parcellation map object.
- Returns
- -------
- SparseMap
- """
- from .sparsemap import SparseMap
- indices = {
- regionname: [
- {'volume': idx.volume, 'label': idx.label, 'fragment': idx.fragment}
- for idx in indexlist
- ]
- for regionname, indexlist in self._indices.items()
- }
- return SparseMap(
- identifier=self.id,
- name=self.name,
- space_spec={'@id': self.space.id},
- parcellation_spec={'@id': self.parcellation.id},
- indices=indices,
- volumes=self.volumes,
- shortname=self.shortname,
- description=self.description,
- modality=self.modality,
- publications=self.publications,
- datasets=self.datasets
- )
- def _read_voxel(
- self,
- x: Union[int, np.ndarray, List],
- y: Union[int, np.ndarray, List],
- z: Union[int, np.ndarray, List]
- ):
- def _read_voxels_from_volume(xyz, volimg):
- xyz = np.stack(xyz, axis=1)
- valid_points_mask = np.all([(0 <= di) & (di < vol_size) for vol_size, di in zip(volimg.shape, xyz.T)], axis=0)
- x, y, z = xyz[valid_points_mask].T
- valid_points_indices, *_ = np.where(valid_points_mask)
- valid_data_points = np.asanyarray(volimg.dataobj)[x, y, z]
- return zip(valid_points_indices, valid_data_points)
- # integers are just single-element arrays, cast to avoid an extra code branch for integers
- x, y, z = [np.array(di) for di in (x, y, z)]
- fragments = self.fragments or {None}
- return [
- (pointindex, volume, fragment, data_point)
- for fragment in fragments
- for volume, volimg in enumerate(self.fetch_iter(fragment=fragment))
- # transformations or user input might produce points outside the volume, filter these out.
- for (pointindex, data_point) in _read_voxels_from_volume((x, y, z), volimg)
- ]
- def _assign(
- self,
- item: location.Location,
- minsize_voxel=1,
- lower_threshold=0.0,
- **kwargs
- ) -> List[Union[MapAssignment, AssignImageResult]]:
- """
- For internal use only. Returns a dataclass, which provides better static type checking.
- """
- if isinstance(item, point.Point):
- return self._assign_points(
- pointcloud.PointCloud([item], item.space, sigma_mm=item.sigma),
- lower_threshold
- )
- if isinstance(item, pointcloud.PointCloud):
- return self._assign_points(item, lower_threshold)
- if isinstance(item, _volume.Volume):
- if isinstance(item, _volume.TimeSeriesVolume):
- return self._assign_timeseries_volume(
- queryvolume=item,
- lower_threshold=lower_threshold,
- minsize_voxel=minsize_voxel,
- **kwargs
- )
- else:
- return self._assign_volume(
- queryvolume=item,
- lower_threshold=lower_threshold,
- minsize_voxel=minsize_voxel,
- **kwargs
- )
- raise RuntimeError(
- f"Items of type {item.__class__.__name__} cannot be used for region assignment."
- )
- def assign(
- self,
- item: location.Location,
- minsize_voxel=1,
- lower_threshold=0.0,
- **kwargs
- ) -> "pd.DataFrame":
- """Assign an input Location to brain regions.
- The input is assumed to be defined in the same coordinate space
- as this parcellation map.
- Parameters
- ----------
- item: Location
- A spatial object defined in the same physical reference space as
- this parcellation map, which could be a point, set of points, or
- image volume. If it is an image, it will be resampled to the same voxel
- space if its affine transformation differs from that of the
- parcellation map. Resampling will use linear interpolation for float
- image types, otherwise nearest neighbor.
- minsize_voxel: int, default: 1
- Minimum voxel size of image components to be taken into account.
- lower_threshold: float, default: 0
- Lower threshold on values in the statistical map. Values smaller
- than this threshold will be excluded from the assignment computation.
- Returns
- -------
- pandas.DataFrame
- A table of associated regions and their scores per component found
- in the input image, or per coordinate provided. The scores are:
- - Value: Maximum value of the voxels in the map covered by an
- input coordinate or input image signal component.
- - Pearson correlation coefficient between the brain region map
- and an input image signal component (NaN for exact coordinates)
- - Contains: Percentage of the brain region map contained in an
- input image signal component, measured from their binarized
- masks as the ratio between the volume of their intersection
- and the volume of the brain region (NaN for exact coordinates)
- - Contained: Percentage of an input image signal component
- contained in the brain region map, measured from their binary
- masks as the ratio between the volume of their intersection and
- the volume of the input image signal component (NaN for exact
- coordinates)
- """
- assignments = self._assign(item, minsize_voxel, lower_threshold, **kwargs)
- # format assignments as pandas dataframe
- columns = [
- "input structure",
- "time",
- "centroid",
- "volume",
- "fragment",
- "region",
- "correlation",
- "intersection over union",
- "map value",
- "map weighted mean",
- "map containedness",
- "input weighted mean",
- "input containedness"
- ]
- if len(assignments) == 0:
- return pd.DataFrame(columns=columns).dropna(axis='columns', how='all')
- # determine the unique set of observed indices in order to do region lookups
- # only once for each map index occurring in the point list
- labelled = self.is_labelled # avoid calling this in a loop
- observed_indices = { # unique set of observed map indices. NOTE: len(observed_indices) << len(assignments)
- (
- a.volume,
- a.fragment,
- a.map_value if labelled else None
- )
- for a in assignments
- }
- region_lut = { # lookup table of observed region objects
- (v, f, l): self.get_region(
- index=MapIndex(
- volume=int(v),
- label=l if l is None else int(l),
- fragment=f
- )
- )
- for v, f, l in observed_indices
- }
- dataframe_list = []
- for a in assignments:
- item_to_append = {
- "input structure": a.input_structure,
- "time": a.time,
- "centroid": a.centroid,
- "volume": a.volume,
- "fragment": a.fragment,
- "region": region_lut[
- a.volume,
- a.fragment,
- a.map_value if labelled else None
- ],
- }
- # because AssignImageResult is a subclass of Assignment
- # need to check for isinstance AssignImageResult first
- if isinstance(a, AssignImageResult):
- item_to_append = {
- **item_to_append,
- **{
- "correlation": a.correlation,
- "intersection over union": a.intersection_over_union,
- "map value": a.map_value,
- "map weighted mean": a.weighted_mean_of_first,
- "map containedness": a.intersection_over_first,
- "input weighted mean": a.weighted_mean_of_second,
- "input containedness": a.intersection_over_second,
- }
- }
- elif isinstance(a, MapAssignment):
- item_to_append = {
- **item_to_append,
- **{
- "correlation": None,
- "intersection over union": None,
- "map value": a.map_value,
- "map weighted mean": None,
- "map containedness": None,
- "input weighted mean": None,
- "input containedness": None,
- }
- }
- else:
- raise RuntimeError("assignments must be of type Assignment or AssignImageResult!")
- dataframe_list.append(item_to_append)
- return (
- pd.DataFrame(dataframe_list)
- .convert_dtypes() # convert will guess numeric column types
- .reindex(columns=columns)
- .dropna(axis='columns', how='all')
- )
- def _assign_points(self, points: pointcloud.PointCloud, lower_threshold: float) -> List[MapAssignment]:
- """
- assign a PointCloud to this parcellation map.
- Parameters
- -----------
- lower_threshold: float, default: 0
- Lower threshold on values in the statistical map. Values smaller than
- this threshold will be excluded from the assignment computation.
- """
- assignments = []
- if points.space != self.space:
- logger.info(
- f"Coordinates will be converted from {points.space.name} "
- f"to {self.space.name} space for assignment."
- )
- # convert sigma to voxel coordinates
- scaling = np.array(
- [np.linalg.norm(self.affine[:, i]) for i in range(3)]
- ).mean()
- phys2vox = np.linalg.inv(self.affine)
- # if all points have the same sigma, and lead to a standard deviation
- # below 3 voxels, we are much faster with a multi-coordinate readout.
- if points.has_constant_sigma:
- sigma_vox = points.sigma[0] / scaling
- if sigma_vox < 3:
- pts_warped = points.warp(self.space.id)
- X, Y, Z = (np.dot(phys2vox, pts_warped.homogeneous.T) + 0.5).astype("int")[:3]
- for pointindex, vol, frag, value in self._read_voxel(X, Y, Z):
- if value > lower_threshold:
- position = pts_warped[pointindex].coordinate
- assignments.append(
- MapAssignment(
- input_structure=pointindex,
- centroid=tuple(position),
- volume=vol,
- fragment=frag,
- map_value=value,
- time=None,
- )
- )
- return assignments
- # if we get here, we need to handle each point independently.
- # This is much slower but more precise in dealing with the uncertainties
- # of the coordinates.
- for pointindex, pt in siibra_tqdm(
- enumerate(points.warp(self.space.id)),
- total=len(points), desc="Assigning points",
- ):
- sigma_vox = pt.sigma / scaling
- if sigma_vox < 3:
- # voxel-precise - just read out the value in the maps
- N = len(self)
- logger.debug(f"Assigning coordinate {tuple(pt)} to {N} maps")
- x, y, z = (np.dot(phys2vox, pt.homogeneous) + 0.5).astype("int")[:3]
- values = self._read_voxel(x, y, z)
- for _, vol, frag, value in values:
- if value > lower_threshold:
- assignments.append(
- MapAssignment(
- input_structure=pointindex,
- centroid=tuple(pt),
- volume=vol,
- fragment=frag,
- map_value=value,
- time=None,
- )
- )
- else:
- logger.debug(
- f"Assigning uncertain coordinate {tuple(pt)} to {len(self)} maps."
- )
- kernel = create_gaussian_kernel(sigma_vox, 3)
- r = int(kernel.shape[0] / 2) # effective radius
- assert pt.homogeneous.shape[0] == 1
- xyz_vox = (np.dot(phys2vox, pt.homogeneous.T) + 0.5).astype("int")
- shift = np.identity(4)
- shift[:3, -1] = xyz_vox[:3, 0] - r
- # build niftiimage with the Gaussian blob,
- # then recurse into this method with the image input
- gaussian_kernel = _volume.from_array(
- data=kernel,
- affine=np.dot(self.affine, shift),
- space=self.space,
- name=f"Gaussian kernel of {pt}",
- cache=False,
- )
- for entry in self._assign(
- item=gaussian_kernel,
- lower_threshold=lower_threshold,
- split_components=False
- ):
- entry.input_structure = pointindex
- entry.centroid = tuple(pt)
- assignments.append(entry)
- return assignments
- def _assign_volume(
- self,
- queryvolume: "_volume.Volume",
- lower_threshold: float,
- split_components: bool = True,
- time: int = None,
- **kwargs,
- ) -> List[AssignImageResult]:
- """
- Assign an image volume to this parcellation map.
- Parameters
- -----------
- queryvolume: Volume
- the volume to be compared with maps
- minsize_voxel: int, default: 1
- Minimum voxel size of image components to be taken into account.
- lower_threshold: float, default: 0
- Lower threshold on values in the statistical map. Values smaller than
- this threshold will be excluded from the assignment computation.
- split_components: bool, default: True
- Whether to split the query volume into disjoint components.
- """
- # TODO: split_components is not known to `assign`
- # TODO: `minsize_voxel` is not used here. Consider the implementation of `assign` again.
- if kwargs:
- logger.info(f"The keywords {[k for k in kwargs]} are not passed on during volume assignment.")
- if queryvolume.space != self.space:
- raise ValueError("Assigned volume must be in the same space as the map.")
- if split_components:
- iter_components = lambda arr: connected_components(arr)
- else:
- iter_components = lambda arr: [(0, arr)]
- queryimg = queryvolume.fetch()
- assignments = []
- all_indices = [
- index
- for regionindices in self._indices.values()
- for index in regionindices
- ]
- with QUIET and provider.SubvolumeProvider.UseCaching():
- for index in siibra_tqdm(
- all_indices,
- desc=f"Assigning {queryvolume} to {self}",
- disable=len(all_indices) < 5,
- unit="map",
- leave=False
- ):
- region_map = self.fetch(index=index)
- region_map_arr = np.asanyarray(region_map.dataobj)
- # the shape and affine are checked by `nilearn.image.resample_to_img()`
- # and returns the original data if resampling is not necessary.
- queryimgarr_res = np.asanyarray(
- resample_img_to_img(queryimg, region_map).dataobj
- )
- for compmode, voxelmask in iter_components(queryimgarr_res):
- scores = compare_arrays(
- voxelmask,
- region_map.affine, # after resampling, both should have the same affine
- region_map_arr,
- region_map.affine
- )
- component_position = np.array(np.where(voxelmask)).T.mean(0)
- if scores.intersection_over_union > lower_threshold:
- assignments.append(
- AssignImageResult(
- input_structure=compmode,
- centroid=tuple(component_position.round(2)),
- volume=index.volume,
- fragment=index.fragment,
- map_value=index.label,
- time=time,
- **asdict(scores)
- )
- )
- return assignments
- def _assign_timeseries_volume(
- self,
- queryvolume: "_volume.TimeSeriesVolume",
- lower_threshold: float,
- split_components: bool = True,
- **kwargs
- ) -> List[AssignImageResult]:
- assignments = []
- for v_t in siibra_tqdm(queryvolume, unit='time point'):
- assignments_t = self._assign_volume(
- v_t,
- lower_threshold=lower_threshold,
- split_components=split_components,
- time=v_t.timepoint,
- **kwargs
- )
- assignments.extend(assignments_t)
- return assignments
- def to_BIDS_lookup_table(self) -> pd.DataFrame:
- """
- Generate a BIDS-compatible lookup table for the labelled map.
- The lookup table associates voxel labels with region names and optional
- RGB colors derived from the corresponding parcellation regions.
- If the map consists of multiple fragments, the fragments are first
- compressed into a single labelled image and relabelled to ensure BIDS
- compatibility.
- Parameters
- ----------
- filepath : str, optional
- Path to a ``.tsv`` file where the lookup table should be written.
- If provided, the table is saved in tab-separated format.
- Returns
- -------
- pandas.DataFrame
- A lookup table with the following columns:
- - ``index``: Integer label value in the image.
- - ``name``: Name of the corresponding brain region.
- - ``color``: Hexadecimal RGB color code associated with the region,
- or ``None`` if no color is defined.
- Raises
- ------
- Exception
- If the map contains more than one volume.
- AssertionError
- If ``filepath`` does not end with ``.tsv``.
- Notes
- -----
- BIDS lookup tables require a single labelled volume. Maps distributed
- across multiple fragments are therefore compressed and relabelled before
- generating the table.
- """
- if not self.is_labelled:
- raise NotImplementedError("Currently, there is not LUT standard defined by BIDS for statistical maps.")
- if len(self.volumes) > 1 or not self.has_unique_labels:
- logger.info(
- f"{self} has {len(self.volumes)} volume(s)/{len(self.fragments)} fragment(s); "
- "siibra will compress and reindex it for BIDS compatibility."
- )
- mp = self.compress()
- else:
- mp = self
- def to_record(regionname: str, index: MapIndex) -> List[Dict]:
- rgb = mp.parcellation.get_region(regionname).rgb
- color = "#{:02x}{:02x}{:02x}".format(*rgb) if rgb else None
- return {
- "index": index.label,
- "name": regionname,
- "color": color,
- }
- table = pd.DataFrame(
- [
- to_record(r, indices[0])
- for r, indices in mp._indices.items()
- ]
- )
- if "gii-label" in mp.formats:
- # read from the provider: mp.fetch() would also pull the template mesh
- prov = mp.volumes[0]._providers["gii-label"]
- observed = set()
- for fragment in (mp.fragments or [None]):
- observed |= set(np.unique(prov.fetch(fragment=fragment)["labels"]))
- for xl in sorted(observed - set(table["index"]) - {0}): # 0 is background
- table.loc[len(table)] = {"name": f"{xl} (unnamed)", "index": xl, "color": None}
- if not table["index"].is_unique:
- duplicated = sorted(table.loc[table["index"].duplicated(), "index"])
- raise RuntimeError(
- f"Labels {duplicated} are assigned to more than one region in {mp}. "
- "A BIDS lookup table requires unique indices."
- )
- return table
- def _as_surfaceimage(self, variant: str = None):
- from nilearn.surface import SurfaceImage, PolyData
- if "gii-label" not in self.formats:
- raise ValueError("`SurfaceImage` representation is only possible for 'gii-label' maps.")
- if len(self.volumes) > 1:
- raise ValueError("`SurfaceImage` representation is only possible for maps with single and hemisphere fragemented maps.")
- giilabel_filemap = {}
- for frag in self.fragments:
- loader = self.volumes[0]._providers["gii-label"]._loaders[frag]
- loader._retrieve()
- giilabel_filemap[frag.replace(' hemisphere', "")] = loader.cachefile
- return SurfaceImage(mesh=self.space._as_polymesh(variant=variant), data=PolyData(**giilabel_filemap))
- def as_nilearn_masker(
- self,
- strategy: Literal[
- "mean",
- "median",
- "sum",
- "minimum",
- "maximum",
- "standard_deviation",
- "variance",
- ] = "mean",
- surface_variant: str = None,
- **masker_kwargs,
- ) -> Union["NiftiLabelsMasker", "SurfaceLabelsMasker"]:
- from nilearn import maskers
- try:
- from ..retrieval.cache import jobmemory_path
- masker_kwargs.setdefault("memory", jobmemory_path)
- except ImportError:
- ...
- if not self.is_labelled:
- raise NotImplementedError(
- f"Nilearn maskers for {self.maptype} maps are provided by SparseMap, "
- "which projects the data onto the maps instead of summarizing labelled "
- "regions. Convert this map with `to_sparse()` first."
- )
- mp = self.compress() if (len(self.volumes) > 1 or self.fragments) else self
- if "lut" in masker_kwargs:
- raise ValueError("siibra handles `lut` parameter based on the map.")
- masker_kwargs.setdefault("verbose", 1)
- masker_kwargs.setdefault("strategy", strategy)
- masker_kwargs["lut"] = mp.to_BIDS_lookup_table()
- if self.provides_image:
- masker = maskers.NiftiLabelsMasker(mp.fetch(), **masker_kwargs)
- else:
- masker = maskers.SurfaceLabelsMasker(
- mp._as_surfaceimage(variant=surface_variant),
- **masker_kwargs,
- )
- return masker
- def extract_signals_with_nilearn(
- self,
- volume: _volume.Volume,
- strategy: Literal[
- "mean",
- "median",
- "sum",
- "minimum",
- "maximum",
- "standard_deviation",
- "variance",
- ] = "mean",
- confounds: np.ndarray = None,
- sample_mask: np.ndarray = None,
- surface_variant: str = None,
- **masker_kwargs,
- ) -> pd.DataFrame:
- """
- Extract region-wise signals from a 3D/4D volume using `nilearn`.
- The regions defined in this map are used to summarize the input volume
- with :class:`nilearn.maskers.NiftiLabelsMasker` (labelled volumetric maps),
- :class:`nilearn.maskers.SurfaceLabelsMasker` (labelled surface maps), or
- :class:`nilearn.maskers.NiftiMapsMasker` (statistical maps). Maps with
- several volumes or fragments are compressed into a single labelled map first.
- Parameters
- ----------
- volume: Volume
- Input 3D or 4D volume from which signals should be extracted, typically
- an fMRI image. Both NIfTI and timeseries GIFTI sources are supported.
- strategy: str, default: "mean"
- How voxels or vertices are summarized within each region. Only applies
- to labelled maps; it is ignored for statistical maps, since
- `NiftiMapsMasker` projects the data onto the (overlapping, continuous)
- maps by least squares instead of summarizing discrete regions.
- confounds: array-like, optional
- Confounds to regress out during extraction.
- See `nilearn.maskers.BaseMasker.transform`.
- sample_mask: array-like, optional
- Mask of samples to include when extracting signals.
- See `nilearn.maskers.BaseMasker.transform`.
- surface_variant: str, optional
- Template surface variant to use for surface maps, e.g. "inflated".
- **masker_kwargs
- Passed on to the nilearn masker constructor.
- Returns
- -------
- pandas.DataFrame
- One column per region mapped in this map, one row per sample. The index
- is the time axis of `volume` when it has one and no `sample_mask` was
- given, otherwise a range index.
- Notes
- -----
- Region names are taken from the BIDS lookup table generated by
- `to_BIDS_lookup_table()`. Regions that disappear when the map is resampled
- onto the input volume are reported and filled with zeros; nilearn's
- `keep_masked_labels` does not prevent them from being dropped, and it is
- deprecated since nilearn 0.14.
- """
- masker = self.as_nilearn_masker(
- strategy=strategy if self.is_labelled else None,
- surface_variant=surface_variant,
- **masker_kwargs
- )
- if self.provides_image and volume.provides_image:
- source = volume.fetch()
- elif "gii-label" in self.formats and "gii-timeseries" in volume.formats:
- source = volume._as_surfaceimage(variant=surface_variant)
- else:
- raise ValueError(
- f"Cannot extract signals from {volume} with {self}: no common representation. "
- f"The map provides {sorted(self.formats)}, the input provides {sorted(volume.formats)}."
- )
- # np.asarray normalizes plain and pandas output alike. (set_output(transform="pandas")
- # raises NotImplementedError before nilearn 0.13, and the column names it
- # produces are the ones we assign below anyway.)
- signals = np.atleast_2d(np.asarray(
- masker.fit_transform(source, confounds=confounds, sample_mask=sample_mask)
- ))
- if self.is_labelled:
- # region_names_ maps output column index -> region name. It is available on
- # both Nifti and Surface labels maskers since nilearn 0.10.4.
- # (masker.labels_ cannot be used here: it includes the background label.
- # get_feature_names_out() is equivalent but only exists from nilearn 0.13.)
- extracted = [name for _, name in sorted(masker.region_names_.items())]
- all_regions = masker.lut["name"].tolist()
- else:
- # NiftiMapsMasker names its columns positionally, so column i corresponds
- # to volume i of the array stacked by _stack_maps().
- extracted = all_regions = [
- regionname for regionname, indices
- in sorted(self._indices.items(), key=lambda kv: kv[1][0].volume)
- ]
- if signals.shape[1] != len(extracted):
- raise RuntimeError(
- f"nilearn returned {signals.shape[1]} signals but {len(extracted)} "
- f"regions were expected for {self}."
- )
- result = pd.DataFrame(signals, columns=extracted)
- missing = [r for r in all_regions if r not in set(extracted)]
- if missing:
- logger.info(
- f"{len(missing)} region(s) were removed when resampling {self} to the "
- f"input volume and are filled with zeros:\n{missing}"
- )
- result[missing] = 0
- result = result[all_regions]
- result.columns.name = "region"
- # sample_mask drops samples, so the time axis would no longer align
- time = getattr(volume, "time", None)
- if time is not None and sample_mask is None and len(time) == len(result):
- result.index = pd.Index(time, name="time")
- return result
- def from_volume(
- name: str,
- volume: Union[_volume.Volume, List[_volume.Volume]],
- regionnames: List[str],
- regionlabels: List[int],
- parcellation_spec: Union[str, "parcellation.Parcellation"] = None
- ) -> 'Map':
- """
- Add a custom labelled parcellation map to siibra from a labelled NIfTI file.
- Parameters
- ------------
- name: str
- Human-readable name of the parcellation.
- volume: Volume, or a list of Volumes.
- space_spec: str, Space
- Specification of the reference space (space object, name, keyword, or id - e.g. 'mni152').
- regionnames: list[str]
- List of human-readable names of the mapped regions.
- regionlabels: list[int]
- List of integer labels in the nifti file corresponding to the list of regions.
- parcellation: str or Parcellation. Optional.
- If the related parcellation already defined or preconfigured in siibra.
- """
- # providers and map indices
- providers = []
- volumes = volume if isinstance(volume, list) else [volume]
- map_space = volumes[0].space
- assert all(v.space == map_space for v in volumes), "Volumes have to be in the same space"
- for vol_idx, vol in enumerate(volumes):
- image = vol.fetch()
- arr = np.asanyarray(image.dataobj)
- labels_in_volume = np.unique(arr)[1:].astype('int')
- # populate region indices from given name/label lists
- indices = dict()
- for label, regionname in zip(regionlabels, regionnames):
- if label not in labels_in_volume:
- logger.warning(
- f"Label {label} not mapped in the provided NIfTI volume -> "
- f"region '{regionname} will not be in the map."
- )
- elif label in [v[0]['label'] for v in indices.values() if v[0]['volume'] == vol_idx]:
- logger.warning(f"Label {label} already defined in the same volume; will not map it to '{regionname}'.")
- else:
- assert regionname not in indices, f"'{regionname}' must be unique in `regionnames`."
- indices[regionname] = [{'volume': vol_idx, 'label': label}]
- # check for any remaining labels in the NIfTI volume
- unnamed_labels = list(set(labels_in_volume) - set(regionlabels))
- if unnamed_labels:
- logger.warning(
- f"The following labels appear in the NIfTI volume {vol_idx}, but not in "
- f"the specified regions: {', '.join(str(lb) for lb in unnamed_labels)}. "
- "They will be removed from the nifti volume."
- )
- for label in unnamed_labels:
- arr[arr == label] = 0
- providers.extend(vol._providers.values())
- # parcellation
- if parcellation_spec is None:
- parcellation_spec = name
- try:
- parcobj = parcellation.Parcellation.registry().get(parcellation_spec)
- logger.info(f"Using '{parcellation_spec}', siibra decoded the parcellation as '{parcobj}'")
- except Exception:
- logger.info(
- f"Using '{parcellation_spec}', siibra could not decode the "
- " parcellation. Building a new parcellation."
- )
- # build a new parcellation
- parcobj = parcellation.Parcellation(
- identifier=generate_uuid(','.join(regionnames)),
- name=name,
- species=vol.space.species,
- regions=list(map(_region.Region, regionnames)),
- )
- if parcobj.key not in list(parcellation.Parcellation.registry()):
- parcellation.Parcellation.registry().add(parcobj.key, parcobj)
- for region in siibra_tqdm(
- indices.keys(),
- desc="Checking if provided regions are defined in the parcellation."
- ):
- try:
- _ = parcobj.get_region(region)
- except Exception:
- logger.warning(f"'{region}' is missing in the parcellation.")
- # build the parcellation map object
- parcmap = Map(
- identifier=generate_uuid(name),
- name=f"{name} map in {map_space.name}",
- space_spec={"@id": map_space.id},
- parcellation_spec={'name': parcobj.name},
- indices=indices,
- volumes=volumes
- )
- # add it to siibra's registry
- Map.registry().add(parcmap.key, parcmap)
- # return the map - note that it has a pointer to the parcellation
- return parcmap
parcellationmap.py at commit 0a6a1e8, under Apache-2.0 · at the source
Overview
- Institute of Neuroscience and Medicine (INM-1), Research Centre Jülich, Jülich, Germany
- Institute of Computational Visualistics, University of Koblenz, Koblenz, Germany
- Helmholtz AI, Research Centre Jülich, Jülich, Germany
- NeuroSpin, CEA, Université Paris-Saclay, Gif-sur-Yvette, France
- Institut de Neurosciences des Systèmes, INSERM, Aix-Marseille University, Marseille, France
- Institute of Basic Medical Sciences, University of Oslo, Oslo, Norway
- Medical Faculty & University Hospital Düsseldorf - Cécile & Oskar Vogt Institute of Brain Research, Heinrich Heine University, Düsseldorf, Germany
Abstract
Computational technology opens new possibilities toward understanding the complexity of the human brain, but it requires integrating measurements from different modalities and scales in an anatomical context and exposing them in an interoperable, actionable form. Especially with growing big data resources, accessing information from different scales and modalities coherently for visual exploration, reproducible analysis and application development remains challenging. Here we present siibra, a tool suite that connects diverse data from cloud resources to reference atlases and coordinate spaces. It supports different use cases by making contents accessible through a web viewer, Python library and HTTP application programming interface. Using siibra we implemented a Multilevel Human Brain Atlas linking macro-anatomical concepts and their inter-subject variability with measurements of the microstructural composition and intrinsic variance of brain regions, building on cytoarchitecture as a reference and supporting MRI-based and microscopic templates. The atlas is integrated with the EBRAINS research infrastructure. All software and content are openly accessible.
Reproduced under the paper's license (CC BY), from the paper cited above.
Repositories
Its files are read in the Code ↔ Paper reader above, with 25 matches between paragraphs and lines of code.
siibra-python.readthedocs.io
Availability: 1 check, the latest on 27 September 2026: the link answers (HTTP 200)
- 27 September 2026: the link answers (HTTP 200)
HumanBrainProject/hbp-spatial-backend
0acac3bc230fb8a65e6cf1a3f9196648606da65f, 1 April 2025Availability: 1 check, the latest on 27 September 2026: the link answers
- 27 September 2026: the link answers
17 files
- docker-aims/
script.sh , Shell, 69 lines - get_local_image_transfor
m_command.py , Python, 177 lines - hbp_spatial_backend/
__init__.py , Python, 224 lines, 1 match - hbp_spatial_backend/
api_v1.py , Python, 401 lines - hbp_spatial_backend/
apply_transform.py , Python, 111 lines - hbp_spatial_backend/
transform_graph.py , Python, 118 lines - hbp_spatial_backend/
wsgi.py , Python, 21 lines - remote_tests/
test_graph_consistency.p , Python, 101 linesy - run-flask-dev.sh, Shell, 11 lines
- setup.py, Python, 92 lines
- tests/
conftest.py , Python, 32 lines - tests/
test_api_v1.py , Python, 202 lines - tests/
test_app.py , Python, 136 lines - tests/
test_apply_transform.py , Python, 152 lines - tests/
test_transform_graph.py , Python, 97 lines - LICENCE.txt, License, 202 lines
- README.rst, Text, 243 lines
FZJ-INM1-BDA/siibra-tutorials
88580425bf6815235725df94c5246e7f05583787, 22 June 2026Availability: 1 check, the latest on 27 September 2026: the link answers
- 27 September 2026: the link answers
14 files
- 01-BasicConcepts.ipynb, Jupyter, 222 lines
- 02-DataFeatures.ipynb, Jupyter, 143 lines
- 03-ProbabilisticAssignme
nt.ipynb , Jupyter, 94 lines - 04-DifferentialGeneExpre
ssions.ipynb , Jupyter, 73 lines - siibra_overview.ipynb, Jupyter, 272 lines
- using_your_data_with_sii
bra.ipynb , Jupyter, 206 lines - workshops/
BigBrainWorkshop2023.ipy , Jupyter, 190 linesnb - workshops/
HIBALL-winterschool-2023 , Jupyter, 522 lines.ipynb - workshops/
imb9345-2024.ipynb , Jupyter, 187 lines - workshops/
ohbm-2023-example.ipynb , Jupyter, 168 lines - workshops/
siibra_basics_ebrains_st , Jupyter, 254 linesudent_conf_2026.ipynb - workshops/
using_your_data_with_sii , Jupyter, 208 linesbra_ebrains_student_conf _2026.ipynb - LICENSE, License, 201 lines
- README.md, Text, 21 lines
FZJ-INM1-BDA/siibra-python
0a6a1e81fb007ed580816a7b963d8d9f89bb46b7, 26 September 2026Availability: 1 check, the latest on 27 September 2026: the link answers
- 27 September 2026: the link answers
170 files
- .ebrains/
spack/ , Python, 30 linessiibra/ package.py - config_schema/
check_schema.py , Python, 134 lines - docs/
conf.py , Python, 192 lines - e2e/
core/ , Python, 69 linestest_parcellation.py - e2e/
core/ , Python, 125 linestest_region.py - e2e/
core/ , Python, 42 linestest_space.py - e2e/
examples/ , Python, 19 linesrun_example.py - e2e/
examples/ , Python, 82 linestest_examples.py - e2e/
features/ , Python, 49 linesactivity_timeseries/ test_activity_timeseries .py - e2e/
features/ , Python, 94 linesconnectivity/ test_connectivity.py - e2e/
features/ , Python, 28 linesexternal/ test_ebrains.py - e2e/
features/ , Python, 65 linesimage/ test_image.py - e2e/
features/ , Python, 77 linesmolecular/ test_genes.py - e2e/
features/ , Python, 25 linesmolecular/ test_receptor_density_fi ngerprint.py - e2e/
features/ , Python, 133 linestest_generic.py - e2e/
features/ , Python, 125 linestest_get.py - e2e/
features/ , Python, 25 linestest_plot.py - e2e/
locations/ , Python, 12 linestest_locations.py - e2e/
retrieval/ , Python, 9 linestest_datasets.py - e2e/
retrieval/ , Python, 43 linestest_repositories.py - e2e/
util.py , Python, 59 lines - e2e/
volumes/ , Python, 51 linestest_compute_centroids.p y - e2e/
volumes/ , Python, 49 linestest_extract_signals_fro m_map.py - e2e/
volumes/ , Python, 23 linestest_extracting_bbox_fro m_template.py - e2e/
volumes/ , Python, 60 linestest_mapshape.py - e2e/
volumes/ , Python, 184 linestest_parcellationmap.py - e2e/
volumes/ , Python, 58 linestest_preconfigured_bound ingbox.py - e2e/
volumes/ , Python, 17 linestest_sparsemap_cache_uni queness.py - e2e/
volumes/ , Python, 23 linestest_sparsemap_volume_as signment.py - e2e/
volumes/ , Python, 29 linestest_subfragmented_ngmes h.py - e2e/
volumes/ , Python, 54 linestest_surface_maps.py - e2e/
volumes/ , Python, 62 linestest_time_series_volume. py - e2e/
volumes/ , Python, 35 linestest_volume.py - examples/
01_atlases_and_parcellat , Python, 98 linesions/ 000_accessing_atlases.py - examples/
01_atlases_and_parcellat , Python, 94 linesions/ 001_accessing_parcellati ons.py - examples/
01_atlases_and_parcellat , Python, 55 linesions/ 002_explore_region_hiera rchy.py - examples/
01_atlases_and_parcellat , Python, 89 linesions/ 003_find_regions.py - examples/
01_atlases_and_parcellat , Python, 65 linesions/ 004_brain_region_metadat a.py - examples/
01_atlases_and_parcellat , Python, 73 linesions/ 005_brain_region_spatial props.py - examples/
02_maps_and_templates/ , Python, 62 lines001_selecting_reference_ spaces.py - examples/
02_maps_and_templates/ , Python, 114 lines002_accessing_templates. py - examples/
02_maps_and_templates/ , Python, 142 lines003_accessing_maps.py - examples/
02_maps_and_templates/ , Python, 137 lines004_access_bigbrain.py - examples/
02_maps_and_templates/ , Python, 76 lines005_access_surface_maps. py - examples/
02_maps_and_templates/ , Python, 82 lines006_bigbrain_cortical_la yers.py - examples/
02_maps_and_templates/ , Python, 111 lines007_adding_custom_parcel lation.py - examples/
03_data_features/ , Python, 155 lines000_matchings.py - examples/
03_data_features/ , Python, 76 lines001_receptor_densities.p y - examples/
03_data_features/ , Python, 69 lines002_colorize_map.py - examples/
03_data_features/ , Python, 100 lines003_cell_distributions.p y - examples/
03_data_features/ , Python, 72 lines004_gene_expressions.py - examples/
03_data_features/ , Python, 50 lines005_ebrains_datasets.py - examples/
03_data_features/ , Python, 121 lines006_connectivity_matrice s.py - examples/
03_data_features/ , Python, 85 lines007_comparative_assessme nt.py - examples/
03_data_features/ , Python, 80 lines008_functional_timeserie s.py - examples/
03_data_features/ , Python, 74 lines009_compound_features.py - examples/
03_data_features/ , Python, 118 lines010_lfp_query.py - examples/
04_locations/ , Python, 94 lines000_employing_locations_ of_interest.py - examples/
05_anatomical_assignment , Python, 82 lines/ 001_coordinates.py - examples/
05_anatomical_assignment , Python, 77 lines/ 002_activation_maps.py - examples/
tutorials/ , Python, 231 lines2025-paper-fig3.py - examples/
tutorials/ , Python, 177 lines2025-paper-fig4.py - examples/
tutorials/ , Python, 171 lines, 2 matches2025-paper-fig5.py - examples/
tutorials/ , Python, 461 lines, 2 matches2025-paper-fig6.py - examples/
tutorials/ , Python, 364 linesfmri_analysis_workflow.p y - setup.py, Python, 58 lines
- siibra/
__init__.py , Python, 283 lines - siibra/
commons.py , Python, 836 lines - siibra/
configuration/ , Python, 17 lines__init__.py - siibra/
configuration/ , Python, 189 linesconfiguration.py - siibra/
configuration/ , Python, 613 linesfactory.py - siibra/
core/ , Python, 16 lines__init__.py - siibra/
core/ , Python, 122 linesassignment.py - siibra/
core/ , Python, 239 linesatlas.py - siibra/
core/ , Python, 313 linesconcept.py - siibra/
core/ , Python, 389 linesparcellation.py - siibra/
core/ , Python, 1,233 linesregion.py - siibra/
core/ , Python, 143 lines, 1 matchspace.py - siibra/
core/ , Python, 111 linesstructure.py - siibra/
exceptions.py , Python, 71 lines - siibra/
explorer/ , Python, 17 lines__init__.py - siibra/
explorer/ , Python, 223 linesurl.py - siibra/
explorer/ , Python, 87 linesutil.py - siibra/
features/ , Python, 117 lines__init__.py - siibra/
features/ , Python, 220 linesanchor.py - siibra/
features/ , Python, 33 linesconnectivity/ __init__.py - siibra/
features/ , Python, 57 linesconnectivity/ functional_connectivity. py - siibra/
features/ , Python, 505 linesconnectivity/ regional_connectivity.py - siibra/
features/ , Python, 27 linesconnectivity/ streamline_counts.py - siibra/
features/ , Python, 27 linesconnectivity/ streamline_lengths.py - siibra/
features/ , Python, 30 linesconnectivity/ tracing_connectivity.py - siibra/
features/ , Python, 17 linesdataset/ __init__.py - siibra/
features/ , Python, 90 linesdataset/ ebrains.py - siibra/
features/ , Python, 988 linesfeature.py - siibra/
features/ , Python, 30 linesimage/ __init__.py - siibra/
features/ , Python, 122 linesimage/ image.py - siibra/
features/ , Python, 107 lines, 1 matchimage/ sections.py - siibra/
features/ , Python, 117 linesimage/ volume_of_interest.py - siibra/
features/ , Python, 25 linestabular/ __init__.py - siibra/
features/ , Python, 78 linestabular/ bigbrain_intensity_profi le.py - siibra/
features/ , Python, 297 linestabular/ cell_density_profile.py - siibra/
features/ , Python, 327 linestabular/ cortical_profile.py - siibra/
features/ , Python, 275 lines, 2 matchestabular/ gene_expression.py - siibra/
features/ , Python, 63 linestabular/ layerwise_bigbrain_inten sities.py - siibra/
features/ , Python, 157 linestabular/ layerwise_cell_density.p y - siibra/
features/ , Python, 429 linestabular/ local_field_potential.py - siibra/
features/ , Python, 219 linestabular/ receptor_density_fingerp rint.py - siibra/
features/ , Python, 109 linestabular/ receptor_density_profile .py - siibra/
features/ , Python, 304 linestabular/ regional_timeseries_acti vity.py - siibra/
features/ , Python, 157 lines, 1 matchtabular/ tabular.py - siibra/
livequeries/ , Python, 20 lines__init__.py - siibra/
livequeries/ , Python, 359 lines, 3 matchesallen.py - siibra/
livequeries/ , Python, 394 lines, 2 matchesbigbrain.py - siibra/
livequeries/ , Python, 148 lines, 1 matchebrains.py - siibra/
livequeries/ , Python, 167 lineslocal_field_potential.py - siibra/
livequeries/ , Python, 49 linesquery.py - siibra/
locations/ , Python, 100 lines__init__.py - siibra/
locations/ , Python, 452 linesboundingbox.py - siibra/
locations/ , Python, 352 linesexperimental.py - siibra/
locations/ , Python, 120 lineslocation.py - siibra/
locations/ , Python, 339 linespoint.py - siibra/
locations/ , Python, 389 linespointcloud.py - siibra/
retrieval/ , Python, 27 lines__init__.py - siibra/
retrieval/ , Python, 234 linescache.py - siibra/
retrieval/ , Python, 395 linesdatasets.py - siibra/
retrieval/ , Python, 27 linesexceptions/ __init__.py - siibra/
retrieval/ , Python, 862 linesrepositories.py - siibra/
retrieval/ , Python, 674 linesrequests.py - siibra/
vocabularies/ , Python, 50 lines__init__.py - siibra/
volumes/ , Python, 24 lines__init__.py - siibra/
volumes/ , Python, 1,859 lines, 3 matchesparcellationmap.py - siibra/
volumes/ , Python, 20 linesproviders/ __init__.py - siibra/
volumes/ , Python, 113 linesproviders/ freesurfer.py - siibra/
volumes/ , Python, 223 linesproviders/ gifti.py - siibra/
volumes/ , Python, 786 linesproviders/ neuroglancer.py - siibra/
volumes/ , Python, 266 linesproviders/ nifti.py - siibra/
volumes/ , Python, 108 linesproviders/ provider.py - siibra/
volumes/ , Python, 545 lines, 2 matchessparsemap.py - siibra/
volumes/ , Python, 1,328 linesvolume.py - test/
__init__.py , Python, 1 line - test/
core/ , Python, 1 line__init__.py - test/
core/ , Python, 272 linestest_atlas.py - test/
core/ , Python, 94 linestest_concept.py - test/
core/ , Python, 277 linestest_parcellation.py - test/
core/ , Python, 268 linestest_region.py - test/
core/ , Python, 52 linestest_space.py - test/
features/ , Python, 1 line__init__.py - test/
features/ , Python, 23 linesexternal/ test_ebrains.py - test/
features/ , Python, 38 linestest_anchor.py - test/
features/ , Python, 38 linestest_cells.py - test/
features/ , Python, 4 linestest_connectivity.py - test/
features/ , Python, 98 linestest_ebrainsquery.py - test/
features/ , Python, 254 linestest_feature.py - test/
features/ , Python, 74 linestest_receptors.py - test/
features/ , Python, 21 linestest_voi.py - test/
retrieval/ , Python, 1 line__init__.py - test/
retrieval/ , Python, 158 linestest_cache.py - test/
retrieval/ , Python, 143 linestest_requests.py - test/
retrieval/ , Python, 14 linestest_retrieval_download_ file.py - test/
test_siibra.py , Python, 23 lines - test/
volumes/ , Python, 1 line__init__.py - test/
volumes/ , Python, 180 linesproviders/ test_gifti.py - test/
volumes/ , Python, 14 linesproviders/ test_neuroglancer.py - test/
volumes/ , Python, 94 linestest_nilearn_contract.py - test/
volumes/ , Python, 455 linestest_parcellationmap.py - test/
volumes/ , Python, 168 linestest_sparsemap.py - test/
volumes/ , Python, 74 linestest_timeseriesvolumes.p y - test/
volumes/ , Python, 108 linestest_volume.py - LICENSE, License, 201 lines
- README.rst, Text, 155 lines
FZJ-INM1-BDA/siibra-explorer
a1b93e091f2457ff8d683dab27001b89332e29f9, 26 July 2026Availability: 1 check, the latest on 27 September 2026: the link answers
- 27 September 2026: the link answers
623 files
- .eslintrc.js, JavaScript, 32 lines
- .github/
workflows/ , JavaScript, 13 linescode/ create-checklist-comment .js - .github/
workflows/ , JavaScript, 94 linescode/ minimise-all-checklist-c omments.js - .helm/
init_new_cluster.sh , Shell, 19 lines - .metaSpec/
_genReadMe.js , JavaScript, 194 lines - backend/
app/ , Python, 142 lines_store.py - backend/
app/ , Python, 138 linesapp.py - backend/
app/ , Python, 67 linesauth.py - backend/
app/ , Python, 314 lines, 3 matchesbkwdcompat.py - backend/
app/ , Python, 47 linesconfig.py - backend/
app/ , Python, 33 linesconst.py - backend/
app/ , Python, 14 linescors.py - backend/
app/ , Python, 22 linesdev_banner.py - backend/
app/ , Python, 61 linesindex_html.py - backend/
app/ , Python, 52 lineslive.py - backend/
app/ , Python, 42 lineslogger.py - backend/
app/ , Python, 22 linespeek.py - backend/
app/ , Python, 80 linesplugin.py - backend/
app/ , Python, 32 linesproxy.py - backend/
app/ , Python, 55 linesquickstart.py - backend/
app/ , Python, 243 linessane_url.py - backend/
app/ , Python, 69 linesuser.py - backend/
app/ , Python, 20 linesversion_header.py - backend/
test_app/ , Python, 13 linestest_sane_url.py - common/
constants.js , JavaScript, 178 lines - common/
util.js , JavaScript, 319 lines - common/
util.spec.js , JavaScript, 203 lines - cypress.config.js, JavaScript, 16 lines
- cypress/
e2e/ , JavaScript, 77 linesscreenshot.cy.js - features/
_convert.py , Python, 125 lines - spec/
karma.conf.js , JavaScript, 44 lines - spec/
test.ts , TypeScript, 21 lines - src/
api/ , TypeScript, 10 linesindex.ts - src/
api/ , TypeScript, 111 linesjsonrpc.ts - src/
api/ , TypeScript, 614 linesservice.ts - src/
assets/ , Python, 35 linesimages/ persp-view/ processing_raw/ rename.py - src/
assets/ , Python, 24 linesimages/ persp-view/ processing_raw/ trim_flip.py - src/
atlas-download/ , TypeScript, 151 linesatlas-download.directive .ts - src/
atlas-download/ , TypeScript, 19 linesatlas-download.module.ts - src/
atlasComponents/ , TypeScript, 303 linesannotations/ annotation.service.ts - src/
atlasComponents/ , TypeScript, 1 lineannotations/ index.ts - src/
atlasComponents/ , TypeScript, 1 lineannotations/ module.ts - src/
atlasComponents/ , TypeScript, 5 linesconstants.ts - src/
atlasComponents/ , TypeScript, 31 linessapi/ codeSnippets/ codeSnippet.dialog.ts - src/
atlasComponents/ , TypeScript, 88 linessapi/ codeSnippets/ codeSnippet.directive.ts - src/
atlasComponents/ , TypeScript, 32 linessapi/ constants.ts - src/
atlasComponents/ , TypeScript, 1 linesapi/ core/ index.ts - src/
atlasComponents/ , TypeScript, 149 linessapi/ core/ space/ interSpaceCoordXform.ser vice.spec.ts - src/
atlasComponents/ , TypeScript, 117 linessapi/ core/ space/ interSpaceCoordXform.ser vice.ts - src/
atlasComponents/ , TypeScript, 96 linessapi/ core/ space/ interspaceLinearXform.ts - src/
atlasComponents/ , TypeScript, 128 linessapi/ decisionCollapse.service .ts - src/
atlasComponents/ , TypeScript, 7 linessapi/ index.ts - src/
atlasComponents/ , TypeScript, 73 linessapi/ module.ts - src/
atlasComponents/ , TypeScript, 156 linessapi/ sapi.service.spec.ts - src/
atlasComponents/ , TypeScript, 704 linessapi/ sapi.service.ts - src/
atlasComponents/ , TypeScript, 2,035 linessapi/ schema.ts - src/
atlasComponents/ , TypeScript, 2,750 linessapi/ schemaV3.ts - src/
atlasComponents/ , TypeScript, 171 linessapi/ sxplrTypes.ts - src/
atlasComponents/ , TypeScript, 942 linessapi/ translateV3.ts - src/
atlasComponents/ , TypeScript, 121 linessapi/ type.ts - src/
atlasComponents/ , TypeScript, 65 linessapi/ typeV3.ts - src/
atlasComponents/ , TypeScript, 189 linessapi/ volumeMeta.ts - src/
atlasComponents/ , TypeScript, 1 linesapiViews/ core/ atlas/ index.ts - src/
atlasComponents/ , TypeScript, 23 linessapiViews/ core/ atlas/ module.ts - src/
atlasComponents/ , TypeScript, 38 linessapiViews/ core/ atlas/ splashScreen/ splashScreen.component.t s - src/
atlasComponents/ , TypeScript, 7 linessapiViews/ core/ index.ts - src/
atlasComponents/ , TypeScript, 27 linessapiViews/ core/ module.ts - src/
atlasComponents/ , TypeScript, 37 linessapiViews/ core/ parcellation/ filterGroupedParcellatio ns.pipe.ts - src/
atlasComponents/ , TypeScript, 10 linessapiViews/ core/ parcellation/ groupedParcellation.ts - src/
atlasComponents/ , TypeScript, 5 linessapiViews/ core/ parcellation/ index.ts - src/
atlasComponents/ , TypeScript, 13 linessapiViews/ core/ parcellation/ isGroupedParcellation.pi pe.ts - src/
atlasComponents/ , TypeScript, 40 linessapiViews/ core/ parcellation/ module.ts - src/
atlasComponents/ , TypeScript, 13 linessapiViews/ core/ parcellation/ parcTmplDoi.pipe.ts - src/
atlasComponents/ , TypeScript, 18 linessapiViews/ core/ parcellation/ parcellationGroupSelecte d.pipe.ts - src/
atlasComponents/ , TypeScript, 34 linessapiViews/ core/ region/ dedupRelatedRegion.pipe. ts - src/
atlasComponents/ , TypeScript, 1 linesapiViews/ core/ region/ index.ts - src/
atlasComponents/ , TypeScript, 53 linessapiViews/ core/ region/ module.ts - src/
atlasComponents/ , TypeScript, 15 linessapiViews/ core/ region/ region/ listItem/ region.listItem.componen t.ts - src/
atlasComponents/ , TypeScript, 197 linessapiViews/ core/ region/ region/ region.base.directive.ts - src/
atlasComponents/ , TypeScript, 139 linessapiViews/ core/ region/ region/ rich/ region.rich.component.ts - src/
atlasComponents/ , TypeScript, 22 linessapiViews/ core/ region/ translateQualification.p ipe.ts - src/
atlasComponents/ , TypeScript, 3 linessapiViews/ core/ rich/ ATPSelector/ index.ts - src/
atlasComponents/ , TypeScript, 39 linessapiViews/ core/ rich/ ATPSelector/ module.ts - src/
atlasComponents/ , TypeScript, 175 linessapiViews/ core/ rich/ ATPSelector/ pureATP.directive.ts - src/
atlasComponents/ , TypeScript, 13 linessapiViews/ core/ rich/ ATPSelector/ pureDumb/ pureATPSelector.componen ts.ts - src/
atlasComponents/ , TypeScript, 42 linessapiViews/ core/ rich/ ATPSelector/ pureDumbDropdown/ pureATPDropDown.componen t.ts - src/
atlasComponents/ , TypeScript, 101 linessapiViews/ core/ rich/ ATPSelector/ wrapper/ wrapper.component.ts - src/
atlasComponents/ , TypeScript, 1 linesapiViews/ core/ rich/ index.ts - src/
atlasComponents/ , TypeScript, 39 linessapiViews/ core/ rich/ module.ts - src/
atlasComponents/ , TypeScript, 35 linessapiViews/ core/ rich/ regionsHierarchy/ highlight.pipe.ts - src/
atlasComponents/ , TypeScript, 118 linessapiViews/ core/ rich/ regionsHierarchy/ regionsHierarchy.compone nt.ts - src/
atlasComponents/ , TypeScript, 180 linessapiViews/ core/ rich/ regionsListSearch/ regionListSearch.compone nt.ts - src/
atlasComponents/ , TypeScript, 10 linessapiViews/ core/ rich/ regionsListSearch/ regionListSearchTmpl.dir ective.ts - src/
atlasComponents/ , TypeScript, 88 linessapiViews/ core/ space/ boundingBox.directive.ts - src/
atlasComponents/ , TypeScript, 4 linessapiViews/ core/ space/ index.ts - src/
atlasComponents/ , TypeScript, 27 linessapiViews/ core/ space/ module.ts - src/
atlasComponents/ , TypeScript, 4 linessapiViews/ index.ts - src/
atlasComponents/ , TypeScript, 15 linessapiViews/ module.ts - src/
atlasComponents/ , TypeScript, 12 linessapiViews/ util/ addUnitAndJoin.pipe.ts - src/
atlasComponents/ , TypeScript, 16 linessapiViews/ util/ equality.pipe.ts - src/
atlasComponents/ , TypeScript, 1 linesapiViews/ util/ index.ts - src/
atlasComponents/ , TypeScript, 22 linessapiViews/ util/ module.ts - src/
atlasComponents/ , TypeScript, 12 linessapiViews/ util/ numbers.pipe.ts - src/
atlasComponents/ , TypeScript, 17 linessapiViews/ util/ parseDoi.pipe.spec.ts - src/
atlasComponents/ , TypeScript, 12 linessapiViews/ util/ parseDoi.pipe.ts - src/
atlasComponents/ , TypeScript, 80 linessapiViews/ volumes/ point-assignment/ point-assignment.compone nt.spec.ts - src/
atlasComponents/ , TypeScript, 234 linessapiViews/ volumes/ point-assignment/ point-assignment.compone nt.ts - src/
atlasComponents/ , TypeScript, 14 linessapiViews/ volumes/ sandsToNum.pipe.ts - src/
atlasComponents/ , TypeScript, 32 linessapiViews/ volumes/ volumes.module.ts - src/
atlasComponents/ , TypeScript, 48 linesuserAnnotations/ annotationInterfaces.ts - src/
atlasComponents/ , TypeScript, 109 linesuserAnnotations/ annotationList/ annotationList.component .spec.ts - src/
atlasComponents/ , TypeScript, 154 linesuserAnnotations/ annotationList/ annotationList.component .ts - src/
atlasComponents/ , TypeScript, 65 linesuserAnnotations/ annotationMode/ annotationMode.component .ts - src/
atlasComponents/ , TypeScript, 13 linesuserAnnotations/ annotationVisible.pipe.t s - src/
atlasComponents/ , TypeScript, 1 lineuserAnnotations/ constants.ts - src/
atlasComponents/ , TypeScript, 42 linesuserAnnotations/ directives/ annotationEv.directive.t s - src/
atlasComponents/ , TypeScript, 21 linesuserAnnotations/ directives/ annotationSwitch.directi ve.ts - src/
atlasComponents/ , TypeScript, 21 linesuserAnnotations/ filterAnnotationBySpace. pipe.ts - src/
atlasComponents/ , TypeScript, 3 linesuserAnnotations/ index.ts - src/
atlasComponents/ , TypeScript, 172 linesuserAnnotations/ module.ts - src/
atlasComponents/ , TypeScript, 181 linesuserAnnotations/ routedAnnotation.service .spec.ts - src/
atlasComponents/ , TypeScript, 42 linesuserAnnotations/ routedAnnotation.service .ts - src/
atlasComponents/ , TypeScript, 123 linesuserAnnotations/ singleAnnotationUnit/ singleAnnotationUnit.com ponent.ts - src/
atlasComponents/ , TypeScript, 78 linesuserAnnotations/ tools/ delete.ts - src/
atlasComponents/ , TypeScript, 315 linesuserAnnotations/ tools/ line.ts - src/
atlasComponents/ , TypeScript, 95 linesuserAnnotations/ tools/ line/ line.component.ts - src/
atlasComponents/ , TypeScript, 81 linesuserAnnotations/ tools/ module.ts - src/
atlasComponents/ , TypeScript, 197 linesuserAnnotations/ tools/ point.ts - src/
atlasComponents/ , TypeScript, 71 linesuserAnnotations/ tools/ point/ point.component.ts - src/
atlasComponents/ , TypeScript, 413 linesuserAnnotations/ tools/ poly.ts - src/
atlasComponents/ , TypeScript, 104 linesuserAnnotations/ tools/ poly/ poly.component.ts - src/
atlasComponents/ , TypeScript, 80 linesuserAnnotations/ tools/ select.ts - src/
atlasComponents/ , TypeScript, 43 linesuserAnnotations/ tools/ service.spec.ts - src/
atlasComponents/ , TypeScript, 812 linesuserAnnotations/ tools/ service.ts - src/
atlasComponents/ , TypeScript, 22 linesuserAnnotations/ tools/ toFormattedString.pipe.t s - src/
atlasComponents/ , TypeScript, 43 linesuserAnnotations/ tools/ toolCmp.base.ts - src/
atlasComponents/ , TypeScript, 168 linesuserAnnotations/ tools/ type.spec.ts - src/
atlasComponents/ , TypeScript, 436 linesuserAnnotations/ tools/ type.ts - src/
atlasViewer/ , TypeScript, 12 linesatlasViewer.animation.ts - src/
atlasViewer/ , TypeScript, 234 linesatlasViewer.component.ts - src/
atlasViewer/ , TypeScript, 43 linesatlasViewer.workerServic e.service.ts - src/
auth/ , TypeScript, 18 linesauth.directive.ts - src/
auth/ , TypeScript, 26 linesauth.module.ts - src/
auth/ , TypeScript, 91 linesauth.service.spec.ts - src/
auth/ , TypeScript, 82 linesauth.service.ts - src/
auth/ , TypeScript, 2 linesindex.ts - src/
auth/ , TypeScript, 35 linessigninModal/ signinModal.component.ts - src/
components/ , TypeScript, 60 linescomponents.module.ts - src/
components/ , TypeScript, 54 linesconfirmDialog/ confirmDialog.component. spec.ts - src/
components/ , TypeScript, 43 linesconfirmDialog/ confirmDialog.component. ts - src/
components/ , TypeScript, 240 linescoordTextBox/ coordTextBox.component.s pec.ts - src/
components/ , TypeScript, 139 linescoordTextBox/ coordTextBox.component.t s - src/
components/ , TypeScript, 10 linescoordTextBox/ index.ts - src/
components/ , TypeScript, 73 linesdialog/ dialog.component.ts - src/
components/ , TypeScript, 26 linesdynamicMaterialBtn/ dynamicMaterialBtn.compo nent.ts - src/
components/ , TypeScript, 23 linesfabSpeedDial/ fabSpeedDial.module.ts - src/
components/ , TypeScript, 35 linesfabSpeedDial/ fabSpeedDial.service.spe c.ts - src/
components/ , TypeScript, 43 linesfabSpeedDial/ fabSpeedDial.service.ts - src/
components/ , TypeScript, 103 linesfabSpeedDial/ fabSpeedDialChild.direct ive.spec.ts - src/
components/ , TypeScript, 59 linesfabSpeedDial/ fabSpeedDialChild.direct ive.ts - src/
components/ , TypeScript, 162 linesfabSpeedDial/ fabSpeedDialContainer.di rective.spec.ts - src/
components/ , TypeScript, 71 linesfabSpeedDial/ fabSpeedDialContainer.di rective.ts - src/
components/ , TypeScript, 73 linesfabSpeedDial/ fabSpeedDialTrigger.dire ctive.spec.ts - src/
components/ , TypeScript, 20 linesfabSpeedDial/ fabSpeedDialTrigger.dire ctive.ts - src/
components/ , TypeScript, 4 linesfabSpeedDial/ index.ts - src/
components/ , TypeScript, 5 linesflatHierarchy/ const.ts - src/
components/ , TypeScript, 1 lineflatHierarchy/ index.ts - src/
components/ , TypeScript, 25 linesflatHierarchy/ module.ts - src/
components/ , TypeScript, 13 linesflatHierarchy/ spacer.pipe.ts - src/
components/ , TypeScript, 100 linesflatHierarchy/ treeView/ treeControl.ts - src/
components/ , TypeScript, 131 linesflatHierarchy/ treeView/ treeView.component.ts - src/
components/ , TypeScript, 2 linesindex.ts - src/
components/ , TypeScript, 2 linesmarkdown/ index.ts - src/
components/ , TypeScript, 50 linesmarkdown/ markdownCmp/ markdown.component.ts - src/
components/ , TypeScript, 17 linesmarkdown/ module.ts - src/
components/ , TypeScript, 1 lineoverlay/ index.ts - src/
components/ , TypeScript, 28 linesoverlay/ overlay.component.ts - src/
components/ , TypeScript, 51 linesoverlay/ overlay.service.ts - src/
components/ , TypeScript, 1 lineparseAttribute.ts - src/
components/ , TypeScript, 2 linesreadmore/ index.ts - src/
components/ , TypeScript, 21 linesreadmore/ module.ts - src/
components/ , TypeScript, 27 linesreadmore/ readmoreCmp/ readmore.animations.ts - src/
components/ , TypeScript, 35 linesreadmore/ readmoreCmp/ readmore.component.ts - src/
components/ , TypeScript, 15 linessafeHtml.pipe.ts - src/
components/ , TypeScript, 105 linessmartChip/ component/ smartChip.component.ts - src/
components/ , TypeScript, 12 linessmartChip/ hasSubmenu.pipe.ts - src/
components/ , TypeScript, 3 linessmartChip/ index.ts - src/
components/ , TypeScript, 35 linessmartChip/ module.ts - src/
components/ , TypeScript, 9 linessmartChip/ smartChip.action.directi ve.ts - src/
components/ , TypeScript, 9 linessmartChip/ smartChip.content.direct ive.ts - src/
components/ , TypeScript, 9 linessmartChip/ smartChip.header.directi ve.ts - src/
components/ , TypeScript, 9 linessmartChip/ smartChip.menu.directive .ts - src/
components/ , TypeScript, 2 linessnackDialog/ index.ts - src/
components/ , TypeScript, 98 linessnackDialog/ snackDialog.component.ts - src/
components/ , TypeScript, 45 linessnackDialog/ snackDialog.service.ts - src/
components/ , TypeScript, 6 linesspinner/ index.ts - src/
components/ , TypeScript, 17 linesspinner/ module.ts - src/
components/ , TypeScript, 8 linesspinner/ spinnerCmp/ spinner.component.ts - src/
components/ , TypeScript, 39 linestab/ tab.components.ts - src/
components/ , TypeScript, 65 linestextareaCopyExport/ textareaCopyExport.compo nent.ts - src/
components/ , TypeScript, 56 linestile/ tile.component.ts - src/
components/ , TypeScript, 29 linesvButton/ vButton.component.ts - src/
contextMenuModule/ , TypeScript, 31 linesctxMenuHost.directive.ts - src/
contextMenuModule/ , TypeScript, 20 linesdismissCtxMenu.directive .ts - src/
contextMenuModule/ , TypeScript, 3 linesindex.ts - src/
contextMenuModule/ , TypeScript, 25 linesmodule.ts - src/
contextMenuModule/ , TypeScript, 127 linesservice.ts - src/
dragDropFile/ , TypeScript, 119 linesdragDrop.directive.ts - src/
dragDropFile/ , TypeScript, 1 lineindex.ts - src/
environments/ , TypeScript, 28 linesenvironment.common.ts - src/
environments/ , TypeScript, 4 linesenvironment.prod.ts - src/
environments/ , TypeScript, 4 linesenvironment.ts - src/
environments/ , JavaScript, 87 linesparseEnv.js - src/
experimental/ , TypeScript, 119 linesexperimental-flag.direct ive.spec.ts - src/
experimental/ , TypeScript, 85 linesexperimental-flag.direct ive.ts - src/
experimental/ , TypeScript, 75 linesexperimental.module.ts - src/
experimental/ , TypeScript, 18 linesexperimental.service.ts - src/
features/ , TypeScript, 40 linesTPBRView/ TPBRView.component.ts - src/
features/ , TypeScript, 1 lineatlas-colormap-intents/ index.ts - src/
features/ , TypeScript, 88 linesatlas-colormap-intents/ intents.component.ts - src/
features/ , TypeScript, 62 linesbase.ts - src/
features/ , TypeScript, 8 linescategory-acc.directive.s pec.ts - src/
features/ , TypeScript, 141 linescategory-acc.directive.t s - src/
features/ , TypeScript, 78 linescompoundFeatureIndices/ compoundFeatureIndices.c omponent.ts - src/
features/ , TypeScript, 32 linescompoundFeatureIndices/ idxToIcon.pipe.ts - src/
features/ , TypeScript, 15 linescompoundFeatureIndices/ idxToText.pipe.ts - src/
features/ , TypeScript, 3 linescompoundFeatureIndices/ index.ts - src/
features/ , TypeScript, 38 linescompoundFeatureIndices/ module.ts - src/
features/ , TypeScript, 8 linescompoundFeatureIndices/ util.ts - src/
features/ , TypeScript, 124 linesconnectivity/ connectivityBrowser/ connectivityBrowser.comp onent.spec.ts - src/
features/ , TypeScript, 597 linesconnectivity/ connectivityBrowser/ connectivityBrowser.comp onent.ts - src/
features/ , TypeScript, 2 linesconnectivity/ index.ts - src/
features/ , TypeScript, 33 linesconnectivity/ module.ts - src/
features/ , TypeScript, 41 linesentry/ entry.component.spec.ts - src/
features/ , TypeScript, 256 linesentry/ entry.component.ts - src/
features/ , TypeScript, 59 linesfeature-view/ feature-view.component.s pec.ts - src/
features/ , TypeScript, 355 linesfeature-view/ feature-view.component.t s - src/
features/ , TypeScript, 95 linesfeature.filter.directive .ts - src/
features/ , TypeScript, 12 linesfeatureName.pipe.ts - src/
features/ , TypeScript, 15 linesfilterCategories.pipe.ts - src/
features/ , TypeScript, 18 linesgrpFeatToName.pipe.ts - src/
features/ , TypeScript, 18 linesgrpFeatToTotal.pipe.ts - src/
features/ , TypeScript, 11 linesguards.ts - src/
features/ , TypeScript, 1 lineindex.ts - src/
features/ , TypeScript, 128 lineslist/ list.directive.ts - src/
features/ , TypeScript, 95 linesmodule.ts - src/
features/ , TypeScript, 1 lineplotly/ index.ts - src/
features/ , TypeScript, 23 linesplotly/ plot/ plot.component.spec.ts - src/
features/ , TypeScript, 60 linesplotly/ plot/ plot.component.ts - src/
features/ , TypeScript, 2 linespointcloud-intents/ index.ts - src/
features/ , TypeScript, 175 linespointcloud-intents/ intents.component.ts - src/
features/ , TypeScript, 24 linespointcloud-intents/ util.ts - src/
features/ , TypeScript, 19 linesutil.ts - src/
features/ , TypeScript, 192 linesvoi-bbox.directive.ts - src/
features/ , TypeScript, 117 linesxtraVoi.directive.ts - src/
freeModeModule/ , TypeScript, 131 linesfreemode-ui/ freemode-ui.component.ts - src/
freeModeModule/ , TypeScript, 1 lineindex.ts - src/
freeModeModule/ , TypeScript, 21 linesmodule.ts - src/
getFileInput/ , TypeScript, 122 linesfileInputModal/ fileInputModal.component .ts - src/
getFileInput/ , TypeScript, 68 linesgetFileInput.directive.t s - src/
getFileInput/ , TypeScript, 1 lineindex.ts - src/
getFileInput/ , TypeScript, 26 linesmodule.ts - src/
getFileInput/ , TypeScript, 18 linestype.ts - src/
glue.spec.ts , TypeScript, 135 lines - src/
glue.ts , TypeScript, 28 lines - src/
keyframesModule/ , TypeScript, 2 linesconstants.ts - src/
keyframesModule/ , TypeScript, 1 lineindex.ts - src/
keyframesModule/ , TypeScript, 61 lineskeyframe.directive.ts - src/
keyframesModule/ , TypeScript, 360 lineskeyframeCtrl/ keyframeCtrl.component.t s - src/
keyframesModule/ , TypeScript, 29 linesmodule.ts - src/
layouts/ , TypeScript, 27 linescurrentLayout/ currentLayout.component. ts - src/
layouts/ , TypeScript, 15 linesfourCorners/ fourCorners.component.ts - src/
layouts/ , TypeScript, 41 lineslayout.module.ts - src/
layouts/ , TypeScript, 13 lineslayouts/ fourPanel/ fourPanel.component.ts - src/
layouts/ , TypeScript, 13 lineslayouts/ h13/ h13.component.ts - src/
layouts/ , TypeScript, 13 lineslayouts/ pip/ pip.component.ts - src/
layouts/ , TypeScript, 13 lineslayouts/ single/ single.component.ts - src/
layouts/ , TypeScript, 13 lineslayouts/ v13/ v13.component.ts - src/
logging/ , TypeScript, 2 linesindex.ts - src/
logging/ , TypeScript, 10 lineslogging.module.ts - src/
logging/ , TypeScript, 25 lineslogging.service.ts - src/
main-aot.ts , TypeScript, 1 line - src/
main-common.ts , TypeScript, 40 lines - src/
main.module.ts , TypeScript, 259 lines - src/
main.ts , TypeScript, 2 lines - src/
messaging/ , TypeScript, 54 linesmodule.spec.ts - src/
messaging/ , TypeScript, 23 linesmodule.ts - src/
messaging/ , TypeScript, 27 linesnative/ index.ts - src/
messaging/ , TypeScript, 1 linenmvSwc/ index.spec.ts - src/
messaging/ , TypeScript, 189 linesnmvSwc/ index.ts - src/
messaging/ , TypeScript, 11 linesnmvSwc/ type.ts - src/
messaging/ , TypeScript, 366 linesservice.spec.ts - src/
messaging/ , TypeScript, 243 linesservice.ts - src/
messaging/ , TypeScript, 62 linestypes.ts - src/
messagingGlue.ts , TypeScript, 119 lines - src/
mouseoverModule/ , TypeScript, 2 linesindex.ts - src/
mouseoverModule/ , TypeScript, 22 linesmouseover.component.ts - src/
mouseoverModule/ , TypeScript, 34 linesservice.ts - src/
notSupportedCmp/ , TypeScript, 43 linesnotSupported.component.t s - src/
plugin/ , TypeScript, 16 linesconst.ts - src/
plugin/ , TypeScript, 23 linesiframeSrc.pipe.ts - src/
plugin/ , TypeScript, 3 linesindex.ts - src/
plugin/ , TypeScript, 34 linesplugin.module.ts - src/
plugin/ , TypeScript, 72 linespluginBanner/ pluginBanner.component.t s - src/
plugin/ , TypeScript, 149 linespluginEnabled.pipe.spec. ts - src/
plugin/ , TypeScript, 21 linespluginEnabled.pipe.ts - src/
plugin/ , TypeScript, 151 linespluginPortal/ pluginPortal.component.t s - src/
plugin/ , TypeScript, 70 linesservice.ts - src/
plugin/ , TypeScript, 11 linestypes.ts - src/
res/ , Shell, 84 linesicons/ generateFont.sh - src/
routerModule/ , TypeScript, 137 linescipher.spec.ts - src/
routerModule/ , TypeScript, 35 linescipher.ts - src/
routerModule/ , TypeScript, 1 lineconst.ts - src/
routerModule/ , TypeScript, 258 lineseffects.spec.ts - src/
routerModule/ , TypeScript, 194 lineseffects.ts - src/
routerModule/ , TypeScript, 1 lineindex.ts - src/
routerModule/ , TypeScript, 46 linesmodule.ts - src/
routerModule/ , TypeScript, 182 linesrouteStateTransform.serv ice.spec.ts - src/
routerModule/ , TypeScript, 595 linesrouteStateTransform.serv ice.ts - src/
routerModule/ , TypeScript, 185 linesrouter.service.spec.ts - src/
routerModule/ , TypeScript, 77 linesrouter.service.ts - src/
routerModule/ , TypeScript, 37 linestype.ts - src/
routerModule/ , TypeScript, 38 linesutil.spec.ts - src/
routerModule/ , TypeScript, 77 linesutil.ts - src/
screenshot/ , TypeScript, 5 linesindex.ts - src/
screenshot/ , TypeScript, 28 linesmodule.ts - src/
screenshot/ , TypeScript, 199 linesscreenshotCmp/ screenshot.component.ts - src/
screenshot/ , TypeScript, 67 linesscreenshotSwitch.directi ve.ts - src/
screenshot/ , TypeScript, 14 linesutil.ts - src/
services/ , TypeScript, 86 linesdialogService.service.ts - src/
services/ , TypeScript, 31 linesuiService.service.ts - src/
share/ , TypeScript, 91 linesclipboardCopy.directive. spec.ts - src/
share/ , TypeScript, 32 linesclipboardCopy.directive. ts - src/
share/ , TypeScript, 1 lineindex.ts - src/
share/ , TypeScript, 314 linessaneUrl/ saneUrl.component.spec.t s - src/
share/ , TypeScript, 183 linessaneUrl/ saneUrl.component.ts - src/
share/ , TypeScript, 63 linessaneUrl/ saneUrl.service.ts - src/
share/ , TypeScript, 18 linesshare.directive.ts - src/
share/ , TypeScript, 39 linesshare.module.ts - src/
share/ , TypeScript, 23 linesshareSheet/ shareSheet.component.ts - src/
share/ , TypeScript, 8 linestype.ts - src/
sharedModules/ , TypeScript, 15 linesangularMaterial.exports. ts - src/
sharedModules/ , TypeScript, 87 linesangularMaterial.module.t s - src/
sharedModules/ , TypeScript, 45 linesicon/ icon.component.ts - src/
sharedModules/ , TypeScript, 1 lineicon/ index.ts - src/
sharedModules/ , TypeScript, 5 linesindex.ts - src/
spotlight/ , TypeScript, 3 linesconst.ts - src/
spotlight/ , TypeScript, 9 linessl-service.service.spec. ts - src/
spotlight/ , TypeScript, 60 linessl-service.service.ts - src/
spotlight/ , TypeScript, 6 linessl-spotlight.directive.s pec.ts - src/
spotlight/ , TypeScript, 19 linessl-spotlight.directive.t s - src/
spotlight/ , TypeScript, 8 linesspot-light-overlay.direc tive.spec.ts - src/
spotlight/ , TypeScript, 8 linesspot-light-overlay.direc tive.ts - src/
spotlight/ , TypeScript, 26 linesspot-light.module.ts - src/
spotlight/ , TypeScript, 8 linesspotlight-backdrop/ spotlight-backdrop.compo nent.spec.ts - src/
spotlight/ , TypeScript, 42 linesspotlight-backdrop/ spotlight-backdrop.compo nent.ts - src/
state/ , TypeScript, 24 linesactions.ts - src/
state/ , TypeScript, 21 linesannotations/ actions.ts - src/
state/ , TypeScript, 1 lineannotations/ const.ts - src/
state/ , TypeScript, 4 linesannotations/ index.ts - src/
state/ , TypeScript, 32 linesannotations/ selectors.ts - src/
state/ , TypeScript, 72 linesannotations/ store.ts - src/
state/ , TypeScript, 65 linesatlasAppearance/ action.ts - src/
state/ , TypeScript, 88 linesatlasAppearance/ const.ts - src/
state/ , TypeScript, 18 linesatlasAppearance/ effect.ts - src/
state/ , TypeScript, 6 linesatlasAppearance/ index.ts - src/
state/ , TypeScript, 34 linesatlasAppearance/ selector.ts - src/
state/ , TypeScript, 122 linesatlasAppearance/ store.ts - src/
state/ , TypeScript, 199 linesatlasSelection/ actions.ts - src/
state/ , TypeScript, 38 linesatlasSelection/ const.ts - src/
state/ , TypeScript, 517 linesatlasSelection/ effects.spec.ts - src/
state/ , TypeScript, 655 linesatlasSelection/ effects.ts - src/
state/ , TypeScript, 6 linesatlasSelection/ index.ts - src/
state/ , TypeScript, 76 linesatlasSelection/ selectors.ts - src/
state/ , TypeScript, 163 linesatlasSelection/ store.ts - src/
state/ , TypeScript, 25 linesatlasSelection/ util.ts - src/
state/ , TypeScript, 13 linesconst.ts - src/
state/ , TypeScript, 123 linesindex.ts - src/
state/ , TypeScript, 9 linesplugins/ actions.ts - src/
state/ , TypeScript, 2 linesplugins/ const.ts - src/
state/ , TypeScript, 130 linesplugins/ effects.spec.ts - src/
state/ , TypeScript, 64 linesplugins/ effects.ts - src/
state/ , TypeScript, 5 linesplugins/ index.ts - src/
state/ , TypeScript, 10 linesplugins/ selectors.ts - src/
state/ , TypeScript, 30 linesplugins/ store.ts - src/
state/ , TypeScript, 18 linesstate.module.ts - src/
state/ , TypeScript, 45 linesstateAggregator.directiv e.ts - src/
state/ , TypeScript, 44 linesuserInteraction/ actions.ts - src/
state/ , TypeScript, 1 lineuserInteraction/ const.ts - src/
state/ , TypeScript, 47 linesuserInteraction/ effects.ts - src/
state/ , TypeScript, 5 linesuserInteraction/ index.ts - src/
state/ , TypeScript, 25 linesuserInteraction/ selectors.ts - src/
state/ , TypeScript, 64 linesuserInteraction/ store.ts - src/
state/ , TypeScript, 59 linesuserInterface/ actions.ts - src/
state/ , TypeScript, 6 linesuserInterface/ const.ts - src/
state/ , TypeScript, 123 linesuserInterface/ effects.ts - src/
state/ , TypeScript, 5 linesuserInterface/ index.ts - src/
state/ , TypeScript, 15 linesuserInterface/ selectors.ts - src/
state/ , TypeScript, 35 linesuserInterface/ store.ts - src/
state/ , TypeScript, 1 lineuserInterface/ ui.ts - src/
state/ , TypeScript, 60 linesuserPreference/ actions.ts - src/
state/ , TypeScript, 9 linesuserPreference/ const.ts - src/
state/ , TypeScript, 46 linesuserPreference/ effects.ts - src/
state/ , TypeScript, 5 linesuserPreference/ index.ts - src/
state/ , TypeScript, 50 linesuserPreference/ selectors.ts - src/
state/ , TypeScript, 124 linesuserPreference/ store.ts - src/
strictLocal/ , TypeScript, 2 linesindex.ts - src/
strictLocal/ , TypeScript, 21 linesmodule.ts - src/
strictLocal/ , TypeScript, 20 linesstrictLocal.directive.ts - src/
strictLocal/ , TypeScript, 13 linesstrictLocalCmp/ strictLocalCmp.component .ts - src/
ui/ , TypeScript, 33 linesactionDialog/ actionDialog.component.t s - src/
ui/ , TypeScript, 75 linesbottomMenu/ bottomMenuCmp/ bottomMenu.component.ts - src/
ui/ , TypeScript, 1 linebottomMenu/ index.ts - src/
ui/ , TypeScript, 27 linesbottomMenu/ module.ts - src/
ui/ , TypeScript, 291 linesconfig/ configCmp/ config.component.ts - src/
ui/ , TypeScript, 1 lineconfig/ index.ts - src/
ui/ , TypeScript, 24 linesconfig/ module.ts - src/
ui/ , TypeScript, 37 linescookieAgreement/ cookieAgreement/ cookieAgreement.componen t.ts - src/
ui/ , TypeScript, 1 linecookieAgreement/ index.ts - src/
ui/ , TypeScript, 23 linescookieAgreement/ module.ts - src/
ui/ , TypeScript, 77 linesdialogInfo/ dialog.directive.ts - src/
ui/ , TypeScript, 3 linesdialogInfo/ index.ts - src/
ui/ , TypeScript, 25 linesdialogInfo/ module.ts - src/
ui/ , TypeScript, 27 linesdialogInfo/ tmpl/ tmpl.component.ts - src/
ui/ , TypeScript, 44 lineshelp/ about/ about.component.ts - src/
ui/ , TypeScript, 42 lineshelp/ helpOnePager/ helpOnePager.component.s pec.ts - src/
ui/ , TypeScript, 19 lineshelp/ helpOnePager/ helpOnePager.component.t s - src/
ui/ , TypeScript, 16 lineshelp/ howToCite/ howToCite.component.ts - src/
ui/ , TypeScript, 1 linehelp/ index.ts - src/
ui/ , TypeScript, 37 lineshelp/ module.ts - src/
ui/ , TypeScript, 30 lineshelp/ newestRelease.directive. ts - src/
ui/ , TypeScript, 142 lineshelp/ type.ts - src/
ui/ , TypeScript, 4 lineskgtos/ index.ts - src/
ui/ , TypeScript, 22 lineskgtos/ kgtos/ kgtos.component.ts - src/
ui/ , TypeScript, 19 lineskgtos/ module.ts - src/
ui/ , TypeScript, 39 lineslogoContainer/ logoContainer.component. ts - src/
ui/ , TypeScript, 66 linesquickTour/ arrowCmp/ arrow.component.ts - src/
ui/ , TypeScript, 44 linesquickTour/ constrants.ts - src/
ui/ , TypeScript, 11 linesquickTour/ index.ts - src/
ui/ , TypeScript, 47 linesquickTour/ module.ts - src/
ui/ , TypeScript, 25 linesquickTour/ quickTour.directive.ts - src/
ui/ , TypeScript, 154 linesquickTour/ quickTour.service.ts - src/
ui/ , TypeScript, 369 linesquickTour/ quickTourComponent/ quickTour.component.ts - src/
ui/ , TypeScript, 47 linesquickTour/ quickTourThis.directive. ts - src/
ui/ , TypeScript, 14 linesquickTour/ startTourDialog/ startTourDialog.componen t.ts - src/
ui/ , TypeScript, 1 linetopMenu/ index.ts - src/
ui/ , TypeScript, 52 linestopMenu/ module.ts - src/
ui/ , TypeScript, 139 linestopMenu/ topMenuCmp/ topMenu.components.ts - src/
ui/ , TypeScript, 30 linestryme/ tryme.component.ts - src/
ui/ , TypeScript, 101 linesui.module.ts - src/
ui/ , TypeScript, 115 lineswarnings/ warnings.directive.ts - src/
util/ , TypeScript, 183 linesLinkedList.spec.ts - src/
util/ , TypeScript, 120 linesLinkedList.ts - src/
util/ , TypeScript, 93 linesarray.spec.ts - src/
util/ , TypeScript, 16 linesarray.ts - src/
util/ , TypeScript, 115 linesconstants.ts - src/
util/ , TypeScript, 8 linesdf-to-ds.pipe.spec.ts - src/
util/ , TypeScript, 49 linesdf-to-ds.pipe.ts - src/
util/ , TypeScript, 54 linesdirectives/ captureClickListener.dir ective.ts - src/
util/ , TypeScript, 21 linesdirectives/ clickOutside.directive.t s - src/
util/ , TypeScript, 13 linesdirectives/ destroy.directive.ts - src/
util/ , TypeScript, 29 linesdirectives/ floatingMouseContextualC ontainer.directive.ts - src/
util/ , TypeScript, 102 linesdirectives/ keyDownListener.directiv e.spec.ts - src/
util/ , TypeScript, 106 linesdirectives/ keyDownListener.directiv e.ts - src/
util/ , TypeScript, 55 linesdirectives/ mediaQuery.directive.ts - src/
util/ , TypeScript, 53 linesdirectives/ stopPropagation.directiv e.ts - src/
util/ , TypeScript, 42 linesdirectives/ switch.directive.ts - src/
util/ , TypeScript, 15 linesdirectives/ trigger.directive.ts - src/
util/ , TypeScript, 148 linesfn.spec.ts - src/
util/ , TypeScript, 578 linesfn.ts - src/
util/ , TypeScript, 27 linesgenerator.ts - src/
util/ , TypeScript, 15 linesincludes.pipe.ts - src/
util/ , TypeScript, 7 linesindex.ts - src/
util/ , TypeScript, 69 linesinjectionTokens.ts - src/
util/ , TypeScript, 32 linesinterfaces.ts - src/
util/ , TypeScript, 19 linesjson.ts - src/
util/ , TypeScript, 17 linesmergeObj.pipe.ts - src/
util/ , TypeScript, 188 linespatchPureConstants.ts - src/
util/ , TypeScript, 26 linesperiodic.service.ts - src/
util/ , TypeScript, 13 linespipes/ combineFn.pipe.ts - src/
util/ , TypeScript, 17 linespipes/ doiPipe.pipe.spec.ts - src/
util/ , TypeScript, 12 linespipes/ doiPipe.pipe.ts - src/
util/ , TypeScript, 12 linespipes/ filterArray.pipe.ts - src/
util/ , TypeScript, 14 linespipes/ getFilename.pipe.ts - src/
util/ , TypeScript, 13 linespipes/ getNthElement.pipe.ts - src/
util/ , TypeScript, 12 linespipes/ getProperty.pipe.ts - src/
util/ , TypeScript, 12 linespipes/ getUnique.pipe.ts - src/
util/ , TypeScript, 12 linespipes/ mapToProperty.pipe.ts - src/
util/ , TypeScript, 12 linespipes/ nmToMm.pipe.ts - src/
util/ , TypeScript, 12 linespipes/ parseAsNumber.pipe.ts - src/
util/ , TypeScript, 18 linespipes/ safeResource.pipe.ts - src/
util/ , TypeScript, 8 linespretty-present.pipe.spec .ts - src/
util/ , TypeScript, 31 linespretty-present.pipe.ts - src/
util/ , TypeScript, 214 linespriority.ts - src/
util/ , TypeScript, 227 linespullable.ts - src/
util/ , TypeScript, 3 linesrecursivePartial.ts - src/
util/ , TypeScript, 81 linesregDereg.base.spec.ts - src/
util/ , TypeScript, 46 linesregDereg.base.ts - src/
util/ , TypeScript, 1 lineregionFlattener.spec.ts - src/
util/ , TypeScript, 6 linesregionFlattener.ts - src/
util/ , TypeScript, 29 linesside-panel/ side-panel.component.spe c.ts - src/
util/ , TypeScript, 14 linesside-panel/ side-panel.component.ts - src/
util/ , TypeScript, 8 linessiibraApiConstants/ fn.ts - src/
util/ , TypeScript, 199 linessiibraApiConstants/ types.ts - src/
util/ , TypeScript, 78 linestypes.ts - src/
util/ , TypeScript, 83 linesutil.module.ts - src/
util/ , TypeScript, 2 lineswindowResize/ index.ts - src/
util/ , TypeScript, 17 lineswindowResize/ module.ts - src/
util/ , TypeScript, 68 lineswindowResize/ windowResize.directive.t s - src/
util/ , TypeScript, 30 lineswindowResize/ windowResize.service.ts - src/
viewerModule/ , TypeScript, 36 linescomponentStore.ts - src/
viewerModule/ , TypeScript, 1 lineconstants.ts - src/
viewerModule/ , TypeScript, 2 linesindex.ts - src/
viewerModule/ , TypeScript, 1 lineleap/ index.ts - src/
viewerModule/ , TypeScript, 40 linesleap/ leapSignal/ leapSignal.component.ts - src/
viewerModule/ , TypeScript, 38 linesleap/ module.ts - src/
viewerModule/ , TypeScript, 252 linesleap/ service.ts - src/
viewerModule/ , TypeScript, 15 linesleap/ signal.directive.ts - src/
viewerModule/ , TypeScript, 170 linesmodule.ts - src/
viewerModule/ , TypeScript, 91 linesnehuba/ annotation/ service.ts - src/
viewerModule/ , TypeScript, 90 linesnehuba/ base.service/ base.service.ts - src/
viewerModule/ , TypeScript, 1 linenehuba/ config.service/ config.service.spec.ts - src/
viewerModule/ , TypeScript, 24 linesnehuba/ config.service/ index.ts - src/
viewerModule/ , TypeScript, 85 linesnehuba/ config.service/ type.ts - src/
viewerModule/ , TypeScript, 141 linesnehuba/ config.service/ util.spec.ts - src/
viewerModule/ , TypeScript, 441 linesnehuba/ config.service/ util.ts - src/
viewerModule/ , TypeScript, 80 linesnehuba/ constants.ts - src/
viewerModule/ , TypeScript, 5 linesnehuba/ index.ts - src/
viewerModule/ , TypeScript, 11 linesnehuba/ layerCtrl.service/ index.ts - src/
viewerModule/ , TypeScript, 281 linesnehuba/ layerCtrl.service/ layerCtrl.effects.ts - src/
viewerModule/ , TypeScript, 190 linesnehuba/ layerCtrl.service/ layerCtrl.service.spec.t s - src/
viewerModule/ , TypeScript, 448 linesnehuba/ layerCtrl.service/ layerCtrl.service.ts - src/
viewerModule/ , TypeScript, 70 linesnehuba/ layerCtrl.service/ layerCtrl.util.spec.ts - src/
viewerModule/ , TypeScript, 83 linesnehuba/ layerCtrl.service/ layerCtrl.util.ts - src/
viewerModule/ , TypeScript, 3 linesnehuba/ layoutOverlay/ index.ts - src/
viewerModule/ , TypeScript, 31 linesnehuba/ layoutOverlay/ module.ts - src/
viewerModule/ , TypeScript, 311 linesnehuba/ layoutOverlay/ nehuba.layoutOverlay/ nehuba.layoutOverlay.com ponent.ts - src/
viewerModule/ , TypeScript, 49 linesnehuba/ mesh.effects/ mesh.effects.ts - src/
viewerModule/ , TypeScript, 3 linesnehuba/ mesh.service/ index.ts - src/
viewerModule/ , TypeScript, 265 linesnehuba/ mesh.service/ mesh.service.spec.ts - src/
viewerModule/ , TypeScript, 166 linesnehuba/ mesh.service/ mesh.service.ts - src/
viewerModule/ , TypeScript, 123 linesnehuba/ module.ts - src/
viewerModule/ , TypeScript, 1 linenehuba/ navigation.service/ index.ts - src/
viewerModule/ , TypeScript, 47 linesnehuba/ navigation.service/ navigation.base.service. ts - src/
viewerModule/ , TypeScript, 163 linesnehuba/ navigation.service/ navigation.effects.ts - src/
viewerModule/ , TypeScript, 112 linesnehuba/ navigation.service/ navigation.util.spec.ts - src/
viewerModule/ , TypeScript, 51 linesnehuba/ navigation.service/ navigation.util.ts - src/
viewerModule/ , TypeScript, 428 linesnehuba/ nehubaViewer/ nehubaViewer.component.s pec.ts - src/
viewerModule/ , TypeScript, 1,077 linesnehuba/ nehubaViewer/ nehubaViewer.component.t s - src/
viewerModule/ , TypeScript, 173 lines, 1 matchnehuba/ nehubaViewerGlue/ nehubaViewerGlue.compone nt.spec.ts - src/
viewerModule/ , TypeScript, 96 linesnehuba/ nehubaViewerGlue/ nehubaViewerGlue.compone nt.ts - src/
viewerModule/ , TypeScript, 124 linesnehuba/ nehubaViewerInterface/ nehubaViewerContainer.co mponent.ts - src/
viewerModule/ , TypeScript, 189 linesnehuba/ nehubaViewerInterface/ nehubaViewerInterface.di rective.spec.ts - src/
viewerModule/ , TypeScript, 440 linesnehuba/ nehubaViewerInterface/ nehubaViewerInterface.di rective.ts - src/
viewerModule/ , TypeScript, 328 linesnehuba/ nehubaViewerInterface/ nehubaViewerTouch.direct ive.ts - src/
viewerModule/ , TypeScript, 1 linenehuba/ ngLayerCtlModule/ index.ts - src/
viewerModule/ , TypeScript, 26 linesnehuba/ ngLayerCtlModule/ module.ts - src/
viewerModule/ , TypeScript, 287 linesnehuba/ ngLayerCtlModule/ ngLayerCtl/ ngLayerCtrl.component.ts - src/
viewerModule/ , TypeScript, 206 linesnehuba/ statusCard/ statusCard.component.spe c.ts - src/
viewerModule/ , TypeScript, 398 linesnehuba/ statusCard/ statusCard.component.ts - src/
viewerModule/ , TypeScript, 25 linesnehuba/ store/ actions.ts - src/
viewerModule/ , TypeScript, 18 linesnehuba/ store/ index.ts - src/
viewerModule/ , TypeScript, 8 linesnehuba/ store/ selectors.ts - src/
viewerModule/ , TypeScript, 55 linesnehuba/ store/ store.ts - src/
viewerModule/ , TypeScript, 20 linesnehuba/ store/ type.ts - src/
viewerModule/ , TypeScript, 37 linesnehuba/ types.ts - src/
viewerModule/ , TypeScript, 752 linesnehuba/ userLayers/ service.ts - src/
viewerModule/ , TypeScript, 82 linesnehuba/ userLayers/ userlayerInfo/ userlayerInfo.component. ts - src/
viewerModule/ , TypeScript, 1 linenehuba/ util.spec.ts - src/
viewerModule/ , TypeScript, 285 linesnehuba/ util.ts - src/
viewerModule/ , TypeScript, 1 linenehuba/ viewerCtrl/ index.ts - src/
viewerModule/ , TypeScript, 35 linesnehuba/ viewerCtrl/ module.ts - src/
viewerModule/ , TypeScript, 541 linesnehuba/ viewerCtrl/ perspectiveViewSlider/ perspectiveViewSlider.co mponent.ts - src/
viewerModule/ , TypeScript, 34 linesnehuba/ viewerCtrl/ snapPerspectiveOrientati on/ snapPerspectiveOrientati on.component.spec.ts - src/
viewerModule/ , TypeScript, 72 linesnehuba/ viewerCtrl/ snapPerspectiveOrientati on/ snapPerspectiveOrientati on.component.ts - src/
viewerModule/ , TypeScript, 204 linesnehuba/ viewerCtrl/ viewerCtrlCmp/ viewerCtrlCmp.component. spec.ts - src/
viewerModule/ , TypeScript, 138 linesnehuba/ viewerCtrl/ viewerCtrlCmp/ viewerCtrlCmp.component. ts - src/
viewerModule/ , TypeScript, 44 linespipes/ nehubaVCtxToBbox.pipe.ts - src/
viewerModule/ , TypeScript, 1 linethreeSurfer/ index.ts - src/
viewerModule/ , TypeScript, 47 linesthreeSurfer/ lifecycle/ lifecycle.component.ts - src/
viewerModule/ , TypeScript, 39 linesthreeSurfer/ module.ts - src/
viewerModule/ , TypeScript, 9 linesthreeSurfer/ store/ actions.ts - src/
viewerModule/ , TypeScript, 1 linethreeSurfer/ store/ const.ts - src/
viewerModule/ , TypeScript, 143 linesthreeSurfer/ store/ effects.ts - src/
viewerModule/ , TypeScript, 5 linesthreeSurfer/ store/ index.ts - src/
viewerModule/ , TypeScript, 10 linesthreeSurfer/ store/ selectors.ts - src/
viewerModule/ , TypeScript, 24 linesthreeSurfer/ store/ store.ts - src/
viewerModule/ , TypeScript, 950 linesthreeSurfer/ threeSurferGlue/ threeSurfer.component.ts - src/
viewerModule/ , TypeScript, 13 linesthreeSurfer/ tsViewerConfig/ tsViewerConfig.component .ts - src/
viewerModule/ , TypeScript, 30 linesthreeSurfer/ types.ts - src/
viewerModule/ , TypeScript, 1 linethreeSurfer/ util.ts - src/
viewerModule/ , TypeScript, 29 linesviewer.common.effects.ts - src/
viewerModule/ , TypeScript, 86 linesviewer.interface.ts - src/
viewerModule/ , TypeScript, 15 linesviewerCmp/ viewerCmp.component.spec .ts - src/
viewerModule/ , TypeScript, 574 linesviewerCmp/ viewerCmp.component.ts - src/
viewerModule/ , TypeScript, 58 linesviewerInternalState.serv ice.ts - src/
viewerModule/ , TypeScript, 221 linesviewerWrapper/ viewerWrapper.component. ts - src/
widget/ , TypeScript, 31 linesconstants.ts - src/
widget/ , TypeScript, 4 linesindex.ts - src/
widget/ , TypeScript, 52 linesservice.ts - src/
widget/ , TypeScript, 28 lineswidget.module.ts - src/
widget/ , TypeScript, 15 lineswidgetCanvas.directive.t s - src/
widget/ , TypeScript, 83 lineswidgetPortal/ widgetPortal.component.t s - src/
widget/ , TypeScript, 26 lineswidgetStateIcon.pipe.ts - src/
zipFilesOutput/ , TypeScript, 38 linesdownloadSingleFile.direc tive.ts - src/
zipFilesOutput/ , TypeScript, 22 linesmodule.ts - src/
zipFilesOutput/ , TypeScript, 5 linestype.ts - src/
zipFilesOutput/ , TypeScript, 75 lineszipFilesOutput.directive .ts - third_party/
catchSyntaxError.js , JavaScript, 18 lines - third_party/
extra_js.js , JavaScript, 2 lines - third_party/
leap-0.6.4.js , JavaScript, 6,866 lines - third_party/
matomo/ , JavaScript, 19 linesincludeMatomo.js - third_party/
matomo/ , JavaScript, 48 linesprocessMatomo.js - third_party/
vanilla_nehuba.js , JavaScript, 26 lines - typings/
index.d.ts , TypeScript, 12 lines - worker/
worker-nifti.js , JavaScript, 653 lines - worker/
worker-plotly.js , JavaScript, 196 lines - worker/
worker-plotly.spec.js , JavaScript, 36 lines - worker/
worker-regionFilter.js , JavaScript, 111 lines - worker/
worker-typedarray.js , JavaScript, 203 lines - worker/
worker.js , JavaScript, 220 lines - LICENSE, License, 201 lines
- README.md, Text, 107 lines
FZJ-INM1-BDA/siibra-api
3af86fe2c1f9b7532203d05f47eb4f682b8108b7, 23 September 2026Availability: 1 check, the latest on 27 September 2026: the link answers
- 27 September 2026: the link answers
493 files
- .docker/
restart.sh , Shell, 10 lines - api/
common/ , Python, 5 lines__init__.py - api/
common/ , Python, 11 linesdata_handlers/ __init__.py - api/
common/ , Python, 1 linedata_handlers/ compounds/ __init__.py - api/
common/ , Python, 242 linesdata_handlers/ compounds/ download.py - api/
common/ , Python, 5 linesdata_handlers/ core/ __init__.py - api/
common/ , Python, 28 linesdata_handlers/ core/ atlas.py - api/
common/ , Python, 259 linesdata_handlers/ core/ misc.py - api/
common/ , Python, 28 linesdata_handlers/ core/ parcellation.py - api/
common/ , Python, 58 linesdata_handlers/ core/ region.py - api/
common/ , Python, 28 linesdata_handlers/ core/ space.py - api/
common/ , Python, 1 linedata_handlers/ features/ __init__.py - api/
common/ , Python, 24 linesdata_handlers/ features/ misc.py - api/
common/ , Python, 200 linesdata_handlers/ features/ types.py - api/
common/ , Python, 60 linesdata_handlers/ overrides.py - api/
common/ , Python, 1 linedata_handlers/ vocabularies/ __init__.py - api/
common/ , Python, 24 linesdata_handlers/ vocabularies/ gene.py - api/
common/ , Python, 154 linesdecorators.py - api/
common/ , Python, 28 linesexceptions.py - api/
common/ , Python, 63 lineslogger.py - api/
common/ , Python, 8 linessiibra_api_typing.py - api/
common/ , Python, 19 linesstorage.py - api/
common/ , Python, 50 linestimer.py - api/
models/ , Python, 22 lines__init__.py - api/
models/ , Python, 123 lines_commons.py - api/
models/ , Python, 1 line_retrieval/ __init__.py - api/
models/ , Python, 27 lines_retrieval/ datasets.py - api/
models/ , Python, 1 linecore/ __init__.py - api/
models/ , Python, 24 linescore/ _concept.py - api/
models/ , Python, 19 linescore/ atlas.py - api/
models/ , Python, 38 linescore/ parcellation.py - api/
models/ , Python, 36 linescore/ region.py - api/
models/ , Python, 26 linescore/ space.py - api/
models/ , Python, 2 linesfeatures/ __init__.py - api/
models/ , Python, 8 linesfeatures/ _basetypes/ __init__.py - api/
models/ , Python, 8 linesfeatures/ _basetypes/ cortical_profiles.py - api/
models/ , Python, 22 linesfeatures/ _basetypes/ feature.py - api/
models/ , Python, 9 linesfeatures/ _basetypes/ regional_connectivity.py - api/
models/ , Python, 14 linesfeatures/ _basetypes/ tabular.py - api/
models/ , Python, 8 linesfeatures/ _basetypes/ volume_of_interest.py - api/
models/ , Python, 32 linesfeatures/ anchor.py - api/
models/ , Python, 5 linesfeatures/ dataset/ ebrains.py - api/
models/ , Python, 5 linesfeatures/ molecular/ gene_expression.py - api/
models/ , Python, 7 linesfeatures/ molecular/ receptor_density_fingerp rint.py - api/
models/ , Python, 1 lineintents/ __init__.py - api/
models/ , Python, 5 linesintents/ base.py - api/
models/ , Python, 14 linesintents/ colorization.py - api/
models/ , Python, 1 linelocations/ __init__.py - api/
models/ , Python, 12 lineslocations/ boundingbox.py - api/
models/ , Python, 13 lineslocations/ location.py - api/
models/ , Python, 9 lineslocations/ point.py - api/
models/ , Python, 1 lineopenminds/ SANDS/ __init__.py - api/
models/ , Python, 1 lineopenminds/ SANDS/ v3/ __init__.py - api/
models/ , Python, 1 lineopenminds/ SANDS/ v3/ atlas/ __init__.py - api/
models/ , Python, 100 linesopenminds/ SANDS/ v3/ atlas/ atlasAnnotation.py - api/
models/ , Python, 99 linesopenminds/ SANDS/ v3/ atlas/ brainAtlas.py - api/
models/ , Python, 245 linesopenminds/ SANDS/ v3/ atlas/ brainAtlasVersion.py - api/
models/ , Python, 111 linesopenminds/ SANDS/ v3/ atlas/ commonCoordinateSpace.py - api/
models/ , Python, 51 linesopenminds/ SANDS/ v3/ atlas/ parcellationEntity.py - api/
models/ , Python, 223 linesopenminds/ SANDS/ v3/ atlas/ parcellationEntityVersio n.py - api/
models/ , Python, 32 linesopenminds/ SANDS/ v3/ atlas/ parcellationTerminology. py - api/
models/ , Python, 32 linesopenminds/ SANDS/ v3/ atlas/ parcellationTerminologyV ersion.py - api/
models/ , Python, 1 lineopenminds/ SANDS/ v3/ miscellaneous/ __init__.py - api/
models/ , Python, 45 linesopenminds/ SANDS/ v3/ miscellaneous/ coordinatePoint.py - api/
models/ , Python, 30 linesopenminds/ SANDS/ v3/ miscellaneous/ qualitativeRelationAsses sment.py - api/
models/ , Python, 71 linesopenminds/ SANDS/ v3/ miscellaneous/ quantitativeRelationAsse ssment.py - api/
models/ , Python, 1 lineopenminds/ SANDS/ v3/ non-atlas/ __init__.py - api/
models/ , Python, 205 linesopenminds/ SANDS/ v3/ non-atlas/ customAnatomicalEntity.p y - api/
models/ , Python, 106 linesopenminds/ SANDS/ v3/ non-atlas/ customAnnotation.py - api/
models/ , Python, 66 linesopenminds/ SANDS/ v3/ non-atlas/ customCoordinateSpace.py - api/
models/ , Python, 1 lineopenminds/ __init__.py - api/
models/ , Python, 129 linesopenminds/ _populate_static_models. py - api/
models/ , Python, 18 linesopenminds/ base.py - api/
models/ , Python, 1 lineopenminds/ computation/ __init__.py - api/
models/ , Python, 1 lineopenminds/ computation/ v1/ __init__.py - api/
models/ , Python, 100 linesopenminds/ computation/ v1/ dataAnalysis.py - api/
models/ , Python, 39 linesopenminds/ computation/ v1/ environment.py - api/
models/ , Python, 27 linesopenminds/ computation/ v1/ hardwareSystem.py - api/
models/ , Python, 40 linesopenminds/ computation/ v1/ launchConfiguration.py - api/
models/ , Python, 100 linesopenminds/ computation/ v1/ optimization.py - api/
models/ , Python, 100 linesopenminds/ computation/ v1/ simulation.py - api/
models/ , Python, 26 linesopenminds/ computation/ v1/ softwareAgent.py - api/
models/ , Python, 100 linesopenminds/ computation/ v1/ visualization.py - api/
models/ , Python, 18 linesopenminds/ computation/ v1/ workflowExecution.py - api/
models/ , Python, 1 lineopenminds/ controlledTerms/ __init__.py - api/
models/ , Python, 57 linesopenminds/ controlledTerms/ v1/ UBERONParcellation.py - api/
models/ , Python, 1 lineopenminds/ controlledTerms/ v1/ __init__.py - api/
models/ , Python, 57 linesopenminds/ controlledTerms/ v1/ actionStatusType.py - api/
models/ , Python, 57 linesopenminds/ controlledTerms/ v1/ ageCategory.py - api/
models/ , Python, 57 linesopenminds/ controlledTerms/ v1/ anatomicalAxesOrientatio n.py - api/
models/ , Python, 57 linesopenminds/ controlledTerms/ v1/ atlasType.py - api/
models/ , Python, 57 linesopenminds/ controlledTerms/ v1/ biologicalOrder.py - api/
models/ , Python, 57 linesopenminds/ controlledTerms/ v1/ biologicalSex.py - api/
models/ , Python, 57 linesopenminds/ controlledTerms/ v1/ breedingType.py - api/
models/ , Python, 57 linesopenminds/ controlledTerms/ v1/ cellType.py - api/
models/ , Python, 57 linesopenminds/ controlledTerms/ v1/ contributionType.py - api/
models/ , Python, 57 linesopenminds/ controlledTerms/ v1/ criteriaQualityType.py - api/
models/ , Python, 57 linesopenminds/ controlledTerms/ v1/ dataType.py - api/
models/ , Python, 57 linesopenminds/ controlledTerms/ v1/ deviceType.py - api/
models/ , Python, 57 linesopenminds/ controlledTerms/ v1/ disease.py - api/
models/ , Python, 57 linesopenminds/ controlledTerms/ v1/ diseaseModel.py - api/
models/ , Python, 57 linesopenminds/ controlledTerms/ v1/ ethicsAssessment.py - api/
models/ , Python, 57 linesopenminds/ controlledTerms/ v1/ experimentalApproach.py - api/
models/ , Python, 57 linesopenminds/ controlledTerms/ v1/ fileBundleGrouping.py - api/
models/ , Python, 57 linesopenminds/ controlledTerms/ v1/ fileRepositoryType.py - api/
models/ , Python, 57 linesopenminds/ controlledTerms/ v1/ fileUsageRole.py - api/
models/ , Python, 57 linesopenminds/ controlledTerms/ v1/ geneticStrainType.py - api/
models/ , Python, 57 linesopenminds/ controlledTerms/ v1/ handedness.py - api/
models/ , Python, 57 linesopenminds/ controlledTerms/ v1/ language.py - api/
models/ , Python, 57 linesopenminds/ controlledTerms/ v1/ laterality.py - api/
models/ , Python, 57 linesopenminds/ controlledTerms/ v1/ metaDataModelType.py - api/
models/ , Python, 57 linesopenminds/ controlledTerms/ v1/ modelAbstractionLevel.py - api/
models/ , Python, 57 linesopenminds/ controlledTerms/ v1/ modelScope.py - api/
models/ , Python, 57 linesopenminds/ controlledTerms/ v1/ molecularEntity.py - api/
models/ , Python, 57 linesopenminds/ controlledTerms/ v1/ operatingDevice.py - api/
models/ , Python, 57 linesopenminds/ controlledTerms/ v1/ operatingSystem.py - api/
models/ , Python, 57 linesopenminds/ controlledTerms/ v1/ organ.py - api/
models/ , Python, 57 linesopenminds/ controlledTerms/ v1/ preparationType.py - api/
models/ , Python, 57 linesopenminds/ controlledTerms/ v1/ productAccessibility.py - api/
models/ , Python, 57 linesopenminds/ controlledTerms/ v1/ programmingLanguage.py - api/
models/ , Python, 57 linesopenminds/ controlledTerms/ v1/ qualitativeOverlap.py - api/
models/ , Python, 57 linesopenminds/ controlledTerms/ v1/ semanticDataType.py - api/
models/ , Python, 57 linesopenminds/ controlledTerms/ v1/ service.py - api/
models/ , Python, 57 linesopenminds/ controlledTerms/ v1/ softwareApplicationCateg ory.py - api/
models/ , Python, 57 linesopenminds/ controlledTerms/ v1/ softwareFeature.py - api/
models/ , Python, 57 linesopenminds/ controlledTerms/ v1/ species.py - api/
models/ , Python, 57 linesopenminds/ controlledTerms/ v1/ stimulationApproach.py - api/
models/ , Python, 57 linesopenminds/ controlledTerms/ v1/ stimulusType.py - api/
models/ , Python, 57 linesopenminds/ controlledTerms/ v1/ subjectAttribute.py - api/
models/ , Python, 57 linesopenminds/ controlledTerms/ v1/ technique.py - api/
models/ , Python, 71 linesopenminds/ controlledTerms/ v1/ termSuggestion.py - api/
models/ , Python, 57 linesopenminds/ controlledTerms/ v1/ terminology.py - api/
models/ , Python, 57 linesopenminds/ controlledTerms/ v1/ tissueSampleAttribute.py - api/
models/ , Python, 57 linesopenminds/ controlledTerms/ v1/ tissueSampleType.py - api/
models/ , Python, 57 linesopenminds/ controlledTerms/ v1/ typeOfUncertainty.py - api/
models/ , Python, 57 linesopenminds/ controlledTerms/ v1/ unitOfMeasurement.py - api/
models/ , Python, 1 lineopenminds/ core/ __init__.py - api/
models/ , Python, 1 lineopenminds/ core/ v4/ __init__.py - api/
models/ , Python, 1 lineopenminds/ core/ v4/ actors/ __init__.py - api/
models/ , Python, 31 linesopenminds/ core/ v4/ actors/ affiliation.py - api/
models/ , Python, 16 linesopenminds/ core/ v4/ actors/ contactInformation.py - api/
models/ , Python, 25 linesopenminds/ core/ v4/ actors/ contribution.py - api/
models/ , Python, 43 linesopenminds/ core/ v4/ actors/ organization.py - api/
models/ , Python, 62 linesopenminds/ core/ v4/ actors/ person.py - api/
models/ , Python, 1 lineopenminds/ core/ v4/ data/ __init__.py - api/
models/ , Python, 56 linesopenminds/ core/ v4/ data/ contentType.py - api/
models/ , Python, 23 linesopenminds/ core/ v4/ data/ contentTypePattern.py - api/
models/ , Python, 25 linesopenminds/ core/ v4/ data/ copyright.py - api/
models/ , Python, 112 linesopenminds/ core/ v4/ data/ file.py - api/
models/ , Python, 94 linesopenminds/ core/ v4/ data/ fileBundle.py - api/
models/ , Python, 20 linesopenminds/ core/ v4/ data/ filePathPattern.py - api/
models/ , Python, 108 linesopenminds/ core/ v4/ data/ fileRepository.py - api/
models/ , Python, 25 linesopenminds/ core/ v4/ data/ fileRepositoryStructure. py - api/
models/ , Python, 22 linesopenminds/ core/ v4/ data/ hash.py - api/
models/ , Python, 37 linesopenminds/ core/ v4/ data/ license.py - api/
models/ , Python, 29 linesopenminds/ core/ v4/ data/ serviceLink.py - api/
models/ , Python, 18 linesopenminds/ core/ v4/ miscellaneous/ DOI.py - api/
models/ , Python, 18 linesopenminds/ core/ v4/ miscellaneous/ GRIDID.py - api/
models/ , Python, 18 linesopenminds/ core/ v4/ miscellaneous/ ISBN.py - api/
models/ , Python, 18 linesopenminds/ core/ v4/ miscellaneous/ ORCID.py - api/
models/ , Python, 18 linesopenminds/ core/ v4/ miscellaneous/ RORID.py - api/
models/ , Python, 18 linesopenminds/ core/ v4/ miscellaneous/ RRID.py - api/
models/ , Python, 18 linesopenminds/ core/ v4/ miscellaneous/ SWHID.py - api/
models/ , Python, 13 linesopenminds/ core/ v4/ miscellaneous/ URL.py - api/
models/ , Python, 1 lineopenminds/ core/ v4/ miscellaneous/ __init__.py - api/
models/ , Python, 36 linesopenminds/ core/ v4/ miscellaneous/ funding.py - api/
models/ , Python, 40 linesopenminds/ core/ v4/ miscellaneous/ quantitativeValue.py - api/
models/ , Python, 34 linesopenminds/ core/ v4/ miscellaneous/ quantitativeValueRange.p y - api/
models/ , Python, 21 linesopenminds/ core/ v4/ miscellaneous/ stockNumber.py - api/
models/ , Python, 1 lineopenminds/ core/ v4/ products/ __init__.py - api/
models/ , Python, 71 linesopenminds/ core/ v4/ products/ dataset.py - api/
models/ , Python, 253 linesopenminds/ core/ v4/ products/ datasetVersion.py - api/
models/ , Python, 71 linesopenminds/ core/ v4/ products/ metaDataModel.py - api/
models/ , Python, 222 linesopenminds/ core/ v4/ products/ metaDataModelVersion.py - api/
models/ , Python, 90 linesopenminds/ core/ v4/ products/ model.py - api/
models/ , Python, 219 linesopenminds/ core/ v4/ products/ modelVersion.py - api/
models/ , Python, 50 linesopenminds/ core/ v4/ products/ project.py - api/
models/ , Python, 71 linesopenminds/ core/ v4/ products/ software.py - api/
models/ , Python, 262 linesopenminds/ core/ v4/ products/ softwareVersion.py - api/
models/ , Python, 1 lineopenminds/ core/ v4/ research/ __init__.py - api/
models/ , Python, 36 linesopenminds/ core/ v4/ research/ behavioralProtocol.py - api/
models/ , Python, 65 linesopenminds/ core/ v4/ research/ numericalParameter.py - api/
models/ , Python, 86 linesopenminds/ core/ v4/ research/ parameterSet.py - api/
models/ , Python, 37 linesopenminds/ core/ v4/ research/ protocol.py - api/
models/ , Python, 161 linesopenminds/ core/ v4/ research/ protocolExecution.py - api/
models/ , Python, 33 linesopenminds/ core/ v4/ research/ stimulation.py - api/
models/ , Python, 102 linesopenminds/ core/ v4/ research/ strain.py - api/
models/ , Python, 22 linesopenminds/ core/ v4/ research/ stringParameter.py - api/
models/ , Python, 49 linesopenminds/ core/ v4/ research/ subject.py - api/
models/ , Python, 56 linesopenminds/ core/ v4/ research/ subjectGroup.py - api/
models/ , Python, 148 linesopenminds/ core/ v4/ research/ subjectGroupState.py - api/
models/ , Python, 146 linesopenminds/ core/ v4/ research/ subjectState.py - api/
models/ , Python, 75 linesopenminds/ core/ v4/ research/ tissueSample.py - api/
models/ , Python, 84 linesopenminds/ core/ v4/ research/ tissueSampleCollection.p y - api/
models/ , Python, 140 linesopenminds/ core/ v4/ research/ tissueSampleCollectionSt ate.py - api/
models/ , Python, 140 linesopenminds/ core/ v4/ research/ tissueSampleState.py - api/
models/ , Python, 1 lineutil/ __init__.py - api/
models/ , Python, 47 linesutil/ numpyarray.py - api/
models/ , Python, 1 linevocabularies/ __init__.py - api/
models/ , Python, 7 linesvocabularies/ base.py - api/
models/ , Python, 5 linesvocabularies/ genes.py - api/
models/ , Python, 4 linesvolumes/ __init__.py - api/
models/ , Python, 15 linesvolumes/ parcellationmap.py - api/
models/ , Python, 33 linesvolumes/ volume.py - api/
serialization/ , Python, 14 lines__init__.py - api/
serialization/ , Python, 73 lines_common.py - api/
serialization/ , Python, 1 line_retrieval/ __init__.py - api/
serialization/ , Python, 41 lines_retrieval/ datasets.py - api/
serialization/ , Python, 8 linescore/ __init__.py - api/
serialization/ , Python, 23 linescore/ _concept.py - api/
serialization/ , Python, 75 linescore/ atlas.py - api/
serialization/ , Python, 104 linescore/ parcellation.py - api/
serialization/ , Python, 199 linescore/ region.py - api/
serialization/ , Python, 37 linescore/ space.py - api/
serialization/ , Python, 1 linefeatures/ __init__.py - api/
serialization/ , Python, 7 linesfeatures/ _basetypes/ __init__.py - api/
serialization/ , Python, 27 linesfeatures/ _basetypes/ cortical_profiles.py - api/
serialization/ , Python, 24 linesfeatures/ _basetypes/ feature.py - api/
serialization/ , Python, 27 linesfeatures/ _basetypes/ regional_connectivity.py - api/
serialization/ , Python, 26 linesfeatures/ _basetypes/ tabular.py - api/
serialization/ , Python, 31 linesfeatures/ _basetypes/ volume_of_interest.py - api/
serialization/ , Python, 45 linesfeatures/ anchor.py - api/
serialization/ , Python, 1 linefeatures/ dataset/ __init__.py - api/
serialization/ , Python, 18 linesfeatures/ dataset/ ebrains.py - api/
serialization/ , Python, 1 linefeatures/ molecular/ __init__.py - api/
serialization/ , Python, 9 linesfeatures/ molecular/ gene_expression.py - api/
serialization/ , Python, 15 linesfeatures/ molecular/ receptor_density_fingerp rint.py - api/
serialization/ , Python, 1 linelocations/ __init__.py - api/
serialization/ , Python, 23 lineslocations/ boundingbox.py - api/
serialization/ , Python, 16 lineslocations/ location.py - api/
serialization/ , Python, 32 lineslocations/ point.py - api/
serialization/ , Python, 101 linesutil/ __init__.py - api/
serialization/ , Python, 43 linesutil/ siibra.py - api/
serialization/ , Python, 2 linesvolumes/ __init__.py - api/
serialization/ , Python, 28 linesvolumes/ parcellationmap.py - api/
serialization/ , Python, 60 linesvolumes/ volume.py - api/
server/ , Python, 14 lines__init__.py - api/
server/ , Python, 423 linesapi.py - api/
server/ , Python, 26 linescache/ __init__.py - api/
server/ , Python, 160 linescache/ redis.py - api/
server/ , Python, 119 linescode_snippet.py - api/
server/ , Python, 6 linescompounds/ __init__.py - api/
server/ , Python, 93 linescompounds/ download.py - api/
server/ , Python, 15 linesconst.py - api/
server/ , Python, 9 linescore/ __init__.py - api/
server/ , Python, 34 linescore/ atlas.py - api/
server/ , Python, 35 linescore/ parcellation.py - api/
server/ , Python, 51 linescore/ region.py - api/
server/ , Python, 34 linescore/ space.py - api/
server/ , Python, 335 linesfeatures/ __init__.py - api/
server/ , Python, 38 linesfeatures/ util.py - api/
server/ , Python, 238 linesmetrics.py - api/
server/ , Python, 97 linesutil.py - api/
server/ , Python, 26 linesvolcabularies/ __init__.py - api/
server/ , Python, 8 linesvolumes/ __init__.py - api/
server/ , Python, 43 linesvolumes/ maps.py - api/
server/ , Python, 140 linesvolumes/ parcellationmap.py - api/
siibra_api_config.py , Python, 145 lines - api/
worker/ , Python, 3 lines__init__.py - api/
worker/ , Python, 10 linesapp.py - e2e_test/
__init__.py , Python, 1 line - e2e_test/
regions/ , Python, 1 line__init__.py - e2e_test/
regions/ , Python, 23 linestest_related.py - e2e_test/
vocabularies/ , Python, 1 line__init__.py - e2e_test/
vocabularies/ , Python, 22 linestest_genes.py - new_api/
common/ , Python, 1 line__init__.py - new_api/
common/ , Python, 45 linesdecorators.py - new_api/
common/ , Python, 28 linesexceptions.py - new_api/
common/ , Python, 63 lineslogger.py - new_api/
common/ , Python, 19 linesstorage.py - new_api/
data_handlers/ , Python, 1 line__init__.py - new_api/
data_handlers/ , Python, 1,530 linesdata.py - new_api/
data_handlers/ , Python, 32 linesfeatures.py - new_api/
data_handlers/ , Python, 96 linesmaps.py - new_api/
data_handlers/ , Python, 60 linesoverrides.py - new_api/
run_warmup.py , Python, 6 lines - new_api/
siibra_api_config.py , Python, 139 lines - new_api/
v3/ , Python, 1 line__init__.py - new_api/
v3/ , Python, 22 linesmodels/ __init__.py - new_api/
v3/ , Python, 124 linesmodels/ _commons.py - new_api/
v3/ , Python, 1 linemodels/ _retrieval/ __init__.py - new_api/
v3/ , Python, 27 linesmodels/ _retrieval/ datasets.py - new_api/
v3/ , Python, 1 linemodels/ core/ __init__.py - new_api/
v3/ , Python, 24 linesmodels/ core/ _concept.py - new_api/
v3/ , Python, 19 linesmodels/ core/ atlas.py - new_api/
v3/ , Python, 37 linesmodels/ core/ parcellation.py - new_api/
v3/ , Python, 36 linesmodels/ core/ region.py - new_api/
v3/ , Python, 27 linesmodels/ core/ space.py - new_api/
v3/ , Python, 2 linesmodels/ features/ __init__.py - new_api/
v3/ , Python, 8 linesmodels/ features/ _basetypes/ __init__.py - new_api/
v3/ , Python, 8 linesmodels/ features/ _basetypes/ cortical_profiles.py - new_api/
v3/ , Python, 22 linesmodels/ features/ _basetypes/ feature.py - new_api/
v3/ , Python, 9 linesmodels/ features/ _basetypes/ regional_connectivity.py - new_api/
v3/ , Python, 14 linesmodels/ features/ _basetypes/ tabular.py - new_api/
v3/ , Python, 8 linesmodels/ features/ _basetypes/ volume_of_interest.py - new_api/
v3/ , Python, 32 linesmodels/ features/ anchor.py - new_api/
v3/ , Python, 5 linesmodels/ features/ dataset/ ebrains.py - new_api/
v3/ , Python, 5 linesmodels/ features/ molecular/ gene_expression.py - new_api/
v3/ , Python, 7 linesmodels/ features/ molecular/ receptor_density_fingerp rint.py - new_api/
v3/ , Python, 1 linemodels/ intents/ __init__.py - new_api/
v3/ , Python, 5 linesmodels/ intents/ base.py - new_api/
v3/ , Python, 14 linesmodels/ intents/ colorization.py - new_api/
v3/ , Python, 1 linemodels/ locations/ __init__.py - new_api/
v3/ , Python, 12 linesmodels/ locations/ boundingbox.py - new_api/
v3/ , Python, 13 linesmodels/ locations/ location.py - new_api/
v3/ , Python, 9 linesmodels/ locations/ point.py - new_api/
v3/ , Python, 1 linemodels/ openminds/ SANDS/ __init__.py - new_api/
v3/ , Python, 1 linemodels/ openminds/ SANDS/ v3/ __init__.py - new_api/
v3/ , Python, 1 linemodels/ openminds/ SANDS/ v3/ atlas/ __init__.py - new_api/
v3/ , Python, 100 linesmodels/ openminds/ SANDS/ v3/ atlas/ atlasAnnotation.py - new_api/
v3/ , Python, 99 linesmodels/ openminds/ SANDS/ v3/ atlas/ brainAtlas.py - new_api/
v3/ , Python, 245 linesmodels/ openminds/ SANDS/ v3/ atlas/ brainAtlasVersion.py - new_api/
v3/ , Python, 111 linesmodels/ openminds/ SANDS/ v3/ atlas/ commonCoordinateSpace.py - new_api/
v3/ , Python, 51 linesmodels/ openminds/ SANDS/ v3/ atlas/ parcellationEntity.py - new_api/
v3/ , Python, 223 linesmodels/ openminds/ SANDS/ v3/ atlas/ parcellationEntityVersio n.py - new_api/
v3/ , Python, 32 linesmodels/ openminds/ SANDS/ v3/ atlas/ parcellationTerminology. py - new_api/
v3/ , Python, 32 linesmodels/ openminds/ SANDS/ v3/ atlas/ parcellationTerminologyV ersion.py - new_api/
v3/ , Python, 1 linemodels/ openminds/ SANDS/ v3/ miscellaneous/ __init__.py - new_api/
v3/ , Python, 45 linesmodels/ openminds/ SANDS/ v3/ miscellaneous/ coordinatePoint.py - new_api/
v3/ , Python, 30 linesmodels/ openminds/ SANDS/ v3/ miscellaneous/ qualitativeRelationAsses sment.py - new_api/
v3/ , Python, 71 linesmodels/ openminds/ SANDS/ v3/ miscellaneous/ quantitativeRelationAsse ssment.py - new_api/
v3/ , Python, 1 linemodels/ openminds/ SANDS/ v3/ non-atlas/ __init__.py - new_api/
v3/ , Python, 205 linesmodels/ openminds/ SANDS/ v3/ non-atlas/ customAnatomicalEntity.p y - new_api/
v3/ , Python, 106 linesmodels/ openminds/ SANDS/ v3/ non-atlas/ customAnnotation.py - new_api/
v3/ , Python, 66 linesmodels/ openminds/ SANDS/ v3/ non-atlas/ customCoordinateSpace.py - new_api/
v3/ , Python, 1 linemodels/ openminds/ __init__.py - new_api/
v3/ , Python, 129 linesmodels/ openminds/ _populate_static_models. py - new_api/
v3/ , Python, 18 linesmodels/ openminds/ base.py - new_api/
v3/ , Python, 1 linemodels/ openminds/ computation/ __init__.py - new_api/
v3/ , Python, 1 linemodels/ openminds/ computation/ v1/ __init__.py - new_api/
v3/ , Python, 100 linesmodels/ openminds/ computation/ v1/ dataAnalysis.py - new_api/
v3/ , Python, 39 linesmodels/ openminds/ computation/ v1/ environment.py - new_api/
v3/ , Python, 27 linesmodels/ openminds/ computation/ v1/ hardwareSystem.py - new_api/
v3/ , Python, 40 linesmodels/ openminds/ computation/ v1/ launchConfiguration.py - new_api/
v3/ , Python, 100 linesmodels/ openminds/ computation/ v1/ optimization.py - new_api/
v3/ , Python, 100 linesmodels/ openminds/ computation/ v1/ simulation.py - new_api/
v3/ , Python, 26 linesmodels/ openminds/ computation/ v1/ softwareAgent.py - new_api/
v3/ , Python, 100 linesmodels/ openminds/ computation/ v1/ visualization.py - new_api/
v3/ , Python, 18 linesmodels/ openminds/ computation/ v1/ workflowExecution.py - new_api/
v3/ , Python, 1 linemodels/ openminds/ controlledTerms/ __init__.py - new_api/
v3/ , Python, 57 linesmodels/ openminds/ controlledTerms/ v1/ UBERONParcellation.py - new_api/
v3/ , Python, 1 linemodels/ openminds/ controlledTerms/ v1/ __init__.py - new_api/
v3/ , Python, 57 linesmodels/ openminds/ controlledTerms/ v1/ actionStatusType.py - new_api/
v3/ , Python, 57 linesmodels/ openminds/ controlledTerms/ v1/ ageCategory.py - new_api/
v3/ , Python, 57 linesmodels/ openminds/ controlledTerms/ v1/ anatomicalAxesOrientatio n.py - new_api/
v3/ , Python, 57 linesmodels/ openminds/ controlledTerms/ v1/ atlasType.py - new_api/
v3/ , Python, 57 linesmodels/ openminds/ controlledTerms/ v1/ biologicalOrder.py - new_api/
v3/ , Python, 57 linesmodels/ openminds/ controlledTerms/ v1/ biologicalSex.py - new_api/
v3/ , Python, 57 linesmodels/ openminds/ controlledTerms/ v1/ breedingType.py - new_api/
v3/ , Python, 57 linesmodels/ openminds/ controlledTerms/ v1/ cellType.py - new_api/
v3/ , Python, 57 linesmodels/ openminds/ controlledTerms/ v1/ contributionType.py - new_api/
v3/ , Python, 57 linesmodels/ openminds/ controlledTerms/ v1/ criteriaQualityType.py - new_api/
v3/ , Python, 57 linesmodels/ openminds/ controlledTerms/ v1/ dataType.py - new_api/
v3/ , Python, 57 linesmodels/ openminds/ controlledTerms/ v1/ deviceType.py - new_api/
v3/ , Python, 57 linesmodels/ openminds/ controlledTerms/ v1/ disease.py - new_api/
v3/ , Python, 57 linesmodels/ openminds/ controlledTerms/ v1/ diseaseModel.py - new_api/
v3/ , Python, 57 linesmodels/ openminds/ controlledTerms/ v1/ ethicsAssessment.py - new_api/
v3/ , Python, 57 linesmodels/ openminds/ controlledTerms/ v1/ experimentalApproach.py - new_api/
v3/ , Python, 57 linesmodels/ openminds/ controlledTerms/ v1/ fileBundleGrouping.py - new_api/
v3/ , Python, 57 linesmodels/ openminds/ controlledTerms/ v1/ fileRepositoryType.py - new_api/
v3/ , Python, 57 linesmodels/ openminds/ controlledTerms/ v1/ fileUsageRole.py - new_api/
v3/ , Python, 57 linesmodels/ openminds/ controlledTerms/ v1/ geneticStrainType.py - new_api/
v3/ , Python, 57 linesmodels/ openminds/ controlledTerms/ v1/ handedness.py - new_api/
v3/ , Python, 57 linesmodels/ openminds/ controlledTerms/ v1/ language.py - new_api/
v3/ , Python, 57 linesmodels/ openminds/ controlledTerms/ v1/ laterality.py - new_api/
v3/ , Python, 57 linesmodels/ openminds/ controlledTerms/ v1/ metaDataModelType.py - new_api/
v3/ , Python, 57 linesmodels/ openminds/ controlledTerms/ v1/ modelAbstractionLevel.py - new_api/
v3/ , Python, 57 linesmodels/ openminds/ controlledTerms/ v1/ modelScope.py - new_api/
v3/ , Python, 57 linesmodels/ openminds/ controlledTerms/ v1/ molecularEntity.py - new_api/
v3/ , Python, 57 linesmodels/ openminds/ controlledTerms/ v1/ operatingDevice.py - new_api/
v3/ , Python, 57 linesmodels/ openminds/ controlledTerms/ v1/ operatingSystem.py - new_api/
v3/ , Python, 57 linesmodels/ openminds/ controlledTerms/ v1/ organ.py - new_api/
v3/ , Python, 57 linesmodels/ openminds/ controlledTerms/ v1/ preparationType.py - new_api/
v3/ , Python, 57 linesmodels/ openminds/ controlledTerms/ v1/ productAccessibility.py - new_api/
v3/ , Python, 57 linesmodels/ openminds/ controlledTerms/ v1/ programmingLanguage.py - new_api/
v3/ , Python, 57 linesmodels/ openminds/ controlledTerms/ v1/ qualitativeOverlap.py - new_api/
v3/ , Python, 57 linesmodels/ openminds/ controlledTerms/ v1/ semanticDataType.py - new_api/
v3/ , Python, 57 linesmodels/ openminds/ controlledTerms/ v1/ service.py - new_api/
v3/ , Python, 57 linesmodels/ openminds/ controlledTerms/ v1/ softwareApplicationCateg ory.py - new_api/
v3/ , Python, 57 linesmodels/ openminds/ controlledTerms/ v1/ softwareFeature.py - new_api/
v3/ , Python, 57 linesmodels/ openminds/ controlledTerms/ v1/ species.py - new_api/
v3/ , Python, 57 linesmodels/ openminds/ controlledTerms/ v1/ stimulationApproach.py - new_api/
v3/ , Python, 57 linesmodels/ openminds/ controlledTerms/ v1/ stimulusType.py - new_api/
v3/ , Python, 57 linesmodels/ openminds/ controlledTerms/ v1/ subjectAttribute.py - new_api/
v3/ , Python, 57 linesmodels/ openminds/ controlledTerms/ v1/ technique.py - new_api/
v3/ , Python, 71 linesmodels/ openminds/ controlledTerms/ v1/ termSuggestion.py - new_api/
v3/ , Python, 57 linesmodels/ openminds/ controlledTerms/ v1/ terminology.py - new_api/
v3/ , Python, 57 linesmodels/ openminds/ controlledTerms/ v1/ tissueSampleAttribute.py - new_api/
v3/ , Python, 57 linesmodels/ openminds/ controlledTerms/ v1/ tissueSampleType.py - new_api/
v3/ , Python, 57 linesmodels/ openminds/ controlledTerms/ v1/ typeOfUncertainty.py - new_api/
v3/ , Python, 57 linesmodels/ openminds/ controlledTerms/ v1/ unitOfMeasurement.py - new_api/
v3/ , Python, 1 linemodels/ openminds/ core/ __init__.py - new_api/
v3/ , Python, 1 linemodels/ openminds/ core/ v4/ __init__.py - new_api/
v3/ , Python, 1 linemodels/ openminds/ core/ v4/ actors/ __init__.py - new_api/
v3/ , Python, 31 linesmodels/ openminds/ core/ v4/ actors/ affiliation.py - new_api/
v3/ , Python, 16 linesmodels/ openminds/ core/ v4/ actors/ contactInformation.py - new_api/
v3/ , Python, 25 linesmodels/ openminds/ core/ v4/ actors/ contribution.py - new_api/
v3/ , Python, 43 linesmodels/ openminds/ core/ v4/ actors/ organization.py - new_api/
v3/ , Python, 62 linesmodels/ openminds/ core/ v4/ actors/ person.py - new_api/
v3/ , Python, 1 linemodels/ openminds/ core/ v4/ data/ __init__.py - new_api/
v3/ , Python, 56 linesmodels/ openminds/ core/ v4/ data/ contentType.py - new_api/
v3/ , Python, 23 linesmodels/ openminds/ core/ v4/ data/ contentTypePattern.py - new_api/
v3/ , Python, 25 linesmodels/ openminds/ core/ v4/ data/ copyright.py - new_api/
v3/ , Python, 112 linesmodels/ openminds/ core/ v4/ data/ file.py - new_api/
v3/ , Python, 94 linesmodels/ openminds/ core/ v4/ data/ fileBundle.py - new_api/
v3/ , Python, 20 linesmodels/ openminds/ core/ v4/ data/ filePathPattern.py - new_api/
v3/ , Python, 108 linesmodels/ openminds/ core/ v4/ data/ fileRepository.py - new_api/
v3/ , Python, 25 linesmodels/ openminds/ core/ v4/ data/ fileRepositoryStructure. py - new_api/
v3/ , Python, 22 linesmodels/ openminds/ core/ v4/ data/ hash.py - new_api/
v3/ , Python, 37 linesmodels/ openminds/ core/ v4/ data/ license.py - new_api/
v3/ , Python, 29 linesmodels/ openminds/ core/ v4/ data/ serviceLink.py - new_api/
v3/ , Python, 18 linesmodels/ openminds/ core/ v4/ miscellaneous/ DOI.py - new_api/
v3/ , Python, 18 linesmodels/ openminds/ core/ v4/ miscellaneous/ GRIDID.py - new_api/
v3/ , Python, 18 linesmodels/ openminds/ core/ v4/ miscellaneous/ ISBN.py - new_api/
v3/ , Python, 18 linesmodels/ openminds/ core/ v4/ miscellaneous/ ORCID.py - new_api/
v3/ , Python, 18 linesmodels/ openminds/ core/ v4/ miscellaneous/ RORID.py - new_api/
v3/ , Python, 18 linesmodels/ openminds/ core/ v4/ miscellaneous/ RRID.py - new_api/
v3/ , Python, 18 linesmodels/ openminds/ core/ v4/ miscellaneous/ SWHID.py - new_api/
v3/ , Python, 13 linesmodels/ openminds/ core/ v4/ miscellaneous/ URL.py - new_api/
v3/ , Python, 1 linemodels/ openminds/ core/ v4/ miscellaneous/ __init__.py - new_api/
v3/ , Python, 36 linesmodels/ openminds/ core/ v4/ miscellaneous/ funding.py - new_api/
v3/ , Python, 40 linesmodels/ openminds/ core/ v4/ miscellaneous/ quantitativeValue.py - new_api/
v3/ , Python, 34 linesmodels/ openminds/ core/ v4/ miscellaneous/ quantitativeValueRange.p y - new_api/
v3/ , Python, 21 linesmodels/ openminds/ core/ v4/ miscellaneous/ stockNumber.py - new_api/
v3/ , Python, 1 linemodels/ openminds/ core/ v4/ products/ __init__.py - new_api/
v3/ , Python, 71 linesmodels/ openminds/ core/ v4/ products/ dataset.py - new_api/
v3/ , Python, 253 linesmodels/ openminds/ core/ v4/ products/ datasetVersion.py - new_api/
v3/ , Python, 71 linesmodels/ openminds/ core/ v4/ products/ metaDataModel.py - new_api/
v3/ , Python, 222 linesmodels/ openminds/ core/ v4/ products/ metaDataModelVersion.py - new_api/
v3/ , Python, 90 linesmodels/ openminds/ core/ v4/ products/ model.py - new_api/
v3/ , Python, 219 linesmodels/ openminds/ core/ v4/ products/ modelVersion.py - new_api/
v3/ , Python, 50 linesmodels/ openminds/ core/ v4/ products/ project.py - new_api/
v3/ , Python, 71 linesmodels/ openminds/ core/ v4/ products/ software.py - new_api/
v3/ , Python, 262 linesmodels/ openminds/ core/ v4/ products/ softwareVersion.py - new_api/
v3/ , Python, 1 linemodels/ openminds/ core/ v4/ research/ __init__.py - new_api/
v3/ , Python, 36 linesmodels/ openminds/ core/ v4/ research/ behavioralProtocol.py - new_api/
v3/ , Python, 65 linesmodels/ openminds/ core/ v4/ research/ numericalParameter.py - new_api/
v3/ , Python, 86 linesmodels/ openminds/ core/ v4/ research/ parameterSet.py - new_api/
v3/ , Python, 37 linesmodels/ openminds/ core/ v4/ research/ protocol.py - new_api/
v3/ , Python, 161 linesmodels/ openminds/ core/ v4/ research/ protocolExecution.py - new_api/
v3/ , Python, 33 linesmodels/ openminds/ core/ v4/ research/ stimulation.py - new_api/
v3/ , Python, 102 linesmodels/ openminds/ core/ v4/ research/ strain.py - new_api/
v3/ , Python, 22 linesmodels/ openminds/ core/ v4/ research/ stringParameter.py - new_api/
v3/ , Python, 49 linesmodels/ openminds/ core/ v4/ research/ subject.py - new_api/
v3/ , Python, 56 linesmodels/ openminds/ core/ v4/ research/ subjectGroup.py - new_api/
v3/ , Python, 148 linesmodels/ openminds/ core/ v4/ research/ subjectGroupState.py - new_api/
v3/ , Python, 146 linesmodels/ openminds/ core/ v4/ research/ subjectState.py - new_api/
v3/ , Python, 75 linesmodels/ openminds/ core/ v4/ research/ tissueSample.py - new_api/
v3/ , Python, 84 linesmodels/ openminds/ core/ v4/ research/ tissueSampleCollection.p y - new_api/
v3/ , Python, 140 linesmodels/ openminds/ core/ v4/ research/ tissueSampleCollectionSt ate.py - new_api/
v3/ , Python, 140 linesmodels/ openminds/ core/ v4/ research/ tissueSampleState.py - new_api/
v3/ , Python, 1 linemodels/ util/ __init__.py - new_api/
v3/ , Python, 47 linesmodels/ util/ numpyarray.py - new_api/
v3/ , Python, 1 linemodels/ vocabularies/ __init__.py - new_api/
v3/ , Python, 7 linesmodels/ vocabularies/ base.py - new_api/
v3/ , Python, 5 linesmodels/ vocabularies/ genes.py - new_api/
v3/ , Python, 4 linesmodels/ volumes/ __init__.py - new_api/
v3/ , Python, 13 linesmodels/ volumes/ parcellationmap.py - new_api/
v3/ , Python, 33 linesmodels/ volumes/ volume.py - new_api/
v3/ , Python, 35 linesserialization/ __init__.py - new_api/
v3/ , Python, 62 linesserialization/ _common.py - new_api/
v3/ , Python, 129 linesserialization/ feature.py - new_api/
warmup/ , Python, 14 lines__init__.py - new_api/
worker/ , Python, 9 lines__init__.py - prepare_release.sh, Shell, 169 lines
- server_health.py, Python, 26 lines
- test/
__init__.py , Python, 1 line - test/
core/ , Python, 1 line__init__.py - test/
core/ , Python, 31 linestest_atlas_api.py - test/
core/ , Python, 100 linestest_parcellation_api.py - test/
core/ , Python, 208 linestest_regions_api.py - test/
core/ , Python, 55 linestest_siibra_api.py - test/
core/ , Python, 133 linestest_space_api.py - test/
serialization/ , Python, 22 linesfeatures/ molecular/ test_receptor_density_fi ngerprint.py - test/
serialization/ , Python, 39 linesfeatures/ test_connectivity.py - test/
serialization/ , Python, 77 linesfeatures/ test_feature.py - test/
serialization/ , Python, 59 linesfeatures/ test_tabular.py - test/
serialization/ , Python, 22 linesfeatures/ test_voi.py - test/
serialization/ , Python, 11 linestest_atlas.py - test/
serialization/ , Python, 1 linetest_datasets.py - test/
serialization/ , Python, 13 linestest_parcellation.py - test/
serialization/ , Python, 16 linestest_region.py - test/
serialization/ , Python, 16 linestest_space.py - test/
serialization/ , Python, 24 linestest_util.py - test/
serialization/ , Python, 20 linestest_volumes.py - test/
serialization/ , Python, 22 linesvolumes/ test_volume.py - test/
service/ , Python, 1 line__init__.py - test/
service/ , Python, 152 linestest_request_utils.py - test/
test_app.py , Python, 232 lines - worker_health.py, Python, 14 lines
- worker_health_v4.py, Python, 14 lines
- LICENSE, License, 201 lines
- README.md, Text, 50 lines
apache.org/licenses
Availability: 1 check, the latest on 27 September 2026: the link answers (HTTP 200)
- 27 September 2026: the link answers (HTTP 200)
Zenodo 21127648
Availability: 1 check, the latest on 27 September 2026: the link answers (HTTP 200)
- 27 September 2026: the link answers (HTTP 200)
Code availability
Source codes for siibra are available on GitHub (https://
Reproduced under the paper's license (CC BY), from the paper cited above.
Tracing map
Proposed by the machine: these links were found in the paper and verified at the source, without human review. The map will receive a Zenodo DOI once one of the paper's authors has validated it with their ORCID.
What the map holds:
- 8 repositories of the authors' code, each at its verified commit, with its license and how the link was found in the paper;
- 1,307 scripts, each with its path and the digest of its content;
- 25 matches between paragraphs of the paper and lines of the code (method lexical-v1);
- neither the text of the paper nor the code itself.
Its JSON (tracing-map.json) is deposited on Zenodo with its DOI once the map is validated.
Data
Datasets cited
- doi:10.25493/
evpc-mvh , at the source; found in the references - doi:10.25493/
jwtf-pab , at the source; found in the references - doi:10.25493/
nvs8-xs5 , at the source; found in the references - doi:10.25493/
the9-vqu , at the source; found in the references - doi:10.25493/
v8hw-cvc , at the source; found in the references - github.com/
openmetadatainitiative/ , at github.com; found in the text, “Results”openminds
Data Availability Statement
All data used in this work are publicly available via the URLs and references provided with the respective figures. Most contents are published as curated datasets with permanent identifiers on the EBRAINS platform (https://
Source codes for siibra are available on GitHub (https://
Reproduced under the paper's license (CC BY), from the paper cited above.
Versions
The history of this record: each version stored by the harvester or made by a correction of its authors or of the maintainers of its code, and what changed in its facts. The texts of the paper (its abstract, its availability statements) are not part of it; versions that changed only those are not listed.
Version 2, 28 September 2026
- Publisher: n/a → Nature Portfolio
Version 1, 27 September 2026: the first record
Recorded: type, language, journal, volume, issue, pages, dates, 11 authors, 4 keywords, 9 MeSH terms, 3 funders, 60 references, 10 RRIDs.
Cite
This paper
Dickscheid, T., Gui, X., Simsek, A. N., Schiffer, C., Mangin, J.-F., Leprince, Y., Jirsa, V., Bjaalie, J. G., Leergaard, T. B., Bludau, S., & Amunts, K. (2026). Siibra: a software tool suite for realizing a Multilevel Human Brain Atlas from complex data resources. Nature methods, 23(8), 1647-1658. https://
BibTeX
@article{dickscheid2026s
author = {Dickscheid, Timo and Gui, Xiaoyun and Simsek, Ahmet N and Schiffer, Christian and Mangin, Jean-Francois and Leprince, Yann and Jirsa, Viktor and Bjaalie, Jan G and Leergaard, Trygve B and Bludau, Sebastian and Amunts, Katrin},
title = {{Siibra: a software tool suite for realizing a Multilevel Human Brain Atlas from complex data resources}},
journal = {Nature methods},
year = {2026},
month = jul,
volume = {23},
number = {8},
pages = {1647--1658},
publisher = {Nature Portfolio},
issn = {1548-7091},
doi = {10.1038/
url = {https://
pmid = {42477446},
pmcid = {PMC13441889}
}
RIS
TY - JOUR
AU - Dickscheid, Timo
AU - Gui, Xiaoyun
AU - Simsek, Ahmet N
AU - Schiffer, Christian
AU - Mangin, Jean-Francois
AU - Leprince, Yann
AU - Jirsa, Viktor
AU - Bjaalie, Jan G
AU - Leergaard, Trygve B
AU - Bludau, Sebastian
AU - Amunts, Katrin
TI - Siibra: a software tool suite for realizing a Multilevel Human Brain Atlas from complex data resources
T2 - Nature methods
J2 - Nat Methods
PY - 2026
DA - 2026/
VL - 23
IS - 8
SP - 1647
EP - 1658
SN - 1548-7091
PB - Nature Portfolio
DO - 10.1038/
UR - https://
LA - en
ER -
CSL-JSON
{
"id": "10.1038/
"type": "article-journal",
"title": "Siibra: a software tool suite for realizing a Multilevel Human Brain Atlas from complex data resources",
"container-title": "Nature methods",
"author": [
{
"family": "Dickscheid",
"given": "Timo"
},
{
"family": "Gui",
"given": "Xiaoyun"
},
{
"family": "Simsek",
"given": "Ahmet N"
},
{
"family": "Schiffer",
"given": "Christian"
},
{
"family": "Mangin",
"given": "Jean-Francois"
},
{
"family": "Leprince",
"given": "Yann"
},
{
"family": "Jirsa",
"given": "Viktor"
},
{
"family": "Bjaalie",
"given": "Jan G"
},
{
"family": "Leergaard",
"given": "Trygve B"
},
{
"family": "Bludau",
"given": "Sebastian"
},
{
"family": "Amunts",
"given": "Katrin"
}
],
"container-title-short":
"volume": "23",
"issue": "8",
"page": "1647-1658",
"DOI": "10.1038/
"PMID": "42477446",
"PMCID": "PMC13441889",
"ISSN": "1548-7091",
"publisher": "Nature Portfolio",
"URL": "https://
"language": "en",
"issued": {
"date-parts": [
[
2026,
7,
20
]
]
}
}
The tracing map gets a citation of its own once an author has validated it and it has a DOI.
Similar papers
The papers with a page that share the most with this one: the tools found in their code, their categories, datasets, cited references and authors, the rarest counting most.
- [1] doi:10.1162/imag.a.1260
- Organization, fine structure, and stereotaxic maps of the human Bed nucleus of the Stria terminalis.Journal: Imaging neuroscience (Cambridge, Mass.)In common: 3 references, 2 authors
- [2] doi:10.1038/s41467-026-71428-6 [code]
- Binding items to contexts through conjunctive neural representations with the method of loci.Journal: Nature communicationsIn common: Nilearn, Plotly, h5py, 7 other tools, 3 references
- [3] doi:10.1038/s41467-026-76812-w [code]
- Assessing molecular, cellular and transcriptomic bases of laminar perfusion and cytoarchitecture coupling in the human cortex.Journal: Nature communicationsIn common: Nilearn, NiBabel, scikit-learn, 4 other tools, structural MRI / diffusion, 5 references
- [4] doi:10.1162/imag.a.1198 [code]
- MEPrep: A robust pipeline for multi-echo fMRI denoising and preprocessing.Journal: Imaging neuroscience (Cambridge, Mass.)In common: Nilearn, scikit-image, h5py, 6 other tools, methods / tools, 3 references
- [5] doi:10.1038/s41597-026-06869-1 [code]
- Individual Brain Charting: fifth release of high-resolution fMRI data for cognitive mapping.Journal: Scientific dataIn common: Nilearn, scikit-image, NiBabel, 6 other tools, methods / tools, 3 references
- [6] doi:10.1162/imag.a.1269 [code]
- From early to contemporary normative modeling: Mapping individual differences in neurophysiological signals.Journal: Imaging neuroscience (Cambridge, Mass.)In common: Nilearn, Plotly, NiBabel, 6 other tools, 3 references
- [7] doi:10.1162/imag.a.1154 [code]
- Evolutionary signatures in deep white matter architecture: A comparative study of humans and chimpanzees.Journal: Imaging neuroscience (Cambridge, Mass.)In common: scikit-learn, pandas, SciPy, 2 other tools, 2 references, author Yann Leprince
- [8] doi:10.1016/j.isci.2026.117180 [code]
- Developmental changes in similarity between neural representations of mental arithmetic and artificial neural networks.Journal: iScienceIn common: Nilearn, h5py, NiBabel, 6 other tools, 3 references
- [9] doi:10.3389/frai.2026.1771088 [code]
- Few-shot deployment of pretrained MRI transformers in brain imaging tasks.Journal: Frontiers in artificial intelligenceIn common: scikit-image, h5py, NiBabel, 6 other tools, methods / tools, structural MRI / diffusion, 2 references
- [10] doi:10.1038/s41467-026-75837-5 [code]
- A hierarchical framework for cortical and subcortical gray-matter parcellation across rodents, primates, and humans.Journal: Nature communicationsIn common: NiBabel, seaborn, pandas, 3 other tools, methods / tools, 4 references
Contribute
The authors of this paper can claim it, correct its record and validate its tracing map, and the maintainers of its code (its owner, or a public member of its organization) correct what it says of their repository; anyone signed in can ask for its removal. Every request goes to OSCR's own machine, which answers it; your account page follows them.
Sign in with ORCID to claim this paper as one of its authors, correct its record or validate its tracing map: when the paper's metadata lists your ORCID iD, you are recognized at once. Maintainers of its code: sign in with GitHub, then claim the repository on your account page.
Claim this paper
Correct its record
Say what each link of this record is, remove the ones that are not the paper's, add the ones that are missing. The correction becomes a new version of the record, in its Versions section.
Validate its tracing map
You validate the map as this page shows it: 8 repositories of the authors' code, each at its verified commit and with its license, 1307 scripts, and 25 matches between paragraphs and code (see the Code and Map sections). It then receives a DOI on Zenodo, with you (your ORCID iD) and OSCR as its creators; the code itself is not deposited.
The map's fingerprint: sha256:24a044ca5ead09c2…
Add the badge to its README
The badge links the code to this page. Copy one of these into the README of the paper's code: only you decide where it goes, and nothing is changed for you.
Markdown
[, paste the snippet at the top, then “Commit changes…” and, to review it first, “Create a new branch and start a pull request”. You open the pull request; OSCR asks for no permission.
Request its removal
To ask OSCR to remove this record, the copies of its authors' scripts or its tracing map, use the removal request page: signed in, you say who you are, what to remove and why, then review and confirm the request. Published rules decide every request (how).
Discussion, reproductions, activity
Discussion: questions and error reports about this paper and its code, from signed-in readers and its authors. It opens with sign-in.
Reproductions: reports from readers who ran the authors' code: what they reproduced, with which environment, commit and data. It opens with sign-in.
Activity: what happens around this paper: new versions of its record, its map's validation, discussions and reproductions. It opens with sign-in.
