This package provides interfaces and classes dealing with events occurring during propagation. It is used when EventDetector instances are registered to any Propagator. When the event associated with the detector occurs, the propagator interrupts the propagation and calls the eventOccurred method of the event handler, which can do whatever the user want and either stop or resume propagation, optionally resetting the state.

If the registered events detectors are configured to stop propagation when triggered, the propagator can be run with an arbitrary large target date, relying on the events occurrence to stop propagation exactly at the right time.

The package provides some predefined events:

  • AlignmentDetector detects satellite/body alignment (and by default stop when reaching alignment)
  • AngularSeparationDetector detects angular separation thresholds crossing between spacecraft and a beacon (typically the Sun) as seen from an observer (typically a ground station)
  • AltitudeDetector detects altitude crossing (and by default stop at descending)
  • ApsideDetector detects apside crossing (and by default stop at perigee)
  • DateDetector detects occurrence of a predefine instant (and by default stop there)
  • EclipseDetector detects satellite entering/exiting an eclipse (and by default stop on exit)
  • ElevationDetector detects satellite raising/setting (and by default stop at setting)
  • ElevationExtremumDetector detects satellite maximum/minimum elevation (and by default stop at minimum)
  • FieldOfViewDetector detects moving target entering/exiting satellite sensor Field Of View with an arbitrarily shaped boundary (and by default continue on entry and stop on exit)
  • FootprintOverlapDetector detects geographic zone entering or exiting Field Of View of a spacecraft sensor (and by default stop at zone exit)
  • GeographicZoneDetector detects geographic boundaries crossings (and by default stop at zone exit)
  • GroundFieldOfViewDetector detects spacecraft entering/exiting ground based Field Of View with an arbitrarily shaped boundary (and by default continue on entry and stop on exit)
  • LatitudeCrossingDetector detects satellite crossing a parallel (and by default stop at northward crossing)
  • LatitudeExtremumDetector detects satellite maximum/minimum latitude (and by default stop at minimum)
  • LongitudeCrossingDetector detects satellite crossing a meridian (the increasing/decreasing flag is irrelevant for this detector)
  • LongitudeExtremumDetector detects satellite maximum/minimum longitude (and by default stop at minimum)
  • NodeDetector detects node crossing (and by default stop at ascending node)
  • PositionAngleDetector detects anomaly, latitude argument or longitude argument crossings, with either true eccentric or mean angles (the increasing/decreasing flag is irrelevant for this detector)

In addition to raw events, the class also provides EventsLogger to gather all events that occurred during a propagation, EventShifter which allows to slightly shift an event in time (for example to trigger something say 5 minutes before eclipse entry), EventSlopeFilter and EventEnablingPredicateFilter to trigger only specific types of events, without losing computation time by locating events user is not interested in. Also the BooleanDetector allows the user to combine other event detectors using Boolean logic.

The low level interfaces and classes are heavily based on similar classes from the package from the Hipparchus library. The changes are mainly adaptations of the signatures to space dynamics.

  • the type of dependent variable t has been changed from double to AbsoluteDate
  • the type of state vector y has been changed from double[] to SpacecraftState
Luc Maisonobe, Pascal Parraud