View source: R/calculate_gm_busch.R
| calculate_gm_busch | R Documentation | 
Calculates mesophyll conductance to CO2 diffusion (gmc) from combined
gas exchange and isotope discrimination measurements as described in Busch
et al. (2020). This function can accomodate alternative colum names for the
variables taken from exdf_obj; it also checks the units of each
required column and will produce an error if any units are incorrect.
  calculate_gm_busch(
    exdf_obj,
    e = -3,
    f = 11,
    e_star_equation = 20,
    gm_type = 'dis',
    a_bar_column_name = 'a_bar',
    a_column_name = 'A',
    ci_column_name = 'Ci',
    co2_s_column_name = 'CO2_s',
    csurface_column_name = 'Csurface',
    delta_c13_r_column_name = 'delta_C13_r',
    delta_obs_growth_column_name = 'Delta_obs_growth',
    delta_obs_tdl_column_name = 'Delta_obs_tdl',
    gamma_star_column_name = 'Gamma_star_tl',
    rl_column_name = 'RL',
    total_pressure_column_name = 'total_pressure',
    t_column_name = 't'
  )
exdf_obj | 
 An   | 
e | 
 The isotopic fractionation during day respiration in   | 
f | 
 The isotopic fractionation during photorespiration in   | 
e_star_equation | 
 The equation from Busch et al. (2020) to use for calculating   | 
gm_type | 
 Determines whether day respiration is assumed to be isotopically connected
