From 92d0bebcf0185189da11e19529b637ef456801c4 Mon Sep 17 00:00:00 2001
From: Markus Quaritsch <markus.quaritsch@tugraz.at>
Date: Wed, 27 Jan 2016 13:33:23 +0100
Subject: [PATCH] refactoring component data: axlegear is now a full component,
 axle/wheels is now a full component

---
 VectoCore/InputData/IntegrityStatus.cs        | 11 ++++++
 .../AbstractSimulationDataAdapter.cs          |  4 +-
 .../DeclarationDataAdapter.cs                 |  1 +
 .../DeclarationModeVectoRunDataFactory.cs     | 38 +++++++++----------
 VectoCore/Models/Declaration/Axle.cs          |  4 +-
 .../Models/Simulation/Data/VectoRunData.cs    |  3 +-
 .../SimulationComponent/Data/AxleGearData.cs  |  5 ++-
 .../Data/SimulationComponentData.cs           | 12 ++++++
 .../SimulationComponent/Impl/AxleGear.cs      | 15 ++++----
 VectoCore/OutputData/DeclarationReport.cs     | 35 +++++++----------
 .../OutputData/PDF/PDFDeclarationReport.cs    | 35 ++++++++++++++++-
 VectoCore/VectoCore.csproj                    |  4 +-
 VectoCoreTest/Integration/CoachPowerTrain.cs  | 10 +++--
 .../SimulationRuns/FullPowertrain.cs          | 11 ++++--
 .../SimulationRuns/MinimalPowertrain.cs       | 10 +++--
 .../Integration/Truck40tPowerTrain.cs         | 10 +++--
 .../Simulation/LossMapRangeValidationTest.cs  |  6 ++-
 .../Models/SimulationComponent/GearboxTest.cs |  4 +-
 .../FullLoadCurveTest.cs                      |  6 ++-
 .../GearboxDataTest.cs                        |  4 +-
 .../SimulationComponentData/ValidationTest.cs |  6 ++-
 21 files changed, 152 insertions(+), 82 deletions(-)
 create mode 100644 VectoCore/InputData/IntegrityStatus.cs

diff --git a/VectoCore/InputData/IntegrityStatus.cs b/VectoCore/InputData/IntegrityStatus.cs
new file mode 100644
index 0000000000..1c7289e660
--- /dev/null
+++ b/VectoCore/InputData/IntegrityStatus.cs
@@ -0,0 +1,11 @@
+namespace TUGraz.VectoCore.InputData
+{
+	public enum IntegrityStatus
+	{
+		Unknown,
+		NoDigestProvided,
+		NotChecked,
+		DigestValid,
+		DigestInvalid
+	}
+}
\ No newline at end of file
diff --git a/VectoCore/InputData/Reader/DataObjectAdaper/AbstractSimulationDataAdapter.cs b/VectoCore/InputData/Reader/DataObjectAdaper/AbstractSimulationDataAdapter.cs
index 4e53645716..f6a886d214 100644
--- a/VectoCore/InputData/Reader/DataObjectAdaper/AbstractSimulationDataAdapter.cs
+++ b/VectoCore/InputData/Reader/DataObjectAdaper/AbstractSimulationDataAdapter.cs
@@ -71,7 +71,9 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdaper
 		internal AxleGearData CreateAxleGearData(IAxleGearInputData axleGear)
 		{
 			var axleLossMap = TransmissionLossMap.Create(axleGear.LossMap, axleGear.Ratio, "AxleGear");
-			return new AxleGearData() { LossMap = axleLossMap, Ratio = axleGear.Ratio, TorqueConverterActive = false };
+			return new AxleGearData() {
+				AxleGear = new GearData() { LossMap = axleLossMap, Ratio = axleGear.Ratio, TorqueConverterActive = false }
+			};
 		}
 
 		/// <summary>
