Class GroundStation
- java.lang.Object
-
- org.orekit.estimation.measurements.GroundStation
-
- All Implemented Interfaces:
Observer,ParameterDriversProvider
public class GroundStation extends Object implements Observer
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
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from interface org.orekit.estimation.measurements.Observer
Observer.ObserverType
-
-
Field Summary
Fields Modifier and Type Field Description static StringACCELERATION_SUFFIXSuffix for ground clock drift parameters name.static StringDRIFT_SUFFIXSuffix for ground clock drift parameters name.static StringOFFSET_SUFFIXSuffix 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.GroundStation(TopocentricFrame baseFrame, EOPHistory eopHistory, QuadraticClockModel clock, StationDisplacement... displacements)Simple constructor.GroundStation(TopocentricFrame baseFrame, QuadraticClockModel clock)Build a ground station ignoringstation displacements.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description protected voidaddParameterDriver(ParameterDriver parameterDriver)Add a single parameter.protected static QuadraticClockModelcreateEmptyQuadraticClock(String name)Creates an quadratic clock with zero displacement.static FieldPVCoordinatesProvider<Gradient>extractFieldPVCoordinatesProvider(SpacecraftState templateState, TimeStampedFieldPVCoordinates<Gradient> pvCoordinates)Create PV provider from position-velocity-acceleration vector and template state.static PVCoordinatesProviderextractPVCoordinatesProvider(SpacecraftState templateState, TimeStampedPVCoordinates pvCoordinates)Create PV provider from position-velocity-acceleration vector and template state.TopocentricFramegetBaseFrame()Get the base frame associated with the station.ParameterDrivergetClockAccelerationDriver()Get the clock acceleration driver.ParameterDrivergetClockDriftDriver()Get the clock drift driver.ParameterDrivergetClockOffsetDriver()Get the clock offset driver.StationDisplacement[]getDisplacements()Get the displacement models.ParameterDrivergetEastOffsetDriver()Get a driver allowing to change station position along East axis.FramegetEstimatedEarthFrame()Get the estimated Earth frame, including the estimated linear models for pole and prime meridian.UT1ScalegetEstimatedUT1()Get the estimated UT1 scale, including the estimated linear models for prime meridian.FieldPVCoordinatesProvider<Gradient>getFieldPVCoordinatesProvider(int freeParameters, Map<String,Integer> parameterIndices)Return the FieldPVCoordinatesProvider.StringgetName()Get the MeasurementObject name.ParameterDrivergetNorthOffsetDriver()Get a driver allowing to change station position along North axis.Observer.ObserverTypegetObserverType()Get the type of object being used in measurement observations.GeodeticPointgetOffsetGeodeticPoint(AbsoluteDate date)Get the geodetic point at the center of the offset frame.<T extends CalculusFieldElement<T>>
FieldGeodeticPoint<T>getOffsetGeodeticPoint(FieldAbsoluteDate<T> date)Get the geodetic point at the center of the offset frame.TransformgetOffsetToInertial(Frame inertial, AbsoluteDate date, boolean clockOffsetAlreadyApplied)Get the transform between offset frame and inertial frame.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.List<ParameterDriver>getParametersDrivers()Get the drivers for parameters.ParameterDrivergetPolarDriftXDriver()Get a driver allowing to add a polar drift along X.ParameterDrivergetPolarDriftYDriver()Get a driver allowing to add a polar drift along Y.ParameterDrivergetPolarOffsetXDriver()Get a driver allowing to add a polar offset along X.ParameterDrivergetPolarOffsetYDriver()Get a driver allowing to add a polar offset along Y.ParameterDrivergetPrimeMeridianDriftDriver()Get a driver allowing to add a prime meridian rotation rate.ParameterDrivergetPrimeMeridianOffsetDriver()Get a driver allowing to add a prime meridian rotation.PVCoordinatesProvidergetPVCoordinatesProvider()Return the PVCoordinatesProvider.QuadraticClockModelgetQuadraticClockModel()Get a quadratic clock model valid at some date.QuadraticFieldClockModel<Gradient>getQuadraticFieldClock(int freeParameters, AbsoluteDate date, Map<String,Integer> indices)Get emitting satellite clock provider.ParameterDrivergetZenithOffsetDriver()Get a driver allowing to change station position along Zenith axis.-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface org.orekit.estimation.measurements.Observer
computeLocalParametersWith, computeLocalParametersWithout, computeRemoteParametersWith, computeRemoteParametersWithout, getClockOffsetDriver, getName, getOffsetToInertial, getParamaterIndices, getPosition, getPVCoordinates, getQuadraticClockModel, getQuadraticFieldClock
-
Methods inherited from interface org.orekit.utils.ParameterDriversProvider
getNbParametersDriversValue, getParameterDriver, getParameters, getParameters, getParameters, getParameters, getParametersAllValues, getParametersAllValues, isSupported
-
-
-
-
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
-
ACCELERATION_SUFFIX
public static final String ACCELERATION_SUFFIX
Suffix for ground clock drift parameters name.- Since:
- 12.1
- 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)- Since:
- 13.0
- See Also:
GroundStation(TopocentricFrame, EOPHistory, StationDisplacement...)
-
GroundStation
public GroundStation(TopocentricFrame baseFrame, QuadraticClockModel clock)
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)clock- new quadratic clock model with user-supplied displacements- Since:
- 13.0
- 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:
- 12.1
-
GroundStation
public GroundStation(TopocentricFrame baseFrame, EOPHistory eopHistory, QuadraticClockModel clock, 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 framesclock- new quadratic clock model with user-supplied displacementsdisplacements- ground station displacement model (tides, ocean loading, atmospheric loading, thermal effects...)- Since:
- 12.1
-
-
Method Detail
-
getObserverType
public final Observer.ObserverType getObserverType()
Get the type of object being used in measurement observations.- Specified by:
getObserverTypein interfaceObserver- Returns:
- string value
-
getDisplacements
public StationDisplacement[] getDisplacements()
Get the displacement models.- Returns:
- displacement models (empty if no model has been set up)
- Since:
- 9.1
-
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 thesetValuemethods 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 thesetValuemethods 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
-
getOffsetGeodeticPoint
public <T extends CalculusFieldElement<T>> FieldGeodeticPoint<T> getOffsetGeodeticPoint(FieldAbsoluteDate<T> date)
Get the geodetic point at the center of the offset frame.- Type Parameters:
T- type of the field elements- Parameters:
date- current date(must be non-null, which is a more stringent condition * than ingetOffsetGeodeticPoint(AbsoluteDate)- Returns:
- geodetic point at the center of the offset frame
- Since:
- 12.1
-
getPVCoordinatesProvider
public final PVCoordinatesProvider getPVCoordinatesProvider()
Return the PVCoordinatesProvider.- Specified by:
getPVCoordinatesProviderin interfaceObserver- Returns:
- pos/vel coordinates provider
-
getFieldPVCoordinatesProvider
public FieldPVCoordinatesProvider<Gradient> getFieldPVCoordinatesProvider(int freeParameters, Map<String,Integer> parameterIndices)
Return the FieldPVCoordinatesProvider.- Specified by:
getFieldPVCoordinatesProviderin interfaceObserver- Parameters:
freeParameters- number of estimated parametersparameterIndices- indices of the estimated parameters in derivatives computations, must be driver- Returns:
- pos/vel coordinates provider for values with Gradient field
-
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
parametersmanaging these offsets are changed, the method must be called again to retrieve a new offset frame.- Specified by:
getOffsetToInertialin interfaceObserver- Parameters:
inertial- inertial frame to transform todate- date of the transformclockOffsetAlreadyApplied- if true, the specifieddateis as read by the ground station clock (i.e. clock offset not compensated), if false, the specifieddatewas 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, 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.
- Specified by:
getOffsetToInertialin interfaceObserver- 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
-
getName
public final String getName()
Get the MeasurementObject name.- Returns:
- name for the object
- Since:
- 12.1
-
getClockOffsetDriver
public final ParameterDriver getClockOffsetDriver()
Get the clock offset driver.- Returns:
- clock offset driver
-
getClockDriftDriver
public final ParameterDriver getClockDriftDriver()
Get the clock drift driver.- Returns:
- clock drift driver
-
getClockAccelerationDriver
public final ParameterDriver getClockAccelerationDriver()
Get the clock acceleration driver.- Returns:
- clock acceleration driver
-
createEmptyQuadraticClock
protected static QuadraticClockModel createEmptyQuadraticClock(String name)
Creates an quadratic clock with zero displacement.- Parameters:
name- name of object that is holding the clock- Returns:
- new quadratic clock model
-
getQuadraticClockModel
public final QuadraticClockModel getQuadraticClockModel()
Get a quadratic clock model valid at some date.- Returns:
- quadratic clock model
- Since:
- 12.1
-
getQuadraticFieldClock
public QuadraticFieldClockModel<Gradient> getQuadraticFieldClock(int freeParameters, AbsoluteDate date, Map<String,Integer> indices)
Get emitting satellite clock provider.- Parameters:
freeParameters- total number of free parameters in the gradientdate- time of computationsindices- indices of the differentiation parameters in derivatives computations, must be span name and not driver name- Returns:
- emitting satellite clock provider
-
getParametersDrivers
public List<ParameterDriver> getParametersDrivers()
Get the drivers for parameters.- Specified by:
getParametersDriversin interfaceParameterDriversProvider- Returns:
- drivers for parameters
-
addParameterDriver
protected final void addParameterDriver(ParameterDriver parameterDriver)
Add a single parameter.- Parameters:
parameterDriver- parameter being added to the MeasurementObject
-
extractPVCoordinatesProvider
public static PVCoordinatesProvider extractPVCoordinatesProvider(SpacecraftState templateState, TimeStampedPVCoordinates pvCoordinates)
Create PV provider from position-velocity-acceleration vector and template state.- Parameters:
templateState- template statepvCoordinates- position-velocity-acceleration- Returns:
- position-velocity-acceleration provider
- Since:
- 14.0
-
extractFieldPVCoordinatesProvider
public static FieldPVCoordinatesProvider<Gradient> extractFieldPVCoordinatesProvider(SpacecraftState templateState, TimeStampedFieldPVCoordinates<Gradient> pvCoordinates)
Create PV provider from position-velocity-acceleration vector and template state.- Parameters:
templateState- template statepvCoordinates- position-velocity-acceleration- Returns:
- position-velocity-acceleration provider
- Since:
- 14.0
-
-