microeye 2.3.7__tar.gz → 2.3.9__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 (200) hide show
  1. {microeye-2.3.7/src/microeye.egg-info → microeye-2.3.9}/PKG-INFO +9 -9
  2. {microeye-2.3.7 → microeye-2.3.9}/README.md +8 -8
  3. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/_version.py +1 -1
  4. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/analysis/multi_viewer.py +64 -0
  5. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/analysis/viewer/localizations.py +29 -38
  6. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/hardware/lasers/io_matchbox.py +6 -5
  7. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/hardware/lasers/io_single_laser.py +5 -4
  8. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/hardware/pycromanager/core.py +461 -321
  9. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/hardware/pycromanager/devices.py +2 -1
  10. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/hardware/pycromanager/widgets/pycro_panel.py +27 -14
  11. {microeye-2.3.7 → microeye-2.3.9/src/microeye.egg-info}/PKG-INFO +9 -9
  12. {microeye-2.3.7 → microeye-2.3.9}/LICENSE +0 -0
  13. {microeye-2.3.7 → microeye-2.3.9}/MANIFEST.in +0 -0
  14. {microeye-2.3.7 → microeye-2.3.9}/pyproject.toml +0 -0
  15. {microeye-2.3.7 → microeye-2.3.9}/setup.cfg +0 -0
  16. {microeye-2.3.7 → microeye-2.3.9}/setup.py +0 -0
  17. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/__init__.py +0 -0
  18. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/analysis/__init__.py +0 -0
  19. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/analysis/checklist_dialog.py +0 -0
  20. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/analysis/cmosMaps.py +0 -0
  21. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/analysis/filters/__init__.py +0 -0
  22. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/analysis/filters/base.py +0 -0
  23. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/analysis/filters/spatial.py +0 -0
  24. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/analysis/filters/temporal.py +0 -0
  25. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/analysis/fitting/__init__.py +0 -0
  26. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/analysis/fitting/fit.py +0 -0
  27. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/analysis/fitting/nena.py +0 -0
  28. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/analysis/fitting/phasor_fit.py +0 -0
  29. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/analysis/fitting/processing.py +0 -0
  30. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/analysis/fitting/psf/__init__.py +0 -0
  31. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/analysis/fitting/psf/extract.py +0 -0
  32. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/analysis/fitting/psf/rubost_mean.py +0 -0
  33. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/analysis/fitting/psf/spline.py +0 -0
  34. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/analysis/fitting/psf/stats/__init__.py +0 -0
  35. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/analysis/fitting/psf/stats/core.py +0 -0
  36. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/analysis/fitting/psf/stats/curve_fit.py +0 -0
  37. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/analysis/fitting/psf/stats/io.py +0 -0
  38. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/analysis/fitting/psf/stats/slope_fit.py +0 -0
  39. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/analysis/fitting/psf/temp.py +0 -0
  40. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/analysis/fitting/psf/test.py +0 -0
  41. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/analysis/fitting/pyfit3Dcspline/CPU/CPUfunctions.py +0 -0
  42. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/analysis/fitting/pyfit3Dcspline/CPU/CPUmleFit_LM.py +0 -0
  43. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/analysis/fitting/pyfit3Dcspline/CPU/CPUsplineLib.py +0 -0
  44. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/analysis/fitting/pyfit3Dcspline/CPU/__init__.py +0 -0
  45. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/analysis/fitting/pyfit3Dcspline/GPU/GPUfunctions.py +0 -0
  46. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/analysis/fitting/pyfit3Dcspline/GPU/GPUmleFit_LM_EMCCD.py +0 -0
  47. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/analysis/fitting/pyfit3Dcspline/GPU/GPUmleFit_LM_sCMOS.py +0 -0
  48. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/analysis/fitting/pyfit3Dcspline/GPU/GPUsplineLib.py +0 -0
  49. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/analysis/fitting/pyfit3Dcspline/GPU/__init__.py +0 -0
  50. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/analysis/fitting/pyfit3Dcspline/__init__.py +0 -0
  51. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/analysis/fitting/pyfit3Dcspline/constants.py +0 -0
  52. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/analysis/fitting/pyfit3Dcspline/mainfunctions.py +0 -0
  53. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/analysis/fitting/results.py +0 -0
  54. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/analysis/fitting/results_stats.py +0 -0
  55. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/analysis/fitting/tardis.py +0 -0
  56. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/analysis/processing/__init__.py +0 -0
  57. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/analysis/processing/frc.py +0 -0
  58. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/analysis/rendering/__init__.py +0 -0
  59. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/analysis/rendering/base.py +0 -0
  60. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/analysis/rendering/cloud.py +0 -0
  61. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/analysis/rendering/core.py +0 -0
  62. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/analysis/rendering/volumetric.py +0 -0
  63. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/analysis/tools/__init__.py +0 -0
  64. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/analysis/tools/kymograms.py +0 -0
  65. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/analysis/tools/roi_selectors.py +0 -0
  66. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/analysis/utils/__init__.py +0 -0
  67. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/analysis/utils/coordinates.py +0 -0
  68. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/analysis/utils/images.py +0 -0
  69. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/analysis/utils/windows.py +0 -0
  70. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/analysis/viewer/__init__.py +0 -0
  71. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/analysis/viewer/image_options_widget.py +0 -0
  72. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/analysis/viewer/images.py +0 -0
  73. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/analysis/viewer/layers_widget.py +0 -0
  74. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/analysis/viewer/psf.py +0 -0
  75. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/analysis/viewer/volume.py +0 -0
  76. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/hardware/__init__.py +0 -0
  77. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/hardware/cams/__init__.py +0 -0
  78. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/hardware/cams/camera_calibration.py +0 -0
  79. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/hardware/cams/camera_list.py +0 -0
  80. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/hardware/cams/camera_options.py +0 -0
  81. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/hardware/cams/camera_panel.py +0 -0
  82. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/hardware/cams/dummy/__init__.py +0 -0
  83. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/hardware/cams/dummy/dummy_panel.py +0 -0
  84. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/hardware/cams/jobs.py +0 -0
  85. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/hardware/cams/line_profiler.py +0 -0
  86. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/hardware/cams/linescan/IR_Cam.py +0 -0
  87. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/hardware/cams/linescan/__init__.py +0 -0
  88. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/hardware/cams/micam.py +0 -0
  89. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/hardware/cams/pco/__init__.py +0 -0
  90. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/hardware/cams/pco/enums.py +0 -0
  91. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/hardware/cams/pco/pco_cam.py +0 -0
  92. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/hardware/cams/pco/pco_panel.py +0 -0
  93. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/hardware/cams/shortcuts.py +0 -0
  94. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/hardware/cams/thorlabs/__init__.py +0 -0
  95. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/hardware/cams/thorlabs/thorlabs.py +0 -0
  96. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/hardware/cams/thorlabs/thorlabs_panel.py +0 -0
  97. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/hardware/cams/ueye/__init__.py +0 -0
  98. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/hardware/cams/ueye/ueye_camera.py +0 -0
  99. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/hardware/cams/ueye/ueye_panel.py +0 -0
  100. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/hardware/cams/vimba/__init__.py +0 -0
  101. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/hardware/cams/vimba/vimba_cam.py +0 -0
  102. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/hardware/cams/vimba/vimba_panel.py +0 -0
  103. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/hardware/device.py +0 -0
  104. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/hardware/lasers/__init__.py +0 -0
  105. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/hardware/lasers/io_params.py +0 -0
  106. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/hardware/lasers/laser_relay.py +0 -0
  107. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/hardware/mieye/__init__.py +0 -0
  108. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/hardware/mieye/acquisition_manager.py +0 -0
  109. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/hardware/mieye/devices_manager.py +0 -0
  110. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/hardware/mieye/miEye.py +0 -0
  111. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/hardware/misc/__init__.py +0 -0
  112. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/hardware/misc/acquisition_view.py +0 -0
  113. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/hardware/misc/reglo.py +0 -0
  114. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/hardware/misc/temp.py +0 -0
  115. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/hardware/port_config.py +0 -0
  116. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/hardware/protocols/__init__.py +0 -0
  117. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/hardware/protocols/actions.py +0 -0
  118. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/hardware/protocols/actions_items.py +0 -0
  119. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/hardware/protocols/designer.py +0 -0
  120. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/hardware/protocols/scene_manager.py +0 -0
  121. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/hardware/protocols/serialization.py +0 -0
  122. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/hardware/pycromanager/__init__.py +0 -0
  123. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/hardware/pycromanager/enums.py +0 -0
  124. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/hardware/pycromanager/headless.py +0 -0
  125. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/hardware/pycromanager/utils.py +0 -0
  126. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/hardware/pycromanager/widgets/__init__.py +0 -0
  127. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/hardware/pycromanager/widgets/bridges.py +0 -0
  128. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/hardware/pycromanager/widgets/headless_manager.py +0 -0
  129. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/hardware/pycromanager/widgets/headless_options.py +0 -0
  130. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/hardware/stages/__init__.py +0 -0
  131. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/hardware/stages/elliptec/__init__.py +0 -0
  132. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/hardware/stages/elliptec/baseDevice.py +0 -0
  133. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/hardware/stages/elliptec/device.py +0 -0
  134. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/hardware/stages/elliptec/deviceID.py +0 -0
  135. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/hardware/stages/elliptec/devicePort.py +0 -0
  136. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/hardware/stages/elliptec/deviceStatus.py +0 -0
  137. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/hardware/stages/elliptec/devicesView.py +0 -0
  138. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/hardware/stages/elliptec/ellDevices.py +0 -0
  139. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/hardware/stages/elliptec/messageUpdater.py +0 -0
  140. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/hardware/stages/elliptec/motorInfo.py +0 -0
  141. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/hardware/stages/elliptec/stage.py +0 -0
  142. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/hardware/stages/elliptec/test.py +0 -0
  143. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/hardware/stages/kinesis/__init__.py +0 -0
  144. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/hardware/stages/kinesis/kdc101/__init__.py +0 -0
  145. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/hardware/stages/kinesis/kdc101/enums.py +0 -0
  146. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/hardware/stages/kinesis/kdc101/factory.py +0 -0
  147. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/hardware/stages/kinesis/kdc101/kdc101.py +0 -0
  148. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/hardware/stages/kinesis/kinesis.py +0 -0
  149. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/hardware/stages/piezo_concept.py +0 -0
  150. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/hardware/stages/stabilizer.py +0 -0
  151. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/hardware/stages/stage.py +0 -0
  152. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/hardware/widgets/__init__.py +0 -0
  153. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/hardware/widgets/controller.py +0 -0
  154. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/hardware/widgets/devices.py +0 -0
  155. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/hardware/widgets/focusWidget.py +0 -0
  156. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/hardware/widgets/qlist_slider.py +0 -0
  157. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/hardware/widgets/scan_acquisition.py +0 -0
  158. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/icons/1024.png +0 -0
  159. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/icons/128.png +0 -0
  160. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/icons/16.png +0 -0
  161. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/icons/24.png +0 -0
  162. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/icons/256.png +0 -0
  163. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/icons/32.png +0 -0
  164. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/icons/48.png +0 -0
  165. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/icons/512.png +0 -0
  166. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/icons/64.png +0 -0
  167. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/icons/__init__.py +0 -0
  168. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/icons/close.svg +0 -0
  169. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/icons/mieye.png +0 -0
  170. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/icons/min.svg +0 -0
  171. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/icons/viewer.png +0 -0
  172. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/launcher.py +0 -0
  173. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/qt.py +0 -0
  174. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/tools/__init__.py +0 -0
  175. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/tools/microscopy.py +0 -0
  176. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/utils/__init__.py +0 -0
  177. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/utils/display.py +0 -0
  178. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/utils/enum_encoder.py +0 -0
  179. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/utils/expandable_groupbox.py +0 -0
  180. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/utils/gui_helper.py +0 -0
  181. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/utils/hid_utils/__init__.py +0 -0
  182. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/utils/hid_utils/controller.py +0 -0
  183. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/utils/hid_utils/device.py +0 -0
  184. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/utils/hid_utils/enums.py +0 -0
  185. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/utils/hid_utils/utils.py +0 -0
  186. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/utils/labelled_slider.py +0 -0
  187. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/utils/metadata.py +0 -0
  188. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/utils/metadata_tree.py +0 -0
  189. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/utils/micro_launcher.py +0 -0
  190. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/utils/parameter_tree.py +0 -0
  191. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/utils/pyscripting.py +0 -0
  192. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/utils/retry_exec.py +0 -0
  193. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/utils/start_gui.py +0 -0
  194. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/utils/thread_worker.py +0 -0
  195. {microeye-2.3.7 → microeye-2.3.9}/src/microEye/utils/uImage.py +0 -0
  196. {microeye-2.3.7 → microeye-2.3.9}/src/microeye.egg-info/SOURCES.txt +0 -0
  197. {microeye-2.3.7 → microeye-2.3.9}/src/microeye.egg-info/dependency_links.txt +0 -0
  198. {microeye-2.3.7 → microeye-2.3.9}/src/microeye.egg-info/entry_points.txt +0 -0
  199. {microeye-2.3.7 → microeye-2.3.9}/src/microeye.egg-info/requires.txt +0 -0
  200. {microeye-2.3.7 → microeye-2.3.9}/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.7
