Difference between revisions of "Team:Duesseldorf/Model"

(Adding the Model-Code)
 
(35 intermediate revisions by 4 users not shown)
Line 10: Line 10:
 
<h1>Model</h1>
 
<h1>Model</h1>
 
<br><br>
 
<br><br>
                       <p>As the aim of our project is to construct a modular toolkit using co-cultures with three organism, we would have to conduct many experimental iterations to reach conclusive and reliable results. To avoid this tedious process, we, as many other scientists working in this field, turned our attention to computer based biological modeling to predict the behavior of our system.<br>
+
                       <p>As the aim of our project is to construct a modular toolkit using co-cultures with three organisms, we would have to conduct many experimental interactions to reach conclusive and reliable results. To avoid this tedious process, we turned our attention to computer based biological modeling to predict the behavior of our system.<br>
In the realm of mathematical and computer based biology, scientists use algorithms, data structure and data visualization to create approximations of existing biological systems. This serves two important goals; One, to check wether the theoretical understanding of a process is correct. Of course, this can be done by constructing a model and checking if the cultures behave within reasonable correctness as the observations in the lab indicate.<br>
+
In the realm of mathematical and computer based biology, scientists use algorithms, data structure and data visualization to create approximations of existing biological systems. This serves two important goals;<br>
The other goal of such modeling approach is to predict wether the behavior of the system are changed or other external influences are applied. This latter role is why we are using modeling in our project.<br>
+
One, to check whether the theoretical understanding of a process is correct. Of course, this can be done by constructing a model and checking if the cultures behave within reasonable correctness as the observations in the lab indicate.<br>
 +
The other goal of such modeling approach is to predict whether the behavior of the system are changed or other external influences are applied. This latter role is why we are using modeling in our project.<br>
 
However, many of our team members lacked experience in this field. As such, we approached the Institute of Quantitative and Theoretical Biology at our university (Headed by Professor Dr. Oliver Ebenhöh) to discuss our approach.<br>
 
However, many of our team members lacked experience in this field. As such, we approached the Institute of Quantitative and Theoretical Biology at our university (Headed by Professor Dr. Oliver Ebenhöh) to discuss our approach.<br>
The behavior of a coculture is complex. Modeling in it’s entirety would be far too complex. As such we had to find a way to reduce this complexity. To achieve this, we began our work with laying out a few assumptions that would reduce the complexity of our system and give us a clear indicator of what went wrong if a prediction turned out to be incorrect.
+
The behavior of a co-culture is complex. Modeling in it’s entirety would be far too complex. As such we had to find a way to reduce this complexity. To achieve this, we began our work with laying out a few assumptions that would reduce the complexity of our system and give us a clear indicator of what went wrong if a prediction turned out to be incorrect.
 
In our model we assumed that:<br>
 
In our model we assumed that:<br>
 
</p>
 
</p>
Line 33: Line 34:
 
</p>
 
</p>
 
<p>
 
<p>
Our model is iterative and goes though the following equations for each organism and metabolite each iteration:
+
Our model is iteractive and goes though the following equations for each organism and metabolite each iteration:
 
</p>
 
</p>
  
<ol>
+
<center>
<li><div lang="latex"><math xmlns="http://www.w3.org/1998/Math/MathML">
+
<img src = "https://static.igem.org/mediawiki/2018/e/e6/T--Duesseldorf--Model_Equations.png">
  <mi>a</mi>
+
</center>
  <mi>d</mi>
+
  <mi>d</mi>
+
  <mo>=</mo>
