Introduction

Tutorial: Analysing your first gravitational wave candidate

What you'll learn: How to use asimov's new quickstart infrastructure to go from zero to a running parameter estimation job in minutes
Time required: About 30 minutes for setup, then hours to days for analysis to run
What is GW150914? The first gravitational wave ever detected, from the merger of two black holes approximately 1.3 billion light-years away. Analyzing it is a classic "hello world" example for parameter estimation workflows

This tutorial uses asimov 0.7.1 (released 2026-09-18; 0.7.0 was released 2026-08-17). It relies on three plugins: asimov-gwdata to fetch strain data, bayeswave to estimate the detector noise PSD, and bilby to perform the parameter estimation itself.

Prerequisites

1

Set Up Your Python Environment

We recommend using conda (a package and environment manager) to isolate your asimov installation. If you don't have conda installed yet, download miniconda (a lightweight version of Anaconda).

Create a new conda environment:

conda create -n gw-analysis python=3.11
conda activate gw-analysis
Why isolate?

This creates a separate Python environment called gw-analysis so you don't affect other projects on your computer. Always make sure to activate this environment before working with asimov.

2

Install the IGWN Software Stack

The International Gravitational-Wave Network (IGWN) provides a curated conda environment with all the gravitational wave analysis tools pre-configured:

# Add the IGWN conda channel
conda config --add channels conda-forge
conda config --add channels igwn

# Install the IGWN environment
conda install -c conda-forge -c igwn igwn-software

This installs:

  • All required gravitational wave analysis tools
  • The necessary data analysis libraries
  • Git and other utilities
Installation time

This step may take 5-15 minutes depending on your internet connection.

3

Install Asimov and the Pipeline Plugins

Install asimov itself, plus the three pipeline plugins this tutorial uses: asimov-gwdata (fetches strain data), bayeswave (PSD estimation), and bilby (parameter estimation).

# Via pip
pip install asimov asimov-gwdata bilby_pipe bilby

# Or via conda
conda install -c conda-forge bilby bayeswave asimov-gwdata

The bayeswave package is currently only available via conda-forge.

4

Configure Git

Asimov uses git to track your project. Configure it globally if you haven't already:

git config --global user.email "you@example.com"
git config --global user.name "Your Name"

Replace the email and name with your own values.

5

Check Your HTCondor Installation

This tutorial assumes HTCondor (a job scheduler) is already installed and running on your system. Test it:

which condor_q
condor_q
HTCondor required

If these commands don't work, refer to the Single-Machine Setup appendix below to install minicondor.

6

Verify Your Complete Setup

Make sure everything is installed correctly:

asimov --version

You should see asimov's version number printed (0.7.1 or later).

Troubleshooting

If you see errors, make sure you've:

  • Activated the conda environment: conda activate gw-analysis
  • Installed all packages successfully
  • Configured git globally

Step 1: About GW150914

GW150914 was the first gravitational wave ever detected, observed by the LIGO Hanford and Livingston detectors on 14 September 2015. It’s a common “hello world” event for parameter-estimation tutorials because it’s well studied and its blueprints are readily available. asimov doesn’t ship its own catalogue browser—instead, events and analysis defaults are distributed as YAML blueprint files that you apply directly to your project, which is what the next step does.

Step 2: Set Up Your Project

1

Create Project Directory

First, create a directory for your project, move into it, and initialize an asimov project:

mkdir gw150914-tutorial
cd gw150914-tutorial
asimov init "GW150914 Analysis Tutorial"

This sets up the project's directory structure and a blank, git-tracked ledger.

2

Apply the Project-Wide Defaults

Asimov ships pipelines with a minimal set of default settings. A blueprint with the settings normally used for LVK production analyses is maintained in the asimov data repository—apply the resource-allocation defaults and the prior defaults:

asimov apply -f https://git.ligo.org/asimov/data/-/raw/main/defaults/production-pe.yaml
asimov apply -f https://git.ligo.org/asimov/data/-/raw/main/defaults/production-pe-priors.yaml
3

Add the Event

Add GW150914 to the project by applying its event blueprint, which is also maintained in the data repository:

asimov apply -f https://git.ligo.org/asimov/data/-/raw/main/events/gwtc-2-1/GW150914_095045.yaml
4

Define the Workflow

The standard workflow for a gravitational-wave analysis has three stages: fetch data (gwdata), estimate the noise PSD (bayeswave), then run parameter estimation (bilby), with each stage declaring the previous one as a dependency via needs. Save the following as workflow.yaml:

kind: analysis
name: get-data
pipeline: gwdata
file length: 4096
download:
  - frames
scheduler:
  accounting group: ligo.dev.o4.cbc.pe.bilby
  request memory: 1024
  request post memory: 16384
---
kind: analysis
name: generate-psd
pipeline: bayeswave
comment: Bayeswave on-source PSD estimation process
needs:
  - get-data
---
kind: analysis
name: bilby-IMRPhenomXPHM-cosmo
pipeline: bilby
waveform:
  approximant: IMRPhenomXPHM
comment: PE job using IMRPhenomXPHM and bilby
needs:
  - generate-psd

Then apply the workflow to the event you added above, using its full name:

asimov apply -f workflow.yaml -e GW150914_095045

Step 3: Understand Your Project Structure

1

Review Your Project Layout

Your new project has a carefully organized structure:

gw150914-tutorial/
├── .asimov/                    # Asimov's internal directory
│   └── ledger.yml             # The project database (git-tracked)
├── checkouts/                  # Working directories for each analysis
│   └── GW150914_095045/       # Event directory
│       ├── get-data/          # gwdata download job
│       ├── generate-psd/      # Bayeswave on-source PSD job
│       └── bilby-IMRPhenomXPHM-cosmo/  # Bilby parameter estimation job
├── results/                    # Where results will be stored
├── working/                    # HTCondor job submission files
└── README.md                   # Project information
2

Check Your Analysis Status

To see the current status of your analyses, run:

asimov report status

You should see something like:

GW150914_095045
  Analyses
  - get-data[gwdata]                      ready
  - generate-psd[bayeswave]               waiting (needs get-data)
  - bilby-IMRPhenomXPHM-cosmo[bilby]      waiting (needs generate-psd)
Dependency resolution

The needs entries in workflow.yaml tell asimov that generate-psd needs the strain data from get-data, and the bilby analysis needs the PSD from generate-psd, before each can be built and submitted.

Step 4: Build and Submit Your Jobs

1

Build Configuration Files

Asimov works out which stages of the workflow are ready to run and produces the configuration needed to submit them to the scheduler. Since only get-data has no unmet dependencies, this is the stage that gets built first:

asimov manage build
Check the working directory

Look in the working/ directory—you'll find HTCondor job description files here.

2

Submit Jobs to the Scheduler

Now submit the first analysis to HTCondor:

asimov manage submit
Dependency handling

This submits the get-data job to the scheduler. generate-psd and the bilby analysis won't submit yet, because they're waiting on their dependencies—run asimov manage build and asimov manage submit again as each stage completes, or use asimov start below to automate this.

Step 5: Monitor Your Analysis

Now we need to watch our job. Asimov provides several ways to do this:

1

One-time Status Check

For a quick status check:

asimov monitor

This checks the job status once and shows you what's happening, similar to asimov report status.

2

Continuous Monitoring (Recommended)

You probably don't want to check on these jobs by hand. Asimov can automate the process instead: checking the status of each analysis, and building and submitting the next stage automatically once its dependencies complete.

asimov start

This starts a background monitoring process, and stops once everything is done, or you can stop it yourself with:

asimov stop

Step 6: Understanding the Analysis

While your job is running, let’s understand what’s happening:

The Multi-Stage Workflow

Your project has three analyses working together:

  1. get-data: Fetches the strain data needed for the analysis, via the gwdata plugin.
  2. generate-psd (Bayeswave): Produces an estimate of the power spectral density (the noise characteristics) of the detector during the GW150914 observation. This typically takes hours to days.
  3. bilby-IMRPhenomXPHM-cosmo (Bilby): Uses the PSD from Bayeswave to perform the actual parameter estimation—inferring properties like the masses and spins of the merging black holes, using Bayesian inference to calculate the probability of different parameters given the observed signal.

