Team:Groningen/Modelling/Characterization

From 2009.igem.org

(Difference between revisions)
m
m ({{anchor|Optimization}}Optimization procedure)
 
(42 intermediate revisions not shown)
Line 1: Line 1:
{{Team:Groningen/Modelling/Header}}
{{Team:Groningen/Modelling/Header}}
 +
<div style="float:left" >{{linkedImage|GroningenPrevious.png|Team:Groningen/Modelling/Arsenic}}</div>
-
{{todo|TODO: Talk about the devices we have and in what way we want to characterize them.}}
+
<div title="Arsie Says UP TO ACCUMULATION" style="float:right" >{{linkedImage|Next.JPG|Team:Groningen/Modelling/Downloads}}</div>
 +
 
 +
<div style="clear:both;"></div>
 +
 
 +
<html><style type="text/css">
 +
.intro { margin-left:0px; margin-top:10px; padding:10px; border-left:solid 5px #FFF6D5; border-right:solid 5px #FFF6D5; text-align:justify;background:#FFFFE5; }
 +
</style></html>
 +
<div class="intro introduction">
 +
==Characterization==
 +
We have four kinds of parts we would like to characterize: Importers, Accumulators, Sensors and the GVP cluster.
 +
For this we have a number of methods to estimate ''specific parameters'' (detailed below), as well as a ''[[Team:Groningen/Modelling/Characterization#Optimization|stochastic tool to fit our model]]'' to experimental data based on simulated annealing.
 +
</div>
 +
 
 +
We have the following parts that we can characterize (RPS stands for Relative Promoter Strength)
 +
{|class="ourtable"
 +
|-style="text-align:left"
 +
!style="width:15%" style="text-align:left"|&nbsp;&nbsp;&nbsp;&nbsp; Input/Output
 +
!style="text-align:left"|Subject
 +
|-
 +
|||!style="width:15%" style="text-align:left"|'''Importers'''
 +
|-
 +
|&nbsp;&nbsp;&nbsp;&nbsp; RPS &rarr; &Delta;v<sub>max</sub> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 +
|
 +
We can measure how much v5 (v<sub>max</sub> for As(III) import via GlpF) is in wild-type E.coli and when we over express GlpF at a certain promoter strength <code>S</code> (measured in RPUs). As v5 is a constant times the amount of (active) GlpF this leads to a simple equation for &Delta;v5, if we assume the amount of (active) GlpF produced by our construct is linearly dependent on the promoter strength (v5(0) and v5(1) would be measured):
 +
 
 +
<pre>
 +
v5(RPS) = v5wt + &Delta;v5*RPS
 +
 
 +
v5(0) = v5wt + &Delta;v5*0
 +
v5(S) = v5wt + &Delta;v5*S
 +
 
 +
&Delta;v5 = (v5(1) - v5(0))/S
 +
</pre>
 +
[[Team:Groningen/Literature#Meng2004|Meng 2004]] was able to knock out all efflux of arsenic. If there is no efflux of arsenic the dervative of the accumulation graph is the speed at wich arsenic is pumped inside the cell. The maximum speed would be v5. In such a senario two measurements would be enough to determine the relative promoter strength. One could even determine the reaction rate k6 and GlpF with a simple calculation, since v5 = k6 GlpFT (Vs/Vc). However we do have efflux, not only do we have efflux, but we have efflux that is dependent on the total amount of arsenic inside the cell. Also a portion arsenic gets bound to ArsR.
 +
|-
 +
|||!style="width:15%" style="text-align:left"|'''Accumulators'''
 +
|-
 +
|&nbsp;&nbsp;&nbsp;&nbsp; RPS &rarr; As<sub>bound</sub>(As(III)<sub>in</sub>)
 +
|
 +
For both MBPArsR and fMT we assume the amount of bound As(III) for a given relative promoter strength S obeys (for MBPArsR n=1):
 +
<pre>
 +
Asbound(As(III)in)
 +
= S Bmax As(III)in^n
 +
    / (K^n + As(III)in^n)
 +
</pre>
 +
The constants B<sub>max</sub>, K and n can be determined from uptake experiments comparing E. coli with and without fMT expression. Of course this can be done in general by fitting our model to experimental data, if enough data is provided the fit will be tight enough to allow this. However, even without fitting the full model it should be possible to make a fair estimation from equilibrium measurements.{{infoBox|If the total cell volume is much smaller than the volume of the solution it is reasonable to assume a constant import rate. Also, regardless of whether they feature fMT or not, in equilibrium the amount of ArsR is the same, as is the amount of ArsB, leading to the same amount of unbound arsenic being present. This means that any difference in uptake of arsenic is completely due to arsenic being bound to fMT or MBPArsR. By measuring the amount of arsenic in equilibrium in wild-type cells as well as in cells expressing fMT/MBPArsR for several different (inital) concentrations of As(III), at one or more (known) levels of expression, it is possible to determine the constants Bmax, K and n.}}
 +
|-
 +
|||!style="width:15%" style="text-align:left"|'''Sensors'''
 +
|-
 +
|&nbsp;&nbsp;&nbsp;&nbsp; metal(t) &rarr; RPS(t)
 +
|
 +
The ars promoter is part of a feedback loop, so it is not a simple matter of defining the (instantaneous) promoter strength. Instead we suggest using the relevant equations from [[Team:Groningen/Modelling/Arsenic|our model]]. The necessary parameters can be determined by fitting uptake measurement data to our model. Specifically, if the RPS is measured without arsenic present and with enough arsenic present to keep the promoter fully active during the experiment we can determine <code>&beta;RN &tau;R</code> as follows (under the assumption that the RPS is linearly dependent on arsT/ars and using the fact that without any arsenic present the cells will be in equilibrium):
 +
<pre>
 +
S(max) / S(0) = ars(max) / ars(0)
 +
S(max) / S(0) = arsT / ars(0)
 +
S(max) / S(0) = 1 + ArsR(0)²/KAd²
 +
      ArsR(0) = KAd &radic;(S(max)/S(0) - 1)
 +
 
 +
0 = &beta;RN ars1(0) - (ln(2)/&tau;R) ArsR(0)
 +
0 = &beta;RN ars1T S(0)/S(max)
 +
    - (ln(2)/&tau;R) KAd &radic;(S(max)/S(0) - 1)
 +
&beta;RN ars1T S(0)/S(max)
 +
= (ln(2)/&tau;R) KAd &radic;(S(max)/S(0) - 1)
 +
&beta;RN &tau;R = (ln(2)/ars1T) KAd
 +
  (S(max)/S(0)) &radic;(S(max)/S(0) - 1)
 +
</pre>
 +
|-
 +
|||!style="width:15%" style="text-align:left"|'''GVP cluster'''
 +
|-
 +
|&nbsp;&nbsp;&nbsp;&nbsp; RPS &rarr; GV
 +
|
 +
RPS &rarr; GV
 +
The amount of gas vesicles can be expressed in terms of buoyant density, as volume fraction, using the total mass of the vesicles, etc. No matter how it is expressed, we assume a simple linear dependency between the RPS and the amount of gas vesicles. By taking (T)EM pictures of slices the amount of gas vesicles formed under influence of different RPSes can be determined and a straightforward fit made.
 +
|-
 +
|}
==Uptake measurements==
==Uptake measurements==
Line 51: Line 126:
|x
|x
|}
|}
-
To efficiently look at both time and concentration dependent processes we took samples as in the table on the right.
 
-
Below we list all results, which have been used for fitting all necessary parameters.
 
-
{{todo|TODO: List results. Take conversion from nmol/mg and mg/ml to &micro;M and Vc/Vs into account.}}
+
To obtain data for the optimization procedure described above we conducted ICP-MS measurements on our cells containing various devices/parts. To optimize our findings we have conducted measurements both in time and in concentration.
 +
Details on ICP-MS the experiments can be found on our [[Team:Groningen/Protocols|Protocol Page]]. Measurements have been conducted at times and concentrations as indicated in the table on the right. Results can be seen below.
 +
 
 +
'''First Uptake Measurement'''<br>
 +
In this case we looked at the arsenic uptake of our wildtype and of our wildtype with a lot of pArs promoters with RFP. The raw data can be found at our [[Team:Groningen/Modelling/Downloads| Download Section]]
 +
{|
 +
|[[Image:AsUptakeWildTypeConcentration.png|400px]]||[[Image:AsUptakePArsRFPConcentration.png|400px]]
 +
|-
 +
|[[Image:AsUptakeWildTypeTime.png|400px]]||[[Image:AsUptakePArsRFPTime.png|400px]]
 +
|-
 +
|}
 +
 
 +
'''Getting (Vc/Vs) and other conditions'''<br>
 +
To effectively determine our constants we need to give our model some extra information. For instance what kind of constructs are inside the cel for a given experiment. Also we need to give the model the volume of cells per liter of fluid. To optain this we use the obtained dry weight and calculate how much wet weight it would have been (assuming dry weight/wet weight = 0.3) and then use the density of ''E. coli'' (1100kg/m<sup>3</sup>) to obtain the cell volume for our sample and eventually the desired volume of cells per liter.
 +
Also we need the absolute value of Arsenic taken up by the cells in the assumption that we have one liter of sample and we know (Vc/Vs). Once we know all these parameters the optimization procedure can start.
 +
 
 +
'''Fluorescence Measurements'''<br>
 +
Apart from giving our model all the conditions it needs to calculate all the constants by means of the optimization procedure, we have also conducted some fluorescence measurements and made growth curves of our construct with the pArs promoter with RFP. The cells where put into a solution with either no arsenic in it or at a concentration of 100 micromolair. On the left side one can see the graph of the luminance and on right side and on the right side one can see the coresponding grow curves. The raw data of these measurements can again be found under our  [[Team:Groningen/Modelling/Downloads|Downloads]]
 +
{|
 +
|[[Image:ArsFluorescence.png|400px]]||[[Image:ArsOD.png|400px]]
 +
|-
 +
|}
 +
Using a formula similar to the formula below{{infoBox|In actuality we did not compute the derivative of the fluorescence and then corrected for the OD, instead we first computed the fluorescence normalized for the OD (correlates with RFP per cell) and then fitted a linear function to the data. This leads to a much more robust fit in the presence of noise and few measurements.}} we where able to derive a RPU of 2.3. This means that on average the ars promoter is 2.3 times more active at 100 micromolarity of arsenic (outside the cell) than if there is no arsenic in the solution. For a detailed calculation I would like to refer to our [[Team:Groningen/Modelling/Downloads|Downloads]] section under the RPU sheet.
 +
{|style=float:center;
 +
|[[Image:RPUcalculation.png|300px]]
 +
|}
 +
 
 +
'''Second ICPMS measurement'''
 +
For our second measurement I would like to refer to our [[Team:Groningen/Project/Accumulation|Accumulation]] page. These measerments where higher than expected and they need further analyses before we can use them in tha characterization of our parts.
 +
 
 +
=={{anchor|Optimization}}Optimization procedure==
 +
To fit our model to experimental data from different uptake experiments and/or papers we have implemented an optimization procedure that allows for experiments with different genotypes and circumstances by letting constants be overridden per experiment. It aims to optimize the sum of the RMS errors for each experiment using Simulated Annealing. By clicking the button "Fit" the optimization is started and its progress can be followed by looking at the table of constants and the graphs shown below the table (which are updated in real-time as the best solution is improved). In the optimizations procedure the ratio between v5 and K5 is kept constant. This is done because this ratio could be determined exactly using the data from the experiments done by [[Team:Groningen/Literature#Meng2004|Meng 2004]] v5 itself is not fixed and may vary. (Note that in the code different experiments and graphs can be enabled/disabled, we have entered data from Kostal, Meng and our first ICP-MS measurements.)
{|
{|
Line 99: Line 203:
|id="K7sol"|
|id="K7sol"|
|-
|-
-
|tauBbeta4
+
|tauBbetaB
|id="tauBbeta4"|
|id="tauBbeta4"|
|id="tauBbeta4cur"|
|id="tauBbeta4cur"|
Line 111: Line 215:
|id="tauBsol"|
|id="tauBsol"|
|-
|-
-
|beta4
+
|betaB
|id="beta4"|
|id="beta4"|
|id="beta4cur"|
|id="beta4cur"|
Line 123: Line 227:
|id="tauRsol"|
|id="tauRsol"|
|-
|-
-
|beta1
+
|betaRN
|id="beta1"|
|id="beta1"|
|id="beta1cur"|
|id="beta1cur"|
Line 182: Line 286:
|id="beta5curgradient"|
|id="beta5curgradient"|
|id="beta5sol"|
|id="beta5sol"|
 +
|-
 +
|ars2T
 +
|id="ars2T"|
 +
|id="ars2Tcur"|
 +
|id="ars2Tcurgradient"|
 +
|id="ars2Tsol"|
|-
|-
|E
|E
Line 194: Line 304:
<script type="text/javascript" src="/Team:Groningen/Modelling/Model.js?action=raw"></script>
<script type="text/javascript" src="/Team:Groningen/Modelling/Model.js?action=raw"></script>
<script type="text/javascript">
<script type="text/javascript">
-
var experiments = {Meng2004:
+
var experiments = {/*Meng2004:
                   {constants:{Vc:0.0073,Vs:(1.1-0.0073),beta4:0,pro:0,ars2T:0},AsT:10e-6,
                   {constants:{Vc:0.0073,Vs:(1.1-0.0073),beta4:0,pro:0,ars2T:0},AsT:10e-6,
                     data:{AsinT:[101.917808219178e-6,394.520547945205e-6,723.287671232877e-6,
                     data:{AsinT:[101.917808219178e-6,394.520547945205e-6,723.287671232877e-6,
Line 206: Line 316:
                           time:[1.127*60,4.993*60,9.986*60,20.159*60,30.181*60,60.035*60]}},
                           time:[1.127*60,4.993*60,9.986*60,20.159*60,30.181*60,60.035*60]}},
                   Kostal2004fig3A:  //  fig 3A
                   Kostal2004fig3A:  //  fig 3A
-
                   {constants:{Vc:0.006666667,Vs:(1-0.006666667),beta4:0,pro:0,ars2T:0},time:Infinity,
+
                   {constants:{Vc:0.006666667,Vs:(1-0.006666667),pro:0,ars2T:0,proK:1.6605e-9},time:3600,
                     data:{AsinT:[28.71e-6,78.87e-6,144.21e-6,377.19e-6,490.38e-6,617.76e-6,649.11e-6],
                     data:{AsinT:[28.71e-6,78.87e-6,144.21e-6,377.19e-6,490.38e-6,617.76e-6,649.11e-6],
                           AsT:[0.4e-6,1e-6,2e-6,5e-6,20e-6,50e-6,100e-6]}},
                           AsT:[0.4e-6,1e-6,2e-6,5e-6,20e-6,50e-6,100e-6]}},
Line 212: Line 322:
                   {constants:{Vc:0.006666667,Vs:(1-0.006666667),pro:0,ars2T:0,proK:1.6605e-9},AsT:20e-6,
                   {constants:{Vc:0.006666667,Vs:(1-0.006666667),pro:0,ars2T:0,proK:1.6605e-9},AsT:20e-6,
                     data:{AsinT:[2.25e-4,3.47e-4,4.19e-4,3.93e-4,4.19e-4,4.82e-4,4.82e-4,4.95e-4],
                     data:{AsinT:[2.25e-4,3.47e-4,4.19e-4,3.93e-4,4.19e-4,4.82e-4,4.82e-4,4.95e-4],
-
                           time:[582,1212,1890,2514,3144,3828,4260,6036]}},
+
                           time:[582,1212,1890,2514,3144,3828,4260,6036]}},*/
                   pSB1A2con:    //  concentration mode this is our first icps measerment wild type
                   pSB1A2con:    //  concentration mode this is our first icps measerment wild type
-
                   {constants:{Vc:0.000808081,Vs:(1-0.000808081),pro:0,ars2T:0},time:Infinity,
+
                   {constants:{Vc:0.000808081,Vs:(1-0.000808081),pro:0,ars2T:0},time:3600,
                     data:{AsinT:[207.0208222e-6,229.0443139e-6,493.3262146e-6,585.8248799e-6],
                     data:{AsinT:[207.0208222e-6,229.0443139e-6,493.3262146e-6,585.8248799e-6],
                           AsT:[10e-6,20e-6,50e-6,100e-6]}},
                           AsT:[10e-6,20e-6,50e-6,100e-6]}},
Line 220: Line 330:
                   {constants:{Vc:0.002320346,Vs:(1-0.002320346),pro:0,ars2T:0},AsT:10e-6,
                   {constants:{Vc:0.002320346,Vs:(1-0.002320346),pro:0,ars2T:0},AsT:10e-6,
                     data:{AsinT:[66.07047517e-6,83.68926855e-6,114.522157e-6,132.1409503e-6,207.0208222e-6],
                     data:{AsinT:[66.07047517e-6,83.68926855e-6,114.522157e-6,132.1409503e-6,207.0208222e-6],
-
                           time:[180,600,1200,2400,3600]}},
+
                           time:[180,600,1200,2400,3600]}}/*,
-
                   pArsRRFPcon: // here the cell only contains extra RFP behind the the extra ArsR promotors.
+
                   pArsRRFPcon: // here the cell only contains extra RFP behind the the extra ArsR promoters.
                                 //    We incorporate this in our model by pretending RFP=GVP (1st icps)
                                 //    We incorporate this in our model by pretending RFP=GVP (1st icps)
-
                   {constants:{Vc:0.001272727,Vs:(1-0.001272727),pro:0},time:Infinity,
+
                   {constants:{Vc:0.001272727,Vs:(1-0.001272727),pro:0},time:3600,
-
                     data:{AsinT:[136.5456487e-6,77.4959957e-6,290.7100908e-6,343.5664709e-6],
+
                     data:{AsinT:[136.5456487e-6,277.4959957e-6,290.7100908e-6,343.5664709e-6],
                           AsT:[10e-6,20e-6,50e-6,100e-6]}},
                           AsT:[10e-6,20e-6,50e-6,100e-6]}},
-
                   pArsRRFPtime:  // here the cell only contains extra RFP behind the the extra ArsR promotors.
+
                   pArsRRFPtime:  // here the cell only contains extra RFP behind the the extra ArsR promoters.
                                   // We incorporate this in our model by pretending RFP=GVP (1st icps)
                                   // We incorporate this in our model by pretending RFP=GVP (1st icps)
                   {constants:{Vc:0.003333333,Vs:(1-0.003333333),pro:0},AsT:10e-6,
                   {constants:{Vc:0.003333333,Vs:(1-0.003333333),pro:0},AsT:10e-6,
                     data:{AsinT:[52.85638014e-6,92.49866524e-6,88.0939669e-6,136.5456487e-6],
                     data:{AsinT:[52.85638014e-6,92.49866524e-6,88.0939669e-6,136.5456487e-6],
-
                           time:[180,600,2400,3600]}}};   
+
                           time:[180,600,2400,3600]}}*/};   
-
var varsToMutate = ['v5_K5','v5','k8_K7','k8','tauBbeta4','beta4','tauR_tauB','beta1_beta4'/*,'tauFbetaF','betaF',
+
/*var varsToMutate = ['K5','v5','K7','k8','tauB','beta4','tauR','beta1','tauF','betaF',
-
                     'tauKbetaK','betaK','tauGbeta5','beta5'*/];
+
                     'tauK','betaK','tauG','beta5'];
var mutateFuncs = {v5: function(v){return v.v5;},
var mutateFuncs = {v5: function(v){return v.v5;},
-
                   K5: function(v){return v.v5/v.v5_K5;},
+
                   K5: function(v){return v.K5;},
 +
                  k8: function(v){return v.k8;},
 +
                  K7: function(v){return v.K7;},
 +
                  tauB: function(v){return v.tauB;},
 +
                  tauR: function(v){return v.tauR;},
 +
                  beta4: function(v){return v.beta4;},
 +
                  beta1: function(v){return v.beta1;},
 +
                  tauF: function(v){return v.tauF;},
 +
                  betaF: function(v){return v.betaF;},
 +
                  tauK: function(v){return v.tauK;},
 +
                  betaK: function(v){return v.betaK;},
 +
                  tauG: function(v){return v.tauG;},
 +
                  beta5: function(v){return v.beta5;}};*/
 +
 
 +
var varsToMutate = [/*'v5_K5',*/'v5','k8_K7','k8','tauBbeta4','beta4',
 +
                    'tauRbeta1_tauBbeta4','beta1_beta4'/*,'tauFbetaF','betaF',
 +
                    'tauKbetaK','betaK','tauGbeta5','beta5','tauF','betaF','tauK','betaK','tauG','beta5','ars2T'*/];
 +
var mutateFuncs = {v5: function(v){return v.v5;},
 +
                  K5: function(v){return v.v5/0.11495;},
                   k8: function(v){return v.k8;},
                   k8: function(v){return v.k8;},
                   K7: function(v){return v.k8/v.k8_K7;},
                   K7: function(v){return v.k8/v.k8_K7;},
                   tauB: function(v){return v.tauBbeta4/v.beta4;},
                   tauB: function(v){return v.tauBbeta4/v.beta4;},
-
                  tauR: function(v){return v.tauR_tauB*v.tauBbeta4/v.beta4;},
 
                   beta4: function(v){return v.beta4;},
                   beta4: function(v){return v.beta4;},
 +
                  tauR: function(v){return v.tauRbeta1_tauBbeta4*v.tauBbeta4/(v.beta4*v.beta1_beta4);},
                   beta1: function(v){return v.beta4*v.beta1_beta4;}/*,
                   beta1: function(v){return v.beta4*v.beta1_beta4;}/*,
 +
                  //tauF: function(v){return v.tauF;},
 +
                  //betaF: function(v){return v.betaF;},
 +
                  //tauK: function(v){return v.tauK;},
 +
                  //betaK: function(v){return v.betaK;},
 +
                  //tauG: function(v){return v.tauG;},
 +
                  //ars2T: function(v){return v.ars2T;},
 +
                  //beta5: function(v){return v.beta5;},
                   tauF: function(v){return v.tauFbetaF/v.betaF;},
                   tauF: function(v){return v.tauFbetaF/v.betaF;},
                   betaF: function(v){return v.betaF;},
                   betaF: function(v){return v.betaF;},
Line 267: Line 402:
       xt = simulate(x0,e[i].data.time,function(t,d){return arsenicModelGradient(nc,d);});
       xt = simulate(x0,e[i].data.time,function(t,d){return arsenicModelGradient(nc,d);});
-
       // Sum (squares of) errors, divided by the average value
+
       // Sum of (squares of) errors, divided by the average value
       var curcost = 0, n = 0;
       var curcost = 0, n = 0;
       for(var xn in e[i].data) {
       for(var xn in e[i].data) {
Line 304: Line 439:
         }
         }
-
         // Sum (squares of) errors, divided by the average value
+
         // Sum of (squares of) errors, divided by the average value
         for(var xn in e[i].data) {
         for(var xn in e[i].data) {
           if (xn=='AsT') continue;
           if (xn=='AsT') continue;
           curcost += Math.pow((e[i].data[xn][j]-xt[xn])/avgv[xn],2);
           curcost += Math.pow((e[i].data[xn][j]-xt[xn])/avgv[xn],2);
 +
          n++;
 +
        }
 +
      }
 +
      cost += Math.sqrt(curcost/n); // Compute the square root of the average of the squares (RMS)
 +
      weight++;
 +
      e[i].solution.cost = Math.sqrt(curcost/n);
 +
    } else if (!isNaN(e[i].time)) { // Vary AsT, with t = e[i].time
 +
      var avgv = {};
 +
      for(var xn in e[i].data) {
 +
        avgv[xn] = 0;
 +
        for(var j in e[i].data[xn]) avgv[xn] += e[i].data[xn][j];
 +
        avgv[xn] /= e[i].data[xn].length;
 +
      }
 +
      e[i].solution = {'xt':{'AsT':[]}};
 +
      var curcost = 0, n = 0;
 +
      for(var j in e[i].data.AsT) {
 +
        // Simulate
 +
        x0 = arsenicModelInitialization(nc,e[i].data.AsT[j]);
 +
        xt = simulate(x0,e[i].time,function(t,d){return arsenicModelGradient(nc,d);});
 +
        e[i].solution.xt.AsT[j] = e[i].data.AsT[j];
 +
 +
        // Fill solution
 +
        for(var xn in xt) {
 +
          if (e[i].solution.xt[xn]==undefined) e[i].solution.xt[xn] = [];
 +
          e[i].solution.xt[xn][j] = xt[xn][xt[xn].length-1];
 +
        }
 +
 +
        // Sum of (squares of) errors, divided by the average value
 +
        for(var xn in e[i].data) {
 +
          if (xn=='AsT') continue;
 +
          curcost += Math.pow((e[i].data[xn][j]-xt[xn][xt[xn].length-1])/avgv[xn],2);
           n++;
           n++;
         }
         }
Line 343: Line 509:
function fitConstants() {
function fitConstants() {
   // Construct plots
   // Construct plots
-
   constructPlot('v5K5plot');
+
   //constructPlot('v5K5plot');
   constructPlot('k8K7plot');
   constructPlot('k8K7plot');
Line 350: Line 516:
   var cSol = {};
   var cSol = {};
   for(var i in varsToMutate) cSol[varsToMutate[i]] = 1;
   for(var i in varsToMutate) cSol[varsToMutate[i]] = 1;
-
   cSol.v5_K5 = orgC.v5/orgC.K5;
+
   //cSol.v5_K5 = orgC.v5/orgC.K5;
-
   cSol.v5 = orgC.v5;
+
   cSol.v5 = orgC.v5*2;
-
   cSol.k8 = 1000;
+
   cSol.k8 = 10;
-
   cSol.k8_K7 = 1e6;
+
   cSol.k8_K7 = 2e5;
 +
  cSol.tauBbeta4 = 55;
 +
  cSol.beta4 = 18;
 +
  cSol.tauRbeta1_tauBbeta4 = 400;
 +
  cSol.beta1_beta4 = 2;
//  cSol.tauBbeta4 = 180000;
//  cSol.tauBbeta4 = 180000;
//  cSol.tauB = 180;
//  cSol.tauB = 180;
Line 373: Line 543:
   var c = {};
   var c = {};
   for(var i in varsToMutate) c[varsToMutate[i]] = 1;
   for(var i in varsToMutate) c[varsToMutate[i]] = 1;
-
   c.v5_K5 = orgC.v5/orgC.K5;
+
   //c.v5_K5 = orgC.v5/orgC.K5;
-
   c.v5 = orgC.v5;
+
   c.v5 = orgC.v5*2;
-
   c.k8 = 1000;
+
   c.k8 = 20;
-
   c.k8_K7 = 1e6;
+
   c.k8_K7 = 4e5;
 +
  c.tauBbeta4 = 55;
 +
  c.beta4 = 18;
 +
  c.tauRbeta1_tauBbeta4 = 400;
 +
  c.beta1_beta4 = 2;
//  cSol.tauBbeta4 = 180000;
//  cSol.tauBbeta4 = 180000;
//  cSol.tauB = 180;
//  cSol.tauB = 180;
Line 441: Line 615:
function refreshGraphs() {
function refreshGraphs() {
-
   document.getElementById('Meng2004Graph').refresh();
+
   //document.getElementById('Meng2004Graph').refresh();
-
   document.getElementById('Singh2008Graph').refresh();
+
   //document.getElementById('Singh2008Graph').refresh();
-
   document.getElementById('Kostal2004fig3BGraph').refresh();
+
   //document.getElementById('Kostal2004fig3BGraph').refresh();
   document.getElementById('pSB1A2timeGraph').refresh();
   document.getElementById('pSB1A2timeGraph').refresh();
-
   document.getElementById('pArsRRFPtimeGraph').refresh();
+
   //document.getElementById('pArsRRFPtimeGraph').refresh();
-
 
+
  //document.getElementById('Kostal2004fig3AGraph').refresh();
 +
  document.getElementById('pSB1A2conGraph').refresh();
 +
  //document.getElementById('pArsRRFPconGraph').refresh();
}
}
function showOutputs(mode,E,c,dc) {
function showOutputs(mode,E,c,dc) {
-
   plotMin(v5K5plot,mutateFuncs.v5(c),mutateFuncs.K5(c),E);
+
   //plotMin(v5K5plot,mutateFuncs.v5(c),mutateFuncs.K5(c),E);
   plotMin(k8K7plot,mutateFuncs.k8(c),mutateFuncs.K7(c),E);
   plotMin(k8K7plot,mutateFuncs.k8(c),mutateFuncs.K7(c),E);
   for(var a in c) {
   for(var a in c) {
Line 556: Line 732:
{{GraphHeader}}
{{GraphHeader}}
{|
{|
-
|{{graph|Team:Groningen/Graphs/Characterization/GlpF|id=Meng2004Graph}}
+
<!--|{{graph|Team:Groningen/Graphs/Characterization/GlpF|id=Meng2004Graph}}
|{{graph|Team:Groningen/Graphs/Characterization/Singh2008|id=Singh2008Graph}}
|{{graph|Team:Groningen/Graphs/Characterization/Singh2008|id=Singh2008Graph}}
|-
|-
-
|{{graph|Team:Groningen/Graphs/Characterization/Kostal2004fig3B|id=Kostal2004fig3BGraph}}
+
|{{graph|Team:Groningen/Graphs/Characterization/Kostal2004fig3B|id=Kostal2004fig3BGraph}}-->
|{{graph|Team:Groningen/Graphs/Characterization/pSB1A2time|id=pSB1A2timeGraph}}
|{{graph|Team:Groningen/Graphs/Characterization/pSB1A2time|id=pSB1A2timeGraph}}
-
|-
+
<!--|-
-
|{{graph|Team:Groningen/Graphs/Characterization/pArsRRFPtime|id= pArsRRFPtimeGraph}}
+
|{{graph|Team:Groningen/Graphs/Characterization/pArsRRFPtime|id=pArsRRFPtimeGraph}}
 +
|{{graph|Team:Groningen/Graphs/Characterization/Kostal2004fig3A|id=Kostal2004fig3AGraph}}
 +
|- -->
 +
|{{graph|Team:Groningen/Graphs/Characterization/pSB1A2con|id=pSB1A2conGraph}}
 +
<!--|{{graph|Team:Groningen/Graphs/Characterization/pArsRRFPcon|id=pArsRRFPconGraph}}-->
|}
|}
<!-- Don't forget to update the refreshGraphs function above! -->
<!-- Don't forget to update the refreshGraphs function above! -->
 +
 +
{{Team:Groningen/Footer}}

Latest revision as of 00:13, 22 October 2009

Igemhomelogo.png
GroningenPrevious.png
Next.JPG

Characterization

We have four kinds of parts we would like to characterize: Importers, Accumulators, Sensors and the GVP cluster. For this we have a number of methods to estimate specific parameters (detailed below), as well as a stochastic tool to fit our model to experimental data based on simulated annealing.

We have the following parts that we can characterize (RPS stands for Relative Promoter Strength)

     Input/Output Subject
Importers
     RPS → Δvmax                                             

We can measure how much v5 (vmax for As(III) import via GlpF) is in wild-type E.coli and when we over express GlpF at a certain promoter strength S (measured in RPUs). As v5 is a constant times the amount of (active) GlpF this leads to a simple equation for Δv5, if we assume the amount of (active) GlpF produced by our construct is linearly dependent on the promoter strength (v5(0) and v5(1) would be measured):

v5(RPS) = v5wt + Δv5*RPS

v5(0) = v5wt + Δv5*0
v5(S) = v5wt + Δv5*S

Δv5 = (v5(1) - v5(0))/S

Meng 2004 was able to knock out all efflux of arsenic. If there is no efflux of arsenic the dervative of the accumulation graph is the speed at wich arsenic is pumped inside the cell. The maximum speed would be v5. In such a senario two measurements would be enough to determine the relative promoter strength. One could even determine the reaction rate k6 and GlpF with a simple calculation, since v5 = k6 GlpFT (Vs/Vc). However we do have efflux, not only do we have efflux, but we have efflux that is dependent on the total amount of arsenic inside the cell. Also a portion arsenic gets bound to ArsR.

Accumulators
     RPS → Asbound(As(III)in)

For both MBPArsR and fMT we assume the amount of bound As(III) for a given relative promoter strength S obeys (for MBPArsR n=1):

Asbound(As(III)in)
 = S Bmax As(III)in^n
    / (K^n + As(III)in^n)
The constants Bmax, K and n can be determined from uptake experiments comparing E. coli with and without fMT expression. Of course this can be done in general by fitting our model to experimental data, if enough data is provided the fit will be tight enough to allow this. However, even without fitting the full model it should be possible to make a fair estimation from equilibrium measurements.
If the total cell volume is much smaller than the volume of the solution it is reasonable to assume a constant import rate. Also, regardless of whether they feature fMT or not, in equilibrium the amount of ArsR is the same, as is the amount of ArsB, leading to the same amount of unbound arsenic being present. This means that any difference in uptake of arsenic is completely due to arsenic being bound to fMT or MBPArsR. By measuring the amount of arsenic in equilibrium in wild-type cells as well as in cells expressing fMT/MBPArsR for several different (inital) concentrations of As(III), at one or more (known) levels of expression, it is possible to determine the constants Bmax, K and n.
 i 
Sensors
     metal(t) → RPS(t)

The ars promoter is part of a feedback loop, so it is not a simple matter of defining the (instantaneous) promoter strength. Instead we suggest using the relevant equations from our model. The necessary parameters can be determined by fitting uptake measurement data to our model. Specifically, if the RPS is measured without arsenic present and with enough arsenic present to keep the promoter fully active during the experiment we can determine βRN τR as follows (under the assumption that the RPS is linearly dependent on arsT/ars and using the fact that without any arsenic present the cells will be in equilibrium):

S(max) / S(0) = ars(max) / ars(0)
S(max) / S(0) = arsT / ars(0)
S(max) / S(0) = 1 + ArsR(0)²/KAd²
      ArsR(0) = KAd √(S(max)/S(0) - 1)

0 = βRN ars1(0) - (ln(2)/τR) ArsR(0)
0 = βRN ars1T S(0)/S(max)
     - (ln(2)/τR) KAd √(S(max)/S(0) - 1)
βRN ars1T S(0)/S(max)
 = (ln(2)/τR) KAd √(S(max)/S(0) - 1)
βRN τR = (ln(2)/ars1T) KAd
   (S(max)/S(0)) √(S(max)/S(0) - 1)
GVP cluster
     RPS → GV

RPS → GV The amount of gas vesicles can be expressed in terms of buoyant density, as volume fraction, using the total mass of the vesicles, etc. No matter how it is expressed, we assume a simple linear dependency between the RPS and the amount of gas vesicles. By taking (T)EM pictures of slices the amount of gas vesicles formed under influence of different RPSes can be determined and a straightforward fit made.

Uptake measurements

Sampling scheme
Time (min)
0 10 20 40 60
As(III)exT(0)
(µM)
0 x
10 x x x x x
20 x
50 x
100 x

To obtain data for the optimization procedure described above we conducted ICP-MS measurements on our cells containing various devices/parts. To optimize our findings we have conducted measurements both in time and in concentration. Details on ICP-MS the experiments can be found on our Protocol Page. Measurements have been conducted at times and concentrations as indicated in the table on the right. Results can be seen below.

First Uptake Measurement
In this case we looked at the arsenic uptake of our wildtype and of our wildtype with a lot of pArs promoters with RFP. The raw data can be found at our Download Section

AsUptakeWildTypeConcentration.pngAsUptakePArsRFPConcentration.png
AsUptakeWildTypeTime.pngAsUptakePArsRFPTime.png

Getting (Vc/Vs) and other conditions
To effectively determine our constants we need to give our model some extra information. For instance what kind of constructs are inside the cel for a given experiment. Also we need to give the model the volume of cells per liter of fluid. To optain this we use the obtained dry weight and calculate how much wet weight it would have been (assuming dry weight/wet weight = 0.3) and then use the density of E. coli (1100kg/m3) to obtain the cell volume for our sample and eventually the desired volume of cells per liter. Also we need the absolute value of Arsenic taken up by the cells in the assumption that we have one liter of sample and we know (Vc/Vs). Once we know all these parameters the optimization procedure can start.

Fluorescence Measurements
Apart from giving our model all the conditions it needs to calculate all the constants by means of the optimization procedure, we have also conducted some fluorescence measurements and made growth curves of our construct with the pArs promoter with RFP. The cells where put into a solution with either no arsenic in it or at a concentration of 100 micromolair. On the left side one can see the graph of the luminance and on right side and on the right side one can see the coresponding grow curves. The raw data of these measurements can again be found under our Downloads

ArsFluorescence.pngArsOD.png
Using a formula similar to the formula below
In actuality we did not compute the derivative of the fluorescence and then corrected for the OD, instead we first computed the fluorescence normalized for the OD (correlates with RFP per cell) and then fitted a linear function to the data. This leads to a much more robust fit in the presence of noise and few measurements.
 i 
we where able to derive a RPU of 2.3. This means that on average the ars promoter is 2.3 times more active at 100 micromolarity of arsenic (outside the cell) than if there is no arsenic in the solution. For a detailed calculation I would like to refer to our Downloads section under the RPU sheet.
RPUcalculation.png

Second ICPMS measurement For our second measurement I would like to refer to our Accumulation page. These measerments where higher than expected and they need further analyses before we can use them in tha characterization of our parts.

Optimization procedure

To fit our model to experimental data from different uptake experiments and/or papers we have implemented an optimization procedure that allows for experiments with different genotypes and circumstances by letting constants be overridden per experiment. It aims to optimize the sum of the RMS errors for each experiment using Simulated Annealing. By clicking the button "Fit" the optimization is started and its progress can be followed by looking at the table of constants and the graphs shown below the table (which are updated in real-time as the best solution is improved). In the optimizations procedure the ratio between v5 and K5 is kept constant. This is done because this ratio could be determined exactly using the data from the experiments done by Meng 2004 v5 itself is not fixed and may vary. (Note that in the code different experiments and graphs can be enabled/disabled, we have entered data from Kostal, Meng and our first ICP-MS measurements.)

best cur gradient solved
v5/K5
v5
K5
k8/K7
k8
K7
tauBbetaB
tauB
betaB
tauR
betaRN
tauFbetaF
tauF
betaF
tauKbetaK
tauK
betaK
tauGbeta5
tauG
beta5
ars2T
E

Loading graph...
Loading graph...