keplemon 0.1.9__cp313-cp313-win_amd64.whl → 2.0.2__cp313-cp313-win_amd64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- keplemon/__init__.py +28 -10
- keplemon/__init__.pyi +24 -0
- keplemon/_keplemon.cp313-win_amd64.pyd +0 -0
- keplemon/bodies.pyi +190 -19
- keplemon/catalogs.pyi +6 -5
- keplemon/elements.py +16 -0
- keplemon/elements.pyi +161 -5
- keplemon/estimation.pyi +7 -4
- keplemon/events.py +12 -1
- keplemon/events.pyi +77 -3
- keplemon/exceptions.py +5 -0
- keplemon/propagation.py +3 -1
- keplemon/propagation.pyi +8 -0
- keplemon/saal/__init__.py +10 -0
- keplemon/saal/__init__.pyi +562 -0
- keplemon/saal/astro_func_interface.py +71 -0
- keplemon/saal/astro_func_interface.pyi +251 -0
- keplemon/saal/sat_state_interface.py +5 -0
- keplemon/saal/sat_state_interface.pyi +9 -0
- keplemon/saal/sgp4_prop_interface.py +7 -0
- keplemon/saal/sgp4_prop_interface.pyi +9 -0
- keplemon/saal/time_func_interface.py +17 -0
- keplemon/saal/time_func_interface.pyi +70 -0
- keplemon/time.py +25 -9
- keplemon/time.pyi +25 -1
- keplemon-2.0.2.dist-info/METADATA +21 -0
- {keplemon-0.1.9.dist-info → keplemon-2.0.2.dist-info}/RECORD +30 -21
- {keplemon-0.1.9.dist-info → keplemon-2.0.2.dist-info}/WHEEL +1 -1
- keplemon/saal.py +0 -15
- keplemon/saal.pyi +0 -8
- keplemon-0.1.9.dist-info/METADATA +0 -101
- /keplemon/{SGP4_Open_License.txt → assets/SGP4_Open_License.txt} +0 -0
- {keplemon-0.1.9.dist-info → keplemon-2.0.2.dist-info}/entry_points.txt +0 -0
keplemon/events.pyi
CHANGED
|
@@ -1,14 +1,42 @@
|
|
|
1
1
|
# flake8: noqa
|
|
2
|
-
from keplemon.time import Epoch
|
|
2
|
+
from keplemon.time import Epoch, TimeSpan
|
|
3
|
+
from keplemon.elements import HorizonState, CartesianVector, TopocentricElements
|
|
4
|
+
from keplemon.enums import ReferenceFrame
|
|
5
|
+
|
|
6
|
+
class FieldOfViewCandidate:
|
|
7
|
+
satellite_id: str
|
|
8
|
+
"""ID of the candidate satellite"""
|
|
9
|
+
|
|
10
|
+
direction: TopocentricElements
|
|
11
|
+
"""Measured direction to the candidate satellite in the sensor's topocentric frame"""
|
|
12
|
+
|
|
13
|
+
class FieldOfViewReport:
|
|
14
|
+
epoch: Epoch
|
|
15
|
+
"""UTC epoch of the field of view report"""
|
|
16
|
+
|
|
17
|
+
sensor_position: CartesianVector
|
|
18
|
+
"""TEME position of the sensor in the observatory's topocentric frame in **_kilometers_**"""
|
|
19
|
+
|
|
20
|
+
sensor_direction: TopocentricElements
|
|
21
|
+
"""Direction of the sensor in the observatory's topocentric frame"""
|
|
22
|
+
|
|
23
|
+
fov_angle: float
|
|
24
|
+
"""Field of view angle of the sensor in **_degrees_**"""
|
|
25
|
+
|
|
26
|
+
candidates: list[FieldOfViewCandidate]
|
|
27
|
+
"""List of candidate satellites within the field of view"""
|
|
28
|
+
|
|
29
|
+
reference_frame: ReferenceFrame
|
|
30
|
+
"""Reference frame of the output direction elements"""
|
|
3
31
|
|
|
4
32
|
class CloseApproach:
|
|
5
33
|
epoch: Epoch
|
|
6
34
|
"""UTC epoch of the close approach"""
|
|
7
35
|
|
|
8
|
-
primary_id:
|
|
36
|
+
primary_id: str
|
|
9
37
|
"""Satellite ID of the primary body in the close approach"""
|
|
10
38
|
|
|
11
|
-
secondary_id:
|
|
39
|
+
secondary_id: str
|
|
12
40
|
"""Satellite ID of the secondary body in the close approach"""
|
|
13
41
|
|
|
14
42
|
distance: float
|
|
@@ -27,3 +55,49 @@ class CloseApproachReport:
|
|
|
27
55
|
|
|
28
56
|
distance_threshold: float
|
|
29
57
|
def __init__(self, start: Epoch, end: Epoch, distance_threshold: float) -> None: ...
|
|
58
|
+
|
|
59
|
+
class HorizonAccess:
|
|
60
|
+
|
|
61
|
+
satellite_id: str
|
|
62
|
+
"""ID of the satellite for which the access is calculated"""
|
|
63
|
+
|
|
64
|
+
observatory_id: str
|
|
65
|
+
"""ID of the observatory for which the access is calculated"""
|
|
66
|
+
|
|
67
|
+
start: HorizonState
|
|
68
|
+
"""State of the satellite at the start of the access period"""
|
|
69
|
+
|
|
70
|
+
end: HorizonState
|
|
71
|
+
"""State of the satellite at the end of the access period"""
|
|
72
|
+
|
|
73
|
+
class HorizonAccessReport:
|
|
74
|
+
"""
|
|
75
|
+
Args:
|
|
76
|
+
start: UTC epoch of the start of the access report
|
|
77
|
+
end: UTC epoch of the end of the access report
|
|
78
|
+
min_elevation: Minimum elevation angle for access in **_degrees_**
|
|
79
|
+
min_duration: Minimum duration of access
|
|
80
|
+
"""
|
|
81
|
+
|
|
82
|
+
accesses: list[HorizonAccess]
|
|
83
|
+
"""List of horizon accesses found during the screening"""
|
|
84
|
+
|
|
85
|
+
elevation_threshold: float
|
|
86
|
+
"""Minimum elevation angle for access in **_degrees_**"""
|
|
87
|
+
|
|
88
|
+
start: Epoch
|
|
89
|
+
"""UTC epoch of the start of the access report"""
|
|
90
|
+
|
|
91
|
+
end: Epoch
|
|
92
|
+
"""UTC epoch of the end of the access report"""
|
|
93
|
+
|
|
94
|
+
duration_threshold: TimeSpan
|
|
95
|
+
"""Minimum duration of a valid access"""
|
|
96
|
+
|
|
97
|
+
def __init__(
|
|
98
|
+
self,
|
|
99
|
+
start: Epoch,
|
|
100
|
+
end: Epoch,
|
|
101
|
+
min_elevation: float,
|
|
102
|
+
min_duration: TimeSpan,
|
|
103
|
+
) -> None: ...
|
keplemon/exceptions.py
ADDED
keplemon/propagation.py
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
from keplemon._keplemon.propagation import ( # type: ignore
|
|
2
2
|
ForceProperties,
|
|
3
|
+
b_star_to_drag_coefficient,
|
|
4
|
+
drag_coefficient_to_b_star,
|
|
3
5
|
)
|
|
4
6
|
|
|
5
|
-
__all__ = ["ForceProperties"]
|
|
7
|
+
__all__ = ["ForceProperties", "b_star_to_drag_coefficient", "drag_coefficient_to_b_star"]
|
keplemon/propagation.pyi
CHANGED
|
@@ -17,3 +17,11 @@ class ForceProperties:
|
|
|
17
17
|
mean_motion_dot: float,
|
|
18
18
|
mean_motion_dot_dot: float,
|
|
19
19
|
) -> None: ...
|
|
20
|
+
|
|
21
|
+
def b_star_to_drag_coefficient(b_star: float) -> float:
|
|
22
|
+
"""Convert B* to drag coefficient."""
|
|
23
|
+
...
|
|
24
|
+
|
|
25
|
+
def drag_coefficient_to_b_star(drag_coefficient: float) -> float:
|
|
26
|
+
"""Convert drag coefficient to B*."""
|
|
27
|
+
...
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
from keplemon._keplemon.saal import ( # type: ignore
|
|
2
|
+
SensorInterface,
|
|
3
|
+
SAALSensor,
|
|
4
|
+
ObsInterface,
|
|
5
|
+
SAALObservation,
|
|
6
|
+
MainInterface,
|
|
7
|
+
TLEInterface,
|
|
8
|
+
)
|
|
9
|
+
|
|
10
|
+
__all__ = ["SensorInterface", "SAALSensor", "ObsInterface", "SAALObservation", "MainInterface", "TLEInterface"]
|
|
@@ -0,0 +1,562 @@
|
|
|
1
|
+
# flake8: noqa
|
|
2
|
+
from keplemon.enums import SAALKeyMode
|
|
3
|
+
|
|
4
|
+
class TLEInterface:
|
|
5
|
+
# TLE types (TLE ephemeris types) - They are different than ELTTYPE
|
|
6
|
+
# TLE SGP elset (Kozai mean motion)
|
|
7
|
+
TLETYPE_SGP: int
|
|
8
|
+
# TLE SGP4 elset (Brouwer mean motion)
|
|
9
|
+
TLETYPE_SGP4: int
|
|
10
|
+
# TLE SGP4-XP elset (Brouwer mean motion)
|
|
11
|
+
TLETYPE_XP: int
|
|
12
|
+
# TLE SP elset (osculating elements)
|
|
13
|
+
TLETYPE_SP: int
|
|
14
|
+
|
|
15
|
+
# Indexes of TLE data fields
|
|
16
|
+
# Satellite number
|
|
17
|
+
XF_TLE_SATNUM: int
|
|
18
|
+
# Security classification U: unclass, C: confidential, S: Secret
|
|
19
|
+
XF_TLE_CLASS: int
|
|
20
|
+
# Satellite name A8
|
|
21
|
+
XF_TLE_SATNAME: int
|
|
22
|
+
# Satellite's epoch time "YYYYJJJ.jjjjjjjj"
|
|
23
|
+
XF_TLE_EPOCH: int
|
|
24
|
+
# GP B* drag term (1/er) (not the same as XF_TLE_BTERM)
|
|
25
|
+
XF_TLE_BSTAR: int
|
|
26
|
+
# Satellite ephemeris type: 0=SGP, 2=SGP4, 4=SGP4-XP, 6=SP
|
|
27
|
+
XF_TLE_EPHTYPE: int
|
|
28
|
+
# Element set number
|
|
29
|
+
XF_TLE_ELSETNUM: int
|
|
30
|
+
# Orbit inclination (deg)
|
|
31
|
+
XF_TLE_INCLI: int
|
|
32
|
+
# Right ascension of asending node (deg)
|
|
33
|
+
XF_TLE_NODE: int
|
|
34
|
+
# Eccentricity
|
|
35
|
+
XF_TLE_ECCEN: int
|
|
36
|
+
# Argument of perigee (deg)
|
|
37
|
+
XF_TLE_OMEGA: int
|
|
38
|
+
# Mean anomaly (deg)
|
|
39
|
+
XF_TLE_MNANOM: int
|
|
40
|
+
# Mean motion (rev/day) (ephType=0: Kozai, ephType=2: Brouwer)
|
|
41
|
+
XF_TLE_MNMOTN: int
|
|
42
|
+
# Revolution number at epoch
|
|
43
|
+
XF_TLE_REVNUM: int
|
|
44
|
+
|
|
45
|
+
# GP Mean motion derivative (rev/day /2)
|
|
46
|
+
XF_TLE_NDOT: int
|
|
47
|
+
# GP Mean motion second derivative (rev/day**2 /6)
|
|
48
|
+
XF_TLE_NDOTDOT: int
|
|
49
|
+
# Solar radiation pressure GP (m2/kg)
|
|
50
|
+
XF_TLE_AGOMGP: int
|
|
51
|
+
|
|
52
|
+
# SP Radiation Pressure Coefficient
|
|
53
|
+
XF_TLE_SP_AGOM: int
|
|
54
|
+
# SP ballistic coefficient (m2/kg)
|
|
55
|
+
XF_TLE_SP_BTERM: int
|
|
56
|
+
# SP outgassing parameter (km/s2)
|
|
57
|
+
XF_TLE_SP_OGPARM: int
|
|
58
|
+
|
|
59
|
+
# Original satellite number
|
|
60
|
+
XF_TLE_ORGSATNUM: int
|
|
61
|
+
# GP ballistic coefficient (m2/kg) (not the same as XF_TLE_BSTAR)
|
|
62
|
+
XF_TLE_BTERM: int
|
|
63
|
+
# Time of last observation relative to epoch +/- fractional days
|
|
64
|
+
XF_TLE_OBSTIME: int
|
|
65
|
+
# Last calculated error growth rate (km/day)
|
|
66
|
+
XF_TLE_EGR: int
|
|
67
|
+
# Last calculated energy dissipation rate (w/kg)
|
|
68
|
+
XF_TLE_EDR: int
|
|
69
|
+
# Median Vismag
|
|
70
|
+
XF_TLE_VISMAG: int
|
|
71
|
+
# Median RCS - diameter in centimeters (cm)
|
|
72
|
+
XF_TLE_RCS: int
|
|
73
|
+
# Object Type (Payload, Rocket Body, Platform, Debris, Unknown)
|
|
74
|
+
XF_TLE_OBJTYPE: int
|
|
75
|
+
# Satellite name A12 (upto 12 character long)
|
|
76
|
+
XF_TLE_SATNAME_12: int
|
|
77
|
+
|
|
78
|
+
# Indexes of TLE numerical data in an array
|
|
79
|
+
# Line 1
|
|
80
|
+
# Satellite number
|
|
81
|
+
XA_TLE_SATNUM: int
|
|
82
|
+
# Satellite's epoch time in DS50UTC
|
|
83
|
+
XA_TLE_EPOCH: int
|
|
84
|
+
# GP Mean motion derivative (rev/day /2)
|
|
85
|
+
XA_TLE_NDOT: int
|
|
86
|
+
# GP Mean motion second derivative (rev/day**2 /6)
|
|
87
|
+
XA_TLE_NDOTDOT: int
|
|
88
|
+
# GP B* drag term (1/er)
|
|
89
|
+
XA_TLE_BSTAR: int
|
|
90
|
+
# Satellite ephemeris type: 0=SGP, 2=SGP4, 4=SGP4-XP, 6=SP
|
|
91
|
+
XA_TLE_EPHTYPE: int
|
|
92
|
+
|
|
93
|
+
# Line 2
|
|
94
|
+
# Orbit inclination (deg)
|
|
95
|
+
XA_TLE_INCLI: int
|
|
96
|
+
# Right ascension of asending node (deg)
|
|
97
|
+
XA_TLE_NODE: int
|
|
98
|
+
# Eccentricity
|
|
99
|
+
XA_TLE_ECCEN: int
|
|
100
|
+
# Argument of perigee (deg)
|
|
101
|
+
XA_TLE_OMEGA: int
|
|
102
|
+
# Mean anomaly (deg)
|
|
103
|
+
XA_TLE_MNANOM: int
|
|
104
|
+
# Mean motion (rev/day) (ephType=0, 4: Kozai, ephType=2: Brouwer)
|
|
105
|
+
XA_TLE_MNMOTN: int
|
|
106
|
+
# Revolution number at epoch
|
|
107
|
+
XA_TLE_REVNUM: int
|
|
108
|
+
# Element set number
|
|
109
|
+
XA_TLE_ELSETNUM: int
|
|
110
|
+
|
|
111
|
+
# CSV (or TLE-XP, ephemType=4) specific fields
|
|
112
|
+
# Original satellite number
|
|
113
|
+
XA_TLE_ORGSATNUM: int
|
|
114
|
+
# SP/SGP4-XP ballistic coefficient (m2/kg)
|
|
115
|
+
XA_TLE_BTERM: int
|
|
116
|
+
# Time of last observation relative to epoch +/- fractional days
|
|
117
|
+
XA_TLE_OBSTIME: int
|
|
118
|
+
# Last calculated error growth rate (km/day)
|
|
119
|
+
XA_TLE_EGR: int
|
|
120
|
+
# Last calculated energy dissipation rate (w/kg)
|
|
121
|
+
XA_TLE_EDR: int
|
|
122
|
+
# Median Vismag
|
|
123
|
+
XA_TLE_VISMAG: int
|
|
124
|
+
# Median RCS - diameter in centimeters (cm)
|
|
125
|
+
XA_TLE_RCS: int
|
|
126
|
+
|
|
127
|
+
# CSV (or TLE-XP, ephemType=4)
|
|
128
|
+
# Solar Radiation Pressure Coefficient GP (m2/kg)
|
|
129
|
+
XA_TLE_AGOMGP: int
|
|
130
|
+
|
|
131
|
+
# SP specific fields
|
|
132
|
+
# SP ballistic coefficient (m2/kg)
|
|
133
|
+
XA_TLE_SP_BTERM: int
|
|
134
|
+
# SP outgassing parameter (km/s2)
|
|
135
|
+
XA_TLE_SP_OGPARM: int
|
|
136
|
+
# SP Radiation Pressure Coefficient
|
|
137
|
+
XA_TLE_SP_AGOM: int
|
|
138
|
+
|
|
139
|
+
XA_TLE_SIZE: int
|
|
140
|
+
|
|
141
|
+
# Indexes of TLE text data in an array of chars
|
|
142
|
+
# Security classification of line 1 and line 2
|
|
143
|
+
XS_TLE_SECCLASS_1: int
|
|
144
|
+
# Satellite name
|
|
145
|
+
XS_TLE_SATNAME_12: int
|
|
146
|
+
# Object Type (Payload, Rocket Body, Platform, Debris, Unknown) - csv only
|
|
147
|
+
XS_TLE_OBJTYPE_11: int
|
|
148
|
+
|
|
149
|
+
XS_TLE_SIZE: int
|
|
150
|
+
|
|
151
|
+
# TLE's text data fields - new convention (start index, string length)
|
|
152
|
+
# Security classification of line 1 and line 2
|
|
153
|
+
XS_TLE_SECCLASS_0_1: int
|
|
154
|
+
# Satellite name
|
|
155
|
+
XS_TLE_SATNAME_1_12: int
|
|
156
|
+
# Object Type (Payload, Rocket Body, Platform, Debris, Unknown) - csv only
|
|
157
|
+
XS_TLE_OBJTYPE_13_1: int
|
|
158
|
+
|
|
159
|
+
XS_TLE_LENGTH: int
|
|
160
|
+
|
|
161
|
+
# Indexes of different TLE file's formats
|
|
162
|
+
# Original TLE format
|
|
163
|
+
XF_TLEFORM_ORG: int
|
|
164
|
+
# CSV format
|
|
165
|
+
XF_TLEFORM_CSV: int
|
|
166
|
+
@staticmethod
|
|
167
|
+
def get_check_sums(line_1: str, line_2: str) -> tuple[int, int]: ...
|
|
168
|
+
|
|
169
|
+
class MainInterface:
|
|
170
|
+
@staticmethod
|
|
171
|
+
def get_key_mode() -> SAALKeyMode: ...
|
|
172
|
+
@staticmethod
|
|
173
|
+
def set_key_mode(mode: SAALKeyMode) -> None: ...
|
|
174
|
+
|
|
175
|
+
class SAALSensor:
|
|
176
|
+
key: int
|
|
177
|
+
"""Unique key used to retrieve this sensor from the SensorInterface"""
|
|
178
|
+
number: int
|
|
179
|
+
"""3-digit sensor number"""
|
|
180
|
+
minimum_range: float | None
|
|
181
|
+
"""Minimum range used for access checks"""
|
|
182
|
+
maximum_range: float | None
|
|
183
|
+
"""Maximum range used for access checks"""
|
|
184
|
+
range_rate_limit: float | None
|
|
185
|
+
"""Range rate limit used for access checks"""
|
|
186
|
+
apply_range_limits: bool
|
|
187
|
+
"""Whether to apply range limits during access checks"""
|
|
188
|
+
mobile: bool
|
|
189
|
+
"""Whether the sensor is mobile"""
|
|
190
|
+
latitude: float
|
|
191
|
+
"""Geodetic latitude of the sensor (deg)"""
|
|
192
|
+
longitude: float
|
|
193
|
+
"""Geodetic longitude of the sensor (deg)"""
|
|
194
|
+
altitude: float
|
|
195
|
+
"""Altitude of the sensor (km)"""
|
|
196
|
+
astronomical_latitude: float
|
|
197
|
+
"""Astronomical latitude of the sensor (deg)"""
|
|
198
|
+
astronomical_longitude: float
|
|
199
|
+
"""Astronomical longitude of the sensor (deg)"""
|
|
200
|
+
azimuth_noise: float | None
|
|
201
|
+
"""Azimuth noise standard deviation (deg)"""
|
|
202
|
+
elevation_noise: float | None
|
|
203
|
+
"""Elevation noise standard deviation (deg)"""
|
|
204
|
+
range_noise: float | None
|
|
205
|
+
"""Range noise standard deviation (km)"""
|
|
206
|
+
range_rate_noise: float | None
|
|
207
|
+
"""Range rate noise standard deviation (km/s)"""
|
|
208
|
+
azimuth_rate_noise: float | None
|
|
209
|
+
"""Azimuth rate noise standard deviation (deg/s)"""
|
|
210
|
+
elevation_rate_noise: float | None
|
|
211
|
+
"""Elevation rate noise standard deviation (deg/s)"""
|
|
212
|
+
angular_noise: float | None
|
|
213
|
+
"""Combined angular noise standard deviation (deg)"""
|
|
214
|
+
description: str | None
|
|
215
|
+
"""24-character sensor description/narrative/notes"""
|
|
216
|
+
|
|
217
|
+
class SensorInterface:
|
|
218
|
+
|
|
219
|
+
XA_SEN_GEN_SENNUM: int
|
|
220
|
+
"""Index for sensor number in sensor data array"""
|
|
221
|
+
|
|
222
|
+
XA_SEN_GEN_MINRNG: int
|
|
223
|
+
"""Index for minimum range in sensor data array"""
|
|
224
|
+
|
|
225
|
+
XA_SEN_GEN_MAXRNG: int
|
|
226
|
+
"""Index for maximum range in sensor data array"""
|
|
227
|
+
|
|
228
|
+
XA_SEN_GEN_RRLIM: int
|
|
229
|
+
"""Index for range rate limit in sensor data array"""
|
|
230
|
+
|
|
231
|
+
XA_SEN_GEN_RNGLIMFLG: int
|
|
232
|
+
"""Index for range limit flag in sensor data array"""
|
|
233
|
+
|
|
234
|
+
XA_SEN_GEN_SMSEN: int
|
|
235
|
+
"""Index for sensor mobility flag in sensor data array"""
|
|
236
|
+
|
|
237
|
+
XA_SEN_GRN_LOCTYPE: int
|
|
238
|
+
"""Index for ground sensor location type in sensor data array"""
|
|
239
|
+
|
|
240
|
+
XA_SEN_GRN_POS1: int
|
|
241
|
+
"""Index for ground sensor position component 1 in sensor data array"""
|
|
242
|
+
|
|
243
|
+
XA_SEN_GRN_POS2: int
|
|
244
|
+
"""Index for ground sensor position component 2 in sensor data array"""
|
|
245
|
+
|
|
246
|
+
XA_SEN_GRN_POS3: int
|
|
247
|
+
"""Index for ground sensor position component 3 in sensor data array"""
|
|
248
|
+
|
|
249
|
+
XA_SEN_GRN_ASTROLAT: int
|
|
250
|
+
"""Index for ground sensor astronomical latitude in sensor data array"""
|
|
251
|
+
|
|
252
|
+
XA_SEN_GRN_ASTROLON: int
|
|
253
|
+
"""Index for ground sensor astronomical longitude in sensor data array"""
|
|
254
|
+
|
|
255
|
+
XA_SEN_GRN_ECITIME: int
|
|
256
|
+
"""Index for ground sensor ECI time in sensor data array"""
|
|
257
|
+
|
|
258
|
+
XA_SEN_GEN_ELSIGMA: int
|
|
259
|
+
"""Index for elevation noise standard deviation in sensor data array"""
|
|
260
|
+
|
|
261
|
+
XA_SEN_GEN_AZSIGMA: int
|
|
262
|
+
"""Index for azimuth noise standard deviation in sensor data array"""
|
|
263
|
+
|
|
264
|
+
XA_SEN_GEN_RGSIGMA: int
|
|
265
|
+
"""Index for range noise standard deviation in sensor data array"""
|
|
266
|
+
|
|
267
|
+
XA_SEN_GEN_RRSIGMA: int
|
|
268
|
+
"""Index for range rate noise standard deviation in sensor data array"""
|
|
269
|
+
|
|
270
|
+
XA_SEN_GEN_ARSIGMA: int
|
|
271
|
+
"""Index for azimuth rate noise standard deviation in sensor data array"""
|
|
272
|
+
|
|
273
|
+
XA_SEN_GEN_ERSIGMA: int
|
|
274
|
+
"""Index for elevation rate noise standard deviation in sensor data array"""
|
|
275
|
+
|
|
276
|
+
XA_SEN_GEN_ELBIAS: int
|
|
277
|
+
"""Index for elevation bias in sensor data array"""
|
|
278
|
+
|
|
279
|
+
XA_SEN_GEN_AZBIAS: int
|
|
280
|
+
"""Index for azimuth bias in sensor data array"""
|
|
281
|
+
|
|
282
|
+
XA_SEN_GEN_RGBIAS: int
|
|
283
|
+
"""Index for range bias in sensor data array"""
|
|
284
|
+
|
|
285
|
+
XA_SEN_GEN_RRBIAS: int
|
|
286
|
+
"""Index for range rate bias in sensor data array"""
|
|
287
|
+
|
|
288
|
+
XA_SEN_GEN_TIMEBIAS: int
|
|
289
|
+
"""Index for time bias in sensor data array"""
|
|
290
|
+
|
|
291
|
+
XA_SEN_SIZE: int
|
|
292
|
+
"""Array size for sensor data"""
|
|
293
|
+
|
|
294
|
+
@staticmethod
|
|
295
|
+
def get_astronomical_ll(sen_key: int) -> list[float]:
|
|
296
|
+
"""Get the sensor's astronomical latitude and longitude
|
|
297
|
+
|
|
298
|
+
!!! warning
|
|
299
|
+
West is positive longitude in this system.
|
|
300
|
+
|
|
301
|
+
Args:
|
|
302
|
+
sen_key (int): The sensor key in the SAAL binary tree
|
|
303
|
+
|
|
304
|
+
Returns:
|
|
305
|
+
[latitude (deg), longitude (deg)]
|
|
306
|
+
"""
|
|
307
|
+
|
|
308
|
+
@staticmethod
|
|
309
|
+
def get_lla(sen_key: int) -> list[float]: ...
|
|
310
|
+
@staticmethod
|
|
311
|
+
def get_loaded_keys() -> list[int]: ...
|
|
312
|
+
@staticmethod
|
|
313
|
+
def load_card(card: str) -> None: ...
|
|
314
|
+
@staticmethod
|
|
315
|
+
def remove_key(sen_key: int) -> None: ...
|
|
316
|
+
@staticmethod
|
|
317
|
+
def count_loaded() -> int: ...
|
|
318
|
+
@staticmethod
|
|
319
|
+
def get(sen_key: int) -> "SAALSensor": ...
|
|
320
|
+
@staticmethod
|
|
321
|
+
def load_file(file_path: str) -> None: ...
|
|
322
|
+
@staticmethod
|
|
323
|
+
def remove_all() -> None: ...
|
|
324
|
+
@staticmethod
|
|
325
|
+
def get_all() -> list["SAALSensor"]: ...
|
|
326
|
+
@staticmethod
|
|
327
|
+
def prune_missing_locations() -> None: ...
|
|
328
|
+
@staticmethod
|
|
329
|
+
def get_arrays(sen_key: int) -> tuple[list[float], str]: ...
|
|
330
|
+
|
|
331
|
+
class SAALObservation:
|
|
332
|
+
|
|
333
|
+
security_character: str
|
|
334
|
+
"""Classification of the observation"""
|
|
335
|
+
|
|
336
|
+
satellite_number: int
|
|
337
|
+
"""Identifier for the target"""
|
|
338
|
+
|
|
339
|
+
sensor_number: int
|
|
340
|
+
"""Identifier for the observer"""
|
|
341
|
+
|
|
342
|
+
epoch_ds50utc: float
|
|
343
|
+
"""Epoch of the observation in DS50 UTC format"""
|
|
344
|
+
|
|
345
|
+
elevation_or_declination: float
|
|
346
|
+
"""TEME Elevation or Declination in degrees"""
|
|
347
|
+
|
|
348
|
+
azimuth_or_right_ascension: float
|
|
349
|
+
"""TEME Azimuth or Right Ascension in degrees"""
|
|
350
|
+
|
|
351
|
+
slant_range: float
|
|
352
|
+
"""Range from observer to target in kilometers"""
|
|
353
|
+
|
|
354
|
+
range_rate: float
|
|
355
|
+
"""Rate of change of slant range in kilometers/second"""
|
|
356
|
+
|
|
357
|
+
elevation_rate: float
|
|
358
|
+
"""Rate of change of elevation/declination in degrees/second"""
|
|
359
|
+
|
|
360
|
+
azimuth_rate: float
|
|
361
|
+
"""Rate of change of azimuth/right ascension in degrees/second"""
|
|
362
|
+
|
|
363
|
+
range_acceleration: float
|
|
364
|
+
"""Acceleration of slant range in kilometers/second^2"""
|
|
365
|
+
|
|
366
|
+
observation_type: str
|
|
367
|
+
"""B3 type of observation"""
|
|
368
|
+
|
|
369
|
+
track_position_indicator: int
|
|
370
|
+
"""Indicator of track position (3==beginning, 4==middle, 5==end)"""
|
|
371
|
+
|
|
372
|
+
association_status: int
|
|
373
|
+
"""Association status of the observation"""
|
|
374
|
+
|
|
375
|
+
site_tag: int
|
|
376
|
+
"""Identifier for the target as labeled by the observer"""
|
|
377
|
+
|
|
378
|
+
spadoc_tag: int
|
|
379
|
+
"""Identifier for the target as labeled by SPADOC"""
|
|
380
|
+
|
|
381
|
+
position: list[float]
|
|
382
|
+
"""Sensor position in TEME coordinates (X, Y, Z) in kilometers"""
|
|
383
|
+
|
|
384
|
+
def __init__(self, b3_string: str) -> None:
|
|
385
|
+
"""Parser for B3 observation strings"""
|
|
386
|
+
|
|
387
|
+
class ObsInterface:
|
|
388
|
+
"""Interface for working with observation data"""
|
|
389
|
+
|
|
390
|
+
XA_OBS_SECCLASS: int
|
|
391
|
+
"""Index for security classification (1=Unclassified, 2=Confidential, 3=Secret)"""
|
|
392
|
+
|
|
393
|
+
XA_OBS_SATNUM: int
|
|
394
|
+
"""Index for satellite number"""
|
|
395
|
+
|
|
396
|
+
XA_OBS_SENNUM: int
|
|
397
|
+
"""Index for sensor number"""
|
|
398
|
+
|
|
399
|
+
XA_OBS_DS50UTC: int
|
|
400
|
+
"""Index for observation time in days since 1950 UTC"""
|
|
401
|
+
|
|
402
|
+
XA_OBS_OBSTYPE: int
|
|
403
|
+
"""Index for observation type"""
|
|
404
|
+
|
|
405
|
+
XA_OBS_ELORDEC: int
|
|
406
|
+
"""Index for elevation (ob type 1,2,3,4,8) or declination (ob type 5,9) (deg)"""
|
|
407
|
+
|
|
408
|
+
XA_OBS_AZORRA: int
|
|
409
|
+
"""Index for azimuth (ob type 1,2,3,4,8) or right ascension (ob type 5,9) (deg)"""
|
|
410
|
+
|
|
411
|
+
XA_OBS_RANGE: int
|
|
412
|
+
"""Index for range (km)"""
|
|
413
|
+
|
|
414
|
+
XA_OBS_RANGERATE: int
|
|
415
|
+
"""Index for range rate (km/s) for non-optical obs type"""
|
|
416
|
+
|
|
417
|
+
XA_OBS_ELRATE: int
|
|
418
|
+
"""Index for elevation rate (deg/s)"""
|
|
419
|
+
|
|
420
|
+
XA_OBS_AZRATE: int
|
|
421
|
+
"""Index for azimuth rate (deg/s)"""
|
|
422
|
+
|
|
423
|
+
XA_OBS_RANGEACCEL: int
|
|
424
|
+
"""Index for range acceleration (km/s^2)"""
|
|
425
|
+
|
|
426
|
+
XA_OBS_TRACKIND: int
|
|
427
|
+
"""Index for track position indicator (3=start track, 4=in track, 5=end track)"""
|
|
428
|
+
|
|
429
|
+
XA_OBS_ASTAT: int
|
|
430
|
+
"""Index for association status assigned by SPADOC"""
|
|
431
|
+
|
|
432
|
+
XA_OBS_SITETAG: int
|
|
433
|
+
"""Index for original satellite number"""
|
|
434
|
+
|
|
435
|
+
XA_OBS_SPADOCTAG: int
|
|
436
|
+
"""Index for SPADOC-assigned tag number"""
|
|
437
|
+
|
|
438
|
+
XA_OBS_POSX: int
|
|
439
|
+
"""Index for position X/ECI or X/EFG (km)"""
|
|
440
|
+
|
|
441
|
+
XA_OBS_POSY: int
|
|
442
|
+
"""Index for position Y/ECI or Y/EFG (km)"""
|
|
443
|
+
|
|
444
|
+
XA_OBS_POSZ: int
|
|
445
|
+
"""Index for position Z/ECI or Z/EFG (km)"""
|
|
446
|
+
|
|
447
|
+
XA_OBS_VELX: int
|
|
448
|
+
"""Index for velocity X/ECI (km/s) or Edot/EFG (km) for ob type 7 TTY"""
|
|
449
|
+
|
|
450
|
+
XA_OBS_VELY: int
|
|
451
|
+
"""Index for velocity Y/ECI (km/s) or Fdot/EFG (km) for ob type 7 TTY"""
|
|
452
|
+
|
|
453
|
+
XA_OBS_VELZ: int
|
|
454
|
+
"""Index for velocity Z/ECI (km/s) or Gdot/EFG (km) for ob type 7 TTY"""
|
|
455
|
+
|
|
456
|
+
XA_OBS_YROFEQNX: int
|
|
457
|
+
"""Index for year of equinox indicator for obs type 5/9 (0=Time of obs, 1=0 Jan of date, 2=J2000, 3=B1950)"""
|
|
458
|
+
|
|
459
|
+
XA_OBS_ABERRATION: int
|
|
460
|
+
"""Index for aberration indicator (0=not corrected, 1=corrected)"""
|
|
461
|
+
|
|
462
|
+
XA_OBS_AZORRABIAS: int
|
|
463
|
+
"""Index for AZ/RA bias (deg)"""
|
|
464
|
+
|
|
465
|
+
XA_OBS_ELORDECBIAS: int
|
|
466
|
+
"""Index for EL/DEC bias (deg)"""
|
|
467
|
+
|
|
468
|
+
XA_OBS_RGBIAS: int
|
|
469
|
+
"""Index for range bias (km)"""
|
|
470
|
+
|
|
471
|
+
XA_OBS_RRBIAS: int
|
|
472
|
+
"""Index for range-rate bias (km/sec)"""
|
|
473
|
+
|
|
474
|
+
XA_OBS_TIMEBIAS: int
|
|
475
|
+
"""Index for time bias (sec)"""
|
|
476
|
+
|
|
477
|
+
XA_OBS_RAZORRABIAS: int
|
|
478
|
+
"""Index for AZ/RA rate bias (deg/sec)"""
|
|
479
|
+
|
|
480
|
+
XA_OBS_RELORDECBIAS: int
|
|
481
|
+
"""Index for EL/DEC rate bias (deg/sec)"""
|
|
482
|
+
|
|
483
|
+
XA_OBS_SIGMATYPE: int
|
|
484
|
+
"""Index for individual obs's sigmas type (0=N/A, 6=6 elements, 21=21 elements, 7=CSV obs)"""
|
|
485
|
+
|
|
486
|
+
XA_OBS_SIGMAEL1: int
|
|
487
|
+
"""Index for sigma covariance element 1 - 6 elements - Az sigma"""
|
|
488
|
+
|
|
489
|
+
XA_OBS_SIGMAEL2: int
|
|
490
|
+
"""Index for sigma covariance element 2 - 6 elements - El sigma"""
|
|
491
|
+
|
|
492
|
+
XA_OBS_SIGMAEL3: int
|
|
493
|
+
"""Index for sigma covariance element 3 - 6 elements - Range sigma"""
|
|
494
|
+
|
|
495
|
+
XA_OBS_SIGMAEL4: int
|
|
496
|
+
"""Index for sigma covariance element 4 - 6 elements - Range rate sigma"""
|
|
497
|
+
|
|
498
|
+
XA_OBS_SIGMAEL5: int
|
|
499
|
+
"""Index for sigma covariance element 5 - 6 elements - Az rate sigma"""
|
|
500
|
+
|
|
501
|
+
XA_OBS_SIGMAEL6: int
|
|
502
|
+
"""Index for sigma covariance element 6 - 6 elements - El rate sigma"""
|
|
503
|
+
|
|
504
|
+
XA_OBS_SIGMAEL7: int
|
|
505
|
+
"""Index for sigma covariance element 7"""
|
|
506
|
+
|
|
507
|
+
XA_OBS_SIGMAEL8: int
|
|
508
|
+
"""Index for sigma covariance element 8"""
|
|
509
|
+
|
|
510
|
+
XA_OBS_SIGMAEL9: int
|
|
511
|
+
"""Index for sigma covariance element 9"""
|
|
512
|
+
|
|
513
|
+
XA_OBS_SIGMAEL10: int
|
|
514
|
+
"""Index for sigma covariance element 10"""
|
|
515
|
+
|
|
516
|
+
XA_OBS_SIGMAEL11: int
|
|
517
|
+
"""Index for sigma covariance element 11"""
|
|
518
|
+
|
|
519
|
+
XA_OBS_SIGMAEL12: int
|
|
520
|
+
"""Index for sigma covariance element 12"""
|
|
521
|
+
|
|
522
|
+
XA_OBS_SIGMAEL13: int
|
|
523
|
+
"""Index for sigma covariance element 13"""
|
|
524
|
+
|
|
525
|
+
XA_OBS_SIGMAEL14: int
|
|
526
|
+
"""Index for sigma covariance element 14"""
|
|
527
|
+
|
|
528
|
+
XA_OBS_SIGMAEL15: int
|
|
529
|
+
"""Index for sigma covariance element 15"""
|
|
530
|
+
|
|
531
|
+
XA_OBS_SIGMAEL16: int
|
|
532
|
+
"""Index for sigma covariance element 16"""
|
|
533
|
+
|
|
534
|
+
XA_OBS_SIGMAEL17: int
|
|
535
|
+
"""Index for sigma covariance element 17"""
|
|
536
|
+
|
|
537
|
+
XA_OBS_SIGMAEL18: int
|
|
538
|
+
"""Index for sigma covariance element 18"""
|
|
539
|
+
|
|
540
|
+
XA_OBS_SIGMAEL19: int
|
|
541
|
+
"""Index for sigma covariance element 19"""
|
|
542
|
+
|
|
543
|
+
XA_OBS_SIGMAEL20: int
|
|
544
|
+
"""Index for sigma covariance element 20"""
|
|
545
|
+
|
|
546
|
+
XA_OBS_SIGMAEL21: int
|
|
547
|
+
"""Index for sigma covariance element 21"""
|
|
548
|
+
|
|
549
|
+
XA_OBS_SIZE: int
|
|
550
|
+
"""Array size for observation data"""
|
|
551
|
+
@staticmethod
|
|
552
|
+
def get_csv_from_b3() -> str: ...
|
|
553
|
+
@staticmethod
|
|
554
|
+
def load_from_b3(b3_string: str) -> int: ...
|
|
555
|
+
@staticmethod
|
|
556
|
+
def remove_key(key: int) -> None: ...
|
|
557
|
+
@staticmethod
|
|
558
|
+
def get_field(key: int, field: str) -> str: ...
|
|
559
|
+
@staticmethod
|
|
560
|
+
def get_array(key: int) -> list[float]: ...
|
|
561
|
+
@staticmethod
|
|
562
|
+
def count_loaded() -> int: ...
|