From 961d67ecf58234a3ae6b9daf16c8c4d37793827d Mon Sep 17 00:00:00 2001 From: Chad Hanna <crh184@psu.edu> Date: Tue, 4 Apr 2017 15:04:35 -0400 Subject: [PATCH] metric.py: gracefully handle waveform errors and again change the distance criteria --- gstlal-ugly/python/metric.py | 28 +++++++++++++++++----------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/gstlal-ugly/python/metric.py b/gstlal-ugly/python/metric.py index c2f844113b..a89a502729 100644 --- a/gstlal-ugly/python/metric.py +++ b/gstlal-ugly/python/metric.py @@ -164,7 +164,8 @@ class Metric(object): del hcross except RuntimeError: print p - raise + #raise + return None return fseries def match(self, w1, w2): @@ -172,27 +173,32 @@ class Metric(object): n = numpy.real((numpy.conj(w) * w).sum())**.5 / self.duration**.5 return n - self.w1w2.data.data[:] = numpy.conj(w1.data.data) * w2.data.data - lal.COMPLEX16FreqTimeFFT(self.tseries, self.w1w2, self.revplan) - m = numpy.real(numpy.abs(numpy.array(self.tseries.data.data)).max()) / norm(w1.data.data) / norm(w2.data.data) - if m > 1.0000001: - raise ValueError("Match is greater than 1 : %f" % m) - return m + try: + self.w1w2.data.data[:] = numpy.conj(w1.data.data) * w2.data.data + lal.COMPLEX16FreqTimeFFT(self.tseries, self.w1w2, self.revplan) + m = numpy.real(numpy.abs(numpy.array(self.tseries.data.data)).max()) / norm(w1.data.data) / norm(w2.data.data) + if m > 1.0000001: + raise ValueError("Match is greater than 1 : %f" % m) + return m + except AttributeError: + return None #def __set_diagonal_metric_tensor_component(self, i, center, deltas, g, w1, min_d2 = numpy.finfo(numpy.float32).eps * 5, max_d2 = numpy.finfo(numpy.float32).eps * 100): def __set_diagonal_metric_tensor_component(self, i, center, deltas, g, w1): - min_d2 = numpy.finfo(numpy.float32).eps / self.working_length / 10. - #max_d2 = numpy.finfo(numpy.float32).eps / self.working_length * 100000 - max_d2 = numpy.finfo(numpy.float32).eps / self.working_length * 500.0 + min_d2 = numpy.finfo(numpy.float32).eps * .01 + max_d2 = numpy.finfo(numpy.float32).eps * 100 # make the vector to solve for the metric by choosing # either a principle axis or a bisector depending on if # this is a diagonal component or not x = numpy.zeros(len(deltas)) x[i] = deltas[i] - d2 = 1. - self.match(w1, self.waveform(center+x)) + try: + d2 = 1. - self.match(w1, self.waveform(center+x)) + except TypeError: + return self.__set_diagonal_metric_tensor_component(i, center, deltas * 1.1, g, w1) if (d2 > max_d2): return self.__set_diagonal_metric_tensor_component(i, center, deltas / 8, g, w1) if (d2 < min_d2): -- GitLab