GWFrames

GWFrames manipulates gravitational waveforms: it changes the frames in which their modes are decomposed, aligns and compares them, hybridizes them, and constructs post-Newtonian waveforms for precessing binaries. The code implements the methods described in the paper “Angular velocity of gravitational radiation from precessing binaries and the corotating frame,” whose first commit it shares.

Note

For post-Newtonian waveforms, use PostNewtonian.jl. It is far more complete, accurate, and flexible than the post-Newtonian code in this package. Most of the rest of the functionality here has moved to scri and sxs. GWFrames is kept working mainly as a reference implementation to compare other codes against.

The central objects are the Waveform class, which holds the spin-weighted spherical-harmonic modes of a waveform together with the frame in which they are decomposed, and its subclass PNWaveform, which computes a post-Newtonian waveform. Quaternions, which represent the rotations between frames, are in the GWFrames.Quaternions submodule.

import GWFrames

# A post-Newtonian waveform for a precessing binary
W = GWFrames.PNWaveform("TaylorT4", 0.0, [0.0, 0.0, 0.9], [0.5, 0.0, 0.0], 0.02)

# Transform it to the corotating frame, in which it is nearly constant
W.TransformToCorotatingFrame()

The tutorial works through the paper with examples like this one, and the API reference documents every class and function.

Citing GWFrames

The license for using this software is basically open (see the LICENSE file), though citations to the original paper are appreciated, where relevant. Also, if your work depends on features of this module that have not been described in a separate publication of mine, I would appreciate the opportunity to be a coauthor.

This code is not optimized. In many cases, obvious optimizations were rejected in favor of clearer or simpler code, or code that simply reflected the discussion in the paper more directly. The code is generally more than fast enough for interactive use on individual waveforms, but rotations may be painfully slow for large data sets.

Contributions

The code is primarily written by Mike Boyle. Dan Hemberger helped by porting some older code from Triton to perform noise-weighted overlap calculations, and with numerous bug reports and helpful suggestions. Serguei Ossokine also helped substantially by cross-checking the post-Newtonian formulas and results. Dante Iozzo helped to keep things working as this code entered its dotage. Claude (Opus 5.5) resuscitated the package for Python 3.