Commit 981fb8a
committed
microEye v2.4.0a3
___ __ __
/ _ | / /__ / / ___ _
/ __ |/ / _ \/ _ \/ _ `/
/_/ |_/_/ .__/_//_/\_,_/
/_/
What's New:
------------------------------------
Focus Stabilizer Refactor (v2.4.0a3)
------------------------------------
- Major refactor of the Focus Stabilizer backend and frontend:
- Modularized stabilization logic into `stabilization.controller`
and `stabilization.methods` submodules.
- Each axis (X, Y, Z) now has independent PID controller gains and
calibration coefficients.
- Outlier rejection for shift estimation is now configurable
(Standard Deviation, MAD, or None).
- Added support for XY stabilization and hybrid modalities (under
development).
- New data logging system for time, X/Y/Z shifts, and parameter
values.
- Visualization improvements:
- Z histogram, time log of X/Y/Z, XY scatter, and localization
overlays.
- All plots update in real time with stabilization.
- FocusStabilizerView and focusWidget updated for new parameter tree
and ROI management.
- Configuration save/load for all stabilizer and ROI parameters.
- Improved thread safety and async handling for stabilization
worker.
- Refactored stage and device manager integration for stabilization
toggling and lock state.
- All stabilization methods now use unified interface for parameter
fitting and shift calculation.
- Internal API changes:
- `FocusStabilizer` and `FocusStabilizerView` now use enums for all
axis and parameter references.
- `StageManager` and `DeviceManager` updated to use new
stabilization API.
- Controller widget now supports toggling XY and Z stabilization
independently.
- Added `FocusPlot` enum and unified plotting logic in
`focusWidget`.
- Camera/Acquisition/Stage:
- All camera classes now implement a `snap_image()` method for
single-frame acquisition (Basler, Vimba, uEye, Thorlabs,
PCO, PycroManager, Dummy).
- Improved dummy camera (`miDummy`) astigmatic fiducials pattern
simulation and parameters.
- `CameraManager` is now the singleton for all camera lists; all
references to `CameraList.CAMERAS` replaced with
`CameraManager.CAMERAS`.
- Acquisition manager and scan/z-stack logic updated to use new
focus stabilization API and per-axis calibration.
- KinesisXY and AbstractStage now use unified async worker logic and
busy checks.
- PycroStageXY async move logic improved and now waits for hardware
busy state.
- Spatial filter optimizations:
- Difference of Gaussians (DoG) and PointGaussFilter now use
`fftconvolve` for significantly improved filtering speed.
- Radial coordinate calculations for Fourier filters are now
Numba-accelerated for faster execution.
- General Refactoring:
- Moved focus stabilization logic out of monolithic files into
dedicated submodules under `stabilization/`.
- Minor bugfixes for timeouts, async workers, and config
serialization.
- Replaced all delay and timeout time measurements to use
`monotonic` clocks instead of `time` for improved reliability.
- Bugfixes:
- Fixed config loading to ensure Pycro-Manager instances and bridges
are started before device configuration is loaded, preventing
initialization errors.
-----------------
microEye v2.4.0a2
-----------------
-------------
Slides Widget
-------------
- Add a new `SlideWidget` for visualizing and selecting slide channels
- Support multiple slide types and channel geometries (sticky-Slide VI
0.4, μ-Slide VI 0.1, 8/18 Well)
- Implement interactive channel selection, highlight, and move-to-center
logic in `SlideWidget`
- Show current stage position and delta in info bar
- Draw position cross and center cross overlays
- Emit signals for channel selection and move the stage to the channel
center
- Add context menu for slide type, orientation (swap XY), and axis
inversion
- Persist and restore slide widget configuration (`slide`, `swap_xy`,
`invert_x`, `invert_y`) in `config.json`
- Add "Slides" dock to `miEye_module`
------------------------------------
Stage Metadata & Editable Parameters
------------------------------------
- Add editable X/Y/Z center and max parameters to `StageView` parameter
tree
- Add `get_center`, `set_center`, `get_max` methods to `AbstractStage`
for axis metadata
- Update `StageView` to support editing center/max for each axis
- Persist and restore center/max values in stage config
-------------
Stage Manager
-------------
- Implement `StageManager.center(axis)` to move X, Y, or Z stage to
editable center position
- Refactor `StageManager.move_absolute` to accept optional coordinates
and units
--------------
Device Manager
--------------
- Add unified `update_gui` methods to `DeviceManager` and `CameraList`
- Add `centerRequest` method which accepts `Axis` enum for stage
centering.
- Refactor main window timer to call widget GUI updates
------------------------------
Other Refactors & Improvements
------------------------------
- refactor `miEye_module` to accommodate all the changes and new
widgets.
- Add XY and Z "Center" buttons to the Controller widget for moving
stages to center positions
- Fix mouse event handling in `TiledImageSelector' for Qt6 compatibility
- Update `config.json` to persist new dock and widget states
-----------------
microEye v2.4.0a1
-----------------
--------------------------------------------------
Unified Abstract Stage Class & Stage View Refactor
--------------------------------------------------
- The `AbstractStage` class was refactored to unify the interface for
all stage types (Z, XY, multi-axis, etc.), supporting:
- Consistent axis handling via the `axes` property.
- Unified position, movement, and configuration methods for all axes.
- Standardized unit conversion and metadata storage.
- Improved signal handling for async operations.
- The new `StageView provides` a generic parameter tree UI for any
stage, automatically adapting to supported axes and serial
configuration.
- Legacy stage-specific views and controllers (e.g., PiezoConcept,
Kinesis) are now replaced or wrapped by the unified view.
----------------------------------
Stage Manager & Stage Manager View
----------------------------------
- Added `StageManager` singleton class to manage all connected stages,
their assignment to axes, and movement coordination.
- Supports adding/removing stages, axis assignment, and step/jump
configuration.
- Handles open/close, busy state, and movement requests for all axes.
- Added `StageManagerView` for GUI management of stages, drivers, axis
assignment, and step/jump sizes.
- Stages are now dynamically added/removed and assigned to axes via the
manager, supporting multiple hardware backends.
--------------
Device Manager
--------------
- Removed support for legacy stages and related stage selection logic.
- Updated stage management to use the new unified `StageManager` and its
API for adding/removing stages and axis assignment.
- Updated configuration loading/saving to use the new stage config
format.
-----------------------------------------
SmarAct Stage Support (Under Development)
-----------------------------------------
- Initial implementation of `MCS2Stage` for SmarAct MCS2 controllers.
- Device discovery, connection, and configuration support.
- Not yet fully integrated into the main GUI, but ready for further
development.
------------------------
Camera List Improvements
------------------------
- The `CameraList` now supports dynamic addition/removal of cameras,
including PycroManager and hardware cameras.
- Improved support for saving/loading camera configuration in the main
config file.
- Generalized population logic of available connected cameras.
-----------------
Base Camera Class
-----------------
- Added support for property trees and parameter updates for camera
settings.
- Improved ROI handling: added `set_roi`, `get_roi`, and `reset_roi`
methods.
- Added metadata retrieval with get_metadata.
- Implemented `update_cam` for dynamic parameter changes.
- Added class methods for available camera list enumeration.
------------
Camera Panel
------------
- Unified logic for exposure, framerate, ROI, and capture handling in
`Camera_Panel`.
- Removed duplicated exposure/framerate/ROI logic from subclasses
(Basler, Pycro, Dummy, IDS, Thorlabs, Vimba, PCO).
- Subclasses now delegate to base class for common parameter setup and
signal connections.
- Capture and update methods standardized; device-specific logic moved
to base class where possible.
- Clean up resources used by the camera panel using overrides of
`Camera_Panel.dispose` if needed.
- Subclass panels now only implement device-specific overrides and
minimal customizations.
---------------------
Basler Camera Support
---------------------
- Added full support for Basler cameras via the `Basler_Panel` and
`basler_cam`.
- Camera options, ROI, exposure, and acquisition are integrated into the
unified camera panel system.
- Basler cameras are now included in config save/load and dynamic camera
list management.
- SDK seems to conflict with Vimba and Vimba X SDK transport layers.
-----------------------------------
Allied Vision (Vimba X SDK) Support
-----------------------------------
- Updated support for Allied Vision cameras to use the new Vimba X SDK
(`vmbpy`), replacing legacy Vimba SDK.
- All Vimba-related panels and camera classes now use the new SDK and
are compatible with the unified camera panel and camera list system.
- Refactored the `with` context from the main scope to `vimba_cam`.
- SDK seems to conflict with Basler Pylon SDK transport layers.
------------------------
PycroManager Refactoring
------------------------
- PycroManager camera and stage classes are now split into their own
submodules:
- `PycroCamera` in `microEye/hardware/cams/pycromanager/pycro_cam.py`.
- `PycroStageZ` and `PycroStageXY` in
`microEye/hardware/stages/pycromanager/core.py`.
- `PycroPanel` in
`microEye/hardware/cams/pycromanager/pycro_panel.py`.
- Stage selection and port management are now handled via dialogs and
the stage manager.
-----------------------------
Save/Load Config Improvements
-----------------------------
- The config system now saves and loads all stages and cameras,
including their assignment, configuration, and dynamic
addition/removal.
- When loading a config, available stages and cameras are automatically
added if detected.
- Dock widget positions, visibility, and floating state are still
preserved in config.
------------------------------
Other Refactors & Improvements
------------------------------
- The miEye module has minor updates to accommodate the changes above.
- Updated controller and device views to use the new signal and
parameter system.
- The controller signals now use the improved `Axis` enum type for move
requests.
--------------
Future Updates
--------------
- Complete SmarAct MCS2 stage integration and testing.
- Develop the Focus Stabilization alternative modalities. (Under Dev)
- MacOS compatibility testing.
- Acquisition Experiments Designer tools.
- 3D Localization fitting from Experimental PSF.
- Introduction of 2D/3D Single-Particle Tracking.1 parent 128cc37 commit 981fb8a
32 files changed
Lines changed: 2422 additions & 922 deletions
File tree
- examples/miEye_scripts
- src/microEye
- analysis/filters
- hardware
- cams
- basler
- dummy
- pco
- pycromanager
- thorlabs
- ueye
- vimba
- lasers
- mieye
- protocols
- pycromanager
- stages
- kinesis
- pycromanager
- stabilization
- widgets
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
7 | 7 | | |
8 | 8 | | |
9 | 9 | | |
10 | | - | |
11 | | - | |
12 | | - | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
13 | 13 | | |
14 | 14 | | |
15 | | - | |
16 | | - | |
17 | | - | |
18 | | - | |
19 | | - | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
20 | 20 | | |
21 | 21 | | |
22 | 22 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | | - | |
| 1 | + | |
2 | 2 | | |
3 | 3 | | |
4 | 4 | | |
5 | | - | |
| 5 | + | |
6 | 6 | | |
7 | 7 | | |
8 | 8 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | | - | |
| 2 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
3 | 3 | | |
4 | 4 | | |
5 | 5 | | |
| 6 | + | |
6 | 7 | | |
7 | 8 | | |
8 | 9 | | |
| |||
64 | 65 | | |
65 | 66 | | |
66 | 67 | | |
67 | | - | |
68 | | - | |
69 | | - | |
70 | | - | |
71 | | - | |
72 | | - | |
73 | | - | |
74 | | - | |
75 | | - | |
76 | | - | |
77 | | - | |
78 | | - | |
79 | 68 | | |
80 | | - | |
81 | | - | |
82 | | - | |
| 69 | + | |
83 | 70 | | |
84 | 71 | | |
85 | 72 | | |
| |||
140 | 127 | | |
141 | 128 | | |
142 | 129 | | |
143 | | - | |
144 | | - | |
145 | | - | |
146 | | - | |
147 | | - | |
148 | | - | |
149 | | - | |
150 | | - | |
151 | | - | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
152 | 133 | | |
153 | 134 | | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
| 138 | + | |
154 | 139 | | |
155 | 140 | | |
156 | 141 | | |
| |||
171 | 156 | | |
172 | 157 | | |
173 | 158 | | |
| 159 | + | |
| 160 | + | |
| 161 | + | |
| 162 | + | |
| 163 | + | |
| 164 | + | |
| 165 | + | |
| 166 | + | |
| 167 | + | |
| 168 | + | |
| 169 | + | |
| 170 | + | |
| 171 | + | |
| 172 | + | |
| 173 | + | |
| 174 | + | |
| 175 | + | |
| 176 | + | |
| 177 | + | |
| 178 | + | |
| 179 | + | |
| 180 | + | |
| 181 | + | |
| 182 | + | |
174 | 183 | | |
175 | 184 | | |
176 | 185 | | |
| |||
241 | 250 | | |
242 | 251 | | |
243 | 252 | | |
244 | | - | |
245 | | - | |
246 | | - | |
247 | | - | |
248 | | - | |
249 | | - | |
250 | | - | |
251 | | - | |
| 253 | + | |
252 | 254 | | |
253 | 255 | | |
254 | 256 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | | - | |
| 2 | + | |
3 | 3 | | |
4 | 4 | | |
5 | 5 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
994 | 994 | | |
995 | 995 | | |
996 | 996 | | |
| 997 | + | |
| 998 | + | |
| 999 | + | |
997 | 1000 | | |
998 | 1001 | | |
999 | 1002 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
80 | 80 | | |
81 | 81 | | |
82 | 82 | | |
83 | | - | |
| 83 | + | |
| 84 | + | |
84 | 85 | | |
85 | | - | |
| 86 | + | |
86 | 87 | | |
87 | | - | |
88 | | - | |
89 | | - | |
| 88 | + | |
90 | 89 | | |
91 | 90 | | |
92 | 91 | | |
| |||
97 | 96 | | |
98 | 97 | | |
99 | 98 | | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
| 138 | + | |
| 139 | + | |
| 140 | + | |
| 141 | + | |
| 142 | + | |
| 143 | + | |
| 144 | + | |
| 145 | + | |
| 146 | + | |
| 147 | + | |
| 148 | + | |
| 149 | + | |
| 150 | + | |
| 151 | + | |
| 152 | + | |
| 153 | + | |
| 154 | + | |
100 | 155 | | |
101 | 156 | | |
102 | 157 | | |
| |||
108 | 163 | | |
109 | 164 | | |
110 | 165 | | |
| 166 | + | |
| 167 | + | |
111 | 168 | | |
112 | 169 | | |
113 | | - | |
114 | 170 | | |
115 | 171 | | |
116 | 172 | | |
| |||
172 | 228 | | |
173 | 229 | | |
174 | 230 | | |
175 | | - | |
176 | | - | |
177 | | - | |
178 | | - | |
179 | | - | |
180 | | - | |
181 | | - | |
182 | | - | |
183 | | - | |
184 | | - | |
185 | | - | |
| 231 | + | |
186 | 232 | | |
187 | 233 | | |
188 | 234 | | |
| |||
244 | 290 | | |
245 | 291 | | |
246 | 292 | | |
247 | | - | |
248 | 293 | | |
249 | 294 | | |
250 | 295 | | |
| |||
277 | 322 | | |
278 | 323 | | |
279 | 324 | | |
280 | | - | |
| 325 | + | |
281 | 326 | | |
282 | 327 | | |
283 | 328 | | |
| |||
344 | 389 | | |
345 | 390 | | |
346 | 391 | | |
347 | | - | |
| 392 | + | |
348 | 393 | | |
349 | 394 | | |
350 | 395 | | |
| |||
377 | 422 | | |
378 | 423 | | |
379 | 424 | | |
380 | | - | |
| 425 | + | |
381 | 426 | | |
382 | 427 | | |
383 | 428 | | |
| |||
485 | 530 | | |
486 | 531 | | |
487 | 532 | | |
488 | | - | |
| 533 | + | |
489 | 534 | | |
490 | 535 | | |
491 | 536 | | |
492 | 537 | | |
493 | 538 | | |
494 | 539 | | |
495 | | - | |
| 540 | + | |
496 | 541 | | |
497 | 542 | | |
498 | 543 | | |
499 | 544 | | |
500 | 545 | | |
501 | 546 | | |
502 | 547 | | |
503 | | - | |
| 548 | + | |
504 | 549 | | |
505 | 550 | | |
506 | 551 | | |
| |||
518 | 563 | | |
519 | 564 | | |
520 | 565 | | |
521 | | - | |
| 566 | + | |
522 | 567 | | |
523 | 568 | | |
524 | 569 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
133 | 133 | | |
134 | 134 | | |
135 | 135 | | |
136 | | - | |
| 136 | + | |
137 | 137 | | |
138 | 138 | | |
139 | 139 | | |
| |||
0 commit comments