Space System Models

Instrument

pydantic model tatc.schemas.Instrument[source]

Remote sensing instrument.

Show JSON schema
{
   "title": "Instrument",
   "description": "Remote sensing instrument.",
   "type": "object",
   "properties": {
      "name": {
         "title": "Name",
         "description": "Instrument name.",
         "type": "string"
      },
      "field_of_regard": {
         "title": "Field Of Regard",
         "description": "Angular field (degrees) of possible observations (with pointing).",
         "default": 180,
         "exclusiveMinimum": 0,
         "maximum": 360,
         "example": 50,
         "type": "number"
      },
      "min_access_time": {
         "title": "Min Access Time",
         "description": "Minimum access (integration) time to record an observation.",
         "default": 0.0,
         "example": "0:00:10",
         "type": "number",
         "format": "time-delta"
      },
      "req_self_sunlit": {
         "title": "Req Self Sunlit",
         "description": "Required instrument sunlit state for valid observation (`True`: sunlit, `False`: eclipse, `None`: no requirement).",
         "type": "boolean"
      },
      "req_target_sunlit": {
         "title": "Req Target Sunlit",
         "description": "Required target sunlit state for valid observation (`True`: sunlit, `False`: eclipse, `None`: no requirement).",
         "type": "boolean"
      }
   },
   "required": [
      "name"
   ]
}

Fields
  • field_of_regard (float)

  • min_access_time (datetime.timedelta)

  • name (str)

  • req_self_sunlit (Optional[bool])

  • req_target_sunlit (Optional[bool])

field field_of_regard: float = 180

Angular field (degrees) of possible observations (with pointing).

Constraints
  • exclusiveMinimum = 0

  • maximum = 360

field min_access_time: timedelta = datetime.timedelta(0)

Minimum access (integration) time to record an observation.

field name: str [Required]

Instrument name.

field req_self_sunlit: Optional[bool] = None

Required instrument sunlit state for valid observation (True: sunlit, False: eclipse, None: no requirement).

field req_target_sunlit: Optional[bool] = None

Required target sunlit state for valid observation (True: sunlit, False: eclipse, None: no requirement).

get_min_elevation_angle(height: float) float[source]

Get the minimum elevation angle required to observe a point.

Parameters

height (float) – Height (meters) above surface of the observation.

Returns

The minimum elevation angle (degrees) for observation.

Return type

float

get_swath_width(height: float) float[source]

Gets the instrument swath width projected to the Earth’s surface.

Parameters

height (float) – Height (meters) above surface of the observation.

Returns

The observation diameter (meters).

Return type

float

is_valid_observation(sat: EarthSatellite, time: Time) bool[source]

Determines if an instrument can provide a valid observations.

Parameters
  • sat (EarthSatellite) – Satellite hosting this instrument.

  • time (Time) – Observation time(s).

Returns

True if instrument provides a valid observation, otherwise False.

Return type

bool

Satellite

pydantic model tatc.schemas.Satellite[source]

Single satellite.

