{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Derivation of FRET and S correction formulas\n",
"\n",
"*Antonino Ingargiola* -- tritemio AT gmail.com
\n",
"**ORCID** [0000-0002-9348-1397](orcid.org/0000-0002-9348-1397)
\n",
"**twitter** [@tritemio_sc](https://twitter.com/tritemio_sc)
\n",
"\n",
"Last updated: Oct. 2016"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Abstract\n",
"\n",
"
\n", "In this notebook I derive correction formulas (and their inverse) for $E$ and $S$ in μs-ALEX measurements. I also define the A-direct excitation as a function of different \n", "observable, derive their expression as a function of physical parameters \n", "and discuss their interpretation.\n", "The expressions here derived (direct excitation, E correction formula) \n", "are valid for any smFRET measurements (freely diffusing or immobilized). The main reference is \n", "(Lee, BJ 2005,\n", "PDF,\n", "SI). \n", "Beyond what reported in \n", "(Lee, BJ 2005), \n", "here I derive a more complete set of expressions together \n", "with their physical interpretation that was incomplete in the original publication.\n", "The algebraic part is performed through \n", "Computer-assisted symbolic computation\n", "using \n", "Sympy\n", "for proof of correctness.\n", "
" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Revisions\n", "- Oct 19, 2016:\n", " - Simplify notation: remove subscript $dir$ from $d$ coefficients\n", " - Fix typo in $\\gamma$ definition\n", "- May 27, 2016: \n", " - Reword abstract and other paragraphs.\n", " - Fix typo in $d_{T}$ physical definition\n", "- May 16, 2016: \n", " - Use a notation more similar to ([Lee, BJ 2005](http://www.ncbi.nlm.nih.gov/pmc/articles/PMC1282518/))\n", " - Fix typo in $d_{A}$ definition (definition 5)\n", " - Derive formula for $S = f(E_R, S_R)$\n", "- Oct 09, 2014: Added expressions for $S$\n", "- Aug 05, 2014: public release" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 1. Definitions\n", "\n", "## Physical parameters\n", "\n", "We start defining the signal (e.g. the corrected counts in each channel):\n", "\n", "$$n_d = I_{D_{ex}} \\, \\sigma_{D_{ex}}^D \\,\n", "\\phi_D \\, \\eta_{D_{det}}^{D_{em}} \\, (1-E)$$\n", "\n", "$$n_a = I_{D_{ex}} \\, \\sigma_{D_{ex}}^D \\,\n", "\\phi_A \\, \\eta_{A_{det}}^{A_{em}} \\, E$$\n", "\n", "$$ n_{aa} = I_{A_{ex}} \\, \\sigma_{A_{ex}}^A \\,\n", "\\phi_A \\, \\eta_{A_{det}}^{A_{em}}$$\n", "\n", "$$n_a^* = n_a + Lk + Dir$$\n", "\n", "where\n", "\n", "$$Lk = I_{D_{ex}} \\, \\sigma_{D_{ex}}^D \\,\n", "\\phi_D \\, \\eta_{A_{det}}^{D_{em}} \\, (1-E)$$\n", "\n", "$$Dir = I_{D_{ex}} \\, \\sigma_{D_{ex}}^A \\,\n", "\\phi_A \\, \\eta_{A_{det}}^{A_{em}}$$\n", "\n", "$$\\gamma = \\frac{\\phi_A\\,\\eta_{A_{det}}^{A_{em}}}{\\phi_D\\,\\eta_{D_{det}}^{D_{em}}}$$\n", "\n", "$$ \\beta = \\frac{I_{A_{ex}}\\sigma_{A_{ex}}^A}{I_{D_{ex}}\\sigma_{D_{ex}}^D}$$\n", "\n", "The last quantity, $\\beta$, is obtained when fitting the gamma factor from the\n", "$S_R$ of a series of static samples ([Lee, BJ 2005](http://www.ncbi.nlm.nih.gov/pmc/articles/PMC1282518/))." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Ratiometric quantities\n", "\n", "Let define the FRET efficiency $E$ and the proximity ratios $E_{PR}$ and $E_R$:\n", "\n", "$$ E = \\frac{n_a}{n_a + \\gamma \\, n_d} \\qquad E_R = \\frac{n^*_a}{n^*_a + n_d}\n", "\\qquad E_{PR} = \\frac{n_a}{n_a + n_d}$$\n", "\n", "where $n_d$, $n_a$ are the donor and acceptor detected counts after all \n", "the corrections, while $n^*_a$ is the acceptor counts with only background \n", "correction (no leakage and direct excitation corrections).\n", "\n", "Similarly, the definitions of uncorrected stoichiometry ($S_R$ and $S_{PR}$)\n", "and corrected stoichiometry ($S$) are:\n", "\n", "$$ S_{R} = \\frac{n_d + n^*_a}{n_d + n^*_a + n_{aa}} \\qquad \n", "S_{PR} = \\frac{n_d + n_a}{n_d + n_a + n_{aa}} \\qquad \n", "S = \\frac{\\gamma n_d + n_a}{\\gamma n_d + n_a + n_{aa}}$$ \n", "\n", "The relation between $n_a$ and $n^*_a$ is:\n", "\n", "$$n^*_a = n_a + Lk + Dir$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Direct Acceptor Excitation\n", "\n", "The term $Dir$ can be equivalently expressed as:\n", "\n", "1) a function of $n_{aa}$:\n", "\n", " $$ Dir = d_{AA} \\cdot n_{aa}$$\n", "\n", "2) a function of the \"corrected total signal\" $(n_a + \\gamma\\,n_d)$:\n", "\n", " $$ Dir = d_{T} \\cdot (n_a + \\gamma\\,n_d) $$\n", " \n", "3) a function of the \"corrected total signal divided by $\\gamma$\" $(n_a/\\gamma + n_d)$:\n", "\n", " $$ Dir = d_{T'} \\cdot (n_a/\\gamma + n_d) $$\n", "\n", "4) a function of $n_d$:\n", "\n", " $$ Dir = d_{D} \\cdot n_d $$\n", "\n", "5) a function of $n_a$:\n", "\n", " $$ Dir = d_{A} \\cdot n_a $$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Def. 1\n", "The coefficient $d_{AA}$ can be computed from an acceptor-only population \n", "in ALEX measurement as:\n", "\n", "$$ d_{AA} = \\frac{Dir}{n_{aa}} $$\n", "\n", "$$Dir = I_{D_{ex}} \\, \\sigma_{D_{ex}}^A \\,\n", "\\phi_A \\, \\eta_{A_{det}}^{A_{em}}$$\n", "\n", "In terms of physical parameters it is:\n", "\n", "$$ d_{AA} = \\frac{I_{D_{ex}}}{I_{A_{ex}}} \\frac{\\sigma_{D_{ex}}^A}{\\sigma_{A_{ex}}^A} $$\n", "\n", "> **NOTE:** This coefficient is $d$ in [Lee, BJ 2005](http://www.ncbi.nlm.nih.gov/pmc/articles/PMC1282518/).\n", "\n", "### Def. 2\n", "\n", "From the definition, it follows that:\n", "\n", "$$ d_{T} = \\frac{Dir}{n_a + \\gamma\\, n_d} $$\n", "\n", "$$n_a = I_{D_{ex}} \\, \\sigma_{D_{ex}}^D \\,\n", "\\phi_A \\, \\eta_{A_{det}}^{A_{em}} \\, E$$\n", "\n", "To derive the expression of $d_{T}$ as a function of physical parameters,\n", "consider the case of 100% FRET molecule. In this case $n_d = 0$ and we obtain:\n", "\n", "$$ d_{T} = \\frac{\\sigma_{D_{ex}}^A}{\\sigma_{D_{ex}}^D} $$\n", "\n", "Now note that for $E < 1$, if $\\gamma$ is fixed, the \"corrected total signal\"\n", "(i.e. the corrected burst size in freely-diffusing measurements)\n", "$n_a + \\gamma\\, n_d$ will not change for any $E < 1$. Therefore the \n", "previous expression is valid for any $E$.\n", "\n", "Note that we can express $d_{T}$ as the product of $\\beta$ and $d_{AA}$ (def. 1):\n", "\n", "$$ d_{T} = \\beta \\, d_{AA}$$\n", "\n", "This relation follows from the definition of $\\beta$ reported in the previous section \n", "and originally defined in ([Lee, BJ 2005](http://www.ncbi.nlm.nih.gov/pmc/articles/PMC1282518/)).\n", "\n", "### Def. 3\n", "The coefficient $d_{T'}$ can be obtained from the $d_{T}$ expression\n", "noting that we simply divide the \"corrected total signal\" by $\\gamma$:\n", "\n", "$$ d_{T'} = \\frac{\\sigma_{D_{ex}}^A}{\\sigma_{D_{ex}}^A} \\gamma$$\n", "\n", "> **NOTE:** The coefficient $d_{T'}$ is $d'$ in [Lee, BJ 2005](http://www.ncbi.nlm.nih.gov/pmc/articles/PMC1282518/) paper ([p. 2943](http://www.chem.ucla.edu/~michalet/papers/BJ2005.pdf)) and [SI](http://www.chem.ucla.edu/~michalet/papers/BJ2005SI.pdf). \n", "In fact, the definition of $d'$ given in eq. (27) of\n", "[Lee, BJ 2005](http://www.ncbi.nlm.nih.gov/pmc/articles/PMC1282518/)\n", "involves a $E=0$ population, for which $n_d + n_a/\\gamma = n_d$.\n", "\n", "\n", "\n", "### Def. 4\n", "The coefficient $d_{D}$ is a function of $E$ as well as the physical parameters.\n", "Taking the ratio of the physical definitions of $Dir$ and $n_d$ we obtain:\n", "\n", "$$ d_{D} = \\frac{\\sigma_{D_{ex}}^A}{\\sigma_{D_{ex}}^A} \\frac{\\gamma}{1 - E} = d_{T} \\frac{\\gamma}{1 - E} $$\n", "\n", "### Def. 5\n", "The coefficient $d_{A}$ is a function of $E$ as well as the physical parameters.\n", "Taking the ratio of the physical definitions of $Dir$ and $n_a$ we obtain:\n", "\n", "$$ d_{A} = \\frac{\\sigma_{D_{ex}}^A}{\\sigma_{D_{ex}}^D} \\frac{1}{E} $$\n", "\n", "### Discussion of \"Def. 1-5\"\n", "\n", "Definitions 4 and 5 are inconvenient because the coefficient depends on $E$. \"Def. 3\" does not depend on $E$ but depends on $\\gamma$, while \"Def. 2\" depends only on the ratio of two absorption cross sections and is therefore the most general form. \"Def. 1\" can only be used in an ALEX measurement but it is easy to fit from the $S$ value of the A-only population.\n", "\n", "So, for non-ALEX measurement, \"Def. 2\" ($d_{T}$) gives the simplest and most general coefficient. It can be computed from datasheet values or from $d_{AA}$ estimated \n", "from an ALEX measurement using the same dyes pair and D-excitation wavelength \n", "($d_{T} = \\beta\\, d_{AA}$).\n", "\n", "As physical interpretation, definitions 2 and 3 are similar. In \"Def. 2\", when $E=1$, the \"corrected total signal\" is $n_a$. When $E < 1$, the \"corrected total signal\" do not change (at the same excitation intensity, and fixed $\\gamma$): they are the sum of acceptor and $\\gamma$-corrected donor counts. Similar considerations hold for \"Def. 3\" (starting from $E=0$)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Correcting E" ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [], "source": [ "import sympy\n", "from sympy import init_printing, symbols, solve, Eq\n", "init_printing() # beautiful maths" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Define the symbols" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [], "source": [ "E, Er, Epr = symbols('E, E_R, E_PR')\n", "S, Sr, Spr = symbols('S, S_R, S_PR')\n", "nd, na, ns_a, n_dir, naa, nt = symbols('n_d n_a n^*_a n_dir n_aa n_t')\n", "gamma, Lk = symbols('gamma L_k')\n", "d_exAA, d_exT, d_exD = symbols(\"d_dirAA d_dirT, d_dirD\")" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAEcAAAAoBAMAAABePPqjAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMARImrInaZuxAyVN3N\nZu80gH0WAAAACXBIWXMAAA7EAAAOxAGVKw4bAAABUElEQVQ4EWNgQAJCJq7BAUh8rMyE8gCOL1hl\nEIKcC/YwsPxE8LGyODg+MvB+wCqFJMj1gYH5ABIfK5PtAAP/hQaOVJsJWKUhgnwKDOsbFLonzG/A\no8hfgEGHd0Iaw2w8ahikGRicbzG8YgjGpwgsBwyp2g6Cql5yfrxAUJFwVBhhRQRNGRwK/hMGBBPG\n4PAJnV2xlBj7yFbEqOwSaopsA9QkFHE29lKGfgckVVBFcPF8YCacxX2AwR9IwwFUEVy8HyjT0C/A\ncB+uQufMmX1nzhxGFl8DklzPwGADVwRkwHwHE1cDSeYwMPzlYGgLPglVCVMEFQ89BRJ/xMD1g4lj\nJ+cPNEXI4iwfGZgO3GRL4NyAqggu/gAozriBgcV2Ad8CVgNURRjiDMCQYr/RAFEFcxOYhyTOwMA3\nYb4s1KQWKA2mgOJz4XxG06W5cA4SAyIOAAFvgaQsyYAaAAAAAElFTkSuQmCC\n", "text/latex": [ "$$\\frac{n_{a}}{n_{a} + n_{d}}$$" ], "text/plain": [ " nₐ \n", "────────\n", "nₐ + n_d" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "def PR(nd, na):\n", " return na/(na + nd)\n", "\n", "PR(nd, na)" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAFIAAAApBAMAAABU52OqAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMARImrInaZuxAyVN3N\nZu80gH0WAAAACXBIWXMAAA7EAAAOxAGVKw4bAAABkElEQVQ4EWNgQAVCJq7BAahCOHgJ5QEcX3DI\noQhzLtjDwPITRQgHh4PjIwPvBxySqMJcHxiYD6AK4eCxHWDgv9DAkWozAYcCuDCfAsP6BoXuCfMb\n4EI4GP4CDDq8E9IYZuOQRwhLMzA432J4xRCMEMLHAoZobQc+BQi5l5wfLyB4+FjCUWFEqsRnyqCX\n+08sGPQ+GcwO5Aog1nUUqlz9vYFhBaOyS6gpkoUwM5GLKd7H2gUMAWzspQz9DkCl+ZB8DlOJXEw5\nMzAUcjnM4j7A4A9S1A8xGKoSpZi6wcDQxMTQ0C/AcB+kaA0QM505c/rNmTMGDAzoxRSTJAPDegYG\nG5BKNRDBwACzHa2YYlJgYMhhYPjLwdAWegqsEK6SDbWYYgIG8yMGrh9MHDs5f6CqRCummBsYWD4y\nMB24yZbA+QBVJVoxxcbAwLiBgcV2Ad8CVqA3QADmTrRiCqgSAvod2G80gJkwlWAOopiShahjYOCb\nMH8uhM3hABMD0fBiSgUmymi6NBfGRqbhxZQCsihONgCZQo3xOacjrgAAAABJRU5ErkJggg==\n", "text/latex": [ "$$\\frac{n_{a}}{\\gamma n_{d} + n_{a}}$$" ], "text/plain": [ " nₐ \n", "──────────\n", "γ⋅n_d + nₐ" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "def FRET(nd, na, gamma):\n", " return na / (na + gamma*nd)\n", "\n", "FRET(nd, na, gamma)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Computing E from RAW values" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As a first step we write $n^*_a$ as a function of $n_a$ and save the symbolic expression:" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAJoAAAARBAMAAADXpqg/AAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAZqvNVN1EiRC7InaZ\nMu8Jbb2KAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAB9UlEQVQ4Ea2TP0gbURzHv4nx7uXPxSAOpVKq\n7VAwy2m6Sg6kLg4JCG6WVJBuTair4FEQRIRT6FJcjk6igyG6iFpOHBW8gl1rh0IHEWLANG0J9veS\nd6cHvi2/4ffn83u/L+/9uAPQeztioHN20zkpQPktVZuQdGScjqt1yQwgm5JxEuqqdlKtR/fUlPeb\n+2mv4FHcQcbfDm1VyvfPU14scfCFfCK6Dsum4szlyFfzeZv63PlUZn+JJZqIO6K3UOBJN/nzbh3b\nXMjihEzczedt6nHNmESsSYxVodmil+U1LBMwrQKecjrG3Vwm8zqTGaHM5xzfccbqCFWJRPRWo+X+\nkH+MWZ7ngOc8znNHJu7m8zb1eaSKMBdSHa8B5R+lDua1CnAMXDOs7L8UXU9N8MpokCd09KRMdrJj\nKBWEBvuHSJheHk9heJze+guRhsqmtUZwSsaTJeTM0qJ7YaqWGSoWpmj99PIFEzUXiNWh6k8SjvYj\nqObzfJBvFzAXck/xHRuvsLFHzQ/Z2rNsDdrlR/rH8ogNGkkjPhCcknHa9ec+/ATtaB1IiyEK8dV3\nmqgsO/rIbOfe3lqVhNMXt7bEGi6uxDyFaPmbKqqke/FVpMt3BwDibx7iV1ozFdFLMdqYZ112+FDk\nSnriyMP3o4zP7B6k2AtbWQX+A5dpi+1kxN2UAAAAAElFTkSuQmCC\n", "text/latex": [ "$$L_{k} n_{d} + n_{a} + n_{dir}$$" ], "text/plain": [ "Lₖ⋅n_d + nₐ + n_dir" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ns_a_as_func_na = na + Lk*nd + n_dir\n", "ns_a_as_func_na" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here we write the PR substituting $n^*_a$ with $n_a + L_k\\, n_d + Dir$ and $Dir$ with the \"Def. 2\" expression:" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAVcAAAAvBAMAAAClGZQzAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAZqvNVN1EiRC7InaZ\nMu8Jbb2KAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAEs0lEQVRYCe1YTWhUVxQ+yUzee5NkMlFUpNA6\nmoKFKEbHbiySgWApunBWuqpOC4VKaR0UQVTIIwiFVjtZFDcuHFxKwTGbIlZJ6cpVRmgXtWCCLqTa\nhY02RkpJz/057933N/fdEZTSuZB37/3O+c755r6XvMwHoI6ebU/fVvfx61//iMfboh2R2laEQqV9\nXESfpUkK53REChcJ7I/WAltlk216G2vZW2oWpqR9mnrB8GQ1uPd3Sl871fEzqinJTOy4ry60Uvpm\nZkOxxK0pyUzsU6+vdezKjVFvpxzSd6fnywpOyz0vXPjAkBROByk2glOTwGw9Z9uBh3gZzF2EegMX\ncy28+GKtR3DJxT3CPzAc3tpyacu24Z77J6ahaUjy0nkhvEixEZzigdle4tsDeP25bwyuMp11kUF3\n9Jth+IkhCN/lkXdgA/RULwNcyDYMSV66aOGJjeAUD8yZJ7h1Hfbb7tarqALHBP7YpdK7D0qlIi7n\nXDiIE4fZ7DThNmQb6wG+tE1JXg9WCI6XSodKpR24CuI8GHMpTAP0NKwKC+0HGGHzGXbxH4PfweHH\nL2HIM/EWy7A/NyZRD0ZnQz4GXm+BJlyPNvFhBXv2tyKwm/2nA+du7BS58jFwnkMWj5/BnxVh9aqZ\nhhSPYmvGJNljZrfUQ2LDeKzcyRbANcis+RQfhIeQXbadD/PyDUBin0FubC+HTy7DuqW+KtA7wsZP\nakgKpXsnG8ZjxR7G81mGwlYM9i+BPfbm4Gx+QWTSL9h7sLZYY3D/2Ur/19MYpHdEr2tK8npURA8S\nG8FlWJ2ckZVNIytFuHe9DIAPbv/G8lB5oChSSOzU93dHqxzONaEXDxNyMmPQmBTuQWIjuJAQe71u\nLbRkoN7IrXf5msTyDYfr52GI5RWGOYYPuxwmJKT46SRW1FFwqhwzX8xXahIeas3fEUunoWRyeMKG\nqwybl5/sI0owISEH04n6FZVgs4KrcGi9C0Zlf7BG9/0YirIth6dOwRFcf3x4s8g4JSYZpY0/x5Iw\nnNAjEfcrvsSK7sZLlOhSuyfQPYHXeAIr/53x5DUeU7d19wT+FyewemVHWftBO/LVOiJppPylifNw\nR75aR6S2aoSzEZtCX+Dw/zj5VSw2LQgakvz0pDIqLp0NFaK1X4i+aFGkzWxI8tODNePxTPKbwSek\nN+OU7yapSH6PNGILY5QVMcSokIkZ54mNJyX1SIkLA/lWLWrGUV8jM05Diphu8kC0uDAIJ6vsZNGt\niJhx1NfIjNOQIqabFKvF0QnEwQxkB+quYohNMNw3yuZSm3F6UtB083toca4JXqCwN+ATpo+MMnLd\n5Kc2MuPoZJNI1IP1Y0P28HoLNIpzTdbfGJ6FM/mZiK8mC5mZcTpS2HQjsRpcGIT2P+h1D8P29+tu\n2FejvkZmnI4UNt1IbCq8D//MTrqw2IqacbIvGJlxGlLEdJNitfgCPgBT44ubxhch//hbfKeGzDjq\na2TGaUhJPVLjqHlg+os8TmwohhjdIg9OYcaRWL9WmJTcI6m3iiM71/zF5uW5ISbNOFCNsrRmnJ6E\nfRTTTe3RDidNyM40em9KsQlGWayv9qrMuARNUnHKCd/Rr3D8C8BTBjLIMwtjAAAAAElFTkSuQmCC\n", "text/latex": [ "$$\\frac{L_{k} n_{d} + d_{dirT} \\gamma n_{d} + d_{dirT} n_{a} + n_{a}}{L_{k} n_{d} + d_{dirT} \\gamma n_{d} + d_{dirT} n_{a} + n_{a} + n_{d}}$$" ], "text/plain": [ " Lₖ⋅n_d + d_dirT⋅γ⋅n_d + d_dirT⋅nₐ + nₐ \n", "────────────────────────────────────────────\n", "Lₖ⋅n_d + d_dirT⋅γ⋅n_d + d_dirT⋅nₐ + nₐ + n_d" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Er_sym = sympy.factor(PR(nd, ns_a).subs(ns_a, ns_a_as_func_na).subs(n_dir, d_exT*(nd*gamma + na)))\n", "Er_sym" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The previous expression is the proximity ratio $E_R$. We \"solve\" it to obtain $n_d$ as a function of $E_R$. Then we replace the obtained expression in the FRET formula:" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\n8k37AAAAAElFTkSuQmCC\n", "text/latex": [ "$$\\frac{E_{R} \\left(L_{k} + d_{dirT} \\gamma + 1\\right) - L_{k} - d_{dirT} \\gamma}{E_{R} \\left(L_{k} - \\gamma + 1\\right) - L_{k} + \\gamma}$$" ], "text/plain": [ "E_R⋅(Lₖ + d_dirT⋅γ + 1) - Lₖ - d_dirT⋅γ\n", "───────────────────────────────────────\n", " E_R⋅(Lₖ - γ + 1) - Lₖ + γ " ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "E_func_Er = sympy.factor(FRET(nd, na, gamma).subs(nd, solve(Er_sym - Er, nd)[0])).collect(Er)\n", "E_func_Er" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\\frac{E_{R} \\left(L_{k} + d_{dirT} \\gamma + 1\\right) - L_{k} - d_{dirT} \\gamma}{E_{R} \\left(L_{k} - \\gamma + 1\\right) - L_{k} + \\gamma}\n" ] } ], "source": [ "print(sympy.printing.latex(E_func_Er))" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAUYAAAAxBAMAAABUqR0OAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAdrur3c1mRBCZiTIi\n71SC2pmSAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAGiklEQVRYCe1ZbYhUVRh+d3Z35s6d2ZlxpcKk\nGokswnI3M9Qshz4QstqVdYpQcso+DLI2jQhC9ooJ2ddMSUFCeIWNsgSnD/ql7EUj7FdbUVFGjaDU\nD6XNTVxU3N73fNx7zzkzOzOrkD/2/DjnfZ/3Pc997znn3r3zLIDRkgUDmiQQ9SY50ZjWOX71vJtP\nBvB+NNeM91UCJGwlbiiF3YntxUa4NvFnvxjJIYDqezTwV5H5b+BrVrqiATXc4w7AFjNWm/icmewj\nsX/Q3Oq7UVqn2GnfZ8bhwB1wAruKJTKthUswz87oGTpxEI+NBbZh2WcQ2uTDbR6a9infZ0aoxkE1\nont+5lUOgDWsh3XiIG7nAtuw2kfAhqQPf0UWYkrzrwzwkBIwHD+TaoQH9bhOHMTbaf9qtXQWLg3F\nZpCd7g0haMorJ7fPrHZsjpxw4C8+Q2YCq3GXSmMSy/g3O4cq0g6Nknig77azIXg22QNuCEFTXnmj\nF6lybKI/DGYhw2fITF7j4yqNSSzisd9grqPnAvjEe8pAq7Z+dNssyrqfuj391F/hUk9NXNn6CeKU\nGz8DLSXC1y2cu3BJ4QDAtSmPfD8TeI1HOBj0OrGIvFGAd8jcUQa2jzrxaoASlCE6DG0upv1MuYiB\nBW2sUvggn78vn+9DKD7Gc6wRSHjowwJ4FqL9awFetckNMkWNQ4RuuYvaSjIVYmsF4XeXEd7hwD0U\nLgLspVEnPgHgWBlozUJrDqOsRsTgaSg6OLAm1rEjC0WqO9XLYZz2NrAVtF/iiFzxcI0iwgadWMS+\nB4u9SY4KXyNmr0fbgbYMdGQwhfaaYSV4Xszwd7Dowt+E2SUeSdDtxxjickSrMWDgYYOYw9ZpSI2Q\nKZ8xjZi9Hj/HZS5b2ymNnhnCWgqwKzGdEGxiHYsVuCblWW9dUolNh+gtjywWtx96W4tMsY76M2MQ\nc3rrHER6j8HWaQ/Dc12w5onpnkrchjcQO4RP3LT3PZpBt0LYHgce+FPutrhyeyZ6pw0vl4ccu+hE\nB/qXgvzr0OrQXGxqjeyueYD1BrGILYfHulxrWWIMPhqDJ0/hgxAm3rx6dN5NPb143iGeoxm4PYSt\nHgUYLQsKeWWr+5MDl8F7sA8OHoGDnRi1czwlrmXCtj/6CgArJcxHk1jEN1++t7s/XkoMJ9/MJTdl\nETWIKfN6iOLq4Rp61FNLfHcjN0KrQ8DvgEdgFkA32pEunmLUyOBkjke1PkQcjnRUWroggk9vBlGD\nmDLPQXyYxmiJemot2Y0JZgC8LkYarLMw+xVrrAx4QCBdIAjgBT6omVW+KVhaiFhOo7HoRdY6xdeg\no4yOQYwYHoXWHHs3zaF8apHMF+ytx72gP5Q4U0j1uskRhIaID9tuPmj9Fs0Xbg3ijvLQl3DUhm8p\nrRrx4KiXWJ6h6H7qqLV7rTO5pfYbrpxRsBZ5sSzAhp5FPOaqKcLzb1eN1iCOdR9+FzbvhvWYXYc4\nWVAZJ+9FvcnPnZo5tQIX6wqMX/ztYl26qbqmVqDOCnxdJ26Go56JXVBEl6qSWfwmWnLy9mYusthI\nrq1JGamNAJpU1e7hpHSukZks57jTpCbVMHOQqElV8BSFdG0gSJeW+K3QoCaVYl9acm7ToyZVwb3E\nwH/CT8Sl/J6pq0mdZ42oHoWlKv7ZT9rAxE2psa4mdZ41plWpimsndEarNCkdYUitcZeerIldssZU\nz3WQcvTkur6QqqQMFCngDK5wtvyqTfalI8TVGvXf1+JA+0KSrHHdojugRWNtwBVSlZSB2io4Ryic\nS7XpTWtSQkhCUYY/M0n8Pdh/TGNtwBVSlZSBOvpxDp5REoe4vBdISmub1aS4tGDn8yt+zOe78L3r\ngOW6DRSlpaB6RFKVlIFYjXhGIerFcloqus1pUr4MJPcaGT4sm6x1EClVSRmI7fVABvU9VKQ+xXtX\nm+0KXz2PfjEiKjQpX0gK1fixStiIJ6UqKQOxZwbPKOrS7c+8aIi5/n8Q1Br1Z0ZoUr6QFKpxZyNV\nqTmkHpFUJWUgu4TxHtzUMUjfqqaS15wm5QtJoRoXmKR1EF+qkjIQHkJr/vi8+eNdsK+zYsw29J6J\nNKlA7wnVSGswySZlIP63kJF0xoZxz9Vm1MjCNTSpQO+5IDUGMhD7pmBXnpXIuWqFTWpSgd5jeZIo\nVpBW02MgA0U8OXkVdBvr2JQmVU3vsX16eZlJjPSNW7u5VUNzqqJVwaoKXdXMicD/7bfCfzjdfND+\n8k37AAAAAElFTkSuQmCC\n", "text/latex": [ "$$\\frac{E_{R} \\left(L_{k} + d_{dirT} \\gamma + 1\\right) - L_{k} - d_{dirT} \\gamma}{E_{R} \\left(L_{k} - \\gamma + 1\\right) - L_{k} + \\gamma}$$" ], "text/plain": [ "E_R⋅(Lₖ + d_dirT⋅γ + 1) - Lₖ - d_dirT⋅γ\n", "───────────────────────────────────────\n", " E_R⋅(Lₖ - γ + 1) - Lₖ + γ " ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "E_func_Er" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The previous expression is $E$ as a function of $E_R$, including gamma, leakage and direct excitation coefficients. It is the same of [equation S9](http://www.chem.ucla.edu/~michalet/papers/BJ2005SI.pdf) when we replace $d_{exT}\\gamma$ with $d'$.\n", "\n", "From this symbolic expression we can define the python function:" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(E_R*(L_k + d_dirT*gamma + 1) - L_k - d_dirT*gamma)/(E_R*(L_k - gamma + 1) - L_k + gamma)\n" ] } ], "source": [ "print(E_func_Er)" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": false }, "outputs": [], "source": [ "def correct_E_gamma_leak_dir(E_R, gamma, L_k=0, d_dirT=0):\n", " E_R = np.asarray(E_R)\n", " return ((E_R*(L_k + d_dirT*gamma + 1) - L_k - d_dirT*gamma) / \n", " (E_R*(L_k - gamma + 1) - L_k + gamma))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In case we want to compute $E$ using the coefficient $d_{AA}$ \n", "for direct excitation (as obtained from ALEX measurements) we\n", "simply replace the relation:\n", "\n", "$$ d_{T} = \\beta\\, d_{AA}$$ \n", "\n", "in the previous expression." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we can derive the simpler expression in the case we want to correct only one parameter.\n", "\n", "For only gamma correction we obtain:" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAJYAAAAvBAMAAADz6i5sAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAdrur3c1mRBCZiTIi\n71SC2pmSAAAACXBIWXMAAA7EAAAOxAGVKw4bAAACY0lEQVRIDe2Wv2sUQRTHv3Dn5m5z6mkhWHki\nKIiVsRGUXKGlvzgPiwgJgmAtYmORFbFQBAPpAsIVSSEIHtgKLuofELCwsBAhhY2Q5BAEQ+Kb2Zk3\nP7LZWWRT6RS3M+993ndn5maHLxBoB7eOTZz5GYDKpoXOrbJwMTe2RvknxUzZbPybyIdl6WJuzypi\ntIqZstn9HRwqy4a42d75DWLujuaPhtBg/vUQVwmKllEfBOEAMA3MYYhaB7VuAA2m14Gk0Ua9jb3t\nIFwMyOMVJ3g+bCwUk+GsPF5vgNkDL9IwXUzUV4GxL8ASmt1iMph9ND2aOH2F/siTiEi1mraJ5nI1\nShj/RUfibTVii6N0/Fq7Gq3/KruxA1vVtd2Y3j+m2ZoJLThKdyJ8x/B+J9DEz5mu1/Mcw00v7Q1/\nJMBjL8ZDzzFEc5yxO9+yQePsZALE+spQUQY9x1BPOWN3uOpIAjT0vchRhXqO4aOtYPpcJbRwQyU4\nqsaeYziswuKxsp7gezbmKqn1UkE6qkHPMRxXGD2iT4sdqK3RVZBat10tBj3HcNlofQBO7Euzsau1\n4mox6DmGz7S11y9Quzi8AzyNRdVSv3+p3+9JATmvd26UQc8xkJbV4gdq4M5LalGGo5Cg7xisNRIc\nD3K17vnRDPQdg7X3Qmvbqczbew36jkH/3dmba0n2NKuRWtrzmDUKcJtj0NPPNJpKirXmv/ZmgCkV\nNloMiox2DO43xIipIrbVFRXUTJRBirJjcL/t+7KEfp7pjnjyLpoog5Q2juGUXfXKHnA/587JB527\ncMD1dsd5XZbIB//6jv4DfDftKvEUkqoAAAAASUVORK5CYII=\n", "text/latex": [ "$$\\frac{E_{R}}{E_{R} \\left(- \\gamma + 1\\right) + \\gamma}$$" ], "text/plain": [ " E_R \n", "────────────────\n", "E_R⋅(-γ + 1) + γ" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "E_func_Er.subs(Lk, 0).subs(d_exT, 0)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For the only leakage correction we obtain:" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAJ8AAAAvBAMAAAAP/wWmAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAdrur3c1mRBCZiTIi\n71SC2pmSAAAACXBIWXMAAA7EAAAOxAGVKw4bAAADgElEQVRIDe1XwUsUURj/qes67hquBYFEuFF0\niMhw7SAYGXQKSmPZOhQoRbeiiK7iSHgQAhfsFAh7SMiTC9UtcJD+AD11KNAg6BSYmxQZbd/3Zt6b\n+d7sGFJ08ju89/t+3+9983ZmnPcTiEXHWIwSRNoTaTzZXz9a6N8K+WWCt+rF9ZCx0KCVx+Tc7GYo\nusHwa5gL9NkFpgSjEiFv+0LctBGlywTbfphcgQ9+6gycc4FMThZteWab6pNGk/IIZr6ZXIGgIdDj\nAs6KLNry1g1k0GE0bxgRJ0I0xDVRi8k78zgYUXQz7hyJMARlwwVZtOUTxbM/I4rjjCcqEYagbHhb\nFm35YhW8nwe12SMsvMzD4n0eD1d45JANP/pkOEr5KFBGFekVpCqkecs64uAgpdpivlS6VCoVmVcP\nBUuMpi5wXGco5dgEXCeHljxahqioGhKHO5hxaVIhd6ga6hLPQq5ew4yLVA77clTkn6y4Mh6yWIVs\nGPJ+VcrVa/gCmKk6T7nOD4W5pjEsZA/4K6x7aD8UKU9t0I7e0ZPqmvN4Ob8TzC26uPpJ/2i5Q3Vh\n1gYh5I9Ga4W+4RFgHu1DLKDfw9xoDahVgxVmh7NrxTHAfxK61kCuSieQpn3R7jyV0pBdPaWh2SET\nHUOaFnNErvhfaF9hoD4OimnKj2cVAB4Hs5riHwdbznn2O701rxmd5IGjOfcy4yM5Nvh8NZA/q3nZ\nKzkuLOvlrV7LIY2js7lilKQPSoIcf30EyOvsZbu/A/V/G+pvY/e72FvxP+5AU+9mocBfRT8SvVJi\nQa80M5/s6bxJhfkxLIGkApsoERP0oXHKmrK9kuZ3NlFGxYBOe9BZGoTtlTS/s4kyKgZ0slfgacr2\nSpr/g4kyMgKbfGya4DvaMOyCOWt6XKlv2yqseXSc9g708e/2vVJobYzYLiQ2pKO6lVfdBS7S5Juf\nwNqYbg0KiQ3pprWDjrg+oJ/W+V4pOOXjrigoxExU5NKdeTJbk8B5YJVo3/zQkW+HXUjcIb+GeA5n\nG9MV45VCa6P7Bq4oLCQ25Ncwe5pcV/d7WhyYn9Da6IaxQmLDYVoyXkVmBE8IBeYntDa6YayQ0NA5\nUy8UjtH/P80V3DNeyfYqjQq6oW+i9HXDuXMdcyaLWBvDKRAp6IZSEGZLLvqzXpAnWZuo5xEmKuyj\nUWZ4EK+6dJboVRILvPI3D+NcWFruZ9UAAAAASUVORK5CYII=\n", "text/latex": [ "$$\\frac{E_{R} \\left(L_{k} + 1\\right) - L_{k}}{E_{R} L_{k} - L_{k} + 1}$$" ], "text/plain": [ "E_R⋅(Lₖ + 1) - Lₖ\n", "─────────────────\n", " E_R⋅Lₖ - Lₖ + 1 " ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sympy.collect(E_func_Er.subs(gamma, 1).subs(d_exT, 0), Er)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "For the only direct excitation correction we obtain:" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAMoAAAAUBAMAAAA+f7/EAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAdrur3c1mRBCZiTIi\n71SC2pmSAAAACXBIWXMAAA7EAAAOxAGVKw4bAAACpElEQVQ4Ea1VTWsTURQ9+Z5MPkwVBF1FunNj\naou7wix0owVTbLa2qFgFF7F/oBOyEtEEgy4EMYEKCoKDgrgodBYiuDIogqKLuOiui2ioDVai977J\nZPKSecWFF/Leeeeec+/Mm3kTYDzejFMq5poqMcbv/zM5PbPt0cks4+efPUaNQvZ4TuHkDhc8dcRx\n9jzGH6U/AVreJ+frjH0n5Q1PfVXAWNdjJJTOOMtyjRUNKScW/k59l5IlTz0noG54jITcLghwl1tS\nTiz8nZE2dCQH6qQhYKQ6YGQgd4kU5Syt/J37sjg4JA1w+beNjdYQNwzlLvroxaicq+dmf1OZlU7t\nCFcLLgGxrzhmEn5o4RBNiH6406n9ZATIXaJ5h3VHpfOZBZZGmwjXaQ63aLeXcJcgKsA6zyEz2sYy\no9EuaUOQg0HpXASqsBDKIsSWVJHuwcRpNm7yQFFCPIstAnqhsPCxUMgxKZ5+ok1IWzhJccoiqHT+\nAEwtg3AGqQzpuMt7aDsE8YQHild8m8RzyDsmujgJMaqc4rjoJiqWdp+FtGPaL6TbdIYmzuN6Dhcv\nH7BR6fcY7RIzRHF3UDrFcXkBrE48sFlMT1/rIZjf0s4kunjcxfJOuIhVk3Mc8r2MPH2lM0xXHfsC\nPELc4Cp6FZjHpVw9Xk00k7eNZClL7Br9nJC7xOsu78wKZ3mxM338bB44CnqPKHgPyofXp4qpViCH\nYAahDLGTnBLhdonPbp+gI2i5vDPv5WRFD/GmUM45elTs4BWzchMpLtQ/LITcLo7qdV8sTQonaegZ\nhAxxOJyvJb1s1sZLbOp4x9ndQRnNHkACjeGFixVOSq917MQ87w2CNo+0dVPf7qH8FCsEZzp1wY0O\nvl/+f3I6/2Kj9fzX7hX5Z/dk//8/8l/KldR7hap0gwAAAABJRU5ErkJggg==\n", "text/latex": [ "$$E_{R} \\left(d_{dirT} + 1\\right) - d_{dirT}$$" ], "text/plain": [ "E_R⋅(d_dirT + 1) - d_dirT" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sympy.collect(E_func_Er.subs(gamma, 1).subs(Lk, 0), Er)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "> **NOTE:** The latter 3 formulas for correcting only one coefficient cannot be chained. In other words, applying them in sequence **do not** yield the same result as applying the complete formula." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Computing RAW values from E" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Conversely, to compute $E_R$ as a function of $E$ we invert the previous expression:" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "collapsed": false }, "outputs": [], "source": [ "Er_func_E = solve(E - E_func_Er, Er)[0]" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\n", "text/latex": [ "$$\\frac{E \\left(- L_{k} + \\gamma\\right) + L_{k} + d_{dirT} \\gamma}{E \\left(- L_{k} + \\gamma - 1\\right) + L_{k} + d_{dirT} \\gamma + 1}$$" ], "text/plain": [ " E⋅(-Lₖ + γ) + Lₖ + d_dirT⋅γ \n", "───────────────────────────────────\n", "E⋅(-Lₖ + γ - 1) + Lₖ + d_dirT⋅γ + 1" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sympy.collect(Er_func_E, E)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And we define the python function:" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(E*(-L_k + gamma) + L_k + d_dirT*gamma)/(E*(-L_k + gamma - 1) + L_k + d_dirT*gamma + 1)\n" ] } ], "source": [ "print(sympy.collect(Er_func_E, E))" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "collapsed": false }, "outputs": [], "source": [ "def uncorrect_E_gamma_leak_dir(E, gamma, L_k=0, d_dirT=0):\n", " E = np.asarray(E)\n", " return ((E*(-L_k + gamma) + L_k + d_dirT*gamma) /\n", " (E*(-L_k + gamma - 1) + L_k + d_dirT*gamma + 1))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "And the inverse for only a single correction are (in the order gamma, leakage, direct excitation)" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAGsAAAAuBAMAAADdBPrgAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAdrur3c1mRBCZiTIi\n71SC2pmSAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAB8UlEQVRIDe1WPUvDQBh+orZN09IWB+eCgm4W\noyJCF3GVCqWTQ4uTi+DkItJIcVAcCv6BCIoiggX/QMGf4CI4iODg4FArBUGh3uUu6TUfl9JRfIfm\nvecj6d31ngbwq/HupD7f8WPkGLVsyiU+bOyDgEc+hBzSvgl/INf4sJEWNCR9CDmUzmKCKFKFGaQM\nuVRkq8X8DxlvL69AEfGQ/raBdSCZw8jOe4hUpMtAHY2oAdU0RTykbwOGmqGiy0aIVKCtbdMMilwL\ncFhrbdudpToL0wr8WAuIPVnAkgCHtLXypz5XIEtJqh6iDaCHs8UqAbeTw1pTzgewWgD+p+HuMEV+\nRf/lXYHgwFdm27rOT5DXFxz4aXLootl+R+qRjSWBX80AKj9yL0xdO/1ijSTwSV6CJRjAbVC4TRL4\nJC9NNNnd3TYe+K9tA29M4Xy2oVTsgdvGAj/6cJ4FmYpYsY7+3LQBt40F/j0wnXI0TEtmHbFdnrmx\nwN8Cjq0IOFyltUHlZNZxJGh3USqtlUpF2tpL4gS+tkdhocisVedP1fUle4GvmYKFtnTbcMVBl60X\n+JprRUC3LZHzt/UCf9TgCvtSIM0+sVrV/zQh8ONcwC/qQlfXp5yXGm6L5zuL/TqXrZ90NsAFA7se\nRAROxIHY34iDwXtzcOkvbbGsqq/XU/YAAAAASUVORK5CYII=\n", "text/latex": [ "$$\\frac{E \\gamma}{E \\gamma - E + 1}$$" ], "text/plain": [ " E⋅γ \n", "───────────\n", "E⋅γ - E + 1" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Er_func_E.subs(Lk, 0).subs(d_exT, 0)" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAJUAAAAtBAMAAABVFTRkAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAEM3dMna7q2ZEmYki\n71TRS9i1AAAACXBIWXMAAA7EAAAOxAGVKw4bAAAC6klEQVRIDe1Wz2sTQRR+mybadMUEQQQRDFsh\nHoQUe/IgDYh4EnKQ2IsYEPGmof5YEGx70otIxXNJbl6jRy/JnyCiJw/txYMHoY2aIArxvZl9b2d2\nMpSCBw8dyOyb7/ve19nJpvsByGhO7sT3hwCza8NVAc2icG8Ux0sVE/Kq0Qee4qe0YMtlVapgb0uW\nupiqLv5E8iR+Oj1LfrTByw5WQVetDNBWa234A6/H8dPf0EAyp239OnppZwO01boptwMhHMG6lpgk\nl7QNiR4MFGyBtp5WpRYsK5TOzRhp2wgK6wmRghm15jvVJ3+oKv6mufCZZhrSVhzGWwMFmWBGrXk8\njQpV4S+1vqBmnMQLDzTngoY6mF/Ecb6ujqkLeMVzAygHu6otjKL5D1HUpgUSc5DHIgOmatVC04iw\nhjo3mB0UF5iQfeGBBuqLRsYELbXqUo9XWMbHC/3mIOxebms3aSMC3kwBTbWi1eN1BUt6ipYh9+Kl\nvst0C0Tks38gq1ZeMzv4FX7EcgkPZBdKDxSKk+wLCdisa9gELTXRJ2rj+BH+cIOVSbwyacPV5rbu\nYi8i4lv8NCVerjppsi7N4vu6BmQLJp8BU7Up4vp2fqGn62DAmHHNgKna0Eh5Dh7WZbFnsT/1nnYH\ngn2fwOSfDfzdHIz/4QQkLzybVLenbshLuGrJC99dTiM+4ls528F5Qb8hU/YLlx4ieLzmeNH/bnoT\nJW9IdgDx8hI3HS/OC+oNKU6QenkJ14vzAp2bOWRfXsLxkrygA9iNHvuJl5dwvCQv6AA2s+F4eQn2\nOkaBYvGMkRcogAVwWp/n2yi6GEVV5esl2Iv/OgUwnRcwWcBzeCWE3KOXcLw4L6hk0YV3+euJG3t5\nCXC8OC9QssAAePZrcpfyTHgJ14vzAiWLfhnGdb5J3peXyHpJXqBkURtD/tPdjJeXgNdb1XUWT7sW\nWpuUAWnwvvTKS2h62nyocSlM8FMW7yUslbXIDQ5fswBeeIm/6KIzOX6BRPYAAAAASUVORK5CYII=\n", "text/latex": [ "$$\\frac{- E L_{k} + E + L_{k}}{- E L_{k} + L_{k} + 1}$$" ], "text/plain": [ "-E⋅Lₖ + E + Lₖ\n", "──────────────\n", "-E⋅Lₖ + Lₖ + 1" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sympy.collect(Er_func_E.subs(gamma, 1).subs(d_exT, 0), Er)" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAFkAAAAuBAMAAACxAqjlAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAdrur3c1mRBCZiTIi\n71SC2pmSAAAACXBIWXMAAA7EAAAOxAGVKw4bAAACP0lEQVRIDeWUMWgUQRSG/8Rkd2/33DsSVESQ\nk6CdmJgQTDAoWAiC5CBuYZXTxko8SB1uQywUhDuTSqsrtLJwwcZGsmCTXhQhICdYCp4e0YMLxnk7\nN7OzO7cB60yx8+Z/37x9+xZ+AGP7E9Mzu0gt53wjpfSPRN7VUoWWJpFg/mSPxzzlFvnOnjVfhmpg\n99hpjSsK/UJl4ni0DRt5jb4dE2pUKOG4OIva+een/gotudeWFvaEIujVcLjLtFwPQ9FojA8bnc3f\nRL0OUE7R1ifkSLPacELKHfGNNu5RtAw0ELDA9rxbHz1vktXsYqTJFFeUWUOuhO9MwS/At4oUsTTf\nj5ZQr7Kj3YhU4C3dJiUat+1zuU/Xm/jB+nh6rGWOw5i9cxn8NrtP437DYVG73sJZN3wYbPl23Tdq\n1evyZ420Wf2dJD1aNK7ZeIZ32P6G7TFK8p+1vtyZvrhYTtLW1Kv3J/AF48AZYIqSE31C3cS8SbP2\ncO6R1Q0QvTgatooSESrCjtOruOVmnrUKh77uwLVy+mTFmg/NEvuwmU7zQPYQJ/f/Y9HgD83KtMjB\nE8iwyBh2P8dxlkUCXzm0vklmJFaGRUoaQyqdYZGD6GyLHESnLfL+3IW5KxXeZL/vuBPNIi/hAYxq\nBp22SOaJG3BDRr/0vJuet0T35FemLdLxcQMmIWxpnegWaf3h6EBas0gzHq5WW7dI+2p2bd0ihyfT\ndG5hd1ZqKYssVGRGdCIFHqgWuRXI5BMZJQLFIlcW5xOp+PAPnmvaJMDz7yAAAAAASUVORK5CYII=\n", "text/latex": [ "$$\\frac{E + d_{dirT}}{d_{dirT} + 1}$$" ], "text/plain": [ "E + d_dirT\n", "──────────\n", "d_dirT + 1" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sympy.collect(Er_func_E.subs(gamma, 1).subs(Lk, 0), Er)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Correcting S\n", "\n", "In this section we derive the expression of $S$ (corrected stoichiometry) \n", "as a function of $S_{PR}$ or $S_R$ (uncorrected stoichiometry). \n", "See section 1 for the expression of $S$ and $S_R$ and $S_{PR}$. \n", "\n", "## Define the symbols" ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAH8AAAAsBAMAAAC+iXp5AAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMARImrInaZuxAyVN3N\nZu80gH0WAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAB0UlEQVRIDe2VP0gCURzHf1523l1oUmMEQquD\nQ24GQjUrSA3R4FJTjdEU3BAhNHhzQd7irGsQcdAU3eBYLUGb0aDQoEOUd/d+5+/+pkhB4A3ee5/7\nvs/93lP8AfzyJRUnfMHfCxZWN0u0aqzAzQM3Vj4uCh/kKQqQ833y0GcoqjcQpRkmsLnQ8VlFkCB0\nIW5nOF1/eNf1DIDNJY2k/YZSB2ZoBreAnCv7rSKM12C+JQt7OcWCKEC+q1o88DORgoacOldqshVB\ngZsHCgpJSMeVfbhkCRQgvwpcyR4sAaw/wxuUXAI3D/cMfgknFSuCFZgzwsMF0Ba7LSsi5Gm0LfYZ\np9RnvLiz7RsM4j6KKRrnBL4muzrjvGua/UcnUA+p1fHvEJT7c0FkZWMrS6thFXi4kcEt0E7Jx46g\nmicGJvBwKqCd8mJOg4LiFXg4ETg6pVxNwou9Pq3rt7p+N5g7uREI6pQNgJwtGAzwW3BzI4Nn4OiU\nBwCfApyV7pkFBUP+Q6d8BanHCddizyUY8vBOGe0Cpz3xZbHpFBAe3ikjTYiuqQl1NuMUED5Kp6zm\nY4+yZcAzMGcGr4zSKRNKbZlVcMru5s3ko3TKSLZ+SBfi2ORBHdHk35am9yuGcUQUAAAAAElFTkSu\nQmCC\n", "text/latex": [ "$$\\frac{n_{a} + n_{d}}{n_{a} + n_{aa} + n_{d}}$$" ], "text/plain": [ " nₐ + n_d \n", "──────────────\n", "nₐ + nₐₐ + n_d" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "def StoichRaw(nd, na, naa):\n", " return (na + nd)/(na + nd + naa)\n", "\n", "StoichRaw(nd, na, naa)" ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAIsAAAAtBAMAAABscoU/AAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAVN27EGbvq4l2IkQy\nmc2fLEGPAAAACXBIWXMAAA7EAAAOxAGVKw4bAAACS0lEQVRIDe2VMWhTQRzGv2cu6TV5wSAudbAB\nwUlUUAdxOaSDCJIKxUlQJx06dFCwDuXholUscQodlGxFlwZBdHB4Cro2i0OH6nNykRCwLqagl3f/\nu15evOQRioL0hnv/97vvvvu/I+QD/uKY2Jmz/pWNd+wkPPH6zrNa1foQ6qZw7/nyvIXd5aXbhzCO\n5okq+ylFxS2lJJti5jQqdfdms5KfQ6ZxwC8dRb7rwNpqhWze7omwGhqxu8gKsCBgrINs18GL5LTU\nah1utb7KSlQauCKfqcbDEF4bY5EU86ac5KBuMAksKDJ8vi/vJMLeacHWn5aUXNt8An4wXKh9G+6C\nRSAXYFIEZ8M10WtzA94mZ0f8zRQ2N4HVBpay4QY+kJy6yXfAo8vFpl9OYSPv4wWwchHXUOu1KZSR\nv1XKlcbn0tnEKvnLOTWl9Ppu4rdKPTMjFB8wF6b14qy/RfV5jbrPXLj20n7/c83rmr96/MRYaiaf\nhfmJj9aro+QOvotHvYFfOzHao56+u+8/u4Gefxjr21zcktilS+7i9l6rdsldHPu+C+zvS2eSp+bZ\n63ePo2rS+XOoWiIbw3WjLr4CnPHqJp0rpCe54QmbPj4DnOPb6Xywq3eltourM/gbmHR+RMdSN4YT\nHpTmPAAonZe/JGySqa3ttzlbXwjjTbwKJNNZy4dzk/RjAiadr/Z2Y3jZyTfwTq0VZYQl05m6ScFN\n0ksbNax01h8VLwziUybpTSLLdH5Pjq7U7uezfkdF9APa6kxnV2rH3CR9oG1Gf/4GDsUBESs1aeUA\nAAAASUVORK5CYII=\n", "text/latex": [ "$$\\frac{\\gamma n_{d} + n_{a}}{\\gamma n_{d} + n_{a} + n_{aa}}$$" ], "text/plain": [ " γ⋅n_d + nₐ \n", "────────────────\n", "γ⋅n_d + nₐ + nₐₐ" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "def Stoich(nd, na, naa, gamma):\n", " return (na + gamma*nd)/(na + gamma*nd + naa)\n", "\n", "Stoich(nd, na, naa, gamma)" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "## Computing S from RAW values\n", "\n", "As a first step we write $n^*_a$ as a function of $n_a$ and save the symbolic expression:" ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAJoAAAARBAMAAADXpqg/AAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAZqvNVN1EiRC7InaZ\nMu8Jbb2KAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAB9UlEQVQ4Ea2TP0gbURzHv4nx7uXPxSAOpVKq\n7VAwy2m6Sg6kLg4JCG6WVJBuTair4FEQRIRT6FJcjk6igyG6iFpOHBW8gl1rh0IHEWLANG0J9veS\nd6cHvi2/4ffn83u/L+/9uAPQeztioHN20zkpQPktVZuQdGScjqt1yQwgm5JxEuqqdlKtR/fUlPeb\n+2mv4FHcQcbfDm1VyvfPU14scfCFfCK6Dsum4szlyFfzeZv63PlUZn+JJZqIO6K3UOBJN/nzbh3b\nXMjihEzczedt6nHNmESsSYxVodmil+U1LBMwrQKecjrG3Vwm8zqTGaHM5xzfccbqCFWJRPRWo+X+\nkH+MWZ7ngOc8znNHJu7m8zb1eaSKMBdSHa8B5R+lDua1CnAMXDOs7L8UXU9N8MpokCd09KRMdrJj\nKBWEBvuHSJheHk9heJze+guRhsqmtUZwSsaTJeTM0qJ7YaqWGSoWpmj99PIFEzUXiNWh6k8SjvYj\nqObzfJBvFzAXck/xHRuvsLFHzQ/Z2rNsDdrlR/rH8ogNGkkjPhCcknHa9ec+/ATtaB1IiyEK8dV3\nmqgsO/rIbOfe3lqVhNMXt7bEGi6uxDyFaPmbKqqke/FVpMt3BwDibx7iV1ozFdFLMdqYZ112+FDk\nSnriyMP3o4zP7B6k2AtbWQX+A5dpi+1kxN2UAAAAAElFTkSuQmCC\n", "text/latex": [ "$$L_{k} n_{d} + n_{a} + n_{dir}$$" ], "text/plain": [ "Lₖ⋅n_d + nₐ + n_dir" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ns_a_as_func_na = na + Lk*nd + n_dir\n", "ns_a_as_func_na" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Here we write $S_R$ substituting $n^*_a$ with $n_a + L_k n_d + Dir$ and \n", "$Dir$ with $d_{T}(n_a + \\gamma\\,n_d)$ (Definition 2):" ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\n", "text/latex": [ "$$\\frac{L_{k} n_{d} + d_{dirT} \\gamma n_{d} + d_{dirT} n_{a} + n_{a} + n_{d}}{L_{k} n_{d} + d_{dirT} \\gamma n_{d} + d_{dirT} n_{a} + n_{a} + n_{aa} + n_{d}}$$" ], "text/plain": [ " Lₖ⋅n_d + d_dirT⋅γ⋅n_d + d_dirT⋅nₐ + nₐ + n_d \n", "──────────────────────────────────────────────────\n", "Lₖ⋅n_d + d_dirT⋅γ⋅n_d + d_dirT⋅nₐ + nₐ + nₐₐ + n_d" ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Sr_sym = sympy.factor(\n", " StoichRaw(nd, ns_a, naa).subs(ns_a, ns_a_as_func_na).subs(n_dir, d_exT*(na + gamma*nd))\n", " )\n", "Sr_sym" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The previous expression is $S_R$. We can use it to express\n", "$n_a$ as a function of $S_R$ and $n_d$:" ] }, { "cell_type": "code", "execution_count": 26, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAIsAAAAtBAMAAABscoU/AAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAVN27EGbvq4l2IkQy\nmc2fLEGPAAAACXBIWXMAAA7EAAAOxAGVKw4bAAACS0lEQVRIDe2VMWhTQRzGv2cu6TV5wSAudbAB\nwUlUUAdxOaSDCJIKxUlQJx06dFCwDuXholUscQodlGxFlwZBdHB4Cro2i0OH6nNykRCwLqagl3f/\nu15evOQRioL0hnv/97vvvvu/I+QD/uKY2Jmz/pWNd+wkPPH6zrNa1foQ6qZw7/nyvIXd5aXbhzCO\n5okq+ylFxS2lJJti5jQqdfdms5KfQ6ZxwC8dRb7rwNpqhWze7omwGhqxu8gKsCBgrINs18GL5LTU\nah1utb7KSlQauCKfqcbDEF4bY5EU86ac5KBuMAksKDJ8vi/vJMLeacHWn5aUXNt8An4wXKh9G+6C\nRSAXYFIEZ8M10WtzA94mZ0f8zRQ2N4HVBpay4QY+kJy6yXfAo8vFpl9OYSPv4wWwchHXUOu1KZSR\nv1XKlcbn0tnEKvnLOTWl9Ppu4rdKPTMjFB8wF6b14qy/RfV5jbrPXLj20n7/c83rmr96/MRYaiaf\nhfmJj9aro+QOvotHvYFfOzHao56+u+8/u4Gefxjr21zcktilS+7i9l6rdsldHPu+C+zvS2eSp+bZ\n63ePo2rS+XOoWiIbw3WjLr4CnPHqJp0rpCe54QmbPj4DnOPb6Xywq3eltourM/gbmHR+RMdSN4YT\nHpTmPAAonZe/JGySqa3ttzlbXwjjTbwKJNNZy4dzk/RjAiadr/Z2Y3jZyTfwTq0VZYQl05m6ScFN\n0ksbNax01h8VLwziUybpTSLLdH5Pjq7U7uezfkdF9APa6kxnV2rH3CR9oG1Gf/4GDsUBESs1aeUA\nAAAASUVORK5CYII=\n", "text/latex": [ "$$\\frac{\\gamma n_{d} + n_{a}}{\\gamma n_{d} + n_{a} + n_{aa}}$$" ], "text/plain": [ " γ⋅n_d + nₐ \n", "────────────────\n", "γ⋅n_d + nₐ + nₐₐ" ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" } ], "source": [ "S_sym = Stoich(nd, na, naa, gamma)\n", "S_sym" ] }, { "cell_type": "code", "execution_count": 27, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\n", "text/latex": [ "$$\\frac{L_{k} S_{R} n_{d} - L_{k} n_{d} - S_{R} \\gamma n_{d} + S_{R} n_{aa} + S_{R} n_{d} + \\gamma n_{d} - n_{d}}{L_{k} S_{R} n_{d} - L_{k} n_{d} - S_{R} d_{dirT} n_{aa} - S_{R} \\gamma n_{d} + S_{R} n_{d} + d_{dirT} n_{aa} + \\gamma n_{d} + n_{aa} - n_{d}}$$" ], "text/plain": [ " Lₖ⋅S_R⋅n_d - Lₖ⋅n_d - S_R⋅γ⋅n_d + S_R⋅nₐₐ + S_R⋅n_d + γ⋅n_d - n_d\n", "──────────────────────────────────────────────────────────────────────────────\n", "Lₖ⋅S_R⋅n_d - Lₖ⋅n_d - S_R⋅d_dirT⋅nₐₐ - S_R⋅γ⋅n_d + S_R⋅n_d + d_dirT⋅nₐₐ + γ⋅n_\n", "\n", " \n", "─────────────\n", "d + nₐₐ - n_d" ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" } ], "source": [ "S_func_Sr_nx = S_sym.subs(na, solve(Sr_sym - Sr, na)[0]).factor()\n", "S_func_Sr_nx" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "The previous expression if $S$ as a function of $S_R$, $n_d$, $n_a$,\n", "$n_{aa}$ and correction coefficients.\n", "\n", "Now we use the expression of $E$ to try to eliminate \n", "$n_d$, $n_a$ and $n_{aa}$\n", "from the previous expression:" ] }, { "cell_type": "code", "execution_count": 28, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAFIAAAApBAMAAABU52OqAAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMARImrInaZuxAyVN3N\nZu80gH0WAAAACXBIWXMAAA7EAAAOxAGVKw4bAAABkElEQVQ4EWNgQAVCJq7BAahCOHgJ5QEcX3DI\noQhzLtjDwPITRQgHh4PjIwPvBxySqMJcHxiYD6AK4eCxHWDgv9DAkWozAYcCuDCfAsP6BoXuCfMb\n4EI4GP4CDDq8E9IYZuOQRwhLMzA432J4xRCMEMLHAoZobQc+BQi5l5wfLyB4+FjCUWFEqsRnyqCX\n+08sGPQ+GcwO5Aog1nUUqlz9vYFhBaOyS6gpkoUwM5GLKd7H2gUMAWzspQz9DkCl+ZB8DlOJXEw5\nMzAUcjnM4j7A4A9S1A8xGKoSpZi6wcDQxMTQ0C/AcB+kaA0QM505c/rNmTMGDAzoxRSTJAPDegYG\nG5BKNRDBwACzHa2YYlJgYMhhYPjLwdAWegqsEK6SDbWYYgIG8yMGrh9MHDs5f6CqRCummBsYWD4y\nMB24yZbA+QBVJVoxxcbAwLiBgcV2Ad8CVqA3QADmTrRiCqgSAvod2G80gJkwlWAOopiShahjYOCb\nMH8uhM3hABMD0fBiSgUmymi6NBfGRqbhxZQCsihONgCZQo3xOacjrgAAAABJRU5ErkJggg==\n", "text/latex": [ "$$\\frac{n_{a}}{\\gamma n_{d} + n_{a}}$$" ], "text/plain": [ " nₐ \n", "──────────\n", "γ⋅n_d + nₐ" ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" } ], "source": [ "E_sym = FRET(nd, na, gamma)\n", "E_sym" ] }, { "cell_type": "code", "execution_count": 29, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\n", "text/latex": [ "$$\\frac{1}{S_{R} d_{dirT} + S_{R} - d_{dirT} - 1} \\left(- L_{k} S_{R} n_{d} + L_{k} n_{d} - S_{R} d_{dirT} \\gamma n_{d} - S_{R} n_{aa} - S_{R} n_{d} + d_{dirT} \\gamma n_{d} + n_{d}\\right)$$" ], "text/plain": [ "-Lₖ⋅S_R⋅n_d + Lₖ⋅n_d - S_R⋅d_dirT⋅γ⋅n_d - S_R⋅nₐₐ - S_R⋅n_d + d_dirT⋅γ⋅n_d + n\n", "──────────────────────────────────────────────────────────────────────────────\n", " S_R⋅d_dirT + S_R - d_dirT - 1 \n", "\n", "_d\n", "──\n", " " ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "na_func_Sr = solve(Sr_sym - Sr, na)[0]\n", "na_func_Sr" ] }, { "cell_type": "code", "execution_count": 30, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\n", "text/latex": [ "$$\\frac{L_{k} S_{R} n_{d} - L_{k} n_{d} + S_{R} d_{dirT} \\gamma n_{d} + S_{R} n_{aa} + S_{R} n_{d} - d_{dirT} \\gamma n_{d} - n_{d}}{L_{k} S_{R} n_{d} - L_{k} n_{d} - S_{R} \\gamma n_{d} + S_{R} n_{aa} + S_{R} n_{d} + \\gamma n_{d} - n_{d}}$$" ], "text/plain": [ "Lₖ⋅S_R⋅n_d - Lₖ⋅n_d + S_R⋅d_dirT⋅γ⋅n_d + S_R⋅nₐₐ + S_R⋅n_d - d_dirT⋅γ⋅n_d - n_\n", "──────────────────────────────────────────────────────────────────────────────\n", " Lₖ⋅S_R⋅n_d - Lₖ⋅n_d - S_R⋅γ⋅n_d + S_R⋅nₐₐ + S_R⋅n_d + γ⋅n_d - n_d \n", "\n", "d\n", "─\n", " " ] }, "execution_count": 30, "metadata": {}, "output_type": "execute_result" } ], "source": [ "E_func_Sr = E_sym.subs(na, na_func_Sr).factor()\n", "E_func_Sr" ] }, { "cell_type": "code", "execution_count": 31, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nAElFTkSuQmCC\n", "text/latex": [ "$$\\frac{S_{R} n_{aa} \\left(- E + 1\\right)}{E L_{k} S_{R} - E L_{k} - E S_{R} \\gamma + E S_{R} + E \\gamma - E - L_{k} S_{R} + L_{k} - S_{R} d_{dirT} \\gamma - S_{R} + d_{dirT} \\gamma + 1}$$" ], "text/plain": [ " S_R⋅nₐₐ⋅(-E + 1) \n", "──────────────────────────────────────────────────────────────────────────────\n", "E⋅Lₖ⋅S_R - E⋅Lₖ - E⋅S_R⋅γ + E⋅S_R + E⋅γ - E - Lₖ⋅S_R + Lₖ - S_R⋅d_dirT⋅γ - S_R\n", "\n", " \n", "───────────────\n", " + d_dirT⋅γ + 1" ] }, "execution_count": 31, "metadata": {}, "output_type": "execute_result" } ], "source": [ "nd_func_E_Sr = solve(E_func_Sr - E, nd)[0]\n", "nd_func_E_Sr" ] }, { "cell_type": "code", "execution_count": 32, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\n", "text/latex": [ "$$\\frac{S_{R} \\gamma}{E L_{k} S_{R} - E L_{k} - E S_{R} \\gamma + E S_{R} + E \\gamma - E - L_{k} S_{R} + L_{k} - S_{R} d_{dirT} \\gamma + S_{R} \\gamma - S_{R} + d_{dirT} \\gamma + 1}$$" ], "text/plain": [ " S_R⋅γ \n", "──────────────────────────────────────────────────────────────────────────────\n", "E⋅Lₖ⋅S_R - E⋅Lₖ - E⋅S_R⋅γ + E⋅S_R + E⋅γ - E - Lₖ⋅S_R + Lₖ - S_R⋅d_dirT⋅γ + S_R\n", "\n", " \n", "───────────────────────\n", "⋅γ - S_R + d_dirT⋅γ + 1" ] }, "execution_count": 32, "metadata": {}, "output_type": "execute_result" } ], "source": [ "S_func_E_Sr = S_func_Sr_nx.replace(nd, nd_func_E_Sr).factor()\n", "S_func_E_Sr" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Note that in the previous expression there is no more\n", "dependency on $n_{aa}$ (we have not eliminated the variable,\n", "it simply simplifies).\n", "\n", "The previous expression is $S$ as a function of $S_{R}$, $E$ \n", "(gamma corrected) and all correction coefficients.\n", "\n", "Let's replace $E$ with $E_{R}$:" ] }, { "cell_type": "code", "execution_count": 33, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAJoAAAARBAMAAADXpqg/AAAAMFBMVEX///8AAAAAAAAAAAAAAAAA\nAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv3aB7AAAAD3RSTlMAZqvNVN1EiRC7InaZ\nMu8Jbb2KAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAB9UlEQVQ4Ea2TP0gbURzHv4nx7uXPxSAOpVKq\n7VAwy2m6Sg6kLg4JCG6WVJBuTair4FEQRIRT6FJcjk6igyG6iFpOHBW8gl1rh0IHEWLANG0J9veS\nd6cHvi2/4ffn83u/L+/9uAPQeztioHN20zkpQPktVZuQdGScjqt1yQwgm5JxEuqqdlKtR/fUlPeb\n+2mv4FHcQcbfDm1VyvfPU14scfCFfCK6Dsum4szlyFfzeZv63PlUZn+JJZqIO6K3UOBJN/nzbh3b\nXMjihEzczedt6nHNmESsSYxVodmil+U1LBMwrQKecjrG3Vwm8zqTGaHM5xzfccbqCFWJRPRWo+X+\nkH+MWZ7ngOc8znNHJu7m8zb1eaSKMBdSHa8B5R+lDua1CnAMXDOs7L8UXU9N8MpokCd09KRMdrJj\nKBWEBvuHSJheHk9heJze+guRhsqmtUZwSsaTJeTM0qJ7YaqWGSoWpmj99PIFEzUXiNWh6k8SjvYj\nqObzfJBvFzAXck/xHRuvsLFHzQ/Z2rNsDdrlR/rH8ogNGkkjPhCcknHa9ec+/ATtaB1IiyEK8dV3\nmqgsO/rIbOfe3lqVhNMXt7bEGi6uxDyFaPmbKqqke/FVpMt3BwDibx7iV1ozFdFLMdqYZ112+FDk\nSnriyMP3o4zP7B6k2AtbWQX+A5dpi+1kxN2UAAAAAElFTkSuQmCC\n", "text/latex": [ "$$L_{k} n_{d} + n_{a} + n_{dir}$$" ], "text/plain": [ "Lₖ⋅n_d + nₐ + n_dir" ] }, "execution_count": 33, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ns_a_as_func_na" ] }, { "cell_type": "code", "execution_count": 34, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nAAAAAElFTkSuQmCC\n", "text/latex": [ "$$\\frac{L_{k} n_{d} + d_{dirT} \\left(\\gamma n_{d} + n_{a}\\right) + n_{a}}{L_{k} n_{d} + d_{dirT} \\left(\\gamma n_{d} + n_{a}\\right) + n_{a} + n_{d}}$$" ], "text/plain": [ " Lₖ⋅n_d + d_dirT⋅(γ⋅n_d + nₐ) + nₐ \n", "───────────────────────────────────────\n", "Lₖ⋅n_d + d_dirT⋅(γ⋅n_d + nₐ) + nₐ + n_d" ] }, "execution_count": 34, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Er_sym = PR(nd, ns_a).subs(ns_a, ns_a_as_func_na).subs(n_dir, d_exT*(nd*gamma + na))\n", "Er_sym" ] }, { "cell_type": "code", "execution_count": 35, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\n", "text/latex": [ "$$\\frac{E_{R} L_{k} + E_{R} d_{dirT} \\gamma + E_{R} - L_{k} - d_{dirT} \\gamma}{E_{R} L_{k} - E_{R} \\gamma + E_{R} - L_{k} + \\gamma}$$" ], "text/plain": [ "E_R⋅Lₖ + E_R⋅d_dirT⋅γ + E_R - Lₖ - d_dirT⋅γ\n", "───────────────────────────────────────────\n", " E_R⋅Lₖ - E_R⋅γ + E_R - Lₖ + γ " ] }, "execution_count": 35, "metadata": {}, "output_type": "execute_result" } ], "source": [ "E_func_Er = FRET(nd, na, gamma).subs(nd, solve(Er_sym - Er, nd)[0]).factor()\n", "E_func_Er" ] }, { "cell_type": "code", "execution_count": 36, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\n", "text/latex": [ "$$\\frac{S_{R} \\left(E_{R} L_{k} - E_{R} \\gamma + E_{R} - L_{k} + \\gamma\\right)}{E_{R} L_{k} S_{R} - E_{R} S_{R} \\gamma + E_{R} S_{R} - L_{k} S_{R} - S_{R} d_{dirT} + S_{R} \\gamma - S_{R} + d_{dirT} + 1}$$" ], "text/plain": [ " S_R⋅(E_R⋅Lₖ - E_R⋅γ + E_R - Lₖ + γ) \n", "──────────────────────────────────────────────────────────────────────────────\n", "E_R⋅Lₖ⋅S_R - E_R⋅S_R⋅γ + E_R⋅S_R - Lₖ⋅S_R - S_R⋅d_dirT + S_R⋅γ - S_R + d_dirT \n", "\n", " \n", "───\n", "+ 1" ] }, "execution_count": 36, "metadata": {}, "output_type": "execute_result" } ], "source": [ "S_func_Er_Sr = S_func_E_Sr.replace(E, E_func_Er).factor()\n", "S_func_Er_Sr " ] }, { "cell_type": "code", "execution_count": 37, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\\frac{S_{R} \\left(E_{R} L_{k} - E_{R} \\gamma + E_{R} - L_{k} + \\gamma\\right)}{E_{R} L_{k} S_{R} - E_{R} S_{R} \\gamma + E_{R} S_{R} - L_{k} S_{R} - S_{R} d_{dirT} + S_{R} \\gamma - S_{R} + d_{dirT} + 1}\n" ] } ], "source": [ "print(sympy.printing.latex(S_func_Er_Sr))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The previous expression is $S$ as a function of $S_{R}$, $E_{R}$ and \n", "all correction coefficients.\n", "\n", "Let's make a python function out of it:" ] }, { "cell_type": "code", "execution_count": 38, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "S_R*(E_R*L_k - E_R*gamma + E_R - L_k + gamma)/(E_R*L_k*S_R - E_R*S_R*gamma + E_R*S_R - L_k*S_R - S_R*d_dirT + S_R*gamma - S_R + d_dirT + 1)\n" ] } ], "source": [ "print(S_func_Er_Sr)" ] }, { "cell_type": "code", "execution_count": 39, "metadata": { "collapsed": false }, "outputs": [], "source": [ "def correct_S(E_R, S_R, gamma, L_k, d_dirT):\n", " return (S_R*(E_R*L_k - E_R*gamma + E_R - L_k + gamma) /\n", " (E_R*L_k*S_R - E_R*S_R*gamma + E_R*S_R - L_k*S_R - S_R*d_dirT + \n", " S_R*gamma - S_R + d_dirT + 1))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "If we want to express $S$ as a function of $S_{PR}$ (i.e. the\n", "stoichiometry with leakage and direct excitation correction),\n", "we just set $L_k = 0$ and $d_{T} = 0 $ in the previous expression." ] }, { "cell_type": "code", "execution_count": 40, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\n", "text/latex": [ "$$\\frac{S_{PR} \\gamma}{- E S_{PR} \\gamma + E S_{PR} + E \\gamma - E + S_{PR} \\gamma - S_{PR} + 1}$$" ], "text/plain": [ " S_PR⋅γ \n", "────────────────────────────────────────────────\n", "-E⋅S_PR⋅γ + E⋅S_PR + E⋅γ - E + S_PR⋅γ - S_PR + 1" ] }, "execution_count": 40, "metadata": {}, "output_type": "execute_result" } ], "source": [ "S_func_E_Spr = (S_func_E_Sr.replace(Lk, 0).replace(d_exT, 0)\n", " .replace(Sr, Spr).replace(Er, Epr))\n", "S_func_E_Spr" ] }, { "cell_type": "code", "execution_count": 41, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\n7QAAAABJRU5ErkJggg==\n", "text/latex": [ "$$\\frac{S_{PR} \\left(- E_{PR} \\gamma + E_{PR} + \\gamma\\right)}{- E_{PR} S_{PR} \\gamma + E_{PR} S_{PR} + S_{PR} \\gamma - S_{PR} + 1}$$" ], "text/plain": [ " S_PR⋅(-E_PR⋅γ + E_PR + γ) \n", "────────────────────────────────────────────\n", "-E_PR⋅S_PR⋅γ + E_PR⋅S_PR + S_PR⋅γ - S_PR + 1" ] }, "execution_count": 41, "metadata": {}, "output_type": "execute_result" } ], "source": [ "S_func_Epr_Spr = (S_func_Er_Sr.replace(Lk, 0).replace(d_exT, 0)\n", " .replace(Sr, Spr).replace(Er, Epr))\n", "S_func_Epr_Spr" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Computing RAW values from S" ] }, { "cell_type": "code", "execution_count": 42, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\n", "text/latex": [ "$$\\frac{S_{R} \\left(E_{R} L_{k} - E_{R} \\gamma + E_{R} - L_{k} + \\gamma\\right)}{E_{R} L_{k} S_{R} - E_{R} S_{R} \\gamma + E_{R} S_{R} - L_{k} S_{R} - S_{R} d_{dirT} + S_{R} \\gamma - S_{R} + d_{dirT} + 1}$$" ], "text/plain": [ " S_R⋅(E_R⋅Lₖ - E_R⋅γ + E_R - Lₖ + γ) \n", "──────────────────────────────────────────────────────────────────────────────\n", "E_R⋅Lₖ⋅S_R - E_R⋅S_R⋅γ + E_R⋅S_R - Lₖ⋅S_R - S_R⋅d_dirT + S_R⋅γ - S_R + d_dirT \n", "\n", " \n", "───\n", "+ 1" ] }, "execution_count": 42, "metadata": {}, "output_type": "execute_result" } ], "source": [ "S_func_Er_Sr" ] }, { "cell_type": "code", "execution_count": 43, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\n", "text/latex": [ "$$\\frac{S \\left(d_{dirT} + 1\\right)}{- E_{R} L_{k} S + E_{R} L_{k} + E_{R} S \\gamma - E_{R} S - E_{R} \\gamma + E_{R} + L_{k} S - L_{k} + S d_{dirT} - S \\gamma + S + \\gamma}$$" ], "text/plain": [ " S⋅(d_dirT + 1) \n", "──────────────────────────────────────────────────────────────────────────────\n", "-E_R⋅Lₖ⋅S + E_R⋅Lₖ + E_R⋅S⋅γ - E_R⋅S - E_R⋅γ + E_R + Lₖ⋅S - Lₖ + S⋅d_dirT - S⋅\n", "\n", " \n", "─────────\n", "γ + S + γ" ] }, "execution_count": 43, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Sr_func_Er_S = solve(S_func_Er_Sr - S, Sr)[0]\n", "Sr_func_Er_S" ] }, { "cell_type": "code", "execution_count": 44, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "S*(d_dirT + 1)/(-E_R*L_k*S + E_R*L_k + E_R*S*gamma - E_R*S - E_R*gamma + E_R + L_k*S - L_k + S*d_dirT - S*gamma + S + gamma)\n" ] } ], "source": [ "print(Sr_func_Er_S)" ] }, { "cell_type": "code", "execution_count": 45, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def uncorrect_S(E_R, S, gamma, L_k, d_dirT):\n", " return (S*(d_dirT + 1) / \n", " (-E_R*L_k*S + E_R*L_k + E_R*S*gamma - E_R*S - E_R*gamma + \n", " E_R + L_k*S - L_k + S*d_dirT - S*gamma + S + gamma))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Numerical tests\n", "\n", "Test consistency between apply and un-apply of numerical corrections for $E$." ] }, { "cell_type": "code", "execution_count": 46, "metadata": { "collapsed": false }, "outputs": [], "source": [ "import numpy as np" ] }, { "cell_type": "code", "execution_count": 47, "metadata": { "collapsed": false }, "outputs": [], "source": [ "Ex = np.arange(-0.2, 1.2, 0.1)" ] }, { "cell_type": "code", "execution_count": 48, "metadata": { "collapsed": false }, "outputs": [], "source": [ "gamma_ = 0.75\n", "leakage_ = 0.04\n", "dir_ex_t_ = 0.08" ] }, { "cell_type": "code", "execution_count": 49, "metadata": { "collapsed": false }, "outputs": [], "source": [ "Ex_roundtrip = uncorrect_E_gamma_leak_dir(correct_E_gamma_leak_dir(Ex, gamma_), gamma_)" ] }, { "cell_type": "code", "execution_count": 50, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 50, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.allclose(Ex, Ex_roundtrip)" ] }, { "cell_type": "code", "execution_count": 51, "metadata": { "collapsed": false }, "outputs": [], "source": [ "Ex_roundtrip = uncorrect_E_gamma_leak_dir(correct_E_gamma_leak_dir(Ex, gamma_, leakage_, dir_ex_t_), \n", " gamma_, leakage_, dir_ex_t_)" ] }, { "cell_type": "code", "execution_count": 52, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 52, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.allclose(Ex, Ex_roundtrip)" ] }, { "cell_type": "code", "execution_count": 53, "metadata": { "collapsed": false }, "outputs": [], "source": [ "Ex_roundtrip = correct_E_gamma_leak_dir(uncorrect_E_gamma_leak_dir(Ex, gamma_, leakage_, dir_ex_t_), \n", " gamma_, leakage_, dir_ex_t_)" ] }, { "cell_type": "code", "execution_count": 54, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 54, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.allclose(Ex, Ex_roundtrip)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Test that $S$ correction functions:" ] }, { "cell_type": "code", "execution_count": 55, "metadata": { "collapsed": true }, "outputs": [], "source": [ "Ex = np.arange(-0.2, 1.2, 0.01)\n", "Sx = np.arange(-0.2, 1.2, 0.01)" ] }, { "cell_type": "code", "execution_count": 56, "metadata": { "collapsed": false }, "outputs": [], "source": [ "np.random.shuffle(Ex)\n", "np.random.shuffle(Sx)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's do a consistency check:" ] }, { "cell_type": "code", "execution_count": 57, "metadata": { "collapsed": false }, "outputs": [], "source": [ "gamma_ = 1\n", "leakage_ = 0\n", "dir_ex_t_ = 0\n", "\n", "S_corr = correct_S(Ex, Sx, gamma_, leakage_, dir_ex_t_)\n", "S_uncorr = uncorrect_S(Ex, S_corr, gamma_, leakage_, dir_ex_t_)" ] }, { "cell_type": "code", "execution_count": 58, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 58, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.allclose(S_corr, Sx)" ] }, { "cell_type": "code", "execution_count": 59, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 59, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.allclose(S_uncorr, Sx)" ] }, { "cell_type": "code", "execution_count": 60, "metadata": { "collapsed": false }, "outputs": [], "source": [ "gamma_ = 0.7\n", "leakage_ = 0.05\n", "dir_ex_t_ = 0.1\n", "\n", "S_corr = correct_S(Ex, Sx, gamma_, leakage_, dir_ex_t_)\n", "S_uncorr = uncorrect_S(Ex, S_corr, gamma_, leakage_, dir_ex_t_)" ] }, { "cell_type": "code", "execution_count": 61, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 61, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.allclose(S_uncorr, Sx)" ] }, { "cell_type": "code", "execution_count": 62, "metadata": { "collapsed": true }, "outputs": [], "source": [ "%matplotlib inline\n", "import matplotlib.pyplot as plt" ] }, { "cell_type": "code", "execution_count": 63, "metadata": { "collapsed": true }, "outputs": [], "source": [ "idx = Sx.argsort()" ] }, { "cell_type": "code", "execution_count": 64, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "[