A python package for gravitational-wave astrophysics
npx @tessl/cli install tessl/pypi-gwpy@3.0.0GWpy is a collaboration-driven Python package providing comprehensive tools for studying data from ground-based gravitational-wave detectors like LIGO and Virgo. It offers a user-friendly, intuitive interface to common time-domain and frequency-domain data produced by gravitational-wave observatories, enabling researchers to perform complex astrophysical analyses with easy-to-follow workflows.
conda install -c conda-forge gwpy or pip install gwpyimport gwpyCommon imports for working with gravitational-wave data:
from gwpy.timeseries import TimeSeries
from gwpy.frequencyseries import FrequencySeries
from gwpy.spectrogram import Spectrogram
from gwpy.segments import DataQualityFlag, Segment
from gwpy.table import EventTable
from gwpy.plot import Plotfrom gwpy.timeseries import TimeSeries
from gwpy.segments import DataQualityFlag
# Read gravitational-wave strain data
strain = TimeSeries.read('H-H1_STRAIN-1126259446-32.gwf',
'H1:DCS-CALIB_STRAIN_C02',
start=1126259446, end=1126259478)
# Calculate power spectral density
psd = strain.psd(fftlength=4, overlap=2)
# Create a time-frequency spectrogram
spec = strain.spectrogram(stride=1, fftlength=4, overlap=2)
# Read data quality information
dqflag = DataQualityFlag.query('H1:DMT-ANALYSIS_READY:1',
start=1126259446, end=1126259478)
# Create a plot
plot = strain.plot()
plot.show()GWpy is built around core data types that extend standard scientific Python libraries:
The package integrates seamlessly with the broader scientific Python ecosystem (NumPy, SciPy, Astropy, Matplotlib) while providing gravitational-wave specific functionality and metadata handling.
Tools for analyzing time-domain gravitational-wave data including strain measurements, auxiliary channels, and detector state information. Supports reading from various data formats and provides filtering, resampling, and statistical analysis.
class TimeSeries(Series):
def __init__(self, data, times=None, **kwargs): ...
def read(source, channel, start=None, end=None, **kwargs): ...
def get(channel, start, end, **kwargs): ...
def filter(*filters, **kwargs): ...
def resample(rate, **kwargs): ...
def psd(fftlength=None, overlap=None, **kwargs): ...
def asd(fftlength=None, overlap=None, **kwargs): ...
class StateVector(TimeSeries):
def __init__(self, data, bits=None, **kwargs): ...
def to_dqflags(self): ...Spectral analysis tools for power spectral densities, amplitude spectral densities, and frequency-domain filtering. Includes methods for noise characterization and detector sensitivity analysis.
class FrequencySeries(Series):
def __init__(self, data, frequencies=None, **kwargs): ...
def read(source, **kwargs): ...
def plot(**kwargs): ...
def zpk(zeros, poles, gain, **kwargs): ...
class SpectralVariance(Array2D):
def __init__(self, data, **kwargs): ...Time-frequency representation tools including spectrograms and Q-transforms for transient gravitational-wave event analysis and glitch characterization.
class Spectrogram(Array2D):
def __init__(self, data, times=None, frequencies=None, **kwargs): ...
def read(source, **kwargs): ...
def ratio(method='median'): ...
def q_transform(**kwargs): ...Data quality flag handling and time segment management for identifying valid analysis periods and detector operational states.
class Segment:
def __init__(self, start, end): ...
def __contains__(self, other): ...
def protract(self, x): ...
def contract(self, x): ...
class DataQualityFlag:
def __init__(self, name=None, **kwargs): ...
def query(flag, start, end, **kwargs): ...
def read(source, **kwargs): ...
def write(target, **kwargs): ...Advanced signal processing algorithms including digital filtering, window functions, Q-transforms, and spectral estimation methods optimized for gravitational-wave data.
# Filter design functions
def lowpass(frequency, sample_rate, **kwargs): ...
def highpass(frequency, sample_rate, **kwargs): ...
def bandpass(flow, fhigh, sample_rate, **kwargs): ...
def notch(frequency, sample_rate, **kwargs): ...
# Spectral analysis functions
def welch(data, **kwargs): ...
def bartlett(data, **kwargs): ...
def median(data, **kwargs): ...
def coherence(x, y, **kwargs): ...Enhanced matplotlib integration with gravitational-wave specific plot types, GPS time handling, and publication-quality figure generation.
class Plot:
def __init__(self, *data, **kwargs): ...
def add_timeseries(self, ts, **kwargs): ...
def add_spectrogram(self, spec, **kwargs): ...
def show(self, **kwargs): ...
def save(self, filename, **kwargs): ...
class BodePlot(Plot):
def __init__(self, **kwargs): ...Detector-specific utilities for channel management, timezone handling, and interferometer-specific configurations.
class Channel:
def __init__(self, name, **kwargs): ...
def query(self, **kwargs): ...
def get_timezone(ifo): ...
def get_timezone_offset(ifo, dt=None): ...Sensitivity and detection range calculations for gravitational-wave sources including binary inspirals and burst sources.
def inspiral_range(psd, **kwargs): ...
def burst_range(spectrum, **kwargs): ...
def sensemon_range(psd, **kwargs): ...
def range_timeseries(timeseries, **kwargs): ...# Core data types from gwpy.types
from gwpy.types import Array, Series, Array2D
class Array:
def __init__(self, data, **kwargs): ...
def copy(self): ...
def __getitem__(self, item): ...
def value_at(self, x): ...
def shift(self, delta): ...
class Series(Array):
def __init__(self, data, index=None, **kwargs): ...
def plot(**kwargs): ...
def write(target, **kwargs): ...
def crop(self, start=None, end=None, copy=False): ...
def append(self, other, inplace=True, **kwargs): ...
def prepend(self, other, inplace=True, **kwargs): ...
class Array2D(Array):
def __init__(self, data, **kwargs): ...
def transpose(self): ...
# Collection types
from gwpy.timeseries import TimeSeriesDict, TimeSeriesList
from gwpy.frequencyseries import FrequencySeriesDict, FrequencySeriesList
from gwpy.segments import SegmentList, DataQualityDict
# Time types
from gwpy.time import Time, LIGOTimeGPS
from astropy.time import Time
# Event types
from gwpy.table import EventTable
# I/O and utility types
from astropy.units import Unit, Quantity
import numpy as np