Show JSON schema
{
   "title": "Satellite",
   "description": "Single satellite.",
   "type": "object",
   "properties": {
      "name": {
         "title": "Name",
         "description": "Space system name.",
         "example": "International Space Station",
         "type": "string"
      },
      "orbit": {
         "title": "Orbit",
         "description": "Orbit specification.",
         "anyOf": [
            {
               "$ref": "#/definitions/TwoLineElements"
            },
            {
               "$ref": "#/definitions/CircularOrbit"
            },
            {
               "$ref": "#/definitions/SunSynchronousOrbit"
            },
            {
               "$ref": "#/definitions/KeplerianOrbit"
            }
         ]
      },
      "instruments": {
         "title": "Instruments",
         "description": "List of assigned instruments.",
         "default": [],
         "type": "array",
         "items": {
            "$ref": "#/definitions/Instrument"
         }
      },
      "type": {
         "title": "Type",
         "description": "Space system type discriminator.",
         "default": "satellite",
         "enum": [
            "satellite"
         ],
         "type": "string"
      }
   },
   "required": [
      "name",
      "orbit"
   ],
   "definitions": {
      "TwoLineElements": {
         "title": "TwoLineElements",
         "description": "Orbit defined with standard two line elements.",
         "type": "object",
         "properties": {
            "type": {
               "title": "Type",
               "description": "Orbit type discriminator.",
               "default": "tle",
               "enum": [
                  "tle"
               ],
               "type": "string"
            },
            "tle": {
               "title": "Tle",
               "description": "Two line elements.",
               "example": [
                  "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"
               ],
               "minItems": 2,
               "maxItems": 2,
               "type": "array",
               "items": {
                  "type": "string"
               }
            }
         },
         "required": [
            "tle"
         ]
      },
      "CircularOrbit": {
         "title": "CircularOrbit",
         "description": "Orbit specification using Keplerian elements for elliptical motion -- circular motion case.",
         "type": "object",
         "properties": {
            "altitude": {
               "title": "Altitude",
               "description": "Mean altitude (meters).",
               "type": "number"
            },
            "true_anomaly": {
               "title": "True Anomaly",
               "description": "True anomaly (degrees).",
               "default": 0,
               "exclusiveMaximum": 360,
               "minimum": 0,
               "type": "number"
            },
            "epoch": {
               "title": "Epoch",
               "description": "Timestamp (epoch) of the initial orbital state.",
               "default": "2023-04-01T19:44:08.701722+00:00",
               "type": "string",
               "format": "date-time"
            },
            "type": {
               "title": "Type",
               "description": "Orbit type discriminator.",
               "default": "circular",
               "enum": [
                  "circular"
               ],
               "type": "string"
            },
            "inclination": {
               "title": "Inclination",
               "description": "Inclination (degrees).",
               "default": 0,
               "exclusiveMaximum": 180,
               "minimum": 0,
               "type": "number"
            },
            "right_ascension_ascending_node": {
               "title": "Right Ascension Ascending Node",
               "description": "Right ascension of ascending node (degrees).",
               "default": 0,
               "exclusiveMaximum": 360,
               "minimum": 0,
               "type": "number"
            }
         },
         "required": [
            "altitude"
         ]
      },
      "SunSynchronousOrbit": {
         "title": "SunSynchronousOrbit",
         "description": "Orbit defined by sun synchronous parameters.",
         "type": "object",
         "properties": {
            "altitude": {
               "title": "Altitude",
               "description": "Mean altitude (meters).",
               "exclusiveMaximum": 5980991.228584941,
               "minimum": 0,
               "type": "number"
            },
            "true_anomaly": {
               "title": "True Anomaly",
               "description": "True anomaly (degrees).",
               "default": 0,
               "exclusiveMaximum": 360,
               "minimum": 0,
               "type": "number"
            },
            "epoch": {
               "title": "Epoch",
               "description": "Timestamp (epoch) of the initial orbital state.",
               "default": "2023-04-01T19:44:08.701722+00:00",
               "type": "string",
               "format": "date-time"
            },
            "type": {
               "title": "Type",
               "description": "Orbit type discriminator.",
               "default": "sso",
               "enum": [
                  "sso"
               ],
               "type": "string"
            },
            "equator_crossing_time": {
               "title": "Equator Crossing Time",
               "description": "Equator crossing time (local solar time).",
               "type": "string",
               "format": "time"
            },
            "equator_crossing_ascending": {
               "title": "Equator Crossing Ascending",
               "description": "True, if the equator crossing time is ascending (south-to-north).",
               "default": true,
               "type": "boolean"
            }
         },
         "required": [
            "altitude",
            "equator_crossing_time"
         ]
      },
      "KeplerianOrbit": {
         "title": "KeplerianOrbit",
         "description": "Orbit specification using Keplerian elements for elliptical motion.",
         "type": "object",
         "properties": {
            "altitude": {
               "title": "Altitude",
               "description": "Mean altitude (meters).",
               "type": "number"
            },
            "true_anomaly": {
               "title": "True Anomaly",
               "description": "True anomaly (degrees).",
               "default": 0,
               "exclusiveMaximum": 360,
               "minimum": 0,
               "type": "number"
            },
            "epoch": {
               "title": "Epoch",
               "description": "Timestamp (epoch) of the initial orbital state.",
               "default": "2023-04-01T19:44:08.701722+00:00",
               "type": "string",
               "format": "date-time"
            },
            "type": {
               "title": "Type",
               "description": "Orbit type discriminator.",
               "default": "keplerian",
               "enum": [
                  "keplerian"
               ],
               "type": "string"
            },
            "inclination": {
               "title": "Inclination",
               "description": "Inclination (degrees).",
               "default": 0,
               "exclusiveMaximum": 180,
               "minimum": 0,
               "type": "number"
            },
            "right_ascension_ascending_node": {
               "title": "Right Ascension Ascending Node",
               "description": "Right ascension of ascending node (degrees).",
               "default": 0,
               "exclusiveMaximum": 360,
               "minimum": 0,
               "type": "number"
            },
            "eccentricity": {
               "title": "Eccentricity",
               "description": "Eccentricity.",
               "default": 0,
               "minimum": 0,
               "type": "number"
            },
            "perigee_argument": {
               "title": "Perigee Argument",
               "description": "Perigee argument (degrees).",
               "default": 0,
               "exclusiveMaximum": 360,
               "minimum": 0,
               "type": "number"
            }
         },
         "required": [
            "altitude"
         ]
      },
      "Instrument": {
         "title": "Instrument",
         "description": "Remote sensing instrument.",
         "type": "object",
         "properties": {
            "name": {
               "title": "Name",
               "description": "Instrument name.",
               "type": "string"
            },
            "field_of_regard": {
               "title": "Field Of Regard",
               "description": "Angular field (degrees) of possible observations (with pointing).",
               "default": 180,
               "exclusiveMinimum": 0,
               "maximum": 360,
               "example": 50,
               "type": "number"
            },
            "min_access_time": {
               "title": "Min Access Time",
               "description": "Minimum access (integration) time to record an observation.",
               "default": 0.0,
               "example": "0:00:10",
               "type": "number",
               "format": "time-delta"
            },
            "req_self_sunlit": {
               "title": "Req Self Sunlit",
               "description": "Required instrument sunlit state for valid observation (`True`: sunlit, `False`: eclipse, `None`: no requirement).",
               "type": "boolean"
            },
            "req_target_sunlit": {
               "title": "Req Target Sunlit",
               "description": "Required target sunlit state for valid observation (`True`: sunlit, `False`: eclipse, `None`: no requirement).",
               "type": "boolean"
            }
         },
         "required": [
            "name"
         ]
      }
   }
}

