Homework 5.1: Analysis of FRAP data (50 pts)¶
[1]:
import skimage.io
For this problem, you will perform image analysis of data from a fluorescence recovery after photobleaching (FRAP) experiment. The data set comes from Nate Goehring. The images are taken of a C. elegans one-cell embryo expressing a GFP fusion to the PH domain of Protein Lipase C delta 1 (PH-PLCd1). This domain binds PIP2, a lipid enriched in the plasma membrane. By using FRAP, we can investigate the dynamics of diffusion of the PH-PLCd1/PIP2 complex on the cell membrane, as well as the binding/unbinding dynamics of PH-PLCd1. The the FRAP experiment, a square patch of the membrane is exposed to intense light, thereby photobleaching the fluorescent molecules. If we quantify how the fluorescence returns to that region, we can infer the diffusion coefficient of the PH-PLCd1/PIP2 complex as well as the binding rate of the two molecules.
We will be taking a simplified approach, but there is more sophisticated analysis we can do to get better estimates for the phenomenological coefficients. To motivate why you are processing the images, I will work through a physical model connecting the diffusion coefficient and binding constants to fluorescence recovery.
If \(c\) is the concentration of the PH-PLDd1/PIP2 complex on the membrane and \(c_\mathrm{cyto}\) is the concentration of PH-PLCd1 in the cytoplasm (assumed to be spatially uniform since diffusion in the cytoplasm is very fast), the dynamics are described by a reaction-diffusion equation.
\begin{align} \frac{\partial c}{\partial t} = D\left(\frac{\partial^2 c}{\partial x^2} + \frac{\partial^2 c}{\partial y^2}\right) + k_\mathrm{on} c_\mathrm{cyto} - k_\mathrm{off} c. \end{align}
Here, \(k_\mathrm{on}\) and \(k_\mathrm{off}\) are the phenomenological rate constants for binding and unbinding to PIP2 on the membrane, and \(D\) is the diffusion coefficient for the PH-PLCd1/PIP2 complex on the membrane.
In their paper, the authors discuss techniques for analyzing the data taking into account the fluorescence recovery of the bleached region in time and space. For simplicity, we will only consider recovery of the normalized mean fluorescence. If \(I(t)\) is the mean fluorescence of the bleached region and \(I_0\) is the mean fluorescence of the bleached region immediately before photobleaching, we have, as derived in the paper,
\begin{align} I_\mathrm{norm}(t) \equiv \frac{I(t)}{I_0} &= 1 - f_b\,\frac{4 \mathrm{e}^{-k_\mathrm{off}t}}{d_x d_y}\,\psi_x(t)\,\psi_y(t),\\[1mm] \text{where } \psi_i(t) &= \frac{d_i}{2}\,\mathrm{erf}\left(\frac{d_i}{\sqrt{4Dt}}\right) -\sqrt{\frac{D t}{\pi}}\left(1 - \mathrm{e}^{-d_i^2/4Dt}\right), \end{align}
where \(d_x\) and \(d_y\) are the extent of the photobleached box in the \(x\)- and \(y\)-directions, \(f_b\) is the fraction of fluorophores that were bleached, and \(\mathrm{erf}(x)\) is the error function. Note that this function is defined such that the photobleaching event occurs at time \(t = 0\).
We measure \(I(t)\), \(d_x\), and \(d_y\). We could also measure \(f_b\) as
\begin{align} f_b \approx 1 - \frac{I(0^+)}{I_0}, \end{align}
though we will consider this a parameter to estimate in future analysis. In practice, the normalized fluorescent recovery does not go all the way to unity. This is because the FRAP area is a significant portion of the membrane, and we have depleted fluorescent molecules. We should thus adjust our equation to be
\begin{align} I_\mathrm{norm}(t) \equiv \frac{I(t)}{I_0} &= f_f\left(1 - f_b\,\frac{4 \mathrm{e}^{-k_\mathrm{off}t}}{d_x d_y}\,\psi_x(t)\,\psi_y(t)\right), \end{align}
where \(f_f\) is the fraction of fluorescent species left. So, we have four parameters to use in regression, the physical parameters of interest, \(D\) and \(k_\mathrm{off}\), and \(f_f\) and \(f_b\).
The FRAP images come in a TIFF stack, which is a single TIFF file containing multiple frames. You can load these with the skimage.io.ImageCollection
class. Note that for this TIFF stack, the image collection is a list that contains a single image, which has all 149 frames.
[2]:
# Load in TIFF stack
fname = '../data/goehring_FRAP_data/PH_138_A.tif'
ic = skimage.io.ImageCollection(fname, conserve_memory=False)[0]
# How long is it?
print('There are {0:d} frames.'.format(len(ic)))
There are 149 frames.
Your task in this problem is to extract the mean normalized fluorescence versus time from each of the TIFF stacks for the experimental repeats. Note that important information is contained in the associated README file. You can download the data set here.
The parameter estimates will be tackled in a subsequent homework. Be sure to store the results of your analysis in a CSV file so you can use it in future homework. (This is a good idea, anyway.)