Difference between revisions of "Team:Oxford/Modeling/Tutorial"

Line 1: Line 1:
#contentSub, #search-controls, .firstHeading, #footer-box, #catlinks, #p-logo {
+
{{:Team:Oxford/Templates/Nav}}
    display:none;
+
}
+
#top-section {
+
    border: none;
+
    height: 0px;
+
}
+
  
#content {
+
<html>
     width:100%;
+
     <div class="container-fluid page-heading">
}
+
        <h3>Modelling Tutorials</h3>
 +
    </div>
 +
    <div class="container-fluid">
 +
        <div class="row">
 +
            <div class="col-md-9">
 +
                <div class="section" id="introduction">
 +
                    <div class="slim">
 +
                        <h2>Introduction</h2>
 +
                        <p>
 +
                            On this page we aim to explain the concepts and methodology behind the modelling we have done in our project. We hope this will make our modelling section more accessible for all members of the iGEM community.
 +
                        </p>
 +
                    </div>
 +
                </div>
 +
                <div class="section-spacer"></div>
 +
                <div class="section" id="gene-expression-networks">
 +
                    <div class="slim">
 +
                        <h2>Gene Expression Networks</h2>
 +
                        <div id="gene-expression-networks-mass-action">
 +
                            <h3>Mass Action</h3>
 +
                            <p>
 +
                                Our goal is to model a system of reactions such as the reversible reaction
 +
                            </p>
 +
                                \[A \mathrel{\mathop{\rightleftharpoons}^{\mathrm{k_{+}}}_{\mathrm{k_{-}}}} B\]
 +
                            <p>
 +
                                Where \(A\) and \(B\) are our two species and \(k_{+}\) and \(k_{-}\) will be determined shortly. To do this, we make the intuitive assumption that the rate at which something reacts is proportional to how much of it we've got. That is, the rate of change of \(B\) with time is
 +
                            </p>
 +
                                \[\dfrac{dB}{dt}=k_{+}A\]
 +
                            <p>
 +
                                where \(k_{+}\) is simply a proportionality constant. This assumption is called the law of mass action. This of course is not the complete picture, as we forgot to include the fact that \(B\) can react back to form \(A\). So the complete system of equations to solve is
 +
                            </p>
 +
                            \[\dfrac{dA}{dt}=k_{-}B-k_{+}A\]
 +
                            \[\dfrac{dB}{dt}=k_{+}A-k_{-}B\]
 +
                            <p>
 +
                                At this point, you can type these into your favourite computing program and solve them.
 +
                            </p>
 +
                        </div>
 +
                        <div id="gene-expression-networks-michaelis">
 +
                            <h3>Michaelis-Menten Kinetics</h3>
 +
                            <p>
 +
                                It is possible to formulate a rate law that describes enzyme-catalysed reactions, this is known as Michaelis-Menten kinetics. In order to derive this rate law we will look at a generalised system of chemical events detailed below:
 +
                            </p>
  
body {
+
                            \[S + E\mathop{\rightleftharpoons}C_{1}\mathop{\rightleftharpoons}C_{2}\mathop{\rightleftharpoons}P + E\]
    position: relative;
+
}
+
  
.row {
+
                            <p><em>
    background-color: #fff;
+
                                In this system \(S\) represents our substrate, \(E\) our enzyme, \(C_{1}\) our enzyme-substrate complex, \(C_{2}\) our enzyme-product complex, and \(P\) our product.
}
+
                            </em></p>
.navbar  {
+
                            <p>
    margin-top: 16px;
+
                                Initially we will make two simplifications. Firstly, we will combine \(C_{1}\) and C2 into a single complex, \(C\), as we will assume that the time-scale of the conversion \(C_{1}\mathop{\rightleftharpoons}C_{2}\) is much faster than that of the association and dissociation events. Secondly, we will assume that the product never binds with the free enzyme. These two assumptions lead to the simplified network:
    position: fixed;
+
                            </p>
    font-size: 13px;
+
    background-color: #fff;
+
    margin-bottom: 0;
+
}
+
  
.navbar-right li {
+
                            \[S + E\mathrel{\mathop{\rightleftharpoons}^{k_{1}}_{k_{-1}}}C\mathop{\rightarrow}^{k_{2}}P + E\]
    font-family: "Avenir",sans-serif;
+
    color: #2800D7;
+
}
+
  
.navbar-nav > li > a {
+
                            <p>
    padding-left: 10px;
+
                                Using the laws of mass action (detailed above) we arrive at the following differential equation model:
    padding-right: 10px;
+
                            </p>
}
+
.navbar-default .navbar-nav > .active > a, .navbar-default .navbar-nav> .active > a:hover {
+
    background-color: #fff;
+
    color:#2800D7;
+
}
+
  
.navbar-default .navbar-nav > .active {
+
                            \[\dfrac{d}{dt}s(t)=-k_{1}s(t)e(t) + k_{-1}c(t)\]
    background-color: #fff;
+
  
}
+
                            \[\dfrac{d}{dt}e(t)=k_{-1}c(t) - k_{1}s(t)e(t) + k_{2}c(t)\]
  
.navbar-default .navbar-brand {
+
                            \[\dfrac{d}{dt}c(t)=-k_{-1}c(t) + k_{1}s(t)e(t) - k_{2}c(t)\]
    font-weight: bold;
+
    color: #2800D7;
+
    /*background: -webkit-gradient(linear, 0% 50%, 100% 50%, color-stop(0%, #fa1e64),color-stop(100%, #2800D7));
+
    -webkit-background-clip: text;
+
    -webkit-text-fill-color: transparent;*/
+
}
+
  