3
+ Version: 2.3.9
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
@@ -70,6 +70,14 @@ The **`microEye`** is a Python toolkit for fluorescence microscopy that supports
70
70
 
71
71
  This toolkit is compatible with the [hardware](#hardware) used in our microscope. For further details, refer to the [miEye microscope paper](https://doi.org/10.1016/j.ohx.2022.e00368) and [OSF project](http://doi.org/10.17605/osf.io/j2fqy).
72
72
 
73
+ ```bash
74
+ __ __ _ ___ ___ ____ ___
75
+ | \/ (_)__ _ _ ___| __| _ ___ __ _|_ ) |__ // _ \
76
+ | |\/| | / _| '_/ _ \ _| || / -_) \ V // / _ |_ \\_, /
77
+ |_| |_|_\__|_| \___/___\_, \___| \_//___(_)___(_)_/
78
+ |__/
79
+ ```
80
+
73
81
  ![Package Health](https://snyk.io/advisor/python/microEye/badge.svg)
74
82
  ![Python Version](https://img.shields.io/badge/Python->=3.9_|_<3.12-blue)
75
83
  ![Package Version](https://img.shields.io/pypi/v/microEye.svg)
@@ -94,14 +102,6 @@ This toolkit is compatible with the [hardware](#hardware) used in our microscope
94
102
  ![GitHub Forks](https://img.shields.io/github/forks/samhitech/microEye.svg)
95
103
  ![GitHub Stars](https://img.shields.io/github/stars/samhitech/microEye.svg)
96
104
 
97
- ```bash
98
- __ ____ ____ ___ ____ ____
99
- / |/ (_)__________ / __/_ _____ _ __|_ | |_ //_ /
100
- / /|_/ / / __/ __/ _ \/ _// // / -_) | |/ / __/_ _/_ <_ / /
101
- /_/ /_/_/\__/_/ \___/___/\_, /\__/ |___/____(_)____(_)_/
102
- /___/
103
- ```
104
-
105
105
  ## Table of Contents
106
106
 
107
107
  - [The microEye](#the-microeye)
@@ -6,6 +6,14 @@ The **`microEye`** is a Python toolkit for fluorescence microscopy that supports
6
6
 
7
7
  This toolkit is compatible with the [hardware](#hardware) used in our microscope. For further details, refer to the [miEye microscope paper](https://doi.org/10.1016/j.ohx.2022.e00368) and [OSF project](http://doi.org/10.17605/osf.io/j2fqy).
8
8
 
9
+ ```bash
10
+ __ __ _ ___ ___ ____ ___
11
+ | \/ (_)__ _ _ ___| __| _ ___ __ _|_ ) |__ // _ \
12
+ | |\/| | / _| '_/ _ \ _| || / -_) \ V // / _ |_ \\_, /
13
+ |_| |_|_\__|_| \___/___\_, \___| \_//___(_)___(_)_/
14
+ |__/
15
+ ```
16
+
9
17
  ![Package Health](https://snyk.io/advisor/python/microEye/badge.svg)
10
18
  ![Python Version](https://img.shields.io/badge/Python->=3.9_|_<3.12-blue)
11
19
  ![Package Version](https://img.shields.io/pypi/v/microEye.svg)
@@ -30,14 +38,6 @@ This toolkit is compatible with the [hardware](#hardware) used in our microscope
30
38
  ![GitHub Forks](https://img.shields.io/github/forks/samhitech/microEye.svg)
31
39
  ![GitHub Stars](https://img.shields.io/github/stars/samhitech/microEye.svg)
32
40
 
33
- ```bash
34
- __ ____ ____ ___ ____ ____
35
- / |/ (_)__________ / __/_ _____ _ __|_ | |_ //_ /
36
- / /|_/ / / __/ __/ _ \/ _// // / -_) | |/ / __/_ _/_ <_ / /
37
- /_/ /_/_/\__/_/ \___/___/\_, /\__/ |___/____(_)____(_)_/
38
- /___/
39
- ```
40
-
41
41
  ## Table of Contents
42
42
 
43
43
  - [The microEye](#the-microeye)
@@ -1,2 +1,2 @@
1
- version_info = (2, 3, 7)
1
+ version_info = (2, 3, 9)
2
2
  __version__ = '.'.join(map(str, version_info))
@@ -203,6 +203,10 @@ class multi_viewer(QMainWindow):
203
203
  # Connect double-click signal to a method that uses QTimer
204
204
  self.tree.doubleClicked.connect(self._open_file)
205
205
 
206
+ # Create Tree view context menu
207
+ self.tree.setContextMenuPolicy(Qt.CustomContextMenu)
208
+ self.tree.customContextMenuRequested.connect(self._show_tree_context_menu)
209
+
206
210
  # Add the File system tab contents
207
211
  self.imsq_pattern = QtWidgets.QLineEdit('/image_0*.ome.tif')
208
212
 
@@ -210,6 +214,66 @@ class multi_viewer(QMainWindow):
210
214
  self.file_tree_layout.addWidget(self.imsq_pattern)
211
215
  self.file_tree_layout.addWidget(self.tree)
212
216
 
217
+ def _show_tree_context_menu(self, position):
218
+ index = self.tree.indexAt(position)
219
+ if not index.isValid():
220
+ return
221
+
222
+ menu = QtWidgets.QMenu()
223
+ reveal_action = menu.addAction('Reveal in Explorer')
224
+ new_folder_action = menu.addAction('New Folder')
225
+ menu.addSeparator()
226
+
227
+ # Root path shortcuts
228
+ root_action = menu.addAction('This PC (Root Path)')
229
+ home_action = menu.addAction('Home (User Directory)')
230
+ desktop_action = menu.addAction('Desktop')
231
+ initial_action = menu.addAction('Initial Path')
232
+ working_dir_action = menu.addAction('Working Directory')
233
+
234
+ action = menu.exec(self.tree.viewport().mapToGlobal(position))
235
+ if action == reveal_action:
236
+ path = self.model.filePath(index)
237
+ folder = path if os.path.isdir(path) else os.path.dirname(path)
238
+ os.startfile(folder)
239
+ elif action == new_folder_action:
240
+ self._create_new_folder()
241
+ elif action == home_action:
242
+ home = os.path.expanduser('~')
243
+ self.tree.setRootIndex(self.model.index(home))
244
+ elif action == desktop_action:
245
+ desktop = os.path.join(os.path.expanduser('~'), 'Desktop')
246
+ self.tree.setRootIndex(self.model.index(desktop))
247
+ elif action == root_action:
248
+ self.tree.setRootIndex(self.model.index(''))
249
+ elif action == initial_action:
250
+ self.tree.setRootIndex(self.model.index(self.path))
251
+ elif action == working_dir_action:
252
+ self.tree.setRootIndex(
253
+ self.model.index(os.path.dirname(os.path.abspath(__package__)))
254
+ )
255
+
256
+ def _create_new_folder(self):
257
+ index = self.tree.currentIndex()
258
+ if not index.isValid():
259
+ return
260
+
261
+ path = self.model.filePath(index)
262
+ if not os.path.isdir(path):
263
+ path = os.path.dirname(path)
264
+
265
+ new_folder_name, ok = QtWidgets.QInputDialog.getText(
266
+ self, 'New Folder', 'Enter folder name:'
267
+ )
268
+ if ok and new_folder_name:
269
+ new_folder_path = os.path.join(path, new_folder_name)
270
+ try:
271
+ os.makedirs(new_folder_path)
272
+ except OSError as e:
273
+ QtWidgets.QMessageBox.critical(
274
+ self, 'Error', f'Could not create folder: {e}'
275
+ )
276
+
213
277
  def tabifyDocks(self):
214
278
  # Tabify docks
215
279
  pass
@@ -285,23 +285,25 @@ class LocalizationsView(QtWidgets.QWidget):
285
285
  ndarray or None
286
286
  Rendered super-res image or None.
287
287
  '''
288
- for idx, localizations in enumerate(self.fittingResults):
289
- if localizations is None:
290
- continue
288
+ if not self.fittingResults:
289
+ return
291
290
 
292
- if len(localizations) <= 0:
293
- continue
291
+ images = [None] * len(self.fittingResults)
294
292
 
295
- render_idx = self.render_cbox.currentData()
296
- projection = self.projection_cbox.currentData()
293
+ render_idx = self.render_cbox.currentData()
294
+ projection = self.projection_cbox.currentData()
295
+ xy_bin = self.xy_binsize.value()
296
+ z_bin = self.z_binsize.value()
297
+ auto_levels = self.auto_level.isChecked()
298
+
299
+ renderer = BaseRenderer(xy_bin, z_bin, RenderModes(render_idx))
300
+
301
+ for idx, localizations in enumerate(self.fittingResults):
302
+ if not localizations or len(localizations) <= 0:
303
+ continue
297
304
 
298
- renderClass = BaseRenderer(
299
- self.xy_binsize.value(),
300
- self.z_binsize.value(),
301
- RenderModes(render_idx),
302
- )
303
305
  if 0 <= projection < 3:
304
- img = renderClass.render(
306
+ rendered_img = renderer.render(
305
307
  Projection(projection),
306
308
  localizations.data[DataColumns.X],
307
309
  localizations.data[DataColumns.Y],
@@ -309,29 +311,15 @@ class LocalizationsView(QtWidgets.QWidget):
309
311
  localizations.data[DataColumns.INTENSITY],
310
312
  )
311
313
 
312
- self.setImage(
313
- img, index=idx, autoLevels=self.auto_level.isChecked()
314
- )
315
-
316
- if projection == 0:
317
- self.view_box.setAspectLocked(True, 1)
318
- else:
319
- self.view_box.setAspectLocked(
320
- True, self.xy_binsize.value() / self.z_binsize.value()
321
- )
314
+ aspect = 1 if projection == 0 else xy_bin / z_bin
315
+ self.view_box.setAspectLocked(True, aspect)
322
316
  elif 3 <= projection < 6:
323
- projection -= 3
324
-
325
- if projection == 0:
326
- self.view_box.setAspectLocked(True, 1)
327
- width = self.z_binsize.value()
328
- else:
329
- self.view_box.setAspectLocked(
330
- True, self.xy_binsize.value() / self.z_binsize.value()
331
- )
332
- width = self.xy_binsize.value()
317
+ slice_proj = projection - 3
318
+ aspect = 1 if slice_proj == 0 else xy_bin / z_bin
319
+ self.view_box.setAspectLocked(True, aspect)
320
+ width = z_bin if slice_proj == 0 else xy_bin
333
321
 
334
- img = renderClass.render_slice(
322
+ rendered_img = renderer.render_slice(
335
323
  Projection(projection),
336
324
  localizations.data[DataColumns.X],
337
325
  localizations.data[DataColumns.Y],
@@ -340,10 +328,13 @@ class LocalizationsView(QtWidgets.QWidget):
340
328
  self.position.value(),
341
329
  width,
342
330
  )
331
+ else:
332
+ continue
343
333
 
344
- self.setImage(
345
- img, index=idx, autoLevels=self.auto_level.isChecked()
346
- )
334
+ self.setImage(rendered_img, index=idx, autoLevels=auto_levels)
335
+ images[idx] = rendered_img
336
+
337
+ return images
347
338
 
348
339
  def extract_z(self):
349
340
  '''Extract Z values from the fitting results.'''
@@ -1276,7 +1267,7 @@ class LocalizationsView(QtWidgets.QWidget):
1276
1267
  )
1277
1268
 
1278
1269
  if 'Super-res image' in options:
1279
- sres_img = self.render_loc()
1270
+ sres_img = self.render_loc()[self.image_layers.currentIndex]
1280
1271
  tf.imwrite(
1281
1272
  re.sub(r'(\.h5|\.tsv)$', '_super_res.tif', filename),
1282
1273
  sres_img,
@@ -74,7 +74,7 @@ class io_combiner(QtCore.QObject):
74
74
  '''TBA
75
75
  '''
76
76
 
77
- DataReady = Signal(str, bytes)
77
+ DataReady = Signal(object, bytes)
78
78
 
79
79
  Max_Power = 0.0
80
80
 
@@ -133,10 +133,8 @@ class io_combiner(QtCore.QObject):
133
133
 
134
134
  self.ser = serial.Serial(
135
135
  baudrate=kwargs.get('baudrate', 115200), # Default baudrate
136
- port=kwargs.get('port', 'COM1'), # Default port
137
136
  timeout=kwargs.get('timeout', 0.5), # Default timeout
138
137
  write_timeout=kwargs.get('write_timeout', 0.5), # Default write timeout
139
- open=False, # Start with the port closed
140
138
  )
141
139
 
142
140
  self._lock = threading.Lock() # Add this line
@@ -740,6 +738,8 @@ class CombinerLaserWidget(Tree):
740
738
  self.set_param_value(MB_Params.FIRMWARE, self.Laser.Firmware)
741
739
  self.set_param_value(MB_Params.SERIAL, self.Laser.Serial)
742
740
 
741
+ self.timer.start() # Start the timer to update stats
742
+
743
743
  if not self._laserSwitches:
744
744
  for idx in range(len(self.Laser.Wavelengths)):
745
745
  if self.Laser.Wavelengths[idx] > 0:
@@ -778,7 +778,7 @@ class CombinerLaserWidget(Tree):
778
778
  '''
779
779
  if self.Laser.isOpen():
780
780
 
781
- def fetch_stats():
781
+ def fetch_stats(event):
782
782
  '''
783
783
  Fetches the current readings and settings from the laser device.
784
784
  '''
@@ -793,10 +793,11 @@ class CombinerLaserWidget(Tree):
793
793
 
794
794
  return {}, {}
795
795
 
796
- def done(readings: dict, settings: dict):
796
+ def done(result: tuple[dict, dict]):
797
797
  '''
798
798
  Updates the parameter tree with the fetched readings and settings.
799
799
  '''
800
+ readings, settings = result
800
801
  if readings:
801
802
  for key, value in readings.items():
802
803
  if isinstance(value, (int, float)):
@@ -103,10 +103,8 @@ class io_single_laser(QtCore.QObject):
103
103
 
104
104
  self.ser = serial.Serial(
105
105
  baudrate=kwargs.get('baudrate', 115200), # Default baudrate
106
- port=kwargs.get('port', 'COM1'), # Default port
107
106
  timeout=kwargs.get('timeout', 0.5), # Default timeout
108
107
  write_timeout=kwargs.get('write_timeout', 0.5), # Default write timeout
109
- open=False, # Start with the port closed
110
108
  )
111
109
 
112
110
  self._lock = threading.Lock() # Add this line
@@ -718,6 +716,8 @@ class SingleMatchBox(Tree):
718
716
  self.set_param_value(MB_Params.FIRMWARE, self.Laser.Firmware)
719
717
  self.set_param_value(MB_Params.SERIAL, self.Laser.Serial)
720
718
 
719
+ self.timer.start()
720
+
721
721
  def update_stats(self):
722
722
  '''
723
723
  Updates the statistics displayed in the MatchBox GUI.
@@ -732,7 +732,7 @@ class SingleMatchBox(Tree):
732
732
  '''
733
733
  if self.Laser.isOpen():
734
734
 
735
- def fetch_stats():
735
+ def fetch_stats(event):
736
736
  '''
737
737
  Fetches the current readings and settings from the laser device.
738
738
  '''
@@ -746,10 +746,11 @@ class SingleMatchBox(Tree):
746
746
 
747
747
  return {}, {}
748
748
 
749
- def done(readings: dict, settings: dict):
749
+ def done(result: tuple[dict, dict]):
750
750
  '''
751
751
  Updates the parameter tree with the fetched readings and settings.
752
752
  '''
753
+ readings, settings = result
753
754
  if readings:
754
755
  for key, value in readings.items():
755
756
  if isinstance(value, (int, float)):