pymodaq 3.6.13__py3-none-any.whl → 4.0.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of pymodaq might be problematic. Click here for more details.
- pymodaq/__init__.py +13 -6
- pymodaq/control_modules/__init__.py +0 -7
- pymodaq/control_modules/daq_move.py +965 -2
- pymodaq/control_modules/daq_move_ui.py +319 -0
- pymodaq/control_modules/daq_viewer.py +1573 -3
- pymodaq/control_modules/daq_viewer_ui.py +393 -0
- pymodaq/control_modules/mocks.py +51 -0
- pymodaq/control_modules/move_utility_classes.py +709 -8
- pymodaq/control_modules/utils.py +256 -0
- pymodaq/control_modules/viewer_utility_classes.py +663 -6
- pymodaq/daq_utils.py +89 -0
- pymodaq/dashboard.py +91 -72
- pymodaq/examples/custom_app.py +12 -11
- pymodaq/examples/custom_viewer.py +10 -10
- pymodaq/examples/function_plotter.py +16 -13
- pymodaq/examples/nonlinearscanner.py +8 -6
- pymodaq/examples/parameter_ex.py +7 -7
- pymodaq/examples/preset_MockCamera.xml +1 -0
- pymodaq/extensions/__init__.py +16 -0
- pymodaq/extensions/console.py +76 -0
- pymodaq/{daq_logger.py → extensions/daq_logger.py} +115 -65
- pymodaq/extensions/daq_scan.py +1339 -0
- pymodaq/extensions/daq_scan_ui.py +240 -0
- pymodaq/extensions/h5browser.py +23 -0
- pymodaq/{pid → extensions/pid}/__init__.py +4 -2
- pymodaq/{pid → extensions/pid}/daq_move_PID.py +2 -2
- pymodaq/{pid → extensions/pid}/pid_controller.py +48 -36
- pymodaq/{pid → extensions/pid}/utils.py +52 -6
- pymodaq/extensions/utils.py +40 -0
- pymodaq/post_treatment/__init__.py +6 -0
- pymodaq/{daq_analysis → post_treatment/daq_analysis}/daq_analysis_main.py +17 -17
- pymodaq/{daq_measurement → post_treatment/daq_measurement}/daq_measurement_main.py +8 -14
- pymodaq/post_treatment/load_and_plot.py +219 -0
- pymodaq/post_treatment/process_to_scalar.py +263 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/run_all.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/Icon_Library/stop_all.png +0 -0
- pymodaq/resources/QtDesigner_Ressources/QtDesigner_ressources.bat +1 -1
- pymodaq/resources/QtDesigner_Ressources/QtDesigner_ressources.qrc +1 -0
- pymodaq/resources/QtDesigner_Ressources/QtDesigner_ressources_rc.py +109784 -109173
- pymodaq/resources/QtDesigner_Ressources/icons.svg +142 -0
- pymodaq/resources/VERSION +1 -1
- pymodaq/resources/config_template.toml +32 -13
- pymodaq/resources/preset_default.xml +1 -1
- pymodaq/{daq_utils → utils}/Tuto innosetup/script_full_setup.iss +1 -1
- pymodaq/utils/__init__.py +0 -29
- pymodaq/utils/abstract/__init__.py +48 -0
- pymodaq/{daq_utils → utils}/abstract/logger.py +7 -3
- pymodaq/utils/array_manipulation.py +379 -8
- pymodaq/{daq_utils → utils}/calibration_camera.py +6 -6
- pymodaq/{daq_utils → utils}/chrono_timer.py +1 -1
- pymodaq/utils/config.py +448 -0
- pymodaq/utils/conftests.py +5 -0
- pymodaq/utils/daq_utils.py +828 -8
- pymodaq/utils/data.py +1873 -7
- pymodaq/{daq_utils → utils}/db/db_logger/db_logger.py +86 -47
- pymodaq/{daq_utils → utils}/db/db_logger/db_logger_models.py +31 -10
- pymodaq/{daq_utils → utils}/enums.py +12 -7
- pymodaq/utils/exceptions.py +37 -0
- pymodaq/utils/factory.py +82 -0
- pymodaq/{daq_utils → utils}/gui_utils/__init__.py +1 -1
- pymodaq/utils/gui_utils/custom_app.py +129 -0
- pymodaq/utils/gui_utils/file_io.py +66 -0
- pymodaq/{daq_utils → utils}/gui_utils/layout.py +2 -2
- pymodaq/{daq_utils → utils}/gui_utils/utils.py +13 -3
- pymodaq/{daq_utils → utils}/gui_utils/widgets/__init__.py +2 -2
- pymodaq/utils/gui_utils/widgets/label.py +24 -0
- pymodaq/{daq_utils → utils}/gui_utils/widgets/lcd.py +12 -7
- pymodaq/{daq_utils → utils}/gui_utils/widgets/push.py +66 -2
- pymodaq/{daq_utils → utils}/gui_utils/widgets/qled.py +6 -4
- pymodaq/utils/gui_utils/widgets/spinbox.py +24 -0
- pymodaq/{daq_utils → utils}/gui_utils/widgets/table.py +2 -2
- pymodaq/utils/h5modules/__init__.py +1 -0
- pymodaq/{daq_utils/h5backend.py → utils/h5modules/backends.py} +200 -112
- pymodaq/utils/h5modules/browsing.py +683 -0
- pymodaq/utils/h5modules/data_saving.py +839 -0
- pymodaq/utils/h5modules/h5logging.py +110 -0
- pymodaq/utils/h5modules/module_saving.py +350 -0
- pymodaq/utils/h5modules/saving.py +914 -0
- pymodaq/utils/h5modules/utils.py +85 -0
- pymodaq/utils/logger.py +64 -6
- pymodaq/utils/managers/action_manager.py +460 -0
- pymodaq/{daq_utils → utils}/managers/batchscan_manager.py +144 -112
- pymodaq/{daq_utils → utils}/managers/modules_manager.py +188 -114
- pymodaq/{daq_utils → utils}/managers/overshoot_manager.py +3 -3
- pymodaq/utils/managers/parameter_manager.py +110 -0
- pymodaq/{daq_utils → utils}/managers/preset_manager.py +17 -13
- pymodaq/{daq_utils → utils}/managers/preset_manager_utils.py +8 -7
- pymodaq/{daq_utils → utils}/managers/remote_manager.py +7 -6
- pymodaq/{daq_utils → utils}/managers/roi_manager.py +148 -57
- pymodaq/utils/math_utils.py +546 -10
- pymodaq/{daq_utils → utils}/messenger.py +5 -1
- pymodaq/utils/parameter/__init__.py +2 -15
- pymodaq/{daq_utils → utils}/parameter/ioxml.py +12 -6
- pymodaq/{daq_utils → utils}/parameter/pymodaq_ptypes/__init__.py +1 -3
- pymodaq/{daq_utils → utils}/parameter/pymodaq_ptypes/filedir.py +1 -1
- pymodaq/{daq_utils → utils}/parameter/pymodaq_ptypes/itemselect.py +3 -0
- pymodaq/{daq_utils → utils}/parameter/pymodaq_ptypes/led.py +1 -1
- pymodaq/utils/parameter/pymodaq_ptypes/pixmap.py +161 -0
- pymodaq/{daq_utils → utils}/parameter/pymodaq_ptypes/slide.py +1 -1
- pymodaq/{daq_utils → utils}/parameter/pymodaq_ptypes/table.py +1 -1
- pymodaq/utils/parameter/utils.py +206 -11
- pymodaq/utils/plotting/data_viewers/__init__.py +6 -0
- pymodaq/utils/plotting/data_viewers/viewer.py +393 -0
- pymodaq/utils/plotting/data_viewers/viewer0D.py +251 -0
- pymodaq/utils/plotting/data_viewers/viewer1D.py +574 -0
- pymodaq/{daq_utils → utils}/plotting/data_viewers/viewer1Dbasic.py +8 -3
- pymodaq/{daq_utils → utils}/plotting/data_viewers/viewer2D.py +292 -357
- pymodaq/{daq_utils → utils}/plotting/data_viewers/viewer2D_basic.py +58 -75
- pymodaq/utils/plotting/data_viewers/viewerND.py +738 -0
- pymodaq/{daq_utils → utils}/plotting/gant_chart.py +2 -2
- pymodaq/{daq_utils → utils}/plotting/items/axis_scaled.py +4 -2
- pymodaq/{daq_utils → utils}/plotting/items/image.py +8 -6
- pymodaq/utils/plotting/navigator.py +355 -0
- pymodaq/utils/plotting/scan_selector.py +480 -0
- pymodaq/utils/plotting/utils/axes_viewer.py +88 -0
- pymodaq/utils/plotting/utils/filter.py +538 -0
- pymodaq/utils/plotting/utils/lineout.py +224 -0
- pymodaq/{daq_utils → utils}/plotting/utils/plot_utils.py +196 -84
- pymodaq/{daq_utils → utils}/plotting/utils/signalND.py +21 -13
- pymodaq/utils/plotting/widgets.py +76 -0
- pymodaq/utils/scanner/__init__.py +10 -0
- pymodaq/utils/scanner/scan_factory.py +204 -0
- pymodaq/utils/scanner/scanner.py +271 -0
- pymodaq/utils/scanner/scanners/_1d_scanners.py +117 -0
- pymodaq/utils/scanner/scanners/_2d_scanners.py +293 -0
- pymodaq/utils/scanner/scanners/sequential.py +192 -0
- pymodaq/utils/scanner/scanners/tabular.py +294 -0
- pymodaq/utils/scanner/utils.py +83 -0
- pymodaq/utils/slicing.py +47 -0
- pymodaq/utils/svg/__init__.py +6 -0
- pymodaq/utils/svg/svg_renderer.py +20 -0
- pymodaq/utils/svg/svg_view.py +35 -0
- pymodaq/utils/svg/svg_viewer2D.py +51 -0
- pymodaq/{daq_utils → utils}/tcp_server_client.py +36 -37
- pymodaq/{daq_utils → utils}/tree_layout/tree_layout_main.py +50 -35
- pymodaq/utils/units.py +216 -0
- pymodaq-4.0.1.dist-info/METADATA +159 -0
- {pymodaq-3.6.13.dist-info → pymodaq-4.0.1.dist-info}/RECORD +167 -170
- {pymodaq-3.6.13.dist-info → pymodaq-4.0.1.dist-info}/WHEEL +1 -2
- pymodaq-4.0.1.dist-info/entry_points.txt +8 -0
- pymodaq/daq_move/daq_move_gui.py +0 -279
- pymodaq/daq_move/daq_move_gui.ui +0 -534
- pymodaq/daq_move/daq_move_main.py +0 -1042
- pymodaq/daq_move/process_from_QtDesigner_DAQ_Move_GUI.bat +0 -2
- pymodaq/daq_move/utility_classes.py +0 -686
- pymodaq/daq_scan.py +0 -2160
- pymodaq/daq_utils/array_manipulation.py +0 -386
- pymodaq/daq_utils/config.py +0 -273
- pymodaq/daq_utils/conftests.py +0 -7
- pymodaq/daq_utils/custom_parameter_tree.py +0 -9
- pymodaq/daq_utils/daq_enums.py +0 -133
- pymodaq/daq_utils/daq_utils.py +0 -1402
- pymodaq/daq_utils/exceptions.py +0 -71
- pymodaq/daq_utils/gui_utils/custom_app.py +0 -103
- pymodaq/daq_utils/gui_utils/file_io.py +0 -75
- pymodaq/daq_utils/gui_utils/widgets/spinbox.py +0 -9
- pymodaq/daq_utils/h5exporter_hyperspy.py +0 -115
- pymodaq/daq_utils/h5exporters.py +0 -242
- pymodaq/daq_utils/h5modules.py +0 -1559
- pymodaq/daq_utils/h5utils.py +0 -241
- pymodaq/daq_utils/managers/action_manager.py +0 -236
- pymodaq/daq_utils/managers/parameter_manager.py +0 -57
- pymodaq/daq_utils/math_utils.py +0 -705
- pymodaq/daq_utils/parameter/__init__.py +0 -1
- pymodaq/daq_utils/parameter/oldpymodaq_ptypes.py +0 -1626
- pymodaq/daq_utils/parameter/pymodaq_ptypes/pixmap.py +0 -85
- pymodaq/daq_utils/parameter/utils.py +0 -136
- pymodaq/daq_utils/plotting/data_viewers/__init__.py +0 -0
- pymodaq/daq_utils/plotting/data_viewers/process_from_QtDesigner_0DViewer_GUI.bat +0 -2
- pymodaq/daq_utils/plotting/data_viewers/viewer0D.py +0 -204
- pymodaq/daq_utils/plotting/data_viewers/viewer0D_GUI.py +0 -89
- pymodaq/daq_utils/plotting/data_viewers/viewer0D_GUI.ui +0 -131
- pymodaq/daq_utils/plotting/data_viewers/viewer1D.py +0 -781
- pymodaq/daq_utils/plotting/data_viewers/viewerND.py +0 -894
- pymodaq/daq_utils/plotting/data_viewers/viewerbase.py +0 -64
- pymodaq/daq_utils/plotting/items/__init__.py +0 -0
- pymodaq/daq_utils/plotting/navigator.py +0 -500
- pymodaq/daq_utils/plotting/scan_selector.py +0 -289
- pymodaq/daq_utils/plotting/utils/__init__.py +0 -0
- pymodaq/daq_utils/plotting/utils/filter.py +0 -236
- pymodaq/daq_utils/plotting/viewer0D/__init__.py +0 -0
- pymodaq/daq_utils/plotting/viewer0D/viewer0D_main.py +0 -4
- pymodaq/daq_utils/plotting/viewer1D/__init__.py +0 -0
- pymodaq/daq_utils/plotting/viewer1D/viewer1D_main.py +0 -4
- pymodaq/daq_utils/plotting/viewer1D/viewer1Dbasic.py +0 -4
- pymodaq/daq_utils/plotting/viewer2D/viewer_2D_basic.py +0 -4
- pymodaq/daq_utils/plotting/viewer2D/viewer_2D_main.py +0 -4
- pymodaq/daq_utils/plotting/viewerND/__init__.py +0 -0
- pymodaq/daq_utils/plotting/viewerND/viewerND_main.py +0 -4
- pymodaq/daq_utils/scanner.py +0 -1289
- pymodaq/daq_utils/tree_layout/__init__.py +0 -0
- pymodaq/daq_viewer/__init__.py +0 -0
- pymodaq/daq_viewer/daq_gui_settings.py +0 -237
- pymodaq/daq_viewer/daq_gui_settings.ui +0 -441
- pymodaq/daq_viewer/daq_viewer_main.py +0 -2225
- pymodaq/daq_viewer/process_from_QtDesigner_DAQ_GUI_settings.bat +0 -2
- pymodaq/daq_viewer/utility_classes.py +0 -673
- pymodaq/examples/logger_image/__init__.py +0 -0
- pymodaq/examples/logger_image/logger_displayer.py +0 -121
- pymodaq/examples/logger_image/setup.svg +0 -3119
- pymodaq/examples/logger_image/setup_svg.py +0 -114
- pymodaq/h5browser.py +0 -39
- pymodaq/utils/scanner.py +0 -15
- pymodaq-3.6.13.dist-info/METADATA +0 -39
- pymodaq-3.6.13.dist-info/entry_points.txt +0 -8
- pymodaq-3.6.13.dist-info/top_level.txt +0 -1
- /pymodaq/{daq_analysis → post_treatment/daq_analysis}/__init__.py +0 -0
- /pymodaq/{daq_measurement → post_treatment/daq_measurement}/__init__.py +0 -0
- /pymodaq/{daq_measurement → post_treatment/daq_measurement}/daq_measurement_GUI.py +0 -0
- /pymodaq/{daq_measurement → post_treatment/daq_measurement}/daq_measurement_GUI.ui +0 -0
- /pymodaq/{daq_measurement → post_treatment/daq_measurement}/process_from_QtDesigner_DAQ_Measurement_GUI.bat +0 -0
- /pymodaq/{daq_utils → utils}/Tuto innosetup/Tuto innosetup.odt +0 -0
- /pymodaq/{daq_utils → utils}/Tuto innosetup/Tuto innosetup.pdf +0 -0
- /pymodaq/{daq_move → utils/db}/__init__.py +0 -0
- /pymodaq/{daq_utils → utils/db/db_logger}/__init__.py +0 -0
- /pymodaq/{daq_utils → utils}/gui_utils/dock.py +0 -0
- /pymodaq/{daq_utils → utils}/gui_utils/list_picker.py +0 -0
- /pymodaq/{daq_utils/abstract → utils/managers}/__init__.py +0 -0
- /pymodaq/{daq_utils → utils}/parameter/pymodaq_ptypes/bool.py +0 -0
- /pymodaq/{daq_utils → utils}/parameter/pymodaq_ptypes/date.py +0 -0
- /pymodaq/{daq_utils → utils}/parameter/pymodaq_ptypes/list.py +0 -0
- /pymodaq/{daq_utils → utils}/parameter/pymodaq_ptypes/numeric.py +0 -0
- /pymodaq/{daq_utils → utils}/parameter/pymodaq_ptypes/tableview.py +0 -0
- /pymodaq/{daq_utils → utils}/parameter/pymodaq_ptypes/text.py +0 -0
- /pymodaq/{daq_utils/db → utils/plotting}/__init__.py +0 -0
- /pymodaq/{daq_utils → utils}/plotting/image_viewer.py +0 -0
- /pymodaq/{daq_utils/db/db_logger → utils/plotting/items}/__init__.py +0 -0
- /pymodaq/{daq_utils → utils}/plotting/items/crosshair.py +0 -0
- /pymodaq/{daq_utils/managers → utils/plotting/utils}/__init__.py +0 -0
- /pymodaq/{daq_utils → utils}/qvariant.py +0 -0
- /pymodaq/{daq_utils/plotting/viewer2D → utils/scanner/scanners}/__init__.py +0 -0
- /pymodaq/{daq_utils/plotting → utils/tree_layout}/__init__.py +0 -0
- {pymodaq-3.6.13.dist-info → pymodaq-4.0.1.dist-info/licenses}/LICENSE +0 -0
pymodaq/daq_utils.py
ADDED
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
"""
|
|
3
|
+
Created the 27/10/2022
|
|
4
|
+
|
|
5
|
+
@author: Sebastien Weber
|
|
6
|
+
"""
|
|
7
|
+
import sys
|
|
8
|
+
from importlib import import_module
|
|
9
|
+
|
|
10
|
+
from pymodaq.utils.messenger import deprecation_msg
|
|
11
|
+
|
|
12
|
+
deprecation_msg('Importing from pymodaq.daq_utils is deprecated, use pymodaq.utils.'
|
|
13
|
+
'It will cause an error in version 4.1.0', 3)
|
|
14
|
+
# import_module('.utils', 'pymodaq')
|
|
15
|
+
# sys.modules['pymodaq.daq_utils'] = import_module('.utils', 'pymodaq')
|
|
16
|
+
# sys.modules['pymodaq.daq_utils.abstract.logger'] = import_module('.abstract.logger', 'pymodaq.utils')
|
|
17
|
+
# sys.modules['pymodaq.daq_utils.array_manipulation'] = import_module('.array_manipulation', 'pymodaq.utils')
|
|
18
|
+
# sys.modules['pymodaq.daq_utils.calibration_camera'] = import_module('.calibration_camera', 'pymodaq.utils')
|
|
19
|
+
# sys.modules['pymodaq.daq_utils.chrono_timer'] = import_module('.chrono_timer', 'pymodaq.utils')
|
|
20
|
+
# sys.modules['pymodaq.daq_utils.config'] = import_module('.config', 'pymodaq.utils')
|
|
21
|
+
# sys.modules['pymodaq.daq_utils.conftests'] = import_module('.conftests', 'pymodaq.utils')
|
|
22
|
+
# sys.modules['pymodaq.daq_utils.daq_enums'] = import_module('.enums', 'pymodaq.utils')
|
|
23
|
+
# sys.modules['pymodaq.daq_utils.daq_utils'] = import_module('.daq_utils', 'pymodaq.utils')
|
|
24
|
+
# try:
|
|
25
|
+
# import sqlalchemy
|
|
26
|
+
# sys.modules['pymodaq.daq_utils.db.db_logger.db_logger'] = import_module('.db.db_logger.db_logger', 'pymodaq.utils')
|
|
27
|
+
# sys.modules['pymodaq.daq_utils.db.db_logger.db_logger_models'] = import_module('.db.db_logger.db_logger_models', 'pymodaq.utils')
|
|
28
|
+
# except ModuleNotFoundError:
|
|
29
|
+
# pass
|
|
30
|
+
# sys.modules['pymodaq.daq_utils.exceptions'] = import_module('.exceptions', 'pymodaq.utils')
|
|
31
|
+
# sys.modules['pymodaq.daq_utils.gui_utils.custom_app'] = import_module('.gui_utils.custom_app', 'pymodaq.utils')
|
|
32
|
+
# sys.modules['pymodaq.daq_utils.gui_utils.dock'] = import_module('.gui_utils.dock', 'pymodaq.utils')
|
|
33
|
+
# sys.modules['pymodaq.daq_utils.gui_utils.file_io'] = import_module('.gui_utils.file_io', 'pymodaq.utils')
|
|
34
|
+
# sys.modules['pymodaq.daq_utils.gui_utils.layout'] = import_module('.gui_utils.layout', 'pymodaq.utils')
|
|
35
|
+
# sys.modules['pymodaq.daq_utils.gui_utils.list_picker'] = import_module('.gui_utils.list_picker', 'pymodaq.utils')
|
|
36
|
+
# sys.modules['pymodaq.daq_utils.gui_utils.utils'] = import_module('.gui_utils.utils', 'pymodaq.utils')
|
|
37
|
+
# sys.modules['pymodaq.daq_utils.gui_utils.widgets.label'] = import_module('.gui_utils.widgets.label', 'pymodaq.utils')
|
|
38
|
+
# sys.modules['pymodaq.daq_utils.gui_utils.widgets.lcd'] = import_module('.gui_utils.widgets.lcd', 'pymodaq.utils')
|
|
39
|
+
# sys.modules['pymodaq.daq_utils.gui_utils.widgets.push'] = import_module('.gui_utils.widgets.push', 'pymodaq.utils')
|
|
40
|
+
# sys.modules['pymodaq.daq_utils.gui_utils.widgets.qled'] = import_module('.gui_utils.widgets.qled', 'pymodaq.utils')
|
|
41
|
+
# sys.modules['pymodaq.daq_utils.gui_utils.widgets.spinbox'] = import_module('.gui_utils.widgets.spinbox', 'pymodaq.utils')
|
|
42
|
+
# sys.modules['pymodaq.daq_utils.gui_utils.widgets.table'] = import_module('.gui_utils.widgets.table', 'pymodaq.utils')
|
|
43
|
+
# sys.modules['pymodaq.daq_utils.h5modules'] = import_module('.h5modules', 'pymodaq.utils')
|
|
44
|
+
# sys.modules['pymodaq.daq_utils.managers.action_manager'] = import_module('.managers.action_manager', 'pymodaq.utils')
|
|
45
|
+
# sys.modules['pymodaq.daq_utils.managers.batchscan_manager'] = import_module('.managers.batchscan_manager', 'pymodaq.utils')
|
|
46
|
+
# sys.modules['pymodaq.daq_utils.managers.modules_manager'] = import_module('.managers.modules_manager', 'pymodaq.utils')
|
|
47
|
+
# sys.modules['pymodaq.daq_utils.managers.overshoot_manager'] = import_module('.managers.overshoot_manager', 'pymodaq.utils')
|
|
48
|
+
# sys.modules['pymodaq.daq_utils.managers.parameter_manager'] = import_module('.managers.parameter_manager', 'pymodaq.utils')
|
|
49
|
+
# sys.modules['pymodaq.daq_utils.managers.preset_manager'] = import_module('.managers.preset_manager', 'pymodaq.utils')
|
|
50
|
+
# sys.modules['pymodaq.daq_utils.managers.preset_manager_utils'] = import_module('.managers.preset_manager_utils', 'pymodaq.utils')
|
|
51
|
+
# sys.modules['pymodaq.daq_utils.managers.remote_manager'] = import_module('.managers.remote_manager', 'pymodaq.utils')
|
|
52
|
+
# sys.modules['pymodaq.daq_utils.managers.roi_manager'] = import_module('.managers.roi_manager', 'pymodaq.utils')
|
|
53
|
+
# sys.modules['pymodaq.daq_utils.math_utils'] = import_module('.math_utils', 'pymodaq.utils')
|
|
54
|
+
# sys.modules['pymodaq.daq_utils.messenger'] = import_module('.messenger', 'pymodaq.utils')
|
|
55
|
+
# sys.modules['pymodaq.daq_utils.parameter.ioxml'] = import_module('.parameter.ioxml', 'pymodaq.utils')
|
|
56
|
+
# sys.modules['pymodaq.daq_utils.parameter.pymodaq_ptypes.bool'] = import_module('.parameter.pymodaq_ptypes.bool', 'pymodaq.utils')
|
|
57
|
+
# sys.modules['pymodaq.daq_utils.parameter.pymodaq_ptypes.date'] = import_module('.parameter.pymodaq_ptypes.date', 'pymodaq.utils')
|
|
58
|
+
# sys.modules['pymodaq.daq_utils.parameter.pymodaq_ptypes.filedir'] = import_module('.parameter.pymodaq_ptypes.filedir', 'pymodaq.utils')
|
|
59
|
+
# sys.modules['pymodaq.daq_utils.parameter.pymodaq_ptypes.itemselect'] = import_module('.parameter.pymodaq_ptypes.itemselect', 'pymodaq.utils')
|
|
60
|
+
# sys.modules['pymodaq.daq_utils.parameter.pymodaq_ptypes.led'] = import_module('.parameter.pymodaq_ptypes.led', 'pymodaq.utils')
|
|
61
|
+
# sys.modules['pymodaq.daq_utils.parameter.pymodaq_ptypes.list'] = import_module('.parameter.pymodaq_ptypes.list', 'pymodaq.utils')
|
|
62
|
+
# sys.modules['pymodaq.daq_utils.parameter.pymodaq_ptypes.numeric'] = import_module('.parameter.pymodaq_ptypes.numeric', 'pymodaq.utils')
|
|
63
|
+
# sys.modules['pymodaq.daq_utils.parameter.pymodaq_ptypes.pixmap'] = import_module('.parameter.pymodaq_ptypes.pixmap', 'pymodaq.utils')
|
|
64
|
+
# sys.modules['pymodaq.daq_utils.parameter.pymodaq_ptypes.slide'] = import_module('.parameter.pymodaq_ptypes.slide', 'pymodaq.utils')
|
|
65
|
+
# sys.modules['pymodaq.daq_utils.parameter.pymodaq_ptypes.table'] = import_module('.parameter.pymodaq_ptypes.table', 'pymodaq.utils')
|
|
66
|
+
# import_module('.parameter.pymodaq_ptypes.tableview', 'pymodaq.utils')
|
|
67
|
+
# sys.modules['pymodaq.daq_utils.parameter.pymodaq_ptypes.tableview'] = import_module('.parameter.pymodaq_ptypes.tableview', 'pymodaq.utils')
|
|
68
|
+
# sys.modules['pymodaq.daq_utils.parameter.pymodaq_ptypes.text'] = import_module('.parameter.pymodaq_ptypes.text', 'pymodaq.utils')
|
|
69
|
+
# sys.modules['pymodaq.daq_utils.parameter.utils'] = import_module('.parameter.utils', 'pymodaq.utils')
|
|
70
|
+
# sys.modules['pymodaq.daq_utils.plotting.data_viewers.viewer0D'] = import_module('.plotting.data_viewers.viewer0D', 'pymodaq.utils')
|
|
71
|
+
# sys.modules['pymodaq.daq_utils.plotting.data_viewers.viewer1D'] = import_module('.plotting.data_viewers.viewer1D', 'pymodaq.utils')
|
|
72
|
+
# sys.modules['pymodaq.daq_utils.plotting.data_viewers.viewer1Dbasic'] = import_module('.plotting.data_viewers.viewer1Dbasic', 'pymodaq.utils')
|
|
73
|
+
# sys.modules['pymodaq.daq_utils.plotting.data_viewers.viewer2D'] = import_module('.plotting.data_viewers.viewer2D', 'pymodaq.utils')
|
|
74
|
+
# sys.modules['pymodaq.daq_utils.plotting.data_viewers.viewer2D_basic'] = import_module('.plotting.data_viewers.viewer2D_basic', 'pymodaq.utils')
|
|
75
|
+
# sys.modules['pymodaq.daq_utils.plotting.data_viewers.viewerbase'] = import_module('.plotting.data_viewers.viewer', 'pymodaq.utils')
|
|
76
|
+
# sys.modules['pymodaq.daq_utils.plotting.data_viewers.viewerND'] = import_module('.plotting.data_viewers.viewerND', 'pymodaq.utils')
|
|
77
|
+
# sys.modules['pymodaq.daq_utils.plotting.image_viewer'] = import_module('.plotting.image_viewer', 'pymodaq.utils')
|
|
78
|
+
# sys.modules['pymodaq.daq_utils.plotting.items.axis_scaled'] = import_module('.plotting.items.axis_scaled', 'pymodaq.utils')
|
|
79
|
+
# sys.modules['pymodaq.daq_utils.plotting.items.crosshair'] = import_module('.plotting.items.crosshair', 'pymodaq.utils')
|
|
80
|
+
# sys.modules['pymodaq.daq_utils.plotting.items.image'] = import_module('.plotting.items.image', 'pymodaq.utils')
|
|
81
|
+
# sys.modules['pymodaq.daq_utils.plotting.navigator'] = import_module('.plotting.navigator', 'pymodaq.utils')
|
|
82
|
+
# sys.modules['pymodaq.daq_utils.plotting.scan_selector'] = import_module('.plotting.scan_selector', 'pymodaq.utils')
|
|
83
|
+
# sys.modules['pymodaq.daq_utils.plotting.utils.filter'] = import_module('.plotting.utils.filter', 'pymodaq.utils')
|
|
84
|
+
# sys.modules['pymodaq.daq_utils.plotting.utils.plot_utils'] = import_module('.plotting.utils.plot_utils', 'pymodaq.utils')
|
|
85
|
+
# sys.modules['pymodaq.daq_utils.plotting.utils.signalND'] = import_module('.plotting.utils.signalND', 'pymodaq.utils')
|
|
86
|
+
# sys.modules['pymodaq.daq_utils.qvariant'] = import_module('.qvariant', 'pymodaq.utils')
|
|
87
|
+
# sys.modules['pymodaq.daq_utils.scanner'] = import_module('.scanner', 'pymodaq.utils')
|
|
88
|
+
# sys.modules['pymodaq.daq_utils.tcp_server_client'] = import_module('.tcp_server_client', 'pymodaq.utils')
|
|
89
|
+
# sys.modules['pymodaq.daq_utils.tree_layout.tree_layout_main'] = import_module('.tree_layout.tree_layout_main', 'pymodaq.utils')
|
pymodaq/dashboard.py
CHANGED
|
@@ -4,42 +4,41 @@
|
|
|
4
4
|
import sys
|
|
5
5
|
import datetime
|
|
6
6
|
import subprocess
|
|
7
|
-
import pickle
|
|
8
7
|
import logging
|
|
9
8
|
from pathlib import Path
|
|
10
9
|
from importlib import import_module
|
|
11
10
|
from packaging import version as version_mod
|
|
12
11
|
from pyqtgraph.parametertree import Parameter, ParameterTree
|
|
13
12
|
from qtpy import QtGui, QtWidgets, QtCore
|
|
14
|
-
from qtpy.QtCore import Qt, QObject, Slot, QThread, Signal
|
|
13
|
+
from qtpy.QtCore import Qt, QObject, Slot, QThread, Signal
|
|
15
14
|
from time import perf_counter
|
|
15
|
+
import numpy as np
|
|
16
|
+
|
|
17
|
+
from pymodaq.utils.logger import set_logger, get_module_name
|
|
18
|
+
from pymodaq.utils.gui_utils import DockArea, Dock, select_file
|
|
19
|
+
import pymodaq.utils.gui_utils.layout as layout_mod
|
|
20
|
+
from pymodaq.utils.messenger import messagebox
|
|
21
|
+
from pymodaq.utils.parameter import utils as putils
|
|
22
|
+
from pymodaq.utils import daq_utils as utils
|
|
23
|
+
from pymodaq.utils.managers.modules_manager import ModulesManager
|
|
24
|
+
from pymodaq.utils.daq_utils import get_version
|
|
25
|
+
from pymodaq.utils.managers.preset_manager import PresetManager
|
|
26
|
+
from pymodaq.utils.managers.overshoot_manager import OvershootManager
|
|
27
|
+
from pymodaq.utils.managers.remote_manager import RemoteManager
|
|
28
|
+
from pymodaq.utils.managers.roi_manager import ROISaver
|
|
29
|
+
from pymodaq.utils.exceptions import DetectorError, ActuatorError
|
|
30
|
+
from pymodaq.utils import config as configmod
|
|
31
|
+
|
|
32
|
+
from pymodaq.control_modules.daq_move import DAQ_Move
|
|
33
|
+
from pymodaq.control_modules.daq_viewer import DAQ_Viewer
|
|
34
|
+
|
|
35
|
+
from pymodaq import extensions as extmod
|
|
16
36
|
|
|
17
|
-
from pymodaq.daq_utils.gui_utils import DockArea, Dock, select_file
|
|
18
|
-
import pymodaq.daq_utils.gui_utils.layout as layout_mod
|
|
19
|
-
from pymodaq.daq_utils.messenger import messagebox
|
|
20
|
-
from pymodaq.daq_utils.parameter import utils as putils
|
|
21
|
-
import pymodaq.daq_utils.parameter.pymodaq_ptypes as ptypes # to be placed after importing Parameter
|
|
22
|
-
from pymodaq.daq_utils import daq_utils as utils
|
|
23
|
-
from pymodaq.daq_utils.managers.modules_manager import ModulesManager
|
|
24
|
-
from pymodaq.daq_utils.daq_utils import get_version
|
|
25
|
-
from pymodaq.daq_utils.managers.preset_manager import PresetManager
|
|
26
|
-
from pymodaq.daq_utils.managers.overshoot_manager import OvershootManager
|
|
27
|
-
from pymodaq.daq_utils.managers.remote_manager import RemoteManager
|
|
28
|
-
from pymodaq.daq_utils.managers.roi_manager import ROISaver
|
|
29
|
-
from pymodaq.daq_utils.exceptions import DetectorError, ActuatorError
|
|
30
|
-
from pymodaq.daq_utils import config as configmod
|
|
31
|
-
|
|
32
|
-
from pymodaq.daq_move.daq_move_main import DAQ_Move
|
|
33
|
-
from pymodaq.daq_viewer.daq_viewer_main import DAQ_Viewer
|
|
34
|
-
|
|
35
|
-
from pymodaq.daq_scan import DAQ_Scan
|
|
36
|
-
from pymodaq.daq_logger import DAQ_Logger
|
|
37
|
-
from pymodaq.pid.pid_controller import DAQ_PID
|
|
38
37
|
from pymodaq_plugin_manager.manager import PluginManager
|
|
39
38
|
from pymodaq_plugin_manager.validate import get_pypi_pymodaq
|
|
40
39
|
|
|
41
40
|
|
|
42
|
-
logger =
|
|
41
|
+
logger = set_logger(get_module_name(__file__))
|
|
43
42
|
|
|
44
43
|
config = configmod.Config()
|
|
45
44
|
|
|
@@ -52,7 +51,7 @@ overshoot_path = configmod.get_set_overshoot_path()
|
|
|
52
51
|
roi_path = configmod.get_set_roi_path()
|
|
53
52
|
remote_path = configmod.get_set_remote_path()
|
|
54
53
|
|
|
55
|
-
extensions =
|
|
54
|
+
extensions = extmod.get_extensions()
|
|
56
55
|
|
|
57
56
|
|
|
58
57
|
class DashBoard(QObject):
|
|
@@ -94,7 +93,7 @@ class DashBoard(QObject):
|
|
|
94
93
|
self.splash_sc = QtWidgets.QSplashScreen(splash, Qt.WindowStaysOnTopHint)
|
|
95
94
|
self.overshoot_manager = None
|
|
96
95
|
self.preset_manager = None
|
|
97
|
-
self.roi_saver = None
|
|
96
|
+
self.roi_saver: ROISaver = None
|
|
98
97
|
|
|
99
98
|
self.remote_timer = QtCore.QTimer()
|
|
100
99
|
self.remote_manager = None
|
|
@@ -102,7 +101,7 @@ class DashBoard(QObject):
|
|
|
102
101
|
self.joysticks = dict([])
|
|
103
102
|
self.ispygame_init = False
|
|
104
103
|
|
|
105
|
-
self.modules_manager
|
|
104
|
+
self.modules_manager = None
|
|
106
105
|
|
|
107
106
|
self.overshoot = False
|
|
108
107
|
self.preset_file = None
|
|
@@ -124,7 +123,6 @@ class DashBoard(QObject):
|
|
|
124
123
|
self.extra_params = params
|
|
125
124
|
self.preset_manager = PresetManager(path=self.preset_path, extra_params=params, param_options=param_options)
|
|
126
125
|
|
|
127
|
-
@Slot(str)
|
|
128
126
|
def add_status(self, txt):
|
|
129
127
|
"""
|
|
130
128
|
Add the QListWisgetItem initialized with txt informations to the User Interface logger_list and to the save_parameters.logger array.
|
|
@@ -171,18 +169,18 @@ class DashBoard(QObject):
|
|
|
171
169
|
win = QtWidgets.QMainWindow()
|
|
172
170
|
area = DockArea()
|
|
173
171
|
win.setCentralWidget(area)
|
|
174
|
-
self.scan_module =
|
|
175
|
-
self.extensions['
|
|
172
|
+
self.scan_module = extmod.DAQScan(dockarea=area, dashboard=self)
|
|
173
|
+
self.extensions['DAQScan'] = self.scan_module
|
|
176
174
|
self.scan_module.status_signal.connect(self.add_status)
|
|
177
175
|
win.show()
|
|
178
176
|
return self.scan_module
|
|
179
177
|
|
|
180
|
-
def load_log_module(self, win=None)
|
|
178
|
+
def load_log_module(self, win=None):
|
|
181
179
|
if win is None:
|
|
182
180
|
win = QtWidgets.QMainWindow()
|
|
183
181
|
area = DockArea()
|
|
184
182
|
win.setCentralWidget(area)
|
|
185
|
-
self.log_module = DAQ_Logger(dockarea=area, dashboard=self)
|
|
183
|
+
self.log_module = extmod.DAQ_Logger(dockarea=area, dashboard=self)
|
|
186
184
|
self.extensions['DAQ_Logger'] = self.log_module
|
|
187
185
|
self.log_module.status_signal.connect(self.add_status)
|
|
188
186
|
win.show()
|
|
@@ -196,12 +194,25 @@ class DashBoard(QObject):
|
|
|
196
194
|
dockarea = DockArea()
|
|
197
195
|
self.pid_window.setCentralWidget(dockarea)
|
|
198
196
|
self.pid_window.setWindowTitle('PID Controller')
|
|
199
|
-
self.pid_module = DAQ_PID(dockarea=dockarea)
|
|
197
|
+
self.pid_module = extmod.DAQ_PID(dockarea=dockarea)
|
|
200
198
|
self.pid_module.set_module_manager(self.detector_modules, self.actuators_modules)
|
|
201
199
|
self.extensions['DAQ_PID'] = self.pid_module
|
|
202
200
|
self.pid_window.show()
|
|
203
201
|
return self.pid_module
|
|
204
202
|
|
|
203
|
+
def load_console(self):
|
|
204
|
+
dock_console = Dock('QTConsole')
|
|
205
|
+
self.dockarea.addDock(dock_console, 'bottom')
|
|
206
|
+
qtconsole = extmod.QtConsole(style_sheet=config('style', 'syntax_highlighting'),
|
|
207
|
+
syntax_style=config('style', 'syntax_highlighting'),
|
|
208
|
+
custom_banner=extmod.console.BANNER)
|
|
209
|
+
dock_console.addWidget(qtconsole)
|
|
210
|
+
self.extensions['qtconsole'] = qtconsole
|
|
211
|
+
|
|
212
|
+
qtconsole.push_variables(dict(dashboard=self, mods=self.modules_manager, np=np))
|
|
213
|
+
|
|
214
|
+
return qtconsole
|
|
215
|
+
|
|
205
216
|
def load_extensions_module(self, ext):
|
|
206
217
|
self.extension_windows.append(QtWidgets.QMainWindow())
|
|
207
218
|
area = DockArea()
|
|
@@ -316,6 +327,8 @@ class DashBoard(QObject):
|
|
|
316
327
|
action_log.triggered.connect(lambda: self.load_log_module())
|
|
317
328
|
action_pid = self.actions_menu.addAction('PID module')
|
|
318
329
|
action_pid.triggered.connect(lambda: self.load_pid_module())
|
|
330
|
+
action_console = self.actions_menu.addAction('IPython Console')
|
|
331
|
+
action_console.triggered.connect(lambda: self.load_console())
|
|
319
332
|
|
|
320
333
|
extensions_actions = []
|
|
321
334
|
for ext in extensions:
|
|
@@ -563,13 +576,13 @@ class DashBoard(QObject):
|
|
|
563
576
|
move_forms.append(QtWidgets.QWidget())
|
|
564
577
|
mov_mod_tmp = DAQ_Move(move_forms[-1], plug_name)
|
|
565
578
|
|
|
566
|
-
mov_mod_tmp.
|
|
567
|
-
mov_mod_tmp.ui.Quit_pb.setEnabled(False)
|
|
579
|
+
mov_mod_tmp.actuator = plug_type
|
|
568
580
|
QtWidgets.QApplication.processEvents()
|
|
581
|
+
mov_mod_tmp.manage_ui_actions('quit', 'setEnabled', False)
|
|
569
582
|
|
|
570
583
|
if plug_settings is not None:
|
|
571
584
|
try:
|
|
572
|
-
|
|
585
|
+
putils.set_param_from_param(mov_mod_tmp.settings, plug_settings)
|
|
573
586
|
except KeyError as e:
|
|
574
587
|
mssg = f'Could not set this setting: {str(e)}\n' \
|
|
575
588
|
f'The Preset is no more compatible with the plugin {plug_type}'
|
|
@@ -581,6 +594,37 @@ class DashBoard(QObject):
|
|
|
581
594
|
move_docks[-1].addWidget(move_forms[-1])
|
|
582
595
|
actuators_modules.append(mov_mod_tmp)
|
|
583
596
|
|
|
597
|
+
def add_det(self, plug_name, plug_settings, det_docks_settings, det_docks_viewer, detector_modules):
|
|
598
|
+
|
|
599
|
+
plug_type = plug_settings.child('main_settings', 'DAQ_type').value()
|
|
600
|
+
plug_subtype = plug_settings.child('main_settings', 'detector_type').value()
|
|
601
|
+
det_docks_settings.append(Dock(plug_name + " settings", size=(150, 250)))
|
|
602
|
+
det_docks_viewer.append(Dock(plug_name + " viewer", size=(350, 350)))
|
|
603
|
+
if len(detector_modules) == 0:
|
|
604
|
+
self.logger_dock.area.addDock(det_docks_settings[-1], 'bottom') # dockarea of the logger dock
|
|
605
|
+
else:
|
|
606
|
+
self.dockarea.addDock(det_docks_settings[-1], 'right',
|
|
607
|
+
detector_modules[-1].viewers_docks[-1])
|
|
608
|
+
self.dockarea.addDock(det_docks_viewer[-1], 'right', det_docks_settings[-1])
|
|
609
|
+
det_mod_tmp = DAQ_Viewer(self.dockarea, title=plug_name, daq_type=plug_type,
|
|
610
|
+
dock_settings=det_docks_settings[-1],
|
|
611
|
+
dock_viewer=det_docks_viewer[-1])
|
|
612
|
+
QtWidgets.QApplication.processEvents()
|
|
613
|
+
det_mod_tmp.detector = plug_subtype
|
|
614
|
+
QtWidgets.QApplication.processEvents()
|
|
615
|
+
det_mod_tmp.manage_ui_actions('quit', 'setEnabled', False)
|
|
616
|
+
|
|
617
|
+
if plug_settings is not None:
|
|
618
|
+
try:
|
|
619
|
+
putils.set_param_from_param(det_mod_tmp.settings, plug_settings)
|
|
620
|
+
except KeyError as e:
|
|
621
|
+
mssg = f'Could not set this setting: {str(e)}\n' \
|
|
622
|
+
f'The Preset is no more compatible with the plugin {plug_subtype}'
|
|
623
|
+
logger.warning(mssg)
|
|
624
|
+
self.splash_sc.showMessage(mssg, color=Qt.white)
|
|
625
|
+
|
|
626
|
+
detector_modules.append(det_mod_tmp)
|
|
627
|
+
|
|
584
628
|
def set_file_preset(self, filename):
|
|
585
629
|
"""
|
|
586
630
|
Set a file managers from the converted xml file given by the filename parameter.
|
|
@@ -629,14 +673,14 @@ class DashBoard(QObject):
|
|
|
629
673
|
path.extend(preset_path)
|
|
630
674
|
self.pid_module.settings.child(*path).setValue(child.value())
|
|
631
675
|
|
|
632
|
-
model_class =
|
|
676
|
+
model_class = extmod.get_models(
|
|
633
677
|
self.preset_manager.preset_params.child('pid_models').value())['class']
|
|
634
678
|
for setp in model_class.setpoints_names:
|
|
635
679
|
self.add_move(setp, None, 'PID', move_docks, move_forms, actuators_modules)
|
|
636
680
|
actuators_modules[-1].controller = dict(curr_point=self.pid_module.curr_points_signal,
|
|
637
681
|
setpoint=self.pid_module.setpoints_signal,
|
|
638
682
|
emit_curr_points=self.pid_module.emit_curr_points_sig)
|
|
639
|
-
actuators_modules[-1].
|
|
683
|
+
actuators_modules[-1].init_hardware_ui()
|
|
640
684
|
QtWidgets.QApplication.processEvents()
|
|
641
685
|
self.poll_init(actuators_modules[-1])
|
|
642
686
|
QtWidgets.QApplication.processEvents()
|
|
@@ -689,13 +733,14 @@ class DashBoard(QObject):
|
|
|
689
733
|
if plugin['type'] == 'move':
|
|
690
734
|
try:
|
|
691
735
|
plug_type = plug_settings.child('main_settings', 'move_type').value()
|
|
692
|
-
self.add_move(plug_name, plug_settings, plug_type, move_docks, move_forms,
|
|
736
|
+
self.add_move(plug_name, plug_settings, plug_type, move_docks, move_forms,
|
|
737
|
+
actuators_modules)
|
|
693
738
|
|
|
694
739
|
if ind_plugin == 0: # should be a master type plugin
|
|
695
740
|
if plugin['status'] != "Master":
|
|
696
741
|
logger.error('error in the master/slave type for plugin {}'.format(plug_name))
|
|
697
742
|
if plug_init:
|
|
698
|
-
actuators_modules[-1].
|
|
743
|
+
actuators_modules[-1].init_hardware_ui()
|
|
699
744
|
QtWidgets.QApplication.processEvents()
|
|
700
745
|
self.poll_init(actuators_modules[-1])
|
|
701
746
|
QtWidgets.QApplication.processEvents()
|
|
@@ -705,7 +750,7 @@ class DashBoard(QObject):
|
|
|
705
750
|
logger.error('error in the master/slave type for plugin {}'.format(plug_name))
|
|
706
751
|
if plug_init:
|
|
707
752
|
actuators_modules[-1].controller = master_controller
|
|
708
|
-
actuators_modules[-1].
|
|
753
|
+
actuators_modules[-1].init_hardware_ui()
|
|
709
754
|
QtWidgets.QApplication.processEvents()
|
|
710
755
|
self.poll_init(actuators_modules[-1])
|
|
711
756
|
QtWidgets.QApplication.processEvents()
|
|
@@ -718,32 +763,8 @@ class DashBoard(QObject):
|
|
|
718
763
|
else:
|
|
719
764
|
try:
|
|
720
765
|
ind_det += 1
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
det_docks_settings.append(Dock(plug_name + " settings", size=(150, 250)))
|
|
725
|
-
det_docks_viewer.append(Dock(plug_name + " viewer", size=(350, 350)))
|
|
726
|
-
if ind_det == 0:
|
|
727
|
-
self.logger_dock.area.addDock(det_docks_settings[-1],
|
|
728
|
-
'bottom') # dockarea of the logger dock
|
|
729
|
-
else:
|
|
730
|
-
self.dockarea.addDock(det_docks_settings[-1], 'right', det_docks_viewer[-2])
|
|
731
|
-
self.dockarea.addDock(det_docks_viewer[-1], 'right', det_docks_settings[-1])
|
|
732
|
-
det_mod_tmp = DAQ_Viewer(self.dockarea, dock_settings=det_docks_settings[-1],
|
|
733
|
-
dock_viewer=det_docks_viewer[-1], title=plug_name,
|
|
734
|
-
DAQ_type=plug_type, parent_scan=self)
|
|
735
|
-
det_mod_tmp.detector = plug_subtype
|
|
736
|
-
det_mod_tmp.ui.Quit_pb.setEnabled(False)
|
|
737
|
-
detector_modules.append(det_mod_tmp)
|
|
738
|
-
|
|
739
|
-
try:
|
|
740
|
-
utils.set_param_from_param(det_mod_tmp.settings, plug_settings)
|
|
741
|
-
except KeyError as e:
|
|
742
|
-
mssg = f'Could not set this setting: {str(e)}\n'\
|
|
743
|
-
f'The Preset is no more compatible with the plugin {plug_subtype}'
|
|
744
|
-
logger.warning(mssg)
|
|
745
|
-
self.splash_sc.showMessage(mssg, color=Qt.white)
|
|
746
|
-
|
|
766
|
+
self.add_det(plug_name, plug_settings, det_docks_settings, det_docks_viewer,
|
|
767
|
+
detector_modules)
|
|
747
768
|
QtWidgets.QApplication.processEvents()
|
|
748
769
|
|
|
749
770
|
try:
|
|
@@ -751,7 +772,7 @@ class DashBoard(QObject):
|
|
|
751
772
|
if plugin['status'] != "Master":
|
|
752
773
|
logger.error('error in the master/slave type for plugin {}'.format(plug_name))
|
|
753
774
|
if plug_init:
|
|
754
|
-
detector_modules[-1].
|
|
775
|
+
detector_modules[-1].init_hardware()
|
|
755
776
|
QtWidgets.QApplication.processEvents()
|
|
756
777
|
self.poll_init(detector_modules[-1])
|
|
757
778
|
QtWidgets.QApplication.processEvents()
|
|
@@ -761,7 +782,7 @@ class DashBoard(QObject):
|
|
|
761
782
|
logger.error('error in the master/slave type for plugin {}'.format(plug_name))
|
|
762
783
|
if plug_init:
|
|
763
784
|
detector_modules[-1].controller = master_controller
|
|
764
|
-
detector_modules[-1].
|
|
785
|
+
detector_modules[-1].init_hardware()
|
|
765
786
|
QtWidgets.QApplication.processEvents()
|
|
766
787
|
self.poll_init(detector_modules[-1])
|
|
767
788
|
QtWidgets.QApplication.processEvents()
|
|
@@ -1086,10 +1107,8 @@ class DashBoard(QObject):
|
|
|
1086
1107
|
|
|
1087
1108
|
# connecting to logger
|
|
1088
1109
|
for mov in actuators_modules:
|
|
1089
|
-
mov.status_signal[str].connect(self.add_status)
|
|
1090
1110
|
mov.init_signal.connect(self.update_init_tree)
|
|
1091
1111
|
for det in detector_modules:
|
|
1092
|
-
det.status_signal[str].connect(self.add_status)
|
|
1093
1112
|
det.init_signal.connect(self.update_init_tree)
|
|
1094
1113
|
|
|
1095
1114
|
self.splash_sc.close()
|
|
@@ -1352,7 +1371,7 @@ def main(init_qt=True):
|
|
|
1352
1371
|
# win.setVisible(False)
|
|
1353
1372
|
prog = DashBoard(area)
|
|
1354
1373
|
if init_qt:
|
|
1355
|
-
sys.exit(app.
|
|
1374
|
+
sys.exit(app.exec())
|
|
1356
1375
|
return prog, win
|
|
1357
1376
|
|
|
1358
1377
|
|
pymodaq/examples/custom_app.py
CHANGED
|
@@ -1,24 +1,25 @@
|
|
|
1
1
|
from collections import OrderedDict
|
|
2
2
|
import datetime
|
|
3
3
|
import numpy as np
|
|
4
|
-
|
|
5
|
-
from pymodaq.
|
|
6
|
-
from
|
|
7
|
-
from pymodaq.
|
|
4
|
+
|
|
5
|
+
from pymodaq.utils.logger import set_logger, get_module_name
|
|
6
|
+
from pymodaq.utils.gui_utils.custom_app import CustomApp
|
|
7
|
+
from pymodaq.utils.gui_utils.dock import DockArea, Dock
|
|
8
|
+
from pymodaq.utils.gui_utils.file_io import select_file
|
|
9
|
+
from pymodaq.utils.config import Config
|
|
8
10
|
|
|
9
11
|
from qtpy import QtWidgets
|
|
10
12
|
from qtpy.QtCore import Slot, QDate, QThread
|
|
11
13
|
|
|
12
|
-
from pymodaq.
|
|
13
|
-
from pymodaq.
|
|
14
|
-
from pymodaq.
|
|
15
|
-
from pymodaq.
|
|
16
|
-
from pymodaq.daq_utils.plotting.data_viewers.viewer0D import Viewer0D
|
|
14
|
+
from pymodaq.utils import daq_utils as utils
|
|
15
|
+
from pymodaq.utils.parameter import ioxml
|
|
16
|
+
from pymodaq.control_modules.daq_viewer import DAQ_Viewer
|
|
17
|
+
from pymodaq.utils.plotting.data_viewers.viewer0D import Viewer0D
|
|
17
18
|
|
|
18
|
-
from pymodaq.
|
|
19
|
+
from pymodaq.utils.h5modules import H5Browser, H5Saver
|
|
19
20
|
|
|
20
21
|
config = Config()
|
|
21
|
-
logger =
|
|
22
|
+
logger = set_logger(get_module_name(__file__))
|
|
22
23
|
|
|
23
24
|
|
|
24
25
|
class CustomAppExample(CustomApp):
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
from pymodaq.
|
|
2
|
-
from pymodaq.
|
|
3
|
-
from pymodaq.
|
|
4
|
-
from pymodaq.
|
|
1
|
+
from pymodaq.utils.gui_utils.widgets.table import SpinBoxDelegate
|
|
2
|
+
from pymodaq.utils.parameter.utils import get_widget_from_tree
|
|
3
|
+
from pymodaq.utils.plotting.data_viewers.viewer2D import Viewer2D
|
|
4
|
+
from pymodaq.utils import gui_utils as gutils
|
|
5
5
|
from pyqtgraph.dockarea import Dock
|
|
6
6
|
from pyqtgraph.parametertree import ParameterTree, Parameter
|
|
7
|
-
from pymodaq.
|
|
8
|
-
from pymodaq.
|
|
7
|
+
from pymodaq.utils.parameter.pymodaq_ptypes.tableview import TableViewCustom
|
|
8
|
+
from pymodaq.utils.scanner import TableModelTabular
|
|
9
9
|
from qtpy.QtCore import QObject, Qt, Slot
|
|
10
10
|
from qtpy import QtWidgets
|
|
11
11
|
|
|
@@ -58,7 +58,7 @@ class ViewerPointList(QObject):
|
|
|
58
58
|
self.table_view = get_widget_from_tree(self.settings_tree, TableViewCustom)[0]
|
|
59
59
|
self.settings.child(('tabular_table')).setValue(self.table_model)
|
|
60
60
|
|
|
61
|
-
self.table_view.horizontalHeader().
|
|
61
|
+
self.table_view.horizontalHeader().setResizeMode(QtWidgets.QHeaderView.ResizeToContents)
|
|
62
62
|
self.table_view.horizontalHeader().setStretchLastSection(True)
|
|
63
63
|
self.table_view.setSelectionBehavior(QtWidgets.QTableView.SelectRows)
|
|
64
64
|
self.table_view.setSelectionMode(QtWidgets.QTableView.SingleSelection)
|
|
@@ -81,8 +81,8 @@ class ViewerPointList(QObject):
|
|
|
81
81
|
|
|
82
82
|
|
|
83
83
|
if __name__ == '__main__':
|
|
84
|
-
from pymodaq.
|
|
85
|
-
from pymodaq.
|
|
84
|
+
from pymodaq.utils.gui_utils import DockArea
|
|
85
|
+
from pymodaq.utils.data import Axis
|
|
86
86
|
import sys
|
|
87
87
|
import numpy as np
|
|
88
88
|
|
|
@@ -96,7 +96,7 @@ if __name__ == '__main__':
|
|
|
96
96
|
Ny = 200
|
|
97
97
|
x = (np.linspace(0, Nx - 1, Nx) + 100) / 2
|
|
98
98
|
y = (np.linspace(0, Ny - 1, Ny) - 10) * 2
|
|
99
|
-
from pymodaq.
|
|
99
|
+
from pymodaq.utils.daq_utils import gauss2D
|
|
100
100
|
|
|
101
101
|
data_red = 3 * gauss2D(x, np.mean(x), (np.max(x)-np.min(x)) / 5, y, np.mean(y), (np.max(y)-np.min(y)) / 5, 1)
|
|
102
102
|
data_red += np.random.random(data_red.shape)
|
|
@@ -9,20 +9,22 @@ import numpy as np
|
|
|
9
9
|
from qtpy import QtWidgets
|
|
10
10
|
from qtpy.QtCore import Slot, QDate, QThread, QTimer
|
|
11
11
|
|
|
12
|
-
from pymodaq.
|
|
13
|
-
from pymodaq.
|
|
14
|
-
from pymodaq.
|
|
15
|
-
from pymodaq.
|
|
12
|
+
from pymodaq.utils import data as data_mod
|
|
13
|
+
from pymodaq.utils.logger import set_logger, get_module_name
|
|
14
|
+
from pymodaq.utils.gui_utils.custom_app import CustomApp
|
|
15
|
+
from pymodaq.utils.gui_utils.dock import DockArea, Dock
|
|
16
|
+
from pymodaq.utils.gui_utils.file_io import select_file
|
|
17
|
+
from pymodaq.utils.config import Config
|
|
16
18
|
|
|
17
|
-
from pymodaq.
|
|
18
|
-
from pymodaq.
|
|
19
|
+
from pymodaq.utils import gui_utils as gutils
|
|
20
|
+
from pymodaq.utils import daq_utils as utils
|
|
19
21
|
|
|
20
|
-
from pymodaq.
|
|
21
|
-
from pymodaq.
|
|
22
|
-
from pymodaq.
|
|
22
|
+
from pymodaq.utils.parameter import ioxml
|
|
23
|
+
from pymodaq.utils.plotting.data_viewers.viewer1D import Viewer1D
|
|
24
|
+
from pymodaq.utils.h5modules import H5Browser, H5Saver
|
|
23
25
|
|
|
24
26
|
config = Config()
|
|
25
|
-
logger =
|
|
27
|
+
logger = set_logger(get_module_name(__file__))
|
|
26
28
|
|
|
27
29
|
|
|
28
30
|
class FunctionPlotter(CustomApp):
|
|
@@ -34,7 +36,8 @@ class FunctionPlotter(CustomApp):
|
|
|
34
36
|
{'title': 'File name:', 'name': 'target_filename', 'type': 'str', 'value': "", 'readonly': True},
|
|
35
37
|
{'title': 'Date:', 'name': 'date', 'type': 'date', 'value': QDate.currentDate()},
|
|
36
38
|
|
|
37
|
-
{'title': 'Functions:', 'name': 'functions', 'type': 'list',
|
|
39
|
+
{'title': 'Functions:', 'name': 'functions', 'type': 'list',
|
|
40
|
+
'limits': ['exp(-(x/5)**2)', 'sin(x)', 'arctan(x)']},
|
|
38
41
|
{'title': 'Function:', 'name': 'function', 'type': 'str', 'value': 'sinc(x)'},
|
|
39
42
|
{'title': 'Add function:', 'label': 'Add!', 'name': 'add_function', 'type': 'bool_push', 'value': False},
|
|
40
43
|
{'title': 'Plot refresh (ms):', 'name': 'plot_refresh', 'type': 'int', 'value': 2000},
|
|
@@ -110,8 +113,8 @@ class FunctionPlotter(CustomApp):
|
|
|
110
113
|
|
|
111
114
|
function_vals = eval(f'np.{function_str}')
|
|
112
115
|
|
|
113
|
-
self.viewer.show_data([function_vals], labels=[function_str], x_axis=
|
|
114
|
-
|
|
116
|
+
self.viewer.show_data([function_vals], labels=[function_str], x_axis=data_mod.Axis(x, label='An axis',
|
|
117
|
+
units='arb. units'))
|
|
115
118
|
|
|
116
119
|
def value_changed(self, param):
|
|
117
120
|
if param.name() == 'add_function':
|
|
@@ -1,17 +1,19 @@
|
|
|
1
1
|
|
|
2
2
|
import numpy as np
|
|
3
|
-
|
|
4
|
-
from pymodaq.
|
|
5
|
-
from pymodaq.
|
|
3
|
+
|
|
4
|
+
from pymodaq.utils.logger import set_logger, get_module_name
|
|
5
|
+
from pymodaq.utils.gui_utils.custom_app import CustomApp
|
|
6
|
+
from pymodaq.utils.gui_utils.dock import DockArea, Dock
|
|
7
|
+
from pymodaq.utils.config import Config, get_set_preset_path
|
|
6
8
|
from qtpy import QtWidgets
|
|
7
9
|
from qtpy.QtCore import Signal, QLocale
|
|
8
10
|
|
|
9
|
-
from pymodaq.
|
|
10
|
-
from pymodaq.
|
|
11
|
+
from pymodaq.utils import gui_utils as gutils
|
|
12
|
+
from pymodaq.utils import daq_utils as utils
|
|
11
13
|
|
|
12
14
|
|
|
13
15
|
config = Config()
|
|
14
|
-
logger =
|
|
16
|
+
logger = set_logger(get_module_name(__file__))
|
|
15
17
|
|
|
16
18
|
|
|
17
19
|
class NonLinearScanner(CustomApp):
|
pymodaq/examples/parameter_ex.py
CHANGED
|
@@ -4,12 +4,12 @@ Examples of custome parameter types derived from pyqtgraph
|
|
|
4
4
|
"""
|
|
5
5
|
import sys
|
|
6
6
|
|
|
7
|
-
import pymodaq.
|
|
7
|
+
import pymodaq.utils.gui_utils.widgets.table
|
|
8
8
|
from qtpy import QtWidgets, QtCore
|
|
9
9
|
from pyqtgraph.parametertree import Parameter, ParameterTree
|
|
10
10
|
from collections import OrderedDict
|
|
11
|
-
from pymodaq.
|
|
12
|
-
from pymodaq.
|
|
11
|
+
from pymodaq.utils import gui_utils as gutils
|
|
12
|
+
from pymodaq.utils.parameter import pymodaq_ptypes
|
|
13
13
|
from pymodaq.resources.QtDesigner_Ressources import QtDesigner_ressources_rc
|
|
14
14
|
|
|
15
15
|
|
|
@@ -80,13 +80,13 @@ class ParameterEx:
|
|
|
80
80
|
{'title': 'Table widget', 'name': 'tablewidget', 'type': 'table', 'value':
|
|
81
81
|
OrderedDict(key1='data1', key2=24), 'header': ['keys', 'limits'], 'height': 100},
|
|
82
82
|
{'title': 'Table view', 'name': 'tabular_table', 'type': 'table_view',
|
|
83
|
-
'delegate': pymodaq.
|
|
84
|
-
'value': pymodaq.
|
|
83
|
+
'delegate': pymodaq.utils.gui_utils.widgets.table.SpinBoxDelegate, 'menu': True,
|
|
84
|
+
'value': pymodaq.utils.gui_utils.widgets.table.TableModel([[0.1, 0.2, 0.3]], ['value1', 'value2', 'value3']),
|
|
85
85
|
'tip': 'The advantage of the Table model lies in its modularity.\n For concrete examples see the'
|
|
86
86
|
'TableModelTabular and the TableModelSequential custom models in the'
|
|
87
|
-
' pymodaq.
|
|
87
|
+
' pymodaq.utils.scanner module'},
|
|
88
88
|
]}, # The advantage of the Table model lies in its modularity for concrete examples see the
|
|
89
|
-
# TableModelTabular and the TableModelSequential custom models in the pymodaq.
|
|
89
|
+
# TableModelTabular and the TableModelSequential custom models in the pymodaq.utils.scanner module
|
|
90
90
|
]
|
|
91
91
|
|
|
92
92
|
def __init__(self, tree):
|