{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Simulation Tutorial" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This notebook shows how to estimate the delay and amplitude response between primary brain regions for a given neuron. In general, the delay within a compartment tends to be isopotential meaning a region to region response matrix is a reasonable characterization of the output response of a neuron.\n", "\n", "The electrical simulation uses a simple linear passive model using a network of resistors and capacitors based on a skeleton representation of the neuron. Users can specify specific membrane resistance and capacitance values and cytoplasm resitance." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "\n", "**Note:** You must install some additional dependencies before using simulation functions:\n", "\n", "```\n", "conda install -c conda-forge ngspice umap-learn scikit-learn matplotlib\n", "```\n", " \n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Setup neuron model\n", "\n", "* create neuprint client using the public hemibrain dataset\n", "* build a neuron spice model for a given body id" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "from neuprint import Client\n", "\n", "TOKEN = \"\" # <--- Paste your token here\n", " # (or define NEUPRINT_APPLICATION CREDENTIALS in your environment)\n", "\n", "client = Client(\"neuprint.janelia.org\", \"hemibrain:v1.2.1\", TOKEN)" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "595621b6a3b44f9fbfb0580648b69912", "version_major": 2, "version_minor": 0 }, "text/plain": [ "HBox(children=(FloatProgress(value=0.0), HTML(value='')))" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] } ], "source": [ "# simulate a PEG neuron (same type as in hemibrain paper)\n", "from neuprint import NeuronModel\n", "nm = NeuronModel(449438847)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Estimate neuron timing" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Run simulation for the given neuron\n", "\n", "Specify the number of inputs per brain region (randomly selected) which will be tested. A current is injected at each input site one at a time and delay and amplitude response is measured." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "84f23d763d6f46d98aafbde1e2e5cc5c", "version_major": 2, "version_minor": 0 }, "text/plain": [ "HBox(children=(FloatProgress(value=0.0, max=12.0), HTML(value='')))" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] } ], "source": [ "res = nm.simulate(2)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Examine the response results\n", "\n", "compute_region_delay_matrix reports the delay between regions where the row index is the input brain region and the column names represent the output region. A delay (ms) and amplitude (mV) are returned. They are averages over all the response for a given region input-output pair.\n", "\n", "Note: the results to synapses that are not in brain regions (\"none\") are shown for completeness. But those output responses are not necessarily co-located and cannot be treated as an ROI." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "delay, amp = res.compute_region_delay_matrix()" ] }, { "cell_type": "code", "execution_count": 5, "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", "
EBLAL(R)PBnone
CRE(R)2.0742330.4273213.2081692.539196
EB1.2584672.4568163.1664342.483917
FB1.6576182.1200171.8804041.058834
LAL(R)2.3567020.3299663.4740822.809558
PB3.1435953.5502820.4378410.713781
none2.5905283.0108650.6769690.154951
\n", "
" ], "text/plain": [ " EB LAL(R) PB none\n", "CRE(R) 2.074233 0.427321 3.208169 2.539196\n", "EB 1.258467 2.456816 3.166434 2.483917\n", "FB 1.657618 2.120017 1.880404 1.058834\n", "LAL(R) 2.356702 0.329966 3.474082 2.809558\n", "PB 3.143595 3.550282 0.437841 0.713781\n", "none 2.590528 3.010865 0.676969 0.154951" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# delay matrix in ms\n", "delay" ] }, { "cell_type": "code", "execution_count": 6, "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", "
EBLAL(R)PBnone
CRE(R)0.1534070.4893850.1222300.134334
EB0.1816240.1438770.1217020.134000
FB0.1604370.1498540.1496900.167537
LAL(R)0.1469630.7498920.1174110.128987
PB0.1230220.1162360.4163250.261497
none0.1343090.1266980.2831090.311731
\n", "
" ], "text/plain": [ " EB LAL(R) PB none\n", "CRE(R) 0.153407 0.489385 0.122230 0.134334\n", "EB 0.181624 0.143877 0.121702 0.134000\n", "FB 0.160437 0.149854 0.149690 0.167537\n", "LAL(R) 0.146963 0.749892 0.117411 0.128987\n", "PB 0.123022 0.116236 0.416325 0.261497\n", "none 0.134309 0.126698 0.283109 0.311731" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# amplitude in mV\n", "amp" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Plot response from one brain region to others\n", "\n", "Each dot represents the response from each input from the specified input region (LAL(R) here) to every output in the neuron (each output brain region is indicated)." ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "res.plot_response_from_region(\"LAL(R)\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Decompose neuron connections by electrical domain\n", "\n", "Use simple linear passive delay progragation through the neuron to determine distinct domains for representing the neuron. The decomposition can be used to derive ROIs using electrical delay." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Simulate the delay 'distances' between parts of the neuron\n", "\n", "This function checks propagation delays throughout the neuron based on the number of specified points. The points are randomly chosen even between inputs and outputs. In principle, any points could be chosen." ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "630e3bd540ff487e913027795620d440", "version_major": 2, "version_minor": 0 }, "text/plain": [ "HBox(children=(FloatProgress(value=0.0), HTML(value='')))" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stdout", "output_type": "stream", "text": [ "\n" ] } ], "source": [ "res = nm.estimate_intra_neuron_delay(num_points=100)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Show delay propogation closeness between simulated points\n", "\n", "This plot should show whether there are distinct electrical domains for the neuron. The primary ROI labels are provided to show how well the points correspond to the annotated regions." ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "res.plot_neuron_domains()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Partition the neuron into different domains based on simulated points\n", "\n", "Cluster the simulated points and map a partition id to each synapse in the neuron. The function returns input and output connections broken down by these domain ids. " ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [], "source": [ "summary, detailed_io, plot = res.estimate_neuron_domains(3, plot=True)" ] }, { "cell_type": "code", "execution_count": 11, "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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
iopartnerweightdomain_idrois
0output6966821631470[EB]
1output974300015971[PB, none]
2output858587718880[EB]
3output858587718722[LAL(R)]
4output1228692168660[EB]
..................
720input581305796310[EB]
721input581306280510[CRE(R)]
722input581306138311[PB]
723input581307046510[EB]
724input581308026910[EB]
\n", "

725 rows × 5 columns

\n", "
" ], "text/plain": [ " io partner weight domain_id rois\n", "0 output 696682163 147 0 [EB]\n", "1 output 974300015 97 1 [PB, none]\n", "2 output 858587718 88 0 [EB]\n", "3 output 858587718 72 2 [LAL(R)]\n", "4 output 1228692168 66 0 [EB]\n", ".. ... ... ... ... ...\n", "720 input 5813057963 1 0 [EB]\n", "721 input 5813062805 1 0 [CRE(R)]\n", "722 input 5813061383 1 1 [PB]\n", "723 input 5813070465 1 0 [EB]\n", "724 input 5813080269 1 0 [EB]\n", "\n", "[725 rows x 5 columns]" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# input / output table broken down by domain id from partitioning\n", "summary" ] }, { "cell_type": "code", "execution_count": 12, "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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
typexyzroipartnerdomain_id
0post215102606920648EB3873646050
1post236792485720538EB3873646050
2post221352617720494EB3873646050
3post216132597420679EB3873646050
4post238702319620455EB3873646050
........................
7092pre230302489520167EB10025071310
7093pre236212490820429EB10025071310
7094pre226152450719708EB10025071310
7095pre229922488820123EB10025071310
7096pre232782460620178EB10025071310
\n", "

7097 rows × 7 columns

\n", "
" ], "text/plain": [ " type x y z roi partner domain_id\n", "0 post 21510 26069 20648 EB 387364605 0\n", "1 post 23679 24857 20538 EB 387364605 0\n", "2 post 22135 26177 20494 EB 387364605 0\n", "3 post 21613 25974 20679 EB 387364605 0\n", "4 post 23870 23196 20455 EB 387364605 0\n", "... ... ... ... ... .. ... ...\n", "7092 pre 23030 24895 20167 EB 1002507131 0\n", "7093 pre 23621 24908 20429 EB 1002507131 0\n", "7094 pre 22615 24507 19708 EB 1002507131 0\n", "7095 pre 22992 24888 20123 EB 1002507131 0\n", "7096 pre 23278 24606 20178 EB 1002507131 0\n", "\n", "[7097 rows x 7 columns]" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# domain id for each x,y,z location\n", "detailed_io" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "image/png": "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bCTrgE7ate28Iz7d/R53H3f38eHh3ioAAIBuMBu6Sf+cL9SJYe5eOU6ykawDelLSpVVfj0h6KeNnAgA6pDL3rJTDLGo129Oup1eOk2wk64B+TNKbzGydmQ1JuknSdzN+JgCgQ5qZe642oN9o+5lFOOe6EzJdZuXuM2b2WUnf1+wyq2+4+5NZPhMA0Dmt9ohn9GsdnX647eVWvXCcZCOZ7yTm7rvc/c3u/kZ3vyPr5wEAOmeZrW3xHTMdW27V69jqEwCQamzgFvVpeUvv6cQ8NNjqEwBQR2Wo+twOYn2Sylpmr1PJT2tGJxe8p/VeN5IQ0ACAutYMXp84p1yp8K4uIuvTco0N3LKUzSssAhoAsCjn9647f2hGryOgAQCLlta7RvsoEgMAICACGgCAgAhoAAACIqABAAiIgAYAICACGgCAgAhoAAACIqABAAiIgAYAICACGgCAgAhoAAACIqABAAiIgAYAICACGgCAgAhoAAACIqABAAiIgAYAICACGgCAgAhoAAACIqABAAiIgAYAICACGgCAgAhoAAACIqABAAiIgAYAICACGgCAgAhoAAACIqABAAiIgAYAICACGgCAgAhoAAACIqABAAiIgAYAICACGgCAgAhoAAACIqABAAiIgAYAICACGgCAgAhoAAACIqABAAiIgAYAICACGgCAgAhoAAACIqABAAiIgAYAICACGgCAgAhoAAACIqABAAiIgAYAIKDMAtrMvmRmvzCzn5nZg2a2KqtnAQBQNFn2oH8oaaO7Xynp/0r6QobPAgCgUDILaHf/gbvPzH35U0kjWT0LAICiWao56E9K2r1EzwIAoOsNtPNmM3tU0tqEl25z94fmvuc2STOSvp1yj+2StkvS6OhoO80BAKAw2gpod39vvdfNbJuk35H0Hnf3lHvcI+keSRofH0/8HgAAek1bAV2PmX1A0ucl/ba7n8rqOQAAFFGWc9B3S1op6Ydm9oSZ/WmGzwIAoFAy60G7+/qs7g0AQNGxkxgAAAER0AAABERAAwAQEAENAEBABDQAAAER0AAABERAAwAQEAENAEBABDQAAAER0AAABERAAwAQEAENAEBABDQAAAER0AAABERAAwAQEAENAEBABDQAAAER0AAABERAAwAQEAENAEBABDQAAAER0AAABERAAwAQEAENAEBABDQAAAER0AAABERAAwAQEAENAEBABDQAAAER0AAABERAAwAQEAENAEBABDQAAAER0AAABERAAwAQEAENAEBABDQAAAER0AAABERAAwAQEAENAEBABDQAAAER0AAABERAAwAQEAENAEBABDQAAAER0AAABERAAwAQEAENAEBABDQAAAER0AAABERAAwAQEAENAEBABDQAAAER0AAABERAAwAQUOYBbWb/yszczC7O+lkAABRFpgFtZpdKep+kw1k+BwCAosm6B/0VSf9akmf8HAAACiWzgDazGyQdcff/k9UzAAAoqoF23mxmj0pam/DSbZL+raT3N3GP7ZK2S9Lo6Gg7zQEAoDDMvfOjz2b2DyT9T0mn5i6NSHpJ0tXu/kra+8bHx31iYqLj7QEAICoz2+fu47XX2+pBp3H3v5W0purhhySNu/vxLJ4HAEDRsA4aAICAMulB13L3saV4DgAARUEPGgCAgAhoAAACIqABAAiIgAYAICACGgCAgAhoAAACIqABAAiIgAYAICACGgCAgAhoAAACIqABAAiIgAYAICACGgCAgAhoAAACIqABAAiIgAYAICACGgCAgAhoAAACIqABAAiIgAYAICACGgCAgAhoAAACIqABAAiIgAYAICACGgCAgAhoAAACIqABAAiIgAYAICACGgCAgAhoAAACIqABAAiIgAYAICACGgCAgAhoAAACIqABAAiIgAYAICACGgCAgAhoAAACIqABAAiIgAYAICACGgCAgAhoAAACIqABAAiIgAYAICACGgCAgAhoAAACIqABAAiIgAYAICACGgCAgAhoAAACIqABAAiIgAYAICACGgCAgAhoAAACIqABAAgo04A2sz8ws6fN7Ekz+6MsnwUAQJEMZHVjM7tG0gclXenuZ81sTVbPAgCgaLLsQf++pDvd/awkufvRDJ8FAEChZBnQb5b0W2b2N2b2V2Z2VdI3mdl2M5sws4ljx45l2BwAALpHW0PcZvaopLUJL902d++LJL1d0lWSvmNml7m7V3+ju98j6R5JGh8f99obAQDQi9oKaHd/b9prZvb7kv5iLpD3mllZ0sWS6CYDANBAlkPcfynp3ZJkZm+WNCTpeIbPAwCgMDKr4pb0DUnfMLMDkqYkbasd3gYAAMkyC2h3n5L0T7K6PwAARcZOYgAABERAAwAQEAENAEBABDQAAAER0AAABERAAwAQEAENAEBABDQAAAER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", "text/plain": [ "
" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "plot" ] } ], "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.8" }, "nbsphinx": { "execute": "auto" } }, "nbformat": 4, "nbformat_minor": 4 }