Satellitic
A collection of tools for satellite assessments
Take note that while this package aims to introduce simulation methods many of the derived statistical properties does not require full simulations. The reason is that satellite movements are well modelled by assuming that they are ergodic. Thus time averages are equal to ensemble averages.
Install
Install the package using :
pip install satellitic
Example
In order to create a similar image as this:
place the content of this projects data folder in you run root and execute the below code
from satellitic.init import ALL_CELESTRAK_GROUPS,PREFERRED_BANDS
import satellitic.simulation as satsim
out = satsim.run_snapshot_simulation(
out_dir="sim_20251212_dev",
groups=ALL_CELESTRAK_GROUPS, # CELESTRAK_GROUPS,
local_tle_file="tle_local.txt", # LOCAL_TLE_FALLBACK,
N_target=10000, # set to 35000 for full-scale runs (ensure resources)
grid_nlat=120,
grid_nlon=240,
model="multibeam",
n_beams_per_sat=7,
beam_half_angle_deg=0.8,
beam_pattern="hex",
beam_max_tilt_deg=10.0,
beam_gain_model="gaussian",
gain_threshold=0.25,
frequency_band="E-band",
preferred_bands=PREFERRED_BANDS,
chunk_sat=256,
chunk_ground=20000,
use_gpu_if_available=False, # set True if you installed cupy
compute_power_map = False,
do_random_sampling = True,
)
print("Simulation finished. Outputs:", out)
import pandas as pd
tdf = pd.concat( ( pd.read_csv(out['total_csv']), pd.read_csv(out['pref_csv']), pd.read_csv(out['cofreq_csv']), pd.read_csv(out['nvis_csv'])) )
print ( tdf .describe() )
Forcing qt5 in VisPy
>>> from vispy import app
... print(app.use_app('pyqt5', True)) # force PyQt5
To view an orbital simulation
Note that the streaming 3D vispy visualisation cannot handle huge amounts of satellites. Test with a small tle file and then offload to the trajectory file
>>> from satellitic.simulation import newtonian_simulator
ImportSuccess: HAS JAX IN ENVIRONMENT
>>> newtonian_simulator( run_parameters = { 'dt':5e1,
'Nsteps':None ,
'steps_per_frame':100 ,
'mass_epsilon':None ,
'mass_rule':None } ,
satellite_topology = {'Earth':'data/local_small_tle.txt'} )
To write a trajectory file you can specify
>>> newtonian_simulator( run_parameters = { 'dt':5e1,
'Nsteps':None ,
'steps_per_frame':100 ,
'mass_epsilon':None ,
'mass_rule':None } ,
satellite_topology = {'Earth':'data/local_small_tle.txt'} ,
bAnimated = True , bWriteTrajectory = True,
trajectory_filename = "trajectory.trj", bVerbose = False )
Creating a TLE file from default system definitions
If you have access to the SRS database then this method will create TLE:s from it:
from satellitic.constellation import SRSDatabase, get_active_constellations, build_unique_satellite_rows, generate_tle_file_from_srs_df
path_ = "Data/Satellit/SRS/srs3048/"
mdb_files = [
path_ + "srs3048_part1of4.mdb",
path_ + "srs3048_part2of4.mdb",
path_ + "srs3048_part3of4.mdb",
path_ + "srs3048_part4of4.mdb",
]
db = SRSDatabase(mdb_files)
db .show_table("geo")
db .show_table("orbit_set")
df = get_active_constellations(db)
df = build_unique_satellite_rows( df )
generate_tle_file_from_srs_df( df , filename="srs3048.tle" )
Running a non-visual GPU chunked simulation using dictionary defined satellites
A viable dictionary can be supplied to the below defined function satellite topology (instead of a tle file name). The dictionaries of the systems as defined in the ITU defintions are already included as defaults:
from satellitic.constants import systems_5Cs142dE
if __name__=='__main__':
selection = ['A','B','D']
systems = { s_:systems_5Cs142dE[s_] for s_ in selection }
print ( systems )
These can be directly supplied to simulator functions:
from satellitic.simulator import jax_chunked_simulator
jax_chunked_simulator( \
run_parameters = { 'dt':5e-1,
'Nframes': 20000 ,
'steps_per_frame':100 ,
'write positions' : True ,
'write velocities' : False ,
'write masses' : False } ,
satellite_topology = { 'Earth':systems } ,
bWriteTrajectory = True, trajectory_filename = None ,
bVerbose = True )
Metadata
Release files for satellitic 0.1.30
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| satellitic-0.1.30.tar.gz | 3.6 MB | Without provenance | Details for satellitic-0.1.30.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| satellitic-0.1.30-py3-none-any.whl | Python 3 | none | any | Details for satellitic-0.1.30-py3-none-any.whl |
Total release size: 3.7 MB
Release files / satellitic-0.1.30.tar.gz
| Download URL | satellitic-0.1.30.tar.gz |
|---|---|
| Size | 3.6 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
6959f4412d55069fe2455f5a1f3a9bf855ff502df2a15a292655ed458aa1e326
|
|
BLAKE2b-256 checksum How to use checksums |
cfa81d7f05bbd7e75a5a16aaacd1bd607810c08d3ff7d26c540fc554e86e707a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.12.12
|
Release files / satellitic-0.1.30-py3-none-any.whl
| Download URL | satellitic-0.1.30-py3-none-any.whl |
|---|---|
| Size | 94.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
7c2fbcf505df87ad03b581c1b4c405e0aa28a633fa1338c169560515089526ae
|
|
BLAKE2b-256 checksum How to use checksums |
88d51581793f7079a8e70d66bf133484a691c3b49b856926b9bd01f49345046a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.12.12
|
Security for satellitic 0.1.30
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.