(c) 2017 Justin Bois and Griffin Chure. This work is licensed under a Creative Commons Attribution License CC-BY 4.0. All code contained herein is licensed under an MIT license.
This exercise was generated from a Jupyter notebook. You can download the notebook here.
At the dawn of the molecular revolution in biology, key experiments by Jacques Monod in which he measured growth curves of bacteria under different conditions exposed some of the mechanisms of regulation of gene expression. Those growth curves were measured in a bulk solution. In this exercise, we will measure bacterial growth starting from a two bacteria. The movie shows Bacillus subtilis constitutively expressing mCherry growing under slow growth conditions. These data were kindly donated by Jin Park from the Elowitz lab here at Caltech.
a) Load in the series of images contained in the directory data/bacterial_growth/
. Be sure that however you store them (a list or tuple or other object) has the frames in the proper order.
b) Segment the images to separate bacteria from background. You do not need to segment individual bacteria; this would likely require some more advanced techniques involving edge detection that we haven't covered in bootcamp.
c) Show a representative image from the stack (with the segmentation overlayed in green) of images with a 10 µm scale bar burned in. Be sure to check out the README
file in the directory containing the images to get the interpixel distance.
d) If $m$ is the mass of bacteria, which is proportional to the area in the images, then, for exponential growth,
\begin{align} m(t) = m_0\,\mathrm{e}^{rt}, \end{align}where $r$ is the growth rate. Taking the logarithm of both sides gives
\begin{align} \ln m(t) = \ln m_0 + rt. \end{align}So, the slope of the line on a log-log scale is the growth rate.
With this in mind, plot the bacterial area as a function of time with the area on a log scale. If the plot is linear, the bacteria are performing exponential growth.
e) To get the slope of the line, you can use the np.polyfit()
function. Read the documentation for that function, and then use it to get the growth rate. Once you find the growth rate (and intercept), plot the theoretical growth curve along with the data.
So far we have seen that in a single (very clean) image, we can get somewhere around 20 - 30 well-separated cells in a single 100$\times$ magnification phase contrast image. However, if you wish to report a mean fluorescence intensity for a single strain, you would certainly want more cells to have a good degree of confidence. Using the principles you learned above, your job will be to report a mean fluorescence value for the HG105 E. coli strain using all of the images located in data/HG105_images/
. To do this, you should do the following:
- Get a list of all of the image files in
data/HG105_images/
.- Separate them by phase contrast (for segmentation) and FITC (for measurement).
- Iterate through each image file and perform segmentation and fluorescence intensity extraction for each cell. These values should be stored in a NumPy array or Pandas
DataFrame
.- Plot a histogram of all extracted fluorescence intensities and report a mean and standard deviation as well as the number of cells you successfully measured.
- Obtain 95% bootstrap confidence intervals for the mean and standard deviation of the fluorescence intensities.
As a reminder, the interpixel distance of these images is 0.0636 µm per pixel.