pymodaq 4.1.0__tar.gz → 4.1.1__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.

Files changed (424) hide show
  1. {pymodaq-4.1.0 → pymodaq-4.1.1}/PKG-INFO +1 -1
  2. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/control_modules/daq_move.py +4 -4
  3. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/extensions/daq_scan.py +26 -8
  4. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/post_treatment/load_and_plot.py +44 -21
  5. pymodaq-4.1.1/src/pymodaq/resources/VERSION +1 -0
  6. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/utils/data.py +7 -0
  7. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/utils/h5modules/data_saving.py +54 -34
  8. pymodaq-4.1.1/src/pymodaq/utils/h5modules/h5logging.py +85 -0
  9. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/utils/h5modules/module_saving.py +16 -17
  10. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/utils/h5modules/saving.py +7 -21
  11. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/utils/managers/modules_manager.py +2 -2
  12. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/utils/parameter/pymodaq_ptypes/itemselect.py +30 -26
  13. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/utils/plotting/data_viewers/viewerND.py +39 -24
  14. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/utils/scanner/scanners/_1d_scanners.py +2 -1
  15. pymodaq-4.1.0/src/pymodaq/resources/VERSION +0 -1
  16. pymodaq-4.1.0/src/pymodaq/utils/h5modules/h5logging.py +0 -128
  17. {pymodaq-4.1.0 → pymodaq-4.1.1}/.gitignore +0 -0
  18. {pymodaq-4.1.0 → pymodaq-4.1.1}/LICENSE +0 -0
  19. {pymodaq-4.1.0 → pymodaq-4.1.1}/README.rst +0 -0
  20. {pymodaq-4.1.0 → pymodaq-4.1.1}/pyproject.toml +0 -0
  21. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/__init__.py +0 -0
  22. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/control_modules/__init__.py +0 -0
  23. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/control_modules/daq_move_ui.py +0 -0
  24. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/control_modules/daq_viewer.py +0 -0
  25. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/control_modules/daq_viewer_ui.py +0 -0
  26. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/control_modules/mocks.py +0 -0
  27. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/control_modules/move_utility_classes.py +0 -0
  28. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/control_modules/utils.py +0 -0
  29. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/control_modules/viewer_utility_classes.py +0 -0
  30. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/dashboard.py +0 -0
  31. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/examples/Labview_TCP_Client/DAQ_TCP_Client.aliases +0 -0
  32. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/examples/Labview_TCP_Client/DAQ_TCP_Client.lvlps +0 -0
  33. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/examples/Labview_TCP_Client/DAQ_TCP_Client.lvproj +0 -0
  34. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/examples/Labview_TCP_Client/DAQ_TCP_Client.vi +0 -0
  35. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/examples/Labview_TCP_Client/DAQ_TCP_Server_1Dgaussian.vi +0 -0
  36. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/examples/Labview_TCP_Client/DAQ_TCP_Server_2Dgaussian.vi +0 -0
  37. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/examples/Labview_TCP_Client/DAQ_TCP_read_cmd.vi +0 -0
  38. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/examples/Labview_TCP_Client/DAQ_TCP_read_float.vi +0 -0
  39. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/examples/Labview_TCP_Client/DAQ_TCP_read_int.vi +0 -0
  40. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/examples/Labview_TCP_Client/DAQ_TCP_send_data.vi +0 -0
  41. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/examples/Labview_TCP_Client/DAQ_TCP_send_int.vi +0 -0
  42. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/examples/Labview_TCP_Client/DAQ_TCP_send_scalar.vi +0 -0
  43. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/examples/Labview_TCP_Client/DAQ_TCP_send_string.vi +0 -0
  44. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/examples/Labview_TCP_Client/client_state.ctl +0 -0
  45. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/examples/Labview_TCP_Client/cmd_types.ctl +0 -0
  46. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/examples/__init__.py +0 -0
  47. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/examples/custom_app.py +0 -0
  48. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/examples/custom_viewer.py +0 -0
  49. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/examples/function_plotter.py +0 -0
  50. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/examples/nonlinearscanner.py +0 -0
  51. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/examples/parameter_ex.py +0 -0
  52. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/examples/preset_MockCamera.xml +0 -0
  53. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/extensions/__init__.py +0 -0
  54. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/extensions/console.py +0 -0
  55. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/extensions/daq_logger.py +0 -0
  56. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/extensions/daq_scan_ui.py +0 -0
  57. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/extensions/h5browser.py +0 -0
  58. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/extensions/pid/__init__.py +0 -0
  59. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/extensions/pid/daq_move_PID.py +0 -0
  60. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/extensions/pid/pid_controller.py +0 -0
  61. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/extensions/pid/utils.py +0 -0
  62. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/extensions/utils.py +0 -0
  63. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/icon.ico +0 -0
  64. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/post_treatment/__init__.py +0 -0
  65. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/post_treatment/daq_analysis/__init__.py +0 -0
  66. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/post_treatment/daq_measurement/__init__.py +0 -0
  67. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/post_treatment/daq_measurement/daq_measurement_GUI.py +0 -0
  68. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/post_treatment/daq_measurement/daq_measurement_GUI.ui +0 -0
  69. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/post_treatment/daq_measurement/daq_measurement_main.py +0 -0
  70. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/post_treatment/daq_measurement/process_from_QtDesigner_DAQ_Measurement_GUI.bat +0 -0
  71. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/post_treatment/process_to_scalar.py +0 -0
  72. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/1d.png +0 -0
  73. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/2d.png +0 -0
  74. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/3d.png +0 -0
  75. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Add2.png +0 -0
  76. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Add_Step.png +0 -0
  77. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Approve.png +0 -0
  78. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Approve_All.png +0 -0
  79. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Browse_Dir_Path.png +0 -0
  80. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Calculator.png +0 -0
  81. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/ChnGroup.png +0 -0
  82. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/ChnNum.png +0 -0
  83. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/ChnText.png +0 -0
  84. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/ChnTime.png +0 -0
  85. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/ChnWave.png +0 -0
  86. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Close3.png +0 -0
  87. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/CollapseAll.png +0 -0
  88. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/CollapseAll_32.png +0 -0
  89. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/ColorPicker.png +0 -0
  90. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Contract.png +0 -0
  91. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Create.png +0 -0
  92. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/DeleteLayer.png +0 -0
  93. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/EditOpen.png +0 -0
  94. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/EditRedo.png +0 -0
  95. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/EditUndo.png +0 -0
  96. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Ellipse.png +0 -0
  97. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/EllipseFilled.png +0 -0
  98. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Error.png +0 -0
  99. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/ErrorMessage.png +0 -0
  100. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Error_16.png +0 -0
  101. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Exit.png +0 -0
  102. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Expand.png +0 -0
  103. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/ExpandAll.png +0 -0
  104. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/ExpandAll_32.png +0 -0
  105. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/FFT.png +0 -0
  106. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/HLM.ico +0 -0
  107. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Help.png +0 -0
  108. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Help_32.png +0 -0
  109. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Histogram.png +0 -0
  110. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/LUT_LookUpTable.png +0 -0
  111. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/MagnifyingGlass.png +0 -0
  112. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/MagnifyingGlass_24.png +0 -0
  113. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Marker.png +0 -0
  114. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Math.png +0 -0
  115. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/MeasurementStudio_32.png +0 -0
  116. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Move.png +0 -0
  117. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/MoveDown.png +0 -0
  118. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/MoveUp.png +0 -0
  119. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Multiply.png +0 -0
  120. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/NewFile.png +0 -0
  121. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/NewLayer.png +0 -0
  122. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/New_File.png +0 -0
  123. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/New_Folder.png +0 -0
  124. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Open.png +0 -0
  125. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Open_1D.png +0 -0
  126. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Open_2D.png +0 -0
  127. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Open_File.png +0 -0
  128. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Open_File_32.png +0 -0
  129. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Open_sim.png +0 -0
  130. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Options.png +0 -0
  131. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Oscilloscope.png +0 -0
  132. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Oscilloscope_16.png +0 -0
  133. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Pass.png +0 -0
  134. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/RGB.png +0 -0
  135. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Rectangle.png +0 -0
  136. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/RectangleFilled.png +0 -0
  137. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Redo.png +0 -0
  138. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Refresh.png +0 -0
  139. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Refresh2.png +0 -0
  140. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Refresh_32.png +0 -0
  141. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Region.png +0 -0
  142. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Rendezvous.png +0 -0
  143. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/SELECT.png +0 -0
  144. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Save.png +0 -0
  145. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/SaveAll.png +0 -0
  146. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/SaveAll_32.png +0 -0
  147. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/SaveAs.png +0 -0
  148. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/SaveAs_32.png +0 -0
  149. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Save_24.png +0 -0
  150. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Save_32.png +0 -0
  151. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Search.png +0 -0
  152. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/SelectPolygon.png +0 -0
  153. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Select_24.png +0 -0
  154. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Settings.png +0 -0
  155. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Snap&Save.png +0 -0
  156. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Snapshot.png +0 -0
  157. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Snapshot2.png +0 -0
  158. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Snapshot2_16.png +0 -0
  159. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Snapshot2_32.png +0 -0
  160. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Spreadsheet.png +0 -0
  161. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Statistics.png +0 -0
  162. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Statistics2.png +0 -0
  163. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Status.png +0 -0
  164. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Subtract.png +0 -0
  165. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Vision.png +0 -0
  166. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Volts.png +0 -0
  167. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Wait2.png +0 -0
  168. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Zoom_1_1.png +0 -0
  169. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Zoom_in.png +0 -0
  170. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Zoom_out.png +0 -0
  171. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/Zoom_to_Selection.png +0 -0
  172. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/abort.png +0 -0
  173. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/advanced2.png +0 -0
  174. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/autoscale.png +0 -0
  175. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/b_icon.png +0 -0
  176. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/back.png +0 -0
  177. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/bg_icon.png +0 -0
  178. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/camera.png +0 -0
  179. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/camera_snap.png +0 -0
  180. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/cartesian.png +0 -0
  181. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/clear2.png +0 -0
  182. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/clear_ROI.png +0 -0
  183. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/close2.png +0 -0
  184. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/cluster2.png +0 -0
  185. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/color.png +0 -0
  186. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/color2.png +0 -0
  187. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/continuous.png +0 -0
  188. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/data.png +0 -0
  189. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/delay.png +0 -0
  190. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/download.png +0 -0
  191. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/download2.png +0 -0
  192. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/error2.png +0 -0
  193. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/ethernet.png +0 -0
  194. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/exit2.png +0 -0
  195. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/fan.png +0 -0
  196. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/filter2.png +0 -0
  197. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/g_icon.png +0 -0
  198. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/gear2.png +0 -0
  199. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/go_to.png +0 -0
  200. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/go_to_1.png +0 -0
  201. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/go_to_2.png +0 -0
  202. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/grab.png +0 -0
  203. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/graph.png +0 -0
  204. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/greenLight2.png +0 -0
  205. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/greenLight2_32.png +0 -0
  206. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/green_light.png +0 -0
  207. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/grey_icon.png +0 -0
  208. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/greyscale.png +0 -0
  209. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/help1.png +0 -0
  210. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/help1_32.png +0 -0
  211. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/home2.png +0 -0
  212. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/information2.png +0 -0
  213. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/ini.png +0 -0
  214. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/integrator.png +0 -0
  215. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/joystick.png +0 -0
  216. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/light_green.png +0 -0
  217. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/light_green_16.png +0 -0
  218. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/light_red.png +0 -0
  219. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/light_red_16.png +0 -0
  220. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/light_yellow.png +0 -0
  221. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/light_yellow_16.png +0 -0
  222. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/limiter.png +0 -0
  223. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/load_ROI.png +0 -0
  224. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/meshPlot.png +0 -0
  225. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/meter.png +0 -0
  226. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/meter2.png +0 -0
  227. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/meter_32.png +0 -0
  228. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/move_contour.png +0 -0
  229. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/move_straight_line.png +0 -0
  230. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/movie.png +0 -0
  231. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/multi_point.png +0 -0
  232. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/multiplexer.png +0 -0
  233. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/new.png +0 -0
  234. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/openArrow.png +0 -0
  235. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/openTree.png +0 -0
  236. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/oscilloscope2.png +0 -0
  237. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/oscilloscope3.png +0 -0
  238. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/overlay.png +0 -0
  239. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/pass2.png +0 -0
  240. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/pass2_16.png +0 -0
  241. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/pass_32.png +0 -0
  242. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/pause.png +0 -0
  243. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/permute.png +0 -0
  244. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/phase.png +0 -0
  245. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/play.png +0 -0
  246. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/polar.png +0 -0
  247. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/pole_zero.png +0 -0
  248. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/powerMeter.png +0 -0
  249. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/powerSwitch.png +0 -0
  250. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/powerSwitch_16.png +0 -0
  251. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/print2.png +0 -0
  252. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/print2_32.png +0 -0
  253. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/properties.png +0 -0
  254. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/r_icon.png +0 -0
  255. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/radiocontrolbutton.png +0 -0
  256. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/read2.png +0 -0
  257. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/red_light.png +0 -0
  258. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/remove.png +0 -0
  259. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/reset.png +0 -0
  260. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/rgb_icon.png +0 -0
  261. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/robot.png +0 -0
  262. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/rotation2.png +0 -0
  263. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/run2.png +0 -0
  264. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/run_all.png +0 -0
  265. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/saturation.png +0 -0
  266. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/saveTree.png +0 -0
  267. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/save_ROI.png +0 -0
  268. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/scale_horizontally.png +0 -0
  269. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/scale_vertically.png +0 -0
  270. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/search2.png +0 -0
  271. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/select2.png +0 -0
  272. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/select_all.png +0 -0
  273. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/select_all2.png +0 -0
  274. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/select_none.png +0 -0
  275. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/sequence.png +0 -0
  276. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/sequence2.png +0 -0
  277. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/snap.png +0 -0
  278. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/sort_ascend.png +0 -0
  279. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/spectrumAnalyzer.png +0 -0
  280. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/start.png +0 -0
  281. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/status_cancelled.png +0 -0
  282. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/stop.png +0 -0
  283. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/stop2.png +0 -0
  284. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/stop3.png +0 -0
  285. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/stop_all.png +0 -0
  286. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/sum.png +0 -0
  287. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/surfacePlot.png +0 -0
  288. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/tree.png +0 -0
  289. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/updateTree.png +0 -0
  290. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/utility2.png +0 -0
  291. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/utility_small.png +0 -0
  292. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/vector.png +0 -0
  293. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/verify.png +0 -0
  294. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/video.png +0 -0
  295. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/wait.png +0 -0
  296. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/waterfallPlot.png +0 -0
  297. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/watershed.png +0 -0
  298. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/yellow_light.png +0 -0
  299. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/zip_file.png +0 -0
  300. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/zoomAuto.png +0 -0
  301. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/Icon_Library/zoomReset.png +0 -0
  302. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/QtDesigner_ressources.bat +0 -0
  303. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/QtDesigner_ressources.qrc +0 -0
  304. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/QtDesigner_ressources_rc.py +0 -0
  305. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/__init__.py +0 -0
  306. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/QtDesigner_Ressources/icons.svg +0 -0
  307. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/__init__.py +0 -0
  308. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/config_scan_template.toml +0 -0
  309. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/config_template.toml +0 -0
  310. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/preset_default.xml +0 -0
  311. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/setup_plugin.py +0 -0
  312. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/resources/triangulation_data.npy +0 -0
  313. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/splash.png +0 -0
  314. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/utils/__init__.py +0 -0
  315. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/utils/abstract/__init__.py +0 -0
  316. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/utils/abstract/logger.py +0 -0
  317. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/utils/array_manipulation.py +0 -0
  318. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/utils/calibration_camera.py +0 -0
  319. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/utils/chrono_timer.py +0 -0
  320. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/utils/config.py +0 -0
  321. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/utils/conftests.py +0 -0
  322. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/utils/daq_utils.py +0 -0
  323. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/utils/db/__init__.py +0 -0
  324. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/utils/db/db_logger/__init__.py +0 -0
  325. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/utils/db/db_logger/db_logger.py +0 -0
  326. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/utils/db/db_logger/db_logger_models.py +0 -0
  327. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/utils/enums.py +0 -0
  328. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/utils/exceptions.py +0 -0
  329. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/utils/factory.py +0 -0
  330. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/utils/gui_utils/__init__.py +0 -0
  331. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/utils/gui_utils/custom_app.py +0 -0
  332. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/utils/gui_utils/dock.py +0 -0
  333. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/utils/gui_utils/file_io.py +0 -0
  334. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/utils/gui_utils/layout.py +0 -0
  335. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/utils/gui_utils/list_picker.py +0 -0
  336. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/utils/gui_utils/utils.py +0 -0
  337. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/utils/gui_utils/widgets/__init__.py +0 -0
  338. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/utils/gui_utils/widgets/label.py +0 -0
  339. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/utils/gui_utils/widgets/lcd.py +0 -0
  340. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/utils/gui_utils/widgets/push.py +0 -0
  341. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/utils/gui_utils/widgets/qled.py +0 -0
  342. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/utils/gui_utils/widgets/spinbox.py +0 -0
  343. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/utils/gui_utils/widgets/table.py +0 -0
  344. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/utils/gui_utils/widgets/tree_layout.py +0 -0
  345. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/utils/gui_utils/widgets/tree_toml.py +0 -0
  346. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/utils/h5modules/__init__.py +0 -0
  347. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/utils/h5modules/backends.py +0 -0
  348. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/utils/h5modules/browsing.py +0 -0
  349. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/utils/h5modules/exporter.py +0 -0
  350. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/utils/h5modules/exporters/__init__.py +0 -0
  351. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/utils/h5modules/exporters/base.py +0 -0
  352. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/utils/h5modules/exporters/flimj.py +0 -0
  353. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/utils/h5modules/exporters/hyperspy.py +0 -0
  354. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/utils/h5modules/utils.py +0 -0
  355. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/utils/logger.py +0 -0
  356. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/utils/managers/__init__.py +0 -0
  357. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/utils/managers/action_manager.py +0 -0
  358. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/utils/managers/batchscan_manager.py +0 -0
  359. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/utils/managers/overshoot_manager.py +0 -0
  360. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/utils/managers/parameter_manager.py +0 -0
  361. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/utils/managers/preset_manager.py +0 -0
  362. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/utils/managers/preset_manager_utils.py +0 -0
  363. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/utils/managers/remote_manager.py +0 -0
  364. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/utils/managers/roi_manager.py +0 -0
  365. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/utils/math_utils.py +0 -0
  366. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/utils/messenger.py +0 -0
  367. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/utils/parameter/__init__.py +0 -0
  368. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/utils/parameter/ioxml.py +0 -0
  369. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/utils/parameter/pymodaq_ptypes/__init__.py +0 -0
  370. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/utils/parameter/pymodaq_ptypes/bool.py +0 -0
  371. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/utils/parameter/pymodaq_ptypes/date.py +0 -0
  372. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/utils/parameter/pymodaq_ptypes/filedir.py +0 -0
  373. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/utils/parameter/pymodaq_ptypes/led.py +0 -0
  374. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/utils/parameter/pymodaq_ptypes/list.py +0 -0
  375. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/utils/parameter/pymodaq_ptypes/numeric.py +0 -0
  376. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/utils/parameter/pymodaq_ptypes/pixmap.py +0 -0
  377. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/utils/parameter/pymodaq_ptypes/slide.py +0 -0
  378. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/utils/parameter/pymodaq_ptypes/table.py +0 -0
  379. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/utils/parameter/pymodaq_ptypes/tableview.py +0 -0
  380. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/utils/parameter/pymodaq_ptypes/text.py +0 -0
  381. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/utils/parameter/utils.py +0 -0
  382. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/utils/plotting/__init__.py +0 -0
  383. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/utils/plotting/data_viewers/__init__.py +0 -0
  384. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/utils/plotting/data_viewers/viewer.py +0 -0
  385. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/utils/plotting/data_viewers/viewer0D.py +0 -0
  386. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/utils/plotting/data_viewers/viewer1D.py +0 -0
  387. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/utils/plotting/data_viewers/viewer1Dbasic.py +0 -0
  388. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/utils/plotting/data_viewers/viewer2D.py +0 -0
  389. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/utils/plotting/data_viewers/viewer2D_basic.py +0 -0
  390. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/utils/plotting/gant_chart.py +0 -0
  391. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/utils/plotting/image_viewer.py +0 -0
  392. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/utils/plotting/items/__init__.py +0 -0
  393. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/utils/plotting/items/axis_scaled.py +0 -0
  394. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/utils/plotting/items/crosshair.py +0 -0
  395. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/utils/plotting/items/image.py +0 -0
  396. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/utils/plotting/navigator.py +0 -0
  397. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/utils/plotting/scan_selector.py +0 -0
  398. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/utils/plotting/utils/__init__.py +0 -0
  399. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/utils/plotting/utils/axes_viewer.py +0 -0
  400. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/utils/plotting/utils/filter.py +0 -0
  401. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/utils/plotting/utils/lineout.py +0 -0
  402. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/utils/plotting/utils/plot_utils.py +0 -0
  403. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/utils/plotting/utils/signalND.py +0 -0
  404. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/utils/plotting/widgets.py +0 -0
  405. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/utils/qvariant.py +0 -0
  406. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/utils/scanner/__init__.py +0 -0
  407. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/utils/scanner/scan_config.py +0 -0
  408. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/utils/scanner/scan_factory.py +0 -0
  409. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/utils/scanner/scanner.py +0 -0
  410. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/utils/scanner/scanners/_2d_scanners.py +0 -0
  411. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/utils/scanner/scanners/__init__.py +0 -0
  412. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/utils/scanner/scanners/sequential.py +0 -0
  413. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/utils/scanner/scanners/tabular.py +0 -0
  414. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/utils/scanner/utils.py +0 -0
  415. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/utils/slicing.py +0 -0
  416. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/utils/svg/__init__.py +0 -0
  417. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/utils/svg/svg_renderer.py +0 -0
  418. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/utils/svg/svg_view.py +0 -0
  419. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/utils/svg/svg_viewer2D.py +0 -0
  420. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/utils/tcp_ip/__init__.py +0 -0
  421. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/utils/tcp_ip/mysocket.py +0 -0
  422. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/utils/tcp_ip/serializer.py +0 -0
  423. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/utils/tcp_ip/tcp_server_client.py +0 -0
  424. {pymodaq-4.1.0 → pymodaq-4.1.1}/src/pymodaq/utils/units.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pymodaq
