pymodaq 4.4.7__py3-none-any.whl → 5.0.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of pymodaq might be problematic. Click here for more details.

Files changed (415) hide show
  1. pymodaq/__init__.py +57 -91
  2. pymodaq/control_modules/daq_move.py +64 -46
  3. pymodaq/control_modules/daq_move_ui.py +34 -12
  4. pymodaq/control_modules/daq_viewer.py +55 -30
  5. pymodaq/control_modules/daq_viewer_ui.py +6 -6
  6. pymodaq/control_modules/mocks.py +1 -1
  7. pymodaq/control_modules/move_utility_classes.py +51 -43
  8. pymodaq/control_modules/utils.py +43 -20
  9. pymodaq/control_modules/viewer_utility_classes.py +54 -18
  10. pymodaq/daq_utils/daq_utils.py +6 -0
  11. pymodaq/dashboard.py +639 -323
  12. pymodaq/examples/function_plotter.py +13 -12
  13. pymodaq/examples/tcp_client.py +1 -1
  14. pymodaq/extensions/__init__.py +1 -1
  15. pymodaq/extensions/bayesian/bayesian_optimisation.py +44 -32
  16. pymodaq/extensions/bayesian/utils.py +10 -10
  17. pymodaq/extensions/console.py +7 -6
  18. pymodaq/extensions/daq_logger/__init__.py +1 -0
  19. pymodaq/extensions/{daq_logger.py → daq_logger/daq_logger.py} +30 -30
  20. pymodaq/{utils/db/db_logger → extensions/daq_logger/db}/db_logger.py +16 -15
  21. pymodaq/{utils/db/db_logger → extensions/daq_logger/db}/db_logger_models.py +2 -0
  22. pymodaq/{utils/h5modules → extensions/daq_logger}/h5logging.py +7 -8
  23. pymodaq/extensions/daq_scan.py +42 -34
  24. pymodaq/extensions/daq_scan_ui.py +18 -18
  25. pymodaq/extensions/h5browser.py +2 -3
  26. pymodaq/extensions/pid/__init__.py +4 -2
  27. pymodaq/extensions/pid/daq_move_PID.py +3 -3
  28. pymodaq/extensions/pid/pid_controller.py +59 -50
  29. pymodaq/extensions/pid/utils.py +10 -5
  30. pymodaq/extensions/utils.py +33 -3
  31. pymodaq/post_treatment/load_and_plot.py +10 -7
  32. pymodaq/resources/preset_default.xml +1 -1
  33. pymodaq/updater.py +107 -0
  34. pymodaq/utils/array_manipulation.py +4 -384
  35. pymodaq/utils/calibration_camera.py +12 -9
  36. pymodaq/utils/chrono_timer.py +11 -10
  37. pymodaq/utils/config.py +3 -458
  38. pymodaq/utils/daq_utils.py +9 -715
  39. pymodaq/utils/data.py +17 -2959
  40. pymodaq/utils/enums.py +4 -74
  41. pymodaq/utils/exceptions.py +0 -4
  42. pymodaq/utils/gui_utils/__init__.py +8 -8
  43. pymodaq/utils/gui_utils/loader_utils.py +26 -1
  44. pymodaq/utils/gui_utils/utils.py +8 -162
  45. pymodaq/utils/gui_utils/widgets/lcd.py +6 -109
  46. pymodaq/utils/h5modules/__init__.py +0 -4
  47. pymodaq/utils/h5modules/module_saving.py +9 -8
  48. pymodaq/utils/leco/__init__.py +2 -2
  49. pymodaq/utils/leco/daq_move_LECODirector.py +3 -6
  50. pymodaq/utils/leco/daq_xDviewer_LECODirector.py +5 -5
  51. pymodaq/utils/leco/director_utils.py +2 -2
  52. pymodaq/utils/leco/leco_director.py +3 -3
  53. pymodaq/utils/leco/pymodaq_listener.py +4 -3
  54. pymodaq/utils/leco/utils.py +11 -9
  55. pymodaq/utils/logger.py +4 -76
  56. pymodaq/utils/managers/batchscan_manager.py +16 -19
  57. pymodaq/utils/managers/modules_manager.py +30 -17
  58. pymodaq/utils/managers/overshoot_manager.py +48 -6
  59. pymodaq/utils/managers/preset_manager.py +39 -59
  60. pymodaq/utils/managers/preset_manager_utils.py +28 -22
  61. pymodaq/utils/managers/remote_manager.py +12 -10
  62. pymodaq/utils/math_utils.py +4 -582
  63. pymodaq/utils/messenger.py +4 -64
  64. pymodaq/utils/parameter/__init__.py +6 -9
  65. pymodaq/utils/parameter/utils.py +4 -328
  66. pymodaq/utils/scanner/scan_config.py +1 -1
  67. pymodaq/utils/scanner/scan_factory.py +16 -12
  68. pymodaq/utils/{plotting → scanner}/scan_selector.py +19 -20
  69. pymodaq/utils/scanner/scanner.py +10 -8
  70. pymodaq/utils/scanner/scanners/_1d_scanners.py +8 -5
  71. pymodaq/utils/scanner/scanners/_2d_scanners.py +5 -5
  72. pymodaq/utils/scanner/scanners/sequential.py +8 -8
  73. pymodaq/utils/scanner/scanners/tabular.py +9 -9
  74. pymodaq/utils/scanner/utils.py +6 -4
  75. pymodaq/utils/svg/svg_viewer2D.py +3 -4
  76. pymodaq/utils/tcp_ip/mysocket.py +4 -110
  77. pymodaq/utils/tcp_ip/serializer.py +4 -801
  78. pymodaq/utils/tcp_ip/tcp_server_client.py +15 -13
  79. pymodaq-5.0.1.dist-info/METADATA +242 -0
  80. pymodaq-5.0.1.dist-info/RECORD +122 -0
  81. {pymodaq-4.4.7.dist-info → pymodaq-5.0.1.dist-info}/WHEEL +1 -1
  82. {pymodaq-4.4.7.dist-info → pymodaq-5.0.1.dist-info}/entry_points.txt +1 -0
  83. pymodaq/examples/custom_app.py +0 -258
  84. pymodaq/examples/custom_viewer.py +0 -112
  85. pymodaq/examples/parameter_ex.py +0 -138
  86. pymodaq/examples/preset_MockCamera.xml +0 -1
  87. pymodaq/post_treatment/daq_measurement/daq_measurement_GUI.py +0 -142
  88. pymodaq/post_treatment/daq_measurement/daq_measurement_GUI.ui +0 -232
  89. pymodaq/post_treatment/daq_measurement/daq_measurement_main.py +0 -391
  90. pymodaq/post_treatment/daq_measurement/process_from_QtDesigner_DAQ_Measurement_GUI.bat +0 -2
  91. pymodaq/post_treatment/process_to_scalar.py +0 -263
  92. pymodaq/resources/QtDesigner_Ressources/Icon_Library/1d.png +0 -0
  93. pymodaq/resources/QtDesigner_Ressources/Icon_Library/2d.png +0 -0
  94. pymodaq/resources/QtDesigner_Ressources/Icon_Library/3d.png +0 -0
  95. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Add2.png +0 -0
  96. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Add_Step.png +0 -0
  97. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Approve.png +0 -0
  98. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Approve_All.png +0 -0
  99. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Browse_Dir_Path.png +0 -0
  100. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Calculator.png +0 -0
  101. pymodaq/resources/QtDesigner_Ressources/Icon_Library/ChnGroup.png +0 -0
  102. pymodaq/resources/QtDesigner_Ressources/Icon_Library/ChnNum.png +0 -0
  103. pymodaq/resources/QtDesigner_Ressources/Icon_Library/ChnText.png +0 -0
  104. pymodaq/resources/QtDesigner_Ressources/Icon_Library/ChnTime.png +0 -0
  105. pymodaq/resources/QtDesigner_Ressources/Icon_Library/ChnWave.png +0 -0
  106. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Close3.png +0 -0
  107. pymodaq/resources/QtDesigner_Ressources/Icon_Library/CollapseAll.png +0 -0
  108. pymodaq/resources/QtDesigner_Ressources/Icon_Library/CollapseAll_32.png +0 -0
  109. pymodaq/resources/QtDesigner_Ressources/Icon_Library/ColorPicker.png +0 -0
  110. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Contract.png +0 -0
  111. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Create.png +0 -0
  112. pymodaq/resources/QtDesigner_Ressources/Icon_Library/DeleteLayer.png +0 -0
  113. pymodaq/resources/QtDesigner_Ressources/Icon_Library/EditOpen.png +0 -0
  114. pymodaq/resources/QtDesigner_Ressources/Icon_Library/EditRedo.png +0 -0
  115. pymodaq/resources/QtDesigner_Ressources/Icon_Library/EditUndo.png +0 -0
  116. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Ellipse.png +0 -0
  117. pymodaq/resources/QtDesigner_Ressources/Icon_Library/EllipseFilled.png +0 -0
  118. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Error.png +0 -0
  119. pymodaq/resources/QtDesigner_Ressources/Icon_Library/ErrorMessage.png +0 -0
  120. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Error_16.png +0 -0
  121. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Exit.png +0 -0
  122. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Expand.png +0 -0
  123. pymodaq/resources/QtDesigner_Ressources/Icon_Library/ExpandAll.png +0 -0
  124. pymodaq/resources/QtDesigner_Ressources/Icon_Library/ExpandAll_32.png +0 -0
  125. pymodaq/resources/QtDesigner_Ressources/Icon_Library/FFT.png +0 -0
  126. pymodaq/resources/QtDesigner_Ressources/Icon_Library/HLM.ico +0 -0
  127. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Help.png +0 -0
  128. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Help_32.png +0 -0
  129. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Histogram.png +0 -0
  130. pymodaq/resources/QtDesigner_Ressources/Icon_Library/LUT_LookUpTable.png +0 -0
  131. pymodaq/resources/QtDesigner_Ressources/Icon_Library/MagnifyingGlass.png +0 -0
  132. pymodaq/resources/QtDesigner_Ressources/Icon_Library/MagnifyingGlass_24.png +0 -0
  133. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Marker.png +0 -0
  134. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Math.png +0 -0
  135. pymodaq/resources/QtDesigner_Ressources/Icon_Library/MeasurementStudio_32.png +0 -0
  136. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Move.png +0 -0
  137. pymodaq/resources/QtDesigner_Ressources/Icon_Library/MoveDown.png +0 -0
  138. pymodaq/resources/QtDesigner_Ressources/Icon_Library/MoveUp.png +0 -0
  139. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Multiply.png +0 -0
  140. pymodaq/resources/QtDesigner_Ressources/Icon_Library/NewFile.png +0 -0
  141. pymodaq/resources/QtDesigner_Ressources/Icon_Library/NewLayer.png +0 -0
  142. pymodaq/resources/QtDesigner_Ressources/Icon_Library/New_File.png +0 -0
  143. pymodaq/resources/QtDesigner_Ressources/Icon_Library/New_Folder.png +0 -0
  144. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Open.png +0 -0
  145. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Open_1D.png +0 -0
  146. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Open_2D.png +0 -0
  147. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Open_File.png +0 -0
  148. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Open_File_32.png +0 -0
  149. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Open_sim.png +0 -0
  150. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Options.png +0 -0
  151. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Oscilloscope.png +0 -0
  152. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Oscilloscope_16.png +0 -0
  153. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Pass.png +0 -0
  154. pymodaq/resources/QtDesigner_Ressources/Icon_Library/RGB.png +0 -0
  155. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Rectangle.png +0 -0
  156. pymodaq/resources/QtDesigner_Ressources/Icon_Library/RectangleFilled.png +0 -0
  157. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Redo.png +0 -0
  158. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Refresh.png +0 -0
  159. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Refresh2.png +0 -0
  160. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Refresh_32.png +0 -0
  161. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Region.png +0 -0
  162. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Rendezvous.png +0 -0
  163. pymodaq/resources/QtDesigner_Ressources/Icon_Library/SELECT.png +0 -0
  164. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Save.png +0 -0
  165. pymodaq/resources/QtDesigner_Ressources/Icon_Library/SaveAll.png +0 -0
  166. pymodaq/resources/QtDesigner_Ressources/Icon_Library/SaveAll_32.png +0 -0
  167. pymodaq/resources/QtDesigner_Ressources/Icon_Library/SaveAs.png +0 -0
  168. pymodaq/resources/QtDesigner_Ressources/Icon_Library/SaveAs_32.png +0 -0
  169. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Save_24.png +0 -0
  170. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Save_32.png +0 -0
  171. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Search.png +0 -0
  172. pymodaq/resources/QtDesigner_Ressources/Icon_Library/SelectPolygon.png +0 -0
  173. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Select_24.png +0 -0
  174. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Settings.png +0 -0
  175. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Snap&Save.png +0 -0
  176. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Snapshot.png +0 -0
  177. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Snapshot2.png +0 -0
  178. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Snapshot2_16.png +0 -0
  179. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Snapshot2_32.png +0 -0
  180. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Spreadsheet.png +0 -0
  181. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Statistics.png +0 -0
  182. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Statistics2.png +0 -0
  183. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Status.png +0 -0
  184. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Subtract.png +0 -0
  185. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Vision.png +0 -0
  186. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Volts.png +0 -0
  187. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Wait2.png +0 -0
  188. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Zoom_1_1.png +0 -0
  189. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Zoom_in.png +0 -0
  190. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Zoom_out.png +0 -0
  191. pymodaq/resources/QtDesigner_Ressources/Icon_Library/Zoom_to_Selection.png +0 -0
  192. pymodaq/resources/QtDesigner_Ressources/Icon_Library/abort.png +0 -0
  193. pymodaq/resources/QtDesigner_Ressources/Icon_Library/advanced2.png +0 -0
  194. pymodaq/resources/QtDesigner_Ressources/Icon_Library/algo.png +0 -0
  195. pymodaq/resources/QtDesigner_Ressources/Icon_Library/autoscale.png +0 -0
  196. pymodaq/resources/QtDesigner_Ressources/Icon_Library/b_icon.png +0 -0
  197. pymodaq/resources/QtDesigner_Ressources/Icon_Library/back.png +0 -0
  198. pymodaq/resources/QtDesigner_Ressources/Icon_Library/bg_icon.png +0 -0
  199. pymodaq/resources/QtDesigner_Ressources/Icon_Library/camera.png +0 -0
  200. pymodaq/resources/QtDesigner_Ressources/Icon_Library/camera_snap.png +0 -0
  201. pymodaq/resources/QtDesigner_Ressources/Icon_Library/cartesian.png +0 -0
  202. pymodaq/resources/QtDesigner_Ressources/Icon_Library/clear2.png +0 -0
  203. pymodaq/resources/QtDesigner_Ressources/Icon_Library/clear_ROI.png +0 -0
  204. pymodaq/resources/QtDesigner_Ressources/Icon_Library/close2.png +0 -0
  205. pymodaq/resources/QtDesigner_Ressources/Icon_Library/cluster2.png +0 -0
  206. pymodaq/resources/QtDesigner_Ressources/Icon_Library/color.png +0 -0
  207. pymodaq/resources/QtDesigner_Ressources/Icon_Library/color2.png +0 -0
  208. pymodaq/resources/QtDesigner_Ressources/Icon_Library/continuous.png +0 -0
  209. pymodaq/resources/QtDesigner_Ressources/Icon_Library/data.png +0 -0
  210. pymodaq/resources/QtDesigner_Ressources/Icon_Library/delay.png +0 -0
  211. pymodaq/resources/QtDesigner_Ressources/Icon_Library/download.png +0 -0
  212. pymodaq/resources/QtDesigner_Ressources/Icon_Library/download2.png +0 -0
  213. pymodaq/resources/QtDesigner_Ressources/Icon_Library/error2.png +0 -0
  214. pymodaq/resources/QtDesigner_Ressources/Icon_Library/ethernet.png +0 -0
  215. pymodaq/resources/QtDesigner_Ressources/Icon_Library/exit2.png +0 -0
  216. pymodaq/resources/QtDesigner_Ressources/Icon_Library/fan.png +0 -0
  217. pymodaq/resources/QtDesigner_Ressources/Icon_Library/filter2.png +0 -0
  218. pymodaq/resources/QtDesigner_Ressources/Icon_Library/g_icon.png +0 -0
  219. pymodaq/resources/QtDesigner_Ressources/Icon_Library/gear2.png +0 -0
  220. pymodaq/resources/QtDesigner_Ressources/Icon_Library/go_to.png +0 -0
  221. pymodaq/resources/QtDesigner_Ressources/Icon_Library/go_to_1.png +0 -0
  222. pymodaq/resources/QtDesigner_Ressources/Icon_Library/go_to_2.png +0 -0
  223. pymodaq/resources/QtDesigner_Ressources/Icon_Library/grab.png +0 -0
  224. pymodaq/resources/QtDesigner_Ressources/Icon_Library/graph.png +0 -0
  225. pymodaq/resources/QtDesigner_Ressources/Icon_Library/greenLight2.png +0 -0
  226. pymodaq/resources/QtDesigner_Ressources/Icon_Library/greenLight2_32.png +0 -0
  227. pymodaq/resources/QtDesigner_Ressources/Icon_Library/green_light.png +0 -0
  228. pymodaq/resources/QtDesigner_Ressources/Icon_Library/grey_icon.png +0 -0
  229. pymodaq/resources/QtDesigner_Ressources/Icon_Library/greyscale.png +0 -0
  230. pymodaq/resources/QtDesigner_Ressources/Icon_Library/help1.png +0 -0
  231. pymodaq/resources/QtDesigner_Ressources/Icon_Library/help1_32.png +0 -0
  232. pymodaq/resources/QtDesigner_Ressources/Icon_Library/home2.png +0 -0
  233. pymodaq/resources/QtDesigner_Ressources/Icon_Library/information2.png +0 -0
  234. pymodaq/resources/QtDesigner_Ressources/Icon_Library/ini.png +0 -0
  235. pymodaq/resources/QtDesigner_Ressources/Icon_Library/input.png +0 -0
  236. pymodaq/resources/QtDesigner_Ressources/Icon_Library/integrator.png +0 -0
  237. pymodaq/resources/QtDesigner_Ressources/Icon_Library/joystick.png +0 -0
  238. pymodaq/resources/QtDesigner_Ressources/Icon_Library/light_green.png +0 -0
  239. pymodaq/resources/QtDesigner_Ressources/Icon_Library/light_green_16.png +0 -0
  240. pymodaq/resources/QtDesigner_Ressources/Icon_Library/light_red.png +0 -0
  241. pymodaq/resources/QtDesigner_Ressources/Icon_Library/light_red_16.png +0 -0
  242. pymodaq/resources/QtDesigner_Ressources/Icon_Library/light_yellow.png +0 -0
  243. pymodaq/resources/QtDesigner_Ressources/Icon_Library/light_yellow_16.png +0 -0
  244. pymodaq/resources/QtDesigner_Ressources/Icon_Library/limiter.png +0 -0
  245. pymodaq/resources/QtDesigner_Ressources/Icon_Library/load_ROI.png +0 -0
  246. pymodaq/resources/QtDesigner_Ressources/Icon_Library/meshPlot.png +0 -0
  247. pymodaq/resources/QtDesigner_Ressources/Icon_Library/meter.png +0 -0
  248. pymodaq/resources/QtDesigner_Ressources/Icon_Library/meter2.png +0 -0
  249. pymodaq/resources/QtDesigner_Ressources/Icon_Library/meter_32.png +0 -0
  250. pymodaq/resources/QtDesigner_Ressources/Icon_Library/move_contour.png +0 -0
  251. pymodaq/resources/QtDesigner_Ressources/Icon_Library/move_straight_line.png +0 -0
  252. pymodaq/resources/QtDesigner_Ressources/Icon_Library/movie.png +0 -0
  253. pymodaq/resources/QtDesigner_Ressources/Icon_Library/multi_point.png +0 -0
  254. pymodaq/resources/QtDesigner_Ressources/Icon_Library/multiplexer.png +0 -0
  255. pymodaq/resources/QtDesigner_Ressources/Icon_Library/new.png +0 -0
  256. pymodaq/resources/QtDesigner_Ressources/Icon_Library/openArrow.png +0 -0
  257. pymodaq/resources/QtDesigner_Ressources/Icon_Library/openTree.png +0 -0
  258. pymodaq/resources/QtDesigner_Ressources/Icon_Library/oscilloscope2.png +0 -0
  259. pymodaq/resources/QtDesigner_Ressources/Icon_Library/oscilloscope3.png +0 -0
  260. pymodaq/resources/QtDesigner_Ressources/Icon_Library/overlay.png +0 -0
  261. pymodaq/resources/QtDesigner_Ressources/Icon_Library/pass2.png +0 -0
  262. pymodaq/resources/QtDesigner_Ressources/Icon_Library/pass2_16.png +0 -0
  263. pymodaq/resources/QtDesigner_Ressources/Icon_Library/pass_32.png +0 -0
  264. pymodaq/resources/QtDesigner_Ressources/Icon_Library/pause.png +0 -0
  265. pymodaq/resources/QtDesigner_Ressources/Icon_Library/permute.png +0 -0
  266. pymodaq/resources/QtDesigner_Ressources/Icon_Library/phase.png +0 -0
  267. pymodaq/resources/QtDesigner_Ressources/Icon_Library/play.png +0 -0
  268. pymodaq/resources/QtDesigner_Ressources/Icon_Library/polar.png +0 -0
  269. pymodaq/resources/QtDesigner_Ressources/Icon_Library/pole_zero.png +0 -0
  270. pymodaq/resources/QtDesigner_Ressources/Icon_Library/powerMeter.png +0 -0
  271. pymodaq/resources/QtDesigner_Ressources/Icon_Library/powerSwitch.png +0 -0
  272. pymodaq/resources/QtDesigner_Ressources/Icon_Library/powerSwitch_16.png +0 -0
  273. pymodaq/resources/QtDesigner_Ressources/Icon_Library/print2.png +0 -0
  274. pymodaq/resources/QtDesigner_Ressources/Icon_Library/print2_32.png +0 -0
  275. pymodaq/resources/QtDesigner_Ressources/Icon_Library/properties.png +0 -0
  276. pymodaq/resources/QtDesigner_Ressources/Icon_Library/r_icon.png +0 -0
  277. pymodaq/resources/QtDesigner_Ressources/Icon_Library/radiocontrolbutton.png +0 -0
  278. pymodaq/resources/QtDesigner_Ressources/Icon_Library/random.png +0 -0
  279. pymodaq/resources/QtDesigner_Ressources/Icon_Library/read2.png +0 -0
  280. pymodaq/resources/QtDesigner_Ressources/Icon_Library/red_light.png +0 -0
  281. pymodaq/resources/QtDesigner_Ressources/Icon_Library/remove.png +0 -0
  282. pymodaq/resources/QtDesigner_Ressources/Icon_Library/reset.png +0 -0
  283. pymodaq/resources/QtDesigner_Ressources/Icon_Library/rgb_icon.png +0 -0
  284. pymodaq/resources/QtDesigner_Ressources/Icon_Library/robot.png +0 -0
  285. pymodaq/resources/QtDesigner_Ressources/Icon_Library/rotation2.png +0 -0
  286. pymodaq/resources/QtDesigner_Ressources/Icon_Library/run2.png +0 -0
  287. pymodaq/resources/QtDesigner_Ressources/Icon_Library/run_all.png +0 -0
  288. pymodaq/resources/QtDesigner_Ressources/Icon_Library/saturation.png +0 -0
  289. pymodaq/resources/QtDesigner_Ressources/Icon_Library/saveTree.png +0 -0
  290. pymodaq/resources/QtDesigner_Ressources/Icon_Library/save_ROI.png +0 -0
  291. pymodaq/resources/QtDesigner_Ressources/Icon_Library/scale_horizontally.png +0 -0
  292. pymodaq/resources/QtDesigner_Ressources/Icon_Library/scale_vertically.png +0 -0
  293. pymodaq/resources/QtDesigner_Ressources/Icon_Library/search2.png +0 -0
  294. pymodaq/resources/QtDesigner_Ressources/Icon_Library/select2.png +0 -0
  295. pymodaq/resources/QtDesigner_Ressources/Icon_Library/select_all.png +0 -0
  296. pymodaq/resources/QtDesigner_Ressources/Icon_Library/select_all2.png +0 -0
  297. pymodaq/resources/QtDesigner_Ressources/Icon_Library/select_none.png +0 -0
  298. pymodaq/resources/QtDesigner_Ressources/Icon_Library/sequence.png +0 -0
  299. pymodaq/resources/QtDesigner_Ressources/Icon_Library/sequence2.png +0 -0
  300. pymodaq/resources/QtDesigner_Ressources/Icon_Library/snap.png +0 -0
  301. pymodaq/resources/QtDesigner_Ressources/Icon_Library/sort_ascend.png +0 -0
  302. pymodaq/resources/QtDesigner_Ressources/Icon_Library/spectrumAnalyzer.png +0 -0
  303. pymodaq/resources/QtDesigner_Ressources/Icon_Library/start.png +0 -0
  304. pymodaq/resources/QtDesigner_Ressources/Icon_Library/status_cancelled.png +0 -0
  305. pymodaq/resources/QtDesigner_Ressources/Icon_Library/stop.png +0 -0
  306. pymodaq/resources/QtDesigner_Ressources/Icon_Library/stop2.png +0 -0
  307. pymodaq/resources/QtDesigner_Ressources/Icon_Library/stop3.png +0 -0
  308. pymodaq/resources/QtDesigner_Ressources/Icon_Library/stop_all.png +0 -0
  309. pymodaq/resources/QtDesigner_Ressources/Icon_Library/sum.png +0 -0
  310. pymodaq/resources/QtDesigner_Ressources/Icon_Library/surfacePlot.png +0 -0
  311. pymodaq/resources/QtDesigner_Ressources/Icon_Library/target.png +0 -0
  312. pymodaq/resources/QtDesigner_Ressources/Icon_Library/tree.png +0 -0
  313. pymodaq/resources/QtDesigner_Ressources/Icon_Library/updateTree.png +0 -0
  314. pymodaq/resources/QtDesigner_Ressources/Icon_Library/utility2.png +0 -0
  315. pymodaq/resources/QtDesigner_Ressources/Icon_Library/utility_small.png +0 -0
  316. pymodaq/resources/QtDesigner_Ressources/Icon_Library/vector.png +0 -0
  317. pymodaq/resources/QtDesigner_Ressources/Icon_Library/verify.png +0 -0
  318. pymodaq/resources/QtDesigner_Ressources/Icon_Library/video.png +0 -0
  319. pymodaq/resources/QtDesigner_Ressources/Icon_Library/wait.png +0 -0
  320. pymodaq/resources/QtDesigner_Ressources/Icon_Library/waterfallPlot.png +0 -0
  321. pymodaq/resources/QtDesigner_Ressources/Icon_Library/watershed.png +0 -0
  322. pymodaq/resources/QtDesigner_Ressources/Icon_Library/yellow_light.png +0 -0
  323. pymodaq/resources/QtDesigner_Ressources/Icon_Library/zip_file.png +0 -0
  324. pymodaq/resources/QtDesigner_Ressources/Icon_Library/zoomAuto.png +0 -0
  325. pymodaq/resources/QtDesigner_Ressources/Icon_Library/zoomReset.png +0 -0
  326. pymodaq/resources/QtDesigner_Ressources/QtDesigner_ressources.bat +0 -2
  327. pymodaq/resources/QtDesigner_Ressources/QtDesigner_ressources.qrc +0 -238
  328. pymodaq/resources/QtDesigner_Ressources/QtDesigner_ressources_rc.py +0 -127453
  329. pymodaq/resources/QtDesigner_Ressources/__init__.py +0 -0
  330. pymodaq/resources/QtDesigner_Ressources/credit.rst +0 -7
  331. pymodaq/resources/QtDesigner_Ressources/icons.svg +0 -142
  332. pymodaq/resources/VERSION +0 -2
  333. pymodaq/resources/config_template.toml +0 -96
  334. pymodaq/resources/triangulation_data.npy +0 -0
  335. pymodaq/utils/abstract/__init__.py +0 -48
  336. pymodaq/utils/db/__init__.py +0 -0
  337. pymodaq/utils/db/db_logger/__init__.py +0 -0
  338. pymodaq/utils/factory.py +0 -82
  339. pymodaq/utils/gui_utils/custom_app.py +0 -133
  340. pymodaq/utils/gui_utils/dock.py +0 -107
  341. pymodaq/utils/gui_utils/file_io.py +0 -94
  342. pymodaq/utils/gui_utils/layout.py +0 -34
  343. pymodaq/utils/gui_utils/list_picker.py +0 -38
  344. pymodaq/utils/gui_utils/widgets/__init__.py +0 -5
  345. pymodaq/utils/gui_utils/widgets/label.py +0 -24
  346. pymodaq/utils/gui_utils/widgets/push.py +0 -149
  347. pymodaq/utils/gui_utils/widgets/qled.py +0 -62
  348. pymodaq/utils/gui_utils/widgets/spinbox.py +0 -24
  349. pymodaq/utils/gui_utils/widgets/table.py +0 -263
  350. pymodaq/utils/gui_utils/widgets/tree_layout.py +0 -188
  351. pymodaq/utils/gui_utils/widgets/tree_toml.py +0 -110
  352. pymodaq/utils/h5modules/backends.py +0 -1022
  353. pymodaq/utils/h5modules/browsing.py +0 -627
  354. pymodaq/utils/h5modules/data_saving.py +0 -1107
  355. pymodaq/utils/h5modules/exporter.py +0 -119
  356. pymodaq/utils/h5modules/exporters/__init__.py +0 -0
  357. pymodaq/utils/h5modules/exporters/base.py +0 -111
  358. pymodaq/utils/h5modules/exporters/flimj.py +0 -63
  359. pymodaq/utils/h5modules/exporters/hyperspy.py +0 -143
  360. pymodaq/utils/h5modules/saving.py +0 -866
  361. pymodaq/utils/h5modules/utils.py +0 -115
  362. pymodaq/utils/managers/action_manager.py +0 -489
  363. pymodaq/utils/managers/parameter_manager.py +0 -279
  364. pymodaq/utils/managers/roi_manager.py +0 -740
  365. pymodaq/utils/parameter/ioxml.py +0 -545
  366. pymodaq/utils/parameter/pymodaq_ptypes/__init__.py +0 -38
  367. pymodaq/utils/parameter/pymodaq_ptypes/bool.py +0 -31
  368. pymodaq/utils/parameter/pymodaq_ptypes/date.py +0 -126
  369. pymodaq/utils/parameter/pymodaq_ptypes/filedir.py +0 -143
  370. pymodaq/utils/parameter/pymodaq_ptypes/itemselect.py +0 -265
  371. pymodaq/utils/parameter/pymodaq_ptypes/led.py +0 -44
  372. pymodaq/utils/parameter/pymodaq_ptypes/list.py +0 -150
  373. pymodaq/utils/parameter/pymodaq_ptypes/numeric.py +0 -18
  374. pymodaq/utils/parameter/pymodaq_ptypes/pixmap.py +0 -175
  375. pymodaq/utils/parameter/pymodaq_ptypes/slide.py +0 -166
  376. pymodaq/utils/parameter/pymodaq_ptypes/table.py +0 -135
  377. pymodaq/utils/parameter/pymodaq_ptypes/tableview.py +0 -149
  378. pymodaq/utils/parameter/pymodaq_ptypes/text.py +0 -142
  379. pymodaq/utils/plotting/__init__.py +0 -0
  380. pymodaq/utils/plotting/data_viewers/__init__.py +0 -10
  381. pymodaq/utils/plotting/data_viewers/base.py +0 -286
  382. pymodaq/utils/plotting/data_viewers/viewer.py +0 -275
  383. pymodaq/utils/plotting/data_viewers/viewer0D.py +0 -298
  384. pymodaq/utils/plotting/data_viewers/viewer1D.py +0 -826
  385. pymodaq/utils/plotting/data_viewers/viewer1Dbasic.py +0 -231
  386. pymodaq/utils/plotting/data_viewers/viewer2D.py +0 -1118
  387. pymodaq/utils/plotting/data_viewers/viewer2D_basic.py +0 -146
  388. pymodaq/utils/plotting/data_viewers/viewerND.py +0 -800
  389. pymodaq/utils/plotting/gant_chart.py +0 -123
  390. pymodaq/utils/plotting/image_viewer.py +0 -97
  391. pymodaq/utils/plotting/items/__init__.py +0 -0
  392. pymodaq/utils/plotting/items/axis_scaled.py +0 -93
  393. pymodaq/utils/plotting/items/crosshair.py +0 -94
  394. pymodaq/utils/plotting/items/image.py +0 -388
  395. pymodaq/utils/plotting/navigator.py +0 -353
  396. pymodaq/utils/plotting/plotter/plotter.py +0 -94
  397. pymodaq/utils/plotting/plotter/plotters/__init__.py +0 -0
  398. pymodaq/utils/plotting/plotter/plotters/matplotlib_plotters.py +0 -134
  399. pymodaq/utils/plotting/plotter/plotters/qt_plotters.py +0 -78
  400. pymodaq/utils/plotting/utils/__init__.py +0 -0
  401. pymodaq/utils/plotting/utils/axes_viewer.py +0 -88
  402. pymodaq/utils/plotting/utils/filter.py +0 -585
  403. pymodaq/utils/plotting/utils/lineout.py +0 -226
  404. pymodaq/utils/plotting/utils/plot_utils.py +0 -579
  405. pymodaq/utils/plotting/utils/signalND.py +0 -1347
  406. pymodaq/utils/plotting/widgets.py +0 -76
  407. pymodaq/utils/qvariant.py +0 -12
  408. pymodaq/utils/slicing.py +0 -63
  409. pymodaq/utils/units.py +0 -216
  410. pymodaq-4.4.7.dist-info/METADATA +0 -163
  411. pymodaq-4.4.7.dist-info/RECORD +0 -446
  412. /pymodaq/{post_treatment/daq_analysis → daq_utils}/__init__.py +0 -0
  413. /pymodaq/{utils/abstract/logger.py → extensions/daq_logger/abstract.py} +0 -0
  414. /pymodaq/{post_treatment/daq_measurement → extensions/daq_logger/db}/__init__.py +0 -0
  415. {pymodaq-4.4.7.dist-info → pymodaq-5.0.1.dist-info}/licenses/LICENSE +0 -0
