Difference between revisions of "Team:KU Leuven/Modeling/Hybrid"
(22 intermediate revisions by the same user not shown) | |||
Line 630: | Line 630: | ||
$\bar{n}$: indicates average over $[n; n+1]$ [h]<br/> | $\bar{n}$: indicates average over $[n; n+1]$ [h]<br/> | ||
$k$: degradation constant [1/h]<br/> | $k$: degradation constant [1/h]<br/> | ||
+ | </p> | ||
+ | </div> | ||
+ | </div> | ||
+ | |||
+ | <div class="sidebarright"> | ||
+ | <div id="eq39text"> | ||
+ | <p> | ||
+ | $\delta^2_x$: second order finite difference operator [-]<br/> | ||
+ | $C$: concentration [nmol/cl]<br/> | ||
+ | $i$: index of grid point along x-direction<br/> | ||
+ | $j$: index of grid point along y-direction<br/> | ||
+ | </p> | ||
+ | </div> | ||
+ | </div> | ||
+ | |||
+ | <div class="sidebarright"> | ||
+ | <div id="eq40text"> | ||
+ | <p> | ||
+ | $\delta^2_x$: second order finite difference operator [-]<br/> | ||
+ | $C$: concentration [nmol/cl]<br/> | ||
+ | $i$: index of grid point along x-direction<br/> | ||
+ | $j$: index of grid point along y-direction<br/> | ||
+ | $J_x$: maximum index along x-direction<br/> | ||
+ | $J_y$: maximum index along y-direction<br/> | ||
</p> | </p> | ||
</div> | </div> | ||
Line 722: | Line 746: | ||
PDE module are discussed in more depth and the issue of matching is highlighted. | PDE module are discussed in more depth and the issue of matching is highlighted. | ||
We also expand on important aspects of the model and its implementation such as | We also expand on important aspects of the model and its implementation such as | ||
− | + | boundary conditions and choice of timesteps. Then the results of the | |
− | + | simulations are shown and summarized. Finally, the incorporation | |
− | of the internal model into the hybrid model is discussed | + | of the internal model into the hybrid model is discussed. |
− | + | ||
</p> | </p> | ||
</div><!-- part --> | </div><!-- part --> | ||
Line 1,017: | Line 1,040: | ||
width="70%" | width="70%" | ||
></a> | ></a> | ||
− | <h4><div id= | + | <h4><div id=figure3>Figure 3</div> |
Sketch of swimming bacterium. Click to enlarge.</h4> | Sketch of swimming bacterium. Click to enlarge.</h4> | ||
</div><!-- image3 --> | </div><!-- image3 --> | ||
Line 1,180: | Line 1,203: | ||
interaction of cell A with another cell A. The interaction between two cells is | interaction of cell A with another cell A. The interaction between two cells is | ||
usually expressed by a potential energy curve defined over the distance between | usually expressed by a potential energy curve defined over the distance between | ||
− | the centers of mass of the two cells (Figure | + | the centers of mass of the two cells (Figure 4). |
</p> | </p> | ||
<div class="center"> | <div class="center"> | ||
− | <div id=" | + | <div id="image4"> |
<a class="example-image-link" href="https://static.igem.org/mediawiki/2015/e/e6/KU_Leuven_CellCellInt.png" data-lightbox="example-set" data-title="Illustration of cell-cell interaction potential"><img class="example-image" src="https://static.igem.org/mediawiki/2015/e/e6/KU_Leuven_CellCellInt.png" alt="Illustration of cell-cell interaction potential" width="45%" height="45%"></a> | <a class="example-image-link" href="https://static.igem.org/mediawiki/2015/e/e6/KU_Leuven_CellCellInt.png" data-lightbox="example-set" data-title="Illustration of cell-cell interaction potential"><img class="example-image" src="https://static.igem.org/mediawiki/2015/e/e6/KU_Leuven_CellCellInt.png" alt="Illustration of cell-cell interaction potential" width="45%" height="45%"></a> | ||
− | <h4><div id= | + | <h4><div id=figure4>Figure 4</div>Cell-cell interaction potential. Click to enlarge.</h4> |
</div><!-- image2 --> | </div><!-- image2 --> | ||
</div><!-- center --> | </div><!-- center --> | ||
Line 1,202: | Line 1,225: | ||
linear force that resembles Hooke’s law, but with three different “spring | linear force that resembles Hooke’s law, but with three different “spring | ||
constants” acting in different intervals of intercellular distances (10), | constants” acting in different intervals of intercellular distances (10), | ||
− | as illustrated in Figure | + | as illustrated in Figure 5. The force is defined with respect to |
the unit vector pointing towards the other cell, meaning that a positive | the unit vector pointing towards the other cell, meaning that a positive | ||
force corresponds to an attractive force and vice-versa. | force corresponds to an attractive force and vice-versa. | ||
Line 1,208: | Line 1,231: | ||
<div class="center"> | <div class="center"> | ||
− | <div id=" | + | <div id="image5"> |
<a class="example-image-link" href="https://static.igem.org/mediawiki/2015/8/89/KU_Leuven_potential_force_curve.png" data-lightbox="example-set" data-title="Cell-cell interaction potential and force curves"><img class="example-image" src="https://static.igem.org/mediawiki/2015/8/89/KU_Leuven_potential_force_curve.png" alt="Cell-cell interaction potential and force curves" width="45%" height="45%"></a> | <a class="example-image-link" href="https://static.igem.org/mediawiki/2015/8/89/KU_Leuven_potential_force_curve.png" data-lightbox="example-set" data-title="Cell-cell interaction potential and force curves"><img class="example-image" src="https://static.igem.org/mediawiki/2015/8/89/KU_Leuven_potential_force_curve.png" alt="Cell-cell interaction potential and force curves" width="45%" height="45%"></a> | ||
− | <h4><div id= | + | <h4><div id=figure5>Figure 5</div>Cell-cell interaction potential and force curves. Click to enlarge.</h4> |
</div><!-- image2 --> | </div><!-- image2 --> | ||
</div><!-- center --> | </div><!-- center --> | ||
Line 1,444: | Line 1,467: | ||
kernel function that represents the density of a single data point, then | kernel function that represents the density of a single data point, then | ||
centering kernel functions on every data point and summing them all up to | centering kernel functions on every data point and summing them all up to | ||
− | achieve a smooth overall density function, as demonstrated in the Figure | + | achieve a smooth overall density function, as demonstrated in the Figure 6. </p> |
<div class="center"> | <div class="center"> | ||
− | <div id=" | + | <div id="image6"> |
<a class="example-image-link" href="https://static.igem.org/mediawiki/2015/9/9c/KU_Leuven_KernelSum.png" | <a class="example-image-link" href="https://static.igem.org/mediawiki/2015/9/9c/KU_Leuven_KernelSum.png" | ||
data-lightbox="example-set" data-title="Kernel density estimation"> | data-lightbox="example-set" data-title="Kernel density estimation"> | ||
Line 1,453: | Line 1,476: | ||
src="https://static.igem.org/mediawiki/2015/9/9c/KU_Leuven_KernelSum.png" | src="https://static.igem.org/mediawiki/2015/9/9c/KU_Leuven_KernelSum.png" | ||
alt="Kernel sum" width="50%" ></a> | alt="Kernel sum" width="50%" ></a> | ||
− | <h4><div id= | + | <h4><div id=figure6>Figure 6</div> Kernel density estimation. Click to enlarge.</h4> |
</div><!-- image1 --> | </div><!-- image1 --> | ||
</div><!-- center --> | </div><!-- center --> | ||
Line 1,466: | Line 1,489: | ||
<div class="center"> | <div class="center"> | ||
− | <div id=" | + | <div id="image7"> |
<a class="example-image-link" | <a class="example-image-link" | ||
href="https://static.igem.org/mediawiki/2015/8/88/KU_Leuven_variousKernelTypes.png" | href="https://static.igem.org/mediawiki/2015/8/88/KU_Leuven_variousKernelTypes.png" | ||
Line 1,475: | Line 1,498: | ||
alt="Gaussian, triangular and Epanechnikov kernel functions" | alt="Gaussian, triangular and Epanechnikov kernel functions" | ||
width="60%"></a> | width="60%"></a> | ||
− | <h4><div id= | + | <h4><div id=figure7>Figure 7</div> |
Gaussian, triangular and Epanechnikov kernel functions. | Gaussian, triangular and Epanechnikov kernel functions. | ||
Click to enlarge.</h4> | Click to enlarge.</h4> | ||
Line 1,521: | Line 1,544: | ||
</p> | </p> | ||
<div class="center"> | <div class="center"> | ||
− | <div id=" | + | <div id="image8"> |
<a class="example-image-link" href="https://static.igem.org/mediawiki/2015/5/52/KU_Leuven_EpanechnikovDifferentBandwidth.png" data-lightbox="example-set" data-title="Epanechnikov kernel using different bandwidths"><img class="example-image" src="https://static.igem.org/mediawiki/2015/5/52/KU_Leuven_EpanechnikovDifferentBandwidth.png" alt="Epanechnikov kernel using different bandwidths" width="45%"></a> | <a class="example-image-link" href="https://static.igem.org/mediawiki/2015/5/52/KU_Leuven_EpanechnikovDifferentBandwidth.png" data-lightbox="example-set" data-title="Epanechnikov kernel using different bandwidths"><img class="example-image" src="https://static.igem.org/mediawiki/2015/5/52/KU_Leuven_EpanechnikovDifferentBandwidth.png" alt="Epanechnikov kernel using different bandwidths" width="45%"></a> | ||
− | <h4><div id= | + | <h4><div id=figure8>Figure 8</div>Epanechnikov kernels using different bandwidths. Click to enlarge.</h4> |
</div><!-- image3 --> | </div><!-- image3 --> | ||
</div><!-- center --> | </div><!-- center --> | ||
Line 1,538: | Line 1,561: | ||
</p> | </p> | ||
<div class="center"> | <div class="center"> | ||
− | <div id=" | + | <div id="image9"> |
<a class="example-image-link" href="https://static.igem.org/mediawiki/2015/1/15/KU_Leuven_bandwidth_density.png" data-lightbox="example-set" data-title="Kernel density estimation using different bandwidths"><img class="example-image" src="https://static.igem.org/mediawiki/2015/1/15/KU_Leuven_bandwidth_density.png" alt="Kernel density estimation using different bandwidths" width="70%"></a> | <a class="example-image-link" href="https://static.igem.org/mediawiki/2015/1/15/KU_Leuven_bandwidth_density.png" data-lightbox="example-set" data-title="Kernel density estimation using different bandwidths"><img class="example-image" src="https://static.igem.org/mediawiki/2015/1/15/KU_Leuven_bandwidth_density.png" alt="Kernel density estimation using different bandwidths" width="70%"></a> | ||
− | <h4><div id= | + | <h4><div id=figure9>Figure 9</div>Kernel density estimation using different bandwidths. Click to enlarge.</h4> |
</div><!-- image3 --> | </div><!-- image3 --> | ||
</div><!-- center --> | </div><!-- center --> | ||
Line 1,620: | Line 1,643: | ||
<div class="center"> | <div class="center"> | ||
− | <div id=" | + | <div id="image10"> |
<a class="example-image-link" | <a class="example-image-link" | ||
href="https://static.igem.org/mediawiki/2015/9/9f/KU_Leuven_linear_interpolation.png" | href="https://static.igem.org/mediawiki/2015/9/9f/KU_Leuven_linear_interpolation.png" | ||
Line 1,631: | Line 1,654: | ||
></a> | ></a> | ||
<h4> | <h4> | ||
− | <div id= | + | <div id=figure10>Figure 10</div> |
Illustration of linear interpolation. Click to enlarge.</h4> | Illustration of linear interpolation. Click to enlarge.</h4> | ||
</div><!-- image8 --> | </div><!-- image8 --> | ||
Line 1,656: | Line 1,679: | ||
<div class="center"> | <div class="center"> | ||
− | <div id=" | + | <div id="image11"> |
<a class="example-image-link" | <a class="example-image-link" | ||
href="https://static.igem.org/mediawiki/2015/c/c1/KU_Leuven_bilinear_interpolation.png" | href="https://static.igem.org/mediawiki/2015/c/c1/KU_Leuven_bilinear_interpolation.png" | ||
Line 1,667: | Line 1,690: | ||
></a> | ></a> | ||
<h4> | <h4> | ||
− | <div id= | + | <div id=figure11>Figure 11</div> |
Illustration of bilinear interpolation. Click to enlarge.</h4> | Illustration of bilinear interpolation. Click to enlarge.</h4> | ||
</div><!-- image9 --> | </div><!-- image9 --> | ||
Line 1,755: | Line 1,778: | ||
<div class="center"> | <div class="center"> | ||
− | <div id=" | + | <div id="image12"> |
<a class="example-image-link" | <a class="example-image-link" | ||
href="https://static.igem.org/mediawiki/2015/b/b3/KU_Leuven_hybrid_model_summary.jpg" | href="https://static.igem.org/mediawiki/2015/b/b3/KU_Leuven_hybrid_model_summary.jpg" | ||
Line 1,766: | Line 1,789: | ||
</a> | </a> | ||
<h4> | <h4> | ||
− | <div id= | + | <div id=figure12>Figure 12</div> |
Graphical summary of hybrid model. Click to enlarge.</h4> | Graphical summary of hybrid model. Click to enlarge.</h4> | ||
</div><!-- image10 --> | </div><!-- image10 --> | ||
Line 1,860: | Line 1,883: | ||
<div class="center"> | <div class="center"> | ||
− | <div id=" | + | <div id="image13"> |
<a class="example-image-link" href="https://static.igem.org/mediawiki/2015/2/26/Cells_algorithm.png" | <a class="example-image-link" href="https://static.igem.org/mediawiki/2015/2/26/Cells_algorithm.png" | ||
data-lightbox="example-set" data-title="Cell assignment"> | data-lightbox="example-set" data-title="Cell assignment"> | ||
Line 1,866: | Line 1,889: | ||
src="https://static.igem.org/mediawiki/2015/2/26/Cells_algorithm.png" | src="https://static.igem.org/mediawiki/2015/2/26/Cells_algorithm.png" | ||
alt="Kernel sum" width="50%" ></a> | alt="Kernel sum" width="50%" ></a> | ||
− | <h4><div id= | + | <h4><div id=figure13>Figure 13</div> Cell assignment. Click to enlarge.</h4> |
</div><!-- image1 --> | </div><!-- image1 --> | ||
</div><!-- center --> | </div><!-- center --> | ||
Line 1,881: | Line 1,904: | ||
<div class="center"> | <div class="center"> | ||
− | <div id=" | + | <div id="image14"> |
<a class="example-image-link" href="https://static.igem.org/mediawiki/2015/8/8b/Cells_algorithm2.png" | <a class="example-image-link" href="https://static.igem.org/mediawiki/2015/8/8b/Cells_algorithm2.png" | ||
data-lightbox="example-set" data-title="Cell assignment"> | data-lightbox="example-set" data-title="Cell assignment"> | ||
Line 1,887: | Line 1,910: | ||
src="https://static.igem.org/mediawiki/2015/8/8b/Cells_algorithm2.png" | src="https://static.igem.org/mediawiki/2015/8/8b/Cells_algorithm2.png" | ||
alt="Kernel sum" width="50%" ></a> | alt="Kernel sum" width="50%" ></a> | ||
− | <h4><div id= | + | <h4><div id=figure14>Figure 14</div> Neighbor search in adjacent cells. Click to enlarge.</h4> |
</div><!-- image1 --> | </div><!-- image1 --> | ||
</div><!-- center --> | </div><!-- center --> | ||
+ | <div class="whiterow"></div> | ||
</div><!-- toggleeight --> | </div><!-- toggleeight --> | ||
Line 2,151: | Line 2,175: | ||
<div class="center"> | <div class="center"> | ||
− | <div id=" | + | <div id="image15"> |
<a class="example-image-link" href="https://static.igem.org/mediawiki/2015/6/64/Periodic_boundary_conditions.svg" | <a class="example-image-link" href="https://static.igem.org/mediawiki/2015/6/64/Periodic_boundary_conditions.svg" | ||
data-lightbox="example-set" data-title="Periodic boundary conditions"> | data-lightbox="example-set" data-title="Periodic boundary conditions"> | ||
Line 2,157: | Line 2,181: | ||
src="https://static.igem.org/mediawiki/2015/6/64/Periodic_boundary_conditions.svg" | src="https://static.igem.org/mediawiki/2015/6/64/Periodic_boundary_conditions.svg" | ||
alt="Periodic boundary conditions" width="50%" ></a> | alt="Periodic boundary conditions" width="50%" ></a> | ||
− | <h4><div id= | + | <h4><div id=figure15>Figure 15</div> Periodic boundary conditions. Click to enlarge.</h4> |
</div><!-- image1 --> | </div><!-- image1 --> | ||
</div><!-- center --> | </div><!-- center --> | ||
Line 2,355: | Line 2,379: | ||
<div class="center"> | <div class="center"> | ||
− | <div id=" | + | <div id="image16"> |
<a class="example-image-link" href="https://static.igem.org/mediawiki/2015/f/f7/KU_Leuven_ADI_Molecule.png" data-lightbox="example-set" data-title="Epanechnikov kernel with h=1"><img class="example-image" src="https://static.igem.org/mediawiki/2015/f/f7/KU_Leuven_ADI_Molecule.png" alt="Epanechnikov kernel with h=1" width="45%" height="45%"></a> | <a class="example-image-link" href="https://static.igem.org/mediawiki/2015/f/f7/KU_Leuven_ADI_Molecule.png" data-lightbox="example-set" data-title="Epanechnikov kernel with h=1"><img class="example-image" src="https://static.igem.org/mediawiki/2015/f/f7/KU_Leuven_ADI_Molecule.png" alt="Epanechnikov kernel with h=1" width="45%" height="45%"></a> | ||
− | <h4><div id= | + | <h4><div id=figure16>Figure 16</div> ADI-Molecule. Click to enlarge.</h4> |
</div><!-- image2 --> | </div><!-- image2 --> | ||
</div><!-- center --> | </div><!-- center --> | ||
Line 2,370: | Line 2,394: | ||
<div id="toggletwelve"> | <div id="toggletwelve"> | ||
<p> | <p> | ||
− | + | As explained above in the implementation of the agent-based module, | |
+ | we chose to use periodic boundary conditions for our system. The | ||
+ | field should thus repeat itself in all directions. In the PDE-based | ||
+ | module, this comes down to equating the “missing” neighbor of a | ||
+ | grid point on the edge of the domain to the grid point at the | ||
+ | opposite edge of the domain. Assuming our grid consists of | ||
+ | $J_x\;x\;J_y$ | ||
+ | points, the grid point to the “left” of $C_1,j$ is for example | ||
+ | $C_{J_x},j$. | ||
+ | Conversely the grid point to the “right” of $C_{J_x},j$ is $C_1,j$. This | ||
+ | impacts our computational scheme through a modified finite difference | ||
+ | expression for grid points on the edge of the domain. The regular | ||
+ | form is defined as (31). | ||
+ | </p> | ||
+ | <div id="eq39"> | ||
+ | <p> | ||
+ | $$ | ||
+ | \delta^2_x C_{i,j}=C_{i-1,j}-2\cdot C_{i,j}+C_{i+1,j} | ||
+ | \;\;\; \text{(31a)} | ||
+ | $$ | ||
+ | $$ | ||
+ | \delta^2_y C_{i,j}=C_{i,j-1}-2\cdot C_{i,j}+C_{i,j+1} | ||
+ | \;\;\; \text{(31b)} | ||
+ | $$ | ||
+ | </p> | ||
+ | </div> | ||
+ | <p> | ||
+ | However, for the outermost grid points of our domain the finite | ||
+ | difference is defined as (32). | ||
+ | </p> | ||
+ | <div id="eq40"> | ||
+ | <p> | ||
+ | $$ | ||
+ | \delta^2_x C_{1,j}=C_{J_x,j}-2\cdot C_{1,j}+C_{2,j} | ||
+ | \;\;\; \text{(32a)} | ||
+ | $$ | ||
+ | $$ | ||
+ | \delta^2_x C_{J_x,j}=C_{J_x-1,j}-2\cdot C_{J_x,j}+C_{1,j} | ||
+ | \;\;\; \text{(32b)} | ||
+ | $$ | ||
+ | $$ | ||
+ | \delta^2_y C_{i,1}=C_{i,J_y}-2\cdot C_{i,1}+C_{i,2} | ||
+ | \;\;\; \text{(32c)} | ||
+ | $$ | ||
+ | $$ | ||
+ | \delta^2_y C_{i,J_y}=C_{i,J_y-1}-2\cdot C_{i,J_y}+C_{i,1} | ||
+ | \;\;\; \text{(32d)} | ||
+ | $$ | ||
+ | </p> | ||
+ | </div> | ||
+ | <p> | ||
+ | Implementing these | ||
+ | adjusted finite difference expressions in our computational schemes | ||
+ | breaks the bandedness of our matrices, but the result is still a | ||
+ | nearly-banded sparse matrix for which efficient methods also exist. | ||
+ | Therefore, we can implement periodic boundary conditions efficiently. | ||
+ | |||
</p> | </p> | ||
</div><!-- toggletwelve --> | </div><!-- toggletwelve --> | ||
Line 2,400: | Line 2,480: | ||
<div id="toggle13"> | <div id="toggle13"> | ||
<p> | <p> | ||
− | + | In order to benefit from the implicit PDE-solver described | |
− | + | above the agent's timestep is chosen smaller | |
− | + | then the timestep of the PDE solver. | |
− | + | As a result, the agent density field goes through several | |
− | + | timesteps before the PDE solver takes one timestep. | |
− | + | The question then becomes at which timestep the | |
− | + | density field should be sampled to provide the source term in the PDEs. | |
− | + | If only the density field at one particular timestep is chosen to | |
− | + | represent the density field during the entire interval $[t;t+\Delta t]$, | |
− | + | it is clear that a lot of information is lost because type A | |
− | + | cells produce molecules continuously as they move | |
− | + | trough space. | |
− | + | <br/><br/> | |
− | + | Therefore we record the density fields at all timesteps and | |
− | + | since the last PDE evaluation and average of them. That way | |
− | + | we avoid skewing the results of the PDE solver | |
+ | too much when the time step of the agents is reduced. | ||
+ | In the videoplayer below we illustrate this using a simple system | ||
+ | involving a single agent moving along a quasi-1-dimensional domain | ||
+ | with a smaller timestep than the PDE solver. When the density | ||
+ | is not averaged, the production of AHL and leucine appear to be spiked | ||
+ | at regular intervals. However, when our averaging method is used | ||
+ | the production shows a more uniform profile, which is closer to | ||
+ | the ideal case of continuous production. | ||
+ | </p> | ||
+ | <!-- third Videobox start--> | ||
+ | <video id="video4" preload="auto" width="100%" tabindex="0" controls="" type="video/mp4"> | ||
+ | <source type="video/mp4" src="https://static.igem.org/mediawiki/2015/2/22/Not_averaged.mp4"> | ||
+ | Sorry, your browser does not support HTML5 video. | ||
+ | </video> | ||
+ | <br/> | ||
+ | <button type="button" onclick="Set10()">Not averaged</button> | ||
+ | <button type="button" onclick="Set11()">Averaged</button> | ||
+ | <script> | ||
+ | function Set10() { | ||
+ | document.querySelector("#video4 > source").src = "https://static.igem.org/mediawiki/2015/2/22/Not_averaged.mp4" | ||
+ | document.querySelector("#video4").load(); | ||
+ | document.querySelector("#video4").play(); | ||
+ | } | ||
+ | function Set11() { | ||
+ | document.querySelector("#video4 > source").src = "https://static.igem.org/mediawiki/2015/f/f5/Averaged.mp4" | ||
+ | document.querySelector("#video4").load(); | ||
+ | document.querySelector("#video4").play(); | ||
+ | } | ||
+ | </script> | ||
− | + | ||
− | + | <div class="whiterow"></div> | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
</div><!-- toggle13 --> | </div><!-- toggle13 --> | ||
</div><!-- togglebar --> | </div><!-- togglebar --> | ||
<div class="togglebar"> | <div class="togglebar"> | ||
− | <div class=" | + | <div class="toggle15"> |
<h2>Bandwidth Tuning</h2> | <h2>Bandwidth Tuning</h2> | ||
</div> | </div> | ||
− | <div id=" | + | <div id="toggle15"> |
<p> | <p> | ||
− | + | As we scaled up our model to realistic dimensions we found that the | |
− | </p> | + | discretization of the PDE grid had to grow very large relative to |
− | </div><!-- | + | the size of bacteria. Therefore, if we kept the bandwidth constant |
+ | while scaling up the grid size, it would become possible for | ||
+ | the grid to "miss" the bacteria. Indeed, as the reach of the kernel functions | ||
+ | stays constant and the distance between adjacent grid points becomes | ||
+ | larger than the diameter of kernel functions, agents will | ||
+ | inevitably start falling off the radar. In the extreme case of small | ||
+ | bandwidth and large grid spacing, no agents will be picked up by | ||
+ | density calculations at all and their contribution to AHL and leucine | ||
+ | production will be completely lost. | ||
+ | <br\><br\> | ||
+ | Therefore, as the PDE grid is scaled up, the bandwidth needs to be increased | ||
+ | accordingly. | ||
+ | However this | ||
+ | inflation of the bandwidth can lead to a situation where the kernel function | ||
+ | covers significantly more area than what the actual | ||
+ | bacterium physically occupies. In this case the interpretation | ||
+ | the kernel function can be altered to represent | ||
+ | a probability function for | ||
+ | a cell's position. | ||
+ | We were able to avoid increasing the bandwidth to unrealistic proportions | ||
+ | while scaling up the PDE grid dimensions by | ||
+ | running our simulations at the | ||
+ | Flemish Supercomputer Center (VSC). | ||
+ | </p> | ||
+ | <div class="center"> | ||
+ | <div id="image17"> | ||
+ | <a class="example-image-link" href="https://www.vscentrum.be/img/svg/logo.svg" data-lightbox="example-set" data-title="Logo of the Flemish Supercomputing Center (VSC)"><img class="example-image" src="https://www.vscentrum.be/img/svg/logo.svg" alt="Logo Flemish Supercomputer Center" width="70%" height="70%"></a> | ||
+ | <h4><div id=figure17>Figure 17</div> Logo of the Flemish Supercomputer Center. Click to enlarge.</h4> | ||
+ | </div> | ||
+ | </div><!-- center --> | ||
+ | </div><!-- toggle15 --> | ||
</div><!-- togglebar --> | </div><!-- togglebar --> | ||
+ | <div="whiterow"></div> | ||
+ | <div="whiterow"></div> | ||
+ | <div="whiterow"></div> | ||
</div><!-- center, end of toggles --> | </div><!-- center, end of toggles --> | ||
+ | <!-- comment out 1-D simulations, not revelant to flow of page | ||
<div class="whiterow"></div> | <div class="whiterow"></div> | ||
− | |||
<div class="summaryheader"> | <div class="summaryheader"> | ||
<div class="summaryimg"> | <div class="summaryimg"> | ||
Line 2,447: | Line 2,584: | ||
<div class="head"> | <div class="head"> | ||
<h2>1-D Hybrid Model</h2> | <h2>1-D Hybrid Model</h2> | ||
− | </div> | + | </div><!-- head |
− | </div> | + | </div><!-- summaryimg |
− | </div> | + | </div><!-- summaryheader |
<div class="summarytext1"> | <div class="summarytext1"> | ||
<div class="part"> | <div class="part"> | ||
− | <!-- first Videobox start | + | <!-- first Videobox start |
<video id="video1" preload="auto" width="65%" tabindex="0" controls="" type="video/mp4"> | <video id="video1" preload="auto" width="65%" tabindex="0" controls="" type="video/mp4"> | ||
<source type="video/mp4" src="https://static.igem.org/mediawiki/2015/d/df/KU_Leuven_hybrid_1-D.mp4"> | <source type="video/mp4" src="https://static.igem.org/mediawiki/2015/d/df/KU_Leuven_hybrid_1-D.mp4"> | ||
Line 2,470: | Line 2,607: | ||
function Set2() { | function Set2() { | ||
− | document.querySelector("#video1 > source").src = "https://static.igem.org/mediawiki/2015/3/3d/KU_Leuven_1- | + | document.querySelector("#video1 > source").src = "https://static.igem.org/mediawiki/2015/3/3d/KU_Leuven_1-D_random_step.mp4" |
− | + | ||
document.querySelector("#video1").load(); | document.querySelector("#video1").load(); | ||
document.querySelector("#video1").play(); | document.querySelector("#video1").play(); | ||
} | } | ||
</script> | </script> | ||
− | <!-- video end | + | <!-- video end |
<p> </br>The video box above shows one dimensional simulation results for the hybrid model. A constant speed and random step | <p> </br>The video box above shows one dimensional simulation results for the hybrid model. A constant speed and random step | ||
simulation has been computed. We observe that the bacteria form a traveling wave in both cases, which is essential | simulation has been computed. We observe that the bacteria form a traveling wave in both cases, which is essential | ||
Line 2,483: | Line 2,619: | ||
</p> | </p> | ||
− | </div> | + | </div><!-- part |
− | </div> | + | </div><!-- summarytext1 |
+ | -->--> | ||
<div class="summaryheader"> | <div class="summaryheader"> | ||
<div class="summaryimg"> | <div class="summaryimg"> | ||
Line 2,490: | Line 2,627: | ||
width="100%"> | width="100%"> | ||
<div class="head"> | <div class="head"> | ||
− | <h2> | + | <h2>Results</h2> |
</div> | </div> | ||
</div> | </div> | ||
Line 2,503: | Line 2,640: | ||
</video> | </video> | ||
</br> | </br> | ||
− | <button type="button" onclick="Set3()">Initial condition 1</button> | + | <button type="button" onclick="Set3()">Initial condition 1 top view</button> |
− | <button type="button" onclick="Set4()">Initial condition 2</button> | + | <button type="button" onclick="Set4()">Initial condition 2 top view</button> |
− | <button type="button" onclick="Set5()">Initial condition 1</button> | + | <button type="button" onclick="Set5()">Initial condition 1 3D view</button> |
− | <button type="button" onclick="Set6()">Initial condition 2</button> | + | <button type="button" onclick="Set6()">Initial condition 2 3D view</button> |
− | <button type="button" onclick="Set7()">Random | + | <button type="button" onclick="Set7()">Random initial conditions</button> |
+ | <button type="button" onclick="Set12()">Negative control</button> | ||
<script> | <script> | ||
function Set3() { | function Set3() { | ||
Line 2,536: | Line 2,674: | ||
document.querySelector("#video2 > source").src = "https://static.igem.org/mediawiki/2015/4/4d/KU_Leuven_Hybrid5_2d_clean.mp4" | document.querySelector("#video2 > source").src = "https://static.igem.org/mediawiki/2015/4/4d/KU_Leuven_Hybrid5_2d_clean.mp4" | ||
+ | document.querySelector("#video2").load(); | ||
+ | document.querySelector("#video2").play(); | ||
+ | } | ||
+ | function Set12() { | ||
+ | |||
+ | document.querySelector("#video2 > source").src = "https://static.igem.org/mediawiki/2015/2/2e/No_cell_cell_interactions.mp4" | ||
document.querySelector("#video2").load(); | document.querySelector("#video2").load(); | ||
document.querySelector("#video2").play(); | document.querySelector("#video2").play(); | ||
Line 2,541: | Line 2,685: | ||
</script> | </script> | ||
<!-- video end --> | <!-- video end --> | ||
− | + | <p></br> | |
− | + | The videos above show the results of simulations that were run | |
− | + | at the Flemish Supercomputer Center. | |
− | + | Three different initial conditions similar to those used in | |
− | + | the colony level model were used. | |
− | + | The first and second initial conditions correspond to | |
− | + | colonies of both cell types arranged into a block and | |
− | + | a star-shaped pattern respectively. Cell type B can be seen | |
+ | fleeing the colonies due to the production of AHL and leucine | ||
+ | by cell type A. Therefore the system evolves qualitatively in | ||
+ | the same way as in the colony level model. | ||
+ | <br/><br/> | ||
+ | However, the model exhibits very different behavior when | ||
+ | the initial positions of bacteria are random. Whereas | ||
+ | the colony level model did not evolve into any convincing | ||
+ | pattern, cell types A and B clearly separate into different | ||
+ | domains in our hybrid model. Cells of type A cluster into blob-like | ||
+ | formations while cells of type B fill up the space in between. | ||
+ | Our hypothesis therefore is that the sticky membrane proteins | ||
+ | expressed by cells A is crucial for the formation of regular patterns. | ||
+ | To verify this, we performed a negative control by disabling | ||
+ | the attractive cell-cell interactions and running the simulation | ||
+ | under the same conditions. The results are similar to the | ||
+ | colony level model in the sense that there is very little to no pattern | ||
+ | formation to be seen. Therefore we can conclude from the hybrid model | ||
+ | simulations | ||
+ | that cell-cell interactions will play a crucial role in the pattern | ||
+ | formation in our system. | ||
+ | <br/><br/> | ||
+ | Furthermore, by developing the hybrid model in parallel with | ||
+ | the colony level model we were able to compare the results and | ||
+ | demonstrate the | ||
+ | usefulness of incorporating an agent-based module into our | ||
+ | modeling approach. It allowed us to calculate cell-cell interactions | ||
+ | into our simulations which were otherwise not possible to model | ||
+ | and eventually lead us to valuable | ||
+ | insights into the mechanisms of pattern formation. | ||
+ | </p> | ||
</div> | </div> | ||
</div> | </div> | ||
Line 2,557: | Line 2,731: | ||
width="100%"> | width="100%"> | ||
<div class="head"> | <div class="head"> | ||
− | <h2>Incorporation of | + | <h2>Incorporation of Internal Model</h2> |
</div> | </div> | ||
</div> | </div> | ||
Line 2,563: | Line 2,737: | ||
<div class="summarytext1"> | <div class="summarytext1"> | ||
<div class="part"> | <div class="part"> | ||
− | + | <p> | |
− | + | In this model, we have ignored the inner life of bacteria. This | |
− | + | includes gene expression, signal transduction, quorum sensing etcetera. | |
− | + | Instead we assumed that AHL and leucine production is directly | |
+ | proportional to the density of type A cells. As the internal model however | ||
+ | demonstrates, this is a very rough approximation. | ||
+ | Bacteria behave differently based on their surroundings and | ||
+ | the signals they have been exposed to earlier. After all, protein concentrations | ||
+ | can fluctuate due to external disturbances, so the response to | ||
+ | signals from the environment can be heterogeneous across a bacterial population. | ||
+ | We can simulate this dynamic response using the internal model and therefore | ||
+ | incorporating the internal model into the hybrid model provides a path for | ||
+ | further improvement of our model and possibly more clues into the mechanisms of | ||
+ | pattern formation in nature. However, during our project we have decided to focus | ||
+ | our resources on | ||
+ | the individual models therefore we leave this next step for future iGEM teams | ||
+ | to explore. | ||
+ | </p> | ||
+ | <br/> | ||
</div> | </div> | ||
</div> | </div> | ||
Line 3,077: | Line 3,266: | ||
$("#toggle13").hide(); | $("#toggle13").hide(); | ||
$("#toggle14").hide(); | $("#toggle14").hide(); | ||
+ | $("#toggle15").hide(); | ||
Line 3,124: | Line 3,314: | ||
$(".toggle14").click(function () { | $(".toggle14").click(function () { | ||
$("#toggle14").toggle(); | $("#toggle14").toggle(); | ||
+ | }); | ||
+ | $(".toggle15").click(function () { | ||
+ | $("#toggle15").toggle(); | ||
}); | }); | ||
</script> | </script> | ||
Line 3,177: | Line 3,370: | ||
$("#eq37text").hide(); | $("#eq37text").hide(); | ||
$("#eq38text").hide(); | $("#eq38text").hide(); | ||
+ | $("#eq39text").hide(); | ||
+ | $("#eq40text").hide(); | ||
}); | }); | ||
Line 3,223: | Line 3,418: | ||
$("#eq37text").hide(); | $("#eq37text").hide(); | ||
$("#eq38text").hide(); | $("#eq38text").hide(); | ||
+ | $("#eq39text").hide(); | ||
+ | $("#eq40text").hide(); | ||
}); | }); | ||
Line 3,269: | Line 3,466: | ||
$("#eq37text").hide(); | $("#eq37text").hide(); | ||
$("#eq38text").hide(); | $("#eq38text").hide(); | ||
+ | $("#eq39text").hide(); | ||
+ | $("#eq40text").hide(); | ||
}); | }); | ||
Line 3,315: | Line 3,514: | ||
$("#eq37text").hide(); | $("#eq37text").hide(); | ||
$("#eq38text").hide(); | $("#eq38text").hide(); | ||
+ | $("#eq39text").hide(); | ||
+ | $("#eq40text").hide(); | ||
}); | }); | ||
Line 3,361: | Line 3,562: | ||
$("#eq37text").hide(); | $("#eq37text").hide(); | ||
$("#eq38text").hide(); | $("#eq38text").hide(); | ||
+ | $("#eq39text").hide(); | ||
+ | $("#eq40text").hide(); | ||
}); | }); | ||
Line 3,407: | Line 3,610: | ||
$("#eq37text").hide(); | $("#eq37text").hide(); | ||
$("#eq38text").hide(); | $("#eq38text").hide(); | ||
+ | $("#eq39text").hide(); | ||
+ | $("#eq40text").hide(); | ||
}); | }); | ||
Line 3,453: | Line 3,658: | ||
$("#eq37text").hide(); | $("#eq37text").hide(); | ||
$("#eq38text").hide(); | $("#eq38text").hide(); | ||
+ | $("#eq39text").hide(); | ||
+ | $("#eq40text").hide(); | ||
}); | }); | ||
Line 3,499: | Line 3,706: | ||
$("#eq37text").hide(); | $("#eq37text").hide(); | ||
$("#eq38text").hide(); | $("#eq38text").hide(); | ||
+ | $("#eq39text").hide(); | ||
+ | $("#eq40text").hide(); | ||
}); | }); | ||
Line 3,545: | Line 3,754: | ||
$("#eq37text").hide(); | $("#eq37text").hide(); | ||
$("#eq38text").hide(); | $("#eq38text").hide(); | ||
+ | $("#eq39text").hide(); | ||
+ | $("#eq40text").hide(); | ||
$(".sidebarleft").show(); | $(".sidebarleft").show(); | ||
$("#eq9textleft").show(); | $("#eq9textleft").show(); | ||
Line 3,601: | Line 3,812: | ||
$("#eq37text").hide(); | $("#eq37text").hide(); | ||
$("#eq38text").hide(); | $("#eq38text").hide(); | ||
+ | $("#eq39text").hide(); | ||
+ | $("#eq40text").hide(); | ||
}); | }); | ||
Line 3,647: | Line 3,860: | ||
$("#eq37text").hide(); | $("#eq37text").hide(); | ||
$("#eq38text").hide(); | $("#eq38text").hide(); | ||
+ | $("#eq39text").hide(); | ||
+ | $("#eq40text").hide(); | ||
}); | }); | ||
Line 3,693: | Line 3,908: | ||
$("#eq37text").hide(); | $("#eq37text").hide(); | ||
$("#eq38text").hide(); | $("#eq38text").hide(); | ||
+ | $("#eq39text").hide(); | ||
+ | $("#eq40text").hide(); | ||
}); | }); | ||
Line 3,739: | Line 3,956: | ||
$("#eq37text").hide(); | $("#eq37text").hide(); | ||
$("#eq38text").hide(); | $("#eq38text").hide(); | ||
+ | $("#eq39text").hide(); | ||
+ | $("#eq40text").hide(); | ||
}); | }); | ||
Line 3,785: | Line 4,004: | ||
$("#eq37text").hide(); | $("#eq37text").hide(); | ||
$("#eq38text").hide(); | $("#eq38text").hide(); | ||
+ | $("#eq39text").hide(); | ||
+ | $("#eq40text").hide(); | ||
}); | }); | ||
Line 3,831: | Line 4,052: | ||
$("#eq37text").hide(); | $("#eq37text").hide(); | ||
$("#eq38text").hide(); | $("#eq38text").hide(); | ||
+ | $("#eq39text").hide(); | ||
+ | $("#eq40text").hide(); | ||
}); | }); | ||
Line 3,877: | Line 4,100: | ||
$("#eq37text").hide(); | $("#eq37text").hide(); | ||
$("#eq38text").hide(); | $("#eq38text").hide(); | ||
+ | $("#eq39text").hide(); | ||
+ | $("#eq40text").hide(); | ||
$(".sidebarleft").show(); | $(".sidebarleft").show(); | ||
$("#eq9textleft").hide(); | $("#eq9textleft").hide(); | ||
Line 3,933: | Line 4,158: | ||
$("#eq37text").hide(); | $("#eq37text").hide(); | ||
$("#eq38text").hide(); | $("#eq38text").hide(); | ||
+ | $("#eq39text").hide(); | ||
+ | $("#eq40text").hide(); | ||
}); | }); | ||
Line 3,979: | Line 4,206: | ||
$("#eq37text").hide(); | $("#eq37text").hide(); | ||
$("#eq38text").hide(); | $("#eq38text").hide(); | ||
+ | $("#eq39text").hide(); | ||
+ | $("#eq40text").hide(); | ||
}); | }); | ||
Line 4,025: | Line 4,254: | ||
$("#eq37text").hide(); | $("#eq37text").hide(); | ||
$("#eq38text").hide(); | $("#eq38text").hide(); | ||
+ | $("#eq39text").hide(); | ||
+ | $("#eq40text").hide(); | ||
}); | }); | ||
Line 4,071: | Line 4,302: | ||
$("#eq37text").hide(); | $("#eq37text").hide(); | ||
$("#eq38text").hide(); | $("#eq38text").hide(); | ||
+ | $("#eq39text").hide(); | ||
+ | $("#eq40text").hide(); | ||
}); | }); | ||
Line 4,117: | Line 4,350: | ||
$("#eq37text").hide(); | $("#eq37text").hide(); | ||
$("#eq38text").hide(); | $("#eq38text").hide(); | ||
+ | $("#eq39text").hide(); | ||
+ | $("#eq40text").hide(); | ||
$(".sidebarleft").show(); | $(".sidebarleft").show(); | ||
$("#eq9textleft").hide(); | $("#eq9textleft").hide(); | ||
Line 4,173: | Line 4,408: | ||
$("#eq37text").hide(); | $("#eq37text").hide(); | ||
$("#eq38text").hide(); | $("#eq38text").hide(); | ||
+ | $("#eq39text").hide(); | ||
+ | $("#eq40text").hide(); | ||
$(".sidebarleft").show(); | $(".sidebarleft").show(); | ||
$("#eq9textleft").hide(); | $("#eq9textleft").hide(); | ||
Line 4,229: | Line 4,466: | ||
$("#eq37text").hide(); | $("#eq37text").hide(); | ||
$("#eq38text").hide(); | $("#eq38text").hide(); | ||
+ | $("#eq39text").hide(); | ||
+ | $("#eq40text").hide(); | ||
$(".sidebarleft").show(); | $(".sidebarleft").show(); | ||
$("#eq9textleft").hide(); | $("#eq9textleft").hide(); | ||
Line 4,285: | Line 4,524: | ||
$("#eq37text").hide(); | $("#eq37text").hide(); | ||
$("#eq38text").hide(); | $("#eq38text").hide(); | ||
+ | $("#eq39text").hide(); | ||
+ | $("#eq40text").hide(); | ||
}); | }); | ||
Line 4,331: | Line 4,572: | ||
$("#eq37text").hide(); | $("#eq37text").hide(); | ||
$("#eq38text").hide(); | $("#eq38text").hide(); | ||
+ | $("#eq39text").hide(); | ||
+ | $("#eq40text").hide(); | ||
}); | }); | ||
Line 4,377: | Line 4,620: | ||
$("#eq37text").hide(); | $("#eq37text").hide(); | ||
$("#eq38text").hide(); | $("#eq38text").hide(); | ||
+ | $("#eq39text").hide(); | ||
+ | $("#eq40text").hide(); | ||
}); | }); | ||
Line 4,423: | Line 4,668: | ||
$("#eq37text").hide(); | $("#eq37text").hide(); | ||
$("#eq38text").hide(); | $("#eq38text").hide(); | ||
+ | $("#eq39text").hide(); | ||
+ | $("#eq40text").hide(); | ||
}); | }); | ||
Line 4,469: | Line 4,716: | ||
$("#eq37text").hide(); | $("#eq37text").hide(); | ||
$("#eq38text").hide(); | $("#eq38text").hide(); | ||
+ | $("#eq39text").hide(); | ||
+ | $("#eq40text").hide(); | ||
}); | }); | ||
Line 4,515: | Line 4,764: | ||
$("#eq37text").hide(); | $("#eq37text").hide(); | ||
$("#eq38text").hide(); | $("#eq38text").hide(); | ||
+ | $("#eq39text").hide(); | ||
+ | $("#eq40text").hide(); | ||
$(".sidebarleft").show(); | $(".sidebarleft").show(); | ||
$("#eq9textleft").hide(); | $("#eq9textleft").hide(); | ||
Line 4,571: | Line 4,822: | ||
$("#eq37text").hide(); | $("#eq37text").hide(); | ||
$("#eq38text").hide(); | $("#eq38text").hide(); | ||
+ | $("#eq39text").hide(); | ||
+ | $("#eq40text").hide(); | ||
$(".sidebarleft").show(); | $(".sidebarleft").show(); | ||
$("#eq9textleft").hide(); | $("#eq9textleft").hide(); | ||
Line 4,627: | Line 4,880: | ||
$("#eq37text").hide(); | $("#eq37text").hide(); | ||
$("#eq38text").hide(); | $("#eq38text").hide(); | ||
+ | $("#eq39text").hide(); | ||
+ | $("#eq40text").hide(); | ||
}); | }); | ||
Line 4,673: | Line 4,928: | ||
$("#eq37text").hide(); | $("#eq37text").hide(); | ||
$("#eq38text").hide(); | $("#eq38text").hide(); | ||
+ | $("#eq39text").hide(); | ||
+ | $("#eq40text").hide(); | ||
}); | }); | ||
Line 4,719: | Line 4,976: | ||
$("#eq37text").hide(); | $("#eq37text").hide(); | ||
$("#eq38text").hide(); | $("#eq38text").hide(); | ||
+ | $("#eq39text").hide(); | ||
+ | $("#eq40text").hide(); | ||
}); | }); | ||
Line 4,765: | Line 5,024: | ||
$("#eq37text").hide(); | $("#eq37text").hide(); | ||
$("#eq38text").hide(); | $("#eq38text").hide(); | ||
+ | $("#eq39text").hide(); | ||
+ | $("#eq40text").hide(); | ||
}); | }); | ||
Line 4,811: | Line 5,072: | ||
$("#eq37text").hide(); | $("#eq37text").hide(); | ||
$("#eq38text").hide(); | $("#eq38text").hide(); | ||
+ | $("#eq39text").hide(); | ||
+ | $("#eq40text").hide(); | ||
$(".sidebarleft").show(); | $(".sidebarleft").show(); | ||
$("#eq9textleft").hide(); | $("#eq9textleft").hide(); | ||
Line 4,867: | Line 5,130: | ||
$("#eq37text").hide(); | $("#eq37text").hide(); | ||
$("#eq38text").hide(); | $("#eq38text").hide(); | ||
+ | $("#eq39text").hide(); | ||
+ | $("#eq40text").hide(); | ||
}); | }); | ||
Line 4,913: | Line 5,178: | ||
$("#eq37text").show(); | $("#eq37text").show(); | ||
$("#eq38text").hide(); | $("#eq38text").hide(); | ||
+ | $("#eq39text").hide(); | ||
+ | $("#eq40text").hide(); | ||
}); | }); | ||
Line 4,959: | Line 5,226: | ||
$("#eq37text").hide(); | $("#eq37text").hide(); | ||
$("#eq38text").show(); | $("#eq38text").show(); | ||
+ | $("#eq39text").hide(); | ||
+ | $("#eq40text").hide(); | ||
}); | }); | ||
$( "#eq38" ).mouseleave(function() { | $( "#eq38" ).mouseleave(function() { | ||
+ | $(".sidebarright").hide(); | ||
+ | }); | ||
+ | |||
+ | $( "#eq39" ).mouseenter(function() { | ||
+ | $(".sidebarright").show(); | ||
+ | $("#eq1text").hide(); | ||
+ | $("#eq2text").hide(); | ||
+ | $("#eq3text").hide(); | ||
+ | $("#eq4text").hide(); | ||
+ | $("#eq5text").hide(); | ||
+ | $("#eq6text").hide(); | ||
+ | $("#eq7text").hide(); | ||
+ | $("#eq8text").hide(); | ||
+ | $("#eq9text").hide(); | ||
+ | $("#eq10text").hide(); | ||
+ | $("#eq11text").hide(); | ||
+ | $("#eq12text").hide(); | ||
+ | $("#eq13text").hide(); | ||
+ | $("#eq14text").hide(); | ||
+ | $("#eq15text").hide(); | ||
+ | $("#eq16text").hide(); | ||
+ | $("#eq17text").hide(); | ||
+ | $("#eq18text").hide(); | ||
+ | $("#eq19text").hide(); | ||
+ | $("#eq20text").hide(); | ||
+ | $("#eq21text").hide(); | ||
+ | $("#eq22text").hide(); | ||
+ | $("#eq23text").hide(); | ||
+ | $("#eq24text").hide(); | ||
+ | $("#eq25text").hide(); | ||
+ | $("#eq26text").hide(); | ||
+ | $("#eq27text").hide(); | ||
+ | $("#eq28text").hide(); | ||
+ | $("#eq29text").hide(); | ||
+ | $("#eq30text").hide(); | ||
+ | $("#eq31text").hide(); | ||
+ | $("#eq32text").hide(); | ||
+ | $("#eq33text").hide(); | ||
+ | $("#eq34text").hide(); | ||
+ | $("#eq35text").hide(); | ||
+ | $("#eq36text").hide(); | ||
+ | $("#eq37text").hide(); | ||
+ | $("#eq38text").hide(); | ||
+ | $("#eq39text").show(); | ||
+ | $("#eq40text").hide(); | ||
+ | }); | ||
+ | |||
+ | $( "#eq39" ).mouseleave(function() { | ||
+ | $(".sidebarright").hide(); | ||
+ | }); | ||
+ | |||
+ | $( "#eq40" ).mouseenter(function() { | ||
+ | $(".sidebarright").show(); | ||
+ | $("#eq1text").hide(); | ||
+ | $("#eq2text").hide(); | ||
+ | $("#eq3text").hide(); | ||
+ | $("#eq4text").hide(); | ||
+ | $("#eq5text").hide(); | ||
+ | $("#eq6text").hide(); | ||
+ | $("#eq7text").hide(); | ||
+ | $("#eq8text").hide(); | ||
+ | $("#eq9text").hide(); | ||
+ | $("#eq10text").hide(); | ||
+ | $("#eq11text").hide(); | ||
+ | $("#eq12text").hide(); | ||
+ | $("#eq13text").hide(); | ||
+ | $("#eq14text").hide(); | ||
+ | $("#eq15text").hide(); | ||
+ | $("#eq16text").hide(); | ||
+ | $("#eq17text").hide(); | ||
+ | $("#eq18text").hide(); | ||
+ | $("#eq19text").hide(); | ||
+ | $("#eq20text").hide(); | ||
+ | $("#eq21text").hide(); | ||
+ | $("#eq22text").hide(); | ||
+ | $("#eq23text").hide(); | ||
+ | $("#eq24text").hide(); | ||
+ | $("#eq25text").hide(); | ||
+ | $("#eq26text").hide(); | ||
+ | $("#eq27text").hide(); | ||
+ | $("#eq28text").hide(); | ||
+ | $("#eq29text").hide(); | ||
+ | $("#eq30text").hide(); | ||
+ | $("#eq31text").hide(); | ||
+ | $("#eq32text").hide(); | ||
+ | $("#eq33text").hide(); | ||
+ | $("#eq34text").hide(); | ||
+ | $("#eq35text").hide(); | ||
+ | $("#eq36text").hide(); | ||
+ | $("#eq37text").hide(); | ||
+ | $("#eq38text").hide(); | ||
+ | $("#eq39text").hide(); | ||
+ | $("#eq40text").show(); | ||
+ | }); | ||
+ | |||
+ | $( "#eq40" ).mouseleave(function() { | ||
$(".sidebarright").hide(); | $(".sidebarright").hide(); | ||
}); | }); |
Latest revision as of 21:36, 20 November 2015
The Hybrid Model
Introduction
The hybrid model represents an intermediate level of detail in between the colony level model and the internal model. Bacteria are treated as individual agents that behave according to Keller-Segel type stochastic differential equations, while chemical species are modeled using partial differential equations. These different models are implemented and coupled within a single hybrid modeling framework.
Partial Differential Equations
Spatial reaction-diffusion models that rely on Partial Differential Equations (PDEs) are based on the assumption that the collective behavior of individual entities, such as molecules or bacteria, can be abstracted to the behavior of a continuous field that represents the density of those entities. The brownian motion of molecules, for instance, is the result of inherently stochastic processes that take place at the individual molecule level, but is modeled at the density level by Fick’s laws of diffusion. These PDE-based models provide a robust method to predict the evolution of large-scale systems, but are only valid when the spatiotemporal scale is sufficiently large to neglect small-scale stochastic fluctuations and physical granularity. Moreover, such a continuous field approximation can only be made if the behavior of the individual entities is well described.
Agent-Based Models
Agent-based models on the other hand explicitly treat the entities as individual “agents” that behave according to a set of “agent rules”. An agent is an object that acts independently from other agents and is influenced only by its local environment. The goal in agent-based models is to study the emergent systems-level properties of a collection of individual agents that follow relatively simple rules. In smoothed particle hydrodynamics for example, fluids are simulated by calculating the trajectory of each individual fluid particle at every timestep. Fluid properties such as the momentum at a certain point can then be sampled by taking a weighted sum of the momenta of the surrounding fluid particles. A large advantage of agent-based models is that the agent rules are arbitrarily complex and thus they allow us to model systems that do not correspond to any existing or easily derivable PDE model. However, because every agent is stored in memory and needs to be processed individually, simulating agent-based models can be computationally intensive.
Hybrid Modeling Framework
In our system, there are both bacteria and chemical species that spread out
and interact on a petri dish to form patterns. On the one hand, the bacteria are
rather complex entities that move along chemical gradients and interact with one
another. Therefore they are ideally modeled using an agent-based model. On the
other hand, the diffusion and dynamics of the chemicals leucine and AHL are
easily described by well-established PDEs. To make use of the advantages of each
modeling approach, we decided to combine these two different types of modeling
in a hybrid modeling framework. In this framework we modeled the bacteria as
agents, while the chemical species were modeled using PDEs. There were two
challenges to our hybrid approach, namely coupling the models and matching them.
Coupling refers to the transfer of information between the models and matching
refers to dealing with different spatial and temporal scales to achieve
accurate, yet computationally tractable simulations.
In the following paragraphs we first introduce our hybrid model and its
coupling. Once the basic framework is established, the agent-based module and
PDE module are discussed in more depth and the issue of matching is highlighted.
We also expand on important aspects of the model and its implementation such as
boundary conditions and choice of timesteps. Then the results of the
simulations are shown and summarized. Finally, the incorporation
of the internal model into the hybrid model is discussed.
Model Description
System
The main protagonists in our pattern-forming system are cell types A and B, AHL and leucine. Cells A produce AHL as well as leucine. They are unaffected by leucine, while cells B are repelled by leucine. AHL modulates the motility of both cell types A and B, but in opposite ways. High concentrations of AHL will render cell type A unable to swim but will activate cell type B’s motility. Conversely, low concentrations of AHL causes swimming of cell type A and incessant tumbling (thus immobility) of cell type B. Lastly, cells A express the adhesin membrane protein, which causes them to stick to each other. Simply said, our system should produce spots of immobile, sticky groups of A type cells, surrounded by rings of B type cells. Any cell that finds itself outside of the region that it should be in, is able to swim to their correct place and becomes immobile there. More details can be found in the research section.
Partial Differential Equations
As discussed in the previous paragraph, our hybrid model incorporates chemical species using PDEs. In our system these are AHL and leucine. The diffusion of AHL and leucine can be described by the heat equation (1).
$$\frac{\partial C(\vec{r},t)}{\partial t}=D \cdot \nabla^2 C(\vec{r},t) \;\;\; \text{(1)}$$
By using (1) we assume that the diffusion speed is isotropic, i.e. the same in all spatial directions. This also explains why it is called the heat equation, since heat diffuses equally fast in all directions. A detailed explanation of the heat equation can be found in box 1. The second factor that needs be taken into account is the production of AHL and leucine by type A bacteria. In principle, AHL and leucine production is dependent on the dynamically-evolving internal states of all cells of type A. However, for our hybrid model we ignored the inner life of all bacteria and instead assumed that AHL and leucine production is directly proportional to the density of A type cells (2).
$$ \frac{\partial C(\vec{r},t)}{\partial t}=\alpha \cdot \rho_A(\vec{r},t) \;\;\; \text{(2)}$$
In the last paragraph we will reconsider this assumption and assign each cell an internal model. Finally, AHL and leucine are organic molecules and therefore they will degrade over time. We assume first-order kinetics meaning that the rate at which AHL and similarly leucine disappear is proportional to their respective concentrations (3a and 3b) assuming neutral pH [6].
$$ \frac{\partial C_{AHL}(\vec{r},t)}{\partial t}=-k_{AHL}\cdot C_{AHL}(\vec{r},t) \;\;\; \text{(3a)} $$ $$ \frac{\partial C_{leucine}(\vec{r},t)}{\partial t}=-k_{leucine}\cdot C_{leucine}(\vec{r},t) \;\;\; \text{(3b)} $$
Putting it all together, we obtain (4), both for AHL and leucine.
$$ \frac{\partial C(\vec{r},t)}{\partial t}=D \cdot \nabla^2 C(\vec{r},t)+\alpha \cdot \rho_A(\vec{r},t)-k\cdot C(\vec{r},t) \;\;\; \text{(4)} $$
Note that these equations have exactly the same form as the equations for AHL and leucine in the colony level model. The crucial difference however lies in the calculation of the density of cells of type A. In contrast to the colony level model, in this model the cell density is not calculated explicitly with a PDE and is therefore not trivially known. Therefore a method to extract a density field from a spatial distribution of agents is necessary. This is addressed in the subparagraph below on coupling.
Agents
To model bacteria movement on the other hand, we used an agent-based model that explicitly stored individual bacteria as agents. Spatial coordinates are associated with each agent, specifying their location. After solving the equation of motion for all agents based on their environment, these coordinates are updated at every timestep. In principle, Newton’s second law of motion has to be solved for all bacteria. However, since bacteria live in a low Reynolds (high friction) environment, the inertia of the bacteria can be neglected. This is because an applied force will immediately be balanced out by an opposing frictional force, with no noticeable acceleration or deceleration phase taking place. This eliminates the inertial term and simplifies Newton’s second law to (5).
$$ \frac{d^2 \vec{r}(t)}{dt^2}=\sum_{i} \vec{F}_{applied,i}-\gamma \cdot \frac{d \vec{r}(t)}{dt}=0 $$ $$\Rightarrow \frac{d \vec{r}(t)}{dt}=\frac{1}{\gamma} \cdot \sum_{i} \vec{F}_{applied,i} \;\;\; \text{(5)} $$
Basically, the velocity can be calculated as the sum of all applied forces times divided by a frictional coefficient. For more info about the Reynolds number and “life at low Reynolds number”, we refer to box 2. In the following paragraphs we will investigate the different forces acting on the bacteria and ultimately superimpose them to obtain the final equation of motion.
Coupling
At this point, both the PDE module and agent-based module have been established,
but the issue remains that the individual modules take inputs and return outputs which are not
directly compatible. In the framework of PDEs, entities are described by
density/concentration fields.
In the agent-based module however, entities are represented by discrete
objects with exact spatial locations. The key challenge posed by the hybrid model
is to integrate these different approaches by bidirectionally converting and
exchanging information between the modules. Coupling the modules is the essential component
that makes the hybrid model hybrid. It allows us to leverage the advantages
of both modeling approaches, while circumventing their drawbacks. But although
hybrid modeling opens up many new avenues for novel modeling methods,
it comes with its own diverse set of issues and peculiarities that need to be
addressed before it can be successfully applied.
In the following paragraphs the basic scheme for coupling
the PDE and agent-based modules in our model is introduced, after which the theoretical
treatment of our hybrid model is complete. The difficulties that arise from linking the
modules together are discussed further below in the subsection on matching.
Synthesis
The diffusion, production and degradation of AHL and leucine are described by the PDEs (4). At the same time, the random movement, chemotaxis and intercellular interactions of cell types A and B are captured by the stochastic equation of motion (11). Translating the spatial distribution of cells type A into a density field to feed into the PDE module can be accomplished by using kernel density estimation (16). Finally, the agents can request concentrations and gradients at arbitrary positions from the PDE module using bilinear interpolation (B3.3). Taken together, these equations describe the individual modules, as well as the two-way information transfer in between them, and thus they fully define our hybrid model. A graphical summary is shown in Figure 10.
Implementation
Agent-Based Module
In this paragraph, we will discuss the implementation of the agent-based module. First, the problem of computing pairwise interactions is discussed and a nearest-neighbor algorithm is introduced to reduce the computation time. Then, the choice of timestep is considered with regards to the cell-cell interaction scheme. Finally, the boundary conditions for agents are defined and explained.
Partial Differential Equations Module
To implement the partial differential equations (4) we have to discretize our domain into a grid and apply some computational scheme that describes the evolution of our fields in discrete timesteps. We will discuss only the scheme that we employed for the two-dimensional model. Furthermore, boundary conditions are described below as well.
Matching
The purpose of the hybrid model is to employ appropriate modeling techniques for different entities that behave differently and couple them within a single system. The advantage is that computational costs can be lowered while retaining accuracy. However, if no special care is taken to adapt the modules to each other in an efficient way, the computational savings might not be significant or even nonexistent. Therefore in this paragraph we discuss the matching of temporal scales and spatial scales in the hybrid model.
Results
The videos above show the results of simulations that were run
at the Flemish Supercomputer Center.
Three different initial conditions similar to those used in
the colony level model were used.
The first and second initial conditions correspond to
colonies of both cell types arranged into a block and
a star-shaped pattern respectively. Cell type B can be seen
fleeing the colonies due to the production of AHL and leucine
by cell type A. Therefore the system evolves qualitatively in
the same way as in the colony level model.
However, the model exhibits very different behavior when
the initial positions of bacteria are random. Whereas
the colony level model did not evolve into any convincing
pattern, cell types A and B clearly separate into different
domains in our hybrid model. Cells of type A cluster into blob-like
formations while cells of type B fill up the space in between.
Our hypothesis therefore is that the sticky membrane proteins
expressed by cells A is crucial for the formation of regular patterns.
To verify this, we performed a negative control by disabling
the attractive cell-cell interactions and running the simulation
under the same conditions. The results are similar to the
colony level model in the sense that there is very little to no pattern
formation to be seen. Therefore we can conclude from the hybrid model
simulations
that cell-cell interactions will play a crucial role in the pattern
formation in our system.
Furthermore, by developing the hybrid model in parallel with
the colony level model we were able to compare the results and
demonstrate the
usefulness of incorporating an agent-based module into our
modeling approach. It allowed us to calculate cell-cell interactions
into our simulations which were otherwise not possible to model
and eventually lead us to valuable
insights into the mechanisms of pattern formation.
Incorporation of Internal Model
In this model, we have ignored the inner life of bacteria. This includes gene expression, signal transduction, quorum sensing etcetera. Instead we assumed that AHL and leucine production is directly proportional to the density of type A cells. As the internal model however demonstrates, this is a very rough approximation. Bacteria behave differently based on their surroundings and the signals they have been exposed to earlier. After all, protein concentrations can fluctuate due to external disturbances, so the response to signals from the environment can be heterogeneous across a bacterial population. We can simulate this dynamic response using the internal model and therefore incorporating the internal model into the hybrid model provides a path for further improvement of our model and possibly more clues into the mechanisms of pattern formation in nature. However, during our project we have decided to focus our resources on the individual models therefore we leave this next step for future iGEM teams to explore.
References
[1] | Benjamin Franz and Radek Erban. Hybrid modelling of individual movement and collective behaviour. Lecture Notes in Mathematics, 2071:129-157, 2013. [ .pdf ] |
[2] | Zaiyi Guo, Peter M A Sloot, and Joc Cing Tay. A hybrid agent-based approach for modeling microbiological systems. Journal of Theoretical Biology, 255(2):163-175, 2008. [ DOI ] |
[3] | E F Keller and L A Segel. Traveling bands of chemotactic bacteria: a theoretical analysis. Journal of theoretical biology, 30(2):235-248, 1971. [ DOI ] |
[4] | E. M. Purcell. Life at low Reynolds number, 1977. [ DOI ] |
[5] | Angela Stevens. The Derivation of Chemotaxis Equations as Limit Dynamics of Moderately Interacting Stochastic Many-Particle Systems, 2000. [ DOI ] |
[6] | A. L. Schaefer, B. L. Hanzelka, M. R. Parsek, and E. P. Greenberg. Detection, purification, and structural elucidation of the acylhomoserine lactone inducer of Vibrio fischeri luminescence and other related molecules. Bioluminescence and Chemiluminescence, Pt C, 305:288-301, 2000. |
Contact
Address: Celestijnenlaan 200G room 00.08 - 3001 Heverlee
Telephone: +32(0)16 32 73 19
Email: igem@chem.kuleuven.be