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 after construct_BOB() has already run, the messages from that call will have been discarded. Also check that you have imported gwBOB (not just gwBOB.BOB_utils) — the function lives on the top-level package.

  • Redirecting gwBOB output to a file

    • The standard Python logging module handles this. Add a FileHandler to the gwBOB logger after calling enable_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

  • Superrest transformations

  • 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!