From 65fa0b197785f9d7f1df9740837e2727c61873a1 Mon Sep 17 00:00:00 2001
From: Didi Hou <d.hou@outlook.com>
Date: Fri, 18 Aug 2023 16:28:08 +0200
Subject: [PATCH] update multi-area-model.ipynb

---
 multi-area-model.ipynb | 669 +++++++++--------------------------------
 1 file changed, 145 insertions(+), 524 deletions(-)

diff --git a/multi-area-model.ipynb b/multi-area-model.ipynb
index d57f18d..b40d3f3 100644
--- a/multi-area-model.ipynb
+++ b/multi-area-model.ipynb
@@ -13,89 +13,46 @@
    "id": "b952d0ea",
    "metadata": {},
    "source": [
-    "### Notebook structure <a class=\"anchor\" id=\"toc\"></a>\n",
-    "* [Create config file](#section_1)\n",
-    "* [Import dependencies](#section_2)\n",
-    "* [Jupyter notebook display format setting](#section_3)\n",
-    "* [Specify paramters of model](#section_4)\n",
-    "    * [1. Scaling factor (scale_down_to)](#section_4.1)\n",
-    "    * [2. Model parameters](#section_4.2)\n",
-    "    * [3. Simulation parameters](#section_4.3)\n",
-    "    * [4. Theory parameters](#section_4.4)\n",
-    "* [Instantiate a multi-area model and analyse](#section_5)\n",
-    "    * [1. Insantiate a multi-area model](#section_5.1)\n",
-    "    * [2. Predict firing rates from theory](#section_5.2)\n",
-    "    * [3. Extract connectivity](#section_5.3)\n",
-    "* [Run the simulation](#section_6)\n",
-    "* [Simulation results analysis](#section_7)\n",
-    "* [Load and process data of simulation results](#section_8)\n",
-    "* [Simulation results visualization](#section_9) "
+    "#### Notebook structure <a class=\"anchor\" id=\"toc\"></a>\n",
+    "* [S0. Configuration](#section_0)\n",
+    "* [S1. Paramters specification](#section_1)\n",
+    "    * [1.1. Parameters to tune](#section_1_1)\n",
+    "    * [1.2. Default parameters](#section_1_2)\n",
+    "* [S2. Multi-area model instantiation and simulation](#section_2)\n",
+    "    * [2.1. Insantiate a multi-area model](#section_2_1)\n",
+    "    * [2.2. Predict firing rates from theory](#section_2_2)\n",
+    "    * [2.3. Extract connectivity](#section_2_3)\n",
+    "    * [2.4. Run the simulation](#section_2_4)\n",
+    "* [S3. Data processing and simulation results analysis](#section_3)\n",
+    "* [S4. Simulation results visualization](#section_4) "
    ]
   },
   {
    "cell_type": "markdown",
-   "id": "d782e527",
-   "metadata": {
-    "tags": []
-   },
-   "source": [
-    "### Create config file <a class=\"anchor\" id=\"section_1\"></a>"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 1,
-   "id": "9b985084",
+   "id": "bd3d4b0e",
    "metadata": {},
-   "outputs": [],
    "source": [
-    "with open('config.py', 'w') as fp:\n",
-    "    fp.write(\n",
-    "'''import os\n",
-    "base_path = os.path.abspath(\".\")\n",
-    "data_path = os.path.abspath(\"simulations\")\n",
-    "jobscript_template = \"python {base_path}/run_simulation.py {label}\"\n",
-    "submit_cmd = \"bash -c\"\n",
-    "''')"
+    "<br>"
    ]
   },
   {
    "cell_type": "markdown",
-   "id": "4a853b97",
-   "metadata": {},
+   "id": "d782e527",
+   "metadata": {
+    "tags": []
+   },
    "source": [
-    "### Import dependencies <a class=\"anchor\" id=\"section_2\"></a>"
+    "## S0. Configuration <a class=\"anchor\" id=\"section_0\"></a>"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 2,
+   "execution_count": null,
    "id": "96517739",
    "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "\n",
-      "              -- N E S T --\n",
-      "  Copyright (C) 2004 The NEST Initiative\n",
-      "\n",
-      " Version: 3.4\n",
-      " Built: May 17 2023 20:48:31\n",
-      "\n",
-      " This program is provided AS IS and comes with\n",
-      " NO WARRANTY. See the file LICENSE for details.\n",
-      "\n",
-      " Problems or suggestions?\n",
-      "   Visit https://www.nest-simulator.org\n",
-      "\n",
-      " Type 'nest.help()' to find out more about NEST.\n",
-      "\n"
-     ]
-    }
-   ],
+   "outputs": [],
    "source": [
+    "# Import dependencies\n",
     "%matplotlib inline\n",
     "import matplotlib.pyplot as plt\n",
     "import numpy as np\n",
@@ -103,66 +60,49 @@
     "import nest\n",
     "from IPython.display import display, HTML\n",
     "\n",
+    "# Import the MultiAreaModel class\n",
     "from multiarea_model import MultiAreaModel\n",
     "from config import base_path"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 3,
-   "id": "7e07b0d0",
+   "execution_count": null,
+   "id": "2dd47c64",
    "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "Requirement already satisfied: nested_dict in /srv/main-spack-instance-2302/spack/var/spack/environments/ebrains-23-02/.spack-env/._view/6axslmv6jvf4v2nte3uwlayg4vhsjoha/lib/python3.8/site-packages (1.61)\n",
-      "Requirement already satisfied: dicthash in /srv/main-spack-instance-2302/spack/var/spack/environments/ebrains-23-02/.spack-env/._view/6axslmv6jvf4v2nte3uwlayg4vhsjoha/lib/python3.8/site-packages (0.0.2)\n",
-      "Requirement already satisfied: future in /srv/main-spack-instance-2302/spack/var/spack/environments/ebrains-23-02/.spack-env/._view/6axslmv6jvf4v2nte3uwlayg4vhsjoha/lib/python3.8/site-packages (from dicthash) (0.18.2)\n"
-     ]
-    }
-   ],
+   "outputs": [],
    "source": [
-    "!pip install nested_dict dicthash"
+    "# Create config file\n",
+    "with open('config.py', 'w') as fp:\n",
+    "    fp.write(\n",
+    "'''import os\n",
+    "base_path = os.path.abspath(\".\")\n",
+    "data_path = os.path.abspath(\"simulations\")\n",
+    "jobscript_template = \"python {base_path}/run_simulation.py {label}\"\n",
+    "submit_cmd = \"bash -c\"\n",
+    "''')"
    ]
   },
   {
-   "cell_type": "markdown",
-   "id": "2f429063",
-   "metadata": {
-    "tags": []
-   },
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "7e07b0d0",
+   "metadata": {},
+   "outputs": [],
    "source": [
-    "### Jupyter notebook display format setting <a class=\"anchor\" id=\"section_3\"></a>"
+    "!pip install nested_dict dicthash"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 4,
+   "execution_count": null,
    "id": "1d440c07-9b69-4e52-8573-26b13493bc5a",
    "metadata": {
     "tags": []
    },
-   "outputs": [
-    {
-     "data": {
-      "text/html": [
-       "\n",
-       "<style>\n",
-       "table {float:left}\n",
-       "</style>\n"
-      ],
-      "text/plain": [
-       "<IPython.core.display.HTML object>"
-      ]
-     },
-     "metadata": {},
-     "output_type": "display_data"
-    }
-   ],
-   "source": [
-    "# specify the format the table in output\n",
+   "outputs": [],
+   "source": [
+    "# Jupyter notebook display format setting\n",
     "style = \"\"\"\n",
     "<style>\n",
     "table {float:left}\n",
@@ -173,276 +113,130 @@
   },
   {
    "cell_type": "markdown",
-   "id": "5ed5f5d0-f88d-4bc0-9739-da926fabcfe5",
+   "id": "27160ba8",
    "metadata": {},
    "source": [
-    "<br>"
+    "Go back to [Notebook structure](#toc)"
    ]
   },
   {
    "cell_type": "markdown",
-   "id": "df83f5ea-1c4b-44d3-9926-01786aa46e14",
-   "metadata": {
-    "tags": []
-   },
+   "id": "565be233",
+   "metadata": {},
    "source": [
-    "## Specify paramters of model <a class=\"anchor\" id=\"section_4\"></a>"
+    "<br>"
    ]
   },
   {
    "cell_type": "markdown",
-   "id": "2cedd26b",
+   "id": "df83f5ea-1c4b-44d3-9926-01786aa46e14",
    "metadata": {
     "tags": []
    },
    "source": [
-    "### 1. Scaling factor (scale_down_to) <a class=\"anchor\" id=\"section_4.1\"></a>\n",
-    "**Scaling factor** (scale_down_to) is the parameter which defines the the ratio of the full scale multi-area model being down-scaled to a model with fewer neurons and indegrees so as to be simulated on machines with lower computational ability and the simulation results can be obtained within relative shorter period of time.<br> <br> \n",
-    "Neurons and indegrees are both scaled down to 0.5%, where the model can usually be simulated on a local machine.<br> **Warning**: This will not yield reasonable dynamical results from the network and is only meant to demonstrate the simulation workflow.**"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "id": "f66dbf02",
-   "metadata": {},
-   "source": [
-    "|Parameter      |Parameter description  |Variable                     |Value               |Value description  |\n",
-    "|:-------------:|:----------------------|:---------------------------:|:------------------:|:------------------|\n",
-    "|Scaling factor |                       | scale_down_to               |0.005               |                   |"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 5,
-   "id": "e940bb6b",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "scale_down_to = 0.005 # Change it to 1. for running the fullscale network"
+    "## S1. Paramters specification <a class=\"anchor\" id=\"section_1\"></a>"
    ]
   },
   {
    "cell_type": "markdown",
-   "id": "14bac1ce-4ba0-47ec-84b2-9d3c72bc96ec",
+   "id": "30655817",
    "metadata": {},
    "source": [
-    "### 2. Model parameters <a class=\"anchor\" id=\"section_4.2\"></a>\n",
-    "Model paramters are most important among all the paramters, it directly affect the model itself and thus have a great impact on the simulation results. Model paramters define the connection, input, neuron, and network charateristics of the model, and therefore fall into four categories: **Connection paramters**, **Input paramters**, **Neuron paramters**, and **Network paramters**."
+    "### 1.1. Parameters to tune <a class=\"anchor\" id=\"section_1_1\"></a>"
    ]
   },
   {
    "cell_type": "markdown",
-   "id": "106a6a5e",
+   "id": "4f67c1ba",
    "metadata": {},
    "source": [
-    "* Connection parameters (conn_params)"
+    "|Parameter                         |Variable                    |Value               |Value description  |\n",
+    "|:--------------------------------:|:--------------------------:|:------------------:|:------------------|\n",
+    "|Scaling factor                    |scale_down_to               |0.005               |$^1$               |\n",
+    "|Ground state to metastable state  |cc_weights_factor           |                    |$^2$               |\n",
+    "|Replace non-simulated areas       |replace_non_simulated_areas |'het_poisson_stat'  |$^3$               |\n",
+    "|Simulation areas                  |sim_areas                   |                    |$^4$               |"
    ]
   },
   {
    "cell_type": "markdown",
-   "id": "41d80271-f60e-49f4-9759-f8ad26097b2d",
+   "id": "a2161477",
    "metadata": {},
    "source": [
-    "| Parameter | Parameter description | Variable                    | Value              | Value description |\n",
-    "|:---------:|:----------------------|:---------------------------:|:------------------:|:------------------|\n",
-    "|           |It defines how non-simulated areas will be replaced      | replace_non_simulated_areas | 'het_poisson_stat' |$^1$|\n",
-    "|           |It sets the relative inhibitory synaptic strength        | g                           | -11.               |$^2$|\n",
-    "|           |Stabilization method of Schuecker, Schmidt et al. (2017) | K_stable                    | 'K_stable.npy'     |$^3$|\n",
-    "|           |Increase the external input to 2/3E and 5E in area TH    | fac_nu_ext_TH               | 1.                 |    |\n",
-    "|           |Increase the external Poisson indegree onto 5E           | fac_nu_ext_5E               | 1.125              |    |\n",
-    "|           |Increase the external Poisson indegree onto 6E           | fac_nu_ext_6E               | 1.41666667         |    |\n",
-    "|           |Adjust the average indegree in V1 based on monkey data   | av_indegree_V1              | 3950.              |    |\n",
-    "|           |Scaling factor for cortico-cortical connections (chi)    |cc_weights_factor            | 1.                 |$^4$|\n",
-    "<br>"
+    "1. Scaling factor (`scale_down_to`) <br>\n",
+    "Scaling factor (scale_down_to) is the parameter which defines the the ratio of the full scale multi-area model being down-scaled to a model with fewer neurons and indegrees so as to be simulated on machines with lower computational ability and the simulation results can be obtained within relative shorter period of time.\n",
+    "Neurons and indegrees are both scaled down to 0.5%, where the model can usually be simulated on a local machine.<br> \n",
+    "**Warning**: This will not yield reasonable dynamical results from the network and is only meant to demonstrate the simulation workflow <br> \n",
+    "2. Ground state to metastable state (`cc_weights_factor`) <br>\n",
+    "Ground state to metastable state (cc_weights_factor) decides the switch of the model from ground state to metastable state. <br>\n",
+    "3. Replace non-simulated areas (`replace_non_simulated_areas`) <br>\n",
+    "Replace non-simulated areas (replace_non_simulated_areas) defines how non-simulated areas will be replaced. <br>\n",
+    "4. Simulation areas (`simulation_areas`) <br>\n",
+    "Simulation areas (simulation_areas) specifies the cortical areas included in the simulation process."
    ]
   },
   {
-   "cell_type": "markdown",
-   "id": "6ab18b3e-4f0a-4dc2-b87a-b5397cd1b8fe",
-   "metadata": {},
-   "source": [
-    "Notes: \n",
-    "1. Whether to replace non-simulated areas by Poisson sources with the same global rate rate_ext ('hom_poisson_stat') or by specific rates ('het_poisson_stat') or by time-varying specific current ('het_current_nonstat'). In the two latter cases, the data to replace the cortico-cortical input is loaded from `replace_cc_input_source`\n",
-    "2. `g` controls the excitation to inhibition balance in network's activity.\n",
-    "3. Whether to apply the stabilization method of Schuecker, Schmidt et al. (2017). Default is None. Options are True to perform the stabilization or a string that specifies the name of a binary numpy file containing the connectivity matrix.\n",
-    "4. This scaling factor controls the cortico-cortical synaptic strength. If it is 1.0 then the inter-area synaptic strength is the same as the intra-areal. This factor changes the network activity from ground to metastable."
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "id": "1688ef55-2fdb-4800-97af-7ea62442c684",
-   "metadata": {},
-   "source": [
-    "* Input parameters (input_params)"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "id": "5127920c-2a89-42d0-9d87-889f7b7474d9",
-   "metadata": {},
-   "source": [
-    "| Parameter | Parameter description | Variable                      | Value                | Value description |\n",
-    "|:---------:|:----------------------|:-----------------------------:|:--------------------:|:------------------|\n",
-    "|           |It defines the rate of the Poissonian spike generator (in spikes/s)| rate_ext                      |      10.             |                   |"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "id": "aefa84c8-baaa-4afa-96c6-5d57d174b286",
-   "metadata": {},
-   "source": [
-    "* Neuron parameters (neuron_params)"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "id": "ab5eb287-e638-401f-9e2c-892f88c3ee90",
-   "metadata": {},
-   "source": [
-    "| Parameter | Parameter description | Variable                    | Value              | Value description |\n",
-    "|:---------:|:----------------------|:---------------------------:|:------------------:|:------------------|\n",
-    "|           |Mean for the distribution of initial membrane potentials| V0_mean                     | -150.              |                   |\n",
-    "|           |Standard deviation for the distribution of initial membrane potentials| V0_sd                       | 50.                |                   |"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "id": "ea4e01aa",
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "60265d52",
    "metadata": {},
+   "outputs": [],
    "source": [
-    "* Network parameters (network_params)"
+    "scale_down_to = 0.005 # Change it to 1. for running the fullscale network\n",
+    "cc_weights_factor = \n",
+    "replace_non_simulated_areas = 'het_poisson_stat'\n",
+    "sim_areas = "
    ]
   },
   {
    "cell_type": "markdown",
-   "id": "dc4ce111",
+   "id": "de11b07f",
    "metadata": {},
    "source": [
-    "| Parameter                               | Parameter description | Variable              | Value                         | Value description |\n",
-    "|:---------------------------------------:|:----------------------|:---------------------:|:-----------------------------:|:------------------|\n",
-    "| Scaling factor of the number of neurons |                       | N_scaling             | scale_down_to                 |                   |\n",
-    "| Scaling factor of the number of synapses|                       | K_scaling             | scale_down_to                 |                   |\n",
-    "| Fullscale rates                         |                       | fullscale_rates       | 'tests/fullscale_rates.json'  |                   |\n",
-    "| Input parameters                        |                       | input_params          | input_params                  |                   |\n",
-    "| Connections parameters                  |                       | connection_params     | conn_params                   |                   |\n",
-    "| Neuron parameters                       |                       | neuron_params         | neuron_params                 |                   |"
+    "### 1.2. Default parameters <a class=\"anchor\" id=\"section_1_2\"></a>\n",
+    "Default parameters ...<br>\n",
+    "We try out best not to confuse users with too many parameters. However, if you want to change the default parameters, you can do so by passing a dictionary to the `default_params` argument of the `MultiAreaModel` class."
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 6,
+   "execution_count": null,
    "id": "6e4bed8d",
    "metadata": {},
    "outputs": [],
    "source": [
+    "# Connection parameters (conn_params)\n",
     "conn_params = {'replace_non_simulated_areas': 'het_poisson_stat',\n",
     "               'g': -11.,\n",
     "               'K_stable': 'K_stable.npy',\n",
     "               'fac_nu_ext_TH': 1.2,\n",
     "               'fac_nu_ext_5E': 1.125,\n",
     "               'fac_nu_ext_6E': 1.41666667,\n",
-    "               'av_indegree_V1': 3950.}"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 7,
-   "id": "7e4ede2c",
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "input_params = {'rate_ext': 10.}"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 8,
-   "id": "f69ad836-70b8-4ebe-b46a-25f48dc3ca7c",
-   "metadata": {},
-   "outputs": [],
-   "source": [
+    "               'av_indegree_V1': 3950.}\n",
+    "\n",
+    "# Input parameters (input_params)\n",
+    "input_params = {'rate_ext': 10.}\n",
+    "\n",
+    "# Neuron parameters (neuron_params)\n",
     "neuron_params = {'V0_mean': -150.,\n",
-    "                 'V0_sd': 50.}"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 9,
-   "id": "0aa9a9bf-b95d-4643-82a0-e29a49bb58df",
-   "metadata": {},
-   "outputs": [],
-   "source": [
+    "                 'V0_sd': 50.}\n",
+    "\n",
+    "# Network parameters (network_params)\n",
     "network_params = {'N_scaling': scale_down_to,\n",
     "                  'K_scaling': scale_down_to,\n",
     "                  'fullscale_rates': 'tests/fullscale_rates.json',\n",
     "                  'input_params': input_params,\n",
     "                  'connection_params': conn_params,\n",
-    "                  'neuron_params': neuron_params}"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "id": "a0730f70-ed9b-4664-b677-3dda965a01ef",
-   "metadata": {},
-   "source": [
-    "### 3. Simulation parameters (sim_params) <a class=\"anchor\" id=\"section_4.3\"></a>\n",
-    "Simulation parameters define the paramters that influence the process of simulation, inlcuding the simulation time, the number of processes and theads used to run the simulation.<br>"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "id": "c989ee79-fa3d-405c-a1bf-da8ec884d878",
-   "metadata": {},
-   "source": [
-    "| Parameter             | Parameter description | Variable             | Value              | Value description |\n",
-    "|:---------------------:|:----------------------|:--------------------:|:------------------:|:------------------|\n",
-    "|Simulation time        |                       |t_sim                 |2000.               |                   |\n",
-    "|Number of processes    |                       |num_processes         |1                   |                   |\n",
-    "|Number of local threads|                       |local_num_threads     |1                   |                   |\n",
-    "|                       |                       |recording_dict        |input_params        |                   |\n",
-    "|                       |                       |record_vm             |False               |                   |"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 10,
-   "id": "21484ed3-295f-4d06-b757-2969aac429a4",
-   "metadata": {},
-   "outputs": [],
-   "source": [
+    "                  'neuron_params': neuron_params}\n",
+    "\n",
+    "# Simulation parameters (sim_params)\n",
     "sim_params = {'t_sim': 2000.,\n",
     "              'num_processes': 1,\n",
     "              'local_num_threads': 1,\n",
     "              'recording_dict': {'record_vm': False},\n",
-    "              'rng_seed': 1} # global random seed"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "id": "79596d77-c105-45d0-9a57-2d15e31f1189",
-   "metadata": {},
-   "source": [
-    "### 4. Theory paramters (theory_params) <a class=\"anchor\" id=\"section_4.4\"></a>\n",
-    "Theory parameters defines ..."
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "id": "18e0deda-1dec-4df8-b994-ef641b3c5aac",
-   "metadata": {},
-   "source": [
-    "| Parameter | Parameter description | Variable              | Value                         | Value description |\n",
-    "|:---------:|:----------------------|:---------------------:|:-----------------------------:|:------------------|\n",
-    "|           |                       | dt                    | 0.1                           |                   |"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 11,
-   "id": "41edb350-36c3-4e19-829e-40d6ca9633a0",
-   "metadata": {},
-   "outputs": [],
-   "source": [
+    "              'rng_seed': 1} # global random seed\n",
+    "\n",
+    "# Theory paramters (theory_params)\n",
     "theory_params = {'dt': 0.1}"
    ]
   },
@@ -467,7 +261,7 @@
    "id": "de4a6703",
    "metadata": {},
    "source": [
-    "## Instantiate a multi-area model and analyse <a class=\"anchor\" id=\"section_5\"></a>"
+    "## S2. Multi-area model instantiation and simulation <a class=\"anchor\" id=\"section_2\"></a>"
    ]
   },
   {
@@ -475,75 +269,15 @@
    "id": "1fd58841",
    "metadata": {},
    "source": [
-    "### 1. Insantiate a multi-area model <a class=\"anchor\" id=\"section_5.1\"></a>"
+    "### 2.1. Insantiate a multi-area model <a class=\"anchor\" id=\"section_2_1\"></a>"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 12,
+   "execution_count": null,
    "id": "ab25f9f8",
    "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "Initializing network from dictionary.\n",
-      "RAND_DATA_LABEL 216\n"
-     ]
-    },
-    {
-     "name": "stderr",
-     "output_type": "stream",
-     "text": [
-      "/srv/main-spack-instance-2302/spack/opt/spack/linux-ubuntu20.04-x86_64/gcc-10.3.0/py-numpy-1.21.6-6fewtq7oarp3vtwlxrrcofz5sxwt55s7/lib/python3.8/site-packages/numpy/core/fromnumeric.py:3440: RuntimeWarning:Mean of empty slice.\n",
-      "/srv/main-spack-instance-2302/spack/opt/spack/linux-ubuntu20.04-x86_64/gcc-10.3.0/py-numpy-1.21.6-6fewtq7oarp3vtwlxrrcofz5sxwt55s7/lib/python3.8/site-packages/numpy/core/_methods.py:189: RuntimeWarning:invalid value encountered in double_scalars\n",
-      "Error in library(\"aod\") : there is no package called ‘aod’\n",
-      "Execution halted\n"
-     ]
-    },
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "No R installation or IndexError, taking hard-coded SLN fit parameters.\n",
-      "\n",
-      "\n",
-      "========================================\n",
-      "Customized parameters\n",
-      "--------------------\n",
-      "{'K_scaling': 0.005,\n",
-      " 'N_scaling': 0.005,\n",
-      " 'connection_params': {'K_stable': 'K_stable.npy',\n",
-      "                       'av_indegree_V1': 3950.0,\n",
-      "                       'fac_nu_ext_5E': 1.125,\n",
-      "                       'fac_nu_ext_6E': 1.41666667,\n",
-      "                       'fac_nu_ext_TH': 1.2,\n",
-      "                       'g': -11.0,\n",
-      "                       'replace_non_simulated_areas': 'het_poisson_stat'},\n",
-      " 'fullscale_rates': 'tests/fullscale_rates.json',\n",
-      " 'input_params': {'rate_ext': 10.0},\n",
-      " 'neuron_params': {'V0_mean': -150.0, 'V0_sd': 50.0}}\n",
-      "========================================\n"
-     ]
-    },
-    {
-     "name": "stderr",
-     "output_type": "stream",
-     "text": [
-      "/srv/main-spack-instance-2302/spack/var/spack/environments/ebrains-23-02/.spack-env/view/lib/python3.8/site-packages/dicthash/dicthash.py:47: UserWarning:Float too small for safe conversion tointeger. Rounding down to zero.\n"
-     ]
-    },
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "Simulation label: 27d81076e6d6e9e591684be053078477\n",
-      "Copied files.\n",
-      "Initialized simulation class.\n"
-     ]
-    }
-   ],
+   "outputs": [],
    "source": [
     "M = MultiAreaModel(network_params, simulation=True,\n",
     "                   sim_spec=sim_params,\n",
@@ -556,24 +290,15 @@
    "id": "91649c30",
    "metadata": {},
    "source": [
-    "### 2. Predict firing rates from theory <a class=\"anchor\" id=\"section_5.2\"></a>"
+    "### 2.2. Predict firing rates from theory <a class=\"anchor\" id=\"section_2_2\"></a>"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 13,
+   "execution_count": null,
    "id": "6a7ddf0e",
    "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "Iteration: 0\n",
-      "Mean-field theory predicts an average rate of 29.588 spikes/s across all populations.\n"
-     ]
-    }
-   ],
+   "outputs": [],
    "source": [
     "p, r = M.theory.integrate_siegert()\n",
     "print(\"Mean-field theory predicts an average \"\n",
@@ -585,7 +310,7 @@
    "id": "2062ddf3",
    "metadata": {},
    "source": [
-    "### 3. Extract connectivity <a class=\"anchor\" id=\"section_5.3\"></a>"
+    "### 2.3. Extract connectivity <a class=\"anchor\" id=\"section_2_3\"></a>"
    ]
   },
   {
@@ -593,7 +318,9 @@
    "id": "8a7c09e0",
    "metadata": {},
    "source": [
-    "The connectivity and neuron numbers are stored in the attributes of the model class. Neuron numbers are stored in `M.N` as a dictionary (and in `M.N_vec` as an array), indegrees in `M.K` as a dictionary (and in `M.K_matrix` as an array). Number of synapses can also be access via `M.synapses` (and in `M.syn_matrix` as an array)."
+    "The connectivity and neuron numbers are stored in the attributes of the model class. Neuron numbers are stored in `M.N` as a dictionary (and in `M.N_vec` as an array), indegrees in `M.K` as a dictionary (and in `M.K_matrix` as an array). Number of synapses can also be access via `M.synapses` (and in `M.syn_matrix` as an array). <br>\n",
+    "\n",
+    "**Warning**: memory explosion"
    ]
   },
   {
@@ -601,12 +328,12 @@
    "id": "b7396606",
    "metadata": {},
    "source": [
-    "#### 3.1 Node indegrees"
+    "#### 2.3.1 Node indegrees"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 14,
+   "execution_count": null,
    "id": "6316ac24",
    "metadata": {},
    "outputs": [],
@@ -621,12 +348,12 @@
    "id": "253a2aba",
    "metadata": {},
    "source": [
-    "#### 3.2 Synapses"
+    "#### 2.3.2 Synapses"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 15,
+   "execution_count": null,
    "id": "445a722a",
    "metadata": {},
    "outputs": [],
@@ -657,90 +384,15 @@
    "id": "0c1cad59-81d0-4e24-ac33-13c4ca8c6dec",
    "metadata": {},
    "source": [
-    "## Run the simulation <a class=\"anchor\" id=\"section_6\"></a>"
+    "### 2.4. Run the simulation <a class=\"anchor\" id=\"section_2_4\"></a>"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 16,
+   "execution_count": null,
    "id": "15778e9c",
    "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "Prepared simulation in 0.00 seconds.\n",
-      "Rank 0: created area V1 with 0 local nodes\n",
-      "Memory after V1 : 1912.68 MB\n",
-      "Rank 0: created area V2 with 0 local nodes\n",
-      "Memory after V2 : 1939.39 MB\n",
-      "Rank 0: created area VP with 0 local nodes\n",
-      "Memory after VP : 1968.57 MB\n",
-      "Rank 0: created area V3 with 0 local nodes\n",
-      "Memory after V3 : 1996.86 MB\n",
-      "Rank 0: created area V3A with 0 local nodes\n",
-      "Memory after V3A : 2016.65 MB\n",
-      "Rank 0: created area MT with 0 local nodes\n",
-      "Memory after MT : 2042.32 MB\n",
-      "Rank 0: created area V4t with 0 local nodes\n",
-      "Memory after V4t : 2067.26 MB\n",
-      "Rank 0: created area V4 with 0 local nodes\n",
-      "Memory after V4 : 2094.32 MB\n",
-      "Rank 0: created area VOT with 0 local nodes\n",
-      "Memory after VOT : 2119.51 MB\n",
-      "Rank 0: created area MSTd with 0 local nodes\n",
-      "Memory after MSTd : 2141.02 MB\n",
-      "Rank 0: created area PIP with 0 local nodes\n",
-      "Memory after PIP : 2162.38 MB\n",
-      "Rank 0: created area PO with 0 local nodes\n",
-      "Memory after PO : 2183.84 MB\n",
-      "Rank 0: created area DP with 0 local nodes\n",
-      "Memory after DP : 2204.07 MB\n",
-      "Rank 0: created area MIP with 0 local nodes\n",
-      "Memory after MIP : 2225.65 MB\n",
-      "Rank 0: created area MDP with 0 local nodes\n",
-      "Memory after MDP : 2247.12 MB\n",
-      "Rank 0: created area VIP with 0 local nodes\n",
-      "Memory after VIP : 2269.10 MB\n",
-      "Rank 0: created area LIP with 0 local nodes\n",
-      "Memory after LIP : 2293.04 MB\n",
-      "Rank 0: created area PITv with 0 local nodes\n",
-      "Memory after PITv : 2318.38 MB\n",
-      "Rank 0: created area PITd with 0 local nodes\n",
-      "Memory after PITd : 2343.60 MB\n",
-      "Rank 0: created area MSTl with 0 local nodes\n",
-      "Memory after MSTl : 2365.06 MB\n",
-      "Rank 0: created area CITv with 0 local nodes\n",
-      "Memory after CITv : 2384.12 MB\n",
-      "Rank 0: created area CITd with 0 local nodes\n",
-      "Memory after CITd : 2403.45 MB\n",
-      "Rank 0: created area FEF with 0 local nodes\n",
-      "Memory after FEF : 2424.92 MB\n",
-      "Rank 0: created area TF with 0 local nodes\n",
-      "Memory after TF : 2440.57 MB\n",
-      "Rank 0: created area AITv with 0 local nodes\n",
-      "Memory after AITv : 2463.29 MB\n",
-      "Rank 0: created area FST with 0 local nodes\n",
-      "Memory after FST : 2480.05 MB\n",
-      "Rank 0: created area 7a with 0 local nodes\n",
-      "Memory after 7a : 2501.22 MB\n",
-      "Rank 0: created area STPp with 0 local nodes\n",
-      "Memory after STPp : 2519.98 MB\n",
-      "Rank 0: created area STPa with 0 local nodes\n",
-      "Memory after STPa : 2539.04 MB\n",
-      "Rank 0: created area 46 with 0 local nodes\n",
-      "Memory after 46 : 2554.37 MB\n",
-      "Rank 0: created area AITd with 0 local nodes\n",
-      "Memory after AITd : 2577.05 MB\n",
-      "Rank 0: created area TH with 0 local nodes\n",
-      "Memory after TH : 2589.76 MB\n",
-      "Created areas and internal connections in 2.13 seconds.\n",
-      "Created cortico-cortical connections in 20.67 seconds.\n",
-      "Simulated network in 57.88 seconds.\n"
-     ]
-    }
-   ],
+   "outputs": [],
    "source": [
     "# run the simulation, depending on the model parameter and downscale ratio, the running time varies largely.\n",
     "M.simulation.simulate()"
@@ -767,7 +419,7 @@
    "id": "28e071f8",
    "metadata": {},
    "source": [
-    "## Simulation results analysis <a class=\"anchor\" id=\"section_7\"></a>"
+    "## S3. Data processing and simulation results analysis <a class=\"anchor\" id=\"section_3\"></a>"
    ]
   },
   {
@@ -780,7 +432,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 17,
+   "execution_count": null,
    "id": "dc3b1820",
    "metadata": {},
    "outputs": [],
@@ -815,7 +467,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 18,
+   "execution_count": null,
    "id": "e7eb052e",
    "metadata": {},
    "outputs": [],
@@ -838,7 +490,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 19,
+   "execution_count": null,
    "id": "902f2800",
    "metadata": {},
    "outputs": [],
@@ -852,30 +504,6 @@
     "# print(gids)"
    ]
   },
-  {
-   "cell_type": "markdown",
-   "id": "875263c1",
-   "metadata": {},
-   "source": [
-    "Go back to [Notebook structure](#toc)"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "id": "e96a754e-7e51-4892-966b-d9bd03d63e91",
-   "metadata": {},
-   "source": [
-    "<br>"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "id": "9be9287d-4891-4b4b-bd19-cfc2ebed02ac",
-   "metadata": {},
-   "source": [
-    "## Load and process data of simulation results"
-   ]
-  },
   {
    "cell_type": "markdown",
    "id": "8726a93d",
@@ -886,7 +514,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 20,
+   "execution_count": null,
    "id": "cb8e3edd",
    "metadata": {},
    "outputs": [],
@@ -904,7 +532,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 21,
+   "execution_count": null,
    "id": "9590223b",
    "metadata": {},
    "outputs": [],
@@ -921,12 +549,28 @@
     "Go back to [Notebook structure](#toc)"
    ]
   },
+  {
+   "cell_type": "markdown",
+   "id": "b1320ab1",
+   "metadata": {},
+   "source": [
+    "Go back to [Notebook structure](#toc)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "529b1ade",
+   "metadata": {},
+   "source": [
+    "<br>"
+   ]
+  },
   {
    "cell_type": "markdown",
    "id": "57ff902c-d6ce-4f96-9e4f-8e3e7166ab66",
    "metadata": {},
    "source": [
-    "## Simulation results visualization"
+    "## S4. Simulation results visualization <a class=\"anchor\" id=\"section_4\"></a>"
    ]
   },
   {
@@ -934,38 +578,15 @@
    "id": "38ddd973",
    "metadata": {},
    "source": [
-    "### 1. Instantaneous and mean rate"
+    "### 4.1. Instantaneous and mean rate"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 22,
+   "execution_count": null,
    "id": "bea30fc8",
    "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "<matplotlib.legend.Legend at 0x7f8d4ea70af0>"
-      ]
-     },
-     "execution_count": 22,
-     "metadata": {},
-     "output_type": "execute_result"
-    },
-    {
-     "data": {
-      "image/png": "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\n",
-      "text/plain": [
-       "<Figure size 432x288 with 1 Axes>"
-      ]
-     },
-     "metadata": {
-      "needs_background": "light"
-     },
-     "output_type": "display_data"
-    }
-   ],
+   "outputs": [],
    "source": [
     "fig, ax = plt.subplots()\n",
     "ax.plot(tsteps, rate)\n",
-- 
GitLab