Make an initial guess of FvCB model parameter values for one curve
initial_guess_c3_aci.Rd
Creates a function that makes an initial guess of FvCB model parameter values
for one curve. This function is used internally by fit_c3_aci
.
Values estimated by this guessing function should be considered inaccurate, and should always be improved upon by an optimizer.
Usage
initial_guess_c3_aci(
alpha_g,
alpha_old,
alpha_s,
Gamma_star,
cc_threshold_rd = 100,
atp_use = 4.0,
nadph_use = 8.0,
a_column_name = 'A',
cc_column_name = 'Cc',
j_norm_column_name = 'J_norm',
kc_column_name = 'Kc',
ko_column_name = 'Ko',
oxygen_column_name = 'oxygen',
rl_norm_column_name = 'RL_norm',
vcmax_norm_column_name = 'Vcmax_norm'
)
Arguments
- alpha_g
A dimensionless parameter where
0 <= alpha_g <= 1
, representing the proportion of glycolate carbon taken out of the photorespiratory pathway as glycine.alpha_g
is often assumed to be 0. Ifalpha_g
is not a number, then there must be a column inrc_exdf
calledalpha_g
with appropriate units. A numeric value supplied here will overwrite the values in thealpha_g
column ofrc_exdf
if it exists.- alpha_old
A dimensionless parameter where
0 <= alpha_old <= 1
, representing the fraction of remaining glycolate carbon not returned to the chloroplast after accounting for carbon released as CO2.alpha_old
is often assumed to be 0. Ifalpha_old
is not a number, then there must be a column inrc_exdf
calledalpha_old
with appropriate units. A numeric value supplied here will overwrite the values in thealpha_old
column ofrc_exdf
if it exists.- alpha_s
A dimensionless parameter where
0 <= alpha_s <= 0.75 * (1 - alpha_g)
representing the proportion of glycolate carbon taken out of the photorespiratory pathway as serine.alpha_s
is often assumed to be 0. Ifalpha_s
is not a number, then there must be a column inrc_exdf
calledalpha_s
with appropriate units. A numeric value supplied here will overwrite the values in thealpha_s
column ofrc_exdf
if it exists.- Gamma_star
The CO2 compensation point in the absence of day respiration, expressed in
micromol mol^(-1)
. IfGamma_star
is not a number, then there must be a column inrc_exdf
calledGamma_star
with appropriate units. A numeric value supplied here will overwrite the values in theGamma_star
column ofrc_exdf
if it exists.- cc_threshold_rd
An upper cutoff value for the chloroplast CO2 concentration in
micromol mol^(-1)
to be used when estimatingRL
.- atp_use
The number of ATP molecules used per C3 cycle.
- nadph_use
The number of NADPH molecules used per C3 cycle.
- a_column_name
The name of the column in
rc_exdf
that contains the net assimilation inmicromol m^(-2) s^(-1)
.- cc_column_name
The name of the column in
rc_exdf
that contains the chloroplastic CO2 concentration inmicromol mol^(-1)
.- j_norm_column_name
The name of the column in
rc_exdf
that contains the normalizedJ
values (with units ofnormalized to J at 25 degrees C
).- kc_column_name
The name of the column in
rc_exdf
that contains the Michaelis-Menten constant for rubisco carboxylation inmicromol mol^(-1)
.- ko_column_name
The name of the column in
rc_exdf
that contains the Michaelis-Menten constant for rubisco oxygenation inmmol mol^(-1)
.- oxygen_column_name
The name of the column in
rc_exdf
that contains the concentration of O2 in the ambient air, expressed as a percentage (commonly 21% or 2%); the units must bepercent
.- rl_norm_column_name
The name of the column in
rc_exdf
that contains the normalizedRL
values (with units ofnormalized to RL at 25 degrees C
).- vcmax_norm_column_name
The name of the column in
rc_exdf
that contains the normalizedVcmax
values (with units ofnormalized to Vcmax at 25 degrees C
).
Details
Here we estimate values of J_at_25
, RL_at_25
, Tp
, and
Vcmax_at_25
from a measured C3 CO2 response curve. It is difficult to
estimate values of alpha_g
, alpha_old
, alpha_s
, and
Gamma_star
from a curve, so they must be supplied beforehand. For more
information about these parameters, see the documentation for
calculate_c3_assimilation
.
Estimating RL: Regardless of which process is limiting at low
Cc
, it is always true thatAn = -RL
whenCc = Gamma_star_ag
. Here we make a linear fit of the measuredAn
vs.Cc
values, and evaluate it at atCc = Gamma_star_ag
to estimateRL
. If the linear fit predicts a negative value forRL
, we use a typical value instead (0.5micromol m^(-2) s^(-1)
).Estimating Vc: Once an estimate for
RL
has been found, the RuBP carboxylation rateVc
can be estimated usingVc = (An + RL) / (1 - Gamma_star_ag / Cc)
. This is useful for the remaining parameter estimates.Estimating Vcmax: An estimate for
Vcmax
can be obtained by solving the equation forWc
forVcmax
, and evaluating it withWc = Vc
as estimated above. In the rubisco-limited part of the curve,Vc = Wc
and the estimated values ofVcmax
should be reasonable. In other parts of the curve,Wc
is not the limiting rate, soVc < Wc
. Consequently, the estimated values ofVcmax
in these parts of the curve will be smaller. So, to make an overall estimate, we choose the the largest estimatedVcmax
value.Estimating J and Tp: Estimates for these parameters can be made using the equations for
Wj
andWp
, similar to the approach followed forVcmax
.
For the parameter values estimated above, the values of RL_norm
,
Vcmax_norm
, and J_norm
are used to convert the values at leaf
temperature to the values at 25 degrees C.
Value
A function with one input argument rc_exdf
, which should be an
exdf
object representing one C3 CO2 response curve. The return value of
this function will be a numeric vector with eight elements, representing the
values of alpha_g
, alpha_old
, alpha_s
, Gamma_star
,
J_at_25
, RL_at_25
, Tp
, and Vcmax_at_25
(in that
order).
Examples
# Read an example Licor file included in the PhotoGEA package
licor_file <- read_gasex_file(
PhotoGEA_example_file_path('c3_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'
)
# Specify an infinite mesophyll conductance (so `Cc` = `Ci`)
licor_file <- set_variable(
licor_file,
'gmc', 'mol m^(-2) s^(-1) bar^(-1)', value = Inf
)
# Calculate the total pressure in the Licor chamber
licor_file <- calculate_total_pressure(licor_file)
# Calculate Cc
licor_file <- apply_gm(licor_file)
# Calculate temperature-dependent values of C3 photosynthetic parameters
licor_file <- calculate_arrhenius(licor_file, c3_arrhenius_bernacchi)
# Create the guessing function; here we set all alpha values to 0 and use the
# temperature-dependent values of Gamma_star calculated above
guessing_func <-
initial_guess_c3_aci(alpha_g = 0, alpha_old = 0, alpha_s = 0, Gamma_star = '')
# Apply it and see the initial guesses for each curve
str(by(licor_file, licor_file[, 'species_plot'], guessing_func))
#> List of 3
#> $ soybean - 5a: num [1:8] 0 0 0 56.6 209 ...
#> $ tobacco - 1 : num [1:8] 0 0 0 55.6 247.4 ...
#> $ tobacco - 2 : num [1:8] 0 0 0 55.9 220.5 ...
# Calculate simulated A-Ci curves based on the guesses and compare them to the
# actual data
calculated_aci <- do.call(rbind, by(
licor_file,
licor_file[, 'species_plot'],
function(x) {
param <- guessing_func(x)
calculate_c3_assimilation(
x,
param[1], param[2], param[3], param[4], param[5], param[6], param[7], param[8]
)
}
))
lattice::xyplot(
Ac + Aj + Ap + An + A ~ Ci | species_plot,
data = cbind(licor_file, calculated_aci)$main_data,
type = 'b',
auto = TRUE,
grid = TRUE
)