Sequential — Original PRCalc algorithm. Greedy largest-to-smallest allocation.
Map Columns to Fields
Select which column maps to each field. Tree ID must be unique per plot. Plot ID and scaling are optional.
Map Species
Map each unique species from your data to a PRCalc species code.
Your Data
Count
PRCalc Species
Height Estimation
Product Specifications
#
Species Group
Top DIB(cm)
Log Length(m)
Product Name
Value
Dest.
Color
Sequential — Original PRCalc algorithm. Greedy largest-to-smallest allocation.
Results
Plot
TreeID
Species
DBH
Ht
Vol(m³)
TPH
Product
Ratio%
ProdVol
ProdVol/ha
Logs
Product Breakdown
Size Class Distribution
cm
Stem Profile Viewer
m
Honer et al. (1983) — volume equations + merchantable volume ratiosKershaw, Richards & Larusic (2006) — product ratio allocation algorithm
PRCalc v.2026.1 — Help & Documentation
About PRCalc v.2026.1
PRCalc is a web-based product ratio calculator for northeastern North American tree species. It estimates the proportion of total stem volume allocated to defined timber products (sawlogs, studwood, pulpwood, etc.) using the merchantable volume ratio approach of Honer et al. (1983), as implemented by Kershaw, Richards & Larusic (2006).
This version extends the original PRCalc with Excel-based input/output, hierarchical data support (time, stand, plot, tree), per-hectare scaling for variable-radius and fixed-area plot designs, multi-level aggregation with standard errors, interactive SVG visualizations, and three optimization modes that go beyond the original greedy allocation.
How It Works
For each tree, PRCalc performs three calculations:
1. Total Stem Volume — Honer et al.’s (1983) metric equations estimate total stem volume from DBH and height:
V = (DBH² · a0 + a1 / (a2 + 1/HT)) × 10−4
where V is total volume (m³), DBH is diameter at breast height (cm at 1.3 m), and HT is total height (m). Species-specific coefficients a0, a1, a2 account for taper differences between the 1.3 m and 1.37 m (4.5 ft) measurement points.
2. Merchantable Volume Ratios — The proportion of total volume merchantable to a given top diameter inside bark (DIB) is computed from volume ratio polynomials:
VR(MR) = b0 + b1 · MR + b2 · MR²
where MR is the merchantable ratio (either a height ratio ht/HT or a squared-diameter ratio (dib/DBH)²). The algorithm iterates between diameter-based and height-based ratios to determine how many logs of each product fit in the merchantable bole, working from the largest product down.
Types of Merchantable Volume
PRCalc reports two distinct measures of merchantable volume. Understanding the difference is important for interpreting results:
Standard Merchantable Volume — The total stem volume between a 0.3 m (1 ft) stump and the point where the stem tapers to the standard utilization limit: 10 cm DIB in metric, 4″ DIB in imperial. This is computed directly from Honer’s merchantable volume ratio equations and represents the biological maximum — all wood on the stem that is physically large enough to be utilized, regardless of what products are defined. It is always reported in volume-only mode and appears as a reference value (“Std Merch”) in product mode.
Product Merchantable Volume — The sum of volumes allocated to defined product specifications. This is always ≤ standard merchantable volume because products typically have larger DIB thresholds (e.g., 20 cm for sawlog), fixed log lengths create inter-product gaps, and the allocation algorithm may leave sections of the bole unassigned between products. The difference between standard and product merchantable volume represents recoverable wood that your product specifications do not capture.
Utilization Efficiency — Shown in product mode as a summary card and in the DBH class ratio table. This is product merchantable volume ÷ standard merchantable volume × 100%. A value of 85% means your product specs capture 85% of the biologically available merchantable wood. Low values (below ~80%) suggest that adding products with smaller DIB thresholds or shorter log lengths could recover more volume. This metric varies by diameter class — the ratio table reveals where losses concentrate.
Unutilized Volume — PRCalc splits unutilized volume into two categories to help identify where losses occur:
Product Gaps (amber) — Merchantable wood above the standard utilization limit (10 cm / 4″ DIB) that is not captured by any product specification. This includes inter-product gaps on the stem (sections between log breaks where no product fits) and bole sections where the tree meets the utilization threshold but not any product’s minimum DIB. This volume is recoverable — adding products with smaller DIB thresholds or shorter log lengths can reduce it.
Sub-merchantable (grey) — Stem volume below the standard utilization limit: the stump (below 0.3 m / 1 ft) and the tip (above the point where the stem tapers below 10 cm / 4″ DIB). This is biological waste that cannot be recovered regardless of product specifications. For small trees near the utilization threshold, the sub-merchantable fraction can be substantial.
3. Product Allocation — Products are allocated to stem sections using one of four algorithms (see Allocation Modes below). Each product’s volume is computed as the difference in volume ratios between the bottom and top of its allocated section(s).
Allocation Modes
Four allocation algorithms are available, selectable from the header toolbar. The choice of mode affects the stem profile visualization, product allocation table, DBH class ratio table, and all downstream results.
Sequential — The original PRCalc algorithm. Products are sorted from largest to smallest minimum top diameter. For each product, the algorithm calculates the merchantable height to that diameter, then packs as many fixed-length logs as will fit. Remaining bole above the last log is not utilized by that product class. This is a greedy, bottom-up approach.
Remainder — Runs the sequential allocation first, then examines the gap between each product’s last log and its merchantable height. If a smaller product’s log fits in that gap, it is inserted. Also extends the allocation beyond the last sequential product if smaller products can fit. This “fills the cracks” without changing large-product log counts.
Sacrifice — Tests whether removing one log of a larger product frees enough bole length for additional smaller-product logs that increase total utilized volume (or total value, if $/m³ is provided). Compares both options and keeps whichever scores higher. Also applies remainder fills to each trial allocation.
Optimized (DP) — Discretizes the merchantable bole into height slices (10 cm for metric, 0.5 ft for imperial) and applies dynamic programming to find the product assignment that maximizes total utilized volume or total value. Adapted from the log bucking optimization literature (Pnevmaticos & Mann 1972; Faaland & Briggs 1984). Full log lengths are enforced. When product values are provided, the DP maximizes total dollar value; otherwise it maximizes total merchantable volume ratio. This mode may produce interleaved product placements (e.g., smaller products at the base and larger products higher up) when that arrangement is globally optimal.
Note: For well-packed stems where the sequential allocation is already efficient, all four modes may produce identical results. Differences emerge when there are gaps to fill (Remainder), when sacrificing a log creates higher value (Sacrifice), or when non-sequential placements are globally superior (Optimized).
Input Modes
PRCalc offers two ways to enter data:
Manual Entry — Add individual trees directly in the browser. Select a species, enter DBH and height, then click Calculate. Good for quick single-tree calculations or classroom demonstrations.
Excel Import — Drag and drop (or browse) a .xlsx, .xls, or .csv file. PRCalc auto-detects column headers and guides you through field mapping, species mapping, and product configuration. Supports datasets from NB DNRED PSPs, FIA plots, FVS exports, OSM TreeList projections, and bilingual French/English inventories.
Sample Datasets
Three built-in sample datasets illustrate the main use cases. Each loads realistic Acadian mixedwood data with regional species codes that exercise the auto-detection mapping.
Manual Entry — 15 mixed softwood/hardwood trees with measured DBH and height, plus species-grouped products with values and mill destinations. Loads directly into the manual entry tables. Exercises basic product ratio calculation and stem profile exploration.
Inventory Plot — 25 trees from a single BAF 2 prism sweep. Species use NB French abbreviations (EpN, EpR, SaB, BoJ, etc.) that auto-map to PRCalc codes. Approximately 60% of trees have measured heights; the rest are blank, triggering the height estimation step with H–D model fitting. Pre-selects variable-radius scaling with BAF=2. Exercises the full Excel import pipeline including height estimation.
Stand Forecast — 3 plots × ~15 trees × 5 time periods (2024–2064, 10-year steps) with species-specific growth, pre-computed TPH expansion factors, and OSM Acadian 4-letter species codes (BSPR, RSPR, BFIR, YBIR, etc.). Pre-selects expansion factor scaling. Exercises time series visualization, period scrubbing, diameter class migration, and individual stem tracking across growth periods.
Sample datasets are accessible from both the manual mode (buttons below the tables) and the Excel import mode (buttons below the drop zone). The Forest Inventory and Stand Forecast samples can also be downloaded as CSV files for use as templates.
Sample Product Specifications
The Load Sample: Product Specs button populates a region-relevant set of product specs covering all 14 PRCalc species: SPF group (Sawlog, Studwood, Pulp), Pine group (Sawlog, Pulp), Hardwood group (Sawlog, Pulp), Poplar Pulp, and Cedar. Each includes representative NB gate prices. The Load Sample: Specs + Destinations button loads the same specs with mill destinations (e.g., JDI Sussex, Arbec Miramichi), enabling destination-grouped charts and summaries. These are provided as a starting point — users should verify specifications against their local mill requirements and current pricing.
Load / Save — Product specifications can be saved to a JSON file (Save) and loaded back later (Load). This allows reuse of mill contracts and pricing across sessions and datasets. When loading into a table that already has products, a dialog offers three options: Replace All (clear and load), Merge (add new products, keep existing), or Update (add new and overwrite matching names). If the saved file uses different units (metric/imperial), DIB and log length values are automatically converted.
Data Hierarchy
PRCalc supports a hierarchical data structure with up to four grouping levels:
Time / Period → Stand → Plot → Tree → Product
Only Tree ID, Species, DBH, and Height are required. All grouping fields are optional, and the tool adapts its outputs based on what is available:
Tree only — Per-tree volumes and ratios (no per-hectare expansion).
+ Plot ID + scaling — Per-hectare volumes, plot-level summaries with BA, TPH, QMD, and product breakdown.
+ Stand ID — Stand-level means ± 95% CI from plot estimates.
+ Time / Period — Time series charts, period slider, and temporal tracking of individual stems.
Species
PRCalc supports 14 species or species groups, matching the codes used by Honer et al. (1983) for central and eastern Canada:
White Pine (WP), Red Pine (RP), Jack Pine (JP), Lodgepole Pine (LP), Black Spruce (BS), Red Spruce (RS), White Spruce (WS), Balsam Fir (BF), Other Conifer (OC), Poplar (PO), White Birch (WB), Yellow Birch (YB), Other Hardwood (OH), Average Species (AS).
Auto-detection — The species mapping step automatically suggests PRCalc codes using a 7-step cascading strategy: exact match → Acadian/Maritime codes → FIA/USDA codes → common name fragments → French common names → genus-level matching → fallback to Average Species (AS). Every suggestion can be overridden manually.
Input Requirements
Field auto-detection — When a file is imported, PRCalc scans column headers and suggests field mappings based on common naming conventions (English and French).
Required fields: Tree ID, Species, DBH, Total Height.
Optional grouping fields: Plot ID, Stand ID, Time / Period.
Sampling design: Variable radius (BAF), Fixed area (plot size), Expansion factor (TPH/TPA column), or No scaling.
Height Estimation
When missing heights are detected, PRCalc inserts an additional step between field mapping and species mapping. It fits regression models at the finest resolution supported by sample sizes:
Species × Plot (if ≥5 trees with measured heights)
Species × Stand (if ≥8 trees)
Species-level (if ≥10 trees)
Regional (Rijal et al. 2012 published coefficients)
Model forms: Curtis (1967), Näslund, Weibull, and Acadian Regional. Diagnostics include R², RMSE, and CV%, colour-coded by quality.
Product Specifications
Products are defined by mill specifications. Each product requires: a minimum top DIB, a standard log length (0 for whole-tree), and a product name. Optional fields include species group (to restrict a product to specific species), a unit value ($/m³ or other unit with automatic conversion), a destination (mill or buyer name), and a colour for visualizations.
When product values are provided, the Sacrifice and Optimized modes maximize total dollar value instead of total volume. The value conversion system supports $/m³, $/MBF, $/GMT, $/cord, and $/tonne using species-specific green wood densities.
Destination — An optional text field identifying where each product is delivered (e.g., “JDI Sussex”, “Arbec Miramichi”). When any product has a destination, a “Volume by Destination” summary chart appears on the Charts tab showing stacked bars by product for each mill. Products without a destination are grouped as “Unassigned.” The destination field autocompletes from values already entered in the session. Destination is also included in the Excel export when present.
A warning banner appears if two or more products share the same species and top DIB — the higher-priority product (larger DIB or earlier in the list) will consume available logs first.
Value Unit Conversions
PRCalc converts all price units to $/m³ (metric) or $/MBF (imperial) using species-specific green wood densities. The following reference tables show the density values and conversion formulas used.
Green Wood Density by Species (adapted from Miles & Smith 2009, Jessome 1977, FPL 2021):
Standard equivalences: 1 cord = 128 ft³ stacked ≈ 2.55 m³ solid. 1 MBF ≈ 83.3 ft³ (International ¼″ log rule). 1 GMT = 1,000 kg. 1 short ton = 907.2 kg.
Output Tabs
All output tabs are available in both Excel import and manual entry modes.
Tree-Level — One row per tree per product. Columns include all mapped grouping fields, tree attributes, product ratios, volumes, and log counts. The Ht Src column indicates how each tree’s height was obtained (measured, estimated at various model levels, or manual).
Plot-Level — Per-plot summary with plot attributes (BA, TPH, QMD, gross total and merchantable volume) and product breakdown (volume/ha, logs/ha, % of merchantable). Includes Unutilized row. Available when Plot ID is mapped with scaling.
Stand-Level — Mean ± 95% CI computed from plot-level estimates using Student’s t-distribution. Same structure as Plot-Level but with confidence intervals. Available when both Plot ID and Stand ID are mapped with scaling.
Summary dashboard cards (tree count, plot count, mean BA, TPH, product volumes, unutilized volume). Cards update when scrubbing the period slider.
Product breakdown stacked bar chart with metric selector (ratio / volume / value). When tree count exceeds 60, automatically groups by species and shows means.
Size class distribution histogram with five view modes (DBH and height frequency by species or product, DBH BA-weighted by species). Configurable bin width, intelligent gap collapsing, and a Lock range toggle (available when time data is present) that fixes the size class axis to the full extent across all periods so the distribution visibly migrates as you scrub. Lock range and Skip blanks are mutually exclusive.
Plot-level volume comparison chart with mean reference line. Includes a sort toggle (input order vs descending by value) and a Lock range toggle (when time data is present) that fixes the y-axis across all periods to make growth/decline between periods visually apparent. Multiple metrics available: product volumes, species volumes, TPH, basal area, and value.
Value breakdown bars (when product values are provided).
Destination summary chart (when any product has a destination) — horizontal stacked bars by mill/destination showing volume or value with product breakdown. Products without a destination appear as “Unassigned.”
Time Series — Stacked area chart with eight metric options:
Product Merch. Volume — merchantable volume by product class over time.
Species Total Volume — gross total stem volume by species over time.
Species Merch. Volume — merchantable volume by species over time.
Species Basal Area — basal area (m²/ha) by species over time.
Species Density (TPH) — stems per hectare by species over time.
Lorey’s Mean Height — basal-area-weighted mean height over time. Single line (not stacked). Lorey’s height weights larger trees proportionally to their BA, making it a more stable measure of canopy height than arithmetic mean height and the standard input for site index assessment.
Top Height (H100) — mean height of the 100 largest-diameter stems per hectare over time. Single line (not stacked). H100 is thinning-independent and is the standard site productivity indicator in Canadian forestry. When in Age mode, the chart includes a site index (SI) overlay showing the interpolated H100 at a selectable reference age (25, 50, or 100 years) for comparison with regional yield tables.
Species Composition (% BA) — relative basal area share by species over time. Stacked to 100%, showing how species dominance shifts across periods. Useful for visualizing successional dynamics in multi-cohort stands.
An optional Unutilized checkbox (available for Product Merch. Volume and Species Merch. Volume modes) adds a band showing the gap between gross total volume and merchantable volume. All species modes respect the “Original species codes” toggle. An amber dashed indicator line marks the currently selected period. Below the chart, summary cards show per-category values for the selected period, with a Total card followed by Unutilized (when enabled). The unified Period slider controls the selected period across all tabs.
Stem Profile — Interactive SVG taper diagram for any selected tree. Features include:
Full symmetric stem outline derived from Honer VR equations, with coloured product zones and individual log boundary lines (dashed lines across the stem width at each log break). Product labels with leader lines identify each contiguous product run and its log count.
Stem form annotations identifying the three classical geometric zones: neiloid (butt swell), paraboloid (main bole), and cone (upper crown), with transition points detected numerically.
Reference lines at stump height, breast height (BH), and a dashed centre pith line.
Tree stepper (< >) buttons, tree picker dropdown, and position counter.
Stem filter — Filter button opens a floating panel with field selector (Species, Plot, Stand, Product) and checklist. When “Original species codes” is on, the filter shows original codes; when off, it shows mapped PRCalc species with display names (e.g., “Balsam Fir (BF)”). Toggling the checkbox while the filter is open updates the list immediately.
Scale modes — Fit (tree fills frame), Relative (with time data: scales to the selected tree’s maximum across all periods, showing its growth trajectory; without time data: scales to the tallest tree in the stand for cross-tree comparison), Fixed (user-specified reference height with amber indicator for trees that exceed it).
Time period tracking — When scrubbing through periods, the stem profile maintains the same tree identity (Plot:TreeID) even as DBH and height change with growth. When a tree has multiple growth path partitions (common in OSM output), the partition closest in DBH to the previous selection is preferred. If the tree is absent in a period (mortality or not yet established), a message is shown instead of switching to a different tree.
Exploratory height adjustment — +/− buttons temporarily shift the tree’s height by 1 m per click, with DBH recalculated using allometric scaling guided by the Rijal et al. H–D curve shape and capped at species-specific biological maxima (e.g. 45 cm for Black Spruce, 60 cm for Yellow Birch). The product zones, allocation table, and ratio table all update in real time. An amber indicator shows the offset — click it to reset.
Product Allocation table — Shows product names (ordered top-down to match the visual stem), height ranges, log counts, and ratios with volumes. When a product appears in multiple non-contiguous zones (possible in Optimized mode), the table consolidates them into one row with a “(N zones)” annotation. Unutilized volume and total tree volume are shown below.
Product Ratio by DBH Class table — Sweeps across DBH classes (configurable step size) using the Rijal et al. H–D model to predict heights, then runs the current allocation mode at each size. The selected tree’s actual row is highlighted with a ◀ marker and uses measured (not predicted) dimensions. Columns show DBH, height, total volume, each product’s ratio %, unutilized %, and total merchantable %. A CSV export button downloads the ratio table with product percentages per DBH class. The table responds to allocation mode changes, height adjustments, and period scrubbing.
Excel Export — Downloads a multi-sheet workbook with Tree-Level (one row per input tree, products pivoted to columns), Plot-Level (one row per plot), Stand-Level (means ± SE per time step × stand), and Species Map sheets. Column headers include unit suffixes for direct use in downstream analyses. When product destinations are defined, each product’s columns include a _Dest field identifying the assigned mill or buyer.
Interface Features
Light / Dark Mode — The sun/moon button in the header toggles between dark mode (default) and light mode. All SVG charts, tables, and stem profiles re-render with theme-appropriate colours.
Original Species Codes — The checkbox below the tab bar switches all displays between PRCalc’s mapped 2-letter codes and the original species values from your input data. This affects the tree table, charts, time series, stem profile picker, stem filter, and all labels. Useful when your data uses codes from a different system (e.g., OSM Acadian, FVS-NE, USDA PLANTS).
SVG Charts — All charts render as resolution-independent SVGs rather than canvas bitmaps. Screenshots and exports will be sharp at any zoom level or display density.
Suggested Citation
Kershaw, J. A., Ogilvie, J., & Claude (Anthropic). (2026). PRCalc: A product ratio calculator for northeastern tree species (Version 2026.1) [Web application]. University of New Brunswick, Faculty of Forestry and Environmental Management. http://prcalc.ext.unb.ca
References
Curtis, R.O. 1967. Height-diameter and height-diameter-age equations for second-growth Douglas-fir. Forest Science 13(4): 365–375. doi:10.1093/forestscience/13.4.365
Faaland, B. & Briggs, D. 1984. Log bucking and lumber manufacturing using dynamic programming. Management Science 30(2): 245–257. doi:10.1287/mnsc.30.2.245
Grondin, F. 1998. Improvements of the dynamic programming algorithm for tree bucking. Wood and Fiber Science 30(1): 91–104.
Honer, T.G. 1967. Standard volume tables and merchantable conversion factors for the commercial tree species of central and eastern Canada. Can. Dept. Forestry Rural Devel., For. Mgmt. Res. and Serv. Inst. Info. Rep. FMR-X-5.
Honer, T.G., Ker, M.F. & Alemdag, I.S. 1983. Metric timber tables for the commercial tree species of central and eastern Canada. Can. For. Serv., Maritimes For. Res. Centre. Info. Rep. M-X-140. 139 p.
Husch, B., Beers, T.W. & Kershaw, J.A., Jr. 2003. Forest Mensuration. 4th Edition. Wiley. 443 p.
Kershaw, J.A., Jr., Richards, E. & Larusic, J. 2006. A product ratio calculator for northeastern tree species. Northern Journal of Applied Forestry 23(1): 45–48. PDF
Kershaw, J.A., Jr., Ducey, M.J., Beers, T.W. & Husch, B. 2016. Forest Mensuration. 5th Edition. Wiley. 630 p.
Labelle, E.R. et al. 2025. An open-source tree bucking optimizer based on dynamic programming. Forests 16(5): 780. doi:10.3390/f16050780
Pnevmaticos, S.M. & Mann, S.H. 1972. Dynamic programming in tree bucking. Forest Products Journal 22(8): 26–30.
Rijal, B., Weiskittel, A.R. & Kershaw, J.A. 2012. Development of regional height to diameter equations for 15 tree species in the North American Acadian Region. Forestry 85(3): 379–390. doi:10.1093/forestry/cps036
MacPhee, C., Kershaw, J.A., Weiskittel, A.R., Golding, J. & Lavigne, M.B. 2018. Comparison of approaches for estimating individual tree height–diameter relationships in the Acadian forest region. Forestry 91(1): 132–146. doi:10.1093/forestry/cpx039
Miles, P.D. & Smith, W.B. 2009. Specific gravity and other properties of wood and bark for 156 tree species found in North America. USDA Forest Service Research Note FPL-RN-38.
Jessome, A.P. 1977. Strength and related properties of woods grown in Canada. Forestry Technical Report 21. Eastern Forest Products Laboratory, Ottawa. 37 p.
FPL. 2021. Wood handbook — wood as an engineering material. General Technical Report FPL-GTR-282. USDA Forest Products Laboratory, Madison, WI.
Product ratios are derived from regional volume ratio equations — users should validate locally.
Honer volume equations were developed from natural stands in central and eastern Canada. They may not apply to plantations, western species, or other regions.
The stem profile visualization uses an approximation — it inverts the VR equations to estimate diameter at height, which may produce slight artifacts near the tree tip. A fallback is applied when the VR value exceeds the height ratio curve peak (very large trees with small product DIBs).
Stand-level standard errors assume simple random sampling of plots within stands.
Height estimates from built-in models should be treated as approximations. Review R² and RMSE diagnostics before accepting.
The DBH class ratio table uses the Rijal H–D model to predict heights at sizes away from the measured tree. Predictions are most reliable near the calibration point and become more uncertain at extremes.
This tool is provided for educational and planning purposes. Product ratios should be verified against local stem analysis data before use in operational planning.
Acknowledgments
The original PRCalc was developed by Dr. John A. Kershaw, Jr. (University of New Brunswick) with Dr. Evelyn Richards and John Larusic. PRCalc v.2026 was created by Jae Ogilvie (University of New Brunswick) with assistance from Claude (Anthropic). This version extends the original with Excel I/O, hierarchical data support (time, stand, plot), multi-metric time series views, interactive SVG visualizations, stem profile exploration tools, DBH class ratio tables, and optimization modes adapted from the log bucking dynamic programming literature.
Re-shows dismissed hint cards on all steps
Version & Changelog
PRCalc v.2026.1
Rotation analysis release — April 2026
Rotation analysis — Stand-specific time-series analysis panel showing PAI (Periodic Annual Increment, the average annual growth between measurement periods, plotted at interval midpoints) and MAI (Mean Annual Increment, Y(t)/t, plotted at each sample age). The age at which MAI culminates is labeled CMAI — this is the biological rotation age. Mathematically, CMAI occurs where the PAI curve crosses MAI from above. Supports five stock metrics: merchantable volume, total volume, basal area, stand value ($), and individual product volume.
Per-stand age handling — Rotation analysis is per-stand by definition (MAI = stock ÷ age). When a stand is selected, the tool proactively estimates the stand's age at the first period using a BA-weighted DBH method with ±30% band; users can override with a known age in the Time axis bar. The Time axis bar exposes a per-stand age input when a stand is selected and the time axis is Year or Unknown (Age-mode periods are self-describing). When the CMAI marker is based on an estimated age, hovering on it surfaces the uncertainty caveat. If a stand has no reliable age (sparse tree data, no override), rotation analysis falls back to a PAI-only view over time — MAI, CMAI, and LEV are withheld rather than fabricated.
Faustmann financial rotation — On the Value metric, a land expectation value (LEV) curve is plotted on a secondary axis with a user-adjustable discount rate (1–10%, adjustable via slider or −/+ step buttons in 0.5% increments). The LEV curve is drawn as a smooth line using monotone cubic interpolation of the stock values at 1-year resolution, so the curve peaks exactly where the Faustmann formula says it peaks — not at a sample vertex. The financial rotation age (LEV maximum) is marked with a dashed vertical line. Teaches the divergence between biological and economic optimality: higher discount rates push the financial rotation earlier.
Age-axis inference — Time-series periods are automatically classified as stand age, calendar year, or arbitrary index. Users can override with a segmented control and provide a base year or age offset. A BA-weighted DBH-based estimator suggests a plausible stand age with a ±30% confidence band. All rotation metrics respect the chosen axis interpretation.
Site index overlay — Dominant height (H100) chart now supports a reference-age selector (25/50/100 yr). The interpolated top height at reference age is displayed as a site index annotation for quick comparison with regional yield tables.
Self-thinning reference — Trees-per-hectare chart overlays Reineke's −3/2 self-thinning curve (anchored at the first period's density) when stand density is declining, providing visual context for mortality relative to the maximum density line.
Stand Forecast sample data — New principled sample dataset replacing the prior placeholder. Two stands, three plots each, ten periods spanning age 20–110: SWMX (even-aged softwood plantation, 20 trees with graded dominance) and RSHW (uneven-aged red spruce / hardwood natural, three-cohort structure). Growth trajectories derived from Chapman–Richards DBH-over-age curves and Reineke self-thinning, calibrated against a Python port of the tool’s own Honer (1983) volume equations so that biological rotation ages (MAI culmination) land in defensible ranges for NB SPF (MerchVol ~60 yr, BA ~60 yr) before deployment. Starting age selected so all trees fall within Honer’s calibration range (DBH ≥ ~9cm).
Chart fixes — Volume-by-destination chart now sorts by the same value used for bar width (previously insertion order). Size class histograms with "skip blank bins" enabled now honor the user’s requested bin width (previously capped at 50 bins regardless of gaps). "By plot" chart gains a sort toggle between total-value descending and input order. Site-index label on H100 chart uses adaptive left/right placement based on chart-edge proximity and curve-polygon collision checks, and subscript formatting (SI50) for compactness. Reference lines and annotation text on rotation-analysis and H100 charts now render with a background halo for legibility against filled polygons. Boundary-case MAI notes (when the peak is at the first or last period) appear as a subdued italic note without a rotation marker, rather than claiming a specific rotation age where the observation is ambiguous.
Minor refinements — Charts tab content now scrolls internally rather than extending the page. Improved tooltip consistency across time-series overlays.
PRCalc v.2026.0
First release — April 2026
Core engine — Honer et al. (1983) volume equations and merchantable volume ratios for 14 northeastern species. Four allocation modes: Sequential (original Kershaw algorithm), Remainder, Sacrifice, and Optimized (dynamic programming).
Data pipeline — Excel/CSV import with auto-detected field mapping, species auto-matching (PRCalc codes, NB French codes, OSM Acadian codes, common names), hierarchical data support (plot, stand, time/period), and four scaling modes (variable radius, fixed area, expansion factor, no scaling).
Height estimation — Five data-driven model forms (Curtis 1967, Näslund, Wykoff 1982, Weibull, Power) fitted at species, group, and global levels with automatic best-RMSE selection. Acadian regional defaults from Rijal et al. (2012) always available as fallback. Species resolution toggle for original vs PRCalc-mapped codes.
Visualizations — Product breakdown (donut/bar), size class distribution (5 modes), product volume by plot, stand value by product, volume by destination, interactive stem profile viewer with taper curves and exploratory height adjustment, stacked area time series (5 metrics). All charts exportable as standalone SVG with full light/dark mode support.
Outputs — Tree-level, plot-level, and stand-level tabular results with confidence intervals. Excel export. Interactive tooltips on all chart elements. Period scrubbing across all time-aware views. Product specification load/save (JSON) for reuse across sessions.
Manual entry mode — Direct tree and product input for quick single-tree or small-sample analysis without file import.
Contact
Jae Ogilvie
Faculty of Forestry & Environmental Management
University of New Brunswick, Fredericton, NB, Canada jae.ogilvie@unb.ca
PRCalc v.2026.1 — Faculty of Forestry & Environmental Management, University of New Brunswick