private void buttonMiddle_Click(object sender, EventArgs e) { try { Dictionary <MeasureData, double> _measures = new Dictionary <MeasureData, double>(); Mask _mask = comboBoxMasks.SelectedItem as Mask; foreach (object o in listBoxMeasures.Items) { if (multiGraph.Plotters.ContainsKey(o as MeasureData)) { _measures.Add(o as MeasureData, (multiGraph.Plotters[o as MeasureData] as MovableGraph).Correcture); } } if (_measures.Count < 3) { MessageBox.Show("Недостаточно измерений:\r\nнеобходимо не менее трёх измерения для расчёта среднего."); return; } double _maxlen = double.MaxValue; foreach (MeasureData data in _measures.Keys) { _maxlen = Math.Min(_maxlen, data.FullMeasureLength); } if (_maxlen < 1d) { MessageBox.Show("Самое короткое измерение имеет продолжительность менее секунды."); return; } string s = FormStringRequest.GetString("Введите название измерения"); MeasureData result = null; if (s != null) { result = AlgsList.reliableMiddle(_measures, s, _mask, _maxlen); FormViewMeasure.getFormForMeasure(result); } } catch (Exception ex) { MessageBox.Show("Ошибка:\r\n" + ex.Message); } }
private void buttonStart_Click(object sender, EventArgs e) { try { Dictionary <MeasureData, double> _measures = new Dictionary <MeasureData, double>(); string err = "Должно быть выбрано ровно 2 измерения.\r\nПервое должно быть 'усреднённым' и содержать статистическую информацию [Σ+]."; foreach (object o in listBoxMeasures.Items) { if (multiGraph.Plotters.ContainsKey(o)) { _measures.Add(o as MeasureData, (multiGraph.Plotters[o] as MovableGraph).Correcture); } } Mask _mask = comboBoxMasks.SelectedItem as Mask; if (_measures.Count < 2) { MessageBox.Show(err); return; } double _maxlen = double.MaxValue; foreach (MeasureData data in _measures.Keys) { _maxlen = Math.Min(_maxlen, data.FullMeasureLength); } if (_maxlen < 1d) { return; } if (_measures.Count != 2) { MessageBox.Show(err); return; } else if ((listBoxMeasures.Items[0] as MeasureData).IsMeasured) { MessageBox.Show("Первое измерение не является 'усреднённым' [Σ]."); return; } else if ((listBoxMeasures.Items[0] as MeasureData).DispData == null) { MessageBox.Show("Первое измерение не содержит статистической информации [+]."); return; } else { MeasureData bm = listBoxMeasures.Items[0] as MeasureData; MeasureData cm = listBoxMeasures.Items[1] as MeasureData; double corr = (multiGraph.Plotters[cm] as MovableGraph).Correcture - (multiGraph.Plotters[bm] as MovableGraph).Correcture; #region зачистка foreach (Sensor s in cm.AllData.Keys) { if (!bm.Data.ContainsKey(s)) { cm.Used[s] = false; } } foreach (Sensor s in bm.AllData.Keys) { if (!cm.Data.ContainsKey(s)) { bm.Used[s] = false; } } #endregion Зачистка Dictionary <string, object> objs = AlgsList.Correspondence(bm, cm, corr); if ((bool)objs["ok"]) { Dictionary <Sensor, List <double> > insigma = objs["sigma"] as Dictionary <Sensor, List <double> >; Dictionary <Sensor, List <double> > in3sigma = objs["3sigma"] as Dictionary <Sensor, List <double> >; Dictionary <Sensor, List <double> > outof3sigma = objs["unstable"] as Dictionary <Sensor, List <double> >; int count, in1, in3, out3; count = in1 = in3 = out3 = 0; foreach (Sensor sensor in insigma.Keys) { foreach (double d in insigma[sensor]) { count++; in1++; } } foreach (Sensor sensor in in3sigma.Keys) { foreach (double d in in3sigma[sensor]) { count++; in3++; } } foreach (Sensor sensor in outof3sigma.Keys) { foreach (double d in outof3sigma[sensor]) { count++; out3++; } } FormCompare report = new FormCompare(); report.RTB.SelectionFont = report.Bold.Font; report.RTB.AppendText("Сводка по сравнению:\r\n"); report.RTB.SelectionFont = report.Normal.Font; report.RTB.AppendText(" Базовое измерение: " + bm.ToString() + "\r\n"); report.RTB.SelectionFont = report.Normal.Font; report.RTB.AppendText(" Сравниваемое измерение: " + cm.ToString() + "\r\n"); report.RTB.SelectionFont = report.Italic.Font; report.RTB.AppendText(" Всего сравнивалось точек: "); report.RTB.SelectionFont = report.Normal.Font; report.RTB.AppendText("" + count + " (" + ((100d / count) * count).ToString("0.00") + "%)\r\n"); report.RTB.SelectionColor = Color.Green; report.RTB.SelectionFont = report.Italic.Font; report.RTB.AppendText(" Попало в X±σ: "); report.RTB.SelectionFont = report.Normal.Font; report.RTB.AppendText("" + in1 + " (" + ((100d / count) * in1).ToString("0.00") + "%)\r\n"); report.RTB.SelectionColor = Color.Orange; report.RTB.SelectionFont = report.Italic.Font; report.RTB.AppendText(" Попало в X±3σ: "); report.RTB.SelectionFont = report.Normal.Font; report.RTB.AppendText("" + (in1 + in3) + " (" + ((100d / count) * (in3 + in1)).ToString("0.00") + "%)\r\n"); report.RTB.SelectionFont = report.Normal.Font; report.RTB.AppendText(" Значения точек в интервале\r\n (-3σ; -σ)U(σ; 3σ):\r\n"); foreach (Sensor s in in3sigma.Keys) { report.RTB.SelectionFont = report.Normal.Font; report.RTB.AppendText(" " + s.ToString() + ": "); foreach (double d in in3sigma[s]) { report.RTB.SelectionFont = report.Normal.Font; report.RTB.AppendText(d.ToString() + "; "); } report.RTB.SelectionFont = report.Normal.Font; report.RTB.AppendText("\r\n"); } report.RTB.SelectionColor = Color.Red; report.RTB.SelectionFont = report.Italic.Font; report.RTB.AppendText(" Не попало в X±3σ: "); report.RTB.SelectionFont = report.Normal.Font; report.RTB.AppendText("" + out3 + " (" + ((100d / count) * out3).ToString("0.00") + "%)\r\n"); foreach (Sensor s in outof3sigma.Keys) { report.RTB.SelectionFont = report.Normal.Font; report.RTB.AppendText(" " + s.ToString() + ": "); foreach (double d in outof3sigma[s]) { report.RTB.SelectionFont = report.Normal.Font; report.RTB.AppendText(d.ToString() + "; "); } report.RTB.SelectionFont = report.Normal.Font; report.RTB.AppendText("\r\n"); } report.RTB.SelectionColor = Color.Black; report.setValues(bm, _measures[bm], cm, _measures[cm], _mask); report.Show(); } else { MessageBox.Show("Ошибка сравнения: " + objs["errorlog"]); } } } catch (Exception ex) { MessageBox.Show("Ошибка:\r\n" + ex.Message); } }