Code development platform for open source projects from the European Union institutions :large_blue_circle: EU Login authentication by SMS has been phased out. To see alternatives please check here

Skip to content
Snippets Groups Projects
Commit ec3ad9f0 authored by Michael KRISPER's avatar Michael KRISPER
Browse files

RetarderLossMapReader simplified

parent 2f992168
Branches
Tags
No related merge requests found
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using TUGraz.VectoCommon.Exceptions;
using TUGraz.VectoCommon.Models;
using TUGraz.VectoCommon.Utils;
using TUGraz.VectoCore.Models.SimulationComponent.Data;
using TUGraz.VectoCore.Utils;
namespace TUGraz.VectoCore.Models.SimulationComponent.Data
namespace TUGraz.VectoCore.InputData.Reader.ComponentData
{
public class RetarderLossMapReader
public static class RetarderLossMapReader
{
/// <summary>
/// Read the retarder loss map from a file.
/// </summary>
/// <param name="fileName"></param>
/// <returns></returns>
public static RetarderLossMap ReadFromFile(string fileName)
{
try {
......@@ -28,8 +26,6 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data
/// <summary>
/// Create the retarder loss map from an appropriate datatable. (2 columns: Retarder Speed, Torque Loss)
/// </summary>
/// <param name="data"></param>
/// <returns></returns>
public static RetarderLossMap Create(DataTable data)
{
if (data.Columns.Count != 2) {
......@@ -40,42 +36,19 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data
throw new VectoException("RetarderLossMap must contain at least 2 entries.");
}
List<RetarderLossMap.RetarderLossEntry> entries;
if (HeaderIsValid(data.Columns)) {
entries = CreateFromColumnNames(data);
} else {
if (!data.Columns.Contains(Fields.RetarderSpeed) || !data.Columns.Contains(Fields.TorqueLoss)) {
data.Columns[0].ColumnName = Fields.RetarderSpeed;
data.Columns[1].ColumnName = Fields.TorqueLoss;
LoggingObject.Logger<RetarderLossMap>().Warn(
"RetarderLossMap: Header Line is not valid. Expected: '{0}, {1}', Got: '{2}'. Falling back to column index.",
Fields.RetarderSpeed, Fields.TorqueLoss,
", ".Join(data.Columns.Cast<DataColumn>().Select(c => c.ColumnName).Reverse()));
entries = CreateFromColumnIndizes(data);
Fields.RetarderSpeed, Fields.TorqueLoss, ", ".Join(data.Columns.Cast<DataColumn>().Select(c => c.ColumnName)));
}
entries.Sort((entry1, entry2) => entry1.RetarderSpeed.Value().CompareTo(entry2.RetarderSpeed.Value()));
return new RetarderLossMap(entries);
}
private static List<RetarderLossMap.RetarderLossEntry> CreateFromColumnNames(DataTable data)
{
return data.Rows.Cast<DataRow>()
.Select(row => new RetarderLossMap.RetarderLossEntry {
RetarderSpeed = DataTableExtensionMethods.ParseDouble(row, (string)Fields.RetarderSpeed).RPMtoRad(),
TorqueLoss = DataTableExtensionMethods.ParseDouble(row, (string)Fields.TorqueLoss).SI<NewtonMeter>()
}).ToList();
}
private static bool HeaderIsValid(DataColumnCollection columns)
{
return columns.Contains(Fields.RetarderSpeed) && columns.Contains(Fields.TorqueLoss);
}
private static List<RetarderLossMap.RetarderLossEntry> CreateFromColumnIndizes(DataTable data)
{
return data.Rows.Cast<DataRow>()
return new RetarderLossMap(data.Rows.Cast<DataRow>()
.Select(row => new RetarderLossMap.RetarderLossEntry {
RetarderSpeed = row.ParseDouble(0).RPMtoRad(),
TorqueLoss = row.ParseDouble(1).SI<NewtonMeter>()
}).ToList();
RetarderSpeed = row.ParseDouble(Fields.RetarderSpeed).RPMtoRad(),
TorqueLoss = row.ParseDouble(Fields.TorqueLoss).SI<NewtonMeter>()
}).OrderBy(e => e.RetarderSpeed));
}
public static class Fields
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment