PE Automator is a Python package for automating the setup and execution of parameter estimation (PE) runs using Bilby Pipe.
Project description
PE Automator
A plugin-based workflow tool for gravitational-wave parameter estimation using bilby-pipe. Three run modes are supported: real event data, Gaussian-noise injections, and real-noise injections from GWOSC.
Installation
conda create -n pe_automator python=3.10 setuptools_scm
conda activate pe_automator
make install
Project directory layout
Real-data runs
data_path/
├── configs/
│ └── {eventname}_config.ini # bilby-pipe config with event metadata
├── framefiles/
│ ├── {eventname}_H1.gwf # pre-downloaded strain frames (git-lfs)
│ ├── {eventname}_L1.gwf
│ └── {eventname}_V1.gwf
├── psds/
│ └── {eventname}_{det}_psd.txt
├── spline_cal_envs/
├── templates/
│ └── bilby_config.tpl.ini # Jinja2 template shared by all modes
└── project/
├── project.json # gitlab_url, gitlab_project
└── allocations.json # cluster allocation profiles
The framefiles are stored as git-lfs objects. Install and initialise
git-lfs before cloning:
git lfs install
Injection runs (gaussian_noise / real_noise)
data_path/
├── inj_config/
│ └── {inj_set}/
│ ├── injection_params.json # list of N injection parameter dicts
│ ├── injection_points.json # (real_noise only) list of M GPS points
│ └── sample_config.ini # bilby-pipe base config for this inj set
├── psds/
│ └── {inj_set}_{det}_psd.txt # per-detector PSD (2-column: freq, PSD)
├── templates/
│ └── bilby_config.tpl.ini
└── project/
├── project.json
└── allocations.json
GWF frame files for injections are generated at run time and written directly
into runs/{label}/framefiles/; data_path is never modified.
CLI reference
setup — create and submit PE runs
pe_automator setup <name> --mode <mode> [options]
<name> is the event name (real_data) or injection set name
(gaussian_noise / real_noise).
Common options
| Flag | Default | Description |
|---|---|---|
--mode |
real_data |
real_data, gaussian_noise, or real_noise |
--data_path |
./data |
Project data directory |
--run_label |
(required) | Label appended to the run directory name |
--approximant |
(required) | LALSim waveform approximant |
--allocation |
(required) | Allocation key from allocations.json |
--user |
(required) | SSH username on the cluster |
--conda_env |
(required) | Conda environment on the cluster |
--private_token |
(required) | GitLab personal access token (api scope) |
--account |
SLURM account | |
--partition |
SLURM partition | |
--qos |
SLURM QoS | |
--memory |
300 |
Memory per node (GB) |
--walltime |
71:40:00 |
SLURM wall-clock limit |
--cpu |
allocation default | CPUs per node |
--npoint |
1000 |
Dynesty npoints |
--nact |
50 |
Dynesty nact |
--naccept |
60 |
Dynesty naccept |
--maxmcmc |
20000 |
Dynesty maxmcmc |
--dry_run |
False |
Generate files locally; skip upload and submission |
--distance_marginalization / --no-distance_marginalization |
Enable/disable distance marginalisation | |
--priors |
Path to custom priors file | |
--mode_array |
Waveform mode array override | |
--wf_min_f |
Waveform minimum frequency (Hz) | |
--wf_ref_f |
Waveform reference frequency (Hz) | |
--min_f |
Analysis minimum frequency (Hz) | |
--waveform_arguments_dict |
Waveform-argument dictionary override, e.g. {'N_harmonics': 12} |
|
--comment |
Free-text comment added to the GitLab issue |
Injection-only options (gaussian_noise and real_noise)
| Flag | Default | Description |
|---|---|---|
--flow |
20.0 |
Low-frequency cutoff for noise/waveform generation (Hz) |
--f_ref |
20.0 |
Reference frequency for waveform generation (Hz) |
--force_regenerate |
False |
Regenerate GWF files even if they already exist |
real_noise only
| Flag | Default | Description |
|---|---|---|
--fetch_buffer |
16 |
Extra seconds fetched around the injection window |
GitLab token: select the
apiscope. See GitLab docs.
Quick start examples
1. Real-data run
pe_automator setup GW150914 \
--mode real_data \
--data_path ./data \
--run_label run1 \
--approximant IMRPhenomXPNR \
--account uib107 --partition gpp --qos gp_resa \
--user resh000428 --conda_env pe_env \
--private_token <token> \
--allocation AECT-2025-2-0029
2. Gaussian-noise injection runs
Generates N × M jobs where N = entries in injection_params.json and
M = noise_seeds listed in each entry.
pe_automator setup inj_set1 \
--mode gaussian_noise \
--data_path ./data \
--run_label run1 \
--approximant IMRPhenomXPNR \
--flow 20.0 --f_ref 20.0 \
--account uib107 --partition gpp --qos gp_resa \
--user resh000428 --conda_env pe_env \
--private_token <token> \
--allocation AECT-2025-2-0029
Add --dry_run to generate configs and GWF files locally without uploading.
Required files under data_path:
| Path | Description |
|---|---|
inj_config/{inj_set}/injection_params.json |
N injection parameter dicts (each with a noise_seeds list) |
inj_config/{inj_set}/sample_config.ini |
Base bilby-pipe config (detectors, priors, …) |
psds/{inj_set}_{det}_psd.txt |
PSD for each detector |
3. Real-noise injection runs (GWOSC)
Generates N × M jobs where N = entries in injection_params.json and
M = entries in injection_points.json.
pe_automator setup inj_set1 \
--mode real_noise \
--data_path ./data \
--run_label run1 \
--approximant IMRPhenomXPNR \
--flow 20.0 --f_ref 20.0 --fetch_buffer 16 \
--account uib107 --partition gpp --qos gp_resa \
--user resh000428 --conda_env pe_env \
--private_token <token> \
--allocation AECT-2025-2-0029
Additional required file:
| Path | Description |
|---|---|
inj_config/{inj_set}/injection_points.json |
M GPS injection points with per-detector time shifts |
Injection parameter format (injection_params.json)
[
{
"mass_1": 35.6,
"mass_2": 30.4,
"luminosity_distance": 450.0,
"geocent_time": 1187008882.43,
"ra": 1.375,
"dec": -1.211,
"psi": 0.0,
"theta_jn": 0.4,
"chi_1": 0.0,
"chi_2": 0.0,
"noise_seeds": [1000, 2000, 3000]
}
]
noise_seeds (Gaussian-noise mode) controls how many noise realisations are
generated per injection. Spin can be given as aligned (chi_1/chi_2),
bilby spherical (a_1, tilt_1, …), or Cartesian (spin_1x/y/z).
Injection point format (injection_points.json) — real_noise only
[
{
"gps_time": 1187008882.43,
"shifts": {"H1": 0.0, "L1": 3.14, "V1": 7.0},
"channel": {
"H1": "H1:GWOSC-4KHZ_R1_STRAIN",
"L1": "L1:GWOSC-4KHZ_R1_STRAIN",
"V1": "V1:GWOSC-4KHZ_R1_STRAIN"
}
}
]
Non-zero shifts fetch each detector's background from a different GPS time,
breaking coherence for background estimation while the injected signal stays
coherent at gps_time.
Bundled PSDs
from pe_automator.injection_generator.psds import get_psd_path
psd = get_psd_path("AplusDesign_O5")
| Name | Detector |
|---|---|
AplusDesign_O5 |
A+ (LIGO O5 design) |
AdV_DESIGN |
Advanced Virgo design |
aLIGO_ZERO_DET_high_P |
aLIGO zero-det high power |
ET_D |
Einstein Telescope D |
Other CLI commands
monitor — track job status
pe_automator monitor \
--private_token <token> \
--ssh_key ~/.ssh/id_rsa \
--data_path ./data
rescue — resubmit a failed job
pe_automator rescue <issue_number> \
--data_path ./data \
--private_token <token> \
--walltime 47:00:00
setup_env — deploy a conda environment on the cluster
pe_automator setup_env pe-0.0.1beta1 \
--source_env my_env.tar.gz \
--source_remote resh000428@picasso.scbi.uma.es \
--data_dir ./data
post_process — post-process PE results
pe_automator post_process \
--results_dir ./results \
--data_dir ./data \
--output_dir .
dlogz — check sampler convergence
pe_automator dlogz \
--private_token <token> \
--ssh_key ~/.ssh/id_rsa \
--data_path ./data
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
File details
Details for the file pe_automator-0.22.0.tar.gz.
File metadata
- Download URL: pe_automator-0.22.0.tar.gz
- Upload date:
- Size: 430.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.20
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
83032d8e792291242c315f5a2c7596e0a16bc6f0b29f1ea04fd2885c9bbb6985
|
|
| MD5 |
1062e331c500aefaa4bd535ed8ce1e03
|
|
| BLAKE2b-256 |
798a3fe1d8466e183afcaafa83d880744a63bcf86dc044e99ec7548aaf4830e8
|