---
title: "Lecture 6: Pigments & Photosynthesis"
subtitle: "Theory"
format:
html:
anchor-sections: true
number-sections: true
page-layout: article
typst:
fontsize: 11pt
hyphenate: true
lang: en
mainfont: "Minion Pro"
section-numbering: 1.1.1.1
toc: true
---
::: callout-tip
## This Theory Accompanies the Following Lab
- [Lab 3: PI Curves -- Jassby and Platt](Lab3_PI_curves.qmd)
:::

## Introduction: Pigments and Photosynthesis

Good morning everyone, welcome back to BDC223. Today we’re going to follow on from our lectures on light, and we’re going to be talking about pigments and photosynthesis. Much of today’s discussion, and also the next couple of lectures about pigments as well as chromatic adaptation, is based on two papers I need you to read. The papers are both on iKamva; you can find them there. Please read them while working through these lectures—it’s quite important that you understand their content. Everything I’m going to talk about today will be explained in a lot greater detail in those two papers.
## Overview of Pigments in Photosynthetic Organisms

So, in order to exploit the light available in the environment, plants and algae—indeed, all photo-oxygenic organisms—rely on a range of pigments that extract energy from light and convert it into chemical potential energy in the process of photosynthesis.
The predominant pigment in all photo-oxygenic production on Earth, and in all plants, algae, and cyanobacteria, is a molecule called chlorophyll-*a*. The chlorophyll-*a* pigment takes light energy and converts it into chemical energy. It is the only pigment that plays such a central role in photosynthesis. There are many other pigments called accessory pigments; they do not directly drive photosynthesis but support light harvesting.
## Absorption Properties of chlorophyll-*a* and Accessory Pigments
Chlorophyll-*a* absorbs light mainly in the blue and red regions. In the previous lecture you saw that visible light falls between roughly $390$ nm to around $760$ nm. That's the range of photosynthetically active radiation. However, within that range, not all light is equally effective at driving photosynthesis. This is because chlorophyll-*a* can maximally absorb light at $440$ nm (blue light) and $675$ nm (red light).
Regardless of where these primary producers are—on land, in water, or elsewhere—they are sensitive to blue and red light. If they do not have sufficient light at precisely those wavelengths, their rate of photosynthesis will be impaired.

Here are some graphs (Slide reference) that show the absorption for chlorophyll-*a* and chlorophyll-*b*. chlorophyll-*a*, shown as the red line, has two main peaks: one around $425$ nm (blue) and one in the red region around $660$ to $675$ nm. Chlorophyll-*b* has similar peaks but they are shifted: the blue peak sits nearer to $460$ nm, closer to green, and the red peak falls slightly toward the orange region.

Chlorophyll-*b* (in fact, none of the accessory pigments) does not drive photosynthesis directly, but it can harvest light and pass that energy to chlorophyll-*a*, thus broadening the range of light absorbed and utilised for photosynthesis. You’ll notice that, in the middle of these spectra, there is a gap—a region where light is available yet not absorbed by chlorophyll-*a* or *b*. This is often referred to as the “green gap” and is the reason why plants appear green: green light is not absorbed by the major photosynthetic pigments in most leaves, so it is reflected back into the environment and to our eyes.
::: callout-note
## How do accessory pigments pass on energy to the reaction centers?
Accessory pigments transfer the energy they capture from light to chlorophyll-*a* through a mechanism known as resonance energy transfer (more precisely, Förster resonance energy transfer, or FRET, in biophysical terms). This is a non-radiative process, meaning that the energy is not emitted as light and then reabsorbed, but is instead conveyed directly through electromagnetic interactions between the excited accessory pigment and the chlorophyll-*a* molecule. When a photon excites an accessory pigment, its electrons are elevated to a higher energy state; as this energy relaxes, it is transferred to a neighbouring chlorophyll-*a* molecule if the two pigments are sufficiently close (usually within 2–6 nanometres) and their electronic energy levels are appropriately aligned. At distances below ~1–2 nanometers, excitonic coupling can take place, wherein the excited states of neighbouring pigments become quantum-mechanically delocalised across multiple molecules rather than localising on discrete donors and acceptors.
The thylakoid membrane in chloroplasts is not a disordered soup of pigments but a carefully arranged molecular architecture known as the light-harvesting complex (LHC). Within these complexes, accessory pigments (such as chlorophyll-*b* and various carotenoids) are embedded in protein scaffolds alongside chlorophyll-*a* in spatial configurations that maximise energy transfer efficiency. The proteins hold pigments at precise orientations and distances that facilitate resonance coupling between excited states. The energy “hops” from pigment to pigment down an energetic gradient, ultimately funnelling to the reaction centre chlorophyll-*a*, where the photochemical conversion (electron transfer) occurs. This funnel-like arrangement of pigments and the efficiency of resonance transfer together allow plants and algae to capture a broad spectrum of solar radiation and direct it toward the relatively narrow photochemical core without significant loss.
:::
## The Green Gap and Accessory Pigments

