From 2f1bffb509ac7cd8d39a8218f9f6e52fd29b342c Mon Sep 17 00:00:00 2001 From: Camilla Compton <camilla.compton@ligo.org> Date: Tue, 2 Jun 2020 11:11:46 -0700 Subject: [PATCH] change from list to dictionary in refine.py refine_transistion --- locklost/plugins/refine.py | 28 +++++++++++++++++----------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/locklost/plugins/refine.py b/locklost/plugins/refine.py index 313a7383..9d5a5437 100644 --- a/locklost/plugins/refine.py +++ b/locklost/plugins/refine.py @@ -179,25 +179,31 @@ def find_transition(channel, segment, std_threshold, minimum=None): if minimum and lock_mean < minimum: logging.info("channel mean below minimum, unable to resolve time") - # look for positive and negative threshold crossings, add them to a list, - # then choose the first crossing if one exists + # look for positive and negative threshold crossings, add them to a + # dictionary, then choose the first crossing if one exists else: inds_above = np.where(buf.data > upper_threshold)[0] inds_below = np.where(buf.data < lower_threshold)[0] - thresh_crossing_list = [] + thresh_crossing_dict = defaultdict(lambda: defaultdict(int)) if inds_above.any(): - thresh_crossing_list.append([np.min(inds_above), upper_threshold]) + thresh_crossing_dict['ind']['upper'] = np.min(inds_above) + thresh_crossing_dict['thresh']['upper'] = upper_threshold if inds_below.any(): - thresh_crossing_list.append([np.min(inds_below), lower_threshold]) - if len(thresh_crossing_list) > 0: - thresh_crossing_list.sort() - ind = thresh_crossing_list[0][0] - threshold = thresh_crossing_list[0][1] + thresh_crossing_dict['ind']['lower'] = np.min(inds_below) + thresh_crossing_dict['thresh']['lower'] = lower_threshold + first_crossing = min( + thresh_crossing_dict['ind'], + key = lambda k: thresh_crossing_dict['ind'][k], + default = None + ) + if first_crossing is None: + logging.info("no threshold crossings, unable to resolve time") + else: + threshold = thresh_crossing_dict['thresh'][first_crossing] + ind = thresh_crossing_dict['ind'][first_crossing] refined_gps = buf.tarray[ind] logging.info("threshold: {}".format(threshold)) logging.info("refined time: {}".format(refined_gps)) - else: - logging.info("no threshold crossings, unable to resolve time") # add a threshold to be diplayed on graphs if refinement failed if threshold is None: -- GitLab