eloch216 / PhotoGEA

https://eloch216.github.io/PhotoGEA/
Other
1 stars 4 forks source link

Vcmax temperature response #97

Closed yufenghe22 closed 1 month ago

yufenghe22 commented 1 month ago

PhotoGEA outputs the Vcmax_at_25 by the function fit_c3_aci. Is it assuming an arrhenius_exponential of the temperature response between Vcmax and Vcmax_at_25? Now I have a new temperature response function, how can I add that to PhotoGEA? I think it might affect the estimated value of Vcmax_at_25.

eloch216 commented 1 month ago

By default, PhotoGEA uses an Arrhenius function for the temperature response of Vcmax when fitting C3 A-Ci curves. This is usually accomplished by calling something like licor_data <- calculate_arrhenius(licor_data, c3_arrhenius_bernacchi). One result of this command is that licor_data will now have a column called Vcmax_norm that encodes the temperature response as a dimensionless multiplicative factor. Its value will be 1 when the leaf temperature is 25, and usually different from 1 otherwise. During the fitting process, the value of Vcmax at the leaf temperature will be calculated as Vcmax_at_25 * Vcmax_norm.

So, if you want to use a different temperature response, you can do something like the following:

# Calculate Arrhenius temperature response
licor_data <- calculate_arrhenius(licor_data, c3_arrhenius_bernacchi)

# Override the default Vcmax temperature response
Vcmax_temperature_response <- function(Tleaf, ...) {
    # This function should return a dimensionless multiplicative factor representing the temperature response of Vcmax
    return(1)
}

licor_data[, 'Vcmax_norm'] <- Vcmax_temperature_response(licor_data[, 'TleafCnd'], other_param)

Then you can continue with the rest of the fitting as usual.

In PhotoGEA, the temperature response was deliberately separated from the fitting process to make it as flexible as possible. Currently, there are built-in functions for Arrhenius and Gaussian temperature responses (calculate_arrhenius and calculate_peaked_gaussian, respectively). But users are free to use any temperature response via the technique described above. Eventually, more temperature response functions can be added to the package.

yufenghe22 commented 1 month ago

Thanks! This works perfectly. I created a standalone R function of the BioCro FvCB module (https://github.com/Matthews-Research-Group/BioCro-ePhotosynthesis-v2/tree/master/enzyme_optimization/fit_Aci/for_calibration_with_OBS/my_scripts). Using the parameters from PhotoGEA (with my new Vcmax temperature function), I can generate ACi and AQ results (see below), almost the same as your results. This shows that the R function is valid, consistent with BioCro's and PhotoGEA. The purpose of creating a standalone R fucntion of the FvCB is that one can generate ACi, AQ or AT curves more conveniently by changing Vcmax and/or Jmax. For me, I need it for calibrating/comparing ePhotosynthesis. The function takes inputs like the follows, BioCro_FvCB <- function(Qin,Tleaf,Ci,Vcmax,Jmax,Rd,TPU){}

image