ssatk 1.1.0__tar.gz
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.
- ssatk-1.1.0/LICENSE +28 -0
- ssatk-1.1.0/NOTICE +15 -0
- ssatk-1.1.0/PKG-INFO +591 -0
- ssatk-1.1.0/README.md +496 -0
- ssatk-1.1.0/demos/README.md +102 -0
- ssatk-1.1.0/demos/__init__.py +1 -0
- ssatk-1.1.0/demos/analysis_dashboards/__init__.py +1 -0
- ssatk-1.1.0/demos/analysis_dashboards/demo_build_dashboard.py +67 -0
- ssatk-1.1.0/demos/analysis_dashboards/demo_divergence_plot.py +154 -0
- ssatk-1.1.0/demos/analysis_dashboards/demo_orbital_stats_dashboard.py +82 -0
- ssatk-1.1.0/demos/benchmarks/README.md +35 -0
- ssatk-1.1.0/demos/benchmarks/__init__.py +1 -0
- ssatk-1.1.0/demos/benchmarks/benchmark_report.py +240 -0
- ssatk-1.1.0/demos/benchmarks/demo_artemis_benchmark.py +336 -0
- ssatk-1.1.0/demos/benchmarks/demo_basilisk_6dof.py +124 -0
- ssatk-1.1.0/demos/benchmarks/demo_gmat_benchmark.py +303 -0
- ssatk-1.1.0/demos/benchmarks/demo_long_term_propagation_benchmark.py +209 -0
- ssatk-1.1.0/demos/benchmarks/demo_nbody_propagation_benchmark.py +377 -0
- ssatk-1.1.0/demos/benchmarks/demo_orekit_benchmark.py +199 -0
- ssatk-1.1.0/demos/benchmarks/demo_station_keeping_burn.py +66 -0
- ssatk-1.1.0/demos/benchmarks/orekit/OrekitJ2.java +72 -0
- ssatk-1.1.0/demos/benchmarks/orekit/OrekitNBody.java +79 -0
- ssatk-1.1.0/demos/benchmarks/orekit/OrekitTwoBody.java +41 -0
- ssatk-1.1.0/demos/benchmarks/orekit/pom.xml +15 -0
- ssatk-1.1.0/demos/coordinates/__init__.py +2 -0
- ssatk-1.1.0/demos/coordinates/demo_coordinate_frames.py +97 -0
- ssatk-1.1.0/demos/coordinates/demo_gcrf_to_latlon.py +68 -0
- ssatk-1.1.0/demos/coordinates/demo_gcrs_to_itrs_astropy.py +78 -0
- ssatk-1.1.0/demos/coordinates/demo_itrf_to_gcrf.py +57 -0
- ssatk-1.1.0/demos/coordinates/demo_ntw_and_gcrf.py +107 -0
- ssatk-1.1.0/demos/coordinates/demo_rotate_vector.py +144 -0
- ssatk-1.1.0/demos/coordinates/demo_surface.py +80 -0
- ssatk-1.1.0/demos/coordinates/demo_surface_rv.py +48 -0
- ssatk-1.1.0/demos/data_io/__init__.py +2 -0
- ssatk-1.1.0/demos/data_io/demo_sampling.py +228 -0
- ssatk-1.1.0/demos/data_io/demo_sphere_generation.py +64 -0
- ssatk-1.1.0/demos/data_io/demo_tests_dict_to_from_hdf5.py +114 -0
- ssatk-1.1.0/demos/eclipse/__init__.py +1 -0
- ssatk-1.1.0/demos/eclipse/demo_eclipse_views.py +129 -0
- ssatk-1.1.0/demos/getting_started/__init__.py +2 -0
- ssatk-1.1.0/demos/getting_started/demo_data_package_access.py +82 -0
- ssatk-1.1.0/demos/getting_started/demo_first_user_workflow.py +51 -0
- ssatk-1.1.0/demos/getting_started/demo_get_times.py +87 -0
- ssatk-1.1.0/demos/getting_started/demo_parsing_3le.py +74 -0
- ssatk-1.1.0/demos/getting_started/demo_plotting_quickstart.py +315 -0
- ssatk-1.1.0/demos/orbit_visualization/__init__.py +1 -0
- ssatk-1.1.0/demos/orbit_visualization/demo_globe_orbit_daynight.py +52 -0
- ssatk-1.1.0/demos/orbit_visualization/demo_globe_plot.py +112 -0
- ssatk-1.1.0/demos/orbit_visualization/demo_groundtrack_enhanced.py +130 -0
- ssatk-1.1.0/demos/orbit_visualization/demo_groundtrack_plot.py +82 -0
- ssatk-1.1.0/demos/orbit_visualization/demo_moon_plot.py +82 -0
- ssatk-1.1.0/demos/orbit_visualization/demo_moon_webgl.py +87 -0
- ssatk-1.1.0/demos/orbit_visualization/demo_orbit_plot.py +162 -0
- ssatk-1.1.0/demos/orbital_mechanics/__init__.py +2 -0
- ssatk-1.1.0/demos/orbital_mechanics/demo_all_orbit_quantities.py +94 -0
- ssatk-1.1.0/demos/orbital_mechanics/demo_compare_models.py +73 -0
- ssatk-1.1.0/demos/orbital_mechanics/demo_ellipse_ae_for_arrival_rv.py +68 -0
- ssatk-1.1.0/demos/orbital_mechanics/demo_ellipse_fit.py +295 -0
- ssatk-1.1.0/demos/orbital_mechanics/demo_ellipse_fit_against_ssapy.py +236 -0
- ssatk-1.1.0/demos/orbital_mechanics/demo_ellipse_from_rv.py +704 -0
- ssatk-1.1.0/demos/orbital_mechanics/demo_ellipses.py +56 -0
- ssatk-1.1.0/demos/orbital_mechanics/demo_ellipses_rebound.py +67 -0
- ssatk-1.1.0/demos/orbital_mechanics/demo_equally_spaced_ta.py +109 -0
- ssatk-1.1.0/demos/orbital_mechanics/demo_gamma_and_heading.py +260 -0
- ssatk-1.1.0/demos/orbital_mechanics/demo_groundtrack_accuracy.py +111 -0
- ssatk-1.1.0/demos/orbital_mechanics/demo_kepler_vs_harmonics.py +81 -0
- ssatk-1.1.0/demos/orbital_mechanics/demo_leapfrog.py +48 -0
- ssatk-1.1.0/demos/orbital_mechanics/demo_orbital_maneuvers.py +1349 -0
- ssatk-1.1.0/demos/orbital_mechanics/demo_ssapy_orbits.py +61 -0
- ssatk-1.1.0/demos/orbital_mechanics/demo_station_keeping.py +374 -0
- ssatk-1.1.0/demos/orbital_mechanics/demo_structured_transfer_api.py +827 -0
- ssatk-1.1.0/demos/photometry/__init__.py +2 -0
- ssatk-1.1.0/demos/photometry/demo_faceted_light_curves.py +434 -0
- ssatk-1.1.0/demos/photometry/demo_lambertian_brightness.py +378 -0
- ssatk-1.1.0/demos/photometry/demo_photometry_application.py +87 -0
- ssatk-1.1.0/demos/photometry/demo_ssapy_ground_lambertian_reflectance.py +189 -0
- ssatk-1.1.0/demos/sensor_coverage/__init__.py +1 -0
- ssatk-1.1.0/demos/sensor_coverage/demo_coverage_analysis.py +123 -0
- ssatk-1.1.0/demos/sensor_coverage/demo_satellite_viewer.py +68 -0
- ssatk-1.1.0/demos/sensor_coverage/demo_sensor_fov_plot.py +526 -0
- ssatk-1.1.0/demos/six_dof/__init__.py +2 -0
- ssatk-1.1.0/demos/six_dof/_common.py +94 -0
- ssatk-1.1.0/demos/six_dof/demo_6dof_attitude_control.py +112 -0
- ssatk-1.1.0/demos/six_dof/demo_6dof_finite_burn.py +292 -0
- ssatk-1.1.0/demos/six_dof/demo_6dof_gravity_gradient.py +122 -0
- ssatk-1.1.0/demos/six_dof/demo_6dof_srp_facets.py +126 -0
- ssatk-1.1.0/demos/space_environment/__init__.py +1 -0
- ssatk-1.1.0/demos/space_environment/demo_earth_sun_plot.py +64 -0
- ssatk-1.1.0/demos/space_environment/demo_magfield_plot.py +49 -0
- ssatk-1.1.0/demos/space_environment/demo_solar_view_plot.py +61 -0
- ssatk-1.1.0/demos/space_environment/demo_sun_view.py +153 -0
- ssatk-1.1.0/demos/space_environment/demo_van_allen.py +64 -0
- ssatk-1.1.0/demos/video_animation/__init__.py +1 -0
- ssatk-1.1.0/demos/video_animation/demo_fancy_video.py +277 -0
- ssatk-1.1.0/demos/video_animation/demo_gifify.py +221 -0
- ssatk-1.1.0/pyproject.toml +154 -0
- ssatk-1.1.0/setup.cfg +4 -0
- ssatk-1.1.0/ssatk/__init__.py +362 -0
- ssatk-1.1.0/ssatk/_callables.py +41 -0
- ssatk-1.1.0/ssatk/_namespace.py +72 -0
- ssatk-1.1.0/ssatk/_paths.py +53 -0
- ssatk-1.1.0/ssatk/_sorting.py +13 -0
- ssatk-1.1.0/ssatk/accelerations_6dof/__init__.py +5 -0
- ssatk-1.1.0/ssatk/accelerations_6dof/spacecraft.py +1700 -0
- ssatk-1.1.0/ssatk/accelerations_6dof/ssapy_models.py +183 -0
- ssatk-1.1.0/ssatk/accelerations_6dof/thrust.py +534 -0
- ssatk-1.1.0/ssatk/accelerations_orbit/__init__.py +5 -0
- ssatk-1.1.0/ssatk/accelerations_orbit/_state.py +47 -0
- ssatk-1.1.0/ssatk/accelerations_orbit/accel_add.py +25 -0
- ssatk-1.1.0/ssatk/accelerations_orbit/accel_circularize.py +88 -0
- ssatk-1.1.0/ssatk/accelerations_orbit/accel_earth_harmonics.py +108 -0
- ssatk-1.1.0/ssatk/accelerations_orbit/accel_equatorial.py +44 -0
- ssatk-1.1.0/ssatk/accelerations_orbit/accel_inclination.py +43 -0
- ssatk-1.1.0/ssatk/accelerations_orbit/accel_moon.py +53 -0
- ssatk-1.1.0/ssatk/accelerations_orbit/accel_plane.py +47 -0
- ssatk-1.1.0/ssatk/accelerations_orbit/accel_point_earth.py +13 -0
- ssatk-1.1.0/ssatk/accelerations_orbit/accel_radial.py +28 -0
- ssatk-1.1.0/ssatk/accelerations_orbit/accel_sun.py +51 -0
- ssatk-1.1.0/ssatk/accelerations_orbit/accel_uniform_earth.py +32 -0
- ssatk-1.1.0/ssatk/accelerations_orbit/accel_velocity.py +26 -0
- ssatk-1.1.0/ssatk/asteroids.py +168 -0
- ssatk-1.1.0/ssatk/benchmark.py +1775 -0
- ssatk-1.1.0/ssatk/compute/__init__.py +5 -0
- ssatk-1.1.0/ssatk/compute/_visibility.py +24 -0
- ssatk-1.1.0/ssatk/compute/calculate_errors.py +25 -0
- ssatk-1.1.0/ssatk/compute/faceted_magnitude.py +381 -0
- ssatk-1.1.0/ssatk/compute/fft.py +45 -0
- ssatk-1.1.0/ssatk/compute/find_bounding_cube.py +24 -0
- ssatk-1.1.0/ssatk/compute/generate_sphere_of_vectors.py +103 -0
- ssatk-1.1.0/ssatk/compute/lambertian_magnitude.py +675 -0
- ssatk-1.1.0/ssatk/compute/lyapunov_exponent.py +192 -0
- ssatk-1.1.0/ssatk/compute/mengos.py +69 -0
- ssatk-1.1.0/ssatk/compute/proper_motions.py +123 -0
- ssatk-1.1.0/ssatk/compute/sampling.py +538 -0
- ssatk-1.1.0/ssatk/compute/segment_intersection.py +46 -0
- ssatk-1.1.0/ssatk/constants.py +269 -0
- ssatk-1.1.0/ssatk/coordinates/__init__.py +5 -0
- ssatk-1.1.0/ssatk/coordinates/angle_units.py +137 -0
- ssatk-1.1.0/ssatk/coordinates/attitude.py +130 -0
- ssatk-1.1.0/ssatk/coordinates/cartesian.py +19 -0
- ssatk-1.1.0/ssatk/coordinates/earth_fixed.py +192 -0
- ssatk-1.1.0/ssatk/coordinates/equatorial_ecliptic.py +181 -0
- ssatk-1.1.0/ssatk/coordinates/frames.py +337 -0
- ssatk-1.1.0/ssatk/coordinates/geodetic.py +130 -0
- ssatk-1.1.0/ssatk/coordinates/inertial.py +39 -0
- ssatk-1.1.0/ssatk/coordinates/local_equatorial.py +125 -0
- ssatk-1.1.0/ssatk/coordinates/lunar.py +121 -0
- ssatk-1.1.0/ssatk/coordinates/rotating_frames.py +59 -0
- ssatk-1.1.0/ssatk/coordinates/satellite_frames.py +283 -0
- ssatk-1.1.0/ssatk/coordinates/sky.py +173 -0
- ssatk-1.1.0/ssatk/coordinates/velocity.py +51 -0
- ssatk-1.1.0/ssatk/data.py +279 -0
- ssatk-1.1.0/ssatk/demo_gallery.py +742 -0
- ssatk-1.1.0/ssatk/engines/__init__.py +13 -0
- ssatk-1.1.0/ssatk/engines/catalog.py +426 -0
- ssatk-1.1.0/ssatk/engines/fuel_usage.py +82 -0
- ssatk-1.1.0/ssatk/engines/rescale_burn.py +59 -0
- ssatk-1.1.0/ssatk/environment.py +884 -0
- ssatk-1.1.0/ssatk/environment_eop.py +244 -0
- ssatk-1.1.0/ssatk/environment_space_weather.py +233 -0
- ssatk-1.1.0/ssatk/geomagnetics.py +942 -0
- ssatk-1.1.0/ssatk/hpc.py +55 -0
- ssatk-1.1.0/ssatk/io/__init__.py +5 -0
- ssatk-1.1.0/ssatk/io/ccsds_cdm.py +1040 -0
- ssatk-1.1.0/ssatk/io/ccsds_omm.py +525 -0
- ssatk-1.1.0/ssatk/io/converter_json_hdf5.py +224 -0
- ssatk-1.1.0/ssatk/io/csv_utils.py +348 -0
- ssatk-1.1.0/ssatk/io/datapath.py +61 -0
- ssatk-1.1.0/ssatk/io/demo_data.py +216 -0
- ssatk-1.1.0/ssatk/io/dict_to_from_hdf5.py +352 -0
- ssatk-1.1.0/ssatk/io/get_memory.py +22 -0
- ssatk-1.1.0/ssatk/io/guess_delimiter.py +30 -0
- ssatk-1.1.0/ssatk/io/h5cache.py +346 -0
- ssatk-1.1.0/ssatk/io/hdf5_to_csv.py +172 -0
- ssatk-1.1.0/ssatk/io/hdf5_utils.py +295 -0
- ssatk-1.1.0/ssatk/io/html_to_gif.py +207 -0
- ssatk-1.1.0/ssatk/io/io_utils.py +167 -0
- ssatk-1.1.0/ssatk/io/json_utils.py +102 -0
- ssatk-1.1.0/ssatk/io/listfiles.py +48 -0
- ssatk-1.1.0/ssatk/io/moon_maps.py +266 -0
- ssatk-1.1.0/ssatk/io/orbit_json.py +201 -0
- ssatk-1.1.0/ssatk/io/pickle_utils.py +17 -0
- ssatk-1.1.0/ssatk/io/pprint_utils.py +447 -0
- ssatk-1.1.0/ssatk/io/read_3le.py +357 -0
- ssatk-1.1.0/ssatk/io/read_3le_by_bit.py +231 -0
- ssatk-1.1.0/ssatk/io/reference_case.py +915 -0
- ssatk-1.1.0/ssatk/io/ssatk_cache.py +16 -0
- ssatk-1.1.0/ssatk/io/ssatk_data.py +11 -0
- ssatk-1.1.0/ssatk/io/ssatk_logging.py +69 -0
- ssatk-1.1.0/ssatk/io/ssatk_save.py +490 -0
- ssatk-1.1.0/ssatk/io/tle_iter_pairs.py +51 -0
- ssatk-1.1.0/ssatk/io/tle_prop_to_time.py +64 -0
- ssatk-1.1.0/ssatk/io/tle_updater.py +1246 -0
- ssatk-1.1.0/ssatk/io/workspace_io.py +322 -0
- ssatk-1.1.0/ssatk/io/xml_utils.py +274 -0
- ssatk-1.1.0/ssatk/launch/__init__.py +5 -0
- ssatk-1.1.0/ssatk/launch/gravity_turn.py +54 -0
- ssatk-1.1.0/ssatk/launch/sites.py +215 -0
- ssatk-1.1.0/ssatk/launch/vehicles.py +118 -0
- ssatk-1.1.0/ssatk/navigation/__init__.py +34 -0
- ssatk-1.1.0/ssatk/navigation/batch.py +286 -0
- ssatk-1.1.0/ssatk/navigation/ekf.py +205 -0
- ssatk-1.1.0/ssatk/navigation/measurements.py +205 -0
- ssatk-1.1.0/ssatk/navigation/sensors.py +242 -0
- ssatk-1.1.0/ssatk/operations/__init__.py +5 -0
- ssatk-1.1.0/ssatk/operations/timeline.py +60 -0
- ssatk-1.1.0/ssatk/orbit_initializer.py +86 -0
- ssatk-1.1.0/ssatk/orbital_mechanics/__init__.py +5 -0
- ssatk-1.1.0/ssatk/orbital_mechanics/_transfer_result.py +356 -0
- ssatk-1.1.0/ssatk/orbital_mechanics/_two_body.py +15 -0
- ssatk-1.1.0/ssatk/orbital_mechanics/all_orbit_quantities.py +165 -0
- ssatk-1.1.0/ssatk/orbital_mechanics/burn_to_deltav.py +96 -0
- ssatk-1.1.0/ssatk/orbital_mechanics/calculate_finite_burn_acceleration.py +38 -0
- ssatk-1.1.0/ssatk/orbital_mechanics/deltav_to_burn.py +90 -0
- ssatk-1.1.0/ssatk/orbital_mechanics/ellipse_fit.py +953 -0
- ssatk-1.1.0/ssatk/orbital_mechanics/ellipse_from_rv.py +182 -0
- ssatk-1.1.0/ssatk/orbital_mechanics/ellipse_inject.py +577 -0
- ssatk-1.1.0/ssatk/orbital_mechanics/equally_spaced_ta.py +135 -0
- ssatk-1.1.0/ssatk/orbital_mechanics/gamma_and_heading.py +134 -0
- ssatk-1.1.0/ssatk/orbital_mechanics/keplerian.py +1122 -0
- ssatk-1.1.0/ssatk/orbital_mechanics/lagrange_points.py +222 -0
- ssatk-1.1.0/ssatk/orbital_mechanics/misc.py +177 -0
- ssatk-1.1.0/ssatk/orbital_mechanics/orbital_accel_model_comparisons.py +757 -0
- ssatk-1.1.0/ssatk/orbital_mechanics/orbital_comparison_stats.py +986 -0
- ssatk-1.1.0/ssatk/orbital_mechanics/rv_to_ellipse.py +190 -0
- ssatk-1.1.0/ssatk/orbital_mechanics/synthetic_orbit_population.py +209 -0
- ssatk-1.1.0/ssatk/orbital_mechanics/transfer_bielliptic.py +387 -0
- ssatk-1.1.0/ssatk/orbital_mechanics/transfer_coplanar_continuous.py +164 -0
- ssatk-1.1.0/ssatk/orbital_mechanics/transfer_hohmann.py +226 -0
- ssatk-1.1.0/ssatk/orbital_mechanics/transfer_inclination_continuous.py +201 -0
- ssatk-1.1.0/ssatk/orbital_mechanics/transfer_optimal_function.py +1717 -0
- ssatk-1.1.0/ssatk/orbital_mechanics/transfer_ssapy_function.py +973 -0
- ssatk-1.1.0/ssatk/orbital_mechanics/transfer_velocity_and_inclination_continuous.py +246 -0
- ssatk-1.1.0/ssatk/orbital_mechanics/transfer_velocity_continuous.py +247 -0
- ssatk-1.1.0/ssatk/plots/OrbitControls.js +1045 -0
- ssatk-1.1.0/ssatk/plots/__init__.py +5 -0
- ssatk-1.1.0/ssatk/plots/_cislunar_plot_core.py +299 -0
- ssatk-1.1.0/ssatk/plots/_frames.py +27 -0
- ssatk-1.1.0/ssatk/plots/_groundtrack_helpers.py +67 -0
- ssatk-1.1.0/ssatk/plots/_legend_handlers.py +22 -0
- ssatk-1.1.0/ssatk/plots/_orbit_plot_core.py +437 -0
- ssatk-1.1.0/ssatk/plots/_textures.py +51 -0
- ssatk-1.1.0/ssatk/plots/accel_thrust.py +129 -0
- ssatk-1.1.0/ssatk/plots/base_plot.py +781 -0
- ssatk-1.1.0/ssatk/plots/break_plot_lines.py +115 -0
- ssatk-1.1.0/ssatk/plots/build_dashboard.py +82 -0
- ssatk-1.1.0/ssatk/plots/build_satellite_viewer.py +926 -0
- ssatk-1.1.0/ssatk/plots/coverage_analysis.py +1932 -0
- ssatk-1.1.0/ssatk/plots/divergence_gif.py +216 -0
- ssatk-1.1.0/ssatk/plots/divergence_plot.py +124 -0
- ssatk-1.1.0/ssatk/plots/earth_sun_plot.py +489 -0
- ssatk-1.1.0/ssatk/plots/eclipse_appearance_strip.py +299 -0
- ssatk-1.1.0/ssatk/plots/eclipse_brightness_plot.py +178 -0
- ssatk-1.1.0/ssatk/plots/eclipse_space_view_plotly.py +2488 -0
- ssatk-1.1.0/ssatk/plots/figpath.py +92 -0
- ssatk-1.1.0/ssatk/plots/gifify.py +318 -0
- ssatk-1.1.0/ssatk/plots/globe_orbit_daynight_plotly.py +736 -0
- ssatk-1.1.0/ssatk/plots/globe_plot.py +367 -0
- ssatk-1.1.0/ssatk/plots/groundtrack_dashboard.py +252 -0
- ssatk-1.1.0/ssatk/plots/groundtrack_dashboard_gamma_heading.py +245 -0
- ssatk-1.1.0/ssatk/plots/groundtrack_enhanced.py +428 -0
- ssatk-1.1.0/ssatk/plots/groundtrack_plot.py +326 -0
- ssatk-1.1.0/ssatk/plots/groundtrack_video.py +252 -0
- ssatk-1.1.0/ssatk/plots/layers.py +1398 -0
- ssatk-1.1.0/ssatk/plots/magfield_plot_3d.py +1330 -0
- ssatk-1.1.0/ssatk/plots/magnetosphere_core.py +529 -0
- ssatk-1.1.0/ssatk/plots/misc_plotting.py +393 -0
- ssatk-1.1.0/ssatk/plots/moon_plot_3d.py +702 -0
- ssatk-1.1.0/ssatk/plots/moon_render.py +342 -0
- ssatk-1.1.0/ssatk/plots/moon_webgl.py +1606 -0
- ssatk-1.1.0/ssatk/plots/orbit_animation.py +409 -0
- ssatk-1.1.0/ssatk/plots/orbit_plot.py +495 -0
- ssatk-1.1.0/ssatk/plots/orbit_plot_rv.py +135 -0
- ssatk-1.1.0/ssatk/plots/orbit_state.py +700 -0
- ssatk-1.1.0/ssatk/plots/plotutils.py +1124 -0
- ssatk-1.1.0/ssatk/plots/rendezvous_plot.py +98 -0
- ssatk-1.1.0/ssatk/plots/satellite.min.js +8 -0
- ssatk-1.1.0/ssatk/plots/satellite.py +377 -0
- ssatk-1.1.0/ssatk/plots/satellite_viewer_scene.js +3361 -0
- ssatk-1.1.0/ssatk/plots/satellite_viewer_smoketest.js +216 -0
- ssatk-1.1.0/ssatk/plots/scene_primitives.py +446 -0
- ssatk-1.1.0/ssatk/plots/sensor_fov_plot.py +833 -0
- ssatk-1.1.0/ssatk/plots/set_axes_equal.py +35 -0
- ssatk-1.1.0/ssatk/plots/solar_bodies.py +766 -0
- ssatk-1.1.0/ssatk/plots/solar_view_plot.py +425 -0
- ssatk-1.1.0/ssatk/plots/starfield.py +664 -0
- ssatk-1.1.0/ssatk/plots/sun_mpl.py +315 -0
- ssatk-1.1.0/ssatk/plots/sun_render.py +278 -0
- ssatk-1.1.0/ssatk/plots/sun_view.py +800 -0
- ssatk-1.1.0/ssatk/plots/three.min.js +6 -0
- ssatk-1.1.0/ssatk/plots/tracking_plot.py +184 -0
- ssatk-1.1.0/ssatk/plots/transfer_burn_profile_plot.py +116 -0
- ssatk-1.1.0/ssatk/plots/transfer_designer_curves_plot.py +118 -0
- ssatk-1.1.0/ssatk/plots/transfer_plot.py +150 -0
- ssatk-1.1.0/ssatk/plots/transfer_trajectory_plot.py +172 -0
- ssatk-1.1.0/ssatk/plots/van_allen_plot_3d.py +523 -0
- ssatk-1.1.0/ssatk/plots/write_gifs.py +220 -0
- ssatk-1.1.0/ssatk/plots/write_videos.py +135 -0
- ssatk-1.1.0/ssatk/propagators_6dof/__init__.py +5 -0
- ssatk-1.1.0/ssatk/propagators_6dof/_constraints.py +65 -0
- ssatk-1.1.0/ssatk/propagators_6dof/extended.py +282 -0
- ssatk-1.1.0/ssatk/propagators_6dof/high_accuracy.py +347 -0
- ssatk-1.1.0/ssatk/propagators_6dof/sixdof.py +1873 -0
- ssatk-1.1.0/ssatk/propagators_6dof/targeting.py +690 -0
- ssatk-1.1.0/ssatk/propagators_6dof/variational.py +526 -0
- ssatk-1.1.0/ssatk/propagators_orbit/__init__.py +5 -0
- ssatk-1.1.0/ssatk/propagators_orbit/high_accuracy.py +279 -0
- ssatk-1.1.0/ssatk/propagators_orbit/int_utils.py +200 -0
- ssatk-1.1.0/ssatk/propagators_orbit/leap_frog.py +216 -0
- ssatk-1.1.0/ssatk/propagators_orbit/rk4.py +100 -0
- ssatk-1.1.0/ssatk/run_all_demos.py +129 -0
- ssatk-1.1.0/ssatk/satellites.py +979 -0
- ssatk-1.1.0/ssatk/ssa/__init__.py +25 -0
- ssatk-1.1.0/ssatk/ssa/conjunction.py +510 -0
- ssatk-1.1.0/ssatk/ssapy_wrappers/__init__.py +5 -0
- ssatk-1.1.0/ssatk/ssapy_wrappers/accel_ladder.py +80 -0
- ssatk-1.1.0/ssatk/ssapy_wrappers/quick_int.py +190 -0
- ssatk-1.1.0/ssatk/ssapy_wrappers/sat_kwargs.py +9 -0
- ssatk-1.1.0/ssatk/ssapy_wrappers/ssapy_orbits.py +248 -0
- ssatk-1.1.0/ssatk/ssapy_wrappers/ssapy_props.py +141 -0
- ssatk-1.1.0/ssatk/time_functions/__init__.py +5 -0
- ssatk-1.1.0/ssatk/time_functions/_gps.py +13 -0
- ssatk-1.1.0/ssatk/time_functions/absolute_times_to_relative.py +68 -0
- ssatk-1.1.0/ssatk/time_functions/convert_dd_and_dms.py +58 -0
- ssatk-1.1.0/ssatk/time_functions/convert_dd_and_hms.py +66 -0
- ssatk-1.1.0/ssatk/time_functions/convert_gps_to_TT.py +17 -0
- ssatk-1.1.0/ssatk/time_functions/convert_to_gps.py +30 -0
- ssatk-1.1.0/ssatk/time_functions/get_times.py +185 -0
- ssatk-1.1.0/ssatk/time_functions/gmst.py +44 -0
- ssatk-1.1.0/ssatk/time_functions/julian_date.py +38 -0
- ssatk-1.1.0/ssatk/time_functions/now_time.py +15 -0
- ssatk-1.1.0/ssatk/time_functions/relative_times_to_absolute.py +71 -0
- ssatk-1.1.0/ssatk/utils.py +741 -0
- ssatk-1.1.0/ssatk/vectors.py +271 -0
- ssatk-1.1.0/ssatk/yastropy/__init__.py +5 -0
- ssatk-1.1.0/ssatk/yastropy/astropy_gcrf_to_llh.py +48 -0
- ssatk-1.1.0/ssatk/yastropy/astropy_llh_to_gcrf.py +40 -0
- ssatk-1.1.0/ssatk/yastropy/astropy_surface_rv.py +38 -0
- ssatk-1.1.0/ssatk.egg-info/PKG-INFO +591 -0
- ssatk-1.1.0/ssatk.egg-info/SOURCES.txt +440 -0
- ssatk-1.1.0/ssatk.egg-info/dependency_links.txt +1 -0
- ssatk-1.1.0/ssatk.egg-info/entry_points.txt +8 -0
- ssatk-1.1.0/ssatk.egg-info/requires.txt +80 -0
- ssatk-1.1.0/ssatk.egg-info/top_level.txt +2 -0
- ssatk-1.1.0/tests/test_6dof_elapsed_time_integration.py +111 -0
- ssatk-1.1.0/tests/test_6dof_extended.py +92 -0
- ssatk-1.1.0/tests/test_6dof_variational.py +341 -0
- ssatk-1.1.0/tests/test_acceleration_helpers.py +12 -0
- ssatk-1.1.0/tests/test_adaptive_propagators_elapsed_time.py +71 -0
- ssatk-1.1.0/tests/test_asteroid_magnitudes.py +24 -0
- ssatk-1.1.0/tests/test_basilisk_6dof_benchmark.py +13 -0
- ssatk-1.1.0/tests/test_body_ephemerides.py +34 -0
- ssatk-1.1.0/tests/test_burn_conversions.py +49 -0
- ssatk-1.1.0/tests/test_catalog_conjunction_screen.py +45 -0
- ssatk-1.1.0/tests/test_ccsds_cdm.py +124 -0
- ssatk-1.1.0/tests/test_ccsds_omm.py +77 -0
- ssatk-1.1.0/tests/test_compute_helpers.py +145 -0
- ssatk-1.1.0/tests/test_conic_sampling.py +95 -0
- ssatk-1.1.0/tests/test_constants.py +62 -0
- ssatk-1.1.0/tests/test_coverage_site_geometry.py +35 -0
- ssatk-1.1.0/tests/test_earth_zonal_harmonics.py +65 -0
- ssatk-1.1.0/tests/test_eclipse_geometry.py +54 -0
- ssatk-1.1.0/tests/test_eclipse_partial_shadow.py +17 -0
- ssatk-1.1.0/tests/test_ekf.py +70 -0
- ssatk-1.1.0/tests/test_ellipse_fit_helpers.py +86 -0
- ssatk-1.1.0/tests/test_ellipse_inject.py +65 -0
- ssatk-1.1.0/tests/test_encounter_frame_roundoff.py +46 -0
- ssatk-1.1.0/tests/test_engine_budgets.py +30 -0
- ssatk-1.1.0/tests/test_environment.py +115 -0
- ssatk-1.1.0/tests/test_environment_eop.py +51 -0
- ssatk-1.1.0/tests/test_environment_space_weather.py +21 -0
- ssatk-1.1.0/tests/test_epoch_comparison_tolerance.py +32 -0
- ssatk-1.1.0/tests/test_faceted_magnitude.py +67 -0
- ssatk-1.1.0/tests/test_frame_and_state_references.py +410 -0
- ssatk-1.1.0/tests/test_gamma_and_heading.py +78 -0
- ssatk-1.1.0/tests/test_horizon_frames.py +55 -0
- ssatk-1.1.0/tests/test_iers_global_state.py +35 -0
- ssatk-1.1.0/tests/test_igrf_wrapper.py +43 -0
- ssatk-1.1.0/tests/test_inertial_and_lunar_frames.py +43 -0
- ssatk-1.1.0/tests/test_integration_callback_regressions.py +15 -0
- ssatk-1.1.0/tests/test_integration_inertia_regressions.py +106 -0
- ssatk-1.1.0/tests/test_integration_leapfrog_impact_regressions.py +47 -0
- ssatk-1.1.0/tests/test_integration_photometry_regressions.py +35 -0
- ssatk-1.1.0/tests/test_integration_profile_regressions.py +15 -0
- ssatk-1.1.0/tests/test_integration_rk4_regressions.py +31 -0
- ssatk-1.1.0/tests/test_integration_segment_regressions.py +38 -0
- ssatk-1.1.0/tests/test_integration_state_continuity_regressions.py +48 -0
- ssatk-1.1.0/tests/test_integration_terminal_epoch_regressions.py +47 -0
- ssatk-1.1.0/tests/test_integration_terminal_regressions.py +42 -0
- ssatk-1.1.0/tests/test_integration_wheel_regressions.py +82 -0
- ssatk-1.1.0/tests/test_j2_reference.py +43 -0
- ssatk-1.1.0/tests/test_keplerian_helpers.py +99 -0
- ssatk-1.1.0/tests/test_lagrange_points.py +42 -0
- ssatk-1.1.0/tests/test_lagrange_rotating_frames.py +29 -0
- ssatk-1.1.0/tests/test_lambert_reference.py +47 -0
- ssatk-1.1.0/tests/test_lambertian_photometry.py +60 -0
- ssatk-1.1.0/tests/test_launch_gravity_turn.py +32 -0
- ssatk-1.1.0/tests/test_legacy_import_name.py +64 -0
- ssatk-1.1.0/tests/test_low_precision_moon.py +30 -0
- ssatk-1.1.0/tests/test_lunar_rotating_frame.py +26 -0
- ssatk-1.1.0/tests/test_magfield_physics.py +448 -0
- ssatk-1.1.0/tests/test_moon_texture_rotation.py +21 -0
- ssatk-1.1.0/tests/test_moon_webgl_json.py +117 -0
- ssatk-1.1.0/tests/test_navigation_batch.py +106 -0
- ssatk-1.1.0/tests/test_navigation_measurements.py +80 -0
- ssatk-1.1.0/tests/test_navigation_sensors.py +52 -0
- ssatk-1.1.0/tests/test_numeric_mechanics_helpers.py +92 -0
- ssatk-1.1.0/tests/test_orbit_absolute_epoch.py +69 -0
- ssatk-1.1.0/tests/test_orbit_acceleration_helpers.py +83 -0
- ssatk-1.1.0/tests/test_orbit_initializer.py +26 -0
- ssatk-1.1.0/tests/test_orbital_maneuver_modes.py +103 -0
- ssatk-1.1.0/tests/test_orbital_maneuver_reference_cases.py +173 -0
- ssatk-1.1.0/tests/test_orekit_j2_external.py +38 -0
- ssatk-1.1.0/tests/test_packaged_eop_reference.py +69 -0
- ssatk-1.1.0/tests/test_plot_earth_rotation.py +94 -0
- ssatk-1.1.0/tests/test_plot_sun_and_stars.py +80 -0
- ssatk-1.1.0/tests/test_propagators.py +136 -0
- ssatk-1.1.0/tests/test_propagators_6dof.py +1076 -0
- ssatk-1.1.0/tests/test_propagators_6dof_truth.py +65 -0
- ssatk-1.1.0/tests/test_proper_motion_radial.py +83 -0
- ssatk-1.1.0/tests/test_propulsion_catalog.py +23 -0
- ssatk-1.1.0/tests/test_read_3le.py +29 -0
- ssatk-1.1.0/tests/test_real_ssapy_force_parity.py +64 -0
- ssatk-1.1.0/tests/test_real_ssapy_parity.py +55 -0
- ssatk-1.1.0/tests/test_reference_case.py +190 -0
- ssatk-1.1.0/tests/test_satellite_frames.py +99 -0
- ssatk-1.1.0/tests/test_segment_dense_output.py +87 -0
- ssatk-1.1.0/tests/test_spacecraft_force_models.py +132 -0
- ssatk-1.1.0/tests/test_ssa_conjunction.py +114 -0
- ssatk-1.1.0/tests/test_starfield_epochs.py +18 -0
- ssatk-1.1.0/tests/test_state_to_kepler.py +61 -0
- ssatk-1.1.0/tests/test_station_keeping_burn_benchmark.py +9 -0
- ssatk-1.1.0/tests/test_synthetic_orbit_population.py +22 -0
- ssatk-1.1.0/tests/test_targeting.py +154 -0
- ssatk-1.1.0/tests/test_thrust_profiles.py +70 -0
- ssatk-1.1.0/tests/test_time_and_yastropy_helpers.py +23 -0
- ssatk-1.1.0/tests/test_time_functions.py +98 -0
- ssatk-1.1.0/tests/test_time_grids_and_orbit_quantities.py +44 -0
- ssatk-1.1.0/tests/test_tle_fixed_width_helpers.py +20 -0
- ssatk-1.1.0/tests/test_tle_iter_pairs.py +22 -0
- ssatk-1.1.0/tests/test_transfer_optimal.py +30 -0
- ssatk-1.1.0/tests/test_two_body_closed_forms.py +35 -0
ssatk-1.1.0/LICENSE
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
BSD 3-Clause License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026, Lawrence Livermore National Laboratory
|
|
4
|
+
|
|
5
|
+
Redistribution and use in source and binary forms, with or without
|
|
6
|
+
modification, are permitted provided that the following conditions are met:
|
|
7
|
+
|
|
8
|
+
1. Redistributions of source code must retain the above copyright notice, this
|
|
9
|
+
list of conditions and the following disclaimer.
|
|
10
|
+
|
|
11
|
+
2. Redistributions in binary form must reproduce the above copyright notice,
|
|
12
|
+
this list of conditions and the following disclaimer in the documentation
|
|
13
|
+
and/or other materials provided with the distribution.
|
|
14
|
+
|
|
15
|
+
3. Neither the name of the copyright holder nor the names of its
|
|
16
|
+
contributors may be used to endorse or promote products derived from
|
|
17
|
+
this software without specific prior written permission.
|
|
18
|
+
|
|
19
|
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
20
|
+
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
21
|
+
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
22
|
+
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
|
23
|
+
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
24
|
+
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
|
25
|
+
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
|
26
|
+
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
|
27
|
+
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
28
|
+
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
ssatk-1.1.0/NOTICE
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
This work was produced under the auspices of the U.S. Department of Energy by Lawrence Livermore National Laboratory under Contract DE-AC52-07NA27344.
|
|
2
|
+
|
|
3
|
+
This work was prepared as an account of work sponsored by an agency of the United States Government. Neither the United States Government nor Lawrence Livermore National Security, LLC, nor any of their employees makes any warranty, expressed or implied, or assumes any legal liability or responsibility for the accuracy, completeness, or usefulness of any information, apparatus, product, or process disclosed, or represents that its use would not infringe privately owned rights.
|
|
4
|
+
|
|
5
|
+
Reference herein to any specific commercial product, process, or service by trade name, trademark, manufacturer, or otherwise does not necessarily constitute or imply its endorsement, recommendation, or favoring by the United States Government or Lawrence Livermore National Security, LLC.
|
|
6
|
+
|
|
7
|
+
The views and opinions of authors expressed herein do not necessarily state or reflect those of the United States Government or Lawrence Livermore National Security, LLC, and shall not be used for advertising or product endorsement purposes.
|
|
8
|
+
|
|
9
|
+
LLNL-CODE-2015996
|
|
10
|
+
|
|
11
|
+
Third-party JavaScript assets included for the optional satellite viewer:
|
|
12
|
+
|
|
13
|
+
- three.min.js: Three.js r128, Copyright 2010-2021 Three.js Authors, MIT License.
|
|
14
|
+
- OrbitControls.js: Three.js r128, Copyright 2010-2021 Three.js Authors, MIT License.
|
|
15
|
+
- satellite.min.js: satellite-js v4.1.4, Copyright 2013 Shashwat Kandadai and UCSC, MIT License.
|
ssatk-1.1.0/PKG-INFO
ADDED
|
@@ -0,0 +1,591 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: ssatk
|
|
3
|
+
Version: 1.1.0
|
|
4
|
+
Summary: Space Situational Awareness Toolkit (SSATK): orbital mechanics, plotting, and data IO built on SSAPy
|
|
5
|
+
Author-email: "Travis R. Yeager" <yeagerastro@gmail.com>
|
|
6
|
+
License-Expression: BSD-3-Clause
|
|
7
|
+
Project-URL: Homepage, https://github.com/LLNL/ssatk
|
|
8
|
+
Project-URL: Repository, https://github.com/LLNL/ssatk
|
|
9
|
+
Project-URL: Issues, https://github.com/LLNL/ssatk/issues
|
|
10
|
+
Project-URL: Documentation, https://ssapy-toolkit.readthedocs.io/
|
|
11
|
+
Keywords: orbital-mechanics,astrodynamics,visualization,utilities
|
|
12
|
+
Classifier: Development Status :: 3 - Alpha
|
|
13
|
+
Classifier: Intended Audience :: Science/Research
|
|
14
|
+
Classifier: Programming Language :: Python :: 3
|
|
15
|
+
Classifier: Programming Language :: Python :: 3 :: Only
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
20
|
+
Classifier: Operating System :: OS Independent
|
|
21
|
+
Classifier: Topic :: Scientific/Engineering :: Astronomy
|
|
22
|
+
Classifier: Topic :: Scientific/Engineering :: Visualization
|
|
23
|
+
Requires-Python: >=3.10
|
|
24
|
+
Description-Content-Type: text/markdown
|
|
25
|
+
License-File: LICENSE
|
|
26
|
+
License-File: NOTICE
|
|
27
|
+
Requires-Dist: astropy
|
|
28
|
+
Requires-Dist: h5py
|
|
29
|
+
Requires-Dist: imageio
|
|
30
|
+
Requires-Dist: llnl-ssapy>=1.1.11
|
|
31
|
+
Requires-Dist: ssatk-data-core==0.0.1
|
|
32
|
+
Requires-Dist: ssatk-data-gravity==0.0.1
|
|
33
|
+
Requires-Dist: ssatk-data-lunar==0.0.1
|
|
34
|
+
Requires-Dist: ssatk-data-lunar-gravity==0.0.1
|
|
35
|
+
Requires-Dist: matplotlib
|
|
36
|
+
Requires-Dist: numpy
|
|
37
|
+
Requires-Dist: pandas
|
|
38
|
+
Requires-Dist: pillow
|
|
39
|
+
Requires-Dist: plotly
|
|
40
|
+
Requires-Dist: pyerfa
|
|
41
|
+
Requires-Dist: rebound
|
|
42
|
+
Requires-Dist: scipy
|
|
43
|
+
Provides-Extra: monitoring
|
|
44
|
+
Requires-Dist: psutil; extra == "monitoring"
|
|
45
|
+
Provides-Extra: propulsion
|
|
46
|
+
Requires-Dist: ssatk-data-propulsion==0.0.1; extra == "propulsion"
|
|
47
|
+
Provides-Extra: benchmarks
|
|
48
|
+
Requires-Dist: ssatk-data-benchmarks==0.0.1; extra == "benchmarks"
|
|
49
|
+
Provides-Extra: all-data
|
|
50
|
+
Requires-Dist: ssatk-data-core==0.0.1; extra == "all-data"
|
|
51
|
+
Requires-Dist: ssatk-data-gravity==0.0.1; extra == "all-data"
|
|
52
|
+
Requires-Dist: ssatk-data-lunar==0.0.1; extra == "all-data"
|
|
53
|
+
Requires-Dist: ssatk-data-lunar-gravity==0.0.1; extra == "all-data"
|
|
54
|
+
Requires-Dist: ssatk-data-propulsion==0.0.1; extra == "all-data"
|
|
55
|
+
Requires-Dist: ssatk-data-benchmarks==0.0.1; extra == "all-data"
|
|
56
|
+
Provides-Extra: notebook
|
|
57
|
+
Requires-Dist: ipython; extra == "notebook"
|
|
58
|
+
Requires-Dist: ipyvolume; extra == "notebook"
|
|
59
|
+
Provides-Extra: static
|
|
60
|
+
Requires-Dist: kaleido; extra == "static"
|
|
61
|
+
Provides-Extra: browser
|
|
62
|
+
Requires-Dist: selenium; extra == "browser"
|
|
63
|
+
Provides-Extra: pdf
|
|
64
|
+
Requires-Dist: pypdf; extra == "pdf"
|
|
65
|
+
Provides-Extra: video
|
|
66
|
+
Requires-Dist: imageio-ffmpeg; extra == "video"
|
|
67
|
+
Requires-Dist: opencv-python; extra == "video"
|
|
68
|
+
Provides-Extra: geomagnetics
|
|
69
|
+
Requires-Dist: ppigrf; extra == "geomagnetics"
|
|
70
|
+
Requires-Dist: geopack; extra == "geomagnetics"
|
|
71
|
+
Provides-Extra: atmosphere
|
|
72
|
+
Requires-Dist: pymsis>=0.12; extra == "atmosphere"
|
|
73
|
+
Provides-Extra: validation
|
|
74
|
+
Requires-Dist: spacepy; extra == "validation"
|
|
75
|
+
Provides-Extra: dev
|
|
76
|
+
Requires-Dist: coverage; extra == "dev"
|
|
77
|
+
Requires-Dist: ipython; extra == "dev"
|
|
78
|
+
Requires-Dist: ipyvolume; extra == "dev"
|
|
79
|
+
Requires-Dist: kaleido; extra == "dev"
|
|
80
|
+
Requires-Dist: pytest; extra == "dev"
|
|
81
|
+
Requires-Dist: pytest-mpi; extra == "dev"
|
|
82
|
+
Requires-Dist: sphinx; extra == "dev"
|
|
83
|
+
Requires-Dist: sphinx-rtd-theme; extra == "dev"
|
|
84
|
+
Requires-Dist: myst-parser<4.0.0; extra == "dev"
|
|
85
|
+
Requires-Dist: nodeenv; extra == "dev"
|
|
86
|
+
Requires-Dist: imageio-ffmpeg; extra == "dev"
|
|
87
|
+
Requires-Dist: opencv-python; extra == "dev"
|
|
88
|
+
Requires-Dist: pypdf; extra == "dev"
|
|
89
|
+
Requires-Dist: psutil; extra == "dev"
|
|
90
|
+
Requires-Dist: ruff; extra == "dev"
|
|
91
|
+
Requires-Dist: selenium; extra == "dev"
|
|
92
|
+
Requires-Dist: build; extra == "dev"
|
|
93
|
+
Requires-Dist: twine; extra == "dev"
|
|
94
|
+
Dynamic: license-file
|
|
95
|
+
|
|
96
|
+
# Space Situational Awareness Toolkit (SSATK)
|
|
97
|
+
|
|
98
|
+
The **Space Situational Awareness Toolkit (SSATK)** — `pip install ssatk`,
|
|
99
|
+
`import ssatk` — is a collection of higher-level, analysis-ready extensions for the
|
|
100
|
+
[SSAPy](https://github.com/llnl/SSAPy) orbital-modeling ecosystem. Where SSAPy
|
|
101
|
+
provides the core high-fidelity propagation and modeling engine, the Toolkit
|
|
102
|
+
adds astrodynamics utilities, orbital-transfer design, coordinate/time
|
|
103
|
+
conversions, brightness and observables modeling, launch and propulsion
|
|
104
|
+
helpers, orbit and 6-DoF propagators, rich plotting, and data I/O to support day-to-day research and
|
|
105
|
+
engineering workflows.
|
|
106
|
+
|
|
107
|
+
SSAPy itself is a fast, flexible, high-fidelity orbital modeling and analysis
|
|
108
|
+
tool for orbits spanning from low-Earth orbit into the cislunar regime, with
|
|
109
|
+
configurable force models (Earth and lunar gravity, radiation pressure, drag,
|
|
110
|
+
planetary perturbations, maneuvers), multiple propagators, orbit determination,
|
|
111
|
+
Monte Carlo / uncertainty-quantification workflows, and ground/space observer
|
|
112
|
+
models. See the SSAPy repository for full details:
|
|
113
|
+
<https://github.com/llnl/SSAPy>.
|
|
114
|
+
|
|
115
|
+
## Why SSATK?
|
|
116
|
+
|
|
117
|
+
SSATK is the analyst-facing layer around SSAPy: it keeps common orbital
|
|
118
|
+
mechanics, plotting, transfer-design, data I/O, and early 6-DoF spacecraft
|
|
119
|
+
workflows in one import path while preserving SSAPy as the core propagation
|
|
120
|
+
engine. The benchmarking review compares SSATK against adjacent astrodynamics,
|
|
121
|
+
mission-design, and 6-DoF tools:
|
|
122
|
+
[`docs/benchmarking_ssatk.rst`](docs/benchmarking_ssatk.rst). The 6-DoF design
|
|
123
|
+
study explains why SSATK is adding a lightweight spacecraft body/component
|
|
124
|
+
layer instead of trying to replace established tools such as Basilisk, Tudat,
|
|
125
|
+
GMAT, Orekit, STK, or FreeFlyer:
|
|
126
|
+
[`docs/design/6dof_architecture.rst`](docs/design/6dof_architecture.rst).
|
|
127
|
+
|
|
128
|
+
---
|
|
129
|
+
|
|
130
|
+
## Features
|
|
131
|
+
|
|
132
|
+
- **Orbital mechanics & astrodynamics** — Keplerian utilities, ellipse fitting,
|
|
133
|
+
r/v conversions, Lagrange points, and synthetic orbit populations.
|
|
134
|
+
- **Orbital transfers** — a full transfer-design suite: Hohmann, coplanar,
|
|
135
|
+
Lambert, inclination-change, and rendezvous transfers; continuous-thrust
|
|
136
|
+
transfers; shooter and optimal-transfer methods; and burn-to-delta-v
|
|
137
|
+
conversions with finite-burn modeling.
|
|
138
|
+
- **Coordinate transforms & time conversions** — GCRF-to-ITRF, GCRF-to-NTW,
|
|
139
|
+
GCRF-to-LLH/lon-lat, GCRF-to-lunar, J2000-to-GCRF, Cartesian/spherical/
|
|
140
|
+
cylindrical, equatorial/ecliptic, sky-angle helpers, and satellite operation
|
|
141
|
+
frames (NTW, RTN, LVLH, VNB, body, topocentric, and line-of-sight), using a
|
|
142
|
+
right-handed NTW (N = T x W) convention consistent with SSAPy.
|
|
143
|
+
- **Observables & brightness modeling** — Lambertian magnitude / brightness,
|
|
144
|
+
including object thermal emission, Earth-shadow effects, and ground
|
|
145
|
+
reflectance.
|
|
146
|
+
- **Plotting & visualization** — orbit, ground-track, cislunar (2-D and 3-D),
|
|
147
|
+
and transfer plots; interactive dashboards; and animated GIF/video output.
|
|
148
|
+
- **Propagators** — adaptive DOP853 translational propagation, fixed-step RK4/leapfrog helpers, and 6-DoF propagation.
|
|
149
|
+
- **6-DoF dynamics** — coupled translational and rigid-body attitude
|
|
150
|
+
propagation with quaternion attitude states, optional user acceleration and
|
|
151
|
+
torque models, gravity-gradient torque, fixed-facet drag/SRP, thrusters,
|
|
152
|
+
articulated facet transforms, magnetic torquers, reaction wheels, dynamic
|
|
153
|
+
tank mass properties, dry-mass stopping events, and a basic quaternion PD
|
|
154
|
+
controller.
|
|
155
|
+
- **Launch & propulsion** — launch-pad definitions, gravity-turn ascent,
|
|
156
|
+
engine catalogs, thrust profiles, and fuel/burn utilities.
|
|
157
|
+
- **Data I/O** — CCSDS CDM KVN 1.0 and OMM XML 2.0 interoperability, HDF5
|
|
158
|
+
helpers (including dictionary/HDF5 conversion with array handling and
|
|
159
|
+
selective key loading), plus CSV, JSON, XML, pickle, and TLE/3LE parsing.
|
|
160
|
+
OMM XML support covers the `meanElements` and `tleParameters` data-block
|
|
161
|
+
subset; structured covariance and other structured data blocks are rejected
|
|
162
|
+
explicitly.
|
|
163
|
+
- **SSAPy wrappers & HPC helpers** — convenience wrappers around SSAPy orbits,
|
|
164
|
+
propagators, and satellite keyword arguments, plus utilities for HPC
|
|
165
|
+
workflows.
|
|
166
|
+
- **Demo gallery** — a runnable gallery of worked examples with inline output.
|
|
167
|
+
|
|
168
|
+
---
|
|
169
|
+
|
|
170
|
+
## Installation
|
|
171
|
+
|
|
172
|
+
SSATK is a standard Python package, published on PyPI as `ssatk`.
|
|
173
|
+
|
|
174
|
+
> **Renamed in 1.1.0.** SSATK was published as `ssapy-toolkit` and imported as
|
|
175
|
+
> `ssapy_toolkit` through 1.0.7. Existing installs can run
|
|
176
|
+
> `python -m pip install -U ssapy-toolkit`: that release is a thin package that
|
|
177
|
+
> pulls in `ssatk` and keeps `import ssapy_toolkit` working (it forwards to
|
|
178
|
+
> `ssatk` and emits a `FutureWarning`). New installs should use
|
|
179
|
+
> `python -m pip install ssatk`. The `ssapy-*` command names remain as aliases
|
|
180
|
+
> of the `ssatk-*` commands.
|
|
181
|
+
|
|
182
|
+
```
|
|
183
|
+
python -m venv .venv
|
|
184
|
+
source .venv/bin/activate # On Windows: .venv\Scripts\activate
|
|
185
|
+
python -m pip install --upgrade pip
|
|
186
|
+
python -m pip install -e .[dev]
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
This installs the package in editable mode along with development dependencies
|
|
190
|
+
(testing, linting, docs tools, JavaScript validation helpers, etc.). Runtime
|
|
191
|
+
plotting dependencies support HTML, image, and GIF output through Plotly,
|
|
192
|
+
Matplotlib, Pillow, imageio, and split SSATK data assets. Install
|
|
193
|
+
`ssatk[static]` for Plotly static-image export through Kaleido,
|
|
194
|
+
`ssatk[pdf]` for appending pages to existing PDF plots,
|
|
195
|
+
`ssatk[notebook]` for IPython display and ipyvolume Earth/Moon meshes,
|
|
196
|
+
`ssatk[video]` for OpenCV MP4 output and a bundled FFmpeg fallback, and
|
|
197
|
+
`ssatk[browser]` for Selenium browser capture. Node.js 20+ is used only to validate the
|
|
198
|
+
self-contained JavaScript viewer sources; GitHub Actions installs it with
|
|
199
|
+
`actions/setup-node`, and local developers can use system Node.js or `nodeenv`.
|
|
200
|
+
Install `ssatk[monitoring]` to enable the optional current-process RSS
|
|
201
|
+
memory helper.
|
|
202
|
+
|
|
203
|
+
SSATK builds on SSAPy; see the
|
|
204
|
+
[SSAPy](https://github.com/llnl/SSAPy) repository for its installation details.
|
|
205
|
+
|
|
206
|
+
---
|
|
207
|
+
|
|
208
|
+
## Usage
|
|
209
|
+
|
|
210
|
+
The Toolkit is intended to be the main user-facing entry point. Shared SSAPy
|
|
211
|
+
constants are available through the Toolkit, so users do not need to know
|
|
212
|
+
whether a constant originates in base SSAPy or Toolkit-specific helpers:
|
|
213
|
+
|
|
214
|
+
```
|
|
215
|
+
import ssatk
|
|
216
|
+
|
|
217
|
+
print(ssatk.EARTH_MU)
|
|
218
|
+
print(ssatk.constants.RGEO)
|
|
219
|
+
|
|
220
|
+
orbit = ssatk.Orbit.fromKeplerianElements(
|
|
221
|
+
a=ssatk.constants.RGEO,
|
|
222
|
+
e=0.0,
|
|
223
|
+
i=0.0,
|
|
224
|
+
pa=0.0,
|
|
225
|
+
raan=0.0,
|
|
226
|
+
trueAnomaly=0.0,
|
|
227
|
+
t=0.0,
|
|
228
|
+
)
|
|
229
|
+
r, v = ssatk.rv(orbit, time=[0.0, 60.0])
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
Base SSAPy core objects such as `Orbit`, `rv`, `groundTrack`, and `AccelKepler`
|
|
233
|
+
are lazily available through `ssatk`. Toolkit duplicate helpers take
|
|
234
|
+
precedence at the top level, so names such as `ssatk.norm`,
|
|
235
|
+
`ssatk.deg0to360`, and `ssatk.period` resolve to Toolkit
|
|
236
|
+
implementations. Toolkit submodules also win on collisions such as
|
|
237
|
+
`ssatk.io` and `ssatk.utils`; the base package remains available
|
|
238
|
+
as `ssatk.ssapy` when direct SSAPy module access is needed.
|
|
239
|
+
Earth/Moon helpers formerly provided by `ssapy.plotUtils` are available as
|
|
240
|
+
`ssatk.draw_earth`, `draw_moon`, `load_earth_file`, and
|
|
241
|
+
`load_moon_file`.
|
|
242
|
+
|
|
243
|
+
CCSDS Conjunction Data Message (CDM) KVN 1.0 files use SI values in memory:
|
|
244
|
+
|
|
245
|
+
```python
|
|
246
|
+
from ssatk.io.ccsds_cdm import read_cdm, write_cdm
|
|
247
|
+
|
|
248
|
+
cdm = read_cdm("conjunction.cdm")
|
|
249
|
+
object1_gcrf = cdm.object1.state_gcrf()
|
|
250
|
+
write_cdm(cdm, "canonical.cdm")
|
|
251
|
+
```
|
|
252
|
+
|
|
253
|
+
The reader accepts calendar or ordinal Coordinated Universal Time (UTC), all
|
|
254
|
+
three CDM 1.0 state frames (`GCRF`, `EME2000`, and `ITRF`), and the mandatory
|
|
255
|
+
RTN covariance plus complete optional drag, solar-radiation-pressure, and
|
|
256
|
+
thrust rows. Later alternate-covariance extensions are rejected explicitly.
|
|
257
|
+
|
|
258
|
+
For workflow functions, import the specific Toolkit module you need:
|
|
259
|
+
|
|
260
|
+
```
|
|
261
|
+
from ssatk.orbital_mechanics import keplerian
|
|
262
|
+
from ssatk.orbital_mechanics import transfer_hohmann
|
|
263
|
+
from ssatk.orbital_mechanics import transfer_bielliptic
|
|
264
|
+
from ssatk.coordinates import gcrf_to_itrf
|
|
265
|
+
from ssatk.plots import orbit_plot
|
|
266
|
+
```
|
|
267
|
+
|
|
268
|
+
For high-accuracy translational propagation, use the adaptive DOP853 wrapper in
|
|
269
|
+
`propagators_orbit` instead of the older fixed-step helpers:
|
|
270
|
+
|
|
271
|
+
```
|
|
272
|
+
import numpy as np
|
|
273
|
+
from ssatk.constants import EARTH_MU
|
|
274
|
+
from ssatk.propagators_orbit import propagate_orbit_state
|
|
275
|
+
|
|
276
|
+
radius = 7_000_000.0
|
|
277
|
+
speed = np.sqrt(EARTH_MU / radius)
|
|
278
|
+
traj = propagate_orbit_state(
|
|
279
|
+
r0=[radius, 0.0, 0.0],
|
|
280
|
+
v0=[0.0, speed, 0.0],
|
|
281
|
+
times=np.linspace(0.0, 3600.0, 121),
|
|
282
|
+
)
|
|
283
|
+
```
|
|
284
|
+
|
|
285
|
+
For rigid-body spacecraft dynamics, use `Spacecraft` when you want an
|
|
286
|
+
`Orbit`-like object with attitude, angular rate, inertia, and mass attached.
|
|
287
|
+
Use `Spacecraft.from_orbit(orbit, ...)` to attach 6-DoF state to an SSAPy
|
|
288
|
+
`Orbit`, `spacecraft.to_orbit()` to return the translational state to SSAPy,
|
|
289
|
+
and `propagate_6dof` directly for lower-level numerical propagation.
|
|
290
|
+
|
|
291
|
+
```
|
|
292
|
+
import numpy as np
|
|
293
|
+
import ssatk
|
|
294
|
+
from ssatk.accelerations_6dof import SpacecraftAccelJ2, constant_body_thrust
|
|
295
|
+
from ssatk.plots import orbit_plot
|
|
296
|
+
|
|
297
|
+
sat = ssatk.Spacecraft(
|
|
298
|
+
r=[7_000_000.0, 0.0, 0.0],
|
|
299
|
+
v=[0.0, 7_500.0, 0.0],
|
|
300
|
+
q=[1.0, 0.0, 0.0, 0.0], # [w, x, y, z], body to inertial
|
|
301
|
+
omega=[0.0, 0.0, 0.001], # body-frame rad/s
|
|
302
|
+
inertia=np.diag([10.0, 12.0, 8.0]),
|
|
303
|
+
mass=100.0,
|
|
304
|
+
)
|
|
305
|
+
|
|
306
|
+
traj = sat.propagate(
|
|
307
|
+
times=np.linspace(0.0, 600.0, 61),
|
|
308
|
+
acceleration=SpacecraftAccelJ2(),
|
|
309
|
+
body_acceleration=constant_body_thrust([0.0, 0.01, 0.0], sat.mass),
|
|
310
|
+
gravity_gradient=True,
|
|
311
|
+
)
|
|
312
|
+
|
|
313
|
+
orbit_plot(traj.r, traj.t, view="3d")
|
|
314
|
+
```
|
|
315
|
+
|
|
316
|
+
Reusable 6-DoF acceleration models live in ``ssatk.accelerations_6dof`` and
|
|
317
|
+
include SSAPy-like classes for Kepler gravity, J2, third-body gravity,
|
|
318
|
+
cannonball drag, cannonball solar radiation pressure, constant inertial/NTW/body
|
|
319
|
+
accelerations, summed acceleration/torque models, and attitude-dependent
|
|
320
|
+
flat-plate drag/SRP models, facet drag/SRP models, thruster torque, and
|
|
321
|
+
magnetic-dipole and gravity-gradient torque. Reaction wheels and
|
|
322
|
+
``SpacecraftAttitudePD`` provide a small actuator/control layer for attitude
|
|
323
|
+
studies; reaction-wheel momentum is propagated as an optional state when the
|
|
324
|
+
body defines wheels, and configured ``momentum_capacity`` values prevent
|
|
325
|
+
commands from driving wheels beyond their stored angular-momentum limits.
|
|
326
|
+
``SpaceEnvironment`` supplies epoch-aware Sun/Moon ephemerides, atmosphere
|
|
327
|
+
density and velocity, magnetic field, and disk-overlap Earth/Moon eclipse
|
|
328
|
+
fractions for environment-backed force models. Use ``third_bodies=True`` for
|
|
329
|
+
Moon/Sun perturbations, ``third_bodies="planets"`` for Mercury through Neptune
|
|
330
|
+
except Earth, or ``third_bodies="all"`` for a full Solar-System perturbation
|
|
331
|
+
set. Optional gravity-gradient torque supports central Earth or Earth/Moon/Sun
|
|
332
|
+
models. Common force-stack presets are available through
|
|
333
|
+
``SpaceEnvironment.force_models(preset="leo"|"earth_orbit"|"cislunar"|"all")``
|
|
334
|
+
and individual options can still override each preset. The default atmosphere
|
|
335
|
+
velocity is rigid Earth co-rotation; pass ``atmosphere_velocity_model=...`` for
|
|
336
|
+
wind or corotation overrides. The default magnetic field is a dependency-light
|
|
337
|
+
centered Earth dipole; use ``magnetic_field_model="igrf"`` for optional
|
|
338
|
+
``ppigrf``-backed IGRF field synthesis or pass a callable for mission-specific
|
|
339
|
+
models.
|
|
340
|
+
Thrusters report positive propellant mass flow from thrust and specific impulse;
|
|
341
|
+
``propagate_6dof`` can propagate mass when a mass-flow model is supplied.
|
|
342
|
+
For bodies with tanks, propagated mass updates tank propellant proportionally so
|
|
343
|
+
center of mass and inertia evolve during finite burns. Use
|
|
344
|
+
`propellant_empty_event` or `mass_floor_event` to stop burns at dry mass.
|
|
345
|
+
|
|
346
|
+
Finite maneuver accelerations use ``SpacecraftManeuverAccel``. Use
|
|
347
|
+
``frame="rtn"``/``"lvlh"``/``"ric"`` for common radial-transverse-normal
|
|
348
|
+
operations, ``frame="vnb"`` for velocity-normal-binormal commands,
|
|
349
|
+
``frame="body"`` for body-mounted thrust, or ``frame="ntw"`` for exact SSAPy
|
|
350
|
+
``[N, T, W]`` convention. Thrust can be constant, trapezoidal, smoothstep,
|
|
351
|
+
exponential, pulsed, callable, or loaded from CSV with ``ThrustCurve``; citable
|
|
352
|
+
engine data belongs in the appropriate split SSATK data repository rather than this source repository and can be
|
|
353
|
+
loaded with ``load_thrust_curve_data(...)`` once packaged.
|
|
354
|
+
|
|
355
|
+
Preset spacecraft bodies live in `ssatk.satellites`. Use
|
|
356
|
+
`satellite_design(...)` to start from a common bus, override dimensions or
|
|
357
|
+
mass, then add components, tanks, facets, or thrusters as needed:
|
|
358
|
+
|
|
359
|
+
```
|
|
360
|
+
from ssatk.accelerations_6dof import (
|
|
361
|
+
SpacecraftFacetDrag,
|
|
362
|
+
SpacecraftFacetSolRad,
|
|
363
|
+
SpacecraftManeuverAccel,
|
|
364
|
+
SpacecraftThrusterAccel,
|
|
365
|
+
)
|
|
366
|
+
|
|
367
|
+
body = ssatk.satellite_design(
|
|
368
|
+
"earth_observation",
|
|
369
|
+
mass=500.0,
|
|
370
|
+
solar_array_area=10.0,
|
|
371
|
+
).with_thrusters(
|
|
372
|
+
ssatk.Thruster(thrust=0.2, direction_body=[1, 0, 0], position_body=[0, 0.5, 0]),
|
|
373
|
+
).with_components(
|
|
374
|
+
ssatk.Component(mass=25.0, position_body=[0.0, 0.0, 0.7], name="payload"),
|
|
375
|
+
).with_magnetic_dipoles(
|
|
376
|
+
ssatk.MagneticDipole(moment_body=[0.2, 0.0, 0.0], name="x_magnetorquer"),
|
|
377
|
+
).with_reaction_wheels(
|
|
378
|
+
*ssatk.reaction_wheel_triplet(max_torque=0.02),
|
|
379
|
+
)
|
|
380
|
+
|
|
381
|
+
sat = ssatk.Spacecraft(r=[7e6, 0, 0], v=[0, 7500, 0], body=body)
|
|
382
|
+
q_target = ssatk.attitude_quaternion_from_frame("nadir_velocity", r=sat.r, v=sat.v)
|
|
383
|
+
burn = SpacecraftManeuverAccel(
|
|
384
|
+
ssatk.thrust_profile_trapezoid(0.2, start=120.0, burn_time=60.0, rise_time=5.0),
|
|
385
|
+
frame="rtn",
|
|
386
|
+
direction=[0, 1, 0],
|
|
387
|
+
isp=220.0,
|
|
388
|
+
)
|
|
389
|
+
traj = sat.propagate(
|
|
390
|
+
times=np.linspace(0.0, 600.0, 61),
|
|
391
|
+
models=[
|
|
392
|
+
SpacecraftFacetDrag(density=1e-12),
|
|
393
|
+
SpacecraftFacetSolRad([ssatk.AU, 0, 0]),
|
|
394
|
+
burn,
|
|
395
|
+
ssatk.SpacecraftMagneticTorque([0, 2e-5, 0]),
|
|
396
|
+
ssatk.SpacecraftReactionWheelTorque([0, 0, 0.01]),
|
|
397
|
+
ssatk.SpacecraftAttitudePD(q_target=q_target, kp=0.05, kd=0.2, max_torque=0.02),
|
|
398
|
+
SpacecraftThrusterAccel(),
|
|
399
|
+
],
|
|
400
|
+
)
|
|
401
|
+
```
|
|
402
|
+
|
|
403
|
+
`transfer_bielliptic` computes the analytic three-impulse, two-half-ellipse
|
|
404
|
+
transfer between coplanar circular orbits through an intermediate apoapsis
|
|
405
|
+
radius. It is useful for quick radius-to-radius trade studies; use
|
|
406
|
+
`transfer_ssapy` or `transfer_optimal` when fixed epochs, target phasing,
|
|
407
|
+
perturbed propagation, or non-circular boundary states matter.
|
|
408
|
+
Transfer entry points accept either SSAPy `Orbit` objects (`orbit1`/`orbit2`,
|
|
409
|
+
`initial`/`target`) or raw inertial state vectors (`r1, v1, r2, v2`). For
|
|
410
|
+
`transfer_optimal`, set `departure_mode="now"` or `leave_now=True` to depart
|
|
411
|
+
from the supplied state; leave the default `departure_mode="optimize"` to search
|
|
412
|
+
for the best departure phase/time.
|
|
413
|
+
Set `stage_mode="immediate"` or `stage_mode="timed"` to explicitly search
|
|
414
|
+
staged transfers through candidate staging orbits; `stage_mode="best"` compares
|
|
415
|
+
the direct and staged routes. Timed staging allows each post-stage leg to wait
|
|
416
|
+
for an appropriate phase instead of leaving the staging orbit immediately. The
|
|
417
|
+
default `n_stage_stops=1` searches one intermediate staging orbit; increase
|
|
418
|
+
`n_stage_stops` and set `stage_beam_width` for bounded multi-stop searches.
|
|
419
|
+
For larger design trades, `transfer_optimal` also accepts a structured
|
|
420
|
+
`problem={...}` schema that groups boundary conditions, objective, constraints,
|
|
421
|
+
route, and solver controls in one call:
|
|
422
|
+
|
|
423
|
+
```
|
|
424
|
+
from ssatk.orbital_mechanics import transfer_optimal
|
|
425
|
+
|
|
426
|
+
result = transfer_optimal(
|
|
427
|
+
problem={
|
|
428
|
+
"boundary": {
|
|
429
|
+
"initial": orbit1, # or r1/v1/r2/v2 at top level
|
|
430
|
+
"target": orbit2,
|
|
431
|
+
"departure_mode": "leave now", # or "leave whenever"
|
|
432
|
+
# inject: free-phase/first burn only; intercept: target position only;
|
|
433
|
+
# rendezvous: target position + velocity; insertion: free-phase velocity match
|
|
434
|
+
"arrival_mode": "rendezvous",
|
|
435
|
+
},
|
|
436
|
+
"objective": {"minimize": "delta_v", "delta_v_mode": "total"},
|
|
437
|
+
"constraints": {
|
|
438
|
+
"tof_range": (1800.0, 86400.0),
|
|
439
|
+
"dv_budget": None,
|
|
440
|
+
"perigee_altitude_min": 100e3,
|
|
441
|
+
"max_burns": 4,
|
|
442
|
+
},
|
|
443
|
+
"route": {
|
|
444
|
+
"mode": "multi_stage", # direct, immediate, multi_stage, best
|
|
445
|
+
"timing": "optimized", # immediate or optimized/timed
|
|
446
|
+
"n_stage_stops": 1,
|
|
447
|
+
"stage_candidates": {"radii": [20_000e3, 40_000e3]},
|
|
448
|
+
},
|
|
449
|
+
"solver": {"n_grid": (8, 8), "polish": False, "refine": False},
|
|
450
|
+
},
|
|
451
|
+
)
|
|
452
|
+
```
|
|
453
|
+
|
|
454
|
+
The result diagnostics include `problem_schema="ssatk.transfer_problem.v1"`
|
|
455
|
+
when the structured interface is used.
|
|
456
|
+
|
|
457
|
+
`orbit_plot` is the main entry point for in-space trajectory plots. It uses a
|
|
458
|
+
four-panel orbit view by default, and also accepts compact selectors for common
|
|
459
|
+
slices and cislunar views:
|
|
460
|
+
|
|
461
|
+
```
|
|
462
|
+
orbit_plot(r, t, frame="gcrf") # xy, xz, yz, and 3-D
|
|
463
|
+
orbit_plot(r, t, view="xy", frame="itrf") # one 2-D slice
|
|
464
|
+
orbit_plot(r, t, view=("xy", "xz", "3d")) # custom panels
|
|
465
|
+
orbit_plot(r, t, view="lunar_yz") # lunar-fixed YZ slice
|
|
466
|
+
orbit_plot(r, t, view="lunar_xy", coordinate="gcrf") # override coordinates
|
|
467
|
+
orbit_plot(r, t, view="ground track") # wide ground-track map
|
|
468
|
+
orbit_plot(r, t, view=("groundtrack", "globe")) # map + 3-D globe
|
|
469
|
+
orbit_plot(r, t, view="dashboard") # map, globe, and slices
|
|
470
|
+
orbit_plot(r, t, view="cislunar_3d") # lunar-fixed 3-D view
|
|
471
|
+
orbit_plot(r, t, view="cislunar_xy") # GCRF + lunar XY views
|
|
472
|
+
orbit_plot(r, t, view="cislunar_dashboard") # cislunar dashboard
|
|
473
|
+
orbit_plot(r, t, view="xy", save="quicklooks/orbit.mp4") # animated MP4
|
|
474
|
+
orbit_plot(r, t, view="xy", save="quicklooks/orbit.gif") # animated GIF
|
|
475
|
+
```
|
|
476
|
+
|
|
477
|
+
All plotting helpers accept `save`, `savefig`, `save_fig`, `save_figure`,
|
|
478
|
+
`savepath`, and `save_path` as equivalent save-path keywords. Relative names
|
|
479
|
+
are saved under `~/ssatk_output/figures`; absolute paths are used exactly as
|
|
480
|
+
provided. Set `SSATK_OUTPUT_DIR` to choose a different output root explicitly.
|
|
481
|
+
Use `ssatk_path` and `ssatk_fig` for direct path and figure-save helpers.
|
|
482
|
+
|
|
483
|
+
For general data products, `ssatk_save` and `ssatk_read` choose the storage
|
|
484
|
+
format from the file extension. Bare and relative data filenames are rooted
|
|
485
|
+
under `~/ssatk_output`; bare and relative figure filenames are rooted under
|
|
486
|
+
`~/ssatk_output/figures`; absolute paths are honored.
|
|
487
|
+
|
|
488
|
+
```
|
|
489
|
+
ssatk.ssatk_save({"r": r, "v": v, "t": t}, "runs/orbit.h5")
|
|
490
|
+
state = ssatk.ssatk_read("runs/orbit.h5")
|
|
491
|
+
|
|
492
|
+
ssatk.ssatk_save(r, "arrays/state.npy")
|
|
493
|
+
ssatk.ssatk_save({"r": r, "v": v}, "arrays/state.npz")
|
|
494
|
+
ssatk.ssatk_save(table, "tables/summary.csv")
|
|
495
|
+
ssatk.ssatk_save(fig, "quicklooks/orbit.png")
|
|
496
|
+
```
|
|
497
|
+
|
|
498
|
+
For keyed HDF5 or NPZ outputs, pass `key=`. Non-mapping objects default to
|
|
499
|
+
`"data"`; dictionaries use their own keys; nested dictionaries become nested
|
|
500
|
+
HDF5 groups or slash-delimited NPZ members.
|
|
501
|
+
|
|
502
|
+
More detailed examples can be found in the categorized `demos/` directory. The
|
|
503
|
+
demo gallery runner searches those subfolders recursively. To render the full
|
|
504
|
+
demo gallery as a visualization document:
|
|
505
|
+
|
|
506
|
+
```
|
|
507
|
+
ssatk-demo-gallery
|
|
508
|
+
```
|
|
509
|
+
|
|
510
|
+
The command can be run from any directory after installation. It writes the
|
|
511
|
+
HTML report to `~/ssatk_output/documents/index.html` by default and prints
|
|
512
|
+
the exact output path when it finishes. Use `--open` to open the report in a
|
|
513
|
+
browser, `--output PATH` to choose a different output directory, or
|
|
514
|
+
`--demos-dir PATH` to run demos from a source checkout explicitly. The default
|
|
515
|
+
does not fall back to the clone directory; set `SSATK_OUTPUT_DIR` if you want
|
|
516
|
+
a non-home output root.
|
|
517
|
+
|
|
518
|
+
---
|
|
519
|
+
|
|
520
|
+
## Development
|
|
521
|
+
|
|
522
|
+
To run the test suite:
|
|
523
|
+
|
|
524
|
+
```
|
|
525
|
+
pytest tests
|
|
526
|
+
```
|
|
527
|
+
|
|
528
|
+
The current CI lint gate checks fatal Ruff errors in changed Python files; it is
|
|
529
|
+
not a full formatting or style pass:
|
|
530
|
+
|
|
531
|
+
```bash
|
|
532
|
+
set -euo pipefail
|
|
533
|
+
base_ref="$(git merge-base origin/main HEAD)"
|
|
534
|
+
mapfile -t python_files < <(
|
|
535
|
+
git diff --name-only --diff-filter=ACMR "$base_ref" HEAD -- '*.py'
|
|
536
|
+
)
|
|
537
|
+
if ((${#python_files[@]})); then
|
|
538
|
+
ruff check --select E9,F63,F7,F82 "${python_files[@]}"
|
|
539
|
+
fi
|
|
540
|
+
```
|
|
541
|
+
|
|
542
|
+
Optional local repo mapping with Graphify:
|
|
543
|
+
|
|
544
|
+
```
|
|
545
|
+
pipx install graphifyy # or: python -m pip install graphifyy
|
|
546
|
+
bash scripts/install_graphify_hook.sh
|
|
547
|
+
```
|
|
548
|
+
|
|
549
|
+
The installer writes a local `.git/hooks/post-commit` hook. After each commit,
|
|
550
|
+
the hook runs `graphify . --update --wiki` in the background when the
|
|
551
|
+
`graphify` CLI is available and writes ignored output under `graphify-out/`.
|
|
552
|
+
Disable it for one commit with `SSATK_GRAPHIFY_HOOK=0 git commit ...`, or force
|
|
553
|
+
foreground execution with `SSATK_GRAPHIFY_FOREGROUND=1 git commit ...`.
|
|
554
|
+
|
|
555
|
+
---
|
|
556
|
+
|
|
557
|
+
## Documentation
|
|
558
|
+
|
|
559
|
+
Project documentation is built with Sphinx and hosted on Read the Docs.
|
|
560
|
+
Once configured, the latest documentation will be available at:
|
|
561
|
+
|
|
562
|
+
<https://ssapy-toolkit.readthedocs.io>
|
|
563
|
+
|
|
564
|
+
To build the docs locally (after installing dev dependencies):
|
|
565
|
+
|
|
566
|
+
```
|
|
567
|
+
cd docs
|
|
568
|
+
make html
|
|
569
|
+
```
|
|
570
|
+
|
|
571
|
+
The built HTML files will be in `docs/_build/html/`.
|
|
572
|
+
|
|
573
|
+
---
|
|
574
|
+
|
|
575
|
+
## Contributing
|
|
576
|
+
|
|
577
|
+
Contributions are welcome via pull request against the `main` branch. Work that
|
|
578
|
+
primarily concerns the core propagation/modeling engine should target the
|
|
579
|
+
[SSAPy](https://github.com/llnl/SSAPy) repository instead.
|
|
580
|
+
|
|
581
|
+
---
|
|
582
|
+
|
|
583
|
+
## License
|
|
584
|
+
|
|
585
|
+
SSATK is distributed under the terms of the BSD 3-Clause license. All
|
|
586
|
+
new contributions must be made under the same license. See the
|
|
587
|
+
[LICENSE](LICENSE) file for details.
|
|
588
|
+
|
|
589
|
+
SPDX-License-Identifier: BSD-3-Clause
|
|
590
|
+
|
|
591
|
+
LLNL-CODE-2015996
|