microeye 2.4.4__tar.gz → 2.4.6__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 (260) hide show
  1. {microeye-2.4.4/src/microeye.egg-info → microeye-2.4.6}/PKG-INFO +35 -29
  2. {microeye-2.4.4 → microeye-2.4.6}/README.md +33 -27
  3. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/_version.py +1 -1
  4. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/clustering/dbscan.py +177 -7
  5. microeye-2.4.6/src/microEye/analysis/clustering/density.py +730 -0
  6. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/clustering/plot.py +274 -14
  7. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/clustering/rulers.py +72 -8
  8. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/filters/base.py +50 -0
  9. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/filters/spatial.py +77 -50
  10. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/fitting/fit.py +120 -80
  11. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/fitting/psf/extract.py +2 -2
  12. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/fitting/psf/spline.py +38 -21
  13. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/fitting/results.py +138 -65
  14. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/multi_viewer.py +1 -1
  15. microeye-2.4.6/src/microEye/analysis/processing/frc.py +203 -0
  16. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/rendering/base.py +1 -1
  17. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/rendering/cloud.py +5 -5
  18. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/rendering/volumetric.py +5 -5
  19. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/tools/batch.py +235 -13
  20. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/tools/kymograms.py +29 -1
  21. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/viewer/image_options_widget.py +28 -11
  22. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/viewer/images.py +92 -117
  23. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/viewer/localizations.py +299 -98
  24. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/cams/basler/basler_cam.py +4 -0
  25. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/cams/basler/basler_panel.py +1 -1
  26. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/cams/camera_list.py +9 -0
  27. microeye-2.4.6/src/microEye/hardware/cams/dcam/dcam.py +1970 -0
  28. microeye-2.4.6/src/microEye/hardware/cams/dcam/dcam_panel.py +307 -0
  29. microeye-2.4.6/src/microEye/hardware/cams/dcam/dcamapi4.py +1914 -0
  30. microeye-2.4.6/src/microEye/hardware/cams/dcam/funcs.py +247 -0
  31. microeye-2.4.6/src/microEye/hardware/cams/dcam/meta.py +117 -0
  32. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/cams/peak/peak_camera.py +2 -2
  33. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/cams/vimba/vimba_panel.py +2 -2
  34. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/pycromanager/core.py +2 -2
  35. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/stages/elliptec/devicePort.py +2 -1
  36. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/stages/stabilization/methods.py +1 -1
  37. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/images/zarr.py +3 -3
  38. microeye-2.4.6/src/microEye/tools/__init__.py +0 -0
  39. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/utils/gui_helper.py +26 -0
  40. {microeye-2.4.4 → microeye-2.4.6/src/microeye.egg-info}/PKG-INFO +35 -29
  41. {microeye-2.4.4 → microeye-2.4.6}/src/microeye.egg-info/SOURCES.txt +7 -0
  42. {microeye-2.4.4 → microeye-2.4.6}/src/microeye.egg-info/requires.txt +1 -1
  43. microeye-2.4.4/src/microEye/analysis/processing/frc.py +0 -120
  44. {microeye-2.4.4 → microeye-2.4.6}/LICENSE +0 -0
  45. {microeye-2.4.4 → microeye-2.4.6}/MANIFEST.in +0 -0
  46. {microeye-2.4.4 → microeye-2.4.6}/pyproject.toml +0 -0
  47. {microeye-2.4.4 → microeye-2.4.6}/setup.cfg +0 -0
  48. {microeye-2.4.4 → microeye-2.4.6}/setup.py +0 -0
  49. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/__init__.py +0 -0
  50. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/__init__.py +0 -0
  51. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/checklist_dialog.py +0 -0
  52. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/clustering/__init__.py +0 -0
  53. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/cmosMaps.py +0 -0
  54. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/file_system.py +0 -0
  55. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/filters/__init__.py +0 -0
  56. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/filters/temporal.py +0 -0
  57. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/fitting/__init__.py +0 -0
  58. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/fitting/aim.py +0 -0
  59. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/fitting/nena.py +0 -0
  60. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/fitting/phasor_fit.py +0 -0
  61. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/fitting/processing.py +0 -0
  62. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/fitting/psf/__init__.py +0 -0
  63. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/fitting/psf/rubost_mean.py +0 -0
  64. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/fitting/psf/stats/__init__.py +0 -0
  65. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/fitting/psf/stats/core.py +0 -0
  66. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/fitting/psf/stats/curve_fit.py +0 -0
  67. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/fitting/psf/stats/io.py +0 -0
  68. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/fitting/psf/stats/slope_fit.py +0 -0
  69. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/fitting/psf/temp.py +0 -0
  70. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/fitting/psf/test.py +0 -0
  71. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/fitting/pyfit3Dcspline/CPU/CPUfunctions.py +0 -0
  72. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/fitting/pyfit3Dcspline/CPU/CPUmleFit_LM.py +0 -0
  73. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/fitting/pyfit3Dcspline/CPU/CPUsplineLib.py +0 -0
  74. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/fitting/pyfit3Dcspline/CPU/__init__.py +0 -0
  75. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/fitting/pyfit3Dcspline/GPU/GPUfunctions.py +0 -0
  76. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/fitting/pyfit3Dcspline/GPU/GPUmleFit_LM_EMCCD.py +0 -0
  77. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/fitting/pyfit3Dcspline/GPU/GPUmleFit_LM_sCMOS.py +0 -0
  78. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/fitting/pyfit3Dcspline/GPU/GPUsplineLib.py +0 -0
  79. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/fitting/pyfit3Dcspline/GPU/__init__.py +0 -0
  80. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/fitting/pyfit3Dcspline/__init__.py +0 -0
  81. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/fitting/pyfit3Dcspline/constants.py +0 -0
  82. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/fitting/pyfit3Dcspline/mainfunctions.py +0 -0
  83. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/fitting/rcc.py +0 -0
  84. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/fitting/results_stats.py +0 -0
  85. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/fitting/tardis.py +0 -0
  86. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/processing/__init__.py +0 -0
  87. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/rendering/__init__.py +0 -0
  88. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/rendering/core.py +0 -0
  89. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/tools/__init__.py +0 -0
  90. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/tools/common.py +0 -0
  91. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/tools/dark_cal/__init__.py +0 -0
  92. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/tools/dark_cal/analysis.py +0 -0
  93. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/tools/dark_cal/compare.py +0 -0
  94. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/tools/dark_cal/constants.py +0 -0
  95. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/tools/dark_cal/core.py +0 -0
  96. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/tools/dark_cal/io.py +0 -0
  97. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/tools/dark_cal/plotting.py +0 -0
  98. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/tools/photon_cal/__init__.py +0 -0
  99. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/tools/photon_cal/analysis.py +0 -0
  100. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/tools/photon_cal/compare.py +0 -0
  101. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/tools/photon_cal/constants.py +0 -0
  102. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/tools/photon_cal/core.py +0 -0
  103. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/tools/photon_cal/io.py +0 -0
  104. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/tools/photon_cal/models.py +0 -0
  105. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/tools/photon_cal/plotting.py +0 -0
  106. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/tools/photon_cal/table.py +0 -0
  107. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/tools/registration.py +0 -0
  108. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/tools/roi_selectors.py +0 -0
  109. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/tools/sphere_cal.py +0 -0
  110. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/utils/__init__.py +0 -0
  111. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/utils/coordinates.py +0 -0
  112. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/utils/images.py +0 -0
  113. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/utils/windows.py +0 -0
  114. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/viewer/__init__.py +0 -0
  115. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/viewer/layers_widget.py +0 -0
  116. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/viewer/psf.py +0 -0
  117. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/viewer/volume.py +0 -0
  118. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/__init__.py +0 -0
  119. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/cams/__init__.py +0 -0
  120. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/cams/basler/__init__.py +0 -0
  121. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/cams/camera_calibration.py +0 -0
  122. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/cams/camera_options.py +0 -0
  123. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/cams/camera_panel.py +0 -0
  124. {microeye-2.4.4/src/microEye/hardware/misc → microeye-2.4.6/src/microEye/hardware/cams/dcam}/__init__.py +0 -0
  125. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/cams/dummy/__init__.py +0 -0
  126. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/cams/dummy/dummy_panel.py +0 -0
  127. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/cams/jobs.py +0 -0
  128. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/cams/line_profiler.py +0 -0
  129. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/cams/linescan/IR_Cam.py +0 -0
  130. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/cams/linescan/__init__.py +0 -0
  131. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/cams/micam.py +0 -0
  132. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/cams/pco/__init__.py +0 -0
  133. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/cams/pco/enums.py +0 -0
  134. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/cams/pco/pco_cam.py +0 -0
  135. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/cams/pco/pco_panel.py +0 -0
  136. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/cams/peak/__init__.py +0 -0
  137. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/cams/peak/peak_panel.py +0 -0
  138. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/cams/pycromanager/__init__.py +0 -0
  139. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/cams/pycromanager/pycro_cam.py +0 -0
  140. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/cams/pycromanager/pycro_panel.py +0 -0
  141. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/cams/shortcuts.py +0 -0
  142. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/cams/thorlabs/__init__.py +0 -0
  143. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/cams/thorlabs/thorlabs.py +0 -0
  144. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/cams/thorlabs/thorlabs_panel.py +0 -0
  145. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/cams/ueye/__init__.py +0 -0
  146. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/cams/ueye/ueye_camera.py +0 -0
  147. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/cams/ueye/ueye_panel.py +0 -0
  148. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/cams/vimba/__init__.py +0 -0
  149. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/cams/vimba/vimba_cam.py +0 -0
  150. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/device.py +0 -0
  151. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/lasers/__init__.py +0 -0
  152. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/lasers/io_matchbox.py +0 -0
  153. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/lasers/io_params.py +0 -0
  154. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/lasers/io_single_laser.py +0 -0
  155. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/lasers/laser_relay.py +0 -0
  156. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/mieye/__init__.py +0 -0
  157. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/mieye/acquisition_manager.py +0 -0
  158. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/mieye/devices_manager.py +0 -0
  159. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/mieye/miEye.py +0 -0
  160. {microeye-2.4.4/src/microEye/hardware/protocols → microeye-2.4.6/src/microEye/hardware/misc}/__init__.py +0 -0
  161. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/misc/acquisition_view.py +0 -0
  162. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/misc/reglo.py +0 -0
  163. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/misc/temp.py +0 -0
  164. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/port_config.py +0 -0
  165. {microeye-2.4.4/src/microEye/hardware/stages → microeye-2.4.6/src/microEye/hardware/protocols}/__init__.py +0 -0
  166. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/protocols/actions.py +0 -0
  167. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/protocols/actions_items.py +0 -0
  168. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/protocols/designer.py +0 -0
  169. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/protocols/scene_manager.py +0 -0
  170. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/protocols/serialization.py +0 -0
  171. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/pycromanager/__init__.py +0 -0
  172. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/pycromanager/devices.py +0 -0
  173. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/pycromanager/enums.py +0 -0
  174. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/pycromanager/headless.py +0 -0
  175. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/pycromanager/utils.py +0 -0
  176. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/pycromanager/widgets/__init__.py +0 -0
  177. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/pycromanager/widgets/bridges.py +0 -0
  178. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/pycromanager/widgets/headless_manager.py +0 -0
  179. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/pycromanager/widgets/headless_options.py +0 -0
  180. {microeye-2.4.4/src/microEye/hardware/stages/stabilization → microeye-2.4.6/src/microEye/hardware/stages}/__init__.py +0 -0
  181. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/stages/elliptec/__init__.py +0 -0
  182. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/stages/elliptec/baseDevice.py +0 -0
  183. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/stages/elliptec/device.py +0 -0
  184. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/stages/elliptec/deviceID.py +0 -0
  185. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/stages/elliptec/deviceStatus.py +0 -0
  186. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/stages/elliptec/devicesView.py +0 -0
  187. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/stages/elliptec/ellDevices.py +0 -0
  188. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/stages/elliptec/messageUpdater.py +0 -0
  189. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/stages/elliptec/motorInfo.py +0 -0
  190. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/stages/elliptec/stage.py +0 -0
  191. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/stages/elliptec/test.py +0 -0
  192. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/stages/kinesis/__init__.py +0 -0
  193. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/stages/kinesis/kdc101/__init__.py +0 -0
  194. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/stages/kinesis/kdc101/enums.py +0 -0
  195. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/stages/kinesis/kdc101/factory.py +0 -0
  196. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/stages/kinesis/kdc101/kdc101.py +0 -0
  197. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/stages/kinesis/kinesis.py +0 -0
  198. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/stages/manager.py +0 -0
  199. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/stages/piezon_concept/__init__.py +0 -0
  200. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/stages/piezon_concept/foc.py +0 -0
  201. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/stages/pycromanager/__init__.py +0 -0
  202. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/stages/pycromanager/core.py +0 -0
  203. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/stages/smaract/__init__.py +0 -0
  204. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/stages/smaract/mcs2.py +0 -0
  205. {microeye-2.4.4/src/microEye/icons → microeye-2.4.6/src/microEye/hardware/stages/stabilization}/__init__.py +0 -0
  206. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/stages/stabilization/controller.py +0 -0
  207. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/stages/stabilizer.py +0 -0
  208. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/stages/stage.py +0 -0
  209. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/stages/view.py +0 -0
  210. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/widgets/__init__.py +0 -0
  211. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/widgets/controller.py +0 -0
  212. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/widgets/devices.py +0 -0
  213. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/widgets/focusWidget.py +0 -0
  214. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/widgets/indicator.py +0 -0
  215. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/widgets/qlist_slider.py +0 -0
  216. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/widgets/scan_acquisition.py +0 -0
  217. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/widgets/slides.py +0 -0
  218. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/icons/1024.png +0 -0
  219. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/icons/128.png +0 -0
  220. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/icons/16.png +0 -0
  221. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/icons/24.png +0 -0
  222. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/icons/256.png +0 -0
  223. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/icons/32.png +0 -0
  224. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/icons/48.png +0 -0
  225. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/icons/512.png +0 -0
  226. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/icons/64.png +0 -0
  227. {microeye-2.4.4/src/microEye/tools → microeye-2.4.6/src/microEye/icons}/__init__.py +0 -0
  228. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/icons/close.svg +0 -0
  229. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/icons/mieye.png +0 -0
  230. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/icons/min.svg +0 -0
  231. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/icons/viewer.png +0 -0
  232. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/images/__init__.py +0 -0
  233. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/images/handlers.py +0 -0
  234. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/images/uImage.py +0 -0
  235. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/launcher.py +0 -0
  236. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/qt.py +0 -0
  237. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/tools/color.py +0 -0
  238. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/tools/microscopy.py +0 -0
  239. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/utils/__init__.py +0 -0
  240. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/utils/display.py +0 -0
  241. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/utils/enum_encoder.py +0 -0
  242. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/utils/expandable_groupbox.py +0 -0
  243. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/utils/hid_utils/__init__.py +0 -0
  244. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/utils/hid_utils/controller.py +0 -0
  245. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/utils/hid_utils/device.py +0 -0
  246. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/utils/hid_utils/enums.py +0 -0
  247. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/utils/hid_utils/utils.py +0 -0
  248. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/utils/labelled_slider.py +0 -0
  249. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/utils/metadata.py +0 -0
  250. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/utils/metadata_tree.py +0 -0
  251. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/utils/micro_launcher.py +0 -0
  252. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/utils/parameter_tree.py +0 -0
  253. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/utils/pyqt2mplt.py +0 -0
  254. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/utils/pyscripting.py +0 -0
  255. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/utils/retry_exec.py +0 -0
  256. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/utils/start_gui.py +0 -0
  257. {microeye-2.4.4 → microeye-2.4.6}/src/microEye/utils/thread_worker.py +0 -0
  258. {microeye-2.4.4 → microeye-2.4.6}/src/microeye.egg-info/dependency_links.txt +0 -0
  259. {microeye-2.4.4 → microeye-2.4.6}/src/microeye.egg-info/entry_points.txt +0 -0
  260. {microeye-2.4.4 → microeye-2.4.6}/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.4.4
