open-space-toolkit-astrodynamics 17.2.0__py312-none-manylinux2014_x86_64.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.
Files changed (151) hide show
  1. open_space_toolkit_astrodynamics-17.2.0.dist-info/METADATA +30 -0
  2. open_space_toolkit_astrodynamics-17.2.0.dist-info/RECORD +151 -0
  3. open_space_toolkit_astrodynamics-17.2.0.dist-info/WHEEL +5 -0
  4. open_space_toolkit_astrodynamics-17.2.0.dist-info/top_level.txt +1 -0
  5. open_space_toolkit_astrodynamics-17.2.0.dist-info/zip-safe +1 -0
  6. ostk/__init__.py +1 -0
  7. ostk/astrodynamics/OpenSpaceToolkitAstrodynamicsPy.cpython-312-x86_64-linux-gnu.so +0 -0
  8. ostk/astrodynamics/__init__.py +11 -0
  9. ostk/astrodynamics/__init__.pyi +720 -0
  10. ostk/astrodynamics/access.pyi +577 -0
  11. ostk/astrodynamics/conjunction/__init__.pyi +121 -0
  12. ostk/astrodynamics/conjunction/close_approach.pyi +89 -0
  13. ostk/astrodynamics/conjunction/message/__init__.pyi +3 -0
  14. ostk/astrodynamics/conjunction/message/ccsds.pyi +705 -0
  15. ostk/astrodynamics/converters.py +130 -0
  16. ostk/astrodynamics/converters.pyi +58 -0
  17. ostk/astrodynamics/data/__init__.pyi +3 -0
  18. ostk/astrodynamics/data/provider.pyi +22 -0
  19. ostk/astrodynamics/dataframe.py +597 -0
  20. ostk/astrodynamics/display.py +281 -0
  21. ostk/astrodynamics/dynamics.pyi +311 -0
  22. ostk/astrodynamics/eclipse.pyi +70 -0
  23. ostk/astrodynamics/estimator.pyi +268 -0
  24. ostk/astrodynamics/event_condition.pyi +910 -0
  25. ostk/astrodynamics/flight/__init__.pyi +626 -0
  26. ostk/astrodynamics/flight/profile/__init__.pyi +99 -0
  27. ostk/astrodynamics/flight/profile/model.pyi +179 -0
  28. ostk/astrodynamics/flight/system.pyi +268 -0
  29. ostk/astrodynamics/guidance_law.pyi +416 -0
  30. ostk/astrodynamics/libopen-space-toolkit-astrodynamics.so.17 +0 -0
  31. ostk/astrodynamics/pytrajectory/__init__.py +1 -0
  32. ostk/astrodynamics/pytrajectory/__init__.pyi +3 -0
  33. ostk/astrodynamics/pytrajectory/pystate.py +263 -0
  34. ostk/astrodynamics/pytrajectory/pystate.pyi +66 -0
  35. ostk/astrodynamics/solver.pyi +432 -0
  36. ostk/astrodynamics/test/__init__.py +1 -0
  37. ostk/astrodynamics/test/access/__init__.py +1 -0
  38. ostk/astrodynamics/test/access/test_generator.py +319 -0
  39. ostk/astrodynamics/test/access/test_visibility_criterion.py +201 -0
  40. ostk/astrodynamics/test/conftest.py +119 -0
  41. ostk/astrodynamics/test/conjunction/close_approach/__init__.py +0 -0
  42. ostk/astrodynamics/test/conjunction/close_approach/test_generator.py +228 -0
  43. ostk/astrodynamics/test/conjunction/message/ccsds/__init__.py +1 -0
  44. ostk/astrodynamics/test/conjunction/message/ccsds/conftest.py +325 -0
  45. ostk/astrodynamics/test/conjunction/message/ccsds/data/cdm.json +303 -0
  46. ostk/astrodynamics/test/conjunction/message/ccsds/test_cdm.py +416 -0
  47. ostk/astrodynamics/test/conjunction/test_close_approach.py +244 -0
  48. ostk/astrodynamics/test/data/provider/test_off_nadir.py +58 -0
  49. ostk/astrodynamics/test/dynamics/__init__.py +1 -0
  50. ostk/astrodynamics/test/dynamics/data/Tabulated_Earth_Gravity.csv +565 -0
  51. ostk/astrodynamics/test/dynamics/data/Tabulated_Earth_Gravity_Truth.csv +100 -0
  52. ostk/astrodynamics/test/dynamics/test_atmospheric_drag.py +128 -0
  53. ostk/astrodynamics/test/dynamics/test_central_body_gravity.py +58 -0
  54. ostk/astrodynamics/test/dynamics/test_dynamics.py +50 -0
  55. ostk/astrodynamics/test/dynamics/test_position_derivative.py +51 -0
  56. ostk/astrodynamics/test/dynamics/test_tabulated.py +138 -0
  57. ostk/astrodynamics/test/dynamics/test_third_body_gravity.py +67 -0
  58. ostk/astrodynamics/test/dynamics/test_thruster.py +157 -0
  59. ostk/astrodynamics/test/eclipse/__init__.py +1 -0
  60. ostk/astrodynamics/test/eclipse/test_generator.py +138 -0
  61. ostk/astrodynamics/test/estimator/test_orbit_determination_solver.py +261 -0
  62. ostk/astrodynamics/test/estimator/test_tle_solver.py +216 -0
  63. ostk/astrodynamics/test/event_condition/test_angular_condition.py +113 -0
  64. ostk/astrodynamics/test/event_condition/test_boolean_condition.py +55 -0
  65. ostk/astrodynamics/test/event_condition/test_brouwer_lyddane_mean_long_condition.py +135 -0
  66. ostk/astrodynamics/test/event_condition/test_coe_condition.py +135 -0
  67. ostk/astrodynamics/test/event_condition/test_instant_condition.py +48 -0
  68. ostk/astrodynamics/test/event_condition/test_logical_condition.py +120 -0
  69. ostk/astrodynamics/test/event_condition/test_real_condition.py +50 -0
  70. ostk/astrodynamics/test/flight/__init__.py +1 -0
  71. ostk/astrodynamics/test/flight/profile/model/test_tabulated_profile.py +115 -0
  72. ostk/astrodynamics/test/flight/system/__init__.py +1 -0
  73. ostk/astrodynamics/test/flight/system/test_propulsion_system.py +64 -0
  74. ostk/astrodynamics/test/flight/system/test_satellite_system.py +83 -0
  75. ostk/astrodynamics/test/flight/system/test_satellite_system_builder.py +71 -0
  76. ostk/astrodynamics/test/flight/test_maneuver.py +231 -0
  77. ostk/astrodynamics/test/flight/test_profile.py +293 -0
  78. ostk/astrodynamics/test/flight/test_system.py +45 -0
  79. ostk/astrodynamics/test/guidance_law/test_constant_thrust.py +177 -0
  80. ostk/astrodynamics/test/guidance_law/test_guidance_law.py +60 -0
  81. ostk/astrodynamics/test/guidance_law/test_heterogeneous_guidance_law.py +164 -0
  82. ostk/astrodynamics/test/guidance_law/test_qlaw.py +209 -0
  83. ostk/astrodynamics/test/solvers/__init__.py +1 -0
  84. ostk/astrodynamics/test/solvers/test_finite_difference_solver.py +196 -0
  85. ostk/astrodynamics/test/solvers/test_least_squares_solver.py +334 -0
  86. ostk/astrodynamics/test/solvers/test_temporal_condition_solver.py +161 -0
  87. ostk/astrodynamics/test/test_access.py +128 -0
  88. ostk/astrodynamics/test/test_converters.py +290 -0
  89. ostk/astrodynamics/test/test_dataframe.py +1355 -0
  90. ostk/astrodynamics/test/test_display.py +184 -0
  91. ostk/astrodynamics/test/test_event_condition.py +80 -0
  92. ostk/astrodynamics/test/test_import.py +26 -0
  93. ostk/astrodynamics/test/test_root_solver.py +70 -0
  94. ostk/astrodynamics/test/test_trajectory.py +126 -0
  95. ostk/astrodynamics/test/test_utilities.py +338 -0
  96. ostk/astrodynamics/test/test_viewer.py +318 -0
  97. ostk/astrodynamics/test/trajectory/__init__.py +1 -0
  98. ostk/astrodynamics/test/trajectory/model/test_nadir_trajectory.py +87 -0
  99. ostk/astrodynamics/test/trajectory/model/test_tabulated_trajectory.py +303 -0
  100. ostk/astrodynamics/test/trajectory/model/test_target_scan_trajectory.py +126 -0
  101. ostk/astrodynamics/test/trajectory/orbit/__init__.py +1 -0
  102. ostk/astrodynamics/test/trajectory/orbit/message/__init__.py +1 -0
  103. ostk/astrodynamics/test/trajectory/orbit/message/spacex/__init__.py +1 -0
  104. ostk/astrodynamics/test/trajectory/orbit/message/spacex/conftest.py +18 -0
  105. ostk/astrodynamics/test/trajectory/orbit/message/spacex/data/opm_1.yaml +44 -0
  106. ostk/astrodynamics/test/trajectory/orbit/message/spacex/test_opm.py +108 -0
  107. ostk/astrodynamics/test/trajectory/orbit/models/__init__.py +1 -0
  108. ostk/astrodynamics/test/trajectory/orbit/models/kepler/__init__.py +1 -0
  109. ostk/astrodynamics/test/trajectory/orbit/models/kepler/test_brouwer_lyddane_mean.py +65 -0
  110. ostk/astrodynamics/test/trajectory/orbit/models/kepler/test_brouwer_lyddane_mean_long.py +102 -0
  111. ostk/astrodynamics/test/trajectory/orbit/models/kepler/test_brouwer_lyddane_mean_short.py +102 -0
  112. ostk/astrodynamics/test/trajectory/orbit/models/kepler/test_coe.py +305 -0
  113. ostk/astrodynamics/test/trajectory/orbit/models/sgp4/__init__.py +1 -0
  114. ostk/astrodynamics/test/trajectory/orbit/models/sgp4/test_tle.py +337 -0
  115. ostk/astrodynamics/test/trajectory/orbit/models/test_kepler.py +130 -0
  116. ostk/astrodynamics/test/trajectory/orbit/models/test_modified_equinoctial.py +142 -0
  117. ostk/astrodynamics/test/trajectory/orbit/models/test_propagated.py +234 -0
  118. ostk/astrodynamics/test/trajectory/orbit/models/test_sgp4.py +1 -0
  119. ostk/astrodynamics/test/trajectory/orbit/models/test_tabulated.py +380 -0
  120. ostk/astrodynamics/test/trajectory/orbit/test_model.py +1 -0
  121. ostk/astrodynamics/test/trajectory/orbit/test_pass.py +75 -0
  122. ostk/astrodynamics/test/trajectory/state/coordinate_subset/test_angular_velocity.py +30 -0
  123. ostk/astrodynamics/test/trajectory/state/coordinate_subset/test_attitude_quaternion.py +18 -0
  124. ostk/astrodynamics/test/trajectory/state/coordinate_subset/test_cartesian_acceleration.py +136 -0
  125. ostk/astrodynamics/test/trajectory/state/coordinate_subset/test_cartesian_position.py +107 -0
  126. ostk/astrodynamics/test/trajectory/state/coordinate_subset/test_cartesian_velocity.py +115 -0
  127. ostk/astrodynamics/test/trajectory/state/test_coordinate_broker.py +84 -0
  128. ostk/astrodynamics/test/trajectory/state/test_coordinate_subset.py +58 -0
  129. ostk/astrodynamics/test/trajectory/state/test_numerical_solver.py +316 -0
  130. ostk/astrodynamics/test/trajectory/test_local_orbital_frame_direction.py +81 -0
  131. ostk/astrodynamics/test/trajectory/test_local_orbital_frame_factory.py +119 -0
  132. ostk/astrodynamics/test/trajectory/test_model.py +1 -0
  133. ostk/astrodynamics/test/trajectory/test_orbit.py +212 -0
  134. ostk/astrodynamics/test/trajectory/test_propagator.py +452 -0
  135. ostk/astrodynamics/test/trajectory/test_segment.py +694 -0
  136. ostk/astrodynamics/test/trajectory/test_sequence.py +550 -0
  137. ostk/astrodynamics/test/trajectory/test_state.py +629 -0
  138. ostk/astrodynamics/test/trajectory/test_state_builder.py +172 -0
  139. ostk/astrodynamics/trajectory/__init__.pyi +1982 -0
  140. ostk/astrodynamics/trajectory/model.pyi +259 -0
  141. ostk/astrodynamics/trajectory/orbit/__init__.pyi +349 -0
  142. ostk/astrodynamics/trajectory/orbit/message/__init__.pyi +3 -0
  143. ostk/astrodynamics/trajectory/orbit/message/spacex.pyi +264 -0
  144. ostk/astrodynamics/trajectory/orbit/model/__init__.pyi +648 -0
  145. ostk/astrodynamics/trajectory/orbit/model/brouwerLyddaneMean.pyi +121 -0
  146. ostk/astrodynamics/trajectory/orbit/model/kepler.pyi +709 -0
  147. ostk/astrodynamics/trajectory/orbit/model/sgp4.pyi +330 -0
  148. ostk/astrodynamics/trajectory/state/__init__.pyi +402 -0
  149. ostk/astrodynamics/trajectory/state/coordinate_subset.pyi +208 -0
  150. ostk/astrodynamics/utilities.py +396 -0
  151. ostk/astrodynamics/viewer.py +851 -0
