microeye 2.3.6__tar.gz → 2.3.7__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (205) hide show
  1. {microeye-2.3.6/src/microeye.egg-info → microeye-2.3.7}/PKG-INFO +5 -5
  2. {microeye-2.3.6 → microeye-2.3.7}/README.md +4 -4
  3. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/__init__.py +0 -5
  4. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/_version.py +1 -1
  5. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/hardware/cams/camera_options.py +2 -3
  6. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/hardware/cams/camera_panel.py +32 -21
  7. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/hardware/cams/line_profiler.py +1 -2
  8. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/hardware/cams/shortcuts.py +2 -4
  9. microeye-2.3.7/src/microEye/hardware/cams/vimba/__init__.py +1 -0
  10. microeye-2.3.7/src/microEye/hardware/lasers/__init__.py +1 -0
  11. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/hardware/lasers/io_matchbox.py +112 -75
  12. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/hardware/lasers/io_single_laser.py +84 -48
  13. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/hardware/lasers/laser_relay.py +6 -8
  14. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/hardware/mieye/acquisition_manager.py +13 -4
  15. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/hardware/mieye/devices_manager.py +22 -7
  16. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/hardware/mieye/miEye.py +20 -14
  17. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/hardware/misc/reglo.py +1 -1
  18. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/hardware/misc/temp.py +1 -1
  19. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/hardware/protocols/actions.py +4 -5
  20. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/hardware/protocols/actions_items.py +1 -1
  21. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/hardware/protocols/designer.py +0 -1
  22. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/hardware/protocols/scene_manager.py +0 -1
  23. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/hardware/protocols/serialization.py +2 -4
  24. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/hardware/pycromanager/core.py +7 -1
  25. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/hardware/pycromanager/devices.py +0 -8
  26. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/hardware/pycromanager/headless.py +0 -1
  27. microeye-2.3.7/src/microEye/hardware/stages/__init__.py +0 -0
  28. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/hardware/stages/elliptec/devicePort.py +1 -2
  29. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/hardware/stages/elliptec/devicesView.py +1 -1
  30. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/hardware/stages/kinesis/kdc101/enums.py +1 -1
  31. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/hardware/stages/kinesis/kdc101/factory.py +2 -0
  32. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/hardware/stages/kinesis/kdc101/kdc101.py +1 -2
  33. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/hardware/stages/kinesis/kinesis.py +3 -8
  34. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/hardware/stages/piezo_concept.py +1 -7
  35. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/hardware/stages/stabilizer.py +200 -194
  36. microeye-2.3.7/src/microEye/icons/__init__.py +0 -0
  37. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/launcher.py +1 -4
  38. microeye-2.3.7/src/microEye/tools/__init__.py +0 -0
  39. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/utils/metadata.py +6 -1
  40. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/utils/metadata_tree.py +393 -220
  41. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/utils/thread_worker.py +0 -2
  42. {microeye-2.3.6 → microeye-2.3.7/src/microeye.egg-info}/PKG-INFO +5 -5
  43. microeye-2.3.6/src/microEye/analysis/__init__.py +0 -1
  44. microeye-2.3.6/src/microEye/hardware/__init__.py +0 -3
  45. microeye-2.3.6/src/microEye/hardware/lasers/__init__.py +0 -13
  46. microeye-2.3.6/src/microEye/hardware/protocols/__init__.py +0 -2
  47. microeye-2.3.6/src/microEye/hardware/stages/__init__.py +0 -13
  48. {microeye-2.3.6 → microeye-2.3.7}/LICENSE +0 -0
  49. {microeye-2.3.6 → microeye-2.3.7}/MANIFEST.in +0 -0
  50. {microeye-2.3.6 → microeye-2.3.7}/pyproject.toml +0 -0
  51. {microeye-2.3.6 → microeye-2.3.7}/setup.cfg +0 -0
  52. {microeye-2.3.6 → microeye-2.3.7}/setup.py +0 -0
  53. {microeye-2.3.6/src/microEye/analysis/fitting → microeye-2.3.7/src/microEye/analysis}/__init__.py +0 -0
  54. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/analysis/checklist_dialog.py +0 -0
  55. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/analysis/cmosMaps.py +0 -0
  56. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/analysis/filters/__init__.py +0 -0
  57. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/analysis/filters/base.py +0 -0
  58. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/analysis/filters/spatial.py +0 -0
  59. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/analysis/filters/temporal.py +0 -0
  60. {microeye-2.3.6/src/microEye/analysis/tools → microeye-2.3.7/src/microEye/analysis/fitting}/__init__.py +0 -0
  61. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/analysis/fitting/fit.py +0 -0
  62. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/analysis/fitting/nena.py +0 -0
  63. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/analysis/fitting/phasor_fit.py +0 -0
  64. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/analysis/fitting/processing.py +0 -0
  65. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/analysis/fitting/psf/__init__.py +0 -0
  66. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/analysis/fitting/psf/extract.py +0 -0
  67. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/analysis/fitting/psf/rubost_mean.py +0 -0
  68. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/analysis/fitting/psf/spline.py +0 -0
  69. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/analysis/fitting/psf/stats/__init__.py +0 -0
  70. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/analysis/fitting/psf/stats/core.py +0 -0
  71. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/analysis/fitting/psf/stats/curve_fit.py +0 -0
  72. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/analysis/fitting/psf/stats/io.py +0 -0
  73. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/analysis/fitting/psf/stats/slope_fit.py +0 -0
  74. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/analysis/fitting/psf/temp.py +0 -0
  75. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/analysis/fitting/psf/test.py +0 -0
  76. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/analysis/fitting/pyfit3Dcspline/CPU/CPUfunctions.py +0 -0
  77. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/analysis/fitting/pyfit3Dcspline/CPU/CPUmleFit_LM.py +0 -0
  78. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/analysis/fitting/pyfit3Dcspline/CPU/CPUsplineLib.py +0 -0
  79. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/analysis/fitting/pyfit3Dcspline/CPU/__init__.py +0 -0
  80. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/analysis/fitting/pyfit3Dcspline/GPU/GPUfunctions.py +0 -0
  81. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/analysis/fitting/pyfit3Dcspline/GPU/GPUmleFit_LM_EMCCD.py +0 -0
  82. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/analysis/fitting/pyfit3Dcspline/GPU/GPUmleFit_LM_sCMOS.py +0 -0
  83. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/analysis/fitting/pyfit3Dcspline/GPU/GPUsplineLib.py +0 -0
  84. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/analysis/fitting/pyfit3Dcspline/GPU/__init__.py +0 -0
  85. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/analysis/fitting/pyfit3Dcspline/__init__.py +0 -0
  86. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/analysis/fitting/pyfit3Dcspline/constants.py +0 -0
  87. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/analysis/fitting/pyfit3Dcspline/mainfunctions.py +0 -0
  88. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/analysis/fitting/results.py +0 -0
  89. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/analysis/fitting/results_stats.py +0 -0
  90. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/analysis/fitting/tardis.py +0 -0
  91. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/analysis/multi_viewer.py +0 -0
  92. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/analysis/processing/__init__.py +0 -0
  93. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/analysis/processing/frc.py +0 -0
  94. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/analysis/rendering/__init__.py +0 -0
  95. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/analysis/rendering/base.py +0 -0
  96. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/analysis/rendering/cloud.py +0 -0
  97. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/analysis/rendering/core.py +0 -0
  98. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/analysis/rendering/volumetric.py +0 -0
  99. {microeye-2.3.6/src/microEye/hardware/misc → microeye-2.3.7/src/microEye/analysis/tools}/__init__.py +0 -0
  100. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/analysis/tools/kymograms.py +0 -0
  101. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/analysis/tools/roi_selectors.py +0 -0
  102. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/analysis/utils/__init__.py +0 -0
  103. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/analysis/utils/coordinates.py +0 -0
  104. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/analysis/utils/images.py +0 -0
  105. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/analysis/utils/windows.py +0 -0
  106. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/analysis/viewer/__init__.py +0 -0
  107. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/analysis/viewer/image_options_widget.py +0 -0
  108. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/analysis/viewer/images.py +0 -0
  109. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/analysis/viewer/layers_widget.py +0 -0
  110. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/analysis/viewer/localizations.py +0 -0
  111. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/analysis/viewer/psf.py +0 -0
  112. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/analysis/viewer/volume.py +0 -0
  113. {microeye-2.3.6/src/microEye/hardware/cams/dummy → microeye-2.3.7/src/microEye/hardware}/__init__.py +0 -0
  114. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/hardware/cams/__init__.py +0 -0
  115. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/hardware/cams/camera_calibration.py +0 -0
  116. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/hardware/cams/camera_list.py +0 -0
  117. {microeye-2.3.6/src/microEye/hardware/cams/linescan → microeye-2.3.7/src/microEye/hardware/cams/dummy}/__init__.py +0 -0
  118. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/hardware/cams/dummy/dummy_panel.py +0 -0
  119. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/hardware/cams/jobs.py +0 -0
  120. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/hardware/cams/linescan/IR_Cam.py +0 -0
  121. {microeye-2.3.6/src/microEye/hardware/cams/thorlabs → microeye-2.3.7/src/microEye/hardware/cams/linescan}/__init__.py +0 -0
  122. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/hardware/cams/micam.py +0 -0
  123. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/hardware/cams/pco/__init__.py +0 -0
  124. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/hardware/cams/pco/enums.py +0 -0
  125. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/hardware/cams/pco/pco_cam.py +0 -0
  126. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/hardware/cams/pco/pco_panel.py +0 -0
  127. {microeye-2.3.6/src/microEye/hardware/cams/ueye → microeye-2.3.7/src/microEye/hardware/cams/thorlabs}/__init__.py +0 -0
  128. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/hardware/cams/thorlabs/thorlabs.py +0 -0
  129. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/hardware/cams/thorlabs/thorlabs_panel.py +0 -0
  130. {microeye-2.3.6/src/microEye/hardware/cams/vimba → microeye-2.3.7/src/microEye/hardware/cams/ueye}/__init__.py +0 -0
  131. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/hardware/cams/ueye/ueye_camera.py +0 -0
  132. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/hardware/cams/ueye/ueye_panel.py +0 -0
  133. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/hardware/cams/vimba/vimba_cam.py +0 -0
  134. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/hardware/cams/vimba/vimba_panel.py +0 -0
  135. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/hardware/device.py +0 -0
  136. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/hardware/lasers/io_params.py +0 -0
  137. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/hardware/mieye/__init__.py +0 -0
  138. {microeye-2.3.6/src/microEye/icons → microeye-2.3.7/src/microEye/hardware/misc}/__init__.py +0 -0
  139. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/hardware/misc/acquisition_view.py +0 -0
  140. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/hardware/port_config.py +0 -0
  141. {microeye-2.3.6/src/microEye/tools → microeye-2.3.7/src/microEye/hardware/protocols}/__init__.py +0 -0
  142. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/hardware/pycromanager/__init__.py +0 -0
  143. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/hardware/pycromanager/enums.py +0 -0
  144. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/hardware/pycromanager/utils.py +0 -0
  145. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/hardware/pycromanager/widgets/__init__.py +0 -0
  146. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/hardware/pycromanager/widgets/bridges.py +0 -0
  147. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/hardware/pycromanager/widgets/headless_manager.py +0 -0
  148. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/hardware/pycromanager/widgets/headless_options.py +0 -0
  149. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/hardware/pycromanager/widgets/pycro_panel.py +0 -0
  150. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/hardware/stages/elliptec/__init__.py +0 -0
  151. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/hardware/stages/elliptec/baseDevice.py +0 -0
  152. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/hardware/stages/elliptec/device.py +0 -0
  153. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/hardware/stages/elliptec/deviceID.py +0 -0
  154. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/hardware/stages/elliptec/deviceStatus.py +0 -0
  155. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/hardware/stages/elliptec/ellDevices.py +0 -0
  156. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/hardware/stages/elliptec/messageUpdater.py +0 -0
  157. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/hardware/stages/elliptec/motorInfo.py +0 -0
  158. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/hardware/stages/elliptec/stage.py +0 -0
  159. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/hardware/stages/elliptec/test.py +0 -0
  160. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/hardware/stages/kinesis/__init__.py +0 -0
  161. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/hardware/stages/kinesis/kdc101/__init__.py +0 -0
  162. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/hardware/stages/stage.py +0 -0
  163. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/hardware/widgets/__init__.py +0 -0
  164. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/hardware/widgets/controller.py +0 -0
  165. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/hardware/widgets/devices.py +0 -0
  166. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/hardware/widgets/focusWidget.py +0 -0
  167. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/hardware/widgets/qlist_slider.py +0 -0
  168. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/hardware/widgets/scan_acquisition.py +0 -0
  169. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/icons/1024.png +0 -0
  170. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/icons/128.png +0 -0
  171. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/icons/16.png +0 -0
  172. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/icons/24.png +0 -0
  173. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/icons/256.png +0 -0
  174. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/icons/32.png +0 -0
  175. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/icons/48.png +0 -0
  176. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/icons/512.png +0 -0
  177. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/icons/64.png +0 -0
  178. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/icons/close.svg +0 -0
  179. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/icons/mieye.png +0 -0
  180. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/icons/min.svg +0 -0
  181. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/icons/viewer.png +0 -0
  182. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/qt.py +0 -0
  183. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/tools/microscopy.py +0 -0
  184. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/utils/__init__.py +0 -0
  185. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/utils/display.py +0 -0
  186. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/utils/enum_encoder.py +0 -0
  187. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/utils/expandable_groupbox.py +0 -0
  188. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/utils/gui_helper.py +0 -0
  189. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/utils/hid_utils/__init__.py +0 -0
  190. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/utils/hid_utils/controller.py +0 -0
  191. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/utils/hid_utils/device.py +0 -0
  192. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/utils/hid_utils/enums.py +0 -0
  193. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/utils/hid_utils/utils.py +0 -0
  194. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/utils/labelled_slider.py +0 -0
  195. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/utils/micro_launcher.py +0 -0
  196. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/utils/parameter_tree.py +0 -0
  197. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/utils/pyscripting.py +0 -0
  198. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/utils/retry_exec.py +0 -0
  199. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/utils/start_gui.py +0 -0
  200. {microeye-2.3.6 → microeye-2.3.7}/src/microEye/utils/uImage.py +0 -0
  201. {microeye-2.3.6 → microeye-2.3.7}/src/microeye.egg-info/SOURCES.txt +0 -0
  202. {microeye-2.3.6 → microeye-2.3.7}/src/microeye.egg-info/dependency_links.txt +0 -0
  203. {microeye-2.3.6 → microeye-2.3.7}/src/microeye.egg-info/entry_points.txt +0 -0
  204. {microeye-2.3.6 → microeye-2.3.7}/src/microeye.egg-info/requires.txt +0 -0
  205. {microeye-2.3.6 → microeye-2.3.7}/src/microeye.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: microeye