.navbar-default .navbar-brand:hover {
+
                            \[\dfrac{d}{dt}p(t) = k_{2}c(t)\]
    font-weight: bold;
+
    color: #fa1e64;
+
    /*background: -webkit-gradient(linear, 0% 50%, 100% 50%, color-stop(0%, #fa1e64),color-stop(100%, #2800D7));
+
    -webkit-background-clip: text;
+
    -webkit-text-fill-color: transparent;*/
+
}
+
  
#main-container {
+
                            <p><em>
    top:0;
+
                                Concentrations are denoted as the lowercase letter eg the concentration of \(S\) is given by \(s\).
    left:0;
+
                            </em></p>
    right:0;
+
    margin:51.3px 0 0 0;
+
    padding:0;
+
    background-color:#fff;
+
    overflow:auto;
+
    position:absolute;
+
}
+
  
#sidebar.affix {
+
                            <p>
    top: 80px;
+
                                You may have spotted that the enzyme is not consumed in this series of reactions. Therefore the total amount of enzyme remains constant. We reflect this in the expression \(e_{T}=e+c\). We can now use this expression to eliminate \(e(t)\) from our model, leaving:
}
+
                            </p>
  
.contents-sidebar {
+
                            \[\dfrac{d}{dt}s(t)=-k_{1}s(t)(e_{T}-c(t)) + k_{-1}c(t)\]
    padding-left: 20px;
+
    margin-top: 20px;
+
    margin-bottom: 20px;
+
    background-color: white;
+
}
+
  
.contents-sidebar .nav>li>a {
+
                            \[\dfrac{d}{dt}c(t)=-k_{-1}c(t) + k_{1}s(t)(e_{T}-c(t)) - k_{2}c(t)\]
    color: #999;
+
    padding: 4px 20px;
+
    font-size: 13px;
+
    font-weight: 400;
+
    line-height: 1.4em;
+
    margin-bottom: 10px;
+
}
+
  
.contents-sidebar .nav .nav>li>a {
+
                            \[\dfrac{d}{dt}p(t) = k_{2}c(t)\]
    padding-top: 1px;
+
    padding-bottom: 1px;
+
    padding-left: 20px;
+
    font-size: 12px;
+
}
+
  
.contents-sidebar .nav .nav .nav>li>a {
+
                            <p>
    padding-top: 1px;
+
                                We have one further simplification to make. This is the rapid equilibrium approximation, by which we assume that equilibrium between \(s+e\) and \(c\) on a much faster time scale than the reaction of \(c\) to \(p\). With this approximation we can write the following equation:
    padding-bottom: 1px;
+
                            </p>
    padding-left: 20px;
+
    font-size: 11px;
+
}
+
  
.contents-sidebar .nav>.active>a {
+
                            \[0=-k_{-1}c(t) + k_{1}s(t)(e_{T}-c(t)) - k_{2}c(t)\]
    color: #2800D7;
+
}
+
  
.contents-sidebar .nav>li>a {
+
                            <p>
    border-left: 2px solid transparent;
+
                                Leading to:
}
+
                            </p>
.contents-sidebar .nav>.active>a,
+
.contents-sidebar .nav>li>a:hover,
+
.contents-sidebar .nav>li>a:focus {
+
    color: #2800D7;
+
    text-decoration: none;
+
    background-color: transparent;
+
    border-left: 2px solid #2800D7;
+
    font-weight: 700;
+
}
+
  
.contents-sidebar .nav .nav>.active>a,
+
                            \[c^{*}(t)= \dfrac{k_{1}s(t)e_{T}}{k_{-1} + k_{2} + k_{1}s(t)}\]
.contents-sidebar .nav .nav>li>a:hover,
+
.contents-sidebar .nav .nav>li>a:focus {
+
    font-weight: 500;
+
}
+
  
.contents-sidebar .nav ul.nav {
+
                            <p>
    display: none;
+
                                Now we can see that \(c\) is no longer an independent variable, but instead tracks the other variables. This can be referred to as \(c\) being in quasi-steady state. By including this new expression into our model we are left with:
}
+
                            </p>
  
.contents-sidebar .nav>.active>ul.nav {
+
                            \[\dfrac{d}{dt}s(t) = -\dfrac{k_{2}k_{1}s(t)e_{T}}{k_{-1} + k_{2} + k_{1}s(t)}\]
    display: block;
+
}
+
  
 +
                            \[\dfrac{d}{dt}p(t) = \dfrac{k_{2}k_{1}s(t)e_{T}}{k_{-1} + k_{2} + k_{1}s(t)}\]
  
#sidebar {
+
                            <p>
    background-color: white;
+
                                With this we have an expression describing our enzyme catalysed system in the form of a single reaction. The rate of this reaction is known as a Michaelis-Menten rate law. By defining \(K_{max}=k_{2}e_{T}\) and \(K_{half}=\dfrac{k_{-1}+k_{2}}{k_{1}}\) we can express in the more familiar form:
}
+
                            </p>
  
#title {
+
                            \[rate \: of \: S \mathop{\rightarrow} P = K_{max}\dfrac{s}{K_{half} + s}\]
    width: 100%;
+
    background-image: url(https://static.igem.org/mediawiki/2015/5/5f/Ox_radcam.jpeg);
+
    background-position: 50% 50%;
+
    background-repeat: no-repeat;
+
    background-attachment: fixed;
+
    background-size: cover;
+
    border-radius: 0;
+
  
}
+
                            <p>
 +
                                It is worth noting that there are a number of ways to derive this form, each involving different approximations. These methods may lead to the constants \(K_{max}\) and \(K_{half}\) being defined differently.
 +
                            </p>
  
#title div {
+
                        </div>
    width: 100%;
+
                        <div id="gene-expression-networks-stochastic">
}
+
                            <h3>Stochastic</h3>
 +
                            <p>
 +
                                The simplest way to add an element of 'randomness' into an equation is to add a random term into the differential equation. This turns it into a stochastic differential equation, such as:
 +
                            </p>
 +
                                \[\dfrac{dx}{dt}=c+r\]
 +
                            <div class="image image-right">
 +
                                <img src="https://static.igem.org/mediawiki/2015/1/1f/OxiGEM_Stochastic_Tutorial_01.jpg"/>
 +
                            </div>
 +
                            <p>
 +
                                which determines the evolution of a particle travelling at a speed \(c\), with a random number \(r\) added into the mix just for fun. We choose \(r\) to be normally distributed with a mean value of 0 and a variance of, say, 1. We evaluate the position of the particle at multiple timesteps (with some small time \(dt\) separating them) and plot our solution in the Figure below.
 +
                            </p>
 +
                            <p>
 +
                                We can do better than this when dealing with systems such as our example in the previous section. We use the Gillespie algorithm to find:
 +
                            </p>
 +
                            <ol>
 +
                                <li>The <strong>time</strong> taken between reactions</li>
 +
                                <li>The <strong>reaction</strong> that took place in that time.</li>
 +
                            </ol>
 +
                            <p>
 +
                                as neither of these could be determined by our initial method [<a href="#Ref2">2</a>, <a href="#Ref4">4</a>].
 +
                            </p>
 +
                            <div class="image image-full">
 +
                                <img src="https://static.igem.org/mediawiki/2015/7/72/OxiGEM_Stochastic_Tutorial_02.png"/>
 +
                            </div>
 +
                            <p>
 +
                                <strong>1)</strong> To find the time taken, we make an assumption about the form of the probability distribution that the time between reactions holds. It makes sense to think of it as a falling exponential, such that reactions more often happen quickly rather than slowly, and that the more probable a reaction is, the shorter the time between subsequent reactions. This naturally leads to the form
 +
                            </p>
 +
                                \[P(t)=e^{-\alpha_{0}t}\]
 +
                            <p>
 +
                                where \(P(t)\) is the probability of any reaction occuring in time \(t\), and \(\alpha_{0}\) tells us something about the likelihood of the reaction. We plot this in the Figure. In fact we call \(\alpha_{0}\) the sum of the propensities \(\alpha_{i}\) (where the dummy variable \(i\) runs from 1 to the number of possible reactions, \(N\), that could occur). In the case of our example system, the propensity for the reaction \(A\) to \(B\) would be \(k_{+}A\) and the propensity for the reaction \(B\) to \(A\) is \(k_{-}B\) so in this case \(\alpha_{0}=k_{+}A+k_{-}B\).
 +
                            </p>
 +
                            <p>
 +
                                To decide the time it took for a reaction to occur, we sample a random number \(r_{1}\) in the range [0,1] and stick that number on the y axis of the graph. We read off from our graph a corresponding time and we're done - we now know when the next reaction took place.
 +
                            </p>
 +
                            <p>
 +
                                <strong>2)</strong> To decide which reaction took place, we need the probabilities of each reaction occuring being proportional to the ratio of their propensities. We split up the domain of 0 to 1 into the normalised ratios of the propensities of our problem, recalling the propensities we calculated. We could have, in this case, selected the backwards reaction B to A. We can generalise this to the form given in the Gillespie Algorithm above.
 +
                            </p>
 +
                            <div class="image image-full">
 +
                                <img src="https://static.igem.org/mediawiki/2015/d/da/OxiGEM_Stochastic_Tutorial_03.jpg"/>
 +
                            </div>
 +
                        </div>
 +
                        <video class="image-massive">
 +
                            <source src="https://static.igem.org/mediawiki/2015/b/b2/OxiGEM_Modelling_With_Will.mp4" type="video/mp4">
 +
                        </video>
 +
                    </div>
 +
                </div>
 +
                <div class="section" id="diffusion">
 +
                    <div class="slim">
  
#solution-byline {
+
                    </div>
     margin: auto;
+
                </div>
}
+
            </div>
 +
            <div class="col-md-3 contents-sidebar">
 +
                <ul id="sidebar" class="nav nav-stacked" data-spy="affix">
 +
                    <li><a href="#introduction">Introduction</a></li>
 +
                    <li>
 +
                        <a href="#gene-expression-networks">Gene Expression Networks</a>
 +
                        <ul class="nav nav-stacked">
 +
                            <li><a href="#gene-expression-networks-mass-action">Mass Action</a></li>
 +
                            <li><a href="#gene-expression-networks-michaelis">Michaelis-Menten Kinetics</a></li>
 +
                            <li><a href="#gene-expression-networks-stochastic">Stochastic</a></li>
 +
                        </ul>
 +
                    </li>
 +
                </ul>
 +
            </div>
 +
        </div>
 +
     </div>
 +
</html>
  
#solution-byline h3 {
+
{{:Team:Oxford/Templates/Foot}}
    vertical-align: bottom;
+
}
+
 
+
#title img {
+
    width:350px;
+
    display: block;
+
    margin: auto auto;
+
    max-width: 800px;
+
}
+
 
+
#title p {
+
    margin: 0;
+
}
+
 
+
#logo img {
+
    margin:auto;
+
    width: 6em;
+
    margin-top: 2em;
+
}
+
 
+
#title h3 {
+
    color: #fff;
+
    text-align: center;
+
    font-family: "Avenir", sans-serif;
+
    font-weight: lighter;
+
    font-size: 1em;
+
    margin-bottom: 1em;
+
    margin-right: auto;
+
    margin-left: auto;
+
    text-transform: uppercase;
+
}
+
 
+
#title a {
+
    color: #fff;
+
    padding: 0.2em;
+
    text-align: center;
+
    line-height: 1.1em;
+
}
+
 
+
#title a:hover, #title a:active, #title a:focus {
+
    text-decoration: none;
+
}
+
 
+
 
+
 
+
.page-content {
+
    background-color: #fff;
+
    z-index: 10;
+
}
+
 
+
.quote {
+
    font-family: "Avenir", sans-serif;
+
    color: #2800D7;
+
    /*background: -webkit-gradient(linear, 0% 50%, 100% 50%, color-stop(0%, #fa1e64),color-stop(100%, #2800D7));
+
    -webkit-background-clip: text;
+
    -webkit-text-fill-color: transparent;*/
+
    margin: 1em;
+
}
+
 
+
.quote-right, .quote-left {
+
    max-width: 350px;
+
}
+
 
+
.quote p {
+
    text-align: justify;
+
    text-transform: uppercase;
+
    font-size: 1em;
+
    font-weight: lighter;
+
    margin-bottom: 0;
+
}
+
 
+
.quote h3 {
+
    text-align: right;
+
    font-size: 1em;
+
    text-transform: uppercase;
+
    color: #2800D7;
+
    margin-top: 5px;
+
    padding-top: 0;
+
}
+
 
+
.quote-full {
+
    width: 100%;
+
    margin-left: auto;
+
    margin-right: auto;
+
    clear: both;
+
    padding: 15px 0;
+
    max-width: 810px;
+
}
+
 
+
.quote-right {
+
    width: 50%;
+
    font-size: 1em;
+
    float: right;
+
    padding-left: 15px;
+
    padding-right: 0;
+
}
+
 
+
.quote-left {
+
    width:50%;
+
    font-size: 1em;
+
    float: left;
+
    padding-right: 15px;
+
    padding-left: 0;
+
}
+
 
+
.table>thead>tr>th {
+
    color:  #2800D7;
+
}
+
 
+
#foot {
+
    background-color: #6C7A89;
+
    color: white;
+
    font-family: "Avenir",sans-serif;
+
    text-align: center;
+
    padding-top: 1em;
+
    z-index: -10;
+
    text-transform: uppercase;
+
    vertical-align: middle;
+
}
+
 
+
h2, h1 {
+
    font-size: 3.5em;
+
    font-family: "Avenir", sans-serif;
+
    /*text-transform: uppercase;*/
+
    font-weight: 900;
+
    color: #2800D7;
+
    /*background: -webkit-gradient(linear, 0% 50%, 100% 50%, color-stop(0%, #fa1e64),color-stop(100%, #2800D7));
+
    -webkit-background-clip: text;
+
    -webkit-text-fill-color: transparent;*/
+
    border: none;
+
    clear: both;
+
    margin-bottom: 0em;
+
}
+
 
+
h1 {
+
    font-size: 2em;
+
    margin-top: -50px;
+
    padding-top: 80px;
+
}
+
 
+
 
+
 
+
p {
+
    text-align: justify;
+
    font-family: "Avenir", sans-serif;
+
}
+
 
+
 
+
h3 {
+
    clear: both;
+
    font-weight: 700;
+
    font-family: "Avenir", sans-serif;
+
    color: #2D2D35;
+
    font-size: 1.5em;
+
}
+
 
+
h2, h3 {
+
    padding-top: 80px;
+
    margin-top: -50px;
+
}
+
 
+
h2 {
+
    padding-top: 110px;
+
}
+
 
+
h4, h5 {
+
    padding-top: 70px;
+
    margin-top: -50px;
+
    font-weight: bold;
+
}
+
 
+
h5 {
+
    font-family: "Avenir", sans-serif;
+
    font-weight: 900;
+
    font-size: 2em;
+
    color: #777;
+
}
+
 
+
h6 {
+
    font-size: 1em;
+
}
+
 
+
ol {
+
    list-style-type: none;
+
    /*padding-top: 15px;
+
    margin-top: 30px;
+
    margin-bottom: 30px;
+
    border-top: 1px solid #cccccc;
+
    border-bottom: 1px solid #cccccc;
+
    padding-left: 15px;*/
+
}
+
 
+
ol li {
+
    counter-increment: step-counter;
+
    /* margin-bottom: 20px; */
+
    font-family: "Avenir", sans-serif;
+
    text-align: left;
+
    padding-left: 25px;
+
    position: relative;
+
}
+
 
+
ol li::before {
+
    content: counter(step-counter) ".";
+
    font-size: 1em;
+
    font-family: "Avenir",sans-serif;
+
    font-weight: lighter;
+
    margin-right: 15px;
+
    color: #2800D7;
+
    display: inline-block;
+
    position: absolute;
+
    left:0;
+
}
+
 
+
ol li p{
+
    overflow: hidden;
+
}
+
 
+
.slim ul li {
+
    /* margin-bottom: 20px; */
+
    font-family: "Avenir", sans-serif;
+
    /* vertical-align: middle; */
+
    text-align: left;
+
    padding-left: 25px;
+
    position: relative;
+
}
+
 
+
.slim ul li:before {
+
    content: "•";
+
    font-size: 1.2em;
+
    color: #2800D7;
+
    margin-right: 15px;
+
    display: block;
+
    position: absolute;
+
    left:0;
+
}
+
 
