{ "cells": [ { "cell_type": "raw", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ ".. _index_neuronlists:\n", "\n", "Indexing CatmaidNeuronLists\n", "****************************\n", ":class:`~pymaid.CatmaidNeuronList` are designed to behave similar to pandas DataFrames in that they allow some fancing indexing:" ] }, { "cell_type": "raw", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ "To illustrate, let's first get a bunch of neurons" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
neuron_nameskeleton_idn_nodesn_connectorsn_branch_nodesn_end_nodesopen_endscable_lengthreview_statussoma
0neuron 45629484562947200113.945403NAFalse
1neuron 7094282 MWP Hogeweg70942814267645657421537.999647NATrue
2neuron 8216644 NS821664359341401631661412330.199132NAFalse
3Multiglomerular PN mALT 57431 IJA ECM574305436205101106871389.803214NATrue
4aSP-g tract 6725720 KMS6725719225129798438842.488107NATrue
\n", "
" ], "text/plain": [ " neuron_name skeleton_id n_nodes n_connectors \\\n", "0 neuron 4562948 4562947 2 0 \n", "1 neuron 7094282 MWP Hogeweg 7094281 4267 64 \n", "2 neuron 8216644 NS 8216643 5934 140 \n", "3 Multiglomerular PN mALT 57431 IJA ECM 57430 5436 205 \n", "4 aSP-g tract 6725720 KMS 6725719 2251 29 \n", "\n", " n_branch_nodes n_end_nodes open_ends cable_length review_status soma \n", "0 0 1 1 3.945403 NA False \n", "1 56 57 42 1537.999647 NA True \n", "2 163 166 141 2330.199132 NA False \n", "3 101 106 87 1389.803214 NA True \n", "4 79 84 38 842.488107 NA True " ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "skids = pymaid.get_neurons_in_volume('AL_L')\n", "nl = pymaid.get_neurons(skids)\n", "nl.head()" ] }, { "cell_type": "raw", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ "Index by attributes\n", "+++++++++++++++++++\n", "\n", "You can index by all :class:`pymaid.CatmaidNeuronList` attributes that return a ``numpy.array``. For example ``n_nodes``, ``cable_length``, ``soma``, etc.\n", "\n", "Index using node count" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
neuron_nameskeleton_idn_nodesn_connectorsn_branch_nodesn_end_nodesopen_endscable_lengthreview_statussoma
0Multiglomerular bilateral PN mALT 57435 LK574348582155161168821415.474701NATrue
1PBG5-EBw-gall (right) neuron 341414 EWN AW42107862939731071886195504875.387524NATrue
2Multiglomerular PN mALT bilateral 57476 IJA574756737174192196631236.637869NATrue
3putative OA mALT 57480 GA FML5747985582262022071161965.510890NATrue
4PN glomerulus VL1 57500 ML5749965515303033221111854.932978NATrue
\n", "
" ], "text/plain": [ " neuron_name skeleton_id n_nodes \\\n", "0 Multiglomerular bilateral PN mALT 57435 LK 57434 8582 \n", "1 PBG5-EBw-gall (right) neuron 341414 EWN AW 4210786 29397 \n", "2 Multiglomerular PN mALT bilateral 57476 IJA 57475 6737 \n", "3 putative OA mALT 57480 GA FML 57479 8558 \n", "4 PN glomerulus VL1 57500 ML 57499 6551 \n", "\n", " n_connectors n_branch_nodes n_end_nodes open_ends cable_length \\\n", "0 155 161 168 82 1415.474701 \n", "1 3107 1886 1955 0 4875.387524 \n", "2 174 192 196 63 1236.637869 \n", "3 226 202 207 116 1965.510890 \n", "4 530 303 322 111 1854.932978 \n", "\n", " review_status soma \n", "0 NA True \n", "1 NA True \n", "2 NA True \n", "3 NA True \n", "4 NA True " ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "subset = nl[nl.n_nodes > 6000]\n", "subset.head()" ] }, { "cell_type": "raw", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ "Subset to neurons that have a soma" ] }, { "cell_type": "code", "execution_count": 28, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
neuron_nameskeleton_idn_nodesn_connectorsn_branch_nodesn_end_nodesopen_endscable_lengthreview_statussoma
0neuron 7094282 MWP Hogeweg70942814267645657421537.999647NATrue
1Multiglomerular PN mALT 57431 IJA ECM574305436205101106871389.803214NATrue
2aSP-g tract 6725720 KMS6725719225129798438842.488107NATrue
3Multiglomerular bilateral PN mALT 57435 LK574348582155161168821415.474701NATrue
4PBG5-EBw-gall (right) neuron 341414 EWN AW42107862939731071886195504875.387524NATrue
\n", "
" ], "text/plain": [ " neuron_name skeleton_id n_nodes \\\n", "0 neuron 7094282 MWP Hogeweg 7094281 4267 \n", "1 Multiglomerular PN mALT 57431 IJA ECM 57430 5436 \n", "2 aSP-g tract 6725720 KMS 6725719 2251 \n", "3 Multiglomerular bilateral PN mALT 57435 LK 57434 8582 \n", "4 PBG5-EBw-gall (right) neuron 341414 EWN AW 4210786 29397 \n", "\n", " n_connectors n_branch_nodes n_end_nodes open_ends cable_length \\\n", "0 64 56 57 42 1537.999647 \n", "1 205 101 106 87 1389.803214 \n", "2 29 79 84 38 842.488107 \n", "3 155 161 168 82 1415.474701 \n", "4 3107 1886 1955 0 4875.387524 \n", "\n", " review_status soma \n", "0 NA True \n", "1 NA True \n", "2 NA True \n", "3 NA True \n", "4 NA True " ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" } ], "source": [ "subset = nl[nl.soma != None]\n", "subset.head()" ] }, { "cell_type": "raw", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ "Index by skeleton ID\n", "++++++++++++++++++++\n", "\n", "Indexing by skeleton ID(s) uses the ``.skid`` indexer:\n", "\n", "Index by single skeleton ID" ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
type<class 'pymaid.core.CatmaidNeuron'>
neuron_namePN glomerulus VL1 57500 ML
skeleton_id57499
n_nodes6551
n_connectors530
n_branch_nodes303
n_end_nodes322
n_open_ends111
cable_length1854.93
review_statusNA
soma3247378
\n", "
" ], "text/plain": [ "type \n", "neuron_name PN glomerulus VL1 57500 ML\n", "skeleton_id 57499\n", "n_nodes 6551\n", "n_connectors 530\n", "n_branch_nodes 303\n", "n_end_nodes 322\n", "n_open_ends 111\n", "cable_length 1854.93\n", "review_status NA\n", "soma 3247378\n", "dtype: object" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "subset = nl.skid['57499']\n", "subset" ] }, { "cell_type": "raw", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ "Index by list of skeleton IDs" ] }, { "cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
neuron_nameskeleton_idn_nodesn_connectorsn_branch_nodesn_end_nodesopen_endscable_lengthreview_statussoma
0putative OA mALT 57480 GA FML5747985582262022071161965.510890NATrue
1PN glomerulus VL1 57500 ML5749965515303033221111854.932978NATrue
\n", "
" ], "text/plain": [ " of 2 neurons \n", " neuron_name skeleton_id n_nodes n_connectors \\\n", "0 putative OA mALT 57480 GA FML 57479 8558 226 \n", "1 PN glomerulus VL1 57500 ML 57499 6551 530 \n", "\n", " n_branch_nodes n_end_nodes open_ends cable_length review_status soma \n", "0 202 207 116 1965.510890 NA True \n", "1 303 322 111 1854.932978 NA True " ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "subset = nl.skid [[57499, 57479]]\n", "subset" ] }, { "cell_type": "raw", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ "Index by neuron name\n", "++++++++++++++++++++\n", "\n", "If you index a :class:`pymaid.CatmaidNeuronList` by a name (i.e. something that can't be converted into an integer), it will assumed to be a neuron name:" ] }, { "cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
neuron_nameskeleton_idn_nodesn_connectorsn_branch_nodesn_end_nodesopen_endscable_lengthreview_statussoma
0PN glomerulus VL1 57500 ML5749965515303033221111854.932978NATrue
\n", "
" ], "text/plain": [ " of 1 neurons \n", " neuron_name skeleton_id n_nodes n_connectors \\\n", "0 PN glomerulus VL1 57500 ML 57499 6551 530 \n", "\n", " n_branch_nodes n_end_nodes open_ends cable_length review_status soma \n", "0 303 322 111 1854.932978 NA True " ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "subset = nl['PN glomerulus VL1 57500 ML']\n", "subset" ] }, { "cell_type": "raw", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ "Index by annotation\n", "+++++++++++++++++++\n", "\n", "Indexing by annotation(s) uses the :func:`~pymaid.CatmaidNeuronList.has_annotation` function. " ] }, { "cell_type": "code", "execution_count": 26, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
neuron_nameskeleton_idn_nodesn_connectorsn_branch_nodesn_end_nodesopen_endscable_lengthreview_statussoma
0PN glomerulus VL1 57500 ML5749965515303033221111854.932978NATrue
1Multiglomerular PN mALT 57537 LK-NM575361465412338509062783193.380472NATrue
2PN glomerulus VL1 73938 LK7393752734522592741191610.767540NATrue
3AL.L(DA1) -{mALT}-> CAL.L-LH.L 2319458 PN036 D...231945710209964431458901747.511710NATrue
4PN glomerulus DA2 2467660 RJVR2467659285526654568726.656270NATrue
\n", "
" ], "text/plain": [ " neuron_name skeleton_id n_nodes \\\n", "0 PN glomerulus VL1 57500 ML 57499 6551 \n", "1 Multiglomerular PN mALT 57537 LK-NM 57536 14654 \n", "2 PN glomerulus VL1 73938 LK 73937 5273 \n", "3 AL.L(DA1) -{mALT}-> CAL.L-LH.L 2319458 PN036 D... 2319457 10209 \n", "4 PN glomerulus DA2 2467660 RJVR 2467659 2855 \n", "\n", " n_connectors n_branch_nodes n_end_nodes open_ends cable_length \\\n", "0 530 303 322 111 1854.932978 \n", "1 1233 850 906 278 3193.380472 \n", "2 452 259 274 119 1610.767540 \n", "3 964 431 458 90 1747.511710 \n", "4 266 54 56 8 726.656270 \n", "\n", " review_status soma \n", "0 NA True \n", "1 NA True \n", "2 NA True \n", "3 NA True \n", "4 NA True " ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" } ], "source": [ "subset = nl.has_annotation('LH_DONE', intersect=False)\n", "subset.head()" ] }, { "cell_type": "raw", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ ":func:`pymaid.CatmaidNeuronList.has_annotation` allows for some more sophisticated intersections and criteria. For example, leading a string with \"~\" (tilde), works as a *negative* indicator:" ] }, { "cell_type": "code", "execution_count": 27, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
neuron_nameskeleton_idn_nodesn_connectorsn_branch_nodesn_end_nodesopen_endscable_lengthreview_statussoma
0neuron 45629484562947200113.945403NAFalse
1neuron 7094282 MWP Hogeweg70942814267645657421537.999647NATrue
2neuron 8216644 NS821664359341401631661412330.199132NAFalse
3Multiglomerular PN mALT 57431 IJA ECM574305436205101106871389.803214NATrue
4aSP-g tract 6725720 KMS6725719225129798438842.488107NATrue
\n", "
" ], "text/plain": [ " neuron_name skeleton_id n_nodes n_connectors \\\n", "0 neuron 4562948 4562947 2 0 \n", "1 neuron 7094282 MWP Hogeweg 7094281 4267 64 \n", "2 neuron 8216644 NS 8216643 5934 140 \n", "3 Multiglomerular PN mALT 57431 IJA ECM 57430 5436 205 \n", "4 aSP-g tract 6725720 KMS 6725719 2251 29 \n", "\n", " n_branch_nodes n_end_nodes open_ends cable_length review_status soma \n", "0 0 1 1 3.945403 NA False \n", "1 56 57 42 1537.999647 NA True \n", "2 163 166 141 2330.199132 NA False \n", "3 101 106 87 1389.803214 NA True \n", "4 79 84 38 842.488107 NA True " ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" } ], "source": [ "subset = nl.has_annotation('~LH_DONE', intersect=False)\n", "subset.head()" ] }, { "cell_type": "raw", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ "Index XOR (either or) by multiple annotations" ] }, { "cell_type": "code", "execution_count": 29, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
neuron_nameskeleton_idn_nodesn_connectorsn_branch_nodesn_end_nodesopen_endscable_lengthreview_statussoma
0PN glomerulus VL1 57500 ML5749965515303033221111854.932978NATrue
1Multiglomerular PN mALT 57537 LK-NM575361465412338509062783193.380472NATrue
2PN glomerulus VL1 73938 LK7393752734522592741191610.767540NATrue
3AL.L(DA1) -{mALT}-> CAL.L-LH.L 2319458 PN036 D...231945710209964431458901747.511710NATrue
4PN glomerulus DA2 2467660 RJVR2467659285526654568726.656270NATrue
\n", "
" ], "text/plain": [ " neuron_name skeleton_id n_nodes \\\n", "0 PN glomerulus VL1 57500 ML 57499 6551 \n", "1 Multiglomerular PN mALT 57537 LK-NM 57536 14654 \n", "2 PN glomerulus VL1 73938 LK 73937 5273 \n", "3 AL.L(DA1) -{mALT}-> CAL.L-LH.L 2319458 PN036 D... 2319457 10209 \n", "4 PN glomerulus DA2 2467660 RJVR 2467659 2855 \n", "\n", " n_connectors n_branch_nodes n_end_nodes open_ends cable_length \\\n", "0 530 303 322 111 1854.932978 \n", "1 1233 850 906 278 3193.380472 \n", "2 452 259 274 119 1610.767540 \n", "3 964 431 458 90 1747.511710 \n", "4 266 54 56 8 726.656270 \n", "\n", " review_status soma \n", "0 NA True \n", "1 NA True \n", "2 NA True \n", "3 NA True \n", "4 NA True " ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "subset = nl.has_annotation(['LH_DONE', 'glomerulus DL1'], intersect=False)\n", "subset.head()" ] }, { "cell_type": "raw", "metadata": { "raw_mimetype": "text/restructuredtext" }, "source": [ "Index XAND (all required) by multiple annotations" ] }, { "cell_type": "code", "execution_count": 30, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
neuron_nameskeleton_idn_nodesn_connectorsn_branch_nodesn_end_nodesopen_endscable_lengthreview_statussoma
0PN glomerulus DL1 5269365 GSXEJ52693643477893167181581228.339971NATrue
1PN glomerulus DL1 5305038 ARJ53050372818898128138151050.094319NATrue
\n", "
" ], "text/plain": [ " neuron_name skeleton_id n_nodes n_connectors \\\n", "0 PN glomerulus DL1 5269365 GSXEJ 5269364 3477 893 \n", "1 PN glomerulus DL1 5305038 ARJ 5305037 2818 898 \n", "\n", " n_branch_nodes n_end_nodes open_ends cable_length review_status soma \n", "0 167 181 58 1228.339971 NA True \n", "1 128 138 15 1050.094319 NA True " ] }, "execution_count": 30, "metadata": {}, "output_type": "execute_result" } ], "source": [ "subset = nl.has_annotation(['LH_DONE', 'glomerulus DL1'], intersect=True)\n", "subset.head()" ] } ], "metadata": { "celltoolbar": "Raw Cell Format", "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.0" } }, "nbformat": 4, "nbformat_minor": 2 }