# Example 1: Calculate Gamma_star for each point in a gas exchange log file
licor_data <- read_gasex_file(
PhotoGEA_example_file_path('licor_for_gm_site11.xlsx'),
)
licor_data <- get_oxygen_from_preamble(licor_data)
licor_data <- set_variable(
licor_data,
'rubisco_specificity_tl',
'M / M',
value = 90
)
licor_data <- calculate_gamma_star(licor_data)
licor_data[, c('specificity_gas_basis', 'Oxygen', 'Gamma_star_tl'), TRUE]
# Example 2: Calculate Gamma_star at 21% and 2% oxygen for a Rubisco whose
# specificity was measured to be 100 M / M at 25 degrees C.
exdf_obj <- calculate_gamma_star(
exdf(
data.frame(
Oxygen = c(2, 21),
rubisco_specificity_tl = c(100, 100),
TleafCnd = c(25, 25)
),
data.frame(
Oxygen = 'percent',
rubisco_specificity_tl = 'M / M',
TleafCnd = 'degrees C',
stringsAsFactors = FALSE
)
)
)
exdf_obj[, c('specificity_gas_basis', 'Oxygen', 'Gamma_star_tl'), TRUE]
# Example 3: Here we recreate Figure 1 from Long, S. P. "Modification of the
# response of photosynthetic productivity to rising temperature by atmospheric
# CO2 concentrations: Has its importance been underestimated?" Plant, Cell and
# Environment 14, 729–739 (1991). This is a fairly complicated example where
# Arrhenius constants for Rubisco parameters are determined by fitting
# published data and then used to determine the Rubisco specificity across a
# range of temperatures.
# Specify leaf temperature and oxygen concentration
leaf_temp <- seq(0, 50, by = 0.1)
exdf_obj <- exdf(
data.frame(
Oxygen = rep_len(21, length(leaf_temp)),
TleafCnd = leaf_temp
),
data.frame(
Oxygen = 'percent',
TleafCnd = 'degrees C',
stringsAsFactors = FALSE
)
)
# Get Arrhenius constants for Rubisco parameters using data from Table 2 of
# Jordan, D. B. and Ogren, W. L. "The CO2/O2 specificity of ribulose
# 1,5-bisphosphate carboxylase/oxygenase" Planta 161, 308–313 (1984).
rubisco_info <- data.frame(
temperature = c(7, 12, 15, 25, 30, 35),
Vc = c(0.13, 0.36, 0.63, 1.50, 1.90, 2.90),
Kc = c(2, 3, 4, 11, 14, 19),
Ko = c(550, 510, 510, 500, 600, 540),
Vo = c(0.24, 0.48, 0.69, 0.77, 1.1, 1.3)
)
rubisco_info$x <- 1 / (8.314e-3 * (rubisco_info$temperature + 273.15))
lm_Vc <- stats::lm(log(Vc) ~ x, data = rubisco_info)
lm_Kc <- stats::lm(log(Kc) ~ x, data = rubisco_info)
lm_Ko <- stats::lm(log(Ko) ~ x, data = rubisco_info)
lm_Vo <- stats::lm(log(Vo) ~ x, data = rubisco_info)
arrhenius_info <- list(
Vc = list(
c = as.numeric(lm_Vc$coefficients[1]),
Ea = -as.numeric(lm_Vc$coefficients[2]),
units = 'micromol / mg / min'
),
Kc = list(
c = as.numeric(lm_Kc$coefficients[1]),
Ea = -as.numeric(lm_Kc$coefficients[2]),
units = 'microM'
),
Ko = list(
c = as.numeric(lm_Ko$coefficients[1]),
Ea = -as.numeric(lm_Ko$coefficients[2]),
units = 'microM'
),
Vo = list(
c = as.numeric(lm_Vo$coefficients[1]),
Ea = -as.numeric(lm_Vo$coefficients[2]),
units = 'micromol / mg / min'
)
)
# Get temperature-dependent values of Rubisco parameters using Arrhenius
# equations
exdf_obj <- calculate_temperature_response_arrhenius(
exdf_obj,
arrhenius_info
)
# Calculate temperature-dependent specificity values
exdf_obj <- set_variable(
exdf_obj,
'rubisco_specificity_tl',
units = 'M / M',
value = exdf_obj[, 'Vc'] * exdf_obj[, 'Ko'] /
(exdf_obj[, 'Vo'] * exdf_obj[, 'Kc'])
)
# Calculate Gamma_star and Henry constants
exdf_obj <- calculate_gamma_star(exdf_obj)
# Make a plot similar to Figure 1 from Long (1991)
lattice::xyplot(
rubisco_specificity_tl + H_CO2 / H_O2 ~ TleafCnd,
data = exdf_obj$main_data,
auto = TRUE,
grid = TRUE,
type = 'l',
xlim = c(0, 50),
ylim = c(0, 250),
xlab = "Temperature [ degrees C ]",
ylab = "Rubisco specificity or ratio of Henry's constants (H_CO2 / H_O2)\n[ dimensionless ]"
)
# We can also make a plot of Gamma_star across this range
lattice::xyplot(
Gamma_star_tl ~ TleafCnd,
data = exdf_obj$main_data,
auto = TRUE,
grid = TRUE,
type = 'l',
xlim = c(0, 50),
ylim = c(0, 120),
xlab = "Temperature [ degrees C ]",
ylab = paste('Gamma_star at leaf temperature [', exdf_obj$units$Gamma_star_tl, ']')
)
Run the code above in your browser using DataLab