Waveform matches & friends
A search for a GW signal aims to determine whether a signal at the interferometer \(s\) is composed by pure noise or by noise+signal. A search statistics measures the probability of observing a signal against the probability of observing pure noise. It is a function of a complex scalar product between two waveforms \(h_1, h_2\):
where \(S_n(f)\) is the power spectral density of the noise and \(\tilde{\phantom{h}}\) indicates the Fourier transform. We denote by \((\cdot|\cdot)\) the real part of the complex scalar product and \([\cdot|\cdot]\) the imaginary part.
More formally, the search statistics is the probability ratio \(\frac{p(s|n+h)}{p(s|n)}\) between the signal hypotesis and the noise hypothesis. The signal hyphothesis is the probability that a test waveform waveform, called template, with polarizations \(h_+, h_\times\), is present in the observed data \(s\). According to this hypothesis, the signal at the interferometer is a linear combination of the two WF polarization plus some noise \(n\): \(s = F_+ h_+ + F_\times h_\times + n\). The noise hyphothesis is the probability the observed data are only composed by noise \(n\): \(s = n\). A search aims to find the maximum of the search statistics over a large parameter space. Depending on specific assumpions on the nature of the signal, the likelihood can be maximised over a number of nuisance variables:
The search statistics is computed using normalized waveforms \(\hat{h}\), such that \(\hat{h} = \frac{h}{(h|h)}\). If a signal in the data exactly matches a template, the search statistics above is equivalent to the quantity \(<s|s>\), also called Signal to noise ratio (SNR). The quantities above are all function of a constant time shift between templates and signal, hence one needs to carry out the explicit maximisation over time (matched filtering). In all the expressions here, we assume that the time maximisation is understood and we leave it out from our notation.
The differences between precessing/HM and non-precessing case are due to the fact that, unlike the general case, in the non precessing case, the two polarizations \(h_+, h_\times\) are related by a simple symmetry (in frequency domain) \(\tilde{h}_+ = i \tilde{h}_\times\): this yields to a simpler expression. So far, most of the searches have been using the simple version.
A template bank aims to maximise by brute force the likelihood above by computing its value over a large number of templates. The goal of mbank is to generate and validate a template bank, making it directly usable for searches.
Match(es) definition
Motivated by the maximised search likelihood above, one can define a match between a signal \(s = F_+ h^\text{signal}_+ + F_\times h^\text{signal}_\times\) and a template with polarization \(h_+, h_\times\). The match takes values in \((0,1]\).
For non-precessing signals it holds \((\hat{s}|\hat{h}_\times) = [\hat{s}|\hat{h}_+]\) and the match is defined as:
and can be computed with mbank using function mbank.metric.cbc_metric.WF_match().
For the general signal, the match is also called symphony match, after the title of the paper that first introduced it. It is defined as:
It can be computed with mbank.metric.cbc_metric.WF_symphony_match().
Note that in both the expressions above, we are omitting a maximisation over a constant time shift of the signal: this is performed by mbank. If you don’t want it, you can set the option overlap = True.
The match can be seen as a function of the parameters \(\theta_1, \theta_2\) of two signals, by considering, in the equations above \(s(\theta_1) = F_+ h_+(\theta_1) + F_\times h_\times(\theta_1)\) and \(h_+(\theta_2), h_\times(\theta_2)\).
This is computed by function mbank.metric.cbc_metric.match(). Of course, in this case the match has a parametric dependence on the antenna patterns (or equivalently on the sky location of the GW source).
The match has a simple physical interpretation: it amounts to the fraction of SNR lost by filtering the signal \(s\) with the template \(h_+, h_\times\).
The match can be used to validate the performance of the bank, by evaluating the match on a random set of points, called injections.
A distance between templates
In the non-precessing case, we can introduce a distance between points of the manifold as:
The distance does not take into account the cross polarization and it is equivalent to setting \(F_\times = 0\) in the standard match. Indeed, for non-precessing signals \(\tilde{h}_+ = i \tilde{h}_\times\) (hence \((\hat{h}_+ | \hat{h}_\times) = 0\) and \([\hat{h}_+ | \hat{h}_\times] = 1\)) and the standard match does not depend on the value of the antenna patterns: this allows to set \(F_\times = 0\) and symmetrize the expression consistently.
For the general case, the distance above is not suitable and a more general distance definition should be employed. Things are much more complicated:
where we defined \(h_{+\times} = (\hat{h}_+|\hat{h}_\times)\)
The general distance is motivate by the simphony match, where we assumed \(s(\theta) = h_+(\theta)\). Of course it is not symmetric (hence strictly speaking it’s not a distance), but for our purposes it’s more than enough!
A metric distance between templates
The distances above can be approximated by a metric distance \(d_\text{metric}\). A metric distance is a bilinear form, represented by a matrix \(M_{ij}(\theta)\) defined at each point of the space.
where \(\Delta\theta = \theta_1 - \theta_2\).
The matrix \(M_{ij}(\theta)\) can is built in such a way that the metric distance approximates the “true” distance:
The metric can be computed at any point \(\theta\) of the manifold using mbank.metric.cbc_metric.get_metric(). The option metric_type allows to you to decide the method used to compute the metric. Among many experimental methods, you may want to use:
metric_type = 'hessian': it computes the hessian of the distance in the non-precessing case (default)metric_type = 'symphony': it computes the hessian of the distance in the general case
You can also compute the match \(\mathcal{M}_\text{metric} = 1 - d^2_\text{metric}\) approximated by the metric by calling mbank.metric.cbc_metric.metric_match()
mbank heavily relies on such metric approximation to enourmously speed up the generation (and validation) of a template bank.