private void dataGridViewSgStats_CellEndEdit(object sender, DataGridViewCellEventArgs e) { long n, n2; double sgCV, sgCV2, sgErr; //string meth = currentStratumStats.Method; // check for sgError, SampleSize1, SampleSize2, CV1, CV2, TreesPerAcre, VolumePerAcre, TreesPerPlot, AverageHeight, Sampling Frequency, KZ calcStats cStats = new calcStats(); // find stage 11=tree,single 12=tree,2 stage 21=plot,single 22=plot,2 stage int stage = cStats.isTwoStage(meth); sColEdit = this.dataGridViewSgStats.Columns[e.ColumnIndex].DataPropertyName; if (sColEdit == "SgError") { //string sgErr = dataGridViewSgStats["SgError", e.RowIndex].Value.ToString(); sgErr = currentSgStats.SgError; sgCV = currentSgStats.CV1; // find errors stage 11=tree,single 12=tree,2 stage 21=plot,single 22=plot,2 stage if (stage == 11) { float tpa = currentSgStats.TreesPerAcre; long N = (long)Math.Ceiling(tpa* totAcres); if (sgErr == 0) currentSgStats.SampleSize1 = N; else currentSgStats.SampleSize1 = cStats.getSampleSize(sgErr, sgCV, N); } else if (stage == 21) { currentSgStats.SampleSize1 = cStats.getSampleSize(sgErr, sgCV); getN2(); } else if (stage == 12 || stage == 22) { sgCV2 = currentSgStats.CV2; cStats.getTwoStageSampleSize(sgCV, sgCV2, sgErr); currentSgStats.SampleSize1 = cStats.sampleSize1; currentSgStats.SampleSize2 = cStats.sampleSize2; //call routine to loop through setFirstStagePlots(currentSgStats.SampleSize1); } if (cStats.isFreq) getFreq(); if (cStats.isKz) getKZ(); } else if (sColEdit == "SampleSize1") { if (stage == 11 || stage == 12) { getSgErr(stage); if (cStats.isFreq) getFreq(); if (cStats.isKz) getKZ(); } else if (stage == 21 || stage == 22) { // check for plot cruise, if yes, all SampleSize1 is changed and errors recomputed setFirstStagePlots(currentSgStats.SampleSize1); } } else if (sColEdit == "SampleSize2" || sColEdit == "CV2") { // calculate sgError getSgErr(stage); // change freq, KZ if (cStats.isFreq) getFreq(); if (cStats.isKz) getKZ(); } else if (sColEdit == "CV1") { // calculate sgError getSgErr(stage); } else if (sColEdit == "TreesPerAcre") { if (cStats.isFreq) getFreq(); if (cStats.isKz) getKZ(); getEstTree(); } else if (sColEdit == "VolumePerAcre") { if (cStats.isKz) getKZ(); getEstVol(); } else if (sColEdit == "TreesPerPlot") { // calculate Frequency/KZ/BigBAF for PCM, P3P, FCM, F3P if (meth == "PNT" || meth == "FIX") getN2(); if (cStats.isFreq) getFreq(); if (cStats.isKz) getKZ(); } else if (sColEdit == "AverageHeight") { float tpp = currentSgStats.TreesPerPlot; float avgHt = currentSgStats.AverageHeight; n = currentSgStats.SampleSize1; n2 = currentSgStats.SampleSize2; if (n2 > 0) currentSgStats.KZ = Convert.ToInt32((tpp * n * avgHt) / n2); else currentSgStats.KZ = 1; } else if (sColEdit == "SamplingFrequency") { // calculate sample size, sgError long sFreq = currentSgStats.SamplingFrequency; if (sFreq < 1) return; float tpa = currentSgStats.TreesPerAcre; float totAcres = currentStratumStats.TotalAcres; float tpp = currentSgStats.TreesPerPlot; if (meth == "STR" || meth == "S3P") { float totalTrees = tpa * totAcres; if (sFreq > totalTrees) { currentSgStats.SampleSize1 = 1; currentSgStats.SamplingFrequency = Convert.ToInt32(totalTrees); } else if (sFreq == 0) currentSgStats.SampleSize1 = Convert.ToInt32(totalTrees); else currentSgStats.SampleSize1 = Convert.ToInt32((totalTrees / sFreq)); } else if (meth == "FCM" || meth == "PCM") { float totalTrees = Convert.ToInt32(tpp * currentSgStats.SampleSize1); if (sFreq > totalTrees) { currentSgStats.SampleSize2 = 1; currentSgStats.SamplingFrequency = Convert.ToInt32(totalTrees); } else if (sFreq == 0) currentSgStats.SampleSize2 = Convert.ToInt32(totalTrees); else currentSgStats.SampleSize2 = Convert.ToInt32(totalTrees / sFreq); } getSgErr(stage); } else if (sColEdit == "KZ") { // calculate sample size, sgError long kz = currentSgStats.KZ; if (kz < 1) return; float tpp = currentSgStats.TreesPerPlot; float vpa = currentSgStats.VolumePerAcre; float tpa = currentSgStats.TreesPerAcre; if (tpa <= 0) tpa = 1; n = currentSgStats.SampleSize1; if (meth == "3P") { float totalTrees = tpa * totAcres; float totalVol = vpa * totAcres; if (kz > totalVol) { currentSgStats.SampleSize1 = 1; currentSgStats.KZ = Convert.ToInt32(totalVol); } else if (kz == 0 || kz == 1) currentSgStats.SampleSize1 = Convert.ToInt32(totalTrees); else { currentSgStats.SampleSize1 = Convert.ToInt32((totalVol / kz)); } } else if (meth == "S3P") { float totalVol = vpa / tpa * n; if (kz > totalVol) { currentSgStats.SampleSize2 = 1; currentSgStats.KZ = Convert.ToInt32(totalVol); } else if (kz == 0 || kz == 1) currentSgStats.SampleSize2 = n; else { n2 = Convert.ToInt32(totalVol / kz); if (n2 > n) { currentSgStats.SampleSize2 = n; if(n > 0) currentSgStats.KZ = Convert.ToInt32(totalVol / n); else currentSgStats.KZ = 1; } else currentSgStats.SampleSize2 = n2; } } else if (meth == "P3P") { float avgHt = currentSgStats.AverageHeight; currentSgStats.SampleSize2 = Convert.ToInt32((tpp * n * avgHt) / kz); } else if (meth == "F3P") { float totalTrees = tpp * n; float totalVol = (vpa / tpa) * totalTrees; if (kz > totalVol) { currentSgStats.SampleSize2 = 1; currentSgStats.KZ = Convert.ToInt32(totalVol); } else if (kz <= 1) currentSgStats.SampleSize2 = Convert.ToInt32(totalTrees); else { n2 = Convert.ToInt32(totalVol / kz); if (n2 > totalTrees) { currentSgStats.SampleSize2 = Convert.ToInt32(totalTrees); if (totalTrees > 0) currentSgStats.KZ = Convert.ToInt32(totalVol / totalTrees); else currentSgStats.KZ = 1; } else currentSgStats.SampleSize2 = n2; } } else if (meth == "3PPNT") { n2 = Convert.ToInt32((tpp * n * (vpa / tpa)) / kz); if (n2 > n) { currentSgStats.SampleSize2 = n; if (tpa > 0) currentSgStats.KZ = Convert.ToInt32((tpp * n * (vpa / tpa)) / n); else currentSgStats.KZ = 1; } else currentSgStats.SampleSize2 = n2; } getSgErr(stage); } else if (sColEdit == "BigBAF ") { // calcuate sample size2, sgError } getStratumStats(); bindingSourceStratumStats.DataSource = cdStratumStats; bindingSourceSgStats.DataSource = cdSgStats; double saleError = getSaleError(); }
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 buttonOptimize_Click(object sender, EventArgs e) { Cursor.Current = Cursors.WaitCursor; calcStats cStat = new calcStats(); long strSamp, sgSamp, sgSamp1, sgSamp2; double combWtCV, strCV, strCalcError, sgCV, sgCalcError, totVolume; // get sale volume double tVolume = cdStratumStats.Sum(P => P.TotalVolume); if (tVolume == 0) { MessageBox.Show("No volume. Cannot calculate sample sizes.", "Warning"); return; } if (mySale.DefaultUOM == "01") totVolume = tVolume * 1000.0; else totVolume = tVolume * 100.0; // get weighted sale cv double saleCV = 0; long strSamp1 = 0; long strSamp2 = 0; double sumError = 0; double sumVolume = 0; double tStrVol; foreach (StratumStatsDO thisStrStats in cdStratumStats) { if (mySale.DefaultUOM == "01") tStrVol = thisStrStats.TotalVolume * 1000.0; else tStrVol = thisStrStats.TotalVolume * 100.0; int stage = cStat.isTwoStage(thisStrStats.Method); // single stage wted CV if (stage == 10 || stage == 11 || stage == 21) { saleCV += thisStrStats.WeightedCV1 * (tStrVol / totVolume); } // 2 stage wted CV else { combWtCV = (thisStrStats.WeightedCV1 + thisStrStats.WeightedCV2) / 2.0; saleCV += combWtCV * (tStrVol / totVolume); } } if (saleCV == 0) { MessageBox.Show("Cannot calculate weighted sale CV.", "Warning"); return; } //float saleCV = cdStratumStats.Sum(P => ((P.WeightedCV1 * P.TotalVolume)/totVolume)); double saleOptError = Convert.ToSingle(numericUpDown1.Value); // calculate sale level sample size long saleCalcSamples = cStat.getSampleSize(saleOptError, saleCV); // calculate sale error using t-value of 2 double saleCalcError = cStat.getSampleError(saleCV, saleCalcSamples, 2.0); // correct sample size using correct t-value double saleSamples = cStat.checkTValueError(saleCV, saleCalcSamples, saleCalcError); // prorate to strata foreach (StratumStatsDO thisStrStats in cdStratumStats) { int stage = cStat.isTwoStage(thisStrStats.Method); long strSample1 = 0; long strSample2 = 0; double wtErr = 0; float acres = thisStrStats.TotalAcres; float stTpa = thisStrStats.TreesPerAcre; long stN = (long)Math.Ceiling(stTpa * acres); // single stage wted CV if (mySale.DefaultUOM == "01") tStrVol = thisStrStats.TotalVolume * 1000.0; else tStrVol = thisStrStats.TotalVolume * 100.0; if (stage == 10 || stage == 21) { strCV = thisStrStats.WeightedCV1 * (tStrVol / totVolume); strSamp = Convert.ToInt32((strCV / saleCV) * saleSamples); strCalcError = cStat.getSampleError(thisStrStats.WeightedCV1, strSamp, 2.0); // correct for t-value strSamp1 = cStat.checkTValueError(thisStrStats.WeightedCV1, strSamp, strCalcError); } else if (stage == 11) { strCV = thisStrStats.WeightedCV1 * (tStrVol / totVolume); strSamp = Convert.ToInt32((strCV / saleCV) * saleSamples); strCalcError = cStat.getSampleError(thisStrStats.WeightedCV1, strSamp, 2.0); // correct for t-value strSamp1 = cStat.checkTValueError(thisStrStats.WeightedCV1, strSamp, strCalcError, stN); } // 2 stage wted CV else { combWtCV = (thisStrStats.WeightedCV1 + thisStrStats.WeightedCV2) / 2.0; strCV = combWtCV * (tStrVol / totVolume); strSamp = Convert.ToInt32((strCV / saleCV) * saleSamples); strCalcError = cStat.getSampleError(combWtCV, strSamp, 2.0); cStat.getTwoStageSampleSize(thisStrStats.WeightedCV1, thisStrStats.WeightedCV2, strCalcError); // correct for t-value strSamp2 = cStat.sampleSize2; strSamp1 = cStat.checkTValueError2Stage(thisStrStats.WeightedCV1, thisStrStats.WeightedCV2, cStat.sampleSize1, cStat.sampleSize2, strCalcError); } List<SampleGroupStatsDO> mySgStats = new List<SampleGroupStatsDO>(cdDAL.Read<SampleGroupStatsDO>("SampleGroupStats", "Where StratumStats_CN = ?", thisStrStats.StratumStats_CN)); long sgSamp2Stage1 = 0; long sgSamp2Stage2 = 0; foreach (SampleGroupStatsDO thisSgStats in mySgStats) { float sgTpa = thisSgStats.TreesPerAcre; long sgN = (long)Math.Ceiling(sgTpa * acres); // prorate to sample groups if (stage == 11) { sgCV = thisSgStats.CV1 * (thisSgStats.VolumePerAcre / thisStrStats.VolumePerAcre); sgSamp = Convert.ToInt32((sgCV / thisStrStats.WeightedCV1) * strSamp1); sgCalcError = cStat.getSampleError(thisSgStats.CV1, sgSamp, 2.0); // correct for t-value sgSamp1 = cStat.checkTValueError(thisSgStats.CV1, sgSamp, sgCalcError, sgN); if (sgSamp1 < 3) sgSamp1 = 3; sgSamp2 = 0; sgCalcError = cStat.getSampleError(thisSgStats.CV1, sgSamp1, 0, sgN); } else if (stage == 21) { sgCV = thisSgStats.CV1 * (thisSgStats.VolumePerAcre / thisStrStats.VolumePerAcre); sgSamp = Convert.ToInt32((sgCV / thisStrStats.WeightedCV1) * strSamp1); sgCalcError = cStat.getSampleError(thisSgStats.CV1, sgSamp, 2.0); // correct for t-value sgSamp1 = cStat.checkTValueError(thisSgStats.CV1, sgSamp, sgCalcError); if (sgSamp1 < 3) sgSamp1 = 3; sgSamp2 = (long)(thisSgStats.TreesPerPlot * sgSamp1); sgCalcError = cStat.getSampleError(thisSgStats.CV1, sgSamp1, 0); } else if (stage == 10) { sgSamp1 = Convert.ToInt32(thisSgStats.TreesPerAcre * thisStrStats.TotalAcres); sgSamp2 = 0; sgCalcError = 0; } else { sgCV = thisSgStats.CV2 * (thisSgStats.VolumePerAcre / thisStrStats.VolumePerAcre); sgSamp2 = Convert.ToInt32((sgCV / thisStrStats.WeightedCV2) * strSamp2); if (sgSamp2 < 3) sgSamp2 = 3; sgCV = thisSgStats.CV1 * (thisSgStats.VolumePerAcre / thisStrStats.VolumePerAcre); sgSamp1 = Convert.ToInt32((sgCV / thisStrStats.WeightedCV1) * strSamp1); if (sgSamp1 < 3) sgSamp1 = 3; if (stage == 12) { if (sgSamp2 > sgSamp1) sgSamp1 = sgSamp2; } else { if (sgSamp1 > sgSamp2Stage1) sgSamp2Stage1 = sgSamp1; } thisSgStats.SampleSize1 = sgSamp1; thisSgStats.SampleSize2 = sgSamp2; sgCalcError = cStat.getTwoStageError(thisSgStats.CV1, thisSgStats.CV2, sgSamp1, sgSamp2); } thisSgStats.SampleSize1 = sgSamp1; thisSgStats.SampleSize2 = sgSamp2; // update errors, frequency, KZ, BigBAF if (thisStrStats.Method == "STR") { thisSgStats.SamplingFrequency = Convert.ToInt32((thisSgStats.TreesPerAcre * thisStrStats.TotalAcres) / sgSamp1); strSample1 += sgSamp1; } else if (thisStrStats.Method == "S3P") { thisSgStats.SamplingFrequency = Convert.ToInt32((thisSgStats.TreesPerAcre * thisStrStats.TotalAcres) / sgSamp1); strSample1 += sgSamp1; strSample2 += sgSamp2; } else if (thisStrStats.Method == "100") { thisSgStats.SamplingFrequency = 1; strSample1 += sgSamp1; } else if (thisStrStats.Method == "3P") { thisSgStats.KZ = Convert.ToInt32((thisSgStats.VolumePerAcre * thisStrStats.TotalAcres) / sgSamp1); strSample1 += sgSamp1; } else if (thisStrStats.Method == "S3P") { if (thisSgStats.TreesPerAcre > 0) thisSgStats.KZ = Convert.ToInt32(((thisSgStats.VolumePerAcre / thisSgStats.TreesPerAcre * sgSamp1) / sgSamp2)); else thisSgStats.KZ = 1; strSample1 += sgSamp1; strSample2 += sgSamp2; } else if (thisStrStats.Method == "PNT" || thisStrStats.Method == "FIX") { strSample1 = sgSamp1; strSample2 = sgSamp2; } // calc sg error if(stage != 22) { if (stage == 11) { thisSgStats.SgError = Convert.ToSingle(Math.Round(cStat.getSampleError(thisSgStats.CV1,sgSamp1, 0, sgN), 2)); } else if (stage == 21) { thisSgStats.SgError = Convert.ToSingle(Math.Round(cStat.getSampleError(thisSgStats.CV1, sgSamp1, 0), 2)); } else if (stage == 12 || stage == 22) { thisSgStats.SgError = Convert.ToSingle(Math.Round(cStat.getTwoStageError(thisSgStats.CV1, thisSgStats.CV2, sgSamp1, sgSamp2), 2)); } // calc combined stratum error wtErr += (double)Math.Pow((thisSgStats.SgError * (thisSgStats.VolumePerAcre * thisStrStats.TotalAcres)), 2); } thisSgStats.Save(); } if (stage == 22) { //loop back through foreach (SampleGroupStatsDO thisSgStats in mySgStats) { // set each sample size to sgSamp2Stage strSample1 = sgSamp2Stage1; sgSamp2Stage2 = thisSgStats.SampleSize2; strSample2 += sgSamp2Stage2; // set frequencies if (thisStrStats.Method == "FCM") { thisSgStats.SamplingFrequency = Convert.ToInt32((thisSgStats.TreesPerPlot * sgSamp2Stage1) / sgSamp2Stage2); } else if (thisStrStats.Method == "PCM") { thisSgStats.SamplingFrequency = Convert.ToInt32((thisSgStats.TreesPerPlot * sgSamp2Stage1) / sgSamp2Stage2); thisSgStats.BigBAF = Convert.ToSingle(thisSgStats.SamplingFrequency * thisStrStats.BasalAreaFactor); } else if (thisStrStats.Method == "P3P") { thisSgStats.KZ = Convert.ToInt32((thisSgStats.TreesPerPlot * sgSamp2Stage1 * thisSgStats.AverageHeight) / sgSamp2Stage2); } else if (thisStrStats.Method == "F3P" || thisStrStats.Method == "3PPNT") { if (thisSgStats.TreesPerAcre > 0) thisSgStats.KZ = Convert.ToInt32((thisSgStats.TreesPerPlot * sgSamp2Stage1 * (thisSgStats.VolumePerAcre / thisSgStats.TreesPerAcre)) / sgSamp2Stage2); else thisSgStats.KZ = 1; } thisSgStats.SampleSize1 = sgSamp2Stage1; thisSgStats.SgError = Convert.ToSingle(Math.Round(cStat.getTwoStageError(thisSgStats.CV1, thisSgStats.CV2, sgSamp2Stage1, sgSamp2Stage2), 2)); // calc combined stratum error thisSgStats.Save(); wtErr += (double)Math.Pow((thisSgStats.SgError * (thisSgStats.VolumePerAcre * thisStrStats.TotalAcres)), 2); } } // Update Stratum if(mySale.DefaultUOM == "01") thisStrStats.StrError = (float)(Math.Sqrt(wtErr) / (tStrVol)); else thisStrStats.StrError = (float)(Math.Sqrt(wtErr) / (tStrVol)); thisStrStats.SampleSize1 = strSample1; thisStrStats.SampleSize2 = strSample2; if (stage > 20) { thisStrStats.PlotSpacing = (int)Math.Floor(Math.Sqrt((thisStrStats.TotalAcres * 43560) / strSample1)); } thisStrStats.Save(); sumError += (double)Math.Pow((tStrVol * thisStrStats.StrError),2); sumVolume += tStrVol; } // Update Sale Error and Cost getSaleError(); //double saleError = Math.Sqrt(sumError) / sumVolume; //textBoxError.Text = (Math.Round(saleError, 2)).ToString(); //textBoxVolume.Text = (Math.Round(tVolume, 0)).ToString(); Cursor.Current = this.Cursor; return; }
private void dataGridViewSgStats_CellEndEdit(object sender, DataGridViewCellEventArgs e) { long n, n2; double sgCV, sgCV2, sgErr; // check for sgError, SampleSize1, SampleSize2 calcStats cStats = new calcStats(); // find stage 11=tree,single 12=tree,2 stage 21=plot,single 22=plot,2 stage int stage = cStats.isTwoStage(meth); sColEdit = this.dataGridViewSgStats.Columns[e.ColumnIndex].DataPropertyName; if (sColEdit == "SgError") { //string sgErr = dataGridViewSgStats["SgError", e.RowIndex].Value.ToString(); sgErr = currentSgStats.SgError; sgCV = currentSgStats.CV1; // find errors stage 11=tree,single 12=tree,2 stage 21=plot,single 22=plot,2 stage if (stage == 11) { float tpa = currentSgStats.TreesPerAcre; long N = (long)Math.Ceiling(tpa * totAcres); if (sgErr == 0) currentSgStats.SampleSize1 = N; else currentSgStats.SampleSize1 = cStats.getSampleSize(sgErr, sgCV, N); } else if (stage == 21) { currentSgStats.SampleSize1 = cStats.getSampleSize(sgErr, sgCV); setFirstStagePlots(currentSgStats.SampleSize1); } else if (stage == 12 || stage == 22) { sgCV2 = currentSgStats.CV2; cStats.getTwoStageSampleSize(sgCV, sgCV2, sgErr); currentSgStats.SampleSize1 = cStats.sampleSize1; currentSgStats.SampleSize2 = cStats.sampleSize2; //call routine to loop through setFirstStagePlots(currentSgStats.SampleSize1); } } else if (sColEdit == "SampleSize1") { if (stage == 11 || stage == 12) { getSgErr(stage, currentSgStats); } else if (stage == 21 || stage == 22) { // check for plot cruise, if yes, all SampleSize1 is changed and errors recomputed setFirstStagePlots(currentSgStats.SampleSize1); } } else if (sColEdit == "SampleSize2") { // calculate sgError getSgErr(stage,currentSgStats); // change freq, KZ } getStratumStats(); bindingSourceStratumStats.DataSource = cdStratumStats; bindingSourceSgStats.DataSource = cdSgStats; double saleError = getSaleError(); }