R/KozakTaper.R

Defines functions KozakTaper

Documented in KozakTaper

#' Kozak Taper Equation
#'
#' This function allows you to calculate the diameter at any point on tree
#' for common tree species found in the northeastern and acadian forests.
#' All measurements must be entered as metric. Function requires
#' you to gives the specified height on tree for which you want diameter calculated.
#'
#' @param Bark specify if you want measurement inside or outside bark: 'ob' = outside, 'ib' = inside
#' @param SPP Species: use FVS species codes: example 'RO' - Red Oak, 'WS' = White Spruce
#' @param DHT Diameter at Height in cm where diameter measurment is desired
#' @param DBH Diameter Breast Height in cm
#' @param HT Tree Height in meters
#' @param Planted specify if the tree is planted, specify as TRUE or FALSE. Defaults to FALSE.
#'
#'@references
#'Kozak, A. (2004). My last words on taper equations. The Forestry Chronicle,
#'80(4), 507–515. https://doi.org/10.5558/tfc80507-4
#'
#'MacFarlane, D. W., & Weiskittel, A. R. (2016). A new method for capturing stem taper
#'variation for trees of diverse morphological types. Canadian Journal of Forest Research,
#'46(6), 804–815. https://doi.org/10.1139/cjfr-2016-0018
#'
#' @examples
#' KozakTaper('ob', 'RO', 12, 40, 20, FALSE)
#' KozakTaper('ib', 'RS', 8, 28, 16, TRUE)
#'
#' @export