Plants have evolved various pigments to fill that green gap. Among the most notable of these are carotenoids, which include beta-carotene, and the phycobilins, such as phycoerythrin and phycocyanin. Carotenoids are also the pigments responsible for the orange colour in carrots, as indicated by the orange line on many absorption spectra.
The carotenoids and phycobilins absorb light in the green gap and pass that energy on to chlorophyll-*a*, enabling photosynthesis that would otherwise not occur at those wavelengths. These are called accessory pigments because they complement the absorption range of chlorophyll-*a* and make photosynthesis more effective in sub-optimal light conditions.
At first glance, the diversity of accessory pigments appears as vast as the diversity of light climates in the ocean, on land, and in freshwater. However, later experiments—especially those by Engelman, Haxo, and Blinks (to be discussed in your papers)—demonstrate that the diversity of accessory pigments does not necessarily correspond to the diversity of environmental light conditions.
## Classification and Function of Pigments

There are three main pigment classes:
1. **Chlorophylls** – The major photosynthetic pigments. chlorophyll-*a* is primary, with chlorophylls-b and -c acting as accessory pigments that transfer absorbed energy to chlorophyll-*a*.
2. **Carotenoids** – Includes beta-carotene and xantho-phylls, which also serve as accessory pigments.
3. **Phycobilins** – Reddish or purplish pigments, including phycocyanin and phycoerythrin, mainly found in certain algae and cyanobacteria.
Across all photoautotrophs, there are more than forty pigments involved. They bind differently to the proteins making up the photosynthetic machinery, expanding the plant’s ability to absorb different wavelengths, especially in the green gap, and maintain high photosynthetic efficiency in a range of environments.

Especially in algae, the types of pigments present can indicate taxonomic relationships and phylogenetic heritage. By extracting pigments from a seawater sample, for example, one can deduce the classes of algae present. Similar underpinnings occur in terrestrial plants, with certain pigments associated with specific plant types.
## What is Photosynthesis?
Photosynthesis is the conversion of light energy—radiant energy—into chemical potential energy. It drives carbon fixation: uptake of $\mathrm{CO}_2$ from the environment, splitting water, and releasing oxygen as a byproduct. The reactions occur in the photosystems I and II.
As a function of light intensity, photosynthesis responds with an increased rate—to a point. This relationship is described by the photosynthesis-irradiance (PI) curve.
## The Photosynthesis-Irradiance (PI) Curve

The PI curve (Slide reference):
- **Y-Axis**: Rate of photosynthesis, measured by carbon incorporation (e.g., mg C m$^{-2}$ s$^{-1}$, mg C m$^{-2}$ hr$^{-1}$, or mg C m$^{-2}$ day$^{-1}$).
- **X-Axis**: Irradiance (light intensity).

