diff --git a/.ipynb_checkpoints/multi-area-model-checkpoint.ipynb b/.ipynb_checkpoints/multi-area-model-checkpoint.ipynb index 146d3ba5ef3ed849eae9619eb196012ed3d46c26..ca06226bdef60d7f794a8fe162ad87ae7d43b7bd 100644 --- a/.ipynb_checkpoints/multi-area-model-checkpoint.ipynb +++ b/.ipynb_checkpoints/multi-area-model-checkpoint.ipynb @@ -11,69 +11,75 @@ { "cell_type": "markdown", "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) " - ] - }, - { - "cell_type": "markdown", - "id": "d782e527", "metadata": { "tags": [] }, "source": [ - "### Create config file <a class=\"anchor\" id=\"section_1\"></a>" + "#### 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": "code", - "execution_count": null, - "id": "9b985084", + "cell_type": "markdown", + "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": { + "jp-MarkdownHeadingCollapsed": true, + "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": null, + "execution_count": 1, "id": "96517739", - "metadata": {}, - "outputs": [], - "source": [ + "metadata": { + "tags": [] + }, + "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" + ] + } + ], + "source": [ + "# Import dependencies\n", "%matplotlib inline\n", "import matplotlib.pyplot as plt\n", "import numpy as np\n", @@ -81,40 +87,75 @@ "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": null, - "id": "7e07b0d0", + "execution_count": 2, + "id": "2dd47c64", "metadata": {}, "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": 3, + "id": "7e07b0d0", + "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" + ] + } + ], "source": [ - "### Jupyter notebook display format setting <a class=\"anchor\" id=\"section_3\"></a>" + "!pip install nested_dict dicthash" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 4, "id": "1d440c07-9b69-4e52-8573-26b13493bc5a", "metadata": { "tags": [] }, - "outputs": [], - "source": [ - "# specify the format the table in output\n", + "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": [ + "# Jupyter notebook display format setting\n", "style = \"\"\"\n", "<style>\n", "table {float:left}\n", @@ -125,262 +166,145 @@ }, { "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.**" + "## S1. Paramters specification <a class=\"anchor\" id=\"section_1\"></a>" ] }, { "cell_type": "markdown", - "id": "f66dbf02", + "id": "30655817", "metadata": {}, "source": [ - "|Parameter |Parameter description |Variable |Value |Value description |\n", - "|:-------------:|:----------------------|:---------------------------:|:------------------:|:------------------|\n", - "|Scaling factor | | scale_down_to |0.005 | |" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "e940bb6b", - "metadata": {}, - "outputs": [], - "source": [ - "scale_down_to = 0.005 # Change it to 1. for running the fullscale network" + "### 1.1. Parameters to tune <a class=\"anchor\" id=\"section_1_1\"></a>" ] }, { "cell_type": "markdown", - "id": "14bac1ce-4ba0-47ec-84b2-9d3c72bc96ec", + "id": "4f67c1ba", "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**." + "|Parameter |Default value |Value range/options |Value assigned |Description |\n", + "|:----------------------------:|:-----------------------:|:--------------------------------------------------------------------:|:------------------:|:-----------:|\n", + "|scale_down_to |1. |(0, 1.] |0.005 |$^1$ |\n", + "|cc_weights_factor |1. |(0, 1.] |1. |$^2$ |\n", + "|areas_simulated |complete_area_list |All sublists of complete_area_list |complete_area_list |$^3$ |\n", + "|replace_non_simulated_areas |None |None, 'hom_poisson_stat', 'het_poisson_stat', 'het_current_nonstat' |'het_poisson_stat' |$^4$ |" ] }, { "cell_type": "markdown", - "id": "106a6a5e", + "id": "a2161477", "metadata": {}, "source": [ - "* Connection parameters (conn_params)" - ] - }, - { - "cell_type": "markdown", - "id": "41d80271-f60e-49f4-9759-f8ad26097b2d", - "metadata": {}, - "source": [ - "| Parameter | Parameter description | Variable | Value | Value description |\n", - "|:---------:|:----------------------|:---------------------------:|:------------------:|:------------------|\n", - "| | | 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": "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", - "| | | 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", - "| | | V0_mean | -150. | |\n", - "| | | V0_sd | 50. | |" - ] - }, - { - "cell_type": "markdown", - "id": "ea4e01aa", - "metadata": {}, - "source": [ - "* Network parameters (network_params)" - ] - }, - { - "cell_type": "markdown", - "id": "dc4ce111", - "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. `scale_down_to` <br>\n", + "`scale_down_to` is the down-scaling factor 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> Its deafualt value if 1. meaning full scale simulation. <br> In the pre-set downscale version, it's set as 0.005, where the numer of neurons and indegrees are both scaled down to 0.5% of its full scale amount, 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 <br> \n", + "2. `cc_weights_factor` <br>\n", + "This scaling factor controls the cortico-cortical synaptic strength. <br> By default it's set as 1.0, where the inter-area synaptic strength is the same as the intra-areal. <br> **Important**: This factor changes the network activity from ground state to metastable state. <br>\n", + "3. `areas_simulated` <br>\n", + "This parameter specifies the cortical areas included in the simulation process. Its default value is `complete_area_list` meaning all the areas in the complete_area_list will be actually simulated. <br>\n", + "complete_area_list = ['V1', 'V2', 'VP', 'V3', 'V3A', 'MT', 'V4t', 'V4', 'VOT', 'MSTd', 'PIP', 'PO', 'DP', 'MIP', 'MDP', 'VIP', 'LIP', 'PITv', 'PITd', 'MSTl', 'CITv', 'CITd', 'FEF', 'TF', 'AITv', 'FST', '7a', 'STPp', 'STPa', '46', 'AITd', 'TH'] <br>\n", + "The value assigned to simulation_areas can be any sublist of the `compete_area_list` specifying areas a user want to include in his/her simulation. <br>\n", + "4. `replace_non_simulated_areas` <br>\n", + "The paramter `replace_non_simulated_areas` defines how non-simulated areas will be replaced. <br> It's set as None by default when the parameter areas_simulated is set as full_area_list where all areas will be simulated so that no areas need to be replaced. <br> Other options are: 'hom_poisson_stat', 'het_poisson_stat', and 'het_current_nonstat'. 'hom_poisson_stat' is a manually set parameter which can be tuned. When it's set as 'het_poisson_stat' or 'het_current_nonstat', the data to replace the cortico-cortical input is loaded from 'replace_cc_input_source' which is the firing rates of our full scale simulation results. The differenc between 'het_poisson_stat' and 'het_current_nonstat' is that 'het_poisson_stat' is the mean of the time-series firing rate so that it's static, yet 'het_current_nonstat' is time-varying specific current, which is varying by time. " ] }, { "cell_type": "code", - "execution_count": null, - "id": "6e4bed8d", + "execution_count": 5, + "id": "60265d52", "metadata": {}, "outputs": [], "source": [ - "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.}" + "# Downscaling factor\n", + "scale_down_to = 0.005 # Change it to 1. for running the fullscale network\n", + "\n", + "# Scaling factor for cortico-cortical connections (chi) \n", + "cc_weights_factor = 1.\n", + "\n", + "# Cortical areas included in the simulation\n", + "areas_simulated = ['V1', 'V2', 'VP', 'V3', 'V3A', 'MT', 'V4t', 'V4', 'VOT', 'MSTd', 'PIP', 'PO', 'DP', 'MIP', 'MDP', 'VIP', 'LIP', 'PITv', 'PITd', 'MSTl', 'CITv', 'CITd', 'FEF', 'TF', 'AITv', 'FST', '7a', 'STPp', 'STPa', '46', 'AITd', 'TH']\n", + "\n", + "# Firing rates used to replace the non-simulated areas\n", + "replace_non_simulated_areas = 'het_poisson_stat'" ] }, { - "cell_type": "code", - "execution_count": null, - "id": "7e4ede2c", + "cell_type": "markdown", + "id": "de11b07f", "metadata": {}, - "outputs": [], "source": [ - "input_params = {'rate_ext': 10.}" + "### 1.2. Default parameters <a class=\"anchor\" id=\"section_1_2\"></a>\n", + "We try our best not to confuse users with too many parameters. However, if you want to change more parameters and explore the model, you can do so by passing a dictionary to the `default_params` argument of the `MultiAreaModel` class." ] }, { "cell_type": "code", - "execution_count": null, - "id": "f69ad836-70b8-4ebe-b46a-25f48dc3ca7c", + "execution_count": 6, + "id": "6e4bed8d", "metadata": {}, "outputs": [], "source": [ + "# Connection parameters (conn_params)\n", + "conn_params = {\n", + " # # It defines how non-simulated areas will be replaced\n", + " # 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", + " 'replace_non_simulated_areas': 'het_poisson_stat', \n", + "\n", + " 'g': -11.,\n", + " 'K_stable': 'K_stable.npy',\n", + " # Increase the external input to 2/3E and 5E in area TH\n", + " 'fac_nu_ext_TH': 1.2,\n", + " # Increase the external Poisson indegree onto 5E\n", + " 'fac_nu_ext_5E': 1.125,\n", + " # Increase the external Poisson indegree onto 6E\n", + " 'fac_nu_ext_6E': 1.41666667,\n", + " # Adjust the average indegree in V1 based on monkey data\n", + " 'av_indegree_V1': 3950.\n", + "}\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": null, - "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 paramters (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": null, - "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": null, - "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}" ] }, @@ -405,7 +329,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>" ] }, { @@ -413,15 +337,75 @@ "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": null, + "execution_count": 7, "id": "ab25f9f8", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Initializing network from dictionary.\n", + "RAND_DATA_LABEL 3497\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" + ] + } + ], "source": [ "M = MultiAreaModel(network_params, simulation=True,\n", " sim_spec=sim_params,\n", @@ -434,15 +418,24 @@ "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": null, + "execution_count": 8, "id": "6a7ddf0e", "metadata": {}, - "outputs": [], + "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" + ] + } + ], "source": [ "p, r = M.theory.integrate_siegert()\n", "print(\"Mean-field theory predicts an average \"\n", @@ -454,7 +447,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>" ] }, { @@ -462,7 +455,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" ] }, { @@ -470,19 +465,19 @@ "id": "b7396606", "metadata": {}, "source": [ - "#### 3.1 Node indegrees" + "#### 2.3.1 Node indegrees" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 9, "id": "6316ac24", "metadata": {}, "outputs": [], "source": [ "# Dictionary of nodes indegrees organized as:\n", "# {<source_area>: {<source_pop>: {<target_area>: {<target_pop>: indegree_values}}}}\n", - "M.K" + "# M.K" ] }, { @@ -490,19 +485,19 @@ "id": "253a2aba", "metadata": {}, "source": [ - "#### 3.2 Synapses" + "#### 2.3.2 Synapses" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 10, "id": "445a722a", "metadata": {}, "outputs": [], "source": [ "# Dictionary of synapses that target neurons receive, it is organized as:\n", "# {<source_area>: {<source_pop>: {<target_area>: {<target_pop>: number_of_synapses}}}}\n", - "M.synapses" + "# M.synapses" ] }, { @@ -526,15 +521,90 @@ "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": null, + "execution_count": 11, "id": "15778e9c", "metadata": {}, - "outputs": [], + "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.20 MB\n", + "Rank 0: created area V2 with 0 local nodes\n", + "Memory after V2 : 1938.80 MB\n", + "Rank 0: created area VP with 0 local nodes\n", + "Memory after VP : 1967.95 MB\n", + "Rank 0: created area V3 with 0 local nodes\n", + "Memory after V3 : 1996.29 MB\n", + "Rank 0: created area V3A with 0 local nodes\n", + "Memory after V3A : 2016.27 MB\n", + "Rank 0: created area MT with 0 local nodes\n", + "Memory after MT : 2041.77 MB\n", + "Rank 0: created area V4t with 0 local nodes\n", + "Memory after V4t : 2066.75 MB\n", + "Rank 0: created area V4 with 0 local nodes\n", + "Memory after V4 : 2093.70 MB\n", + "Rank 0: created area VOT with 0 local nodes\n", + "Memory after VOT : 2119.05 MB\n", + "Rank 0: created area MSTd with 0 local nodes\n", + "Memory after MSTd : 2140.52 MB\n", + "Rank 0: created area PIP with 0 local nodes\n", + "Memory after PIP : 2161.88 MB\n", + "Rank 0: created area PO with 0 local nodes\n", + "Memory after PO : 2183.38 MB\n", + "Rank 0: created area DP with 0 local nodes\n", + "Memory after DP : 2203.54 MB\n", + "Rank 0: created area MIP with 0 local nodes\n", + "Memory after MIP : 2225.19 MB\n", + "Rank 0: created area MDP with 0 local nodes\n", + "Memory after MDP : 2246.54 MB\n", + "Rank 0: created area VIP with 0 local nodes\n", + "Memory after VIP : 2268.48 MB\n", + "Rank 0: created area LIP with 0 local nodes\n", + "Memory after LIP : 2292.54 MB\n", + "Rank 0: created area PITv with 0 local nodes\n", + "Memory after PITv : 2317.88 MB\n", + "Rank 0: created area PITd with 0 local nodes\n", + "Memory after PITd : 2343.10 MB\n", + "Rank 0: created area MSTl with 0 local nodes\n", + "Memory after MSTl : 2364.56 MB\n", + "Rank 0: created area CITv with 0 local nodes\n", + "Memory after CITv : 2383.62 MB\n", + "Rank 0: created area CITd with 0 local nodes\n", + "Memory after CITd : 2402.95 MB\n", + "Rank 0: created area FEF with 0 local nodes\n", + "Memory after FEF : 2424.42 MB\n", + "Rank 0: created area TF with 0 local nodes\n", + "Memory after TF : 2440.07 MB\n", + "Rank 0: created area AITv with 0 local nodes\n", + "Memory after AITv : 2462.74 MB\n", + "Rank 0: created area FST with 0 local nodes\n", + "Memory after FST : 2479.47 MB\n", + "Rank 0: created area 7a with 0 local nodes\n", + "Memory after 7a : 2500.68 MB\n", + "Rank 0: created area STPp with 0 local nodes\n", + "Memory after STPp : 2519.40 MB\n", + "Rank 0: created area STPa with 0 local nodes\n", + "Memory after STPa : 2538.59 MB\n", + "Rank 0: created area 46 with 0 local nodes\n", + "Memory after 46 : 2553.95 MB\n", + "Rank 0: created area AITd with 0 local nodes\n", + "Memory after AITd : 2576.51 MB\n", + "Rank 0: created area TH with 0 local nodes\n", + "Memory after TH : 2589.22 MB\n", + "Created areas and internal connections in 2.15 seconds.\n", + "Created cortico-cortical connections in 22.44 seconds.\n", + "Simulated network in 59.50 seconds.\n" + ] + } + ], "source": [ "# run the simulation, depending on the model parameter and downscale ratio, the running time varies largely.\n", "M.simulation.simulate()" @@ -561,7 +631,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>" ] }, { @@ -574,7 +644,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 12, "id": "dc3b1820", "metadata": {}, "outputs": [], @@ -609,17 +679,17 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 13, "id": "e7eb052e", "metadata": {}, "outputs": [], "source": [ - "conns = nest.GetConnections()\n", - "conns_sparse_matrix = conns.get(['source', 'target', 'weight'])\n", + "# conns = nest.GetConnections()\n", + "# conns_sparse_matrix = conns.get(['source', 'target', 'weight'])\n", "\n", - "srcs = conns_sparse_matrix['source']\n", - "tgts = conns_sparse_matrix['target']\n", - "weights = conns_sparse_matrix['weight']" + "# srcs = conns_sparse_matrix['source']\n", + "# tgts = conns_sparse_matrix['target']\n", + "# weights = conns_sparse_matrix['weight']" ] }, { @@ -632,42 +702,18 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 14, "id": "902f2800", "metadata": {}, "outputs": [], "source": [ - "# Open the file using a with statement\n", - "with open(os.path.join(M.simulation.data_dir,\"recordings/network_gids.txt\"), \"r\") as file:\n", - " # Read the contents of the file\n", - " gids = file.read()\n", + "# # Open the file using a with statement\n", + "# with open(os.path.join(M.simulation.data_dir,\"recordings/network_gids.txt\"), \"r\") as file:\n", + "# # Read the contents of the file\n", + "# gids = file.read()\n", "\n", - "# Print the contents\n", - "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" + "# # Print the contents\n", + "# print(gids)" ] }, { @@ -680,7 +726,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 15, "id": "cb8e3edd", "metadata": {}, "outputs": [], @@ -698,7 +744,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 16, "id": "9590223b", "metadata": {}, "outputs": [], @@ -709,18 +755,26 @@ }, { "cell_type": "markdown", - "id": "ca603daf", + "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>" ] }, { @@ -728,15 +782,39 @@ "id": "38ddd973", "metadata": {}, "source": [ - "### 1. Instantaneous and mean rate" + "### 4.1. Instantaneous and mean rate\n", + "avaerage over all areas" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 17, "id": "bea30fc8", "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "<matplotlib.legend.Legend at 0x7fbae4abbfa0>" + ] + }, + "execution_count": 17, + "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" + } + ], "source": [ "fig, ax = plt.subplots()\n", "ax.plot(tsteps, rate)\n", @@ -749,6 +827,193 @@ "ax.legend()" ] }, + { + "cell_type": "markdown", + "id": "ae19bcc3", + "metadata": {}, + "source": [ + "### 4.2 Raster plot of spiking activity for single area\n", + "Raster plot of spiking activity of 3% of the neurons in area V1 (A), V2 (B), and FEF (C). Blue: excitatory neurons, red: inhibitory neurons. (D-F) Spiking statistics across all 32 areas for the respective populations shown as area-averaged box plots. Crosses: medians, boxes: interquartile range (IQR), whiskers extend to the most extremeobservat ions within 1.5×IQR beyond the IQR." + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "1da18fee", + "metadata": {}, + "outputs": [ + { + "ename": "AttributeError", + "evalue": "'MultiAreaModel' object has no attribute 'analysis'", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mAttributeError\u001b[0m Traceback (most recent call last)", + "Input \u001b[0;32mIn [18]\u001b[0m, in \u001b[0;36m<module>\u001b[0;34m\u001b[0m\n\u001b[1;32m 20\u001b[0m area \u001b[38;5;241m=\u001b[39m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mV1\u001b[39m\u001b[38;5;124m'\u001b[39m\n\u001b[1;32m 21\u001b[0m frac_neurons \u001b[38;5;241m=\u001b[39m \u001b[38;5;241m0.03\u001b[39m\n\u001b[0;32m---> 22\u001b[0m \u001b[43mM\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43manalysis\u001b[49m\u001b[38;5;241m.\u001b[39msingle_dot_display(area, frac_neurons, t_min\u001b[38;5;241m=\u001b[39m\u001b[38;5;241m500.\u001b[39m, t_max\u001b[38;5;241m=\u001b[39m\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mT\u001b[39m\u001b[38;5;124m'\u001b[39m)\n\u001b[1;32m 24\u001b[0m area \u001b[38;5;241m=\u001b[39m \u001b[38;5;124m'\u001b[39m\u001b[38;5;124mV2\u001b[39m\u001b[38;5;124m'\u001b[39m\n\u001b[1;32m 25\u001b[0m frac_neurons \u001b[38;5;241m=\u001b[39m \u001b[38;5;241m0.03\u001b[39m\n", + "\u001b[0;31mAttributeError\u001b[0m: 'MultiAreaModel' object has no attribute 'analysis'" + ] + } + ], + "source": [ + "\"\"\"\n", + "Create raster display of a single area with populations stacked\n", + "onto each other. Excitatory neurons in blue, inhibitory\n", + "neurons in red.\n", + "\n", + "Parameters\n", + "----------\n", + "area : string {area}\n", + " Area to be plotted.\n", + "frac_neurons : float, [0,1]\n", + " Fraction of cells to be considered.\n", + "t_min : float, optional\n", + " Minimal time in ms of spikes to be shown. Defaults to 0 ms.\n", + "t_max : float, optional\n", + " Minimal time in ms of spikes to be shown. Defaults to simulation time.\n", + "output : {'pdf', 'png', 'eps'}, optional\n", + " If given, the function stores the plot to a file of the given format.\n", + "\n", + "\"\"\"\n", + "\n", + " def init_analysis(self, ana_spec):\n", + " assert(hasattr(self, 'simulation'))\n", + " if 'load_areas' in ana_spec:\n", + " load_areas = ana_spec['load_areas']\n", + " else:\n", + " load_areas = None\n", + " if 'data_list' in ana_spec:\n", + " data_list = ana_spec['data_list']\n", + " else:\n", + " data_list = ['spikes']\n", + " self.analysis = Analysis(self, self.simulation,\n", + " data_list=data_list,\n", + " load_areas=load_areas)\n", + " \n", + "area = 'V1'\n", + "frac_neurons = 0.03\n", + "M.analysis.single_dot_display(area, frac_neurons, t_min=500., t_max='T')\n", + "\n", + "area = 'V2'\n", + "frac_neurons = 0.03\n", + "M.analysis.single_dot_display(area, frac_neurons, t_min=500., t_max='T')\n", + "\n", + "area = 'FEF'\n", + "frac_neurons = 0.03\n", + "M.analysis.single_dot_display(area, frac_neurons, t_min=500., t_max='T')" + ] + }, + { + "cell_type": "markdown", + "id": "019d805e", + "metadata": {}, + "source": [ + "### 4.3 Population-averaged firing rates" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "95c57114", + "metadata": {}, + "outputs": [], + "source": [ + "\"\"\"\n", + "Calculate time-averaged population rates and store them in member pop_rates.\n", + "If the rates had previously been stored with the same\n", + "parameters, they are loaded from file.\n", + "\n", + "Parameters\n", + "----------\n", + "t_min : float, optional\n", + " Minimal time in ms of the simulation to take into account\n", + " for the calculation. Defaults to 500 ms.\n", + "t_max : float, optional\n", + " Maximal time in ms of the simulation to take into account\n", + " for the calculation. Defaults to the simulation time.\n", + "compute_stat : bool, optional\n", + " If set to true, the mean and variance of the population rate\n", + " is calculated. Defaults to False.\n", + " Caution: Setting to True slows down the computation.\n", + "areas : list, optional\n", + " Which areas to include in the calculcation.\n", + " Defaults to all loaded areas.\n", + "pops : list or {'complete'}, optional\n", + " Which populations to include in the calculation.\n", + " If set to 'complete', all populations the respective areas\n", + " are included. Defaults to 'complete'.\n", + "\"\"\"\n", + "M.analysis.create_pop_rates(t_min=1000.)\n", + "# M.analysis.save()" + ] + }, + { + "cell_type": "markdown", + "id": "06a595de", + "metadata": {}, + "source": [ + "### 4.4 Average pairwise correlation coefficients of spiking activity" + ] + }, + { + "cell_type": "markdown", + "id": "a3847e67", + "metadata": {}, + "source": [ + "### 4.5 Irregularity measured by revised local variation LvR averaged across neurons" + ] + }, + { + "cell_type": "markdown", + "id": "90ae8f4c", + "metadata": {}, + "source": [ + "### 4.6 Time series of population- and area-averaged firing rates\n", + "Area-averaged firing rates, shown as raw binned spike histograms with 1ms bin width (gray) and convolved histograms, with aGaussian kernel (black) of optimal width" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "bd9d4912", + "metadata": {}, + "outputs": [], + "source": [ + "\"\"\"\n", + "Calculate time series of population- and area-averaged firing rates.\n", + "Uses ah.pop_rate_time_series.\n", + "If the rates have previously been stored with the\n", + "same parameters, they are loaded from file.\n", + "\n", + "\n", + "Parameters\n", + "----------\n", + "t_min : float, optional\n", + " Minimal time in ms of the simulation to take into account\n", + " for the calculation. Defaults to 500 ms.\n", + "t_max : float, optional\n", + " Maximal time in ms of the simulation to take into account\n", + " for the calculation. Defaults to the simulation time.\n", + "areas : list, optional\n", + " Which areas to include in the calculcation.\n", + " Defaults to all loaded areas.\n", + "pops : list or {'complete'}, optional\n", + " Which populations to include in the calculation.\n", + " If set to 'complete', all populations the respective areas\n", + " are included. Defaults to 'complete'.\n", + "kernel : {'gauss_time_window', 'alpha_time_window', 'rect_time_window'}, optional\n", + " Specifies the kernel to be convolved with the spike histogram.\n", + " Defaults to 'binned', which corresponds to no convolution.\n", + "resolution: float, optional\n", + " Width of the convolution kernel. Specifically it correponds to:\n", + " - 'binned' : bin width of the histogram\n", + " - 'gauss_time_window' : sigma\n", + " - 'alpha_time_window' : time constant of the alpha function\n", + " - 'rect_time_window' : width of the moving rectangular function\n", + "\"\"\"\n", + "M.analysisi.create_rate_time_series(t_max=1000.)\n", + "# M.analysis.save()" + ] + }, { "cell_type": "markdown", "id": "ef74ca3e-98dc-49c9-a4a0-2c640e29b1d9", diff --git a/multi-area-model.ipynb b/multi-area-model.ipynb index c3a3036d2dcb7e59afd3bcc21e86f7a42265e538..ca06226bdef60d7f794a8fe162ad87ae7d43b7bd 100644 --- a/multi-area-model.ipynb +++ b/multi-area-model.ipynb @@ -41,6 +41,7 @@ "cell_type": "markdown", "id": "d782e527", "metadata": { + "jp-MarkdownHeadingCollapsed": true, "tags": [] }, "source": [ @@ -202,12 +203,12 @@ "id": "4f67c1ba", "metadata": {}, "source": [ - "|Parameter |Variable |Value |Value description |\n", - "|:--------------------------------:|:--------------------------:|:------------------:|:------------------|\n", - "|Scaling factor |scale_down_to |0.005 |$^1$ |\n", - "|Ground state to metastable state |cc_weights_factor |1.0 |$^2$ |\n", - "|Replace non-simulated areas |replace_non_simulated_areas |'het_poisson_stat' |$^3$ |\n", - "|Simulation areas |sim_areas | |$^4$ |" + "|Parameter |Default value |Value range/options |Value assigned |Description |\n", + "|:----------------------------:|:-----------------------:|:--------------------------------------------------------------------:|:------------------:|:-----------:|\n", + "|scale_down_to |1. |(0, 1.] |0.005 |$^1$ |\n", + "|cc_weights_factor |1. |(0, 1.] |1. |$^2$ |\n", + "|areas_simulated |complete_area_list |All sublists of complete_area_list |complete_area_list |$^3$ |\n", + "|replace_non_simulated_areas |None |None, 'hom_poisson_stat', 'het_poisson_stat', 'het_current_nonstat' |'het_poisson_stat' |$^4$ |" ] }, { @@ -215,16 +216,16 @@ "id": "a2161477", "metadata": {}, "source": [ - "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) specify the cortical areas included in the simulation process." + "1. `scale_down_to` <br>\n", + "`scale_down_to` is the down-scaling factor 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> Its deafualt value if 1. meaning full scale simulation. <br> In the pre-set downscale version, it's set as 0.005, where the numer of neurons and indegrees are both scaled down to 0.5% of its full scale amount, 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 <br> \n", + "2. `cc_weights_factor` <br>\n", + "This scaling factor controls the cortico-cortical synaptic strength. <br> By default it's set as 1.0, where the inter-area synaptic strength is the same as the intra-areal. <br> **Important**: This factor changes the network activity from ground state to metastable state. <br>\n", + "3. `areas_simulated` <br>\n", + "This parameter specifies the cortical areas included in the simulation process. Its default value is `complete_area_list` meaning all the areas in the complete_area_list will be actually simulated. <br>\n", + "complete_area_list = ['V1', 'V2', 'VP', 'V3', 'V3A', 'MT', 'V4t', 'V4', 'VOT', 'MSTd', 'PIP', 'PO', 'DP', 'MIP', 'MDP', 'VIP', 'LIP', 'PITv', 'PITd', 'MSTl', 'CITv', 'CITd', 'FEF', 'TF', 'AITv', 'FST', '7a', 'STPp', 'STPa', '46', 'AITd', 'TH'] <br>\n", + "The value assigned to simulation_areas can be any sublist of the `compete_area_list` specifying areas a user want to include in his/her simulation. <br>\n", + "4. `replace_non_simulated_areas` <br>\n", + "The paramter `replace_non_simulated_areas` defines how non-simulated areas will be replaced. <br> It's set as None by default when the parameter areas_simulated is set as full_area_list where all areas will be simulated so that no areas need to be replaced. <br> Other options are: 'hom_poisson_stat', 'het_poisson_stat', and 'het_current_nonstat'. 'hom_poisson_stat' is a manually set parameter which can be tuned. When it's set as 'het_poisson_stat' or 'het_current_nonstat', the data to replace the cortico-cortical input is loaded from 'replace_cc_input_source' which is the firing rates of our full scale simulation results. The differenc between 'het_poisson_stat' and 'het_current_nonstat' is that 'het_poisson_stat' is the mean of the time-series firing rate so that it's static, yet 'het_current_nonstat' is time-varying specific current, which is varying by time. " ] }, { @@ -234,14 +235,17 @@ "metadata": {}, "outputs": [], "source": [ - "# Model parameters\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**.\n", + "# Downscaling factor\n", "scale_down_to = 0.005 # Change it to 1. for running the fullscale network\n", + "\n", "# Scaling factor for cortico-cortical connections (chi) \n", - "# 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.\n", "cc_weights_factor = 1.\n", - "replace_non_simulated_areas = 'het_poisson_stat'\n", - "# sim_areas = " + "\n", + "# Cortical areas included in the simulation\n", + "areas_simulated = ['V1', 'V2', 'VP', 'V3', 'V3A', 'MT', 'V4t', 'V4', 'VOT', 'MSTd', 'PIP', 'PO', 'DP', 'MIP', 'MDP', 'VIP', 'LIP', 'PITv', 'PITd', 'MSTl', 'CITv', 'CITd', 'FEF', 'TF', 'AITv', 'FST', '7a', 'STPp', 'STPa', '46', 'AITd', 'TH']\n", + "\n", + "# Firing rates used to replace the non-simulated areas\n", + "replace_non_simulated_areas = 'het_poisson_stat'" ] }, { @@ -250,8 +254,7 @@ "metadata": {}, "source": [ "### 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." + "We try our best not to confuse users with too many parameters. However, if you want to change more parameters and explore the model, you can do so by passing a dictionary to the `default_params` argument of the `MultiAreaModel` class." ] }, {