mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-11-02 01:00:46 +00:00
Reverts the three call-site changes from issue #6184 (commit
1368179ac0) that passed getWindSources(MANEUVER_BASED_ESTIMATION) as
the exclusion set to trackedRace.getWind(pos, at, exclude) inside the
maneuver-typing paths:
* IncrementalManeuverDetectorImpl.getManeuverSpotWithTypedManeuversFromExistingManeuverSpotConsideringPossibleWindChange
(line 261) -- re-typing an existing maneuver spot when the wind at
its position/time has changed.
* ManeuverDetectorImpl.determineManeuversFromManeuverCurve (line 335)
-- initial typing of a fresh spot.
* ManeuverDetectorWithEstimationDataSupportDecoratorImpl (line 78) --
same, in the estimation-data-support decorator.
Each now calls the two-arg getWind(pos, at), letting the tracked race's
confidence-weighted averaging pick the best wind source. When
non-estimation sources (EXPEDITION, TRACK_BASED_ESTIMATION, COURSE_BASED,
etc.) provide a wind fix at the requested position and time, their
higher base confidence dominates and MANEUVER_BASED_ESTIMATION does
not affect the result meaningfully -- so #6184's original concern
(the estimation track feeding back on itself with equal weight) does
not materialize.
When no other wind source has a fix, the estimation track's wind (with
its lower base confidence) is used. That is the intended bootstrap of
the wind-estimation-from-maneuvers design:
1. Maneuver *spots* detected on the competitor tracks (geometry only).
2. Estimator's NN + MST/HMM pre-classifies the spots, producing wind
fixes on the MANEUVER_BASED_ESTIMATION track.
3. The wind track update triggers a maneuver-cache recalc; on
re-typing, isManeuverSpotWindNearlySame reads all wind sources
including the estimation track (line 437, unchanged by #6184).
4. determineManeuversFromManeuverCurve types the spot using whatever
wind sources are available.
With #6184's exclusion in place, step 4 refused to use the estimation
track's wind, so races without any other wind source could never
progress from pre-classified spots to fully-typed ManeuverImpl
objects, breaking the bootstrap.
Removing the exclusion restores the bootstrap. Confidence-weighted
averaging inherent to TrackedRaceImpl.getWindWithConfidenceUncached
handles the 'prefer non-estimation when available' concern that
motivated #6184.