Orekit issueshttps://gitlab.orekit.org/groups/orekit/-/issues2024-03-22T23:27:33Zhttps://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/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/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/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/1347No public constructor in Inertia and InertiaAxis classes2024-03-15T13:26:43ZMiyuNo public constructor in Inertia and InertiaAxis classesThere is no public constructor in Inertia and InertiaAxis classes, so it is not possible to create those objects.
(Posted this [here](https://forum.orekit.org/t/how-to-use-torquefree-attitude-provider/3369))There is no public constructor in Inertia and InertiaAxis classes, so it is not possible to create those objects.
(Posted this [here](https://forum.orekit.org/t/how-to-use-torquefree-attitude-provider/3369))12.0.2https://gitlab.orekit.org/orekit/orekit/-/issues/1346Rinex observation V4 can miss ANTENNA: DELTA H/E/N header line for receivers ...2024-03-15T13:26:43ZLuc MaisonobeRinex observation V4 can miss ANTENNA: DELTA H/E/N header line for receivers in vehiclesThis header line is replaced by ANTENNA: DELTA X/Y/Z for moving receivers.
However, when the END header marker is found, there are checks that ANTENNA: DELTA H/E/N has been parsed, so correct files are rejected.This header line is replaced by ANTENNA: DELTA X/Y/Z for moving receivers.
However, when the END header marker is found, there are checks that ANTENNA: DELTA H/E/N has been parsed, so correct files are rejected.12.0.2Luc 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 Serrahttps://gitlab.orekit.org/orekit/orekit/-/issues/1344HasNonKeplerianAcceleration is wrong in FieldOrbit2024-03-16T22:42:13ZRomain SerraHasNonKeplerianAcceleration is wrong in FieldOrbitDoesn't do the same check than in Orbit, which is the correct one.
The Field version is also slowing down creation of FieldOrbit, which is detrimental for the State Transition Matrix computationDoesn't do the same check than in Orbit, which is the correct one.
The Field version is also slowing down creation of FieldOrbit, which is detrimental for the State Transition Matrix computation12.1Romain SerraRomain Serrahttps://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/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/1341{set|get}ClkOffset in RinexObservationHeader is confusing2024-03-14T12:17:18ZLuc Maisonobe{set|get}ClkOffset in RinexObservationHeader is confusingThe name of the methods as well as its javadoc seem to imply the value is an offset (despite it is an integer), but it really is a flag corresponding to entry "RCV CLOCK OFFS APPL" in Rinex header.
So the names should read `{set|get}Cloc...The name of the methods as well as its javadoc seem to imply the value is an offset (despite it is an integer), but it really is a flag corresponding to entry "RCV CLOCK OFFS APPL" in Rinex header.
So the names should read `{set|get}ClockOffsetApplied` and the type should be a boolean.12.1Luc MaisonobeLuc Maisonobehttps://gitlab.orekit.org/orekit/orekit/-/issues/1338Add a way to retrieve the effect of an EstimationModifier2024-03-06T22:13:39ZLuc MaisonobeAdd a way to retrieve the effect of an EstimationModifier`EstimationModifier` implementations use `setEstimatedValue` to update the current value.
There is no way to retrieve the original value before any modifications or to get the effect of each modifier independently, only the final updated...`EstimationModifier` implementations use `setEstimatedValue` to update the current value.
There is no way to retrieve the original value before any modifications or to get the effect of each modifier independently, only the final updated value is available.
Accessing these data should be possible.12.1Luc MaisonobeLuc Maisonobehttps://gitlab.orekit.org/orekit/orekit/-/issues/1336Add getBodyName in third bodies2024-03-07T20:10:35ZRomain SerraAdd getBodyName in third bodiesPossibly also factorize things like `dependsOnlyOnPosition` for `ForceModel`Possibly also factorize things like `dependsOnlyOnPosition` for `ForceModel`12.1Romain SerraRomain Serrahttps://gitlab.orekit.org/orekit/orekit/-/issues/1335Allow choice of orbit type in SmallManeuverAnalyticalModel2024-03-07T18:44:01ZMaxime JournotAllow choice of orbit type in SmallManeuverAnalyticalModel[SmallManeuverAnalyticalModel](https://gitlab.orekit.org/orekit/orekit/-/blob/develop/src/main/java/org/orekit/forces/maneuvers/SmallManeuverAnalyticalModel.java?ref_type=heads) imposes an internal `OrbitType` (Keplerian or Equinoctial d...[SmallManeuverAnalyticalModel](https://gitlab.orekit.org/orekit/orekit/-/blob/develop/src/main/java/org/orekit/forces/maneuvers/SmallManeuverAnalyticalModel.java?ref_type=heads) imposes an internal `OrbitType` (Keplerian or Equinoctial depending on eccentricity).
This is nice when a user doesn't know which type of orbit he wants to deal with.
However, when one knows which type to use, it's much faster to use this type than to rely on the many conversions the model as to do to go back and forth between types.
As an example, using Keplerian orbits and enforcing the internal type to Keplerian results in a 77% increase in performance for a LEO → GEO low-thrust transfer of 15 days with about 17000 maneuvers (see this [forum thread](https://forum.orekit.org/t/performance-configure-orbit-type-in-smallmaneuveranalyticalmodel/3324/3)).
So the proposal here is to add constructors to `SmallManeuverAnalyticalModel` that will allow the choice of orbit type to use.12.1Maxime JournotMaxime Journothttps://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/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/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/1328Potential NullPointerException in Frame2024-03-15T13:26:43ZLuc MaisonobePotential NullPointerException in FrameThe field version of `Frame.getStaticTransformTo` javadoc states that null `date` parameters are allowed (they are allowed in the primitive double version).
However, the first instruction is `date.hasZeroField()`, which will trigger an e...The field version of `Frame.getStaticTransformTo` javadoc states that null `date` parameters are allowed (they are allowed in the primitive double version).
However, the first instruction is `date.hasZeroField()`, which will trigger an exception if null date is passed.
This occured to me because SonarQube identified a bug between lines 530 and 534 of the field version of `GroundStation.getOffsetGeodeticPoint`, as the check for null date is performed *after* `getStaticTransformTo` has been called.12.0.2https://gitlab.orekit.org/orekit/orekit/-/issues/1327SP3Writer generates blank lines2024-03-15T13:26:43ZMark RuttenSP3Writer generates blank linesI found a problem with a multiple of 17 satellites (i.e. a complete row), where the SP3Writer incorrectly generates two blank lines in the header, one just after the satellite names and one just after the accuracies.I found a problem with a multiple of 17 satellites (i.e. a complete row), where the SP3Writer incorrectly generates two blank lines in the header, one just after the satellite names and one just after the accuracies.12.0.2Mark RuttenMark Rutten