public class GroundMaskElevationDetector extends AbstractDetector
This class finds elevation events (i.e. satellite raising and setting) with respect to an azimuth-elevation mask.
An azimuth-elevation mask defines the physical horizon for a local point, origin of some topocentric frame.
Azimuth is defined according to
getAzimuth
. Elevation is defined according to
getElevation
.
The azimuth elevation mask must be supplied as a twodimensional array with multiples lines of pairs of azimuth-elevation angles. First row will be filled with azimuth values, second row with elevation values, as in the following snippet:
double[][] mask = { { FastMathFastMath.toRadians(0), FastMath.toRadians(10) }, { FastMathFastMath.toRadians(45), FastMath.toRadians(8) }, { FastMathFastMath.toRadians(90), FastMath.toRadians(6) }, { FastMathFastMath.toRadians(135), FastMath.toRadians(4) }, { FastMathFastMath.toRadians(180), FastMath.toRadians(5) }, { FastMathFastMath.toRadians(225), FastMath.toRadians(6) }, { FastMathFastMath.toRadians(270), FastMath.toRadians(8) }, { FastMathFastMath.toRadians(315), FastMath.toRadians(9) } };
No assumption is made on azimuth values and ordering. The only restraint is that only one elevation value can be associated to identical azimuths modulo 2PI.
The default implementation behavior is to continue
propagation at raising
and to
stop
propagation at setting. This can be changed by using provided constructors.
Propagator.addEventDetector(EventDetector)
,
Serialized FormEventDetector.Action
DEFAULT_MAXCHECK, DEFAULT_THRESHOLD
DECREASING, INCREASING, INCREASING_DECREASING
Constructor and Description |
---|
GroundMaskElevationDetector(double[][] azimelev,
TopocentricFrame topoIn)
Build a new azimuth-elevation detector.
|
GroundMaskElevationDetector(double[][] azimelev,
TopocentricFrame topoIn,
double maxCheck)
Build a new azimuth-elevation detector.
|
GroundMaskElevationDetector(double[][] azimelev,
TopocentricFrame topoIn,
double maxCheck,
double threshold)
Build a new azimuth-elevation detector.
|
GroundMaskElevationDetector(double[][] azimelev,
TopocentricFrame topoIn,
double maxCheck,
double threshold,
EventDetector.Action raising,
EventDetector.Action setting)
Build a new azimuth-elevation detector.
|
GroundMaskElevationDetector(double[][] azimelev,
TopocentricFrame topoIn,
double maxCheck,
double threshold,
EventDetector.Action raising,
EventDetector.Action setting,
boolean removeRaising,
boolean removeSetting)
Build a new azimuth-elevation detector.
|
Modifier and Type | Method and Description |
---|---|
EventDetector.Action |
eventOccurred(SpacecraftState s,
boolean increasing,
boolean forward)
Handle an azimuth-elevation event and choose what to do next.
|
double |
g(SpacecraftState s)
Compute the value of the switching function.
|
double |
getElevation(double azimuth)
Get the interpolated elevation for a given azimuth according to the mask.
|
TopocentricFrame |
getTopocentricFrame()
Get the topocentric frame.
|
boolean |
shouldBeRemoved()
This method is called after
EventDetector.eventOccurred(fr.cnes.sirius.patrius.propagation.SpacecraftState, boolean, boolean) has been triggered. |
getMaxCheckInterval, getMaxIterationCount, getSlopeSelection, getThreshold, init, resetState
public GroundMaskElevationDetector(double[][] azimelev, TopocentricFrame topoIn)
This simple constructor takes default values for maximal checking interval (AbstractDetector.DEFAULT_MAXCHECK
) and
convergence threshold (AbstractDetector.DEFAULT_THRESHOLD
).
azimelev
- azimuth-elevation mask (rad)topoIn
- topocentric frame in which elevation should be evaluatedIllegalArgumentException
- if azimuth-elevation mask is not supportedpublic GroundMaskElevationDetector(double[][] azimelev, TopocentricFrame topoIn, double maxCheck)
This constructor takes default value for convergence threshold (AbstractDetector.DEFAULT_THRESHOLD
).
The maximal interval between elevation checks should be smaller than the half duration of the minimal pass to handle, otherwise some short passes could be missed.
azimelev
- azimuth-elevation mask (rad)topoIn
- topocentric frame in which elevation should be evaluatedmaxCheck
- maximal checking interval (s)IllegalArgumentException
- if azimuth-elevation mask is not supportedpublic GroundMaskElevationDetector(double[][] azimelev, TopocentricFrame topoIn, double maxCheck, double threshold)
The maximal interval between elevation checks should be smaller than the half duration of the minimal pass to handle, otherwise some short passes could be missed.
The default implementation behavior is to continue
propagation at raising
and to stop
propagation at setting.
azimelev
- azimuth-elevation mask (rad)topoIn
- topocentric frame in which elevation should be evaluatedmaxCheck
- maximal checking interval (s)threshold
- convergence threshold (s)IllegalArgumentException
- if azimuth-elevation mask is not supportedpublic GroundMaskElevationDetector(double[][] azimelev, TopocentricFrame topoIn, double maxCheck, double threshold, EventDetector.Action raising, EventDetector.Action setting)
The maximal interval between elevation checks should be smaller than the half duration of the minimal pass to handle, otherwise some short passes could be missed.
azimelev
- azimuth-elevation mask (rad)topoIn
- topocentric frame in which elevation should be evaluatedmaxCheck
- maximal checking interval (s)threshold
- convergence threshold (s)raising
- action performed when propagation at raisingsetting
- action performed when propagation at settingIllegalArgumentException
- if azimuth-elevation mask is not supportedpublic GroundMaskElevationDetector(double[][] azimelev, TopocentricFrame topoIn, double maxCheck, double threshold, EventDetector.Action raising, EventDetector.Action setting, boolean removeRaising, boolean removeSetting)
The maximal interval between elevation checks should be smaller than the half duration of the minimal pass to handle, otherwise some short passes could be missed.
azimelev
- azimuth-elevation mask (rad)topoIn
- topocentric frame in which elevation should be evaluatedmaxCheck
- maximal checking interval (s)threshold
- convergence threshold (s)raising
- action performed when propagation at raisingsetting
- action performed when propagation at settingremoveRaising
- if detector should be removed at raisingremoveSetting
- if detector should be removed at settingIllegalArgumentException
- if azimuth-elevation mask is not supportedpublic TopocentricFrame getTopocentricFrame()
public EventDetector.Action eventOccurred(SpacecraftState s, boolean increasing, boolean forward) throws PatriusException
eventOccurred
in interface EventDetector
eventOccurred
in class AbstractDetector
s
- the current state information : date, kinematics, attitudeincreasing
- if true, the value of the switching function increases
when times increases around eventforward
- if true, the integration variable (time) increases during integration.PatriusException
- if some specific error occurspublic boolean shouldBeRemoved()
EventDetector.eventOccurred(fr.cnes.sirius.patrius.propagation.SpacecraftState, boolean, boolean)
has been triggered.
It returns true if the current detector should be removed after first event detection.
WARNING: this method can be called only once a event has been triggered. Before,
the value is not available.shouldBeRemoved
in interface EventDetector
shouldBeRemoved
in class AbstractDetector
public double g(SpacecraftState s) throws PatriusException
g
in interface EventDetector
g
in class AbstractDetector
s
- the current state information: date, kinematics, attitudePatriusException
- if some specific error occurspublic double getElevation(double azimuth)
azimuth
- azimuth (rad)Copyright © 2017 CNES. All rights reserved.