{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Vision Model Demo" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This notebook illustrates how to run a Neurokernel-based model of portions of the fly's vision system." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Background" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In addition to the retina where the photo-transduction takes place, the optic\n", "lobe of the *Drosophila* can be divided into 4 major LPUs on each side of\n", "the fly brain respectively referred to as the lamina, medulla, lobula and lobula\n", "plate. Visual information progresses along a processing path that starts at the\n", "retina and successively passes through the lamina, medulla, and either the\n", "lobula or the lobula plate. The spatial structure of the visual stimulus is\n", "preserved by the retinotopic columnar organization of most of these LPUs.\n", "\n", "There are at least 120 different types of neurons in the optic lobe. \n", "Most of the neurons in the optic lobe (if not all)\n", "do not emit spikes; rather, they communicate via chemical synapses where\n", "neurotransmitter is tonically released based on the graded potential of the\n", "presynaptic neurons. The synapses can have varying amount of delays based on the\n", "different neurotransmitters. Many neurons in the optic lobe also communicate\n", "through gap junctions.\n", "\n", "The current vision system model is based upon available connectome data for the\n", "lamina [(Rivera-Alba et al., 2011)](#rivera-alba_wiring_2011) and medulla\n", "[(Fischbach et al., 1989;](#fischbach_optic_1989)[ Higgins et al., 2004)](#higgins_computational_2004). The model\n", "consists of two LPUs; the first contains 9516 neurons (or about 90% of the\n", "cells) in the retina and lamina, while the second contains 6920 (or about 17%\n", "of the cells) in the medulla and several neurons that connect to both the\n", "medulla and first layer of the lobula. All neurons are modeled using the\n", "Morris-Lecar model with parameters selected to not elicit spiking activity. \n", "Synapses are modeled using a simple model of tonic neurotransmitter release and \n", "its effect upon postsynaptic conductance. The model does not currently comprise gap junctions.\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Specification of Neurons and Synapses in Lamina" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "First, we import some plotting utilities:" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": true }, "outputs": [], "source": [ "%matplotlib inline\n", "import matplotlib as mpl\n", "import matplotlib.pyplot as p" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Assuming that the Neurokernel source has been cloned to ``~/neurokernel``, we first \n", "consider the two csv files that specify neurons and synapses in the lamina model.\n" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": true }, "outputs": [], "source": [ "%cd -q ~/neurokernel/examples/vision/data" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The neuron model types and their parameter values are specified in the file ``neuron_type_lamina.csv``. The entire list of neurons is shown below. Note that for convenience, the LPU contains neurons from both the retina and lamina. Descriptions of each of the columns follow:\n", "\n", "* ``name`` - Name of neuron morphological type.\n", "* ``model`` - Specifies the name of the class implementing the neuron model. \n", "* ``columnar`` - A value of 1 in column indicates that the neuron/element is a columnar neuron/element; a number greater than 1 indicates the total number of non-columnar neurons of the specified ``name`` in the lamina. \n", "* ``dummy`` - Used to indicate alpha-profiles.\n", "* ``input`` - Indicates whether the neuron is an input axon from another LPU.\n", "* ``output`` - Indicates whether the neuron is an output neuron.\n", "* ``extern`` - Specifies if the neuron receives external input, e.g., a video signal. \n", "* ``public`` - Specifies if the neuron may communicate with other LPUs via Neurokernel's API. \n", "\n", "The remaining columns in the table are neuron model parameters." ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
namemodelcolumnardummyinputoutputexternpublicV1V2V3V4phiinitVinitnoffset
0R1MorrisLecar1000100.0300.0150.000.0300.0250-0.052140.03000.00
1R2MorrisLecar1000100.0300.0150.000.0300.0250-0.052140.03000.00
2R3MorrisLecar1000100.0300.0150.000.0300.0250-0.052140.03000.00
3R4MorrisLecar1000100.0300.0150.000.0300.0250-0.052140.03000.00
4R5MorrisLecar1000100.0300.0150.000.0300.0250-0.052140.03000.00
5R6MorrisLecar1000100.0300.0150.000.0300.0250-0.052140.03000.00
6L1MorrisLecar100101-0.0010.015-0.050.0010.0025-0.050000.50000.02
7L2MorrisLecar100101-0.0010.015-0.050.0010.0025-0.050000.50000.02
8L3MorrisLecar100101-0.0010.015-0.050.0010.0025-0.050000.50000.02
9L4MorrisLecar100101-0.0010.015-0.050.0010.0025-0.050000.50000.02
10L5MorrisLecar100101-0.0010.015-0.050.0010.0025-0.050000.50000.02
11T1MorrisLecar100101-0.0010.015-0.050.0010.0025-0.050000.50000.02
12C2port_in_gpot101001-0.0010.015-0.050.0010.0025-0.050000.50000.02
13C3port_in_gpot101001-0.0010.015-0.050.0010.0025-0.050000.50000.02
14AmMorrisLecar35000000-0.0010.0150.000.0300.2000-0.051840.03060.00
15a1MorrisLecar110000-0.0010.015-0.050.0010.00250.000000.00000.00
16a2MorrisLecar110000-0.0010.015-0.050.0010.00250.000000.00000.00
17a3MorrisLecar110000-0.0010.015-0.050.0010.00250.000000.00000.00
18a4MorrisLecar110000-0.0010.015-0.050.0010.00250.000000.00000.00
19a5MorrisLecar110000-0.0010.015-0.050.0010.00250.000000.00000.00
20a6MorrisLecar110000-0.0010.015-0.050.0010.00250.000000.00000.00
\n", "
" ], "text/plain": [ " name model columnar dummy input output extern public V1 \\\n", "0 R1 MorrisLecar 1 0 0 0 1 0 0.030 \n", "1 R2 MorrisLecar 1 0 0 0 1 0 0.030 \n", "2 R3 MorrisLecar 1 0 0 0 1 0 0.030 \n", "3 R4 MorrisLecar 1 0 0 0 1 0 0.030 \n", "4 R5 MorrisLecar 1 0 0 0 1 0 0.030 \n", "5 R6 MorrisLecar 1 0 0 0 1 0 0.030 \n", "6 L1 MorrisLecar 1 0 0 1 0 1 -0.001 \n", "7 L2 MorrisLecar 1 0 0 1 0 1 -0.001 \n", "8 L3 MorrisLecar 1 0 0 1 0 1 -0.001 \n", "9 L4 MorrisLecar 1 0 0 1 0 1 -0.001 \n", "10 L5 MorrisLecar 1 0 0 1 0 1 -0.001 \n", "11 T1 MorrisLecar 1 0 0 1 0 1 -0.001 \n", "12 C2 port_in_gpot 1 0 1 0 0 1 -0.001 \n", "13 C3 port_in_gpot 1 0 1 0 0 1 -0.001 \n", "14 Am MorrisLecar 350 0 0 0 0 0 -0.001 \n", "15 a1 MorrisLecar 1 1 0 0 0 0 -0.001 \n", "16 a2 MorrisLecar 1 1 0 0 0 0 -0.001 \n", "17 a3 MorrisLecar 1 1 0 0 0 0 -0.001 \n", "18 a4 MorrisLecar 1 1 0 0 0 0 -0.001 \n", "19 a5 MorrisLecar 1 1 0 0 0 0 -0.001 \n", "20 a6 MorrisLecar 1 1 0 0 0 0 -0.001 \n", "\n", " V2 V3 V4 phi initV initn offset \n", "0 0.015 0.00 0.030 0.0250 -0.05214 0.0300 0.00 \n", "1 0.015 0.00 0.030 0.0250 -0.05214 0.0300 0.00 \n", "2 0.015 0.00 0.030 0.0250 -0.05214 0.0300 0.00 \n", "3 0.015 0.00 0.030 0.0250 -0.05214 0.0300 0.00 \n", "4 0.015 0.00 0.030 0.0250 -0.05214 0.0300 0.00 \n", "5 0.015 0.00 0.030 0.0250 -0.05214 0.0300 0.00 \n", "6 0.015 -0.05 0.001 0.0025 -0.05000 0.5000 0.02 \n", "7 0.015 -0.05 0.001 0.0025 -0.05000 0.5000 0.02 \n", "8 0.015 -0.05 0.001 0.0025 -0.05000 0.5000 0.02 \n", "9 0.015 -0.05 0.001 0.0025 -0.05000 0.5000 0.02 \n", "10 0.015 -0.05 0.001 0.0025 -0.05000 0.5000 0.02 \n", "11 0.015 -0.05 0.001 0.0025 -0.05000 0.5000 0.02 \n", "12 0.015 -0.05 0.001 0.0025 -0.05000 0.5000 0.02 \n", "13 0.015 -0.05 0.001 0.0025 -0.05000 0.5000 0.02 \n", "14 0.015 0.00 0.030 0.2000 -0.05184 0.0306 0.00 \n", "15 0.015 -0.05 0.001 0.0025 0.00000 0.0000 0.00 \n", "16 0.015 -0.05 0.001 0.0025 0.00000 0.0000 0.00 \n", "17 0.015 -0.05 0.001 0.0025 0.00000 0.0000 0.00 \n", "18 0.015 -0.05 0.001 0.0025 0.00000 0.0000 0.00 \n", "19 0.015 -0.05 0.001 0.0025 0.00000 0.0000 0.00 \n", "20 0.015 -0.05 0.001 0.0025 0.00000 0.0000 0.00 " ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import pandas as pd\n", "pd.set_option('display.max_columns', 20)\n", "mpl.rcParams['figure.figsize'] = (17, 7)\n", "neuron_data = pd.read_csv(\"./neuron_types_lamina.csv\")\n", "neuron_data = neuron_data.dropna(axis=1)\n", "neuron_data.head(n=100)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The synaptic connection attributes inside a cartridge and those specified by Composition Rule II are loaded from the csv file ``synapse_lamina.csv``. A few examples are listed below. Descriptions of each of the columns follow:\n", "\n", "* ``prename``, ``postname`` - Indicate the neurons connected by the synapse.\n", "* ``model`` - Indicates the synapse model used in the LPU. \n", "* ``cart`` - Specifies the relative position from the cartridge of the presynaptic neuron to that of the postsynaptic neuron (see In [6] below). \n", "* ``mode`` - indicates if the synapse affects the neurotransmitter release at the axon terminals of the postsynaptic neuron. \n", "* ``scale`` is the number of synapses between the pre- and post-synaptic neurons. \n", "\n", "The remaining columns are synapse model parameters." ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "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", "
prenamepostnamemodelcartreversedelaythresholdslopepowersaturationscalemode
0R1L1power_gpot_gpot0-0.081-0.052140.0210.0008400
1R1L2power_gpot_gpot0-0.081-0.052140.0210.0008400
2L2L4power_gpot_gpot20.001-0.050502.0010.030040
3L2L4power_gpot_gpot30.001-0.050502.0010.030020
4L4R1power_gpot_gpot50.001-0.050502.0010.100011
5L4L4power_gpot_gpot40.001-0.050502.0010.050020
6L4L5power_gpot_gpot60.001-0.050500.5010.100010
\n", "
" ], "text/plain": [ " prename postname model cart reverse delay threshold slope \\\n", "0 R1 L1 power_gpot_gpot 0 -0.08 1 -0.05214 0.02 \n", "1 R1 L2 power_gpot_gpot 0 -0.08 1 -0.05214 0.02 \n", "2 L2 L4 power_gpot_gpot 2 0.00 1 -0.05050 2.00 \n", "3 L2 L4 power_gpot_gpot 3 0.00 1 -0.05050 2.00 \n", "4 L4 R1 power_gpot_gpot 5 0.00 1 -0.05050 2.00 \n", "5 L4 L4 power_gpot_gpot 4 0.00 1 -0.05050 2.00 \n", "6 L4 L5 power_gpot_gpot 6 0.00 1 -0.05050 0.50 \n", "\n", " power saturation scale mode \n", "0 1 0.0008 40 0 \n", "1 1 0.0008 40 0 \n", "2 1 0.0300 4 0 \n", "3 1 0.0300 2 0 \n", "4 1 0.1000 1 1 \n", "5 1 0.0500 2 0 \n", "6 1 0.1000 1 0 " ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "synapse_data = pd.read_csv(\"./synapse_lamina.csv\")\n", "synapse_data = synapse_data.dropna(axis=1)\n", "synapse_data.head(n=7)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To change the lamina circuitry, rows may be added, deleted, or modified in both csv files. \n", "These files are processed by the ``generate_vision_gexf.py`` script to generate a GEXF file containing the full lamina configuration comprising 768 cartridges; this file may be used to instantiate the lamina LPU using Neurokernel." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Generation of Lamina Configuration and Creating GEXF" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We first generate a lamina configuration model using the above two csv files, for a total of 24$\\times$32=768 cartridges, where 24 is the number of rows and 32 is the number of columns for a hexagonal array. The hexagonal array is shown below." ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "768\n" ] } ], "source": [ "%cd -q ~/neurokernel/examples/vision/data\n", "import vision_configuration as vc\n", "lamina = vc.Lamina(24, 32, 'neuron_types_lamina.csv', 'synapse_lamina.csv', None)\n", "print lamina.num_cartridges" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nn3fppZfqsMMO03e+8x3tvffeev3rX6/Pf/7zWrJkiV796lfrpJNOUkpJZ511ls444ww97WlP00c+\n8hG99rWv1ctf/nK96lWv0re//W1tv/32etaznqVPfOITkqQ3vvGN+sxnPqO7775bj3/84/W+971P\nRxxxhCRp5cqV+sEPfqBzzjlnJL8HYE8cgBUcAa2My93n3Jbjc25r43Nuy/E5t7XxcXTKuixfvjwu\nvPDCOecvW7Ys/uEf/iFe9rKXxdFHHx333Xdf3HjjjfGEJzwhVq9eHRERH/7wh2Px4sXxgQ98IDZu\n3Bj3339/vPSlL42//du/jYiI9evXx9e+9rXNP/OjH/1o/PSnP42NGzfGe97znli6dGmsX78+ItgT\nNw6IEQMAHnRhplCuz7mtts+5Ldfn3Jbrc27L9Tm35fpqt8HgRdxhhx0W73znO2OHHXaIa665ZvP5\nH/zgB2PFihUR0VvELVu2bNbtXv7yl8ef/umfxq233rqge4899ogrr7wyIljEjQMs4gBM6Mqrtjk+\n57baPue2Nj7nthyfc1sbn3Nbjq92GwxexO27776xatWqSCnFunXrNp//uc99Lh7/+MdHRG8R9/Sn\nP33W7dauXRuvfvWrY6+99oqDDz44zjzzzM2Xvfvd744DDzwwdtttt9h9991j0aJFcdFFF0UEi7hx\nYNAijj1xAB2iizOFmvqc22r7nNtK+Zzbmvqc20r5nNua+mq3QY+t7Ym7/PLL9dSnPlVXXHGFDjzw\nQEnShz70IX3iE5/QRRddpLPOOkurV6/WV77ylXl/9te+9jX99m//tr773e/qRz/6kV74whfqoosu\n0sEHHyxJ2nPPPfWpT31KRx55JHvixgD2xAEYwEyhMi53n3NbbR9tZVzuPtrKuGCa5cuXxwUXXBAR\nEXfffXece+65sf/++8exxx4bERHHHHNM/P7v/37ce++9ceONN8YBBxwwa0/cEUccMevn/cu//Evc\ncsstERFx1VVXxc477xw33HBDnHfeebHXXnvF2rVrY/369bFq1arYbrvtNr8LyDtxo0cD3olbXHs1\nCQD5MFOojMvd59xW20dbGZe7j7YyLpjNC17wAi1evFiLFi3SwQcfrDe/+c16zWteI0k6/fTT9frX\nv1777befdtppJ/3pn/6pXvGKV0jqvXOz5Xy3yy67TG9605t099136xd/8Rf1d3/3d1q+fLmWLVum\n5z73uXrCE56gXXbZRW9605u0bNmyzbeb72fBeMAiDqBDMFOojMvd59xW20dbGZe7j7YyLpjmhhtu\n2Orlu++++8CPOB577LE69thjZ5136qmn6tRTT51z3UWLFmn16tVavXr15vPe8pa3bP76lFNO2Za7\nDRVhTxxAh+jiTKGmPue22j7ntlI+57amPue2Uj7ntqa+2m0AMBv2xAGYwBHQutlW2+fc1sbn3Jbj\nc25r43Nuy/FxdEqA0SFGDAB40IWZQrk+57baPue2XJ9zW67PuS3X59yW66vdBgDTsIgDMGLcX7Vt\n43Nuq+1zbsvxObe18Tm35fic29r4arcBQI9Bizj2xAF0mHGcKVTK59xW2+fc1tTn3FbK59zW1Ofc\nVspXuw3y+NGPfqS999571HcDCsCeOIAJhhlGZVzuPtrKuNx9tJVxufuYLzc61q9fH0cfffSo7wYU\nQgPeiWOaB8AEwAyjMi53H21lXO4+2sq43H3MlxsdF1xwgf7t3/5Na9euHfVdgSHCUwZgAmCGURmX\nu4+2Mi53H21lXO4+5suNjrPPPluS9OlPf3rE9wSGCXviADrMOM4UKuVzbqvtc25r6nNuK+Vzbmvq\nc24r5avdBtvGhg0btMcee2jdunU69NBD9a1vfWvUdwlawp44ACM4AloZl7vPuS3H59zWxufcluNz\nbmvj4+iU3eC8886LXXfdNSTFjjvuGLfddtuo7xK0RIwYAPCgCzOFcn3ObbV9zm25Pue2XJ9zW67P\nuS3XV7sN8nnxi18cKaWQFEuWLIkPfOADo75L0BIWcQAmdOVV2xyfc1ttn3NbG59zW47Pua2Nz7kt\nx1e7DfJYv359LFmyJCRtPh166KGjvlvQkkGLOPbEAXSILs4Uaupzbqvtc24r5XNua+pzbivlc25r\n6qvdBvmcf/75+qM/+iPdc889m8/bcccddeONN2rp0qUjvGfQBvbEARjATKEyLnefc1ttH21lXO4+\n2sq4oB0zP0r58ImPVHYfMScOoPswU6iMy93n3FbbR1sZl7uPtjIuyGfDhg1as2bNw2+EbGbdunVa\nvXr1iO4VDBOeagAdgplCZVzuPue22j7ayrjcfbSVcUE+F1xwgRYvXjzvZVdffTWDvw1hTxxAh+ji\nTKGmPue22j7ntlI+57amPue2Uj7ntqa+2m2Qx0te8hJ98pOfnPNOnCQtWbJEp512mv78z/98BPcM\n2sKeOAATOAJaN9tq+5zb2vic23J8zm1tfM5tOT6OTjnerF+/PnbeeedIKW0+SZr1NUep7C5ixACA\nB12YKZTrc26r7XNuy/U5t+X6nNtyfc5tub7abbBt/PjHP453vOMdm0/HHHNMSJp13jvf+c546KGH\nRn1XIQMWcQBGjPurtm18zm21fc5tOT7ntjY+57Ycn3NbG1/tNsjn0ksvDf4d7cOgRRx74gA6zDjO\nFCrlc26r7XNua+pzbivlc25r6nNuK+Wr3QbbzmWXXaanPvWp4t/RHrAnDmCCYYZRGZe7j7YyLncf\nbWVc7j7my40O3onzQsyJA5hcmGFUxuXuo62My91HWxmXu4/5cgDDhacMwATADKMyLncfbWVc7j7a\nyrjcfcyXAxgu7IkD6DDjOFOolM+5rbbPua2pz7mtlM+5ranPua2Ur3YbbDvsifOCPXEARnAEtDIu\nd59zW47Pua2Nz7ktx+fc1sbH0Sm7A3vivBAjBgA86MJMoVyfc1ttn3Nbrs+5Ldfn3Jbrc27L9dVu\ng3awiPOCRRyACV151TbH59xW2+fc1sbn3Jbjc25r43Nuy/HVboN2sIjzYtAijj1xAB2iizOFmvqc\n22r7nNtK+Zzbmvqc20r5nNua+mq3QXvYE+cFe+IADGCmUBmXu8+5rbaPtjIudx9tZVxQBt6J80LM\niQPoPswUKuNy9zm31fbRVsbl7qOtjAsAmsNTDaBDMFOojMvd59xW20dbGZe7j7YyLgBoDnviADpE\nF2cKNfU5t9X2ObeV8jm3NfU5t5XyObc19dVug/awJ84L9sQBmMAR0LrZVtvn3NbG59yW43Nua+Nz\nbsvxcXTKbsGeOC/EiAEAD7owUyjX59xW2+fclutzbsv1Obfl+pzbcn2126AdLOK8YBEHYMS4v2rb\nxufcVtvn3Jbjc25r43Nuy/E5t7Xx1W6DfFjEeTFoEceeOIAOM44zhUr5nNtq+5zbmvqc20r5nNua\n+pzbSvlqt8G2w544L9gTBzDBMMOojMvdR1sZl7uPtjIud5/LfLmDDz44vvSlLxX7eevXr4/zzjsv\nXvnKVxb7mVvCO3FeiDlxAJMLM4zKuNx9tJVxuftoK+Ny95V2rVixQnvuuac2bNiwDT9zkX74wx9u\n2x3ZgquuukrPeMYzWv2MDRs26Pzzz9dLXvIS7bHHHnrpS1+qs846q9XPBFg86jsAAMOHGUZlXO4+\n2sq43H20lXG5+0q6brzxRl1yySVatmyZPvvZz+qFL3xh458bmR8pfOihh7R4cf4/k9etW6epqSmd\nffbZWrNmjRYvXqx777138/1ZxFR0aAl74gA6zDjOFCrlc26r7XNua+pzbivlc25r6nNuK+Wr3SZJ\nb3/723XZZZfpaU97mr7xjW/o3HPPlSQdd9xx2mWXXXTTTTfpy1/+sg466CB97GMf03777adnPOMZ\n+upXv6olS5YopaQzzzxTL3rRi7RmzRqdfPLJuummm3TQQQfp//yf/6MnPelJkqTly5frta99rT76\n0Y/quuuu03333af9999fq1ev1rOe9SytX79eJ5xwgj75yU9Kkl784hfr1FNP1Q477KCpqSkdc8wx\nevazn62Pf/zjevDBB7XLLrvMWrjNZNGiRdq4cePCv5wM2BPnBXviAIzgCGhlXO4+57Ycn3NbG59z\nW47Pua2Nb5RHp9x///3jox/9aFx77bWx/fbbxx133BEREccee2z8wi/8Qlx66aXx0EMPxZ/8yZ/E\nS1/60s23SynFD37wg83ff+tb34pHP/rRcckll8SmTZvi7LPPjuXLl8eGDRsiIuKxj31sHHrooXHr\nrbfGAw88EBERy5cvjwsvvDAiIt72trfFb/zGb8RPfvKT+MlPfhKHH354nHzyyfH5z38+jjzyyJAU\n22+/fUgaixN4oFGMGJB0pqTbJX1nxnl7SvqipGslfUHS7gNuO9zfCEBH6cJMoVyfc1ttn3Nbrs+5\nLdfn3Jbrc27L9dVum8lXvvKV2GmnneKee+6JiIhf/dVfjfe+970R0VvEvfrVr9583fPPPz8OOOCA\nzd9vuYh7zWteE29729tm/fwnPvGJ8eUvfzkiegu2D3/4w7Mun7mI23///eNzn/vc5sv+/d//PZYv\nXx633XZbvOENb4iUUuywww6xZMmSRouspzzlKUM5HXLIIfHHf/zHg3+p0ClGtYj7TUmHbrGIO03S\nX/W/PkHSuwbcdqi/EICu0pVXbXN8zm21fc5tbXzObTk+57Y2Pue2HF/ttpn81//6X+Ooo47a/P3f\n/M3fxCGHHBIRvUXcyTMOa3nxxRfHPvvss/n7LRdxz3ve82LJkiWx++67bz7tsssu8YlPfCIiegu2\nCy64YJZ/5iJu5513jquvvnrzZddcc03ssMMOm91777133HbbbXH66afHoYceGjvuuOPABd2iRYu2\nHg7QZ9Aibuh74lJKyyWdGxFP6n//PUnPjIjbU0pLJU1FxAHz3C6Gfd8AukYXZwo19Tm31fY5t5Xy\nObc19Tm3lfI5tzX11W6byf3336+lS5dq06ZNesQjHiFJWr9+ve6++25dfvnleu9736t99tlH73jH\nOyRJU1NTetnLXqZbbrlFUm/f2fXXX6/99ttPkvSa17xGy5Yt00knnTSv73GPe5xWr16tI488ct7z\nfumXfkmnn366nve850mSvvCFL+j444/XDTfcMMctSWvXrtWnPvUpnXnmmbr66qu13Xbbad26dZvv\n27D2xIEXI9sTJ2m5Zr8Td9eMr9PM77e43RDWsgDdhplCZVzuPue22j7ayrjcfbSVcW3Jxz72sdhz\nzz3jlltuidtvvz1uv/32WLt2bTzjGc+IN7/5zXHcccdt9Z24pUuXxhe+8IXN31922WWx7777xje/\n+c3YtGlT3HfffbFmzZq49957I2L2u24PM/O8k08+OQ4//PDNe+Ke/vSnb/545pbuLdnyHTreiYOm\naMA7cSMdMRDRe6t70OUrV67c/PWKFSu0YsWKCvcKYHxhplAZl7vPua22j7YyLncfbWVcW/KRj3xE\nr3zlK7XPPvvMOv91r3ud3vCGN+h3fud3lNLsNyhmfr9y5Uode+yxuv/++3XGGWfohS98oc444wy9\n7nWv03XXXaedd95Zv/mbv9n435cnn3yy7rnnHv3Kr/yKpN7RKU8++eR53VuydOlSve51r9PrXvc6\nrV27Vp/5zGcaOWHymJqa0tTU1ILXG8Ui7vaU0tKIWJtSeoykOwZdceYiDgCYKVTK5e5zbqvto62M\ny91HWxnXlnzuc5+b9/wXvehFetGLXjTn/BUrVujmm2/e/P3xxx+v448/ftZ1nvOc5+g5z3nOvD/3\nhhtu2Op5O+64o97//vfr/e9//4LurbF06VL92Z/9WaPrwuSx5RtXq1atmvd6o9gTd5qkOyPi1JTS\nieodnfLEeW4Xw75vAF2jizOFmvqc22r7nNtK+Zzbmvqc20r5nNua+mq3AcBsRrInTtLHJf1Y0gZJ\nt0h6hXojBi4QIwYAsuAIaN1sq+1zbmvjc27L8Tm3tfE5t+X4Rnl0SoBJR6MYMdDmxCIOYH66MFMo\n1+fcVtvn3Jbrc27L9Tm35fqc23J9tdsAYBoWcQBGjPurtm18zm21fc5tOT7ntjY+57Ycn3NbG1/t\n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\nAABAh/j/ClOupBjb3D0AAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "p.figure(figsize=(15,7))\n", "X = lamina.hexarray.X\n", "Y = lamina.hexarray.Y\n", "p.plot(X.reshape(-1), Y.reshape(-1), 'o', markerfacecolor = 'w', \n", " markeredgecolor = 'b', markersize = 12)\n", "p.axis('equal')\n", "p.axis([X.min()-1, X.max()+1, Y.min()-1, Y.max()+1])\n", "p.xlabel('x (arbitrary unit)')\n", "p.ylabel('y (arbitrary unit)')\n", "p.gca().invert_yaxis()\n", "\n", "# label one cartridge position\n", "center_row = 12\n", "center_col = 16\n", "p.plot(X[center_row, center_col], Y[center_row, center_col], \n", " marker = '$0$', markeredgecolor = 'r', hold = True) \n", "\n", "# find and label all its neighbors, the numbers are used for \n", "# column 'cart' in the synapse_lamina.csv\n", "neighbors = lamina.hexarray.find_neighbor(center_row, center_col)\n", "for neighbor, i in zip(neighbors[1:], range(1,7)):\n", " if neighbor is not None:\n", " neighbor_row = lamina.hexarray.row[neighbor]\n", " neighbor_col = lamina.hexarray.col[neighbor]\n", " p.plot(X[neighbor_row, neighbor_col], Y [neighbor_row, neighbor_col], \n", " marker = '$'+str(i)+'$', markeredgecolor = 'r', hold = True) \n", " \n", "tx1 = p.text(55, 10, 'Anterior', fontsize=12)\n", "ar1 = p.arrow(65, 9.5, -3, 0, head_width = 1, color = 'k')\n", "tx2 = p.text(63, 4, 'Dorsal', fontsize = 12)\n", "ar2 = p.arrow(65, 9.5, 0, -3, head_width = 1, color = 'k')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We now create all the cartridges. Each cartridge contains one copy of all specified columnar neurons and elements as well as all the intra-cartridge connections. Individual neurons and synapses in each cartridge can be accessed as follows:" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "Isolated cartridge at 0x2b9dc37e70d0" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "lamina.create_cartridges()\n", "lamina.cartridges[100]" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "neuron L2: {'phi': 0.0025, 'initn': 0.5, 'output': 1, 'offset': 0.02, 'extern': 0, 'spiking': False, 'name': 'L2', 'V1': -0.001, 'initV': -0.05, 'V2': 0.015, 'V3': -0.05, 'V4': 0.001, 'input': 0, 'model': 'MorrisLecar', 'columnar': 1, 'public': 1}" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "lamina.cartridges[100].neurons['L2']" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "synapse from R3 to L2: {'slope': 0.02, 'saturation': 0.0008, 'postname': 'L2', 'reverse': -0.08, 'power': 1.0, 'cart': 0, 'delay': 1.0, 'prename': 'R3', 'conductance': True, 'scale': 37.0, 'mode': 0, 'threshold': -0.05214, 'model': 'power_gpot_gpot', 'class': 3}" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "lamina.cartridges[100].synapses[8]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We assign each cartridge to a position on the hexagonal grid and link it to its 6 immediate neighbor cartridges; the first element of the neighbors attribute is the cartridge itself, while the remaining 6 elements are its neighbors:" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "[Cartridge at (6.928203230275509, 6.0),\n", " Cartridge at (6.928203230275509, 4.0),\n", " Cartridge at (5.196152422706632, 5.0),\n", " Cartridge at (5.196152422706632, 7.0),\n", " Cartridge at (6.928203230275509, 8.0),\n", " Cartridge at (8.660254037844386, 7.0),\n", " Cartridge at (8.660254037844386, 5.0)]" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "lamina.connect_cartridges()\n", "lamina.cartridges[100].neighbors" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The non-columnar neurons are created as follows:" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": true }, "outputs": [], "source": [ "lamina.create_non_columnar_neurons()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "After all the cartridges and non-columnar neurons are created, we can specify interconnects between cartridges based on the composition rules. We first configure inter-cartridge synapses based on Composition Rule II:" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": true }, "outputs": [], "source": [ "lamina.connect_composition_II()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In the example below, the L4 neuron in cartridge 100 (shown as a red dot), receives inputs (green lines) from neurons in some neighboring cartridges (green dots), and provides outputs (blue lines) to neurons in other neighboring cartridges (blue dots):" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nww9r11131XrrracNN9xQBxxwwPKP/7GPfUybbrqp1l13XW233Xb6+c9/3q5UKAA7cQBO6eRNoaq+\nyG3WvshtRX2R26r6IrcV9UVuq+qzboOV2X777bXxxhvr5ptv1i9/+UstXrxYjz76qJ566intueee\neuUrX6nDDjtMknTrrbfqgx/8oJ588kktXbpUhx56qPbee2/ddNNNWrp0qW6//fblH3eHHXbQ9OnT\nte666+prX/ua9ttvPz322GMaN25cu1JhBHCIA3BI/92d445beXfnzDMH3t0ZP77x8pkzh975GegL\nsaUvchuPZXt9kduq+CK3lfFFbqvis26Dgdloo430l7/8RZdcconuuecerbnmmlpzzTV1wgkn6MIL\nL1x+iNtoo4109NFHS5JWX311jRs3TvPmzdP8+fM1efJkveUtb1n+MT/0oQ8t//3xxx+vmTNn6re/\n/a3e+MY32sZBIZgYAHCGp02hor7Ibda+yG1VfZHbivoit1X1RW4r6rNuA2mzzTbT7NmztfsqT2Nu\nuumm+pd/+RdNnz5dzz77rNZo/kDhNddco2OPPVYPPfSQzjvvPJ1zzjkrfVvkwoUL9ZnPfEZXX321\nJkyYoBNOOEGHHnqoJOnLX/6yzj33XD3xxBNKKWnRokW67rrrtNtuu2n69Ol65JFHdOGFF9rFw0qw\nEwcQBDaFfLZZ+yK3Wfto89lm7aONvbdWMtAh7rbbbtOOO+6ou+66S9tvv73uvvtubb755pKkWbNm\n6eKLL9YNN9yg8847T7Nnz9bPfvazAT/2L37xC+2xxx769a9/rfnz5+v973+/brjhBr3hDW+QJK2/\n/vq67LLLtPvuu3OI6wDYiQMIAptCPtusfZHbrH20+Wyz9tHG3lur6XsyY9GiRbrqqqt04IEH6qCD\nDtJWW22l/fffXyeddJKeeeYZPfbYYzrzzDP14Q9/eNCPdemll+rxxx+XJK233npKKWnUqFFavHix\nxowZow022EBLly7VqaeeqkWLFpn0QTX4mTgAZ7Ap5LPN2he5zdpHm882ax9t7L21mn322UdjxozR\nqFGj9IY3vEEnnHCCjjrqKEnSN77xDX30ox/Vq1/9aq2++uo64ogjln97ZErpZftut99+u4477jg9\n/fTTmjhxor7+9a9rypQp2nTTTbX33nvrda97ndZcc00dd9xx2nTTTZe/30AfCzoDDnEAzujb3Rnq\n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\n9NJLJUlXXXWVtt56a02YMEE777yz7rvvvuUfb8qUKTrjjDO01VZbae2119ayZcs0ZcoUXX/99ZKk\n559/Xh//+Mc1efJkTZ48Wccdd9zyZwZ7e3u18cYb67DDDtMaa6yhddZZZ6WD26JFi/gZNWgpTAwA\nOKWTN4Wq+iK3WfsitxX1RW6r6ovcVtQXua2qz7qtjwsuuEAzZszQDjvsoBkzZuhPf/qTNtxwQ0nS\nJZdcomuuuUbbbLONpk2bppNOOknf/e53dfPNN2vUqFG699579epXv1qSdNddd+nwww/XVVddpe22\n204XXnih9t13Xz300EMaO3asJOniiy/Wj3/8Y22wwQYaPXq0UkpKqXFPic997nO69dZbdc8990iS\n3vOe9+i0007TLrvsojPOOEPz58/XRRddpBdeeEGStGjRokGbXnrppeUfF6AMtR7iUkrnSnqXpCdz\nzm9svmx9SZdIepWkeZL2zzn/tc7rAIhGp28KVfFFbuOx7K6tKy++yG1lfJHbqvis2/r4+c9/rvnz\n52vffffV2muvrS222ELf/va39fGPf1yS9N73vlfbbbedJOlDH/qQjh/iRDhr1iwdeeSR2n777SVJ\nBx98sD7/+c/rlltu0Vvf+lallHTsscdq8uTJA77/d77zHX3zm9/UBhtsIEn67Gc/qyOPPFJHH320\nttxyS914441KKWn8+PFaMtz3kUradttth32bMixbtkxbbLFFLR8bOodaJwZSSm+V9IykC/od4s6Q\n9FTO+YyU0iclTcg5f2qA92ViAGAAPG0KFfVFbrP2RW6r6ovcVtQXua2qL3JbUZ91W38+8pGP6Mkn\nn9QPf/hDSY1nwy677DLdddddOuSQQ7TJJpvotNNOk9T4lsaDDjpIf/zjHyU1bmzy8MMPL38mburU\nqbrppps0bty45R//hRde0OzZs/WBD3xAm222mc455xy9/e1vX/76zTbbTLNnz9buu++u8ePH6447\n7tDmm28uSfrNb36jN73pTXr++efV29urD3/4w7r99tt12WWX6dxzz9UDDzyg0aNHD3igGzVqlJYt\nWzZ0PIDauBOXUpoi6Uf9DnG/kbRrznlhSmmSpN6c8+sHeD8OcQADwKaQzzZrX+Q2ax9tPtusfbS1\nfu/tueee06RJk/TSSy9prbXWktT4ubSnn35ad911l84880xtvPHGIz7EHXXUUdp000114oknDujr\nf2Ab6GWvec1r9I1vfEPvfOc7JUnXXnutjjzySD366KMvc0vSggULBj3QcYiDkdJJO3ETc84Lm79f\nKGliG64BwC1sCvlss/ZFbrP20eazzdpHW+v33q644gqNGTNGDz74oO655x7dc889evDBB7XLLrvo\nggsuGPb9J06cqEceeWT5nz/ykY/ov//7v3Xrrbcq56xnn31WV199tZ555pkRXc+BBx6omTNn6qmn\nntJTTz2lU089VQcddNCgbz9p0iQdc8wxuvPOOzVv3jydfvrp2mabbbTaaquNyAcwFG29sUnOOaeU\nBn26bfr06ct/39PTo56eHoOrAuhs2BTy2Wbti9xm7aPNZ5u1j7bWtfVxwQUX6LDDDtPGG2+80suP\nOeYYHXvssXrHO97xspuD9P/z9OnTNW3aND333HM6++yz9f73v19nn322jjnmGP3ud7/TGmusobe+\n9a0j/vfLk08+WYsWLdJWW20lSdp///118sknD+helb4D3THHHKMFCxboBz/4wYic0H309vaqt7d3\n2LdrxyFuYUppUs55QUrplZKeHOwN+x/iAKBB3+7OUF9Q69gUsvBFbrP2RW6z9tHms83aR1vr2vr4\n8Y9/PODL99tvP+23334ve3lPT4/+8Ic/LP/zkUceqSOPPHKlt9lrr7201157DfhxH3300SFfttpq\nq+mss87SWWedNax7KCZNmqR//dd/HdHbQvex6hNXM2bMGPDt2vHtlFdKmtb8/TRJV7ThGgDcwqaQ\nzzZrX+Q2ax9tPtusfbS1rg0AhqfuiYHvStpV0gYppT9KOkXSFyV9L6V0uJoTA3VeA0A0PG0KFfVF\nbrP2RW6r6ovcVtQXua2qL3JbUZ91GwAMT+13pywLd6cEGJxTTpHGjRt6d2fVvZ6+9+vb+en74tn/\ni+tAOz/WvshtPJbt90VuK+uL3FbWF7mtrM+6DQAatG1ioCwc4gCGppM3har6IrdZ+yK3FfVFbqvq\ni9xW1Be5rarPug0AOMQBdD1sGPlss/bR5rPN2kebzzZrX7v25QAi0Uk7cQDQBtgw8tlm7aPNZ5u1\njzafbdY+6zaAboJDHECXwIaRzzZrH20+26x9tPlss/a1a18OoBvgEAfQJfTt/AxFHRtGFr7IbdY+\n2ny2Wfto89lm7bNuA+gmOMQBdAlsGPlss/bR5rPN2kebzzZrH/tyAPVR604cANRHJ28KVfVFbrP2\n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\n2omrb6cEAAAAAACAl8O3UwIAAAAAADiCQxwAAAAAAIAjOMQBAAAAAAA4gkNcRVJKX0opPZhSuiel\n9P2U0rr9XvfplNLvUkq/SSnt2c7rhLiklPZufo79LqX0yXZfD8QlpbRJSunGlNKvU0r3p5SObb58\n/ZTST1NKD6WUrk0prdfua4WYpJRGp5TuSin9qPlnPvfAhJTSeimly5r/zvdASukf+fyDdsIhrjrX\nSnpDzvlNkh6S9GlJSiltIekDkraQtLek/0wp8XhDS0kpjZb0TTU+x7aQdGBKafP2XhUE5gVJx+Wc\n3yBpR0lHNz/fPiXppznn10m6vvlngDr4mKQHJPXdlY3PPbDiLElzcs6bS9pK0m/E5x+0EQ4VFck5\n/zTn/FLzj7+StHHz9++R9N2c8ws553mSHpa0QxsuEWKzg6SHc87zcs4vSLpYjc89gJaTc16Qc767\n+ftnJD0oabKkfSWd33yz8yX9U3uuECKTUtpY0lRJ50jqu902n3tQO83vsnprzvlcSco5v5hzflp8\n/kEb4RDXWg6TNKf5+40kPd7vdY+r8S87AK1ksqQ/9vszn2dgQkppiqRt1PiPVxNzzgubr1ooaWKb\nLgtic6akT0h6qd/L+NwDCzaT9KeU0v+klO5MKZ2dUlpTfP5BG+EQNwKa3+983wC/9un3NidJWppz\n/s4QH4pRPmg1fE6BOSmltSRdLuljOefF/V+XG+OjfF5CS0kpvVvSkznnu7TiWbiV4HMPamSMpDdL\n+s+c85slPatVvnWSzz+wZky7L8ADOed3DPX6lNIhanyLx9v7vXi+pE36/Xnj5ssAWsmqn2ebaOVn\ngAFaSkpprBoHuAtzzlc0X7wwpTQp57wgpfRKSU+27wohKG+RtG9Kaaqk1SWtk1K6UHzugQ2PS3o8\n53xb88+XqXEPhAV8/kG74Jm4iqSU9lbj2zvek3P+W79XXSnpgJTSuJTSZpJeK+nWdlwjhOZ2Sa9N\nKU1JKY1T42Y6V7b5miAoKaUkabakB3LOX+v3qislTWv+fpqkK1Z9X4Aq5JxPzDlvknPeTNIBkm7I\nOR8kPvfAgJzzAkl/TCm9rvmiPST9WtKPxOcftInUePYXypJS+p2kcZL+0nzR3JzzvzVfd6IaPyf3\nohrfdvST9lwlRCal9E5JX5M0WtLsnPMX2nxJEJSU0i6SbpZ0r1Z829Cn1fgPVN+TtKmkeZL2zzn/\ntR3XCPFJKe0q6YSc874ppfXF5x4YkFJ6kxo31Rkn6RFJh6rxdZfPP2gLHOIAAAAAAAAcwbdTAgAA\nAAAAOIJDHAAAAAAAgCM4xAEAAAAAADiCQxwAAAAAAIAjOMQBAAAAAAA4gkMcAAAAAACAIzjEAQBA\nx5JSWi2ldFNzaLzI+z0zyMtnpJR2b/7+4ymlNVpxnXWQUjo7pfT65u9P7Pfy1VJKN6eU+BoOANCl\nsBMHAAAdS0rpMEl/l3P+UoH3GSXp6Zzz2sO83aOStss5/3mgj5FzfmkErtE552UjvbaypJQW9+9J\nKX1O0h055+/X7QYAgM6D/4oHAADmpJS2Tynd03xWac2U0v0ppS0GeNMDJf2w+T5rppSuSyndkVK6\nN6W0b/PlU1JKv00pnZ9Sul/Sxs2Xf7X5ca9LKW3QfNl5KaX3pZQ+KmkjSTemlK5vvu6ZlNKXU0p3\nS9oppfSZlNKtKaX7Ukrf6nftvSmlM1NKt0k6KaX0+5TSmObr1mn+efQqveellN7X78/PNP/Z0/x4\nl6aUHkwpXbSKZ9uU0hclrZFSuiuldGHz1Vc2HxsAAOhCOMQBAIA5Oefb1DiIzJR0uqQLc84P9H+b\n5kFoy5zzQ80X/U3SP+ect5W0u6Sv9Hvz10j6j5zzljnnP0haU9JtOectJd0k6bN96oY+f0PSE5J6\ncs5vb75uvKRbcs5b55x/IembOecdcs5vVOMQ9e5+H2Nsznn7nPOpknolvav5ugMkXT7As3OrfttL\n/z9vLeljkraQ9OqU0ltWudZPSXou57xNzvmg5uvulvQWAQBAV8IhDgAA2sWpkvaUtJ2kMwZ4/QaS\nFvf78yhJX0gp3SPpp5I2Sim9ovm6x3LOt/Z725ckXdL8/UWSdhnB9SyTdHm/P++eUrolpXSvGofG\n/s8UXtLv9+dIOrT5+0Mk/c8IXP25Nef8RG78fMPdkqYM9w455+cljUoprV7QBQAAARjT7gsAAICu\nZQM1njEbLWkNSUsGeJv+NzT5UPN93pxzXtb8mba+Q8yzQ3iSXv5M2ED8rXmQUvNw9B+Sts05z08p\nfbafayVfzvmXzW/p7JE0etVnFJu8qOZ/OG3+zN64fq97vt/vl2nkX5tH2gUAAMHgmTgAAGgX35J0\nsqTvqPEtlavylKS1+v15HUlPNg9wu0l61RAfe5Sk/Zq//6Cknw3wNoubH3Mg+g5sf04prdXvYw3G\nBZK+LencQV4/T9K2zd/vK2nsMB9vVV7o+7k7qXGHSknLms/IAQBAl8EhDgAAzEkpHSzp+ZzzxZK+\nKGn75jNZy2n+XNn9KaV/aL7o25K2a35740GSHuz/5qsonpW0Q0rpPkk9anzr5qrMknRN341N+n+M\nnPNfJZ0t6X5J10j61TBJ35E0QdJ3B3n92ZJ2bd40ZUdJ/ScQRvJs2ixJ9/a7sck2kuaO4P0AACAg\nTAwAAEDHklI6RNLEnPNAz9R1DCml90vaJ+c8zcj3eTVu3PIDCx8AAHQWHOIAAKBjSSmNk3SdpF1z\nh37BSil9Q9JekqbmnB828K2mxo1dOvYxAQCAeuEQBwAAAAAA4Ah+Jg4AAAAAAMARHOIAAAAAAAAc\nwSEOAAAAAADAERziAAAAAAAAHMEhDgAAAAAAwBH/H2AiTIlh3i1KAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "p.figure(figsize=(15,7))\n", "p.plot(X.reshape(-1), Y.reshape(-1), 'o', markerfacecolor = 'w', \n", " markeredgecolor = 'b', markersize = 10)\n", "p.axis('equal')\n", "p.axis([X.min()-1, X.max()+1, Y.min()-1, Y.max()+1])\n", "p.gca().invert_yaxis()\n", "\n", "# plot the position of L4 neuron in cartridge 236\n", "neuron = lamina.cartridges[236].neurons['L4']\n", "x, y = neuron.position()\n", "p.plot(x, y, 'o', markerfacecolor = 'r', markersize = 10, hold = True)\n", "\n", "# plot the positions of the neuron the L4 neuron is presynaptic to\n", "for synapse in neuron.outgoing_synapses:\n", " post_x, post_y = synapse.post_neuron.position()\n", " p.plot(post_x+0.1, post_y+0.1, 'o', markerfacecolor = 'b', markersize = 3, hold = True)\n", " p.plot([x, post_x+0.1], [y, post_y+0.1], 'b', hold = True)\n", "\n", "# plot the positions of the neuron the L4 neuron is postsynaptic to\n", "for synapse in neuron.incoming_synapses:\n", " pre_x, pre_y = synapse.pre_neuron.position()\n", " p.plot(pre_x-0.1, pre_y-0.1, 'o', markerfacecolor = 'g', markersize = 3, hold = True)\n", " p.plot([x, pre_x-0.1], [y, pre_y-0.1], 'g', hold = True)\n", " \n", "p.xlabel('x (arbitrary unit)')\n", "p.ylabel('y (arbitrary unit)')\n", "tx1 = p.text(55, 10, 'Anterior', fontsize=12)\n", "ar1 = p.arrow(65, 9.5, -3, 0, head_width = 1, color = 'k')\n", "tx2 = p.text(63, 4, 'Dorsal', fontsize = 12)\n", "ar2 = p.arrow(65, 9.5, 0, -3, head_width = 1, color = 'k')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We then configure inter-cartridge synapses based on Composition Rule I:" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": true }, "outputs": [], "source": [ "lamina.connect_composition_I()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In the example below, amacrine cell 0 (red dot) receives inputs (green lines) from neurons in several neighboring cartridges (green dots), and provides outputs (blue lines) to neurons in other neighboring cartridges (blue dots):" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nTZumRx99VO985zu1xRZbaOutt9aHPvShNZ//U5/6lHbaaSdtvvnm2muvvfSLX/yiWalQAHbiAJwy\nlDeFqvoit1n7IrcV9UVuq+qL3FbUF7mtqs+6DdZl77331vjx4/Xzn/9cv/rVr7R06VI9/vjjevrp\np3XwwQdru+2200c/+lFJ0t13360Pf/jDWrx4sVasWKETTjhBhxxyiO644w6tWLFCc+fOXfN599ln\nH3V0dGjzzTfXRRddpKOOOkoLFizQyJEjm5UKg4BDHIBDeu7uTJ267u7OjBm97+6MGVN7+/Tp/e/8\n9PaF2NIXuY3Hsrm+yG1VfJHbyvgit1XxWbdB72y//fZ69tlndc0112jevHnaeOONtfHGG+szn/mM\nLr/88jWHuO23316nnHKKJGnUqFEaOXKk5s+fr6eeeko77LCD3va2t635nMcdd9ya359++umaPn26\nHn74Yb3pTW+yjYNCMDEA4AxPm0JFfZHbrH2R26r6IrcV9UVuq+qL3FbUZ90G0s4776yZM2fqwPVe\nxtxpp5100kknqaOjQ8uWLdPorh8ovPXWW3XaaafpkUce0axZs3TZZZet822RixYt0llnnaUf/OAH\nGjt2rD7zmc/ohBNOkCT9+7//u7797W/rL3/5i1JKWrJkiW677Ta9613vUkdHh/70pz/p8ssvt4uH\ndWAnDiAIbAr5bLP2RW6z9tHms83aRxt7b/Wkt0Pcb3/7W+2777669957tffee+u+++7TLrvsIkm6\n5JJLdPXVV+v222/XrFmzNHPmTN155529fu5f/vKXOuigg/SHP/xBTz31lI488kjdfvvt2m233SRJ\nW265pa699lodeOCBHOKGAOzEAQSBTSGfbda+yG3WPtp8tln7aGPvrd50v5ixZMkS3XzzzTr22GN1\n/PHHa/fdd9fRRx+tM844Qy+++KIWLFigGTNm6CMf+Uifn+u73/2unnzySUnSFltsoZSS2tratHTp\nUg0fPlxbbbWVVqxYoXPPPVdLliwx6YNq8DNxAM5gU8hnm7Uvcpu1jzafbdY+2th7qzeHHXaYhg8f\nrra2Nu222276zGc+o0984hOSpIsvvlj/8i//ote97nUaNWqUPv7xj6/59siU0gb7bnPnztXUqVP1\nwgsvaNttt9XXv/51TZgwQTvttJMOOeQQ/cM//IM23nhjTZ06VTvttNOaj+vtc8HQgEMcgDO6d3f6\n+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\n+93vSpJuvvlm7bHHHho7dqz2339//c///M+azzdhwgRdeOGF2n333bXppptq1apVmjBhgn76059K\nkl555RV9+tOf1g477KAddthBU6dOXfPKYGdnp8aPH6+PfvSjGj16tDbbbLN1Dm5LlizhZ9SgrjAx\nAOCUobwpVNUXuc3aF7mtqC9yW1Vf5LaivshtVX3Wbd3MmTNH06ZN0z777KNp06bpb3/7m7beemtJ\n0jXXXKNbb71Ve+65pyZPnqwzzjhD//3f/62f//znamtr0+9//3u97nWvkyTde++9OvHEE3XzzTdr\nr7320uWXX67DDz9cjzzyiEaMGCFJuvrqq/XDH/5QW221lYYNG6aUklKq3VPi/PPP191336158+ZJ\nkj7wgQ/ovPPO0wEHHKALL7xQTz31lK644gqtXLlSkrRkyZI+m1avXr3m8wKUoaGHuJTStyW9T9Li\nnPObut62paRrJL1W0nxJR+ecn2/kdQBEY6hvClXxRW7jsWytrSsvvshtZXyR26r4rNu6+cUvfqGn\nnnpKhx9+uDbddFPtuuuuuvLKK/XpT39aknTEEUdor732kiQdd9xxOr2fE+Ell1yik08+WXvvvbck\nadKkSfq3f/s3/frXv9bb3/52pZR02mmnaYcdduj146+66ip94xvf0FZbbSVJOuecc3TyySfrlFNO\n0Rvf+Eb97Gc/U0pJY8aM0fKBvo9U0lvf+tYB36cMq1at0q677tqQzw1Dh4ZODKSU3i7pRUlzehzi\nLpT0dM75wpTS5yWNzTl/oZePZWIAoBc8bQoV9UVus/ZFbqvqi9xW1Be5raovcltRn3VbTz72sY9p\n8eLFuvHGGyXVXg279tprde+992rKlCnacccddd5550mqfUvj8ccfryeeeEJS7cYmjz766JpX4iZO\nnKg77rhDI0eOXPP5V65cqZkzZ+qYY47RzjvvrMsuu0zvfve71/z9zjvvrJkzZ+rAAw/UmDFj9Lvf\n/U677LKLJOmhhx7Sm9/8Zr3yyivq7OzURz7yEc2dO1fXXnutvv3tb+uBBx7QsGHDej3QtbW1adWq\nVf3HA6iJO3EppQmSvt/jEPeQpHfmnBellMZJ6sw5v6GXj+MQB9ALbAr5bLP2RW6z9tHms83aR1v9\n995eeukljRs3TqtXr9Ymm2wiqfZzaS+88ILuvfdezZgxQ+PHjx/0Ie4Tn/iEdtppJ33xi1/s1dfz\n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\nOEmSJEmaIP8ES/9MRmLO7r8AAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "p.figure(figsize = (15,7))\n", "p.plot(X.reshape(-1), Y.reshape(-1), 'o', markerfacecolor = 'w', \n", " markeredgecolor = 'b', markersize = 10)\n", "p.axis('equal')\n", "p.axis([X.min()-1, X.max()+1, Y.min()-1, Y.max()+1])\n", "p.gca().invert_yaxis()\n", "\n", "# plot the position of Amacrine cell 240\n", "neuron = lamina.non_columnar_neurons['Am'][240]\n", "x, y = neuron.position()\n", "p.plot(x, y, 'o', markerfacecolor = 'r', markersize = 10, hold = True)\n", "\n", "# plot the positions of the neuron the Am 240 is presynaptic to\n", "for synapse in neuron.outgoing_synapses:\n", " post_x, post_y = synapse.post_neuron.position()\n", " p.plot(post_x+0.1, post_y+0.1, 'o', markerfacecolor = 'b', markersize = 3, hold = True)\n", " p.plot([x, post_x+0.1], [y, post_y+0.1], 'b', hold = True)\n", "# plot the positions of the neuron the Am 0 is postsynaptic to\n", "for synapse in neuron.incoming_synapses:\n", " pre_x, pre_y = synapse.pre_neuron.position()\n", " p.plot(pre_x-0.1, pre_y-0.1, 'o', markerfacecolor = 'g', markersize = 3, hold = True)\n", " p.plot([x, pre_x-0.1], [y, pre_y-0.1], 'g', hold = True)\n", "\n", "p.xlabel('x (arbitrary unit)')\n", "p.ylabel('y (arbitrary unit)')\n", "tx1 = p.text(55, 10, 'Anterior', fontsize=12)\n", "ar1 = p.arrow(65, 9.5, -3, 0, head_width = 1, color = 'k')\n", "tx2 = p.text(63, 4, 'Dorsal', fontsize = 12)\n", "ar2 = p.arrow(65, 9.5, 0, -3, head_width = 1, color = 'k')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We now specify selectors to each public neuron to enable possible connections to other LPUs:" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "collapsed": true }, "outputs": [], "source": [ "lamina.add_selectors()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The selector of cartridge neurons, e.g., L1 neurons, are of the form" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "'/lamina/cart0/L1'" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "lamina.cartridges[0].neurons['L1'].params['selector']" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Finally, we output the full configuration to [GEXF](http://gexf.net) file format that can be used to instantiate the lamina LPU:" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "collapsed": true }, "outputs": [], "source": [ "lamina.export_to_gexf('lamina.gexf.gz')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Executing the Combined Lamina and Medulla Model" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Once again assuming that the Neurokernel source has been cloned to `~/neurokernel`, we first create GEXF files containing the configurations for both the lamina and medulla models:" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "collapsed": false }, "outputs": [], "source": [ "%cd -q ~/neurokernel/examples/vision/data\n", "%run generate_vision_gexf.py" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We then generate an input of duration 1.0 seconds:" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "collapsed": true }, "outputs": [], "source": [ "%run gen_vis_input.py" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Finally, we execute the model. Note that if you have access to only 1 GPU, replace ``--med_dev 1`` with ``--med_dev 0`` in the third line below; this will force both the lamina and medulla models to use the same GPU (at the expense of slower execution):" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "collapsed": false }, "outputs": [], "source": [ "%cd -q ~/neurokernel/examples/vision\n", "%run vision_demo.py --lam_dev 0 --med_dev 1" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Next, we generate a video of the membrane potentials of specific neurons in the two LPUs:" ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "collapsed": false }, "outputs": [], "source": [ "%run visualize_output.py" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The visualization script produces a video that depicts an input signal provided to a grid comprising neurons associated with each of the 768 cartridges in one of the fly's eyes as well as the response of select neurons in the corresponding columns in the retina/lamina and medulla LPUs." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The resulting video (hosted on YouTube) can be viewed below:" ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "\n", " \n", " " ], "text/plain": [ "" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import IPython.display\n", "IPython.display.YouTubeVideo('5eB78fLl1AM')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The three response animations correspond to the specific neurons depicted below:" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Acknowledgements" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The vision model demonstrated in this notebook was developed by Nikul H. Ukani and Yiyin Zhou." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### References" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Fischbach, K.-F. and Dittrich, A. (1989), The optic lobe of Drosophila melanogaster. I. a Golgi analysis of wild-type structure, Cell and Tissue Research, 258, 3, doi:10.1007/BF00218858

\n", "Higgins, C. M., Douglass, J. K., and Strausfeld, N. J. (2004), The computational basis of an identified neuronal circuit for elementary motion detection in dipterous insects, Visual Neuroscience, 21, 04, 567–586, doi:10.1017/S0952523804214079

\n", "Rivera-Alba, M., Vitaladevuni, S. N., Mishchenko, Y., Lu, Z., Takemura, S.-Y., Scheffer, L., et al. (2011), Wiring economy and volume exclusion determine neuronal placement in the Drosophila brain, Current Biology, 21, 23, 2000–2005, doi:10.1016/j.cub.2011.10.022

" ] } ], "metadata": { "kernelspec": { "display_name": "Python 2", "language": "python", "name": "python2" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", "version": "2.7.10" } }, "nbformat": 4, "nbformat_minor": 0 }