public class EventSlopeFilter<T extends EventDetector> extends AbstractDetector<EventSlopeFilter<T>>
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.
EventEnablingPredicateFilter
,
Serialized FormDEFAULT_MAX_ITER, DEFAULT_MAXCHECK, DEFAULT_THRESHOLD
Constructor and Description |
---|
EventSlopeFilter(T rawDetector,
FilterType filter)
Wrap an
event detector . |
Modifier and Type | Method and Description |
---|---|
protected EventSlopeFilter<T> |
create(double newMaxCheck,
double newThreshold,
int newMaxIter,
EventHandler<? super EventSlopeFilter<T>> newHandler)
Build a new instance.
|
double |
g(SpacecraftState s)
Compute the value of the switching function.
|
void |
init(SpacecraftState s0,
AbsoluteDate t)
Initialize event handler at the start of a propagation.
|
eventOccurred, getHandler, getMaxCheckInterval, getMaxIterationCount, getThreshold, isForward, resetState, withHandler, withMaxCheck, withMaxIter, withThreshold
public EventSlopeFilter(T rawDetector, FilterType filter)
event detector
.rawDetector
- event detector to wrapfilter
- filter to useprotected EventSlopeFilter<T> create(double newMaxCheck, double newThreshold, int newMaxIter, EventHandler<? super EventSlopeFilter<T>> newHandler)
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 searchnewHandler
- event handler to call at event occurrencespublic void init(SpacecraftState s0, AbsoluteDate t)
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
init
in interface EventDetector
init
in class AbstractDetector<EventSlopeFilter<T extends EventDetector>>
s0
- initial statet
- target time for the integrationpublic double g(SpacecraftState s) throws OrekitException
g
in interface EventDetector
g
in class AbstractDetector<EventSlopeFilter<T extends EventDetector>>
s
- the current state information: date, kinematics, attitudeOrekitException
- if some specific error occursCopyright © 2002-2017 CS Systèmes d'information. All rights reserved.