buoy
buoy deploys trained Aframe and AMPLFI models on gravitational wave events, producing detection statistics and parameter estimation outputs.
- Aframe is a neural network that scans strain data and assigns a detection statistic at each time step. buoy runs it over a segment of data surrounding an event and reports the integrated detection statistic alongside the raw network output.
- AMPLFI is a normalizing flow that performs rapid Bayesian parameter estimation. Given a coalescence time (inferred from Aframe or provided directly), it generates posterior samples for intrinsic and extrinsic parameters and produces a sky localization map.
Model weights (~320 MB total) are downloaded automatically from HuggingFace on first use and cached locally.
Documentation: https://ml4gw.github.io/buoy/
Installation
pip install ml4gw-buoy
A virtual environment is recommended:
conda create -n buoy python=3.11
conda activate buoy
pip install ml4gw-buoy
Analyzing unreleased data
Open data (O1–O4a) is fetched automatically. For events from data not yet publicly released, frame-discovery dependencies are required. A pre-built container with those dependencies is available:
apptainer pull buoy.sif docker://ghcr.io/ml4gw/buoy/buoy:latest
Supported event types
| Format | Example | Source |
|---|---|---|
| GWTC catalog event | GW150914 |
GWOSC |
| GraceDB event | G363842 |
GraceDB (requires LIGO credentials) |
| GraceDB superevent | S200213t |
GraceDB (requires LIGO credentials) |
| GPS time | 1187008882.4 |
User-supplied |
When using a GPS time, buoy defaults to fetching data for H1, L1, and V1. Use --ifos to restrict the detector set.
Usage
Exactly one event source must be supplied: explicit event name(s) via --events, an observing run via --observing_runs, or a GPS window via --gps_start/--gps_end.
Single event
buoy --events GW150914 --outdir ./results
Multiple events
buoy --events '["GW190521", "GW190828_063405", "S200213t"]' --outdir ./results
All public events from an observing run
buoy --observing_runs '["O3a"]' --outdir ./results
All public events in a GPS time window
buoy --gps_start 1126051217 --gps_end 1137254417 --outdir ./results
GPS time event
buoy --events 1187008882.4 --outdir ./results --ifos '["H1", "L1"]'
Parallel processing
Use --max_workers to process multiple events concurrently. Data fetching for the next event overlaps with model inference for the current one:
buoy --observing_runs '["O3a"]' --outdir ./results --max_workers 4
Config file
All arguments can be stored in a YAML config file:
# config.yaml
events:
- GW190521
- GW190814
outdir: ./results
samples_per_event: 10000
device: cuda
buoy --config config.yaml
Output structure
<outdir>/
└── <event>/
├── data/
│ ├── <event>.hdf5 # Raw strain data
│ ├── aframe_outputs.hdf5 # Aframe times, detection statistics, integrated outputs
│ ├── posterior_samples.dat # AMPLFI posterior samples
│ ├── whitened_data.npy # Whitened strain used for plotting
│ └── amplfi_<HL|HLV>.fits # Skymap in FITS format
└── plots/
├── aframe_response.png # Detection statistic vs. time with whitened strain
├── H1_qtransform.png # Q-transform for H1
├── L1_qtransform.png # Q-transform for L1
├── skymap_<HL|HLV>.png # Mollweide sky localization map
└── corner_plot_<HL|HLV>.png # Corner plot of posterior samples
CLI reference
| Argument | Default | Description |
|---|---|---|
--events |
— | Event name(s) or GPS time(s) to analyze |
--observing_runs |
— | GWOSC run label(s) (e.g. ["O3a", "O3b"]); fetches all public events |
--gps_start |
— | Start of GPS window; fetches all public events in [gps_start, gps_end] |
--gps_end |
— | End of GPS window; must be paired with --gps_start |
--outdir |
(required) | Directory to write results |
--samples_per_event |
20000 |
Number of AMPLFI posterior samples |
--nside |
64 |
HEALPix resolution for the skymap |
--min_samples_per_pix |
5 |
Minimum samples per pixel for distance ansatz |
--use_distance |
true |
Include distance in the 3D skymap |
--aframe_weights |
HuggingFace | Path to Aframe TorchScript weights (.pt) |
--amplfi_hl_weights |
HuggingFace | Path to AMPLFI HL checkpoint (.ckpt) |
--amplfi_hlv_weights |
HuggingFace | Path to AMPLFI HLV checkpoint (.ckpt) |
--aframe_config |
HuggingFace | Path to config of Aframe model config (.yaml) |
--amplfi_hl_config |
HuggingFace | Path to config of AMPLFI HL model config (.yaml) |
--amplfi_hlv_config |
HuggingFace | Path to config of AMPLFI HLV model config (.yaml) |
--aframe_revision |
default branch | HuggingFace revision for Aframe weights |
--amplfi_revision |
default branch | HuggingFace revision for AMPLFI weights |
--use_true_tc_for_amplfi |
false |
Use catalog/GraceDB time instead of Aframe-inferred time |
--ifos |
["H1","L1","V1"] |
Detectors to use for GPS time events |
--device |
auto | cpu or cuda |
--seed |
None |
Random seed for AMPLFI reproducibility |
--verbose |
false |
Enable DEBUG-level logging |
--run_aframe |
true |
Run Aframe inference; if false, load saved outputs |
--run_amplfi |
true |
Run AMPLFI inference; if false, skip PE |
--generate_plots |
true |
Generate output plots |
--force |
false |
Reprocess events even if outputs already exist |
--max_workers |
1 |
Number of events to process concurrently |
--corner_parameters |
see below | Parameters to include in the corner plot |
--to_html |
false |
Generate an HTML summary page |
--config |
— | Path to a YAML config file |
Default corner plot parameters: chirp_mass, mass_ratio, distance, mass_1, mass_2.
Metadata
Release files for ml4gw-buoy 0.6.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| ml4gw_buoy-0.6.1.tar.gz | 43.2 kB | Without provenance | Details for ml4gw_buoy-0.6.1.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| ml4gw_buoy-0.6.1-py3-none-any.whl | Python 3 | none | any | Details for ml4gw_buoy-0.6.1-py3-none-any.whl |
Total release size: 81.8 kB
Release files / ml4gw_buoy-0.6.1.tar.gz
| Download URL | ml4gw_buoy-0.6.1.tar.gz |
|---|---|
| Size | 43.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
44e629438458fd2ca6de0f99f6583e6b5200610f19b7e197656ab85caae78f4f
|
|
BLAKE2b-256 checksum How to use checksums |
7f8980dac9253b62e56cc26fc65b8af591658866da4e8e306d5da07e9b58ec7d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.11.7 {"installer":{"name":"uv","version":"0.11.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / ml4gw_buoy-0.6.1-py3-none-any.whl
| Download URL | ml4gw_buoy-0.6.1-py3-none-any.whl |
|---|---|
| Size | 38.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
6f5705c25dc5152ba536c33968c22d960634ca89668b95fbac2b7853ad9bd021
|
|
BLAKE2b-256 checksum How to use checksums |
52c132478fb543f6ca8df159e5ae43cd01a04798bbbc8e44575fbd7ed9a8bba0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.11.7 {"installer":{"name":"uv","version":"0.11.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Security for ml4gw-buoy 0.6.1
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.