Software#

I write open-source Python packages for modeling optical systems and analyzing solar data. Most of them live in the sun-data organization on GitHub and build on each other: named_arrays is the foundation, and optika models the optics of instruments like ESIS and FURST.

Foundations#

Numpy arrays with labeled axes, similar to xarray but with support for uncertainties.

Numba-accelerated interpolation routines.

Similar to the filters in scipy.ndimage but accelerated using Numba.

Creates false-color images from arrays of spectral radiance.

Optics and instruments#

Simulates optical systems, similar to Zemax.

Inverts images captured by computed tomography imaging spectrographs.

Models the ESIS optical system and interprets its flight data.

Models the FURST optical system as designed and as built.

Characterizes and uses the CCD cameras developed by Marshall Space Flight Center.

Solar data#

Analyzes solar observations from the Interface Region Imaging Spectrograph (IRIS).

Downloads and analyzes images from the NASA Solar Dynamics Observatory (SDO).

Solar physics utilities built on named_arrays: spectral lines and their contribution functions from the CHIANTI atomic database, and the Sun’s differential rotation.

Other tools#

Writes AAS journal articles as Python programs, so the numbers quoted in the text are computed by the same code that makes the figures.

Solar movie viewer

A web app, built for phones first, that turns SDO images from Helioviewer into a movie you can scrub, zoom, and hold still against the Sun’s rotation.

For fun#

Snowflakes

A web app that grows a snow crystal on your phone with the model of Gravner and Griffeath (2008), in Rust compiled to WebAssembly, from a Python package with Numba and NumPy versions that match it bit for bit.

MHD Playground

Stir a magnetized fluid with your finger and watch its field lines bend, spring back as Alfvén waves, and reconnect: two-dimensional magnetohydrodynamics on your phone’s GPU.