From 5a1a8c29e73f47400deb76660e541f9ef619c92f Mon Sep 17 00:00:00 2001 From: Axel Uhl Date: Tue, 5 Nov 2024 16:03:56 +0100 Subject: [PATCH 1/2] bug6063: added dimension "tenth of leg" for GPS fixes --- .../stringmessages/Sailing_StringMessages.properties | 3 ++- .../stringmessages/Sailing_StringMessages_de.properties | 3 ++- .../sap/sailing/datamining/data/HasGPSFixContext.java | 9 +++++++++ .../sailing/datamining/impl/data/GPSFixWithContext.java | 9 +++++++++ .../places/whatsnew/resources/SailingAnalyticsNotes.html | 6 ++++++ 5 files changed, 28 insertions(+), 2 deletions(-) diff --git a/java/com.sap.sailing.datamining/resources/stringmessages/Sailing_StringMessages.properties b/java/com.sap.sailing.datamining/resources/stringmessages/Sailing_StringMessages.properties index 2741475ccfc..f43f00d3f23 100644 --- a/java/com.sap.sailing.datamining/resources/stringmessages/Sailing_StringMessages.properties +++ b/java/com.sap.sailing.datamining/resources/stringmessages/Sailing_StringMessages.properties @@ -274,4 +274,5 @@ RatioDistanceLongVsShortTack=Ratio distance long tack / short tack RatioDurationLongVsShortTack=Ratio duration long tack / short tack Discarded=Discarded DurationFromRaceStartToFirstTack=Duration from race start to first tack -TypeOfFirstLeg=Type of first leg \ No newline at end of file +TypeOfFirstLeg=Type of first leg +TenthInLeg=Which tenth of the leg (1-10) \ No newline at end of file diff --git a/java/com.sap.sailing.datamining/resources/stringmessages/Sailing_StringMessages_de.properties b/java/com.sap.sailing.datamining/resources/stringmessages/Sailing_StringMessages_de.properties index 79aa61c04df..dd8a9c0c31a 100755 --- a/java/com.sap.sailing.datamining/resources/stringmessages/Sailing_StringMessages_de.properties +++ b/java/com.sap.sailing.datamining/resources/stringmessages/Sailing_StringMessages_de.properties @@ -272,4 +272,5 @@ RatioDistanceLongVsShortTack=Verhältnis gesegelte Distanz auf Streck- zu Holebu RatioDurationLongVsShortTack=Verhältnis gesegelte Dauer auf Streck- zu Holebug Discarded=Gestrichen DurationFromRaceStartToFirstTack=Dauer vom Start der Wettfahrt bis zur ersten Wende -TypeOfFirstLeg=Art des ersten Bahnschenkels \ No newline at end of file +TypeOfFirstLeg=Art des ersten Bahnschenkels +TenthInLeg=Zehntel des Bahnschenkels (1-10) \ No newline at end of file diff --git a/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/data/HasGPSFixContext.java b/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/data/HasGPSFixContext.java index de18334a094..1400ad41c1e 100644 --- a/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/data/HasGPSFixContext.java +++ b/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/data/HasGPSFixContext.java @@ -38,4 +38,13 @@ public interface HasGPSFixContext { @Statistic(messageKey = "SmoothedSpeed", resultDecimals = 2) Speed getSmoothedSpeed(); + + /** + * @return the tenth of the leg the fix is in, computed based on the "windward distance" along the leg; the first + * tenth has number 1, the last tenth has number 10. Should the fix not be linked to any leg, the result is + * {@code null}. For reaching legs, "windward distance" translates to rhumbline-based distance + * (along-course). + */ + @Dimension(messageKey="TenthInLeg") + Integer getTenthOfLeg(); } \ No newline at end of file diff --git a/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/impl/data/GPSFixWithContext.java b/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/impl/data/GPSFixWithContext.java index 4687f02c450..3ad59363f8a 100644 --- a/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/impl/data/GPSFixWithContext.java +++ b/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/impl/data/GPSFixWithContext.java @@ -7,6 +7,7 @@ import com.sap.sailing.domain.common.SpeedWithBearing; import com.sap.sailing.domain.common.TackType; import com.sap.sailing.domain.common.tracking.GPSFixMoving; import com.sap.sailing.domain.tracking.TrackedRace; +import com.sap.sailing.domain.tracking.WindPositionMode; import com.sap.sse.common.Bearing; import com.sap.sse.common.Distance; import com.sap.sse.common.Speed; @@ -107,4 +108,12 @@ public class GPSFixWithContext implements HasGPSFixContext { } return result; } + + @Override + public Integer getTenthOfLeg() { + final Distance windwardDistanceToGo = getTrackedLegOfCompetitorContext().getTrackedLegOfCompetitor().getWindwardDistanceToGo(getGPSFix().getTimePoint(), WindPositionMode.LEG_MIDDLE); + final Distance legWindwardDistance = getTrackedLegOfCompetitorContext().getTrackedLegOfCompetitor().getTrackedLeg().getWindwardDistance(); + final double fractionSailed = legWindwardDistance.add(windwardDistanceToGo.scale(-1)).divide(legWindwardDistance); + return (int) Math.min(10, 1+10*fractionSailed); + } } \ No newline at end of file diff --git a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/places/whatsnew/resources/SailingAnalyticsNotes.html b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/places/whatsnew/resources/SailingAnalyticsNotes.html index 525370d26b9..0a117185073 100755 --- a/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/places/whatsnew/resources/SailingAnalyticsNotes.html +++ b/java/com.sap.sailing.gwt.ui/src/main/java/com/sap/sailing/gwt/home/desktop/places/whatsnew/resources/SailingAnalyticsNotes.html @@ -5,6 +5,12 @@

