|
22 | 22 | "source": [ |
23 | 23 | "This model relies on a basic equivalence between a biological membrane plus embedded ion channels, and an electrical circuit.\n", |
24 | 24 | "\n", |
| 25 | + "<font size=\"5\">Basic inputs to the Model</font>\n", |
| 26 | + "\n", |
| 27 | + "1) Membrane capacitance, uF/cm^2\n", |
| 28 | + "2) Maximum Conductances, mS/cm^2\n", |
| 29 | + "3) Nernst Reverasal Potentials, mV\n", |
| 30 | + "4) Simulation Parameters (time), ms\n", |
| 31 | + "\n", |
25 | 32 | "<img src=\"equivalentCircuit.PNG\" width=\"500\"/>\n" |
26 | 33 | ] |
27 | 34 | }, |
28 | | - { |
29 | | - "cell_type": "markdown", |
30 | | - "metadata": {}, |
31 | | - "source": [ |
32 | | - "<font size=\"5\">Inputs to the Model</font>" |
33 | | - ] |
34 | | - }, |
35 | | - { |
36 | | - "cell_type": "markdown", |
37 | | - "metadata": {}, |
38 | | - "source": [ |
39 | | - "<font size=\"3\">1) Membrane capacitance, uF/cm^2</font>" |
40 | | - ] |
41 | | - }, |
42 | | - { |
43 | | - "cell_type": "markdown", |
44 | | - "metadata": {}, |
45 | | - "source": [ |
46 | | - "<font size=\"3\">2) Maximum Conductances, mS/cm^2</font>" |
47 | | - ] |
48 | | - }, |
49 | | - { |
50 | | - "cell_type": "markdown", |
51 | | - "metadata": {}, |
52 | | - "source": [ |
53 | | - "<font size=\"3\">3) Nernst Reverasal Potentials, mV</font>" |
54 | | - ] |
55 | | - }, |
56 | | - { |
57 | | - "cell_type": "markdown", |
58 | | - "metadata": {}, |
59 | | - "source": [ |
60 | | - "<font size=\"3\">4) Simulation Parameters (time), s</font>" |
61 | | - ] |
62 | | - }, |
63 | 35 | { |
64 | 36 | "cell_type": "markdown", |
65 | 37 | "metadata": {}, |
|
75 | 47 | { |
76 | 48 | "data": { |
77 | 49 | "application/vnd.jupyter.widget-view+json": { |
78 | | - "model_id": "e851f9fc076c4a64a36657cd04c67824", |
| 50 | + "model_id": "ad6a061177c04f0699acea9767f2345b", |
79 | 51 | "version_major": 2, |
80 | 52 | "version_minor": 0 |
81 | 53 | }, |
82 | 54 | "text/plain": [ |
83 | | - "interactive(children=(FloatSlider(value=1.0, description='C_m', max=3.0, min=-1.0), IntSlider(value=120, descr…" |
| 55 | + "VBox(children=(HBox(children=(HTML(value=\"<b><font color='blue'>Membrane Capacitance, uF/cm^2</b>\"),)), HBox(c…" |
84 | 56 | ] |
85 | 57 | }, |
86 | 58 | "metadata": {}, |
|
89 | 61 | { |
90 | 62 | "data": { |
91 | 63 | "application/vnd.jupyter.widget-view+json": { |
92 | | - "model_id": "2fffcdd416f543289755b6567288ba86", |
| 64 | + "model_id": "4932cb960e094cc18913bbf2f918930f", |
93 | 65 | "version_major": 2, |
94 | 66 | "version_minor": 0 |
95 | 67 | }, |
96 | 68 | "text/plain": [ |
97 | | - "VBox(children=(HBox(children=(HTML(value=\"<b><font color='blue'>Membrane Capacitance, uF/cm^2</b>\"),)), HBox(c…" |
| 69 | + "Output()" |
98 | 70 | ] |
99 | 71 | }, |
100 | 72 | "metadata": {}, |
|
107 | 79 | "import ipywidgets\n", |
108 | 80 | "import numpy as np\n", |
109 | 81 | "\n", |
110 | | - "def runHH(C_m, g_Na, g_K, g_L, E_Na, E_K, E_L):\n", |
111 | | - " t = np.arange(0.0, 450.0, 0.01)\n", |
| 82 | + "def runHH(C_m, g_Na, g_K, g_L, E_Na, E_K, E_L, t_0, t_n, delta_t):\n", |
| 83 | + " t = np.arange(t_0, t_n, delta_t)\n", |
112 | 84 | " runner = HHmodel.HodgkinHuxley(C_m, g_Na, g_K, g_L, E_Na, E_K, E_L, t)\n", |
113 | 85 | " runner.Main()\n", |
114 | 86 | " \n", |
115 | | - "w1=ipywidgets.interact(runHH,C_m=1.0,g_Na=120, g_K=36, g_L=0.3, E_Na=50, E_K=-77, E_L=-54.387)\n", |
116 | | - "ui_widget.v1" |
117 | | - ] |
118 | | - }, |
119 | | - { |
120 | | - "cell_type": "code", |
121 | | - "execution_count": null, |
122 | | - "metadata": {}, |
123 | | - "outputs": [], |
124 | | - "source": [ |
125 | | - "from ipywidgets import Button, GridBox, Layout, ButtonStyle\n", |
126 | | - "\n", |
127 | | - "\n", |
128 | | - "header = Button(description='Header',\n", |
129 | | - " layout=Layout(width='auto', grid_area='header'),\n", |
130 | | - " style=ButtonStyle(button_color='lightblue'))\n", |
131 | | - "main = Button(description='Main',\n", |
132 | | - " layout=Layout(width='auto', grid_area='main'),\n", |
133 | | - " style=ButtonStyle(button_color='moccasin'))\n", |
134 | | - "sidebar = Button(description='Sidebar',\n", |
135 | | - " layout=Layout(width='auto', grid_area='sidebar'),\n", |
136 | | - " style=ButtonStyle(button_color='salmon'))\n", |
137 | | - "footer = Button(description='Footer',\n", |
138 | | - " layout=Layout(width='auto', grid_area='footer'),\n", |
139 | | - " style=ButtonStyle(button_color='olive'))\n", |
| 87 | + "w1=ipywidgets.interactive_output(runHH,{'C_m':ui_widget.slider_capacitance,\n", |
| 88 | + " 'g_Na':ui_widget.slider_cond_Na, 'g_K':ui_widget.slider_cond_K, 'g_L':ui_widget.slider_cond_L, \n", |
| 89 | + " 'E_Na':ui_widget.slider_pot_Na, 'E_K':ui_widget.slider_pot_K, 'E_L':ui_widget.slider_pot_L,\n", |
| 90 | + " 't_0':ui_widget.time_start, 't_n':ui_widget.time_end, 'delta_t':ui_widget.time_step})\n", |
140 | 91 | "\n", |
141 | | - "GridBox(children=[header, main, sidebar, footer],\n", |
142 | | - " layout=Layout(\n", |
143 | | - " width='50%',\n", |
144 | | - " grid_template_rows='auto auto auto',\n", |
145 | | - " grid_template_columns='25% 25% 25% 25%',\n", |
146 | | - " grid_template_areas='''\n", |
147 | | - " \"header header header header\"\n", |
148 | | - " \"main main . sidebar \"\n", |
149 | | - " \"footer footer footer footer\"\n", |
150 | | - " ''')\n", |
151 | | - " )" |
152 | | - ] |
153 | | - }, |
154 | | - { |
155 | | - "cell_type": "code", |
156 | | - "execution_count": null, |
157 | | - "metadata": {}, |
158 | | - "outputs": [], |
159 | | - "source": [ |
160 | | - "from ipywidgets import AppLayout, Button, Layout\n", |
161 | | - "\n", |
162 | | - "def create_expanded_button(description, button_style):\n", |
163 | | - " return Button(description=description, button_style=button_style, layout=Layout(height='auto', width='auto'))\n", |
164 | | - "\n", |
165 | | - "header_button = create_expanded_button('Header', 'success')\n", |
166 | | - "left_button = create_expanded_button('Left', 'info')\n", |
167 | | - "center_button = create_expanded_button('Center', 'warning')\n", |
168 | | - "right_button = create_expanded_button('Right', 'info')\n", |
169 | | - "footer_button = create_expanded_button('Footer', 'success')\n", |
170 | | - "\n", |
171 | | - "AppLayout(header=header_button,\n", |
172 | | - " left_sidebar=left_button,\n", |
173 | | - " center=None,\n", |
174 | | - " right_sidebar=right_button,\n", |
175 | | - " footer=footer_button)\n", |
176 | | - "\n", |
177 | | - "from ipywidgets import GridspecLayout\n", |
178 | | - "\n", |
179 | | - "\n", |
180 | | - "grid = GridspecLayout(4, 3)\n", |
181 | | - "\n", |
182 | | - "grid[0, 0] = create_expanded_button('Button {} - {}', 'warning')\n", |
183 | | - "grid[0, 1] = create_expanded_button('Button {} - {}', 'success')\n", |
184 | | - "grid\n", |
185 | | - "\n", |
186 | | - "\n" |
| 92 | + "ui_widget.v1\n", |
| 93 | + "display(ui_widget.v1,w1)" |
187 | 94 | ] |
188 | 95 | }, |
189 | 96 | { |
190 | 97 | "cell_type": "markdown", |
191 | | - "metadata": { |
192 | | - "jp-MarkdownHeadingCollapsed": true, |
193 | | - "tags": [] |
194 | | - }, |
| 98 | + "metadata": {}, |
195 | 99 | "source": [ |
196 | | - "<font size=\"5\">Description of each plot</font>" |
| 100 | + "<font size=\"5\">Description of the Plots</font>" |
197 | 101 | ] |
198 | 102 | }, |
199 | 103 | { |
|
210 | 114 | "cell_type": "markdown", |
211 | 115 | "metadata": {}, |
212 | 116 | "source": [ |
213 | | - "" |
| 117 | + "<font size=\"5\">Advanced Inputs</font>" |
| 118 | + ] |
| 119 | + }, |
| 120 | + { |
| 121 | + "cell_type": "code", |
| 122 | + "execution_count": 4, |
| 123 | + "metadata": {}, |
| 124 | + "outputs": [ |
| 125 | + { |
| 126 | + "data": { |
| 127 | + "application/vnd.jupyter.widget-view+json": { |
| 128 | + "model_id": "ac8ae0e37ce54981916660fa626b1991", |
| 129 | + "version_major": 2, |
| 130 | + "version_minor": 0 |
| 131 | + }, |
| 132 | + "text/plain": [ |
| 133 | + "interactive(children=(IntSlider(value=10, description='amplidute'), IntSlider(value=100, description='t_width'…" |
| 134 | + ] |
| 135 | + }, |
| 136 | + "metadata": {}, |
| 137 | + "output_type": "display_data" |
| 138 | + } |
| 139 | + ], |
| 140 | + "source": [ |
| 141 | + "import sympy\n", |
| 142 | + "import matplotlib.pyplot as plt\n", |
| 143 | + "from ipywidgets import interact\n", |
| 144 | + "sympy.init_printing()\n", |
| 145 | + "%matplotlib inline\n", |
| 146 | + "\n", |
| 147 | + "t = sympy.symbols('t')\n", |
| 148 | + "S = sympy.Heaviside\n", |
| 149 | + "\n", |
| 150 | + "def injectorCurrent(amplidute=10, t_width=100, t_translation=100):\n", |
| 151 | + " s1 = amplidute*S(t - 0 - t_translation)\n", |
| 152 | + " s2 = amplidute*S(t - t_width - t_translation) \n", |
| 153 | + " I_inj = (s1 - s2)\n", |
| 154 | + " sympy.plot(I_inj, (t, 0, 450, 0.01))\n", |
| 155 | + " \n", |
| 156 | + "w=interact(injectorCurrent,\n", |
| 157 | + " amplidute=(0,100),\n", |
| 158 | + " t_width=(0,100),\n", |
| 159 | + " t_translation=(0,450));" |
214 | 160 | ] |
215 | 161 | } |
216 | 162 | ], |
|
0 commit comments