From 0fb7c4e1d60c888647eacdc94eaa62d85ef16df6 Mon Sep 17 00:00:00 2001 From: Luc Maisonobe <luc@orekit.org> Date: Tue, 24 Mar 2015 08:20:13 +0100 Subject: [PATCH] Fixed inverse location dump to take results caching into account. --- .../java/org/orekit/rugged/errors/Dump.java | 26 +++++- .../orekit/rugged/errors/DumpReplayer.java | 93 ++++++++++++++----- .../linesensor/SensorMeanPlaneCrossing.java | 20 +++- .../orekit/rugged/errors/DumpManagerTest.java | 12 +-- .../rugged/errors/DumpReplayerTest.java | 22 +++++ .../replay/replay-inverse-loc-01.txt | 2 +- .../replay/replay-inverse-loc-02.txt | 43 +++++++++ 7 files changed, 182 insertions(+), 36 deletions(-) create mode 100644 src/test/resources/replay/replay-inverse-loc-02.txt diff --git a/src/main/java/org/orekit/rugged/errors/Dump.java b/src/main/java/org/orekit/rugged/errors/Dump.java index 865be43d..11e9c7ee 100644 --- a/src/main/java/org/orekit/rugged/errors/Dump.java +++ b/src/main/java/org/orekit/rugged/errors/Dump.java @@ -39,6 +39,7 @@ import org.orekit.rugged.api.AlgorithmId; import org.orekit.rugged.linesensor.LineSensor; import org.orekit.rugged.linesensor.SensorMeanPlaneCrossing; import org.orekit.rugged.linesensor.SensorPixel; +import org.orekit.rugged.linesensor.SensorMeanPlaneCrossing.CrossingResult; import org.orekit.rugged.raster.Tile; import org.orekit.rugged.utils.ExtendedEllipsoid; import org.orekit.rugged.utils.SpacecraftToObservedBody; @@ -501,12 +502,33 @@ class Dump { public void setMeanPlane(final SensorMeanPlaneCrossing meanPlane) throws RuggedException { if (this.meanPlane == null) { this.meanPlane = meanPlane; + int nbResults = 0; + for (final CrossingResult result : meanPlane.getCachedResults()) { + if (result != null) { + ++nbResults; + } + } writer.format(Locale.US, - "sensor mean plane: sensorName %s minLine %d maxLine %d maxEval %d accuracy %22.15e normal %22.15e %22.15e %22.15e%n", + "sensor mean plane: sensorName %s minLine %d maxLine %d maxEval %d accuracy %22.15e normal %22.15e %22.15e %22.15e cachedResults %d", dumpName, meanPlane.getMinLine(), meanPlane.getMaxLine(), meanPlane.getMaxEval(), meanPlane.getAccuracy(), - meanPlane.getMeanPlaneNormal().getX(), meanPlane.getMeanPlaneNormal().getY(), meanPlane.getMeanPlaneNormal().getZ()); + meanPlane.getMeanPlaneNormal().getX(), meanPlane.getMeanPlaneNormal().getY(), meanPlane.getMeanPlaneNormal().getZ(), + nbResults); + for (int i = 0; i < nbResults; ++i) { + final CrossingResult result = meanPlane.getCachedResults()[i]; + writer.format(Locale.US, + " lineNumber %22.15e date %s target %22.15e %22.15e %22.15e targetDirection %22.15e %22.15e %22.15e %22.15e %22.15e %22.15e", + result.getLine(), convertDate(result.getDate()), + result.getTarget().getX(), result.getTarget().getY(), result.getTarget().getZ(), + result.getTargetDirection().getX().getValue(), + result.getTargetDirection().getY().getValue(), + result.getTargetDirection().getZ().getValue(), + result.getTargetDirection().getZ().getPartialDerivative(1), + result.getTargetDirection().getY().getPartialDerivative(1), + result.getTargetDirection().getZ().getPartialDerivative(1)); + } + writer.format(Locale.US,"%n"); // ensure the transforms for mid date are dumped final AbsoluteDate midDate = meanPlane.getSensor().getDate(0.5 * (meanPlane.getMinLine() + meanPlane.getMaxLine())); diff --git a/src/main/java/org/orekit/rugged/errors/DumpReplayer.java b/src/main/java/org/orekit/rugged/errors/DumpReplayer.java index 805adf48..6fdec225 100644 --- a/src/main/java/org/orekit/rugged/errors/DumpReplayer.java +++ b/src/main/java/org/orekit/rugged/errors/DumpReplayer.java @@ -54,6 +54,7 @@ import org.orekit.rugged.api.RuggedBuilder; import org.orekit.rugged.linesensor.LineDatation; import org.orekit.rugged.linesensor.LineSensor; import org.orekit.rugged.linesensor.SensorMeanPlaneCrossing; +import org.orekit.rugged.linesensor.SensorMeanPlaneCrossing.CrossingResult; import org.orekit.rugged.linesensor.SensorPixel; import org.orekit.rugged.los.TimeDependentLOS; import org.orekit.rugged.raster.TileUpdater; @@ -201,6 +202,15 @@ public class DumpReplayer { /** Keyword for rate. */ private static final String RATE = "rate"; + /** Keyword for cached results. */ + private static final String CACHED_RESULTS = "cachedResults"; + + /** Keyword for target. */ + private static final String TARGET = "target"; + + /** Keyword for target direction. */ + private static final String TARGET_DIRECTION = "targetDirection"; + /** Constant elevation for constant elevation algorithm. */ private double constantElevation; @@ -361,7 +371,8 @@ public class DumpReplayer { lightTimeCorrection, aberrationOfLightCorrection, parsedSensor.meanPlane.maxEval, parsedSensor.meanPlane.accuracy, - parsedSensor.meanPlane.normal)); + parsedSensor.meanPlane.normal, + parsedSensor.meanPlane.cachedResults)); } builder.addLineSensor(sensor); } @@ -829,22 +840,54 @@ public class DumpReplayer { @Override public void parse(final int l, final File file, final String line, final String[] fields, final DumpReplayer global) throws RuggedException { - if (fields.length < 14 || !fields[0].equals(SENSOR_NAME) || - !fields[2].equals(MIN_LINE) || !fields[4].equals(MAX_LINE) || - !fields[6].equals(MAX_EVAL) || !fields[8].equals(ACCURACY) || - !fields[10].equals(NORMAL)) { - throw new RuggedException(RuggedMessages.CANNOT_PARSE_LINE, l, file, line); - } - final String sensorName = fields[1]; - final int minLine = Integer.parseInt(fields[3]); - final int maxLine = Integer.parseInt(fields[5]); - final int maxEval = Integer.parseInt(fields[7]); - final double accuracy = Double.parseDouble(fields[9]); - final Vector3D normal = new Vector3D(Double.parseDouble(fields[11]), - Double.parseDouble(fields[12]), - Double.parseDouble(fields[13])); - global.getSensor(sensorName).setMeanPlane(new ParsedMeanPlane(minLine, maxLine, maxEval, accuracy, normal)); + try { + if (fields.length < 16 || !fields[0].equals(SENSOR_NAME) || + !fields[2].equals(MIN_LINE) || !fields[4].equals(MAX_LINE) || + !fields[6].equals(MAX_EVAL) || !fields[8].equals(ACCURACY) || + !fields[10].equals(NORMAL) || !fields[14].equals(CACHED_RESULTS)) { + throw new RuggedException(RuggedMessages.CANNOT_PARSE_LINE, l, file, line); + } + final String sensorName = fields[1]; + final int minLine = Integer.parseInt(fields[3]); + final int maxLine = Integer.parseInt(fields[5]); + final int maxEval = Integer.parseInt(fields[7]); + final double accuracy = Double.parseDouble(fields[9]); + final Vector3D normal = new Vector3D(Double.parseDouble(fields[11]), + Double.parseDouble(fields[12]), + Double.parseDouble(fields[13])); + final int n = Integer.parseInt(fields[15]); + final CrossingResult[] cachedResults = new CrossingResult[n]; + int base = 16; + for (int i = 0; i < n; ++i) { + if (fields.length < base + 15 || !fields[base].equals(LINE_NUMBER) || + !fields[base + 2].equals(DATE) || !fields[base + 4].equals(TARGET) || + !fields[base + 8].equals(TARGET_DIRECTION)) { + throw new RuggedException(RuggedMessages.CANNOT_PARSE_LINE, l, file, line); + } + final double ln = Double.parseDouble(fields[base + 1]); + final AbsoluteDate date = new AbsoluteDate(fields[base + 3], TimeScalesFactory.getUTC()); + final Vector3D target = new Vector3D(Double.parseDouble(fields[base + 5]), + Double.parseDouble(fields[base + 6]), + Double.parseDouble(fields[base + 7])); + final DerivativeStructure tdX = new DerivativeStructure(1, 1, + Double.parseDouble(fields[base + 9]), + Double.parseDouble(fields[base + 12])); + final DerivativeStructure tdY = new DerivativeStructure(1, 1, + Double.parseDouble(fields[base + 10]), + Double.parseDouble(fields[base + 13])); + final DerivativeStructure tdZ = new DerivativeStructure(1, 1, + Double.parseDouble(fields[base + 11]), + Double.parseDouble(fields[base + 14])); + final FieldVector3D<DerivativeStructure> targetDirection = + new FieldVector3D<DerivativeStructure>(tdX, tdY, tdZ); + cachedResults[i] = new CrossingResult(date, ln, target, targetDirection); + base += 15; + } + global.getSensor(sensorName).setMeanPlane(new ParsedMeanPlane(minLine, maxLine, maxEval, accuracy, normal, cachedResults)); + } catch (OrekitException oe) { + throw new RuggedException(oe, oe.getSpecifier(), oe.getParts()); + } } }, @@ -1325,20 +1368,26 @@ public class DumpReplayer { /** Mean plane normal. */ private final Vector3D normal; + /** Cached results. */ + private final CrossingResult[] cachedResults; + /** simple constructor. * @param minLine min line * @param maxLine max line * @param maxEval maximum number of evaluations * @param accuracy accuracy to use for finding crossing line number * @param normal mean plane normal + * @param cachedResults cached results */ public ParsedMeanPlane(final int minLine, final int maxLine, - final int maxEval, final double accuracy, final Vector3D normal) { - this.minLine = minLine; - this.maxLine = maxLine; - this.maxEval = maxEval; - this.accuracy = accuracy; - this.normal = normal; + final int maxEval, final double accuracy, final Vector3D normal, + final CrossingResult[] cachedResults) { + this.minLine = minLine; + this.maxLine = maxLine; + this.maxEval = maxEval; + this.accuracy = accuracy; + this.normal = normal; + this.cachedResults = cachedResults.clone(); } } diff --git a/src/main/java/org/orekit/rugged/linesensor/SensorMeanPlaneCrossing.java b/src/main/java/org/orekit/rugged/linesensor/SensorMeanPlaneCrossing.java index 06a66d28..4f7bcce0 100644 --- a/src/main/java/org/orekit/rugged/linesensor/SensorMeanPlaneCrossing.java +++ b/src/main/java/org/orekit/rugged/linesensor/SensorMeanPlaneCrossing.java @@ -111,7 +111,7 @@ public class SensorMeanPlaneCrossing { final int maxEval, final double accuracy) throws RuggedException { this(sensor, scToBody, minLine, maxLine, lightTimeCorrection, aberrationOfLightCorrection, - maxEval, accuracy, computeMeanPlaneNormal(sensor, minLine, maxLine)); + maxEval, accuracy, computeMeanPlaneNormal(sensor, minLine, maxLine), new CrossingResult[0]); } /** Simple constructor. @@ -124,6 +124,7 @@ public class SensorMeanPlaneCrossing { * @param maxEval maximum number of evaluations * @param accuracy accuracy to use for finding crossing line number * @param meanPlaneNormal mean plane normal + * @param cachedResults cached results * @exception RuggedException if some frame conversion fails */ public SensorMeanPlaneCrossing(final LineSensor sensor, @@ -132,7 +133,8 @@ public class SensorMeanPlaneCrossing { final boolean lightTimeCorrection, final boolean aberrationOfLightCorrection, final int maxEval, final double accuracy, - final Vector3D meanPlaneNormal) + final Vector3D meanPlaneNormal, + final CrossingResult[] cachedResults) throws RuggedException { this.sensor = sensor; @@ -152,6 +154,7 @@ public class SensorMeanPlaneCrossing { this.meanPlaneNormal = meanPlaneNormal; this.cachedResults = new CrossingResult[CACHED_RESULTS]; + System.arraycopy(cachedResults, 0, this.cachedResults, 0, cachedResults.length); } @@ -258,6 +261,13 @@ public class SensorMeanPlaneCrossing { return meanPlaneNormal; } + /** Get the cached previous results. + * @return mean plane normal + */ + public CrossingResult[] getCachedResults() { + return cachedResults; + } + /** Container for mean plane crossing result. */ public static class CrossingResult { @@ -279,9 +289,9 @@ public class SensorMeanPlaneCrossing { * @param target target ground point * @param targetDirection target direction in spacecraft frame */ - private CrossingResult(final AbsoluteDate crossingDate, final double crossingLine, - final Vector3D target, - final FieldVector3D<DerivativeStructure> targetDirection) { + public CrossingResult(final AbsoluteDate crossingDate, final double crossingLine, + final Vector3D target, + final FieldVector3D<DerivativeStructure> targetDirection) { this.crossingDate = crossingDate; this.crossingLine = crossingLine; this.target = target; diff --git a/src/test/java/org/orekit/rugged/errors/DumpManagerTest.java b/src/test/java/org/orekit/rugged/errors/DumpManagerTest.java index dc2d7e38..10a12f37 100644 --- a/src/test/java/org/orekit/rugged/errors/DumpManagerTest.java +++ b/src/test/java/org/orekit/rugged/errors/DumpManagerTest.java @@ -78,7 +78,7 @@ public class DumpManagerTest { int countDirectLocResult = 0; int countSensor = 0; int countSensorLOS = 0; - int countSensorDate = 0; + int countSensorDatation = 0; int countSensorRate = 0; BufferedReader br = new BufferedReader(new FileReader(dump)); for (String line = br.readLine(); line != null; line = br.readLine()) { @@ -102,8 +102,8 @@ public class DumpManagerTest { ++countDirectLocResult; } else if (trimmed.startsWith("sensor:")) { ++countSensor; - } else if (trimmed.startsWith("sensor date:")) { - ++countSensorDate; + } else if (trimmed.startsWith("sensor datation:")) { + ++countSensorDatation; } else if (trimmed.startsWith("sensor LOS:")) { ++countSensorLOS; } else if (trimmed.startsWith("sensor rate:")) { @@ -122,9 +122,9 @@ public class DumpManagerTest { Assert.assertEquals(887, countDEMCell); Assert.assertEquals(400, countDirectLoc); Assert.assertEquals(400, countDirectLocResult); - Assert.assertEquals(0, countSensor); - Assert.assertEquals(800, countSensorLOS); - Assert.assertEquals(403, countSensorDate); + Assert.assertEquals(1, countSensor); + Assert.assertEquals(200, countSensorLOS); + Assert.assertEquals(3, countSensorDatation); Assert.assertEquals(0, countSensorRate); } diff --git a/src/test/java/org/orekit/rugged/errors/DumpReplayerTest.java b/src/test/java/org/orekit/rugged/errors/DumpReplayerTest.java index 4b9e7327..3a45b628 100644 --- a/src/test/java/org/orekit/rugged/errors/DumpReplayerTest.java +++ b/src/test/java/org/orekit/rugged/errors/DumpReplayerTest.java @@ -78,4 +78,26 @@ public class DumpReplayerTest { } + @Test + public void testInverseLoc02() throws URISyntaxException, IOException, OrekitException, RuggedException { + + String orekitPath = getClass().getClassLoader().getResource("orekit-data").toURI().getPath(); + DataProvidersManager.getInstance().addProvider(new DirectoryCrawler(new File(orekitPath))); + + String dumpPath = getClass().getClassLoader().getResource("replay/replay-inverse-loc-02.txt").toURI().getPath(); + DumpReplayer replayer = new DumpReplayer(); + replayer.parse(new File(dumpPath)); + Rugged rugged = replayer.createRugged(); + DumpReplayer.Result[] results = replayer.execute(rugged); + + Assert.assertEquals(3, results.length); + for (final DumpReplayer.Result result : results) { + SensorPixel expectedSP = (SensorPixel) result.getExpected(); + SensorPixel replayedSP = (SensorPixel) result.getReplayed(); + Assert.assertEquals(expectedSP.getLineNumber(), replayedSP.getLineNumber(), 1.0e-6); + Assert.assertEquals(expectedSP.getPixelNumber(), replayedSP.getPixelNumber(), 1.0e-6); + } + + } + } diff --git a/src/test/resources/replay/replay-inverse-loc-01.txt b/src/test/resources/replay/replay-inverse-loc-01.txt index 5b89cdbb..85aee42d 100644 --- a/src/test/resources/replay/replay-inverse-loc-01.txt +++ b/src/test/resources/replay/replay-inverse-loc-01.txt @@ -10,7 +10,7 @@ DEM cell: t0 latIndex 123 lonIndex 99 elevation 1.772149770526270e+03 DEM cell: t0 latIndex 123 lonIndex 100 elevation 1.804520334312959e+03 inverse location: sensorName s0 latitude -3.930524233859007e-01 longitude 2.502596047891660e+00 elevation 1.785429914217195e+03 minLine 0 maxLine 2000 lightTime true aberration true sensor: sensorName s0 nbPixels 2000 position 1.500000000000000e+00 0.000000000000000e+00 -2.000000000000000e-01 -sensor mean plane: sensorName s0 minLine 0 maxLine 2000 maxEval 50 accuracy 1.000000000000000e-02 normal 1.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 +sensor mean plane: sensorName s0 minLine 0 maxLine 2000 maxEval 50 accuracy 1.000000000000000e-02 normal 1.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 cachedResults 0 sensor datation: sensorName s0 lineNumber 1.000000000000000e+03 date 2012-01-01T12:30:00.00000000000000Z span: minDate 2012-01-01T12:29:57.50000000000000Z maxDate 2012-01-01T12:30:02.50000000000000Z tStep 1.000000000000000e-03 tolerance 5.000000000000000e+00 inertialFrame EME2000 transform: index 2500 body r -8.085963389171905e-01 -3.465415132416124e-04 4.896468952533136e-04 -5.883634938068593e-01 Ω -8.740475534355121e-08 1.215132763920863e-09 -7.292109805268457e-05 ΩDot -1.642299174832473e-16 8.973031065833714e-17 1.983408395826415e-19 spacecraft p 1.384770770635060e+04 3.157810312896036e+03 -7.179504513258174e+06 v -3.180198832979256e+01 -6.779040795561070e+00 8.276861119339028e+00 a -9.324121873999545e-01 -8.319728238691058e+00 1.345786832372742e-03 r -6.828948903548651e-01 4.142451171315383e-01 -3.878489660867486e-01 4.600312284675194e-01 Ω -1.009782076972198e-03 1.982726233227751e-04 1.647740165426390e-04 ΩDot -3.649972672343429e-07 2.007836645730816e-07 -1.257082123046451e-06 diff --git a/src/test/resources/replay/replay-inverse-loc-02.txt b/src/test/resources/replay/replay-inverse-loc-02.txt new file mode 100644 index 00000000..e2ebff4d --- /dev/null +++ b/src/test/resources/replay/replay-inverse-loc-02.txt @@ -0,0 +1,43 @@ +# Rugged library dump file, created on 2015-03-24T07:07:27Z +# all units are SI units (m, m/s, rad ...) +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 -6.124011631478857e+02 +DEM cell: t0 latIndex 128 lonIndex 128 elevation 3.151327114467009e+03 +DEM cell: t0 latIndex 123 lonIndex 101 elevation 1.838123293450827e+03 +DEM cell: t0 latIndex 123 lonIndex 102 elevation 1.870339491485550e+03 +DEM cell: t0 latIndex 124 lonIndex 101 elevation 1.832853313250435e+03 +DEM cell: t0 latIndex 124 lonIndex 102 elevation 1.866819199623890e+03 +sensor: sensorName s0 nbPixels 2000 position 1.500000000000000e+00 0.000000000000000e+00 -2.000000000000000e-01 +inverse location: sensorName s0 latitude -3.930305027145593e-01 longitude 2.502739578717502e+00 elevation 1.853045504720662e+03 minLine 0 maxLine 2000 lightTime true aberration true +sensor mean plane: sensorName s0 minLine 0 maxLine 2000 maxEval 50 accuracy 1.000000000000000e-02 normal 1.000000000000000e+00 0.000000000000000e+00 0.000000000000000e+00 cachedResults 5 lineNumber 1.753079999999941e+03 date 2012-01-01T12:30:01.12961999999991Z target -4.733584770718903e+06 3.515842173828561e+06 -2.428300713188566e+06 targetDirection 4.440892098500626e-16 -7.496646388847980e-01 6.618178973144536e-01 -1.357198500050715e-08 -1.198160098465607e-08 -1.357198500050715e-08 lineNumber 1.753079999999936e+03 date 2012-01-01T12:30:01.12961999999990Z target -4.733634454810624e+06 3.515791377291927e+06 -2.428292161157289e+06 targetDirection 1.221245327087672e-15 -7.496479456645485e-01 6.618368058373009e-01 -1.357209409884309e-08 -1.198230643978911e-08 -1.357209409884309e-08 lineNumber 1.753080000000098e+03 date 2012-01-01T12:30:01.12962000000015Z target -4.733684171891571e+06 3.515740571824192e+06 -2.428283613116900e+06 targetDirection 2.664535259100376e-15 -7.496312519673904e-01 6.618557139390744e-01 -1.357220357852602e-08 -1.198301226854942e-08 -1.357220357852602e-08 lineNumber 1.753080000000016e+03 date 2012-01-01T12:30:01.12962000000002Z target -4.733734047015606e+06 3.515689711809538e+06 -2.428275079609979e+06 targetDirection 1.110223024625157e-15 -7.496145577933011e-01 6.618746216197999e-01 -1.357231495356307e-08 -1.198371980774984e-08 -1.357231495356307e-08 lineNumber 1.753080000000124e+03 date 2012-01-01T12:30:01.12962000000019Z target -4.733783920649958e+06 3.515638855451895e+06 -2.428266547191616e+06 targetDirection 1.665334536937735e-15 -7.495978631423109e-01 6.618935288794415e-01 -1.357242629275803e-08 -1.198442735245515e-08 -1.357242629275803e-08 +sensor datation: sensorName s0 lineNumber 1.000000000000000e+03 date 2012-01-01T12:30:00.00000000000000Z +span: minDate 2012-01-01T12:29:57.50000000000000Z maxDate 2012-01-01T12:30:02.50000000000000Z tStep 1.000000000000000e-03 tolerance 5.000000000000000e+00 inertialFrame EME2000 +transform: index 2500 body r -8.085963389171905e-01 -3.465415132416124e-04 4.896468952533136e-04 -5.883634938068593e-01 Ω -8.740475534355121e-08 1.215132763920863e-09 -7.292109805268457e-05 ΩDot -1.642299174832473e-16 8.973031065833714e-17 1.983408395826415e-19 spacecraft p 1.384770770635060e+04 3.157810312896036e+03 -7.179504513258174e+06 v -3.180198832979256e+01 -6.779040795561070e+00 8.276861119339028e+00 a -9.324121873999545e-01 -8.319728238691058e+00 1.345786832372742e-03 r -6.828948903548651e-01 4.142451171315383e-01 -3.878489660867486e-01 4.600312284675194e-01 Ω -1.009782076972198e-03 1.982726233227751e-04 1.647740165426390e-04 ΩDot -3.649972672343429e-07 2.007836645730816e-07 -1.257082123046451e-06 +ellipsoid: ae 6.378137000000000e+06 f 3.352810664747481e-03 frame ITRF_CIO_CONV_2010_SIMPLE_EOP +sensor datation: sensorName s0 lineNumber 1.753080000000073e+03 date 2012-01-01T12:30:01.12962000000011Z +transform: index 3630 body r -8.086205790715331e-01 -3.465213511527127e-04 4.896611176157392e-04 -5.883301787746077e-01 Ω -8.740475552913246e-08 1.215132865316375e-09 -7.292109805268537e-05 ΩDot -1.642303315278493e-16 8.973086775115428e-17 1.983413459366029e-19 spacecraft p 1.381161686138390e+04 3.149035127746873e+03 -7.179495156850004e+06 v -3.198309695268937e+01 -7.869713919215563e+00 8.283718407079078e+00 a -9.313885738644379e-01 -8.324782304826440e+00 1.354189237138481e-03 r -6.826577475060918e-01 4.145470548488056e-01 -3.882264160785311e-01 4.597927673908209e-01 Ω -1.009835304084986e-03 1.983572786405474e-04 1.645625945551068e-04 ΩDot -3.648903522451360e-07 2.009701619867746e-07 -1.257044812963575e-06 +sensor rate: sensorName s0 lineNumber 1.753080000000073e+03 rate 6.666666666666666e+02 +sensor datation: sensorName s0 lineNumber 1.753079999999983e+03 date 2012-01-01T12:30:01.12961999999997Z +sensor LOS: sensorName s0 date 2012-01-01T12:30:01.12961999999997Z pixelNumber 999 los 0.000000000000000e+00 -7.660363365669057e-01 6.427972705753770e-01 +sensor LOS: sensorName s0 date 2012-01-01T12:30:01.12961999999997Z pixelNumber 1000 los 0.000000000000000e+00 -7.660525495492120e-01 6.427779486954669e-01 +sensor LOS: sensorName s0 date 2012-01-01T12:30:01.12961999999997Z pixelNumber 0 los 0.000000000000000e+00 -7.495978631423039e-01 6.618935288794506e-01 +sensor LOS: sensorName s0 date 2012-01-01T12:30:01.12961999999997Z pixelNumber 1 los 0.000000000000000e+00 -7.496145577932898e-01 6.618746216198131e-01 +sensor LOS: sensorName s0 date 2012-01-01T12:30:01.12961999999997Z pixelNumber 4 los 0.000000000000000e+00 -7.496646388847948e-01 6.618178973144580e-01 +sensor LOS: sensorName s0 date 2012-01-01T12:30:01.12961999999997Z pixelNumber 5 los 0.000000000000000e+00 -7.496813316281102e-01 6.617989883705653e-01 +sensor LOS: sensorName s0 date 2012-01-01T12:30:01.12961999999997Z pixelNumber 6 los 0.000000000000000e+00 -7.496980238944815e-01 6.617800790056386e-01 +sensor datation: sensorName s0 lineNumber 1.753079999999893e+03 date 2012-01-01T12:30:01.12961999999984Z +inverse location result: lineNumber 1.753079999999893e+03 pixelNumber 5.000000000428289e+00 +inverse location: sensorName s0 latitude -3.930323254721546e-01 longitude 2.502727645691323e+00 elevation 1.847490708944211e+03 minLine 0 maxLine 2000 lightTime true aberration true +sensor datation: sensorName s0 lineNumber 1.753080000000180e+03 date 2012-01-01T12:30:01.12962000000027Z +sensor rate: sensorName s0 lineNumber 1.753080000000180e+03 rate 6.666666666666666e+02 +sensor datation: sensorName s0 lineNumber 1.753080000000150e+03 date 2012-01-01T12:30:01.12962000000022Z +sensor LOS: sensorName s0 date 2012-01-01T12:30:01.12962000000022Z pixelNumber 7 los 0.000000000000000e+00 -7.497147156838981e-01 6.617611692196904e-01 +sensor datation: sensorName s0 lineNumber 1.753080000000120e+03 date 2012-01-01T12:30:01.12962000000018Z +inverse location result: lineNumber 1.753080000000120e+03 pixelNumber 6.000000000570598e+00 +inverse location: sensorName s0 latitude -3.930341476421113e-01 longitude 2.502715716159622e+00 elevation 1.841953904196975e+03 minLine 0 maxLine 2000 lightTime true aberration true +sensor datation: sensorName s0 lineNumber 1.753080000000450e+03 date 2012-01-01T12:30:01.12962000000067Z +sensor rate: sensorName s0 lineNumber 1.753080000000450e+03 rate 6.666666666666666e+02 +sensor LOS: sensorName s0 date 2012-01-01T12:30:01.12962000000027Z pixelNumber 8 los 0.000000000000000e+00 -7.497314069963494e-01 6.617422590127325e-01 +sensor datation: sensorName s0 lineNumber 1.753079999999910e+03 date 2012-01-01T12:30:01.12961999999986Z +inverse location result: lineNumber 1.753079999999910e+03 pixelNumber 7.000000000854453e+00 -- GitLab