Skip to contents padding-top: 70px;

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. If alpha_g is not a number, then there must be a column in rc_exdf called alpha_g with appropriate units. A numeric value supplied here will overwrite the values in the alpha_g column of rc_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. If alpha_old is not a number, then there must be a column in rc_exdf called alpha_old with appropriate units. A numeric value supplied here will overwrite the values in the alpha_old column of rc_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. If alpha_s is not a number, then there must be a column in rc_exdf called alpha_s with appropriate units. A numeric value supplied here will overwrite the values in the alpha_s column of rc_exdf if it exists.

Gamma_star

The CO2 compensation point in the absence of day respiration, expressed in micromol mol^(-1). If Gamma_star is not a number, then there must be a column in rc_exdf called Gamma_star with appropriate units. A numeric value supplied here will overwrite the values in the Gamma_star column of rc_exdf if it exists.

cc_threshold_rd

An upper cutoff value for the chloroplast CO2 concentration in micromol mol^(-1) to be used when estimating RL.

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 in micromol m^(-2) s^(-1).

cc_column_name

The name of the column in rc_exdf that contains the chloroplastic CO2 concentration in micromol mol^(-1).

j_norm_column_name

The name of the column in rc_exdf that contains the normalized J values (with units of normalized 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 in micromol mol^(-1).

ko_column_name

The name of the column in rc_exdf that contains the Michaelis-Menten constant for rubisco oxygenation in mmol 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 be percent.

rl_norm_column_name

The name of the column in rc_exdf that contains the normalized RL values (with units of normalized to RL at 25 degrees C).

vcmax_norm_column_name

The name of the column in rc_exdf that contains the normalized Vcmax values (with units of normalized 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 that An = -RL when Cc = Gamma_star_ag. Here we make a linear fit of the measured An vs. Cc values, and evaluate it at at Cc = Gamma_star_ag to estimate RL. If the linear fit predicts a negative value for RL, we use a typical value instead (0.5 micromol m^(-2) s^(-1)).

  • Estimating Vc: Once an estimate for RL has been found, the RuBP carboxylation rate Vc can be estimated using Vc = (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 for Wc for Vcmax, and evaluating it with Wc = Vc as estimated above. In the rubisco-limited part of the curve, Vc = Wc and the estimated values of Vcmax should be reasonable. In other parts of the curve, Wc is not the limiting rate, so Vc < Wc. Consequently, the estimated values of Vcmax in these parts of the curve will be smaller. So, to make an overall estimate, we choose the the largest estimated Vcmax value.

  • Estimating J and Tp: Estimates for these parameters can be made using the equations for Wj and Wp, similar to the approach followed for Vcmax.

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
)