diff --git a/fixtracks/widgets/classifier.py b/fixtracks/widgets/classifier.py index e610a29..8ed57fc 100644 --- a/fixtracks/widgets/classifier.py +++ b/fixtracks/widgets/classifier.py @@ -135,6 +135,16 @@ class ConsistencyWorker(QRunnable): del detections[lowest_dist] return detections + def find_last_userlabeled(startframe): + t1index = np.where((self.frames < startframe) & (self.userlabeled) & (self.tracks == 1))[0][-1] + t2index = np.where((self.frames < startframe) & (self.userlabeled) & (self.tracks == 2))[0][-1] + d1 = Detection(t1index, self.frames[t1index], self.tracks[t1index], self.positions[t1index], + self.orientations[t1index], self.lengths[t1index], self.userlabeled[t1index]) + d2 = Detection(t1index, self.frames[t2index], self.tracks[t2index], self.positions[t2index], + self.orientations[t2index], self.lengths[t2index], self.userlabeled[t2index]) + last_detections[1] = d1 + last_detections[2] = d2 + unique_frames = np.unique(self.frames) steps = int((len(unique_frames) - self._startframe) // 100) errors = 0 @@ -142,6 +152,7 @@ class ConsistencyWorker(QRunnable): progress = 0 self._stoprequest = False last_detections = {1: None, 2: None, -1: None} + find_last_userlabeled(self._startframe) for f in unique_frames[unique_frames >= self._startframe]: if self._stoprequest: @@ -188,7 +199,7 @@ class ConsistencyWorker(QRunnable): continue if error and self._stoponerror: - self.signals.message.emit("Tracking stopped at frame %i.", f) + self.signals.message.emit(f"Tracking stopped at frame {f}.") break elif error: continue @@ -559,8 +570,11 @@ class ConsistencyClassifier(QWidget): self._messagebox.append("Error preparing data! Make sure that the first user-labeled frames contain both tracks!") self.setEnabled(False) return - max_startframe = np.min([t1_userlabeled[-1], t2_userlabeled[-1]]) - min_startframe = np.max([t1_userlabeled[0], t2_userlabeled[0]]) + max_startframe = np.min([t1_userlabeled[-1], t2_userlabeled[-1]]) -1 + first_guess = np.max([t1_userlabeled[0], t2_userlabeled[0]]) + while first_guess not in t1_userlabeled or first_guess not in t2_userlabeled: + first_guess += 1 + min_startframe = first_guess + 1 self._maxframes = np.max(self._frames) self._maxframeslabel.setText(str(self._maxframes)) self._startframe_spinner.setMinimum(min_startframe)