Fields
  • instruments (List[tatc.schemas.instrument.Instrument])

  • name (str)

  • orbit (Union[tatc.schemas.orbit.TwoLineElements, tatc.schemas.orbit.CircularOrbit, tatc.schemas.orbit.SunSynchronousOrbit, tatc.schemas.orbit.KeplerianOrbit])

  • type (Literal['satellite'])

field instruments: List[Instrument] = []

List of assigned instruments.

field name: str [Required]

Space system name.

field orbit: Union[TwoLineElements, CircularOrbit, SunSynchronousOrbit, KeplerianOrbit] [Required]

Orbit specification.

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

Space system type discriminator.

generate_members() List[Satellite][source]

Generate space system member satellites (returns a list containing this satellite).

Returns

the member satellites

Return type

List[Satellite]

Train Constellation

pydantic model tatc.schemas.TrainConstellation[source]

A constellation that arranges member satellites in sequence.

Show JSON schema
{
   "title": "TrainConstellation",
   "description": "A constellation that arranges member satellites in sequence.",
   "type": "object",
   "properties": {
      "name": {
         "title": "Name",
         "description": "Space system name.",
         "example": "International Space Station",
         "type": "string"
      },
      "orbit": {
         "title": "Orbit",
         "description": "Lead orbit for this constellation.",
         "anyOf": [
            {
               "$ref": "#/definitions/TwoLineElements"
            },
            {
               "$ref": "#/definitions/SunSynchronousOrbit"
            },
            {
               "$ref": "#/definitions/CircularOrbit"
            },
            {
               "$ref": "#/definitions/KeplerianOrbit"
            }
         ]
      },
      "instruments": {
         "title": "Instruments",
         "description": "List of assigned instruments.",
         "default": [],
         "type": "array",
         "items": {
            "$ref": "#/definitions/Instrument"
         }
      },
      "type": {
         "title": "Type",
         "description": "Space system type discriminator.",
         "default": "train",
         "enum": [
            "train"
         ],
         "type": "string"
      },
      "number_satellites": {
         "title": "Number Satellites",
         "description": "The count of the number of satellites.",
         "default": 1,
         "minimum": 1,
         "type": "integer"
      },
      "interval": {
         "title": "Interval",
         "description": "The local time interval between satellites in a train constellation.",
         "type": "number",
         "format": "time-delta"
      },
      "repeat_ground_track": {
         "title": "Repeat Ground Track",
         "description": "True, if the train satellites should repeat the same ground track.",
         "default": true,
         "type": "boolean"
      }
   },
   "required": [
      "name",
      "orbit",
      "interval"
   ],
   "definitions": {
      "TwoLineElements": {
         "title": "TwoLineElements",
         "description": "Orbit defined with standard two line elements.",
         "type": "object",
         "properties": {
            "type": {
               "title": "Type",
               "description": "Orbit type discriminator.",
               "default": "tle",
               "enum": [
                  "tle"
               ],
               "type": "string"
            },
            "tle": {
               "title": "Tle",
               "description": "Two line elements.",
               "example": [
                  "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"
               ],
               "minItems": 2,
               "maxItems": 2,
               "type": "array",
               "items": {
                  "type": "string"
               }
            }
         },
         "required": [
            "tle"
         ]
      },
      "SunSynchronousOrbit": {
         "title": "SunSynchronousOrbit",
         "description": "Orbit defined by sun synchronous parameters.",
         "type": "object",
         "properties": {
            "altitude": {
               "title": "Altitude",
               "description": "Mean altitude (meters).",
               "exclusiveMaximum": 5980991.228584941,
               "minimum": 0,
               "type": "number"
            },
            "true_anomaly": {
               "title": "True Anomaly",
               "description": "True anomaly (degrees).",
               "default": 0,
               "exclusiveMaximum": 360,
               "minimum": 0,
               "type": "number"
            },
            "epoch": {
               "title": "Epoch",
               "description": "Timestamp (epoch) of the initial orbital state.",
               "default": "2023-04-01T19:44:08.701722+00:00",
               "type": "string",
               "format": "date-time"
            },
            "type": {
               "title": "Type",
               "description": "Orbit type discriminator.",
               "default": "sso",
               "enum": [
                  "sso"
               ],
               "type": "string"
            },
            "equator_crossing_time": {
               "title": "Equator Crossing Time",
               "description": "Equator crossing time (local solar time).",
               "type": "string",
               "format": "time"
            },
            "equator_crossing_ascending": {
               "title": "Equator Crossing Ascending",
               "description": "True, if the equator crossing time is ascending (south-to-north).",
               "default": true,
               "type": "boolean"
            }
         },
         "required": [
            "altitude",
            "equator_crossing_time"
         ]
      },
      "CircularOrbit": {
         "title": "CircularOrbit",
         "description": "Orbit specification using Keplerian elements for elliptical motion -- circular motion case.",
         "type": "object",
         "properties": {
            "altitude": {
               "title": "Altitude",
               "description": "Mean altitude (meters).",
               "type": "number"
            },
            "true_anomaly": {
               "title": "True Anomaly",
               "description": "True anomaly (degrees).",
               "default": 0,
               "exclusiveMaximum": 360,
               "minimum": 0,
               "type": "number"
            },
            "epoch": {
               "title": "Epoch",
               "description": "Timestamp (epoch) of the initial orbital state.",
               "default": "2023-04-01T19:44:08.701722+00:00",
               "type": "string",
               "format": "date-time"
            },
            "type": {
               "title": "Type",
               "description": "Orbit type discriminator.",
               "default": "circular",
               "enum": [
                  "circular"
               ],
               "type": "string"
            },
            "inclination": {
               "title": "Inclination",
               "description": "Inclination (degrees).",
               "default": 0,
               "exclusiveMaximum": 180,
               "minimum": 0,
               "type": "number"
            },
            "right_ascension_ascending_node": {
               "title": "Right Ascension Ascending Node",
               "description": "Right ascension of ascending node (degrees).",
               "default": 0,
               "exclusiveMaximum": 360,
               "minimum": 0,
               "type": "number"
            }
         },
         "required": [
            "altitude"
         ]
      },
      "KeplerianOrbit": {
         "title": "KeplerianOrbit",
         "description": "Orbit specification using Keplerian elements for elliptical motion.",
         "type": "object",
         "properties": {
            "altitude": {
               "title": "Altitude",
               "description": "Mean altitude (meters).",
               "type": "number"
            },
            "true_anomaly": {
               "title": "True Anomaly",
               "description": "True anomaly (degrees).",
               "default": 0,
               "exclusiveMaximum": 360,
               "minimum": 0,
               "type": "number"
            },
            "epoch": {
               "title": "Epoch",
               "description": "Timestamp (epoch) of the initial orbital state.",
               "default": "2023-04-01T19:44:08.701722+00:00",
               "type": "string",
               "format": "date-time"
            },
            "type": {
               "title": "Type",
               "description": "Orbit type discriminator.",
               "default": "keplerian",
               "enum": [
                  "keplerian"
               ],
               "type": "string"
            },
            "inclination": {
               "title": "Inclination",
               "description": "Inclination (degrees).",
               "default": 0,
               "exclusiveMaximum": 180,
               "minimum": 0,
               "type": "number"
            },
            "right_ascension_ascending_node": {
               "title": "Right Ascension Ascending Node",
               "description": "Right ascension of ascending node (degrees).",
               "default": 0,
               "exclusiveMaximum": 360,
               "minimum": 0,
               "type": "number"
            },
            "eccentricity": {
               "title": "Eccentricity",
               "description": "Eccentricity.",
               "default": 0,
               "minimum": 0,
               "type": "number"
            },
            "perigee_argument": {
               "title": "Perigee Argument",
               "description": "Perigee argument (degrees).",
               "default": 0,
               "exclusiveMaximum": 360,
               "minimum": 0,
               "type": "number"
            }
         },
         "required": [
            "altitude"
         ]
      },
      "Instrument": {
         "title": "Instrument",
         "description": "Remote sensing instrument.",
         "type": "object",
         "properties": {
            "name": {
               "title": "Name",
               "description": "Instrument name.",
               "type": "string"
            },
            "field_of_regard": {
               "title": "Field Of Regard",
               "description": "Angular field (degrees) of possible observations (with pointing).",
               "default": 180,
               "exclusiveMinimum": 0,
               "maximum": 360,
               "example": 50,
               "type": "number"
            },
            "min_access_time": {
               "title": "Min Access Time",
               "description": "Minimum access (integration) time to record an observation.",
               "default": 0.0,
               "example": "0:00:10",
               "type": "number",
               "format": "time-delta"
            },
            "req_self_sunlit": {
               "title": "Req Self Sunlit",
               "description": "Required instrument sunlit state for valid observation (`True`: sunlit, `False`: eclipse, `None`: no requirement).",
               "type": "boolean"
            },
            "req_target_sunlit": {
               "title": "Req Target Sunlit",
               "description": "Required target sunlit state for valid observation (`True`: sunlit, `False`: eclipse, `None`: no requirement).",
               "type": "boolean"
            }
         },
         "required": [
            "name"
         ]
      }
   }
}

