Process raw biomass data from one harvest
process.RdThis function processes the raw biomass data stored in a
harvest_point object to convert it into more meaningful values.
Arguments
- x
A
harvest_pointobject.- 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: The time as determined from thedoyandhourusingadd_time_to_weather_data.measured_population: The number of plants per unit ground area (inplants / acrecan 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 factor4047converts the area basis fromm^2toacreusing1 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-2converts fromg / m^2toMg / hausing1 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_partitioningto 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, therootmass 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_rowto 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 = 3andrelative_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_componentsbyagb_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-4converts fromg / cm^2tog / m^2using1 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 factor1e2converts the leaf mass per unit area fromMg / hatog / m^2using1 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_densityandLAI_from_measured_population, respectively.leaf_area_per_plant: The leaf area per plant incm^2 / plantcan 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-4converts leaf area fromcm^2tom^2and the factor1 / 4047converts population fromplants / acretoplants / m^2. This estimate of LAI can be compared to the estimates based on LMA or measured population, which are stored asLAI_from_LMAandLAI_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-4converts leaf area fromcm^2tom^2. This estimate of LAI can be compared to the estimates based on LMA or planting density, which are stored asLAI_from_LMAandLAI_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 * 1e2where the factor1e2converts the units fromm^2 / gtoha / 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-2to convert fromg / m^2toMg / ha.all_components_biocro: The biomass per unit ground area (inMg / ha) for all plant tissue types included incomponents_biocroandtrap_components_biocrois stored inall_components_biocro. If a component is present in both lists, the separate values will be added together. For example,components_biocromay include aleaf_littercomponent that represents the biomass of senesced leaves that are still attached to the plants, whiletrap_components_biocromay contain aleaf_littercomponent representing the biomass of senesced leaves that have fallen off the plant; in this case, the value ofleaf_litterinall_components_biocrowill 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 4452
#> $ 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