diff --git a/tools.py b/tools.py index 95d05138defc2076b7f23b4040768f3b8e6e3f2f..4d856b1aa2976850d633f803c8f4c227d7328481 100644 --- a/tools.py +++ b/tools.py @@ -124,12 +124,15 @@ class Main: if len(coord) > 1 and dist_factor is not None: coord = dark_ions(img, coord, dist_factor) - _, old_idx = self.memory.get_value() + old_coord = self.memory.get_value() self.memory.save_value(coord) - coord, new_idx = self.memory.get_value() + coord = self.memory.get_value() + + same_coord = _compare_coord(old_coord, coord) + # If idx changes, it means that ion reordered reorder_flag = 0 - if new_idx != old_idx: + if not same_coord: reorder_flag = 1 self.count_avg.update_count() @@ -219,8 +222,7 @@ class Memory: diff = [] for i, element in enumerate(self.memory): if len(element) == len(value): - same_type = all(value[:, 2] == element[:, 2]) - if same_type: + if all(value[:, 2] == element[:, 2]): diff_pos = np.abs(value[:, :2] - element[:, :2]) diff.append([i, diff_pos.sum()]) @@ -268,9 +270,9 @@ class Memory: try: max_value = self.memory[self.max_idx] except IndexError: - max_value = None + max_value = np.empty((1, 3)) - return max_value, self.max_idx + return max_value class MovingAverage: @@ -296,6 +298,9 @@ class MovingAverage: if len(self.reorder_history) > 60: self.reorder_history.pop(0) self.moving_avg = self.reorder_history[-1] - self.reorder_history[0] + min_val = min(self.reorder_history) + self.reorder_history = [i - min_val for i in self.reorder_history] + self.reorder_count -= min_val def update_count(self): """ @@ -896,3 +901,16 @@ def _ion_distance(coord): dist = np.array(dist) return dist + + +def _compare_coord(coord1, coord2): + same_coord = False + + same_len = len(coord1) == len(coord2) + same_type = all(coord1[:, 2] == coord2[:, 2]) + same_pos = np.abs(coord1[:, :2] - coord2[:, :2]).sum() + + if same_len and same_type and same_pos < 30: + same_coord = True + + return same_coord \ No newline at end of file