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