added start delay to Data Mining

This commit is contained in:
Axel Uhl
2025-02-19 17:16:14 +01:00
parent c3590e36ac
commit b156c8f911
5 changed files with 27 additions and 0 deletions
@@ -87,6 +87,7 @@ AbsoluteRankPredictionErrorRhumbLineBasedAcrossFirstThreeQuarters=Error of avera
WindSpeedInBeaufort=Wind Speed in Bft
DistanceAtStart=Distance to Start at Start
SpeedWhenStarting=Speed at Start
StartDelay=Start Delay
SpeedTenSecondsBeforeStart=Speed 10s Before Start
RankAtFirstMark=Rank at First Mark
NumberOfManeuvers=Number of Maneuvers
@@ -86,6 +86,7 @@ AbsoluteRankPredictionErrorRhumbLineBasedAcrossFirstThreeQuarters=Relative Abwei
WindSpeedInBeaufort=Windgeschwindigkeit in Bft.
DistanceAtStart=Distanz zur Startlinie zum Startzeitpunkt
SpeedWhenStarting=Geschwindigkeit beim Überqueren der Startlinie
StartDelay=Startverzug
SpeedTenSecondsBeforeStart=Geschwindigkeit 10s vor dem Startzeitpunkt
RankAtFirstMark=Position beim ersten Wegpunkt
NumberOfManeuvers=Anzahl der Manöver
@@ -87,6 +87,9 @@ public interface HasRaceOfCompetitorContext extends HasSomethingOfCompetitorCont
@Connector(messageKey="SpeedWhenStarting", ordinal=3)
Speed getSpeedWhenStarting();
@Statistic(messageKey="StartDelay", resultDecimals=1)
Duration getStartDelay();
@Connector(messageKey="SpeedTenSecondsBeforeStart", ordinal=4)
Speed getSpeedTenSecondsBeforeStart();
@@ -3,6 +3,7 @@ package com.sap.sailing.datamining.impl.data;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.NavigableSet;
import java.util.Set;
import java.util.SortedMap;
import java.util.concurrent.TimeUnit;
@@ -232,6 +233,26 @@ public class RaceOfCompetitorWithContext implements HasRaceOfCompetitorContext {
return getTrackedRace().getSpeedWhenCrossingStartLine(getCompetitor());
}
@Override
public Duration getStartDelay() {
final NavigableSet<MarkPassing> competitorMarkPassings = getTrackedRace().getMarkPassings(competitor);
getTrackedRace().lockForRead(competitorMarkPassings);
try {
final Duration result;
final TimePoint startOfRace;
if (!competitorMarkPassings.isEmpty() && (startOfRace = getTrackedRace().getStartOfRace()) != null) {
final MarkPassing firstMarkPassing = competitorMarkPassings.iterator().next();
TimePoint competitorStartTime = firstMarkPassing.getTimePoint();
result = startOfRace.until(competitorStartTime);
} else {
result = null;
}
return result;
} finally {
getTrackedRace().unlockAfterRead(competitorMarkPassings);
}
}
@Override
public Speed getSpeedTenSecondsBeforeStart() {
return getTrackedRace().getSpeed(getCompetitor(), TimeUnit.SECONDS.toMillis(10));