3
- Version: 2.3.6
3
+ Version: 2.3.7
4
4
  Summary: A python toolkit for fluorescence microscopy that features hardware control, data analysis and vizualization for super-resolution single-molecule localization microscopy and single-partical tracking.
5
5
  Home-page: https://github.com/samhitech/microEye
6
6
  Author: Mohammad Nour Alsamsam
@@ -95,10 +95,10 @@ This toolkit is compatible with the [hardware](#hardware) used in our microscope
95
95
  ![GitHub Stars](https://img.shields.io/github/stars/samhitech/microEye.svg)
96
96
 
97
97
  ```bash
98
- __ ____ ____ ___ ____ ____
99
- / |/ (_)__________ / __/_ _____ _ __|_ | |_ / / __/
100
- / /|_/ / / __/ __/ _ \/ _// // / -_) | |/ / __/_ _/_ <_/ _ \
101
- /_/ /_/_/\__/_/ \___/___/\_, /\__/ |___/____(_)____(_)___/
98
+ __ ____ ____ ___ ____ ____
99
+ / |/ (_)__________ / __/_ _____ _ __|_ | |_ //_ /
100
+ / /|_/ / / __/ __/ _ \/ _// // / -_) | |/ / __/_ _/_ <_ / /
101
+ /_/ /_/_/\__/_/ \___/___/\_, /\__/ |___/____(_)____(_)_/
102
102
  /___/
103
103
  ```
104
104
 
@@ -31,10 +31,10 @@ This toolkit is compatible with the [hardware](#hardware) used in our microscope
31
31
  ![GitHub Stars](https://img.shields.io/github/stars/samhitech/microEye.svg)
32
32
 
33
33
  ```bash
34
- __ ____ ____ ___ ____ ____
35
- / |/ (_)__________ / __/_ _____ _ __|_ | |_ / / __/
36
- / /|_/ / / __/ __/ _ \/ _// // / -_) | |/ / __/_ _/_ <_/ _ \
37
- /_/ /_/_/\__/_/ \___/___/\_, /\__/ |___/____(_)____(_)___/
34
+ __ ____ ____ ___ ____ ____
35
+ / |/ (_)__________ / __/_ _____ _ __|_ | |_ //_ /
36
+ / /|_/ / / __/ __/ _ \/ _// // / -_) | |/ / __/_ _/_ <_ / /
37
+ /_/ /_/_/\__/_/ \___/___/\_, /\__/ |___/____(_)____(_)_/
38
38
  /___/
39
39
  ```
40
40
 
@@ -40,8 +40,3 @@ def getArgs():
40
40
 
41
41
 
42
42
  ARGS = getArgs()
43
-
44
- import microEye.analysis.fitting.pyfit3Dcspline as pyfit3Dcspline # noqa: E402
45
- from microEye.analysis import multi_viewer # noqa: E402
46
- from microEye.hardware import miEye_module # noqa: E402
47
- from microEye.qt import * # noqa: I001, E402
@@ -1,2 +1,2 @@
1
- version_info = (2, 3, 6)
1
+ version_info = (2, 3, 7)
2
2
  __version__ = '.'.join(map(str, version_info))
@@ -1,10 +1,9 @@
1
1
  import os
2
2
  import sys
3
3
  from enum import Enum
4
- from typing import Any, Optional
4
+ from typing import Optional
5
5
 
6
6
  from pyqtgraph.parametertree import Parameter
7
- from pyqtgraph.parametertree.parameterTypes import GroupParameter
8
7
 
9
8
  from microEye.qt import QApplication, QtWidgets, Signal
10
9
  from microEye.utils.parameter_tree import Tree
@@ -729,7 +728,7 @@ class CameraOptions(Tree):
729
728
  str
730
729
  The selected dual view colors.
731
730
  '''
732
- # get the selected dual view colors from the parameter tree e.g. 'RG', 'GB', etc.
731
+ # get the selected dual view colors from the parameter tree e.g. 'RG', 'GB', etc
733
732
  scheme = self.get_param_value(CamParams.DUAL_VIEW_COLORS)
734
733
 
735
734
  indices = {'R': 0, 'G': 1, 'B': 2}
@@ -1,16 +1,11 @@
1
- import math
2
1
  import os
3
2
  import re
4
3
  import threading
5
- import time
6
4
  import traceback
7
- from functools import lru_cache
8
5
  from queue import Queue
9
- from typing import Optional, Union
6
+ from typing import Union
10
7
 
11
- import cv2
12
8
  import numpy as np
13
- import pyqtgraph as pg
14
9
 
15
10
  from microEye.analysis.tools.roi_selectors import (
16
11
  MultiRectangularROISelector,
@@ -26,7 +21,6 @@ from microEye.hardware.cams.shortcuts import (
26
21
  )
27
22
  from microEye.qt import QDateTime, Qt, QtCore, QtWidgets, Signal, Slot
28
23
  from microEye.utils.display import DisplayManager, fast_autolevels_opencv
29
- from microEye.utils.expandable_groupbox import ExpandableGroupBox
30
24
  from microEye.utils.gui_helper import get_scaling_factor
31
25
  from microEye.utils.metadata_tree import MetadataEditorTree, MetaParams
32
26
  from microEye.utils.thread_worker import QThreadWorker
@@ -524,6 +518,21 @@ class Camera_Panel(QtWidgets.QGroupBox):
524
518
  except Exception:
525
519
  traceback.print_exc()
526
520
 
521
+ def get_ROI(self) -> tuple[int, int, int, int]:
522
+ '''Gets the ROI for the selected camera.
523
+
524
+ Returns
525
+ -------
526
+ tuple[int, int, int, int]
527
+ The ROI as (x, y, width, height).
528
+ '''
529
+ x = self.camera_options.get_param_value(CamParams.ROI_X)
530
+ y = self.camera_options.get_param_value(CamParams.ROI_Y)
531
+ w = self.camera_options.get_param_value(CamParams.ROI_WIDTH)
532
+ h = self.camera_options.get_param_value(CamParams.ROI_HEIGHT)
533
+
534
+ return x, y, w, h
535
+
527
536
  def roi_shortcuts(self, fov: float, single: bool, software: bool):
528
537
  '''
529
538
  Sets the ROI for the camera using the selected FOV and mode.
@@ -560,6 +569,19 @@ class Camera_Panel(QtWidgets.QGroupBox):
560
569
  y = int((height - fov // pixel_size) / 2)
561
570
  h = int(fov // pixel_size)
562
571
 
572
+ if not software:
573
+ self.reset_ROI()
574
+ QtCore.QThread.msleep(250) # wait for the camera to update the ROI
575
+
576
+ self.camera_options.set_param_value(CamParams.ROI_X, x)
577
+ self.camera_options.set_param_value(CamParams.ROI_Y, y)
578
+ self.camera_options.set_param_value(CamParams.ROI_WIDTH, w)
579
+ self.camera_options.set_param_value(CamParams.ROI_HEIGHT, h)
580
+
581
+ self.set_ROI()
582
+
583
+ x, y, w, h = self.get_ROI()
584
+
563
585
  rois = [
564
586
  (x if software else 0, y if software else 0, h, h),
565
587
  (h + 3 * x if software else h + 2 * x, y if software else 0, h, h),
@@ -576,18 +598,7 @@ class Camera_Panel(QtWidgets.QGroupBox):
576
598
  'value': f'{roi[0]}, {roi[1]}, {roi[2]}, {roi[3]}',
577
599
  },
578
600
  )
579
-
580
- if not software:
581
- self.reset_ROI()
582
- QtCore.QThread.msleep(250) # wait for the camera to update the ROI
583
-
584
- self.camera_options.set_param_value(CamParams.ROI_X, x)
585
- self.camera_options.set_param_value(CamParams.ROI_Y, y)
586
- self.camera_options.set_param_value(CamParams.ROI_WIDTH, w)
587
- self.camera_options.set_param_value(CamParams.ROI_HEIGHT, h)
588
-
589
- self.set_ROI()
590
- elif single:
601
+ elif single and software:
591
602
  self.camera_options.add_param_child(
592
603
  CamParams.EXPORTED_ROIS,
593
604
  {
@@ -849,7 +860,8 @@ def display_frame(
849
860
  frame = frame._image
850
861
 
851
862
  thresholds, hist, cdf = fast_autolevels_opencv(
852
- frame, levels=camp.camera_options.isAutostretch)
863
+ frame, levels=camp.camera_options.isAutostretch
864
+ )
853
865
 
854
866
  # cv2.imshow(name, frame)
855
867
  DisplayManager.instance().image_update_signal.emit(
@@ -895,7 +907,6 @@ def update_histogram_and_display(params: AcquisitionJob, camp: Camera_Panel):
895
907
  display_frame(camp, params.name, params.frame)
896
908
 
897
909
  elif camp.camera_options.isROIsView:
898
-
899
910
  overlaid = len(params.rois) == 2 and camp.camera_options.isOverlaidView
900
911
  flipped = camp.camera_options.isFlippedROIsView
901
912
 
@@ -1,10 +1,9 @@
1
1
  import numpy as np
2
2
  import pyqtgraph as pg
3
3
  import qdarkstyle
4
- from pyqtgraph.multiprocess import proxy
5
4
 
6
5
  from microEye.analysis.tools.kymograms import get_kymogram_row
7
- from microEye.qt import QApplication, QtWidgets, Signal, Slot
6
+ from microEye.qt import QApplication, QtWidgets, Signal
8
7
 
9
8
 
10
9
  class LineProfiler(QtWidgets.QWidget):
@@ -2,7 +2,7 @@ from typing import Union
2
2
 
3
3
  from microEye.hardware.cams.camera_options import CamParams
4
4
  from microEye.hardware.cams.micam import miCamera
5
- from microEye.qt import QDateTime, Qt, QtCore, QtGui, QtWidgets, Signal, Slot
5
+ from microEye.qt import Qt, QtCore, QtGui, QtWidgets, Signal
6
6
  from microEye.utils.gui_helper import debounceSlot
7
7
 
8
8
  DEFAULT_EXPOSURE_SHORTCUTS = [
@@ -399,9 +399,7 @@ class CameraShortcutsWidget(QtWidgets.QWidget):
399
399
  # Close all windows
400
400
  self.close_windows_button = QtWidgets.QPushButton('Close All Windows')
401
401
  self.close_windows_button.setToolTip('Close all windows')
402
- self.close_windows_button.clicked.connect(
403
- lambda: self.closeAllWindows.emit()
404
- )
402
+ self.close_windows_button.clicked.connect(lambda: self.closeAllWindows.emit())
405
403
  self.display_windows_btns.addWidget(self.close_windows_button)
406
404
 
407
405
  def _display_mode_changed(self, index):
@@ -1,3 +1,4 @@
1
+ import threading
1
2
  import time
2
3
  from typing import Optional
3
4
 
@@ -6,7 +7,9 @@ from pyqtgraph.parametertree import Parameter
6
7
 
7
8
  from microEye.hardware.lasers.io_params import LaserState, MB_Params
8
9
  from microEye.qt import QtCore, QtSerialPort, QtWidgets, Signal
9
- from microEye.utils import StartGUI, Tree
10
+ from microEye.utils.parameter_tree import Tree
11
+ from microEye.utils.start_gui import StartGUI
12
+ from microEye.utils.thread_worker import QThreadWorker
10
13
 
11
14
 
12
15
  class io_combiner(QtCore.QObject):
@@ -136,6 +139,8 @@ class io_combiner(QtCore.QObject):
136
139
  open=False, # Start with the port closed
137
140
  )
138
141
 
142
+ self._lock = threading.Lock() # Add this line
143
+
139
144
  def isOpen(self) -> bool:
140
145
  '''
141
146
  Checks if the serial port is open.
@@ -204,38 +209,42 @@ class io_combiner(QtCore.QObject):
204
209
  command to be sent, please check the constants
205
210
  implemented in the MatchBox class.
206
211
  '''
207
- if self.isOpen():
208
- try:
209
- self.ser.reset_input_buffer()
210
-
211
- start_time = time.time()
212
- self.ser.write(command)
213
-
214
- response = (
215
- self.ser.read_until(b'\r\n')
216
- .decode(errors='replace')
217
- .replace(b'\xff', b'')
218
- .strip()
219
- )
220
- elapsed_time = (
221
- time.time() - start_time
222
- ) * 1000 # Convert to milliseconds
223
- if log_print:
224
- print(
225
- f'Command: {command} | '
226
- f'Response: {response} | '
227
- f'Time: {elapsed_time:.1f} ms'
228
- )
229
-
230
- self.DataReady.emit(response, command)
231
-
232
- return response
233
- except serial.SerialException as e:
234
- print(f'Serial communication error: {e}')
235
- return '<ERR>'
236
- except Exception as e:
237
- print(f'Unexpected error: {e}')
238
- return '<ERR>'
212
+ with self._lock:
213
+ if self.isOpen():
214
+ try:
215
+ self.ser.reset_input_buffer()
216
+
217
+ start_time = time.time()
218
+ self.ser.write(command)
219
+
220
+ response = []
221
+ for _ in range(5 if command == io_combiner.INFO else 1):
222
+ response.append(
223
+ self.ser.read_until(b'\r\n')
224
+ .replace(b'\xff', b'')
225
+ .decode(errors='replace')
226
+ .strip()
227
+ )
228
+ elapsed_time = (
229
+ time.time() - start_time
230
+ ) * 1000 # Convert to milliseconds
231
+ if log_print:
232
+ rx = response[0] if len(response) == 1 else '...'
233
+ print(
234
+ f'Command: {command} | '
235
+ f'Response: {rx} | '
236
+ f'Time: {elapsed_time:.1f} ms'
237
+ )
238
+
239
+ self.DataReady.emit(response, command)
240
+
241
+ return response[0] if len(response) == 1 else response
242
+ except serial.SerialException as e:
243
+ print(f'Serial communication error: {e}')
244
+ return '<ERR>'
245
+ except Exception as e:
246
+ print(f'Unexpected error: {e}')
247
+ return '<ERR>'
239
248
 
240
249
  def OpenCOM(self):
241
250
  '''Opens the serial port and initializes the combiner.'''
@@ -406,7 +415,7 @@ class io_combiner(QtCore.QObject):
406
415
  res = self.SendCommand(io_combiner.INFO, delay=50)
407
416
 
408
417
  if not ('<ERR>' in res or '<ACK>' in res):
409
- info = res.split('\r\n')
418
+ info = res
410
419
 
411
420
  self.Firmware = info[0]
412
421
  self.Serial = info[1].split(':')[1]
@@ -495,6 +504,7 @@ class CombinerLaserWidget(Tree):
495
504
 
496
505
  # Statues Bar Timer
497
506
  self.timer = QtCore.QTimer()
507
+ self.timer.setSingleShot(True)
498
508
  self.timer.setInterval(500)
499
509
  self.timer.timeout.connect(self.update_stats)
500
510
  self.timer.start()
@@ -535,8 +545,7 @@ class CombinerLaserWidget(Tree):
535
545
  'value': 115200,
536
546
  'limits': [
537
547
  baudrate
538
- for baudrate in
539
- QtSerialPort.QSerialPortInfo.standardBaudRates()
548
+ for baudrate in QtSerialPort.QSerialPortInfo.standardBaudRates() # noqa: E501
540
549
  ],
541
550
  },
542
551
  {'name': str(MB_Params.SET_PORT), 'type': 'action'},
@@ -756,7 +765,7 @@ class CombinerLaserWidget(Tree):
756
765
  switch.SetCurrent(value)
757
766
 
758
767
  def update_stats(self):
759
- """
768
+ '''
760
769
  Updates the statistics displayed in the MatchBox GUI.
761
770
 
762
771
  This method retrieves the current readings and settings from the device, and
@@ -764,42 +773,70 @@ class CombinerLaserWidget(Tree):
764
773
  sets the limits of the power parameter based on the maximum power that can be
765
774
  set for the laser diode.
766
775
 
767
- If the laser is not connected, the method sets the 'Port State' parameter to
768
- 'closed'.
769
- """
776
+ If the laser is not connected, the method sets the "Port State" parameter to
777
+ "closed".
778
+ '''
770
779
  if self.Laser.isOpen():
771
- readings = self.Laser.GetReadings(False)
772
- settings = self.Laser.GetSettings(False)
773
- self.Laser.GetCurrent()
774
-
775
- for key, value in readings.items():
776
- if isinstance(value, (int, float)):
777
- self.set_param_value(key, f'{value:.2f}')
778
- elif isinstance(value, str):
779
- self.set_param_value(key, value)
780
-
781
- for key, value in settings.items():
782
- if isinstance(value, (int, float)):
783
- self.set_param_value(key, f'{value:.2f}')
784
- elif isinstance(value, str):
785
- self.set_param_value(key, value)
786
-
787
- self.set_param_value(
788
- MB_Params.LD_CURRENT,
789
- '{:.2f} mA, {:.2f} mA, {:.2f} mA, {:.2f} mA'.format(
790
- *self.Laser.Current
791
- ),
792
- )
793
- self.set_param_value(
794
- MB_Params.LD_CURRENT_MAX,
795
- '{:.2f} mA, {:.2f} mA, {:.2f} mA, {:.2f} mA'.format(*self.Laser.Max),
796
- )
797
- self.set_param_value(
798
- MB_Params.LD_CURRENT_SET,
799
- '{:.2f} mA, {:.2f} mA, {:.2f} mA, {:.2f} mA'.format(
800
- *self.Laser.Setting
801
- ),
802
- )
780
+
781
+ def fetch_stats():
782
+ '''
783
+ Fetches the current readings and settings from the laser device.
784
+ '''
785
+ try:
786
+ if self.Laser.isOpen():
787
+ readings = self.Laser.GetReadings(False)
788
+ settings = self.Laser.GetSettings(False)
789
+ self.Laser.GetCurrent()
790
+ return readings, settings
791
+ except Exception as e:
792
+ print(f'Error fetching stats: {e}')
793
+
794
+ return {}, {}
795
+
796
+ def done(readings: dict, settings: dict):
797
+ '''
798
+ Updates the parameter tree with the fetched readings and settings.
799
+ '''
800
+ if readings:
801
+ for key, value in readings.items():
802
+ if isinstance(value, (int, float)):
803
+ self.set_param_value(key, f'{value:.2f}')
804
+ elif isinstance(value, str):
805
+ self.set_param_value(key, value)
806
+
807
+ if settings:
808
+ for key, value in settings.items():
809
+ if isinstance(value, (int, float)):
810
+ self.set_param_value(key, f'{value:.2f}')
811
+ elif isinstance(value, str):
812
+ self.set_param_value(key, value)
813
+
814
+ self.set_param_value(
815
+ MB_Params.LD_CURRENT,
816
+ '{:.2f} mA, {:.2f} mA, {:.2f} mA, {:.2f} mA'.format(
817
+ *self.Laser.Current
818
+ ),
819
+ )
820
+ self.set_param_value(
821
+ MB_Params.LD_CURRENT_MAX,
822
+ '{:.2f} mA, {:.2f} mA, {:.2f} mA, {:.2f} mA'.format(
823
+ *self.Laser.Max
824
+ ),
825
+ )
826
+ self.set_param_value(
827
+ MB_Params.LD_CURRENT_SET,
828
+ '{:.2f} mA, {:.2f} mA, {:.2f} mA, {:.2f} mA'.format(
829
+ *self.Laser.Setting
830
+ ),
831
+ )
832
+
833
+ worker = QThreadWorker(fetch_stats)
834
+ worker.signals.result.connect(done)
835
+ worker.signals.finished.connect(
836
+ self.timer.start
837
+ ) # Restart the timer after fetching stats
838
+
839
+ QtCore.QThreadPool.globalInstance().start(worker)
803
840
 
804
841
  self.set_param_value(MB_Params.OPERATION_TIME, self.Laser.Operation_Time)
805
842
  self.set_param_value(MB_Params.ON_TIMES, self.Laser.ON_Times)
@@ -811,13 +848,13 @@ class CombinerLaserWidget(Tree):
811
848
  self.RefreshPorts()
812
849
 
813
850
  def RefreshPorts(self):
814
- """
851
+ '''
815
852
  Refreshes the available serial ports list in the GUI.
816
853
 
817
854
  This method updates the list of available serial ports in the GUI by fetching
818
855
  the current list of available ports and setting it as the options for the
819
- 'Serial Port' parameter in the parameter tree.
820
- """
856
+ `Serial Port` parameter in the parameter tree.
857
+ '''
821
858
  if not self.Laser.isOpen():
822
859
  self.get_param(MB_Params.PORT).setLimits(
823
860
  [