@@ -0,0 +1,228 @@
1
+ # Apache License 2.0
2
+
3
+ import pytest
4
+
5
+ from ostk.physics.unit import Length
6
+ from ostk.physics.unit import Angle
7
+ from ostk.physics.time import DateTime
8
+ from ostk.physics.time import Scale
9
+ from ostk.physics.time import Duration
10
+ from ostk.physics.time import Instant
11
+ from ostk.physics.time import Interval
12
+ from ostk.physics import Environment
13
+ from ostk.physics.environment.object import Celestial
14
+
15
+ from ostk.astrodynamics import Trajectory
16
+ from ostk.astrodynamics.trajectory import Orbit
17
+ from ostk.astrodynamics.trajectory.orbit.model import Kepler
18
+ from ostk.astrodynamics.trajectory.orbit.model.kepler import COE
19
+ from ostk.astrodynamics.conjunction import CloseApproach
20
+ from ostk.astrodynamics.conjunction.close_approach import Generator
21
+
22
+
23
+ @pytest.fixture
24
+ def environment() -> Environment:
25
+ return Environment.default()
26
+
27
+
28
+ @pytest.fixture
29
+ def earth(environment: Environment) -> Celestial:
30
+ return environment.access_celestial_object_with_name("Earth")
31
+
32
+
33
+ @pytest.fixture
34
+ def epoch() -> Instant:
35
+ return Instant.date_time(DateTime(2024, 1, 1, 0, 0, 0), Scale.UTC)
36
+
37
+
38
+ @pytest.fixture
39
+ def step() -> Duration:
40
+ return Duration.minutes(20.0)
41
+
42
+
43
+ @pytest.fixture
44
+ def tolerance() -> Duration:
45
+ return Duration.milliseconds(1.0)
46
+
47
+
48
+ @pytest.fixture
49
+ def reference_trajectory(earth: Celestial, epoch: Instant) -> Trajectory:
50
+ return Orbit(
51
+ model=Kepler(
52
+ coe=COE(
53
+ semi_major_axis=Length.kilometers(7000.0),
54
+ eccentricity=0.0,
55
+ inclination=Angle.degrees(0.0),
56
+ raan=Angle.degrees(0.0),
57
+ aop=Angle.degrees(0.0),
58
+ true_anomaly=Angle.degrees(0.0),
59
+ ),
60
+ epoch=epoch,
61
+ celestial_object=earth,
62
+ perturbation_type=Kepler.PerturbationType.No,
63
+ ),
64
+ celestial_object=earth,
65
+ )
66
+
67
+
68
+ @pytest.fixture
69
+ def other_trajectory(earth: Celestial, epoch: Instant) -> Trajectory:
70
+ return Orbit(
71
+ model=Kepler(
72
+ coe=COE(
73
+ semi_major_axis=Length.kilometers(7000.0),
74
+ eccentricity=0.0,
75
+ inclination=Angle.degrees(90.0),
76
+ raan=Angle.degrees(0.0),
77
+ aop=Angle.degrees(0.0),
78
+ true_anomaly=Angle.degrees(1.0 - 3), # Avoid co-location
79
+ ),
80
+ epoch=epoch,
81
+ celestial_object=earth,
82
+ perturbation_type=Kepler.PerturbationType.No,
83
+ ),
84
+ celestial_object=earth,
85
+ )
86
+
87
+
88
+ @pytest.fixture
89
+ def generator(
90
+ reference_trajectory: Trajectory,
91
+ step: Duration,
92
+ tolerance: Duration,
93
+ ) -> Generator:
94
+ return Generator(
95
+ reference_trajectory=reference_trajectory,
96
+ step=step,
97
+ tolerance=tolerance,
98
+ )
99
+
100
+
101
+ @pytest.fixture
102
+ def search_interval(epoch: Instant) -> Interval:
103
+ return Interval.closed(
104
+ epoch,
105
+ epoch + Duration.hours(3.0),
106
+ )
107
+
108
+
109
+ class TestGenerator:
110
+ def test_constructor_success(
111
+ self,
112
+ reference_trajectory: Trajectory,
113
+ step: Duration,
114
+ tolerance: Duration,
115
+ ):
116
+ generator = Generator(
117
+ reference_trajectory=reference_trajectory,
118
+ step=step,
119
+ tolerance=tolerance,
120
+ )
121
+
122
+ assert generator is not None
123
+ assert isinstance(generator, Generator)
124
+
125
+ def test_constructor_with_defaults_success(
126
+ self,
127
+ reference_trajectory: Trajectory,
128
+ ):
129
+ generator = Generator(reference_trajectory=reference_trajectory)
130
+
131
+ assert generator is not None
132
+ assert isinstance(generator, Generator)
133
+ assert generator.is_defined() is True
134
+
135
+ def test_is_defined_success(self, generator: Generator):
136
+ assert generator.is_defined() is True
137
+
138
+ def test_undefined_success(self):
139
+ generator = Generator.undefined()
140
+
141
+ assert generator is not None
142
+ assert isinstance(generator, Generator)
143
+ assert generator.is_defined() is False
144
+
145
+ def test_get_reference_trajectory_success(
146
+ self,
147
+ generator: Generator,
148
+ ):
149
+ trajectory = generator.get_reference_trajectory()
150
+
151
+ assert trajectory is not None
152
+ assert isinstance(trajectory, Trajectory)
153
+
154
+ def test_get_step_success(
155
+ self,
156
+ generator: Generator,
157
+ step: Duration,
158
+ ):
159
+ result_step = generator.get_step()
160
+
161
+ assert result_step is not None
162
+ assert isinstance(result_step, Duration)
163
+ assert result_step == step
164
+
165
+ def test_get_tolerance_success(
166
+ self,
167
+ generator: Generator,
168
+ tolerance: Duration,
169
+ ):
170
+ result_tolerance = generator.get_tolerance()
171
+
172
+ assert result_tolerance is not None
173
+ assert isinstance(result_tolerance, Duration)
174
+ assert result_tolerance == tolerance
175
+
176
+ def test_set_step_success(self, generator: Generator):
177
+ new_step = Duration.seconds(30.0)
178
+
179
+ generator.set_step(step=new_step)
180
+
181
+ assert generator.get_step() == new_step
182
+
183
+ def test_set_tolerance_success(self, generator: Generator):
184
+ new_tolerance = Duration.microseconds(100.0)
185
+
186
+ generator.set_tolerance(tolerance=new_tolerance)
187
+
188
+ assert generator.get_tolerance() == new_tolerance
189
+
190
+ def test_compute_close_approaches_success(
191
+ self,
192
+ generator: Generator,
193
+ other_trajectory: Trajectory,
194
+ search_interval: Interval,
195
+ ):
196
+ close_approaches = generator.compute_close_approaches(
197
+ trajectory=other_trajectory,
198
+ search_interval=search_interval,
199
+ )
200
+
201
+ assert close_approaches is not None
202
+ assert isinstance(close_approaches, list)
203
+ assert len(close_approaches) > 1
204
+
205
+ for close_approach in close_approaches:
206
+ assert isinstance(close_approach, CloseApproach)
207
+ assert close_approach.is_defined() is True
208
+ assert search_interval.contains_instant(close_approach.get_instant())
209
+
210
+ def test_compute_close_approaches_empty_interval_success(
211
+ self,
212
+ generator: Generator,
213
+ other_trajectory: Trajectory,
214
+ epoch: Instant,
215
+ ):
216
+ search_interval = Interval.closed(
217
+ epoch + Duration.hours(10.0),
218
+ epoch + Duration.hours(10.0) + Duration.seconds(1.0),
219
+ )
220
+
221
+ close_approaches = generator.compute_close_approaches(
222
+ trajectory=other_trajectory,
223
+ search_interval=search_interval,
224
+ )
225
+
226
+ assert close_approaches is not None
227
+ assert isinstance(close_approaches, list)
228
+ assert len(close_approaches) == 0
@@ -0,0 +1 @@
1
+ # Apache License 2.0
@@ -0,0 +1,325 @@
1
+ # Apache License 2.0
2
+
3
+ import pytest
4
+
5
+ import pathlib
6
+
7
+ from ostk.core.filesystem import Path
8
+ from ostk.core.filesystem import File
9
+
10
+
11
+ @pytest.fixture
12
+ def data_directory_path() -> str:
13
+ return f"{pathlib.Path(__file__).parent.absolute()}/data"
14
+
15
+
16
+ @pytest.fixture
17
+ def cdm_file(data_directory_path: str) -> File:
18
+ return File.path(Path.parse(f"{data_directory_path}/cdm.json"))
19
+
20
+
21
+ @pytest.fixture
22
+ def cdm_spacetrack_dictionary() -> dict:
23
+ return {
24
+ "CONSTELLATION": "Loft Orbital Solutions",
25
+ "CDM_ID": "406320986",
26
+ "FILENAME": "000048911_conj_000015331_2022361132859_62880.xml",
27
+ "INSERT_EPOCH": "2022-12-25T03:16:57",
28
+ "CCSDS_CDM_VERS": "1.0",
29
+ "CREATION_DATE": "2022-12-25T00:33:16.000000",
30
+ "ORIGINATOR": "CSpOC",
31
+ "MESSAGE_FOR": "YAM-2",
32
+ "MESSAGE_ID": "000048911_conj_000015331_2022361132859_35900400162880",
33
+ # 'COMMENT_EMERGENCY_REPORTABLE': None,
34
+ "TCA": "2022-12-27T13:28:59.516000",
35
+ "MISS_DISTANCE": "974",
36
+ "MISS_DISTANCE_UNIT": "m",
37
+ "RELATIVE_SPEED": "2604",
38
+ "RELATIVE_SPEED_UNIT": "m/s",
39
+ "RELATIVE_POSITION_R": "-170.9",
40
+ "RELATIVE_POSITION_R_UNIT": "m",
41
+ "RELATIVE_POSITION_T": "-945",
42
+ "RELATIVE_POSITION_T_UNIT": "m",
43
+ "RELATIVE_POSITION_N": "165",
44
+ "RELATIVE_POSITION_N_UNIT": "m",
45
+ "RELATIVE_VELOCITY_R": "0.3",
46
+ "RELATIVE_VELOCITY_R_UNIT": "m/s",
47
+ "RELATIVE_VELOCITY_T": "-448.1",
48
+ "RELATIVE_VELOCITY_T_UNIT": "m/s",
49
+ "RELATIVE_VELOCITY_N": "-2566.1",
50
+ "RELATIVE_VELOCITY_N_UNIT": "m/s",
51
+ "COMMENT_SCREENING_OPTION": "Screening Option = Covariance",
52
+ "COLLISION_PROBABILITY": "5.162516e-16",
53
+ "COLLISION_PROBABILITY_METHOD": "FOSTER-1992",
54
+ # 'SAT1_COMMENT_SCREENING_DATA_SOURCE': None,
55
+ "SAT1_OBJECT": "OBJECT1",
56
+ "SAT1_OBJECT_DESIGNATOR": "48911",
57
+ "SAT1_CATALOG_NAME": "SATCAT",
58
+ "SAT1_OBJECT_NAME": "YAM-2",
59
+ "SAT1_INTERNATIONAL_DESIGNATOR": "2021-059AJ",
60
+ "SAT1_OBJECT_TYPE": "PAYLOAD",
61
+ "SAT1_OPERATOR_CONTACT_POSITION": "https: //www.space-track.org/expandedspacedata/query/class/organization/object/~~48911/orderby/ORG_NAME,INFO_ID/format/html/emptyresult/show/",
62
+ "SAT1_OPERATOR_ORGANIZATION": "Loft Orbital Solutions",
63
+ "SAT1_OPERATOR_PHONE": "https://www.space-track.org/expandedspacedata/query/class/organization/object/~~48911/orderby/ORG_NAME,INFO_ID/format/html/emptyresult/show/",
64
+ "SAT1_OPERATOR_EMAIL": "https://www.space-track.org/expandedspacedata/query/class/organization/object/~~48911/orderby/ORG_NAME,INFO_ID/format/html/emptyresult/show/",
65
+ "SAT1_EPHEMERIS_NAME": "NONE",
66
+ "SAT1_COVARIANCE_METHOD": "CALCULATED",
67
+ "SAT1_MANEUVERABLE": "N/A",
68
+ "SAT1_REF_FRAME": "ITRF",
69
+ "SAT1_GRAVITY_MODEL": "EGM-96: 36D 36O",
70
+ "SAT1_ATMOSPHERIC_MODEL": "JBH09",
71
+ "SAT1_N_BODY_PERTURBATIONS": "MOON,SUN",
72
+ "SAT1_SOLAR_RAD_PRESSURE": "YES",
73
+ "SAT1_EARTH_TIDES": "YES",
74
+ "SAT1_INTRACK_THRUST": "NO",
75
+ "SAT1_COMMENT_COVARIANCE_SCALE_FACTOR": "Covariance Scale Factor = 1.000000",
76
+ "SAT1_COMMENT_EXCLUSION_VOLUME_RADIUS": "Exclusion Volume Radius = 5.000000 [m]",
77
+ "SAT1_TIME_LASTOB_START": "2022-12-24T00:33:16.431000",
78
+ "SAT1_TIME_LASTOB_END": "2022-12-25T00:33:16.431000",
79
+ "SAT1_RECOMMENDED_OD_SPAN": "3.3",
80
+ "SAT1_RECOMMENDED_OD_SPAN_UNIT": "d",
81
+ "SAT1_ACTUAL_OD_SPAN": "3.3",
82
+ "SAT1_ACTUAL_OD_SPAN_UNIT": "d",
83
+ "SAT1_OBS_AVAILABLE": "100",
84
+ "SAT1_OBS_USED": "100",
85
+ "SAT1_RESIDUALS_ACCEPTED": "100",
86
+ "SAT1_RESIDUALS_ACCEPTED_UNIT": "%",
87
+ "SAT1_WEIGHTED_RMS": "0.991",
88
+ "SAT1_COMMENT_APOGEE": "Apogee Altitude = 541 [km]",
89
+ "SAT1_COMMENT_PERIGEE": "Perigee Altitude = 509 [km]",
90
+ "SAT1_COMMENT_INCLINATION": "Inclination = 97.6 [deg]",
91
+ # 'SAT1_COMMENT_OPERATOR_HARD_BODY_RADIUS': None,
92
+ "SAT1_AREA_PC": "0.4374",
93
+ "SAT1_AREA_PC_UNIT": "m**2",
94
+ "SAT1_CD_AREA_OVER_MASS": "0.022156960363",
95
+ "SAT1_CD_AREA_OVER_MASS_UNIT": "m**2/kg",
96
+ "SAT1_CR_AREA_OVER_MASS": "0.003818998866",
97
+ "SAT1_CR_AREA_OVER_MASS_UNIT": "m**2/kg",
98
+ "SAT1_THRUST_ACCELERATION": "0",
99
+ "SAT1_THRUST_ACCELERATION_UNIT": "m/s**2",
100
+ "SAT1_SEDR": "0.00210992",
101
+ "SAT1_SEDR_UNIT": "W/kg",
102
+ "SAT1_X": "-4988.150232",
103
+ "SAT1_X_UNIT": "km",
104
+ "SAT1_Y": "-1691.825955",
105
+ "SAT1_Y_UNIT": "km",
106
+ "SAT1_Z": "-4469.421482",
107
+ "SAT1_Z_UNIT": "km",
108
+ "SAT1_X_DOT": "-5.122248844",
109
+ "SAT1_X_DOT_UNIT": "km/s",
110
+ "SAT1_Y_DOT": "0.054300816",
111
+ "SAT1_Y_DOT_UNIT": "km/s",
112
+ "SAT1_Z_DOT": "5.699434412",
113
+ "SAT1_Z_DOT_UNIT": "km/s",
114
+ "SAT1_COMMENT_DCP_DENSITY_FORECAST_UNCERTAINTY": "DCP Density Forecast Uncertainty = 2.290890030000000E-01",
115
+ "SAT1_COMMENT_DCP_SENSITIVITY_VECTOR_POSITION": "DCP Sensitivity Vector RTN Pos = -1.636151334480493E+02 2.601909818284176E+04 -2.915438070510799E+00 [m]",
116
+ "SAT1_COMMENT_DCP_SENSITIVITY_VECTOR_VELOCITY": "DCP Sensitivity Vector RTN Vel = -2.867115178813268E+01 1.435509187157564E-01 -1.287417157042207E-02 [m/sec]",
117
+ "SAT1_CR_R": "1484.661743393455",
118
+ "SAT1_CR_R_UNIT": "m**2",
119
+ "SAT1_CT_R": "-231060.2636731259",
120
+ "SAT1_CT_R_UNIT": "m**2",
121
+ "SAT1_CT_T": "37086743.11901508",
122
+ "SAT1_CT_T_UNIT": "m**2",
123
+ "SAT1_CN_R": "24.40770013207214",
124
+ "SAT1_CN_R_UNIT": "m**2",
125
+ "SAT1_CN_T": "-4434.047461592475",
126
+ "SAT1_CN_T_UNIT": "m**2",
127
+ "SAT1_CN_N": "218.20805984514",
128
+ "SAT1_CN_N_UNIT": "m**2",
129
+ "SAT1_CRDOT_R": "254.5977232921239",
130
+ "SAT1_CRDOT_R_UNIT": "m**2/s",
131
+ "SAT1_CRDOT_T": "-40867.38377954393",
132
+ "SAT1_CRDOT_T_UNIT": "m**2/s",
133
+ "SAT1_CRDOT_N": "4.871821743729464",
134
+ "SAT1_CRDOT_N_UNIT": "m**2/s",
135
+ "SAT1_CRDOT_RDOT": "45.03346700955843",
136
+ "SAT1_CRDOT_RDOT_UNIT": "m**2/s**2",
137
+ "SAT1_CTDOT_R": "-1.311352116787324",
138
+ "SAT1_CTDOT_R_UNIT": "m**2/s",
139
+ "SAT1_CTDOT_T": "202.8294875506834",
140
+ "SAT1_CTDOT_T_UNIT": "m**2/s",
141
+ "SAT1_CTDOT_N": "-0.02128325918265576",
142
+ "SAT1_CTDOT_N_UNIT": "m**2/s",
143
+ "SAT1_CTDOT_RDOT": "-0.2234874511731791",
144
+ "SAT1_CTDOT_RDOT_UNIT": "m**2/s**2",
145
+ "SAT1_CTDOT_TDOT": "0.001160151615053103",
146
+ "SAT1_CTDOT_TDOT_UNIT": "m**2/s**2",
147
+ "SAT1_CNDOT_R": "0.1154310435542667",
148
+ "SAT1_CNDOT_R_UNIT": "m**2/s",
149
+ "SAT1_CNDOT_T": "-18.32204260863709",
150
+ "SAT1_CNDOT_T_UNIT": "m**2/s",
151
+ "SAT1_CNDOT_N": "-0.0533676327904924",
152
+ "SAT1_CNDOT_N_UNIT": "m**2/s",
153
+ "SAT1_CNDOT_RDOT": "0.02020021081010548",
154
+ "SAT1_CNDOT_RDOT_UNIT": "m**2/s**2",
155
+ "SAT1_CNDOT_TDOT": "-0.0001013570378449393",
156
+ "SAT1_CNDOT_TDOT_UNIT": "m**2/s**2",
157
+ "SAT1_CNDOT_NDOT": "0.00004789528123726022",
158
+ "SAT1_CNDOT_NDOT_UNIT": "m**2/s**2",
159
+ "SAT1_CDRG_R": "0",
160
+ "SAT1_CDRG_R_UNIT": "m**3/kg",
161
+ "SAT1_CDRG_T": "0",
162
+ "SAT1_CDRG_T_UNIT": "m**3/kg",
163
+ "SAT1_CDRG_N": "0",
164
+ "SAT1_CDRG_N_UNIT": "m**3/kg",
165
+ "SAT1_CDRG_RDOT": "0",
166
+ "SAT1_CDRG_RDOT_UNIT": "m**3/(kg*s)",
167
+ "SAT1_CDRG_TDOT": "0",
168
+ "SAT1_CDRG_TDOT_UNIT": "m**3/(kg*s)",
169
+ "SAT1_CDRG_NDOT": "0",
170
+ "SAT1_CDRG_NDOT_UNIT": "m**3/(kg*s)",
171
+ "SAT1_CDRG_DRG": "0",
172
+ "SAT1_CDRG_DRG_UNIT": "m**4/kg**2",
173
+ "SAT1_CSRP_R": "0",
174
+ "SAT1_CSRP_R_UNIT": "m**3/kg",
175
+ "SAT1_CSRP_T": "0",
176
+ "SAT1_CSRP_T_UNIT": "m**3/kg",
177
+ "SAT1_CSRP_N": "0",
178
+ "SAT1_CSRP_N_UNIT": "m**3/kg",
179
+ "SAT1_CSRP_RDOT": "0",
180
+ "SAT1_CSRP_RDOT_UNIT": "m**3/(kg*s)",
181
+ "SAT1_CSRP_TDOT": "0",
182
+ "SAT1_CSRP_TDOT_UNIT": "m**3/(kg*s)",
183
+ "SAT1_CSRP_NDOT": "0",
184
+ "SAT1_CSRP_NDOT_UNIT": "m**3/(kg*s)",
185
+ "SAT1_CSRP_DRG": "0",
186
+ "SAT1_CSRP_DRG_UNIT": "m**4/kg**2",
187
+ "SAT1_CSRP_SRP": "0",
188
+ "SAT1_CSRP_SRP_UNIT": "m**4/kg**2",
189
+ # 'SAT2_COMMENT_SCREENING_DATA_SOURCE': None,
190
+ "SAT2_OBJECT": "OBJECT2",
191
+ "SAT2_OBJECT_DESIGNATOR": "15331",
192
+ "SAT2_CATALOG_NAME": "SATCAT",
193
+ "SAT2_OBJECT_NAME": "COSMOS 1602",
194
+ "SAT2_INTERNATIONAL_DESIGNATOR": "1984-105A",
195
+ "SAT2_OBJECT_TYPE": "PAYLOAD",
196
+ "SAT2_OPERATOR_CONTACT_POSITION": "https://www.space-track.org/expandedspacedata/query/class/organization/object/~~15331/orderby/ORG_NAME,INFO_ID/format/html/emptyresult/show/",
197
+ "SAT2_OPERATOR_ORGANIZATION": "- Whitelist-Show public CDMs",
198
+ "SAT2_OPERATOR_PHONE": "https://www.space-track.org/expandedspacedata/query/class/organization/object/~~15331/orderby/ORG_NAME,INFO_ID/format/html/emptyresult/show/",
199
+ "SAT2_OPERATOR_EMAIL": "https://www.space-track.org/expandedspacedata/query/class/organization/object/~~15331/orderby/ORG_NAME,INFO_ID/format/html/emptyresult/show/",
200
+ "SAT2_EPHEMERIS_NAME": "NONE",
201
+ "SAT2_COVARIANCE_METHOD": "CALCULATED",
202
+ "SAT2_MANEUVERABLE": "N/A",
203
+ "SAT2_REF_FRAME": "ITRF",
204
+ "SAT2_GRAVITY_MODEL": "EGM-96: 36D 36O",
205
+ "SAT2_ATMOSPHERIC_MODEL": "JBH09",
206
+ "SAT2_N_BODY_PERTURBATIONS": "MOON,SUN",
207
+ "SAT2_SOLAR_RAD_PRESSURE": "YES",
208
+ "SAT2_EARTH_TIDES": "YES",
209
+ "SAT2_INTRACK_THRUST": "NO",
210
+ "SAT2_COMMENT_COVARIANCE_SCALE_FACTOR": "Covariance Scale Factor = 1.000000",
211
+ "SAT2_COMMENT_EXCLUSION_VOLUME_RADIUS": "Exclusion Volume Radius = 5.000000 [m]",
212
+ "SAT2_TIME_LASTOB_START": "2022-12-24T00:33:16.078000",
213
+ "SAT2_TIME_LASTOB_END": "2022-12-25T00:33:16.078000",
214
+ "SAT2_RECOMMENDED_OD_SPAN": "3.16",
215
+ "SAT2_RECOMMENDED_OD_SPAN_UNIT": "d",
216
+ "SAT2_ACTUAL_OD_SPAN": "3.16",
217
+ "SAT2_ACTUAL_OD_SPAN_UNIT": "d",
218
+ "SAT2_OBS_AVAILABLE": "106",
219
+ "SAT2_OBS_USED": "106",
220
+ "SAT2_RESIDUALS_ACCEPTED": "98.8",
221
+ "SAT2_RESIDUALS_ACCEPTED_UNIT": "%",
222
+ "SAT2_WEIGHTED_RMS": "0.872",
223
+ "SAT2_COMMENT_APOGEE": "Apogee Altitude = 541 [km]",
224
+ "SAT2_COMMENT_PERIGEE": "Perigee Altitude = 505 [km]",
225
+ "SAT2_COMMENT_INCLINATION": "Inclination = 82.5 [deg]",
226
+ # 'SAT2_COMMENT_OPERATOR_HARD_BODY_RADIUS': None,
227
+ "SAT2_AREA_PC": "12.3163",
228
+ "SAT2_AREA_PC_UNIT": "m**2",
229
+ "SAT2_CD_AREA_OVER_MASS": "0.018619765396",
230
+ "SAT2_CD_AREA_OVER_MASS_UNIT": "m**2/kg",
231
+ "SAT2_CR_AREA_OVER_MASS": "0.010453768255",
232
+ "SAT2_CR_AREA_OVER_MASS_UNIT": "m**2/kg",
233
+ "SAT2_THRUST_ACCELERATION": "0",
234
+ "SAT2_THRUST_ACCELERATION_UNIT": "m/s**2",
235
+ "SAT2_SEDR": "0.00170015",
236
+ "SAT2_SEDR_UNIT": "W/kg",
237
+ "SAT2_X": "-4987.438723",
238
+ "SAT2_X_UNIT": "km",
239
+ "SAT2_Y": "-1691.585637",
240
+ "SAT2_Y_UNIT": "km",
241
+ "SAT2_Z": "-4470.042362",
242
+ "SAT2_Z_UNIT": "km",
243
+ "SAT2_X_DOT": "-4.287315771",
244
+ "SAT2_X_DOT_UNIT": "km/s",
245
+ "SAT2_Y_DOT": "-2.413206407",
246
+ "SAT2_Y_DOT_UNIT": "km/s",
247
+ "SAT2_Z_DOT": "5.701228642",
248
+ "SAT2_Z_DOT_UNIT": "km/s",
249
+ "SAT2_COMMENT_DCP_DENSITY_FORECAST_UNCERTAINTY": "DCP Density Forecast Uncertainty = 2.278816440000000E-01",
250
+ "SAT2_COMMENT_DCP_SENSITIVITY_VECTOR_POSITION": "DCP Sensitivity Vector RTN Pos = -1.335248493856891E+02 2.014718153017551E+04 5.205380905166459E+00 [m]",
251
+ "SAT2_COMMENT_DCP_SENSITIVITY_VECTOR_VELOCITY": "DCP Sensitivity Vector RTN Vel = -2.220377271541959E+01 1.148351592111829E-01 7.451338419472125E-03 [m/sec]",
252
+ "SAT2_CR_R": "1462.221563767092",
253
+ "SAT2_CR_R_UNIT": "m**2",
254
+ "SAT2_CT_R": "-144222.644159393",
255
+ "SAT2_CT_R_UNIT": "m**2",
256
+ "SAT2_CT_T": "21679306.07289715",
257
+ "SAT2_CT_T_UNIT": "m**2",
258
+ "SAT2_CN_R": "-225.1714423010423",
259
+ "SAT2_CN_R_UNIT": "m**2",
260
+ "SAT2_CN_T": "5814.738923198461",
261
+ "SAT2_CN_T_UNIT": "m**2",
262
+ "SAT2_CN_N": "123.073683061929",
263
+ "SAT2_CN_N_UNIT": "m**2",
264
+ "SAT2_CRDOT_R": "158.6587476294616",
265
+ "SAT2_CRDOT_R_UNIT": "m**2/s",
266
+ "SAT2_CRDOT_T": "-23891.76994311345",
267
+ "SAT2_CRDOT_T_UNIT": "m**2/s",
268
+ "SAT2_CRDOT_N": "-6.293842325288276",
269
+ "SAT2_CRDOT_N_UNIT": "m**2/s",
270
+ "SAT2_CRDOT_RDOT": "26.33020326928547",
271
+ "SAT2_CRDOT_RDOT_UNIT": "m**2/s**2",
272
+ "SAT2_CTDOT_R": "-1.383068369249745",
273
+ "SAT2_CTDOT_R_UNIT": "m**2/s",
274
+ "SAT2_CTDOT_T": "124.4044756204814",
275
+ "SAT2_CTDOT_T_UNIT": "m**2/s",
276
+ "SAT2_CTDOT_N": "0.2395121366072169",
277
+ "SAT2_CTDOT_N_UNIT": "m**2/s",
278
+ "SAT2_CTDOT_RDOT": "-0.1367881107104898",
279
+ "SAT2_CTDOT_RDOT_UNIT": "m**2/s**2",
280
+ "SAT2_CTDOT_TDOT": "0.001327776662852765",
281
+ "SAT2_CTDOT_TDOT_UNIT": "m**2/s**2",
282
+ "SAT2_CNDOT_R": "-0.01076109815513279",
283
+ "SAT2_CNDOT_R_UNIT": "m**2/s",
284
+ "SAT2_CNDOT_T": "8.261715904589654",
285
+ "SAT2_CNDOT_T_UNIT": "m**2/s",
286
+ "SAT2_CNDOT_N": "-0.00996848842170098",
287
+ "SAT2_CNDOT_N_UNIT": "m**2/s",
288
+ "SAT2_CNDOT_RDOT": "-0.009119499172200366",
289
+ "SAT2_CNDOT_RDOT_UNIT": "m**2/s**2",
290
+ "SAT2_CNDOT_TDOT": "-0.000001041891040556171",
291
+ "SAT2_CNDOT_TDOT_UNIT": "m**2/s**2",
292
+ "SAT2_CNDOT_NDOT": "0.00004403494150689736",
293
+ "SAT2_CNDOT_NDOT_UNIT": "m**2/s**2",
294
+ "SAT2_CDRG_R": "0",
295
+ "SAT2_CDRG_R_UNIT": "m**3/kg",
296
+ "SAT2_CDRG_T": "0",
297
+ "SAT2_CDRG_T_UNIT": "m**3/kg",
298
+ "SAT2_CDRG_N": "0",
299
+ "SAT2_CDRG_N_UNIT": "m**3/kg",
300
+ "SAT2_CDRG_RDOT": "0",
301
+ "SAT2_CDRG_RDOT_UNIT": "m**3/(kg*s)",
302
+ "SAT2_CDRG_TDOT": "0",
303
+ "SAT2_CDRG_TDOT_UNIT": "m**3/(kg*s)",
304
+ "SAT2_CDRG_NDOT": "0",
305
+ "SAT2_CDRG_NDOT_UNIT": "m**3/(kg*s)",
306
+ "SAT2_CDRG_DRG": "0",
307
+ "SAT2_CDRG_DRG_UNIT": "m**4/kg**2",
308
+ "SAT2_CSRP_R": "0",
309
+ "SAT2_CSRP_R_UNIT": "m**3/kg",
310
+ "SAT2_CSRP_T": "0",
311
+ "SAT2_CSRP_T_UNIT": "m**3/kg",
312
+ "SAT2_CSRP_N": "0",
313
+ "SAT2_CSRP_N_UNIT": "m**3/kg",
314
+ "SAT2_CSRP_RDOT": "0",
315
+ "SAT2_CSRP_RDOT_UNIT": "m**3/(kg*s)",
316
+ "SAT2_CSRP_TDOT": "0",
317
+ "SAT2_CSRP_TDOT_UNIT": "m**3/(kg*s)",
318
+ "SAT2_CSRP_NDOT": "0",
319
+ "SAT2_CSRP_NDOT_UNIT": "m**3/(kg*s)",
320
+ "SAT2_CSRP_DRG": "0",
321
+ "SAT2_CSRP_DRG_UNIT": "m**4/kg**2",
322
+ "SAT2_CSRP_SRP": "0",
323
+ "SAT2_CSRP_SRP_UNIT": "m**4/kg**2",
324
+ "GID": "682",
325
+ }