//Plugin pre-defined SBW
disturbance program to modify
//growth and survival as a
function of population and protection scenario
//OSM PluginCommand
takes three arguments:
// 1) DLL file path to
link into OSM,
// 2) Class NamespacePath.Name, and
// 3) Root Command Name
user wants to use to access object proerties and
methods
//Write("PluginCommand C:\FORUS\2020.2\x32\Forus.IOSM.dll Forus.IOSM.Cmds.DisturbanceSBW SBW")
This
sub command object, which resides under SIMULATION.MODEL, provides access to
the underlying stand-impact routines of the Spruce Budworm Decision Support
System (MacLean et al 2001) with significant method upgrades over the past 20
years, including:
1)
Reduced
defoliation on spruce, especially red and black, relative to fir according to
Hennigar et al. (200X); except for certain years
when population levels are extreme.
2)
Reduced
defoliation with increasing stand (plot) hardwood content (Bo, Su); except for certain
years when population levels are extreme.
3)
Ability
to input annual SBW population levels [larval 2nd instar (L2)/m2],
with internal functions to predict defoliation on respective host species as a
function of defoliation: population relationships, stand hardwood basal area
ratio, and foliage protection assumptions.
4)
Ability
to alternatively to use annual stand-level defoliation levels (as in the
original SBW DSS), but with auto-prorating of mean annual stand-level
defoliation on to hosts (fir, white, red, and black spruce) as a function of
their basal area and relative susceptibility to SBW defoliation; i.e., if the
stand is composed half of fir and half of black spruce, then the fir will
sustain more relative defoliation compared to the black spruce, but basal area
weighted stand defoliation will still match aerially observed or projected input
levels.
5)
Preprogrammed
‘Moderate’ and ‘Severe’ SBW outbreak scenarios expressed in annual population
levels. These population patterns were estimated from the original SBW DSS
defoliation-based outbreak scenarios using the same defoliation: population
relationships as discussed above, so outcomes should be similar.
6)
Foliage
protection efficacy assumptions and treatment options that can be modified
easily.
Technical
details of these assumptions and calculations are provided in OutbreakAssptions.xlsx. This Excel file demonstrates the effect of modifying
some of the foliage protection assumptions on resulting host defoliation with
linked equations among cells. These calculations are nearly identical to the
calculation performed by the SBW extension. Growth multipliers & additive
mortality rates as a function of host, tree size, and periodic average tree
defoliation (aka cumulative defoliation in MacLean et al. 2001) are also
provided. These tree impact: defoliation relationships have been modified
slightly from the original SBW DSS to 1) use tree size (DBH class) as a surrogate
for tree age (age is not a readily available attribute on all trees in most
inventories), and 2) to predict impact rates with a non-linear equation rather
than a lookup table for application coding/performance reasons.
This extension provides means to:
1) Submit and remember spruce
budworm annual observations or projection scenarios of either:
a.
Aerial
current-shoot defoliation, OR
b.
L2
populations
2) Automatically calculate host
defoliation levels from annual L2 levels, with consideration of:
a.
stand
hardwood content,
b.
natural
enemy buildup during the outbreak,
c.
foliage
protection, and
d.
host
susceptibility to defoliation
3) Translate each ‘adjusted’
host’s annual current-shoot defoliation to cumulative whole tree defoliation according
to the SBW DSS (MacLean et al. 2001, CJFR)
4) Predict, for annual or
periodic simulation cycles,
a.
tree
% radial (DBH) growth loss, or
b.
mortality
rate (probability of tree death).
5) And finally, modify OSM base
growth and mortality rates with these predictions during simulation for each
host species
Properties/Methods |
Data Type |
Constraint |
Default |
Description |
Outbreak Definition |
||||
SetPopulationPattern |
Text |
≥
0 |
None |
Pre-coded
outbreak patterns (MacLean et al. 2001): ·
Moderate (based on 1980s NB ‘Normal’
Outbreak) ·
Severe (based on 1970s Cape Breton,
NS) ·
None (no outbreak) Defoliation
is calculated as a function of L2 values, host susceptibility, foliage
protection properties. ·
See OutbreakAssptions.xlsx |
SetPopulation |
Float
Array |
≥
0 |
0 |
Sets
a user-defined annual population (L2/m2) sequence for an outbreak. Defoliation
is calculated as a function of L2 values, host susceptibility, foliage
protection properties. ·
See OutbreakAssptions.xlsx
|
SetDefoliation |
Float
Array |
0
– 100 |
0 |
Sets
a user-defined annual current-shoot defoliation (%) sequence for an outbreak.
Annual defoliation levels are influenced by foliage protection. Defoliation
is assumed to be actual observed levels or already modified by the user to
account for protection, if any. If
set, then any previously set population pattern is set to 0. |
OutbreakOffset |
Int32 |
-5
– 100 |
0 |
Number
of years to offset the start of the outbreak pattern; e.g., A
value of -5 causes the outbreak pattern to shift backward five years from the
start year of the simulation, and likewise end five years sooner. |
Foliage protection |
||||
ProtectFoliage |
Boolean |
TRUE|FALSE |
FALSE |
Turn
all foliage protection methods on (TRUE) or off (FALSE). |
ProtectEfficacy |
Float |
0
– 1 |
0.5
(50%) |
Ratio
of L2 that will die as a result of foliage protection. 1 = 100% effective and
100% L2 mortality. Single applications of Btk and
Mimic efficacies vary in the range of 40-60%. Double or triple applications may
assume higher protection levels. |
ProtectionThreshold |
Float |
≥
0 |
40
(40%) |
Percent
annual current-year shoot defoliation on balsam fir that would trigger a foliage
protection treatment. |
ProtectionDelay |
Float |
≥
0 |
0 (none) |
Number
of years to delay protection once eligible; default = 1 (skip first eligible
year); if = 0, protection will occur in first eligible year. |
ProtectionLock |
Float |
≥
0 |
0
(none) |
If
set >= 0, this value may override record weights used in some model
calibration routines; e.g., local height calibration.
See local height
calibration for guidance on setting weights. |
EndophyteEfficacy_WS (beta) |
Float |
0
– 1 |
0
(none) |
Height
to tree top kill in meters or feet. Must be <= HT. If < HT, then a new
leader is assumed to have established between HTK and HT. |
* Required
‡ DBH
and HT cannot both be null or zero.
If HT
< breast height (must be seedling), then DBH must = zero or blank (NaN);
else if HT
is >= breast height (must be tree), then DBH must be > zero.
If DBH
is > zero, then HT must be >= breast height or missing (blank or
zero); if HT is missing, HT will be predicted from DBH.
//You can now implement
the methods and properties of this class to control the SBW disturbance
Write(" SetPopulationPattern
Moderate") //NB during last outbreak
(Maclean et al. 2001)
//Write("SBW.SetPopulationPattern Severe") //Cape Breton during last outbreak
(Maclean et al. 2001)
//-------- Other SBW
COMMANDS ------
//Manually set annual
population sequence of L2/m2
//This one is for the
moderate outbreak scenario
Write(" SetPopulation
20.00 20.51 21.05 21.62 22.22 80.00 105.88 225.00 112.50 103.23 106.67 96.55
57.14 14.81 15.38 16.00")
//Number of years to offset the start of the outbreak; must be
between -5 and 100; default = 0,
//where outbreak starts
in year one of the simualtion
Write(" OutbreakOffset
0")
//Protection rules do not
consider L2 adjustments for HW, natural enemey build
up over time, or host susceptibility.
//Protect foliage;
default = false.
Write(" ProtectFoliage
FALSE")
/// Protection efficacy; default
= 0.5 (50%); must be between 0 and 1.
Write(" ProtectionEfficacy
0.5")
//Protection application
threshold; default = all years when forecast L2 or fir defoliation > 40%
//State threshold as
L2/m2 when using population L2 levels.
//State a percentage
threshold for balsam fir between 0-100 when using stand defolaition
levels
Write(" ProtectionThreshold
40")
/// Number of years to
delay protection once eligible; default = 1 (skip first eligible year);
/// if = 0, protection
will occur in first eligible year.
/// Must be >= 0.
Write(" ProtectionDelay
1")
/// Number of years to
skip between treatments; default = 0 (all years);
/// if = 1, protection
will occur every second year.
/// Must be >= 0.
Write(" ProtectionLock
0")
//To deactivate SBW
disturbance
//Write(" SetPopulationPattern
None")
SIMULATION.MODEL.SBW.SetPopulationPattern Moderate
SIMULATION.MODEL.SBW.SetPopulationPattern Severe
SIMULATION.MODEL.SBW.SetPopulationPattern Severe
SIMULATION.MODEL.SBW.OutbreakOffset -5
SIMULATION.MODEL.SBW.SetPopulationPattern None
SIMULATION.MODEL.SBW.SetPopulation 20.00 20.51
21.05 21.62 22.22 80.00 105.88 225.00 112.50 103.23 106.67 96.55 57.14 14.81
15.38 16.00
SBW
SetPopulationPattern Severe
ProtectFoliage TRUE
SBW
SetPopulationPattern Severe
ProtectFoliage TRUE
ProtectionEfficacy 0.6
ProtectionThreshold 50
ProtectionDelay 2
ProtectionLock 0
}
}
The
abstract HeightModel
available to developers through the OSM API provides methods to locally
calibrate height predictions. If Variant developers choose to inherit methods
from this pre-defined abstract height model, the following height calibration
interface will be exposed through the HeightModel property Calibration.
The
calibration method compares any available height observations imported from
tree records against predicted heights by species. Ordinary least squares are
used to solve for a modifier that would best align predictions to observations
by species.
Any
trees with missing heights on import will have heights predicted. If during
prediction a species modifier is available, it will be multiplied against the
predicted value before assigning the height to the tree. Use of the modifier is
constrained by the species DBH range (+/- 5 cm) of height observations used to
develop the modifier; e.g., if all white spruce height observations come from
DBH between 15 and 20 cm, then OSM will
only allow the height modifier to be applied to 10 – 25 cm DBH white spruce
trees. This DBH constraint is especially important when all height trees are
small, but one or more large trees with missing heights also exist in the plot.
We would not want to apply the modifier developed from very small trees to very
large trees.
The
calibration only remains in effect while estimating tree heights before
the simulation begins. Ingrowth will not be affected by this calibration.
1) Enabled
True | False
By default, local height calibration is on if available. Set
to FALSE if you want to turn off automatic local calibration.
2) MaxAbsoluteModifier Double [Default = 0.5]
Maximum
absolute multiplier permitted. In other words, modifiers that alter predictions
by more than +/-50% should be ignored.
3) MinObservations Int32 [Default = 5; Must be ≥1]
Minimum
observations per species required before a species modifier will be calculated.
Reducing below 5 is not recommended unless you are averaging results for 10 or
more stands. Note that with few observations, individual stand projections may
become worse. It is important that heights come from a random tree sub-sample
to avoid correction bias.
4) WeightMode Text Code [Default
= BA]
Controls tree record weighting approach used when
calculating height equation modifier value.
Modes:
·
BA Tree record weight = basal area per hectare of tree
record.
·
Stems Tree record weight = density per hectare of tree record.
Height observation sample ‘weights’ can be specified for
each tree record manually in the OSM_TreeList table
using the optional column ‘Weight’. User-defined weights can be assigned to
individual trees in OSM_TreeList in order to 1) properly calculate stand-level Lorey’s height and 2) properly weight self-calibration of
the height model for a range of plot designs (fixed area vs. angle gauge). If any trees in the stand
have a weight assigned > 0, then the user specified weights in the TreeList.Weight column will override the OSM generated
weights set from WeightMode. When the Weight column
is used, any trees with a weight set to null or zero will be ignored when
counting height samples and will also be ignored when setting the min-max DBH
range over which the height modifier can operate. Setting weight to null or
zero is recommended in cases when the tree top is broken or dead, unless the
majority of tops are known to be broken or dead.
When localizing height
predictions through OSM’s automatic self-calibration routine, reducing height
bias in large trees is usually more important than small trees, given
preference toward accurate volume estimates. Therefore, most users weight an
individual height observation by the basal-area per hectare that each tree
height observation represents (i.e., BAF = basal area factor). In the case of a
simple variable-radius plot, weight = 1 for all trees, as trees are already
selected with probability proportional to basal area. In the case of
fixed-radius plots, weight = 0.00007854*DBH2. If the sample is a
tally, then the number of trees tallied per DBH class should be multiplied by
the weight.
In the case of complex plot
designs, such as the New Brunswick Continuous Forest Inventory (NB-CLI), where
tree heights are collected from multiple sampling strategies nested together, calculation
of tree weights becomes slightly more involved. For example, the NB-CLI plot
design contains the following samples:
1) A fixed-area large tree plot (400 m2) used to record Species
and DBH ≥ 7cm.
2) A variable-radius (BAF = 2M) plot used to subsample heights ≥ 7 cm, including heights falling outside the boundary of the fixed 400 m2
large tree plot.
3) A fixed-radius small tree plot (50 m2) used to record Species
and DBH between 1 and < 7 cm, with height sampled on every tenth tree.
In the case of NB-CLI plots,
weight for individual height observations ≥ 7 cm DBH would always be 2 (2M BAF), while weight (W) for individual
height observations < 7 cm DBH would vary by DBH:
, where BAFi is the basal area per hectare expansion factor for height tree i in the small tree fixed-area plot with consideration that only 1 in
every 10 trees is measured for height.
For example, weights are
calculated for the following DBH values for the NB-CLI plots as follows:
DBH |
Weight (BAF) |
1.00 |
0.16 |
3.00 |
1.41 |
6.00 |
5.65 |
6.99 |
7.67 |
7.00 |
2.00 |
10.00 |
2.00 |
25.00 |
2.00 |
100.00 |
2.00 |
In the OSM Acadian model
(version 1.19.6.2) a Lorey’s height (LHT) estimate
for the entire plot is calculated in OSM to boost accuracy of the Variant’s
height predictions using only the observed height (H) trees as:
If weight is not explicitly
assigned in the OSM_TreeList, then OSM will assume
the plot is a fixed-radius plot and weight height samples using Stems (tree
factor) * DBH2 * 0.00007854. This default weighting will yield
incorrect LHT estimates for the CLI plots, and hence incorrect height estimates
for the Acadian Variant model. Knowing how your OSM variant predicts tree size,
growth, and survival is obviously important here. Consult variant documentation
for calibration details and calibration updates.
If you have a few height samples representative of the stand
or plot that fall outside the sample frame, they can be included with the
plot’s tree records in OSM_TreeList by setting the
records ‘Stems’ column to a very small number (e.g., 0.000001; must be > 0)
and manually specifying weights for both plot records and external height
sample records. In this way, the tree is considered in the plot by OSM, but has
such a small tree factor that it will not make a difference in volume summaries
or simulation results.
If you have a very large number of height tree samples from a local area that you want to use to calibrate the height model, then a better approach would be to calibrate local species-height modifiers using the OSM.Simulation.Model.Calibrator.
OSM takes into consideration the possibility that tree
records may have been agitated
when calculating number of user height observations in the tree list. If five
height observations are required for local calibration, and partitioning
increases observed height observations from say 3 to 9, local calibration will
still not occur as the actual number of tree height observations is less than
five. Also, since tree Weight property values are divided by partitions, weight
integrity is preserved across all tree records. Therefore there should be no
adverse effects of tree agitation on local height calibration.
HEIGHTMODEL
CALIBRATION
Enabled TRUE
MaxAbsoluteModifier 0.5
MinObservations 5