What's New - SAP Sailing Analytics

+
November 2024
+
    +
  • Added a data mining dimension "tenth of leg" for competitor position fixes, such that, e.g., + the first or last tenth of a leg (based on the windward distance) can be excluded during + data collection.
  • +
October 2024
  • Bug fix: for match racing tie breaks, under very special circumstances the tie breaking From db533240b046b5a693acf0c1e326e83a0a46f07f Mon Sep 17 00:00:00 2001 From: Axel Uhl Date: Tue, 5 Nov 2024 16:20:06 +0100 Subject: [PATCH 2/2] bug6063: avoid negative leg fractions, capping to zero --- .../sap/sailing/datamining/impl/data/GPSFixWithContext.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/impl/data/GPSFixWithContext.java b/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/impl/data/GPSFixWithContext.java index 3ad59363f8a..174fba0756d 100644 --- a/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/impl/data/GPSFixWithContext.java +++ b/java/com.sap.sailing.datamining/src/com/sap/sailing/datamining/impl/data/GPSFixWithContext.java @@ -113,7 +113,9 @@ public class GPSFixWithContext implements HasGPSFixContext { public Integer getTenthOfLeg() { final Distance windwardDistanceToGo = getTrackedLegOfCompetitorContext().getTrackedLegOfCompetitor().getWindwardDistanceToGo(getGPSFix().getTimePoint(), WindPositionMode.LEG_MIDDLE); final Distance legWindwardDistance = getTrackedLegOfCompetitorContext().getTrackedLegOfCompetitor().getTrackedLeg().getWindwardDistance(); - final double fractionSailed = legWindwardDistance.add(windwardDistanceToGo.scale(-1)).divide(legWindwardDistance); + // eliminate negative values which may result if the competitor has just entered the leg but is yet to arrive at the windward + // level of the waypoint just rounded: + final double fractionSailed = Math.max(0, legWindwardDistance.add(windwardDistanceToGo.scale(-1)).divide(legWindwardDistance)); return (int) Math.min(10, 1+10*fractionSailed); } } \ No newline at end of file