Commit ccaee198 authored by Luc Maisonobe's avatar Luc Maisonobe
Browse files

Dump results of direct location calls.

parent 2d0ba555
......@@ -248,6 +248,8 @@ public class Rugged {
algorithm.intersection(ellipsoid, pBody, lBody));
}
DumpManager.dumpDirectLocationResult(gp[i]);
}
return gp;
......@@ -297,6 +299,7 @@ public class Rugged {
lInert = obsLInert;
}
final NormalizedGeodeticPoint result;
if (lightTimeCorrection) {
// compute DEM intersection with light time correction
final Vector3D sP = approximate.transformPosition(position);
......@@ -311,19 +314,22 @@ public class Rugged {
final Vector3D eP2 = ellipsoid.transform(gp1);
final double deltaT2 = eP2.distance(sP) / Constants.SPEED_OF_LIGHT;
final Transform shifted2 = inertToBody.shiftedBy(-deltaT2);
return algorithm.refineIntersection(ellipsoid,
shifted2.transformPosition(pInert),
shifted2.transformVector(lInert),
gp1);
result = algorithm.refineIntersection(ellipsoid,
shifted2.transformPosition(pInert),
shifted2.transformVector(lInert),
gp1);
} else {
// compute DEM intersection without light time correction
final Vector3D pBody = inertToBody.transformPosition(pInert);
final Vector3D lBody = inertToBody.transformVector(lInert);
return algorithm.refineIntersection(ellipsoid, pBody, lBody,
algorithm.intersection(ellipsoid, pBody, lBody));
result = algorithm.refineIntersection(ellipsoid, pBody, lBody,
algorithm.intersection(ellipsoid, pBody, lBody));
}
DumpManager.dumpDirectLocationResult(result);
return result;
}
/** Find the date at which sensor sees a ground point.
......
......@@ -20,8 +20,9 @@ import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.List;
......@@ -34,6 +35,7 @@ import org.apache.commons.math3.geometry.euclidean.threed.Rotation;
import org.apache.commons.math3.geometry.euclidean.threed.Vector3D;
import org.apache.commons.math3.util.FastMath;
import org.apache.commons.math3.util.OpenIntToDoubleHashMap;
import org.orekit.bodies.GeodeticPoint;
import org.orekit.bodies.OneAxisEllipsoid;
import org.orekit.errors.OrekitException;
import org.orekit.frames.Frame;
......@@ -59,6 +61,12 @@ public class DumpReplayer {
/** Comment start marker. */
private static final String COMMENT_START = "#";
/** Keyword for latitude fields. */
private static final String LATITUDE = "latitude";
/** Keyword for longitude fields. */
private static final String LONGITUDE = "longitude";
/** Keyword for elevation fields. */
private static final String ELEVATION = "elevation";
......@@ -207,11 +215,11 @@ public class DumpReplayer {
*/
public void parse(final File file) throws RuggedException {
try {
final BufferedReader reader = new BufferedReader(new FileReader(file));
final BufferedReader reader =
new BufferedReader(new InputStreamReader(new FileInputStream(file), "UTF-8"));
int l = 0;
for (String line = reader.readLine(); line != null; line = reader.readLine()) {
++l;
LineParser.parse(l, file, line, this);
LineParser.parse(++l, file, line, this);
}
reader.close();
} catch (IOException ioe) {
......@@ -308,14 +316,49 @@ public class DumpReplayer {
* @return results of all dumped calls
* @exception RuggedException if a call fails
*/
public Object[] execute(final Rugged rugged) throws RuggedException {
final Object[] results = new Object[calls.size()];
public Result[] execute(final Rugged rugged) throws RuggedException {
final Result[] results = new Result[calls.size()];
for (int i = 0; i < calls.size(); ++i) {
results[i] = calls.get(i).execute(rugged);
results[i] = new Result(calls.get(i).expected,
calls.get(i).execute(rugged));
}
return results;
}
/** Container for replay results. */
public static class Result {
/** Expected result. */
private final Object expected;
/** Replayed result. */
private final Object replayed;
/** Simple constructor.
* @param expected expected result
* @param replayed replayed result
*/
private Result(final Object expected, final Object replayed) {
this.expected = expected;
this.replayed = replayed;
}
/** Get the expected result.
* @return expected result
*/
public Object getExpected() {
return expected;
}
/** Get the replayed result.
* @return replayed result
*/
public Object getReplayed() {
return replayed;
}
}
/** Line parsers. */
private enum LineParser {
......@@ -419,6 +462,26 @@ public class DumpReplayer {
},
/** Parser for direct location result dump lines. */
DIRECT_LOCATION_RESULT() {
/** {@inheritDoc} */
@Override
public void parse(final int l, final File file, final String line, final String[] fields, final DumpReplayer global)
throws RuggedException {
if (fields.length < 6 || !fields[0].equals(LATITUDE) ||
!fields[2].equals(LONGITUDE) || !fields[4].equals(ELEVATION)) {
throw new RuggedException(RuggedMessages.CANNOT_PARSE_LINE, l, file, line);
}
final GeodeticPoint gp = new GeodeticPoint(Double.parseDouble(fields[1]),
Double.parseDouble(fields[3]),
Double.parseDouble(fields[5]));
final DumpedCall last = global.calls.get(global.calls.size() - 1);
last.expected = gp;
}
},
/** Parser for search span dump lines. */
SPAN() {
......@@ -549,7 +612,7 @@ public class DumpReplayer {
public void parse(final int l, final File file, final String line, final String[] fields, final DumpReplayer global)
throws RuggedException {
if (fields.length < 7 ||
!fields[1].equals(LAT_INDEX) || !fields[3].equals(LON_INDEX) || !fields[5].equals(ELEVATION)) {
!fields[1].equals(LAT_INDEX) || !fields[3].equals(LON_INDEX) || !fields[5].equals(ELEVATION)) {
throw new RuggedException(RuggedMessages.CANNOT_PARSE_LINE, l, file, line);
}
final String name = fields[0];
......@@ -699,13 +762,18 @@ public class DumpReplayer {
}
/** Local interface for dumped calls. */
private interface DumpedCall {
private abstract static class DumpedCall {
/** Expected result. */
private Object expected;
/** Execute a call.
* @param rugged Rugged instance on which called should be performed
* @return result of the call
* @exception RuggedException if the call fails
*/
Object execute(Rugged rugged) throws RuggedException;
public abstract Object execute(Rugged rugged) throws RuggedException;
}
}
......@@ -68,13 +68,14 @@ public class DumpManagerTest {
locationsinglePoint();
DumpManager.deactivate();
int countAlgorithm = 0;
int countEllipsoid = 0;
int countSpan = 0;
int countTransform = 0;
int countDEMTile = 0;
int countDEMCell = 0;
int countDirectLoc = 0;
int countAlgorithm = 0;
int countEllipsoid = 0;
int countSpan = 0;
int countTransform = 0;
int countDEMTile = 0;
int countDEMCell = 0;
int countDirectLoc = 0;
int countDirectLocResult = 0;
BufferedReader br = new BufferedReader(new FileReader(dump));
for (String line = br.readLine(); line != null; line = br.readLine()) {
String trimmed = line.trim();
......@@ -93,6 +94,8 @@ public class DumpManagerTest {
++countDEMCell;
} else if (trimmed.startsWith("direct location:")) {
++countDirectLoc;
} else if (trimmed.startsWith("direct location result:")) {
++countDirectLocResult;
} else {
Assert.fail(line);
}
......@@ -104,8 +107,9 @@ public class DumpManagerTest {
Assert.assertEquals(1, countSpan);
Assert.assertEquals(1, countTransform);
Assert.assertEquals(2, countDEMTile);
Assert.assertEquals(884, countDEMCell);
Assert.assertEquals(887, countDEMCell);
Assert.assertEquals(400, countDirectLoc);
Assert.assertEquals(400, countDirectLocResult);
}
......
......@@ -41,11 +41,17 @@ public class DumpReplayerTest {
DumpReplayer replayer = new DumpReplayer();
replayer.parse(new File(dumpPath));
Rugged rugged = replayer.createRugged();
Object[] results = replayer.execute(rugged);
Assert.assertEquals(3, results.length);
Assert.assertTrue(results[0] instanceof GeodeticPoint);
Assert.assertTrue(results[1] instanceof GeodeticPoint);
Assert.assertTrue(results[2] instanceof GeodeticPoint);
DumpReplayer.Result[] results = replayer.execute(rugged);
Assert.assertEquals(5, results.length);
for (final DumpReplayer.Result result : results) {
GeodeticPoint expectedGP = (GeodeticPoint) result.getExpected();
GeodeticPoint replayedGP = (GeodeticPoint) result.getReplayed();
Assert.assertEquals(expectedGP.getLatitude(), replayedGP.getLatitude(), 1.0e-12);
Assert.assertEquals(expectedGP.getLongitude(), replayedGP.getLongitude(), 1.0e-12);
Assert.assertEquals(expectedGP.getAltitude(), replayedGP.getAltitude(), 1.0e-6);
}
}
}
# Rugged library dump file, created on 2015-02-10T13:52:19Z
# Rugged library dump file, created on 2015-02-10T16:00:15Z
# all units are SI units (m, m/s, rad ...)
direct location: date 2012-01-01T12:30:00.00000000000000Z position 1.500000000000000e+00 0.000000000000000e+00 -2.000000000000000e-01 los 0.000000000000000e+00 -7.547095802227720e-01 6.560590289905073e-01 lightTime true aberration true
span: minDate 2012-01-01T12:29:59.85000000000000Z maxDate 2012-01-01T12:30:00.15000000000000Z tStep 1.000000000000000e-03 tolerance 5.000000000000000e+00 inertialFrame EME2000
transform: index 150 body r -8.085963389171905e-01 -3.465415132416125e-04 4.896468952533137e-04 -5.883634938068593e-01 Ω -8.740475534355122e-08 1.215132763920864e-09 -7.292109805268457e-05 ΩDot -1.642299174832679e-16 8.973031065665686e-17 1.983408395824453e-19 spacecraft p 1.384771423708159e+04 3.157872644483112e+03 -7.179504513218164e+06 v -3.193269831348565e+01 -8.025700179158079e+00 8.276060585645734e+00 a -9.306388141791047e-01 -8.320023410534990e+00 1.352798021525103e-03 r -6.828948932066574e-01 4.142451147005848e-01 -3.878489669799004e-01 4.600312256701621e-01 Ω -1.009835959093257e-03 1.982938126604663e-04 1.645927204535755e-04 ΩDot -3.647403055483546e-07 2.008714378022283e-07 -1.257148591486377e-06
direct location: date 2012-01-01T12:30:00.00000000000000Z position 1.500000000000000e+00 0.000000000000000e+00 -2.000000000000000e-01 los 0.000000000000000e+00 -7.547095802227720e-01 6.560590289905073e-01 lightTime true aberration true
ellipsoid: ae 6.378137000000000e+06 f 3.352810664747481e-03 frame ITRF_CIO_CONV_2010_SIMPLE_EOP
algorithm: DUVENHAGE
DEM tile: t0 latMin -4.014257279586958e-01 latStep 6.817692390602850e-05 latRows 257 lonMin 2.495820830351891e+00 lonStep 6.817692390602850e-05 lonCols 257
DEM cell: t0 latIndex 192 lonIndex 0 elevation -1.282721242683617e+03
DEM cell: t0 latIndex 80 lonIndex 192 elevation 3.211682285355159e+03
DEM cell: t0 latIndex 96 lonIndex 64 elevation 1.075720914066972e+03
DEM cell: t0 latIndex 97 lonIndex 64 elevation 9.498384803599795e+02
DEM cell: t0 latIndex 96 lonIndex 65 elevation 1.001623033275892e+03
......@@ -27,6 +29,7 @@ DEM cell: t0 latIndex 98 lonIndex 50 elevation 7.769426987315585e+01
DEM cell: t0 latIndex 99 lonIndex 50 elevation 4.265142906455210e+01
DEM cell: t0 latIndex 97 lonIndex 50 elevation 4.500756443755694e+01
DEM cell: t0 latIndex 97 lonIndex 51 elevation 7.421501844304876e+01
direct location result: latitude -3.947445425992010e-01 longitude 2.499243584750142e+00 elevation 8.434706922629509e+01
direct location: date 2012-01-01T12:30:00.00000000000000Z position 1.500000000000000e+00 0.000000000000000e+00 -2.000000000000000e-01 los 0.000000000000000e+00 -7.548246479094037e-01 6.559266353095021e-01 lightTime true aberration true
DEM cell: t0 latIndex 96 lonIndex 52 elevation 1.110753711365716e+02
DEM cell: t0 latIndex 97 lonIndex 52 elevation 8.027308091623061e+01
......@@ -36,19 +39,44 @@ DEM cell: t0 latIndex 97 lonIndex 49 elevation -1.609219755441909e+01
DEM cell: t0 latIndex 98 lonIndex 49 elevation -2.653137720265925e+01
DEM cell: t0 latIndex 97 lonIndex 48 elevation -9.460844691182658e+01
DEM cell: t0 latIndex 98 lonIndex 48 elevation -6.303622859747302e+01
direct location result: latitude -3.947611273580563e-01 longitude 2.499133846389992e+00 elevation -4.295871413137783e+01
DEM cell: t0 latIndex 91 lonIndex 0 elevation -4.644285910379659e+02
DEM cell: t0 latIndex 92 lonIndex 0 elevation -6.361521230433466e+02
DEM cell: t0 latIndex 91 lonIndex 1 elevation -6.695324221432916e+02
DEM cell: t0 latIndex 92 lonIndex 1 elevation -6.941696826528058e+02
DEM cell: t0 latIndex 91 lonIndex 2 elevation -7.590003401646543e+02
DEM cell: t0 latIndex 90 lonIndex 3 elevation -8.207436833089408e+02
DEM cell: t0 latIndex 90 lonIndex 4 elevation -8.534523757445398e+02
DEM cell: t0 latIndex 90 lonIndex 2 elevation -7.924361301694835e+02
DEM cell: t0 latIndex 90 lonIndex 1 elevation -7.251222469503653e+02
direct location: date 2012-01-01T12:30:00.00000000000000Z position 1.500000000000000e+00 0.000000000000000e+00 -2.000000000000000e-01 los 0.000000000000000e+00 -7.595223858294946e-01 6.504811645419663e-01 lightTime true aberration true
DEM cell: t0 latIndex 90 lonIndex 0 elevation -5.786400093316511e+02
direct location result: latitude -3.952555711362365e-01 longitude 2.495847653590435e+00 elevation -5.905034290161145e+02
direct location: date 2012-01-01T12:30:00.00000000000000Z position 1.500000000000000e+00 0.000000000000000e+00 -2.000000000000000e-01 los 0.000000000000000e+00 -7.596364750290255e-01 6.503479267326657e-01 lightTime true aberration true
DEM tile: t1 latMin -4.014257279586958e-01 latStep 6.817692390602850e-05 latRows 257 lonMin 2.478367537831948e+00 lonStep 6.817692390602850e-05 lonCols 257
DEM cell: t1 latIndex 192 lonIndex 0 elevation -1.282721242683617e+03
DEM cell: t1 latIndex 80 lonIndex 192 elevation 3.211682285355159e+03
DEM cell: t1 latIndex 90 lonIndex 255 elevation -6.028136533065612e+02
DEM cell: t1 latIndex 90 lonIndex 256 elevation -5.786400093316511e+02
DEM cell: t1 latIndex 91 lonIndex 255 elevation -6.221990476940956e+02
DEM cell: t1 latIndex 91 lonIndex 256 elevation -4.644285910379659e+02
DEM cell: t1 latIndex 88 lonIndex 252 elevation 0.000000000000000e+00
DEM cell: t1 latIndex 89 lonIndex 252 elevation -4.877794667497003e+02
DEM cell: t1 latIndex 88 lonIndex 253 elevation 0.000000000000000e+00
DEM cell: t1 latIndex 89 lonIndex 253 elevation -5.757446064041551e+02
DEM cell: t1 latIndex 91 lonIndex 252 elevation 0.000000000000000e+00
DEM cell: t1 latIndex 92 lonIndex 252 elevation 0.000000000000000e+00
DEM cell: t1 latIndex 91 lonIndex 253 elevation -6.152228016740617e+02
DEM cell: t1 latIndex 92 lonIndex 253 elevation 0.000000000000000e+00
DEM cell: t1 latIndex 92 lonIndex 256 elevation -6.361521230433466e+02
DEM cell: t1 latIndex 91 lonIndex 257 elevation -6.361521230433466e+02
DEM cell: t1 latIndex 92 lonIndex 257 elevation -5.119072938899205e+02
direct location result: latitude -3.952672865845636e-01 longitude 2.495769458919830e+00 elevation -5.923807760050810e+02
direct location: date 2012-01-01T12:30:00.00000000000000Z position 1.500000000000000e+00 0.000000000000000e+00 -2.000000000000000e-01 los 0.000000000000000e+00 -7.597505408555608e-01 6.502146689130315e-01 lightTime true aberration true
DEM cell: t1 latIndex 92 lonIndex 248 elevation -1.470524675650724e+02
DEM cell: t1 latIndex 93 lonIndex 248 elevation -1.448837787295385e+02
DEM cell: t1 latIndex 92 lonIndex 249 elevation -2.503632800423777e+02
DEM cell: t1 latIndex 93 lonIndex 249 elevation -2.077565123004881e+02
DEM cell: t1 latIndex 88 lonIndex 248 elevation 0.000000000000000e+00
DEM cell: t1 latIndex 89 lonIndex 248 elevation -2.769462712597335e+02
DEM cell: t1 latIndex 88 lonIndex 249 elevation 0.000000000000000e+00
DEM cell: t1 latIndex 89 lonIndex 249 elevation -3.314207112316006e+02
DEM cell: t1 latIndex 90 lonIndex 254 elevation -5.859504161342276e+02
DEM cell: t1 latIndex 91 lonIndex 254 elevation -6.458840770174961e+02
direct location result: latitude -3.952790935038382e-01 longitude 2.495690638626864e+00 elevation -5.963149908542051e+02
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment