Free cookie consent management tool by TermsFeed Policy Generator

source: trunk/sources/HeuristicLab.CEDMA.Charting/3.3/VisualMatrix.cs @ 2295

Last change on this file since 2295 was 2295, checked in by mkommend, 15 years ago

adapted CEDMA.BubbleChart to meet needs of new ModelAnalyzer (ticket #723)

File size: 4.9 KB
Line 
1using System;
2using System.Collections.Generic;
3using System.Linq;
4using System.Text;
5using HeuristicLab.Core;
6using HeuristicLab.SparseMatrix;
7
8namespace HeuristicLab.CEDMA.Charting {
9  public class VisualMatrix : ItemBase {
10    private Dictionary<string, Dictionary<object, double>> categoricalValueIndices;
11    private Matrix matrix;
12
13    public VisualMatrix() {
14      this.rows = new List<VisualMatrixRow>();
15      this.categoricalVariables = new List<string>();
16      this.ordinalVariables = new List<string>();
17      this.multiDimensionalCategoricalVariables = new List<string>();
18      this.multiDimensionalOrdinalVariables = new List<string>();
19      this.categoricalValueIndices = new Dictionary<string, Dictionary<object, double>>();    }
20
21    public VisualMatrix(Matrix matrix, IEnumerable<string> categoricalVariables, IEnumerable<string> ordinalVariables,
22      IEnumerable<string> multiDimensionalCategoricalVariables, IEnumerable<string> multiDimensionalOrdinalVariables)
23      : this() {
24      this.matrix = matrix;
25      this.matrix.Changed += new EventHandler(MatrixChanged);
26
27      foreach (MatrixRow row in matrix.GetRows())
28        rows.Add(new VisualMatrixRow(row));
29
30      this.categoricalVariables.AddRange(categoricalVariables);
31      this.ordinalVariables.AddRange(ordinalVariables);
32      this.multiDimensionalCategoricalVariables.AddRange(multiDimensionalCategoricalVariables);
33      this.multiDimensionalOrdinalVariables.AddRange(multiDimensionalOrdinalVariables);
34    }
35
36    private List<VisualMatrixRow> rows;
37    public IEnumerable<VisualMatrixRow> Rows {
38      get {
39        return rows;
40      }
41    }
42
43    public void AddRow(VisualMatrixRow row) {
44      this.rows.Add(row);
45    }
46
47    public void RemoveRow(VisualMatrixRow row) {
48      this.rows.Remove(row);
49    }
50
51    public void ClearAllRows(VisualMatrixRow row) {
52      this.rows.Clear();
53    }
54
55    private List<string> categoricalVariables;
56    public IEnumerable<string> CategoricalVariables {
57      get { return categoricalVariables; }
58    }
59
60    public void AddCategoricalVariable(string name) {     
61      this.categoricalVariables.Add(name);
62    }
63
64    public void RemoveCategoricalVariable(string name) {
65      this.categoricalVariables.Remove(name);
66    }
67
68    public void ClearCategoricalVariables() {
69      this.categoricalVariables.Clear();
70    }
71
72    private List<string> ordinalVariables;
73    public IEnumerable<string> OrdinalVariables {
74      get { return ordinalVariables; }
75    }
76
77    public void AddOrdinalVariable(string name) {
78      this.ordinalVariables.Add(name);
79    }
80
81    public void RemoveOrdinalVariable(string name) {
82      this.ordinalVariables.Remove(name);
83    }
84
85    public void ClearOrdinalVariables() {
86      this.ordinalVariables.Clear();
87    }
88
89    private List<string> multiDimensionalOrdinalVariables;
90    public IEnumerable<string> MultiDimensionalOrdinalVariables {
91      get { return multiDimensionalOrdinalVariables; }
92    }
93
94    public void AddMultiDimensionalOrdinalVariable(string name) {
95      this.multiDimensionalOrdinalVariables.Add(name);
96    }
97
98    public void RemoveMultiDimensionalOrdinalVariable(string name) {
99      this.multiDimensionalOrdinalVariables.Remove(name);
100    }
101
102    public void ClearMultiDimensionalOrdinalVariables() {
103      this.multiDimensionalOrdinalVariables.Clear();
104    }
105
106    private List<string> multiDimensionalCategoricalVariables;
107    public IEnumerable<string> MultiDimensionalCategoricalVariables {
108      get { return multiDimensionalCategoricalVariables; }
109    }
110
111    public void AddMultiDimensionalCategoricalVariable(string name) {
112      this.multiDimensionalCategoricalVariables.Add(name);
113    }
114
115    public void RemoveMultiDimensionalCategoricalVariable(string name) {
116      this.multiDimensionalCategoricalVariables.Remove(name);
117    }
118
119    public void ClearMultiDimensionalCategoricalVariables() {
120      this.multiDimensionalCategoricalVariables.Clear();
121    }
122
123    public double IndexOfCategoricalValue(string variable, object value) {
124      if (value == null) return double.NaN;
125      Dictionary<object, double> valueToIndexMap;
126      if (categoricalValueIndices.ContainsKey(variable)) {
127        valueToIndexMap = categoricalValueIndices[variable];
128      } else {
129        valueToIndexMap = new Dictionary<object, double>();
130        categoricalValueIndices[variable] = valueToIndexMap;
131      }
132      if (!valueToIndexMap.ContainsKey(value)) {
133        if (valueToIndexMap.Values.Count == 0) valueToIndexMap[value] = 1.0;
134        else valueToIndexMap[value] = 1.0 + valueToIndexMap.Values.Max();
135      }
136      return valueToIndexMap[value];
137    }
138
139    private void MatrixChanged(object sender, EventArgs e) {
140      this.FireChanged();
141    }
142
143    public IEnumerable<string> Attributes {
144      get { return CategoricalVariables.Concat(OrdinalVariables); }
145    }
146  }
147}
Note: See TracBrowser for help on using the repository browser.