diff --git a/gstlal-inspiral/python/far.py b/gstlal-inspiral/python/far.py index daee69f551d78325a825b7640b38cb1108296c37..9862b7e9166531670001b09f239423170728c048 100644 --- a/gstlal-inspiral/python/far.py +++ b/gstlal-inspiral/python/far.py @@ -379,29 +379,35 @@ class ThincaCoincParamsDistributions(snglcoinc.CoincParamsDistributions): # FIXME: switch to new default when possible ligo_lw_name_suffix = u"pylal_ligolw_burca_tailor_coincparamsdistributions" - # FIXME: lower boundaries need to be adjusted to match search SNR - # threshold + # range of SNRs covered by this object + # FIXME: must ensure lower boundary matches search threshold + snr_min = 4. + snr_max = 100. + + # binnings and filters binnings = { - "H1_snr_chi": rate.NDBins((rate.LogarithmicPlusOverflowBins(4., 100., 200), rate.LogarithmicPlusOverflowBins(.001, 0.5, 200))), - "H2_snr_chi": rate.NDBins((rate.LogarithmicPlusOverflowBins(4., 100., 200), rate.LogarithmicPlusOverflowBins(.001, 0.5, 200))), - "H1H2_snr_chi": rate.NDBins((rate.LogarithmicPlusOverflowBins(4., 100., 200), rate.LogarithmicPlusOverflowBins(.001, 0.5, 200))), - "L1_snr_chi": rate.NDBins((rate.LogarithmicPlusOverflowBins(4., 100., 200), rate.LogarithmicPlusOverflowBins(.001, 0.5, 200))), - "V1_snr_chi": rate.NDBins((rate.LogarithmicPlusOverflowBins(4., 100., 200), rate.LogarithmicPlusOverflowBins(.001, 0.5, 200))) + "H1_snr_chi": rate.NDBins((rate.LogarithmicPlusOverflowBins(snr_min, snr_max, 200), rate.LogarithmicPlusOverflowBins(.001, 0.5, 200))), + "H2_snr_chi": rate.NDBins((rate.LogarithmicPlusOverflowBins(snr_min, snr_max, 200), rate.LogarithmicPlusOverflowBins(.001, 0.5, 200))), + "H1H2_snr_chi": rate.NDBins((rate.LogarithmicPlusOverflowBins(snr_min, snr_max, 200), rate.LogarithmicPlusOverflowBins(.001, 0.5, 200))), + "L1_snr_chi": rate.NDBins((rate.LogarithmicPlusOverflowBins(snr_min, snr_max, 200), rate.LogarithmicPlusOverflowBins(.001, 0.5, 200))), + "V1_snr_chi": rate.NDBins((rate.LogarithmicPlusOverflowBins(snr_min, snr_max, 200), rate.LogarithmicPlusOverflowBins(.001, 0.5, 200))) } - # FIXME the characteristic width (which is relevant for smoothing) - # should be roughly 1.41 in SNR (from Gaussian noise expectations). So - # it is tied to how many bins there are per SNR range. With 200 bins - # between 4 and 26 each bin is .11 wide in SNR. So a width of 13 bins - # corresponds to 1.43 which is close to 1.41 + def snr_chi_filter(bins, snr_width_at_8 = math.sqrt(2) / 4.0, sigma = 10): + snr_bins = bins[0] + bin_width_at_8 = (snr_bins.upper() - snr_bins.lower())[snr_bins[8.0]] + return rate.gaussian_window(snr_width_at_8 / bin_width_at_8, 7, sigma = sigma) + filters = { - "H1_snr_chi": rate.gaussian_window(7, 7, sigma = 10), - "H2_snr_chi": rate.gaussian_window(7, 7, sigma = 10), - "H1H2_snr_chi": rate.gaussian_window(7, 7, sigma = 10), - "L1_snr_chi": rate.gaussian_window(7, 7, sigma = 10), - "V1_snr_chi": rate.gaussian_window(7, 7, sigma = 10) + "H1_snr_chi": snr_chi_filter(binnings["H1_snr_chi"]), + "H2_snr_chi": snr_chi_filter(binnings["H2_snr_chi"]), + "H1H2_snr_chi": snr_chi_filter(binnings["H1H2_snr_chi"]), + "L1_snr_chi": snr_chi_filter(binnings["L1_snr_chi"]), + "V1_snr_chi": snr_chi_filter(binnings["V1_snr_chi"]) } + del snr_chi_filter + @staticmethod def coinc_params(events, offsetvector): instruments = set(event.ifo for event in events)