Process raw biomass data from one harvest
process.Rd
This function processes the raw biomass data stored in a
harvest_point
object to convert it into more meaningful values.
Arguments
- x
A
harvest_point
object.- leaf_name
A string specifying the name of the leaf tissue to use when calculating the leaf area index. Typically, the leaf mass is called
'leaf'
, but it may sometimes have a similar name such as'main_leaf'
.- ...
Additional arguments (currently unused).
Details
The process
function attempts to make a variety of calculations using
the information stored in x
. If some of the possible elements of
x
are set to NA
, the relevant calculations that would
require those pieces of information will simply be skipped, and their outputs
will be set to NA
. The results of the calculations will be stored as
new elements in the harvest_point
object.
The detailed calculations are as follows:
time
: In BioCro, the time is specified as a fractional day of the year calculated bytime = doy + hour / 24.0
.measured_population
: The number of plants per unit ground area (inplants / acre
can be estimated from the row spacing and the number of plants harvested for above-ground biomass usingmeasured_population = agb_nplants / (agb_row_length * row_spacing) * 4047
. Here, the factor4047
converts the area basis fromm^2
toacre
using1 acre = 4047 m^2
.agb_per_area
: The amount of above-ground biomass per unit ground area (inMg / ha
) in the plot can be estimated from the row spacing and the dry mass of the plants harvested for above-ground biomass usingagb_per_area = agb_weight / (agb_row_length * row_spacing) * 1e-2
. Here, the factor1e-2
converts fromg / m^2
toMg / ha
using1 g / m^2 = 0.01 Mg / ha
.agb_per_plant_row
: The amount of above-ground biomass per plant (ing / plant
) can be estimated from the row section harvested for above-ground biomass usingagb_per_plant_row = agb_weight / agb_nplants
. This value can be compared againstagb_per_plant_partitioning
to get an idea of the variability in plant size throughout the plot.partitioning_agb_weight
: The above-ground biomass (ing
) of the plants selected for partitioning can be obtained by adding the partitioning component weights for the components that are designated as being part of the above-ground biomass. For example, ifpartitioning_component_weights = list(leaf = 1, stem = 2, root = 0.5)
andagb_components = c('leaf', 'stem')
, then the above-ground biomass from the partitioned plants would be1 + 2 = 3
. In other words, theroot
mass would not be included.agb_per_plant_partitioning
: The amount of above-ground biomass per plant (ing / plant
) can be estimated from the partitioned plants usingagb_per_plant_partitioning = partitioning_agb_weight / agb_nplants
. This value can be compared againstagb_per_plant_row
to get an idea of the variability in plant size throughout the plot.relative_components
: The relative mass (dimensionless fromg / g
; normalized to the above-ground biomass) for each partitioned component can be obtained by dividing each component's dry mass bypartitioning_agb_weight
. For example, ifpartitioning_component_weights = list(leaf = 1, stem = 2, root = 0.5)
andagb_components = c('leaf', 'stem')
, thenpartitioning_agb_weight = 3
andrelative_components = list(leaf = 1 / 3, stem = 2 / 3, root = 0.5 / 3)
.components_biocro
: The biomass per unit ground area (inMg / ha
, the units used in BioCro) can be obtained by multiplying each element ofrelative_components
byagb_per_area
.LMA
: The leaf mass per unit leaf area (LMA; in units ofg / m^2
) can be calculated from the mass and area of the partitioned leaves usingLMA = partitioning_component_weights$leaf / partitioning_leaf_area * 1e4
. Here, the factor1e-4
converts fromg / cm^2
tog / m^2
using1 g / cm^2 = 1e-4 g / m^2
.LAI_from_LMA
: The leaf area per unit ground area, which is referred to as the leaf area index (LAI; dimensionless fromm^2 / m^2
), can be calculated from the leaf mass per unit area and the LMA usingLAI = components_biocro$leaf / LMA * 1e2
. Here, the factor1e2
converts the leaf mass per unit area fromMg / ha
tog / m^2
using1 Mg / ha = 100 g / m^2
. This estimate of LAI can be compared to the estimates based on planting density or measured population, which are stored asLAI_from_planting_density
andLAI_from_measured_population
, respectively.leaf_area_per_plant
: The leaf area per plant incm^2 / plant
can be calculated from the partitioning leaf area and the number of plants that were partitioned.LAI_from_planting_density
: The LAI can be estimated from the planting density and the leaf area per plant usingLAI = planting_density * leaf_area_per_plant * 1e-4 / 4047
. Here, the factor1e-4
converts leaf area fromcm^2
tom^2
and the factor1 / 4047
converts population fromplants / acre
toplants / m^2
. This estimate of LAI can be compared to the estimates based on LMA or measured population, which are stored asLAI_from_LMA
andLAI_from_measured_population
, respectively.LAI_from_measured_population
: The LAI can be estimated from the measured population and the leaf area per plant usingLAI = measured_population * leaf_area_per_plant * 1e-4
. Here, the factor1e-4
converts leaf area fromcm^2
tom^2
. This estimate of LAI can be compared to the estimates based on LMA or planting density, which are stored asLAI_from_LMA
andLAI_from_planting_density
, respectively.SLA
: The leaf mass per unit leaf area, which is referred to as the specific leaf area (SLA; in units ofha / Mg
), can be calculated from LMA usingSLA = 1 / LMA * 1e2
where the factor1e2
converts the units fromm^2 / g
toha / Mg
.trap_components_biocro
: The biomass per unit ground area for the tissue types collected in the litter trap (in units ofMg / ha
) can be calculated by dividing the dry mass of each component by the litter trap area and multiplying by1e-2
to convert fromg / m^2
toMg / ha
.all_components_biocro
: The biomass per unit ground area (inMg / ha
) for all plant tissue types included incomponents_biocro
andtrap_components_biocro
is stored inall_components_biocro
. If a component is present in both lists, the separate values will be added together. For example,components_biocro
may include aleaf_litter
component that represents the biomass of senesced leaves that are still attached to the plants, whiletrap_components_biocro
may contain aleaf_litter
component representing the biomass of senesced leaves that have fallen off the plant; in this case, the value ofleaf_litter
inall_components_biocro
will be the sum of the two separate leaf litter biomass values.
A note about LAI estimates: LAI estimated using LMA is the most accurate of the three methods, and is commonly used when estimating LAI from destructive leaf area measurements (Bréda 2003). When mass values are unavailable, it may not be possible to use this method; in that case, the estimates based on population can be used instead. When enough information is available to make all three estimates, they can be compared to each other as a consistency check or to estimate upper and lower bounds on the LAI.
References:
Bréda, N. J. J. "Ground-based measurements of leaf area index: a review of methods, instruments and current controversies." Journal of Experimental Botany 54, 2403–2417 (2003) [doi:10.1093/jxb/erg263 ].
Value
A harvest_point
object with new elements as described above.
Examples
# Example: Creating and processing a harvest_point object that includes
# (optional) comments about the stem and the leaf litter.
hp <- harvest_point(
crop = 'soybean',
variety = 'ld11',
location = 'energy farm',
plot = 1,
year = 2023,
doy = 186,
hour = 12,
planting_density = 140000,
row_spacing = 0.7,
partitioning_leaf_area = 500,
partitioning_component_weights = list(leaf = 2.5, stem = 1.5, root = 1.4, leaf_litter = 0.2),
agb_components = c('leaf', 'stem'),
agb_row_length = 2,
agb_weight = 50,
trap_area = 0.185,
trap_component_weights = list(leaf_litter = 0.4, stem_litter = 0.5),
partitioning_nplants = 6,
agb_nplants = 50,
stem_comment = 'The stem weight includes petioles',
stem_litter_comment = 'The stem litter is entirely petioles',
leaf_litter_comment = 'Senesced leaves were present on the plants and in the trap'
)
hpp <- process(hp)
str(hpp)
#> List of 36
#> $ crop : chr "soybean"
#> $ variety : chr "ld11"
#> $ location : chr "energy farm"
#> $ plot : num 1
#> $ year : num 2023
#> $ doy : num 186
#> $ hour : num 12
#> $ planting_density : num 140000
#> $ row_spacing : num 0.7
#> $ plant_spacing : num 0.0413
#> $ partitioning_nplants : num 6
#> $ partitioning_leaf_area : num 500
#> $ partitioning_component_weights:List of 4
#> ..$ leaf : num 2.5
#> ..$ stem : num 1.5
#> ..$ root : num 1.4
#> ..$ leaf_litter: num 0.2
#> $ agb_components : chr [1:2] "leaf" "stem"
#> $ agb_nplants : num 50
#> $ agb_row_length : num 2
#> $ agb_weight : num 50
#> $ trap_area : num 0.185
#> $ trap_component_weights :List of 2
#> ..$ leaf_litter: num 0.4
#> ..$ stem_litter: num 0.5
#> $ additional_arguments :List of 3
#> ..$ stem_comment : chr "The stem weight includes petioles"
#> ..$ stem_litter_comment: chr "The stem litter is entirely petioles"
#> ..$ leaf_litter_comment: chr "Senesced leaves were present on the plants and in the trap"
#> $ time : num 186
#> $ partitioning_agb_weight : num 4
#> $ agb_per_plant_partitioning : num 0.667
#> $ agb_per_plant_row : num 1
#> $ measured_population : num 144536
#> $ agb_per_area : num 0.357
#> $ relative_components :List of 4
#> ..$ leaf : num 0.625
#> ..$ stem : num 0.375
#> ..$ root : num 0.35
#> ..$ leaf_litter: num 0.05
#> $ components_biocro :List of 4
#> ..$ leaf : num 0.223
#> ..$ stem : num 0.134
#> ..$ root : num 0.125
#> ..$ leaf_litter: num 0.0179
#> $ LMA : num 50
#> $ LAI_from_LMA : num 0.446
#> $ LAI_from_planting_density : num 0.288
#> $ LAI_from_measured_population : num 0.298
#> $ leaf_area_per_plant : num 83.3
#> $ SLA : num 2
#> $ trap_components_biocro :List of 2
#> ..$ leaf_litter: num 0.0216
#> ..$ stem_litter: num 0.027
#> $ all_components_biocro :List of 5
#> ..$ leaf : num 0.223
#> ..$ stem : num 0.134
#> ..$ root : num 0.125
#> ..$ leaf_litter: num 0.0395
#> ..$ stem_litter: num 0.027
#> - attr(*, "class")= chr [1:2] "harvest_point" "list"
# Example: Creating and processing a harvest point object that has `main_leaf`
# rather than `leaf`.
hp2 <- harvest_point(
partitioning_component_weights = list(main_leaf = 1),
partitioning_leaf_area = 2
)
print(process(hp2)$LMA) # returns NA because no leaf weight was found
#> [1] NA
print(process(hp2, 'main_leaf')$LMA) # returns the correct value
#> [1] 5000