pymodaq 5.1.5__tar.gz → 5.1.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-5.1.5 → pymodaq-5.1.7}/PKG-INFO +1 -1
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/control_modules/daq_move.py +51 -7
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/control_modules/daq_viewer.py +32 -17
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/control_modules/mocks.py +6 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/control_modules/move_utility_classes.py +3 -1
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/control_modules/utils.py +1 -2
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/dashboard.py +1 -1
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/examples/function_plotter.py +1 -1
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/extensions/daq_scan.py +16 -22
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/extensions/pid/pid_controller.py +1 -1
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/utils/chrono_timer.py +1 -1
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/utils/gui_utils/loader_utils.py +1 -1
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/utils/h5modules/module_saving.py +7 -2
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/utils/leco/leco_director.py +1 -1
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/utils/managers/modules_manager.py +1 -2
- {pymodaq-5.1.5 → pymodaq-5.1.7}/.gitignore +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/LICENSE +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/README.rst +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/pyproject.toml +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/__init__.py +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/control_modules/__init__.py +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/control_modules/daq_move_ui/__init__.py +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/control_modules/daq_move_ui/factory.py +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/control_modules/daq_move_ui/ui_base.py +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/control_modules/daq_move_ui/uis/__init__.py +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/control_modules/daq_move_ui/uis/binary.py +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/control_modules/daq_move_ui/uis/original.py +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/control_modules/daq_move_ui/uis/relative.py +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/control_modules/daq_move_ui/uis/simple.py +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/control_modules/daq_viewer_ui.py +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/control_modules/thread_commands.py +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/control_modules/ui_utils.py +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/control_modules/viewer_utility_classes.py +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/daq_utils/__init__.py +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/daq_utils/daq_utils.py +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/examples/Labview_TCP_Client/DAQ_TCP_Client.aliases +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/examples/Labview_TCP_Client/DAQ_TCP_Client.lvlps +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/examples/Labview_TCP_Client/DAQ_TCP_Client.lvproj +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/examples/Labview_TCP_Client/DAQ_TCP_Client.vi +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/examples/Labview_TCP_Client/DAQ_TCP_Server_1Dgaussian.vi +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/examples/Labview_TCP_Client/DAQ_TCP_Server_2Dgaussian.vi +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/examples/Labview_TCP_Client/DAQ_TCP_read_cmd.vi +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/examples/Labview_TCP_Client/DAQ_TCP_read_float.vi +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/examples/Labview_TCP_Client/DAQ_TCP_read_int.vi +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/examples/Labview_TCP_Client/DAQ_TCP_send_data.vi +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/examples/Labview_TCP_Client/DAQ_TCP_send_int.vi +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/examples/Labview_TCP_Client/DAQ_TCP_send_scalar.vi +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/examples/Labview_TCP_Client/DAQ_TCP_send_string.vi +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/examples/Labview_TCP_Client/client_state.ctl +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/examples/Labview_TCP_Client/cmd_types.ctl +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/examples/__init__.py +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/examples/nonlinearscanner.py +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/examples/qt_less_standalone_module.py +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/examples/tcp_client.py +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/extensions/__init__.py +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/extensions/adaptive/__init__.py +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/extensions/adaptive/adaptive_optimization.py +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/extensions/adaptive/loss_function/_1d_loss_functions.py +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/extensions/adaptive/loss_function/_2d_loss_functions.py +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/extensions/adaptive/loss_function/__init__.py +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/extensions/adaptive/loss_function/loss_factory.py +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/extensions/adaptive/utils.py +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/extensions/bayesian/__init__.py +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/extensions/bayesian/acquisition/__init__.py +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/extensions/bayesian/acquisition/acquisition_function_factory.py +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/extensions/bayesian/acquisition/base_acquisition_function.py +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/extensions/bayesian/bayesian_optimization.py +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/extensions/bayesian/utils.py +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/extensions/console.py +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/extensions/daq_logger/__init__.py +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/extensions/daq_logger/abstract.py +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/extensions/daq_logger/daq_logger.py +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/extensions/daq_logger/db/__init__.py +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/extensions/daq_logger/db/db_logger.py +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/extensions/daq_logger/db/db_logger_models.py +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/extensions/daq_logger/h5logging.py +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/extensions/daq_scan_ui.py +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/extensions/data_mixer/__init__.py +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/extensions/data_mixer/daq_0Dviewer_DataMixer.py +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/extensions/data_mixer/data_mixer.py +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/extensions/data_mixer/model.py +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/extensions/data_mixer/models/__init__.py +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/extensions/data_mixer/models/equation_model.py +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/extensions/data_mixer/models/gaussian_fit_model.py +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/extensions/data_mixer/parser.py +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/extensions/data_mixer/utils.py +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/extensions/h5browser.py +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/extensions/optimizers_base/__init__.py +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/extensions/optimizers_base/optimizer.py +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/extensions/optimizers_base/thread_commands.py +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/extensions/optimizers_base/utils.py +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/extensions/pid/__init__.py +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/extensions/pid/actuator_controller.py +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/extensions/pid/daq_move_PID.py +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/extensions/pid/utils.py +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/extensions/utils.py +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/icon.ico +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/post_treatment/__init__.py +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/post_treatment/load_and_plot.py +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/resources/__init__.py +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/resources/config_template.toml +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/resources/preset_default.xml +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/resources/setup_plugin.py +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/splash.png +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/utils/__init__.py +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/utils/array_manipulation.py +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/utils/calibration_camera.py +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/utils/config.py +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/utils/conftests.py +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/utils/daq_utils.py +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/utils/data.py +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/utils/enums.py +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/utils/exceptions.py +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/utils/gui_utils/__init__.py +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/utils/gui_utils/utils.py +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/utils/gui_utils/widgets/lcd.py +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/utils/h5modules/__init__.py +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/utils/leco/__init__.py +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/utils/leco/daq_move_LECODirector.py +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/utils/leco/daq_xDviewer_LECODirector.py +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/utils/leco/director_utils.py +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/utils/leco/pymodaq_listener.py +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/utils/leco/rpc_method_definitions.py +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/utils/leco/utils.py +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/utils/logger.py +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/utils/managers/__init__.py +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/utils/managers/batchscan_manager.py +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/utils/managers/overshoot_manager.py +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/utils/managers/preset_manager.py +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/utils/managers/preset_manager_utils.py +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/utils/managers/remote_manager.py +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/utils/math_utils.py +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/utils/messenger.py +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/utils/parameter/__init__.py +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/utils/parameter/utils.py +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/utils/scanner/__init__.py +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/utils/scanner/scan_config.py +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/utils/scanner/scan_factory.py +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/utils/scanner/scan_selector.py +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/utils/scanner/scanner.py +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/utils/scanner/scanners/_1d_scanners.py +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/utils/scanner/scanners/_2d_scanners.py +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/utils/scanner/scanners/__init__.py +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/utils/scanner/scanners/sequential.py +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/utils/scanner/scanners/tabular.py +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/utils/scanner/utils.py +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/utils/svg/__init__.py +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/utils/svg/svg_renderer.py +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/utils/svg/svg_view.py +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/utils/svg/svg_viewer2D.py +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/utils/tcp_ip/__init__.py +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/utils/tcp_ip/mysocket.py +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/utils/tcp_ip/serializer.py +0 -0
- {pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/utils/tcp_ip/tcp_server_client.py +0 -0
|
@@ -30,6 +30,7 @@ from pymodaq_utils.warnings import deprecation_msg
|
|
|
30
30
|
from pymodaq.utils.data import DataToExport, DataActuator
|
|
31
31
|
from pymodaq_data.h5modules.backends import Node
|
|
32
32
|
|
|
33
|
+
from pymodaq_gui.h5modules.saving import H5Saver
|
|
33
34
|
from pymodaq_gui.parameter import ioxml, Parameter
|
|
34
35
|
from pymodaq_gui.parameter import utils as putils
|
|
35
36
|
from pymodaq_gui.utils.utils import mkQApp
|
|
@@ -80,8 +81,6 @@ config = ControlModulesConfig()
|
|
|
80
81
|
|
|
81
82
|
HardwareController = TypeVar("HardwareController")
|
|
82
83
|
|
|
83
|
-
HardwareController = TypeVar("HardwareController")
|
|
84
|
-
|
|
85
84
|
DAQ_Move_Actuators = get_plugins("daq_move")
|
|
86
85
|
ACTUATOR_TYPES = [mov["name"] for mov in DAQ_Move_Actuators]
|
|
87
86
|
if len(ACTUATOR_TYPES) == 0:
|
|
@@ -117,7 +116,9 @@ class DAQ_Move(ParameterControlModule):
|
|
|
117
116
|
current_value_signal = Signal(DataActuator)
|
|
118
117
|
bounds_signal = Signal(bool)
|
|
119
118
|
|
|
120
|
-
params = daq_move_params
|
|
119
|
+
params = daq_move_params + [
|
|
120
|
+
{'title': 'Saver Settings:', 'name': 'saver_settings', 'type': 'group',
|
|
121
|
+
'visible': False, 'children': H5Saver.params}]
|
|
121
122
|
|
|
122
123
|
listener_class = MoveActorListener
|
|
123
124
|
ui: Optional[DAQ_Move_UI_Base]
|
|
@@ -166,7 +167,14 @@ class DAQ_Move(ParameterControlModule):
|
|
|
166
167
|
if len(ACTUATOR_TYPES) > 0: # will be 0 if no valid plugins are installed
|
|
167
168
|
self.actuator = kwargs.get("actuator", ACTUATOR_TYPES[0])
|
|
168
169
|
|
|
169
|
-
self.
|
|
170
|
+
self._module_and_data_saver: module_saving.ActuatorTimeSaver = None
|
|
171
|
+
for hidden_param in ('custom_name',
|
|
172
|
+
'current_scan_name',
|
|
173
|
+
'current_scan_path',
|
|
174
|
+
'current_h5_file',
|
|
175
|
+
'new_file',
|
|
176
|
+
'base_name'):
|
|
177
|
+
self.settings.child('saver_settings', hidden_param).setOpts(visible=False)
|
|
170
178
|
|
|
171
179
|
self._move_done_bool = True
|
|
172
180
|
|
|
@@ -174,7 +182,7 @@ class DAQ_Move(ParameterControlModule):
|
|
|
174
182
|
self._target_value = DataActuator(title, units=self.units)
|
|
175
183
|
self._relative_value = DataActuator(title, units=self.units)
|
|
176
184
|
|
|
177
|
-
self._refresh_timer = QTimer()
|
|
185
|
+
self._refresh_timer = QTimer(self)
|
|
178
186
|
self._refresh_timer.timeout.connect(self.get_actuator_value)
|
|
179
187
|
|
|
180
188
|
def process_ui_cmds(self, cmd: utils.ThreadCommand):
|
|
@@ -268,7 +276,7 @@ class DAQ_Move(ParameterControlModule):
|
|
|
268
276
|
if dte is None:
|
|
269
277
|
dte = DataToExport(name=self.title, data=[self._current_value])
|
|
270
278
|
self._add_data_to_saver(dte, where=where)
|
|
271
|
-
|
|
279
|
+
self.settings.child('saver_settings', 'N_saved').setValue(self.settings['saver_settings', 'N_saved'] + 1)
|
|
272
280
|
|
|
273
281
|
def _add_data_to_saver(self, data: DataToExport, where=None, **kwargs):
|
|
274
282
|
"""Adds DataToExport data to the current node using the declared module_and_data_saver
|
|
@@ -482,12 +490,44 @@ class DAQ_Move(ParameterControlModule):
|
|
|
482
490
|
def value_changed(self, param: Parameter):
|
|
483
491
|
"""Apply changes of value in the settings"""
|
|
484
492
|
super().value_changed(param=param)
|
|
493
|
+
path = self.settings.childPath(param)
|
|
485
494
|
|
|
486
495
|
if param.name() == "refresh_timeout":
|
|
487
496
|
self._refresh_timer.setInterval(param.value())
|
|
488
497
|
|
|
498
|
+
elif param.name() == 'continuous_saving_opt':
|
|
499
|
+
self.settings.child('saver_settings').setOpts(visible=param.value())
|
|
500
|
+
|
|
501
|
+
elif param.name() in putils.iter_children(self.settings.child('saver_settings'), []):
|
|
502
|
+
if param.name() == 'do_save':
|
|
503
|
+
self.setup_continuous_saving(param.value())
|
|
504
|
+
self.h5saver.settings.child(*path[1:]).setValue(param.value())
|
|
505
|
+
|
|
489
506
|
self._update_settings(param=param)
|
|
490
507
|
|
|
508
|
+
def setup_continuous_saving(self, init: bool = True):
|
|
509
|
+
"""Configure the objects dealing with the continuous saving mode"""
|
|
510
|
+
if init:
|
|
511
|
+
self.module_and_data_saver = module_saving.ActuatorTimeSaver(self)
|
|
512
|
+
self.module_and_data_saver.h5saver = self.h5saver
|
|
513
|
+
self.h5saver.settings.child('do_save').sigValueChanged.connect(self._init_continuous_save)
|
|
514
|
+
else:
|
|
515
|
+
self.h5saver.close_file()
|
|
516
|
+
|
|
517
|
+
def _init_continuous_save(self):
|
|
518
|
+
""" Initialize the continuous saving H5Saver object
|
|
519
|
+
|
|
520
|
+
Update the module_and_data_saver attribute as :class:`DetectorTimeSaver` object
|
|
521
|
+
"""
|
|
522
|
+
if self.settings.child('saver_settings', 'do_save').value():
|
|
523
|
+
|
|
524
|
+
self.settings.child('saver_settings', 'base_name').setValue('Data')
|
|
525
|
+
self.settings.child('saver_settings', 'N_saved').show()
|
|
526
|
+
self.settings.child('saver_settings', 'N_saved').setValue(0)
|
|
527
|
+
self.h5saver.init_file(update_h5=True)
|
|
528
|
+
else:
|
|
529
|
+
self.settings.child('saver_settings', 'N_saved').hide()
|
|
530
|
+
|
|
491
531
|
def param_deleted(self, param):
|
|
492
532
|
"""Apply deletion of settings"""
|
|
493
533
|
if param.name() not in putils.iter_children(
|
|
@@ -564,10 +604,14 @@ class DAQ_Move(ParameterControlModule):
|
|
|
564
604
|
"show_graph"
|
|
565
605
|
):
|
|
566
606
|
self.ui.show_data(DataToExport(name=self.title, data=[data_act]))
|
|
607
|
+
|
|
567
608
|
self._current_value = data_act
|
|
609
|
+
if self.settings['saver_settings', 'do_save']:
|
|
610
|
+
self.append_data()
|
|
611
|
+
|
|
568
612
|
self.current_value_signal.emit(self._current_value)
|
|
569
613
|
if (
|
|
570
|
-
|
|
614
|
+
self.settings["main_settings", "tcpip", "tcp_connected"]
|
|
571
615
|
and self._send_to_tcpip
|
|
572
616
|
):
|
|
573
617
|
self._command_tcpip.emit(ThreadCommand("position_is", data_act))
|
|
@@ -103,7 +103,9 @@ class DAQ_Viewer(ParameterControlModule):
|
|
|
103
103
|
data_saved = Signal()
|
|
104
104
|
grab_status = Signal(bool)
|
|
105
105
|
|
|
106
|
-
params = daq_viewer_params
|
|
106
|
+
params = daq_viewer_params + [
|
|
107
|
+
{'title': 'Saver Settings:', 'name': 'saver_settings', 'type': 'group',
|
|
108
|
+
'visible': False, 'children': H5Saver.params}]
|
|
107
109
|
|
|
108
110
|
listener_class = ViewerActorListener
|
|
109
111
|
ui: Optional[DAQ_Viewer_UI]
|
|
@@ -162,7 +164,6 @@ class DAQ_Viewer(ParameterControlModule):
|
|
|
162
164
|
module_saving.DetectorExtendedSaver] = None
|
|
163
165
|
self._h5saver_continuous: Optional[H5Saver] = None
|
|
164
166
|
self._ind_continuous_grab = 0
|
|
165
|
-
self.setup_continuous_saving()
|
|
166
167
|
|
|
167
168
|
self.settings.child('main_settings', 'DAQ_type').setValue(self.daq_type.name)
|
|
168
169
|
self._detectors: List[str] = [det_dict['name'] for det_dict in DET_TYPES[self.daq_type.name]]
|
|
@@ -171,6 +172,13 @@ class DAQ_Viewer(ParameterControlModule):
|
|
|
171
172
|
else:
|
|
172
173
|
raise DetectorError('No detected Detector')
|
|
173
174
|
self.settings.child('main_settings', 'detector_type').setValue(self._detector)
|
|
175
|
+
for hidden_param in ('custom_name',
|
|
176
|
+
'current_scan_name',
|
|
177
|
+
'current_scan_path',
|
|
178
|
+
'current_h5_file',
|
|
179
|
+
'new_file',
|
|
180
|
+
'base_name'):
|
|
181
|
+
self.settings.child('saver_settings', hidden_param).setOpts(visible=False)
|
|
174
182
|
|
|
175
183
|
self._grabing: bool = False
|
|
176
184
|
self._do_bkg: bool = False
|
|
@@ -199,14 +207,15 @@ class DAQ_Viewer(ParameterControlModule):
|
|
|
199
207
|
def __repr__(self):
|
|
200
208
|
return f'{self.__class__.__name__}: {self.title} ({self.daq_type}/{self.detector}'
|
|
201
209
|
|
|
202
|
-
def setup_continuous_saving(self):
|
|
210
|
+
def setup_continuous_saving(self, init: bool = True):
|
|
203
211
|
"""Configure the objects dealing with the continuous saving mode"""
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
self.
|
|
212
|
+
if init:
|
|
213
|
+
self.module_and_data_saver = module_saving.DetectorSaver(self)
|
|
214
|
+
self._h5saver_continuous = H5Saver(save_type='detector')
|
|
215
|
+
self._h5saver_continuous.settings.child('do_save').sigValueChanged.connect(self._init_continuous_save)
|
|
216
|
+
else:
|
|
217
|
+
self._h5saver_continuous.close_file()
|
|
218
|
+
|
|
210
219
|
|
|
211
220
|
def process_ui_cmds(self, cmd: utils.ThreadCommand):
|
|
212
221
|
"""Process commands sent by actions done in the ui
|
|
@@ -632,9 +641,9 @@ class DAQ_Viewer(ParameterControlModule):
|
|
|
632
641
|
"""
|
|
633
642
|
if self._h5saver_continuous.settings.child('do_save').value():
|
|
634
643
|
|
|
635
|
-
self.
|
|
636
|
-
self.
|
|
637
|
-
self.
|
|
644
|
+
self.settings.child('saver_settings', 'base_name').setValue('Data')
|
|
645
|
+
self.settings.child('saver_settings', 'N_saved').show()
|
|
646
|
+
self.settings.child('saver_settings', 'N_saved').setValue(0)
|
|
638
647
|
self.module_and_data_saver.h5saver = self._h5saver_continuous
|
|
639
648
|
self._h5saver_continuous.init_file(update_h5=True)
|
|
640
649
|
|
|
@@ -645,7 +654,7 @@ class DAQ_Viewer(ParameterControlModule):
|
|
|
645
654
|
self.grab_done_signal.connect(self.append_data)
|
|
646
655
|
else:
|
|
647
656
|
self._do_continuous_save = False
|
|
648
|
-
self.
|
|
657
|
+
self.settings.child('saver_settings', 'N_saved').hide()
|
|
649
658
|
self.grab_done_signal.disconnect(self.append_data)
|
|
650
659
|
|
|
651
660
|
try:
|
|
@@ -674,13 +683,13 @@ class DAQ_Viewer(ParameterControlModule):
|
|
|
674
683
|
dte = self._data_to_save_export
|
|
675
684
|
init_step = kwargs.pop('init_step', None)
|
|
676
685
|
if init_step is None:
|
|
677
|
-
init_step = self.
|
|
686
|
+
init_step = self.settings['saver_settings', 'N_saved'] == 0
|
|
678
687
|
self._add_data_to_saver(dte,
|
|
679
688
|
init_step=init_step,
|
|
680
689
|
where=where,
|
|
681
690
|
**kwargs)
|
|
682
691
|
|
|
683
|
-
self.
|
|
692
|
+
self.settings.child('saver_settings', 'N_saved').setValue(self.settings['saver_settings', 'N_saved'] + 1)
|
|
684
693
|
|
|
685
694
|
def insert_data(self, indexes: Tuple[int], where: Union[Node, str] = None,
|
|
686
695
|
distribution=DataDistribution['uniform']):
|
|
@@ -960,7 +969,7 @@ class DAQ_Viewer(ParameterControlModule):
|
|
|
960
969
|
|
|
961
970
|
path = self.settings.childPath(param)
|
|
962
971
|
if param.name() == 'DAQ_type':
|
|
963
|
-
self.
|
|
972
|
+
self.settings.child('saver_settings', 'do_save').setValue(False)
|
|
964
973
|
self.settings.child('main_settings', 'axes').show(param.value() == 'DAQ2D')
|
|
965
974
|
|
|
966
975
|
elif param.name() == 'show_averaging':
|
|
@@ -992,12 +1001,18 @@ class DAQ_Viewer(ParameterControlModule):
|
|
|
992
1001
|
viewer.x_axis, viewer.y_axis = self.get_scaling_options()
|
|
993
1002
|
|
|
994
1003
|
elif param.name() == 'continuous_saving_opt':
|
|
995
|
-
self.
|
|
1004
|
+
self.settings.child('saver_settings').setOpts(visible=param.value())
|
|
1005
|
+
|
|
996
1006
|
|
|
997
1007
|
elif param.name() == 'wait_time':
|
|
998
1008
|
self.command_hardware.emit(ThreadCommand(ControlToHardwareViewer.UPDATE_WAIT_TIME,
|
|
999
1009
|
[param.value()]))
|
|
1000
1010
|
|
|
1011
|
+
elif param.name() in putils.iter_children(self.settings.child('saver_settings'), []):
|
|
1012
|
+
if param.name() == 'do_save':
|
|
1013
|
+
self.setup_continuous_saving(param.value())
|
|
1014
|
+
self._h5saver_continuous.settings.child(*path[1:]).setValue(param.value())
|
|
1015
|
+
|
|
1001
1016
|
self._update_settings(param=param)
|
|
1002
1017
|
|
|
1003
1018
|
def child_added(self, param, data):
|
|
@@ -17,6 +17,8 @@ class MockDAQViewer:
|
|
|
17
17
|
self.h5saver = h5saver
|
|
18
18
|
self.title = title
|
|
19
19
|
self.module_and_data_saver = DetectorSaver(self)
|
|
20
|
+
self.module_and_data_saver.h5saver = h5saver
|
|
21
|
+
self._module_and_data_saver = self.module_and_data_saver
|
|
20
22
|
self.ui = None
|
|
21
23
|
|
|
22
24
|
|
|
@@ -28,6 +30,8 @@ class MockDAQMove:
|
|
|
28
30
|
self.h5saver = h5saver
|
|
29
31
|
self.title = title
|
|
30
32
|
self.module_and_data_saver = ActuatorTimeSaver(self)
|
|
33
|
+
self.module_and_data_saver.h5saver = h5saver
|
|
34
|
+
self._module_and_data_saver = self.module_and_data_saver
|
|
31
35
|
self.ui = None
|
|
32
36
|
|
|
33
37
|
|
|
@@ -35,6 +39,8 @@ class ModulesManagerMock:
|
|
|
35
39
|
def __init__(self, actuators, detectors):
|
|
36
40
|
self.modules_all = actuators + detectors
|
|
37
41
|
self.modules = actuators + detectors
|
|
42
|
+
self.detectors_all = detectors
|
|
43
|
+
self.actuators_all = actuators
|
|
38
44
|
|
|
39
45
|
|
|
40
46
|
class MockScan:
|
|
@@ -194,6 +194,8 @@ params = [
|
|
|
194
194
|
|
|
195
195
|
{'title': 'Refresh value (ms):', 'name': 'refresh_timeout', 'type': 'int',
|
|
196
196
|
'value': config('actuator', 'refresh_timeout_ms')},
|
|
197
|
+
{'title': 'Continuous saving:', 'name': 'continuous_saving_opt', 'type': 'bool', 'default': False,
|
|
198
|
+
'value': False},
|
|
197
199
|
{'title': 'TCP/IP options:', 'name': 'tcpip', 'type': 'group', 'visible': True, 'expanded': False,
|
|
198
200
|
'children': [
|
|
199
201
|
{'title': 'Connect to server:', 'name': 'connect_server', 'type': 'bool_push', 'label': 'Connect',
|
|
@@ -337,7 +339,7 @@ class DAQ_Move_base(QObject):
|
|
|
337
339
|
data=[np.zeros(self.data_shape, dtype=float)],
|
|
338
340
|
units=self.axis_unit)
|
|
339
341
|
|
|
340
|
-
self.poll_timer = QTimer()
|
|
342
|
+
self.poll_timer = QTimer(self)
|
|
341
343
|
self.poll_timer.setInterval(config('actuator', 'polling_interval_ms'))
|
|
342
344
|
self._poll_timeout = config('actuator', 'polling_timeout_s')
|
|
343
345
|
self.poll_timer.timeout.connect(self.check_target_reached)
|
|
@@ -168,7 +168,7 @@ class ControlModule(QObject):
|
|
|
168
168
|
|
|
169
169
|
@property
|
|
170
170
|
def module_and_data_saver(self):
|
|
171
|
-
if not self._module_and_data_saver.h5saver.isopen():
|
|
171
|
+
if self._module_and_data_saver.h5saver is None or not self._module_and_data_saver.h5saver.isopen():
|
|
172
172
|
self._module_and_data_saver.h5saver = self.h5saver
|
|
173
173
|
return self._module_and_data_saver
|
|
174
174
|
|
|
@@ -177,7 +177,6 @@ class ControlModule(QObject):
|
|
|
177
177
|
self._module_and_data_saver = mod
|
|
178
178
|
self._module_and_data_saver.h5saver = self.h5saver
|
|
179
179
|
|
|
180
|
-
|
|
181
180
|
def custom_command(self, command: str, **kwargs):
|
|
182
181
|
self.command_hardware.emit(ThreadCommand(command, kwargs))
|
|
183
182
|
|
|
@@ -233,7 +233,7 @@ class DashBoard(CustomApp):
|
|
|
233
233
|
self.preset_manager = None
|
|
234
234
|
self.roi_saver: ROISaver = None
|
|
235
235
|
|
|
236
|
-
self.remote_timer = QtCore.QTimer()
|
|
236
|
+
self.remote_timer = QtCore.QTimer(self)
|
|
237
237
|
self.remote_manager = None
|
|
238
238
|
self.shortcuts = dict([])
|
|
239
239
|
self.joysticks = dict([])
|
|
@@ -54,7 +54,7 @@ class FunctionPlotter(CustomApp):
|
|
|
54
54
|
# self.setup_actions() # see ActionManager MixIn class
|
|
55
55
|
# self.setup_menu()
|
|
56
56
|
# self.connect_things()
|
|
57
|
-
self.timer = QTimer()
|
|
57
|
+
self.timer = QTimer(self)
|
|
58
58
|
self.timer.setInterval(self.settings['plot_refresh'])
|
|
59
59
|
self.timer.timeout.connect(self.plot_timer)
|
|
60
60
|
|
|
@@ -151,24 +151,24 @@ class DAQScan(QObject, ParameterManager):
|
|
|
151
151
|
self.plot_colors = utils.plot_colors
|
|
152
152
|
|
|
153
153
|
self.runner_thread: QThread = None
|
|
154
|
-
self._h5saver: H5Saver = None
|
|
155
|
-
self._module_and_data_saver: module_saving.ScanSaver = None
|
|
156
154
|
|
|
157
155
|
self.modules_manager = ModulesManager(self.dashboard.detector_modules, self.dashboard.actuators_modules)
|
|
158
156
|
self.modules_manager.settings.child('data_dimensions').setOpts(expanded=False)
|
|
159
157
|
self.modules_manager.settings.child('actuators_positions').setOpts(expanded=False)
|
|
160
158
|
self.modules_manager.detectors_changed.connect(self.clear_plot_from)
|
|
161
159
|
|
|
162
|
-
|
|
160
|
+
|
|
161
|
+
self._h5saver = H5Saver(backend=config_utils('general', 'hdf5_backend'))
|
|
162
|
+
self._h5saver.settings.child('do_save').hide()
|
|
163
|
+
self._h5saver.settings.child('custom_name').hide()
|
|
164
|
+
self._h5saver.new_file_sig.connect(self.create_new_file)
|
|
165
|
+
|
|
166
|
+
self._module_and_data_saver: module_saving.ScanSaver = module_saving.ScanSaver(self)
|
|
163
167
|
|
|
164
168
|
self.extended_saver: data_saving.DataToExportExtendedSaver = None
|
|
165
169
|
self.h5temp: H5Saver = None
|
|
166
170
|
self.temp_path: tempfile.TemporaryDirectory = None
|
|
167
171
|
|
|
168
|
-
self.h5saver.settings.child('do_save').hide()
|
|
169
|
-
self.h5saver.settings.child('custom_name').hide()
|
|
170
|
-
self.h5saver.new_file_sig.connect(self.create_new_file)
|
|
171
|
-
|
|
172
172
|
self.scanner = Scanner(actuators=self.modules_manager.actuators) # , adaptive_losses=adaptive_losses)
|
|
173
173
|
self.scan_parameters = None
|
|
174
174
|
|
|
@@ -186,7 +186,7 @@ class DAQScan(QObject, ParameterManager):
|
|
|
186
186
|
self.set_config()
|
|
187
187
|
|
|
188
188
|
self.live_plotter = LoaderPlotter(self.dockarea)
|
|
189
|
-
self.live_timer = QtCore.QTimer()
|
|
189
|
+
self.live_timer = QtCore.QTimer(self)
|
|
190
190
|
self.live_timer.timeout.connect(self.update_live_plots)
|
|
191
191
|
|
|
192
192
|
self.ui.enable_start_stop(True)
|
|
@@ -202,7 +202,7 @@ class DAQScan(QObject, ParameterManager):
|
|
|
202
202
|
self.settings.child('plot_options', 'plot_1d').setValue(data1D)
|
|
203
203
|
|
|
204
204
|
def setup_ui(self):
|
|
205
|
-
self.ui.populate_toolbox_widget([self.settings_tree, self.
|
|
205
|
+
self.ui.populate_toolbox_widget([self.settings_tree, self._h5saver.settings_tree],
|
|
206
206
|
['General Settings', 'Save Settings'])
|
|
207
207
|
|
|
208
208
|
self.ui.set_scanner_settings(self.scanner.parent_widget)
|
|
@@ -526,6 +526,9 @@ class DAQScan(QObject, ParameterManager):
|
|
|
526
526
|
def h5saver(self):
|
|
527
527
|
if self._h5saver is None:
|
|
528
528
|
self._h5saver = H5Saver(backend=config_utils('general', 'hdf5_backend'))
|
|
529
|
+
self._h5saver.settings.child('do_save').hide()
|
|
530
|
+
self._h5saver.settings.child('custom_name').hide()
|
|
531
|
+
self._h5saver.new_file_sig.connect(self.create_new_file)
|
|
529
532
|
if self._h5saver.h5_file is None:
|
|
530
533
|
self._h5saver.init_file(update_h5=True)
|
|
531
534
|
if not self._h5saver.isopen():
|
|
@@ -795,6 +798,7 @@ class DAQScan(QObject, ParameterManager):
|
|
|
795
798
|
In case the dialog is cancelled, return False and aborts the scan
|
|
796
799
|
"""
|
|
797
800
|
try:
|
|
801
|
+
|
|
798
802
|
res = self.update_scan_info()
|
|
799
803
|
if not res:
|
|
800
804
|
return False
|
|
@@ -822,17 +826,6 @@ class DAQScan(QObject, ParameterManager):
|
|
|
822
826
|
text="There are not enough or too much selected move modules for this scan")
|
|
823
827
|
return False
|
|
824
828
|
|
|
825
|
-
## TODO the stuff about adaptive scans have to be moved into a dedicated extension. M
|
|
826
|
-
## Most similat to the Bayesian one!
|
|
827
|
-
if self.scanner.scan_sub_type == 'Adaptive':
|
|
828
|
-
#todo include this in scanners objects for the adaptive scanners
|
|
829
|
-
if len(self.modules_manager.get_selected_probed_data('0D')) == 0:
|
|
830
|
-
messagebox(
|
|
831
|
-
text="In adaptive mode, you have to pick a 0D signal from which the "
|
|
832
|
-
"algorithm will determine the next positions to scan, see 'probe_data'"
|
|
833
|
-
" in the modules selector panel")
|
|
834
|
-
return False
|
|
835
|
-
|
|
836
829
|
self.ui.n_scan_steps = self.scanner.n_steps
|
|
837
830
|
|
|
838
831
|
# check if the modules are initialized
|
|
@@ -907,6 +900,7 @@ class DAQScan(QObject, ParameterManager):
|
|
|
907
900
|
if self.ui.is_action_checked('move_at'):
|
|
908
901
|
self.ui.get_action('move_at').trigger()
|
|
909
902
|
|
|
903
|
+
self._module_and_data_saver.h5saver = self.h5saver
|
|
910
904
|
res = self.set_scan()
|
|
911
905
|
if res:
|
|
912
906
|
# deactivate module controls using remote_control
|
|
@@ -926,9 +920,9 @@ class DAQScan(QObject, ParameterManager):
|
|
|
926
920
|
else:
|
|
927
921
|
scan_shape = self.scanner.get_scan_shape()
|
|
928
922
|
for det in self.modules_manager.detectors:
|
|
929
|
-
det.
|
|
923
|
+
det._module_and_data_saver = (
|
|
930
924
|
module_saving.DetectorExtendedSaver(det, scan_shape))
|
|
931
|
-
self.
|
|
925
|
+
self._module_and_data_saver.h5saver = self.h5saver # force the update as the h5saver will also be set on each detectors
|
|
932
926
|
|
|
933
927
|
# mandatory to deal with multithreads
|
|
934
928
|
if self.runner_thread is not None:
|
|
@@ -848,7 +848,7 @@ class PIDRunner(QObject):
|
|
|
848
848
|
[queue_input.append(output) for queue_input, output in zip(self.queue_inputs, self.outputs)] # Prefill queues with initial output
|
|
849
849
|
self.clear_queues = True # Clear queues on first iteration
|
|
850
850
|
|
|
851
|
-
# self.timeout_timer = QtCore.QTimer()
|
|
851
|
+
# self.timeout_timer = QtCore.QTimer(self)
|
|
852
852
|
# self.timeout_timer.setInterval(10000)
|
|
853
853
|
# self.timeout_scan_flag = False
|
|
854
854
|
# self.timeout_timer.timeout.connect(self.timeout)
|
|
@@ -43,7 +43,7 @@ class ChronoTimer(QObject):
|
|
|
43
43
|
self.duration = timedelta(**duration) # seconds
|
|
44
44
|
self.displayed_time = 0 # in seconds
|
|
45
45
|
self.started = False
|
|
46
|
-
self.timer = QTimer()
|
|
46
|
+
self.timer = QTimer(self)
|
|
47
47
|
self.timer.setInterval(100)
|
|
48
48
|
self.timer.timeout.connect(self.display_time)
|
|
49
49
|
|
|
@@ -8,7 +8,7 @@ from pymodaq.utils.config import get_set_preset_path
|
|
|
8
8
|
from pymodaq.extensions.utils import CustomExt
|
|
9
9
|
|
|
10
10
|
|
|
11
|
-
def load_dashboard_with_preset(preset_name: str, extension_name: str) -> \
|
|
11
|
+
def load_dashboard_with_preset(preset_name: str, extension_name: str = None) -> \
|
|
12
12
|
(DashBoard, CustomExt, QMainWindow):
|
|
13
13
|
|
|
14
14
|
""" Load the Dashboard using a given preset then load an extension
|
|
@@ -377,10 +377,15 @@ class ScanSaver(ModuleSaver):
|
|
|
377
377
|
self._module: DAQScan = module
|
|
378
378
|
self._h5saver = None
|
|
379
379
|
|
|
380
|
+
for detector in self._module.modules_manager.detectors_all:
|
|
381
|
+
detector._module_and_data_saver = DetectorSaver(detector)
|
|
382
|
+
for actuator in self._module.modules_manager.actuators_all:
|
|
383
|
+
actuator._module_and_data_saver = ActuatorSaver(actuator)
|
|
384
|
+
|
|
380
385
|
def update_after_h5changed(self):
|
|
381
386
|
for module in self._module.modules_manager.modules_all:
|
|
382
|
-
if hasattr(module, '
|
|
383
|
-
module.
|
|
387
|
+
if hasattr(module, '_module_and_data_saver'):
|
|
388
|
+
module._module_and_data_saver.h5saver = self.h5saver
|
|
384
389
|
|
|
385
390
|
def forget_h5(self):
|
|
386
391
|
for module in self._module.modules_manager.modules_all:
|
|
@@ -99,7 +99,7 @@ class LECODirector:
|
|
|
99
99
|
|
|
100
100
|
def start_timer(self) -> None:
|
|
101
101
|
"""To be called in child classes."""
|
|
102
|
-
self.timer = QTimer()
|
|
102
|
+
self.timer = QTimer(self)
|
|
103
103
|
self.timer.timeout.connect(self.check_actor_connection)
|
|
104
104
|
try:
|
|
105
105
|
# cast is used by the type checker to infer the returned type (when many are possible)
|
|
@@ -194,7 +194,7 @@ class ModulesManager(QObject, ParameterManager):
|
|
|
194
194
|
return self.get_mods_from_names(self.selected_detectors_name)
|
|
195
195
|
|
|
196
196
|
@property
|
|
197
|
-
def detectors_all(self):
|
|
197
|
+
def detectors_all(self) -> List['DAQ_Viewer']:
|
|
198
198
|
"""Get/Set the list of all detectors"""
|
|
199
199
|
return self._detectors
|
|
200
200
|
|
|
@@ -202,7 +202,6 @@ class ModulesManager(QObject, ParameterManager):
|
|
|
202
202
|
def detectors_all(self, detectors: List['DAQ_Viewer']):
|
|
203
203
|
self._detectors = detectors
|
|
204
204
|
|
|
205
|
-
|
|
206
205
|
@property
|
|
207
206
|
def actuators(self) -> List['DAQ_Move']:
|
|
208
207
|
"""Get the list of selected actuators"""
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/examples/Labview_TCP_Client/DAQ_TCP_Client.aliases
RENAMED
|
File without changes
|
{pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/examples/Labview_TCP_Client/DAQ_TCP_Client.lvlps
RENAMED
|
File without changes
|
{pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/examples/Labview_TCP_Client/DAQ_TCP_Client.lvproj
RENAMED
|
File without changes
|
|
File without changes
|
{pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/examples/Labview_TCP_Client/DAQ_TCP_Server_1Dgaussian.vi
RENAMED
|
File without changes
|
{pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/examples/Labview_TCP_Client/DAQ_TCP_Server_2Dgaussian.vi
RENAMED
|
File without changes
|
|
File without changes
|
{pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/examples/Labview_TCP_Client/DAQ_TCP_read_float.vi
RENAMED
|
File without changes
|
|
File without changes
|
{pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/examples/Labview_TCP_Client/DAQ_TCP_send_data.vi
RENAMED
|
File without changes
|
|
File without changes
|
{pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/examples/Labview_TCP_Client/DAQ_TCP_send_scalar.vi
RENAMED
|
File without changes
|
{pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/examples/Labview_TCP_Client/DAQ_TCP_send_string.vi
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/extensions/adaptive/loss_function/_1d_loss_functions.py
RENAMED
|
File without changes
|
{pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/extensions/adaptive/loss_function/_2d_loss_functions.py
RENAMED
|
File without changes
|
|
File without changes
|
{pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/extensions/adaptive/loss_function/loss_factory.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{pymodaq-5.1.5 → pymodaq-5.1.7}/src/pymodaq/extensions/data_mixer/models/gaussian_fit_model.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|