From 6a5324fac8c98034d931caec61dff210bec456aa Mon Sep 17 00:00:00 2001 From: Luc Maisonobe <luc@orekit.org> Date: Fri, 6 Feb 2015 17:06:58 +0100 Subject: [PATCH] Added dumping of algorithm. --- .../java/org/orekit/rugged/errors/Dump.java | 30 +++++++++++++++++++ .../org/orekit/rugged/errors/DumpManager.java | 20 +++++++++++++ .../intersection/BasicScanAlgorithm.java | 5 ++++ .../ConstantElevationAlgorithm.java | 4 +++ .../intersection/IgnoreDEMAlgorithm.java | 4 +++ .../duvenhage/DuvenhageAlgorithm.java | 7 +++++ 6 files changed, 70 insertions(+) diff --git a/src/main/java/org/orekit/rugged/errors/Dump.java b/src/main/java/org/orekit/rugged/errors/Dump.java index cd4aa850..421f9f1d 100644 --- a/src/main/java/org/orekit/rugged/errors/Dump.java +++ b/src/main/java/org/orekit/rugged/errors/Dump.java @@ -24,6 +24,7 @@ import java.util.Locale; import java.util.TimeZone; import org.apache.commons.math3.util.OpenIntToDoubleHashMap; +import org.orekit.rugged.api.AlgorithmId; import org.orekit.rugged.raster.Tile; import org.orekit.rugged.utils.ExtendedEllipsoid; @@ -39,6 +40,9 @@ class Dump { /** Tiles map. */ private final List<DumpedTileData> tiles; + /** Flag for dumped algorithm. */ + private boolean algorithmDumped; + /** Flag for dumped ellipsoid. */ private boolean ellipsoidDumped; @@ -48,6 +52,7 @@ class Dump { public Dump(final PrintWriter writer) { this.writer = writer; this.tiles = new ArrayList<DumpedTileData>(); + this.algorithmDumped = false; this.ellipsoidDumped = false; dumpHeader(); } @@ -74,6 +79,31 @@ class Dump { getTileData(tile).setElevation(latitudeIndex, longitudeIndex, elevation); } + /** Dump algorithm data. + * @param algorithmId algorithm ID + */ + public void dumpAlgorithm(final AlgorithmId algorithmId) { + if (!algorithmDumped) { + writer.format(Locale.US, + "algorithm: %s%n", + algorithmId.name()); + algorithmDumped = true; + } + } + + /** Dump algorithm data. + * @param algorithmId algorithm ID + * @param specific algorithm specific extra data + */ + public void dumpAlgorithm(final AlgorithmId algorithmId, final double specific) { + if (!algorithmDumped) { + writer.format(Locale.US, + "algorithm: %s %22.15e%n", + algorithmId.name(), specific); + algorithmDumped = true; + } + } + /** Dump ellipsoid data. * @param ellipsoid ellipsoid to dump */ diff --git a/src/main/java/org/orekit/rugged/errors/DumpManager.java b/src/main/java/org/orekit/rugged/errors/DumpManager.java index 7e49ea7d..454cfdc6 100644 --- a/src/main/java/org/orekit/rugged/errors/DumpManager.java +++ b/src/main/java/org/orekit/rugged/errors/DumpManager.java @@ -20,6 +20,7 @@ import java.io.File; import java.io.IOException; import java.io.PrintWriter; +import org.orekit.rugged.api.AlgorithmId; import org.orekit.rugged.raster.Tile; import org.orekit.rugged.utils.ExtendedEllipsoid; @@ -96,6 +97,25 @@ public class DumpManager { } } + /** Dump algorithm data. + * @param algorithmId algorithm ID + */ + public static void dumpAlgorithm(final AlgorithmId algorithmId) { + if (isActive()) { + DUMP.get().dumpAlgorithm(algorithmId); + } + } + + /** Dump algorithm data. + * @param algorithmId algorithm ID + * @param specific algorithm specific extra data + */ + public static void dumpAlgorithm(final AlgorithmId algorithmId, final double specific) { + if (isActive()) { + DUMP.get().dumpAlgorithm(algorithmId, specific); + } + } + /** Dump ellipsoid data. * @param ellipsoid ellipsoid to dump */ diff --git a/src/main/java/org/orekit/rugged/intersection/BasicScanAlgorithm.java b/src/main/java/org/orekit/rugged/intersection/BasicScanAlgorithm.java index aa14dbe1..c4d54ef4 100644 --- a/src/main/java/org/orekit/rugged/intersection/BasicScanAlgorithm.java +++ b/src/main/java/org/orekit/rugged/intersection/BasicScanAlgorithm.java @@ -23,6 +23,8 @@ import org.apache.commons.math3.geometry.euclidean.threed.Vector3D; import org.apache.commons.math3.util.FastMath; import org.orekit.bodies.GeodeticPoint; import org.orekit.errors.OrekitException; +import org.orekit.rugged.api.AlgorithmId; +import org.orekit.rugged.errors.DumpManager; import org.orekit.rugged.errors.RuggedException; import org.orekit.rugged.raster.SimpleTile; import org.orekit.rugged.raster.SimpleTileFactory; @@ -68,6 +70,8 @@ public class BasicScanAlgorithm implements IntersectionAlgorithm { throws RuggedException { try { + DumpManager.dumpAlgorithm(AlgorithmId.BASIC_SLOW_EXHAUSTIVE_SCAN_FOR_TESTS_ONLY); + // find the tiles between the entry and exit point in the Digital Elevation Model NormalizedGeodeticPoint entryPoint = null; NormalizedGeodeticPoint exitPoint = null; @@ -163,6 +167,7 @@ public class BasicScanAlgorithm implements IntersectionAlgorithm { final NormalizedGeodeticPoint closeGuess) throws RuggedException { try { + DumpManager.dumpAlgorithm(AlgorithmId.BASIC_SLOW_EXHAUSTIVE_SCAN_FOR_TESTS_ONLY); final Vector3D delta = ellipsoid.transform(closeGuess).subtract(position); final double s = Vector3D.dotProduct(delta, los) / los.getNormSq(); final GeodeticPoint projected = ellipsoid.transform(new Vector3D(1, position, s, los), diff --git a/src/main/java/org/orekit/rugged/intersection/ConstantElevationAlgorithm.java b/src/main/java/org/orekit/rugged/intersection/ConstantElevationAlgorithm.java index 8e9cb7b3..f4337b64 100644 --- a/src/main/java/org/orekit/rugged/intersection/ConstantElevationAlgorithm.java +++ b/src/main/java/org/orekit/rugged/intersection/ConstantElevationAlgorithm.java @@ -19,6 +19,8 @@ package org.orekit.rugged.intersection; import org.apache.commons.math3.geometry.euclidean.threed.Vector3D; import org.orekit.bodies.GeodeticPoint; import org.orekit.errors.OrekitException; +import org.orekit.rugged.api.AlgorithmId; +import org.orekit.rugged.errors.DumpManager; import org.orekit.rugged.errors.RuggedException; import org.orekit.rugged.utils.ExtendedEllipsoid; import org.orekit.rugged.utils.NormalizedGeodeticPoint; @@ -47,6 +49,7 @@ public class ConstantElevationAlgorithm implements IntersectionAlgorithm { final Vector3D position, final Vector3D los) throws RuggedException { try { + DumpManager.dumpAlgorithm(AlgorithmId.CONSTANT_ELEVATION_OVER_ELLIPSOID, constantElevation); final Vector3D p = ellipsoid.pointAtAltitude(position, los, constantElevation); final GeodeticPoint gp = ellipsoid.transform(p, ellipsoid.getFrame(), null); return new NormalizedGeodeticPoint(gp.getLatitude(), gp.getLongitude(), gp.getAltitude(), 0.0); @@ -62,6 +65,7 @@ public class ConstantElevationAlgorithm implements IntersectionAlgorithm { final NormalizedGeodeticPoint closeGuess) throws RuggedException { try { + DumpManager.dumpAlgorithm(AlgorithmId.CONSTANT_ELEVATION_OVER_ELLIPSOID, constantElevation); final Vector3D p = ellipsoid.pointAtAltitude(position, los, constantElevation); final GeodeticPoint gp = ellipsoid.transform(p, ellipsoid.getFrame(), null); return new NormalizedGeodeticPoint(gp.getLatitude(), gp.getLongitude(), gp.getAltitude(), diff --git a/src/main/java/org/orekit/rugged/intersection/IgnoreDEMAlgorithm.java b/src/main/java/org/orekit/rugged/intersection/IgnoreDEMAlgorithm.java index da58982c..c63eb800 100644 --- a/src/main/java/org/orekit/rugged/intersection/IgnoreDEMAlgorithm.java +++ b/src/main/java/org/orekit/rugged/intersection/IgnoreDEMAlgorithm.java @@ -17,6 +17,8 @@ package org.orekit.rugged.intersection; import org.apache.commons.math3.geometry.euclidean.threed.Vector3D; +import org.orekit.rugged.api.AlgorithmId; +import org.orekit.rugged.errors.DumpManager; import org.orekit.rugged.errors.RuggedException; import org.orekit.rugged.utils.ExtendedEllipsoid; import org.orekit.rugged.utils.NormalizedGeodeticPoint; @@ -39,6 +41,7 @@ public class IgnoreDEMAlgorithm implements IntersectionAlgorithm { public NormalizedGeodeticPoint intersection(final ExtendedEllipsoid ellipsoid, final Vector3D position, final Vector3D los) throws RuggedException { + DumpManager.dumpAlgorithm(AlgorithmId.IGNORE_DEM_USE_ELLIPSOID); return ellipsoid.pointOnGround(position, los, 0.0); } @@ -48,6 +51,7 @@ public class IgnoreDEMAlgorithm implements IntersectionAlgorithm { final Vector3D position, final Vector3D los, final NormalizedGeodeticPoint closeGuess) throws RuggedException { + DumpManager.dumpAlgorithm(AlgorithmId.IGNORE_DEM_USE_ELLIPSOID); return intersection(ellipsoid, position, los); } diff --git a/src/main/java/org/orekit/rugged/intersection/duvenhage/DuvenhageAlgorithm.java b/src/main/java/org/orekit/rugged/intersection/duvenhage/DuvenhageAlgorithm.java index 5bd2c77a..16aef60e 100644 --- a/src/main/java/org/orekit/rugged/intersection/duvenhage/DuvenhageAlgorithm.java +++ b/src/main/java/org/orekit/rugged/intersection/duvenhage/DuvenhageAlgorithm.java @@ -20,6 +20,8 @@ import org.apache.commons.math3.geometry.euclidean.threed.Vector3D; import org.apache.commons.math3.util.FastMath; import org.orekit.bodies.GeodeticPoint; import org.orekit.errors.OrekitException; +import org.orekit.rugged.api.AlgorithmId; +import org.orekit.rugged.errors.DumpManager; import org.orekit.rugged.errors.RuggedException; import org.orekit.rugged.errors.RuggedMessages; import org.orekit.rugged.intersection.IntersectionAlgorithm; @@ -71,6 +73,8 @@ public class DuvenhageAlgorithm implements IntersectionAlgorithm { throws RuggedException { try { + DumpManager.dumpAlgorithm(flatBody ? AlgorithmId.DUVENHAGE_FLAT_BODY : AlgorithmId.DUVENHAGE); + // compute intersection with ellipsoid final NormalizedGeodeticPoint gp0 = ellipsoid.pointOnGround(position, los, 0.0); @@ -161,6 +165,9 @@ public class DuvenhageAlgorithm implements IntersectionAlgorithm { final NormalizedGeodeticPoint closeGuess) throws RuggedException { try { + + DumpManager.dumpAlgorithm(flatBody ? AlgorithmId.DUVENHAGE_FLAT_BODY : AlgorithmId.DUVENHAGE); + if (flatBody) { // under the (bad) flat-body assumption, the reference point must remain // at DEM entry and exit, even if we already have a much better close guess :-( -- GitLab