Fields
  • instruments (List[tatc.schemas.instrument.Instrument])

  • interval (datetime.timedelta)

  • name (str)

  • number_satellites (int)

  • orbit (Union[tatc.schemas.orbit.TwoLineElements, tatc.schemas.orbit.SunSynchronousOrbit, tatc.schemas.orbit.CircularOrbit, tatc.schemas.orbit.KeplerianOrbit])

  • repeat_ground_track (bool)

  • type (Literal['train'])

field instruments: List[Instrument] = []

List of assigned instruments.

field interval: timedelta [Required]

The local time interval between satellites in a train constellation.

field name: str [Required]

Space system name.

field number_satellites: int = 1

The count of the number of satellites.

Constraints
  • minimum = 1

field orbit: Union[TwoLineElements, SunSynchronousOrbit, CircularOrbit, KeplerianOrbit] [Required]

Lead orbit for this constellation.

field repeat_ground_track: bool = True

True, if the train satellites should repeat the same ground track.

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

Space system type discriminator.

generate_members() List[Satellite][source]

Generate space system member satellites.

Returns

the member satellites

Return type

List[Satellite]

get_delta_mean_anomaly() float[source]

Gets the difference in mean anomaly (decimal degrees) for adjacent member satellites.

Returns

the difference in mean anomaly

