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.
- {microeye-2.4.4/src/microeye.egg-info → microeye-2.4.6}/PKG-INFO +35 -29
- {microeye-2.4.4 → microeye-2.4.6}/README.md +33 -27
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/_version.py +1 -1
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/clustering/dbscan.py +177 -7
- microeye-2.4.6/src/microEye/analysis/clustering/density.py +730 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/clustering/plot.py +274 -14
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/clustering/rulers.py +72 -8
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/filters/base.py +50 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/filters/spatial.py +77 -50
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/fitting/fit.py +120 -80
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/fitting/psf/extract.py +2 -2
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/fitting/psf/spline.py +38 -21
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/fitting/results.py +138 -65
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/multi_viewer.py +1 -1
- microeye-2.4.6/src/microEye/analysis/processing/frc.py +203 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/rendering/base.py +1 -1
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/rendering/cloud.py +5 -5
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/rendering/volumetric.py +5 -5
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/tools/batch.py +235 -13
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/tools/kymograms.py +29 -1
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/viewer/image_options_widget.py +28 -11
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/viewer/images.py +92 -117
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/viewer/localizations.py +299 -98
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/cams/basler/basler_cam.py +4 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/cams/basler/basler_panel.py +1 -1
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/cams/camera_list.py +9 -0
- microeye-2.4.6/src/microEye/hardware/cams/dcam/dcam.py +1970 -0
- microeye-2.4.6/src/microEye/hardware/cams/dcam/dcam_panel.py +307 -0
- microeye-2.4.6/src/microEye/hardware/cams/dcam/dcamapi4.py +1914 -0
- microeye-2.4.6/src/microEye/hardware/cams/dcam/funcs.py +247 -0
- microeye-2.4.6/src/microEye/hardware/cams/dcam/meta.py +117 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/cams/peak/peak_camera.py +2 -2
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/cams/vimba/vimba_panel.py +2 -2
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/pycromanager/core.py +2 -2
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/stages/elliptec/devicePort.py +2 -1
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/stages/stabilization/methods.py +1 -1
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/images/zarr.py +3 -3
- microeye-2.4.6/src/microEye/tools/__init__.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/utils/gui_helper.py +26 -0
- {microeye-2.4.4 → microeye-2.4.6/src/microeye.egg-info}/PKG-INFO +35 -29
- {microeye-2.4.4 → microeye-2.4.6}/src/microeye.egg-info/SOURCES.txt +7 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microeye.egg-info/requires.txt +1 -1
- microeye-2.4.4/src/microEye/analysis/processing/frc.py +0 -120
- {microeye-2.4.4 → microeye-2.4.6}/LICENSE +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/MANIFEST.in +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/pyproject.toml +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/setup.cfg +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/setup.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/__init__.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/__init__.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/checklist_dialog.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/clustering/__init__.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/cmosMaps.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/file_system.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/filters/__init__.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/filters/temporal.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/fitting/__init__.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/fitting/aim.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/fitting/nena.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/fitting/phasor_fit.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/fitting/processing.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/fitting/psf/__init__.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/fitting/psf/rubost_mean.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/fitting/psf/stats/__init__.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/fitting/psf/stats/core.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/fitting/psf/stats/curve_fit.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/fitting/psf/stats/io.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/fitting/psf/stats/slope_fit.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/fitting/psf/temp.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/fitting/psf/test.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/fitting/pyfit3Dcspline/CPU/CPUfunctions.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/fitting/pyfit3Dcspline/CPU/CPUmleFit_LM.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/fitting/pyfit3Dcspline/CPU/CPUsplineLib.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/fitting/pyfit3Dcspline/CPU/__init__.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/fitting/pyfit3Dcspline/GPU/GPUfunctions.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/fitting/pyfit3Dcspline/GPU/GPUmleFit_LM_EMCCD.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/fitting/pyfit3Dcspline/GPU/GPUmleFit_LM_sCMOS.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/fitting/pyfit3Dcspline/GPU/GPUsplineLib.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/fitting/pyfit3Dcspline/GPU/__init__.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/fitting/pyfit3Dcspline/__init__.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/fitting/pyfit3Dcspline/constants.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/fitting/pyfit3Dcspline/mainfunctions.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/fitting/rcc.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/fitting/results_stats.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/fitting/tardis.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/processing/__init__.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/rendering/__init__.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/rendering/core.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/tools/__init__.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/tools/common.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/tools/dark_cal/__init__.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/tools/dark_cal/analysis.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/tools/dark_cal/compare.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/tools/dark_cal/constants.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/tools/dark_cal/core.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/tools/dark_cal/io.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/tools/dark_cal/plotting.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/tools/photon_cal/__init__.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/tools/photon_cal/analysis.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/tools/photon_cal/compare.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/tools/photon_cal/constants.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/tools/photon_cal/core.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/tools/photon_cal/io.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/tools/photon_cal/models.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/tools/photon_cal/plotting.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/tools/photon_cal/table.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/tools/registration.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/tools/roi_selectors.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/tools/sphere_cal.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/utils/__init__.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/utils/coordinates.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/utils/images.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/utils/windows.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/viewer/__init__.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/viewer/layers_widget.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/viewer/psf.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/analysis/viewer/volume.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/__init__.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/cams/__init__.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/cams/basler/__init__.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/cams/camera_calibration.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/cams/camera_options.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/cams/camera_panel.py +0 -0
- {microeye-2.4.4/src/microEye/hardware/misc → microeye-2.4.6/src/microEye/hardware/cams/dcam}/__init__.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/cams/dummy/__init__.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/cams/dummy/dummy_panel.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/cams/jobs.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/cams/line_profiler.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/cams/linescan/IR_Cam.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/cams/linescan/__init__.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/cams/micam.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/cams/pco/__init__.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/cams/pco/enums.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/cams/pco/pco_cam.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/cams/pco/pco_panel.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/cams/peak/__init__.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/cams/peak/peak_panel.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/cams/pycromanager/__init__.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/cams/pycromanager/pycro_cam.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/cams/pycromanager/pycro_panel.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/cams/shortcuts.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/cams/thorlabs/__init__.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/cams/thorlabs/thorlabs.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/cams/thorlabs/thorlabs_panel.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/cams/ueye/__init__.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/cams/ueye/ueye_camera.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/cams/ueye/ueye_panel.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/cams/vimba/__init__.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/cams/vimba/vimba_cam.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/device.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/lasers/__init__.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/lasers/io_matchbox.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/lasers/io_params.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/lasers/io_single_laser.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/lasers/laser_relay.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/mieye/__init__.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/mieye/acquisition_manager.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/mieye/devices_manager.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/mieye/miEye.py +0 -0
- {microeye-2.4.4/src/microEye/hardware/protocols → microeye-2.4.6/src/microEye/hardware/misc}/__init__.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/misc/acquisition_view.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/misc/reglo.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/misc/temp.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/port_config.py +0 -0
- {microeye-2.4.4/src/microEye/hardware/stages → microeye-2.4.6/src/microEye/hardware/protocols}/__init__.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/protocols/actions.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/protocols/actions_items.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/protocols/designer.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/protocols/scene_manager.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/protocols/serialization.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/pycromanager/__init__.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/pycromanager/devices.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/pycromanager/enums.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/pycromanager/headless.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/pycromanager/utils.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/pycromanager/widgets/__init__.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/pycromanager/widgets/bridges.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/pycromanager/widgets/headless_manager.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/pycromanager/widgets/headless_options.py +0 -0
- {microeye-2.4.4/src/microEye/hardware/stages/stabilization → microeye-2.4.6/src/microEye/hardware/stages}/__init__.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/stages/elliptec/__init__.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/stages/elliptec/baseDevice.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/stages/elliptec/device.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/stages/elliptec/deviceID.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/stages/elliptec/deviceStatus.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/stages/elliptec/devicesView.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/stages/elliptec/ellDevices.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/stages/elliptec/messageUpdater.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/stages/elliptec/motorInfo.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/stages/elliptec/stage.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/stages/elliptec/test.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/stages/kinesis/__init__.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/stages/kinesis/kdc101/__init__.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/stages/kinesis/kdc101/enums.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/stages/kinesis/kdc101/factory.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/stages/kinesis/kdc101/kdc101.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/stages/kinesis/kinesis.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/stages/manager.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/stages/piezon_concept/__init__.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/stages/piezon_concept/foc.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/stages/pycromanager/__init__.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/stages/pycromanager/core.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/stages/smaract/__init__.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/stages/smaract/mcs2.py +0 -0
- {microeye-2.4.4/src/microEye/icons → microeye-2.4.6/src/microEye/hardware/stages/stabilization}/__init__.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/stages/stabilization/controller.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/stages/stabilizer.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/stages/stage.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/stages/view.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/widgets/__init__.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/widgets/controller.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/widgets/devices.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/widgets/focusWidget.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/widgets/indicator.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/widgets/qlist_slider.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/widgets/scan_acquisition.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/hardware/widgets/slides.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/icons/1024.png +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/icons/128.png +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/icons/16.png +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/icons/24.png +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/icons/256.png +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/icons/32.png +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/icons/48.png +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/icons/512.png +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/icons/64.png +0 -0
- {microeye-2.4.4/src/microEye/tools → microeye-2.4.6/src/microEye/icons}/__init__.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/icons/close.svg +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/icons/mieye.png +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/icons/min.svg +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/icons/viewer.png +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/images/__init__.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/images/handlers.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/images/uImage.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/launcher.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/qt.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/tools/color.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/tools/microscopy.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/utils/__init__.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/utils/display.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/utils/enum_encoder.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/utils/expandable_groupbox.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/utils/hid_utils/__init__.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/utils/hid_utils/controller.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/utils/hid_utils/device.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/utils/hid_utils/enums.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/utils/hid_utils/utils.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/utils/labelled_slider.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/utils/metadata.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/utils/metadata_tree.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/utils/micro_launcher.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/utils/parameter_tree.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/utils/pyqt2mplt.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/utils/pyscripting.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/utils/retry_exec.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/utils/start_gui.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microEye/utils/thread_worker.py +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microeye.egg-info/dependency_links.txt +0 -0
- {microeye-2.4.4 → microeye-2.4.6}/src/microeye.egg-info/entry_points.txt +0 -0
- {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.
|
|
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.
|
|
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
|
-

|
|
68
|
+
<!--  -->
|
|
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
|
<!--  -->
|
|
83
83
|
|
|
84
84
|

|
|
@@ -88,7 +88,8 @@ This toolkit is compatible with the [hardware](#hardware) used in our microscope
|
|
|
88
88
|

|
|
89
89
|

|
|
90
90
|

|
|
91
|
-
|
|
91
|
+
|
|
92
|
+
<!--  -->
|
|
92
93
|
|
|
93
94
|
<!--  -->
|
|
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
|
-
-
|
|
308
|
-
-
|
|
309
|
-
-
|
|
310
|
-
|
|
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
|
-
|
|
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 |
|
|
482
|
-
| :-----------------------: | ------------------------------------------------------------------------ |
|
|
483
|
-
|
|
|
484
|
-
|
|
|
485
|
-
|
|
|
486
|
-
|
|
|
487
|
-
|
|
|
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
|
-

|
|
3
|
+
<!--  -->
|
|
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
|
<!--  -->
|
|
18
18
|
|
|
19
19
|

|
|
@@ -23,7 +23,8 @@ This toolkit is compatible with the [hardware](#hardware) used in our microscope
|
|
|
23
23
|

|
|
24
24
|

|
|
25
25
|

|
|
26
|
-
|
|
26
|
+
|
|
27
|
+
<!--  -->
|
|
27
28
|
|
|
28
29
|
<!--  -->
|
|
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
|
-
-
|
|
243
|
-
-
|
|
244
|
-
-
|
|
245
|
-
|
|
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
|
-
|
|
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 |
|
|
417
|
-
| :-----------------------: | ------------------------------------------------------------------------ |
|
|
418
|
-
|
|
|
419
|
-
|
|
|
420
|
-
|
|
|
421
|
-
|
|
|
422
|
-
|
|
|
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,
|
|
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
|
|
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
|
-
|
|
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
|