diff --git a/pyproject.toml b/pyproject.toml index 8c912f0..bba55a8 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [features] # defines the plugin features contained into this plugin instruments = true # true if plugin contains instrument classes (else false, notice the lowercase for toml files) -extensions = false # true if plugins contains dashboard extensions +extensions = true # true if plugins contains dashboard extensions models = false # true if plugins contains models of the extensions (PID, optimizers, data mixer, sequencer, ...) h5exporters = false # true if plugin contains custom h5 file exporters scanners = false # true if plugin contains custom scan layout (daq_scan extensions) @@ -18,6 +18,7 @@ dependencies = [ "pymodaq_data>=5.3.0", "pymodaq_plugins_daqmx>=1.1,<5", "pymodaq_plugins_andor", + "pillow", ] authors = [ diff --git a/src/pymodaq_plugins_moke/daq_move_plugins/daq_move_Current.py b/src/pymodaq_plugins_moke/daq_move_plugins/daq_move_Current.py index eb664ef..39f6961 100644 --- a/src/pymodaq_plugins_moke/daq_move_plugins/daq_move_Current.py +++ b/src/pymodaq_plugins_moke/daq_move_plugins/daq_move_Current.py @@ -1,5 +1,5 @@ from pymodaq.control_modules.move_utility_classes import DAQ_Move_base, comon_parameters_fun, main -from pymodaq.utils.daq_utils import ThreadCommand, getLineInfo # object used to send info back to the main thread +from pymodaq_utils.utils import ThreadCommand, getLineInfo # object used to send info back to the main thread from easydict import EasyDict as edict # type of dict import numpy as np from pymodaq_plugins_daqmx.hardware.national_instruments.daqmx import (DAQmx, ClockSettings, AIChannel, AOChannel) diff --git a/src/pymodaq_plugins_moke/daq_move_plugins/daq_move_CurrentMock.py b/src/pymodaq_plugins_moke/daq_move_plugins/daq_move_CurrentMock.py index bab62b5..5992d85 100644 --- a/src/pymodaq_plugins_moke/daq_move_plugins/daq_move_CurrentMock.py +++ b/src/pymodaq_plugins_moke/daq_move_plugins/daq_move_CurrentMock.py @@ -1,5 +1,5 @@ from pymodaq.control_modules.move_utility_classes import DAQ_Move_base, main, comon_parameters_fun # common set of parameters for all actuators -from pymodaq.utils.daq_utils import ThreadCommand, getLineInfo # object used to send info back to the main thread +from pymodaq_utils.utils import ThreadCommand, getLineInfo # object used to send info back to the main thread from easydict import EasyDict as edict # type of dict from pymodaq_plugins_moke.hardware.mock import MokeMockController diff --git a/src/pymodaq_plugins_moke/daq_move_plugins/daq_move_LedDC4104.py b/src/pymodaq_plugins_moke/daq_move_plugins/daq_move_LedDC4104.py index aed05ff..5654482 100644 --- a/src/pymodaq_plugins_moke/daq_move_plugins/daq_move_LedDC4104.py +++ b/src/pymodaq_plugins_moke/daq_move_plugins/daq_move_LedDC4104.py @@ -1,5 +1,5 @@ from pymodaq.control_modules.move_utility_classes import DAQ_Move_base, comon_parameters_fun, main -from pymodaq.utils.daq_utils import ThreadCommand, getLineInfo # object used to send info back to the main thread +from pymodaq_utils.utils import ThreadCommand, getLineInfo # object used to send info back to the main thread from easydict import EasyDict as edict # type of dict import numpy as np from pymodaq_plugins_daqmx.hardware.national_instruments.daqmx import DAQmx, ClockSettings, ChangeDetectionSettings, \ diff --git a/src/pymodaq_plugins_moke/daq_viewer_plugins/plugins_0D/daq_0Dviewer_ReadCurrent.py b/src/pymodaq_plugins_moke/daq_viewer_plugins/plugins_0D/daq_0Dviewer_ReadCurrent.py index b45af4a..1453a17 100644 --- a/src/pymodaq_plugins_moke/daq_viewer_plugins/plugins_0D/daq_0Dviewer_ReadCurrent.py +++ b/src/pymodaq_plugins_moke/daq_viewer_plugins/plugins_0D/daq_0Dviewer_ReadCurrent.py @@ -1,10 +1,10 @@ import numpy as np from easydict import EasyDict as edict -from pymodaq.utils.daq_utils import ThreadCommand, getLineInfo +from pymodaq_utils.utils import ThreadCommand, getLineInfo from pymodaq.utils.data import DataFromPlugins -from pymodaq.utils.logger import set_logger, get_module_name +from pymodaq_utils.logger import set_logger, get_module_name from pymodaq.control_modules.viewer_utility_classes import DAQ_Viewer_base, comon_parameters, main -from pymodaq_plugins_daqmx.hardware.national_instruments.daqmx import DAQmx, ClockSettings, AIChannel +from pymodaq_plugins_daqmx.hardware.national_instruments.daqmx import DAQmx, ClockSettings, AIChannel, DAQ_NIDAQ_source from pymodaq_plugins_moke import config logger = set_logger(get_module_name(__file__)) @@ -21,7 +21,8 @@ class DAQ_0DViewer_ReadCurrent(DAQ_Viewer_base): params = comon_parameters+[ {'title': 'Resistance:', 'name': 'resistance', 'type': 'float', 'value': resistor, 'min': 0., 'suffix': 'Ohm'}, {'title': 'AI Channel:', 'name': 'ai_channel', 'type': 'list', - 'values': DAQmx.get_NIDAQ_channels(source_type='Analog_Input'), 'value': f'{device_ai}/{channel_ai}'}, + 'limits': DAQmx.get_NIDAQ_channels(source_type=DAQ_NIDAQ_source.Analog_Input.name), + 'value': f'{device_ai}/{channel_ai}'}, ] hardware_averaging = False live_mode_available = False diff --git a/src/pymodaq_plugins_moke/daq_viewer_plugins/plugins_1D/daq_1Dviewer_MokeMacro.py b/src/pymodaq_plugins_moke/daq_viewer_plugins/plugins_1D/daq_1Dviewer_MokeMacro.py index 18e348c..b86e574 100644 --- a/src/pymodaq_plugins_moke/daq_viewer_plugins/plugins_1D/daq_1Dviewer_MokeMacro.py +++ b/src/pymodaq_plugins_moke/daq_viewer_plugins/plugins_1D/daq_1Dviewer_MokeMacro.py @@ -1,6 +1,6 @@ import numpy as np from easydict import EasyDict as edict -from pymodaq.utils.daq_utils import ThreadCommand, getLineInfo +from pymodaq_utils.utils import ThreadCommand, getLineInfo from pymodaq.utils.data import DataFromPlugins, Axis from pymodaq.control_modules.viewer_utility_classes import DAQ_Viewer_base, comon_parameters, main diff --git a/src/pymodaq_plugins_moke/daq_viewer_plugins/plugins_2D/daq_2Dviewer_MOKEGrabber.py b/src/pymodaq_plugins_moke/daq_viewer_plugins/plugins_2D/daq_2Dviewer_MOKEGrabber.py index c22e08b..505fcca 100644 --- a/src/pymodaq_plugins_moke/daq_viewer_plugins/plugins_2D/daq_2Dviewer_MOKEGrabber.py +++ b/src/pymodaq_plugins_moke/daq_viewer_plugins/plugins_2D/daq_2Dviewer_MOKEGrabber.py @@ -1,7 +1,7 @@ from qtpy import QtWidgets, QtCore -from pymodaq.utils.daq_utils import ThreadCommand +from pymodaq_utils.utils import ThreadCommand from pymodaq.utils.data import DataFromPlugins -from pymodaq.utils.logger import set_logger, get_module_name +from pymodaq_utils.logger import set_logger, get_module_name from pymodaq_plugins_andor.daq_viewer_plugins.plugins_2D.daq_2Dviewer_AndorSCMOS import DAQ_2DViewer_AndorSCMOS, main from time import perf_counter @@ -20,7 +20,6 @@ class DAQ_2DViewer_MOKEGrabber(DAQ_2DViewer_AndorSCMOS): params = DAQ_2DViewer_AndorSCMOS.params + \ [{'title': 'Do substraction:', 'name': 'do_sub', 'type': 'bool', 'value': False}] - def __init__(self, parent=None, params_state=None): super().__init__(parent, params_state) # initialize base class with commom attributes and methods @@ -179,4 +178,4 @@ def stop(self): if __name__ == '__main__': - main(init=False) \ No newline at end of file + main(__file__, init=False) diff --git a/src/pymodaq_plugins_moke/daq_viewer_plugins/plugins_2D/daq_2Dviewer_MOKEMockGrabber.py b/src/pymodaq_plugins_moke/daq_viewer_plugins/plugins_2D/daq_2Dviewer_MOKEMockGrabber.py index c50fff5..5f4c557 100644 --- a/src/pymodaq_plugins_moke/daq_viewer_plugins/plugins_2D/daq_2Dviewer_MOKEMockGrabber.py +++ b/src/pymodaq_plugins_moke/daq_viewer_plugins/plugins_2D/daq_2Dviewer_MOKEMockGrabber.py @@ -1,8 +1,8 @@ from pymodaq.control_modules.viewer_utility_classes import DAQ_Viewer_base, main from easydict import EasyDict as edict -from pymodaq.utils.daq_utils import ThreadCommand, getLineInfo +from pymodaq_utils.utils import ThreadCommand, getLineInfo from pymodaq.utils.data import DataFromPlugins, Axis -from pymodaq.utils.math_utils import my_moment + from pymodaq.control_modules.viewer_utility_classes import comon_parameters from pymodaq_plugins_moke.hardware.mock import MokeMockController diff --git a/src/pymodaq_plugins_moke/daq_viewer_plugins/plugins_ND/__init__.py b/src/pymodaq_plugins_moke/daq_viewer_plugins/plugins_ND/__init__.py deleted file mode 100644 index 0b08c89..0000000 --- a/src/pymodaq_plugins_moke/daq_viewer_plugins/plugins_ND/__init__.py +++ /dev/null @@ -1,13 +0,0 @@ -import importlib -from pathlib import Path -from ... import set_logger -logger = set_logger('move_plugins', add_to_console=False) - -for path in Path(__file__).parent.iterdir(): - try: - if '__init__' not in str(path): - importlib.import_module('.' + path.stem, __package__) - except Exception as e: - logger.warning("{:} plugin couldn't be loaded due to some missing packages or errors: {:}".format(path.stem, str(e))) - pass - diff --git a/src/pymodaq_plugins_moke/mokemicro.py b/src/pymodaq_plugins_moke/extensions/mokemicro.py similarity index 80% rename from src/pymodaq_plugins_moke/mokemicro.py rename to src/pymodaq_plugins_moke/extensions/mokemicro.py index 56a92f4..78d9614 100644 --- a/src/pymodaq_plugins_moke/mokemicro.py +++ b/src/pymodaq_plugins_moke/extensions/mokemicro.py @@ -1,38 +1,54 @@ import sys -from pymodaq.utils.gui_utils import DockArea -from pymodaq.dashboard import DashBoard + from qtpy import QtWidgets, QtCore from pathlib import Path -from pymodaq.utils.parameter import Parameter -from pymodaq.utils.gui_utils.custom_app import CustomApp -from pymodaq.utils.gui_utils.dock import Dock -from pymodaq.utils.gui_utils import layout -from pymodaq.utils import config as config_mod -from pymodaq.utils.daq_utils import ThreadCommand -from pymodaq.utils.logger import set_logger, get_module_name + +from pymodaq_utils.utils import ThreadCommand +from pymodaq_utils.logger import set_logger, get_module_name +from pymodaq_utils.config import Config, ConfigError + + +from pymodaq_gui.parameter import Parameter +from pymodaq_gui.utils.dock import DockArea, Dock +from pymodaq_gui.utils import layout + +from pymodaq.extensions.utils import CustomExt from pymodaq_plugins_moke.hardware import LedControl, ManualActuation, StepsSequencer -from pymodaq.utils.messenger import messagebox -from pymodaq.utils.plotting.data_viewers.viewer1D import Viewer1D +from pymodaq_gui.plotting.data_viewers.viewer1D import Viewer1D -from pymodaq_plugins_moke import config + +from pymodaq_plugins_moke.utils import Config as PluginConfig logger = set_logger(get_module_name(__file__)) +main_config = Config() +plugin_config = PluginConfig() + + +EXTENSION_NAME = 'MicroMOKE' # the name that will be displayed in the extension list in the +# dashboard +CLASS_NAME = 'MicroMOKE' # this should be the name of your class defined below + -class MicroMOKE(CustomApp): - def __init__(self, dockarea: DockArea, dashboard: DashBoard): - super().__init__(dockarea, dashboard) - self.led_control = LedControl(dockarea) +class MicroMOKE(CustomExt): + + params = [] + + def __init__(self, parent: DockArea, dashboard): + super().__init__(parent, dashboard) + + self.led_control = LedControl(parent) + + self.manual_actuation = ManualActuation(parent, + absolute_values=plugin_config('micro', 'actuation', 'absolute_current_values'), + relative_value=plugin_config('micro', 'actuation', 'relative_value')) - self.manual_actuation = ManualActuation(dockarea, - absolute_values=config('micro', 'actuation', 'absolute_current_values'), - relative_value=config('micro', 'actuation', 'relative_value')) self.detector = self.modules_manager.get_mod_from_name('Camera', mod='det') self.current_actuator = self.modules_manager.get_mod_from_name('Current', mod='act') - self.steps_sequencer = StepsSequencer(dockarea, self.current_actuator) + self.steps_sequencer = StepsSequencer(parent, self.current_actuator) self.led_actuator = self.modules_manager.get_mod_from_name('LedDriver', mod='act') self.scan_window = None @@ -126,7 +142,8 @@ def setup_actions(self): self.get_action('do_scan').setEnabled(False) def show_config(self): - config_tree = config_mod.TreeFromToml(config=config) + from pymodaq_gui.utils.widgets.tree_toml import TreeFromToml + config_tree = TreeFromToml(plugin_config) config_tree.show_dialog() def connect_things(self): @@ -232,40 +249,13 @@ def set_led_type(self, led_type=None): def main(): - from pymodaq.utils.daq_utils import get_set_preset_path - from pymodaq.utils.gui_utils import DockArea - from pathlib import Path - from pymodaq.dashboard import DashBoard - - app = QtWidgets.QApplication(sys.argv) - win = QtWidgets.QMainWindow() - area = DockArea() - win.setCentralWidget(area) - win.resize(1000, 500) - win.setWindowTitle('PyMoDAQ Dashboard') - - dashboard = DashBoard(area) - file = Path(get_set_preset_path()).joinpath("microMOKE.xml") - if not file.exists(): - file = Path(get_set_preset_path()).joinpath("MokeMicro_Mock.xml") - if file.exists(): - dashboard.set_preset_mode(file) - mm_area = DockArea() - mm_window = QtWidgets.QMainWindow() - mm_window.setCentralWidget(mm_area) - micromoke = MicroMOKE(mm_area, dashboard) - mm_window.show() - mm_window.setWindowTitle('MicroMOKE') - QtWidgets.QApplication.processEvents() - - - - else: - messagebox(severity='warning', title=f"Impossible to load the DAQ_Scan Module", - text=f"The default file specified in the configuration file does not exists!\n" - f"{file}\n") + from pymodaq_gui.utils.utils import mkQApp + from pymodaq.utils.gui_utils.loader_utils import load_dashboard_with_preset - sys.exit(app.exec_()) + app = mkQApp(EXTENSION_NAME) + preset_file_name = plugin_config('micro', f'preset_for_{CLASS_NAME.lower()}') + dashboard, extension, win = load_dashboard_with_preset(preset_file_name, EXTENSION_NAME) + app.exec() if __name__ == '__main__': diff --git a/src/pymodaq_plugins_moke/hardware/led_control.py b/src/pymodaq_plugins_moke/hardware/led_control.py index 44043b0..58552ce 100644 --- a/src/pymodaq_plugins_moke/hardware/led_control.py +++ b/src/pymodaq_plugins_moke/hardware/led_control.py @@ -1,10 +1,9 @@ import sys - -from pymodaq.utils.gui_utils.dock import Dock, DockArea from qtpy import QtWidgets, QtCore, QtGui -from pymodaq.utils.parameter.pymodaq_ptypes import SliderSpinBox -from pymodaq.utils.gui_utils.widgets import QLED +from pymodaq_gui.utils.dock import Dock, DockArea +from pymodaq_gui.parameter.pymodaq_ptypes import SliderSpinBox +from pymodaq_gui.utils.widgets import QLED from collections import OrderedDict from pathlib import Path diff --git a/src/pymodaq_plugins_moke/hardware/manual_actuation.py b/src/pymodaq_plugins_moke/hardware/manual_actuation.py index cabef86..810b225 100644 --- a/src/pymodaq_plugins_moke/hardware/manual_actuation.py +++ b/src/pymodaq_plugins_moke/hardware/manual_actuation.py @@ -1,7 +1,10 @@ -from pymodaq.utils.gui_utils.custom_app import CustomApp -from pymodaq.utils.gui_utils.dock import Dock, DockArea from qtpy import QtWidgets, QtCore -from pymodaq.utils import gui_utils as gutils + +from pymodaq_gui.utils.custom_app import CustomApp +from pymodaq_gui.utils.dock import Dock, DockArea + + +from pymodaq_gui import utils as gutils from pymodaq.control_modules.move_utility_classes import MoveCommand from pymodaq_plugins_moke import config diff --git a/src/pymodaq_plugins_moke/hardware/mock.py b/src/pymodaq_plugins_moke/hardware/mock.py index 86083a1..c118309 100644 --- a/src/pymodaq_plugins_moke/hardware/mock.py +++ b/src/pymodaq_plugins_moke/hardware/mock.py @@ -1,5 +1,5 @@ import numpy as np -from pymodaq.daq_utils.daq_utils import gauss2D +from pymodaq_utils.math_utils import gauss2D from .koch import image_from_koch diff --git a/src/pymodaq_plugins_moke/hardware/steps_sequence.py b/src/pymodaq_plugins_moke/hardware/steps_sequence.py index e2c66b3..ae7dd85 100644 --- a/src/pymodaq_plugins_moke/hardware/steps_sequence.py +++ b/src/pymodaq_plugins_moke/hardware/steps_sequence.py @@ -1,21 +1,19 @@ from typing import List, TYPE_CHECKING import numpy as np -from pymodaq.utils.gui_utils.custom_app import CustomApp -from pymodaq.utils.gui_utils.dock import Dock, DockArea -from pymodaq.utils.managers.parameter_manager import ParameterManager, Parameter + +from pymodaq_gui.utils.dock import Dock, DockArea +from pymodaq_gui.managers.parameter_manager import ParameterManager, Parameter from qtpy import QtWidgets, QtCore, QtGui from qtpy.QtWidgets import QWidget -from pymodaq.utils import daq_utils as utils +from pymodaq_utils import utils as utils from pymodaq.utils.scanner.scanners._1d_scanners import Scan1DSparse -from pymodaq.utils.parameter import pymodaq_ptypes as ptypes -from pymodaq.utils.parameter import utils as putils -from pymodaq.utils.plotting.data_viewers.viewer1D import Viewer1D +from pymodaq_gui.plotting.data_viewers.viewer1D import Viewer1D from pymodaq.utils.data import DataActuator from pymodaq.control_modules.daq_move import DAQ_Move -from pymodaq.utils.messenger import dialog +from pymodaq_gui.messenger import dialog class StepsSequencer(ParameterManager, QtCore.QObject): diff --git a/src/pymodaq_plugins_moke/resources/config_template.toml b/src/pymodaq_plugins_moke/resources/config_template.toml index 8b100ba..2f3043f 100644 --- a/src/pymodaq_plugins_moke/resources/config_template.toml +++ b/src/pymodaq_plugins_moke/resources/config_template.toml @@ -3,6 +3,7 @@ [micro] + preset_for_micromoke = "microMOKE" [micro.current] device_ao = 'cDAQ1Mod4' diff --git a/src/pymodaq_plugins_moke/utils.py b/src/pymodaq_plugins_moke/utils.py index 1f225ab..4981b95 100644 --- a/src/pymodaq_plugins_moke/utils.py +++ b/src/pymodaq_plugins_moke/utils.py @@ -6,7 +6,7 @@ """ from pathlib import Path -from pymodaq.utils.config import BaseConfig, USER +from pymodaq_utils.config import BaseConfig, USER class Config(BaseConfig):