Skip to content

Instantly share code, notes, and snippets.

@dragly
Created July 11, 2017 19:11
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dragly/b6c8c5a163585ebda95c4d45946025cd to your computer and use it in GitHub Desktop.
Save dragly/b6c8c5a163585ebda95c4d45946025cd to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<!-- dom:TITLE: Introduction to Analysis and Modeling in Biology with Python - Bacterial growth modeling -->\n",
"# Introduction to Analysis and Modeling in Biology with Python - Bacterial growth modeling\n",
"<!-- dom:AUTHOR: Simen Tennøe at Centre for Integrative Neuroplasticity (CINPLA) & Department of Informatics, University of Oslo -->\n",
"<!-- Author: --> \n",
"**Simen Tennøe**, Centre for Integrative Neuroplasticity (CINPLA) and Department of Informatics, University of Oslo \n",
"<!-- dom:AUTHOR: Andreas V. Solbrå at Centre for Integrative Neuroplasticity (CINPLA) & Department of Physics, University of Oslo -->\n",
"<!-- Author: --> **Andreas V. Solbrå**, Centre for Integrative Neuroplasticity (CINPLA) and Department of Physics, University of Oslo \n",
"<!-- dom:AUTHOR: Milad H. Mobarhan at Centre for Integrative Neuroplasticity (CINPLA) & Department of Biosciences, University of Oslo -->\n",
"<!-- Author: --> **Milad H. Mobarhan**, Centre for Integrative Neuroplasticity (CINPLA) and Department of Biosciences, University of Oslo \n",
"<!-- dom:AUTHOR: Svenn-Arne Dragly at Centre for Integrative Neuroplasticity (CINPLA) & Department of Physics, University of Oslo -->\n",
"<!-- Author: --> **Svenn-Arne Dragly**, Centre for Integrative Neuroplasticity (CINPLA) and Department of Physics, University of Oslo\n",
"\n",
"\n",
"Date: **Jul 11, 2017**"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"import os\n",
"os.chdir(\"data-bacterial_growth_modeling\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<div id=\"chp:bacterial_modeling\"></div>\n",
"\n",
"<!-- dom:FIGURE: [figures-bacterial_growth_modeling/ecoli_binary_fission.png, width=600 frac=1]Bacterial growth under the microscope. In this chapter we will simulate the population growth in a virtual experiment on a computer. <div id=\"fig:bacterial_growth_modeling:exp_growth\"></div> -->\n",
"<!-- begin figure -->\n",
"<div id=\"fig:bacterial_growth_modeling:exp_growth\"></div>\n",
"\n",
"<img src=\"figures-bacterial_growth_modeling/ecoli_binary_fission.png\" width=600>\n",
"<p style='font-size: 0.9em'><i>Figure 1: Bacterial growth under the microscope. In this chapter we will simulate the population growth in a virtual experiment on a computer.</i></p>\n",
"\n",
"<!-- end figure -->\n",
"\n",
"\n",
"[Svenn-Arne 1: Figure reference? Replace with better quality figure?]\n",
"\n",
"Bacterial growth is a type of *population dyamics*,\n",
"which is the study of *population size* (number of individuals) over time.\n",
"Bacterial growth can be studied both by analyzing data from a real experiment or\n",
"by creating a virtual experiment.\n",
"In the previous document, we analyzed real data.\n",
" In this document, we will *simulate* bacterial growth on the\n",
"computer by imitating what we know about the real experiment.\n",
"\n",
"\n",
"Mathematical and computational models are not restricted to bacterial growth.\n",
"The same steps could be used to study other systems,\n",
"such as plant growth, disease spread, or even the orbits of planets.\n",
"Today, computational models are widely used in many disciplines,\n",
"including mathematics, medicine, physics, chemistry, biology,\n",
"engineering, and economy.\n",
"The simulations are used to predict the future,\n",
"such as in weather forecasts, or to perform virtual experiments.\n",
"Among the benefits of using simulations instead of real experiments include\n",
"saved costs and reduced risk.\n",
"If the experiment is expensive, we can try out many different configurations by\n",
"simulation before performing the real experiment,\n",
"and we can even simulate experiments that cannot be performed at all in the real\n",
"world.\n",
"\n",
"\n",
"\n",
"<hr/>\n",
"**A simple model: Models do not have to be complicated.**\n",
"\n",
"In [[scientific_calculator]](#scientific_calculator), we discussed equation used to calculate the\n",
"maximum hearth rate, $\\text{HR}_{\\text{max}}$:"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$$\n",
"\\text{HR}_{\\text{max}} = 220 - \\text{age}.\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<!-- -->\n",
"This is also a model, although it's both simple and ignores many details.\n",
"A more accurate model could include personal physiology and fitness,\n",
"but the simple model is still useful.\n",
"<hr/>\n",
"\n",
"\n",
"\n",
"\n",
" To create a simulation, we first need to make a *mathematical\n",
"model* of what happens with the bacteria over time.\n",
"We can create the model by writing equations based on what we know of bacterial\n",
"growth.\n",
"For instance, we know that the population size doubles after a given period of\n",
"time.\n",
"This can be written as an equation, which can be turned into a\n",
"*computational model* by solving the equation with programming.\n",
"This is called to *implement* the model.\n",
" The commands used in the program define a recipe,\n",
"or *algorithm*, that is followed by the computer.\n",
"\n",
"When creating a model, it is often best to start out simple and add additional\n",
"details as we go.\n",
"In this document, we start with simple growth of the bacteria and ignore all\n",
"external factors, such as their lifetime, access to food,\n",
"and temperature.\n",
"We will add some of these details throughout the document.\n",
"Building the model up piece by piece makes it easier to avoid mistakes.\n",
"It also allows us to study the effects of each factor by comparing the results\n",
"to those of the less detailed model.\n",
"It is a common misconception that models have to perfectly reproduce real data\n",
"to be useful.\n",
"In fact, simplified models are often the most useful because they are easier to\n",
"understand.\n",
"\n",
"\n",
"\n",
"<hr/>\n",
"**Learning outcomes.**\n",
"\n",
"After this chapter you will\n",
"* learn how to model the bacterial growth cycle using\n",
"\n",
" * an exponential growth model and\n",
"\n",
" * a logistic growth model.\n",
"\n",
"\n",
"In order to do this, you will\n",
"* learn how to use Numpy arrays and\n",
"\n",
"* learn how to write `for`-loops in Python.\n",
"<hr/>\n",
"\n",
"\n",
"\n",
"# Exponential growth: a simple model for bacterial growth\n",
"\n",
" The bacterial growth cycle consist of lag phase,\n",
"exponential growth phase, stationary phase, and death phase.\n",
"The lag phase is the simplest to model because the population size is constant,\n",
"but therefore also not very interesting from a population growth view.\n",
"We will therefore skip this phase for now and start with the exponential growth\n",
"phase.\n",
"\n",
"A bacterium divides into two daughter cells through binary fission.\n",
"As a consequence, the bacterial population is doubled every generation.\n",
"The doubling time, called the generation time,\n",
"varies between different organisms.\n",
"For *E. coli*, which we focus on, the generation time is around 20 minutes\n",
"under optimal conditions.\n",
"\n",
"The information above suggests a model where the population is doubled over a\n",
"given time.\n",
"This is only valid in the case where there are no growth limiting factors,\n",
"which is true for the exponential growth phase.\n",
"Later, we tackle the more realistic case of limited growth.\n",
"Before implementing a model, it is always a good idea to state its assumptions:\n",
"\n",
"\n",
"\n",
"<hr/>\n",
"**Model assumptions for the exponential growth phase.**\n",
"\n",
"We assume\n",
"* no factors limiting growth,\n",
"\n",
"* no death, and\n",
"\n",
"* that all bacteria reproduce at the same rate, i.e. that they all have the same generation time.\n",
"<hr/>\n",
"\n",
"\n",
"\n",
"In order to use a computer for our calculations we need work with discrete time\n",
"steps.\n",
"This means that we only perform calculations at certain times,\n",
"and make a step between each point in time.\n",
"The variable $n$ is used to count the number of generations that have passed in\n",
"our simulation.\n",
"The time between two consecutive generations is $\\Delta t$,\n",
"called the time step.\n",
"$\\Delta$ is the Greek letter *delta*, which is often used to indicate a change\n",
"in another variable.\n",
"In our case $\\Delta t$ is the generation time - the change in time between two\n",
"generations.\n",
"\n",
"The total time that has passed at generation $n$ is the number of generations\n",
"multiplied by the generation time,\n",
"<!-- -->"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$$\n",
"t_n = n \\Delta t.\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<!-- -->\n",
"The subscript $n$ means the value of $t$ at time step $n$.\n",
"Similarly, the number of bacteria $E$ at time step $n$ is written as $E_n$.\n",
"This number is given as the number bacteria in the previous generation plus the\n",
"change in the number of bacteria since the previous generation,"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<!-- Equation labels as ordinary links -->\n",
"<div id=\"eq:bacterial_modeling:growth\"></div>\n",
"\n",
"$$\n",
"\\begin{equation}\n",
"E_{n} = E_{n-1} + \\Delta E \\label{eq:bacterial_modeling:growth} \\tag{1},\n",
"\\end{equation}\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<!-- -->\n",
"where $E_{n-1}$ is the number of bacteria in the previous step and $\\Delta E$ is the change in number of bacteria.\n",
"\n",
"Notice how similar the mathematical syntax is to the Python syntax for lists.\n",
"$E_n$ refers to the population at the $n$th generation,\n",
"while `E[n]` is the `n`-th element of the list `E`.\n",
"This similarity makes it much easier later on when we implement our model.\n",
"\n",
"A summary of the different symbols we have used and their meaning are listed in\n",
"the table below.\n",
"\n",
"[Svenn-Arne 2: Vi burde ha en figur som viser en tidslinje med E(n), E(n-1), etc. i tillegg til tabellen.]\n",
"\n",
"<table border=\"1\">\n",
"<thead>\n",
"<tr><th align=\"center\"> Symbol </th> <th align=\"center\"> Meaning </th> </tr>\n",
"</thead>\n",
"<tbody>\n",
"<tr><td align=\"left\"> $n$ </td> <td align=\"left\"> Current time step </td> </tr>\n",
"<tr><td align=\"left\"> $N$ </td> <td align=\"left\"> Number of time steps </td> </tr>\n",
"<tr><td align=\"left\"> $E$ </td> <td align=\"left\"> Number of bacteria </td> </tr>\n",
"<tr><td align=\"left\"> $E_n$ </td> <td align=\"left\"> Number of bacteria at a given time step $n$ </td> </tr>\n",
"<tr><td align=\"left\"> $\\Delta E$ </td> <td align=\"left\"> Change in number of bacteria, $E$, per time step </td> </tr>\n",
"<tr><td align=\"left\"> $t$ </td> <td align=\"left\"> Time </td> </tr>\n",
"<tr><td align=\"left\"> $t_n$ </td> <td align=\"left\"> Time at a given time step $n$ </td> </tr>\n",
"<tr><td align=\"left\"> $\\Delta t$ </td> <td align=\"left\"> Change in time, $t$, per time step </td> </tr>\n",
"<tr><td align=\"left\"> $E_0$ </td> <td align=\"left\"> Initial condition, number of bacteria we start with </td> </tr>\n",
"</tbody>\n",
"</table>\n",
"From before we know that the population doubles every generation.\n",
"The change in number of bacteria, $\\Delta E$, is therefore the same as the number of bacteria\n",
"in the previous generation, $E_{n-1}$.\n",
"This means we can find the number of bacteria in the next generation as"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$$\n",
"\\begin{align*}\n",
"E_n &= E_{n-1} + \\Delta E \\\\ \n",
"&= E_{n-1} + E_{n-1} \\\\ \n",
"&= 2E_{n-1}.\n",
"\\end{align*}\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<!-- -->\n",
"The number of bacteria at timestep $n$ is two times the number\n",
"of bacteria at the previous time step:\n",
"$E_n = 2E_{n-1}$.\n",
"We could have used this as our model immediately,\n",
"so why did we go through the process of defining it as a function of $\\Delta E$?\n",
"The reason is that we will introduce an environmental factor that limits the\n",
"growth in the section [chp:bacterial_modeling:logistic](#chp:bacterial_modeling:logistic) in this document.\n",
"Looking at the equations above, we notice that we need some data to start from.\n",
"To get the number of bacteria at the second time step,\n",
"$E_1$, we must know $E_0$.\n",
"This is our starting value and is called the *initial condition*.\n",
"For this model, we set the initial condition $E_0 = 10\\;000$,\n",
"which means we start with $10\\;000$ bacteria.\n",
"\n",
"<!-- dom:FIGURE: [figures-bacterial_growth_modeling/exponential.png, width=600 frac=0.7] Exponential growth <div id=\"fig:modeling:exponential_growth\"></div> -->\n",
"<!-- begin figure -->\n",
"<div id=\"fig:modeling:exponential_growth\"></div>\n",
"\n",
"<img src=\"figures-bacterial_growth_modeling/exponential.png\" width=600>\n",
"<p style='font-size: 0.9em'><i>Figure 2: Exponential growth</i></p>\n",
"\n",
"<!-- end figure -->\n",
"\n",
"\n",
"\n",
"\n",
"<hr/>\n",
"**Summary.**\n",
"\n",
"The exponential growth model for the growth of *E. coli* can be summarized as:"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$$\n",
"E_n = 2E_{n-1},\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"with the initial condition"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$$\n",
"E_{0} = 10\\; 000.\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<hr/>\n",
"\n",
"\n",
"\n",
"\n",
"All that is left is to perform the calculations.\n",
"Let us calculate the number of bacteria after four generations.\n",
"We have $n=4$, and want to find $E_{4}$.\n",
"This should be easy, we just plug $n=4$ into our model:"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$$\n",
"E_{4} = 2E_{3}.\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<!-- -->\n",
"Hmm, we have a slight problem.\n",
"We need to know $E_{3}$ before we are able to find $E_{4}$.\n",
"However, we still have our model, so we just plug in $n=3$:"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$$\n",
"E_{3} = 2E_{2}.\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<!-- -->\n",
"You might see where this is going.\n",
"\n",
"To find the number of bacteria at a certain time step we need to know the number\n",
"of bacteria at all previous time steps.\n",
"This means we must start our calculations at $n=1$,\n",
"where we know the initial value $E_{0} = 10\\;\n",
"000$.\n",
"So let us start at $n=1$ and move up to $n=4$:"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$$\n",
"\\begin{align*}\n",
"E_{0} &= 10\\; 000,\\\\ \n",
"E_{1} &= 2E_{0}\\\\ \n",
" &= 2 \\cdot 10\\; 000\\\\ \n",
" &= 20\\; 000,\\\\ \n",
"E_{2} &= 2E_{1}\\\\ \n",
" &= 2 \\cdot 20\\; 000\\\\ \n",
" &= 40\\; 000,\\\\ \n",
"E_{3} &= 2E_{2}\\\\ \n",
" &= 2 \\cdot 40\\; 000\\\\ \n",
" &= 80\\; 000,\\\\ \n",
"E_{4} &= 2E_{3}\\\\ \n",
" &= 2 \\cdot 80\\; 000\\\\ \n",
" &= 160\\; 000.\\\\ \n",
"\\end{align*}\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The next step is to implement this model in Python and visualize the data.\n",
"To do this, we need to store the number of bacteria for each time step.\n",
"We will use *arrays* and not lists to store these numbers because arrays are\n",
"more suited for mathematics.\n",
"We mentioned arrays briefly in [[analyzing]](#analyzing)\n",
"and will go through them in detail in the following section.\n",
"\n",
"\n",
"\n",
"<hr/>\n",
"**Limitations of this model.**\n",
"\n",
"<!-- -->\n",
"One thing you should remember if you wish to apply this model to similar\n",
"problems is that we have assumed the time step to be exactly the same as the\n",
"generation time.\n",
"This becomes an issue if you for instance would like to work with two\n",
"populations with different generation times.\n",
"In that case, you will need a separate list of times for each population,\n",
"which is exactly what we implement in [Examining the effect of temperature on growth](#sec:bacterial_modeling:temperature).\n",
"\n",
"Another option, which is also useful if you wish to implement more advanced\n",
"models, is to use *differential equations* instead of the equations we are using\n",
"here, which are known as *difference equations*.\n",
"The idea behind differential equations is to let the time step $\\Delta t$ become\n",
"very small, and use the derivative of the number of bacteria with time to\n",
"estimate $\\Delta E$.\n",
"This is a very powerful technique, but requires a bit more theoretical\n",
"background.\n",
"<!-- -->\n",
"<hr/>\n",
"\n",
"\n",
"\n",
"## Arrays in Python\n",
"\n",
"\n",
"Arrays are important for scientific computing in Python.\n",
"Arrays are similar to lists, but can only contain data of the same type.\n",
"However, arrays are much more suitable for mathematics because they support\n",
"operations like adding and subtracting all elements of one array to/from\n",
"another.\n",
"In this section we will discuss the similarities and differences between lists\n",
"and arrays, and the different mathematical operations arrays can perform.\n",
"\n",
"### Similarities and differences from lists\n",
"\n",
"First, we need to import the `pylab` package to use arrays:"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"from pylab import *"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"As mentioned earlier, lists are useful for storing a sequence of items.\n",
"A list can for instance contain a sequence of numbers:"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"l = [1, 2, 3, 4]"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<!-- -->\n",
"The equivalent array would look something like this:"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"a = array([1, 2, 3, 4])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<!-- -->\n",
"Just like lists, elements of an array can be accessed using square brackets.\n",
"This selects the first element of the array,\n",
"in other words, the one with index zero:"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"1\n"
]
}
],
"source": [
"print(a[0])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Slicing also work similarly to lists.\n",
"For example `a[2:-1]` picks out all elements expect for the first two and last\n",
"element:"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[3 4 5]\n"
]
}
],
"source": [
"a = array([1, 2, 3, 4, 5, 6])\n",
"print(a[2:-1])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Note that arrays are printed without commas, `','`, between each element.\n",
"\n",
"If we save an array to a new variable, it behaves the same way as a list:\n",
"<!-- -->"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[1 1 3 4 5 6]\n"
]
}
],
"source": [
"a = array([1, 2, 3, 4, 5, 6])\n",
"b = a\n",
"b[1] = 1\n",
"\n",
"print(a)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<hr/>\n",
"**Slicing a list returns a copy while slicing an array returns a view.**\n",
"\n",
"<!-- -->\n",
"Slicing a list returns a copy of that part of the list.\n",
"However, slicing an array returns a *view* to that part of the array.\n",
"This means that if you modify the contents of the view,\n",
"you also modify the original array.\n",
"To show this, we create an array `a` and create a view to the three first\n",
"indices of which we call `b`.\n",
"We then change the value of one of the elements in `b` and see what happens to\n",
"both `a` and `b`:\n",
"<!-- -->"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"a before change: [1 2 3 4 5 6]\n",
"b before change: [1 2 3]\n",
"a after change: [1 1 3 4 5 6]\n",
"b after change: [1 1 3]\n"
]
}
],
"source": [
"a = array([1, 2, 3, 4, 5, 6])\n",
"b = a[0:3]\n",
"print(\"a before change:\", a)\n",
"print(\"b before change:\", b)\n",
"\n",
"b[1] = 1\n",
"\n",
"print(\"a after change:\", a)\n",
"print(\"b after change:\", b)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<!-- -->\n",
"As you can see `a` is affected by the change in `b`.\n",
"This is because `b` is a view of `a`, so any change to `b` will also be\n",
"reflected in the parts of `a` that `b` represent.\n",
"\n",
"This is important to remember whenever you want to pick out part of a larger\n",
"array and modify it.\n",
"If you do not wish to modify the original array, you can copy the part you are\n",
"interested in like this:"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"a = array([1, 2, 3, 4, 5, 6])\n",
"b = a[0:3].copy()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Now any change to `b` will not affect `a`:"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"a after change: [1 2 3 4 5 6]\n",
"b after change: [1 1 3]\n"
]
}
],
"source": [
"b[1] = 1\n",
"print(\"a after change:\", a)\n",
"print(\"b after change:\", b)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<hr/>\n",
"\n",
"\n",
"\n",
"### Mathematical operations on arrays\n",
"\n",
"[Simen 3: do we need to show all examples?]\n",
"[Svenn-Arne 4: I think it is okay here. There are not that many examples and it is nice to show a couple that they can try to deduce the results of before running the cells.]\n",
"\n",
"Arrays support mathematical operations, unlike lists.\n",
"We can add, subtract, multiply, and divide arrays of equal length.\n",
"The operation is performed on each element of of each array.\n",
"For instance, when adding two arrays, element 0 of the first array is added to\n",
"element 0 in the second array, element 1 of the first array is added to element\n",
"1 in the second array and so on."
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[2 4 6]\n"
]
}
],
"source": [
"a = array([1, 2, 3])\n",
"b = array([1, 2, 3])\n",
"print(a + b)"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[0 0 0]\n"
]
}
],
"source": [
"print(a - b)"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[1 4 9]\n"
]
}
],
"source": [
"print(a*b)"
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[ 1. 1. 1.]\n"
]
}
],
"source": [
"print(a/b)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Notice how, in the last example, the numbers are followed by a dot,\n",
"`\".\"`.\n",
"This is because we now have floats (floating point numbers,\n",
"also known as real numbers), as opposed to ints (integers,\n",
"also known as whole numbers).\n",
"As mentioned in [[scientific_calculator]](#scientific_calculator), when we divide one int\n",
"by another, the result is a float.\n",
"\n",
"\n",
"If we have two lists and try to add them, they will be merged instead:"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[1, 2, 3, 1, 2, 3]\n"
]
}
],
"source": [
"list1 = [1, 2, 3]\n",
"list2 = [1, 2, 3]\n",
"print(list1 + list2)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<!-- -->\n",
"\n",
"With arrays we can also add, subtract, multiply, and divide by a single number:"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[2 3 4]\n"
]
}
],
"source": [
"a = array([1, 2, 3])\n",
"print(a + 1)"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[0 1 2]\n"
]
}
],
"source": [
"print(a - 1)"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[2 4 6]\n"
]
}
],
"source": [
"print(a*2)"
]
},
{
"cell_type": "code",
"execution_count": 19,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[ 0.5 1. 1.5]\n"
]
}
],
"source": [
"print(a/2)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"In addition to making the code simpler, arrays speed up Python programs that\n",
"deal with heavy calculations.\n",
"\n",
"\n",
"### Creating arrays\n",
"\n",
"There are several ways to create an array.\n",
"So far we have done this by converting a list to an array,\n",
"using `array()`, but for our purpose we need to create arrays with a specific\n",
"number of elements.\n",
"This can be done by using the `zeros()` function.\n",
" This command, as the name implies,\n",
"creates an array where all the elements are zeros,\n",
"and the argument is the number of elements in the array."
]
},
{
"cell_type": "code",
"execution_count": 20,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[ 0. 0. 0. 0. 0.]\n"
]
}
],
"source": [
"print(zeros(5))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"To create an array with a given number of elements with a different initial\n",
"value, you can use the `ones()` function and multiply it by the value of choice.\n",
"The following code creates an array with five elements, all initialized to the\n",
"value 9:"
]
},
{
"cell_type": "code",
"execution_count": 21,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[ 9. 9. 9. 9. 9.]\n"
]
}
],
"source": [
"print(ones(5) * 9)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Storing the number of bacteria in an array\n",
"\n",
"We are now ready to start implementing the exponential growth model.\n",
"We want to simulate the population growth over five generations\n",
"including the initial generation.\n",
"We store the number of generations in the variable `N`:"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"N = 5"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<!-- -->\n",
"To store the calculated values, we need an array,\n",
"which we create using the `zeros` function:"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[ 0. 0. 0. 0. 0.]\n"
]
}
],
"source": [
"from pylab import *\n",
"\n",
"N = 5\n",
"E = zeros(N)\n",
"\n",
"print(E)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<!-- -->\n",
"`E` is now an array with five elements,\n",
"one element for the initial condition and four elements for the following\n",
"generations.\n",
"We can implement the calculations we did earlier in this document."
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Number of bacteria: [ 10000. 20000. 40000. 80000. 160000.]\n"
]
}
],
"source": [
"from pylab import *\n",
"\n",
"N = 5\n",
"E = zeros(N)\n",
"\n",
"E[0] = 10000.\n",
"E[1] = 2*E[0]\n",
"E[2] = 2*E[1]\n",
"E[3] = 2*E[2]\n",
"E[4] = 2*E[3]\n",
"\n",
"print(\"Number of bacteria: \", E)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<!-- -->\n",
"The population in each generation is twice as large as the population in previous\n",
"generation.\n",
"The resulting values are the same as we found by hand calculation.\n",
"This method works, but we must repeat this process until we get to the\n",
"generation we are interested in.\n",
"What if we want to know the number of bacteria after 20 generations?\n",
"To do that we need to repeat the calculations 20 times,\n",
"which quickly becomes tiresome.\n",
"Fortunately, Python has a concept that can help us,\n",
"namely *for loops*.\n",
"\n",
"## `for` loops\n",
"\n",
"\n",
"When we have stored data in a list or array we often want to perform a specific\n",
"task for each item in that list or array.\n",
"In programming, this can be done with *loops*.\n",
"A loop repeats a task a specific number of times.\n",
"In Python there are two different variants:\n",
"`while` loops and `for` loops.\n",
"In this document, `for` loops are the most useful,\n",
"so we explain only those for now, and get back to `while` loops in\n",
"[[dna]](#dna).\n",
"\n",
"The following `for` loop takes every number in the list of numbers and prints it\n",
"to the screen:"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"1\n",
"2\n",
"4\n",
"3\n",
"Finished printing numbers to screen!\n"
]
}
],
"source": [
"numbers = [1, 2, 4, 3]\n",
"\n",
"for number in numbers:\n",
" print(number)\n",
"\n",
"print(\"Finished printing numbers to screen!\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"It is important to remember the colon, `':'`, that marks the end of the `for`\n",
"statement.\n",
"\n",
"The *indented code block* that follow this colon will be run for each element\n",
"in the list.\n",
"*Indentation* is the concept of starting every line with a specific number of\n",
"*whitespace characters*.\n",
"Whitespace characters are the invisible characters you create by pressing the\n",
"`Space` or `Tab` keys on your keyboard.\n",
"Consecutive lines with the same indentation form an indented code block.\n",
"In Python, you can make an indented block using any number or combination of\n",
"white-spaces, but the convention used by programmers is to make an indent using\n",
"4 spaces.\n",
"Many text editors will give you this indentation automatically when you type in\n",
"the start of a `for`-loop.\n",
"Each statement in a block must be indented in exactly the same way.\n",
"\n",
"### Understanding the for loop line by line\n",
"\n",
"It is a good idea to understand all details in the program by following the\n",
"program flow by hand, and we will go through the above example line by line:\n",
"\n",
"* We assign the variable `numbers` to be a list of the numbers 1, 2, 4 and 3.\n",
"\n",
"* Then we enter the `for`-loop by running each line in the indented code block.\n",
"\n",
"* In the first pass of the loop, `number` refers to the first element in `numbers`, which has the value `1`.\n",
"\n",
"* Inside the loop we print out `number`, which is `1`.\n",
"\n",
"* There are no more statements in the indented code block, so we proceed with the next repetition of the loop.\n",
"\n",
"* In the second pass, `number` is `2` and we print `2` to screen.\n",
"\n",
"* In the third pass, `number` is `4` and we print `4` to screen. Notice that `number` is not the current list index, it is the third element of the array, which is `4`.\n",
"\n",
"* After printing the last `number` element, with value `3`, we exit the loop and\n",
"\n",
"* move to the statement after the indented code block, which prints `Finished printing numbers to screen!`.\n",
"\n",
"The order of operations in a `for` loop is shown as a flowchart in [Figure 3](#fig:bacterial_growth_modeling:flowchart).\n",
"As you can see, until the last item in the sequence is reached,\n",
"the code inside the loop is executed.\n",
"When the last item is reached, we exit the loop.\n",
"\n",
"<!-- dom:FIGURE: [figures-bacterial_growth_modeling/flowchart_for_loop.png, width=450 frac=0.3] Operation of a for loop. <div id=\"fig:bacterial_growth_modeling:flowchart\"></div> -->\n",
"<!-- begin figure -->\n",
"<div id=\"fig:bacterial_growth_modeling:flowchart\"></div>\n",
"\n",
"<img src=\"figures-bacterial_growth_modeling/flowchart_for_loop.png\" width=450>\n",
"<p style='font-size: 0.9em'><i>Figure 3: Operation of a for loop.</i></p>\n",
"\n",
"<!-- end figure -->\n",
"\n",
"\n",
"### Common errors\n",
"\n",
"Many novice Python programmers forget the colon at the end of the `for`-line.\n",
"This colon marks the end of the `for` statement and the beginning of the\n",
"indented block of statements inside the loop.\n",
"If you forget this colon you will get the following error message:"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {
"collapsed": false
},
"outputs": [
{
"ename": "SyntaxError",
"evalue": "invalid syntax (<ipython-input-26-af243a06413a>, line 3)",
"output_type": "error",
"traceback": [
"\u001b[1;36m File \u001b[1;32m\"<ipython-input-26-af243a06413a>\"\u001b[1;36m, line \u001b[1;32m3\u001b[0m\n\u001b[1;33m for number in a\u001b[0m\n\u001b[1;37m ^\u001b[0m\n\u001b[1;31mSyntaxError\u001b[0m\u001b[1;31m:\u001b[0m invalid syntax\n"
]
}
],
"source": [
"from pylab import *\n",
"a = array([1, 2, 3, 4])\n",
"for number in a\n",
" print(number)\n",
"print(\"Finished\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"This message tells you that there is a syntax error in your program.\n",
"These kind of mistakes are often the easiest to correct.\n",
"The error message also tells us which line caused the error,\n",
"which in this case is `line 3`.\n",
"\n",
"Another error you might encounter is the *indentation error*.\n",
"It is very important that each statement in the `for`-block is indented.\n",
"Everything that is not indented will not be part of the loop.\n",
"All statements in a `for`-block must have the same indentation level.\n",
"For example, the code shown below has an error,\n",
"because there are two different levels of indentation inside the `for` loop:"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {
"collapsed": false
},
"outputs": [
{
"ename": "IndentationError",
"evalue": "unexpected indent (<ipython-input-27-65cb1fa8e23c>, line 5)",
"output_type": "error",
"traceback": [
"\u001b[1;36m File \u001b[1;32m\"<ipython-input-27-65cb1fa8e23c>\"\u001b[1;36m, line \u001b[1;32m5\u001b[0m\n\u001b[1;33m print(2 * number)\u001b[0m\n\u001b[1;37m ^\u001b[0m\n\u001b[1;31mIndentationError\u001b[0m\u001b[1;31m:\u001b[0m unexpected indent\n"
]
}
],
"source": [
"from pylab import *\n",
"a = array([1, 2, 3, 4])\n",
"for number in a:\n",
" print(number)\n",
" print(2 * number)\n",
"print(\"Finished printing numbers to screen!\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The error tells us that we have wrong indentation level somewhere in our code, in this case on `line 5`.\n",
"\n",
"### Using `range` in for loops\n",
"\n",
"In many situations it is useful to loop over indices of elements in a\n",
"collection, instead of the elements themselves.\n",
"A function often used in these cases is the *range* function,\n",
"`range(start, stop, step)`.\n",
"This function takes a *start* value, a *stop* value and the *step* size and\n",
"generates a sequence of numbers from `start` up to but not including `stop` with\n",
"a step size of `step`.\n",
"\n",
"Simple usage of the `range` function is shown below:\n",
"<!-- -->"
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"4\n",
"6\n",
"8\n",
"10\n",
"12\n",
"14\n"
]
}
],
"source": [
"for i in range(4, 16, 2):\n",
" print(i)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<!-- -->\n",
"In this example we generate a sequence starting from 4 up to,\n",
"but not including 16, with step size 2.\n",
"\n",
"If the *step* argument is omitted, it defaults to 1.\n",
"Calling the function with only `start` and `stop`, \n",
"that is `range(start, stop)`, is the same as calling `range(start, stop, 1)`:"
]
},
{
"cell_type": "code",
"execution_count": 29,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"4\n",
"5\n",
"6\n",
"7\n",
"8\n"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"9\n"
]
}
],
"source": [
"for i in range(4, 10):\n",
" print(i)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"If the *start* argument is omitted, it defaults to 0:"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0\n",
"1\n",
"2\n",
"3\n",
"4"
]
},
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"5\n"
]
}
],
"source": [
"for i in range(6):\n",
" print(i)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Notice that the range function is made in such a way that if it takes two\n",
"arguments, `range(start,stop)`, then `stop` is the second argument,\n",
"while if it takes one argument, `range(stop)`, then `stop` is the first\n",
"argument.\n",
"This might seem confusing, but it makes `range` much more intuitive when using\n",
"two arguments, as it otherwise would be hard to remember that we had to write\n",
"it as `range(stop, start)`.\n",
"\n",
"All parameters to the `range` function must be integers,\n",
"so `range(0.5, 10)` does not work.\n",
"If you would like to use floats as arguments, you can use the `arange` function,\n",
"which supports both integers and floats:"
]
},
{
"cell_type": "code",
"execution_count": 31,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"0.5\n",
"0.8\n",
"1.1\n",
"1.4\n",
"1.7\n",
"2.0\n",
"2.3\n",
"2.6\n"
]
}
],
"source": [
"from pylab import *\n",
"for i in arange(0.5, 2.7, 0.3):\n",
" print(i)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Implementing exponential growth\n",
"\n",
"Let us now return to our model and implement the calculations inside a `for`\n",
"loop, instead of calculating the number of bacteria one generation at the time.\n",
"\n",
"The program becomes:"
]
},
{
"cell_type": "code",
"execution_count": 32,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Number of bacteria: [ 10000. 20000. 40000. 80000. 160000.]\n"
]
}
],
"source": [
"from pylab import *\n",
"\n",
"N = 5\n",
"E = zeros(N)\n",
"\n",
"E[0] = 10000.\n",
"\n",
"for n in range(1, N):\n",
" E[n] = 2*E[n-1]\n",
"\n",
"print(\"Number of bacteria: \", E)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The first six lines are as before.\n",
"We import the pylab package, set the number of generations, and create an array with `N` elements.\n",
"The first element in array is set to the known initial condition, which is $E_0 = 10\\; 000$.\n",
"\n",
"Then we loop over each generation as a sequence of numbers using `range(1, N)`.\n",
"Note that, we don't loop over 0 since we already know `E[0]`,\n",
"the initial condition.\n",
"Inside the `for` loop we write the equation for the number of bacteria,\n",
"`E[n] = 2*E[n-1]`.\n",
"Note how similar this is to the mathematical version of the equation:"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<!-- Equation labels as ordinary links -->\n",
"<div id=\"_auto1\"></div>\n",
"\n",
"$$\n",
"\\begin{equation}\n",
" E_n = 2E_{n-1}\n",
"\\label{_auto1} \\tag{2}\n",
"\\end{equation}\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"In the first pass of the loop, `n` is 1, and we use `E[0]` to calculate `E[1]`\n",
"which is `2*E[0]`.\n",
"There are no more statements in the loop block,\n",
"so we proceed with the next part of the loop. \n",
"In the second pass `n=2`, and we compute `E[2] = 2*E[1]`.\n",
"Continuing in the same way, we calculate `E[3]` using `E[2]`,\n",
"and `E[4]` is computed using `E[3]`.\n",
"After computing the number of bacteria in the fourth generation,\n",
"we exit the loop and move to the print command,\n",
"which prints the `E` array.\n",
"\n",
"The output from last program is in accordance with the numbers we calculated\n",
"earlier in this document.\n",
"This is a good test that shows our new program using a `for` loop behaves as\n",
"expected.\n",
"We are now able to find the number of bacteria after any number of generations,\n",
"by just increasing the number of generations `N`.\n",
"You can test this for yourself by for example setting `N=13`.\n",
"\n",
"### Plotting the modeled *E. coli* growth\n",
"\n",
"As we can see from the output of our program,\n",
"the model we have developed predicts the growth of *E. coli* to be increasing.\n",
"As before, it would be interesting to plot these values to see how $E$ behaves,\n",
"so let us utilize what we have learned about plotting:"
]
},
{
"cell_type": "code",
"execution_count": 33,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\nAAAASUVORK5CYII=\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7fb09fcca240>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"plot(E, 'o-')\n",
"xlabel('Generation')\n",
"ylabel('Population size, E')\n",
"title(\"Modeled bacterial growth\")\n",
"show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Note that we have used more generations in this last graph,\n",
"`N=13`, to see what happens over a longer period of time.\n",
"Also note that we can plot using only one array.\n",
"Python then plots the values in this array against their index,\n",
"as you see in the figure above.\n",
"The bacterial growth curve has the same shape as in our measured data,\n",
"but to see the actual differences we need to compare the modeled data to the\n",
"measured data.\n",
"\n",
"### Adding time to our model\n",
"\n",
"To be able to compare the model to the real data we must convert from\n",
"generations to time and save all times in an array.\n",
"This is quite easy, we start at $t = 0$ and for each generation the time is\n",
"increased by $\\Delta t = 20$ (minutes), which is the generation time.\n",
"We do this similar to how we calculated `E`.\n",
"We start by making an array containing `N` zeros,\n",
"and in the `for` loop we set the `n`-th time value,\n",
"`t[n]`, to be the previous time value plus the time step,\n",
"`t[n-1] + dt`.\n",
"The code becomes:"
]
},
{
"cell_type": "code",
"execution_count": 34,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[ 0. 20. 40. 60. 80. 100. 120. 140. 160. 180. 200. 220.\n",
" 240.]\n"
]
},
{
"data": {
"image/png": "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\n0P8D4Hmp+hxPlPMAAAAASUVORK5CYII=\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7fb09fcbc1d0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from pylab import *\n",
"\n",
"N = 13\n",
"dt = 20 # min\n",
"\n",
"E = zeros(N)\n",
"t = zeros(N)\n",
"\n",
"E[0] = 10000.\n",
"\n",
"# Calculating number of bacteria and time for each generation\n",
"for n in range(1, N):\n",
" E[n] = 2*E[n-1]\n",
" t[n] = t[n-1] + dt\n",
"\n",
"print(t)\n",
"\n",
"plot(t, E, 'o-')\n",
"xlabel('Time(minutes)')\n",
"ylabel('Population size, E')\n",
"title(\"Modeled bacterial growth\")\n",
"show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<!-- -->\n",
"We now have a time value for each time step,\n",
"and can plot the calculated number of bacteria against `t` as shown in the\n",
"figure above.\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"### Comparing model against experimental data\n",
"\n",
"We are now able to compare this to the experimental data.\n",
"Similarly to how we did in the previous document,\n",
"we compare them by reading our experimental data from file,\n",
"and plotting the measured data and the modeled data in the same plot:"
]
},
{
"cell_type": "code",
"execution_count": 35,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\nTkSuQmCC\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7fb09c862198>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"t_measured, E_measured = loadtxt('ecoli.csv', delimiter=\",\", unpack=True)\n",
"\n",
"plot(t_measured, E_measured, \"--o\", label=\"Measured\")\n",
"plot(t, E, 'o-', label=\"Modeled\")\n",
"xlabel('time(minutes)')\n",
"ylabel('E')\n",
"title(\"Modeled vs measured bacterial growth\")\n",
"legend(loc=\"upper left\")\n",
"show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<!-- -->\n",
"The `loc=\"upper left\"` argument controls where the legend box is placed.\n",
"In this case in the upper left corner.\n",
"We can use the following different locations by using a name or number from the\n",
"table below:\n",
"\n",
"<table border=\"1\">\n",
"<thead>\n",
"<tr><th align=\"center\"> Location </th> <th align=\"center\">Corresponding integer</th> </tr>\n",
"</thead>\n",
"<tbody>\n",
"<tr><td align=\"left\"> 'upper right' </td> <td align=\"center\"> 1 </td> </tr>\n",
"<tr><td align=\"left\"> 'upper left' </td> <td align=\"center\"> 2 </td> </tr>\n",
"<tr><td align=\"left\"> 'lower left' </td> <td align=\"center\"> 3 </td> </tr>\n",
"<tr><td align=\"left\"> 'lower right' </td> <td align=\"center\"> 4 </td> </tr>\n",
"<tr><td align=\"left\"> 'right' </td> <td align=\"center\"> 5 </td> </tr>\n",
"<tr><td align=\"left\"> 'center left' </td> <td align=\"center\"> 6 </td> </tr>\n",
"<tr><td align=\"left\"> 'center right' </td> <td align=\"center\"> 7 </td> </tr>\n",
"<tr><td align=\"left\"> 'lower center' </td> <td align=\"center\"> 8 </td> </tr>\n",
"<tr><td align=\"left\"> 'upper center' </td> <td align=\"center\"> 9 </td> </tr>\n",
"<tr><td align=\"left\"> 'center' </td> <td align=\"center\"> 10 </td> </tr>\n",
"</tbody>\n",
"</table>\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"We immediately notice one difference, our model has data from a longer time span\n",
"than what we measured, making it hard to compare them.\n",
"We would like to limit our view to where we have both types of data.\n",
"As with most problems we encounter while programming there are numerous possible\n",
"solutions.\n",
"We could use a smaller `N`, or as previously in\n",
"[[analyzing]](#analyzing),\n",
"extracte sublist with the data we want to plot,\n",
"but there exist another method we would like to show.\n",
"\n",
"\n",
"The plotting commands `xlim()` and `ylim()` gives us control over the x-axis and\n",
"y-axis respectively.\n",
"They take a list that consists of the minimum and maximum point we would limit\n",
"the respective axis to, `xlim(min, max)` and `ylim(min,\n",
"max)`.\n",
"Looking at our plot we see that our experiment goes from 0 to less than 200\n",
"minutes while the number of bacteria in this interval goes from 0 to less than\n",
"$5\\;\n",
"000\\;000$.\n",
"We want to limit our plot to these values, done by adding the following lines\n",
"before the `show()` command:"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"```\n",
" xlim(0, 200)\n",
" ylim(0, 5e6)\n",
"```"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"To summarize all we have done, we present the entire program:"
]
},
{
"cell_type": "code",
"execution_count": 36,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7fb09c87a7b8>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from pylab import *\n",
"\n",
"N = 13\n",
"dt = 20 # min\n",
"\n",
"E = zeros(N)\n",
"t = zeros(N)\n",
"\n",
"E[0] = 10000.\n",
"\n",
"# Calculating number of bacteria and time for each generation\n",
"for n in range(1, N):\n",
" E[n] = 2*E[n-1]\n",
" t[n] = t[n-1] + dt\n",
"\n",
"t_measured, E_measured = loadtxt('ecoli.csv', delimiter=\",\", unpack=True)\n",
"\n",
"plot(t_measured, E_measured, \"r--o\", label=\"Measured\")\n",
"plot(t, E, 'o-', label=\"Modeled\")\n",
"xlabel('Time(minutes)')\n",
"ylabel('Population size')\n",
"xlim(0, 200)\n",
"ylim(0, 5e6)\n",
"title(\"Modeled vs measured bacterial growth\")\n",
"legend(loc=\"upper left\")\n",
"show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The modeled bacterial growth is in accordance to our measured data.\n",
"There are some differences, but the overall trend is very similar to\n",
"experimental data.\n",
"\n",
"## Examining the effect of temperature on growth\n",
"<div id=\"sec:bacterial_modeling:temperature\"></div>\n",
"\n",
"\n",
"\n",
"Now that our model seems to be working, it is a good time to play around with\n",
"it.\n",
"We noted in the previous document that the bacteria multiply at different\n",
"rates depending on temperature.\n",
"How can we modify our model to show *E. coli* growth at other temperatures?\n",
"The only parameter we can modify is the generation time,\n",
"`dt`, so let us see what happens when we change the generation time.\n",
"\n",
"\n",
"### Comparing different generation times\n",
"\n",
"As a first test, we investigate what happens if we double the generation time.\n",
"We can do this by repeating all the code for the model,\n",
"and update the generation time between the parts.\n",
"We do not limit the x-axis and y-axis to better see the differences,\n",
"we also create a semilogarithmic for the same reasons as in\n",
"[[analyzing]](#analyzing).\n",
"[Simen 5: should we tell the reasons?]\n",
"This would look like the following:"
]
},
{
"cell_type": "code",
"execution_count": 37,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7fb09c7edef0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from pylab import *\n",
"\n",
"N = 10\n",
"\n",
"generation_time = 20\n",
"E1 = zeros(N)\n",
"t1 = zeros(N)\n",
"E1[0] = 10000\n",
"\n",
"for n in range(1, N):\n",
" E1[n] = 2*E1[n-1]\n",
" t1[n] = t1[n-1] + generation_time\n",
"\n",
"# now we repeat with double the generation time\n",
"generation_time = 40\n",
"E2 = zeros(N)\n",
"t2 = zeros(N)\n",
"E2[0] = 10000\n",
"\n",
"for n in range(1, N):\n",
" E2[n] = 2*E2[n-1]\n",
" t2[n] = t2[n-1] + generation_time\n",
"\n",
"\n",
"plot(t1, E1, \"-o\", label=\"generation time: 20 minutes\")\n",
"plot(t2, E2, \"-o\", label=\"generation time: 40 minutes\")\n",
"\n",
"yscale(\"log\")\n",
"legend(loc=\"lower right\")\n",
"xlabel(\"Time (minutes)\")\n",
"ylabel(\"Population size\")\n",
"title(\"Modeled bacterial growth at different temperatures\")\n",
"show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"This is interesting, but we can do better, if we would like to examine eight\n",
"different generation times we would need to copy paste the code eight times,\n",
"and it would become a chore.\n",
"Copying code also increase the risk of introducing new bugs in our code.\n",
"Using our new tool of `for` loops we can solve this problem in a better way,\n",
"and avoid repeating our code.\n",
"We make a list of the different generation times we want to test,\n",
"and then put the code for solving the model inside the loop.\n",
"\n",
"This introduces something we have not done yet,\n",
"having a loop inside a loop.\n",
"This is called a *double loop*.\n",
"The best way to understand new concepts in programming is to make a simple\n",
"program that uses the that concept, and make the program as simple as possible.\n",
"Below is such an example:"
]
},
{
"cell_type": "code",
"execution_count": 38,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"outer: 0 inner: 0\n",
"outer: 0 inner: 1\n",
"outer: 0 inner: 2\n",
"inner loop complete!\n",
"outer: 1 inner: 0\n",
"outer: 1 inner: 1\n",
"outer: 1 inner: 2\n",
"inner loop complete!\n",
"outer: 2 inner: 0\n",
"outer: 2 inner: 1\n",
"outer: 2 inner: 2\n",
"inner loop complete!\n",
"outer loop complete!\n"
]
}
],
"source": [
"for outer in range(3):\n",
" for inner in range(3):\n",
" print(\"outer: \", outer, \"inner: \", inner)\n",
"\n",
" print(\"inner loop complete!\")\n",
"\n",
"print(\"outer loop complete!\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<!-- -->\n",
"Let us first notice the syntax for the double loops.\n",
"We already know the syntax of a normal for loop,\n",
"where everything inside the loop must be indented.\n",
"This also applies to the inner `for` loop, which means everything inside the\n",
"inner loop must be double indented.\n",
"In the example above, `print(\"outer:\n",
"\", outer, \"inner:\n",
"\", inner)` is inside both loops.\n",
"The `outer` variable is zero the first iteration of the outer loop.\n",
"For each pass of the outer loop we do all iterations of the inner loop, increasing `inner` variables and print out\n",
"the `outer` and `inner` variables."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"```Python\n",
" outer: 0 inner: 0\n",
" outer: 0 inner: 1\n",
" outer: 0 inner: 2\n",
" inner loop complete!\n",
"```"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<!-- -->\n",
"We are then finished with the inner loop and continue with the next iteration of\n",
"the outer loop, `outer` now becomes one.\n",
"Here we once again we do all iterations of the inner loop and print out the\n",
"`outer` and `inner` variables.\n",
"<!-- -->"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"```Python\n",
" outer: 1 inner: 0\n",
" outer: 1 inner: 1\n",
" outer: 1 inner: 2\n",
" inner loop complete!\n",
"```"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<!-- -->\n",
"Then we do the last iteration of the outer loop,\n",
"before we are finished with the outer loop and exit it,\n",
"printing `outer loop complete!`.\n",
"<!-- -->"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"```Python\n",
" outer: 2 inner: 0\n",
" outer: 2 inner: 1\n",
" outer: 2 inner: 2\n",
" inner loop complete!\n",
" outer loop complete!\n",
"```"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We urge the reader to make more examples like this,\n",
"and attempt to type out by hand what they predict the output will be.\n",
"\n",
"By using double for loops our program becomes much more compact,\n",
"and easier to extend to compare more than two generation times.\n",
"The following program produce the same output as the first,\n",
"but is only half the length.\n",
"For a trained programmer it will also be more readable.\n",
"The idea of the program is more apparent - we want to repeat the same experiment\n",
"with two different sets of parameters.\n",
"The repetition becomes more obvious when put inside a loop."
]
},
{
"cell_type": "code",
"execution_count": 39,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7fb09c887160>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from pylab import *\n",
"\n",
"N = 10\n",
"generation_time_list = [20, 40]\n",
"# Outer for loop, looping over different generation times\n",
"for generation_time in generation_time_list:\n",
" E = zeros(N)\n",
" t = zeros(N)\n",
" E[0] = 10000\n",
" # Inner for loop, looping over each generation\n",
" for n in range(1, N):\n",
" E[n] = 2*E[n-1]\n",
" t[n] = t[n-1] + generation_time\n",
"\n",
" # Creating a string with the generation time to use as a label in the plot\n",
" plot(t, E, \"-o\", label=\"generation time: \" + str(generation_time) + \" minutes\")\n",
"\n",
"yscale(\"log\")\n",
"legend(loc=\"lower right\")\n",
"xlabel(\"Time (minutes)\")\n",
"ylabel(\"Population size\")\n",
"title(\"Modeled bacterial growth at different temperatures\")\n",
"show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We see that the effect of doubling the generation time is that the growth curve\n",
"becomes less steep.\n",
"In fact the growth rate exactly halves.\n",
"We can get this from the relation we found in\n",
"[[analyzing]](#analyzing),"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$$\n",
"\\begin{align*}\n",
"a = {\\log_{10} (2) \\over \\text{generation time}},\n",
"\\end{align*}\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<!-- -->\n",
"so our model is consistent with what we observed in the data.\n",
"\n",
"### Revising the effect of temperature on growth rate once again\n",
"\n",
"Let us end by recreating the *E. coli* growth curves at the different temperatures\n",
"that we saw in [[analyzing]](#analyzing).\n",
"There, we found each growth rate by repeating the same code for each file.\n",
"Now, we can do this in a better way, using for loops.\n",
"We can loop through all the different experiments by the following lines of\n",
"code:"
]
},
{
"cell_type": "code",
"execution_count": 40,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"file_list = ['ecoli_17.csv', 'ecoli_29.csv', 'ecoli_39.csv', 'ecoli_45.csv', 'ecoli_48.csv']\n",
"\n",
"for file_name in file_list:\n",
" t, E = loadtxt(file_name, delimiter=',', unpack=True)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<!-- -->\n",
"And we can the calculate the growth rate in each experiment inside the `for`\n",
"loop:"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"```Python\n",
" a = (log10(E[-1]) - log10(E[0])) / (t[-1] - t[0])\n",
"```"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We then save the growth rate to a list, and can plot the growth rates vs\n",
"temperatures outside the `for` loop.\n",
"The complete program is:"
]
},
{
"cell_type": "code",
"execution_count": 41,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\nAElFTkSuQmCC\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7fb09fcbc668>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from pylab import *\n",
"\n",
"file_list = ['ecoli_17.csv', 'ecoli_29.csv', 'ecoli_39.csv', 'ecoli_45.csv', 'ecoli_48.csv']\n",
"\n",
"temperatures = [17, 29, 39, 45, 48]\n",
"rates = []\n",
"\n",
"# Loop over each file\n",
"for file_name in file_list:\n",
" # read data:\n",
" t, E = loadtxt(file_name, delimiter=',', unpack=True)\n",
"\n",
" # find generation time:\n",
" a = (log10(E[-1]) - log10(E[0])) / (t[-1] - t[0])\n",
"\n",
" # Append to a list\n",
" rates.append(a)\n",
"\n",
"# plot the results:\n",
"plot(temperatures, rates, 'o-')\n",
"xlabel('Temperature')\n",
"ylabel('Growth rate (1/minutes)')\n",
"title(\"Growth rate vs temperature\")\n",
"show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"When we compare this to\n",
"\n",
"in [[this_book]](#this_book)\n",
"in the previous document we see that the results are identical.\n",
"We therefore know we have not done anything wrong when using the `for` loop.\n",
"Using `for` loops to automatically read in every file and calculate the growth\n",
"rate is much faster to write, since we do not have to write every step ourself\n",
"and makes it so we can expand to look at any number of files.\n",
"\n",
"\n",
"\n",
"\n",
"### Comparing modeled to measured bacterial growth at different temperatures\n",
"\n",
"Now we can model the bacterial growth rate for each of these temperatures.\n",
"We use the above program to calculate the growth rate,\n",
"and then for each file we model the bacterial growth using the calculated growth\n",
"rate.\n",
"To do this we will use a double `for` loop.\n",
"Inside the `for` loop looping over each file(temperature) we initialize a `t`\n",
"and an `E` array, and set their initial conditions.\n",
"Then we loop over each generation and calculate the bacterial growth and time\n",
"array.\n",
"There is one new thing we must take into account,\n",
"the measured data all starts at different time values.\n",
"The reason for this is because they only contain data for the exponential growth\n",
"phase and that starts at different times.\n",
"To better be able to compare the data we instead want the time for each\n",
"experiment to start at zero.\n",
"To achieve this we can subtract the first time element from each element of the\n",
"time array.\n",
"This will scale the results, and as you learned earlier in this document,\n",
"this extremely simple to do with arrays.\n",
"We can simply write:\n",
"<!-- -->"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"```Python\n",
" t = t - t[0]\n",
"```"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<!-- -->\n",
"Lastly we plot the results inside the outer `for` loop.\n",
"This makes it so all the lines end up in the same plot and we easier can compare\n",
"them.\n",
"The full program is shown below."
]
},
{
"cell_type": "code",
"execution_count": 42,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\nklK+6OzsfFftODVxw8fnKGq1MYFBjwortOYr5+tJkE3Jxcbs4VThxtyR/sp6kkKtsC6fHtc3AAAR\nvklEQVQlg24HTuC5J5ZuB06wLsX8C5SCQl2kQQSm6qLP6Gexts01fY/iaXTCGitZOjjZ6AtodPYq\nBtS8oX2hjKQQGjs8Rs5RgpJCrbAuJYNXz1whoUCLBBIKtLx65kqdCk6tW7c2+SvdTZ2S3EtV8JLK\n6DNnzmTnzp3lnjN16lQcHR1N32/evMnQoUMJDAzEz8+PJUuW1Fh/6xvKGlMJ2nTuTeovTdDZpSOB\nAmzoL7fRgZNE6v9GusoNr4KrPH1+Az9e7c4VmvF7o0d4IxPesI6iGdcQzt4wYCYEPFXbt6PQgAk9\neq5M2TB3V8K93Jh9IZk8Q+mN83kGyb/PJfKER2PSC3WMP3Gx1PEfO7et0f42ZN55551y68TExHD9\n+vVSZV9++SWdOnVi06ZNpKWl0b59e8aOHYu1tXlHg78SyoipBLErfkZ/KQQpjZtgn+NbwvkvPfW/\nsvH0OC78MpDh+zbyRcJgrshmJrWGBXPm4hERh4i4Aa/8qQQlhVolucD89PN1nb7KbcbHx9OhQwfG\njRtHu3btGDt2LDt37qR37960bduWQ4cOAZZ9mNLT0xk4cCB+fn6MHz+ekooz5jyebsdSnSVLltCu\nXTuCg4PL7IWyxLx58+jevTsBAQHMmjXLVL5s2TICAgIIDAzkmWeeMd13//79CQgIYMCAAVy+fLlM\ne+PGjWPt2rUWr6fX63nttdf48MMPS5ULIcjKykJKSXZ2No0bN8bKquxY4fDhw4SEhBAYGEhwcDBZ\nWVmcOHHC9DwCAgI4d+4c06dPL5V6XxG/qzqLlLLBfLp27SrvhtX/94Vc+v1AOXjnQvnJluFyx05f\nuXpzV7n9s+5y/797yj7Tv5Wt/m+zbPV/m2WHf2+VPx5JuKvrKShUlJMnT1a4btf9f8pmu4+W+XTd\n/2eVr3/x4kWpVqvl8ePHpV6vl126dJHh4eHSYDDI9evXy+HDh0sppXz55ZdlRESElFLKXbt2ycDA\nQCmllFOmTJFvv/22lFLKzZs3S0CmpaXJkydPyscff1wWFhZKKaX8+9//Lr/77jsppZStWrW6Y52k\npCTZokULmZqaKgsKCmRISIicPHmylFLKDRs2yLfeeqvMfWzbtk1OmDBBGgwGqdfr5ZAhQ+Qvv/wi\n//zzT9m2bVuZlpYmpZQyPT1dSinl448/LpcuXSqllPLbb7813eesWbPkvHnzpJRSPvfcczIqKsri\ns/v000/lJ598IqWU0sHBwVSemZkp+/XrJz08PKSDg4PcvHlzmXMLCgqkj4+PPHTokJRSyps3b0qt\nVitffvlluWLFClOd3NxceeTIEdm3b1/TuR07dpSXL18u06a5nyUgRtaB/8OLP8pUXhHZqdfJdLvA\nTveB/C564HH6OuvThnJJemBPPta2jjg4aJSNsgp1njd8PXn1zJVS03klrViqio+PD/7+/gD4+fkx\nYMAAhBD4+/sTHx8PWPZh2rt3Lz/88AMAQ4YMwdXVFTDv8eTu7l7qupbqHDx4kH79+tG0qdGaJiws\njLNnzwIwbNgwhg0bVuYetm/fzvbt2+ncuTMA2dnZnDt3jmPHjjFq1Cjc3IxZuMW+Ur/++qup3888\n8wyvv/56pZ5ZUlISUVFR/Pzzz2WObdu2jaCgIHbv3s358+d55JFH6NOnTykV9jNnzuDp6Wm69+Jj\nvXr1Yvbs2SQkJDBy5Ejatm1L586dSU1NJSkpibS0NFxdXWnRokWl+ltXqPOBSQjhAPwCREgpN9fE\nNV5bPJefWnUnvcvfQAgCrp/l28y5LFAbRVelxoGI4fcrgUihXvBEkbr93AvJJBZo8bLR8Iavp6m8\nqtjY3MpAValUpu8qlQqdTlelNmWRx9PcuXMrXafY0qKy13vjjTeYOHFiqfLPP/+80m1VhKNHjxIX\nF0ex80Fubi733XcfcXFxLFmyhOnTpyOE4L777sPHx4fTp09XSN386aefpkePHmzZsoXBgwfz9ddf\n079/f0aNGsXatWtJSUkhLCysRu7pXnDP15iEEIuFEKlCiD9vK39UCHFGCBEnhJhe4tD/AZE11Z/X\nFs9lTeuHSFe5mTTyTru05NUWr/Op7gm8XOyUtG+FescTHo2JCfEj+aEgYkL87jooVRRLPkx9+/Zl\n1SqjrfvWrVtNiQDmPJ4uXbpUqk1LdXr06MEvv/xCeno6Wq2WqKiocvs3aNAgFi9eTHZ2NgCJiYmk\npqbSv39/oqKiSE9PN10DICQkhNWrVwOwcuVK+vTpU6nnMWTIEFJSUky+Uvb29sTFxQHQsmVLdu3a\nBcDVq1c5c+ZMKRdegPbt25OcnMzhw4cBozOvTqfjwoUL+Pr6MnXqVIYPH25aywsLC2P16tWsXbuW\nUaNGVaqvdYnaGDEtBb4AlhUXCCHUwJfAI0ACcFgIsRHwAk4CtjXVmZ9adadQlG6+UNiytXUPLr7w\ncE1dVkGhQWLJh2nWrFmMGTMGPz8/QkJCaNmyJWDZ46lVq1amNi3V6dmzJxEREfTq1QsXFxeCgoJM\n52zcuJGYmJgyGXMDBw7k1KlT9OrVCwBHR0dWrFiBn58fM2bM4MEHH0StVtO5c2eWLl3K559/Tnh4\nOPPmzaNp06bVmtL91ltvMW7cOPz9/ZFS8sEHH5imEgcPHsw333xD8+bNWbNmDVOmTCEvLw87Ozt2\n7txJZGQky5cvR6PR4OHhwZtvvgkYp1izsrLw8vLC0/Pupm5rk1rxYxJCtAY2SynvL/reC+NU3aCi\n728UVXUEHIBOQB4QKqU03NbWi8CLAC1btux6+9tWeXjsPgLCzMBRGkjp36VSbSko1BSKH5NCdaH4\nMVUcL+BKie8JQA8p5csAQohxwLXbgxKAlHKRECIZGGptbd21shduIjNIF2Vlh5rIurMZUUFBQeGv\nRL3YxySlXHqnxAd5F5JEgy8dxlrmlyqzlvkMvnS48h1VUFD4yxIaGkpQUFCpz7Zt22q7W/WSujJi\nSgRK5jV6F5VVCCHEUGBoceZLZZj3/BtQnJUnGtNEZjD40mFjuYJCHUJKiShhYqlQt/jxxx9ruwvl\nUhtLN1WhrqwxWQFngQEYA9Jh4Gkp5YnKtNutWzcZExNTvZ1VUKgDXLx4EScnJ5o0aaIEJ4UqIaUk\nPT2drKwsfHx8Sh37y68xCSG+B/oBbkKIBGCWlPJbIcTLwDZADSyuTFC6mxGTgkJ9wNvbm4SEBNLS\n0mq7Kwr1GFtbW7y9vWu7G+VSKyOmmkIZMSkoKChUnro2YqoXyQ8KCgoKCn8dGkRgqi4HWwUFBQWF\n2qdBBKa7SRdXUFBQUKhbNKg1JiFEGlA56YfSuAEVt8y8t9TVvtXVfoHSt6qi9K3y/H975x9j1VHF\n8c+30NKEAlokuNrK0lqMJBZKf4TE0qDW2tIKWo3BNorRVGsM2ho1GBLDHzZpq7ap0bQRSqC12qap\nlY1JC9JUaWKwFLLAViAsiFHCj6YaAcWWH8c/5jz27vr2wdu+d++4nE9y8+adN3fud8+dnfNm5r6Z\nXHXBmWmbZGYTyhBzJgyrwPRWkfRKThOARXLVlqsuCG1DJbQ1T666IG9tgzEshvKCIAiC4UMEpiAI\ngiArIjD152dVC2hArtpy1QWhbaiEtubJVRfkra0uMccUBEEQZEX0mIIgCIKsiMAUBEEQZEUEJkDS\njZJ2SOqVtKiC618s6UVJf5L0qqRvuH2JpL2Suv2YUzjnu653h6SPtVnfHklbXcMrbrtQ0m8l7fTX\nt5epTdL7Cn7plnRI0l1V+UzSckkHJfUUbE37SNKV7uteST9WC5YSH0TbDyRtl7RF0rOS3ub2TklH\nC/57pAJtTd/DErU9VdC1R1K320vzW4P2Iov61hLM7Kw+SKuZ7wIuAc4DNgNTS9bQAczw9BjSFiBT\ngSXAt+rkn+o6RwGTXf+INurbA7xjgO1+YJGnFwH3VaGtcA/3A5Oq8hlwHTAD6HkrPgJeBmYCAp4D\nbmqTthuAkZ6+r6Cts5hvQDllaWv6HpalbcDnPwK+V7bfGLy9yKK+teKIHhNcA/Sa2W4zexN4EphX\npgAz22dmmzx9GNhG2m5+MOYBT5rZG2b2Z6CX9HeUyTxgpadXAp+oUNtHgF1m1mjVj7bqMrN1wN/r\nXPOMfSSpAxhrZusttRqPFc5pqTYzW2Nmx/3tetLmnINSprYGVO63Gt6z+Azwy0ZltENbg/Yii/rW\nCiIwpRv618L7v9E4KLQVpU0UrwD+6KaFPtyyvNA1L1uzAWslbZT0ZbdNNLN9nt4PTKxIG8B8+jcQ\nOfgMmvfRuz1dpkaAL5K+LdeY7MNRv5c0y21la2vmHlbht1nAATPbWbCV7rcB7cX/S307LRGYMkLS\nBcAzwF1mdgh4mDTEOB3YRxo6qIJrzWw6cBPwNUnXFT/0b1uV/O5A0nnAXOBpN+Xis35U6aNGSFoM\nHAeecNM+4D1+v78J/ELS2JJlZXkPB/BZ+n8ZKt1vddqLU+Ra386UCExpK/eLC+8vclupSDqXVMme\nMLNfAZjZATM7YWYngaX0DT2VqtnM9vrrQeBZ13HAhwJqwxUHq9BGCpabzOyAa8zCZ06zPtpL/yG1\ntmqU9AXgFuB2b8jw4Z7XPb2RNB8xpUxtQ7iHZfttJHAr8FRBc6l+q9dekHl9a4YITLABuEzSZP/2\nPR/oKlOAj1c/CmwzswcK9o5Ctk8CtaeDuoD5kkZJmgxcRprEbIe20ZLG1NKkSfMe17DAsy0AVpWt\nzen3zTUHnxVoykc+DHNI0kyvE58vnNNSJN0IfAeYa2b/LtgnSBrh6Utc2+6StTV1D8vU5lwPbDez\nU8NgZfptsPaCjOtb01T99EUOBzCH9GTLLmBxBde/ltTt3gJ0+zEHeBzY6vYuoKNwzmLXu4M2PklD\nGlLZ7MerNf8A44EXgJ3AWuDCCrSNBl4HxhVslfiMFBz3AcdIY/VfGoqPgKtIDfEu4Cf46ixt0NZL\nmneo1bdHPO+n/D53A5uAj1egrel7WJY2t68A7hyQtzS/MXh7kUV9a8URSxIFQRAEWRFDeUEQBEFW\nRGAKgiAIsiICUxAEQZAVEZiCIAiCrIjAFARBEGRFBKZg2CFpfGGV5/3qv1L1H9p0zSskPdrkOcsk\nTR3i9Tol3TaUc/38tcXVp4MgJ+Jx8WBYI2kJcMTMftjm6zwNfN/MNrfzOoXrzSatwH3LEM9fAFxk\nZve0VFgQtIDoMQVnFZKO+OtsX2xzlaTdku6VdLukl5X2p7nU802Q9IykDX58sE6ZY4DLa0FJaT+h\nlZJekvQXSbdKut/Lfd6Xk0HS7yRdVdMl6R5JmyWtlzTR7SskfXqgfuBeYJb3Au+WNEJpj6UNSouf\nfsXzd0ha5/l61Le4aBdp1YwgyI4ITMHZzDTgTuD9wOeAKWZ2DbAMWOh5HgIeNLOrSb/uX1annNqv\n54tcCnyYtMDsz4EXzewDwFHg5jpljAbWm9k0YB1wx2m0LwJeMrPpZvYgacWEf7rOq4E7fPmZ24DV\nlhYXnUZaJQAz+wcwStL401wnCEpnZNUCgqBCNphvEyBpF7DG7VuBD3n6emCq+jb2HCvpAjM7Uiin\nA3htQNnPmdkxSVtJGxk+Xyi7s46WN4HfeHoj8NEm/5YbgMsLvatxpDXRNgDLvZf2azPrLpxzEHgX\naVmnIMiGCEzB2cwbhfTJwvuT9P1vnAPMNLP/NCjnKHB+vbLN7KSkY9Y3mVssu0gxz4lCnuOuAUnn\nkHZZroeAhWa2+n8+SNuU3AyskPSAmT3mH53v2oMgK2IoLwgas4a+YT0kTa+TZxvw3jZdfw9wpafn\nAud6+jBpW+0aq4GvFuavpvjK8JNIG9otJQ1DzvDPBbzTyw+CrIgeUxA05uvATyVtIf2/rCPNS53C\nzLZLGidpjKWtrlvJUmCVpM2k4cB/uX0LcMLtK0hzYZ3AJg86r5G2yZ4NfFvSMeAIaWsDSMFuvfVt\nrx4E2RCPiwdBC5B0N3DYzOo9HJEdkh4Cuszshaq1BMFAYigvCFrDw/Sfs8qdnghKQa5EjykIgiDI\niugxBUEQBFkRgSkIgiDIighMQRAEQVZEYAqCIAiyIgJTEARBkBX/BSBH+7TE9AmrAAAAAElFTkSu\nQmCC\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7fb09c95d6a0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from pylab import *\n",
"\n",
"file_list = ['ecoli_17.csv', 'ecoli_29.csv', 'ecoli_39.csv', 'ecoli_45.csv', 'ecoli_48.csv']\n",
"N = 20 # number of generations in the model\n",
"\n",
"for file_name in file_list:\n",
" # read data:\n",
" t, E = loadtxt(file_name, delimiter=',', unpack=True)\n",
"\n",
" # find generation time:\n",
" a = (log10(E[-1]) - log10(E[0])) / (t[-1] - t[0])\n",
" generation_time = log10(2)/a\n",
"\n",
" # make sure to account for the lag phase by moving the start of time array to 0\n",
" t = t - t[0]\n",
"\n",
" # initialize the arrays:\n",
" t_model = zeros(N)\n",
" t_model[0] = 0\n",
" E_model = zeros(N)\n",
" E_model[0] = E[0]\n",
"\n",
" # model for loop:\n",
" for n in range(1, N):\n",
" E_model[n] = 2*E_model[n-1]\n",
" t_model[n] = t_model[n-1] + generation_time\n",
"\n",
" # plot the results:\n",
" plot(t, E, \"-o\", label=(file_name))\n",
" plot(t_model, E_model, \"--o\", label=(\"modeled: \" + file_name))\n",
"\n",
"# format and show the plot:\n",
"yscale(\"log\")\n",
"legend()\n",
"xlabel(\"Time (minutes)\")\n",
"ylabel(\"Population size\")\n",
"title(\"Modeled vs measured bacterial growth at different temperatures\")\n",
"show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"From this we can see that our model is able to accurately predict the *E. coli*\n",
"growth at different temperatures, provided that we give it the correct\n",
"generation time.\n",
"\n",
"\n",
"\n",
"[Simen 6: Do we need more discussion of this final result?]\n",
"[Andreas 7: We may want some of this to be left as an exercise.]\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"## Limitations of the exponential growth model\n",
"\n",
"Is exponential growth a good approximation?\n",
"In the growth phase, yes, but what happens if this growth continues for a day or\n",
"two?\n",
"Let us do a rough calculation.\n",
"First we need the number of time steps we must take in our simulation before two\n",
"days has passed.\n",
"The number of minutes in two days is 2 days times 24 hours per day times 60 minutes per\n",
"hour, which gives:"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$$\n",
"2 \\times 24 \\times 60 = 2880 \\; \\mathrm{minutes}.\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<!-- -->\n",
"We divide this by the generation time, $\\Delta t = 20$ minutes,"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$$\n",
"\\frac{2880}{20} = 144 \\;\\mathrm{generations}\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<!-- -->\n",
"We now simulate the bacterial growth over $144$ generations,\n",
"set `N = 144` with starting population $E_0=10\\;000$ and print out the number of\n",
"bacteria at the last time step, `print(E[-1])` and get:"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<!-- -->\n",
"In the following calculation we only want to get a sense for the scale of this\n",
"number of bacteria, we are not interested in the precise number,\n",
"therefore we round off to $10^{47}$ number of bacteria.\n",
"The weight of an *E. coli* bacterium is around $10^{-15}$ kg,\n",
"which means the total weight of all the bacteria is,"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$$\n",
"10^{47}\\times 10^{-15} \\text{kg} = 10^{32} \\text{ kg}.\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<!-- -->\n",
"After two days the total weight of the *E. coli* bacteria is approximately\n",
"$10^{32}$ kg.\n",
"This number is so huge that it is hard to imagine how many bacteria that is.\n",
"When we have numbers either very big or very small,\n",
"it is useful to find something to compare them to.\n",
"There are not much on Earth to compare this number of bacteria against,\n",
"the number is simply too large.\n",
"If we instead look at the solar system we find that the weight of *E. coli* is\n",
"about 50 times the weight of the Sun!\n",
"We have performed similar calculations for different time spans and found\n",
"objects with similar mass to compare to the total weight of the *E. coli*\n",
"bacteria.\n",
"The results are in the following table.\n",
"\n",
"<table border=\"1\">\n",
"<thead>\n",
"<tr><th align=\"center\">Hours</th> <th align=\"center\"> Total mass of the *E. coli* equal </th> </tr>\n",
"</thead>\n",
"<tbody>\n",
"<tr><td align=\"left\"> 5 </td> <td align=\"left\"> A fruit fly </td> </tr>\n",
"<tr><td align=\"left\"> 12 </td> <td align=\"left\"> An orange </td> </tr>\n",
"<tr><td align=\"left\"> 13 </td> <td align=\"left\"> Newborn human baby </td> </tr>\n",
"<tr><td align=\"left\"> 20 </td> <td align=\"left\"> The quaking aspen named Pando, largest living organism </td> </tr>\n",
"<tr><td align=\"left\"> 25.5 </td> <td align=\"left\"> Total mass of the human population </td> </tr>\n",
"<tr><td align=\"left\"> 30 </td> <td align=\"left\"> Total weight of carbon stored in the biosphere </td> </tr>\n",
"<tr><td align=\"left\"> 36 </td> <td align=\"left\"> All of the oceans on Earth </td> </tr>\n",
"<tr><td align=\"left\"> 40 </td> <td align=\"left\"> Mass of Earth </td> </tr>\n",
"<tr><td align=\"left\"> 46 </td> <td align=\"left\"> Mass of the Sun </td> </tr>\n",
"<tr><td align=\"left\"> 71 </td> <td align=\"left\"> Mass of the entire observable universe </td> </tr>\n",
"</tbody>\n",
"</table>\n",
"\n",
"<!-- dom:FIGURE: [figures-bacterial_growth_modeling/mass_e_coli.png, width=600 frac=1] Bacterial growth without limitation. Starting with a batch culture with $10\\;000$ individuals, their total mass after 12 hours is close to mass of an orange. After 40 hours the batch culture will weight close to the mass of the earth. <div id=\"fig:bacterial_growth_modeling:e_coli_mass\"></div> -->\n",
"<!-- begin figure -->\n",
"<div id=\"fig:bacterial_growth_modeling:e_coli_mass\"></div>\n",
"\n",
"<img src=\"figures-bacterial_growth_modeling/mass_e_coli.png\" width=600>\n",
"<p style='font-size: 0.9em'><i>Figure 4: Bacterial growth without limitation. Starting with a batch culture with $10\\;000$ individuals, their total mass after 12 hours is close to mass of an orange. After 40 hours the batch culture will weight close to the mass of the earth.</i></p>\n",
"\n",
"<!-- end figure -->\n",
"\n",
"\n",
"\n",
"As we see from this table, the weight of the *E. coli* quickly gets enormous.\n",
"After 40 hours the weight of *E. coli* is equal to the weight of the Earth and\n",
"after three days it weights more than all visible matter in the entire\n",
"observable universe.\n",
"Clearly exponential growth cannot continue without limitations.\n",
"From [[analyzing]](#analyzing)\n",
"we know that the exponential growth phase is followed by a stationary phase,\n",
"where the bacterial growth is limited by factors such as nutrition,\n",
"space and waste products that inhibits further growth.\n",
"In this phase the bacteria can no longer grow freely,\n",
"and our assumption that there are no factors limiting growth is invalid.\n",
"In the next section we will expand our model to handle this case.\n",
"\n",
"# Logistic growth: a more detailed model for bacterial growth\n",
"\n",
"\n",
"<div id=\"chp:bacterial_modeling:logistic\"></div>\n",
"\n",
"The exponential growth model shows how powerful a tool programming is.\n",
"We have created a model for how bacteria grow during the exponential growth\n",
"phase and compared the model to experimental results,\n",
"with good results.\n",
"This using only a few biological facts and less than 30 lines of Python code.\n",
"You have also been introduced to a very efficient philosophy for modeling a\n",
"biological system, or any system for that matter.\n",
"This philosophy is to start with the absolute simplest model possible and once\n",
"that model is implemented, we start to add additional details to the model.\n",
"This is what we are going to do now.\n",
"\n",
"\n",
"## Expanding the exponential growth model\n",
"\n",
"The exponential growth models allows the population to grow without bounds,\n",
"and as we saw this growth can not continue forever.\n",
"It is fine for short time spans, but any population that expands in this way\n",
"eventually runs out of resources.\n",
"This is what leads to the stationary phase of *E. coli* growth,\n",
"as seen in Figure in [[analyzing]](#analyzing).\n",
"In this section we introduce the following assumptions:\n",
"\n",
"\n",
"\n",
"\n",
"<hr/>\n",
"**Model assumptions.**\n",
"\n",
"We assume:\n",
"* If there is no limitation in resources available and the amount of waste products is low, the population doubles each generation.\n",
"\n",
"* There is a finite and constant supply of resources available each generation.\n",
"\n",
"* Each bacteria reproduce at the same rate, i.e. they have the same generation time.\n",
"<hr/>\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"When there are limited resources available there will be a maximum sustainable\n",
"population $K$, where the population will use all resources available in the\n",
"environment each generation.\n",
"The maximum sustainable population is called the carrying capacity,\n",
"and it varies from one environment to the next.\n",
"Any type of resource that is important to a species' survival can function as a\n",
"limit on the growth.\n",
"For *E. coli* the food and space available to grow as well as the amount of waste\n",
"products in the environment limits the growth.\n",
"Another example, for plants, sunlight, water,\n",
"the space to grow as well as the nutrients available can be some limiting\n",
"factors.\n",
"When we are at the carrying capacity we expect that there to be no change in the\n",
"population.\n",
"From Figure\n",
"in [[analyzing]](#analyzing)\n",
"we see that the carrying capacity for the measured bacterial population is\n",
"$K = 8\\cdot10^9$.\n",
"\n",
"\n",
"\n",
"To describe this with mathematics, we say that when $E_{n-1} = K$,\n",
"then $E_{n} = E_{n-1}$.\n",
"If the population is much smaller than the carrying capacity,\n",
"$E_{n-1} << K$($<<$ means much smaller than),\n",
"we expect the bacteria do follow exponential growth and almost double every time\n",
"step.\n",
"If the population is greater than the carrying capacity,\n",
"$E_{n-1} > K$, we expect the population to decrease until it reaches the maximum\n",
"sustainable population.\n",
"\n",
"We restate our assumptions as\n",
"\n",
" * When $E_{n-1} << K$ ,"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$$\n",
"E_{n} \\approx 2E_{n-1}\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"* When $E_{n-1}=K$,"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$$\n",
"E_{n} = E_{n-1}\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"* When $E_{n-1} > K$,"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$$\n",
"E_{n} < E_{n-1},\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<!-- -->\n",
"The $\\approx$ sign might be unfamiliar.\n",
"It means \"approximately equal\", so the first equation should not be read exactly\n",
"like a normal mathematical equation, but rather as more of a \"rule of thumb\".\n",
"There are many ways to implement these rules,\n",
"but let us keep in mind that we would like the model to be as simple as\n",
"possible.\n",
"As previously in this document, Equation ([eq:bacterial_modeling:growth](#eq:bacterial_modeling:growth)),\n",
"we would like to find an find an equation on the form:\n",
"\n",
"\\[E_{n} = E_{n-1} + \\Delta E.\\]\n",
"\n",
"Where the change in the number of bacteria, $\\Delta E$, is (something) times $E_{n-1}$:"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$$\n",
"E_{n} = E_{n-1} + (\\text{something})E_{n-1}\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<!-- -->\n",
"The \"something\" should be close to 1 when $E_{n-1}$ is small,\n",
"0 when $E_{n-1}=K$, and negative when $E_{n-1} > K$.\n",
"One of the simplest equations that fulfills these requirements is $1 - E_{n-1}/K$,"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$$\n",
"(\\text{something}) = 1 - E_{n-1}/K.\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<!-- -->\n",
"$E_{n-1}/K$ gives us a fraction of how many of the maximum number of individuals\n",
"that the environment can support there currently are in the environment.\n",
"$1 - E_{n-1}/K$ is then the fraction of individuals that the environment still\n",
"have room for.\n",
"[Simen 8: does this explanation make sense?]\n",
"The complete model is"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$$\n",
"{E_{n}} = E_{n-1} + (1 - E_{n-1}/K)E_{n-1}.\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<!-- -->\n",
"This new model is called a logistic model.\n",
"\n",
"\n",
"[Svenn-Arne 9: Her hadde det vært fint å skrive inn ligningene i en figur, så det er lettere å relatere til hvilke faser de ulike ligningene gjelder.]\n",
"\n",
"\n",
"\n",
"<hr/>\n",
"**Summary.**\n",
"\n",
"The logistic growth model for the growth of *E. coli*:"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$$\n",
"E_{n} = E_{n-1} + (1 - E_{n-1}/K)E_{n-1}\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"with carrying capacity"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$$\n",
"K = 8\\cdot10^9\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"and initial condition"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$$\n",
"E_{0} = 10\\; 000.\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<hr/>\n",
"\n",
"\n",
"\n",
"The form of this logistic model closely resembles the exponential growth model,\n",
"but the additional term drives the system towards equilibrium.\n",
"Note that when $E_{n-1}$ is small compared to $K$,\n",
"the equation is almost equal the exponential growth equation,\n",
"but as the population increases the new factor slows down the growth,\n",
"so that the population never increases above $K$.\n",
"In order to implement this model, we only need to change two lines in the\n",
"exponential growth program we created earlier.\n",
"We need to specify the variable `K`, and change the equation for calculating\n",
"`E[n]`.\n",
"The modified code looks like the following."
]
},
{
"cell_type": "code",
"execution_count": 43,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7fb09c381d68>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from pylab import *\n",
"\n",
"N = 24\n",
"dt = 20 # min\n",
"K = 8e9\n",
"\n",
"E = zeros(N)\n",
"t = zeros(N)\n",
"\n",
"E[0] = 10000.\n",
"\n",
"for n in range(1, N):\n",
" E[n] = E[n-1] + (1 - E[n-1]/K)*E[n-1]\n",
" t[n] = t[n-1] + dt\n",
"\n",
"plot(t, E, 'o-')\n",
"xlabel('Time(minutes)')\n",
"ylabel('Population size')\n",
"title(\"Modeled bacterial growth\")\n",
"show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<!-- -->\n",
"\n",
"\n",
"As seen from this figure, the first few steps are almost identical to the\n",
"exponential growth model;\n",
"we nearly double the bacterial population each generation.\n",
"However, once we approach the carrying capacity the growth slows\n",
"down until it stagnates.\n",
"In order to highlight the differences, let us make a program that plots both\n",
"models in the same plot.\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"## A comparison of logistic and exponential growth\n",
"\n",
"<div id=\"chp:bacterial_modeling:comparison\"></div>\n",
"\n",
"Here we make a simple program that compares the results of the exponential model\n",
"and the logistic model.\n",
"We calculate for both models inside the `for` loop and our code is:"
]
},
{
"cell_type": "code",
"execution_count": 44,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAX0AAAEWCAYAAACKSkfIAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3Xl4VNX5wPHvm7Dvq6gsCbizhChhk1WsS9WfS6u1llZc\nUetCbbXVWitUadVaN7QVVEQFRavVWrWttRXBVomgyKqgGCABJCxhiwgJ7++PcyYMw0wyEzKZ7f08\nzzwzc+fce98zc+edO+eee66oKsYYYzJDVqIDMMYYU38s6RtjTAaxpG+MMRnEkr4xxmQQS/rGGJNB\nLOkbY0wGydikLyK5IqIi0iCKspeIyHu1XE+t540nX/cjaznvaBF5q65jqgsiskNEelTzepGIfCvK\nZcVUTxG5S0Q2ish6EenmY8mOYr6oy9a3mrZfETlPRNb4+I8XkSUiMjLKZUdd1tSdlEj6/ou6W0Q6\nhEz/2Cev3MRElv7C/Tiq6gxVPTWRcUWiqi1UdSWAiEwTkbsOYllR11NEugE/A3qq6qGqutrHUhnF\nevYrKyKzROSK2sZdz+4DrvPxf6yqvVR1VjQzBpcVkfEiMj2OcRovJZK+9yVwUeCJiPQBmiUuHGP2\n0w3YpKobEh1IPcsBliQ6iFDR/IPPhBjCUtWkvwFFwK+AD4Om3QfcBiiQ66e1Bp4BSoFVfp4s/1q2\nn2cjsBK41s/bIGjeJ4F1QAlwF5DtX7sEeC9o3ccC/wI2A58B3wt6rT3wGrANKATuDJ43pF65Poax\nwFq/7puCXm8MPOhfW+sfN/avjQSKgV/6OhUBo4PmnQVcEfQ8tA4KHOkfnwl87GNeA4wPKrfal93h\nb4PDLOtE4ENgq78/MSSOO4H/AtuBt4AO/rUmwHRgE1Dm5+0U5n26FPhb0PMVwJ+Dnq8B8oPr5d/T\nPcBuH/ffgralm4CFPt4XgCYRPp9w79nVfv1lwKOAAN8Cvgb2+nVNC/psG0TxPlSVBSYClcAuv6xH\natrmIrxfy/x6VgJXBb02Erfd/AzYgNvmLo11+8Vtmzt83DuBL4Le32/5x+OBF3Hfye24H4eCkO/1\nt4DT/ee0xy/zk5q+k2HiGQ+8hNuetgFX4HZqbwG+wG1jLwLtatr2gMP9e7AZ+By4Mmg904C7Qt/P\nkDr9Ard9feM/067AX3B5aVPgM/XlL/Of1Rbgn0COny7AA/4z2gYsAnrXST6NZ7Kuq1vQxvEZcBwu\ngRfj9jKCk/4zwF+Blrgv0nLgcv/a1cCn/gNoB7zD/l/KV4DJQHPgEL/BXxX65fevr8F9sRoAx+OS\nbk//+ky/cTUHevuNtaak/7wv38dvGIEvzW+AD3w8HYH/AXcGbWwVwP24L+AI3JfvmKAkE23SH+nX\nnQXkAV8B54YmpHDL8u/lFuBH/v24yD9vHxTHF8DRQFP//G7/2lXA33D/2LKBfkCrMO9TD9wXMwv3\nhVyF/6L517aw78c9uF7TCPqCBm1LhX457XBfuKsjfD7h3rPXgTa4PftS4PQIX/793rca3odwZYM/\nu2q3uTBxnwkcgUscI4By4ISQ7eY3QEPgDP9621i339D3O/i76h+Px/14neE/398BH1RTdnrIsiN+\nJ8PEMR73o3Gu306aAuNw358uuO/IZOD5mrY9YDbwR9wPQ77/nEeF26bCfO5FwAJcnmnql/0JLoE3\n98sc6sueg/tROc5/rr8C/udfOw2Yj9vWxJc5rC7yadI174jIVBHZICKLw7z8LHAxcAruyxo4YPe5\niHwP+D5wK26Dfx5oATwkIhcC3wMeVNU1qroZtwEG1tkJt2H+RFV3qvuL/oBfXqizgCJVfUpVK1T1\nY+Bl4AJ/IO67wK/9chYDT0dR7Qm+/CLgKfY1Y40GfqOqG1S1FJiAS67BblfVb1T1XeANX8+YqOos\nVV2kqntVdSHuvRsR5exnAitU9Vn/fjyP+3H9v6AyT6nqclX9GpdQ8v30Pbg9yyNVtVJV56vqtjDx\nrcTtKeYDw3F7RGtF5Fgf5xxV3RtDlR9W1bV+O/hbUDzRuFtVy1R1NW7HIZZ5I70PNYm4zYUrrKpv\nqOoX6ryL+1cxLKjIHtx2tUdV38TtXR9zENtvdd5T1TfVHa94FugbzUwxficD3lfVV/12/DVuR+82\nVS1W1W9wPwzn+2aXsNueiHQFhgC/UNVdqroAeAKXd6L1sM8zXwMDcDsYN/t67FLVwIHxq4Hfqeoy\nVa0Afgvki0iOj68l7h+e+DLrYoghomRsc5oGPILbaw/1LO5XuLt/fbWfHti7b4jbC+yM+5COwP1i\nP4hLGmuClrUq6HGOn3ediASmZYWUDy47UETKgqY18LF19I8jrSeS0PJ9/OPAXm3wa4cHPd+iqjur\neT0qIjIQuBu3Z9cIt1f05yhnD40xEEfnoOfrgx6X436Mwb1nXYGZItIG93f7NlXdE2Y97+L2qo70\nj8twCX+wfx6L0Hhiec8i1SWe81a3zR1ARL4N3IH7V5GF25tdFFRkk08yobHUdvutTmidm4hIg5D1\nhxPLdzIg9LUc4BURCd4hqAQ6EWHbw20Lm1V1e9A8q4CCGuKNFEdXYFWE+ubgdkr/EDRNgM6q+h8R\neQTXhJgjIn/BNf0esFMUq6Tb01fV2bi2tGANcHvmf8G1853lHwc2SMUl9T24NrHlqroC9xd8Na5d\nbDPuAwjoFvR4Da79rYOqtvG3VqraK0yIa4B3g8q1Uddz4Rrc38CKatYTSWj5tf7xWtyGEe41gLYi\n0jzC6zvZ/0D3odWs/zlcG2ZXVW0NPIbb+MC9t9UJjTEQR0kN8+H3NCeoak/ccYGziLxHFUj6w/zj\nd3FJfwSRk35NsSer0Lir2+b2IyKNcf8C7sO1UbcB3mTf51md2m6/dSFcnaP9Tla3jG+HvG9NVLWk\nmm1vLdBORFoGLSd4e47mexUcxxqgW4SDumtwzVXB8TVV1f8BqOrDqtoP6In7Ab+5mrpHLemSfgTt\ncQc/+uEPfITs4YI7iPYiMFFEWvq/SD8F3sPtvT4D3CAiXUSkLe4ADwD+b9NbwB9EpJWIZInIESIS\nronjdeBoEfmRiDT0t/4icpz/C/sXYLyINBORnsCYKOp3uy/fC9du+4Kf/jzwKxHp6Lur/hq3RxJs\ngog0EpFhuA03sIe+APiOX+6RwOXVrL8lbu9ml4gMAH4Q9Fop7r2N1Pf9Tf9+/EBEGvimtJ6496la\nInKSiPTxzQrbcD/akZpp3gVOApqqajEwB3cAsD3uIHQ4X1UTdzILjTviNhdm3sA/tVKgwu/1R9Xt\n9CC237rwFZArIlk+lli+k5E8hssHOQD+e3SOfxx221PVNbhjZ78TkSYikof77gS+dwuAM0SknYgc\nCvykhhgKcQei7xaR5n6ZQ4Liu9V/7xGR1iJygX/cX0QGikhD3A/NLiJ/N2KS9ElfRFrgNuLbRWQB\nLvFF+lt8Pe4NWolL9q/h2j0vBabg2oI/AT7CbdzBLsZ9YZbiDgy+BBwWugL/t+9UXNviWtzf13t8\njADX+fjW45qqnoqimu/iDuj8G7hPVQMnBN0FzMP1BFjk4w7ud77ex7oWmIE7IPmpf+0BXI+Ir3Dt\nsjOqWf+Pgd+IyHbc+/tiUH3LcT1K/isiZSIyKHhGVd2E+7H5Ga5nws+Bs1R1YxT1PhT3Pm/DHaN5\nlwhNFqq6HNf2PMc/34b7nP+rkfvCPwn09HG/GkU8yeIhXNvzFhF5OIptroovewPuM9yC+wF/LYZ1\n12b7rQuBnZVNIvKRfxzVd7IaD+Hq/pbftj8ABvrXqtv2LsIdXF+LO5h8h6q+7V97FpdDinA/SoEd\ntLD8tvl/uGbJ1bgOKBf6117BfY4zRWQbsBj4tp+1FfC4r/cq3Hfr9zHUPSJRTb5/wP5kq9dVtbeI\ntAI+U9WIH7aITPPlXwqa1grXC+K3wdOTia/nl0DDKNo4Q+cdievt0KXuIzPGpKuk39P3e3RfBv3t\nERGptgeAiDTC/UI/k6wJ3xhjEiHpkr6IPA+8j+tCViwil+O6Ll4uIp/gTvAItMv1F5FiXBPOZBEJ\nnBn4PVzXvktEZIG/xdK1zhhj0lJSNu8YY4yJj6Tb0zfGGBM/SXVyVocOHTQ3NzfRYRhjTMqYP3/+\nRlXtGG35pEr6ubm5zJs3L9FhGGNMyhCRmM6atuYdY4zJIJb0jTEmg1jSN8aYDJJUbfrh7Nmzh+Li\nYnbt2pXoUEwSaNKkCV26dKFhw4aJDsWYlJT0Sb+4uJiWLVuSm5tL0BCrJgOpKps2baK4uJju3bsn\nOhxjUlLSN+/s2rWL9u3bW8I3iAjt27e3f30mfcyYAbm5kJXl7mdUNy5i3Uj6PX3AEr6pYtuCSRsz\nZsDYsVBe7p6vWuWeA4weHbfVJv2evjHGpKXbbtuX8APKy930OLKkH4Xs7Gzy8/OrbnfffXeiQ4ro\nwQcfpDxoQzrjjDMoKyurZg53UtzGjdEMf1+3FixYwJtvvln1fPz48dx33331HocxCbF6dWzT60j6\nJf04tJE1bdqUBQsWVN1uueWWmmdKkNCk/+abb9KmTZu4ra+iIqbLAOwnNOkbk1G6RbgSZaTpdSS9\nkn6gjWzVKlDd10YWh4MjW7du5ZhjjuGzzz4D4KKLLuLxxx8HoEWLFtx444306tWLk08+mdLSUsAl\nuUGDBpGXl8d5553Hli1bABg5ciS/+MUvGDBgAEcffTRz5swBoLKykptvvpn+/fuTl5fH5MmTAZg1\naxYjR47k/PPP59hjj2X06NGoKg8//DBr167lpJNO4qSTTgL234s/99xz6devH7169WLKlCk11vHJ\nJ5/k6KOPZsCAAVx55ZVcd911AFxyySVcffXVDBw4kJ///Ods3ryZc889l7y8PAYNGsTChQsB6NOn\nD2VlZagq7du355ln3LXuL774Yv75z3/y61//mhdeeIH8/HxeeMFdgGjp0qWMHDmSHj168PDDDx/k\np2RMEps4EZo1239as2ZuejypatLc+vXrp6GWLl2678m4caojRkS+NW6s6tL9/rfGjSPPM27cAesM\nlZWVpX379q26zZw5U1VV33rrLR00aJA+//zzetppp1WVB3T69OmqqjphwgS99tprVVW1T58+OmvW\nLFVVvf3223WcX/eIESP0pz/9qaqqvvHGG3ryySerqurkyZP1zjvvVFXVXbt2ab9+/XTlypX6zjvv\naKtWrXTNmjVaWVmpgwYN0jlz5qiqak5OjpaWllbFEvx806ZNqqpaXl6uvXr10o0bN4adR1W1pKRE\nc3JydNOmTbp7924dOnRoVT3GjBmjZ555plZUVKiq6nXXXafjx49XVdV///vf2rdvX1VVveqqq/T1\n11/XRYsWaUFBgV5xxRWqqnrkkUfqjh079KmnnqpapqrqHXfcoYMHD9Zdu3ZpaWmptmvXTnfv3n3A\n57HfNmFMKps+XVXE5amcHPc8RsA8jSHPpkTvnah9801s06MUaN4Jdcopp/DnP/+Za6+9lk8++aRq\nelZWFhdeeCEAP/zhD/nOd77D1q1bKSsrY8QId13nMWPGcMEFF1TN853vfAeAfv36UVRUBMBbb73F\nwoULeekld/GvrVu3smLFCho1asSAAQPo0sVdKTE/P5+ioiKGDh1abT0efvhhXnnlFQDWrFnDihUr\naN++fdiyhYWFjBgxgnbt2gFwwQUXsHz58qrXL7jgArKzswF47733ePnllwEYNWoUmzZtYtu2bQwb\nNozZs2eTk5PDNddcw5QpUygpKaFt27Y0b9487HrPPPNMGjduTOPGjTnkkEP46quvquppTNr5v/9z\nu6b33gs331wvq0ytpP/gg9W/npvrmnRC5eTArFl1Hs7evXtZtmwZzZo1Y8uWLRGTUzTdDBs3dte4\nzs7OrmonV1UmTZrEaaedtl/ZWbNmVZUPnSeSWbNm8fbbb/P+++/TrFkzRo4ceVD93SMl7WDDhw/n\n0UcfZfXq1UycOJFXXnmFl156iWHDhkWcJ9Z6GZPSSkrcfefO9bbK9GrTr+c2sgceeIDjjjuO5557\njksvvZQ9e/YA7scgsHf+3HPPMXToUFq3bk3btm2r2uufffbZqr3+SE477TT+9Kc/VS13+fLl7Ny5\n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\nAElFTkSuQmCC\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7fb09c4000f0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from pylab import *\n",
"\n",
"N = 30\n",
"dt = 20 # min\n",
"K = 8e9\n",
"\n",
"E_exponential = zeros(N)\n",
"E_logistic = zeros(N)\n",
"t = zeros(N)\n",
"\n",
"E_exponential[0] = 10000.\n",
"E_logistic[0] = 10000.\n",
"\n",
"for n in range(1, N):\n",
" E_exponential[n] = 2*E_exponential[n-1]\n",
" E_logistic[n] = E_logistic[n-1] + (1 - E_logistic[n-1]/K)*E_logistic[n-1]\n",
" t[n] = t[n-1] + dt\n",
"\n",
"plot(t, E_exponential, 'ro-', label=\"Exponential growth\")\n",
"plot(t, E_logistic, 'bo-', label=\"Logistic growth\")\n",
"xlabel('Time(minutes)')\n",
"ylabel('Population size')\n",
"title('Modeled populations with infinite and finite resources')\n",
"legend(loc='upper left')\n",
"show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"In this program we have create two arrays `E_exponential` and `E_logistic` for\n",
"the number of bacteria in the exponential growth model and the logistic growth\n",
"model respectively.\n",
"Inside the for loop we calculate the number of bacteria for both model and each\n",
"of the arrays are filled with values for their respective model.\n",
"At the end we plot both results together.\n",
"\n",
"\n",
"\n",
"We see that exponential growth is dominating and increases to very high values,\n",
"so high that we are unable to see what goes on with the logistic model.\n",
"It would be better to use a semilogarithmic plot.\n",
"Thus we add the `yscale(\"log\")` command after the plot command to get\n",
"logarithmic scale on the y-axis.\n",
"\n",
"\n",
"\n",
"[Svenn-Arne 10: Show code and plot with log axis]\n",
"\n",
"Both models behave similarly for small populations.\n",
"However as the population size gets close to the carrying capacity\n",
"($K=10^9$), the growth in the logistic model slows down,\n",
"and eventually stops.\n",
"\n",
"The logistic growth model avoids the unlimited growth that we see in the\n",
"exponential growth model.\n",
"The logistic growth model takes into account that there are limited resources\n",
"and give us bot the exponential growth phase as well as the stationary phase.\n",
"This is much closer to what we observe in nature and logistic growth is\n",
"therefore a much better model to use than an exponential growth model.\n",
"If you are going to choose a model to use, it would therefore almost always to\n",
"be better to use an logistic growth model.\n",
"\n",
"To use a logistic growth model we need to know carrying capacity,\n",
"but the carrying capacity can be measured from the environment we want to model.\n",
"As a final note, remember that the exponential growth model is still a good\n",
"model for when there are much more resources in the environment than what is\n",
"consumed, but only for this case.\n",
"\n",
"It is important to note that we rarely find perfect logistic growth in nature.\n",
"The environment of a species will vary over time,\n",
"and can suffer catastrophes that set back the population growth.\n",
"You are going to see an example of this in the next document.\n",
"Some populations never even approach the carrying capacity because the growth is\n",
"always set back by periodic catastrophes.\n",
"\n",
"This is especially the case for small, quickly reproducing animals like insects.\n",
"Another assumption we made was that the population grows most rapidly when there\n",
"are few individuals.\n",
"This is not the case for all populations, some have a harder time surviving when\n",
"there are few individuals.\n",
"For example, solitary animals, like the rhinoceros,\n",
"might have problems finding a mate when there are too few individuals.\n",
"\n",
"[Svenn-Arne 11: Add figure of a few rhinoceros.]\n",
"\n",
"The logistic model also smoothly approaches the carrying capacity,\n",
"for most natural populations there will be some lag.\n",
"Food might become limiting, but the birth of new individuals is not affected\n",
"until one generation has passed.\n",
"The population might then overshoot the carrying capacity before it falls down\n",
"and stabilizes at carrying capacity.\n",
"The population might also fluctuate around the carrying capacity.\n",
"The logistic model is still a good model to use,\n",
"but it is important to keep the above limitations in mind when using it.\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"# Modeling the death phase\n",
"\n",
"\n",
"We now have a good model for the exponential growth and the stationary phase.\n",
"Looking back to the complete *E. coli* cycle shown in Figure\n",
"in\n",
"[[analyzing]](#analyzing), there are another two distinct phases in the life span of an\n",
"*E. coli* batch culture.\n",
"\n",
"After the population has remained roughly constant for a while,\n",
"it begins to drop quite fast, before becoming stable at a much lower number\n",
"of bacteria.\n",
"This drop can be caused by a lack of nutrients supplied to the batch culture.\n",
"In this section we finish our model so we can simulate the entire life span of\n",
"an *E. coli* batch culture.\n",
"\n",
"## Simple model for death\n",
"\n",
"Let us start by modeling the death phase.\n",
"In this phase, the fraction of the total number of bacteria that dies is\n",
"constant.\n",
"We will call this fraction $D$.\n",
"This means that the exact number of bacteria that dies varies from generation to\n",
"generation.\n",
"The number will be largest in the beginning and steadily fall with time.\n",
"\n",
"\n",
"\n",
"<hr/>\n",
"**Model assumptions.**\n",
"\n",
"We assume:\n",
"* The bacteria do not reproduce.\n",
"\n",
"* A fixed fraction of bacteria die each generation, called $D$.\n",
"<hr/>\n",
"\n",
"\n",
"\n",
"Using these assumptions, the change in population from one\n",
"generation to the next will be"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$$\n",
"\\begin{align*}\n",
"E_n &= E_{n-1} + \\Delta E \\\\ \n",
"&= E_{n-1} - DE_{n-1}\n",
"\\end{align*}\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"One clarification should be made.\n",
"Once the population enters the death phase, the *E. coli* stop reproducing.\n",
"They either survive for at least one more time step,\n",
"or die.\n",
"This is not the case in actual bacterial culture,\n",
"where the bacteria constantly reproduce, but there are fewer births than deaths.\n",
"In this regard, it no longer makes sense to call the time steps generations.\n",
"However, since we have already found the time it took for one generation to\n",
"reproduce, it makes sense to keep the same time step for the death phase,\n",
"and we continue to refer to this time step as a generation.\n",
"\n",
"Rather than attempt to model the entire life cycle of the batch culture,\n",
"we begin by focusing on the death phase.\n",
"In this phase, it is reasonable to assume that the number of bacteria is\n",
"approximately at the carrying capacity $K$,\n",
"which we set in the previous section to $K=10^9$.\n",
"\n",
"The death rate must be determined experimentally,\n",
"but in this case we assume that 30% of the bacteria die each generation and we\n",
"set $D=0.3$.\n",
"\n",
"\n",
"\n",
"<hr/>\n",
"**Summary.**\n",
"\n",
"The simple death model for the growth of *E. coli*:"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$$\n",
"E_{n} = E_{n-1} - D E_{n-1}\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"where D is the death rate. The initial condition is"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$$\n",
"E_0 = 8\\cdot10^9.\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<hr/>\n",
"\n",
"\n",
"\n",
"We are now well versed in implementing models such as this one,\n",
"and we urge the reader to attempt to implement this model on their own as an\n",
"exercise.\n",
"For completeness we include an example below:"
]
},
{
"cell_type": "code",
"execution_count": 45,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\nTkSuQmCC\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7fb09c400f28>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from pylab import *\n",
"\n",
"N = 40\n",
"dt = 20 # min\n",
"E0 = 8e9\n",
"D = 0.25\n",
"\n",
"E = zeros(N)\n",
"t = zeros(N)\n",
"\n",
"E[0] = E0\n",
"\n",
"for n in range(1, N):\n",
" E[n] = E[n-1] - D*E[n-1]\n",
" t[n] = t[n-1] + dt\n",
"\n",
"plot(t, E, 'o-')\n",
"xlabel('Time(minutes)')\n",
"ylabel('Population size')\n",
"title('Death phase of E. coli')\n",
"yscale('log')\n",
"show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<!-- -->\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"Note the logarithmic $y$-axis.\n",
"Looking at this figure we notice there is a problem with this model.\n",
"When we compare these results to measured number of bacteria,\n",
"see Figure in [[analyzing]](#analyzing), we see that the drop in population should\n",
"eventually end, and we should reach a new stationary phase.\n",
"Just like we introduced the logistic model to better model the transition from\n",
"the growth phase to the first stationary phase,\n",
"we now introduce a model which allows us to model both the death phase and the\n",
"final stationary phase.\n",
"\n",
"## More detailed model for death\n",
"\n",
"Our new model should give an exponential decay while the population is\n",
"large compared to the final equilibrium, but once we get close to the\n",
"equilibrium, we expect the drop to shrink.\n",
"Summing up, we have the following model assumptions:\n",
"\n",
"\n",
"\n",
"<hr/>\n",
"**Model assumptions.**\n",
"\n",
"For the more advanced death phase model we assume:\n",
"* The bacteria do not reproduce.\n",
"\n",
"* The rate of bacteria that dies in each time step, is proportional to the difference between the number of bacteria and the long-term sustainable number of bacteria.\n",
"<hr/>\n",
"\n",
"\n",
"\n",
"[Simen 12: is this last point to difficult so it should be explained better?]\n",
"\n",
"First, let us define the equilibrium population to be $F$.\n",
"From Figure in [[analyzing]](#analyzing), we see that the bacterial population\n",
"stabilizes at $3\\cdot10^5$ bacteria and we therefore set $F=3\\cdot10^5$.\n",
"As previously in this document, Equation ([eq:bacterial_modeling:growth](#eq:bacterial_modeling:growth)),\n",
"we want an equation on the form:\n",
"\n",
"\\[E_{n} = E_{n-1} + \\Delta E.\\]\n",
"\n",
"We need to find an expression for $\\Delta E$ such that if $E_{n-1} = F$,\n",
"then $\\Delta E = 0$.\n",
"As with the logistic growth model, there are several ways to achieve this.\n",
"Once again we attempt to find a model that is as simple as possible:"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"$$\n",
"\\begin{align*}\n",
"E_n &= E_{n-1} + \\Delta E \\\\ \n",
"&= E_{n-1} - D(E_{n-1} - F)\n",
"\\end{align*}\n",
"$$"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<hr/>\n",
"**Advanced.**\n",
"\n",
"The above equation can also be written as\n",
"\\[E_n = E_{n-1} -D\\left(1 - \\frac{F}{E_{n-1}}\\right)E_{n-1}.\\]\n",
"Both these equations are equal and some might find this version easier to understand.\n",
"However, the first is easier to implement and is the one we will continue with.\n",
"<hr/>\n",
"\n",
"\n",
"\n",
"Let us examine this expression, to make sure it holds up to our requirements.\n",
"\n",
"* If $E_{n-1} = F$, then $\\Delta E = 0$.\n",
"\n",
"* If $E_{n-1} = K = 8\\cdot10^9$, then $\\Delta E = -0.9999DE_{n-1}$, which is very close to the expression for the simple model.\n",
"\n",
"The following code implements this new model."
]
},
{
"cell_type": "code",
"execution_count": 46,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAYwAAAEWCAYAAAB1xKBvAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3XmclXXd//HXe2ZYRhBwQW8BDRSkcEly3LLVNLQkTbtL\ny7ssb83ubNO8w/q1b3Rrlpp33ppLWWlqSKIWapgLboCggIggKjKg7JsO63x+f5xr8MzMOTOHmTnr\nvJ+Px3nMOd9zznV9ZmDmc67r87m+X0UEZmZm7akqdgBmZlYenDDMzCwnThhmZpYTJwwzM8uJE4aZ\nmeXECcPMzHLihGEVS1JIGt5F23pZ0vFdsa18kDRS0ixJGyR9tdjxQPOfmaRvS/pdsWOyznHCsIJI\n/ng0JH/Q1kp6TNL5krrk/6Ckf0n6z67YVpn6b+DBiNg1Iq5s+WTy89kkaWPabVKhgouIn0VEd/73\nqQhOGFZIYyNiV+BtwHjgW8D1xQ2pYrwNmNvOay6IiL5pt7GFCMwqhxOGFVxErIuIu4BPAZ+TdDCA\npF6SLpO0WNLrkq6RVJs8t5ukuyWtkLQmuT8kee6nwHuB3ySfnH+TtrvjJS1IjmqulqRMMUn6gaQ7\nJP0lOQp6WtI7W7zsMEnPSlqXvK53e7Elz58taVGy3ZckfSbtuS9Impe8b7Kkt2X7uUn6mKS5yffy\nL0nvSManAB9M+/4PzPXfIheSaiX9UtIryff+aNq/S8aYMmzjB5L+2JVxWeE5YVjRRMRTwBJSf+wh\nddRxIHAYMBwYDHwvea4KuJHUJ+n9gAbgN8l2vgM8wlufoC9I283JwBHAocAngTFthHQKcDuwO/Bn\nYKKkHmnPfxI4ERiWbO/s9mKT1Ae4EjgpObp6NzAree4U4NvAacDA5Hu4JVNgSRK4Bfh68tp7gUmS\nekbEcS2+/xfa+B474jLg8CT23Umd/mpsK6Yu3r+VCCcMK7alwO7JJ//zgG9ExOqI2AD8DDgDICJW\nRcRfI+LN5LmfAu/PYfvjI2JtRCwGHiSVjLKZERF3RMRW4HKgN3B02vNXRsTSiFgNTGraVg6xNQIH\nS6qNiGUR0XTq6Hzg5xExLyK2Jd/vYVmOMj4F3BMR9yfxXQbUkvojnqsrkyOBptuP23tDUmP6AvC1\niKiPiO0R8VhEbO6imKyMOGFYsQ0GVpP6hLoLMKPpDxrwj2QcSbtI+r/ktMh64GFggKTqdrb/Wtr9\n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\nMMzMLCf/H8G5ssRMAxGAAAAAAElFTkSuQmCC\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7fb09c388048>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from pylab import *\n",
"\n",
"N = 40\n",
"dt = 20 # min\n",
"D = 0.25\n",
"F = 3e5\n",
"\n",
"E = zeros(N)\n",
"t = zeros(N)\n",
"\n",
"E[0] = 8e9\n",
"\n",
"for n in range(1, N):\n",
" E[n] = E[n-1] - D*(E[n-1] - F)\n",
" t[n] = t[n-1] + dt\n",
"\n",
"plot(t, E, 'o-')\n",
"xlabel('Time(minutes)')\n",
"ylabel('Population size')\n",
"title('Death phase of E. coli')\n",
"yscale('log')\n",
"show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<!-- -->\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"We see that the graph is comparable to the last half of Figure\n",
"in\n",
"[[analyzing]](#analyzing), even though not completely equal.\n",
"\n",
"\n",
"\n",
"\n",
"# Modeling all phases of population growth\n",
"\n",
"We now know how to model all phases of bacterial growth,\n",
"except the lag phase.\n",
"Let us first model the lag phase and then create a program which simulates the\n",
"entire life span of the batch culture.\n",
"\n",
"## Modeling the lag phase\n",
"\n",
"In the lag phase the bacteria do not reproduce,\n",
"and the number of bacteria is constant.\n",
"The only variable is how many generations the lag phase lasts.\n",
"From Figure\n",
"in\n",
"[[analyzing]](#analyzing) we see that the lag phase in our case lasts for four generations.\n",
"Since there is no change between the generations in this phase,\n",
"each generation has the same number of bacteria as the previous:\n",
"\n",
"\\[E_n = E_{n-1}\\]\n",
"\n",
"To model the lag phase we can loop through the first four generations and set\n",
"the number of bacteria equal to the number of bacteria in the previous\n",
"generation."
]
},
{
"cell_type": "code",
"execution_count": 47,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[ 10000. 10000. 10000. 10000.]\n"
]
}
],
"source": [
"from pylab import *\n",
"\n",
"N_lag = 4\n",
"dt = 20 # min\n",
"\n",
"E = zeros(N_lag)\n",
"t = zeros(N_lag)\n",
"\n",
"E[0] = 10000.\n",
"\n",
"for n in range(1, N_lag):\n",
" E[n] = E[n-1]\n",
" t[n] = t[n-1] + dt\n",
"\n",
"print(E)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<!-- -->\n",
"We use this in the next section.\n",
"\n",
"## Modeling all phases\n",
"\n",
"There is no single equation for the change in the number of bacteria,\n",
"$\\Delta E$, that allows us to model the entire cycle.\n",
"Rather, we will split our model into three phases,\n",
"the first is modeled by the lag phase model,\n",
"the second by the logistic growth model, and the last by the advanced death\n",
"model.\n",
"The easiest way to implement this using the programming tools we know is to use\n",
"three separate loops, one for each phase:"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"```Python\n",
" N_lag = 4 # Generations in the lag phase\n",
" N_log = 38 # Generations in the logarithmic growth phase\n",
" N_death = 54 # Generations in the death phase\n",
" \n",
" # Total number of generations\n",
" N = N_lag + N_log + N_death\n",
" \n",
" for n in range(1, N_lag):\n",
" # perform lag phase modeling\n",
" \n",
" for n in range(N_lag, N_lag + N_log):\n",
" # perform logistic growth modeling\n",
" \n",
" for n in range(N_lag + N_log, N):\n",
" # perform death phase modeling\n",
"```"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Note that the logistic growth starts after the last lag phase generation and\n",
"therefore lasts until generation `N_lag + N_log`.\n",
"Similarly, the death phase modeling starts at generation `N_lag + N_log`.\n",
"The variables `N_lag`, `N_log`, `N_death`, `dt`,\n",
"`K`, `D` and `F` determine the behavior of the population growth and describe\n",
"the environment the bacteria grow in.\n",
"We can change these variables to simulate how the bacteria grow in another\n",
"environment.\n",
"To compare our full model to the measured bacterial growth in the previous\n",
"document, we find these numbers from Figure\n",
"in\n",
"[[analyzing]](#analyzing).\n",
"\n",
"<table border=\"1\">\n",
"<thead>\n",
"<tr><th align=\"center\"> Variable</th> <th align=\"center\"> meaning </th> <th align=\"center\"> Value </th> </tr>\n",
"</thead>\n",
"<tbody>\n",
"<tr><td align=\"left\"> <code>N_lag</code> </td> <td align=\"left\"> Generations in the lag phase </td> <td align=\"left\"> 4 </td> </tr>\n",
"<tr><td align=\"left\"> <code>N_log</code> </td> <td align=\"left\"> Generations in the logarithmic growth phase </td> <td align=\"left\"> 38 </td> </tr>\n",
"<tr><td align=\"left\"> <code>N_death</code> </td> <td align=\"left\"> Generations in the death phase </td> <td align=\"left\"> 54 </td> </tr>\n",
"<tr><td align=\"left\"> <code>dt</code> </td> <td align=\"left\"> Time of a generation, minutes </td> <td align=\"left\"> 20 </td> </tr>\n",
"<tr><td align=\"left\"> <code>K</code> </td> <td align=\"left\"> Carrying capacity </td> <td align=\"left\"> $8\\cdot10^9$ </td> </tr>\n",
"<tr><td align=\"left\"> <code>D</code> </td> <td align=\"left\"> Death rate </td> <td align=\"left\"> 0.25 </td> </tr>\n",
"<tr><td align=\"left\"> <code>F</code> </td> <td align=\"left\"> Equilibrium population </td> <td align=\"left\"> $3\\cdot10^5$ </td> </tr>\n",
"<tr><td align=\"left\"> <code>E[0]</code> </td> <td align=\"left\"> Initial condition </td> <td align=\"left\"> 10000 </td> </tr>\n",
"</tbody>\n",
"</table>\n",
"We use the values from the above table and plot the final result.\n",
"We also plot the results from this full model along the measured data from the\n",
"previous document.\n",
"The complete program is listed below."
]
},
{
"cell_type": "code",
"execution_count": 48,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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\ng85ShLcuqqzCxaxlW9tGwvA2iC+fgasknz3agQ7s5/q417mF1zhOiviONH591yrWHX1h7N9xGUOM\nNHrbSO8W4p03qmQnAsSLi5nxcxjrWFW9SZv6Vp09Hn67mUWXfsYw1+M8V3UB3R27yXQU4RDIlL08\nED+H/vveskF9pk2IiYRhWoifeaN851SC2O4ZFci4nEweuLwPF8etr/Oe9/qUVVQxa9nWCERnTPhY\nwjBHBJg3yjunUqz3jKrPuJxMuuB/Ijjv9WlTd1+mTbKEYY4IMG9UoXYkMzWZBy7v07br6eu5PmCT\nFJrYFxMJw6YGaSHDp4Gz5lq/rrhksn76AKunnN+2kwW4r098zSo5Vfhcj2dVwkS2J17NvNKbWPXK\no5Y0QkxEqqfRAKisrCQ9PZ3Ro0dHMKqG+U6OGMh7773X4O+xceNGli5d2pKhBSUmEoY1ereQ7PEU\nHd2bKgSXQoGmkZd9X3BTdLQF2eNhzEPQoSuK8D0d+VHbcaFjPVmOvTgEshx7mSGz2bik5WcKbbU2\nzXePa5me6v65aX7D+zSgXbt2bN68mbIydzXgW2+9RWZmZL7QeKcZCSdLGCbiFq7Px/XD1yyuOosT\nDz/H4MMP8Yu1J9i3ZV+enlMyvZjO07dzmMSAU4gYavS8A3X/XDyxRZLGxRdfzJIlSwB4/vnnueqq\nq6rfO3jwINdffz0DBw4kJyeHV199FYAdO3Zwzjnn0K9fP/r168cHH3wAuKdMHzp0KH379uX000/n\n/fffB9wTHXq99NJL1fNVXXfdddxyyy0MGjSIyZMnBzxfWVkZV155JaeddhqXXXZZdYKr7Y033uDU\nU0+lX79+LFiwoLp8zZo1nHXWWeTk5HD22WezdetWysvLmTZtGvPmzaNv377MmzfP73ahEBPjMEzL\neOmNtxgnJax2nV5d5u390+arowLo7PjRb3mGFDF45juxPz7j9Smw69PA7+evharDNcsqyuDV2yDv\nKf/7dOkDo2Y2eOorr7ySGTNmMHr0aDZt2sT1119f/UH/hz/8gfPPP58nnniC4uJiBg4cyAUXXECn\nTp146623SEpK4ssvv+Sqq65i3bp1PPfcc4wYMYLf//73VFVVUVpa2uD58/Pz+eCDD3A6ndx1111+\nz/f444+TkpLCli1b2LRpk9+pRw4dOsRNN93EO++8Q48ePWrMZnvqqafy/vvvExcXx9tvv81dd93F\n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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x7fb0a16cf320>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"from pylab import *\n",
"\n",
"N_lag = 4 # Generations in the lag phase\n",
"N_log = 38 # Generations in the logarithmic growth phase\n",
"N_death = 54 # Generations in the death phase\n",
"\n",
"# Total number of generations\n",
"N = N_lag + N_log + N_death\n",
"\n",
"dt = 20 # min\n",
"K = 8e9\n",
"D = 0.25\n",
"F = 3e5\n",
"\n",
"E = zeros(N)\n",
"t = zeros(N)\n",
"\n",
"E[0] = 10000\n",
"\n",
"# perform lag phase modeling\n",
"for n in range(1, N_lag):\n",
" E[n] = E[n-1]\n",
" t[n] = t[n-1] + dt\n",
"\n",
"# perform logistic growth modeling\n",
"for n in range(N_lag, N_lag + N_log):\n",
" E[n] = E[n-1] + (1 - E[n-1]/K) * E[n-1]\n",
" t[n] = t[n-1] + dt\n",
"\n",
"# perform death phase modeling\n",
"for n in range(N_lag + N_log, N):\n",
" E[n] = E[n-1] - D*(E[n-1] - F)\n",
" t[n] = t[n-1] + dt\n",
"\n",
"# Load measured data\n",
"t_measured, E_measured = loadtxt(\"ecoli_all.csv\", delimiter=\",\", unpack=True).tolist()\n",
"\n",
"# Plot measured and calculated data in the same plot\n",
"plot(t, E, 'o-', label=\"Simulated data\")\n",
"plot(t_measured, E_measured, 'o-', label=\"Measured data\")\n",
"xlabel('Time(minutes)')\n",
"ylabel('Population size')\n",
"title('Life cycle of E. coli')\n",
"legend()\n",
"yscale('log')\n",
"show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We have now modeled the entire bacterial growth cycle.\n",
"\n",
"We see that we manage to model all phases of the bacterial growth.\n",
"The result is not perfect, but quite good considering how simple our model is,\n",
"relatively speaking.\n",
"The methods you have learned in this document can be extended and adapted to\n",
"many new systems.\n",
"This is what we are going to do in the next document,\n",
"where we will use the same methods to model plant growth.\n",
"\n",
"# Summary\n",
"\n",
"In this document you have learned to model all phases of the bacterial growth\n",
"cycle you examined in the previous document\n",
"\n",
"[Simen 13: We might need to expand this summary in places and cut it down in others]\n",
"\n",
"\n",
"## Programming concepts\n",
"\n",
"### Arrays\n",
"\n",
"Arrays are similar to lists, but support mathematical operations.\n",
"They can only hold elements of the same type.\n",
"We need to import `pylab` to use arrays:"
]
},
{
"cell_type": "code",
"execution_count": 49,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"from pylab import *"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**Creating arrays.**\n",
"\n",
"From a list:"
]
},
{
"cell_type": "code",
"execution_count": 50,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"a_list = [1, 2, 3, 4]\n",
"an_array = array(a_list)\n",
"another_array = array([5, 6, 7, 8])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"An array of zeros:"
]
},
{
"cell_type": "code",
"execution_count": 51,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[ 0. 0. 0. 0. 0.]\n"
]
}
],
"source": [
"print(zeros(5))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**Accessing elements and slicing.**\n",
"\n",
"Elements are accessed using square brackets:"
]
},
{
"cell_type": "code",
"execution_count": 52,
"metadata": {
"collapsed": false
},
"outputs": [
{
"ename": "IndexError",
"evalue": "invalid index to scalar variable.",
"output_type": "error",
"traceback": [
"\u001b[1;31m\u001b[0m",
"\u001b[1;31mIndexError\u001b[0mTraceback (most recent call last)",
"\u001b[1;32m<ipython-input-52-00d4a978143a>\u001b[0m in \u001b[0;36m<module>\u001b[1;34m()\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0mprint\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0ma\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;36m0\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[1;31mIndexError\u001b[0m: invalid index to scalar variable."
]
}
],
"source": [
"print(a[0])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<!-- -->\n",
"\n",
"A *view* to part of an array can be generated by slicing:"
]
},
{
"cell_type": "code",
"execution_count": 53,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"a before change: [1 2 3 4 5 6]\n",
"b before change: [1 2 3]\n",
"a after change: [1 1 3 4 5 6]\n",
"b after change: [1 1 3]\n"
]
}
],
"source": [
"a = array([1, 2, 3, 4, 5, 6])\n",
"b = a[0:3]\n",
"print(\"a before change:\", a)\n",
"print(\"b before change:\", b)\n",
"\n",
"b[1] = 1\n",
"\n",
"print(\"a after change:\", a)\n",
"print(\"b after change:\", b)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**Mathematical operations on arrays.**\n",
"\n",
"We can add subtract, multiply, and divide arrays that are of equal length."
]
},
{
"cell_type": "code",
"execution_count": 54,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[2 4 6]\n"
]
}
],
"source": [
"a = array([1, 2, 3])\n",
"b = array([1, 2, 3])\n",
"print(a + b)"
]
},
{
"cell_type": "code",
"execution_count": 55,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[0 0 0]\n"
]
}
],
"source": [
"print(a - b)"
]
},
{
"cell_type": "code",
"execution_count": 56,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[1 4 9]\n"
]
}
],
"source": [
"print(a*b)"
]
},
{
"cell_type": "code",
"execution_count": 57,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[ 1. 1. 1.]\n"
]
}
],
"source": [
"print(a/b)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We can also add, subtract, multiply, and divide by a single number:"
]
},
{
"cell_type": "code",
"execution_count": 58,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[2 3 4]\n"
]
}
],
"source": [
"a = array([1, 2, 3])\n",
"print(a + 1)"
]
},
{
"cell_type": "code",
"execution_count": 59,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[0 1 2]\n"
]
}
],
"source": [
"print(a - 1)"
]
},
{
"cell_type": "code",
"execution_count": 60,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[2 4 6]\n"
]
}
],
"source": [
"print(a*2)"
]
},
{
"cell_type": "code",
"execution_count": 61,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[ 0.5 1. 1.5]\n"
]
}
],
"source": [
"print(a/2)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### `for`-loops\n",
"\n",
"A `for` loop repeats a set of statements a specific number of times:"
]
},
{
"cell_type": "code",
"execution_count": 62,
"metadata": {
"collapsed": false
},
"outputs": [
{
"ename": "SyntaxError",
"evalue": "invalid syntax (<ipython-input-62-c44064aca3fb>, line 1)",
"output_type": "error",
"traceback": [
"\u001b[1;36m File \u001b[1;32m\"<ipython-input-62-c44064aca3fb>\"\u001b[1;36m, line \u001b[1;32m1\u001b[0m\n\u001b[1;33m for <element> in <collection>:\u001b[0m\n\u001b[1;37m ^\u001b[0m\n\u001b[1;31mSyntaxError\u001b[0m\u001b[1;31m:\u001b[0m invalid syntax\n"
]
}
],
"source": [
"for <element> in <collection>:\n",
" <do something with each element>"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<!-- -->\n",
"This tells the computer that for each element in a collection (array,\n",
"list, etc.) it should \"do something\".\n",
"\n",
"For example:"
]
},
{
"cell_type": "code",
"execution_count": 63,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"1\n",
"2\n",
"4\n",
"3\n",
"Finished printing numbers to screen!\n"
]
}
],
"source": [
"from pylab import *\n",
"a = array([1, 2, 4, 3])\n",
"\n",
"for number in a:\n",
" print(number)\n",
"\n",
"print(\"Finished printing numbers to screen!\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We can also have loops within loops:"
]
},
{
"cell_type": "code",
"execution_count": 64,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"outer: 0 inner: 0\n",
"outer: 0 inner: 1\n",
"outer: 0 inner: 2\n",
"outer: 1 inner: 0\n",
"outer: 1 inner: 1\n",
"outer: 1 inner: 2\n",
"outer: 2 inner: 0\n",
"outer: 2 inner: 1\n",
"outer: 2 inner: 2\n"
]
}
],
"source": [
"for outer in range(3):\n",
" for inner in range(3):\n",
" print(\"outer: \", outer, \"inner: \", inner)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"The `range(start, stop, step)` function takes a *start* value,\n",
"a *stop* value and the step size and generates a sequence of numbers from\n",
"`start` up to but not including `stop` with a step size of `step`:"
]
},
{
"cell_type": "code",
"execution_count": 65,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"4\n",
"6\n",
"8\n"
]
}
],
"source": [
"for i in range(4, 10, 2):\n",
" print(i)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"<!-- -->\n",
"In this example we generate a sequence starting from 4 up to,\n",
"but not including 10, with step size 2.\n",
"\n",
"If the *step* argument is omitted, it defaults to 1.\n",
"\n",
"## Modeling bacterial growth\n",
"\n",
"In this document we have modeled all phases of the bacterial growth.\n",
"The assumptions, equations and core loop of each model is shown here.\n",
"The different symbols we have used in this document is in the table below:\n",
"\n",
"<table border=\"1\">\n",
"<thead>\n",
"<tr><th align=\"center\"> Symbol </th> <th align=\"center\"> Meaning </th> </tr>\n",
"</thead>\n",
"<tbody>\n",
"<tr><td align=\"left\"> $n$ </td> <td align=\"left\"> Current time step </td> </tr>\n",
"<tr><td align=\"left\"> $N$ </td> <td align=\"left\"> Number of time steps </td> </tr>\n",
"<tr><td align=\"left\"> $E$ </td> <td align=\"left\"> Number of bacteria </td> </tr>\n",
"<tr><td align=\"left\"> $E_n$ </td> <td align=\"left\"> Number of bacteria at a given time step $n$ </td> </tr>\n",
"<tr><td align=\"left\"> $\\Delta E$ </td> <td align=\"left\"> Change in number of bacteria, $E$, per time step </td> </tr>\n",
"<tr><td align=\"left\"> $t$ </td> <td align=\"left\"> Time </td> </tr>\n",
"<tr><td align=\"left\"> $t_n$ </td> <td align=\"left\"> Time at a given time step $n$ </td> </tr>\n",
"<tr><td align=\"left\"> $\\Delta t$ </td> <td align=\"left\"> Change in time, $t$, per time step </td> </tr>\n",
"<tr><td align=\"left\"> $E_0$ </td> <td align=\"left\"> Initial condition, number of bacteria we start with </td> </tr>\n",
"<tr><td align=\"left\"> $K$ </td> <td align=\"left\"> Carrying capacity </td> </tr>\n",
"<tr><td align=\"left\"> $D$ </td> <td align=\"left\"> Death rate </td> </tr>\n",
"<tr><td align=\"left\"> $F$ </td> <td align=\"left\"> Equilibrium population </td> </tr>\n",
"</tbody>\n",
"</table>\n",
"### Lag phase\n",
"\n",
"The lag phase is the first phase where the bacteria adapt to a new environment\n",
"before they start to reproduce.\n",
"\n",
"**Assumptions.**\n",
"\n",
"* No growth.\n",
"\n",
"**Equation describing the model.**\n",
"\n",
"\\[E_n = E_{n-1}\\]\n",
"\n",
"**Implementation of the model.**\n",
"\n",
"The core loop of this model is:"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"```Python\n",
" for n in range(1, N):\n",
" E[n] = E[n-1]\n",
"```"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Exponential growth\n",
"\n",
"In the exponential growth model the bacteria grows without bounds as this model\n",
"do not take limited resources into account.\n",
"\n",
"**Assumptions.**\n",
"\n",
"* No factors limiting growth.\n",
"\n",
"* No death.\n",
"\n",
"* Each bacteria reproduce at the same rate, i.e. they all have the same generation time.\n",
"\n",
"**Equation describing the model.**\n",
"\n",
"\\[E_n = 2E_{n-1}\\]\n",
"\n",
"**Implementation of the model.**\n",
"\n",
"The core loop of this model is:"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"```Python\n",
" for n in range(1, N):\n",
" E[n] = 2*E[n-1]\n",
"```"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Logistic growth\n",
"\n",
"This model takes into account that there are limited resources in the\n",
"environment.\n",
"It models both the exponential growth phase and the stationary phase.\n",
"\n",
"**Assumptions.**\n",
"\n",
"* If there is no limitation in resources available and the amount of waste products is low, the population doubles each generation.\n",
"\n",
"* There is a finite and constant supply of resources available each generation.\n",
"\n",
"* Each bacteria reproduce at the same rate, i.e. they have the same generation time.\n",
"\n",
"**Equation describing the model.**\n",
"\n",
"\\[E_{n} = E_{n-1} + (1 - E_{n-1}/K)E_{n-1}\\]\n",
"\n",
"**Implementation of the model.**\n",
"\n",
"The core loop of this model is:"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"```Python\n",
" for n in range(1, N):\n",
" E[n] = E[n-1] + (1 - E[n-1]/K)*E[n-1]\n",
"```"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Simple death phase\n",
"\n",
"A fraction of the bacteria die each generation.\n",
"Does not take into account that the bacterial growth reaches a new stationary\n",
"phase after a while and continues to decline.\n",
"\n",
"**Assumptions.**\n",
"\n",
"* The bacteria do not reproduce.\n",
"\n",
"* A fixed fraction of bacteria die each generation, called $D$.\n",
"\n",
"**Equation describing the model.**\n",
"\n",
"\\[E_n = E_{n-1} - DE_{n-1}\\]\n",
"\n",
"**Implementation of the model.**\n",
"\n",
"The core loop of this model is:"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"```Python\n",
" for n in range(1, N):\n",
" E[n] = E[n-1] - D*E[n-1]\n",
"```"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Advanced death phase\n",
"\n",
"This model takes into account that the decline reaches the a stationary phase\n",
"afetr a while.\n",
"\n",
"**Assumptions.**\n",
"\n",
"* The bacteria do not reproduce.\n",
"\n",
"* The rate of bacteria that dies in each time step, is proportional to the difference between the number of bacteria and the long-term sustainable number of bacteria.\n",
"\n",
"**Equation describing the model.**\n",
"\n",
"\\[E_n = E_{n-1} - D(E_{n-1} - F)\\]\n",
"\n",
"**Implementation of the model.**\n",
"\n",
"The core loop of this model is:"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"```Python\n",
" for n in range(1, N):\n",
" E[n] = E[n-1] - D*(E[n-1] - F)\n",
"```"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Complete model of the bacterial growth\n",
"\n",
"A complete model can be implemented by using three loops and the lag phase\n",
"model, the logistic growth model and the advanced death phase model."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"```Python\n",
" N_lag = 4 # Generations in the lag phase\n",
" N_log = 38 # Generations in the logarithmic growth phase\n",
" N_death = 54 # Generations in the death phase\n",
" \n",
" # Total number of generations\n",
" N = N_lag + N_log + N_death\n",
" \n",
" for n in range(1, N_lag):\n",
" # perform lag phase modeling\n",
" \n",
" for n in range(N_lag, N_lag + N_log):\n",
" # perform logistic growth modeling\n",
" \n",
" for n in range(N_lag + N_log, N):\n",
" # perform death phase modeling\n",
"```"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# Exercises\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"## Exercise 1: Population dynamics\n",
"\n",
"What is population dynamics?\n",
"\n",
"\n",
"\n",
"\n",
"# References\n",
"\n",
"\n",
" 1. <div id=\"scientific_calculator\"></div> **A. V. S. M. H. M. S.-A. D. S. Tennøe**. \n",
" *Introduction to Analysis and Modeling in Biology with Python - Using Python As a Scientific Calculator*,\n",
" first edition,\n",
" none,\n",
" 2018.\n",
"\n",
" 2. <div id=\"analyzing\"></div> **A. V. S. M. H. M. S.-A. D. S. Tennøe**. \n",
" *Introduction to Analysis and Modeling in Biology with Python - Analyzing Bacterial Growth*,\n",
" first edition,\n",
" none,\n",
" 2018.\n",
"\n",
" 3. <div id=\"dna\"></div> **A. V. S. M. H. M. S.-A. D. S. Tennøe**. \n",
" *Introduction to Analysis and Modeling in Biology with Python - DNA Sequence Analysis*,\n",
" first edition,\n",
" none,\n",
" 2018.\n",
"\n",
" 4. <div id=\"this_book\"></div> **A. V. S. M. H. M. S.-A. D. S. Tennøe**. \n",
" *Introduction to Analysis and Modeling in Biology with Python*,\n",
" first edition,\n",
" none,\n",
" 2018."
]
}
],
"metadata": {},
"nbformat": 4,
"nbformat_minor": 2
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment