This repository implements a search pipeline for detecting Extreme Mass Ratio Inspirals (EMRIs) in simulated LISA data. Given input LISA time-series, the pipeline returns the best-matching instantaneous frequency evolution (track) found in the data. The code accompanies the related paper: Ab uno disce omnes: Single-harmonic search for extreme mass-ratio inspirals. Intermediate search results can be found here. If you are interested only in which sources we were able to detect check these interactive visualizations.
For a quick, simplified EMRI search, open and run QuickStartEMRIsearch.ipynb. The notebook walks through the pipeline and produces example outputs, including:
-
Injected waveform and three harmonics with their corresponding detection statistic values.
-
Top panel: the injected EMRI signal with noise. Bottom panel: the recovered signal after masking the best-fit track of the dominant harmonic.
-
Visualizations of the optimization process and the recovered track evolution.
Recommended minimal environment:
conda create -n emri -y python=3.12
conda activate emri
pip install -e .with the flag -e for development.
There is one package that needs to be installed from source fastlisaresponse.
On macOS arm64 a working build sequence used by the author:
git clone https://github.com/mikekatz04/lisa-on-gpu.git
cd lisa-on-gpu
git checkout v1.2.1a0
conda install conda-forge::clang_osx-arm64 conda-forge::clangxx_osx-arm64 -y
export CC=$(which clang)
export CXX=$(which clang++)
export CFLAGS="-march=native"
export CXXFLAGS="-march=native"
pip install .
python -m unittest discoverTest most of the functions of the package with:
python -m unittest tests.test_demoOpen QuickStartEMRIsearch.ipynb and run the notebook. It guides you through:
- generating EMRI test signals,
- computing Short Fourier Transforms (SFTs),
- computing the detection statistic,
- and running example searches that reproduce the figures above.
High-level overview of the modules's key files and their purposes. Each script can be run to generate a demonstration plot showing typical usage of the functions it defines.
Data analysis and waveform helpers:
da_utils.py— SFT computation, frequency-domain inner products, noise generation, SNR calculation.emri_utils.py— EMRI waveform and trajectory helperssearch_utils.py— detection statistics and search routinesdraw_population.py— draw synthetic EMRI populations and parameter transforms.
jax_utils.py— JAX implementations of core routines for GPU/TPU acceleration (PSDs, detection statistics).jax_de_utils.py— differential-evolution optimization implemented with JAX for fast population-based searches.
If you use this code, please cite the paper:
@ARTICLE{2026PhRvD.113b4061S,
author = {{Speri}, Lorenzo and {Tenorio}, Rodrigo and {Chapman-Bird}, Christian and {Gerosa}, Davide},
title = "{Single-harmonic search for extreme mass-ratio inspirals}",
journal = {\prd},
keywords = {General relativity, alternative theories of gravity, General Relativity and Quantum Cosmology, High Energy Astrophysical Phenomena, Instrumentation and Methods for Astrophysics},
year = 2026,
month = jan,
volume = {113},
number = {2},
eid = {024061},
pages = {024061},
doi = {10.1103/dh3j-ksfl},
archivePrefix = {arXiv},
eprint = {2510.20891},
primaryClass = {gr-qc},
adsurl = {https://ui.adsabs.harvard.edu/abs/2026PhRvD.113b4061S},
adsnote = {Provided by the SAO/NASA Astrophysics Data System}
}
For questions or issues open an issue on the GitHub repository.



