Orbit Models

Two Line Elements

pydantic model tatc.schemas.TwoLineElements[source]

Orbit defined with standard two line elements.

Show JSON schema
{
   "title": "TwoLineElements",
   "description": "Orbit defined with standard two line elements.",
   "type": "object",
   "properties": {
      "type": {
         "const": "tle",
         "default": "tle",
         "description": "Orbit type discriminator.",
         "title": "Type",
         "type": "string"
      },
      "tle": {
         "description": "Two line elements. Multiple TLEs must be in chronological order.",
         "examples": [
            [
               "1 25544U 98067A   21156.30527927  .00003432  00000-0  70541-4 0  9993",
               "2 25544  51.6455  41.4969 0003508  68.0432  78.3395 15.48957534286754"
            ]
         ],
         "items": {
            "type": "string"
         },
         "minItems": 2,
         "title": "Tle",
         "type": "array"
      }
   },
   "required": [
      "tle"
   ]
}

Fields:
  • tle (List[str])

  • type (Literal['tle'])

field tle: Annotated[List[str], AfterValidator(utils.is_chronological_tle), AfterValidator(utils.is_valid_tle), AfterValidator(utils.is_even_length_list)] [Required]

Two line elements. Multiple TLEs must be in chronological order.

Constraints:
  • min_length = 2

  • func = <function is_even_length_list at 0x71bc28092680>

field type: Literal['tle'] = 'tle'

Orbit type discriminator.

as_skyfield(tle_i=0)[source]

Converts this orbit to a Skyfield EarthSatellite.

Parameters:

tle_i (int) – the TLE index.

Returns:

the Skyfield EarthSatellite

Return type:

skyfield.api.EarthSatellite

get_altitude(tle_i=0) float[source]

Gets the altitude (meters).

Parameters:

tle_i (int) – the TLE index.

Returns:

the altitude

Return type:

float

get_b_star(tle_i=0) float[source]

Gets the b-star term (drag or radiation pressure coefficient).

Parameters:

tle_i (int) – the TLE index.

Returns:

the b-star term

Return type:

float

get_catalog_number(tle_i=0) int[source]

Gets the TLE catalog number.

Parameters:

tle_i (int) – the TLE index.

Returns:

the catalog number

Return type:

int

get_classification(tle_i=0) str[source]

Gets the TLE classification type (U: unclassified; C: classified).

Parameters:

tle_i (int) – the TLE index.

Returns:

the classification type

Return type:

str

get_closest_tle_index(at_times: datetime | List[datetime]) int | List[int][source]

Gets the closest TLE index to specified time(s).

Parameters:

at_times (datetime or List[datetime]) – specified times

Returns:

closest TLE index or indices

Return type:

int or List[int]

get_derived_orbit(delta_mean_anomaly: float, delta_raan: float) TwoLineElements[source]

Gets a derived orbit with perturbations to the mean anomaly and right ascension of ascending node.

Parameters:
  • delta_mean_anomaly (float) – Delta mean anomaly (degrees).

  • delta_raan (float) – Delta right ascension of ascending node (degrees).

Returns:

the derived orbit

Return type:

TwoLineElements

get_eccentricity(tle_i=0) float[source]

Gets the eccentricity.

Parameters:

tle_i (int) – the TLE index.

Returns:

the eccentricity

Return type:

float

get_element_set_number(tle_i=0) int[source]

Gets the TLE element set number.

Parameters:

tle_i (int) – the TLE index.

Returns:

the element set number

Return type:

int

get_ephemeris_type(tle_i=0) int[source]

Gets the TLE ephemeris type.

Parameters:

tle_i (int) – the TLE index.

Returns:

the ephemeris type

Return type:

int

get_epoch(tle_i=0) datetime[source]

Gets the TLE epoch time.

Parameters:

tle_i (int) – the TLE index.

Returns:

the epoch datetime

Return type:

datetime

get_first_derivative_mean_motion(tle_i=0) float[source]

Gets the first derivative of mean motion (ballistic coefficient).

Parameters:

tle_i (int) – the TLE index.

Returns:

the first derivative of mean motion

Return type:

float

get_inclination(tle_i=0) float[source]

Gets the orbit inclination (decimal degrees).

Parameters:

tle_i (int) – the TLE index.

Returns:

the inclination

Return type:

float

get_international_designator(tle_i=0) str[source]

