pymodaq 4.0.6__tar.gz → 4.0.7__tar.gz
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-4.0.6 → pymodaq-4.0.7}/PKG-INFO +1 -1
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/control_modules/daq_move.py +20 -4
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/control_modules/daq_move_ui.py +5 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/control_modules/daq_viewer.py +23 -6
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/control_modules/move_utility_classes.py +103 -126
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/control_modules/utils.py +9 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/control_modules/viewer_utility_classes.py +1 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/dashboard.py +24 -9
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/examples/custom_app.py +19 -29
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/examples/custom_viewer.py +13 -10
- pymodaq-4.0.7/src/pymodaq/extensions/utils.py +53 -0
- pymodaq-4.0.7/src/pymodaq/resources/VERSION +1 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/utils/config.py +1 -1
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/utils/daq_utils.py +6 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/utils/parameter/ioxml.py +12 -12
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/utils/parameter/pymodaq_ptypes/list.py +1 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/utils/parameter/utils.py +9 -4
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/utils/plotting/data_viewers/viewerND.py +8 -2
- pymodaq-4.0.6/src/pymodaq/extensions/utils.py +0 -37
- pymodaq-4.0.6/src/pymodaq/resources/VERSION +0 -1
- {pymodaq-4.0.6 → pymodaq-4.0.7}/.gitignore +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/LICENSE +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/README.rst +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/pyproject.toml +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/__init__.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/__init__.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/control_modules/__init__.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/control_modules/daq_viewer_ui.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/control_modules/mocks.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/daq_utils.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/examples/Labview_TCP_Client/DAQ_TCP_Client.aliases +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/examples/Labview_TCP_Client/DAQ_TCP_Client.lvlps +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/examples/Labview_TCP_Client/DAQ_TCP_Client.lvproj +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/examples/Labview_TCP_Client/DAQ_TCP_Client.vi +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/examples/Labview_TCP_Client/DAQ_TCP_Server_1Dgaussian.vi +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/examples/Labview_TCP_Client/DAQ_TCP_Server_2Dgaussian.vi +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/examples/Labview_TCP_Client/DAQ_TCP_read_cmd.vi +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/examples/Labview_TCP_Client/DAQ_TCP_read_float.vi +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/examples/Labview_TCP_Client/DAQ_TCP_read_int.vi +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/examples/Labview_TCP_Client/DAQ_TCP_send_data.vi +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/examples/Labview_TCP_Client/DAQ_TCP_send_int.vi +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/examples/Labview_TCP_Client/DAQ_TCP_send_scalar.vi +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/examples/Labview_TCP_Client/DAQ_TCP_send_string.vi +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/examples/Labview_TCP_Client/client_state.ctl +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/examples/Labview_TCP_Client/cmd_types.ctl +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/examples/__init__.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/examples/function_plotter.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/examples/nonlinearscanner.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/examples/parameter_ex.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/examples/preset_MockCamera.xml +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/extensions/__init__.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/extensions/console.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/extensions/daq_logger.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/extensions/daq_scan.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/extensions/daq_scan_ui.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/extensions/h5browser.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/extensions/pid/__init__.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/extensions/pid/daq_move_PID.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/extensions/pid/pid_controller.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/extensions/pid/utils.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/icon.ico +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/post_treatment/__init__.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/post_treatment/daq_analysis/__init__.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/post_treatment/daq_analysis/daq_analysis_main.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/post_treatment/daq_measurement/__init__.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/post_treatment/daq_measurement/daq_measurement_GUI.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/post_treatment/daq_measurement/daq_measurement_GUI.ui +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/post_treatment/daq_measurement/daq_measurement_main.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/post_treatment/daq_measurement/process_from_QtDesigner_DAQ_Measurement_GUI.bat +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/post_treatment/load_and_plot.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/post_treatment/process_to_scalar.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/1d.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/2d.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/3d.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Add2.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Add_Step.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Approve.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Approve_All.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Browse_Dir_Path.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Calculator.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/ChnGroup.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/ChnNum.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/ChnText.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/ChnTime.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/ChnWave.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Close3.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/CollapseAll.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/CollapseAll_32.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/ColorPicker.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Contract.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Create.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/DeleteLayer.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/EditOpen.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/EditRedo.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/EditUndo.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Ellipse.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/EllipseFilled.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Error.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/ErrorMessage.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Error_16.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Exit.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Expand.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/ExpandAll.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/ExpandAll_32.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/FFT.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/HLM.ico +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Help.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Help_32.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Histogram.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/LUT_LookUpTable.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/MagnifyingGlass.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/MagnifyingGlass_24.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Marker.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Math.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/MeasurementStudio_32.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Move.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/MoveDown.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/MoveUp.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Multiply.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/NewFile.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/NewLayer.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/New_File.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/New_Folder.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Open.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Open_1D.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Open_2D.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Open_File.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Open_File_32.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Open_sim.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Options.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Oscilloscope.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Oscilloscope_16.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Pass.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/RGB.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Rectangle.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/RectangleFilled.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Redo.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Refresh.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Refresh2.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Refresh_32.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Region.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Rendezvous.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/SELECT.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Save.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/SaveAll.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/SaveAll_32.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/SaveAs.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/SaveAs_32.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Save_24.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Save_32.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Search.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/SelectPolygon.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Select_24.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Settings.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Snap&Save.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Snapshot.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Snapshot2.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Snapshot2_16.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Snapshot2_32.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Spreadsheet.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Statistics.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Statistics2.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Status.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Subtract.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Vision.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Volts.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Wait2.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Zoom_1_1.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Zoom_in.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Zoom_out.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Zoom_to_Selection.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/abort.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/advanced2.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/autoscale.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/b_icon.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/back.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/bg_icon.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/camera.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/camera_snap.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/cartesian.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/clear2.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/clear_ROI.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/close2.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/cluster2.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/color.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/color2.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/continuous.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/data.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/delay.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/download.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/download2.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/error2.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/ethernet.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/exit2.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/fan.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/filter2.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/g_icon.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/gear2.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/go_to.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/go_to_1.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/go_to_2.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/grab.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/graph.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/greenLight2.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/greenLight2_32.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/green_light.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/grey_icon.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/greyscale.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/help1.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/help1_32.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/home2.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/information2.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/ini.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/integrator.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/joystick.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/light_green.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/light_green_16.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/light_red.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/light_red_16.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/light_yellow.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/light_yellow_16.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/limiter.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/load_ROI.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/meshPlot.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/meter.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/meter2.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/meter_32.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/move_contour.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/move_straight_line.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/movie.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/multi_point.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/multiplexer.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/new.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/openArrow.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/oscilloscope2.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/oscilloscope3.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/overlay.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/pass2.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/pass2_16.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/pass_32.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/pause.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/permute.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/phase.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/play.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/polar.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/pole_zero.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/powerMeter.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/powerSwitch.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/powerSwitch_16.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/print2.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/print2_32.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/properties.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/r_icon.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/radiocontrolbutton.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/read2.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/red_light.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/remove.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/reset.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/rgb_icon.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/robot.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/rotation2.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/run2.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/run_all.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/saturation.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/save_ROI.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/scale_horizontally.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/scale_vertically.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/search2.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/select2.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/select_all.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/select_all2.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/select_none.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/sequence.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/sequence2.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/snap.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/spectrumAnalyzer.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/start.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/status_cancelled.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/stop.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/stop2.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/stop3.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/stop_all.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/sum.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/surfacePlot.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/tree.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/utility2.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/utility_small.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/vector.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/verify.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/video.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/wait.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/waterfallPlot.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/watershed.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/yellow_light.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/zip_file.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/zoomAuto.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/zoomReset.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/QtDesigner_ressources.bat +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/QtDesigner_ressources.qrc +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/QtDesigner_ressources_rc.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/__init__.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/QtDesigner_Ressources/icons.svg +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/__init__.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/config_template.toml +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/preset_default.xml +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/resources/triangulation_data.npy +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/splash.png +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/utils/__init__.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/utils/abstract/__init__.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/utils/abstract/logger.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/utils/array_manipulation.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/utils/calibration_camera.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/utils/chrono_timer.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/utils/conftests.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/utils/data.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/utils/db/__init__.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/utils/db/db_logger/__init__.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/utils/db/db_logger/db_logger.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/utils/db/db_logger/db_logger_models.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/utils/enums.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/utils/exceptions.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/utils/factory.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/utils/gui_utils/__init__.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/utils/gui_utils/custom_app.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/utils/gui_utils/dock.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/utils/gui_utils/file_io.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/utils/gui_utils/layout.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/utils/gui_utils/list_picker.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/utils/gui_utils/utils.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/utils/gui_utils/widgets/__init__.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/utils/gui_utils/widgets/label.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/utils/gui_utils/widgets/lcd.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/utils/gui_utils/widgets/push.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/utils/gui_utils/widgets/qled.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/utils/gui_utils/widgets/spinbox.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/utils/gui_utils/widgets/table.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/utils/gui_utils/widgets/tree_layout.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/utils/h5modules/__init__.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/utils/h5modules/backends.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/utils/h5modules/browsing.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/utils/h5modules/data_saving.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/utils/h5modules/exporter.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/utils/h5modules/exporters/__init__.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/utils/h5modules/exporters/base.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/utils/h5modules/exporters/flimj.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/utils/h5modules/exporters/hyperspy.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/utils/h5modules/h5logging.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/utils/h5modules/module_saving.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/utils/h5modules/saving.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/utils/h5modules/utils.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/utils/logger.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/utils/managers/__init__.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/utils/managers/action_manager.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/utils/managers/batchscan_manager.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/utils/managers/modules_manager.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/utils/managers/overshoot_manager.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/utils/managers/parameter_manager.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/utils/managers/preset_manager.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/utils/managers/preset_manager_utils.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/utils/managers/remote_manager.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/utils/managers/roi_manager.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/utils/math_utils.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/utils/messenger.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/utils/parameter/__init__.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/utils/parameter/pymodaq_ptypes/__init__.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/utils/parameter/pymodaq_ptypes/bool.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/utils/parameter/pymodaq_ptypes/date.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/utils/parameter/pymodaq_ptypes/filedir.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/utils/parameter/pymodaq_ptypes/itemselect.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/utils/parameter/pymodaq_ptypes/led.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/utils/parameter/pymodaq_ptypes/numeric.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/utils/parameter/pymodaq_ptypes/pixmap.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/utils/parameter/pymodaq_ptypes/slide.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/utils/parameter/pymodaq_ptypes/table.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/utils/parameter/pymodaq_ptypes/tableview.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/utils/parameter/pymodaq_ptypes/text.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/utils/plotting/__init__.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/utils/plotting/data_viewers/__init__.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/utils/plotting/data_viewers/viewer.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/utils/plotting/data_viewers/viewer0D.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/utils/plotting/data_viewers/viewer1D.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/utils/plotting/data_viewers/viewer1Dbasic.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/utils/plotting/data_viewers/viewer2D.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/utils/plotting/data_viewers/viewer2D_basic.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/utils/plotting/gant_chart.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/utils/plotting/image_viewer.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/utils/plotting/items/__init__.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/utils/plotting/items/axis_scaled.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/utils/plotting/items/crosshair.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/utils/plotting/items/image.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/utils/plotting/navigator.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/utils/plotting/scan_selector.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/utils/plotting/utils/__init__.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/utils/plotting/utils/axes_viewer.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/utils/plotting/utils/filter.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/utils/plotting/utils/lineout.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/utils/plotting/utils/plot_utils.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/utils/plotting/utils/signalND.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/utils/plotting/widgets.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/utils/qvariant.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/utils/scanner/__init__.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/utils/scanner/scan_factory.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/utils/scanner/scanner.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/utils/scanner/scanners/_1d_scanners.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/utils/scanner/scanners/_2d_scanners.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/utils/scanner/scanners/__init__.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/utils/scanner/scanners/sequential.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/utils/scanner/scanners/tabular.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/utils/scanner/utils.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/utils/slicing.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/utils/svg/__init__.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/utils/svg/svg_renderer.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/utils/svg/svg_view.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/utils/svg/svg_viewer2D.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/utils/tcp_server_client.py +0 -0
- {pymodaq-4.0.6 → pymodaq-4.0.7}/src/pymodaq/utils/units.py +0 -0
|
@@ -7,6 +7,8 @@ Created the 29/07/2022
|
|
|
7
7
|
|
|
8
8
|
from __future__ import annotations
|
|
9
9
|
|
|
10
|
+
from importlib import import_module
|
|
11
|
+
from numbers import Number
|
|
10
12
|
import sys
|
|
11
13
|
from typing import List, Tuple, Union
|
|
12
14
|
import numpy as np
|
|
@@ -143,6 +145,7 @@ class DAQ_Move(ParameterManager, ControlModule):
|
|
|
143
145
|
* show_log
|
|
144
146
|
* actuator_changed
|
|
145
147
|
* rel_value
|
|
148
|
+
* show_config
|
|
146
149
|
"""
|
|
147
150
|
if cmd.command == 'init':
|
|
148
151
|
self.init_hardware(cmd.attribute[0])
|
|
@@ -162,6 +165,8 @@ class DAQ_Move(ParameterManager, ControlModule):
|
|
|
162
165
|
self.move_rel(cmd.attribute)
|
|
163
166
|
elif cmd.command == 'show_log':
|
|
164
167
|
self.show_log()
|
|
168
|
+
elif cmd.command == 'show_config':
|
|
169
|
+
self.show_config(config)
|
|
165
170
|
elif cmd.command == 'actuator_changed':
|
|
166
171
|
self.actuator = cmd.attribute
|
|
167
172
|
elif cmd.command == 'rel_value':
|
|
@@ -251,7 +256,7 @@ class DAQ_Move(ParameterManager, ControlModule):
|
|
|
251
256
|
"""
|
|
252
257
|
try:
|
|
253
258
|
self._send_to_tcpip = send_to_tcpip
|
|
254
|
-
if
|
|
259
|
+
if np.all(value != self._current_value): # in case value is a ndarray (very specific cases...)
|
|
255
260
|
if self.ui is not None:
|
|
256
261
|
self.ui.move_done = False
|
|
257
262
|
self._move_done_bool = False
|
|
@@ -362,7 +367,7 @@ class DAQ_Move(ParameterManager, ControlModule):
|
|
|
362
367
|
self._hardware_thread.hardware = hardware
|
|
363
368
|
self._hardware_thread.start()
|
|
364
369
|
self.command_hardware.emit(
|
|
365
|
-
ThreadCommand(command="ini_stage", attribute=[self.settings.child(
|
|
370
|
+
ThreadCommand(command="ini_stage", attribute=[self.settings.child('move_settings').saveState(),
|
|
366
371
|
self.controller]))
|
|
367
372
|
except Exception as e:
|
|
368
373
|
self.logger.exception(str(e))
|
|
@@ -394,6 +399,9 @@ class DAQ_Move(ParameterManager, ControlModule):
|
|
|
394
399
|
elif param.name() == 'refresh_timeout':
|
|
395
400
|
self._refresh_timer.setInterval(param.value())
|
|
396
401
|
|
|
402
|
+
elif param.name() == 'plugin_config':
|
|
403
|
+
self.show_config(self.plugin_config)
|
|
404
|
+
|
|
397
405
|
path = self.settings.childPath(param)
|
|
398
406
|
if path is not None:
|
|
399
407
|
if 'main_settings' not in path:
|
|
@@ -543,12 +551,19 @@ class DAQ_Move(ParameterManager, ControlModule):
|
|
|
543
551
|
def actuator(self, act_type):
|
|
544
552
|
if act_type in ACTUATOR_TYPES:
|
|
545
553
|
self._actuator_type = act_type
|
|
554
|
+
self.update_plugin_config()
|
|
546
555
|
if self.ui is not None:
|
|
547
556
|
self.ui.actuator = act_type
|
|
548
557
|
self.update_settings()
|
|
549
558
|
else:
|
|
550
559
|
raise ActuatorError(f'{act_type} is an invalid actuator, should be within {ACTUATOR_TYPES}')
|
|
551
560
|
|
|
561
|
+
def update_plugin_config(self):
|
|
562
|
+
parent_module = utils.find_dict_in_list_from_key_val(DAQ_Move_Actuators, 'name', self.actuator)
|
|
563
|
+
mod = import_module(parent_module['module'].__package__.split('.')[0])
|
|
564
|
+
if hasattr(mod, 'config'):
|
|
565
|
+
self.plugin_config = mod.config
|
|
566
|
+
|
|
552
567
|
@property
|
|
553
568
|
def units(self):
|
|
554
569
|
return self.settings['move_settings', 'units']
|
|
@@ -734,8 +749,9 @@ class DAQ_Move_Hardware(QObject):
|
|
|
734
749
|
--------
|
|
735
750
|
move_Abs
|
|
736
751
|
"""
|
|
737
|
-
|
|
738
|
-
|
|
752
|
+
if isinstance(position, Number):
|
|
753
|
+
position = float(position) # because it may be a numpy float and could cause issues
|
|
754
|
+
# see https://github.com/pythonnet/pythonnet/issues/1833
|
|
739
755
|
self._target_value = position
|
|
740
756
|
self.hardware.move_is_done = False
|
|
741
757
|
self.hardware.ispolling = polling
|
|
@@ -39,6 +39,8 @@ class DAQ_Move_UI(ControlModuleUI):
|
|
|
39
39
|
* show_log
|
|
40
40
|
* actuator_changed
|
|
41
41
|
* rel_value
|
|
42
|
+
* show_config
|
|
43
|
+
* show_plugin_config
|
|
42
44
|
|
|
43
45
|
Methods
|
|
44
46
|
-------
|
|
@@ -237,6 +239,8 @@ class DAQ_Move_UI(ControlModuleUI):
|
|
|
237
239
|
toolbar=self.toolbar)
|
|
238
240
|
self.add_action('show_settings', 'Show Settings', 'Settings', "Show Settings", checkable=True,
|
|
239
241
|
toolbar=self.toolbar)
|
|
242
|
+
self.add_action('show_config', 'Show Config', 'tree', "Show Plugin Config", checkable=False,
|
|
243
|
+
toolbar=self.toolbar)
|
|
240
244
|
self.add_action('refresh_value', 'Refresh', 'Refresh2', "Refresh Value", checkable=True,
|
|
241
245
|
toolbar=self.toolbar)
|
|
242
246
|
self.add_action('stop', 'Stop', 'stop', "Stop Motion", checkable=False,
|
|
@@ -256,6 +260,7 @@ class DAQ_Move_UI(ControlModuleUI):
|
|
|
256
260
|
self.connect_action('move_abs_2', lambda: self.emit_move_abs(self.abs_value_sb_2))
|
|
257
261
|
self.connect_action('log', lambda: self.command_sig.emit(ThreadCommand('show_log', )))
|
|
258
262
|
self.connect_action('stop', lambda: self.command_sig.emit(ThreadCommand('stop', )))
|
|
263
|
+
self.connect_action('show_config', lambda : self.command_sig.emit(ThreadCommand('show_config', )))
|
|
259
264
|
|
|
260
265
|
self.move_abs_pb.clicked.connect(lambda: self.emit_move_abs(self.abs_value_sb_bis))
|
|
261
266
|
|
|
@@ -5,7 +5,7 @@ Created on Wed Jan 10 16:54:14 2018
|
|
|
5
5
|
@author: Weber Sébastien
|
|
6
6
|
"""
|
|
7
7
|
from __future__ import annotations
|
|
8
|
-
|
|
8
|
+
from importlib import import_module
|
|
9
9
|
from collections import OrderedDict
|
|
10
10
|
import copy
|
|
11
11
|
import os
|
|
@@ -250,6 +250,12 @@ class DAQ_Viewer(ParameterManager, ControlModule):
|
|
|
250
250
|
if self.ui is not None:
|
|
251
251
|
return self.ui.viewer_docks
|
|
252
252
|
|
|
253
|
+
@property
|
|
254
|
+
def viewers_docks(self) -> List[Dock]:
|
|
255
|
+
"""list of Viewer Docks from the UI, for back compatibility"""
|
|
256
|
+
deprecation_msg('viewers_docks is a deprecated property use viewer_docks instead')
|
|
257
|
+
return self.viewer_docks
|
|
258
|
+
|
|
253
259
|
def daq_type_changed_from_ui(self, daq_type: DAQTypesEnum):
|
|
254
260
|
""" Apply changes from the selection of a different DAQTypesEnum in the UI
|
|
255
261
|
|
|
@@ -289,6 +295,7 @@ class DAQ_Viewer(ParameterManager, ControlModule):
|
|
|
289
295
|
|
|
290
296
|
def detector_changed_from_ui(self, detector: str):
|
|
291
297
|
self._detector = detector
|
|
298
|
+
self.update_plugin_config()
|
|
292
299
|
self._set_setting_tree()
|
|
293
300
|
|
|
294
301
|
@property
|
|
@@ -301,10 +308,17 @@ class DAQ_Viewer(ParameterManager, ControlModule):
|
|
|
301
308
|
if det not in self.detectors:
|
|
302
309
|
raise ValueError(f'{det} is not a valid Detector: {self.detectors}')
|
|
303
310
|
self._detector = det
|
|
311
|
+
self.update_plugin_config()
|
|
304
312
|
if self.ui is not None:
|
|
305
313
|
self.ui.detector = det
|
|
306
314
|
self._set_setting_tree()
|
|
307
315
|
|
|
316
|
+
def update_plugin_config(self):
|
|
317
|
+
parent_module = utils.find_dict_in_list_from_key_val(DET_TYPES[self.daq_type.name], 'name', self.detector)
|
|
318
|
+
mod = import_module(parent_module['module'].__package__.split('.')[0])
|
|
319
|
+
if hasattr(mod, 'config'):
|
|
320
|
+
self.plugin_config = mod.config
|
|
321
|
+
|
|
308
322
|
def detectors_changed_from_ui(self, detectors: List[str]):
|
|
309
323
|
self._detectors = detectors
|
|
310
324
|
|
|
@@ -906,10 +920,13 @@ class DAQ_Viewer(ParameterManager, ControlModule):
|
|
|
906
920
|
|
|
907
921
|
elif param.name() == 'ip_address' or param.name == 'port':
|
|
908
922
|
self._command_tcpip.emit(
|
|
909
|
-
ThreadCommand('update_connection', dict(ipaddress=self.settings
|
|
910
|
-
'ip_address'
|
|
911
|
-
port=self.settings
|
|
912
|
-
'port')
|
|
923
|
+
ThreadCommand('update_connection', dict(ipaddress=self.settings['main_settings', 'tcpip',
|
|
924
|
+
'ip_address'],
|
|
925
|
+
port=self.settings['main_settings', 'tcpip',
|
|
926
|
+
'port'])))
|
|
927
|
+
|
|
928
|
+
elif param.name() == 'plugin_config':
|
|
929
|
+
self.show_config(self.plugin_config)
|
|
913
930
|
|
|
914
931
|
if path is not None:
|
|
915
932
|
if 'main_settings' not in path:
|
|
@@ -1319,7 +1336,7 @@ class DAQ_Detector(QObject):
|
|
|
1319
1336
|
if not self.grab_state:
|
|
1320
1337
|
self.detector.stop()
|
|
1321
1338
|
|
|
1322
|
-
def single(self, Naverage=1, **kwargs):
|
|
1339
|
+
def single(self, Naverage=1, *args, **kwargs):
|
|
1323
1340
|
""" Convenience function to grab a single set of data
|
|
1324
1341
|
|
|
1325
1342
|
Parameters
|
|
@@ -1,22 +1,25 @@
|
|
|
1
|
+
from time import perf_counter
|
|
2
|
+
from typing import Union, List, Dict
|
|
3
|
+
|
|
4
|
+
from easydict import EasyDict as edict
|
|
5
|
+
import numpy as np
|
|
1
6
|
from qtpy import QtWidgets
|
|
2
7
|
from qtpy.QtCore import QObject, Slot, Signal, QTimer
|
|
3
8
|
|
|
4
|
-
|
|
5
|
-
from easydict import EasyDict as edict
|
|
6
9
|
import pymodaq.utils.daq_utils as utils
|
|
7
10
|
import pymodaq.utils.parameter.utils as putils
|
|
8
|
-
from pymodaq.utils.
|
|
11
|
+
from pymodaq.utils.parameter import Parameter
|
|
12
|
+
from pymodaq.utils.logger import set_logger, get_module_name
|
|
9
13
|
from pymodaq.utils.parameter import ioxml
|
|
10
|
-
|
|
11
|
-
from pymodaq.utils.daq_utils import ThreadCommand, getLineInfo
|
|
12
|
-
from pymodaq.utils
|
|
14
|
+
|
|
15
|
+
from pymodaq.utils.daq_utils import ThreadCommand, getLineInfo, find_keys_from_val
|
|
16
|
+
from pymodaq.utils import config as configmod
|
|
13
17
|
from pymodaq.utils.tcp_server_client import TCPServer, tcp_parameters
|
|
14
18
|
from pymodaq.utils.messenger import deprecation_msg
|
|
15
|
-
|
|
16
|
-
from time import perf_counter
|
|
19
|
+
|
|
17
20
|
|
|
18
21
|
logger = set_logger(get_module_name(__file__))
|
|
19
|
-
config = Config()
|
|
22
|
+
config = configmod.Config()
|
|
20
23
|
|
|
21
24
|
|
|
22
25
|
def comon_parameters(epsilon=config('actuator', 'epsilon_default')):
|
|
@@ -94,6 +97,7 @@ params = [
|
|
|
94
97
|
{'title': 'Main Settings:', 'name': 'main_settings', 'type': 'group', 'children': [
|
|
95
98
|
{'title': 'Actuator type:', 'name': 'move_type', 'type': 'str', 'value': '', 'readonly': True},
|
|
96
99
|
{'title': 'Actuator name:', 'name': 'module_name', 'type': 'str', 'value': '', 'readonly': True},
|
|
100
|
+
{'title': 'Plugin Config:', 'name': 'plugin_config', 'type': 'bool_push', 'label': 'Show Config', },
|
|
97
101
|
{'title': 'Controller ID:', 'name': 'controller_ID', 'type': 'int', 'value': 0, 'default': 0},
|
|
98
102
|
{'title': 'Refresh value (ms):', 'name': 'refresh_timeout', 'type': 'int',
|
|
99
103
|
'value': config('actuator', 'refresh_timeout_ms')},
|
|
@@ -138,45 +142,43 @@ def main(plugin_file, init=True, title='test'):
|
|
|
138
142
|
|
|
139
143
|
|
|
140
144
|
class DAQ_Move_base(QObject):
|
|
141
|
-
""" The base class to be
|
|
145
|
+
""" The base class to be inherited by all actuator modules
|
|
142
146
|
|
|
143
147
|
This base class implements all necessary parameters and methods for the plugin to communicate with its parent (the
|
|
144
148
|
DAQ_Move module)
|
|
145
149
|
|
|
146
150
|
Parameters
|
|
147
151
|
----------
|
|
148
|
-
parent :
|
|
149
|
-
params_state : Parameter
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
152
|
+
parent : DAQ_Move_Hardware
|
|
153
|
+
params_state : Parameter
|
|
154
|
+
pyqtgraph Parameter instance from which the module will get the initial settings (as defined in the preset)
|
|
155
|
+
Attributes
|
|
156
|
+
----------
|
|
157
|
+
move_done_signal: Signal
|
|
158
|
+
signal represented by a float. Is emitted each time the hardware reached the target position within the epsilon
|
|
159
|
+
precision (see comon_parameters variable)
|
|
160
|
+
controller: object
|
|
161
|
+
the object representing the hardware in the plugin. Used to access hardware functionality
|
|
162
|
+
settings: Parameter
|
|
163
|
+
instance representing the hardware settings defined from the params attribute. Modifications on the GUI settings
|
|
164
|
+
will be transferred to this attribute. It stores at all times the current state of the hardware/plugin settings
|
|
165
|
+
params: List of dict used to create a Parameter object.
|
|
166
|
+
Its definition on the class level enable the automatic update of the GUI settings when changing plugins
|
|
167
|
+
(even in managers mode creation). To be populated on the plugin level as the base class does't represents a
|
|
168
|
+
real hardware
|
|
169
|
+
is_multiaxes: bool
|
|
170
|
+
class level attribute. Defines if the plugin controller controls multiple axes. If True, one has to define
|
|
171
|
+
a Master instance of this plugin and slave instances of this plugin (all sharing the same controller_ID
|
|
172
|
+
parameter)
|
|
173
|
+
current_value: float
|
|
174
|
+
stores the current position after each call to the get_actuator_value in the plugin
|
|
175
|
+
target_value: float
|
|
176
|
+
stores the target position the controller should reach within epsilon
|
|
174
177
|
"""
|
|
175
178
|
|
|
176
179
|
move_done_signal = Signal(float)
|
|
177
180
|
is_multiaxes = False
|
|
178
181
|
stage_names = []
|
|
179
|
-
axes_name = []
|
|
180
182
|
params = []
|
|
181
183
|
_controller_units = ''
|
|
182
184
|
_epsilon = 1
|
|
@@ -210,7 +212,40 @@ class DAQ_Move_base(QObject):
|
|
|
210
212
|
|
|
211
213
|
self.ini_attributes()
|
|
212
214
|
|
|
215
|
+
@property
|
|
216
|
+
def axis_name(self) -> str:
|
|
217
|
+
"""Get/Set the current axis using its string identifier"""
|
|
218
|
+
limits = self.settings.child('multiaxes', 'axis').opts['limits']
|
|
219
|
+
if isinstance(limits, list):
|
|
220
|
+
return self.settings.child('multiaxes', 'axis').value()
|
|
221
|
+
elif isinstance(limits, dict):
|
|
222
|
+
return find_keys_from_val(limits, val=self.settings.child('multiaxes', 'axis').value())[0]
|
|
223
|
+
|
|
224
|
+
@axis_name.setter
|
|
225
|
+
def axis_name(self, name: str):
|
|
226
|
+
limits = self.settings.child('multiaxes', 'axis').opts['limits']
|
|
227
|
+
if name in limits:
|
|
228
|
+
if isinstance(limits, list):
|
|
229
|
+
self.settings.child('multiaxes', 'axis').setValue(name)
|
|
230
|
+
elif isinstance(limits, dict):
|
|
231
|
+
self.settings.child('multiaxes', 'axis').setValue(limits[name])
|
|
232
|
+
|
|
233
|
+
@property
|
|
234
|
+
def axis_names(self) -> Union[List, Dict]:
|
|
235
|
+
""" Get/Set the names of all axes controlled by this instrument plugin
|
|
236
|
+
|
|
237
|
+
Returns
|
|
238
|
+
-------
|
|
239
|
+
List of string or dictionary mapping names to integers
|
|
240
|
+
"""
|
|
241
|
+
return self.settings.child('multiaxes', 'axis').opts['limits']
|
|
242
|
+
|
|
243
|
+
@axis_names.setter
|
|
244
|
+
def axis_names(self, names: Union[List, Dict]):
|
|
245
|
+
self.settings.child('multiaxes', 'axis').opts['limits'] = names
|
|
246
|
+
|
|
213
247
|
def ini_attributes(self):
|
|
248
|
+
""" To be subclassed, in order to init specific attributes needed by the real implementation"""
|
|
214
249
|
self.controller = None
|
|
215
250
|
|
|
216
251
|
def ini_stage_init(self, old_controller=None, new_controller=None):
|
|
@@ -262,6 +297,7 @@ class DAQ_Move_base(QObject):
|
|
|
262
297
|
|
|
263
298
|
@property
|
|
264
299
|
def controller_units(self):
|
|
300
|
+
""" Get/Set the units of this plugin"""
|
|
265
301
|
return self._controller_units
|
|
266
302
|
|
|
267
303
|
@controller_units.setter
|
|
@@ -274,22 +310,17 @@ class DAQ_Move_base(QObject):
|
|
|
274
310
|
|
|
275
311
|
@property
|
|
276
312
|
def ispolling(self):
|
|
313
|
+
""" Get/Set the polling status"""
|
|
277
314
|
return self._ispolling
|
|
278
315
|
|
|
279
316
|
@ispolling.setter
|
|
280
317
|
def ispolling(self, polling=True):
|
|
281
318
|
self._ispolling = polling
|
|
282
319
|
|
|
283
|
-
def check_bound(self, position):
|
|
284
|
-
"""
|
|
285
|
-
|
|
286
|
-
Parameters
|
|
287
|
-
----------
|
|
288
|
-
position
|
|
289
|
-
|
|
290
|
-
Returns
|
|
291
|
-
-------
|
|
320
|
+
def check_bound(self, position: float) -> float:
|
|
321
|
+
""" Check if the current position is within the software bounds
|
|
292
322
|
|
|
323
|
+
Return the new position eventually coerced within the bounds
|
|
293
324
|
"""
|
|
294
325
|
if self.settings.child('bounds', 'is_bounds').value():
|
|
295
326
|
if position > self.settings.child('bounds', 'max_bound').value():
|
|
@@ -329,19 +360,7 @@ class DAQ_Move_base(QObject):
|
|
|
329
360
|
raise NotImplementedError
|
|
330
361
|
|
|
331
362
|
def emit_status(self, status: ThreadCommand):
|
|
332
|
-
"""
|
|
333
|
-
| Emit the statut signal from the given status parameter.
|
|
334
|
-
|
|
|
335
|
-
| The signal is sended to the gui to update the user interface.
|
|
336
|
-
|
|
337
|
-
=============== ===================== ========================================================================================================================================
|
|
338
|
-
**Parameters** **Type** **Description**
|
|
339
|
-
*status* ordered dictionnary dictionnary containing keys:
|
|
340
|
-
* *info* : string displaying various info
|
|
341
|
-
* *controller*: instance of the controller object in order to control other axes without the need to init the same controller twice
|
|
342
|
-
* *stage*: instance of the stage (axis or whatever) object
|
|
343
|
-
* *initialized*: boolean indicating if initialization has been done corretly
|
|
344
|
-
=============== ===================== ========================================================================================================================================
|
|
363
|
+
""" Emit the status_sig signal with the given status ThreadCommand back to the main GUI.
|
|
345
364
|
"""
|
|
346
365
|
if self.parent is not None:
|
|
347
366
|
self.parent.status_sig.emit(status)
|
|
@@ -349,37 +368,19 @@ class DAQ_Move_base(QObject):
|
|
|
349
368
|
else:
|
|
350
369
|
print(status)
|
|
351
370
|
|
|
352
|
-
def emit_value(self, pos):
|
|
371
|
+
def emit_value(self, pos: float):
|
|
372
|
+
"""Convenience method to emit the current actuator value back to the UI"""
|
|
373
|
+
|
|
353
374
|
self.emit_status(ThreadCommand('get_actuator_value', [pos]))
|
|
354
375
|
|
|
355
|
-
def commit_settings(self, param):
|
|
376
|
+
def commit_settings(self, param: Parameter):
|
|
356
377
|
"""
|
|
357
378
|
to subclass to transfer parameters to hardware
|
|
358
379
|
"""
|
|
359
|
-
pass
|
|
360
380
|
|
|
361
381
|
def commit_common_settings(self, param):
|
|
362
382
|
pass
|
|
363
383
|
|
|
364
|
-
def get_position_with_scaling(self, pos):
|
|
365
|
-
"""
|
|
366
|
-
Get the current position from the hardware with scaling conversion.
|
|
367
|
-
|
|
368
|
-
=============== ========= =====================
|
|
369
|
-
**Parameters** **Type** **Description**
|
|
370
|
-
*pos* float the current position
|
|
371
|
-
=============== ========= =====================
|
|
372
|
-
|
|
373
|
-
Returns
|
|
374
|
-
=======
|
|
375
|
-
float
|
|
376
|
-
the computed position.
|
|
377
|
-
"""
|
|
378
|
-
if self.settings.child('scaling', 'use_scaling').value():
|
|
379
|
-
pos = (pos - self.settings.child('scaling', 'offset').value()) * self.settings.child('scaling',
|
|
380
|
-
'scaling').value()
|
|
381
|
-
return pos
|
|
382
|
-
|
|
383
384
|
def move_done(self, position=None): # the position argument is just there to match some signature of child classes
|
|
384
385
|
"""
|
|
385
386
|
| Emit a move done signal transmitting the float position to hardware.
|
|
@@ -397,12 +398,11 @@ class DAQ_Move_base(QObject):
|
|
|
397
398
|
self.move_is_done = True
|
|
398
399
|
|
|
399
400
|
def poll_moving(self):
|
|
400
|
-
"""
|
|
401
|
-
Poll the current moving. In case of timeout emit the raise timeout Thread command.
|
|
401
|
+
""" Poll the current moving. In case of timeout emit the raise timeout Thread command.
|
|
402
402
|
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
403
|
+
See Also
|
|
404
|
+
--------
|
|
405
|
+
DAQ_utils.ThreadCommand, move_done
|
|
406
406
|
"""
|
|
407
407
|
if 'TCPServer' not in self.__class__.__name__:
|
|
408
408
|
self.start_time = perf_counter()
|
|
@@ -437,19 +437,9 @@ class DAQ_Move_base(QObject):
|
|
|
437
437
|
self.move_done(self.current_value)
|
|
438
438
|
|
|
439
439
|
def send_param_status(self, param, changes):
|
|
440
|
-
"""
|
|
441
|
-
| Send changes value updates to the gui to update consequently the User Interface.
|
|
442
|
-
| The message passing is made via the Thread Command "update_settings".
|
|
440
|
+
""" Send changes value updates to the gui to update consequently the User Interface
|
|
443
441
|
|
|
444
|
-
|
|
445
|
-
**Parameters** **Type** **Description**
|
|
446
|
-
*param* instance of pyqtgraph parameter The parameter to be checked
|
|
447
|
-
*changes* (parameter,change,infos)tuple list The (parameter,change,infos) list to be treated
|
|
448
|
-
=============== =================================== ==================================================
|
|
449
|
-
|
|
450
|
-
See Also
|
|
451
|
-
========
|
|
452
|
-
DAQ_utils.ThreadCommand
|
|
442
|
+
The message passing is made via the ThreadCommand "update_settings".
|
|
453
443
|
"""
|
|
454
444
|
|
|
455
445
|
for param, change, data in changes:
|
|
@@ -464,28 +454,24 @@ class DAQ_Move_base(QObject):
|
|
|
464
454
|
elif change == 'parent':
|
|
465
455
|
pass
|
|
466
456
|
|
|
467
|
-
def
|
|
457
|
+
def get_position_with_scaling(self, pos: float):
|
|
458
|
+
""" Get the current position from the hardware with scaling conversion.
|
|
468
459
|
"""
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
*pos* float the position to be setted
|
|
474
|
-
=============== ========= ==========================
|
|
460
|
+
if self.settings.child('scaling', 'use_scaling').value():
|
|
461
|
+
pos = (pos - self.settings.child('scaling', 'offset').value()) * self.settings.child('scaling',
|
|
462
|
+
'scaling').value()
|
|
463
|
+
return pos
|
|
475
464
|
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
float
|
|
479
|
-
the computed position.
|
|
465
|
+
def set_position_with_scaling(self, pos: float):
|
|
466
|
+
""" Set the current position from the parameter and hardware with scaling conversion.
|
|
480
467
|
"""
|
|
481
468
|
if self.settings.child('scaling', 'use_scaling').value():
|
|
482
469
|
pos = pos / self.settings.child('scaling', 'scaling').value() + self.settings.child('scaling',
|
|
483
470
|
'offset').value()
|
|
484
471
|
return pos
|
|
485
472
|
|
|
486
|
-
def set_position_relative_with_scaling(self, pos):
|
|
487
|
-
"""
|
|
488
|
-
Set the scaled positions in case of relative moves
|
|
473
|
+
def set_position_relative_with_scaling(self, pos: float):
|
|
474
|
+
""" Set the scaled positions in case of relative moves
|
|
489
475
|
"""
|
|
490
476
|
if self.settings.child('scaling', 'use_scaling').value():
|
|
491
477
|
pos = pos / self.settings.child('scaling', 'scaling').value()
|
|
@@ -493,17 +479,8 @@ class DAQ_Move_base(QObject):
|
|
|
493
479
|
|
|
494
480
|
@Slot(edict)
|
|
495
481
|
def update_settings(self, settings_parameter_dict): # settings_parameter_dict=edict(path=path,param=param)
|
|
496
|
-
"""
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
========================== =========== ==========================================================================================================
|
|
500
|
-
**Arguments** **Type** **Description**
|
|
501
|
-
*settings_parameter_dict* dictionnary Dictionnary with the path of the parameter in hardware structure as key and the parameter name as element
|
|
502
|
-
========================== =========== ==========================================================================================================
|
|
503
|
-
|
|
504
|
-
See Also
|
|
505
|
-
--------
|
|
506
|
-
send_param_status, commit_settings
|
|
482
|
+
""" Receive the settings_parameter signal from the param_tree_changed method and make hardware updates of
|
|
483
|
+
modified values.
|
|
507
484
|
"""
|
|
508
485
|
path = settings_parameter_dict['path']
|
|
509
486
|
param = settings_parameter_dict['param']
|
|
@@ -564,9 +541,9 @@ class DAQ_Move_TCP_server(DAQ_Move_base, TCPServer):
|
|
|
564
541
|
"""
|
|
565
542
|
self.client_type = "ACTUATOR"
|
|
566
543
|
DAQ_Move_base.__init__(self, parent, params_state) # initialize base class with commom attribute and methods
|
|
567
|
-
self.settings.child(
|
|
568
|
-
self.settings.child(
|
|
569
|
-
self.settings.child(
|
|
544
|
+
self.settings.child('bounds').hide()
|
|
545
|
+
self.settings.child('scaling').hide()
|
|
546
|
+
self.settings.child('epsilon').setValue(1)
|
|
570
547
|
|
|
571
548
|
TCPServer.__init__(self, self.client_type)
|
|
572
549
|
|
|
@@ -15,6 +15,7 @@ from pymodaq.utils.parameter import Parameter
|
|
|
15
15
|
from pymodaq.utils.enums import BaseEnum, enum_checker
|
|
16
16
|
from pymodaq.utils.plotting.data_viewers.viewer import ViewersEnum
|
|
17
17
|
from pymodaq.utils.exceptions import DetectorError
|
|
18
|
+
from pymodaq.utils import config as configmod
|
|
18
19
|
|
|
19
20
|
|
|
20
21
|
class DAQTypesEnum(BaseEnum):
|
|
@@ -114,6 +115,7 @@ class ControlModule(QObject):
|
|
|
114
115
|
self._tcpclient_thread = None
|
|
115
116
|
self._hardware_thread = None
|
|
116
117
|
self.module_and_data_saver = None
|
|
118
|
+
self.plugin_config: configmod.Config = None
|
|
117
119
|
|
|
118
120
|
def __repr__(self):
|
|
119
121
|
return f'{self.__class__.__name__}: {self.title}'
|
|
@@ -135,6 +137,7 @@ class ControlModule(QObject):
|
|
|
135
137
|
* raise_timeout:
|
|
136
138
|
* show_splash: Display the splash screen with attribute as message
|
|
137
139
|
* close_splash
|
|
140
|
+
* show_config: display the plugin configuration
|
|
138
141
|
"""
|
|
139
142
|
|
|
140
143
|
if status.command == "Update_Status":
|
|
@@ -284,6 +287,12 @@ class ControlModule(QObject):
|
|
|
284
287
|
import webbrowser
|
|
285
288
|
webbrowser.open(self.logger.parent.handlers[0].baseFilename)
|
|
286
289
|
|
|
290
|
+
def show_config(self, config: Config):
|
|
291
|
+
""" Display in a tree the current configuration"""
|
|
292
|
+
if config is not None:
|
|
293
|
+
config_tree = configmod.TreeFromToml(config)
|
|
294
|
+
config_tree.show_dialog()
|
|
295
|
+
|
|
287
296
|
def update_status(self, txt, log=True):
|
|
288
297
|
"""Display a message in the ui status bar and eventually log the message
|
|
289
298
|
|
|
@@ -36,6 +36,7 @@ params = [
|
|
|
36
36
|
'readonly': True},
|
|
37
37
|
{'title': 'Detector type:', 'name': 'detector_type', 'type': 'str', 'value': '', 'readonly': True},
|
|
38
38
|
{'title': 'Detector Name:', 'name': 'module_name', 'type': 'str', 'value': '', 'readonly': True},
|
|
39
|
+
{'title': 'Plugin Config:', 'name': 'plugin_config', 'type': 'bool_push', 'label': 'Show Config', },
|
|
39
40
|
{'title': 'Controller ID:', 'name': 'controller_ID', 'type': 'int', 'value': 0, 'default': 0, 'readonly': False},
|
|
40
41
|
{'title': 'Show data and process:', 'name': 'show_data', 'type': 'bool', 'value': True, },
|
|
41
42
|
{'title': 'Refresh time (ms):', 'name': 'refresh_time', 'type': 'float', 'value': 50., 'min': 0.},
|