Asimov's dependency resolution, declared with needs in workflow.yaml, submits each stage automatically once the one before it completes.

Tracking Progress with Reports

You can generate an HTML status report for the project at any time with:

asimov report html

By default this is written to the project's configured web directory; PESummary-based pages for a completed bilby analysis are written under pages/.

Step 7: When Jobs Complete

After your jobs finish (this can take days or weeks for production-quality analyses!), asimov will:

1

Automatic Post-Processing

Asimov automatically:

  • Runs post-processing with PESummary to generate summary statistics and plots
  • Moves results to the results/ directory
  • Generates comprehensive HTML reports with visualization of the posterior distributions
  • Marks analyses as complete
2

Examine Your Results

You can then examine the results:

ls results/GW150914_095045/

This directory contains all your output files, plots, and reports.

Next Steps

Run More Events

Add another event by applying its blueprint from the data repository, then apply a similar workflow blueprint to it:

asimov apply -f https://git.ligo.org/asimov/data/-/raw/main/events/gwtc-2-1/GW151012_095443.yaml
asimov apply -f workflow.yaml -e GW151012_095443
asimov manage build && asimov manage submit
Customize Your Analysis

Edit workflow.yaml to adjust settings like waveform approximants, priors, or sampler settings, then re-apply it and rebuild:

asimov apply -f workflow.yaml -e GW150914_095045
asimov manage build && asimov manage submit
Use a Different Pipeline

Swap pipeline: bilby for another supported sampler, such as lalinference or rift, provided the corresponding plugin is installed. See the plugins directory for what's available.

Contribute to Asimov

Check out the Contributing Guide to get involved with development.


Appendix: Single-Machine Setup (Optional)

If you’re working on a single machine without an existing HTCondor installation, you can use HTCondor’s mini version, minicondor, which is designed for personal workstations.

1

Install Minicondor

HTCondor provides pre-built installers. Visit htcondor.readthedocs.io and follow the installation guide for your operating system.

On Linux (Ubuntu/Debian):

# Add HTCondor repository
wget -qO - https://research.cs.wisc.edu/htcondor/yum/HTCondor/repo.key | sudo apt-key add -
echo "deb [arch=amd64] https://research.cs.wisc.edu/htcondor/yum/HTCondor/ubuntu focal main" | \
  sudo tee /etc/apt/sources.list.d/htcondor.list

# Install minicondor
sudo apt-get update
sudo apt-get install minicondor

On macOS:

# Using Homebrew
brew tap htcondor/htcondor
brew install htcondor

For other systems, follow the official installation guide.

2

Configure Minicondor

After installation, start the HTCondor daemon:

# Start the HTCondor daemon
sudo /etc/init.d/condor start

# Or on systems using systemd
sudo systemctl start condor

For personal workstations, limit resource usage by editing /etc/condor/condor_config.d/personal.conf:

NUM_SLOTS = 1
NUM_SLOTS_TYPE_1 = 1

This ensures only one job runs at a time on your machine.

3

Verify Installation

Test that HTCondor is working:

condor_q          # List jobs (should be empty)
condor_status     # Show available slots

Now you can follow the main tutorial above!

Important Notes on Single-Machine Use

Advantages

  • Learn asimov on your personal computer
  • Good for testing and development
  • Useful for small analyses

Limitations

  • Jobs run sequentially on limited resources
  • Parameter estimation analyses will be very slow on most personal computers
  • Not suitable for production catalogue analyses
For production work

We recommend using institutional computing clusters with HTCondor, or work with your institution's computing facility to set up access.

Other Schedulers

Besides HTCondor, asimov also supports submitting and monitoring jobs on Slurm. If your institution’s cluster runs Slurm rather than HTCondor, see the asimov documentation for how to configure it as your scheduler backend.