void find_ring(float *h, float *u, float *r, float *o, int n, int len, int safe, int *off, float *snr, float *mean, float *var)This optimally filters the strain data using an input template and then finds the time at which the SNR peaks. The arguments are:

`h`: Input. The FFT of the strain data .`u`: Input. The normalized template .`r`: Input. Twice the inverse power spectrum .`o`: Output. Upon return, contains the filter output.`n`: Input. Defines the lengths of the arrays`h[0..n-1]`,`u[0..n-1]`,`o[0..n-1]`, and`r[0..n/2]`.`len`: Input. The number of time domain bins for which the filter is non-zero. Needed in order to eliminate the wrap-around ambiguity described in subsection .`safe`: Input. The additional number of time domain bins to use as a safety margin. This number of points are ignored at the beginning of the filter output and, along with the number of points`len`, at the ending of the filter output. Needed in order to eliminate the wrap-around ambiguity described in subsection .`off`: Output. The offset, in the range`safe`to`n-len-safe-1`, for which the filter output is a maximum.`snr`: Output. The maximum SNR in the domain specified above.`mean`: Output. The mean value of the filter output over the domain specified above.`var`: Output. The variance of the filter output over the domain specified above. Would be unity if the input to the filter were Gaussian noise with a spectrum defined by .

- Author: Jolien Creighton, jolien@tapir.caltech.edu