Gets the TLE international designator.

Parameters:

tle_i (int) – the TLE index.

Returns:

the international designator

Return type:

str

get_mean_anomaly(tle_i=0) float[source]

Gets the mean anomaly (decimal degrees).

Parameters:

tle_i (int) – the TLE index.

Returns:

the mean anomaly

Return type:

float

get_mean_motion(tle_i=0) float[source]

Gets the mean motion (revolutions per day).

Parameters:

tle_i (int) – the TLE index.

Returns:

the mean motion

Return type:

float

get_observation_events(point: Point, start: datetime, end: datetime, min_elevation_angle: float, try_repeat: bool | None = None) tuple[source]

Gets the observation events of this orbit using Skyfield.

Parameters:
  • point (Point) – Target location to observe.

  • start (datetime) – Start time of the observation period.

  • end (datetime) – End time of the observation period.

  • min_elevation_angle (float) – Minimum elevation angle (deg) to constrain observation.

  • try_repeat (bool) – True, if a repeat orbit should be used to improve long-term accuracy.

Returns:

the orbit track position/velocity

Return type:

skyfield.positionlib.Geocentric

get_orbit_period(tle_i=0) timedelta[source]

Gets the approximate orbit period.

Parameters:

tle_i (int) – the TLE index.

Returns:

the orbit period

Return type:

timedelta

get_orbit_track(times: datetime | List[datetime], try_repeat: bool | None = None) Geocentric[source]

Gets the orbit track of this orbit using Skyfield.

Parameters:
  • times (Union[datetime, List[datetime]]) – time(s) at which to compute position/velocity.

  • try_repeat (bool) – True, if a repeat orbit should be used to improve long-term accuracy.

Returns:

the orbit track position/velocity

Return type:

skyfield.positionlib.Geocentric

get_perigee_argument(tle_i=0) float[source]

Gets the argument of perigee (decimal degrees).

Parameters:

tle_i (int) – the TLE index.

Returns:

the argument of perigee

Return type:

float

get_repeat_cycle(max_delta_position: float | None = None, max_delta_velocity: float | None = None, min_elevation_angle: float | None = None, max_search_duration: timedelta | None = None, lazy_load: bool | None = None) timedelta[source]

Compute the orbit repeat cycle. Lazy-loads a previously-computed repeat cycle if available.

Parameters:
  • max_delta_position (float) – the maximum difference in position (m) allowed for a repeat.

  • max_delta_velocity (float) – the maximum difference in velocity (m/s) allowed for a repeat.

  • min_elevation_angle (float) – the minimum elevation angle (deg) for screening repeats.

  • max_search_duration (timedelta) – the maximum period of time to search for repeats.

  • lazy_load (bool) – True, if the previously-computed repeat cycle should be loaded.

Returns:

the repeat cycle duration (if it exists)

Return type:

timedelta

get_revolution_number_at_epoch(tle_i=0) int[source]

Gets the revolution number at epoch.

Parameters:

tle_i (int) – the TLE index.

Returns:

the revolution number

Return type:

timedelta

get_right_ascension_ascending_node(tle_i=0) float[source]

Gets the right ascension of ascending node (decimal degrees).

Parameters:

tle_i (int) – the TLE index.

Returns:

the right ascension of ascending node

Return type:

float

get_second_derivative_mean_motion(tle_i=0) float[source]

Gets the second derivative of mean motion.

Parameters:

tle_i (int) – the TLE index.

Returns:

the second derivative of mean motion

Return type:

float

get_semimajor_axis(tle_i=0) float[source]

Gets the semimajor axis (meters).

Parameters:

tle_i (int) – the TLE index.

Returns:

the semimajor axis

Return type:

float

get_tle_count() int[source]

Gets the number of TLEs specified for this orbit.

Returns:

the number of TLEs

Return type:

int

get_true_anomaly(tle_i=0) float[source]

Gets the true anomaly (decimal degrees).

Parameters:

tle_i (int) – the TLE index.

Returns:

the true anomaly

Return type:

float

partition_by_tle_index(start: datetime, end: datetime) Tuple[List[datetime], List[int]][source]

Partition a timeline based on closest TLE index.

Parameters:
  • start (datetime) – Start time.

  • end (datetime) – End time.

Returns:

list of partitioned times and assigned TLE indices

Return type:

