code: def good_sequences_to_track(flow, motion_threshold=1.0):
      endpoints = []
      in_low = False
      for i, val in enumerate(flow):
          if val < motion_threshold:
              if not in_low:
                  endpoints.append(i)
                  in_low = True
          else:
              if in_low:
                  endpoints.append(i-1)
              in_low = False
      def mean_score_func(m):
          mu = 15
          sigma = 8
          top_val = normpdf(mu, mu, sigma)
          return normpdf(m, mu, sigma) / top_val
      def max_score_func(m):
          mu = 40
          sigma = 8
          if m <= mu:
              return 1.
          else:
              top_val = normpdf(mu, mu, sigma)
              return normpdf(m, mu, sigma) / top_val
      def length_score_func(l):
          mu = 30
          sigma = 10
          top_val = normpdf(mu, mu, sigma)
          return normpdf(l, mu, sigma) / top_val
      min_length = 5
      sequences = []
      for k, i in enumerate(endpoints[:-1]):
          for j in endpoints[k+1:]:
              length = j - i
              if length < min_length:
                  continue
              seq = flow[i:j+1]
              m_score = mean_score_func(np.mean(seq))
              mx_score = max_score_func(np.max(seq))
              l_score = length_score_func(length)
              logger.debug("%d, %d scores: (mean=%.5f, max=%.5f, length=%.5f)" % (i,j,m_score, mx_score, l_score))
              if min(m_score, mx_score, l_score) < 0.2:
                  continue
              score = m_score + mx_score + l_score 
              sequences.append((i, j, score))
      return sorted(sequences, key=lambda x: x[2], reverse=True)