LeafOptics
Leaf spectra
LeafOptics.leaf_spectra! — FunctionThis function updates leaf level reflectance, transmittance, and fluorescence spectra related parameters. Supported methods are
- Update leaf spectra based on pigment concentrations
- Update leaf spectra (reflectance and transmittance) to given broadband values
- Update leaf spectra based on pigment concentrations for the entire SPAC
LeafOptics.leaf_spectra! — Methodleaf_spectra!(
bio::HyperspectralLeafBiophysics{FT},
wls::WaveLengthSet{FT},
lha::HyperspectralAbsorption{FT},
lwc::FT;
APAR_car::Bool = true,
reabsorb::Bool = true,
α::FT = FT(40)
) where {FT<:AbstractFloat}Update leaf reflectance and transmittance spectra, and fluorescence spectrum matrices, given
bioHyperspectralLeafBiophysicstype struct that contains leaf biophysical parameterswlsWaveLengthSettype struct that contain wave length binslhaHyperspectralAbsorptiontype struct that contains absorption characteristic curveslwcLeaf water content[mol m⁻²]APAR_carIf true, carotenoid absorption is accounted for in PPAR, default istruereabsorbIf true, SIF reabsorption is enabled; otherwise, matb and matf should be based on the case with no reabsorptionαOptimum angle of incidence (default is 40° as in PROSPECT-D, SCOPE uses 59°)
Examples
wls = ClimaCache.WaveLengthSet{Float64}();
bio = ClimaCache.HyperspectralLeafBiophysics{Float64}();
lha = ClimaCache.HyperspectralAbsorption{Float64}();
leaf_spectra!(bio, wls, lha, 50.0);
leaf_spectra!(bio, wls, lha, 50.0; APAR_car=false);
leaf_spectra!(bio, wls, lha, 50.0; APAR_car=false, α=59.0);LeafOptics.leaf_spectra! — Methodleaf_spectra!(bio::HyperspectralLeafBiophysics{FT}, wls::WaveLengthSet{FT}, ρ_par::FT, ρ_nir::FT, τ_par::FT, τ_nir::FT) where {FT<:AbstractFloat}Update leaf reflectance and transmittance (e.g., prescribe broadband PAR and NIR values), given
bioHyperspectralLeafBiophysicstype struct that contains leaf biophysical parameterswlsWaveLengthSettype struct that contain wave length binsρ_parReflectance at PAR regionρ_nirReflectance at NIR regionτ_parTransmittance at PAR regionτ_nirTransmittance at NIR region
Examples
wls = ClimaCache.WaveLengthSet{Float64}();
bio = ClimaCache.HyperspectralLeafBiophysics{Float64}();
leaf_spectra!(bio, wls, 0.1, 0.45, 0.05, 0.25);LeafOptics.leaf_spectra! — Methodleaf_spectra!(spac::Union{MonoMLGrassSPAC{FT}, MonoMLPalmSPAC{FT}, MonoMLTreeSPAC{FT}}) where {FT<:AbstractFloat}Update leaf reflectance and transmittance for SPAC, given
spacMonoMLGrassSPAC,MonoMLPalmSPAC, orMonoMLTreeSPACtype SPAC
Leaf PAR, APAR, and PPAR
LeafOptics.leaf_PAR — Functionleaf_PAR(bio::HyperspectralLeafBiophysics{FT}, wls::WaveLengthSet{FT}, rad::HyperspectralRadiation{FT}; APAR_car::Bool = true) where {FT<:AbstractFloat}Return leaf level PAR, APAR, and PPAR, given
bioHyperspectralLeafBiophysicstype struct that contains leaf biophysical parameterswlsWaveLengthSettype struct that contains wave length binsradHyperspectralRadiationtype struct that contains incoming radiation informationAPAR_carIf true (default), account carotenoid absorption as PPAR; otherwise, PPAR is only by chlorophyll
Examples
wls = ClimaCache.WaveLengthSet{Float64}();
bio = ClimaCache.HyperspectralLeafBiophysics{Float64}();
rad = ClimaCache.HyperspectralRadiation{Float64}();
par,apar,ppar = leaf_PAR(bio, wls, rad);
par,apar,ppar = leaf_PAR(bio, wls, rad; APAR_car=false);Leaf SIF
LeafOptics.leaf_SIF — Functionleaf_SIF(bio::HyperspectralLeafBiophysics{FT}, wls::WaveLengthSet{FT}, rad::HyperspectralRadiation{FT}, ϕ::FT = FT(0.01); ϕ_photon::Bool = true) where {FT<:AbstractFloat}Return the leaf level SIF at backward and forward directions, given
bioHyperspectralLeafBiophysicstype struct that contains leaf biophysical parameterswlsWaveLengthSettype struct that contains wave length binsradHyperspectralRadiationtype struct that contains incoming radiation informationϕFluorescence quantum yieldϕ_photonIf true (default), convert photon to photon when computing SIF; otherwise, convert energy to energy
Examples
wls = ClimaCache.WaveLengthSet{Float64}();
bio = ClimaCache.HyperspectralLeafBiophysics{Float64}();
rad = ClimaCache.HyperspectralRadiation{Float64}();
sif_b,sif_f = leaf_SIF(bio, wls, rad, 0.01);
sif_b,sif_f = leaf_SIF(bio, wls, rad, 0.01; ϕ_photon=false);Utility functions
LeafOptics.average_transmittance — Functionaverage_transmittance(α::FT, nr::FT) where {FT<:AbstractFloat}Return the average transmittance of isotropic radiation across an interface between two dielectrics, given
αangle of incidencenrIndex of refraction
References
- Stern (1964) Transmission of isotropic radiation across an interface between two dielectrics. Applied Optics 3(1): 111-113.
- Allen (1973) Transmission of isotropic light across a dielectric surface in two and three dimensions. Journal of the Optical Society of America 63(6): 664-666.
LeafOptics.photon — Functionphoton(λ::FT, E::FT) where {FT<:AbstractFloat}Return the number of moles of photons, given
λWave length in[nm], converted to[m]by FACEJoules of energy
LeafOptics.photon! — Functionphoton!(λ::Vector{FT}, E::Vector{FT}, phot::Vector{FT}) where {FT<:AbstractFloat}
photon!(λ::Vector{FT}, E::Vector{FT}) where {FT<:AbstractFloat}Compute and save the number of moles of photons, given
λWave length in[nm], converted to[m]by FACEJoules of energy (will be converted to moles of photons if phot in not given)photMole of photons (variable to save)
LeafOptics.energy — Functionenergy(λ::FT, phot::FT) where {FT<:AbstractFloat}Return the energy, given
λWave length in[nm], converted to[m]by FACphotNumber of moles of photon
LeafOptics.energy! — Functionenergy!(λ::Vector{FT}, phot::Vector{FT}, E::Vector{FT}) where {FT<:AbstractFloat}
energy!(λ::Vector{FT}, phot::Vector{FT}) where {FT<:AbstractFloat}Compute and save the number of moles of photons, given
λWave length in[nm], converted to[m]by FACphotMole of photons (will be converted to moles of photons if E is not given)EJoules of energy (variable to save)