Tuple[List[datetime], List[int]]

to_tle() TwoLineElements[source]

Converts this orbit to a two line elements representation.

Returns:

the two line elements orbit

Return type:

TwoLineElements

Circular Orbit

pydantic model tatc.schemas.CircularOrbit[source]

Orbit specification using Keplerian elements for elliptical motion – circular motion case.

Show JSON schema
{
   "title": "CircularOrbit",
   "description": "Orbit specification using Keplerian elements for elliptical motion -- circular motion case.",
   "type": "object",
   "properties": {
      "altitude": {
         "description": "Mean altitude (meters).",
         "title": "Altitude",
         "type": "number"
      },
      "true_anomaly": {
         "default": 0,
         "description": "True anomaly (degrees).",
         "exclusiveMaximum": 360,
         "minimum": 0,
         "title": "True Anomaly",
         "type": "number"
      },
      "epoch": {
         "anyOf": [
            {
               "format": "date-time",
               "type": "string"
            },
            {
               "type": "null"
            }
         ],
         "default": "2025-10-15T22:46:44.656850Z",
         "description": "Timestamp (epoch) of the initial orbital state.",
         "title": "Epoch"
      },
      "type": {
         "const": "circular",
         "default": "circular",
         "description": "Orbit type discriminator.",
         "title": "Type",
         "type": "string"
      },
      "inclination": {
         "default": 0,
         "description": "Inclination (degrees).",
         "exclusiveMaximum": 180,
         "minimum": 0,
         "title": "Inclination",
         "type": "number"
      },
      "right_ascension_ascending_node": {
         "default": 0,
         "description": "Right ascension of ascending node (degrees).",
         "exclusiveMaximum": 360,
         "minimum": 0,
         "title": "Right Ascension Ascending Node",
         "type": "number"
      }
   },
   "required": [
      "altitude"
   ]
}

Fields:
  • altitude (float)

  • epoch (datetime.datetime | None)

  • inclination (float)

  • right_ascension_ascending_node (float)

  • true_anomaly (float)

  • type (Literal['circular'])

field altitude: float [Required]

Mean altitude (meters).

field epoch: datetime | None = datetime.datetime(2025, 10, 15, 22, 46, 44, 656850, tzinfo=datetime.timezone.utc)

Timestamp (epoch) of the initial orbital state.

field inclination: float = 0

Inclination (degrees).

Constraints:
  • ge = 0

  • lt = 180

field right_ascension_ascending_node: float = 0

Right ascension of ascending node (degrees).

Constraints:
  • ge = 0

  • lt = 360

field true_anomaly: float = 0

True anomaly (degrees).

Constraints:
  • ge = 0

  • lt = 360

field type: Literal['circular'] = 'circular'

Orbit type discriminator.

get_derived_orbit(delta_mean_anomaly: float, delta_raan: float) CircularOrbit[source]

Gets a derived orbit with perturbations to the mean anomaly and right ascension of ascending node.

Parameters:
  • delta_mean_anomaly (float) – Delta mean anomaly (degrees).

  • delta_raan (float) – Delta right ascension of ascending node (degrees).

Returns:

the derived orbit

Return type:

CircularOrbit

get_mean_anomaly() float

Gets the mean anomaly (decimal degrees).

Returns:

the mean anomaly

Return type:

float

get_mean_motion() float

Gets the mean motion (revolutions per day).

Returns:

the mean motion

Return type:

float

get_orbit_period() timedelta

Gets the approximate orbit period.

Returns:

the orbit period

Return type:

timedelta

get_semimajor_axis() float

Gets the semimajor axis (meters).

Returns:

the semimajor axis

Return type:

float

to_tle(lazy_load: bool | None = None) TwoLineElements[source]

Converts this orbit to a two line elements representation.

Parameters:

lazy_load (bool) – True, if this tle should be lazy-loaded.

Returns:

the two line elements orbit

Return type:

TwoLineElements

Sun-synchronous Orbit

pydantic model tatc.schemas.SunSynchronousOrbit[source]

Orbit defined by sun synchronous parameters.

