00001
00002
00003
00004 #if !defined(NCIBase_H)
00005 #define NCIBase_H
00006
00007 class clTree;
00008 class clTreePopulation;
00009 class clPlot;
00010
00112 class clNCIBase {
00113
00114 protected:
00115
00120 clNCIBase();
00121
00125 ~clNCIBase();
00126
00134 void DoNCISetup(clTreePopulation *p_oPop, int iNumBehaviorSpecies);
00135
00139 float **mp_fLambda;
00140
00145 float *mp_fAlpha;
00146
00151 float *mp_fBeta;
00152
00157 float *mp_fCrowdingSlope;
00158
00163 float *mp_fCrowdingSteepness;
00164
00167 float *mp_fMinimumNeighborDBH;
00168
00173 float *mp_fXb;
00174
00178 float *mp_fMaxPotentialValue;
00179
00184 float *mp_fX0;
00185
00190 float *mp_fShadingCoefficient;
00191
00195 float *mp_fShadingExponent;
00196
00203 float *mp_fMedDamageEta;
00204
00211 float *mp_fFullDamageEta;
00212
00217 float *mp_fGamma;
00218
00223 float *mp_fMedDamageStormEff;
00224
00229 float *mp_fFullDamageStormEff;
00230
00236 float *mp_fMaxCrowdingRadius;
00237
00240 float m_fDbhDivisor;
00241
00247 short int **mp_iDamageCodes;
00248
00253 short int **mp_iLightCodes;
00254
00257 short int *mp_iIndexes;
00258
00260 float m_fMinSaplingHeight;
00261
00264 short int m_iNumTotalSpecies;
00265
00268 short int m_iNumBehSpecies;
00269
00271 bool m_bIncludeSnags;
00272
00274 typedef float (clNCIBase::*Ptr2ShadingEffect)(clTree *);
00275
00279 Ptr2ShadingEffect* mp_ShadingEffect;
00280
00282 typedef float (clNCIBase::*Ptr2CalculateNCI)(clTree *, clTreePopulation *, clPlot *);
00283
00286 Ptr2CalculateNCI* mp_NCI;
00287
00289 typedef float (clNCIBase::*Ptr2CrowdingEffect)(const float&, const float&, const int&);
00290
00294 Ptr2CrowdingEffect* mp_CrowdingEffect;
00295
00296
00299 float (clNCIBase::*DamageEffect)(clTree *);
00300
00347 void SetFunctionPointers();
00348
00365 float CalculateShadingEffect(clTree *p_oTree);
00366
00373 float CalculateNoShadingEffect(clTree *p_oTree) {return 1.0;};
00374
00391 float CalculateShadingEffectNoExp(clTree *p_oTree);
00392
00415 float CalculateCrowdingEffect(const float &fDbh, const float &fNCI, const int &iSpecies);
00416
00438 float CalculateCrowdingEffectNoExp(const float &fDbh, const float &fNCI, const int &iSpecies);
00439
00458 float CalculateCrowdingEffectNoDbh(const float &fDbh, const float &fNCI, const int &iSpecies);
00459
00478 float CalculateCrowdingEffectSimple(const float &fDbh, const float &fNCI, const int &iSpecies);
00479
00492 float CalculateNCI(clTree *p_oTree, clTreePopulation *p_oPop, clPlot *p_oPlot);
00493
00505 float CalculateNCINoEta(clTree *p_oTree, clTreePopulation *p_oPop, clPlot *p_oPlot);
00506
00520 float CalculateNCINoDivisor(clTree *p_oTree, clTreePopulation *p_oPop, clPlot *p_oPlot);
00521
00533 float CalculateNCINoEtaNoDivisor(clTree *p_oTree, clTreePopulation *p_oPop, clPlot *p_oPlot);
00534
00541 float CalculateNoDamageEffect(clTree *p_oTree) {return 1.0;};
00542
00552 float CalculateDamageEffect(clTree *p_oTree);
00553 };
00554
00555 #endif // NCIBase_H