{ "cells": [ { "cell_type": "markdown", "id": "0", "metadata": {}, "source": [ "# Assigning AAL3 and Brodmann Atlas Labels to Brain Surfaces\n", "\n", "This notebook assigns AAL3 and Brodmann atlas labels to the Colin27 and ICBM152 brain surfaces, visualizes the labels, and summarizes their overlap with the Schaefer2018 parcels.\n", "\n", "## Overview\n", "\n", "Neuroimaging atlases — parcellations that divide the cerebral cortex into anatomically\n", "or functionally defined regions — are a cornerstone of group-level fNIRS and DOT\n", "analysis. Atlases allow researchers to:\n", "\n", "* Report results in a standardised anatomical vocabulary that is comparable across\n", " studies and laboratories.\n", "* Aggregate channel or vertex signals into region-of-interest (ROI) time series,\n", " reducing the multiple-comparisons burden.\n", "* Cross-reference DOT activations with the large fMRI literature, where the same\n", " atlas labels are widely used.\n", "\n", "### MNI space as a shared coordinate system\n", "\n", "Most brain atlases are defined and distributed in **MNI (Montreal Neurological\n", "Institute) space**: a standardised brain coordinate frame derived from averaging many\n", "individual MRI scans into a common template.\n", "Every standard head model in Cedalion — Colin27\n", "(Holmes et al., 1998)\n", "and ICBM152\n", "(Fonov et al., 2011) — carries pre-computed MNI152\n", "coordinates for every brain surface vertex. This means that **any** volumetric atlas\n", "provided as a NIfTI file in MNI space can be transferred to the brain surface without\n", "any additional registration step: the shared coordinate system acts as the bridge\n", "between the volumetric atlas and the surface model.\n", "\n", "### The two MNI spaces: MNI152 and MNI305\n", "\n", "Two MNI variants are in common use and it is important to keep them distinct:\n", "\n", "| Space | Template | Typical users |\n", "|---|---|---|\n", "| **MNI152** | Average of 152 adult brains (ICBM152 template) | FSL, recent SPM, most modern atlases |\n", "| **MNI305** | Average of 305 brains; the original MNI reference | FreeSurfer, older SPM, some legacy atlases |\n", "\n", "MNI152 and MNI305 differ by a small affine shift (a few millimetres in some regions)\n", "and are **not** interchangeable. Cedalion stores a pre-computed affine transform\n", "(`cedalion.dot.utils.mni305_to_mni152`) and applies it automatically when a NIfTI is\n", "declared as `voxel_label_crs='mni305'`, so you do not need to handle the conversion\n", "manually. Both spaces are fully supported; you simply specify which one your NIfTI\n", "file uses.\n", "\n", "### What this notebook demonstrates\n", "\n", "This notebook shows the general workflow for applying **any** user-supplied parcellation\n", "scheme — provided as a NIfTI label volume in either MNI152 or MNI305 space — to the\n", "Cedalion head models. The workflow is illustrated with two widely used atlases:\n", "\n", "* **AAL3** (Automated Anatomical Labelling atlas, version 3)\n", " (Rolls et al., 2020) — 170 macro-anatomical regions\n", " covering the entire cerebral cortex and subcortex.\n", "* **Brodmann areas** (Mai–Majtanik atlas)\n", " (Mai & Majtanik, 2017) — the classical cytoarchitectonic\n", " map, available as a volumetric MNI label file.\n", "\n", "Both atlases are bundled with Cedalion and loaded via `cedalion.data.get_atlas_files()`.\n", "The same code applies unchanged to any other NIfTI atlas you supply.\n", "\n", "**For more detail, see also:**\n", "- [43a_head_models_overview.ipynb](43a_head_models_overview.ipynb) — introduction to\n", " `TwoSurfaceHeadModel` and the Schaefer2018 parcellation bundled with the standard models\n", "- [43b_individualized_head_models.ipynb](43b_individualized_head_models.ipynb) — building an\n", " individualized head model from a subject's own MRI using FreeSurfer, which yields\n", " surface-native parcel labels with sharper boundaries than the volumetric approach shown here" ] }, { "cell_type": "code", "execution_count": 1, "id": "1", "metadata": { "execution": { "iopub.execute_input": "2026-06-15T15:12:27.996734Z", "iopub.status.busy": "2026-06-15T15:12:27.996577Z", "iopub.status.idle": "2026-06-15T15:12:30.330692Z", "shell.execute_reply": "2026-06-15T15:12:30.329957Z" } }, "outputs": [], "source": [ "import json\n", "\n", "import numpy as np\n", "import pyvista as pv\n", "from scipy.spatial import KDTree\n", "\n", "import cedalion\n", "import cedalion.dot\n", "from cedalion.vis.anatomy import get_vertex_colors_from_coord, plot_brain_views_grid\n", "\n", "pv.set_jupyter_backend(\"static\")" ] }, { "cell_type": "markdown", "id": "2", "metadata": {}, "source": [ "## Loading Colin27 and ICBM152 Head Models\n", "\n", "We load both standard atlas head models. Each is stored in voxel space (`crs='ijk'`);\n", "`assign_parcels_via_mni_coords` works in MNI152 space internally so the coordinate\n", "system of the loaded head model does not need to match that of the atlas.\n", "\n", "Both models carry pre-computed `mni152_r/a/s` vertex coordinates on the brain surface,\n", "which is what makes the atlas transfer possible. The inflated cortex surfaces are loaded\n", "for visualization: inflation removes sulci and gyri so that buried cortex becomes\n", "visible, making parcel boundaries much easier to inspect." ] }, { "cell_type": "code", "execution_count": 2, "id": "3", "metadata": { "execution": { "iopub.execute_input": "2026-06-15T15:12:30.336099Z", "iopub.status.busy": "2026-06-15T15:12:30.335647Z", "iopub.status.idle": "2026-06-15T15:12:42.828234Z", "shell.execute_reply": "2026-06-15T15:12:42.827308Z" } }, "outputs": [], "source": [ "colin_ijk = cedalion.dot.get_standard_headmodel(\"colin27\")\n", "colin_inflated = cedalion.dot.get_inflated_cortex_surface(\"colin27\")\n", "\n", "icbm_ijk = cedalion.dot.get_standard_headmodel(\"icbm152\")\n", "icbm_inflated = cedalion.dot.get_inflated_cortex_surface(\"icbm152\")" ] }, { "cell_type": "markdown", "id": "4", "metadata": {}, "source": [ "## Loading Atlases\n", "\n", "Atlases distributed for use with standard MNI templates typically come in two files:\n", "\n", "1. A **NIfTI volume** (`.nii` or `.nii.gz`) in which every voxel inside a labelled\n", " region carries a positive integer, and background voxels carry 0 (or another\n", " reserved value).\n", "2. A **label mapping** (`.json`, `.csv`, or `.txt`) that translates those integers to\n", " human-readable region names.\n", "\n", "`cedalion.data.get_atlas_files(name)` returns both paths for the bundled atlases.\n", "For a custom atlas you can pass any NIfTI path you have downloaded or created.\n", "\n", "### AAL3 — Automated Anatomical Labelling atlas (version 3)\n", "\n", "AAL3 (Rolls et al., 2020) divides the cerebral cortex\n", "and subcortical structures into 170 macro-anatomical regions based on sulcal and gyral\n", "landmarks visible in the MNI152 template. It is one of the most widely used atlases in\n", "the fMRI and fNIRS literature and provides a common vocabulary for reporting results.\n", "The NIfTI file bundled with Cedalion is defined in **MNI152** space." ] }, { "cell_type": "code", "execution_count": 3, "id": "5", "metadata": { "execution": { "iopub.execute_input": "2026-06-15T15:12:42.830103Z", "iopub.status.busy": "2026-06-15T15:12:42.829946Z", "iopub.status.idle": "2026-06-15T15:12:44.443605Z", "shell.execute_reply": "2026-06-15T15:12:44.442856Z" } }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "Downloading file 'atlas_aal3.zip' from 'https://doc.ibs.tu-berlin.de/cedalion/datasets/dev/atlas_aal3.zip' to '/home/runner/.cache/cedalion/dev'.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "Unzipping contents of '/home/runner/.cache/cedalion/dev/atlas_aal3.zip' to '/home/runner/.cache/cedalion/dev/atlas_aal3.zip.unzip'\n" ] }, { "data": { "text/plain": [ "{1: 'Precentral_L',\n", " 2: 'Precentral_R',\n", " 3: 'Frontal_Sup_2_L',\n", " 4: 'Frontal_Sup_2_R',\n", " 5: 'Frontal_Mid_2_L',\n", " 6: 'Frontal_Mid_2_R',\n", " 7: 'Frontal_Inf_Oper_L',\n", " 8: 'Frontal_Inf_Oper_R',\n", " 9: 'Frontal_Inf_Tri_L',\n", " 10: 'Frontal_Inf_Tri_R',\n", " 11: 'Frontal_Inf_Orb_2_L',\n", " 12: 'Frontal_Inf_Orb_2_R',\n", " 13: 'Rolandic_Oper_L',\n", " 14: 'Rolandic_Oper_R',\n", " 15: 'Supp_Motor_Area_L',\n", " 16: 'Supp_Motor_Area_R',\n", " 17: 'Olfactory_L',\n", " 18: 'Olfactory_R',\n", " 19: 'Frontal_Sup_Medial_L',\n", " 20: 'Frontal_Sup_Medial_R',\n", " 21: 'Frontal_Med_Orb_L',\n", " 22: 'Frontal_Med_Orb_R',\n", " 23: 'Rectus_L',\n", " 24: 'Rectus_R',\n", " 25: 'OFCmed_L',\n", " 26: 'OFCmed_R',\n", " 27: 'OFCant_L',\n", " 28: 'OFCant_R',\n", " 29: 'OFCpost_L',\n", " 30: 'OFCpost_R',\n", " 31: 'OFClat_L',\n", " 32: 'OFClat_R',\n", " 33: 'Insula_L',\n", " 34: 'Insula_R',\n", " 37: 'Cingulate_Mid_L',\n", " 38: 'Cingulate_Mid_R',\n", " 39: 'Cingulate_Post_L',\n", " 40: 'Cingulate_Post_R',\n", " 41: 'Hippocampus_L',\n", " 42: 'Hippocampus_R',\n", " 43: 'ParaHippocampal_L',\n", " 44: 'ParaHippocampal_R',\n", " 45: 'Amygdala_L',\n", " 46: 'Amygdala_R',\n", " 47: 'Calcarine_L',\n", " 48: 'Calcarine_R',\n", " 49: 'Cuneus_L',\n", " 50: 'Cuneus_R',\n", " 51: 'Lingual_L',\n", " 52: 'Lingual_R',\n", " 53: 'Occipital_Sup_L',\n", " 54: 'Occipital_Sup_R',\n", " 55: 'Occipital_Mid_L',\n", " 56: 'Occipital_Mid_R',\n", " 57: 'Occipital_Inf_L',\n", " 58: 'Occipital_Inf_R',\n", " 59: 'Fusiform_L',\n", " 60: 'Fusiform_R',\n", " 61: 'Postcentral_L',\n", " 62: 'Postcentral_R',\n", " 63: 'Parietal_Sup_L',\n", " 64: 'Parietal_Sup_R',\n", " 65: 'Parietal_Inf_L',\n", " 66: 'Parietal_Inf_R',\n", " 67: 'SupraMarginal_L',\n", " 68: 'SupraMarginal_R',\n", " 69: 'Angular_L',\n", " 70: 'Angular_R',\n", " 71: 'Precuneus_L',\n", " 72: 'Precuneus_R',\n", " 73: 'Paracentral_Lobule_L',\n", " 74: 'Paracentral_Lobule_R',\n", " 75: 'Caudate_L',\n", " 76: 'Caudate_R',\n", " 77: 'Putamen_L',\n", " 78: 'Putamen_R',\n", " 79: 'Pallidum_L',\n", " 80: 'Pallidum_R',\n", " 83: 'Heschl_L',\n", " 84: 'Heschl_R',\n", " 85: 'Temporal_Sup_L',\n", " 86: 'Temporal_Sup_R',\n", " 87: 'Temporal_Pole_Sup_L',\n", " 88: 'Temporal_Pole_Sup_R',\n", " 89: 'Temporal_Mid_L',\n", " 90: 'Temporal_Mid_R',\n", " 91: 'Temporal_Pole_Mid_L',\n", " 92: 'Temporal_Pole_Mid_R',\n", " 93: 'Temporal_Inf_L',\n", " 94: 'Temporal_Inf_R',\n", " 95: 'Cerebelum_Crus1_L',\n", " 96: 'Cerebelum_Crus1_R',\n", " 97: 'Cerebelum_Crus2_L',\n", " 98: 'Cerebelum_Crus2_R',\n", " 99: 'Cerebelum_3_L',\n", " 100: 'Cerebelum_3_R',\n", " 101: 'Cerebelum_4_5_L',\n", " 102: 'Cerebelum_4_5_R',\n", " 103: 'Cerebelum_6_L',\n", " 104: 'Cerebelum_6_R',\n", " 105: 'Cerebelum_7b_L',\n", " 106: 'Cerebelum_7b_R',\n", " 107: 'Cerebelum_8_L',\n", " 108: 'Cerebelum_8_R',\n", " 109: 'Cerebelum_9_L',\n", " 110: 'Cerebelum_9_R',\n", " 111: 'Cerebelum_10_L',\n", " 112: 'Cerebellum_10_R',\n", " 113: 'Vermis_1_2',\n", " 114: 'Vermis_3',\n", " 115: 'Vermis_4_5',\n", " 116: 'Vermis_6',\n", " 117: 'Vermis_7',\n", " 118: 'Vermis_8',\n", " 119: 'Vermis_9',\n", " 120: 'Vermis_10',\n", " 121: 'Thal_AV_L',\n", " 122: 'Thal_AV_R',\n", " 123: 'Thal_LP_L',\n", " 124: 'Thal_LP_R',\n", " 125: 'Thal_VA_L',\n", " 126: 'Thal_VA_R',\n", " 127: 'Thal_VL_L',\n", " 128: 'Thal_VL_R',\n", " 129: 'Thal_VPL_L',\n", " 130: 'Thal_VPL_R',\n", " 131: 'Thal_IL_L',\n", " 132: 'Thal_IL_R',\n", " 133: 'Thal_Re_L',\n", " 134: 'Thal_Re_R',\n", " 135: 'Thal_MDm_L',\n", " 136: 'Thal_MDm_R',\n", " 137: 'Thal_MDl_L',\n", " 138: 'Thal_MDl_R',\n", " 139: 'Thal_LGN_L',\n", " 140: 'Thal_LGN_R',\n", " 141: 'Thal_MGN_L',\n", " 142: 'Thal_MGN_R',\n", " 143: 'Thal_PuI_L',\n", " 144: 'Thal_PuI_R',\n", " 145: 'Thal_PuM_L',\n", " 146: 'Thal_PuM_R',\n", " 147: 'Thal_PuA_L',\n", " 148: 'Thal_PuA_R',\n", " 149: 'Thal_PuL_L',\n", " 150: 'Thal_PuL_R',\n", " 151: 'ACC_sub_L',\n", " 152: 'ACC_sub_R',\n", " 153: 'ACC_pre_L',\n", " 154: 'ACC_pre_R',\n", " 155: 'ACC_sup_L',\n", " 156: 'ACC_sup_R',\n", " 157: 'Vent_Str_L',\n", " 158: 'Vent_Str_R',\n", " 159: 'VTA_L',\n", " 160: 'VTA_R',\n", " 161: 'SN_pc_L',\n", " 162: 'SN_pc_R',\n", " 163: 'SN_pr_L',\n", " 164: 'SN_pr_R',\n", " 165: 'Red_N_L',\n", " 166: 'Red_N_R',\n", " 167: 'LC_L',\n", " 168: 'LC_R',\n", " 169: 'Raphe_D',\n", " 170: 'Raphe_M'}" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "aal3_voxel_label_niftii, aal3_labels_json = cedalion.data.get_atlas_files(\"aal3\")\n", "\n", "# dictionary to map numeric voxel labels in nifti to string labels\n", "with aal3_labels_json.open(\"r\") as fin:\n", " aal3_num2label = json.load(fin)\n", " aal3_num2label = {i[\"index\"] : i[\"name\"] for i in aal3_num2label[\"labels\"]}\n", "\n", "aal3_num2label" ] }, { "cell_type": "markdown", "id": "6", "metadata": {}, "source": [ "### Brodmann Areas — Mai–Majtanik Atlas\n", "\n", "Brodmann areas are the classical cytoarchitectonic map of the human cortex, originally\n", "defined by Korbinian Brodmann in 1909 from histological sections and still widely used\n", "to communicate the location of activations in the neuroscience literature. The\n", "Mai–Majtanik atlas (Mai & Majtanik, 2017) provides\n", "these areas as a digitised volumetric label map registered to **MNI152** space, making\n", "it directly compatible with the Cedalion head models. Areas such as BA44/45\n", "(Broca's area) or BA17 (primary visual cortex) are convenient reference landmarks when\n", "linking fNIRS results to the broader neuroimaging literature." ] }, { "cell_type": "code", "execution_count": 4, "id": "7", "metadata": { "execution": { "iopub.execute_input": "2026-06-15T15:12:44.445570Z", "iopub.status.busy": "2026-06-15T15:12:44.445422Z", "iopub.status.idle": "2026-06-15T15:12:45.951971Z", "shell.execute_reply": "2026-06-15T15:12:45.951102Z" } }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "Downloading file 'atlas_brodmann.zip' from 'https://doc.ibs.tu-berlin.de/cedalion/datasets/dev/atlas_brodmann.zip' to '/home/runner/.cache/cedalion/dev'.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "Unzipping contents of '/home/runner/.cache/cedalion/dev/atlas_brodmann.zip' to '/home/runner/.cache/cedalion/dev/atlas_brodmann.zip.unzip'\n" ] }, { "data": { "text/plain": [ "{1: 'right_Ent',\n", " 2: 'right_BA20',\n", " 3: 'right_BA38',\n", " 4: 'right_BA21',\n", " 5: 'right_BA36',\n", " 6: 'right_BA11',\n", " 7: 'right_BA37',\n", " 8: 'right_BA25',\n", " 9: 'right_BA12',\n", " 10: 'right_BA19',\n", " 11: 'right_BA47',\n", " 12: 'right_BA22',\n", " 13: 'right_BA18',\n", " 14: 'right_BA10',\n", " 15: 'right_BA17',\n", " 16: 'right_BA32',\n", " 17: 'right_BA24',\n", " 18: 'right_BA46',\n", " 19: 'right_BA45',\n", " 20: 'right_BA33',\n", " 21: 'right_BA44',\n", " 22: 'right_BA6',\n", " 23: 'right_BA23',\n", " 24: 'right_BA42',\n", " 25: 'right_BA43',\n", " 26: 'right_BA30',\n", " 27: 'right_BA41',\n", " 28: 'right_BA29',\n", " 29: 'right_BA26',\n", " 30: 'right_BA31',\n", " 31: 'right_BA4',\n", " 32: 'right_BA1',\n", " 33: 'right_BA9',\n", " 34: 'right_BA39',\n", " 35: 'right_BA2',\n", " 36: 'right_BA3',\n", " 37: 'right_BA40',\n", " 38: 'right_BA7',\n", " 39: 'right_BA8',\n", " 40: 'right_BA5',\n", " 41: 'right_BA52',\n", " 42: 'right_BA35',\n", " 43: 'right_BA34',\n", " 101: 'left_Ent',\n", " 102: 'left_BA20',\n", " 103: 'left_BA38',\n", " 104: 'left_BA21',\n", " 105: 'left_BA36',\n", " 106: 'left_BA11',\n", " 107: 'left_BA37',\n", " 108: 'left_BA25',\n", " 109: 'left_BA12',\n", " 110: 'left_BA19',\n", " 111: 'left_BA47',\n", " 112: 'left_BA22',\n", " 113: 'left_BA18',\n", " 114: 'left_BA10',\n", " 115: 'left_BA17',\n", " 116: 'left_BA32',\n", " 117: 'left_BA24',\n", " 118: 'left_BA46',\n", " 119: 'left_BA45',\n", " 120: 'left_BA33',\n", " 121: 'left_BA44',\n", " 122: 'left_BA6',\n", " 123: 'left_BA23',\n", " 124: 'left_BA42',\n", " 125: 'left_BA43',\n", " 126: 'left_BA30',\n", " 127: 'left_BA41',\n", " 128: 'left_BA29',\n", " 129: 'left_BA26',\n", " 130: 'left_BA31',\n", " 131: 'left_BA4',\n", " 132: 'left_BA1',\n", " 133: 'left_BA9',\n", " 134: 'left_BA39',\n", " 135: 'left_BA2',\n", " 136: 'left_BA3',\n", " 137: 'left_BA40',\n", " 138: 'left_BA7',\n", " 139: 'left_BA8',\n", " 140: 'left_BA5',\n", " 141: 'left_BA52',\n", " 142: 'left_BA35',\n", " 143: 'left_BA34'}" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "brodmann_voxel_label_niftii, brodmann_labels_json = cedalion.data.get_atlas_files(\"brodmann\")\n", "\n", "# dictionary to map numeric voxel labels in nifti to string labels\n", "with brodmann_labels_json.open(\"r\") as fin:\n", " brodmann_num2label = json.load(fin)\n", " brodmann_num2label = {i[\"index\"] : i[\"name\"] for i in brodmann_num2label[\"labels\"]}\n", "\n", "brodmann_num2label" ] }, { "cell_type": "markdown", "id": "8", "metadata": {}, "source": [ "## Brain Vertex Coordinates Before Atlas Assignment\n", "\n", "The `brain.vertices` xarray `DataArray` already carries several vertex coordinates set\n", "when the head model was built from FreeSurfer outputs:\n", "\n", "| Coordinate | Meaning |\n", "|---|---|\n", "| `parcel` | Schaefer2018 parcel label (Schaefer et al., 2018) |\n", "| `fsaverage_vertex` | Corresponding vertex index in the FreeSurfer `fsaverage` template |\n", "| `mni152_r/a/s` | MNI152 RAS coordinates of the vertex in mm |\n", "\n", "Calling `assign_parcels_via_mni_coords` will **add** a new named coordinate to this\n", "`DataArray` without removing or modifying any existing one. Multiple atlas labels can\n", "therefore coexist on the same vertex, which is what we exploit below." ] }, { "cell_type": "code", "execution_count": 5, "id": "9", "metadata": { "execution": { "iopub.execute_input": "2026-06-15T15:12:45.953651Z", "iopub.status.busy": "2026-06-15T15:12:45.953483Z", "iopub.status.idle": "2026-06-15T15:12:45.976002Z", "shell.execute_reply": "2026-06-15T15:12:45.975182Z" } }, "outputs": [ { "data": { "text/html": [ "
<xarray.DataArray (label: 25000, ijk: 3)> Size: 600kB\n",
"<Quantity([[ 82.522325 19.841515 68.313221]\n",
" [ 83.516588 20.319351 65.886337]\n",
" [ 78.524571 20.543388 63.648142]\n",
" ...\n",
" [127.025612 152.660339 99.546274]\n",
" [ 96.280465 105.252083 86.734898]\n",
" [127.619801 34.463676 60.37505 ]], 'dimensionless')>\n",
"Coordinates:\n",
" * label (label) int64 200kB 0 1 2 3 4 ... 24996 24997 24998 24999\n",
" * fsaverage_vertex (label) int64 200kB 42 61 75 89 ... 333018 333020 333066\n",
" * parcel (label) object 200kB 'VisCent_ExStr_8_LH' ... 'VisCent_...\n",
" * mni152_r (label) float64 200kB -6.792 -5.846 -10.87 ... 6.633 37.95\n",
" * mni152_a (label) float64 200kB -104.8 -104.3 ... -19.16 -89.49\n",
" * mni152_s (label) float64 200kB -1.408 -3.845 ... 15.99 -10.04\n",
"Dimensions without coordinates: ijk<xarray.DataArray (label: 25000, ijk: 3)> Size: 600kB\n",
"<Quantity([[ 82.522325 19.841515 68.313221]\n",
" [ 83.516588 20.319351 65.886337]\n",
" [ 78.524571 20.543388 63.648142]\n",
" ...\n",
" [127.025612 152.660339 99.546274]\n",
" [ 96.280465 105.252083 86.734898]\n",
" [127.619801 34.463676 60.37505 ]], 'dimensionless')>\n",
"Coordinates:\n",
" * label (label) int64 200kB 0 1 2 3 4 ... 24996 24997 24998 24999\n",
" * fsaverage_vertex (label) int64 200kB 42 61 75 89 ... 333018 333020 333066\n",
" * parcel (label) object 200kB 'VisCent_ExStr_8_LH' ... 'VisCent_...\n",
" * mni152_r (label) float64 200kB -6.792 -5.846 -10.87 ... 6.633 37.95\n",
" * mni152_a (label) float64 200kB -104.8 -104.3 ... -19.16 -89.49\n",
" * mni152_s (label) float64 200kB -1.408 -3.845 ... 15.99 -10.04\n",
" * parcel_aal3 (label) <U20 2MB 'Calcarine_L' ... 'Occipital_Inf_R'\n",
" * parcel_brodmann (label) <U10 1MB 'left_BA17' 'left_BA17' ... 'right_BA18'\n",
"Dimensions without coordinates: ijk<xarray.DataArray (label: 25000, ijk: 3)> Size: 600kB\n",
"<Quantity([[ 81.244216 26.627602 150.621031]\n",
" [ 81.577181 27.302513 157.143576]\n",
" [ 77.826448 27.459724 154.566914]\n",
" ...\n",
" [118.580717 84.619659 208.0373 ]\n",
" [143.100407 63.906384 138.08789 ]\n",
" [133.577629 151.8062 150.919106]], 'dimensionless')>\n",
"Coordinates:\n",
" * label (label) int64 200kB 0 1 2 3 4 ... 24996 24997 24998 24999\n",
" * fsaverage_vertex (label) int64 200kB 29 66 101 141 ... 320360 320363 320364\n",
" * parcel (label) object 200kB 'VisCent_Striate_2_LH' ... 'SalVen...\n",
" * mni152_r (label) float64 200kB -14.76 -14.42 -18.17 ... 47.1 37.58\n",
" * mni152_a (label) float64 200kB -105.4 -104.7 ... -68.09 19.81\n",
" * mni152_s (label) float64 200kB 2.621 9.144 6.567 ... -9.912 2.919\n",
" * parcel_aal3 (label) <U20 2MB 'Calcarine_L' ... 'Insula_R'\n",
" * parcel_brodmann (label) <U10 1MB 'left_BA17' 'left_BA18' ... 'Background'\n",
"Dimensions without coordinates: ijk"
],
"text/plain": [
"| \n", " | model | \n", "parcel | \n", "atlas_label | \n", "vertex | \n", "fsaverage_vertex | \n", "mni152_r | \n", "mni152_a | \n", "mni152_s | \n", "matching_vertices | \n", "parcel_vertices | \n", "fraction_of_parcel | \n", "
|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | \n", "colin27 | \n", "ContA_Cingm_1_LH | \n", "Cingulate_Mid_L | \n", "5953 | \n", "81987 | \n", "-3.695 | \n", "-8.988 | \n", "33.489 | \n", "11 | \n", "12 | \n", "0.916667 | \n", "
| 1 | \n", "colin27 | \n", "ContA_Cingm_1_RH | \n", "Cingulate_Mid_R | \n", "18590 | \n", "250973 | \n", "5.049 | \n", "-6.508 | \n", "33.139 | \n", "13 | \n", "15 | \n", "0.866667 | \n", "
| 2 | \n", "colin27 | \n", "ContA_IPS_1_LH | \n", "Parietal_Inf_L | \n", "1444 | \n", "19061 | \n", "-27.228 | \n", "-68.913 | \n", "47.734 | \n", "6 | \n", "19 | \n", "0.315789 | \n", "
| 3 | \n", "colin27 | \n", "ContA_IPS_1_RH | \n", "Angular_R | \n", "13939 | \n", "185393 | \n", "34.677 | \n", "-68.207 | \n", "52.250 | \n", "15 | \n", "20 | \n", "0.750000 | \n", "
| 4 | \n", "colin27 | \n", "ContA_IPS_2_LH | \n", "Parietal_Inf_L | \n", "4293 | \n", "56365 | \n", "-62.354 | \n", "-32.738 | \n", "40.339 | \n", "19 | \n", "25 | \n", "0.760000 | \n", "
| ... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "
| 595 | \n", "colin27 | \n", "VisPeri_StriCal_3_LH | \n", "Calcarine_L | \n", "245 | \n", "3564 | \n", "-1.727 | \n", "-91.388 | \n", "10.820 | \n", "30 | \n", "44 | \n", "0.681818 | \n", "
| 596 | \n", "colin27 | \n", "VisPeri_StriCal_3_RH | \n", "Calcarine_R | \n", "13063 | \n", "174754 | \n", "14.374 | \n", "-80.162 | \n", "13.916 | \n", "109 | \n", "109 | \n", "1.000000 | \n", "
| 597 | \n", "colin27 | \n", "VisPeri_StriCal_4_LH | \n", "Calcarine_L | \n", "586 | \n", "8177 | \n", "-2.947 | \n", "-83.303 | \n", "14.432 | \n", "79 | \n", "81 | \n", "0.975309 | \n", "
| 598 | \n", "colin27 | \n", "VisPeri_StriCal_4_RH | \n", "Calcarine_R | \n", "13732 | \n", "183013 | \n", "24.182 | \n", "-69.494 | \n", "7.446 | \n", "65 | \n", "69 | \n", "0.942029 | \n", "
| 599 | \n", "colin27 | \n", "VisPeri_StriCal_5_LH | \n", "Calcarine_L | \n", "367 | \n", "5267 | \n", "-1.144 | \n", "-89.130 | \n", "7.586 | \n", "18 | \n", "48 | \n", "0.375000 | \n", "
600 rows × 11 columns
\n", "| \n", " | model | \n", "parcel | \n", "atlas_label | \n", "vertex | \n", "fsaverage_vertex | \n", "mni152_r | \n", "mni152_a | \n", "mni152_s | \n", "matching_vertices | \n", "parcel_vertices | \n", "fraction_of_parcel | \n", "
|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | \n", "colin27 | \n", "ContA_Cingm_1_LH | \n", "left_BA24 | \n", "6094 | \n", "84170 | \n", "-1.647 | \n", "-7.011 | \n", "33.495 | \n", "9 | \n", "12 | \n", "0.750000 | \n", "
| 1 | \n", "colin27 | \n", "ContA_Cingm_1_RH | \n", "right_BA24 | \n", "18590 | \n", "250973 | \n", "5.049 | \n", "-6.508 | \n", "33.139 | \n", "12 | \n", "15 | \n", "0.800000 | \n", "
| 2 | \n", "colin27 | \n", "ContA_IPS_1_LH | \n", "left_BA39 | \n", "1249 | \n", "16617 | \n", "-28.384 | \n", "-72.183 | \n", "42.951 | \n", "13 | \n", "19 | \n", "0.684211 | \n", "
| 3 | \n", "colin27 | \n", "ContA_IPS_1_RH | \n", "right_BA39 | \n", "13939 | \n", "185393 | \n", "34.677 | \n", "-68.207 | \n", "52.250 | \n", "16 | \n", "20 | \n", "0.800000 | \n", "
| 4 | \n", "colin27 | \n", "ContA_IPS_2_LH | \n", "left_BA40 | \n", "3953 | \n", "51685 | \n", "-62.581 | \n", "-36.589 | \n", "38.899 | \n", "25 | \n", "25 | \n", "1.000000 | \n", "
| ... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "
| 595 | \n", "colin27 | \n", "VisPeri_StriCal_3_LH | \n", "left_BA17 | \n", "246 | \n", "3586 | \n", "-3.473 | \n", "-90.929 | \n", "10.449 | \n", "28 | \n", "44 | \n", "0.636364 | \n", "
| 596 | \n", "colin27 | \n", "VisPeri_StriCal_3_RH | \n", "right_BA17 | \n", "13063 | \n", "174754 | \n", "14.374 | \n", "-80.162 | \n", "13.916 | \n", "109 | \n", "109 | \n", "1.000000 | \n", "
| 597 | \n", "colin27 | \n", "VisPeri_StriCal_4_LH | \n", "left_BA17 | \n", "634 | \n", "8858 | \n", "-10.089 | \n", "-82.331 | \n", "8.929 | \n", "70 | \n", "81 | \n", "0.864198 | \n", "
| 598 | \n", "colin27 | \n", "VisPeri_StriCal_4_RH | \n", "right_BA17 | \n", "13732 | \n", "183013 | \n", "24.182 | \n", "-69.494 | \n", "7.446 | \n", "57 | \n", "69 | \n", "0.826087 | \n", "
| 599 | \n", "colin27 | \n", "VisPeri_StriCal_5_LH | \n", "left_BA18 | \n", "403 | \n", "5726 | \n", "-0.299 | \n", "-88.728 | \n", "20.022 | \n", "14 | \n", "48 | \n", "0.291667 | \n", "
600 rows × 11 columns
\n", "| \n", " | model | \n", "parcel | \n", "atlas_label | \n", "vertex | \n", "fsaverage_vertex | \n", "mni152_r | \n", "mni152_a | \n", "mni152_s | \n", "matching_vertices | \n", "parcel_vertices | \n", "fraction_of_parcel | \n", "
|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | \n", "icbm152 | \n", "ContA_Cingm_1_LH | \n", "Cingulate_Mid_L | \n", "6129 | \n", "81297 | \n", "-0.838 | \n", "-5.418 | \n", "33.876 | \n", "14 | \n", "16 | \n", "0.875000 | \n", "
| 1 | \n", "icbm152 | \n", "ContA_Cingm_1_RH | \n", "Cingulate_Mid_R | \n", "18978 | \n", "245771 | \n", "3.545 | \n", "-1.956 | \n", "30.677 | \n", "7 | \n", "8 | \n", "0.875000 | \n", "
| 2 | \n", "icbm152 | \n", "ContA_IPS_1_LH | \n", "Occipital_Mid_L | \n", "698 | \n", "10674 | \n", "-30.355 | \n", "-76.836 | \n", "36.564 | \n", "10 | \n", "16 | \n", "0.625000 | \n", "
| 3 | \n", "icbm152 | \n", "ContA_IPS_1_RH | \n", "Occipital_Mid_R | \n", "13350 | \n", "171347 | \n", "31.845 | \n", "-75.410 | \n", "38.541 | \n", "7 | \n", "12 | \n", "0.583333 | \n", "
| 4 | \n", "icbm152 | \n", "ContA_IPS_2_LH | \n", "Parietal_Inf_L | \n", "2963 | \n", "39596 | \n", "-60.495 | \n", "-47.388 | \n", "48.498 | \n", "31 | \n", "33 | \n", "0.939394 | \n", "
| ... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "
| 595 | \n", "icbm152 | \n", "VisPeri_StriCal_3_LH | \n", "Calcarine_L | \n", "163 | \n", "2604 | \n", "-6.507 | \n", "-90.724 | \n", "4.645 | \n", "23 | \n", "33 | \n", "0.696970 | \n", "
| 596 | \n", "icbm152 | \n", "VisPeri_StriCal_3_RH | \n", "Calcarine_R | \n", "12877 | \n", "164667 | \n", "9.716 | \n", "-85.851 | \n", "7.381 | \n", "84 | \n", "95 | \n", "0.884211 | \n", "
| 597 | \n", "icbm152 | \n", "VisPeri_StriCal_4_LH | \n", "Calcarine_L | \n", "448 | \n", "6885 | \n", "-11.809 | \n", "-81.804 | \n", "7.778 | \n", "63 | \n", "75 | \n", "0.840000 | \n", "
| 598 | \n", "icbm152 | \n", "VisPeri_StriCal_4_RH | \n", "Calcarine_R | \n", "13412 | \n", "172367 | \n", "20.590 | \n", "-75.303 | \n", "9.519 | \n", "31 | \n", "46 | \n", "0.673913 | \n", "
| 599 | \n", "icbm152 | \n", "VisPeri_StriCal_5_LH | \n", "Calcarine_L | \n", "318 | \n", "4717 | \n", "-3.824 | \n", "-85.535 | \n", "2.495 | \n", "21 | \n", "28 | \n", "0.750000 | \n", "
600 rows × 11 columns
\n", "| \n", " | model | \n", "parcel | \n", "atlas_label | \n", "vertex | \n", "fsaverage_vertex | \n", "mni152_r | \n", "mni152_a | \n", "mni152_s | \n", "matching_vertices | \n", "parcel_vertices | \n", "fraction_of_parcel | \n", "
|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | \n", "icbm152 | \n", "ContA_Cingm_1_LH | \n", "left_BA24 | \n", "6129 | \n", "81297 | \n", "-0.838 | \n", "-5.418 | \n", "33.876 | \n", "13 | \n", "16 | \n", "0.812500 | \n", "
| 1 | \n", "icbm152 | \n", "ContA_Cingm_1_RH | \n", "right_BA24 | \n", "18978 | \n", "245771 | \n", "3.545 | \n", "-1.956 | \n", "30.677 | \n", "8 | \n", "8 | \n", "1.000000 | \n", "
| 2 | \n", "icbm152 | \n", "ContA_IPS_1_LH | \n", "left_BA39 | \n", "698 | \n", "10674 | \n", "-30.355 | \n", "-76.836 | \n", "36.564 | \n", "15 | \n", "16 | \n", "0.937500 | \n", "
| 3 | \n", "icbm152 | \n", "ContA_IPS_1_RH | \n", "right_BA7 | \n", "13350 | \n", "171347 | \n", "31.845 | \n", "-75.410 | \n", "38.541 | \n", "10 | \n", "12 | \n", "0.833333 | \n", "
| 4 | \n", "icbm152 | \n", "ContA_IPS_2_LH | \n", "left_BA40 | \n", "2963 | \n", "39596 | \n", "-60.495 | \n", "-47.388 | \n", "48.498 | \n", "33 | \n", "33 | \n", "1.000000 | \n", "
| ... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "... | \n", "
| 595 | \n", "icbm152 | \n", "VisPeri_StriCal_3_LH | \n", "left_BA17 | \n", "163 | \n", "2604 | \n", "-6.507 | \n", "-90.724 | \n", "4.645 | \n", "31 | \n", "33 | \n", "0.939394 | \n", "
| 596 | \n", "icbm152 | \n", "VisPeri_StriCal_3_RH | \n", "right_BA17 | \n", "12877 | \n", "164667 | \n", "9.716 | \n", "-85.851 | \n", "7.381 | \n", "90 | \n", "95 | \n", "0.947368 | \n", "
| 597 | \n", "icbm152 | \n", "VisPeri_StriCal_4_LH | \n", "left_BA17 | \n", "448 | \n", "6885 | \n", "-11.809 | \n", "-81.804 | \n", "7.778 | \n", "73 | \n", "75 | \n", "0.973333 | \n", "
| 598 | \n", "icbm152 | \n", "VisPeri_StriCal_4_RH | \n", "right_BA17 | \n", "13412 | \n", "172367 | \n", "20.590 | \n", "-75.303 | \n", "9.519 | \n", "39 | \n", "46 | \n", "0.847826 | \n", "
| 599 | \n", "icbm152 | \n", "VisPeri_StriCal_5_LH | \n", "left_BA17 | \n", "318 | \n", "4717 | \n", "-3.824 | \n", "-85.535 | \n", "2.495 | \n", "23 | \n", "28 | \n", "0.821429 | \n", "
600 rows × 11 columns
\n", "| [1] | Holmes1998 | cedalion.data.get_colin27_headmodel_files | Colin J. Holmes, Rick Hoge, Louis Collins, Roger Woods, Arthur W. Toga, and Alan C. Evans.\n", "Enhancement of mr images using registration for signal averaging.\n", "Journal of Computer Assisted Tomography, 22(2):324–333, March 1998.\n", "doi:10.1097/00004728-199803000-00032. |
| [2] | Fischl2012 | cedalion.data.get_colin27_headmodel_files, cedalion.data.get_icbm152_headmodel_files | Bruce Fischl.\n", "FreeSurfer.\n", "NeuroImage, 62(2):774–781, 2012.\n", "doi:10.1016/j.neuroimage.2012.01.021. |
| [3] | Schaefer2018 | cedalion.data.get_colin27_headmodel_files, cedalion.data.get_icbm152_headmodel_files | Alexander Schaefer, Ru Kong, Evan M Gordon, Timothy O Laumann, Xi-Nian Zuo, Avram J Holmes, Simon B Eickhoff, and BT Thomas Yeo.\n", "Local-global parcellation of the human cerebral cortex from intrinsic functional connectivity mri.\n", "Cerebral cortex, 28(9):3095–3114, 2018.\n", "doi:10.1093/cercor/bhx179. |
| [4] | Fonov2011 | cedalion.data.get_icbm152_headmodel_files | Vladimir Fonov, Alan C. Evans, Kelly Botteron, C. Robert Almli, Robert C. McKinstry, and D. Louis Collins.\n", "Unbiased average age-appropriate atlases for pediatric studies.\n", "NeuroImage, 54(1):313–327, January 2011.\n", "doi:10.1016/j.neuroimage.2010.07.033. |
| [5] | Rolls2020 | cedalion.data.get_atlas_files | Edmund T. Rolls, Chu-Chung Huang, Ching-Po Lin, Jianfeng Feng, and Marc Joliot.\n", "Automated anatomical labelling atlas 3.\n", "NeuroImage, 206:116189, 2020.\n", "doi:https://doi.org/10.1016/j.neuroimage.2019.116189. |
| [6] | Mai2017 | cedalion.data.get_atlas_files | Jürgen K. Mai and Milan Majtanik.\n", "Human Brain in Standard MNI Space: Structure and Function: A Comprehensive Pocket Atlas.\n", "Academic Press, an imprint of Elsevier, London ; San Diego, CA, 2017.\n", "ISBN 978-0-12-811275-5. |