Skip to main content

Seismic waveform pipeline for orbital reentry events

Project description

Groundtrack

Contributors Forks Stargazers Issues MIT License LinkedIn Documentation DOI


Logo

Groundtrack

Seismic waveform pipeline for atmospheric re-entry events using orbital ground tracks and seismic station data.

Quick Start » · Report Bug · Request Feature

Table of Contents
  1. About The Project
  2. Built With
  3. Getting Started
  4. Usage
  5. Roadmap
  6. Contributing
  7. License
  8. Contact
  9. Acknowledgments

About The Project

Groundtrack is a Python library developed for discovering and analyzing seismic signals that are produced when an object re-enters the atmosphere. When space debris or a spacecraft re-enters the atmosphere at hypersonic speeds, it generates sonic booms that then couple into the ground and are recorded by seismic stations. Groundtrack automates the full pipeline from orbital data to the processed waveforms, while allowing each piece of the pipeline to be easily configured/called if the user wishes:

  1. Fetches TLE elements from Space-Track using a user-provided NORAD ID
  2. Propagates the ground track over a user-defined analysis window
  3. Tiles the track into spatial boxes and queries FDSN providers for any nearby seismic stations that fall within a given box
  4. Downloads waveform data for stations within a configurable distance from the ground track
  5. Applies instrument response removal and bandpass filtering
  6. Provides optional visualization tools for validating output

The library was developed at Johns Hopkins University as independent research in collaboration with Dr. Benjamin Fernando (Department of Earth and Planetary Sciences), building on the methodology established in his work on seismic detection of the 2024 Shenzhou-15 re-entry. The pipeline was first validated in multiple proof-of-concept Jupyter notebooks replicating published detection results before being migrated into this library format.

(back to top)

Built With

  • Python
  • NumPy
  • ObsPy
  • pandas
  • Space-Track
  • Skyfield

Optional Features

Groundtrack includes built-in plotting utilities for analyzing re-entry events:

  • Ground track + download boxes visualization
  • Station distribution maps
  • Raw vs. processed waveform comparisons

Install with plotting support:

pip install groundtrack[plotting]
  • matplotlib
  • cartopy

(back to top)

Getting Started

Prerequisites

  • Python 3.10+
  • A free Space-Track account for TLE and TIP message access

Installation

Install from PyPI:

pip install groundtrack

With optional plotting support:

pip install groundtrack[plotting]

Credentials

Groundtrack requires Space-Track credentials to fetch orbital data. Create a .env file in your project root:

SPACETRACK_USER=your_email@example.com
SPACETRACK_PASS=your_password

Add .env to your .gitignore to avoid accidentally committing credentials:

echo ".env" >> .gitignore

Or pass them directly to run_pipeline():

results = run_pipeline(
    ...,
    username="your_email@example.com",
    password="your_password",
)

(back to top)

Usage

Minimal Example

from groundtrack import run_pipeline

results = run_pipeline(
    norad_id=56873,
    start="2024-04-02T08:40:00Z",
    end="2024-04-02T09:00:00Z",
    cache_dir="data/cache",
    output_dir="data/outputs",
    event_name="shenzhou15_reentry",
)

With Processing and Custom Parameters

results = run_pipeline(
    norad_id=56873,
    start="2024-04-02T08:40:00Z",
    end="2024-04-02T09:00:00Z",
    cache_dir="data/cache",
    output_dir="data/outputs",
    event_name="shenzhou15_reentry",
    corridor_km=100.0,          # station inclusion threshold
    chunk_km=300.0,             # along-track box size
    apply_processing=True,      # remove instrument response + bandpass
    freqmin=1.0,                # bandpass lower corner (Hz)
    freqmax=20.0,               # bandpass upper corner (Hz)
)

Two-Step Workflow

Download first, process later with different parameters:

from groundtrack import run_pipeline, process_boxes

