コード例 #1
0
        private void MakeMalformation(Phenomenon index, CurvesDataManager data, int curveIndex)
        {
            const int Y_VALUES_INDEX = 0;
            Series    series         = data.ModifiedCurves[curveIndex];
            int       pointsNo       = series.Points.Count;
            double    valuesInterval = SeriesAssist.GetValuesInterval(series, Y_VALUES_INDEX);

            switch (index)
            {
            case Phenomenon.Peek:
                SeriesAssist.OverrideValue(series, Convert.ToInt32((1.0 / 4.0) * pointsNo), -(1.0 / 2.0) * valuesInterval, Y_VALUES_INDEX);
                SeriesAssist.OverrideValue(series, Convert.ToInt32((1.0 / 3.0) * pointsNo), (1.0 / 5.0) * valuesInterval, Y_VALUES_INDEX);
                SeriesAssist.OverrideValue(series, Convert.ToInt32((1.0 / 2.0) * pointsNo), (1.0 / 2.0) * valuesInterval, Y_VALUES_INDEX);
                SeriesAssist.OverrideValue(series, Convert.ToInt32((2.0 / 3.0) * pointsNo), -(1.0 / 5.0) * valuesInterval, Y_VALUES_INDEX);
                SeriesAssist.OverrideValue(series, Convert.ToInt32((3.0 / 4.0) * pointsNo), (1.0 / 2.0) * valuesInterval, Y_VALUES_INDEX);
                break;

            case Phenomenon.Saturation:
                int leftPoint  = Convert.ToInt32((4.0 / 11.0) * pointsNo);
                int rightPoint = Convert.ToInt32((8.0 / 11.0) * pointsNo);
                SeriesAssist.OverrideValues(series, leftPoint, rightPoint, (3.0 / 11.0) * valuesInterval, Y_VALUES_INDEX);
                break;
            }

            data.AlterCurve(series, DataSetCurveType.Modified, curveIndex);
        }
コード例 #2
0
ファイル: MainWindow.cs プロジェクト: vego1mar/PI
        private void OnApplyClick(object sender, EventArgs e)
        {
            if (DataChart.IdealCurve.Points.Count == 0)
            {
                log.Info(MethodBase.GetCurrentMethod().Name + '(' + nameof(DataChart.IdealCurve) + ')');
                AppMessages.MainWindow.ExclamationOfSeriesSelection();
                return;
            }

            MeanType meanType = (MeanType)UiControls.TryGetSelectedIndex(uiPnlAvg_MeanT_ComBx);
            int      curvesNo = UiControls.TryGetValue <int>(uiPnlAvg_Crvs2No_Num);
            bool?    result   = DataChart.TryMakeAverageCurve(meanType, curvesNo);

            log.Info(MethodBase.GetCurrentMethod().Name + '(' + meanType + ',' + curvesNo + ',' + result.HasValue + ')');

            if (!result.Value)
            {
                DataChart.RemoveInvalidPoints(DataSetCurveType.Average);
                AppMessages.MainWindow.ExclamationOfPointsNotValidToChart();
            }

            UiControls.TrySetSelectedIndex(uiPnlMod_CrvT_ComBx, (int)DataSetCurveType.Average);
            UpdateUiByShowingCurveOnChart(DataSetCurveType.Average);
            double standardDeviation = Mathematics.GetRelativeStandardDeviation(SeriesAssist.GetValues(DataChart.AverageCurve), SeriesAssist.GetValues(DataChart.IdealCurve));

            uiPnlAvg_StdDev2_TxtBx.Text = Strings.TryFormatAsNumeric(8, standardDeviation);
        }
コード例 #3
0
        private void CalculateStandardDeviations()
        {
            int            meanTypes = new MeanTypesStrings().Count();
            double         stdDeviation;
            IList <double> averagesValues;
            IList <double> idealValues;

            for (int i = 0; i < Data.Count; i++)
            {
                for (int j = 0; j < Noises.Count; j++)
                {
                    Data[i][j].GenerateIdealCurve(Settings.Pcd.Scaffold, Settings.Pcd.Parameters, Settings.Ui.StartX, Settings.Ui.EndX, Settings.Ui.PointsNo);
                    Data[i][j].PropagateIdealCurve(Settings.Ui.CurvesNo);
                    Data[i][j].MakeNoiseOfGaussian(Settings.Ui.CurvesNo, Noises[j]);
                    MakeMalformation((Phenomenon)i, Data[i][j], Settings.Ui.CurvesNo / 2);

                    for (int k = 0; k < meanTypes; k++)
                    {
                        Data[i][j].TryMakeAverageCurve((MeanType)k, Settings.Ui.CurvesNo);
                        SeriesAssist.CopyPoints(Data[i][j].AverageCurve, Averages[i][j][k]);
                        averagesValues         = SeriesAssist.GetValues(Averages[i][j][k]);
                        idealValues            = SeriesAssist.GetValues(Data[i][j].IdealCurve);
                        stdDeviation           = Mathematics.GetRelativeStandardDeviation(averagesValues, idealValues);
                        StdDeviations[i][j][k] = stdDeviation;
                    }
                }
            }
        }
