From 9606dbba5ad73a77c491ce893719b710376929df Mon Sep 17 00:00:00 2001 From: Vladislav Chumak Date: Fri, 24 May 2019 10:48:25 +0200 Subject: [PATCH] Fixed the forgotten check for course change of maneuvers as prerequisite to include the maneuvers in the set of clean maneuvers eligible for wind estimation graph --- ...indRangeBasedTransitionProbabilitiesCalculator.java | 6 ++++++ .../transformer/ManeuverForEstimationTransformer.java | 10 +++++++--- ...eManeuverCurveToManeuverForEstimationConverter.java | 5 +++-- 3 files changed, 16 insertions(+), 5 deletions(-) diff --git a/java/com.sap.sailing.windestimation/src/com/sap/sailing/windestimation/aggregator/hmm/IntersectedWindRangeBasedTransitionProbabilitiesCalculator.java b/java/com.sap.sailing.windestimation/src/com/sap/sailing/windestimation/aggregator/hmm/IntersectedWindRangeBasedTransitionProbabilitiesCalculator.java index 41d92932516..89ab1c4c41d 100644 --- a/java/com.sap.sailing.windestimation/src/com/sap/sailing/windestimation/aggregator/hmm/IntersectedWindRangeBasedTransitionProbabilitiesCalculator.java +++ b/java/com.sap.sailing.windestimation/src/com/sap/sailing/windestimation/aggregator/hmm/IntersectedWindRangeBasedTransitionProbabilitiesCalculator.java @@ -19,6 +19,12 @@ public class IntersectedWindRangeBasedTransitionProbabilitiesCalculator implements GraphNodeTransitionProbabilitiesCalculator { private static final double LA_PLACE_TRANSITION_PROBABILITY = 0.001; + + // TODO make the value below boat class specific? + /** + * Sum of the smallest possible absolute TWA upwind and smallest possible (180 deg - absolute TWA downwind). The + * amount is used to limit the possible wind range considering head-up and bear-away maneuvers. + */ protected static final int MIN_BEATING_ANGLE_PLUS_MIN_RUNNING_ANGLE = 40; private static final double MAX_ABS_WIND_COURSE_DEVIATION_TOLERANCE_WITHIN_ANALYSIS_INTERVAL_IN_DEGREES = 40; protected final boolean propagateIntersectedWindRangeOfHeadupAndBearAway; diff --git a/java/com.sap.sailing.windestimation/src/com/sap/sailing/windestimation/data/transformer/ManeuverForEstimationTransformer.java b/java/com.sap.sailing.windestimation/src/com/sap/sailing/windestimation/data/transformer/ManeuverForEstimationTransformer.java index 67db496c03a..6d5195a7528 100644 --- a/java/com.sap.sailing.windestimation/src/com/sap/sailing/windestimation/data/transformer/ManeuverForEstimationTransformer.java +++ b/java/com.sap.sailing.windestimation/src/com/sap/sailing/windestimation/data/transformer/ManeuverForEstimationTransformer.java @@ -109,7 +109,9 @@ public class ManeuverForEstimationTransformer } public boolean isManeuverClean(ConvertableToManeuverForEstimation maneuver) { - return isManeuverBoundariesDataClean(maneuver, true, true) + return isManeuverEligibleForAnalysis(maneuver.getCourseChangeInDegrees(), + maneuver.getCourseChangeInDegreesWithinTurningSection()) + && isManeuverBoundariesDataClean(maneuver, true, true) && Math.abs(maneuver.getSpeedWithBearingBefore().getKnots() - maneuver.getSpeedWithBearingAfter().getKnots()) * 3 < Math.min(maneuver.getSpeedWithBearingBefore().getKnots(), @@ -123,8 +125,10 @@ public class ManeuverForEstimationTransformer return getManeuverCategory(maneuver.getCourseChangeInDegreesWithinTurningSection(), maneuver.isMarkPassing()); } - public boolean isManeuverEligibleForAnalysis(double courseChangeWithinTurningSectionInDegrees) { - return getManeuverCategory(courseChangeWithinTurningSectionInDegrees, false) == ManeuverCategory.REGULAR; + public boolean isManeuverEligibleForAnalysis(double courseChangeInDegrees, + double courseChangeWithinTurningSectionInDegrees) { + return getManeuverCategory(courseChangeWithinTurningSectionInDegrees, false) == ManeuverCategory.REGULAR + && getManeuverCategory(courseChangeInDegrees, false) == ManeuverCategory.REGULAR; } public ManeuverCategory getManeuverCategory(double courseChangeWithinTurningSectionInDegrees, boolean markPassing) { diff --git a/java/com.sap.sailing.windestimation/src/com/sap/sailing/windestimation/integration/CompleteManeuverCurveToManeuverForEstimationConverter.java b/java/com.sap.sailing.windestimation/src/com/sap/sailing/windestimation/integration/CompleteManeuverCurveToManeuverForEstimationConverter.java index 1ff004b1426..95100e22c66 100644 --- a/java/com.sap.sailing.windestimation/src/com/sap/sailing/windestimation/integration/CompleteManeuverCurveToManeuverForEstimationConverter.java +++ b/java/com.sap.sailing.windestimation/src/com/sap/sailing/windestimation/integration/CompleteManeuverCurveToManeuverForEstimationConverter.java @@ -44,8 +44,9 @@ public class CompleteManeuverCurveToManeuverForEstimationConverter { public ManeuverForEstimation convertCleanManeuverSpotToManeuverForEstimation(CompleteManeuverCurve maneuver, CompleteManeuverCurve previousManeuver, CompleteManeuverCurve nextManeuver, Competitor competitor, TrackTimeInfo trackTimeInfo) { - if (!maneuverForEstimationTransformer - .isManeuverEligibleForAnalysis(maneuver.getMainCurveBoundaries().getDirectionChangeInDegrees())) { + if (!maneuverForEstimationTransformer.isManeuverEligibleForAnalysis( + maneuver.getManeuverCurveWithStableSpeedAndCourseBoundaries().getDirectionChangeInDegrees(), + maneuver.getMainCurveBoundaries().getDirectionChangeInDegrees())) { // skip further computation in order to improve performance performance return null; }