KozakTaper=function(Bark,SPP,DHT,DBH,HT,Planted = FALSE){
  if(Bark=='ob' & SPP=='AB'){
    a0_tap=1.0693567631
    a1_tap=0.9975021951
    a2_tap=-0.01282775
    b1_tap=0.3921013594
    b2_tap=-1.054622304
    b3_tap=0.7758393514
    b4_tap=4.1034897617
    b5_tap=0.1185960455
    b6_tap=-1.080697381
    b7_tap=0
  }
  else if(Bark=='ob' & SPP=='BC'){
    a0_tap=0.9802172591
    a1_tap=0.9900811022
    a2_tap=0.0215023934
    b1_tap=0.6092829761
    b2_tap=-0.54627086
    b3_tap=0.5221909952
    b4_tap=1.6561496035
    b5_tap=0.040879378
    b6_tap=-0.302807393
    b7_tap=0
  }
  else if(Bark=='ib' & SPP=='BF'){
    a0_tap=0.88075316
    a1_tap=1.01488665
    a2_tap=0.01958804
    b1_tap=0.41951756
    b2_tap=-0.67232564
    b3_tap=0.54329725
    b4_tap=1.48181152
    b5_tap=0.06470371
    b6_tap=-0.34684837
    b7_tap=0
  }
  else if(Bark=='ob' & SPP=='BF'){
    a0_tap=0.7909
    a1_tap=0.9745
    a2_tap=0.1198
    b1_tap=0.2688
    b2_tap=-0.55134
    b3_tap=0.5612
    b4_tap=0.9007
    b5_tap=0.1257
    b6_tap=-0.6708
    b7_tap=0
    #parms w/ FIA data
    a0_tap=0.87045800178728
    a1_tap=0.998148536293802
    a2_tap=0.0584816955042306
    b1_tap=0.302539012401385
    b2_tap=-0.605787065734974
    b3_tap=0.588861845770261
    b4_tap=0.8826608914125
    b5_tap=0.103280103524893
    b6_tap=-0.57432603217401
    b7_tap=0
  }
  else if(Bark=='ob' & SPP=='BP' | SPP=='BA'){
    a0_tap=1.0036248405
    a1_tap=0.744246238
    a2_tap=0.2876417207
    b1_tap=0.6634046516
    b2_tap=-2.004812235
    b3_tap=0.7507983401
    b4_tap=3.9248261105
    b5_tap=0.0276793767
    b6_tap=-0.130928845
    b7_tap=0
  }
  else if(Bark=='ib' & SPP=='BS'){
    a0_tap=0.80472902
    a1_tap=1.00804553
    a2_tap=0.05601099
    b1_tap=0.35533529
    b2_tap=-0.41320046
    b3_tap=0.41527304
    b4_tap=1.11652424
    b5_tap=0.0990167
    b6_tap=-0.40992056
    b7_tap=0.11394943
  }
  else if(Bark=='ob' & SPP=='BS'){
    a0_tap=0.858
    a1_tap=0.9611
    a2_tap=0.105
    b1_tap=0.2604
    b2_tap=-0.3409
    b3_tap=0.4797
    b4_tap=0.5008
    b5_tap=0.1097
    b6_tap=-0.4952
    b7_tap=0.0969
    #parms w/ FIA data
    a0_tap=0.896382313496267
    a1_tap=0.979157280469517
    a2_tap=0.07070415827334
    b1_tap=0.288205614793081
    b2_tap=-0.303580327062765
    b3_tap=0.435229599780184
    b4_tap=0.287092390832665
    b5_tap=0.0861036484421037
    b6_tap=-0.407747649433411
    b7_tap=0.371113950891855
  }
  else if(Bark=='ob' & SPP=='BT'){
    a0_tap=1.0200889056
    a1_tap=1.0054957243
    a2_tap=-0.011030907
    b1_tap=0.5104511725
    b2_tap=-1.326415929
    b3_tap=0.5568665797
    b4_tap=7.2108347873
    b5_tap=0.071149738
    b6_tap=-0.571844802
    b7_tap=0
  }
  else if(Bark=='ib' & SPP=='EH'){
    a0_tap=0.960235102
    a1_tap=1.00821143
    a2_tap=-0.025167937
    b1_tap=0.825260258
    b2_tap=1.962520834
    b3_tap=0.415234319
    b4_tap=-5.061571874
    b5_tap=0.009839526
    b6_tap=-0.095533007
    b7_tap=0
  }
  else if(Bark=='ob' & SPP=='EH'){
    a0_tap=0.8681
    a1_tap=0.916
    a2_tap=0.1558
    b1_tap=0.4067
    b2_tap=-0.6163
    b3_tap=0.4177
    b4_tap=3.6257
    b5_tap=0.1686
    b6_tap=-0.8829
    b7_tap=0
    #parms w/ FIA data
    a0_tap=0.846409603849866
    a1_tap=0.984317716125905
    a2_tap=0.0807523481457474
    b1_tap=0.445438700558324
    b2_tap=-0.671467572085628
    b3_tap=0.504954501484816
    b4_tap=2.48940465528
    b5_tap=0.124152912027385
    b6_tap=-0.722954836646604
    b7_tap=0
  }
  else if(Bark=='ob' & SPP=='GA'){
    a0_tap=1.0852385488
    a1_tap=1.1861877395
    a2_tap=-0.226193745
    b1_tap=0.5198788065
    b2_tap=1.4303205202
    b3_tap=-0.349453901
    b4_tap=3.1952591271
    b5_tap=0.1391694941
    b6_tap=-0.296716822
    b7_tap=0
  }
  else if(Bark=='ob' & SPP=='GB'){
    a0_tap=1.0263926931
    a1_tap=0.8835623138
    a2_tap=0.1307522645
    b1_tap=0.6113533288
    b2_tap=-0.114188076
    b3_tap=0.2883217076
    b4_tap=2.657433495
    b5_tap=0.0590046356
    b6_tap=-0.175127606
    b7_tap=0
  }
  else if(Bark=='ib' & SPP=='JP'){
    a0_tap=0.931552701
    a1_tap=1.008192708
    a2_tap=-0.004177373
    b1_tap=0.431297353
    b2_tap=-0.863672736
    b3_tap=0.511698303
    b4_tap=2.232484834
    b5_tap=0.059865263
    b6_tap=-0.331897255
    b7_tap=0.039630786
  }
  else if(Bark=='ob' & SPP=='JP'){
    a0_tap=1.0214
    a1_tap=0.9817
    a2_tap=0.0147
    b1_tap=0.3753
    b2_tap=-0.7954
    b3_tap=0.499
    b4_tap=2.0407
    b5_tap=0.0768
    b6_tap=-0.3335
    b7_tap=0.0408
    #parms w/ FIA data
    a0_tap=0.842483072142665
    a1_tap=0.99279768524928
    a2_tap=0.0739425827838225
    b1_tap=0.37221919371203
    b2_tap=-0.723225866494174
    b3_tap=0.453434142074953
    b4_tap=1.33754275322832
    b5_tap=0.073372838152118
    b6_tap=-0.3105255908992
    b7_tap=0.396398949039286
  }
  else if(Bark=='ib' & SPP=='NS'){
    a0_tap=0.9308817
    a1_tap=0.97360573
    a2_tap=0.03522864
    b1_tap=0.65078104
    b2_tap=-0.30355787
    b3_tap=0.37832812
    b4_tap=1.18815216
    b5_tap=0.03111631
    b6_tap=-0.03172809
    b7_tap=0
  }
  else if(Bark=='ob' & SPP=='NS'){
    a0_tap=1.0513
    a1_tap=0.9487
    a2_tap=0.0374
    b1_tap=0.611
    b2_tap=-0.3001
    b3_tap=0.3731
    b4_tap=1.1255
    b5_tap=0.0318
    b6_tap=-0.0297
    b7_tap=0
    #parms w/ FIA data
    a0_tap=0.950952303433305
    a1_tap=0.99162401049595
    a2_tap=0.0357175689757522
    b1_tap=0.507484658718266
    b2_tap=-0.44046929698967
    b3_tap=0.405856745795155
    b4_tap=1.2849978191539
    b5_tap=0.0143964536822362
    b6_tap=-0.0785889411281423
    b7_tap=0.169725200257675
  }
  else if(Bark=='ib' & SPP=='PB'){
    a0_tap=0.7161229027
    a1_tap=0.9811224473
    a2_tap=0.1382539493
    b1_tap=0.4782152412
    b2_tap=0.3091537448
    b3_tap=0.3266307618
    b4_tap=-0.302056097
    b5_tap=0.0858585241
    b6_tap=-0.278661048
    b7_tap=0
  }
  else if(Bark=='ob' & SPP=='PB'){
    a0_tap=0.7161229027
    a1_tap=0.9811224473
    a2_tap=0.1382539493
    b1_tap=0.4782152412
    b2_tap=0.3091537448
    b3_tap=0.3266307618
    b4_tap=-0.302056097
    b5_tap=0.0858585241
    b6_tap=-0.278661048
    b7_tap=0
  }
  else if(Bark=='ob' & SPP=='QA'){
    a0_tap=0.5586975794
    a1_tap=0.9047841359
    a2_tap=0.3075094544
    b1_tap=0.7131251715
    b2_tap=-0.588345303
    b3_tap=0.4292045831
    b4_tap=2.8516108932
    b5_tap=0.0381609362
    b6_tap=-0.13426388
    b7_tap=0
  }
  else if(Bark=='ib' & SPP=='RM'){
    a0_tap=0.745826994
    a1_tap=1.0092251371
    a2_tap=0.0890931039
    b1_tap=0.5861620841
    b2_tap=-0.865905462
    b3_tap=0.6539243149
    b4_tap=3.0603989176
    b5_tap=0.0827619274
    b6_tap=-0.64859681
    b7_tap=0
  }
  else if(Bark=='ob' & SPP=='RM'){
    a0_tap=0.745826994
    a1_tap=1.0092251371
    a2_tap=0.0890931039
    b1_tap=0.5861620841
    b2_tap=-0.865905462
    b3_tap=0.6539243149
    b4_tap=3.0603989176
    b5_tap=0.0827619274
    b6_tap=-0.64859681
    b7_tap=0
  }
  else if(Bark=='ob' & SPP=='RO'){
    a0_tap=1.1751352376
    a1_tap=1.02249704
    a2_tap=-0.069888591
    b1_tap=0.4505675893
    b2_tap=-0.902884964
    b3_tap=0.5812519636
    b4_tap=3.6267479819
    b5_tap=0.1656137742
    b6_tap=-1.114281314
    b7_tap=0
  }
  else if(Bark=='ib' & SPP=='RP'){
    a0_tap=0.9717883
    a1_tap=1.00113806
    a2_tap=-0.01597933
    b1_tap=0.51143292
    b2_tap=-0.9739954
    b3_tap=0.25844201
    b4_tap=4.75315518
    b5_tap=0.05846224
    b6_tap=-0.12372176
    b7_tap=0
  }
  else if(Bark=='ob' & SPP=='RP'){
    a0_tap=1.0962
    a1_tap=1.006
    a2_tap=-0.0352
    b1_tap=0.5
    b2_tap=-0.9959
    b3_tap=0.3007
    b4_tap=4.6358
    b5_tap=0.0473
    b6_tap=-0.05
    b7_tap=0
    #parms w/ FIA data
    a0_tap=1.06470820904747
    a1_tap=0.994899036827748
    a2_tap=-0.0123828485987216
    b1_tap=0.458957297467137
    b2_tap=-1.04575412640177
    b3_tap=0.361452014890273
    b4_tap=4.00047777431758
    b5_tap=0.0543368451581955
    b6_tap=-0.128025447306836
    b7_tap=0
  }
  else if(Bark=='ib' & SPP=='RS'){
    a0_tap=0.89797987
    a1_tap=1.00579742
    a2_tap=0.01667313
    b1_tap=0.49500865
    b2_tap=-0.63375155
    b3_tap=0.3836274
    b4_tap=1.41380994
    b5_tap=0.08866994
    b6_tap=-0.29753964
    b7_tap=0.15192029
  }
  else if(Bark=='ob' & SPP=='RS'){
    a0_tap=0.8758
    a1_tap=0.992
    a2_tap=0.0633
    b1_tap=0.4128
    b2_tap=-0.6877
    b3_tap=0.4413
    b4_tap=1.1818
    b5_tap=0.1131
    b6_tap=-0.4356
    b7_tap=0.1042
    #parms w/ FIA data
    a0_tap=0.886886241411388
    a1_tap=0.995431239145283
    a2_tap=0.0541365481351767
    b1_tap=0.411160410244944
    b2_tap=-0.658022227353248
    b3_tap=0.418213595349517
    b4_tap=1.09113756405639
    b5_tap=0.102379812299201
    b6_tap=-0.40367256147942
    b7_tap=0.104842994095004
  }
  #Sweet birch
  else if(Bark=='ob' & SPP=='SB'){
    a0_tap=0.8471057131
    a1_tap=0.9875376729
    a2_tap=0.0769690406
    b1_tap=0.9322599144
    b2_tap=-0.954580316
    b3_tap=0.48553875
    b4_tap=3.0294545606
    b5_tap=0.0767610836
    b6_tap=-0.238398236
    b7_tap=0
  }
  else if(Bark=='ob' & SPP=='SM'){
    a0_tap=1.0517056747
    a1_tap=0.96129896
    a2_tap=0.0386037512
    b1_tap=0.8556437779
    b2_tap=-0.249723079
    b3_tap=0.4149367053
    b4_tap=1.2548340569
    b5_tap=0.0412998707
    b6_tap=-0.113500099
    b7_tap=0
  }
  else if(Bark=='ob' & SPP=='TL'  | SPP=='TA'){
    a0_tap=0.7387
    a1_tap=0.9716
    a2_tap=0.1431
    b1_tap=0.271
    b2_tap=-0.4958
    b3_tap=0.6508
    b4_tap=-0.3887
    b5_tap=0.1324
    b6_tap=-0.7035
    b7_tap=0
    #parms w/ FIA data
    a0_tap=0.762977580507808
    a1_tap=0.979320525735404
    a2_tap=0.122788251183516
    b1_tap=0.245935863173793
    b2_tap=-0.564901857800367
    b3_tap=0.666790795105499
    b4_tap=-0.0728778930339496
    b5_tap=0.143651487515151
    b6_tap=-0.791188036888163
    b7_tap=0
  }
  else if(Bark=='ob' & SPP=='WA'){
    a0_tap=0.8550736297
    a1_tap=0.9768941226
    a2_tap=0.0770356694
    b1_tap=0.7819090026
    b2_tap=-0.791762733
    b3_tap=0.476698925
    b4_tap=3.5003928402
    b5_tap=0.0859040469
    b6_tap=-0.487974342
    b7_tap=0
  }
  else if(Bark=='ib' & SPP=='WC'  | SPP=='NC'){
    a0_tap=0.86118766
    a1_tap=0.98152118
    a2_tap=0.0568203
    b1_tap=0.40717678
    b2_tap=-0.05482572
    b3_tap=0.47809459
    b4_tap=-1.32512447
    b5_tap=0.1538487
    b6_tap=-0.53687808
    b7_tap=0
  }
  else if(Bark=='ob' & SPP=='WC' | SPP=='NC'){
    a0_tap=0.902
    a1_tap=0.9676
    a2_tap=0.085
    b1_tap=0.3204
    b2_tap=-0.4336
    b3_tap=0.5212
    b4_tap=0.0157
    b5_tap=0.137
    b6_tap=-0.4585
    b7_tap=0
    #parms w/ FIA data
    a0_tap=0.876976728762079
    a1_tap=0.972187200775237
    a2_tap=0.0905032843727524
    b1_tap=0.319643790061659
    b2_tap=-0.495778605215774
    b3_tap=0.546605647382787
    b4_tap=-0.0540118375921429
    b5_tap=0.131666046721139
    b6_tap=-0.454765563250266
    b7_tap=0
  }
  else if(Bark=='ib' & SPP=='WP'){
    a0_tap=1.04881379
    a1_tap=1.00779696
    a2_tap=-0.04595353
    b1_tap=0.38085445
    b2_tap=-0.85956463
    b3_tap=0.34380669
    b4_tap=4.60836993
    b5_tap=0.111855
    b6_tap=-0.5523203
    b7_tap=0
  }
  else if(Bark=='ob' & SPP=='WP'){
    a0_tap=1.0202
    a1_tap=0.985
    a2_tap=0.0149
    b1_tap=0.3697
    b2_tap=-0.7512
    b3_tap=0.3536
    b4_tap=3.8496
    b5_tap=0.1074
    b6_tap=-0.5131
    b7_tap=0
    #parms w/ FIA data
    a0_tap=0.961977278802905
    a1_tap=0.985977453808376
    a2_tap=0.0333180987707418
    b1_tap=0.383416881614619
    b2_tap=-0.753661988626837
    b3_tap=0.392529765236197
    b4_tap=3.4224381734935
    b5_tap=0.100601541094101
    b6_tap=-0.485617012177084
    b7_tap=0
  }
  else if(Bark=='ib' & SPP=='WS'){
    a0_tap=1.0202
    a1_tap=0.985
    a2_tap=0.0149
    b1_tap=0.3697
    b2_tap=-0.7512
    b3_tap=0.3536
    b4_tap=3.8496
    b5_tap=0.1074
    b6_tap=-0.5131
    b7_tap=0
  }
  else if(Bark=='ib' & SPP=='WS'){
    a0_tap=0.75826241
    a1_tap=0.98481863
    a2_tap=0.09956165
    b1_tap=0.36505143
    b2_tap=-0.51501314
    b3_tap=0.55913869
    b4_tap=0.75846281
    b5_tap=0.07011851
    b6_tap=-0.44928376
    b7_tap=0.07830011
  }
  else if(Bark=='ob' & SPP=='WS'){
    a0_tap=0.7317
    a1_tap=0.9577
    a2_tap=0.1593
    b1_tap=0.2638
    b2_tap=-0.4246
    b3_tap=0.5505
    b4_tap=-0.1269
    b5_tap=0.1145
    b6_tap=-0.6249
    b7_tap=0.088
    #parms w/ FIA data
    a0_tap=0.725059647049259
    a1_tap=0.999930744977476
    a2_tap=0.11890841412387
    b1_tap=0.286031149725587
    b2_tap=-0.417052954651359
    b3_tap=0.581226449067082
    b4_tap=-0.562751307358532
    b5_tap=0.101380520664108
    b6_tap=-0.563774194060357
    b7_tap=0.096121529684134
  }
  else if(Bark=='ob' & SPP=='YB'){
    a0_tap=1.1263776728
    a1_tap=0.9485083275
    a2_tap=0.0371321602
    b1_tap=0.7662525552
    b2_tap=-0.028147685
    b3_tap=0.2334044323
    b4_tap=4.8569609081
    b5_tap=0.0753180483
    b6_tap=-0.205052535
    b7_tap=0
  }
  else if(Bark=='ob' & SPP=='OH'){
    a0_tap=0.947211744
    a1_tap=0.971353083
    a2_tap=0.063182322
    b1_tap=0.633614831
    b2_tap=-0.549156049
    b3_tap=0.439010965
    b4_tap=3.187595496
    b5_tap=0.079154063
    b6_tap=-0.41277508
    b7_tap=0
  }
  else if(Bark=='ob' & SPP=='OS'){
    a0_tap=0.88047918
    a1_tap=0.988526494
    a2_tap=0.0660791
    b1_tap=0.365548416
    b2_tap=-0.607245626
    b3_tap=0.486832282
    b4_tap=1.282373726
    b5_tap=0.094120201
    b6_tap=-0.447380533
    b7_tap=0
  }
  else if(Bark=='ib' & SPP=='OS'){
    a0_tap=0.896475601
    a1_tap=1.001886257
    a2_tap=0.020707494
    b1_tap=0.391516469
    b2_tap=-0.395638544
    b3_tap=-0.011787171
    b4_tap=1.335110611
    b5_tap=0.076311559
    b6_tap=-0.286988273
    b7_tap=0
  }
  else{
    a0_tap=0.896475601
    a1_tap=1.001886257
    a2_tap=0.020707494
    b1_tap=0.391516469
    b2_tap=-0.395638544
    b3_tap=-0.011787171
    b4_tap=1.335110611
    b5_tap=0.076311559
    b6_tap=-0.286988273
    b7_tap=0
  }
  p = 1.3/HT
  z = DHT/HT
  Xi = (1 - z^(1/3))/(1 - p^(1/3))
  Qi = 1 - z^(1/3)
  y = (a0_tap * (DBH^a1_tap) * (HT^a2_tap)) * Xi^(b1_tap * z^4 + b2_tap * (exp(-DBH/HT)) +
                                                    b3_tap * Xi^0.1 + b4_tap * (1/DBH) + b5_tap * HT^Qi + b6_tap * Xi + b7_tap*Planted)
  Diam=ifelse(Bark=='ob' & DHT==1.37,DBH,y)
  return(Diam=round(Diam,4))
}
ryanmismith/inventoryfunctions documentation built on Aug. 5, 2022, 2:22 a.m.