Cyanobacterial crowding-out effects on metabolite partitioning: modeling 2-methylisoborneol (MIB) release dynamics and implications
Supplementary Information
# These authors contributed equally to this work.
a Key Laboratory of Environmental Aquatic Chemistry, State Key Laboratory of Regional Environment and Sustainability, Research Center for Eco-Environmental Sciences, Chinese Academy of Sciences., Beijing 100085, China.
b Bureau of Hydrology Information Center of Taihu Basin Authority, Shanghai 200434, China.
c College of Environmental Science and Engineering, Ocean University of China, Qingdao 266100, China.
d University of Chinese Academy of Sciences., Beijing 100049, China.
* Corresponding to: Ming Su (mingsu@rcees.ac.cn)
12 figures and 3 tables provided below for the evidence of main text.
Fig. S1
Fig. S2
Fig. S3
Fig. S4
Fig. S5
Fig. S6
Fig. S7
Fig. S8
Fig. S9
Fig. S10
Fig. S11
Fig. S12
Table S1
Genus | Strain | Ref. |
---|---|---|
Planktothricoides | Planktothricoides raciborskii | (Chang et al. 2012) |
Planktothricoides | Planktothricoides raciborskii | (Duong et al. 2021) |
Planktothricoides | Planktothricoides raciborskii | (Lu et al. 2022) |
Planktothricoides | Planktothricoides raciborskii | (Tan et al. 2022) |
Planktothricoides | Planktothricoides raciborskii 1372 | (Jianguo et al. 2022) |
Planktothricoides | Planktothricoides sp. | (Mohanty et al. 2022) |
Planktothricoides | Planktothricoides sp. SR001 | (Te et al. 2017) |
Pseudanabaena | Pseudanabaena cinerea FACHB1277 | (Cao et al. 2023) |
Pseudanabaena | Pseudanabaena cinerea FACHB1278 | (Su et al. 2022) |
Pseudanabaena | Pseudanabaena cinerea FACHB1279 | (Su et al. 2023) |
Pseudanabaena | Pseudanabaena cinerea FACHB1280 | (Zhang et al. 2016) |
Pseudanabaena | Pseudanabaena galeata | (Muhetaer et al. 2020) |
Pseudanabaena | Pseudanabaena sp. | (Xiao-Qin Wang and Qiu 2015) |
Pseudanabaena | Pseudanabaena sp. | (Mishra et al. 2012) |
Pseudanabaena | Pseudanabaena sp. dqh15 | (Wang and Li 2015) |
Pseudanabaena | Pseudanabaena sp. TH-1 | (Hu et al. 2023) |
Pseudanabaena | Pseudanabaena sp. Xili | (Gao et al. 2018) |
Table S2
Comparison | \(t_\text{MIB}\) | \(e_\text{MIB}\) | \(i_\text{MIB}\) | \(f\) |
---|---|---|---|---|
Autumn vs Spring | 1.0000 | 0.0879 | 1.0000 | 1.0000 |
Autumn vs Summer | 0.0003*** | <0.0001*** | 0.0104* | 1.0000 |
Spring vs Summer | 0.0081** | 0.0398* | 0.0599 | 1.0000 |
Autumn vs Winter | 0.0022** | 0.7217 | <0.0001*** | 0.0000*** |
Spring vs Winter | <0.0001*** | 0.0024** | <0.0001*** | 0.0000*** |
Summer vs Winter | <0.0001*** | <0.0001*** | <0.0001*** | 0.0000*** |
Table S3
Season | Mean | SD | First quartile | Median | Third quartile |
---|---|---|---|---|---|
Spring | 43.0 | 77.5 | 3.16 | 8.23 | 33.5 |
Summer | 107 | 230 | 6.78 | 25.9 | 80.8 |
Autumn | 23.7 | 47.7 | 2.80 | 6.54 | 17.57 |
Winter | 9.93 | 16.6 | 1.10 | 2.42 | 5.34 |
Code
require(tidyverse)
require(lubridate)
require(patchwork)
require(drwateR)
require(grid)
require(ggsci)
require(sf)
logistic_model <- function(
culturedf,
main = NULL,
xlab = "Culture time (d)",
ylab = "Cell density (cell L<sup>-1</sup>)",
Kcoef = 0.99,
N00 = 5e5,
check = FALSE,
plot = FALSE,
returnfitdf = TRUE,
fitdf_x = seq(
min(culturedf$julian),
1.2 * max(culturedf$julian),
length.out = 100
)
) {
K <- max(culturedf$n) / Kcoef
culturedf <- culturedf |>
dplyr::mutate(z = log(K / n - 1))
out <- list()
out[["culturedf"]] <- culturedf
out[["K"]] <- K
m <- lm(z ~ julian, data = culturedf)
r <- -unname(coef(m)[2])
tstar <- unname(coef(m)[1] / r) #tstar = log(a)/r
# N0 <- K - K / (1 + exp(-r * tstar))
N0 <- K / (1 + exp(r * tstar))
t00 <- tstar - log(K / N00 - 1) / r
r2 <- summary(m)$r.squared
pval <- summary(m)$coefficients[8]
out[["m"]] <- m
out[["r"]] <- r
out[["tstar"]] <- tstar
out[["N0"]] <- N0
out[["r2"]] <- r2
out[["pval"]] <- pval
out[["t00"]] <- t00
out[["N00"]] <- N00
if (isTRUE(check)) {
p1 <- culturedf |>
ggplot(aes(julian, z)) +
geom_point() +
geom_smooth(method = "lm") +
labs(x = xlab, y = "log(K / N - 1)", fill = NULL, title = main) +
dwfun::theme_sci()
out[["p1"]] <- p1
}
if (isTRUE(returnfitdf)) {
fitdf <- tibble::tibble(julian = fitdf_x) |>
dplyr::mutate(n = K / (1 + exp(-r * (julian - tstar))))
out[["fitdf"]] <- fitdf
}
if (isTRUE(plot)) {
p2 <- fitdf |>
ggplot(aes(julian, n)) +
geom_point(data = culturedf, aes(y = n)) +
geom_line() +
labs(x = xlab, y = ylab, fill = NULL, title = main) +
dwfun::theme_sci()
out[["p2"]] <- p2
}
return(out)
}
culturemdf <- readRDS("culturedf.rds") |>
tidyr::nest(idf = -c(strain, ppf)) |>
tidyr::expand_grid(Kcoef = c(0.90, 0.95, 0.99, 1.05, 1.1)) |>
dplyr::mutate(
model = purrr::pmap(
list(idf, ppf, Kcoef),
\(x, I, Kcoef) {
logistic_model(
culturedf = x |>
dplyr::filter(valid == "GOOD") |>
dplyr::filter(!is.na(n)),
Kcoef = Kcoef,
main = I,
check = TRUE,
plot = TRUE,
returnfitdf = TRUE,
fitdf_x = 0:40
)
}
)
) |>
dplyr::mutate(culturedf = purrr::map(model, \(x) x[["culturedf"]])) |>
dplyr::mutate(m = purrr::map(model, \(x) x[["m"]])) |>
dplyr::mutate(K = purrr::map_dbl(model, \(x) x[["K"]])) |>
dplyr::mutate(r = purrr::map_dbl(model, \(x) x[["r"]])) |>
dplyr::mutate(N0 = purrr::map_dbl(model, \(x) x[["N0"]])) |>
dplyr::mutate(r2 = purrr::map_dbl(model, \(x) x[["r2"]])) |>
dplyr::mutate(pval = purrr::map_dbl(model, \(x) x[["pval"]])) |>
dplyr::mutate(tstar = purrr::map_dbl(model, \(x) x[["tstar"]])) |>
dplyr::mutate(p1 = purrr::map(model, \(x) x[["p1"]])) |>
dplyr::mutate(p2 = purrr::map(model, \(x) x[["p2"]])) |>
dplyr::mutate(fitdf = purrr::map(model, \(x) x[["fitdf"]])) |>
dplyr::group_by(strain, ppf) |>
dplyr::slice_max(r2, n = 1) |>
dplyr::arrange(strain, ppf)
Kprop <- 0.8
mdf <- culturemdf |>
unnest(culturedf) |>
dplyr::mutate(a = (K - N0) / N0) |>
dplyr::mutate(
x1 = exp(r * julian) *
a *
log(2) /
(exp(2 * r * julian) + exp(r * julian) * 2 * a + a^2)
) |>
dplyr::mutate(x2 = (K - n) / K) |>
dplyr::mutate(
stage = factor(
n < K * Kprop,
levels = c("TRUE", "FALSE"),
labels = c("<80%K", "≥80%K")
)
) |>
tidyr::nest(
idf = -c(
strain,
ppf,
stage,
Kcoef,
model,
m,
r,
tstar,
N0,
r2,
pval,
p1,
p2,
fitdf
)
) |>
tidyr::pivot_wider(names_from = stage, values_from = idf) |>
dplyr::mutate(
mb = purrr::map(`<80%K`, \(x) {
x |>
dplyr::mutate(y = d2t - 1) |>
lm(formula = y ~ x1 + 0, data = _)
})
) |>
dplyr::mutate(
mc = purrr::map(`≥80%K`, \(x) {
x |>
lm(formula = d2t ~ x2, data = _)
})
) |>
dplyr::mutate(b = -purrr::map_dbl(mb, \(x) coef(x)[1])) |>
dplyr::mutate(c = purrr::map_dbl(mc, \(x) coef(x)[2])) |>
dplyr::mutate(d = purrr::map_dbl(mc, \(x) coef(x)[1] - 0.5)) |>
dplyr::relocate(strain, ppf, Kcoef, r, N0, r2, pval, tstar, b, c, d, p1, p2)
Kprop <- 0.8
mdf <- culturemdf |>
tidyr::unnest(culturedf) |>
dplyr::mutate(a = (K - N0) / N0) |>
dplyr::mutate(
x1 = exp(r * julian) *
a *
log(2) /
(exp(2 * r * julian) +
exp(r * julian) * 2 * a +
a^2)
) |>
dplyr::mutate(x2 = (K - n) / K) |>
dplyr::mutate(
stage = factor(
n < K * Kprop,
levels = c("TRUE", "FALSE"),
labels = c("<80%K", "≥80%K")
)
) |>
tidyr::nest(
idf = -c(
strain,
ppf,
stage,
Kcoef,
model,
K,
m,
r,
tstar,
N0,
deltaT,
r2,
pval,
p1,
p2,
fitdf
)
) |>
tidyr::pivot_wider(names_from = stage, values_from = idf) |>
dplyr::mutate(
mb = purrr::map(`<80%K`, \(x) {
x |>
dplyr::mutate(y = d2t - 1) |>
lm(formula = y ~ x1 + 0, data = _)
})
) |>
dplyr::mutate(
mc = purrr::map(`≥80%K`, \(x) {
x |>
lm(formula = d2t ~ x2, data = _)
})
) |>
dplyr::mutate(b = -purrr::map_dbl(mb, \(x) coef(x)[1])) |>
dplyr::mutate(c = purrr::map_dbl(mc, \(x) coef(x)[2])) |>
dplyr::mutate(d = purrr::map_dbl(mc, \(x) coef(x)[1] - 0.5)) |>
dplyr::relocate(
strain,
ppf,
Kcoef,
K,
r,
N0,
deltaT,
r2,
pval,
tstar,
b,
c,
d,
p1,
p2
) |>
dplyr::left_join(
culturemdf_adj |>
dplyr::select(strain, ppf, culturedf, fitdf)
) |>
dplyr::mutate(theta = (K - N0) / N0) |>
dplyr::mutate(
fpreddf = purrr::pmap(
list(fitdf, K, r, N0, deltaT, theta, b, c, d),
\(df, K, r, N0, deltaT, theta, alpha1, alpha2, beta) {
df |>
dplyr::filter(n < 0.8 * K) |>
dplyr::mutate(
f = 1 -
alpha1 *
log(2) *
theta *
exp(r * julian) /
(exp(2 * r * julian) + 2 * theta * exp(r * julian) + theta^2)
) |>
bind_rows(
df |>
dplyr::filter(n >= 0.8 * K) |>
dplyr::mutate(f = 0.5 + (K - n) / K * alpha2 + beta)
)
}
)
)
culturemdf |>
unnest(culturedf) |>
ggplot(aes(julian, d2t)) +
geom_point() +
facet_wrap(~ paste(strain, ppf), ncol = 3, scale = "free") +
theme_sci(9, 6)
mdf |>
unnest(`<80%K`) |>
dplyr::filter(julian > 0) |>
ggplot(aes(x1 * log(2) / r, d2t)) +
geom_point() +
scale_x_log10(
breaks = scales::trans_breaks("log10", function(x) 10^x),
labels = scales::trans_format("log10", scales::math_format(10^.x))
) +
facet_wrap(~ paste0(strain, ppf), ncol = 3, scale = "free") +
theme_sci(9, 5)
mdf |>
tidyr::unnest(fpreddf) |>
ggplot(aes(julian, f)) +
geom_point() +
geom_line(color = "red") +
facet_wrap(~ paste(strain, ppf), ncol = 3, scale = "fixed") +
theme_sci(9, 5)
References
Cao, Tengxin, Jiao Fang, Zeyu Jia, Yiping Zhu, Ming Su, Qi Zhang, Yichao Song, Jianwei Yu, and Min Yang. 2023. “Early Warning of MIB Episode Based on Gene Abundance and Expression in Drinking Water Reservoirs.” Water Research 231: 119667. https://doi.org/https://doi.org/10.1016/j.watres.2023.119667.
Chang, De-Wei, Peter Hobson, Michael Burch, and Tsair-Fuh Lin. 2012. “Measurement of Cyanobacteria Using in-Vivo Fluoroscopy - Effect of Cyanobacterial Species, Pigments, and Colonies.” Water Research 46 (16): 5037–48. https://doi.org/10.1016/j.watres.2012.06.050.
Duong, Thi Thuy, Thi Thu Lien Nguyen, Thi Hai Van Dinh, Thi Quynh Hoang, Thi Nguyet Vu, Thi Oanh Doan, Thi Mai Anh Dang, et al. 2021. “Auxin Production of the Filamentous Cyanobacterial Planktothricoides Strain Isolated from a Polluted River in Vietnam.” Chemosphere 284: 131242. https://doi.org/10.1016/j.chemosphere.2021.131242.
Gao, Jingsi, Jia Zhu, Maowei Wang, and Wenyi Dong. 2018. “Dominance and Growth Factors of Pseudanabaena sp. In Drinking Water Source Reservoirs, Southern China.” Sustainability 10 (11): 3936. https://doi.org/10.3390/su10113936.
Hu, Lili, Haiyan Wang, Jingzhen Cui, Wansheng Zou, Jie Li, and Kun Shan. 2023. “Temperature-Dependent Growth Characteristics and Competition of Pseudanabaena and Microcystis.” Water 15 (13): 2404. https://doi.org/10.3390/w15132404.
Jianguo, Cheng, Ma Litong, Zhao Wenyuan, and Liu Yunying. 2022. “Effects of Environmental Factors on the Growth and 2-MIB Production of Planktothrix Sp.” Journal of Hydroecology 43 (1): 70–76. https://doi.org/10.15928/j.1674-3075.202008180236.
Lu, Jinping, Ming Su, Yuliang Su, Bin Wu, Tengxin Cao, Jiao Fang, Jianwei Yu, Honggang Zhang, and Min Yang. 2022. “Driving Forces for the Growth of MIB-Producing Planktothricoides Raciborskii in a Low-Latitude Reservoir.” Water Research, 118670. https://doi.org/10.1016/j.watres.2022.118670.
Mishra, Sanjiv K., Anupama Shrivastav, Rahulkumar R. Maurya, Shailesh K. Patidar, Soumya Haldar, and Sandhya Mishra. 2012. “Effect of Light Quality on the c-Phycoerythrin Production in Marine Cyanobacteria Pseudanabaena Sp. Isolated from Gujarat Coast, India.” Protein Expression and Purification 81 (1): 5–10. https://doi.org/10.1016/j.pep.2011.08.011.
Mohanty, Bijayalaxmi, Seyed Mohammad Majedi, Shruti Pavagadhi, Shu Harn Te, Chek Yin Boo, Karina Yew-Hoong Gin, and Sanjay Swarup. 2022. “Effects of Light and Temperature on the Metabolic Profiling of Two Habitat-Dependent Bloom-Forming Cyanobacteria.” Metabolites 12 (5): 406. https://doi.org/10.3390/metabo12050406.
Muhetaer, Guligena, Takashi Asaeda, Senavirathna M. D. H. Jayasanka, Mahendra B. Baniya, Helayaye D. L. Abeynayaka, M. Harun Rashid, and HongYu Yan. 2020. “Effects of Light Intensity and Exposure Period on the Growth and Stress Responses of Two Cyanobacteria Species: Pseudanabaena Galeata and Microcystis Aeruginosa.” Water 12 (2). https://doi.org/10.3390/w12020407.
Su, Ming, Jiao Fang, Zeyu Jia, Yuliang Su, Yiping Zhu, Bin Wu, John C. Little, Jianwei Yu, and Min Yang. 2023. “Biosynthesis of 2-Methylisoborneol Is Regulated by Chromatic Acclimation of Pseudanabaena.” Environmental Research 221: 115260. https://doi.org/10.1016/j.envres.2023.115260.
Su, Ming, Yiping Zhu, Tom Andersen, Xianyun Wang, Zhiyong Yu, Jinping Lu, Yichao Song, et al. 2022. “Light-Dominated Selection Shaping Filamentous Cyanobacterial Assemblages Drives Odor Problem in a Drinking Water Reservoir.” Npj Clean Water 5 (1): 37. https://doi.org/10.1038/s41545-022-00181-2.
Tan, Hui Teng, Fatimah Md. Yusoff, Yam Sim Khaw, Muhammad Farhan Nazarudin, Nur Amirah Izyan Noor Mazli, Siti Aqlima Ahmad, Noor Azmi Shaharuddin, and Tatsuki Toda. 2022. “Characterisation and Selection of Freshwater Cyanobacteria for Phycobiliprotein Contents.” Aquaculture International. https://doi.org/10.1007/s10499-022-00985-6.
Te, Shu Harn, Boon Fei Tan, Chek Yin Boo, Janelle Renee Thompson, and Karina Yew-hoong Gin. 2017. “Genomics Insights into Production of 2-Methylisoborneol and a Putative Cyanobactin by Planktothricoides Sp. sr001.” Standards in Genomic Sciences 12 (1): 35. https://standardsingenomics.biomedcentral.com/articles/10.1186/s40793-017-0247-1.
Wang, Zhongjie, and Renhui Li. 2015. “Effects of Light and Temperature on the Odor Production of 2-Methylisoborneol-Producing Pseudanabaena Sp. and Geosmin-Producing Anabaena Ucrainica (Cyanobacteria).” Biochemical Systematics and Ecology 58: 219–26. https://doi.org/10.1016/j.bse.2014.12.013.
Xiao-Qin Wang, Hai-Bo Jiang, and Bao-Sheng Qiu. 2015. “Effects of Iron Availability on Competition Between Microcystis and Pseudanabaena or Chlorella Species.” European Journal of Phycology 50 (3): 260–70. https://doi.org/10.1080/09670262.2015.1020516.
Zhang, Ting, Lingling Zheng, Lin Li, and Lirong Song. 2016. “2-Methylisoborneol Production Characteristics of Pseudanabaena sp. FACHB 1277 Isolated from Xionghe Reservoir, China.” Journal of Applied Phycology, 1–10. https://doi.org/10.1007/s10811-016-0864-x.