microeye 2.3.13__tar.gz → 2.4.0__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 (264) hide show
  1. microeye-2.4.0/PKG-INFO +592 -0
  2. microeye-2.4.0/README.md +527 -0
  3. {microeye-2.3.13 → microeye-2.4.0}/pyproject.toml +1 -1
  4. {microeye-2.3.13 → microeye-2.4.0}/setup.py +0 -2
  5. microeye-2.4.0/src/microEye/__init__.py +114 -0
  6. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/_version.py +1 -1
  7. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/analysis/cmosMaps.py +3 -2
  8. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/analysis/filters/base.py +2 -1
  9. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/analysis/filters/spatial.py +34 -32
  10. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/analysis/filters/temporal.py +2 -2
  11. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/analysis/fitting/fit.py +3 -2
  12. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/analysis/fitting/nena.py +96 -78
  13. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/analysis/fitting/psf/extract.py +3 -2
  14. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/analysis/fitting/psf/spline.py +1 -1
  15. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/analysis/fitting/pyfit3Dcspline/__init__.py +1 -1
  16. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/analysis/fitting/pyfit3Dcspline/mainfunctions.py +10 -7
  17. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/analysis/fitting/results.py +28 -24
  18. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/analysis/fitting/results_stats.py +4 -1
  19. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/analysis/fitting/tardis.py +2 -1
  20. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/analysis/multi_viewer.py +160 -15
  21. microeye-2.4.0/src/microEye/analysis/tools/common.py +30 -0
  22. microeye-2.4.0/src/microEye/analysis/tools/dark_cal/__init__.py +3 -0
  23. microeye-2.4.0/src/microEye/analysis/tools/dark_cal/analysis.py +162 -0
  24. microeye-2.4.0/src/microEye/analysis/tools/dark_cal/compare.py +391 -0
  25. microeye-2.4.0/src/microEye/analysis/tools/dark_cal/constants.py +111 -0
  26. microeye-2.4.0/src/microEye/analysis/tools/dark_cal/core.py +552 -0
  27. microeye-2.4.0/src/microEye/analysis/tools/dark_cal/io.py +208 -0
  28. microeye-2.4.0/src/microEye/analysis/tools/dark_cal/plotting.py +153 -0
  29. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/analysis/tools/kymograms.py +6 -3
  30. microeye-2.4.0/src/microEye/analysis/tools/photon_cal/__init__.py +3 -0
  31. microeye-2.4.0/src/microEye/analysis/tools/photon_cal/analysis.py +156 -0
  32. microeye-2.4.0/src/microEye/analysis/tools/photon_cal/compare.py +580 -0
  33. microeye-2.4.0/src/microEye/analysis/tools/photon_cal/constants.py +254 -0
  34. microeye-2.4.0/src/microEye/analysis/tools/photon_cal/core.py +711 -0
  35. microeye-2.4.0/src/microEye/analysis/tools/photon_cal/io.py +173 -0
  36. microeye-2.4.0/src/microEye/analysis/tools/photon_cal/models.py +21 -0
  37. microeye-2.4.0/src/microEye/analysis/tools/photon_cal/plotting.py +137 -0
  38. microeye-2.4.0/src/microEye/analysis/tools/photon_cal/table.py +55 -0
  39. microeye-2.4.0/src/microEye/analysis/tools/registration.py +611 -0
  40. microeye-2.4.0/src/microEye/analysis/tools/sphere_cal.py +462 -0
  41. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/analysis/viewer/images.py +36 -42
  42. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/analysis/viewer/localizations.py +7 -4
  43. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/analysis/viewer/psf.py +5 -5
  44. microeye-2.4.0/src/microEye/hardware/cams/__init__.py +6 -0
  45. microeye-2.4.0/src/microEye/hardware/cams/basler/basler_cam.py +1024 -0
  46. microeye-2.4.0/src/microEye/hardware/cams/basler/basler_panel.py +409 -0
  47. microeye-2.4.0/src/microEye/hardware/cams/camera_calibration.py +130 -0
  48. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/hardware/cams/camera_list.py +306 -179
  49. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/hardware/cams/camera_options.py +40 -30
  50. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/hardware/cams/camera_panel.py +309 -104
  51. microeye-2.4.0/src/microEye/hardware/cams/dummy/dummy_panel.py +184 -0
  52. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/hardware/cams/jobs.py +130 -109
  53. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/hardware/cams/line_profiler.py +1 -1
  54. microeye-2.4.0/src/microEye/hardware/cams/micam.py +1268 -0
  55. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/hardware/cams/pco/pco_cam.py +117 -16
  56. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/hardware/cams/pco/pco_panel.py +7 -172
  57. microeye-2.4.0/src/microEye/hardware/cams/peak/peak_camera.py +1380 -0
  58. microeye-2.4.0/src/microEye/hardware/cams/peak/peak_panel.py +459 -0
  59. microeye-2.4.0/src/microEye/hardware/cams/pycromanager/__init__.py +1 -0
  60. microeye-2.4.0/src/microEye/hardware/cams/pycromanager/pycro_cam.py +194 -0
  61. {microeye-2.3.13/src/microEye/hardware/pycromanager/widgets → microeye-2.4.0/src/microEye/hardware/cams/pycromanager}/pycro_panel.py +18 -112
  62. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/hardware/cams/shortcuts.py +5 -3
  63. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/hardware/cams/thorlabs/thorlabs.py +270 -103
  64. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/hardware/cams/thorlabs/thorlabs_panel.py +29 -236
  65. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/hardware/cams/ueye/ueye_camera.py +267 -89
  66. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/hardware/cams/ueye/ueye_panel.py +24 -219
  67. microeye-2.4.0/src/microEye/hardware/cams/vimba/__init__.py +68 -0
  68. microeye-2.4.0/src/microEye/hardware/cams/vimba/vimba_cam.py +1649 -0
  69. microeye-2.4.0/src/microEye/hardware/cams/vimba/vimba_panel.py +412 -0
  70. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/hardware/lasers/io_matchbox.py +14 -12
  71. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/hardware/lasers/io_params.py +2 -2
  72. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/hardware/lasers/io_single_laser.py +14 -12
  73. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/hardware/lasers/laser_relay.py +8 -3
  74. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/hardware/mieye/acquisition_manager.py +72 -34
  75. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/hardware/mieye/devices_manager.py +212 -237
  76. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/hardware/mieye/miEye.py +91 -74
  77. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/hardware/misc/acquisition_view.py +1 -1
  78. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/hardware/protocols/actions.py +111 -3
  79. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/hardware/protocols/actions_items.py +68 -25
  80. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/hardware/protocols/designer.py +6 -3
  81. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/hardware/protocols/serialization.py +12 -0
  82. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/hardware/pycromanager/core.py +12 -8
  83. microeye-2.4.0/src/microEye/hardware/pycromanager/devices.py +216 -0
  84. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/hardware/pycromanager/headless.py +8 -5
  85. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/hardware/pycromanager/widgets/__init__.py +0 -1
  86. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/hardware/pycromanager/widgets/bridges.py +2 -1
  87. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/hardware/stages/elliptec/devicesView.py +10 -8
  88. microeye-2.4.0/src/microEye/hardware/stages/kinesis/__init__.py +1 -0
  89. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/hardware/stages/kinesis/kdc101/kdc101.py +9 -4
  90. microeye-2.4.0/src/microEye/hardware/stages/kinesis/kinesis.py +155 -0
  91. microeye-2.4.0/src/microEye/hardware/stages/manager.py +466 -0
  92. microeye-2.4.0/src/microEye/hardware/stages/piezon_concept/__init__.py +1 -0
  93. microeye-2.3.13/src/microEye/hardware/stages/piezo_concept.py → microeye-2.4.0/src/microEye/hardware/stages/piezon_concept/foc.py +24 -40
  94. microeye-2.4.0/src/microEye/hardware/stages/pycromanager/__init__.py +1 -0
  95. microeye-2.4.0/src/microEye/hardware/stages/pycromanager/core.py +252 -0
  96. microeye-2.4.0/src/microEye/hardware/stages/smaract/__init__.py +1 -0
  97. microeye-2.4.0/src/microEye/hardware/stages/smaract/mcs2.py +735 -0
  98. microeye-2.4.0/src/microEye/hardware/stages/stabilization/controller.py +275 -0
  99. microeye-2.4.0/src/microEye/hardware/stages/stabilization/methods.py +947 -0
  100. microeye-2.4.0/src/microEye/hardware/stages/stabilizer.py +1504 -0
  101. microeye-2.4.0/src/microEye/hardware/stages/stage.py +966 -0
  102. microeye-2.4.0/src/microEye/hardware/stages/view.py +434 -0
  103. microeye-2.4.0/src/microEye/hardware/widgets/controller.py +413 -0
  104. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/hardware/widgets/devices.py +0 -29
  105. microeye-2.4.0/src/microEye/hardware/widgets/focusWidget.py +436 -0
  106. microeye-2.4.0/src/microEye/hardware/widgets/indicator.py +100 -0
  107. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/hardware/widgets/scan_acquisition.py +17 -8
  108. microeye-2.4.0/src/microEye/hardware/widgets/slides.py +555 -0
  109. microeye-2.4.0/src/microEye/images/__init__.py +8 -0
  110. microeye-2.3.13/src/microEye/utils/uImage.py → microeye-2.4.0/src/microEye/images/handlers.py +88 -672
  111. microeye-2.4.0/src/microEye/images/uImage.py +668 -0
  112. microeye-2.4.0/src/microEye/images/zarr.py +186 -0
  113. microeye-2.4.0/src/microEye/launcher.py +67 -0
  114. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/qt.py +4 -34
  115. microeye-2.4.0/src/microEye/tools/__init__.py +0 -0
  116. microeye-2.4.0/src/microEye/tools/color.py +57 -0
  117. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/utils/display.py +92 -33
  118. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/utils/metadata.py +5 -2
  119. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/utils/metadata_tree.py +17 -3
  120. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/utils/micro_launcher.py +60 -9
  121. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/utils/parameter_tree.py +2 -2
  122. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/utils/start_gui.py +0 -25
  123. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/utils/thread_worker.py +1 -0
  124. microeye-2.4.0/src/microeye.egg-info/PKG-INFO +592 -0
  125. {microeye-2.3.13 → microeye-2.4.0}/src/microeye.egg-info/SOURCES.txt +44 -3
  126. microeye-2.4.0/src/microeye.egg-info/requires.txt +38 -0
  127. microeye-2.3.13/PKG-INFO +0 -442
  128. microeye-2.3.13/README.md +0 -377
  129. microeye-2.3.13/src/microEye/__init__.py +0 -42
  130. microeye-2.3.13/src/microEye/hardware/cams/__init__.py +0 -29
  131. microeye-2.3.13/src/microEye/hardware/cams/basler/basler_cam.py +0 -413
  132. microeye-2.3.13/src/microEye/hardware/cams/camera_calibration.py +0 -99
  133. microeye-2.3.13/src/microEye/hardware/cams/dummy/dummy_panel.py +0 -695
  134. microeye-2.3.13/src/microEye/hardware/cams/micam.py +0 -654
  135. microeye-2.3.13/src/microEye/hardware/cams/vimba/vimba_cam.py +0 -1000
  136. microeye-2.3.13/src/microEye/hardware/cams/vimba/vimba_panel.py +0 -745
  137. microeye-2.3.13/src/microEye/hardware/pycromanager/devices.py +0 -487
  138. microeye-2.3.13/src/microEye/hardware/stages/kinesis/__init__.py +0 -1
  139. microeye-2.3.13/src/microEye/hardware/stages/kinesis/kinesis.py +0 -771
  140. microeye-2.3.13/src/microEye/hardware/stages/stabilizer.py +0 -1088
  141. microeye-2.3.13/src/microEye/hardware/stages/stage.py +0 -851
  142. microeye-2.3.13/src/microEye/hardware/widgets/controller.py +0 -279
  143. microeye-2.3.13/src/microEye/hardware/widgets/focusWidget.py +0 -283
  144. microeye-2.3.13/src/microEye/launcher.py +0 -39
  145. microeye-2.3.13/src/microeye.egg-info/PKG-INFO +0 -442
  146. microeye-2.3.13/src/microeye.egg-info/requires.txt +0 -36
  147. {microeye-2.3.13 → microeye-2.4.0}/LICENSE +0 -0
  148. {microeye-2.3.13 → microeye-2.4.0}/MANIFEST.in +0 -0
  149. {microeye-2.3.13 → microeye-2.4.0}/setup.cfg +0 -0
  150. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/analysis/__init__.py +0 -0
  151. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/analysis/checklist_dialog.py +0 -0
  152. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/analysis/filters/__init__.py +0 -0
  153. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/analysis/fitting/__init__.py +0 -0
  154. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/analysis/fitting/phasor_fit.py +0 -0
  155. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/analysis/fitting/processing.py +0 -0
  156. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/analysis/fitting/psf/__init__.py +0 -0
  157. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/analysis/fitting/psf/rubost_mean.py +0 -0
  158. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/analysis/fitting/psf/stats/__init__.py +0 -0
  159. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/analysis/fitting/psf/stats/core.py +0 -0
  160. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/analysis/fitting/psf/stats/curve_fit.py +0 -0
  161. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/analysis/fitting/psf/stats/io.py +0 -0
  162. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/analysis/fitting/psf/stats/slope_fit.py +0 -0
  163. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/analysis/fitting/psf/temp.py +0 -0
  164. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/analysis/fitting/psf/test.py +0 -0
  165. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/analysis/fitting/pyfit3Dcspline/CPU/CPUfunctions.py +0 -0
  166. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/analysis/fitting/pyfit3Dcspline/CPU/CPUmleFit_LM.py +0 -0
  167. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/analysis/fitting/pyfit3Dcspline/CPU/CPUsplineLib.py +0 -0
  168. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/analysis/fitting/pyfit3Dcspline/CPU/__init__.py +0 -0
  169. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/analysis/fitting/pyfit3Dcspline/GPU/GPUfunctions.py +0 -0
  170. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/analysis/fitting/pyfit3Dcspline/GPU/GPUmleFit_LM_EMCCD.py +0 -0
  171. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/analysis/fitting/pyfit3Dcspline/GPU/GPUmleFit_LM_sCMOS.py +0 -0
  172. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/analysis/fitting/pyfit3Dcspline/GPU/GPUsplineLib.py +0 -0
  173. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/analysis/fitting/pyfit3Dcspline/GPU/__init__.py +0 -0
  174. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/analysis/fitting/pyfit3Dcspline/constants.py +0 -0
  175. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/analysis/fitting/rcc.py +0 -0
  176. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/analysis/processing/__init__.py +0 -0
  177. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/analysis/processing/frc.py +0 -0
  178. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/analysis/rendering/__init__.py +0 -0
  179. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/analysis/rendering/base.py +0 -0
  180. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/analysis/rendering/cloud.py +0 -0
  181. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/analysis/rendering/core.py +0 -0
  182. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/analysis/rendering/volumetric.py +0 -0
  183. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/analysis/tools/__init__.py +0 -0
  184. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/analysis/tools/roi_selectors.py +0 -0
  185. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/analysis/utils/__init__.py +0 -0
  186. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/analysis/utils/coordinates.py +0 -0
  187. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/analysis/utils/images.py +0 -0
  188. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/analysis/utils/windows.py +0 -0
  189. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/analysis/viewer/__init__.py +0 -0
  190. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/analysis/viewer/image_options_widget.py +0 -0
  191. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/analysis/viewer/layers_widget.py +0 -0
  192. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/analysis/viewer/volume.py +0 -0
  193. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/hardware/__init__.py +0 -0
  194. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/hardware/cams/basler/__init__.py +0 -0
  195. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/hardware/cams/dummy/__init__.py +0 -0
  196. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/hardware/cams/linescan/IR_Cam.py +0 -0
  197. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/hardware/cams/linescan/__init__.py +0 -0
  198. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/hardware/cams/pco/__init__.py +0 -0
  199. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/hardware/cams/pco/enums.py +0 -0
  200. {microeye-2.3.13/src/microEye/hardware/cams/thorlabs → microeye-2.4.0/src/microEye/hardware/cams/peak}/__init__.py +0 -0
  201. {microeye-2.3.13/src/microEye/hardware/cams/ueye → microeye-2.4.0/src/microEye/hardware/cams/thorlabs}/__init__.py +0 -0
  202. {microeye-2.3.13/src/microEye/hardware/cams/vimba → microeye-2.4.0/src/microEye/hardware/cams/ueye}/__init__.py +0 -0
  203. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/hardware/device.py +0 -0
  204. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/hardware/lasers/__init__.py +0 -0
  205. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/hardware/mieye/__init__.py +0 -0
  206. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/hardware/misc/__init__.py +0 -0
  207. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/hardware/misc/reglo.py +0 -0
  208. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/hardware/misc/temp.py +0 -0
  209. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/hardware/port_config.py +0 -0
  210. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/hardware/protocols/__init__.py +0 -0
  211. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/hardware/protocols/scene_manager.py +0 -0
  212. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/hardware/pycromanager/__init__.py +0 -0
  213. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/hardware/pycromanager/enums.py +0 -0
  214. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/hardware/pycromanager/utils.py +0 -0
  215. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/hardware/pycromanager/widgets/headless_manager.py +0 -0
  216. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/hardware/pycromanager/widgets/headless_options.py +0 -0
  217. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/hardware/stages/__init__.py +0 -0
  218. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/hardware/stages/elliptec/__init__.py +0 -0
  219. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/hardware/stages/elliptec/baseDevice.py +0 -0
  220. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/hardware/stages/elliptec/device.py +0 -0
  221. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/hardware/stages/elliptec/deviceID.py +0 -0
  222. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/hardware/stages/elliptec/devicePort.py +0 -0
  223. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/hardware/stages/elliptec/deviceStatus.py +0 -0
  224. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/hardware/stages/elliptec/ellDevices.py +0 -0
  225. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/hardware/stages/elliptec/messageUpdater.py +0 -0
  226. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/hardware/stages/elliptec/motorInfo.py +0 -0
  227. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/hardware/stages/elliptec/stage.py +0 -0
  228. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/hardware/stages/elliptec/test.py +0 -0
  229. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/hardware/stages/kinesis/kdc101/__init__.py +0 -0
  230. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/hardware/stages/kinesis/kdc101/enums.py +0 -0
  231. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/hardware/stages/kinesis/kdc101/factory.py +0 -0
  232. {microeye-2.3.13/src/microEye/icons → microeye-2.4.0/src/microEye/hardware/stages/stabilization}/__init__.py +0 -0
  233. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/hardware/widgets/__init__.py +0 -0
  234. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/hardware/widgets/qlist_slider.py +0 -0
  235. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/icons/1024.png +0 -0
  236. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/icons/128.png +0 -0
  237. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/icons/16.png +0 -0
  238. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/icons/24.png +0 -0
  239. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/icons/256.png +0 -0
  240. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/icons/32.png +0 -0
  241. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/icons/48.png +0 -0
  242. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/icons/512.png +0 -0
  243. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/icons/64.png +0 -0
  244. {microeye-2.3.13/src/microEye/tools → microeye-2.4.0/src/microEye/icons}/__init__.py +0 -0
  245. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/icons/close.svg +0 -0
  246. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/icons/mieye.png +0 -0
  247. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/icons/min.svg +0 -0
  248. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/icons/viewer.png +0 -0
  249. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/tools/microscopy.py +0 -0
  250. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/utils/__init__.py +0 -0
  251. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/utils/enum_encoder.py +0 -0
  252. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/utils/expandable_groupbox.py +0 -0
  253. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/utils/gui_helper.py +0 -0
  254. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/utils/hid_utils/__init__.py +0 -0
  255. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/utils/hid_utils/controller.py +0 -0
  256. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/utils/hid_utils/device.py +0 -0
  257. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/utils/hid_utils/enums.py +0 -0
  258. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/utils/hid_utils/utils.py +0 -0
  259. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/utils/labelled_slider.py +0 -0
  260. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/utils/pyscripting.py +0 -0
  261. {microeye-2.3.13 → microeye-2.4.0}/src/microEye/utils/retry_exec.py +0 -0
  262. {microeye-2.3.13 → microeye-2.4.0}/src/microeye.egg-info/dependency_links.txt +0 -0
  263. {microeye-2.3.13 → microeye-2.4.0}/src/microeye.egg-info/entry_points.txt +0 -0
  264. {microeye-2.3.13 → microeye-2.4.0}/src/microeye.egg-info/top_level.txt +0 -0
