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.