{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# R3. Manipulating data frames\n", "\n", "*This recitation was written by Sanjana Kulkarni with edits by Justin Bois.*\n", "\n", "
" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "nbsphinx": "hidden", "tags": [] }, "outputs": [], "source": [ "# Colab setup ------------------\n", "import os, sys, subprocess\n", "if \"google.colab\" in sys.modules:\n", " cmd = \"pip install --upgrade watermark\"\n", " process = subprocess.Popen(cmd.split(), stdout=subprocess.PIPE, stderr=subprocess.PIPE)\n", " stdout, stderr = process.communicate()\n", " data_path = \"https://s3.amazonaws.com/bebi103.caltech.edu/data/\"\n", "else:\n", " data_path = \"../data/\"\n", "# ------------------------------" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "
\n", " \n", " Loading BokehJS ...\n", "
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "(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", " 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(\"de96a557-2cd2-4340-8996-171dc7441cf5\");\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", " 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", " const js_urls = [\"https://cdn.bokeh.org/bokeh/release/bokeh-3.2.1.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-3.2.1.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-3.2.1.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-3.2.1.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-mathjax-3.2.1.min.js\"];\n", " const css_urls = [];\n", "\n", " const inline_js = [ function(Bokeh) {\n", " Bokeh.set_log_level(\"info\");\n", " },\n", "function(Bokeh) {\n", " }\n", " ];\n", "\n", " function run_inline_js() {\n", " if (root.Bokeh !== undefined || force === true) {\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(\"de96a557-2cd2-4340-8996-171dc7441cf5\")).parents('.cell').data().cell;\n", " cell.output_area.append_execute_result(NB_LOAD_WARNING)\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": "(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 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(\"de96a557-2cd2-4340-8996-171dc7441cf5\");\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 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 const js_urls = [\"https://cdn.bokeh.org/bokeh/release/bokeh-3.2.1.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-gl-3.2.1.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-widgets-3.2.1.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-tables-3.2.1.min.js\", \"https://cdn.bokeh.org/bokeh/release/bokeh-mathjax-3.2.1.min.js\"];\n const css_urls = [];\n\n const inline_js = [ function(Bokeh) {\n Bokeh.set_log_level(\"info\");\n },\nfunction(Bokeh) {\n }\n ];\n\n function run_inline_js() {\n if (root.Bokeh !== undefined || force === true) {\n for (let i = 0; i < inline_js.length; i++) {\n inline_js[i].call(root, root.Bokeh);\n }\nif (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(\"de96a557-2cd2-4340-8996-171dc7441cf5\")).parents('.cell').data().cell;\n cell.output_area.append_execute_result(NB_LOAD_WARNING)\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 string\n", "\n", "import numpy as np\n", "import pandas as pd\n", "\n", "import scipy.optimize\n", "\n", "import bokeh.plotting\n", "import bokeh.io\n", "\n", "bokeh.io.output_notebook()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Data from Plate Readers\n", "\n", "In this recitation, we will practice some of the reshaping techniques you have been using in your homework with another example of 96-well plate reader data. Plate readers generally output Excel files, after which the data is tediously copy-pasted into Prism (or another Excel file) for plotting and analysis. We will use various Python functions to manipulate our data into tidy format and analyze them. You can download the data files here:\n", "\n", "- [https://s3.amazonaws.com/bebi103.caltech.edu/data/20200117-1.xlsx](https://s3.amazonaws.com/bebi103.caltech.edu/data/20200117-1.xlsx)\n", "- [https://s3.amazonaws.com/bebi103.caltech.edu/data/20200117-2.xlsx](https://s3.amazonaws.com/bebi103.caltech.edu/data/20200117-2.xlsx)\n", "- [https://s3.amazonaws.com/bebi103.caltech.edu/data/20200117-3.xlsx](https://s3.amazonaws.com/bebi103.caltech.edu/data/20200117-3.xlsx)\n", "- [https://s3.amazonaws.com/bebi103.caltech.edu/data/20200117-4.xlsx](https://s3.amazonaws.com/bebi103.caltech.edu/data/20200117-4.xlsx)\n", "- [https://s3.amazonaws.com/bebi103.caltech.edu/data/20200117-5.xlsx](https://s3.amazonaws.com/bebi103.caltech.edu/data/20200117-5.xlsx)\n", "\n", "\n", "This data was collected by Sanjana Kulkarni and is an example of an enzyme-linked immunosorbance assay (ELISA). This assay measures the relative binding affinities between protein pairs, such as antibodies and the antigens to which they bind. The antigen is one of the surface glycoproteins of hepatitis C virus, and the antibodies are **broadly neutralizing antibodies (bNAbs)** isolated from hepatitis C virus patients. Stronger binding interactions result in higher observable fluorescence. \n", "\n", "The plate reader measures absorbance at 450 nm because the chromogenic substrate produces a yellow-ish color when it is protonated by a strong acid. As in the homework, we are dealing with data in a 96-well format. Below is some other important information about the plate set up (with a diagram because a picture is worth a thousand words):\n", "\n", "
\n", " \n", "![plate setup](plate_setup.png)\n", " \n", "
\n", "\n", "We will first make a list of antibody concentrations, which will be very handy later on. Since the concentrations are serially diluted 1:3 across the plate, we can use an exponential function in a list comprehension to do this:" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "# Units are in ng/mL\n", "ab_concentrations = [10000 / 3 ** i for i in range(12)]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We will first read in the files, and look at one of them to determine how best to extract the data set. For our purposes, we not keep the metadata, since the main purpose of this exercise is to learn about manipulating data frames. Note that in general you should keep all of the metadata you can." ] }, { "cell_type": "code", "execution_count": 4, "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", " \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", " \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", " \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", " \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", " \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", " \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", " \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", " \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", " \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", " \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", " \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", " \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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Unnamed: 0Unnamed: 1Unnamed: 2Unnamed: 3Unnamed: 4Unnamed: 5Unnamed: 6Unnamed: 7Unnamed: 8Unnamed: 9Unnamed: 10Unnamed: 11Unnamed: 12Unnamed: 13Unnamed: 14
0Software Version3.08.01NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
1NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
2Experiment File Path:C:\\Users\\Chou Lab\\Desktop\\Bjorkman\\Andrew\\2001...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
3Protocol File Path:NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
4Plate NumberPlate 1NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
5Date2020-01-17 00:00:00NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
6Time15:13:46NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
7Reader Type:Synergy Neo2NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
8Reader Serial Number:1910162NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
9Reading TypeReaderNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
10NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
11Procedure DetailsNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
12Plate Type96 WELL PLATE (Use plate lid)NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
13Eject plate on completionNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
14ReadAbsorbance EndpointNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
15NaNFull PlateNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
16NaNWavelengths: 450NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
17NaNRead Speed: Normal, Delay: 50 msec, Measurem...NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
18NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
19ResultsNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
20Actual Temperature:21NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
21NaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaNNaN
22NaNNaN1.0002.0003.0004.0005.0006.0007.0008.0009.00010.00011.00012.000NaN
23NaNA3.1042.9002.8492.7562.4021.7210.9540.4520.1900.0960.0630.055450.0
24NaNB3.0222.6102.5652.7402.2381.6220.9460.4220.1860.0920.0660.054450.0
25NaNC2.8942.7862.7022.5442.2521.5700.8640.3740.1650.0910.0630.054450.0
26NaND2.7242.7492.7762.5952.1531.5760.8610.3760.1670.0880.0630.053450.0
27NaNE2.6342.6532.5962.4492.1391.4470.7550.3300.1680.0830.0770.053450.0
28NaNF2.7352.7472.7262.5462.1551.4350.7720.3360.1510.0860.0620.059450.0
29NaNG1.1781.1030.8170.5790.3190.1540.0790.0680.0560.0610.0510.049450.0
30NaNH1.3051.0610.8840.5490.2990.1650.0840.0610.0530.0560.0500.051450.0
\n", "
" ], "text/plain": [ " Unnamed: 0 \\\n", "0 Software Version \n", "1 NaN \n", "2 Experiment File Path: \n", "3 Protocol File Path: \n", "4 Plate Number \n", "5 Date \n", "6 Time \n", "7 Reader Type: \n", "8 Reader Serial Number: \n", "9 Reading Type \n", "10 NaN \n", "11 Procedure Details \n", "12 Plate Type \n", "13 Eject plate on completion \n", "14 Read \n", "15 NaN \n", "16 NaN \n", "17 NaN \n", "18 NaN \n", "19 Results \n", "20 Actual Temperature: \n", "21 NaN \n", "22 NaN \n", "23 NaN \n", "24 NaN \n", "25 NaN \n", "26 NaN \n", "27 NaN \n", "28 NaN \n", "29 NaN \n", "30 NaN \n", "\n", " Unnamed: 1 Unnamed: 2 Unnamed: 3 \\\n", "0 3.08.01 NaN NaN \n", "1 NaN NaN NaN \n", "2 C:\\Users\\Chou Lab\\Desktop\\Bjorkman\\Andrew\\2001... NaN NaN \n", "3 NaN NaN NaN \n", "4 Plate 1 NaN NaN \n", "5 2020-01-17 00:00:00 NaN NaN \n", "6 15:13:46 NaN NaN \n", "7 Synergy Neo2 NaN NaN \n", "8 1910162 NaN NaN \n", "9 Reader NaN NaN \n", "10 NaN NaN NaN \n", "11 NaN NaN NaN \n", "12 96 WELL PLATE (Use plate lid) NaN NaN \n", "13 NaN NaN NaN \n", "14 Absorbance Endpoint NaN NaN \n", "15 Full Plate NaN NaN \n", "16 Wavelengths: 450 NaN NaN \n", "17 Read Speed: Normal, Delay: 50 msec, Measurem... NaN NaN \n", "18 NaN NaN NaN \n", "19 NaN NaN NaN \n", "20 21 NaN NaN \n", "21 NaN NaN NaN \n", "22 NaN 1.000 2.000 \n", "23 A 3.104 2.900 \n", "24 B 3.022 2.610 \n", "25 C 2.894 2.786 \n", "26 D 2.724 2.749 \n", "27 E 2.634 2.653 \n", "28 F 2.735 2.747 \n", "29 G 1.178 1.103 \n", "30 H 1.305 1.061 \n", "\n", " Unnamed: 4 Unnamed: 5 Unnamed: 6 Unnamed: 7 Unnamed: 8 Unnamed: 9 \\\n", "0 NaN NaN NaN NaN NaN NaN \n", "1 NaN NaN NaN NaN NaN NaN \n", "2 NaN NaN NaN NaN NaN NaN \n", "3 NaN NaN NaN NaN NaN NaN \n", "4 NaN NaN NaN NaN NaN NaN \n", "5 NaN NaN NaN NaN NaN NaN \n", "6 NaN NaN NaN NaN NaN NaN \n", "7 NaN NaN NaN NaN NaN NaN \n", "8 NaN NaN NaN NaN NaN NaN \n", "9 NaN NaN NaN NaN NaN NaN \n", "10 NaN NaN NaN NaN NaN NaN \n", "11 NaN NaN NaN NaN NaN NaN \n", "12 NaN NaN NaN NaN NaN NaN \n", "13 NaN NaN NaN NaN NaN NaN \n", "14 NaN NaN NaN NaN NaN NaN \n", "15 NaN NaN NaN NaN NaN NaN \n", "16 NaN NaN NaN NaN NaN NaN \n", "17 NaN NaN NaN NaN NaN NaN \n", "18 NaN NaN NaN NaN NaN NaN \n", "19 NaN NaN NaN NaN NaN NaN \n", "20 NaN NaN NaN NaN NaN NaN \n", "21 NaN NaN NaN NaN NaN NaN \n", "22 3.000 4.000 5.000 6.000 7.000 8.000 \n", "23 2.849 2.756 2.402 1.721 0.954 0.452 \n", "24 2.565 2.740 2.238 1.622 0.946 0.422 \n", "25 2.702 2.544 2.252 1.570 0.864 0.374 \n", "26 2.776 2.595 2.153 1.576 0.861 0.376 \n", "27 2.596 2.449 2.139 1.447 0.755 0.330 \n", "28 2.726 2.546 2.155 1.435 0.772 0.336 \n", "29 0.817 0.579 0.319 0.154 0.079 0.068 \n", "30 0.884 0.549 0.299 0.165 0.084 0.061 \n", "\n", " Unnamed: 10 Unnamed: 11 Unnamed: 12 Unnamed: 13 Unnamed: 14 \n", "0 NaN NaN NaN NaN NaN \n", "1 NaN NaN NaN NaN NaN \n", "2 NaN NaN NaN NaN NaN \n", "3 NaN NaN NaN NaN NaN \n", "4 NaN NaN NaN NaN NaN \n", "5 NaN NaN NaN NaN NaN \n", "6 NaN NaN NaN NaN NaN \n", "7 NaN NaN NaN NaN NaN \n", "8 NaN NaN NaN NaN NaN \n", "9 NaN NaN NaN NaN NaN \n", "10 NaN NaN NaN NaN NaN \n", "11 NaN NaN NaN NaN NaN \n", "12 NaN NaN NaN NaN NaN \n", "13 NaN NaN NaN NaN NaN \n", "14 NaN NaN NaN NaN NaN \n", "15 NaN NaN NaN NaN NaN \n", "16 NaN NaN NaN NaN NaN \n", "17 NaN NaN NaN NaN NaN \n", "18 NaN NaN NaN NaN NaN \n", "19 NaN NaN NaN NaN NaN \n", "20 NaN NaN NaN NaN NaN \n", "21 NaN NaN NaN NaN NaN \n", "22 9.000 10.000 11.000 12.000 NaN \n", "23 0.190 0.096 0.063 0.055 450.0 \n", "24 0.186 0.092 0.066 0.054 450.0 \n", "25 0.165 0.091 0.063 0.054 450.0 \n", "26 0.167 0.088 0.063 0.053 450.0 \n", "27 0.168 0.083 0.077 0.053 450.0 \n", "28 0.151 0.086 0.062 0.059 450.0 \n", "29 0.056 0.061 0.051 0.049 450.0 \n", "30 0.053 0.056 0.050 0.051 450.0 " ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "fnames = [f\"20200117-{i}.xlsx\" for i in range(1, 6)]\n", "\n", "df1 = pd.read_excel(os.path.join(data_path, fnames[0]))\n", "\n", "# Take a look\n", "df1" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "It looks like we can splice out each 96 well plate by keeping only rows 23 to the end and columns 1 to the end. This will work for any excel file taken directly from this particular BioTek plate reader. We will also convert the first column (alphabetic plate rows) to the index column to help with melting the dataframe later on. " ] }, { "cell_type": "code", "execution_count": 5, "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", " \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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Unnamed: 0Unnamed: 2Unnamed: 3Unnamed: 4Unnamed: 5Unnamed: 6Unnamed: 7Unnamed: 8Unnamed: 9Unnamed: 10Unnamed: 11Unnamed: 12Unnamed: 13Unnamed: 14
NaNNaN1.0002.0003.0004.0005.0006.0007.0008.0009.00010.00011.00012.000NaN
ANaN3.1042.9002.8492.7562.4021.7210.9540.4520.1900.0960.0630.055450.0
BNaN3.0222.6102.5652.7402.2381.6220.9460.4220.1860.0920.0660.054450.0
CNaN2.8942.7862.7022.5442.2521.5700.8640.3740.1650.0910.0630.054450.0
DNaN2.7242.7492.7762.5952.1531.5760.8610.3760.1670.0880.0630.053450.0
\n", "
" ], "text/plain": [ " Unnamed: 0 Unnamed: 2 Unnamed: 3 Unnamed: 4 Unnamed: 5 Unnamed: 6 \\\n", "NaN NaN 1.000 2.000 3.000 4.000 5.000 \n", "A NaN 3.104 2.900 2.849 2.756 2.402 \n", "B NaN 3.022 2.610 2.565 2.740 2.238 \n", "C NaN 2.894 2.786 2.702 2.544 2.252 \n", "D NaN 2.724 2.749 2.776 2.595 2.153 \n", "\n", " Unnamed: 7 Unnamed: 8 Unnamed: 9 Unnamed: 10 Unnamed: 11 \\\n", "NaN 6.000 7.000 8.000 9.000 10.000 \n", "A 1.721 0.954 0.452 0.190 0.096 \n", "B 1.622 0.946 0.422 0.186 0.092 \n", "C 1.570 0.864 0.374 0.165 0.091 \n", "D 1.576 0.861 0.376 0.167 0.088 \n", "\n", " Unnamed: 12 Unnamed: 13 Unnamed: 14 \n", "NaN 11.000 12.000 NaN \n", "A 0.063 0.055 450.0 \n", "B 0.066 0.054 450.0 \n", "C 0.063 0.054 450.0 \n", "D 0.063 0.053 450.0 " ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df1 = pd.read_excel(os.path.join(data_path, fnames[0]), skiprows=22, index_col=1)\n", "\n", "# Look at the data frame again\n", "df1.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Reshaping the data set\n", "\n", "The first and last columns and the first row can be removed, and we will rename the columns to be the antibody concentrations from our list. We then rename the index and the column header (the name for all of the columns) to useful labels, and we melt! " ] }, { "cell_type": "code", "execution_count": 6, "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", " \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", " \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", "
Ab_Conc_ng_mL10000.0000003333.3333331111.111111370.370370123.45679041.15226313.7174214.5724741.5241580.5080530.1693510.056450
Antibody
A3.1042.9002.8492.7562.4021.7210.9540.4520.1900.0960.0630.055
B3.0222.6102.5652.7402.2381.6220.9460.4220.1860.0920.0660.054
C2.8942.7862.7022.5442.2521.5700.8640.3740.1650.0910.0630.054
D2.7242.7492.7762.5952.1531.5760.8610.3760.1670.0880.0630.053
E2.6342.6532.5962.4492.1391.4470.7550.3300.1680.0830.0770.053
\n", "
" ], "text/plain": [ "Ab_Conc_ng_mL 10000.000000 3333.333333 1111.111111 370.370370 \\\n", "Antibody \n", "A 3.104 2.900 2.849 2.756 \n", "B 3.022 2.610 2.565 2.740 \n", "C 2.894 2.786 2.702 2.544 \n", "D 2.724 2.749 2.776 2.595 \n", "E 2.634 2.653 2.596 2.449 \n", "\n", "Ab_Conc_ng_mL 123.456790 41.152263 13.717421 4.572474 \\\n", "Antibody \n", "A 2.402 1.721 0.954 0.452 \n", "B 2.238 1.622 0.946 0.422 \n", "C 2.252 1.570 0.864 0.374 \n", "D 2.153 1.576 0.861 0.376 \n", "E 2.139 1.447 0.755 0.330 \n", "\n", "Ab_Conc_ng_mL 1.524158 0.508053 0.169351 0.056450 \n", "Antibody \n", "A 0.190 0.096 0.063 0.055 \n", "B 0.186 0.092 0.066 0.054 \n", "C 0.165 0.091 0.063 0.054 \n", "D 0.167 0.088 0.063 0.053 \n", "E 0.168 0.083 0.077 0.053 " ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df1 = df1.iloc[1:, 1:-1]\n", "df1.columns = ab_concentrations\n", "\n", "df1.index.name = 'Antibody'\n", "df1.columns.name='Ab_Conc_ng_mL'\n", "\n", "df1.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we are set to reset the index and melt, preserving the the antibody column as an identifier variable." ] }, { "cell_type": "code", "execution_count": 7, "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", "
AntibodyAb_Conc_ng_mLOD450
0A10000.03.104
1B10000.03.022
2C10000.02.894
3D10000.02.724
4E10000.02.634
\n", "
" ], "text/plain": [ " Antibody Ab_Conc_ng_mL OD450\n", "0 A 10000.0 3.104\n", "1 B 10000.0 3.022\n", "2 C 10000.0 2.894\n", "3 D 10000.0 2.724\n", "4 E 10000.0 2.634" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Rename columns -- OD450 means optical density at 450 nm\n", "df1 = df1.reset_index().melt(id_vars=\"Antibody\", value_name=\"OD450\")\n", "\n", "# Take a look\n", "df1.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Putting it all together into a function, we can tidy all three excel files and then concatenate them into a single dataframe. " ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "def read_elisa_data(fname):\n", " # Skip the first 22 rows, and make the row names to indices\n", " df = pd.read_excel(fname, skiprows=22, index_col=1)\n", "\n", " # Remove the first and last columns and the first row\n", " df = df.iloc[1:, 1:-1]\n", "\n", " # Rename the columns to antibody concentrations\n", " df.columns = ab_concentrations\n", "\n", " # Assign informative labels\n", " df.index.name = \"Antibody\"\n", " df.columns.name = \"Ab_Conc_ng_mL\"\n", "\n", " # Melt! Set the new column name as OD450\n", " return df.reset_index().melt(id_vars=\"Antibody\", value_name=\"OD450\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Each plate has 4 different antibodies, but only one distinct antigen. In this set of experiments, there are two different hepatitis C virus strains and 2 possible mutants (in addition to wild type). The single mutants are called \"Q412R\" and \"Y527H,\" which denotes the single amino acid change in them. This information wasn't stored in the instrument, so it will be manually added to the dataframe. Gotta keep good notes in lab!\n", "\n", "I will make a dictionary mapping the plate numbers to the strain names. The plate number (1-5) will be extracted using the `rfind` method of strings, which returns the index of a particular character. Finally, we use the dictionary to get the strain names and set it to a new column called `Antigen`. We then separate the `Strain` and `Variant` (either wild-type or mutant) by splitting the string at the hyphen. " ] }, { "cell_type": "code", "execution_count": 9, "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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
AntibodyAb_Conc_ng_mLOD450StrainVariant
0A10000.03.1041a53Q412R
1B10000.03.0221a53Q412R
2C10000.02.8941a53Q412R
3D10000.02.7241a53Q412R
4E10000.02.6341a53Q412R
\n", "
" ], "text/plain": [ " Antibody Ab_Conc_ng_mL OD450 Strain Variant\n", "0 A 10000.0 3.104 1a53 Q412R\n", "1 B 10000.0 3.022 1a53 Q412R\n", "2 C 10000.0 2.894 1a53 Q412R\n", "3 D 10000.0 2.724 1a53 Q412R\n", "4 E 10000.0 2.634 1a53 Q412R" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Dictionary mapping plate number to strain-variant name.\n", "plateIDdict = {\n", " \"1\": \"1a53-Q412R\",\n", " \"2\": \"1a157-Q412R\",\n", " \"3\": \"1a157-Y527H\",\n", " \"4\": \"1a53-WT\",\n", " \"5\": \"1a157-WT\",\n", "}\n", "\n", "df = pd.concat(\n", " [read_elisa_data(os.path.join(data_path, fn)) for fn in fnames],\n", " keys=[plateIDdict[fn[fn.rfind(\"-\") + 1 : fn.rfind(\".\")]] for fn in fnames],\n", " names=[\"Antigen\"],\n", ").reset_index(level=\"Antigen\")\n", "\n", "# Separate the strain and variant from the \"Antigen\" column\n", "df[[\"Strain\", \"Variant\"]] = df[\"Antigen\"].str.split(\"-\", expand=True)\n", "\n", "# Remove the \"Antigen\" column\n", "df = df.drop(columns=[\"Antigen\"])\n", "\n", "# Take a look at data frame\n", "df.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The very last thing we need to do is rename the rows by antibody. Pairs of adjacent rows are technical replicates, and there are 4 unique antibodies in each plate. \n", "\n", "Rows A and B = HEPC74\n", "\n", "Rows C and D = HEPC74rua\n", "\n", "Rows E and F = HEPC153\n", "\n", "Rows G and H = HEPC153rua\n", "\n", "There are many ways to do this, but I made a dictionary mapping row letters to antibodies and will use it to replace the values in the `row` column of the data frame. " ] }, { "cell_type": "code", "execution_count": 10, "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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
AntibodyAb_Conc_ng_mLOD450StrainVariant
0HEPC7410000.03.1041a53Q412R
1HEPC7410000.03.0221a53Q412R
2HEPC74rua10000.02.8941a53Q412R
3HEPC74rua10000.02.7241a53Q412R
4HEPC15310000.02.6341a53Q412R
\n", "
" ], "text/plain": [ " Antibody Ab_Conc_ng_mL OD450 Strain Variant\n", "0 HEPC74 10000.0 3.104 1a53 Q412R\n", "1 HEPC74 10000.0 3.022 1a53 Q412R\n", "2 HEPC74rua 10000.0 2.894 1a53 Q412R\n", "3 HEPC74rua 10000.0 2.724 1a53 Q412R\n", "4 HEPC153 10000.0 2.634 1a53 Q412R" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Get string of letters (it's not difficult to write out manually, \n", "# but the string package is very useful in more complex cases)\n", "rows = string.ascii_uppercase[:8]\n", "antibodies = [\"HEPC74\"] * 2 + [\"HEPC74rua\"] * 2 + [\"HEPC153\"] * 2 + [\"HEPC153rua\"] * 2\n", "\n", "# Make dictionary\n", "ab_dict = dict(list(zip(rows, antibodies)))\n", "\n", "# Replace row names with antibodies\n", "df[\"Antibody\"] = df[\"Antibody\"].map(ab_dict)\n", "\n", "# Take a look at data frame\n", "df.head()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And now we're done! Everything is tidy, so each absorbance value is associated with a single antigen, antibody, and antibody concentration. Note that the antigen concentrations are all the same (1 μg/mL) in each plate. We can take a look at the mean and standard deviation of the absorbances and verify that they make some sense and we haven't accidentally reordered things in the data frame—larger antibody concentrations are associated with larger absorbances. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Computing summary statistics\n", "\n", "You can also apply methods to groups within a data frame. This is done using the `apply()` method of a `GroupBy` object. An apply operation can take a long time with larger sets of data and many levels, so you can time how long an apply operation will take using [tqdm](https://tqdm.github.io/). The following will be helpful to get going:\n", "\n", "```python\n", "import tqdm\n", "tqdm.tqdm.pandas()\n", "pd.groupby([groups]).progress_apply(process_group)\n", "```\n", "\n", "Since we are not using the apply function (I will actually apply a logistic model later in base Python), we won't go through the details here. \n", "\n", "`agg()` takes a single function (or list of functions) that accept a `pd.Series`, `np.array`, `list`, or similar and returns a single value summarizing the input. The `groupby()` `agg()` combination will do the hard work of *agg*regating each column of each group with the function/functions passed. Consider calculating the mean and standard deviation of the absorbances)." ] }, { "cell_type": "code", "execution_count": 11, "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", " \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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
OD450
meanstd
StrainVariantAntibodyAb_Conc_ng_mL
1a157Q412RHEPC1530.0564500.06000.005657
0.1693510.06800.004243
0.5080530.07350.007778
1.5241580.10900.002828
4.5724740.21750.007778
..................
1a53WTHEPC74rua123.4567902.33050.099702
370.3703702.77500.022627
1111.1111112.87300.066468
3333.3333332.77950.170413
10000.0000002.77300.261630
\n", "

240 rows × 2 columns

\n", "
" ], "text/plain": [ " OD450 \n", " mean std\n", "Strain Variant Antibody Ab_Conc_ng_mL \n", "1a157 Q412R HEPC153 0.056450 0.0600 0.005657\n", " 0.169351 0.0680 0.004243\n", " 0.508053 0.0735 0.007778\n", " 1.524158 0.1090 0.002828\n", " 4.572474 0.2175 0.007778\n", "... ... ...\n", "1a53 WT HEPC74rua 123.456790 2.3305 0.099702\n", " 370.370370 2.7750 0.022627\n", " 1111.111111 2.8730 0.066468\n", " 3333.333333 2.7795 0.170413\n", " 10000.000000 2.7730 0.261630\n", "\n", "[240 rows x 2 columns]" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df_summary = df.groupby([\"Strain\", \"Variant\", \"Antibody\", \"Ab_Conc_ng_mL\"]).agg(\n", " [np.mean, np.std]\n", ")\n", "\n", "df_summary" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Note that the result has a multiindex for the rows and also for the columns. We can clean this up, first by renaming the columns to have a single level, and then by resetting the row index with the `reset_index()` method." ] }, { "cell_type": "code", "execution_count": 12, "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", " \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", " \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", "
StrainVariantAntibodyAb_Conc_ng_mLOD450 meanOD450 std
01a157Q412RHEPC1530.0564500.06000.005657
11a157Q412RHEPC1530.1693510.06800.004243
21a157Q412RHEPC1530.5080530.07350.007778
31a157Q412RHEPC1531.5241580.10900.002828
41a157Q412RHEPC1534.5724740.21750.007778
.....................
2351a53WTHEPC74rua123.4567902.33050.099702
2361a53WTHEPC74rua370.3703702.77500.022627
2371a53WTHEPC74rua1111.1111112.87300.066468
2381a53WTHEPC74rua3333.3333332.77950.170413
2391a53WTHEPC74rua10000.0000002.77300.261630
\n", "

240 rows × 6 columns

\n", "
" ], "text/plain": [ " Strain Variant Antibody Ab_Conc_ng_mL OD450 mean OD450 std\n", "0 1a157 Q412R HEPC153 0.056450 0.0600 0.005657\n", "1 1a157 Q412R HEPC153 0.169351 0.0680 0.004243\n", "2 1a157 Q412R HEPC153 0.508053 0.0735 0.007778\n", "3 1a157 Q412R HEPC153 1.524158 0.1090 0.002828\n", "4 1a157 Q412R HEPC153 4.572474 0.2175 0.007778\n", ".. ... ... ... ... ... ...\n", "235 1a53 WT HEPC74rua 123.456790 2.3305 0.099702\n", "236 1a53 WT HEPC74rua 370.370370 2.7750 0.022627\n", "237 1a53 WT HEPC74rua 1111.111111 2.8730 0.066468\n", "238 1a53 WT HEPC74rua 3333.333333 2.7795 0.170413\n", "239 1a53 WT HEPC74rua 10000.000000 2.7730 0.261630\n", "\n", "[240 rows x 6 columns]" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Rename the columns to get a single index\n", "df_summary.columns = [\" \".join(col).strip() for col in df_summary.columns]\n", "\n", "# Convert row index into columns\n", "df_summary = df_summary.reset_index()\n", "\n", "df_summary" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Generating plots\n", "\n", "In this experiment, we are interested in determining if the different antigen variants bind differently to the same antibody. So we will plot each antibody on a separate plot and color the antigen variants to see the dose-response curve. ELISA data is normally plotted with x axis on a log scale. " ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "
\n" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "application/javascript": [ "(function(root) {\n", " function embed_document(root) {\n", " const docs_json = {\"abb9b319-6c6b-434f-a036-8ea34848bd24\":{\"version\":\"3.2.1\",\"title\":\"Bokeh Application\",\"roots\":[{\"type\":\"object\",\"name\":\"GridPlot\",\"id\":\"p1484\",\"attributes\":{\"rows\":null,\"cols\":null,\"toolbar\":{\"type\":\"object\",\"name\":\"Toolbar\",\"id\":\"p1483\",\"attributes\":{\"tools\":[{\"type\":\"object\",\"name\":\"ToolProxy\",\"id\":\"p1477\",\"attributes\":{\"tools\":[{\"type\":\"object\",\"name\":\"PanTool\",\"id\":\"p1023\"},{\"type\":\"object\",\"name\":\"PanTool\",\"id\":\"p1092\"},{\"type\":\"object\",\"name\":\"PanTool\",\"id\":\"p1145\"},{\"type\":\"object\",\"name\":\"PanTool\",\"id\":\"p1210\"},{\"type\":\"object\",\"name\":\"PanTool\",\"id\":\"p1263\"},{\"type\":\"object\",\"name\":\"PanTool\",\"id\":\"p1328\"},{\"type\":\"object\",\"name\":\"PanTool\",\"id\":\"p1381\"},{\"type\":\"object\",\"name\":\"PanTool\",\"id\":\"p1446\"}]}},{\"type\":\"object\",\"name\":\"ToolProxy\",\"id\":\"p1478\",\"attributes\":{\"tools\":[{\"type\":\"object\",\"name\":\"WheelZoomTool\",\"id\":\"p1024\"},{\"type\":\"object\",\"name\":\"WheelZoomTool\",\"id\":\"p1093\"},{\"type\":\"object\",\"name\":\"WheelZoomTool\",\"id\":\"p1146\"},{\"type\":\"object\",\"name\":\"WheelZoomTool\",\"id\":\"p1211\"},{\"type\":\"object\",\"name\":\"WheelZoomTool\",\"id\":\"p1264\"},{\"type\":\"object\",\"name\":\"WheelZoomTool\",\"id\":\"p1329\"},{\"type\":\"object\",\"name\":\"WheelZoomTool\",\"id\":\"p1382\"},{\"type\":\"object\",\"name\":\"WheelZoomTool\",\"id\":\"p1447\"}]}},{\"type\":\"object\",\"name\":\"ToolProxy\",\"id\":\"p1479\",\"attributes\":{\"tools\":[{\"type\":\"object\",\"name\":\"BoxZoomTool\",\"id\":\"p1025\",\"attributes\":{\"overlay\":{\"type\":\"object\",\"name\":\"BoxAnnotation\",\"id\":\"p1026\",\"attributes\":{\"syncable\":false,\"level\":\"overlay\",\"visible\":false,\"left_units\":\"canvas\",\"right_units\":\"canvas\",\"bottom_units\":\"canvas\",\"top_units\":\"canvas\",\"line_color\":\"black\",\"line_alpha\":1.0,\"line_width\":2,\"line_dash\":[4,4],\"fill_color\":\"lightgrey\",\"fill_alpha\":0.5}}}},{\"type\":\"object\",\"name\":\"BoxZoomTool\",\"id\":\"p1094\",\"attributes\":{\"overlay\":{\"type\":\"object\",\"name\":\"BoxAnnotation\",\"id\":\"p1095\",\"attributes\":{\"syncable\":false,\"level\":\"overlay\",\"visible\":false,\"left_units\":\"canvas\",\"right_units\":\"canvas\",\"bottom_units\":\"canvas\",\"top_units\":\"canvas\",\"line_color\":\"black\",\"line_alpha\":1.0,\"line_width\":2,\"line_dash\":[4,4],\"fill_color\":\"lightgrey\",\"fill_alpha\":0.5}}}},{\"type\":\"object\",\"name\":\"BoxZoomTool\",\"id\":\"p1147\",\"attributes\":{\"overlay\":{\"type\":\"object\",\"name\":\"BoxAnnotation\",\"id\":\"p1148\",\"attributes\":{\"syncable\":false,\"level\":\"overlay\",\"visible\":false,\"left_units\":\"canvas\",\"right_units\":\"canvas\",\"bottom_units\":\"canvas\",\"top_units\":\"canvas\",\"line_color\":\"black\",\"line_alpha\":1.0,\"line_width\":2,\"line_dash\":[4,4],\"fill_color\":\"lightgrey\",\"fill_alpha\":0.5}}}},{\"type\":\"object\",\"name\":\"BoxZoomTool\",\"id\":\"p1212\",\"attributes\":{\"overlay\":{\"type\":\"object\",\"name\":\"BoxAnnotation\",\"id\":\"p1213\",\"attributes\":{\"syncable\":false,\"level\":\"overlay\",\"visible\":false,\"left_units\":\"canvas\",\"right_units\":\"canvas\",\"bottom_units\":\"canvas\",\"top_units\":\"canvas\",\"line_color\":\"black\",\"line_alpha\":1.0,\"line_width\":2,\"line_dash\":[4,4],\"fill_color\":\"lightgrey\",\"fill_alpha\":0.5}}}},{\"type\":\"object\",\"name\":\"BoxZoomTool\",\"id\":\"p1265\",\"attributes\":{\"overlay\":{\"type\":\"object\",\"name\":\"BoxAnnotation\",\"id\":\"p1266\",\"attributes\":{\"syncable\":false,\"level\":\"overlay\",\"visible\":false,\"left_units\":\"canvas\",\"right_units\":\"canvas\",\"bottom_units\":\"canvas\",\"top_units\":\"canvas\",\"line_color\":\"black\",\"line_alpha\":1.0,\"line_width\":2,\"line_dash\":[4,4],\"fill_color\":\"lightgrey\",\"fill_alpha\":0.5}}}},{\"type\":\"object\",\"name\":\"BoxZoomTool\",\"id\":\"p1330\",\"attributes\":{\"overlay\":{\"type\":\"object\",\"name\":\"BoxAnnotation\",\"id\":\"p1331\",\"attributes\":{\"syncable\":false,\"level\":\"overlay\",\"visible\":false,\"left_units\":\"canvas\",\"right_units\":\"canvas\",\"bottom_units\":\"canvas\",\"top_units\":\"canvas\",\"line_color\":\"black\",\"line_alpha\":1.0,\"line_width\":2,\"line_dash\":[4,4],\"fill_color\":\"lightgrey\",\"fill_alpha\":0.5}}}},{\"type\":\"object\",\"name\":\"BoxZoomTool\",\"id\":\"p1383\",\"attributes\":{\"overlay\":{\"type\":\"object\",\"name\":\"BoxAnnotation\",\"id\":\"p1384\",\"attributes\":{\"syncable\":false,\"level\":\"overlay\",\"visible\":false,\"left_units\":\"canvas\",\"right_units\":\"canvas\",\"bottom_units\":\"canvas\",\"top_units\":\"canvas\",\"line_color\":\"black\",\"line_alpha\":1.0,\"line_width\":2,\"line_dash\":[4,4],\"fill_color\":\"lightgrey\",\"fill_alpha\":0.5}}}},{\"type\":\"object\",\"name\":\"BoxZoomTool\",\"id\":\"p1448\",\"attributes\":{\"overlay\":{\"type\":\"object\",\"name\":\"BoxAnnotation\",\"id\":\"p1449\",\"attributes\":{\"syncable\":false,\"level\":\"overlay\",\"visible\":false,\"left_units\":\"canvas\",\"right_units\":\"canvas\",\"bottom_units\":\"canvas\",\"top_units\":\"canvas\",\"line_color\":\"black\",\"line_alpha\":1.0,\"line_width\":2,\"line_dash\":[4,4],\"fill_color\":\"lightgrey\",\"fill_alpha\":0.5}}}}]}},{\"type\":\"object\",\"name\":\"SaveTool\",\"id\":\"p1480\"},{\"type\":\"object\",\"name\":\"ToolProxy\",\"id\":\"p1481\",\"attributes\":{\"tools\":[{\"type\":\"object\",\"name\":\"ResetTool\",\"id\":\"p1028\"},{\"type\":\"object\",\"name\":\"ResetTool\",\"id\":\"p1097\"},{\"type\":\"object\",\"name\":\"ResetTool\",\"id\":\"p1150\"},{\"type\":\"object\",\"name\":\"ResetTool\",\"id\":\"p1215\"},{\"type\":\"object\",\"name\":\"ResetTool\",\"id\":\"p1268\"},{\"type\":\"object\",\"name\":\"ResetTool\",\"id\":\"p1333\"},{\"type\":\"object\",\"name\":\"ResetTool\",\"id\":\"p1386\"},{\"type\":\"object\",\"name\":\"ResetTool\",\"id\":\"p1451\"}]}},{\"type\":\"object\",\"name\":\"ToolProxy\",\"id\":\"p1482\",\"attributes\":{\"tools\":[{\"type\":\"object\",\"name\":\"HelpTool\",\"id\":\"p1029\"},{\"type\":\"object\",\"name\":\"HelpTool\",\"id\":\"p1098\"},{\"type\":\"object\",\"name\":\"HelpTool\",\"id\":\"p1151\"},{\"type\":\"object\",\"name\":\"HelpTool\",\"id\":\"p1216\"},{\"type\":\"object\",\"name\":\"HelpTool\",\"id\":\"p1269\"},{\"type\":\"object\",\"name\":\"HelpTool\",\"id\":\"p1334\"},{\"type\":\"object\",\"name\":\"HelpTool\",\"id\":\"p1387\"},{\"type\":\"object\",\"name\":\"HelpTool\",\"id\":\"p1452\"}]}}]}},\"children\":[[{\"type\":\"object\",\"name\":\"Figure\",\"id\":\"p1001\",\"attributes\":{\"x_range\":{\"type\":\"object\",\"name\":\"DataRange1d\",\"id\":\"p1002\"},\"y_range\":{\"type\":\"object\",\"name\":\"DataRange1d\",\"id\":\"p1003\"},\"x_scale\":{\"type\":\"object\",\"name\":\"LogScale\",\"id\":\"p1011\"},\"y_scale\":{\"type\":\"object\",\"name\":\"LinearScale\",\"id\":\"p1012\"},\"title\":{\"type\":\"object\",\"name\":\"Title\",\"id\":\"p1004\",\"attributes\":{\"text\":\"1a157, HEPC153\"}},\"renderers\":[{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p1039\",\"attributes\":{\"data_source\":{\"type\":\"object\",\"name\":\"ColumnDataSource\",\"id\":\"p1030\",\"attributes\":{\"selected\":{\"type\":\"object\",\"name\":\"Selection\",\"id\":\"p1031\",\"attributes\":{\"indices\":[],\"line_indices\":[]}},\"selection_policy\":{\"type\":\"object\",\"name\":\"UnionRenderers\",\"id\":\"p1032\"},\"data\":{\"type\":\"map\",\"entries\":[[\"index\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"BAAAAAUAAAAMAAAADQAAABQAAAAVAAAAHAAAAB0AAAAkAAAAJQAAACwAAAAtAAAANAAAADUAAAA8AAAAPQAAAEQAAABFAAAATAAAAE0AAABUAAAAVQAAAFwAAABdAAAA\"},\"shape\":[24],\"dtype\":\"int32\",\"order\":\"little\"}],[\"Antibody\",{\"type\":\"ndarray\",\"array\":[\"HEPC153\",\"HEPC153\",\"HEPC153\",\"HEPC153\",\"HEPC153\",\"HEPC153\",\"HEPC153\",\"HEPC153\",\"HEPC153\",\"HEPC153\",\"HEPC153\",\"HEPC153\",\"HEPC153\",\"HEPC153\",\"HEPC153\",\"HEPC153\",\"HEPC153\",\"HEPC153\",\"HEPC153\",\"HEPC153\",\"HEPC153\",\"HEPC153\",\"HEPC153\",\"HEPC153\"],\"shape\":[24],\"dtype\":\"object\",\"order\":\"little\"}],[\"Ab_Conc_ng_mL\",{\"type\":\"ndarray\",\"array\":[10000.0,10000.0,3333.3333333333335,3333.3333333333335,1111.111111111111,1111.111111111111,370.3703703703704,370.3703703703704,123.45679012345678,123.45679012345678,41.1522633744856,41.1522633744856,13.717421124828531,13.717421124828531,4.572473708276178,4.572473708276178,1.5241579027587258,1.5241579027587258,0.5080526342529086,0.5080526342529086,0.16935087808430288,0.16935087808430288,0.056450292694767625,0.056450292694767625],\"shape\":[24],\"dtype\":\"object\",\"order\":\"little\"}],[\"OD450\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"lkOLbOf7BkB1kxgEVg4HQG3n+6nx0gVARIts5/upBUBKDAIrhxYEQAaBlUOLbARA6SYxCKwcAkBKDAIrhxYCQK5H4XoUrvs/mG4Sg8DK+z/4U+Olm8TwP/7UeOkmMfA/tvP91Hjp3j+0yHa+nxrfP4lBYOXQIss/JQaBlUOLzD/RItv5fmq8PzEIrBxaZLs/nMQgsHJosT/TTWIQWDm0P5MYBFYOLbI/pHA9CtejsD/8qfHSTWKwP3npJjEIrKw/\"},\"shape\":[24],\"dtype\":\"float64\",\"order\":\"little\"}],[\"Strain\",{\"type\":\"ndarray\",\"array\":[\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\"],\"shape\":[24],\"dtype\":\"object\",\"order\":\"little\"}],[\"Variant\",{\"type\":\"ndarray\",\"array\":[\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\"],\"shape\":[24],\"dtype\":\"object\",\"order\":\"little\"}]]}}},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p1040\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p1041\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"Circle\",\"id\":\"p1036\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"Ab_Conc_ng_mL\"},\"y\":{\"type\":\"field\",\"field\":\"OD450\"},\"line_color\":{\"type\":\"value\",\"value\":\"#1f77b4\"},\"fill_color\":{\"type\":\"value\",\"value\":\"#1f77b4\"},\"hatch_color\":{\"type\":\"value\",\"value\":\"#1f77b4\"}}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"Circle\",\"id\":\"p1037\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"Ab_Conc_ng_mL\"},\"y\":{\"type\":\"field\",\"field\":\"OD450\"},\"line_color\":{\"type\":\"value\",\"value\":\"#1f77b4\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.1},\"fill_color\":{\"type\":\"value\",\"value\":\"#1f77b4\"},\"fill_alpha\":{\"type\":\"value\",\"value\":0.1},\"hatch_color\":{\"type\":\"value\",\"value\":\"#1f77b4\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.1}}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"Circle\",\"id\":\"p1038\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"Ab_Conc_ng_mL\"},\"y\":{\"type\":\"field\",\"field\":\"OD450\"},\"line_color\":{\"type\":\"value\",\"value\":\"#1f77b4\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.2},\"fill_color\":{\"type\":\"value\",\"value\":\"#1f77b4\"},\"fill_alpha\":{\"type\":\"value\",\"value\":0.2},\"hatch_color\":{\"type\":\"value\",\"value\":\"#1f77b4\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.2}}}}},{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p1053\",\"attributes\":{\"data_source\":{\"type\":\"object\",\"name\":\"ColumnDataSource\",\"id\":\"p1044\",\"attributes\":{\"selected\":{\"type\":\"object\",\"name\":\"Selection\",\"id\":\"p1045\",\"attributes\":{\"indices\":[],\"line_indices\":[]}},\"selection_policy\":{\"type\":\"object\",\"name\":\"UnionRenderers\",\"id\":\"p1046\"},\"data\":{\"type\":\"map\",\"entries\":[[\"index\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"BAAAAAUAAAAMAAAADQAAABQAAAAVAAAAHAAAAB0AAAAkAAAAJQAAACwAAAAtAAAANAAAADUAAAA8AAAAPQAAAEQAAABFAAAATAAAAE0AAABUAAAAVQAAAFwAAABdAAAA\"},\"shape\":[24],\"dtype\":\"int32\",\"order\":\"little\"}],[\"Antibody\",{\"type\":\"ndarray\",\"array\":[\"HEPC153\",\"HEPC153\",\"HEPC153\",\"HEPC153\",\"HEPC153\",\"HEPC153\",\"HEPC153\",\"HEPC153\",\"HEPC153\",\"HEPC153\",\"HEPC153\",\"HEPC153\",\"HEPC153\",\"HEPC153\",\"HEPC153\",\"HEPC153\",\"HEPC153\",\"HEPC153\",\"HEPC153\",\"HEPC153\",\"HEPC153\",\"HEPC153\",\"HEPC153\",\"HEPC153\"],\"shape\":[24],\"dtype\":\"object\",\"order\":\"little\"}],[\"Ab_Conc_ng_mL\",{\"type\":\"ndarray\",\"array\":[10000.0,10000.0,3333.3333333333335,3333.3333333333335,1111.111111111111,1111.111111111111,370.3703703703704,370.3703703703704,123.45679012345678,123.45679012345678,41.1522633744856,41.1522633744856,13.717421124828531,13.717421124828531,4.572473708276178,4.572473708276178,1.5241579027587258,1.5241579027587258,0.5080526342529086,0.5080526342529086,0.16935087808430288,0.16935087808430288,0.056450292694767625,0.056450292694767625],\"shape\":[24],\"dtype\":\"object\",\"order\":\"little\"}],[\"OD450\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"9ihcj8L1CUBaZDvfT40IQC/dJAaBlQhALbKd76fGCUBcj8L1KFwIQPCnxks3iQhAx0s3iUFgBkBYObTIdr4GQK5H4XoUrgJATmIQWDm0AkDhehSuR+H6P0w3iUFg5fo/tMh2vp8a6z/wp8ZLN4npPwIrhxbZztc/EFg5tMh21j8bL90kBoHFPycxCKwcWsQ/ukkMAiuHtj/D9Shcj8K1P1TjpZvEILA//Knx0k1isD+JQWDl0CKrP4lBYOXQIqs/\"},\"shape\":[24],\"dtype\":\"float64\",\"order\":\"little\"}],[\"Strain\",{\"type\":\"ndarray\",\"array\":[\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\"],\"shape\":[24],\"dtype\":\"object\",\"order\":\"little\"}],[\"Variant\",{\"type\":\"ndarray\",\"array\":[\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\"],\"shape\":[24],\"dtype\":\"object\",\"order\":\"little\"}]]}}},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p1054\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p1055\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"Circle\",\"id\":\"p1050\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"Ab_Conc_ng_mL\"},\"y\":{\"type\":\"field\",\"field\":\"OD450\"},\"line_color\":{\"type\":\"value\",\"value\":\"#ff7f0e\"},\"fill_color\":{\"type\":\"value\",\"value\":\"#ff7f0e\"},\"hatch_color\":{\"type\":\"value\",\"value\":\"#ff7f0e\"}}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"Circle\",\"id\":\"p1051\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"Ab_Conc_ng_mL\"},\"y\":{\"type\":\"field\",\"field\":\"OD450\"},\"line_color\":{\"type\":\"value\",\"value\":\"#ff7f0e\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.1},\"fill_color\":{\"type\":\"value\",\"value\":\"#ff7f0e\"},\"fill_alpha\":{\"type\":\"value\",\"value\":0.1},\"hatch_color\":{\"type\":\"value\",\"value\":\"#ff7f0e\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.1}}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"Circle\",\"id\":\"p1052\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"Ab_Conc_ng_mL\"},\"y\":{\"type\":\"field\",\"field\":\"OD450\"},\"line_color\":{\"type\":\"value\",\"value\":\"#ff7f0e\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.2},\"fill_color\":{\"type\":\"value\",\"value\":\"#ff7f0e\"},\"fill_alpha\":{\"type\":\"value\",\"value\":0.2},\"hatch_color\":{\"type\":\"value\",\"value\":\"#ff7f0e\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.2}}}}},{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p1066\",\"attributes\":{\"data_source\":{\"type\":\"object\",\"name\":\"ColumnDataSource\",\"id\":\"p1057\",\"attributes\":{\"selected\":{\"type\":\"object\",\"name\":\"Selection\",\"id\":\"p1058\",\"attributes\":{\"indices\":[],\"line_indices\":[]}},\"selection_policy\":{\"type\":\"object\",\"name\":\"UnionRenderers\",\"id\":\"p1059\"},\"data\":{\"type\":\"map\",\"entries\":[[\"index\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"BAAAAAUAAAAMAAAADQAAABQAAAAVAAAAHAAAAB0AAAAkAAAAJQAAACwAAAAtAAAANAAAADUAAAA8AAAAPQAAAEQAAABFAAAATAAAAE0AAABUAAAAVQAAAFwAAABdAAAA\"},\"shape\":[24],\"dtype\":\"int32\",\"order\":\"little\"}],[\"Antibody\",{\"type\":\"ndarray\",\"array\":[\"HEPC153\",\"HEPC153\",\"HEPC153\",\"HEPC153\",\"HEPC153\",\"HEPC153\",\"HEPC153\",\"HEPC153\",\"HEPC153\",\"HEPC153\",\"HEPC153\",\"HEPC153\",\"HEPC153\",\"HEPC153\",\"HEPC153\",\"HEPC153\",\"HEPC153\",\"HEPC153\",\"HEPC153\",\"HEPC153\",\"HEPC153\",\"HEPC153\",\"HEPC153\",\"HEPC153\"],\"shape\":[24],\"dtype\":\"object\",\"order\":\"little\"}],[\"Ab_Conc_ng_mL\",{\"type\":\"ndarray\",\"array\":[10000.0,10000.0,3333.3333333333335,3333.3333333333335,1111.111111111111,1111.111111111111,370.3703703703704,370.3703703703704,123.45679012345678,123.45679012345678,41.1522633744856,41.1522633744856,13.717421124828531,13.717421124828531,4.572473708276178,4.572473708276178,1.5241579027587258,1.5241579027587258,0.5080526342529086,0.5080526342529086,0.16935087808430288,0.16935087808430288,0.056450292694767625,0.056450292694767625],\"shape\":[24],\"dtype\":\"object\",\"order\":\"little\"}],[\"OD450\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"6SYxCKwcCEDfT42XbhIIQO58PzVeugdASgwCK4cWCEDufD81XroGQN0kBoGVQwdA7nw/NV66BUBkO99PjZcFQPLSTWIQWAJAQmDl0CLbAkC4HoXrUbj6P/yp8dJNYvo/pHA9Ctej7D+iRbbz/dTsP/T91HjpJtk/8tJNYhBY2T9qvHSTGATGP7pJDAIrh8Y/CtejcD0Ktz8Sg8DKoUW2P1TjpZvEILA/WDm0yHa+rz+JQWDl0CKrPzm0yHa+n6o/\"},\"shape\":[24],\"dtype\":\"float64\",\"order\":\"little\"}],[\"Strain\",{\"type\":\"ndarray\",\"array\":[\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\"],\"shape\":[24],\"dtype\":\"object\",\"order\":\"little\"}],[\"Variant\",{\"type\":\"ndarray\",\"array\":[\"Y527H\",\"Y527H\",\"Y527H\",\"Y527H\",\"Y527H\",\"Y527H\",\"Y527H\",\"Y527H\",\"Y527H\",\"Y527H\",\"Y527H\",\"Y527H\",\"Y527H\",\"Y527H\",\"Y527H\",\"Y527H\",\"Y527H\",\"Y527H\",\"Y527H\",\"Y527H\",\"Y527H\",\"Y527H\",\"Y527H\",\"Y527H\"],\"shape\":[24],\"dtype\":\"object\",\"order\":\"little\"}]]}}},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p1067\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p1068\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"Circle\",\"id\":\"p1063\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"Ab_Conc_ng_mL\"},\"y\":{\"type\":\"field\",\"field\":\"OD450\"},\"line_color\":{\"type\":\"value\",\"value\":\"#2ca02c\"},\"fill_color\":{\"type\":\"value\",\"value\":\"#2ca02c\"},\"hatch_color\":{\"type\":\"value\",\"value\":\"#2ca02c\"}}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"Circle\",\"id\":\"p1064\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"Ab_Conc_ng_mL\"},\"y\":{\"type\":\"field\",\"field\":\"OD450\"},\"line_color\":{\"type\":\"value\",\"value\":\"#2ca02c\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.1},\"fill_color\":{\"type\":\"value\",\"value\":\"#2ca02c\"},\"fill_alpha\":{\"type\":\"value\",\"value\":0.1},\"hatch_color\":{\"type\":\"value\",\"value\":\"#2ca02c\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.1}}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"Circle\",\"id\":\"p1065\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"Ab_Conc_ng_mL\"},\"y\":{\"type\":\"field\",\"field\":\"OD450\"},\"line_color\":{\"type\":\"value\",\"value\":\"#2ca02c\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.2},\"fill_color\":{\"type\":\"value\",\"value\":\"#2ca02c\"},\"fill_alpha\":{\"type\":\"value\",\"value\":0.2},\"hatch_color\":{\"type\":\"value\",\"value\":\"#2ca02c\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.2}}}}}],\"toolbar\":{\"type\":\"object\",\"name\":\"Toolbar\",\"id\":\"p1010\",\"attributes\":{\"tools\":[{\"id\":\"p1023\"},{\"id\":\"p1024\"},{\"id\":\"p1025\"},{\"type\":\"object\",\"name\":\"SaveTool\",\"id\":\"p1027\"},{\"id\":\"p1028\"},{\"id\":\"p1029\"}]}},\"toolbar_location\":null,\"left\":[{\"type\":\"object\",\"name\":\"LinearAxis\",\"id\":\"p1018\",\"attributes\":{\"ticker\":{\"type\":\"object\",\"name\":\"BasicTicker\",\"id\":\"p1019\",\"attributes\":{\"mantissas\":[1,2,5]}},\"formatter\":{\"type\":\"object\",\"name\":\"BasicTickFormatter\",\"id\":\"p1020\"},\"axis_label\":\"OD450\",\"major_label_policy\":{\"type\":\"object\",\"name\":\"AllLabels\",\"id\":\"p1021\"}}}],\"below\":[{\"type\":\"object\",\"name\":\"LogAxis\",\"id\":\"p1013\",\"attributes\":{\"ticker\":{\"type\":\"object\",\"name\":\"LogTicker\",\"id\":\"p1014\",\"attributes\":{\"num_minor_ticks\":10,\"mantissas\":[1,5]}},\"formatter\":{\"type\":\"object\",\"name\":\"LogTickFormatter\",\"id\":\"p1015\"},\"major_label_policy\":{\"type\":\"object\",\"name\":\"AllLabels\",\"id\":\"p1016\"}}}],\"center\":[{\"type\":\"object\",\"name\":\"Grid\",\"id\":\"p1017\",\"attributes\":{\"axis\":{\"id\":\"p1013\"}}},{\"type\":\"object\",\"name\":\"Grid\",\"id\":\"p1022\",\"attributes\":{\"dimension\":1,\"axis\":{\"id\":\"p1018\"}}},{\"type\":\"object\",\"name\":\"Legend\",\"id\":\"p1042\",\"attributes\":{\"location\":\"top_left\",\"items\":[{\"type\":\"object\",\"name\":\"LegendItem\",\"id\":\"p1043\",\"attributes\":{\"label\":{\"type\":\"value\",\"value\":\"Q412R\"},\"renderers\":[{\"id\":\"p1039\"}]}},{\"type\":\"object\",\"name\":\"LegendItem\",\"id\":\"p1056\",\"attributes\":{\"label\":{\"type\":\"value\",\"value\":\"WT\"},\"renderers\":[{\"id\":\"p1053\"}]}},{\"type\":\"object\",\"name\":\"LegendItem\",\"id\":\"p1069\",\"attributes\":{\"label\":{\"type\":\"value\",\"value\":\"Y527H\"},\"renderers\":[{\"id\":\"p1066\"}]}}]}}],\"frame_width\":200,\"frame_height\":200}},0,0],[{\"type\":\"object\",\"name\":\"Figure\",\"id\":\"p1070\",\"attributes\":{\"x_range\":{\"id\":\"p1002\"},\"y_range\":{\"id\":\"p1003\"},\"x_scale\":{\"type\":\"object\",\"name\":\"LogScale\",\"id\":\"p1080\"},\"y_scale\":{\"type\":\"object\",\"name\":\"LinearScale\",\"id\":\"p1081\"},\"title\":{\"type\":\"object\",\"name\":\"Title\",\"id\":\"p1073\",\"attributes\":{\"text\":\"1a53, HEPC153\"}},\"renderers\":[{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p1108\",\"attributes\":{\"data_source\":{\"type\":\"object\",\"name\":\"ColumnDataSource\",\"id\":\"p1099\",\"attributes\":{\"selected\":{\"type\":\"object\",\"name\":\"Selection\",\"id\":\"p1100\",\"attributes\":{\"indices\":[],\"line_indices\":[]}},\"selection_policy\":{\"type\":\"object\",\"name\":\"UnionRenderers\",\"id\":\"p1101\"},\"data\":{\"type\":\"map\",\"entries\":[[\"index\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"BAAAAAUAAAAMAAAADQAAABQAAAAVAAAAHAAAAB0AAAAkAAAAJQAAACwAAAAtAAAANAAAADUAAAA8AAAAPQAAAEQAAABFAAAATAAAAE0AAABUAAAAVQAAAFwAAABdAAAA\"},\"shape\":[24],\"dtype\":\"int32\",\"order\":\"little\"}],[\"Antibody\",{\"type\":\"ndarray\",\"array\":[\"HEPC153\",\"HEPC153\",\"HEPC153\",\"HEPC153\",\"HEPC153\",\"HEPC153\",\"HEPC153\",\"HEPC153\",\"HEPC153\",\"HEPC153\",\"HEPC153\",\"HEPC153\",\"HEPC153\",\"HEPC153\",\"HEPC153\",\"HEPC153\",\"HEPC153\",\"HEPC153\",\"HEPC153\",\"HEPC153\",\"HEPC153\",\"HEPC153\",\"HEPC153\",\"HEPC153\"],\"shape\":[24],\"dtype\":\"object\",\"order\":\"little\"}],[\"Ab_Conc_ng_mL\",{\"type\":\"ndarray\",\"array\":[10000.0,10000.0,3333.3333333333335,3333.3333333333335,1111.111111111111,1111.111111111111,370.3703703703704,370.3703703703704,123.45679012345678,123.45679012345678,41.1522633744856,41.1522633744856,13.717421124828531,13.717421124828531,4.572473708276178,4.572473708276178,1.5241579027587258,1.5241579027587258,0.5080526342529086,0.5080526342529086,0.16935087808430288,0.16935087808430288,0.056450292694767625,0.056450292694767625],\"shape\":[24],\"dtype\":\"object\",\"order\":\"little\"}],[\"OD450\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"30+Nl24SBUDhehSuR+EFQNNNYhBYOQVAYOXQItv5BUD4U+Olm8QEQAIrhxbZzgVAZDvfT42XA0CR7Xw/NV4EQOkmMQisHAFAPQrXo3A9AUD0/dR46Sb3P/YoXI/C9fY/KVyPwvUo6D9OYhBYObToPx+F61G4HtU/Gy/dJAaB1T8bL90kBoHFP4cW2c73U8M/c2iR7Xw/tT9qvHSTGAS2P4PAyqFFtrM/WDm0yHa+rz+JQWDl0CKrP2iR7Xw/Na4/\"},\"shape\":[24],\"dtype\":\"float64\",\"order\":\"little\"}],[\"Strain\",{\"type\":\"ndarray\",\"array\":[\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\"],\"shape\":[24],\"dtype\":\"object\",\"order\":\"little\"}],[\"Variant\",{\"type\":\"ndarray\",\"array\":[\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\"],\"shape\":[24],\"dtype\":\"object\",\"order\":\"little\"}]]}}},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p1109\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p1110\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"Circle\",\"id\":\"p1105\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"Ab_Conc_ng_mL\"},\"y\":{\"type\":\"field\",\"field\":\"OD450\"},\"line_color\":{\"type\":\"value\",\"value\":\"#1f77b4\"},\"fill_color\":{\"type\":\"value\",\"value\":\"#1f77b4\"},\"hatch_color\":{\"type\":\"value\",\"value\":\"#1f77b4\"}}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"Circle\",\"id\":\"p1106\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"Ab_Conc_ng_mL\"},\"y\":{\"type\":\"field\",\"field\":\"OD450\"},\"line_color\":{\"type\":\"value\",\"value\":\"#1f77b4\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.1},\"fill_color\":{\"type\":\"value\",\"value\":\"#1f77b4\"},\"fill_alpha\":{\"type\":\"value\",\"value\":0.1},\"hatch_color\":{\"type\":\"value\",\"value\":\"#1f77b4\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.1}}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"Circle\",\"id\":\"p1107\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"Ab_Conc_ng_mL\"},\"y\":{\"type\":\"field\",\"field\":\"OD450\"},\"line_color\":{\"type\":\"value\",\"value\":\"#1f77b4\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.2},\"fill_color\":{\"type\":\"value\",\"value\":\"#1f77b4\"},\"fill_alpha\":{\"type\":\"value\",\"value\":0.2},\"hatch_color\":{\"type\":\"value\",\"value\":\"#1f77b4\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.2}}}}},{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p1120\",\"attributes\":{\"data_source\":{\"type\":\"object\",\"name\":\"ColumnDataSource\",\"id\":\"p1111\",\"attributes\":{\"selected\":{\"type\":\"object\",\"name\":\"Selection\",\"id\":\"p1112\",\"attributes\":{\"indices\":[],\"line_indices\":[]}},\"selection_policy\":{\"type\":\"object\",\"name\":\"UnionRenderers\",\"id\":\"p1113\"},\"data\":{\"type\":\"map\",\"entries\":[[\"index\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"BAAAAAUAAAAMAAAADQAAABQAAAAVAAAAHAAAAB0AAAAkAAAAJQAAACwAAAAtAAAANAAAADUAAAA8AAAAPQAAAEQAAABFAAAATAAAAE0AAABUAAAAVQAAAFwAAABdAAAA\"},\"shape\":[24],\"dtype\":\"int32\",\"order\":\"little\"}],[\"Antibody\",{\"type\":\"ndarray\",\"array\":[\"HEPC153\",\"HEPC153\",\"HEPC153\",\"HEPC153\",\"HEPC153\",\"HEPC153\",\"HEPC153\",\"HEPC153\",\"HEPC153\",\"HEPC153\",\"HEPC153\",\"HEPC153\",\"HEPC153\",\"HEPC153\",\"HEPC153\",\"HEPC153\",\"HEPC153\",\"HEPC153\",\"HEPC153\",\"HEPC153\",\"HEPC153\",\"HEPC153\",\"HEPC153\",\"HEPC153\"],\"shape\":[24],\"dtype\":\"object\",\"order\":\"little\"}],[\"Ab_Conc_ng_mL\",{\"type\":\"ndarray\",\"array\":[10000.0,10000.0,3333.3333333333335,3333.3333333333335,1111.111111111111,1111.111111111111,370.3703703703704,370.3703703703704,123.45679012345678,123.45679012345678,41.1522633744856,41.1522633744856,13.717421124828531,13.717421124828531,4.572473708276178,4.572473708276178,1.5241579027587258,1.5241579027587258,0.5080526342529086,0.5080526342529086,0.16935087808430288,0.16935087808430288,0.056450292694767625,0.056450292694767625],\"shape\":[24],\"dtype\":\"object\",\"order\":\"little\"}],[\"OD450\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"WDm0yHa+B0Dl0CLb+X4IQJMYBFYOLQdAxSCwcmiRB0CR7Xw/NV4HQDm0yHa+nwZAsp3vp8ZLBkAtsp3vp8YEQFYOLbKd7wJAIbByaJHtAUBg5dAi2/n6P05iEFg5tPg/2/l+arx06z8tsp3vp8brP1g5tMh2vtc/YhBYObTI1j/P91PjpZvEPycxCKwcWsQ/WmQ730+Ntz9zaJHtfD+1P7gehetRuK4/uB6F61G4rj8ZBFYOLbKtP2iR7Xw/Na4/\"},\"shape\":[24],\"dtype\":\"float64\",\"order\":\"little\"}],[\"Strain\",{\"type\":\"ndarray\",\"array\":[\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\"],\"shape\":[24],\"dtype\":\"object\",\"order\":\"little\"}],[\"Variant\",{\"type\":\"ndarray\",\"array\":[\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\"],\"shape\":[24],\"dtype\":\"object\",\"order\":\"little\"}]]}}},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p1121\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p1122\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"Circle\",\"id\":\"p1117\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"Ab_Conc_ng_mL\"},\"y\":{\"type\":\"field\",\"field\":\"OD450\"},\"line_color\":{\"type\":\"value\",\"value\":\"#ff7f0e\"},\"fill_color\":{\"type\":\"value\",\"value\":\"#ff7f0e\"},\"hatch_color\":{\"type\":\"value\",\"value\":\"#ff7f0e\"}}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"Circle\",\"id\":\"p1118\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"Ab_Conc_ng_mL\"},\"y\":{\"type\":\"field\",\"field\":\"OD450\"},\"line_color\":{\"type\":\"value\",\"value\":\"#ff7f0e\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.1},\"fill_color\":{\"type\":\"value\",\"value\":\"#ff7f0e\"},\"fill_alpha\":{\"type\":\"value\",\"value\":0.1},\"hatch_color\":{\"type\":\"value\",\"value\":\"#ff7f0e\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.1}}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"Circle\",\"id\":\"p1119\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"Ab_Conc_ng_mL\"},\"y\":{\"type\":\"field\",\"field\":\"OD450\"},\"line_color\":{\"type\":\"value\",\"value\":\"#ff7f0e\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.2},\"fill_color\":{\"type\":\"value\",\"value\":\"#ff7f0e\"},\"fill_alpha\":{\"type\":\"value\",\"value\":0.2},\"hatch_color\":{\"type\":\"value\",\"value\":\"#ff7f0e\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.2}}}}}],\"toolbar\":{\"type\":\"object\",\"name\":\"Toolbar\",\"id\":\"p1079\",\"attributes\":{\"tools\":[{\"id\":\"p1092\"},{\"id\":\"p1093\"},{\"id\":\"p1094\"},{\"type\":\"object\",\"name\":\"SaveTool\",\"id\":\"p1096\"},{\"id\":\"p1097\"},{\"id\":\"p1098\"}]}},\"toolbar_location\":null,\"left\":[{\"type\":\"object\",\"name\":\"LinearAxis\",\"id\":\"p1087\",\"attributes\":{\"ticker\":{\"type\":\"object\",\"name\":\"BasicTicker\",\"id\":\"p1088\",\"attributes\":{\"mantissas\":[1,2,5]}},\"formatter\":{\"type\":\"object\",\"name\":\"BasicTickFormatter\",\"id\":\"p1089\"},\"major_label_policy\":{\"type\":\"object\",\"name\":\"AllLabels\",\"id\":\"p1090\"}}}],\"below\":[{\"type\":\"object\",\"name\":\"LogAxis\",\"id\":\"p1082\",\"attributes\":{\"ticker\":{\"type\":\"object\",\"name\":\"LogTicker\",\"id\":\"p1083\",\"attributes\":{\"num_minor_ticks\":10,\"mantissas\":[1,5]}},\"formatter\":{\"type\":\"object\",\"name\":\"LogTickFormatter\",\"id\":\"p1084\"},\"major_label_policy\":{\"type\":\"object\",\"name\":\"AllLabels\",\"id\":\"p1085\"}}}],\"center\":[{\"type\":\"object\",\"name\":\"Grid\",\"id\":\"p1086\",\"attributes\":{\"axis\":{\"id\":\"p1082\"}}},{\"type\":\"object\",\"name\":\"Grid\",\"id\":\"p1091\",\"attributes\":{\"dimension\":1,\"axis\":{\"id\":\"p1087\"}}}],\"frame_width\":200,\"frame_height\":200}},0,1],[{\"type\":\"object\",\"name\":\"Figure\",\"id\":\"p1123\",\"attributes\":{\"x_range\":{\"id\":\"p1002\"},\"y_range\":{\"id\":\"p1003\"},\"x_scale\":{\"type\":\"object\",\"name\":\"LogScale\",\"id\":\"p1133\"},\"y_scale\":{\"type\":\"object\",\"name\":\"LinearScale\",\"id\":\"p1134\"},\"title\":{\"type\":\"object\",\"name\":\"Title\",\"id\":\"p1126\",\"attributes\":{\"text\":\"1a157, HEPC153rua\"}},\"renderers\":[{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p1161\",\"attributes\":{\"data_source\":{\"type\":\"object\",\"name\":\"ColumnDataSource\",\"id\":\"p1152\",\"attributes\":{\"selected\":{\"type\":\"object\",\"name\":\"Selection\",\"id\":\"p1153\",\"attributes\":{\"indices\":[],\"line_indices\":[]}},\"selection_policy\":{\"type\":\"object\",\"name\":\"UnionRenderers\",\"id\":\"p1154\"},\"data\":{\"type\":\"map\",\"entries\":[[\"index\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"BgAAAAcAAAAOAAAADwAAABYAAAAXAAAAHgAAAB8AAAAmAAAAJwAAAC4AAAAvAAAANgAAADcAAAA+AAAAPwAAAEYAAABHAAAATgAAAE8AAABWAAAAVwAAAF4AAABfAAAA\"},\"shape\":[24],\"dtype\":\"int32\",\"order\":\"little\"}],[\"Antibody\",{\"type\":\"ndarray\",\"array\":[\"HEPC153rua\",\"HEPC153rua\",\"HEPC153rua\",\"HEPC153rua\",\"HEPC153rua\",\"HEPC153rua\",\"HEPC153rua\",\"HEPC153rua\",\"HEPC153rua\",\"HEPC153rua\",\"HEPC153rua\",\"HEPC153rua\",\"HEPC153rua\",\"HEPC153rua\",\"HEPC153rua\",\"HEPC153rua\",\"HEPC153rua\",\"HEPC153rua\",\"HEPC153rua\",\"HEPC153rua\",\"HEPC153rua\",\"HEPC153rua\",\"HEPC153rua\",\"HEPC153rua\"],\"shape\":[24],\"dtype\":\"object\",\"order\":\"little\"}],[\"Ab_Conc_ng_mL\",{\"type\":\"ndarray\",\"array\":[10000.0,10000.0,3333.3333333333335,3333.3333333333335,1111.111111111111,1111.111111111111,370.3703703703704,370.3703703703704,123.45679012345678,123.45679012345678,41.1522633744856,41.1522633744856,13.717421124828531,13.717421124828531,4.572473708276178,4.572473708276178,1.5241579027587258,1.5241579027587258,0.5080526342529086,0.5080526342529086,0.16935087808430288,0.16935087808430288,0.056450292694767625,0.056450292694767625],\"shape\":[24],\"dtype\":\"object\",\"order\":\"little\"}],[\"OD450\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"g8DKoUW29T9GtvP91Hj1P0w3iUFg5fA/NV66SQwC8T9CYOXQItvlP8dLN4lBYOU/EoPAyqFF1j+4HoXrUbjWP3e+nxov3cQ/f2q8dJMYxD+yne+nxku3Pxsv3SQGgbU//Knx0k1isD8IrBxaZDuvP3npJjEIrKw/KVyPwvUorD9oke18PzWuP0oMAiuHFqk/mpmZmZmZqT8pXI/C9SisP5qZmZmZmak/mpmZmZmZqT9KDAIrhxapP9nO91Pjpas/\"},\"shape\":[24],\"dtype\":\"float64\",\"order\":\"little\"}],[\"Strain\",{\"type\":\"ndarray\",\"array\":[\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\"],\"shape\":[24],\"dtype\":\"object\",\"order\":\"little\"}],[\"Variant\",{\"type\":\"ndarray\",\"array\":[\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\"],\"shape\":[24],\"dtype\":\"object\",\"order\":\"little\"}]]}}},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p1162\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p1163\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"Circle\",\"id\":\"p1158\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"Ab_Conc_ng_mL\"},\"y\":{\"type\":\"field\",\"field\":\"OD450\"},\"line_color\":{\"type\":\"value\",\"value\":\"#1f77b4\"},\"fill_color\":{\"type\":\"value\",\"value\":\"#1f77b4\"},\"hatch_color\":{\"type\":\"value\",\"value\":\"#1f77b4\"}}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"Circle\",\"id\":\"p1159\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"Ab_Conc_ng_mL\"},\"y\":{\"type\":\"field\",\"field\":\"OD450\"},\"line_color\":{\"type\":\"value\",\"value\":\"#1f77b4\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.1},\"fill_color\":{\"type\":\"value\",\"value\":\"#1f77b4\"},\"fill_alpha\":{\"type\":\"value\",\"value\":0.1},\"hatch_color\":{\"type\":\"value\",\"value\":\"#1f77b4\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.1}}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"Circle\",\"id\":\"p1160\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"Ab_Conc_ng_mL\"},\"y\":{\"type\":\"field\",\"field\":\"OD450\"},\"line_color\":{\"type\":\"value\",\"value\":\"#1f77b4\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.2},\"fill_color\":{\"type\":\"value\",\"value\":\"#1f77b4\"},\"fill_alpha\":{\"type\":\"value\",\"value\":0.2},\"hatch_color\":{\"type\":\"value\",\"value\":\"#1f77b4\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.2}}}}},{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p1173\",\"attributes\":{\"data_source\":{\"type\":\"object\",\"name\":\"ColumnDataSource\",\"id\":\"p1164\",\"attributes\":{\"selected\":{\"type\":\"object\",\"name\":\"Selection\",\"id\":\"p1165\",\"attributes\":{\"indices\":[],\"line_indices\":[]}},\"selection_policy\":{\"type\":\"object\",\"name\":\"UnionRenderers\",\"id\":\"p1166\"},\"data\":{\"type\":\"map\",\"entries\":[[\"index\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"BgAAAAcAAAAOAAAADwAAABYAAAAXAAAAHgAAAB8AAAAmAAAAJwAAAC4AAAAvAAAANgAAADcAAAA+AAAAPwAAAEYAAABHAAAATgAAAE8AAABWAAAAVwAAAF4AAABfAAAA\"},\"shape\":[24],\"dtype\":\"int32\",\"order\":\"little\"}],[\"Antibody\",{\"type\":\"ndarray\",\"array\":[\"HEPC153rua\",\"HEPC153rua\",\"HEPC153rua\",\"HEPC153rua\",\"HEPC153rua\",\"HEPC153rua\",\"HEPC153rua\",\"HEPC153rua\",\"HEPC153rua\",\"HEPC153rua\",\"HEPC153rua\",\"HEPC153rua\",\"HEPC153rua\",\"HEPC153rua\",\"HEPC153rua\",\"HEPC153rua\",\"HEPC153rua\",\"HEPC153rua\",\"HEPC153rua\",\"HEPC153rua\",\"HEPC153rua\",\"HEPC153rua\",\"HEPC153rua\",\"HEPC153rua\"],\"shape\":[24],\"dtype\":\"object\",\"order\":\"little\"}],[\"Ab_Conc_ng_mL\",{\"type\":\"ndarray\",\"array\":[10000.0,10000.0,3333.3333333333335,3333.3333333333335,1111.111111111111,1111.111111111111,370.3703703703704,370.3703703703704,123.45679012345678,123.45679012345678,41.1522633744856,41.1522633744856,13.717421124828531,13.717421124828531,4.572473708276178,4.572473708276178,1.5241579027587258,1.5241579027587258,0.5080526342529086,0.5080526342529086,0.16935087808430288,0.16935087808430288,0.056450292694767625,0.056450292694767625],\"shape\":[24],\"dtype\":\"object\",\"order\":\"little\"}],[\"OD450\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"UrgehetR2D9xPQrXo3DVP42XbhKDwMo/TmIQWDm0yD+oxks3iUHAP9Ei2/l+arw/i2zn+6nxsj+LbOf7qfGyP8l2vp8aL60/aJHtfD81rj/ZzvdT46WrP5qZmZmZmak/VOOlm8QgsD/6fmq8dJOoP/p+arx0k6g/WmQ730+Npz+q8dJNYhCoP6rx0k1iEKg/CtejcD0Kpz+q8dJNYhCoP1pkO99Pjac/mpmZmZmZqT+JQWDl0CKrP6rx0k1iEKg/\"},\"shape\":[24],\"dtype\":\"float64\",\"order\":\"little\"}],[\"Strain\",{\"type\":\"ndarray\",\"array\":[\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\"],\"shape\":[24],\"dtype\":\"object\",\"order\":\"little\"}],[\"Variant\",{\"type\":\"ndarray\",\"array\":[\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\"],\"shape\":[24],\"dtype\":\"object\",\"order\":\"little\"}]]}}},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p1174\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p1175\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"Circle\",\"id\":\"p1170\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"Ab_Conc_ng_mL\"},\"y\":{\"type\":\"field\",\"field\":\"OD450\"},\"line_color\":{\"type\":\"value\",\"value\":\"#ff7f0e\"},\"fill_color\":{\"type\":\"value\",\"value\":\"#ff7f0e\"},\"hatch_color\":{\"type\":\"value\",\"value\":\"#ff7f0e\"}}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"Circle\",\"id\":\"p1171\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"Ab_Conc_ng_mL\"},\"y\":{\"type\":\"field\",\"field\":\"OD450\"},\"line_color\":{\"type\":\"value\",\"value\":\"#ff7f0e\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.1},\"fill_color\":{\"type\":\"value\",\"value\":\"#ff7f0e\"},\"fill_alpha\":{\"type\":\"value\",\"value\":0.1},\"hatch_color\":{\"type\":\"value\",\"value\":\"#ff7f0e\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.1}}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"Circle\",\"id\":\"p1172\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"Ab_Conc_ng_mL\"},\"y\":{\"type\":\"field\",\"field\":\"OD450\"},\"line_color\":{\"type\":\"value\",\"value\":\"#ff7f0e\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.2},\"fill_color\":{\"type\":\"value\",\"value\":\"#ff7f0e\"},\"fill_alpha\":{\"type\":\"value\",\"value\":0.2},\"hatch_color\":{\"type\":\"value\",\"value\":\"#ff7f0e\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.2}}}}},{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p1185\",\"attributes\":{\"data_source\":{\"type\":\"object\",\"name\":\"ColumnDataSource\",\"id\":\"p1176\",\"attributes\":{\"selected\":{\"type\":\"object\",\"name\":\"Selection\",\"id\":\"p1177\",\"attributes\":{\"indices\":[],\"line_indices\":[]}},\"selection_policy\":{\"type\":\"object\",\"name\":\"UnionRenderers\",\"id\":\"p1178\"},\"data\":{\"type\":\"map\",\"entries\":[[\"index\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"BgAAAAcAAAAOAAAADwAAABYAAAAXAAAAHgAAAB8AAAAmAAAAJwAAAC4AAAAvAAAANgAAADcAAAA+AAAAPwAAAEYAAABHAAAATgAAAE8AAABWAAAAVwAAAF4AAABfAAAA\"},\"shape\":[24],\"dtype\":\"int32\",\"order\":\"little\"}],[\"Antibody\",{\"type\":\"ndarray\",\"array\":[\"HEPC153rua\",\"HEPC153rua\",\"HEPC153rua\",\"HEPC153rua\",\"HEPC153rua\",\"HEPC153rua\",\"HEPC153rua\",\"HEPC153rua\",\"HEPC153rua\",\"HEPC153rua\",\"HEPC153rua\",\"HEPC153rua\",\"HEPC153rua\",\"HEPC153rua\",\"HEPC153rua\",\"HEPC153rua\",\"HEPC153rua\",\"HEPC153rua\",\"HEPC153rua\",\"HEPC153rua\",\"HEPC153rua\",\"HEPC153rua\",\"HEPC153rua\",\"HEPC153rua\"],\"shape\":[24],\"dtype\":\"object\",\"order\":\"little\"}],[\"Ab_Conc_ng_mL\",{\"type\":\"ndarray\",\"array\":[10000.0,10000.0,3333.3333333333335,3333.3333333333335,1111.111111111111,1111.111111111111,370.3703703703704,370.3703703703704,123.45679012345678,123.45679012345678,41.1522633744856,41.1522633744856,13.717421124828531,13.717421124828531,4.572473708276178,4.572473708276178,1.5241579027587258,1.5241579027587258,0.5080526342529086,0.5080526342529086,0.16935087808430288,0.16935087808430288,0.056450292694767625,0.056450292694767625],\"shape\":[24],\"dtype\":\"object\",\"order\":\"little\"}],[\"OD450\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"CtejcD0K+T8GgZVDi2z5PzEIrBxaZPU/vp8aL90k9j++nxov3STyPz81XrpJDPI/vp8aL90k6j8j2/l+arzoP1pkO99Pjd8/K4cW2c732z9oke18PzXOP3npJjEIrMw/0SLb+X5qvD9KDAIrhxa5P+xRuB6F67E/VOOlm8QgsD85tMh2vp+qPzm0yHa+n6o/eekmMQisrD9SuB6F61G4PwrXo3A9Cqc/CtejcD0Kpz9aZDvfT42nPwrXo3A9Cqc/\"},\"shape\":[24],\"dtype\":\"float64\",\"order\":\"little\"}],[\"Strain\",{\"type\":\"ndarray\",\"array\":[\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\"],\"shape\":[24],\"dtype\":\"object\",\"order\":\"little\"}],[\"Variant\",{\"type\":\"ndarray\",\"array\":[\"Y527H\",\"Y527H\",\"Y527H\",\"Y527H\",\"Y527H\",\"Y527H\",\"Y527H\",\"Y527H\",\"Y527H\",\"Y527H\",\"Y527H\",\"Y527H\",\"Y527H\",\"Y527H\",\"Y527H\",\"Y527H\",\"Y527H\",\"Y527H\",\"Y527H\",\"Y527H\",\"Y527H\",\"Y527H\",\"Y527H\",\"Y527H\"],\"shape\":[24],\"dtype\":\"object\",\"order\":\"little\"}]]}}},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p1186\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p1187\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"Circle\",\"id\":\"p1182\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"Ab_Conc_ng_mL\"},\"y\":{\"type\":\"field\",\"field\":\"OD450\"},\"line_color\":{\"type\":\"value\",\"value\":\"#2ca02c\"},\"fill_color\":{\"type\":\"value\",\"value\":\"#2ca02c\"},\"hatch_color\":{\"type\":\"value\",\"value\":\"#2ca02c\"}}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"Circle\",\"id\":\"p1183\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"Ab_Conc_ng_mL\"},\"y\":{\"type\":\"field\",\"field\":\"OD450\"},\"line_color\":{\"type\":\"value\",\"value\":\"#2ca02c\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.1},\"fill_color\":{\"type\":\"value\",\"value\":\"#2ca02c\"},\"fill_alpha\":{\"type\":\"value\",\"value\":0.1},\"hatch_color\":{\"type\":\"value\",\"value\":\"#2ca02c\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.1}}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"Circle\",\"id\":\"p1184\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"Ab_Conc_ng_mL\"},\"y\":{\"type\":\"field\",\"field\":\"OD450\"},\"line_color\":{\"type\":\"value\",\"value\":\"#2ca02c\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.2},\"fill_color\":{\"type\":\"value\",\"value\":\"#2ca02c\"},\"fill_alpha\":{\"type\":\"value\",\"value\":0.2},\"hatch_color\":{\"type\":\"value\",\"value\":\"#2ca02c\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.2}}}}}],\"toolbar\":{\"type\":\"object\",\"name\":\"Toolbar\",\"id\":\"p1132\",\"attributes\":{\"tools\":[{\"id\":\"p1145\"},{\"id\":\"p1146\"},{\"id\":\"p1147\"},{\"type\":\"object\",\"name\":\"SaveTool\",\"id\":\"p1149\"},{\"id\":\"p1150\"},{\"id\":\"p1151\"}]}},\"toolbar_location\":null,\"left\":[{\"type\":\"object\",\"name\":\"LinearAxis\",\"id\":\"p1140\",\"attributes\":{\"ticker\":{\"type\":\"object\",\"name\":\"BasicTicker\",\"id\":\"p1141\",\"attributes\":{\"mantissas\":[1,2,5]}},\"formatter\":{\"type\":\"object\",\"name\":\"BasicTickFormatter\",\"id\":\"p1142\"},\"axis_label\":\"OD450\",\"major_label_policy\":{\"type\":\"object\",\"name\":\"AllLabels\",\"id\":\"p1143\"}}}],\"below\":[{\"type\":\"object\",\"name\":\"LogAxis\",\"id\":\"p1135\",\"attributes\":{\"ticker\":{\"type\":\"object\",\"name\":\"LogTicker\",\"id\":\"p1136\",\"attributes\":{\"num_minor_ticks\":10,\"mantissas\":[1,5]}},\"formatter\":{\"type\":\"object\",\"name\":\"LogTickFormatter\",\"id\":\"p1137\"},\"major_label_policy\":{\"type\":\"object\",\"name\":\"AllLabels\",\"id\":\"p1138\"}}}],\"center\":[{\"type\":\"object\",\"name\":\"Grid\",\"id\":\"p1139\",\"attributes\":{\"axis\":{\"id\":\"p1135\"}}},{\"type\":\"object\",\"name\":\"Grid\",\"id\":\"p1144\",\"attributes\":{\"dimension\":1,\"axis\":{\"id\":\"p1140\"}}}],\"frame_width\":200,\"frame_height\":200}},1,0],[{\"type\":\"object\",\"name\":\"Figure\",\"id\":\"p1188\",\"attributes\":{\"x_range\":{\"id\":\"p1002\"},\"y_range\":{\"id\":\"p1003\"},\"x_scale\":{\"type\":\"object\",\"name\":\"LogScale\",\"id\":\"p1198\"},\"y_scale\":{\"type\":\"object\",\"name\":\"LinearScale\",\"id\":\"p1199\"},\"title\":{\"type\":\"object\",\"name\":\"Title\",\"id\":\"p1191\",\"attributes\":{\"text\":\"1a53, HEPC153rua\"}},\"renderers\":[{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p1226\",\"attributes\":{\"data_source\":{\"type\":\"object\",\"name\":\"ColumnDataSource\",\"id\":\"p1217\",\"attributes\":{\"selected\":{\"type\":\"object\",\"name\":\"Selection\",\"id\":\"p1218\",\"attributes\":{\"indices\":[],\"line_indices\":[]}},\"selection_policy\":{\"type\":\"object\",\"name\":\"UnionRenderers\",\"id\":\"p1219\"},\"data\":{\"type\":\"map\",\"entries\":[[\"index\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"BgAAAAcAAAAOAAAADwAAABYAAAAXAAAAHgAAAB8AAAAmAAAAJwAAAC4AAAAvAAAANgAAADcAAAA+AAAAPwAAAEYAAABHAAAATgAAAE8AAABWAAAAVwAAAF4AAABfAAAA\"},\"shape\":[24],\"dtype\":\"int32\",\"order\":\"little\"}],[\"Antibody\",{\"type\":\"ndarray\",\"array\":[\"HEPC153rua\",\"HEPC153rua\",\"HEPC153rua\",\"HEPC153rua\",\"HEPC153rua\",\"HEPC153rua\",\"HEPC153rua\",\"HEPC153rua\",\"HEPC153rua\",\"HEPC153rua\",\"HEPC153rua\",\"HEPC153rua\",\"HEPC153rua\",\"HEPC153rua\",\"HEPC153rua\",\"HEPC153rua\",\"HEPC153rua\",\"HEPC153rua\",\"HEPC153rua\",\"HEPC153rua\",\"HEPC153rua\",\"HEPC153rua\",\"HEPC153rua\",\"HEPC153rua\"],\"shape\":[24],\"dtype\":\"object\",\"order\":\"little\"}],[\"Ab_Conc_ng_mL\",{\"type\":\"ndarray\",\"array\":[10000.0,10000.0,3333.3333333333335,3333.3333333333335,1111.111111111111,1111.111111111111,370.3703703703704,370.3703703703704,123.45679012345678,123.45679012345678,41.1522633744856,41.1522633744856,13.717421124828531,13.717421124828531,4.572473708276178,4.572473708276178,1.5241579027587258,1.5241579027587258,0.5080526342529086,0.5080526342529086,0.16935087808430288,0.16935087808430288,0.056450292694767625,0.056450292694767625],\"shape\":[24],\"dtype\":\"object\",\"order\":\"little\"}],[\"OD450\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"DAIrhxbZ8j/hehSuR+H0P9nO91PjpfE/YOXQItv58D++nxov3STqP30/NV66Sew/ukkMAiuH4j/FILByaJHhP9Ei2/l+atQ/iUFg5dAi0z+DwMqhRbbDPx+F61G4HsU/001iEFg5tD8bL90kBoG1P5zEILByaLE/CKwcWmQ7rz956SYxCKysP4lBYOXQIqs/CKwcWmQ7rz956SYxCKysP+kmMQisHKo/mpmZmZmZqT9KDAIrhxapP+kmMQisHKo/\"},\"shape\":[24],\"dtype\":\"float64\",\"order\":\"little\"}],[\"Strain\",{\"type\":\"ndarray\",\"array\":[\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\"],\"shape\":[24],\"dtype\":\"object\",\"order\":\"little\"}],[\"Variant\",{\"type\":\"ndarray\",\"array\":[\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\"],\"shape\":[24],\"dtype\":\"object\",\"order\":\"little\"}]]}}},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p1227\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p1228\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"Circle\",\"id\":\"p1223\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"Ab_Conc_ng_mL\"},\"y\":{\"type\":\"field\",\"field\":\"OD450\"},\"line_color\":{\"type\":\"value\",\"value\":\"#1f77b4\"},\"fill_color\":{\"type\":\"value\",\"value\":\"#1f77b4\"},\"hatch_color\":{\"type\":\"value\",\"value\":\"#1f77b4\"}}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"Circle\",\"id\":\"p1224\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"Ab_Conc_ng_mL\"},\"y\":{\"type\":\"field\",\"field\":\"OD450\"},\"line_color\":{\"type\":\"value\",\"value\":\"#1f77b4\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.1},\"fill_color\":{\"type\":\"value\",\"value\":\"#1f77b4\"},\"fill_alpha\":{\"type\":\"value\",\"value\":0.1},\"hatch_color\":{\"type\":\"value\",\"value\":\"#1f77b4\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.1}}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"Circle\",\"id\":\"p1225\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"Ab_Conc_ng_mL\"},\"y\":{\"type\":\"field\",\"field\":\"OD450\"},\"line_color\":{\"type\":\"value\",\"value\":\"#1f77b4\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.2},\"fill_color\":{\"type\":\"value\",\"value\":\"#1f77b4\"},\"fill_alpha\":{\"type\":\"value\",\"value\":0.2},\"hatch_color\":{\"type\":\"value\",\"value\":\"#1f77b4\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.2}}}}},{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p1238\",\"attributes\":{\"data_source\":{\"type\":\"object\",\"name\":\"ColumnDataSource\",\"id\":\"p1229\",\"attributes\":{\"selected\":{\"type\":\"object\",\"name\":\"Selection\",\"id\":\"p1230\",\"attributes\":{\"indices\":[],\"line_indices\":[]}},\"selection_policy\":{\"type\":\"object\",\"name\":\"UnionRenderers\",\"id\":\"p1231\"},\"data\":{\"type\":\"map\",\"entries\":[[\"index\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"BgAAAAcAAAAOAAAADwAAABYAAAAXAAAAHgAAAB8AAAAmAAAAJwAAAC4AAAAvAAAANgAAADcAAAA+AAAAPwAAAEYAAABHAAAATgAAAE8AAABWAAAAVwAAAF4AAABfAAAA\"},\"shape\":[24],\"dtype\":\"int32\",\"order\":\"little\"}],[\"Antibody\",{\"type\":\"ndarray\",\"array\":[\"HEPC153rua\",\"HEPC153rua\",\"HEPC153rua\",\"HEPC153rua\",\"HEPC153rua\",\"HEPC153rua\",\"HEPC153rua\",\"HEPC153rua\",\"HEPC153rua\",\"HEPC153rua\",\"HEPC153rua\",\"HEPC153rua\",\"HEPC153rua\",\"HEPC153rua\",\"HEPC153rua\",\"HEPC153rua\",\"HEPC153rua\",\"HEPC153rua\",\"HEPC153rua\",\"HEPC153rua\",\"HEPC153rua\",\"HEPC153rua\",\"HEPC153rua\",\"HEPC153rua\"],\"shape\":[24],\"dtype\":\"object\",\"order\":\"little\"}],[\"Ab_Conc_ng_mL\",{\"type\":\"ndarray\",\"array\":[10000.0,10000.0,3333.3333333333335,3333.3333333333335,1111.111111111111,1111.111111111111,370.3703703703704,370.3703703703704,123.45679012345678,123.45679012345678,41.1522633744856,41.1522633744856,13.717421124828531,13.717421124828531,4.572473708276178,4.572473708276178,1.5241579027587258,1.5241579027587258,0.5080526342529086,0.5080526342529086,0.16935087808430288,0.16935087808430288,0.056450292694767625,0.056450292694767625],\"shape\":[24],\"dtype\":\"object\",\"order\":\"little\"}],[\"OD450\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"g8DKoUW28z+e76fGSzfxPzeJQWDl0PA/BoGVQ4ts8T/0/dR46SbpPz0K16NwPeo/L90kBoGV2z8dWmQ730/dP90kBoGVQ8s/ZDvfT42Xzj/Jdr6fGi+9PyGwcmiR7bw/i2zn+6nxsj8730+Nl26yPzm0yHa+n6o/ObTIdr6fqj/6fmq8dJOoP+kmMQisHKo/WmQ730+Npz/6fmq8dJOoP/T91HjpJrE/WmQ730+Npz9aZDvfT42nPylcj8L1KKw/\"},\"shape\":[24],\"dtype\":\"float64\",\"order\":\"little\"}],[\"Strain\",{\"type\":\"ndarray\",\"array\":[\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\"],\"shape\":[24],\"dtype\":\"object\",\"order\":\"little\"}],[\"Variant\",{\"type\":\"ndarray\",\"array\":[\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\"],\"shape\":[24],\"dtype\":\"object\",\"order\":\"little\"}]]}}},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p1239\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p1240\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"Circle\",\"id\":\"p1235\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"Ab_Conc_ng_mL\"},\"y\":{\"type\":\"field\",\"field\":\"OD450\"},\"line_color\":{\"type\":\"value\",\"value\":\"#ff7f0e\"},\"fill_color\":{\"type\":\"value\",\"value\":\"#ff7f0e\"},\"hatch_color\":{\"type\":\"value\",\"value\":\"#ff7f0e\"}}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"Circle\",\"id\":\"p1236\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"Ab_Conc_ng_mL\"},\"y\":{\"type\":\"field\",\"field\":\"OD450\"},\"line_color\":{\"type\":\"value\",\"value\":\"#ff7f0e\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.1},\"fill_color\":{\"type\":\"value\",\"value\":\"#ff7f0e\"},\"fill_alpha\":{\"type\":\"value\",\"value\":0.1},\"hatch_color\":{\"type\":\"value\",\"value\":\"#ff7f0e\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.1}}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"Circle\",\"id\":\"p1237\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"Ab_Conc_ng_mL\"},\"y\":{\"type\":\"field\",\"field\":\"OD450\"},\"line_color\":{\"type\":\"value\",\"value\":\"#ff7f0e\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.2},\"fill_color\":{\"type\":\"value\",\"value\":\"#ff7f0e\"},\"fill_alpha\":{\"type\":\"value\",\"value\":0.2},\"hatch_color\":{\"type\":\"value\",\"value\":\"#ff7f0e\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.2}}}}}],\"toolbar\":{\"type\":\"object\",\"name\":\"Toolbar\",\"id\":\"p1197\",\"attributes\":{\"tools\":[{\"id\":\"p1210\"},{\"id\":\"p1211\"},{\"id\":\"p1212\"},{\"type\":\"object\",\"name\":\"SaveTool\",\"id\":\"p1214\"},{\"id\":\"p1215\"},{\"id\":\"p1216\"}]}},\"toolbar_location\":null,\"left\":[{\"type\":\"object\",\"name\":\"LinearAxis\",\"id\":\"p1205\",\"attributes\":{\"ticker\":{\"type\":\"object\",\"name\":\"BasicTicker\",\"id\":\"p1206\",\"attributes\":{\"mantissas\":[1,2,5]}},\"formatter\":{\"type\":\"object\",\"name\":\"BasicTickFormatter\",\"id\":\"p1207\"},\"major_label_policy\":{\"type\":\"object\",\"name\":\"AllLabels\",\"id\":\"p1208\"}}}],\"below\":[{\"type\":\"object\",\"name\":\"LogAxis\",\"id\":\"p1200\",\"attributes\":{\"ticker\":{\"type\":\"object\",\"name\":\"LogTicker\",\"id\":\"p1201\",\"attributes\":{\"num_minor_ticks\":10,\"mantissas\":[1,5]}},\"formatter\":{\"type\":\"object\",\"name\":\"LogTickFormatter\",\"id\":\"p1202\"},\"major_label_policy\":{\"type\":\"object\",\"name\":\"AllLabels\",\"id\":\"p1203\"}}}],\"center\":[{\"type\":\"object\",\"name\":\"Grid\",\"id\":\"p1204\",\"attributes\":{\"axis\":{\"id\":\"p1200\"}}},{\"type\":\"object\",\"name\":\"Grid\",\"id\":\"p1209\",\"attributes\":{\"dimension\":1,\"axis\":{\"id\":\"p1205\"}}}],\"frame_width\":200,\"frame_height\":200}},1,1],[{\"type\":\"object\",\"name\":\"Figure\",\"id\":\"p1241\",\"attributes\":{\"x_range\":{\"id\":\"p1002\"},\"y_range\":{\"id\":\"p1003\"},\"x_scale\":{\"type\":\"object\",\"name\":\"LogScale\",\"id\":\"p1251\"},\"y_scale\":{\"type\":\"object\",\"name\":\"LinearScale\",\"id\":\"p1252\"},\"title\":{\"type\":\"object\",\"name\":\"Title\",\"id\":\"p1244\",\"attributes\":{\"text\":\"1a157, HEPC74\"}},\"renderers\":[{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p1279\",\"attributes\":{\"data_source\":{\"type\":\"object\",\"name\":\"ColumnDataSource\",\"id\":\"p1270\",\"attributes\":{\"selected\":{\"type\":\"object\",\"name\":\"Selection\",\"id\":\"p1271\",\"attributes\":{\"indices\":[],\"line_indices\":[]}},\"selection_policy\":{\"type\":\"object\",\"name\":\"UnionRenderers\",\"id\":\"p1272\"},\"data\":{\"type\":\"map\",\"entries\":[[\"index\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"AAAAAAEAAAAIAAAACQAAABAAAAARAAAAGAAAABkAAAAgAAAAIQAAACgAAAApAAAAMAAAADEAAAA4AAAAOQAAAEAAAABBAAAASAAAAEkAAABQAAAAUQAAAFgAAABZAAAA\"},\"shape\":[24],\"dtype\":\"int32\",\"order\":\"little\"}],[\"Antibody\",{\"type\":\"ndarray\",\"array\":[\"HEPC74\",\"HEPC74\",\"HEPC74\",\"HEPC74\",\"HEPC74\",\"HEPC74\",\"HEPC74\",\"HEPC74\",\"HEPC74\",\"HEPC74\",\"HEPC74\",\"HEPC74\",\"HEPC74\",\"HEPC74\",\"HEPC74\",\"HEPC74\",\"HEPC74\",\"HEPC74\",\"HEPC74\",\"HEPC74\",\"HEPC74\",\"HEPC74\",\"HEPC74\",\"HEPC74\"],\"shape\":[24],\"dtype\":\"object\",\"order\":\"little\"}],[\"Ab_Conc_ng_mL\",{\"type\":\"ndarray\",\"array\":[10000.0,10000.0,3333.3333333333335,3333.3333333333335,1111.111111111111,1111.111111111111,370.3703703703704,370.3703703703704,123.45679012345678,123.45679012345678,41.1522633744856,41.1522633744856,13.717421124828531,13.717421124828531,4.572473708276178,4.572473708276178,1.5241579027587258,1.5241579027587258,0.5080526342529086,0.5080526342529086,0.16935087808430288,0.16935087808430288,0.056450292694767625,0.056450292694767625],\"shape\":[24],\"dtype\":\"object\",\"order\":\"little\"}],[\"OD450\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"1XjpJjEIB0C+nxov3SQHQKRwPQrXowVAzczMzMzMBUDfT42XbhIGQGZmZmZmZgZAdZMYBFYOBkBOYhBYObQEQAwCK4cW2QBAhxbZzvdTAUAK16NwPQr5P5huEoPAyvc/6SYxCKwc6j99PzVeuknoP2ZmZmZmZtY/w/UoXI/C1T8rhxbZzvfDP4PAyqFFtsM/CtejcD0Ktz8bL90kBoG1P1TjpZvEILA/aJHtfD81rj/ZzvdT46WrPzm0yHa+n6o/\"},\"shape\":[24],\"dtype\":\"float64\",\"order\":\"little\"}],[\"Strain\",{\"type\":\"ndarray\",\"array\":[\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\"],\"shape\":[24],\"dtype\":\"object\",\"order\":\"little\"}],[\"Variant\",{\"type\":\"ndarray\",\"array\":[\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\"],\"shape\":[24],\"dtype\":\"object\",\"order\":\"little\"}]]}}},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p1280\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p1281\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"Circle\",\"id\":\"p1276\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"Ab_Conc_ng_mL\"},\"y\":{\"type\":\"field\",\"field\":\"OD450\"},\"line_color\":{\"type\":\"value\",\"value\":\"#1f77b4\"},\"fill_color\":{\"type\":\"value\",\"value\":\"#1f77b4\"},\"hatch_color\":{\"type\":\"value\",\"value\":\"#1f77b4\"}}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"Circle\",\"id\":\"p1277\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"Ab_Conc_ng_mL\"},\"y\":{\"type\":\"field\",\"field\":\"OD450\"},\"line_color\":{\"type\":\"value\",\"value\":\"#1f77b4\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.1},\"fill_color\":{\"type\":\"value\",\"value\":\"#1f77b4\"},\"fill_alpha\":{\"type\":\"value\",\"value\":0.1},\"hatch_color\":{\"type\":\"value\",\"value\":\"#1f77b4\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.1}}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"Circle\",\"id\":\"p1278\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"Ab_Conc_ng_mL\"},\"y\":{\"type\":\"field\",\"field\":\"OD450\"},\"line_color\":{\"type\":\"value\",\"value\":\"#1f77b4\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.2},\"fill_color\":{\"type\":\"value\",\"value\":\"#1f77b4\"},\"fill_alpha\":{\"type\":\"value\",\"value\":0.2},\"hatch_color\":{\"type\":\"value\",\"value\":\"#1f77b4\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.2}}}}},{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p1291\",\"attributes\":{\"data_source\":{\"type\":\"object\",\"name\":\"ColumnDataSource\",\"id\":\"p1282\",\"attributes\":{\"selected\":{\"type\":\"object\",\"name\":\"Selection\",\"id\":\"p1283\",\"attributes\":{\"indices\":[],\"line_indices\":[]}},\"selection_policy\":{\"type\":\"object\",\"name\":\"UnionRenderers\",\"id\":\"p1284\"},\"data\":{\"type\":\"map\",\"entries\":[[\"index\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"AAAAAAEAAAAIAAAACQAAABAAAAARAAAAGAAAABkAAAAgAAAAIQAAACgAAAApAAAAMAAAADEAAAA4AAAAOQAAAEAAAABBAAAASAAAAEkAAABQAAAAUQAAAFgAAABZAAAA\"},\"shape\":[24],\"dtype\":\"int32\",\"order\":\"little\"}],[\"Antibody\",{\"type\":\"ndarray\",\"array\":[\"HEPC74\",\"HEPC74\",\"HEPC74\",\"HEPC74\",\"HEPC74\",\"HEPC74\",\"HEPC74\",\"HEPC74\",\"HEPC74\",\"HEPC74\",\"HEPC74\",\"HEPC74\",\"HEPC74\",\"HEPC74\",\"HEPC74\",\"HEPC74\",\"HEPC74\",\"HEPC74\",\"HEPC74\",\"HEPC74\",\"HEPC74\",\"HEPC74\",\"HEPC74\",\"HEPC74\"],\"shape\":[24],\"dtype\":\"object\",\"order\":\"little\"}],[\"Ab_Conc_ng_mL\",{\"type\":\"ndarray\",\"array\":[10000.0,10000.0,3333.3333333333335,3333.3333333333335,1111.111111111111,1111.111111111111,370.3703703703704,370.3703703703704,123.45679012345678,123.45679012345678,41.1522633744856,41.1522633744856,13.717421124828531,13.717421124828531,4.572473708276178,4.572473708276178,1.5241579027587258,1.5241579027587258,0.5080526342529086,0.5080526342529086,0.16935087808430288,0.16935087808430288,0.056450292694767625,0.056450292694767625],\"shape\":[24],\"dtype\":\"object\",\"order\":\"little\"}],[\"OD450\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"5dAi2/l+CkD0/dR46SYKQDMzMzMzMwlAJQaBlUOLCUDy0k1iEFgJQFg5tMh2vghA0SLb+X5qCEBGtvP91HgHQAwCK4cW2QRACtejcD0KBUB9PzVeukkAQJzEILByaP8/NV66SQwC8z/Xo3A9CtfxP/YoXI/C9eA/fT81XrpJ4D/RItv5fmrMP+F6FK5H4co/ObTIdr6fuj/y0k1iEFi5P1TjpZvEILA/001iEFg5tD9I4XoUrkfBP4lBYOXQIqs/\"},\"shape\":[24],\"dtype\":\"float64\",\"order\":\"little\"}],[\"Strain\",{\"type\":\"ndarray\",\"array\":[\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\"],\"shape\":[24],\"dtype\":\"object\",\"order\":\"little\"}],[\"Variant\",{\"type\":\"ndarray\",\"array\":[\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\"],\"shape\":[24],\"dtype\":\"object\",\"order\":\"little\"}]]}}},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p1292\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p1293\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"Circle\",\"id\":\"p1288\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"Ab_Conc_ng_mL\"},\"y\":{\"type\":\"field\",\"field\":\"OD450\"},\"line_color\":{\"type\":\"value\",\"value\":\"#ff7f0e\"},\"fill_color\":{\"type\":\"value\",\"value\":\"#ff7f0e\"},\"hatch_color\":{\"type\":\"value\",\"value\":\"#ff7f0e\"}}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"Circle\",\"id\":\"p1289\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"Ab_Conc_ng_mL\"},\"y\":{\"type\":\"field\",\"field\":\"OD450\"},\"line_color\":{\"type\":\"value\",\"value\":\"#ff7f0e\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.1},\"fill_color\":{\"type\":\"value\",\"value\":\"#ff7f0e\"},\"fill_alpha\":{\"type\":\"value\",\"value\":0.1},\"hatch_color\":{\"type\":\"value\",\"value\":\"#ff7f0e\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.1}}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"Circle\",\"id\":\"p1290\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"Ab_Conc_ng_mL\"},\"y\":{\"type\":\"field\",\"field\":\"OD450\"},\"line_color\":{\"type\":\"value\",\"value\":\"#ff7f0e\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.2},\"fill_color\":{\"type\":\"value\",\"value\":\"#ff7f0e\"},\"fill_alpha\":{\"type\":\"value\",\"value\":0.2},\"hatch_color\":{\"type\":\"value\",\"value\":\"#ff7f0e\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.2}}}}},{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p1303\",\"attributes\":{\"data_source\":{\"type\":\"object\",\"name\":\"ColumnDataSource\",\"id\":\"p1294\",\"attributes\":{\"selected\":{\"type\":\"object\",\"name\":\"Selection\",\"id\":\"p1295\",\"attributes\":{\"indices\":[],\"line_indices\":[]}},\"selection_policy\":{\"type\":\"object\",\"name\":\"UnionRenderers\",\"id\":\"p1296\"},\"data\":{\"type\":\"map\",\"entries\":[[\"index\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"AAAAAAEAAAAIAAAACQAAABAAAAARAAAAGAAAABkAAAAgAAAAIQAAACgAAAApAAAAMAAAADEAAAA4AAAAOQAAAEAAAABBAAAASAAAAEkAAABQAAAAUQAAAFgAAABZAAAA\"},\"shape\":[24],\"dtype\":\"int32\",\"order\":\"little\"}],[\"Antibody\",{\"type\":\"ndarray\",\"array\":[\"HEPC74\",\"HEPC74\",\"HEPC74\",\"HEPC74\",\"HEPC74\",\"HEPC74\",\"HEPC74\",\"HEPC74\",\"HEPC74\",\"HEPC74\",\"HEPC74\",\"HEPC74\",\"HEPC74\",\"HEPC74\",\"HEPC74\",\"HEPC74\",\"HEPC74\",\"HEPC74\",\"HEPC74\",\"HEPC74\",\"HEPC74\",\"HEPC74\",\"HEPC74\",\"HEPC74\"],\"shape\":[24],\"dtype\":\"object\",\"order\":\"little\"}],[\"Ab_Conc_ng_mL\",{\"type\":\"ndarray\",\"array\":[10000.0,10000.0,3333.3333333333335,3333.3333333333335,1111.111111111111,1111.111111111111,370.3703703703704,370.3703703703704,123.45679012345678,123.45679012345678,41.1522633744856,41.1522633744856,13.717421124828531,13.717421124828531,4.572473708276178,4.572473708276178,1.5241579027587258,1.5241579027587258,0.5080526342529086,0.5080526342529086,0.16935087808430288,0.16935087808430288,0.056450292694767625,0.056450292694767625],\"shape\":[24],\"dtype\":\"object\",\"order\":\"little\"}],[\"OD450\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"46WbxCCwB0BiEFg5tMgIQMUgsHJokQhAbxKDwMqhCEBEi2zn+6kIQNNNYhBYOQhAaJHtfD81CEB9PzVeukkHQNEi2/l+agRAMQisHFpkBECcxCCwcmj/P7TIdr6fGv8/UI2XbhKD8j/HSzeJQWDxP+xRuB6F6+E/sHJoke183z8lBoGVQ4vMPz0K16NwPco/6SYxCKwcuj/y0k1iEFi5P/yp8dJNYrA/WDm0yHa+rz+JQWDl0CKrPzm0yHa+n6o/\"},\"shape\":[24],\"dtype\":\"float64\",\"order\":\"little\"}],[\"Strain\",{\"type\":\"ndarray\",\"array\":[\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\"],\"shape\":[24],\"dtype\":\"object\",\"order\":\"little\"}],[\"Variant\",{\"type\":\"ndarray\",\"array\":[\"Y527H\",\"Y527H\",\"Y527H\",\"Y527H\",\"Y527H\",\"Y527H\",\"Y527H\",\"Y527H\",\"Y527H\",\"Y527H\",\"Y527H\",\"Y527H\",\"Y527H\",\"Y527H\",\"Y527H\",\"Y527H\",\"Y527H\",\"Y527H\",\"Y527H\",\"Y527H\",\"Y527H\",\"Y527H\",\"Y527H\",\"Y527H\"],\"shape\":[24],\"dtype\":\"object\",\"order\":\"little\"}]]}}},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p1304\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p1305\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"Circle\",\"id\":\"p1300\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"Ab_Conc_ng_mL\"},\"y\":{\"type\":\"field\",\"field\":\"OD450\"},\"line_color\":{\"type\":\"value\",\"value\":\"#2ca02c\"},\"fill_color\":{\"type\":\"value\",\"value\":\"#2ca02c\"},\"hatch_color\":{\"type\":\"value\",\"value\":\"#2ca02c\"}}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"Circle\",\"id\":\"p1301\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"Ab_Conc_ng_mL\"},\"y\":{\"type\":\"field\",\"field\":\"OD450\"},\"line_color\":{\"type\":\"value\",\"value\":\"#2ca02c\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.1},\"fill_color\":{\"type\":\"value\",\"value\":\"#2ca02c\"},\"fill_alpha\":{\"type\":\"value\",\"value\":0.1},\"hatch_color\":{\"type\":\"value\",\"value\":\"#2ca02c\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.1}}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"Circle\",\"id\":\"p1302\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"Ab_Conc_ng_mL\"},\"y\":{\"type\":\"field\",\"field\":\"OD450\"},\"line_color\":{\"type\":\"value\",\"value\":\"#2ca02c\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.2},\"fill_color\":{\"type\":\"value\",\"value\":\"#2ca02c\"},\"fill_alpha\":{\"type\":\"value\",\"value\":0.2},\"hatch_color\":{\"type\":\"value\",\"value\":\"#2ca02c\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.2}}}}}],\"toolbar\":{\"type\":\"object\",\"name\":\"Toolbar\",\"id\":\"p1250\",\"attributes\":{\"tools\":[{\"id\":\"p1263\"},{\"id\":\"p1264\"},{\"id\":\"p1265\"},{\"type\":\"object\",\"name\":\"SaveTool\",\"id\":\"p1267\"},{\"id\":\"p1268\"},{\"id\":\"p1269\"}]}},\"toolbar_location\":null,\"left\":[{\"type\":\"object\",\"name\":\"LinearAxis\",\"id\":\"p1258\",\"attributes\":{\"ticker\":{\"type\":\"object\",\"name\":\"BasicTicker\",\"id\":\"p1259\",\"attributes\":{\"mantissas\":[1,2,5]}},\"formatter\":{\"type\":\"object\",\"name\":\"BasicTickFormatter\",\"id\":\"p1260\"},\"axis_label\":\"OD450\",\"major_label_policy\":{\"type\":\"object\",\"name\":\"AllLabels\",\"id\":\"p1261\"}}}],\"below\":[{\"type\":\"object\",\"name\":\"LogAxis\",\"id\":\"p1253\",\"attributes\":{\"ticker\":{\"type\":\"object\",\"name\":\"LogTicker\",\"id\":\"p1254\",\"attributes\":{\"num_minor_ticks\":10,\"mantissas\":[1,5]}},\"formatter\":{\"type\":\"object\",\"name\":\"LogTickFormatter\",\"id\":\"p1255\"},\"major_label_policy\":{\"type\":\"object\",\"name\":\"AllLabels\",\"id\":\"p1256\"}}}],\"center\":[{\"type\":\"object\",\"name\":\"Grid\",\"id\":\"p1257\",\"attributes\":{\"axis\":{\"id\":\"p1253\"}}},{\"type\":\"object\",\"name\":\"Grid\",\"id\":\"p1262\",\"attributes\":{\"dimension\":1,\"axis\":{\"id\":\"p1258\"}}}],\"frame_width\":200,\"frame_height\":200}},2,0],[{\"type\":\"object\",\"name\":\"Figure\",\"id\":\"p1306\",\"attributes\":{\"x_range\":{\"id\":\"p1002\"},\"y_range\":{\"id\":\"p1003\"},\"x_scale\":{\"type\":\"object\",\"name\":\"LogScale\",\"id\":\"p1316\"},\"y_scale\":{\"type\":\"object\",\"name\":\"LinearScale\",\"id\":\"p1317\"},\"title\":{\"type\":\"object\",\"name\":\"Title\",\"id\":\"p1309\",\"attributes\":{\"text\":\"1a53, HEPC74\"}},\"renderers\":[{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p1344\",\"attributes\":{\"data_source\":{\"type\":\"object\",\"name\":\"ColumnDataSource\",\"id\":\"p1335\",\"attributes\":{\"selected\":{\"type\":\"object\",\"name\":\"Selection\",\"id\":\"p1336\",\"attributes\":{\"indices\":[],\"line_indices\":[]}},\"selection_policy\":{\"type\":\"object\",\"name\":\"UnionRenderers\",\"id\":\"p1337\"},\"data\":{\"type\":\"map\",\"entries\":[[\"index\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"AAAAAAEAAAAIAAAACQAAABAAAAARAAAAGAAAABkAAAAgAAAAIQAAACgAAAApAAAAMAAAADEAAAA4AAAAOQAAAEAAAABBAAAASAAAAEkAAABQAAAAUQAAAFgAAABZAAAA\"},\"shape\":[24],\"dtype\":\"int32\",\"order\":\"little\"}],[\"Antibody\",{\"type\":\"ndarray\",\"array\":[\"HEPC74\",\"HEPC74\",\"HEPC74\",\"HEPC74\",\"HEPC74\",\"HEPC74\",\"HEPC74\",\"HEPC74\",\"HEPC74\",\"HEPC74\",\"HEPC74\",\"HEPC74\",\"HEPC74\",\"HEPC74\",\"HEPC74\",\"HEPC74\",\"HEPC74\",\"HEPC74\",\"HEPC74\",\"HEPC74\",\"HEPC74\",\"HEPC74\",\"HEPC74\",\"HEPC74\"],\"shape\":[24],\"dtype\":\"object\",\"order\":\"little\"}],[\"Ab_Conc_ng_mL\",{\"type\":\"ndarray\",\"array\":[10000.0,10000.0,3333.3333333333335,3333.3333333333335,1111.111111111111,1111.111111111111,370.3703703703704,370.3703703703704,123.45679012345678,123.45679012345678,41.1522633744856,41.1522633744856,13.717421124828531,13.717421124828531,4.572473708276178,4.572473708276178,1.5241579027587258,1.5241579027587258,0.5080526342529086,0.5080526342529086,0.16935087808430288,0.16935087808430288,0.056450292694767625,0.056450292694767625],\"shape\":[24],\"dtype\":\"object\",\"order\":\"little\"}],[\"OD450\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"okW28/3UCECTGARWDi0IQDMzMzMzMwdA4XoUrkfhBECYbhKDwMoGQIXrUbgehQRAPzVeukkMBkDsUbgehesFQJ7vp8ZLNwNAgZVDi2znAUDwp8ZLN4n7P8HKoUW28/k/ukkMAiuH7j8Sg8DKoUXuPyGwcmiR7dw/NV66SQwC2z9SuB6F61HIPwIrhxbZzsc/+n5qvHSTuD9aZDvfT423P1TjpZvEILA/TDeJQWDlsD8pXI/C9SisP9nO91Pjpas/\"},\"shape\":[24],\"dtype\":\"float64\",\"order\":\"little\"}],[\"Strain\",{\"type\":\"ndarray\",\"array\":[\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\"],\"shape\":[24],\"dtype\":\"object\",\"order\":\"little\"}],[\"Variant\",{\"type\":\"ndarray\",\"array\":[\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\"],\"shape\":[24],\"dtype\":\"object\",\"order\":\"little\"}]]}}},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p1345\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p1346\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"Circle\",\"id\":\"p1341\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"Ab_Conc_ng_mL\"},\"y\":{\"type\":\"field\",\"field\":\"OD450\"},\"line_color\":{\"type\":\"value\",\"value\":\"#1f77b4\"},\"fill_color\":{\"type\":\"value\",\"value\":\"#1f77b4\"},\"hatch_color\":{\"type\":\"value\",\"value\":\"#1f77b4\"}}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"Circle\",\"id\":\"p1342\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"Ab_Conc_ng_mL\"},\"y\":{\"type\":\"field\",\"field\":\"OD450\"},\"line_color\":{\"type\":\"value\",\"value\":\"#1f77b4\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.1},\"fill_color\":{\"type\":\"value\",\"value\":\"#1f77b4\"},\"fill_alpha\":{\"type\":\"value\",\"value\":0.1},\"hatch_color\":{\"type\":\"value\",\"value\":\"#1f77b4\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.1}}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"Circle\",\"id\":\"p1343\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"Ab_Conc_ng_mL\"},\"y\":{\"type\":\"field\",\"field\":\"OD450\"},\"line_color\":{\"type\":\"value\",\"value\":\"#1f77b4\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.2},\"fill_color\":{\"type\":\"value\",\"value\":\"#1f77b4\"},\"fill_alpha\":{\"type\":\"value\",\"value\":0.2},\"hatch_color\":{\"type\":\"value\",\"value\":\"#1f77b4\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.2}}}}},{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p1356\",\"attributes\":{\"data_source\":{\"type\":\"object\",\"name\":\"ColumnDataSource\",\"id\":\"p1347\",\"attributes\":{\"selected\":{\"type\":\"object\",\"name\":\"Selection\",\"id\":\"p1348\",\"attributes\":{\"indices\":[],\"line_indices\":[]}},\"selection_policy\":{\"type\":\"object\",\"name\":\"UnionRenderers\",\"id\":\"p1349\"},\"data\":{\"type\":\"map\",\"entries\":[[\"index\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"AAAAAAEAAAAIAAAACQAAABAAAAARAAAAGAAAABkAAAAgAAAAIQAAACgAAAApAAAAMAAAADEAAAA4AAAAOQAAAEAAAABBAAAASAAAAEkAAABQAAAAUQAAAFgAAABZAAAA\"},\"shape\":[24],\"dtype\":\"int32\",\"order\":\"little\"}],[\"Antibody\",{\"type\":\"ndarray\",\"array\":[\"HEPC74\",\"HEPC74\",\"HEPC74\",\"HEPC74\",\"HEPC74\",\"HEPC74\",\"HEPC74\",\"HEPC74\",\"HEPC74\",\"HEPC74\",\"HEPC74\",\"HEPC74\",\"HEPC74\",\"HEPC74\",\"HEPC74\",\"HEPC74\",\"HEPC74\",\"HEPC74\",\"HEPC74\",\"HEPC74\",\"HEPC74\",\"HEPC74\",\"HEPC74\",\"HEPC74\"],\"shape\":[24],\"dtype\":\"object\",\"order\":\"little\"}],[\"Ab_Conc_ng_mL\",{\"type\":\"ndarray\",\"array\":[10000.0,10000.0,3333.3333333333335,3333.3333333333335,1111.111111111111,1111.111111111111,370.3703703703704,370.3703703703704,123.45679012345678,123.45679012345678,41.1522633744856,41.1522633744856,13.717421124828531,13.717421124828531,4.572473708276178,4.572473708276178,1.5241579027587258,1.5241579027587258,0.5080526342529086,0.5080526342529086,0.16935087808430288,0.16935087808430288,0.056450292694767625,0.056450292694767625],\"shape\":[24],\"dtype\":\"object\",\"order\":\"little\"}],[\"OD450\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"8KfGSzeJCUASg8DKoUUKQCUGgZVDiwpAxSCwcmiRCEAQWDm0yHYIQFTjpZvEIAhAiUFg5dAiCECwcmiR7XwHQPCnxks3iQRAvp8aL90kBEAnMQisHFoAQLpJDAIrh/4/6SYxCKwc8j+Nl24Sg8DwP8l2vp8aL+E/uB6F61G43j99PzVeuknMP+kmMQisHMo/mpmZmZmZuT+iRbbz/dS4P5zEILByaLE/CKwcWmQ7rz+JQWDl0CKrP+kmMQisHKo/\"},\"shape\":[24],\"dtype\":\"float64\",\"order\":\"little\"}],[\"Strain\",{\"type\":\"ndarray\",\"array\":[\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\"],\"shape\":[24],\"dtype\":\"object\",\"order\":\"little\"}],[\"Variant\",{\"type\":\"ndarray\",\"array\":[\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\"],\"shape\":[24],\"dtype\":\"object\",\"order\":\"little\"}]]}}},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p1357\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p1358\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"Circle\",\"id\":\"p1353\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"Ab_Conc_ng_mL\"},\"y\":{\"type\":\"field\",\"field\":\"OD450\"},\"line_color\":{\"type\":\"value\",\"value\":\"#ff7f0e\"},\"fill_color\":{\"type\":\"value\",\"value\":\"#ff7f0e\"},\"hatch_color\":{\"type\":\"value\",\"value\":\"#ff7f0e\"}}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"Circle\",\"id\":\"p1354\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"Ab_Conc_ng_mL\"},\"y\":{\"type\":\"field\",\"field\":\"OD450\"},\"line_color\":{\"type\":\"value\",\"value\":\"#ff7f0e\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.1},\"fill_color\":{\"type\":\"value\",\"value\":\"#ff7f0e\"},\"fill_alpha\":{\"type\":\"value\",\"value\":0.1},\"hatch_color\":{\"type\":\"value\",\"value\":\"#ff7f0e\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.1}}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"Circle\",\"id\":\"p1355\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"Ab_Conc_ng_mL\"},\"y\":{\"type\":\"field\",\"field\":\"OD450\"},\"line_color\":{\"type\":\"value\",\"value\":\"#ff7f0e\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.2},\"fill_color\":{\"type\":\"value\",\"value\":\"#ff7f0e\"},\"fill_alpha\":{\"type\":\"value\",\"value\":0.2},\"hatch_color\":{\"type\":\"value\",\"value\":\"#ff7f0e\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.2}}}}}],\"toolbar\":{\"type\":\"object\",\"name\":\"Toolbar\",\"id\":\"p1315\",\"attributes\":{\"tools\":[{\"id\":\"p1328\"},{\"id\":\"p1329\"},{\"id\":\"p1330\"},{\"type\":\"object\",\"name\":\"SaveTool\",\"id\":\"p1332\"},{\"id\":\"p1333\"},{\"id\":\"p1334\"}]}},\"toolbar_location\":null,\"left\":[{\"type\":\"object\",\"name\":\"LinearAxis\",\"id\":\"p1323\",\"attributes\":{\"ticker\":{\"type\":\"object\",\"name\":\"BasicTicker\",\"id\":\"p1324\",\"attributes\":{\"mantissas\":[1,2,5]}},\"formatter\":{\"type\":\"object\",\"name\":\"BasicTickFormatter\",\"id\":\"p1325\"},\"major_label_policy\":{\"type\":\"object\",\"name\":\"AllLabels\",\"id\":\"p1326\"}}}],\"below\":[{\"type\":\"object\",\"name\":\"LogAxis\",\"id\":\"p1318\",\"attributes\":{\"ticker\":{\"type\":\"object\",\"name\":\"LogTicker\",\"id\":\"p1319\",\"attributes\":{\"num_minor_ticks\":10,\"mantissas\":[1,5]}},\"formatter\":{\"type\":\"object\",\"name\":\"LogTickFormatter\",\"id\":\"p1320\"},\"major_label_policy\":{\"type\":\"object\",\"name\":\"AllLabels\",\"id\":\"p1321\"}}}],\"center\":[{\"type\":\"object\",\"name\":\"Grid\",\"id\":\"p1322\",\"attributes\":{\"axis\":{\"id\":\"p1318\"}}},{\"type\":\"object\",\"name\":\"Grid\",\"id\":\"p1327\",\"attributes\":{\"dimension\":1,\"axis\":{\"id\":\"p1323\"}}}],\"frame_width\":200,\"frame_height\":200}},2,1],[{\"type\":\"object\",\"name\":\"Figure\",\"id\":\"p1359\",\"attributes\":{\"x_range\":{\"id\":\"p1002\"},\"y_range\":{\"id\":\"p1003\"},\"x_scale\":{\"type\":\"object\",\"name\":\"LogScale\",\"id\":\"p1369\"},\"y_scale\":{\"type\":\"object\",\"name\":\"LinearScale\",\"id\":\"p1370\"},\"title\":{\"type\":\"object\",\"name\":\"Title\",\"id\":\"p1362\",\"attributes\":{\"text\":\"1a157, HEPC74rua\"}},\"renderers\":[{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p1397\",\"attributes\":{\"data_source\":{\"type\":\"object\",\"name\":\"ColumnDataSource\",\"id\":\"p1388\",\"attributes\":{\"selected\":{\"type\":\"object\",\"name\":\"Selection\",\"id\":\"p1389\",\"attributes\":{\"indices\":[],\"line_indices\":[]}},\"selection_policy\":{\"type\":\"object\",\"name\":\"UnionRenderers\",\"id\":\"p1390\"},\"data\":{\"type\":\"map\",\"entries\":[[\"index\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"AgAAAAMAAAAKAAAACwAAABIAAAATAAAAGgAAABsAAAAiAAAAIwAAACoAAAArAAAAMgAAADMAAAA6AAAAOwAAAEIAAABDAAAASgAAAEsAAABSAAAAUwAAAFoAAABbAAAA\"},\"shape\":[24],\"dtype\":\"int32\",\"order\":\"little\"}],[\"Antibody\",{\"type\":\"ndarray\",\"array\":[\"HEPC74rua\",\"HEPC74rua\",\"HEPC74rua\",\"HEPC74rua\",\"HEPC74rua\",\"HEPC74rua\",\"HEPC74rua\",\"HEPC74rua\",\"HEPC74rua\",\"HEPC74rua\",\"HEPC74rua\",\"HEPC74rua\",\"HEPC74rua\",\"HEPC74rua\",\"HEPC74rua\",\"HEPC74rua\",\"HEPC74rua\",\"HEPC74rua\",\"HEPC74rua\",\"HEPC74rua\",\"HEPC74rua\",\"HEPC74rua\",\"HEPC74rua\",\"HEPC74rua\"],\"shape\":[24],\"dtype\":\"object\",\"order\":\"little\"}],[\"Ab_Conc_ng_mL\",{\"type\":\"ndarray\",\"array\":[10000.0,10000.0,3333.3333333333335,3333.3333333333335,1111.111111111111,1111.111111111111,370.3703703703704,370.3703703703704,123.45679012345678,123.45679012345678,41.1522633744856,41.1522633744856,13.717421124828531,13.717421124828531,4.572473708276178,4.572473708276178,1.5241579027587258,1.5241579027587258,0.5080526342529086,0.5080526342529086,0.16935087808430288,0.16935087808430288,0.056450292694767625,0.056450292694767625],\"shape\":[24],\"dtype\":\"object\",\"order\":\"little\"}],[\"OD450\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"mpmZmZmZBUAj2/l+arwGQPLSTWIQWAVAcT0K16NwBkDufD81XroEQLKd76fGSwVAEoPAyqFFA0CF61G4HoUDQEoMAiuHFv0/2/l+arx0/T+amZmZmZnxPxKDwMqhRfI/SOF6FK5H4T9KDAIrhxbhP7gehetRuM4/sHJoke18zz8hsHJoke28P2iR7Xw/Nb4/kxgEVg4tsj9Ei2zn+6mxP3npJjEIrKw/CKwcWmQ7rz/pJjEIrByqP+kmMQisHKo/\"},\"shape\":[24],\"dtype\":\"float64\",\"order\":\"little\"}],[\"Strain\",{\"type\":\"ndarray\",\"array\":[\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\"],\"shape\":[24],\"dtype\":\"object\",\"order\":\"little\"}],[\"Variant\",{\"type\":\"ndarray\",\"array\":[\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\"],\"shape\":[24],\"dtype\":\"object\",\"order\":\"little\"}]]}}},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p1398\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p1399\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"Circle\",\"id\":\"p1394\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"Ab_Conc_ng_mL\"},\"y\":{\"type\":\"field\",\"field\":\"OD450\"},\"line_color\":{\"type\":\"value\",\"value\":\"#1f77b4\"},\"fill_color\":{\"type\":\"value\",\"value\":\"#1f77b4\"},\"hatch_color\":{\"type\":\"value\",\"value\":\"#1f77b4\"}}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"Circle\",\"id\":\"p1395\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"Ab_Conc_ng_mL\"},\"y\":{\"type\":\"field\",\"field\":\"OD450\"},\"line_color\":{\"type\":\"value\",\"value\":\"#1f77b4\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.1},\"fill_color\":{\"type\":\"value\",\"value\":\"#1f77b4\"},\"fill_alpha\":{\"type\":\"value\",\"value\":0.1},\"hatch_color\":{\"type\":\"value\",\"value\":\"#1f77b4\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.1}}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"Circle\",\"id\":\"p1396\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"Ab_Conc_ng_mL\"},\"y\":{\"type\":\"field\",\"field\":\"OD450\"},\"line_color\":{\"type\":\"value\",\"value\":\"#1f77b4\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.2},\"fill_color\":{\"type\":\"value\",\"value\":\"#1f77b4\"},\"fill_alpha\":{\"type\":\"value\",\"value\":0.2},\"hatch_color\":{\"type\":\"value\",\"value\":\"#1f77b4\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.2}}}}},{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p1409\",\"attributes\":{\"data_source\":{\"type\":\"object\",\"name\":\"ColumnDataSource\",\"id\":\"p1400\",\"attributes\":{\"selected\":{\"type\":\"object\",\"name\":\"Selection\",\"id\":\"p1401\",\"attributes\":{\"indices\":[],\"line_indices\":[]}},\"selection_policy\":{\"type\":\"object\",\"name\":\"UnionRenderers\",\"id\":\"p1402\"},\"data\":{\"type\":\"map\",\"entries\":[[\"index\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"AgAAAAMAAAAKAAAACwAAABIAAAATAAAAGgAAABsAAAAiAAAAIwAAACoAAAArAAAAMgAAADMAAAA6AAAAOwAAAEIAAABDAAAASgAAAEsAAABSAAAAUwAAAFoAAABbAAAA\"},\"shape\":[24],\"dtype\":\"int32\",\"order\":\"little\"}],[\"Antibody\",{\"type\":\"ndarray\",\"array\":[\"HEPC74rua\",\"HEPC74rua\",\"HEPC74rua\",\"HEPC74rua\",\"HEPC74rua\",\"HEPC74rua\",\"HEPC74rua\",\"HEPC74rua\",\"HEPC74rua\",\"HEPC74rua\",\"HEPC74rua\",\"HEPC74rua\",\"HEPC74rua\",\"HEPC74rua\",\"HEPC74rua\",\"HEPC74rua\",\"HEPC74rua\",\"HEPC74rua\",\"HEPC74rua\",\"HEPC74rua\",\"HEPC74rua\",\"HEPC74rua\",\"HEPC74rua\",\"HEPC74rua\"],\"shape\":[24],\"dtype\":\"object\",\"order\":\"little\"}],[\"Ab_Conc_ng_mL\",{\"type\":\"ndarray\",\"array\":[10000.0,10000.0,3333.3333333333335,3333.3333333333335,1111.111111111111,1111.111111111111,370.3703703703704,370.3703703703704,123.45679012345678,123.45679012345678,41.1522633744856,41.1522633744856,13.717421124828531,13.717421124828531,4.572473708276178,4.572473708276178,1.5241579027587258,1.5241579027587258,0.5080526342529086,0.5080526342529086,0.16935087808430288,0.16935087808430288,0.056450292694767625,0.056450292694767625],\"shape\":[24],\"dtype\":\"object\",\"order\":\"little\"}],[\"OD450\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"UrgehetRCUBqvHSTGAQKQGiR7Xw/NQhARIts5/upCEBt5/up8dIHQO58PzVeughARIts5/upBkCe76fGSzcHQEa28/3UeANA+FPjpZvEA0CuR+F6FK77P9Ei2/l+avw/bxKDwMqh7T8IrBxaZDvvPzvfT42Xbto/ObTIdr6f2j+6SQwCK4fGPw4tsp3vp8Y/ukkMAiuHtj+6SQwCK4e2P2iR7Xw/Na4/aJHtfD81rj+JQWDl0CKrP5qZmZmZmak/\"},\"shape\":[24],\"dtype\":\"float64\",\"order\":\"little\"}],[\"Strain\",{\"type\":\"ndarray\",\"array\":[\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\"],\"shape\":[24],\"dtype\":\"object\",\"order\":\"little\"}],[\"Variant\",{\"type\":\"ndarray\",\"array\":[\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\"],\"shape\":[24],\"dtype\":\"object\",\"order\":\"little\"}]]}}},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p1410\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p1411\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"Circle\",\"id\":\"p1406\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"Ab_Conc_ng_mL\"},\"y\":{\"type\":\"field\",\"field\":\"OD450\"},\"line_color\":{\"type\":\"value\",\"value\":\"#ff7f0e\"},\"fill_color\":{\"type\":\"value\",\"value\":\"#ff7f0e\"},\"hatch_color\":{\"type\":\"value\",\"value\":\"#ff7f0e\"}}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"Circle\",\"id\":\"p1407\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"Ab_Conc_ng_mL\"},\"y\":{\"type\":\"field\",\"field\":\"OD450\"},\"line_color\":{\"type\":\"value\",\"value\":\"#ff7f0e\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.1},\"fill_color\":{\"type\":\"value\",\"value\":\"#ff7f0e\"},\"fill_alpha\":{\"type\":\"value\",\"value\":0.1},\"hatch_color\":{\"type\":\"value\",\"value\":\"#ff7f0e\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.1}}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"Circle\",\"id\":\"p1408\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"Ab_Conc_ng_mL\"},\"y\":{\"type\":\"field\",\"field\":\"OD450\"},\"line_color\":{\"type\":\"value\",\"value\":\"#ff7f0e\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.2},\"fill_color\":{\"type\":\"value\",\"value\":\"#ff7f0e\"},\"fill_alpha\":{\"type\":\"value\",\"value\":0.2},\"hatch_color\":{\"type\":\"value\",\"value\":\"#ff7f0e\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.2}}}}},{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p1421\",\"attributes\":{\"data_source\":{\"type\":\"object\",\"name\":\"ColumnDataSource\",\"id\":\"p1412\",\"attributes\":{\"selected\":{\"type\":\"object\",\"name\":\"Selection\",\"id\":\"p1413\",\"attributes\":{\"indices\":[],\"line_indices\":[]}},\"selection_policy\":{\"type\":\"object\",\"name\":\"UnionRenderers\",\"id\":\"p1414\"},\"data\":{\"type\":\"map\",\"entries\":[[\"index\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"AgAAAAMAAAAKAAAACwAAABIAAAATAAAAGgAAABsAAAAiAAAAIwAAACoAAAArAAAAMgAAADMAAAA6AAAAOwAAAEIAAABDAAAASgAAAEsAAABSAAAAUwAAAFoAAABbAAAA\"},\"shape\":[24],\"dtype\":\"int32\",\"order\":\"little\"}],[\"Antibody\",{\"type\":\"ndarray\",\"array\":[\"HEPC74rua\",\"HEPC74rua\",\"HEPC74rua\",\"HEPC74rua\",\"HEPC74rua\",\"HEPC74rua\",\"HEPC74rua\",\"HEPC74rua\",\"HEPC74rua\",\"HEPC74rua\",\"HEPC74rua\",\"HEPC74rua\",\"HEPC74rua\",\"HEPC74rua\",\"HEPC74rua\",\"HEPC74rua\",\"HEPC74rua\",\"HEPC74rua\",\"HEPC74rua\",\"HEPC74rua\",\"HEPC74rua\",\"HEPC74rua\",\"HEPC74rua\",\"HEPC74rua\"],\"shape\":[24],\"dtype\":\"object\",\"order\":\"little\"}],[\"Ab_Conc_ng_mL\",{\"type\":\"ndarray\",\"array\":[10000.0,10000.0,3333.3333333333335,3333.3333333333335,1111.111111111111,1111.111111111111,370.3703703703704,370.3703703703704,123.45679012345678,123.45679012345678,41.1522633744856,41.1522633744856,13.717421124828531,13.717421124828531,4.572473708276178,4.572473708276178,1.5241579027587258,1.5241579027587258,0.5080526342529086,0.5080526342529086,0.16935087808430288,0.16935087808430288,0.056450292694767625,0.056450292694767625],\"shape\":[24],\"dtype\":\"object\",\"order\":\"little\"}],[\"OD450\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"NV66SQwCB0CR7Xw/NV4HQE5iEFg5tAZAXI/C9ShcB0B1kxgEVg4HQIcW2c73UwdAd76fGi/dBkB56SYxCKwGQJZDi2zn+wJApHA9CtejA0B56SYxCKz8P+XQItv5fvw/3SQGgZVD7z9oke18PzXwP9V46SYxCNw/DAIrhxbZ3j+q8dJNYhDIP1K4HoXrUcg/WmQ730+Ntz9KDAIrhxa5P7gehetRuK4/CKwcWmQ7rz/pJjEIrByqP5qZmZmZmak/\"},\"shape\":[24],\"dtype\":\"float64\",\"order\":\"little\"}],[\"Strain\",{\"type\":\"ndarray\",\"array\":[\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\",\"1a157\"],\"shape\":[24],\"dtype\":\"object\",\"order\":\"little\"}],[\"Variant\",{\"type\":\"ndarray\",\"array\":[\"Y527H\",\"Y527H\",\"Y527H\",\"Y527H\",\"Y527H\",\"Y527H\",\"Y527H\",\"Y527H\",\"Y527H\",\"Y527H\",\"Y527H\",\"Y527H\",\"Y527H\",\"Y527H\",\"Y527H\",\"Y527H\",\"Y527H\",\"Y527H\",\"Y527H\",\"Y527H\",\"Y527H\",\"Y527H\",\"Y527H\",\"Y527H\"],\"shape\":[24],\"dtype\":\"object\",\"order\":\"little\"}]]}}},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p1422\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p1423\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"Circle\",\"id\":\"p1418\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"Ab_Conc_ng_mL\"},\"y\":{\"type\":\"field\",\"field\":\"OD450\"},\"line_color\":{\"type\":\"value\",\"value\":\"#2ca02c\"},\"fill_color\":{\"type\":\"value\",\"value\":\"#2ca02c\"},\"hatch_color\":{\"type\":\"value\",\"value\":\"#2ca02c\"}}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"Circle\",\"id\":\"p1419\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"Ab_Conc_ng_mL\"},\"y\":{\"type\":\"field\",\"field\":\"OD450\"},\"line_color\":{\"type\":\"value\",\"value\":\"#2ca02c\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.1},\"fill_color\":{\"type\":\"value\",\"value\":\"#2ca02c\"},\"fill_alpha\":{\"type\":\"value\",\"value\":0.1},\"hatch_color\":{\"type\":\"value\",\"value\":\"#2ca02c\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.1}}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"Circle\",\"id\":\"p1420\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"Ab_Conc_ng_mL\"},\"y\":{\"type\":\"field\",\"field\":\"OD450\"},\"line_color\":{\"type\":\"value\",\"value\":\"#2ca02c\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.2},\"fill_color\":{\"type\":\"value\",\"value\":\"#2ca02c\"},\"fill_alpha\":{\"type\":\"value\",\"value\":0.2},\"hatch_color\":{\"type\":\"value\",\"value\":\"#2ca02c\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.2}}}}}],\"toolbar\":{\"type\":\"object\",\"name\":\"Toolbar\",\"id\":\"p1368\",\"attributes\":{\"tools\":[{\"id\":\"p1381\"},{\"id\":\"p1382\"},{\"id\":\"p1383\"},{\"type\":\"object\",\"name\":\"SaveTool\",\"id\":\"p1385\"},{\"id\":\"p1386\"},{\"id\":\"p1387\"}]}},\"toolbar_location\":null,\"left\":[{\"type\":\"object\",\"name\":\"LinearAxis\",\"id\":\"p1376\",\"attributes\":{\"ticker\":{\"type\":\"object\",\"name\":\"BasicTicker\",\"id\":\"p1377\",\"attributes\":{\"mantissas\":[1,2,5]}},\"formatter\":{\"type\":\"object\",\"name\":\"BasicTickFormatter\",\"id\":\"p1378\"},\"axis_label\":\"OD450\",\"major_label_policy\":{\"type\":\"object\",\"name\":\"AllLabels\",\"id\":\"p1379\"}}}],\"below\":[{\"type\":\"object\",\"name\":\"LogAxis\",\"id\":\"p1371\",\"attributes\":{\"ticker\":{\"type\":\"object\",\"name\":\"LogTicker\",\"id\":\"p1372\",\"attributes\":{\"num_minor_ticks\":10,\"mantissas\":[1,5]}},\"formatter\":{\"type\":\"object\",\"name\":\"LogTickFormatter\",\"id\":\"p1373\"},\"axis_label\":\"antibody concentration (ng/mL)\",\"major_label_policy\":{\"type\":\"object\",\"name\":\"AllLabels\",\"id\":\"p1374\"}}}],\"center\":[{\"type\":\"object\",\"name\":\"Grid\",\"id\":\"p1375\",\"attributes\":{\"axis\":{\"id\":\"p1371\"}}},{\"type\":\"object\",\"name\":\"Grid\",\"id\":\"p1380\",\"attributes\":{\"dimension\":1,\"axis\":{\"id\":\"p1376\"}}}],\"frame_width\":200,\"frame_height\":200}},3,0],[{\"type\":\"object\",\"name\":\"Figure\",\"id\":\"p1424\",\"attributes\":{\"x_range\":{\"id\":\"p1002\"},\"y_range\":{\"id\":\"p1003\"},\"x_scale\":{\"type\":\"object\",\"name\":\"LogScale\",\"id\":\"p1434\"},\"y_scale\":{\"type\":\"object\",\"name\":\"LinearScale\",\"id\":\"p1435\"},\"title\":{\"type\":\"object\",\"name\":\"Title\",\"id\":\"p1427\",\"attributes\":{\"text\":\"1a53, HEPC74rua\"}},\"renderers\":[{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p1462\",\"attributes\":{\"data_source\":{\"type\":\"object\",\"name\":\"ColumnDataSource\",\"id\":\"p1453\",\"attributes\":{\"selected\":{\"type\":\"object\",\"name\":\"Selection\",\"id\":\"p1454\",\"attributes\":{\"indices\":[],\"line_indices\":[]}},\"selection_policy\":{\"type\":\"object\",\"name\":\"UnionRenderers\",\"id\":\"p1455\"},\"data\":{\"type\":\"map\",\"entries\":[[\"index\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"AgAAAAMAAAAKAAAACwAAABIAAAATAAAAGgAAABsAAAAiAAAAIwAAACoAAAArAAAAMgAAADMAAAA6AAAAOwAAAEIAAABDAAAASgAAAEsAAABSAAAAUwAAAFoAAABbAAAA\"},\"shape\":[24],\"dtype\":\"int32\",\"order\":\"little\"}],[\"Antibody\",{\"type\":\"ndarray\",\"array\":[\"HEPC74rua\",\"HEPC74rua\",\"HEPC74rua\",\"HEPC74rua\",\"HEPC74rua\",\"HEPC74rua\",\"HEPC74rua\",\"HEPC74rua\",\"HEPC74rua\",\"HEPC74rua\",\"HEPC74rua\",\"HEPC74rua\",\"HEPC74rua\",\"HEPC74rua\",\"HEPC74rua\",\"HEPC74rua\",\"HEPC74rua\",\"HEPC74rua\",\"HEPC74rua\",\"HEPC74rua\",\"HEPC74rua\",\"HEPC74rua\",\"HEPC74rua\",\"HEPC74rua\"],\"shape\":[24],\"dtype\":\"object\",\"order\":\"little\"}],[\"Ab_Conc_ng_mL\",{\"type\":\"ndarray\",\"array\":[10000.0,10000.0,3333.3333333333335,3333.3333333333335,1111.111111111111,1111.111111111111,370.3703703703704,370.3703703703704,123.45679012345678,123.45679012345678,41.1522633744856,41.1522633744856,13.717421124828531,13.717421124828531,4.572473708276178,4.572473708276178,1.5241579027587258,1.5241579027587258,0.5080526342529086,0.5080526342529086,0.16935087808430288,0.16935087808430288,0.056450292694767625,0.056450292694767625],\"shape\":[24],\"dtype\":\"object\",\"order\":\"little\"}],[\"OD450\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"9P3UeOkmB0CYbhKDwMoFQH0/NV66SQZAy6FFtvP9BUAEVg4tsp0FQGiR7Xw/NQZAJzEIrBxaBEDD9Shcj8IEQGq8dJMYBAJA001iEFg5AUAfhetRuB75P57vp8ZLN/k/2c73U+Ol6z9aZDvfT43rP1YOLbKd79c/qvHSTWIQ2D8fhetRuB7FP8dLN4lBYMU/sp3vp8ZLtz+6SQwCK4e2P1TjpZvEILA/VOOlm8QgsD/ZzvdT46WrP4lBYOXQIqs/\"},\"shape\":[24],\"dtype\":\"float64\",\"order\":\"little\"}],[\"Strain\",{\"type\":\"ndarray\",\"array\":[\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\"],\"shape\":[24],\"dtype\":\"object\",\"order\":\"little\"}],[\"Variant\",{\"type\":\"ndarray\",\"array\":[\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\",\"Q412R\"],\"shape\":[24],\"dtype\":\"object\",\"order\":\"little\"}]]}}},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p1463\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p1464\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"Circle\",\"id\":\"p1459\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"Ab_Conc_ng_mL\"},\"y\":{\"type\":\"field\",\"field\":\"OD450\"},\"line_color\":{\"type\":\"value\",\"value\":\"#1f77b4\"},\"fill_color\":{\"type\":\"value\",\"value\":\"#1f77b4\"},\"hatch_color\":{\"type\":\"value\",\"value\":\"#1f77b4\"}}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"Circle\",\"id\":\"p1460\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"Ab_Conc_ng_mL\"},\"y\":{\"type\":\"field\",\"field\":\"OD450\"},\"line_color\":{\"type\":\"value\",\"value\":\"#1f77b4\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.1},\"fill_color\":{\"type\":\"value\",\"value\":\"#1f77b4\"},\"fill_alpha\":{\"type\":\"value\",\"value\":0.1},\"hatch_color\":{\"type\":\"value\",\"value\":\"#1f77b4\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.1}}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"Circle\",\"id\":\"p1461\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"Ab_Conc_ng_mL\"},\"y\":{\"type\":\"field\",\"field\":\"OD450\"},\"line_color\":{\"type\":\"value\",\"value\":\"#1f77b4\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.2},\"fill_color\":{\"type\":\"value\",\"value\":\"#1f77b4\"},\"fill_alpha\":{\"type\":\"value\",\"value\":0.2},\"hatch_color\":{\"type\":\"value\",\"value\":\"#1f77b4\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.2}}}}},{\"type\":\"object\",\"name\":\"GlyphRenderer\",\"id\":\"p1474\",\"attributes\":{\"data_source\":{\"type\":\"object\",\"name\":\"ColumnDataSource\",\"id\":\"p1465\",\"attributes\":{\"selected\":{\"type\":\"object\",\"name\":\"Selection\",\"id\":\"p1466\",\"attributes\":{\"indices\":[],\"line_indices\":[]}},\"selection_policy\":{\"type\":\"object\",\"name\":\"UnionRenderers\",\"id\":\"p1467\"},\"data\":{\"type\":\"map\",\"entries\":[[\"index\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"AgAAAAMAAAAKAAAACwAAABIAAAATAAAAGgAAABsAAAAiAAAAIwAAACoAAAArAAAAMgAAADMAAAA6AAAAOwAAAEIAAABDAAAASgAAAEsAAABSAAAAUwAAAFoAAABbAAAA\"},\"shape\":[24],\"dtype\":\"int32\",\"order\":\"little\"}],[\"Antibody\",{\"type\":\"ndarray\",\"array\":[\"HEPC74rua\",\"HEPC74rua\",\"HEPC74rua\",\"HEPC74rua\",\"HEPC74rua\",\"HEPC74rua\",\"HEPC74rua\",\"HEPC74rua\",\"HEPC74rua\",\"HEPC74rua\",\"HEPC74rua\",\"HEPC74rua\",\"HEPC74rua\",\"HEPC74rua\",\"HEPC74rua\",\"HEPC74rua\",\"HEPC74rua\",\"HEPC74rua\",\"HEPC74rua\",\"HEPC74rua\",\"HEPC74rua\",\"HEPC74rua\",\"HEPC74rua\",\"HEPC74rua\"],\"shape\":[24],\"dtype\":\"object\",\"order\":\"little\"}],[\"Ab_Conc_ng_mL\",{\"type\":\"ndarray\",\"array\":[10000.0,10000.0,3333.3333333333335,3333.3333333333335,1111.111111111111,1111.111111111111,370.3703703703704,370.3703703703704,123.45679012345678,123.45679012345678,41.1522633744856,41.1522633744856,13.717421124828531,13.717421124828531,4.572473708276178,4.572473708276178,1.5241579027587258,1.5241579027587258,0.5080526342529086,0.5080526342529086,0.16935087808430288,0.16935087808430288,0.056450292694767625,0.056450292694767625],\"shape\":[24],\"dtype\":\"object\",\"order\":\"little\"}],[\"OD450\",{\"type\":\"ndarray\",\"array\":{\"type\":\"bytes\",\"data\":\"RIts5/upB0BOYhBYObQEQDMzMzMzMwdAEoPAyqFFBUBcj8L1KFwHQM/3U+OlmwZAhxbZzvdTBkDfT42XbhIGQGiR7Xw/NQNAFK5H4XoUAkAK16NwPQr7P1K4HoXrUfg/Gy/dJAaB7T+F61G4HoXrP5HtfD81Xto/ppvEILBy2D8Sg8DKoUXGP8P1KFyPwsU/qvHSTWIQuD9qvHSTGAS2P2iR7Xw/Na4/aJHtfD81rj/pJjEIrByqP5qZmZmZmak/\"},\"shape\":[24],\"dtype\":\"float64\",\"order\":\"little\"}],[\"Strain\",{\"type\":\"ndarray\",\"array\":[\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\",\"1a53\"],\"shape\":[24],\"dtype\":\"object\",\"order\":\"little\"}],[\"Variant\",{\"type\":\"ndarray\",\"array\":[\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\",\"WT\"],\"shape\":[24],\"dtype\":\"object\",\"order\":\"little\"}]]}}},\"view\":{\"type\":\"object\",\"name\":\"CDSView\",\"id\":\"p1475\",\"attributes\":{\"filter\":{\"type\":\"object\",\"name\":\"AllIndices\",\"id\":\"p1476\"}}},\"glyph\":{\"type\":\"object\",\"name\":\"Circle\",\"id\":\"p1471\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"Ab_Conc_ng_mL\"},\"y\":{\"type\":\"field\",\"field\":\"OD450\"},\"line_color\":{\"type\":\"value\",\"value\":\"#ff7f0e\"},\"fill_color\":{\"type\":\"value\",\"value\":\"#ff7f0e\"},\"hatch_color\":{\"type\":\"value\",\"value\":\"#ff7f0e\"}}},\"nonselection_glyph\":{\"type\":\"object\",\"name\":\"Circle\",\"id\":\"p1472\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"Ab_Conc_ng_mL\"},\"y\":{\"type\":\"field\",\"field\":\"OD450\"},\"line_color\":{\"type\":\"value\",\"value\":\"#ff7f0e\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.1},\"fill_color\":{\"type\":\"value\",\"value\":\"#ff7f0e\"},\"fill_alpha\":{\"type\":\"value\",\"value\":0.1},\"hatch_color\":{\"type\":\"value\",\"value\":\"#ff7f0e\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.1}}},\"muted_glyph\":{\"type\":\"object\",\"name\":\"Circle\",\"id\":\"p1473\",\"attributes\":{\"x\":{\"type\":\"field\",\"field\":\"Ab_Conc_ng_mL\"},\"y\":{\"type\":\"field\",\"field\":\"OD450\"},\"line_color\":{\"type\":\"value\",\"value\":\"#ff7f0e\"},\"line_alpha\":{\"type\":\"value\",\"value\":0.2},\"fill_color\":{\"type\":\"value\",\"value\":\"#ff7f0e\"},\"fill_alpha\":{\"type\":\"value\",\"value\":0.2},\"hatch_color\":{\"type\":\"value\",\"value\":\"#ff7f0e\"},\"hatch_alpha\":{\"type\":\"value\",\"value\":0.2}}}}}],\"toolbar\":{\"type\":\"object\",\"name\":\"Toolbar\",\"id\":\"p1433\",\"attributes\":{\"tools\":[{\"id\":\"p1446\"},{\"id\":\"p1447\"},{\"id\":\"p1448\"},{\"type\":\"object\",\"name\":\"SaveTool\",\"id\":\"p1450\"},{\"id\":\"p1451\"},{\"id\":\"p1452\"}]}},\"toolbar_location\":null,\"left\":[{\"type\":\"object\",\"name\":\"LinearAxis\",\"id\":\"p1441\",\"attributes\":{\"ticker\":{\"type\":\"object\",\"name\":\"BasicTicker\",\"id\":\"p1442\",\"attributes\":{\"mantissas\":[1,2,5]}},\"formatter\":{\"type\":\"object\",\"name\":\"BasicTickFormatter\",\"id\":\"p1443\"},\"major_label_policy\":{\"type\":\"object\",\"name\":\"AllLabels\",\"id\":\"p1444\"}}}],\"below\":[{\"type\":\"object\",\"name\":\"LogAxis\",\"id\":\"p1436\",\"attributes\":{\"ticker\":{\"type\":\"object\",\"name\":\"LogTicker\",\"id\":\"p1437\",\"attributes\":{\"num_minor_ticks\":10,\"mantissas\":[1,5]}},\"formatter\":{\"type\":\"object\",\"name\":\"LogTickFormatter\",\"id\":\"p1438\"},\"axis_label\":\"antibody concentration (ng/mL)\",\"major_label_policy\":{\"type\":\"object\",\"name\":\"AllLabels\",\"id\":\"p1439\"}}}],\"center\":[{\"type\":\"object\",\"name\":\"Grid\",\"id\":\"p1440\",\"attributes\":{\"axis\":{\"id\":\"p1436\"}}},{\"type\":\"object\",\"name\":\"Grid\",\"id\":\"p1445\",\"attributes\":{\"dimension\":1,\"axis\":{\"id\":\"p1441\"}}}],\"frame_width\":200,\"frame_height\":200}},3,1]]}}]}};\n", " const render_items = [{\"docid\":\"abb9b319-6c6b-434f-a036-8ea34848bd24\",\"roots\":{\"p1484\":\"f909f002-c6fb-4091-a3d6-b7f6965f970b\"},\"root_ids\":[\"p1484\"]}];\n", " root.Bokeh.embed.embed_items_notebook(docs_json, render_items);\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": "p1484" } }, "output_type": "display_data" } ], "source": [ "plots = []\n", "for i, ((antibody, strain), g) in enumerate(df.groupby([\"Antibody\", \"Strain\"])):\n", " # Kwargs for setting up figure\n", " fig_kwargs = dict(\n", " frame_width=200,\n", " frame_height=200,\n", " x_axis_type=\"log\",\n", " title=f\"{strain}, {antibody}\",\n", " )\n", "\n", " # Only label axes needed for clarity\n", " if i > 5:\n", " fig_kwargs[\"x_axis_label\"] = \"antibody concentration (ng/mL)\"\n", " if i % 2 == 0:\n", " fig_kwargs[\"y_axis_label\"] = \"OD450\"\n", "\n", " p = bokeh.plotting.figure(**fig_kwargs)\n", "\n", " # Populate glyphs, adding legend to first plot only\n", " for color, (variant, sub_g) in zip(\n", " bokeh.palettes.Category10_3, g.groupby(\"Variant\")\n", " ):\n", " kwargs = dict(source=sub_g, x=\"Ab_Conc_ng_mL\", y=\"OD450\", color=color)\n", " if i == 0:\n", " kwargs[\"legend_label\"] = variant\n", "\n", " p.circle(**kwargs)\n", "\n", " # Connect the axes\n", " if i == 0:\n", " p.legend.location = \"top_left\"\n", " else:\n", " p.x_range = plots[0].x_range\n", " p.y_range = plots[0].y_range\n", "\n", " plots.append(p)\n", " \n", "bokeh.io.show(bokeh.layouts.gridplot(plots, ncols=2))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Estimation of the EC50\n", "\n", "From ELISA data, we also typically want the half maximal effective concentration, or **EC50**. It tells you how much antibody concentration you need to reach half of the maximum OD450. This is typically accomplished by obtaining a maximum likelihood estimate (MLE) of parameters of a Hill function,\n", "\n", "\\begin{align}\n", "y = d + \\frac{a-d}{1 + \\left(\\frac{x}{c} \\right)^b}.\n", "\\end{align}\n", "\n", "The function has an inverse that can be used to compute the EC50 from the MLE parameters.\n", "\n", "\\begin{align}\n", "x = c \\left(\\frac{y - a}{d - y}\\right)^{1/b}\n", "\\end{align}\n", "\n", "This is a phenomenological approach widely used in the field (but not something Justin recommends). In the functions below, we compute the MLE. We will visit MLE in depth later in the term; for now, take this calculation as a given and as a way to demonstrate application groupby operations.\n", "\n", "Importantly, the function `compute_ec50()` takes as arguments x-values and y-values, performs a MLE, and then returns the resulting EC50." ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [], "source": [ "def four_param_hill(x, a, b, c, d):\n", " \"\"\"Code up the above 4-parameter Hill function\"\"\"\n", " return d + (a - d) / (1 + (x / c) ** b)\n", "\n", "\n", "def inverse_four_param_hill(y, a, b, c, d):\n", " \"\"\"Inverse of the four parameter fit in order to compute concentration from absorbance\"\"\"\n", " return c * ((y - a) / (d - y)) ** (1 / b)\n", "\n", "\n", "def compute_ec50(x, y):\n", " # Perform the fit using scipy and save the optimal parameters (popt)\n", " popt, _ = scipy.optimize.curve_fit(four_param_hill, x, y)\n", "\n", " # Compute the expected values from the logistic regression\n", " fit = np.array(four_param_hill(x, *popt))\n", "\n", " # Compute the half maximal value in order to find the EC50\n", " halfway = (np.min(fit) + np.max(fit)) / 2\n", " ec50 = inverse_four_param_hill(halfway, *popt)\n", "\n", " return ec50" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We wish to compute the EC50 for each strain/variant/antibody combination. To do so, we group by through three variables and apply the `compute_ec50()` function. Any function we wish to apply needs to take a group (a sub-data frame) as an argument. So, we can write a lambda function to call `compute_ec50()`. " ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Strain Variant Antibody \n", "1a157 Q412R HEPC153 80.001006\n", " HEPC153rua 1191.675372\n", " HEPC74 37.760899\n", " HEPC74rua 63.641514\n", " WT HEPC153 40.358598\n", " HEPC153rua 3353.090439\n", " HEPC74 26.682280\n", " HEPC74rua 33.763760\n", " Y527H HEPC153 34.673164\n", " HEPC153rua 391.143463\n", " HEPC74 24.829800\n", " HEPC74rua 27.293204\n", "1a53 Q412R HEPC153 36.874215\n", " HEPC153rua 509.791763\n", " HEPC74 30.436994\n", " HEPC74rua 33.391581\n", " WT HEPC153 36.111559\n", " HEPC153rua 599.556263\n", " HEPC74 27.502282\n", " HEPC74rua 31.517034\n", "dtype: float64" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ec50_results = df.groupby([\"Strain\", \"Variant\", \"Antibody\"]).apply(\n", " lambda group: compute_ec50(group[\"Ab_Conc_ng_mL\"].values, group[\"OD450\"].values)\n", ")\n", "\n", "# Take a look\n", "ec50_results" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The result is a Pandas series with a multiindex. We can convert this to a data frame by resetting the index, and then sort by strain and antibody for convenience." ] }, { "cell_type": "code", "execution_count": 16, "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", " \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", " \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", " \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", "
StrainVariantAntibodyEC50
01a157Q412RHEPC15380.001006
41a157WTHEPC15340.358598
81a157Y527HHEPC15334.673164
11a157Q412RHEPC153rua1191.675372
51a157WTHEPC153rua3353.090439
91a157Y527HHEPC153rua391.143463
21a157Q412RHEPC7437.760899
61a157WTHEPC7426.682280
101a157Y527HHEPC7424.829800
31a157Q412RHEPC74rua63.641514
71a157WTHEPC74rua33.763760
111a157Y527HHEPC74rua27.293204
121a53Q412RHEPC15336.874215
161a53WTHEPC15336.111559
131a53Q412RHEPC153rua509.791763
171a53WTHEPC153rua599.556263
141a53Q412RHEPC7430.436994
181a53WTHEPC7427.502282
151a53Q412RHEPC74rua33.391581
191a53WTHEPC74rua31.517034
\n", "
" ], "text/plain": [ " Strain Variant Antibody EC50\n", "0 1a157 Q412R HEPC153 80.001006\n", "4 1a157 WT HEPC153 40.358598\n", "8 1a157 Y527H HEPC153 34.673164\n", "1 1a157 Q412R HEPC153rua 1191.675372\n", "5 1a157 WT HEPC153rua 3353.090439\n", "9 1a157 Y527H HEPC153rua 391.143463\n", "2 1a157 Q412R HEPC74 37.760899\n", "6 1a157 WT HEPC74 26.682280\n", "10 1a157 Y527H HEPC74 24.829800\n", "3 1a157 Q412R HEPC74rua 63.641514\n", "7 1a157 WT HEPC74rua 33.763760\n", "11 1a157 Y527H HEPC74rua 27.293204\n", "12 1a53 Q412R HEPC153 36.874215\n", "16 1a53 WT HEPC153 36.111559\n", "13 1a53 Q412R HEPC153rua 509.791763\n", "17 1a53 WT HEPC153rua 599.556263\n", "14 1a53 Q412R HEPC74 30.436994\n", "18 1a53 WT HEPC74 27.502282\n", "15 1a53 Q412R HEPC74rua 33.391581\n", "19 1a53 WT HEPC74rua 31.517034" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Set the name of the series\n", "ec50_results.name = \"EC50\"\n", "\n", "# Convert to data frame and sort\n", "ec50_results.reset_index().sort_values(by=[\"Strain\", \"Antibody\"])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We've almost completely recreated the ELISA plotting in Prism, a common subscription software used by biologists to plot all sorts of data. We also didn't have to copy and paste columns and rows from Excel over and over again.\n", "\n", "In EC50 values, we are interested in the smaller numbers because they indicate that LESS antibody was required to achieve the same signal. It appears that our mutants have a mix of larger and smaller EC50 values relative to the wild-type strains. \n", "\n", "We could also plot the regression lines on the same plots with the points to do a visual test of the EC50 estimates. We do not do this here, opting instead to wait for the discussion on MLE and visualization of the results later in the course." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Computing Environment" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Python implementation: CPython\n", "Python version : 3.11.5\n", "IPython version : 8.15.0\n", "\n", "numpy : 1.24.3\n", "scipy : 1.11.1\n", "pandas : 2.0.3\n", "bokeh : 3.2.1\n", "jupyterlab: 4.0.6\n", "\n" ] } ], "source": [ "%load_ext watermark\n", "%watermark -v -p numpy,scipy,pandas,bokeh,jupyterlab" ] } ], "metadata": { "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.11.5" } }, "nbformat": 4, "nbformat_minor": 4 }