Injections - prayush/ppe_capability_test GitHub Wiki

Creating GR and extra-GR injections

Technical details on which injections to use and how to create them go here.

Useful Links to get started (mostly using PyCBC)

  1. LALSuite git repository. Note: very sketchy documentation.
  2. PyCBC documentation page. See this for installation and tutorials [1].
  3. Simulating Advanced LIGO noise: here. This will use noise curves for GW detectors that are already pre-fed in LAL.
  4. Using custom noise curves: here. @prayush has uploaded the noise curve that is typically used to represent Advanced LIGO at its final design sensitivity. This should agree with the pre-fed PSD returned by the method pycbc.psd.aLIGOZeroDetHighPower (@gsb76 should verify).
  5. Generating waveforms (GR based): here. Note that pycbc.waveform module is a thick wrapper around lalsimulation.
  6. Filtering of time-series data with GW templates: here.
  7. Reading and writing GW "Frame" files: here.
  8. Accessing and manipulating data/results for published detections: here. <<==
  9. Generating "hardware injections" with Pycbc: here. This page explains what "hardware injections" are and how to create them.

[1] The installation doc for pycbc has instructions to install LALSuite as well, as that is former's dependency. Some notes:

  • DO NOT do "Simple installation" with pip.
  • DO NOT get a read-only copy of lalsuite, as the page above suggests.
  • Fork lalsuite to your own git.ligo.org space and use your fork.
  • @prayush recommends the "Virtualenv installation". Although use of python virtualenv is optional (and slow).
  • While configuring lalsuite, remove some of the flags that the page above suggests, i.e. replace
./configure --prefix=${VIRTUAL_ENV}/opt/lalsuite --enable-swig-python --disable-lalstochastic --disable-lalxml --disable-lalinference --disable-laldetchar --disable-lalapps

with

./configure --prefix=${VIRTUAL_ENV}/opt/lalsuite  --enable-swig-python --enable-mpi --enable-openmp --disable-laldetchar

Creating injections with NR waveforms directly (Anuradha):

@anuradha-gupta had created frame files earlier using NR waveforms. This was done as a two-step process.

(1) First create hardware injections using: CIT:/home/anuradha.gupta/NR_PRE_PE/0628/M70_i85_mcmc/run-hwinj.sh:

pycbc_generate_hwinj \
    --instruments H1 L1 V1 \
    --numrel-data /home/sebastian.khan/ligo-nr-data/lvcnr-lfs/SXS/SXS_BBH_0628_Res3.h5 \
    --approximant NR_hdf5 \
    --order pseudoFourPN  \
    --waveform-low-frequency-cutoff 20. \
    --mass1 47.1423434954 \
    --mass2 22.8607815071 \
    --spin1x -0.765157057823 \
    --spin1y -0.343517825829 \
    --spin1z -0.10730097354 \
    --spin2x 0.287913356369 \
    --spin2y 0.283481050715 \
    --spin2z -0.311507831283 \
    --inclination 1.4835298641951802 \
    --polarization 1.42892206 \
    --ra -1.26157296 \
    --dec 1.94972503 \
    --taper TAPER_START \
    --network-snr 25 \
    --low-frequency-cutoff 20.0 \
    --high-frequency-cutoff 1024.0 \
    --sample-rate H1:4096 L1:4096 V1:4096 \
    --geocentric-end-time 1126259462.0 \
    --gps-start-time 1126258960 \
    --gps-end-time 1126259472 \
    --strain-high-pass 20 \
    --psd-model H1:aLIGOZeroDetHighPower L1:aLIGOZeroDetHighPower V1:AdvVirgo \
    --psd-output H1:'./H1-PSD.txt' L1:'./L1-PSD.txt' V1:'./V1-PSD.txt' \
    --channel-name H1:FOOBAR L1:FOOBAR V1:FOOBAR

(2) Then write the injection to GW frame files using: CIT:/home/anuradha.gupta/NR_PRE_PE/0628/M70_i85_mcmc/run-insert.sh:

GPS_START=1126259452

pycbc_insert_frame_hwinj \
    --hwinj-file hwinjcbc_1126259456_H1.txt \
    --hwinj-start-time 1126259456 \
    --ifo H1 \
    --output-file H-H1HWINJ_M70i85.gwf \
    --fake-strain zeroNoise \
    --gps-start-time ${GPS_START} \
    --gps-end-time 1126259472 \
    --sample-rate 4096 \
    --low-frequency-cutoff 20

pycbc_insert_frame_hwinj \
    --hwinj-file hwinjcbc_1126259456_L1.txt \
    --hwinj-start-time 1126259456 \
    --ifo L1 \
    --output-file L-L1HWINJ_M70i85.gwf \
    --fake-strain zeroNoise \
    --gps-start-time ${GPS_START} \
    --gps-end-time 1126259472 \
    --sample-rate 4096 \
    --low-frequency-cutoff 20

pycbc_insert_frame_hwinj \
    --hwinj-file hwinjcbc_1126259456_V1.txt \
    --hwinj-start-time 1126259456 \
    --ifo V1 \
    --output-file V-V1HWINJ_M70i85.gwf \
    --fake-strain zeroNoise \
    --gps-start-time ${GPS_START} \
    --gps-end-time 1126259472 \
    --sample-rate 4096 \
    --low-frequency-cutoff 20

TODO

@gsb76 - Note that pycbc_generate_hwinj will take NR data and create a synthetic signal with it, that pycbc_insert_frame_hwinj will take and convert into Frame format. pycbc_generate_hwinj can only use either NR data OR pre-defined waveform models. To create an extra-GR synthetic signal, you can do one of two things:

  1. Add new approximants called "X_PPE" to pycbc.waveform that takes GR-based approximant-"X" waveforms from pycbc.waveform and applies PPE corrections to them to return an "X" + PPE waveform.
  2. Create a modified my_ppe_generate_hwinj that takes in the user-input approximant "X" and generates its waveform just like pycbc_generate_hwinj does, but applies PPE corrections to it before writing to disk. Naturally, new PPE-options will need to be added to this script.

@prayush recommends approach (2.) to start with, as approach (1.) will require a new "X_PPE" for every base BBH GR approximant "X" that we may want to experiment with (e.g. X = EOB, NR, PostNewtonian, etc). However, if we ever want to move to using pycbc inference instead of lalinference we will need (1.).