Optical stimulation of a channelrhodopsin-2 positive pyramidal neuron model (Foutz et al 2012)

 Download zip file   Auto-launch 
Help downloading and running models
Accession:153196
A computational tool to explore the underlying principles of optogenetic neural stimulation. This "light-neuron" model consists of theoretical representations of the light dynamics generated by a fiber optic in brain tissue, coupled to a multicompartment cable model of a cortical pyramidal neuron (Hu et al. 2009, ModelDB #123897) embedded with channelrhodopsin-2 (ChR2) membrane dynamics. Simulations predict that the activation threshold is sensitive to many of the properties of ChR2 (density, conductivity, and kinetics), tissue medium (scattering and absorbance), and the fiber-optic light source (diameter and numerical aperture). This model system represents a scientific instrument to characterize the effects of optogenetic neuromodulation, as well as an engineering design tool to help guide future development of optogenetic technology.
Reference:
1 . Foutz TJ, Arlow RL, McIntyre CC (2012) Theoretical principles underlying optical stimulation of a channelrhodopsin-2 positive pyramidal neuron. J Neurophysiol 107:3235-45 [PubMed]
Model Information (Click on a link to find other models with that property)
Model Type: Neuron or other electrically excitable cell; Axon; Channel/Receptor; Dendrite;
Brain Region(s)/Organism:
Cell Type(s): Neocortex V1 L6 pyramidal corticothalamic GLU cell;
Channel(s): I K; I M; I K,Ca; I Sodium; I Calcium; Channelrhodopsin (ChR);
Gap Junctions:
Receptor(s):
Gene(s):
Transmitter(s):
Simulation Environment: NEURON; Python;
Model Concept(s): Detailed Neuronal Models; Action Potentials; Parameter sensitivity; Intracortical Microstimulation; Neuromodulation;
Implementer(s): MacIntyre, CC [ccm4 at case.edu]; Foutz, Thomas J [tfoutz at uw.edu]; Arlow, Richard L [richard.arlow at case.edu];
Search NeuronDB for information about:  Neocortex V1 L6 pyramidal corticothalamic GLU cell; I K; I M; I K,Ca; I Sodium; I Calcium; Channelrhodopsin (ChR);
{
 "metadata": {
  "name": ""
 },
 "nbformat": 3,
 "nbformat_minor": 0,
 "worksheets": [
  {
   "cells": [
    {
     "cell_type": "heading",
     "level": 1,
     "metadata": {},
     "source": [
      "Introduction"
     ]
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "Foutz, T. J., Arlow, R. L., & McIntyre, C. C. (2012). Theoretical principles underlying optical stimulation of a channelrhodopsin-2 positive pyramidal neuron. Journal of Neurophysiology, 107(12), 3235\u20133245. doi:10.1152/jn.00501.2011"
     ]
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "This folder contains the core source files used to generate the data and figures in the manuscript. The below example script is an ipython notebook file which can be used to generate Figure 2."
     ]
    },
    {
     "cell_type": "heading",
     "level": 1,
     "metadata": {},
     "source": [
      "Dependencies"
     ]
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "These files were run on Mac OS 10.9 using Python 2.7.6 64-bit installed using Canopy 1.3. Canopy is a package from Enthought, who provides free licenses to academic users, and it includes all the dependencies other than NEURON (Mayavi, Matplotlib, numpy). NEURON was installed as a python library using the following installation bash script:\n",
      "    \n",
      "    sudo mkdir /nrn\n",
      "    sudo chown $USER:staff /nrn\n",
      "    cd /nrn\n",
      "    hg clone http://www.neuron.yale.edu/hg/neuron/iv\n",
      "    hg clone http://www.neuron.yale.edu/hg/neuron/nrn\n",
      "    cd /nrn/iv\n",
      "    ./build.sh\n",
      "    ./configure --prefix=/nrn CFLAGS='-arch x86_64' CXXFLAGS='-arch x86_64'\n",
      "    make\n",
      "    make install\n",
      "    make clean\n",
      "    cd /nrn\n",
      "    cd /nrn/nrn\n",
      "    make clean\n",
      "    ./build.sh\n",
      "    ./configure --prefix=/nrn --with-iv=/nrn PYLIBLINK='-framework Python' PYLIB='-framework Python' --with-nrnpython=dynamic CC='clang' CXX='clang++' CFLAGS='-O3 -Wno-return-type -Wno-implicit-function-declaration -Wno-implicit-int' CXXFLAGS='-O3 -Wno-return-type -Wno-implicit-function-declaration -Wno-implicit-int'\n",
      "    make\n",
      "    sudo make install\n",
      "    make clean\n",
      "    cd /nrn/nrn/src/nrnpython\n",
      "    python setup.py install"
     ]
    },
    {
     "cell_type": "heading",
     "level": 1,
     "metadata": {},
     "source": [
      "Abstract"
     ]
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "Theoretical principles un- derlying optical stimulation of a channelrhodopsin-2 positive pyrami- dal neuron. J Neurophysiol 107: 3235\u20133245, 2012. First published March 21, 2012; doi:10.1152/jn.00501.2011.\u2014Optogenetics is an emerging field of neuromodulation that permits scaled, millisecond temporal control of the membrane dynamics of genetically targeted cells using light. Optogenetic technology has revolutionized neuro- science research; however, numerous biophysical questions remain on the optical and neuronal factors impacting the modulation of neural activity with photon-sensitive ion channels. To begin to address such questions, we developed a computational tool to explore the under- lying principles of optogenetic neural stimulation. This \u201clight-neuron\u201d model consists of theoretical representations of the light dynamics generated by a fiber optic in brain tissue, coupled to a multicompart- ment cable model of a cortical pyramidal neuron embedded with channelrhodopsin-2 (ChR2) membrane dynamics. Simulations re- vealed that the large energies required to generate an action potential are primarily due to the limited conductivity of ChR2, and that the major determinants of stimulation threshold are the surface area of illuminated cell membrane and proximity to the light source. Our results predict that the activation threshold is sensitive to many of the properties of ChR2 (density, conductivity, and kinetics), tissue me- dium (scattering and absorbance), and the fiber-optic light source (diameter and numerical aperture). We also illustrate the impact of redistributing the ChR2 expression density (uniform vs. nonuniform) on the activation threshold. The model system developed in this study represents a scientific instrument to characterize the effects of opto- genetic neuromodulation, as well as an engineering design tool to help guide future development of optogenetic technology."
     ]
    },
    {
     "cell_type": "heading",
     "level": 1,
     "metadata": {},
     "source": [
      "Import NEURON library"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "from neuron import h\n",
      "h.load_file(\"stdrun.hoc\")\n",
      "h.cvode_active(1)"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "metadata": {},
       "output_type": "pyout",
       "prompt_number": 1,
       "text": [
        "1.0"
       ]
      }
     ],
     "prompt_number": 1
    },
    {
     "cell_type": "heading",
     "level": 1,
     "metadata": {},
     "source": [
      "Instantiate cell, stimulator and simulation classes"
     ]
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "Cell model is taken from *Distinct contributions of Na(v)1.6 and Na(v)12 in action potential initiation and backpropagation*, Hu *et al.*, Nat Neurosci (2009). For details regarding the cell and optical fiber models, see source code and manuscript."
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "from classes import Hu, Optrode, Sim\n",
      "cell = Hu()\n",
      "optrode = Optrode(h.soma)\n",
      "sim = Sim(cell,optrode,output_filename='csv/distance_threshold.csv')"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [],
     "prompt_number": 2
    },
    {
     "cell_type": "heading",
     "level": 1,
     "metadata": {},
     "source": [
      "Run simulation"
     ]
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "This example recreates the data for Figure 2c in the manuscript. It determines the threhold for generating an action potential at a range of distances from the cell body, and for a range of fiber diameters. It takes about XXX minutes on my macbook pro laptop. The output is already in the csv folder. Uncomment this section if you desire to regenerate the results on your hardwar, or to adjust the parameters."
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "#distances=xrange(100, 2000 + 50, 50)\n",
      "#fiber_diameters = [0.1,0.2,0.4]\n",
      "#params   = [{'Distance (um)':d,\n",
      "#             'Fiber Optic Diameter (mm)':f} \n",
      "#            for d in distances \n",
      "#            for f in fiber_diameters]\n",
      "#sim.main(params)"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [],
     "prompt_number": 3
    },
    {
     "cell_type": "heading",
     "level": 1,
     "metadata": {},
     "source": [
      "Plot results"
     ]
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "iPython notebooks can plot matplotlib inline if desired using the following *magic* command"
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "%pylab inline"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "Populating the interactive namespace from numpy and matplotlib\n"
       ]
      }
     ],
     "prompt_number": 4
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "Use matplotlib to display the distance versus threshold results."
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "from matplotlib import pyplot\n",
      "from classes import Data\n",
      "from functions import make_legend\n",
      "\n",
      "# Simulation\n",
      "ds = Data('csv/distance_threshold.orig.csv')\n",
      "# ds = Data('csv/distance_threshold.csv') # Use this filename if you ran your own simulations\n",
      "ds.sort('Distance (um)')\n",
      "\n",
      "# Strength-Distance\n",
      "fig = pyplot.figure(figsize=(3.5,2.5))\n",
      "styles = iter(['b--','g-.','r'])\n",
      "for f in [0.1,0.2,0.4]:\n",
      "    ds.set_slice(ds.data['Fiber Optic Diameter (mm)']==f)\n",
      "    pyplot.semilogy(ds.slice['Distance (um)'],ds.slice['Threshold (W/cm2)'],\n",
      "                    styles.next(),\n",
      "                    label='%.1f' % f)\n",
      "pyplot.plot([1400], [38.0], '*', color='0.5',label='Aravanis (0.2)') # Aravanis data point\n",
      "pyplot.xlabel('Distance (um)')\n",
      "pyplot.ylabel('Threshold (W/cm2)')\n",
      "pyplot.xlim([0,2000])"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "metadata": {},
       "output_type": "pyout",
       "prompt_number": 5,
       "text": [
        "(0, 2000)"
       ]
      },
      {
       "metadata": {},
       "output_type": "display_data",
       "png": "iVBORw0KGgoAAAANSUhEUgAAAQYAAAC8CAYAAACaEwCbAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJztnXtclNX2/z8DopmEaeGIoKJcJC6CBJggXk4YWIjXdNTU\n8JYWaZpH7Hx/5wv2LZNOHeOYnrQjapSGecNS0DQIr5CKaKKIMZPEzbtcBIaZWb8/ds5xBOT2zPPM\n6H6/Xrx0nuHZ+zMz7DV7r7X22jIiInA4HM59WEgtgMPhmB7cMHA4nHpww8DhcOrBDQOHw6kHNwwc\nDqce3DBwOJx6cMPA4XDqwQ0Dh8Oph8kahosXL2L+/PmYOHEiNmzYILUcDuexQmbqmY86nQ4KhQLb\ntm2TWgqH89gg6oxh5syZkMvl8PLyMriempoKNzc3uLi4IC4uTn/9+++/xyuvvAKFQiGmTA7nsUfU\nGcPhw4dhbW2N6dOn49y5cwAArVaLfv364eDBg7C3t4e/vz+2bt2K5557Tn/f6NGjkZycLJZMDuex\np52YnQUHB0OlUhlcy8rKgrOzMxwdHQEACoUCycnJuHr1Knbu3ImamhoMHz68wfZkMpmRFXM45oVQ\n3/OiGoaGKCoqQs+ePfWPHRwckJmZiaFDh2Lo0KFN3m/iLpImiY2NRWxsrNQy2gR/DaaBkF+Ukkcl\n2vpiYmNjkZ6eLowYDscMSU9PF9yoST5jsLe3R2Fhof5xYWEhHBwcmn2/uVt5DqetDBs2DMOGDcPy\n5csFa1PyGYOfnx/y8/OhUqmgVquRlJSEiIiIZt9v7jOGYcOGSS2hzfDXIC3GmDGIGpWYPHkyfv75\nZ9y4cQPdunXD+++/j8jISKSkpOCdd96BVqvFrFmz8N577zWrPZlMZvY+Bg5HKIQcDyaf4PQwZDIZ\nYmJi9FMpDudxo64O+OyzdGzZko4zZ5ZzwwDwGQPn8eX0aWDdOmDnTsDJCZg0CVi8WLjxILmPoa2Y\nu4+Bw2kNhYVA375AVhawcmU67tyJFbR9PmPgcEwUIqC4GLC3b97vCzkeJA9XcjgcQy5fBrZuBbZs\nATp2BE6dAsRO8uVLCQ7HRFizBvD3BwYPBq5eBRISmmcUzD5cKTR8KcF5lFi1CvD0BIYPB9q1Yi7P\nw5V/wg0Dx9yoqQFu3wa6dxe+bSHHA19KcDhGRqsFDh0CZs4EevQAhC5IxpcSD8BnDBxT5vp1IC6O\nORHlcmDqVEChaH6UoaXwqASHYwa0b89+fvwRcHeXWk3L4DMGDqeNlJcDTzzBjICUcB8DhyMxGg2Q\nkgJMngz06gX88ovUioTF7A0Ddz5yxOTSJWDxYsDBAXj/fSA4GPjtNyAoSDpN3Pn4AHwpwRGb/fuB\nI0eAadMAV1ep1RjC8xj+hBsGjrHQagFLS6lVtAzuY+BwjAARcOIEMG8e0Ls3UF0ttSLp4OFKzmNP\nURGQmAhs2sSMw4wZwPHjbAPT40qzlxI1NTWQyWTo0KGDsTU1G76U4AjBW2+xSkiRkcALL4i/k1Eo\nRElw0ul02L17N7Zu3Ypjx45Bp9OBiGBpaYlBgwZh6tSpGDNmjOSHvsTGxvLSbpw2sWaN1Araxrvr\n3wVUwrbZ6IxhyJAhCA4ORkREBHx8fPQzhdraWmRnZ2PPnj04cuQIMjIyhFXUAviMgdMcbt5kackq\nFfDJJ1KrEZ6E7AQMdxyOvl37Gj8qUVtb2+SyoTm/Y0y4YeA0hk4H/PQT27CUkgKMHAnMng28+KLU\nylpHcUUxtuduR4+nemCC+4QGf0eUpURzBrwp+Rs4nHsQAQEBLDtx9my2VOjaVWpVrSf5YjIikyMR\n0S8Cfj38ROmz0RnD2bNnMXfuXPzxxx94+eWXERcXhy5dugAAAgICkJWVJYrAh8FnDJzGKC4G7OzM\nz5FYpa5Cp/adDK5V11XDQmaBDu0e/kUsSh7D/PnzERsbi3PnzsHV1RVBQUG4fPkyAKCurk6Qzjmc\ntqBUstJnDdGjh/kZhUp1JdzXuqNOazi+Olp1bNIoCE2jhqGiogJhYWHo0qULlixZgjVr1iAsLAwn\nTpwQRVhycjLmzp0LhUKBH3/8UZQ+OaZPXR2wYwcQGsqWCyL9OQpOeW05ajQ1Btes21sj/+18WFla\nSaTqPqgR+vfvT7dv3za4lpOTQ05OTtS1a9fGbhOcW7du0axZsxp87iHyOY8YlZVEy5YRyeVEQ4YQ\nffMNUXW11KpazoHLB2hc0jiy+ciG0pRpgrYt5HhodMawdOlS5ObmGlzr378/fvrpJ4wdO7ZVRmjm\nzJmQy+Xw8vIyuJ6amgo3Nze4uLggLi7O4LkPPvgAUVFRreqP8+hwr95Bejrw88/AlCnsmrlxs/om\nwl3CoVqowjDHYVLLaRRRN1EdPnwY1tbWmD59Os6dOwcA0Gq16NevHw4ePAh7e3v4+/tj69atcHNz\nw7Jly/DSSy/hxUZiTNz5yDFVCm4V4MQfJzDFa4pofYpa2u2XX37BihUroFKpoNFo9ALOnj3b4s6C\ng4OhUqkMrmVlZcHZ2RmOjo4AAIVCgeTkZBw8eBCHDh1CeXk5Ll++jDfeeKPBNu/fh84zIM2Xe3kH\na9cCQ4cCCxdKrahtyCBDlbrKqH2kp6cbrRZJkzMGV1dXfPLJJ/D09ISFxX9XHvcGcktRqVQYNWqU\nfsawfft27N+/H19++SUA4Ouvv0ZmZiZWr17dtHg+YzB7bt0CNm8G/v1voEMHtm9h6lTA2lpqZc3j\n4vWL2JG7A9GDo9HOQto9iaLOGGxtbRERESFIZw3R1r0WfK+E+aJSAQMGsKzEhAQgMNC8QozhW8Jx\nuuQ0FJ4K3K27C5sONpLoMMbMockZw4EDB5CUlISQkBC0/7PapUwmw7hx41rV4YMzhhMnTiA2Nhap\nqakAgI8++ggWFhaIjo5uWjyfMZg1RMCNG8Czz0qtpHVcvnkZfZ7uA0sL06joIuqMYfPmzcjLy4NG\nozFYSrTWMDyIn58f8vPzoVKp0KNHDyQlJWHr1q3Nvp/PGEyfq1fZTMDW1vC6TGYeRiEhOwHX717H\n0qClBteduzpLpMgQo/gamopnurq6kk6nEyQ2qlAoyM7Ojtq3b08ODg6UkJBARET79u0jV1dXcnJy\nohUrVjS7vWbI50jIyZNE06cTPf000XffSa2m9ZRUlNCNuzekltEkQo6HJlt6/fXX6ddffxWsQyEB\nQDExMZSWlia1FM6f1NURbdtGFBhI1KsXUVwc0fXrUqtqmvwb+RSTFkOvfPOKYF+EYpGWlkYxMTGC\nGoYmfQxubm747bff0KdPH/1uytaGK4WG+xhMj8uX2RmNCxYAY8a07tRmsanR1MBjrQfCXcPxmtdr\n8OvhJ3kBomZz+zawdy+wcydkO3eKVyX6wbyDe7Q2XCkkMpkMMTEx3MfAaTZqrRpanRYdrQwLOhKR\n+RiDsjIgORnYuRM4dgzpXl5It7XF8uRk8QzDiRMn4O7uDhsbFoopLy/HhQsXMHDgQEEEtAU+Y5AG\nIuDoUeZM7NdPajUtY873cxDqFNposROT5coVZgh27gTOngXCwoDx41ms98+kD1HPlfDx8cHp06f1\nEQmtVgs/Pz9kZ2cLIqAtcMMgLhoN+7v85BOWmPTvfwMhIVKrahyNTlMv6aihaybLpUtsK+nOnWyP\neUQEMwYvvtjgRhHRT7u+P0xpaWkJrVYrSOdCwMOVxufuXVYibdUqdoT7//wPEB5umgey1GpqkZyX\njE1nNkEmk2HvlL0Gz5u0USACzp1jxmDHDlascuxYYOVKlifeiMNGknDlmDFjKD4+ntRqNdXW1tJn\nn31Go0ePFsz72RaaIZ8jAFevEk2cSHT8uNRKmqa0opRGfDWCEnMSqbK2kmJjY007yqDTEWVlEUVH\nEzk7E/XuTbRoEdGRI0RabYuaEnI8NNlSaWkpTZw4kWxtbcnW1pYUCgWVlZUJJqAtcMPweFNWWUY1\ndTWNPp+cnExDhw6lPXv2iKiqGWi1bOAvWsRiuq6uRO+9xxI/2mDEhBwPjfoYtmzZgtDQUDzzzDPC\nTlEEhEclhOXsWXZm44ABUitpHuO3jcfSwKUY6GDoCN+4cSM2bNgAW1tbeHt7IycnB9euXcOsWbMQ\nGRkpjVitlp2Gu3078xl07QpMmMB8Bh4ebdokcm8psXz5cuM7H1euXIkDBw5ArVYjJCQEI0eOREBA\ngEmFdLjzURiOHwc+/BA4fRr47DNg4kSpFdVHrVWjvWV7g2vUSIiRiLBnzx58+eWX8Pf3xy+//IK5\nc+di1KhR4v79ajSsqsw9Y9CjB/Dqq8wYGCGcI4rzcdmyZVi2bBnKy8tx8OBBJCQkYN68eXBzc8PI\nkSMRGhoKuVwuiAiO+BABhw4xg6BSAdHR7O/XlKoi3a27i+2527EhewMcn3bE5jGbDZ5vbJDLZDLI\nZDJUVlbi1KlTqKio0F8zOhoNkJbG3sxdu4BevZgxOHoUcDaNvRXNocUVnM6fP4+UlBQcOHAABw4c\nMJauZsFnDK2nupqFwmfNAiZPBqxMoP7og1y6cQnvpL6DOb5zEO4a3qIiqfHx8ejbty/Cw8Pxww8/\nQKlUYsGCBcYRWlfHjMF33wG7dwN9+rBlwoQJQN++xumzAUTJYxg9ejSCgoIQFBQEf39//ZZrU4L7\nGB4dymvLYd3eGhayRsuQmhYaDStAuW0bmxn07ctmBhMmACJnBYvqY/j+++9x7NgxHD9+HDk5OXBz\nc0NgYCAGDx6MwMBAk1hG8BlD0+h0QEkJyz8wZYZvHo5Voavg091HaimNo9EAGRnMGOzcyQzAxImS\nGIOGEDXzEWDZjtnZ2UhPT8cXX3wBpVJpEklO3DA0DhFLp4+NBdzd2aGupozJZiTeiyYkJbGko549\ngUmTmDHo00dqdQaIlvl47do1HDt2DMeOHUNmZiZqamoQEhKCQYMGCdI5R3iI2Ga7mBj2N/3++8Co\nUVKrYpwqPoV1p9ahU/tOWBW6yuA5kzIKOh0L1SQlMSeiXM5mBseOAU5OUqsThUZnDC4uLujcuTPG\njx+PgQMHIiAgANYmVqGTzxjqM3ky8OuvwPLlbNuzhYks2bNLsjE2aSzmPj8XMwfMRHfr7lJLMoQI\n+OUXZgy2bQM6d2Yzg4kTzWanmChLiY8++gjHjx9HcXExXFxcEBgYiEGDBmHAgAGwNJEkeW4Y6lNY\nyPwJpmIQ7kFE0JHOZOojAvjv3oRvv2U/7doBCgUzCB4eUqtrMaL7GPLy8nD8+HEcO3YMR44cwbPP\nPouMjAxBBLQFbhhMkxm7Z2DhwIXwtfOVWkrD5OczQ7B1K1BZyYyBQsFSPk0oga+liHLa9T0KCgqQ\nlZWFzMxMZGZm4urVq/raDKZAbGys0Q7dMFVUKuDtt9muR1MkOigant08pZZhSGEh2y/u5wcEB7MK\ntf/5D3szP/4Y8PU1W6OQnp5ucPCSEDQ6Yxg7dixOnDgBGxsbBAUFITAwEEFBQXBzczOZtOjHbcZw\n/TqwYgU7oCUqimUrPvmkdHqyirJw5c4V0y16cvUqSzr69lsgNxcYN47NDB6yhdmcESUqERkZifXr\n18P2wZrfHNGpqWF7GD75hPnCzp8HukvouysqL8L4beNRVlWGZUHLpBPSEBUVLPtwyxYWWXjlFWDp\nUiA0lJ2Ky2kWjRoGGxubJo1CWloahg8fLrgojiFHjgBZWSxa5uoqtRqgu3V3/H3I3xHmHGYazkS1\nGkhNBb75hv07ZAgwfToLNXbqJLU6s6TRpcSSJUuQkZGBkJAQ+Pn5wc7ODjqdDqWlpTh58iQOHjyI\n4cOH4+OPPxZbs57HbSkhBWdKz0DeSQ67p+yklmKITsc2Jn3zDTMAzz3HDr189VXAhEsFGBPRohIV\nFRVITk7G0aNH8fvvvwMAevfujcGDB2P06NFGzWtQKpX48MMPcefOHXz33XcN/g43DMZn5ZGVGGg/\nEMP7mMjM8MIF4OuvmUGwtmbGYPJkk0hJlhrRw5VS8uqrrz4WhqG6mvkQAODvf5dGQ2P1DSSntJSF\nFr/+mv1/yhTgtdeA/v3NNpJgDEQNVwrJzJkzIZfL4eXlZXA9NTUVbm5ucHFxQVxcnJiSJIeI7cdx\ndwdycoBp08TXUFJRgr8d+huCEoJMx9BWVbFZQVgYWybk5LCw4pUrwD/+AXh7c6NgTAQrEtcMMjIy\n6PTp0+Tp6am/ptFoyMnJiZRKJanVavL29qbc3Fz98xMmTGi0PZHlC05eHlFICJGHB9GhQ9JoUGvU\n1De+L0Xti6LLNy5LI+IeWi17I2bMYAdehoURffMNUVWVtLrMBCHHg6jB3ODg4HonW2VlZcHZ2Vl/\nspVCoUBycjLkcjn+9re/4cyZM4iLi0N0dLSYUkXhk0/YeSELFkgXVreytMKFty7UK5smKnl5wFdf\nAYmJzHE4fTormS5lTPYxp9E/xx07dujXLA2tO8eNGyeIgKKiIvTs2VP/2MHBAZmZmejatSu++OKL\nJu+/P+PL3Aq2rF8vbn+Zf2SisLywXkKSJEbh1i2WeLRpE1seTJ0K/PAD8xtwmoVRzpP4k0YNw/ff\nfw+ZTIarV6/i2LFj+Mtf/gKA5S4EBgYKZhja6uwSOhX0UaajVUd0spIwrq/RAAcOsNTN/ftZ0lFM\nDPDSS49kJqKxefCLcPny5YK13einsWnTJgDAiBEjkJubCzs7FscuKSnBjBkzBBNgb2+PwsJC/ePC\nwkI4ODg0+35TP4mKCNi4EQgMBNzcxOu3oarK/eX90V8uwTfyxYvsTUhMZMVRX38d+OILoEsX8bU8\nghhj5tBkVKKwsBDd71vryeVyXLlyRTABfn5+yM/Ph0qlglqtRlJSEiIiIgRrX0oKCoARI4C1a1k+\njhhU1Fbg46Mfo/dnvXHx+kVxOm2IO3fYWmnQIGD48P+WpT5xApg3jxsFU6cp7+Rbb71FI0aMoI0b\nN1JCQgKFhoZSVFRUqzydCoWC7OzsqH379uTg4EAJCQlERLRv3z5ydXUlJycnWrFiRbPba4Z8SdBq\nieLjiZ55hugf/yCqqxOv7/k/zCfFdgXllOaI1+k9dDqi9HSiadOIOncmGjeO6PvvxX0DHmOEHA9N\nJjgREXbt2oWMjAzIZDIMGTIEY8eOFcdqNYEpVokmAkaPZjshN28GXFzE7V9HOvErLRcVsRebkAB0\n6MBq0k+bBvANeKIgapVoc8BUMx9Pn2b5N8YsdFWjqcHG7I2Y5zdPmmxFjQbYtw/48ku2y+vVV5lB\nCAjgiUcSIcq2a2tr64ee9FNeXi6IgEcRXxEKF1lZWKGwvBA1mhp0tOpo/A7voVSyAicbN7L9CXPm\nsHRlE6sHymkbjRqGyspKMXW0GlOPShgLSwtLrHhxhTid1dUBe/YA69YB2dlsn8KPP5plXcRHEWNE\nJZq1lMjJydH7GIKDg+Ht7S2oiNYi5VKiro5tdurfn+3pMRa1mlqsP7UeN6tvImZYjPE6aoiCArZU\n2LiRVUp+4w1WBcmUDrjk6BF1E1V8fDymTp2Ka9euoaysDK+99hr+9a9/CdK5uVJQAAwezAoMjxhh\nvH6KK4rhtsYNqb+lYrTbaON1dD8aDTupJiyM+Qtqa9lRbD//zCwgNwqPB02FLTw9PamyslL/uLKy\n0mATlJQAoJiYGEpLSxOtz127iGxtiVatYtE5Y6LT6ehk0UnjdnKPoiKi5cuJHByIXniBaPNmort3\nxemb0ybS0tIoJiZG3HCll5cXsrKy0LEjc3BVV1cjICAA586dE8FsPRyxlxKrV7ONT999x75MhUar\n04pbKo2IzQTWrmU+g0mTWPKRjwmfH8lpFNGOqANYUdiBAwdi3LhxICLs3r0bM2fOFKRzcyMsjI2d\nbt2Eb3vb+W3I+D0Dn7/8ufCNP0hFBdvNuHYtMw5vvsl8CZ07G79vjlnQLOfjqVOncOTIEb3zccCA\nAWJoaxJTTHBqLVXqKgBAp/ZG3OR06RLw+eesEtJf/gK89RYwbBjPOzBzJEtw0mq1KC0thUaj0ec2\n9OrVSxABbcFUE5yaQqPTgIhgZWll/M50OraT8V//Ak6dAmbPBubPZ6c2cx4pRF1KrF69GsuXL0e3\nbt0Mzqw0BR+DsSBiS+4RI4T/Mj1UcAiL9i/Ce4Pfw2SvycI2fj9VVSxNOT6enUqzcCGwaxePKnCa\nR1Peyb59+9L169cF83YKSTPktxi1mmjuXCJvb6I7d4Rte9eFXdTnsz60I3cH6YwV0vj9d6KlS9kO\nrrFjiX7+2fjhE45JIOR4aHLG0KtXL5M6q/JBhMx8vHOHpfxbWQGHDwNPPdV2fffzissrCHMOwxPt\njPCtffIk8OmnrBDKjBnshJq+fYXvh2NyiJr5+OmnnwIAcnNzcfHiRYSHh6P9n0d8yWQyLF68WFAh\nrUHINVVpKSskFBzMZt9CFBQy+k5HnY6VQ/v0U7aHYeFC5kPg0YXHElF8DBUVFZDJZOjVqxd69uwJ\ntVoNtVptumcPtJE33mCzhf/3/4TxK6zOXI2quiosG2yEsx1ra1k1pH/8A7CxAd59Fxg/nk11OBwB\naNG2a61Wi8rKSnQ2kW8kIS1kVZWwxxzerL6Jju06Crvz8c4dVhItPp4lIS1dyk5ufgQNNafliLpX\nYsqUKSgvL0dVVRW8vLzg7u4u6XmVxkLos0+7duwqnFEoLWVn3vftC/z6Kzu4dd8+noPAMRpNGobz\n58/DxsYGu3fvxsiRI6FSqZCYmCiGNrNAo9Pgw4wPsevCLuEb//13loTk7s7OsDt9mi0heIl1jpFp\n0jBoNBrU1dVh9+7dGDVqFKysrEzKxxAbG9tij2xhIctVaCvKW0q88J8XkHElA349/Nre4D0uXmSV\nlH19WWjkwgWWoNS7t3B9cB4Z0tPThT9Goal4Znx8PPXo0YPCwsJIq9WSUqmkwYMHCxYvbQvNkF+P\nCxeIuncnyspqe/+3qm/RxuyNwuUk5OYSTZ7Mtm++/z7RzZvCtMt5LGjNeGiMFtd8JCJotVq0M4ED\nQlrqbFEqgSFDgA8+YKF+kyE3F/i//2Pl1RctAqKihE+i4DzyiOp8LC0txaxZsxAWFgYAuHDhAjZv\n3ixI52JSVASEhADvvdc6o0BEUN5SCisqLw+YPJmdu+DjA/z2GxPIjQJHYpo0DK+//jpeeuklFBcX\nAwBcXFywatUqowsTkmvXmFGYO5ftMG4NyttKzNozSxiLrFQCkZEsm8rbmxmE6GhuEDgmQ5OG4fr1\n65g0aZJ+A5WVlZVJLCNayoIFbOy1lr5d+uLQ9ENtc7wWF7OdjX5+7Ki2/Hxg2TJeYZljcjQ5wq2t\nrXHjxg394xMnToiS4FRVVYU333wTHTp0wLBhwzClDRVXbW3ZeGwrrTYKd+4AcXGsyvKsWWwJ8eyz\nbRfE4RiLpryTJ0+epEGDBpGNjQ0NGjSInJ2d6cyZM4J5Pxvjq6++oh9++IGIiCZNmtTg7zRDfqu4\nXX2blv64lKrrqtvWUE0N0T//SdStG9HMmURXrggjkMNpACHHw0OXElqtFhkZGcjIyMDRo0exbt06\nnD9/vtXl42fOnAm5XA4vLy+D66mpqXBzc4OLiwvi4uIAAEVFRej5ZzERS2Me6fQAZ8vOwu9LP9yt\nu9v6DVBE7BAWNzcgLY1FGzZs4MVROOZDU5bDz89PMCuUkZFBp0+fNqgyrdFoyMnJiZRKJanVavL2\n9qbc3FxKTEzUzxgUCkWD7TVDfotZf3I9fZ3zdesbOH6cVVn29WUHvHI4IiHkeGjSxzB48GBERUVh\n0qRJ6NSpk353pW8rzmELDg6GSqUyuJaVlQVnZ2c4OjoCABQKBZKTk7FgwQJERUVh7969iIiIaHFf\nrWXO83Nad2NhIXMkpqcDH34ITJ8OWIh8uCyHIxBNGobs7GzIZDL87//+r8H1tLQ0QQTcv2QAAAcH\nB2RmZuLJJ59EQkJCk/ffnwoqSVHYmhq2/Tk+nsVC163jUQaOKBijQMs9mjQMxur4Hm3dd9GWHPHi\nimJsObcFSwKXtK6BvXtZcZT+/VmhVb6XgSMiD34RLl++XLC2mzQMNTU12LFjB1QqFbRarX4p8eAM\norXY29ujsLBQ/7iwsBAODg7Nvr8tpd06WXVC5w6dW1585l61pIsXgTVrgNDQFvfN4QiFMWYOTS6C\nR48ejT179sDKygqdOnWCtbU1OglYvMDPzw/5+flQqVRQq9VISkoSzafQ+YnOmPP8nOYbhbo6YOVK\nwN8feOEFdnglNwqcR5GmvJMeHh6CeToVCgXZ2dlR+/btycHBgRISEoiIaN++feTq6kpOTk60YsWK\nZrfXDPnCkZXFSkeHhhIVFIjXL4fTTIQcD022NGfOHMrJyRGsQyFBCw611el0tOr4KjpXdq5lnVRU\nEC1cSCSXE339NS/FzjE5RD3U1sPDAxYWFtBqtcjPz0efPn3QoUMHAMxhePbsWdFmNY3R3G2mOtLh\nrz/+Ffsv70fqa6lwsGmmD+Onn1gK85AhrBIzT2PmmDCiVIkuLi7GmTNnzPIIuAdR3lIi91ouMiIz\n0LVj16ZvqKpiOQm7dwPr1wMjRxpfJIdjQjRqGBwdHdHbDMJvzYlKOHV1QsrUlOY1ePQoK6s2aBBw\n9izQpYsgOjkcYyHqgTMODg5YvHhxgzOGR/HAGajVwN///t/j4ceOFaZdDkckRFlKaLVaVFRUCNKJ\nMRHkiLq8PGDKFMDBgc0SbG0F08fhGBtRZwwDBgxAdna2oJ0JTZstJBGQkMD8Ce+/D8ybx89p4Jgt\noswYHnlu3WK13vLy2MYnDw+pFXE4JkOjmY8HDx4UU4e4nDgBDBgAdO/OToXmRoHDMaDRGcMzzzwj\npo5W0yIfAxGwahVLa16/Hhgzxuj6OBxjI6qPwRxo0Zrq5k1WmbmkBEhKAvr0Ma44DkdkRD1X4pEg\nM5Md99anD3DkCDcKHE4TPB4zhm3bACsrnpvAeaThUYn7aJaPYeJE0fRwOGLDfQwPIGjmI4dj5nAf\nA4fDMSrcMHA4nHpww8DhcOrBDQOHw6mH2RuG2NhYo5e453BMmfT09DYdo9AQPCrB4Twi8KgEh8Mx\nKtwwcDiTO3NhAAAKCklEQVScenDDwOFw6sENA4fDqYfJGgalUonZs2fj1VdflVoKh/PYYbKGoU+f\nPvjPf/4jtQyj8yiEWvlrePQwumGYOXMm5HI5vLy8DK6npqbCzc0NLi4uiIuLM7YMk+VR+IPkr+HR\nw+iGITIyEqmpqQbXtFotoqKikJqaitzcXGzduhUXLlxAYmIiFi1ahOLiYmPL4nA4D8HohiE4OBhd\nHjjNKSsrC87OznB0dISVlRUUCgWSk5Mxbdo0rFq1Cj169MDNmzcxb948nDlz5rGeUXA4kiDY8bgP\nQalUkqenp/7xd999R7Nnz9Y/TkxMpKioqBa3C4D/8B/+c9+PUEhSwUkm0KEuxNOhORyjIElUwt7e\nHoWFhfrHhYWFcHBo5tH0HA7H6EhiGPz8/JCfnw+VSgW1Wo2kpCRERERIIYXD4TSA0Q3D5MmTERgY\niEuXLqFnz57YuHEj2rVrh88//xyhoaFwd3fHpEmT8NxzzxlbCofDaS6CeStEJiUlhfr160fOzs60\ncuVKqeU8lN69e5OXlxf5+PiQv78/ERHduHGDQkJCyMXFhUaMGEG3bt3S//6KFSvI2dmZ+vXrR/v3\n75dEc2RkJHXr1s3AadwazSdPniRPT09ydnamBQsWSKo/JiaG7O3tycfHh3x8fGjfvn0mq5+I6MqV\nKzRs2DByd3cnDw8Pio+PJyJxPgezNAwajYacnJxIqVSSWq0mb29vys3NlVpWozg6OtKNGzcMrv31\nr3+luLg4IiJauXIlRUdHExHR+fPnydvbm9RqNSmVSnJyciKtViu65oyMDDp9+rTBwGqJZp1OR0RE\n/v7+lJmZSUREI0eOpJSUFMn0x8bG0qefflrvd01RPxFRSUkJZWdnExFRRUUFubq6Um5uriifg8mm\nRD+MxvIgTBl6IIKyZ88ezJgxAwAwY8YM7N69GwCQnJyMyZMnw8rKCo6OjnB2dkZWVpboehvKP2mJ\n5szMTJSUlKCiogIBAQEAgOnTp+vvkUI/0HAkyxT1A0D37t3h4+MDALC2tsZzzz2HoqIiUT4HszQM\nRUVF6Nmzp/6xg4MDioqKJFT0cGQyGUJCQuDn54cvv/wSAFBWVga5XA4AkMvlKCsrAwAUFxcbRGhM\n6bW1VPOD1+3t7SV/LatXr4a3tzdmzZqF27dvAzAP/SqVCtnZ2Rg4cKAon4NZGgah8iDE4ujRo8jO\nzkZKSgrWrFmDw4cPGzwvk8ke+ppM8fU2pdkUmT9/PpRKJc6cOQM7Ozu8++67UktqFpWVlRg/fjzi\n4+Px1FNPGTxnrM/BLA2DueVB2NnZAQBsbW0xduxYZGVlQS6Xo7S0FABQUlKCbt26Aaj/2v744w/Y\n29uLL7oBWqLZwcEB9vb2+OOPPwyuS/launXrph9Is2fP1i/RTFl/XV0dxo8fj2nTpmHMmDEAxPkc\nzNIwmFMexN27d1FRUQEAqKqqwoEDB+Dl5YWIiAhs3rwZALB582b9hx4REYFvv/0WarUaSqUS+fn5\n+rWh1LRUc/fu3WFjY4PMzEwQERITE/X3SEFJSYn+/7t27dLv+DVV/USEWbNmwd3dHe+8847+uiif\ng/C+VHHYt28fubq6kpOTE61YsUJqOY1SUFBA3t7e5O3tTR4eHnqtN27coBdffLHBkNOHH35ITk5O\n1K9fP0pNTZVEt0KhIDs7O7KysiIHBwdKSEholeZ7YTInJyd6++23JdO/YcMGmjZtGnl5eVH//v1p\n9OjRVFpaarL6iYgOHz5MMpmMvL299SHWlJQUUT4Hsy4fz+FwjINZLiU4HI5x4YaBw+HUgxsGDodT\nD24YOBxOPbhhMGMsLS0xYMAAeHp6wsfHB//85z/1Kb+nTp3CwoULG733999/x9atW8WSWo/a2loM\nHTpUkGI7ZWVlePnllwVQxbkHNwxmzJNPPons7Gz8+uuv+PHHH5GSkoLly5cDAJ5//nnEx8c3eq9S\nqcSWLVvEklqPb775BuHh4YJk7cnlcnTp0gWnT58WQBkHgPnmMXCIrK2tDR4XFBTQM888Q0REaWlp\nFB4eTkRE6enp+ji4r68vVVRU0MCBA6lz587k4+NDn332GalUKgoODiZfX1/y9fWlY8eO6dsZOnQo\nTZgwgdzc3Gjq1Kn6/rKysigwMJC8vb0pICCAKisrSaPR0JIlS8jf35/69+9P69ata1B7SEgI5eXl\n1dNKRPTWW2/Rpk2biIhtWX/vvffIx8eHnn/+eTp16hSNGDGCnJyc6IsvvtDf8+2339KSJUva+pZy\n/oQbBjPmQcNARPT000/T1atXDQbbqFGj9AO9qqqKNBoNpaenGwzGu3fvUk1NDRERXbp0ifz8/IiI\nDdrOnTtTUVER6XQ6GjRoEB09epRqa2upb9++dPLkSSJi24I1Gg2tW7eOPvjgAyIiqqmpIT8/P1Iq\nlQYaNRoNde/eXf/4QcMQFRVFmzdvJiK2Zf2eAVi0aBF5eXlRZWUlXbt2jeRyuf6egoICCggIaMW7\nyGkISYrBcsQlKCgIixYtwtSpUzFu3DjY29vXW9ur1WpERUUhJycHlpaWyM/P1z8XEBCAHj16AAB8\nfHygVCrx1FNPwc7ODs8//zwAti0YAA4cOIBz585h+/btAIDy8nJcvnwZjo6O+vauX79ebzPQw7iX\n7u7l5YWqqip06tQJnTp1QocOHVBeXg4bGxvY2dlBpVK1+L3hNAw3DI8QBQUFsLS0hK2trcH16Oho\nhIeHY+/evQgKCsL+/fvr3btq1SrY2dkhMTERWq0WTzzxhP65Dh066P9vaWkJjUbzUN/A559/jhEj\nRjxU6/2GqV27dtDpdPrH1dXVBr97r38LCwu0b99ef93CwgIajUbfnrnt9jRluPPxEeHatWuYN28e\n3n777XrP/fbbb/Dw8MDSpUvh7++PvLw82NjY6Dd3AeybvXv37gCAr776ClqtttG+ZDIZ+vXrh5KS\nEpw8eRIAUFFRAa1Wi9DQUKxdu1Y/YC9duoS7d+8a3P/ss8+isrJS/7h3797Izc2FWq3G7du38dNP\nPzXY74OznPspKSlB7969G32e0zL4jMGMqa6uxoABA1BXV4d27dph+vTpWLx4MQDDffrx8fFIS0uD\nhYUFPD09MXLkSMhkMlhaWsLHxweRkZF48803MX78eHz11VcICwvTLw3utfUgVlZWSEpKwttvv43q\n6mo8+eSTOHjwIGbPng2VSgVfX18QEbp164Zdu3YZ3GtpaQlPT0/k5eWhX79+6NmzJyZOnAhPT0/0\n6dMHvr6+Db7eB2sP3P//rKwsDBkypPVvJscAvomKIwmbNm1CWVkZoqOjBWlv6tSpWLJkCQYMGCBI\ne487fCnBkYQpU6Zg7969giQ4Xb16Fbdv3+ZGQUD4jIHD4dSDzxg4HE49uGHgcDj14IaBw+HUgxsG\nDodTD24YOBxOPbhh4HA49fj/5MsP6zoY5EUAAAAASUVORK5CYII=\n",
       "text": [
        "<matplotlib.figure.Figure at 0x102b88350>"
       ]
      }
     ],
     "prompt_number": 5
    },
    {
     "cell_type": "heading",
     "level": 1,
     "metadata": {},
     "source": [
      "Visualize Simulation Rig"
     ]
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "2D visualization of the neuron geometry can be done in matplotlib using the cell's *plot* method. The *plot* method generates the cell's trajectory with a color overlay determined by an arbitrary input function that is run for each NEURON section. In this example, the input function returns the section's intracellular voltage."
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "from matplotlib import pyplot\n",
      "plot_func = lambda sec:sec.v\n",
      "h.run()\n",
      "cell.plot(plot_func)\n",
      "pyplot.show()"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        "----------------------------------------------------------------------------------------------------\n",
        "DATA RANGE: "
       ]
      },
      {
       "output_type": "stream",
       "stream": "stdout",
       "text": [
        " -74.3259201863 -70.0808863932\n"
       ]
      },
      {
       "metadata": {},
       "output_type": "display_data",
       "png": "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\n",
       "text": [
        "<matplotlib.figure.Figure at 0x108c25b10>"
       ]
      }
     ],
     "prompt_number": 6
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "3D visualization of the neuron geometry requires Mayavi, a 3d visualization library based on VTK. It is done with a *display* method. Again, the color is determined by an arbitary function run on each NEURON section (here I use the same function as above). The optical fiber can also be represented using a *display* method."
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "cell.display(plot_func)\n",
      "optrode.display(bounds=[[-1000,1000],[-1000,1000],[0,2000]])"
     ],
     "language": "python",
     "metadata": {},
     "outputs": [
      {
       "ename": "RuntimeError",
       "evalue": "module compiled against API version 9 but this version of numpy is 6",
       "output_type": "pyerr",
       "traceback": [
        "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[0;31mRuntimeError\u001b[0m                              Traceback (most recent call last)",
        "\u001b[0;31mRuntimeError\u001b[0m: module compiled against API version 9 but this version of numpy is 6"
       ]
      },
      {
       "ename": "ImportError",
       "evalue": "numpy.core.multiarray failed to import",
       "output_type": "pyerr",
       "traceback": [
        "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m\n\u001b[0;31mImportError\u001b[0m                               Traceback (most recent call last)",
        "\u001b[0;32m<ipython-input-7-b6e8e5e563ad>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mcell\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdisplay\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mplot_func\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m      2\u001b[0m \u001b[0moptrode\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdisplay\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mbounds\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m1000\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m1000\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m-\u001b[0m\u001b[0;36m1000\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m1000\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;36m2000\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
        "\u001b[0;32m/Users/morse/nrnmodels/20150518/153196/repo/FoutzEtAl2012/classes.py\u001b[0m in \u001b[0;36mdisplay\u001b[0;34m(self, func, segfunc, scaling, replace, clim, colormap)\u001b[0m\n\u001b[1;32m    178\u001b[0m             \u001b[0;32mfrom\u001b[0m \u001b[0menthought\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmayavi\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmlab\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mpipeline\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    179\u001b[0m         \u001b[0;32mexcept\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 180\u001b[0;31m             \u001b[0;32mfrom\u001b[0m \u001b[0mmayavi\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mmlab\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    181\u001b[0m             \u001b[0;32mfrom\u001b[0m \u001b[0mmayavi\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmlab\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mpipeline\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    182\u001b[0m         \u001b[0;32mif\u001b[0m \u001b[0mreplace\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
        "\u001b[0;32m/Users/morse/anaconda/lib/python2.7/site-packages/mayavi/mlab.py\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[1;32m     25\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     26\u001b[0m \u001b[0;31m# Mayavi imports\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 27\u001b[0;31m \u001b[0;32mfrom\u001b[0m \u001b[0mmayavi\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtools\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcamera\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mview\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mroll\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0myaw\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mpitch\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmove\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m     28\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0mmayavi\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtools\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfigure\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mfigure\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mclf\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mgcf\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0msavefig\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;31m \u001b[0m\u001b[0;31m\\\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     29\u001b[0m     \u001b[0mdraw\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0msync_camera\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mclose\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mscreenshot\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
        "\u001b[0;32m/Users/morse/anaconda/lib/python2.7/site-packages/mayavi/tools/camera.py\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[1;32m     23\u001b[0m \u001b[0;31m# We can't use gcf, as it creates a circular import in camera management\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     24\u001b[0m \u001b[0;31m# routines.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 25\u001b[0;31m \u001b[0;32mfrom\u001b[0m \u001b[0mengine_manager\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mget_engine\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m     26\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     27\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
        "\u001b[0;32m/Users/morse/anaconda/lib/python2.7/site-packages/mayavi/tools/engine_manager.py\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[1;32m     12\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0mmayavi\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpreferences\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mapi\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mpreference_manager\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     13\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0mmayavi\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcore\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mregistry\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mregistry\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 14\u001b[0;31m \u001b[0;32mfrom\u001b[0m \u001b[0mmayavi\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcore\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mengine\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mEngine\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m     15\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0mmayavi\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcore\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0moff_screen_engine\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mOffScreenEngine\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     16\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0mmayavi\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcore\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mnull_engine\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mNullEngine\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
        "\u001b[0;32m/Users/morse/anaconda/lib/python2.7/site-packages/mayavi/core/engine.py\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[1;32m     25\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     26\u001b[0m \u001b[0;31m# Local imports.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 27\u001b[0;31m \u001b[0;32mfrom\u001b[0m \u001b[0mmayavi\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcore\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mbase\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mBase\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m     28\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0mmayavi\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcore\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mscene\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mScene\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     29\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0mmayavi\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcore\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcommon\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0merror\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mprocess_ui_events\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
        "\u001b[0;32m/Users/morse/anaconda/lib/python2.7/site-packages/mayavi/core/base.py\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[1;32m     17\u001b[0m     HasTraits, WeakRef, on_trait_change)\n\u001b[1;32m     18\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0mtraitsui\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mapi\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mTreeNodeObject\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 19\u001b[0;31m \u001b[0;32mfrom\u001b[0m \u001b[0mtvtk\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpyface\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtvtk_scene\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mTVTKScene\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m     20\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0mapptools\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpersistence\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mstate_pickler\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     21\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0mpyface\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mresource\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mapi\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mresource_path\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
        "\u001b[0;32m/Users/morse/anaconda/lib/python2.7/site-packages/tvtk/pyface/tvtk_scene.py\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[1;32m     22\u001b[0m      \u001b[0mProperty\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mInstance\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mEvent\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mRange\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mBool\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mTrait\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mStr\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     23\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 24\u001b[0;31m \u001b[0;32mfrom\u001b[0m \u001b[0mtvtk\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpyface\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mlight_manager\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m     25\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     26\u001b[0m \u001b[0mVTK_VER\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mtvtk\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mVersion\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mvtk_version\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
        "\u001b[0;32m/Users/morse/anaconda/lib/python2.7/site-packages/tvtk/pyface/light_manager.py\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[1;32m    128\u001b[0m \u001b[0;31m# `CameraLight` class.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    129\u001b[0m \u001b[0;31m######################################################################\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 130\u001b[0;31m \u001b[0;32mclass\u001b[0m \u001b[0mCameraLight\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mHasTraits\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    131\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    132\u001b[0m     \u001b[0;34m\"\"\"This class manages a tvtk.Light object and a LightGlyph object.\"\"\"\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
        "\u001b[0;32m/Users/morse/anaconda/lib/python2.7/site-packages/tvtk/pyface/light_manager.py\u001b[0m in \u001b[0;36mCameraLight\u001b[0;34m()\u001b[0m\n\u001b[1;32m    144\u001b[0m     activate = Trait(False, false,\n\u001b[1;32m    145\u001b[0m                      desc=\"specifies if the light is enabled or not\")\n\u001b[0;32m--> 146\u001b[0;31m     \u001b[0msource\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mInstance\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtvtk\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mLight\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    147\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    148\u001b[0m     \u001b[0;31m# FIXME: Traits Delegation does not work correctly and changes to\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
        "\u001b[0;32m/Users/morse/anaconda/lib/python2.7/site-packages/tvtk/tvtk_classes.zip/tvtk_classes/tvtk_helper.py\u001b[0m in \u001b[0;36m<lambda>\u001b[0;34m(self)\u001b[0m\n\u001b[1;32m    218\u001b[0m     \u001b[0mLabelHierarchyIterator\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mproperty\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;32mlambda\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mget_class\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'LabelHierarchyIterator'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    219\u001b[0m     \u001b[0mLabelRenderStrategy\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mproperty\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;32mlambda\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mget_class\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'LabelRenderStrategy'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 220\u001b[0;31m     \u001b[0mLight\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mproperty\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;32mlambda\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mget_class\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'Light'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    221\u001b[0m     \u001b[0mLightKit\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mproperty\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;32mlambda\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mget_class\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'LightKit'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    222\u001b[0m     \u001b[0mLineIntegralConvolution2D\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mproperty\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;32mlambda\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mget_class\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'LineIntegralConvolution2D'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
        "\u001b[0;32m/Users/morse/anaconda/lib/python2.7/site-packages/tvtk/tvtk_classes.zip/tvtk_classes/tvtk_helper.py\u001b[0m in \u001b[0;36mget_class\u001b[0;34m(name)\u001b[0m\n\u001b[1;32m     34\u001b[0m     \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     35\u001b[0m         \u001b[0mfname\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mcamel2enthought\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mname\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 36\u001b[0;31m         \u001b[0mmod\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mget_module\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mfname\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m     37\u001b[0m         \u001b[0mklass\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mgetattr\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mmod\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mname\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     38\u001b[0m         \u001b[0m_cache\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mname\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mklass\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
        "\u001b[0;32m/Users/morse/anaconda/lib/python2.7/site-packages/tvtk/tvtk_classes.zip/tvtk_classes/tvtk_helper.py\u001b[0m in \u001b[0;36mget_module\u001b[0;34m(fname)\u001b[0m\n\u001b[1;32m     26\u001b[0m         \u001b[0;31m# inside the tvtk_classes ZIP file and are local to the\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     27\u001b[0m         \u001b[0;31m# current module: tvtk_helper.py\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 28\u001b[0;31m         \u001b[0mmod\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0m__import__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'tvtk.tvtk_classes.%s'\u001b[0m\u001b[0;34m%\u001b[0m\u001b[0mfname\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mglobals\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlocals\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0mfname\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m     29\u001b[0m     \u001b[0;32mreturn\u001b[0m \u001b[0mmod\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     30\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
        "\u001b[0;32m/Users/morse/anaconda/lib/python2.7/site-packages/tvtk/tvtk_classes.zip/tvtk_classes/light.py\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n",
        "\u001b[0;32m/Users/morse/anaconda/lib/python2.7/site-packages/tvtk/array_handler.py\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[1;32m     27\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     28\u001b[0m \u001b[0;31m# Enthought library imports.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 29\u001b[0;31m \u001b[0;32mfrom\u001b[0m \u001b[0mtvtk\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0marray_ext\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mset_id_type_array\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m     30\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     31\u001b[0m \u001b[0;31m# Useful constants for VTK arrays.\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
        "\u001b[0;31mImportError\u001b[0m: numpy.core.multiarray failed to import"
       ]
      }
     ],
     "prompt_number": 7
    },
    {
     "cell_type": "heading",
     "level": 1,
     "metadata": {},
     "source": [
      "Move Neuron"
     ]
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "To move the neuron in space, just use the *move* method. Here we move by 50 um along each axis. Here we stop the simulation during the light pulse at time 4 ms so that we can plot the irradiance of the section."
     ]
    },
    {
     "cell_type": "code",
     "collapsed": false,
     "input": [
      "from mayavi import mlab\n",
      "mlab.figure()\n",
      "cell.move([50,50,50])\n",
      "h.tstop = 4\n",
      "h.run()\n",
      "plot_func = lambda sec:sec.irradiance_chanrhod\n",
      "cell.display(plot_func)\n",
      "optrode.display(bounds=[[-1000,1000],[-1000,1000],[0,2000]])"
     ],
     "language": "python",
     "metadata": {},
     "outputs": []
    },
    {
     "cell_type": "heading",
     "level": 1,
     "metadata": {},
     "source": [
      "Further Questions"
     ]
    },
    {
     "cell_type": "markdown",
     "metadata": {},
     "source": [
      "Please see the source code and manuscript for more information regarding the model and simulation design. Feel free to contact the authors if additional code resources are needed.\n",
      "\n",
      "-- Tom Foutz (tfoutz@uw.edu) -- March 15, 2014 --"
     ]
    }
   ],
   "metadata": {}
  }
 ]
}

Loading data, please wait...