diff --git a/VectoCore/VectoCore/Models/Declaration/HEVStrategyParameters.cs b/VectoCore/VectoCore/Models/Declaration/HEVStrategyParameters.cs new file mode 100644 index 0000000000000000000000000000000000000000..9648a734046f6758b2dd20ebe140a8911d71941b --- /dev/null +++ b/VectoCore/VectoCore/Models/Declaration/HEVStrategyParameters.cs @@ -0,0 +1,80 @@ +using System; +using System.Collections.Generic; +using System.Data; +using System.Linq; +using TUGraz.VectoCommon.Models; +using TUGraz.VectoCommon.Utils; +using TUGraz.VectoCore.OutputData.XML.DeclarationReports.CustomerInformationFile.CustomerInformationFile_0_9.CIFWriter; +using TUGraz.VectoCore.Utils; + +namespace TUGraz.VectoCore.Models.Declaration +{ + public sealed class HEVStrategyParameters : LookupData<string, HEVStrategyParameters.Entry> + { + + protected override string ResourceId => DeclarationData.DeclarationDataResourcePrefix + ".HEV_Strategy_Parameters_fequiv_40soc_Lorries.csv"; // todo rename csv file... + public override Entry Lookup(string key) + { + return base.Lookup(key.RemoveWhitespace()); + } + + protected override void ParseData(DataTable table) + { + var vehicleClasses = table.Rows.Cast<DataRow>().Select(row => row.Field<string>("vehiclegroup")); + + + var cycleEntries = table.Rows.Cast<DataRow>().Select(row => new CycleEntry + { + VehicleGroup = row.Field<string>("vehiclegroup").RemoveWhitespace(), + LongHaul = SplitStringToDoubleTuple(row.Field<string>("longhaul")), + RegionalDelivery = SplitStringToDoubleTuple(row.Field<string>("regionaldelivery")), + UrbanDelivery = SplitStringToDoubleTuple(row.Field<string>("urbandelivery")), + MunicipalUtility = SplitStringToDoubleTuple(row.Field<string>("municipalutility")), + Construction = SplitStringToDoubleTuple(row.Field<string>("construction")) + }); + + + foreach (var cycleEntry in cycleEntries) + { + foreach (string vehClass in cycleEntry.VehicleGroup.Split('/')) { + var newEntry = new Entry { + VehicleGroup = vehClass, + cycleDict = new Dictionary<MissionType, Tuple<double, double>>() + }; + + newEntry.cycleDict.Add(MissionType.LongHaul, cycleEntry.LongHaul); + newEntry.cycleDict.Add(MissionType.RegionalDelivery, cycleEntry.RegionalDelivery); + newEntry.cycleDict.Add(MissionType.UrbanDelivery, cycleEntry.UrbanDelivery); + newEntry.cycleDict.Add(MissionType.MunicipalUtility, cycleEntry.MunicipalUtility); + newEntry.cycleDict.Add(MissionType.Construction, cycleEntry.Construction); + + Data.Add(newEntry.VehicleGroup, newEntry); + } + } + } + + public struct CycleEntry + { + public string VehicleGroup; + public Tuple<double, double> LongHaul; + public Tuple<double, double> RegionalDelivery; + public Tuple<double, double> UrbanDelivery; + public Tuple<double, double> MunicipalUtility; + public Tuple<double, double> Construction; + + } + + public struct Entry + { + public string VehicleGroup; + public Dictionary<MissionType, Tuple<double, double>> cycleDict; + } + + + private Tuple<double, double> SplitStringToDoubleTuple(string input) + { + var arr = input.Split('/'); + return input.IsNullOrEmpty() ? Tuple.Create(0.0,0.0) : Tuple.Create(Convert.ToDouble(arr[0]), Convert.ToDouble(arr[1])); + } + } +} diff --git a/VectoCore/VectoCore/Resources/Declaration/HEV_Strategy_Parameters_fequiv_40soc_Lorries.csv b/VectoCore/VectoCore/Resources/Declaration/HEV_Strategy_Parameters_fequiv_40soc_Lorries.csv new file mode 100644 index 0000000000000000000000000000000000000000..985035ac0c27f97f61f45230b0450a293ee3e6ee --- /dev/null +++ b/VectoCore/VectoCore/Resources/Declaration/HEV_Strategy_Parameters_fequiv_40soc_Lorries.csv @@ -0,0 +1,14 @@ +vehiclegroup , longhaul , regionaldelivery , urbandelivery , municipalutility , construction +53 , , 2.8/2.6 , 2.8/2.7 , , +54 , , 2.8/2.6 , 2.8/2.7 , , +1s , , 2.8/2.6 , 2.8/2.7 , , +1 , , 2.8/2.6 , 2.8/2.7 , , +2 , 2/2.2 , 2.8/2.6 , 2.8/2.7 , , +3 , , 2.8/2.6 , 2.8/2.7 , , +4 , 2/1.8 , 2.4/2.8 , 2.1/2.5 , 2.1/2.1 , 2.1/2.1 +5 , 2/1.8 , 2.4/2.8 , 2.1/2.5 , , 2.1/2.1 +9 , 2/1.8 , 2.4/2.8 , , 2.1/2.1 , 2.1/2.1 +10 , 2/1.8 , 2.4/2.8 , , , 2.1/2.1 +11 , 2/1.8 , 2.4/2.8 , , 2.1/2.1 , 2.1/2.1 +12 , 2/1.8 , 2.4/2.8 , , , 2.1/2.1 +16 , , , , , 2.1/2.1 diff --git a/VectoCore/VectoCoreTest/Models/Declaration/HevStrategyParametersTest.cs b/VectoCore/VectoCoreTest/Models/Declaration/HevStrategyParametersTest.cs new file mode 100644 index 0000000000000000000000000000000000000000..9e7d1c5a296a568a95fe94d1b36f84cab645150f --- /dev/null +++ b/VectoCore/VectoCoreTest/Models/Declaration/HevStrategyParametersTest.cs @@ -0,0 +1,30 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using NUnit.Framework; +using TUGraz.VectoCore.InputData.FileIO.JSON; +using TUGraz.VectoCore.Models.Declaration; + +namespace TUGraz.VectoCore.Tests.Models.Declaration +{ + [TestFixture] + [Parallelizable(ParallelScope.All)] + public class HevStrategyParametersTest + { + [OneTimeSetUp] + public void RunBeforeAnyTests() + { + Directory.SetCurrentDirectory(TestContext.CurrentContext.TestDirectory); + } + private const string HevStrategyParamFile = @"TestData\Cycles\HEV_Strategy_Parameters_fequiv_40soc_Lorries.csv"; + [TestCase] + public void TestHevStrategyParametersInput() + { + var lookup = new HEVStrategyParameters(); + Assert.IsTrue(lookup.Entries.Count > 0); + } + } +} diff --git a/VectoCore/VectoCoreTest/TestData/Cycles/HEV_Strategy_Parameters_fequiv_40soc_Lorries.csv b/VectoCore/VectoCoreTest/TestData/Cycles/HEV_Strategy_Parameters_fequiv_40soc_Lorries.csv new file mode 100644 index 0000000000000000000000000000000000000000..985035ac0c27f97f61f45230b0450a293ee3e6ee --- /dev/null +++ b/VectoCore/VectoCoreTest/TestData/Cycles/HEV_Strategy_Parameters_fequiv_40soc_Lorries.csv @@ -0,0 +1,14 @@ +vehiclegroup , longhaul , regionaldelivery , urbandelivery , municipalutility , construction +53 , , 2.8/2.6 , 2.8/2.7 , , +54 , , 2.8/2.6 , 2.8/2.7 , , +1s , , 2.8/2.6 , 2.8/2.7 , , +1 , , 2.8/2.6 , 2.8/2.7 , , +2 , 2/2.2 , 2.8/2.6 , 2.8/2.7 , , +3 , , 2.8/2.6 , 2.8/2.7 , , +4 , 2/1.8 , 2.4/2.8 , 2.1/2.5 , 2.1/2.1 , 2.1/2.1 +5 , 2/1.8 , 2.4/2.8 , 2.1/2.5 , , 2.1/2.1 +9 , 2/1.8 , 2.4/2.8 , , 2.1/2.1 , 2.1/2.1 +10 , 2/1.8 , 2.4/2.8 , , , 2.1/2.1 +11 , 2/1.8 , 2.4/2.8 , , 2.1/2.1 , 2.1/2.1 +12 , 2/1.8 , 2.4/2.8 , , , 2.1/2.1 +16 , , , , , 2.1/2.1