+
 
+
.slim ul {
+
    list-style:none;
+
}
+
 
+
.slim {
+
    max-width: 720px;
+
    margin-left: auto;
+
    margin-right: auto;
+
    padding-left: 15px;
+
    padding-right: 15px;
+
}
+
 
+
#main-container .section {
+
    clear: both;
+
    margin-bottom: 75px;
+
}
+
 
+
#main-container .section h2 {
+
    margin-bottom: 0;
+
}
+
 
+
.image-full img {
+
    margin-left: -15px;
+
    margin-right: -15px;
+
    width: 100%;
+
}
+
 
+
.image p {
+
    color: #777;
+
    text-align: center;
+
    font-weight: lighter;
+
    font-family: "Avenir",sans-serif;
+
    font-size: 0.8em;
+
    /*background: -webkit-gradient(linear, 0% 50%, 100% 50%, color-stop(0%, #fa1e64),color-stop(100%, #2800D7));
+
    -webkit-background-clip: text;
+
    -webkit-text-fill-color: transparent;
+
    text-transform: uppercase;*/
+
}
+
 
+
.image-right {
+
    width: 40%;
+
    float: right;
+
    padding-left: 15px;
+
    padding-right: 0;
+
    margin-right:0;
+
}
+
 
+
.image-right img {
+
    width: 100%;
+
}
+
 
+
.image-left {
+
    width:40%;
+
    float: left;
+
    padding-right: 15px;
+
    padding-left: 0;
+
    margin-left: 0;
+
}
+
 
+
.image-left img {
+
    width: 100%;
+
}
+
 
+
#foot {
+
    margin-top: -10px;
+
}
+
 
+
#foot ul {
+
    list-style-type: none;
+
    list-style-image: none;
+
    margin-left: 0;
+
}
+
 
+
#foot li {
+
    display: inline;
+
    text-align: center;
+
}
+
 
+
#foot a {
+
    color: white;
+
    font-size: 1em;
+
    padding-right: 0px;
+
}
+
 
+
#foot a[href ^="https://"] {
+
    padding-right: 5px;
+
    padding-left: 5px;
+
}
+
 
+
#foot p {
+
    font-size: 0.5em;
+
    text-align: center;
+
}
+
 
+
 
+
.page-heading {
+
    width: 100%;
+
    background-image: url(https://static.igem.org/mediawiki/2015/f/fd/Ox_Biochem_Dept.jpg);
+
    background-position: 50% 50%;
+
    background-repeat: no-repeat;
+
    background-attachment: fixed;
+
    background-size: cover;
+
    text-align: center;
+
    text-transform: uppercase;
+
}
+
 
+
.page-heading h3 {
+
    color: white;
+
    font-size: 10vw;
+
    font-weight: bolder;
+
    font-family: "Avenir",sans-serif;
+
    margin: 0;
+
    padding-top: 25vh;
+
    padding-bottom: 20vh;
+
}
+
 
+
#bodyContent .page-heading h3 {
+
    margin: 30px;
+
}
+
 
+
/*.page-heading h3::before {
+
    content: "[";
+
    font-size: 15vw;
+
}
+
 
+
.page-heading h3::after {
+
    content: "]";
+
    font-size: 15vw;
+
}*/
+
 
+
 
+
.team-member {
+
    border-bottom: 1px solid #cccccc;
+
    margin-bottom: 15px;
+
    text-align: center;
+
    margin-top: 5px;
+
}
+
 
+
.team-member img {
+
    width:100%;
+
    max-width: 250px;
+
    margin-left: auto;
+
    margin-right:auto;
+
    display: block;
+
 
+
}
+
 
+
.team-member h2{
+
    font-size: 1em;
+
    margin-bottom: 0;
+
    text-transform: none;
+
    font-weight: 600;
+
}
+
 
+
 
+
#bodyContent .team-member h3 {
+
    margin-bottom: 15px;
+
    padding-bottom: 0;
+
}
+
 
+
 
+
#bodyContent .advisor h2 {
+
    margin-top: 0;
+
    padding-top: 0;
+
}
+
 
+
.team-member h3 {
+
    font-size: 0.8em;
+
    margin-top: 0;
+
    padding-top: 0px;
+
    font-weight: 200;
+
}
+
 
+
#bodyContent h2 {
+
    margin-bottom: 10px;
+
    padding-bottom: 15px;
+
    text-align: center;
+
}
+
 
+
#bodyContent h5 {
+
    margin-bottom: -80px;
+
}
+
 
+
#support {
+
    text-align: center;
+
}
+
 
+
.sponsor-logo img{
+
    width: 100%;
+
    max-width: 200px;
+
    display: block;
+
    margin-left: auto;
+
    margin-right: auto;
+
    border-bottom: 1px solid #cccccc;
+
    padding: 0;
+
}
+
 
+
.sponsor-logo img:hover{
+
    border-bottom: 1px solid #4776E6;
+
}
+
 
+
.section-spacer {
+
    display: block;
+
    width: 150px;
+
    margin: auto;
+
    margin-top: 30px;
+
    border-bottom: 1px solid #cccccc;
+
    clear: both;
+
}
+
 
+
#references {
+
    border-top: 1px solid #cccccc;
+
    font-size: 0.7em;
+
}
+
 
+
#references h2 {
+
    border: none;
+
}
+
.references {
+
    padding-left: 0px;
+
    border: none;
+
    margin-top: 15px;
+
}
+
 
+
@media (max-width: 768px) {
+
    .quote-left, .quote-right {
+
        width: 100%;
+
        margin-left: auto;
+
        margin-right: auto;
+
        clear: both;
+
        padding: 15px 0;
+
        float: none;
+
        border: none;
+
    }
+
    .image-left, .image-right {
+
        margin-left: -15px;
+
        margin-right: -15px;
+
        width: 100%;
+
        width: calc(100% + 30px);
+
        float:none;
+
    }
+
 
+
    h2 {
+
        font-size: 2em;
+
    }
+
}
+
 
+
 
+
 
+
.algorithm>ol {
+
    border: none;
+
    padding-top: 15px;
+
    margin-top: 10px;
+
    margin-bottom: 15px;
+
    text-align: left;
+
    margin-left: 0;
+
}
+
 
+
.algorithm>ol>li {
+
 
+
    text-align: left;
+
    padding-left: 50px;
+
    position: relative;
+
    margin-bottom: 40px;
+
}
+
 
+
.algorithm>h3 {
+
    padding-top: 0px;
+
    margin-top: -31px;
+
    margin-left: 30px;
+
    margin-right:30px;
+
    background-color: white;
+
    display: inline-block;
+
    text-transform: none;
+
    padding-left: 30px;
+
    padding-right: 15px;
+
    color: #fa1e64;
+
    font-weight: 700;
+
    font-size: 2em;
+
}
+
 
+
.algorithm {
+
    border: 15px solid #fa1e64;
+
    margin-top: 30px;
+
    margin-bottom: 30px;
+
    margin-left: -30px;
+
    margin-right: -30px;
+
    padding-left: 30px;
+
    padding-right: 30px;
+
    text-align: center;
+
}
+
 
+
.algorithm ol li::before {
+
    content: counter(step-counter);
+
    font-size: 4em;
+
    font-family: "Avenir",sans-serif;
+
    font-weight: 700;
+
    color: #2800D7;
+
    display: block;
+
    position: absolute;
+
    left:0;
+
    top: 50%;
+
    transform: translateY(-50%);
+
}
+
 
+
.image.lightbox {
+
    position: fixed;
+
    top: 66px;
+
    bottom: 0px;
+
    left: 0;
+
    width: 100%;
+
    height: 100%;
+
    background-color: #2800D7;
+
    /*background: -webkit-gradient(linear, 0% 50%, 100% 50%, color-stop(0%, #fa1e64),color-stop(100%, #2800D7));
+
    background: -moz-linear-gradient(left, #fa1e64,#2800D7);
+
    background: -webkit-linear-gradient(left, #fa1e64,#2800D7);
+
    background: linear-gradient(to right, #fa1e64,#2800D7);*/
+
    z-index: 10000000;
+
    float: none;
+
}
+
 
+
.image.lightbox>img {
+
    width: auto;
+
    max-height: 60%;
+
    max-width: 90%;
+
    opacity: 1;
+
    margin: auto;
+
    display: block;
+
    margin-top: 15px;
+
}
+
 
+
.image.lightbox>p {
+
    color: white;
+
    background: none;
+
    -webkit-text-fill-color: white;
+
}
+
 
+
.interview-response {
+
    color: #777;
+
    padding-left: 15px;
+
}
+
 
+
.definition {
+
    text-decoration: none;
+
    border-bottom: 1px dotted #00B9E7;
+
    color: black;
+
}
+
 
+
.definition:hover, .definition:focus {
+
    text-decoration: none;
+
    color: #00B9E7
+
}
+
 
+
.popover {
+
}
+
 
+
.popover-title {
+
    border-radius: 0;
+
    color: #00B9E7;
+
    width: 100%;
+
    font-size: 2em;
+
    text-align: center;
+
}
+
 
+
.popover-content {
+
    font-family: "Avenir", sans-serif;
+
    font-size: 1em;
+
    overflow: auto;
+
    max-height: 200px;
+
}
+
 
+
.popover.right>.arrow::after{
+
    border-right-color: #00B9E7;
+
}
+
 
+
.popover.bottom>.arrow::after {
+
    border-bottom-color: #00B9E7;
+
}
+
 
+
.popover.left>.arrow::after {
+
    border-left-color: #00B9E7;
+
}
+
 
+
#notebook-key-button {
+
    position: fixed;
+
    right: 25%;
+
    bottom: 0;
+
    background-color: #2800D7;
+
    margin-bottom: 15px;
+
    height: 35px;
+
}
+
 
+
#notebook-key-button.affix-bottom {
+
    position: absolute;
+
    right:0;
+
    bottom:0;
+
    margin-right: 0;
+
}
+
 
+
#notebook-key-button.active {
+
    background-color: #14006C;
+
}
+
 
+
#notebook-key-button h3 {
+
    font-size: 15px;
+
    margin-top: 10px;
+
    margin-bottom: 10px;
+
    padding: 0;
+
    padding-right: 25px;
+
    padding-left: 25px;
+
    display: block;
+
    color: white;
+
    font-weight: 200;
+
 
+
}
+
 
+
#notebook-key {
+
    position: fixed;
+
    width: 500px;
+
    z-index: 1000000;
+
    right: 25%;
+
    bottom: 50px;
+
    margin-bottom: 5px;
+
    overflow: auto;
+
    display: none;
+
    background-color: white;
+
    padding: 15px;
+
    border: 1px solid rgba(0,0,0,.2);
+
}
+
 
+
#notebook-key h2 {
+
    background-color: #f7f7f7;
+
    margin-top: -15px;
+
    padding-top: 15px;
+
    margin-left: -15px;
+
    margin-right: -15px;
