I am opening a new topic following the last comments from Remote clock model in OneWayGNSSRangeBuilder.
The ObservableSatellite class was added in 2019 (commit 735d5e4), in order to associate clock offsets to propagation, for the sake of GNSS measurements. It has evolved several times since then, adding clock drift, then clock acceleration, then quadratic clock models, then name.
As the topic referenced above states, this design clearly still has serious flaws. Clocks are really core elements in the GNSS world, and the quadratic model that is broadcast in navigation messages is in fact not really useful at the level of precision we are dealing with in Orekit. These models correspond to post-processing and are intended for end users (i.e. your smartphone or car navigation system), when Orekit either generates measurements or process them, it has to deal with much more irregular clocks, with offsets that jump all over the place. The quadratic is good for meter level positioning, not for centimeter level positioning.
This is the reason why, over the last few months, I have added the ClockModel interface, with several implementations (QuadraticClockModel, obviously, despite its limitations, but also AggregatedClockModel, AbstractCombinedClocksPair, ClocksSum, ClocksDifference, SampledClockModel, ConstantClockModel, PerfectClockModel). These are the classes that real GNSS users need.
So all the improvements in ObservableSatellite are now worthless, and I think we should strip down the class and remove anything related to clocks there. We should also move the code related to clock offsets in all GNSS measurements out of the measurements themselves, and set up dedicated modifiers that take generic ClockModel instances (one for emitter, one for receiver), hence allowing the users much more flexibility than the crude worthless quadratic model.
I initially thought we should completely ditch the ObservableSatellite class and go back to simple integer parameter representing the index of the propagator in multi-satellite cases. This would however not meet all needs, as we also associated a name with the propagator, and we use that to retrieve the proper ambiguity in the AmbiguityCache for phase measurements. So perhaps ObservableSatellite could remain, but as just an association of a propagator index with a name.
What do you think?