diff --git a/VectoCore/InputData/Reader/DataObjectAdaper/DeclarationDataAdapter.cs b/VectoCore/InputData/Reader/DataObjectAdaper/DeclarationDataAdapter.cs
index 7e50145f50..b5514bf95c 100644
--- a/VectoCore/InputData/Reader/DataObjectAdaper/DeclarationDataAdapter.cs
+++ b/VectoCore/InputData/Reader/DataObjectAdaper/DeclarationDataAdapter.cs
@@ -105,6 +105,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdaper
 			}
 
 			axleData.AddRange(mission.TrailerAxleWeightDistribution.Select(tmp => new Axle {
+				AxleType = AxleType.Trailer,
 				AxleWeightShare = tmp,
 				TwinTyres = DeclarationData.Trailer.TwinTyres,
 				RollResistanceCoefficient = DeclarationData.Trailer.RollResistanceCoefficient,
diff --git a/VectoCore/InputData/Reader/Impl/DeclarationModeVectoRunDataFactory.cs b/VectoCore/InputData/Reader/Impl/DeclarationModeVectoRunDataFactory.cs
index ec3a1455a3..73c7a89051 100644
--- a/VectoCore/InputData/Reader/Impl/DeclarationModeVectoRunDataFactory.cs
+++ b/VectoCore/InputData/Reader/Impl/DeclarationModeVectoRunDataFactory.cs
@@ -38,8 +38,22 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl
 			var engineData = dao.CreateEngineData(InputDataProvider.EngineInputData);
 
 			var gearboxData = dao.CreateGearboxData(InputDataProvider.GearboxInputData, engineData);
+			var axlegearData = dao.CreateAxleGearData(InputDataProvider.AxleGearInputData);
+			var retarderData = dao.CreateRetarderData(InputDataProvider.RetarderInputData);
 
-			ConfigureReport(engineData, gearboxData, segment);
+			if (Report != null) {
+				var powertrainConfig = new VectoRunData() {
+					VehicleData = dao.CreateVehicleData(InputDataProvider.VehicleInputData, segment.Missions.First(),
+						segment.Missions.First().Loadings.First().Value),
+					EngineData = engineData,
+					GearboxData = gearboxData,
+					AxleGearData = axlegearData,
+					Retarder = retarderData,
+					Aux = dao.CreateAuxiliaryData(InputDataProvider.AuxiliaryInputData(), segment.Missions.First().MissionType,
+						segment.VehicleClass)
+				};
+				Report.InitializeReport(powertrainConfig, segment);
+			}
 
 			foreach (var mission in segment.Missions) {
 				DrivingCycleData cycle;
@@ -54,12 +68,12 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl
 						Loading = loading.Key,
 						VehicleData = dao.CreateVehicleData(InputDataProvider.VehicleInputData, mission, loading.Value),
 						EngineData = engineData,
-						GearboxData = dao.CreateGearboxData(InputDataProvider.GearboxInputData, engineData),
-						AxleGearData = dao.CreateAxleGearData(InputDataProvider.AxleGearInputData),
+						GearboxData = gearboxData,
+						AxleGearData = axlegearData,
 						Aux = dao.CreateAuxiliaryData(InputDataProvider.AuxiliaryInputData(), mission.MissionType,
 							segment.VehicleClass),
 						Cycle = cycle,
-						Retarder = dao.CreateRetarderData(InputDataProvider.RetarderInputData),
+						Retarder = retarderData,
 						DriverData = driverdata,
 						IsEngineOnly = false, // InputDataProvider.JobInputData().EngineOnlyMode,
 						JobName = InputDataProvider.JobInputData().JobName,
@@ -76,22 +90,6 @@ namespace TUGraz.VectoCore.InputData.Reader.Impl
 			}
 		}
 
-		private void ConfigureReport(CombustionEngineData engineData, GearboxData gearboxData, Segment segment)
-		{
-			if (Report == null) {
-				return;
-			}
-			Report.EngineModel = engineData.ModelName;
-			Report.EngineStr = string.Format("{0} l, {1} kW",
-				engineData.Displacement.ConvertTo().Cubic.Dezi.Meter.ToOutputFormat(1),
-				engineData.FullLoadCurve.MaxPower.ConvertTo().Kilo.Watt.ToOutputFormat(0));
-			Report.Flc = engineData.FullLoadCurve;
-			Report.GearboxModel = gearboxData.ModelName;
-			Report.GearboxStr = string.Format("{0}-Speed {1}", gearboxData.Gears.Count, gearboxData.Type);
-			Report.Segment = segment;
-			Report.ResultCount = segment.Missions.Sum(m => m.Loadings.Count);
-		}
-
 		internal Segment GetVehicleClassification(VehicleCategory category, AxleConfiguration axles, Kilogram grossMassRating,
 			Kilogram curbWeight)
 		{
diff --git a/VectoCore/Models/Declaration/Axle.cs b/VectoCore/Models/Declaration/Axle.cs
index 995f76aa7f..289bfe0cc2 100644
--- a/VectoCore/Models/Declaration/Axle.cs
+++ b/VectoCore/Models/Declaration/Axle.cs
@@ -14,11 +14,12 @@
 * limitations under the Licence.
 */
 
+using TUGraz.VectoCore.Models.SimulationComponent.Data;
 using TUGraz.VectoCore.Utils;
 
 namespace TUGraz.VectoCore.Models.Declaration
 {
-	public class Axle
+	public class Axle : SimulationComponentData
 	{
 		public KilogramSquareMeter Inertia { get; internal set; }
 
@@ -29,5 +30,6 @@ namespace TUGraz.VectoCore.Models.Declaration
 		public double AxleWeightShare { get; internal set; }
 
 		public bool TwinTyres { get; internal set; }
+		public AxleType AxleType { get; internal set; }
 	}
 }
\ No newline at end of file
diff --git a/VectoCore/Models/Simulation/Data/VectoRunData.cs b/VectoCore/Models/Simulation/Data/VectoRunData.cs
index 635b14c726..1b345cd38c 100644
--- a/VectoCore/Models/Simulation/Data/VectoRunData.cs
+++ b/VectoCore/Models/Simulation/Data/VectoRunData.cs
@@ -21,6 +21,7 @@ using TUGraz.VectoCore.Configuration;
 using TUGraz.VectoCore.Exceptions;
 using TUGraz.VectoCore.Models.Declaration;
 using TUGraz.VectoCore.Models.SimulationComponent.Data;
+using TUGraz.VectoCore.OutputData;
 using TUGraz.VectoCore.OutputData.PDF;
 using TUGraz.VectoCore.Utils;
 
@@ -126,7 +127,7 @@ namespace TUGraz.VectoCore.Models.Simulation.Data
 							if (axleGearData != null) {
 								var axleAngularVelocity = angularVelocity / gear.Value.Ratio;
 								try {
-									axleGearData.LossMap.GetOutTorque(axleAngularVelocity, axleTorque);
+									axleGearData.AxleGear.LossMap.GetOutTorque(axleAngularVelocity, axleTorque);
 								} catch (VectoException) {
 									return
 										new ValidationResult(
diff --git a/VectoCore/Models/SimulationComponent/Data/AxleGearData.cs b/VectoCore/Models/SimulationComponent/Data/AxleGearData.cs
index 2236d6ba45..5e5e4c1726 100644
--- a/VectoCore/Models/SimulationComponent/Data/AxleGearData.cs
+++ b/VectoCore/Models/SimulationComponent/Data/AxleGearData.cs
@@ -2,5 +2,8 @@
 
 namespace TUGraz.VectoCore.Models.SimulationComponent.Data
 {
-	public class AxleGearData : GearData {}
+	public class AxleGearData : SimulationComponentData
+	{
+		public GearData AxleGear;
+	}
 }
\ No newline at end of file
diff --git a/VectoCore/Models/SimulationComponent/Data/SimulationComponentData.cs b/VectoCore/Models/SimulationComponent/Data/SimulationComponentData.cs
index 6bd7e9f348..4443faa773 100644
--- a/VectoCore/Models/SimulationComponent/Data/SimulationComponentData.cs
+++ b/VectoCore/Models/SimulationComponent/Data/SimulationComponentData.cs
@@ -14,10 +14,22 @@
 * limitations under the Licence.
 */
 
+using TUGraz.VectoCore.InputData;
+
 namespace TUGraz.VectoCore.Models.SimulationComponent.Data
 {
 	public class SimulationComponentData : LoggingObject
 	{
 		public bool SavedInDeclarationMode { get; internal set; }
+
+		public string Vendor { get; internal set; }
+
+		public string MakeAndModel { get; internal set; }
+
+		public string TypeId { get; internal set; }
+
+		public string DigestValue { get; internal set; }
+
+		public IntegrityStatus IntegrityStatus { get; internal set; }
 	}
 }
\ No newline at end of file
diff --git a/VectoCore/Models/SimulationComponent/Impl/AxleGear.cs b/VectoCore/Models/SimulationComponent/Impl/AxleGear.cs
index 544668e07d..f4dcc7fbea 100644
--- a/VectoCore/Models/SimulationComponent/Impl/AxleGear.cs
+++ b/VectoCore/Models/SimulationComponent/Impl/AxleGear.cs
@@ -18,6 +18,7 @@ using TUGraz.VectoCore.Exceptions;
 using TUGraz.VectoCore.Models.Connector.Ports;
 using TUGraz.VectoCore.Models.Simulation.Data;
 using TUGraz.VectoCore.Models.Simulation.Impl;
+using TUGraz.VectoCore.Models.SimulationComponent.Data;
 using TUGraz.VectoCore.Models.SimulationComponent.Data.Gearbox;
 using TUGraz.VectoCore.OutputData;
 using TUGraz.VectoCore.Utils;
@@ -27,11 +28,11 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 	public class AxleGear : VectoSimulationComponent, IPowerTrainComponent, ITnInPort, ITnOutPort
 	{
 		protected ITnOutPort NextComponent;
-		private readonly GearData _gearData;
+		private readonly AxleGearData _gearData;
 
 		protected Watt Loss;
 
-		public AxleGear(VehicleContainer container, GearData gearData) : base(container)
+		public AxleGear(VehicleContainer container, AxleGearData gearData) : base(container)
 		{
 			_gearData = gearData;
 		}
@@ -56,10 +57,10 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 		{
 			Log.Debug("request: torque: {0}, angularVelocity: {1}", torque, angularVelocity);
 
-			var inAngularVelocity = angularVelocity * _gearData.Ratio;
+			var inAngularVelocity = angularVelocity * _gearData.AxleGear.Ratio;
 			var inTorque = angularVelocity.IsEqual(0)
 				? 0.SI<NewtonMeter>()
-				: _gearData.LossMap.GetInTorque(inAngularVelocity, torque);
+				: _gearData.AxleGear.LossMap.GetInTorque(inAngularVelocity, torque);
 
 			Loss = inTorque * inAngularVelocity - torque * angularVelocity;
 
@@ -71,8 +72,8 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 
 		public IResponse Initialize(NewtonMeter torque, PerSecond angularVelocity)
 		{
-			var inAngularVelocity = angularVelocity * _gearData.Ratio;
-			var inTorque = _gearData.LossMap.GetInTorque(inAngularVelocity, torque);
+			var inAngularVelocity = angularVelocity * _gearData.AxleGear.Ratio;
+			var inTorque = _gearData.AxleGear.LossMap.GetInTorque(inAngularVelocity, torque);
 
 			return NextComponent.Initialize(inTorque, inAngularVelocity);
 		}
@@ -84,7 +85,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Impl
 
 		protected override void DoCommitSimulationStep()
 		{
-			if (_gearData.LossMap.Extrapolated) {
+			if (_gearData.AxleGear.LossMap.Extrapolated) {
 				// todo (MK, 2015-12-14): should we throw an interpolation error in EngineOnly Mode also?
 				if (DataBus.ExecutionMode == ExecutionMode.Declaration) {
 					throw new VectoException("AxleGear LossMap data was extrapolated: range for loss map is not sufficient.");
diff --git a/VectoCore/OutputData/DeclarationReport.cs b/VectoCore/OutputData/DeclarationReport.cs
index 2eae603952..dd19bd6e50 100644
--- a/VectoCore/OutputData/DeclarationReport.cs
+++ b/VectoCore/OutputData/DeclarationReport.cs
@@ -18,6 +18,7 @@ using System.Collections.Generic;
 using System.Linq;
 using System.Runtime.CompilerServices;
 using TUGraz.VectoCore.Models.Declaration;
+using TUGraz.VectoCore.Models.Simulation.Data;
 using TUGraz.VectoCore.Models.SimulationComponent.Data;
 using Font = System.Drawing.Font;
 using Image = iTextSharp.text.Image;
@@ -67,26 +68,6 @@ namespace TUGraz.VectoCore.OutputData
 		/// </summary>
 		public string Creator { get; internal set; }
 
-		/// <summary>
-		/// The engine model string from engine file.
-		/// </summary>
-		public string EngineModel { get; set; }
-
-		/// <summary>
-		/// The engine description (displacement and max power)
-		/// </summary>
-		public string EngineStr { get; set; }
-
-		/// <summary>
-		/// The gearbox model string from gearbox file.
-		/// </summary>
-		public string GearboxModel { get; set; }
-
-		/// <summary>
-		/// The gearbox description (gear-count and gear type)
-		/// </summary>
-		public string GearboxStr { get; set; }
-
 		/// <summary>
 		/// The name of the job file (report name will be the same)
 		/// </summary>
@@ -117,10 +98,20 @@ namespace TUGraz.VectoCore.OutputData
 			}
 
 			if (ResultCount == _missions.Sum(v => v.Value.ModData.Count)) {
-				WriteReport();
+				DoWriteReport();
 			}
 		}
 
-		protected abstract void WriteReport();
+		protected abstract void DoWriteReport();
+
+		public void InitializeReport(VectoRunData modelData, Segment segment)
+		{
+			Segment = segment;
+			ResultCount = segment.Missions.Sum(m => m.Loadings.Count);
+
+			DoInitializeReport(modelData, segment);
+		}
+
+		public abstract void DoInitializeReport(VectoRunData modelData, Segment segment);
 	}
 }
\ No newline at end of file
diff --git a/VectoCore/OutputData/PDF/PDFDeclarationReport.cs b/VectoCore/OutputData/PDF/PDFDeclarationReport.cs
index 2e990a71ad..665bada730 100644
--- a/VectoCore/OutputData/PDF/PDFDeclarationReport.cs
+++ b/VectoCore/OutputData/PDF/PDFDeclarationReport.cs
@@ -20,7 +20,27 @@ namespace TUGraz.VectoCore.OutputData.PDF
 {
 	public class PDFDeclarationReport : DeclarationReport
 	{
-		private IReportWriter _writer;
+		private readonly IReportWriter _writer;
+
+		/// <summary>
+		/// The engine model string from engine file.
+		/// </summary>
+		public string EngineModel { get; set; }
+
+		/// <summary>
+		/// The engine description (displacement and max power)
+		/// </summary>
+		public string EngineStr { get; set; }
+
+		/// <summary>
+		/// The gearbox model string from gearbox file.
+		/// </summary>
+		public string GearboxModel { get; set; }
+
+		/// <summary>
+		/// The gearbox description (gear-count and gear type)
+		/// </summary>
+		public string GearboxStr { get; set; }
 
 		public PDFDeclarationReport(IReportWriter writer)
 		{
@@ -30,7 +50,7 @@ namespace TUGraz.VectoCore.OutputData.PDF
 		/// <summary>
 		/// Creates the report and writes it to a pdf file.
 		/// </summary>
-		protected override void WriteReport()
+		protected override void DoWriteReport()
 		{
 			var titlePage = CreateTitlePage(_missions);
 			var cyclePages = _missions.OrderBy(m => m.Key).Select((m, i) => CreateCyclePage(m.Value, i + 2, _missions.Count + 1));
@@ -38,6 +58,17 @@ namespace TUGraz.VectoCore.OutputData.PDF
 			MergeDocuments(titlePage, cyclePages, _writer.WriterStream(ReportType.DeclarationReportPdf));
 		}
 
+		public override void DoInitializeReport(VectoRunData modelData, Segment segment)
+		{
+			EngineModel = modelData.EngineData.ModelName;
+			EngineStr = string.Format("{0} l, {1} kW",
+				modelData.EngineData.Displacement.ConvertTo().Cubic.Dezi.Meter.ToOutputFormat(1),
+				modelData.EngineData.FullLoadCurve.MaxPower.ConvertTo().Kilo.Watt.ToOutputFormat(0));
+			Flc = modelData.EngineData.FullLoadCurve;
+			GearboxModel = modelData.GearboxData.ModelName;
+			GearboxStr = string.Format("{0}-Speed {1}", modelData.GearboxData.Gears.Count, modelData.GearboxData.Type);
+		}
+
 		/// <summary>
 		/// Creates the title page.
 		/// </summary>
diff --git a/VectoCore/VectoCore.csproj b/VectoCore/VectoCore.csproj
index 81706a3d75..0536b70f4e 100644
--- a/VectoCore/VectoCore.csproj
+++ b/VectoCore/VectoCore.csproj
@@ -119,6 +119,7 @@
     <Compile Include="InputData\FileIO\JSON\JSONVehicleData.cs" />
     <Compile Include="InputData\IInputDataProvider.cs" />
     <Compile Include="InputData\InputData.cs" />
+    <Compile Include="InputData\IntegrityStatus.cs" />
     <Compile Include="InputData\IVectoRunDataFactory.cs" />
     <Compile Include="InputData\Reader\DataObjectAdaper\AbstractSimulationDataAdapter.cs" />
     <Compile Include="InputData\Reader\DataObjectAdaper\DeclarationDataAdapter.cs" />
@@ -183,11 +184,12 @@
     <Compile Include="Models\Simulation\Impl\DistanceRun.cs" />
     <Compile Include="Models\Simulation\Impl\PowertrainBuilder.cs" />
     <Compile Include="Models\Simulation\Impl\TimeRun.cs" />
+    <Compile Include="OutputData\DeclarationReport.cs" />
     <Compile Include="OutputData\FileIO\FileOutputWriter.cs" />
     <Compile Include="OutputData\IModalDataContainer.cs" />
     <Compile Include="OutputData\IDataWriter.cs" />
     <Compile Include="OutputData\ModalDataContainer.cs" />
-    <Compile Include="OutputData\PDF\DeclarationReport.cs" />
+    <Compile Include="OutputData\PDF\PDFDeclarationReport.cs" />
     <Compile Include="OutputData\SummaryDataContainer.cs" />
     <Compile Include="Properties\Version.cs">
       <AutoGen>True</AutoGen>
diff --git a/VectoCoreTest/Integration/CoachPowerTrain.cs b/VectoCoreTest/Integration/CoachPowerTrain.cs
index 7d8e6fdd69..6dd730d43a 100644
--- a/VectoCoreTest/Integration/CoachPowerTrain.cs
+++ b/VectoCoreTest/Integration/CoachPowerTrain.cs
@@ -117,12 +117,14 @@ namespace TUGraz.VectoCore.Tests.Integration
 			};
 		}
 
-		private static GearData CreateAxleGearData()
+		private static AxleGearData CreateAxleGearData()
 		{
 			const double ratio = 3.240355;
-			return new GearData {
-				Ratio = ratio,
-				LossMap = TransmissionLossMap.ReadFromFile(AxleGearLossMap, ratio, "AxleGear")
+			return new AxleGearData {
+				AxleGear = new GearData {
+					Ratio = ratio,
+					LossMap = TransmissionLossMap.ReadFromFile(AxleGearLossMap, ratio, "AxleGear")
+				}
 			};
 		}
 
diff --git a/VectoCoreTest/Integration/SimulationRuns/FullPowertrain.cs b/VectoCoreTest/Integration/SimulationRuns/FullPowertrain.cs
index c14a65ec28..fa3e033db0 100644
--- a/VectoCoreTest/Integration/SimulationRuns/FullPowertrain.cs
+++ b/VectoCoreTest/Integration/SimulationRuns/FullPowertrain.cs
@@ -17,6 +17,7 @@
 using System;
 using System.Collections.Generic;
 using System.Linq;
+using System.Reflection;
 using Microsoft.VisualStudio.TestTools.UnitTesting;
 using NLog;
 using TUGraz.VectoCore.Configuration;
@@ -311,12 +312,14 @@ namespace TUGraz.VectoCore.Tests.Integration.SimulationRuns
 			};
 		}
 
-		private static GearData CreateAxleGearData()
+		private static AxleGearData CreateAxleGearData()
 		{
 			var ratio = 3.240355;
-			return new GearData {
-				Ratio = ratio,
-				LossMap = TransmissionLossMap.ReadFromFile(AxleLossMap, ratio, "AxleGear")
+			return new AxleGearData {
+				AxleGear = new GearData {
+					Ratio = ratio,
+					LossMap = TransmissionLossMap.ReadFromFile(AxleLossMap, ratio, "AxleGear")
+				}
 			};
 		}
 
diff --git a/VectoCoreTest/Integration/SimulationRuns/MinimalPowertrain.cs b/VectoCoreTest/Integration/SimulationRuns/MinimalPowertrain.cs
index 93bad7b656..8e4fb5e404 100644
--- a/VectoCoreTest/Integration/SimulationRuns/MinimalPowertrain.cs
+++ b/VectoCoreTest/Integration/SimulationRuns/MinimalPowertrain.cs
@@ -228,11 +228,13 @@ namespace TUGraz.VectoCore.Tests.Integration.SimulationRuns
 			modData.Finish(VectoRun.Status.Success);
 		}
 
-		private static GearData CreateAxleGearData()
+		private static AxleGearData CreateAxleGearData()
 		{
-			return new GearData {
-				Ratio = 3.0 * 3.5,
-				LossMap = TransmissionLossMap.ReadFromFile(GbxLossMap, 3.0 * 3.5, "AxleGear")
+			return new AxleGearData() {
+				AxleGear = new GearData {
+					Ratio = 3.0 * 3.5,
+					LossMap = TransmissionLossMap.ReadFromFile(GbxLossMap, 3.0 * 3.5, "AxleGear")
+				}
 			};
 		}
 
diff --git a/VectoCoreTest/Integration/Truck40tPowerTrain.cs b/VectoCoreTest/Integration/Truck40tPowerTrain.cs
index 692c25da69..89fce4cfa4 100644
--- a/VectoCoreTest/Integration/Truck40tPowerTrain.cs
+++ b/VectoCoreTest/Integration/Truck40tPowerTrain.cs
@@ -125,12 +125,14 @@ namespace TUGraz.VectoCore.Tests.Integration
 			};
 		}
 
-		private static GearData CreateAxleGearData()
+		private static AxleGearData CreateAxleGearData()
 		{
 			const double ratio = 2.59;
-			return new GearData {
-				Ratio = ratio,
-				LossMap = TransmissionLossMap.ReadFromFile(AxleGearLossMap, ratio, "AxleGear")
+			return new AxleGearData {
+				AxleGear = new GearData {
+					Ratio = ratio,
+					LossMap = TransmissionLossMap.ReadFromFile(AxleGearLossMap, ratio, "AxleGear")
+				}
 			};
 		}
 
diff --git a/VectoCoreTest/Models/Simulation/LossMapRangeValidationTest.cs b/VectoCoreTest/Models/Simulation/LossMapRangeValidationTest.cs
index 7d5e935770..63299d3908 100644
--- a/VectoCoreTest/Models/Simulation/LossMapRangeValidationTest.cs
+++ b/VectoCoreTest/Models/Simulation/LossMapRangeValidationTest.cs
@@ -135,8 +135,10 @@ namespace TUGraz.VectoCore.Tests.Models.Simulation
 		{
 			const double ratio = 2.59;
 			return new AxleGearData {
-				Ratio = ratio,
-				LossMap = TransmissionLossMap.ReadFromFile(lossMap, ratio, "AxleGear")
+				AxleGear = new GearData {
+					Ratio = ratio,
+					LossMap = TransmissionLossMap.ReadFromFile(lossMap, ratio, "AxleGear")
+				}
 			};
 		}
 	}
diff --git a/VectoCoreTest/Models/SimulationComponent/GearboxTest.cs b/VectoCoreTest/Models/SimulationComponent/GearboxTest.cs
index 4c5d35e97f..eef42290a3 100644
--- a/VectoCoreTest/Models/SimulationComponent/GearboxTest.cs
+++ b/VectoCoreTest/Models/SimulationComponent/GearboxTest.cs
@@ -95,9 +95,9 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponent
 
 			var loss = 9401.44062.SI<Watt>();
 
-			Assert.AreEqual(Formulas.PowerToTorque(PvD + loss, angSpeed * axleGearData.Ratio).Value(),
+			Assert.AreEqual(Formulas.PowerToTorque(PvD + loss, angSpeed * axleGearData.AxleGear.Ratio).Value(),
 				mockPort.Torque.Value(), 0.01, "Torque Engine Side");
-			Assert.AreEqual((angSpeed * axleGearData.Ratio).Value(), mockPort.AngularVelocity.Value(), 0.01,
+			Assert.AreEqual((angSpeed * axleGearData.AxleGear.Ratio).Value(), mockPort.AngularVelocity.Value(), 0.01,
 				"Torque Engine Side");
 		}
 
diff --git a/VectoCoreTest/Models/SimulationComponentData/FullLoadCurveTest.cs b/VectoCoreTest/Models/SimulationComponentData/FullLoadCurveTest.cs
index d6cd16825e..97d7d2fdb4 100644
--- a/VectoCoreTest/Models/SimulationComponentData/FullLoadCurveTest.cs
+++ b/VectoCoreTest/Models/SimulationComponentData/FullLoadCurveTest.cs
@@ -165,8 +165,10 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponentData
 			};
 
 			var axleGearData = new AxleGearData() {
-				Ratio = 1,
-				LossMap = TransmissionLossMap.ReadFromFile(@"TestData\Components\limited.vtlm", 1, "1"),
+				AxleGear = new GearData {
+					Ratio = 1,
+					LossMap = TransmissionLossMap.ReadFromFile(@"TestData\Components\limited.vtlm", 1, "1"),
+				}
 			};
 
 			var runData = new VectoRunData { GearboxData = gearboxData, EngineData = engineData, AxleGearData = axleGearData };
diff --git a/VectoCoreTest/Models/SimulationComponentData/GearboxDataTest.cs b/VectoCoreTest/Models/SimulationComponentData/GearboxDataTest.cs
index de651db2fa..8d051e9d2b 100644
--- a/VectoCoreTest/Models/SimulationComponentData/GearboxDataTest.cs
+++ b/VectoCoreTest/Models/SimulationComponentData/GearboxDataTest.cs
@@ -74,9 +74,9 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponentData
 			var torqueToWheels = Formulas.PowerToTorque(PvD, SpeedToAngularSpeed(speed, rdyn));
 			var torqueFromEngine = 0.SI<NewtonMeter>();
 
-			var angSpeed = SpeedToAngularSpeed(speed, rdyn) * axleData.Ratio;
+			var angSpeed = SpeedToAngularSpeed(speed, rdyn) * axleData.AxleGear.Ratio;
 			if (TestContext.DataRow["Gear"].ToString() == "A") {
-				torqueFromEngine = axleData.LossMap.GetInTorque(angSpeed, torqueToWheels);
+				torqueFromEngine = axleData.AxleGear.LossMap.GetInTorque(angSpeed, torqueToWheels);
 			}
 
 			var powerEngine = Formulas.TorqueToPower(torqueFromEngine, angSpeed);
diff --git a/VectoCoreTest/Models/SimulationComponentData/ValidationTest.cs b/VectoCoreTest/Models/SimulationComponentData/ValidationTest.cs
index b3c09ba2db..716511a535 100644
--- a/VectoCoreTest/Models/SimulationComponentData/ValidationTest.cs
+++ b/VectoCoreTest/Models/SimulationComponentData/ValidationTest.cs
@@ -74,8 +74,10 @@ namespace TUGraz.VectoCore.Tests.Models.SimulationComponentData
 			};
 
 			var axleGearData = new AxleGearData {
-				Ratio = 1,
-				LossMap = TransmissionLossMap.ReadFromFile(@"TestData\Components\limited.vtlm", 1, "1"),
+				AxleGear = new GearData {
+					Ratio = 1,
+					LossMap = TransmissionLossMap.ReadFromFile(@"TestData\Components\limited.vtlm", 1, "1"),
+				}
 			};
 
 			container.RunData = new VectoRunData {
-- 
GitLab