Orekit issueshttps://gitlab.orekit.org/groups/orekit/-/issues2022-01-20T16:04:13Zhttps://gitlab.orekit.org/orekit/orekit/-/issues/875Exception parsing empty CCSDS OEM comment2022-01-20T16:04:13ZM. VeltenException parsing empty CCSDS OEM commentParsing the CCSDS OEM file in txt format from [Spot the station](https://spotthestation.nasa.gov/trajectory_data.cfm) with Orekit 11.0.2 gives a parsing error on empty comments such as "COMMENT ".
A patch was proposed in the Orekit foru...Parsing the CCSDS OEM file in txt format from [Spot the station](https://spotthestation.nasa.gov/trajectory_data.cfm) with Orekit 11.0.2 gives a parsing error on empty comments such as "COMMENT ".
A patch was proposed in the Orekit forum [by Luc Maisonobe](https://forum.orekit.org/t/exception-parsing-empty-ccsds-oem-comment/1473/3?u=m-v) and confirmed to fix the problem.11.1https://gitlab.orekit.org/orekit/orekit/-/issues/881Add method to replicate 10.0 AbsoluteDate.toString()2022-01-20T09:44:25ZEvan WardAdd method to replicate 10.0 AbsoluteDate.toString()As suggested in https://forum.orekit.org/t/absolutedate-tostring-in-orekit-11-gives-unpredictable-result/1508/1As suggested in https://forum.orekit.org/t/absolutedate-tostring-in-orekit-11-gives-unpredictable-result/1508/1Evan WardEvan Wardhttps://gitlab.orekit.org/orekit/orekit/-/issues/880Wrong UTC offset if DateTimeComponents.toString(int, int) rounds up to the ne...2022-01-20T09:44:25ZEvan WardWrong UTC offset if DateTimeComponents.toString(int, int) rounds up to the next minuteWhen rounding up the UTC offset is always set to 0, incorrectly.When rounding up the UTC offset is always set to 0, incorrectly.Evan WardEvan Wardhttps://gitlab.orekit.org/orekit/orekit/-/issues/836Maneuvers reset angular satellite parameters to between 0..2Pi rads2022-01-20T09:44:25ZBayden PritchardManeuvers reset angular satellite parameters to between 0..2Pi rads[Link to forum discussion](https://forum.orekit.org/t/angular-parameters-of-orbit-eg-anomaly-longitude-argument-get-normalized-after-maneuvers/1367/3)
While several parameters measured in angles evolve continuously instead of resetting ...[Link to forum discussion](https://forum.orekit.org/t/angular-parameters-of-orbit-eg-anomaly-longitude-argument-get-normalized-after-maneuvers/1367/3)
While several parameters measured in angles evolve continuously instead of resetting once they cross 2Pi radians, maneuvers on a satellite WILL reset these values to the equivalent between 0..2Pi.
Solution proposed in forum discussion.https://gitlab.orekit.org/orekit/orekit/-/issues/849FieldEventHandler.init and EventHandler.init arguments do not match2022-01-20T09:44:25ZLuc MaisonobeFieldEventHandler.init and EventHandler.init arguments do not matchThe signature for `EventHandler.init` has the detector as third argument,
but the signature for `FieldEventHandler.init` has only two arguments.
This can be fixed in a minor version using default implementation and
deprecating the two a...The signature for `EventHandler.init` has the detector as third argument,
but the signature for `FieldEventHandler.init` has only two arguments.
This can be fixed in a minor version using default implementation and
deprecating the two arguments version.11.1Luc MaisonobeLuc Maisonobehttps://gitlab.orekit.org/orekit/orekit/-/issues/576Add weak-time-dependent (WTD) terms in the DSST lunar solar short period motion.2022-01-19T15:34:59ZBryan CazabonneAdd weak-time-dependent (WTD) terms in the DSST lunar solar short period motion.For a better accuracy in orbit propagation and orbit determination it is necessary to add the weak-time-dependent (WTD) terms in the Orekit DSST lunar solar short period motion. For GNSS or GEO orbits adding these terms can improve signi...For a better accuracy in orbit propagation and orbit determination it is necessary to add the weak-time-dependent (WTD) terms in the Orekit DSST lunar solar short period motion. For GNSS or GEO orbits adding these terms can improve significantly the results.https://gitlab.orekit.org/orekit/orekit/-/issues/878Fix writing of ITRF frame before 2000 in CCSDS files2022-01-17T15:10:35ZBryan CazabonneFix writing of ITRF frame before 2000 in CCSDS filesUsing the ITRF 1993 frame example, when writing the `REF_FRAME` entry in a CCSDS file, Orekit writes `ITRF1993` instead of `ITRF-93`. This issue is valid for all ITRF frames before 2000. The issue could be fixed by adding a `getName()` m...Using the ITRF 1993 frame example, when writing the `REF_FRAME` entry in a CCSDS file, Orekit writes `ITRF1993` instead of `ITRF-93`. This issue is valid for all ITRF frames before 2000. The issue could be fixed by adding a `getName()` method in the `CelestialBodyFrame` enumerate.
A file to reproduce the problem: [OEMExample9.txt](/uploads/c0d643e668023a487066219508f29533/OEMExample9.txt)
The test to add in `OemWriterTest` class:
@Test
public void testWriteExample9() {
doTest("/ccsds/odm/oem/OEMExample9.txt");
}11.1https://gitlab.orekit.org/orekit/orekit/-/issues/776Wrong associativity in units parsing2022-01-14T17:24:30ZLuc MaisonobeWrong associativity in units parsing`Unit.parse` uses wrong associativity rules.
It parses kg/m/s² as kg/(m/s²) instead of (kg/m)/s².`Unit.parse` uses wrong associativity rules.
It parses kg/m/s² as kg/(m/s²) instead of (kg/m)/s².11.0Luc MaisonobeLuc Maisonobehttps://gitlab.orekit.org/orekit/orekit/-/issues/819data filtering stack should be available for explicit loading2022-01-14T17:23:38ZLuc Maisonobedata filtering stack should be available for explicit loadingOrekit provides `DataFilter` that are automatically activated in an
appropriate stack when loading data using a `DataProvidersManager`.
As some file formats like CCSDS, ILRS or SP3 are loaded explicitly by
applications without using a `...Orekit provides `DataFilter` that are automatically activated in an
appropriate stack when loading data using a `DataProvidersManager`.
As some file formats like CCSDS, ILRS or SP3 are loaded explicitly by
applications without using a `DataProvidersManager`, applying filters
upon data loading is cumbersome.
The filtering stack feature should be extracted from `DataProvidersManager`
and be available to applications.11.0Luc MaisonobeLuc Maisonobehttps://gitlab.orekit.org/orekit/orekit/-/issues/822Add support for CCSDS TDM version 2.02022-01-14T17:22:56ZDavid GondelachAdd support for CCSDS TDM version 2.0The current TDM parser and writer do not yet support Tracking Data Message version 2.0, see https://public.ccsds.org/Pubs/503x0b2.pdf
The following keywords need to be added to support TDM v2.0:
MetaData section:
- DATA_TYPES
- EPHEMER...The current TDM parser and writer do not yet support Tracking Data Message version 2.0, see https://public.ccsds.org/Pubs/503x0b2.pdf
The following keywords need to be added to support TDM v2.0:
MetaData section:
- DATA_TYPES
- EPHEMERIS_NAME_n
- INTERPOLATION
- INTERPOLATION_DEGREE
- DOPPLER_COUNT_BIAS
- DOPPLER_COUNT_SCALE
- DOPPLER_COUNT_ROLLOVER
- CORRECTION_MAG
- CORRECTION_RCS
Data section:
- DOPPLER_COUNT
- MAG
- RCS
- RECEIVE_PHASE_CT_n
- TRANSMIT_PHASE_CT_nhttps://gitlab.orekit.org/orekit/orekit/-/issues/837Impossibility to get the underlying Detector on EventShifter Class2022-01-14T17:22:06ZSylvain MartinImpossibility to get the underlying Detector on EventShifter ClassHello,
Everything is described within the title really. For one of my projects, I've elected to use the Class EventShifter (to get eclipse entry & exit with timers for attitude transitions, which is quite common).
I've come to realiz...Hello,
Everything is described within the title really. For one of my projects, I've elected to use the Class EventShifter (to get eclipse entry & exit with timers for attitude transitions, which is quite common).
I've come to realize that the original class within Orekit does not have a getter for the Event which has been used within the EventShifter 's constructor (EventShifter(_**T detector**_, boolean useShiftedStates, double increasingTimeShift, double decreasingTimeShift)).
Thus, it is impossible, if several Shifters are used within the same propagator, to discriminate them.
ATM I've bypassed this issue by creating a CustomEventShifter class.
For anyone's convienience I've included as an attachment my custom class.
[CustomEventShifterDetector.java](/uploads/5cce1b951e1b0d88f7df83aa84ec9b7d/CustomEventShifterDetector.java)
I feel like a getter should be natively supported by the EventShifter class.https://gitlab.orekit.org/orekit/orekit/-/issues/872Force models events detected twice when calling NumericalPropagator.propagato...2022-01-14T17:20:38ZLuc MaisonobeForce models events detected twice when calling NumericalPropagator.propagator(start, target)When propagation is called on a time range (start, target) in an integration-based propagator,
a first propagation is performed from initial start without user-defined events detection, then
user-defined events detectors and step handler...When propagation is called on a time range (start, target) in an integration-based propagator,
a first propagation is performed from initial start without user-defined events detection, then
user-defined events detectors and step handlers are activated and the second part of the propagation
from start to target is performed.
Events handlers from force models however are necessary throughout and properly activated even in the first
propagation.
The detectors from the force models are added twice to the integrator : once before starting the first propagation
and once before starting the second propagation. This results in events being detected twice and handlers being
called twice.11.1Luc MaisonobeLuc Maisonobehttps://gitlab.orekit.org/orekit/orekit/-/issues/879Add method to clean ephemeris generators from Propagator2022-01-13T15:28:39ZEvan WardAdd method to clean ephemeris generators from PropagatorSee https://forum.orekit.org/t/clear-ephemerisgenerators-from-propagator/1507/2
For numerical propagators there doesn't seem to be a way to clear the `generators` list. This can result in saving multiple copies of the ephemeris when it ...See https://forum.orekit.org/t/clear-ephemerisgenerators-from-propagator/1507/2
For numerical propagators there doesn't seem to be a way to clear the `generators` list. This can result in saving multiple copies of the ephemeris when it is not desired.
Add a `clearEphemerisGenerators()` method or perhaps update `clearStepHandlers()` to also clear the generators.https://gitlab.orekit.org/orekit/orekit/-/issues/874PositionAngleDetector not initialized in ConfigurableLowThrustManeuver2022-01-10T07:35:45ZsbaudierPositionAngleDetector not initialized in ConfigurableLowThrustManeuverAdding a PositionAngleDetector to a ConfigurableLowThrustManeuver as start and stop firing detector leads to a java.lang.NullPointerException error.
The issue had been solved in the Orekit forum by [@bcazabonne](https://forum.orekit.or...Adding a PositionAngleDetector to a ConfigurableLowThrustManeuver as start and stop firing detector leads to a java.lang.NullPointerException error.
The issue had been solved in the Orekit forum by [@bcazabonne](https://forum.orekit.org/t/usage-of-configurablelowthrustmaneuver-with-positionangledetector/1492/2?u=sbaudier):
> The fix to apply in Orekit is straightforward. In the init method of the EventBasedManeuverTriggers class, the following implementation.
> ```
> /** {@inheritDoc} */
> @Override
> public void init(final SpacecraftState initialState, final AbsoluteDate target) {
>
> if (!initialized) {
>
> initialized = true;
> forward = target.isAfterOrEqualTo(initialState);
> if (!forward && !allowBackwardPropagation) {
> // backward propagation was forbidden
> throw new OrekitException(OrekitMessages.BACKWARD_PROPAGATION_NOT_ALLOWED);
> }
>
> checkInitialFiringState(initialState);
>
> } // multiples calls to init : because it is a force model and by each detector
> }
> ```
>
> must be improved by
>
> ```
> /** {@inheritDoc} */
> @Override
> public void init(final SpacecraftState initialState, final AbsoluteDate target) {
>
> if (!initialized) {
>
> initialized = true;
> forward = target.isAfterOrEqualTo(initialState);
> if (!forward && !allowBackwardPropagation) {
> // backward propagation was forbidden
> throw new OrekitException(OrekitMessages.BACKWARD_PROPAGATION_NOT_ALLOWED);
> }
> startFiringDetector.init(initialState, target);
> stopFiringDetector.init(initialState, target);
>
> checkInitialFiringState(initialState);
>
> } // multiples calls to init : because it is a force model and by each detector
> }
> ```11.1Bryan CazabonneBryan Cazabonnehttps://gitlab.orekit.org/orekit/orekit/-/issues/643DecimalFormat not thread safe in DateComponents, TimeComponents2022-01-04T17:18:01ZEvan WardDecimalFormat not thread safe in DateComponents, TimeComponentsCurrently `DateComponents` and `TimeComponents` have static `DecimalFormat` fields that are shared between threads to implement `toString()`. According to the doc for `DecimalFormat`
> "Decimal formats are generally not synchronized. ...Currently `DateComponents` and `TimeComponents` have static `DecimalFormat` fields that are shared between threads to implement `toString()`. According to the doc for `DecimalFormat`
> "Decimal formats are generally not synchronized. It is recommended to create separate format instances for each thread. If multiple threads access a format concurrently, it must be synchronized externally."
I haven't seen any practical impacts and the actual implementation may be thread safe in particular JVMs, but for safety we should use these classes inline with their documentation.https://gitlab.orekit.org/orekit/orekit/-/issues/871Add atmospheric drag effect for Brouwer-Lyddane model2022-01-03T08:47:01ZBryan CazabonneAdd atmospheric drag effect for Brouwer-Lyddane modelThis issue is related to the discussion during the fix of #869. Warren Phipps's 1992 thesis [1] presents an analytical model for the atmospheric drag that is suited for the Brouwer-Lyddane orbit propagator.
Reference [2] highlights the ...This issue is related to the discussion during the fix of #869. Warren Phipps's 1992 thesis [1] presents an analytical model for the atmospheric drag that is suited for the Brouwer-Lyddane orbit propagator.
Reference [2] highlights the benefits of the drag augmented Brouwer-Lyddane orbit propagator for low Earth satellite orbit determination. Therefore, having this new feature could be interesing.
[1] https://apps.dtic.mil/sti/pdfs/ADA256133.pdf
[2] https://calhoun.nps.edu/bitstream/handle/10945/34052/danielson_comparison.pdf?sequence=1&isAllowed=y11.1Bryan CazabonneBryan Cazabonnehttps://gitlab.orekit.org/orekit/orekit/-/issues/866Confusing name for the class implementing sequential least squares2021-12-17T08:36:26ZRomain SerraConfusing name for the class implementing sequential least squaresThe current name of the class SequentialBatchLSEstimator is confusing as this is a sequential least square estimator and not a batch one. Thus the word "Batch" should be removed for clarity.The current name of the class SequentialBatchLSEstimator is confusing as this is a sequential least square estimator and not a batch one. Thus the word "Batch" should be removed for clarity.https://gitlab.orekit.org/orekit/rugged/-/issues/389add a tileupdater implements about Noaa's GLOBE DEM2021-12-11T12:47:20Zyoungcleadd a tileupdater implements about Noaa's GLOBE DEM
add a tileupdater implements about Noaa's GLOBE DEM which is descript in the doc [globedocumentationmanual.pdf](/uploads/2c7a21aeed9d243952ba5a0a4f973064/globedocumentationmanual.pdf)
in a rugged discussion in the forum, master Luc adv...
add a tileupdater implements about Noaa's GLOBE DEM which is descript in the doc [globedocumentationmanual.pdf](/uploads/2c7a21aeed9d243952ba5a0a4f973064/globedocumentationmanual.pdf)
in a rugged discussion in the forum, master Luc advice me to contribute my codes,i would love to have a try.
i have make a fork and i will try to contribute my implements code to rugged.https://gitlab.orekit.org/orekit/orekit/-/issues/867SinexLoader doesn’t handle multiple historical eccentricities for a same station2021-12-08T08:39:01ZClément JonglezSinexLoader doesn’t handle multiple historical eccentricities for a same stationWhen reading the eccentricities file for ILRS stations (https://ilrs.gsfc.nasa.gov/network/site_procedures/eccentricity.html), I realized that Orekit does not support multiple eccentricity entries for a same station.
This is used in ILR...When reading the eccentricities file for ILRS stations (https://ilrs.gsfc.nasa.gov/network/site_procedures/eccentricity.html), I realized that Orekit does not support multiple eccentricity entries for a same station.
This is used in ILRS stations to indicate the historical detector positions in case it was moved or in case a new survey provides a better estimation of the detector position. For instance for the Yarragadee station (7090), there are 18 entries with each a validity time interval, see `ecc_xyz.snx` lines 888 to 905.
Looking at the source code in `SinexLoader.java` from line 232, Orekit's behaviour is the following:
* Set the validity time interval of the `Station` object based on the first entry found for this station (for Yarragadee, it gives `1979-07-01T00:00:00.000Z` to `1983-07-26T23:59:58.000Z`)
* Set the eccentricities based on the last entry found for this station (for Yarragadee, it gives `[-1.2073; 2.5034; -1.5509]`)
A possible fix could be:
* Set the validity time interval of the `Station` object from the start time of the first segment until the end time of the last segment found for this station
* Store all the historical eccentricity data in a `TimeSpanMap`
* Add a method `Station::getEccentricities(AbsoluteDate date)` to return the eccentricity value corresponding to the time input by the user
* To not break existing code, maybe the method `Station::getEccentricities()` could be kept and could return the latest eccentricity value11.1https://gitlab.orekit.org/orekit/orekit/-/issues/870Performance improvement of Taylor-version TLE/SGP4 propagation by changing `F...2021-12-06T18:50:58ZHao PengPerformance improvement of Taylor-version TLE/SGP4 propagation by changing `FastMath.pow` to a naive power for-loop.After some profilings, I found we can increase greatly the speed of Taylor propagation of TLE sets using SGP4 model. This is helpful in a Monte-Carlo simulation like a particle filter.
I didn't test on other numerical Taylor propagators,...After some profilings, I found we can increase greatly the speed of Taylor propagation of TLE sets using SGP4 model. This is helpful in a Monte-Carlo simulation like a particle filter.
I didn't test on other numerical Taylor propagators, but I GUESS the improvement will be similar.
There may also be other operations that can be optimized for integers but I didn't dig into that much.
Modifications are made to `org.hipparchus.analysis.differentiation.DSCompiler#taylor(double[], int, double...)`, I'm not sure if it's proper to submit an issue here since it's mainly related to TLE propagation...
```
* By replacing the `FastMath.pow` calling by a naive power for-loop, we can increase the speed of DSCompiler greatly.
* In my case: 6.14s --> 1.46s
*
* Specific modifications are:
* Modify `org.hipparchus.analysis.differentiation.DSCompiler#taylor(double[], int, double...)`:
* Change this (line 3316 in commit-ea873ba0df8c7a3705f251a27711ac4696aae84b):
* term *= FastMath.pow(delta[k], orders[k]) /
* CombinatoricsUtils.factorial(orders[k]);
* To:
* for (int jj = orders[k]; jj > 0; jj--) term *= delta[k];
* term /= CombinatoricsUtils.factorial(orders[k]);
```
Attached is an example I used to test the performance.
[Work_05_speedup_taylor.java](/uploads/0fe0cd9bd584bbdd5ee69c5804a7b37f/Work_05_speedup_taylor.java)