{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Some tools to analyze dynamical systems\n", "\n", "(c) 2018 Justin Bois. 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", "
\n", "*This document was generated from an Jupyter notebook. You can download the notebook [here](l23_scaling_morphogens.ipynb). Not all of the interactive parts of this notebook will work in a web browser; you need to run the notebook with a Python kernel.*" ] }, { "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 !== undefined) {\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 element_id = msg.content.text.trim();\n", " Bokeh.index[element_id].model.document.clear();\n", " delete Bokeh.index[element_id];\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(\"26dabaeb-87b5-4123-b0c3-53d802f3434d\");\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) { callback() });\n", " }\n", " finally {\n", " delete root._bokeh_onload_callbacks\n", " }\n", " console.info(\"Bokeh: all callbacks have finished\");\n", " }\n", "\n", " function load_libs(js_urls, callback) {\n", " root._bokeh_onload_callbacks.push(callback);\n", " if (root._bokeh_is_loading > 0) {\n", " console.log(\"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.log(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n", " root._bokeh_is_loading = js_urls.length;\n", " for (var i = 0; i < js_urls.length; i++) {\n", " var url = js_urls[i];\n", " var s = document.createElement('script');\n", " s.src = url;\n", " s.async = false;\n", " s.onreadystatechange = s.onload = function() {\n", " root._bokeh_is_loading--;\n", " if (root._bokeh_is_loading === 0) {\n", " console.log(\"Bokeh: all BokehJS libraries loaded\");\n", " run_callbacks()\n", " }\n", " };\n", " s.onerror = function() {\n", " console.warn(\"failed to load library \" + url);\n", " };\n", " console.log(\"Bokeh: injecting script tag for BokehJS library: \", url);\n", " document.getElementsByTagName(\"head\")[0].appendChild(s);\n", " }\n", " };var element = document.getElementById(\"26dabaeb-87b5-4123-b0c3-53d802f3434d\");\n", " if (element == null) {\n", " console.log(\"Bokeh: ERROR: autoload.js configured with elementid '26dabaeb-87b5-4123-b0c3-53d802f3434d' but no matching script tag was found. \")\n", " return false;\n", " }\n", "\n", " var js_urls = [\"https://cdn.pydata.org/bokeh/release/bokeh-0.12.16.min.js\", \"https://cdn.pydata.org/bokeh/release/bokeh-widgets-0.12.16.min.js\", \"https://cdn.pydata.org/bokeh/release/bokeh-tables-0.12.16.min.js\", \"https://cdn.pydata.org/bokeh/release/bokeh-gl-0.12.16.min.js\"];\n", "\n", " var inline_js = [\n", " function(Bokeh) {\n", " Bokeh.set_log_level(\"info\");\n", " },\n", " \n", " function(Bokeh) {\n", " \n", " },\n", " function(Bokeh) {\n", " console.log(\"Bokeh: injecting CSS: https://cdn.pydata.org/bokeh/release/bokeh-0.12.16.min.css\");\n", " Bokeh.embed.inject_css(\"https://cdn.pydata.org/bokeh/release/bokeh-0.12.16.min.css\");\n", " console.log(\"Bokeh: injecting CSS: https://cdn.pydata.org/bokeh/release/bokeh-widgets-0.12.16.min.css\");\n", " Bokeh.embed.inject_css(\"https://cdn.pydata.org/bokeh/release/bokeh-widgets-0.12.16.min.css\");\n", " console.log(\"Bokeh: injecting CSS: https://cdn.pydata.org/bokeh/release/bokeh-tables-0.12.16.min.css\");\n", " Bokeh.embed.inject_css(\"https://cdn.pydata.org/bokeh/release/bokeh-tables-0.12.16.min.css\");\n", " }\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(\"26dabaeb-87b5-4123-b0c3-53d802f3434d\")).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.log(\"Bokeh: BokehJS loaded, going straight to plotting\");\n", " run_inline_js();\n", " } else {\n", " load_libs(js_urls, function() {\n", " console.log(\"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(\"26dabaeb-87b5-4123-b0c3-53d802f3434d\");\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) { callback() });\n }\n finally {\n delete root._bokeh_onload_callbacks\n }\n console.info(\"Bokeh: all callbacks have finished\");\n }\n\n function load_libs(js_urls, callback) {\n root._bokeh_onload_callbacks.push(callback);\n if (root._bokeh_is_loading > 0) {\n console.log(\"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.log(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n root._bokeh_is_loading = js_urls.length;\n for (var i = 0; i < js_urls.length; i++) {\n var url = js_urls[i];\n var s = document.createElement('script');\n s.src = url;\n s.async = false;\n s.onreadystatechange = s.onload = function() {\n root._bokeh_is_loading--;\n if (root._bokeh_is_loading === 0) {\n console.log(\"Bokeh: all BokehJS libraries loaded\");\n run_callbacks()\n }\n };\n s.onerror = function() {\n console.warn(\"failed to load library \" + url);\n };\n console.log(\"Bokeh: injecting script tag for BokehJS library: \", url);\n document.getElementsByTagName(\"head\")[0].appendChild(s);\n }\n };var element = document.getElementById(\"26dabaeb-87b5-4123-b0c3-53d802f3434d\");\n if (element == null) {\n console.log(\"Bokeh: ERROR: autoload.js configured with elementid '26dabaeb-87b5-4123-b0c3-53d802f3434d' but no matching script tag was found. \")\n return false;\n }\n\n var js_urls = [\"https://cdn.pydata.org/bokeh/release/bokeh-0.12.16.min.js\", \"https://cdn.pydata.org/bokeh/release/bokeh-widgets-0.12.16.min.js\", \"https://cdn.pydata.org/bokeh/release/bokeh-tables-0.12.16.min.js\", \"https://cdn.pydata.org/bokeh/release/bokeh-gl-0.12.16.min.js\"];\n\n var inline_js = [\n function(Bokeh) {\n Bokeh.set_log_level(\"info\");\n },\n \n function(Bokeh) {\n \n },\n function(Bokeh) {\n console.log(\"Bokeh: injecting CSS: https://cdn.pydata.org/bokeh/release/bokeh-0.12.16.min.css\");\n Bokeh.embed.inject_css(\"https://cdn.pydata.org/bokeh/release/bokeh-0.12.16.min.css\");\n console.log(\"Bokeh: injecting CSS: https://cdn.pydata.org/bokeh/release/bokeh-widgets-0.12.16.min.css\");\n Bokeh.embed.inject_css(\"https://cdn.pydata.org/bokeh/release/bokeh-widgets-0.12.16.min.css\");\n console.log(\"Bokeh: injecting CSS: https://cdn.pydata.org/bokeh/release/bokeh-tables-0.12.16.min.css\");\n Bokeh.embed.inject_css(\"https://cdn.pydata.org/bokeh/release/bokeh-tables-0.12.16.min.css\");\n }\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(\"26dabaeb-87b5-4123-b0c3-53d802f3434d\")).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.log(\"Bokeh: BokehJS loaded, going straight to plotting\");\n run_inline_js();\n } else {\n load_libs(js_urls, function() {\n console.log(\"Bokeh: BokehJS plotting callback run at\", now());\n run_inline_js();\n });\n }\n}(window));" }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Our engines\n", "import numpy as np\n", "import scipy.integrate\n", "\n", "# Plotting modules\n", "import bokeh.layouts\n", "import bokeh.plotting\n", "import bokeh.io\n", "bokeh.io.output_notebook()\n", "\n", "import ipywidgets" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Reaction-diffusion models for morphogen patterning\n", "\n", "A **morphogen** is a chemical species that determines 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", "Today, we will consider **reaction-diffusion** (R-D) models for mophogen dynamics. 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", "&\\phantom{blah}\n", "\\end{align}\n", "\n" ] }, { "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 to profiles together." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "
\n", "
\n", "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "(function(root) {\n", " function embed_document(root) {\n", " \n", " var docs_json = {\"db5a5137-43f1-4881-ab62-d3e0fc62576f\":{\"roots\":{\"references\":[{\"attributes\":{\"plot\":{\"id\":\"453d7539-9126-4c24-9e17-e728e591c780\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"cf14d943-f141-4c09-83a5-e5983940a7f2\",\"type\":\"BasicTicker\"}},\"id\":\"c8bb5cdb-16ef-45ac-89ce-2ce8d1581086\",\"type\":\"Grid\"},{\"attributes\":{\"axis_label\":\"conc\",\"formatter\":{\"id\":\"9c477467-9779-48e3-8d24-b3a2ae0a91b5\",\"type\":\"BasicTickFormatter\"},\"plot\":{\"id\":\"453d7539-9126-4c24-9e17-e728e591c780\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"02be59cb-f126-4078-a408-10010a958b46\",\"type\":\"BasicTicker\"}},\"id\":\"6c12f7e5-9bb5-4dc4-9c8d-6a7ce6a38a12\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"02be59cb-f126-4078-a408-10010a958b46\",\"type\":\"BasicTicker\"},{\"attributes\":{\"dimension\":1,\"plot\":{\"id\":\"453d7539-9126-4c24-9e17-e728e591c780\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"02be59cb-f126-4078-a408-10010a958b46\",\"type\":\"BasicTicker\"}},\"id\":\"788eaf85-8e56-4bec-910d-2500bb2d21ec\",\"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},\"plot\":null,\"render_mode\":\"css\",\"right_units\":\"screen\",\"top_units\":\"screen\"},\"id\":\"e9a9b9cf-3e12-4012-a4c5-c006479d540f\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"callback\":null},\"id\":\"1b050f8e-aae7-4bcd-8548-34d9333c6511\",\"type\":\"DataRange1d\"},{\"attributes\":{\"callback\":null},\"id\":\"b8c17e92-76ac-4e1c-992f-55c58c37492f\",\"type\":\"DataRange1d\"},{\"attributes\":{\"active_drag\":\"auto\",\"active_inspect\":\"auto\",\"active_scroll\":\"auto\",\"active_tap\":\"auto\",\"tools\":[{\"id\":\"0b7ec9d1-c6da-4b79-825c-414850232d54\",\"type\":\"PanTool\"},{\"id\":\"ad8c5381-242e-4d44-8a8a-45cf9b733f6e\",\"type\":\"WheelZoomTool\"},{\"id\":\"f7fdbcaa-5882-4533-bd5d-980e054910c7\",\"type\":\"BoxZoomTool\"},{\"id\":\"2ebb2f84-5256-4c58-ab3d-bdbc031df536\",\"type\":\"SaveTool\"},{\"id\":\"230e45ad-808f-457a-8f14-21f916cc814b\",\"type\":\"ResetTool\"},{\"id\":\"a4bcba9e-832a-40d0-b561-f864a67e728f\",\"type\":\"HelpTool\"}]},\"id\":\"bad03394-b3e0-46ab-8bbc-762106a7e07f\",\"type\":\"Toolbar\"},{\"attributes\":{},\"id\":\"18cbb1a2-b034-4abb-b6e8-e5ac787a913b\",\"type\":\"PanTool\"},{\"attributes\":{},\"id\":\"621ed300-262b-469a-bd8a-60ec97ac3b8c\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"88f9cdef-04be-4da4-beed-6c1c56367bbb\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"overlay\":{\"id\":\"e9a9b9cf-3e12-4012-a4c5-c006479d540f\",\"type\":\"BoxAnnotation\"}},\"id\":\"7d23a853-1f1d-4343-8ea2-4bd9735f23f9\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"3f4ea934-20e5-4145-bebd-a2968a09fc05\",\"type\":\"SaveTool\"},{\"attributes\":{\"line_color\":\"dodgerblue\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"3a7ba2c3-2348-4052-a9df-bc59a5e0fd91\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"189faf20-ef44-4775-9afe-c482ba9a6bc6\",\"type\":\"ResetTool\"},{\"attributes\":{\"data_source\":{\"id\":\"01fc7309-6758-4132-aa70-7122cfba1fd8\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"3a7ba2c3-2348-4052-a9df-bc59a5e0fd91\",\"type\":\"Line\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"cdb3a23d-2c17-4dd0-bfff-3af3104f1e8b\",\"type\":\"Line\"},\"selection_glyph\":null,\"view\":{\"id\":\"8659d3f0-f437-4c4b-a861-a0653a121537\",\"type\":\"CDSView\"}},\"id\":\"58ab4f25-7d56-4016-b529-f17caff3439d\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"9869c957-107b-4bc2-91e3-3160ac94ba1c\",\"type\":\"HelpTool\"},{\"attributes\":{},\"id\":\"07d33e31-7067-4537-9940-5e06aa0c9a32\",\"type\":\"LogScale\"},{\"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\":\"3d5a44b4-3675-4982-a3f9-1207d590b944\",\"type\":\"Selection\"},\"selection_policy\":{\"id\":\"2711680a-e345-406b-a4aa-875074ffabdc\",\"type\":\"UnionRenderers\"}},\"id\":\"65ea57d4-3fe1-41f4-b52e-ef0c10a9c217\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"plot\":{\"id\":\"5dd2c4a4-a05a-48b4-9886-90cded44d2e5\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"9f5bf922-c637-45b1-91a6-78d99e88d016\",\"type\":\"BasicTicker\"}},\"id\":\"071c5b98-7b61-4bc6-8f26-f38c63c1bdbe\",\"type\":\"Grid\"},{\"attributes\":{\"axis_label\":\"x/L\",\"formatter\":{\"id\":\"23f790ed-c6ba-47a2-9f2a-4b24352538bd\",\"type\":\"BasicTickFormatter\"},\"plot\":{\"id\":\"5dd2c4a4-a05a-48b4-9886-90cded44d2e5\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"9f5bf922-c637-45b1-91a6-78d99e88d016\",\"type\":\"BasicTicker\"}},\"id\":\"6a59ff30-d93b-4608-8c42-f2f2c1af66eb\",\"type\":\"LinearAxis\"},{\"attributes\":{\"formatter\":{\"id\":\"8838bbdf-30a0-4456-9c3b-aa0b9fd46d4a\",\"type\":\"LogTickFormatter\"},\"plot\":{\"id\":\"5dd2c4a4-a05a-48b4-9886-90cded44d2e5\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"05937160-eb11-4c19-b354-a4bea98e8f1a\",\"type\":\"LogTicker\"}},\"id\":\"36be7e7a-ba54-4883-9de6-2db81e574d05\",\"type\":\"LogAxis\"},{\"attributes\":{},\"id\":\"9c477467-9779-48e3-8d24-b3a2ae0a91b5\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"9f5bf922-c637-45b1-91a6-78d99e88d016\",\"type\":\"BasicTicker\"},{\"attributes\":{\"plot\":null,\"text\":\"\"},\"id\":\"0509f3f5-94f3-4a4c-ad1f-8e0040b636f5\",\"type\":\"Title\"},{\"attributes\":{\"num_minor_ticks\":10},\"id\":\"05937160-eb11-4c19-b354-a4bea98e8f1a\",\"type\":\"LogTicker\"},{\"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},\"plot\":null,\"render_mode\":\"css\",\"right_units\":\"screen\",\"top_units\":\"screen\"},\"id\":\"0837870f-9899-49a4-b749-a4c8f9ebc665\",\"type\":\"BoxAnnotation\"},{\"attributes\":{},\"id\":\"0b7ec9d1-c6da-4b79-825c-414850232d54\",\"type\":\"PanTool\"},{\"attributes\":{},\"id\":\"ad8c5381-242e-4d44-8a8a-45cf9b733f6e\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"overlay\":{\"id\":\"0837870f-9899-49a4-b749-a4c8f9ebc665\",\"type\":\"BoxAnnotation\"}},\"id\":\"f7fdbcaa-5882-4533-bd5d-980e054910c7\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"2ebb2f84-5256-4c58-ab3d-bdbc031df536\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"230e45ad-808f-457a-8f14-21f916cc814b\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"a4bcba9e-832a-40d0-b561-f864a67e728f\",\"type\":\"HelpTool\"},{\"attributes\":{\"children\":[{\"id\":\"b605aa36-547d-4727-878e-3a4ed56e1dbe\",\"type\":\"ToolbarBox\"},{\"id\":\"c42c7cbe-f713-42c3-9f11-1524df0d562d\",\"type\":\"Column\"}]},\"id\":\"fd99e1ba-22f5-4878-a139-14f2961e8bfa\",\"type\":\"Column\"},{\"attributes\":{\"children\":[{\"id\":\"453d7539-9126-4c24-9e17-e728e591c780\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"id\":\"5dd2c4a4-a05a-48b4-9886-90cded44d2e5\",\"subtype\":\"Figure\",\"type\":\"Plot\"}]},\"id\":\"abb85235-677d-45bd-b1bb-e6cd0be516da\",\"type\":\"Row\"},{\"attributes\":{\"data_source\":{\"id\":\"65ea57d4-3fe1-41f4-b52e-ef0c10a9c217\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"331457d6-dc13-412f-8078-b459a3fb6200\",\"type\":\"Line\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"e7f6560c-a371-411d-a427-a54ec2e4de97\",\"type\":\"Line\"},\"selection_glyph\":null,\"view\":{\"id\":\"3dc88c77-7d4e-4870-a9a0-943365333528\",\"type\":\"CDSView\"}},\"id\":\"e0c1d513-c2f2-476e-87bf-a7b102faa9ee\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"source\":{\"id\":\"65ea57d4-3fe1-41f4-b52e-ef0c10a9c217\",\"type\":\"ColumnDataSource\"}},\"id\":\"3dc88c77-7d4e-4870-a9a0-943365333528\",\"type\":\"CDSView\"},{\"attributes\":{\"items\":[{\"id\":\"51151836-bfc5-4a2e-a130-24ab5191674d\",\"type\":\"LegendItem\"},{\"id\":\"ad766a82-83f6-4256-992b-22042788f0d5\",\"type\":\"LegendItem\"}],\"plot\":{\"id\":\"453d7539-9126-4c24-9e17-e728e591c780\",\"subtype\":\"Figure\",\"type\":\"Plot\"}},\"id\":\"88e3f099-06a4-4641-bfb2-7aa32d477234\",\"type\":\"Legend\"},{\"attributes\":{\"label\":{\"value\":\"L=100\"},\"renderers\":[{\"id\":\"58ab4f25-7d56-4016-b529-f17caff3439d\",\"type\":\"GlyphRenderer\"}]},\"id\":\"51151836-bfc5-4a2e-a130-24ab5191674d\",\"type\":\"LegendItem\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"29748efc-58eb-4eed-9dce-ee858437f3ee\",\"type\":\"Line\"},{\"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\":\"3afa0539-d6d0-4742-a8d4-3827fbdbde60\",\"type\":\"Selection\"},\"selection_policy\":{\"id\":\"ca648d3d-33aa-4c7c-959b-af01b1935bf5\",\"type\":\"UnionRenderers\"}},\"id\":\"f6aa4227-9edc-4b9c-a1a1-2f256e17c383\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"e7f6560c-a371-411d-a427-a54ec2e4de97\",\"type\":\"Line\"},{\"attributes\":{\"line_color\":\"tomato\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"331457d6-dc13-412f-8078-b459a3fb6200\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"ff1ef5ea-ee55-41e6-8cca-77400c5d0c0d\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"0dbdeecd-0813-42c5-ab73-4ca61aecc97d\",\"type\":\"Selection\"},{\"attributes\":{\"line_color\":\"dodgerblue\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"d98e9dfd-e916-40ed-9c1f-7494956db8e1\",\"type\":\"Line\"},{\"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\":\"226a27dc-45c3-48f4-b0d1-246d6c3ea211\",\"type\":\"Selection\"},\"selection_policy\":{\"id\":\"cd2637ed-2fa7-47b5-b984-aec4bb01915b\",\"type\":\"UnionRenderers\"}},\"id\":\"55306cd2-cb07-4041-b2a1-e43982d1baf6\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"label\":{\"value\":\"L=200\"},\"renderers\":[{\"id\":\"e0c1d513-c2f2-476e-87bf-a7b102faa9ee\",\"type\":\"GlyphRenderer\"}]},\"id\":\"ad766a82-83f6-4256-992b-22042788f0d5\",\"type\":\"LegendItem\"},{\"attributes\":{\"line_color\":\"tomato\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"3221b0a2-b164-4a81-a500-1486474f1487\",\"type\":\"Line\"},{\"attributes\":{\"children\":[{\"id\":\"abb85235-677d-45bd-b1bb-e6cd0be516da\",\"type\":\"Row\"}]},\"id\":\"c42c7cbe-f713-42c3-9f11-1524df0d562d\",\"type\":\"Column\"},{\"attributes\":{\"source\":{\"id\":\"f6aa4227-9edc-4b9c-a1a1-2f256e17c383\",\"type\":\"ColumnDataSource\"}},\"id\":\"f953026a-cc87-4c04-b9b5-cff57693e59f\",\"type\":\"CDSView\"},{\"attributes\":{\"data_source\":{\"id\":\"f6aa4227-9edc-4b9c-a1a1-2f256e17c383\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"d98e9dfd-e916-40ed-9c1f-7494956db8e1\",\"type\":\"Line\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"29748efc-58eb-4eed-9dce-ee858437f3ee\",\"type\":\"Line\"},\"selection_glyph\":null,\"view\":{\"id\":\"f953026a-cc87-4c04-b9b5-cff57693e59f\",\"type\":\"CDSView\"}},\"id\":\"2a370610-6c27-4e24-99fe-ede226b1a01d\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"18543310-4e1e-4ff2-860c-6ca3bfcf084d\",\"type\":\"Line\"},{\"attributes\":{\"data_source\":{\"id\":\"55306cd2-cb07-4041-b2a1-e43982d1baf6\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"3221b0a2-b164-4a81-a500-1486474f1487\",\"type\":\"Line\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"18543310-4e1e-4ff2-860c-6ca3bfcf084d\",\"type\":\"Line\"},\"selection_glyph\":null,\"view\":{\"id\":\"d9d9976c-eb52-4f6d-81f5-d61b55e89f4a\",\"type\":\"CDSView\"}},\"id\":\"1d269470-fdd8-4bc9-9b7b-c3419da6d046\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"source\":{\"id\":\"55306cd2-cb07-4041-b2a1-e43982d1baf6\",\"type\":\"ColumnDataSource\"}},\"id\":\"d9d9976c-eb52-4f6d-81f5-d61b55e89f4a\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"3d5a44b4-3675-4982-a3f9-1207d590b944\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"23f790ed-c6ba-47a2-9f2a-4b24352538bd\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"b90a0e05-8d8c-41e0-99e3-371580d26270\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"2711680a-e345-406b-a4aa-875074ffabdc\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"active_drag\":\"auto\",\"active_inspect\":\"auto\",\"active_scroll\":\"auto\",\"active_tap\":\"auto\",\"tools\":[{\"id\":\"18cbb1a2-b034-4abb-b6e8-e5ac787a913b\",\"type\":\"PanTool\"},{\"id\":\"88f9cdef-04be-4da4-beed-6c1c56367bbb\",\"type\":\"WheelZoomTool\"},{\"id\":\"7d23a853-1f1d-4343-8ea2-4bd9735f23f9\",\"type\":\"BoxZoomTool\"},{\"id\":\"3f4ea934-20e5-4145-bebd-a2968a09fc05\",\"type\":\"SaveTool\"},{\"id\":\"189faf20-ef44-4775-9afe-c482ba9a6bc6\",\"type\":\"ResetTool\"},{\"id\":\"9869c957-107b-4bc2-91e3-3160ac94ba1c\",\"type\":\"HelpTool\"}]},\"id\":\"196e093c-abbf-45ed-ad14-3f59e21df076\",\"type\":\"Toolbar\"},{\"attributes\":{\"source\":{\"id\":\"01fc7309-6758-4132-aa70-7122cfba1fd8\",\"type\":\"ColumnDataSource\"}},\"id\":\"8659d3f0-f437-4c4b-a861-a0653a121537\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"ca648d3d-33aa-4c7c-959b-af01b1935bf5\",\"type\":\"UnionRenderers\"},{\"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\":\"0dbdeecd-0813-42c5-ab73-4ca61aecc97d\",\"type\":\"Selection\"},\"selection_policy\":{\"id\":\"ff1ef5ea-ee55-41e6-8cca-77400c5d0c0d\",\"type\":\"UnionRenderers\"}},\"id\":\"01fc7309-6758-4132-aa70-7122cfba1fd8\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"ticker\":null},\"id\":\"8838bbdf-30a0-4456-9c3b-aa0b9fd46d4a\",\"type\":\"LogTickFormatter\"},{\"attributes\":{\"below\":[{\"id\":\"319507ee-9198-4a28-84fc-fe937db4f994\",\"type\":\"LinearAxis\"}],\"left\":[{\"id\":\"6c12f7e5-9bb5-4dc4-9c8d-6a7ce6a38a12\",\"type\":\"LinearAxis\"}],\"plot_height\":250,\"plot_width\":350,\"renderers\":[{\"id\":\"319507ee-9198-4a28-84fc-fe937db4f994\",\"type\":\"LinearAxis\"},{\"id\":\"c8bb5cdb-16ef-45ac-89ce-2ce8d1581086\",\"type\":\"Grid\"},{\"id\":\"6c12f7e5-9bb5-4dc4-9c8d-6a7ce6a38a12\",\"type\":\"LinearAxis\"},{\"id\":\"788eaf85-8e56-4bec-910d-2500bb2d21ec\",\"type\":\"Grid\"},{\"id\":\"e9a9b9cf-3e12-4012-a4c5-c006479d540f\",\"type\":\"BoxAnnotation\"},{\"id\":\"88e3f099-06a4-4641-bfb2-7aa32d477234\",\"type\":\"Legend\"},{\"id\":\"58ab4f25-7d56-4016-b529-f17caff3439d\",\"type\":\"GlyphRenderer\"},{\"id\":\"e0c1d513-c2f2-476e-87bf-a7b102faa9ee\",\"type\":\"GlyphRenderer\"}],\"title\":{\"id\":\"0509f3f5-94f3-4a4c-ad1f-8e0040b636f5\",\"type\":\"Title\"},\"toolbar\":{\"id\":\"196e093c-abbf-45ed-ad14-3f59e21df076\",\"type\":\"Toolbar\"},\"toolbar_location\":null,\"x_range\":{\"id\":\"3c9aa79e-5a18-4ce7-ba67-1217835c4a1d\",\"type\":\"DataRange1d\"},\"x_scale\":{\"id\":\"6ddf91e2-fb0a-461e-8975-5f8295df42c6\",\"type\":\"LinearScale\"},\"y_range\":{\"id\":\"2828ce3d-6bd6-474e-bca2-098ba45d63a7\",\"type\":\"DataRange1d\"},\"y_scale\":{\"id\":\"5ab4438e-8498-48e4-8ba8-2185b02ade5c\",\"type\":\"LinearScale\"}},\"id\":\"453d7539-9126-4c24-9e17-e728e591c780\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"plot\":null,\"text\":\"\"},\"id\":\"b7364b84-0194-4919-850e-0c7be4426597\",\"type\":\"Title\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"cdb3a23d-2c17-4dd0-bfff-3af3104f1e8b\",\"type\":\"Line\"},{\"attributes\":{\"below\":[{\"id\":\"6a59ff30-d93b-4608-8c42-f2f2c1af66eb\",\"type\":\"LinearAxis\"}],\"left\":[{\"id\":\"36be7e7a-ba54-4883-9de6-2db81e574d05\",\"type\":\"LogAxis\"}],\"plot_height\":250,\"plot_width\":350,\"renderers\":[{\"id\":\"6a59ff30-d93b-4608-8c42-f2f2c1af66eb\",\"type\":\"LinearAxis\"},{\"id\":\"071c5b98-7b61-4bc6-8f26-f38c63c1bdbe\",\"type\":\"Grid\"},{\"id\":\"36be7e7a-ba54-4883-9de6-2db81e574d05\",\"type\":\"LogAxis\"},{\"id\":\"bb8fc5e5-1de8-4895-a729-dd0fe6efc8d3\",\"type\":\"Grid\"},{\"id\":\"0837870f-9899-49a4-b749-a4c8f9ebc665\",\"type\":\"BoxAnnotation\"},{\"id\":\"2a370610-6c27-4e24-99fe-ede226b1a01d\",\"type\":\"GlyphRenderer\"},{\"id\":\"1d269470-fdd8-4bc9-9b7b-c3419da6d046\",\"type\":\"GlyphRenderer\"}],\"title\":{\"id\":\"b7364b84-0194-4919-850e-0c7be4426597\",\"type\":\"Title\"},\"toolbar\":{\"id\":\"bad03394-b3e0-46ab-8bbc-762106a7e07f\",\"type\":\"Toolbar\"},\"toolbar_location\":null,\"x_range\":{\"id\":\"1b050f8e-aae7-4bcd-8548-34d9333c6511\",\"type\":\"DataRange1d\"},\"x_scale\":{\"id\":\"621ed300-262b-469a-bd8a-60ec97ac3b8c\",\"type\":\"LinearScale\"},\"y_range\":{\"id\":\"b8c17e92-76ac-4e1c-992f-55c58c37492f\",\"type\":\"DataRange1d\"},\"y_scale\":{\"id\":\"07d33e31-7067-4537-9940-5e06aa0c9a32\",\"type\":\"LogScale\"}},\"id\":\"5dd2c4a4-a05a-48b4-9886-90cded44d2e5\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{},\"id\":\"3afa0539-d6d0-4742-a8d4-3827fbdbde60\",\"type\":\"Selection\"},{\"attributes\":{\"toolbar\":{\"id\":\"9c3fbfeb-6aad-4cfb-b8d0-af529877c069\",\"type\":\"ProxyToolbar\"},\"toolbar_location\":\"above\"},\"id\":\"b605aa36-547d-4727-878e-3a4ed56e1dbe\",\"type\":\"ToolbarBox\"},{\"attributes\":{\"axis_label\":\"x/L\",\"formatter\":{\"id\":\"b90a0e05-8d8c-41e0-99e3-371580d26270\",\"type\":\"BasicTickFormatter\"},\"plot\":{\"id\":\"453d7539-9126-4c24-9e17-e728e591c780\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"cf14d943-f141-4c09-83a5-e5983940a7f2\",\"type\":\"BasicTicker\"}},\"id\":\"319507ee-9198-4a28-84fc-fe937db4f994\",\"type\":\"LinearAxis\"},{\"attributes\":{\"dimension\":1,\"plot\":{\"id\":\"5dd2c4a4-a05a-48b4-9886-90cded44d2e5\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"05937160-eb11-4c19-b354-a4bea98e8f1a\",\"type\":\"LogTicker\"}},\"id\":\"bb8fc5e5-1de8-4895-a729-dd0fe6efc8d3\",\"type\":\"Grid\"},{\"attributes\":{\"tools\":[{\"id\":\"18cbb1a2-b034-4abb-b6e8-e5ac787a913b\",\"type\":\"PanTool\"},{\"id\":\"88f9cdef-04be-4da4-beed-6c1c56367bbb\",\"type\":\"WheelZoomTool\"},{\"id\":\"7d23a853-1f1d-4343-8ea2-4bd9735f23f9\",\"type\":\"BoxZoomTool\"},{\"id\":\"3f4ea934-20e5-4145-bebd-a2968a09fc05\",\"type\":\"SaveTool\"},{\"id\":\"189faf20-ef44-4775-9afe-c482ba9a6bc6\",\"type\":\"ResetTool\"},{\"id\":\"9869c957-107b-4bc2-91e3-3160ac94ba1c\",\"type\":\"HelpTool\"},{\"id\":\"0b7ec9d1-c6da-4b79-825c-414850232d54\",\"type\":\"PanTool\"},{\"id\":\"ad8c5381-242e-4d44-8a8a-45cf9b733f6e\",\"type\":\"WheelZoomTool\"},{\"id\":\"f7fdbcaa-5882-4533-bd5d-980e054910c7\",\"type\":\"BoxZoomTool\"},{\"id\":\"2ebb2f84-5256-4c58-ab3d-bdbc031df536\",\"type\":\"SaveTool\"},{\"id\":\"230e45ad-808f-457a-8f14-21f916cc814b\",\"type\":\"ResetTool\"},{\"id\":\"a4bcba9e-832a-40d0-b561-f864a67e728f\",\"type\":\"HelpTool\"}]},\"id\":\"9c3fbfeb-6aad-4cfb-b8d0-af529877c069\",\"type\":\"ProxyToolbar\"},{\"attributes\":{},\"id\":\"cf14d943-f141-4c09-83a5-e5983940a7f2\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"6ddf91e2-fb0a-461e-8975-5f8295df42c6\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"226a27dc-45c3-48f4-b0d1-246d6c3ea211\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"5ab4438e-8498-48e4-8ba8-2185b02ade5c\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"cd2637ed-2fa7-47b5-b984-aec4bb01915b\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"callback\":null},\"id\":\"3c9aa79e-5a18-4ce7-ba67-1217835c4a1d\",\"type\":\"DataRange1d\"},{\"attributes\":{\"callback\":null},\"id\":\"2828ce3d-6bd6-474e-bca2-098ba45d63a7\",\"type\":\"DataRange1d\"}],\"root_ids\":[\"fd99e1ba-22f5-4878-a139-14f2961e8bfa\"]},\"title\":\"Bokeh Application\",\"version\":\"0.12.16\"}};\n", " var render_items = [{\"docid\":\"db5a5137-43f1-4881-ab62-d3e0fc62576f\",\"elementid\":\"d08621e5-cf41-4f47-bb13-7536aa92cf41\",\"modelid\":\"fd99e1ba-22f5-4878-a139-14f2961e8bfa\"}];\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": "fd99e1ba-22f5-4878-a139-14f2961e8bfa" } }, "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), color='dodgerblue', legend='L=100', line_width=2)\n", "p1.line(x_2/L_2, np.exp(-x_2/lam), color='tomato', legend='L=200', line_width=2)\n", "p2.line(x_1/L_1, np.exp(-x_1/lam), color='dodgerblue', line_width=2)\n", "p2.line(x_2/L_2, np.exp(-x_2/lam), color='tomato', line_width=2)\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*, **107**, 6924-6929, 2010." ] }, { "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?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Numerical solution to R-D equations\n", "\n", "To solve R-D systems, I wrote the two functions below, which are the main engines for computation. The first computes the time derivative of concentrations at each of the spatial grid points. The second is a wrapper around `scipy.integrate.odeint()` to do the time stepping. Their doc strings describe them in more detail." ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def dc_dt(c, t, x, derivs_0, derivs_L, diff_coeff_fun, diff_coeff_params, \n", " rxn_fun, rxn_params, n_species, h):\n", " \"\"\"\n", " Time derivative of concentrations in an R-D system \n", " for constant flux BCs.\n", " \n", " Parameters\n", " ----------\n", " c : ndarray, shape (n_species * n_gridpoints)\n", " The concentration of the chemical species interleaved in a\n", " a NumPy array. The interleaving allows us to take advantage \n", " of the banded structure of the Jacobian when using the \n", " Hindmarsh algorithm for integrating in time.\n", " t : float\n", " Time.\n", " derivs_0 : ndarray, shape (n_species)\n", " derivs_0[i] is the value of the diffusive flux,\n", " D dc_i/dx, at x = 0, the leftmost boundary of the domain of x.\n", " derivs_L : ndarray, shape (n_species)\n", " derivs_0[i] is the value of the diffusive flux,\n", " D dc_i/dx, at x = L, the rightmost boundary of the domain of x.\n", " diff_coeff_fun : function\n", " Function of the form diff_coeff_fun(c_tuple, t, x, *diff_coeff_params).\n", " Returns an tuple where entry i is a NumPy array containing\n", " the diffusion coefficient of species i at the grid points.\n", " c_tuple[i] is a NumPy array containing the concentrations of\n", " species i at the grid poitns.\n", " diff_coeff_params : arbitrary\n", " Tuple of parameters to be passed into diff_coeff_fun.\n", " rxn_fun : function\n", " Function of the form rxn_fun(c_tuple, t, *rxn_params).\n", " Returns an tuple where entry i is a NumPy array containing\n", " the net rate of production of species i by chemical reaction\n", " at the grid points. c_tuple[i] is a NumPy array containing \n", " the concentrations of species i at the grid poitns.\n", " rxn_params : arbitrary\n", " Tuple of parameters to be passed into rxn_fun.\n", " n_species : int\n", " Number of chemical species.\n", " h : float\n", " Grid spacing (assumed to be constant)\n", " \n", " Returns\n", " -------\n", " dc_dt : ndarray, shape (n_species * n_gridpoints)\n", " The time derivatives of the concentrations of the chemical\n", " species at the grid points interleaved in a NumPy array.\n", " \"\"\"\n", " # Tuple of concentrations\n", " c_tuple = tuple([c[i::n_species] for i in range(n_species)])\n", " \n", " # Compute diffusion coefficients\n", " D_tuple = diff_coeff_fun(c_tuple, t, x, *diff_coeff_params)\n", " \n", " # Compute reaction terms\n", " rxn_tuple = rxn_fun(c_tuple, t, *rxn_params)\n", "\n", " # Return array\n", " conc_deriv = np.empty_like(c)\n", " \n", " # Convenient array for storing concentrations\n", " da_dt = np.empty(len(c_tuple[0]))\n", "\n", " # Useful to have square of grid spacing around\n", " h2 = h**2\n", " \n", " # Compute diffusion terms (central differencing w/ Neumann BCs)\n", " for i in range(n_species):\n", " # View of concentrations and diffusion coeff. for convenience\n", " a = np.copy(c_tuple[i])\n", " D = np.copy(D_tuple[i])\n", " \n", " # Time derivative at left boundary\n", " da_dt[0] = D[0] / h2 * 2 * (a[1] - a[0] - h * derivs_0[i])\n", " \n", " # First derivatives of D and a\n", " dD_dx = (D[2:] - D[:-2]) / (2*h)\n", " da_dx = (a[2:] - a[:-2]) / (2*h)\n", "\n", " # Time derivative for middle grid points\n", " da_dt[1:-1] = D[1:-1] * np.diff(a, 2) / h2 + dD_dx*da_dx\n", " \n", " # Time derivative at left boundary\n", " da_dt[-1] = D[-1] / h2 * 2 * (a[-2] - a[-1] + h * derivs_L[i])\n", " \n", " # Store in output array with reaction terms\n", " conc_deriv[i::n_species] = da_dt + rxn_tuple[i]\n", " \n", " return conc_deriv\n", "\n", "\n", "def rd_solve(c_0_tuple, t, L=1, derivs_0=0, derivs_L=0, diff_coeff_fun=None, \n", " diff_coeff_params=(), rxn_fun=None, rxn_params=(),\n", " rtol=1.49012e-8, atol=1.49012e-8):\n", " \"\"\"\n", " Parameters\n", " ----------\n", " c_0_tuple : tuple\n", " c_0_tuple[i] is a NumPy array of length n_gridpoints with the \n", " initial concentrations of chemical species i at the grid points.\n", " t : ndarray\n", " An array of time points for which the solution is desired.\n", " L : float\n", " Total length of the x-domain.\n", " derivs_0 : ndarray, shape (n_species)\n", " derivs_0[i] is the value of dc_i/dx at x = 0.\n", " derivs_L : ndarray, shape (n_species)\n", " derivs_L[i] is the value of dc_i/dx at x = L, the rightmost\n", " boundary of the domain of x.\n", " diff_coeff_fun : function\n", " Function of the form diff_coeff_fun(c_tuple, t, *diff_coeff_params).\n", " Returns an tuple where entry i is a NumPy array containing\n", " the diffusion coefficient of species i at the grid points.\n", " c_tuple[i] is a NumPy array containing the concentrations of\n", " species i at the grid poitns.\n", " diff_coeff_params : arbitrary\n", " Tuple of parameters to be passed into diff_coeff_fun.\n", " rxn_fun : function\n", " Function of the form rxn_fun(c_tuple, t, *rxn_params).\n", " Returns an tuple where entry i is a NumPy array containing\n", " the net rate of production of species i by chemical reaction\n", " at the grid points. c_tuple[i] is a NumPy array containing \n", " the concentrations of species i at the grid poitns.\n", " rxn_params : arbitrary\n", " Tuple of parameters to be passed into rxn_fun.\n", " rtol : float\n", " Relative tolerance for solver. Default os odeint's default.\n", " atol : float\n", " Absolute tolerance for solver. Default os odeint's default.\n", " \n", " Returns\n", " -------\n", " c_tuple : tuple\n", " c_tuple[i] is a NumPy array of shape (len(t), n_gridpoints)\n", " with the initial concentrations of chemical species i at \n", " the grid points over time.\n", " \n", " Notes\n", " -----\n", " .. When intergrating for long times near a steady state, you\n", " may need to lower the absolute tolerance (atol) because the\n", " solution does not change much over time and it may be difficult\n", " for the solver to maintain tight tolerances.\n", " \"\"\"\n", " # Number of grid points\n", " n_gridpoints = len(c_0_tuple[0])\n", " \n", " # Number of chemical species\n", " n_species = len(c_0_tuple)\n", "\n", " # Grid spacing\n", " h = (L / (n_gridpoints - 1))\n", " \n", " # Grid points\n", " x = np.linspace(0, L, n_gridpoints)\n", " \n", " # Set up boundary conditions\n", " if np.isscalar(derivs_0):\n", " derivs_0 = np.array(n_species * [derivs_0])\n", " if np.isscalar(derivs_L):\n", " derivs_L = np.array(n_species * [derivs_L])\n", "\n", " # Set up parameters to be passed in to dc_dt\n", " params = (x, derivs_0, derivs_L, diff_coeff_fun, diff_coeff_params, \n", " rxn_fun, rxn_params, n_species, h)\n", "\n", " # Set up initial condition\n", " c0 = np.empty(n_species * n_gridpoints)\n", " for i in range(n_species):\n", " c0[i::n_species] = c_0_tuple[i]\n", "\n", " # Solve using odeint, taking advantage of banded structure\n", " c = scipy.integrate.odeint(\n", " dc_dt, c0, t, args=params, ml=n_species, mu=n_species,\n", " rtol=rtol, atol=atol)\n", " \n", " return tuple([c[:,i::n_species] for i in range(n_species)])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### A sample calculation: the activator-substrate depletion model (ASDM)\n", "\n", "We will use the R-D solver to solve the ASDM model, which exhibits Turing patterns. For the ASDM, we call $a$ the \"activator\" and the second species $s$ the \"substrate.\" The reaction terms are\n", "\n", "\\begin{align}\n", "r_a &= \\rho_a a^2 s - \\mu_a a \\\\[2mm]\n", "r_s &= -\\rho_s a^2 s + \\sigma_s.\n", "\\end{align}\n", "\n", "Upon nondimensionalizing, we get\n", "\n", "\\begin{align}\n", "\\frac{\\partial a}{\\partial t} &= d\\, \\frac{\\partial^2a}{\\partial x^2} + a^2s - a \\\\[2mm]\n", "\\frac{\\partial h}{\\partial t} &= \\frac{\\partial^2h}{\\partial x^2} + \\mu(1 - a^2 s),\n", "\\end{align}\n", "\n", "giving the two parameters $\\mu$ and $d = D_a/D_s$.\n", "\n", "The ASDM has a unique homogeneous steady state of $a_0 = s_0 = 1$.\n", "\n", "We will now write our functions to compute the diffusion coefficients and reaction terms for the ASDM, using the required I/O formats for the functions." ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def constant_diff_coeffs(c_tuple, t, x, diff_coeffs):\n", " n = len(c_tuple[0])\n", " return tuple([diff_coeffs[i] * np.ones(n) for i in range(len(c_tuple))])\n", "\n", "\n", "def asdm_rxn(as_tuple, t, mu):\n", " \"\"\"\n", " Reaction expression for activator-substrate depletion model.\n", "\n", " Returns the rate of production of activator and substrate, respectively.\n", "\n", " r_a = a**2 * s - a\n", " r_s = mu * (1 - a**2 * s)\n", " \"\"\"\n", " # Unpack concentrations\n", " a, s = as_tuple\n", " \n", " # Compute and return reaction rates\n", " a2s = a**2 * s\n", " return (a2s - a, mu * (1.0 - a2s))\n", "\n", "\n", "# Set up steady state (using 500 grid points)\n", "a_0 = np.ones(500)\n", "s_0 = np.ones(500)\n", "\n", "# Seed the random number generator for reproducibility\n", "np.random.seed(42)\n", "\n", "# Make a small perturbation to a_0\n", "a_0 += 0.001 * np.random.rand(len(a_0))\n", "\n", "# Time points\n", "t = np.linspace(0.0, 100.0, 100)\n", "\n", "# Physical length of system\n", "L = 20.0\n", "\n", "# Diffusion coefficient\n", "diff_coeffs = (0.05, 1.0)\n", "\n", "# Reaction parameter (must be a tuple of params, even though only 1 for ASDM)\n", "rxn_params = (1.4,)\n", "\n", "# Solve\n", "a, s = rd_solve((a_0, s_0), t, L=L, derivs_0=0, derivs_L=0, \n", " diff_coeff_fun=constant_diff_coeffs, \n", " diff_coeff_params=(diff_coeffs,), rxn_fun=asdm_rxn, \n", " rxn_params=rxn_params)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now that we've done the solution, let's plot the result with a slider so that we can change the values of the time points." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "
\n", "
\n", "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "(function(root) {\n", " function embed_document(root) {\n", " \n", " var docs_json = {\"b2da4528-e1e2-41de-bc48-3599e16c1a76\":{\"roots\":{\"references\":[{\"attributes\":{},\"id\":\"e04ab098-d824-4626-9b38-bb04bd0e46fa\",\"type\":\"BasicTicker\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"3f92072e-4ab9-4cb3-9cd7-0eb74dc45d6d\",\"type\":\"Line\"},{\"attributes\":{\"callback\":null},\"id\":\"e525a2a2-7509-461d-8d6e-f9d0dc15675b\",\"type\":\"DataRange1d\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"b72a9592-43f0-46c9-8bd7-38e9190bf4a2\",\"type\":\"Line\"},{\"attributes\":{\"below\":[{\"id\":\"64b5eb0e-a4cb-4a1a-b4e3-7e0cd608e3fe\",\"type\":\"LinearAxis\"}],\"left\":[{\"id\":\"270c41fb-5a59-476d-aa34-76621ddc6023\",\"type\":\"LinearAxis\"}],\"plot_height\":300,\"renderers\":[{\"id\":\"64b5eb0e-a4cb-4a1a-b4e3-7e0cd608e3fe\",\"type\":\"LinearAxis\"},{\"id\":\"18d617f4-8f11-495b-bff8-2144646f77c7\",\"type\":\"Grid\"},{\"id\":\"270c41fb-5a59-476d-aa34-76621ddc6023\",\"type\":\"LinearAxis\"},{\"id\":\"237129f1-48bf-4f45-a56f-c29938c2525c\",\"type\":\"Grid\"},{\"id\":\"1c9cf870-94da-41c1-bed6-59cb078481dc\",\"type\":\"BoxAnnotation\"},{\"id\":\"a1e2e790-f6d9-4852-bd04-b3a60aa48ec4\",\"type\":\"Legend\"},{\"id\":\"14a8de16-aeac-4e05-975c-bf87fde1dc67\",\"type\":\"GlyphRenderer\"},{\"id\":\"a9528dbf-56f2-4e0d-85c1-99cce5191de7\",\"type\":\"GlyphRenderer\"}],\"title\":{\"id\":\"d81b313d-d1c3-488f-8354-19649e4c5730\",\"type\":\"Title\"},\"toolbar\":{\"id\":\"f4969076-1951-4a17-9591-fbe699bb487c\",\"type\":\"Toolbar\"},\"x_range\":{\"id\":\"e525a2a2-7509-461d-8d6e-f9d0dc15675b\",\"type\":\"DataRange1d\"},\"x_scale\":{\"id\":\"c502ce68-2986-426f-ba4e-fffd71cdfadf\",\"type\":\"LinearScale\"},\"y_range\":{\"id\":\"cd5cf7aa-4e59-4337-865a-95a99cd6d80d\",\"type\":\"Range1d\"},\"y_scale\":{\"id\":\"2623eb6d-25eb-4b73-8405-f47c735f7602\",\"type\":\"LinearScale\"}},\"id\":\"4a6815ba-2e90-48b9-a8de-7a24b77d3ca7\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"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},\"plot\":null,\"render_mode\":\"css\",\"right_units\":\"screen\",\"top_units\":\"screen\"},\"id\":\"1c9cf870-94da-41c1-bed6-59cb078481dc\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"items\":[{\"id\":\"317d4c7a-1560-494d-8c5e-067a20b8001d\",\"type\":\"LegendItem\"},{\"id\":\"ef0cd930-b041-4f73-b605-030b394289e8\",\"type\":\"LegendItem\"}],\"plot\":{\"id\":\"4a6815ba-2e90-48b9-a8de-7a24b77d3ca7\",\"subtype\":\"Figure\",\"type\":\"Plot\"}},\"id\":\"a1e2e790-f6d9-4852-bd04-b3a60aa48ec4\",\"type\":\"Legend\"},{\"attributes\":{},\"id\":\"ae5f08a9-f39f-4b51-bd75-44b96c2e10ac\",\"type\":\"ResetTool\"},{\"attributes\":{\"callback\":null,\"data\":{\"x\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"shape\":[500]},\"y\":{\"__ndarray__\":\"AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPw==\",\"dtype\":\"float64\",\"shape\":[500]}},\"selected\":{\"id\":\"28c97ba2-ecc2-4da3-9d03-6bd633b588d5\",\"type\":\"Selection\"},\"selection_policy\":{\"id\":\"eb0474fa-c03d-4104-b4b6-cfe23d344be6\",\"type\":\"UnionRenderers\"}},\"id\":\"cc9213d3-ac70-4731-ab04-29442f65147f\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"plot\":null,\"text\":\"\"},\"id\":\"d81b313d-d1c3-488f-8354-19649e4c5730\",\"type\":\"Title\"},{\"attributes\":{\"plot\":{\"id\":\"4a6815ba-2e90-48b9-a8de-7a24b77d3ca7\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"e04ab098-d824-4626-9b38-bb04bd0e46fa\",\"type\":\"BasicTicker\"}},\"id\":\"18d617f4-8f11-495b-bff8-2144646f77c7\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"3911e374-ca04-470f-952c-2a9c77a45f9f\",\"type\":\"HelpTool\"},{\"attributes\":{},\"id\":\"1a938578-bf1a-4f7c-8e21-74459530acf3\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"b5565ce2-70be-4329-83fb-5302db8520d3\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"3f672dfc-4c57-42e9-9b54-13985e400bf0\",\"type\":\"PanTool\"},{\"attributes\":{},\"id\":\"2083b2ce-3117-4a64-b500-d2685b669cfd\",\"type\":\"SaveTool\"},{\"attributes\":{\"active_drag\":\"auto\",\"active_inspect\":\"auto\",\"active_scroll\":\"auto\",\"active_tap\":\"auto\",\"tools\":[{\"id\":\"3f672dfc-4c57-42e9-9b54-13985e400bf0\",\"type\":\"PanTool\"},{\"id\":\"bed5f37c-00f6-4201-95e6-99d7c93cba1a\",\"type\":\"WheelZoomTool\"},{\"id\":\"5d79cb36-1e87-4d5d-ac9f-6402a2741bf7\",\"type\":\"BoxZoomTool\"},{\"id\":\"2083b2ce-3117-4a64-b500-d2685b669cfd\",\"type\":\"SaveTool\"},{\"id\":\"ae5f08a9-f39f-4b51-bd75-44b96c2e10ac\",\"type\":\"ResetTool\"},{\"id\":\"3911e374-ca04-470f-952c-2a9c77a45f9f\",\"type\":\"HelpTool\"}]},\"id\":\"f4969076-1951-4a17-9591-fbe699bb487c\",\"type\":\"Toolbar\"},{\"attributes\":{\"axis_label\":\"x\",\"formatter\":{\"id\":\"1a938578-bf1a-4f7c-8e21-74459530acf3\",\"type\":\"BasicTickFormatter\"},\"plot\":{\"id\":\"4a6815ba-2e90-48b9-a8de-7a24b77d3ca7\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"e04ab098-d824-4626-9b38-bb04bd0e46fa\",\"type\":\"BasicTicker\"}},\"id\":\"64b5eb0e-a4cb-4a1a-b4e3-7e0cd608e3fe\",\"type\":\"LinearAxis\"},{\"attributes\":{\"source\":{\"id\":\"b3495081-b800-434b-a28f-94038bc55b23\",\"type\":\"ColumnDataSource\"}},\"id\":\"2780bb01-0115-44a9-b63e-b873a337fa13\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"bed5f37c-00f6-4201-95e6-99d7c93cba1a\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"label\":{\"value\":\"activator\"},\"renderers\":[{\"id\":\"14a8de16-aeac-4e05-975c-bf87fde1dc67\",\"type\":\"GlyphRenderer\"}]},\"id\":\"317d4c7a-1560-494d-8c5e-067a20b8001d\",\"type\":\"LegendItem\"},{\"attributes\":{\"overlay\":{\"id\":\"1c9cf870-94da-41c1-bed6-59cb078481dc\",\"type\":\"BoxAnnotation\"}},\"id\":\"5d79cb36-1e87-4d5d-ac9f-6402a2741bf7\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"callback\":null,\"data\":{\"x\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"shape\":[500]},\"y\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"shape\":[500]}},\"selected\":{\"id\":\"746dd4b7-2e41-468d-bafb-51105953843f\",\"type\":\"Selection\"},\"selection_policy\":{\"id\":\"d524d4be-cb0b-4e5c-8929-f640e54241ac\",\"type\":\"UnionRenderers\"}},\"id\":\"b3495081-b800-434b-a28f-94038bc55b23\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"axis_label\":\"conc\",\"formatter\":{\"id\":\"b5565ce2-70be-4329-83fb-5302db8520d3\",\"type\":\"BasicTickFormatter\"},\"plot\":{\"id\":\"4a6815ba-2e90-48b9-a8de-7a24b77d3ca7\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"09003aae-70bf-4950-89ff-25fdbf252448\",\"type\":\"BasicTicker\"}},\"id\":\"270c41fb-5a59-476d-aa34-76621ddc6023\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"d524d4be-cb0b-4e5c-8929-f640e54241ac\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"c502ce68-2986-426f-ba4e-fffd71cdfadf\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"09003aae-70bf-4950-89ff-25fdbf252448\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"2623eb6d-25eb-4b73-8405-f47c735f7602\",\"type\":\"LinearScale\"},{\"attributes\":{\"line_color\":\"dodgerblue\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"0f5cb880-2d14-452d-8268-c79621d0134f\",\"type\":\"Line\"},{\"attributes\":{\"callback\":null,\"end\":2.181267575655289,\"start\":-0.04276995246382919},\"id\":\"cd5cf7aa-4e59-4337-865a-95a99cd6d80d\",\"type\":\"Range1d\"},{\"attributes\":{\"dimension\":1,\"plot\":{\"id\":\"4a6815ba-2e90-48b9-a8de-7a24b77d3ca7\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"09003aae-70bf-4950-89ff-25fdbf252448\",\"type\":\"BasicTicker\"}},\"id\":\"237129f1-48bf-4f45-a56f-c29938c2525c\",\"type\":\"Grid\"},{\"attributes\":{\"data_source\":{\"id\":\"b3495081-b800-434b-a28f-94038bc55b23\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"0f5cb880-2d14-452d-8268-c79621d0134f\",\"type\":\"Line\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"b72a9592-43f0-46c9-8bd7-38e9190bf4a2\",\"type\":\"Line\"},\"selection_glyph\":null,\"view\":{\"id\":\"2780bb01-0115-44a9-b63e-b873a337fa13\",\"type\":\"CDSView\"}},\"id\":\"14a8de16-aeac-4e05-975c-bf87fde1dc67\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"source\":{\"id\":\"cc9213d3-ac70-4731-ab04-29442f65147f\",\"type\":\"ColumnDataSource\"}},\"id\":\"02f2f431-d44b-4ed8-9be0-05fbe310f687\",\"type\":\"CDSView\"},{\"attributes\":{\"label\":{\"value\":\"substrate\"},\"renderers\":[{\"id\":\"a9528dbf-56f2-4e0d-85c1-99cce5191de7\",\"type\":\"GlyphRenderer\"}]},\"id\":\"ef0cd930-b041-4f73-b605-030b394289e8\",\"type\":\"LegendItem\"},{\"attributes\":{},\"id\":\"28c97ba2-ecc2-4da3-9d03-6bd633b588d5\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"eb0474fa-c03d-4104-b4b6-cfe23d344be6\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"line_color\":\"tomato\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"c1e314fe-7eb5-4e57-b145-8bcc00403243\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"746dd4b7-2e41-468d-bafb-51105953843f\",\"type\":\"Selection\"},{\"attributes\":{\"data_source\":{\"id\":\"cc9213d3-ac70-4731-ab04-29442f65147f\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"c1e314fe-7eb5-4e57-b145-8bcc00403243\",\"type\":\"Line\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"3f92072e-4ab9-4cb3-9cd7-0eb74dc45d6d\",\"type\":\"Line\"},\"selection_glyph\":null,\"view\":{\"id\":\"02f2f431-d44b-4ed8-9be0-05fbe310f687\",\"type\":\"CDSView\"}},\"id\":\"a9528dbf-56f2-4e0d-85c1-99cce5191de7\",\"type\":\"GlyphRenderer\"}],\"root_ids\":[\"4a6815ba-2e90-48b9-a8de-7a24b77d3ca7\"]},\"title\":\"Bokeh Application\",\"version\":\"0.12.16\"}};\n", " var render_items = [{\"docid\":\"b2da4528-e1e2-41de-bc48-3599e16c1a76\",\"elementid\":\"5641a53d-7ce1-491e-a7cf-7a557536e39c\",\"modelid\":\"4a6815ba-2e90-48b9-a8de-7a24b77d3ca7\",\"notebook_comms_target\":\"a98af7e8-e4b9-4686-94ec-53ee58be6f55\"}];\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": "4a6815ba-2e90-48b9-a8de-7a24b77d3ca7" } }, "output_type": "display_data" }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "f92edb84f6644b39bc90a49874a83d67", "version_major": 2, "version_minor": 0 }, "text/plain": [ "interactive(children=(FloatSlider(value=0.0, description='time'), Output()), _dom_classes=('widget-interact',)…" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Didn't need x to compute, need it to plot (remember: it's dimensionless)\n", "x = np.linspace(0.0, L, len(a_0))\n", "y_max = max(a.max(), s.max())\n", "y_range = [-0.02*y_max, 1.02*y_max]\n", "\n", "p = bokeh.plotting.figure(width=600, height=300, x_axis_label='x', y_axis_label='conc',\n", " y_range=y_range)\n", "act = p.line(x, a[0,:], color='dodgerblue', line_width=2, legend='activator')\n", "sub = p.line(x, s[0,:], color='tomato', line_width=2, legend='substrate')\n", "\n", "def update(time=0.0):\n", " i = np.searchsorted(t, time)\n", " act.data_source.data['y'] = a[i,:]\n", " sub.data_source.data['y'] = s[i,:]\n", " bokeh.io.push_notebook()\n", "\n", "bokeh.io.show(p, notebook_handle=True)\n", "\n", "ipywidgets.interactive(update, \n", " time=ipywidgets.FloatSlider(min=t[0], max=t[-1], value=t[0]))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Numerical solution for simple source + degradation\n", "\n", "We can solve for the temporal dynamics of the simple source + degradation system." ] }, { "cell_type": "code", "execution_count": 6, "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] * rxn_params[0])\n", "\n", "# Solve\n", "c = rd_solve(c_0_tuple, t, L=L, derivs_0=derivs_0, derivs_L=0, \n", " diff_coeff_fun=constant_diff_coeffs, \n", " diff_coeff_params=(diff_coeffs,), rxn_fun=degradation_rxn, \n", " rxn_params=rxn_params)[0]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And let's make a plot." ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "
\n", "
\n", "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "(function(root) {\n", " function embed_document(root) {\n", " \n", " var docs_json = {\"29d0f7f7-7e09-4409-8a7e-751948659cd1\":{\"roots\":{\"references\":[{\"attributes\":{},\"id\":\"51debef4-1d92-4143-9c78-a6c8806e9401\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"02b2a511-0c04-40bf-a979-cadfb46f8c76\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"431592db-5d9f-452b-9dfd-2163a551f887\",\"type\":\"WheelZoomTool\"},{\"attributes\":{},\"id\":\"db3b6b4c-5340-46da-af70-4de8d0fe6552\",\"type\":\"ResetTool\"},{\"attributes\":{\"callback\":null,\"end\":1.020070291825666,\"start\":-0.020001378271091493},\"id\":\"99e19a87-277e-48da-8a28-e1b232edbc76\",\"type\":\"Range1d\"},{\"attributes\":{},\"id\":\"06173f5a-c467-41c7-ba39-d5905d21608d\",\"type\":\"LinearScale\"},{\"attributes\":{\"active_drag\":\"auto\",\"active_inspect\":\"auto\",\"active_scroll\":\"auto\",\"active_tap\":\"auto\",\"tools\":[{\"id\":\"04024aea-b26c-403f-9d3d-34fa90b8bb69\",\"type\":\"PanTool\"},{\"id\":\"431592db-5d9f-452b-9dfd-2163a551f887\",\"type\":\"WheelZoomTool\"},{\"id\":\"4db8ebff-6580-4ef4-bd05-e8955785e91c\",\"type\":\"BoxZoomTool\"},{\"id\":\"51debef4-1d92-4143-9c78-a6c8806e9401\",\"type\":\"SaveTool\"},{\"id\":\"db3b6b4c-5340-46da-af70-4de8d0fe6552\",\"type\":\"ResetTool\"},{\"id\":\"207c2160-6cfd-48fd-9671-3db664d4fcb3\",\"type\":\"HelpTool\"}]},\"id\":\"a54ebc6d-264a-415f-b1b5-9c9f647e86a1\",\"type\":\"Toolbar\"},{\"attributes\":{},\"id\":\"85f50411-267e-4000-83b0-ef356e49f225\",\"type\":\"BasicTicker\"},{\"attributes\":{\"source\":{\"id\":\"a9bc70c9-36ec-4a1a-9f1d-6739ecf903f9\",\"type\":\"ColumnDataSource\"}},\"id\":\"833c3fbd-a6d0-4bc9-a28e-4582f467c726\",\"type\":\"CDSView\"},{\"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},\"plot\":null,\"render_mode\":\"css\",\"right_units\":\"screen\",\"top_units\":\"screen\"},\"id\":\"07db29a1-efaa-44c0-9e0c-028b8f70629a\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"overlay\":{\"id\":\"07db29a1-efaa-44c0-9e0c-028b8f70629a\",\"type\":\"BoxAnnotation\"}},\"id\":\"4db8ebff-6580-4ef4-bd05-e8955785e91c\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"7452eac4-500b-4ac6-9062-5f006cc2dd74\",\"type\":\"Selection\"},{\"attributes\":{\"line_color\":\"dodgerblue\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"4ed92857-4501-4b8b-8ff0-61b0d3cbe0a8\",\"type\":\"Line\"},{\"attributes\":{\"dimension\":1,\"plot\":{\"id\":\"257089e6-d6bc-4848-9aca-e1c5924764bd\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"02b2a511-0c04-40bf-a979-cadfb46f8c76\",\"type\":\"BasicTicker\"}},\"id\":\"8526e25e-5fbd-4937-8462-981ef35945aa\",\"type\":\"Grid\"},{\"attributes\":{\"plot\":{\"id\":\"257089e6-d6bc-4848-9aca-e1c5924764bd\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"85f50411-267e-4000-83b0-ef356e49f225\",\"type\":\"BasicTicker\"}},\"id\":\"df70728b-b4fc-4bad-bfe2-6c12b249aea6\",\"type\":\"Grid\"},{\"attributes\":{\"callback\":null},\"id\":\"d6e6fc12-528f-4c5f-8688-e5fb04164c27\",\"type\":\"DataRange1d\"},{\"attributes\":{\"below\":[{\"id\":\"cc56004e-3952-4c46-8b94-ecc024b63782\",\"type\":\"LinearAxis\"}],\"left\":[{\"id\":\"f5ae7178-74cc-4823-8f99-675c30efb257\",\"type\":\"LinearAxis\"}],\"plot_height\":300,\"renderers\":[{\"id\":\"cc56004e-3952-4c46-8b94-ecc024b63782\",\"type\":\"LinearAxis\"},{\"id\":\"df70728b-b4fc-4bad-bfe2-6c12b249aea6\",\"type\":\"Grid\"},{\"id\":\"f5ae7178-74cc-4823-8f99-675c30efb257\",\"type\":\"LinearAxis\"},{\"id\":\"8526e25e-5fbd-4937-8462-981ef35945aa\",\"type\":\"Grid\"},{\"id\":\"07db29a1-efaa-44c0-9e0c-028b8f70629a\",\"type\":\"BoxAnnotation\"},{\"id\":\"159ff55f-35cc-4758-8f1e-06133385ce34\",\"type\":\"GlyphRenderer\"}],\"title\":{\"id\":\"7f5d9c66-3676-4501-9584-bde7eff5a60e\",\"type\":\"Title\"},\"toolbar\":{\"id\":\"a54ebc6d-264a-415f-b1b5-9c9f647e86a1\",\"type\":\"Toolbar\"},\"x_range\":{\"id\":\"d6e6fc12-528f-4c5f-8688-e5fb04164c27\",\"type\":\"DataRange1d\"},\"x_scale\":{\"id\":\"1479f0cb-a88a-4072-9eed-5f588f76ed16\",\"type\":\"LinearScale\"},\"y_range\":{\"id\":\"99e19a87-277e-48da-8a28-e1b232edbc76\",\"type\":\"Range1d\"},\"y_scale\":{\"id\":\"06173f5a-c467-41c7-ba39-d5905d21608d\",\"type\":\"LinearScale\"}},\"id\":\"257089e6-d6bc-4848-9aca-e1c5924764bd\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"axis_label\":\"x\",\"formatter\":{\"id\":\"24db4acf-fdc6-4ad8-9b80-82c208afc987\",\"type\":\"BasicTickFormatter\"},\"plot\":{\"id\":\"257089e6-d6bc-4848-9aca-e1c5924764bd\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"85f50411-267e-4000-83b0-ef356e49f225\",\"type\":\"BasicTicker\"}},\"id\":\"cc56004e-3952-4c46-8b94-ecc024b63782\",\"type\":\"LinearAxis\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"0c7b57ed-a8b5-4687-8e80-e8e17ffa07db\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1479f0cb-a88a-4072-9eed-5f588f76ed16\",\"type\":\"LinearScale\"},{\"attributes\":{\"axis_label\":\"conc\",\"formatter\":{\"id\":\"9df13291-61f6-4c9b-9d1f-cadc5b3560bf\",\"type\":\"BasicTickFormatter\"},\"plot\":{\"id\":\"257089e6-d6bc-4848-9aca-e1c5924764bd\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"02b2a511-0c04-40bf-a979-cadfb46f8c76\",\"type\":\"BasicTicker\"}},\"id\":\"f5ae7178-74cc-4823-8f99-675c30efb257\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"207c2160-6cfd-48fd-9671-3db664d4fcb3\",\"type\":\"HelpTool\"},{\"attributes\":{\"data_source\":{\"id\":\"a9bc70c9-36ec-4a1a-9f1d-6739ecf903f9\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"4ed92857-4501-4b8b-8ff0-61b0d3cbe0a8\",\"type\":\"Line\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"0c7b57ed-a8b5-4687-8e80-e8e17ffa07db\",\"type\":\"Line\"},\"selection_glyph\":null,\"view\":{\"id\":\"833c3fbd-a6d0-4bc9-a28e-4582f467c726\",\"type\":\"CDSView\"}},\"id\":\"159ff55f-35cc-4758-8f1e-06133385ce34\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"9df13291-61f6-4c9b-9d1f-cadc5b3560bf\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"04024aea-b26c-403f-9d3d-34fa90b8bb69\",\"type\":\"PanTool\"},{\"attributes\":{\"callback\":null,\"data\":{\"x\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"shape\":[500]},\"y\":{\"__ndarray__\":\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==\",\"dtype\":\"float64\",\"shape\":[500]}},\"selected\":{\"id\":\"7452eac4-500b-4ac6-9062-5f006cc2dd74\",\"type\":\"Selection\"},\"selection_policy\":{\"id\":\"ed4a83ce-121d-4fe9-adee-e806a7c4a856\",\"type\":\"UnionRenderers\"}},\"id\":\"a9bc70c9-36ec-4a1a-9f1d-6739ecf903f9\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"ed4a83ce-121d-4fe9-adee-e806a7c4a856\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"24db4acf-fdc6-4ad8-9b80-82c208afc987\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"plot\":null,\"text\":\"\"},\"id\":\"7f5d9c66-3676-4501-9584-bde7eff5a60e\",\"type\":\"Title\"}],\"root_ids\":[\"257089e6-d6bc-4848-9aca-e1c5924764bd\"]},\"title\":\"Bokeh Application\",\"version\":\"0.12.16\"}};\n", " var render_items = [{\"docid\":\"29d0f7f7-7e09-4409-8a7e-751948659cd1\",\"elementid\":\"6667d45b-056d-457b-84f3-3101958bd22f\",\"modelid\":\"257089e6-d6bc-4848-9aca-e1c5924764bd\",\"notebook_comms_target\":\"7bf61d90-abc6-4b44-a3fa-56ea06766ab7\"}];\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": "257089e6-d6bc-4848-9aca-e1c5924764bd" } }, "output_type": "display_data" }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "68d2018067f146069a010a701fa9c90a", "version_major": 2, "version_minor": 0 }, "text/plain": [ "interactive(children=(FloatSlider(value=0.0, description='time', max=10.0), Output()), _dom_classes=('widget-i…" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Make a movie and plot\n", "# Didn't need x to compute, need it to plot (remember: it's dimensionless)\n", "x = np.linspace(0.0, L, len(c_0_tuple[0]))\n", "y_range = [-0.02*c.max(), 1.02*c.max()]\n", "\n", "p = bokeh.plotting.figure(width=600, height=300, x_axis_label='x', y_axis_label='conc',\n", " y_range=y_range)\n", "c_line = p.line(x, c[0,:], color='dodgerblue', line_width=2)\n", "\n", "def update(time=0.0):\n", " i = np.searchsorted(t, time)\n", " c_line.data_source.data['y'] = c[i,:]\n", " bokeh.io.push_notebook()\n", "\n", "bokeh.io.show(p, notebook_handle=True)\n", "\n", "ipywidgets.interactive(update, \n", " time=ipywidgets.FloatSlider(min=t[0], max=t[-1], value=t[0]))" ] }, { "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": 8, "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 = rd_solve(\n", " c_0_tuple, t, L=L_1, derivs_0=(-eta, 0), derivs_L=0, \n", " diff_coeff_fun=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 = rd_solve(\n", " c_0_tuple, t, L=L_2, derivs_0=(-eta, 0), derivs_L=0, \n", " diff_coeff_fun=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": 9, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "
\n", "
\n", "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "(function(root) {\n", " function embed_document(root) {\n", " \n", " var docs_json = {\"3e660a24-4462-4585-929e-5e959bc06d60\":{\"roots\":{\"references\":[{\"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},\"plot\":null,\"render_mode\":\"css\",\"right_units\":\"screen\",\"top_units\":\"screen\"},\"id\":\"6e9bd675-ea74-4e39-b169-8f896873456f\",\"type\":\"BoxAnnotation\"},{\"attributes\":{},\"id\":\"167f154b-73e4-4c41-b294-6933b2267292\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"87c5af69-094a-48d0-89eb-3070a6121744\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"4d478b8f-7a23-4e51-8e8d-47c5e19b2eed\",\"type\":\"HelpTool\"},{\"attributes\":{},\"id\":\"6daa9be6-02e3-45c3-b8d3-f1031eaca56c\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"ticker\":null},\"id\":\"6f29b316-9892-45a2-a431-6727b2658fc0\",\"type\":\"LogTickFormatter\"},{\"attributes\":{\"items\":[{\"id\":\"4622a444-fd93-4f9c-9613-a785847d3986\",\"type\":\"LegendItem\"},{\"id\":\"01fce018-cd3c-435c-b4c0-9782cc307cae\",\"type\":\"LegendItem\"}],\"plot\":{\"id\":\"2e161f57-63f6-4c85-bdae-83c2d7815e47\",\"subtype\":\"Figure\",\"type\":\"Plot\"}},\"id\":\"511c6531-0ea0-4cfc-8b9c-1fa4c1ce6b5a\",\"type\":\"Legend\"},{\"attributes\":{},\"id\":\"74b4513f-b83f-48a8-be09-5237eb539e7f\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"children\":[{\"id\":\"2e161f57-63f6-4c85-bdae-83c2d7815e47\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"id\":\"9bbce0ec-fdf5-4290-a3c0-433dcdda32ea\",\"subtype\":\"Figure\",\"type\":\"Plot\"}]},\"id\":\"63e2b868-64a6-46eb-9078-6e8b2705cc7d\",\"type\":\"Row\"},{\"attributes\":{\"label\":{\"value\":\"L=100\"},\"renderers\":[{\"id\":\"a454c092-91df-42a7-8f7b-eb79491a7852\",\"type\":\"GlyphRenderer\"}]},\"id\":\"4622a444-fd93-4f9c-9613-a785847d3986\",\"type\":\"LegendItem\"},{\"attributes\":{\"data_source\":{\"id\":\"4110369c-1d6f-4b89-9d47-e0f133ef4130\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"47f4fde1-a2cd-4eb3-afbb-0aeac92032b6\",\"type\":\"Line\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"3a3b6ccc-c195-44b4-bbe3-0f059963911f\",\"type\":\"Line\"},\"selection_glyph\":null,\"view\":{\"id\":\"0740ddcb-78b7-43db-a95c-d1fa9f5108e3\",\"type\":\"CDSView\"}},\"id\":\"b46cc1a5-0ea9-4a5a-a730-dfee8a44cfb9\",\"type\":\"GlyphRenderer\"},{\"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\":\"9d47e64a-b09b-4b9a-8629-b9048c33cfbd\",\"type\":\"Selection\"},\"selection_policy\":{\"id\":\"d67a642b-f138-4747-b5fb-fa314e3a5870\",\"type\":\"UnionRenderers\"}},\"id\":\"99dc4c16-b8c7-46c8-b9c2-e887138f4d8b\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"3a3b6ccc-c195-44b4-bbe3-0f059963911f\",\"type\":\"Line\"},{\"attributes\":{\"line_color\":\"tomato\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"47f4fde1-a2cd-4eb3-afbb-0aeac92032b6\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"4110369c-1d6f-4b89-9d47-e0f133ef4130\",\"type\":\"ColumnDataSource\"}},\"id\":\"0740ddcb-78b7-43db-a95c-d1fa9f5108e3\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"9807cc3a-032b-4a65-b047-4ae94cd3c953\",\"type\":\"Selection\"},{\"attributes\":{\"plot\":{\"id\":\"2e161f57-63f6-4c85-bdae-83c2d7815e47\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"13533b9b-150b-4a90-a2a3-16718c36d6f8\",\"type\":\"BasicTicker\"}},\"id\":\"3a1081da-8d01-4473-94c0-c24b463f20a5\",\"type\":\"Grid\"},{\"attributes\":{\"data_source\":{\"id\":\"99dc4c16-b8c7-46c8-b9c2-e887138f4d8b\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"a0d61448-c904-41c1-8a23-8e9dd31a30a7\",\"type\":\"Line\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"98c23e8f-5347-4f42-98c6-9435dcf8de96\",\"type\":\"Line\"},\"selection_glyph\":null,\"view\":{\"id\":\"721a5cbe-c0c8-4773-97fc-77540d5ca8d8\",\"type\":\"CDSView\"}},\"id\":\"0799f9bc-3a28-4336-ad03-e28304495f32\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"label\":{\"value\":\"L=200\"},\"renderers\":[{\"id\":\"b46cc1a5-0ea9-4a5a-a730-dfee8a44cfb9\",\"type\":\"GlyphRenderer\"}]},\"id\":\"01fce018-cd3c-435c-b4c0-9782cc307cae\",\"type\":\"LegendItem\"},{\"attributes\":{\"formatter\":{\"id\":\"6f29b316-9892-45a2-a431-6727b2658fc0\",\"type\":\"LogTickFormatter\"},\"plot\":{\"id\":\"2e161f57-63f6-4c85-bdae-83c2d7815e47\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"ed666ad4-4e2d-4b3e-ac46-c464ef8980c2\",\"type\":\"LogTicker\"}},\"id\":\"f5c992df-dd06-4dc1-a6d2-e0e86c5fa4b2\",\"type\":\"LogAxis\"},{\"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\":\"60968067-d672-4f47-a846-261c3007de0a\",\"type\":\"Selection\"},\"selection_policy\":{\"id\":\"e4235380-3757-4e44-aa88-f73b18370273\",\"type\":\"UnionRenderers\"}},\"id\":\"40778f70-d6e1-4ada-b7e9-a6cbf8431d6a\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"source\":{\"id\":\"99dc4c16-b8c7-46c8-b9c2-e887138f4d8b\",\"type\":\"ColumnDataSource\"}},\"id\":\"721a5cbe-c0c8-4773-97fc-77540d5ca8d8\",\"type\":\"CDSView\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"98c23e8f-5347-4f42-98c6-9435dcf8de96\",\"type\":\"Line\"},{\"attributes\":{\"line_color\":\"dodgerblue\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"a0d61448-c904-41c1-8a23-8e9dd31a30a7\",\"type\":\"Line\"},{\"attributes\":{\"data_source\":{\"id\":\"40778f70-d6e1-4ada-b7e9-a6cbf8431d6a\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"ea9cb65a-ed5a-437a-824b-120140f877f6\",\"type\":\"Line\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"035d8d69-cafb-4c43-878c-14eede3d392b\",\"type\":\"Line\"},\"selection_glyph\":null,\"view\":{\"id\":\"143a6bf8-ac28-4988-996b-2c1d9140231d\",\"type\":\"CDSView\"}},\"id\":\"eead3304-4e85-43f3-bdaa-5ae491ed8dd5\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"num_minor_ticks\":10},\"id\":\"ed666ad4-4e2d-4b3e-ac46-c464ef8980c2\",\"type\":\"LogTicker\"},{\"attributes\":{\"children\":[{\"id\":\"63e2b868-64a6-46eb-9078-6e8b2705cc7d\",\"type\":\"Row\"}]},\"id\":\"4e30c060-2da4-4556-acd6-7c047528ed12\",\"type\":\"Column\"},{\"attributes\":{\"axis_label\":\"x/L\",\"formatter\":{\"id\":\"6daa9be6-02e3-45c3-b8d3-f1031eaca56c\",\"type\":\"BasicTickFormatter\"},\"plot\":{\"id\":\"2e161f57-63f6-4c85-bdae-83c2d7815e47\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"13533b9b-150b-4a90-a2a3-16718c36d6f8\",\"type\":\"BasicTicker\"}},\"id\":\"4a6b50ca-df11-40a1-86cb-64d5a026ea5f\",\"type\":\"LinearAxis\"},{\"attributes\":{\"source\":{\"id\":\"40778f70-d6e1-4ada-b7e9-a6cbf8431d6a\",\"type\":\"ColumnDataSource\"}},\"id\":\"143a6bf8-ac28-4988-996b-2c1d9140231d\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"13fbb61d-01e4-43b0-99d2-4b96a0e4f972\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"4dd7500e-59f7-47c5-8127-a4e8d9983992\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"9d47e64a-b09b-4b9a-8629-b9048c33cfbd\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"d67a642b-f138-4747-b5fb-fa314e3a5870\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"plot\":null,\"text\":\"\"},\"id\":\"93a94813-f535-4be9-a578-cbf045a3c98d\",\"type\":\"Title\"},{\"attributes\":{\"ticker\":null},\"id\":\"1fd067bc-628b-4ba2-8216-54cd3e49459a\",\"type\":\"LogTickFormatter\"},{\"attributes\":{\"children\":[{\"id\":\"0cf09c63-d81a-4ca0-964e-7bab2069e6fa\",\"type\":\"ToolbarBox\"},{\"id\":\"4e30c060-2da4-4556-acd6-7c047528ed12\",\"type\":\"Column\"}]},\"id\":\"f6c7d0fd-14e9-4256-93e0-525789054f81\",\"type\":\"Column\"},{\"attributes\":{\"active_drag\":\"auto\",\"active_inspect\":\"auto\",\"active_scroll\":\"auto\",\"active_tap\":\"auto\",\"tools\":[{\"id\":\"eab5870f-bf54-47c5-9521-05dc79cc79a7\",\"type\":\"PanTool\"},{\"id\":\"f5ca49d2-e321-4d50-9338-cb3184c7fd94\",\"type\":\"WheelZoomTool\"},{\"id\":\"a551c2d0-90cd-4506-9c8c-faaeab05cb78\",\"type\":\"BoxZoomTool\"},{\"id\":\"71a039b1-2457-4515-9710-fb85ef93f1a3\",\"type\":\"SaveTool\"},{\"id\":\"e92ff3f9-d8dc-445d-a914-78c0cd875816\",\"type\":\"ResetTool\"},{\"id\":\"c2806f77-9daa-4922-aef5-85591c7ad510\",\"type\":\"HelpTool\"}]},\"id\":\"9af46e08-435a-49d7-ae3f-ff22cceae85d\",\"type\":\"Toolbar\"},{\"attributes\":{},\"id\":\"5b6d8d01-4724-4bde-895e-8b8b096561f7\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"line_color\":\"dodgerblue\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"757dfa48-2012-4f8e-81e9-2a81251b28cc\",\"type\":\"Line\"},{\"attributes\":{\"below\":[{\"id\":\"4cd3ac0a-8646-4ca3-9cae-c47cfe64cd31\",\"type\":\"LinearAxis\"}],\"left\":[{\"id\":\"797e252f-1314-47a0-b7e8-9e0144dd526d\",\"type\":\"LogAxis\"}],\"plot_height\":250,\"plot_width\":350,\"renderers\":[{\"id\":\"4cd3ac0a-8646-4ca3-9cae-c47cfe64cd31\",\"type\":\"LinearAxis\"},{\"id\":\"dc641e48-cf43-4070-b878-030c42ddda5c\",\"type\":\"Grid\"},{\"id\":\"797e252f-1314-47a0-b7e8-9e0144dd526d\",\"type\":\"LogAxis\"},{\"id\":\"ffa2a23d-9db3-4d89-bc5a-f46b615a6139\",\"type\":\"Grid\"},{\"id\":\"6e9bd675-ea74-4e39-b169-8f896873456f\",\"type\":\"BoxAnnotation\"},{\"id\":\"0799f9bc-3a28-4336-ad03-e28304495f32\",\"type\":\"GlyphRenderer\"},{\"id\":\"eead3304-4e85-43f3-bdaa-5ae491ed8dd5\",\"type\":\"GlyphRenderer\"}],\"title\":{\"id\":\"93a94813-f535-4be9-a578-cbf045a3c98d\",\"type\":\"Title\"},\"toolbar\":{\"id\":\"4399310c-f6f1-4144-bb5d-0187f854943e\",\"type\":\"Toolbar\"},\"toolbar_location\":null,\"x_range\":{\"id\":\"4b062d1d-c48d-4da2-a5e3-a0c442370c5d\",\"type\":\"DataRange1d\"},\"x_scale\":{\"id\":\"bf2fb642-bc6c-4809-b21b-be1062c1cb9f\",\"type\":\"LinearScale\"},\"y_range\":{\"id\":\"a49ca90a-4fdb-4b38-be3b-dd68a07e3381\",\"type\":\"DataRange1d\"},\"y_scale\":{\"id\":\"33b646e5-b78c-47f0-8142-d14a87b9b3ff\",\"type\":\"LogScale\"}},\"id\":\"9bbce0ec-fdf5-4290-a3c0-433dcdda32ea\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"overlay\":{\"id\":\"6e9bd675-ea74-4e39-b169-8f896873456f\",\"type\":\"BoxAnnotation\"}},\"id\":\"4f118d37-e2c8-4a3d-ac33-27c0d7ae6704\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"e4235380-3757-4e44-aa88-f73b18370273\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"below\":[{\"id\":\"4a6b50ca-df11-40a1-86cb-64d5a026ea5f\",\"type\":\"LinearAxis\"}],\"left\":[{\"id\":\"f5c992df-dd06-4dc1-a6d2-e0e86c5fa4b2\",\"type\":\"LogAxis\"}],\"plot_height\":250,\"plot_width\":350,\"renderers\":[{\"id\":\"4a6b50ca-df11-40a1-86cb-64d5a026ea5f\",\"type\":\"LinearAxis\"},{\"id\":\"3a1081da-8d01-4473-94c0-c24b463f20a5\",\"type\":\"Grid\"},{\"id\":\"f5c992df-dd06-4dc1-a6d2-e0e86c5fa4b2\",\"type\":\"LogAxis\"},{\"id\":\"8d5abb89-ec7f-4762-a322-1fd2efa86ec4\",\"type\":\"Grid\"},{\"id\":\"2b0a9f22-a066-419f-b2fc-51262cd292fd\",\"type\":\"BoxAnnotation\"},{\"id\":\"511c6531-0ea0-4cfc-8b9c-1fa4c1ce6b5a\",\"type\":\"Legend\"},{\"id\":\"a454c092-91df-42a7-8f7b-eb79491a7852\",\"type\":\"GlyphRenderer\"},{\"id\":\"b46cc1a5-0ea9-4a5a-a730-dfee8a44cfb9\",\"type\":\"GlyphRenderer\"}],\"title\":{\"id\":\"0de26ee4-0533-4e6e-a3c0-abff12a2fea5\",\"type\":\"Title\"},\"toolbar\":{\"id\":\"9af46e08-435a-49d7-ae3f-ff22cceae85d\",\"type\":\"Toolbar\"},\"toolbar_location\":null,\"x_range\":{\"id\":\"74261123-0b51-4667-8264-477896fe1f6c\",\"type\":\"DataRange1d\"},\"x_scale\":{\"id\":\"3bf67c81-477a-458c-a14e-54f9a9672fed\",\"type\":\"LinearScale\"},\"y_range\":{\"id\":\"0cdd47f2-cb98-44de-9fb3-aefbdf5ab08c\",\"type\":\"DataRange1d\"},\"y_scale\":{\"id\":\"86844a06-ff2b-4df3-8d14-34948c3ea2aa\",\"type\":\"LogScale\"}},\"id\":\"2e161f57-63f6-4c85-bdae-83c2d7815e47\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"callback\":null},\"id\":\"74261123-0b51-4667-8264-477896fe1f6c\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"60968067-d672-4f47-a846-261c3007de0a\",\"type\":\"Selection\"},{\"attributes\":{\"active_drag\":\"auto\",\"active_inspect\":\"auto\",\"active_scroll\":\"auto\",\"active_tap\":\"auto\",\"tools\":[{\"id\":\"8d0fe56a-8aea-4e86-aea2-b97d7ba11778\",\"type\":\"PanTool\"},{\"id\":\"0bfd22f0-c3a9-4698-a160-aa9874a43809\",\"type\":\"WheelZoomTool\"},{\"id\":\"4f118d37-e2c8-4a3d-ac33-27c0d7ae6704\",\"type\":\"BoxZoomTool\"},{\"id\":\"167f154b-73e4-4c41-b294-6933b2267292\",\"type\":\"SaveTool\"},{\"id\":\"87c5af69-094a-48d0-89eb-3070a6121744\",\"type\":\"ResetTool\"},{\"id\":\"4d478b8f-7a23-4e51-8e8d-47c5e19b2eed\",\"type\":\"HelpTool\"}]},\"id\":\"4399310c-f6f1-4144-bb5d-0187f854943e\",\"type\":\"Toolbar\"},{\"attributes\":{\"tools\":[{\"id\":\"eab5870f-bf54-47c5-9521-05dc79cc79a7\",\"type\":\"PanTool\"},{\"id\":\"f5ca49d2-e321-4d50-9338-cb3184c7fd94\",\"type\":\"WheelZoomTool\"},{\"id\":\"a551c2d0-90cd-4506-9c8c-faaeab05cb78\",\"type\":\"BoxZoomTool\"},{\"id\":\"71a039b1-2457-4515-9710-fb85ef93f1a3\",\"type\":\"SaveTool\"},{\"id\":\"e92ff3f9-d8dc-445d-a914-78c0cd875816\",\"type\":\"ResetTool\"},{\"id\":\"c2806f77-9daa-4922-aef5-85591c7ad510\",\"type\":\"HelpTool\"},{\"id\":\"8d0fe56a-8aea-4e86-aea2-b97d7ba11778\",\"type\":\"PanTool\"},{\"id\":\"0bfd22f0-c3a9-4698-a160-aa9874a43809\",\"type\":\"WheelZoomTool\"},{\"id\":\"4f118d37-e2c8-4a3d-ac33-27c0d7ae6704\",\"type\":\"BoxZoomTool\"},{\"id\":\"167f154b-73e4-4c41-b294-6933b2267292\",\"type\":\"SaveTool\"},{\"id\":\"87c5af69-094a-48d0-89eb-3070a6121744\",\"type\":\"ResetTool\"},{\"id\":\"4d478b8f-7a23-4e51-8e8d-47c5e19b2eed\",\"type\":\"HelpTool\"}]},\"id\":\"b8e2e5a5-ecba-48f8-913b-9cf080ec33e8\",\"type\":\"ProxyToolbar\"},{\"attributes\":{\"line_color\":\"tomato\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"ea9cb65a-ed5a-437a-824b-120140f877f6\",\"type\":\"Line\"},{\"attributes\":{\"toolbar\":{\"id\":\"b8e2e5a5-ecba-48f8-913b-9cf080ec33e8\",\"type\":\"ProxyToolbar\"},\"toolbar_location\":\"above\"},\"id\":\"0cf09c63-d81a-4ca0-964e-7bab2069e6fa\",\"type\":\"ToolbarBox\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"035d8d69-cafb-4c43-878c-14eede3d392b\",\"type\":\"Line\"},{\"attributes\":{\"callback\":null},\"id\":\"0cdd47f2-cb98-44de-9fb3-aefbdf5ab08c\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"3bf67c81-477a-458c-a14e-54f9a9672fed\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"86844a06-ff2b-4df3-8d14-34948c3ea2aa\",\"type\":\"LogScale\"},{\"attributes\":{\"dimension\":1,\"plot\":{\"id\":\"2e161f57-63f6-4c85-bdae-83c2d7815e47\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"ed666ad4-4e2d-4b3e-ac46-c464ef8980c2\",\"type\":\"LogTicker\"}},\"id\":\"8d5abb89-ec7f-4762-a322-1fd2efa86ec4\",\"type\":\"Grid\"},{\"attributes\":{\"data_source\":{\"id\":\"0b1ce7ea-808c-4c7e-8f87-6a89d57f9a46\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"757dfa48-2012-4f8e-81e9-2a81251b28cc\",\"type\":\"Line\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"c58a4671-8280-4d23-9a0c-13a06f50e197\",\"type\":\"Line\"},\"selection_glyph\":null,\"view\":{\"id\":\"a0a55562-3607-4979-b080-e56687ca14c3\",\"type\":\"CDSView\"}},\"id\":\"a454c092-91df-42a7-8f7b-eb79491a7852\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"callback\":null},\"id\":\"4b062d1d-c48d-4da2-a5e3-a0c442370c5d\",\"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__\":\"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\":\"9807cc3a-032b-4a65-b047-4ae94cd3c953\",\"type\":\"Selection\"},\"selection_policy\":{\"id\":\"74b4513f-b83f-48a8-be09-5237eb539e7f\",\"type\":\"UnionRenderers\"}},\"id\":\"0b1ce7ea-808c-4c7e-8f87-6a89d57f9a46\",\"type\":\"ColumnDataSource\"},{\"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},\"plot\":null,\"render_mode\":\"css\",\"right_units\":\"screen\",\"top_units\":\"screen\"},\"id\":\"2b0a9f22-a066-419f-b2fc-51262cd292fd\",\"type\":\"BoxAnnotation\"},{\"attributes\":{},\"id\":\"eab5870f-bf54-47c5-9521-05dc79cc79a7\",\"type\":\"PanTool\"},{\"attributes\":{\"callback\":null},\"id\":\"a49ca90a-4fdb-4b38-be3b-dd68a07e3381\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"f5ca49d2-e321-4d50-9338-cb3184c7fd94\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"overlay\":{\"id\":\"2b0a9f22-a066-419f-b2fc-51262cd292fd\",\"type\":\"BoxAnnotation\"}},\"id\":\"a551c2d0-90cd-4506-9c8c-faaeab05cb78\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"71a039b1-2457-4515-9710-fb85ef93f1a3\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"e92ff3f9-d8dc-445d-a914-78c0cd875816\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"c2806f77-9daa-4922-aef5-85591c7ad510\",\"type\":\"HelpTool\"},{\"attributes\":{\"plot\":{\"id\":\"9bbce0ec-fdf5-4290-a3c0-433dcdda32ea\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"5d1308db-c59a-4ffe-99ac-b0983ca5a01f\",\"type\":\"BasicTicker\"}},\"id\":\"dc641e48-cf43-4070-b878-030c42ddda5c\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"bf2fb642-bc6c-4809-b21b-be1062c1cb9f\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"33b646e5-b78c-47f0-8142-d14a87b9b3ff\",\"type\":\"LogScale\"},{\"attributes\":{\"axis_label\":\"x\",\"formatter\":{\"id\":\"5b6d8d01-4724-4bde-895e-8b8b096561f7\",\"type\":\"BasicTickFormatter\"},\"plot\":{\"id\":\"9bbce0ec-fdf5-4290-a3c0-433dcdda32ea\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"5d1308db-c59a-4ffe-99ac-b0983ca5a01f\",\"type\":\"BasicTicker\"}},\"id\":\"4cd3ac0a-8646-4ca3-9cae-c47cfe64cd31\",\"type\":\"LinearAxis\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"c58a4671-8280-4d23-9a0c-13a06f50e197\",\"type\":\"Line\"},{\"attributes\":{\"formatter\":{\"id\":\"1fd067bc-628b-4ba2-8216-54cd3e49459a\",\"type\":\"LogTickFormatter\"},\"plot\":{\"id\":\"9bbce0ec-fdf5-4290-a3c0-433dcdda32ea\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"37c1b61d-cd39-46df-a82f-fb7e4ddfb7cb\",\"type\":\"LogTicker\"}},\"id\":\"797e252f-1314-47a0-b7e8-9e0144dd526d\",\"type\":\"LogAxis\"},{\"attributes\":{},\"id\":\"5d1308db-c59a-4ffe-99ac-b0983ca5a01f\",\"type\":\"BasicTicker\"},{\"attributes\":{\"dimension\":1,\"plot\":{\"id\":\"9bbce0ec-fdf5-4290-a3c0-433dcdda32ea\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"37c1b61d-cd39-46df-a82f-fb7e4ddfb7cb\",\"type\":\"LogTicker\"}},\"id\":\"ffa2a23d-9db3-4d89-bc5a-f46b615a6139\",\"type\":\"Grid\"},{\"attributes\":{\"num_minor_ticks\":10},\"id\":\"37c1b61d-cd39-46df-a82f-fb7e4ddfb7cb\",\"type\":\"LogTicker\"},{\"attributes\":{\"plot\":null,\"text\":\"\"},\"id\":\"0de26ee4-0533-4e6e-a3c0-abff12a2fea5\",\"type\":\"Title\"},{\"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\":\"13fbb61d-01e4-43b0-99d2-4b96a0e4f972\",\"type\":\"Selection\"},\"selection_policy\":{\"id\":\"4dd7500e-59f7-47c5-8127-a4e8d9983992\",\"type\":\"UnionRenderers\"}},\"id\":\"4110369c-1d6f-4b89-9d47-e0f133ef4130\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"source\":{\"id\":\"0b1ce7ea-808c-4c7e-8f87-6a89d57f9a46\",\"type\":\"ColumnDataSource\"}},\"id\":\"a0a55562-3607-4979-b080-e56687ca14c3\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"8d0fe56a-8aea-4e86-aea2-b97d7ba11778\",\"type\":\"PanTool\"},{\"attributes\":{},\"id\":\"13533b9b-150b-4a90-a2a3-16718c36d6f8\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"0bfd22f0-c3a9-4698-a160-aa9874a43809\",\"type\":\"WheelZoomTool\"}],\"root_ids\":[\"f6c7d0fd-14e9-4256-93e0-525789054f81\"]},\"title\":\"Bokeh Application\",\"version\":\"0.12.16\"}};\n", " var render_items = [{\"docid\":\"3e660a24-4462-4585-929e-5e959bc06d60\",\"elementid\":\"753c1392-3ba3-48a5-8038-91a53843f1c9\",\"modelid\":\"f6c7d0fd-14e9-4256-93e0-525789054f81\"}];\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": "f6c7d0fd-14e9-4256-93e0-525789054f81" } }, "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,:], color='dodgerblue', legend='L=100', line_width=2)\n", "p1.line(x_2/L_2, c_tuple_L_2[0][-1,:], color='tomato', legend='L=200', line_width=2)\n", "p2.line(x_1, c_tuple_L_1[0][-1,:], color='dodgerblue', line_width=2)\n", "p2.line(x_2, c_tuple_L_2[0][-1,:], color='tomato', line_width=2)\n", "bokeh.io.show(bokeh.layouts.gridplot([[p1, p2]]));" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's make a movie." ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "
\n", "
\n", "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "(function(root) {\n", " function embed_document(root) {\n", " \n", " var docs_json = {\"dab4d3c3-cbd8-4a65-9812-798a76aab4ec\":{\"roots\":{\"references\":[{\"attributes\":{},\"id\":\"beb999de-acba-4607-addd-3726a6d3693e\",\"type\":\"Selection\"},{\"attributes\":{\"items\":[{\"id\":\"d25a2cb0-4df2-43e1-b5c6-add0a0a4b54c\",\"type\":\"LegendItem\"},{\"id\":\"68e5f074-4bac-4002-9008-e5baf4a39d9e\",\"type\":\"LegendItem\"}],\"plot\":{\"id\":\"6c6e4d7d-8364-49e3-8f98-8c0278a2d11c\",\"subtype\":\"Figure\",\"type\":\"Plot\"}},\"id\":\"2ca31caa-93f8-41ee-8559-065cc6f6aa03\",\"type\":\"Legend\"},{\"attributes\":{\"line_color\":\"tomato\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"b47d3b94-eb4d-44c8-9993-dd992ed4897d\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"b02814e1-0563-4813-a469-56478fac6661\",\"type\":\"ColumnDataSource\"}},\"id\":\"8650f59d-4283-45e0-a9af-f3cfb0f8a5ef\",\"type\":\"CDSView\"},{\"attributes\":{\"data_source\":{\"id\":\"b02814e1-0563-4813-a469-56478fac6661\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"b47d3b94-eb4d-44c8-9993-dd992ed4897d\",\"type\":\"Line\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"845cabaf-165e-4668-8a2b-eceef6294610\",\"type\":\"Line\"},\"selection_glyph\":null,\"view\":{\"id\":\"8650f59d-4283-45e0-a9af-f3cfb0f8a5ef\",\"type\":\"CDSView\"}},\"id\":\"1bfb14fc-d0db-4384-a219-3225efa49bac\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"label\":{\"value\":\"morphogen\"},\"renderers\":[{\"id\":\"00c435aa-0091-4864-a2b4-0c9e6be3a102\",\"type\":\"GlyphRenderer\"}]},\"id\":\"d25a2cb0-4df2-43e1-b5c6-add0a0a4b54c\",\"type\":\"LegendItem\"},{\"attributes\":{\"label\":{\"value\":\"expander\"},\"renderers\":[{\"id\":\"1bfb14fc-d0db-4384-a219-3225efa49bac\",\"type\":\"GlyphRenderer\"}]},\"id\":\"68e5f074-4bac-4002-9008-e5baf4a39d9e\",\"type\":\"LegendItem\"},{\"attributes\":{\"callback\":null},\"id\":\"6cfeedb7-e831-444f-983d-b8a2b40315c5\",\"type\":\"DataRange1d\"},{\"attributes\":{\"line_color\":\"dodgerblue\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"0061d3c7-4b20-40b3-9829-cfe3cc9bdc11\",\"type\":\"Line\"},{\"attributes\":{\"data_source\":{\"id\":\"a3de2745-baf0-488a-be1d-e96af563ce07\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"0061d3c7-4b20-40b3-9829-cfe3cc9bdc11\",\"type\":\"Line\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"77d39a2f-8c98-4872-b602-c90528be47d3\",\"type\":\"Line\"},\"selection_glyph\":null,\"view\":{\"id\":\"0101079d-e0c6-458a-ba02-96b4863b00e5\",\"type\":\"CDSView\"}},\"id\":\"00c435aa-0091-4864-a2b4-0c9e6be3a102\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"e89a0458-bce1-48dc-9a77-74c404e346d9\",\"type\":\"UnionRenderers\"},{\"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__\":\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=\",\"dtype\":\"float64\",\"shape\":[100]}},\"selected\":{\"id\":\"beb999de-acba-4607-addd-3726a6d3693e\",\"type\":\"Selection\"},\"selection_policy\":{\"id\":\"c574d877-d23f-413e-b959-08e83c1098b4\",\"type\":\"UnionRenderers\"}},\"id\":\"a3de2745-baf0-488a-be1d-e96af563ce07\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"3007d6ee-8dc0-4c0d-b8fb-cab923131847\",\"type\":\"Selection\"},{\"attributes\":{\"active_drag\":\"auto\",\"active_inspect\":\"auto\",\"active_scroll\":\"auto\",\"active_tap\":\"auto\",\"tools\":[{\"id\":\"e4f7fed9-3e57-49d8-b425-40c7a301f65b\",\"type\":\"PanTool\"},{\"id\":\"91ce6b58-d28d-4279-8b18-910df276ddf4\",\"type\":\"WheelZoomTool\"},{\"id\":\"7ac40acb-50f0-42bf-97cb-e5ced850fae3\",\"type\":\"BoxZoomTool\"},{\"id\":\"c5ef6712-c8a5-476f-ae78-1e65aeaa11e1\",\"type\":\"SaveTool\"},{\"id\":\"2b682306-29dd-40e4-ac49-f7f7f5d2bc5d\",\"type\":\"ResetTool\"},{\"id\":\"0e8e394d-a61d-49ad-bd0d-ffd56d8cd755\",\"type\":\"HelpTool\"}]},\"id\":\"49bebdbe-36e9-49e3-98ac-c132adce3cae\",\"type\":\"Toolbar\"},{\"attributes\":{\"callback\":null,\"end\":1.02,\"start\":-0.02},\"id\":\"fce70b7b-81e0-44da-bdc5-fd7afceae919\",\"type\":\"Range1d\"},{\"attributes\":{},\"id\":\"fbd7f3c6-ad40-4655-a510-1090179c67b8\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"09e01b15-6b76-42be-b99e-c4a2cc1b5696\",\"type\":\"LinearScale\"},{\"attributes\":{\"plot\":{\"id\":\"6c6e4d7d-8364-49e3-8f98-8c0278a2d11c\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"e098b37f-dc2e-4f00-9a77-8ac330cb2cfb\",\"type\":\"BasicTicker\"}},\"id\":\"e561fc88-0be6-44ba-a699-d9a4ba71ac72\",\"type\":\"Grid\"},{\"attributes\":{\"axis_label\":\"x\",\"formatter\":{\"id\":\"91f9d824-0576-4c0a-903f-babed0d9b204\",\"type\":\"BasicTickFormatter\"},\"plot\":{\"id\":\"6c6e4d7d-8364-49e3-8f98-8c0278a2d11c\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"e098b37f-dc2e-4f00-9a77-8ac330cb2cfb\",\"type\":\"BasicTicker\"}},\"id\":\"632fb3b5-78f6-469b-a107-3acf3f05cea4\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"e098b37f-dc2e-4f00-9a77-8ac330cb2cfb\",\"type\":\"BasicTicker\"},{\"attributes\":{\"axis_label\":\"conc\",\"formatter\":{\"id\":\"6191106f-794e-4720-b676-0f5554e8018a\",\"type\":\"BasicTickFormatter\"},\"plot\":{\"id\":\"6c6e4d7d-8364-49e3-8f98-8c0278a2d11c\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"147e4dfc-88f6-4721-a034-1667188c317d\",\"type\":\"BasicTicker\"}},\"id\":\"dcfd4c4a-4074-446c-bd26-7fdd0a66f489\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"147e4dfc-88f6-4721-a034-1667188c317d\",\"type\":\"BasicTicker\"},{\"attributes\":{\"dimension\":1,\"plot\":{\"id\":\"6c6e4d7d-8364-49e3-8f98-8c0278a2d11c\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"147e4dfc-88f6-4721-a034-1667188c317d\",\"type\":\"BasicTicker\"}},\"id\":\"3c22dea5-7555-49e7-81a4-f62d73a36bb2\",\"type\":\"Grid\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"77d39a2f-8c98-4872-b602-c90528be47d3\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"c574d877-d23f-413e-b959-08e83c1098b4\",\"type\":\"UnionRenderers\"},{\"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__\":\"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=\",\"dtype\":\"float64\",\"shape\":[100]}},\"selected\":{\"id\":\"3007d6ee-8dc0-4c0d-b8fb-cab923131847\",\"type\":\"Selection\"},\"selection_policy\":{\"id\":\"e89a0458-bce1-48dc-9a77-74c404e346d9\",\"type\":\"UnionRenderers\"}},\"id\":\"b02814e1-0563-4813-a469-56478fac6661\",\"type\":\"ColumnDataSource\"},{\"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},\"plot\":null,\"render_mode\":\"css\",\"right_units\":\"screen\",\"top_units\":\"screen\"},\"id\":\"6499ee61-cc28-4f86-9243-f9b6a2155c16\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"below\":[{\"id\":\"632fb3b5-78f6-469b-a107-3acf3f05cea4\",\"type\":\"LinearAxis\"}],\"left\":[{\"id\":\"dcfd4c4a-4074-446c-bd26-7fdd0a66f489\",\"type\":\"LinearAxis\"}],\"plot_height\":300,\"renderers\":[{\"id\":\"632fb3b5-78f6-469b-a107-3acf3f05cea4\",\"type\":\"LinearAxis\"},{\"id\":\"e561fc88-0be6-44ba-a699-d9a4ba71ac72\",\"type\":\"Grid\"},{\"id\":\"dcfd4c4a-4074-446c-bd26-7fdd0a66f489\",\"type\":\"LinearAxis\"},{\"id\":\"3c22dea5-7555-49e7-81a4-f62d73a36bb2\",\"type\":\"Grid\"},{\"id\":\"6499ee61-cc28-4f86-9243-f9b6a2155c16\",\"type\":\"BoxAnnotation\"},{\"id\":\"2ca31caa-93f8-41ee-8559-065cc6f6aa03\",\"type\":\"Legend\"},{\"id\":\"00c435aa-0091-4864-a2b4-0c9e6be3a102\",\"type\":\"GlyphRenderer\"},{\"id\":\"1bfb14fc-d0db-4384-a219-3225efa49bac\",\"type\":\"GlyphRenderer\"}],\"title\":{\"id\":\"e48ea5a5-fbe9-4979-8c6e-ee4ad3b5ef8a\",\"type\":\"Title\"},\"toolbar\":{\"id\":\"49bebdbe-36e9-49e3-98ac-c132adce3cae\",\"type\":\"Toolbar\"},\"x_range\":{\"id\":\"6cfeedb7-e831-444f-983d-b8a2b40315c5\",\"type\":\"DataRange1d\"},\"x_scale\":{\"id\":\"fbd7f3c6-ad40-4655-a510-1090179c67b8\",\"type\":\"LinearScale\"},\"y_range\":{\"id\":\"fce70b7b-81e0-44da-bdc5-fd7afceae919\",\"type\":\"Range1d\"},\"y_scale\":{\"id\":\"09e01b15-6b76-42be-b99e-c4a2cc1b5696\",\"type\":\"LinearScale\"}},\"id\":\"6c6e4d7d-8364-49e3-8f98-8c0278a2d11c\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{},\"id\":\"e4f7fed9-3e57-49d8-b425-40c7a301f65b\",\"type\":\"PanTool\"},{\"attributes\":{\"source\":{\"id\":\"a3de2745-baf0-488a-be1d-e96af563ce07\",\"type\":\"ColumnDataSource\"}},\"id\":\"0101079d-e0c6-458a-ba02-96b4863b00e5\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"91ce6b58-d28d-4279-8b18-910df276ddf4\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"overlay\":{\"id\":\"6499ee61-cc28-4f86-9243-f9b6a2155c16\",\"type\":\"BoxAnnotation\"}},\"id\":\"7ac40acb-50f0-42bf-97cb-e5ced850fae3\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"c5ef6712-c8a5-476f-ae78-1e65aeaa11e1\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"2b682306-29dd-40e4-ac49-f7f7f5d2bc5d\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"0e8e394d-a61d-49ad-bd0d-ffd56d8cd755\",\"type\":\"HelpTool\"},{\"attributes\":{},\"id\":\"91f9d824-0576-4c0a-903f-babed0d9b204\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"6191106f-794e-4720-b676-0f5554e8018a\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"plot\":null,\"text\":\"\"},\"id\":\"e48ea5a5-fbe9-4979-8c6e-ee4ad3b5ef8a\",\"type\":\"Title\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"845cabaf-165e-4668-8a2b-eceef6294610\",\"type\":\"Line\"}],\"root_ids\":[\"6c6e4d7d-8364-49e3-8f98-8c0278a2d11c\"]},\"title\":\"Bokeh Application\",\"version\":\"0.12.16\"}};\n", " var render_items = [{\"docid\":\"dab4d3c3-cbd8-4a65-9812-798a76aab4ec\",\"elementid\":\"0797e865-4606-468d-b103-0cebf3380bbf\",\"modelid\":\"6c6e4d7d-8364-49e3-8f98-8c0278a2d11c\",\"notebook_comms_target\":\"532132d9-d3a7-4005-af4f-a129792de9fe\"}];\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": "6c6e4d7d-8364-49e3-8f98-8c0278a2d11c" } }, "output_type": "display_data" }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "8aa55034b9c14876b584836f3cfa3683", "version_major": 2, "version_minor": 0 }, "text/plain": [ "interactive(children=(FloatSlider(value=0.0, description='time', max=500000.0), Output()), _dom_classes=('widg…" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Didn't need x to compute, need it to plot (remember: it's dimensionless)\n", "x = np.linspace(0.0, L_1, n_gridpoints)\n", "m = c_tuple_L_1[0]\n", "e = c_tuple_L_1[1]\n", "m /= m.max()\n", "e /= e.max()\n", "y_max = max(m.max(), e.max())\n", "y_range = [-0.02, 1.02]\n", "\n", "p = bokeh.plotting.figure(width=600, height=300, x_axis_label='x', y_axis_label='conc',\n", " y_range=y_range)\n", "morph = p.line(x, m[0,:], color='dodgerblue', line_width=2, legend='morphogen')\n", "expan = p.line(x, e[0,:], color='tomato', line_width=2, legend='expander')\n", "\n", "def update(time=0.0):\n", " i = np.searchsorted(t, time)\n", " morph.data_source.data['y'] = m[i,:]\n", " expan.data_source.data['y'] = e[i,:]\n", " bokeh.io.push_notebook()\n", " \n", "bokeh.io.show(p, notebook_handle=True)\n", "\n", "ipywidgets.interactive(update, \n", " time=ipywidgets.FloatSlider(min=t[0], max=t[-1], value=t[0]))" ] }, { "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": 11, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "
\n", "
\n", "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "(function(root) {\n", " function embed_document(root) {\n", " \n", " var docs_json = {\"dba9931f-32eb-42d2-a590-4f760a63804a\":{\"roots\":{\"references\":[{\"attributes\":{},\"id\":\"4c0f2cf6-fa10-448b-8f8b-aef9757ea60d\",\"type\":\"LinearScale\"},{\"attributes\":{\"callback\":null},\"id\":\"f91ac0f7-f69f-42b4-b1cf-980394e64efe\",\"type\":\"DataRange1d\"},{\"attributes\":{\"children\":[{\"id\":\"794b3754-b5fb-4f56-947a-aef3f500b091\",\"type\":\"ToolbarBox\"},{\"id\":\"2f10bd2e-5c02-45a8-a2c1-a524abd63634\",\"type\":\"Column\"}]},\"id\":\"3ec7e754-470c-4b2b-9a10-373fa4ffe3b3\",\"type\":\"Column\"},{\"attributes\":{\"plot\":{\"id\":\"4c7e34fb-f4f0-4a75-9904-ff0e0e878fdf\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"0cc0ea36-00da-4edb-b7c6-e713d6420c2e\",\"type\":\"BasicTicker\"}},\"id\":\"229234c7-e13f-4834-8cb5-1f8572ea8503\",\"type\":\"Grid\"},{\"attributes\":{\"axis_label\":\"x/L\",\"formatter\":{\"id\":\"44eeafa1-4737-4e25-b4a8-a6a1442af057\",\"type\":\"BasicTickFormatter\"},\"plot\":{\"id\":\"4c7e34fb-f4f0-4a75-9904-ff0e0e878fdf\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"0cc0ea36-00da-4edb-b7c6-e713d6420c2e\",\"type\":\"BasicTicker\"}},\"id\":\"7ca7383f-7b5c-494a-b0db-885cc676c296\",\"type\":\"LinearAxis\"},{\"attributes\":{},\"id\":\"0cc0ea36-00da-4edb-b7c6-e713d6420c2e\",\"type\":\"BasicTicker\"},{\"attributes\":{\"formatter\":{\"id\":\"7e95d651-0e03-4802-9d0d-2ee1eddb7b3a\",\"type\":\"LogTickFormatter\"},\"plot\":{\"id\":\"4c7e34fb-f4f0-4a75-9904-ff0e0e878fdf\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"910b7be4-80b4-458a-9e88-c9ac12e27a7d\",\"type\":\"LogTicker\"}},\"id\":\"e7f1e5a4-3b96-4a9e-92fd-cef14a9a7202\",\"type\":\"LogAxis\"},{\"attributes\":{\"num_minor_ticks\":10},\"id\":\"910b7be4-80b4-458a-9e88-c9ac12e27a7d\",\"type\":\"LogTicker\"},{\"attributes\":{\"dimension\":1,\"plot\":{\"id\":\"4c7e34fb-f4f0-4a75-9904-ff0e0e878fdf\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"910b7be4-80b4-458a-9e88-c9ac12e27a7d\",\"type\":\"LogTicker\"}},\"id\":\"28deb65a-d5ac-4500-988a-c359e10f0571\",\"type\":\"Grid\"},{\"attributes\":{\"line_color\":\"dodgerblue\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"17fba237-321f-427e-8980-60f86a46043d\",\"type\":\"Line\"},{\"attributes\":{\"active_drag\":\"auto\",\"active_inspect\":\"auto\",\"active_scroll\":\"auto\",\"active_tap\":\"auto\",\"tools\":[{\"id\":\"d46a874e-0c80-43b2-a1a0-d9a74301a1fd\",\"type\":\"PanTool\"},{\"id\":\"e521f5ca-6a34-415d-93b4-8456ccb53b39\",\"type\":\"WheelZoomTool\"},{\"id\":\"123cfe4e-e623-4b6c-a5c3-5e2160fb74ed\",\"type\":\"BoxZoomTool\"},{\"id\":\"643c6525-c4f6-4df9-9ccb-f03f88bfef5c\",\"type\":\"SaveTool\"},{\"id\":\"627bc3e3-d14d-4371-a2c4-ffa0b725e5a2\",\"type\":\"ResetTool\"},{\"id\":\"046fd683-9ce6-440b-b88e-cb8c23fbc65c\",\"type\":\"HelpTool\"}]},\"id\":\"f8a9d892-1cbe-47c2-94d7-beaa6c5a5fc6\",\"type\":\"Toolbar\"},{\"attributes\":{\"data_source\":{\"id\":\"8af55915-755b-4640-b5d8-0dbd3b449cae\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"17fba237-321f-427e-8980-60f86a46043d\",\"type\":\"Line\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"7eee57f5-07ff-4a4c-ad4d-9b6940c547b7\",\"type\":\"Line\"},\"selection_glyph\":null,\"view\":{\"id\":\"3a71033f-2a7a-4803-b3bf-cffe501dde20\",\"type\":\"CDSView\"}},\"id\":\"2fd4bb79-648f-4927-98bc-76a26edef1cf\",\"type\":\"GlyphRenderer\"},{\"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},\"plot\":null,\"render_mode\":\"css\",\"right_units\":\"screen\",\"top_units\":\"screen\"},\"id\":\"c17a96b6-003b-48dd-acdd-4d21888e1e62\",\"type\":\"BoxAnnotation\"},{\"attributes\":{},\"id\":\"3abcdbe4-0279-4fad-9e98-6ee095d9f32c\",\"type\":\"PanTool\"},{\"attributes\":{\"callback\":null},\"id\":\"09f92037-2d55-4aac-aabe-e66a9c0ef2d4\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"abbca144-7392-4d59-aea3-b711a1e4edf1\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"overlay\":{\"id\":\"c17a96b6-003b-48dd-acdd-4d21888e1e62\",\"type\":\"BoxAnnotation\"}},\"id\":\"b0c66698-9aee-47d0-9179-20f75535ad1c\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"592aec8c-4940-4e04-a0ce-b8bcbc8e7f13\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"0b1c37c4-13ed-4093-9038-bc202757bc7e\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"ae3e7f78-f55c-4458-aa32-f1aeee45d29f\",\"type\":\"HelpTool\"},{\"attributes\":{\"plot\":{\"id\":\"ed7f4379-caf9-47d4-aea9-4bb344d35de1\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"6a9702d6-c1e7-4df4-8269-1b22a24d4a64\",\"type\":\"BasicTicker\"}},\"id\":\"d85961bd-7026-4bcc-b947-b1992b05682e\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"516fc1bf-0144-408c-b2b4-ec431b938f70\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"bec058a1-8079-4b4f-b345-017e78d6bdf6\",\"type\":\"LogScale\"},{\"attributes\":{\"axis_label\":\"x\",\"formatter\":{\"id\":\"ae19d5ed-76c9-44b2-84fd-7c07982b9c98\",\"type\":\"BasicTickFormatter\"},\"plot\":{\"id\":\"ed7f4379-caf9-47d4-aea9-4bb344d35de1\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"6a9702d6-c1e7-4df4-8269-1b22a24d4a64\",\"type\":\"BasicTicker\"}},\"id\":\"2e5d7297-6f7f-4608-b929-2c39b34852e3\",\"type\":\"LinearAxis\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"7eee57f5-07ff-4a4c-ad4d-9b6940c547b7\",\"type\":\"Line\"},{\"attributes\":{\"formatter\":{\"id\":\"7275eacf-6e61-4948-b280-2fd5083d9d83\",\"type\":\"LogTickFormatter\"},\"plot\":{\"id\":\"ed7f4379-caf9-47d4-aea9-4bb344d35de1\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"057f30fe-e02d-44b6-851d-57427330ab79\",\"type\":\"LogTicker\"}},\"id\":\"6bd77774-6480-4dd2-a57b-4abcd48cb4b1\",\"type\":\"LogAxis\"},{\"attributes\":{},\"id\":\"6a9702d6-c1e7-4df4-8269-1b22a24d4a64\",\"type\":\"BasicTicker\"},{\"attributes\":{\"dimension\":1,\"plot\":{\"id\":\"ed7f4379-caf9-47d4-aea9-4bb344d35de1\",\"subtype\":\"Figure\",\"type\":\"Plot\"},\"ticker\":{\"id\":\"057f30fe-e02d-44b6-851d-57427330ab79\",\"type\":\"LogTicker\"}},\"id\":\"40aad071-b06e-42ac-9077-23e988f78c8c\",\"type\":\"Grid\"},{\"attributes\":{\"num_minor_ticks\":10},\"id\":\"057f30fe-e02d-44b6-851d-57427330ab79\",\"type\":\"LogTicker\"},{\"attributes\":{\"items\":[{\"id\":\"0695e273-602e-4ac9-9420-352935c2d99d\",\"type\":\"LegendItem\"},{\"id\":\"635717f2-8e60-4e8d-94f9-5f1dfb12d140\",\"type\":\"LegendItem\"}],\"plot\":{\"id\":\"4c7e34fb-f4f0-4a75-9904-ff0e0e878fdf\",\"subtype\":\"Figure\",\"type\":\"Plot\"}},\"id\":\"db8e5599-bf1a-4222-b8ca-14e7c904f640\",\"type\":\"Legend\"},{\"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\":\"201a6d70-e166-48bf-9f51-6ffc9a61cd50\",\"type\":\"Selection\"},\"selection_policy\":{\"id\":\"e6af5231-a1ab-4dbe-bf18-f44ca5dca48a\",\"type\":\"UnionRenderers\"}},\"id\":\"0d975d8a-7ffb-4fdd-8be6-a3bc68cd9902\",\"type\":\"ColumnDataSource\"},{\"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},\"plot\":null,\"render_mode\":\"css\",\"right_units\":\"screen\",\"top_units\":\"screen\"},\"id\":\"19184c3d-4954-4ccc-b599-bbbdfb5aed77\",\"type\":\"BoxAnnotation\"},{\"attributes\":{},\"id\":\"d46a874e-0c80-43b2-a1a0-d9a74301a1fd\",\"type\":\"PanTool\"},{\"attributes\":{\"source\":{\"id\":\"8af55915-755b-4640-b5d8-0dbd3b449cae\",\"type\":\"ColumnDataSource\"}},\"id\":\"3a71033f-2a7a-4803-b3bf-cffe501dde20\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"e521f5ca-6a34-415d-93b4-8456ccb53b39\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"overlay\":{\"id\":\"19184c3d-4954-4ccc-b599-bbbdfb5aed77\",\"type\":\"BoxAnnotation\"}},\"id\":\"123cfe4e-e623-4b6c-a5c3-5e2160fb74ed\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"643c6525-c4f6-4df9-9ccb-f03f88bfef5c\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"627bc3e3-d14d-4371-a2c4-ffa0b725e5a2\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"046fd683-9ce6-440b-b88e-cb8c23fbc65c\",\"type\":\"HelpTool\"},{\"attributes\":{},\"id\":\"44eeafa1-4737-4e25-b4a8-a6a1442af057\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"ticker\":null},\"id\":\"7e95d651-0e03-4802-9d0d-2ee1eddb7b3a\",\"type\":\"LogTickFormatter\"},{\"attributes\":{\"plot\":null,\"text\":\"\"},\"id\":\"e913e285-96c2-4351-8c43-bcfe119b49c3\",\"type\":\"Title\"},{\"attributes\":{},\"id\":\"8e30078c-8b15-43cf-a441-d45032447b02\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"children\":[{\"id\":\"4c7e34fb-f4f0-4a75-9904-ff0e0e878fdf\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"id\":\"ed7f4379-caf9-47d4-aea9-4bb344d35de1\",\"subtype\":\"Figure\",\"type\":\"Plot\"}]},\"id\":\"d82a460f-b3e6-4104-8862-54e4ab01432b\",\"type\":\"Row\"},{\"attributes\":{\"label\":{\"value\":\"L=100\"},\"renderers\":[{\"id\":\"2fd4bb79-648f-4927-98bc-76a26edef1cf\",\"type\":\"GlyphRenderer\"}]},\"id\":\"0695e273-602e-4ac9-9420-352935c2d99d\",\"type\":\"LegendItem\"},{\"attributes\":{\"data_source\":{\"id\":\"0d975d8a-7ffb-4fdd-8be6-a3bc68cd9902\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"e1400108-d80f-4eb3-ae6e-6d7d987a059e\",\"type\":\"Line\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"a6aa8dfb-a003-48e2-bf65-990d5a17c2af\",\"type\":\"Line\"},\"selection_glyph\":null,\"view\":{\"id\":\"d46f9004-6aa8-449a-910e-5945feff2225\",\"type\":\"CDSView\"}},\"id\":\"d2e7c723-6f1e-44a6-b8b7-1fbc21dd27ef\",\"type\":\"GlyphRenderer\"},{\"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\":\"3e85e79a-eb46-4682-8a83-e1e27da71da3\",\"type\":\"Selection\"},\"selection_policy\":{\"id\":\"6a8fb340-b8b8-413c-8d0a-1d8de2c0affc\",\"type\":\"UnionRenderers\"}},\"id\":\"da643d58-8562-4b58-9d83-ee213bac0875\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"a6aa8dfb-a003-48e2-bf65-990d5a17c2af\",\"type\":\"Line\"},{\"attributes\":{\"line_color\":\"tomato\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"e1400108-d80f-4eb3-ae6e-6d7d987a059e\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"0d975d8a-7ffb-4fdd-8be6-a3bc68cd9902\",\"type\":\"ColumnDataSource\"}},\"id\":\"d46f9004-6aa8-449a-910e-5945feff2225\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"fc855183-ab42-43b7-95ed-cd907529029c\",\"type\":\"Selection\"},{\"attributes\":{\"data_source\":{\"id\":\"da643d58-8562-4b58-9d83-ee213bac0875\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"2d613608-2bb2-4b69-8bbe-0eb3c43799b2\",\"type\":\"Line\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"54d4b29d-6b3a-45ae-8fb0-38731f5f5cd8\",\"type\":\"Line\"},\"selection_glyph\":null,\"view\":{\"id\":\"8c14a6e9-98f9-4eb7-9f52-e4bcfc5d2d53\",\"type\":\"CDSView\"}},\"id\":\"92c73134-4b1c-42eb-8011-ced0603e5baa\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"label\":{\"value\":\"L=200\"},\"renderers\":[{\"id\":\"d2e7c723-6f1e-44a6-b8b7-1fbc21dd27ef\",\"type\":\"GlyphRenderer\"}]},\"id\":\"635717f2-8e60-4e8d-94f9-5f1dfb12d140\",\"type\":\"LegendItem\"},{\"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\":\"f48cbf6a-f2fc-4570-a48c-117244b83c44\",\"type\":\"Selection\"},\"selection_policy\":{\"id\":\"69045960-167a-4e56-a414-ff6a873b5e27\",\"type\":\"UnionRenderers\"}},\"id\":\"067bf125-490d-4100-912a-8a77114e87ae\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"source\":{\"id\":\"da643d58-8562-4b58-9d83-ee213bac0875\",\"type\":\"ColumnDataSource\"}},\"id\":\"8c14a6e9-98f9-4eb7-9f52-e4bcfc5d2d53\",\"type\":\"CDSView\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"54d4b29d-6b3a-45ae-8fb0-38731f5f5cd8\",\"type\":\"Line\"},{\"attributes\":{\"line_color\":\"dodgerblue\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"2d613608-2bb2-4b69-8bbe-0eb3c43799b2\",\"type\":\"Line\"},{\"attributes\":{\"line_color\":\"tomato\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"8589fc8c-3428-44fb-aff1-d3885de07b41\",\"type\":\"Line\"},{\"attributes\":{\"children\":[{\"id\":\"d82a460f-b3e6-4104-8862-54e4ab01432b\",\"type\":\"Row\"}]},\"id\":\"2f10bd2e-5c02-45a8-a2c1-a524abd63634\",\"type\":\"Column\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"01462e08-1bf8-4878-9725-fb93df22c1e5\",\"type\":\"Line\"},{\"attributes\":{\"data_source\":{\"id\":\"067bf125-490d-4100-912a-8a77114e87ae\",\"type\":\"ColumnDataSource\"},\"glyph\":{\"id\":\"8589fc8c-3428-44fb-aff1-d3885de07b41\",\"type\":\"Line\"},\"hover_glyph\":null,\"muted_glyph\":null,\"nonselection_glyph\":{\"id\":\"01462e08-1bf8-4878-9725-fb93df22c1e5\",\"type\":\"Line\"},\"selection_glyph\":null,\"view\":{\"id\":\"95ed4dce-3670-43db-80d2-f37ce1ba74d5\",\"type\":\"CDSView\"}},\"id\":\"168e8bc5-ea50-4c6a-89e7-2ae6617fcfb2\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"source\":{\"id\":\"067bf125-490d-4100-912a-8a77114e87ae\",\"type\":\"ColumnDataSource\"}},\"id\":\"95ed4dce-3670-43db-80d2-f37ce1ba74d5\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"201a6d70-e166-48bf-9f51-6ffc9a61cd50\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"e6af5231-a1ab-4dbe-bf18-f44ca5dca48a\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"3e85e79a-eb46-4682-8a83-e1e27da71da3\",\"type\":\"Selection\"},{\"attributes\":{\"callback\":null},\"id\":\"9bf81231-e1ac-4966-87b4-659972caf7fb\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"6a8fb340-b8b8-413c-8d0a-1d8de2c0affc\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"plot\":null,\"text\":\"\"},\"id\":\"081c6fff-df47-4f2d-b11a-e27e69553bb7\",\"type\":\"Title\"},{\"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\":\"fc855183-ab42-43b7-95ed-cd907529029c\",\"type\":\"Selection\"},\"selection_policy\":{\"id\":\"8e30078c-8b15-43cf-a441-d45032447b02\",\"type\":\"UnionRenderers\"}},\"id\":\"8af55915-755b-4640-b5d8-0dbd3b449cae\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"60df99fe-0712-42f3-a029-bde0d015355c\",\"type\":\"LogScale\"},{\"attributes\":{\"ticker\":null},\"id\":\"7275eacf-6e61-4948-b280-2fd5083d9d83\",\"type\":\"LogTickFormatter\"},{\"attributes\":{\"active_drag\":\"auto\",\"active_inspect\":\"auto\",\"active_scroll\":\"auto\",\"active_tap\":\"auto\",\"tools\":[{\"id\":\"3abcdbe4-0279-4fad-9e98-6ee095d9f32c\",\"type\":\"PanTool\"},{\"id\":\"abbca144-7392-4d59-aea3-b711a1e4edf1\",\"type\":\"WheelZoomTool\"},{\"id\":\"b0c66698-9aee-47d0-9179-20f75535ad1c\",\"type\":\"BoxZoomTool\"},{\"id\":\"592aec8c-4940-4e04-a0ce-b8bcbc8e7f13\",\"type\":\"SaveTool\"},{\"id\":\"0b1c37c4-13ed-4093-9038-bc202757bc7e\",\"type\":\"ResetTool\"},{\"id\":\"ae3e7f78-f55c-4458-aa32-f1aeee45d29f\",\"type\":\"HelpTool\"}]},\"id\":\"5e0c5e30-7617-4116-bcaf-74737ca6ab70\",\"type\":\"Toolbar\"},{\"attributes\":{\"tools\":[{\"id\":\"3abcdbe4-0279-4fad-9e98-6ee095d9f32c\",\"type\":\"PanTool\"},{\"id\":\"abbca144-7392-4d59-aea3-b711a1e4edf1\",\"type\":\"WheelZoomTool\"},{\"id\":\"b0c66698-9aee-47d0-9179-20f75535ad1c\",\"type\":\"BoxZoomTool\"},{\"id\":\"592aec8c-4940-4e04-a0ce-b8bcbc8e7f13\",\"type\":\"SaveTool\"},{\"id\":\"0b1c37c4-13ed-4093-9038-bc202757bc7e\",\"type\":\"ResetTool\"},{\"id\":\"ae3e7f78-f55c-4458-aa32-f1aeee45d29f\",\"type\":\"HelpTool\"},{\"id\":\"d46a874e-0c80-43b2-a1a0-d9a74301a1fd\",\"type\":\"PanTool\"},{\"id\":\"e521f5ca-6a34-415d-93b4-8456ccb53b39\",\"type\":\"WheelZoomTool\"},{\"id\":\"123cfe4e-e623-4b6c-a5c3-5e2160fb74ed\",\"type\":\"BoxZoomTool\"},{\"id\":\"643c6525-c4f6-4df9-9ccb-f03f88bfef5c\",\"type\":\"SaveTool\"},{\"id\":\"627bc3e3-d14d-4371-a2c4-ffa0b725e5a2\",\"type\":\"ResetTool\"},{\"id\":\"046fd683-9ce6-440b-b88e-cb8c23fbc65c\",\"type\":\"HelpTool\"}]},\"id\":\"2f5f22cd-cebe-4ad0-99a6-e844d39eb5e5\",\"type\":\"ProxyToolbar\"},{\"attributes\":{\"below\":[{\"id\":\"2e5d7297-6f7f-4608-b929-2c39b34852e3\",\"type\":\"LinearAxis\"}],\"left\":[{\"id\":\"6bd77774-6480-4dd2-a57b-4abcd48cb4b1\",\"type\":\"LogAxis\"}],\"plot_height\":250,\"plot_width\":350,\"renderers\":[{\"id\":\"2e5d7297-6f7f-4608-b929-2c39b34852e3\",\"type\":\"LinearAxis\"},{\"id\":\"d85961bd-7026-4bcc-b947-b1992b05682e\",\"type\":\"Grid\"},{\"id\":\"6bd77774-6480-4dd2-a57b-4abcd48cb4b1\",\"type\":\"LogAxis\"},{\"id\":\"40aad071-b06e-42ac-9077-23e988f78c8c\",\"type\":\"Grid\"},{\"id\":\"19184c3d-4954-4ccc-b599-bbbdfb5aed77\",\"type\":\"BoxAnnotation\"},{\"id\":\"92c73134-4b1c-42eb-8011-ced0603e5baa\",\"type\":\"GlyphRenderer\"},{\"id\":\"168e8bc5-ea50-4c6a-89e7-2ae6617fcfb2\",\"type\":\"GlyphRenderer\"}],\"title\":{\"id\":\"081c6fff-df47-4f2d-b11a-e27e69553bb7\",\"type\":\"Title\"},\"toolbar\":{\"id\":\"f8a9d892-1cbe-47c2-94d7-beaa6c5a5fc6\",\"type\":\"Toolbar\"},\"toolbar_location\":null,\"x_range\":{\"id\":\"f91ac0f7-f69f-42b4-b1cf-980394e64efe\",\"type\":\"DataRange1d\"},\"x_scale\":{\"id\":\"516fc1bf-0144-408c-b2b4-ec431b938f70\",\"type\":\"LinearScale\"},\"y_range\":{\"id\":\"09f92037-2d55-4aac-aabe-e66a9c0ef2d4\",\"type\":\"DataRange1d\"},\"y_scale\":{\"id\":\"bec058a1-8079-4b4f-b345-017e78d6bdf6\",\"type\":\"LogScale\"}},\"id\":\"ed7f4379-caf9-47d4-aea9-4bb344d35de1\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"below\":[{\"id\":\"7ca7383f-7b5c-494a-b0db-885cc676c296\",\"type\":\"LinearAxis\"}],\"left\":[{\"id\":\"e7f1e5a4-3b96-4a9e-92fd-cef14a9a7202\",\"type\":\"LogAxis\"}],\"plot_height\":250,\"plot_width\":350,\"renderers\":[{\"id\":\"7ca7383f-7b5c-494a-b0db-885cc676c296\",\"type\":\"LinearAxis\"},{\"id\":\"229234c7-e13f-4834-8cb5-1f8572ea8503\",\"type\":\"Grid\"},{\"id\":\"e7f1e5a4-3b96-4a9e-92fd-cef14a9a7202\",\"type\":\"LogAxis\"},{\"id\":\"28deb65a-d5ac-4500-988a-c359e10f0571\",\"type\":\"Grid\"},{\"id\":\"c17a96b6-003b-48dd-acdd-4d21888e1e62\",\"type\":\"BoxAnnotation\"},{\"id\":\"db8e5599-bf1a-4222-b8ca-14e7c904f640\",\"type\":\"Legend\"},{\"id\":\"2fd4bb79-648f-4927-98bc-76a26edef1cf\",\"type\":\"GlyphRenderer\"},{\"id\":\"d2e7c723-6f1e-44a6-b8b7-1fbc21dd27ef\",\"type\":\"GlyphRenderer\"}],\"title\":{\"id\":\"e913e285-96c2-4351-8c43-bcfe119b49c3\",\"type\":\"Title\"},\"toolbar\":{\"id\":\"5e0c5e30-7617-4116-bcaf-74737ca6ab70\",\"type\":\"Toolbar\"},\"toolbar_location\":null,\"x_range\":{\"id\":\"76105b66-5efa-45e1-8837-03b608db87f3\",\"type\":\"DataRange1d\"},\"x_scale\":{\"id\":\"4c0f2cf6-fa10-448b-8f8b-aef9757ea60d\",\"type\":\"LinearScale\"},\"y_range\":{\"id\":\"9bf81231-e1ac-4966-87b4-659972caf7fb\",\"type\":\"DataRange1d\"},\"y_scale\":{\"id\":\"60df99fe-0712-42f3-a029-bde0d015355c\",\"type\":\"LogScale\"}},\"id\":\"4c7e34fb-f4f0-4a75-9904-ff0e0e878fdf\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{},\"id\":\"ae19d5ed-76c9-44b2-84fd-7c07982b9c98\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"toolbar\":{\"id\":\"2f5f22cd-cebe-4ad0-99a6-e844d39eb5e5\",\"type\":\"ProxyToolbar\"},\"toolbar_location\":\"above\"},\"id\":\"794b3754-b5fb-4f56-947a-aef3f500b091\",\"type\":\"ToolbarBox\"},{\"attributes\":{\"callback\":null},\"id\":\"76105b66-5efa-45e1-8837-03b608db87f3\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"69045960-167a-4e56-a414-ff6a873b5e27\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"f48cbf6a-f2fc-4570-a48c-117244b83c44\",\"type\":\"Selection\"}],\"root_ids\":[\"3ec7e754-470c-4b2b-9a10-373fa4ffe3b3\"]},\"title\":\"Bokeh Application\",\"version\":\"0.12.16\"}};\n", " var render_items = [{\"docid\":\"dba9931f-32eb-42d2-a590-4f760a63804a\",\"elementid\":\"f18f5820-3b76-410b-bec2-b9fcd7dc4556\",\"modelid\":\"3ec7e754-470c-4b2b-9a10-373fa4ffe3b3\"}];\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": "3ec7e754-470c-4b2b-9a10-373fa4ffe3b3" } }, "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 = rd_solve(\n", " c_0_tuple, t, L=L_1, derivs_0=(-eta, 0), derivs_L=0, \n", " diff_coeff_fun=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 = rd_solve(\n", " c_0_tuple, t, L=L_2, derivs_0=(-eta, 0), derivs_L=0, \n", " diff_coeff_fun=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,:], color='dodgerblue', legend='L=100', line_width=2)\n", "p1.line(x_2/L_2, c_tuple_L_2[0][-1,:], color='tomato', legend='L=200', line_width=2)\n", "p2.line(x_1, c_tuple_L_1[0][-1,:], color='dodgerblue', line_width=2)\n", "p2.line(x_2, c_tuple_L_2[0][-1,:], color='tomato', line_width=2)\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." ] } ], "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.6.5" } }, "nbformat": 4, "nbformat_minor": 2 }