Example #1
0
        /// <summary>
        /// Menulis Result View
        /// </summary>
        /// <param name="tabPages">tab page pada result view</param>
        public void WriteResultPane(FATabStripItemCollection tabPages)
        {
            seriesXmlWriter.WriteStartElement("ResultPane");

            foreach (FATabStripItem tp in tabPages)
            {
                seriesXmlWriter.WriteStartElement("TabPage");

                if (tp is ANNResultTabPage)
                {
                    ANNResultTabPage annTp = (ANNResultTabPage)tp;
                    seriesXmlWriter.WriteElementString("Type", "Neural Network");
                    seriesXmlWriter.WriteElementString("Title", annTp.Title);
                    seriesXmlWriter.WriteElementString("SeriesVariable", annTp.Variable.VariableName);

                    seriesXmlWriter.WriteStartElement("NetworkSpecification");
                    seriesXmlWriter.WriteElementString("InputLayerNeurons", annTp.NetworkProperties.InputLayerNeurons.ToString());
                    seriesXmlWriter.WriteElementString("HiddenLayerNeurons", annTp.NetworkProperties.HiddenLayerNeurons.ToString());
                    seriesXmlWriter.WriteElementString("OutputLayerNeurons", annTp.NetworkProperties.OutputLayerNeurons.ToString());
                    seriesXmlWriter.WriteElementString("ActivationFunction", ((int)(annTp.NetworkProperties.ActivationFunction)).ToString());
                    seriesXmlWriter.WriteElementString("LearningRate", annTp.NetworkProperties.LearningRate.ToString());
                    seriesXmlWriter.WriteElementString("Momentum", annTp.NetworkProperties.Momentum.ToString());
                    seriesXmlWriter.WriteElementString("IncludedObservations", annTp.NetworkProperties.IncludedObservations.ToString());
                    seriesXmlWriter.WriteElementString("Error", annTp.NetworkProperties.Error.ToString());
                    seriesXmlWriter.WriteElementString("MSE", annTp.NetworkProperties.MSE.ToString());
                    seriesXmlWriter.WriteElementString("MAE", annTp.NetworkProperties.MAE.ToString());
                    seriesXmlWriter.WriteFullEndElement();

                    seriesXmlWriter.WriteStartElement("Predicted");
                    foreach (double value in annTp.Predicted)
                    {
                        seriesXmlWriter.WriteElementString("Value", value.ToString());
                    }
                    seriesXmlWriter.WriteFullEndElement();

                    if (annTp.Forecasted != null)
                    {
                        seriesXmlWriter.WriteStartElement("Forecasted");
                        foreach (double value in annTp.Forecasted)
                        {
                            seriesXmlWriter.WriteElementString("Value", value.ToString());
                        }
                        seriesXmlWriter.WriteFullEndElement();
                    }

                    seriesXmlWriter.WriteStartElement("VisibleView");
                    if (annTp.IsAnnModelSummaryVisible)
                    {
                        seriesXmlWriter.WriteElementString("View", "AnnModelSummary");
                    }
                    if (annTp.IsActualPredictedResidualDataGridVisible)
                    {
                        seriesXmlWriter.WriteElementString("View", "ActualPredictedResidualDataGrid");
                    }
                    if (annTp.IsForecastedDataGridVisible)
                    {
                        seriesXmlWriter.WriteElementString("View", "ForecastedDataGrid");
                    }
                    if (annTp.IsActualAndPredictedGraphVisible)
                    {
                        seriesXmlWriter.WriteElementString("View", "ActualAndPredictedGraph");
                    }
                    if (annTp.IsActualAndForecastedGraphVisible)
                    {
                        seriesXmlWriter.WriteElementString("View", "ActualAndForecastedGraph");
                    }
                    if (annTp.IsActualVsPredictedGraphVisible)
                    {
                        seriesXmlWriter.WriteElementString("View", "ActualVsPredictedGraph");
                    }
                    if (annTp.IsResidualGraphVisible)
                    {
                        seriesXmlWriter.WriteElementString("View", "ResidualGraph");
                    }
                    if (annTp.IsResidualVsActualGraphVisible)
                    {
                        seriesXmlWriter.WriteElementString("View", "ResidualVsActualGraph");
                    }
                    if (annTp.IsResidualVsPredictedGraphVisible)
                    {
                        seriesXmlWriter.WriteElementString("View", "ResidualVsPredictedGraph");
                    }
                    seriesXmlWriter.WriteFullEndElement();
                }
                else if (tp is MAResultTabPage)
                {
                    MAResultTabPage maTp = (MAResultTabPage)tp;
                    seriesXmlWriter.WriteElementString("Type", "Moving Average");
                    seriesXmlWriter.WriteElementString("Title", maTp.Title);
                    seriesXmlWriter.WriteElementString("SeriesVariable", maTp.Variable.VariableName);

                    seriesXmlWriter.WriteStartElement("MASpecification");
                    seriesXmlWriter.WriteElementString("includedObservations", maTp.MaProperties.includedObservations.ToString());
                    seriesXmlWriter.WriteElementString("isSingleMA", maTp.MaProperties.isSingleMA.ToString().ToLower());
                    seriesXmlWriter.WriteElementString("orde", maTp.MaProperties.orde.ToString());
                    seriesXmlWriter.WriteElementString("sseMA", maTp.MaProperties.sseMA.ToString());
                    seriesXmlWriter.WriteElementString("mseMA", maTp.MaProperties.mseMA.ToString());
                    seriesXmlWriter.WriteElementString("maeMA", maTp.MaProperties.maeMA.ToString());
                    seriesXmlWriter.WriteElementString("mpeMA", maTp.MaProperties.mpeMA.ToString());
                    seriesXmlWriter.WriteElementString("mapeMA", maTp.MaProperties.mapeMA.ToString());
                    seriesXmlWriter.WriteFullEndElement();

                    seriesXmlWriter.WriteStartElement("SingleMA");
                    foreach (double value in maTp.MaTable.singleSmoothed)
                    {
                        seriesXmlWriter.WriteElementString("Value", value.ToString());
                    }
                    seriesXmlWriter.WriteFullEndElement();

                    if (maTp.MaProperties.isSingleMA == false)
                    {
                        seriesXmlWriter.WriteStartElement("DoubleMA");
                        foreach (double value in maTp.MaTable.doubleSmoothed)
                        {
                            seriesXmlWriter.WriteElementString("Value", value.ToString());
                        }
                        seriesXmlWriter.WriteFullEndElement();
                    }

                    seriesXmlWriter.WriteStartElement("Predicted");
                    foreach (double value in maTp.MaTable.predicted)
                    {
                        seriesXmlWriter.WriteElementString("Value", value.ToString());
                    }
                    seriesXmlWriter.WriteFullEndElement();

                    seriesXmlWriter.WriteStartElement("Residual");
                    foreach (double value in maTp.MaTable.residual)
                    {
                        seriesXmlWriter.WriteElementString("Value", value.ToString());
                    }
                    seriesXmlWriter.WriteFullEndElement();

                    if (maTp.Forecasted != null)
                    {
                        seriesXmlWriter.WriteStartElement("Forecasted");
                        foreach (double value in maTp.Forecasted)
                        {
                            seriesXmlWriter.WriteElementString("Value", value.ToString());
                        }
                        seriesXmlWriter.WriteFullEndElement();
                    }

                    seriesXmlWriter.WriteStartElement("VisibleView");
                    if (maTp.IsMaModelSummaryVisible)
                    {
                        seriesXmlWriter.WriteElementString("View", "MAModelSummary");
                    }
                    if (maTp.IsMovingAverageDataGridVisible)
                    {
                        seriesXmlWriter.WriteElementString("View", "MovingAverageDataGrid");
                    }
                    if (maTp.IsSmoothingVisible)
                    {
                        seriesXmlWriter.WriteElementString("View", "Smoothing");
                    }
                    //if (maTp.IsActualPredictedResidualDataGridVisible) seriesXmlWriter.WriteElementString("View", "ActualPredictedResidualDataGrid");
                    if (maTp.IsForecastedDataGridVisible)
                    {
                        seriesXmlWriter.WriteElementString("View", "ForecastedDataGrid");
                    }
                    if (maTp.IsActualAndPredictedGraphVisible)
                    {
                        seriesXmlWriter.WriteElementString("View", "ActualAndPredictedGraph");
                    }
                    if (maTp.IsActualAndSmoothedGraphVisible)
                    {
                        seriesXmlWriter.WriteElementString("View", "ActualAndSmoothedGraph");
                    }
                    if (maTp.IsActualAndForecastedGraphVisible)
                    {
                        seriesXmlWriter.WriteElementString("View", "ActualAndForecastedGraph");
                    }
                    if (maTp.IsActualVsPredictedGraphVisible)
                    {
                        seriesXmlWriter.WriteElementString("View", "ActualVsPredictedGraph");
                    }
                    if (maTp.IsResidualGraphVisible)
                    {
                        seriesXmlWriter.WriteElementString("View", "ResidualGraph");
                    }
                    if (maTp.IsResidualVsActualGraphVisible)
                    {
                        seriesXmlWriter.WriteElementString("View", "ResidualVsActualGraph");
                    }
                    if (maTp.IsResidualVsPredictedGraphVisible)
                    {
                        seriesXmlWriter.WriteElementString("View", "ResidualVsPredictedGraph");
                    }
                    seriesXmlWriter.WriteFullEndElement();
                }
                else if (tp is ESResultTabPage)
                {
                    ESResultTabPage esTp = (ESResultTabPage)tp;
                    seriesXmlWriter.WriteElementString("Type", "Exponential Smoothing");
                    seriesXmlWriter.WriteElementString("Title", esTp.Title);
                    seriesXmlWriter.WriteElementString("SeriesVariable", esTp.Variable.VariableName);

                    seriesXmlWriter.WriteStartElement("ESSpecification");
                    seriesXmlWriter.WriteElementString("includedObservations", esTp.EsProperties.includedObservations.ToString());
                    seriesXmlWriter.WriteElementString("alpha", esTp.EsProperties.alpha.ToString());
                    seriesXmlWriter.WriteElementString("gamma", esTp.EsProperties.gamma.ToString());
                    seriesXmlWriter.WriteElementString("beta", esTp.EsProperties.beta.ToString());
                    seriesXmlWriter.WriteElementString("seasonalLength", esTp.EsProperties.seasonalLength.ToString());
                    seriesXmlWriter.WriteElementString("sseES", esTp.EsProperties.sseES.ToString());
                    seriesXmlWriter.WriteElementString("mseES", esTp.EsProperties.mseES.ToString());
                    seriesXmlWriter.WriteElementString("maeES", esTp.EsProperties.maeES.ToString());
                    seriesXmlWriter.WriteElementString("mpeES", esTp.EsProperties.mpeES.ToString());
                    seriesXmlWriter.WriteElementString("mapeES", esTp.EsProperties.mapeES.ToString());
                    seriesXmlWriter.WriteElementString("initialModel", esTp.EsProperties.initialModel.ToString());
                    seriesXmlWriter.WriteElementString("isMultiplicative", esTp.EsProperties.isMultiplicative.ToString().ToLower());
                    seriesXmlWriter.WriteFullEndElement();

                    seriesXmlWriter.WriteStartElement("Smoothed");
                    foreach (double value in esTp.EsTable.smoothed)
                    {
                        seriesXmlWriter.WriteElementString("Value", value.ToString());
                    }
                    seriesXmlWriter.WriteFullEndElement();

                    if (esTp.EsProperties.initialModel != 1 && esTp.EsProperties.initialModel != 2)
                    {
                        seriesXmlWriter.WriteStartElement("Trend");
                        foreach (double value in esTp.EsTable.trend)
                        {
                            seriesXmlWriter.WriteElementString("Value", value.ToString());
                        }
                        seriesXmlWriter.WriteFullEndElement();
                    }

                    if (esTp.EsProperties.initialModel == 4)
                    {
                        seriesXmlWriter.WriteStartElement("Seasonal");
                        foreach (double value in esTp.EsTable.seasonal)
                        {
                            seriesXmlWriter.WriteElementString("Value", value.ToString());
                        }
                        seriesXmlWriter.WriteFullEndElement();
                    }

                    seriesXmlWriter.WriteStartElement("Predicted");
                    foreach (double value in esTp.EsTable.predicted)
                    {
                        seriesXmlWriter.WriteElementString("Value", value.ToString());
                    }
                    seriesXmlWriter.WriteFullEndElement();

                    seriesXmlWriter.WriteStartElement("Residual");
                    foreach (double value in esTp.EsTable.residual)
                    {
                        seriesXmlWriter.WriteElementString("Value", value.ToString());
                    }
                    seriesXmlWriter.WriteFullEndElement();

                    if (esTp.Forecasted != null)
                    {
                        seriesXmlWriter.WriteStartElement("Forecasted");
                        foreach (double value in esTp.Forecasted)
                        {
                            seriesXmlWriter.WriteElementString("Value", value.ToString());
                        }
                        seriesXmlWriter.WriteFullEndElement();
                    }

                    seriesXmlWriter.WriteStartElement("VisibleView");
                    if (esTp.IsEsModelSummaryVisible)
                    {
                        seriesXmlWriter.WriteElementString("View", "ESModelSummary");
                    }
                    if (esTp.IsExponentialSmoothingDataGridVisible)
                    {
                        seriesXmlWriter.WriteElementString("View", "ExponentialSmoothingDataGrid");
                    }
                    if (esTp.IsSmoothingVisible)
                    {
                        seriesXmlWriter.WriteElementString("View", "Smoothing");
                    }
                    if (esTp.IsTrendVisible)
                    {
                        seriesXmlWriter.WriteElementString("View", "Trend");
                    }
                    if (esTp.IsSeasonalVisible)
                    {
                        seriesXmlWriter.WriteElementString("View", "Seasonal");
                    }
                    //if (maTp.IsActualPredictedResidualDataGridVisible) seriesXmlWriter.WriteElementString("View", "ActualPredictedResidualDataGrid");
                    if (esTp.IsForecastedDataGridVisible)
                    {
                        seriesXmlWriter.WriteElementString("View", "ForecastedDataGrid");
                    }
                    if (esTp.IsActualAndPredictedGraphVisible)
                    {
                        seriesXmlWriter.WriteElementString("View", "ActualAndPredictedGraph");
                    }
                    if (esTp.IsActualAndSmoothedGraphVisible)
                    {
                        seriesXmlWriter.WriteElementString("View", "ActualAndSmoothedGraph");
                    }

                    if (esTp.IsActualAndForecastedGraphVisible)
                    {
                        seriesXmlWriter.WriteElementString("View", "ActualAndForecastedGraph");
                    }
                    if (esTp.IsActualVsPredictedGraphVisible)
                    {
                        seriesXmlWriter.WriteElementString("View", "ActualVsPredictedGraph");
                    }
                    if (esTp.IsResidualGraphVisible)
                    {
                        seriesXmlWriter.WriteElementString("View", "ResidualGraph");
                    }
                    if (esTp.IsResidualVsActualGraphVisible)
                    {
                        seriesXmlWriter.WriteElementString("View", "ResidualVsActualGraph");
                    }
                    if (esTp.IsResidualVsPredictedGraphVisible)
                    {
                        seriesXmlWriter.WriteElementString("View", "ResidualVsPredictedGraph");
                    }
                    seriesXmlWriter.WriteFullEndElement();
                }
                else if (tp is DECResultTabPage)
                {
                    DECResultTabPage decTp = (DECResultTabPage)tp;
                    seriesXmlWriter.WriteElementString("Type", "Decomposition");
                    seriesXmlWriter.WriteElementString("Title", decTp.Title);
                    seriesXmlWriter.WriteElementString("SeriesVariable", decTp.Variable.VariableName);

                    seriesXmlWriter.WriteStartElement("DECSpecification");
                    seriesXmlWriter.WriteElementString("includedObservations", decTp.DecProperties.includedObservations.ToString());
                    seriesXmlWriter.WriteElementString("seasonalLength", decTp.DecProperties.seasonalLength.ToString());
                    seriesXmlWriter.WriteElementString("sseDEC", decTp.DecProperties.sseDEC.ToString());
                    seriesXmlWriter.WriteElementString("mseDEC", decTp.DecProperties.mseDEC.ToString());
                    seriesXmlWriter.WriteElementString("maeDEC", decTp.DecProperties.maeDEC.ToString());
                    seriesXmlWriter.WriteElementString("mpeDEC", decTp.DecProperties.mpeDEC.ToString());
                    seriesXmlWriter.WriteElementString("mapeDEC", decTp.DecProperties.mapeDEC.ToString());
                    seriesXmlWriter.WriteElementString("isMultiplicative", decTp.DecProperties.isMultiplikatif.ToString().ToLower());
                    seriesXmlWriter.WriteElementString("initialTrend", decTp.DecProperties.initialTrend.ToString());
                    seriesXmlWriter.WriteFullEndElement();

                    seriesXmlWriter.WriteStartElement("Parameters");
                    foreach (double value in decTp.DecProperties.parameters)
                    {
                        seriesXmlWriter.WriteElementString("Value", value.ToString());
                    }
                    seriesXmlWriter.WriteFullEndElement();

                    seriesXmlWriter.WriteStartElement("SeasonalIndex");
                    foreach (double value in decTp.DecProperties.seasonalIdx)
                    {
                        seriesXmlWriter.WriteElementString("Value", value.ToString());
                    }
                    seriesXmlWriter.WriteFullEndElement();

                    seriesXmlWriter.WriteStartElement("Trend");
                    foreach (double value in decTp.DecTable.trend)
                    {
                        seriesXmlWriter.WriteElementString("Value", value.ToString());
                    }
                    seriesXmlWriter.WriteFullEndElement();

                    seriesXmlWriter.WriteStartElement("Detrend");
                    foreach (double value in decTp.DecTable.detrend)
                    {
                        seriesXmlWriter.WriteElementString("Value", value.ToString());
                    }
                    seriesXmlWriter.WriteFullEndElement();

                    seriesXmlWriter.WriteStartElement("Seasonal");
                    foreach (double value in decTp.DecTable.seasonal)
                    {
                        seriesXmlWriter.WriteElementString("Value", value.ToString());
                    }
                    seriesXmlWriter.WriteFullEndElement();

                    seriesXmlWriter.WriteStartElement("Deseasonal");
                    foreach (double value in decTp.DecTable.deseasonal)
                    {
                        seriesXmlWriter.WriteElementString("Value", value.ToString());
                    }
                    seriesXmlWriter.WriteFullEndElement();

                    seriesXmlWriter.WriteStartElement("Predicted");
                    foreach (double value in decTp.DecTable.predicted)
                    {
                        seriesXmlWriter.WriteElementString("Value", value.ToString());
                    }
                    seriesXmlWriter.WriteFullEndElement();

                    seriesXmlWriter.WriteStartElement("Residual");
                    foreach (double value in decTp.DecTable.residual)
                    {
                        seriesXmlWriter.WriteElementString("Value", value.ToString());
                    }
                    seriesXmlWriter.WriteFullEndElement();

                    if (decTp.Forecasted != null)
                    {
                        seriesXmlWriter.WriteStartElement("Forecasted");
                        foreach (double value in decTp.Forecasted)
                        {
                            seriesXmlWriter.WriteElementString("Value", value.ToString());
                        }
                        seriesXmlWriter.WriteFullEndElement();
                    }

                    seriesXmlWriter.WriteStartElement("VisibleView");
                    if (decTp.IsDecModelSummaryVisible)
                    {
                        seriesXmlWriter.WriteElementString("View", "DECModelSummary");
                    }
                    if (decTp.IsDecompositionDataGridVisible)
                    {
                        seriesXmlWriter.WriteElementString("View", "DecompositionDataGrid");
                    }
                    if (decTp.IsTrendVisible)
                    {
                        seriesXmlWriter.WriteElementString("View", "Trend");
                    }
                    //if (maTp.IsActualPredictedResidualDataGridVisible) seriesXmlWriter.WriteElementString("View", "ActualPredictedResidualDataGrid");
                    if (decTp.IsDetrendVisible)
                    {
                        seriesXmlWriter.WriteElementString("View", "Detrend");
                    }
                    if (decTp.IsSeasonalVisible)
                    {
                        seriesXmlWriter.WriteElementString("View", "Seasonal");
                    }
                    if (decTp.IsDeseasonalVisible)
                    {
                        seriesXmlWriter.WriteElementString("View", "Deseasonal");
                    }
                    if (decTp.IsForecastedDataGridVisible)
                    {
                        seriesXmlWriter.WriteElementString("View", "ForecastedDataGrid");
                    }
                    if (decTp.IsActualPredictedAndTrendGraphVisible)
                    {
                        seriesXmlWriter.WriteElementString("View", "ActualPredictedAndTrendGraph");
                    }
                    if (decTp.IsActualAndForecastedGraphVisible)
                    {
                        seriesXmlWriter.WriteElementString("View", "ActualAndForecastedGraph");
                    }
                    if (decTp.IsActualVsPredictedGraphVisible)
                    {
                        seriesXmlWriter.WriteElementString("View", "ActualVsPredictedGraph");
                    }
                    if (decTp.IsResidualGraphVisible)
                    {
                        seriesXmlWriter.WriteElementString("View", "ResidualGraph");
                    }
                    if (decTp.IsResidualVsActualGraphVisible)
                    {
                        seriesXmlWriter.WriteElementString("View", "ResidualVsActualGraph");
                    }
                    if (decTp.IsResidualVsPredictedGraphVisible)
                    {
                        seriesXmlWriter.WriteElementString("View", "ResidualVsPredictedGraph");
                    }
                    if (decTp.IsDetrendGraphVisible)
                    {
                        seriesXmlWriter.WriteElementString("View", "DetrendGraph");
                    }
                    if (decTp.IsDeseasonalVisible)
                    {
                        seriesXmlWriter.WriteElementString("View", "DeseasonalGraph");
                    }
                    seriesXmlWriter.WriteFullEndElement();
                }
                else if (tp is TrendAnalysisResultTabPage)
                {
                    TrendAnalysisResultTabPage trendTp = (TrendAnalysisResultTabPage)tp;
                    seriesXmlWriter.WriteElementString("Type", "Trend Analysis");
                    seriesXmlWriter.WriteElementString("Title", trendTp.Title);
                    seriesXmlWriter.WriteElementString("SeriesVariable", trendTp.Variable.VariableName);

                    seriesXmlWriter.WriteStartElement("TrendAnalysisSpecification");
                    seriesXmlWriter.WriteElementString("includedObservations", trendTp.TrendProperties.includedObservations.ToString());
                    seriesXmlWriter.WriteElementString("R", trendTp.TrendProperties.r.ToString());
                    seriesXmlWriter.WriteElementString("RSquare", trendTp.TrendProperties.rSquare.ToString());
                    seriesXmlWriter.WriteElementString("RSquareAdjusted", trendTp.TrendProperties.rSquareAdjusted.ToString());
                    seriesXmlWriter.WriteElementString("sse", trendTp.TrendProperties.sse.ToString());
                    seriesXmlWriter.WriteElementString("mse", trendTp.TrendProperties.mse.ToString());
                    seriesXmlWriter.WriteElementString("initialModel", trendTp.TrendProperties.initialModel.ToString());
                    seriesXmlWriter.WriteFullEndElement();

                    seriesXmlWriter.WriteStartElement("Parameters");
                    foreach (double value in trendTp.TrendProperties.parameters)
                    {
                        seriesXmlWriter.WriteElementString("Value", value.ToString());
                    }
                    seriesXmlWriter.WriteFullEndElement();

                    seriesXmlWriter.WriteStartElement("Predicted");
                    foreach (double value in trendTp.Predicted)
                    {
                        seriesXmlWriter.WriteElementString("Value", value.ToString());
                    }
                    seriesXmlWriter.WriteFullEndElement();

                    seriesXmlWriter.WriteStartElement("Residual");
                    foreach (double value in trendTp.Residual)
                    {
                        seriesXmlWriter.WriteElementString("Value", value.ToString());
                    }
                    seriesXmlWriter.WriteFullEndElement();

                    if (trendTp.Forecasted != null)
                    {
                        seriesXmlWriter.WriteStartElement("Forecasted");
                        foreach (double value in trendTp.Forecasted)
                        {
                            seriesXmlWriter.WriteElementString("Value", value.ToString());
                        }
                        seriesXmlWriter.WriteFullEndElement();
                    }

                    seriesXmlWriter.WriteStartElement("VisibleView");
                    if (trendTp.IsTrendAnalysisModelSummaryVisible)
                    {
                        seriesXmlWriter.WriteElementString("View", "TrendAnalysisModelSummary");
                    }
                    if (trendTp.IsActualPredictedResidualDataGridVisible)
                    {
                        seriesXmlWriter.WriteElementString("View", "ActualPredictedResidualDataGrid");
                    }
                    if (trendTp.IsForecastedDataGridVisible)
                    {
                        seriesXmlWriter.WriteElementString("View", "ForecastedDataGrid");
                    }
                    if (trendTp.IsActualAndPredictedGraphVisible)
                    {
                        seriesXmlWriter.WriteElementString("View", "ActualAndPredictedGraph");
                    }
                    if (trendTp.IsActualAndForecastedGraphVisible)
                    {
                        seriesXmlWriter.WriteElementString("View", "ActualAndForecastedGraph");
                    }
                    if (trendTp.IsActualVsPredictedGraphVisible)
                    {
                        seriesXmlWriter.WriteElementString("View", "ActualVsPredictedGraph");
                    }
                    if (trendTp.IsResidualGraphVisible)
                    {
                        seriesXmlWriter.WriteElementString("View", "ResidualGraph");
                    }
                    if (trendTp.IsResidualVsActualGraphVisible)
                    {
                        seriesXmlWriter.WriteElementString("View", "ResidualVsActualGraph");
                    }
                    if (trendTp.IsResidualVsPredictedGraphVisible)
                    {
                        seriesXmlWriter.WriteElementString("View", "ResidualVsPredictedGraph");
                    }
                    seriesXmlWriter.WriteFullEndElement();
                }
                else if (tp is CorrelogramResult)
                {
                    CorrelogramResult cTp = (CorrelogramResult)tp;
                    seriesXmlWriter.WriteElementString("Type", "Correlogram");
                    seriesXmlWriter.WriteElementString("Title", cTp.Title);

                    seriesXmlWriter.WriteElementString("Lag", cTp.Lag.ToString());
                    seriesXmlWriter.WriteElementString("WhiteNoise", cTp.WhiteNoiseAcf.ToString().ToLower());

                    seriesXmlWriter.WriteStartElement("Data");
                    foreach (double value in cTp.Data)
                    {
                        seriesXmlWriter.WriteElementString("Value", value.ToString());
                    }
                    seriesXmlWriter.WriteFullEndElement();
                }

                seriesXmlWriter.WriteFullEndElement();
            }

            seriesXmlWriter.WriteFullEndElement();


            seriesXmlWriter.WriteEndElement();
            seriesXmlWriter.WriteEndDocument();
            seriesXmlWriter.Flush();
        }
