{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# 22. Scaling reaction-diffusion patterns\n", "\n", "(c) 2019 Justin Bois and Michael Elowitz. With the exception of pasted graphics, where the source is noted, this work is licensed under a [Creative Commons Attribution License CC-BY 4.0](https://creativecommons.org/licenses/by/4.0/). All code contained herein is licensed under an [MIT license](https://opensource.org/licenses/MIT).\n", "\n", "This document was prepared at [Caltech](http://www.caltech.edu) with financial support from the [Donna and Benjamin M. Rosen Bioengineering Center](http://rosen.caltech.edu).\n", "\n", "\n", "\n", "
\n", "
" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "
\n", " \n", " Loading BokehJS ...\n", "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "\n", "(function(root) {\n", " function now() {\n", " return new Date();\n", " }\n", "\n", " var force = true;\n", "\n", " if (typeof root._bokeh_onload_callbacks === \"undefined\" || force === true) {\n", " root._bokeh_onload_callbacks = [];\n", " root._bokeh_is_loading = undefined;\n", " }\n", "\n", " var JS_MIME_TYPE = 'application/javascript';\n", " var HTML_MIME_TYPE = 'text/html';\n", " var EXEC_MIME_TYPE = 'application/vnd.bokehjs_exec.v0+json';\n", " var CLASS_NAME = 'output_bokeh rendered_html';\n", "\n", " /**\n", " * Render data to the DOM node\n", " */\n", " function render(props, node) {\n", " var script = document.createElement(\"script\");\n", " node.appendChild(script);\n", " }\n", "\n", " /**\n", " * Handle when an output is cleared or removed\n", " */\n", " function handleClearOutput(event, handle) {\n", " var cell = handle.cell;\n", "\n", " var id = cell.output_area._bokeh_element_id;\n", " var server_id = cell.output_area._bokeh_server_id;\n", " // Clean up Bokeh references\n", " if (id != null && id in Bokeh.index) {\n", " Bokeh.index[id].model.document.clear();\n", " delete Bokeh.index[id];\n", " }\n", "\n", " if (server_id !== undefined) {\n", " // Clean up Bokeh references\n", " var cmd = \"from bokeh.io.state import curstate; print(curstate().uuid_to_server['\" + server_id + \"'].get_sessions()[0].document.roots[0]._id)\";\n", " cell.notebook.kernel.execute(cmd, {\n", " iopub: {\n", " output: function(msg) {\n", " var id = msg.content.text.trim();\n", " if (id in Bokeh.index) {\n", " Bokeh.index[id].model.document.clear();\n", " delete Bokeh.index[id];\n", " }\n", " }\n", " }\n", " });\n", " // Destroy server and session\n", " var cmd = \"import bokeh.io.notebook as ion; ion.destroy_server('\" + server_id + \"')\";\n", " cell.notebook.kernel.execute(cmd);\n", " }\n", " }\n", "\n", " /**\n", " * Handle when a new output is added\n", " */\n", " function handleAddOutput(event, handle) {\n", " var output_area = handle.output_area;\n", " var output = handle.output;\n", "\n", " // limit handleAddOutput to display_data with EXEC_MIME_TYPE content only\n", " if ((output.output_type != \"display_data\") || (!output.data.hasOwnProperty(EXEC_MIME_TYPE))) {\n", " return\n", " }\n", "\n", " var toinsert = output_area.element.find(\".\" + CLASS_NAME.split(' ')[0]);\n", "\n", " if (output.metadata[EXEC_MIME_TYPE][\"id\"] !== undefined) {\n", " toinsert[toinsert.length - 1].firstChild.textContent = output.data[JS_MIME_TYPE];\n", " // store reference to embed id on output_area\n", " output_area._bokeh_element_id = output.metadata[EXEC_MIME_TYPE][\"id\"];\n", " }\n", " if (output.metadata[EXEC_MIME_TYPE][\"server_id\"] !== undefined) {\n", " var bk_div = document.createElement(\"div\");\n", " bk_div.innerHTML = output.data[HTML_MIME_TYPE];\n", " var script_attrs = bk_div.children[0].attributes;\n", " for (var i = 0; i < script_attrs.length; i++) {\n", " toinsert[toinsert.length - 1].firstChild.setAttribute(script_attrs[i].name, script_attrs[i].value);\n", " }\n", " // store reference to server id on output_area\n", " output_area._bokeh_server_id = output.metadata[EXEC_MIME_TYPE][\"server_id\"];\n", " }\n", " }\n", "\n", " function register_renderer(events, OutputArea) {\n", "\n", " function append_mime(data, metadata, element) {\n", " // create a DOM node to render to\n", " var toinsert = this.create_output_subarea(\n", " metadata,\n", " CLASS_NAME,\n", " EXEC_MIME_TYPE\n", " );\n", " this.keyboard_manager.register_events(toinsert);\n", " // Render to node\n", " var props = {data: data, metadata: metadata[EXEC_MIME_TYPE]};\n", " render(props, toinsert[toinsert.length - 1]);\n", " element.append(toinsert);\n", " return toinsert\n", " }\n", "\n", " /* Handle when an output is cleared or removed */\n", " events.on('clear_output.CodeCell', handleClearOutput);\n", " events.on('delete.Cell', handleClearOutput);\n", "\n", " /* Handle when a new output is added */\n", " events.on('output_added.OutputArea', handleAddOutput);\n", "\n", " /**\n", " * Register the mime type and append_mime function with output_area\n", " */\n", " OutputArea.prototype.register_mime_type(EXEC_MIME_TYPE, append_mime, {\n", " /* Is output safe? */\n", " safe: true,\n", " /* Index of renderer in `output_area.display_order` */\n", " index: 0\n", " });\n", " }\n", "\n", " // register the mime type if in Jupyter Notebook environment and previously unregistered\n", " if (root.Jupyter !== undefined) {\n", " var events = require('base/js/events');\n", " var OutputArea = require('notebook/js/outputarea').OutputArea;\n", "\n", " if (OutputArea.prototype.mime_types().indexOf(EXEC_MIME_TYPE) == -1) {\n", " register_renderer(events, OutputArea);\n", " }\n", " }\n", "\n", " \n", " if (typeof (root._bokeh_timeout) === \"undefined\" || force === true) {\n", " root._bokeh_timeout = Date.now() + 5000;\n", " root._bokeh_failed_load = false;\n", " }\n", "\n", " var NB_LOAD_WARNING = {'data': {'text/html':\n", " \"
\\n\"+\n", " \"

\\n\"+\n", " \"BokehJS does not appear to have successfully loaded. If loading BokehJS from CDN, this \\n\"+\n", " \"may be due to a slow or bad network connection. Possible fixes:\\n\"+\n", " \"

\\n\"+\n", " \"\\n\"+\n", " \"\\n\"+\n", " \"from bokeh.resources import INLINE\\n\"+\n", " \"output_notebook(resources=INLINE)\\n\"+\n", " \"\\n\"+\n", " \"
\"}};\n", "\n", " function display_loaded() {\n", " var el = document.getElementById(\"1001\");\n", " if (el != null) {\n", " el.textContent = \"BokehJS is loading...\";\n", " }\n", " if (root.Bokeh !== undefined) {\n", " if (el != null) {\n", " el.textContent = \"BokehJS \" + root.Bokeh.version + \" successfully loaded.\";\n", " }\n", " } else if (Date.now() < root._bokeh_timeout) {\n", " setTimeout(display_loaded, 100)\n", " }\n", " }\n", "\n", "\n", " function run_callbacks() {\n", " try {\n", " root._bokeh_onload_callbacks.forEach(function(callback) {\n", " if (callback != null)\n", " callback();\n", " });\n", " } finally {\n", " delete root._bokeh_onload_callbacks\n", " }\n", " console.debug(\"Bokeh: all callbacks have finished\");\n", " }\n", "\n", " function load_libs(css_urls, js_urls, callback) {\n", " if (css_urls == null) css_urls = [];\n", " if (js_urls == null) js_urls = [];\n", "\n", " root._bokeh_onload_callbacks.push(callback);\n", " if (root._bokeh_is_loading > 0) {\n", " console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n", " return null;\n", " }\n", " if (js_urls == null || js_urls.length === 0) {\n", " run_callbacks();\n", " return null;\n", " }\n", " console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n", " root._bokeh_is_loading = css_urls.length + js_urls.length;\n", "\n", " function on_load() {\n", " root._bokeh_is_loading--;\n", " if (root._bokeh_is_loading === 0) {\n", " console.debug(\"Bokeh: all BokehJS libraries/stylesheets loaded\");\n", " run_callbacks()\n", " }\n", " }\n", "\n", " function on_error() {\n", " console.error(\"failed to load \" + url);\n", " }\n", "\n", " for (var i = 0; i < css_urls.length; i++) {\n", " var url = css_urls[i];\n", " const element = document.createElement(\"link\");\n", " element.onload = on_load;\n", " element.onerror = on_error;\n", " element.rel = \"stylesheet\";\n", " element.type = \"text/css\";\n", " element.href = url;\n", " console.debug(\"Bokeh: injecting link tag for BokehJS stylesheet: \", url);\n", " document.body.appendChild(element);\n", " }\n", "\n", " for (var i = 0; i < js_urls.length; i++) {\n", " var url = js_urls[i];\n", " var element = document.createElement('script');\n", " element.onload = on_load;\n", " element.onerror = on_error;\n", " element.async = false;\n", " element.src = url;\n", " console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n", " document.head.appendChild(element);\n", " }\n", " };var element = document.getElementById(\"1001\");\n", " if (element == null) {\n", " console.error(\"Bokeh: ERROR: autoload.js configured with elementid '1001' but no matching script tag was found. \")\n", " return false;\n", " }\n", "\n", " function inject_raw_css(css) {\n", " const element = document.createElement(\"style\");\n", " element.appendChild(document.createTextNode(css));\n", " document.body.appendChild(element);\n", " }\n", "\n", " var js_urls = [\"https://cdn.pydata.org/bokeh/release/bokeh-1.1.0.min.js\", \"https://cdn.pydata.org/bokeh/release/bokeh-widgets-1.1.0.min.js\", \"https://cdn.pydata.org/bokeh/release/bokeh-tables-1.1.0.min.js\", \"https://cdn.pydata.org/bokeh/release/bokeh-gl-1.1.0.min.js\"];\n", " var css_urls = [\"https://cdn.pydata.org/bokeh/release/bokeh-1.1.0.min.css\", \"https://cdn.pydata.org/bokeh/release/bokeh-widgets-1.1.0.min.css\", \"https://cdn.pydata.org/bokeh/release/bokeh-tables-1.1.0.min.css\"];\n", "\n", " var inline_js = [\n", " function(Bokeh) {\n", " Bokeh.set_log_level(\"info\");\n", " },\n", " \n", " function(Bokeh) {\n", " \n", " },\n", " function(Bokeh) {} // ensure no trailing comma for IE\n", " ];\n", "\n", " function run_inline_js() {\n", " \n", " if ((root.Bokeh !== undefined) || (force === true)) {\n", " for (var i = 0; i < inline_js.length; i++) {\n", " inline_js[i].call(root, root.Bokeh);\n", " }if (force === true) {\n", " display_loaded();\n", " }} else if (Date.now() < root._bokeh_timeout) {\n", " setTimeout(run_inline_js, 100);\n", " } else if (!root._bokeh_failed_load) {\n", " console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n", " root._bokeh_failed_load = true;\n", " } else if (force !== true) {\n", " var cell = $(document.getElementById(\"1001\")).parents('.cell').data().cell;\n", " cell.output_area.append_execute_result(NB_LOAD_WARNING)\n", " }\n", "\n", " }\n", "\n", " if (root._bokeh_is_loading === 0) {\n", " console.debug(\"Bokeh: BokehJS loaded, going straight to plotting\");\n", " run_inline_js();\n", " } else {\n", " load_libs(css_urls, js_urls, function() {\n", " console.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n", " run_inline_js();\n", " });\n", " }\n", "}(window));" ], "application/vnd.bokehjs_load.v0+json": "\n(function(root) {\n function now() {\n return new Date();\n }\n\n var force = true;\n\n if (typeof root._bokeh_onload_callbacks === \"undefined\" || force === true) {\n root._bokeh_onload_callbacks = [];\n root._bokeh_is_loading = undefined;\n }\n\n \n\n \n if (typeof (root._bokeh_timeout) === \"undefined\" || force === true) {\n root._bokeh_timeout = Date.now() + 5000;\n root._bokeh_failed_load = false;\n }\n\n var NB_LOAD_WARNING = {'data': {'text/html':\n \"
\\n\"+\n \"

\\n\"+\n \"BokehJS does not appear to have successfully loaded. If loading BokehJS from CDN, this \\n\"+\n \"may be due to a slow or bad network connection. Possible fixes:\\n\"+\n \"

