Orekit issueshttps://gitlab.orekit.org/orekit/orekit/-/issues2024-03-28T21:19:04Zhttps://gitlab.orekit.org/orekit/orekit/-/issues/1362Extract clock model from Rinex observation files2024-03-28T21:19:04ZLuc MaisonobeExtract clock model from Rinex observation filesRinex observation files optionally contain receiver clock offsets.
These offsets can be used to build a clock model, and they are needed when splicing files and rewriting observations.Rinex observation files optionally contain receiver clock offsets.
These offsets can be used to build a clock model, and they are needed when splicing files and rewriting observations.12.1Luc MaisonobeLuc Maisonobehttps://gitlab.orekit.org/orekit/orekit/-/issues/1248Unused parameters in private methods compute* in DSSTZonal2024-03-28T06:39:30ZRomain SerraUnused parameters in private methods compute* in DSSTZonalUnused argument is of type (Field)AbsoluteDateUnused argument is of type (Field)AbsoluteDate12.1Bryan CazabonneBryan Cazabonnehttps://gitlab.orekit.org/orekit/orekit/-/issues/1361Allow splicing of Rinex clock files2024-03-27T22:08:36ZLuc MaisonobeAllow splicing of Rinex clock filesSince issue #1155 has been solved, it is possible to splice SP3 files and thus interpolate between the end of one file and the beginning of the next one.
The same feature should be available for Rinex clock files.Since issue #1155 has been solved, it is possible to splice SP3 files and thus interpolate between the end of one file and the beginning of the next one.
The same feature should be available for Rinex clock files.12.1Luc MaisonobeLuc Maisonobehttps://gitlab.orekit.org/orekit/orekit/-/issues/1359Add getFirstNonNullSpan and getLastNonNullSpan to TimeSpanMap2024-03-27T22:08:03ZLuc MaisonobeAdd getFirstNonNullSpan and getLastNonNullSpan to TimeSpanMapIt is possible to get the first and last `Span` in a `TimeSpanMap`.
However, one classical use case for `TimeSpanMap` is to build it first with a `null` object covering the full time range from past infinity to future infinity, and then ...It is possible to get the first and last `Span` in a `TimeSpanMap`.
However, one classical use case for `TimeSpanMap` is to build it first with a `null` object covering the full time range from past infinity to future infinity, and then to add one or several objects with limited time ranges. In this case, the first and last span are not meaningful because they correspond to the out of range parts that extends to infinity.
It would be more user-friendly to be able to retrieve directly the first and last spans that have non-null data. Of course, an exception should be thrown if all spans have null data.12.1Luc MaisonobeLuc Maisonobehttps://gitlab.orekit.org/orekit/orekit/-/issues/1360Add AggregatedClockModel2024-03-27T22:08:03ZLuc MaisonobeAdd AggregatedClockModel`SP3Ephemeris` allows to generate a global clock model by aggregating the clock models from each `SP3Segment`.
This clock model aggregation feature should be available as a new general implementation of `ClockModel`.`SP3Ephemeris` allows to generate a global clock model by aggregating the clock models from each `SP3Segment`.
This clock model aggregation feature should be available as a new general implementation of `ClockModel`.12.1Luc MaisonobeLuc Maisonobehttps://gitlab.orekit.org/orekit/orekit/-/issues/1155Allow spllicing of SP3 files2024-03-27T22:02:15ZLuc MaisonobeAllow spllicing of SP3 filesA recurrent demand on the forum is to be able to use several consecutive SP3 files.
One suggestion [made](https://forum.orekit.org/t/interpolation-over-multiple-sp3-files/893) was to use an `AggregateBoundedPropagator` with a list of `Bo...A recurrent demand on the forum is to be able to use several consecutive SP3 files.
One suggestion [made](https://forum.orekit.org/t/interpolation-over-multiple-sp3-files/893) was to use an `AggregateBoundedPropagator` with a list of `BoundedPropagator` retrieved from each SP3 file.
This works great when the file producer takes care to have the last point of one file at the same date as the first point of the next file (typically at midnight), knowing that there may be a discontinuity as the files are produced on different batches of measurements.
This however does not work when there is a gap between the last point of one file and the first point of another file. As an example, some agencies produce files covering 1 day at 5 minutes interval, and these files start at 00:00 and end at 23:55. Using `AggregateBoundedPropagator`, the 5 minutes gap between the end of one propagator and the start of the next propagator cannot be filled: an exception is raised if a computation is attempted during the gap.
In order to alleviate this problem, it would be nice to be able to splice SP3 files together, taking care to drop one point if both files provide data at exactly the splice point. In this case, dropping the file from the earliest file and keeping the file from the newest one seems fair.
For consistency, splicing should be allowed only for files with matching metadata (same time system, same list of satellites, same interval between epochs…).12.0Luc MaisonobeLuc Maisonobehttps://gitlab.orekit.org/orekit/orekit/-/issues/1293Add getters in LofOffset2024-03-26T11:07:07ZRomain SerraAdd getters in LofOffset12.1Tanner MillsTanner Millshttps://gitlab.orekit.org/orekit/orekit/-/issues/1356Various issues in Rinex clock file header parsing for mixed systems2024-03-22T23:27:33ZLuc MaisonobeVarious issues in Rinex clock file header parsing for mixed systemsClock file [JAX0MGXFIN_20202430000_01D_30S_CLK.CLK.gz](https://cddis.nasa.gov/archive/gnss/products/2121/JAX0MGXFIN_20202430000_01D_30S_CLK.CLK.gz) has mixed content (satellite system set to 'M' in the first header line.
This triggers se...Clock file [JAX0MGXFIN_20202430000_01D_30S_CLK.CLK.gz](https://cddis.nasa.gov/archive/gnss/products/2121/JAX0MGXFIN_20202430000_01D_30S_CLK.CLK.gz) has mixed content (satellite system set to 'M' in the first header line.
This triggers several errors when attempting to parse the header:
- an exception is thrown when attemptinf to set up a first version of time scale while parsing line 1 (despite it will be overridden later when "TIME SYSTEM ID" will be parsed)
- line "SYS / DCBS APPLIED" as no satellite system, as no corrections are applied, this triggers another exception
- line "SYS / PCVS APPLIED" as no satellite system, as no corrections are applied, this triggers another exception12.1Luc MaisonobeLuc Maisonobehttps://gitlab.orekit.org/orekit/orekit/-/issues/1283Restore and add previous API of MeasurementBuilder.build method2024-03-22T19:24:10ZMaxime JournotRestore and add previous API of MeasurementBuilder.build methodMethod `build` of `MeasurementBuilder` now takes as input `(AbsoluteDate date, Map<ObservableSatellite, OrekitStepInterpolator> interpolators)` as input.
Formerly (before v12) it took as input `(SpacecraftState[] states)`.
The new API ...Method `build` of `MeasurementBuilder` now takes as input `(AbsoluteDate date, Map<ObservableSatellite, OrekitStepInterpolator> interpolators)` as input.
Formerly (before v12) it took as input `(SpacecraftState[] states)`.
The new API is a bit hard to use and there have been two questions about this change on the forum (see [here](https://forum.orekit.org/t/inputs-of-build-for-measurement-builders-in-orekit-12-0/3094) and [here](https://forum.orekit.org/t/use-of-angularradecbuilder-build-method/3115).
In the 1st mentioned thread, a proposition of a new intermediate API was made. It would restore the functionality of the previous one, taking as input `(AbsoluteDate date, SpacecraftState[] states)`.12.1https://gitlab.orekit.org/orekit/orekit/-/issues/1355Clock models should provide their validity interval2024-03-22T18:59:03ZLuc MaisonobeClock models should provide their validity intervalClock models retrieved from files (Rinex clock or SP3) have limited validity.
It should be possible to retrived it, in order to put several models in a `TimeSpanMap`Clock models retrieved from files (Rinex clock or SP3) have limited validity.
It should be possible to retrived it, in order to put several models in a `TimeSpanMap`12.1Luc MaisonobeLuc Maisonobehttps://gitlab.orekit.org/orekit/orekit/-/issues/1354Parsing of SP3 files with missing agency in header2024-03-22T17:23:08ZLuc MaisonobeParsing of SP3 files with missing agency in headerSome SP3 files published by CDDIS (like [JAX0MGXFIN_20202440000_01D_05M_ORB.SP3.gz](https://cddis.nasa.gov/archive/gnss/products/2121/JAX0MGXFIN_20202440000_01D_05M_ORB.SP3.gz)) don't have an agency name at the end of the first header li...Some SP3 files published by CDDIS (like [JAX0MGXFIN_20202440000_01D_05M_ORB.SP3.gz](https://cddis.nasa.gov/archive/gnss/products/2121/JAX0MGXFIN_20202440000_01D_05M_ORB.SP3.gz)) don't have an agency name at the end of the first header line.
This triggers an exception in the SP3 parser.12.1Luc MaisonobeLuc Maisonobehttps://gitlab.orekit.org/orekit/orekit/-/issues/1352Build clock models from samples2024-03-22T15:22:10ZLuc MaisonobeBuild clock models from samplesIt should be possible to build clock models from samples
- directly from user samples
- from Sinex clock files
- from SP3 files
The clock models should also include clock acceleration (currently they are limited to offset and rate)It should be possible to build clock models from samples
- directly from user samples
- from Sinex clock files
- from SP3 files
The clock models should also include clock acceleration (currently they are limited to offset and rate)12.1Luc MaisonobeLuc Maisonobehttps://gitlab.orekit.org/orekit/orekit/-/issues/1353SP3Parser guessFrame does not recognize ITR142024-03-22T15:22:10ZLuc MaisonobeSP3Parser guessFrame does not recognize ITR14Two problems here:
- SP3Parser::guessFrame fails on "ITR14" (because ITRFVersion.getITRFVersion fails)
- since frame guessing is also needed for other GNSS files (like RINEX), the method should be in some IGSUtils classTwo problems here:
- SP3Parser::guessFrame fails on "ITR14" (because ITRFVersion.getITRFVersion fails)
- since frame guessing is also needed for other GNSS files (like RINEX), the method should be in some IGSUtils class12.1Luc MaisonobeLuc Maisonobehttps://gitlab.orekit.org/orekit/orekit/-/issues/1325inter-satellite measurements should consider direction-dependent phase centers2024-03-22T12:46:15ZLuc Maisonobeinter-satellite measurements should consider direction-dependent phase centersAntenna phase centers can be direction-dependent. The `FrequencyPattern` class manages this, thanks to both a phase center position and phase center variation functions, which can for example be read from Antex files.
The `OnBoardAntenn...Antenna phase centers can be direction-dependent. The `FrequencyPattern` class manages this, thanks to both a phase center position and phase center variation functions, which can for example be read from Antex files.
The `OnBoardAntenna{InterSatellites|OneWayGNSS}{Phase|Range}Modifier` modifiers should use `FrequencyPattern` instead of using only fixed vectors for emitter and receiver phase centers.12.1Luc MaisonobeLuc Maisonobehttps://gitlab.orekit.org/orekit/orekit/-/issues/1329SP3Ephemeris.getPropagator ignores clock offset2024-03-22T12:46:09ZLuc MaisonobeSP3Ephemeris.getPropagator ignores clock offsetThe `SP3Ephemeris` class implements `EphemerisFile.SatelliteEphemeris<SP3Coordinate, SP3Segment>`, hence it allows to retrieve `SP3Coordinate` instances which include clock offsets.
When calling `getPropagator` on the other hand, `SP3Ep...The `SP3Ephemeris` class implements `EphemerisFile.SatelliteEphemeris<SP3Coordinate, SP3Segment>`, hence it allows to retrieve `SP3Coordinate` instances which include clock offsets.
When calling `getPropagator` on the other hand, `SP3Ephemeris` uses internally `EphemerisSegmentPropagator`, which despite knowing about the real coordinates type (here `SP3Coordinate`), only interpolates `TimeStampedPVCoordinates` because it casts the coordinates to `TimeStampedPVCoordinates` and then uses `TimeStampedPVCoordinatesHermiteInterpolator`.
`SP3Ephemeris` (or perhaps even `EphemerisSegmentPropagator`) should allow to retrieve additional information. At `SP3Ephemeris` level, it could be using additional states, whereas at `EphemerisSegmentPropagator` it could be generating the proper coordinates type.12.1Luc MaisonobeLuc Maisonobehttps://gitlab.orekit.org/orekit/orekit/-/issues/1332inter satellites one way range rate measurements2024-03-22T12:46:02ZLuc Maisonobeinter satellites one way range rate measurementsInter satellites one way range rate measurements should be available.Inter satellites one way range rate measurements should be available.12.1Luc MaisonobeLuc Maisonobehttps://gitlab.orekit.org/orekit/orekit/-/issues/1333Use only modifiers to handle ambiguities in GNSS measurements2024-03-22T12:45:54ZLuc MaisonobeUse only modifiers to handle ambiguities in GNSS measurementsThe `Phase`, `OneWayGNSSPhase` and `InterSatellitesPhase` measurements all have their own ParameterDriver for ambiguities, but at the same time there are `PhaseAmbiguityModifier`, `OneWayGNSSPhaseAmbiguityModifier` and `InterSatellitesPh...The `Phase`, `OneWayGNSSPhase` and `InterSatellitesPhase` measurements all have their own ParameterDriver for ambiguities, but at the same time there are `PhaseAmbiguityModifier`, `OneWayGNSSPhaseAmbiguityModifier` and `InterSatellitesPhaseAmbiguityModifier` that add different parameter drivers, with some key to separate various ambiguities.
There should be only one way to specify ambiguities, either in the base measurements or as modifiers. Ambiguities are mandatory for phase measurements, but there is a need for very fine control in order to deal with Loss Of Lock events. It seems more user-friendly to have one modifier for each transmitter/receiver pair, with one `ParameterDriver` each, and add this to all the measurements that involve this pair. It is possible to deal with Loss Of Lock using the same `ParameterDriver` as it can handle time span maps.
See [this thread on the forum](https://forum.orekit.org/t/handling-gnss-ambiguities/3321)12.1Luc MaisonobeLuc Maisonobehttps://gitlab.orekit.org/orekit/orekit/-/issues/1342Build offset time scale from clock model2024-03-22T12:45:34ZLuc MaisonobeBuild offset time scale from clock modelGNSS signals are timestamped by satellite and ground clocks that can be associated with quadratic clock models.
`QuadraticClockModel` has been added recently to take this into account in measurements.
It would be interesting to allow bui...GNSS signals are timestamped by satellite and ground clocks that can be associated with quadratic clock models.
`QuadraticClockModel` has been added recently to take this into account in measurements.
It would be interesting to allow building an offset `TimeScale` from such a clock model, hence representing a local clock vision of time.12.1Luc MaisonobeLuc Maisonobehttps://gitlab.orekit.org/orekit/orekit/-/issues/1343Generate Rinex observations in receiver clock2024-03-22T12:45:17ZLuc MaisonobeGenerate Rinex observations in receiver clockAs receiver clock time scale has been added as per issue #1342, it should be possible to use it when writing Rinex observation files.As receiver clock time scale has been added as per issue #1342, it should be possible to use it when writing Rinex observation files.12.1Luc MaisonobeLuc Maisonobehttps://gitlab.orekit.org/orekit/orekit/-/issues/1345Add J2-only ForceModel2024-03-18T22:02:30ZRomain SerraAdd J2-only ForceModelFor performance, avoiding `HolmesFeatherAttractionModel` `gradient` and Earth rotationFor performance, avoiding `HolmesFeatherAttractionModel` `gradient` and Earth rotation12.1Romain SerraRomain Serra