Class 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).

    1. precession/nutation, as theoretical model plus celestial pole EOP parameters
    2. body rotation, as theoretical model plus prime meridian EOP parameters
    3. polar motion, which is only from EOP parameters (no theoretical models)
    4. additional body rotation, controlled by getPrimeMeridianOffsetDriver() and getPrimeMeridianDriftDriver()
    5. additional polar motion, controlled by getPolarOffsetXDriver(), getPolarDriftXDriver(), getPolarOffsetYDriver() and getPolarDriftYDriver()
    6. station clock offset, controlled by getClockOffsetDriver()
    7. station position offset, controlled by getEastOffsetDriver(), getNorthOffsetDriver() and getZenithOffsetDriver()
    Since:
    8.0
    Author:
    Luc Maisonobe
    • 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
      • INTERMEDIATE_SUFFIX

        public static final String INTERMEDIATE_SUFFIX
        Suffix for ground station intermediate frame name.
        See Also:
        Constant Field Values
    • 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
      • 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 to
        date - date of the transform
        clockOffsetAlreadyApplied - if true, the specified date is as read by the ground station clock (i.e. clock offset not compensated), if false, the specified date 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 to
        clockDate - 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 gradient
        indices - indices of the estimated parameters in derivatives computations, must be driver span name in map, not driver name or will not give right results (see ParameterDriver.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 to
        offsetCompensatedDate - date of the transform, clock offset and its derivatives already compensated
        freeParameters - total number of free parameters in the gradient
        indices - indices of the estimated parameters in derivatives computations, must be driver span name in map, not driver name or will not give right results (see ParameterDriver.getValue(int, Map))
        Returns:
        transform between offset frame and inertial frame, at specified date
        Since:
        10.2