# Step 1 - download only
results = run_pipeline(
    norad_id=56873,
    start="2024-04-02T08:40:00Z",
    end="2024-04-02T09:00:00Z",
    cache_dir="data/cache",       # TLEs are cached here to avoid redundant Space-Track requests
    output_dir="data/outputs",
    event_name="shenzhou15_reentry",
)

# Step 2 - process separately with custom settings
process_boxes(
    boxes_root=results["manifest"]["boxes_root"],
    freqmin=1.0,
    freqmax=10.0,
)

Visualization

from groundtrack import (
    plot_track_and_boxes,
    plot_stations,
    plot_all_waveforms,
)
from pathlib import Path

# Plot ground track and download boxes
plot_track_and_boxes(
    track_points=results["track"]["track_points"],
    box_windows=results["boxes"],
)

# Plot all processed waveforms for a specific box
plot_all_waveforms(
    boxes_root=Path(results["manifest"]["boxes_root"]),
    box_ids="box_006",
    t_start_utc="2024-04-02T08:44:00Z",
    t_end_utc="2024-04-02T08:54:00Z",
)

(back to top)

Roadmap

  • Validated against Shenzhou-15 re-entry event
  • Space-Track TLE fetching with local caching
  • Orbital propagation and ground track tiling
  • FDSN station discovery with 100 km corridor filter (configurable)
  • MassDownloader-based waveform acquisition
  • Instrument response removal and bandpass filtering
  • Visualization utilities
  • Automated test suite
  • Full documentation site
  • Parallelized station queries for full-orbit passes
  • Automated sonic boom detection and classification
  • Trajectory reconstruction from detection results
  • Live re-entry support with real-time orbital data updates

See the open issues for a full list of proposed features and known issues.

(back to top)

Contributing

Contributions are welcome. If you have a suggestion or find a bug, please open an issue or submit a pull request.

  1. Fork the project
  2. Create your feature branch (git checkout -b feature/YourFeature)
  3. Commit your changes (git commit -m 'Add YourFeature')
  4. Push to the branch (git push origin feature/YourFeature)
  5. Open a pull request

(back to top)

License

Distributed under the MIT License. See LICENSE for more information.

(back to top)

Contact

Joseph Steinberg - LinkedIn - josephsteinberg933@gmail.com

Project Link: https://github.com/jsteinberg34/groundtrack

(back to top)

Acknowledgments

(back to top)

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

groundtrack-0.1.2.tar.gz (32.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

groundtrack-0.1.2-py3-none-any.whl (33.0 kB view details)

Uploaded Python 3

File details

Details for the file groundtrack-0.1.2.tar.gz.

File metadata

  • Download URL: groundtrack-0.1.2.tar.gz
  • Upload date:
  • Size: 32.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for groundtrack-0.1.2.tar.gz
Algorithm Hash digest
SHA256 a2bcd5a6f15d3896d411d1a5a4cf123002f76973dbcf04cfd38293dabbd7e5d2
MD5 a4e43a01b31a4ac7fea28ac16c728ae2
BLAKE2b-256 c81578e60dc7c6bbcce100b5cb6a12f59914270e18c2cb0adc55f48696c0bed4

See more details on using hashes here.

Provenance

The following attestation bundles were made for groundtrack-0.1.2.tar.gz:

Publisher: publish.yml on jsteinberg34/groundtrack

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file groundtrack-0.1.2-py3-none-any.whl.

File metadata

  • Download URL: groundtrack-0.1.2-py3-none-any.whl
  • Upload date:
  • Size: 33.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for groundtrack-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 b97b2737065ab2bbb508d7e4d89b4da06e5f5cd2db0846a8ec61aca2e6214550
MD5 5e753f000731d3bb7df909661ecf3238
BLAKE2b-256 fd420b26993944263336c2838b2c8f1e9aaa9d470668cce1a6dfb27b5f013885

See more details on using hashes here.

Provenance

The following attestation bundles were made for groundtrack-0.1.2-py3-none-any.whl:

Publisher: publish.yml on jsteinberg34/groundtrack

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page