@@ -1,353 +0,0 @@
1
- from pymodaq.utils.logger import set_logger, get_module_name, get_module_name
2
- from pymodaq.utils.gui_utils.file_io import select_file
3
- from qtpy import QtGui, QtWidgets, QtCore
4
- from qtpy.QtCore import Qt, QObject, Slot, Signal
5
-
6
- import sys
7
- import os
8
- import numpy as np
9
- from pymodaq.utils.data import DataToExport, DataFromPlugins, DataDim, enum_checker, DataWithAxes
10
- from pymodaq.utils.h5modules.data_saving import DataLoader
11
- from pymodaq.utils.managers.parameter_manager import ParameterManager
12
- from pymodaq.utils.managers.action_manager import ActionManager
13
- from pymodaq.utils.plotting.data_viewers.viewer2D_basic import Viewer2DBasic
14
- from pymodaq.utils.plotting.items.image import UniformImageItem, SpreadImageItem
15
- from pymodaq.utils import daq_utils as utils
16
- from pymodaq.utils.h5modules.browsing import browse_data, H5BrowserUtil
17
- from pymodaq.utils.h5modules.saving import H5Saver
18
- from pymodaq.utils import gui_utils as gutils
19
- from pymodaq.utils.parameter.pymodaq_ptypes.pixmap import PixmapCheckData
20
-
21
- from pymodaq.utils.config import get_set_local_dir, Config
22
-
23
- local_path = get_set_local_dir()
24
- navigator_path = os.path.join(local_path, 'navigator_temp_files')
25
- if not os.path.isdir(navigator_path):
26
- os.makedirs(navigator_path)
27
-
28
- logger = set_logger(get_module_name(__file__))
29
-
30
- Ntick = 128
31
- colors_red = np.array([(int(r), 0, 0) for r in np.linspace(0, 255, Ntick)])
32
- colors_green = np.array([(0, int(g), 0) for g in np.linspace(0, 255, Ntick)])
33
- colors_blue = np.array([(0, 0, int(b)) for b in np.linspace(0, 255, Ntick)])
34
- config = Config()
35
-
36
-
37
- class Navigator(ParameterManager, ActionManager, QObject):
38
-
39
- settings_name = 'navigator_settings'
40
- log_signal = Signal(str)
41
- sig_double_clicked = Signal(float, float)
42
- params = [
43
- {'title': 'Settings', 'name': 'settings', 'type': 'group', 'children': [
44
- {'title': 'Load h5:', 'name': 'Load h5', 'type': 'action'},
45
- {'title': 'h5 path:', 'name': 'filepath', 'type': 'str', 'value': '', 'readonly': True},
46
- {'title': 'Load Image:', 'name': 'Load Image', 'type': 'action'},
47
- {'title': 'Image path:', 'name': 'imagepath', 'type': 'str', 'value': '', 'readonly': True},
48
- ]},
49
- {'title': 'Image', 'name': 'image', 'type': 'pixmap_check'},
50
- {'title': 'Overlays', 'name': 'overlays', 'type': 'group', 'children': []},
51
- ]
52
-
53
- def __init__(self, parent=None, h5file_path=None):
54
- QObject.__init__(self)
55
- ParameterManager.__init__(self)
56
- ActionManager.__init__(self, toolbar=QtWidgets.QToolBar())
57
- if parent is None:
58
- parent = QtWidgets.QWidget()
59
- self.parent = parent
60
- self.title = 'Navigator'
61
-
62
- self.status_time = 1000
63
-
64
- self._h5saver = H5Saver()
65
- self.dataloader = DataLoader(self._h5saver)
66
-
67
- self.h5file_path = h5file_path
68
- self.h5saver_image = H5Saver()
69
-
70
- self.viewer: Viewer2DBasic = None
71
-
72
- self.x_range = []
73
- self.y_range = []
74
-
75
- self.next_scan_index = 0
76
-
77
- self.overlays = [] # %list of imageItem items displaying 2D scans info
78
-
79
- # self.h5module = H5BrowserUtil()
80
-
81
- self.setup_actions()
82
- self.setup_ui()
83
- self.connect_things()
84
- self.set_aspect_ratio()
85
-
86
- if h5file_path is not None:
87
- self.h5saver.open_file(h5file_path, 'a')
88
- self.settings.child('settings', 'filepath').setValue(h5file_path)
89
- self.settings.child('settings', 'Load h5').hide()
90
- self.list_2D_scans()
91
- # self.show_overlay()
92
-
93
- @property
94
- def h5saver(self):
95
- return self._h5saver
96
-
97
- @h5saver.setter
98
- def h5saver(self, h5saver: H5Saver):
99
- self._h5saver = h5saver
100
- self.dataloader = DataLoader(h5saver)
101
-
102
- def setup_actions(self):
103
-
104
- self.add_action('load_scan', 'Load Scan file', 'NewLayer', 'Load scan file (.h5)')
105
- self.add_action('load_image', 'Load Image File', 'Open_File_32', 'Load image file (.h5)')
106
- self.add_action('ratio', 'Viewbox Aspect Ratio', 'Zoom_1_1', 'Set viewbox aspect ratio to 1', checkable=True)
107
- self.add_action('move_at', 'Move at DoubleClicked', 'move_contour',
108
- 'When selected, double clicking on viewbox will move DAQ_Move modules',
109
- checkable=True)
110
- self.add_action('select_all', 'Select All', 'select_all2', 'Select (show) all 2D scans on the viewer')
111
- self.add_action('select_none', 'Select None', 'select_none', 'Unselect (hide) all 2D scans on the viewer')
112
- self.add_action('histogram', 'Show Histograms', 'Histogram', 'Show (hide) histograms', checkable=True)
113
-
114
- def connect_things(self):
115
- self.connect_action('load_scan', self.load_data)
116
- self.connect_action('load_image', self.load_image)
117
- self.connect_action('ratio', self.set_aspect_ratio)
118
- self.connect_action('select_all', self.show_all)
119
- self.connect_action('select_none', self.show_none)
120
- self.connect_action('histogram', self.show_histo)
121
-
122
- self.viewer.sig_double_clicked.connect(self.move_at)
123
- self.settings.child('settings', 'Load h5').sigActivated.connect(self.load_data)
124
- self.settings.child('settings', 'Load Image').sigActivated.connect(self.load_image)
125
-
126
- @Slot(float, float)
127
- def move_at(self, posx, posy):
128
- if self.is_action_checked('move_at'):
129
- self.sig_double_clicked.emit(posx, posy)
130
-
131
- def show_histo(self):
132
- self.viewer.histo_widget.setVisible(self.is_action_checked('histogram'))
133
-
134
- def show_all(self):
135
- self.show_scans()
136
-
137
- def show_none(self):
138
- self.show_scans(False)
139
-
140
- def show_scans(self, show=True):
141
- for child in self.settings.child('overlays'):
142
- val = child.value()
143
- val.checked = show
144
- child.setValue(val)
145
- child.sigValueChanged.emit(child, val)
146
-
147
- def get_data_from_scan_name(self, scan_name: str) -> DataToExport:
148
- _data = DataToExport('All')
149
- self.dataloader.load_all(f'/RawData/{scan_name}', _data)
150
- data_2D = _data.get_data_from_Naxes(2)
151
- for dat in data_2D: # convert DataWithAxes DataND to Data2D
152
- dat.nav_indexes = ()
153
- return data_2D
154
-
155
- def set_axes(self, dwa: DataWithAxes):
156
- x_axis = dwa.get_axis_from_index(0)[0]
157
- y_axis = dwa.get_axis_from_index(1)[0]
158
-
159
- self.viewer.scaled_xaxis.axis_label = x_axis.label
160
- self.viewer.scaled_xaxis.axis_units = x_axis.units
161
-
162
- self.viewer.scaled_yaxis.axis_label = y_axis.label
163
- self.viewer.scaled_yaxis.axis_units = y_axis.units
164
-
165
- def list_2D_scans(self):
166
- try:
167
- scans = self.h5saver.get_scan_groups()
168
-
169
- params = []
170
- for child in self.settings.child('overlays').children():
171
- self.settings.child('overlays').removeChild(child)
172
- ind_overlay = 0
173
- axes_init = False
174
- for scan in scans:
175
- data_2D = self.get_data_from_scan_name(scan.name)
176
- for _dat in data_2D:
177
- if not axes_init:
178
- self.set_axes(_dat)
179
- axes_init = True
180
- params.append({'name': f'Overlay{ind_overlay:03.0f}', 'type': 'pixmap_check',
181
- 'value': PixmapCheckData(data=_dat[0], checked=False, path=_dat.path,
182
- info=f'{scan.name}/{_dat.get_full_name()}')})
183
- ind_overlay += 1
184
- self.settings.child('overlays').addChildren(params)
185
-
186
- for child in self.settings.child('overlays').children():
187
- val = child.value()
188
- val.checked = True
189
- child.setValue(val)
190
- child.sigValueChanged.emit(child, child.value())
191
-
192
- except Exception as e:
193
- logger.exception(str(e))
194
-
195
- def load_image(self):
196
- data, fname, node_path = browse_data(ret_all=True)
197
-
198
- self.h5saver_image = H5Saver()
199
- self.h5saver_image.open_file(fname, 'r')
200
-
201
- self.settings.child('settings', 'imagepath').setValue(fname)
202
- self.settings.child('image').setValue(PixmapCheckData(data=data[0], checked=True, path=data.path))
203
-
204
- self.settings.child('image').sigValueChanged.emit(
205
- self.settings.child('image'),
206
- self.settings.child('image').value())
207
-
208
- def load_data(self):
209
- self.h5file_path = str(select_file(start_path=config('data_saving', 'h5file', 'save_path'),
210
- save=False, ext='h5'))
211
- if self.h5file_path != '':
212
- self.settings.child('settings', 'filepath').setValue(self.h5file_path)
213
- if self.h5saver is not None:
214
- if self.h5saver.isopen():
215
- self.h5saver.close_file()
216
- self.h5saver.open_file(self.h5file_path, 'a')
217
- self.list_2D_scans()
218
-
219
- def set_aspect_ratio(self):
220
- self.viewer.set_aspect_ratio(self.is_action_checked('ratio'))
221
-
222
- def add_image_data(self, dwa: DataWithAxes):
223
- ims = []
224
- histograms = self.viewer.histograms
225
- for ind, data in enumerate(dwa):
226
- if ind > 2:
227
- break
228
- if dwa.distribution.name == 'spread':
229
- im = SpreadImageItem()
230
- else:
231
- im = UniformImageItem()
232
- ims.append(im)
233
-
234
- im.setOpacity(1)
235
- self.viewer.add_image_item(im, histogram=histograms[ind])
236
- im.setCompositionMode(QtGui.QPainter.CompositionMode_Plus)
237
-
238
- if dwa.distribution.name == 'uniform':
239
- x_axis = dwa.get_axis_from_index(1)[0].get_data()
240
- y_axis = dwa.get_axis_from_index(0)[0].get_data()
241
-
242
- rect = QtCore.QRectF(np.min(y_axis), np.min(x_axis),
243
- (np.max(y_axis) - np.min(y_axis)),
244
- (np.max(x_axis) - np.min(x_axis)))
245
-
246
- im.setImage(data)
247
- im.setOpts(rect=rect)
248
- else:
249
- y_axis, x_axis = dwa.get_axis_from_index(0)
250
- im.setImage(np.vstack((x_axis, y_axis, dwa.data[0])).T)
251
- histograms[ind].setImageItem(im)
252
- return ims
253
-
254
- def remove_image_data(self, param):
255
- for overlay in self.overlays[:]:
256
- if param.name() in overlay['name']:
257
- ind = self.overlays.index(overlay)
258
- for image in overlay['images']:
259
- self.viewer.plotitem.removeItem(image)
260
- self.overlays.pop(ind)
261
-
262
- def value_changed(self, param):
263
-
264
- if param.parent().name() == 'overlays':
265
- data: PixmapCheckData = param.value()
266
- if data.checked:
267
- dwa = self.dataloader.load_data(data.path, load_all=True)
268
- ims = self.add_image_data(dwa)
269
- self.overlays.append(dict(name=f'{param.name()}_{0}', images=ims))
270
-
271
- else:
272
- self.remove_image_data(param)
273
- elif param.name() == 'image':
274
- data: PixmapCheckData = param.value()
275
- if data.checked:
276
- dataloader = DataLoader(self.h5saver_image)
277
- dwa = dataloader.load_data(data.path)
278
- ims = self.add_image_data(dwa)
279
- self.overlays.append(dict(name='{:s}_{:03d}'.format(param.name(), 0), images=ims))
280
- else:
281
- self.remove_image_data(param)
282
-
283
- def param_deleted(self, param):
284
- self.remove_image_data(param)
285
-
286
- def setup_ui(self):
287
- layout = QtWidgets.QVBoxLayout()
288
-
289
- self.parent.setLayout(layout)
290
- self.parent.layout().addWidget(self.toolbar)
291
- sett_widget = QtWidgets.QWidget()
292
- self.sett_layout = QtWidgets.QHBoxLayout()
293
- sett_widget.setLayout(self.sett_layout)
294
-
295
- layout.addWidget(self.toolbar)
296
-
297
- splitter = QtWidgets.QSplitter(Qt.Horizontal)
298
- layout.addWidget(splitter)
299
-
300
- # set viewer area
301
- widg = QtWidgets.QWidget()
302
- self.viewer = Viewer2DBasic(widg)
303
- self.viewer.histogram_red.setVisible(True)
304
- self.viewer.histogram_green.setVisible(True)
305
- self.viewer.histogram_blue.setVisible(True)
306
- self.viewer.histogram_adaptive.setVisible(False)
307
-
308
- self.statusbar = QtWidgets.QStatusBar()
309
- self.statusbar.setMaximumHeight(25)
310
- layout.addWidget(self.statusbar)
311
- self.log_message = QtWidgets.QLabel('Initializing')
312
- self.statusbar.addPermanentWidget(self.log_message)
313
-
314
- self.sett_layout.addWidget(self.settings_tree)
315
- splitter.addWidget(sett_widget)
316
- splitter.addWidget(self.viewer.parent)
317
-
318
- def update_h5file(self, h5file):
319
- if self.h5saver is not None:
320
- self.h5saver.h5file = h5file
321
- self.dataloader = DataLoader(self.h5saver)
322
- self.list_2D_scans()
323
-
324
- def update_status(self, txt, status_time=0, log_type=None):
325
- """
326
- Show the txt message in the status bar with a delay of status_time ms.
327
-
328
- =============== =========== =======================
329
- **Parameters** **Type** **Description**
330
- *txt* string The message to show
331
- *status_time* int the delay of showing
332
- *log_type* string the type of the log
333
- =============== =========== =======================
334
- """
335
- try:
336
- self.ui.statusbar.showMessage(txt, status_time)
337
- logger.info(txt)
338
- except Exception as e:
339
- logger.exception(str(e))
340
-
341
-
342
- def main():
343
- app = QtWidgets.QApplication(sys.argv)
344
- widg = QtWidgets.QWidget()
345
- prog = Navigator(widg)#, h5file_path=r'C:\Data\2023\20230320\Dataset_20230320_001.h5')
346
-
347
- widg.show()
348
- prog.list_2D_scans()
349
- sys.exit(app.exec_())
350
-
351
-
352
- if __name__ == '__main__':
353
- main()
@@ -1,94 +0,0 @@
1
- # Standard imports
2
- import typing
3
- from abc import ABCMeta, abstractmethod
4
- from importlib import import_module
5
- from pathlib import Path
6
- from typing import Callable, List, Union
7
-
8
- # 3rd party imports
9
- import numpy as np
10
-
11
- # project imports
12
- from pymodaq.utils.abstract import abstract_attribute
13
- from pymodaq.utils.logger import set_logger, get_module_name
14
-
15
- from pymodaq.utils.factory import ObjectFactory
16
-
17
- if typing.TYPE_CHECKING:
18
- from pymodaq.utils.data import DataWithAxes, DataDim
19
- from pymodaq.utils.plotting.data_viewers import Viewer0D, Viewer1D, Viewer2D, ViewerND
20
-
21
- logger = set_logger(get_module_name(__file__))
22
-
23
-
24
- def register_plotter(parent_module_name: str = 'pymodaq.utils.plotting.plotter'):
25
- plotters = []
26
- try:
27
- plotter_module = import_module(f'{parent_module_name}.plotters')
28
-
29
- plotter_path = Path(plotter_module.__path__[0])
30
-
31
- for file in plotter_path.iterdir():
32
- if file.is_file() and 'py' in file.suffix and file.stem != '__init__':
33
- try:
34
- plotters.append(import_module(f'.{file.stem}', plotter_module.__name__))
35
- except Exception as e:
36
- logger.warning(str(e))
37
- except Exception as e:
38
- logger.warning(str(e))
39
- finally:
40
- return plotters
41
-
42
-
43
- class PlotterBase(metaclass=ABCMeta):
44
- """Base class for a plotter. """
45
-
46
- backend: str = abstract_attribute()
47
- def __init__(self):
48
- """Abstract Exporter Constructor"""
49
- pass
50
-
51
- @abstractmethod
52
- def plot(self, data, *args, **kwargs) -> None:
53
- """Abstract method to plot data object with a given backend"""
54
- pass
55
-
56
-
57
- class PlotterFactory(ObjectFactory):
58
- """Factory class registering and storing interactive plotter"""
59
-
60
- @classmethod
61
- def register(cls) -> Callable:
62
- """ To be used as a decorator
63
-
64
- Register in the class registry a new plotter class using its 2 identifiers: backend and
65
- data_dim
66
- """
67
- def inner_wrapper(wrapped_class: PlotterBase) -> Callable:
68
- if cls.__name__ not in cls._builders:
69
- cls._builders[cls.__name__] = {}
70
- key = wrapped_class.backend
71
-
72
- if key not in cls._builders[cls.__name__]:
73
- cls._builders[cls.__name__][key] = wrapped_class
74
- else:
75
- logger.warning(f'The {cls.__name__}/{key} builder is already registered.'
76
- f' Replacing it')
77
- return wrapped_class
78
-
79
- return inner_wrapper
80
-
81
- @classmethod
82
- def create(cls, key, **kwargs) -> PlotterBase:
83
- builder = cls._builders[cls.__name__].get(key)
84
- if not builder:
85
- raise ValueError(key)
86
- return builder(**kwargs)
87
-
88
- def get(self, backend: str, **kwargs):
89
- return self.create(backend, **kwargs)
90
-
91
- def backends(self) -> List[str]:
92
- """Returns the list of plotter backends, main identifier of a given plotter"""
93
- return sorted(list(self.builders[self.__class__.__name__].keys()))
94
-
File without changes
@@ -1,134 +0,0 @@
1
- from typing import List, Tuple, Any, TYPE_CHECKING, Union
2
- import sys
3
- import datetime
4
-
5
- import numpy as np
6
- from qtpy import QtWidgets
7
-
8
- from pymodaq.utils.logger import set_logger, get_module_name
9
- from pymodaq.utils import config as configmod
10
- from pymodaq.utils.data import DataDim, DataWithAxes, DataToExport
11
- from pymodaq.utils import daq_utils as utils
12
- from pymodaq.utils.plotting.plotter.plotter import PlotterBase, PlotterFactory
13
-
14
- from matplotlib import pyplot as plt
15
-
16
- if TYPE_CHECKING:
17
- pass
18
-
19
- logger = set_logger(get_module_name(__file__))
20
- config = configmod.Config()
21
-
22
- PLOT_COLORS = utils.plot_colors.copy()
23
- PLOT_COLORS.remove((255, 255, 255)) # remove white color as plotted on white background
24
- PLOT_COLORS = [(np.array(color) / 255).tolist() for color in PLOT_COLORS] # translation to matplotlib
25
-
26
-
27
- @PlotterFactory.register()
28
- class Plotter(PlotterBase):
29
- backend = 'matplotlib'
30
-
31
- def __init__(self, **_ignored):
32
- super().__init__()
33
- self.n_lines = 1
34
- self.n_columns = 1
35
- self.ind_line = 0
36
- self.ind_column = 0
37
-
38
- def plot(self, data: Union[DataWithAxes, DataToExport], *args, viewer=None,
39
- **kwargs) -> plt.Figure:
40
- fig = plt.figure()
41
-
42
- if isinstance(data, DataWithAxes):
43
- self.n_columns = len(data) if data.dim.name == 'Data2D' else 1
44
- self.plot_dwa(data, *args, **kwargs)
45
- elif isinstance(data, DataToExport):
46
- self.n_columns = max([len(dwa) if dwa.dim.name == 'Data2D' else 1 for dwa in data])
47
- self.n_lines = len(data)
48
- self.plot_dte(data, *args, **kwargs)
49
- plt.tight_layout()
50
- fig.suptitle(f'{data.name} taken the {datetime.datetime.fromtimestamp(data.timestamp)}')
51
- return fig
52
-
53
- def plot_dwa(self, dwa: DataWithAxes, *args, **kwargs):
54
- if dwa.dim.name == 'Data1D':
55
- if len(dwa.axes) == 0:
56
- dwa.create_missing_axes()
57
- self.ind_column = 0
58
- self.plot1D(dwa, *args, **kwargs)
59
- elif dwa.dim.name == 'Data2D':
60
- if len(dwa.axes) < 2:
61
- dwa.create_missing_axes()
62
- self.plot2D(dwa, *args, **kwargs)
63
-
64
- def plot_dte(self, dte: DataToExport, *args, **kwargs):
65
- for ind in range(len(dte)):
66
- self.ind_line = ind
67
- self.plot_dwa(dte[ind], *args, **kwargs)
68
-
69
- def plot1D(self, dwa: DataWithAxes, *args, **kwargs):
70
- plt.subplot(self.n_lines, self.n_columns,
71
- (self.n_columns * self.ind_line) + 1)
72
- for ind_data, data_array in enumerate(dwa):
73
- plt.plot(dwa.axes[0].get_data(), data_array, *args, color=PLOT_COLORS[ind_data],
74
- **kwargs)
75
- if dwa.errors is not None:
76
- plt.fill_between(dwa.axes[0].get_data(), data_array - dwa.get_error(ind_data),
77
- data_array + dwa.get_error(ind_data), *args,
78
- color=PLOT_COLORS[ind_data] + [0.3], **kwargs)
79
- plt.legend(dwa.labels)
80
- #plt.title(f'{dwa.name}')
81
- plt.xlabel(f'{dwa.axes[0].label} ({dwa.axes[0].units})')
82
- plt.ylabel(dwa.name)
83
-
84
- def plot2D(self, dwa: DataWithAxes, *args, **kwargs):
85
- xaxis = dwa.get_axis_from_index(1)[0]
86
- yaxis = dwa.get_axis_from_index(0)[0]
87
-
88
- x = xaxis.get_data()
89
- y = yaxis.get_data()
90
- for ind_plot, dwa_array in enumerate(dwa):
91
- self.ind_column = ind_plot
92
- plt.subplot(self.n_lines, self.n_columns,
93
- (self.n_columns * self.ind_line) + ind_plot + 1)
94
- X, Y = np.meshgrid(x, y)
95
- plt.pcolormesh(X, Y, dwa_array, *args, **kwargs)
96
- plt.title(f'{dwa.name}/{dwa.labels[ind_plot]}')
97
- plt.xlabel(f'{xaxis.label} ({xaxis.units})')
98
- plt.ylabel(f'{yaxis.label} ({yaxis.units})')
99
-
100
-
101
- # if __name__ == '__main__':
102
- # from pymodaq.utils import data as data_mod
103
- # import numpy as np
104
- # from pymodaq.utils.math_utils import gauss1D, gauss2D
105
- # from pymodaq.utils.plotting.plotter.plotter import PlotterFactory
106
- # plotter_factory = PlotterFactory()
107
- #
108
- # x = np.linspace(0, 100, 101)
109
- # y = np.linspace(0, 100, 101)
110
- # y1 = gauss2D(x, 50, 20, y, 40, 7)
111
- #
112
- #
113
- # QtWidgets.QApplication.processEvents()
114
- # dwa = data_mod.DataRaw('mydata', data=[y1, y1, y1],
115
- # axes=[data_mod.Axis('xaxis', 'x units', data=x, index=0,
116
- # spread_order=0),
117
- # data_mod.Axis('yaxis', 'y units', data=y, index=1,
118
- # spread_order=0)
119
- # ],
120
- # labels=['MAG', 'PHASE'],
121
- # nav_indexes=())
122
- # dte = dwa.as_dte('mydte')
123
- # dwa_mean = dwa.mean()
124
- # dwa_mean.name = 'mean'
125
- # dwa_mean_2 = dwa.mean(1)
126
- # dwa_mean_2.name = 'mean2'
127
- # dte.append(dwa_mean)
128
- # dte.append(dwa_mean_2)
129
- #
130
- # fig = dwa.plot('matplotlib')
131
- # fig.savefig('myplot.png')
132
- #
133
- # fig2 = dte.plot('matplotlib')
134
- # fig2.savefig('mydte.png')
@@ -1,78 +0,0 @@
1
- from typing import List, Tuple, Any, TYPE_CHECKING, Union
2
- import sys
3
-
4
- from qtpy import QtWidgets
5
-
6
- from pymodaq.utils.logger import set_logger, get_module_name
7
- from pymodaq.utils import config as configmod
8
- from pymodaq.utils.gui_utils.utils import start_qapplication
9
- from pymodaq.utils.plotting.plotter.plotter import PlotterBase, PlotterFactory
10
- from pymodaq.utils.data import DataWithAxes, DataToExport
11
- from pymodaq.utils.plotting.data_viewers import (Viewer1D, Viewer2D, ViewerND, ViewerDispatcher,
12
- Viewer0D, ViewersEnum)
13
- from pymodaq.utils.plotting.data_viewers.viewer import ViewerBase, viewer_factory
14
- from pymodaq.utils.gui_utils.dock import DockArea
15
-
16
- logger = set_logger(get_module_name(__file__))
17
- config = configmod.Config()
18
-
19
-
20
- @PlotterFactory.register()
21
- class Plotter(PlotterBase):
22
- backend = 'qt'
23
-
24
- def __init__(self, **_ignored):
25
- super().__init__()
26
-
27
- def plot(self, data: Union[DataWithAxes, DataToExport], viewer=None, **kwargs) -> ViewerBase:
28
- do_exit = False
29
- qapp = QtWidgets.QApplication.instance()
30
- if qapp is None:
31
- do_exit = True
32
- qapp = start_qapplication()
33
-
34
- if viewer is None:
35
- if isinstance(data, DataToExport):
36
- widget = DockArea()
37
- viewer = ViewerDispatcher(widget, title=data.name)
38
- else:
39
- widget = QtWidgets.QWidget()
40
- viewer_enum = ViewersEnum.get_viewers_enum_from_data(data)
41
- viewer = viewer_factory.get(viewer_enum.name, parent=widget)
42
- widget.show()
43
-
44
- if viewer is not None:
45
- viewer.show_data(data, **kwargs)
46
- if isinstance(viewer, Viewer1D):
47
- if not viewer.is_action_checked('errors'):
48
- viewer.get_action('errors').trigger()
49
- QtWidgets.QApplication.processEvents()
50
-
51
- if do_exit:
52
- sys.exit(qapp.exec())
53
- return viewer
54
-
55
-
56
- if __name__ == '__main__':
57
- from pymodaq.utils import data as data_mod
58
- import numpy as np
59
- from pymodaq.utils.math_utils import gauss1D
60
- from pymodaq.utils.plotting.plotter.plotter import PlotterFactory
61
-
62
- qapp = start_qapplication()
63
-
64
- plotter_factory = PlotterFactory()
65
-
66
- x = np.random.randint(201, size=201)
67
- y1 = gauss1D(x, 75, 25)
68
- y2 = gauss1D(x, 120, 50, 2)
69
-
70
- QtWidgets.QApplication.processEvents()
71
- dwa = data_mod.DataRaw('mydata', data=[y1, y2],
72
- axes=[data_mod.Axis('myaxis', 'units', data=x, index=0,
73
- spread_order=0)],
74
- nav_indexes=())
75
-
76
- dwa.plot('qt')
77
- dwa.as_dte('mydte').plot('qt')
78
- sys.exit(qapp.exec())
File without changes