SGP Propagator¶
The SGP4/SDP4 propagator for satellite orbit propagation using Two-Line Element (TLE) data. The SGP (Simplified General Perturbations) propagator implements the SGP4/SDP4 models for propagating satellites using TLE orbital data. This is the standard model used for tracking objects in Earth orbit and is maintained by NORAD/Space Force.
Key Features: - Industry-standard orbit propagation - Atmospheric drag modeling - Automatic selection between SGP4 (near-Earth) and SDP4 (deep-space) models - Compatible with standard TLE format
Module: brahe.orbits
Example Usage¶
Class Reference¶
SGPPropagator ¶
SGP4/SDP4 satellite propagator using TLE data.
The SGP (Simplified General Perturbations) propagator implements the SGP4/SDP4 models for propagating satellites using Two-Line Element (TLE) orbital data. This is the standard model used for tracking objects in Earth orbit.
Note
This class is created via class methods, not direct instantiation. Use SGPPropagator.from_tle() or SGPPropagator.from_elements().
Attributes:
| Name | Type | Description |
|---|---|---|
current_epoch | Epoch | Current propagation time |
initial_epoch | Epoch | TLE epoch |
step_size | float | Current step size in seconds |
norad_id | int | NORAD catalog ID |
satellite_name | str or None | Satellite name if available |
trajectory | OrbitTrajectory | Accumulated trajectory states |
Example
Initialize instance.
arg_perigee property ¶
arg_perigee: float
Get argument of periapsis at TLE epoch.
Returns:
| Name | Type | Description |
|---|---|---|
float | float | Argument of periapsis in degrees. |
Example
current_epoch property ¶
current_epoch: Epoch
eccentricity property ¶
eccentricity: float
Get eccentricity at TLE epoch.
Returns:
| Name | Type | Description |
|---|---|---|
float | float | Eccentricity (dimensionless). |
Example
ephemeris_age property ¶
ephemeris_age: float
Get age of ephemeris data (time since TLE epoch).
Returns:
| Name | Type | Description |
|---|---|---|
float | float | Time since TLE epoch in seconds. |
Example
inclination property ¶
inclination: float
Get inclination at TLE epoch.
Returns:
| Name | Type | Description |
|---|---|---|
float | float | Inclination in degrees. |
Example
line1 property ¶
line1: str
line2 property ¶
line2: str
mean_anomaly property ¶
mean_anomaly: float
Get mean anomaly at TLE epoch.
Returns:
| Name | Type | Description |
|---|---|---|
float | float | Mean anomaly in degrees. |
Example
right_ascension property ¶
right_ascension: float
Get right ascension of ascending node at TLE epoch.
Returns:
| Name | Type | Description |
|---|---|---|
float | float | Right ascension of ascending node (RAAN) in degrees. |
Example
satellite_name property ¶
satellite_name: str
Get satellite name (if available).
Returns:
| Type | Description |
|---|---|
str | str or None: Satellite name if provided. |
Example
semi_major_axis property ¶
semi_major_axis: float
Get semi-major axis at TLE epoch.
Returns:
| Name | Type | Description |
|---|---|---|
float | float | Semi-major axis in meters. |
Example
step_size property ¶
step_size: float
terminated property ¶
terminated: bool
Check if propagation was terminated by an event.
Returns:
| Name | Type | Description |
|---|---|---|
bool | bool | True if propagation was stopped by a terminal event. |
trajectory property ¶
Get accumulated trajectory.
Returns:
| Name | Type | Description |
|---|---|---|
OrbitalTrajectory | SOrbitTrajectory | The accumulated trajectory. |
Example
add_event_detector method descriptor ¶
add_event_detector(event: TimeEvent | AscendingNodeEvent | DescendingNodeEvent | AltitudeEvent | AOIEntryEvent | AOIExitEvent) -> Any
Add an event detector to the propagator.
Supported event types: - TimeEvent: Triggers at a specific epoch - AscendingNodeEvent: Triggers at ascending node crossings - DescendingNodeEvent: Triggers at descending node crossings - AltitudeEvent: Triggers at altitude crossings - And other orbital element events (SemiMajorAxis, Eccentricity, etc.)
Note
Custom ValueEvent and BinaryEvent with Python callbacks are not supported for SGPPropagator. Use NumericalOrbitPropagator for custom event functions.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
event | TimeEvent | AscendingNodeEvent | DescendingNodeEvent | AltitudeEvent | AOIEntryEvent | AOIExitEvent | Event detector to add | required |
Example
current_state method descriptor ¶
current_state() -> ndarray
Get current state vector.
Returns:
| Type | Description |
|---|---|
ndarray | numpy.ndarray: Current state vector in the propagator's output format. |
event_log method descriptor ¶
event_log() -> list[DetectedEvent]
Get all detected events from the event log.
Returns:
| Type | Description |
|---|---|
list[DetectedEvent] | list[DetectedEvent]: List of all detected events. |
events_by_name method descriptor ¶
events_by_name(name: str) -> list[DetectedEvent]
Get events filtered by name.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
name | str | Exact event name to match. | required |
Returns:
| Type | Description |
|---|---|
list[DetectedEvent] | list[DetectedEvent]: Events matching the name. |
events_in_range method descriptor ¶
events_in_range(start: Epoch, end: Epoch) -> list[DetectedEvent]
Get events within a time range.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
start | Epoch | Start of time range. | required |
end | Epoch | End of time range. | required |
Returns:
| Type | Description |
|---|---|
list[DetectedEvent] | list[DetectedEvent]: Events within the range. |
from_3le builtin ¶
from_3le(name: str, line1: str, line2: str, step_size: float = 60.0) -> SGPPropagator
Create a new SGP propagator from 3-line TLE format (with satellite name).
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
name | str | Satellite name (line 0). | required |
line1 | str | First line of TLE data. | required |
line2 | str | Second line of TLE data. | required |
step_size | float | Step size in seconds for propagation. Defaults to 60.0. | 60.0 |
Returns:
| Name | Type | Description |
|---|---|---|
SGPPropagator | SGPPropagator | New SGP propagator instance. |
from_omm_elements builtin ¶
from_omm_elements(epoch: str, mean_motion: float, eccentricity: float, inclination: float, raan: float, arg_of_pericenter: float, mean_anomaly: float, norad_id: int, step_size: float = 60.0, object_name: Union[str, None] = None, object_id: Union[str, None] = None, classification: Union[str, None] = None, bstar: Union[float, None] = None, mean_motion_dot: Union[float, None] = None, mean_motion_ddot: Union[float, None] = None, ephemeris_type: Union[int, None] = None, element_set_no: Union[int, None] = None, rev_at_epoch: Union[int, None] = None) -> SGPPropagator
Create a new SGP propagator from CCSDS OMM (Orbit Mean-elements Message) fields.
This method directly constructs an SGP4 propagator from OMM orbital elements, bypassing TLE parsing. It creates synthetic TLE lines for API consistency.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
epoch | str | ISO 8601 datetime string (e.g., "2025-11-29T20:01:44.058144"). | required |
mean_motion | float | Mean motion in revolutions per day. | required |
eccentricity | float | Orbital eccentricity (dimensionless). | required |
inclination | float | Orbital inclination in degrees. | required |
raan | float | Right ascension of ascending node in degrees. | required |
arg_of_pericenter | float | Argument of pericenter in degrees. | required |
mean_anomaly | float | Mean anomaly in degrees. | required |
norad_id | int | NORAD catalog ID. | required |
step_size | float | Step size in seconds for propagation. Defaults to 60.0. | 60.0 |
object_name | str or None | Satellite name (OBJECT_NAME). Defaults to None. | None |
object_id | str or None | International designator (OBJECT_ID). Defaults to None. | None |
classification | str or None | Classification character ('U', 'C', or 'S'). Defaults to 'U'. | None |
bstar | float or None | B* drag term. Defaults to 0.0. | None |
mean_motion_dot | float or None | First derivative of mean motion / 2. Defaults to 0.0. | None |
mean_motion_ddot | float or None | Second derivative of mean motion / 6. Defaults to 0.0. | None |
ephemeris_type | int or None | Ephemeris type (usually 0). Defaults to 0. | None |
element_set_no | int or None | Element set number. Defaults to 999. | None |
rev_at_epoch | int or None | Revolution number at epoch. Defaults to 0. | None |
Returns:
| Name | Type | Description |
|---|---|---|
SGPPropagator | SGPPropagator | New SGP propagator instance. |
Example
from_tle builtin ¶
from_tle(line1: str, line2: str, step_size: float = 60.0) -> SGPPropagator
Create a new SGP propagator from TLE lines.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
line1 | str | First line of TLE data. | required |
line2 | str | Second line of TLE data. | required |
step_size | float | Step size in seconds for propagation. Defaults to 60.0. | 60.0 |
Returns:
| Name | Type | Description |
|---|---|---|
SGPPropagator | SGPPropagator | New SGP propagator instance. |
generate_uuid method descriptor ¶
generate_uuid() -> Any
Generate a new UUID and set it in-place (mutating).
get_elements method descriptor ¶
get_elements(angle_format: AngleFormat) -> ndarray
Get Keplerian orbital elements from TLE data.
Extracts the Keplerian elements directly from the TLE lines used to initialize this propagator.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
angle_format | AngleFormat | Format for angular elements (DEGREES or RADIANS). | required |
Returns:
| Type | Description |
|---|---|
ndarray | numpy.ndarray: Keplerian elements [a, e, i, Ω, ω, M] where: - a: semi-major axis [m] - e: eccentricity [dimensionless] - i: inclination [rad or deg] - Ω: right ascension of ascending node [rad or deg] - ω: argument of periapsis [rad or deg] - M: mean anomaly [rad or deg] |
Example
get_id method descriptor ¶
get_id() -> int
Get the current numeric ID.
Returns:
| Type | Description |
|---|---|
int | int or None: The numeric ID, or None if not set. |
get_name method descriptor ¶
get_name() -> str
get_uuid method descriptor ¶
get_uuid() -> str
Get the current UUID.
Returns:
| Type | Description |
|---|---|
str | str or None: The UUID as a string, or None if not set. |
initial_state method descriptor ¶
initial_state() -> ndarray
Get initial state vector.
Returns:
| Type | Description |
|---|---|
ndarray | numpy.ndarray: Initial state vector in the propagator's output format. |
latest_event method descriptor ¶
latest_event() -> DetectedEvent
Get the most recent detected event.
Returns:
| Type | Description |
|---|---|
DetectedEvent | DetectedEvent or None: Most recent event, or None if no events. |
propagate_steps method descriptor ¶
Propagate forward by specified number of steps.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
num_steps | int | Number of steps to take. | required |
Example
propagate_to method descriptor ¶
Propagate to a specific target epoch.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
target_epoch | Epoch | The epoch to propagate to. | required |
Example
reset method descriptor ¶
reset() -> Any
Reset propagator to initial conditions.
Example
reset_termination method descriptor ¶
reset_termination() -> Any
Reset the termination flag.
Call this to allow propagation to continue after a terminal event.
set_eviction_policy_max_age method descriptor ¶
Set trajectory eviction policy based on maximum age.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
max_age | float | Maximum age in seconds to keep states in trajectory. | required |
Example
set_eviction_policy_max_size method descriptor ¶
Set trajectory eviction policy based on maximum size.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
max_size | int | Maximum number of states to keep in trajectory. | required |
Example
set_id method descriptor ¶
Set the numeric ID in-place (mutating).
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
id | int or None | Numeric ID to assign, or None to clear. | required |
set_identity method descriptor ¶
set_name method descriptor ¶
Set the name in-place (mutating).
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
name | str or None | Name to assign, or None to clear. | required |
set_output_format method descriptor ¶
set_output_format(frame: OrbitFrame, representation: OrbitRepresentation, angle_format: Union[AngleFormat, None]) -> Any
Set output format (frame, representation, and angle format).
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
frame | OrbitFrame | Output frame (ECI or ECEF). | required |
representation | OrbitRepresentation | Output representation (Cartesian or Keplerian). | required |
angle_format | AngleFormat or None | Angle format for Keplerian (None for Cartesian). | required |
set_step_size method descriptor ¶
Set step size in seconds (explicit method).
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
new_step_size | float | New step size in seconds. | required |
Example
state method descriptor ¶
state_ecef method descriptor ¶
state_eci method descriptor ¶
state_eme2000 method descriptor ¶
state_gcrf method descriptor ¶
state_itrf method descriptor ¶
state_koe_mean method descriptor ¶
state_koe_mean(epoch: Epoch, angle_format: AngleFormat) -> ndarray
Compute state as mean Keplerian elements at the given epoch.
Mean elements are orbit-averaged elements that remove short-period and long-period J2 perturbations using first-order Brouwer-Lyddane theory.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
epoch | Epoch | Epoch for state computation. | required |
angle_format | AngleFormat | If AngleFormat.DEGREES, angular elements are returned in degrees, otherwise in radians. | required |
Returns:
| Type | Description |
|---|---|
ndarray | numpy.ndarray: Mean Keplerian elements [a, e, i, raan, argp, mean_anomaly]. |
Example
state_koe_osc method descriptor ¶
state_koe_osc(epoch: Epoch, angle_format: AngleFormat) -> ndarray
Compute state as osculating elements at a specific epoch.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
epoch | Epoch | Target epoch for state computation. | required |
angle_format | AngleFormat | If AngleFormat.DEGREES, angular elements are returned in degrees, otherwise in radians. | required |
Returns:
| Type | Description |
|---|---|
ndarray | numpy.ndarray: Osculating elements [a, e, i, raan, argp, mean_anomaly]. |
Example
state_pef method descriptor ¶
states method descriptor ¶
states_eci method descriptor ¶
states_gcrf method descriptor ¶
states_itrf method descriptor ¶
states_koe_mean method descriptor ¶
states_koe_mean(epochs: list[Epoch], angle_format: AngleFormat) -> List
Compute states as mean Keplerian elements at multiple epochs.
Mean elements are orbit-averaged elements that remove short-period and long-period J2 perturbations using first-order Brouwer-Lyddane theory.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
epochs | list[Epoch] | List of epochs for state computation. | required |
angle_format | AngleFormat | If AngleFormat.DEGREES, angular elements are returned in degrees, otherwise in radians. | required |
Returns:
| Type | Description |
|---|---|
List | list[numpy.ndarray]: List of mean Keplerian element vectors [a, e, i, raan, argp, mean_anomaly]. |
Example
states_koe_osc method descriptor ¶
states_koe_osc(epochs: list[Epoch], angle_format: AngleFormat) -> List
Compute states as osculating elements at multiple epochs.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
epochs | list[Epoch] | List of epochs for state computation. | required |
angle_format | AngleFormat | If AngleFormat.DEGREES, angular elements are returned in degrees, otherwise in radians. | required |
Returns:
| Type | Description |
|---|---|
List | list[numpy.ndarray]: List of osculating element vectors [a, e, i, raan, argp, mean_anomaly]. |
Example
step method descriptor ¶
step() -> Any
Step forward by the default step size.
Example
step_by method descriptor ¶
Step forward by a specified time duration.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
step_size | float | Time step in seconds. | required |
Example
step_past method descriptor ¶
Step past a specified target epoch.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
target_epoch | Epoch | The epoch to step past. | required |
Example
with_id method descriptor ¶
with_id(id: int) -> SGPPropagator
Set the numeric ID and return self (consuming constructor pattern).
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
id | int | Numeric ID to assign to this propagator. | required |
Returns:
| Name | Type | Description |
|---|---|---|
SGPPropagator | SGPPropagator | Self with ID set. |
with_identity method descriptor ¶
with_identity(name: Union[str, None], uuid_str: Union[str, None], id: Union[int, None]) -> SGPPropagator
Set all identity fields at once and return self (consuming constructor pattern).
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
name | str or None | Optional name to assign. | required |
uuid_str | str or None | Optional UUID string to assign. | required |
id | int or None | Optional numeric ID to assign. | required |
Returns:
| Name | Type | Description |
|---|---|---|
SGPPropagator | SGPPropagator | Self with identity set. |
Example
with_name method descriptor ¶
with_name(name: str) -> SGPPropagator
Set the name and return self (consuming constructor pattern).
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
name | str | Name to assign to this propagator. | required |
Returns:
| Name | Type | Description |
|---|---|---|
SGPPropagator | SGPPropagator | Self with name set. |
with_new_uuid method descriptor ¶
with_new_uuid() -> SGPPropagator
Generate a new UUID, set it, and return self (consuming constructor pattern).
Returns:
| Name | Type | Description |
|---|---|---|
SGPPropagator | SGPPropagator | Self with new UUID set. |
with_uuid method descriptor ¶
with_uuid(uuid_str: str) -> SGPPropagator
Set the UUID and return self (consuming constructor pattern).
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
uuid_str | str | UUID string to assign to this propagator. | required |
Returns:
| Name | Type | Description |
|---|---|---|
SGPPropagator | SGPPropagator | Self with UUID set. |
See Also¶
- KeplerianPropagator - Analytical two-body propagator
- TLE - Two-Line Element format details
- Keplerian Elements - Orbital element functions