@@ -0,0 +1,592 @@
1
+ Metadata-Version: 2.4
2
+ Name: microeye
3
+ Version: 2.4.0
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
+ Home-page: https://github.com/samhitech/microEye
6
+ Author: Mohammad Nour Alsamsam
7
+ Author-email: nour.alsamsam@gmail.com
8
+ Project-URL: miEye Paper, https://doi.org/10.1016/j.ohx.2022.e00368
9
+ Project-URL: miEye OSF, http://doi.org/10.17605/osf.io/j2fqy
10
+ Classifier: Programming Language :: Python :: 3.11
11
+ Classifier: License :: OSI Approved :: GNU General Public License v3 (GPLv3)
12
+ Classifier: Operating System :: OS Independent
13
+ Requires-Python: >=3.9.4, <3.12
14
+ Description-Content-Type: text/markdown
15
+ License-File: LICENSE
16
+ Requires-Dist: autopep8==2.3.2
17
+ Requires-Dist: dask==2025.9.1
18
+ Requires-Dist: h5py==3.15.0
19
+ Requires-Dist: hidapi==0.14.0
20
+ Requires-Dist: ids-peak==1.11.1.0.5
21
+ Requires-Dist: matplotlib==3.10.7
22
+ Requires-Dist: mmpycorex==0.3.16
23
+ Requires-Dist: numba==0.62.1
24
+ Requires-Dist: numpy==2.2.6
25
+ Requires-Dist: ome_types==0.5.2
26
+ Requires-Dist: opencv_python==4.12.0.88
27
+ Requires-Dist: pandas==2.3.3
28
+ Requires-Dist: pco==2.3.0
29
+ Requires-Dist: pycromanager==1.0.2
30
+ Requires-Dist: pyfiglet==1.0.4
31
+ Requires-Dist: pyflakes==3.4.0
32
+ Requires-Dist: pyjokes==0.8.3
33
+ Requires-Dist: PyOpenGL==3.1.10
34
+ Requires-Dist: pypylon==4.2.0
35
+ Requires-Dist: pyqtdarktheme>=2.1.0
36
+ Requires-Dist: pyqtgraph==0.13.7
37
+ Requires-Dist: pyserial==3.5
38
+ Requires-Dist: PySide6==6.7.2
39
+ Requires-Dist: PySide6_Addons==6.7.2
40
+ Requires-Dist: PySide6_Essentials==6.7.2
41
+ Requires-Dist: pystackreg>=0.2.8
42
+ Requires-Dist: pyueye==4.96.952
43
+ Requires-Dist: QDarkStyle==3.2.3
44
+ Requires-Dist: QScintilla==2.14.1
45
+ Requires-Dist: scikit-image==0.25.2
46
+ Requires-Dist: scikit_learn==1.7.2
47
+ Requires-Dist: scipy>=1.16.2
48
+ Requires-Dist: setuptools>=80.9.0
49
+ Requires-Dist: tables==3.10.2
50
+ Requires-Dist: tabulate==0.9.0
51
+ Requires-Dist: tqdm>=4.66.4
52
+ Requires-Dist: tifffile==2025.10.4
53
+ Requires-Dist: zarr>=3.1.3
54
+ Dynamic: author
55
+ Dynamic: author-email
56
+ Dynamic: classifier
57
+ Dynamic: description
58
+ Dynamic: description-content-type
59
+ Dynamic: home-page
60
+ Dynamic: license-file
61
+ Dynamic: project-url
62
+ Dynamic: requires-dist
63
+ Dynamic: requires-python
64
+ Dynamic: summary
65
+
66
+ # The microEye
67
+
68
+ ![microEye](https://github.com/samhitech/microEye/assets/89871015/37ca0859-0b4b-402d-8652-9a01d0bf0f29)
69
+
70
+ 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
+
72
+ 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
+
74
+ ```bash
75
+ __ ____ ____ ___ ____ ___
76
+ / |/ (_)__________ / __/_ _____ _ __|_ |/ / / / _ \
77
+ / /|_/ / / __/ __/ _ \/ _// // / -_) | |/ / __//_ _// // /
78
+ /_/ /_/_/\__/_/ \___/___/\_, /\__/ |___/____(_)_/(_)___/
79
+ /___/
80
+ ```
81
+
82
+ <!-- ![Package Health](https://snyk.io/advisor/python/microEye/badge.svg) -->
83
+
84
+ ![Python Version](https://img.shields.io/badge/Python-3.11-blue)
85
+ ![Package Version](https://img.shields.io/pypi/v/microEye.svg)
86
+ ![Package Version](https://img.shields.io/badge/GUI_Platform-PySide6|PyQt6|PyQt5-navy)
87
+ [![DOI](https://img.shields.io/badge/HardwareX-10.1016/j.ohx.2022.e00368-orange)](https://doi.org/10.1016/j.ohx.2022.e00368)
88
+ ![Package Version](https://img.shields.io/badge/Windows-Tested-cyan)
89
+ ![Package Version](https://img.shields.io/badge/MacOS-Errors-red)
90
+ ![Package Version](https://img.shields.io/badge/Linux-NotTested-lightgray)
91
+ ![Downloads](https://img.shields.io/pypi/dm/microEye.svg)
92
+
93
+ <!-- ![Dependencies](https://img.shields.io/librariesio/release/pypi/microEye) -->
94
+
95
+ ![Contributors](https://img.shields.io/github/contributors/samhitech/microEye.svg)
96
+ ![GitHub Last Commit](https://img.shields.io/github/last-commit/samhitech/microEye.svg)
97
+ ![Maintenance](https://img.shields.io/maintenance/yes/2026.svg)
98
+
99
+ ![GitHub Issues](https://img.shields.io/github/issues/samhitech/microEye.svg)
100
+ ![GitHub Bugs](https://img.shields.io/github/issues/samhitech/microEye/bug.svg)
101
+ ![GitHub Feature Requests](https://img.shields.io/github/issues/samhitech/microEye/feature%20request.svg)
102
+ ![GitHub Pull Requests](https://img.shields.io/github/issues-pr/samhitech/microEye.svg)
103
+
104
+ ![GitHub Forks](https://img.shields.io/github/forks/samhitech/microEye.svg)
105
+ ![GitHub Stars](https://img.shields.io/github/stars/samhitech/microEye.svg)
106
+
107
+ ## What's New in microEye
108
+
109
+ - **Stage Control Overhaul**
110
+
111
+ Stage management has been completely redesigned with a unified controller
112
+ that handles all stage types through a single, consistent interface. A new
113
+ Stage Manager lets you add, remove, and assign stages to axes on the fly.
114
+ Per-axis soft limits, configurable center positions, and a new Calibrate
115
+ action make setup safer and more repeatable. Dedicated **XY and Z Center
116
+ buttons** in the Controller dock move stages to their configured center
117
+ positions in one click.
118
+
119
+ - **SmarAct MCS2 Support**
120
+
121
+ Full support for SmarAct MCS2 multi-channel controllers, including guided
122
+ setup, calibration, homing, and soft-limit configuration for reliable
123
+ multi-axis motion.
124
+
125
+ - **Slides Widget**
126
+
127
+ A new Slides dock lets you visualize and navigate multi-channel slide
128
+ layouts (Sticky-Slide VI, µ-Slide VI, 8/18 Well, and more). Click any
129
+ channel to move the stage to its center, with live position and delta
130
+ readouts, position overlays, and context menu options for axis orientation
131
+ and inversion. Layout settings persist across sessions.
132
+
133
+ - **Focus Stabilization Improvements**
134
+
135
+ The focus stabilizer has been thoroughly refactored. Each axis now has
136
+ independent PID gains and calibration. New stabilization methods are
137
+ supported — including Reflection peak fitting, Fiducial/Fourier, and a
138
+ Hybrid XYZ mode. Frame statistics (count, mean, median) are now tracked
139
+ and the stabilizer waits for a sufficient number of frames before locking,
140
+ reducing false engagements. Plots dynamically show only the data relevant
141
+ to the active method, and all settings persist across sessions.
142
+
143
+ - **New Analysis & Calibration Tools**
144
+
145
+ Three new calibration workflows are available from the Multi-Viewer Tools
146
+ menu:
147
+ - **Dark Calibration** — directory-based mean/variance analysis with
148
+ results cache, import/export, and dataset comparison.
149
+ - **Photon Transfer Curve (PTC)** — dataset import, run/cache workflows,
150
+ cache comparison, and Dark-Cal JSON export.
151
+ - **Sphere Power Calibration** — calibration utilities integrated into
152
+ the PTC workflow.
153
+
154
+ A new **Image Registration** tool for aligning and merging multi-channel
155
+ stacks (with transformation export/import) is also available in the
156
+ Multi-Viewer Tools menu.
157
+
158
+ - **Expanded Camera Support**
159
+
160
+ Cameras from Basler, Allied Vision (Vimba X SDK), IDS Peak, Thorlabs,
161
+ PCO, and PycroManager now share unified ROI, exposure, and framerate
162
+ handling. Notable additions:
163
+ - **IDS Peak** is newly supported with binning, flash, and full ROI and
164
+ acquisition flow.
165
+ - **Basler** is newly supported.
166
+ - **Vimba X** gains black level, gain, correction, and binning controls,
167
+ plus CTI auto-discovery via `VIMBA_X_HOME` / `VIMBA_X_CTI`.
168
+ - All camera configurations are **automatically saved and restored** on
169
+ next launch when detected.
170
+
171
+ - **Laser & Device Controls**
172
+
173
+ The Controller dock now shows color-coded, wavelength-aware indicators
174
+ for each laser and relay. Clicking an indicator toggles the laser state
175
+ directly from the main UI. Relay mode labels (ON/F1/F2) are shown
176
+ alongside each laser.
177
+
178
+ - **Experiment Protocol Designer**
179
+
180
+ The protocol action list gains a new **ListLoop** action type for
181
+ repeating sequences of steps. The parameter adjustment UI now sorts
182
+ target objects, shows readable labels, and correctly handles integer and
183
+ float editors.
184
+
185
+ - **Program-Wide Logging**
186
+
187
+ Structured logging replaces scattered print statements across the entire
188
+ codebase. Log level, file output, and console output are configurable via
189
+ the launcher UI or CLI flags (`--log-level`, `--no-log-file`,
190
+ `--no-log-console`). Logs are written per session under `./logs` for
191
+ easier troubleshooting.
192
+
193
+ - **Image I/O & Data Handling**
194
+
195
+ Image handling has been refactored into a dedicated `microEye.images`
196
+ package. Zarr V3 is now fully supported for streaming and saving
197
+ acquisition data, with both zipped and directory store support.
198
+
199
+ - **Multi-Viewer Improvements**
200
+
201
+ The Multi-Viewer gains an **"Opened Files" dock** for quick switching
202
+ between open datasets, a **Registration Tool** for stack alignment, and
203
+ new menu entries for the Dark Calibration and PTC tools — all accessible
204
+ as MDI subwindows.
205
+
206
+ - **Display & Performance**
207
+
208
+ Focus widget plots have been rewritten to eliminate GUI freezes at high
209
+ framerates (tested at ~165 Hz). A new optional **crosshair overlay** can
210
+ be enabled on any camera display. OpenGL rendering is now used for image
211
+ display. Application startup is faster thanks to deferred initialization
212
+ of heavy components.
213
+
214
+ - **Stability & Compatibility**
215
+ - GPU imports are safely guarded on CPU-only systems.
216
+ - Qt binding selection is configurable at launch via CLI or environment
217
+ variable.
218
+ - Spatial filters (DoG, PointGaussFilter, Fourier) are faster via FFT
219
+ convolution and Numba acceleration.
220
+ - Qt6 compatibility fixes for mouse event handling.
221
+ - `PiezoConcept FOC` stage adapter fixes a float/int mismatch that caused
222
+ random Z jumps.
223
+
224
+ ---
225
+
226
+ > ⚠️ **Breaking Change:** Zarr V3 support requires **Python 3.11 or
227
+ > newer**. Python 3.9 and 3.10 are no longer supported.
228
+
229
+ ## Table of Contents
230
+
231
+ - [The microEye](#the-microeye)
232
+ - [What's New in microEye](#whats-new-in-microeye)
233
+ - [Table of Contents](#table-of-contents)
234
+ - [How to Install microEye](#how-to-install-microeye)
235
+ - [Troubleshooting Installation](#troubleshooting-installation)
236
+ - [microEye Launcher](#microeye-launcher)
237
+ - [Usage](#usage)
238
+ - [Modules](#modules)
239
+ - [The miEye Module](#the-mieye-module)
240
+ - [Experiment Designer (Beta)](#experiment-designer-beta)
241
+ - [The Multi Viewer Module](#the-multi-viewer-module)
242
+ - [Uses Packages](#uses-packages)
243
+ - [Microscope Scheme](#microscope-scheme)
244
+ - [Hardware](#hardware)
245
+ - [Supported Cameras](#supported-cameras)
246
+ - [Additional Hardware](#additional-hardware)
247
+ - [Pycro-Manager Integration](#pycro-manager-integration)
248
+ - [Features](#features)
249
+ - [Integrated Hardware](#integrated-hardware)
250
+ - [How to Use](#how-to-use)
251
+ - [Step-by-step Instructions](#step-by-step-instructions)
252
+ - [Authors](#authors)
253
+ - [People Involved](#people-involved)
254
+ - [Acknowledgement](#acknowledgement)
255
+ - [Citation](#citation)
256
+
257
+ ## How to Install [microEye](https://pypi.org/project/microEye/)
258
+
259
+ 1. **Install Python:**
260
+
261
+ Download and install the latest [`Python`](https://www.python.org/downloads/) stable release (version ≥3.11.9).
262
+
263
+ 2. **Install microEye package:**
264
+
265
+ Open a terminal and execute the following command to install microEye using pip:
266
+
267
+ ```powershell
268
+ pip install microEye --upgrade
269
+ ```
270
+
271
+ Or for a specific version:
272
+
273
+ ```powershell
274
+ pip install microEye==version
275
+ ```
276
+
277
+ 3. **Install specific hardware drivers: (Optional)**
278
+ - Allied Vision CMOS cameras:
279
+
280
+ Install the [`Vimba X SDK`](https://www.alliedvision.com/en/products/software/vimba-x-sdk/) (_avoid installing it inside the Program Files directory_). After installation, navigate to the `Python API` directory (e.g., `C:\Allied Vision\Vimba X\api\python`) where the `vmbpy` wheel file (`.whl`) is located, and install it using:
281
+
282
+ ```powershell
283
+ python -m pip install vmbpy-1.1.1-py3-none-win_amd64.whl
284
+ ```
285
+
286
+ **Important note**
287
+
288
+ It has been observed that `vmbpy` can hang when initializing `GenICAM` transport layers (TLs) if the `GENICAM_GENTL64_PATH` environment variable contains `.cti` folders from other providers (e.g., `IDS Peak` or `pylon`). To avoid this, restrict `Vimba X` to load only its own TLs by explicitly specifying the `Vimba X` `.cti` directory in `VmbC.xml`.
289
+
290
+ **Steps**
291
+ 1. **Auto (recommended)**
292
+
293
+ Set the `VIMBA_X_HOME` environment variable to your `Vimba X` installation directory. `microEye` will read `VIMBA_X_HOME` at startup and use it to point the Vimba X transport-layer (`.cti`) configuration (e.g., `VIMBA_X_HOME/cti`).
294
+
295
+ > Note: On Windows the `Vimba X installer` typically creates this variable automatically — verify it before manually setting it.
296
+
297
+ 2. **Manual**
298
+
299
+ If the automatic method is not prefered, create the environment variable `VIMBA_X_CTI` and point it to the directory (or directories) that contain the `Vimba X` `.cti` transport-layer files. Use directory paths (not individual `.cti` files). Multiple directories are allowed — separate them with the platform-specific path separator.
300
+
301
+ - 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_).
302
+ - IDS CMOS cameras:
303
+ - 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.
304
+ - 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.
305
+
306
+ > - 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.
307
+ > - 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.
308
+
309
+ - Integrated Optics Lasers: Install [`Laser control software`](https://integratedoptics.com/downloads).
310
+
311
+ - PCO cameras: Install [`pco.sdk`, `pco.runtime`](https://www.excelitas.com/product/pco-software-development-kits).
312
+
313
+ > **Note:** Support is under development.
314
+
315
+ - 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.
316
+
317
+ - 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).
318
+
319
+ 4. **Open a terminal and execute microEye:** :partying_face:
320
+
321
+ ```powershell
322
+ usage: microEye.exe [-h] [--module {mieye,viewer}] [--QT_API {PySide6,PyQt6,PyQt5}] [--theme {None,qdarktheme,qdarkstyle,...}]
323
+ [--log-level {CRITICAL,ERROR,WARNING,INFO,DEBUG}] [--no-log-file] [--no-log-console]
324
+
325
+ options:
326
+ -h, --help show this help message and exit
327
+ --module {mieye,viewer}
328
+ The module to launch [mieye|viewer], If not specified, launcher is executed.
329
+ --QT_API {PySide6,PyQt6,PyQt5}
330
+ Select QT API [PySide6|PyQT6|PyQt5], If not specified, the environment variable QT_API is used.
331
+ --theme {None,qdarktheme,qdarkstyle,...}
332
+ The theme of the app, if not specified, the environment variable MITHEME is used.
333
+ --log-level {CRITICAL,ERROR,WARNING,INFO,DEBUG}
334
+ Root logging level (default WARNING).
335
+ --no-log-file Disable logging to file.
336
+ --no-log-console Disable logging to console.
337
+ ```
338
+
339
+ > **Note:** Ensure all necessary drivers are installed for microEye to function properly.
340
+
341
+ ### Troubleshooting Installation
342
+
343
+ If you encounter any issues during the installation process, please check the following:
344
+
345
+ - Ensure that you have the latest version of Python installed (`3.9 ≤ version ≤3.11`).
346
+ - Try installing the required packages repeating step (2) or individually using `pip install <package_name>`.
347
+ - Check the system requirements for specific hardware drivers and follow the installation instructions provided by the manufacturers.
348
+ - Refer to the project's issue tracker on GitHub for any known installation issues and solutions.
349
+
350
+ > If the issue persists, feel free to open a new issue on the project's GitHub repository, providing detailed information about the problem and any error messages you encountered.
351
+
352
+ ## microEye Launcher
353
+
354
+ The microEye Launcher allows you to launch either the `miEye Module` or the `Viewer Module`, and provides options to select the Qt API and theme for the application.
355
+
356
+ ![Launcher Screenshot](https://github.com/samhitech/microEye/assets/89871015/385cc3d6-e3b8-44a4-a288-2471b6b34f7f)
357
+
358
+ ### Usage
359
+
360
+ Upon running the launcher, you will be presented with the following interface:
361
+
362
+ - **miEye Module**: Launches the miEye module for microscope control and acquisition.
363
+ - **Viewer Module**: Launches the viewer module for image/data anlysis and visualization.
364
+ - **QT API (dropdown)**: Select the `Qt API` to use. Options are `PySide6`, `PyQt6`, or `PyQt5`.
365
+ - **Theme (dropdown)**: Select the `theme` for the application. Options are `None` (default), `qdarktheme`, or `qdarkstyle`.
366
+
367
+ To launch a module, simply click on the respective button (`miEye Module` or `Viewer Module`). If you wish to change the `Qt API` or `theme`, select the desired option from the dropdown menus before launching.
368
+
369
+ ## Modules
370
+
371
+ ### The miEye Module
372
+
373
+ The `miEye_module` provides the primary graphical user interface (GUI) for microscope control and data acquisition, combining the functionalities of the deprecated _Acquisition_ and _Control_ modules.
374
+
375
+ | miEye module (NOT UP TO DATE) | Acquisition Camera |
376
+ | ---------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- |
377
+ | ![miEye](https://github.com/samhitech/microEye/assets/89871015/20c5573a-e489-478e-adfc-29410bc6d4c2) | ![CamStack](https://github.com/samhitech/microEye/assets/89871015/ead95989-54ce-4643-b5a3-4461c36f6b14) |
378
+
379
+ **How to use:**
380
+
381
+ To launch the miEye module, run the following command:
382
+
383
+ ```powershell
384
+ microEye --module mieye
385
+ ```
386
+
387
+ #### Experiment Designer (Beta)
388
+
389
+ ![Experiment Designer (Beta)](https://github.com/samhitech/microEye/assets/89871015/0693a620-6aed-4bf4-a723-7b0c7b143d1f)
390
+
391
+ The Experiment Designer is a new feature within the `miEye Module` that allows users to create and manage complex acquisition protocols through a graphical interface.
392
+
393
+ Key features include:
394
+
395
+ - GUI-based design of acquisition protocols;
396
+ - Support for loops and device parameter adjustments/actions;
397
+ - Export and import capabilities for protocols;
398
+ - Threaded execution with pause functionality;
399
+ - Configurable delays between protocol steps
400
+ - Context menu for easy adjustments
401
+ - Nested protocol structure
402
+ - Acquisition action wait option
403
+ - Cell reordering and deletion via keyboard shortcuts
404
+ - Real-time execution progress view
405
+
406
+ To access the Experiment Designer:
407
+
408
+ 1. Launch the `miEye module`.
409
+ 2. Look for the `Protocols` view in the interface.
410
+
411
+ Note: This feature is currently in beta. We value your feedback to enhance its functionality and improve the user experience.
412
+
413
+ ### The Multi Viewer Module
414
+
415
+ The `multi_viewer` Module is an improved GUI that replaces the deprecated `tiff_viewer` module. It allows users to process multiple files and provides data analysis and visualization tools for super-resolution single-molecule localization microscopy and single-particle tracking.
416
+
417
+ | Raw Data | Localizations |
418
+ | ---------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- |
419
+ | ![imagesStack](https://github.com/samhitech/microEye/assets/89871015/17421117-a633-4a20-ba38-e7adffcd7332) | ![locStack](https://github.com/samhitech/microEye/assets/89871015/713d9fc7-7f92-4341-adb2-17b83ac8fc34) |
420
+
421
+ **How to use:**
422
+
423
+ To launch the Multi Viewer module, run the following command:
424
+
425
+ ```powershell
426
+ microEye --module viewer
427
+ ```
428
+
429
+ ## Uses Packages
430
+
431
+ The `microEye` uses the following Python packages:
432
+
433
+ | Code Quality and Formatting | Data Analysis and Visualization | File and Data Storage | GUI and UI Development | Image and Video Processing | Microscopy | Other Utilities |
434
+ | :-------------------------: | :-----------------------------: | :-------------------: | :-------------------------: | :------------------------: | :----------: | :-------------: |
435
+ | autopep8 | dask | h5py | PyQt5 (optional) | opencv_python | pco | hidapi |
436
+ | pyflakes | matplotlib | ome_types | PyQt6 (optional) | PyOpenGL | pycromanager | mmpycorex |
437
+ | | numba | tables | PyQt6-QScintilla (optional) | | pyueye | pyfiglet |
438
+ | | numpy | tifffile | PySide6 | | pypylon | pyjokes |
439
+ | | pandas | zarr | pyqtgraph | | | pyserial |
440
+ | | pystackreg | | pyqtdarktheme | | | setuptools |
441
+ | | scikit-image | | QDarkStyle | | | tabulate |
442
+ | | scikit_learn | | QScintilla | | | tqdm |
443
+ | | scipy | | | | | |
444
+
445
+ > **Note:** The VimbaPython package is bundled with the Vimba SDK and must be installed manually.
446
+ >
447
+ > **IMPORTANT:** Starting from microEye v2.4.0, the legacy Vimba SDK is no longer supported. Please use the Vimba X SDK and its accompanying _vmbpy_ Python package instead.
448
+
449
+ ## Microscope Scheme
450
+
451
+ Schematic overview of the miEye instrument:
452
+
453
+ - **A) Single-Mode Fiber (SMF):** Excitation path for TIRF-, HILO-, and Epi-mode.
454
+ - **B) Multi-Mode Fiber (MMF):** Excitation path for Epi-mode when imaging MMF output on the sample plane.
455
+ - **C) Fluorescence Emission:** Path for fluorescence emission.
456
+ - **D) Automatic Focus Stabilization:** the automatic focus stabilization path using an IR laser in TIRF setting.
457
+
458
+ | Scheme 1 | Scheme 2 |
459
+ | --------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------- |
460
+ | ![Quad Scheme](https://user-images.githubusercontent.com/89871015/182302644-9fdf8615-75c3-4702-9913-d1a535f60e22.png) | ![Scheme GIT](https://user-images.githubusercontent.com/89871015/182302694-3f70d058-b1b6-4ef5-9cc2-aec9b58a05f0.png) |
461
+
462
+ **Key Components:** _AC:_ Achromat lens, _AS:_ Aspheric lens, _BFP:_ Back-focal plane, _TL:_ Tube lens, _B:_ B-coated N-BK7 optics, _BS:_ Beamsplitter.
463
+
464
+ ## Hardware
465
+
466
+ ### Supported Cameras
467
+
468
+ | Camera | Description | Driver | Link |
469
+ | :-----------------------: | ------------------------------------------------------------------------ | :----------------------------: | :-----------------------------------------------------------------------------------------------------------: |
470
+ | 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) |
471
+ | Thorlabs DCC1545M | DCx camera using UC480 driver | `ThorCam 3.7.0` | [Product Link](https://www.thorlabs.com/thorProduct.cfm?partNumber=DCC1545M) |
472
+ | 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) |
473
+ | 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) |
474
+ | Pycro-camera | Access to cameras via Micro-Manager drivers/adapters using Pycro-Manager | `uManager` `Pycro-Manager` | - |
475
+
476
+ ### Additional Hardware
477
+
478
+ | Hardware | Description | Driver | Link |
479
+ | --------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------: | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: |
480
+ | Integrated Optics MatchBox | Multi-wavelength Laser Combiner, Single Laser MatchBox | `Native` | [Products Link](https://integratedoptics.com/products/wavelength-combiners) |
481
+ | Piezo Concept FOC | Nanopositioner for microscope objectives | `Native` | [Piezo Concept FOC](https://piezoconcept-store.squarespace.com/1-axis/p/foc) |
482
+ | 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) |
483
+ | Thorlabs Elliptec ELL14 | Rotation Mount: SM1 Threaded | `Native` | [ELL14](https://www.thorlabs.com/thorproduct.cfm?partnumber=ELL14) |
484
+ | Thorlabs Elliptec ELL20 | Linear Stage: 60 mm Travel | `Native` | [ELL20](https://www.thorlabs.com/thorproduct.cfm?partnumber=ELL20) |
485
+ | Thorlabs KDC101 | Kinesis Controller for Z825B/[Z925B](https://www.thorlabs.com/thorproduct.cfm?partnumber=Z925B) actuators (Activate USB VCP to access the COM port in device manager) | `Native` | [KDC101](https://www.thorlabs.com/thorproduct.cfm?partnumber=KDC101) |
486
+ | Parallax TSL1401-DB (#28317) | Linescan Camera Module | `Native` | [Parallax TSL1401-DB](https://eu.mouser.com/ProductDetail/Parallax/28317?qs=%2Fha2pyFaduiCRhuOAXMuCmQIeG1Q3R01m6Y1EH%252BmN80%3D) |
487
+ | RelayBox Arduino | For laser control using camera GPIO signals | `Native` | [RelayBox](https://github.com/samhitech/RelayBox) |
488
+ | miEye OSF Project Parts List | Parts list of miEye OSF Project | - | [Repo Link](https://osf.io/j2fqy/) |
489
+
490
+ ## Pycro-Manager Integration
491
+
492
+ Integration with Pycro-Manager is now implemented, providing support for managing headless instances and `Core` instances. This allows for seamless control and configuration of hardware devices through the Pycro-Manager framework.
493
+
494
+ ![pycromanager integration](https://github.com/user-attachments/assets/73893f9f-c1ef-438f-a884-ec3f60f00118)
495
+
496
+ ### Features
497
+
498
+ - **Headless Manager**: Manage multiple headless Micro-Manager instances (JavaBackend), including starting, stopping, and saving configurations.
499
+ - **Core Instances Manager**: Handle multiple `PycroCore` instances for device communication and control.
500
+
501
+ ### Integrated Hardware
502
+
503
+ The following table lists the hardware devices that are integrated and supported by the `miEye module`:
504
+
505
+ | Device | Description |
506
+ | :------: | ------------------------------------------------------------------------------------------- |
507
+ | `Camera` | Access Micro-Manager cameras (mainly done for focus stabilization). |
508
+ | `ZStage` | Access Micro-Manager Z-stage devices for focus stabilization and axial positioning control. |
509
+
510
+ ### How to Use
511
+
512
+ 1. **Headless Manager**:
513
+ - Open the `miEye_module` and navigate to `Tools -> Micro-Manager Headless Manager` in the main menu.
514
+ - Start a new headless instance using a specific configuration file.
515
+ - Stop individual running instances or terminate all instances simultaneously.
516
+ - Save configurations for future use or load previously saved configurations for headless instances.
517
+
518
+ 2. **Core Instances**:
519
+ - Open the `miEye_module` and navigate to `Tools -> Micro-Manager Core Bridges` in the main menu.
520
+ - Click on `Add Core Bridge` and provide the port address in the dialog box.
521
+ - A list of connected devices will be displayed, allowing you to view each device's properties.
522
+ - Close the window and refresh the camera list to access Pycro-Manager cameras.
523
+
524
+ _Accessing other types of devices is under development!_
525
+
526
+ > **Note:** Currently, only acquisition and focus stabilization features are implemented. Support for additional hardware and stage-related controls is under active development.
527
+
528
+ ### Step-by-step Instructions
529
+
530
+ For comprehensive step-by-step instructions, please refer to the [Pycro-Manager Integration Guide](https://github.com/samhitech/microEye/tree/main/guide/pycromanager).
531
+
532
+ ## Authors
533
+
534
+ [`Mohammad Nour Alsamsam`](https://tutkuslab.github.io/team/MNA/)
535
+
536
+ [![Twitter URL](https://img.shields.io/twitter/url/https/twitter.com/samhightech.svg?style=social&label=Follow%20%40samhightech)](https://twitter.com/samhightech)
537
+
538
+ ## People Involved
539
+
540
+ **PhD supervision:**
541
+
542
+ [`Dr. Marijonas Tutkus`](https://tutkuslab.github.io/team/MT/)
543
+
544
+ [![Twitter URL](https://img.shields.io/twitter/url/https/twitter.com/MTutkus.svg?style=social&label=Follow%20%40MTutkus)](https://twitter.com/MTutkus)
545
+
546
+ **Sample preparation, experiments and testing:**
547
+
548
+ [`Aurimas Kopūstas`](https://tutkuslab.github.io/team/AK/)
549
+ [`Tutkus Lab Team`](https://tutkuslab.github.io/team/)
550
+
551
+ ## Acknowledgement
552
+
553
+ Research and access to intruments and samples is credited to:
554
+
555
+ - Vilnius University, Lithuania.
556
+ - Center For Physical Sciences and Technology, Vilnius, Lithuania.
557
+ - Research Council of Lithuania.
558
+
559
+ Special thanks to the following projects and libraries that make this work possible:
560
+
561
+ - **SMAP/fit3Dcspline**: The original code, provided as a part of the Ries group [`SMAP software`](https://github.com/jries/SMAP/tree/master/fit3Dcspline). The `pyfit3Dcspline` module in our project is a Python adaptation of this functionality, offering both CPU and GPU accelerated fitting of Single-Molecule Localization Microscopy (SMLM) data. For more details, refer to the pyfit3Dcspline [`README`](https://github.com/samhitech/microEye/tree/main/src/microEye/analysis/fitting/pyfit3Dcspline/README.md).
562
+
563
+ - **ACCéNT**: a partial implementation of the photon free calibration within the acquisition pipeline which generates pixel-wise mean and variance images.
564
+
565
+ > Robin Diekmann, Joran Deschamps, Yiming Li, Aline Tschanz, Maurice Kahnwald, Ulf Matti, Jonas Ries, "Photon-free (s)CMOS camera characterization for artifact reduction in high- and super-resolution microscopy", bioRxiv 2021.04.16.440125. [doi: 2021.04.16.440125](https://doi.org/10.1101/2021.04.16.440125)
566
+
567
+ - **Phasor Fit**: We have implemented the 2D phasor fitting algorithm in Python for fast pre-fitting visualization of localizations.
568
+
569
+ > K.J.A. Martens, A.N. Bader, S. Baas, B. Rieger, J. Hohlbein. "Phasor based single-molecule localization microscopy in 3D (pSMLM-3D): an algorithm for MHz localization rates using standard CPUs," bioRxiv, 2017. [DOI: 10.1101/191957](https://doi.org/10.1101/191957).
570
+
571
+ - **Endesfelder Lab/SMLMComputational**: A numba accelerated adaptation of Drift Correction, Fourier Ring Correlation (FRC) structural resolution and Nearest Neighbour Analysis (NeNA) for localization precision from [Endesfelder Lab](https://github.com/Endesfelder-Lab/SMLMComputational).
572
+
573
+ > Raw data to results: a hands-on introduction and overview of computational analysis for single-molecule localization microscopy", Martens et al., (2022), Frontiers in Bioinformatics. [Paper](https://www.frontiersin.org/articles/10.3389/fbinf.2021.817254)
574
+
575
+ - **TARDIS (Temporal Analysis of Relative Distances)**: We have developed a partial Python implementation of TARDIS without fitting for now. For more information, refer to the [`TARDIS` software releases](https://github.com/kjamartens/TARDIS-public). The underlying algorithms and scientific details of TARDIS are detailed in the manuscript:
576
+ > Martens et al., “Temporal analysis of relative distances (TARDIS) is a robust, parameter-free alternative to single-particle tracking”, Nature Methods (2024). [Article](https://rdcu.be/dv1sr)
577
+
578
+ **Note**: I'm committed to maintaining an accurate acknowledgment list for our project. However, if I inadvertently miss acknowledging your work, please don't hesitate to reach out to us. I appreciate your understanding, and I'm doing my best to manage all acknowledgments amidst my other responsibilities.
579
+
580
+ > I make it a standard practice to cite and provide credit within a function's docstring whenever I draw inspiration from any external reference.
581
+
582
+ ## Citation
583
+
584
+ If you find our work or software helpful in your research or project, we kindly request that you cite it appropriately. Here is the suggested citation format:
585
+
586
+ > M.N. Alsamsam, A. Kopūstas, M. Jurevičiūtė, and M. Tutkus, “The miEye: Bench-top super-resolution microscope with cost-effective equipment,” HardwareX 12, e00368 (2022). [Paper](https://doi.org/10.1016/j.ohx.2022.e00368)
587
+
588
+ Additionally, we would appreciate it if you could provide a link to our GitHub repository or any relevant publication associated with the software.
589
+
590
+ > Alsamsam, M. N. microEye, <https://github.com/samhitech/microEye> [Computer software]
591
+
592
+ Thank you for your support!