{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Chapter 2: Single cell simulation with external feedfoward input (with BioNet)\n",
    "\n",
    "In the previous tutorial we built a single cell and stimulated it with a current injection. In this example we will keep our single-cell network, but instead of stimulation by a step current, we'll set-up an external network that synapses onto our cell.\n",
    "\n",
    "**Note** - scripts and files for running this tutorial can be found in the directory [sources/chapter02/](sources/chapter02)\n",
    "\n",
    "**Requirements:**\n",
    "* Python 2.7 or 3.6+\n",
    "* bmtk\n",
    "* NEURON 7.4+"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Step 1: Building the network.\n",
    "\n",
    "Similar to the previous tutorial, we want to build and save a network consisting of a single biophysically detailed cell. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "from bmtk.builder.networks import NetworkBuilder\n",
    "\n",
    "\n",
    "cortex = NetworkBuilder('mcortex')\n",
    "cortex.add_nodes(cell_name='Scnn1a_473845048',\n",
    "                 potental='exc',\n",
    "                 model_type='biophysical',\n",
    "                 model_template='ctdb:Biophys1.hoc',\n",
    "                 model_processing='aibs_perisomatic',\n",
    "                 dynamics_params='472363762_fit.json',\n",
    "                 morphology='Scnn1a_473845048_m.swc')\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "cortex.build()\n",
    "cortex.save_nodes(output_dir='sim_ch02/network')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "But we will also want a collection of external spike-generating cells that will synapse onto our cell. To do this we create a second network which can represent thalamic input. We will call our network \"mthalamus\", and it will consist of 10 cells. These cells are not biophysical but instead \"virtual\" cells. Virtual cells don't have a morphology or the normal properties of a neuron, but rather act as spike generators."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "thalamus = NetworkBuilder('mthalamus')\n",
    "thalamus.add_nodes(N=10,\n",
    "                   pop_name='tON',\n",
    "                   potential='exc',\n",
    "                   model_type='virtual')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Now that we built our nodes, we want to create a connection between our 10 thalamic cells onto our cortex cell. To do so we use the add_edges function like so:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<bmtk.builder.connection_map.ConnectionMap at 0x7f7188ed8910>"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "thalamus.add_edges(source={'pop_name': 'tON'}, target=cortex.nodes(),\n",
    "                   connection_rule=5,\n",
    "                   syn_weight=0.001,\n",
    "                   delay=2.0,\n",
    "                   weight_function=None,\n",
    "                   target_sections=['basal', 'apical'],\n",
    "                   distance_range=[0.0, 150.0],\n",
    "                   dynamics_params='AMPA_ExcToExc.json',\n",
    "                   model_template='exp2syn')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Let us break down how this method call works:\n",
    "```python\n",
    "thalamus.add_edges(source={'pop_name': 'tON'}, target=cortex.nodes(),\n",
    "```\n",
    "* Here we specify which set of nodes to use as sources and targets. Our source/pre-synaptic cells are all thamalus cells with the property \"pop_name=tON\", which in this case is every thalmus cell (We could also use source=thalamus.nodes(), or source={'level_of_detail': 'filter'}). The target/post-synaptic is all cell(s) of the \"cortex\" network.\n",
    "\n",
    "```python\n",
    "connection_rule=5,\n",
    "```\n",
    "* The connection_rule parameter determines how many synapses exists between every source/target pair. In this very trivial case we are indicating that between every thamalic --> cortical cell connection, there are 5 synapatic connections. In future tutorials we will show how we can create more complex customized rules.\n",
    "\n",
    "```python\n",
    "syn_weight=0.001,\n",
    "delay=2.0,\n",
    "weight_function=None,\n",
    "```\n",
    "* Here we are specifying the connection weight. For every connection in this edge-type, there is a connection strength of 5e-05 (units) and a connection delay of 2 ms. The weight function is used to adjust the weights before runtime. Later we will show how to create customized weight functions.\n",
    "\n",
    "```python\n",
    "   target_sections=['basal', 'apical'],\n",
    "   distance_range=[0.0, 150.0],\n",
    "```\n",
    "* This is used by BioNet to determine where on the post-synaptic cell to place the synapse. By default placement is random within the given section and range.\n",
    "```python\n",
    "dynamics_params='AMPA_ExcToExc.json',  \n",
    "model_template='exp2syn')\n",
    "```\n",
    "* The params_file give the parameters of the synpase, including the time constant and potential. Here we are using an AMPA type synaptic model with an Excitatory connection. The set_params_function is used by BioNet to convert the model into a valid NEURON synaptic object.\n",
    "\n",
    "Finally we are ready to build the model and save the thalamic nodes and edges."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "thalamus.build()\n",
    "thalamus.save_nodes(output_dir='sim_ch02/network')\n",
    "thalamus.save_edges(output_dir='sim_ch02/network')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The network/ directory will contain multiple nodes and edges files. It should have nodes (and node-types) files for both the thalamus and cortex network. And edges (and edge-types) files for the thalamus --> cortex connections. Nodes and edges for different networks and their connections are spread out across different files which allows us in the future to rebuild, edit or replace part of setup in a piecemeal and efficent manner."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Spike Trains\n",
    "\n",
    "We need to give our 10 thalamic cells spike trains. There are multiple ways to do this, but an easy way to use a sonata hdf5 file. The following function will create a file to provide the spikes for our 10 cells.\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [],
   "source": [
    "from bmtk.utils.reports.spike_trains import PoissonSpikeGenerator\n",
    "\n",
    "psg = PoissonSpikeGenerator(population='mthalamus')\n",
    "psg.add(node_ids=range(10),  # Have 10 nodes to match mthalamus\n",
    "        firing_rate=10.0,    # 10 Hz, we can also pass in a nonhomoegenous function/array\n",
    "        times=(0.0, 3.0))    # Firing starts at 0 s up to 3 s\n",
    "psg.to_sonata('sim_ch02/inputs/mthalamus_spikes.h5')\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The spikes files are save as a [Sonata formated spikes train](https://github.com/AllenInstitute/sonata/blob/master/docs/SONATA_DEVELOPER_GUIDE.md#spike-file). BMTK also allow us to use csv files and NWB files to set the spike train - we just have to tell the configuration file the appropiate format to read."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>node_id</th>\n",
       "      <th>population</th>\n",
       "      <th>timestamps</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>mthalamus</td>\n",
       "      <td>0.035761</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0</td>\n",
       "      <td>mthalamus</td>\n",
       "      <td>0.040679</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0</td>\n",
       "      <td>mthalamus</td>\n",
       "      <td>0.096620</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0</td>\n",
       "      <td>mthalamus</td>\n",
       "      <td>0.244019</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0</td>\n",
       "      <td>mthalamus</td>\n",
       "      <td>0.331973</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>0</td>\n",
       "      <td>mthalamus</td>\n",
       "      <td>0.386464</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>0</td>\n",
       "      <td>mthalamus</td>\n",
       "      <td>0.474339</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>0</td>\n",
       "      <td>mthalamus</td>\n",
       "      <td>0.532093</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>0</td>\n",
       "      <td>mthalamus</td>\n",
       "      <td>0.641981</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>0</td>\n",
       "      <td>mthalamus</td>\n",
       "      <td>0.661213</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>0</td>\n",
       "      <td>mthalamus</td>\n",
       "      <td>0.703497</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>0</td>\n",
       "      <td>mthalamus</td>\n",
       "      <td>0.773827</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>0</td>\n",
       "      <td>mthalamus</td>\n",
       "      <td>0.924455</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>0</td>\n",
       "      <td>mthalamus</td>\n",
       "      <td>1.018524</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>0</td>\n",
       "      <td>mthalamus</td>\n",
       "      <td>1.100684</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15</th>\n",
       "      <td>0</td>\n",
       "      <td>mthalamus</td>\n",
       "      <td>1.202221</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16</th>\n",
       "      <td>0</td>\n",
       "      <td>mthalamus</td>\n",
       "      <td>1.236319</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>17</th>\n",
       "      <td>0</td>\n",
       "      <td>mthalamus</td>\n",
       "      <td>1.362414</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18</th>\n",
       "      <td>0</td>\n",
       "      <td>mthalamus</td>\n",
       "      <td>1.468461</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19</th>\n",
       "      <td>0</td>\n",
       "      <td>mthalamus</td>\n",
       "      <td>1.518727</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>20</th>\n",
       "      <td>0</td>\n",
       "      <td>mthalamus</td>\n",
       "      <td>1.832532</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>21</th>\n",
       "      <td>0</td>\n",
       "      <td>mthalamus</td>\n",
       "      <td>1.924180</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>22</th>\n",
       "      <td>0</td>\n",
       "      <td>mthalamus</td>\n",
       "      <td>1.963368</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>23</th>\n",
       "      <td>0</td>\n",
       "      <td>mthalamus</td>\n",
       "      <td>2.007959</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>24</th>\n",
       "      <td>0</td>\n",
       "      <td>mthalamus</td>\n",
       "      <td>2.041782</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25</th>\n",
       "      <td>0</td>\n",
       "      <td>mthalamus</td>\n",
       "      <td>2.049386</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>26</th>\n",
       "      <td>0</td>\n",
       "      <td>mthalamus</td>\n",
       "      <td>2.051970</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>27</th>\n",
       "      <td>0</td>\n",
       "      <td>mthalamus</td>\n",
       "      <td>2.064528</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>28</th>\n",
       "      <td>0</td>\n",
       "      <td>mthalamus</td>\n",
       "      <td>2.546912</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>29</th>\n",
       "      <td>0</td>\n",
       "      <td>mthalamus</td>\n",
       "      <td>2.590909</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>280</th>\n",
       "      <td>9</td>\n",
       "      <td>mthalamus</td>\n",
       "      <td>0.196973</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>281</th>\n",
       "      <td>9</td>\n",
       "      <td>mthalamus</td>\n",
       "      <td>0.201703</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>282</th>\n",
       "      <td>9</td>\n",
       "      <td>mthalamus</td>\n",
       "      <td>0.226206</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>283</th>\n",
       "      <td>9</td>\n",
       "      <td>mthalamus</td>\n",
       "      <td>0.264307</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>284</th>\n",
       "      <td>9</td>\n",
       "      <td>mthalamus</td>\n",
       "      <td>0.267023</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>285</th>\n",
       "      <td>9</td>\n",
       "      <td>mthalamus</td>\n",
       "      <td>0.662817</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>286</th>\n",
       "      <td>9</td>\n",
       "      <td>mthalamus</td>\n",
       "      <td>0.696093</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>287</th>\n",
       "      <td>9</td>\n",
       "      <td>mthalamus</td>\n",
       "      <td>0.727064</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>288</th>\n",
       "      <td>9</td>\n",
       "      <td>mthalamus</td>\n",
       "      <td>0.856552</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>289</th>\n",
       "      <td>9</td>\n",
       "      <td>mthalamus</td>\n",
       "      <td>0.869575</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>290</th>\n",
       "      <td>9</td>\n",
       "      <td>mthalamus</td>\n",
       "      <td>0.929920</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>291</th>\n",
       "      <td>9</td>\n",
       "      <td>mthalamus</td>\n",
       "      <td>0.985744</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>292</th>\n",
       "      <td>9</td>\n",
       "      <td>mthalamus</td>\n",
       "      <td>1.152974</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>293</th>\n",
       "      <td>9</td>\n",
       "      <td>mthalamus</td>\n",
       "      <td>1.266891</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>294</th>\n",
       "      <td>9</td>\n",
       "      <td>mthalamus</td>\n",
       "      <td>1.390516</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>295</th>\n",
       "      <td>9</td>\n",
       "      <td>mthalamus</td>\n",
       "      <td>1.416569</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>296</th>\n",
       "      <td>9</td>\n",
       "      <td>mthalamus</td>\n",
       "      <td>1.427497</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>297</th>\n",
       "      <td>9</td>\n",
       "      <td>mthalamus</td>\n",
       "      <td>1.563913</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>298</th>\n",
       "      <td>9</td>\n",
       "      <td>mthalamus</td>\n",
       "      <td>1.711437</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>299</th>\n",
       "      <td>9</td>\n",
       "      <td>mthalamus</td>\n",
       "      <td>1.730856</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>300</th>\n",
       "      <td>9</td>\n",
       "      <td>mthalamus</td>\n",
       "      <td>1.796984</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>301</th>\n",
       "      <td>9</td>\n",
       "      <td>mthalamus</td>\n",
       "      <td>1.821040</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>302</th>\n",
       "      <td>9</td>\n",
       "      <td>mthalamus</td>\n",
       "      <td>1.830675</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>303</th>\n",
       "      <td>9</td>\n",
       "      <td>mthalamus</td>\n",
       "      <td>1.987896</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>304</th>\n",
       "      <td>9</td>\n",
       "      <td>mthalamus</td>\n",
       "      <td>2.151594</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>305</th>\n",
       "      <td>9</td>\n",
       "      <td>mthalamus</td>\n",
       "      <td>2.313487</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>306</th>\n",
       "      <td>9</td>\n",
       "      <td>mthalamus</td>\n",
       "      <td>2.366667</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>307</th>\n",
       "      <td>9</td>\n",
       "      <td>mthalamus</td>\n",
       "      <td>2.792077</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>308</th>\n",
       "      <td>9</td>\n",
       "      <td>mthalamus</td>\n",
       "      <td>2.825268</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>309</th>\n",
       "      <td>9</td>\n",
       "      <td>mthalamus</td>\n",
       "      <td>2.873350</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>310 rows × 3 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "     node_id population  timestamps\n",
       "0          0  mthalamus    0.035761\n",
       "1          0  mthalamus    0.040679\n",
       "2          0  mthalamus    0.096620\n",
       "3          0  mthalamus    0.244019\n",
       "4          0  mthalamus    0.331973\n",
       "5          0  mthalamus    0.386464\n",
       "6          0  mthalamus    0.474339\n",
       "7          0  mthalamus    0.532093\n",
       "8          0  mthalamus    0.641981\n",
       "9          0  mthalamus    0.661213\n",
       "10         0  mthalamus    0.703497\n",
       "11         0  mthalamus    0.773827\n",
       "12         0  mthalamus    0.924455\n",
       "13         0  mthalamus    1.018524\n",
       "14         0  mthalamus    1.100684\n",
       "15         0  mthalamus    1.202221\n",
       "16         0  mthalamus    1.236319\n",
       "17         0  mthalamus    1.362414\n",
       "18         0  mthalamus    1.468461\n",
       "19         0  mthalamus    1.518727\n",
       "20         0  mthalamus    1.832532\n",
       "21         0  mthalamus    1.924180\n",
       "22         0  mthalamus    1.963368\n",
       "23         0  mthalamus    2.007959\n",
       "24         0  mthalamus    2.041782\n",
       "25         0  mthalamus    2.049386\n",
       "26         0  mthalamus    2.051970\n",
       "27         0  mthalamus    2.064528\n",
       "28         0  mthalamus    2.546912\n",
       "29         0  mthalamus    2.590909\n",
       "..       ...        ...         ...\n",
       "280        9  mthalamus    0.196973\n",
       "281        9  mthalamus    0.201703\n",
       "282        9  mthalamus    0.226206\n",
       "283        9  mthalamus    0.264307\n",
       "284        9  mthalamus    0.267023\n",
       "285        9  mthalamus    0.662817\n",
       "286        9  mthalamus    0.696093\n",
       "287        9  mthalamus    0.727064\n",
       "288        9  mthalamus    0.856552\n",
       "289        9  mthalamus    0.869575\n",
       "290        9  mthalamus    0.929920\n",
       "291        9  mthalamus    0.985744\n",
       "292        9  mthalamus    1.152974\n",
       "293        9  mthalamus    1.266891\n",
       "294        9  mthalamus    1.390516\n",
       "295        9  mthalamus    1.416569\n",
       "296        9  mthalamus    1.427497\n",
       "297        9  mthalamus    1.563913\n",
       "298        9  mthalamus    1.711437\n",
       "299        9  mthalamus    1.730856\n",
       "300        9  mthalamus    1.796984\n",
       "301        9  mthalamus    1.821040\n",
       "302        9  mthalamus    1.830675\n",
       "303        9  mthalamus    1.987896\n",
       "304        9  mthalamus    2.151594\n",
       "305        9  mthalamus    2.313487\n",
       "306        9  mthalamus    2.366667\n",
       "307        9  mthalamus    2.792077\n",
       "308        9  mthalamus    2.825268\n",
       "309        9  mthalamus    2.873350\n",
       "\n",
       "[310 rows x 3 columns]"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "psg.to_dataframe()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Step 2: Setting up BioNet environment.\n",
    "#### file structure.\n",
    "\n",
    "Before running a simulation, we will need to create the runtime environment, including parameter files, run-script and configuration files. If using the tutorial these files will already be in place, however you should run the following anyway in a command-line:\n",
    "\n",
    "```bash\n",
    "$ python -m bmtk.utils.sim_setup  \\\n",
    "   --report-vars v,cai            \\                             \n",
    "   --network sim_ch02/network     \\                              \n",
    "   --spikes-inputs mthalamus:sim_ch02/inputs/mthalamus_spikes.h5 \\\n",
    "   --dt 0.1             \\\n",
    "   --tstop 3000.0       \\  \n",
    "   --include-examples   \\\n",
    "   --compile-mechanisms \\ \n",
    "   bionet sim_ch02\n",
    "```\n",
    "\n",
    "Or call the function directly in python\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "from bmtk.utils.sim_setup import build_env_bionet\n",
    "\n",
    "build_env_bionet(base_dir='sim_ch02',      \n",
    "                 network_dir='sim_ch02/network',\n",
    "                 tstop=3000.0, dt=0.1,\n",
    "                 report_vars=['v', 'cai'],     # Record membrane potential and calcium (default soma)\n",
    "                 spikes_inputs=[('mthalamus',   # Name of population which spikes will be generated for\n",
    "                                'sim_ch02/inputs/mthalamus_spikes.h5')],\n",
    "                 include_examples=True,    # Copies components files\n",
    "                 compile_mechanisms=True   # Will try to compile NEURON mechanisms\n",
    "                )"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The last thing that we need to do is to update the configuration file to read \"thalamus_spikes.csv\". To do so we open simulation_config.json in a text editor and add the following to the **input** section.\n",
    "\n",
    "```json\n",
    "\"inputs\": {\n",
    "    \"mthalamus_spikes\": {\n",
    "      \"input_type\": \"spikes\",\n",
    "      \"module\": \"sonata\",\n",
    "      \"input_file\": \"${BASE_DIR}/input/mthalamus_spikes.csv\",\n",
    "      \"node_set\": \"mthalamus\"\n",
    "    }\n",
    "}\n",
    "```"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 3. Running the simulation\n",
    "\n",
    "Once our config file is setup we can run a simulation either through the command line:\n",
    "```bash\n",
    "$ python run_bionet.py simulation_config.json\n",
    "```\n",
    "\n",
    "or through the script"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "2019-07-21 13:13:44,864 [INFO] Created log file\n",
      "Mechanisms already loaded from path: /home/kael/Workspace/bmtk/docs/tutorial/sim_ch02/components/mechanisms.  Aborting.\n",
      "2019-07-21 13:13:44,899 [INFO] Building cells.\n",
      "2019-07-21 13:13:45,075 [INFO] Building recurrent connections\n",
      "2019-07-21 13:13:45,076 [INFO] Building virtual cell stimulations for mthalamus_spikes\n",
      "2019-07-21 13:13:45,151 [INFO] Running simulation for 3000.000 ms with the time step 0.100 ms\n",
      "2019-07-21 13:13:45,152 [INFO] Starting timestep: 0 at t_sim: 0.000 ms\n",
      "2019-07-21 13:13:45,154 [INFO] Block save every 5000 steps\n",
      "2019-07-21 13:13:45,342 [INFO]     step:5000 t_sim:500.00 ms\n",
      "2019-07-21 13:13:45,525 [INFO]     step:10000 t_sim:1000.00 ms\n",
      "2019-07-21 13:13:45,707 [INFO]     step:15000 t_sim:1500.00 ms\n",
      "2019-07-21 13:13:45,886 [INFO]     step:20000 t_sim:2000.00 ms\n",
      "2019-07-21 13:13:46,068 [INFO]     step:25000 t_sim:2500.00 ms\n",
      "2019-07-21 13:13:46,253 [INFO]     step:30000 t_sim:3000.00 ms\n",
      "2019-07-21 13:13:46,272 [INFO] Simulation completed in 1.121 seconds \n"
     ]
    }
   ],
   "source": [
    "from bmtk.simulator import bionet\n",
    "\n",
    "\n",
    "conf = bionet.Config.from_json('sim_ch02/simulation_config.json')\n",
    "conf.build_env()\n",
    "net = bionet.BioNetwork.from_config(conf)\n",
    "sim = bionet.BioSimulator.from_config(conf, network=net)\n",
    "sim.run()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 4. Analyzing the run"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>node_ids</th>\n",
       "      <th>population</th>\n",
       "      <th>timestamps</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>mcortex</td>\n",
       "      <td>45.8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0</td>\n",
       "      <td>mcortex</td>\n",
       "      <td>86.7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0</td>\n",
       "      <td>mcortex</td>\n",
       "      <td>121.9</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0</td>\n",
       "      <td>mcortex</td>\n",
       "      <td>205.9</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0</td>\n",
       "      <td>mcortex</td>\n",
       "      <td>252.3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>0</td>\n",
       "      <td>mcortex</td>\n",
       "      <td>287.3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>0</td>\n",
       "      <td>mcortex</td>\n",
       "      <td>312.7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>0</td>\n",
       "      <td>mcortex</td>\n",
       "      <td>406.3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>0</td>\n",
       "      <td>mcortex</td>\n",
       "      <td>483.2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>0</td>\n",
       "      <td>mcortex</td>\n",
       "      <td>592.4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>10</th>\n",
       "      <td>0</td>\n",
       "      <td>mcortex</td>\n",
       "      <td>700.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>11</th>\n",
       "      <td>0</td>\n",
       "      <td>mcortex</td>\n",
       "      <td>734.3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>12</th>\n",
       "      <td>0</td>\n",
       "      <td>mcortex</td>\n",
       "      <td>874.4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>13</th>\n",
       "      <td>0</td>\n",
       "      <td>mcortex</td>\n",
       "      <td>934.9</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>14</th>\n",
       "      <td>0</td>\n",
       "      <td>mcortex</td>\n",
       "      <td>1001.2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>15</th>\n",
       "      <td>0</td>\n",
       "      <td>mcortex</td>\n",
       "      <td>1023.7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>16</th>\n",
       "      <td>0</td>\n",
       "      <td>mcortex</td>\n",
       "      <td>1109.1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>17</th>\n",
       "      <td>0</td>\n",
       "      <td>mcortex</td>\n",
       "      <td>1126.3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18</th>\n",
       "      <td>0</td>\n",
       "      <td>mcortex</td>\n",
       "      <td>1194.6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>19</th>\n",
       "      <td>0</td>\n",
       "      <td>mcortex</td>\n",
       "      <td>1206.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>20</th>\n",
       "      <td>0</td>\n",
       "      <td>mcortex</td>\n",
       "      <td>1227.3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>21</th>\n",
       "      <td>0</td>\n",
       "      <td>mcortex</td>\n",
       "      <td>1277.4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>22</th>\n",
       "      <td>0</td>\n",
       "      <td>mcortex</td>\n",
       "      <td>1308.4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>23</th>\n",
       "      <td>0</td>\n",
       "      <td>mcortex</td>\n",
       "      <td>1348.6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>24</th>\n",
       "      <td>0</td>\n",
       "      <td>mcortex</td>\n",
       "      <td>1369.2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25</th>\n",
       "      <td>0</td>\n",
       "      <td>mcortex</td>\n",
       "      <td>1401.5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>26</th>\n",
       "      <td>0</td>\n",
       "      <td>mcortex</td>\n",
       "      <td>1421.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>27</th>\n",
       "      <td>0</td>\n",
       "      <td>mcortex</td>\n",
       "      <td>1450.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>28</th>\n",
       "      <td>0</td>\n",
       "      <td>mcortex</td>\n",
       "      <td>1472.8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>29</th>\n",
       "      <td>0</td>\n",
       "      <td>mcortex</td>\n",
       "      <td>1657.1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>30</th>\n",
       "      <td>0</td>\n",
       "      <td>mcortex</td>\n",
       "      <td>1672.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>31</th>\n",
       "      <td>0</td>\n",
       "      <td>mcortex</td>\n",
       "      <td>1754.7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>32</th>\n",
       "      <td>0</td>\n",
       "      <td>mcortex</td>\n",
       "      <td>1795.6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>33</th>\n",
       "      <td>0</td>\n",
       "      <td>mcortex</td>\n",
       "      <td>1837.3</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>34</th>\n",
       "      <td>0</td>\n",
       "      <td>mcortex</td>\n",
       "      <td>1913.4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>35</th>\n",
       "      <td>0</td>\n",
       "      <td>mcortex</td>\n",
       "      <td>1930.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>36</th>\n",
       "      <td>0</td>\n",
       "      <td>mcortex</td>\n",
       "      <td>1956.9</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>37</th>\n",
       "      <td>0</td>\n",
       "      <td>mcortex</td>\n",
       "      <td>1999.6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>38</th>\n",
       "      <td>0</td>\n",
       "      <td>mcortex</td>\n",
       "      <td>2051.5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>39</th>\n",
       "      <td>0</td>\n",
       "      <td>mcortex</td>\n",
       "      <td>2130.1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>40</th>\n",
       "      <td>0</td>\n",
       "      <td>mcortex</td>\n",
       "      <td>2172.8</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>41</th>\n",
       "      <td>0</td>\n",
       "      <td>mcortex</td>\n",
       "      <td>2303.4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>42</th>\n",
       "      <td>0</td>\n",
       "      <td>mcortex</td>\n",
       "      <td>2455.7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>43</th>\n",
       "      <td>0</td>\n",
       "      <td>mcortex</td>\n",
       "      <td>2508.4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>44</th>\n",
       "      <td>0</td>\n",
       "      <td>mcortex</td>\n",
       "      <td>2566.1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>45</th>\n",
       "      <td>0</td>\n",
       "      <td>mcortex</td>\n",
       "      <td>2616.4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>46</th>\n",
       "      <td>0</td>\n",
       "      <td>mcortex</td>\n",
       "      <td>2646.7</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>47</th>\n",
       "      <td>0</td>\n",
       "      <td>mcortex</td>\n",
       "      <td>2675.6</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>48</th>\n",
       "      <td>0</td>\n",
       "      <td>mcortex</td>\n",
       "      <td>2793.9</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>49</th>\n",
       "      <td>0</td>\n",
       "      <td>mcortex</td>\n",
       "      <td>2836.1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50</th>\n",
       "      <td>0</td>\n",
       "      <td>mcortex</td>\n",
       "      <td>2970.5</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "    node_ids population  timestamps\n",
       "0          0    mcortex        45.8\n",
       "1          0    mcortex        86.7\n",
       "2          0    mcortex       121.9\n",
       "3          0    mcortex       205.9\n",
       "4          0    mcortex       252.3\n",
       "5          0    mcortex       287.3\n",
       "6          0    mcortex       312.7\n",
       "7          0    mcortex       406.3\n",
       "8          0    mcortex       483.2\n",
       "9          0    mcortex       592.4\n",
       "10         0    mcortex       700.0\n",
       "11         0    mcortex       734.3\n",
       "12         0    mcortex       874.4\n",
       "13         0    mcortex       934.9\n",
       "14         0    mcortex      1001.2\n",
       "15         0    mcortex      1023.7\n",
       "16         0    mcortex      1109.1\n",
       "17         0    mcortex      1126.3\n",
       "18         0    mcortex      1194.6\n",
       "19         0    mcortex      1206.0\n",
       "20         0    mcortex      1227.3\n",
       "21         0    mcortex      1277.4\n",
       "22         0    mcortex      1308.4\n",
       "23         0    mcortex      1348.6\n",
       "24         0    mcortex      1369.2\n",
       "25         0    mcortex      1401.5\n",
       "26         0    mcortex      1421.0\n",
       "27         0    mcortex      1450.0\n",
       "28         0    mcortex      1472.8\n",
       "29         0    mcortex      1657.1\n",
       "30         0    mcortex      1672.0\n",
       "31         0    mcortex      1754.7\n",
       "32         0    mcortex      1795.6\n",
       "33         0    mcortex      1837.3\n",
       "34         0    mcortex      1913.4\n",
       "35         0    mcortex      1930.0\n",
       "36         0    mcortex      1956.9\n",
       "37         0    mcortex      1999.6\n",
       "38         0    mcortex      2051.5\n",
       "39         0    mcortex      2130.1\n",
       "40         0    mcortex      2172.8\n",
       "41         0    mcortex      2303.4\n",
       "42         0    mcortex      2455.7\n",
       "43         0    mcortex      2508.4\n",
       "44         0    mcortex      2566.1\n",
       "45         0    mcortex      2616.4\n",
       "46         0    mcortex      2646.7\n",
       "47         0    mcortex      2675.6\n",
       "48         0    mcortex      2793.9\n",
       "49         0    mcortex      2836.1\n",
       "50         0    mcortex      2970.5"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from bmtk.analyzer.spike_trains import to_dataframe\n",
    "to_dataframe(config_file='sim_ch02/simulation_config.json')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from bmtk.analyzer.cell_vars import plot_report\n",
    "\n",
    "plot_report(config_file='sim_ch02/simulation_config.json')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 5. Additional things to do:\n",
    "\n",
    "### Changing edge properties\n",
    "\n",
    "When using the Network Builder add_edges method, we gave all the edges the same parameter values (delay, weight, target_section, etc.). All connection created by this method call constitute an single edge-type that share the same parameters, and are specified in the mthalamic_edge_type.csv file"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>edge_type_id</th>\n",
       "      <th>target_query</th>\n",
       "      <th>source_query</th>\n",
       "      <th>syn_weight</th>\n",
       "      <th>dynamics_params</th>\n",
       "      <th>distance_range</th>\n",
       "      <th>delay</th>\n",
       "      <th>target_sections</th>\n",
       "      <th>weight_function</th>\n",
       "      <th>model_template</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>100</td>\n",
       "      <td>*</td>\n",
       "      <td>pop_name=='tON'</td>\n",
       "      <td>0.001</td>\n",
       "      <td>AMPA_ExcToExc.json</td>\n",
       "      <td>[0.0, 150.0]</td>\n",
       "      <td>2.0</td>\n",
       "      <td>['basal', 'apical']</td>\n",
       "      <td>NaN</td>\n",
       "      <td>exp2syn</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   edge_type_id target_query     source_query  syn_weight     dynamics_params  \\\n",
       "0           100            *  pop_name=='tON'       0.001  AMPA_ExcToExc.json   \n",
       "\n",
       "  distance_range  delay      target_sections  weight_function model_template  \n",
       "0   [0.0, 150.0]    2.0  ['basal', 'apical']              NaN        exp2syn  "
      ]
     },
     "execution_count": 36,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import pandas as pd\n",
    "pd.read_csv('network/mthalamus_mcortex_edge_types.csv', sep=' ')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "(if in the build script we called add_edges multiple times, we'd have multiple edge-types). \n",
    "\n",
    "Using a simple text-editor we can modify this file directly, change parameters before a simulation run without having to rebuild the entire network (although for a network this small it may not be beneficial).\n",
    "\n",
    "#### weight_function\n",
    "\n",
    "By default BioNet uses the value in syn_weight to set a synaptic weight, which is a constant stored in the network files. Often we will want to adjust the synaptic weight between simulations, but don't want to have to regenerate the network. BioNet allows us to specify custom synaptic weight functions that will calculate synaptic weight before each simulation. \n",
    "\n",
    "To do so first we must set the value of 'weight_function' column. Either we can open up the file mthalamus_mcortex_edge_types.csv with a text-editor and change the column. \n",
    "\n",
    "\n",
    "|edge_type_id | target_query | source_query   | ... | weight_function |\n",
    "|-------------|--------------|----------------|-----|-----------------|\n",
    "|100          | *            |pop_name=='tON' | ... |*adjusted_weight*  |\n",
    "\n",
    "or we can rebuild the edges\n",
    "```python\n",
    "thalamus.add_edges(source={'pop_name': 'tON'}, target=cortex.nodes(),\n",
    "                   connection_rule=5,\n",
    "                   syn_weight=0.001,\n",
    "                   weight_function=adjusted_weight,\n",
    "                   delay=2.0,\n",
    "                   target_sections=['basal', 'apical'],\n",
    "                   distance_range=[0.0, 150.0],\n",
    "                   dynamics_params='AMPA_ExcToExc.json',\n",
    "                   model_template='exp2syn')\n",
    "```\n",
    "\n",
    "Then we write a custom weight function. The weight functions will be called during the simulation when building each synapse, and requires three parameters - target_cell, source_cell, and edge_props. These three parameters are dictionaries which can be used to access properties of the source node, target node, and edge, respectively. The function must return a floating point number which will be used to set the synaptic weight\n",
    "\n",
    "```python\n",
    "def adjusted_weights(target_cell, source_cell, edge_props):\n",
    "    if target_cell['cell_name'] == 'Scnn1a':\n",
    "        return edge_prop[\"weight_max\"]*0.5\n",
    "    elif target_cell['cell_name'] == 'Rorb'\n",
    "        return edge_prop[\"weight_max\"]*1.5\n",
    "    else:\n",
    "        ...\n",
    "```\n",
    "\n",
    "Finally we must tell BioNet where to access the function which we can do by using the add_weight_function.\n",
    "```python\n",
    "from bmtk.simulator import bionet\n",
    "\n",
    "bionet.nrn.add_weight_function(adjusted_weights)\n",
    "\n",
    "conf = bionet.Config.from_json('config.json')\n",
    "...\n",
    "```"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Using NWB for spike trains\n",
    "\n",
    "Instead of using csv files to set the spike trains of our external network, we can also use nwb files. The typical setup would look like the following in the config file:\n",
    "\n",
    "```json\n",
    "\"inputs\": {\n",
    "    \"LGN_spikes\": {\n",
    "      \"input_type\": \"spikes\",\n",
    "      \"module\": \"nwb\",\n",
    "      \"input_file\": \"$INPUT_DIR/lgn_spikes.nwb\",\n",
    "      \"node_set\": \"lgn\",\n",
    "      \"trial\": \"trial_0\"\n",
    "    },\n",
    "}\n",
    "```"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "anaconda-cloud": {},
  "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.15"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
