Orekit issueshttps://gitlab.orekit.org/groups/orekit/-/issues2024-03-16T22:42:13Zhttps://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/1340SRP dependance on position only should be true for isotropic models2024-03-10T14:20:33ZRomain SerraSRP dependance on position only should be true for isotropic models`false` slows down STM computation so should be avoided if possible
Could be done at same time than #1337`false` slows down STM computation so should be avoided if possible
Could be done at same time than #133712.1https://gitlab.orekit.org/orekit/orekit/-/issues/1339CI/CD environment and scripts must be adapted to SonarQube 9.9 LTS2024-03-06T21:21:26ZSébastien Dinotsebastien.dinot@csgroup.euCI/CD environment and scripts must be adapted to SonarQube 9.9 LTSThe current CI/CD pipeline is based on a Docker image that uses a version of Java (8) that is not compatible with the minimum requirements (11) of SonarQube 9.9 LTS. Consequently, the CI/CD pipeline must use a more recent Docker image. I...The current CI/CD pipeline is based on a Docker image that uses a version of Java (8) that is not compatible with the minimum requirements (11) of SonarQube 9.9 LTS. Consequently, the CI/CD pipeline must use a more recent Docker image. I have successfully tried the [maven:3.9.6-eclipse-temurin-11](https://hub.docker.com/_/maven) on my clone.
I will push as soon as possible a MR.https://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/1337Add getter for RadiationPressureSensitive in SolarRadiationPressure2024-03-07T16:52:16ZRomain SerraAdd getter for RadiationPressureSensitive in SolarRadiationPressure12.1https://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/1334Plug in more Hipparchus interpolators in Ephemeris class2024-03-02T14:07:11ZRomain SerraPlug in more Hipparchus interpolators in Ephemeris classAs discussed [here](https://forum.orekit.org/t/interpolators-plugged-in-ephemeris-class/3328/5)As discussed [here](https://forum.orekit.org/t/interpolators-plugged-in-ephemeris-class/3328/5)12.1Vincent CUCCHIETTIvincent.cucchietti@csgroup.euVincent CUCCHIETTIvincent.cucchietti@csgroup.euhttps://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/1331Add (Field)RelativeDistanceDetector2024-03-02T14:07:25ZRomain SerraAdd (Field)RelativeDistanceDetector12.1Vincent CUCCHIETTIvincent.cucchietti@csgroup.euVincent CUCCHIETTIvincent.cucchietti@csgroup.euhttps://gitlab.orekit.org/orekit/orekit/-/issues/1330Add FieldExtremumApproachDetector2024-03-01T19:20:49ZRomain SerraAdd FieldExtremumApproachDetectorThere is no `Field` equivalent to `ExtremumApproachProvider`There is no `Field` equivalent to `ExtremumApproachProvider`12.1Vincent CUCCHIETTIvincent.cucchietti@csgroup.euVincent CUCCHIETTIvincent.cucchietti@csgroup.euhttps://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 Ruttenhttps://gitlab.orekit.org/orekit/orekit/-/issues/1326CDM KVN Spaces2024-02-27T19:00:07ZEvan WardCDM KVN SpacesI've seen some CDMs that Orekit's `CdmParser` is not able to parse.
In one case there is not value between the number and the units, e.g.
```
CTDOT_TDOT =0.0001[m**2/s**2]
```
I know the CCSDS standard in Section 6.3.3 says "there...I've seen some CDMs that Orekit's `CdmParser` is not able to parse.
In one case there is not value between the number and the units, e.g.
```
CTDOT_TDOT =0.0001[m**2/s**2]
```
I know the CCSDS standard in Section 6.3.3 says "there must be at least one blank character between the value and the units", but in this case it shouldn't be to hard to separate them. Note that Orekit's own `KvnGenerator` will generate files like this with no space between the value and units if the units and alignment columns are too close.
I've also seen lines like the following with just a bunch of blanks after the `=`.
```
TIME_LASTOB_START =
```
I don't see in the CCSDS standard where it says the key shall not appear when an optional value is not present. So I think this one could be considered standard conforming.
See https://forum.orekit.org/t/cdmparser-kvn-enhancements/3309https://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 Maisonobe