コード例 #4
0
        public void Alter5()
        {
            // given
            Series series = TestObjects.GetSeries();

            // when
            SeriesAssist.Alter(Operation.Constant, 0.0, series, 2, 1, 0);
        }
コード例 #5
0
 public GridPreviewer(Series series)
 {
     InitializeComponent();
     Curve     = series;
     Originals = SeriesAssist.GetValues(series);
     LocalizeWindow();
     UpdateUiBySettings();
 }
コード例 #6
0
        public void Alter7()
        {
            // given
            Series       series  = TestObjects.GetSeries();
            const double OPERAND = 123.0;

            // when
            SeriesAssist.Alter(Operation.Exponentiation, OPERAND, series, 0, series.Points.Count - 1);
        }
コード例 #7
0
 private void UpdateUiByPopulatingGrid()
 {
     GridAssist.AlterColumnHeader(Index, new GridPreviewerStrings().Ui.DatasetIndex.GetString());
     GridAssist.AlterColumnHeader(x, "x");
     GridAssist.AlterColumnHeader(y, "y", false);
     GridAssist.AddRows(uiGrid_db_grid, Curve.Points.Count);
     GridAssist.PopulateColumn(uiGrid_db_grid, Index.Name, Lists.GetOrdinalValues(0, Convert.ToUInt64(Curve.Points.Count)));
     GridAssist.PopulateColumn(uiGrid_db_grid, x.Name, SeriesAssist.GetArguments(Curve), 4);
     GridAssist.PopulateColumn(uiGrid_db_grid, y.Name, SeriesAssist.GetValues(Curve), VALUES_DECIMAL_PLACES);
 }
コード例 #8
0
        private void OnResetClick(object sender, EventArgs e)
        {
            Series copy = SeriesAssist.GetCopy(Curve);

            Curve.Points.Clear();
            SeriesAssist.CopyPoints(Curve, copy, Originals);
            GridAssist.PopulateColumn(uiGrid_db_grid, y.Name, SeriesAssist.GetValues(Curve), VALUES_DECIMAL_PLACES);
            UpdateUiByRefreshingChart();
            UpdateUiByPanelStateInfo(PanelStateInformation.ValuesRestored);
            log.Info(MethodBase.GetCurrentMethod().Name + "()");
        }
コード例 #9
0
ファイル: MainWindow.cs プロジェクト: vego1mar/PI
        private void OnShowDataSetClick(object sender, EventArgs e)
        {
            DataSetCurveType curveType = (DataSetCurveType)UiControls.TryGetSelectedIndex(uiPnlMod_CrvT_ComBx);
            int    curveIndex          = UiControls.TryGetValue <int>(uiPnlMod_CrvIdx_Num);
            string signature           = MethodBase.GetCurrentMethod().Name + '(' + curveType + ',' + curveIndex + ')';

            switch (curveType)
            {
            case DataSetCurveType.Ideal:
            case DataSetCurveType.Modified:
            case DataSetCurveType.Average:
                break;

            default:
                log.Info(signature);
                AppMessages.MainWindow.AsteriskOfCurveTypeNotSelected();
                return;
            }

            Series curveSeries = SpecifyCurveSeries(curveType, curveIndex);

            if (curveSeries == null || curveSeries.Points.Count == 0)
            {
                log.Info(MethodBase.GetCurrentMethod().Name + '(' + nameof(curveSeries) + ')');
                AppMessages.MainWindow.ExclamationOfSeriesSelection();
                return;
            }

            using (var dialog = new GridPreviewer(SeriesAssist.GetCopy(curveSeries))) {
                dialog.Height = Settings.Dimensions.GridPreviewer.Height;
                dialog.Width  = Settings.Dimensions.GridPreviewer.Width;
                UiControls.TryShowDialog(dialog, this);

                try {
                    if (dialog.DialogResult == DialogResult.OK)
                    {
                        DataChart.AlterCurve(dialog.Curve, curveType, curveIndex);
                        ChartAssist.Refresh(dialog.Curve, Color.Indigo, uiCharts_Crv);
                    }
                }
                catch (InvalidOperationException ex) {
                    log.Error(signature, ex);
                    AppMessages.MainWindow.ErrorOfChartRefreshing();
                }
                catch (Exception ex) {
                    log.Fatal(signature, ex);
                }
            }

            log.Info(signature);
        }
