
Security News
GitHub Actions Supply Chain Attack Puts Thousands of Projects at Risk
A compromised GitHub Action exposed secrets in CI/CD logs, putting thousands of projects at risk and forcing developers to urgently secure their workflows.
Python tools for working with Orbit Ephemeris Messages (OEMs).
The oem
package is available through pip
.
pip install oem
See the full documentation here
The OrbitEphemerisMessage
class is the primary interface for OEM Files.
from oem import OrbitEphemerisMessage
ephemeris = OrbitEphemerisMessage.open("input_file.oem")
Each OEM is made up of one or more segments of state and optional covariance data. The OrbitEphemerisMessage
class provides iterables for both.
for segment in ephemeris:
for state in segment:
print(state.epoch, state.position, state.velocity, state.acceleration)
for covariance in segment.covariances:
print(covariance.epoch, covariance.matrix)
All vectors and matrices are numpy arrays.
It is also possible to retrieve a complete list of states and covariances through the .states
and .covariances
properties. These attributes streamline interaction with single-segment ephemerides.
for state in ephemeris.states:
print(state.epoch, state.position, state.velocity)
for covariance in ephemeris.covariances:
print(covariance.epoch, covariance.matrix)
To sample a state at an arbitrary epoch, simply call the ephemeris with an astropy Time object
epoch = Time("2020-01-01T00:00:00", scale="utc")
sampled_state = ephemeris(epoch)
Note that this type of sampling is only supported if the time system of the target ephemeris is supported by astropy Time objects. The .steps
method of both OrbitEphemerisMessage
and EphemerisSegment
objects enables iterable, equal-time sampling of ephemeris data. The following example samples an OEM at a 60-second interval.
for state in oem.steps(60)
pass
The above example works for both single- and multi-segment OEMs, however the step sizes may vary at the boundary of the segments. To get consistent step sizes with multiple segments, use the segment interface directly.
for segment in oem:
for state in segment.steps(60):
pass
The OrbitEphemerisMessage
facilitates writing of OEMs. To save an already-open OEM, use .save_as
:
ephemeris.save_as("output.oem", file_format="xml")
To convert an ephemeris from one type to another, use the .convert
class method.
OrbitEphemerisMessage.convert("input_file.oem", "output_file.oem", "kvn")
This implementation follows the CCSDS recommended standards for Orbit Data Messages.
[1] Orbit Data Messages, CCSDS 502.0-B-3, 2023. Available: https://public.ccsds.org/Pubs/502x0b3e1.pdf
[2] XML Specification for Navigation Data Messages, CCSDS 505.0-B-3, 2023. Available: https://public.ccsds.org/Pubs/505x0b3.pdf
FAQs
Python Orbit Ephemeris Message (OEM) tools
We found that oem demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
A compromised GitHub Action exposed secrets in CI/CD logs, putting thousands of projects at risk and forcing developers to urgently secure their workflows.
Research
Security News
A malicious Maven package typosquatting a popular library is secretly stealing OAuth credentials on the 15th of each month, putting Java developers at risk.
Security News
Socket and Seal Security collaborate to fix a critical npm overrides bug, resolving a three-year security issue in the JavaScript ecosystem's most popular package manager.