private void doElevationTest( final double minElevation, final AbsoluteDate start, final AbsoluteDate end, final int expectedEvents, final boolean sameSign) throws OrekitException { final ElevationExtremumDetector raw = new ElevationExtremumDetector(0.001, 1.e-6, new TopocentricFrame(earth, gp, "test")) .withHandler(new ContinueOnEvent<ElevationExtremumDetector>()); final EventEnablingPredicateFilter<ElevationExtremumDetector> aboveGroundElevationDetector = new EventEnablingPredicateFilter<ElevationExtremumDetector>( raw, new EnablingPredicate<ElevationExtremumDetector>() { public boolean eventIsEnabled( final SpacecraftState state, final ElevationExtremumDetector eventDetector, final double g) throws OrekitException { return eventDetector.getElevation(state) > minElevation; } }) .withMaxCheck(60.0); Assert.assertEquals(0.001, raw.getMaxCheckInterval(), 1.0e-15); Assert.assertEquals(60.0, aboveGroundElevationDetector.getMaxCheckInterval(), 1.0e-15); Assert.assertEquals(1.0e-6, aboveGroundElevationDetector.getThreshold(), 1.0e-15); Assert.assertEquals( AbstractDetector.DEFAULT_MAX_ITER, aboveGroundElevationDetector.getMaxIterationCount()); Propagator propagator = new EcksteinHechlerPropagator( orbit, Constants.EIGEN5C_EARTH_EQUATORIAL_RADIUS, Constants.EIGEN5C_EARTH_MU, Constants.EIGEN5C_EARTH_C20, Constants.EIGEN5C_EARTH_C30, Constants.EIGEN5C_EARTH_C40, Constants.EIGEN5C_EARTH_C50, Constants.EIGEN5C_EARTH_C60); EventsLogger logger = new EventsLogger(); propagator.addEventDetector(logger.monitorDetector(aboveGroundElevationDetector)); propagator.propagate(start, end); for (LoggedEvent e : logger.getLoggedEvents()) { final double eMinus = raw.getElevation(e.getState().shiftedBy(-10.0)); final double e0 = raw.getElevation(e.getState()); final double ePlus = raw.getElevation(e.getState().shiftedBy(+10.0)); Assert.assertTrue(e0 > eMinus); Assert.assertTrue(e0 > ePlus); Assert.assertTrue(e0 > minElevation); } Assert.assertEquals(expectedEvents, logger.getLoggedEvents().size()); propagator.clearEventsDetectors(); double g1Raw = raw.g(propagator.propagate(orbit.getDate().shiftedBy(18540.0))); double g2Raw = raw.g(propagator.propagate(orbit.getDate().shiftedBy(18624.0))); double g1 = aboveGroundElevationDetector.g(propagator.propagate(orbit.getDate().shiftedBy(18540.0))); double g2 = aboveGroundElevationDetector.g(propagator.propagate(orbit.getDate().shiftedBy(18624.0))); Assert.assertTrue(g1Raw > 0); Assert.assertTrue(g2Raw < 0); if (sameSign) { Assert.assertTrue(g1 > 0); Assert.assertTrue(g2 < 0); } else { Assert.assertTrue(g1 < 0); Assert.assertTrue(g2 > 0); } }