3
- Version: 4.1.0
3
+ Version: 4.1.1
4
4
  Summary: Modular Data Acquisition with Python
5
5
  Project-URL: Homepage, http://pymodaq.cnrs.fr
6
6
  Project-URL: Source, https://github.com/PyMoDAQ/PyMoDAQ
@@ -172,7 +172,7 @@ class DAQ_Move(ParameterManager, ControlModule):
172
172
  elif cmd.command == 'rel_value':
173
173
  self._relative_value = cmd.attribute
174
174
 
175
- def append_data(self, data: DataToExport = None, where: Union[Node, str] = None):
175
+ def append_data(self, dte: DataToExport = None, where: Union[Node, str] = None):
176
176
  """Appends current DataToExport to an ActuatorEnlargeableSaver
177
177
 
178
178
  Parameters
@@ -183,9 +183,9 @@ class DAQ_Move(ParameterManager, ControlModule):
183
183
  --------
184
184
  ActuatorEnlargeableSaver
185
185
  """
186
- if data is None:
187
- data = DataToExport(name=self.title, data=[self._current_value])
188
- self._add_data_to_saver(data, where=where)
186
+ if dte is None:
187
+ dte = DataToExport(name=self.title, data=[self._current_value])
188
+ self._add_data_to_saver(dte, where=where)
189
189
  # todo: test this for logging
190
190
 
191
191
  def _add_data_to_saver(self, data: DataToExport, where=None, **kwargs):
@@ -70,7 +70,8 @@ class DAQScan(QObject, ParameterManager):
70
70
  live_data_1D_signal = Signal(list)
71
71
 
72
72
  params = [
73
- {'title': 'Time Flow:', 'name': 'time_flow', 'type': 'group', 'expanded': False, 'children': [
73
+ {'title': 'Time Flow:', 'name': 'time_flow', 'type': 'group', 'expanded': False,
74
+ 'children': [
74
75
  {'title': 'Wait time step (ms)', 'name': 'wait_time', 'type': 'int', 'value': 0,
75
76
  'tip': 'Wait time in ms after each step of acquisition (move and grab)'},
76
77
  {'title': 'Wait time between (ms)', 'name': 'wait_time_between', 'type': 'int',
@@ -85,11 +86,13 @@ class DAQScan(QObject, ParameterManager):
85
86
  {'title': 'Plotting options', 'name': 'plot_options', 'type': 'group', 'children': [
86
87
  {'title': 'Get data', 'name': 'plot_probe', 'type': 'bool_push'},
87
88
  {'title': 'Group 0D data:', 'name': 'group0D', 'type': 'bool', 'value': True},
88
- {'title': 'Plot 0Ds:', 'name': 'plot_0d', 'type': 'itemselect'},
89
- {'title': 'Plot 1Ds:', 'name': 'plot_1d', 'type': 'itemselect'},
89
+ {'title': 'Plot 0Ds:', 'name': 'plot_0d', 'type': 'itemselect', 'checkbox': True},
90
+ {'title': 'Plot 1Ds:', 'name': 'plot_1d', 'type': 'itemselect', 'checkbox': True},
90
91
  {'title': 'Prepare Viewers', 'name': 'prepare_viewers', 'type': 'bool_push'},
91
- {'title': 'Plot at each step?', 'name': 'plot_at_each_step', 'type': 'bool', 'value': True},
92
- {'title': 'Refresh Plots (ms)', 'name': 'refresh_live', 'type': 'int', 'value': 1000, 'visible': False},
92
+ {'title': 'Plot at each step?', 'name': 'plot_at_each_step', 'type': 'bool',
93
+ 'value': True},
94
+ {'title': 'Refresh Plots (ms)', 'name': 'refresh_live', 'type': 'int',
95
+ 'value': 1000, 'visible': False},
93
96
  ]},
94
97
  ]
95
98
 
@@ -679,6 +682,14 @@ class DAQScan(QObject, ParameterManager):
679
682
  def save_temp_live_data(self, scan_data: ScanDataTemp):
680
683
  if scan_data.scan_index == 0:
681
684
  nav_axes = self.scanner.get_nav_axes()
685
+ Naverage = self.settings['scan_options', 'scan_average']
686
+ if Naverage > 1:
687
+ for nav_axis in nav_axes:
688
+ nav_axis.index += 1
689
+ nav_axes.append(data_mod.Axis('Average',
690
+ data=np.linspace(0, Naverage - 1, Naverage),
691
+ index=0))
692
+
682
693
  self.extended_saver.add_nav_axes(self.h5temp.raw_group, nav_axes)
683
694
 
684
695
  self.extended_saver.add_data(self.h5temp.raw_group, scan_data.data, scan_data.indexes,
@@ -694,8 +705,14 @@ class DAQScan(QObject, ParameterManager):
694
705
  average_axis = None
695
706
  try:
696
707
  self.live_plotter.load_plot_data(group_0D=self.settings['plot_options', 'group0D'],
697
- average_axis=average_axis, average_index=self.ind_average,
698
- target_at=self.scanner.positions[self.ind_scan])
708
+ average_axis=average_axis,
709
+ average_index=self.ind_average,
710
+ target_at=self.scanner.positions[self.ind_scan],
711
+ last_step=(self.ind_scan ==
712
+ self.scanner.positions.size - 1 and
713
+ self.ind_average ==
714
+ self.settings[
715
+ 'scan_options', 'scan_average'] - 1))
699
716
  except Exception as e:
700
717
  logger.exception(str(e))
701
718
  #################
@@ -1100,7 +1117,8 @@ class DAQScanAcquisition(QObject):
1100
1117
  if self.Naverage > 1:
1101
1118
  for nav_axis in nav_axes:
1102
1119
  nav_axis.index += 1
1103
- nav_axes.append(data_mod.Axis('Average', data=np.linspace(0, self.Naverage - 1, self.Naverage),
1120
+ nav_axes.append(data_mod.Axis('Average', data=np.linspace(0, self.Naverage - 1,
1121
+ self.Naverage),
1104
1122
  index=0))
1105
1123
  self.module_and_data_saver.add_nav_axes(nav_axes)
1106
1124
 
@@ -59,9 +59,12 @@ class LoaderPlotter:
59
59
  def data(self) -> DataToExport:
60
60
  return self._data
61
61
 
62
- def load_data(self, filter_dims: List[Union[DataDim, str]] = None, filter_full_names: List[str] = None,
63
- remove_navigation: bool = True, group_0D=False, average_axis: int=None, average_index: int = 0):
64
- """Load Data from the h5 node of the dataloader and apply some filtering/manipulation before plotting
62
+ def load_data(self, filter_dims: List[Union[DataDim, str]] = None,
63
+ filter_full_names: List[str] = None, remove_navigation: bool = True,
64
+ group_0D=False, average_axis: int=None, average_index: int = 0,
65
+ last_step=False):
66
+ """Load Data from the h5 node of the dataloader and apply some filtering/manipulation before
67
+ plotting
65
68
 
66
69
  Parameters
67
70
  ----------
@@ -70,14 +73,17 @@ class LoaderPlotter:
70
73
  filter_full_names: List[str]
71
74
  load only data matching these names
72
75
  remove_navigation: bool
73
- if True, make navigation axes as signal axes (means DataND could be plotted on Viewer1D or
74
- Viewer2D by concatenation)
76
+ if True, make navigation axes as signal axes (means DataND could be plotted on Viewer1D
77
+ or Viewer2D by concatenation)
75
78
  group_0D: bool
76
79
  if True, group all (initial) Data0D into one DataFromPlugins
77
80
  average_axis: int or None
78
- which axis in the data shapes should be interpereted as the average (in general it is 0 or None)
81
+ which axis in the data shapes should be interpereted as the average (in general it is 0
82
+ or None)
79
83
  average_index: int
80
84
  which step in the averaging process are we in.
85
+ last_step: bool
86
+ tells if this is the very last step of the (averaged) scan
81
87
 
82
88
  Returns
83
89
  -------
@@ -88,14 +94,15 @@ class LoaderPlotter:
88
94
  self.dataloader.load_all('/', self._data)
89
95
 
90
96
  if average_axis is not None:
91
- self.average_axis(average_axis, average_index)
97
+ self.average_axis(average_axis, average_index, last_step=last_step)
92
98
 
93
99
  if filter_dims is not None:
94
100
  filter_dims[:] = [enum_checker(DataDim, dim) for dim in filter_dims]
95
101
  self._data.data[:] = [data for data in self._data if data.dim in filter_dims]
96
102
 
97
103
  if filter_full_names is not None:
98
- self._data.data[:] = [data for data in self._data if data.get_full_name() in filter_full_names]
104
+ self._data.data[:] = [data for data in self._data if data.get_full_name() in
105
+ filter_full_names]
99
106
 
100
107
  if group_0D: # 0D initial data
101
108
  self.group_0D_data()
@@ -105,31 +112,39 @@ class LoaderPlotter:
105
112
 
106
113
  return self._data
107
114
 
108
- def average_axis(self, average_axis, average_index) -> None:
115
+ def average_axis(self, average_axis, average_index, last_step=False) -> None:
109
116
  """ Average the data along their average axis
110
117
 
111
118
  Parameters
112
119
  ----------
113
120
  average_axis: int or None
114
- which axis in the data shapes should be interpereted as the average (in general it is 0 or None)
121
+ which axis in the data shapes should be interpreted as the average
122
+ (in general it is 0 or None)
115
123
  average_index: int
116
124
  which step in the averaging process are we in.
125
+ last_step: bool
126
+ tells if this is the very last step of the (averaged) scan
117
127
  """
118
128
  for ind, data in enumerate(self._data):
119
129
  current_data = data.inav[average_index, ...]
120
- if average_index == 0:
121
- data_to_append = data.inav[0:average_index + 1, ...]
122
- else:
123
- data_to_append = data.inav[0:average_index + 1, ...].mean(axis=average_axis)
124
- data_to_append.labels = [f'{label}_averaged' for label in data_to_append.labels]
125
- current_data.append(data_to_append)
130
+ if average_index > 0:
131
+ if last_step:
132
+ data_to_append = data.inav[0:, ...].mean(axis=average_axis)
133
+ else:
134
+ if average_index == 1:
135
+ data_to_append = data.inav[0, ...]
136
+ else:
137
+ data_to_append = data.inav[0:average_index, ...].mean(axis=average_axis)
138
+
139
+ data_to_append.labels = [f'{label}_averaged' for label in data_to_append.labels]
140
+ current_data.append(data_to_append)
126
141
  self._data[ind] = current_data
127
142
 
128
143
  def remove_navigation_axes(self):
129
144
  """Make the navigation axes as signal axes
130
145
 
131
- transforms DataND into Data1D or Data2D or error... depending the exact shape of the data and the number of
132
- navigation axes
146
+ transforms DataND into Data1D or Data2D or error... depending the exact shape of the data
147
+ and the number of navigation axes
133
148
  """
134
149
  for data in self._data:
135
150
  data.nav_indexes = ()
@@ -164,10 +179,17 @@ class LoaderPlotter:
164
179
  -----
165
180
  load_data
166
181
  """
167
- if 'target_at' in kwargs:
168
- target_at = kwargs.pop('target_at')
182
+
183
+ target_at = kwargs.pop('target_at') if 'target_at' in kwargs else None
184
+ last_step = kwargs.pop('last_step') if 'last_step' in kwargs else False
185
+
169
186
  self.load_data(**kwargs)
170
187
  self.show_data(target_at=target_at)
188
+ if (last_step and 'average_index' in kwargs and kwargs['average_index']
189
+ is not None):
190
+ kwargs['last_step'] = last_step
191
+ self.load_data(**kwargs)
192
+ self.show_data(target_at=target_at)
171
193
 
172
194
  def show_data(self, **kwargs):
173
195
  """Send data to their dedicated viewers
@@ -197,7 +219,8 @@ class LoaderPlotter:
197
219
  self._viewers = dict(zip(viewers_name, self.dispatcher.viewers))
198
220
  self._viewer_docks = dict(zip(viewers_name, self.dispatcher.viewer_docks))
199
221
 
200
- def set_data_to_viewers(self, data: DataToExport, temp=False, target_at: Iterable[float] = None):
222
+ def set_data_to_viewers(self, data: DataToExport, temp=False,
223
+ target_at: Iterable[float] = None):
201
224
  """Process data dimensionality and send appropriate data to their data viewers
202
225
 
203
226
  Parameters
@@ -0,0 +1 @@
1
+ version = '4.1.1'
@@ -1588,6 +1588,13 @@ class DataWithAxes(DataBase):
1588
1588
  """convenience property to set attribute from axis_manager"""
1589
1589
  self.set_axes_manager(self.shape, axes=axes, nav_indexes=self.nav_indexes)
1590
1590
 
1591
+ def axes_limits(self, axes_indexes: List[int] = None) -> List[Tuple[float, float]]:
1592
+ """Get the limits of specified axes (all if axes_indexes is None)"""
1593
+ if axes_indexes is None:
1594
+ return [(axis.min(), axis.max()) for axis in self.axes]
1595
+ else:
1596
+ return [(axis.min(), axis.max()) for axis in self.axes if axis.index in axes_indexes]
1597
+
1591
1598
  @property
1592
1599
  def sig_indexes(self):
1593
1600
  """convenience property to fetch attribute from axis_manager"""
@@ -5,7 +5,7 @@ Created the 21/11/2022
5
5
  @author: Sebastien Weber
6
6
  """
7
7
  from time import time
8
- from typing import Union, List, Tuple
8
+ from typing import Union, List, Tuple, Iterable
9
9
 
10
10
  import numpy as np
11
11
 
@@ -308,7 +308,8 @@ class DataSaverLoader(DataManagement):
308
308
  bkg_nodes.append(node)
309
309
  return bkg_nodes
310
310
 
311
- def get_data_arrays(self, where: Union[Node, str], with_bkg=False, load_all=False) -> List[np.ndarray]:
311
+ def get_data_arrays(self, where: Union[Node, str], with_bkg=False,
312
+ load_all=False) -> List[np.ndarray]:
312
313
  """
313
314
 
314
315
  Parameters
@@ -338,15 +339,17 @@ class DataSaverLoader(DataManagement):
338
339
  getter = self._get_nodes
339
340
 
340
341
  if with_bkg:
341
- return [np.atleast_1d(np.squeeze(array.read()-bkg.read())) for array, bkg in zip(getter(where), bkg_nodes)]
342
+ return [np.atleast_1d(np.squeeze(array.read()-bkg.read()))
343
+ for array, bkg in zip(getter(where), bkg_nodes)]
342
344
  else:
343
345
  return [np.atleast_1d(np.squeeze(array.read())) for array in getter(where)]
344
346
 
345
347
  def load_data(self, where, with_bkg=False, load_all=False) -> DataWithAxes:
346
- """Return a DataWithAxes object from the Data and Axis Nodes hanging from (or among) a given Node
348
+ """Return a DataWithAxes object from the Data and Axis Nodes hanging from (or among) a
349
+ given Node
347
350
 
348
- Does not include navigation axes stored elsewhere in the h5file. The node path is stored in the DatWithAxis
349
- using the attribute path
351
+ Does not include navigation axes stored elsewhere in the h5file. The node path is stored in
352
+ the DatWithAxis using the attribute path
350
353
 
351
354
  Parameters
352
355
  ----------
@@ -383,18 +386,21 @@ class DataSaverLoader(DataManagement):
383
386
  axes = self.get_axes(parent_node)
384
387
 
385
388
  extra_attributes = data_node.attrs.to_dict()
386
- for name in ['TITLE', 'CLASS', 'VERSION', 'backend', 'source', 'data_dimension', 'distribution', 'label',
387
- 'origin', 'nav_indexes', 'dtype', 'data_type', 'subdtype', 'shape', 'size', 'EXTDIM', 'path']:
389
+ for name in ['TITLE', 'CLASS', 'VERSION', 'backend', 'source', 'data_dimension',
390
+ 'distribution', 'label', 'origin', 'nav_indexes', 'dtype', 'data_type',
391
+ 'subdtype', 'shape', 'size', 'EXTDIM', 'path']:
388
392
  extra_attributes.pop(name, None)
389
393
 
390
394
  data = DataWithAxes(data_node.attrs['TITLE'],
391
- source=data_node.attrs['source'] if 'source' in data_node.attrs else 'raw',
395
+ source=data_node.attrs['source'] if 'source' in data_node.attrs
396
+ else 'raw',
392
397
  dim=data_node.attrs['data_dimension'],
393
398
  distribution=data_node.attrs['distribution'],
394
399
  data=ndarrays,
395
400
  labels=[node.attrs['label'] for node in data_nodes],
396
401
  origin=data_node.attrs['origin'] if 'origin' in data_node.attrs else '',
397
- nav_indexes=data_node.attrs['nav_indexes'] if 'nav_indexes' in data_node.attrs else (),
402
+ nav_indexes=data_node.attrs['nav_indexes'] if 'nav_indexes' in
403
+ data_node.attrs else (),
398
404
  axes=axes,
399
405
  path=data_node.path,
400
406
  **extra_attributes)
@@ -575,7 +581,7 @@ class DataExtendedSaver(DataSaverLoader):
575
581
  where: Union[Node, str]
576
582
  the path of a given node or the node itself
577
583
  data: DataWithAxes
578
- indexes: List[int]
584
+ indexes: Iterable[int]
579
585
  indexes where to save data in the init h5array (should have the same length as extended_shape and with values
580
586
  coherent with this shape
581
587
  """
@@ -591,7 +597,8 @@ class DataExtendedSaver(DataSaverLoader):
591
597
  for ind_data in range(len(data)):
592
598
  #todo check that getting with index is safe...
593
599
  array: CARRAY = self.get_node_from_index(where, ind_data)
594
- array[tuple(indexes)] = data[ind_data] # maybe use array.__setitem__(indexes, data[ind_data]) if it's not working
600
+ array[tuple(indexes)] = data[ind_data]
601
+ # maybe use array.__setitem__(indexes, data[ind_data]) if it's not working
595
602
 
596
603
 
597
604
  class DataToExportSaver:
@@ -619,11 +626,12 @@ class DataToExportSaver:
619
626
 
620
627
  @staticmethod
621
628
  def channel_formatter(ind: int):
622
- """All DataWithAxes included in the DataToExport will be saved into a channel group indexed and
623
- formatted as below"""
629
+ """All DataWithAxes included in the DataToExport will be saved into a channel group indexed
630
+ and formatted as below"""
624
631
  return f'CH{ind:02d}'
625
632
 
626
- def add_data(self, where: Union[Node, str], data: DataToExport, settings_as_xml='', metadata=None):
633
+ def add_data(self, where: Union[Node, str], data: DataToExport, settings_as_xml='',
634
+ metadata=None):
627
635
  """
628
636
 
629
637
  Parameters
@@ -642,8 +650,10 @@ class DataToExportSaver:
642
650
  dims = data.get_dim_presents()
643
651
  for dim in dims:
644
652
  dim_group = self._h5saver.get_set_group(where, dim)
645
- for ind, dwa in enumerate(data.get_data_from_dim(dim)): # dwa: DataWithAxes filtered by dim
646
- dwa_group = self._h5saver.get_set_group(dim_group, self.channel_formatter(ind), dwa.name)
653
+ for ind, dwa in enumerate(data.get_data_from_dim(dim)):
654
+ # dwa: DataWithAxes filtered by dim
655
+ dwa_group = self._h5saver.get_set_group(dim_group, self.channel_formatter(ind),
656
+ dwa.name)
647
657
  # dwa_group = self._h5saver.add_ch_group(dim_group, dwa.name)
648
658
  self._data_saver.add_data(dwa_group, dwa)
649
659
 
@@ -651,8 +661,10 @@ class DataToExportSaver:
651
661
  dims = data.get_dim_presents()
652
662
  for dim in dims:
653
663
  dim_group = self._h5saver.get_set_group(where, dim)
654
- for ind, dwa in enumerate(data.get_data_from_dim(dim)): # dwa: DataWithAxes filtered by dim
655
- dwa_group = self._h5saver.get_set_group(dim_group, self.channel_formatter(ind), dwa.name)
664
+ for ind, dwa in enumerate(data.get_data_from_dim(dim)):
665
+ # dwa: DataWithAxes filtered by dim
666
+ dwa_group = self._h5saver.get_set_group(dim_group,
667
+ self.channel_formatter(ind), dwa.name)
656
668
  # dwa_group = self._get_node_from_title(dim_group, dwa.name)
657
669
  if dwa_group is not None:
658
670
  self._bkg_saver.add_data(dwa_group, dwa, save_axes=False)
@@ -679,8 +691,8 @@ class DataToExportEnlargeableSaver(DataToExportSaver):
679
691
  self._axis_name = axis_name
680
692
  self._axis_units = axis_units
681
693
 
682
- def add_data(self, where: Union[Node, str], data: DataToExport, axis_value: Union[float, np.ndarray],
683
- settings_as_xml='', metadata=None):
694
+ def add_data(self, where: Union[Node, str], data: DataToExport,
695
+ axis_value: Union[float, np.ndarray], settings_as_xml='', metadata=None):
684
696
  """
685
697
 
686
698
  Parameters
@@ -712,7 +724,8 @@ class DataToExportEnlargeableSaver(DataToExportSaver):
712
724
  class DataToExportTimedSaver(DataToExportEnlargeableSaver):
713
725
  """Specialized DataToExportEnlargeableSaver to save data as a function of a time axis
714
726
 
715
- Only one element ca be added at a time, the time axis value are enlarged using the data to be added timestamp
727
+ Only one element ca be added at a time, the time axis value are enlarged using the data to be
728
+ added timestamp
716
729
 
717
730
  Notes
718
731
  -----
@@ -721,8 +734,10 @@ class DataToExportTimedSaver(DataToExportEnlargeableSaver):
721
734
  def __init__(self, h5saver: H5Saver):
722
735
  super().__init__(h5saver, 'time', 's')
723
736
 
724
- def add_data(self, where: Union[Node, str], data: DataToExport, settings_as_xml='', metadata=None):
725
- super().add_data(where, data, axis_value=data.timestamp, settings_as_xml=settings_as_xml, metadata=metadata)
737
+ def add_data(self, where: Union[Node, str], data: DataToExport, settings_as_xml='',
738
+ metadata=None):
739
+ super().add_data(where, data, axis_value=data.timestamp, settings_as_xml=settings_as_xml,
740
+ metadata=metadata)
726
741
 
727
742
 
728
743
  class DataToExportExtendedSaver(DataToExportSaver):
@@ -755,7 +770,7 @@ class DataToExportExtendedSaver(DataToExportSaver):
755
770
  for axis in axes:
756
771
  self._nav_axis_saver.add_axis(nav_group, axis)
757
772
 
758
- def add_data(self, where: Union[Node, str], data: DataToExport, indexes: List[int],
773
+ def add_data(self, where: Union[Node, str], data: DataToExport, indexes: Iterable[int],
759
774
  distribution=DataDistribution['uniform'],
760
775
  settings_as_xml='', metadata={}):
761
776
  """
@@ -766,8 +781,8 @@ class DataToExportExtendedSaver(DataToExportSaver):
766
781
  the path of a given node or the node itself
767
782
  data: DataToExport
768
783
  indexes: List[int]
769
- indexes where to save data in the init h5array (should have the same length as extended_shape and with values
770
- coherent with this shape
784
+ indexes where to save data in the init h5array (should have the same length as
785
+ extended_shape and with values coherent with this shape
771
786
  settings_as_xml: str
772
787
  The settings parameter as an XML string
773
788
  metadata: dict
@@ -777,9 +792,12 @@ class DataToExportExtendedSaver(DataToExportSaver):
777
792
  dims = data.get_dim_presents()
778
793
  for dim in dims:
779
794
  dim_group = self._h5saver.get_set_group(where, dim)
780
- for ind, dwa in enumerate(data.get_data_from_dim(dim)): # dwa: DataWithAxes filtered by dim
781
- dwa_group = self._h5saver.get_set_group(dim_group, self.channel_formatter(ind), dwa.name)
782
- self._data_saver.add_data(dwa_group, dwa, indexes=indexes, distribution=distribution)
795
+ for ind, dwa in enumerate(data.get_data_from_dim(dim)):
796
+ # dwa: DataWithAxes filtered by dim
797
+ dwa_group = self._h5saver.get_set_group(dim_group,
798
+ self.channel_formatter(ind), dwa.name)
799
+ self._data_saver.add_data(dwa_group, dwa, indexes=indexes,
800
+ distribution=distribution)
783
801
 
784
802
 
785
803
  class DataLoader:
@@ -823,7 +841,8 @@ class DataLoader:
823
841
 
824
842
  Returns
825
843
  -------
826
- GROUP: returns the group named SPECIAL_GROUP_NAMES['nav_axes'] holding all NavAxis for those data
844
+ GROUP: returns the group named SPECIAL_GROUP_NAMES['nav_axes'] holding all NavAxis for
845
+ those data
827
846
 
828
847
  See Also
829
848
  --------
@@ -874,10 +893,11 @@ class DataLoader:
874
893
  for child in children_dict:
875
894
  if isinstance(children_dict[child], GROUP):
876
895
  self.load_all(children_dict[child], data, with_bkg=with_bkg)
877
- elif 'data_type' in children_dict[child].attrs and 'data' in children_dict[child].attrs['data_type']:
896
+ elif ('data_type' in children_dict[child].attrs and 'data' in
897
+ children_dict[child].attrs['data_type']):
878
898
 
879
- data_list.append(self.load_data(children_dict[child].path, with_bkg=with_bkg, load_all=True))
899
+ data_list.append(self.load_data(children_dict[child].path,
900
+ with_bkg=with_bkg, load_all=True))
880
901
  break
881
902
  data_tmp = DataToExport(name=where.name, data=data_list)
882
903
  data.append(data_tmp)
883
-
@@ -0,0 +1,85 @@
1
+ # -*- coding: utf-8 -*-
2
+ """
3
+ Created the 15/11/2022
4
+
5
+ @author: Sebastien Weber
6
+ """
7
+
8
+ import logging
9
+ import numpy as np
10
+
11
+ from pymodaq.utils.logger import set_logger, get_module_name
12
+ from pymodaq.utils.config import Config
13
+ from pymodaq.utils.managers.modules_manager import ModulesManager
14
+ from pymodaq.utils.h5modules import module_saving, data_saving
15
+
16
+ from pymodaq.utils.abstract.logger import AbstractLogger
17
+ from pymodaq.utils import daq_utils as utils
18
+ from .saving import H5Saver
19
+ from pymodaq.utils.data import DataToExport
20
+
21
+
22
+ config = Config()
23
+
24
+ logger = set_logger(get_module_name(__file__))
25
+
26
+
27
+ class H5LogHandler(logging.StreamHandler):
28
+ def __init__(self, h5saver):
29
+ super().__init__()
30
+ self.h5saver = h5saver
31
+ formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
32
+ self.setFormatter(formatter)
33
+
34
+ def emit(self, record):
35
+ msg = self.format(record)
36
+ self.h5saver.add_log(msg)
37
+
38
+
39
+ class H5Logger(AbstractLogger):
40
+ def __init__(self, modules_manager, *args, **kwargs):
41
+
42
+ self.title = self.__class__.__name__
43
+
44
+ self.modules_manager: ModulesManager = modules_manager
45
+ self.h5saver = H5Saver(*args, save_type='logger', **kwargs)
46
+
47
+ self.module_and_data_saver = module_saving.LoggerSaver(self)
48
+ for det in self.modules_manager.detectors_all:
49
+ det.module_and_data_saver = module_saving.DetectorEnlargeableSaver(det)
50
+ self.module_and_data_saver.h5saver = self.h5saver # will update its h5saver and all submodules's h5saver
51
+
52
+ def close(self):
53
+ self.h5saver.close_file()
54
+
55
+ @property
56
+ def settings_tree(self):
57
+ return self.h5saver.settings_tree
58
+
59
+ @property
60
+ def settings(self):
61
+ return self.h5saver.settings
62
+
63
+ def init_logger(self, settings):
64
+ self.h5saver.init_file(update_h5=True, metadata=dict(settings=settings))
65
+ self.h5saver.flush()
66
+ self.module_and_data_saver.h5saver = self.h5saver
67
+ logger_node = self.module_and_data_saver.get_set_node(new=True)
68
+ return True
69
+
70
+ def get_handler(self):
71
+ return H5LogHandler(self.h5saver)
72
+
73
+ def add_detector(self, name, settings):
74
+ pass
75
+
76
+ def add_actuator(self, name, settings):
77
+ pass
78
+
79
+ def add_data(self, dte: DataToExport):
80
+ self.module_and_data_saver.add_data(dte)
81
+
82
+ self.settings.child('N_saved').setValue(self.settings.child('N_saved').value() + 1)
83
+
84
+ def stop_logger(self):
85
+ self.h5saver.flush()
@@ -361,7 +361,8 @@ class ScanSaver(ModuleSaver):
361
361
  for detector in self._module.modules_manager.detectors:
362
362
  detector.module_and_data_saver.add_nav_axes(self._module_group, axes)
363
363
 
364
- def add_data(self, indexes: Tuple[int] = None, distribution=DataDistribution['uniform']):
364
+ def add_data(self, dte: DataToExport = None, indexes: Tuple[int] = None,
365
+ distribution=DataDistribution['uniform']):
365
366
  for detector in self._module.modules_manager.detectors:
366
367
  try:
367
368
  detector.insert_data(indexes, where=self._module_group, distribution=distribution)
@@ -381,20 +382,18 @@ class LoggerSaver(ScanSaver):
381
382
  """
382
383
  group_type = GroupType['data_logger']
383
384
 
384
- def __init__(self, module):
385
- self._module_group: GROUP = None
386
- self._module: H5Logger = module
387
- self._h5saver = None
388
-
389
- def add_data(self):
390
- for detector in self._module.modules_manager.detectors:
391
- try:
392
- detector.append_data(data=None, where=self._module_group)
393
- except Exception as e:
394
- pass
385
+ def add_data(self, dte: DataToExport):
386
+ """Add data to it's corresponding control module
395
387
 
396
- for actuator in self._module.modules_manager.actuators:
397
- try:
398
- actuator.append_data(data=None, where=self._module_group)
399
- except Exception as e:
400
- pass
388
+ The name of the control module is the DataToExport name attribute
389
+ """
390
+ if dte.name in self._module.modules_manager.detectors_name:
391
+ control_module = self._module.modules_manager.detectors[
392
+ self._module.modules_manager.detectors_name.index(dte.name)]
393
+ elif dte.name in self._module.modules_manager.actuators_name:
394
+ control_module = self._module.modules_manager.actuators[
395
+ self._module.modules_manager.actuators_name.index(dte.name)]
396
+ else:
397
+ return
398
+
399
+ control_module.append_data(dte=dte, where=self._module_group)