Elements
elements
ARBounds
Bounds that define which (ρ, ρ̇) pairs are admissible.
An admissible region is the subset of the topocentric
(range, range-rate) plane consistent with a closed Earth orbit.
Without additional constraints the closed-orbit condition energy < 0
alone admits a band that stretches from impactors to escape; ARBounds
narrows it to the physically interesting subset by clipping perigee
altitude, apogee altitude, and eccentricity.
The defaults — perigee ≥ 150 km, apogee ≤ 50 000 km, eccentricity ≤ 0.99 — cover the LEO through HEO regimes without admitting near-impactor or hyperbolic-escape trajectories.
Attributes:
| Name | Type | Description |
|---|---|---|
perigee_altitude_min_km |
float
|
Minimum admissible perigee altitude above the WGS-84 equator [km; ≥ 0]. |
apogee_altitude_max_km |
float
|
Maximum admissible apogee altitude
above the WGS-84 equator [km; ≥ |
eccentricity_max |
float
|
Maximum admissible eccentricity [dimensionless; 0..1). |
apogee_altitude_max_km
property
Maximum admissible apogee altitude above the WGS-84 equator [km].
eccentricity_max
property
Maximum admissible eccentricity [dimensionless; 0..1).
perigee_altitude_min_km
property
Minimum admissible perigee altitude above the WGS-84 equator [km; ≥ 0].
__init__(perigee_altitude_min_km, apogee_altitude_max_km, eccentricity_max)
Creates an ARBounds with explicit altitude and eccentricity limits.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
perigee_altitude_min_km
|
float
|
Minimum admissible perigee altitude [km; ≥ 0]. |
required |
apogee_altitude_max_km
|
float
|
Maximum admissible apogee altitude
[km; ≥ |
required |
eccentricity_max
|
float
|
Maximum admissible eccentricity [dimensionless; 0..1). |
required |
__repr__()
Returns ARBounds(perigee_altitude_min_km=…, apogee_altitude_max_km=…, eccentricity_max=…).
default()
staticmethod
Returns the default ARBounds.
Defaults: perigee ≥ 150 km, apogee ≤ 50 000 km, eccentricity ≤ 0.99.
Returns:
| Type | Description |
|---|---|
ARBounds
|
Default bounds. |
AdmissibleRegion
Sampled admissible region for an angles-only
TrackletFit.
Each particle is a (ρ, ρ̇, weight) triple in the topocentric
range / range-rate plane. Together with the parent tracklet's right
ascension, declination, and rates at the same epoch, a particle promotes
to a full 6-D inertial state; the
HypothesisCloud produced by the
hypothesis-generation stage carries the promoted states (with covariance)
rather than the raw particles.
Attributes:
| Name | Type | Description |
|---|---|---|
fit_epoch |
ModifiedJulianDate
|
Epoch of the parent
|
bounds |
ARBounds
|
Bounds that defined which particles were retained from the raw sample. |
particles |
list[tuple[float, float, float]]
|
Particles in
|
bounds
property
Bounds that defined which particles were retained from the raw sample.
fit_epoch
property
Epoch of the parent tracklet fit; every particle is interpreted at this epoch.
particles
property
Particles in (range_km, range_rate_km_per_s, weight) form.
__init__(fit_epoch, bounds, particles)
Creates a new AdmissibleRegion.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
fit_epoch
|
ModifiedJulianDate
|
Epoch of the parent tracklet fit. |
required |
bounds
|
ARBounds
|
Bounds applied during sampling. |
required |
particles
|
list[tuple[float, float, float]]
|
|
required |
__len__()
Number of particles in the sampled region.
__repr__()
Returns AdmissibleRegion(fit_epoch=…, n_particles=…).
is_empty()
True when the sampled region contains no particles.
AdvancedStateBundle
Multi-representation snapshot of a satellite state at a single epoch.
Bundles four representations of the same satellite state — the osculating
Cartesian state, the osculating Keplerian elements, a MeanKozaiGP TLE
(SGP4), and a MeanBrouwerXP TLE (SGP4-XP) — produced atomically from a
single propagated arc. Top-level drag_coefficient and
srp_coefficient scalars are passthroughs of the source satellite's
properties.
Both TLEs are intrinsically in the TEME frame regardless of
reference_frame; reference_frame describes only the Cartesian and
osculating Keplerian fields.
Attributes:
| Name | Type | Description |
|---|---|---|
epoch |
ModifiedJulianDate
|
Common epoch of the osculating snapshot. |
reference_frame |
ReferenceFrame
|
Frame of |
cartesian_state |
CartesianState
|
Osculating position and velocity at
|
osculating_keplerian |
KeplerianState
|
Classical Keplerian elements at
|
mean_kozai_gp |
TLE
|
SGP4 TLE in |
mean_brouwer_xp |
TLE
|
SGP4-XP TLE in |
drag_coefficient |
float
|
Drag coefficient from the source satellite's properties. Nominally dimensionless Cd; see note below. |
srp_coefficient |
float
|
SRP coefficient from the source satellite's properties. Nominally dimensionless Cr; same note. |
Note
The keplime Satellite.properties.drag_coefficient field is populated
by different code paths with different unit conventions: TLE parsing
assigns the AFSPC b_term (1/earth-radii) directly into the field,
while physical-input construction stores the dimensionless Cd. The
same applies to srp_coefficient. Consumers who need an unambiguous
drag/SRP scalar should prefer mean_kozai_gp.b_star (classical SGP4
B*), mean_kozai_gp.force_terms.b_term (AFSPC drag term in
1/earth-radii), or mean_brouwer_xp.force_terms.agom (Cr · A / m in
m²/kg). Those are produced by Satellite.to_tle's internal chain and
have well-defined units regardless of how the input satellite was
constructed.
cartesian_state
property
Osculating Cartesian state at epoch [km, km/s].
drag_coefficient
property
Drag coefficient from the source satellite's properties.
Nominally dimensionless Cd; see the class-level units note.
epoch
property
Common epoch of the osculating snapshot.
mean_brouwer_xp
property
Fitted MeanBrouwerXP TLE (SGP4-XP), always in TEME.
mean_kozai_gp
property
Fitted MeanKozaiGP TLE (SGP4), always in TEME.
osculating_keplerian
property
Osculating classical Keplerian elements at epoch.
reference_frame
property
Reference frame of cartesian_state and osculating_keplerian.
Mean TLEs are always TEME regardless of this value.
srp_coefficient
property
SRP coefficient from the source satellite's properties.
Nominally dimensionless Cr; see the class-level units note.
BoreToBodyAngles
Angular separations from a boresight direction to Earth, Sun, and Moon.
Attributes:
| Name | Type | Description |
|---|---|---|
earth_angle |
float
|
Angle from boresight to Earth center [rad; 0..π]. |
sun_angle |
float
|
Angle from boresight to Sun center [rad; 0..π]. |
moon_angle |
float
|
Angle from boresight to Moon center [rad; 0..π]. |
earth_angle
property
Angle from boresight to Earth center [rad; 0..π].
moon_angle
property
Angle from boresight to Moon center [rad; 0..π].
sun_angle
property
Angle from boresight to Sun center [rad; 0..π].
__init__(earth_angle, sun_angle, moon_angle)
Creates BoreToBodyAngles from explicit angle values.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
earth_angle
|
float
|
Angle from boresight to Earth center [rad; 0..π]. |
required |
sun_angle
|
float
|
Angle from boresight to Sun center [rad; 0..π]. |
required |
moon_angle
|
float
|
Angle from boresight to Moon center [rad; 0..π]. |
required |
__repr__()
Returns BoreToBodyAngles(earth_angle=…, sun_angle=…, moon_angle=…).
CartesianState
Cartesian state vector (position and optional velocity) at an epoch.
All vector components are expressed in the associated reference frame.
Attributes:
| Name | Type | Description |
|---|---|---|
epoch |
ModifiedJulianDate
|
Epoch of the state. |
reference_frame |
ReferenceFrame
|
Frame of the position and velocity. |
position |
CartesianVector
|
Position [km]. |
velocity |
Optional[CartesianVector]
|
Velocity [km/s], or |
epoch
property
Epoch of the state.
position
property
Position vector [km].
reference_frame
property
Reference frame of position and velocity.
velocity
property
Velocity vector [km/s], or None for position-only states.
__init__(epoch, reference_frame, position, velocity)
Creates a CartesianState.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
epoch
|
ModifiedJulianDate
|
Epoch of the state. |
required |
reference_frame
|
ReferenceFrame
|
Frame for position and velocity. |
required |
position
|
CartesianVector
|
Position vector [km]. |
required |
velocity
|
Optional[CartesianVector]
|
Velocity vector [km/s], or |
required |
__repr__()
Returns CartesianState(epoch=…, reference_frame=…, position=(…, …, …), velocity=…).
__str__()
Returns the same representation as __repr__.
relative_to(origin_state, frame)
Computes this state relative to origin_state.
Both states must share the same epoch and reference frame.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
origin_state
|
CartesianState
|
Origin (chief / reference) state. |
required |
frame
|
RelativeFrame
|
Inertial or RIC (Radial–In-track–Cross-track) output frame. |
required |
Returns:
| Type | Description |
|---|---|
CartesianState
|
Relative state [position in km, velocity in km/s]. |
Raises:
| Type | Description |
|---|---|
ValueError
|
If epochs differ, frames differ, or either state lacks velocity. |
to_cartesian_vector()
Returns the position as a CartesianVector.
Returns:
| Type | Description |
|---|---|
CartesianVector
|
Position vector [km]. |
to_keplerian(mu)
Converts this Cartesian state to classical Keplerian elements.
Applies the standard rv2coe (r-v to classical elements) algorithm. Only elliptic orbits are supported.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
mu
|
float
|
Gravitational parameter of the central body [km³/s²]. Use 398600.4418 for WGS84 Earth, or 398600.8 for WGS72. |
required |
Returns:
| Type | Description |
|---|---|
KeplerianElements
|
KeplerianElements with semi_major_axis [km], eccentricity, |
KeplerianElements
|
inclination [rad], ascending_node [rad], |
KeplerianElements
|
argument_of_periapsis [rad], and mean_anomaly [rad]. |
Raises:
| Type | Description |
|---|---|
ValueError
|
If this state has no velocity, position is at the origin, angular momentum is zero, or the orbit is non-elliptic (energy ≥ 0). |
to_reference_frame(target, priority)
Converts this state to a different reference frame.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
target
|
ReferenceFrame
|
Destination reference frame. |
required |
priority
|
PerformancePriority
|
Trade-off between speed and numerical precision. |
required |
Returns:
| Type | Description |
|---|---|
CartesianState
|
New state in |
Raises:
| Type | Description |
|---|---|
ValueError
|
If the frame transformation is not supported. |
CartesianVector
A three-component Cartesian vector.
Components may represent position [km], velocity [km/s], or a dimensionless direction depending on context.
Attributes:
| Name | Type | Description |
|---|---|---|
x |
float
|
X component [km, km/s, or dimensionless]. |
y |
float
|
Y component [same units as x]. |
z |
float
|
Z component [same units as x]. |
magnitude |
float
|
Euclidean norm [same units as components]. |
magnitude
property
Euclidean norm of the vector [same units as components].
x
property
X component [km, km/s, or dimensionless depending on context].
y
property
Y component [same units as x].
z
property
Z component [same units as x].
__add__(other)
Returns the component-wise sum self + other [same units].
__getitem__(index)
Returns a component by index (0=x, 1=y, 2=z; negative
indices supported).
Raises:
| Type | Description |
|---|---|
IndexError
|
If |
__init__(x, y, z)
Creates a CartesianVector from explicit component values.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
x
|
float
|
X component [km, km/s, or dimensionless depending on context]. |
required |
y
|
float
|
Y component [same units as x]. |
required |
z
|
float
|
Z component [same units as x]. |
required |
__iter__()
Iterates over the components as (x, y, z) [same units].
__len__()
Returns the component count (always 3).
__neg__()
Returns the component-wise negation -self.
__repr__()
Returns CartesianVector(x=…, y=…, z=…).
__str__()
Returns the same representation as __repr__.
__sub__(other)
Returns the component-wise difference self - other [same units].
as_tuple()
Returns the components as an (x, y, z) tuple.
Returns:
| Type | Description |
|---|---|
Vector3
|
|
distance(other)
Returns the Euclidean distance between this vector and another.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
other
|
CartesianVector
|
The other vector [same units]. |
required |
Returns:
| Type | Description |
|---|---|
float
|
Distance [same units as components]. |
get_angle(other)
Returns the angle between this vector and another.
Uses arccos(a · b / (‖a‖ ‖b‖)). Undefined for zero-magnitude vectors.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
other
|
CartesianVector
|
The other vector. |
required |
Returns:
| Type | Description |
|---|---|
float
|
Angle between the two vectors [rad; 0..π]. |
in_earth_shadow(sun_position)
Returns whether this position lies inside Earth's cylindrical shadow.
self is treated as a body position relative to Earth's center,
and sun_position as the Sun position in the same frame and
units [km]. Cylindrical model only — no penumbra, no flattening.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
sun_position
|
CartesianVector
|
Sun position in the same frame as |
required |
Returns:
| Type | Description |
|---|---|
bool
|
|
bool
|
|
bool
|
zero vector or non-finite. |
CorrelatedTrackletSet
A set of tracklets the correlation stage has identified as likely sharing the same underlying object.
Correlation produces these sets by gating propagated
HypothesisClouds against each other
and keeping the surviving tracklet groupings. The set is the input to the
initial-orbit-determination stage, which fits one state from the union of
the member tracklets' observations.
Attributes:
| Name | Type | Description |
|---|---|---|
tracklet_indices |
list[int]
|
Indices into the pipeline's tracklet vector. Each index identifies a member tracklet of the set. |
score |
float
|
Correlation score that drove the grouping decision [dimensionless; 0..1, higher is more confident]. |
score
property
Correlation score that drove the grouping decision [dimensionless; 0..1].
tracklet_indices
property
Indices into the pipeline's tracklet vector identifying member tracklets.
__init__(tracklet_indices, score)
Creates a new CorrelatedTrackletSet.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
tracklet_indices
|
list[int]
|
Indices of member tracklets in the pipeline's tracklet vector. |
required |
score
|
float
|
Correlation score [dimensionless; 0..1]. |
required |
__len__()
Number of member tracklets in the set.
__repr__()
Returns CorrelatedTrackletSet(n_tracklets=…, score=…).
is_empty()
True when the set has no member tracklets.
Ephemeris
A time-ordered collection of Cartesian states for a single object.
Attributes:
| Name | Type | Description |
|---|---|---|
satellite_id |
str
|
Identifier of the satellite. |
norad_id |
int
|
NORAD catalog number (0 if not set). |
number_of_states |
int
|
Number of states stored. |
norad_id
property
NORAD catalog number (0 if not set).
number_of_states
property
Number of states stored in this ephemeris.
satellite_id
property
Identifier of the satellite.
__init__(satellite_id, state, norad_id=...)
Creates an Ephemeris with a single initial state.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
satellite_id
|
str
|
Identifier of the satellite. |
required |
state
|
CartesianState
|
Initial Cartesian state. |
required |
norad_id
|
Optional[int]
|
NORAD catalog number (optional). |
...
|
add_state(state)
Appends a state to the ephemeris.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
state
|
CartesianState
|
Cartesian state to append. |
required |
covers_epoch(epoch)
Returns whether epoch falls within the ephemeris coverage.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
epoch
|
ModifiedJulianDate
|
Epoch to test. |
required |
Returns:
| Type | Description |
|---|---|
bool
|
|
covers_range(start, end)
Returns whether the ephemeris fully covers [start, end].
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
start
|
ModifiedJulianDate
|
Start of the desired range. |
required |
end
|
ModifiedJulianDate
|
End of the desired range. |
required |
Returns:
| Type | Description |
|---|---|
bool
|
|
get_epoch_range()
Returns the epoch range covered by this ephemeris.
Returns:
| Type | Description |
|---|---|
Optional[tuple[ModifiedJulianDate, ModifiedJulianDate]]
|
|
get_horizon_sensor_access(bore, target, constraints)
Reports access windows from this ephemeris (the sensor host) to a target ephemeris using a boresight fixed in the host's local horizon frame (Az/El).
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
bore
|
HorizonElements
|
Boresight as |
required |
target
|
Ephemeris
|
Body whose access is being reported. |
required |
constraints
|
SensorConstraints
|
|
required |
Returns:
| Type | Description |
|---|---|
SensorAccessReport
|
A |
SensorAccessReport
|
intersection of observer/target coverage. |
Raises:
| Type | Description |
|---|---|
ValueError
|
If either ephemeris has no epoch range. |
get_inertial_sensor_access(bore, target, constraints)
Reports access windows from this ephemeris (the sensor host) to a target ephemeris using a constant inertial boresight (RA/Dec).
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
bore
|
TopocentricElements
|
Boresight as |
required |
target
|
Ephemeris
|
Body whose access is being reported. |
required |
constraints
|
SensorConstraints
|
|
required |
Returns:
| Type | Description |
|---|---|
SensorAccessReport
|
A |
SensorAccessReport
|
intersection of observer/target coverage. |
Raises:
| Type | Description |
|---|---|
ValueError
|
If |
get_state_at_epoch(epoch)
Interpolates the state at the given epoch.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
epoch
|
ModifiedJulianDate
|
Desired epoch. |
required |
Returns:
| Type | Description |
|---|---|
Optional[CartesianState]
|
Interpolated state [position in km, velocity in km/s], or |
Optional[CartesianState]
|
if |
get_target_sensor_access(primary_target, secondary_target, constraints)
Reports access windows from this ephemeris (the sensor host) to
secondary_target while the host points at primary_target.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
primary_target
|
Ephemeris
|
Body the boresight tracks. |
required |
secondary_target
|
Ephemeris
|
Body whose access is being reported. |
required |
constraints
|
SensorConstraints
|
|
required |
Returns:
| Type | Description |
|---|---|
SensorAccessReport
|
A |
SensorAccessReport
|
intersection of observer/ |
Raises:
| Type | Description |
|---|---|
ValueError
|
If observer or |
stitch(other)
Joins this arc with another at their minimum-separation crossover.
Both arcs are treated as overlapping trajectories of the same object
(for example two element sets propagated across the span between their
epochs). The arc that starts earlier supplies the pre-crossover states
and the later arc the post-crossover states, so a.stitch(b) and
b.stitch(a) return the same result.
The crossover epoch is the instant within the temporal overlap at which
the two trajectories are closest in position. The overlap is scanned at
the union of both arcs' knot epochs (interpolating where a knot is
absent), so no shared cadence or grid alignment is assumed. The join is
a hard cut that preserves the original states: the earlier arc's states
up to and including the crossover are concatenated with the later arc's
states after it. The seam carries the small position discontinuity
equal to the minimum separation and is generally non-uniform; resample
the result with get_state_at_epoch
on a uniform set of epochs when a strictly-uniform grid is required.
Stitch more than two arcs by sorting them by epoch and folding this
method left-to-right.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
other
|
Ephemeris
|
Another overlapping arc of the same object. |
required |
Returns:
| Type | Description |
|---|---|
Ephemeris
|
A new ephemeris spanning |
Ephemeris
|
minimum-separation epoch, inheriting the earlier arc's |
Ephemeris
|
|
Raises:
| Type | Description |
|---|---|
ValueError
|
If either arc is empty or the two arcs do not overlap in time. |
EquinoctialElements
Singularity-free equinoctial orbital elements.
Equinoctial elements avoid the coordinate singularities present in
classical Keplerian elements at zero inclination and zero eccentricity.
Defined from the Keplerian set (a, e, i, Ω, ω, M) as:
af = e cos(Ω + ω)ag = e sin(Ω + ω)chi = tan(i/2) sin(Ω)psi = tan(i/2) cos(Ω)mean_longitude = Ω + ω + M
Warning
The chi and psi components contain a factor of tan(i/2)
which diverges as i → π. Retrograde-equatorial orbits (i = π)
are undefined in this parameterisation.
Attributes:
| Name | Type | Description |
|---|---|---|
semi_major_axis |
float
|
Semi-major axis [km; > 0]. |
af |
float
|
Eccentricity vector cosine component [dimensionless]. |
ag |
float
|
Eccentricity vector sine component [dimensionless]. |
chi |
float
|
Inclination vector sine component [dimensionless; diverges at i = π]. |
psi |
float
|
Inclination vector cosine component [dimensionless; diverges at i = π]. |
mean_longitude |
float
|
Mean longitude Ω + ω + M [rad; 0..2π). |
af
property
Eccentricity vector cosine component e cos(Ω + ω) [dimensionless].
ag
property
Eccentricity vector sine component e sin(Ω + ω) [dimensionless].
chi
property
Inclination vector sine component tan(i/2) sin(Ω) [dimensionless; diverges at i = π].
mean_longitude
property
Mean longitude Ω + ω + M [rad; 0..2π).
psi
property
Inclination vector cosine component tan(i/2) cos(Ω) [dimensionless; diverges at i = π].
semi_major_axis
property
Semi-major axis [km; > 0].
__init__(semi_major_axis, af, ag, chi, psi, mean_longitude)
Creates equinoctial orbital elements from the six element components.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
semi_major_axis
|
float
|
Semi-major axis [km; > 0]. |
required |
af
|
float
|
Eccentricity vector cosine component, |
required |
ag
|
float
|
Eccentricity vector sine component, |
required |
chi
|
float
|
Inclination vector sine component, |
required |
psi
|
float
|
Inclination vector cosine component, |
required |
mean_longitude
|
float
|
Mean longitude |
required |
Returns:
| Type | Description |
|---|---|
None
|
EquinoctialElements with the given components. |
to_cartesian(epoch, frame, mu)
Converts these equinoctial elements to a Cartesian state vector.
Delegates to
KeplerianElements.to_cartesian
by first converting via
to_keplerian.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
epoch
|
ModifiedJulianDate
|
Epoch of the output state vector. |
required |
frame
|
ReferenceFrame
|
Reference frame for the output state. |
required |
mu
|
float
|
Gravitational parameter of the central body [km³/s²]. |
required |
Returns:
| Type | Description |
|---|---|
CartesianState
|
Cartesian state with position [km] and velocity [km/s] at the |
CartesianState
|
given epoch in the specified frame. |
Raises:
| Type | Description |
|---|---|
ValueError
|
If the underlying Keplerian solver fails (e.g.
|
to_keplerian()
Converts these equinoctial elements to classical Keplerian elements.
Recovers (e, i, Ω, ω, M) from the equinoctial vector components via
inverse trigonometric identities and wraps each angle into its canonical
range.
Returns:
| Type | Description |
|---|---|
KeplerianElements
|
Equivalent classical Keplerian elements. |
EquinoctialState
Equinoctial orbital state at an epoch.
Bundles a set of EquinoctialElements
with the epoch and the central body's gravitational parameter so that
derived quantities such as mean motion can be computed without additional
context.
Attributes:
| Name | Type | Description |
|---|---|---|
epoch |
ModifiedJulianDate
|
Epoch of the state. |
elements |
EquinoctialElements
|
Equinoctial orbital elements at |
mu |
float
|
Gravitational parameter of the central body [km³/s²]. |
mean_motion |
float
|
Mean motion derived from the semi-major axis [rev/day]. |
elements
property
Equinoctial orbital elements at the epoch.
epoch
property
Epoch of the state.
mean_motion
property
Mean motion derived from the semi-major axis [rev/day].
Computed as n = √(μ/a³) and converted to revolutions per day.
Returns:
| Type | Description |
|---|---|
float
|
Mean motion [rev/day]. |
Raises:
| Type | Description |
|---|---|
ValueError
|
If |
mu
property
Gravitational parameter of the central body [km³/s²].
__init__(epoch, elements, mu)
Creates an equinoctial orbital state from its components.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
epoch
|
ModifiedJulianDate
|
Epoch at which the elements are valid. |
required |
elements
|
EquinoctialElements
|
Equinoctial orbital elements. |
required |
mu
|
float
|
Gravitational parameter of the central body [km³/s²]. |
required |
GeodeticGrid
Builders for regular latitude/longitude meshes of candidate sites.
Produces lists of GeodeticPosition
for sensor-coverage heatmaps. Every generated site sits at altitude 0
(on the WGS-84 ellipsoid), so the search space is two-dimensional. The
returned list is row-major (latitude south to north, longitude west to
east) and pairs 1:1 with the scores of a
CoverageGrid built from it. All angles
are in degrees.
This class is a stateless namespace and is never instantiated.
global_grid(step_deg)
staticmethod
Builds a whole-Earth lat/lon mesh at altitude 0.
Latitude spans -90..90 inclusive; longitude spans -180..180
with 180 excluded so the antimeridian is not duplicated.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
step_deg
|
float
|
Grid spacing [deg; > 0]. |
required |
Returns:
| Type | Description |
|---|---|
list[GeodeticPosition]
|
list[GeodeticPosition]: Candidate sites covering the globe at altitude 0. |
Raises:
| Type | Description |
|---|---|
ValueError
|
If |
global_land(step_deg)
staticmethod
Like global_grid but keeps only sites on land.
The whole-Earth mesh with ocean cells removed via the embedded land mask.
See regular_land for the
resolution caveat and the 1:1 pairing requirement.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
step_deg
|
float
|
Grid spacing [deg; > 0]. |
required |
Returns:
| Type | Description |
|---|---|
list[GeodeticPosition]
|
list[GeodeticPosition]: The land-only subset of
|
Raises:
| Type | Description |
|---|---|
ValueError
|
If |
is_land(latitude, longitude)
staticmethod
Returns whether a geodetic location lies on land.
Looks up the point in the embedded ~0.25 deg Natural Earth land mask.
Longitude is wrapped into [-180, 180) and latitude clamped to
[-90, 90], so any finite input is valid; near-shore results are
approximate at the raster resolution.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
latitude
|
float
|
Geodetic latitude [deg; -90..90]. |
required |
longitude
|
float
|
Geodetic longitude [deg; -180..180]. |
required |
Returns:
| Name | Type | Description |
|---|---|---|
bool |
bool
|
|
regular(latitude_min, latitude_max, longitude_min, longitude_max, step_deg)
staticmethod
Builds a regular lat/lon mesh over a bounding box at altitude 0.
Endpoints are inclusive: a sweep from -10 to 10 at
step_deg = 5 yields latitudes -10, -5, 0, 5, 10.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
latitude_min
|
float
|
Southern bound [deg; -90..90]. |
required |
latitude_max
|
float
|
Northern bound [deg; -90..90], >= latitude_min. |
required |
longitude_min
|
float
|
Western bound [deg; -180..180]. |
required |
longitude_max
|
float
|
Eastern bound [deg; -180..180], >= longitude_min. |
required |
step_deg
|
float
|
Grid spacing [deg; > 0]. |
required |
Returns:
| Type | Description |
|---|---|
list[GeodeticPosition]
|
list[GeodeticPosition]: Row-major candidate sites at altitude 0. |
Raises:
| Type | Description |
|---|---|
ValueError
|
If |
regular_land(latitude_min, latitude_max, longitude_min, longitude_max, step_deg)
staticmethod
Like regular but keeps only sites on land.
Drops every site whose cell is ocean per the embedded Natural Earth land
mask (~0.25 deg, so near-shore classification is approximate). The result
is no longer a dense rectangle and pairs 1:1 only with a
CoverageGrid built from this same list.
Use it to restrict candidate sites to land a ground sensor could stand on.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
latitude_min
|
float
|
Southern bound [deg; -90..90]. |
required |
latitude_max
|
float
|
Northern bound [deg; -90..90], >= latitude_min. |
required |
longitude_min
|
float
|
Western bound [deg; -180..180]. |
required |
longitude_max
|
float
|
Eastern bound [deg; -180..180], >= longitude_min. |
required |
step_deg
|
float
|
Grid spacing [deg; > 0]. |
required |
Returns:
| Type | Description |
|---|---|
list[GeodeticPosition]
|
list[GeodeticPosition]: The land-only subset of
|
Raises:
| Type | Description |
|---|---|
ValueError
|
If |
GeodeticPosition
Geodetic coordinates on the WGS-84 ellipsoid.
Latitude and longitude are geodetic (not geocentric). Altitude is measured above the WGS-84 reference ellipsoid, not mean sea level.
Attributes:
| Name | Type | Description |
|---|---|---|
latitude |
float
|
Geodetic latitude [rad; -π/2..π/2]. |
longitude |
float
|
Geodetic longitude [rad; -π..π]. |
altitude |
float
|
Altitude above WGS-84 ellipsoid [km]. |
id |
str
|
Unique identifier (UUID by default; settable). |
name |
str | None
|
Optional human-readable name. |
altitude
property
Altitude above WGS-84 ellipsoid [km].
latitude
property
Geodetic latitude [rad; -π/2..π/2].
longitude
property
Geodetic longitude [rad; -π..π].
__init__(latitude, longitude, altitude)
Creates a GeodeticPosition on the WGS-84 ellipsoid.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
latitude
|
float
|
Geodetic latitude [rad; -π/2..π/2]. |
required |
longitude
|
float
|
Geodetic longitude [rad; -π..π]. |
required |
altitude
|
float
|
Altitude above WGS-84 ellipsoid [km]. |
required |
__repr__()
Returns GeodeticPosition(latitude=…, longitude=…, altitude=…).
from_cartesian_state(state)
staticmethod
Converts an ITRF Cartesian state to geodetic coordinates.
Uses an iterative Bowring method for WGS-84 inversion. The input state is converted to ITRF automatically if needed.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
state
|
CartesianState
|
Cartesian state (any supported frame) [position in km]. |
required |
Returns:
| Type | Description |
|---|---|
GeodeticPosition
|
Geodetic position on the WGS-84 ellipsoid. |
Raises:
| Type | Description |
|---|---|
ValueError
|
If the frame conversion to ITRF fails. |
get_field_of_view_report(epoch, sensor_direction, angular_threshold, sats, reference_frame)
Reports satellites within a sensor's angular field of view.
A satellite is included when its angular separation from
sensor_direction does not exceed angular_threshold.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
epoch
|
ModifiedJulianDate
|
Observation epoch. |
required |
sensor_direction
|
TopocentricElements
|
Boresight as topocentric elements (ra and dec required). |
required |
angular_threshold
|
float
|
Half-angle of the field of view [rad]. |
required |
sats
|
'Constellation'
|
Constellation to search. |
required |
reference_frame
|
ReferenceFrame
|
Reference frame for the computation. |
required |
Returns:
| Type | Description |
|---|---|
'FieldOfViewReport'
|
|
Raises:
| Type | Description |
|---|---|
ValueError
|
If propagation fails or |
get_horizon_access_report(satellite, start, end, min_elevation, min_duration)
Finds satellite access intervals above a minimum elevation.
Steps at 60-second resolution and bisects each crossing for accuracy.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
satellite
|
'Satellite'
|
Target satellite. |
required |
start
|
ModifiedJulianDate
|
Start of the search window. |
required |
end
|
ModifiedJulianDate
|
End of the search window. |
required |
min_elevation
|
float
|
Minimum elevation threshold [rad]. |
required |
min_duration
|
TimeSpan
|
Minimum pass duration to include. |
required |
Returns:
| Type | Description |
|---|---|
'HorizonAccessReport'
|
|
Raises:
| Type | Description |
|---|---|
ValueError
|
If |
get_state_at_epoch(epoch, reference_frame=...)
Returns the observer's inertial state at a given epoch.
The observer has zero velocity in ITRF, converted to reference_frame
if provided.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
epoch
|
ModifiedJulianDate
|
Desired epoch. |
required |
reference_frame
|
ReferenceFrame | None
|
Output frame (default: TEME). |
...
|
Returns:
| Type | Description |
|---|---|
CartesianState
|
Cartesian state [position in km, zero velocity in km/s]. |
Raises:
| Type | Description |
|---|---|
ValueError
|
If the frame conversion fails. |
get_theta(epoch)
Returns the local sidereal angle at the observer's longitude.
Computed as GMST plus the observer's east longitude. Requires EOP data.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
epoch
|
ModifiedJulianDate
|
Desired epoch. |
required |
Returns:
| Type | Description |
|---|---|
float
|
Local sidereal angle [rad; 0..2π). |
get_topocentric_to_satellite(epoch, sat, reference_frame)
Computes the topocentric direction from this observer to a satellite.
Includes range and range-rate when both states carry velocity.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
epoch
|
ModifiedJulianDate
|
Observation epoch. |
required |
sat
|
'Satellite'
|
Target satellite. |
required |
reference_frame
|
ReferenceFrame
|
Reference frame for the computation. |
required |
Returns:
| Type | Description |
|---|---|
TopocentricElements
|
Topocentric elements [range in km, range-rate in km/s, |
TopocentricElements
|
right_ascension and declination in rad]. |
Raises:
| Type | Description |
|---|---|
ValueError
|
If propagation or frame conversion fails. |
HorizonElements
Local-horizon angular observation: azimuth and elevation.
Azimuth is measured clockwise from north. Elevation is positive above
the horizon. Rate fields are optional and may be None near singularities
(zenith for azimuth rate, nadir for elevation rate).
Attributes:
| Name | Type | Description |
|---|---|---|
azimuth |
float
|
Azimuth angle [rad; 0..2π, clockwise from north]. |
elevation |
float
|
Elevation angle [rad; -π/2..π/2]. |
range |
Optional[float]
|
Slant range [km]. |
range_rate |
Optional[float]
|
Range-rate [km/s]. |
azimuth_rate |
Optional[float]
|
Azimuth rate [rad/s]; |
elevation_rate |
Optional[float]
|
Elevation rate [rad/s]. |
azimuth
property
Azimuth angle [rad; 0..2π, clockwise from north].
azimuth_rate
property
Azimuth rate [rad/s], or None near zenith.
elevation
property
Elevation angle [rad; -π/2..π/2].
elevation_rate
property
Elevation rate [rad/s], or None.
range
property
Slant range [km], or None.
range_rate
property
Range-rate [km/s], or None.
__init__(azimuth, elevation)
Creates HorizonElements with azimuth and elevation only.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
azimuth
|
float
|
Azimuth angle [rad; 0..2π, clockwise from north]. |
required |
elevation
|
float
|
Elevation angle [rad; -π/2..π/2]. |
required |
__repr__()
Returns HorizonElements(azimuth=…, elevation=…).
with_azimuth_rate(azimuth_rate)
Returns a copy with the azimuth-rate field set.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
azimuth_rate
|
Optional[float]
|
Azimuth rate [rad/s], or |
required |
Returns:
| Type | Description |
|---|---|
HorizonElements
|
Updated |
with_elevation_rate(elevation_rate)
Returns a copy with the elevation-rate field set.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
elevation_rate
|
Optional[float]
|
Elevation rate [rad/s], or |
required |
Returns:
| Type | Description |
|---|---|
HorizonElements
|
Updated |
with_range(range)
Returns a copy with the range field set.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
range
|
Optional[float]
|
Slant range [km], or |
required |
Returns:
| Type | Description |
|---|---|
HorizonElements
|
Updated |
with_range_rate(range_rate)
Returns a copy with the range-rate field set.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
range_rate
|
Optional[float]
|
Range-rate [km/s], or |
required |
Returns:
| Type | Description |
|---|---|
HorizonElements
|
Updated |
HorizonState
A horizon observation (azimuth/elevation) at an epoch.
The observer position is normalized to ITRF on construction.
Attributes:
| Name | Type | Description |
|---|---|---|
epoch |
ModifiedJulianDate
|
Observation epoch. |
elements |
HorizonElements
|
Azimuth, elevation, and optional rates. |
origin_state |
CartesianState
|
Observer state in ITRF. |
elements
property
Azimuth, elevation, and optional rates.
epoch
property
Observation epoch.
origin_state
property
Observer state in ITRF.
__init__(epoch, elements, origin_state)
Creates a HorizonState.
The origin_state epoch must match epoch; it will be
automatically converted to ITRF.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
epoch
|
ModifiedJulianDate
|
Observation epoch. |
required |
elements
|
HorizonElements
|
Azimuth, elevation, and optional rates. |
required |
origin_state
|
CartesianState
|
Observer Cartesian state (any supported frame). |
required |
__repr__()
Returns HorizonState(epoch=…).
from_cartesian(observer_state, target_state)
staticmethod
Computes the horizon observation from observer to target.
Both states are converted to ITRF. Rates are computed when both
states carry velocity; None is set near zenith.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
observer_state
|
CartesianState
|
Observer Cartesian state (any supported frame). |
required |
target_state
|
CartesianState
|
Target Cartesian state. |
required |
Returns:
| Type | Description |
|---|---|
HorizonState
|
|
Raises:
| Type | Description |
|---|---|
ValueError
|
If epochs differ, positions coincide, or frame conversion fails. |
from_topocentric_state(state)
staticmethod
Converts a TopocentricState to a HorizonState.
Transforms right ascension/declination to azimuth/elevation using the observer's geodetic latitude and longitude.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
state
|
TopocentricState
|
Source topocentric state. |
required |
Returns:
| Type | Description |
|---|---|
HorizonState
|
Equivalent |
get_sensor_access_report(candidates, start, end, constraints, tracking_ephemeris=...)
Reports access windows from this observation to candidates.
The observer is already in ITRF; its TEME position is re-sampled
over the search range. When tracking_ephemeris is None,
the stored Az/El drives the boresight; when Some, the stored
Az/El is bypassed and the bore at each epoch is
tracking_ephemeris_pos − observer_pos.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
candidates
|
list[Ephemeris]
|
Target ephemerides to evaluate against the bore. |
required |
start
|
ModifiedJulianDate
|
Start of the search range. |
required |
end
|
ModifiedJulianDate
|
End of the search range. |
required |
constraints
|
SensorConstraints
|
|
required |
tracking_ephemeris
|
Optional[Ephemeris]
|
Optional bore-pointing override; when provided, the stored Az/El is ignored. |
...
|
Returns:
| Type | Description |
|---|---|
SensorAccessReport
|
A |
SensorAccessReport
|
all candidate access windows. |
Raises:
| Type | Description |
|---|---|
ValueError
|
If |
get_sensor_access_to_constellation(constellation, start, end, constraints, tracking_ephemeris=...)
Convenience: reports access windows to every cached ephemeris
in constellation over [start, end].
Satellites are iterated in sorted-id order for deterministic output ordering.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
constellation
|
Constellation
|
Target |
required |
start
|
ModifiedJulianDate
|
Start of the search range. |
required |
end
|
ModifiedJulianDate
|
End of the search range. |
required |
constraints
|
SensorConstraints
|
|
required |
tracking_ephemeris
|
Optional[Ephemeris]
|
Optional bore-pointing override; when
provided, the stored Az/El is ignored and the bore at
each epoch is |
...
|
Returns:
| Type | Description |
|---|---|
SensorAccessReport
|
Raises:
| Type | Description |
|---|---|
ValueError
|
If any satellite lacks a cached ephemeris or an inner gate evaluation fails. |
Logging
Emits info-level entry/exit records on the keplime
logger with the constellation size, time window, and elapsed
wall time; debug records per target with the target id,
elapsed time, and access count; and warn records when
ephemerides are missing or a per-target evaluation panics
(panicking targets are returned as empty reports so the
batch continues). See keplime.__doc__ for how to surface
these logs in the hosting application.
get_sensor_access_to_satellite(satellite, start, end, constraints, tracking_ephemeris=...)
Convenience: reports access windows to satellite's cached
ephemeris over [start, end].
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
satellite
|
Satellite
|
Target |
required |
start
|
ModifiedJulianDate
|
Start of the search range. |
required |
end
|
ModifiedJulianDate
|
End of the search range. |
required |
constraints
|
SensorConstraints
|
|
required |
tracking_ephemeris
|
Optional[Ephemeris]
|
Optional bore-pointing override; when
provided, the stored Az/El is ignored and the bore at
each epoch is |
...
|
Returns:
| Type | Description |
|---|---|
SensorAccessReport
|
Raises:
| Type | Description |
|---|---|
ValueError
|
If the satellite has no cached ephemeris or an inner gate evaluation fails. |
Hypothesis
A single candidate orbit hypothesis for one tracklet, at a common reference epoch.
A hypothesis is what classical IOD produces (one per tracklet) and what an admissible-region particle promotes to (many per tracklet). Both paths use the same type so downstream correlation and refinement stages do not need to dispatch on which path produced the hypothesis.
Attributes:
| Name | Type | Description |
|---|---|---|
epoch |
ModifiedJulianDate
|
Reference epoch the state and covariance are valid at. |
state |
CartesianState
|
Candidate inertial Cartesian state at
|
covariance |
CovarianceMatrix
|
State covariance at |
weight |
float
|
Non-negative weight assigned to this hypothesis
[dimensionless; ≥ 0]. Weights across a
|
covariance
property
State covariance at epoch, frame-tagged per ADR 0001.
epoch
property
Reference epoch the state and covariance are valid at.
state
property
Candidate inertial Cartesian state at epoch [km, km/s].
weight
property
Non-negative weight assigned to this hypothesis [dimensionless; ≥ 0].
__init__(epoch, state, covariance, weight)
Creates a new Hypothesis.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
epoch
|
ModifiedJulianDate
|
Reference epoch for |
required |
state
|
CartesianState
|
Inertial Cartesian state [km, km/s]. |
required |
covariance
|
CovarianceMatrix
|
Frame-tagged state covariance. |
required |
weight
|
float
|
Non-negative hypothesis weight [dimensionless; ≥ 0]. |
required |
__repr__()
Returns Hypothesis(epoch=…, weight=…).
HypothesisCloud
Weighted ensemble of Hypothesis entries
for one tracklet at a common epoch.
Cloud size is one for the classical-IOD path and many (typically 256 with
the default
AdmissibleRegionSampling.QuasiMonteCarlo
settings) for the ensemble path.
Attributes:
| Name | Type | Description |
|---|---|---|
epoch |
ModifiedJulianDate
|
Common epoch shared by every entry in
|
hypotheses |
list[Hypothesis]
|
Hypotheses comprising the cloud. Each
hypothesis carries its own state, covariance, and weight; all
hypotheses share |
epoch
property
Common epoch shared by every hypothesis in this cloud.
hypotheses
property
Hypotheses comprising the cloud.
__init__(epoch, hypotheses)
Creates a new HypothesisCloud.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
epoch
|
ModifiedJulianDate
|
Reference epoch shared by every hypothesis. |
required |
hypotheses
|
list[Hypothesis]
|
Hypotheses at the common epoch. |
required |
__len__()
Number of hypotheses in the cloud.
__repr__()
Returns HypothesisCloud(epoch=…, n_hypotheses=…).
is_empty()
True when the cloud has no hypotheses.
KeplerianElements
Classical Keplerian orbital elements for an elliptic orbit.
The six elements fully characterize a two-body Keplerian orbit at a given
epoch. They are the standard representation for near-circular orbits
(eccentricity < 1); degenerate cases (equatorial or circular) are
representable but some derived quantities become ill-conditioned.
Convert to EquinoctialElements
for a singularity-free representation, or to
CartesianState for propagation and
observation modeling.
Attributes:
| Name | Type | Description |
|---|---|---|
semi_major_axis |
float
|
Semi-major axis [km; > 0]. |
eccentricity |
float
|
Eccentricity [dimensionless; 0..1). |
inclination |
float
|
Inclination [rad; 0..π]. |
ascending_node |
float
|
Right ascension of the ascending node [rad; 0..2π). |
argument_of_periapsis |
float
|
Argument of periapsis [rad; 0..2π). |
mean_anomaly |
float
|
Mean anomaly [rad; 0..2π). |
periapsis |
float
|
Periapsis radius |
apoapsis |
float
|
Apoapsis radius |
apoapsis
property
Apoapsis (farthest point) radius from the central body's center [km].
Computed as a (1 + e). For a circular orbit (e = 0) this
equals the semi-major axis.
argument_of_periapsis
property
Argument of periapsis [rad; 0..2π).
ascending_node
property
Right ascension of the ascending node [rad; 0..2π).
eccentricity
property
Eccentricity [dimensionless; 0..1).
inclination
property
Inclination [rad; 0..π].
mean_anomaly
property
Mean anomaly [rad; 0..2π).
periapsis
property
Periapsis (closest approach) radius from the central body's center [km].
Computed as a (1 − e). For a circular orbit (e = 0) this
equals the semi-major axis.
semi_major_axis
property
Semi-major axis [km; > 0].
__init__(semi_major_axis, eccentricity, inclination, ascending_node, argument_of_periapsis, mean_anomaly)
Creates classical Keplerian elements from the six element components.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
semi_major_axis
|
float
|
Semi-major axis [km; > 0]. |
required |
eccentricity
|
float
|
Eccentricity [dimensionless; 0..1). |
required |
inclination
|
float
|
Inclination [rad; 0..π]. |
required |
ascending_node
|
float
|
Right ascension of the ascending node [rad; 0..2π). |
required |
argument_of_periapsis
|
float
|
Argument of periapsis [rad; 0..2π). |
required |
mean_anomaly
|
float
|
Mean anomaly at epoch [rad; 0..2π). |
required |
Returns:
| Type | Description |
|---|---|
None
|
KeplerianElements with the given components. |
to_cartesian(epoch, frame, mu)
Converts these Keplerian elements to a Cartesian state vector.
The eccentric anomaly is solved from the mean anomaly using Halley's method (cubic convergence, typically 3–4 iterations). The perifocal position and velocity are then rotated into the requested reference frame via the argument-of-periapsis, RAAN, and inclination rotation sequence.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
epoch
|
ModifiedJulianDate
|
Epoch of the output state vector. |
required |
frame
|
ReferenceFrame
|
Reference frame for the output state. |
required |
mu
|
float
|
Gravitational parameter of the central body [km³/s²]. |
required |
Returns:
| Type | Description |
|---|---|
CartesianState
|
Cartesian state with position [km] and velocity [km/s] at the |
CartesianState
|
given epoch in the specified frame. |
Raises:
| Type | Description |
|---|---|
ValueError
|
If |
to_equinoctial()
Converts these Keplerian elements to the equinoctial element set.
The equinoctial elements avoid the coordinate singularities present in
classical Keplerian elements for equatorial and circular orbits. See
EquinoctialElements for the
component definitions.
Returns:
| Type | Description |
|---|---|
EquinoctialElements
|
Equivalent singularity-free equinoctial elements. |
KeplerianState
Keplerian orbital state at an epoch.
Attributes:
| Name | Type | Description |
|---|---|---|
epoch |
ModifiedJulianDate
|
Epoch of the state. |
keplerian_elements |
KeplerianElements
|
Classical orbital elements. |
keplerian_type |
KeplerianType
|
Mean-motion theory classification. |
mean_motion |
float
|
Mean motion derived from the semi-major axis [rev/day]. |
period |
float
|
Orbital period derived from the semi-major axis [s]. |
epoch
property
Epoch of the state.
keplerian_elements
property
Classical orbital elements.
keplerian_type
property
Mean-motion theory (Kozai, Brouwer, or osculating).
mean_motion
property
Mean motion derived from the semi-major axis [rev/day].
period
property
Orbital period derived from the semi-major axis [s].
Computed as T = 2π √(a³/μ). Returns NaN if
semi_major_axis ≤ 0.
Returns:
| Type | Description |
|---|---|
float
|
Orbital period [s]. |
to_cartesian()
Converts this state to an inertial Cartesian state.
Returns:
| Type | Description |
|---|---|
CartesianState
|
Cartesian state [position in km, velocity in km/s]. |
Raises:
| Type | Description |
|---|---|
ValueError
|
If the conversion fails. |
OrbitPlotData
An ordered collection of OrbitPlotState snapshots for a satellite.
Attributes:
| Name | Type | Description |
|---|---|---|
satellite_id |
str
|
Identifier of the satellite. |
epochs |
list[str]
|
ISO 8601 epoch strings. |
latitudes |
list[float]
|
Geodetic latitudes [rad]. |
longitudes |
list[float]
|
Geodetic longitudes [rad]. |
altitudes |
list[float]
|
Altitudes above WGS-84 ellipsoid [km]. |
semi_major_axes |
list[float]
|
Semi-major axes [km]. |
eccentricities |
list[float]
|
Eccentricities [dimensionless]. |
inclinations |
list[float]
|
Inclinations [rad]. |
ascending_nodes |
list[float]
|
Right ascensions of ascending node [rad]. |
radii |
list[float]
|
Orbital radii [km]. |
apogee_radii |
list[float]
|
Apogee radii [km]. |
perigee_radii |
list[float]
|
Perigee radii [km]. |
altitudes
property
Altitudes above WGS-84 ellipsoid [km].
apogee_radii
property
Apogee radii [km].
ascending_nodes
property
Right ascensions of ascending node [rad; 0..2π).
eccentricities
property
Eccentricities [dimensionless; 0..1).
epochs
property
ISO 8601 epoch strings for each snapshot.
inclinations
property
Inclinations [rad; 0..π].
latitudes
property
Geodetic latitudes [rad; -π/2..π/2].
longitudes
property
Geodetic longitudes [rad; -π..π].
perigee_radii
property
Perigee radii [km].
radii
property
Orbital radii at each epoch [km].
satellite_id
property
Identifier of the satellite.
semi_major_axes
property
Semi-major axes [km].
__init__(satellite_id)
Creates an empty OrbitPlotData for the given satellite.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
satellite_id
|
str
|
Identifier of the satellite. |
required |
add_state(plot_state)
Appends an OrbitPlotState to this collection.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
plot_state
|
OrbitPlotState
|
Snapshot to append. |
required |
OrbitPlotState
A snapshot of geodetic and orbital parameters for orbit visualization.
Attributes:
| Name | Type | Description |
|---|---|---|
epoch |
ModifiedJulianDate
|
Epoch of the snapshot. |
latitude |
float
|
Geodetic latitude [rad; -π/2..π/2]. |
longitude |
float
|
Geodetic longitude [rad; -π..π]. |
altitude |
float
|
Altitude above WGS-84 ellipsoid [km]. |
semi_major_axis |
float
|
Semi-major axis [km]. |
eccentricity |
float
|
Eccentricity [dimensionless; 0..1). |
inclination |
float
|
Inclination [rad; 0..π]. |
ascending_node |
float
|
Right ascension of ascending node [rad; 0..2π). |
radius |
float
|
Orbital radius at this epoch [km]. |
apogee_radius |
float
|
Apogee radius [km]. |
perigee_radius |
float
|
Perigee radius [km]. |
altitude
property
Altitude above WGS-84 ellipsoid [km].
apogee_radius
property
Apogee radius [km].
ascending_node
property
Right ascension of ascending node [rad; 0..2π).
eccentricity
property
Eccentricity [dimensionless; 0..1).
epoch
property
Epoch of the snapshot.
inclination
property
Inclination [rad; 0..π].
latitude
property
Geodetic latitude [rad; -π/2..π/2].
longitude
property
Geodetic longitude [rad; -π..π].
perigee_radius
property
Perigee radius [km].
radius
property
Orbital radius at this epoch [km].
semi_major_axis
property
Semi-major axis [km].
__init__(epoch, geodetic, orbital, radii)
Creates an OrbitPlotState.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
epoch
|
ModifiedJulianDate
|
Epoch of the snapshot. |
required |
geodetic
|
tuple[float, float, float]
|
|
required |
orbital
|
tuple[float, float, float, float]
|
|
required |
radii
|
tuple[float, float, float]
|
|
required |
SphericalVector
Spherical coordinates: range, right ascension, and declination.
Attributes:
| Name | Type | Description |
|---|---|---|
range |
float
|
Radial distance [km]. |
right_ascension |
float
|
Right ascension [rad; -π..π]. |
declination |
float
|
Declination [rad; -π/2..π/2]. |
declination
property
Declination [rad; -π/2..π/2].
range
property
Radial distance [km].
right_ascension
property
Right ascension [rad; -π..π].
__init__(range, right_ascension, declination)
Creates a SphericalVector from explicit components.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
range
|
float
|
Radial distance [km]. |
required |
right_ascension
|
float
|
Right ascension [rad; -π..π]. |
required |
declination
|
float
|
Declination [rad; -π/2..π/2]. |
required |
__repr__()
Returns SphericalVector(range=…, right_ascension=…, declination=…).
from_cartesian(vector)
staticmethod
Converts a CartesianVector to spherical coordinates.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
vector
|
CartesianVector
|
Input Cartesian vector [km]. |
required |
Returns:
| Type | Description |
|---|---|
SphericalVector
|
Equivalent |
to_cartesian()
Converts this SphericalVector to a CartesianVector.
Returns:
| Type | Description |
|---|---|
CartesianVector
|
Equivalent Cartesian vector [km]. |
TLE
A Two-Line Element set for a space object.
Parses the NORAD TLE format and exposes orbital elements, epoch, force terms, and conversions to Keplerian and Cartesian states.
Attributes:
| Name | Type | Description |
|---|---|---|
id |
str
|
Object identifier (settable; defaults to satellite number). |
name |
Optional[str]
|
Optional common name from line 0. |
line1 |
str
|
Reconstructed TLE line 1. |
line2 |
str
|
Reconstructed TLE line 2. |
epoch |
ModifiedJulianDate
|
TLE epoch (UTC). |
keplerian_state |
KeplerianState
|
Keplerian state at TLE epoch. |
mean_motion |
float
|
Mean motion [rev/day]. |
force_terms |
TLEForceTerms
|
SGP4/SDP4 perturbation parameters. |
cartesian_state |
CartesianState
|
Cartesian state at TLE epoch in TEME. |
b_star |
float
|
B* drag parameter [1/earth-radii]. |
satellite_number |
int
|
Satellite catalog number. |
norad_id |
int
|
Alias for |
classification |
Classification
|
Security classification. |
international_designator |
str
|
International launch designator. |
ephemeris_type |
int
|
Ephemeris type field. |
element_set_number |
int
|
Element set number. |
revolution_number |
int
|
Revolution number at epoch. |
keplerian_type |
KeplerianType
|
Mean-motion theory (Kozai GP). |
semi_major_axis |
float
|
Semi-major axis derived from mean motion [km]. |
inclination |
float
|
Inclination [rad; 0..π]. |
raan |
float
|
Right ascension of ascending node [rad; 0..2π). |
eccentricity |
float
|
Eccentricity [dimensionless; 0..1). |
argument_of_perigee |
float
|
Argument of perigee [rad; 0..2π). |
mean_anomaly |
float
|
Mean anomaly [rad; 0..2π). |
mean_motion_dot |
float
|
First-order mean motion derivative [(rev/day)/day]. |
mean_motion_dot_dot |
float
|
Second-order mean motion derivative [(rev/day)/day²]. |
b_term |
float
|
B* in alternate notation [1/earth-radii]. |
agom |
Optional[float]
|
Area-to-mass ratio for XP [m²/kg], or |
periapsis |
float
|
Periapsis radius [km]. |
apoapsis |
float
|
Apoapsis radius [km]. |
agom
property
Area-to-mass ratio for XP [m²/kg], or None.
apoapsis
property
Apoapsis radius [km].
argument_of_perigee
property
Argument of perigee [rad; 0..2π).
b_star
property
B* drag parameter [1/earth-radii].
b_term
property
B* drag term [1/earth-radii].
cartesian_state
property
Cartesian state at TLE epoch in TEME [position in km, velocity in km/s].
classification
property
Security classification.
eccentricity
property
Eccentricity [dimensionless; 0..1).
element_set_number
property
Element set number.
ephemeris_type
property
Ephemeris type field from the TLE.
epoch
property
TLE epoch (UTC).
force_terms
property
SGP4/SDP4 perturbation parameters.
id
property
writable
Object identifier (settable).
inclination
property
Inclination [rad; 0..π].
international_designator
property
International launch designator.
keplerian_state
property
Keplerian state at TLE epoch.
keplerian_type
property
Mean-motion theory (Kozai GP / SGP4).
line1
property
Reconstructed TLE line 1.
line2
property
Reconstructed TLE line 2.
mean_anomaly
property
Mean anomaly [rad; 0..2π).
mean_motion
property
Mean motion [rev/day].
mean_motion_dot
property
First-order mean motion derivative [(rev/day)/day].
mean_motion_dot_dot
property
Second-order mean motion derivative [(rev/day)/day²].
name
property
Optional common name from line 0.
norad_id
property
NORAD catalog number (alias for satellite_number).
periapsis
property
Periapsis radius [km].
raan
property
Right ascension of ascending node [rad; 0..2π).
revolution_number
property
Revolution number at epoch.
satellite_number
property
Satellite catalog number.
semi_major_axis
property
Semi-major axis derived from mean motion [km].
__init__(line1, line2, name=None)
Parses a TLE from two lines and an optional name.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
line1
|
str
|
TLE line 1 (69-character NORAD format). |
required |
line2
|
str
|
TLE line 2 (69-character NORAD format). |
required |
name
|
Optional[str]
|
Optional object name (line 0). |
None
|
Raises:
| Type | Description |
|---|---|
ValueError
|
If the TLE lines cannot be parsed. |
__repr__()
Returns TLE(name=…, line1='…', line2='…'), or TLE(name=…, line_error='…') when a line cannot be rendered.
with_id(id)
Returns a copy with a new identifier.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
id
|
str
|
New identifier string. |
required |
Returns:
| Type | Description |
|---|---|
TLE
|
|
TLEForceTerms
SGP4/SDP4 force model perturbation terms from a TLE.
Attributes:
| Name | Type | Description |
|---|---|---|
mean_motion_dot |
float
|
First-order mean motion derivative [(rev/day)/day]. Integrated only by PPT3 as its secular mean-anomaly drag; SGP4/SDP4 store but ignore it. Estimable through PPT3 drag estimation. |
mean_motion_dot_dot |
float
|
Second-order mean motion derivative [(rev/day)/day²]. Ignored by every propagator (SGP4/SDP4 never read it; PPT3 pins it to zero); retained only for TLE round-trip fidelity. |
b_term |
float
|
B* drag term [1/earth-radii]. |
agom |
Optional[float]
|
Area-to-mass ratio for XP propagator [m²/kg],
or |
agom
property
Area-to-mass ratio for the XP propagator [m²/kg], or None.
b_term
property
B* drag term [1/earth-radii].
mean_motion_dot
property
First-order mean motion derivative [(rev/day)/day].
mean_motion_dot_dot
property
Second-order mean motion derivative [(rev/day)/day²].
TopocentricElements
Angular and range observation in a topocentric (observer-centered) frame.
All fields are optional to support partial observations (angles-only, range-only, or full six-component measurements).
Attributes:
| Name | Type | Description |
|---|---|---|
range |
Optional[float]
|
Slant range from observer to target [km]. |
range_rate |
Optional[float]
|
Range-rate [km/s]. |
right_ascension |
Optional[float]
|
Right ascension [rad; -π..π]. |
declination |
Optional[float]
|
Declination [rad; -π/2..π/2]. |
right_ascension_rate |
Optional[float]
|
Right ascension rate [rad/s]. |
declination_rate |
Optional[float]
|
Declination rate [rad/s]. |
observed_direction |
Optional[CartesianVector]
|
Unit direction vector
from right ascension and declination; |
declination
property
Declination [rad; -π/2..π/2], or None.
declination_rate
property
Declination rate [rad/s], or None.
observed_direction
property
Unit direction vector from right ascension and declination.
Returns None when either angle is absent.
range
property
Slant range from observer to target [km], or None.
range_rate
property
Range-rate [km/s], or None.
right_ascension
property
Right ascension [rad; -π..π], or None.
right_ascension_rate
property
Right ascension rate [rad/s], or None.
__init__(right_ascension, declination)
Creates TopocentricElements with angular components only.
Use builder methods to attach optional range and rate fields.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
right_ascension
|
Optional[float]
|
Right ascension [rad; -π..π], or |
required |
declination
|
Optional[float]
|
Declination [rad; -π/2..π/2], or |
required |
__repr__()
Returns TopocentricElements(right_ascension=…, declination=…).
with_declination_rate(declination_rate)
Returns a copy with the declination-rate field set.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
declination_rate
|
Optional[float]
|
Declination rate [rad/s], or |
required |
Returns:
| Type | Description |
|---|---|
TopocentricElements
|
Updated |
with_range(range)
Returns a copy with the range field set.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
range
|
Optional[float]
|
Slant range [km], or |
required |
Returns:
| Type | Description |
|---|---|
TopocentricElements
|
Updated |
with_range_rate(range_rate)
Returns a copy with the range-rate field set.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
range_rate
|
Optional[float]
|
Range-rate [km/s], or |
required |
Returns:
| Type | Description |
|---|---|
TopocentricElements
|
Updated |
with_right_ascension_rate(right_ascension_rate)
Returns a copy with the right-ascension-rate field set.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
right_ascension_rate
|
Optional[float]
|
Right ascension rate [rad/s], or |
required |
Returns:
| Type | Description |
|---|---|
TopocentricElements
|
Updated |
TopocentricState
A topocentric observation at an epoch with an associated observer state.
Attributes:
| Name | Type | Description |
|---|---|---|
epoch |
ModifiedJulianDate
|
Observation epoch. |
elements |
TopocentricElements
|
Angular and range measurements. |
reference_frame |
ReferenceFrame
|
Frame in which angles are expressed. |
origin_state |
CartesianState
|
Observer Cartesian state at the epoch. |
elements
property
Angular and range measurements.
epoch
property
Observation epoch.
origin_state
property
Observer Cartesian state at the epoch.
reference_frame
property
Reference frame in which angles are expressed.
__init__(epoch, elements, reference_frame, origin_state)
Creates a TopocentricState.
The origin_state epoch must match epoch; it will be
automatically converted to reference_frame.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
epoch
|
ModifiedJulianDate
|
Observation epoch. |
required |
elements
|
TopocentricElements
|
Angular and range measurements. |
required |
reference_frame
|
ReferenceFrame
|
Frame for the angular elements. |
required |
origin_state
|
CartesianState
|
Observer Cartesian state. |
required |
__repr__()
Returns TopocentricState(epoch=…, reference_frame=…).
from_horizon_state(state, reference_frame)
staticmethod
Converts a HorizonState to a TopocentricState.
Transforms azimuth/elevation to right ascension/declination.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
state
|
HorizonState
|
Source horizon state. |
required |
reference_frame
|
ReferenceFrame
|
Frame for the output angles. |
required |
Returns:
| Type | Description |
|---|---|
TopocentricState
|
Equivalent |
Raises:
| Type | Description |
|---|---|
ValueError
|
If frame conversion fails. |
get_sensor_access_report(candidates, start, end, constraints, tracking_ephemeris=...)
Reports access windows from this observation to candidates.
The observer is treated as Earth-fixed (origin_state is
converted to ITRF and re-sampled into a TEME ephemeris over the
search range). When tracking_ephemeris is None, the
stored RA/Dec drives the inertial boresight; when Some, the
stored RA/Dec is bypassed and the bore at each epoch is
tracking_ephemeris_pos − observer_pos.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
candidates
|
list[Ephemeris]
|
Target ephemerides to evaluate against the bore. |
required |
start
|
ModifiedJulianDate
|
Start of the search range. |
required |
end
|
ModifiedJulianDate
|
End of the search range. |
required |
constraints
|
SensorConstraints
|
|
required |
tracking_ephemeris
|
Optional[Ephemeris]
|
Optional bore-pointing override; when provided, the stored RA/Dec is ignored. |
...
|
Returns:
| Type | Description |
|---|---|
SensorAccessReport
|
A |
SensorAccessReport
|
all candidate access windows. |
Raises:
| Type | Description |
|---|---|
ValueError
|
If |
get_sensor_access_to_constellation(constellation, start, end, constraints, tracking_ephemeris=...)
Convenience: reports access windows to every cached ephemeris
in constellation over [start, end].
Satellites are iterated in sorted-id order for deterministic output ordering.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
constellation
|
Constellation
|
Target |
required |
start
|
ModifiedJulianDate
|
Start of the search range. |
required |
end
|
ModifiedJulianDate
|
End of the search range. |
required |
constraints
|
SensorConstraints
|
|
required |
tracking_ephemeris
|
Optional[Ephemeris]
|
Optional bore-pointing override; when
provided, the stored RA/Dec is ignored and the bore at
each epoch is |
...
|
Returns:
| Type | Description |
|---|---|
SensorAccessReport
|
Raises:
| Type | Description |
|---|---|
ValueError
|
If any satellite lacks a cached ephemeris or an inner gate evaluation fails. |
Logging
Emits info-level entry/exit records on the keplime
logger with the constellation size, time window, and elapsed
wall time; debug records per target with the target id,
elapsed time, and access count; and warn records when
ephemerides are missing or a per-target evaluation panics
(panicking targets are returned as empty reports so the
batch continues). See keplime.__doc__ for how to surface
these logs in the hosting application.
get_sensor_access_to_satellite(satellite, start, end, constraints, tracking_ephemeris=...)
Convenience: reports access windows to satellite's cached
ephemeris over [start, end].
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
satellite
|
Satellite
|
Target |
required |
start
|
ModifiedJulianDate
|
Start of the search range. |
required |
end
|
ModifiedJulianDate
|
End of the search range. |
required |
constraints
|
SensorConstraints
|
|
required |
tracking_ephemeris
|
Optional[Ephemeris]
|
Optional bore-pointing override; when
provided, the stored RA/Dec is ignored and the bore at
each epoch is |
...
|
Returns:
| Type | Description |
|---|---|
SensorAccessReport
|
Raises:
| Type | Description |
|---|---|
ValueError
|
If the satellite has no cached ephemeris or an inner gate evaluation fails. |
to_frame(reference_frame)
Converts this state to a different reference frame.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
reference_frame
|
ReferenceFrame
|
Target reference frame. |
required |
Returns:
| Type | Description |
|---|---|
TopocentricState
|
Equivalent |
Raises:
| Type | Description |
|---|---|
ValueError
|
If the frame conversion is not supported. |
Tracklet
Ordered sequence of observations from a single sensor over a short arc.
A Tracklet is the front-end product of the UCT pipeline's
tracklet-formation stage — it groups raw observations that
motion-continuity analysis suggests come from the same physical object.
The grouping is hypothetical at this stage; correlation, IOD, and
refinement downstream either accept the tracklet (by fitting a state
from it) or discard it.
All observations in a tracklet share the same sensor and must be sorted ascending by epoch. The modality tag drives downstream IOD and admissible-region dispatch.
Attributes:
| Name | Type | Description |
|---|---|---|
sensor_id |
str
|
Identifier of the sensor that produced every observation in this tracklet. |
observations |
list[Observation]
|
Time-ordered observations, sorted ascending by epoch. |
modality |
TrackletModality
|
Measurement modality common to all observations. |
start_epoch |
ModifiedJulianDate | None
|
Epoch of the earliest
observation, or |
end_epoch |
ModifiedJulianDate | None
|
Epoch of the latest
observation, or |
end_epoch
property
Epoch of the latest observation, or None when empty.
modality
property
Measurement modality common to all observations.
observations
property
Time-ordered observations, sorted ascending by epoch.
sensor_id
property
Identifier of the sensor that produced every observation.
start_epoch
property
Epoch of the earliest observation, or None when empty.
__init__(sensor_id, observations, modality)
Creates a Tracklet.
The caller is responsible for ensuring every observation shares
sensor_id and that the observations are sorted ascending by
epoch.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
sensor_id
|
str
|
Identifier of the producing sensor. |
required |
observations
|
list[Observation]
|
Time-ordered observations belonging to this tracklet. |
required |
modality
|
TrackletModality
|
Measurement modality shared by every observation. |
required |
__len__()
Number of observations in the tracklet.
get_associations(constellation, config=None)
Associates this tracklet to a constellation by track angles and rates.
For every satellite, scores the tracklet's observations in one batch
and reduces them to a
TrackletResidual — the
arc-mean offset (mean-vs-expected) and the slope offset
(slope-vs-expected-rate). The residual is gated against config and
the tracklet's confidence is the worst across present components.
Satellites that cannot be predicted at the tracklet's epochs are
skipped; survivors are returned best-first. An orphan tracklet returns
an empty list.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
constellation
|
Constellation
|
Catalog of candidate satellites. |
required |
config
|
Optional[TrackletAssociationConfig]
|
Gate thresholds. Defaults to the built-in starting values
when |
None
|
Returns:
| Type | Description |
|---|---|
list[TrackletAssociation]
|
Gate-passing associations, best-first. |
Raises:
| Type | Description |
|---|---|
ValueError
|
On an unexpected per-satellite scoring failure. |
get_list(observations, strategy=None)
staticmethod
Groups raw observations into tracklets using a formation strategy.
Partitions observations by sensor, sorts each group by epoch, splits
the stream into short arcs per the strategy, drops singletons, and tags
each tracklet with its inferred modality. Parallels
ObservationCollection.get_list.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
observations
|
list[Observation]
|
Raw batch of observations to group. |
required |
strategy
|
Optional[TrackletFormation]
|
Formation strategy. Defaults to the
adaptive-motion-continuity strategy when |
None
|
Returns:
| Type | Description |
|---|---|
list[Tracklet]
|
Tracklets ordered by first-observation epoch ascending. |
is_empty()
True when the tracklet has no observations.
TrackletFit
Compact mid-epoch summary of a
Tracklet, produced by linear/quadratic
fitting of its observations.
TrackletFit is the form downstream pipeline stages (IOD,
admissible-region construction, correlation) consume — raw observations
are not re-read after fitting. The replacement for the academic SDA term
"attributable", chosen for self-documentation.
For optical (angles-only) tracklets the fit produces right-ascension /
declination and their time derivatives at the tracklet's mid-epoch. For
radar / RF tracklets the fit additionally produces measured range and
range-rate. The fit retains the source
TrackletModality so downstream UCT
stages can dispatch without carrying a parallel raw-tracklet lookup.
Attributes:
| Name | Type | Description |
|---|---|---|
modality |
TrackletModality
|
Measurement modality inferred from the source tracklet. |
epoch |
ModifiedJulianDate
|
Mid-epoch of the tracklet (typically the median observation epoch). |
right_ascension |
float
|
Fit right ascension at |
declination |
float
|
Fit declination at |
right_ascension_rate |
float
|
Fit right-ascension rate at |
declination_rate |
float
|
Fit declination rate at |
range |
tuple[float, float] | None
|
Optional fit range and range-rate
|
observer_state |
CartesianState
|
Inertial Cartesian state of the
observer at |
declination
property
Fit declination at epoch [rad; −π/2..π/2].
declination_rate
property
Fit declination rate at epoch [rad/s].
epoch
property
Mid-epoch of the tracklet (typically the median observation epoch).
modality
property
Measurement modality inferred from the source tracklet.
observer_state
property
Inertial Cartesian state of the observer at epoch [km, km/s].
range
property
Optional fit (range_km, range_rate_km_per_s) [km, km/s], or None for angles-only tracklets.
right_ascension
property
Fit right ascension at epoch [rad; −π..π).
right_ascension_rate
property
Fit right-ascension rate at epoch [rad/s].
__init__(modality, epoch, angles, angle_rates, range, observer_state)
Creates a new TrackletFit from already-computed fit values.
Use this when a caller has already performed tracklet fitting and needs to assemble the compact representation consumed by UCT IOD and admissible-region stages.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
modality
|
TrackletModality
|
Measurement modality inferred from the source tracklet. |
required |
epoch
|
ModifiedJulianDate
|
Mid-epoch of the tracklet. |
required |
angles
|
tuple[float, float]
|
Fit |
required |
angle_rates
|
tuple[float, float]
|
Fit |
required |
range
|
Optional[tuple[float, float]]
|
Optional |
required |
observer_state
|
CartesianState
|
Inertial observer state at |
required |
__repr__()
Returns TrackletFit(modality=…, epoch=…, ra=…, dec=…).
brouwer_to_kozai(eccentricity, inclination, mean_motion_brouwer)
Converts Brouwer mean motion to Kozai mean motion.
Inverts kozai_to_brouwer iteratively using Newton–Raphson.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
eccentricity
|
float
|
Orbital eccentricity [dimensionless; 0..1). |
required |
inclination
|
float
|
Orbital inclination [rad; 0..π]. |
required |
mean_motion_brouwer
|
float
|
Brouwer mean motion [rev/day]. |
required |
Returns:
| Type | Description |
|---|---|
float
|
Kozai mean motion [rev/day]. |
is_land(latitude, longitude)
Returns whether a geodetic location lies on land.
Looks up the cell containing the point in the embedded 0.25° land raster.
Longitude is wrapped into [-180, 180) and latitude clamped to
[-90, 90], so any finite input is valid. Coastline fidelity is limited
by the raster resolution (~28 km); treat near-shore results as approximate.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
latitude
|
float
|
Geodetic latitude [rad; -π/2..π/2]. |
required |
longitude
|
float
|
Geodetic longitude [rad; -π..π]. |
required |
Returns:
| Type | Description |
|---|---|
bool
|
|
kozai_to_brouwer(eccentricity, inclination, mean_motion_kozai)
Converts Kozai mean motion to Brouwer mean motion.
Applies the J₂ SGP4 correction using WGS-72 constants.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
eccentricity
|
float
|
Orbital eccentricity [dimensionless; 0..1). |
required |
inclination
|
float
|
Orbital inclination [rad; 0..π]. |
required |
mean_motion_kozai
|
float
|
Kozai mean motion [rev/day]. |
required |
Returns:
| Type | Description |
|---|---|
float
|
Brouwer mean motion [rev/day]. |
mean_motion_from_semi_major_axis(sma_km, mu)
Converts semi-major axis to mean motion.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
sma_km
|
float
|
Semi-major axis [km; > 0]. |
required |
mu
|
float
|
Standard gravitational parameter [km³/s²]. |
required |
Returns:
| Type | Description |
|---|---|
float
|
Mean motion [rev/day]. |
Raises:
| Type | Description |
|---|---|
ValueError
|
If |
semi_major_axis_from_mean_motion(mean_motion_rev_day, mu)
Converts mean motion to semi-major axis.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
mean_motion_rev_day
|
float
|
Mean motion [rev/day; > 0]. |
required |
mu
|
float
|
Standard gravitational parameter [km³/s²]. |
required |
Returns:
| Type | Description |
|---|---|
float
|
Semi-major axis [km]. |
Raises:
| Type | Description |
|---|---|
ValueError
|
If |