Show JSON schema
{
   "title": "SunSynchronousOrbit",
   "description": "Orbit defined by sun synchronous parameters.",
   "type": "object",
   "properties": {
      "altitude": {
         "description": "Mean altitude (meters).",
         "exclusiveMaximum": 5980991.228584941,
         "minimum": 0,
         "title": "Altitude",
         "type": "number"
      },
      "true_anomaly": {
         "default": 0,
         "description": "True anomaly (degrees).",
         "exclusiveMaximum": 360,
         "minimum": 0,
         "title": "True Anomaly",
         "type": "number"
      },
      "epoch": {
         "anyOf": [
            {
               "format": "date-time",
               "type": "string"
            },
            {
               "type": "null"
            }
         ],
         "default": "2025-10-15T22:46:44.656850Z",
         "description": "Timestamp (epoch) of the initial orbital state.",
         "title": "Epoch"
      },
      "type": {
         "const": "sso",
         "default": "sso",
         "description": "Orbit type discriminator.",
         "title": "Type",
         "type": "string"
      },
      "equator_crossing_time": {
         "description": "Equator crossing time (local solar time).",
         "format": "time",
         "title": "Equator Crossing Time",
         "type": "string"
      },
      "equator_crossing_ascending": {
         "default": true,
         "description": "True, if the equator crossing time is ascending (south-to-north).",
         "title": "Equator Crossing Ascending",
         "type": "boolean"
      }
   },
   "required": [
      "altitude",
      "equator_crossing_time"
   ]
}

Fields:
  • altitude (float)

  • epoch (datetime.datetime | None)

  • equator_crossing_ascending (bool)

  • equator_crossing_time (datetime.time)

  • true_anomaly (float)

  • type (Literal['sso'])

field altitude: float [Required]

Mean altitude (meters).

Constraints:
  • ge = 0

  • lt = 5980991.228584941

field epoch: datetime | None = datetime.datetime(2025, 10, 15, 22, 46, 44, 656850, tzinfo=datetime.timezone.utc)

Timestamp (epoch) of the initial orbital state.

field equator_crossing_ascending: bool = True

True, if the equator crossing time is ascending (south-to-north).

field equator_crossing_time: time [Required]

Equator crossing time (local solar time).

field true_anomaly: float = 0

True anomaly (degrees).

Constraints:
  • ge = 0

  • lt = 360

field type: Literal['sso'] = 'sso'

Orbit type discriminator.

get_derived_orbit(delta_mean_anomaly: float, delta_raan: float) CircularOrbit[source]

Gets a derived orbit with perturbations to the mean anomaly and right ascension of ascending node.

Parameters:
  • delta_mean_anomaly (float) – Delta mean anomaly (degrees).

  • delta_raan (float) – Delta right ascension of ascending node (degrees).

Returns:

the derived orbit

Return type:

CircularOrbit

get_inclination() float[source]

Gets the inclination (decimal degrees).

Returns:

the inclination

Return type:

float

get_mean_anomaly() float

Gets the mean anomaly (decimal degrees).

Returns:

the mean anomaly

Return type:

float

get_mean_motion() float

Gets the mean motion (revolutions per day).

Returns:

the mean motion

Return type:

float

get_orbit_period() timedelta

Gets the approximate orbit period.

Returns:

the orbit period

Return type:

timedelta

get_right_ascension_ascending_node() float[source]

Gets the right ascension of ascending node (decimal degrees).

Returns:

the right ascension of ascending node

Return type:

float

get_semimajor_axis() float

Gets the semimajor axis (meters).

Returns:

the semimajor axis

Return type:

float

to_tle(lazy_load: bool | None = None) TwoLineElements[source]

Converts this orbit to a two line elements representation.

Parameters:

lazy_load (bool) – True, if this tle should be lazy-loaded.

Returns:

the two line elements orbit

Return type:

TwoLineElements

Keplerian Orbit

pydantic model tatc.schemas.KeplerianOrbit[source]

Orbit specification using Keplerian elements for elliptical motion.