コード例 #10
0
        private void OnSaveClick(object sender, EventArgs e)
        {
            IList <double> values = Lists.Cast <object, double>(GridAssist.GetColumnValues(uiGrid_db_grid, y.HeaderText));

            if (!SeriesAssist.IsChartAcceptable(values))
            {
                log.Info(MethodBase.GetCurrentMethod().Name + '(' + PanelStateInformation.OperationRevoked + ')');
                UpdateUiByPanelStateInfo(PanelStateInformation.OperationRevoked);
                AppMessages.GridPreviewer.ErrorOfInvalidCurvePoints();
                return;
            }

            SeriesAssist.OverrideValues(Curve, values);
            UpdateUiByPanelStateInfo(PanelStateInformation.ChangesSaved);
            log.Info(MethodBase.GetCurrentMethod().Name + '(' + PanelStateInformation.ChangesSaved + ')');
        }
コード例 #11
0
        public void GetCopy1()
        {
            // given
            Series series1 = TestObjects.GetSeries();
            Series series2 = TestObjects.GetSeries(new List <double>()
            {
                -1, 0, 1
            });

            // when
            Series result1 = SeriesAssist.GetCopy(series1, 0, false);
            Series result2 = SeriesAssist.GetCopy(series2);

            // then
            Assertions.SameValues(series1, result1);
            Assertions.SameValues(series2, result2);
        }
コード例 #12
0
        private void OnPerformClick(object sender, EventArgs e)
        {
            Operation @operator = (Operation)UiControls.TryGetSelectedIndex(uiPnl_OperT_ComBx);
            double?   userValue = (@operator == Operation.Positive || @operator == Operation.Negative) ? default(double) : Strings.TryGetValue(uiPnl_Val2_TxtBx.Text);

            if (userValue == null || Curve == null)
            {
                log.Info(MethodBase.GetCurrentMethod().Name + '(' + userValue + ',' + Curve + ')');
                UpdateUiByPanelStateInfo(PanelStateInformation.InvalidUserValue);
                AppMessages.GridPreviewer.ExclamationOfImproperUserValue();
                return;
            }

            int       startIndex = UiControls.TryGetValue <int>(uiPnl_StartIdx_Num);
            int       endIndex   = UiControls.TryGetValue <int>(uiPnl_EndIdx_Num);
            Series    seriesCopy = SeriesAssist.GetCopy(Curve);
            Operation operation  = (Operation)uiPnl_OperT_ComBx.SelectedIndex;
            string    signature  = string.Empty;

            try {
                signature = MethodBase.GetCurrentMethod().Name + '(' + startIndex + ',' + endIndex + ',' + operation + ',' + userValue.Value + ')';
                SeriesAssist.Alter(operation, userValue.Value, seriesCopy, startIndex, endIndex);
            }
            catch (NotFiniteNumberException ex) {
                log.Error(signature, ex);
                UpdateUiByPanelStateInfo(PanelStateInformation.OperationRevoked);
                AppMessages.GridPreviewer.ErrorOfInvalidCurvePoints();
                return;
            }
            catch (Exception ex) {
                log.Fatal(signature, ex);
                UpdateUiByPanelStateInfo(PanelStateInformation.OperationRejected);
                AppMessages.GridPreviewer.ErrorOfPerformOperation();
                return;
            }

            Curve.Points.Clear();
            SeriesAssist.CopyPoints(seriesCopy, Curve);
            GridAssist.PopulateColumn(uiGrid_db_grid, y.Name, SeriesAssist.GetValues(Curve), VALUES_DECIMAL_PLACES);
            UpdateUiByRefreshingChart();
            UpdateUiByPanelStateInfo(PanelStateInformation.PerformedAndRefreshed);
            log.Info(signature);
        }
コード例 #13
0
        internal StatisticalAnalysis(GeneratorSettings genSets)
        {
            InitializeComponent();
            Settings = genSets;
            Noises   = new List <double>()
            {
                0.1, 0.5, 1.0, 11.0
            };
            int dimension1 = Enum.GetValues(typeof(Phenomenon)).Length;
            int dimension2 = Noises.Count;
            int dimension3 = Enum.GetValues(typeof(MeanType)).Length;

            Data     = Lists.GetCloneable(dimension1, dimension2, new CurvesDataManager());
            Averages = Lists.GetNew <Series>(dimension1, dimension2, dimension3);
            Averages.ToList().ForEach(l2 => l2.ToList().ForEach(l1 => l1.ToList().ForEach(s => SeriesAssist.SetDefaultSettings(s))));
            StdDeviations = Lists.GetNew <double>(dimension1, dimension2, dimension3);
            UpdateUiByGridPresentation();
            UpdateUiBySettings();
            CalculateStandardDeviations();
            UpdateUiByPopulatingStandardDeviationsOnGrid();
            UpdateUiByColoringGridsExtremums();
            LocalizeWindow();
        }
