From 9fd489232547c082a3e73b3ec6c08f585fc1b840 Mon Sep 17 00:00:00 2001 From: wendtalexander <wendtalexander@protonmail.com> Date: Fri, 18 Oct 2024 16:31:45 +0200 Subject: [PATCH] [ui/mainwindow] organising file --- pyrelacs/ui/mainwindow.py | 107 ++++++++++++++++---------------------- 1 file changed, 46 insertions(+), 61 deletions(-) diff --git a/pyrelacs/ui/mainwindow.py b/pyrelacs/ui/mainwindow.py index 025989d..3830eed 100644 --- a/pyrelacs/ui/mainwindow.py +++ b/pyrelacs/ui/mainwindow.py @@ -2,7 +2,7 @@ import time from pathlib import Path as path from PyQt6.QtGui import QAction, QIcon, QKeySequence -from PyQt6.QtCore import Qt, QSize, QThreadPool, QMutex, QTimer +from PyQt6.QtCore import Qt, QSize, QThreadPool, QMutex from PyQt6.QtWidgets import ( QGridLayout, QToolBar, @@ -16,16 +16,17 @@ from PyQt6.QtWidgets import ( import uldaq import nixio as nix import pyqtgraph as pg -import numpy as np import quantities as pq +from pyrelacs.devices.mccdaq import MccDaq +from pyrelacs.dataio.circbuffer import CircBuffer from pyrelacs.dataio.daq_producer import DaqProducer from pyrelacs.dataio.nix_writer import NixWriter from pyrelacs.dataio.sin_producer import SinProducer + from pyrelacs.worker import Worker from pyrelacs.repros.repros import Repro -from pyrelacs.dataio.circbuffer import CircBuffer from pyrelacs.ui.about import AboutDialog from pyrelacs.ui.plots.calibration import CalibrationPlot @@ -42,28 +43,26 @@ from IPython import embed class PyRelacs(QMainWindow): def __init__(self, config): super().__init__() + # loaded config self.config = config + if self.config.settings.daq: + start = time.time() + self.mccdaq = MccDaq() + end = time.time() + log.debug(f"Connection to DAQ took {end - start}") + + self.repros = Repro() + self.setToolButtonStyle( Qt.ToolButtonStyle.ToolButtonTextBesideIcon ) # Ensure icons are displayed with text self.setWindowTitle("PyRelacs") + self.mutex = QMutex() - self.timer = QTimer(self) - self.timer.setInterval(200) self.figure = pg.GraphicsLayoutWidget() - # filename = path.joinpath(path.cwd(), "data.nix") - # if filename.exists(): - # self.nix_file = nix.File.open(str(filename), nix.FileMode.ReadOnly) - # filename = path.joinpath(path.cwd(), "calibration.nix") - # self.nix_file = nix.File.open(str(filename), nix.FileMode.Overwrite) - # - # self.calibration_plot = CalibrationPlot(self.figure, self.nix_file) - # self.nix_file.close() - self.threadpool = QThreadPool() - self.repros = Repro() self.text = QPlainTextEdit() self.text.setReadOnly(True) @@ -84,33 +83,31 @@ class PyRelacs(QMainWindow): SAMPLERATE = pq.Quantity( self.config.pyrelacs.data.input.inputsamplerate, self.config.pyrelacs.data.input.inputsamplerateunit, - ) + ).rescale("Hz") + INPUTTRACECAPACITY = pq.Quantity( self.config.pyrelacs.data.input.inputtracecapacity, self.config.pyrelacs.data.input.inputtracecapacityunit, - ) + ).rescale("s") start = time.time() BUFFERSIZE = (SAMPLERATE * INPUTTRACECAPACITY).simplified end = time.time() log.debug(f"Buffer allocation took {end - start}") self.buffer = CircBuffer( - size=BUFFERSIZE, samplerate=SAMPLERATE, mutex=self.mutex + size=int(BUFFERSIZE.base), + samplerate=float(SAMPLERATE.base), + mutex=self.mutex, ) self.continously_plot = Continously(self.figure, self.buffer) self.continously_plot.plot() - start = time.time() - self.connect_dac() - end = time.time() - log.debug(f"Connection to DAQ took {end - start}") - - if hasattr(PyRelacs, "daq_device"): + if self.config.settings.daq: log.debug("Creating Daq Generator") - self.daq_producer = DaqProducer(self.buffer, self.daq_device, [1, 1]) - else: - log.debug("Creating Sinus Generator") - self.sinus_producer = SinProducer(self.buffer) + self.daq_producer = DaqProducer(self.buffer, self.mccdaq.daq_device, [1, 1]) + + log.debug("Creating Sinus Generator") + self.sinus_producer = SinProducer(self.buffer) self.nix_writer = NixWriter(self.buffer) @@ -128,16 +125,17 @@ class PyRelacs(QMainWindow): self._daq_connectaction = QAction( QIcon(":icons/connect.png"), "Connect DAQ", self ) - self._daq_connectaction.setStatusTip("Connect to daq device") - # self._daq_connectaction.setShortcut(QKeySequence("Alt+d")) - self._daq_connectaction.triggered.connect(self.connect_dac) + if self.config.settings.daq: + self._daq_connectaction.setStatusTip("Connect to daq device") + # self._daq_connectaction.setShortcut(QKeySequence("Alt+d")) + self._daq_connectaction.triggered.connect(self.mccdaq.connect_dac) - self._daq_disconnectaction = QAction( - QIcon(":/icons/disconnect.png"), "Disconnect DAQ", self - ) - self._daq_disconnectaction.setStatusTip("Disconnect the DAQ device") - # self._daq_connectaction.setShortcut(QKeySequence("Alt+d")) - self._daq_disconnectaction.triggered.connect(self.disconnect_dac) + self._daq_disconnectaction = QAction( + QIcon(":/icons/disconnect.png"), "Disconnect DAQ", self + ) + self._daq_disconnectaction.setStatusTip("Disconnect the DAQ device") + # self._daq_connectaction.setShortcut(QKeySequence("Alt+d")) + self._daq_disconnectaction.triggered.connect(self.mccdaq.disconnect_daq) # self._daq_calibaction = QAction( # QIcon(":/icons/calibration.png"), "Plot calibration", self @@ -176,8 +174,9 @@ class PyRelacs(QMainWindow): file_menu.addAction(self._rlx_aboutaction) if device_menu is not None: - device_menu.addAction(self._daq_connectaction) - device_menu.addAction(self._daq_disconnectaction) + if self.config.settings.daq: + device_menu.addAction(self._daq_connectaction) + device_menu.addAction(self._daq_disconnectaction) device_menu.addSeparator() # device_menu.addAction(self._daq_calibaction) device_menu.addAction(self._run_action) @@ -198,8 +197,9 @@ class PyRelacs(QMainWindow): self.addToolBar(Qt.ToolBarArea.TopToolBarArea, rlx_toolbar) daq_toolbar = QToolBar("DAQ") - daq_toolbar.addAction(self._daq_connectaction) - daq_toolbar.addAction(self._daq_disconnectaction) + if self.config.settings.daq: + daq_toolbar.addAction(self._daq_connectaction) + daq_toolbar.addAction(self._daq_disconnectaction) # daq_toolbar.addAction(self._daq_calibaction) daq_toolbar.addAction(self._run_action) daq_toolbar.addAction(self._run_sinus_action) @@ -210,7 +210,9 @@ class PyRelacs(QMainWindow): self.addToolBar(Qt.ToolBarArea.TopToolBarArea, daq_toolbar) repro_toolbar = QToolBar("Repros") - repro_names, file_names = self.repros.names_of_repros() + repro_names, file_names = self.repros.names_of_repros( + include_repros=self.config.settings.repros + ) for rep, fn in zip(repro_names, file_names): repro_action = QAction(rep, self) repro_action.setStatusTip(rep) @@ -271,24 +273,6 @@ class PyRelacs(QMainWindow): log.debug("Stopping DAQ") self.daq_producer.stop_aquisition() - def connect_dac(self): - devices = uldaq.get_daq_device_inventory(uldaq.InterfaceType.USB) - try: - self.daq_device = uldaq.DaqDevice(devices[0]) - log.debug(f"Found daq devices {len(devices)}, connecting to the first one") - self.daq_device.connect() - log.debug("connected") - except IndexError: - log.info("DAQ is not connected") - log.info("Please connect a DAQ device to the system") - - def disconnect_dac(self): - try: - self.daq_device.disconnect() - self.daq_device.release() - except AttributeError: - log.debug("DAQ was not connected") - def run_repro(self, n, fn): self.text.appendPlainText(f"started Repro {n}, {fn}") worker = Worker(self.repros.run_repro, self.nix_calibration, n, fn) @@ -305,7 +289,8 @@ class PyRelacs(QMainWindow): log.info("exit button!") self.stop_recording() self.add_to_textfield("exiting") - self.disconnect_dac() + if self.config.settings.daq: + self.mccdaq.disconnect_daq() log.info("closing GUI") self.close()