to the CBB cycle (  | 
a_bar_column_name | 
 The name of the column in   | 
a_column_name | 
 The name of the column in   | 
ci_column_name | 
 The name of the column in   | 
co2_s_column_name | 
 The name of the column in   | 
csurface_column_name | 
 The name of the column in   | 
delta_c13_r_column_name | 
 The name of the column in   | 
delta_obs_growth_column_name | 
 The name of the column in   | 
delta_obs_tdl_column_name | 
 The name of the column in   | 
gamma_star_column_name | 
 The name of the column in   | 
rl_column_name | 
 The name of the column in   | 
total_pressure_column_name | 
 The name of the column in   | 
t_column_name | 
 The name of the column in   | 
This function uses a model for photosynthetic discrimination against 13C in
C3 plants to determine mesophyll conductance values as described in Busch et
al. (2020). That paper provides two alternate ways to calculate e_star,
and two alternate ways to calculate mesophyll conductance gmc; this
function allows the user to choose between them. In more detail:
 Isotopic fractionation due to day respiration
(e_prime = e + e_star) is calculated with e_star given
by either Equation 19 or 20 depending on the value of
e_star_equation.
 Isotopic discrimination assuming infinite mesophyll conductance
(Delta_i) is calculated by setting Cc = Ci in either
Equation 2 or 13, depending on the value of gm_type.
 Mesophyll conductance to CO2 (gmc) is calculated using either
Equation 21 or 22, depending on the value of gm_type.
Note 1: Setting e_star_equation = 19 and gm_type = 'con' should
produce identical or similar results to calculate_gm_ubierna.
Note 2: Using e_star_equation = 20 and gm_type = 'dis' is
expected to be more accurate, as discussed in Busch et al. (2020); however, be
aware that this method requires a value for Delta_obs_growth, which may
not always be available unless it is intentionally measured.
References:
Busch, F. A., Holloway-Phillips, M., Stuart-Williams, H. and Farquhar, G. D. "Revisiting carbon isotope discrimination in C3 plants shows respiration rules when photosynthesis is low." Nat. Plants 6, 245–258 (2020) [\Sexpr[results=rd]{tools:::Rd_expr_doi("10.1038/s41477-020-0606-6")}].
An exdf object based on exdf_obj that includes the following
additional columns, calculated as described above: e_prime,
e_star, Delta_i, and gmc, as well as the values of a few
intermediate calculations such as Delta_i_term_1 and
Delta_i_term_2. The category for each of these new columns is
calculate_gm_busch to indicate that they were created using this
function.
## In this example we load gas exchange and TDL data files, calibrate the TDL
## data, pair the data tables together, and then calculate mesophyll conductance
# Read the TDL data file, making sure to interpret the time zone as US Central
# time
tdl_data <- read_gasex_file(
  PhotoGEA_example_file_path('tdl_for_gm.dat'),
  'TIMESTAMP',
  list(tz = 'America/Chicago')
)
# Identify cycles within the TDL data
tdl_data <- identify_tdl_cycles(
  tdl_data,
  valve_column_name = 'valve_number',
  cycle_start_valve = 20,
  expected_cycle_length_minutes = 2.7,
  expected_cycle_num_valves = 9,
  timestamp_colname = 'TIMESTAMP'
)
# Use reference tanks to calibrate the TDL data
processed_tdl <- consolidate(by(
  tdl_data,
  tdl_data[, 'cycle_num'],
  process_tdl_cycle_erml,
  noaa_valve = 2,
  calibration_0_valve = 20,
  calibration_1_valve = 21,
  calibration_2_valve = 23,
  calibration_3_valve = 26,
  noaa_cylinder_co2_concentration = 294.996,
  noaa_cylinder_isotope_ratio = -8.40,
  calibration_isotope_ratio = -11.505
))
# Read the gas exchange data, making sure to interpret the time stamp in the US
# Central time zone
licor_data <- read_gasex_file(
  PhotoGEA_example_file_path('licor_for_gm_site11.xlsx'),
  'time',
  list(tz = 'America/Chicago')
)
# Get TDL valve information from Licor file name; for this TDL system, the
# reference valve is 12 when the sample valve is 11
licor_data <- get_sample_valve_from_filename(licor_data, list('11' = 12))
# Pair the Licor and TDL data by locating the TDL cycle corresponding to each
# Licor measurement
licor_data <- pair_gasex_and_tdl(licor_data, processed_tdl$tdl_data)
# Calculate total pressure (needed for calculate_gas_properties)
licor_data <- calculate_total_pressure(licor_data)
# Calculate Csurface (needed for calculate_ternary_correction)
licor_data <- calculate_gas_properties(licor_data)
# Calculate ternary correction
licor_data <- calculate_ternary_correction(licor_data)
# Set Rubisco specificity (needed for calculate_gamma_star)
licor_data <- set_variable(
    licor_data,
    'rubisco_specificity_tl',
    'M / M',
    value = 90
)
# Calculate Gamma_star (needed for calculate_gm_busch)
licor_data <- calculate_gamma_star(licor_data)
# Calculate isotope discrimination (needed for calculate_gm_busch)
licor_data <- calculate_isotope_discrimination(licor_data)
# Set Delta_obs_growth to the average of Delta_obs_tdl over the first 6 points,
# where the ambient CO2 concentration was set to the atmospheric value (420 ppm)
# (needed for calculate_gm_busch).
licor_data <- set_variable(
  licor_data,
  'Delta_obs_growth',
  'ppt',
  value = mean(licor_data[1:6, 'Delta_obs_tdl'])
)
# Set respiration (needed for calculate_gm_busch)
licor_data <- set_variable(
  licor_data,
  'RL',
  'micromol m^(-2) s^(-1)',
  value = 1.2
)
# Calculate mesophyll conductance
licor_data <- calculate_gm_busch(licor_data)
# Calculate Cc using the new values of mesophyll conductance
licor_data <- calculate_temperature_response(
  licor_data,
  c3_temperature_param_flat['gmc_norm']
)
licor_data <- set_variable(
  licor_data,
  'gmc_at_25',
  units = licor_data$units$gmc,
  value = licor_data[, 'gmc']
)
licor_data <- apply_gm(licor_data)
# View some of the results
licor_data[, c('replicate', 'CO2_s', 'Delta_obs_tdl', 'e_prime', 'gmc', 'Ci', 'Cc')]
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.