コード例 #14
0
        public void Alter1()
        {
            // given
            const int      START_INDEX = 1;
            const int      END_INDEX   = 3;
            IList <double> set         = new List <double>()
            {
                1, 2, 3, 4, 5
            };

            Series         series1   = TestObjects.GetSeries(set);
            Series         series2   = TestObjects.GetSeries(set);
            Series         series3   = TestObjects.GetSeries(set);
            Series         series4   = TestObjects.GetSeries(set);
            Series         series5   = TestObjects.GetSeries(set);
            Series         series6   = TestObjects.GetSeries(set);
            Series         series7   = TestObjects.GetSeries(set);
            Series         series8   = TestObjects.GetSeries(set);
            Series         series9   = TestObjects.GetSeries(set);
            Series         series10  = TestObjects.GetSeries(set);
            double         operand1  = Math.Sqrt(2.0);
            double         operand2  = Math.Sqrt(3.1);
            double         operand3  = Math.Sqrt(Math.PI);
            double         operand4  = Math.Sqrt(2.0 * Math.PI);
            double         operand5  = Math.Sqrt(Math.Cos(0.5));
            double         operand6  = Math.Log10(10.123);
            double         operand7  = Mathematics.Root(8.0, Math.Sqrt(2.0));
            double         operand8  = Mathematics.Reciprocal(Mathematics.Root(8.0, 2.0));
            IList <double> expected1 = new List <double>()
            {
                set[0], set[1] + operand1, set[2] + operand1, set[3] + operand1, set[4]
            };
            IList <double> expected2 = new List <double>()
            {
                set[0], set[1] - operand2, set[2] - operand2, set[3] - operand2, set[4]
            };
            IList <double> expected3 = new List <double>()
            {
                set[0], set[1] * operand3, set[2] * operand3, set[3] * operand3, set[4]
            };
            IList <double> expected4 = new List <double>()
            {
                set[0], set[1] / operand4, set[2] / operand4, set[3] / operand4, set[4]
            };
            IList <double> expected5 = new List <double>()
            {
                set[0], Math.Pow(set[1], operand5), Math.Pow(set[2], operand5), Math.Pow(set[3], operand5), set[4]
            };
            IList <double> expected6 = new List <double>()
            {
                set[0], Math.Log(set[1], operand6), Math.Log(set[2], operand6), Math.Log(set[3], operand6), set[4]
            };
            IList <double> expected7 = new List <double>()
            {
                set[0], Mathematics.Root(set[1], operand7), Mathematics.Root(set[2], operand7), Mathematics.Root(set[3], operand7), set[4]
            };
            IList <double> expected8 = new List <double>()
            {
                set[0], operand8, operand8, operand8, set[4]
            };
            IList <double> expected10 = new List <double>()
            {
                set[0], -Math.Abs(set[1]), -Math.Abs(set[2]), -Math.Abs(set[3]), set[4]
            };

            // when
            SeriesAssist.Alter(Operation.Addition, operand1, series1, START_INDEX, END_INDEX);
            SeriesAssist.Alter(Operation.Subtraction, operand2, series2, START_INDEX, END_INDEX);
            SeriesAssist.Alter(Operation.Multiplication, operand3, series3, START_INDEX, END_INDEX);
            SeriesAssist.Alter(Operation.Division, operand4, series4, START_INDEX, END_INDEX);
            SeriesAssist.Alter(Operation.Exponentiation, operand5, series5, START_INDEX, END_INDEX);
            SeriesAssist.Alter(Operation.Logarithmic, operand6, series6, START_INDEX, END_INDEX);
            SeriesAssist.Alter(Operation.Rooting, operand7, series7, START_INDEX, END_INDEX);
            SeriesAssist.Alter(Operation.Constant, operand8, series8, START_INDEX, END_INDEX);
            SeriesAssist.Alter(Operation.Positive, 0.0, series9, START_INDEX, END_INDEX);
            SeriesAssist.Alter(Operation.Negative, 0.0, series10, START_INDEX, END_INDEX);

            // then
            Assertions.SameValues(expected1, series1);
            Assertions.SameValues(expected2, series2);
            Assertions.SameValues(expected3, series3);
            Assertions.SameValues(expected4, series4);
            Assertions.SameValues(expected5, series5);
            Assertions.SameValues(expected6, series6);
            Assertions.SameValues(expected7, series7);
            Assertions.SameValues(expected8, series8);
            Assertions.SameValues(set, series9);
            Assertions.SameValues(expected10, series10);
        }
コード例 #15
0
 public void Alter6()
 {
     // when
     SeriesAssist.Alter(Operation.Constant, 0.0, null, 0, 0, 0);
 }