{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Reference Space\n",
"\n",
"This notebook contains example code demonstrating the use of the StructureTree and ReferenceSpace classes. These classes provide methods for interacting with the 3D spaces to which Allen Institute data and atlases are registered.\n",
"\n",
"The main entry point will be through the `ReferenceSpaceCache` class. The `ReferenceSpaceCache` class has methods for downloading, storing, and constructing StructureTrees, annotations, and ReferenceSpaces.\n",
"\n",
"* Constructing a StructureTree\n",
"* Using a StructureTree\n",
"* Downloading an annotation volume\n",
"* Constructing a ReferenceSpace\n",
"* Using a ReferenceSpace\n",
"* Exporting"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Constructing a StructureTree\n",
"\n",
"A StructureTree object is a wrapper around a structure graph - a list of dictionaries documenting brain structures and their containment relationships. To build a structure tree, you will first need to obtain a structure graph. The `ReferenceSpaceCache` takes care of that for you.\n",
"\n",
"For a list of atlases and corresponding structure graph ids, see [here](http://help.brain-map.org/display/api/Atlas+Drawings+and+Ontologies)."
]
},
{
"cell_type": "code",
"execution_count": 53,
"metadata": {},
"outputs": [],
"source": [
"from allensdk.core.reference_space_cache import ReferenceSpaceCache\n",
"\n",
"reference_space_key = 'annotation/ccf_2017'\n",
"resolution = 25\n",
"rspc = ReferenceSpaceCache(resolution, reference_space_key, manifest='manifest.json')\n",
"# ID 1 is the adult mouse structure graph\n",
"tree = rspc.get_structure_tree(structure_graph_id=1) "
]
},
{
"cell_type": "code",
"execution_count": 54,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[{'acronym': 'AUDd',\n",
" 'graph_id': 1,\n",
" 'graph_order': 122,\n",
" 'id': 1011,\n",
" 'name': 'Dorsal auditory area',\n",
" 'structure_id_path': [997, 8, 567, 688, 695, 315, 247, 1011],\n",
" 'structure_set_ids': [112905828,\n",
" 688152357,\n",
" 691663206,\n",
" 687527945,\n",
" 12,\n",
" 184527634,\n",
" 167587189,\n",
" 114512891],\n",
" 'rgb_triplet': [1, 147, 153]}]"
]
},
"execution_count": 54,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# now let's take a look at a structure\n",
"tree.get_structures_by_name(['Dorsal auditory area'])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The fields are:\n",
" * acronym: a shortened name for the structure\n",
" * rgb_triplet: each structure is assigned a consistent color for visualizations\n",
" * graph_id: the structure graph to which this structure belongs\n",
" * graph_order: each structure is assigned a consistent position in the flattened graph\n",
" * id: a unique integer identifier\n",
" * name: the full name of the structure\n",
" * structure_id_path: traces a path from the root node of the tree to this structure\n",
" * structure_set_ids: the structure belongs to these predefined groups"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Using a StructureTree"
]
},
{
"cell_type": "code",
"execution_count": 55,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"[{'acronym': 'AUD',\n",
" 'graph_id': 1,\n",
" 'graph_order': 121,\n",
" 'id': 247,\n",
" 'name': 'Auditory areas',\n",
" 'structure_id_path': [997, 8, 567, 688, 695, 315, 247],\n",
" 'structure_set_ids': [3, 112905828, 691663206, 12, 184527634, 114512891],\n",
" 'rgb_triplet': [1, 147, 153]}]"
]
},
"execution_count": 55,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# get a structure's parent\n",
"tree.parents([1011])"
]
},
{
"cell_type": "code",
"execution_count": 56,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"'Auditory areas'"
]
},
"execution_count": 56,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# get a dictionary mapping structure ids to names\n",
"\n",
"name_map = tree.get_name_map()\n",
"name_map[247]"
]
},
{
"cell_type": "code",
"execution_count": 59,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Primary visual area is not in Auditory areas\n"
]
}
],
"source": [
"# ask whether one structure is contained within another\n",
"\n",
"structure_id_a = 385\n",
"structure_id_b = 247\n",
"\n",
"is_desc = '' if tree.structure_descends_from(structure_id_a, structure_id_b) else ' not'\n",
"print( '{0} is{1} in {2}'.format(name_map[structure_id_a], is_desc, name_map[structure_id_b]) )"
]
},
{
"cell_type": "code",
"execution_count": 60,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"VISp\n"
]
}
],
"source": [
"# build a custom map that looks up acronyms by ids\n",
"# the syntax here is just a pair of node-wise functions. \n",
"# The first one returns keys while the second one returns values\n",
"\n",
"acronym_map = tree.value_map(lambda x: x['id'], lambda y: y['acronym'])\n",
"print( acronym_map[structure_id_a] )"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Downloading an annotation volume\n",
"\n",
"You can obtain annotation volumes through the `ReferenceSpaceCache` which stores a nrrd file containing the Allen Common Coordinate Framework annotation on your hard drive. Above we set the resolution for annotations when we initialized the `ReferenceSpaceCache` to 25-micron isometric spacing. The orientation of this space is:\n",
" * Anterior -> Posterior\n",
" * Superior -> Inferior\n",
" * Left -> Right"
]
},
{
"cell_type": "code",
"execution_count": 61,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"2020-05-17 01:56:47,872 allensdk.api.api.retrieve_file_over_http INFO Downloading URL: http://download.alleninstitute.org/informatics-archive/current-release/mouse_ccf/annotation/ccf_2017/annotation_25.nrrd\n"
]
},
{
"data": {
"text/plain": [
"['annotation_25.nrrd']"
]
},
"execution_count": 61,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import os\n",
"\n",
"annotation, meta = rspc.get_annotation_volume()\n",
"# The file should appear in the reference space key directory\n",
"os.listdir(reference_space_key)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Constructing a ReferenceSpace\n",
"\n",
"A reference space is built from a structure tree and an annotation volume. We can obtain our ReferenceSpace object using `ReferenceSpaceCache` which will load everything from the cache since we have already downloaded the files for use above."
]
},
{
"cell_type": "code",
"execution_count": 62,
"metadata": {},
"outputs": [],
"source": [
"rsp = rspc.get_reference_space()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Using a ReferenceSpace"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### making structure masks\n",
"\n",
"The simplest use of a Reference space is to build binary indicator masks for structures or groups of structures."
]
},
{
"cell_type": "code",
"execution_count": 63,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
""
]
},
"execution_count": 63,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"import matplotlib.pyplot as plt\n",
"%matplotlib inline\n",
"\n",
"# A complete mask for one structure\n",
"whole_cortex_mask = rsp.make_structure_mask([315])\n",
"\n",
"# view in coronal section\n",
"fig, ax = plt.subplots(figsize=(10, 10))\n",
"plt.imshow(whole_cortex_mask[150, :], interpolation='none', cmap=plt.cm.afmhot)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"What if you want a mask for a whole collection of ontologically disparate structures? Just pass more structure ids to make_structure_masks:"
]
},
{
"cell_type": "code",
"execution_count": 64,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
""
]
},
"execution_count": 64,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAf0AAAJCCAYAAADKuB61AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjMsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+AADFEAAAX8UlEQVR4nO3dXaxd513n8d9/7KZFw0zdlCaKbDMpqi/aCwiVVSyVi07KjNJS4Vy0UhCjWlUk34BUJEZM4AYxAml6Q1DFqJJFKtyKoY0KTKIKzUyUBMFNQ21S+kIGYipoLEexUF6AqVQU+szFWSc9sY993vY5++X/+UjW2fvZy+c8+6y91nevvba3a4wRAGD1/at5TwAAOBiiDwBNiD4ANCH6ANCE6ANAE6IPAE3sS/Sr6p6q+ququlRVD+zHzwAAdqZm/e/0q+pQkr9O8h+SXE7y5SQ/Pcb4y5n+IABgR/bjSP89SS6NMb45xvjnJJ9Lcnoffg4AsAOH9+F7Hk3y3Ibrl5P82M3+QlX5WEAAmJ2/H2O87drB/Yh+bTJ2XdSr6mySs/vw8wGgu7/bbHA/on85yfEN148luXLtQmOMc0nOJY70AeAg7Mc5/S8nOVFVb6+qW5Lcl+TRffg5AMAOzPxIf4zxalX9XJL/neRQkk+PMb4x658DAOzMzP/J3q4m4eV9AJili2OMk9cO+kQ+AGhC9AGgCdEHgCZEHwCaEH0AaEL0AaAJ0QeAJkQfAJoQfQBoQvQBoAnRB4AmRB8AmhB9AGhC9AGgCdEHgCZEHwCaEH0AaEL0AaAJ0QeAJkQfAJoQfQBoQvQBoAnRB4AmRB8AmhB9AGhC9AGgCdEHgCZEHwCaEH0AaEL0AaAJ0QeAJkQfAJoQfQBoQvQBoAnRB4AmRB8AmhB9AGhC9AGgCdEHgCZEHwCaEH0AaEL0AaAJ0QeAJkQfAJoQfQBoQvQBoAnRB4AmRB8AmhB9AGhC9AGgCdEHgCZEHwCaEH0AaEL0AaAJ0QeAJkQfAJoQfQBoQvQBoAnRB4AmRB8AmhB9AGhC9AGgCdEHgCZEHwCaEH0AaEL0AaAJ0QeAJkQfAJoQfQBoQvQBoAnRB4AmRB8AmhB9AGhC9AGgCdEHgCZEHwCaEH0AaEL0AaAJ0QeAJkQfAJoQfQBoQvQBoAnRB4AmRB8AmhB9AGhC9AGgCdEHgCZEHwCaEH0AaEL0AaAJ0QeAJkQfAJoQfQBoQvQBoIkto19Vn66qq1X19Q1jt1bVY1X17PT1LdN4VdUnq+pSVX21qt69n5MHALZvO0f6v5PknmvGHkjy+BjjRJLHp+tJ8oEkJ6Y/Z5N8ajbTBAD2asvojzH+JMmL1wyfTnJ+unw+yb0bxj8z1nwpyZGqumNWkwUAdm+35/RvH2M8nyTT19um8aNJntuw3OVpDACYs8Mz/n61ydjYdMGqs1k7BQAAHIDdHum/sP6y/fT16jR+OcnxDcsdS3Jls28wxjg3xjg5xji5yzkAADuw2+g/muTMdPlMkkc2jH90ehf/qSSvrJ8GAADma8uX96vq95K8L8kPVNXlJL+S5L8lebiq7k/yrSQfmRb/oyQfTHIpybeTfGwf5gwA7EKNsekp94OdRNX8JwEAq+PiZqfPfSIfADQh+gDQhOgDQBOiDwBNiD4ANCH6ANCE6ANAE6IPAE2IPgA0IfoA0IToA0ATog8ATYg+ADQh+gDQhOgDQBOiDwBNiD4ANCH6ANCE6ANAE6IPAE2IPgA0IfoA0IToA0ATog8ATYg+ADQh+gDQhOgDQBOiDwBNiD4ANCH6ANCE6ANAE6IPAE2IPgA0IfoA0IToA0ATog8ATYg+ADQh+gDQhOgDQBOiDwBNiD4ANCH6ANCE6ANAE6IPAE2IPgA0IfoA0IToA0ATog8ATYg+ADQh+gDQhOgDQBOiDwBNiD4ANCH6ANCE6ANAE6IPAE2IPgA0IfoA0IToA0ATog8ATYg+ADQh+gDQhOgDQBOiDwBNiD4ANCH6ANCE6ANAE6IPAE2IPgA0IfoA0IToA0ATog8ATYg+ADQh+gDQhOgDQBOiDwBNiD4ANCH6ANCE6ANAE6IPAE2IPgA0IfoA0IToA0ATog8ATYg+ADQh+gDQhOgDQBOiDwBNiD4ANCH6ANCE6ANAE6IPAE2IPgA0IfoA0MSW0a+q41X1ZFU9U1XfqKqPT+O3VtVjVfXs9PUt03hV1Ser6lJVfbWq3r3fdwIA2Np2jvRfTfILY4x3JjmV5Ger6l1JHkjy+BjjRJLHp+tJ8oEkJ6Y/Z5N8auazBgB2bMvojzGeH2P8+XT5H5M8k+RoktNJzk+LnU9y73T5dJLPjDVfSnKkqu6Y+cwBgB3Z0Tn9qrozyY8meSrJ7WOM55O1JwZJbpsWO5rkuQ1/7fI0BgDM0eHtLlhV35/k95P8/BjjH6rqhotuMjY2+X5ns/byPwBwALZ1pF9Vb8ha8H93jPEH0/AL6y/bT1+vTuOXkxzf8NePJbly7fccY5wbY5wcY5zc7eQBgO3bzrv3K8lDSZ4ZY/zGhpseTXJmunwmySMbxj86vYv/VJJX1k8DAADzU2Nc98r76xeo+vEkf5rka0m+Ow3/ctbO6z+c5AeTfCvJR8YYL05PEn4ryT1Jvp3kY2OMC1v8jJtPAgDYiYubvZK+ZfQPgugDwExtGn2fyAcATYg+ADQh+gDQhOgDQBOiDwBNiD4ANCH6ANCE6ANAE6IPAE2IPgA0IfoA0IToA0ATog8ATYg+ADQh+gDQhOgDQBOiDwBNiD4ANCH6ANCE6ANAE6IPAE2IPgA0IfoA0IToA0ATog8ATYg+ADQh+gDQhOgDQBOiDwBNiD4ANCH6ANCE6ANAE6IPAE2IPgA0IfoA0IToA0ATog8ATYg+ADQh+gDQhOgDQBOiDwBNiD4ANCH6ANCE6ANAE6IPAE2IPgA0IfoA0IToA0ATog8ATYg+ADQh+gDQhOgDQBOiDwBNiD4ANCH6ANCE6ANAE6IPAE2IPgA0IfoA0IToA0ATog8ATYg+ADQh+gDQhOgDQBOiDwBNiD4ANCH6ANCE6ANAE6IPAE2IPgA0IfoA0IToA0ATog8ATYg+ADQh+gDQhOgDQBOiDwBNiD4ANCH6ANCE6ANAE6IPAE2IPgA0IfoA0IToA0ATos+BG2NkjDHvaUAbtjnWiT4Han3HU1Vzngn0I/yIPgfi2iONVd75OKpaLuvrq8s663I/2Zzos+8228ms6pG+Hepy67L+utxPrnd43hNgtd1o5zLGWJnw24Guli6noLrcT17PkT77osvLpR3uY1dd1m2XbZU1jvSZmU47jk73tbON63lZj4i3+1h15N+DI31molMEO91Xlt9OI+7If7WJPnvSaQfR6b52st0oLuv63+2cl/G+sjXRZ9f2ulNYpp3KMs2Vndnpuu30WFjWJzrc2JbRr6o3VdWfVdVfVNU3qupXp/G3V9VTVfVsVX2+qm6Zxt84Xb803X7n/t4FDtqsdgTLcu7QTm+17eZx2O0x0e3+rrLtHOl/J8ndY4wfSXJXknuq6lSSTyR5cIxxIslLSe6flr8/yUtjjHckeXBajhUxy41/0Xcke3lysyxPaNi9ZTgK7rS9sj1bRn+s+afp6humPyPJ3Um+MI2fT3LvdPn0dD3T7e8ve8Cl1vETyzqdumBvOm0fne7rqtrWOf2qOlRVX0lyNcljSf4myctjjFenRS4nOTpdPprkuSSZbn8lyVtnOWkOxkFs3Iu281i0+bBcOj1+xH85bSv6Y4x/GWPcleRYkvckeedmi01fNzuqv+6RUVVnq+pCVV3Y7mQ5GB035lnfZy9u9bUo285BzaPj/mKZ7ejd+2OMl5P8cZJTSY5U1fqH+xxLcmW6fDnJ8SSZbn9zkhc3+V7nxhgnxxgndzd1Zq3rxtvxPrO/Om5LXvpfDtt59/7bqurIdPn7kvxEkmeSPJnkw9NiZ5I8Ml1+dLqe6fYnhkfBQuu6oXa93xycro8v29bi2s7H8N6R5HxVHcrak4SHxxhfrKq/TPK5qvq1JE8neWha/qEkn62qS1k7wr9vH+bNDCzKRjmP/3xnUe47i6Gq9u0x0fnjbTvf90VVi7Dzq6r5T6KRRVjn1zqIncJB3m87ueWyio+NRdvObRMH7uJmp899Ih8tLNoOkMVykEHq+K9iWBz+lz1Wlh0fi2wV/gc/lo/osxBmdV5f6FlGzn1zUESfhXGjYO/kf0GDZbbT+HvMs1Oiz8K72cugdnrMwqI9jm4W/0WbK8tF9Fkqy7DD8xLt8tnPf7K3F4s4J5abd+8DsO88gVkMot+MDQ+gL9EHgCZEHwCaEH0AaEL0AaAJ0YcZ82ZJYFGJPsyYf6cPLCrRB4AmRB9mzMv7wKISfQBoQvQBoAnRB4AmRB8AmhB9AGhC9AGgCdFvxgfHAPQl+jBjnlgBi0r0Adh3ngwvBtEHgCZEHwCaEH0AaEL0AaAJ0QeAJkQfAJoQfQBoQvQBoAnRb8iHZAD0JPoA8WSYHkQfAJoQfZghR4twPdvF4hB9AGhC9JvyzBugH9EHmHgyPHt+p4tF9GFG7NyARSf6ANCE6ANAE6IPsIHTNKwy0W/Mzm12/C6BZSD6ANfwJG42/B4Xj+jDHtmxActC9JsTLNicbYNVJPqwB8IAm7NtLCbRB7gB4WLViD7skiAAy0b0ES9gpuxTFpfoA0ATok8Sz8x3yu+rD+uaVSL6AMyMJ0mLTfQBtiBkrArR5zV2bNvj9wSbs20sPtHndWy0AKtL9AHYMwcMy0H0AbZB1FgFos917NyAnbDPWB6iz6ZsxJvzewGWmegDbJMnfdfzO1kuog8ATYg+N+QZ/Ov5fcDr2SaWj+hzUzZqgNUh+gDsmAOC5ST6bMnGDWxkn7C8RJ9tsZEDLD/RB2DbHAAsN9Fn22zs0Hs76HzfV4XosyM2eoDlJfoAbMkT/tUg+uyYjR96sc2vDtFnV+wEoAfb+moRfQBoQvQBoAnRZ9e87AerzTa+ekSfPbFTgNVk215Nos+e2TnAarFNry7RZybsJAAWn+gD7MAYY95T2FeewK820Wdm7CxgudmGV5/oM1N2GrCcbLs9iD4zZ+cBy6OqbLONiD77wo4EFp9ttB/RZ1/ZqcBism32JPrsOzsXgMUg+gDNeCLel+hzIOxkYDHYFnsTfQ7Msu9sVv1DWVh9y74Nsneiz4Gy04H5sO2RiD5zYOfDslrWV3tsc6wTfebCTohltIyP22WcM/tn29GvqkNV9XRVfXG6/vaqeqqqnq2qz1fVLdP4G6frl6bb79yfqbPslu0DfJZprpB4zHK9nRzpfzzJMxuufyLJg2OME0leSnL/NH5/kpfGGO9I8uC0HNzQsuyYlvWlXfpZtifUHJxtRb+qjiX5ySS/PV2vJHcn+cK0yPkk906XT0/XM93+/vLoYwvL8BBZhjmCxyk3s90j/d9M8otJvjtdf2uSl8cYr07XLyc5Ol0+muS5JJluf2VaHm7K0Qnsje2HrWwZ/ar6UJKrY4yLG4c3WXRs47aN3/dsVV2oqgvbmiltLFr8F20+zNf642FRHhOLNh8W2+FtLPPeJD9VVR9M8qYk/zZrR/5HqurwdDR/LMmVafnLSY4nuVxVh5O8OcmL137TMca5JOeSpKqcLOU66zuxeZ1LtxNlKx6jLJstj/THGL80xjg2xrgzyX1Jnhhj/EySJ5N8eFrsTJJHpsuPTtcz3f7E8A4o9mC/j2Q2fn9HTezGQT1+PEbZq+0c6d/If0nyuar6tSRPJ3loGn8oyWer6lLWjvDv29sU4Xu22tHd7PmlnSQH6UaPN49R5qkW4SDcy/sAMFMXxxgnrx30iXwA0IToA0ATog8ATYg+ADQh+gDQhOgDQBOiDwBNiD4ANCH6ANCE6ANAE6IPAE2IPgA0IfoA0IToA0ATog8ATYg+ADQh+gDQhOgDQBOiDwBNiD4ANCH6ANCE6ANAE6IPAE2IPgA0IfoA0IToA0ATog8ATYg+ADQh+gDQhOgDQBOiDwBNiD4ANCH6ANCE6ANAE6IPAE2IPgA0IfoA0IToA0ATog8ATYg+ADQh+gDQhOgDQBOiDwBNiD4ANCH6ANCE6ANAE6IPAE2IPgA0IfoA0IToA0ATog8ATYg+ADQh+gDQhOgDQBOiDwBNiD4ANCH6ANCE6ANAE6IPAE2IPgA0IfoA0IToA0ATog8ATYg+ADQh+gDQhOgDQBOiDwBNiD4ANCH6ANCE6ANAE6IPAE2IPgA0IfoA0IToA0ATog8ATYg+ADQh+gDQhOgDQBOiDwBNiD4ANCH6ANCE6ANAE6IPAE2IPgA0IfoA0IToA0ATog8ATYg+ADQh+gDQhOgDQBOiDwBNiD4ANCH6ANCE6ANAE9uKflX9bVV9raq+UlUXprFbq+qxqnp2+vqWabyq6pNVdamqvlpV797POwAAbM9OjvT//RjjrjHGyen6A0keH2OcSPL4dD1JPpDkxPTnbJJPzWqyAMDu7eXl/dNJzk+Xzye5d8P4Z8aaLyU5UlV37OHnAAAzsN3ojyT/p6ouVtXZaez2McbzSTJ9vW0aP5rkuQ1/9/I09jpVdbaqLqyfLgAA9tfhbS733jHGlaq6LcljVfV/b7JsbTI2rhsY41ySc0lSVdfdDgDM1raO9McYV6avV5P8YZL3JHlh/WX76evVafHLSY5v+OvHklyZ1YQBgN3ZMvpV9a+r6t+sX07yH5N8PcmjSc5Mi51J8sh0+dEkH53exX8qySvrpwEAgPnZzsv7tyf5w6paX/5/jDH+V1V9OcnDVXV/km8l+ci0/B8l+WCSS0m+neRjM581ALBjNcb8T6c7pw8AM3Vxwz+xf41P5AOAJkQfAJoQfQBoQvQBoAnRB4AmRB8AmhB9AGhC9AGgCdEHgCZEHwCaEH0AaEL0AaAJ0QeAJkQfAJoQfQBoQvQBoAnRB4AmRB8AmhB9AGhC9AGgCdEHgCZEHwCaEH0AaOLwvCcw+fsk/2/6yuL5gVg3i8h6WVzWzeLqsm7+3WaDNcY46IlsqqoujDFOznseXM+6WUzWy+KybhZX93Xj5X0AaEL0AaCJRYr+uXlPgBuybhaT9bK4rJvF1XrdLMw5fQBgfy3SkT4AsI/mHv2quqeq/qqqLlXVA/OeTzdV9emqulpVX98wdmtVPVZVz05f3zKNV1V9clpXX62qd89v5quvqo5X1ZNV9UxVfaOqPj6NWz9zVlVvqqo/q6q/mNbNr07jb6+qp6Z18/mqumUaf+N0/dJ0+53znP+qq6pDVfV0VX1xum69TOYa/ao6lOS/J/lAkncl+emqetc859TQ7yS555qxB5I8PsY4keTx6Xqytp5OTH/OJvnUAc2xq1eT/MIY451JTiX52Wn7sH7m7ztJ7h5j/EiSu5LcU1WnknwiyYPTunkpyf3T8vcneWmM8Y4kD07LsX8+nuSZDdetl8m8j/Tfk+TSGOObY4x/TvK5JKfnPKdWxhh/kuTFa4ZPJzk/XT6f5N4N458Za76U5EhV3XEwM+1njPH8GOPPp8v/mLWd2NFYP3M3/Y7/abr6hunPSHJ3ki9M49eum/V19oUk76+qOqDptlJVx5L8ZJLfnq5XrJfXzDv6R5M8t+H65WmM+bp9jPF8shaeJLdN49bXnEwvO/5okqdi/SyE6SXkryS5muSxJH+T5OUxxqvTIht//6+tm+n2V5K89WBn3MZvJvnFJN+drr811str5h39zZ5R+ecEi8v6moOq+v4kv5/k58cY/3CzRTcZs372yRjjX8YYdyU5lrVXLd+52WLTV+vmAFTVh5JcHWNc3Di8yaJt18u8o385yfEN148luTKnufA9L6y/LDx9vTqNW18HrKrekLXg/+4Y4w+mYetngYwxXk7yx1l738WRqlr/P002/v5fWzfT7W/O9afV2Lv3JvmpqvrbrJ0uvjtrR/7Wy2Te0f9ykhPTOytvSXJfkkfnPCfW1sGZ6fKZJI9sGP/o9C7xU0leWX+Zmdmbzi0+lOSZMcZvbLjJ+pmzqnpbVR2ZLn9fkp/I2nsunkzy4Wmxa9fN+jr7cJInhg9Jmbkxxi+NMY6NMe7MWk+eGGP8TKyX18z9w3mq6oNZeyZ2KMmnxxi/PtcJNVNVv5fkfVn7n6deSPIrSf5nkoeT/GCSbyX5yBjjxSlCv5W1d/t/O8nHxhgX5jHvDqrqx5P8aZKv5XvnJ385a+f1rZ85qqofztobwA5l7eDp4THGf62qH8raEeatSZ5O8p/GGN+pqjcl+WzW3pfxYpL7xhjfnM/se6iq9yX5z2OMD1kv3zP36AMAB2PeL+8DAAdE9AGgCdEHgCZEHwCaEH0AaEL0AaAJ0QeAJkQfAJr4/zlXt8Vwa6DLAAAAAElFTkSuQmCC\n",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# This gets all of the structures targeted by the Allen Brain Observatory project\n",
"brain_observatory_structures = rsp.structure_tree.get_structures_by_set_id([514166994])\n",
"brain_observatory_ids = [st['id'] for st in brain_observatory_structures]\n",
"\n",
"brain_observatory_mask = rsp.make_structure_mask(brain_observatory_ids)\n",
"\n",
"# view in horizontal section\n",
"fig, ax = plt.subplots(figsize=(10, 10))\n",
"plt.imshow(brain_observatory_mask[:, 40, :], interpolation='none', cmap=plt.cm.afmhot)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"You can also make and store a number of structure_masks at once, however this is only accessible using the `ReferenceSpace` class directly:"
]
},
{
"cell_type": "code",
"execution_count": 65,
"metadata": {
"scrolled": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"made mask for structure 385.\n",
"made mask for structure 1097.\n"
]
},
{
"data": {
"text/plain": [
"['ccf_2017', 'structure_385.nrrd', 'structure_1097.nrrd']"
]
},
"execution_count": 65,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import functools\n",
"from allensdk.core.reference_space import ReferenceSpace\n",
"\n",
"# Define a wrapper function that will control the mask generation. \n",
"# This one checks for a nrrd file in the specified base directory \n",
"# and builds/writes the mask only if one does not exist\n",
"annotation_dir = 'annotation'\n",
"mask_writer = functools.partial(ReferenceSpace.check_and_write, annotation_dir)\n",
" \n",
"# many_structure_masks is a generator - nothing has actrually been run yet\n",
"mask_generator = rsp.many_structure_masks([385, 1097], mask_writer)\n",
"\n",
"# consume the resulting iterator to make and write the masks\n",
"for structure_id in mask_generator:\n",
" print( 'made mask for structure {0}.'.format(structure_id) ) \n",
"\n",
"os.listdir(annotation_dir)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Removing unassigned structures"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"A structure graph may contain structures that are not used in a particular reference space. Having these around can complicate use of the reference space, so we generally want to remove them.\n",
"\n",
"We'll try this using \"Somatosensory areas, layer 6a\" as a test case. In the 2016 ccf space, this structure is unused in favor of finer distinctions (e.g. \"Primary somatosensory area, barrel field, layer 6a\")."
]
},
{
"cell_type": "code",
"execution_count": 66,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"voxel count for structure 12997: 0\n"
]
},
{
"data": {
"text/plain": [
"False"
]
},
"execution_count": 66,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Double-check the voxel counts\n",
"no_voxel_id = rsp.structure_tree.get_structures_by_name(['Somatosensory areas, layer 6a'])[0]['id']\n",
"print( 'voxel count for structure {0}: {1}'.format(no_voxel_id, rsp.total_voxel_map[no_voxel_id]) )\n",
"\n",
"# remove unassigned structures from the ReferenceSpace's StructureTree\n",
"rsp.remove_unassigned()\n",
"\n",
"# check the structure tree\n",
"no_voxel_id in rsp.structure_tree.node_ids()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### View a slice from the annotation"
]
},
{
"cell_type": "code",
"execution_count": 67,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
""
]
},
"execution_count": 67,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"import numpy as np\n",
"\n",
"fig, ax = plt.subplots(figsize=(10, 10))\n",
"plt.imshow(rsp.get_slice_image(1, 5000), interpolation='none')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Downsample the space\n",
"\n",
"If you want an annotation at a resolution we don't provide, you can make one with the downsample method."
]
},
{
"cell_type": "code",
"execution_count": 68,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"(528, 320, 456)\n",
"(176, 107, 152)\n"
]
}
],
"source": [
"import warnings\n",
"\n",
"target_resolution = [75, 75, 75]\n",
"\n",
"# in some versions of scipy, scipy.ndimage.zoom raises a helpful but distracting \n",
"# warning about the method used to truncate integers. \n",
"warnings.simplefilter('ignore')\n",
"\n",
"sf_rsp = rsp.downsample(target_resolution)\n",
"\n",
"# re-enable warnings\n",
"warnings.simplefilter('default')\n",
"\n",
"print( rsp.annotation.shape )\n",
"print( sf_rsp.annotation.shape )"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now view the downsampled space:"
]
},
{
"cell_type": "code",
"execution_count": 69,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
""
]
},
"execution_count": 69,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"fig, ax = plt.subplots(figsize=(10, 10))\n",
"plt.imshow(sf_rsp.get_slice_image(1, 5000), interpolation='none')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Exporting\n",
"\n",
"if you want to work with our reference space data using tools made by vendors other than the Allen Institute for Brain Science, you may need to do some conversion work. The AllenSDK contains a few convenience functions which implement common conversions. If you don't see the one you need, mention it on [our issues page](https://github.com/alleninstitute/allensdk/issues)."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### ITKSnap\n",
"\n",
"[ITKSnap](http://www.itksnap.org/pmwiki/pmwiki.php) is a tool for viewing and segmenting biological volume data. Our annotation team uses it to draw CCF annotations. If you have data aligned to one of our reference spaces, you can use the AllenSDK to export an ITKSnap compatible segmentation volume and corresponding label description file.\n",
"\n",
"Note: our structure ids are 32-bit unsigned integers and may exceed ITKSnap's maximum allowable label value (65535). If any of the ids in a structure tree do exceed this value, the `write_itksnap_labels` method will automatically remap the ids to a set of smaller numbers."
]
},
{
"cell_type": "code",
"execution_count": 70,
"metadata": {},
"outputs": [],
"source": [
"# using the downsampled annotations\n",
"hm_rsp = rsp.downsample([100, 100, 100])\n",
"hm_rsp.write_itksnap_labels('ccf_2017_itksnap.nrrd', 'ccf_2017_itksnap_labels.txt')"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.7.6"
}
},
"nbformat": 4,
"nbformat_minor": 1
}