+
    padding-bottom: 5px;
+
    font-size: 2em;
+
    border-bottom: 1px solid #ebebeb;
+
    color: #00B9E7;
+
}
+
 
+
.notebook-key-content {
+
    height: 65vh;
+
    overflow: auto;
+
    padding: 15px;
+
}
+
 
+
#notebook-key .list-of-parts {
+
    margin-left: 30px;
+
}
+
 
+
#notebook-key strong {
+
    color: #00B9E7;
+
}
+
 
+
#notebook-key.active {
+
    display: block;
+
}
+
 
+
.next-section-btn {
+
    position: absolute;
+
    bottom: 0;
+
    left: 0;
+
    right: 0;
+
    margin: auto;
+
    width: 50px;
+
    background-color: white;
+
    border: 3px solid #000;
+
    display: none;
+
}
+
 
+
#project-description-btn {
+
    font-family: "Avenir";
+
    position: absolute;
+
    bottom: 0;
+
    left: 0;
+
    right: 0;
+
    margin: auto;
+
    background-color: white;
+
    border: 3px solid #000;
+
    color: black;
+
    display: inline-block;
+
    padding-left: 5px;
+
    padding-right: 5px;
+
    text-align: center;
+
    margin-top: 30px;
+
    width: 275px;
+
}
+
 
+
#project-description-btn:hover {
+
    color: white;
+
    background-color: black;
+
    text-decoration: none;
+
}
+
 
+
.next-section-btn:hover {
+
    background-color: black;
+
    color: white;
+
}
+
 
+
.info-container {
+
    position: relative;
+
}
+
 
+
.info-container img {
+
    width: 100%;
+
    max-width: 850px;
+
    margin: auto;
+
    display: block;
+
}
+
.image-massive {
+
    margin-left:-15px;
+
    position: relative;
+
    z-index: 100;
+
}
+
 
+
video.image-massive {
+
    width:10vw;
+
}
+
.image-massive img {
+
    width: 100vw;
+
}
+
 
+
.dropdown:hover .dropdown-menu {
+
display: block;
+
}
+
 
+
@media (max-width: 992px) {
+
    .contents-sidebar {
+
        display: none;
+
    }
+
 
+
    #notebook-key-button {
+
        right: 15px;
+
        bottom: 0px;
+
    }
+
 
+
    #notebook-key-button.affix-bottom {
+
        right:15px;
+
    }
+
 
+
    #notebook-key {
+
        right:0px;
+
    }
+
}
+
 
+
@media (max-width: 480px) {
+
    #notebook-key {
+
        top: 67.3px;
+
        right: 0px;
+
        left: 0px;
+
        width: 100vw;
+
        border-radius: 0;
+
        bottom: 50px;
+
        height: auto;
+
    }
+
    #title img {
+
        width: 250px;
+
    }
+
}
+
 
+
@media (min-width: 1225px) {
+
    .image-left, .quote-left {
+
        width: 33vw;
+
        margin-left: -50px;
+
    }
+
 
+
    .image-right, .quote-right {
+
        width: 33vw;
+
        margin-right: -50px;
+
    }
+
 
+
    .image.image-right.lightbox, .image.image-left.lightbox {
+
        margin: 0;
+
    }
+
 
+
    .quote-left, .quote-right {
+
        max-width: 200px;
+
    }
+
}
+
 
+
@media (min-width: 1500px) {
+
    .image-left, .quote-left {
+
        margin-left: -50px;
+
    }
+
    .image-right, .quote-right {
+
        margin-right: -50px;
+
    }
+
    .image.image-right.lightbox, .image.image-left.lightbox {
+
        margin: 0;
+
    }
+
    .quote-left, .quote-right {
+
        max-width: 200px;
+
    }
+
}
+

Revision as of 09:13, 16 September 2015

Modelling Tutorials

Introduction

On this page we aim to explain the concepts and methodology behind the modelling we have done in our project. We hope this will make our modelling section more accessible for all members of the iGEM community.

Gene Expression Networks

Mass Action

Our goal is to model a system of reactions such as the reversible reaction

\[A \mathrel{\mathop{\rightleftharpoons}^{\mathrm{k_{+}}}_{\mathrm{k_{-}}}} B\]

Where \(A\) and \(B\) are our two species and \(k_{+}\) and \(k_{-}\) will be determined shortly. To do this, we make the intuitive assumption that the rate at which something reacts is proportional to how much of it we've got. That is, the rate of change of \(B\) with time is

\[\dfrac{dB}{dt}=k_{+}A\]

where \(k_{+}\) is simply a proportionality constant. This assumption is called the law of mass action. This of course is not the complete picture, as we forgot to include the fact that \(B\) can react back to form \(A\). So the complete system of equations to solve is

\[\dfrac{dA}{dt}=k_{-}B-k_{+}A\] \[\dfrac{dB}{dt}=k_{+}A-k_{-}B\]

At this point, you can type these into your favourite computing program and solve them.

Michaelis-Menten Kinetics

It is possible to formulate a rate law that describes enzyme-catalysed reactions, this is known as Michaelis-Menten kinetics. In order to derive this rate law we will look at a generalised system of chemical events detailed below:

\[S + E\mathop{\rightleftharpoons}C_{1}\mathop{\rightleftharpoons}C_{2}\mathop{\rightleftharpoons}P + E\]

In this system \(S\) represents our substrate, \(E\) our enzyme, \(C_{1}\) our enzyme-substrate complex, \(C_{2}\) our enzyme-product complex, and \(P\) our product.