\\n\"+\n \"\\n\"+\n \"\\n\"+\n \"from bokeh.resources import INLINE\\n\"+\n \"output_notebook(resources=INLINE)\\n\"+\n \"\\n\"+\n \"
\"}};\n\n function display_loaded() {\n var el = document.getElementById(\"1001\");\n if (el != null) {\n el.textContent = \"BokehJS is loading...\";\n }\n if (root.Bokeh !== undefined) {\n if (el != null) {\n el.textContent = \"BokehJS \" + root.Bokeh.version + \" successfully loaded.\";\n }\n } else if (Date.now() < root._bokeh_timeout) {\n setTimeout(display_loaded, 100)\n }\n }\n\n\n function run_callbacks() {\n try {\n root._bokeh_onload_callbacks.forEach(function(callback) {\n if (callback != null)\n callback();\n });\n } finally {\n delete root._bokeh_onload_callbacks\n }\n console.debug(\"Bokeh: all callbacks have finished\");\n }\n\n function load_libs(css_urls, js_urls, callback) {\n if (css_urls == null) css_urls = [];\n if (js_urls == null) js_urls = [];\n\n root._bokeh_onload_callbacks.push(callback);\n if (root._bokeh_is_loading > 0) {\n console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n return null;\n }\n if (js_urls == null || js_urls.length === 0) {\n run_callbacks();\n return null;\n }\n console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n root._bokeh_is_loading = css_urls.length + js_urls.length;\n\n function on_load() {\n root._bokeh_is_loading--;\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: all BokehJS libraries/stylesheets loaded\");\n run_callbacks()\n }\n }\n\n function on_error() {\n console.error(\"failed to load \" + url);\n }\n\n for (var i = 0; i < css_urls.length; i++) {\n var url = css_urls[i];\n const element = document.createElement(\"link\");\n element.onload = on_load;\n element.onerror = on_error;\n element.rel = \"stylesheet\";\n element.type = \"text/css\";\n element.href = url;\n console.debug(\"Bokeh: injecting link tag for BokehJS stylesheet: \", url);\n document.body.appendChild(element);\n }\n\n for (var i = 0; i < js_urls.length; i++) {\n var url = js_urls[i];\n var element = document.createElement('script');\n element.onload = on_load;\n element.onerror = on_error;\n element.async = false;\n element.src = url;\n console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n document.head.appendChild(element);\n }\n };var element = document.getElementById(\"1001\");\n if (element == null) {\n console.error(\"Bokeh: ERROR: autoload.js configured with elementid '1001' but no matching script tag was found. \")\n return false;\n }\n\n function inject_raw_css(css) {\n const element = document.createElement(\"style\");\n element.appendChild(document.createTextNode(css));\n document.body.appendChild(element);\n }\n\n var js_urls = [\"https://cdn.pydata.org/bokeh/release/bokeh-1.1.0.min.js\", \"https://cdn.pydata.org/bokeh/release/bokeh-widgets-1.1.0.min.js\", \"https://cdn.pydata.org/bokeh/release/bokeh-tables-1.1.0.min.js\", \"https://cdn.pydata.org/bokeh/release/bokeh-gl-1.1.0.min.js\"];\n var css_urls = [\"https://cdn.pydata.org/bokeh/release/bokeh-1.1.0.min.css\", \"https://cdn.pydata.org/bokeh/release/bokeh-widgets-1.1.0.min.css\", \"https://cdn.pydata.org/bokeh/release/bokeh-tables-1.1.0.min.css\"];\n\n var inline_js = [\n function(Bokeh) {\n Bokeh.set_log_level(\"info\");\n },\n \n function(Bokeh) {\n \n },\n function(Bokeh) {} // ensure no trailing comma for IE\n ];\n\n function run_inline_js() {\n \n if ((root.Bokeh !== undefined) || (force === true)) {\n for (var i = 0; i < inline_js.length; i++) {\n inline_js[i].call(root, root.Bokeh);\n }if (force === true) {\n display_loaded();\n }} else if (Date.now() < root._bokeh_timeout) {\n setTimeout(run_inline_js, 100);\n } else if (!root._bokeh_failed_load) {\n console.log(\"Bokeh: BokehJS failed to load within specified timeout.\");\n root._bokeh_failed_load = true;\n } else if (force !== true) {\n var cell = $(document.getElementById(\"1001\")).parents('.cell').data().cell;\n cell.output_area.append_execute_result(NB_LOAD_WARNING)\n }\n\n }\n\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: BokehJS loaded, going straight to plotting\");\n run_inline_js();\n } else {\n load_libs(css_urls, js_urls, function() {\n console.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n run_inline_js();\n });\n }\n}(window));" }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import numpy as np\n", "import scipy.integrate\n", "\n", "import biocircuits\n", "\n", "import bokeh.layouts\n", "import bokeh.plotting\n", "import bokeh.io\n", "\n", "bokeh.io.output_notebook()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Reaction-diffusion models for morphogen patterning\n", "\n", "In the last lesson, we discussed **morphogens**, chemical species that determine cell fate in a concentration-dependent manner. Morphogens are spatially distributed throughout a developing organism, thereby imparting spatial variation in cell types. They present us with a great opportunity to connect our genetic network dynamics to spatial variation.\n", "\n", "We specifically discussed two-component systems that give what is now known as **Turing patterns**. More generally, we can consider a set of biochemical species, $\\mathbf{M} = \\{M_1, M_2, \\ldots\\}$. The set of concentrations of these biochemical species is $\\mathbf{c} = \\{c_1, c_2, \\ldots\\}$. We can write down a system of partial differential equations describing the dynamics of morphogen concentrations (which is more or less a statement of conservation of mass) as\n", "\n", "\\begin{align}\n", "\\frac{\\partial c_i}{\\partial t} &= \\frac{\\partial}{\\partial x}\\,D_i\\,\\frac{\\partial c_i}{\\partial x} + r_i(\\mathbf{c}),\n", "\\end{align}\n", "\n", "valid for all $i$. Here, $r_i(\\mathbf{c})$ describes the net rate of production of species $M_i$, dependent on the concentrations of all other species. The diffusion coefficient $D_i$ parametrizes the diffusion of species $i$. For our purposes today, we are restricting ourselves to one-dimensional systems. We also have implicitly assumed that the diffusivity tensor is diagonal. Finally, for all of our analyses in this lecture, we will assume $x \\in [0,L]$ with constant flux (usually no flux) boundary conditions at the ends of the domain. Recall that the flux of morphogen is given by Fick's first law,\n", "\n", "\\begin{align}\n", "j_i &= -D_i\\,\\frac{\\partial c_i}{\\partial x}.\n", "\\end{align}" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### A gradient from a point source\n", "\n", "We will begin by analyzing the simplest case of morphogen patterning. We have a single morphogen, $M$, which has a source at $x = 0$. We model the source as a constant flux, $\\eta$ at $x = 0$." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Simple decay of the morphogen\n", "\n", "We begin with the case where our morphogen only undergoes a single reaction, degradation which we would represent as $M \\to \\emptyset$, and has a constant diffusion coefficient. Our PDE is\n", "\n", "\\begin{align}\n", "\\frac{\\partial c}{\\partial t} &= D \\,\\frac{\\partial^2 c}{\\partial x^2} - \\gamma c, \\\\[1em]\n", "\\left.\\frac{\\partial c}{\\partial x}\\right|_{x=0} &= -\\frac{\\eta}{D}\\\\[1em]\n", "\\left.\\frac{\\partial c}{\\partial x}\\right|_{x=L} &= 0.\n", "\\end{align}\n", "\n", "We can readily solve for the unique steady state in this case as\n", "\n", "\\begin{align}\n", "c(x) = \\frac{\\eta}{\\sqrt{D\\gamma}}\\,\\frac{\\mathrm{e}^{-x/\\lambda} + \\mathrm{e}^{(x-2L)/\\lambda}}{1 - \\mathrm{e}^{-2L/\\lambda}},\n", "\\end{align}\n", "\n", "where $\\lambda \\equiv \\sqrt{D/\\gamma}$. So, we have an exponentially decaying morphogen profile with decay length $\\lambda$. Typically, $L \\gg \\lambda$, so we have\n", "\n", "\\begin{align}\n", "c(x) &\\approx \\frac{\\eta}{\\sqrt{D\\gamma}}\\,\\mathrm{e}^{-x/\\lambda}.\n", "\\end{align}" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Two obvious problems with this expression\n", "\n", "Considering that morphogens determine cell fate in a concentration-dependent manner, there are two obvious problems with this expression.\n", "1. The total level of the morphogen is set by the strength of the source, $\\eta$, assuming $D$ and $\\gamma$ are constant. This would mean that cell fate would not be robust to the strength of the source.\n", "2. The decay length of the concentration profile is independent of size. This means that a larger organism would have all of its morphogen highly concentrated near $x/L = 0$.\n", "\n", "Issue 2 is most clearly seen if we plot two profiles together." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", "\n", "\n", "\n", "
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "(function(root) {\n", " function embed_document(root) {\n", " \n", " var docs_json = {\"22bb0f87-0676-49d6-8be0-5361c211e34b\":{\"roots\":{\"references\":[{\"attributes\":{\"children\":[{\"id\":\"1131\",\"type\":\"ToolbarBox\"},{\"id\":\"1129\",\"type\":\"GridBox\"}]},\"id\":\"1132\",\"type\":\"Column\"},{\"attributes\":{},\"id\":\"1022\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"overlay\":{\"id\":\"1077\",\"type\":\"BoxAnnotation\"}},\"id\":\"1023\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"line_color\":\"orange\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1081\",\"type\":\"Line\"},{\"attributes\":{\"bottom_units\":\"screen\",\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"lightgrey\"},\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":{\"value\":1.0},\"line_color\":{\"value\":\"black\"},\"line_dash\":[4,4],\"line_width\":{\"value\":2},\"render_mode\":\"css\",\"right_units\":\"screen\",\"top_units\":\"screen\"},\"id\":\"1077\",\"type\":\"BoxAnnotation\"},{\"attributes\":{},\"id\":\"1024\",\"type\":\"SaveTool\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1082\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1025\",\"type\":\"ResetTool\"},{\"attributes\":{\"callback\":null,\"data\":{\"x\":{\"__ndarray__\":\"AAAAAAAAAABm0LLjOZV0P2bQsuM5lYQ/mjiM1dbfjj9m0LLjOZWUP4CEn1yIupk/mjiM1dbfnj9adjynkgKiP2bQsuM5laQ/cyopIOEnpz+AhJ9ciLqpP43eFZkvTaw/mjiM1dbfrj9TSQEJP7mwP1p2PKeSArI/YKN3ReZLsz9m0LLjOZW0P2397YGN3rU/cyopIOEntz96V2S+NHG4P4CEn1yIurk/hrHa+tsDuz+N3hWZL028P5MLUTeDlr0/mjiM1dbfvj/QsuM5lRTAP1NJAQk/ucA/1t8e2OhdwT9adjynkgLCP90MWnY8p8I/YKN3ReZLwz/jOZUUkPDDP2bQsuM5lcQ/6WbQsuM5xT9t/e2Bjd7FP/GTC1E3g8Y/cyopIOEnxz/2wEbviszHP3pXZL40ccg//e2Bjd4VyT+AhJ9ciLrJPwMbvSsyX8o/hrHa+tsDyz8KSPjJhajLP43eFZkvTcw/D3UzaNnxzD+TC1E3g5bNPxeibgYtO84/mjiM1dbfzj8cz6mkgITPP9Cy4zmVFNA/En5yIepm0D9TSQEJP7nQP5QUkPCTC9E/1t8e2Ohd0T8Yq62/PbDRP1p2PKeSAtI/m0HLjudU0j/dDFp2PKfSPx/Y6F2R+dI/YKN3ReZL0z+hbgYtO57TP+M5lRSQ8NM/JQUk/ORC1D9m0LLjOZXUP6ibQcuO59Q/6WbQsuM51T8sMl+aOIzVP2397YGN3tU/rsh8aeIw1j/xkwtRN4PWPzJfmjiM1dY/cyopIOEn1z+09bcHNnrXP/bARu+KzNc/OIzV1t8e2D96V2S+NHHYP7si86WJw9g//e2Bjd4V2T8/uRB1M2jZP4CEn1yIutk/wU8uRN0M2j8DG70rMl/aP0XmSxOHsdo/hrHa+tsD2z/IfGniMFbbPwpI+MmFqNs/TBOHsdr62z+N3hWZL03cP86ppICEn9w/D3UzaNnx3D9SQMJPLkTdP5MLUTeDlt0/1NbfHtjo3T8Xom4GLTveP1ht/e2Bjd4/mjiM1dbf3j/bAxu9KzLfPxzPqaSAhN8/X5o4jNXW3z/QsuM5lRTgP3EYq62/PeA/En5yIepm4D+z4zmVFJDgP1NJAQk/ueA/9K7IfGni4D+UFJDwkwvhPzZ6V2S+NOE/1t8e2Ohd4T93ReZLE4fhPxirrb89sOE/uRB1M2jZ4T9adjynkgLiP/rbAxu9K+I/m0HLjudU4j88p5ICEn7iP90MWnY8p+I/fXIh6mbQ4j8f2OhdkfniP789sNG7IuM/YKN3ReZL4z8BCT+5EHXjP6FuBi07nuM/Q9TNoGXH4z/jOZUUkPDjP4SfXIi6GeQ/JQUk/ORC5D/GautvD2zkP2bQsuM5leQ/CDZ6V2S+5D+om0HLjufkP0kBCT+5EOU/6WbQsuM55T+KzJcmDmPlPywyX5o4jOU/zJcmDmO15T9t/e2Bjd7lPw5jtfW3B+Y/rsh8aeIw5j9PLkTdDFrmP/GTC1E3g+Y/kfnSxGGs5j8yX5o4jNXmP9LEYay2/uY/cyopIOEn5z8UkPCTC1HnP7T1twc2euc/Vlt/e2Cj5z/2wEbvisznP5cmDmO19ec/OIzV1t8e6D/Y8ZxKCkjoP3pXZL40ceg/G70rMl+a6D+7IvOlicPoP1yIuhm07Og//e2Bjd4V6T+dU0kBCT/pPz+5EHUzaOk/3x7Y6F2R6T+AhJ9ciLrpPyHqZtCy4+k/wU8uRN0M6j9jtfW3BzbqPwMbvSsyX+o/pICEn1yI6j9F5ksTh7HqP+VLE4ex2uo/hrHa+tsD6z8oF6JuBi3rP8h8aeIwVus/aeIwVlt/6z8KSPjJhajrP6qtvz2w0es/TBOHsdr66z/seE4lBSTsP43eFZkvTew/LkTdDFp27D/OqaSAhJ/sP28PbPSuyOw/D3UzaNnx7D+x2vrbAxvtP1JAwk8uRO0/8qWJw1ht7T+TC1E3g5btPzRxGKutv+0/1NbfHtjo7T92PKeSAhLuPxeibgYtO+4/twc2eldk7j9Ybf3tgY3uP/jSxGGstu4/mjiM1dbf7j87nlNJAQnvP9sDG70rMu8/fGniMFZb7z8cz6mkgITvP700cRirre8/X5o4jNXW7z8AAAAAAADwPw==\",\"dtype\":\"float64\",\"shape\":[200]},\"y\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"shape\":[200]}},\"selected\":{\"id\":\"1125\",\"type\":\"Selection\"},\"selection_policy\":{\"id\":\"1124\",\"type\":\"UnionRenderers\"}},\"id\":\"1095\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1026\",\"type\":\"HelpTool\"},{\"attributes\":{\"label\":{\"value\":\"L=100\"},\"renderers\":[{\"id\":\"1069\",\"type\":\"GlyphRenderer\"}]},\"id\":\"1079\",\"type\":\"LegendItem\"},{\"attributes\":{\"items\":[{\"id\":\"1079\",\"type\":\"LegendItem\"},{\"id\":\"1094\",\"type\":\"LegendItem\"}]},\"id\":\"1078\",\"type\":\"Legend\"},{\"attributes\":{\"active_drag\":\"auto\",\"active_inspect\":\"auto\",\"active_multi\":null,\"active_scroll\":\"auto\",\"active_tap\":\"auto\",\"tools\":[{\"id\":\"1021\",\"type\":\"PanTool\"},{\"id\":\"1022\",\"type\":\"WheelZoomTool\"},{\"id\":\"1023\",\"type\":\"BoxZoomTool\"},{\"id\":\"1024\",\"type\":\"SaveTool\"},{\"id\":\"1025\",\"type\":\"ResetTool\"},{\"id\":\"1026\",\"type\":\"HelpTool\"}]},\"id\":\"1027\",\"type\":\"Toolbar\"},{\"attributes\":{\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1067\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1039\",\"type\":\"LinearScale\"},{\"attributes\":{\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1096\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1041\",\"type\":\"LogScale\"},{\"attributes\":{\"axis_label\":\"x/L\",\"formatter\":{\"id\":\"1119\",\"type\":\"BasicTickFormatter\"},\"ticker\":{\"id\":\"1044\",\"type\":\"BasicTicker\"}},\"id\":\"1043\",\"type\":\"LinearAxis\"},{\"attributes\":{\"children\":[[{\"id\":\"1002\",\"subtype\":\"Figure\",\"type\":\"Plot\"},0,0],[{\"id\":\"1034\",\"subtype\":\"Figure\",\"type\":\"Plot\"},0,1]]},\"id\":\"1129\",\"type\":\"GridBox\"},{\"attributes\":{},\"id\":\"1044\",\"type\":\"BasicTicker\"},{\"attributes\":{\"ticker\":{\"id\":\"1044\",\"type\":\"BasicTicker\"}},\"id\":\"1047\",\"type\":\"Grid\"},{\"attributes\":{\"formatter\":{\"id\":\"1121\",\"type\":\"LogTickFormatter\"},\"ticker\":{\"id\":\"1049\",\"type\":\"LogTicker\"}},\"id\":\"1048\",\"type\":\"LogAxis\"},{\"attributes\":{\"num_minor_ticks\":10},\"id\":\"1049\",\"type\":\"LogTicker\"},{\"attributes\":{\"dimension\":1,\"ticker\":{\"id\":\"1049\",\"type\":\"LogTicker\"}},\"id\":\"1052\",\"type\":\"Grid\"},{\"attributes\":{\"data_source\":{\"id\":\"1066\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"1067\",\"type\":\"Line\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"1068\",\"type\":\"Line\"},\"selection_glyph\":null,\"view\":{\"id\":\"1070\",\"type\":\"CDSView\"}},\"id\":\"1069\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"source\":{\"id\":\"1080\",\"type\":\"ColumnDataSource\"}},\"id\":\"1084\",\"type\":\"CDSView\"},{\"attributes\":{\"source\":{\"id\":\"1066\",\"type\":\"ColumnDataSource\"}},\"id\":\"1070\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1053\",\"type\":\"PanTool\"},{\"attributes\":{},\"id\":\"1054\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"overlay\":{\"id\":\"1123\",\"type\":\"BoxAnnotation\"}},\"id\":\"1055\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"1056\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"1057\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"1058\",\"type\":\"HelpTool\"},{\"attributes\":{\"active_drag\":\"auto\",\"active_inspect\":\"auto\",\"active_multi\":null,\"active_scroll\":\"auto\",\"active_tap\":\"auto\",\"tools\":[{\"id\":\"1053\",\"type\":\"PanTool\"},{\"id\":\"1054\",\"type\":\"WheelZoomTool\"},{\"id\":\"1055\",\"type\":\"BoxZoomTool\"},{\"id\":\"1056\",\"type\":\"SaveTool\"},{\"id\":\"1057\",\"type\":\"ResetTool\"},{\"id\":\"1058\",\"type\":\"HelpTool\"}]},\"id\":\"1059\",\"type\":\"Toolbar\"},{\"attributes\":{\"data_source\":{\"id\":\"1080\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"1081\",\"type\":\"Line\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"1082\",\"type\":\"Line\"},\"selection_glyph\":null,\"view\":{\"id\":\"1084\",\"type\":\"CDSView\"}},\"id\":\"1083\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"below\":[{\"id\":\"1011\",\"type\":\"LinearAxis\"}],\"center\":[{\"id\":\"1015\",\"type\":\"Grid\"},{\"id\":\"1020\",\"type\":\"Grid\"},{\"id\":\"1078\",\"type\":\"Legend\"}],\"left\":[{\"id\":\"1016\",\"type\":\"LinearAxis\"}],\"plot_height\":250,\"plot_width\":350,\"renderers\":[{\"id\":\"1069\",\"type\":\"GlyphRenderer\"},{\"id\":\"1083\",\"type\":\"GlyphRenderer\"}],\"title\":{\"id\":\"1071\",\"type\":\"Title\"},\"toolbar\":{\"id\":\"1027\",\"type\":\"Toolbar\"},\"toolbar_location\":null,\"x_range\":{\"id\":\"1003\",\"type\":\"DataRange1d\"},\"x_scale\":{\"id\":\"1007\",\"type\":\"LinearScale\"},\"y_range\":{\"id\":\"1005\",\"type\":\"DataRange1d\"},\"y_scale\":{\"id\":\"1009\",\"type\":\"LinearScale\"}},\"id\":\"1002\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"text\":\"\"},\"id\":\"1071\",\"type\":\"Title\"},{\"attributes\":{\"bottom_units\":\"screen\",\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"lightgrey\"},\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":{\"value\":1.0},\"line_color\":{\"value\":\"black\"},\"line_dash\":[4,4],\"line_width\":{\"value\":2},\"render_mode\":\"css\",\"right_units\":\"screen\",\"top_units\":\"screen\"},\"id\":\"1123\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"below\":[{\"id\":\"1043\",\"type\":\"LinearAxis\"}],\"center\":[{\"id\":\"1047\",\"type\":\"Grid\"},{\"id\":\"1052\",\"type\":\"Grid\"}],\"left\":[{\"id\":\"1048\",\"type\":\"LogAxis\"}],\"plot_height\":250,\"plot_width\":350,\"renderers\":[{\"id\":\"1098\",\"type\":\"GlyphRenderer\"},{\"id\":\"1103\",\"type\":\"GlyphRenderer\"}],\"title\":{\"id\":\"1117\",\"type\":\"Title\"},\"toolbar\":{\"id\":\"1059\",\"type\":\"Toolbar\"},\"toolbar_location\":null,\"x_range\":{\"id\":\"1035\",\"type\":\"DataRange1d\"},\"x_scale\":{\"id\":\"1039\",\"type\":\"LinearScale\"},\"y_range\":{\"id\":\"1037\",\"type\":\"DataRange1d\"},\"y_scale\":{\"id\":\"1041\",\"type\":\"LogScale\"}},\"id\":\"1034\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"callback\":null},\"id\":\"1003\",\"type\":\"DataRange1d\"},{\"attributes\":{\"callback\":null},\"id\":\"1005\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"1007\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1009\",\"type\":\"LinearScale\"},{\"attributes\":{\"axis_label\":\"x/L\",\"formatter\":{\"id\":\"1073\",\"type\":\"BasicTickFormatter\"},\"ticker\":{\"id\":\"1012\",\"type\":\"BasicTicker\"}},\"id\":\"1011\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"1012\",\"type\":\"BasicTicker\"},{\"attributes\":{\"callback\":null},\"id\":\"1037\",\"type\":\"DataRange1d\"},{\"attributes\":{\"callback\":null,\"data\":{\"x\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"shape\":[200]},\"y\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"shape\":[200]}},\"selected\":{\"id\":\"1115\",\"type\":\"Selection\"},\"selection_policy\":{\"id\":\"1114\",\"type\":\"UnionRenderers\"}},\"id\":\"1080\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"callback\":null},\"id\":\"1035\",\"type\":\"DataRange1d\"},{\"attributes\":{\"callback\":null,\"data\":{\"x\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"shape\":[200]},\"y\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"shape\":[200]}},\"selected\":{\"id\":\"1093\",\"type\":\"Selection\"},\"selection_policy\":{\"id\":\"1092\",\"type\":\"UnionRenderers\"}},\"id\":\"1066\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1021\",\"type\":\"PanTool\"},{\"attributes\":{},\"id\":\"1119\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"1092\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"callback\":null,\"data\":{\"x\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"shape\":[200]},\"y\":{\"__ndarray__\":\"AAAAAAAA8D+tAXeGNL3uPx+46TAhh+0/jJuNsUVd7D/nvtbIJj/rP1tUeBJOLOo/2aBn1Ekk6T9uGc3PrCboP58x0BMOM+c/YyYr0ghJ5j8RznQ1PGjlP80qDzlLkOQ/FyuqgtzA4z9pq0o9mvniP2RsxvUxOuI/hEumeFSC4T9WoGCxtdHgP9Qu3ooMKOA/QlB5oiUK3z+4bIQpCtHdPwEd7BtFpNw/4vikBVqD2z+8owpa0W3aPxYhaEI4Y9k/1CdzbiBj2D+ryqbmH23XP4uSauDQgNY/Y+bzk9Gd1T+SUtATxMPUPy3yByZO8tM/I+XHHhkp0z9+YIW80WfSP+GBigUortE//KTeJs/70D+UiXxUfVDQP59FklXXV88/Q9p8Iqwbzj9eT3w89uvMPwKRAfg3yMs/mPAqnfivyj9up9A1xKLJPwk5iV0roMg/dNqRE8Onxz8HzIeOJLnGP7VT4BHt08U/b74Nxb33xD/2gECMOyTEP+86tOIOWcM/qQJ5tuOVwj+o/alFadrBP/3gAv1RJsE/zIXGV1N5wD9Gk9KBS6a/PwDx5OoIZ74/6v0Q0Fo0vT8CPThLwg28P9GpTnbF8ro/JzPqOO/iuT+xAs8Xz924PziFZAb54rc/FfH/OQXytj8Gy/H+jwq2Px+kRI85LLU/r/4b66VWtD899KKyfImzPy3cegFpxLI/j9GaSxkHsj/5jpE7P1GxP2CqG5KPorA/To4BDoT1rz8AuVVWIrOuP5df1pd0fa0/0D7CrvpTrD+ope6DOTarPx2v2Nm6I6o/oUK4Gw0cqT9QnIAuwx6oP7TqukN0K6c/vFMorrtBpj81bxm4OGGlP9H5aXuOiaQ/7zEQu2O6oz879i++YvOiP7xeoiw5NKI/7CLj7Jd8oT+js1UDM8ygP9191HLBIqA/jqf6PPr/nj8F+lxZRcedP8LZUNbimpw/TS2RaFZ6mz8LmKSqKGWaP9QDduvmWpk/mIXf/iJbmD9O+hMQc2WXPxp/1HVxeZY/mKVfiLyWlT/u/Ah59ryUP8s2aCvF65M/3dgPENIikz8kDbwAymGSP7G+6h1dqJE/zMbOrT72kD8pfZD8JEuQP6oQnXuSTY8/qZ+k3s4Rjj/f4dd5fOKMP8Uh1Modv4s/GrtEQTqnij+f+v8MXpqJPy85G+4ZmIg/0FziBgOghz8atJ+vsrGGP8DfIUzGzIU/kDbuIt/whD8Twg42oh2EP3abax24UoM/uhSg4syPgj/Xtjzej9SBPwC1Z5azIIE/JAXOnu1zgD9eta/z7Jt/P5CJJ/YSXX4/j2WYVckqfT8lOndVkQR8P5wMqDfx6Xo/R/gdCnTaeT/YVXd2qdV4P08DgpMl23c/N5CUuIDqdj/k1KlSVwN2Pzc0LbtJJXU/o3xmEPxPdD/VBnUPFoNzP5BXyu9CvnI/qScVQDEBcj/fTY7EkktxP2uZmVYcnXA/HG9aiwvrbz/SjOVyE6luP0VyKyrLc20/Lltmt7JKbD+ul78rTy1rP1l2cXAqG2o/6EvqFdMTaT+KYdwk3BZoPxxdJ/HcI2c/Z3uI7nA6Zj/QsP+GN1plP2942PLTgmQ/LslFEu2zYz9bTYFILe1iP6CaXlhCLmI/HMJDQt12YT9UI3kjssZgP/j7whZ4HWA/RGxvLNL1Xj+w84y8g71dP0cJxKODkVw/i4aIv1VxWz+yOX/RglxaPyafJk6YUlk/lFJxLShTWD9Nmz69yF1XP3s9nnUUclY/dHbNzqmPVT8Pw9sYK7ZUPz285lQ+5VM/xf/cD40cUz+wvLg+xFtSP+0VIxyUolE/OSNyB7DwUD9P6PNkzkVQP0tG8v5QQ08/Oq4m1vQHTj859PPRBdlMP+pDFpkGtks/7A25wn6eSj8VQKSk+pFJP3sTYCMLkEg/zqI7hEWYRz9NQiNBQ6pGPzpUNN6hxUU/CQv9wALqRD9XPVcJCxdEP+UYzmtjTEM/NCV/DbiJQj+To2dhuM5BP4TxDwcXG0E/IyKHqoluQD9HH0PLkZE/P5dV20QgUz4/YZ2l/TohPT8AtpxiY/s7P/SYh90f4To/RfypovvROT/HVHCAhs04P3ZYA7FU0zc/F8yvrf7iNj+tJxAEIfw1Pw==\",\"dtype\":\"float64\",\"shape\":[200]}},\"selected\":{\"id\":\"1127\",\"type\":\"Selection\"},\"selection_policy\":{\"id\":\"1126\",\"type\":\"UnionRenderers\"}},\"id\":\"1100\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1075\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"1127\",\"type\":\"Selection\"},{\"attributes\":{\"tools\":[{\"id\":\"1021\",\"type\":\"PanTool\"},{\"id\":\"1022\",\"type\":\"WheelZoomTool\"},{\"id\":\"1023\",\"type\":\"BoxZoomTool\"},{\"id\":\"1024\",\"type\":\"SaveTool\"},{\"id\":\"1025\",\"type\":\"ResetTool\"},{\"id\":\"1026\",\"type\":\"HelpTool\"},{\"id\":\"1053\",\"type\":\"PanTool\"},{\"id\":\"1054\",\"type\":\"WheelZoomTool\"},{\"id\":\"1055\",\"type\":\"BoxZoomTool\"},{\"id\":\"1056\",\"type\":\"SaveTool\"},{\"id\":\"1057\",\"type\":\"ResetTool\"},{\"id\":\"1058\",\"type\":\"HelpTool\"}]},\"id\":\"1130\",\"type\":\"ProxyToolbar\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1097\",\"type\":\"Line\"},{\"attributes\":{\"label\":{\"value\":\"L=200\"},\"renderers\":[{\"id\":\"1083\",\"type\":\"GlyphRenderer\"}]},\"id\":\"1094\",\"type\":\"LegendItem\"},{\"attributes\":{\"data_source\":{\"id\":\"1095\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"1096\",\"type\":\"Line\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"1097\",\"type\":\"Line\"},\"selection_glyph\":null,\"view\":{\"id\":\"1099\",\"type\":\"CDSView\"}},\"id\":\"1098\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"text\":\"\"},\"id\":\"1117\",\"type\":\"Title\"},{\"attributes\":{},\"id\":\"1073\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"1093\",\"type\":\"Selection\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1068\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"1095\",\"type\":\"ColumnDataSource\"}},\"id\":\"1099\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1126\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1125\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1114\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1124\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"ticker\":null},\"id\":\"1121\",\"type\":\"LogTickFormatter\"},{\"attributes\":{},\"id\":\"1115\",\"type\":\"Selection\"},{\"attributes\":{\"toolbar\":{\"id\":\"1130\",\"type\":\"ProxyToolbar\"},\"toolbar_location\":\"above\"},\"id\":\"1131\",\"type\":\"ToolbarBox\"},{\"attributes\":{\"axis_label\":\"conc\",\"formatter\":{\"id\":\"1075\",\"type\":\"BasicTickFormatter\"},\"ticker\":{\"id\":\"1017\",\"type\":\"BasicTicker\"}},\"id\":\"1016\",\"type\":\"LinearAxis\"},{\"attributes\":{\"ticker\":{\"id\":\"1012\",\"type\":\"BasicTicker\"}},\"id\":\"1015\",\"type\":\"Grid\"},{\"attributes\":{\"data_source\":{\"id\":\"1100\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"1101\",\"type\":\"Line\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"1102\",\"type\":\"Line\"},\"selection_glyph\":null,\"view\":{\"id\":\"1104\",\"type\":\"CDSView\"}},\"id\":\"1103\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"dimension\":1,\"ticker\":{\"id\":\"1017\",\"type\":\"BasicTicker\"}},\"id\":\"1020\",\"type\":\"Grid\"},{\"attributes\":{\"source\":{\"id\":\"1100\",\"type\":\"ColumnDataSource\"}},\"id\":\"1104\",\"type\":\"CDSView\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1102\",\"type\":\"Line\"},{\"attributes\":{\"line_color\":\"orange\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1101\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1017\",\"type\":\"BasicTicker\"}],\"root_ids\":[\"1132\"]},\"title\":\"Bokeh Application\",\"version\":\"1.1.0\"}};\n", " var render_items = [{\"docid\":\"22bb0f87-0676-49d6-8be0-5361c211e34b\",\"roots\":{\"1132\":\"48248e9e-8290-48f7-a54b-409601c3ce44\"}}];\n", " root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n", "\n", " }\n", " if (root.Bokeh !== undefined) {\n", " embed_document(root);\n", " } else {\n", " var attempts = 0;\n", " var timer = setInterval(function(root) {\n", " if (root.Bokeh !== undefined) {\n", " embed_document(root);\n", " clearInterval(timer);\n", " }\n", " attempts++;\n", " if (attempts > 100) {\n", " console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\");\n", " clearInterval(timer);\n", " }\n", " }, 10, root)\n", " }\n", "})(window);" ], "application/vnd.bokehjs_exec.v0+json": "" }, "metadata": { "application/vnd.bokehjs_exec.v0+json": { "id": "1132" } }, "output_type": "display_data" } ], "source": [ "# x-values for plot\n", "L_1 = 100\n", "L_2 = 200\n", "x_1 = np.linspace(0, L_1, 200)\n", "x_2 = np.linspace(0, L_2, 200)\n", "\n", "# Value of lambda\n", "lam = 25\n", "\n", "# Make plots\n", "p1 = bokeh.plotting.figure(height=250, width=350, x_axis_label='x/L', y_axis_label='conc')\n", "p2 = bokeh.plotting.figure(height=250, width=350, x_axis_label='x/L', y_axis_type='log')\n", "p1.line(x_1/L_1, np.exp(-x_1/lam), legend='L=100', line_width=2)\n", "p1.line(x_2/L_2, np.exp(-x_2/lam), color='orange', legend='L=200', line_width=2)\n", "p2.line(x_1/L_1, np.exp(-x_1/lam), line_width=2)\n", "p2.line(x_2/L_2, np.exp(-x_2/lam), color='orange', line_width=2)\n", "\n", "bokeh.io.show(bokeh.layouts.gridplot([[p1, p2]]))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We will address issue 1 in the homework. Now, we will consider a solution to issue 2 proposed by Ben-Zvi and Barkai ([*PNAS*, 2010](https://doi.org/10.1073/pnas.0912734107))." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### The concept of expansion repression\n", "\n", "Consider another molecule, called an *expander*, that facilitates expansion of the morphogen. Specifically, the expander enhances diffusion of the morphogen and also prevents its degradation. However, and this is important because we need (you guessed it) feedback, the morphogen represses production of the expander. Our adjusted differential equations are now\n", "\n", "\\begin{align}\n", "\\frac{\\partial c_m}{\\partial t} &= \\frac{\\partial}{\\partial x}\\,D_m(c_m, c_e)\\,\\frac{\\partial c_m}{\\partial x} - \\gamma_m(c_m, c_e)\\, c_m \\\\[1em]\n", "\\frac{\\partial c_e}{\\partial t} &= D_e \\,\\frac{\\partial^2 c_e}{\\partial x^2} + \\frac{\\beta_e}{1 + (c_m/k)^n} - \\gamma_e\\, c_e. \\\\\n", "&\\phantom{blah} \\nonumber\n", "\\end{align}\n", "\n", "We will consider the case where $D_m$ is constant, where the morphogen enhances its own degradation, and the expander represses degradation, shown schematically below.\n", "\n", "
\n", "\n", "The morphogen and expander are thus in a negative feedback loop. *How might this help us with the issue that the morphogen gradient should scale?* If we think about the construction of the gradient starting from no morphogen being present, the mechanism bcomes clear. Initially, we have no morphogen present, so the morphogen concentration grows throughout the entire tissue. As morphogen is introduced from the end of the tissue, the expander gets locally depleted. This leads to the morphogen spreading more toward the distal end of the tissue, where there is more expander, which inhibits the morphogen's degradation. However, as the morphogen levels toward the distal end rise, the expander can no longer limit the degradation of the morphogen because its production is inhibited by the elevated morphogen levels. Eventually, the expander level at the distal end is set by the balance of expander repression and morphogen degradation. This sets the level at the distal end, thereby setting the morphogen profile across the entire tissue.\n", "\n", "In the absence of an expander, there is nothing to pin the value of the morphogen at the distal end, which means that the morphogen cannot \"sense\" how long the tissue is." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Numerical solution to R-D equations for simple degradation\n", "\n", "We will first solve the system with simple degradation before treating the expander. To solve R-D systems, we can use the `rd_solve()` function from the biocircuits package. The function is general for 1D RD systems with a diagonal mobility tensor, but allows for nonconstant diffusion coefficients. We therefore need to provide the solver with a function to compute the reaction terms and the diffusion coefficients. For the oft used scenario where the diffusion coefficients are constant, we can use `biocircuits.constant_diff_coeffs()` for the latter.\n", "\n", "We additionally need to provide the values of the derivatives at the boundaries to enforce the Neumann conditions. In this case, the flux is zero at the $x = L$ boundary, but given by $-\\eta/\\sqrt{D}$ at the $x = 0$ boundary to give the constant flux of morphogen." ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def degradation_rxn(c_tuple, t, gamma):\n", " \"\"\"\n", " Reaction expression for simple degradation.\n", " \"\"\"\n", " return (-gamma * c_tuple[0],)\n", "\n", "# Time points\n", "t = np.linspace(0.0, 10.0, 100)\n", "\n", "# Physical length of system\n", "L = 5.0\n", "\n", "# Diffusion coefficient\n", "diff_coeffs = (1.0,)\n", "\n", "# Gamma\n", "rxn_params = (1.0,)\n", "\n", "# Initial concentration (500 grid points)\n", "c_0_tuple = (np.zeros(500), )\n", "\n", "# Production rate\n", "eta = 1.0\n", "derivs_0 = -eta / np.sqrt(diff_coeffs[0])\n", "\n", "# Solve\n", "conc = biocircuits.rd_solve(c_0_tuple, t, L=L, derivs_0=derivs_0, derivs_L=0, \n", " diff_coeff_fun=biocircuits.constant_diff_coeffs, \n", " diff_coeff_params=(diff_coeffs,), rxn_fun=degradation_rxn, \n", " rxn_params=rxn_params)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And let's make a plot." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "application/vnd.bokehjs_exec.v0+json": "", "text/html": [ "\n", "" ] }, "metadata": { "application/vnd.bokehjs_exec.v0+json": { "server_id": "05ad1d2f3d1b42cbb3f3d82bfaca4e85" } }, "output_type": "display_data" } ], "source": [ "bokeh.io.show(biocircuits.rd_plot(conc, t, L))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Numerical solution of degradation with expander\n", "\n", "To study the dynamics of the expander system, we will consider constant diffusion coefficients, and we take\n", "\n", "\\begin{align}\n", "\\gamma_m(c_m, c_e) = (\\gamma_{m,1} + \\gamma_{m,2}c_m)\\,\\frac{c_m}{1+c_e}.\n", "\\end{align}\n", "\n", "This means that in addition to natural degradation of the morphogen, we also have enhanced autodegradation, both of which are retarded by the expander. Thus, our PDEs are\n", "\n", "\\begin{align}\n", "\\frac{\\partial c_m}{\\partial t} &= D_m \\,\\frac{\\partial^2 c_m}{\\partial x^2} - (\\gamma_{m,1} + \\gamma_{m,2}c_m)\\,\\frac{c_m}{1+c_e}, \\\\[1em]\n", "\\frac{\\partial c_e}{\\partial t} &= D_e \\,\\frac{\\partial^2 c_e}{\\partial x^2} + \\frac{\\beta_e}{1 + (c_m/k)^n} - \\gamma_e\\, c_e.\n", "\\end{align}\n", "\n", "Note the squared term in the degradation of the morphogen. This serves to make the gradient more robust to the source strength, as we will see in the homework.\n", "\n", "We will perform the calculation for two values of $L$ and see how the gradient scales." ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def expander_gradient_rxn(c_tuple, t, gamma_m1, gamma_m2, gamma_e, \n", " beta_e, k, n):\n", " \"\"\"\n", " Reaction expression for simple degradation.\n", " \"\"\"\n", " # Unpack\n", " c_m, c_e = c_tuple\n", " \n", " # Morphogen reaction rate\n", " m_rate = -(gamma_m1 + gamma_m2 * c_m) * c_m / (1 + c_e)\n", " \n", " # Expander production rate\n", " e_rate = beta_e / (1 + (c_m / k)**n) - gamma_e * c_e\n", "\n", " return (m_rate, e_rate)\n", "\n", "# Time points\n", "t = np.linspace(0.0, 5e5, 300)\n", "\n", "# Physical length of system and grid points\n", "L_1 = 100.0\n", "L_2 = 200.0\n", "n_gridpoints = 100\n", "\n", "# Diffusion coefficients\n", "diff_coeffs = (1, 10)\n", "\n", "# Reaction params\n", "gamma_m1 = 0\n", "gamma_m2 = 100\n", "gamma_e = 1e-6\n", "beta_e = 1e-2\n", "k = 1e-3\n", "n = 4\n", "rxn_params = (gamma_m1, gamma_m2, gamma_e, beta_e, k, n)\n", "\n", "# Initial concentration\n", "c_0_tuple = (np.zeros(n_gridpoints), np.zeros(n_gridpoints))\n", "\n", "# Production rate\n", "eta = 10.0\n", "\n", "# Solve\n", "c_tuple_L_1 = biocircuits.rd_solve(\n", " c_0_tuple, t, L=L_1, derivs_0=(-eta, 0), derivs_L=0, \n", " diff_coeff_fun=biocircuits.constant_diff_coeffs, diff_coeff_params=(diff_coeffs,), \n", " rxn_fun=expander_gradient_rxn, rxn_params=rxn_params, atol=1e-7)\n", "\n", "c_tuple_L_2 = biocircuits.rd_solve(\n", " c_0_tuple, t, L=L_2, derivs_0=(-eta, 0), derivs_L=0, \n", " diff_coeff_fun=biocircuits.constant_diff_coeffs, diff_coeff_params=(diff_coeffs,), \n", " rxn_fun=expander_gradient_rxn, rxn_params=rxn_params)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "With the results in hand, we can compute the morphogen levels and see if we have scaling." ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", "\n", "\n", "\n", "
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "(function(root) {\n", " function embed_document(root) {\n", " \n", " var docs_json = {\"e004fd7b-1f45-4814-bc2c-127737005e44\":{\"roots\":{\"references\":[{\"attributes\":{\"children\":[{\"id\":\"1502\",\"type\":\"ToolbarBox\"},{\"id\":\"1500\",\"type\":\"GridBox\"}]},\"id\":\"1503\",\"type\":\"Column\"},{\"attributes\":{},\"id\":\"1412\",\"type\":\"LogScale\"},{\"attributes\":{\"axis_label\":\"x\",\"formatter\":{\"id\":\"1490\",\"type\":\"BasicTickFormatter\"},\"ticker\":{\"id\":\"1415\",\"type\":\"BasicTicker\"}},\"id\":\"1414\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"1415\",\"type\":\"BasicTicker\"},{\"attributes\":{\"ticker\":{\"id\":\"1415\",\"type\":\"BasicTicker\"}},\"id\":\"1418\",\"type\":\"Grid\"},{\"attributes\":{\"formatter\":{\"id\":\"1492\",\"type\":\"LogTickFormatter\"},\"ticker\":{\"id\":\"1420\",\"type\":\"LogTicker\"}},\"id\":\"1419\",\"type\":\"LogAxis\"},{\"attributes\":{\"num_minor_ticks\":10},\"id\":\"1420\",\"type\":\"LogTicker\"},{\"attributes\":{\"dimension\":1,\"ticker\":{\"id\":\"1420\",\"type\":\"LogTicker\"}},\"id\":\"1423\",\"type\":\"Grid\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1439\",\"type\":\"Line\"},{\"attributes\":{\"formatter\":{\"id\":\"1446\",\"type\":\"LogTickFormatter\"},\"ticker\":{\"id\":\"1388\",\"type\":\"LogTicker\"}},\"id\":\"1387\",\"type\":\"LogAxis\"},{\"attributes\":{\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1438\",\"type\":\"Line\"},{\"attributes\":{\"ticker\":{\"id\":\"1383\",\"type\":\"BasicTicker\"}},\"id\":\"1386\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1424\",\"type\":\"PanTool\"},{\"attributes\":{},\"id\":\"1383\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"1425\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"overlay\":{\"id\":\"1494\",\"type\":\"BoxAnnotation\"}},\"id\":\"1426\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"1427\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"1428\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"1429\",\"type\":\"HelpTool\"},{\"attributes\":{\"below\":[{\"id\":\"1414\",\"type\":\"LinearAxis\"}],\"center\":[{\"id\":\"1418\",\"type\":\"Grid\"},{\"id\":\"1423\",\"type\":\"Grid\"}],\"left\":[{\"id\":\"1419\",\"type\":\"LogAxis\"}],\"plot_height\":250,\"plot_width\":350,\"renderers\":[{\"id\":\"1469\",\"type\":\"GlyphRenderer\"},{\"id\":\"1474\",\"type\":\"GlyphRenderer\"}],\"title\":{\"id\":\"1488\",\"type\":\"Title\"},\"toolbar\":{\"id\":\"1430\",\"type\":\"Toolbar\"},\"toolbar_location\":null,\"x_range\":{\"id\":\"1406\",\"type\":\"DataRange1d\"},\"x_scale\":{\"id\":\"1410\",\"type\":\"LinearScale\"},\"y_range\":{\"id\":\"1408\",\"type\":\"DataRange1d\"},\"y_scale\":{\"id\":\"1412\",\"type\":\"LogScale\"}},\"id\":\"1405\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"active_drag\":\"auto\",\"active_inspect\":\"auto\",\"active_multi\":null,\"active_scroll\":\"auto\",\"active_tap\":\"auto\",\"tools\":[{\"id\":\"1424\",\"type\":\"PanTool\"},{\"id\":\"1425\",\"type\":\"WheelZoomTool\"},{\"id\":\"1426\",\"type\":\"BoxZoomTool\"},{\"id\":\"1427\",\"type\":\"SaveTool\"},{\"id\":\"1428\",\"type\":\"ResetTool\"},{\"id\":\"1429\",\"type\":\"HelpTool\"}]},\"id\":\"1430\",\"type\":\"Toolbar\"},{\"attributes\":{\"below\":[{\"id\":\"1382\",\"type\":\"LinearAxis\"}],\"center\":[{\"id\":\"1386\",\"type\":\"Grid\"},{\"id\":\"1391\",\"type\":\"Grid\"},{\"id\":\"1449\",\"type\":\"Legend\"}],\"left\":[{\"id\":\"1387\",\"type\":\"LogAxis\"}],\"plot_height\":250,\"plot_width\":350,\"renderers\":[{\"id\":\"1440\",\"type\":\"GlyphRenderer\"},{\"id\":\"1454\",\"type\":\"GlyphRenderer\"}],\"title\":{\"id\":\"1442\",\"type\":\"Title\"},\"toolbar\":{\"id\":\"1398\",\"type\":\"Toolbar\"},\"toolbar_location\":null,\"x_range\":{\"id\":\"1374\",\"type\":\"DataRange1d\"},\"x_scale\":{\"id\":\"1378\",\"type\":\"LinearScale\"},\"y_range\":{\"id\":\"1376\",\"type\":\"DataRange1d\"},\"y_scale\":{\"id\":\"1380\",\"type\":\"LogScale\"}},\"id\":\"1373\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"callback\":null},\"id\":\"1374\",\"type\":\"DataRange1d\"},{\"attributes\":{\"ticker\":null},\"id\":\"1446\",\"type\":\"LogTickFormatter\"},{\"attributes\":{\"bottom_units\":\"screen\",\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"lightgrey\"},\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":{\"value\":1.0},\"line_color\":{\"value\":\"black\"},\"line_dash\":[4,4],\"line_width\":{\"value\":2},\"render_mode\":\"css\",\"right_units\":\"screen\",\"top_units\":\"screen\"},\"id\":\"1448\",\"type\":\"BoxAnnotation\"},{\"attributes\":{},\"id\":\"1378\",\"type\":\"LinearScale\"},{\"attributes\":{\"items\":[{\"id\":\"1450\",\"type\":\"LegendItem\"},{\"id\":\"1465\",\"type\":\"LegendItem\"}]},\"id\":\"1449\",\"type\":\"Legend\"},{\"attributes\":{\"axis_label\":\"x/L\",\"formatter\":{\"id\":\"1444\",\"type\":\"BasicTickFormatter\"},\"ticker\":{\"id\":\"1383\",\"type\":\"BasicTicker\"}},\"id\":\"1382\",\"type\":\"LinearAxis\"},{\"attributes\":{\"label\":{\"value\":\"L=100\"},\"renderers\":[{\"id\":\"1440\",\"type\":\"GlyphRenderer\"}]},\"id\":\"1450\",\"type\":\"LegendItem\"},{\"attributes\":{\"callback\":null,\"data\":{\"x\":{\"__ndarray__\":\"AAAAAAAAAAB/pUCtXynwP3+lQK1fKQBAPvjggw8+CEB/pUCtXykQQN/OkJi3MxRAPvjggw8+GECeITFvZ0gcQH+lQK1fKSBAL7rooosuIkDfzpCYtzMkQI/jOI7jOCZAPvjggw8+KEDuDIl5O0MqQJ4hMW9nSCxATjbZZJNNLkB/pUCtXykwQNevFKj1KzFAL7rooosuMkCHxLydITEzQN/OkJi3MzRAN9lkk002NUCP4ziO4zg2QOftDIl5OzdAPvjggw8+OECWArV+pUA5QO4MiXk7QzpARhdddNFFO0CeITFvZ0g8QPYrBWr9Sj1ATjbZZJNNPkCmQK1fKVA/QH+lQK1fKUBAq6qqqqqqQEDXrxSo9StBQAO1fqVArUFAL7rooosuQkBbv1Kg1q9CQIfEvJ0hMUNAs8kmm2yyQ0DfzpCYtzNEQAvU+pUCtURAN9lkk002RUBj3s6QmLdFQI/jOI7jOEZAu+iiiy66RkDn7QyJeTtHQBPzdobEvEdAPvjggw8+SEBq/UqBWr9IQJYCtX6lQElAwgcffPDBSUDuDIl5O0NKQBoS83aGxEpARhdddNFFS0ByHMdxHMdLQJ4hMW9nSExAyiabbLLJTED2KwVq/UpNQCIxb2dIzE1ATjbZZJNNTkB6O0Ni3s5OQKZArV8pUE9A0kUXXXTRT0B/pUCtXylQQBWo9SsFalBAq6qqqqqqUEBBrV8pUOtQQNevFKj1K1FAbbLJJptsUUADtX6lQK1RQJm3MyTm7VFAL7rooosuUkDFvJ0hMW9SQFu/UqDWr1JA8cEHH3zwUkCHxLydITFTQB3HcRzHcVNAs8kmm2yyU0BJzNsZEvNTQN/OkJi3M1RAddFFF110VEAL1PqVArVUQKHWrxSo9VRAN9lkk002VUDN2xkS83ZVQGPezpCYt1VA+eCDDz74VUCP4ziO4zhWQCXm7QyJeVZAu+iiiy66VkBR61cK1PpWQOftDIl5O1dAffDBBx98V0AT83aGxLxXQKn1KwVq/VdAPvjggw8+WEDU+pUCtX5YQGr9SoFav1hAAAAAAAAAWUA=\",\"dtype\":\"float64\",\"shape\":[100]},\"y\":{\"__ndarray__\":\"MUWS087iFECXdUmdunwAQM7VhtH8APE/IrRUD5V35D+4m04oxy7bP9nChE8rT9M/SUKN9rvNzD9Tf7C07EnGP8V5wOn4v8E/piO/pqjtvD8aBQFebwW4P/zS9578QrQ/AQPmbo1RsT+TiHCMpPGtPxH4iU1uJKo/zm8+HTEFpz9XNfmG2mykP2et5Ti3PqI/fsNp5VBloD97Mer+saCdP6AaxEV85po/LzcECWGImD+L571v4HaWPx4VwxSbpZQ/8z+76pcKkz+SL2Kxup2RP35aaAddWJA/BdUl/QBqjj+sBd35JV6MPwsR9lWBhYo/fQkDDaDZiD8n9dFBC1WHPwzTs3Ab84U/2cw8ptSvhD8x8om2yYeDP+a1Qe8EeII/EKdRG/V9gT8wlVD0XZeAP+OMBaKWhH8/RuzfDg36fT8DuzctG4x8P0tYTYUXOHs/AJRAv6b7eT9/b+opsdR4P5rr/dtZwXc/2789Kfe/dj/zsM4yDM91PxX4MWRD7XQ/4g3atmkZdD/2kwudalJzP5WXLXpMl3I/zBcWky3ncT+VC3dkQUFxPwrNf1DOpHA/VoIvlysRcD/+hqIdfwtvP2O9fSf8A24/hX3HT84KbT9Egzd3Cx9sP4Cg+DTdP2s/JZnC7n5saj9ygIQnPKRpP9mMyP1u5mg/5Qbu034yaD/4diQd34dnP0XxwkoO5mY/lwos1pRMZj8l+u5jBLtlP+sSRP32MGU/IttgXQ6uZD9yGXFQ8zFkP5gUSCJVvGM/hLoZG+lMYz+rv78IauNiP3FMPNOXf2I/S19TGzchYj8vkDbiEMhhPwMHXTnyc2E/Yem7+askYT8AoqqBEtpgP8jS0nj9k2A/jJ6dmUdSYD8U559/zhRgP1sZKvXktl8/O24IyyxMXz9TY24DP+leP+iPZ6rqjV4/4JriGAM6Xj8N4Be+X+1dP8rnfO7bp10/++Pit1ZpXT/y12m6sjFdP/+v/AXWAF0/+hwU/KnWXD+F6YY1G7NcPxizNmwZllw/0H5vaJd/XD9t09fxim9cP1G/1cPsZVw/XaBThbhiXD8=\",\"dtype\":\"float64\",\"shape\":[100]}},\"selected\":{\"id\":\"1496\",\"type\":\"Selection\"},\"selection_policy\":{\"id\":\"1495\",\"type\":\"UnionRenderers\"}},\"id\":\"1466\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_color\":\"orange\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1452\",\"type\":\"Line\"},{\"attributes\":{\"num_minor_ticks\":10},\"id\":\"1388\",\"type\":\"LogTicker\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1453\",\"type\":\"Line\"},{\"attributes\":{\"dimension\":1,\"ticker\":{\"id\":\"1388\",\"type\":\"LogTicker\"}},\"id\":\"1391\",\"type\":\"Grid\"},{\"attributes\":{\"data_source\":{\"id\":\"1451\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"1452\",\"type\":\"Line\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"1453\",\"type\":\"Line\"},\"selection_glyph\":null,\"view\":{\"id\":\"1455\",\"type\":\"CDSView\"}},\"id\":\"1454\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"callback\":null},\"id\":\"1406\",\"type\":\"DataRange1d\"},{\"attributes\":{\"source\":{\"id\":\"1451\",\"type\":\"ColumnDataSource\"}},\"id\":\"1455\",\"type\":\"CDSView\"},{\"attributes\":{\"callback\":null,\"data\":{\"x\":{\"__ndarray__\":\"AAAAAAAAAABbv1Kg1q+EP1u/UqDWr5Q/CB988MEHnz9bv1Kg1q+kPzJvZ0jM26k/CB988MEHrz9vZ0jM2xmyP1u/UqDWr7Q/RhdddNFFtz8yb2dIzNu5Px3HcRzHcbw/CB988MEHvz96O0Ni3s7AP29nSMzbGcI/ZZNNNtlkwz9bv1Kg1q/EP1HrVwrU+sU/RhdddNFFxz88Q2LezpDIPzJvZ0jM28k/KJtssskmyz8dx3Ecx3HMPxPzdobEvM0/CB988MEHzz9/pUCtXynQP3o7Q2LeztA/dNFFF1100T9vZ0jM2xnSP2r9SoFav9I/ZZNNNtlk0z9gKVDrVwrUP1u/UqDWr9Q/VlVVVVVV1T9R61cK1PrVP0yBWr9SoNY/RhdddNFF1z9BrV8pUOvXPzxDYt7OkNg/N9lkk0022T8yb2dIzNvZPy0Fav1Kgdo/KJtssskm2z8jMW9nSMzbPx3HcRzHcdw/GF100UUX3T8T83aGxLzdPw6JeTtDYt4/CB988MEH3z8DtX6lQK3fP3+lQK1fKeA/fPDBBx984D96O0Ni3s7gP3eGxLydIeE/dNFFF1104T9yHMdxHMfhP29nSMzbGeI/bbLJJpts4j9q/UqBWr/iP2hIzNsZEuM/ZZNNNtlk4z9j3s6QmLfjP2ApUOtXCuQ/XXTRRRdd5D9bv1Kg1q/kP1gK1PqVAuU/VlVVVVVV5T9ToNavFKjlP1HrVwrU+uU/TjbZZJNN5j9MgVq/UqDmP0nM2xkS8+Y/RhdddNFF5z9EYt7OkJjnP0GtXylQ6+c/P/jggw8+6D88Q2LezpDoPzqO4ziO4+g/N9lkk0026T80JObtDInpPzJvZ0jM2+k/L7rooosu6j8tBWr9SoHqPypQ61cK1Oo/KJtssskm6z8l5u0MiXnrPyMxb2dIzOs/IHzwwQcf7D8dx3Ecx3HsPxsS83aGxOw/GF100UUX7T8WqPUrBWrtPxPzdobEvO0/ET744IMP7j8OiXk7Q2LuPwzU+pUCte4/CB988MEH7z8Fav1KgVrvPwO1fqVAre8/AAAAAAAA8D8=\",\"dtype\":\"float64\",\"shape\":[100]},\"y\":{\"__ndarray__\":\"KSfehy2XGkASXB0ktk0BQLaJ6CcQGfA/Nk9gizI44j8eLRJalz7XPx5TDJYkDtA/3uRzckd2xz/mdo8sZ9/BP1p9uKvxHbw/aLX5WG+vtj9xu7YO/q6yP+BAr/22Ta8/nFxi6/aZqj8fAO3e5OGmP+3NhLQM5KM/dOl6rutyoT8N4KanJ9yeP3Bz24XSe5s/w3AwNtChmD/BxPcgszOWPxyfkPg9HZQ/pcJ94bpOkj+h3aK30buQP8JKjJRntY4/MNqOSgRHjD+bOzNRuR+KP8EiCwUcNYg/zS470Jh+hj+DOwzLEvWEP5O6LpiZkoM/IJ2k0C9Sgj8bbPPmnS+BP1/vBYROJ4A/jWFXUWRsfj/OFvjcULN8P+gIWlbbHns/RFmeCxireT80vq6LnlR4P7Mc+5t1GHc/ltBLqQL0dT/SQhwH/OR0P00uonVd6XM/gFLfgl7/cj/z6fZwaiVyP6FlCV0ZWnE/7bM0byqccD+R9sDN/dRvP/tIsb0riG4/YaDDVhFQbT+qS5NzDytsPwnygbqvF2s//waP8J8Uaj8BlofprSBpP5UQX/7DOmg/vv1H9uVhZz+wAz5SLpVmP9KwQu3L02U/R9St5f8cZT+7/LXFG3BkP/SNzuJ/zGM/mT207JkxYz+mhwmm455iP++XQ8HhE2I/02dk3SKQYT8qPZ6ePhNhP3wahN/UnGA/QPbd94wsYD/H7DMtKoRfP/xEUFlDul4/RXmszdn6XT9nHf9pbEVdP4cGNLqDmVw/5j+wMbH2Wz+Q/355jlxbP/1ObM+8ylo/joBOdORAWj8YKPQntL5ZP6k8WrHgQ1k/0jj2cSTQWD/BSAMDP2NYP9uH4Nv0/Fc/KoypAA+dVz/BhUq4WkNXPx92Zkmp71Y/99Z4vc+hVj+KvqyppllWP3N08vwJF1Y/lrLp0tjZVT9wtkJL9aFVP1X3QmVEb1U/Yfoj361BVT8LdQsZHBlVPy7fY/t79VQ/QNFj4LzWVD+zNJmA0LxUP2NwU+Kqp1Q/CHTNS0KXVD8/4f03j4tUPzij+E2MhFQ/WhnSWjaCVD8=\",\"dtype\":\"float64\",\"shape\":[100]}},\"selected\":{\"id\":\"1486\",\"type\":\"Selection\"},\"selection_policy\":{\"id\":\"1485\",\"type\":\"UnionRenderers\"}},\"id\":\"1451\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"callback\":null,\"data\":{\"x\":{\"__ndarray__\":\"AAAAAAAAAABbv1Kg1q+EP1u/UqDWr5Q/CB988MEHnz9bv1Kg1q+kPzJvZ0jM26k/CB988MEHrz9vZ0jM2xmyP1u/UqDWr7Q/RhdddNFFtz8yb2dIzNu5Px3HcRzHcbw/CB988MEHvz96O0Ni3s7AP29nSMzbGcI/ZZNNNtlkwz9bv1Kg1q/EP1HrVwrU+sU/RhdddNFFxz88Q2LezpDIPzJvZ0jM28k/KJtssskmyz8dx3Ecx3HMPxPzdobEvM0/CB988MEHzz9/pUCtXynQP3o7Q2LeztA/dNFFF1100T9vZ0jM2xnSP2r9SoFav9I/ZZNNNtlk0z9gKVDrVwrUP1u/UqDWr9Q/VlVVVVVV1T9R61cK1PrVP0yBWr9SoNY/RhdddNFF1z9BrV8pUOvXPzxDYt7OkNg/N9lkk0022T8yb2dIzNvZPy0Fav1Kgdo/KJtssskm2z8jMW9nSMzbPx3HcRzHcdw/GF100UUX3T8T83aGxLzdPw6JeTtDYt4/CB988MEH3z8DtX6lQK3fP3+lQK1fKeA/fPDBBx984D96O0Ni3s7gP3eGxLydIeE/dNFFF1104T9yHMdxHMfhP29nSMzbGeI/bbLJJpts4j9q/UqBWr/iP2hIzNsZEuM/ZZNNNtlk4z9j3s6QmLfjP2ApUOtXCuQ/XXTRRRdd5D9bv1Kg1q/kP1gK1PqVAuU/VlVVVVVV5T9ToNavFKjlP1HrVwrU+uU/TjbZZJNN5j9MgVq/UqDmP0nM2xkS8+Y/RhdddNFF5z9EYt7OkJjnP0GtXylQ6+c/P/jggw8+6D88Q2LezpDoPzqO4ziO4+g/N9lkk0026T80JObtDInpPzJvZ0jM2+k/L7rooosu6j8tBWr9SoHqPypQ61cK1Oo/KJtssskm6z8l5u0MiXnrPyMxb2dIzOs/IHzwwQcf7D8dx3Ecx3HsPxsS83aGxOw/GF100UUX7T8WqPUrBWrtPxPzdobEvO0/ET744IMP7j8OiXk7Q2LuPwzU+pUCte4/CB988MEH7z8Fav1KgVrvPwO1fqVAre8/AAAAAAAA8D8=\",\"dtype\":\"float64\",\"shape\":[100]},\"y\":{\"__ndarray__\":\"MUWS087iFECXdUmdunwAQM7VhtH8APE/IrRUD5V35D+4m04oxy7bP9nChE8rT9M/SUKN9rvNzD9Tf7C07EnGP8V5wOn4v8E/piO/pqjtvD8aBQFebwW4P/zS9578QrQ/AQPmbo1RsT+TiHCMpPGtPxH4iU1uJKo/zm8+HTEFpz9XNfmG2mykP2et5Ti3PqI/fsNp5VBloD97Mer+saCdP6AaxEV85po/LzcECWGImD+L571v4HaWPx4VwxSbpZQ/8z+76pcKkz+SL2Kxup2RP35aaAddWJA/BdUl/QBqjj+sBd35JV6MPwsR9lWBhYo/fQkDDaDZiD8n9dFBC1WHPwzTs3Ab84U/2cw8ptSvhD8x8om2yYeDP+a1Qe8EeII/EKdRG/V9gT8wlVD0XZeAP+OMBaKWhH8/RuzfDg36fT8DuzctG4x8P0tYTYUXOHs/AJRAv6b7eT9/b+opsdR4P5rr/dtZwXc/2789Kfe/dj/zsM4yDM91PxX4MWRD7XQ/4g3atmkZdD/2kwudalJzP5WXLXpMl3I/zBcWky3ncT+VC3dkQUFxPwrNf1DOpHA/VoIvlysRcD/+hqIdfwtvP2O9fSf8A24/hX3HT84KbT9Egzd3Cx9sP4Cg+DTdP2s/JZnC7n5saj9ygIQnPKRpP9mMyP1u5mg/5Qbu034yaD/4diQd34dnP0XxwkoO5mY/lwos1pRMZj8l+u5jBLtlP+sSRP32MGU/IttgXQ6uZD9yGXFQ8zFkP5gUSCJVvGM/hLoZG+lMYz+rv78IauNiP3FMPNOXf2I/S19TGzchYj8vkDbiEMhhPwMHXTnyc2E/Yem7+askYT8AoqqBEtpgP8jS0nj9k2A/jJ6dmUdSYD8U559/zhRgP1sZKvXktl8/O24IyyxMXz9TY24DP+leP+iPZ6rqjV4/4JriGAM6Xj8N4Be+X+1dP8rnfO7bp10/++Pit1ZpXT/y12m6sjFdP/+v/AXWAF0/+hwU/KnWXD+F6YY1G7NcPxizNmwZllw/0H5vaJd/XD9t09fxim9cP1G/1cPsZVw/XaBThbhiXD8=\",\"dtype\":\"float64\",\"shape\":[100]}},\"selected\":{\"id\":\"1464\",\"type\":\"Selection\"},\"selection_policy\":{\"id\":\"1463\",\"type\":\"UnionRenderers\"}},\"id\":\"1437\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1464\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1392\",\"type\":\"PanTool\"},{\"attributes\":{\"label\":{\"value\":\"L=200\"},\"renderers\":[{\"id\":\"1454\",\"type\":\"GlyphRenderer\"}]},\"id\":\"1465\",\"type\":\"LegendItem\"},{\"attributes\":{},\"id\":\"1393\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"callback\":null,\"data\":{\"x\":{\"__ndarray__\":\"AAAAAAAAAAB/pUCtXykAQH+lQK1fKRBAPvjggw8+GEB/pUCtXykgQN/OkJi3MyRAPvjggw8+KECeITFvZ0gsQH+lQK1fKTBAL7rooosuMkDfzpCYtzM0QI/jOI7jODZAPvjggw8+OEDuDIl5O0M6QJ4hMW9nSDxATjbZZJNNPkB/pUCtXylAQNevFKj1K0FAL7rooosuQkCHxLydITFDQN/OkJi3M0RAN9lkk002RUCP4ziO4zhGQOftDIl5O0dAPvjggw8+SECWArV+pUBJQO4MiXk7Q0pARhdddNFFS0CeITFvZ0hMQPYrBWr9Sk1ATjbZZJNNTkCmQK1fKVBPQH+lQK1fKVBAq6qqqqqqUEDXrxSo9StRQAO1fqVArVFAL7rooosuUkBbv1Kg1q9SQIfEvJ0hMVNAs8kmm2yyU0DfzpCYtzNUQAvU+pUCtVRAN9lkk002VUBj3s6QmLdVQI/jOI7jOFZAu+iiiy66VkDn7QyJeTtXQBPzdobEvFdAPvjggw8+WEBq/UqBWr9YQJYCtX6lQFlAwgcffPDBWUDuDIl5O0NaQBoS83aGxFpARhdddNFFW0ByHMdxHMdbQJ4hMW9nSFxAyiabbLLJXED2KwVq/UpdQCIxb2dIzF1ATjbZZJNNXkB6O0Ni3s5eQKZArV8pUF9A0kUXXXTRX0B/pUCtXylgQBWo9SsFamBAq6qqqqqqYEBBrV8pUOtgQNevFKj1K2FAbbLJJptsYUADtX6lQK1hQJm3MyTm7WFAL7rooosuYkDFvJ0hMW9iQFu/UqDWr2JA8cEHH3zwYkCHxLydITFjQB3HcRzHcWNAs8kmm2yyY0BJzNsZEvNjQN/OkJi3M2RAddFFF110ZEAL1PqVArVkQKHWrxSo9WRAN9lkk002ZUDN2xkS83ZlQGPezpCYt2VA+eCDDz74ZUCP4ziO4zhmQCXm7QyJeWZAu+iiiy66ZkBR61cK1PpmQOftDIl5O2dAffDBBx98Z0AT83aGxLxnQKn1KwVq/WdAPvjggw8+aEDU+pUCtX5oQGr9SoFav2hAAAAAAAAAaUA=\",\"dtype\":\"float64\",\"shape\":[100]},\"y\":{\"__ndarray__\":\"KSfehy2XGkASXB0ktk0BQLaJ6CcQGfA/Nk9gizI44j8eLRJalz7XPx5TDJYkDtA/3uRzckd2xz/mdo8sZ9/BP1p9uKvxHbw/aLX5WG+vtj9xu7YO/q6yP+BAr/22Ta8/nFxi6/aZqj8fAO3e5OGmP+3NhLQM5KM/dOl6rutyoT8N4KanJ9yeP3Bz24XSe5s/w3AwNtChmD/BxPcgszOWPxyfkPg9HZQ/pcJ94bpOkj+h3aK30buQP8JKjJRntY4/MNqOSgRHjD+bOzNRuR+KP8EiCwUcNYg/zS470Jh+hj+DOwzLEvWEP5O6LpiZkoM/IJ2k0C9Sgj8bbPPmnS+BP1/vBYROJ4A/jWFXUWRsfj/OFvjcULN8P+gIWlbbHns/RFmeCxireT80vq6LnlR4P7Mc+5t1GHc/ltBLqQL0dT/SQhwH/OR0P00uonVd6XM/gFLfgl7/cj/z6fZwaiVyP6FlCV0ZWnE/7bM0byqccD+R9sDN/dRvP/tIsb0riG4/YaDDVhFQbT+qS5NzDytsPwnygbqvF2s//waP8J8Uaj8BlofprSBpP5UQX/7DOmg/vv1H9uVhZz+wAz5SLpVmP9KwQu3L02U/R9St5f8cZT+7/LXFG3BkP/SNzuJ/zGM/mT207JkxYz+mhwmm455iP++XQ8HhE2I/02dk3SKQYT8qPZ6ePhNhP3wahN/UnGA/QPbd94wsYD/H7DMtKoRfP/xEUFlDul4/RXmszdn6XT9nHf9pbEVdP4cGNLqDmVw/5j+wMbH2Wz+Q/355jlxbP/1ObM+8ylo/joBOdORAWj8YKPQntL5ZP6k8WrHgQ1k/0jj2cSTQWD/BSAMDP2NYP9uH4Nv0/Fc/KoypAA+dVz/BhUq4WkNXPx92Zkmp71Y/99Z4vc+hVj+KvqyppllWP3N08vwJF1Y/lrLp0tjZVT9wtkJL9aFVP1X3QmVEb1U/Yfoj361BVT8LdQsZHBlVPy7fY/t79VQ/QNFj4LzWVD+zNJmA0LxUP2NwU+Kqp1Q/CHTNS0KXVD8/4f03j4tUPzij+E2MhFQ/WhnSWjaCVD8=\",\"dtype\":\"float64\",\"shape\":[100]}},\"selected\":{\"id\":\"1498\",\"type\":\"Selection\"},\"selection_policy\":{\"id\":\"1497\",\"type\":\"UnionRenderers\"}},\"id\":\"1471\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"overlay\":{\"id\":\"1448\",\"type\":\"BoxAnnotation\"}},\"id\":\"1394\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1467\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1395\",\"type\":\"SaveTool\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1468\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1396\",\"type\":\"ResetTool\"},{\"attributes\":{\"data_source\":{\"id\":\"1466\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"1467\",\"type\":\"Line\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"1468\",\"type\":\"Line\"},\"selection_glyph\":null,\"view\":{\"id\":\"1470\",\"type\":\"CDSView\"}},\"id\":\"1469\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1397\",\"type\":\"HelpTool\"},{\"attributes\":{\"source\":{\"id\":\"1466\",\"type\":\"ColumnDataSource\"}},\"id\":\"1470\",\"type\":\"CDSView\"},{\"attributes\":{\"children\":[[{\"id\":\"1373\",\"subtype\":\"Figure\",\"type\":\"Plot\"},0,0],[{\"id\":\"1405\",\"subtype\":\"Figure\",\"type\":\"Plot\"},0,1]]},\"id\":\"1500\",\"type\":\"GridBox\"},{\"attributes\":{\"active_drag\":\"auto\",\"active_inspect\":\"auto\",\"active_multi\":null,\"active_scroll\":\"auto\",\"active_tap\":\"auto\",\"tools\":[{\"id\":\"1392\",\"type\":\"PanTool\"},{\"id\":\"1393\",\"type\":\"WheelZoomTool\"},{\"id\":\"1394\",\"type\":\"BoxZoomTool\"},{\"id\":\"1395\",\"type\":\"SaveTool\"},{\"id\":\"1396\",\"type\":\"ResetTool\"},{\"id\":\"1397\",\"type\":\"HelpTool\"}]},\"id\":\"1398\",\"type\":\"Toolbar\"},{\"attributes\":{\"callback\":null},\"id\":\"1408\",\"type\":\"DataRange1d\"},{\"attributes\":{\"line_color\":\"orange\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1472\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1473\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1410\",\"type\":\"LinearScale\"},{\"attributes\":{\"data_source\":{\"id\":\"1471\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"1472\",\"type\":\"Line\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"1473\",\"type\":\"Line\"},\"selection_glyph\":null,\"view\":{\"id\":\"1475\",\"type\":\"CDSView\"}},\"id\":\"1474\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"source\":{\"id\":\"1471\",\"type\":\"ColumnDataSource\"}},\"id\":\"1475\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1444\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"1485\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1486\",\"type\":\"Selection\"},{\"attributes\":{\"text\":\"\"},\"id\":\"1442\",\"type\":\"Title\"},{\"attributes\":{\"text\":\"\"},\"id\":\"1488\",\"type\":\"Title\"},{\"attributes\":{},\"id\":\"1490\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"ticker\":null},\"id\":\"1492\",\"type\":\"LogTickFormatter\"},{\"attributes\":{\"bottom_units\":\"screen\",\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"lightgrey\"},\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":{\"value\":1.0},\"line_color\":{\"value\":\"black\"},\"line_dash\":[4,4],\"line_width\":{\"value\":2},\"render_mode\":\"css\",\"right_units\":\"screen\",\"top_units\":\"screen\"},\"id\":\"1494\",\"type\":\"BoxAnnotation\"},{\"attributes\":{},\"id\":\"1495\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1463\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1496\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1497\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1498\",\"type\":\"Selection\"},{\"attributes\":{\"tools\":[{\"id\":\"1392\",\"type\":\"PanTool\"},{\"id\":\"1393\",\"type\":\"WheelZoomTool\"},{\"id\":\"1394\",\"type\":\"BoxZoomTool\"},{\"id\":\"1395\",\"type\":\"SaveTool\"},{\"id\":\"1396\",\"type\":\"ResetTool\"},{\"id\":\"1397\",\"type\":\"HelpTool\"},{\"id\":\"1424\",\"type\":\"PanTool\"},{\"id\":\"1425\",\"type\":\"WheelZoomTool\"},{\"id\":\"1426\",\"type\":\"BoxZoomTool\"},{\"id\":\"1427\",\"type\":\"SaveTool\"},{\"id\":\"1428\",\"type\":\"ResetTool\"},{\"id\":\"1429\",\"type\":\"HelpTool\"}]},\"id\":\"1501\",\"type\":\"ProxyToolbar\"},{\"attributes\":{},\"id\":\"1380\",\"type\":\"LogScale\"},{\"attributes\":{\"toolbar\":{\"id\":\"1501\",\"type\":\"ProxyToolbar\"},\"toolbar_location\":\"above\"},\"id\":\"1502\",\"type\":\"ToolbarBox\"},{\"attributes\":{\"callback\":null},\"id\":\"1376\",\"type\":\"DataRange1d\"},{\"attributes\":{\"data_source\":{\"id\":\"1437\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"1438\",\"type\":\"Line\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"1439\",\"type\":\"Line\"},\"selection_glyph\":null,\"view\":{\"id\":\"1441\",\"type\":\"CDSView\"}},\"id\":\"1440\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"source\":{\"id\":\"1437\",\"type\":\"ColumnDataSource\"}},\"id\":\"1441\",\"type\":\"CDSView\"}],\"root_ids\":[\"1503\"]},\"title\":\"Bokeh Application\",\"version\":\"1.1.0\"}};\n", " var render_items = [{\"docid\":\"e004fd7b-1f45-4814-bc2c-127737005e44\",\"roots\":{\"1503\":\"9128314b-893c-4fbf-b728-3ea220bc60a2\"}}];\n", " root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n", "\n", " }\n", " if (root.Bokeh !== undefined) {\n", " embed_document(root);\n", " } else {\n", " var attempts = 0;\n", " var timer = setInterval(function(root) {\n", " if (root.Bokeh !== undefined) {\n", " embed_document(root);\n", " clearInterval(timer);\n", " }\n", " attempts++;\n", " if (attempts > 100) {\n", " console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\");\n", " clearInterval(timer);\n", " }\n", " }, 10, root)\n", " }\n", "})(window);" ], "application/vnd.bokehjs_exec.v0+json": "" }, "metadata": { "application/vnd.bokehjs_exec.v0+json": { "id": "1503" } }, "output_type": "display_data" } ], "source": [ "# x-values for plot\n", "x_1 = np.linspace(0, L_1, n_gridpoints)\n", "x_2 = np.linspace(0, L_2, n_gridpoints)\n", "\n", "# Make plots\n", "p1 = bokeh.plotting.figure(height=250, width=350, x_axis_label='x/L', y_axis_type='log')\n", "p2 = bokeh.plotting.figure(height=250, width=350, x_axis_label='x', y_axis_type='log')\n", "p1.line(x_1/L_1, c_tuple_L_1[0][-1,:], legend='L=100', line_width=2)\n", "p1.line(x_2/L_2, c_tuple_L_2[0][-1,:], color='orange', legend='L=200', line_width=2)\n", "p2.line(x_1, c_tuple_L_1[0][-1,:], line_width=2)\n", "p2.line(x_2, c_tuple_L_2[0][-1,:], color='orange', line_width=2)\n", "\n", "bokeh.io.show(bokeh.layouts.gridplot([[p1, p2]]));" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's make a movie." ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "application/vnd.bokehjs_exec.v0+json": "", "text/html": [ "\n", "" ] }, "metadata": { "application/vnd.bokehjs_exec.v0+json": { "server_id": "ee4de462a3aa4f5db9200d3e7af5ec29" } }, "output_type": "display_data" } ], "source": [ "bokeh.io.show(biocircuits.rd_plot(c_tuple_L_1, t, L_1, normalize=True, legend_names=['morphogen', 'expander']))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Numerical solution for expander with non-cooperative degradation\n", "\n", "We now consider the case where we do not have cooperative degradation. I.e., we have\n", "\n", "\\begin{align}\n", "\\gamma_m(c_m, c_e) = \\gamma_{m,1}\\,\\frac{c_m}{1+c_e}.\n", "\\end{align}\n", "\n", "Thus, our PDEs are\n", "\n", "\\begin{align}\n", "\\frac{\\partial c_m}{\\partial t} &= D_m \\,\\frac{\\partial^2 c_m}{\\partial x^2} - \\gamma_{m,1}\\frac{c_m}{1+c_e} \\\\[1em]\n", "\\frac{\\partial c_e}{\\partial t} &= D_e \\,\\frac{\\partial^2 c_e}{\\partial x^2} + \\frac{\\beta_e}{1 + (c_m/k)^n} - \\gamma_e\\, c_e.\n", "\\end{align}\n", "\n", "We can reuse the functions we already wrote with $\\gamma_{m,1} >0$ and $\\gamma_{m,2} = 0$." ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", "\n", "\n", "\n", "
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "(function(root) {\n", " function embed_document(root) {\n", " \n", " var docs_json = {\"e6b7d2f9-28b0-43c1-9d30-cf6ffc48dbd0\":{\"roots\":{\"references\":[{\"attributes\":{\"children\":[{\"id\":\"1919\",\"type\":\"ToolbarBox\"},{\"id\":\"1917\",\"type\":\"GridBox\"}]},\"id\":\"1920\",\"type\":\"Column\"},{\"attributes\":{},\"id\":\"1814\",\"type\":\"HelpTool\"},{\"attributes\":{},\"id\":\"1797\",\"type\":\"LogScale\"},{\"attributes\":{\"active_drag\":\"auto\",\"active_inspect\":\"auto\",\"active_multi\":null,\"active_scroll\":\"auto\",\"active_tap\":\"auto\",\"tools\":[{\"id\":\"1809\",\"type\":\"PanTool\"},{\"id\":\"1810\",\"type\":\"WheelZoomTool\"},{\"id\":\"1811\",\"type\":\"BoxZoomTool\"},{\"id\":\"1812\",\"type\":\"SaveTool\"},{\"id\":\"1813\",\"type\":\"ResetTool\"},{\"id\":\"1814\",\"type\":\"HelpTool\"}]},\"id\":\"1815\",\"type\":\"Toolbar\"},{\"attributes\":{},\"id\":\"1827\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1829\",\"type\":\"LogScale\"},{\"attributes\":{\"axis_label\":\"x\",\"formatter\":{\"id\":\"1907\",\"type\":\"BasicTickFormatter\"},\"ticker\":{\"id\":\"1832\",\"type\":\"BasicTicker\"}},\"id\":\"1831\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"1832\",\"type\":\"BasicTicker\"},{\"attributes\":{\"ticker\":{\"id\":\"1832\",\"type\":\"BasicTicker\"}},\"id\":\"1835\",\"type\":\"Grid\"},{\"attributes\":{\"formatter\":{\"id\":\"1909\",\"type\":\"LogTickFormatter\"},\"ticker\":{\"id\":\"1837\",\"type\":\"LogTicker\"}},\"id\":\"1836\",\"type\":\"LogAxis\"},{\"attributes\":{\"num_minor_ticks\":10},\"id\":\"1837\",\"type\":\"LogTicker\"},{\"attributes\":{\"dimension\":1,\"ticker\":{\"id\":\"1837\",\"type\":\"LogTicker\"}},\"id\":\"1840\",\"type\":\"Grid\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1856\",\"type\":\"Line\"},{\"attributes\":{\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1855\",\"type\":\"Line\"},{\"attributes\":{\"data_source\":{\"id\":\"1854\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"1855\",\"type\":\"Line\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"1856\",\"type\":\"Line\"},\"selection_glyph\":null,\"view\":{\"id\":\"1858\",\"type\":\"CDSView\"}},\"id\":\"1857\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1841\",\"type\":\"PanTool\"},{\"attributes\":{},\"id\":\"1842\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"overlay\":{\"id\":\"1911\",\"type\":\"BoxAnnotation\"}},\"id\":\"1843\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"below\":[{\"id\":\"1831\",\"type\":\"LinearAxis\"}],\"center\":[{\"id\":\"1835\",\"type\":\"Grid\"},{\"id\":\"1840\",\"type\":\"Grid\"}],\"left\":[{\"id\":\"1836\",\"type\":\"LogAxis\"}],\"plot_height\":250,\"plot_width\":350,\"renderers\":[{\"id\":\"1886\",\"type\":\"GlyphRenderer\"},{\"id\":\"1891\",\"type\":\"GlyphRenderer\"}],\"title\":{\"id\":\"1905\",\"type\":\"Title\"},\"toolbar\":{\"id\":\"1847\",\"type\":\"Toolbar\"},\"toolbar_location\":null,\"x_range\":{\"id\":\"1823\",\"type\":\"DataRange1d\"},\"x_scale\":{\"id\":\"1827\",\"type\":\"LinearScale\"},\"y_range\":{\"id\":\"1825\",\"type\":\"DataRange1d\"},\"y_scale\":{\"id\":\"1829\",\"type\":\"LogScale\"}},\"id\":\"1822\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{},\"id\":\"1844\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"1845\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"1846\",\"type\":\"HelpTool\"},{\"attributes\":{\"below\":[{\"id\":\"1799\",\"type\":\"LinearAxis\"}],\"center\":[{\"id\":\"1803\",\"type\":\"Grid\"},{\"id\":\"1808\",\"type\":\"Grid\"},{\"id\":\"1866\",\"type\":\"Legend\"}],\"left\":[{\"id\":\"1804\",\"type\":\"LogAxis\"}],\"plot_height\":250,\"plot_width\":350,\"renderers\":[{\"id\":\"1857\",\"type\":\"GlyphRenderer\"},{\"id\":\"1871\",\"type\":\"GlyphRenderer\"}],\"title\":{\"id\":\"1859\",\"type\":\"Title\"},\"toolbar\":{\"id\":\"1815\",\"type\":\"Toolbar\"},\"toolbar_location\":null,\"x_range\":{\"id\":\"1791\",\"type\":\"DataRange1d\"},\"x_scale\":{\"id\":\"1795\",\"type\":\"LinearScale\"},\"y_range\":{\"id\":\"1793\",\"type\":\"DataRange1d\"},\"y_scale\":{\"id\":\"1797\",\"type\":\"LogScale\"}},\"id\":\"1790\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"callback\":null},\"id\":\"1791\",\"type\":\"DataRange1d\"},{\"attributes\":{\"active_drag\":\"auto\",\"active_inspect\":\"auto\",\"active_multi\":null,\"active_scroll\":\"auto\",\"active_tap\":\"auto\",\"tools\":[{\"id\":\"1841\",\"type\":\"PanTool\"},{\"id\":\"1842\",\"type\":\"WheelZoomTool\"},{\"id\":\"1843\",\"type\":\"BoxZoomTool\"},{\"id\":\"1844\",\"type\":\"SaveTool\"},{\"id\":\"1845\",\"type\":\"ResetTool\"},{\"id\":\"1846\",\"type\":\"HelpTool\"}]},\"id\":\"1847\",\"type\":\"Toolbar\"},{\"attributes\":{\"callback\":null},\"id\":\"1793\",\"type\":\"DataRange1d\"},{\"attributes\":{\"source\":{\"id\":\"1854\",\"type\":\"ColumnDataSource\"}},\"id\":\"1858\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1795\",\"type\":\"LinearScale\"},{\"attributes\":{\"text\":\"\"},\"id\":\"1859\",\"type\":\"Title\"},{\"attributes\":{\"axis_label\":\"x/L\",\"formatter\":{\"id\":\"1861\",\"type\":\"BasicTickFormatter\"},\"ticker\":{\"id\":\"1800\",\"type\":\"BasicTicker\"}},\"id\":\"1799\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"1861\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"1800\",\"type\":\"BasicTicker\"},{\"attributes\":{\"ticker\":null},\"id\":\"1863\",\"type\":\"LogTickFormatter\"},{\"attributes\":{\"ticker\":{\"id\":\"1800\",\"type\":\"BasicTicker\"}},\"id\":\"1803\",\"type\":\"Grid\"},{\"attributes\":{\"bottom_units\":\"screen\",\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"lightgrey\"},\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":{\"value\":1.0},\"line_color\":{\"value\":\"black\"},\"line_dash\":[4,4],\"line_width\":{\"value\":2},\"render_mode\":\"css\",\"right_units\":\"screen\",\"top_units\":\"screen\"},\"id\":\"1865\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"formatter\":{\"id\":\"1863\",\"type\":\"LogTickFormatter\"},\"ticker\":{\"id\":\"1805\",\"type\":\"LogTicker\"}},\"id\":\"1804\",\"type\":\"LogAxis\"},{\"attributes\":{\"items\":[{\"id\":\"1867\",\"type\":\"LegendItem\"},{\"id\":\"1882\",\"type\":\"LegendItem\"}]},\"id\":\"1866\",\"type\":\"Legend\"},{\"attributes\":{\"num_minor_ticks\":10},\"id\":\"1805\",\"type\":\"LogTicker\"},{\"attributes\":{\"label\":{\"value\":\"L=100\"},\"renderers\":[{\"id\":\"1857\",\"type\":\"GlyphRenderer\"}]},\"id\":\"1867\",\"type\":\"LegendItem\"},{\"attributes\":{\"dimension\":1,\"ticker\":{\"id\":\"1805\",\"type\":\"LogTicker\"}},\"id\":\"1808\",\"type\":\"Grid\"},{\"attributes\":{\"callback\":null,\"data\":{\"x\":{\"__ndarray__\":\"AAAAAAAAAAB/pUCtXynwP3+lQK1fKQBAPvjggw8+CEB/pUCtXykQQN/OkJi3MxRAPvjggw8+GECeITFvZ0gcQH+lQK1fKSBAL7rooosuIkDfzpCYtzMkQI/jOI7jOCZAPvjggw8+KEDuDIl5O0MqQJ4hMW9nSCxATjbZZJNNLkB/pUCtXykwQNevFKj1KzFAL7rooosuMkCHxLydITEzQN/OkJi3MzRAN9lkk002NUCP4ziO4zg2QOftDIl5OzdAPvjggw8+OECWArV+pUA5QO4MiXk7QzpARhdddNFFO0CeITFvZ0g8QPYrBWr9Sj1ATjbZZJNNPkCmQK1fKVA/QH+lQK1fKUBAq6qqqqqqQEDXrxSo9StBQAO1fqVArUFAL7rooosuQkBbv1Kg1q9CQIfEvJ0hMUNAs8kmm2yyQ0DfzpCYtzNEQAvU+pUCtURAN9lkk002RUBj3s6QmLdFQI/jOI7jOEZAu+iiiy66RkDn7QyJeTtHQBPzdobEvEdAPvjggw8+SEBq/UqBWr9IQJYCtX6lQElAwgcffPDBSUDuDIl5O0NKQBoS83aGxEpARhdddNFFS0ByHMdxHMdLQJ4hMW9nSExAyiabbLLJTED2KwVq/UpNQCIxb2dIzE1ATjbZZJNNTkB6O0Ni3s5OQKZArV8pUE9A0kUXXXTRT0B/pUCtXylQQBWo9SsFalBAq6qqqqqqUEBBrV8pUOtQQNevFKj1K1FAbbLJJptsUUADtX6lQK1RQJm3MyTm7VFAL7rooosuUkDFvJ0hMW9SQFu/UqDWr1JA8cEHH3zwUkCHxLydITFTQB3HcRzHcVNAs8kmm2yyU0BJzNsZEvNTQN/OkJi3M1RAddFFF110VEAL1PqVArVUQKHWrxSo9VRAN9lkk002VUDN2xkS83ZVQGPezpCYt1VA+eCDDz74VUCP4ziO4zhWQCXm7QyJeVZAu+iiiy66VkBR61cK1PpWQOftDIl5O1dAffDBBx98V0AT83aGxLxXQKn1KwVq/VdAPvjggw8+WEDU+pUCtX5YQGr9SoFav1hAAAAAAAAAWUA=\",\"dtype\":\"float64\",\"shape\":[100]},\"y\":{\"__ndarray__\":\"1qNbx2Lf9j/UPl9iP1D1P/ijVzZR3PM/IsGDeL2B8j9rVG+7yT7xP6YBMbrZEfA/50ZOlNry7T8CTyfhPOjrP20ZSjM/Aeo/R4dK3XM76D8R412Sl5TmP8FD3YKOCuU/pe0vq2Gb4z8GJ65RPEXiP2HpSLBpBuE/qmj1jaW63z/fq3Oo+JDdP1/6qeEJjds/ij+gmUas2T+5tAMWSezXP2VmsXLVStY/t3Kox9bF1D/HIMCAXFvTP7p0veOXCdI/1hSfwdnO0D/y9lqgIFPPP+OvIVKKMM0/+ca71zYzyz8hJG8BnFjJP+s4mvJbnsc/0UJFHEICxj9Hcm1sQILEP2L4ca5sHMM/Z7ZJGf7OwT9ot2IIS5jAP60shriN7b4/IFlrAADSvD8VZ/gkPNu6P+wiWVnABrk/1zQQlDZStz/GpoOTcbu1P83WmBZqQLQ/qrXTRTzfsj/ZHKtJJZaxP8m8/QqBY7A/6deRNZCLrj+9c+l8G3esP9G9bjz8hqo/i0h7Jrm4qD+j3dwmBAqnP+XCinG3eKU/XIvHxNICpD9fcy/beKaiP292cArtYaE/gFCiC5EzoD9fftPUxTOeP8W6hzD2Jpw/sDcJQxU+mj/NvXwDs3aYP4bC4SqKzpY//rsFTn1DlT+lslkqlNOTP163NyL5fJI/BHJi5fY9kT+ycsFC9hSQPxMrI0H4AI4/9rvjME/+iz/n78VpYB+KP+h+9JvIYYg/JQliBk/Dhj9c17ug4kGFP7vrEXiX24M/Dz3WOqSOgj+4XxHxX1mBP1pU490/OoA/l9U3D6tffj9T3s7HmXF8P/TDdEvVp3o/qC2kVRUAeT+Ax5ANPXh3P1CcvFNYDnY/3AiKQ5nAdD/CSJvlVY1zPxToDhAGc3I/9vXicUFwcT/F6//GvYNwP5dEQGWaWG8/qlPze7nRbT/DQn3y5XBsP4/9Z3pdNGs/5aCQF4waaj91InccCiJpP7C+HV+aSWg/pvwtpCiQZz8lUV4+yPRmP70WVuCydmY/Uf+Nn0cVZj+ZpekmCtBlPzzTAxiipmU/WrRimtqYZT8=\",\"dtype\":\"float64\",\"shape\":[100]}},\"selected\":{\"id\":\"1913\",\"type\":\"Selection\"},\"selection_policy\":{\"id\":\"1912\",\"type\":\"UnionRenderers\"}},\"id\":\"1883\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"callback\":null},\"id\":\"1823\",\"type\":\"DataRange1d\"},{\"attributes\":{\"callback\":null,\"data\":{\"x\":{\"__ndarray__\":\"AAAAAAAAAABbv1Kg1q+EP1u/UqDWr5Q/CB988MEHnz9bv1Kg1q+kPzJvZ0jM26k/CB988MEHrz9vZ0jM2xmyP1u/UqDWr7Q/RhdddNFFtz8yb2dIzNu5Px3HcRzHcbw/CB988MEHvz96O0Ni3s7AP29nSMzbGcI/ZZNNNtlkwz9bv1Kg1q/EP1HrVwrU+sU/RhdddNFFxz88Q2LezpDIPzJvZ0jM28k/KJtssskmyz8dx3Ecx3HMPxPzdobEvM0/CB988MEHzz9/pUCtXynQP3o7Q2LeztA/dNFFF1100T9vZ0jM2xnSP2r9SoFav9I/ZZNNNtlk0z9gKVDrVwrUP1u/UqDWr9Q/VlVVVVVV1T9R61cK1PrVP0yBWr9SoNY/RhdddNFF1z9BrV8pUOvXPzxDYt7OkNg/N9lkk0022T8yb2dIzNvZPy0Fav1Kgdo/KJtssskm2z8jMW9nSMzbPx3HcRzHcdw/GF100UUX3T8T83aGxLzdPw6JeTtDYt4/CB988MEH3z8DtX6lQK3fP3+lQK1fKeA/fPDBBx984D96O0Ni3s7gP3eGxLydIeE/dNFFF1104T9yHMdxHMfhP29nSMzbGeI/bbLJJpts4j9q/UqBWr/iP2hIzNsZEuM/ZZNNNtlk4z9j3s6QmLfjP2ApUOtXCuQ/XXTRRRdd5D9bv1Kg1q/kP1gK1PqVAuU/VlVVVVVV5T9ToNavFKjlP1HrVwrU+uU/TjbZZJNN5j9MgVq/UqDmP0nM2xkS8+Y/RhdddNFF5z9EYt7OkJjnP0GtXylQ6+c/P/jggw8+6D88Q2LezpDoPzqO4ziO4+g/N9lkk0026T80JObtDInpPzJvZ0jM2+k/L7rooosu6j8tBWr9SoHqPypQ61cK1Oo/KJtssskm6z8l5u0MiXnrPyMxb2dIzOs/IHzwwQcf7D8dx3Ecx3HsPxsS83aGxOw/GF100UUX7T8WqPUrBWrtPxPzdobEvO0/ET744IMP7j8OiXk7Q2LuPwzU+pUCte4/CB988MEH7z8Fav1KgVrvPwO1fqVAre8/AAAAAAAA8D8=\",\"dtype\":\"float64\",\"shape\":[100]},\"y\":{\"__ndarray__\":\"Qrly7H89BEBxoYAtQbACQMEuPBp3QQFAZ+6w6Jfd/z8KlYehL2z9P6Jotyi6Kvs/wrMfa4oV+T9FkFV7Oyn3P5BIwAmrYvU/mB8+SfS+8z/4tP83azvyP89C7ESY1fA/WQztlGgW7z/6EqywSbTsPzP2MYzxgOo/17fxEcp46D+kAZWPg5jmPwg3jVAP3eQ/+byKoppD4z/wzbw7isnhP0YcW/t1bOA/1TIa+0lU3j9F75b4EwHcPx90qe5/29k/CkGFOw7g1z/dnHDogwvWP3D6B2blWtQ/UJjUr3HL0j8KX0rPnVrRP5iw3bYQBtA/Mwrd3D6XzT9NnZ0Vk1LLP9oiQdVrOsk/c8B3Zl9Lxz/JimYRR4LFP+Bz3vg53MM/QUNhXIhWwj8LbDs3t+7AP8wsHmv4RL8//DR18XPfvD/WoAhK+ai6P07Y3GXtnbg/itwF/vu6tj/2RpsmEv20P3pjMUxZYbM/vniskzLlsT/UnuSUMoawP7f4SNI6hK4/+9cpDsYtrD9srE7MNwWqP6y1BsgLB6g/TInSzQIwpj96hrpwHX2kP5ccmCeX66I/athZyuF4oT/SvehnoSKgP/5gzdtQzZ0/3pv9N+iFmz/jKwN6UmuZP5VH5kAiepc/5l1Any2vlT+FVk/ziAeUP4S9lySCgJI/vrdHP5wXkT/Mv3DMFpWPP9RM5iliLo0/oHMyVzH3ij8+2i5+6OuIP1gT11AzCYc/qHNpnP9LhT/yY0RIeLGDPxtWWbgAN4I/v0SrizDagD91599fnzF/P2EuyYel4Xw/Agn/hK/Aej82iwHjRct4P8gG4Bw4/nY/CEbEapdWdT8JBqH6sdFzP/vMOYwObXI/gTNTaWgmcT+oRgtnV/dvP579RgPk1W0/MLZljv7kaz9+E9wBfiFqP/lqYkODiGg/x9xCd3QXZz8i5XrD+MtlP0sIzXz0o2Q/Ns2Ct4WdYz9VEkg2AbdiP61/ILLv7mE/HvMHdwtEYT9ruVhRPrVgP8s0l8ifQWA/cNt8SefQXz8mFEl3UVJfP+a4BQmwBl8/Elw94IftXj8=\",\"dtype\":\"float64\",\"shape\":[100]}},\"selected\":{\"id\":\"1903\",\"type\":\"Selection\"},\"selection_policy\":{\"id\":\"1902\",\"type\":\"UnionRenderers\"}},\"id\":\"1868\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_color\":\"orange\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1869\",\"type\":\"Line\"},{\"attributes\":{\"callback\":null,\"data\":{\"x\":{\"__ndarray__\":\"AAAAAAAAAABbv1Kg1q+EP1u/UqDWr5Q/CB988MEHnz9bv1Kg1q+kPzJvZ0jM26k/CB988MEHrz9vZ0jM2xmyP1u/UqDWr7Q/RhdddNFFtz8yb2dIzNu5Px3HcRzHcbw/CB988MEHvz96O0Ni3s7AP29nSMzbGcI/ZZNNNtlkwz9bv1Kg1q/EP1HrVwrU+sU/RhdddNFFxz88Q2LezpDIPzJvZ0jM28k/KJtssskmyz8dx3Ecx3HMPxPzdobEvM0/CB988MEHzz9/pUCtXynQP3o7Q2LeztA/dNFFF1100T9vZ0jM2xnSP2r9SoFav9I/ZZNNNtlk0z9gKVDrVwrUP1u/UqDWr9Q/VlVVVVVV1T9R61cK1PrVP0yBWr9SoNY/RhdddNFF1z9BrV8pUOvXPzxDYt7OkNg/N9lkk0022T8yb2dIzNvZPy0Fav1Kgdo/KJtssskm2z8jMW9nSMzbPx3HcRzHcdw/GF100UUX3T8T83aGxLzdPw6JeTtDYt4/CB988MEH3z8DtX6lQK3fP3+lQK1fKeA/fPDBBx984D96O0Ni3s7gP3eGxLydIeE/dNFFF1104T9yHMdxHMfhP29nSMzbGeI/bbLJJpts4j9q/UqBWr/iP2hIzNsZEuM/ZZNNNtlk4z9j3s6QmLfjP2ApUOtXCuQ/XXTRRRdd5D9bv1Kg1q/kP1gK1PqVAuU/VlVVVVVV5T9ToNavFKjlP1HrVwrU+uU/TjbZZJNN5j9MgVq/UqDmP0nM2xkS8+Y/RhdddNFF5z9EYt7OkJjnP0GtXylQ6+c/P/jggw8+6D88Q2LezpDoPzqO4ziO4+g/N9lkk0026T80JObtDInpPzJvZ0jM2+k/L7rooosu6j8tBWr9SoHqPypQ61cK1Oo/KJtssskm6z8l5u0MiXnrPyMxb2dIzOs/IHzwwQcf7D8dx3Ecx3HsPxsS83aGxOw/GF100UUX7T8WqPUrBWrtPxPzdobEvO0/ET744IMP7j8OiXk7Q2LuPwzU+pUCte4/CB988MEH7z8Fav1KgVrvPwO1fqVAre8/AAAAAAAA8D8=\",\"dtype\":\"float64\",\"shape\":[100]},\"y\":{\"__ndarray__\":\"1qNbx2Lf9j/UPl9iP1D1P/ijVzZR3PM/IsGDeL2B8j9rVG+7yT7xP6YBMbrZEfA/50ZOlNry7T8CTyfhPOjrP20ZSjM/Aeo/R4dK3XM76D8R412Sl5TmP8FD3YKOCuU/pe0vq2Gb4z8GJ65RPEXiP2HpSLBpBuE/qmj1jaW63z/fq3Oo+JDdP1/6qeEJjds/ij+gmUas2T+5tAMWSezXP2VmsXLVStY/t3Kox9bF1D/HIMCAXFvTP7p0veOXCdI/1hSfwdnO0D/y9lqgIFPPP+OvIVKKMM0/+ca71zYzyz8hJG8BnFjJP+s4mvJbnsc/0UJFHEICxj9Hcm1sQILEP2L4ca5sHMM/Z7ZJGf7OwT9ot2IIS5jAP60shriN7b4/IFlrAADSvD8VZ/gkPNu6P+wiWVnABrk/1zQQlDZStz/GpoOTcbu1P83WmBZqQLQ/qrXTRTzfsj/ZHKtJJZaxP8m8/QqBY7A/6deRNZCLrj+9c+l8G3esP9G9bjz8hqo/i0h7Jrm4qD+j3dwmBAqnP+XCinG3eKU/XIvHxNICpD9fcy/beKaiP292cArtYaE/gFCiC5EzoD9fftPUxTOeP8W6hzD2Jpw/sDcJQxU+mj/NvXwDs3aYP4bC4SqKzpY//rsFTn1DlT+lslkqlNOTP163NyL5fJI/BHJi5fY9kT+ycsFC9hSQPxMrI0H4AI4/9rvjME/+iz/n78VpYB+KP+h+9JvIYYg/JQliBk/Dhj9c17ug4kGFP7vrEXiX24M/Dz3WOqSOgj+4XxHxX1mBP1pU490/OoA/l9U3D6tffj9T3s7HmXF8P/TDdEvVp3o/qC2kVRUAeT+Ax5ANPXh3P1CcvFNYDnY/3AiKQ5nAdD/CSJvlVY1zPxToDhAGc3I/9vXicUFwcT/F6//GvYNwP5dEQGWaWG8/qlPze7nRbT/DQn3y5XBsP4/9Z3pdNGs/5aCQF4waaj91InccCiJpP7C+HV+aSWg/pvwtpCiQZz8lUV4+yPRmP70WVuCydmY/Uf+Nn0cVZj+ZpekmCtBlPzzTAxiipmU/WrRimtqYZT8=\",\"dtype\":\"float64\",\"shape\":[100]}},\"selected\":{\"id\":\"1881\",\"type\":\"Selection\"},\"selection_policy\":{\"id\":\"1880\",\"type\":\"UnionRenderers\"}},\"id\":\"1854\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1870\",\"type\":\"Line\"},{\"attributes\":{\"callback\":null},\"id\":\"1825\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"1809\",\"type\":\"PanTool\"},{\"attributes\":{\"data_source\":{\"id\":\"1868\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"1869\",\"type\":\"Line\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"1870\",\"type\":\"Line\"},\"selection_glyph\":null,\"view\":{\"id\":\"1872\",\"type\":\"CDSView\"}},\"id\":\"1871\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1810\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"source\":{\"id\":\"1868\",\"type\":\"ColumnDataSource\"}},\"id\":\"1872\",\"type\":\"CDSView\"},{\"attributes\":{\"overlay\":{\"id\":\"1865\",\"type\":\"BoxAnnotation\"}},\"id\":\"1811\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"1880\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1812\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"1881\",\"type\":\"Selection\"},{\"attributes\":{\"label\":{\"value\":\"L=200\"},\"renderers\":[{\"id\":\"1871\",\"type\":\"GlyphRenderer\"}]},\"id\":\"1882\",\"type\":\"LegendItem\"},{\"attributes\":{},\"id\":\"1813\",\"type\":\"ResetTool\"},{\"attributes\":{\"callback\":null,\"data\":{\"x\":{\"__ndarray__\":\"AAAAAAAAAAB/pUCtXykAQH+lQK1fKRBAPvjggw8+GEB/pUCtXykgQN/OkJi3MyRAPvjggw8+KECeITFvZ0gsQH+lQK1fKTBAL7rooosuMkDfzpCYtzM0QI/jOI7jODZAPvjggw8+OEDuDIl5O0M6QJ4hMW9nSDxATjbZZJNNPkB/pUCtXylAQNevFKj1K0FAL7rooosuQkCHxLydITFDQN/OkJi3M0RAN9lkk002RUCP4ziO4zhGQOftDIl5O0dAPvjggw8+SECWArV+pUBJQO4MiXk7Q0pARhdddNFFS0CeITFvZ0hMQPYrBWr9Sk1ATjbZZJNNTkCmQK1fKVBPQH+lQK1fKVBAq6qqqqqqUEDXrxSo9StRQAO1fqVArVFAL7rooosuUkBbv1Kg1q9SQIfEvJ0hMVNAs8kmm2yyU0DfzpCYtzNUQAvU+pUCtVRAN9lkk002VUBj3s6QmLdVQI/jOI7jOFZAu+iiiy66VkDn7QyJeTtXQBPzdobEvFdAPvjggw8+WEBq/UqBWr9YQJYCtX6lQFlAwgcffPDBWUDuDIl5O0NaQBoS83aGxFpARhdddNFFW0ByHMdxHMdbQJ4hMW9nSFxAyiabbLLJXED2KwVq/UpdQCIxb2dIzF1ATjbZZJNNXkB6O0Ni3s5eQKZArV8pUF9A0kUXXXTRX0B/pUCtXylgQBWo9SsFamBAq6qqqqqqYEBBrV8pUOtgQNevFKj1K2FAbbLJJptsYUADtX6lQK1hQJm3MyTm7WFAL7rooosuYkDFvJ0hMW9iQFu/UqDWr2JA8cEHH3zwYkCHxLydITFjQB3HcRzHcWNAs8kmm2yyY0BJzNsZEvNjQN/OkJi3M2RAddFFF110ZEAL1PqVArVkQKHWrxSo9WRAN9lkk002ZUDN2xkS83ZlQGPezpCYt2VA+eCDDz74ZUCP4ziO4zhmQCXm7QyJeWZAu+iiiy66ZkBR61cK1PpmQOftDIl5O2dAffDBBx98Z0AT83aGxLxnQKn1KwVq/WdAPvjggw8+aEDU+pUCtX5oQGr9SoFav2hAAAAAAAAAaUA=\",\"dtype\":\"float64\",\"shape\":[100]},\"y\":{\"__ndarray__\":\"Qrly7H89BEBxoYAtQbACQMEuPBp3QQFAZ+6w6Jfd/z8KlYehL2z9P6Jotyi6Kvs/wrMfa4oV+T9FkFV7Oyn3P5BIwAmrYvU/mB8+SfS+8z/4tP83azvyP89C7ESY1fA/WQztlGgW7z/6EqywSbTsPzP2MYzxgOo/17fxEcp46D+kAZWPg5jmPwg3jVAP3eQ/+byKoppD4z/wzbw7isnhP0YcW/t1bOA/1TIa+0lU3j9F75b4EwHcPx90qe5/29k/CkGFOw7g1z/dnHDogwvWP3D6B2blWtQ/UJjUr3HL0j8KX0rPnVrRP5iw3bYQBtA/Mwrd3D6XzT9NnZ0Vk1LLP9oiQdVrOsk/c8B3Zl9Lxz/JimYRR4LFP+Bz3vg53MM/QUNhXIhWwj8LbDs3t+7AP8wsHmv4RL8//DR18XPfvD/WoAhK+ai6P07Y3GXtnbg/itwF/vu6tj/2RpsmEv20P3pjMUxZYbM/vniskzLlsT/UnuSUMoawP7f4SNI6hK4/+9cpDsYtrD9srE7MNwWqP6y1BsgLB6g/TInSzQIwpj96hrpwHX2kP5ccmCeX66I/athZyuF4oT/SvehnoSKgP/5gzdtQzZ0/3pv9N+iFmz/jKwN6UmuZP5VH5kAiepc/5l1Any2vlT+FVk/ziAeUP4S9lySCgJI/vrdHP5wXkT/Mv3DMFpWPP9RM5iliLo0/oHMyVzH3ij8+2i5+6OuIP1gT11AzCYc/qHNpnP9LhT/yY0RIeLGDPxtWWbgAN4I/v0SrizDagD91599fnzF/P2EuyYel4Xw/Agn/hK/Aej82iwHjRct4P8gG4Bw4/nY/CEbEapdWdT8JBqH6sdFzP/vMOYwObXI/gTNTaWgmcT+oRgtnV/dvP579RgPk1W0/MLZljv7kaz9+E9wBfiFqP/lqYkODiGg/x9xCd3QXZz8i5XrD+MtlP0sIzXz0o2Q/Ns2Ct4WdYz9VEkg2AbdiP61/ILLv7mE/HvMHdwtEYT9ruVhRPrVgP8s0l8ifQWA/cNt8SefQXz8mFEl3UVJfP+a4BQmwBl8/Elw94IftXj8=\",\"dtype\":\"float64\",\"shape\":[100]}},\"selected\":{\"id\":\"1915\",\"type\":\"Selection\"},\"selection_policy\":{\"id\":\"1914\",\"type\":\"UnionRenderers\"}},\"id\":\"1888\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1884\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1885\",\"type\":\"Line\"},{\"attributes\":{\"data_source\":{\"id\":\"1883\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"1884\",\"type\":\"Line\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"1885\",\"type\":\"Line\"},\"selection_glyph\":null,\"view\":{\"id\":\"1887\",\"type\":\"CDSView\"}},\"id\":\"1886\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"source\":{\"id\":\"1883\",\"type\":\"ColumnDataSource\"}},\"id\":\"1887\",\"type\":\"CDSView\"},{\"attributes\":{\"children\":[[{\"id\":\"1790\",\"subtype\":\"Figure\",\"type\":\"Plot\"},0,0],[{\"id\":\"1822\",\"subtype\":\"Figure\",\"type\":\"Plot\"},0,1]]},\"id\":\"1917\",\"type\":\"GridBox\"},{\"attributes\":{\"line_color\":\"orange\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1889\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1890\",\"type\":\"Line\"},{\"attributes\":{\"data_source\":{\"id\":\"1888\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"1889\",\"type\":\"Line\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"1890\",\"type\":\"Line\"},\"selection_glyph\":null,\"view\":{\"id\":\"1892\",\"type\":\"CDSView\"}},\"id\":\"1891\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"source\":{\"id\":\"1888\",\"type\":\"ColumnDataSource\"}},\"id\":\"1892\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1902\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1903\",\"type\":\"Selection\"},{\"attributes\":{\"text\":\"\"},\"id\":\"1905\",\"type\":\"Title\"},{\"attributes\":{},\"id\":\"1907\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"ticker\":null},\"id\":\"1909\",\"type\":\"LogTickFormatter\"},{\"attributes\":{\"bottom_units\":\"screen\",\"fill_alpha\":{\"value\":0.5},\"fill_color\":{\"value\":\"lightgrey\"},\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":{\"value\":1.0},\"line_color\":{\"value\":\"black\"},\"line_dash\":[4,4],\"line_width\":{\"value\":2},\"render_mode\":\"css\",\"right_units\":\"screen\",\"top_units\":\"screen\"},\"id\":\"1911\",\"type\":\"BoxAnnotation\"},{\"attributes\":{},\"id\":\"1912\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1913\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1914\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1915\",\"type\":\"Selection\"},{\"attributes\":{\"tools\":[{\"id\":\"1809\",\"type\":\"PanTool\"},{\"id\":\"1810\",\"type\":\"WheelZoomTool\"},{\"id\":\"1811\",\"type\":\"BoxZoomTool\"},{\"id\":\"1812\",\"type\":\"SaveTool\"},{\"id\":\"1813\",\"type\":\"ResetTool\"},{\"id\":\"1814\",\"type\":\"HelpTool\"},{\"id\":\"1841\",\"type\":\"PanTool\"},{\"id\":\"1842\",\"type\":\"WheelZoomTool\"},{\"id\":\"1843\",\"type\":\"BoxZoomTool\"},{\"id\":\"1844\",\"type\":\"SaveTool\"},{\"id\":\"1845\",\"type\":\"ResetTool\"},{\"id\":\"1846\",\"type\":\"HelpTool\"}]},\"id\":\"1918\",\"type\":\"ProxyToolbar\"},{\"attributes\":{\"toolbar\":{\"id\":\"1918\",\"type\":\"ProxyToolbar\"},\"toolbar_location\":\"above\"},\"id\":\"1919\",\"type\":\"ToolbarBox\"}],\"root_ids\":[\"1920\"]},\"title\":\"Bokeh Application\",\"version\":\"1.1.0\"}};\n", " var render_items = [{\"docid\":\"e6b7d2f9-28b0-43c1-9d30-cf6ffc48dbd0\",\"roots\":{\"1920\":\"0d09acd0-0b9b-4beb-83eb-ebf28bca6784\"}}];\n", " root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\n", "\n", " }\n", " if (root.Bokeh !== undefined) {\n", " embed_document(root);\n", " } else {\n", " var attempts = 0;\n", " var timer = setInterval(function(root) {\n", " if (root.Bokeh !== undefined) {\n", " embed_document(root);\n", " clearInterval(timer);\n", " }\n", " attempts++;\n", " if (attempts > 100) {\n", " console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\");\n", " clearInterval(timer);\n", " }\n", " }, 10, root)\n", " }\n", "})(window);" ], "application/vnd.bokehjs_exec.v0+json": "" }, "metadata": { "application/vnd.bokehjs_exec.v0+json": { "id": "1920" } }, "output_type": "display_data" } ], "source": [ "# Reaction params\n", "gamma_m1 = 0.1\n", "gamma_m2 = 0\n", "gamma_e = 1e-6\n", "beta_e = 1e-2\n", "k = 1e-3\n", "n = 4\n", "rxn_params = (gamma_m1, gamma_m2, gamma_e, beta_e, k, n)\n", "\n", "# Initial concentration\n", "c_0_tuple = (np.zeros(n_gridpoints), np.zeros(n_gridpoints))\n", "\n", "# Production rate\n", "eta = 0.1\n", "\n", "# Solve\n", "c_tuple_L_1 = biocircuits.rd_solve(\n", " c_0_tuple, t, L=L_1, derivs_0=(-eta, 0), derivs_L=0, \n", " diff_coeff_fun=biocircuits.constant_diff_coeffs, diff_coeff_params=(diff_coeffs,), \n", " rxn_fun=expander_gradient_rxn, rxn_params=rxn_params, atol=1e-6)\n", "\n", "c_tuple_L_2 = biocircuits.rd_solve(\n", " c_0_tuple, t, L=L_2, derivs_0=(-eta, 0), derivs_L=0, \n", " diff_coeff_fun=biocircuits.constant_diff_coeffs, diff_coeff_params=(diff_coeffs,), \n", " rxn_fun=expander_gradient_rxn, rxn_params=rxn_params, atol=1e-6)\n", "\n", "# x-values for plot\n", "x_1 = np.linspace(0, L_1, n_gridpoints)\n", "x_2 = np.linspace(0, L_2, n_gridpoints)\n", "\n", "# Make plots\n", "p1 = bokeh.plotting.figure(height=250, width=350, x_axis_label='x/L', y_axis_type='log')\n", "p2 = bokeh.plotting.figure(height=250, width=350, x_axis_label='x', y_axis_type='log')\n", "p1.line(x_1/L_1, c_tuple_L_1[0][-1,:], legend='L=100', line_width=2)\n", "p1.line(x_2/L_2, c_tuple_L_2[0][-1,:], color='orange', legend='L=200', line_width=2)\n", "p2.line(x_1, c_tuple_L_1[0][-1,:], line_width=2)\n", "p2.line(x_2, c_tuple_L_2[0][-1,:], color='orange', line_width=2)\n", "\n", "bokeh.io.show(bokeh.layouts.gridplot([[p1, p2]]));" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Again, we get scaling of the gradient slope, but we see that the absolute level varies." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Computing environment" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "tags": [ "remove_input" ] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "CPython 3.7.3\n", "IPython 7.5.0\n", "\n", "numpy 1.16.3\n", "scipy 1.2.1\n", "numba 0.43.1\n", "bokeh 1.1.0\n", "jupyterlab 0.35.5\n", "biocircuits 0.0.13\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "ERROR:bokeh.server.views.ws:Refusing websocket connection from Origin 'http://be150.caltech.edu'; use --allow-websocket-origin=be150.caltech.edu or set BOKEH_ALLOW_WS_ORIGIN=be150.caltech.edu to permit this; currently we allow origins {'localhost:8888'}\n", "WARNING:tornado.access:403 GET /ws?bokeh-protocol-version=1.0&bokeh-session-id=8jt2d08KwlZhoAGhfrx7Wem9VOW31X3h8zF3Wkgcekkw (::1) 1.54ms\n", "ERROR:bokeh.server.views.ws:Refusing websocket connection from Origin 'http://be150.caltech.edu'; use --allow-websocket-origin=be150.caltech.edu or set BOKEH_ALLOW_WS_ORIGIN=be150.caltech.edu to permit this; currently we allow origins {'localhost:8888'}\n", "WARNING:tornado.access:403 GET /ws?bokeh-protocol-version=1.0&bokeh-session-id=jExRqyQGrFIaKJ2HAhv2f4nsDS5yJT3o4Y8pRa7jxgJ2 (::1) 1.60ms\n", "ERROR:bokeh.server.views.ws:Refusing websocket connection from Origin 'http://be150.caltech.edu'; use --allow-websocket-origin=be150.caltech.edu or set BOKEH_ALLOW_WS_ORIGIN=be150.caltech.edu to permit this; currently we allow origins {'localhost:8888'}\n", "WARNING:tornado.access:403 GET /ws?bokeh-protocol-version=1.0&bokeh-session-id=qTWU6Q3Yu8oo5yoxWWDuouYxWeSWFXm5LefryFyuKGyI (::1) 4.24ms\n", "ERROR:bokeh.server.views.ws:Refusing websocket connection from Origin 'http://be150.caltech.edu'; use --allow-websocket-origin=be150.caltech.edu or set BOKEH_ALLOW_WS_ORIGIN=be150.caltech.edu to permit this; currently we allow origins {'localhost:8888'}\n", "WARNING:tornado.access:403 GET /ws?bokeh-protocol-version=1.0&bokeh-session-id=kfyzDS83JTVyKGKgEQpdbcl2kqcNWKpfzLxV8eXzHJdp (::1) 1.09ms\n" ] } ], "source": [ "%load_ext watermark\n", "%watermark -v -p numpy,scipy,numba,bokeh,jupyterlab,biocircuits" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.7.3" } }, "nbformat": 4, "nbformat_minor": 2 }