Show JSON schema
{
   "title": "KeplerianOrbit",
   "description": "Orbit specification using Keplerian elements for elliptical motion.",
   "type": "object",
   "properties": {
      "altitude": {
         "description": "Mean altitude (meters).",
         "title": "Altitude",
         "type": "number"
      },
      "true_anomaly": {
         "default": 0,
         "description": "True anomaly (degrees).",
         "exclusiveMaximum": 360,
         "minimum": 0,
         "title": "True Anomaly",
         "type": "number"
      },
      "epoch": {
         "anyOf": [
            {
               "format": "date-time",
               "type": "string"
            },
            {
               "type": "null"
            }
         ],
         "default": "2025-10-15T22:46:44.656850Z",
         "description": "Timestamp (epoch) of the initial orbital state.",
         "title": "Epoch"
      },
      "type": {
         "const": "keplerian",
         "default": "keplerian",
         "description": "Orbit type discriminator.",
         "title": "Type",
         "type": "string"
      },
      "inclination": {
         "default": 0,
         "description": "Inclination (degrees).",
         "exclusiveMaximum": 180,
         "minimum": 0,
         "title": "Inclination",
         "type": "number"
      },
      "right_ascension_ascending_node": {
         "default": 0,
         "description": "Right ascension of ascending node (degrees).",
         "exclusiveMaximum": 360,
         "minimum": 0,
         "title": "Right Ascension Ascending Node",
         "type": "number"
      },
      "eccentricity": {
         "default": 0,
         "description": "Eccentricity.",
         "minimum": 0,
         "title": "Eccentricity",
         "type": "number"
      },
      "perigee_argument": {
         "default": 0,
         "description": "Perigee argument (degrees).",
         "exclusiveMaximum": 360,
         "minimum": 0,
         "title": "Perigee Argument",
         "type": "number"
      }
   },
   "required": [
      "altitude"
   ]
}

Fields:
  • altitude ()

  • eccentricity (float)

  • epoch ()

  • inclination ()

  • perigee_argument (float)

  • right_ascension_ascending_node ()

  • true_anomaly ()

  • type (Literal['keplerian'])

field altitude: float [Required]

Mean altitude (meters).

field eccentricity: float = 0

Eccentricity.

Constraints:
  • ge = 0

field epoch: datetime | None = datetime.datetime(2025, 10, 15, 22, 46, 44, 656850, tzinfo=datetime.timezone.utc)

Timestamp (epoch) of the initial orbital state.

field inclination: float = 0

Inclination (degrees).

Constraints:
  • ge = 0

  • lt = 180

field perigee_argument: float = 0

Perigee argument (degrees).

Constraints:
  • ge = 0

  • lt = 360

field right_ascension_ascending_node: float = 0

Right ascension of ascending node (degrees).

Constraints:
  • ge = 0

  • lt = 360

field true_anomaly: float = 0

True anomaly (degrees).

Constraints:
  • ge = 0

  • lt = 360

field type: Literal['keplerian'] = 'keplerian'

Orbit type discriminator.

get_derived_orbit(delta_mean_anomaly: float, delta_raan: float) KeplerianOrbit[source]

Gets a derived orbit with perturbations to the mean anomaly and right ascension of ascending node.

Parameters:
  • delta_mean_anomaly (float) – Delta mean anomaly (degrees).

  • delta_raan (float) – Delta right ascension of ascending node (degrees).

Returns:

the derived orbit

Return type:

KeplerianOrbit

get_mean_anomaly() float[source]

Gets the mean anomaly (decimal degrees).

Returns:

the mean anomaly

Return type:

float

get_mean_motion() float

Gets the mean motion (revolutions per day).

Returns:

the mean motion

Return type:

float

get_orbit_period() timedelta

Gets the approximate orbit period.

Returns:

the orbit period

Return type:

timedelta

get_semimajor_axis() float

Gets the semimajor axis (meters).

Returns:

the semimajor axis

Return type:

float

to_tle(lazy_load: bool | None = None) TwoLineElements[source]

Converts this orbit to a two line elements representation.

Parameters:

lazy_load (bool) – True, if this tle should be lazy-loaded.

Returns:

the two line elements orbit

Return type:

TwoLineElements

Molniya Orbit

pydantic model tatc.schemas.MolniyaOrbit[source]

Orbit defined by Molniya parameters. The altitude parameter is considered the altitude at perigee.