Initially we will make two simplifications. Firstly, we will combine \(C_{1}\) and C2 into a single complex, \(C\), as we will assume that the time-scale of the conversion \(C_{1}\mathop{\rightleftharpoons}C_{2}\) is much faster than that of the association and dissociation events. Secondly, we will assume that the product never binds with the free enzyme. These two assumptions lead to the simplified network:

\[S + E\mathrel{\mathop{\rightleftharpoons}^{k_{1}}_{k_{-1}}}C\mathop{\rightarrow}^{k_{2}}P + E\]

Using the laws of mass action (detailed above) we arrive at the following differential equation model:

\[\dfrac{d}{dt}s(t)=-k_{1}s(t)e(t) + k_{-1}c(t)\] \[\dfrac{d}{dt}e(t)=k_{-1}c(t) - k_{1}s(t)e(t) + k_{2}c(t)\] \[\dfrac{d}{dt}c(t)=-k_{-1}c(t) + k_{1}s(t)e(t) - k_{2}c(t)\] \[\dfrac{d}{dt}p(t) = k_{2}c(t)\]

Concentrations are denoted as the lowercase letter eg the concentration of \(S\) is given by \(s\).

You may have spotted that the enzyme is not consumed in this series of reactions. Therefore the total amount of enzyme remains constant. We reflect this in the expression \(e_{T}=e+c\). We can now use this expression to eliminate \(e(t)\) from our model, leaving:

\[\dfrac{d}{dt}s(t)=-k_{1}s(t)(e_{T}-c(t)) + k_{-1}c(t)\] \[\dfrac{d}{dt}c(t)=-k_{-1}c(t) + k_{1}s(t)(e_{T}-c(t)) - k_{2}c(t)\] \[\dfrac{d}{dt}p(t) = k_{2}c(t)\]

We have one further simplification to make. This is the rapid equilibrium approximation, by which we assume that equilibrium between \(s+e\) and \(c\) on a much faster time scale than the reaction of \(c\) to \(p\). With this approximation we can write the following equation:

\[0=-k_{-1}c(t) + k_{1}s(t)(e_{T}-c(t)) - k_{2}c(t)\]

Leading to:

\[c^{*}(t)= \dfrac{k_{1}s(t)e_{T}}{k_{-1} + k_{2} + k_{1}s(t)}\]

Now we can see that \(c\) is no longer an independent variable, but instead tracks the other variables. This can be referred to as \(c\) being in quasi-steady state. By including this new expression into our model we are left with:

\[\dfrac{d}{dt}s(t) = -\dfrac{k_{2}k_{1}s(t)e_{T}}{k_{-1} + k_{2} + k_{1}s(t)}\] \[\dfrac{d}{dt}p(t) = \dfrac{k_{2}k_{1}s(t)e_{T}}{k_{-1} + k_{2} + k_{1}s(t)}\]

With this we have an expression describing our enzyme catalysed system in the form of a single reaction. The rate of this reaction is known as a Michaelis-Menten rate law. By defining \(K_{max}=k_{2}e_{T}\) and \(K_{half}=\dfrac{k_{-1}+k_{2}}{k_{1}}\) we can express in the more familiar form:

\[rate \: of \: S \mathop{\rightarrow} P = K_{max}\dfrac{s}{K_{half} + s}\]

It is worth noting that there are a number of ways to derive this form, each involving different approximations. These methods may lead to the constants \(K_{max}\) and \(K_{half}\) being defined differently.

Stochastic

The simplest way to add an element of 'randomness' into an equation is to add a random term into the differential equation. This turns it into a stochastic differential equation, such as:

\[\dfrac{dx}{dt}=c+r\]

which determines the evolution of a particle travelling at a speed \(c\), with a random number \(r\) added into the mix just for fun. We choose \(r\) to be normally distributed with a mean value of 0 and a variance of, say, 1. We evaluate the position of the particle at multiple timesteps (with some small time \(dt\) separating them) and plot our solution in the Figure below.

We can do better than this when dealing with systems such as our example in the previous section. We use the Gillespie algorithm to find:

  1. The time taken between reactions
  2. The reaction that took place in that time.

as neither of these could be determined by our initial method [2, 4].

1) To find the time taken, we make an assumption about the form of the probability distribution that the time between reactions holds. It makes sense to think of it as a falling exponential, such that reactions more often happen quickly rather than slowly, and that the more probable a reaction is, the shorter the time between subsequent reactions. This naturally leads to the form

\[P(t)=e^{-\alpha_{0}t}\]

where \(P(t)\) is the probability of any reaction occuring in time \(t\), and \(\alpha_{0}\) tells us something about the likelihood of the reaction. We plot this in the Figure. In fact we call \(\alpha_{0}\) the sum of the propensities \(\alpha_{i}\) (where the dummy variable \(i\) runs from 1 to the number of possible reactions, \(N\), that could occur). In the case of our example system, the propensity for the reaction \(A\) to \(B\) would be \(k_{+}A\) and the propensity for the reaction \(B\) to \(A\) is \(k_{-}B\) so in this case \(\alpha_{0}=k_{+}A+k_{-}B\).

To decide the time it took for a reaction to occur, we sample a random number \(r_{1}\) in the range [0,1] and stick that number on the y axis of the graph. We read off from our graph a corresponding time and we're done - we now know when the next reaction took place.

2) To decide which reaction took place, we need the probabilities of each reaction occuring being proportional to the ratio of their propensities. We split up the domain of 0 to 1 into the normalised ratios of the propensities of our problem, recalling the propensities we calculated. We could have, in this case, selected the backwards reaction B to A. We can generalise this to the form given in the Gillespie Algorithm above.