FAQ
Output & Logging
Enabling gwBOB output
By default gwBOB produces no console output. This prevents it from interfering with other packages (sxs, kuibit, scipy, etc.) that may also print to the terminal. To see loading progress and the waveform mismatch, call
enable_output()once at the top of your script or notebook:import gwBOB gwBOB.enable_output() # show progress and mismatch gwBOB.enable_output(verbose=True) # also show internal diagnostics
I’m not seeing any output even after calling
enable_output()Make sure you call
enable_output()before constructing BOB. If you call it afterconstruct_BOB()has already run, the messages from that call will have been discarded. Also check that you have importedgwBOB(not justgwBOB.BOB_utils) — the function lives on the top-level package.
Redirecting gwBOB output to a file
The standard Python
loggingmodule handles this. Add aFileHandlerto the gwBOB logger after callingenable_output():import logging, gwBOB gwBOB.enable_output() fh = logging.FileHandler("gwBOB_run.log") fh.setFormatter(logging.Formatter("%(message)s")) logging.getLogger("gwBOB").addHandler(fh)
Code Conventions
omega vs Omega (phi vs Phi)
It is important to differentiate between the waveform frequency, denoted with a lowercase initial letter, and the orbital frequencies, denoted with an uppercase initial letter. In our code the two values can be related by omega = m*Omega, where m is the mode number (and similarly phi = m*Phi). Please note the JAX compatible functions return little omega and phi, unlike the rest of the code.
Sign conventions
The code assumes that if the final dimensionless spin has a positive value, then the remnant spin is aligned with the direction of the initial orbital angular momentum. If the spin is negative, that means a “spin flip” has taken place and the final spin is pointing opposite to the direction of the initial orbital angular momentum.
Potential Pitfalls
Switching between different flavors of BOB
As much as possible, the code is designed so that for any given SXS/CCE/NR case, the data only needs to be initialized once and the user can switch between different flavors of BOB without reinitializing the data. This has several tradeoffs. First, the initialization process takes a little bit longer, as we store psi4, news, and strain data. However, once the initialization process is done, it is trivial to switch between different waveform quantities. While switching from flavors that use t0 = -inf to finite t0 values should be seamless, switching from flavors that use t0 = -inf to finite t0 values requires the BOB.minf_t0 to be set to False. Furthermore, after each construction of BOB, parameters such as optimize_Omega0 retain their values, so the user should make sure to change these as appropriate.
Windows users
Windows users are recommended to use WSL (https://learn.microsoft.com/en-us/windows/wsl/install).
Superrest transformations
This code performs the superrest transformation for CCE data (using the qnmfits & scri packages). This can be memory intensive, windows users using WSL should be aware of this as the default memory allocated to WSL is likely not enough. (See something like https://learn.microsoft.com/en-us/answers/questions/1296124/how-to-increase-memory-and-cpu-limits-for-wsl2-win to increase the allocated memory for WSL)
gwBOB not found - v1.0.0 contains a file directory issue. Please make sure you have v1.0.1 or greater installed.
Eccentric/Precessing/Higher modes
This code has only been validated for the (2,2) mode of quasicircular and non-precessing systems. BOB’s performance beyond this scope is underway, and in principle the code can be used with generic systems. Hoever, the performance of BOB may not be perfect! BOB has only been extensively studied for the (2,2) mode of quasicircular and non-precessing systems (Kankani and McWilliams 2025).
Please raise issues on the GitHub pages if you have any questions!