Free cookie consent management tool by TermsFeed Policy Generator

source: branches/DataAnalysis/HeuristicLab.Problems.DataAnalysis.MultiVariate.TimeSeriesPrognosis.Views/3.3/PrognosisView.cs @ 12092

Last change on this file since 12092 was 5010, checked in by gkronber, 14 years ago

commit of local changes in data-analysis feature exploration branch. #1142

File size: 4.5 KB
Line 
1#region License Information
2/* HeuristicLab
3 * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
4 *
5 * This file is part of HeuristicLab.
6 *
7 * HeuristicLab is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation, either version 3 of the License, or
10 * (at your option) any later version.
11 *
12 * HeuristicLab is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
19 */
20#endregion
21using System;
22using System.Linq;
23using System.Windows.Forms;
24using HeuristicLab.Data;
25using HeuristicLab.Data.Views;
26using HeuristicLab.MainForm;
27using HeuristicLab.MainForm.WindowsForms;
28using System.Collections.Generic;
29using HeuristicLab.Problems.DataAnalysis.MultiVariate.TimeSeriesPrognosis.Symbolic;
30
31namespace HeuristicLab.Problems.DataAnalysis.MultiVariate.TimeSeriesPrognosis.Views {
32  [View("Prognosis View")]
33  [Content(typeof(SymbolicTimeSeriesPrognosisSolution))]
34  public partial class PrognosisView : AsynchronousContentView {
35    private const string TARGETVARIABLE_SERIES_NAME = "TargetVariable";
36    private const string ESTIMATEDVALUES_SERIES_NAME = "EstimatedValues";
37    private int currentTimePoint;
38    public new SymbolicTimeSeriesPrognosisSolution Content {
39      get { return (SymbolicTimeSeriesPrognosisSolution)base.Content; }
40      set {
41        base.Content = value;
42      }
43    }
44
45    public PrognosisView()
46      : base() {
47      InitializeComponent();
48    }
49
50    #region events
51    protected override void RegisterContentEvents() {
52      base.RegisterContentEvents();
53      Content.ProblemDataChanged += new EventHandler(Content_ProblemDataChanged);
54    }
55
56    protected override void DeregisterContentEvents() {
57      base.DeregisterContentEvents();
58      Content.ProblemDataChanged -= new EventHandler(Content_ProblemDataChanged);
59    }
60
61    void Content_ProblemDataChanged(object sender, EventArgs e) {
62      OnContentChanged();
63    }
64
65    protected override void OnContentChanged() {
66      base.OnContentChanged();
67      if (Content != null) {
68        UpdateRowIndexValue();
69        UpdateEstimatedValues();
70      }
71    }
72
73
74    private void UpdateEstimatedValues() {
75      if (InvokeRequired) Invoke((Action)UpdateEstimatedValues);
76      DoubleMatrix matrix = null;
77        if (Content != null) {
78          matrix = CalculateMatrix();
79        }
80        valuesView.Content = matrix;
81    }
82
83    public DoubleMatrix CalculateMatrix() {
84      DoubleMatrix matrix = null;
85      IEnumerable<string> targetVariables = Content.ProblemData.TargetVariables.CheckedItems.Select(x => x.Value.Value);
86      List<double[]> prognosis = Content.GetPrognosis(currentTimePoint).ToList();
87      double[,] values = new double[prognosis.Count, targetVariables.Count() * 2];
88      for (int row = 0; row < prognosis.Count; row++) {
89        int col = 0;
90        int t = currentTimePoint + row;
91        foreach (string targetVariable in targetVariables) {
92          values[row, col++] = t < Content.ProblemData.Dataset.Rows ? Content.ProblemData.Dataset[targetVariable, t] : double.NaN;
93          values[row, col++] = prognosis[row][(col - 1) / 2];
94        }
95      }
96      matrix = new DoubleMatrix(values);
97      string[] partitions = new string[] { "(original)", "(estimated)" };
98      matrix.ColumnNames = from targetVariable in targetVariables
99                           from partition in partitions
100                           select targetVariable + " " + partition;
101      ;
102      return matrix;
103    }
104
105    private void UpdateRowIndexValue() {
106      if(timePointValue.Content!=null)
107        timePointValue.Content.ValueChanged -= new EventHandler(Content_ValueChanged);
108      currentTimePoint = Content.ProblemData.TestSamplesStart.Value;
109      timePointValue.Content = new  IntValue(currentTimePoint);
110      timePointValue.Locked = timePointValue.ReadOnly = false;
111      timePointValue.Content.ValueChanged += new EventHandler(Content_ValueChanged);
112    }
113
114    void Content_ValueChanged(object sender, EventArgs e) {
115      currentTimePoint = int.Parse(timePointValue.Content.GetValue());
116      UpdateEstimatedValues();
117    }
118    #endregion
119  }
120}
Note: See TracBrowser for help on using the repository browser.