3
+ Version: 2.4.6
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
@@ -43,7 +43,7 @@ Requires-Dist: pyueye==4.96.952
43
43
  Requires-Dist: QDarkStyle==3.2.3
44
44
  Requires-Dist: QScintilla==2.14.1
45
45
  Requires-Dist: scikit-image==0.25.2
46
- Requires-Dist: scikit_learn==1.7.2
46
+ Requires-Dist: scikit_learn==1.9.0
47
47
  Requires-Dist: scipy>=1.16.2
48
48
  Requires-Dist: setuptools>=80.9.0
49
49
  Requires-Dist: tables==3.10.2
@@ -65,20 +65,20 @@ Dynamic: summary
65
65
 
66
66
  # The microEye
67
67
 
68
- ![microEye](https://github.com/samhitech/microEye/assets/89871015/37ca0859-0b4b-402d-8652-9a01d0bf0f29)
68
+ <!-- ![microEye](https://github.com/samhitech/microEye/assets/89871015/37ca0859-0b4b-402d-8652-9a01d0bf0f29) -->
69
+
70
+ ```bash
71
+ __ ____ ____ ___ ____ ____
72
+ / |/ (_)__________ / __/_ _____ _ __|_ |/ / / / __/
73
+ / /|_/ / / __/ __/ _ \/ _// // / -_) | |/ / __//_ _// _ \
74
+ /_/ /_/_/\__/_/ \___/___/\_, /\__/ |___/____(_)_/(_)___/
75
+ /___/
76
+ ```
69
77
 
70
78
  The **`microEye`** is a Python toolkit for fluorescence microscopy that supports super-resolution single-molecule localization microscopy and single-particle tracking. It features hardware control, data analysis, and visualization.
71
79
 
72
80
  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).
73
81
 
74
- ```bash
75
- __ ____ ____ ___ ____ ____
76
- / |/ (_)__________ / __/_ _____ _ __|_ |/ / // / /
77
- / /|_/ / / __/ __/ _ \/ _// // / -_) | |/ / __//_ _/_ _/
78
- /_/ /_/_/\__/_/ \___/___/\_, /\__/ |___/____(_)_/(_)_/
79
- /___/
80
- ```
81
-
82
82
  <!-- ![Package Health](https://snyk.io/advisor/python/microEye/badge.svg) -->
83
83
 
84
84
  ![Python Version](https://img.shields.io/badge/Python-3.11-blue)
@@ -88,7 +88,8 @@ This toolkit is compatible with the [hardware](#hardware) used in our microscope
88
88
  ![Package Version](https://img.shields.io/badge/Windows-Tested-cyan)
89
89
  ![Package Version](https://img.shields.io/badge/MacOS-Errors-red)
90
90
  ![Package Version](https://img.shields.io/badge/Linux-NotTested-lightgray)
91
- ![Downloads](https://img.shields.io/pypi/dm/microEye.svg)
91
+
92
+ <!-- ![Downloads](https://img.shields.io/pypi/dm/microEye.svg) -->
92
93
 
93
94
  <!-- ![Dependencies](https://img.shields.io/librariesio/release/pypi/microEye) -->
94
95
 
@@ -160,6 +161,7 @@ This toolkit is compatible with the [hardware](#hardware) used in our microscope
160
161
  Cameras from Basler, Allied Vision (Vimba X SDK), IDS Peak, Thorlabs,
161
162
  PCO, and PycroManager now share unified ROI, exposure, and framerate
162
163
  handling. Notable additions:
164
+ - **DCAM API v4 Support**: Full support for Hamamatsu sCMOS cameras via the DCAM API v4, tested with the ORCA-Fusion BT.
163
165
  - **IDS Peak** is newly supported with binning, flash, and full ROI and
164
166
  acquisition flow.
165
167
  - **Basler** is newly supported.
@@ -304,28 +306,28 @@ This toolkit is compatible with the [hardware](#hardware) used in our microscope
304
306
  >
305
307
  > _On Windows the `Vimba X installer` typically creates the `VIMBA_X_HOME` variable automatically — verify it before manually setting it._
306
308
 
307
- - Basler CMOS cameras: Install [`pylon`](https://www.baslerweb.com/en/downloads/software/?srsltid=AfmBOoqsMrbQT24hcWiCw-0ptD9PR7nCrPMBZSzi0YlI1CVItNQikMKW&downloadCategory.values.label.data=pylon) (_avoid installing it inside the Program Files directory_).
308
- - IDS CMOS cameras:
309
- - Install [`IDS Software Suite 4.96.1`](https://en.ids-imaging.com/download-details/AB00604.html?os=windows&version=win10&bus=64&floatcalc=) for Windows 32/64-bit.
310
- - Alternatively, [`IDS Peak Extended Setup`](https://en.ids-imaging.com/download-peak.html) is prefered as it support old uEye models and the new uEye+ ones.
309
+ - - Hamamatsu CMOS cameras: Install [`DCAM API v4`](https://www.hamamatsu.com/eu/en/product/cameras/software/driver-software/dcam-api-for-windows.html).
310
+ - Basler CMOS cameras: Install [`pylon`](https://www.baslerweb.com/en/downloads/software/?srsltid=AfmBOoqsMrbQT24hcWiCw-0ptD9PR7nCrPMBZSzi0YlI1CVItNQikMKW&downloadCategory.values.label.data=pylon) (_avoid installing it inside the Program Files directory_).
311
+ - IDS CMOS cameras:
312
+ - Install [`IDS Software Suite 4.96.1`](https://en.ids-imaging.com/download-details/AB00604.html?os=windows&version=win10&bus=64&floatcalc=) for Windows 32/64-bit.
313
+ - Alternatively, [`IDS Peak Extended Setup`](https://en.ids-imaging.com/download-peak.html) is prefered as it support old uEye models and the new uEye+ ones.
311
314
 
312
315
  > [!TIP]
313
316
  >
314
317
  > - _The installation package also includes the uEye camera drivers for UI models in addition to the standard setup. Therefore, no installation of the IDS Software Suite is required for the operation of UI models._
315
318
  > - _If the process cannot read the system-wide `GENICAM_GENTL_PATH`/`GENICAM_GENTL64_PATH`, add the same variable to your User environment variables (not just System) and restart any open terminals or applications for the change to take effect._
316
319
 
317
- - Integrated Optics Lasers: Install [`Laser control software`](https://integratedoptics.com/downloads).
318
-
319
- - PCO cameras: Install [`pco.sdk`, `pco.runtime`](https://www.excelitas.com/product/pco-software-development-kits).
320
+ - - Integrated Optics Lasers: Install [`Laser control software`](https://integratedoptics.com/downloads).
321
+ - PCO cameras: Install [`pco.sdk`, `pco.runtime`](https://www.excelitas.com/product/pco-software-development-kits).
320
322
 
321
323
  > [!NOTE]
322
324
  > **Support is under development.**
323
325
 
324
- - Thorlabs CMOS cameras: Install [`Thorcam`](https://www.thorlabs.com/software_pages/ViewSoftwarePage.cfm?Code=ThorCam) in its default directory. Note: Some Thorlabs cameras may be identified as IDS uEye cameras by Windows and may run without Thorcam.
326
+ - - Thorlabs CMOS cameras: Install [`Thorcam`](https://www.thorlabs.com/software_pages/ViewSoftwarePage.cfm?Code=ThorCam) in its default directory. Note: Some Thorlabs cameras may be identified as IDS uEye cameras by Windows and may run without Thorcam.
325
327
 
326
- - Thorlabs hardware, install [`Kinesis® Software`](https://www.thorlabs.com/newgrouppage9.cfm?objectgroup_id=10285) and [`Elliptec™ Software`](https://www.thorlabs.com/software_pages/ViewSoftwarePage.cfm?Code=ELL).
328
+ - Thorlabs hardware, install [`Kinesis® Software`](https://www.thorlabs.com/newgrouppage9.cfm?objectgroup_id=10285) and [`Elliptec™ Software`](https://www.thorlabs.com/software_pages/ViewSoftwarePage.cfm?Code=ELL).
327
329
 
328
- 4. **Open a terminal and execute microEye:** :partying_face:
330
+ 1. **Open a terminal and execute microEye:** :partying_face:
329
331
 
330
332
  ```powershell
331
333
  usage: microEye.exe [-h] [--module {mieye,viewer}] [--QT_API {PySide6,PyQt6,PyQt5}] [--theme {None,qdarktheme,qdarkstyle,...}]
@@ -478,13 +480,16 @@ Schematic overview of the miEye instrument:
478
480
 
479
481
  ### Supported Cameras
480
482
 
481
- | Camera | Description | Driver | Link |
482
- | :-----------------------: | ------------------------------------------------------------------------ | :----------------------------: | :-----------------------------------------------------------------------------------------------------------: |
483
- | IDS uEye UI-3060CP Rev. 2 | IDS industrial-grade CMOS cameras | `IDS uEye SDK 4.96.1` `pyueye` | [Product Link](https://en.ids-imaging.com/store/products/cameras/ui-3060cp-rev-2.html) |
484
- | Thorlabs DCC1545M | DCx camera using UC480 driver | `ThorCam 3.7.0` | [Product Link](https://www.thorlabs.com/thorProduct.cfm?partNumber=DCC1545M) |
485
- | Allied Vision Alvium 1800 | Allied Vision industrial-grade CMOS cameras (U-158m, U-511m) | `Vimba X SDK` `vmbpy` | [Product Link](https://www.alliedvision.com/en/products/alvium-configurator/alvium-1800-u/158/#_configurator) |
486
- | Excelitas PCO sCMOS | Excelitas pco.edge 4.2 LT USB sCMOS Camera | `pco.sdk` `pco.python` | [Product Link](https://www.excelitas.com/product/pcoedge-42-lt-usb-scmos-camera) |
487
- | Pycro-camera | Access to cameras via Micro-Manager drivers/adapters using Pycro-Manager | `uManager` `Pycro-Manager` | - |
483
+ | Camera | Description | Driver | Link |
484
+ | :-----------------------: | ------------------------------------------------------------------------ | :---------------------------------------: | :-----------------------------------------------------------------------------------------------------------: |
485
+ | Hamamatsu sCMOS | Hamamatsu sCMOS cameras (e.g., ORCA-Flash4.0 V3, ORCA-Fusion BT) | `DCAM API v4` | [Product Link](https://www.hamamatsu.com/eu/en/product/cameras/cmos-cameras/) |
486
+ | IDS uEye UI-3060CP Rev. 2 | IDS industrial-grade CMOS cameras | `IDS uEye SDK 4.96.1` `IDS Peak` `pyueye` | [Product Link](https://en.ids-imaging.com/store/products/cameras/ui-3060cp-rev-2.html) |
487
+ | Thorlabs DCC1545M | DCx camera using UC480 driver | `ThorCam 3.7.0` | [Product Link](https://www.thorlabs.com/thorProduct.cfm?partNumber=DCC1545M) |
488
+ | Allied Vision Alvium 1800 | Allied Vision industrial-grade CMOS cameras (U-158m, U-511m) | `Vimba X SDK` `vmbpy` | [Product Link](https://www.alliedvision.com/en/products/alvium-configurator/alvium-1800-u/158/#_configurator) |
489
+ | Basler ace 2 R PRO | Basler `pylon` supported cameras | `pylon` `pypylon` | - |
490
+ | Excelitas PCO sCMOS | Excelitas pco.edge 4.2 LT USB sCMOS Camera | `pco.sdk` `pco.python` | [Product Link](https://www.excelitas.com/product/pcoedge-42-lt-usb-scmos-camera) |
491
+ | Pycro-camera | Access to cameras via Micro-Manager drivers/adapters using Pycro-Manager | `uManager` `Pycro-Manager` | - |
492
+
488
493
 
489
494
  ### Additional Hardware
490
495
 
@@ -492,6 +497,7 @@ Schematic overview of the miEye instrument:
492
497
  | --------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------: | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: |
493
498
  | Integrated Optics MatchBox | Multi-wavelength Laser Combiner, Single Laser MatchBox | `Native` | [Products Link](https://integratedoptics.com/products/wavelength-combiners) |
494
499
  | Piezo Concept FOC | Nanopositioner for microscope objectives | `Native` | [Piezo Concept FOC](https://piezoconcept-store.squarespace.com/1-axis/p/foc) |
500
+ | SmarAct MCS2 | Support for SmarAct MCS2 multi-channel controllers | `Native` | - |
495
501
  | Thorlabs Elliptec ELL6/ELL9/ELL12 | Dual/Four/Six-Position Slider | `Native` | [ELL6](https://www.thorlabs.com/thorproduct.cfm?partnumber=ELL6), [ELL9](https://www.thorlabs.com/thorproduct.cfm?partnumber=ELL9), [ELL12](https://www.thorlabs.com/thorproduct.cfm?partnumber=ELL12) |
496
502
  | Thorlabs Elliptec ELL14 | Rotation Mount: SM1 Threaded | `Native` | [ELL14](https://www.thorlabs.com/thorproduct.cfm?partnumber=ELL14) |
497
503
  | Thorlabs Elliptec ELL20 | Linear Stage: 60 mm Travel | `Native` | [ELL20](https://www.thorlabs.com/thorproduct.cfm?partnumber=ELL20) |
@@ -1,19 +1,19 @@
1
1
  # The microEye
2
2
 
3
- ![microEye](https://github.com/samhitech/microEye/assets/89871015/37ca0859-0b4b-402d-8652-9a01d0bf0f29)
3
+ <!-- ![microEye](https://github.com/samhitech/microEye/assets/89871015/37ca0859-0b4b-402d-8652-9a01d0bf0f29) -->
4
+
5
+ ```bash
6
+ __ ____ ____ ___ ____ ____
7
+ / |/ (_)__________ / __/_ _____ _ __|_ |/ / / / __/
8
+ / /|_/ / / __/ __/ _ \/ _// // / -_) | |/ / __//_ _// _ \
9
+ /_/ /_/_/\__/_/ \___/___/\_, /\__/ |___/____(_)_/(_)___/
10
+ /___/
11
+ ```
4
12
 
5
13
  The **`microEye`** is a Python toolkit for fluorescence microscopy that supports super-resolution single-molecule localization microscopy and single-particle tracking. It features hardware control, data analysis, and visualization.
6
14
 
7
15
  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
16
 
9
- ```bash
10
- __ ____ ____ ___ ____ ____
11
- / |/ (_)__________ / __/_ _____ _ __|_ |/ / // / /
12
- / /|_/ / / __/ __/ _ \/ _// // / -_) | |/ / __//_ _/_ _/
13
- /_/ /_/_/\__/_/ \___/___/\_, /\__/ |___/____(_)_/(_)_/
14
- /___/
15
- ```
16
-
17
17
  <!-- ![Package Health](https://snyk.io/advisor/python/microEye/badge.svg) -->
18
18
 
19
19
  ![Python Version](https://img.shields.io/badge/Python-3.11-blue)
@@ -23,7 +23,8 @@ This toolkit is compatible with the [hardware](#hardware) used in our microscope
23
23
  ![Package Version](https://img.shields.io/badge/Windows-Tested-cyan)
24
24
  ![Package Version](https://img.shields.io/badge/MacOS-Errors-red)
25
25
  ![Package Version](https://img.shields.io/badge/Linux-NotTested-lightgray)
26
- ![Downloads](https://img.shields.io/pypi/dm/microEye.svg)
26
+
27
+ <!-- ![Downloads](https://img.shields.io/pypi/dm/microEye.svg) -->
27
28
 
28
29
  <!-- ![Dependencies](https://img.shields.io/librariesio/release/pypi/microEye) -->
29
30
 
@@ -95,6 +96,7 @@ This toolkit is compatible with the [hardware](#hardware) used in our microscope
95
96
  Cameras from Basler, Allied Vision (Vimba X SDK), IDS Peak, Thorlabs,
96
97
  PCO, and PycroManager now share unified ROI, exposure, and framerate
97
98
  handling. Notable additions:
99
+ - **DCAM API v4 Support**: Full support for Hamamatsu sCMOS cameras via the DCAM API v4, tested with the ORCA-Fusion BT.
98
100
  - **IDS Peak** is newly supported with binning, flash, and full ROI and
99
101
  acquisition flow.
100
102
  - **Basler** is newly supported.
@@ -239,28 +241,28 @@ This toolkit is compatible with the [hardware](#hardware) used in our microscope
239
241
  >
240
242
  > _On Windows the `Vimba X installer` typically creates the `VIMBA_X_HOME` variable automatically — verify it before manually setting it._
241
243
 
242
- - Basler CMOS cameras: Install [`pylon`](https://www.baslerweb.com/en/downloads/software/?srsltid=AfmBOoqsMrbQT24hcWiCw-0ptD9PR7nCrPMBZSzi0YlI1CVItNQikMKW&downloadCategory.values.label.data=pylon) (_avoid installing it inside the Program Files directory_).
243
- - IDS CMOS cameras:
244
- - Install [`IDS Software Suite 4.96.1`](https://en.ids-imaging.com/download-details/AB00604.html?os=windows&version=win10&bus=64&floatcalc=) for Windows 32/64-bit.
245
- - Alternatively, [`IDS Peak Extended Setup`](https://en.ids-imaging.com/download-peak.html) is prefered as it support old uEye models and the new uEye+ ones.
244
+ - - Hamamatsu CMOS cameras: Install [`DCAM API v4`](https://www.hamamatsu.com/eu/en/product/cameras/software/driver-software/dcam-api-for-windows.html).
245
+ - Basler CMOS cameras: Install [`pylon`](https://www.baslerweb.com/en/downloads/software/?srsltid=AfmBOoqsMrbQT24hcWiCw-0ptD9PR7nCrPMBZSzi0YlI1CVItNQikMKW&downloadCategory.values.label.data=pylon) (_avoid installing it inside the Program Files directory_).
246
+ - IDS CMOS cameras:
247
+ - Install [`IDS Software Suite 4.96.1`](https://en.ids-imaging.com/download-details/AB00604.html?os=windows&version=win10&bus=64&floatcalc=) for Windows 32/64-bit.
248
+ - Alternatively, [`IDS Peak Extended Setup`](https://en.ids-imaging.com/download-peak.html) is prefered as it support old uEye models and the new uEye+ ones.
246
249
 
247
250
  > [!TIP]
248
251
  >
249
252
  > - _The installation package also includes the uEye camera drivers for UI models in addition to the standard setup. Therefore, no installation of the IDS Software Suite is required for the operation of UI models._
250
253
  > - _If the process cannot read the system-wide `GENICAM_GENTL_PATH`/`GENICAM_GENTL64_PATH`, add the same variable to your User environment variables (not just System) and restart any open terminals or applications for the change to take effect._
251
254
 
252
- - Integrated Optics Lasers: Install [`Laser control software`](https://integratedoptics.com/downloads).
253
-
254
- - PCO cameras: Install [`pco.sdk`, `pco.runtime`](https://www.excelitas.com/product/pco-software-development-kits).
255
+ - - Integrated Optics Lasers: Install [`Laser control software`](https://integratedoptics.com/downloads).
256
+ - PCO cameras: Install [`pco.sdk`, `pco.runtime`](https://www.excelitas.com/product/pco-software-development-kits).
255
257
 
256
258
  > [!NOTE]
257
259
  > **Support is under development.**
258
260
 
259
- - Thorlabs CMOS cameras: Install [`Thorcam`](https://www.thorlabs.com/software_pages/ViewSoftwarePage.cfm?Code=ThorCam) in its default directory. Note: Some Thorlabs cameras may be identified as IDS uEye cameras by Windows and may run without Thorcam.
261
+ - - Thorlabs CMOS cameras: Install [`Thorcam`](https://www.thorlabs.com/software_pages/ViewSoftwarePage.cfm?Code=ThorCam) in its default directory. Note: Some Thorlabs cameras may be identified as IDS uEye cameras by Windows and may run without Thorcam.
260
262
 
261
- - Thorlabs hardware, install [`Kinesis® Software`](https://www.thorlabs.com/newgrouppage9.cfm?objectgroup_id=10285) and [`Elliptec™ Software`](https://www.thorlabs.com/software_pages/ViewSoftwarePage.cfm?Code=ELL).
263
+ - Thorlabs hardware, install [`Kinesis® Software`](https://www.thorlabs.com/newgrouppage9.cfm?objectgroup_id=10285) and [`Elliptec™ Software`](https://www.thorlabs.com/software_pages/ViewSoftwarePage.cfm?Code=ELL).
262
264
 
263
- 4. **Open a terminal and execute microEye:** :partying_face:
265
+ 1. **Open a terminal and execute microEye:** :partying_face:
264
266
 
265
267
  ```powershell
266
268
  usage: microEye.exe [-h] [--module {mieye,viewer}] [--QT_API {PySide6,PyQt6,PyQt5}] [--theme {None,qdarktheme,qdarkstyle,...}]
@@ -413,13 +415,16 @@ Schematic overview of the miEye instrument:
413
415
 
414
416
  ### Supported Cameras
415
417
 
416
- | Camera | Description | Driver | Link |
417
- | :-----------------------: | ------------------------------------------------------------------------ | :----------------------------: | :-----------------------------------------------------------------------------------------------------------: |
418
- | IDS uEye UI-3060CP Rev. 2 | IDS industrial-grade CMOS cameras | `IDS uEye SDK 4.96.1` `pyueye` | [Product Link](https://en.ids-imaging.com/store/products/cameras/ui-3060cp-rev-2.html) |
419
- | Thorlabs DCC1545M | DCx camera using UC480 driver | `ThorCam 3.7.0` | [Product Link](https://www.thorlabs.com/thorProduct.cfm?partNumber=DCC1545M) |
420
- | Allied Vision Alvium 1800 | Allied Vision industrial-grade CMOS cameras (U-158m, U-511m) | `Vimba X SDK` `vmbpy` | [Product Link](https://www.alliedvision.com/en/products/alvium-configurator/alvium-1800-u/158/#_configurator) |
421
- | Excelitas PCO sCMOS | Excelitas pco.edge 4.2 LT USB sCMOS Camera | `pco.sdk` `pco.python` | [Product Link](https://www.excelitas.com/product/pcoedge-42-lt-usb-scmos-camera) |
422
- | Pycro-camera | Access to cameras via Micro-Manager drivers/adapters using Pycro-Manager | `uManager` `Pycro-Manager` | - |
418
+ | Camera | Description | Driver | Link |
419
+ | :-----------------------: | ------------------------------------------------------------------------ | :---------------------------------------: | :-----------------------------------------------------------------------------------------------------------: |
420
+ | Hamamatsu sCMOS | Hamamatsu sCMOS cameras (e.g., ORCA-Flash4.0 V3, ORCA-Fusion BT) | `DCAM API v4` | [Product Link](https://www.hamamatsu.com/eu/en/product/cameras/cmos-cameras/) |
421
+ | IDS uEye UI-3060CP Rev. 2 | IDS industrial-grade CMOS cameras | `IDS uEye SDK 4.96.1` `IDS Peak` `pyueye` | [Product Link](https://en.ids-imaging.com/store/products/cameras/ui-3060cp-rev-2.html) |
422
+ | Thorlabs DCC1545M | DCx camera using UC480 driver | `ThorCam 3.7.0` | [Product Link](https://www.thorlabs.com/thorProduct.cfm?partNumber=DCC1545M) |
423
+ | Allied Vision Alvium 1800 | Allied Vision industrial-grade CMOS cameras (U-158m, U-511m) | `Vimba X SDK` `vmbpy` | [Product Link](https://www.alliedvision.com/en/products/alvium-configurator/alvium-1800-u/158/#_configurator) |
424
+ | Basler ace 2 R PRO | Basler `pylon` supported cameras | `pylon` `pypylon` | - |
425
+ | Excelitas PCO sCMOS | Excelitas pco.edge 4.2 LT USB sCMOS Camera | `pco.sdk` `pco.python` | [Product Link](https://www.excelitas.com/product/pcoedge-42-lt-usb-scmos-camera) |
426
+ | Pycro-camera | Access to cameras via Micro-Manager drivers/adapters using Pycro-Manager | `uManager` `Pycro-Manager` | - |
427
+
423
428
 
424
429
  ### Additional Hardware
425
430
 
@@ -427,6 +432,7 @@ Schematic overview of the miEye instrument:
427
432
  | --------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------: | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: |
428
433
  | Integrated Optics MatchBox | Multi-wavelength Laser Combiner, Single Laser MatchBox | `Native` | [Products Link](https://integratedoptics.com/products/wavelength-combiners) |
429
434
  | Piezo Concept FOC | Nanopositioner for microscope objectives | `Native` | [Piezo Concept FOC](https://piezoconcept-store.squarespace.com/1-axis/p/foc) |
435
+ | SmarAct MCS2 | Support for SmarAct MCS2 multi-channel controllers | `Native` | - |
430
436
  | Thorlabs Elliptec ELL6/ELL9/ELL12 | Dual/Four/Six-Position Slider | `Native` | [ELL6](https://www.thorlabs.com/thorproduct.cfm?partnumber=ELL6), [ELL9](https://www.thorlabs.com/thorproduct.cfm?partnumber=ELL9), [ELL12](https://www.thorlabs.com/thorproduct.cfm?partnumber=ELL12) |
431
437
  | Thorlabs Elliptec ELL14 | Rotation Mount: SM1 Threaded | `Native` | [ELL14](https://www.thorlabs.com/thorproduct.cfm?partnumber=ELL14) |
432
438
  | Thorlabs Elliptec ELL20 | Linear Stage: 60 mm Travel | `Native` | [ELL20](https://www.thorlabs.com/thorproduct.cfm?partnumber=ELL20) |
@@ -1,2 +1,2 @@
1
- version_info = (2, 4, 4)
1
+ version_info = (2, 4, 6)
2
2
  __version__ = '.'.join(map(str, version_info))
@@ -4,7 +4,9 @@ from enum import Enum
4
4
 
5
5
  import numba as nb
6
6
  import numpy as np
7
- from sklearn.cluster import DBSCAN
7
+ from hdbscan import HDBSCAN
8
+ from scipy.spatial import ConvexHull, Delaunay, Voronoi
9
+ from sklearn.cluster import DBSCAN, OPTICS, cluster_optics_dbscan
8
10
  from sklearn.preprocessing import StandardScaler
9
11
 
10
12
  logger = logging.getLogger(__name__)
@@ -417,11 +419,19 @@ def get_centers(
417
419
  return None
418
420
 
419
421
 
422
+ def scale_data(x, y, z, sigma_xy=10.0, sigma_z=10.0):
423
+ if z is None:
424
+ return np.column_stack((x, y)), 1.0
425
+ else:
426
+ scale = sigma_xy / sigma_z
427
+ return np.column_stack((x, y, z * scale)), scale
428
+
429
+
420
430
  def perform_dbscan_clustering(X, Y, Z, eps=50, min_samples=2, **kwargs):
421
431
  '''
422
432
  Performs DBSCAN clustering on 3D localization data.
423
433
 
424
- Parameters:
434
+ Parameters
425
435
  ------------
426
436
  X, Y, Z: array-like
427
437
  Arrays of x, y, z coordinates of localizations.
@@ -433,7 +443,10 @@ def perform_dbscan_clustering(X, Y, Z, eps=50, min_samples=2, **kwargs):
433
443
  a core point. Default is 2.
434
444
  **kwargs: additional keyword arguments for DBSCAN.
435
445
  '''
436
- VECTORS = np.column_stack((X, Y, Z) if Z is not None else (X, Y))
446
+ sigma_xy = kwargs.pop('sigma_xy', 10.0)
447
+ sigma_z = kwargs.pop('sigma_z', 10.0)
448
+
449
+ VECTORS, scale = scale_data(X, Y, Z, sigma_xy, sigma_z)
437
450
 
438
451
  if kwargs.pop('scale_data', False):
439
452
  std = np.std(VECTORS)
@@ -443,13 +456,9 @@ def perform_dbscan_clustering(X, Y, Z, eps=50, min_samples=2, **kwargs):
443
456
  else:
444
457
  logger.warning('Standard deviation of data is zero. Skipping scaling.')
445
458
 
446
- # 2. Initialize and fit DBSCAN
447
- # eps: maximum distance between two samples
448
- # min_samples: number of samples in a neighborhood for a point to be a core point
449
459
  dbscan_model = DBSCAN(eps=eps, min_samples=min_samples, **kwargs)
450
460
  dbscan_model.fit(VECTORS)
451
461
 
452
- # 3. Retrieve labels (-1 indicates noise/outliers)
453
462
  labels = dbscan_model.labels_
454
463
  unique = np.unique(labels).shape[0] - 1
455
464
  logger.info(
@@ -457,3 +466,164 @@ def perform_dbscan_clustering(X, Y, Z, eps=50, min_samples=2, **kwargs):
457
466
  ) # Log only non-noise labels
458
467
 
459
468
  return labels
469
+
470
+
471
+ def perform_hdbscan_clustering(X, Y, Z, **kwargs):
472
+ '''
473
+ Performs HDBSCAN clustering on 3D localization data.
474
+
475
+ Parameters
476
+ ------------
477
+ X, Y, Z: array-like
478
+ Arrays of x, y, z coordinates of localizations.
479
+ min_cluster_size: int, optional
480
+ The minimum size of clusters; single linkage splits that contain fewer
481
+ than this many samples are considered noise. Default is 5.
482
+ **kwargs: additional keyword arguments for HDBSCAN.
483
+ '''
484
+ sigma_xy = kwargs.pop('sigma_xy', 10.0)
485
+ sigma_z = kwargs.pop('sigma_z', 10.0)
486
+
487
+ VECTORS, scale = scale_data(X, Y, Z, sigma_xy, sigma_z)
488
+
489
+ if kwargs.pop('scale_data', False):
490
+ std = np.std(VECTORS)
491
+ if std > 0:
492
+ VECTORS /= std
493
+
494
+ kwargs['cluster_selection_epsilon'] = float(
495
+ kwargs.get('cluster_selection_epsilon', 0.0) / std
496
+ )
497
+ kwargs['cluster_selection_epsilon_max'] = float(
498
+ kwargs.get('cluster_selection_epsilon_max', 0.0) / std
499
+ )
500
+ else:
501
+ logger.warning('Standard deviation of data is zero. Skipping scaling.')
502
+
503
+ hdbscan_model = HDBSCAN(**kwargs)
504
+ hdbscan_model.fit(VECTORS)
505
+
506
+ labels = hdbscan_model.labels_
507
+ unique = np.unique(labels).shape[0] - 1
508
+ logger.info(
509
+ 'Cluster labels: %d (%d Points)', unique, labels[labels != -1].shape[0]
510
+ ) # Log only non-noise labels
511
+
512
+ return labels
513
+
514
+
515
+ def perform_optics_clustering(X, Y, Z, min_samples=10, xi=0.05, **kwargs):
516
+ '''
517
+ Performs OPTICS clustering on 3D localization data.
518
+
519
+ Parameters
520
+ -----------
521
+ X, Y, Z: array-like
522
+ Arrays of x, y, z coordinates of localizations.
523
+ min_samples: int, optional
524
+ The number of samples in a neighborhood for a point to be considered
525
+ a core point. Default is 10.
526
+ xi: float, optional
527
+ Steepness threshold (ξ) — smaller xi = more, finer-grained clusters.
528
+ Default is 0.05.
529
+ kwargs:
530
+ additional keyword arguments for OPTICS.
531
+
532
+ - scale_data: bool, optional
533
+ If True, scales the data to unit variance before clustering.
534
+ - sigma_xy: float, optional
535
+ Standard deviation for x and y coordinates (in nm). Default is 10.0.
536
+ - sigma_z: float, optional
537
+ Standard deviation for z coordinate (in nm). Default is 10.0.
538
+ - OPTICS parameters: any other parameters accepted by sklearn.cluster.OPTICS.
539
+
540
+ Returns
541
+ --------
542
+ labels: array of int
543
+ Per-point labels; -1 is noise, same convention as DBSCAN.
544
+ '''
545
+ sigma_xy = kwargs.pop('sigma_xy', 10.0)
546
+ sigma_z = kwargs.pop('sigma_z', 10.0)
547
+
548
+ VECTORS, scale = scale_data(X, Y, Z, sigma_xy, sigma_z)
549
+
550
+ if kwargs.pop('scale_data', False):
551
+ std = np.std(VECTORS)
552
+ if std > 0:
553
+ VECTORS /= std
554
+
555
+ kwargs['max_eps'] = kwargs.get('max_eps', np.inf) / std
556
+ kwargs['eps'] = (
557
+ kwargs.get('eps') / std if kwargs.get('eps') is not None else None
558
+ )
559
+ else:
560
+ logger.warning('Standard deviation of data is zero. Skipping scaling.')
561
+
562
+ optics = OPTICS(min_samples=min_samples, xi=xi, **kwargs)
563
+ optics.fit(VECTORS)
564
+
565
+ labels = optics.labels_
566
+ unique = np.unique(labels).shape[0] - 1
567
+ logger.info(
568
+ 'Cluster labels: %d (%d Points)', unique, labels[labels != -1].shape[0]
569
+ ) # Log only non-noise labels
570
+
571
+ return labels
572
+
573
+
574
+ def optics_then_dbscan_sweep(
575
+ X, Y, Z, min_samples=10, eps_values=(5, 10, 15, 20, 30, 50), **kwargs
576
+ ):
577
+ '''
578
+ Performs OPTICS clustering on 3D localization data, then sweeps through a range of
579
+ eps values for DBSCAN clustering on the reachability plot.
580
+
581
+ Parameters
582
+ -----------
583
+ X, Y, Z: array-like
584
+ Arrays of x, y, z coordinates of localizations.
585
+ min_samples: int, optional
586
+ The number of samples in a neighborhood for a point to be considered
587
+ a core point. Default is 10.
588
+ eps_values: iterable of float, optional
589
+ A list of eps values to sweep through for DBSCAN clustering.
590
+ Default is (5, 10, 15, 20, 30, 50).
591
+
592
+ Returns
593
+ --------
594
+ results: dict
595
+ A dictionary where keys are eps values and values are the corresponding
596
+ cluster labels from DBSCAN.
597
+ '''
598
+ sigma_xy = kwargs.pop('sigma_xy', 10.0)
599
+ sigma_z = kwargs.pop('sigma_z', 10.0)
600
+
601
+ VECTORS, scale = scale_data(X, Y, Z, sigma_xy, sigma_z)
602
+
603
+ std = 0.0
604
+
605
+ if kwargs.pop('scale_data', False):
606
+ std = np.std(VECTORS)
607
+ if std > 0:
608
+ VECTORS /= std
609
+ else:
610
+ logger.warning('Standard deviation of data is zero. Skipping scaling.')
611
+
612
+ optics = OPTICS(
613
+ min_samples=min_samples,
614
+ cluster_method=kwargs.pop('cluster_method', 'dbscan'),
615
+ **kwargs,
616
+ )
617
+ optics.fit(VECTORS)
618
+
619
+ results = {}
620
+ for eps in eps_values:
621
+ labels = cluster_optics_dbscan(
622
+ reachability=optics.reachability_,
623
+ core_distances=optics.core_distances_,
624
+ ordering=optics.ordering_,
625
+ eps=eps / std if std > 0 else eps, # Scale eps if data was scaled
626
+ )
627
+ results[eps] = labels
628
+
629
+ return results