Draft: Issue 1745 - Abstract out receiver type (satellite, ground station) from measurements
Removes dependency of measurement generation classes on whether the receiver of the measurement information is a satellite or a ground station. Addresses #1745.
Change summary:
- Created abstract master class
org.orekit.estimation.measurements.MeasurementObjectto serve as master class for all observing objects (satellites and ground stations) and observed objects (ObservableSatellite). This object creates and holds theQuadraticClockModelas well as storing allParameterDriversfor theMeasurementObjectin an accessible list. - Altered
ObservableSatelliteto inherit from the master abstract classMeasurementObject - Created abstract child class
ObservationObjectto serve as the abstract parent class for all observing objects. - Created child classes of
ObservationObjectto hold satellite propagation data (ObservationSatellite) and groundpoint information (ObservationStation, formerlyGroundStation). - Adapted all measurement generation classes to accept one of the
ObservationObjectchild classes as an input and moved the generation of theCommonParametrsWIthoutDerivativesandCommonParametersWithDerivativesvalues from themeasurementclasses to thereceiverclasses. - Removed
GroundStationCommonParametersandOnBoardCommonParametersclasses and modified allmeasurementclasses to simply accept and useCommonParametersWithDerivativesandCommonParametersWithoutDerivatives - Modified the
IonosphericModelclasses to take in aOneAxisEllipsoidinput, so that the use of the ionospheric models could be made agnostic w.r.t. whether the observation object was in space or on the ground. - Updated unit tests to comply with new measurement format (some measurements that previously only accepted
GroundStationvalues as inputs had to be upcast in places because they depend on being on the ground to calculate ionospheric and trophospheric measurements) - Verified correct functioning of all existing unit tests.
- Added function to
FDOAmeasurement class to allow the user to get the centre frequency value.
Notes:
- Certain measurement classes still receiver
ObservationStationorObservationSatelliteinputs specifically, because the measurement types can only be made from ground stations or satellites, respectively-
ObservationStationclasses:AngularAzElAngularRaDec
-
ObservationSatelliteclassesOneWayGNSSPhaseOneWayGNSSRangeOneWayGNSSRangeRate
- (Note: the GNSS measurement classes are functionally repetitions of the
Phase,RangeandRangeRatemeasurement classes, and therefore should possibly be deprecated in future versions of Orekit)
-
- Several intermediary abstraction classes between the parent
AbstractMeasurementand the relative child classes have been removed because their interface values have been rendered unnecessary by the code changes. In some cases the functions previously handled by these classes moved toObservationSatelliteorObservationStation; in others they devolved on the child measurement classes themselves (e.g. thetwoWayvalue inRangeandRangeRate). - The ionospheric modeling classes have all been modified to accept a generic
ObservationObject, but the tropospheric modifiers have not. In order to handle this, the functions have been abstracted to accept the higher class, but warning checks have been added to the actual tropospheric delay functions to check that the input is anObservationStationand not anObservationSatellite - While the code of the ionospheric models has been updated to handle observer platform abstraction, the math has not been updated for the satellite-satellite case. That will get taken care of shortly.
- Some function/variable names have been changed in the
estimation.measurementsclasses to reflect the abstracting out of the measuring object type.
I believe the required modifications to the code base itself are done, and all existing unit tests have successfully passed. However, I still have to write unit tests to prove out the behavior of the space-based observers for classes that previously only took ground observers, and vice versa.
Edited by Brianna Aubin