next up previous contents
Next: Function: match_cubic() Up: GRASP Routines: Template Bank Previous: Function: compute_match()   Contents

Function: match_parab()

int match_parab(float m1ref, float m2ref, float matchcont, int order, float srate, float flo, float ftau, char *noisefile, float *semimajor, float *semiminor, float *theta, float mcoef[])
This function attempts to find a parabolic fit to the match function near a reference template with masses (m1ref,m2ref). It works in ($\tau_0,\tau_1$) coordinates, and can can use any noise curve listed in detectors.dat for its inner products when computing the match.

Let the coordinates of the reference chirp be ( $\tau_0^r,\tau_1^r$), and define $x\equiv\tau_0-\tau_0^r$, $y\equiv\tau_1-\tau_1^r$. Then, the fit to the match is of the form

$\displaystyle \mu$ $\textstyle =$ $\displaystyle 1 + a x^2 + 2b xy + c y^2$  
  $\textstyle =$ $\displaystyle 1+\pmatrix{x$ (9.9.206)

Written in the form on the second line, it is easy to show that, if the match is in fact parabolic, it has surfaces of constant value that are ellipses. The (unnormalized) eigenvectors of this matrix are given by
$\displaystyle {\vec v}_0$ $\textstyle =$ $\displaystyle \pmatrix{x\cr\cr y\cr} =
$\displaystyle {\vec v}_1$ $\textstyle =$ $\displaystyle \pmatrix{x\cr\cr y\cr} =
\pmatrix{{(a-c)/2b}-\sqrt{\left[(a-c)/2b\right]^2+1}\cr\cr1\cr},$ (9.9.207)

and the eigenvalues are
$\displaystyle \lambda_0$ $\textstyle =$ $\displaystyle {1\over2}(a+c)+\sqrt{{1\over4}(a-c)^2 + b^2}$  
$\displaystyle \lambda_1$ $\textstyle =$ $\displaystyle {1\over2}(a+c)-\sqrt{{1\over4}(a-c)^2 + b^2}.$ (9.9.208)

(Note: because the match is maximal at $x=y=0$ and falls off as $x$ and $y$ increase, the matrix is negative definite. The eigenvalues are therefore negative, and so $\vert\lambda_1\vert > \vert\lambda_0\vert$.) From these values, it is simple to construct the equimatch ellipse. If the value of the match on the contour is $\mu_{\rm cont}$, then the semimajor axis of the ellipse has length
r_{\rm major} = \sqrt{\mu_{\rm cont}-1\over\lambda_0},
\end{displaymath} (9.9.209)

and the semiminor axis has length
r_{\rm minor} = \sqrt{\mu_{\rm cont}-1\over\lambda_1}.
\end{displaymath} (9.9.210)

The counterclockwise angle between the semimajor axis and the $\tau_0$ axis is easily found from ${\vec v}_0$:
\theta = {\tt atan2}(v_{0y},v_{0x}) =
\end{displaymath} (9.9.211)

(Here, atan2() is the C math library function; using atan2() insures that the computer points $\theta$ to the correct quadrant of the $\tau_0,\tau_1$ plane.) If we now define normalized eigenvectors ${\vec e}_0 =
{\vec v}_0/\vert{\vec v}_0\vert$, ${\vec e}_1 = {\vec v}_1/\vert{\vec v}_1\vert$, the ellipses are then easily constructed using the parametric curve
\pmatrix{x\cr y} = r_{\rm major}\cos\phi\;{\vec e}_0 +
r_{\rm minor}\sin\phi\;{\vec e}_1,
\end{displaymath} (9.9.212)

with $\phi$ varying from 0 to $2\pi$.

The arguments to the function are:

m1ref: Input. Mass of body 1 for the reference chirp (solar masses).
m2ref: Input. Mass of body 2 for the reference chirp (solar masses).
matchcont: Input. The value of the match contour.
order: Input. Twice the post-Newtonian order to be used in computing the templates; i.e., the power of $(v/c)$ used in the post-Newtonian expansion.
srate: Input. The sample rate, in Hz. Used to convert between integer array time-domain subscripts and frequency subscripts. For example this is the sample rate of the $0^\circ$- and $90^\circ$-phase reference chirps, before they are FFT'd.
flo: Input. The low-frequency cutoff to impose, in Hz. Within the code, this is used as the starting frequency of the templates; see make_filters().
ftau: Input. The frequency used to find $\tau_0$ and $\tau_1$; see Eqs. ([*]) and ([*]). Different authors use different conventions for this frequency--for example, Sathyaprakash uses the seismic wall frequency, whereas Owen uses the frequency at which the noise power is minimum. ftau is arbitrary, but should be used consistently: pick a value and stick with it.
noisefile: Input. A character string that specifies the name of a data file containing information about the noise power spectrum $P(f)$ of a dectector. See noise_power() for extended discussion.
semimajor: Output. The semimajor axis of the ellipse along which the match has the value matchcont.
semiminor: Output. The semiminor axis of the ellipse.
theta: Output. The counterclockwise angle, in radians, between semimajor and the $\tau_0$ axis.
mcoef: Output. The array mcoef[0..2] contains the coefficients of the parabolic fit to the match: $\mu_{\rm fit} = 1 + {\hbox{\tt mcoef[0]}} x^2 + {\hbox{\tt mcoef[1]}} xy +
{\hbox{\tt mcoef[2]}} y^2$.

The function works by sampling many templates in ($\tau_0,\tau_1$) coordinates that are close to the template with masses (m1ref,m2ref). Periodically, it computes the best parabolic fit to the data it has gathered so far and constructs the elliptical contour corresponding to that fit. It then takes $N_{\rm ell}$ steps around this ellipse and compares the value of the match predicted by the fit with the actual match value at each point. It then computes the following ``$\chi^2$-like'' statistic:

\varepsilon = {1\over N_{\rm ell}}\sum_{i=1}^{N_{\rm ell}}
\left(\mu_{\rm actual}^i - \mu_{\rm fit}^i\over 10^{-3}\right)^2.
\end{displaymath} (9.9.213)

If $\varepsilon=1$, then each fit point differs from the match by $10^{-3}$. A ``good'' fit will have $\varepsilon$ of order 1.

This function returns 0 if a good fit is not found ($\varepsilon$ is greater than 5 yet more than 250 templates have been used to generate fit data), and 1 otherwise. If a good fit is not found, then the match is not parabolic in the vicinity of the template (m1ref,m2ref) down to $\mu={\tt matchcont}$. This is typically the case if the masses are large (so that there are few cycles measured, and relativistic effects are very important), and if the value of matchcont is too far from 1. For instance, with the LIGO 40-meter prototype, match_parab() cannot find a parabolic fit to the .97 match contour for a binary with $m_1 = 1.2 M_\odot$, $m_2 = 1.6 M_\odot$; but it does find a parabolic fit for this binary at the .99 match contour.

Author: Scott Hughes,

next up previous contents
Next: Function: match_cubic() Up: GRASP Routines: Template Bank Previous: Function: compute_match()   Contents
Bruce Allen 2000-11-19