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)
- LALSuite git repository. Note: very sketchy documentation.
- PyCBC documentation page. See this for installation and tutorials [1].
- Simulating Advanced LIGO noise: here. This will use noise curves for GW detectors that are already pre-fed in LAL.
- 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). - Generating waveforms (GR based): here. Note that
pycbc.waveform
module is a thick wrapper aroundlalsimulation
. - Filtering of time-series data with GW templates: here.
- Reading and writing GW "Frame" files: here.
- Accessing and manipulating data/results for published detections: here. <<==
- 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:
- Add new approximants called "X_PPE" to
pycbc.waveform
that takes GR-based approximant-"X" waveforms frompycbc.waveform
and applies PPE corrections to them to return an "X" + PPE waveform. - Create a modified
my_ppe_generate_hwinj
that takes in the user-input approximant "X" and generates its waveform just likepycbc_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.).