from time import sleep
import numpy as np
from pynta.view.GUI.main_window import MainWindowGUI
from pynta.view.subscriber_thread import SubscriberThread
[docs]class MainWindow(MainWindowGUI):
def __init__(self, experiment):
"""
:param nanoparticle_tracking.model.experiment.win_nanocet.NPTracking experiment: Experiment class
"""
super().__init__(experiment.config['GUI']['refresh_time'])
self.experiment = experiment
self.camera_viewer_widget.setup_roi_lines([self.experiment.max_width, self.experiment.max_height])
self.config_tracking_widget.update_config(self.experiment.config['tracking'])
self.config_widget.update_config(self.experiment.config)
self.tracking = False
self.update_histogram_worker = SubscriberThread(self.experiment.publisher.port, 'histogram')
self.update_histogram_worker.data_received.connect(self.update_histogram)
self.update_histogram_worker.start()
[docs] def initialize_camera(self):
self.experiment.initialize_camera()
[docs] def snap(self):
self.experiment.snap()
[docs] def update_gui(self):
if self.experiment.temp_image is not None:
self.camera_viewer_widget.update_image(self.experiment.temp_image)
if self.experiment.tracking:
locations = self.experiment.temp_locations
self.camera_viewer_widget.draw_target_pointer(locations)
[docs] def start_movie(self):
if self.experiment.free_run_running:
self.stop_movie()
return
self.experiment.start_free_run()
self.actionStart_Movie.setToolTip('Stop Movie')
[docs] def stop_movie(self):
self.experiment.stop_free_run()
self.actionStart_Movie.setToolTip('Start Movie')
[docs] def set_roi(self):
self.refresh_timer.stop()
X, Y = self.camera_viewer_widget.get_roi_values()
self.experiment.set_roi(X, Y)
X, Y = self.experiment.camera.X, self.experiment.camera.Y
X[1] += 1
Y[1] += 1
self.camera_viewer_widget.set_roi_lines(X, Y)
self.refresh_timer.start()
[docs] def clear_roi(self):
self.refresh_timer.stop()
self.experiment.clear_roi()
self.camera_viewer_widget.set_roi_lines([0, self.experiment.max_width], [0, self.experiment.max_height])
self.refresh_timer.start()
[docs] def save_image(self):
self.experiment.save_image()
[docs] def start_continuous_saves(self):
if self.experiment.save_stream_running:
self.stop_continuous_saves()
return
self.experiment.save_stream()
self.actionStart_Continuous_Saves.setToolTip('Stop Continuous Saves')
[docs] def stop_continuous_saves(self):
self.experiment.stop_save_stream()
self.actionStart_Continuous_Saves.setToolTip('Start Continuous Saves')
[docs] def start_tracking(self):
self.experiment.start_tracking()
self.tracking = True
[docs] def start_saving_tracks(self):
self.experiment.start_saving_location()
[docs] def stop_saving_tracks(self):
self.experiment.stop_saving_location()
[docs] def start_linking(self):
if self.experiment.link_particles_running:
self.stop_linking()
return
self.experiment.start_linking_locations()
self.actionStart_Linking.setToolTip('Stop Linking')
[docs] def stop_linking(self):
self.experiment.stop_linking_locations()
self.actionStart_Linking.setToolTip('Start Linking')
[docs] def calculate_histogram(self):
if not self.experiment.location.calculating_histograms:
self.experiment.location.calculate_histogram()
[docs] def update_histogram(self, values):
if len(values) > 0:
vals = np.array(values)[:, 0]
vals = vals[~np.isnan(vals)]
self.histogram_tracks_widget.histogram_widget.update_distribution(vals)
[docs] def update_tracks(self):
locations = self.experiment.location.relevant_tracks()
self.histogram_tracks_widget.tracks_widget.plot_trajectories(locations)
[docs] def update_tracking_config(self, config):
config = dict(
tracking=config
)
self.experiment.update_config(**config)
[docs] def update_config(self, config):
self.experiment.update_config(**config)
[docs] def closeEvent(self, *args, **kwargs):
self.experiment.finalize()
sleep(1)
super().closeEvent(*args, **kwargs)