pymodaq 5.0.17__py3-none-any.whl → 5.1.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of pymodaq might be problematic. Click here for more details.
- pymodaq/__init__.py +23 -11
- pymodaq/control_modules/__init__.py +1 -0
- pymodaq/control_modules/daq_move.py +458 -246
- pymodaq/control_modules/daq_move_ui/__init__.py +0 -0
- pymodaq/control_modules/daq_move_ui/factory.py +48 -0
- pymodaq/control_modules/{daq_move_ui.py → daq_move_ui/ui_base.py} +168 -210
- pymodaq/control_modules/daq_move_ui/uis/__init__.py +0 -0
- pymodaq/control_modules/daq_move_ui/uis/binary.py +139 -0
- pymodaq/control_modules/daq_move_ui/uis/original.py +120 -0
- pymodaq/control_modules/daq_move_ui/uis/relative.py +124 -0
- pymodaq/control_modules/daq_move_ui/uis/simple.py +126 -0
- pymodaq/control_modules/daq_viewer.py +113 -101
- pymodaq/control_modules/daq_viewer_ui.py +41 -31
- pymodaq/control_modules/mocks.py +2 -2
- pymodaq/control_modules/move_utility_classes.py +113 -41
- pymodaq/control_modules/thread_commands.py +137 -0
- pymodaq/control_modules/ui_utils.py +72 -0
- pymodaq/control_modules/utils.py +107 -63
- pymodaq/control_modules/viewer_utility_classes.py +13 -17
- pymodaq/dashboard.py +1294 -625
- pymodaq/examples/qt_less_standalone_module.py +48 -11
- pymodaq/extensions/__init__.py +8 -3
- pymodaq/extensions/adaptive/__init__.py +2 -0
- pymodaq/extensions/adaptive/adaptive_optimization.py +179 -0
- pymodaq/extensions/adaptive/loss_function/_1d_loss_functions.py +73 -0
- pymodaq/extensions/adaptive/loss_function/_2d_loss_functions.py +73 -0
- pymodaq/extensions/adaptive/loss_function/__init__.py +3 -0
- pymodaq/extensions/adaptive/loss_function/loss_factory.py +110 -0
- pymodaq/extensions/adaptive/utils.py +123 -0
- pymodaq/extensions/bayesian/__init__.py +1 -1
- pymodaq/extensions/bayesian/acquisition/__init__.py +2 -0
- pymodaq/extensions/bayesian/acquisition/acquisition_function_factory.py +80 -0
- pymodaq/extensions/bayesian/acquisition/base_acquisition_function.py +105 -0
- pymodaq/extensions/bayesian/bayesian_optimization.py +143 -0
- pymodaq/extensions/bayesian/utils.py +71 -297
- pymodaq/extensions/daq_logger/daq_logger.py +7 -12
- pymodaq/extensions/daq_logger/h5logging.py +1 -1
- pymodaq/extensions/daq_scan.py +30 -55
- pymodaq/extensions/data_mixer/__init__.py +0 -0
- pymodaq/extensions/data_mixer/daq_0Dviewer_DataMixer.py +97 -0
- pymodaq/extensions/data_mixer/data_mixer.py +262 -0
- pymodaq/extensions/data_mixer/model.py +108 -0
- pymodaq/extensions/data_mixer/models/__init__.py +0 -0
- pymodaq/extensions/data_mixer/models/equation_model.py +91 -0
- pymodaq/extensions/data_mixer/models/gaussian_fit_model.py +65 -0
- pymodaq/extensions/data_mixer/parser.py +53 -0
- pymodaq/extensions/data_mixer/utils.py +23 -0
- pymodaq/extensions/h5browser.py +3 -34
- pymodaq/extensions/optimizers_base/__init__.py +0 -0
- pymodaq/extensions/optimizers_base/optimizer.py +1016 -0
- pymodaq/extensions/optimizers_base/thread_commands.py +22 -0
- pymodaq/extensions/optimizers_base/utils.py +427 -0
- pymodaq/extensions/pid/actuator_controller.py +3 -2
- pymodaq/extensions/pid/daq_move_PID.py +107 -30
- pymodaq/extensions/pid/pid_controller.py +613 -287
- pymodaq/extensions/pid/utils.py +8 -5
- pymodaq/extensions/utils.py +17 -2
- pymodaq/resources/config_template.toml +57 -0
- pymodaq/resources/preset_default.xml +1 -1
- pymodaq/utils/config.py +13 -4
- pymodaq/utils/daq_utils.py +14 -0
- pymodaq/utils/data.py +1 -0
- pymodaq/utils/gui_utils/loader_utils.py +25 -15
- pymodaq/utils/h5modules/module_saving.py +134 -22
- pymodaq/utils/leco/daq_move_LECODirector.py +123 -84
- pymodaq/utils/leco/daq_xDviewer_LECODirector.py +84 -97
- pymodaq/utils/leco/director_utils.py +32 -16
- pymodaq/utils/leco/leco_director.py +104 -27
- pymodaq/utils/leco/pymodaq_listener.py +186 -97
- pymodaq/utils/leco/rpc_method_definitions.py +43 -0
- pymodaq/utils/leco/utils.py +25 -25
- pymodaq/utils/managers/batchscan_manager.py +12 -11
- pymodaq/utils/managers/modules_manager.py +74 -33
- pymodaq/utils/managers/overshoot_manager.py +11 -10
- pymodaq/utils/managers/preset_manager.py +100 -64
- pymodaq/utils/managers/preset_manager_utils.py +163 -107
- pymodaq/utils/managers/remote_manager.py +21 -16
- pymodaq/utils/scanner/scan_factory.py +18 -4
- pymodaq/utils/scanner/scan_selector.py +1 -3
- pymodaq/utils/scanner/scanner.py +35 -6
- pymodaq/utils/scanner/scanners/_1d_scanners.py +15 -46
- pymodaq/utils/scanner/scanners/_2d_scanners.py +21 -68
- pymodaq/utils/scanner/scanners/sequential.py +50 -31
- pymodaq/utils/scanner/scanners/tabular.py +45 -28
- {pymodaq-5.0.17.dist-info → pymodaq-5.1.0.dist-info}/METADATA +7 -6
- pymodaq-5.1.0.dist-info/RECORD +154 -0
- {pymodaq-5.0.17.dist-info → pymodaq-5.1.0.dist-info}/entry_points.txt +0 -2
- pymodaq/extensions/bayesian/bayesian_optimisation.py +0 -685
- pymodaq/utils/leco/desktop.ini +0 -2
- pymodaq-5.0.17.dist-info/RECORD +0 -121
- {pymodaq-5.0.17.dist-info → pymodaq-5.1.0.dist-info}/WHEEL +0 -0
- {pymodaq-5.0.17.dist-info → pymodaq-5.1.0.dist-info}/licenses/LICENSE +0 -0
pymodaq/extensions/pid/utils.py
CHANGED
|
@@ -65,14 +65,14 @@ class PIDModelGeneric:
|
|
|
65
65
|
|
|
66
66
|
def apply_constants(self):
|
|
67
67
|
for kxx in self.konstants:
|
|
68
|
-
self.pid_controller.settings.child('main_settings', '
|
|
68
|
+
self.pid_controller.settings.child('main_settings', 'pid_settings', 'pid_constants',
|
|
69
69
|
kxx).setValue(self.konstants[kxx])
|
|
70
70
|
|
|
71
71
|
def apply_limits(self):
|
|
72
72
|
for limit in self.limits:
|
|
73
|
-
self.pid_controller.settings.child('main_settings', '
|
|
73
|
+
self.pid_controller.settings.child('main_settings', 'pid_settings', 'output_limits',
|
|
74
74
|
f'output_limit_{limit}').setValue(self.limits[limit]['value'])
|
|
75
|
-
self.pid_controller.settings.child('main_settings', '
|
|
75
|
+
self.pid_controller.settings.child('main_settings', 'pid_settings', 'output_limits',
|
|
76
76
|
f'output_limit_{limit}_enabled').setValue(self.limits[limit]['state'])
|
|
77
77
|
|
|
78
78
|
def check_modules(self, modules_manager):
|
|
@@ -118,18 +118,21 @@ class PIDModelGeneric:
|
|
|
118
118
|
"""
|
|
119
119
|
raise NotImplementedError
|
|
120
120
|
|
|
121
|
-
def convert_output(self, outputs: List[float],
|
|
121
|
+
def convert_output(self, outputs: List[float], **kwargs) -> DataToActuators:
|
|
122
122
|
"""
|
|
123
123
|
Convert the output of the PID in units to be fed into the actuator
|
|
124
124
|
Parameters
|
|
125
125
|
----------
|
|
126
126
|
outputs: (list of float) output value from the PID from which the model extract a value of the same units as the actuator
|
|
127
|
-
|
|
127
|
+
|
|
128
128
|
Returns
|
|
129
129
|
-------
|
|
130
130
|
DataToActuatorPID: the converted output as a DataToActuatorPID object (derived from DataToExport)
|
|
131
131
|
|
|
132
132
|
"""
|
|
133
|
+
if kwargs.get('dt', None) is not None or kwargs.get('stab', None) is not None:
|
|
134
|
+
logger.warning("dt and stab are deprecated, it will be removed in a future release.")
|
|
135
|
+
|
|
133
136
|
self.curr_output = outputs
|
|
134
137
|
return DataToActuators('pid', mode='rel',
|
|
135
138
|
data=[DataActuator(self.actuators_name[ind], data=outputs[ind])
|
pymodaq/extensions/utils.py
CHANGED
|
@@ -78,6 +78,15 @@ class CustomExt(CustomApp):
|
|
|
78
78
|
super().__init__(parent)
|
|
79
79
|
|
|
80
80
|
self.dashboard = dashboard
|
|
81
|
+
self.runner_thread : QtCore.QThread = None
|
|
82
|
+
|
|
83
|
+
self._modules_manager = ModulesManager(detectors=self.dashboard.detector_modules,
|
|
84
|
+
actuators=self.dashboard.actuators_modules,
|
|
85
|
+
parent_name=self.__class__.__name__)
|
|
86
|
+
|
|
87
|
+
@property
|
|
88
|
+
def splash(self):
|
|
89
|
+
return self.dashboard.splash_sc
|
|
81
90
|
|
|
82
91
|
@property
|
|
83
92
|
def modules_manager(self) -> ModulesManager:
|
|
@@ -89,5 +98,11 @@ class CustomExt(CustomApp):
|
|
|
89
98
|
-------
|
|
90
99
|
ModulesManager
|
|
91
100
|
"""
|
|
92
|
-
|
|
93
|
-
|
|
101
|
+
return self._modules_manager
|
|
102
|
+
|
|
103
|
+
def exit_runner_thread(self, duration : int = 5000):
|
|
104
|
+
self.runner_thread.quit()
|
|
105
|
+
terminated = self.runner_thread.wait(duration)
|
|
106
|
+
if not terminated:
|
|
107
|
+
self.runner_thread.terminate()
|
|
108
|
+
self.runner_thread.wait()
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
|
|
2
|
+
[presets]
|
|
3
|
+
default_preset_for_scan = "preset_default"
|
|
4
|
+
default_preset_for_logger = "preset_default"
|
|
5
|
+
default_preset_for_pid = "beam_steering_mock"
|
|
6
|
+
default_preset_for_datamixer = "preset_default"
|
|
7
|
+
|
|
8
|
+
[actuator]
|
|
9
|
+
ui = 'Simple' # one of ['Simple', 'Original', 'Binary', ...]
|
|
10
|
+
epsilon_default = 1
|
|
11
|
+
polling_interval_ms = 100 # ms Careful when using TCP/IP connection as you can saturate the connection with too much polling
|
|
12
|
+
polling_timeout_s = 20 # s
|
|
13
|
+
refresh_timeout_ms = 500 # ms
|
|
14
|
+
timeout = 10000 # default duration in ms to wait for data to be acquirred
|
|
15
|
+
siprefix = true # tell if printing of current value use a SI prefix or not (µ, m, k, M...)
|
|
16
|
+
siprefix_even_without_units = false
|
|
17
|
+
display_units = true # display units in the SpinBoxes
|
|
18
|
+
|
|
19
|
+
[actuator.allowed_units]
|
|
20
|
+
V = 'V'
|
|
21
|
+
volt = 'volt'
|
|
22
|
+
W = 'W'
|
|
23
|
+
Hz = 'Hz'
|
|
24
|
+
rpm = 'rpm'
|
|
25
|
+
revolutions_per_minute = 'revolutions_per_minute'
|
|
26
|
+
|
|
27
|
+
[actuator.binary]
|
|
28
|
+
value_1 = 0
|
|
29
|
+
value_2 = 1
|
|
30
|
+
|
|
31
|
+
[viewer]
|
|
32
|
+
daq_type = 'DAQ0D' #either "DAQ0D", "DAQ1D", "DAQ2D", "DAQND"
|
|
33
|
+
viewer_in_thread = true
|
|
34
|
+
timeout = 10000 # default duration in ms to wait for data to be acquirred
|
|
35
|
+
allow_settings_edition = false
|
|
36
|
+
settings_as_popup = true
|
|
37
|
+
|
|
38
|
+
[scan]
|
|
39
|
+
scan_in_thread = true
|
|
40
|
+
show_popups = true
|
|
41
|
+
default = "Scan2D"
|
|
42
|
+
Naverage = 1 # minimum is 1
|
|
43
|
+
average_on_top = false
|
|
44
|
+
steps_limit = 1000 # the limit of the number of steps you can set in a given scan
|
|
45
|
+
sort1D = true
|
|
46
|
+
|
|
47
|
+
[scan.timeflow]
|
|
48
|
+
wait_time = 0
|
|
49
|
+
wait_time_between = 0
|
|
50
|
+
timeout = 10000 # in millisecond
|
|
51
|
+
|
|
52
|
+
[optimizer]
|
|
53
|
+
n_iter = 100
|
|
54
|
+
|
|
55
|
+
[optimizer.bounds]
|
|
56
|
+
actuator_min = -10
|
|
57
|
+
actuator_max = 10
|
|
@@ -1 +1 @@
|
|
|
1
|
-
<Preset type="group" title="Preset" visible="1" removable="0" readonly="0"><filename type="str" title="Filename:" visible="1" removable="0" readonly="0" show_pb="0">preset_default</filename><use_pid type="bool" title="Use PID as actuator:" visible="1" removable="0" readonly="0" show_pb="0">0</use_pid><pid_models type="list" title="PID models:" visible="0" removable="0" readonly="0" limits="[]" show_pb="0">str('')</pid_models><model_settings type="group" title="Model Settings:" visible="0" removable="0" readonly="0" show_pb="0" /><Moves type="groupmove" title="Moves:" visible="1" removable="0" readonly="0" addList="['LECODirector', 'Mock', 'PID', 'TCPServer']" addText="Add" show_pb="0"><move00 type="group" title="Actuator 00" visible="1" removable="1" readonly="0"><name type="str" title="Name:" visible="1" removable="0" readonly="0">Xaxis</name><init type="bool" title="Init?:" visible="1" removable="0" readonly="0">1</init><params type="group" title="Settings:" visible="1" removable="0" readonly="0"><main_settings type="group" title="Main Settings:" visible="1" removable="0" readonly="0"><move_type type="str" title="Actuator type:" visible="1" removable="0" readonly="1">Mock</move_type><module_name type="str" title="Actuator name:" visible="1" removable="0" readonly="1" /><plugin_config type="bool_push" title="Plugin Config:" visible="1" removable="0" readonly="0" label="Show Config">0</plugin_config><refresh_timeout type="int" title="Refresh value (ms):" visible="1" removable="0" readonly="0">500</refresh_timeout><tcpip type="group" title="TCP/IP options:" visible="1" removable="0" readonly="0"><connect_server type="bool_push" title="Connect to server:" visible="1" removable="0" readonly="0" label="Connect">0</connect_server><tcp_connected type="led" title="Connected?:" visible="1" removable="0" readonly="0">0</tcp_connected><ip_address type="str" title="IP address:" visible="1" removable="0" readonly="0">10.47.0.39</ip_address><port type="int" title="Port:" visible="1" removable="0" readonly="0">6341</port></tcpip><leco type="group" title="LECO options:" visible="1" removable="0" readonly="0"><connect_leco_server type="bool_push" title="Connect:" visible="1" removable="0" readonly="0" label="Connect">0</connect_leco_server><leco_connected type="led" title="Connected?:" visible="1" removable="0" readonly="0">0</leco_connected><leco_name type="str" title="Name" visible="1" removable="0" readonly="0" /><host type="str" title="Host:" visible="1" removable="0" readonly="0">localhost</host><port type="int" title="Port:" visible="1" removable="0" readonly="0">12300</port></leco></main_settings><move_settings type="group" title="Actuator Settings:" visible="1" removable="0" readonly="0"><tau type="int" title="Tau (ms):" visible="1" removable="0" readonly="0">500.0</tau><multiaxes type="group" title="MultiAxes:" visible="1" removable="0" readonly="0"><controller_ID type="int" title="Controller ID:" visible="1" removable="0" readonly="0">223</controller_ID><multi_status type="list" title="Status:" visible="1" removable="0" readonly="0" limits="['Master', 'Slave']" show_pb="1">str('Master')</multi_status><axis type="list" title="Axis:" visible="1" removable="0" readonly="0" limits="['X', 'Y', 'Theta', 'Power', 'Temp']" show_pb="1">str('X')</axis></multiaxes><units type="str" title="Units:" visible="1" removable="0" readonly="1" /><epsilon type="float" title="Epsilon:" visible="1" removable="0" readonly="0">1</epsilon><timeout type="int" title="Timeout (s):" visible="1" removable="0" readonly="0">20</timeout><bounds type="group" title="Bounds:" visible="1" removable="0" readonly="0"><is_bounds type="bool" title="Set Bounds:" visible="1" removable="0" readonly="0">0</is_bounds><min_bound type="float" title="Min:" visible="1" removable="0" readonly="0">0</min_bound><max_bound type="float" title="Max:" visible="1" removable="0" readonly="0">1</max_bound></bounds><scaling type="group" title="Scaling:" visible="1" removable="0" readonly="0"><use_scaling type="bool" title="Use scaling:" visible="1" removable="0" readonly="0">0</use_scaling><scaling type="float" title="Scaling factor:" visible="1" removable="0" readonly="0">1.0</scaling><offset type="float" title="Offset factor:" visible="1" removable="0" readonly="0">0.0</offset></scaling></move_settings></params></move00><move01 type="group" title="Actuator 01" visible="1" removable="1" readonly="0"><name type="str" title="Name:" visible="1" removable="0" readonly="0">Y</name><init type="bool" title="Init?:" visible="1" removable="0" readonly="0">1</init><params type="group" title="Settings:" visible="1" removable="0" readonly="0"><main_settings type="group" title="Main Settings:" visible="1" removable="0" readonly="0"><move_type type="str" title="Actuator type:" visible="1" removable="0" readonly="1">Mock</move_type><module_name type="str" title="Actuator name:" visible="1" removable="0" readonly="1" /><plugin_config type="bool_push" title="Plugin Config:" visible="1" removable="0" readonly="0" label="Show Config">0</plugin_config><refresh_timeout type="int" title="Refresh value (ms):" visible="1" removable="0" readonly="0">500</refresh_timeout><tcpip type="group" title="TCP/IP options:" visible="1" removable="0" readonly="0"><connect_server type="bool_push" title="Connect to server:" visible="1" removable="0" readonly="0" label="Connect">0</connect_server><tcp_connected type="led" title="Connected?:" visible="1" removable="0" readonly="0">0</tcp_connected><ip_address type="str" title="IP address:" visible="1" removable="0" readonly="0">10.47.0.39</ip_address><port type="int" title="Port:" visible="1" removable="0" readonly="0">6341</port></tcpip><leco type="group" title="LECO options:" visible="1" removable="0" readonly="0"><connect_leco_server type="bool_push" title="Connect:" visible="1" removable="0" readonly="0" label="Connect">0</connect_leco_server><leco_connected type="led" title="Connected?:" visible="1" removable="0" readonly="0">0</leco_connected><leco_name type="str" title="Name" visible="1" removable="0" readonly="0" /><host type="str" title="Host:" visible="1" removable="0" readonly="0">localhost</host><port type="int" title="Port:" visible="1" removable="0" readonly="0">12300</port></leco></main_settings><move_settings type="group" title="Actuator Settings:" visible="1" removable="0" readonly="0"><tau type="int" title="Tau (ms):" visible="1" removable="0" readonly="0">500.0</tau><multiaxes type="group" title="MultiAxes:" visible="1" removable="0" readonly="0"><controller_ID type="int" title="Controller ID:" visible="1" removable="0" readonly="0">223</controller_ID><multi_status type="list" title="Status:" visible="1" removable="0" readonly="0" limits="['Master', 'Slave']" show_pb="1">str('Slave')</multi_status><axis type="list" title="Axis:" visible="1" removable="0" readonly="0" limits="['X', 'Y', 'Theta', 'Power', 'Temp']" show_pb="1">str('Y')</axis></multiaxes><units type="str" title="Units:" visible="1" removable="0" readonly="1" /><epsilon type="float" title="Epsilon:" visible="1" removable="0" readonly="0">1</epsilon><timeout type="int" title="Timeout (s):" visible="1" removable="0" readonly="0">20</timeout><bounds type="group" title="Bounds:" visible="1" removable="0" readonly="0"><is_bounds type="bool" title="Set Bounds:" visible="1" removable="0" readonly="0">0</is_bounds><min_bound type="float" title="Min:" visible="1" removable="0" readonly="0">0</min_bound><max_bound type="float" title="Max:" visible="1" removable="0" readonly="0">1</max_bound></bounds><scaling type="group" title="Scaling:" visible="1" removable="0" readonly="0"><use_scaling type="bool" title="Use scaling:" visible="1" removable="0" readonly="0">0</use_scaling><scaling type="float" title="Scaling factor:" visible="1" removable="0" readonly="0">1.0</scaling><offset type="float" title="Offset factor:" visible="1" removable="0" readonly="0">0.0</offset></scaling></move_settings></params></move01></Moves><Detectors type="groupdet" title="Detectors:" visible="1" removable="0" readonly="0" addList="['DAQ0D/LECODirector', 'DAQ0D/Mock', 'DAQ0D/TCPServer', 'DAQ1D/LECODirector', 'DAQ1D/Mock', 'DAQ1D/TCPServer', 'DAQ2D/LECODirector', 'DAQ2D/Mock', 'DAQ2D/TCPServer', 'DAQND/Mock']" addText="Add" show_pb="0"><det00 type="group" title="Det 00" visible="1" removable="1" readonly="0"><name type="str" title="Name:" visible="1" removable="0" readonly="0">Det 0D</name><init type="bool" title="Init?:" visible="1" removable="0" readonly="0">1</init><params type="group" title="Settings:" visible="1" removable="0" readonly="0"><main_settings type="group" title="Main Settings:" visible="1" removable="0" readonly="0"><DAQ_type type="list" title="DAQ type:" visible="1" removable="0" readonly="1" limits="['DAQ0D', 'DAQ1D', 'DAQ2D', 'DAQND']" show_pb="1">str('DAQ0D')</DAQ_type><detector_type type="str" title="Detector type:" visible="1" removable="0" readonly="1">Mock</detector_type><module_name type="str" title="Detector Name:" visible="1" removable="0" readonly="1" /><plugin_config type="bool_push" title="Plugin Config:" visible="1" removable="0" readonly="0" label="Show Config">0</plugin_config><show_data type="bool" title="Show data and process:" visible="1" removable="0" readonly="0">1</show_data><refresh_time type="float" title="Refresh time (ms):" visible="1" removable="0" readonly="0">50.0</refresh_time><Naverage type="int" title="Naverage" visible="1" removable="0" readonly="0">1</Naverage><show_averaging type="bool" title="Show averaging:" visible="1" removable="0" readonly="0">0</show_averaging><live_averaging type="bool" title="Live averaging:" visible="1" removable="0" readonly="0">0</live_averaging><N_live_averaging type="int" title="N Live aver.:" visible="0" removable="0" readonly="0">0</N_live_averaging><wait_time type="int" title="Wait time (ms):" visible="1" removable="0" readonly="0">0</wait_time><continuous_saving_opt type="bool" title="Continuous saving:" visible="1" removable="0" readonly="0">0</continuous_saving_opt><tcpip type="group" title="TCP/IP options:" visible="1" removable="0" readonly="0"><connect_server type="bool_push" title="Connect to server:" visible="1" removable="0" readonly="0" label="Connect">0</connect_server><tcp_connected type="led" title="Connected?:" visible="1" removable="0" readonly="0">0</tcp_connected><ip_address type="str" title="IP address:" visible="1" removable="0" readonly="0">10.47.0.39</ip_address><port type="int" title="Port:" visible="1" removable="0" readonly="0">6341</port></tcpip><leco type="group" title="LECO options:" visible="1" removable="0" readonly="0"><connect_leco_server type="bool_push" title="Connect:" visible="1" removable="0" readonly="0" label="Connect">0</connect_leco_server><leco_connected type="led" title="Connected?:" visible="1" removable="0" readonly="0">0</leco_connected><leco_name type="str" title="Name" visible="1" removable="0" readonly="0" /><host type="str" title="Host:" visible="1" removable="0" readonly="0">localhost</host><port type="int" title="Port:" visible="1" removable="0" readonly="0">12300</port></leco><overshoot type="group" title="Overshoot options:" visible="1" removable="0" readonly="0"><stop_overshoot type="bool" title="Overshoot:" visible="1" removable="0" readonly="0">0</stop_overshoot><overshoot_value type="float" title="Overshoot value:" visible="1" removable="0" readonly="0">0</overshoot_value></overshoot><axes type="group" title="Axis options:" visible="1" removable="0" readonly="0"><use_calib type="list" title="Use calibration?:" visible="1" removable="0" readonly="0" limits="['None']" show_pb="1">str('None')</use_calib><xaxis type="group" title="X axis:" visible="1" removable="0" readonly="0"><xlabel type="str" title="Label:" visible="1" removable="0" readonly="0">x axis</xlabel><xunits type="str" title="Units:" visible="1" removable="0" readonly="0">pxls</xunits><xoffset type="float" title="Offset:" visible="1" removable="0" readonly="0">0.0</xoffset><xscaling type="float" title="Scaling" visible="1" removable="0" readonly="0">1.0</xscaling></xaxis><yaxis type="group" title="Y axis:" visible="1" removable="0" readonly="0"><ylabel type="str" title="Label:" visible="1" removable="0" readonly="0">y axis</ylabel><yunits type="str" title="Units:" visible="1" removable="0" readonly="0">pxls</yunits><yoffset type="float" title="Offset:" visible="1" removable="0" readonly="0">0.0</yoffset><yscaling type="float" title="Scaling" visible="1" removable="0" readonly="0">1.0</yscaling></yaxis></axes></main_settings><detector_settings type="group" title="Detector Settings" visible="1" removable="0" readonly="0"><controller_status type="list" title="Controller Status:" visible="1" removable="0" readonly="0" limits="['Master', 'Slave']" show_pb="1">str('Master')</controller_status><controller_ID type="int" title="Controller ID:" visible="1" removable="0" readonly="0">2299</controller_ID><wait_time type="int" title="Wait time (ms)" visible="1" removable="0" readonly="0">100</wait_time><sep_viewers type="bool" title="Separated viewers" visible="1" removable="0" readonly="0">0</sep_viewers><lcd type="bool" title="Show in LCD" visible="1" removable="0" readonly="0">0</lcd><Mock1 type="group" title="Mock1" visible="1" removable="0" readonly="0"><Npts type="int" title="Npts" visible="1" removable="0" readonly="0">200</Npts><Amp type="int" title="Amp" visible="1" removable="0" readonly="0">20</Amp><x0 type="float" title="x0" visible="1" removable="0" readonly="0">50</x0><dx type="float" title="dx" visible="1" removable="0" readonly="0">20</dx><n type="int" title="n" visible="1" removable="0" readonly="0">1</n><amp_noise type="float" title="amp_noise" visible="1" removable="0" readonly="0">0.1</amp_noise></Mock1><Mock2 type="group" title="Mock2" visible="1" removable="0" readonly="0"><Npts type="int" title="Npts" visible="1" removable="0" readonly="0">200</Npts><Amp type="int" title="Amp" visible="1" removable="0" readonly="0">10</Amp><x0 type="float" title="x0" visible="1" removable="0" readonly="0">100</x0><dx type="float" title="dx" visible="1" removable="0" readonly="0">30</dx><n type="int" title="n" visible="1" removable="0" readonly="0">2</n><amp_noise type="float" title="amp_noise" visible="1" removable="0" readonly="0">0.1</amp_noise></Mock2></detector_settings></params></det00><det01 type="group" title="Det 01" visible="1" removable="1" readonly="0"><name type="str" title="Name:" visible="1" removable="0" readonly="0">Det 1D</name><init type="bool" title="Init?:" visible="1" removable="0" readonly="0">1</init><params type="group" title="Settings:" visible="1" removable="0" readonly="0"><main_settings type="group" title="Main Settings:" visible="1" removable="0" readonly="0"><DAQ_type type="list" title="DAQ type:" visible="1" removable="0" readonly="1" limits="['DAQ0D', 'DAQ1D', 'DAQ2D', 'DAQND']" show_pb="1">str('DAQ1D')</DAQ_type><detector_type type="str" title="Detector type:" visible="1" removable="0" readonly="1">Mock</detector_type><module_name type="str" title="Detector Name:" visible="1" removable="0" readonly="1" /><plugin_config type="bool_push" title="Plugin Config:" visible="1" removable="0" readonly="0" label="Show Config">0</plugin_config><show_data type="bool" title="Show data and process:" visible="1" removable="0" readonly="0">1</show_data><refresh_time type="float" title="Refresh time (ms):" visible="1" removable="0" readonly="0">50.0</refresh_time><Naverage type="int" title="Naverage" visible="1" removable="0" readonly="0">1</Naverage><show_averaging type="bool" title="Show averaging:" visible="1" removable="0" readonly="0">0</show_averaging><live_averaging type="bool" title="Live averaging:" visible="1" removable="0" readonly="0">0</live_averaging><N_live_averaging type="int" title="N Live aver.:" visible="0" removable="0" readonly="0">0</N_live_averaging><wait_time type="int" title="Wait time (ms):" visible="1" removable="0" readonly="0">0</wait_time><continuous_saving_opt type="bool" title="Continuous saving:" visible="1" removable="0" readonly="0">0</continuous_saving_opt><tcpip type="group" title="TCP/IP options:" visible="1" removable="0" readonly="0"><connect_server type="bool_push" title="Connect to server:" visible="1" removable="0" readonly="0" label="Connect">0</connect_server><tcp_connected type="led" title="Connected?:" visible="1" removable="0" readonly="0">0</tcp_connected><ip_address type="str" title="IP address:" visible="1" removable="0" readonly="0">10.47.0.39</ip_address><port type="int" title="Port:" visible="1" removable="0" readonly="0">6341</port></tcpip><leco type="group" title="LECO options:" visible="1" removable="0" readonly="0"><connect_leco_server type="bool_push" title="Connect:" visible="1" removable="0" readonly="0" label="Connect">0</connect_leco_server><leco_connected type="led" title="Connected?:" visible="1" removable="0" readonly="0">0</leco_connected><leco_name type="str" title="Name" visible="1" removable="0" readonly="0" /><host type="str" title="Host:" visible="1" removable="0" readonly="0">localhost</host><port type="int" title="Port:" visible="1" removable="0" readonly="0">12300</port></leco><overshoot type="group" title="Overshoot options:" visible="1" removable="0" readonly="0"><stop_overshoot type="bool" title="Overshoot:" visible="1" removable="0" readonly="0">0</stop_overshoot><overshoot_value type="float" title="Overshoot value:" visible="1" removable="0" readonly="0">0</overshoot_value></overshoot><axes type="group" title="Axis options:" visible="1" removable="0" readonly="0"><use_calib type="list" title="Use calibration?:" visible="1" removable="0" readonly="0" limits="['None']" show_pb="1">str('None')</use_calib><xaxis type="group" title="X axis:" visible="1" removable="0" readonly="0"><xlabel type="str" title="Label:" visible="1" removable="0" readonly="0">x axis</xlabel><xunits type="str" title="Units:" visible="1" removable="0" readonly="0">pxls</xunits><xoffset type="float" title="Offset:" visible="1" removable="0" readonly="0">0.0</xoffset><xscaling type="float" title="Scaling" visible="1" removable="0" readonly="0">1.0</xscaling></xaxis><yaxis type="group" title="Y axis:" visible="1" removable="0" readonly="0"><ylabel type="str" title="Label:" visible="1" removable="0" readonly="0">y axis</ylabel><yunits type="str" title="Units:" visible="1" removable="0" readonly="0">pxls</yunits><yoffset type="float" title="Offset:" visible="1" removable="0" readonly="0">0.0</yoffset><yscaling type="float" title="Scaling" visible="1" removable="0" readonly="0">1.0</yscaling></yaxis></axes></main_settings><detector_settings type="group" title="Detector Settings" visible="1" removable="0" readonly="0"><controller_status type="list" title="Controller Status:" visible="1" removable="0" readonly="0" limits="['Master', 'Slave']" show_pb="1">str('Master')</controller_status><controller_ID type="int" title="Controller ID:" visible="1" removable="0" readonly="0">7933</controller_ID><rolling type="int" title="Rolling?:" visible="1" removable="0" readonly="0">0</rolling><multi type="bool" title="Multi Channels?:" visible="1" removable="0" readonly="0">0</multi><Mock1 type="group" title="Mock1:" visible="1" removable="0" readonly="0"><Amp type="int" title="Amp:" visible="1" removable="0" readonly="0">20</Amp><x0 type="float" title="x0:" visible="1" removable="0" readonly="0">500</x0><dx type="float" title="dx:" visible="1" removable="0" readonly="0">0.3</dx><n type="int" title="n:" visible="1" removable="0" readonly="0">1</n><amp_noise type="float" title="noise:" visible="1" removable="0" readonly="0">0.1</amp_noise></Mock1><Mock2 type="group" title="Mock2:" visible="1" removable="0" readonly="0"><Amp type="int" title="Amp?:" visible="1" removable="0" readonly="0">10</Amp><x0 type="float" title="x0:" visible="1" removable="0" readonly="0">520</x0><dx type="float" title="dx:" visible="1" removable="0" readonly="0">0.7</dx><n type="int" title="n:" visible="1" removable="0" readonly="0">2</n><amp_noise type="float" title="noise:" visible="1" removable="0" readonly="0">0.1</amp_noise></Mock2><x_axis type="group" title="xaxis:" visible="1" removable="0" readonly="0"><Npts type="int" title="Npts:" visible="1" removable="0" readonly="0">513</Npts><x0 type="float" title="x0:" visible="1" removable="0" readonly="0">515</x0><dx type="float" title="dx:" visible="1" removable="0" readonly="0">0.1</dx></x_axis></detector_settings></params></det01><det02 type="group" title="Det 02" visible="1" removable="1" readonly="0"><name type="str" title="Name:" visible="1" removable="0" readonly="0">Det 2D</name><init type="bool" title="Init?:" visible="1" removable="0" readonly="0">1</init><params type="group" title="Settings:" visible="1" removable="0" readonly="0"><main_settings type="group" title="Main Settings:" visible="1" removable="0" readonly="0"><DAQ_type type="list" title="DAQ type:" visible="1" removable="0" readonly="1" limits="['DAQ0D', 'DAQ1D', 'DAQ2D', 'DAQND']" show_pb="1">str('DAQ2D')</DAQ_type><detector_type type="str" title="Detector type:" visible="1" removable="0" readonly="1">Mock</detector_type><module_name type="str" title="Detector Name:" visible="1" removable="0" readonly="1" /><plugin_config type="bool_push" title="Plugin Config:" visible="1" removable="0" readonly="0" label="Show Config">0</plugin_config><show_data type="bool" title="Show data and process:" visible="1" removable="0" readonly="0">1</show_data><refresh_time type="float" title="Refresh time (ms):" visible="1" removable="0" readonly="0">50.0</refresh_time><Naverage type="int" title="Naverage" visible="1" removable="0" readonly="0">1</Naverage><show_averaging type="bool" title="Show averaging:" visible="1" removable="0" readonly="0">0</show_averaging><live_averaging type="bool" title="Live averaging:" visible="1" removable="0" readonly="0">0</live_averaging><N_live_averaging type="int" title="N Live aver.:" visible="0" removable="0" readonly="0">0</N_live_averaging><wait_time type="int" title="Wait time (ms):" visible="1" removable="0" readonly="0">0</wait_time><continuous_saving_opt type="bool" title="Continuous saving:" visible="1" removable="0" readonly="0">0</continuous_saving_opt><tcpip type="group" title="TCP/IP options:" visible="1" removable="0" readonly="0"><connect_server type="bool_push" title="Connect to server:" visible="1" removable="0" readonly="0" label="Connect">0</connect_server><tcp_connected type="led" title="Connected?:" visible="1" removable="0" readonly="0">0</tcp_connected><ip_address type="str" title="IP address:" visible="1" removable="0" readonly="0">10.47.0.39</ip_address><port type="int" title="Port:" visible="1" removable="0" readonly="0">6341</port></tcpip><leco type="group" title="LECO options:" visible="1" removable="0" readonly="0"><connect_leco_server type="bool_push" title="Connect:" visible="1" removable="0" readonly="0" label="Connect">0</connect_leco_server><leco_connected type="led" title="Connected?:" visible="1" removable="0" readonly="0">0</leco_connected><leco_name type="str" title="Name" visible="1" removable="0" readonly="0" /><host type="str" title="Host:" visible="1" removable="0" readonly="0">localhost</host><port type="int" title="Port:" visible="1" removable="0" readonly="0">12300</port></leco><overshoot type="group" title="Overshoot options:" visible="1" removable="0" readonly="0"><stop_overshoot type="bool" title="Overshoot:" visible="1" removable="0" readonly="0">0</stop_overshoot><overshoot_value type="float" title="Overshoot value:" visible="1" removable="0" readonly="0">0</overshoot_value></overshoot><axes type="group" title="Axis options:" visible="1" removable="0" readonly="0"><use_calib type="list" title="Use calibration?:" visible="1" removable="0" readonly="0" limits="['None']" show_pb="1">str('None')</use_calib><xaxis type="group" title="X axis:" visible="1" removable="0" readonly="0"><xlabel type="str" title="Label:" visible="1" removable="0" readonly="0">x axis</xlabel><xunits type="str" title="Units:" visible="1" removable="0" readonly="0">pxls</xunits><xoffset type="float" title="Offset:" visible="1" removable="0" readonly="0">0.0</xoffset><xscaling type="float" title="Scaling" visible="1" removable="0" readonly="0">1.0</xscaling></xaxis><yaxis type="group" title="Y axis:" visible="1" removable="0" readonly="0"><ylabel type="str" title="Label:" visible="1" removable="0" readonly="0">y axis</ylabel><yunits type="str" title="Units:" visible="1" removable="0" readonly="0">pxls</yunits><yoffset type="float" title="Offset:" visible="1" removable="0" readonly="0">0.0</yoffset><yscaling type="float" title="Scaling" visible="1" removable="0" readonly="0">1.0</yscaling></yaxis></axes></main_settings><detector_settings type="group" title="Detector Settings" visible="1" removable="0" readonly="0"><controller_status type="list" title="Controller Status:" visible="1" removable="0" readonly="0" limits="['Master', 'Slave']" show_pb="1">str('Master')</controller_status><controller_ID type="int" title="Controller ID:" visible="1" removable="0" readonly="0">7758</controller_ID><Nimagescolor type="int" title="Nimages colors:" visible="1" removable="0" readonly="0">1</Nimagescolor><Nimagespannel type="int" title="Nimages pannels:" visible="1" removable="0" readonly="0">2</Nimagespannel><use_roi_select type="bool" title="Use ROISelect" visible="1" removable="0" readonly="0">0</use_roi_select><threshold type="int" title="Threshold" visible="1" removable="0" readonly="0">1</threshold><rolling type="int" title="rolling" visible="1" removable="0" readonly="0">1</rolling><Nx type="int" title="Nx" visible="1" removable="0" readonly="0">100</Nx><Ny type="int" title="Ny" visible="1" removable="0" readonly="0">200</Ny><Amp type="int" title="Amp" visible="1" removable="0" readonly="0">20</Amp><x0 type="slide" title="x0" visible="1" removable="0" readonly="0">50</x0><y0 type="float" title="y0" visible="1" removable="0" readonly="0">100</y0><dx type="float" title="dx" visible="1" removable="0" readonly="0">20</dx><dy type="float" title="dy" visible="1" removable="0" readonly="0">40</dy><n type="int" title="n" visible="1" removable="0" readonly="0">1</n><amp_noise type="float" title="amp_noise" visible="1" removable="0" readonly="0">4</amp_noise><cam_settings type="group" title="Cam. Prop.:" visible="1" removable="0" readonly="0" /></detector_settings></params></det02></Detectors></Preset>
|
|
1
|
+
<Preset type="group" title="Preset" visible="1" removable="0" readonly="0"><filename type="str" title="Filename:" visible="1" removable="0" readonly="0">preset_default</filename><model_settings type="group" title="Model Settings:" visible="0" removable="0" readonly="0" /><Moves type="groupmove" title="Moves:" visible="1" removable="0" readonly="0" addText="Add"><move00 type="group" title="Actuator 00" visible="1" removable="1" readonly="0"><name type="str" title="Name:" visible="1" removable="0" readonly="0">xaxis</name><init type="bool" title="Init?:" visible="1" removable="0" readonly="0">1</init><params type="group" title="Settings:" visible="1" removable="0" readonly="0"><main_settings type="group" title="Main Settings:" visible="1" removable="0" readonly="0"><move_type type="str" title="Actuator type:" visible="1" removable="0" readonly="1">Mock</move_type><module_name type="str" title="Actuator name:" visible="1" removable="0" readonly="1">xaxis</module_name><ui_type type="list" title="UI type:" visible="1" removable="0" readonly="0" limits="['Simple', 'Binary', 'Original', 'Relative']" show_pb="1">str('Original')</ui_type><plugin_config type="bool_push" title="Plugin Config:" visible="1" removable="0" readonly="0" label="Show Config">0</plugin_config><refresh_timeout type="int" title="Refresh value (ms):" visible="1" removable="0" readonly="0">500</refresh_timeout><tcpip type="group" title="TCP/IP options:" visible="1" removable="0" readonly="0"><connect_server type="bool_push" title="Connect to server:" visible="1" removable="0" readonly="0" label="Connect">0</connect_server><tcp_connected type="led" title="Connected?:" visible="1" removable="0" readonly="0">0</tcp_connected><ip_address type="str" title="IP address:" visible="1" removable="0" readonly="0">10.47.0.39</ip_address><port type="int" title="Port:" visible="1" removable="0" readonly="0">6341</port></tcpip><leco type="group" title="LECO options:" visible="1" removable="0" readonly="0"><connect_leco_server type="bool_push" title="Connect:" visible="1" removable="0" readonly="0" label="Connect">0</connect_leco_server><leco_connected type="led" title="Connected?:" visible="1" removable="0" readonly="0">0</leco_connected><leco_name type="str" title="Name" visible="1" removable="0" readonly="0" /><host type="str" title="Host:" visible="1" removable="0" readonly="0">localhost</host><port type="int" title="Port:" visible="1" removable="0" readonly="0">12300</port></leco></main_settings><move_settings type="group" title="Actuator Settings:" visible="1" removable="0" readonly="0"><tau type="int" title="Tau (ms):" visible="1" removable="0" readonly="0">500.0</tau><multiaxes type="group" title="MultiAxes:" visible="1" removable="0" readonly="0"><controller_ID type="int" title="Controller ID:" visible="1" removable="0" readonly="0">9025</controller_ID><multi_status type="list" title="Status:" visible="1" removable="0" readonly="0" limits="['Master', 'Slave']" show_pb="1">str('Master')</multi_status><axis type="list" title="Axis:" visible="1" removable="0" readonly="0" limits="['X', 'Y', 'Theta', 'Power', 'Temp', 'Frequency', 'Speed']" show_pb="1">str('X')</axis></multiaxes><units type="str" title="Units:" visible="1" removable="0" readonly="1" /><epsilon type="float" title="Epsilon:" visible="1" removable="0" readonly="0">1</epsilon><timeout type="int" title="Timeout (s):" visible="1" removable="0" readonly="0">20</timeout><bounds type="group" title="Bounds:" visible="1" removable="0" readonly="0"><is_bounds type="bool" title="Set Bounds:" visible="1" removable="0" readonly="0">0</is_bounds><min_bound type="float" title="Min:" visible="1" removable="0" readonly="0">0</min_bound><max_bound type="float" title="Max:" visible="1" removable="0" readonly="0">1</max_bound></bounds><scaling type="group" title="Scaling:" visible="1" removable="0" readonly="0"><use_scaling type="bool" title="Use scaling:" visible="1" removable="0" readonly="0">0</use_scaling><scaling type="float" title="Scaling factor:" visible="1" removable="0" readonly="0">1.0</scaling><offset type="float" title="Offset factor:" visible="1" removable="0" readonly="0">0.0</offset></scaling></move_settings></params></move00><move01 type="group" title="Actuator 01" visible="1" removable="1" readonly="0"><name type="str" title="Name:" visible="1" removable="0" readonly="0">Yaxis</name><init type="bool" title="Init?:" visible="1" removable="0" readonly="0">1</init><params type="group" title="Settings:" visible="1" removable="0" readonly="0"><main_settings type="group" title="Main Settings:" visible="1" removable="0" readonly="0"><move_type type="str" title="Actuator type:" visible="1" removable="0" readonly="1">Mock</move_type><module_name type="str" title="Actuator name:" visible="1" removable="0" readonly="1">Yaxis</module_name><ui_type type="list" title="UI type:" visible="1" removable="0" readonly="0" limits="['Simple', 'Binary', 'Original', 'Relative']" show_pb="1">str('Original')</ui_type><plugin_config type="bool_push" title="Plugin Config:" visible="1" removable="0" readonly="0" label="Show Config">0</plugin_config><refresh_timeout type="int" title="Refresh value (ms):" visible="1" removable="0" readonly="0">500</refresh_timeout><tcpip type="group" title="TCP/IP options:" visible="1" removable="0" readonly="0"><connect_server type="bool_push" title="Connect to server:" visible="1" removable="0" readonly="0" label="Connect">0</connect_server><tcp_connected type="led" title="Connected?:" visible="1" removable="0" readonly="0">0</tcp_connected><ip_address type="str" title="IP address:" visible="1" removable="0" readonly="0">10.47.0.39</ip_address><port type="int" title="Port:" visible="1" removable="0" readonly="0">6341</port></tcpip><leco type="group" title="LECO options:" visible="1" removable="0" readonly="0"><connect_leco_server type="bool_push" title="Connect:" visible="1" removable="0" readonly="0" label="Connect">0</connect_leco_server><leco_connected type="led" title="Connected?:" visible="1" removable="0" readonly="0">0</leco_connected><leco_name type="str" title="Name" visible="1" removable="0" readonly="0" /><host type="str" title="Host:" visible="1" removable="0" readonly="0">localhost</host><port type="int" title="Port:" visible="1" removable="0" readonly="0">12300</port></leco></main_settings><move_settings type="group" title="Actuator Settings:" visible="1" removable="0" readonly="0"><tau type="int" title="Tau (ms):" visible="1" removable="0" readonly="0">500.0</tau><multiaxes type="group" title="MultiAxes:" visible="1" removable="0" readonly="0"><controller_ID type="int" title="Controller ID:" visible="1" removable="0" readonly="0">1495</controller_ID><multi_status type="list" title="Status:" visible="1" removable="0" readonly="0" limits="['Master', 'Slave']" show_pb="1">str('Master')</multi_status><axis type="list" title="Axis:" visible="1" removable="0" readonly="0" limits="['X', 'Y', 'Theta', 'Power', 'Temp', 'Frequency', 'Speed']" show_pb="1">str('X')</axis></multiaxes><units type="str" title="Units:" visible="1" removable="0" readonly="1" /><epsilon type="float" title="Epsilon:" visible="1" removable="0" readonly="0">1</epsilon><timeout type="int" title="Timeout (s):" visible="1" removable="0" readonly="0">20</timeout><bounds type="group" title="Bounds:" visible="1" removable="0" readonly="0"><is_bounds type="bool" title="Set Bounds:" visible="1" removable="0" readonly="0">0</is_bounds><min_bound type="float" title="Min:" visible="1" removable="0" readonly="0">0</min_bound><max_bound type="float" title="Max:" visible="1" removable="0" readonly="0">1</max_bound></bounds><scaling type="group" title="Scaling:" visible="1" removable="0" readonly="0"><use_scaling type="bool" title="Use scaling:" visible="1" removable="0" readonly="0">0</use_scaling><scaling type="float" title="Scaling factor:" visible="1" removable="0" readonly="0">1.0</scaling><offset type="float" title="Offset factor:" visible="1" removable="0" readonly="0">0.0</offset></scaling></move_settings></params></move01></Moves><Detectors type="groupdet" title="Detectors:" visible="1" removable="0" readonly="0" addText="Add"><det00 type="group" title="Det 00" visible="1" removable="1" readonly="0"><name type="str" title="Name:" visible="1" removable="0" readonly="0">Det 0D</name><init type="bool" title="Init?:" visible="1" removable="0" readonly="0">1</init><params type="group" title="Settings:" visible="1" removable="0" readonly="0"><main_settings type="group" title="Main Settings:" visible="1" removable="0" readonly="0"><DAQ_type type="list" title="DAQ type:" visible="1" removable="0" readonly="1" limits="['DAQ0D', 'DAQ1D', 'DAQ2D', 'DAQND']" show_pb="1">str('DAQ0D')</DAQ_type><detector_type type="str" title="Detector type:" visible="1" removable="0" readonly="1">Mock</detector_type><module_name type="str" title="Detector Name:" visible="1" removable="0" readonly="1">Det 0D</module_name><plugin_config type="bool_push" title="Plugin Config:" visible="1" removable="0" readonly="0" label="Show Config">0</plugin_config><show_data type="bool" title="Show data and process:" visible="1" removable="0" readonly="0">1</show_data><refresh_time type="float" title="Refresh time (ms):" visible="1" removable="0" readonly="0">50.0</refresh_time><Naverage type="int" title="Naverage" visible="1" removable="0" readonly="0">1</Naverage><show_averaging type="bool" title="Show averaging:" visible="1" removable="0" readonly="0">0</show_averaging><live_averaging type="bool" title="Live averaging:" visible="1" removable="0" readonly="0">0</live_averaging><N_live_averaging type="int" title="N Live aver.:" visible="0" removable="0" readonly="0">0</N_live_averaging><wait_time type="int" title="Wait time (ms):" visible="1" removable="0" readonly="0">0</wait_time><continuous_saving_opt type="bool" title="Continuous saving:" visible="1" removable="0" readonly="0">0</continuous_saving_opt><tcpip type="group" title="TCP/IP options:" visible="1" removable="0" readonly="0"><connect_server type="bool_push" title="Connect to server:" visible="1" removable="0" readonly="0" label="Connect">0</connect_server><tcp_connected type="led" title="Connected?:" visible="1" removable="0" readonly="0">0</tcp_connected><ip_address type="str" title="IP address:" visible="1" removable="0" readonly="0">10.47.0.39</ip_address><port type="int" title="Port:" visible="1" removable="0" readonly="0">6341</port></tcpip><leco type="group" title="LECO options:" visible="1" removable="0" readonly="0"><connect_leco_server type="bool_push" title="Connect:" visible="1" removable="0" readonly="0" label="Connect">0</connect_leco_server><leco_connected type="led" title="Connected?:" visible="1" removable="0" readonly="0">0</leco_connected><leco_name type="str" title="Name" visible="1" removable="0" readonly="0" /><host type="str" title="Host:" visible="1" removable="0" readonly="0">localhost</host><port type="int" title="Port:" visible="1" removable="0" readonly="0">12300</port></leco><overshoot type="group" title="Overshoot options:" visible="1" removable="0" readonly="0"><stop_overshoot type="bool" title="Overshoot:" visible="1" removable="0" readonly="0">0</stop_overshoot><overshoot_value type="float" title="Overshoot value:" visible="1" removable="0" readonly="0">0</overshoot_value></overshoot><axes type="group" title="Axis options:" visible="1" removable="0" readonly="0"><use_calib type="list" title="Use calibration?:" visible="1" removable="0" readonly="0" limits="['None']" show_pb="1">str('None')</use_calib><xaxis type="group" title="X axis:" visible="1" removable="0" readonly="0"><xlabel type="str" title="Label:" visible="1" removable="0" readonly="0">x axis</xlabel><xunits type="str" title="Units:" visible="1" removable="0" readonly="0">pxls</xunits><xoffset type="float" title="Offset:" visible="1" removable="0" readonly="0">0.0</xoffset><xscaling type="float" title="Scaling" visible="1" removable="0" readonly="0">1.0</xscaling></xaxis><yaxis type="group" title="Y axis:" visible="1" removable="0" readonly="0"><ylabel type="str" title="Label:" visible="1" removable="0" readonly="0">y axis</ylabel><yunits type="str" title="Units:" visible="1" removable="0" readonly="0">pxls</yunits><yoffset type="float" title="Offset:" visible="1" removable="0" readonly="0">0.0</yoffset><yscaling type="float" title="Scaling" visible="1" removable="0" readonly="0">1.0</yscaling></yaxis></axes></main_settings><detector_settings type="group" title="Detector Settings" visible="1" removable="0" readonly="0"><controller_status type="list" title="Controller Status:" visible="1" removable="0" readonly="0" limits="['Master', 'Slave']" show_pb="1">str('Master')</controller_status><controller_ID type="int" title="Controller ID:" visible="1" removable="0" readonly="0">5553</controller_ID><wait_time type="int" title="Wait time (ms)" visible="1" removable="0" readonly="0">100</wait_time><sep_viewers type="bool" title="Separated viewers" visible="1" removable="0" readonly="0">0</sep_viewers><lcd type="bool" title="Show in LCD" visible="1" removable="0" readonly="0">0</lcd><Mock1 type="group" title="Mock1" visible="1" removable="0" readonly="0"><Npts type="int" title="Npts" visible="1" removable="0" readonly="0">200</Npts><Amp type="int" title="Amp" visible="1" removable="0" readonly="0">20</Amp><x0 type="float" title="x0" visible="1" removable="0" readonly="0">50</x0><dx type="float" title="dx" visible="1" removable="0" readonly="0">20</dx><n type="int" title="n" visible="1" removable="0" readonly="0">1</n><amp_noise type="float" title="amp_noise" visible="1" removable="0" readonly="0">0.1</amp_noise></Mock1><Mock2 type="group" title="Mock2" visible="1" removable="0" readonly="0"><Npts type="int" title="Npts" visible="1" removable="0" readonly="0">200</Npts><Amp type="int" title="Amp" visible="1" removable="0" readonly="0">10</Amp><x0 type="float" title="x0" visible="1" removable="0" readonly="0">100</x0><dx type="float" title="dx" visible="1" removable="0" readonly="0">30</dx><n type="int" title="n" visible="1" removable="0" readonly="0">2</n><amp_noise type="float" title="amp_noise" visible="1" removable="0" readonly="0">0.1</amp_noise></Mock2></detector_settings></params></det00><det01 type="group" title="Det 01" visible="1" removable="1" readonly="0"><name type="str" title="Name:" visible="1" removable="0" readonly="0">Det 1D</name><init type="bool" title="Init?:" visible="1" removable="0" readonly="0">1</init><params type="group" title="Settings:" visible="1" removable="0" readonly="0"><main_settings type="group" title="Main Settings:" visible="1" removable="0" readonly="0"><DAQ_type type="list" title="DAQ type:" visible="1" removable="0" readonly="1" limits="['DAQ0D', 'DAQ1D', 'DAQ2D', 'DAQND']" show_pb="1">str('DAQ1D')</DAQ_type><detector_type type="str" title="Detector type:" visible="1" removable="0" readonly="1">Mock</detector_type><module_name type="str" title="Detector Name:" visible="1" removable="0" readonly="1">Det 1D</module_name><plugin_config type="bool_push" title="Plugin Config:" visible="1" removable="0" readonly="0" label="Show Config">0</plugin_config><show_data type="bool" title="Show data and process:" visible="1" removable="0" readonly="0">1</show_data><refresh_time type="float" title="Refresh time (ms):" visible="1" removable="0" readonly="0">50.0</refresh_time><Naverage type="int" title="Naverage" visible="1" removable="0" readonly="0">1</Naverage><show_averaging type="bool" title="Show averaging:" visible="1" removable="0" readonly="0">0</show_averaging><live_averaging type="bool" title="Live averaging:" visible="1" removable="0" readonly="0">0</live_averaging><N_live_averaging type="int" title="N Live aver.:" visible="0" removable="0" readonly="0">0</N_live_averaging><wait_time type="int" title="Wait time (ms):" visible="1" removable="0" readonly="0">0</wait_time><continuous_saving_opt type="bool" title="Continuous saving:" visible="1" removable="0" readonly="0">0</continuous_saving_opt><tcpip type="group" title="TCP/IP options:" visible="1" removable="0" readonly="0"><connect_server type="bool_push" title="Connect to server:" visible="1" removable="0" readonly="0" label="Connect">0</connect_server><tcp_connected type="led" title="Connected?:" visible="1" removable="0" readonly="0">0</tcp_connected><ip_address type="str" title="IP address:" visible="1" removable="0" readonly="0">10.47.0.39</ip_address><port type="int" title="Port:" visible="1" removable="0" readonly="0">6341</port></tcpip><leco type="group" title="LECO options:" visible="1" removable="0" readonly="0"><connect_leco_server type="bool_push" title="Connect:" visible="1" removable="0" readonly="0" label="Connect">0</connect_leco_server><leco_connected type="led" title="Connected?:" visible="1" removable="0" readonly="0">0</leco_connected><leco_name type="str" title="Name" visible="1" removable="0" readonly="0" /><host type="str" title="Host:" visible="1" removable="0" readonly="0">localhost</host><port type="int" title="Port:" visible="1" removable="0" readonly="0">12300</port></leco><overshoot type="group" title="Overshoot options:" visible="1" removable="0" readonly="0"><stop_overshoot type="bool" title="Overshoot:" visible="1" removable="0" readonly="0">0</stop_overshoot><overshoot_value type="float" title="Overshoot value:" visible="1" removable="0" readonly="0">0</overshoot_value></overshoot><axes type="group" title="Axis options:" visible="1" removable="0" readonly="0"><use_calib type="list" title="Use calibration?:" visible="1" removable="0" readonly="0" limits="['None']" show_pb="1">str('None')</use_calib><xaxis type="group" title="X axis:" visible="1" removable="0" readonly="0"><xlabel type="str" title="Label:" visible="1" removable="0" readonly="0">x axis</xlabel><xunits type="str" title="Units:" visible="1" removable="0" readonly="0">pxls</xunits><xoffset type="float" title="Offset:" visible="1" removable="0" readonly="0">0.0</xoffset><xscaling type="float" title="Scaling" visible="1" removable="0" readonly="0">1.0</xscaling></xaxis><yaxis type="group" title="Y axis:" visible="1" removable="0" readonly="0"><ylabel type="str" title="Label:" visible="1" removable="0" readonly="0">y axis</ylabel><yunits type="str" title="Units:" visible="1" removable="0" readonly="0">pxls</yunits><yoffset type="float" title="Offset:" visible="1" removable="0" readonly="0">0.0</yoffset><yscaling type="float" title="Scaling" visible="1" removable="0" readonly="0">1.0</yscaling></yaxis></axes></main_settings><detector_settings type="group" title="Detector Settings" visible="1" removable="0" readonly="0"><controller_status type="list" title="Controller Status:" visible="1" removable="0" readonly="0" limits="['Master', 'Slave']" show_pb="1">str('Master')</controller_status><controller_ID type="int" title="Controller ID:" visible="1" removable="0" readonly="0">2407</controller_ID><rolling type="int" title="Rolling?:" visible="1" removable="0" readonly="0">0</rolling><multi type="bool" title="Multi Channels?:" visible="1" removable="0" readonly="0">0</multi><Mock1 type="group" title="Mock1:" visible="1" removable="0" readonly="0"><Amp type="int" title="Amp:" visible="1" removable="0" readonly="0">20</Amp><x0 type="float" title="x0:" visible="1" removable="0" readonly="0">500</x0><dx type="float" title="dx:" visible="1" removable="0" readonly="0">0.3</dx><n type="int" title="n:" visible="1" removable="0" readonly="0">1</n><amp_noise type="float" title="noise:" visible="1" removable="0" readonly="0">0.1</amp_noise></Mock1><Mock2 type="group" title="Mock2:" visible="1" removable="0" readonly="0"><Amp type="int" title="Amp?:" visible="1" removable="0" readonly="0">10</Amp><x0 type="float" title="x0:" visible="1" removable="0" readonly="0">520</x0><dx type="float" title="dx:" visible="1" removable="0" readonly="0">0.7</dx><n type="int" title="n:" visible="1" removable="0" readonly="0">2</n><amp_noise type="float" title="noise:" visible="1" removable="0" readonly="0">0.1</amp_noise></Mock2><x_axis type="group" title="xaxis:" visible="1" removable="0" readonly="0"><Npts type="int" title="Npts:" visible="1" removable="0" readonly="0">513</Npts><x0 type="float" title="x0:" visible="1" removable="0" readonly="0">515</x0><dx type="float" title="dx:" visible="1" removable="0" readonly="0">0.1</dx></x_axis></detector_settings></params></det01><det02 type="group" title="Det 02" visible="1" removable="1" readonly="0"><name type="str" title="Name:" visible="1" removable="0" readonly="0">Det 2D</name><init type="bool" title="Init?:" visible="1" removable="0" readonly="0">1</init><params type="group" title="Settings:" visible="1" removable="0" readonly="0"><main_settings type="group" title="Main Settings:" visible="1" removable="0" readonly="0"><DAQ_type type="list" title="DAQ type:" visible="1" removable="0" readonly="1" limits="['DAQ0D', 'DAQ1D', 'DAQ2D', 'DAQND']" show_pb="1">str('DAQ2D')</DAQ_type><detector_type type="str" title="Detector type:" visible="1" removable="0" readonly="1">Mock</detector_type><module_name type="str" title="Detector Name:" visible="1" removable="0" readonly="1">Det 2D</module_name><plugin_config type="bool_push" title="Plugin Config:" visible="1" removable="0" readonly="0" label="Show Config">0</plugin_config><show_data type="bool" title="Show data and process:" visible="1" removable="0" readonly="0">1</show_data><refresh_time type="float" title="Refresh time (ms):" visible="1" removable="0" readonly="0">50.0</refresh_time><Naverage type="int" title="Naverage" visible="1" removable="0" readonly="0">1</Naverage><show_averaging type="bool" title="Show averaging:" visible="1" removable="0" readonly="0">0</show_averaging><live_averaging type="bool" title="Live averaging:" visible="1" removable="0" readonly="0">0</live_averaging><N_live_averaging type="int" title="N Live aver.:" visible="0" removable="0" readonly="0">0</N_live_averaging><wait_time type="int" title="Wait time (ms):" visible="1" removable="0" readonly="0">0</wait_time><continuous_saving_opt type="bool" title="Continuous saving:" visible="1" removable="0" readonly="0">0</continuous_saving_opt><tcpip type="group" title="TCP/IP options:" visible="1" removable="0" readonly="0"><connect_server type="bool_push" title="Connect to server:" visible="1" removable="0" readonly="0" label="Connect">0</connect_server><tcp_connected type="led" title="Connected?:" visible="1" removable="0" readonly="0">0</tcp_connected><ip_address type="str" title="IP address:" visible="1" removable="0" readonly="0">10.47.0.39</ip_address><port type="int" title="Port:" visible="1" removable="0" readonly="0">6341</port></tcpip><leco type="group" title="LECO options:" visible="1" removable="0" readonly="0"><connect_leco_server type="bool_push" title="Connect:" visible="1" removable="0" readonly="0" label="Connect">0</connect_leco_server><leco_connected type="led" title="Connected?:" visible="1" removable="0" readonly="0">0</leco_connected><leco_name type="str" title="Name" visible="1" removable="0" readonly="0" /><host type="str" title="Host:" visible="1" removable="0" readonly="0">localhost</host><port type="int" title="Port:" visible="1" removable="0" readonly="0">12300</port></leco><overshoot type="group" title="Overshoot options:" visible="1" removable="0" readonly="0"><stop_overshoot type="bool" title="Overshoot:" visible="1" removable="0" readonly="0">0</stop_overshoot><overshoot_value type="float" title="Overshoot value:" visible="1" removable="0" readonly="0">0</overshoot_value></overshoot><axes type="group" title="Axis options:" visible="1" removable="0" readonly="0"><use_calib type="list" title="Use calibration?:" visible="1" removable="0" readonly="0" limits="['None']" show_pb="1">str('None')</use_calib><xaxis type="group" title="X axis:" visible="1" removable="0" readonly="0"><xlabel type="str" title="Label:" visible="1" removable="0" readonly="0">x axis</xlabel><xunits type="str" title="Units:" visible="1" removable="0" readonly="0">pxls</xunits><xoffset type="float" title="Offset:" visible="1" removable="0" readonly="0">0.0</xoffset><xscaling type="float" title="Scaling" visible="1" removable="0" readonly="0">1.0</xscaling></xaxis><yaxis type="group" title="Y axis:" visible="1" removable="0" readonly="0"><ylabel type="str" title="Label:" visible="1" removable="0" readonly="0">y axis</ylabel><yunits type="str" title="Units:" visible="1" removable="0" readonly="0">pxls</yunits><yoffset type="float" title="Offset:" visible="1" removable="0" readonly="0">0.0</yoffset><yscaling type="float" title="Scaling" visible="1" removable="0" readonly="0">1.0</yscaling></yaxis></axes></main_settings><detector_settings type="group" title="Detector Settings" visible="1" removable="0" readonly="0"><controller_status type="list" title="Controller Status:" visible="1" removable="0" readonly="0" limits="['Master', 'Slave']" show_pb="1">str('Master')</controller_status><controller_ID type="int" title="Controller ID:" visible="1" removable="0" readonly="0">7412</controller_ID><Nimagescolor type="int" title="Nimages colors:" visible="1" removable="0" readonly="0">1</Nimagescolor><Nimagespannel type="int" title="Nimages pannels:" visible="1" removable="0" readonly="0">2</Nimagespannel><use_roi_select type="bool" title="Use ROISelect" visible="1" removable="0" readonly="0">0</use_roi_select><threshold type="int" title="Threshold" visible="1" removable="0" readonly="0">1</threshold><rolling type="int" title="rolling" visible="1" removable="0" readonly="0">1</rolling><Nx type="int" title="Nx" visible="1" removable="0" readonly="0">100</Nx><Ny type="int" title="Ny" visible="1" removable="0" readonly="0">200</Ny><Amp type="int" title="Amp" visible="1" removable="0" readonly="0">20</Amp><x0 type="slide" title="x0" visible="1" removable="0" readonly="0">50</x0><y0 type="float" title="y0" visible="1" removable="0" readonly="0">100</y0><dx type="float" title="dx" visible="1" removable="0" readonly="0">20</dx><dy type="float" title="dy" visible="1" removable="0" readonly="0">40</dy><n type="int" title="n" visible="1" removable="0" readonly="0">1</n><amp_noise type="float" title="amp_noise" visible="1" removable="0" readonly="0">4</amp_noise><cam_settings type="group" title="Cam. Prop.:" visible="1" removable="0" readonly="0" /></detector_settings></params></det02></Detectors></Preset>
|
pymodaq/utils/config.py
CHANGED
|
@@ -1,6 +1,13 @@
|
|
|
1
|
-
|
|
1
|
+
|
|
2
|
+
from pathlib import Path
|
|
3
|
+
|
|
4
|
+
try:
|
|
5
|
+
from pymodaq_gui.config_saver_loader import get_set_roi_path
|
|
6
|
+
except ModuleNotFoundError:
|
|
7
|
+
from pymodaq_gui.config import get_set_roi_path
|
|
8
|
+
|
|
9
|
+
from pymodaq_utils.config import (BaseConfig, ConfigError, get_set_config_dir,
|
|
2
10
|
USER, CONFIG_BASE_PATH, get_set_local_dir)
|
|
3
|
-
from pymodaq_gui.config import get_set_roi_path
|
|
4
11
|
|
|
5
12
|
|
|
6
13
|
def get_set_preset_path():
|
|
@@ -39,6 +46,8 @@ def get_set_overshoot_path():
|
|
|
39
46
|
return get_set_config_dir('overshoot_configs')
|
|
40
47
|
|
|
41
48
|
|
|
42
|
-
|
|
43
|
-
|
|
49
|
+
class Config(BaseConfig):
|
|
50
|
+
"""Main class to deal with configuration values for this plugin"""
|
|
51
|
+
config_template_path = Path(__file__).parent.parent.joinpath('resources/config_template.toml')
|
|
52
|
+
config_name = f"config_pymodaq"
|
|
44
53
|
|
pymodaq/utils/daq_utils.py
CHANGED
|
@@ -124,6 +124,20 @@ def get_instrument_plugins(): # pragma: no cover
|
|
|
124
124
|
except Exception as e:
|
|
125
125
|
logger.debug(f'Impossible to import PID utility plugin: {str(e)}')
|
|
126
126
|
|
|
127
|
+
# add utility plugin for DataMixer
|
|
128
|
+
try:
|
|
129
|
+
data_mixer_module = importlib.import_module('pymodaq.extensions.data_mixer')
|
|
130
|
+
mod = [{'name': 'DataMixer',
|
|
131
|
+
'module': data_mixer_module,
|
|
132
|
+
'parent_module': data_mixer_module,
|
|
133
|
+
'type': 'daq_0Dviewer'}]
|
|
134
|
+
importlib.import_module(f'{data_mixer_module.__package__}.daq_0Dviewer_DataMixer')
|
|
135
|
+
plugins_import.extend(mod)
|
|
136
|
+
|
|
137
|
+
except Exception as e:
|
|
138
|
+
logger.debug(f'Impossible to import the DataMixer utility plugin: {str(e)}')
|
|
139
|
+
|
|
140
|
+
|
|
127
141
|
plugins_import.sort(key=lambda mod: mod['name'])
|
|
128
142
|
return plugins_import
|
|
129
143
|
|
pymodaq/utils/data.py
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
from pathlib import Path
|
|
2
2
|
|
|
3
|
-
from qtpy import
|
|
3
|
+
from qtpy.QtWidgets import QMessageBox, QMainWindow
|
|
4
4
|
|
|
5
5
|
from pymodaq.dashboard import DashBoard
|
|
6
6
|
from pymodaq.utils.gui_utils import DockArea
|
|
@@ -9,7 +9,8 @@ from pymodaq.extensions.utils import CustomExt
|
|
|
9
9
|
|
|
10
10
|
|
|
11
11
|
def load_dashboard_with_preset(preset_name: str, extension_name: str) -> \
|
|
12
|
-
(DashBoard, CustomExt,
|
|
12
|
+
(DashBoard, CustomExt, QMainWindow):
|
|
13
|
+
|
|
13
14
|
""" Load the Dashboard using a given preset then load an extension
|
|
14
15
|
|
|
15
16
|
Parameters
|
|
@@ -29,7 +30,7 @@ def load_dashboard_with_preset(preset_name: str, extension_name: str) -> \
|
|
|
29
30
|
-------
|
|
30
31
|
|
|
31
32
|
"""
|
|
32
|
-
win =
|
|
33
|
+
win = QMainWindow()
|
|
33
34
|
area = DockArea()
|
|
34
35
|
win.setCentralWidget(area)
|
|
35
36
|
win.resize(1000, 500)
|
|
@@ -45,21 +46,30 @@ def load_dashboard_with_preset(preset_name: str, extension_name: str) -> \
|
|
|
45
46
|
|
|
46
47
|
if file is not None and file.exists():
|
|
47
48
|
dashboard.set_preset_mode(file)
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
49
|
+
|
|
50
|
+
if extension_name:
|
|
51
|
+
if extension_name == 'DAQScan':
|
|
52
|
+
extension = dashboard.load_scan_module()
|
|
53
|
+
elif extension_name == 'DAQLogger':
|
|
54
|
+
extension = dashboard.load_log_module()
|
|
55
|
+
elif extension_name == 'DAQ_PID':
|
|
56
|
+
extension = dashboard.load_pid_module()
|
|
57
|
+
elif extension_name == 'Bayesian':
|
|
58
|
+
extension = dashboard.load_bayesian()
|
|
59
|
+
elif extension_name == 'AdaptiveScan':
|
|
60
|
+
extension = dashboard.load_adaptive()
|
|
61
|
+
elif extension_name == 'Data Mixer':
|
|
62
|
+
extension = dashboard.load_datamixer()
|
|
63
|
+
else:
|
|
64
|
+
extension = dashboard.load_extension_from_name(extension_name)
|
|
56
65
|
else:
|
|
57
|
-
extension =
|
|
66
|
+
extension = None
|
|
67
|
+
|
|
58
68
|
else:
|
|
59
|
-
msgBox =
|
|
69
|
+
msgBox = QMessageBox()
|
|
60
70
|
msgBox.setText(f"The default file specified in the configuration file does not exists!\n"
|
|
61
71
|
f"{file}\n"
|
|
62
72
|
f"Impossible to load the {extension_name} extension")
|
|
63
|
-
msgBox.setStandardButtons(
|
|
73
|
+
msgBox.setStandardButtons(QMessageBox.StandardButton.Ok)
|
|
64
74
|
ret = msgBox.exec()
|
|
65
|
-
return dashboard, extension, win
|
|
75
|
+
return dashboard, extension, win
|