Return type

float

get_delta_raan() float[source]

Gets the difference in right ascension of ascending node (decimal degrees) for adjacent member satellites.

Returns

the difference in right ascension of ascending node

Return type

float

Walker Constellation

pydantic model tatc.schemas.WalkerConstellation[source]

A constellation that arranges member satellites following the Walker pattern.

Show JSON schema
{
   "title": "WalkerConstellation",
   "description": "A constellation that arranges member satellites following the Walker pattern.",
   "type": "object",
   "properties": {
      "name": {
         "title": "Name",
         "description": "Space system name.",
         "example": "International Space Station",
         "type": "string"
      },
      "orbit": {
         "title": "Orbit",
         "description": "Lead orbit for this constellation.",
         "anyOf": [
            {
               "$ref": "#/definitions/TwoLineElements"
            },
            {
               "$ref": "#/definitions/SunSynchronousOrbit"
            },
            {
               "$ref": "#/definitions/CircularOrbit"
            },
            {
               "$ref": "#/definitions/KeplerianOrbit"
            }
         ]
      },
      "instruments": {
         "title": "Instruments",
         "description": "List of assigned instruments.",
         "default": [],
         "type": "array",
         "items": {
            "$ref": "#/definitions/Instrument"
         }
      },
      "type": {
         "title": "Type",
         "description": "Space system type discriminator.",
         "default": "walker",
         "enum": [
            "walker"
         ],
         "type": "string"
      },
      "configuration": {
         "description": "Walker configuration.",
         "default": "delta",
         "allOf": [
            {
               "$ref": "#/definitions/WalkerConfiguration"
            }
         ]
      },
      "number_satellites": {
         "title": "Number Satellites",
         "description": "Number of satellites in the constellation.",
         "default": 1,
         "minimum": 1,
         "type": "integer"
      },
      "number_planes": {
         "title": "Number Planes",
         "description": "The number of equally-spaced planes in a Walker Delta constellation. Ranges from 1 to (number of satellites).",
         "default": 1,
         "minimum": 1,
         "type": "integer"
      },
      "relative_spacing": {
         "title": "Relative Spacing",
         "description": "Relative spacing of satellites between plans for a Walker Delta constellation. Ranges from 0 for equal true anomaly to (number of planes) - 1. For example, `relative_spacing=1` means the true anomaly is shifted by `360/number_satellites` between adjacent planes.",
         "default": 0,
         "minimum": 0,
         "type": "integer"
      }
   },
   "required": [
      "name",
      "orbit"
   ],
   "definitions": {
      "TwoLineElements": {
         "title": "TwoLineElements",
         "description": "Orbit defined with standard two line elements.",
         "type": "object",
         "properties": {
            "type": {
               "title": "Type",
               "description": "Orbit type discriminator.",
               "default": "tle",
               "enum": [
                  "tle"
               ],
               "type": "string"
            },
            "tle": {
               "title": "Tle",
               "description": "Two line elements.",
               "example": [
                  "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"
               ],
               "minItems": 2,
               "maxItems": 2,
               "type": "array",
               "items": {
                  "type": "string"
               }
            }
         },
         "required": [
            "tle"
         ]
      },
      "SunSynchronousOrbit": {
         "title": "SunSynchronousOrbit",
         "description": "Orbit defined by sun synchronous parameters.",
         "type": "object",
         "properties": {
            "altitude": {
               "title": "Altitude",
               "description": "Mean altitude (meters).",
               "exclusiveMaximum": 5980991.228584941,
               "minimum": 0,
               "type": "number"
            },
            "true_anomaly": {
               "title": "True Anomaly",
               "description": "True anomaly (degrees).",
               "default": 0,
               "exclusiveMaximum": 360,
               "minimum": 0,
               "type": "number"
            },
            "epoch": {
               "title": "Epoch",
               "description": "Timestamp (epoch) of the initial orbital state.",
               "default": "2023-04-01T19:44:08.701722+00:00",
               "type": "string",
               "format": "date-time"
            },
            "type": {
               "title": "Type",
               "description": "Orbit type discriminator.",
               "default": "sso",
               "enum": [
                  "sso"
               ],
               "type": "string"
            },
            "equator_crossing_time": {
               "title": "Equator Crossing Time",
               "description": "Equator crossing time (local solar time).",
               "type": "string",
               "format": "time"
            },
            "equator_crossing_ascending": {
               "title": "Equator Crossing Ascending",
               "description": "True, if the equator crossing time is ascending (south-to-north).",
               "default": true,
               "type": "boolean"
            }
         },
         "required": [
            "altitude",
            "equator_crossing_time"
         ]
      },
      "CircularOrbit": {
         "title": "CircularOrbit",
         "description": "Orbit specification using Keplerian elements for elliptical motion -- circular motion case.",
         "type": "object",
         "properties": {
            "altitude": {
               "title": "Altitude",
               "description": "Mean altitude (meters).",
               "type": "number"
            },
            "true_anomaly": {
               "title": "True Anomaly",
               "description": "True anomaly (degrees).",
               "default": 0,
               "exclusiveMaximum": 360,
               "minimum": 0,
               "type": "number"
            },
            "epoch": {
               "title": "Epoch",
               "description": "Timestamp (epoch) of the initial orbital state.",
               "default": "2023-04-01T19:44:08.701722+00:00",
               "type": "string",
               "format": "date-time"
            },
            "type": {
               "title": "Type",
               "description": "Orbit type discriminator.",
               "default": "circular",
               "enum": [
                  "circular"
               ],
               "type": "string"
            },
            "inclination": {
               "title": "Inclination",
               "description": "Inclination (degrees).",
               "default": 0,
               "exclusiveMaximum": 180,
               "minimum": 0,
               "type": "number"
            },
            "right_ascension_ascending_node": {
               "title": "Right Ascension Ascending Node",
               "description": "Right ascension of ascending node (degrees).",
               "default": 0,
               "exclusiveMaximum": 360,
               "minimum": 0,
               "type": "number"
            }
         },
         "required": [
            "altitude"
         ]
      },
      "KeplerianOrbit": {
         "title": "KeplerianOrbit",
         "description": "Orbit specification using Keplerian elements for elliptical motion.",
         "type": "object",
         "properties": {
            "altitude": {
               "title": "Altitude",
               "description": "Mean altitude (meters).",
               "type": "number"
            },
            "true_anomaly": {
               "title": "True Anomaly",
               "description": "True anomaly (degrees).",
               "default": 0,
               "exclusiveMaximum": 360,
               "minimum": 0,
               "type": "number"
            },
            "epoch": {
               "title": "Epoch",
               "description": "Timestamp (epoch) of the initial orbital state.",
               "default": "2023-04-01T19:44:08.701722+00:00",
               "type": "string",
               "format": "date-time"
            },
            "type": {
               "title": "Type",
               "description": "Orbit type discriminator.",
               "default": "keplerian",
               "enum": [
                  "keplerian"
               ],
               "type": "string"
            },
            "inclination": {
               "title": "Inclination",
               "description": "Inclination (degrees).",
               "default": 0,
               "exclusiveMaximum": 180,
               "minimum": 0,
               "type": "number"
            },
            "right_ascension_ascending_node": {
               "title": "Right Ascension Ascending Node",
               "description": "Right ascension of ascending node (degrees).",
               "default": 0,
               "exclusiveMaximum": 360,
               "minimum": 0,
               "type": "number"
            },
            "eccentricity": {
               "title": "Eccentricity",
               "description": "Eccentricity.",
               "default": 0,
               "minimum": 0,
               "type": "number"
            },
            "perigee_argument": {
               "title": "Perigee Argument",
               "description": "Perigee argument (degrees).",
               "default": 0,
               "exclusiveMaximum": 360,
               "minimum": 0,
               "type": "number"
            }
         },
         "required": [
            "altitude"
         ]
      },
      "Instrument": {
         "title": "Instrument",
         "description": "Remote sensing instrument.",
         "type": "object",
         "properties": {
            "name": {
               "title": "Name",
               "description": "Instrument name.",
               "type": "string"
            },
            "field_of_regard": {
               "title": "Field Of Regard",
               "description": "Angular field (degrees) of possible observations (with pointing).",
               "default": 180,
               "exclusiveMinimum": 0,
               "maximum": 360,
               "example": 50,
               "type": "number"
            },
            "min_access_time": {
               "title": "Min Access Time",
               "description": "Minimum access (integration) time to record an observation.",
               "default": 0.0,
               "example": "0:00:10",
               "type": "number",
               "format": "time-delta"
            },
            "req_self_sunlit": {
               "title": "Req Self Sunlit",
               "description": "Required instrument sunlit state for valid observation (`True`: sunlit, `False`: eclipse, `None`: no requirement).",
               "type": "boolean"
            },
            "req_target_sunlit": {
               "title": "Req Target Sunlit",
               "description": "Required target sunlit state for valid observation (`True`: sunlit, `False`: eclipse, `None`: no requirement).",
               "type": "boolean"
            }
         },
         "required": [
            "name"
         ]
      },
      "WalkerConfiguration": {
         "title": "WalkerConfiguration",
         "description": "Enumeration of different Walker constellation configurations.",
         "enum": [
            "delta",
            "star"
         ],
         "type": "string"
      }
   }
}

