Orekit issueshttps://gitlab.orekit.org/orekit/orekit/-/issues2024-03-28T21:16:22Zhttps://gitlab.orekit.org/orekit/orekit/-/issues/1363Wrong datation in Rinex observation files2024-03-28T21:16:22ZLuc MaisonobeWrong datation in Rinex observation filesWhen "RCV CLOCK OFFS APPL" is set to 0 in Rinex observation files,
it implies that not only the value of the measurements (code and phase) have *not* been corrected for clock offsets (and hence still have them), it also mean the measurem...When "RCV CLOCK OFFS APPL" is set to 0 in Rinex observation files,
it implies that not only the value of the measurements (code and phase) have *not* been corrected for clock offsets (and hence still have them), it also mean the measurement datation was done in receiver clock and not in the satellite system time scale.12.1Luc MaisonobeLuc Maisonobehttps://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/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/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/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/1358Add native AdpatableInterval for ApsideDetector2024-03-28T08:15:10ZRomain SerraAdd native AdpatableInterval for ApsideDetector12.1Romain SerraRomain Serrahttps://gitlab.orekit.org/orekit/orekit/-/issues/1357Zeros in unscented covariance2024-03-28T08:15:38ZMark RuttenZeros in unscented covarianceThe unscented filter produces zeros in the covariance matrix when including propagators parameters. This isn't the case with the kalman filter whereas I would expect both to behave very similarly.
This is the original [forum discussion...The unscented filter produces zeros in the covariance matrix when including propagators parameters. This isn't the case with the kalman filter whereas I would expect both to behave very similarly.
This is the original [forum discussion thread](https://forum.orekit.org/t/unscented-filter-propagation-parameters-covariance/3405).Mark RuttenMark Ruttenhttps://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/1351Remove inner private class JacobiPolynomials.JacobiKey2024-03-22T20:49:49ZMaxime JournotRemove inner private class JacobiPolynomials.JacobiKeySince [JacobiKey](https://github.com/Hipparchus-Math/hipparchus/blob/b8b88c512e0f6b30f4e43075a2089e1f14edcae9/hipparchus-core/src/main/java/org/hipparchus/analysis/polynomials/PolynomialsUtils.java#L270) is now a public class in Hipparch...Since [JacobiKey](https://github.com/Hipparchus-Math/hipparchus/blob/b8b88c512e0f6b30f4e43075a2089e1f14edcae9/hipparchus-core/src/main/java/org/hipparchus/analysis/polynomials/PolynomialsUtils.java#L270) is now a public class in Hipparchus (see Hipparchus [issue 322](https://github.com/Hipparchus-Math/hipparchus/issues/322)), there's no need to have it duplicated in Orekit class [JacobiPolynomials](https://gitlab.orekit.org/orekit/orekit/-/blob/master/src/main/java/org/orekit/propagation/semianalytical/dsst/utilities/JacobiPolynomials.java?ref_type=heads#L182)12.1Maxime JournotMaxime Journothttps://gitlab.orekit.org/orekit/orekit/-/issues/1350Changing return type of MeasurementBuilder.build2024-03-22T19:28:17ZLuc MaisonobeChanging return type of MeasurementBuilder.buildThe `MeasurementBuilder` interface is used by Orekit measurements generation feature. It is specialized for each measurement type. Its `build` method returns a specific `ObservedMeasurement<T>` (i.e `Range` for `RangeBuilder`, `Phase` fo...The `MeasurementBuilder` interface is used by Orekit measurements generation feature. It is specialized for each measurement type. Its `build` method returns a specific `ObservedMeasurement<T>` (i.e `Range` for `RangeBuilder`, `Phase` for `PhaseBuilder`…).
Internally, all implementations work by creating first a dummy `ObservedMeasurement<T>`, then call its `estimateWithoutDerivatives` to build an `EstimatedMeasurementBase<T>`, retrieve from this intermediate object the true measurement value and finally build another `ObservedMeasurement<T>` with the correct value. This second `ObservedMeasurement<T>` is then returned through a bunch of classes (`AbstractScheduler`, then an internal step handler, then `Generator`). At the end, it is passed to a `GeneratedMeasurementSubscriber`).
I have a use case where the information present in the `ObservedMeasurement<T>` is not sufficient; I would need to get the states of the spacecraft involved in the measurement, as they hold some additional states I need. I cannot just call again the propagators that are used by the `Generator` because doing this stalls the generation (probably some kind of dead lock or infinite recursion as the propagator calls the measurements generator which then would call the propagator back). Setting up another propagator also seems a waste of resources since the states have already been computed during the measurement generation; they were just thrown away when building the second `ObservedMeasurement<T>` from the `EstimatedMeasurementBase<T>`.
This issue intends to change the API of `MeasurementBuilder` and all the intermediate classes so the measurements that are built and returned to users are `EstimatedMeasurementBase<T>` rather than `ObservedMeasurement<T>`. It targets Orekit 13.0 milestone as it changes several public signatures. Partial backward compatibility is ensured as `ObservedMeasurement<T>` can be retrieved from the `EstimatedMeasurementBase<T>` using its `getObservedMeasurement()` method. The returned `EstimatedMeasurementBase<T>` contains much more information than `ObservedMeasurement<T>` (states, participants...).13.0Luc MaisonobeLuc Maisonobehttps://gitlab.orekit.org/orekit/orekit/-/issues/1349Add more overrides of getAttitudeRotation2024-03-19T16:07:47ZRomain SerraAdd more overrides of getAttitudeRotationConcerns implementations of `AttitudeProvider`
For example in `FixedRate`Concerns implementations of `AttitudeProvider`
For example in `FixedRate`https://gitlab.orekit.org/orekit/orekit/-/issues/1348FieldDsstPropagator#afterIntegration does nothing2024-03-19T17:29:41ZBryan CazabonneFieldDsstPropagator#afterIntegration does nothingThe following implementation does nothing
```
protected void afterIntegration() {
// remove the special short periodics step handler if added before
if (isMeanOrbit() == PropagationType.OSCULATING) {
fin...The following implementation does nothing
```
protected void afterIntegration() {
// remove the special short periodics step handler if added before
if (isMeanOrbit() == PropagationType.OSCULATING) {
final List<FieldODEStepHandler<T>> preserved = new ArrayList<>();
final FieldODEIntegrator<T> integrator = getIntegrator();
// clear the list
integrator.clearStepHandlers();
// add back the step handlers that were important for the user
for (final FieldODEStepHandler<T> sp : preserved) {
integrator.addStepHandler(sp);
}
}
}
```
It shall be updated following DSSTPropagator implementation.https://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 Serra