Class GroundStation
- java.lang.Object
-
- org.orekit.estimation.measurements.GroundStation
-
public class GroundStation extends Object
Class modeling a ground station that can perform some measurements.This class adds a position offset parameter to a base
topocentric frame
.Since 9.0, this class also adds parameters for an additional polar motion and an additional prime meridian orientation. Since these parameters will have the same name for all ground stations, they will be managed consistently and allow to estimate Earth orientation precisely (this is needed for precise orbit determination). The polar motion and prime meridian orientation will be applied after regular Earth orientation parameters, so the value of the estimated parameters will be correction to EOP, they will not be the complete EOP values by themselves. Basically, this means that for Earth, the following transforms are applied in order, between inertial frame and ground station frame (for non-Earth based ground stations, different precession nutation models and associated planet oritentation parameters would be applied, if available):
Since 9.3, this class also adds a station clock offset parameter, which manages the value that must be subtracted from the observed measurement date to get the real physical date at which the measurement was performed (i.e. the offset is negative if the ground station clock is slow and positive if it is fast).
- precession/nutation, as theoretical model plus celestial pole EOP parameters
- body rotation, as theoretical model plus prime meridian EOP parameters
- polar motion, which is only from EOP parameters (no theoretical models)
- additional body rotation, controlled by
getPrimeMeridianOffsetDriver()
andgetPrimeMeridianDriftDriver()
- additional polar motion, controlled by
getPolarOffsetXDriver()
,getPolarDriftXDriver()
,getPolarOffsetYDriver()
andgetPolarDriftYDriver()
- station clock offset, controlled by
getClockOffsetDriver()
- station position offset, controlled by
getEastOffsetDriver()
,getNorthOffsetDriver()
andgetZenithOffsetDriver()
- Since:
- 8.0
- Author:
- Luc Maisonobe
-
-
Field Summary
Fields Modifier and Type Field Description static String
DRIFT_SUFFIX
Suffix for ground clock drift parameters name.static String
INTERMEDIATE_SUFFIX
Suffix for ground station intermediate frame name.static String
OFFSET_SUFFIX
Suffix for ground station position and clock offset parameters names.
-
Constructor Summary
Constructors Constructor Description GroundStation(TopocentricFrame baseFrame)
Build a ground station ignoringstation displacements
.GroundStation(TopocentricFrame baseFrame, EOPHistory eopHistory, StationDisplacement... displacements)
Simple constructor.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description TopocentricFrame
getBaseFrame()
Get the base frame associated with the station.ParameterDriver
getClockDriftDriver()
Get a driver allowing to change station clock drift (which is related to measurement date).ParameterDriver
getClockOffsetDriver()
Get a driver allowing to change station clock (which is related to measurement date).StationDisplacement[]
getDisplacements()
Get the displacement models.ParameterDriver
getEastOffsetDriver()
Get a driver allowing to change station position along East axis.Frame
getEstimatedEarthFrame()
Get the estimated Earth frame, including the estimated linear models for pole and prime meridian.UT1Scale
getEstimatedUT1()
Get the estimated UT1 scale, including the estimated linear models for prime meridian.ParameterDriver
getNorthOffsetDriver()
Get a driver allowing to change station position along North axis.GeodeticPoint
getOffsetGeodeticPoint(AbsoluteDate date)
Get the geodetic point at the center of the offset frame.Transform
getOffsetToInertial(Frame inertial, AbsoluteDate date, boolean clockOffsetAlreadyApplied)
Get the transform between offset frame and inertial frame.FieldTransform<Gradient>
getOffsetToInertial(Frame inertial, AbsoluteDate clockDate, int freeParameters, Map<String,Integer> indices)
Get the transform between offset frame and inertial frame with derivatives.FieldTransform<Gradient>
getOffsetToInertial(Frame inertial, FieldAbsoluteDate<Gradient> offsetCompensatedDate, int freeParameters, Map<String,Integer> indices)
Get the transform between offset frame and inertial frame with derivatives.ParameterDriver
getPolarDriftXDriver()
Get a driver allowing to add a polar drift along X.ParameterDriver
getPolarDriftYDriver()
Get a driver allowing to add a polar drift along Y.ParameterDriver
getPolarOffsetXDriver()
Get a driver allowing to add a polar offset along X.ParameterDriver
getPolarOffsetYDriver()
Get a driver allowing to add a polar offset along Y.ParameterDriver
getPrimeMeridianDriftDriver()
Get a driver allowing to add a prime meridian rotation rate.ParameterDriver
getPrimeMeridianOffsetDriver()
Get a driver allowing to add a prime meridian rotation.ParameterDriver
getZenithOffsetDriver()
Get a driver allowing to change station position along Zenith axis.
-
-
-
Field Detail
-
OFFSET_SUFFIX
public static final String OFFSET_SUFFIX
Suffix for ground station position and clock offset parameters names.- See Also:
- Constant Field Values
-
DRIFT_SUFFIX
public static final String DRIFT_SUFFIX
Suffix for ground clock drift parameters name.- See Also:
- Constant Field Values
-
INTERMEDIATE_SUFFIX
public static final String INTERMEDIATE_SUFFIX
Suffix for ground station intermediate frame name.- See Also:
- Constant Field Values
-
-
Constructor Detail
-
GroundStation
public GroundStation(TopocentricFrame baseFrame)
Build a ground station ignoringstation displacements
.The initial values for the pole and prime meridian parametric linear models (
getPrimeMeridianOffsetDriver()
,getPrimeMeridianDriftDriver()
,getPolarOffsetXDriver()
,getPolarDriftXDriver()
,getPolarOffsetXDriver()
,getPolarDriftXDriver()
) are set to 0. The initial values for the station offset model (getClockOffsetDriver()
,getEastOffsetDriver()
,getNorthOffsetDriver()
,getZenithOffsetDriver()
) are set to 0. This implies that as long as these values are not changed, the offset frame is the same as thebase frame
. As soon as some of these models are changed, the offset frame moves away from thebase frame
.- Parameters:
baseFrame
- base frame associated with the station, without *any* parametric model (no station offset, no polar motion, no meridian shift)- See Also:
GroundStation(TopocentricFrame, EOPHistory, StationDisplacement...)
-
GroundStation
public GroundStation(TopocentricFrame baseFrame, EOPHistory eopHistory, StationDisplacement... displacements)
Simple constructor.The initial values for the pole and prime meridian parametric linear models (
getPrimeMeridianOffsetDriver()
,getPrimeMeridianDriftDriver()
,getPolarOffsetXDriver()
,getPolarDriftXDriver()
,getPolarOffsetXDriver()
,getPolarDriftXDriver()
) are set to 0. The initial values for the station offset model (getClockOffsetDriver()
,getEastOffsetDriver()
,getNorthOffsetDriver()
,getZenithOffsetDriver()
,getClockOffsetDriver()
) are set to 0. This implies that as long as these values are not changed, the offset frame is the same as thebase frame
. As soon as some of these models are changed, the offset frame moves away from thebase frame
.- Parameters:
baseFrame
- base frame associated with the station, without *any* parametric model (no station offset, no polar motion, no meridian shift)eopHistory
- EOP history associated with Earth framesdisplacements
- ground station displacement model (tides, ocean loading, atmospheric loading, thermal effects...)- Since:
- 9.1
-
-
Method Detail
-
getDisplacements
public StationDisplacement[] getDisplacements()
Get the displacement models.- Returns:
- displacement models (empty if no model has been set up)
- Since:
- 9.1
-
getClockOffsetDriver
public ParameterDriver getClockOffsetDriver()
Get a driver allowing to change station clock (which is related to measurement date).- Returns:
- driver for station clock offset
- Since:
- 9.3
-
getClockDriftDriver
public ParameterDriver getClockDriftDriver()
Get a driver allowing to change station clock drift (which is related to measurement date).- Returns:
- driver for station clock drift
- Since:
- 10.3
-
getEastOffsetDriver
public ParameterDriver getEastOffsetDriver()
Get a driver allowing to change station position along East axis.- Returns:
- driver for station position offset along East axis
-
getNorthOffsetDriver
public ParameterDriver getNorthOffsetDriver()
Get a driver allowing to change station position along North axis.- Returns:
- driver for station position offset along North axis
-
getZenithOffsetDriver
public ParameterDriver getZenithOffsetDriver()
Get a driver allowing to change station position along Zenith axis.- Returns:
- driver for station position offset along Zenith axis
-
getPrimeMeridianOffsetDriver
public ParameterDriver getPrimeMeridianOffsetDriver()
Get a driver allowing to add a prime meridian rotation.The parameter is an angle in radians. In order to convert this value to a DUT1 in seconds, the value must be divided by
ave = 7.292115146706979e-5
(which is the nominal Angular Velocity of Earth from the TIRF model).- Returns:
- driver for prime meridian rotation
-
getPrimeMeridianDriftDriver
public ParameterDriver getPrimeMeridianDriftDriver()
Get a driver allowing to add a prime meridian rotation rate.The parameter is an angle rate in radians per second. In order to convert this value to a LOD in seconds, the value must be multiplied by -86400 and divided by
ave = 7.292115146706979e-5
(which is the nominal Angular Velocity of Earth from the TIRF model).- Returns:
- driver for prime meridian rotation rate
-
getPolarOffsetXDriver
public ParameterDriver getPolarOffsetXDriver()
Get a driver allowing to add a polar offset along X.The parameter is an angle in radians
- Returns:
- driver for polar offset along X
-
getPolarDriftXDriver
public ParameterDriver getPolarDriftXDriver()
Get a driver allowing to add a polar drift along X.The parameter is an angle rate in radians per second
- Returns:
- driver for polar drift along X
-
getPolarOffsetYDriver
public ParameterDriver getPolarOffsetYDriver()
Get a driver allowing to add a polar offset along Y.The parameter is an angle in radians
- Returns:
- driver for polar offset along Y
-
getPolarDriftYDriver
public ParameterDriver getPolarDriftYDriver()
Get a driver allowing to add a polar drift along Y.The parameter is an angle rate in radians per second
- Returns:
- driver for polar drift along Y
-
getBaseFrame
public TopocentricFrame getBaseFrame()
Get the base frame associated with the station.The base frame corresponds to a null position offset, null polar motion, null meridian shift
- Returns:
- base frame associated with the station
-
getEstimatedEarthFrame
public Frame getEstimatedEarthFrame()
Get the estimated Earth frame, including the estimated linear models for pole and prime meridian.This frame is bound to the
driver for prime meridian offset
,driver prime meridian drift
,driver for polar offset along X
,driver for polar drift along X
,driver for polar offset along Y
,driver for polar drift along Y
, so its orientation changes when thesetValue
methods of the drivers are called.- Returns:
- estimated Earth frame
- Since:
- 9.1
-
getEstimatedUT1
public UT1Scale getEstimatedUT1()
Get the estimated UT1 scale, including the estimated linear models for prime meridian.This time scale is bound to the
driver for prime meridian offset
, anddriver prime meridian drift
, so its offset from UTC changes when thesetValue
methods of the drivers are called.- Returns:
- estimated Earth frame
- Since:
- 9.1
-
getOffsetGeodeticPoint
public GeodeticPoint getOffsetGeodeticPoint(AbsoluteDate date)
Get the geodetic point at the center of the offset frame.- Parameters:
date
- current date (may be null if displacements are ignored)- Returns:
- geodetic point at the center of the offset frame
- Since:
- 9.1
-
getOffsetToInertial
public Transform getOffsetToInertial(Frame inertial, AbsoluteDate date, boolean clockOffsetAlreadyApplied)
Get the transform between offset frame and inertial frame.The offset frame takes the current position offset, polar motion and the meridian shift into account. The frame returned is disconnected from later changes in the parameters. When the
parameters
managing these offsets are changed, the method must be called again to retrieve a new offset frame.- Parameters:
inertial
- inertial frame to transform todate
- date of the transformclockOffsetAlreadyApplied
- if true, the specifieddate
is as read by the ground station clock (i.e. clock offset not compensated), if false, the specifieddate
was already compensated and is a physical absolute date- Returns:
- transform between offset frame and inertial frame, at real measurement date (i.e. with clock, Earth and station offsets applied)
-
getOffsetToInertial
public FieldTransform<Gradient> getOffsetToInertial(Frame inertial, AbsoluteDate clockDate, int freeParameters, Map<String,Integer> indices)
Get the transform between offset frame and inertial frame with derivatives.As the East and North vectors are not well defined at pole, the derivatives of these two vectors diverge to infinity as we get closer to the pole. So this method should not be used for stations less than 0.0001 degree from either poles.
- Parameters:
inertial
- inertial frame to transform toclockDate
- date of the transform as read by the ground station clock (i.e. clock offset not compensated)freeParameters
- total number of free parameters in the gradientindices
- indices of the estimated parameters in derivatives computations, must be driver span name in map, not driver name or will not give right results (seeParameterDriver.getValue(int, Map)
)- Returns:
- transform between offset frame and inertial frame, at real measurement date (i.e. with clock, Earth and station offsets applied)
- Since:
- 10.2
- See Also:
getOffsetToInertial(Frame, FieldAbsoluteDate, int, Map)
-
getOffsetToInertial
public FieldTransform<Gradient> getOffsetToInertial(Frame inertial, FieldAbsoluteDate<Gradient> offsetCompensatedDate, int freeParameters, Map<String,Integer> indices)
Get the transform between offset frame and inertial frame with derivatives.As the East and North vectors are not well defined at pole, the derivatives of these two vectors diverge to infinity as we get closer to the pole. So this method should not be used for stations less than 0.0001 degree from either poles.
- Parameters:
inertial
- inertial frame to transform tooffsetCompensatedDate
- date of the transform, clock offset and its derivatives already compensatedfreeParameters
- total number of free parameters in the gradientindices
- indices of the estimated parameters in derivatives computations, must be driver span name in map, not driver name or will not give right results (seeParameterDriver.getValue(int, Map)
)- Returns:
- transform between offset frame and inertial frame, at specified date
- Since:
- 10.2
-
-