PyStormTracker

PyStormTracker is a Python package for cyclone detection and trajectory analysis. It provides Simple, Hodges, and HEALPix tracking, spectral preprocessing and regridding, and serial, Dask, and MPI execution for meteorological and climate datasets. The Hodges implementation follows the methods of Hodges (1994, 1995, 1999), with selected implementation behavior reconciled against TRACK 1.5.4.

Language: Python
License: BSD-3-Clause

Current package

  • Cyclone detection and trajectory construction with Simple, Hodges, and HEALPix trackers.
  • Spectral filtering, regridding, feature refinement, track comparison, variable sampling, and storm-track metrics.
  • NetCDF, GRIB, Zarr, TrackJSON, TRACK tdump, and IMILAST data support across regular, Gaussian, reduced-Gaussian, projected, and HEALPix grids.
  • Serial, Dask, and MPI execution with Numba-accelerated numerical paths.

2024 TRACK 1.5.4 comparison

On the full-year 2024 ERA5 F320 → F320 benchmark, PyStormTracker completed the workflow in 57.38 s versus 1,997.16 s for TRACK 1.5.4, a 34.81× relative speedup. The RSPLICE-filtered full-year one-to-one trajectory comparison reported 99.7% F1 for both the F320 → T42 and F320 → F320 cases.

Benchmark methodology and results

2016 conference poster

The original PyStormTracker implementation was presented at the 96th American Meteorological Society Annual Meeting in 2016.

Title: PyStormTracker: A Parallel Object-Oriented Cyclone Tracker in Python
Authors: Albert M. W. Yau, Kevin Paul, John Dennis
Conference: 96th American Meteorological Society Annual Meeting
Symposium: Sixth Symposium on Advances in Modeling and Analysis Using Python
Presentation: Presentation 454 (Paper 290042)
Date: January 11, 2016

Abstract

Extra-tropical cyclones moving along storm tracks are responsible for much of the day-to-day weather variability and extreme weather events at mid-latitudes. Hence, it is of great interest to study and understand cyclone track dynamics and variability. With the availability of large ensemble datasets, such as the CMIP5 archive, it is critical that any cyclone tracking program used to study these dynamics is capable of processing such large datasets.

We have begun development on a parallel Python package, named PyStormTracker, which locates cyclone centers from model outputs and compiles a list of cyclone tracks. In the PyStormTracker's initial implementation, we define cyclones as local minima of the mean sea level pressure field. The cyclones are detected using SciPy's multi-dimensional image processing library. Cyclone center detection is accelerated using the MPI4Py message passing library, parallelizing over time steps in the input dataset. The tracks are generated by linking cyclone centers together, in time, using the nearest neighborhood method. We have evaluated the performance of the package on NCAR's Yellowstone cluster. The source code is available at GitHub, and is designed to be extensible such that new detection and linking algorithms can be independently implemented.