mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-09-26 23:46:36 +00:00
interims version that uses some BearingWithConfidenceCluster objects here and there with tests all green
This commit is contained in:
@@ -16,4 +16,5 @@
|
||||
<stringAttribute key="org.eclipse.jdt.junit.TEST_KIND" value="org.eclipse.jdt.junit.loader.junit4"/>
|
||||
<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value=""/>
|
||||
<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="com.sap.sailing.domain.test"/>
|
||||
<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-ea"/>
|
||||
</launchConfiguration>
|
||||
|
||||
@@ -16,5 +16,5 @@
|
||||
<stringAttribute key="org.eclipse.jdt.junit.TEST_KIND" value="org.eclipse.jdt.junit.loader.junit4"/>
|
||||
<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value=""/>
|
||||
<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="com.sap.sailing.domain.test"/>
|
||||
<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Dhttp.proxyHost=proxy -Dhttp.proxyPort=8080 -XX:+UseParallelGC -Dtractrac.tunnel=true -Dtractrac.tunnel.host=10.18.10.38"/>
|
||||
<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Dhttp.proxyHost=proxy -Dhttp.proxyPort=8080 -XX:+UseParallelGC -Dtractrac.tunnel=true -Dtractrac.tunnel.host=10.18.10.38 -ea"/>
|
||||
</launchConfiguration>
|
||||
|
||||
@@ -115,11 +115,6 @@ public class TrackTest {
|
||||
track.addGPSFix(f2);
|
||||
track.addGPSFix(f3);
|
||||
SpeedWithBearing average = track.getRawEstimatedSpeed(t2);
|
||||
// A DynamicGPSFixMovingTrackImpl is expected to combine two information sources for bearing estimation:
|
||||
// 1) the bearings as transmitted in the GPS fix received from the device
|
||||
// 2) the bearing from the previous to the current fix
|
||||
// Especially because of 2) the bearing tends to lean a bit towards the past
|
||||
// FIXME a GPSFixMovingTrack now uses time difference-based confidences for averaging bearings
|
||||
assertEquals(0, average.getBearing().getDegrees(), 0.00001);
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -59,7 +59,7 @@ public class WindEstimationOnKielerWoche505Race2DataTest extends OnlineTracTracB
|
||||
Wind estimatedWindDirection = getTrackedRace().getEstimatedWindDirection(/* position */ null, middle);
|
||||
assertNotNull(estimatedWindDirection);
|
||||
Wind estimationBasedOnTrack = estimatedWindTrack.getEstimatedWind(null, middle);
|
||||
assertEquals(estimatedWindDirection.getFrom().getDegrees(), estimationBasedOnTrack.getFrom().getDegrees(), 3.);
|
||||
assertEquals(estimatedWindDirection.getFrom().getDegrees(), estimationBasedOnTrack.getFrom().getDegrees(), 5.);
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
+1
-1
@@ -101,7 +101,7 @@ public class BearingWithConfidenceCluster<RelativeTo> {
|
||||
if (Math.abs(bearings.get(i).getObject().getDifferenceTo(bearings.get(j).getObject()).getDegrees()) >= maxAbsDegDiff) {
|
||||
result = new Pair<BearingWithConfidence<RelativeTo>, BearingWithConfidence<RelativeTo>>(bearings.get(i), bearings.get(j));
|
||||
maxAbsDegDiff = Math.abs(bearings.get(i).getObject().getDifferenceTo(bearings.get(j).getObject()).getDegrees());
|
||||
assert Math.abs(result.getA().getObject().getDegrees()-result.getB().getObject().getDegrees()) <= 180.;
|
||||
assert Math.abs(bearings.get(i).getObject().getDifferenceTo(bearings.get(j).getObject()).getDegrees()) <= 180.;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+6
@@ -44,11 +44,17 @@ public class EstimatedWindFixesAsNavigableSet extends AbstractUnmodifiableNaviga
|
||||
this(track, trackedRace, null, null);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param from expected to be an integer multiple of {@link #RESOLUTION_IN_MILLISECONDS} or <code>null</code>
|
||||
* @param to expected to be an integer multiple of {@link #RESOLUTION_IN_MILLISECONDS} or <code>null</code>
|
||||
*/
|
||||
private EstimatedWindFixesAsNavigableSet(TrackBasedEstimationWindTrackImpl track, TrackedRace trackedRace,
|
||||
TimePoint from, TimePoint to) {
|
||||
this.track = track;
|
||||
this.trackedRace = trackedRace;
|
||||
assert from == null || from.asMillis() % RESOLUTION_IN_MILLISECONDS == 0;
|
||||
this.from = from;
|
||||
assert to == null || to.asMillis() % RESOLUTION_IN_MILLISECONDS == 0;
|
||||
this.to = to;
|
||||
}
|
||||
|
||||
|
||||
+3
-2
@@ -667,9 +667,10 @@ public abstract class TrackedRaceImpl implements TrackedRace, CourseListener {
|
||||
if (!track.hasDirectionChange(timePoint, getManeuverDegreeAngleThreshold())) {
|
||||
SpeedWithBearing estimatedSpeed = track.getEstimatedSpeed(timePoint);
|
||||
if (estimatedSpeed != null) {
|
||||
// TODO but #169: preserve confidence of estimatedSpeed relative to timePoint so as to feed into a BearingWithConfidenceCluster here
|
||||
Bearing bearing = estimatedSpeed.getBearing();
|
||||
BearingCluster bearingClusters = bearings.get(legType);
|
||||
bearingClusters.add(bearing);
|
||||
BearingCluster bearingClusterForLegType = bearings.get(legType);
|
||||
bearingClusterForLegType.add(bearing);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+12
-4
@@ -10,12 +10,15 @@ import java.util.logging.Logger;
|
||||
import com.sap.sailing.domain.base.CourseChange;
|
||||
import com.sap.sailing.domain.base.SpeedWithBearing;
|
||||
import com.sap.sailing.domain.base.Timed;
|
||||
import com.sap.sailing.domain.base.impl.BearingWithConfidenceImpl;
|
||||
import com.sap.sailing.domain.base.impl.KnotSpeedWithBearingImpl;
|
||||
import com.sap.sailing.domain.common.Bearing;
|
||||
import com.sap.sailing.domain.common.Distance;
|
||||
import com.sap.sailing.domain.common.Position;
|
||||
import com.sap.sailing.domain.common.Speed;
|
||||
import com.sap.sailing.domain.common.TimePoint;
|
||||
import com.sap.sailing.domain.confidence.ConfidenceFactory;
|
||||
import com.sap.sailing.domain.confidence.Weigher;
|
||||
import com.sap.sailing.domain.tracking.Wind;
|
||||
import com.sap.sailing.domain.tracking.WindListener;
|
||||
import com.sap.sailing.domain.tracking.WindTrack;
|
||||
@@ -129,7 +132,9 @@ public class WindTrackImpl extends TrackImpl<Wind> implements WindTrack {
|
||||
Iterator<Wind> beforeIter = beforeSet.descendingIterator();
|
||||
Iterator<Wind> afterIter = afterSet.iterator();
|
||||
double knotSum = 0;
|
||||
BearingCluster bearingCluster = new BearingCluster();
|
||||
// TODO bug #169: introduce BearingWithConfidenceCluster and measure speed also with confidence; return confidence
|
||||
Weigher<TimePoint> weigher = ConfidenceFactory.INSTANCE.createExponentialTimeDifferenceWeigher(millisecondsOverWhichToAverage/10);
|
||||
BearingWithConfidenceCluster<TimePoint> bearingCluster = new BearingWithConfidenceCluster<TimePoint>(weigher);
|
||||
int count = 0;
|
||||
long beforeDistanceToAt = 0;
|
||||
long afterDistanceToAt = 0;
|
||||
@@ -153,7 +158,8 @@ public class WindTrackImpl extends TrackImpl<Wind> implements WindTrack {
|
||||
beforeIntervalEnd = beforeWind.getTimePoint();
|
||||
}
|
||||
knotSum += beforeWind.getKnots();
|
||||
bearingCluster.add(beforeWind.getBearing());
|
||||
// TODO bug #169: replace confidence with passed-through confidence of beforeWind fix's confidence
|
||||
bearingCluster.add(new BearingWithConfidenceImpl<TimePoint>(beforeWind.getBearing(), /* confidence */ 0.9, beforeWind.getTimePoint()));
|
||||
count++;
|
||||
if (beforeIter.hasNext()) {
|
||||
beforeWind = beforeIter.next();
|
||||
@@ -167,7 +173,8 @@ public class WindTrackImpl extends TrackImpl<Wind> implements WindTrack {
|
||||
afterIntervalStart = afterWind.getTimePoint();
|
||||
}
|
||||
knotSum += afterWind.getKnots();
|
||||
bearingCluster.add(afterWind.getBearing());
|
||||
// TODO bug #169: replace confidence with passed-through confidence of beforeWind fix's confidence
|
||||
bearingCluster.add(new BearingWithConfidenceImpl<TimePoint>(afterWind.getBearing(), /* confidence */ 0.9, afterWind.getTimePoint()));
|
||||
count++;
|
||||
if (afterIter.hasNext()) {
|
||||
afterWind = afterIter.next();
|
||||
@@ -181,7 +188,8 @@ public class WindTrackImpl extends TrackImpl<Wind> implements WindTrack {
|
||||
if (count == 0) {
|
||||
return null;
|
||||
} else {
|
||||
SpeedWithBearing avgWindSpeed = new KnotSpeedWithBearingImpl(knotSum / count, bearingCluster.getAverage());
|
||||
// TODO bug #169: pass on confidence
|
||||
SpeedWithBearing avgWindSpeed = new KnotSpeedWithBearingImpl(knotSum / count, bearingCluster.getAverage(at).getObject());
|
||||
return new WindImpl(p, at, avgWindSpeed);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user