{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Olfaction Model Demo" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This notebook illustrates how to run a Neurokernel-based model of part of the fruit fly's antennal lobe." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Background" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The early olfactory system in *Drosophila* consists of two antennal lobes,\n", "one on each side of the fly brain. Each of these LPUs contain 49 glomeruli that\n", "differ in functionality, size, shape, and relative position. Each glomerulus\n", "receives axons from about 50 olfactory receptor neurons (ORNs) on each of the\n", "fly's two antennae that express the same odorant receptor. The axons of each ORN\n", "connect to the dendrites of 3 to 5 projection neurons (PNs) in the glomeruli.\n", "In addition to the PNs - which transmit olfactory information to the higher\n", "regions of the brain - the antennal lobes contain local neurons (LNs) whose\n", "connections are restricted to the lobes; inter-glomerular connectivity therefore\n", "subsumes synaptic connections between ORNs and PNs, ORNs and LNs, LNs and PNs, and feedback\n", "from PNs to LNs. The entire early olfactory system in *Drosophila*\n", "contains approximately 4000 neurons.\n", "\n", "The current model of the each antennal lobe comprises 49 glomerular channels\n", "with full intraglomerular connectivity in both hemispheres of the fly brain. The\n", "entire model comprises 2800 neurons, or 70% of the fly's entire antennal\n", "lobe. All neurons in the system are modeled using the Leaky Integrate-and-Fire\n", "(LIF) model and all synaptic currents elicited by spikes are modeled using alpha functions.\n", "Parameters for 24 of the glomerular channels are based upon currently available\n", "ORN type data [(Hallem et al., 2006)](#hallem_coding_2006); all other channels are configured with\n", "artificial parameters.\n", "\n", "A script that generates a [GEXF](http://gexf.net) file containing the antennal lobe model configuration is included in the ``examples/olfaction/data`` subdirectory of the Neurokernel source code. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Executing the Model" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Assuming that the Neurokernel source has been cloned to `~/neurokernel`, we first generate an input signal of duration 1.0 seconds and construct the LPU configuration:" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [], "source": [ "%cd -q ~/neurokernel/examples/olfaction/data\n", "%run gen_olf_input.py\n", "%run create_olf_gexf.py" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Next, we identify the indices of the olfactory sensory neurons (OSNs) and projection neurons (PNs) associated with a specific glomerulus; in this case, we focus on glomerulus DA1:" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [], "source": [ "import re\n", "import networkx as nx\n", "import neurokernel.tools.graph\n", "\n", "g = nx.read_gexf('antennallobe.gexf.gz')\n", "df_node, df_edge = neurokernel.tools.graph.graph_to_df(g)\n", "glom_name = 'DA1'\n", "osn_ind = sorted(list(set([ind[0] for ind in \\\n", " df_edge[df_edge.name.str.contains('.*-%s_.*' % glom_name)].index])))\n", "pn_ind = sorted(list(set([ind[1] for ind in \\\n", " df_edge[df_edge.name.str.contains('.*-%s_.*' % glom_name)].index])))\n", "\n", "# Get OSN and PN label indices:\n", "osn_ind_labels = [int(re.search('osn_.*_(\\d+)', name).group(1)) \\\n", " for name in df_node.ix[osn_ind].name]\n", "pn_ind_labels = [int(re.search('.*_pn_(\\d+)', name).group(1)) \\\n", " for name in df_node.ix[pn_ind].name]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We now execute the model:" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [], "source": [ "%cd -q ~/neurokernel/examples/olfaction\n", "%run olfaction_demo.py" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Next, we display the input odorant concentration profile and the spikes produced by the 25 OSNs and 3 PNs associated with glomerulus DA1 in the model:" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nve46z93ZZ0aSpNkNvvieluQwcB7wyeVmIkmSJM1uZYrvySMn7wNePbkDLkmSJK2UVXjmmySnA1cB\nf1tVH9ipzXg8Prk8Go0YjUZNcpMkSdJ6Onr0KPDddea8UlW9BVuEJAGuAO6oqtfs0qbmOY8k9Pk+\nzBNvSLkMLUaf8frMp69Yrc9puv1Oy3tt67Kv688+Yiwy5iLyG1qee42HWcbWEOa+If3bHlIufcVZ\n17l8aNdqKDG6xJr198dO21bp9wVAVWWe93MVHju5EHgJ8MwkN05eR5adlCRJkjSrwT92UlX/wmr8\nJ0GSJEnak0WtJEmS1IjFtyRJktSIxbckSZLUiMW3JEmS1IjFtyRJktSIxbckSZLUiMW3JEmS1IjF\ntyRJktTIoT6/q35ZNjY2xvOex2g06iWXPuINKZehxegzXp/59BWr9TlNt99pea9tXfZ1/dlHjEXG\nXER+Q8tzr+Wd1nfTtV3ffRcRp49YQ8qlrzh9nlMf8YbyvvQdaygxusTaaw7qum2Z8/EsbY8dO8Z4\nPN5gDtn6XvtVlqTW4TwkSZI0XEmoqswTw8dOJEmSpEYsviVJkqRGLL4lSZKkRiy+JUmSpEYsviVJ\nkqRGLL4lSZKkRiy+JUmSpEYsviVJkqRGLL4lSZKkRiy+JUmSpEYsviVJkqRGLL4lSZKkRiy+JUmS\npEYsviVJkqRGLL4lSZKkRiy+JUmSpEYsviVJkqRGLL4lSZKkRiy+JUmSpEYsviVJkqRGLL4lSZKk\nRiy+JUmSpEYsviVJkqRGLL4PYDweL6XvImP1EXOI57auOfV5nabXd1rea1uXffv9tO9w+m5f3mvb\nQdosou8i4vQVr898hvYeDe3chpZP37GG9B5tj7Pb/NFl7tlr35Dn0HmlqnoJtO+BkidV1c0Lil2t\nzmNyPA56vHn6LjJWHzGHeG7rmlOf12l6faflvbZ12bffT/sOp+9uY6vLeBvC3NH3nDhvvHWdf/qM\n01esoeXTd6whvUez/g6ZXu5jTjtInz77AlRV5nkPF37nO8lDJ4t/NbXtskUfV5IkSRqaFo+d/EWS\nTwCPTHJxkguBZzc4riRJkjQoCy++q+r5wNOArwF3Az8PPCrJtd4BlyRJ0qnktEUfIMm/AieA+wPH\ngb8DfhJ4FnDBoo8vSZIkDcXCi++qenqSxwDPAF4BPBF4DPDHwMcXfXxJkiRpKBZefANU1Ykkd1bV\nJQBJbgL+hs2CXJIkSToltPyc76dNLV9VVTdU1Z/s1ynJu5J8NcnxBeYmSZIkLVyz4ruqvjO1/Psz\ndH03cKT/jCRJkqS2Bv8Nl1X1ceDOZechSZIkzWvwxbckSZK0Lpr8wWUL4/H45PJoNGI0Gi0tF0mS\nJK2H6RqzD9n6vvpFSfLGXXYVQFX9XocYh4EPVtUTd9lfiz6PbcfjoMebp+8iY/URc4jntq459Xmd\nptd3Wt5rW5d9+/2073D67ja2uoy3Icwdfc+J88Zb1/mnzzh9xRpaPn3HGtJ7NOvvkOnlPua0g/Tp\nsy9AVWWe97DFne+7mRTaU+7P5md+nwnsW3xLkiRJ66DFl+y8ZWs5yQOAXwdeDlwJdPmowfew+Xng\nD0lyG/CGqnr3gtKVJEmSFqbJM99JHgK8BrgI+Gvg/Krq9AkmVfXiReYmSZIktbLw4jvJW4DnA+8A\nzq2quxZ9TEmSJGmIWnzU4G8AZwG/A3wlyV1Tr283OL4kSZI0CC2e+fazxCVJkiTaPHbyvcArgXOA\n48DlVXXvoo8rSZIkDU2Lu9JXAE8GPgM8hw6fcCJJkiStoxafdvL4rS/HSfKXwL81OKYkSZI0OC3u\nfJ98xMTHTSRJknQqO9T399Vvt7Gx8daNjY3XbmxsvH5jY+P1wFlT668bj8dv7uEY40Wfx3aj0Wgp\nfRcZq4+YQzy3dc2pz+s0vb7T8l7buuzb76d9h9N3+/Je2w7SZhF9FxGnr3h95jO092ho5za0fPqO\nNaT3aHuc3eaPLnPPXvuGOIceO3aM8Xi8wRyy9X31qyxJrcN5SJIkabiSUFWZJ4YfAyhJkiQ1YvEt\nSZIkNWLxLUmSJDVi8S1JkiQ1YvEtSZIkNWLxLUmSJDVi8S1JkiQ1YvEtSZIkNWLxLUmSJDVi8S1J\nkiQ1YvEtSZIkNWLxLUmSJDVi8S1JkiQ1YvEtSZIkNWLxLUmSJDVi8S1JkiQ1YvEtSZIkNWLxLUmS\nJDVi8S1JkiQ1YvEtSZIkNWLxLUmSJDVi8S1JkiQ1YvEtSZIkNWLxfUDj8XgpfVcl3hBz6jPOEGPN\nGmN7+6316e1dtnXZN0ubIbQ9VfPc3m6/bbuZdzz38e+hzzh9x+szr3XOqc9YQ8ypz1jLGus7zS+7\nLfc9t3Vps+i58qBSVb0EWqYk1fo8knDQY87Td1XiDTGnPuMMMdasMba331qf3t5lW5d9s7QZQttT\nNc+9xtIs42ve8TzEf+99xhva3NFnnKHGGmJOfcZa1ljfaX7Zbbnvua1Lm0W0BaiqzPP+eudbkiRJ\nasTiW5IkSWrE4luSJElqxOJbkiRJasTiW5IkSWrE4luSJElqZCWK7yRHktya5PNJLl12PpIkSdJB\nDL74TnII+HPgCPBDwIuTPH65WUmSJEmzG3zxDVwAnKiqL1XVPcCVwPOWnJMkSZI0s1Uovs8Cbpta\n//JkmyRJkrRSTlt2Ah10+r7U8Xh8cnk0GjEajRaUjiRJkk4FR48eBb67zpxXtr7HfqiSPBUYV9WR\nyfrrgPuq6rKpNtX6PJJw0GPO03dV4g0xpz7jDDHWrDG2t99an97eZVuXfbO0GULbUzXPvcbSLONr\n3vE8xH/vfcYb2tzRZ5yhxhpiTn3GWtZY32l+2W2577mtS5tFtAWoqszz/q7CYyc3AI9NcjjJGcCL\ngKuXnJMkSZI0s8E/dlJV9ya5BPgIcAi4vKo+t+S0JEmSpJkNvvgGqKprgGuWnYckSZI0j1V47ESS\nJElaCxbfkiRJUiMW35IkSVIjFt+SJElSIxbfkiRJUiMW35IkSVIjFt+SJElSI4f6/K76ZdnY2Bgv\n4zxGo9FS+q5KvCHm1GecIcaaNcb29lvr09u7bOuyb5Y2Q2h7qua5vd1+23Yz73ju499Dn3H6jtdn\nXuucU5+xhphTn7GWNdZ3ml92W+57buvSpu+2x44dYzwebzCHbH2P/SpLUutwHpIkSRquJFRV5onh\nYyeSJElSIxbfkiRJUiMW35IkSVIjFt+SJElSIxbfkiRJUiMW35IkSVIjFt+SJElSIxbfWltHjx5d\ndgoaIMeFtnNMaCeOCy2KxbfWlhOnduK40HaOCe3EcaFFsfiWJEmSGrH4liRJkhpJVS07h7klWf2T\nkCRJ0uBVVebpvxbFtyRJkrQKfOxEkiRJasTiW5IkSWpk0MV3kiNJbk3y+SSX7tLmzyb7b05y3ix9\ntZr2u7ZJLpqMh1uSXJfk3K59tbq6XtskT0lyb5IXzNpXq6fj75FRkhuTfCbJ0Vn6ajV1+D1yZpIP\nJ7lpMi5e1rWvVlOSdyX5apLje7Tpp+asqkG+gEPACeAwcDpwE/D4bW2eA3xosvyjwCe69vW1mq+O\n4+JpwAMny0ccF+v/6nptJ+0+Cvwj8ALHxXq/Os4XDwL+Azh7sn6m42K9Xx3HxRh489aYAO4ATnNc\nrO8L+HHgPOD4Lvt7qzmHfOf7AuBEVX2pqu4BrgSet63Nc4ErAKrqk8CDkjysY1+tpn2vbVVdX1X/\nM1n9JHB2175aWV2v7auA9wFfP0BfrZ4u1/aXgauq6ssAVfWNGfpqNXW5trcDD5gsPwC4o6ru7dhX\nK6iqPg7cuUeT3mrOIRffZwG3Ta1/ebKtS5uHd+ir1dRlXEx7BfChA/bV6tj32iY5i80J8W2TTVsf\n9eS4WF9dru1jge9P8rEkNyT5lRn6ajV1ubbvBJ6Q5CvAzcCrZ+ir9dRbzXla76n1p+tnIM71WYta\nOZ0/GzPJM4FfBS6cta9WTpdr+6fAb1dVJQn/P3c4LtZXl2t7OnA+8FPA/YDrk3yiY1+tpi7X9vXA\nTVU1SnIO8M9JnrTgvDR8vdScQy6+/xt4xNT6I9j838Rebc6etDm9Q1+tpi7jgskfWb4TOFJVd87S\nVyupy7V9MnDlZt3NmcCzk9zTsa9WU5drexvwjar6DvCdJNcCT5q0c1yspy7j4unAmwCq6gtJvgg8\nDsfFqay3mnPIj53cADw2yeEkZwAvAq7e1uZq4KUASZ4KfKuqvtqxr1bTvtc2ySOB9wMvqaoTs/TV\nytr32lbVD1bVo6vq0Ww+931xVV3dpa9WVpdr+w/AjyU5lOR+bP4h1Wc79tVq6nJtbwWeBZDkoWwW\n3v/Zsa/WU28152DvfFfVvUkuAT7C5l+SXl5Vn0vya5P9b6+qDyV5TpITwN3Ay/fqu5wzUZ+6jAvg\nDcCDgbdN7nLeU1UXOC7WV8dxMVPfFnlrsTr+Hrk1yYeBW4D7gHdW1WcBHBfrqeN88QfAu5PczOaN\nyt+qqm+C42JdJXkP8AzgzCS3AW9k86527zWnXy8vSZIkNTLkx04kSZKktWLxLUmSJDVi8S1JkiQ1\nYvEtSZIkNWLxLUmSJDVi8S1JkiQ1YvEtSSskyQOTXDy1/vAk713QsX42yXiP/ecmuXwRx5akdeXn\nfEvSCklyGPhgVT2xwbE+BvzS5FvcdmtzFPjFqvraovORpHXgnW9JWi1/CJyT5MYklyV5VJLjAEle\nluQDSf4pyReTXJLkN5N8Osn1SR48aXdOkmuS3JDk2iSP236QJI8AztgqvJO8MMnxJDclOTbV9Brg\nhYs/bUlaDxbfkrRaLgW+UFXnVdWlQLbtfwLwfOApwJuAb1fV+cD1wEsnbd4BvKqqfgR4LfDWHY5z\nIfDpqfXfBX66qn4Y+Lmp7Z8CfmK+U5KkU8dpy05AkjST7cX2dh+rqruBu5N8C/jgZPtx4Nwk9wee\nDrw3ORnqjB3iPBK4fWr9OuCKJH8PvH9q++3A4ZnOQJJOYRbfkrRe/ndq+b6p9fvYnPO/B7izqs7r\nEOtkdV5VFye5APgZ4N+TPLmqvjlp4x8PSVJHPnYiSavlLuD7DtAvAFV1F/DFJL8AkE3n7tD+v4CH\nneycnFNVn6qqNwJfB86e7PqBSVtJUgcW35K0QqrqDuC6yR8/XsbmXeetO8/Ty+ywvLV+EfCKJDcB\nnwGeu8OhrgPOn1r/oyS3TP6487qqumWy/QLg2nnOSZJOJX7UoCRpR0k+ClxUVbfv0eYoftSgJHXm\nnW9J0m7eArxyt52Tx1VOWHhLUnfe+ZYkSZIa8c63JEmS1IjFtyRJktSIxbckSZLUiMW3JEmS1IjF\ntyRJktSIxbckSZLUyP8BIzPNhQn8+b4AAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%matplotlib inline\n", "\n", "import h5py\n", "import matplotlib as mpl\n", "import matplotlib.pyplot as plt\n", "import matplotlib.ticker as ticker\n", "import numpy as np\n", "\n", "fmt = lambda x, pos: '%2.2f' % (float(x)/1e4)\n", "with h5py.File('./data/olfactory_input.h5', 'r') as fi, \\\n", " h5py.File('olfactory_output_spike.h5','r') as fo:\n", " data_i = fi['array'].value\n", " data_o = fo['array'].value \n", "mpl.rcParams['figure.dpi'] = 120 \n", "mpl.rcParams['figure.figsize'] = (12,9)\n", "\n", "raster = lambda data: plt.eventplot([np.nonzero(data[i, :])[0] for i in xrange(data.shape[0])],\n", " colors = [(0, 0, 0)],\n", " lineoffsets = np.arange(data.shape[0]),\n", " linelengths = np.ones(data.shape[0])/2.0)\n", "f = plt.figure()\n", "plt.subplot(311)\n", "ax = plt.gca()\n", "ax.xaxis.set_major_formatter(ticker.FuncFormatter(fmt))\n", "plt.plot(data_i[:10000, 0]); \n", "ax.set_ylim(np.min(data_i)-1, np.max(data_i)+1)\n", "ax.set_xlim(0, 10000)\n", "plt.title('Input Stimulus'); plt.ylabel('Concentration') \n", "\n", "plt.subplot(312)\n", "raster(data_o.T[osn_ind, :])\n", "plt.title('Spikes Generated by OSNs'); plt.ylabel('OSN #');\n", "ax = plt.gca()\n", "ax.set_ylim(np.min(osn_ind_labels), np.max(osn_ind_labels))\n", "ax.xaxis.set_major_formatter(ticker.FuncFormatter(fmt))\n", "ax.yaxis.set_major_locator(ticker.MultipleLocator(base=5.0))\n", "\n", "plt.subplot(313)\n", "raster(data_o.T[pn_ind, :])\n", "plt.title('Spikes Generated by PNs'); plt.ylabel('PN #');\n", "ax = plt.gca()\n", "ax.set_ylim(np.min(pn_ind_labels)-0.5, np.max(pn_ind_labels)+0.5)\n", "ax.xaxis.set_major_formatter(ticker.FuncFormatter(fmt))\n", "ax.yaxis.set_major_locator(ticker.MultipleLocator(base=1.0))\n", "\n", "plt.xlabel('time (s)')\n", "\n", "plt.subplots_adjust()\n", "f.savefig('olfactory_output.png')" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Acknowledgements" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The olfactory model demonstrated in this notebook was developed by Chung-Heng Yeh." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### References" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Hallem, E. A. and Carlson, J. R. (2006), Coding of odors by a receptor repertoire, Cell, 125, 1, 143–160, doi:10.1016/j.cell.2006.01.050" ] } ], "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 }