View source: R/initial_guess_c4_aci.R
initial_guess_c4_aci | R Documentation |
Creates a function that makes an initial guess of C4 photosynthesis model
parameter values for one curve. This function is used internally by
fit_c4_aci
.
Values estimated by this guessing function should be considered inaccurate, and should always be improved upon by an optimizer.
initial_guess_c4_aci(
alpha_psii,
gbs,
gmc_at_25,
Rm_frac,
pcm_threshold_rlm = 40,
x_etr = 0.4,
a_column_name = 'A',
ci_column_name = 'Ci',
gmc_norm_column_name = 'gmc_norm',
j_norm_column_name = 'J_norm',
kp_column_name = 'Kp',
rl_norm_column_name = 'RL_norm',
total_pressure_column_name = 'total_pressure',
vcmax_norm_column_name = 'Vcmax_norm',
vpmax_norm_column_name = 'Vpmax_norm'
)
alpha_psii |
The fraction of photosystem II activity in the bundle sheath
( |
gbs |
The bundle sheath conductance to CO2 in |
gmc_at_25 |
The mesophyll conductance to CO2 diffusion at 25 degrees C, expressed in
|
Rm_frac |
The fraction of the total mitochondrial respiration that occurs in the
mesophyll. If |
pcm_threshold_rlm |
An upper cutoff value for the partial pressure of CO2 in the mesophyll (in
|
x_etr |
The fraction of whole-chain electron transport occurring in the mesophyll (dimensionless). See Equation 29 from S. von Caemmerer (2021). |
a_column_name |
The name of the column in |
ci_column_name |
The name of the column in |
gmc_norm_column_name |
The name of the column in |
j_norm_column_name |
The name of the column in |
kp_column_name |
The name of the column in |
rl_norm_column_name |
The name of the column in |
total_pressure_column_name |
The name of the column in |
vcmax_norm_column_name |
The name of the column in |
vpmax_norm_column_name |
The name of the column in |
Here we estimate values of J_at_25
, RL_at_25
,
Vcmax_at_25
, Vpmax_at_25
, and Vpr
from a measured C4 CO2
response curve. It is difficult to estimate values of alpha_psii
,
gbs
, gmc_at_25
, and Rm_frac
from a curve, so they must be
supplied beforehand. For more information about these parameters, see the
documentation for calculate_c4_assimilation
. To estimate these
parameter values, we use several equations from S. von Caemmerer, "Biochemical
Models of Leaf Photosynthesis" (CSIRO Publishing, 2000)
[\Sexpr[results=rd]{tools:::Rd_expr_doi("10.1071/9780643103405")}]. Any equation numbers referenced below are from
this book.
Estimating RL: An estimate for RLm
can be obtained
using Equation 4.26, which applies for low values of PCm
. In
this situation, PCm + Kp
can be approximated by Kp
, and
Equation 4.26 simplifies to a linear relationship between the net
assimilation An
and PCm
: An =
(gbs + Vpmax / kP) * PCm - RLm
. So, to estimate RLm
, we make a
linear fit of An
vs. PCm
in the low PCm
range
where this equation is expected to be valid. Then RLm
is given
by the negative of the intercept from the fit. In the C4 assimilation
model, we assume that RLm = Rm_frac * RL
, so we can also
estimate RL = RLm / Rm_frac
from this value.
Estimating Vpmax: An estimate for Vpmax
can also be
obtained from Equation 4.26. In this case, we simply solve the
equation for Vpmax
and use it to calculate a value of
Vpmax
at each point in the curve from the measured values of
An
and PCm
, the input value of gbs
, and the value
of RLm
estimated above. In the PEP-carboxylation-limited range,
the estimated values of Vpmax
should be reasonable. In other
parts of the curve, the assimilation rate is limited by other factors,
so An
will be smaller than the PEP-carboxylation-limited
values, causing the estimated values of Vpmax
to be smaller.
So, to make an overall estimate, we choose the largest estimated
Vpmax
value.
Estimating Vcmax: An estimate for Vcmax
can be
obtained by solving An = Vcmax - RL
for Vcmax
, similar
to the method used to estimate Vpmax
.
Estimating Vpr: An estimate for Vpr
can be
obtained by solving An = Vpr + gbs * PCm - RLm
for Vpr
,
similar to the method used to estimate Vpmax
.
Estimating J: First, an estimate for J
can be
obtained by solving An = (1 - x_etr) * J / 3 - RL
for J
.
Then, estimates of J
can be made from J
and
Qin
. The largest value of J / J_norm
is chosen as
the best estimate for J_at_25
.
Note that a key assumption underlying this approach is that the net
assimilation can be reasonably approximated by
An = min(Apc, Apr, Ar, Ajm)
(Equations 4.19, 4.25, 4.45, and 4.47
combined). While this approximation seems to work well for low values of
PCm
, it tends to deviate significantly from the more accurate version
at higher values of PCm
, predicting values that are noticably smaller.
Thus, the values of Vcmax
and Vpr
estimated using this procedure
are unlikely to be accurate. This is not a problem; instead it simply
highlights the importance of improving this initial guess using an optimizer,
which can be accomplished via fit_c4_aci
.
A function with one input argument rc_exdf
, which should be an
exdf
object representing one C4 CO2 response curve. The return value of
this function will be a numeric vector with eight elements, representing the
values of alpha_psii
, gbs
, J_at_25
, RL_at_25
,
rm_frac
, Vcmax_at_25
, Vpmax_at_25
, and Vpr
(in
that order).
# Read an example Licor file included in the PhotoGEA package
licor_file <- read_gasex_file(
PhotoGEA_example_file_path('c4_aci_1.xlsx')
)
# Define a new column that uniquely identifies each curve
licor_file[, 'species_plot'] <-
paste(licor_file[, 'species'], '-', licor_file[, 'plot'] )
# Organize the data
licor_file <- organize_response_curve_data(
licor_file,
'species_plot',
c(9, 10, 16),
'CO2_r_sp'
)
# Calculate temperature-dependent values of C4 photosynthetic parameters
licor_file <- calculate_temperature_response(licor_file, c4_temperature_param_vc)
# Calculate the total pressure in the Licor chamber
licor_file <- calculate_total_pressure(licor_file)
# Create the guessing function, using typical values for the alpha_psii, gbs,
# gmc_at_25, and Rm_frac: 0, 0.003, 1, and 0.5
guessing_func <- initial_guess_c4_aci(0, 0.003, 1, 0.5)
# Apply it and see the initial guesses for each curve
print(by(licor_file, licor_file[, 'species_plot'], guessing_func))
# A simple way to visualize the guesses is to "fit" the curves using the null
# optimizer, which simply returns the initial guess
aci_results <- consolidate(by(
licor_file,
licor_file[, 'species_plot'],
fit_c4_aci,
optim_fun = optimizer_null()
))
plot_c4_aci_fit(aci_results, 'species_plot', 'Ci', ylim = c(-10, 100))
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.