Adding support for filtering with precessing/HM templates
Overview
In this merge request, we make all the required changes to the pipeline in order to support matched filtering with precessing and/or HM templates. In doing so, we do not change the behavior of the pipeline for the non precessing case. We follow 1709.09181 for the definition of the search statistics.
The changes happened in different places:
-
cbc_template_fir.py
andtemplates.py
: added new lal precessing approximants, added support for reading in-plane spins and inclination from the sngl_inspiral table and added support for template generation in the precessing/HM case -
gstlal_inspiral_plotsummary
: added some plots showing the injection recovery as a function of some interesting quantities (namely chi_p and inclination). -
gstlal_inspiral_injection_template_match
: the former method to match injections based on voronoi cells crashed frequently during our tests. We replaced it with a more robust KDTree
The chisq computation has not been changed, since it doesn't appear to harm the search sensitivity. However, from a theory perspective a new chisq expression should be introduced. This raises the issue of why the "non-precessing" chisq works so well, even for the precessing/HM case. This is still under investigation and requires further studies.
Validation
A small scale run has been performed to check the robustness of the new method, targeting a small precessing region with total mass in [24, 25] M_sun and q in [10, 10.5]. To avoid SNR loss due to the bank, the injections were done matching exactly the templates. More details can be found here and the summary pages are linked here.
The new SNR method shows excellent SNR recovery, as shown in the picture below, showing recovered SNR vs injected SNR:
Such precessing search shows a sensitivity (VT comparison) improvements of a factor of 3/5 with respect to a non-precessing search (with the same injection set).
Comparison with master
I run a comparison with the master branch for a small non-spinning BNS search (bank and mass model here), injections are home made). Results for both runs are shown here.
SNR & Chisq comparison
Below, we report the results of the differences in recovered SNR, chisq and trigger time for the injection in the two runs.
The results of the two runs are consistent with each other, with occasional injections recovered with a large snr difference (|ΔSNR| > 1). The large discrepancies in recovered SNR seem to be clustered at high SNRs (SNR>100): maybe this can be explained by the presence of loud glitches?
BG vs FG plot
Background and foreground are plotted together for the two branches below.
The two plots look consistent, with some differences in the background (especially at high SNR). Are the discrepancies in the background concerning?
SVD bank
I also checked the output of `svd_bank`: the svd reduced templates (and the reconstructed templates) agree up to numerical precision among the two branches.