Fields
  • configuration (tatc.schemas.satellite.WalkerConfiguration)

  • instruments (List[tatc.schemas.instrument.Instrument])

  • name (str)

  • number_planes (int)

  • number_satellites (int)

  • orbit (Union[tatc.schemas.orbit.TwoLineElements, tatc.schemas.orbit.SunSynchronousOrbit, tatc.schemas.orbit.CircularOrbit, tatc.schemas.orbit.KeplerianOrbit])

  • relative_spacing (int)

  • type (Literal['walker'])

field configuration: WalkerConfiguration = WalkerConfiguration.DELTA

Walker configuration.

Validated by
  • number_planes_le_number_satellites

  • relative_spacing_lt_number_planes

field instruments: List[Instrument] = []

List of assigned instruments.

Validated by
  • number_planes_le_number_satellites

  • relative_spacing_lt_number_planes

field name: str [Required]

Space system name.

Validated by
  • number_planes_le_number_satellites

  • relative_spacing_lt_number_planes

field number_planes: int = 1

The number of equally-spaced planes in a Walker Delta constellation. Ranges from 1 to (number of satellites).

Constraints
  • minimum = 1

Validated by
  • number_planes_le_number_satellites

  • relative_spacing_lt_number_planes

field number_satellites: int = 1

Number of satellites in the constellation.

