microeye 2.3.8__tar.gz → 2.3.9__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {microeye-2.3.8/src/microeye.egg-info → microeye-2.3.9}/PKG-INFO +6 -6
- {microeye-2.3.8 → microeye-2.3.9}/README.md +5 -5
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/_version.py +1 -1
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/analysis/multi_viewer.py +64 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/analysis/viewer/localizations.py +29 -38
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/hardware/pycromanager/core.py +461 -321
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/hardware/pycromanager/devices.py +2 -1
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/hardware/pycromanager/widgets/pycro_panel.py +27 -14
- {microeye-2.3.8 → microeye-2.3.9/src/microeye.egg-info}/PKG-INFO +6 -6
- {microeye-2.3.8 → microeye-2.3.9}/LICENSE +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/MANIFEST.in +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/pyproject.toml +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/setup.cfg +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/setup.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/__init__.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/analysis/__init__.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/analysis/checklist_dialog.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/analysis/cmosMaps.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/analysis/filters/__init__.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/analysis/filters/base.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/analysis/filters/spatial.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/analysis/filters/temporal.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/analysis/fitting/__init__.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/analysis/fitting/fit.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/analysis/fitting/nena.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/analysis/fitting/phasor_fit.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/analysis/fitting/processing.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/analysis/fitting/psf/__init__.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/analysis/fitting/psf/extract.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/analysis/fitting/psf/rubost_mean.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/analysis/fitting/psf/spline.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/analysis/fitting/psf/stats/__init__.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/analysis/fitting/psf/stats/core.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/analysis/fitting/psf/stats/curve_fit.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/analysis/fitting/psf/stats/io.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/analysis/fitting/psf/stats/slope_fit.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/analysis/fitting/psf/temp.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/analysis/fitting/psf/test.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/analysis/fitting/pyfit3Dcspline/CPU/CPUfunctions.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/analysis/fitting/pyfit3Dcspline/CPU/CPUmleFit_LM.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/analysis/fitting/pyfit3Dcspline/CPU/CPUsplineLib.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/analysis/fitting/pyfit3Dcspline/CPU/__init__.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/analysis/fitting/pyfit3Dcspline/GPU/GPUfunctions.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/analysis/fitting/pyfit3Dcspline/GPU/GPUmleFit_LM_EMCCD.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/analysis/fitting/pyfit3Dcspline/GPU/GPUmleFit_LM_sCMOS.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/analysis/fitting/pyfit3Dcspline/GPU/GPUsplineLib.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/analysis/fitting/pyfit3Dcspline/GPU/__init__.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/analysis/fitting/pyfit3Dcspline/__init__.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/analysis/fitting/pyfit3Dcspline/constants.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/analysis/fitting/pyfit3Dcspline/mainfunctions.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/analysis/fitting/results.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/analysis/fitting/results_stats.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/analysis/fitting/tardis.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/analysis/processing/__init__.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/analysis/processing/frc.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/analysis/rendering/__init__.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/analysis/rendering/base.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/analysis/rendering/cloud.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/analysis/rendering/core.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/analysis/rendering/volumetric.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/analysis/tools/__init__.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/analysis/tools/kymograms.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/analysis/tools/roi_selectors.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/analysis/utils/__init__.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/analysis/utils/coordinates.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/analysis/utils/images.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/analysis/utils/windows.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/analysis/viewer/__init__.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/analysis/viewer/image_options_widget.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/analysis/viewer/images.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/analysis/viewer/layers_widget.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/analysis/viewer/psf.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/analysis/viewer/volume.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/hardware/__init__.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/hardware/cams/__init__.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/hardware/cams/camera_calibration.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/hardware/cams/camera_list.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/hardware/cams/camera_options.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/hardware/cams/camera_panel.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/hardware/cams/dummy/__init__.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/hardware/cams/dummy/dummy_panel.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/hardware/cams/jobs.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/hardware/cams/line_profiler.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/hardware/cams/linescan/IR_Cam.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/hardware/cams/linescan/__init__.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/hardware/cams/micam.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/hardware/cams/pco/__init__.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/hardware/cams/pco/enums.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/hardware/cams/pco/pco_cam.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/hardware/cams/pco/pco_panel.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/hardware/cams/shortcuts.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/hardware/cams/thorlabs/__init__.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/hardware/cams/thorlabs/thorlabs.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/hardware/cams/thorlabs/thorlabs_panel.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/hardware/cams/ueye/__init__.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/hardware/cams/ueye/ueye_camera.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/hardware/cams/ueye/ueye_panel.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/hardware/cams/vimba/__init__.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/hardware/cams/vimba/vimba_cam.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/hardware/cams/vimba/vimba_panel.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/hardware/device.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/hardware/lasers/__init__.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/hardware/lasers/io_matchbox.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/hardware/lasers/io_params.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/hardware/lasers/io_single_laser.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/hardware/lasers/laser_relay.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/hardware/mieye/__init__.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/hardware/mieye/acquisition_manager.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/hardware/mieye/devices_manager.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/hardware/mieye/miEye.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/hardware/misc/__init__.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/hardware/misc/acquisition_view.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/hardware/misc/reglo.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/hardware/misc/temp.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/hardware/port_config.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/hardware/protocols/__init__.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/hardware/protocols/actions.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/hardware/protocols/actions_items.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/hardware/protocols/designer.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/hardware/protocols/scene_manager.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/hardware/protocols/serialization.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/hardware/pycromanager/__init__.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/hardware/pycromanager/enums.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/hardware/pycromanager/headless.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/hardware/pycromanager/utils.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/hardware/pycromanager/widgets/__init__.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/hardware/pycromanager/widgets/bridges.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/hardware/pycromanager/widgets/headless_manager.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/hardware/pycromanager/widgets/headless_options.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/hardware/stages/__init__.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/hardware/stages/elliptec/__init__.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/hardware/stages/elliptec/baseDevice.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/hardware/stages/elliptec/device.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/hardware/stages/elliptec/deviceID.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/hardware/stages/elliptec/devicePort.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/hardware/stages/elliptec/deviceStatus.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/hardware/stages/elliptec/devicesView.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/hardware/stages/elliptec/ellDevices.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/hardware/stages/elliptec/messageUpdater.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/hardware/stages/elliptec/motorInfo.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/hardware/stages/elliptec/stage.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/hardware/stages/elliptec/test.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/hardware/stages/kinesis/__init__.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/hardware/stages/kinesis/kdc101/__init__.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/hardware/stages/kinesis/kdc101/enums.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/hardware/stages/kinesis/kdc101/factory.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/hardware/stages/kinesis/kdc101/kdc101.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/hardware/stages/kinesis/kinesis.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/hardware/stages/piezo_concept.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/hardware/stages/stabilizer.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/hardware/stages/stage.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/hardware/widgets/__init__.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/hardware/widgets/controller.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/hardware/widgets/devices.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/hardware/widgets/focusWidget.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/hardware/widgets/qlist_slider.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/hardware/widgets/scan_acquisition.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/icons/1024.png +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/icons/128.png +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/icons/16.png +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/icons/24.png +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/icons/256.png +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/icons/32.png +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/icons/48.png +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/icons/512.png +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/icons/64.png +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/icons/__init__.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/icons/close.svg +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/icons/mieye.png +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/icons/min.svg +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/icons/viewer.png +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/launcher.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/qt.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/tools/__init__.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/tools/microscopy.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/utils/__init__.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/utils/display.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/utils/enum_encoder.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/utils/expandable_groupbox.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/utils/gui_helper.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/utils/hid_utils/__init__.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/utils/hid_utils/controller.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/utils/hid_utils/device.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/utils/hid_utils/enums.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/utils/hid_utils/utils.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/utils/labelled_slider.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/utils/metadata.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/utils/metadata_tree.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/utils/micro_launcher.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/utils/parameter_tree.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/utils/pyscripting.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/utils/retry_exec.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/utils/start_gui.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/utils/thread_worker.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microEye/utils/uImage.py +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microeye.egg-info/SOURCES.txt +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microeye.egg-info/dependency_links.txt +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microeye.egg-info/entry_points.txt +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microeye.egg-info/requires.txt +0 -0
- {microeye-2.3.8 → microeye-2.3.9}/src/microeye.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: microeye
|
|
3
|
-
Version: 2.3.
|
|
3
|
+
Version: 2.3.9
|
|
4
4
|
Summary: A python toolkit for fluorescence microscopy that features hardware control, data analysis and vizualization for super-resolution single-molecule localization microscopy and single-partical tracking.
|
|
5
5
|
Home-page: https://github.com/samhitech/microEye
|
|
6
6
|
Author: Mohammad Nour Alsamsam
|
|
@@ -71,11 +71,11 @@ The **`microEye`** is a Python toolkit for fluorescence microscopy that supports
|
|
|
71
71
|
This toolkit is compatible with the [hardware](#hardware) used in our microscope. For further details, refer to the [miEye microscope paper](https://doi.org/10.1016/j.ohx.2022.e00368) and [OSF project](http://doi.org/10.17605/osf.io/j2fqy).
|
|
72
72
|
|
|
73
73
|
```bash
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
74
|
+
__ __ _ ___ ___ ____ ___
|
|
75
|
+
| \/ (_)__ _ _ ___| __| _ ___ __ _|_ ) |__ // _ \
|
|
76
|
+
| |\/| | / _| '_/ _ \ _| || / -_) \ V // / _ |_ \\_, /
|
|
77
|
+
|_| |_|_\__|_| \___/___\_, \___| \_//___(_)___(_)_/
|
|
78
|
+
|__/
|
|
79
79
|
```
|
|
80
80
|
|
|
81
81
|

|
|
@@ -7,11 +7,11 @@ The **`microEye`** is a Python toolkit for fluorescence microscopy that supports
|
|
|
7
7
|
This toolkit is compatible with the [hardware](#hardware) used in our microscope. For further details, refer to the [miEye microscope paper](https://doi.org/10.1016/j.ohx.2022.e00368) and [OSF project](http://doi.org/10.17605/osf.io/j2fqy).
|
|
8
8
|
|
|
9
9
|
```bash
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
10
|
+
__ __ _ ___ ___ ____ ___
|
|
11
|
+
| \/ (_)__ _ _ ___| __| _ ___ __ _|_ ) |__ // _ \
|
|
12
|
+
| |\/| | / _| '_/ _ \ _| || / -_) \ V // / _ |_ \\_, /
|
|
13
|
+
|_| |_|_\__|_| \___/___\_, \___| \_//___(_)___(_)_/
|
|
14
|
+
|__/
|
|
15
15
|
```
|
|
16
16
|
|
|
17
17
|

|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
version_info = (2, 3,
|
|
1
|
+
version_info = (2, 3, 9)
|
|
2
2
|
__version__ = '.'.join(map(str, version_info))
|
|
@@ -203,6 +203,10 @@ class multi_viewer(QMainWindow):
|
|
|
203
203
|
# Connect double-click signal to a method that uses QTimer
|
|
204
204
|
self.tree.doubleClicked.connect(self._open_file)
|
|
205
205
|
|
|
206
|
+
# Create Tree view context menu
|
|
207
|
+
self.tree.setContextMenuPolicy(Qt.CustomContextMenu)
|
|
208
|
+
self.tree.customContextMenuRequested.connect(self._show_tree_context_menu)
|
|
209
|
+
|
|
206
210
|
# Add the File system tab contents
|
|
207
211
|
self.imsq_pattern = QtWidgets.QLineEdit('/image_0*.ome.tif')
|
|
208
212
|
|
|
@@ -210,6 +214,66 @@ class multi_viewer(QMainWindow):
|
|
|
210
214
|
self.file_tree_layout.addWidget(self.imsq_pattern)
|
|
211
215
|
self.file_tree_layout.addWidget(self.tree)
|
|
212
216
|
|
|
217
|
+
def _show_tree_context_menu(self, position):
|
|
218
|
+
index = self.tree.indexAt(position)
|
|
219
|
+
if not index.isValid():
|
|
220
|
+
return
|
|
221
|
+
|
|
222
|
+
menu = QtWidgets.QMenu()
|
|
223
|
+
reveal_action = menu.addAction('Reveal in Explorer')
|
|
224
|
+
new_folder_action = menu.addAction('New Folder')
|
|
225
|
+
menu.addSeparator()
|
|
226
|
+
|
|
227
|
+
# Root path shortcuts
|
|
228
|
+
root_action = menu.addAction('This PC (Root Path)')
|
|
229
|
+
home_action = menu.addAction('Home (User Directory)')
|
|
230
|
+
desktop_action = menu.addAction('Desktop')
|
|
231
|
+
initial_action = menu.addAction('Initial Path')
|
|
232
|
+
working_dir_action = menu.addAction('Working Directory')
|
|
233
|
+
|
|
234
|
+
action = menu.exec(self.tree.viewport().mapToGlobal(position))
|
|
235
|
+
if action == reveal_action:
|
|
236
|
+
path = self.model.filePath(index)
|
|
237
|
+
folder = path if os.path.isdir(path) else os.path.dirname(path)
|
|
238
|
+
os.startfile(folder)
|
|
239
|
+
elif action == new_folder_action:
|
|
240
|
+
self._create_new_folder()
|
|
241
|
+
elif action == home_action:
|
|
242
|
+
home = os.path.expanduser('~')
|
|
243
|
+
self.tree.setRootIndex(self.model.index(home))
|
|
244
|
+
elif action == desktop_action:
|
|
245
|
+
desktop = os.path.join(os.path.expanduser('~'), 'Desktop')
|
|
246
|
+
self.tree.setRootIndex(self.model.index(desktop))
|
|
247
|
+
elif action == root_action:
|
|
248
|
+
self.tree.setRootIndex(self.model.index(''))
|
|
249
|
+
elif action == initial_action:
|
|
250
|
+
self.tree.setRootIndex(self.model.index(self.path))
|
|
251
|
+
elif action == working_dir_action:
|
|
252
|
+
self.tree.setRootIndex(
|
|
253
|
+
self.model.index(os.path.dirname(os.path.abspath(__package__)))
|
|
254
|
+
)
|
|
255
|
+
|
|
256
|
+
def _create_new_folder(self):
|
|
257
|
+
index = self.tree.currentIndex()
|
|
258
|
+
if not index.isValid():
|
|
259
|
+
return
|
|
260
|
+
|
|
261
|
+
path = self.model.filePath(index)
|
|
262
|
+
if not os.path.isdir(path):
|
|
263
|
+
path = os.path.dirname(path)
|
|
264
|
+
|
|
265
|
+
new_folder_name, ok = QtWidgets.QInputDialog.getText(
|
|
266
|
+
self, 'New Folder', 'Enter folder name:'
|
|
267
|
+
)
|
|
268
|
+
if ok and new_folder_name:
|
|
269
|
+
new_folder_path = os.path.join(path, new_folder_name)
|
|
270
|
+
try:
|
|
271
|
+
os.makedirs(new_folder_path)
|
|
272
|
+
except OSError as e:
|
|
273
|
+
QtWidgets.QMessageBox.critical(
|
|
274
|
+
self, 'Error', f'Could not create folder: {e}'
|
|
275
|
+
)
|
|
276
|
+
|
|
213
277
|
def tabifyDocks(self):
|
|
214
278
|
# Tabify docks
|
|
215
279
|
pass
|
|
@@ -285,23 +285,25 @@ class LocalizationsView(QtWidgets.QWidget):
|
|
|
285
285
|
ndarray or None
|
|
286
286
|
Rendered super-res image or None.
|
|
287
287
|
'''
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
continue
|
|
288
|
+
if not self.fittingResults:
|
|
289
|
+
return
|
|
291
290
|
|
|
292
|
-
|
|
293
|
-
continue
|
|
291
|
+
images = [None] * len(self.fittingResults)
|
|
294
292
|
|
|
295
|
-
|
|
296
|
-
|
|
293
|
+
render_idx = self.render_cbox.currentData()
|
|
294
|
+
projection = self.projection_cbox.currentData()
|
|
295
|
+
xy_bin = self.xy_binsize.value()
|
|
296
|
+
z_bin = self.z_binsize.value()
|
|
297
|
+
auto_levels = self.auto_level.isChecked()
|
|
298
|
+
|
|
299
|
+
renderer = BaseRenderer(xy_bin, z_bin, RenderModes(render_idx))
|
|
300
|
+
|
|
301
|
+
for idx, localizations in enumerate(self.fittingResults):
|
|
302
|
+
if not localizations or len(localizations) <= 0:
|
|
303
|
+
continue
|
|
297
304
|
|
|
298
|
-
renderClass = BaseRenderer(
|
|
299
|
-
self.xy_binsize.value(),
|
|
300
|
-
self.z_binsize.value(),
|
|
301
|
-
RenderModes(render_idx),
|
|
302
|
-
)
|
|
303
305
|
if 0 <= projection < 3:
|
|
304
|
-
|
|
306
|
+
rendered_img = renderer.render(
|
|
305
307
|
Projection(projection),
|
|
306
308
|
localizations.data[DataColumns.X],
|
|
307
309
|
localizations.data[DataColumns.Y],
|
|
@@ -309,29 +311,15 @@ class LocalizationsView(QtWidgets.QWidget):
|
|
|
309
311
|
localizations.data[DataColumns.INTENSITY],
|
|
310
312
|
)
|
|
311
313
|
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
)
|
|
315
|
-
|
|
316
|
-
if projection == 0:
|
|
317
|
-
self.view_box.setAspectLocked(True, 1)
|
|
318
|
-
else:
|
|
319
|
-
self.view_box.setAspectLocked(
|
|
320
|
-
True, self.xy_binsize.value() / self.z_binsize.value()
|
|
321
|
-
)
|
|
314
|
+
aspect = 1 if projection == 0 else xy_bin / z_bin
|
|
315
|
+
self.view_box.setAspectLocked(True, aspect)
|
|
322
316
|
elif 3 <= projection < 6:
|
|
323
|
-
projection
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
width = self.z_binsize.value()
|
|
328
|
-
else:
|
|
329
|
-
self.view_box.setAspectLocked(
|
|
330
|
-
True, self.xy_binsize.value() / self.z_binsize.value()
|
|
331
|
-
)
|
|
332
|
-
width = self.xy_binsize.value()
|
|
317
|
+
slice_proj = projection - 3
|
|
318
|
+
aspect = 1 if slice_proj == 0 else xy_bin / z_bin
|
|
319
|
+
self.view_box.setAspectLocked(True, aspect)
|
|
320
|
+
width = z_bin if slice_proj == 0 else xy_bin
|
|
333
321
|
|
|
334
|
-
|
|
322
|
+
rendered_img = renderer.render_slice(
|
|
335
323
|
Projection(projection),
|
|
336
324
|
localizations.data[DataColumns.X],
|
|
337
325
|
localizations.data[DataColumns.Y],
|
|
@@ -340,10 +328,13 @@ class LocalizationsView(QtWidgets.QWidget):
|
|
|
340
328
|
self.position.value(),
|
|
341
329
|
width,
|
|
342
330
|
)
|
|
331
|
+
else:
|
|
332
|
+
continue
|
|
343
333
|
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
334
|
+
self.setImage(rendered_img, index=idx, autoLevels=auto_levels)
|
|
335
|
+
images[idx] = rendered_img
|
|
336
|
+
|
|
337
|
+
return images
|
|
347
338
|
|
|
348
339
|
def extract_z(self):
|
|
349
340
|
'''Extract Z values from the fitting results.'''
|
|
@@ -1276,7 +1267,7 @@ class LocalizationsView(QtWidgets.QWidget):
|
|
|
1276
1267
|
)
|
|
1277
1268
|
|
|
1278
1269
|
if 'Super-res image' in options:
|
|
1279
|
-
sres_img = self.render_loc()
|
|
1270
|
+
sres_img = self.render_loc()[self.image_layers.currentIndex]
|
|
1280
1271
|
tf.imwrite(
|
|
1281
1272
|
re.sub(r'(\.h5|\.tsv)$', '_super_res.tif', filename),
|
|
1282
1273
|
sres_img,
|