+
  <mo stretchy="false">{</mo>
+
  <mtable>
+
    <mtr>
+
      <mtd>
+
        <mi>α</mi>
+
        <mi>*</mi>
+
        <mo stretchy="false">(</mo>
+
        <mo stretchy="false">(</mo>
+
        <msub>
+
          <mrow>
+
            <mi>m</mi>
+
          </mrow>
+
          <mrow>
+
            <mi>c</mi>
+
          </mrow>
+
        </msub>
+
        <mi>*</mi>
+
        <mo stretchy="false">(</mo>
+
        <msub>
+
          <mrow>
+
            <mi>Y</mi>
+
          </mrow>
+
          <mrow>
+
            <mi>e</mi>
+
          </mrow>
+
        </msub>
+
        <mo stretchy="false">[</mo>
+
        <mi>i</mi>
+
        <mo stretchy="false">]</mo>
+
        <mo>/</mo>
+
        <msub>
+
          <mrow>
+
            <mi>Y</mi>
+
          </mrow>
+
          <mrow>
+
            <mi>e</mi>
+
          </mrow>
+
        </msub>
+
        <mo stretchy="false">[</mo>
+
        <mn>0</mn>
+
        <mo stretchy="false">]</mo>
+
        <mo stretchy="false">)</mo>
+
        <mo>-</mo>
+
        <msub>
+
          <mrow>
+
            <mi>i</mi>
+
          </mrow>
+
          <mrow>
+
            <mi>c</mi>
+
          </mrow>
+
        </msub>
+
        <mo stretchy="false">)</mo>
+
        <mo>/</mo>
+
        <msub>
+
          <mrow>
+
            <mi>m</mi>
+
          </mrow>
+
          <mrow>
+
            <mi>c</mi>
+
          </mrow>
+
        </msub>
+
        <mo stretchy="false">)</mo>
+
      </mtd>
+
      <mtd>
+
        <mi>C</mi>
+
        <mo>&gt;</mo>
+
        <mi>α</mi>
+
        <mi>*</mi>
+
        <mo stretchy="false">(</mo>
+
        <mo stretchy="false">(</mo>
+
        <msub>
+
          <mrow>
+
            <mi>m</mi>
+
          </mrow>
+
          <mrow>
+
            <mi>c</mi>
+
          </mrow>
+
        </msub>
+
        <mi>*</mi>
+
        <mo stretchy="false">(</mo>
+
        <msub>
+
          <mrow>
+
            <mi>Y</mi>
+
          </mrow>
+
          <mrow>
+
            <mi>e</mi>
+
          </mrow>
+
        </msub>
+
        <mo stretchy="false">[</mo>
+
        <mi>i</mi>
+
        <mo stretchy="false">]</mo>
+
        <mo>/</mo>
+
        <msub>
+
          <mrow>
+
            <mi>Y</mi>
+
          </mrow>
+
          <mrow>
+
            <mi>e</mi>
+
          </mrow>
+
        </msub>
+
        <mo stretchy="false">[</mo>
+
        <mn>0</mn>
+
        <mo stretchy="false">]</mo>
+
        <mo stretchy="false">)</mo>
+
        <mo>-</mo>
+
        <msub>
+
          <mrow>
+
            <mi>i</mi>
+
          </mrow>
+
          <mrow>
+
            <mi>c</mi>
+
          </mrow>
+
        </msub>
+
        <mo stretchy="false">)</mo>
+
        <mo>/</mo>
+
        <msub>
+
          <mrow>
+
            <mi>m</mi>
+
          </mrow>
+
          <mrow>
+
            <mi>c</mi>
+
          </mrow>
+
        </msub>
+
        <mo stretchy="false">)</mo>
+
      </mtd>
+
    </mtr>
+
    <mtr>
+
      <mtd>
+
        <mi>C</mi>
+
      </mtd>
+
      <mtd>
+
        <mi>C</mi>
+
        <mo>≤</mo>
+
        <mi>α</mi>
+
        <mi>*</mi>
+
        <mo stretchy="false">(</mo>
+
        <mo stretchy="false">(</mo>
+
        <msub>
+
          <mrow>
+
            <mi>m</mi>
+
          </mrow>
+
          <mrow>
+
            <mi>c</mi>
+
          </mrow>
+
        </msub>
+
        <mi>*</mi>
+
        <mo stretchy="false">(</mo>
+
        <msub>
+
          <mrow>
+
            <mi>Y</mi>
+
          </mrow>
+
          <mrow>
+
            <mi>e</mi>
+
          </mrow>
+
        </msub>
+
        <mo stretchy="false">[</mo>
+
        <mi>i</mi>
+
        <mo stretchy="false">]</mo>
+
        <mo>/</mo>
+
        <msub>
+
          <mrow>
+
            <mi>Y</mi>
+
          </mrow>
+
          <mrow>
+
            <mi>e</mi>
+
          </mrow>
+
        </msub>
+
        <mo stretchy="false">[</mo>
+
        <mn>0</mn>
+
        <mo stretchy="false">]</mo>
+
        <mo stretchy="false">)</mo>
+
        <mo>-</mo>
+
        <msub>
+
          <mrow>
+
            <mi>i</mi>
+
          </mrow>
+
          <mrow>
+
            <mi>c</mi>
+
          </mrow>
+
        </msub>
+
        <mo stretchy="false">)</mo>
+
        <mo>/</mo>
+
        <msub>
+
          <mrow>
+
            <mi>m</mi>
+
          </mrow>
+
          <mrow>
+
            <mi>c</mi>
+
          </mrow>
+
        </msub>
+
        <mo stretchy="false">)</mo>
+
      </mtd>
+
    </mtr>
+
  </mtable>
+
</math> </div></li>
+
<li><div lang="latex"><math xmlns="http://www.w3.org/1998/Math/MathML">
+
  <msub>
+
    <mrow>
+
      <mi>i</mi>
+
    </mrow>
+
    <mrow>
+
      <mi>c</mi>
+
    </mrow>
+
  </msub>
+
  <mo>=</mo>
+
  <msub>
+
    <mrow>
+
      <mi>i</mi>
+
    </mrow>
+
    <mrow>
+
      <mi>c</mi>
+
    </mrow>
+
  </msub>
+
  <mo>+</mo>
+
  <mi>a</mi>
+
  <mi>d</mi>
+
  <mi>d</mi>
+
</math></div></li>
+
<li><div lang="latex"><math xmlns="http://www.w3.org/1998/Math/MathML">
+
  <mi>c</mi>
+
  <mo>=</mo>
+
  <mi>c</mi>
+
  <mo>-</mo>
+
  <mi>a</mi>
+
  <mi>d</mi>
+
  <mi>d</mi>
+
</math></div></li>
+
<li><div lang="latex"><math xmlns="http://www.w3.org/1998/Math/MathML">
+
  <mi>g</mi>
+
  <mi>r</mi>
+
  <mi>o</mi>
+
  <mi>w</mi>
+
  <mi>t</mi>
+
  <mi>h</mi>
+
  <msub>
+
    <mrow>
+
      <mi>f</mi>
+
    </mrow>
+
    <mrow>
+
      <mi>c</mi>
+
    </mrow>
+
  </msub>
+
  <mo>=</mo>
+
  <mo stretchy="false">{</mo>
+
  <mtable>
+
    <mtr>
+
      <mtd>
+
        <msub>
+
          <mrow>
+
            <mi>i</mi>
+
          </mrow>
+
          <mrow>
+
            <mi>c</mi>
+
          </mrow>
+
        </msub>
+
        <mo>/</mo>
+
        <mo stretchy="false">(</mo>
+
        <mi>u</mi>
+
        <mi>s</mi>
+
        <msub>
+
          <mrow>
+
            <mi>e</mi>
+
          </mrow>
+
          <mrow>
+
            <mi>c</mi>
+
          </mrow>
+
        </msub>
+
        <mi>*</mi>
+
        <mo stretchy="false">(</mo>
+
        <msub>
+
          <mrow>
+
            <mi>Y</mi>
+
          </mrow>
+
          <mrow>
+
            <mi>e</mi>
+
          </mrow>
+
        </msub>
+
        <mo stretchy="false">[</mo>
+
        <mi>i</mi>
+
        <mo stretchy="false">]</mo>
+
        <mo>/</mo>
+
        <msub>
+
          <mrow>
+
            <mi>Y</mi>
+
          </mrow>
+
          <mrow>
+
            <mi>e</mi>
+
          </mrow>
+
        </msub>
+
        <mo stretchy="false">[</mo>
+
        <mn>0</mn>
+
        <mo stretchy="false">]</mo>
+
        <mo stretchy="false">)</mo>
+
        <mo stretchy="false">)</mo>
+
      </mtd>
+
      <mtd>
+
        <msub>
+
          <mrow>
+
            <mi>i</mi>
+
          </mrow>
+
          <mrow>
+
            <mi>c</mi>
+
          </mrow>
+
        </msub>
+
        <mo>/</mo>
+
        <mo stretchy="false">(</mo>
+
        <mi>u</mi>
+
        <mi>s</mi>
+
        <msub>
+
          <mrow>
+
            <mi>e</mi>
+
          </mrow>
+
          <mrow>
+
            <mi>c</mi>
+
          </mrow>
+
        </msub>
+
        <mi>*</mi>
+
        <mo stretchy="false">(</mo>
+
        <msub>
+
          <mrow>
+
            <mi>Y</mi>
+
          </mrow>
+
          <mrow>
+
            <mi>e</mi>
+
          </mrow>
+
        </msub>
+
        <mo stretchy="false">[</mo>
+
        <mi>i</mi>
+
        <mo stretchy="false">]</mo>
+
        <mo>/</mo>
+
        <msub>
+
          <mrow>
+
            <mi>Y</mi>
+
          </mrow>
+
          <mrow>
+
            <mi>e</mi>
+
          </mrow>
+
        </msub>
+
        <mo stretchy="false">[</mo>
+
        <mn>0</mn>
+
        <mo stretchy="false">]</mo>
+
        <mo stretchy="false">)</mo>
+
        <mo stretchy="false">)</mo>
+
        <mo>≤</mo>
+
        <mn>1</mn>
+
      </mtd>
+
    </mtr>
+
    <mtr>
+
      <mtd>
+
        <mn>1</mn>
+
      </mtd>
+
      <mtd>
+
        <msub>
+
          <mrow>
+
            <mi>i</mi>
+
          </mrow>
+
          <mrow>
+
            <mi>c</mi>
+
          </mrow>
+
        </msub>
+
        <mo>/</mo>
+
        <mo stretchy="false">(</mo>
+
        <mi>u</mi>
+
        <mi>s</mi>
+
        <msub>
+
          <mrow>
+
            <mi>e</mi>
+
          </mrow>
+
          <mrow>
+
            <mi>c</mi>
+
          </mrow>
+
        </msub>
+
        <mi>*</mi>
+
        <mo stretchy="false">(</mo>
+
        <msub>
+
          <mrow>
+
            <mi>Y</mi>
+
          </mrow>
+
          <mrow>
+
            <mi>e</mi>
+
          </mrow>
+
        </msub>
+
        <mo stretchy="false">[</mo>
+
        <mi>i</mi>
+
        <mo stretchy="false">]</mo>
+
        <mo>/</mo>
+
        <msub>
+
          <mrow>
+
            <mi>Y</mi>
+
          </mrow>
+
          <mrow>
+
            <mi>e</mi>
+
          </mrow>
+
        </msub>
+
        <mo stretchy="false">[</mo>
+
        <mn>0</mn>
+
        <mo stretchy="false">]</mo>
+
        <mo stretchy="false">)</mo>
+
        <mo stretchy="false">)</mo>
+
        <mo>&gt;</mo>
+
        <mn>1</mn>
+
      </mtd>
+
    </mtr>
+
  </mtable>
+
</math></div></li>
+
<li><div lang="latex"><math xmlns="http://www.w3.org/1998/Math/MathML">
+
  <msub>
+
    <mrow>
+
      <mi>i</mi>
+
    </mrow>
+
    <mrow>
+
      <mi>c</mi>
+
    </mrow>
+
  </msub>
+
  <mo>=</mo>
+
  <msub>
+
    <mrow>
+
      <mi>i</mi>
+
    </mrow>
+
    <mrow>
+
      <mi>c</mi>
+
    </mrow>
+
  </msub>
+
  <mo>-</mo>
+
  <mi>g</mi>
+
  <mi>r</mi>
+
  <mi>o</mi>
+
  <mi>w</mi>
+
  <mi>t</mi>
+
  <mi>h</mi>
+
  <msub>
+
    <mrow>
+
      <mi>f</mi>
+
    </mrow>
+
    <mrow>
+
      <mi>c</mi>
+
    </mrow>
+
  </msub>
+
  <mi>*</mi>
+
  <mi>u</mi>
+
  <mi>s</mi>
+
  <msub>
+
    <mrow>
+
      <mi>e</mi>
+
    </mrow>
+
    <mrow>
+
      <mi>c</mi>
+
    </mrow>
+
  </msub>
+
  <mi>*</mi>
+
  <mo stretchy="false">(</mo>
+
  <msub>
+
    <mrow>
+
      <mi>Y</mi>
+
    </mrow>
+
    <mrow>
+
      <mi>e</mi>
+
    </mrow>
+
  </msub>
+
  <mo stretchy="false">[</mo>
+
  <mi>i</mi>
+
  <mo stretchy="false">]</mo>
+
  <mo>/</mo>
+
  <msub>
+
    <mrow>
+
      <mi>Y</mi>
+
    </mrow>
+
    <mrow>
+
      <mi>e</mi>
+
    </mrow>
+
  </msub>
+
  <mo stretchy="false">[</mo>
+
  <mn>0</mn>
+
  <mo stretchy="false">]</mo>
+
  <mo stretchy="false">)</mo>
+
</math></div></li>
+
<li><div lang="latex"><math xmlns="http://www.w3.org/1998/Math/MathML">
+
  <mi>g</mi>
+
  <mi>r</mi>
+
  <mi>o</mi>
+
  <mi>w</mi>
+
  <mi>t</mi>
+
  <mi>h</mi>
+
  <mo>=</mo>
+
  <mo stretchy="false">{</mo>
+
  <mtable>
+
    <mtr>
+
      <mtd>
+
        <mi>g</mi>
+
        <mi>r</mi>
+
        <mi>o</mi>
+
        <mi>w</mi>
+
        <mi>t</mi>
+
        <mi>h</mi>
+
        <msub>
+
          <mrow>
+
            <mi>f</mi>
+
          </mrow>
+
          <mrow>
+
            <mi>c</mi>
+
          </mrow>
+
        </msub>
+
      </mtd>
+
      <mtd>
+
        <mi>g</mi>
+
        <mi>r</mi>
+
        <mi>o</mi>
+
        <mi>w</mi>
+
        <mi>t</mi>
+
        <mi>h</mi>
+
        <msub>
+
          <mrow>
+
            <mi>f</mi>
+
          </mrow>
+
          <mrow>
+
            <mi>p</mi>
+
          </mrow>
+
        </msub>
+
        <mo>&gt;</mo>
+
        <mi>g</mi>
+
        <mi>r</mi>
+
        <mi>o</mi>
+
        <mi>w</mi>
+
        <mi>t</mi>
+
        <mi>h</mi>
+
        <msub>
+
          <mrow>
+
            <mi>f</mi>
+
          </mrow>
+
          <mrow>
+
            <mi>c</mi>
+
          </mrow>
+
        </msub>
+
        <mo>&lt;</mo>
+
        <mi>g</mi>
+
        <mi>r</mi>
+
        <mi>o</mi>
+
        <mi>w</mi>
+
        <mi>t</mi>
+
        <mi>h</mi>
+
        <msub>
+
          <mrow>
+
            <mi>f</mi>
+
          </mrow>
+
          <mrow>
+
            <mi>n</mi>
+
          </mrow>
+
        </msub>
+
      </mtd>
+
    </mtr>
+
    <mtr>
+
      <mtd>
+
        <mi>g</mi>
+
        <mi>r</mi>
+
        <mi>o</mi>
+
        <mi>w</mi>
+
        <mi>t</mi>
+
        <mi>h</mi>
+
        <msub>
+
          <mrow>
+
            <mi>f</mi>
+
          </mrow>
+
          <mrow>
+
            <mi>n</mi>
+
          </mrow>
+
        </msub>
+
      </mtd>
+
      <mtd>
+
        <mi>g</mi>
+
        <mi>r</mi>
+
        <mi>o</mi>
+
        <mi>w</mi>
+
        <mi>t</mi>
+
        <mi>h</mi>
+
        <msub>
+
          <mrow>
+
            <mi>f</mi>
+
          </mrow>
+
          <mrow>
+
            <mi>p</mi>
+
          </mrow>
+
        </msub>
+
        <mo>&gt;</mo>
+
        <mi>g</mi>
+
        <mi>r</mi>
+
        <mi>o</mi>
+
        <mi>w</mi>
+
        <mi>t</mi>
+
        <mi>h</mi>
+
        <msub>
+
          <mrow>
+
            <mi>f</mi>
+
          </mrow>
+
          <mrow>
+
            <mi>n</mi>
+
          </mrow>
+
        </msub>
+
        <mo>&lt;</mo>
+
        <mi>g</mi>
+
        <mi>r</mi>
+
        <mi>o</mi>
+
        <mi>w</mi>
+
        <mi>t</mi>
+
        <mi>h</mi>
+
        <msub>
+
          <mrow>
+
            <mi>f</mi>
+
          </mrow>
+
          <mrow>
+
            <mi>c</mi>
+
          </mrow>
+
        </msub>
+
      </mtd>
+
    </mtr>
+
    <mtr>
+
      <mtd>
+
        <mi>g</mi>
+
        <mi>r</mi>
+
        <mi>o</mi>
+
        <mi>w</mi>
+
        <mi>t</mi>
+
        <mi>h</mi>
+
        <msub>
+
          <mrow>
+
            <mi>f</mi>
+
          </mrow>
+
          <mrow>
+
            <mi>p</mi>
+
          </mrow>
+
        </msub>
+
      </mtd>
+
      <mtd>
+
        <mi>g</mi>
+
        <mi>r</mi>
+
        <mi>o</mi>
+
        <mi>w</mi>
+
        <mi>t</mi>
+
        <mi>h</mi>
+
        <msub>
+
          <mrow>
+
            <mi>f</mi>
+
          </mrow>
+
          <mrow>
+
            <mi>c</mi>
+
          </mrow>
+
        </msub>
+
        <mo>&gt;</mo>
+
        <mi>g</mi>
+
        <mi>r</mi>
+
        <mi>o</mi>
+
        <mi>w</mi>
+
        <mi>t</mi>
+
        <mi>h</mi>
+
        <msub>
+
          <mrow>
+
            <mi>f</mi>
+
          </mrow>
+
          <mrow>
+
            <mi>p</mi>
+
          </mrow>
+
        </msub>
+
        <mo>&lt;</mo>
+
        <mi>g</mi>
+
        <mi>r</mi>
+
        <mi>o</mi>
+
        <mi>w</mi>
+
        <mi>t</mi>
+
        <mi>h</mi>
+
        <msub>
+
          <mrow>
+
            <mi>f</mi>
+
          </mrow>
+
          <mrow>
+
            <mi>n</mi>
+
          </mrow>
+
        </msub>
+
      </mtd>
+
    </mtr>
+
  </mtable>
+
</math></div></li>
+
<li><div lang="latex"><math xmlns="http://www.w3.org/1998/Math/MathML">
+
  <msub>
+
    <mrow>
+
      <mi>Y</mi>
+
    </mrow>
+
    <mrow>
+
      <mi>e</mi>
+
    </mrow>
+
  </msub>
+
  <mo stretchy="false">[</mo>
+
  <mi>i</mi>
+
  <mo>+</mo>
+
  <mn>1</mn>
+
  <mo stretchy="false">]</mo>
+
  <mo>=</mo>
+
  <msub>
+
    <mrow>
+
      <mi>Y</mi>
+
    </mrow>
+
    <mrow>
+
      <mi>e</mi>
+
    </mrow>
+
  </msub>
+
  <mo stretchy="false">[</mo>
+
  <mi>i</mi>
+
  <mo stretchy="false">]</mo>
+
  <mo>+</mo>
+
  <mi>g</mi>
+
  <mi>r</mi>
+
  <mi>o</mi>
+
  <mi>w</mi>
+
  <mi>t</mi>
+
  <mi>h</mi>
+
  <mi>*</mi>
+
  <mo stretchy="false">(</mo>
+
  <mo stretchy="false">(</mo>
+
  <mi>c</mi>
+
  <mi>a</mi>
+
  <mi>p</mi>
+
  <mi>a</mi>
+
  <mi>c</mi>
+
  <mi>i</mi>
+
  <mi>t</mi>
+
  <mi>y</mi>
+
  <mo>-</mo>
+
  <msub>
+
    <mrow>
+
      <mi>Y</mi>
+
    </mrow>
+
    <mrow>
+
      <mi>e</mi>
+
    </mrow>
+
  </msub>
+
  <mo stretchy="false">[</mo>
+
  <mi>i</mi>
+
  <mo stretchy="false">]</mo>
+
  <mo stretchy="false">)</mo>
+
  <mo>/</mo>
+
  <mi>c</mi>
+
  <mi>a</mi>
+
  <mi>p</mi>
+
  <mi>a</mi>
+
  <mi>c</mi>
+
  <mi>i</mi>
+
  <mi>t</mi>
+
  <mi>y</mi>
+
  <mo stretchy="false">)</mo>
+
</math></div></li>
+
</ol>
+
 
+
 
<p>
 
<p>
Here, <I>add</I> represents the additional metabolite influx per iteration. <I>&alpha</I> is the organism and metabolite specific uptake speed, <I>m<sub>c</sub></I> is the maximum possible concentration of the specific metabolite in the organism, <I>Y<sub>e</sub>[i]</I> is the current dry weight (in mol) of the organism and <I>Y<sub>e</sub>[0]</I> is the initial dry weight. <I>i<sub>c</sub></I> is the current metabolite mass inside the organism (in mol) and <I>C</I> is the mass of metabolite (in mol) inside the medium. <I>use<sub>c</sub></I> is the specific metabolite mass the organisms the organism uses each iteration in it’s growth, whereas <I>growthf<sub>c</sub></I>, <I>growthf<sub>n</sub></I>, and <I>growthf<sub>p</sub></I> are the metabolite specific growth factors. The lowest of these is chosen as the overall growth factor <I>growth</I> and then used in the calculation of the new population size <I>Y<sub>e</sub>[i+1]</I>.
+
Here, <I>add</I> represents the additional metabolite influx per iteration. <I>α</I> is the organism and metabolite specific uptake speed, <I>m<sub>c</sub></I> is the maximum possible concentration of the specific metabolite in the organism, <I>Y<sub>e</sub>[i]</I> is the current dry weight (in mol) of the organism and <I>Y<sub>e</sub>[0]</I> is the initial dry weight. <I>i<sub>c</sub></I> is the current metabolite mass inside the organism (in mol) and <I>C</I> is the mass of metabolite (in mol) inside the medium. <I>use<sub>c</sub></I> is the specific metabolite mass the organisms the organism uses each iteration in it’s growth, whereas <I>growthf<sub>c</sub></I>, <I>growthf<sub>n</sub></I>, and <I>growthf<sub>p</sub></I> are the metabolite specific growth factors. The lowest of these is chosen as the overall growth factor <I>growth</I> and then used in the calculation of the new population size <I>Y<sub>e</sub>[i+1]</I>.
 +
The last equation converts the calculated biomass of the specific organism <I>Y<sub>o</sub>[i]</I> into the cell count <I>cc<sub>o</sub>[i]</I> of that specific organism at that specific time. This is done by multiplying the biomass with the specific molar weight <I>smw[o]</I> times five (a rule of thumb from dry weight to wet weight) and dividing by the specific cell weight of that organism <I>scw[o]</I>.
 
</p>
 
</p>
  
 
<p>
 
<p>
As stated above, these calculation are performed for each organism and each metabolite. the resulting populations lists are then plotted via the Python package Matplotlib (as you can see in the code we provided at the end of the page).<br>
+
As stated above, these calculations are performed for each organism and each metabolite. the resulting populations lists are then plotted via the Python package Matplotlib (as you can see in the code we provided at the end of the page).<br>
 
This produces a graph that shows what the growth and population sizes of our system look like within a predetermined time frame. This tells us which ratio of metabolite concentration to population sizes is necessary for the system to remain stable over a given period of time. This gives us a range of concentrations that we can then verify in the lab. This reduces the amount of experiments we have to conduct to reach our goal of establishing a stable, purpose-engineered three organism coculture.<br>
 
This produces a graph that shows what the growth and population sizes of our system look like within a predetermined time frame. This tells us which ratio of metabolite concentration to population sizes is necessary for the system to remain stable over a given period of time. This gives us a range of concentrations that we can then verify in the lab. This reduces the amount of experiments we have to conduct to reach our goal of establishing a stable, purpose-engineered three organism coculture.<br>
Of course observation in the lab take precedent over our model. And data that is in conflict with the prediction of our model will always be given priority. Until now however, our model has been correct. Thus far, it has revealed that the same problem is the supplying the system with sugar, as S. elongatus is has the lowest doubling time and appears to be the main bottleneck. Below a few example models are supplied, with varying amounts of metabolite supplied at the beginning.
+
Of course observation in the lab take precedent over our model. And data that is in conflict with the prediction of our model will always be given priority. Until now however, our model has been correct. Thus far, it has revealed that the same problem is the supplying the system with sugar, as <i>S. elongatus</i> is has the lowest doubling time and appears to be the main bottleneck. Below a few example models are supplied, with varying amounts of metabolite supplied at the beginning.
 
</p>
 
</p>
  
 
<p>
 
<p>
Here are a few examples where we used our three model organisms E. coli, S. cerevisae and S. elongatus and plotted their growth over the course of 48 hours. Changed are the concentrations of the metabolites we control with, in our example this is carbon, nitrogen and phosphor, in the medium, but everything else was kept at the same value;
+
Here are a few examples where we used our three model organisms <i>E. coli</i>, <i>S. cerevisiae</i> and <i>S. elongatus</i> and plotted their growth over the course of 48 hours. Changed are the concentrations of the metabolites we control with, in our example this is carbon, nitrogen and phosphorus, in the medium, but everything else was kept at the same value;
 
</p>
 
</p>
  
 
<ol>
 
<ol>
<li>Every metabolite is set at 10 Mol initially:
+
<li>
 
<br>
 
<br>
<img src= "https://static.igem.org/mediawiki/2018/0/0b/T--Duesseldorf--Model_10p.png">
+
<figure>
 +
<img src="https://static.igem.org/mediawiki/2018/7/7f/T--Duesseldorf--Model_25.png">
 +
<figcaption><strong>Figure 1:</strong> Logarithmic graph of the growth of our co-culture organisms over a period of 48 h, with an initial metabolite (glucose, nitrogen, phosphorus, ammonium, sulfat and phosphite) amount auf 25 mol each.  </figcaption>
 +
</figure>
 
<br>
 
<br>
 
</li>
 
</li>
<li> Every metabolite is set at 50 Mol initially:
+
<li>
<br>
+
<br><figure>
<img src= "https://static.igem.org/mediawiki/2018/6/60/T--Duesseldorf--Model_50p.png">
+
<img src="https://static.igem.org/mediawiki/2018/5/58/T--Duesseldorf--Model_50.png">
 +
<figcaption><strong>Figure 2:</strong> Logarithmic graph of the growth of our co-culture organisms over a period of 48 h, with an initial metabolite (glucose, nitrogen, phosphorus, ammonium, sulfat and phosphite) amount auf 50 mol each.  </figcaption>
 +
</figure>
 
<br>
 
<br>
 
</li>
 
</li>
<li> Every metabolite is set at 100 Mol initially:
+
<li>
 
<br>
 
<br>
<img src= "https://static.igem.org/mediawiki/2018/1/15/T--Duesseldorf--Model_100p.png">
+
<figure>
 +
<img src="https://static.igem.org/mediawiki/2018/7/7f/T--Duesseldorf--Model_100.png">
 +
<figcaption><strong>Figure 1:</strong> Logarithmic graph of the growth of our co-culture organisms over a period of 48 h, with an initial metabolite (glucose, nitrogen, phosphorus, ammonium, sulfat and phosphite) amount auf 100 mol each.  </figcaption>
 +
</figure>
 
<br>
 
<br>
 
</li>
 
</li>
Line 825: Line 82:
  
 
<p>
 
<p>
As stated above, each of our assumption attempts to reduce complexity also limits realism. If given more time we could further refine our model and start working without our assumptions. This would increase the accuracy of our predictions and would further our understanding of cocultures and microbe interaction.<br>
+
As stated above, each of our assumption attempts to reduce complexity also limits realism. If given more time we could further refine our model and start working without our assumptions. This would increase the accuracy of our predictions and would further our understanding of co-cultures and microbe interaction.<br>
 
It would however also necessitate more experiments to verify our predictions, which was something we didn’t have the time for.<br>
 
It would however also necessitate more experiments to verify our predictions, which was something we didn’t have the time for.<br>
Another possibility we could not pursue was interactivity and the option to include other organisms in our model. We hoped that we could construct a model that would receive a selection of organisms, metabolites that bind the organisms together and a time frame and from that calculate the optimal medium composition as well as initial population sizes to keep the coculture stable.<br>
+
Another possibility we could not pursue was interactivity and the option to include other organisms in our model. We hoped that we could construct a model that would receive a selection of organisms, metabolites that bind the organisms together and a time frame and from that calculate the optimal medium composition as well as initial population sizes to keep the co-culture stable.<br>
We believe that such a thing is possible with our model and if we would have had more time to verify our modeling of our lab work, we could have realized this idea.
+
We believe that this is possible with our model and if we would have had more time to verify our modeling of our lab work, we could have realized this idea.
 
</p>
 
</p>
 
+
<div id="Code">
<div id="Info" class="tabcontent">
+
  <h3>Info</h3>
+
  <p>To display the code, please click on the "Code" Button</p>
+
</div>
+
 
+
<div id="Code" class="tabcontent">
+
 
<h3>Code</h3>
 
<h3>Code</h3>
   <p> import matplotlib.pyplot as plt<br>
+
   <p> Provided below is a download link to the Python code that makes up our model:<br>
import numpy as np<br>
+
(Note that; we used the jupyter Notebook Editor for our work and we recommend using it as well if you want to try out our model!)<br>
import scipy.integrate<br>
+
 
<br>
 
<br>
def get_itc():<br>
+
<a href="https://static.igem.org/mediawiki/2018/b/b4/T--Duesseldorf--Model_Code_new.txt" download>Model Code</a>
    global itc<br>
+
    return itc<br>
+
def set_itc(new):<br>
+
    global itc<br>
+
    itc = new<br>
+
    return<br>
+
<br>
+
def get_itn():<br>
+
    global itn<br>
+
    return itn<br>
+
def set_itn(new):<br>
+
    global itn<br>
+
    itn = new<br>
+
    return<br>
+
<br>
+
def get_itp():<br>
+
    global itp<br>
+
    return itp<br>
+
def set_itp(new):<br>
+
    global itp<br>
+
    itp = new<br>
+
    return<br>
+
<br>
+
def get_itm():<br>
+
    global itm<br>
+
    return itm<br>
+
def set_itm(new):<br>
+
    global itm<br>
+
    itm = new<br>
+
    return<br>
+
<br>
+
def get_itpa():<br>
+
    global itpa<br>
+
    return itpa<br>
+
def set_itpa(new):<br>
+
    global itpa<br>
+
    itpa = new<br>
+
    return<br>
+
<br>
+
def get_i_c_e():<br>
+
    global i_c_e<br>
+
    return i_c_e<br>
+
def set_i_c_e(new):<br>
+
    global i_c_e<br>
+
    i_c_e = new<br>
+
    return<br>
+
<br>
+
def get_i_c_s():<br>
+
    global i_c_s<br>
+
    return i_c_s<br>
+
def set_i_c_s(new):<br>
+
    global i_c_s<br>
+
    i_c_s = new<br>
+
    return<br>
+
<br>
+
def get_i_c_se():<br>
+
    global i_c_se<br>
+
    return i_c_se<br>
+
def set_i_c_se(new):<br>
+
    global i_c_se<br>
+
    i_c_se = new<br>
+
    return<br>
+
<br>
+
def get_i_n_e():<br>
+
    global i_n_e<br>
+
    return i_n_e<br>
+
def set_i_n_e(new):<br>
+
    global i_n_e<br>
+
    i_n_e = new<br>
+
    return<br>
+
<br>
+
def get_i_n_s():<br>
+
    global i_n_s<br>
+
    return i_n_s<br>
+
def set_i_n_s(new):<br>
+
    global i_n_s<br>
+
    i_n_s = new<br>
+
    return<br>
+
<br>
+
def get_i_n_se():<br>
+
    global i_n_se<br>
+
    return i_n_se<br>
+
def set_i_n_se(new):<br>
+
    global i_n_se<br>
+
    i_n_se = new<br>
+
    return<br>
+
<br>
+
def get_i_p_e():<br>
+
    global i_p_e<br>
+
    return i_p_e<br>
+
def set_i_p_e(new):<br>
+
    global i_p_e<br>
+
    i_p_e = new<br>
+
    return<br>
+
<br>
+
def get_i_p_s():<br>
+
    global i_p_s<br>
+
    return i_p_s<br>
+
def set_i_p_s(new):<br>
+
    global i_p_s<br>
+
    i_p_s = new<br>
+
    return<br>
+
<br>
+
def get_i_p_se():<br>
+
    global i_p_se<br>
+
    return i_p_se<br>
+
def set_i_p_se(new):<br>
+
    global i_p_se<br>
+
    i_p_se = new<br>
+
    return<br>
+
<br>
+
def get_i_m():<br>
+
    global i_m<br>
+
    return i_m<br>
+
def set_i_m(new):<br>
+
    global i_m<br>
+
    i_m = new<br>
+
    return<br>
+
<br>
+
def get_i_pa():<br>
+
    global i_pa<br>
+
    return i_pa<br>
+
def set_i_pa(new):<br>
+
    global i_pa<br>
+
    i_pa = new<br>
+
    return<br>
+
<br>
+
<br>
+
def get_m_c_e():<br>
+
    global m_c_e<br>
+
    return m_c_e<br>
+
def set_m_c_e(new):<br>
+
    global m_c_e<br>
+
    m_c_e = new<br>
+
    return<br>
+
<br>
+
def get_m_c_s():<br>
+
    global m_c_s<br>
+
    return m_c_s<br>
+
def set_m_c_s(new):<br>
+
    global m_c_s<br>
+
    m_c_s = new<br>
+
    return<br>
+
<br>
+
def get_m_c_se():<br>
+
    global m_c_se<br>
+
    return m_c_se<br>
+
def set_m_c_se(new):<br>
+
    global m_c_se<br>
+
    m_c_se = new<br>
+
    return<br>
+
<br>
+
def get_m_n_e():<br>
+
    global m_n_e<br>
+
    return m_n_e<br>
+
def set_m_n_e(new):<br>
+
    global m_n_e<br>
+
    m_n_e = new<br>
+
    return<br>
+
<br>
+
def get_m_n_s():<br>
+
    global m_n_s<br>
+
    return m_n_s<br>
+
def set_m_n_s(new):<br>
+
    global m_n_s<br>
+
    m_n_s = new<br>
+
    return<br>
+
<br>
+
def get_m_n_se():<br>
+
    global m_n_se<br>
+
    return m_n_se<br>
+
def set_m_n_se(new):<br>
+
    global m_n_se<br>
+
    m_n_se = new<br>
+
    return<br>
+
<br>
+
def get_m_p_e():<br>
+
    global m_p_e<br>
+
    return m_p_e<br>
+
def set_m_p_e(new):<br>
+
    global m_p_e<br>
+
    m_p_e = new<br>
+
    return<br>
+
<br>
+
def get_m_p_s():<br>
+
    global m_p_s<br>
+
    return m_p_s<br>
+
def set_m_p_s(new):<br>
+
    global m_p_s<br>
+
    m_p_s = new<br>
+
    return<br>
+
<br>
+
def get_m_p_se():<br>
+
    global m_p_se<br>
+
    return m_p_se<br>
+
def set_m_p_se(new):<br>
+
    global m_p_se<br>
+
    m_p_se = new<br>
+
    return<br>
+
<br>
+
def get_m_m():<br>
+
    global m_m<br>
+
    return m_m<br>
+
def set_m_m(new):<br>
+
    global m_m<br>
+
    m_m = new<br>
+
    return<br>
+
<br>
+
def get_m_pa():<br>
+
    global m_pa<br>
+
    return m_pa<br>
+
def set_m_pa(new):<br>
+
    global m_pa<br>
+
    m_pa = new<br>
+
    return<br>
+
<br>
+
<br>
+
def get_sec():<br>
+
    global sec<br>
+
    return sec<br>
+
def set_sec(new):<br>
+
    global sec<br>
+
    sec = new<br>
+
    return<br>
+
<br>
+
def get_ssc():<br>
+
    global ssc<br>
+
    return ssc<br>
+
def set_ssc(new):
+
    global ssc<br>
+
    ssc = new<br>
+
    return<br>
+
<br>
+
def get_sel():<br>
+
    global sel<br>
+
    return sel<br>
+
def set_sel(new):<br>
+
    global sel<br>
+
    sel = new<br>
+
    return<br>
+
<br>
+
def get_expsec():<br>
+
    global expsec<br>
+
    return expsec<br>
+
def set_expsec(new):<br>
+
    global expsec<br>
+
    expsec = new<br>
+
    return<br>
+
<br>
+
def get_expssc():<br>
+
    global expssc<br>
+
    return expssc<br>
+
def set_expssc(new):<br>
+
    global expssc<br>
+
    expssc = new<br>
+
    return<br>
+
<br>
+
def get_expsel():<br>
+
    global expsel<br>
+
    return expsel<br>
+
def set_expsel(new):<br>
+
    global expsel<br>
+
    expsel = new<br>
+
    return<br>
+
<br>
+
<br>
+
def get_alpha_c_e():<br>
+
    global alpha_c_e<br>
+
    return alpha_c_e<br>
+
def set_alpha_c_e(new):<br>
+
    global alpha_c_e<br>
+
    alpha_c_e = new<br>
+
    return<br>
+
<br>
+
def get_alpha_c_s():<br>
+
    global alpha_c_s<br>
+
    return alpha_c_s<br>
+
def set_alpha_c_s(new):<br>
+
    global alpha_c_s<br>
+
    alpha_c_s = new<br>
+
    return<br>
+
<br>
+
def get_alpha_c_se():<br>
+
    global alpha_c_se<br>
+
    return alpha_c_se<br>
+
def set_alpha_c_se(new):<br>
+
    global alpha_c_se<br>
+
    alpha_c_se = new<br>
+
    return<br>
+
<br>
+
def get_alpha_n_e():<br>
+
    global alpha_n_e<br>
+
    return alpha_n_e<br>
+
def set_alpha_n_e(new):<br>
+
    global alpha_n_e<br>
+
    alpha_n_e = new<br>
+
    return<br>
+
<br>
+
def get_alpha_n_s():<br>
+
    global alpha_n_s<br>
+
    return alpha_n_s<br>
+
def set_alpha_n_s(new):<br>
+
    global alpha_n_s<br>
+
    alpha_n_s = new<br>
+
    return<br>
+
<br>
+
def get_alpha_n_se():<br>
+
    global alpha_n_se<br>
+
    return alpha_n_se<br>
+
def set_alpha_n_se(new):<br>
+
    global alpha_n_se<br>
+
    alpha_n_se = new<br>
+
    return<br>
+
<br>
+
def get_alpha_p_e():<br>
+
    global alpha_p_e<br>
+
    return alpha_p_e<br>
+
def set_alpha_p_e(new):<br>
+
    global alpha_p_e<br>
+
    alpha_p_e = new<br>
+
    return<br>
+
<br>
+
def get_alpha_p_s():<br>
+
    global alpha_p_s<br>
+
    return alpha_p_s<br>
+
def set_alpha_p_s(new):<br>
+
    global alpha_p_s<br>
+
    alpha_p_s = new<br>
+
    return<br>
+
<br>
+
def get_alpha_p_se():<br>
+
    global alpha_p_se<br>
+
    return alpha_p_se<br>
+
def set_alpha_p_se(new):<br>
+
    global alpha_p_se<br>
+
    alpha_p_se = new<br>
+
    return<br>
+
<br>
+
def get_alpha_m():<br>
+
    global alpha_m<br>
+
    return alpha_m<br>
+
def set_alpha_m(new):<br>
+
    global alpha_m<br>
+
    alpha_m = new<br>
+
    return<br>
+
<br>
+
def get_alpha_pa():<br>
+
    global alpha_pa<br>
+
    return alpha_pa<br>
+
def set_alpha_pa(new):<br>
+
    global alpha_pa<br>
+
    alpha_pa = new<br>
+
    return<br>
+
<br>
+
<br>
+
def get_use_c_e():<br>
+
    global use_c_e<br>
+
    return use_c_e<br>
+
def set_use_c_e(new):<br>
+
    global use_c_e<br>
+
    use_c_e = new<br>
+
    return<br><br>
+
<br>
+
def get_use_c_s():<br>
+
    global use_c_s<br>
+
    return use_c_s<br>
+
def set_use_c_s(new):<br>
+
    global use_c_s<br>
+
    use_c_s = new<br>
+
    return<br>
+
<br>
+
def get_use_c_se():<br>
+
    global use_c_se<br>
+
    return use_c_se<br>
+
def set_use_c_se(new):<br>
+
    global use_c_se<br>
+
    use_c_se = new<br>
+
    return<br>
+
<br>
+
def get_use_n_e():<br>
+
    global use_n_e<br>
+
    return use_n_e<br>
+
def set_use_n_e(new):<br>
+
    global use_n_e<br>
+
    use_n_e = new<br>
+
    return<br>
+
<br>
+
def get_use_n_s():<br>
+
    global use_n_s<br>
+
    return use_n_s<br>
+
def set_use_n_s(new):<br>
+
    global use_n_s<br>
+
    use_n_s = new<br>
+
    return<br>
+
<br>
+
def get_use_n_se():<br>
+
    global use_n_se<br>
+
    return use_n_se<br>
+
def set_use_n_se(new):<br>
+
    global use_n_se<br>
+
    use_n_se = new<br>
+
    return<br>
+
<br>
+
def get_use_p_e():<br>
+
    global use_p_e<br>
+
    return use_p_e<br>
+
def set_use_p_e(new):<br>
+
    global use_p_e<br>
+
    use_p_e = new<br>
+
    return<br>
+
<br>
+
def get_use_p_s():<br>
+
    global use_p_s<br>
+
    return use_p_s<br>
+
def set_use_p_s(new):<br>
+
    global use_p_s<br>
+
    use_p_s = new<br>
+
    return<br>
+
<br>
+
<br>
+
def get_use_p_se():<br>
+
    global use_p_se<br>
+
    return use_p_se<br>
+
def set_use_p_se(new):<br>
+
    global use_p_se<br>
+
    use_p_se = new<br>
+
    return<br>
+
<br>
+
def get_use_m():<br>
+
    global use_m<br>
+
    return use_m<br>
+
def set_use_m(new):<br>
+
    global use_m<br>
+
    use_m = new<br>
+
    return<br>
+
<br>
+
def get_use_pa():<br>
+
    global use_pa<br>
+
    return use_pa<br>
+
def set_use_pa(new):<br>
+
    global use_pa<br>
+
    use_pa = new<br>
+
    return<br>
+
<br>
+
def get_ye0():<br>
+
    global ye0<br>
+
    return ye0<br>
+
def get_ys0():<br>
+
    global ys0<br>
+
    return ys0<br>
+
def get_yse0():<br>
+
    global yse0<br>
+
    return yse0<br>
+
<br>
+
def get_capacity_e():<br>
+
    global capacity_e<br>
+
    return capacity_e<br>
+
def get_capacity_s():<br>
+
    global capacity_s<br>
+
    return capacity_s<br>
+
def get_capacity_se():<br>
+
    global capacity_se<br>
+
    return capacity_se<br>
+
<br>
+
def get_t():<br>
+
    global t<br>
+
    return t<br>
+
<br>
+
<br>
+
def trinity():<br>
+
#übergebe Zeit<br>
+
    t = get_t()<br>
+
    <br>
+
#Übergibt Initiale Organismen-Konzentrationen<br>
+
    e_coli = get_ye0()<br>
+
    s_cerevisiae = get_ys0()<br>
+
    s_elongatus = get_yse0()<br>
+
<br>
+
#Übergibt Initiale Stoff-Konzentrationen (extern)<br>
+
    c = get_itc() #kohlenstoff/zucker<br>
+
    n = get_itn() #Stickstoff<br>
+
    p = get_itp() #Phosphor<br>
+
    m = get_itm() #Melanin<br>
+
    pa = get_itpa() #Phosphit<br>
+
<br>
+
#Übergibt Initiale Stoff-Konzentrationen (intern)<br>
+
    i_c_e = get_i_c_e() #kohlenstoff/zucker, e.coli<br>
+
    i_c_s = get_i_c_s() #kohlenstoff/zucker, s.cervisae<br>
+
    i_c_se = get_i_c_se() #kohlenstoff/zucker, s.elongatus<br>
+
    i_n_e = get_i_n_e() #Stickstoff, e.coli<br>
+
    i_n_s = get_i_n_s() #Stickstoff, s.cervisae<br>
+
    i_n_se = get_i_n_se() #Stickstoff, s.elongatus<br>
+
    i_p_e = get_i_p_e() #Phosphor, e.coli<br>
+
    i_p_s = get_i_p_s() #Phosphor, s.cervisae<br>
+
    i_p_se = get_i_p_se() #Phosphor, s.elongatus<br>
+
    i_m = get_i_m() #Melanin<br>
+
    i_pa = get_i_pa() #Phosphit<br>
+
<br>
+
    #Übergibt Maximale Stoffkonzentrationen (intern)<br>
+
    m_c_e = get_m_c_e()<br>
+
    m_c_s = get_m_c_s()<br>
+
    m_c_se = get_m_c_se()<br>
+
    m_n_e = get_m_n_e()<br>
+
    m_n_s = get_m_n_s()<br>
+
    m_n_se = get_m_n_se()<br>
+
    m_p_e = get_m_p_e()<br>
+
    m_p_e = get_m_p_e()<br>
+
    m_p_se = get_m_p_se()<br>
+
    m_m = get_m_m()<br>
+
    m_pa = get_m_pa()<br>
+
<br>
+
    #Übergibt Metaboliten Geschwindigkeiten<br>
+
    sec = get_sec()<br>
+
    ssc = get_ssc()<br>
+
    sel = get_sel()<br>
+
    expsec = get_expsec()<br>
+
    expssc = get_expssc()<br>
+
    expsel = get_expsel()<br>
+
<br>
+
    #Übergibt Absorbationsgeschwindingikeiten<br>
+
    alpha_c_e = get_alpha_c_e()<br>
+
    alpha_c_s = get_alpha_c_s()<br>
+
    alpha_c_se = get_alpha_c_se()<br>
+
    alpha_n_e = get_alpha_n_e()<br>
+
    alpha_n_s = get_alpha_n_s()<br>
+
    alpha_n_se = get_alpha_n_se()<br>
+
    alpha_p_e = get_alpha_p_e()<br>
+
    alpha_p_s = get_alpha_p_s()<br>
+
    alpha_p_se = get_alpha_p_se()<br>
+
    alpha_m = get_alpha_m()<br>
+
    alpha_pa = get_alpha_pa()<br>
+
<br>
+
    #Übergibt Metaboliten Nutzung<br>
+
    use_c_e = get_use_c_e()<br>
+
    use_c_s = get_use_c_s()<br>
+
    use_c_se = get_use_c_se()<br>
+
    use_n_e = get_use_n_e()<br>
+
    use_n_s = get_use_n_s()<br>
+
    use_n_se = get_use_n_se()<br>
+
    use_p_e = get_use_p_e()<br>
+
    use_p_s = get_use_p_s()<br>
+
    use_p_se = get_use_p_se()<br>
+
<br>
+
<br>
+
    i = 0<br>
+
    Y_e = [e_coli]<br>
+
    Y_s = [s_cerevisiae]<br>
+
    Y_se = [s_elongatus]<br>
+
    <br>
+
    capacity_e = get_capacity_e()<br>
+
    capacity_s = get_capacity_s()<br>
+
    capacity_se = get_capacity_se()<br>
+
    <br>
+
    for j in t:<br>
+
        <br>
+
        add = min(alpha_m * ((m_m*(Y_e[i]/Y_e[0]) - i_m)/m_m), m)<br>
+
        i_m = i_m+add<br>
+
        m = m - add<br>
+
        ret = min(i_m, sec*(Y_e[i]/Y_e[0]))<br>
+
        n = n + ret<br>
+
        i_m = i_m - ret<br>
+
<br>
+
        add = min(alpha_pa * ((m_pa*(Y_s[i]/Y_s[0])-i_pa)/m_pa), pa)<br>
+
        i_pa = i_pa+add<br>
+
        pa = pa - add<br>
+
        ret = min(i_pa, ssc*(Y_s[i]/Y_s[0]))<br>
+
        p = p + ret<br>
+
        i_pa = i_pa - ret<br>
+
<br>
+
        add = min(alpha_c_e * ((m_c_e*(Y_e[i]/Y_e[0]) - i_c_e)/m_c_e), c)<br>
+
        i_c_e = i_c_e+add<br>
+
        growthf_c_e = min(i_c_e/(use_c_e*(Y_e[i]/Y_e[0])), 1)<br>
+
        i_c_e = i_c_e-growthf_c_e*use_c_e*(Y_e[i]/Y_e[0])<br>
+
        c = c-add<br>
+
<br>
+
        add = min(alpha_c_s * ((m_c_s*(Y_s[i]/Y_s[0]) - i_c_s)/m_c_s), c)<br>
+
        i_c_s = i_c_s+add<br>
+
        growthf_c_s = min(i_c_s/(use_c_s*(Y_s[i]/Y_s[0])), 1)<br>
+
        i_c_s = i_c_s - growthf_c_s*use_c_s*(Y_s[i]/Y_s[0])<br>
+
        c = c-add<br>
+
<br>
+
        add = min(alpha_c_se * ((m_c_se*(Y_se[i]/Y_se[0]) - i_c_se)/m_c_se), c)<br>
+
        i_c_se = i_c_se+add + sel - sel*expsel<br>
+
        growthf_c_se = min(i_c_se/(use_c_se*(Y_se[i]/Y_se[0])), 1)<br>
+
        i_c_se=i_c_se- growthf_c_se*use_c_se*(Y_se[i]/Y_se[0])<br>
+
        c = c-add  + sel*expsel*(Y_se[i]/Y_se[0]) <br>
+
<br>
+
        add = min(alpha_n_e * ((m_n_e*(Y_e[i]/Y_e[0]) - i_n_e)/m_n_e), n)<br>
+
        i_n_e = i_n_e+add<br>
+
        growthf_n_e = min(i_n_e/(use_n_e*(Y_e[i]/Y_e[0])), 1)<br>
+
        i_n_e = i_n_e-growthf_n_e*use_n_e*(Y_e[i]/Y_e[0])<br>
+
        n = n-add<br>
+
<br>
+
        add = min(alpha_n_s * ((m_n_s*(Y_s[i]/Y_s[0]) - i_n_s)/m_n_s), n)<br>
+
        i_n_s = i_n_s+add<br>
+
        growthf_n_s = min(i_n_s/(use_n_s*(Y_s[i]/Y_s[0])), 1)<br>
+
        i_n_s=i_n_s-growthf_n_s*use_n_s*(Y_s[i]/Y_s[0])<br>
+
        n = n-add<br>
+
<br>
+
        add = min(alpha_n_se * ((m_n_se*(Y_se[i]/Y_se[0]) - i_n_se)/m_n_se), n)<br>
+
        i_n_se = i_n_se+add<br>
+
        growthf_n_se = min(i_n_se/(use_n_se*(Y_se[i]/Y_se[0])), 1)<br>
+
        i_n_se = i_n_se-growthf_n_se*use_n_se*(Y_se[i]/Y_se[0])<br>
+
        n = n-add<br>
+
<br>
+
        add = min(alpha_p_e * ((m_p_e*(Y_e[i]/Y_e[0]) - i_p_e)/m_p_e), p)<br>
+
        i_p_e = i_p_e+add<br>
+
        growthf_p_e = min(i_p_e/(use_p_e*(Y_e[i]/Y_e[0])), 1)<br>
+
        i_p_e=i_p_e-growthf_p_e*use_p_e*(Y_e[i]/Y_e[0])<br>
+
        p = p-add<br>
+
        <br>
+
        add = min(alpha_p_s * ((m_p_s*(Y_s[i]/Y_s[0]) - i_p_s)/m_p_s), p)<br>
+
        i_p_s = i_p_s+add<br>
+
        growthf_p_s = min(i_p_s/(use_p_s*(Y_s[i]/Y_s[0])), 1)<br>
+
        i_p_s=i_p_s-growthf_p_s*use_p_s*(Y_s[i]/Y_s[0])<br>
+
        p = p-add<br>
+
<br>
+
        add = min(alpha_p_se * ((m_p_se*(Y_se[i]/Y_se[0]) - i_p_se)/m_p_se), p)<br>
+
        i_p_se = i_p_se+add<br>
+
        growthf_p_se = min(i_p_se/(use_p_se*(Y_se[i]/Y_se[0])), 1)<br>
+
        i_p_se=i_p_se-growthf_p_se*use_p_se*(Y_se[i]/Y_se[0])<br>
+
        p = p-add<br>
+
<br>
+
        if (growthf_c_e == 0 or growthf_n_e == 0 or growthf_p_e == 0):<br>
+
            growth_e = -0.1<br>
+
        else:<br>
+
            growth_e = min(growthf_c_e, growthf_n_e, growthf_p_e)<br>
+
        <br>
+
        if (growthf_c_s == 0 or growthf_n_s == 0 or growthf_p_s == 0):<br>
+
            growth_s = -0.1<br>
+
        else:<br>
+
            growth_s = min(growthf_c_s, growthf_n_s, growthf_p_s)<br>
+
            <br>
+
        if (growthf_c_se == 0 or growthf_n_se == 0 or growthf_p_se == 0):<br>
+
            growth_se = -0.1<br>
+
        else:<br>
+
            growth_se = min(growthf_c_se, growthf_n_se, growthf_p_se)<br>
+
<br>
+
        Y_e = Y_e + [Y_e[i]+growth_e * ((capacity_e - e_coli) / capacity_e)]<br>
+
        Y_s = Y_s + [Y_s[i]+growth_s * ((capacity_s - s_cerevisiae) / capacity_s)*(1/8)]<br>
+
        Y_se = Y_se + [Y_se[i]+growth_se * ((capacity_se - s_elongatus) / capacity_se)*(1/24)]<br>
+
<br>
+
        e_coli = Y_e[i]<br>
+
        s_cerevisiae = Y_s[i]<br>
+
        s_elongatus = Y_se[i]<br>
+
 
+
        i = i+1<br>
+
        <br>
+
    Y_e.pop();<br>
+
    Y_s.pop();<br>
+
    Y_se.pop();<br>
+
    return Y_e, Y_s, Y_se;<br>
+
<br>
+
fig = plt.figure()<br>
+
ax = plt.axes()<br>
+
<br>
+
Y = trinity();<br>
+
for i, species in enumerate(["$\t{E. coli}$", "$\t{S. cerevisiae}$", "$\t{S. elongatus}$"]):<br>
+
    plt.plot(t, Y[i], label=species)<br>
+
plt.legend(frameon=False, loc='upper right', ncol=1, labelspacing=1)<br>
+
plt.xlabel("Time in Hours")<br>
+
plt.ylabel("Dryweight in Mol")<br>
+
plt.show()<br>
+
</p>
+
  </div>
+
 
+
<button class="tablink" onclick="openCity('Info', this, 'gray')" id="defaultOpen">Info</button>
+
<button class="tablink" onclick="openCity('Code', this, 'gray')">Code</button>
+
 
+
 
</article>
 
</article>
 
<script>
 
function openCity(cityName,elmnt,color) {
 
  var i, tabcontent, tablinks;
 
  tabcontent = document.getElementsByClassName("tabcontent");
 
    for (i = 0; i < tabcontent.length; i++) {
 
        tabcontent[i].style.display = "none";
 
    }
 
    tablinks = document.getElementsByClassName("tablink");
 
    for (i = 0; i < tablinks.length; i++) {
 
        tablinks[i].style.backgroundColor = "";
 
    }
 
    document.getElementById(cityName).style.display = "block";
 
    elmnt.style.backgroundColor = color;
 
}
 
// Get the element with id="defaultOpen" and click on it
 
document.getElementById("defaultOpen").click();
 
</script>
 
 
 
</body>
 
</body>
 
</html>
 
</html>

Latest revision as of 03:40, 18 October 2018

Model



As the aim of our project is to construct a modular toolkit using co-cultures with three organisms, we would have to conduct many experimental interactions to reach conclusive and reliable results. To avoid this tedious process, we turned our attention to computer based biological modeling to predict the behavior of our system.
In the realm of mathematical and computer based biology, scientists use algorithms, data structure and data visualization to create approximations of existing biological systems. This serves two important goals;
One, to check whether the theoretical understanding of a process is correct. Of course, this can be done by constructing a model and checking if the cultures behave within reasonable correctness as the observations in the lab indicate.
The other goal of such modeling approach is to predict whether the behavior of the system are changed or other external influences are applied. This latter role is why we are using modeling in our project.
However, many of our team members lacked experience in this field. As such, we approached the Institute of Quantitative and Theoretical Biology at our university (Headed by Professor Dr. Oliver Ebenhöh) to discuss our approach.
The behavior of a co-culture is complex. Modeling in it’s entirety would be far too complex. As such we had to find a way to reduce this complexity. To achieve this, we began our work with laying out a few assumptions that would reduce the complexity of our system and give us a clear indicator of what went wrong if a prediction turned out to be incorrect. In our model we assumed that:

  1. The consumption of metabolites, especially for growth, occurs in discreet units.
  2. All organisms have equal access to the metabolites.
  3. There are no organism specific limits to metabolite uptake or release.
  4. Every metabolite are constant and optimal except the ones we control with.
  5. Growth as well as metabolic reactions are limited by low avalability as well as the slowest enzyme reaction, respectively.
  6. There is no change in the speed of reactions.
  7. The capacity of the system for each organism is set and not calculated dynamically.
  8. While phosphate and nitrogen are important for growth, only a complete lack of carbon (as a stand-in for sugar in our model) will result in starvation of the organisms.

Assumption 1 is a consequence of the way our model is calculated, the others are there to reduce complexity. As stated above, this reduced complexity also reflects a reduction in realism, however, our model has produced results that in our mind, make a more complex approach unnecessary for now.

Our model is iteractive and goes though the following equations for each organism and metabolite each iteration:

Here, add represents the additional metabolite influx per iteration. α is the organism and metabolite specific uptake speed, mc is the maximum possible concentration of the specific metabolite in the organism, Ye[i] is the current dry weight (in mol) of the organism and Ye[0] is the initial dry weight. ic is the current metabolite mass inside the organism (in mol) and C is the mass of metabolite (in mol) inside the medium. usec is the specific metabolite mass the organisms the organism uses each iteration in it’s growth, whereas growthfc, growthfn, and growthfp are the metabolite specific growth factors. The lowest of these is chosen as the overall growth factor growth and then used in the calculation of the new population size Ye[i+1]. The last equation converts the calculated biomass of the specific organism Yo[i] into the cell count cco[i] of that specific organism at that specific time. This is done by multiplying the biomass with the specific molar weight smw[o] times five (a rule of thumb from dry weight to wet weight) and dividing by the specific cell weight of that organism scw[o].

As stated above, these calculations are performed for each organism and each metabolite. the resulting populations lists are then plotted via the Python package Matplotlib (as you can see in the code we provided at the end of the page).
This produces a graph that shows what the growth and population sizes of our system look like within a predetermined time frame. This tells us which ratio of metabolite concentration to population sizes is necessary for the system to remain stable over a given period of time. This gives us a range of concentrations that we can then verify in the lab. This reduces the amount of experiments we have to conduct to reach our goal of establishing a stable, purpose-engineered three organism coculture.
Of course observation in the lab take precedent over our model. And data that is in conflict with the prediction of our model will always be given priority. Until now however, our model has been correct. Thus far, it has revealed that the same problem is the supplying the system with sugar, as S. elongatus is has the lowest doubling time and appears to be the main bottleneck. Below a few example models are supplied, with varying amounts of metabolite supplied at the beginning.

Here are a few examples where we used our three model organisms E. coli, S. cerevisiae and S. elongatus and plotted their growth over the course of 48 hours. Changed are the concentrations of the metabolites we control with, in our example this is carbon, nitrogen and phosphorus, in the medium, but everything else was kept at the same value;


  1. Figure 1: Logarithmic graph of the growth of our co-culture organisms over a period of 48 h, with an initial metabolite (glucose, nitrogen, phosphorus, ammonium, sulfat and phosphite) amount auf 25 mol each.


  2. Figure 2: Logarithmic graph of the growth of our co-culture organisms over a period of 48 h, with an initial metabolite (glucose, nitrogen, phosphorus, ammonium, sulfat and phosphite) amount auf 50 mol each.


  3. Figure 1: Logarithmic graph of the growth of our co-culture organisms over a period of 48 h, with an initial metabolite (glucose, nitrogen, phosphorus, ammonium, sulfat and phosphite) amount auf 100 mol each.

As stated above, each of our assumption attempts to reduce complexity also limits realism. If given more time we could further refine our model and start working without our assumptions. This would increase the accuracy of our predictions and would further our understanding of co-cultures and microbe interaction.
It would however also necessitate more experiments to verify our predictions, which was something we didn’t have the time for.
Another possibility we could not pursue was interactivity and the option to include other organisms in our model. We hoped that we could construct a model that would receive a selection of organisms, metabolites that bind the organisms together and a time frame and from that calculate the optimal medium composition as well as initial population sizes to keep the co-culture stable.
We believe that this is possible with our model and if we would have had more time to verify our modeling of our lab work, we could have realized this idea.

Code

Provided below is a download link to the Python code that makes up our model:
(Note that; we used the jupyter Notebook Editor for our work and we recommend using it as well if you want to try out our model!)

Model Code