public void calc100(StratumStatsDO curStrStats, SampleGroupStatsDO curSgStats, bool useDefault, float treePerAcre, float volumePerAcre) { double sgCV = 100; double sgError = 0; calcStats cStat = new calcStats(); if (!useDefault) { sgCV = cStat.getCV(treeVolumes, treeVolumes2, treeCount); curSgStats.CV_Def = 0; curSgStats.CV2_Def = 0; } else { curSgStats.CV_Def = 1; curSgStats.CV2_Def = 1; } curSgStats.TreesPerAcre = treePerAcre; curSgStats.VolumePerAcre = volumePerAcre; curSgStats.TreesPerPlot = 0; curSgStats.AverageHeight = 0; curSgStats.ReconPlots = plotCount; curSgStats.ReconTrees = treeCount; //copy calculated stuff curSgStats.CV1 = (float)sgCV; curSgStats.SampleSize1 = (long)(treePerAcre * totalAcres); curSgStats.TPA_Def = (long)(treePerAcre * totalAcres); curSgStats.VPA_Def = (long)(volumePerAcre * totalAcres); curSgStats.SgError = (float)sgError; curSgStats.Save(); }
public void calculateStats(StratumStatsDO curStrStats, SampleGroupStatsDO curSgStats, bool useDefault, float treePerAcre, float volumePerAcre, float treePerPlot, String method) { double sgCV = 100; double sgCV2 = 0; double sgError = 40; int n = 0; int n2 = 0; int KZ = 0; int Freq = 0; calcStats cStat = new calcStats(); if (!useDefault) { if (method == "FIX") { sgCV = cStat.getPntCV(plotVolume, plotVolume2, pntFac, plotCount); sgError = cStat.getSampleError(sgCV, plotCount, 0); n = plotCount; n2 = treePlot; } else if (method == "PNT") { sgCV = cStat.getPntCV(vBarSum, vBarPlot2, pntFac, plotCount); sgError = cStat.getSampleError(sgCV, plotCount, 0); n = plotCount; n2 = treePlot; } else if (method == "F3P") { sgCV = cStat.getPntCV(plotVolume, plotVolume2, pntFac, plotCount); sgCV2 = 30; sgError = cStat.getTwoStageError(sgCV, sgCV2, plotCount, treePlot); n = plotCount; n2 = treePlot; KZ = 1; } else if (method == "P3P" || method == "3PPNT") { sgCV = cStat.getPntCV(vBarSum, vBarPlot2, pntFac, plotCount); sgCV2 = 30; sgError = cStat.getTwoStageError(sgCV, sgCV2, plotCount, treePlot); n = plotCount; n2 = treePlot; if (method == "3PPNT") n2 = plotCount; KZ = 1; } else if (method == "FCM") { sgCV = cStat.getCV(treePlot, treePlot2, plotCount); sgCV2 = cStat.getCV(treeVolumes, treeVolumes2, treePlot); sgError = cStat.getTwoStageError(sgCV, sgCV2, plotCount, treePlot); n = plotCount; n2 = treePlot; Freq = 1; } else if (method == "PCM") { sgCV = cStat.getCV(treePlot, treePlot2, plotCount); sgCV2 = cStat.getCV(vBarSum, vBarSum2, treePlot); sgError = cStat.getTwoStageError(sgCV, sgCV2, plotCount, treePlot); n = plotCount; n2 = treePlot; Freq = 1; } else if (method == "STR") { sgCV = cStat.getCV(treeVolumes, treeVolumes2, treeCount); sgError = cStat.getSampleError(sgCV, treeCount, 0); n = treePlot; if (treePlot > 0) Freq = (int)Math.Floor((treePerAcre * totalAcres) / treeCount); else Freq = 0; } else if (method == "3P") { sgCV = 35; sgError = cStat.getSampleError(sgCV, treeCount, 0); n = treePlot; if (treeVolumes > 0) KZ = (int)Math.Floor((volumePerAcre * totalAcres) / treeVolumes); else KZ = 0; } else if (method == "S3P") { sgCV = cStat.getCV(treeVolumes, treeVolumes2, treeCount); sgCV2 = 35; sgError = cStat.getTwoStageError(sgCV, sgCV2, treeCount, treeCount); if (treeVolumes > 0) KZ = (int)Math.Floor((volumePerAcre * totalAcres) / treeVolumes); else KZ = 0; Freq = 1; } } else { if (method == "FCM" || method == "PCM") { sgCV2 = 100; cStat.getTwoStageSampleSize(sgCV, sgCV2, sgError); n = (int)cStat.sampleSize1; n2 = (int)cStat.sampleSize2; } else if (method == "F3P" || method == "P3P" || method == "S3P" || method == "3PPNT") { sgCV2 = 35; cStat.getTwoStageSampleSize(sgCV, sgCV2, sgError); n = (int)cStat.sampleSize1; n2 = (int)cStat.sampleSize2; } else { n = cStat.getSampleSize(sgError, sgCV); } } // Find the strataStats_CN long? strStatsCN = GetStratumStatsCN(curStrStats, method); // Create SampleGroupStats record with StratumStats CN and save stats SampleGroupStatsDO newSgStats = new SampleGroupStatsDO(cdDAL); //copy standard info newSgStats.StratumStats_CN = strStatsCN; newSgStats.Code = curSgStats.Code; newSgStats.Description = curSgStats.Description; newSgStats.SgSet = curSgStats.SgSet; newSgStats.CutLeave = curSgStats.CutLeave; newSgStats.UOM = curSgStats.UOM; newSgStats.PrimaryProduct = curSgStats.PrimaryProduct; newSgStats.SecondaryProduct = curSgStats.SecondaryProduct; newSgStats.DefaultLiveDead = curSgStats.DefaultLiveDead; newSgStats.MinDbh = curSgStats.MinDbh; newSgStats.MaxDbh = curSgStats.MaxDbh; // general stuff newSgStats.TreesPerAcre = treePerAcre; newSgStats.VolumePerAcre = volumePerAcre; newSgStats.TreesPerPlot = treePerPlot; newSgStats.TPA_Def = (long)(treePerAcre * totalAcres); newSgStats.VPA_Def = (long)(volumePerAcre * totalAcres); if (treeCount > 0) newSgStats.AverageHeight = (float)(treeHeights / treeCount); else newSgStats.AverageHeight = 0; newSgStats.KZ = KZ; newSgStats.BigBAF = 0; newSgStats.BigFIX = 0; newSgStats.SamplingFrequency = Freq; newSgStats.InsuranceFrequency = 0; //copy calculated stuff newSgStats.CV1 = (float)sgCV; newSgStats.CV2 = (float)sgCV2; newSgStats.SampleSize1 = n; newSgStats.SampleSize2 = n2; newSgStats.SgError = (float)sgError; if (useDefault) { newSgStats.CV_Def = 1; newSgStats.CV2_Def = 1; } else { newSgStats.CV_Def = 0; newSgStats.CV2_Def = 0; } newSgStats.ReconPlots = plotCount; newSgStats.ReconTrees = treeCount; //selectSgStats.Add(newSgStats); newSgStats.Save(); //long? sgcn = newSgStats.SampleGroupStats_CN; curSgStats.TreeDefaultValueStats.Populate(); foreach (TreeDefaultValueDO myTDV in curSgStats.TreeDefaultValueStats) { SampleGroupStatsTreeDefaultValueDO mySgTDV = new SampleGroupStatsTreeDefaultValueDO(cdDAL); mySgTDV.TreeDefaultValue_CN = myTDV.TreeDefaultValue_CN; mySgTDV.SampleGroupStats = newSgStats; mySgTDV.Save(); } }
//************************************************************************* private void getSampleGroupStats() { calcStats statClass = new calcStats(); stage = statClass.isTwoStage(Owner.currentStratum.Method); double comberr2 = 0; double totalVolume = 0; // for each sample group foreach (SampleGroupDO sg in Owner.histSampleGroup) { // create samplegroupstats Owner.currentSgStats = new SampleGroupStatsDO(Owner.cdDAL); //set foriegn key Owner.currentSgStats.StratumStats = Owner.currentStratumStats; Owner.currentSgStats.SgSet = 1; Owner.currentSgStats.Code = sg.Code; Owner.currentSgStats.CutLeave = sg.CutLeave; Owner.currentSgStats.UOM = sg.UOM; Owner.currentSgStats.PrimaryProduct = sg.PrimaryProduct; Owner.currentSgStats.SecondaryProduct = sg.SecondaryProduct; Owner.currentSgStats.DefaultLiveDead = sg.DefaultLiveDead; Owner.currentSgStats.Description = sg.Description; // get POP data //Owner.selectedPOP = new POPDO(Owner.hDAL); Owner.selectedPOP = Owner.hDAL.ReadSingleRow<POPDO>("POP", "WHERE Stratum = ? AND SampleGroup = ?", Owner.selectedStratum.Code, sg.Code); // calculate statistics (based on method) if (Owner.selectedPOP == null) { MessageBox.Show("Cruise Not Processed. Cannot Import Data.", "Warning"); return; } n1 = Convert.ToInt32(Owner.selectedPOP.StageOneSamples); n2 = Convert.ToInt32(Owner.selectedPOP.StageTwoSamples); measTrees = Convert.ToInt32(Owner.selectedPOP.MeasuredTrees); talliedTrees = Convert.ToInt32(Owner.selectedPOP.TalliedTrees); sumKpi = Convert.ToInt32(Owner.selectedPOP.SumKPI); st1x = Owner.selectedPOP.Stg1NetXPP; st1x2 = Owner.selectedPOP.Stg1NetXsqrdPP; st2x = Owner.selectedPOP.Stg2NetXPP; st2x2 = Owner.selectedPOP.Stg2NetXsqrdPP; // trees per plot // find CVs cv1 = statClass.getCV(st1x, st1x2, n1); if (stage == 12 || stage == 22) cv2 = statClass.getCV(st2x, st2x2, n2); else cv2 = 0; // find errors stage 11=tree,single 12=tree,2 stage 21=plot,single 22=plot,2 stage if (stage == 11 || stage == 21) sampErr = statClass.getSampleError(cv1, n1, 0); else if (stage == 12 || stage == 22) sampErr = statClass.getTwoStageError(cv1, cv2, n1, n2); else sampErr = 0; Owner.currentSgStats.CV1 = Convert.ToSingle(cv1); Owner.currentSgStats.CV2 = Convert.ToSingle(cv2); Owner.currentSgStats.SampleSize1 = n1; Owner.currentSgStats.SampleSize2 = n2; // calculate frequency Owner.currentSgStats.SgError = Convert.ToSingle(sampErr); // get LCD data Owner.selectedLCD = Owner.hDAL.Read<LCDDO>("LCD", "WHERE Stratum = ? AND SampleGroup = ?", Owner.selectedStratum.Code, sg.Code); sumExpFac = 0; sumNetVol = 0; //foreach (SampleGroupDO sg in Owner.histSampleGroup) foreach (LCDDO lcd in Owner.selectedLCD) { // sum volume double expFac = lcd.SumExpanFactor; sumExpFac += expFac; // sum trees double netVol = lcd.SumNCUFT; sumNetVol += netVol; } comberr2 += (sampErr * sumNetVol) * (sampErr * sumNetVol); totalVolume += sumNetVol; // find volume/acre and trees/acre if (stage < 20) { Owner.currentSgStats.TreesPerAcre = Convert.ToSingle(Math.Round((sumExpFac / totalAcres), 2)); Owner.currentSgStats.VolumePerAcre = Convert.ToSingle(Math.Round((sumNetVol / totalAcres), 2)); } else { Owner.currentSgStats.TreesPerAcre = Convert.ToSingle(Math.Round((sumExpFac), 2)); Owner.currentSgStats.VolumePerAcre = Convert.ToSingle(Math.Round((sumNetVol), 2)); if(stage == 21) Owner.currentSgStats.TreesPerPlot = Convert.ToSingle(Math.Round((Convert.ToSingle((float)measTrees / (float)n1)), 1)); else Owner.currentSgStats.TreesPerPlot = Convert.ToSingle(Math.Round((Convert.ToSingle((float)talliedTrees / (float) n1)), 1)); } // find frequency/KZ/BigBAF values if ((stage == 11 || stage == 12 || stage == 22) && measTrees > 0) { freq = Convert.ToInt32((talliedTrees / measTrees)); kz = Convert.ToInt32((sumKpi / measTrees)); if (Owner.currentStratum.Method == "S3P") { Owner.currentSgStats.SamplingFrequency = Convert.ToInt32((talliedTrees / n1)); Owner.currentSgStats.KZ = kz; } else { Owner.currentSgStats.SamplingFrequency = freq; Owner.currentSgStats.KZ = kz; } } // save samplegroupstats row Owner.currentSgStats.Save(); // loop through TDV information sg.TreeDefaultValues.Populate(); foreach (TreeDefaultValueDO tdv in sg.TreeDefaultValues) { // check with current TDV values Owner.currentTreeDefaults = Owner.cdDAL.ReadSingleRow<TreeDefaultValueDO>("TreeDefaultValue", "WHERE Species = ? AND PrimaryProduct = ? AND LiveDead = ?",tdv.Species,tdv.PrimaryProduct,tdv.LiveDead); if (Owner.currentTreeDefaults == null) { // if null, add tdv to list then create link TreeDefaultValueDO newTdv = new TreeDefaultValueDO(Owner.cdDAL); newTdv.SetValues(tdv); newTdv.Save(); Owner.currentSgStats.TreeDefaultValueStats.Add(newTdv); } else { // if exists, create link Owner.currentSgStats.TreeDefaultValueStats.Add(Owner.currentTreeDefaults); } } Owner.currentSgStats.Save(); Owner.currentSgStats.TreeDefaultValueStats.Save(); } // calculate stats for stratum // double stratumError = Math.Sqrt(comberr2) / totalVolume; // wted CVs //Owner.currentStratumStats.StrError = Convert.ToSingle(stratumError); //Owner.currentStratumStats.Save(); }