Skip to content

GW170817: Off-Axis Gaussian Jet Afterglow

This example models the multi-wavelength afterglow of GW170817 --- the first binary neutron star merger detected in gravitational waves --- using an off-axis Gaussian structured jet.

Background

GW170817 was detected on August 17, 2017 by LIGO/Virgo at a distance of ~40 Mpc (\(z = 0.0098\)). Its afterglow was remarkable: it rose steadily for ~160 days before turning over, a hallmark of an off-axis structured jet viewed from \(\theta_v \approx 20°\)--\(30°\) outside the jet core.

Key references:

  • Mooley et al. 2018, Nature, 554, 207 --- superluminal motion confirming off-axis jet
  • Ghirlanda et al. 2019, Science, 363, 968 --- VLBI imaging of the compact jet
  • Hajela et al. 2019, ApJL, 886, L17 --- late-time X-ray excess and kilonova afterglow
  • Hotokezaka et al. 2019, Nature Astronomy, 3, 940 --- Hubble constant from superluminal motion

Observational data

We use approximate radio (3 GHz, VLA) and X-ray (1 keV, Chandra) data compiled from the references above:

import numpy as np

DAY = 86400.0

# Radio 3 GHz (VLA) — approximate data points in microJy
data_radio_uJy = np.array([
    [16.4,   15.1,   3.4],
    [22.2,   18.0,   4.5],
    [35.2,   22.0,   4.0],
    [46.3,   28.5,   4.0],
    [54.3,   33.0,   4.5],
    [65.5,   40.0,   4.5],
    [75.4,   44.0,   4.0],
    [92.6,   52.0,   5.0],
    [107.5,  60.0,   4.5],
    [115.2,  62.0,   5.0],
    [135.8,  67.0,   5.0],
    [152.2,  70.0,   5.0],
    [163.1,  68.0,   6.0],
    [185.5,  56.0,   5.5],
    [207.4,  52.0,   5.0],
    [230.0,  48.0,   6.0],
    [260.0,  40.0,   5.0],
    [298.0,  32.0,   5.0],
    [362.0,  24.0,   5.0],
    [581.0,  12.0,   3.5],
    [900.0,   5.5,   2.5],
])

# X-ray 1 keV (Chandra) — approximate data points in nanoJy
data_xray_nJy = np.array([
    [9.2,    0.85,   0.45],
    [15.4,   1.9,    0.5],
    [109.2,  5.5,    0.8],
    [135.0,  5.6,    0.7],
    [153.5,  6.4,    0.8],
    [163.0,  6.5,    0.6],
    [186.0,  5.0,    0.7],
    [209.0,  4.2,    0.6],
    [260.0,  3.3,    0.5],
    [358.0,  1.7,    0.4],
    [581.0,  0.80,   0.30],
    [743.0,  0.50,   0.25],
])

The characteristic slow rise (\(\sim 160\) days to peak) is a direct signature of off-axis viewing: the initially Doppler-deboosted emission brightens as the jet decelerates and its beaming cone widens to include the observer.

Physical parameters

The afterglow is well-described by a Gaussian structured jet:

Parameter Value Notes
\(E_\mathrm{iso}\) \(2 \times 10^{52}\) erg Isotropic-equivalent core energy
\(\Gamma_0\) 300 Initial Lorentz factor
\(\theta_c\) 0.07 rad (\(\sim 4°\)) Jet core half-opening angle
\(\theta_v\) 0.55 rad (\(\sim 31°\)) Viewing angle
\(n_0\) \(1.5 \times 10^{-3}\) cm⁻³ ISM density
\(\varepsilon_e\) 0.1 Electron energy fraction
\(\varepsilon_B\) \(3 \times 10^{-3}\) Magnetic energy fraction
\(p\) 2.10 Electron spectral index
\(d\) 40 Mpc Luminosity distance
\(z\) 0.0098 Redshift

Note

The Gaussian profile provides smoothly declining energy and Lorentz factor wings: \(E(\theta) = E_\mathrm{iso} \exp(-\theta^2 / 2\theta_c^2)\). This is crucial for reproducing the gradual rise --- a top-hat jet would produce an abrupt turn-on.

Computing the model

from blastwave import FluxDensity_gaussian

P = {
    "Eiso":    2e52,
    "lf":      300.0,
    "theta_c": 0.07,
    "A":       0.0,
    "n0":      1.5e-3,
    "eps_e":   0.1,
    "eps_b":   3e-3,
    "p":       2.10,
    "theta_v": 0.55,
    "d":       40.0,
    "z":       0.0098,
}

t_model = np.geomspace(1.0 * DAY, 1200.0 * DAY, 200)

# Radio 3 GHz
F_radio = FluxDensity_gaussian(t_model, 3e9 * np.ones_like(t_model), P,
                                tmin=1.0, tmax=1500 * DAY, spread=False)

# X-ray 1 keV (2.418e17 Hz)
F_xray = FluxDensity_gaussian(t_model, 2.418e17 * np.ones_like(t_model), P,
                               tmin=1.0, tmax=1500 * DAY, spread=False)

Key choices:

  • FluxDensity_gaussian --- Gaussian structured jet, essential for off-axis viewing
  • theta_v = 0.55 --- the observer is \(\sim 8\times\) the jet core angle off-axis
  • spread=False --- lateral spreading is not needed for this demonstration; the off-axis geometry dominates the light curve shape
  • Default model="sync" --- optically thin synchrotron is sufficient at these frequencies and times

Plotting

2026-03-05T23:04:16.979539 image/svg+xml Matplotlib v3.10.8, https://matplotlib.org/

Discussion

The Gaussian jet model reproduces the key features of GW170817's afterglow:

  • Gradual rise over ~160 days --- caused by the structured jet wings becoming visible as the jet decelerates and the beaming cone expands to encompass the off-axis observer
  • Achromatic peak --- the radio and X-ray peak at roughly the same time, as expected for a geometric (viewing angle) effect rather than a spectral transition
  • Power-law decline --- after the peak, the light curve steepens as the jet becomes quasi-spherical

The off-axis Gaussian jet has become the standard model for GW170817's afterglow, with the viewing angle (\(\theta_v \sim 20°\)--\(30°\)) independently confirmed by VLBI superluminal motion measurements (Mooley+2018, Ghirlanda+2019).

Tip

The ratio \(\theta_v / \theta_c \approx 8\) places GW170817 firmly in the "structured jet" regime. For \(\theta_v / \theta_c \lesssim 2\), a top-hat jet can approximate the light curve; for larger ratios, the jet structure matters significantly.

Full script

The complete analysis script is at examples/gw170817.py. To regenerate the plot:

python examples/gw170817.py