Exemplo n.º 1
0
        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); }
        }
Exemplo n.º 2
0
        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); }
        }