public abstract class MultiAbstractDetector extends Object implements MultiEventDetector
This class is copied from AbstractDetector
and
adapted to multi propagation.
Common parts shared by several events finders. A default implementation of most of the methods of
MultiEventDetector interface
. Make it easier to create a new detector.
MultiPropagator.addEventDetector(MultiEventDetector)
Modifier and Type | Field and Description |
---|---|
static int |
DEFAULT_MAX_ITERATION_COUNT
Default maximal number of iterations in the event time search.
|
static double |
DEFAULT_MAXCHECK
Default maximum checking interval (s).
|
static double |
DEFAULT_THRESHOLD
Default convergence threshold (s).
|
DECREASING, INCREASING, INCREASING_DECREASING
Modifier | Constructor and Description |
---|---|
protected |
MultiAbstractDetector(double maxCheck,
double threshold)
Build a new instance.
|
|
MultiAbstractDetector(int slopeSelection,
double maxCheck,
double threshold)
Build a new instance.
|
Modifier and Type | Method and Description |
---|---|
abstract EventDetector.Action |
eventOccurred(Map<String,SpacecraftState> s,
boolean increasing,
boolean forward)
Handle an event and choose what to do next.
|
boolean |
filterEvent(Map<String,SpacecraftState> states,
boolean increasing,
boolean forward)
Filter last event: returns true if the last event is a false detection, false otherwise.
|
abstract double |
g(Map<String,SpacecraftState> s)
Compute the value of the switching function.
|
double |
getMaxCheckInterval()
Get maximal time interval between switching function checks.
|
int |
getMaxIterationCount()
Get maximal number of iterations in the event time search.
|
int |
getSlopeSelection()
Get the parameter in charge of the selection of detected events by the slope of the g-function.
|
double |
getThreshold()
Get the convergence threshold in the event time search.
|
void |
init(Map<String,SpacecraftState> s0,
AbsoluteDate t)
Initialize event handler at the start of a propagation.
|
Map<String,SpacecraftState> |
resetStates(Map<String,SpacecraftState> oldStates)
Reset the states (including additional states) prior to continue propagation.
|
abstract boolean |
shouldBeRemoved()
This method is called after the step handler has returned and before the next step is started, but only when
MultiEventDetector.eventOccurred(java.util.Map<java.lang.String, fr.cnes.sirius.patrius.propagation.SpacecraftState>, boolean, boolean) has been called. |
public static final double DEFAULT_MAXCHECK
public static final double DEFAULT_THRESHOLD
public static final int DEFAULT_MAX_ITERATION_COUNT
protected MultiAbstractDetector(double maxCheck, double threshold)
maxCheck
- maximum checking interval (s)threshold
- convergence threshold (s)public MultiAbstractDetector(int slopeSelection, double maxCheck, double threshold)
slopeSelection
- g-function slope selection (0, 1, or 2)maxCheck
- maximum checking interval (s)threshold
- convergence threshold (s)public void init(Map<String,SpacecraftState> s0, AbsoluteDate t) throws PatriusException
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.
init
in interface MultiEventDetector
s0
- map of initial statest
- target time for the integrationPatriusException
- thrown if initialization failedpublic abstract double g(Map<String,SpacecraftState> s) throws PatriusException
This function must be continuous (at least in its roots neighborhood), as the integrator will need to find its roots to locate the events.
g
in interface MultiEventDetector
s
- the current states information: date, kinematics, attitudes for forces
and events computation, and additional states for each statesPatriusException
- if some specific error occurspublic abstract EventDetector.Action eventOccurred(Map<String,SpacecraftState> s, boolean increasing, boolean forward) throws PatriusException
The scheduling between this method and the MultiOrekitStepHandler method handleStep is to call this method first
and handleStep
afterwards. This scheduling allows the propagator to pass true
as the
isLast
parameter to the step handler to make it aware the step will be the last one if this method
returns EventDetector.Action.STOP
. As the interpolator may be
used to navigate back throughout the last step MultiOrekitStepNormalizer does for example), user code called by
this method and user code called by step handlers may experience apparently out of order values of the
independent time variable. As an example, if the same user object implements both this MultiEventDetector
interface and the MultiOrekitFixedStepHandler interface, a forward integration may
call its eventOccurred
method with a state at 2000-01-01T00:00:10 first and call its
handleStep
method with a state at 2000-01-01T00:00:09 afterwards. Such out of order calls are
limited to the size of the integration step for MultiOrekitStepHandler and to the size of the fixed step for
MultiOrekitFixedStepHandler.
eventOccurred
in interface MultiEventDetector
s
- the current states information: date, kinematics, attitude for forces
and events computation, and additional states for each statesincreasing
- if true, the value of the switching function increases
when times increases around event (note that increase is measured with respect
to physical time, not with respect to propagation which may go backward in time)forward
- if true, the integration variable (time) increases during integration.EventDetector.Action.STOP
,
EventDetector.Action.RESET_STATE
,
EventDetector.Action.RESET_DERIVATIVES
,
EventDetector.Action.CONTINUE
PatriusException
- if some specific error occurspublic abstract boolean shouldBeRemoved()
This method is called after the step handler has returned and before the next step is started, but only when
MultiEventDetector.eventOccurred(java.util.Map<java.lang.String, fr.cnes.sirius.patrius.propagation.SpacecraftState>, boolean, boolean)
has been called.
shouldBeRemoved
in interface MultiEventDetector
public Map<String,SpacecraftState> resetStates(Map<String,SpacecraftState> oldStates) throws PatriusException
This method is called after the step handler has returned and before the next step is started, but only when
MultiEventDetector.eventOccurred(java.util.Map<java.lang.String, fr.cnes.sirius.patrius.propagation.SpacecraftState>, boolean, boolean)
has itself returned the
EventDetector.Action.RESET_STATE
indicator. It allows the user
to reset the state for the next step, without perturbing the step handler of the finishing step. If the
MultiEventDetector.eventOccurred(java.util.Map<java.lang.String, fr.cnes.sirius.patrius.propagation.SpacecraftState>, boolean, boolean)
never returns the
EventDetector.Action.RESET_STATE
indicator, this function will
never be called, and it is safe to simply return null.
resetStates
in interface MultiEventDetector
oldStates
- old statesPatriusException
- if the states cannot be resetedpublic double getThreshold()
getThreshold
in interface MultiEventDetector
public double getMaxCheckInterval()
getMaxCheckInterval
in interface MultiEventDetector
public int getMaxIterationCount()
getMaxIterationCount
in interface MultiEventDetector
public int getSlopeSelection()
getSlopeSelection
in interface MultiEventDetector
public boolean filterEvent(Map<String,SpacecraftState> states, boolean increasing, boolean forward) throws PatriusException
This method is called right before #eventOccurred(SpacecraftState, boolean, boolean)
method.
This may be useful in order to filter some events in particular when angles are at stake (see for example
LocalTimeAngleDetector
).
filterEvent
in interface MultiEventDetector
states
- states at last event occurrenceincreasing
- if true, the value of the switching function increases when times increases
around event (note that increase is measured with respect to physical time, not with
respect to propagation which may go backward in time)forward
- if true, the integration variable (time) increases during integration.PatriusException
- thrown if computation failed for some reasonsCopyright © 2023 CNES. All rights reserved.