Constraints
  • minimum = 1

Validated by
  • number_planes_le_number_satellites

  • relative_spacing_lt_number_planes

field orbit: Union[TwoLineElements, SunSynchronousOrbit, CircularOrbit, KeplerianOrbit] [Required]

Lead orbit for this constellation.

Validated by
  • number_planes_le_number_satellites

  • relative_spacing_lt_number_planes

field relative_spacing: int = 0

Relative spacing of satellites between plans for a Walker Delta constellation. Ranges from 0 for equal true anomaly to (number of planes) - 1. For example, relative_spacing=1 means the true anomaly is shifted by 360/number_satellites between adjacent planes.

Constraints
  • minimum = 0

Validated by
  • number_planes_le_number_satellites

  • relative_spacing_lt_number_planes

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

Space system type discriminator.

Validated by
  • number_planes_le_number_satellites

  • relative_spacing_lt_number_planes

generate_members() List[Satellite][source]

Generate space system member satellites.

Returns

the member satellites

Return type

List[Satellite]

get_delta_mean_anomaly_between_planes() float[source]

Gets the difference in mean anomaly (decimal degrees) for adjacent member satellites between adjacent planes.

Returns

difference in mean anomaly

Return type

float

get_delta_mean_anomaly_within_planes() float[source]

Gets the difference in mean anomaly (decimal degrees) for adjacent member satellites within a single plane.

Returns

difference in mean anomaly

Return type

float

get_delta_raan_between_planes() float[source]

Gets the difference in right ascension of ascending node (decimal degrees) for adjacent planes of member satellites.

Returns

difference in right ascension of ascending node

Return type

float

get_satellites_per_plane() int[source]

Gets the (max) number of satellites per plane.

Returns

number of satellites per plane

Return type

int

validator number_planes_le_number_satellites  »  all fields[source]

Validates the number of planes given the number of satellites.

validator relative_spacing_lt_number_planes  »  all fields[source]

Validates the relative spacing given the number of planes.