public static Chart Construct(PDMData data)
        {
            double[] T = new double[data.TArray.Length];
            for (int i = 0; i < data.TArray.Length; ++i)
                T[i] = (double)data.TArray[i];

            Chart chart = Construct(new Signal(T, data.XArray));
            chart.ChartAreas[0].AxisX.Title = "Period";
            chart.ChartAreas[0].AxisY.Title = "PDM Value";
            chart.Series[0].BorderWidth = 2;
            chart.Titles.Clear();
            chart.Titles.Add("PDM result");
            //chart.Titles[0].TextStyle = TextStyle.Default;

            return chart;
        }
        public PDMData GetPDM(double[] array, int T1, int T2)
        {
            int[] T = new int[T2 - T1 + 1];
            for (int i = 0; i < T2 - T1 + 1; ++i)
                T[i] = T1 + i;

            double[] X = new double[T2 - T1 + 1];

            for (int i = 0; i < T2 - T1 + 1; ++i)
                X[i] = CountPDM(array, CountAbsVariance(array), T[i]);

            PDMData data = new PDMData();
            data.T1 = T1;
            data.T2 = T2;
            data.TArray = T;
            data.XArray = X;
            return data;
        }