diff --git a/examples/test_with_captdev.py b/examples/test_with_captdev.py index 360d3619e2b532917e8390e89b187bb7e10ba902..ae4787a1a50520d6b78fdebca366be663a7e00bc 100644 --- a/examples/test_with_captdev.py +++ b/examples/test_with_captdev.py @@ -20,7 +20,8 @@ if __name__ == "__main__": app = QApplication.instance() conf_capt_dev = captdev.Config() - #conf.load("config.yaml") + conf_capt_dev.load("CaptDeviceConfig.yaml") + conf_capt_dev.autosave() start_capture_flag = Value('i', 0) capt_dev_model = captdev.Model(conf_capt_dev) diff --git a/pyproject.toml b/pyproject.toml index 1159beacdcc970a155fda4db4fb7d05fee342a55..f1bcf3f30582ee78539c9c3286a8e830b7682f17 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "lasercontrol" -version = "0.1.2" +version = "0.1.3" authors = [ { name="Christoph Schmidt", email="cschmidt.fs@gmail.com" }, ] diff --git a/src/LaserControl/controller/LaserControlController.py b/src/LaserControl/controller/LaserControlController.py index ef10b4d6f6abd9204f382b2f573fbd194ffbfc14..452db943263ada9042ce46be35cd6e8e2ba7d2bb 100644 --- a/src/LaserControl/controller/LaserControlController.py +++ b/src/LaserControl/controller/LaserControlController.py @@ -9,6 +9,7 @@ from LaserControl.model.LaserControlModel import LaserControlModel import CaptDeviceControl as captdev + class LaserControlController: def __init__(self, model: LaserControlModel, start_capture_flag: Value = None): @@ -18,30 +19,30 @@ class LaserControlController: self.model = model # Multiprocess variables - #self.proc: Process = None + # self.proc: Process = None self.lock = Lock() - #self._laser_port = Value('i', 0, lock=self.lock) - #self._laser_connected_flag = Value('i', False, lock=self.lock) + # self._laser_port = Value('i', 0, lock=self.lock) + # self._laser_connected_flag = Value('i', False, lock=self.lock) self._laser_moving_flag = Value('i', False, lock=self.lock) self._laser_finished_flag = Value('i', False, lock=self.lock) - #if self.model.capturing_device is None or not self.model.capturing_device_connected: + # if self.model.capturing_device is None or not self.model.capturing_device_connected: if start_capture_flag is not None: self._start_capture_flag = start_capture_flag else: self._start_capture_flag = Value('i', False, lock=self.lock) - #self._current_wavelength = Value('f', 0.0, lock=self.lock) + # self._current_wavelength = Value('f', 0.0, lock=self.lock) - #self._laser_state = Value(LaserStateArray, (False, False, False, 0, 0, 0), lock=self.lock) + # self._laser_state = Value(LaserStateArray, (False, False, False, 0, 0, 0), lock=self.lock) # For the sweep - #self.laser_at_start_position_flag = Value('i', False, lock=self.lock) - #self.laser_at_end_position_flag = Value('i', False, lock=self.lock) + # self.laser_at_start_position_flag = Value('i', False, lock=self.lock) + # self.laser_at_end_position_flag = Value('i', False, lock=self.lock) # Threads for acquiring data from the process - #self.thread_manager = QThreadPool() + # self.thread_manager = QThreadPool() self.mp_laser_controller = MPLaserDeviceControl(None, self._laser_moving_flag, self._laser_finished_flag, @@ -76,9 +77,9 @@ class LaserControlController: self.kill_thread = False - def connect_capture_device(self, device: captdev.Controller): - self.logger.info("***********************************************Connecting to capture device..***********************************") + self.logger.info( + "***********************************************Connecting to capture device..***********************************") self.mp_laser_controller.mp_read_laser_settings(self.model.port) if isinstance(device, captdev.Controller): self.model.capturing_device = device @@ -86,13 +87,10 @@ class LaserControlController: lambda x: type(self.model).capturing_device_connected.fset(self.model, x) ) - - def connect_device(self): self.logger.info("Connecting to laser...") self.mp_laser_controller.mp_read_laser_settings(self.model.port) - def _move_to_wavelength_finished(self, wavelength: float): self.logger.info(f"Move to wavelength finished. Current wavelength: {wavelength}") @@ -106,7 +104,6 @@ class LaserControlController: def _laser_movement_finished(self, is_finished: bool): pass - # def _monitor_laser_state(self): # while not self.kill_thread: # self.model.connected = bool(self._laser_connected_flag.value) @@ -137,13 +134,30 @@ class LaserControlController: # self.capt_device.clear_data() # Reset the flag # self.capt_device.model.capturing_finished = False + self.logger.info(f"Starting wavelength sweep from {start_wavelength} to {stop_wavelength}") if self.model.capturing_device is not None: self.model.capturing_device.reset_capture() - if start_wavelength is None: - start_wavelength = self.model.sweep_start_wavelength - if stop_wavelength is None: - stop_wavelength = self.model.sweep_stop_wavelength - self.mp_laser_controller.wavelength_sweep(self.model.port, start_wavelength, stop_wavelength) + if not self.model.capturing_device.model.device_information.device_connected: + self.model.capturing_device.open_device() + self.model.capturing_device.ready_for_recording_changed.connect( + lambda ready: self.start_wavelength_sweep_emitted(start_wavelength, stop_wavelength, ready=ready) + ) + self.logger.info("Capturing device is connected.") + + if self.model.capturing_device.model.capturing_information.ready_for_recording: + self.start_wavelength_sweep_emitted(start_wavelength, stop_wavelength) + + + else: + self.start_wavelength_sweep_emitted(start_wavelength, stop_wavelength) + + def start_wavelength_sweep_emitted(self, start_wavelength: float = None, stop_wavelength: float = None, ready=True): + if ready: + if start_wavelength is None: + start_wavelength = self.model.sweep_start_wavelength + if stop_wavelength is None: + stop_wavelength = self.model.sweep_stop_wavelength + self.mp_laser_controller.wavelength_sweep(self.model.port, start_wavelength, stop_wavelength) def move_to_wavelength(self, wavelength: float) -> None: self.logger.info(f"Move to wavelength {wavelength}") @@ -151,7 +165,7 @@ class LaserControlController: def stop_process(self): time_start = time.time() - #if self.proc is not None: + # if self.proc is not None: # while self.proc.is_alive(): # time.sleep(0.1) # self.logger.warning(f"Laser process exited after {time.time() - time_start}s") diff --git a/src/LaserControl/controller/multiprocess/MPLaserDevice.py b/src/LaserControl/controller/multiprocess/MPLaserDevice.py index 04a909cb1aef258d79a01e1711a4a2bf03ee0bcc..1f1e9e37c019ded968b3f8e9d56ab2a515b7f1e4 100644 --- a/src/LaserControl/controller/multiprocess/MPLaserDevice.py +++ b/src/LaserControl/controller/multiprocess/MPLaserDevice.py @@ -122,7 +122,7 @@ class MPLaserDevice(cmp.CProcess): self.laser_finished_flag.value = finished return self.laser_finished_flag.value - @cmp.CProcess.register_signal(postfix="_finsihed") + @cmp.CProcess.register_signal(postfix="_finished") def move_to_wavelength(self, usb_port: str = None, wavelength: float = None, capture: bool = False, con: LaserCon = None, *args, **kwargs): # laser_moving_flag.value = False