Initially, the PI curve is linear: as irradiance increases, photosynthesis increases at a rate defined by the slope $\alpha$ (alpha). Alpha reflects the plant's sensitivity to changes in irradiance. A steep alpha (steep slope) means more sensitivity to small changes in light; a shallow slope indicates less sensitivity and a need for greater changes in light intensity to affect photosynthesis rate.
At a certain point, the rate reaches saturation, denoted as $I_k$. This occurs where the extrapolated horizontal maximum rate ($P_{max}$) intersects with the linear part of the curve. Beyond this, increasing light does not increase photosynthetic rate since all the photosynthetic machinery is working at full capacity—much like pressing a car accelerator to the floor when the engine cannot go faster.
Should irradiance keep increasing, photosynthesis can decline—a phenomenon called photoinhibition. Here, excessive light can cause actual damage, or trigger protective mechanisms within the photosynthetic apparatus to prevent damage, analogous to running a car engine past its operating limits.
Respiration occurs at all times, consuming oxygen, while photosynthesis (in the presence of light) produces it. At low light, the rate of oxygen production by photosynthesis is less than the rate of consumption by respiration, resulting in net negative oxygen production. The light compensation point is the irradiance where net oxygen production is zero.
**Net photosynthesis**: Above the compensation point—positive net oxygen evolution.\
**Gross photosynthesis**: Total oxygen produced, regardless of respiration.
Understanding these parameters—the light compensation point, $\alpha$, $P_{max}$, $I_k$, etc.—is crucial. We’ll revisit this concept in practical sessions where you will fit models to real data.
### The Hyperbolic Tangent Model
The hyperbolic tangent model was proposed by Jassby and Platt (1976). It has become one of the most widely used models for describing the relationship between photosynthetic rate and irradiance (light intensity) in aquatic photosynthetic organisms, including algae ranging from kelp to phytoplankton. The model captures the core dynamics of photosynthesis, in which the rate of photosynthesis initially increases with light intensity but eventually saturates as the photosynthetic machinery reaches its maximum efficiency. This is a simple model, but it effective because the biologically meaningful parameters can be directly interpreted to assess plant or algal productivity in various light environments.
The hyperbolic tangent model is expressed as:
$$ P(I) = P_{\text{max}} \times \tanh\left(\frac{\alpha I}{P_{\text{max}}}\right) $$
Where:
- $P(I)$ represents the photosynthetic rate at a given irradiance $I$ (light intensity),
- $P_{\text{max}}$ is the maximum photosynthetic rate (also referred to as the light-saturated rate),
- $\alpha$ is the initial slope of the curve, which reflects the photosynthetic efficiency at low light levels,
- $I$ is the irradiance (light intensity),
One is also able to determine the saturating irradiance, $I_{\text{k}}$, which is the light intensity at which photosynthesis reaches $P_{\text{max}}$. Simply read this value off the graph where $P(I) = P_{\text{max}}$ (see the lecture slides '6.BDC223_Pigments_Photosynthesis_2024.key.pdf'.
The hyperbolic tangent function $\tanh$ is used to smoothly describe the transition between the linear increase in photosynthesis at low light intensities and the eventual plateau at higher intensities, where photosynthesis becomes light-saturated. The light compensation point, the point at which photosynthesis equals respiration (i.e., net photosynthesis is zero), can also be derived from this model.
The model describes the essential processes of photosynthesis with just two parameters: $P_{\text{max}}$ and $\alpha$. Both parameters are biologically meaningful and tell us how efficiently an organism can convert light into chemical energy under different light conditions. For example, higher values of $P_{\text{max}}$ indicate a greater potential for photosynthesis under optimal light conditions, while the value of $\alpha$ indicates how quickly photosynthesis responds to low light.
Applications of the hyperbolic tangent model are numerous. It is commonly used to estimate the photosynthetic performance of marine and freshwater algae, seagrasses, and macroalgae under varying environmental conditions. In kelp forests, for instance, we may use this model to assess how different species adapt to light intensities at various depths or how photosynthetic performance shifts in response to seasonal changes in light availability. Looking at phytoplankton, the model helps estimate productivity across different layers of the water column, where light intensity decreases with depth.
Below are a few lines of data taken from a hypothetical P-I experiment. The data are for five replicate experiments with the same light intensities (independent variable), representing conditions typically encountered by kelp at latitudes between -36° and -23°S.
```{r}
#| echo: false
#| messages: false
#| warning: false
# Load necessary libraries
library(minpack.lm) # For non-linear least squares fitting
library(ggplot2) # For plotting
library(knitr)
# Set seed for reproducibility
set.seed(666)
# Define parameters based on typical kelp conditions
Pmax_true <- 13 # True maximum photosynthetic rate (e.g., mg C m^-2 h^-1)
alpha_true <- 0.05 # True initial slope (photosynthetic efficiency)
# Light intensities typically encountered by kelp (μmol photons m^-2 s^-1)
light_intensities <- seq(0, 550, by = 50)
# Number of replicates
n_replicates <- 5
# Generate data for each replicate
data_list <- lapply(1:n_replicates, function(rep) {
# Simulate true photosynthetic rates using the hyperbolic tangent model
P_true <- Pmax_true * tanh(alpha_true * light_intensities / Pmax_true)
# Add random noise to simulate experimental variability
noise <- rnorm(length(P_true), mean = 0, sd = 0.5) # Adjust sd for noise level
P_observed <- round(P_true + noise, 2)
# Create a data frame for the replicate
data.frame(
Replicate = rep,
Light = light_intensities,
Photosynthesis = P_observed
)
})
# Combine all replicates into one data frame
data_all <- do.call(rbind, data_list)
# View 9 randomly selected rows from the data
random_rows <- data_all[sample(nrow(data_all), 9), ]
kable(
random_rows,
format = "markdown",
digits = 2,
col.names = c(
"Replicate",
"Light (μmol photons m⁻² s⁻¹)",
"Photosynthesis (mg C m⁻² h⁻¹)"
)
)
```
```{r}
#| echo: false
#| messages: false
#| warning: false
# Fit the hyperbolic tangent model to each replicate
fit_results <- lapply(1:n_replicates, function(rep) {
# Subset data for the replicate
data_rep <- subset(data_all, Replicate == rep)
# Define the model function
model_formula <- Photosynthesis ~ Pmax * tanh(alpha * Light / Pmax)
# Provide initial parameter estimates
start_params <- list(Pmax = 10, alpha = 0.03)
# Fit the model using non-linear least squares
fit <- nlsLM(
formula = model_formula,
data = data_rep,
start = start_params,
control = nls.lm.control(maxiter = 1000)
)
# Return the fit object
return(fit)
})
```
```{r}
#| echo: false
#| messages: false
#| warning: false
#| results: hide
# Summarise fit results for each replicate
for (i in 1:n_replicates) {
cat("\n--- Replicate", i, "Fit Summary ---\n")
print(summary(fit_results[[i]]))
}
```
```{r}
#| echo: false
#| messages: false
#| warning: false
#| label: fig-jassby_platt
#| fig.cap: "Nonlinear regression Jassby and Platt (1976) model fitted to simulated P-I data for a hypothetical kelp."
# Plot the data and fitted curves for all replicates
ggplot(
data_all,
aes(x = Light, y = Photosynthesis, color = factor(Replicate))
) +
geom_point() +
stat_function(
fun = function(x) {
coef(fit_results[[1]])['Pmax'] *
tanh(
coef(fit_results[[1]])['alpha'] *
x /
coef(fit_results[[1]])['Pmax']
)
},
color = "black",
size = 1,
linetype = "dashed"
) +
labs(
title = "Photosynthesis-Irradiance Curves for Kelp (All Replicates)",
x = "Light Intensity (μmol photons m⁻² s⁻¹)",
y = "Photosynthetic Rate (mg C m⁻² h⁻¹)",
color = "Replicate"
) +
theme_minimal()
```
After fitting the model to the data, we can determine the values for $P_{\text{max}}$ and $\alpha$ for each replicate and determine the average value across the five fits. The combined plot (@fig-jassby_platt) displays the observed data points for all replicates and the fitted curve from the first replicate.
The average model fit values of the estimated parameters across all replicates are as follows:
- **$P_{\text{max}}$:** `r round(mean(sapply(fit_results, function(fit) coef(fit)['Pmax'])), 2)` mg C m⁻² h⁻¹
- **$\alpha$:** `r round(mean(sapply(fit_results, function(fit) coef(fit)['alpha'])), 2)` μmol photons m⁻² s⁻¹
### Considering the Light Compensation Point
The **light compensation point** ($I_c$) is the irradiance level at which the rate of photosynthesis equals the rate of respiration, resulting in a net photosynthetic rate of zero. Below this point, the organism consumes more energy (via respiration) than it produces through photosynthesis, leading to a net loss of energy. Estimating $I_c$ is important for determining the minimum light intensity required for the survival of photosynthetic organisms, after compensation for the effect of cellular respiration.
In the context of the **Jassby and Platt hyperbolic tangent model**, $I_c$ can be estimated by solving for the irradiance $I$ when the net photosynthetic rate $P(I)$ equals zero:
$$
0 = P_{\text{max}} \times \tanh\left(\frac{\alpha I_{\text{LCP}}}{P_{\text{max}}}\right)
$$
Since $\tanh(0) = 0$, the net photosynthetic rate is zero when $I = 0$. However, due to respiration, the net photosynthesis can be negative at zero light intensity. To account for respiration, we can modify the model to include **dark respiration rate** ($R$):
$$
P(I) = P_{\text{max}} \times \tanh\left(\frac{\alpha I}{P_{\text{max}}}\right) - R
$$
Now, $I_c$ is the irradiance at which $P(I) = 0$:
$$
0 = P_{\text{max}} \times \tanh\left(\frac{\alpha I_{\text{LCP}}}{P_{\text{max}}}\right) - R
$$
We can solve this equation numerically to find $I_{\text{LCP}}$.
```{r}
#| echo: false
#| messages: false
#| warning: false
# Set seed for reproducibility
set.seed(13)
# Define parameters based on typical kelp conditions
Pmax_true <- 13 # True maximum photosynthetic rate (e.g., mg C m^-2 h^-1)
alpha_true <- 0.05 # True initial slope (photosynthetic efficiency)
R_true <- 2 # True respiration rate (mg C m^-2 h^-1)
# Light intensities including finer increments around expected LCP
light_intensities <- seq(0, 550, by = 50)
# Number of replicates
n_replicates <- 5
# Generate data for each replicate
data_list <- lapply(1:n_replicates, function(rep) {
# Simulate true net photosynthetic rates using the modified hyperbolic tangent model
P_true <- Pmax_true *
tanh(alpha_true * light_intensities / Pmax_true) -
R_true
# Add random noise to simulate experimental variability
noise <- rnorm(length(P_true), mean = 0, sd = 0.5) # Adjust sd for noise level
P_observed <- P_true + noise
# Create a data frame for the replicate
data.frame(
Replicate = rep,
Light = light_intensities,
Photosynthesis = P_observed
)
})
# Combine all replicates into one data frame
data_all <- do.call(rbind, data_list)
# View 9 randomly selected rows from the data
random_rows <- data_all[sample(nrow(data_all), 9), ]
# Display the random rows in a nicely formatted table using kable
kable(
random_rows,
format = "markdown",
digits = 2,
col.names = c(
"Replicate",
"Light (μmol photons m⁻² s⁻¹)",
"Photosynthesis (mg C m⁻² h⁻¹)"
)
)
```
```{r}
#| echo: false
#| messages: false
#| warning: false
# Fit the modified hyperbolic tangent model to each replicate and estimate LCP
fit_results2 <- lapply(1:n_replicates, function(rep) {
# Subset data for the replicate
data_rep <- subset(data_all, Replicate == rep)
# Define the modified model function including respiration
model_formula <- Photosynthesis ~ Pmax * tanh(alpha * Light / Pmax) - R
# Provide initial parameter estimates
start_params <- list(Pmax = 10, alpha = 0.03, R = 1)
# Fit the model using non-linear least squares
fit <- nlsLM(
formula = model_formula,
data = data_rep,
start = start_params,
lower = c(0, 0, 0), # Parameters should be non-negative
control = nls.lm.control(maxiter = 1000)
)
# Estimate the Light Compensation Point (LCP)
# Solve for I when Photosynthesis = 0
coef_fit <- coef(fit)
Pmax_fit <- coef_fit['Pmax']
alpha_fit <- coef_fit['alpha']
R_fit <- coef_fit['R']
# Define the function to find the root (Photosynthesis = 0)
lcp_function <- function(I) Pmax_fit * tanh(alpha_fit * I / Pmax_fit) - R_fit
# Use uniroot to find the LCP
LCP <- uniroot(lcp_function, interval = c(0, 200))$root
# Add LCP to the fit object
fit$LCP <- LCP
# Return the fit object
return(fit)
})
```
```{r}
#| echo: false
#| messages: false
#| warning: false
#| results: hide
# Summarise fit results for each replicate
for (i in 1:n_replicates) {
cat("\n--- Replicate", i, "Fit Summary ---\n")
fit <- fit_results2[[i]]
print(summary(fit))
cat(sprintf(
"Estimated Light Compensation Point (LCP): %.2f μmol photons m⁻² s⁻¹\n",
fit$LCP
))
}
```
```{r}
#| echo: false
#| messages: false
#| warning: false
#| label: fig-jassby_platt2
#| fig.cap: "Nonlinear regression Jassby and Platt (1976) model fitted to simulated P-I data for a hypothetical kelp. This model includes the effect of the light compensation point."
# Plot the data, fitted curves, and LCP for all replicates
ggplot(
data_all,
aes(x = Light, y = Photosynthesis, color = factor(Replicate))
) +
geom_point() +
stat_function(
fun = function(x) {
Pmax <- coef(fit_results2[[1]])['Pmax']
alpha <- coef(fit_results2[[1]])['alpha']
R <- coef(fit_results2[[1]])['R']
Pmax * tanh(alpha * x / Pmax) - R
},
color = "black",
size = 1,
linetype = "dashed"
) +
geom_vline(
xintercept = fit_results2[[1]]$LCP,
color = "red",
linetype = "dotdash",
show.legend = TRUE
) +
geom_hline(yintercept = 0, color = "red", linetype = "dotted") +
labs(
title = "Photosynthesis-Irradiance Curves with Light Compensation Point",
x = "Light Intensity (μmol photons m⁻² s⁻¹)",
y = "Net Photosynthetic Rate (mg C m⁻² h⁻¹)",
color = "Replicate"
) +
annotate(
"text",
x = fit_results2[[1]]$LCP,
y = min(data_all$Photosynthesis) + 5,
label = paste0(
"LCP = ",
round(mean(sapply(fit_results2, function(fit) fit$LCP)), 2)
),
angle = 90,
vjust = -0.5,
color = "red"
) +
theme_minimal()
```
The model fit to the data is in @fig-jassby_platt2. The average model fit values of the estimated parameters across all replicates are as follows:
- **$P_{\text{max}}$:** `r round(mean(sapply(fit_results2, function(fit) coef(fit)['Pmax'])), 2)` mg C m⁻² h⁻¹
- **$\alpha$:** `r round(mean(sapply(fit_results2, function(fit) coef(fit)['alpha'])), 2)` μmol photons m⁻² s⁻¹
- **$I_c$:** `r round(mean(sapply(fit_results2, function(fit) fit$LCP)), 2)` μmol photons m⁻² s⁻¹
### Platt et al. (1980) Model with Photoinhibition
Let's now look at the **Platt et al. (1980)** model, which incorporates photoinhibition into the photosynthesis-irradiance (P-I) relationship. This model extends the understanding of photosynthesis by accounting for the decrease in photosynthetic efficiency at high light intensities due to photoinhibition—a phenomenon where excessive light damages the photosynthetic apparatus, leading to reduced photosynthetic rates.
The model is expressed mathematically as:
$$
P(I) = P_{\text{max}} \left(1 - \exp\left(-\frac{\alpha I}{P_{\text{max}}}\right)\right) \exp\left(-\frac{\beta I}{P_{\text{max}}}\right)
$$
Where:
- $P_{\text{max}}$ is the maximum photosynthetic rate in the absence of photoinhibition.
- $\beta$ is the photoinhibition parameter (rate of decrease in photosynthesis at high light).
- $\exp$ denotes the exponential function.
This model combines the positive effect of light on photosynthesis at low irradiance with the negative effect of photoinhibition at high irradiance, providing a comprehensive description of the photosynthetic response across a wide range of light intensities.
```{r}
#| echo: false
#| messages: false
#| warning: false
set.seed(7)
# Define parameters based on typical kelp conditions
Pmax_true <- 13 # True maximum photosynthetic rate (e.g., mg C m^-2 h^-1)
alpha_true <- 0.05 # True initial slope (photosynthetic efficiency)
beta_true <- 0.0005 # True photoinhibition parameter
R_true <- 2 # True respiration rate (mg C m^-2 h^-1)
# Light intensities ranging to capture photoinhibition effects (μmol photons m^-2 s^-1)
light_intensities <- seq(0, 1600, by = 100)
# Number of replicates
n_replicates <- 5
# Generate data for each replicate
data_list <- lapply(1:n_replicates, function(rep) {
# Simulate true net photosynthetic rates using the Platt et al. model
P_true <- Pmax_true *
(1 - exp(-alpha_true * light_intensities / Pmax_true)) *
exp(-beta_true * light_intensities / Pmax_true) -
R_true
# Add random noise to simulate experimental variability
noise <- rnorm(length(P_true), mean = 0, sd = 0.5) # Adjust sd for noise level
P_observed <- P_true + noise
# Create a data frame for the replicate
data.frame(
Replicate = rep,
Light = light_intensities,
Photosynthesis = P_observed
)
})
# Combine all replicates into one data frame
data_all <- do.call(rbind, data_list)
# View 9 randomly selected rows from the data
random_rows <- data_all[sample(nrow(data_all), 9), ]
# Display the random rows in a nicely formatted table using kable
kable(
random_rows,
format = "markdown",
digits = 2,
col.names = c(
"Replicate",
"Light (μmol photons m⁻² s⁻¹)",
"Photosynthesis (mg C m⁻² h⁻¹)"
)
)
```
```{r}
#| echo: false
#| messages: false
#| warning: false
# Fit the Platt et al. model to each replicate
fit_results <- lapply(1:n_replicates, function(rep) {
# Subset data for the replicate
data_rep <- subset(data_all, Replicate == rep)
# Define the model function including respiration
model_formula <- Photosynthesis ~
Pmax * (1 - exp(-alpha * Light / Pmax)) * exp(-beta * Light / Pmax) - R
# Provide initial parameter estimates
start_params <- list(Pmax = 10, alpha = 0.03, beta = 0.0001, R = 1)
# Fit the model using non-linear least squares
fit <- nlsLM(
formula = model_formula,
data = data_rep,
start = start_params,
lower = c(0, 0, 0, 0), # Parameters should be non-negative
control = nls.lm.control(maxiter = 1000)
)
# Return the fit object
return(fit)
})
```
```{r}
#| echo: false
#| messages: false
#| warning: false
#| results: hide
# Summarise fit results for each replicate
for (i in 1:n_replicates) {
cat("\n--- Replicate", i, "Fit Summary ---\n")
fit <- fit_results[[i]]
print(summary(fit))
}
```
```{r}
#| echo: false
#| messages: false
#| warning: false
#| label: fig-jassby
#| fig.cap: "Nonlinear regression Platt et al. (1980) model fitted to simulated P-I data for a hypothetical kelp. This model includes the effect of photoinhibition."
# Plot the data and fitted curves for all replicates
ggplot(
data_all,
aes(x = Light, y = Photosynthesis, color = factor(Replicate))
) +
geom_point() +
stat_function(
fun = function(x) {
Pmax <- coef(fit_results[[1]])['Pmax']
alpha <- coef(fit_results[[1]])['alpha']
beta <- coef(fit_results[[1]])['beta']
R <- coef(fit_results[[1]])['R']
Pmax * (1 - exp(-alpha * x / Pmax)) * exp(-beta * x / Pmax) - R
},
color = "black",
size = 1,
linetype = "dashed"
) +
geom_hline(yintercept = 0, color = "red", linetype = "dotted") +
labs(
title = "Photosynthesis-Irradiance Curves with Photoinhibition",
x = "Light Intensity (μmol photons m⁻² s⁻¹)",
y = "Net Photosynthetic Rate (mg C m⁻² h⁻¹)",
color = "Replicate"
) +
theme_minimal()
```
## Effects of Environmental Stress

$P_{max}$ represents the maximum photosynthetic capacity, which is influenced by many stresses, including thermal stress, nutrient stress, and light stress. Any of these can reduce a plant’s capacity to sustain $P_{max}$, and a reduction in this parameter is often the first sign of environmental stress. Measuring these rates gives insights into how and when plants become stressed.

Here are some indicative values (Slide reference):
- Intertidal environments: light saturation might occur at $400$–$600\;\mu\mathrm{mol}\,\mathrm{m}^{-2}\,\mathrm{s}^{-1}$
- Sublittoral species (deeper): saturated at $150$–$250\;\mu\mathrm{mol}\,\mathrm{m}^{-2}\,\mathrm{s}^{-1}$
- As depth increases, saturation occurs at progressively lower irradiances.
- Some deep-water plants can become photoinhibited at what would seem to us like relatively dim light.
These values—$I_C$, $I_K$, $P_{max}$, $\alpha$—vary among species, being determined both by environmental adaptation and genetic heritage, and thus serve as good indicators of a plant’s typical habitat and stress response.
What we saw above is a standard textbook interpretation and formulation of a PI-curve. However, there are several mathematical models that can be used to describe the PI-curve. We will look at two of the most commonly used models: the hyperbolic tangent model by Jassby and Platt (1976) and the Platt et al. (1980) model, which includes photoinhibition.
## Absorption Spectrum vs Action Spectrum

Before moving on, it’s critical to distinguish the absorption spectrum from the action spectrum.
- **Absorption spectrum**: Measures the amount of light absorbed by all pigments at every wavelength—essentially, how much light is not reflected or transmitted.
- **Action spectrum**: For each wavelength, measures the biological effect—oxygen evolution rate—that results from absorption.

Typically, the action and absorption spectra match well, but not perfectly. For instance, between about $450$ and $500$ nm, there is a mismatch. This occurs because, beyond the optimal absorption peak of chlorophyll-*a*, carotenoids start absorbing light. While they can capture light within this region, they are less efficient at passing the energy to chlorophyll-*a*, resulting in a lower action than absorption value.
This demonstrates that the ability of accessory pigments to pass energy to chlorophyll-*a* is not perfectly efficient; some energy is lost in the process. Nonetheless, the presence of carotenoids extends the range in which photosynthesis can be driven by chlorophyll-*a*.
In summary, accessory pigments are essential in harvesting a broader range of light and making photosynthesis effective under varied light environments, even if energy transfer from accessory to primary pigments is not perfectly efficient.