{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Exercise 4.5: Data collapse\n", "\n", "\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Rob Phillips wrote a review paper that I enjoyed entitled [\"Napoleon is in Equilibrium.\"](https://dx.doi.org/10.1146%2Fannurev-conmatphys-031214-014558). In the paper, he demonstrated that when you plot data in a certain way, they demonstrate **data collapse**. The idea here is that if you choose the right thing to plot on the $x$ and $y$ axes, data from a variety of sources collapse onto a single universal curve. In this exercise, you will hone your Pandas, NumPy, and Bokeh skills in making plots exhibiting data collapse. \n", "\n", "This analysis comes from Rob's paper, and the data come from [Daber, Sochor, and Lewis, *J. Mol. Biol.*, **409**, 76–87, 2011](https://doi.org/10.1016/j.jmb.2011.03.057). The authors were studying how different mutants of the lac repressor affect gene expression. They hooked the lac promoter up to a fluorescent protein reporter. They made a mutant with no lac repressor to get a measurement of the gene expression level (quantified by the fluorescent signal) in the absence of repressor. Then then looked at how the presence of a repressor served to decrease the expression level of the lac gene. The ratio of the repressed fluorescence to the totally unrepressed fluorescence is the **fold change** in repression. They can block repression by adding IPTG, which binds the lac repressor, rendering it ineffective at repressing gene expression (so IPTG is called an \"inducer,\" since it turns on gene expression). So, for a given experiment, the authors measured fold change as a function of IPTG concentration. They measured the fold change for wild type, plus two mutants, Q18M and Q18A.\n", "\n", "We will not derive it here (it comes from a generalization of the [Monod-Wyman-Changeux model](https://en.wikipedia.org/wiki/Monod-Wyman-Changeux_model)), but the theoretical expression for the fold change as a function of IPTG concentration, $c$, is\n", "\n", "\\begin{align}\n", "\\text{fold change} = \\left[1 + \\frac{\\frac{R}{K}\\left(1 + c/K_\\mathrm{d}^\\mathrm{A}\\right)^2}{\\left(1 + c/K_\\mathrm{d}^\\mathrm{A}\\right)^2 + K_\\mathrm{switch}\\left(1 + c/K_\\mathrm{d}^\\mathrm{I}\\right)^2}\\right]^{-1}.\n", "\\end{align}\n", "\n", "The parameters are:\n", "\n", "|Parameter|Description|Value|Units|\n", "|:--:|:--:|:--:|:--:|\n", "|$K_\\mathrm{d}^\\mathrm{A}$|dissoc. const. for active repressor binding IPTG|0.017|mM$^{-1}$|\n", "|$K_\\mathrm{d}^\\mathrm{I}$|dissoc. const. for inactive repressor binding IPTG|0.002|mM$^{-1}$|\n", "|$K_\\mathrm{switch}$|equil. const. for switching active/inactive|5.8|---|\n", "|$K$|dissoc. const. for active repressor binding operator|?|per cell|\n", "|$R$|number of repressors in cell|?|---|\n", "\n", "The values of $K_\\mathrm{d}^\\mathrm{A}$, $K_\\mathrm{d}^\\mathrm{I}$, and $K_\\mathrm{switch}$ were measured in the Daber, Sochor, and Lewis paper, and, as I mentioned before, are the same for all mutants. You can see in the expression for the fold change that $R$ and $K$ always appear as a ratio, $R/K$, so we can only determine this *ratio*, $R/K$, for each mutant. They are, for the respective mutants:\n", "\n", "|Mutant|$R/K$|\n", "|:--:|:--:|\n", "|WT|141.5|\n", "|Q18A|16.56|\n", "|Q18M|1332|\n", "\n", "Now let's get started with the analysis.\n", "\n", "**a)** Load in the three data sets. They are in the files `~/git/data/wt_lac.csv`, `~/git/data/q18m_lac.csv`, and `~/git/data/q18a_lac.csv`. You should put them in a single `DataFrame` with an added column for genotype. This can be accomplished, for example, with `pd.concat()`.\n", "\n", "**b)** Make a plot of fold change vs. IPTG concentration for each of the three mutants. Think: should any of the axes have a logarithmic scale?\n", "\n", "**c)** Write a function with the signature `fold_change(c, RK, KdA=0.017, KdI=0.002, Kswitch=5.8)` to compute the theoretical fold change. It should allow `c`, the concentration of IPTG, to be passed in as a NumPy array or scalar, and `RK`, the $R/K$ ratio, must be a scalar. Remember, with NumPy arrays, you don't have to write `for` loops to do operations to each element of the array.\n", "\n", "**d)** You will now plot a smooth curve showing the theoretical fold change for each mutant. \n", ">1. Make an array of closely spaced points for the IPTG concentration. *Hint*: The function `np.logspace()` will be useful.\n", "2. Compute the theoretical fold change based on the given parameters using the function you wrote in part (c).\n", "3. Plot the smooth curves on the same plot with the data.\n", "\n", "**e)** If we look at the functional form of the fold change and at the parameters we are given, we see that only $R/K$ varies from mutant to mutant. I told you this *a priori*, but we didn't really know it. Daber, Sochol, and Lewis assumed that the binding to IPTG would be unaltered and the binding to DNA would be altered based on the position of the mutation in the lac repressor protein. Now, *if* this is true, then $R/K$ should be the only thing that varies. We can check this by seeing if the data collapse onto a single curve. To see how this works, we define the **Bohr parameter**, $F(c)$, as\n", "\n", "\\begin{align}\n", "F(c) = -\\ln\\left(R/K\\right) - \\ln\\left(\\frac{\\left(1 + c/K_\\mathrm{d}^\\mathrm{A}\\right)^2}{\\left(1 + c/K_\\mathrm{d}^\\mathrm{A}\\right)^2 + K_\\mathrm{switch}\\left(1 + c/K_\\mathrm{d}^\\mathrm{I}\\right)^2}\\right).\n", "\\end{align}\n", "\n", "The second term in the Bohr parameter is independent of the identity of the mutant, and the first term depends entirely upon it. Then, the fold change can be written as\n", "\n", "\\begin{align}\n", "\\text{fold change} = \\frac{1}{1 + \\mathrm{e}^{-F(c)}}.\n", "\\end{align}\n", "\n", "So, if we make our $x$-axis be the Bohr parameter, all data should fall on the *same* curve. Hence the term, data collapse. (The Bohr parameter gets its name (as given by Rob Phillips) because it is inspired by the work of Christian Bohr (Niels's father), who discovered similar families of curves describing binding of oxygen to hemoglobin.)\n", "\n", "Now, we will plot the theoretical curve of fold change versus Bohr parameter. \n", "\n", "1. Write a function with call signature `bohr_parameter(c, RK, KdA=0.017, KdI=0.002, Kswitch=5.8)` that computes the Bohr parameter.\n", "2. Write a function with call signature `fold_change_bohr(bohr_parameter)` that gives the fold change as a function of the Bohr parameter. \n", "3. Generate values of the Bohr parameter ranging from $-6$ to $6$ in order to make a smooth plot.\n", "4. Compute the theoretical fold change as a function of the Bohr parameter and plot it as a gray line.\n", "\n", "\n", "**f)** Now, for each experimental curve:\n", "\n", "1. Convert the IPTG concentration to a Bohr parameter using the given parameters.\n", "2. Plot the experimental fold change versus the Bohr parameter you just calculated. Plot the data as dots on the same plot that you made the universal gray curve, making sure to appropriately annotate your plot.\n", "\n", "Do you see data collapse? Does it make sense that only operator binding is changing from mutant to mutant? And importantly, the collapse demonstrates that all of the mutants are behaving according to the Monod-Wyman-Changeux model, and the mutations affect quantitative, not qualitative, changes in the behavior of the repressor." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Solution\n" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "
\n", " \n", " Loading BokehJS ...\n", "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "\n", "(function(root) {\n", " function now() {\n", " return new Date();\n", " }\n", "\n", " const 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", " const JS_MIME_TYPE = 'application/javascript';\n", " const HTML_MIME_TYPE = 'text/html';\n", " const EXEC_MIME_TYPE = 'application/vnd.bokehjs_exec.v0+json';\n", " const CLASS_NAME = 'output_bokeh rendered_html';\n", "\n", " /**\n", " * Render data to the DOM node\n", " */\n", " function render(props, node) {\n", " const 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", " const cell = handle.cell;\n", "\n", " const id = cell.output_area._bokeh_element_id;\n", " const server_id = cell.output_area._bokeh_server_id;\n", " // Clean up Bokeh references\n", " if (id != null && id in Bokeh.index) {\n", " Bokeh.index[id].model.document.clear();\n", " delete Bokeh.index[id];\n", " }\n", "\n", " if (server_id !== undefined) {\n", " // Clean up Bokeh references\n", " const cmd_clean = \"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_clean, {\n", " iopub: {\n", " output: function(msg) {\n", " const id = msg.content.text.trim();\n", " if (id in Bokeh.index) {\n", " Bokeh.index[id].model.document.clear();\n", " delete Bokeh.index[id];\n", " }\n", " }\n", " }\n", " });\n", " // Destroy server and session\n", " const cmd_destroy = \"import bokeh.io.notebook as ion; ion.destroy_server('\" + server_id + \"')\";\n", " cell.notebook.kernel.execute(cmd_destroy);\n", " }\n", " }\n", "\n", " /**\n", " * Handle when a new output is added\n", " */\n", " function handleAddOutput(event, handle) {\n", " const output_area = handle.output_area;\n", " const output = handle.output;\n", "\n", " // limit handleAddOutput to display_data with EXEC_MIME_TYPE content only\n", " if ((output.output_type != \"display_data\") || (!Object.prototype.hasOwnProperty.call(output.data, EXEC_MIME_TYPE))) {\n", " return\n", " }\n", "\n", " const 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", " const bk_div = document.createElement(\"div\");\n", " bk_div.innerHTML = output.data[HTML_MIME_TYPE];\n", " const script_attrs = bk_div.children[0].attributes;\n", " for (let i = 0; i < script_attrs.length; i++) {\n", " toinsert[toinsert.length - 1].firstChild.setAttribute(script_attrs[i].name, script_attrs[i].value);\n", " toinsert[toinsert.length - 1].firstChild.textContent = bk_div.children[0].textContent\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", " const 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", " const 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", " const events = require('base/js/events');\n", " const 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", " const 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", " const el = document.getElementById(\"1002\");\n", " if (el != null) {\n", " el.textContent = \"BokehJS is loading...\";\n", " }\n", " if (root.Bokeh !== undefined) {\n", " if (el != null) {\n", " el.textContent = \"BokehJS \" + root.Bokeh.version + \" successfully loaded.\";\n", " }\n", " } else if (Date.now() < root._bokeh_timeout) {\n", " setTimeout(display_loaded, 100)\n", " }\n", " }\n", "\n", "\n", " function run_callbacks() {\n", " try {\n", " root._bokeh_onload_callbacks.forEach(function(callback) {\n", " if (callback != null)\n", " callback();\n", " });\n", " } finally {\n", " delete root._bokeh_onload_callbacks\n", " }\n", " console.debug(\"Bokeh: all callbacks have finished\");\n", " }\n", "\n", " function load_libs(css_urls, js_urls, callback) {\n", " if (css_urls == null) css_urls = [];\n", " if (js_urls == null) js_urls = [];\n", "\n", " root._bokeh_onload_callbacks.push(callback);\n", " if (root._bokeh_is_loading > 0) {\n", " console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n", " return null;\n", " }\n", " if (js_urls == null || js_urls.length === 0) {\n", " run_callbacks();\n", " return null;\n", " }\n", " console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n", " root._bokeh_is_loading = css_urls.length + js_urls.length;\n", "\n", " function on_load() {\n", " root._bokeh_is_loading--;\n", " if (root._bokeh_is_loading === 0) {\n", " console.debug(\"Bokeh: all BokehJS libraries/stylesheets loaded\");\n", " run_callbacks()\n", " }\n", " }\n", "\n", " function on_error(url) {\n", " console.error(\"failed to load \" + url);\n", " }\n", "\n", " for (let i = 0; i < css_urls.length; i++) {\n", " const url = css_urls[i];\n", " const element = document.createElement(\"link\");\n", " element.onload = on_load;\n", " element.onerror = on_error.bind(null, url);\n", " element.rel = \"stylesheet\";\n", " element.type = \"text/css\";\n", " element.href = url;\n", " console.debug(\"Bokeh: injecting link tag for BokehJS stylesheet: \", url);\n", " document.body.appendChild(element);\n", " }\n", "\n", " for (let i = 0; i < js_urls.length; i++) {\n", " const url = js_urls[i];\n", " const element = document.createElement('script');\n", " element.onload = on_load;\n", " element.onerror = on_error.bind(null, url);\n", " element.async = false;\n", " element.src = url;\n", " console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n", " document.head.appendChild(element);\n", " }\n", " };\n", "\n", " function inject_raw_css(css) {\n", " const element = document.createElement(\"style\");\n", " element.appendChild(document.createTextNode(css));\n", " document.body.appendChild(element);\n", " }\n", "\n", " \n", " const js_urls = [\"https://cdn.bokeh.org/bokeh/release/bokeh-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-mathjax-2.4.2.min.js\"];\n", " const css_urls = [];\n", " \n", "\n", " const inline_js = [\n", " function(Bokeh) {\n", " Bokeh.set_log_level(\"info\");\n", " },\n", " function(Bokeh) {\n", " \n", " \n", " }\n", " ];\n", "\n", " function run_inline_js() {\n", " \n", " if (root.Bokeh !== undefined || force === true) {\n", " \n", " for (let i = 0; i < inline_js.length; i++) {\n", " inline_js[i].call(root, root.Bokeh);\n", " }\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", " const cell = $(document.getElementById(\"1002\")).parents('.cell').data().cell;\n", " cell.output_area.append_execute_result(NB_LOAD_WARNING)\n", " }\n", "\n", " }\n", "\n", " if (root._bokeh_is_loading === 0) {\n", " console.debug(\"Bokeh: BokehJS loaded, going straight to plotting\");\n", " run_inline_js();\n", " } else {\n", " load_libs(css_urls, js_urls, function() {\n", " console.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n", " run_inline_js();\n", " });\n", " }\n", "}(window));" ], "application/vnd.bokehjs_load.v0+json": "\n(function(root) {\n function now() {\n return new Date();\n }\n\n const 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 const 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 const el = document.getElementById(\"1002\");\n if (el != null) {\n el.textContent = \"BokehJS is loading...\";\n }\n if (root.Bokeh !== undefined) {\n if (el != null) {\n el.textContent = \"BokehJS \" + root.Bokeh.version + \" successfully loaded.\";\n }\n } else if (Date.now() < root._bokeh_timeout) {\n setTimeout(display_loaded, 100)\n }\n }\n\n\n function run_callbacks() {\n try {\n root._bokeh_onload_callbacks.forEach(function(callback) {\n if (callback != null)\n callback();\n });\n } finally {\n delete root._bokeh_onload_callbacks\n }\n console.debug(\"Bokeh: all callbacks have finished\");\n }\n\n function load_libs(css_urls, js_urls, callback) {\n if (css_urls == null) css_urls = [];\n if (js_urls == null) js_urls = [];\n\n root._bokeh_onload_callbacks.push(callback);\n if (root._bokeh_is_loading > 0) {\n console.debug(\"Bokeh: BokehJS is being loaded, scheduling callback at\", now());\n return null;\n }\n if (js_urls == null || js_urls.length === 0) {\n run_callbacks();\n return null;\n }\n console.debug(\"Bokeh: BokehJS not loaded, scheduling load and callback at\", now());\n root._bokeh_is_loading = css_urls.length + js_urls.length;\n\n function on_load() {\n root._bokeh_is_loading--;\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: all BokehJS libraries/stylesheets loaded\");\n run_callbacks()\n }\n }\n\n function on_error(url) {\n console.error(\"failed to load \" + url);\n }\n\n for (let i = 0; i < css_urls.length; i++) {\n const url = css_urls[i];\n const element = document.createElement(\"link\");\n element.onload = on_load;\n element.onerror = on_error.bind(null, url);\n element.rel = \"stylesheet\";\n element.type = \"text/css\";\n element.href = url;\n console.debug(\"Bokeh: injecting link tag for BokehJS stylesheet: \", url);\n document.body.appendChild(element);\n }\n\n for (let i = 0; i < js_urls.length; i++) {\n const url = js_urls[i];\n const element = document.createElement('script');\n element.onload = on_load;\n element.onerror = on_error.bind(null, url);\n element.async = false;\n element.src = url;\n console.debug(\"Bokeh: injecting script tag for BokehJS library: \", url);\n document.head.appendChild(element);\n }\n };\n\n function inject_raw_css(css) {\n const element = document.createElement(\"style\");\n element.appendChild(document.createTextNode(css));\n document.body.appendChild(element);\n }\n\n \n const js_urls = [\"https://cdn.bokeh.org/bokeh/release/bokeh-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-2.4.2.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-mathjax-2.4.2.min.js\"];\n const css_urls = [];\n \n\n const inline_js = [\n function(Bokeh) {\n Bokeh.set_log_level(\"info\");\n },\n function(Bokeh) {\n \n \n }\n ];\n\n function run_inline_js() {\n \n if (root.Bokeh !== undefined || force === true) {\n \n for (let i = 0; i < inline_js.length; i++) {\n inline_js[i].call(root, root.Bokeh);\n }\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 const cell = $(document.getElementById(\"1002\")).parents('.cell').data().cell;\n cell.output_area.append_execute_result(NB_LOAD_WARNING)\n }\n\n }\n\n if (root._bokeh_is_loading === 0) {\n console.debug(\"Bokeh: BokehJS loaded, going straight to plotting\");\n run_inline_js();\n } else {\n load_libs(css_urls, js_urls, function() {\n console.debug(\"Bokeh: BokehJS plotting callback run at\", now());\n run_inline_js();\n });\n }\n}(window));" }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import numpy as np\n", "import pandas as pd\n", "\n", "import bokeh.io\n", "import bokeh.plotting\n", "\n", "bokeh.io.output_notebook()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**a)** After checking out the files, we see that there are two comment lines, starting the `#`. We'll load in the data frames, add the genotype column, and then concatenate them to make a single data frame." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
[IPTG] (mM)fold changegenotype
00.0000100.040697WT
10.0009740.072788WT
20.0020440.105284WT
30.0040490.199477WT
40.0075840.343024WT
\n", "
" ], "text/plain": [ " [IPTG] (mM) fold change genotype\n", "0 0.000010 0.040697 WT\n", "1 0.000974 0.072788 WT\n", "2 0.002044 0.105284 WT\n", "3 0.004049 0.199477 WT\n", "4 0.007584 0.343024 WT" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_wt = pd.read_csv('data/wt_lac.csv', comment='#')\n", "df_q18a = pd.read_csv('data/q18a_lac.csv', comment='#')\n", "df_q18m = pd.read_csv('data/q18m_lac.csv', comment='#')\n", "\n", "# Add genotype column to DataFrames\n", "df_wt['genotype'] = 'WT'\n", "df_q18a['genotype'] = 'Q18A'\n", "df_q18m['genotype'] = 'Q18M'\n", "\n", "# Concatenate into a single DataFrame\n", "df = pd.concat([df_wt, df_q18a, df_q18m], ignore_index=False)\n", "\n", "# Take a look\n", "df.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**b)** The IPTG concentration varies over five or six orders of magnitude, so we should have the IPTG (*x*) axis be on a logarithmic scale. The fold change is all within one order of magnitude, so we keep the *y*-axis on a linear scale." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", "\n", "\n", "\n", "
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "(function(root) {\n", " function embed_document(root) {\n", " \n", " const docs_json = {\"d92eb917-1418-4fdb-9de0-9825b178bb18\":{\"defs\":[],\"roots\":{\"references\":[{\"attributes\":{\"below\":[{\"id\":\"1012\"}],\"center\":[{\"id\":\"1015\"},{\"id\":\"1019\"},{\"id\":\"1052\"}],\"frame_height\":300,\"frame_width\":450,\"left\":[{\"id\":\"1016\"}],\"renderers\":[{\"id\":\"1039\"},{\"id\":\"1059\"},{\"id\":\"1080\"}],\"title\":{\"id\":\"1041\"},\"toolbar\":{\"id\":\"1027\"},\"x_range\":{\"id\":\"1004\"},\"x_scale\":{\"id\":\"1008\"},\"y_range\":{\"id\":\"1006\"},\"y_scale\":{\"id\":\"1010\"}},\"id\":\"1003\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{},\"id\":\"1045\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"1072\",\"type\":\"Selection\"},{\"attributes\":{\"source\":{\"id\":\"1034\"}},\"id\":\"1040\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1004\",\"type\":\"DataRange1d\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#ff7f0e\"},\"hatch_alpha\":{\"value\":0.1},\"hatch_color\":{\"value\":\"#ff7f0e\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#ff7f0e\"},\"x\":{\"field\":\"[IPTG] (mM)\"},\"y\":{\"field\":\"fold change\"}},\"id\":\"1057\",\"type\":\"Circle\"},{\"attributes\":{\"ticker\":null},\"id\":\"1047\",\"type\":\"LogTickFormatter\"},{\"attributes\":{\"data\":{\"[IPTG] (mM)\":{\"__ndarray__\":\"MVsKYr/m4z6trB94KE0YP6PtQztxgCk/BthlqTFYOT9RdwyaAidJP/6ZM54Vs04/AI6Hbo3oWD+nhBP2p3VeP+cGEpcFH24/FsXbNQrWfT9f+ld3JtyMP1Gv/4IPx5w/T71aObp0qD+j4TfKPx2tP6r9ts+VI7k/BFN1mhqquz84f29+29vHP3MJaTeno84/sqhUq05e2D/oiAX8QJznP/FABLlnT/g/kRjaF4pDCEAdu2oS2qEXQIy4EPZI3ShA3gUzY5weOEA=\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[25]},\"fold change\":{\"__ndarray__\":\"MXnHA29Uyz8LcnQ/9m3QP399K9F4MdI/j5mUCWkC1j9JbsLjD8baPxzDVroru94/AqxLWOR64D+jsBIto9PhP9WBX+TaZOU/+ZH5Z31o6D/LcXL8M8rqP7d9QbGBl+s/ayC2eMld7j8PiXhxxg3wP3FY202ulu0/juvuYbDh7z9/Kes688HtP28yEp0u5e8/BAEL/PIc7z/kj2guinjwP7+WQ/5jnO8/5IfoE2UM8D9UQ1cF+RfwPzncSkqbGfA/zO+kQxvR8D8=\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[25]},\"genotype\":[\"Q18A\",\"Q18A\",\"Q18A\",\"Q18A\",\"Q18A\",\"Q18A\",\"Q18A\",\"Q18A\",\"Q18A\",\"Q18A\",\"Q18A\",\"Q18A\",\"Q18A\",\"Q18A\",\"Q18A\",\"Q18A\",\"Q18A\",\"Q18A\",\"Q18A\",\"Q18A\",\"Q18A\",\"Q18A\",\"Q18A\",\"Q18A\",\"Q18A\"],\"index\":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24]},\"selected\":{\"id\":\"1050\"},\"selection_policy\":{\"id\":\"1049\"}},\"id\":\"1034\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"data\":{\"[IPTG] (mM)\":{\"__ndarray__\":\"6As5T8jC5D6bRiGkOu1PPwLGlvNtvmA/nbB0K9yVcD9BHi7syRB/P+YELlhFKZA/h6jkxdQpnj9JWp5pBJqoPwxQn9Vjo68/6ia7yKZ3uD8AokPStZm/P8/EWItwnck/BBWtQEmKzz8HoUdyYP3YP2/hrL8FS+g/V2lcoVaw9z93Mmd8Y90IQICZU2xlLRhANcP9+mD9JkC7P4ARWyo4QA==\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[20]},\"fold change\":{\"__ndarray__\":\"d+RFSUnWpD8us9NmNaKyP5wsttrd87o/2FbD+3iIyT9nXi2TGfTVP+G9gO/jZ90/RB+czER75D/UwdPJmdvjP3FuGNt5heU/siGXPWSH5T9OuTRcMsXlP6aWlmJoM+c/VzLChZhB5j96TMER+7zmPyDpIQvydec/ZGjtf/gn5z9nifjlf/XnP1TBiPw8mug/nWwV07Ij6D9JMT7o3nfoPw==\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[20]},\"genotype\":[\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\"],\"index\":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19]},\"selected\":{\"id\":\"1095\"},\"selection_policy\":{\"id\":\"1094\"}},\"id\":\"1075\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"fill_color\":{\"value\":\"#2ca02c\"},\"hatch_color\":{\"value\":\"#2ca02c\"},\"line_color\":{\"value\":\"#2ca02c\"},\"x\":{\"field\":\"[IPTG] (mM)\"},\"y\":{\"field\":\"fold change\"}},\"id\":\"1077\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"1010\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1048\",\"type\":\"AllLabels\"},{\"attributes\":{\"label\":{\"value\":\"Q18M\"},\"renderers\":[{\"id\":\"1059\"}]},\"id\":\"1074\",\"type\":\"LegendItem\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"#1f77b4\"},\"hatch_alpha\":{\"value\":0.2},\"hatch_color\":{\"value\":\"#1f77b4\"},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"#1f77b4\"},\"x\":{\"field\":\"[IPTG] (mM)\"},\"y\":{\"field\":\"fold change\"}},\"id\":\"1038\",\"type\":\"Circle\"},{\"attributes\":{\"axis_label\":\"[IPTG] (mM)\",\"coordinates\":null,\"formatter\":{\"id\":\"1047\"},\"group\":null,\"major_label_policy\":{\"id\":\"1048\"},\"ticker\":{\"id\":\"1013\"}},\"id\":\"1012\",\"type\":\"LogAxis\"},{\"attributes\":{},\"id\":\"1094\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b4\"},\"hatch_alpha\":{\"value\":0.1},\"hatch_color\":{\"value\":\"#1f77b4\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b4\"},\"x\":{\"field\":\"[IPTG] (mM)\"},\"y\":{\"field\":\"fold change\"}},\"id\":\"1037\",\"type\":\"Circle\"},{\"attributes\":{\"axis_label\":\"fold change\",\"coordinates\":null,\"formatter\":{\"id\":\"1044\"},\"group\":null,\"major_label_policy\":{\"id\":\"1045\"},\"ticker\":{\"id\":\"1017\"}},\"id\":\"1016\",\"type\":\"LinearAxis\"},{\"attributes\":{\"label\":{\"value\":\"WT\"},\"renderers\":[{\"id\":\"1080\"}]},\"id\":\"1097\",\"type\":\"LegendItem\"},{\"attributes\":{},\"id\":\"1025\",\"type\":\"HelpTool\"},{\"attributes\":{},\"id\":\"1049\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"tools\":[{\"id\":\"1020\"},{\"id\":\"1021\"},{\"id\":\"1022\"},{\"id\":\"1023\"},{\"id\":\"1024\"},{\"id\":\"1025\"}]},\"id\":\"1027\",\"type\":\"Toolbar\"},{\"attributes\":{\"label\":{\"value\":\"Q18A\"},\"renderers\":[{\"id\":\"1039\"}]},\"id\":\"1053\",\"type\":\"LegendItem\"},{\"attributes\":{},\"id\":\"1050\",\"type\":\"Selection\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1026\",\"type\":\"BoxAnnotation\"},{\"attributes\":{},\"id\":\"1008\",\"type\":\"LogScale\"},{\"attributes\":{\"overlay\":{\"id\":\"1026\"}},\"id\":\"1022\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"num_minor_ticks\":10},\"id\":\"1013\",\"type\":\"LogTicker\"},{\"attributes\":{},\"id\":\"1020\",\"type\":\"PanTool\"},{\"attributes\":{\"coordinates\":null,\"group\":null},\"id\":\"1041\",\"type\":\"Title\"},{\"attributes\":{},\"id\":\"1024\",\"type\":\"ResetTool\"},{\"attributes\":{\"fill_color\":{\"value\":\"#1f77b4\"},\"hatch_color\":{\"value\":\"#1f77b4\"},\"line_color\":{\"value\":\"#1f77b4\"},\"x\":{\"field\":\"[IPTG] (mM)\"},\"y\":{\"field\":\"fold change\"}},\"id\":\"1036\",\"type\":\"Circle\"},{\"attributes\":{\"click_policy\":\"hide\",\"coordinates\":null,\"group\":null,\"items\":[{\"id\":\"1053\"},{\"id\":\"1074\"},{\"id\":\"1097\"}],\"location\":\"top_left\"},\"id\":\"1052\",\"type\":\"Legend\"},{\"attributes\":{},\"id\":\"1095\",\"type\":\"Selection\"},{\"attributes\":{\"data\":{\"[IPTG] (mM)\":{\"__ndarray__\":\"ljc+f17B4z5PzdyBxnBQP3x7HP69bmA/BhN/RkQAcD/QFYbxr2aAP9gRFFeyW5A/aZ1Psvfqnj+sk/OKdaipP0cXtRo0KbA/GYc565uguT/6mAviz2m/P06yGS7bP8o/bXW4woiC0D+0wjQmI+jYPyrz+jndcek/0z17B1vR+D/OJH152nQJQLSZWkK+zxhA/CVYa5TIKkBh8QIGGhY6QA==\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[20]},\"fold change\":{\"__ndarray__\":\"dQSx9LXylz9TViOHVQyhP3Uh1REDPaE/INuybB/zoz/65VHb1qymP54snv0JH7E/EF1V+8DZvT8RePjeT37HP6bzMVVegsc/hqNp4zF9yD8x+fXFIbfKP+Ue1mBWHso/4AuZGtIHzD8H9lagURzLP6Fgyoy0G9A/aCuBYZuuzj+INWSbUmrOP01YFYU71M0/p0kqD8HhzT8yJaCaYD7OPw==\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[20]},\"genotype\":[\"Q18M\",\"Q18M\",\"Q18M\",\"Q18M\",\"Q18M\",\"Q18M\",\"Q18M\",\"Q18M\",\"Q18M\",\"Q18M\",\"Q18M\",\"Q18M\",\"Q18M\",\"Q18M\",\"Q18M\",\"Q18M\",\"Q18M\",\"Q18M\",\"Q18M\",\"Q18M\"],\"index\":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19]},\"selected\":{\"id\":\"1072\"},\"selection_policy\":{\"id\":\"1071\"}},\"id\":\"1054\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1071\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"axis\":{\"id\":\"1012\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1015\",\"type\":\"Grid\"},{\"attributes\":{\"source\":{\"id\":\"1054\"}},\"id\":\"1060\",\"type\":\"CDSView\"},{\"attributes\":{\"source\":{\"id\":\"1075\"}},\"id\":\"1081\",\"type\":\"CDSView\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1034\"},\"glyph\":{\"id\":\"1036\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1038\"},\"nonselection_glyph\":{\"id\":\"1037\"},\"view\":{\"id\":\"1040\"}},\"id\":\"1039\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1021\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1054\"},\"glyph\":{\"id\":\"1056\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1058\"},\"nonselection_glyph\":{\"id\":\"1057\"},\"view\":{\"id\":\"1060\"}},\"id\":\"1059\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1006\",\"type\":\"DataRange1d\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1075\"},\"glyph\":{\"id\":\"1077\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1079\"},\"nonselection_glyph\":{\"id\":\"1078\"},\"view\":{\"id\":\"1081\"}},\"id\":\"1080\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"#ff7f0e\"},\"hatch_alpha\":{\"value\":0.2},\"hatch_color\":{\"value\":\"#ff7f0e\"},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"#ff7f0e\"},\"x\":{\"field\":\"[IPTG] (mM)\"},\"y\":{\"field\":\"fold change\"}},\"id\":\"1058\",\"type\":\"Circle\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"#2ca02c\"},\"hatch_alpha\":{\"value\":0.2},\"hatch_color\":{\"value\":\"#2ca02c\"},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"#2ca02c\"},\"x\":{\"field\":\"[IPTG] (mM)\"},\"y\":{\"field\":\"fold change\"}},\"id\":\"1079\",\"type\":\"Circle\"},{\"attributes\":{\"axis\":{\"id\":\"1016\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1019\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1044\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"1017\",\"type\":\"BasicTicker\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#2ca02c\"},\"hatch_alpha\":{\"value\":0.1},\"hatch_color\":{\"value\":\"#2ca02c\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#2ca02c\"},\"x\":{\"field\":\"[IPTG] (mM)\"},\"y\":{\"field\":\"fold change\"}},\"id\":\"1078\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"1023\",\"type\":\"SaveTool\"},{\"attributes\":{\"fill_color\":{\"value\":\"#ff7f0e\"},\"hatch_color\":{\"value\":\"#ff7f0e\"},\"line_color\":{\"value\":\"#ff7f0e\"},\"x\":{\"field\":\"[IPTG] (mM)\"},\"y\":{\"field\":\"fold change\"}},\"id\":\"1056\",\"type\":\"Circle\"}],\"root_ids\":[\"1003\"]},\"title\":\"Bokeh Application\",\"version\":\"2.4.2\"}};\n", " const render_items = [{\"docid\":\"d92eb917-1418-4fdb-9de0-9825b178bb18\",\"root_ids\":[\"1003\"],\"roots\":{\"1003\":\"21fc61d1-0f10-4a55-a11a-01d164c957f7\"}}];\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", " let attempts = 0;\n", " const timer = setInterval(function(root) {\n", " if (root.Bokeh !== undefined) {\n", " clearInterval(timer);\n", " embed_document(root);\n", " } else {\n", " attempts++;\n", " if (attempts > 100) {\n", " clearInterval(timer);\n", " console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\");\n", " }\n", " }\n", " }, 10, root)\n", " }\n", "})(window);" ], "application/vnd.bokehjs_exec.v0+json": "" }, "metadata": { "application/vnd.bokehjs_exec.v0+json": { "id": "1003" } }, "output_type": "display_data" } ], "source": [ "# Set up figure\n", "p = bokeh.plotting.figure(\n", " frame_height=300,\n", " frame_width=450,\n", " x_axis_label='[IPTG] (mM)',\n", " y_axis_label='fold change',\n", " x_axis_type='log',\n", ")\n", "\n", "# Color palette\n", "palette = bokeh.palettes.d3['Category10'][10]\n", "\n", "# Populate glyphs, looping through grouped dataframe\n", "for i, (name, group) in enumerate(df.groupby('genotype')):\n", " p.circle(\n", " source=group,\n", " x='[IPTG] (mM)',\n", " y='fold change',\n", " color=palette[i],\n", " legend_label=name\n", " )\n", " \n", "# Set legend properties\n", "p.legend.location = 'top_left'\n", "p.legend.click_policy = 'hide'\n", " \n", "bokeh.io.show(p)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**c)** We use the convenience of NumPy's broadcasting. We can almost just type it out as if we were computing it for a single value of $c$." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "# Fold change function\n", "def fold_change(c, RK, KdA=0.017, KdI=0.002, Kswitch=5.8):\n", " \"\"\"Compute theoretical fold change for MWC model.\"\"\"\n", " # Inverse fold change\n", " inv_fc = 1 + (1 + c/KdA)**2 * RK / ((1 + c/KdA)**2 + Kswitch*(1 + c/KdI)**2)\n", "\n", " return 1 / inv_fc" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**d)** First, we need to make our theoretical curves and plot them." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", "\n", "\n", "\n", "
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "(function(root) {\n", " function embed_document(root) {\n", " \n", " const docs_json = {\"bf8c2f01-6b62-4e5b-9c79-51b1d4f16310\":{\"defs\":[],\"roots\":{\"references\":[{\"attributes\":{\"below\":[{\"id\":\"1012\"}],\"center\":[{\"id\":\"1015\"},{\"id\":\"1019\"},{\"id\":\"1052\"}],\"frame_height\":300,\"frame_width\":450,\"left\":[{\"id\":\"1016\"}],\"renderers\":[{\"id\":\"1039\"},{\"id\":\"1059\"},{\"id\":\"1080\"},{\"id\":\"1192\"},{\"id\":\"1215\"},{\"id\":\"1240\"}],\"title\":{\"id\":\"1041\"},\"toolbar\":{\"id\":\"1027\"},\"x_range\":{\"id\":\"1004\"},\"x_scale\":{\"id\":\"1008\"},\"y_range\":{\"id\":\"1006\"},\"y_scale\":{\"id\":\"1010\"}},\"id\":\"1003\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{\"data\":{\"x\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[200]},\"y\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[200]}},\"selected\":{\"id\":\"1234\"},\"selection_policy\":{\"id\":\"1233\"}},\"id\":\"1211\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1045\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"1072\",\"type\":\"Selection\"},{\"attributes\":{\"source\":{\"id\":\"1034\"}},\"id\":\"1040\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1209\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1208\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1004\",\"type\":\"DataRange1d\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#ff7f0e\"},\"hatch_alpha\":{\"value\":0.1},\"hatch_color\":{\"value\":\"#ff7f0e\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#ff7f0e\"},\"x\":{\"field\":\"[IPTG] (mM)\"},\"y\":{\"field\":\"fold change\"}},\"id\":\"1057\",\"type\":\"Circle\"},{\"attributes\":{\"ticker\":null},\"id\":\"1047\",\"type\":\"LogTickFormatter\"},{\"attributes\":{\"data\":{\"[IPTG] (mM)\":{\"__ndarray__\":\"MVsKYr/m4z6trB94KE0YP6PtQztxgCk/BthlqTFYOT9RdwyaAidJP/6ZM54Vs04/AI6Hbo3oWD+nhBP2p3VeP+cGEpcFH24/FsXbNQrWfT9f+ld3JtyMP1Gv/4IPx5w/T71aObp0qD+j4TfKPx2tP6r9ts+VI7k/BFN1mhqquz84f29+29vHP3MJaTeno84/sqhUq05e2D/oiAX8QJznP/FABLlnT/g/kRjaF4pDCEAdu2oS2qEXQIy4EPZI3ShA3gUzY5weOEA=\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[25]},\"fold change\":{\"__ndarray__\":\"MXnHA29Uyz8LcnQ/9m3QP399K9F4MdI/j5mUCWkC1j9JbsLjD8baPxzDVroru94/AqxLWOR64D+jsBIto9PhP9WBX+TaZOU/+ZH5Z31o6D/LcXL8M8rqP7d9QbGBl+s/ayC2eMld7j8PiXhxxg3wP3FY202ulu0/juvuYbDh7z9/Kes688HtP28yEp0u5e8/BAEL/PIc7z/kj2guinjwP7+WQ/5jnO8/5IfoE2UM8D9UQ1cF+RfwPzncSkqbGfA/zO+kQxvR8D8=\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[25]},\"genotype\":[\"Q18A\",\"Q18A\",\"Q18A\",\"Q18A\",\"Q18A\",\"Q18A\",\"Q18A\",\"Q18A\",\"Q18A\",\"Q18A\",\"Q18A\",\"Q18A\",\"Q18A\",\"Q18A\",\"Q18A\",\"Q18A\",\"Q18A\",\"Q18A\",\"Q18A\",\"Q18A\",\"Q18A\",\"Q18A\",\"Q18A\",\"Q18A\",\"Q18A\"],\"index\":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24]},\"selected\":{\"id\":\"1050\"},\"selection_policy\":{\"id\":\"1049\"}},\"id\":\"1034\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"data\":{\"[IPTG] (mM)\":{\"__ndarray__\":\"6As5T8jC5D6bRiGkOu1PPwLGlvNtvmA/nbB0K9yVcD9BHi7syRB/P+YELlhFKZA/h6jkxdQpnj9JWp5pBJqoPwxQn9Vjo68/6ia7yKZ3uD8AokPStZm/P8/EWItwnck/BBWtQEmKzz8HoUdyYP3YP2/hrL8FS+g/V2lcoVaw9z93Mmd8Y90IQICZU2xlLRhANcP9+mD9JkC7P4ARWyo4QA==\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[20]},\"fold change\":{\"__ndarray__\":\"d+RFSUnWpD8us9NmNaKyP5wsttrd87o/2FbD+3iIyT9nXi2TGfTVP+G9gO/jZ90/RB+czER75D/UwdPJmdvjP3FuGNt5heU/siGXPWSH5T9OuTRcMsXlP6aWlmJoM+c/VzLChZhB5j96TMER+7zmPyDpIQvydec/ZGjtf/gn5z9nifjlf/XnP1TBiPw8mug/nWwV07Ij6D9JMT7o3nfoPw==\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[20]},\"genotype\":[\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\"],\"index\":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19]},\"selected\":{\"id\":\"1095\"},\"selection_policy\":{\"id\":\"1094\"}},\"id\":\"1075\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"source\":{\"id\":\"1188\"}},\"id\":\"1193\",\"type\":\"CDSView\"},{\"attributes\":{\"fill_color\":{\"value\":\"#2ca02c\"},\"hatch_color\":{\"value\":\"#2ca02c\"},\"line_color\":{\"value\":\"#2ca02c\"},\"x\":{\"field\":\"[IPTG] (mM)\"},\"y\":{\"field\":\"fold change\"}},\"id\":\"1077\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"1010\",\"type\":\"LinearScale\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1191\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1048\",\"type\":\"AllLabels\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#2ca02c\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1239\",\"type\":\"Line\"},{\"attributes\":{\"line_color\":\"#ff7f0e\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1212\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"#ff7f0e\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1214\",\"type\":\"Line\"},{\"attributes\":{\"label\":{\"value\":\"Q18M\"},\"renderers\":[{\"id\":\"1059\"}]},\"id\":\"1074\",\"type\":\"LegendItem\"},{\"attributes\":{\"source\":{\"id\":\"1236\"}},\"id\":\"1241\",\"type\":\"CDSView\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"#1f77b4\"},\"hatch_alpha\":{\"value\":0.2},\"hatch_color\":{\"value\":\"#1f77b4\"},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"#1f77b4\"},\"x\":{\"field\":\"[IPTG] (mM)\"},\"y\":{\"field\":\"fold change\"}},\"id\":\"1038\",\"type\":\"Circle\"},{\"attributes\":{\"axis_label\":\"[IPTG] (mM)\",\"coordinates\":null,\"formatter\":{\"id\":\"1047\"},\"group\":null,\"major_label_policy\":{\"id\":\"1048\"},\"ticker\":{\"id\":\"1013\"}},\"id\":\"1012\",\"type\":\"LogAxis\"},{\"attributes\":{},\"id\":\"1094\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b4\"},\"hatch_alpha\":{\"value\":0.1},\"hatch_color\":{\"value\":\"#1f77b4\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b4\"},\"x\":{\"field\":\"[IPTG] (mM)\"},\"y\":{\"field\":\"fold change\"}},\"id\":\"1037\",\"type\":\"Circle\"},{\"attributes\":{\"axis_label\":\"fold change\",\"coordinates\":null,\"formatter\":{\"id\":\"1044\"},\"group\":null,\"major_label_policy\":{\"id\":\"1045\"},\"ticker\":{\"id\":\"1017\"}},\"id\":\"1016\",\"type\":\"LinearAxis\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1236\"},\"glyph\":{\"id\":\"1237\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1239\"},\"nonselection_glyph\":{\"id\":\"1238\"},\"view\":{\"id\":\"1241\"}},\"id\":\"1240\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"label\":{\"value\":\"WT\"},\"renderers\":[{\"id\":\"1080\"}]},\"id\":\"1097\",\"type\":\"LegendItem\"},{\"attributes\":{\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1189\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1234\",\"type\":\"Selection\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#1f77b4\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1190\",\"type\":\"Line\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1188\"},\"glyph\":{\"id\":\"1189\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1191\"},\"nonselection_glyph\":{\"id\":\"1190\"},\"view\":{\"id\":\"1193\"}},\"id\":\"1192\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"data\":{\"x\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[200]},\"y\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[200]}},\"selected\":{\"id\":\"1209\"},\"selection_policy\":{\"id\":\"1208\"}},\"id\":\"1188\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_color\":\"#2ca02c\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1237\",\"type\":\"Line\"},{\"attributes\":{\"data\":{\"x\":{\"__ndarray__\":\"je21oPfGsD7h5umjhGeyPmr9tO13MLQ+qEnhi7wltj75sWjUnku4PpQiz9TVpro+7wW+q408vT6ak8xxOQnAPqCffHNfl8E+AZwx1SJMwz64/5xUQivFPh+1aKvZOMc+e8Dck2p5yT6y1Gyt5vHLPp8O5Va6p84+RhwES2zQ0D4tt2AT5HHSPlHlSefYO9Q+kELdCTgy1j6/WDw9UFnYPrElODfbtdo+mOjBAAhN3T5BF3MrQxLgPh81JpNJoeE+LMZQHgNX4z67Lf6mMDflPjdMmjfwRec++U+sFMaH6T4OpvempgHsPqGAxlsBue4+0uCeSebZ8D5VbnVbSXzyPidAo0pAR/Q+bBTYkLo+9j4rnrpdCWf4PqBY6BDpxPo+Q/M+n4td/T7DkSD9URsAP0OeT0k5qwE/V7msiOlhAz/9vc2yJUMFP5+XLiQOUwc/FhoErSmWCT85c/OAbxEMP9/ufR1Syg4/OCiHn2XjED+LjHN/tIYSP91cXhuuUhQ/EczIJERLFj8rAT06ynQYP4k4pWb/0xo/pxpxjBhuHT/x97PpZSQgP6MXH5kutSE/hOO5F9ZsIz+Y5dV7IU8lPxHlTXUzYCc/eKVzYZWkKT+l/mBAQSEsP8JSiKGs2y4/5ZC/T+rsMD9qbaiCJZEyP+iTGl0iXjQ/dLKoydRXNj8NdB/XkoI4PwrzNj0e4zo/s0aXza5+PT/W3A30fi1APzGkvIUpv0E/X6Xuzsh3Qz9h/OIFJFtFPyPaIi9gbUc/ywqNNgmzST+D3EPqGzFMP9i9Ze0Q7U4/hmtMXXT2UD8ASWNonJtSP2VIeROdaVQ/1U1zg2xkVj9UXsA4Y5BYP5xnaJlF8lo/MVTzZ06PXT+gchAfnTZgP1cOUhIqyWE/ClPDscGCYz9FfsNULWdlP5J12lWUemc/NPbkMIXBaT+RdKKD/0BsPx1bmQZ//m4/JLwzywMAcT/ZNPUzGaZyPz/pHUIedXQ/EGMmVgtxdj+3nYBjO554P0spB4B1AXs/dhbKYPeffT+Ki59twD+AP9XoCkIw04E/VzWyw8CNgz9gDEhsPXOFP5wQpO3Ph4c/xqgSVQnQiT91A4YR7FCMP/ZwqfL2D48/9zp9nJgJkT8MJbHom7CSP1byreylgJQ/7PbBRbF9lj+zh8NbG6yYPyCA4/WtEJs/C1ljvamwnT/HmqDi6EigP92PFBg83aE/4oo3CMaYoz9YbkNQVH+lP05gsfoSlac/8/mvp5XeqT+MnPqY4WCsP8NiH7d4Ia8/hVUy1DITsT9O7euJJLuyP6vt0BY0jLQ/UU9IVl6Ktj/P6u4lA7q4P5Nq0P/uH7s/WeEJg2XBvT9rtfqAFlLAPwsqnpdN58E/F4nRgtGjwz9Dk4oEcovFP9x2NoFdosc/BVlZLSrtyT9iKw8f4HDMP9qyh1kEM88/UC9eddIc0T/4Qfwas8XSP4F0MMTIl9Q/jvS9ixKX1j8pEGvG8sfYPz6fo6I4L9s/WXALtyrS3T9Zk5ZLSVvgP2ap2MNk8eE/a10AN+Ou4z8/k/SMlpflP/TEaYWvr+c/ks6t6sb76T9XddWo54DsPyQEct+ZRO8/H6MNg3cm8T8nuTqfR9DyP44wePhjo/Q/o7Ip6s2j9j/AvKJB6tX4P0mONeOKPvs/UMS4Xvni/T8wkF5FgWQAQGHM9p+B+wFAaC5GKPu5A0BvsFrtwaMFQCMbhAsJvQdA8/1O5GsKCkA4G2I7+JAMQOQbcU45Vg9Aw0NPACIwEUCgywEa4toSQCDdVbcFrxRAhZqUdZCwFkDkMgOc6eMYQPtiYcblTRtAPZplf9HzHUAyrD5xvm0gQOceLS+kBSJAyhwnWhnFI0BDWJgp9K8lQPOqwBdqyidAvSbhHhkZKkDemszbEaEsQIXjGqziZy9AIl0z8NE5MUAc1q2OguUyQEdIeQSuujRAagMKMlq9NkCZM/zZ8PE4QEEFBVFJXTtA7a9oHrMEPkA3jSTSAHdAQFX7sXTMD0JAn0Qp0D3QQ0CxJItFLbxFQJUIXa7S10dAOCYLn84nSkDIUC+PNLFMQFVqCP6VeU9AJvXLVYdDUUAzGp0AKfBSQBJUlONcxlRACoyXIyvKVkAAAAAAAABZQA==\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[200]},\"y\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[200]}},\"selected\":{\"id\":\"1261\"},\"selection_policy\":{\"id\":\"1260\"}},\"id\":\"1236\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1025\",\"type\":\"HelpTool\"},{\"attributes\":{\"tools\":[{\"id\":\"1020\"},{\"id\":\"1021\"},{\"id\":\"1022\"},{\"id\":\"1023\"},{\"id\":\"1024\"},{\"id\":\"1025\"}]},\"id\":\"1027\",\"type\":\"Toolbar\"},{\"attributes\":{},\"id\":\"1049\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"label\":{\"value\":\"Q18A\"},\"renderers\":[{\"id\":\"1039\"}]},\"id\":\"1053\",\"type\":\"LegendItem\"},{\"attributes\":{},\"id\":\"1050\",\"type\":\"Selection\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1026\",\"type\":\"BoxAnnotation\"},{\"attributes\":{},\"id\":\"1233\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#ff7f0e\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1213\",\"type\":\"Line\"},{\"attributes\":{},\"id\":\"1008\",\"type\":\"LogScale\"},{\"attributes\":{\"overlay\":{\"id\":\"1026\"}},\"id\":\"1022\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"num_minor_ticks\":10},\"id\":\"1013\",\"type\":\"LogTicker\"},{\"attributes\":{},\"id\":\"1020\",\"type\":\"PanTool\"},{\"attributes\":{\"coordinates\":null,\"group\":null},\"id\":\"1041\",\"type\":\"Title\"},{\"attributes\":{},\"id\":\"1024\",\"type\":\"ResetTool\"},{\"attributes\":{},\"id\":\"1261\",\"type\":\"Selection\"},{\"attributes\":{\"click_policy\":\"hide\",\"coordinates\":null,\"group\":null,\"items\":[{\"id\":\"1053\"},{\"id\":\"1074\"},{\"id\":\"1097\"}],\"location\":\"top_left\"},\"id\":\"1052\",\"type\":\"Legend\"},{\"attributes\":{\"fill_color\":{\"value\":\"#1f77b4\"},\"hatch_color\":{\"value\":\"#1f77b4\"},\"line_color\":{\"value\":\"#1f77b4\"},\"x\":{\"field\":\"[IPTG] (mM)\"},\"y\":{\"field\":\"fold change\"}},\"id\":\"1036\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"1260\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1095\",\"type\":\"Selection\"},{\"attributes\":{\"data\":{\"[IPTG] (mM)\":{\"__ndarray__\":\"ljc+f17B4z5PzdyBxnBQP3x7HP69bmA/BhN/RkQAcD/QFYbxr2aAP9gRFFeyW5A/aZ1Psvfqnj+sk/OKdaipP0cXtRo0KbA/GYc565uguT/6mAviz2m/P06yGS7bP8o/bXW4woiC0D+0wjQmI+jYPyrz+jndcek/0z17B1vR+D/OJH152nQJQLSZWkK+zxhA/CVYa5TIKkBh8QIGGhY6QA==\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[20]},\"fold change\":{\"__ndarray__\":\"dQSx9LXylz9TViOHVQyhP3Uh1REDPaE/INuybB/zoz/65VHb1qymP54snv0JH7E/EF1V+8DZvT8RePjeT37HP6bzMVVegsc/hqNp4zF9yD8x+fXFIbfKP+Ue1mBWHso/4AuZGtIHzD8H9lagURzLP6Fgyoy0G9A/aCuBYZuuzj+INWSbUmrOP01YFYU71M0/p0kqD8HhzT8yJaCaYD7OPw==\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[20]},\"genotype\":[\"Q18M\",\"Q18M\",\"Q18M\",\"Q18M\",\"Q18M\",\"Q18M\",\"Q18M\",\"Q18M\",\"Q18M\",\"Q18M\",\"Q18M\",\"Q18M\",\"Q18M\",\"Q18M\",\"Q18M\",\"Q18M\",\"Q18M\",\"Q18M\",\"Q18M\",\"Q18M\"],\"index\":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19]},\"selected\":{\"id\":\"1072\"},\"selection_policy\":{\"id\":\"1071\"}},\"id\":\"1054\",\"type\":\"ColumnDataSource\"},{\"attributes\":{},\"id\":\"1071\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"axis\":{\"id\":\"1012\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1015\",\"type\":\"Grid\"},{\"attributes\":{\"source\":{\"id\":\"1054\"}},\"id\":\"1060\",\"type\":\"CDSView\"},{\"attributes\":{\"source\":{\"id\":\"1075\"}},\"id\":\"1081\",\"type\":\"CDSView\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1034\"},\"glyph\":{\"id\":\"1036\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1038\"},\"nonselection_glyph\":{\"id\":\"1037\"},\"view\":{\"id\":\"1040\"}},\"id\":\"1039\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"#2ca02c\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1238\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"1211\"}},\"id\":\"1216\",\"type\":\"CDSView\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1054\"},\"glyph\":{\"id\":\"1056\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1058\"},\"nonselection_glyph\":{\"id\":\"1057\"},\"view\":{\"id\":\"1060\"}},\"id\":\"1059\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1021\",\"type\":\"WheelZoomTool\"},{\"attributes\":{},\"id\":\"1006\",\"type\":\"DataRange1d\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1075\"},\"glyph\":{\"id\":\"1077\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1079\"},\"nonselection_glyph\":{\"id\":\"1078\"},\"view\":{\"id\":\"1081\"}},\"id\":\"1080\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1211\"},\"glyph\":{\"id\":\"1212\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1214\"},\"nonselection_glyph\":{\"id\":\"1213\"},\"view\":{\"id\":\"1216\"}},\"id\":\"1215\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"#ff7f0e\"},\"hatch_alpha\":{\"value\":0.2},\"hatch_color\":{\"value\":\"#ff7f0e\"},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"#ff7f0e\"},\"x\":{\"field\":\"[IPTG] (mM)\"},\"y\":{\"field\":\"fold change\"}},\"id\":\"1058\",\"type\":\"Circle\"},{\"attributes\":{\"axis\":{\"id\":\"1016\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1019\",\"type\":\"Grid\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"#2ca02c\"},\"hatch_alpha\":{\"value\":0.2},\"hatch_color\":{\"value\":\"#2ca02c\"},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"#2ca02c\"},\"x\":{\"field\":\"[IPTG] (mM)\"},\"y\":{\"field\":\"fold change\"}},\"id\":\"1079\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"1044\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"1017\",\"type\":\"BasicTicker\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#2ca02c\"},\"hatch_alpha\":{\"value\":0.1},\"hatch_color\":{\"value\":\"#2ca02c\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#2ca02c\"},\"x\":{\"field\":\"[IPTG] (mM)\"},\"y\":{\"field\":\"fold change\"}},\"id\":\"1078\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"1023\",\"type\":\"SaveTool\"},{\"attributes\":{\"fill_color\":{\"value\":\"#ff7f0e\"},\"hatch_color\":{\"value\":\"#ff7f0e\"},\"line_color\":{\"value\":\"#ff7f0e\"},\"x\":{\"field\":\"[IPTG] (mM)\"},\"y\":{\"field\":\"fold change\"}},\"id\":\"1056\",\"type\":\"Circle\"}],\"root_ids\":[\"1003\"]},\"title\":\"Bokeh Application\",\"version\":\"2.4.2\"}};\n", " const render_items = [{\"docid\":\"bf8c2f01-6b62-4e5b-9c79-51b1d4f16310\",\"root_ids\":[\"1003\"],\"roots\":{\"1003\":\"f120196b-dae2-4fc7-8a14-c40e8b484892\"}}];\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", " let attempts = 0;\n", " const timer = setInterval(function(root) {\n", " if (root.Bokeh !== undefined) {\n", " clearInterval(timer);\n", " embed_document(root);\n", " } else {\n", " attempts++;\n", " if (attempts > 100) {\n", " clearInterval(timer);\n", " console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\");\n", " }\n", " }\n", " }, 10, root)\n", " }\n", "})(window);" ], "application/vnd.bokehjs_exec.v0+json": "" }, "metadata": { "application/vnd.bokehjs_exec.v0+json": { "id": "1003" } }, "output_type": "display_data" } ], "source": [ "# Theoretical concentration\n", "c = np.logspace(-6, 2, 200)\n", "\n", "# Dictionary or parameter values\n", "RK = dict(\n", " WT=141.5,\n", " Q18A=16.56,\n", " Q18M=1332,\n", ")\n", "\n", "# Make smooth curves and plot them\n", "for i, (name, _) in enumerate(df.groupby('genotype')):\n", " p.line(\n", " x=c,\n", " y=fold_change(c, RK[name]),\n", " color=palette[i],\n", " line_width=2\n", " )\n", "\n", "bokeh.io.show(p)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**e)** We'll write a function to compute the Bohr parameter." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "def bohr_parameter(c, RK, KdA=0.017, KdI=0.002, Kswitch=5.8):\n", " \"\"\"Compute Bohr parameter based on MWC model.\"\"\"\n", " # Big nasty argument of logarithm\n", " log_arg = (1 + c/KdA)**2 / ((1 + c/KdA)**2 + Kswitch*(1 + c/KdI)**2)\n", "\n", " return -np.log(RK) - np.log(log_arg)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Next, we'll make a plot of the fold change as a function of the Bohr parameter." ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", "\n", "\n", "\n", "
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "(function(root) {\n", " function embed_document(root) {\n", " \n", " const docs_json = {\"9edcef57-e82c-444d-a18d-2f11993bfb8c\":{\"defs\":[],\"roots\":{\"references\":[{\"attributes\":{\"below\":[{\"id\":\"1377\"}],\"center\":[{\"id\":\"1380\"},{\"id\":\"1384\"}],\"frame_height\":300,\"frame_width\":450,\"left\":[{\"id\":\"1381\"}],\"renderers\":[{\"id\":\"1403\"}],\"title\":{\"id\":\"1426\"},\"toolbar\":{\"id\":\"1392\"},\"x_range\":{\"id\":\"1369\"},\"x_scale\":{\"id\":\"1373\"},\"y_range\":{\"id\":\"1371\"},\"y_scale\":{\"id\":\"1375\"}},\"id\":\"1368\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{},\"id\":\"1433\",\"type\":\"AllLabels\"},{\"attributes\":{\"axis_label\":\"Bohr parameter\",\"coordinates\":null,\"formatter\":{\"id\":\"1432\"},\"group\":null,\"major_label_policy\":{\"id\":\"1433\"},\"ticker\":{\"id\":\"1378\"}},\"id\":\"1377\",\"type\":\"LinearAxis\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1399\"},\"glyph\":{\"id\":\"1400\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1402\"},\"nonselection_glyph\":{\"id\":\"1401\"},\"view\":{\"id\":\"1404\"}},\"id\":\"1403\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1375\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1371\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"1378\",\"type\":\"BasicTicker\"},{\"attributes\":{\"axis\":{\"id\":\"1377\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1380\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1386\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"axis_label\":\"fold change\",\"coordinates\":null,\"formatter\":{\"id\":\"1429\"},\"group\":null,\"major_label_policy\":{\"id\":\"1430\"},\"ticker\":{\"id\":\"1382\"}},\"id\":\"1381\",\"type\":\"LinearAxis\"},{\"attributes\":{\"axis\":{\"id\":\"1381\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1384\",\"type\":\"Grid\"},{\"attributes\":{},\"id\":\"1382\",\"type\":\"BasicTicker\"},{\"attributes\":{},\"id\":\"1434\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1390\",\"type\":\"HelpTool\"},{\"attributes\":{},\"id\":\"1432\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"1385\",\"type\":\"PanTool\"},{\"attributes\":{},\"id\":\"1435\",\"type\":\"Selection\"},{\"attributes\":{\"overlay\":{\"id\":\"1391\"}},\"id\":\"1387\",\"type\":\"BoxZoomTool\"},{\"attributes\":{},\"id\":\"1388\",\"type\":\"SaveTool\"},{\"attributes\":{},\"id\":\"1389\",\"type\":\"ResetTool\"},{\"attributes\":{\"line_color\":\"gray\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1400\",\"type\":\"Line\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1391\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"data\":{\"x\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[400]},\"y\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[400]}},\"selected\":{\"id\":\"1435\"},\"selection_policy\":{\"id\":\"1434\"}},\"id\":\"1399\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"gray\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1401\",\"type\":\"Line\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"gray\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1402\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"1399\"}},\"id\":\"1404\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1373\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1429\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"end\":6,\"start\":-6},\"id\":\"1369\",\"type\":\"Range1d\"},{\"attributes\":{},\"id\":\"1430\",\"type\":\"AllLabels\"},{\"attributes\":{\"tools\":[{\"id\":\"1385\"},{\"id\":\"1386\"},{\"id\":\"1387\"},{\"id\":\"1388\"},{\"id\":\"1389\"},{\"id\":\"1390\"}]},\"id\":\"1392\",\"type\":\"Toolbar\"},{\"attributes\":{\"coordinates\":null,\"group\":null},\"id\":\"1426\",\"type\":\"Title\"}],\"root_ids\":[\"1368\"]},\"title\":\"Bokeh Application\",\"version\":\"2.4.2\"}};\n", " const render_items = [{\"docid\":\"9edcef57-e82c-444d-a18d-2f11993bfb8c\",\"root_ids\":[\"1368\"],\"roots\":{\"1368\":\"e1fd09da-f5c3-4ec9-968f-cbd35f23e912\"}}];\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", " let attempts = 0;\n", " const timer = setInterval(function(root) {\n", " if (root.Bokeh !== undefined) {\n", " clearInterval(timer);\n", " embed_document(root);\n", " } else {\n", " attempts++;\n", " if (attempts > 100) {\n", " clearInterval(timer);\n", " console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\");\n", " }\n", " }\n", " }, 10, root)\n", " }\n", "})(window);" ], "application/vnd.bokehjs_exec.v0+json": "" }, "metadata": { "application/vnd.bokehjs_exec.v0+json": { "id": "1368" } }, "output_type": "display_data" } ], "source": [ "# Compute smooth function for fold change\n", "bohr = np.linspace(-6, 6, 400)\n", "fold_change_bohr = 1 / (1 + np.exp(-bohr))\n", "\n", "p = bokeh.plotting.figure(\n", " frame_height=300,\n", " frame_width=450,\n", " x_axis_label='Bohr parameter',\n", " y_axis_label='fold change',\n", " x_range=[-6, 6],\n", ")\n", "\n", "p.line(\n", " x=bohr,\n", " y=fold_change_bohr,\n", " line_color='gray',\n", " line_width=2,\n", ")\n", "\n", "bokeh.io.show(p)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**f)** Adding the experimental fold changes to the plot is now easy. We compute the Bohr parameter from the concentration (and the rest of the parameters) to give the `x` values and we use the experimentally determined values for the `y` values." ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", "\n", "\n", "\n", "
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "(function(root) {\n", " function embed_document(root) {\n", " \n", " const docs_json = {\"46911933-48d0-484d-a7f6-826d9d466119\":{\"defs\":[],\"roots\":{\"references\":[{\"attributes\":{\"below\":[{\"id\":\"1377\"}],\"center\":[{\"id\":\"1380\"},{\"id\":\"1384\"},{\"id\":\"1545\"}],\"frame_height\":300,\"frame_width\":450,\"left\":[{\"id\":\"1381\"}],\"renderers\":[{\"id\":\"1403\"},{\"id\":\"1496\"},{\"id\":\"1619\"},{\"id\":\"1713\"}],\"title\":{\"id\":\"1426\"},\"toolbar\":{\"id\":\"1392\"},\"x_range\":{\"id\":\"1369\"},\"x_scale\":{\"id\":\"1373\"},\"y_range\":{\"id\":\"1371\"},\"y_scale\":{\"id\":\"1375\"}},\"id\":\"1368\",\"subtype\":\"Figure\",\"type\":\"Plot\"},{\"attributes\":{},\"id\":\"1433\",\"type\":\"AllLabels\"},{\"attributes\":{},\"id\":\"1529\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"axis_label\":\"Bohr parameter\",\"coordinates\":null,\"formatter\":{\"id\":\"1432\"},\"group\":null,\"major_label_policy\":{\"id\":\"1433\"},\"ticker\":{\"id\":\"1378\"}},\"id\":\"1377\",\"type\":\"LinearAxis\"},{\"attributes\":{\"coordinates\":null,\"group\":null,\"items\":[{\"id\":\"1580\"},{\"id\":\"1672\"},{\"id\":\"1770\"}],\"location\":\"bottom_right\"},\"id\":\"1545\",\"type\":\"Legend\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1399\"},\"glyph\":{\"id\":\"1400\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1402\"},\"nonselection_glyph\":{\"id\":\"1401\"},\"view\":{\"id\":\"1404\"}},\"id\":\"1403\",\"type\":\"GlyphRenderer\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1615\"},\"glyph\":{\"id\":\"1616\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1618\"},\"nonselection_glyph\":{\"id\":\"1617\"},\"view\":{\"id\":\"1620\"}},\"id\":\"1619\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1530\",\"type\":\"Selection\"},{\"attributes\":{},\"id\":\"1375\",\"type\":\"LinearScale\"},{\"attributes\":{},\"id\":\"1371\",\"type\":\"DataRange1d\"},{\"attributes\":{},\"id\":\"1378\",\"type\":\"BasicTicker\"},{\"attributes\":{\"axis\":{\"id\":\"1377\"},\"coordinates\":null,\"group\":null,\"ticker\":null},\"id\":\"1380\",\"type\":\"Grid\"},{\"attributes\":{\"fill_color\":{\"value\":\"#2ca02c\"},\"hatch_color\":{\"value\":\"#2ca02c\"},\"line_color\":{\"value\":\"#2ca02c\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1710\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"1386\",\"type\":\"WheelZoomTool\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"#ff7f0e\"},\"hatch_alpha\":{\"value\":0.2},\"hatch_color\":{\"value\":\"#ff7f0e\"},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"#ff7f0e\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1618\",\"type\":\"Circle\"},{\"attributes\":{\"axis_label\":\"fold change\",\"coordinates\":null,\"formatter\":{\"id\":\"1429\"},\"group\":null,\"major_label_policy\":{\"id\":\"1430\"},\"ticker\":{\"id\":\"1382\"}},\"id\":\"1381\",\"type\":\"LinearAxis\"},{\"attributes\":{\"axis\":{\"id\":\"1381\"},\"coordinates\":null,\"dimension\":1,\"group\":null,\"ticker\":null},\"id\":\"1384\",\"type\":\"Grid\"},{\"attributes\":{\"fill_color\":{\"value\":\"#1f77b4\"},\"hatch_color\":{\"value\":\"#1f77b4\"},\"line_color\":{\"value\":\"#1f77b4\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1493\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"1382\",\"type\":\"BasicTicker\"},{\"attributes\":{\"label\":{\"value\":\"WT\"},\"renderers\":[{\"id\":\"1713\"}]},\"id\":\"1770\",\"type\":\"LegendItem\"},{\"attributes\":{},\"id\":\"1434\",\"type\":\"UnionRenderers\"},{\"attributes\":{},\"id\":\"1655\",\"type\":\"Selection\"},{\"attributes\":{\"fill_color\":{\"value\":\"#ff7f0e\"},\"hatch_color\":{\"value\":\"#ff7f0e\"},\"line_color\":{\"value\":\"#ff7f0e\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1616\",\"type\":\"Circle\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1709\"},\"glyph\":{\"id\":\"1710\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1712\"},\"nonselection_glyph\":{\"id\":\"1711\"},\"view\":{\"id\":\"1714\"}},\"id\":\"1713\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1390\",\"type\":\"HelpTool\"},{\"attributes\":{},\"id\":\"1432\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{},\"id\":\"1385\",\"type\":\"PanTool\"},{\"attributes\":{\"coordinates\":null,\"data_source\":{\"id\":\"1492\"},\"glyph\":{\"id\":\"1493\"},\"group\":null,\"hover_glyph\":null,\"muted_glyph\":{\"id\":\"1495\"},\"nonselection_glyph\":{\"id\":\"1494\"},\"view\":{\"id\":\"1497\"}},\"id\":\"1496\",\"type\":\"GlyphRenderer\"},{\"attributes\":{},\"id\":\"1435\",\"type\":\"Selection\"},{\"attributes\":{\"overlay\":{\"id\":\"1391\"}},\"id\":\"1387\",\"type\":\"BoxZoomTool\"},{\"attributes\":{\"source\":{\"id\":\"1615\"}},\"id\":\"1620\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1388\",\"type\":\"SaveTool\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"#2ca02c\"},\"hatch_alpha\":{\"value\":0.2},\"hatch_color\":{\"value\":\"#2ca02c\"},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"#2ca02c\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1712\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"1389\",\"type\":\"ResetTool\"},{\"attributes\":{\"line_color\":\"gray\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1400\",\"type\":\"Line\"},{\"attributes\":{\"data\":{\"x\":{\"__ndarray__\":\"Imv99+0UFcAQziXwhZ8SwKKTgK5O3xDAQHs9Z3A9DcBaT4a7L8kHwBZOkutc5QLAcCp1uj+p/r9I6iKM44j6vyC5y2j7E/m/8Fj/0dHW9r+sRJ5k/xb2v9QFdoR7svS/pKdmG21B9L9U/jvtiqrzv2gC55BjD/O/rE3tlZfF8r94pD23c53yv3S7fG/GivK/+NeznDCA8r8MC/xyvXvyvw==\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[20]},\"y\":{\"__ndarray__\":\"dQSx9LXylz9TViOHVQyhP3Uh1REDPaE/INuybB/zoz/65VHb1qymP54snv0JH7E/EF1V+8DZvT8RePjeT37HP6bzMVVegsc/hqNp4zF9yD8x+fXFIbfKP+Ue1mBWHso/4AuZGtIHzD8H9lagURzLP6Fgyoy0G9A/aCuBYZuuzj+INWSbUmrOP01YFYU71M0/p0kqD8HhzT8yJaCaYD7OPw==\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[20]}},\"selected\":{\"id\":\"1655\"},\"selection_policy\":{\"id\":\"1654\"}},\"id\":\"1615\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"label\":{\"value\":\"Q18M\"},\"renderers\":[{\"id\":\"1619\"}]},\"id\":\"1672\",\"type\":\"LegendItem\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#2ca02c\"},\"hatch_alpha\":{\"value\":0.1},\"hatch_color\":{\"value\":\"#2ca02c\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#2ca02c\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1711\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"1654\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"bottom_units\":\"screen\",\"coordinates\":null,\"fill_alpha\":0.5,\"fill_color\":\"lightgrey\",\"group\":null,\"left_units\":\"screen\",\"level\":\"overlay\",\"line_alpha\":1.0,\"line_color\":\"black\",\"line_dash\":[4,4],\"line_width\":2,\"right_units\":\"screen\",\"syncable\":false,\"top_units\":\"screen\"},\"id\":\"1391\",\"type\":\"BoxAnnotation\"},{\"attributes\":{\"data\":{\"x\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[400]},\"y\":{\"__ndarray__\":\"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\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[400]}},\"selected\":{\"id\":\"1435\"},\"selection_policy\":{\"id\":\"1434\"}},\"id\":\"1399\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.2},\"fill_color\":{\"value\":\"#1f77b4\"},\"hatch_alpha\":{\"value\":0.2},\"hatch_color\":{\"value\":\"#1f77b4\"},\"line_alpha\":{\"value\":0.2},\"line_color\":{\"value\":\"#1f77b4\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1495\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"1750\",\"type\":\"UnionRenderers\"},{\"attributes\":{\"line_alpha\":0.1,\"line_color\":\"gray\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1401\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"1709\"}},\"id\":\"1714\",\"type\":\"CDSView\"},{\"attributes\":{\"line_alpha\":0.2,\"line_color\":\"gray\",\"line_width\":2,\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1402\",\"type\":\"Line\"},{\"attributes\":{\"source\":{\"id\":\"1492\"}},\"id\":\"1497\",\"type\":\"CDSView\"},{\"attributes\":{\"data\":{\"x\":{\"__ndarray__\":\"6DMd8Dk5CMBWZE6hyG0DwLQOJrKLY/+/sHRP70UT9r8AlRJLwQvpv2DJesaTlsC/sKfCPWXo0z/wHZyJIxjiP7j/AGbIV+U/6Lf5oBax6T9I9SZn0JvrP2gtOpSUP+4/CDPemU4T7z+wCAZxPzbwP7BrEnBFyfA/TGxGXnsW8T+gjJY2bkHxP3g1Z3WAVPE/jCZydhhe8T9g4i0vrmPxPw==\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[20]},\"y\":{\"__ndarray__\":\"d+RFSUnWpD8us9NmNaKyP5wsttrd87o/2FbD+3iIyT9nXi2TGfTVP+G9gO/jZ90/RB+czER75D/UwdPJmdvjP3FuGNt5heU/siGXPWSH5T9OuTRcMsXlP6aWlmJoM+c/VzLChZhB5j96TMER+7zmPyDpIQvydec/ZGjtf/gn5z9nifjlf/XnP1TBiPw8mug/nWwV07Ij6D9JMT7o3nfoPw==\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[20]}},\"selected\":{\"id\":\"1751\"},\"selection_policy\":{\"id\":\"1750\"}},\"id\":\"1709\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"label\":{\"value\":\"Q18A\"},\"renderers\":[{\"id\":\"1496\"}]},\"id\":\"1580\",\"type\":\"LegendItem\"},{\"attributes\":{\"source\":{\"id\":\"1399\"}},\"id\":\"1404\",\"type\":\"CDSView\"},{\"attributes\":{},\"id\":\"1373\",\"type\":\"LinearScale\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#ff7f0e\"},\"hatch_alpha\":{\"value\":0.1},\"hatch_color\":{\"value\":\"#ff7f0e\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#ff7f0e\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1617\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"1429\",\"type\":\"BasicTickFormatter\"},{\"attributes\":{\"end\":6,\"start\":-6},\"id\":\"1369\",\"type\":\"Range1d\"},{\"attributes\":{},\"id\":\"1430\",\"type\":\"AllLabels\"},{\"attributes\":{\"fill_alpha\":{\"value\":0.1},\"fill_color\":{\"value\":\"#1f77b4\"},\"hatch_alpha\":{\"value\":0.1},\"hatch_color\":{\"value\":\"#1f77b4\"},\"line_alpha\":{\"value\":0.1},\"line_color\":{\"value\":\"#1f77b4\"},\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}},\"id\":\"1494\",\"type\":\"Circle\"},{\"attributes\":{},\"id\":\"1751\",\"type\":\"Selection\"},{\"attributes\":{\"tools\":[{\"id\":\"1385\"},{\"id\":\"1386\"},{\"id\":\"1387\"},{\"id\":\"1388\"},{\"id\":\"1389\"},{\"id\":\"1390\"}]},\"id\":\"1392\",\"type\":\"Toolbar\"},{\"attributes\":{\"data\":{\"x\":{\"__ndarray__\":\"+E+GrgtB7L+KnUZ7DEvqv7y6FHEA/Oe/cE65WvDh479obqjFEjfZv4CodZBKYNO/AJsarsZNmr+ALaDTkgG9P2SQeIOGqeU/QnJhM84v9T8eESG298L+P+kO4ZHsawNA+V2RIkGqBUCLsUmw/T4GQA11Q7cipAdATXP+BhLUB0D9Nug7/aQIQKVXSJuk5whAe+yWnOdACUCb/BMG9IsJQENixDnhtQlAM3hL5tLJCUAxlIeanNMJQGssPQwL2QlAeRy/623bCUA=\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[25]},\"y\":{\"__ndarray__\":\"MXnHA29Uyz8LcnQ/9m3QP399K9F4MdI/j5mUCWkC1j9JbsLjD8baPxzDVroru94/AqxLWOR64D+jsBIto9PhP9WBX+TaZOU/+ZH5Z31o6D/LcXL8M8rqP7d9QbGBl+s/ayC2eMld7j8PiXhxxg3wP3FY202ulu0/juvuYbDh7z9/Kes688HtP28yEp0u5e8/BAEL/PIc7z/kj2guinjwP7+WQ/5jnO8/5IfoE2UM8D9UQ1cF+RfwPzncSkqbGfA/zO+kQxvR8D8=\",\"dtype\":\"float64\",\"order\":\"little\",\"shape\":[25]}},\"selected\":{\"id\":\"1530\"},\"selection_policy\":{\"id\":\"1529\"}},\"id\":\"1492\",\"type\":\"ColumnDataSource\"},{\"attributes\":{\"coordinates\":null,\"group\":null},\"id\":\"1426\",\"type\":\"Title\"}],\"root_ids\":[\"1368\"]},\"title\":\"Bokeh Application\",\"version\":\"2.4.2\"}};\n", " const render_items = [{\"docid\":\"46911933-48d0-484d-a7f6-826d9d466119\",\"root_ids\":[\"1368\"],\"roots\":{\"1368\":\"c92c8c17-5640-451e-b683-fdcb3dcf55ec\"}}];\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", " let attempts = 0;\n", " const timer = setInterval(function(root) {\n", " if (root.Bokeh !== undefined) {\n", " clearInterval(timer);\n", " embed_document(root);\n", " } else {\n", " attempts++;\n", " if (attempts > 100) {\n", " clearInterval(timer);\n", " console.log(\"Bokeh: ERROR: Unable to run BokehJS code because BokehJS library is missing\");\n", " }\n", " }\n", " }, 10, root)\n", " }\n", "})(window);" ], "application/vnd.bokehjs_exec.v0+json": "" }, "metadata": { "application/vnd.bokehjs_exec.v0+json": { "id": "1368" } }, "output_type": "display_data" } ], "source": [ "for i, (name, group) in enumerate(df.groupby('genotype')):\n", " p.circle(\n", " x=bohr_parameter(group['[IPTG] (mM)'], RK[name]),\n", " y=group['fold change'],\n", " color=palette[i],\n", " legend_label=name,\n", " )\n", " \n", "p.legend.location = 'bottom_right'\n", "\n", "bokeh.io.show(p)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "When plotted this way, all data fall on the same curve, clearly demonstrating data collapse. This suggests that indeed the only thing varying between the different mutants is the parameter $R/K$, the number of repressors divided by the repressor-operator dissociation constant." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Computing environment" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "tags": [ "hide-input" ] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Python implementation: CPython\n", "Python version : 3.9.12\n", "IPython version : 8.3.0\n", "\n", "numpy : 1.21.5\n", "pandas : 1.4.2\n", "bokeh : 2.4.2\n", "jupyterlab: 3.3.2\n", "\n" ] } ], "source": [ "%load_ext watermark\n", "%watermark -v -p numpy,pandas,bokeh,jupyterlab" ] } ], "metadata": { "anaconda-cloud": {}, "kernelspec": { "display_name": "Python 3 (ipykernel)", "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.9.12" } }, "nbformat": 4, "nbformat_minor": 4 }