Code development platform for open source projects from the European Union institutions :large_blue_circle: EU Login authentication by SMS will be completely phased out by mid-2025. To see alternatives please check here

Skip to content
Snippets Groups Projects
Commit 524cc26d authored by Markus Quaritsch's avatar Markus Quaritsch
Browse files

add weighting of results to manufacturer report

parent af7db786
No related branches found
No related tags found
No related merge requests found
......@@ -100,6 +100,7 @@ namespace TUGraz.VectoCore.InputData.Reader.DataObjectAdapter
retVal.ManufacturerAddress = data.ManufacturerAddress;
retVal.LegislativeClass = data.LegislativeClass;
retVal.ZeroEmissionVehicle = data.ZeroEmissionVehicle;
retVal.SleeperCab = data.SleeperCab;
retVal.TrailerGrossVehicleWeight = mission.Trailer.Sum(t => t.TrailerGrossVehicleWeight).DefaultIfNull(0);
retVal.BodyAndTrailerWeight = (mission.MissionType == MissionType.MunicipalUtility
......
......@@ -14,7 +14,11 @@ namespace TUGraz.VectoCore.Models.Declaration
public IDictionary<Tuple<MissionType, LoadingType>, double> Lookup(WeightingGroup group)
{
return new ReadOnlyDictionary<Tuple<MissionType, LoadingType>, double>(Data[group]);
try {
return new ReadOnlyDictionary<Tuple<MissionType, LoadingType>, double>(Data[group]);
} catch (Exception e) {
throw new VectoException(ErrorMessage, e, group);
}
}
#region Overrides of LookupData
......
......@@ -19,7 +19,7 @@ namespace TUGraz.VectoCore.Models.Declaration
Group9LH,
Group10RD,
Group10LH,
Unknonw
Unknown
}
public class WeightingGroupHelper
......@@ -60,7 +60,7 @@ namespace TUGraz.VectoCore.Models.Declaration
var rows = Entries.FindAll(
x => x.VehicleGroup == group && x.SleeperCab == sleeperCab && engineRatedPower >= x.RatedPowerMin &&
engineRatedPower < x.RatedPowerMax);
return rows.Count == 0 ? WeightingGroup.Unknonw : rows.First().WeightingGroup;
return rows.Count == 0 ? WeightingGroup.Unknown : rows.First().WeightingGroup;
}
#endregion
......
......@@ -210,6 +210,7 @@ namespace TUGraz.VectoCore.Models.SimulationComponent.Data
public bool DualFuelVehicle { get; internal set; }
public Watt MaxNetPower1 { get; internal set; }
public Watt MaxNetPower2 { get; internal set; }
public bool SleeperCab { get; internal set; }
protected void ComputeRollResistanceAndReducedMassWheels()
{
......
......@@ -137,7 +137,7 @@ namespace TUGraz.VectoCore.OutputData.XML
);
}
public void AddResult(
public void WriteResult(
DeclarationReport<XMLDeclarationReport.ResultEntry>.ResultContainer<XMLDeclarationReport.ResultEntry> entry)
{
foreach (var resultEntry in entry.ResultEntry) {
......
......@@ -29,7 +29,9 @@
* Martin Rexeis, rexeis@ivt.tugraz.at, IVT, Graz University of Technology
*/
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Data;
using System.Linq;
using System.Text;
......@@ -52,6 +54,8 @@ namespace TUGraz.VectoCore.OutputData.XML
private readonly IOutputDataWriter _writer;
private IDictionary<Tuple<MissionType, LoadingType>, double> _weightingFactors;
public class ResultEntry
{
public MeterPerSecond AverageSpeed { get; private set; }
......@@ -95,8 +99,10 @@ namespace TUGraz.VectoCore.OutputData.XML
public PerSecond EngineSpeedDrivingAvg { get; private set; }
public PerSecond EngineSpeedDrivingMax { get; private set; }
public double WeightingFactor { get; set; }
public virtual void SetResultData(VectoRunData runData, IModalDataContainer data)
public virtual void SetResultData(VectoRunData runData, IModalDataContainer data, double weightingFactor)
{
FuelType = data.FuelData.FuelType;
Payload = runData.VehicleData.Loading;
......@@ -131,15 +137,17 @@ namespace TUGraz.VectoCore.OutputData.XML
FuelConsumptionTotal = data.TimeIntegral<Kilogram>(ModalResultField.FCFinal);
CO2Total = FuelConsumptionTotal * data.FuelData.CO2PerFuelWeight;
EnergyConsumptionTotal = FuelConsumptionTotal * data.FuelData.LowerHeatingValueVecto;
WeightingFactor = weightingFactor;
}
}
public XMLDeclarationReport(IOutputDataWriter writer = null)
{
_manufacturerReport = new XMLManufacturerReport(); //new XDocument(new XDeclaration("1.0", "utf-8", "yes"));
_manufacturerReport = new XMLManufacturerReport();
_customerReport = new XMLCustomerReport();
//CustomerReport = new XDocument(new XDeclaration("1.0", "utf-8", "yes"));
_writer = writer;
}
......@@ -156,14 +164,15 @@ namespace TUGraz.VectoCore.OutputData.XML
protected override void DoAddResult(ResultEntry entry, VectoRunData runData, IModalDataContainer modData)
{
entry.SetResultData(runData, modData);
var factor = _weightingFactors[Tuple.Create(runData.Mission.MissionType, runData.Loading)];
entry.SetResultData(runData, modData, factor);
}
protected internal override void DoWriteReport()
{
foreach (var result in Missions.OrderBy(m => m.Key)) {
_manufacturerReport.AddResult(result.Value);
_customerReport.AddResult(result.Value);
_manufacturerReport.WriteResult(result.Value);
_customerReport.WriteResult(result.Value);
}
_manufacturerReport.GenerateReport();
......@@ -184,10 +193,36 @@ namespace TUGraz.VectoCore.OutputData.XML
public override void InitializeReport(VectoRunData modelData)
{
var weightingGroup = DeclarationData.WeightingGroup.Lookup(
modelData.VehicleData.VehicleClass, modelData.VehicleData.SleeperCab,
modelData.EngineData.RatedPowerDeclared);
_weightingFactors = weightingGroup == WeightingGroup.Unknown ? ZeroWeighting : DeclarationData.WeightingFactors.Lookup(weightingGroup);
_manufacturerReport.Initialize(modelData);
_customerReport.Initialize(modelData);
}
private static IDictionary<Tuple<MissionType, LoadingType>, double> ZeroWeighting
{
get {
return new ReadOnlyDictionary<Tuple<MissionType, LoadingType>, double>(new Dictionary<Tuple<MissionType, LoadingType>, double>() {
{ Tuple.Create(MissionType.LongHaul, LoadingType.LowLoading), 0},
{ Tuple.Create(MissionType.LongHaul, LoadingType.ReferenceLoad), 0},
{ Tuple.Create(MissionType.RegionalDelivery, LoadingType.LowLoading), 0},
{ Tuple.Create(MissionType.RegionalDelivery, LoadingType.ReferenceLoad), 0},
{ Tuple.Create(MissionType.UrbanDelivery, LoadingType.LowLoading), 0},
{ Tuple.Create(MissionType.UrbanDelivery, LoadingType.ReferenceLoad), 0},
{ Tuple.Create(MissionType.LongHaulEMS, LoadingType.LowLoading), 0},
{ Tuple.Create(MissionType.LongHaulEMS, LoadingType.ReferenceLoad), 0},
{ Tuple.Create(MissionType.RegionalDeliveryEMS, LoadingType.LowLoading), 0},
{ Tuple.Create(MissionType.RegionalDeliveryEMS, LoadingType.ReferenceLoad), 0},
{ Tuple.Create(MissionType.MunicipalUtility, LoadingType.LowLoading), 0},
{ Tuple.Create(MissionType.MunicipalUtility, LoadingType.ReferenceLoad), 0},
{ Tuple.Create(MissionType.Construction, LoadingType.LowLoading), 0},
{ Tuple.Create(MissionType.Construction, LoadingType.ReferenceLoad), 0},
});
}
}
public static IEnumerable<XElement> GetResults(ResultEntry result, XNamespace tns, bool fullOutput)
{
......
......@@ -62,8 +62,13 @@ namespace TUGraz.VectoCore.OutputData.XML
protected XNamespace tns;
protected XNamespace di;
private bool _allSuccess = true;
private KilogramPerMeter _weightedCo2 = 0.SI<KilogramPerMeter>();
private Kilogram _weightedPayload = 0.SI<Kilogram>();
public XMLManufacturerReport()
{
di = "http://www.w3.org/2000/09/xmldsig#";
......@@ -301,11 +306,13 @@ namespace TUGraz.VectoCore.OutputData.XML
};
}
public void AddResult(
public void WriteResult(
DeclarationReport<XMLDeclarationReport.ResultEntry>.ResultContainer<XMLDeclarationReport.ResultEntry> entry)
{
foreach (var resultEntry in entry.ResultEntry) {
_allSuccess &= resultEntry.Value.Status == VectoRun.Status.Success;
_weightedPayload += resultEntry.Value.Payload * resultEntry.Value.WeightingFactor;
_weightedCo2 += resultEntry.Value.CO2Total / resultEntry.Value.Distance * resultEntry.Value.WeightingFactor;
Results.Add(new XElement(tns + XMLNames.Report_Result_Result,
new XAttribute(XMLNames.Report_Result_Status_Attr,
resultEntry.Value.Status == VectoRun.Status.Success ? "success" : "error"),
......@@ -382,6 +389,21 @@ namespace TUGraz.VectoCore.OutputData.XML
var retVal = new XDocument();
var results = new XElement(Results);
results.AddFirst(new XElement(tns + XMLNames.Report_Result_Status, _allSuccess ? "success" : "error"));
var summary = _weightedPayload > 0
? new XElement(
"Summary",
new XElement(
"SpecificCO2Emissions",
new XAttribute(XMLNames.Report_Results_Unit_Attr, "gCO2/tkm"),
(_weightedCo2 / _weightedPayload).ConvertToGrammPerTonKilometer().ToXMLFormat(1)
),
new XElement(
"AveragePayload",
new XAttribute(XMLNames.Report_Results_Unit_Attr, XMLNames.Unit_t),
_weightedPayload.ConvertToTon().ToXMLFormat(3)
)
)
: null;
var vehicle = new XElement(VehiclePart);
vehicle.Add(InputDataIntegrity);
retVal.Add(new XProcessingInstruction("xml-stylesheet", "href=\"https://webgate.ec.europa.eu/CITnet/svn/VECTO/trunk/Share/XML/CSS/VectoReports.css\""));
......@@ -395,6 +417,7 @@ namespace TUGraz.VectoCore.OutputData.XML
new XElement(tns + "Data",
vehicle,
results,
summary,
GetApplicationInfo())
)
);
......
......@@ -89,9 +89,9 @@ namespace TUGraz.VectoCore.OutputData.XML
#region Overrides of ResultEntry
public override void SetResultData(VectoRunData runData, IModalDataContainer data)
public override void SetResultData(VectoRunData runData, IModalDataContainer data, double factor)
{
base.SetResultData(runData, data);
base.SetResultData(runData, data, factor);
if (runData.SimulationType != SimulationType.VerificationTest) {
return;
......@@ -163,7 +163,7 @@ namespace TUGraz.VectoCore.OutputData.XML
protected override void DoAddResult(
ResultEntry entry, VectoRunData runData, IModalDataContainer modData)
{
entry.SetResultData(runData, modData);
entry.SetResultData(runData, modData, 0.0);
}
protected internal override void DoWriteReport()
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment