Class EventSlopeFilter<T extends EventDetector>

  • Type Parameters:
    T - type of the detector
    All Implemented Interfaces:

    public class EventSlopeFilter<T extends EventDetector>
    extends AbstractDetector<EventSlopeFilter<T>>
    Wrapper used to detect only increasing or decreasing events.

    This class is heavily based on the class EventFilter from the Hipparchus library. The changes performed consist in replacing raw types (double and double arrays) with space dynamics types (AbsoluteDate, SpacecraftState).

    General events are defined implicitly by a g function crossing zero. This function needs to be continuous in the event neighborhood, and its sign must remain consistent between events. This implies that during an orbit propagation, events triggered are alternately events for which the function increases from negative to positive values, and events for which the function decreases from positive to negative values.

    Sometimes, users are only interested in one type of event (say increasing events for example) and not in the other type. In these cases, looking precisely for all events location and triggering events that will later be ignored is a waste of computing time.

    Users can wrap a regular event detector in an instance of this class and provide this wrapping instance to a Propagator in order to avoid wasting time looking for uninteresting events. The wrapper will intercept the calls to the g function and to the eventOccurred method in order to ignore uninteresting events. The wrapped regular event detector will then see only the interesting events, i.e. either only increasing events or only decreasing events. The number of calls to the g function will also be reduced.

    See Also:
    • Constructor Detail

      • EventSlopeFilter

        public EventSlopeFilter​(T rawDetector,
                                FilterType filter)
        rawDetector - event detector to wrap
        filter - filter to use
      • EventSlopeFilter

        protected EventSlopeFilter​(AdaptableInterval maxCheck,
                                   double threshold,
                                   int maxIter,
                                   EventHandler handler,
                                   T rawDetector,
                                   FilterType filter)
        Protected constructor with full parameters.

        This constructor is not public as users are expected to use the builder API with the various withXxx() methods to set up the instance in a readable manner without using a huge amount of parameters.

        maxCheck - maximum checking interval
        threshold - convergence threshold (s)
        maxIter - maximum number of iterations in the event time search
        handler - event handler to call at event occurrences
        rawDetector - event detector to wrap
        filter - filter to use
    • Method Detail

      • create

        protected EventSlopeFilter<T> create​(AdaptableInterval newMaxCheck,
                                             double newThreshold,
                                             int newMaxIter,
                                             EventHandler newHandler)
        Build a new instance.
        Specified by:
        create in class AbstractDetector<EventSlopeFilter<T extends EventDetector>>
        newMaxCheck - maximum checking interval (s)
        newThreshold - convergence threshold (s)
        newMaxIter - maximum number of iterations in the event time search
        newHandler - event handler to call at event occurrences
        a new instance of the appropriate sub-type
      • getDetector

        public T getDetector()
        Get the wrapped raw detector.
        the wrapped raw detector
      • getFilter

        public FilterType getFilter()
        Get filter type.
        filter type
      • init

        public void init​(SpacecraftState s0,
                         AbsoluteDate t)
        Initialize event handler at the start of a propagation.

        This method is called once at the start of the propagation. It may be used by the event handler to initialize some internal data if needed.

        The default implementation does nothing

        This implementation sets the direction of propagation and initializes the event handler. If a subclass overrides this method it should call super.init(s0, t).

        Specified by:
        init in interface EventDetector
        init in class AbstractDetector<EventSlopeFilter<T extends EventDetector>>
        s0 - initial state
        t - target time for the integration
      • g

        public double g​(SpacecraftState s)
        Compute the value of the switching function. This function must be continuous (at least in its roots neighborhood), as the integrator will need to find its roots to locate the events.
        Specified by:
        g in interface EventDetector
        Specified by:
        g in class AbstractDetector<EventSlopeFilter<T extends EventDetector>>
        s - the current state information: date, kinematics, attitude
        value of the switching function