Example #2
0
        /// <summary>
        /// Membaca hasil pada Result View
        /// </summary>
        /// <param name="data">Series Data rujukan</param>
        /// <returns>Tab Page yang akan ditampilkan pada Result View</returns>
        public List <FATabStripItem> ReadResultPane(SeriesData data)
        {
            List <FATabStripItem> result = new List <FATabStripItem>();
            string tmpString;

            seriesDataReader.ReadToFollowing("ResultPane");
            seriesDataReader.ReadStartElement();

            while (seriesDataReader.IsStartElement("TabPage"))
            {
                seriesDataReader.ReadStartElement();
                tmpString = seriesDataReader.ReadElementContentAsString();
                if (tmpString == "Neural Network")
                {
                    ANNResultTabPage annTp = new ANNResultTabPage();
                    string           title = seriesDataReader.ReadElementContentAsString();
                    tmpString = seriesDataReader.ReadElementContentAsString();
                    int index = VariableFinder.FindVariableIndex(data.SeriesVariables, tmpString);

                    NeuralNetworkAnalysisForm.NetworkSpecification tmpNetSpec = new NeuralNetworkAnalysisForm.NetworkSpecification();
                    seriesDataReader.ReadStartElement();
                    tmpNetSpec.InputLayerNeurons    = seriesDataReader.ReadElementContentAsInt();
                    tmpNetSpec.HiddenLayerNeurons   = seriesDataReader.ReadElementContentAsInt();
                    tmpNetSpec.OutputLayerNeurons   = seriesDataReader.ReadElementContentAsInt();
                    tmpNetSpec.ActivationFunction   = (NeuralNetworkAnalysisForm.ActivationFunctionEnumeration)seriesDataReader.ReadElementContentAsInt();
                    tmpNetSpec.LearningRate         = seriesDataReader.ReadElementContentAsDouble();
                    tmpNetSpec.Momentum             = seriesDataReader.ReadElementContentAsDouble();
                    tmpNetSpec.IncludedObservations = seriesDataReader.ReadElementContentAsInt();
                    tmpNetSpec.Error = seriesDataReader.ReadElementContentAsDouble();
                    tmpNetSpec.MSE   = seriesDataReader.ReadElementContentAsDouble();
                    tmpNetSpec.MAE   = seriesDataReader.ReadElementContentAsDouble();
                    seriesDataReader.ReadEndElement();

                    List <double> tmpPredicted = new List <double>();
                    seriesDataReader.ReadStartElement();
                    while (seriesDataReader.IsStartElement("Value"))
                    {
                        tmpPredicted.Add(seriesDataReader.ReadElementContentAsDouble());
                    }
                    seriesDataReader.ReadEndElement();

                    List <double> tmpForecasted = new List <double>();
                    if (seriesDataReader.IsStartElement("Forecasted"))
                    {
                        seriesDataReader.ReadStartElement();
                        while (seriesDataReader.IsStartElement("Value"))
                        {
                            tmpForecasted.Add(seriesDataReader.ReadElementContentAsDouble());
                        }
                        seriesDataReader.ReadEndElement();
                    }

                    annTp.SetData(data, data.SeriesVariables[index], tmpNetSpec, tmpPredicted.ToArray(), tmpForecasted.ToArray());

                    seriesDataReader.ReadStartElement();
                    while (seriesDataReader.IsStartElement("View"))
                    {
                        tmpString = seriesDataReader.ReadElementContentAsString();
                        if (tmpString == "AnnModelSummary")
                        {
                            annTp.IsAnnModelSummaryVisible = true;
                        }
                        else if (tmpString == "ActualPredictedResidualDataGrid")
                        {
                            annTp.IsActualPredictedResidualDataGridVisible = true;
                        }
                        else if (tmpString == "ForecastedDataGrid")
                        {
                            annTp.IsForecastedDataGridVisible = true;
                        }
                        else if (tmpString == "ActualAndPredictedGraph")
                        {
                            annTp.IsActualAndPredictedGraphVisible = true;
                        }
                        else if (tmpString == "ActualAndForecastedGraph")
                        {
                            annTp.IsActualAndForecastedGraphVisible = true;
                        }
                        else if (tmpString == "ActualVsPredictedGraph")
                        {
                            annTp.IsActualVsPredictedGraphVisible = true;
                        }
                        else if (tmpString == "ResidualGraph")
                        {
                            annTp.IsResidualGraphVisible = true;
                        }
                        else if (tmpString == "ResidualVsActualGraph")
                        {
                            annTp.IsResidualVsActualGraphVisible = true;
                        }
                        else if (tmpString == "ResidualVsPredictedGraph")
                        {
                            annTp.IsResidualVsPredictedGraphVisible = true;
                        }
                    }
                    seriesDataReader.ReadEndElement();

                    annTp.Title = title;
                    annTp.DrawControl();
                    result.Add(annTp);
                    seriesDataReader.ReadEndElement();
                }
                else if (tmpString == "Moving Average")
                {
                    MAResultTabPage maTp  = new MAResultTabPage();
                    string          title = seriesDataReader.ReadElementContentAsString();
                    tmpString = seriesDataReader.ReadElementContentAsString();
                    int index = VariableFinder.FindVariableIndex(data.SeriesVariables, tmpString);

                    MovingAverageForm.MASpecification tmpMaSpec = new MovingAverageForm.MASpecification();
                    seriesDataReader.ReadStartElement();
                    tmpMaSpec.includedObservations = seriesDataReader.ReadElementContentAsInt();
                    tmpMaSpec.isSingleMA           = seriesDataReader.ReadElementContentAsBoolean();
                    tmpMaSpec.orde   = seriesDataReader.ReadElementContentAsInt();
                    tmpMaSpec.sseMA  = seriesDataReader.ReadElementContentAsDouble();
                    tmpMaSpec.mseMA  = seriesDataReader.ReadElementContentAsDouble();
                    tmpMaSpec.maeMA  = seriesDataReader.ReadElementContentAsDouble();
                    tmpMaSpec.mpeMA  = seriesDataReader.ReadElementContentAsDouble();
                    tmpMaSpec.mapeMA = seriesDataReader.ReadElementContentAsDouble();
                    seriesDataReader.ReadEndElement();

                    MovingAverageForm.MAComponent tmpMaComp = new MovingAverageForm.MAComponent();

                    List <double> tmpSingleMA = new List <double>();
                    seriesDataReader.ReadStartElement();
                    while (seriesDataReader.IsStartElement("Value"))
                    {
                        tmpSingleMA.Add(seriesDataReader.ReadElementContentAsDouble());
                    }
                    seriesDataReader.ReadEndElement();
                    tmpMaComp.singleSmoothed = tmpSingleMA.ToArray();

                    List <double> tmpDoubleMA = new List <double>();
                    if (seriesDataReader.IsStartElement("DoubleMA"))
                    {
                        seriesDataReader.ReadStartElement();
                        while (seriesDataReader.IsStartElement("Value"))
                        {
                            tmpDoubleMA.Add(seriesDataReader.ReadElementContentAsDouble());
                        }
                        seriesDataReader.ReadEndElement();
                        tmpMaComp.doubleSmoothed = tmpDoubleMA.ToArray();
                    }

                    List <double> tmpPredicted = new List <double>();
                    seriesDataReader.ReadStartElement();
                    while (seriesDataReader.IsStartElement("Value"))
                    {
                        tmpPredicted.Add(seriesDataReader.ReadElementContentAsDouble());
                    }
                    seriesDataReader.ReadEndElement();
                    tmpMaComp.predicted = tmpPredicted.ToArray();

                    List <double> tmpResidual = new List <double>();
                    seriesDataReader.ReadStartElement();
                    while (seriesDataReader.IsStartElement("Value"))
                    {
                        tmpResidual.Add(seriesDataReader.ReadElementContentAsDouble());
                    }
                    seriesDataReader.ReadEndElement();
                    tmpMaComp.residual = tmpResidual.ToArray();

                    List <double> tmpForecasted = new List <double>();
                    if (seriesDataReader.IsStartElement("Forecasted"))
                    {
                        seriesDataReader.ReadStartElement();
                        while (seriesDataReader.IsStartElement("Value"))
                        {
                            tmpForecasted.Add(seriesDataReader.ReadElementContentAsDouble());
                        }
                        seriesDataReader.ReadEndElement();
                    }

                    maTp.SetData(data, data.SeriesVariables[index], tmpMaSpec, tmpMaComp, tmpForecasted.ToArray());

                    seriesDataReader.ReadStartElement();
                    while (seriesDataReader.IsStartElement("View"))
                    {
                        tmpString = seriesDataReader.ReadElementContentAsString();
                        if (tmpString == "MAModelSummary")
                        {
                            maTp.IsMaModelSummaryVisible = true;
                        }
                        else if (tmpString == "MovingAverageDataGrid")
                        {
                            maTp.IsMovingAverageDataGridVisible = true;
                        }
                        else if (tmpString == "Smoothing")
                        {
                            maTp.IsSmoothingVisible = true;
                        }
                        //else if (tmpString == "ActualPredictedResidualDataGrid") maTp.IsActualPredictedResidualDataGridVisible = true;
                        else if (tmpString == "ForecastedDataGrid")
                        {
                            maTp.IsForecastedDataGridVisible = true;
                        }
                        else if (tmpString == "ActualAndPredictedGraph")
                        {
                            maTp.IsActualAndPredictedGraphVisible = true;
                        }
                        else if (tmpString == "ActualAndSmoothedGraph")
                        {
                            maTp.IsActualAndSmoothedGraphVisible = true;
                        }
                        else if (tmpString == "ActualAndForecastedGraph")
                        {
                            maTp.IsActualAndForecastedGraphVisible = true;
                        }
                        else if (tmpString == "ActualVsPredictedGraph")
                        {
                            maTp.IsActualVsPredictedGraphVisible = true;
                        }
                        else if (tmpString == "ResidualGraph")
                        {
                            maTp.IsResidualGraphVisible = true;
                        }
                        else if (tmpString == "ResidualVsActualGraph")
                        {
                            maTp.IsResidualVsActualGraphVisible = true;
                        }
                        else if (tmpString == "ResidualVsPredictedGraph")
                        {
                            maTp.IsResidualVsPredictedGraphVisible = true;
                        }
                    }
                    seriesDataReader.ReadEndElement();

                    maTp.Title = title;
                    maTp.DrawControl();
                    result.Add(maTp);
                    seriesDataReader.ReadEndElement();
                }
                else if (tmpString == "Exponential Smoothing")
                {
                    ESResultTabPage esTp  = new ESResultTabPage();
                    string          title = seriesDataReader.ReadElementContentAsString();
                    tmpString = seriesDataReader.ReadElementContentAsString();
                    int index = VariableFinder.FindVariableIndex(data.SeriesVariables, tmpString);

                    ExponentialSmoothingForm.ESSpecification tmpEsSpec = new ExponentialSmoothingForm.ESSpecification();
                    seriesDataReader.ReadStartElement();
                    tmpEsSpec.includedObservations = seriesDataReader.ReadElementContentAsInt();
                    tmpEsSpec.alpha            = seriesDataReader.ReadElementContentAsDouble();
                    tmpEsSpec.gamma            = seriesDataReader.ReadElementContentAsDouble();
                    tmpEsSpec.beta             = seriesDataReader.ReadElementContentAsDouble();
                    tmpEsSpec.seasonalLength   = seriesDataReader.ReadElementContentAsInt();
                    tmpEsSpec.sseES            = seriesDataReader.ReadElementContentAsDouble();
                    tmpEsSpec.mseES            = seriesDataReader.ReadElementContentAsDouble();
                    tmpEsSpec.maeES            = seriesDataReader.ReadElementContentAsDouble();
                    tmpEsSpec.mpeES            = seriesDataReader.ReadElementContentAsDouble();
                    tmpEsSpec.mapeES           = seriesDataReader.ReadElementContentAsDouble();
                    tmpEsSpec.initialModel     = seriesDataReader.ReadElementContentAsInt();
                    tmpEsSpec.isMultiplicative = seriesDataReader.ReadElementContentAsBoolean();
                    seriesDataReader.ReadEndElement();

                    ExponentialSmoothingForm.ESComponent tmpEsComp = new ExponentialSmoothingForm.ESComponent();

                    List <double> tmpSmoothed = new List <double>();
                    seriesDataReader.ReadStartElement();
                    while (seriesDataReader.IsStartElement("Value"))
                    {
                        tmpSmoothed.Add(seriesDataReader.ReadElementContentAsDouble());
                    }
                    seriesDataReader.ReadEndElement();
                    tmpEsComp.smoothed = tmpSmoothed.ToArray();

                    List <double> tmpTrend = new List <double>();
                    if (seriesDataReader.IsStartElement("Trend"))
                    {
                        seriesDataReader.ReadStartElement();
                        while (seriesDataReader.IsStartElement("Value"))
                        {
                            tmpTrend.Add(seriesDataReader.ReadElementContentAsDouble());
                        }
                        seriesDataReader.ReadEndElement();
                        tmpEsComp.trend = tmpTrend.ToArray();
                    }

                    List <double> tmpSeasonal = new List <double>();
                    if (seriesDataReader.IsStartElement("Seasonal"))
                    {
                        seriesDataReader.ReadStartElement();
                        while (seriesDataReader.IsStartElement("Value"))
                        {
                            tmpSeasonal.Add(seriesDataReader.ReadElementContentAsDouble());
                        }
                        seriesDataReader.ReadEndElement();
                        tmpEsComp.seasonal = tmpSeasonal.ToArray();
                    }

                    List <double> tmpPredicted = new List <double>();
                    seriesDataReader.ReadStartElement();
                    while (seriesDataReader.IsStartElement("Value"))
                    {
                        tmpPredicted.Add(seriesDataReader.ReadElementContentAsDouble());
                    }
                    seriesDataReader.ReadEndElement();
                    tmpEsComp.predicted = tmpPredicted.ToArray();

                    List <double> tmpResidual = new List <double>();
                    seriesDataReader.ReadStartElement();
                    while (seriesDataReader.IsStartElement("Value"))
                    {
                        tmpResidual.Add(seriesDataReader.ReadElementContentAsDouble());
                    }
                    seriesDataReader.ReadEndElement();
                    tmpEsComp.residual = tmpResidual.ToArray();

                    List <double> tmpForecasted = new List <double>();
                    if (seriesDataReader.IsStartElement("Forecasted"))
                    {
                        seriesDataReader.ReadStartElement();
                        while (seriesDataReader.IsStartElement("Value"))
                        {
                            tmpForecasted.Add(seriesDataReader.ReadElementContentAsDouble());
                        }
                        seriesDataReader.ReadEndElement();
                    }

                    esTp.SetData(data, data.SeriesVariables[index], tmpEsSpec, tmpEsComp, tmpForecasted.ToArray());

                    seriesDataReader.ReadStartElement();
                    while (seriesDataReader.IsStartElement("View"))
                    {
                        tmpString = seriesDataReader.ReadElementContentAsString();
                        if (tmpString == "ESModelSummary")
                        {
                            esTp.IsEsModelSummaryVisible = true;
                        }
                        else if (tmpString == "ExponentialSmoothingDataGrid")
                        {
                            esTp.IsExponentialSmoothingDataGridVisible = true;
                        }
                        else if (tmpString == "Smoothing")
                        {
                            esTp.IsSmoothingVisible = true;
                        }
                        else if (tmpString == "Trend")
                        {
                            esTp.IsSmoothingVisible = true;
                        }
                        else if (tmpString == "Seasonal")
                        {
                            esTp.IsSmoothingVisible = true;
                        }
                        //else if (tmpString == "ActualPredictedResidualDataGrid") maTp.IsActualPredictedResidualDataGridVisible = true;
                        else if (tmpString == "ForecastedDataGrid")
                        {
                            esTp.IsForecastedDataGridVisible = true;
                        }
                        else if (tmpString == "ActualAndPredictedGraph")
                        {
                            esTp.IsActualAndPredictedGraphVisible = true;
                        }
                        else if (tmpString == "ActualAndSmoothedGraph")
                        {
                            esTp.IsActualAndSmoothedGraphVisible = true;
                        }
                        else if (tmpString == "ActualAndForecastedGraph")
                        {
                            esTp.IsActualAndForecastedGraphVisible = true;
                        }
                        else if (tmpString == "ActualVsPredictedGraph")
                        {
                            esTp.IsActualVsPredictedGraphVisible = true;
                        }
                        else if (tmpString == "ResidualGraph")
                        {
                            esTp.IsResidualGraphVisible = true;
                        }
                        else if (tmpString == "ResidualVsActualGraph")
                        {
                            esTp.IsResidualVsActualGraphVisible = true;
                        }
                        else if (tmpString == "ResidualVsPredictedGraph")
                        {
                            esTp.IsResidualVsPredictedGraphVisible = true;
                        }
                    }
                    seriesDataReader.ReadEndElement();

                    esTp.Title = title;
                    esTp.DrawControl();
                    result.Add(esTp);
                    seriesDataReader.ReadEndElement();
                }
                else if (tmpString == "Decomposition")
                {
                    DECResultTabPage decTp = new DECResultTabPage();
                    string           title = seriesDataReader.ReadElementContentAsString();
                    tmpString = seriesDataReader.ReadElementContentAsString();
                    int index = VariableFinder.FindVariableIndex(data.SeriesVariables, tmpString);

                    DecompositionForm.DECSpecification tmpDecSpec = new DecompositionForm.DECSpecification();
                    seriesDataReader.ReadStartElement();
                    tmpDecSpec.includedObservations = seriesDataReader.ReadElementContentAsInt();
                    tmpDecSpec.seasonalLength       = seriesDataReader.ReadElementContentAsInt();
                    tmpDecSpec.sseDEC          = seriesDataReader.ReadElementContentAsDouble();
                    tmpDecSpec.mseDEC          = seriesDataReader.ReadElementContentAsDouble();
                    tmpDecSpec.maeDEC          = seriesDataReader.ReadElementContentAsDouble();
                    tmpDecSpec.mpeDEC          = seriesDataReader.ReadElementContentAsDouble();
                    tmpDecSpec.mapeDEC         = seriesDataReader.ReadElementContentAsDouble();
                    tmpDecSpec.isMultiplikatif = seriesDataReader.ReadElementContentAsBoolean();
                    tmpDecSpec.initialTrend    = seriesDataReader.ReadElementContentAsInt();
                    seriesDataReader.ReadEndElement();

                    List <double> tmpParameters = new List <double>();
                    seriesDataReader.ReadStartElement();
                    while (seriesDataReader.IsStartElement("Value"))
                    {
                        tmpParameters.Add(seriesDataReader.ReadElementContentAsDouble());
                    }
                    seriesDataReader.ReadEndElement();
                    tmpDecSpec.parameters = tmpParameters.ToArray();

                    List <double> tmpSeasonalIdx = new List <double>();
                    seriesDataReader.ReadStartElement();
                    while (seriesDataReader.IsStartElement("Value"))
                    {
                        tmpSeasonalIdx.Add(seriesDataReader.ReadElementContentAsDouble());
                    }
                    seriesDataReader.ReadEndElement();
                    tmpDecSpec.seasonalIdx = tmpSeasonalIdx.ToArray();

                    DecompositionForm.DECComponent tmpDecComp = new DecompositionForm.DECComponent();

                    List <double> tmpTrend = new List <double>();
                    seriesDataReader.ReadStartElement();
                    while (seriesDataReader.IsStartElement("Value"))
                    {
                        tmpTrend.Add(seriesDataReader.ReadElementContentAsDouble());
                    }
                    seriesDataReader.ReadEndElement();
                    tmpDecComp.trend = tmpTrend.ToArray();

                    List <double> tmpDetrend = new List <double>();
                    seriesDataReader.ReadStartElement();
                    while (seriesDataReader.IsStartElement("Value"))
                    {
                        tmpDetrend.Add(seriesDataReader.ReadElementContentAsDouble());
                    }
                    seriesDataReader.ReadEndElement();
                    tmpDecComp.detrend = tmpDetrend.ToArray();

                    List <double> tmpSeasonal = new List <double>();
                    seriesDataReader.ReadStartElement();
                    while (seriesDataReader.IsStartElement("Value"))
                    {
                        tmpSeasonal.Add(seriesDataReader.ReadElementContentAsDouble());
                    }
                    seriesDataReader.ReadEndElement();
                    tmpDecComp.seasonal = tmpSeasonal.ToArray();

                    List <double> tmpDeseasonal = new List <double>();
                    seriesDataReader.ReadStartElement();
                    while (seriesDataReader.IsStartElement("Value"))
                    {
                        tmpDeseasonal.Add(seriesDataReader.ReadElementContentAsDouble());
                    }
                    seriesDataReader.ReadEndElement();
                    tmpDecComp.deseasonal = tmpDeseasonal.ToArray();

                    List <double> tmpPredicted = new List <double>();
                    seriesDataReader.ReadStartElement();
                    while (seriesDataReader.IsStartElement("Value"))
                    {
                        tmpPredicted.Add(seriesDataReader.ReadElementContentAsDouble());
                    }
                    seriesDataReader.ReadEndElement();
                    tmpDecComp.predicted = tmpPredicted.ToArray();

                    List <double> tmpResidual = new List <double>();
                    seriesDataReader.ReadStartElement();
                    while (seriesDataReader.IsStartElement("Value"))
                    {
                        tmpResidual.Add(seriesDataReader.ReadElementContentAsDouble());
                    }
                    seriesDataReader.ReadEndElement();
                    tmpDecComp.residual = tmpResidual.ToArray();

                    List <double> tmpForecasted = new List <double>();
                    if (seriesDataReader.IsStartElement("Forecasted"))
                    {
                        seriesDataReader.ReadStartElement();
                        while (seriesDataReader.IsStartElement("Value"))
                        {
                            tmpForecasted.Add(seriesDataReader.ReadElementContentAsDouble());
                        }
                        seriesDataReader.ReadEndElement();
                    }

                    decTp.SetData(data, data.SeriesVariables[index], tmpDecSpec, tmpDecComp, tmpForecasted.ToArray());

                    seriesDataReader.ReadStartElement();
                    while (seriesDataReader.IsStartElement("View"))
                    {
                        tmpString = seriesDataReader.ReadElementContentAsString();
                        if (tmpString == "DECModelSummary")
                        {
                            decTp.IsDecModelSummaryVisible = true;
                        }
                        else if (tmpString == "DecompositionDataGrid")
                        {
                            decTp.IsDecompositionDataGridVisible = true;
                        }
                        else if (tmpString == "Trend")
                        {
                            decTp.IsTrendVisible = true;
                        }
                        else if (tmpString == "Detrend")
                        {
                            decTp.IsDetrendVisible = true;
                        }
                        else if (tmpString == "Seasonal")
                        {
                            decTp.IsSeasonalVisible = true;
                        }
                        else if (tmpString == "Deseasonal")
                        {
                            decTp.IsDeseasonalVisible = true;
                        }
                        //else if (tmpString == "ActualPredictedResidualDataGrid") maTp.IsActualPredictedResidualDataGridVisible = true;
                        else if (tmpString == "ForecastedDataGrid")
                        {
                            decTp.IsForecastedDataGridVisible = true;
                        }
                        else if (tmpString == "ActualPredictedAndTrendGraph")
                        {
                            decTp.IsActualPredictedAndTrendGraphVisible = true;
                        }
                        else if (tmpString == "ActualAndForecastedGraph")
                        {
                            decTp.IsActualAndForecastedGraphVisible = true;
                        }
                        else if (tmpString == "ActualVsPredictedGraph")
                        {
                            decTp.IsActualVsPredictedGraphVisible = true;
                        }
                        else if (tmpString == "ResidualGraph")
                        {
                            decTp.IsResidualGraphVisible = true;
                        }
                        else if (tmpString == "ResidualVsActualGraph")
                        {
                            decTp.IsResidualVsActualGraphVisible = true;
                        }
                        else if (tmpString == "ResidualVsPredictedGraph")
                        {
                            decTp.IsResidualVsPredictedGraphVisible = true;
                        }
                        else if (tmpString == "DetrendGraph")
                        {
                            decTp.IsDetrendGraphVisible = true;
                        }
                        else if (tmpString == "DeseasonalGraph")
                        {
                            decTp.IsDeseasonalGraphVisible = true;
                        }
                    }
                    seriesDataReader.ReadEndElement();

                    decTp.Title = title;
                    decTp.DrawControl();
                    result.Add(decTp);
                    seriesDataReader.ReadEndElement();
                }
                else if (tmpString == "Trend Analysis")
                {
                    TrendAnalysisResultTabPage trendTp = new TrendAnalysisResultTabPage();
                    string title = seriesDataReader.ReadElementContentAsString();
                    tmpString = seriesDataReader.ReadElementContentAsString();
                    int index = VariableFinder.FindVariableIndex(data.SeriesVariables, tmpString);

                    TrendAnalysisForm.TrendSpecification tmpTrendSpec = new TrendAnalysisForm.TrendSpecification();
                    seriesDataReader.ReadStartElement();
                    tmpTrendSpec.includedObservations = seriesDataReader.ReadElementContentAsInt();
                    tmpTrendSpec.r               = seriesDataReader.ReadElementContentAsDouble();
                    tmpTrendSpec.rSquare         = seriesDataReader.ReadElementContentAsDouble();
                    tmpTrendSpec.rSquareAdjusted = seriesDataReader.ReadElementContentAsDouble();
                    tmpTrendSpec.sse             = seriesDataReader.ReadElementContentAsDouble();
                    tmpTrendSpec.mse             = seriesDataReader.ReadElementContentAsDouble();
                    tmpTrendSpec.initialModel    = seriesDataReader.ReadElementContentAsInt();
                    seriesDataReader.ReadEndElement();

                    List <double> tmpParameters = new List <double>();
                    seriesDataReader.ReadStartElement();
                    while (seriesDataReader.IsStartElement("Value"))
                    {
                        tmpParameters.Add(seriesDataReader.ReadElementContentAsDouble());
                    }
                    seriesDataReader.ReadEndElement();
                    tmpTrendSpec.parameters = tmpParameters.ToArray();

                    List <double> tmpPredicted = new List <double>();
                    seriesDataReader.ReadStartElement();
                    while (seriesDataReader.IsStartElement("Value"))
                    {
                        tmpPredicted.Add(seriesDataReader.ReadElementContentAsDouble());
                    }
                    seriesDataReader.ReadEndElement();

                    List <double> tmpResidual = new List <double>();
                    seriesDataReader.ReadStartElement();
                    while (seriesDataReader.IsStartElement("Value"))
                    {
                        tmpResidual.Add(seriesDataReader.ReadElementContentAsDouble());
                    }
                    seriesDataReader.ReadEndElement();

                    List <double> tmpForecasted = new List <double>();
                    if (seriesDataReader.IsStartElement("Forecasted"))
                    {
                        seriesDataReader.ReadStartElement();
                        while (seriesDataReader.IsStartElement("Value"))
                        {
                            tmpForecasted.Add(seriesDataReader.ReadElementContentAsDouble());
                        }
                        seriesDataReader.ReadEndElement();
                    }

                    trendTp.SetData(data, data.SeriesVariables[index], tmpTrendSpec, tmpPredicted.ToArray(), tmpForecasted.ToArray(), tmpResidual.ToArray());

                    seriesDataReader.ReadStartElement();
                    while (seriesDataReader.IsStartElement("View"))
                    {
                        tmpString = seriesDataReader.ReadElementContentAsString();
                        if (tmpString == "TrendAnalysisModelSummary")
                        {
                            trendTp.IsTrendAnalysisModelSummaryVisible = true;
                        }
                        else if (tmpString == "ActualPredictedResidualDataGrid")
                        {
                            trendTp.IsActualPredictedResidualDataGridVisible = true;
                        }
                        else if (tmpString == "ForecastedDataGrid")
                        {
                            trendTp.IsForecastedDataGridVisible = true;
                        }
                        else if (tmpString == "ActualAndPredictedGraph")
                        {
                            trendTp.IsActualAndPredictedGraphVisible = true;
                        }
                        else if (tmpString == "ActualAndForecastedGraph")
                        {
                            trendTp.IsActualAndForecastedGraphVisible = true;
                        }
                        else if (tmpString == "ActualVsPredictedGraph")
                        {
                            trendTp.IsActualVsPredictedGraphVisible = true;
                        }
                        else if (tmpString == "ResidualGraph")
                        {
                            trendTp.IsResidualGraphVisible = true;
                        }
                        else if (tmpString == "ResidualVsActualGraph")
                        {
                            trendTp.IsResidualVsActualGraphVisible = true;
                        }
                        else if (tmpString == "ResidualVsPredictedGraph")
                        {
                            trendTp.IsResidualVsPredictedGraphVisible = true;
                        }
                    }
                    seriesDataReader.ReadEndElement();

                    trendTp.Title = title;
                    trendTp.DrawControl();
                    result.Add(trendTp);
                    seriesDataReader.ReadEndElement();
                }
                else if (tmpString == "Correlogram")
                {
                    CorrelogramResult cTp   = new CorrelogramResult();
                    string            title = seriesDataReader.ReadElementContentAsString();

                    //string lag = seriesDataReader.ReadContentAsString();
                    int  lag        = seriesDataReader.ReadElementContentAsInt();
                    bool whiteNoise = seriesDataReader.ReadElementContentAsBoolean();

                    //seriesDataReader.ReadStartElement();
                    //string lag = seriesDataReader.ReadElementContentAsString();

                    List <double> tmpData = new List <double>();
                    seriesDataReader.ReadStartElement();
                    while (seriesDataReader.IsStartElement("Value"))
                    {
                        tmpData.Add(seriesDataReader.ReadElementContentAsDouble());
                    }
                    seriesDataReader.ReadEndElement();

                    cTp.SetData(tmpData.ToArray(), lag, whiteNoise);
                    cTp.DisplayResult();
                    cTp.Title = title;
                    result.Add(cTp);
                    seriesDataReader.ReadEndElement();
                }
            }

            seriesDataReader.ReadEndElement();

            return(result);
        }
        /// <summary>
        /// Menulis Result View
        /// </summary>
        /// <param name="tabPages">tab page pada result view</param>
        public void WriteResultPane(FATabStripItemCollection tabPages)
        {
            seriesXmlWriter.WriteStartElement("ResultPane");

            foreach (FATabStripItem tp in tabPages)
            {
                seriesXmlWriter.WriteStartElement("TabPage");

                if (tp is ANNResultTabPage)
                {
                    ANNResultTabPage annTp = (ANNResultTabPage)tp;
                    seriesXmlWriter.WriteElementString("Type", "Neural Network");
                    seriesXmlWriter.WriteElementString("Title", annTp.Title);
                    seriesXmlWriter.WriteElementString("SeriesVariable", annTp.Variable.VariableName);

                    seriesXmlWriter.WriteStartElement("NetworkSpecification");
                    seriesXmlWriter.WriteElementString("InputLayerNeurons", annTp.NetworkProperties.InputLayerNeurons.ToString());
                    seriesXmlWriter.WriteElementString("HiddenLayerNeurons", annTp.NetworkProperties.HiddenLayerNeurons.ToString());
                    seriesXmlWriter.WriteElementString("OutputLayerNeurons", annTp.NetworkProperties.OutputLayerNeurons.ToString());
                    seriesXmlWriter.WriteElementString("ActivationFunction", ((int)(annTp.NetworkProperties.ActivationFunction)).ToString());
                    seriesXmlWriter.WriteElementString("LearningRate", annTp.NetworkProperties.LearningRate.ToString());
                    seriesXmlWriter.WriteElementString("Momentum", annTp.NetworkProperties.Momentum.ToString());
                    seriesXmlWriter.WriteElementString("IncludedObservations", annTp.NetworkProperties.IncludedObservations.ToString());
                    seriesXmlWriter.WriteElementString("Error", annTp.NetworkProperties.Error.ToString());
                    seriesXmlWriter.WriteElementString("MSE", annTp.NetworkProperties.MSE.ToString());
                    seriesXmlWriter.WriteElementString("MAE", annTp.NetworkProperties.MAE.ToString());
                    seriesXmlWriter.WriteFullEndElement();

                    seriesXmlWriter.WriteStartElement("Predicted");
                    foreach (double value in annTp.Predicted)
                    {
                        seriesXmlWriter.WriteElementString("Value", value.ToString());
                    }
                    seriesXmlWriter.WriteFullEndElement();

                    if (annTp.Forecasted != null)
                    {
                        seriesXmlWriter.WriteStartElement("Forecasted");
                        foreach (double value in annTp.Forecasted)
                        {
                            seriesXmlWriter.WriteElementString("Value", value.ToString());
                        }
                        seriesXmlWriter.WriteFullEndElement();
                    }

                    seriesXmlWriter.WriteStartElement("VisibleView");
                    if (annTp.IsAnnModelSummaryVisible)
                    {
                        seriesXmlWriter.WriteElementString("View", "AnnModelSummary");
                    }
                    if (annTp.IsActualPredictedResidualDataGridVisible)
                    {
                        seriesXmlWriter.WriteElementString("View", "ActualPredictedResidualDataGrid");
                    }
                    if (annTp.IsForecastedDataGridVisible)
                    {
                        seriesXmlWriter.WriteElementString("View", "ForecastedDataGrid");
                    }
                    if (annTp.IsActualAndPredictedGraphVisible)
                    {
                        seriesXmlWriter.WriteElementString("View", "ActualAndPredictedGraph");
                    }
                    if (annTp.IsActualAndForecastedGraphVisible)
                    {
                        seriesXmlWriter.WriteElementString("View", "ActualAndForecastedGraph");
                    }
                    if (annTp.IsActualVsPredictedGraphVisible)
                    {
                        seriesXmlWriter.WriteElementString("View", "ActualVsPredictedGraph");
                    }
                    if (annTp.IsResidualGraphVisible)
                    {
                        seriesXmlWriter.WriteElementString("View", "ResidualGraph");
                    }
                    if (annTp.IsResidualVsActualGraphVisible)
                    {
                        seriesXmlWriter.WriteElementString("View", "ResidualVsActualGraph");
                    }
                    if (annTp.IsResidualVsPredictedGraphVisible)
                    {
                        seriesXmlWriter.WriteElementString("View", "ResidualVsPredictedGraph");
                    }
                    seriesXmlWriter.WriteFullEndElement();
                }
                else if (tp is MAResultTabPage)
                {
                    MAResultTabPage maTp = (MAResultTabPage)tp;
                    seriesXmlWriter.WriteElementString("Type", "Moving Average");
                    seriesXmlWriter.WriteElementString("Title", maTp.Title);
                    seriesXmlWriter.WriteElementString("SeriesVariable", maTp.Variable.VariableName);

                    seriesXmlWriter.WriteStartElement("MASpecification");
                    seriesXmlWriter.WriteElementString("includedObservations", maTp.MaProperties.includedObservations.ToString());
                    seriesXmlWriter.WriteElementString("isSingleMA", maTp.MaProperties.isSingleMA.ToString().ToLower());
                    seriesXmlWriter.WriteElementString("orde", maTp.MaProperties.orde.ToString());
                    seriesXmlWriter.WriteElementString("sseMA", maTp.MaProperties.sseMA.ToString());
                    seriesXmlWriter.WriteElementString("mseMA", maTp.MaProperties.mseMA.ToString());
                    seriesXmlWriter.WriteElementString("maeMA", maTp.MaProperties.maeMA.ToString());
                    seriesXmlWriter.WriteElementString("mpeMA", maTp.MaProperties.mpeMA.ToString());
                    seriesXmlWriter.WriteElementString("mapeMA", maTp.MaProperties.mapeMA.ToString());
                    seriesXmlWriter.WriteFullEndElement();

                    seriesXmlWriter.WriteStartElement("SingleMA");
                    foreach (double value in maTp.MaTable.singleSmoothed)
                    {
                        seriesXmlWriter.WriteElementString("Value", value.ToString());
                    }
                    seriesXmlWriter.WriteFullEndElement();

                    if (maTp.MaProperties.isSingleMA == false)
                    {
                        seriesXmlWriter.WriteStartElement("DoubleMA");
                        foreach (double value in maTp.MaTable.doubleSmoothed)
                        {
                            seriesXmlWriter.WriteElementString("Value", value.ToString());
                        }
                        seriesXmlWriter.WriteFullEndElement();
                    }

                    seriesXmlWriter.WriteStartElement("Predicted");
                    foreach (double value in maTp.MaTable.predicted)
                    {
                        seriesXmlWriter.WriteElementString("Value", value.ToString());
                    }
                    seriesXmlWriter.WriteFullEndElement();

                    seriesXmlWriter.WriteStartElement("Residual");
                    foreach (double value in maTp.MaTable.residual)
                    {
                        seriesXmlWriter.WriteElementString("Value", value.ToString());
                    }
                    seriesXmlWriter.WriteFullEndElement();

                    if (maTp.Forecasted != null)
                    {
                        seriesXmlWriter.WriteStartElement("Forecasted");
                        foreach (double value in maTp.Forecasted)
                        {
                            seriesXmlWriter.WriteElementString("Value", value.ToString());
                        }
                        seriesXmlWriter.WriteFullEndElement();
                    }

                    seriesXmlWriter.WriteStartElement("VisibleView");
                    if (maTp.IsMaModelSummaryVisible)
                    {
                        seriesXmlWriter.WriteElementString("View", "MAModelSummary");
                    }
                    if (maTp.IsMovingAverageDataGridVisible)
                    {
                        seriesXmlWriter.WriteElementString("View", "MovingAverageDataGrid");
                    }
                    if (maTp.IsSmoothingVisible)
                    {
                        seriesXmlWriter.WriteElementString("View", "Smoothing");
                    }
                    //if (maTp.IsActualPredictedResidualDataGridVisible) seriesXmlWriter.WriteElementString("View", "ActualPredictedResidualDataGrid");
                    if (maTp.IsForecastedDataGridVisible)
                    {
                        seriesXmlWriter.WriteElementString("View", "ForecastedDataGrid");
                    }
                    if (maTp.IsActualAndPredictedGraphVisible)
                    {
                        seriesXmlWriter.WriteElementString("View", "ActualAndPredictedGraph");
                    }
                    if (maTp.IsActualAndSmoothedGraphVisible)
                    {
                        seriesXmlWriter.WriteElementString("View", "ActualAndSmoothedGraph");
                    }
                    if (maTp.IsActualAndForecastedGraphVisible)
                    {
                        seriesXmlWriter.WriteElementString("View", "ActualAndForecastedGraph");
                    }
                    if (maTp.IsActualVsPredictedGraphVisible)
                    {
                        seriesXmlWriter.WriteElementString("View", "ActualVsPredictedGraph");
                    }
                    if (maTp.IsResidualGraphVisible)
                    {
                        seriesXmlWriter.WriteElementString("View", "ResidualGraph");
                    }
                    if (maTp.IsResidualVsActualGraphVisible)
                    {
                        seriesXmlWriter.WriteElementString("View", "ResidualVsActualGraph");
                    }
                    if (maTp.IsResidualVsPredictedGraphVisible)
                    {
                        seriesXmlWriter.WriteElementString("View", "ResidualVsPredictedGraph");
                    }
                    seriesXmlWriter.WriteFullEndElement();
                }
                else if (tp is ESResultTabPage)
                {
                    ESResultTabPage esTp = (ESResultTabPage)tp;
                    seriesXmlWriter.WriteElementString("Type", "Exponential Smoothing");
                    seriesXmlWriter.WriteElementString("Title", esTp.Title);
                    seriesXmlWriter.WriteElementString("SeriesVariable", esTp.Variable.VariableName);

                    seriesXmlWriter.WriteStartElement("ESSpecification");
                    seriesXmlWriter.WriteElementString("includedObservations", esTp.EsProperties.includedObservations.ToString());
                    seriesXmlWriter.WriteElementString("alpha", esTp.EsProperties.alpha.ToString());
                    seriesXmlWriter.WriteElementString("gamma", esTp.EsProperties.gamma.ToString());
                    seriesXmlWriter.WriteElementString("beta", esTp.EsProperties.beta.ToString());
                    seriesXmlWriter.WriteElementString("seasonalLength", esTp.EsProperties.seasonalLength.ToString());
                    seriesXmlWriter.WriteElementString("sseES", esTp.EsProperties.sseES.ToString());
                    seriesXmlWriter.WriteElementString("mseES", esTp.EsProperties.mseES.ToString());
                    seriesXmlWriter.WriteElementString("maeES", esTp.EsProperties.maeES.ToString());
                    seriesXmlWriter.WriteElementString("mpeES", esTp.EsProperties.mpeES.ToString());
                    seriesXmlWriter.WriteElementString("mapeES", esTp.EsProperties.mapeES.ToString());
                    seriesXmlWriter.WriteElementString("initialModel", esTp.EsProperties.initialModel.ToString());
                    seriesXmlWriter.WriteElementString("isMultiplicative", esTp.EsProperties.isMultiplicative.ToString().ToLower());
                    seriesXmlWriter.WriteFullEndElement();

                    seriesXmlWriter.WriteStartElement("Smoothed");
                    foreach (double value in esTp.EsTable.smoothed)
                    {
                        seriesXmlWriter.WriteElementString("Value", value.ToString());
                    }
                    seriesXmlWriter.WriteFullEndElement();

                    if (esTp.EsProperties.initialModel != 1 && esTp.EsProperties.initialModel != 2)
                    {
                        seriesXmlWriter.WriteStartElement("Trend");
                        foreach (double value in esTp.EsTable.trend)
                        {
                            seriesXmlWriter.WriteElementString("Value", value.ToString());
                        }
                        seriesXmlWriter.WriteFullEndElement();
                    }

                    if (esTp.EsProperties.initialModel == 4)
                    {
                        seriesXmlWriter.WriteStartElement("Seasonal");
                        foreach (double value in esTp.EsTable.seasonal)
                        {
                            seriesXmlWriter.WriteElementString("Value", value.ToString());
                        }
                        seriesXmlWriter.WriteFullEndElement();
                    }

                    seriesXmlWriter.WriteStartElement("Predicted");
                    foreach (double value in esTp.EsTable.predicted)
                    {
                        seriesXmlWriter.WriteElementString("Value", value.ToString());
                    }
                    seriesXmlWriter.WriteFullEndElement();

                    seriesXmlWriter.WriteStartElement("Residual");
                    foreach (double value in esTp.EsTable.residual)
                    {
                        seriesXmlWriter.WriteElementString("Value", value.ToString());
                    }
                    seriesXmlWriter.WriteFullEndElement();

                    if (esTp.Forecasted != null)
                    {
                        seriesXmlWriter.WriteStartElement("Forecasted");
                        foreach (double value in esTp.Forecasted)
                        {
                            seriesXmlWriter.WriteElementString("Value", value.ToString());
                        }
                        seriesXmlWriter.WriteFullEndElement();
                    }

                    seriesXmlWriter.WriteStartElement("VisibleView");
                    if (esTp.IsEsModelSummaryVisible)
                    {
                        seriesXmlWriter.WriteElementString("View", "ESModelSummary");
                    }
                    if (esTp.IsExponentialSmoothingDataGridVisible)
                    {
                        seriesXmlWriter.WriteElementString("View", "ExponentialSmoothingDataGrid");
                    }
                    if (esTp.IsSmoothingVisible)
                    {
                        seriesXmlWriter.WriteElementString("View", "Smoothing");
                    }
                    if (esTp.IsTrendVisible)
                    {
                        seriesXmlWriter.WriteElementString("View", "Trend");
                    }
                    if (esTp.IsSeasonalVisible)
                    {
                        seriesXmlWriter.WriteElementString("View", "Seasonal");
                    }
                    //if (maTp.IsActualPredictedResidualDataGridVisible) seriesXmlWriter.WriteElementString("View", "ActualPredictedResidualDataGrid");
                    if (esTp.IsForecastedDataGridVisible)
                    {
                        seriesXmlWriter.WriteElementString("View", "ForecastedDataGrid");
                    }
                    if (esTp.IsActualAndPredictedGraphVisible)
                    {
                        seriesXmlWriter.WriteElementString("View", "ActualAndPredictedGraph");
                    }
                    if (esTp.IsActualAndSmoothedGraphVisible)
                    {
                        seriesXmlWriter.WriteElementString("View", "ActualAndSmoothedGraph");
                    }

                    if (esTp.IsActualAndForecastedGraphVisible)
                    {
                        seriesXmlWriter.WriteElementString("View", "ActualAndForecastedGraph");
                    }
                    if (esTp.IsActualVsPredictedGraphVisible)
                    {
                        seriesXmlWriter.WriteElementString("View", "ActualVsPredictedGraph");
                    }
                    if (esTp.IsResidualGraphVisible)
                    {
                        seriesXmlWriter.WriteElementString("View", "ResidualGraph");
                    }
                    if (esTp.IsResidualVsActualGraphVisible)
                    {
                        seriesXmlWriter.WriteElementString("View", "ResidualVsActualGraph");
                    }
                    if (esTp.IsResidualVsPredictedGraphVisible)
                    {
                        seriesXmlWriter.WriteElementString("View", "ResidualVsPredictedGraph");
                    }
                    seriesXmlWriter.WriteFullEndElement();
                }
                else if (tp is DECResultTabPage)
                {
                    DECResultTabPage decTp = (DECResultTabPage)tp;
                    seriesXmlWriter.WriteElementString("Type", "Decomposition");
                    seriesXmlWriter.WriteElementString("Title", decTp.Title);
                    seriesXmlWriter.WriteElementString("SeriesVariable", decTp.Variable.VariableName);

                    seriesXmlWriter.WriteStartElement("DECSpecification");
                    seriesXmlWriter.WriteElementString("includedObservations", decTp.DecProperties.includedObservations.ToString());
                    seriesXmlWriter.WriteElementString("seasonalLength", decTp.DecProperties.seasonalLength.ToString());
                    seriesXmlWriter.WriteElementString("sseDEC", decTp.DecProperties.sseDEC.ToString());
                    seriesXmlWriter.WriteElementString("mseDEC", decTp.DecProperties.mseDEC.ToString());
                    seriesXmlWriter.WriteElementString("maeDEC", decTp.DecProperties.maeDEC.ToString());
                    seriesXmlWriter.WriteElementString("mpeDEC", decTp.DecProperties.mpeDEC.ToString());
                    seriesXmlWriter.WriteElementString("mapeDEC", decTp.DecProperties.mapeDEC.ToString());
                    seriesXmlWriter.WriteElementString("isMultiplicative", decTp.DecProperties.isMultiplikatif.ToString().ToLower());
                    seriesXmlWriter.WriteElementString("initialTrend", decTp.DecProperties.initialTrend.ToString());
                    seriesXmlWriter.WriteFullEndElement();

                    seriesXmlWriter.WriteStartElement("Parameters");
                    foreach (double value in decTp.DecProperties.parameters)
                    {
                        seriesXmlWriter.WriteElementString("Value", value.ToString());
                    }
                    seriesXmlWriter.WriteFullEndElement();

                    seriesXmlWriter.WriteStartElement("SeasonalIndex");
                    foreach (double value in decTp.DecProperties.seasonalIdx)
                    {
                        seriesXmlWriter.WriteElementString("Value", value.ToString());
                    }
                    seriesXmlWriter.WriteFullEndElement();

                    seriesXmlWriter.WriteStartElement("Trend");
                    foreach (double value in decTp.DecTable.trend)
                    {
                        seriesXmlWriter.WriteElementString("Value", value.ToString());
                    }
                    seriesXmlWriter.WriteFullEndElement();

                    seriesXmlWriter.WriteStartElement("Detrend");
                    foreach (double value in decTp.DecTable.detrend)
                    {
                        seriesXmlWriter.WriteElementString("Value", value.ToString());
                    }
                    seriesXmlWriter.WriteFullEndElement();

                    seriesXmlWriter.WriteStartElement("Seasonal");
                    foreach (double value in decTp.DecTable.seasonal)
                    {
                        seriesXmlWriter.WriteElementString("Value", value.ToString());
                    }
                    seriesXmlWriter.WriteFullEndElement();

                    seriesXmlWriter.WriteStartElement("Deseasonal");
                    foreach (double value in decTp.DecTable.deseasonal)
                    {
                        seriesXmlWriter.WriteElementString("Value", value.ToString());
                    }
                    seriesXmlWriter.WriteFullEndElement();

                    seriesXmlWriter.WriteStartElement("Predicted");
                    foreach (double value in decTp.DecTable.predicted)
                    {
                        seriesXmlWriter.WriteElementString("Value", value.ToString());
                    }
                    seriesXmlWriter.WriteFullEndElement();

                    seriesXmlWriter.WriteStartElement("Residual");
                    foreach (double value in decTp.DecTable.residual)
                    {
                        seriesXmlWriter.WriteElementString("Value", value.ToString());
                    }
                    seriesXmlWriter.WriteFullEndElement();

                    if (decTp.Forecasted != null)
                    {
                        seriesXmlWriter.WriteStartElement("Forecasted");
                        foreach (double value in decTp.Forecasted)
                        {
                            seriesXmlWriter.WriteElementString("Value", value.ToString());
                        }
                        seriesXmlWriter.WriteFullEndElement();
                    }

                    seriesXmlWriter.WriteStartElement("VisibleView");
                    if (decTp.IsDecModelSummaryVisible)
                    {
                        seriesXmlWriter.WriteElementString("View", "DECModelSummary");
                    }
                    if (decTp.IsDecompositionDataGridVisible)
                    {
                        seriesXmlWriter.WriteElementString("View", "DecompositionDataGrid");
                    }
                    if (decTp.IsTrendVisible)
                    {
                        seriesXmlWriter.WriteElementString("View", "Trend");
                    }
                    //if (maTp.IsActualPredictedResidualDataGridVisible) seriesXmlWriter.WriteElementString("View", "ActualPredictedResidualDataGrid");
                    if (decTp.IsDetrendVisible)
                    {
                        seriesXmlWriter.WriteElementString("View", "Detrend");
                    }
                    if (decTp.IsSeasonalVisible)
                    {
                        seriesXmlWriter.WriteElementString("View", "Seasonal");
                    }
                    if (decTp.IsDeseasonalVisible)
                    {
                        seriesXmlWriter.WriteElementString("View", "Deseasonal");
                    }
                    if (decTp.IsForecastedDataGridVisible)
                    {
                        seriesXmlWriter.WriteElementString("View", "ForecastedDataGrid");
                    }
                    if (decTp.IsActualPredictedAndTrendGraphVisible)
                    {
                        seriesXmlWriter.WriteElementString("View", "ActualPredictedAndTrendGraph");
                    }
                    if (decTp.IsActualAndForecastedGraphVisible)
                    {
                        seriesXmlWriter.WriteElementString("View", "ActualAndForecastedGraph");
                    }
                    if (decTp.IsActualVsPredictedGraphVisible)
                    {
                        seriesXmlWriter.WriteElementString("View", "ActualVsPredictedGraph");
                    }
                    if (decTp.IsResidualGraphVisible)
                    {
                        seriesXmlWriter.WriteElementString("View", "ResidualGraph");
                    }
                    if (decTp.IsResidualVsActualGraphVisible)
                    {
                        seriesXmlWriter.WriteElementString("View", "ResidualVsActualGraph");
                    }
                    if (decTp.IsResidualVsPredictedGraphVisible)
                    {
                        seriesXmlWriter.WriteElementString("View", "ResidualVsPredictedGraph");
                    }
                    if (decTp.IsDetrendGraphVisible)
                    {
                        seriesXmlWriter.WriteElementString("View", "DetrendGraph");
                    }
                    if (decTp.IsDeseasonalVisible)
                    {
                        seriesXmlWriter.WriteElementString("View", "DeseasonalGraph");
                    }
                    seriesXmlWriter.WriteFullEndElement();
                }
                else if (tp is TrendAnalysisResultTabPage)
                {
                    TrendAnalysisResultTabPage trendTp = (TrendAnalysisResultTabPage)tp;
                    seriesXmlWriter.WriteElementString("Type", "Trend Analysis");
                    seriesXmlWriter.WriteElementString("Title", trendTp.Title);
                    seriesXmlWriter.WriteElementString("SeriesVariable", trendTp.Variable.VariableName);

                    seriesXmlWriter.WriteStartElement("TrendAnalysisSpecification");
                    seriesXmlWriter.WriteElementString("includedObservations", trendTp.TrendProperties.includedObservations.ToString());
                    seriesXmlWriter.WriteElementString("R", trendTp.TrendProperties.r.ToString());
                    seriesXmlWriter.WriteElementString("RSquare", trendTp.TrendProperties.rSquare.ToString());
                    seriesXmlWriter.WriteElementString("RSquareAdjusted", trendTp.TrendProperties.rSquareAdjusted.ToString());
                    seriesXmlWriter.WriteElementString("sse", trendTp.TrendProperties.sse.ToString());
                    seriesXmlWriter.WriteElementString("mse", trendTp.TrendProperties.mse.ToString());
                    seriesXmlWriter.WriteElementString("initialModel", trendTp.TrendProperties.initialModel.ToString());
                    seriesXmlWriter.WriteFullEndElement();

                    seriesXmlWriter.WriteStartElement("Parameters");
                    foreach (double value in trendTp.TrendProperties.parameters)
                    {
                        seriesXmlWriter.WriteElementString("Value", value.ToString());
                    }
                    seriesXmlWriter.WriteFullEndElement();

                    seriesXmlWriter.WriteStartElement("Predicted");
                    foreach (double value in trendTp.Predicted)
                    {
                        seriesXmlWriter.WriteElementString("Value", value.ToString());
                    }
                    seriesXmlWriter.WriteFullEndElement();

                    seriesXmlWriter.WriteStartElement("Residual");
                    foreach (double value in trendTp.Residual)
                    {
                        seriesXmlWriter.WriteElementString("Value", value.ToString());
                    }
                    seriesXmlWriter.WriteFullEndElement();

                    if (trendTp.Forecasted != null)
                    {
                        seriesXmlWriter.WriteStartElement("Forecasted");
                        foreach (double value in trendTp.Forecasted)
                        {
                            seriesXmlWriter.WriteElementString("Value", value.ToString());
                        }
                        seriesXmlWriter.WriteFullEndElement();
                    }

                    seriesXmlWriter.WriteStartElement("VisibleView");
                    if (trendTp.IsTrendAnalysisModelSummaryVisible)
                    {
                        seriesXmlWriter.WriteElementString("View", "TrendAnalysisModelSummary");
                    }
                    if (trendTp.IsActualPredictedResidualDataGridVisible)
                    {
                        seriesXmlWriter.WriteElementString("View", "ActualPredictedResidualDataGrid");
                    }
                    if (trendTp.IsForecastedDataGridVisible)
                    {
                        seriesXmlWriter.WriteElementString("View", "ForecastedDataGrid");
                    }
                    if (trendTp.IsActualAndPredictedGraphVisible)
                    {
                        seriesXmlWriter.WriteElementString("View", "ActualAndPredictedGraph");
                    }
                    if (trendTp.IsActualAndForecastedGraphVisible)
                    {
                        seriesXmlWriter.WriteElementString("View", "ActualAndForecastedGraph");
                    }
                    if (trendTp.IsActualVsPredictedGraphVisible)
                    {
                        seriesXmlWriter.WriteElementString("View", "ActualVsPredictedGraph");
                    }
                    if (trendTp.IsResidualGraphVisible)
                    {
                        seriesXmlWriter.WriteElementString("View", "ResidualGraph");
                    }
                    if (trendTp.IsResidualVsActualGraphVisible)
                    {
                        seriesXmlWriter.WriteElementString("View", "ResidualVsActualGraph");
                    }
                    if (trendTp.IsResidualVsPredictedGraphVisible)
                    {
                        seriesXmlWriter.WriteElementString("View", "ResidualVsPredictedGraph");
                    }
                    seriesXmlWriter.WriteFullEndElement();
                }
                else if (tp is CorrelogramResult)
                {
                    CorrelogramResult cTp = (CorrelogramResult)tp;
                    seriesXmlWriter.WriteElementString("Type", "Correlogram");
                    seriesXmlWriter.WriteElementString("Title", cTp.Title);

                    seriesXmlWriter.WriteElementString("Lag", cTp.Lag.ToString());
                    seriesXmlWriter.WriteElementString("WhiteNoise", cTp.WhiteNoiseAcf.ToString().ToLower());

                    seriesXmlWriter.WriteStartElement("Data");
                    foreach (double value in cTp.Data)
                    {
                        seriesXmlWriter.WriteElementString("Value", value.ToString());
                    }
                    seriesXmlWriter.WriteFullEndElement();
                }
                else if (tp is LRResultTabPage)
                {
                    LRResultTabPage lrTp = (LRResultTabPage)tp;
                    seriesXmlWriter.WriteElementString("Type", "Linear Regression");
                    seriesXmlWriter.WriteElementString("Title", lrTp.Title);
                    seriesXmlWriter.WriteElementString("DependentVariable", lrTp.DependentVariable.VariableName);

                    seriesXmlWriter.WriteStartElement("IndependentVariables");
                    foreach (SeriesVariable var in lrTp.IndependentVariables)
                    {
                        seriesXmlWriter.WriteElementString("Variable", var.VariableName);
                    }
                    seriesXmlWriter.WriteFullEndElement();

                    seriesXmlWriter.WriteElementString("IsDurbinWatsonVisible", lrTp.IsDurbinWatsonVisible.ToString().ToLower());
                    seriesXmlWriter.WriteElementString("IsPartialCorrelationVisible", lrTp.IsPartialCorrelationVisible.ToString().ToLower());
                    seriesXmlWriter.WriteElementString("IsVIFForPredictorsVisible", lrTp.IsVIFForPredictorsVisible.ToString().ToLower());
                    seriesXmlWriter.WriteElementString("IsConfidenceIntervalForParametersVisible", lrTp.IsConfidenceIntervalForParametersVisible.ToString().ToLower());

                    seriesXmlWriter.WriteStartElement("LRSpecification");
                    seriesXmlWriter.WriteElementString("IncludedObservations", lrTp.LRProperties.IncludedObservations.ToString());
                    seriesXmlWriter.WriteElementString("IsMultiple", lrTp.LRProperties.IsMultiple.ToString().ToLower());
                    seriesXmlWriter.WriteElementString("R", lrTp.LRProperties.R.ToString());
                    seriesXmlWriter.WriteElementString("RSquare", lrTp.LRProperties.RSquare.ToString());
                    seriesXmlWriter.WriteElementString("AdjRSquare", lrTp.LRProperties.AdjRSquare.ToString());
                    seriesXmlWriter.WriteElementString("StandardError", lrTp.LRProperties.StandardError.ToString());
                    seriesXmlWriter.WriteElementString("DurbinWatson", lrTp.LRProperties.DurbinWatson.ToString());
                    seriesXmlWriter.WriteElementString("F", lrTp.LRProperties.F.ToString());
                    seriesXmlWriter.WriteElementString("SigOfF", lrTp.LRProperties.SigOfF.ToString());
                    seriesXmlWriter.WriteElementString("SSE", lrTp.LRProperties.SSE.ToString());
                    seriesXmlWriter.WriteElementString("SSR", lrTp.LRProperties.SSR.ToString());
                    seriesXmlWriter.WriteElementString("SST", lrTp.LRProperties.SST.ToString());
                    seriesXmlWriter.WriteElementString("MSE", lrTp.LRProperties.MSE.ToString());
                    seriesXmlWriter.WriteElementString("MSR", lrTp.LRProperties.MSR.ToString());
                    seriesXmlWriter.WriteStartElement("Parameters");
                    foreach (double val in lrTp.LRProperties.Parameters)
                    {
                        seriesXmlWriter.WriteElementString("Value", val.ToString());
                    }
                    seriesXmlWriter.WriteFullEndElement();
                    seriesXmlWriter.WriteStartElement("StandardErrorOfParameters");
                    foreach (double val in lrTp.LRProperties.StandardErrorOfParameters)
                    {
                        seriesXmlWriter.WriteElementString("Value", val.ToString());
                    }
                    seriesXmlWriter.WriteFullEndElement();
                    seriesXmlWriter.WriteStartElement("t");
                    foreach (double val in lrTp.LRProperties.t)
                    {
                        seriesXmlWriter.WriteElementString("Value", val.ToString());
                    }
                    seriesXmlWriter.WriteFullEndElement();
                    seriesXmlWriter.WriteStartElement("SigOfT");
                    foreach (double val in lrTp.LRProperties.SigOfT)
                    {
                        seriesXmlWriter.WriteElementString("Value", val.ToString());
                    }
                    seriesXmlWriter.WriteFullEndElement();
                    seriesXmlWriter.WriteStartElement("LowerBoundForParameters");
                    foreach (double val in lrTp.LRProperties.LowerBoundForParameters)
                    {
                        seriesXmlWriter.WriteElementString("Value", val.ToString());
                    }
                    seriesXmlWriter.WriteFullEndElement();
                    seriesXmlWriter.WriteStartElement("UpperBoundForParameters");
                    foreach (double val in lrTp.LRProperties.UpperBoundForParameters)
                    {
                        seriesXmlWriter.WriteElementString("Value", val.ToString());
                    }
                    seriesXmlWriter.WriteFullEndElement();
                    seriesXmlWriter.WriteStartElement("VIFForpredictors");
                    foreach (double val in lrTp.LRProperties.VIFForpredictors)
                    {
                        seriesXmlWriter.WriteElementString("Value", val.ToString());
                    }
                    seriesXmlWriter.WriteFullEndElement();
                    seriesXmlWriter.WriteStartElement("Correlations");
                    foreach (double val in lrTp.LRProperties.Correlations)
                    {
                        seriesXmlWriter.WriteElementString("Value", val.ToString());
                    }
                    seriesXmlWriter.WriteFullEndElement();
                    seriesXmlWriter.WriteStartElement("PartialCorrelations");
                    foreach (double val in lrTp.LRProperties.PartialCorrelations)
                    {
                        seriesXmlWriter.WriteElementString("Value", val.ToString());
                    }
                    seriesXmlWriter.WriteFullEndElement();
                    seriesXmlWriter.WriteFullEndElement();

                    seriesXmlWriter.WriteStartElement("LRComponent");
                    seriesXmlWriter.WriteStartElement("Actual");
                    foreach (double val in lrTp.LRTable.Actual)
                    {
                        seriesXmlWriter.WriteElementString("Value", val.ToString());
                    }
                    seriesXmlWriter.WriteFullEndElement();
                    seriesXmlWriter.WriteStartElement("Predicted");
                    foreach (double val in lrTp.LRTable.Predicted)
                    {
                        seriesXmlWriter.WriteElementString("Value", val.ToString());
                    }
                    seriesXmlWriter.WriteFullEndElement();
                    seriesXmlWriter.WriteStartElement("Residual");
                    foreach (double val in lrTp.LRTable.Residual)
                    {
                        seriesXmlWriter.WriteElementString("Value", val.ToString());
                    }
                    seriesXmlWriter.WriteFullEndElement();
                    seriesXmlWriter.WriteStartElement("ExpectedResidual");
                    foreach (double val in lrTp.LRTable.ExpectedResidual)
                    {
                        seriesXmlWriter.WriteElementString("Value", val.ToString());
                    }
                    seriesXmlWriter.WriteFullEndElement();
                    seriesXmlWriter.WriteFullEndElement();

                    if (lrTp.IsForcastedTableVisible)
                    {
                        seriesXmlWriter.WriteStartElement("LRForcasting");
                        seriesXmlWriter.WriteElementString("ForcastingStep", lrTp.ForcastedTime.Length.ToString());
                        seriesXmlWriter.WriteStartElement("TestValues");
                        int i = 0;
                        foreach (SeriesVariable var in lrTp.IndependentVariables)
                        {
                            seriesXmlWriter.WriteStartElement(var.VariableName);
                            for (int j = 0; j < lrTp.ForcastedData.Length; j++)
                            {
                                seriesXmlWriter.WriteElementString("Value", lrTp.TestValues[i, j].ToString());
                            }
                            i++;
                            seriesXmlWriter.WriteFullEndElement();
                        }
                        seriesXmlWriter.WriteFullEndElement();
                        seriesXmlWriter.WriteStartElement("ForcastedValues");
                        seriesXmlWriter.WriteStartElement(lrTp.DependentVariable.VariableName);
                        foreach (double val in lrTp.ForcastedData)
                        {
                            seriesXmlWriter.WriteElementString("Value", val.ToString());
                        }
                        seriesXmlWriter.WriteFullEndElement();
                        seriesXmlWriter.WriteFullEndElement();
                        seriesXmlWriter.WriteStartElement("ForcastedTime");
                        foreach (string val in lrTp.ForcastedTime)
                        {
                            seriesXmlWriter.WriteElementString("Value", val);
                        }
                        seriesXmlWriter.WriteFullEndElement();
                        seriesXmlWriter.WriteFullEndElement();
                    }


                    seriesXmlWriter.WriteStartElement("VisibleView");
                    seriesXmlWriter.WriteElementString("View", "LRModelSummary");
                    if (lrTp.IsAnovaTableVisible)
                    {
                        seriesXmlWriter.WriteElementString("View", "LRAnova");
                    }
                    if (lrTp.IsCoefficientTableVisible)
                    {
                        seriesXmlWriter.WriteElementString("View", "LRCoefficients");
                    }
                    if (lrTp.IsDataTableVisible)
                    {
                        seriesXmlWriter.WriteElementString("View", "LRActualPredictedResidual");
                    }
                    if (lrTp.IsForcastedTableVisible)
                    {
                        seriesXmlWriter.WriteElementString("View", "Forcasted");
                    }
                    if (lrTp.IsResidualGraphVisible)
                    {
                        seriesXmlWriter.WriteElementString("View", "LRResidualGraph");
                    }
                    if (lrTp.IsResidualVsPredictedGraphVisible)
                    {
                        seriesXmlWriter.WriteElementString("View", "LRResidualVsPredictedGraph");
                    }
                    if (lrTp.IsNormalProbabilityPlotVisible)
                    {
                        seriesXmlWriter.WriteElementString("View", "LRNormalProbabilityPlot");
                    }
                    seriesXmlWriter.WriteFullEndElement();
                }

                seriesXmlWriter.WriteFullEndElement();
            }

            seriesXmlWriter.WriteFullEndElement();


            seriesXmlWriter.WriteEndElement();
            seriesXmlWriter.WriteEndDocument();
            seriesXmlWriter.Flush();
        }