From aa2377235b0f0522d7f78756f4e556292c38d3f5 Mon Sep 17 00:00:00 2001
From: Michael Krisper <michael.krisper@tugraz.at>
Date: Thu, 10 Nov 2016 10:05:03 +0100
Subject: [PATCH] SumFile: Corrected Bug with Cruise Time Share. Added
 invariant to check that timeshares always add up to 100%

---
 .../VectoCore/OutputData/IModalDataContainer.cs |  2 +-
 .../OutputData/SummaryDataContainer.cs          | 17 ++++++++++++++---
 2 files changed, 15 insertions(+), 4 deletions(-)

diff --git a/VectoCore/VectoCore/OutputData/IModalDataContainer.cs b/VectoCore/VectoCore/OutputData/IModalDataContainer.cs
index 3239ca6967..33ccd8bad6 100644
--- a/VectoCore/VectoCore/OutputData/IModalDataContainer.cs
+++ b/VectoCore/VectoCore/OutputData/IModalDataContainer.cs
@@ -200,7 +200,7 @@ namespace TUGraz.VectoCore.OutputData
 		public static Scalar CruiseTimeShare(this MeterPerSquareSecond[] acceleration3SecondAverage)
 		{
 			if (acceleration3SecondAverage.Length > 0) {
-				return 100.SI<Scalar>() * acceleration3SecondAverage.Count(x => x.IsBetween(-0.125, -0.125)) /
+				return 100.SI<Scalar>() * acceleration3SecondAverage.Count(x => x.IsBetween(-0.125, 0.125)) /
 						acceleration3SecondAverage.Length;
 			}
 			return null;
diff --git a/VectoCore/VectoCore/OutputData/SummaryDataContainer.cs b/VectoCore/VectoCore/OutputData/SummaryDataContainer.cs
index 87be1e16ff..48c3978c90 100644
--- a/VectoCore/VectoCore/OutputData/SummaryDataContainer.cs
+++ b/VectoCore/VectoCore/OutputData/SummaryDataContainer.cs
@@ -275,10 +275,21 @@ namespace TUGraz.VectoCore.OutputData
 			row[ACC] = modData.AccelerationAverage();
 			row[ACC_POS] = acc.AccelerationsPositive();
 			row[ACC_NEG] = acc.AccelerationsNegative();
-			row[ACC_TIMESHARE] = acc.AccelerationTimeShare();
-			row[DEC_TIMESHARE] = acc.DecelerationTimeShare();
-			row[CRUISE_TIMESHARE] = acc.CruiseTimeShare();
+			var accTimeShare = acc.AccelerationTimeShare();
+			row[ACC_TIMESHARE] = accTimeShare;
+			var decTimeShare = acc.DecelerationTimeShare();
+			row[DEC_TIMESHARE] = decTimeShare;
+			var cruiseTimeShare = acc.CruiseTimeShare();
+			row[CRUISE_TIMESHARE] = cruiseTimeShare;
 			row[STOP_TIMESHARE] = modData.StopTimeShare();
+
+			var shareSum = accTimeShare + decTimeShare + cruiseTimeShare;
+			if (!shareSum.IsEqual(100)) {
+				Log.Error(
+					"Sumfile Error: driving behavior timeshares must sum up to 100%: acc: {0}%, dec: {1}%, cruise: {2}%, sum: {3}%",
+					accTimeShare.ToOutputFormat(1, null, false), decTimeShare.ToOutputFormat(1, null, false),
+					cruiseTimeShare.ToOutputFormat(1, null, false), shareSum.ToOutputFormat(1, null, false));
+			}
 		}
 
 		private static string ReplaceNotAllowedCharacters(string text)
-- 
GitLab