Show JSON schema
{
   "title": "MolniyaOrbit",
   "description": "Orbit defined by Molniya parameters. The altitude parameter is considered the altitude at perigee.",
   "type": "object",
   "properties": {
      "altitude": {
         "description": "Mean altitude (meters).",
         "title": "Altitude",
         "type": "number"
      },
      "true_anomaly": {
         "default": 0,
         "description": "True anomaly (degrees).",
         "exclusiveMaximum": 360,
         "minimum": 0,
         "title": "True Anomaly",
         "type": "number"
      },
      "epoch": {
         "anyOf": [
            {
               "format": "date-time",
               "type": "string"
            },
            {
               "type": "null"
            }
         ],
         "default": "2025-10-15T22:46:44.656850Z",
         "description": "Timestamp (epoch) of the initial orbital state.",
         "title": "Epoch"
      },
      "type": {
         "const": "molniya",
         "default": "molniya",
         "description": "Orbit type discriminator.",
         "title": "Type",
         "type": "string"
      },
      "inclination": {
         "default": 0,
         "description": "Inclination (degrees).",
         "exclusiveMaximum": 180,
         "minimum": 0,
         "title": "Inclination",
         "type": "number"
      },
      "right_ascension_ascending_node": {
         "default": 0,
         "description": "Right ascension of ascending node (degrees).",
         "exclusiveMaximum": 360,
         "minimum": 0,
         "title": "Right Ascension Ascending Node",
         "type": "number"
      },
      "orbital_period": {
         "default": 43080,
         "description": "Orbital period (seconds).",
         "exclusiveMinimum": 0,
         "title": "Orbital Period",
         "type": "number"
      },
      "perigee_argument": {
         "default": 0,
         "description": "Perigee argument (degrees).",
         "exclusiveMaximum": 360,
         "minimum": 0,
         "title": "Perigee Argument",
         "type": "number"
      }
   },
   "required": [
      "altitude"
   ]
}

Fields:
  • altitude (float)

  • epoch (datetime.datetime | None)

  • inclination (float)

  • orbital_period (float)

  • perigee_argument (float)

  • right_ascension_ascending_node (float)

  • true_anomaly (float)

  • type (Literal['molniya'])

field altitude: float [Required]

Mean altitude (meters).

field epoch: datetime | None = datetime.datetime(2025, 10, 15, 22, 46, 44, 656850, tzinfo=datetime.timezone.utc)

Timestamp (epoch) of the initial orbital state.

field inclination: float = 0

Inclination (degrees).

Constraints:
  • ge = 0

  • lt = 180

field orbital_period: float = 43080

Orbital period (seconds).

Constraints:
  • gt = 0

field perigee_argument: float = 0

Perigee argument (degrees).

Constraints:
  • ge = 0

  • lt = 360

field right_ascension_ascending_node: float = 0

Right ascension of ascending node (degrees).

Constraints:
  • ge = 0

  • lt = 360

field true_anomaly: float = 0

True anomaly (degrees).

Constraints:
  • ge = 0

  • lt = 360

field type: Literal['molniya'] = 'molniya'

Orbit type discriminator.

get_derived_orbit(delta_mean_anomaly: float, delta_raan: float) MolniyaOrbit[source]

Gets a derived orbit with perturbations to the mean anomaly and right ascension of ascending node.

Parameters:
  • delta_mean_anomaly (float) – Delta mean anomaly (degrees).

  • delta_raan (float) – Delta right ascension of ascending node (degrees).

Returns:

the derived orbit

Return type:

Molniya Orbit

get_eccentricity() float[source]

Gets the eccentricity (float between 0 and 1).

Returns:

the eccentricity

Return type:

float

get_mean_anomaly() float[source]

Gets the mean anomaly (decimal degrees).

Returns:

the mean anomaly

Return type:

float

get_mean_motion() float

Gets the mean motion (revolutions per day).

Returns:

the mean motion

Return type:

float

get_orbit_period() timedelta

Gets the approximate orbit period.

Returns:

the orbit period

Return type:

timedelta

get_semimajor_axis() float[source]

Gets the semimajor axis (meters).

Returns:

the semimajor axis

Return type:

float

to_tle(lazy_load: bool | None = None) TwoLineElements[source]

Converts this orbit to a two line elements representation.

Parameters:

lazy_load (bool) – True, if this tle should be lazy-loaded.

Returns:

the two line elements orbit

Return type:

TwoLineElements

Tundra Orbit

pydantic model tatc.schemas.TundraOrbit[source]

Orbit defined by Tundra parameters, inherits the Molniya class.

Show JSON schema
{
   "title": "TundraOrbit",
   "description": "Orbit defined by Tundra parameters, inherits the Molniya class.",
   "type": "object",
   "properties": {
      "altitude": {
         "description": "Mean altitude (meters).",
         "title": "Altitude",
         "type": "number"
      },
      "true_anomaly": {
         "default": 0,
         "description": "True anomaly (degrees).",
         "exclusiveMaximum": 360,
         "minimum": 0,
         "title": "True Anomaly",
         "type": "number"
      },
      "epoch": {
         "anyOf": [
            {
               "format": "date-time",
               "type": "string"
            },
            {
               "type": "null"
            }
         ],
         "default": "2025-10-15T22:46:44.656850Z",
         "description": "Timestamp (epoch) of the initial orbital state.",
         "title": "Epoch"
      },
      "type": {
         "const": "tundra",
         "default": "tundra",
         "description": "Orbit type discriminator.",
         "title": "Type",
         "type": "string"
      },
      "inclination": {
         "default": 63.4,
         "description": "Inclination (degrees).",
         "exclusiveMaximum": 180,
         "minimum": 0,
         "title": "Inclination",
         "type": "number"
      },
      "right_ascension_ascending_node": {
         "default": 0,
         "description": "Right ascension of ascending node (degrees).",
         "exclusiveMaximum": 360,
         "minimum": 0,
         "title": "Right Ascension Ascending Node",
         "type": "number"
      },
      "orbital_period": {
         "default": 86400,
         "description": "Orbital period (seconds).",
         "exclusiveMinimum": 0,
         "title": "Orbital Period",
         "type": "number"
      },
      "perigee_argument": {
         "default": 270,
         "description": "Perigee argument (degrees).",
         "exclusiveMaximum": 360,
         "minimum": 0,
         "title": "Perigee Argument",
         "type": "number"
      },
      "eccentricity": {
         "default": 0.2,
         "description": "Eccentricity.",
         "minimum": 0,
         "title": "Eccentricity",
         "type": "number"
      }
   },
   "required": [
      "altitude"
   ]
}

Fields:
  • altitude ()

  • eccentricity (float)

  • epoch ()

  • inclination (float)

  • orbital_period (float)

  • perigee_argument (float)

  • right_ascension_ascending_node ()

  • true_anomaly ()

  • type (Literal['tundra'])

field altitude: float [Required]

Mean altitude (meters).

field eccentricity: float = 0.2

Eccentricity.

Constraints:
  • ge = 0

field epoch: datetime | None = datetime.datetime(2025, 10, 15, 22, 46, 44, 656850, tzinfo=datetime.timezone.utc)

Timestamp (epoch) of the initial orbital state.

field inclination: float = 63.4

Inclination (degrees).

Constraints:
  • ge = 0

  • lt = 180

field orbital_period: float = 86400

Orbital period (seconds).

Constraints:
  • gt = 0

field perigee_argument: float = 270

Perigee argument (degrees).

Constraints:
  • ge = 0

  • lt = 360

field right_ascension_ascending_node: float = 0

Right ascension of ascending node (degrees).

Constraints:
  • ge = 0

  • lt = 360

field true_anomaly: float = 0

True anomaly (degrees).

Constraints:
  • ge = 0

  • lt = 360

field type: Literal['tundra'] = 'tundra'

Orbit type discriminator.

get_derived_orbit(delta_mean_anomaly: float, delta_raan: float) TundraOrbit[source]

Gets a derived orbit with perturbations to the mean anomaly and right ascension of ascending node.

Parameters:
  • delta_mean_anomaly (float) – Delta mean anomaly (degrees).

  • delta_raan (float) – Delta right ascension of ascending node (degrees).

Returns:

the derived orbit

Return type:

Tundra Orbit

get_eccentricity()[source]

Gets the eccentricity (float between 0 and 1).

Returns:

the eccentricity

Return type:

float

get_mean_anomaly() float

Gets the mean anomaly (decimal degrees).

Returns:

the mean anomaly

Return type:

float

get_mean_motion() float

Gets the mean motion (revolutions per day).

Returns:

the mean motion

Return type:

float

get_orbit_period() timedelta

Gets the approximate orbit period.

Returns:

the orbit period

Return type:

timedelta

get_semimajor_axis() float

Gets the semimajor axis (meters).

Returns:

the semimajor axis

Return type:

float

to_tle(lazy_load: bool | None = None) TwoLineElements

Converts this orbit to a two line elements representation.

Parameters:

lazy_load (bool) – True, if this tle should be lazy-loaded.

Returns:

the two line elements orbit

Return type:

TwoLineElements