From 525d605237020a82bc267a3ac776e56f78f88867 Mon Sep 17 00:00:00 2001 From: michaeldeistler Date: Wed, 13 Nov 2024 16:50:36 +0100 Subject: [PATCH] update tutorial --- docs/tutorials/00_jaxley_api.ipynb | 1766 +++++++++++++++++++++------- 1 file changed, 1347 insertions(+), 419 deletions(-) diff --git a/docs/tutorials/00_jaxley_api.ipynb b/docs/tutorials/00_jaxley_api.ipynb index bf89e899..6d1e7958 100644 --- a/docs/tutorials/00_jaxley_api.ipynb +++ b/docs/tutorials/00_jaxley_api.ipynb @@ -2,7 +2,7 @@ "cells": [ { "cell_type": "markdown", - "id": "597dfe2a-d5fe-4e3d-8fb5-bb415126b81a", + "id": "c64d06f3", "metadata": {}, "source": [ "# Basics of Jaxley" @@ -10,7 +10,7 @@ }, { "cell_type": "markdown", - "id": "c9db67ff-6334-4435-9092-e7c71ec71a93", + "id": "f783df05", "metadata": {}, "source": [ "In this tutorial, we will introduce you to the basic concepts of Jaxley.\n", @@ -62,7 +62,7 @@ }, { "cell_type": "markdown", - "id": "7177950f-d702-4d8d-b69e-bfb06677037f", + "id": "e10d181a", "metadata": {}, "source": [ "First, we import the relevant libraries:" @@ -70,8 +70,8 @@ }, { "cell_type": "code", - "execution_count": 94, - "id": "deb594f4", + "execution_count": 1, + "id": "d674fac6", "metadata": {}, "outputs": [], "source": [ @@ -89,24 +89,24 @@ }, { "cell_type": "markdown", - "id": "415b6741", + "id": "ec52a374", "metadata": {}, "source": [ "# Modules\n", "\n", "In Jaxley, we heavily rely on the concept of Modules to build biophyiscal models of neural systems at various scales.\n", - "Jaxley implements 4 Module types:\n", - "- `Compartment`\n", - "- `Branch`\n", - "- `Cell`\n", - "- `Network`\n", + "Jaxley implements four types of Modules:\n", + "- `Compartment` \n", + "- `Branch` \n", + "- `Cell` \n", + "- `Network` \n", "\n", "Modules can be connected together to build increasingly detailed and complex models. `Compartment` -> `Branch` -> `Cell` -> `Network`." ] }, { "cell_type": "markdown", - "id": "7480ea5e", + "id": "bef2438a", "metadata": {}, "source": [ "`Compartment`s are the atoms of biophysical models in Jaxley. All mechanisms and synaptic connections live on the level of `Compartment`s and can already be simulated using `jx.integrate` on their own. Everything you do in Jaxley starts with a `Compartment`." @@ -114,55 +114,57 @@ }, { "cell_type": "code", - "execution_count": 95, - "id": "535057cf", + "execution_count": 2, + "id": "bf375e91", "metadata": {}, "outputs": [], "source": [ - "comp = jx.Compartment() # single compartment model" + "comp = jx.Compartment() # single compartment model." ] }, { "cell_type": "markdown", - "id": "469e25a3", + "id": "c62b5f98", "metadata": {}, "source": [ - "Mutliple `Compartments` can be connected together to form longer, linear segments / cables, we call `Branch`es and are essentially equivalent to sections in `NEURON`." + "Mutliple `Compartments` can be connected together to form longer, linear segments / cables, which we call `Branch`es and are equivalent to sections in `NEURON`." ] }, { "cell_type": "code", - "execution_count": 96, - "id": "0476a173", + "execution_count": 61, + "id": "2ac9ae8c", "metadata": {}, "outputs": [], "source": [ "nseg = 4\n", - "branch = jx.Branch([comp]*nseg)" + "branch = jx.Branch([comp] * nseg)" ] }, { "cell_type": "markdown", - "id": "63c35e7b", + "id": "c48a7175", "metadata": {}, "source": [ - "In order to construct cell morphologies in Jaxley, multiple `Branches` can to be connected together using the `Cell` primitive." + "In order to construct cell morphologies in Jaxley, multiple `Branches` can to be connected together as a `Cell`:" ] }, { "cell_type": "code", - "execution_count": 97, - "id": "6f4c5202", + "execution_count": 62, + "id": "6827aefe", "metadata": {}, "outputs": [], "source": [ - "parents = [-1,0,0] # soma = -1, since it has no parents and both dendrites connect to the soma (0). \n", - "cell = jx.Cell([branch]*len(parents), parents)" + "# -1 indicates that the first branch has no parent branch.\n", + "# The other two branches both have the 0-eth branch as their parent.\n", + "parents = [-1, 0, 0]\n", + "cell = jx.Cell([branch] * len(parents), parents)" ] }, { "cell_type": "markdown", - "id": "3830cf70", + "id": "b9aca362", "metadata": {}, "source": [ "Finally, several `Cell`s can be grouped together to form a `Network`, which can than be connected together using `Synpase`s." @@ -170,8 +172,8 @@ }, { "cell_type": "code", - "execution_count": 98, - "id": "3399a716", + "execution_count": 63, + "id": "10cef1f8", "metadata": {}, "outputs": [ { @@ -180,7 +182,7 @@ "(2, 6, 24)" ] }, - "execution_count": 98, + "execution_count": 63, "metadata": {}, "output_type": "execute_result" } @@ -194,19 +196,19 @@ }, { "cell_type": "markdown", - "id": "30eb8fd5", + "id": "34336dec", "metadata": {}, "source": [ - "`Module`s carry around the information about their current state and parameters in two Dataframes called `nodes` and `edges`.\n", - "`nodes` contains all the information that we associate with compartments in the model (each row corresponds to a compartment) and `edges` all the information relevant to synapses.\n", + "Every module tracks information about its current state and parameters in two Dataframes called `nodes` and `edges`.\n", + "`nodes` contains all the information that we associate with compartments in the model (each row corresponds to one compartment) and `edges` tracks all the information relevant to synapses.\n", "\n", "This means that you can easily keep track of the current state of your `Module` and how it changes at all times." ] }, { "cell_type": "code", - "execution_count": 99, - "id": "701364b0", + "execution_count": 64, + "id": "bc7ada2e", "metadata": {}, "outputs": [ { @@ -238,6 +240,15 @@ " axial_resistivity\n", " capacitance\n", " v\n", + " x\n", + " y\n", + " ...\n", + " Na_m\n", + " Na_h\n", + " K\n", + " K_gK\n", + " eK\n", + " K_n\n", " global_cell_index\n", " global_branch_index\n", " global_comp_index\n", @@ -251,10 +262,19 @@ " 0\n", " 0\n", " 10.0\n", - " 1.0\n", + " 0.020703\n", " 5000.0\n", " 1.0\n", " -70.0\n", + " NaN\n", + " NaN\n", + " ...\n", + " NaN\n", + " NaN\n", + " False\n", + " NaN\n", + " NaN\n", + " NaN\n", " 0\n", " 0\n", " 0\n", @@ -266,10 +286,19 @@ " 0\n", " 1\n", " 10.0\n", - " 1.0\n", + " 0.020703\n", " 5000.0\n", " 1.0\n", " -70.0\n", + " NaN\n", + " NaN\n", + " ...\n", + " NaN\n", + " NaN\n", + " False\n", + " NaN\n", + " NaN\n", + " NaN\n", " 0\n", " 0\n", " 1\n", @@ -281,10 +310,19 @@ " 0\n", " 2\n", " 10.0\n", - " 1.0\n", + " 0.020703\n", " 5000.0\n", " 1.0\n", " -70.0\n", + " NaN\n", + " NaN\n", + " ...\n", + " NaN\n", + " NaN\n", + " False\n", + " NaN\n", + " NaN\n", + " NaN\n", " 0\n", " 0\n", " 2\n", @@ -296,10 +334,19 @@ " 0\n", " 3\n", " 10.0\n", - " 1.0\n", + " 0.020703\n", " 5000.0\n", " 1.0\n", " -70.0\n", + " NaN\n", + " NaN\n", + " ...\n", + " NaN\n", + " NaN\n", + " False\n", + " NaN\n", + " NaN\n", + " NaN\n", " 0\n", " 0\n", " 3\n", @@ -311,10 +358,19 @@ " 1\n", " 0\n", " 10.0\n", - " 1.0\n", + " 0.020703\n", " 5000.0\n", " 1.0\n", " -70.0\n", + " NaN\n", + " NaN\n", + " ...\n", + " NaN\n", + " NaN\n", + " False\n", + " NaN\n", + " NaN\n", + " NaN\n", " 0\n", " 1\n", " 4\n", @@ -326,10 +382,19 @@ " 1\n", " 1\n", " 10.0\n", - " 1.0\n", + " 0.020703\n", " 5000.0\n", " 1.0\n", " -70.0\n", + " NaN\n", + " NaN\n", + " ...\n", + " NaN\n", + " NaN\n", + " False\n", + " NaN\n", + " NaN\n", + " NaN\n", " 0\n", " 1\n", " 5\n", @@ -341,10 +406,19 @@ " 1\n", " 2\n", " 10.0\n", - " 1.0\n", + " 0.020703\n", " 5000.0\n", " 1.0\n", " -70.0\n", + " NaN\n", + " NaN\n", + " ...\n", + " NaN\n", + " NaN\n", + " False\n", + " NaN\n", + " NaN\n", + " NaN\n", " 0\n", " 1\n", " 6\n", @@ -356,10 +430,19 @@ " 1\n", " 3\n", " 10.0\n", - " 1.0\n", + " 0.020703\n", " 5000.0\n", " 1.0\n", " -70.0\n", + " NaN\n", + " NaN\n", + " ...\n", + " NaN\n", + " NaN\n", + " False\n", + " NaN\n", + " NaN\n", + " NaN\n", " 0\n", " 1\n", " 7\n", @@ -371,10 +454,19 @@ " 2\n", " 0\n", " 10.0\n", - " 1.0\n", + " 0.020703\n", " 5000.0\n", " 1.0\n", " -70.0\n", + " NaN\n", + " NaN\n", + " ...\n", + " NaN\n", + " NaN\n", + " False\n", + " NaN\n", + " NaN\n", + " NaN\n", " 0\n", " 2\n", " 8\n", @@ -386,10 +478,19 @@ " 2\n", " 1\n", " 10.0\n", - " 1.0\n", + " 0.020703\n", " 5000.0\n", " 1.0\n", " -70.0\n", + " NaN\n", + " NaN\n", + " ...\n", + " NaN\n", + " NaN\n", + " False\n", + " NaN\n", + " NaN\n", + " NaN\n", " 0\n", " 2\n", " 9\n", @@ -401,10 +502,19 @@ " 2\n", " 2\n", " 10.0\n", - " 1.0\n", + " 0.020703\n", " 5000.0\n", " 1.0\n", " -70.0\n", + " NaN\n", + " NaN\n", + " ...\n", + " NaN\n", + " NaN\n", + " False\n", + " NaN\n", + " NaN\n", + " NaN\n", " 0\n", " 2\n", " 10\n", @@ -416,10 +526,19 @@ " 2\n", " 3\n", " 10.0\n", - " 1.0\n", + " 0.020703\n", " 5000.0\n", " 1.0\n", " -70.0\n", + " NaN\n", + " NaN\n", + " ...\n", + " NaN\n", + " NaN\n", + " False\n", + " NaN\n", + " NaN\n", + " NaN\n", " 0\n", " 2\n", " 11\n", @@ -431,10 +550,19 @@ " 0\n", " 0\n", " 10.0\n", - " 1.0\n", + " 0.020703\n", " 5000.0\n", " 1.0\n", " -70.0\n", + " NaN\n", + " NaN\n", + " ...\n", + " NaN\n", + " NaN\n", + " False\n", + " NaN\n", + " NaN\n", + " NaN\n", " 1\n", " 3\n", " 12\n", @@ -446,10 +574,19 @@ " 0\n", " 1\n", " 10.0\n", - " 1.0\n", + " 0.020703\n", " 5000.0\n", " 1.0\n", " -70.0\n", + " NaN\n", + " NaN\n", + " ...\n", + " NaN\n", + " NaN\n", + " False\n", + " NaN\n", + " NaN\n", + " NaN\n", " 1\n", " 3\n", " 13\n", @@ -461,10 +598,19 @@ " 0\n", " 2\n", " 10.0\n", - " 1.0\n", + " 0.020703\n", " 5000.0\n", " 1.0\n", " -70.0\n", + " NaN\n", + " NaN\n", + " ...\n", + " NaN\n", + " NaN\n", + " False\n", + " NaN\n", + " NaN\n", + " NaN\n", " 1\n", " 3\n", " 14\n", @@ -476,10 +622,19 @@ " 0\n", " 3\n", " 10.0\n", - " 1.0\n", + " 0.020703\n", " 5000.0\n", " 1.0\n", " -70.0\n", + " NaN\n", + " NaN\n", + " ...\n", + " NaN\n", + " NaN\n", + " False\n", + " NaN\n", + " NaN\n", + " NaN\n", " 1\n", " 3\n", " 15\n", @@ -491,10 +646,19 @@ " 1\n", " 0\n", " 10.0\n", - " 1.0\n", + " 0.020703\n", " 5000.0\n", " 1.0\n", " -70.0\n", + " NaN\n", + " NaN\n", + " ...\n", + " NaN\n", + " NaN\n", + " False\n", + " NaN\n", + " NaN\n", + " NaN\n", " 1\n", " 4\n", " 16\n", @@ -506,10 +670,19 @@ " 1\n", " 1\n", " 10.0\n", - " 1.0\n", + " 0.020703\n", " 5000.0\n", " 1.0\n", " -70.0\n", + " NaN\n", + " NaN\n", + " ...\n", + " NaN\n", + " NaN\n", + " False\n", + " NaN\n", + " NaN\n", + " NaN\n", " 1\n", " 4\n", " 17\n", @@ -521,10 +694,19 @@ " 1\n", " 2\n", " 10.0\n", - " 1.0\n", + " 0.020703\n", " 5000.0\n", " 1.0\n", " -70.0\n", + " NaN\n", + " NaN\n", + " ...\n", + " NaN\n", + " NaN\n", + " False\n", + " NaN\n", + " NaN\n", + " NaN\n", " 1\n", " 4\n", " 18\n", @@ -536,10 +718,19 @@ " 1\n", " 3\n", " 10.0\n", - " 1.0\n", + " 0.020703\n", " 5000.0\n", " 1.0\n", " -70.0\n", + " NaN\n", + " NaN\n", + " ...\n", + " NaN\n", + " NaN\n", + " False\n", + " NaN\n", + " NaN\n", + " NaN\n", " 1\n", " 4\n", " 19\n", @@ -551,10 +742,19 @@ " 2\n", " 0\n", " 10.0\n", - " 1.0\n", + " 0.020703\n", " 5000.0\n", " 1.0\n", " -70.0\n", + " NaN\n", + " NaN\n", + " ...\n", + " NaN\n", + " NaN\n", + " False\n", + " NaN\n", + " NaN\n", + " NaN\n", " 1\n", " 5\n", " 20\n", @@ -566,10 +766,19 @@ " 2\n", " 1\n", " 10.0\n", - " 1.0\n", + " 0.020703\n", " 5000.0\n", " 1.0\n", " -70.0\n", + " NaN\n", + " NaN\n", + " ...\n", + " NaN\n", + " NaN\n", + " False\n", + " NaN\n", + " NaN\n", + " NaN\n", " 1\n", " 5\n", " 21\n", @@ -581,10 +790,19 @@ " 2\n", " 2\n", " 10.0\n", - " 1.0\n", + " 0.020703\n", " 5000.0\n", " 1.0\n", " -70.0\n", + " NaN\n", + " NaN\n", + " ...\n", + " NaN\n", + " NaN\n", + " False\n", + " NaN\n", + " NaN\n", + " NaN\n", " 1\n", " 5\n", " 22\n", @@ -596,10 +814,19 @@ " 2\n", " 3\n", " 10.0\n", - " 1.0\n", + " 0.020703\n", " 5000.0\n", " 1.0\n", " -70.0\n", + " NaN\n", + " NaN\n", + " ...\n", + " NaN\n", + " NaN\n", + " False\n", + " NaN\n", + " NaN\n", + " NaN\n", " 1\n", " 5\n", " 23\n", @@ -607,89 +834,118 @@ " \n", " \n", "\n", + "

24 rows × 28 columns

\n", "" ], "text/plain": [ - " local_cell_index local_branch_index local_comp_index length radius \\\n", - "0 0 0 0 10.0 1.0 \n", - "1 0 0 1 10.0 1.0 \n", - "2 0 0 2 10.0 1.0 \n", - "3 0 0 3 10.0 1.0 \n", - "4 0 1 0 10.0 1.0 \n", - "5 0 1 1 10.0 1.0 \n", - "6 0 1 2 10.0 1.0 \n", - "7 0 1 3 10.0 1.0 \n", - "8 0 2 0 10.0 1.0 \n", - "9 0 2 1 10.0 1.0 \n", - "10 0 2 2 10.0 1.0 \n", - "11 0 2 3 10.0 1.0 \n", - "12 1 0 0 10.0 1.0 \n", - "13 1 0 1 10.0 1.0 \n", - "14 1 0 2 10.0 1.0 \n", - "15 1 0 3 10.0 1.0 \n", - "16 1 1 0 10.0 1.0 \n", - "17 1 1 1 10.0 1.0 \n", - "18 1 1 2 10.0 1.0 \n", - "19 1 1 3 10.0 1.0 \n", - "20 1 2 0 10.0 1.0 \n", - "21 1 2 1 10.0 1.0 \n", - "22 1 2 2 10.0 1.0 \n", - "23 1 2 3 10.0 1.0 \n", + " local_cell_index local_branch_index local_comp_index length radius \\\n", + "0 0 0 0 10.0 0.020703 \n", + "1 0 0 1 10.0 0.020703 \n", + "2 0 0 2 10.0 0.020703 \n", + "3 0 0 3 10.0 0.020703 \n", + "4 0 1 0 10.0 0.020703 \n", + "5 0 1 1 10.0 0.020703 \n", + "6 0 1 2 10.0 0.020703 \n", + "7 0 1 3 10.0 0.020703 \n", + "8 0 2 0 10.0 0.020703 \n", + "9 0 2 1 10.0 0.020703 \n", + "10 0 2 2 10.0 0.020703 \n", + "11 0 2 3 10.0 0.020703 \n", + "12 1 0 0 10.0 0.020703 \n", + "13 1 0 1 10.0 0.020703 \n", + "14 1 0 2 10.0 0.020703 \n", + "15 1 0 3 10.0 0.020703 \n", + "16 1 1 0 10.0 0.020703 \n", + "17 1 1 1 10.0 0.020703 \n", + "18 1 1 2 10.0 0.020703 \n", + "19 1 1 3 10.0 0.020703 \n", + "20 1 2 0 10.0 0.020703 \n", + "21 1 2 1 10.0 0.020703 \n", + "22 1 2 2 10.0 0.020703 \n", + "23 1 2 3 10.0 0.020703 \n", + "\n", + " axial_resistivity capacitance v x y ... Na_m Na_h K \\\n", + "0 5000.0 1.0 -70.0 NaN NaN ... NaN NaN False \n", + "1 5000.0 1.0 -70.0 NaN NaN ... NaN NaN False \n", + "2 5000.0 1.0 -70.0 NaN NaN ... NaN NaN False \n", + "3 5000.0 1.0 -70.0 NaN NaN ... NaN NaN False \n", + "4 5000.0 1.0 -70.0 NaN NaN ... NaN NaN False \n", + "5 5000.0 1.0 -70.0 NaN NaN ... NaN NaN False \n", + "6 5000.0 1.0 -70.0 NaN NaN ... NaN NaN False \n", + "7 5000.0 1.0 -70.0 NaN NaN ... NaN NaN False \n", + "8 5000.0 1.0 -70.0 NaN NaN ... NaN NaN False \n", + "9 5000.0 1.0 -70.0 NaN NaN ... NaN NaN False \n", + "10 5000.0 1.0 -70.0 NaN NaN ... NaN NaN False \n", + "11 5000.0 1.0 -70.0 NaN NaN ... NaN NaN False \n", + "12 5000.0 1.0 -70.0 NaN NaN ... NaN NaN False \n", + "13 5000.0 1.0 -70.0 NaN NaN ... NaN NaN False \n", + "14 5000.0 1.0 -70.0 NaN NaN ... NaN NaN False \n", + "15 5000.0 1.0 -70.0 NaN NaN ... NaN NaN False \n", + "16 5000.0 1.0 -70.0 NaN NaN ... NaN NaN False \n", + "17 5000.0 1.0 -70.0 NaN NaN ... NaN NaN False \n", + "18 5000.0 1.0 -70.0 NaN NaN ... NaN NaN False \n", + "19 5000.0 1.0 -70.0 NaN NaN ... NaN NaN False \n", + "20 5000.0 1.0 -70.0 NaN NaN ... NaN NaN False \n", + "21 5000.0 1.0 -70.0 NaN NaN ... NaN NaN False \n", + "22 5000.0 1.0 -70.0 NaN NaN ... NaN NaN False \n", + "23 5000.0 1.0 -70.0 NaN NaN ... NaN NaN False \n", "\n", - " axial_resistivity capacitance v global_cell_index \\\n", - "0 5000.0 1.0 -70.0 0 \n", - "1 5000.0 1.0 -70.0 0 \n", - "2 5000.0 1.0 -70.0 0 \n", - "3 5000.0 1.0 -70.0 0 \n", - "4 5000.0 1.0 -70.0 0 \n", - "5 5000.0 1.0 -70.0 0 \n", - "6 5000.0 1.0 -70.0 0 \n", - "7 5000.0 1.0 -70.0 0 \n", - "8 5000.0 1.0 -70.0 0 \n", - "9 5000.0 1.0 -70.0 0 \n", - "10 5000.0 1.0 -70.0 0 \n", - "11 5000.0 1.0 -70.0 0 \n", - "12 5000.0 1.0 -70.0 1 \n", - "13 5000.0 1.0 -70.0 1 \n", - "14 5000.0 1.0 -70.0 1 \n", - "15 5000.0 1.0 -70.0 1 \n", - "16 5000.0 1.0 -70.0 1 \n", - "17 5000.0 1.0 -70.0 1 \n", - "18 5000.0 1.0 -70.0 1 \n", - "19 5000.0 1.0 -70.0 1 \n", - "20 5000.0 1.0 -70.0 1 \n", - "21 5000.0 1.0 -70.0 1 \n", - "22 5000.0 1.0 -70.0 1 \n", - "23 5000.0 1.0 -70.0 1 \n", + " K_gK eK K_n global_cell_index global_branch_index global_comp_index \\\n", + "0 NaN NaN NaN 0 0 0 \n", + "1 NaN NaN NaN 0 0 1 \n", + "2 NaN NaN NaN 0 0 2 \n", + "3 NaN NaN NaN 0 0 3 \n", + "4 NaN NaN NaN 0 1 4 \n", + "5 NaN NaN NaN 0 1 5 \n", + "6 NaN NaN NaN 0 1 6 \n", + "7 NaN NaN NaN 0 1 7 \n", + "8 NaN NaN NaN 0 2 8 \n", + "9 NaN NaN NaN 0 2 9 \n", + "10 NaN NaN NaN 0 2 10 \n", + "11 NaN NaN NaN 0 2 11 \n", + "12 NaN NaN NaN 1 3 12 \n", + "13 NaN NaN NaN 1 3 13 \n", + "14 NaN NaN NaN 1 3 14 \n", + "15 NaN NaN NaN 1 3 15 \n", + "16 NaN NaN NaN 1 4 16 \n", + "17 NaN NaN NaN 1 4 17 \n", + "18 NaN NaN NaN 1 4 18 \n", + "19 NaN NaN NaN 1 4 19 \n", + "20 NaN NaN NaN 1 5 20 \n", + "21 NaN NaN NaN 1 5 21 \n", + "22 NaN NaN NaN 1 5 22 \n", + "23 NaN NaN NaN 1 5 23 \n", "\n", - " global_branch_index global_comp_index controlled_by_param \n", - "0 0 0 0 \n", - "1 0 1 0 \n", - "2 0 2 0 \n", - "3 0 3 0 \n", - "4 1 4 0 \n", - "5 1 5 0 \n", - "6 1 6 0 \n", - "7 1 7 0 \n", - "8 2 8 0 \n", - "9 2 9 0 \n", - "10 2 10 0 \n", - "11 2 11 0 \n", - "12 3 12 0 \n", - "13 3 13 0 \n", - "14 3 14 0 \n", - "15 3 15 0 \n", - "16 4 16 0 \n", - "17 4 17 0 \n", - "18 4 18 0 \n", - "19 4 19 0 \n", - "20 5 20 0 \n", - "21 5 21 0 \n", - "22 5 22 0 \n", - "23 5 23 0 " + " controlled_by_param \n", + "0 0 \n", + "1 0 \n", + "2 0 \n", + "3 0 \n", + "4 0 \n", + "5 0 \n", + "6 0 \n", + "7 0 \n", + "8 0 \n", + "9 0 \n", + "10 0 \n", + "11 0 \n", + "12 0 \n", + "13 0 \n", + "14 0 \n", + "15 0 \n", + "16 0 \n", + "17 0 \n", + "18 0 \n", + "19 0 \n", + "20 0 \n", + "21 0 \n", + "22 0 \n", + "23 0 \n", + "\n", + "[24 rows x 28 columns]" ] }, - "execution_count": 99, + "execution_count": 64, "metadata": {}, "output_type": "execute_result" } @@ -700,8 +956,8 @@ }, { "cell_type": "code", - "execution_count": 100, - "id": "eeaaefd1", + "execution_count": 65, + "id": "bbff30b3", "metadata": {}, "outputs": [ { @@ -745,7 +1001,7 @@ "Index: []" ] }, - "execution_count": 100, + "execution_count": 65, "metadata": {}, "output_type": "execute_result" } @@ -756,7 +1012,7 @@ }, { "cell_type": "markdown", - "id": "2904c0c5", + "id": "a942cbdf", "metadata": {}, "source": [ "# Views" @@ -764,128 +1020,47 @@ }, { "cell_type": "markdown", - "id": "fd0d4fa3", - "metadata": {}, - "source": [ - "Since these models can become arbitrarily complex, Jaxley utilizes so called `View`s to make working with `Modules` easy and intuitive. \n", - "\n", - "The simplest way to navigate Modules is by navigating them via the hierachy that we introduces above. Let's see how this works for a `Nework`." - ] - }, - { - "cell_type": "code", - "execution_count": 139, - "id": "8fffb60a", + "id": "431cc785", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 139, - "metadata": {}, - "output_type": "execute_result" - }, - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], "source": [ - "# compute xyz coordinates of the cells\n", - "net.compute_xyz()\n", - "\n", - "# move cells apart (since they are placed on top of each other by default)\n", - "net.cell(0).move(y=30)\n", + "Since these `Module`s can become very complex, Jaxley utilizes so called `View`s to make working with `Module`s easy and intuitive. \n", "\n", - "# we can use the vis function to visualize Modules\n", - "fig, ax = plt.subplots(1,1, figsize=(3,3))\n", - "net.vis(ax=ax)" + "The simplest way to navigate Modules is by navigating them via the hierachy that we introduced above. A `View` is what you get when you index into the module. For example, for a `Network`:" ] }, { "cell_type": "code", - "execution_count": 153, - "id": "d6abcdec", + "execution_count": 66, + "id": "a873d39d", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "" + "View with 1 different channels. Use `.nodes` for details." ] }, - "execution_count": 153, + "execution_count": 66, "metadata": {}, "output_type": "execute_result" - }, - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" } ], "source": [ - "# ... and Views\n", - "fig, ax = plt.subplots(1,1, figsize=(3,3))\n", - "net.cell(0).vis(ax=ax, col=\"blue\") # View of the 0th cell of the network\n", - "net.cell(1).vis(ax=ax, col=\"red\") # View of the 1st cell of the network\n", - "\n", - "net.cell(0).branch(0).vis(ax=ax, col=\"green\") # View of the 1st branch of the 0th cell of the network\n", - "net.cell(1).branch(1).comp(1).vis(ax=ax, col=\"black\", type=\"scatter\") # View of the 0th comp of the 1st branch of the 0th cell of the network" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "0f551f1d", - "metadata": {}, - "outputs": [], - "source": [ - "# several types of indices are supported (lists, ranges, ...)\n", - "net.cell([0,1]).branch(\"all\").comp(0) # View of all 0th comps of all branches of cell 0 and 1\n", - "\n", - "branch.loc(0.1) # equivalent to `NEURON`s `loc`. Assumes branches are continous from 0-1.\n", - "\n", - "net[0,0,0] # Modules/Views can also be lazily indexed\n", - "\n", - "cell0 = net.cell(0) # views can be assigned to variables and only track the parts of the Module they belong to\n", - "cell0.branch(1).comp(0) # Views can be continuely indexed" - ] - }, - { - "cell_type": "markdown", - "id": "7283d2d4", - "metadata": {}, - "source": [ - "_In case you need even more flexibility in how you select parts of a Module, Jaxley provides a `select` method, to give full control over the exact parts of the `nodes` and `edges` that are part of a `View`. On examples of how this can be used, see [Advanced Indexing](https://jaxleyverse.github.io/jaxley/latest/tutorial/09_advanced_indexing/) and [Advanced Parameter Sharing](https://jaxleyverse.github.io/jaxley/latest/tutorial/10_advanced_parameter_sharing/)._" + "net.cell(0)" ] }, { "cell_type": "markdown", - "id": "4f8922c4", + "id": "9fb61a7f", "metadata": {}, "source": [ - "Views behave very similarly to `Module`s, i.e. the `cell0` (the 0th cell of the network) from the example above handles like the `cell` we instantiated earlier, which then became cell 0 of the network. As such `cell0` also has a `nodes` attribute, which keeps track of it's part of the network." + "Views behave very similarly to `Module`s, i.e. the `cell(0)` (the 0th cell of the network) behaves like the `cell` we instantiated earlier. As such, `cell(0)` also has a `nodes` attribute, which keeps track of it's part of the network:" ] }, { "cell_type": "code", - "execution_count": 54, - "id": "d5502655", + "execution_count": 67, + "id": "051ddfae", "metadata": {}, "outputs": [ { @@ -917,6 +1092,15 @@ " axial_resistivity\n", " capacitance\n", " v\n", + " x\n", + " y\n", + " ...\n", + " Na_m\n", + " Na_h\n", + " K\n", + " K_gK\n", + " eK\n", + " K_n\n", " global_cell_index\n", " global_branch_index\n", " global_comp_index\n", @@ -930,10 +1114,19 @@ " 0\n", " 0\n", " 10.0\n", - " 1.0\n", + " 0.020703\n", " 5000.0\n", " 1.0\n", " -70.0\n", + " NaN\n", + " NaN\n", + " ...\n", + " NaN\n", + " NaN\n", + " False\n", + " NaN\n", + " NaN\n", + " NaN\n", " 0\n", " 0\n", " 0\n", @@ -945,10 +1138,19 @@ " 0\n", " 1\n", " 10.0\n", - " 1.0\n", + " 0.020703\n", " 5000.0\n", " 1.0\n", " -70.0\n", + " NaN\n", + " NaN\n", + " ...\n", + " NaN\n", + " NaN\n", + " False\n", + " NaN\n", + " NaN\n", + " NaN\n", " 0\n", " 0\n", " 1\n", @@ -960,10 +1162,19 @@ " 0\n", " 2\n", " 10.0\n", - " 1.0\n", + " 0.020703\n", " 5000.0\n", " 1.0\n", " -70.0\n", + " NaN\n", + " NaN\n", + " ...\n", + " NaN\n", + " NaN\n", + " False\n", + " NaN\n", + " NaN\n", + " NaN\n", " 0\n", " 0\n", " 2\n", @@ -975,10 +1186,19 @@ " 0\n", " 3\n", " 10.0\n", - " 1.0\n", + " 0.020703\n", " 5000.0\n", " 1.0\n", " -70.0\n", + " NaN\n", + " NaN\n", + " ...\n", + " NaN\n", + " NaN\n", + " False\n", + " NaN\n", + " NaN\n", + " NaN\n", " 0\n", " 0\n", " 3\n", @@ -990,10 +1210,19 @@ " 1\n", " 0\n", " 10.0\n", - " 1.0\n", + " 0.020703\n", " 5000.0\n", " 1.0\n", " -70.0\n", + " NaN\n", + " NaN\n", + " ...\n", + " NaN\n", + " NaN\n", + " False\n", + " NaN\n", + " NaN\n", + " NaN\n", " 0\n", " 1\n", " 4\n", @@ -1005,10 +1234,19 @@ " 1\n", " 1\n", " 10.0\n", - " 1.0\n", + " 0.020703\n", " 5000.0\n", " 1.0\n", " -70.0\n", + " NaN\n", + " NaN\n", + " ...\n", + " NaN\n", + " NaN\n", + " False\n", + " NaN\n", + " NaN\n", + " NaN\n", " 0\n", " 1\n", " 5\n", @@ -1020,10 +1258,19 @@ " 1\n", " 2\n", " 10.0\n", - " 1.0\n", + " 0.020703\n", " 5000.0\n", " 1.0\n", " -70.0\n", + " NaN\n", + " NaN\n", + " ...\n", + " NaN\n", + " NaN\n", + " False\n", + " NaN\n", + " NaN\n", + " NaN\n", " 0\n", " 1\n", " 6\n", @@ -1035,10 +1282,19 @@ " 1\n", " 3\n", " 10.0\n", - " 1.0\n", + " 0.020703\n", " 5000.0\n", " 1.0\n", " -70.0\n", + " NaN\n", + " NaN\n", + " ...\n", + " NaN\n", + " NaN\n", + " False\n", + " NaN\n", + " NaN\n", + " NaN\n", " 0\n", " 1\n", " 7\n", @@ -1050,10 +1306,19 @@ " 2\n", " 0\n", " 10.0\n", - " 1.0\n", + " 0.020703\n", " 5000.0\n", " 1.0\n", " -70.0\n", + " NaN\n", + " NaN\n", + " ...\n", + " NaN\n", + " NaN\n", + " False\n", + " NaN\n", + " NaN\n", + " NaN\n", " 0\n", " 2\n", " 8\n", @@ -1065,10 +1330,19 @@ " 2\n", " 1\n", " 10.0\n", - " 1.0\n", + " 0.020703\n", " 5000.0\n", " 1.0\n", " -70.0\n", + " NaN\n", + " NaN\n", + " ...\n", + " NaN\n", + " NaN\n", + " False\n", + " NaN\n", + " NaN\n", + " NaN\n", " 0\n", " 2\n", " 9\n", @@ -1080,10 +1354,19 @@ " 2\n", " 2\n", " 10.0\n", - " 1.0\n", + " 0.020703\n", " 5000.0\n", " 1.0\n", " -70.0\n", + " NaN\n", + " NaN\n", + " ...\n", + " NaN\n", + " NaN\n", + " False\n", + " NaN\n", + " NaN\n", + " NaN\n", " 0\n", " 2\n", " 10\n", @@ -1095,10 +1378,19 @@ " 2\n", " 3\n", " 10.0\n", - " 1.0\n", + " 0.020703\n", " 5000.0\n", " 1.0\n", " -70.0\n", + " NaN\n", + " NaN\n", + " ...\n", + " NaN\n", + " NaN\n", + " False\n", + " NaN\n", + " NaN\n", + " NaN\n", " 0\n", " 2\n", " 11\n", @@ -1106,151 +1398,237 @@ " \n", " \n", "\n", + "

12 rows × 28 columns

\n", "" ], "text/plain": [ - " local_cell_index local_branch_index local_comp_index length radius \\\n", - "0 0 0 0 10.0 1.0 \n", - "1 0 0 1 10.0 1.0 \n", - "2 0 0 2 10.0 1.0 \n", - "3 0 0 3 10.0 1.0 \n", - "4 0 1 0 10.0 1.0 \n", - "5 0 1 1 10.0 1.0 \n", - "6 0 1 2 10.0 1.0 \n", - "7 0 1 3 10.0 1.0 \n", - "8 0 2 0 10.0 1.0 \n", - "9 0 2 1 10.0 1.0 \n", - "10 0 2 2 10.0 1.0 \n", - "11 0 2 3 10.0 1.0 \n", + " local_cell_index local_branch_index local_comp_index length radius \\\n", + "0 0 0 0 10.0 0.020703 \n", + "1 0 0 1 10.0 0.020703 \n", + "2 0 0 2 10.0 0.020703 \n", + "3 0 0 3 10.0 0.020703 \n", + "4 0 1 0 10.0 0.020703 \n", + "5 0 1 1 10.0 0.020703 \n", + "6 0 1 2 10.0 0.020703 \n", + "7 0 1 3 10.0 0.020703 \n", + "8 0 2 0 10.0 0.020703 \n", + "9 0 2 1 10.0 0.020703 \n", + "10 0 2 2 10.0 0.020703 \n", + "11 0 2 3 10.0 0.020703 \n", "\n", - " axial_resistivity capacitance v global_cell_index \\\n", - "0 5000.0 1.0 -70.0 0 \n", - "1 5000.0 1.0 -70.0 0 \n", - "2 5000.0 1.0 -70.0 0 \n", - "3 5000.0 1.0 -70.0 0 \n", - "4 5000.0 1.0 -70.0 0 \n", - "5 5000.0 1.0 -70.0 0 \n", - "6 5000.0 1.0 -70.0 0 \n", - "7 5000.0 1.0 -70.0 0 \n", - "8 5000.0 1.0 -70.0 0 \n", - "9 5000.0 1.0 -70.0 0 \n", - "10 5000.0 1.0 -70.0 0 \n", - "11 5000.0 1.0 -70.0 0 \n", + " axial_resistivity capacitance v x y ... Na_m Na_h K \\\n", + "0 5000.0 1.0 -70.0 NaN NaN ... NaN NaN False \n", + "1 5000.0 1.0 -70.0 NaN NaN ... NaN NaN False \n", + "2 5000.0 1.0 -70.0 NaN NaN ... NaN NaN False \n", + "3 5000.0 1.0 -70.0 NaN NaN ... NaN NaN False \n", + "4 5000.0 1.0 -70.0 NaN NaN ... NaN NaN False \n", + "5 5000.0 1.0 -70.0 NaN NaN ... NaN NaN False \n", + "6 5000.0 1.0 -70.0 NaN NaN ... NaN NaN False \n", + "7 5000.0 1.0 -70.0 NaN NaN ... NaN NaN False \n", + "8 5000.0 1.0 -70.0 NaN NaN ... NaN NaN False \n", + "9 5000.0 1.0 -70.0 NaN NaN ... NaN NaN False \n", + "10 5000.0 1.0 -70.0 NaN NaN ... NaN NaN False \n", + "11 5000.0 1.0 -70.0 NaN NaN ... NaN NaN False \n", "\n", - " global_branch_index global_comp_index controlled_by_param \n", - "0 0 0 0 \n", - "1 0 1 0 \n", - "2 0 2 0 \n", - "3 0 3 0 \n", - "4 1 4 0 \n", - "5 1 5 0 \n", - "6 1 6 0 \n", - "7 1 7 0 \n", - "8 2 8 0 \n", - "9 2 9 0 \n", - "10 2 10 0 \n", - "11 2 11 0 " + " K_gK eK K_n global_cell_index global_branch_index global_comp_index \\\n", + "0 NaN NaN NaN 0 0 0 \n", + "1 NaN NaN NaN 0 0 1 \n", + "2 NaN NaN NaN 0 0 2 \n", + "3 NaN NaN NaN 0 0 3 \n", + "4 NaN NaN NaN 0 1 4 \n", + "5 NaN NaN NaN 0 1 5 \n", + "6 NaN NaN NaN 0 1 6 \n", + "7 NaN NaN NaN 0 1 7 \n", + "8 NaN NaN NaN 0 2 8 \n", + "9 NaN NaN NaN 0 2 9 \n", + "10 NaN NaN NaN 0 2 10 \n", + "11 NaN NaN NaN 0 2 11 \n", + "\n", + " controlled_by_param \n", + "0 0 \n", + "1 0 \n", + "2 0 \n", + "3 0 \n", + "4 0 \n", + "5 0 \n", + "6 0 \n", + "7 0 \n", + "8 0 \n", + "9 0 \n", + "10 0 \n", + "11 0 \n", + "\n", + "[12 rows x 28 columns]" ] }, - "execution_count": 54, + "execution_count": 67, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "cell0.nodes" + "net.cell(0).nodes" ] }, { "cell_type": "markdown", - "id": "165b04f6", + "id": "418c8f18", + "metadata": {}, + "source": [ + "Let's use `View`s to visualize only parts of the `Network`. Before we do that, we create x, y, and z coordinates for the `Network`:" + ] + }, + { + "cell_type": "code", + "execution_count": 68, + "id": "ebe47783", "metadata": {}, + "outputs": [], "source": [ - "In addtion to the attributes, most methods of `Module` work equally for `View`s but only in their respective scope. This makes it very intuitive to manipulate any part of a `Module` and keep track of the changes. An example of this would be to inspect specific aspects of the module and make changes to it based on meeting a condition.\n", + "# Compute xyz coordinates of the cells.\n", + "net.compute_xyz()\n", "\n", - "_Note that before commiting to making a change, you can also always inspect attributes of the current module view, i.e. looking at the `nodes` or `edges` that you are about to affect with `set`._" + "# Move cells (since they are placed on top of each other by default).\n", + "net.cell(0).move(y=30)" + ] + }, + { + "cell_type": "markdown", + "id": "6bb1f331", + "metadata": {}, + "source": [ + "We can now visualize the entire `net` (i.e., the entire `Module`) with the `.vis()` method..." ] }, { "cell_type": "code", - "execution_count": 92, - "id": "f4e94122", + "execution_count": 69, + "id": "405ead6a", "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "Channels in Compartment 0: Leak, Na, K\n", - "Channels in Compartment 1: Leak, Na, K\n", - "Channels in Compartment 2: Leak, Na, K\n", - "Channels in Compartment 3: Leak, Na, K\n", - "Channels in Compartment 4: Leak, Na, K\n", - "Channels in Compartment 5: Leak, Na, K\n", - "Channels in Compartment 6: Leak, Na, K\n", - "Channels in Compartment 7: Leak, Na, K\n", - "Channels in Compartment 8: Leak, Na, K\n", - "Channels in Compartment 9: Leak, Na, K\n", - "Channels in Compartment 10: Leak, Na, K\n", - "Channels in Compartment 11: Leak, Na, K\n", - "Channels in Compartment 12: Leak\n", - "Channels in Compartment 13: Leak\n", - "Channels in Compartment 14: Leak\n", - "Channels in Compartment 15: Leak\n", - "Channels in Compartment 16: Leak\n", - "Channels in Compartment 17: Leak\n", - "Channels in Compartment 18: Leak\n", - "Channels in Compartment 19: Leak\n", - "Channels in Compartment 20: Leak\n", - "Channels in Compartment 21: Leak\n", - "Channels in Compartment 22: Leak\n", - "Channels in Compartment 23: Leak\n", - "\n", - "Leak conductance for all comps on branch 0 of cell 0 and 1.\n", - "{0: 0.1, 1: 0.1, 2: 0.1, 3: 0.1, 12: 0.1, 13: 0.0001, 14: 0.0001, 15: 0.0001}\n" - ] + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 69, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" } ], "source": [ - "# Views of cells, branches and compartments can also be iterated over\n", - "for cell in net:\n", - " for branch in cell:\n", - " for comp in branch:\n", - " # all distinct channels can be found in `channels`\n", - " idx = comp.nodes.index[0]\n", - " channel_names = [c._name for c in comp.channels]\n", - " print(f\"Channels in Compartment {idx}: {\", \".join(channel_names)}\")\n", - " \n", - " if len(channel_names) > 1:\n", - " # set only applies changes locally to `comp`\n", - " comp.set(\"Leak_gLeak\", 0.1)\n", - "\n", - "# leak conductance was only changed for cells that also had Na and K channels\n", - "print(\"\\nLeak conductance for all comps on branch 0 of cell 0 and 1.\")\n", - "print(net.cell([0,1]).branch(0).nodes[\"Leak_gLeak\"].to_dict())" + "# We can use the vis function to visualize Modules.\n", + "fig, ax = plt.subplots(1,1, figsize=(3,3))\n", + "net.vis(ax=ax)" ] }, { "cell_type": "markdown", - "id": "76e72d1c", + "id": "1bfb698b", "metadata": {}, "source": [ - "Assigning `View`s to a variable makes it easier to reuse parts of a `Module` later or to highlight them. However, this can become messy and we might need access to such a `View` more readily. For this purpose Jaxley implements so called groups that can be used to assign any `View` of a `Module` to an attribute, i.e. the soma." + "...but we can also create a `View` to visualize only parts of the `net`:" ] }, { "cell_type": "code", - "execution_count": 55, - "id": "41d38b22", + "execution_count": 70, + "id": "bbbca6b8", "metadata": {}, "outputs": [ { - "name": "stdout", - "output_type": "stream", - "text": [ - "Groups {'somas': array([ 0, 12])}\n" - ] + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 70, + "metadata": {}, + "output_type": "execute_result" }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# ... and Views\n", + "fig, ax = plt.subplots(1,1, figsize=(3,3))\n", + "net.cell(0).vis(ax=ax, col=\"blue\") # View of the 0th cell of the network\n", + "net.cell(1).vis(ax=ax, col=\"red\") # View of the 1st cell of the network\n", + "\n", + "net.cell(0).branch(0).vis(ax=ax, col=\"green\") # View of the 1st branch of the 0th cell of the network\n", + "net.cell(1).branch(1).comp(1).vis(ax=ax, col=\"black\", type=\"scatter\") # View of the 0th comp of the 1st branch of the 0th cell of the network" + ] + }, + { + "cell_type": "markdown", + "id": "511cb1b8", + "metadata": {}, + "source": [ + "### How to create `View`s" + ] + }, + { + "cell_type": "markdown", + "id": "783998d9", + "metadata": {}, + "source": [ + "Above, we used `net.cell(0)` to generate a `View` of the 0-eth cell. `Jaxley` supports many ways of performing such indexing:" + ] + }, + { + "cell_type": "code", + "execution_count": 71, + "id": "563ea26c", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "View with 1 different channels. Use `.nodes` for details." + ] + }, + "execution_count": 71, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# several types of indices are supported (lists, ranges, ...)\n", + "net.cell([0,1]).branch(\"all\").comp(0) # View of all 0th comps of all branches of cell 0 and 1\n", + "\n", + "branch.loc(0.1) # Equivalent to `NEURON`s `loc`. Assumes branches are continous from 0-1.\n", + "\n", + "net[0,0,0] # Modules/Views can also be lazily indexed\n", + "\n", + "cell0 = net.cell(0) # Views can be assigned to variables and only track the parts of the Module they belong to\n", + "cell0.branch(1).comp(0) # Views can be continuely indexed" + ] + }, + { + "cell_type": "code", + "execution_count": 72, + "id": "338181fe", + "metadata": {}, + "outputs": [ { "data": { "text/html": [ @@ -1280,6 +1658,15 @@ " axial_resistivity\n", " capacitance\n", " v\n", + " x\n", + " y\n", + " ...\n", + " Na_m\n", + " Na_h\n", + " K\n", + " K_gK\n", + " eK\n", + " K_n\n", " global_cell_index\n", " global_branch_index\n", " global_comp_index\n", @@ -1293,64 +1680,583 @@ " 0\n", " 0\n", " 10.0\n", - " 1.0\n", + " 0.020703\n", " 5000.0\n", " 1.0\n", " -70.0\n", + " 5.000000\n", + " 30.000000\n", + " ...\n", + " NaN\n", + " NaN\n", + " False\n", + " NaN\n", + " NaN\n", + " NaN\n", " 0\n", " 0\n", " 0\n", " 0\n", " \n", " \n", - " 12\n", - " 1\n", + " 1\n", " 0\n", " 0\n", + " 1\n", " 10.0\n", - " 1.0\n", + " 0.020703\n", " 5000.0\n", " 1.0\n", " -70.0\n", - " 1\n", + " 15.000000\n", + " 30.000000\n", + " ...\n", + " NaN\n", + " NaN\n", + " False\n", + " NaN\n", + " NaN\n", + " NaN\n", + " 0\n", + " 0\n", + " 1\n", + " 0\n", + " \n", + " \n", + " 2\n", + " 0\n", + " 0\n", + " 2\n", + " 10.0\n", + " 0.020703\n", + " 5000.0\n", + " 1.0\n", + " -70.0\n", + " 25.000000\n", + " 30.000000\n", + " ...\n", + " NaN\n", + " NaN\n", + " False\n", + " NaN\n", + " NaN\n", + " NaN\n", + " 0\n", + " 0\n", + " 2\n", + " 0\n", + " \n", + " \n", + " 3\n", + " 0\n", + " 0\n", " 3\n", - " 12\n", + " 10.0\n", + " 0.020703\n", + " 5000.0\n", + " 1.0\n", + " -70.0\n", + " 35.000000\n", + " 30.000000\n", + " ...\n", + " NaN\n", + " NaN\n", + " False\n", + " NaN\n", + " NaN\n", + " NaN\n", + " 0\n", + " 0\n", + " 3\n", + " 0\n", + " \n", + " \n", + " 4\n", + " 0\n", + " 1\n", + " 0\n", + " 10.0\n", + " 0.020703\n", + " 5000.0\n", + " 1.0\n", + " -70.0\n", + " 44.850713\n", + " 28.787322\n", + " ...\n", + " NaN\n", + " NaN\n", + " False\n", + " NaN\n", + " NaN\n", + " NaN\n", + " 0\n", + " 1\n", + " 4\n", + " 0\n", + " \n", + " \n", + " 5\n", + " 0\n", + " 1\n", + " 1\n", + " 10.0\n", + " 0.020703\n", + " 5000.0\n", + " 1.0\n", + " -70.0\n", + " 54.552138\n", + " 26.361966\n", + " ...\n", + " NaN\n", + " NaN\n", + " False\n", + " NaN\n", + " NaN\n", + " NaN\n", + " 0\n", + " 1\n", + " 5\n", + " 0\n", + " \n", + " \n", + " 6\n", + " 0\n", + " 1\n", + " 2\n", + " 10.0\n", + " 0.020703\n", + " 5000.0\n", + " 1.0\n", + " -70.0\n", + " 64.253563\n", + " 23.936609\n", + " ...\n", + " NaN\n", + " NaN\n", + " False\n", + " NaN\n", + " NaN\n", + " NaN\n", + " 0\n", + " 1\n", + " 6\n", + " 0\n", + " \n", + " \n", + " 7\n", + " 0\n", + " 1\n", + " 3\n", + " 10.0\n", + " 0.020703\n", + " 5000.0\n", + " 1.0\n", + " -70.0\n", + " 73.954988\n", + " 21.511253\n", + " ...\n", + " NaN\n", + " NaN\n", + " False\n", + " NaN\n", + " NaN\n", + " NaN\n", + " 0\n", + " 1\n", + " 7\n", + " 0\n", + " \n", + " \n", + " 8\n", + " 0\n", + " 2\n", + " 0\n", + " 10.0\n", + " 0.020703\n", + " 5000.0\n", + " 1.0\n", + " -70.0\n", + " 44.850713\n", + " 31.212678\n", + " ...\n", + " NaN\n", + " NaN\n", + " False\n", + " NaN\n", + " NaN\n", + " NaN\n", + " 0\n", + " 2\n", + " 8\n", + " 0\n", + " \n", + " \n", + " 9\n", + " 0\n", + " 2\n", + " 1\n", + " 10.0\n", + " 0.020703\n", + " 5000.0\n", + " 1.0\n", + " -70.0\n", + " 54.552138\n", + " 33.638034\n", + " ...\n", + " NaN\n", + " NaN\n", + " False\n", + " NaN\n", + " NaN\n", + " NaN\n", + " 0\n", + " 2\n", + " 9\n", + " 0\n", + " \n", + " \n", + " 10\n", + " 0\n", + " 2\n", + " 2\n", + " 10.0\n", + " 0.020703\n", + " 5000.0\n", + " 1.0\n", + " -70.0\n", + " 64.253563\n", + " 36.063391\n", + " ...\n", + " NaN\n", + " NaN\n", + " False\n", + " NaN\n", + " NaN\n", + " NaN\n", + " 0\n", + " 2\n", + " 10\n", + " 0\n", + " \n", + " \n", + " 11\n", + " 0\n", + " 2\n", + " 3\n", + " 10.0\n", + " 0.020703\n", + " 5000.0\n", + " 1.0\n", + " -70.0\n", + " 73.954988\n", + " 38.488747\n", + " ...\n", + " NaN\n", + " NaN\n", + " False\n", + " NaN\n", + " NaN\n", + " NaN\n", + " 0\n", + " 2\n", + " 11\n", " 0\n", " \n", " \n", "\n", + "

12 rows × 28 columns

\n", "" ], "text/plain": [ - " local_cell_index local_branch_index local_comp_index length radius \\\n", - "0 0 0 0 10.0 1.0 \n", - "12 1 0 0 10.0 1.0 \n", + " local_cell_index local_branch_index local_comp_index length radius \\\n", + "0 0 0 0 10.0 0.020703 \n", + "1 0 0 1 10.0 0.020703 \n", + "2 0 0 2 10.0 0.020703 \n", + "3 0 0 3 10.0 0.020703 \n", + "4 0 1 0 10.0 0.020703 \n", + "5 0 1 1 10.0 0.020703 \n", + "6 0 1 2 10.0 0.020703 \n", + "7 0 1 3 10.0 0.020703 \n", + "8 0 2 0 10.0 0.020703 \n", + "9 0 2 1 10.0 0.020703 \n", + "10 0 2 2 10.0 0.020703 \n", + "11 0 2 3 10.0 0.020703 \n", + "\n", + " axial_resistivity capacitance v x y ... Na_m \\\n", + "0 5000.0 1.0 -70.0 5.000000 30.000000 ... NaN \n", + "1 5000.0 1.0 -70.0 15.000000 30.000000 ... NaN \n", + "2 5000.0 1.0 -70.0 25.000000 30.000000 ... NaN \n", + "3 5000.0 1.0 -70.0 35.000000 30.000000 ... NaN \n", + "4 5000.0 1.0 -70.0 44.850713 28.787322 ... NaN \n", + "5 5000.0 1.0 -70.0 54.552138 26.361966 ... NaN \n", + "6 5000.0 1.0 -70.0 64.253563 23.936609 ... NaN \n", + "7 5000.0 1.0 -70.0 73.954988 21.511253 ... NaN \n", + "8 5000.0 1.0 -70.0 44.850713 31.212678 ... NaN \n", + "9 5000.0 1.0 -70.0 54.552138 33.638034 ... NaN \n", + "10 5000.0 1.0 -70.0 64.253563 36.063391 ... NaN \n", + "11 5000.0 1.0 -70.0 73.954988 38.488747 ... NaN \n", + "\n", + " Na_h K K_gK eK K_n global_cell_index global_branch_index \\\n", + "0 NaN False NaN NaN NaN 0 0 \n", + "1 NaN False NaN NaN NaN 0 0 \n", + "2 NaN False NaN NaN NaN 0 0 \n", + "3 NaN False NaN NaN NaN 0 0 \n", + "4 NaN False NaN NaN NaN 0 1 \n", + "5 NaN False NaN NaN NaN 0 1 \n", + "6 NaN False NaN NaN NaN 0 1 \n", + "7 NaN False NaN NaN NaN 0 1 \n", + "8 NaN False NaN NaN NaN 0 2 \n", + "9 NaN False NaN NaN NaN 0 2 \n", + "10 NaN False NaN NaN NaN 0 2 \n", + "11 NaN False NaN NaN NaN 0 2 \n", + "\n", + " global_comp_index controlled_by_param \n", + "0 0 0 \n", + "1 1 0 \n", + "2 2 0 \n", + "3 3 0 \n", + "4 4 0 \n", + "5 5 0 \n", + "6 6 0 \n", + "7 7 0 \n", + "8 8 0 \n", + "9 9 0 \n", + "10 10 0 \n", + "11 11 0 \n", + "\n", + "[12 rows x 28 columns]" + ] + }, + "execution_count": 72, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "cell0.nodes" + ] + }, + { + "cell_type": "code", + "execution_count": 73, + "id": "4271ae02", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(2, 6, 24)" + ] + }, + "execution_count": 73, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "net.shape" + ] + }, + { + "cell_type": "markdown", + "id": "4b94e1c6", + "metadata": {}, + "source": [ + "_Note: In case you need even more flexibility in how you select parts of a Module, Jaxley provides a `select` method, to give full control over the exact parts of the `nodes` and `edges` that are part of a `View`. On examples of how this can be used, see [Advanced Indexing](https://jaxleyverse.github.io/jaxley/latest/tutorial/09_advanced_indexing/) and [Advanced Parameter Sharing](https://jaxleyverse.github.io/jaxley/latest/tutorial/10_advanced_parameter_sharing/)._" + ] + }, + { + "cell_type": "markdown", + "id": "13615873", + "metadata": {}, + "source": [ + "You can also iterate over networks, cells, and branches:" + ] + }, + { + "cell_type": "code", + "execution_count": 74, + "id": "6af7e530", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
radiuslength
00.09487110.0
10.48249810.0
20.48724710.0
30.47250710.0
40.893396100.0
\n", + "
" + ], + "text/plain": [ + " radius length\n", + "0 0.094871 10.0\n", + "1 0.482498 10.0\n", + "2 0.487247 10.0\n", + "3 0.472507 10.0\n", + "4 0.893396 100.0" ] }, - "execution_count": 55, + "execution_count": 74, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "net.cell(\"all\").branch(0).comp(0).add_to_group(\"somas\")\n", - "print(\"Groups\", net.groups) # list the indices of the nodes dataframe that are part of the group\n", + "# We set the radiuses to random values...\n", + "radiuses = np.random.rand((24))\n", + "net.set(\"radius\", radiuses)\n", + "\n", + "# ...and then we set the length to 100.0 um if the radius is >0.5.\n", + "for cell in net:\n", + " for branch in cell:\n", + " for comp in branch:\n", + " if comp.nodes.iloc[0][\"radius\"] > 0.5:\n", + " comp.set(\"length\", 100.0)\n", "\n", - "somas = net.somas # returns a View with only a subset of nodes\n", - "somas.nodes" + "net.nodes[[\"radius\", \"length\"]][:5] # Show only the first five to keep the output short." + ] + }, + { + "cell_type": "markdown", + "id": "82e56c86", + "metadata": {}, + "source": [ + "Finally, you can also use `View`s in a context manager:" + ] + }, + { + "cell_type": "code", + "execution_count": 75, + "id": "3c859ca2", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
radiuslength
02.0000002.5
12.0000002.5
22.0000002.5
32.0000002.5
40.893396100.0
\n", + "
" + ], + "text/plain": [ + " radius length\n", + "0 2.000000 2.5\n", + "1 2.000000 2.5\n", + "2 2.000000 2.5\n", + "3 2.000000 2.5\n", + "4 0.893396 100.0" + ] + }, + "execution_count": 75, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "with net.cell(0).branch(0) as branch0:\n", + " branch0.set(\"radius\", 2.0)\n", + " branch0.set(\"length\", 2.5)\n", + " \n", + "net.nodes[[\"radius\", \"length\"]][:5] # Show only the first five to keep the output short." ] }, { "cell_type": "markdown", - "id": "df9f90bf", + "id": "c9dead74", "metadata": {}, "source": [ "# Channels" @@ -1358,16 +2264,16 @@ }, { "cell_type": "markdown", - "id": "8c2b3e60", + "id": "72685e64", "metadata": {}, "source": [ - "Currently the `Module`s that we have created above, will not do anything interesting, since by default Jaxley initializes them without any mechanisms in the membrane. To change this, we have to insert them into the membrane first. For this purpose Jaxley implements `Channel`s, that can be inserted into any compartment using the `insert` method of a `Module`." + "The `Module`s that we have created above will not do anything interesting, since by default Jaxley initializes them without any mechanisms in the membrane. To change this, we have to insert channels into the membrane. For this purpose `Jaxley` implements `Channel`s that can be inserted into any compartment using the `insert` method of a `Module` or a `View`:" ] }, { "cell_type": "code", - "execution_count": 56, - "id": "5b879f7c", + "execution_count": 54, + "id": "b27b5c81", "metadata": {}, "outputs": [ { @@ -1399,6 +2305,9 @@ " axial_resistivity\n", " capacitance\n", " v\n", + " x\n", + " y\n", + " z\n", " global_cell_index\n", " global_branch_index\n", " global_comp_index\n", @@ -1414,11 +2323,14 @@ " 0\n", " 0\n", " 0\n", - " 10.0\n", - " 1.0\n", + " 100.0\n", + " 0.924252\n", " 5000.0\n", " 1.0\n", " -70.0\n", + " 5.000000\n", + " 30.000000\n", + " 0.0\n", " 0\n", " 0\n", " 0\n", @@ -1432,11 +2344,14 @@ " 0\n", " 0\n", " 1\n", - " 10.0\n", - " 1.0\n", + " 100.0\n", + " 0.566347\n", " 5000.0\n", " 1.0\n", " -70.0\n", + " 15.000000\n", + " 30.000000\n", + " 0.0\n", " 0\n", " 0\n", " 1\n", @@ -1451,10 +2366,13 @@ " 0\n", " 2\n", " 10.0\n", - " 1.0\n", + " 0.208471\n", " 5000.0\n", " 1.0\n", " -70.0\n", + " 25.000000\n", + " 30.000000\n", + " 0.0\n", " 0\n", " 0\n", " 2\n", @@ -1468,11 +2386,14 @@ " 0\n", " 0\n", " 3\n", - " 10.0\n", - " 1.0\n", + " 100.0\n", + " 0.596002\n", " 5000.0\n", " 1.0\n", " -70.0\n", + " 35.000000\n", + " 30.000000\n", + " 0.0\n", " 0\n", " 0\n", " 3\n", @@ -1487,10 +2408,13 @@ " 1\n", " 0\n", " 10.0\n", - " 1.0\n", + " 0.027419\n", " 5000.0\n", " 1.0\n", " -70.0\n", + " 44.850713\n", + " 28.787322\n", + " 0.0\n", " 0\n", " 1\n", " 4\n", @@ -1504,36 +2428,36 @@ "" ], "text/plain": [ - " local_cell_index local_branch_index local_comp_index length radius \\\n", - "0 0 0 0 10.0 1.0 \n", - "1 0 0 1 10.0 1.0 \n", - "2 0 0 2 10.0 1.0 \n", - "3 0 0 3 10.0 1.0 \n", - "4 0 1 0 10.0 1.0 \n", + " local_cell_index local_branch_index local_comp_index length radius \\\n", + "0 0 0 0 100.0 0.924252 \n", + "1 0 0 1 100.0 0.566347 \n", + "2 0 0 2 10.0 0.208471 \n", + "3 0 0 3 100.0 0.596002 \n", + "4 0 1 0 10.0 0.027419 \n", "\n", - " axial_resistivity capacitance v global_cell_index \\\n", - "0 5000.0 1.0 -70.0 0 \n", - "1 5000.0 1.0 -70.0 0 \n", - "2 5000.0 1.0 -70.0 0 \n", - "3 5000.0 1.0 -70.0 0 \n", - "4 5000.0 1.0 -70.0 0 \n", + " axial_resistivity capacitance v x y z \\\n", + "0 5000.0 1.0 -70.0 5.000000 30.000000 0.0 \n", + "1 5000.0 1.0 -70.0 15.000000 30.000000 0.0 \n", + "2 5000.0 1.0 -70.0 25.000000 30.000000 0.0 \n", + "3 5000.0 1.0 -70.0 35.000000 30.000000 0.0 \n", + "4 5000.0 1.0 -70.0 44.850713 28.787322 0.0 \n", "\n", - " global_branch_index global_comp_index controlled_by_param Leak \\\n", - "0 0 0 0 True \n", - "1 0 1 0 True \n", - "2 0 2 0 True \n", - "3 0 3 0 True \n", - "4 1 4 0 True \n", + " global_cell_index global_branch_index global_comp_index \\\n", + "0 0 0 0 \n", + "1 0 0 1 \n", + "2 0 0 2 \n", + "3 0 0 3 \n", + "4 0 1 4 \n", "\n", - " Leak_gLeak Leak_eLeak \n", - "0 0.0001 -70.0 \n", - "1 0.0001 -70.0 \n", - "2 0.0001 -70.0 \n", - "3 0.0001 -70.0 \n", - "4 0.0001 -70.0 " + " controlled_by_param Leak Leak_gLeak Leak_eLeak \n", + "0 0 True 0.0001 -70.0 \n", + "1 0 True 0.0001 -70.0 \n", + "2 0 True 0.0001 -70.0 \n", + "3 0 True 0.0001 -70.0 \n", + "4 0 True 0.0001 -70.0 " ] }, - "execution_count": 56, + "execution_count": 54, "metadata": {}, "output_type": "execute_result" } @@ -1546,16 +2470,16 @@ }, { "cell_type": "markdown", - "id": "d7718158", + "id": "fdbb4b24", "metadata": {}, "source": [ - "This is also were `View`s come in handy, as we it allows to easily target the insertion of channels to specific compartments. Specifically, the context manager of `View`. This can be for example used when we want to insert multiple channels in one go into a subset of the compartments." + "This is also were `View`s come in handy, as it allows to easily target the insertion of channels to specific compartments." ] }, { "cell_type": "code", - "execution_count": 63, - "id": "98e6dec7", + "execution_count": 77, + "id": "cd0ece95", "metadata": {}, "outputs": [ { @@ -1610,7 +2534,7 @@ "12 1 False False True" ] }, - "execution_count": 63, + "execution_count": 77, "metadata": {}, "output_type": "execute_result" } @@ -1621,13 +2545,17 @@ " cell0.insert(Na())\n", " cell0.insert(K())\n", "\n", + "# # The above is equivalent to:\n", + "# net.cell(0).insert(Na())\n", + "# net.cell(0).insert(K())\n", + "\n", "# K and Na channels were only insert into cell 0\n", "net.cell(\"all\").branch(0).comp(0).nodes[[\"global_cell_index\", \"Na\", \"K\", \"Leak\"]]" ] }, { "cell_type": "markdown", - "id": "9821afcf", + "id": "39b64417", "metadata": {}, "source": [ "# Synapses" @@ -1635,16 +2563,16 @@ }, { "cell_type": "markdown", - "id": "a1272f87", + "id": "65d9570d", "metadata": {}, "source": [ - "To connect different cells together, Jaxley implements a `connect` method, that can be used to couple 2 compartments together using a `Synapse`. Synapses in Jaxley work only on the compartment level, that means to be able to connect two cells, you need to specify the exact compartments on a given cell to make the connections between. Below is an example of this." + "To connect different cells together, Jaxley implements a `connect` method, that can be used to couple 2 compartments together using a `Synapse`. Synapses in Jaxley work only on the compartment level, that means to be able to connect two cells, you need to specify the exact compartments on a given cell to make the connections between. Below is an example of this:" ] }, { "cell_type": "code", - "execution_count": 58, - "id": "edac8921", + "execution_count": 78, + "id": "bdcf3bfc", "metadata": {}, "outputs": [ { @@ -1716,7 +2644,7 @@ "0 0 " ] }, - "execution_count": 58, + "execution_count": 78, "metadata": {}, "output_type": "execute_result" } @@ -1733,7 +2661,7 @@ }, { "cell_type": "markdown", - "id": "eb546a7d", + "id": "72cb837f", "metadata": {}, "source": [ "As you can see above, now the `edges` dataframe is also updated with the information of the newly added synapse. " @@ -1741,7 +2669,7 @@ }, { "cell_type": "markdown", - "id": "86fc76ae", + "id": "c9ea0710", "metadata": {}, "source": [ "Congrats! You should now have an intuitive understand of how to use Jaxley's API to construct, navigate and manipulate neuron models. To run your first morphologically detailed neuron simulation in `Jaxley`. We suggest to continue by learning how to [simulate neurons](https://jaxleyverse.github.io/jaxley/latest/tutorial/01_morph_neurons/)." @@ -1750,7 +2678,7 @@ ], "metadata": { "kernelspec": { - "display_name": "jaxley", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, @@ -1764,7 +2692,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.12.1" + "version": "3.12.4" } }, "nbformat": 4,