diff --git a/src/main/java/org/orekit/rugged/api/Rugged.java b/src/main/java/org/orekit/rugged/api/Rugged.java index 64770f4363da7ca565501ebfa5b4fd431b609573..89d8e96c29282dc370a49629a835210b84ad8445 100644 --- a/src/main/java/org/orekit/rugged/api/Rugged.java +++ b/src/main/java/org/orekit/rugged/api/Rugged.java @@ -73,12 +73,13 @@ public class Rugged { private final IntersectionAlgorithm algorithm; /** Flag for fixing light travel time. */ - private final boolean fixLightTravelTime; + private boolean lightTravelTimeCompensated; /** Build a configured instance. * <p> - * This method is the first one that must be called, otherwise the - * other methods will fail due to uninitialized context. + * By default, the instance compensates light travel time, an explicit call + * to {@link #setLightTravelTimeCompensated(boolean) setLightTravelTimeCompensated} + * can be made after construction if it should not be compensated. * </p> * @param referenceDate reference date from which all other dates are computed * @param updater updater used to load Digital Elevation Model tiles @@ -87,8 +88,6 @@ public class Rugged { * @param ellipsoidID identifier of reference ellipsoid * @param inertialFrameID identifier of inertial frame * @param bodyRotatingFrameID identifier of body rotating frame - * @param fixLightTravelTime if true, light travel time should be fixed when computing - * direct and inverse localization * @param positionsVelocities satellite position and velocity * @param pvInterpolationOrder order to use for position/velocity interpolation * @param quaternions satellite quaternions @@ -99,9 +98,9 @@ public class Rugged { final TileUpdater updater, final int maxCachedTiles, final AlgorithmId algorithmID, final EllipsoidId ellipsoidID, final InertialFrameId inertialFrameID, final BodyRotatingFrameId bodyRotatingFrameID, - final boolean fixLightTravelTime, - final List<Pair<AbsoluteDate, PVCoordinates>> positionsVelocities, final int pvInterpolationOrder, - final List<Pair<AbsoluteDate, Rotation>> quaternions, final int aInterpolationOrder) + final List<Pair<AbsoluteDate, PVCoordinates>> positionsVelocities, + final int pvInterpolationOrder, final List<Pair<AbsoluteDate, Rotation>> quaternions, + final int aInterpolationOrder) throws RuggedException { try { @@ -119,9 +118,9 @@ public class Rugged { // intersection algorithm algorithm = selectAlgorithm(algorithmID, updater, maxCachedTiles); - this.fixLightTravelTime = fixLightTravelTime; sensors = new HashMap<String, Sensor>(); + setLightTravelTimeCompensated(true); } catch (OrekitException oe) { throw new RuggedException(oe, oe.getSpecifier(), oe.getParts().clone()); @@ -130,8 +129,9 @@ public class Rugged { /** Build a configured instance. * <p> - * This method is the first one that must be called, otherwise the - * other methods will fail due to uninitialized context. + * By default, the instance compensates light travel time, an explicit call + * to {@link #setLightTravelTimeCompensated(boolean) setLightTravelTimeCompensated} + * can be made after construction if it should not be compensated. * </p> * @param newReferenceDate reference date from which all other dates are computed * @param updater updater used to load Digital Elevation Model tiles @@ -140,8 +140,6 @@ public class Rugged { * @param ellipsoidID identifier of reference ellipsoid * @param inertialFrameID identifier of inertial frame * @param bodyRotatingFrameID identifier of body rotating frame - * @param fixLightTravelTime if true, light travel time should be fixed when computing - * direct and inverse localization * @param propagator global propagator * @exception RuggedException if data needed for some frame cannot be loaded */ @@ -149,7 +147,6 @@ public class Rugged { final TileUpdater updater, final int maxCachedTiles, final AlgorithmId algorithmID, final EllipsoidId ellipsoidID, final InertialFrameId inertialFrameID, final BodyRotatingFrameId bodyRotatingFrameID, - final boolean fixLightTravelTime, final Propagator propagator) throws RuggedException { try { @@ -167,9 +164,9 @@ public class Rugged { // intersection algorithm algorithm = selectAlgorithm(algorithmID, updater, maxCachedTiles); - this.fixLightTravelTime = fixLightTravelTime; sensors = new HashMap<String, Sensor>(); + setLightTravelTimeCompensated(true); } catch (OrekitException oe) { throw new RuggedException(oe, oe.getSpecifier(), oe.getParts().clone()); @@ -183,6 +180,30 @@ public class Rugged { return referenceDate; } + /** Set flag for compensating light travel time. + * <p> + * This methods set the flag for compensating or not light travel time + * between ground and spacecraft. Compensating this delay improves localization + * accuracy and is enabled by default. Not compensating it is mainly useful + * for validation purposes against system that do not compensate it. + * </p> + * @param lightTravelTimeCompensated if true, the light travel time between ground + * and spacecraft is compensated for more accurate localization + * @see #isLightTravelTimeCompensated() + */ + public void setLightTravelTimeCompensated(final boolean lightTravelTimeCompensated) { + this.lightTravelTimeCompensated = lightTravelTimeCompensated; + } + + /** Get flag for compensating light travel time. + * @return true if the light travel time between ground + * and spacecraft is compensated for more accurate localization + * @see #setLightTravelTimeCompensated(boolean) + */ + public boolean isLightTravelTimeCompensated() { + return lightTravelTimeCompensated; + } + /** Set up line sensor model. * @param sensorName name of the line sensor. * @param linesOfSigth lines of sight for each pixels @@ -383,7 +404,7 @@ public class Rugged { for (int i = 0; i < gp.length; ++i) { final Transform fixed; - if (fixLightTravelTime) { + if (lightTravelTimeCompensated) { // fix light travel time final Vector3D sP = approximate.transformPosition(sensor.getPosition(i)); final Vector3D sL = approximate.transformVector(sensor.getLos(i)); diff --git a/src/test/java/org/orekit/rugged/api/RuggedTest.java b/src/test/java/org/orekit/rugged/api/RuggedTest.java index 0dd75371eaa6b720889d6610e30ca9909590276a..8cbb7de80a7983304028cd751a50ea1b18be6dba 100644 --- a/src/test/java/org/orekit/rugged/api/RuggedTest.java +++ b/src/test/java/org/orekit/rugged/api/RuggedTest.java @@ -148,10 +148,13 @@ public class RuggedTest { EllipsoidId.WGS84, InertialFrameId.EME2000, BodyRotatingFrameId.ITRF, - true, pv, 8, q, 8); + pv, 8, q, 8); Assert.assertEquals(new AbsoluteDate("2012-01-01T00:00:00", TimeScalesFactory.getUTC()), rugged.getReferenceDate()); + Assert.assertTrue(rugged.isLightTravelTimeCompensated()); + rugged.setLightTravelTimeCompensated(false); + Assert.assertFalse(rugged.isLightTravelTimeCompensated()); } @@ -176,9 +179,12 @@ public class RuggedTest { EllipsoidId.WGS84, InertialFrameId.EME2000, BodyRotatingFrameId.ITRF, - true, propagator); + propagator); Assert.assertEquals(propagator.getInitialState().getDate(), rugged.getReferenceDate()); + Assert.assertTrue(rugged.isLightTravelTimeCompensated()); + rugged.setLightTravelTimeCompensated(false); + Assert.assertFalse(rugged.isLightTravelTimeCompensated()); } @@ -226,7 +232,7 @@ public class RuggedTest { EllipsoidId.WGS84, InertialFrameId.EME2000, BodyRotatingFrameId.ITRF, - true, ephemeris); + ephemeris); rugged.setLineSensor("line", los, lineDatation);