#region License Information
/* HeuristicLab
* Copyright (C) 2002-2013 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
*
* This file is part of HeuristicLab.
*
* HeuristicLab is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* HeuristicLab is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with HeuristicLab. If not, see .
*/
#endregion
using System;
using System.Collections.Generic;
using HeuristicLab.Analysis;
using HeuristicLab.Core;
using HeuristicLab.Data;
namespace HeuristicLab.DataPreprocessing {
public class ChartLogic : IChartLogic {
private ITransactionalPreprocessingData preprocessingData;
public ChartLogic(ITransactionalPreprocessingData preprocessingData) {
this.preprocessingData = preprocessingData;
}
public DataRow CreateDataRow(string variableName, DataRowVisualProperties.DataRowChartType chartType) {
IList values = preprocessingData.GetValues(variableName);
//TODO: handle NAN values correctly
// CalculateHistogram in DataTableView fails with NAN values ( Min(), Max() returns NAN)
ReplayNANwithZero(values);
DataRow row = new DataRow(variableName, "", values);
row.VisualProperties.ChartType = chartType;
return row;
}
private void ReplayNANwithZero(IList values) {
for (int i = 0; i < values.Count; i++) {
if (Double.IsNaN(values[i]))
values[i] = 0;
}
}
private IEnumerable GetVariableNames() {
List doubleVariableNames = new List();
//only return variable names from type double
foreach (string variableName in preprocessingData.VariableNames) {
if (preprocessingData.IsType(preprocessingData.GetColumnIndex(variableName)))
doubleVariableNames.Add(variableName);
}
return doubleVariableNames;
}
public ICheckedItemList CreateVariableItemList() {
ICheckedItemList itemList = new CheckedItemList();
foreach (string name in GetVariableNames()) {
itemList.Add(new StringValue(name), true);
}
return new ReadOnlyCheckedItemList(itemList);
}
public event DataPreprocessingChangedEventHandler Changed {
add { preprocessingData.Changed += value; }
remove { preprocessingData.Changed -= value; }
}
public string GetVariableNameByIndex(int index) {
return preprocessingData.GetVariableName(index);
}
public List CreateAllDataRows(DataRowVisualProperties.DataRowChartType chartType) {
List dataRows = new List();
foreach (var name in GetVariableNames())
dataRows.Add(CreateDataRow(name, chartType));
return dataRows;
}
}
}