Changelog¶
Full release notes. For the Git commit history see the GitHub repository.
Unreleased¶
Bugfixes 🐛¶
PSF analysis tool: fixed bead detection finding 0 beads (or crashing) on beads elongated/wiggly in Z (e.g. stage-jitter artifacts):
keepBeads()now keeps the brightest candidate among mutually-close peaks instead of discarding all of them, and 0 detected beads is reported in the UI instead of raising an uncaught error.PSF analysis tool: beads sitting too close to a Z-stack edge for the configured fitting window are now excluded (previously a window that exactly touched the edge was silently accepted, giving an unreliable, baseline-biased axial fit).
PSF analysis tool: FWHM histograms no longer silently drop beads with a measured FWHM below 1 µm. The histogram range’s lower bound was hardcoded to 1, so
ax.hist(..., range=(1, xmax))excluded any value under that from the bar counts entirely (not just from view) - noticeable e.g. with sub-micron lateral FWHM. Lower bound is now 0.PSF analysis tool now excludes beads with any saturated pixel (value at the numerical max of the file’s dtype, e.g. 65535 for uint16) within their fitting window, instead of only warning about saturation stack-wide at load time and fitting them anyway.
PSF analysis tool: fixed the axial/lateral FWHM standard deviation sometimes being huge (100s of µm in a stack only ~100 µm deep) while the median stayed reasonable.
curve_fit’s Gaussian sigma was unbounded, so a bead with a weak/noisy profile could occasionally converge on a degenerate, very broad “fit” (or even a negative sigma, giving a negative FWHM) that wildly skewed the std without affecting the (outlier-robust) median. Sigma is now bounded to the fitting window’s own extent.
GUI Improvements 🖥️¶
PSF analysis tool: axial (Z) fitting window is now a separate “Z fit window (µm)” control, independent of “Min dist betw beads (µm)”, so it can be widened for beads with a broad/wiggly axial profile without also enlarging the lateral crop. Default increased 15→30 µm.
PSF analysis tool: separate “Histogram X max” and “Colorbar max” controls for axial vs. lateral FWHM, to adjust the histogram/map display ranges independently and redraw the existing results, without re-running the analysis.
PSF analysis tool: PNG export now prints median ± std as a text line above each histogram.
PSF analysis tool: new File → Simulate… command generates a synthetic 3-bead stack of known FWHM using the current system parameters and runs the analysis, as a quick no-file-needed demo/sanity check.
PSF analysis tool: TIFF stacks can now be loaded by dragging and dropping the file onto the window, instead of only via File → Open TIF….
PSF analysis tool now launches as a separate OS process when opened from the Utils menu, instead of running inside mesoSPIM_control’s own process, so a long-running analysis can no longer block the Main window’s GUI.
PSF analysis tool: Save stats/PNG/average-PSF dialogs (and File → Open TIF…) now default to the folder the current stack was loaded from, instead of the working directory.
Release July 2026 [1.25.0]¶
New Features ✨¶
💎 Image Processor plugin system (beta version): configurable chain of post-processing steps applied to acquired images, with a new “Image Processor Chain” window for adding, reordering and tuning processors. Built-in processors include background subtraction, binning, Gaussian blur, Difference-of-Gaussians, and a neural-network based denoiser (with CUDA support and an auto-apply option). Processor chain configuration persists across sessions and is recorded in acquisition metadata.
💎 Timelapse acquisitions: New “Timelapse” tab to repeatedly run the configured acquisition list over time. Set the interval (hours/minutes/seconds) or enable “As fast as possible” (default on), and the number of time points. “Run Timelapse” starts the sequence (only available once “Enable Timelapse” is checked); “Stop” cancels any further time points. A new “Time Point” progress bar tracks the current time point, and “Total Progress” now spans the whole timelapse instead of resetting every time point.
💎 PSF (beads) analysis from a stack, launching the PSF analysis tool from within mesoSPIM_control (“Utils” menu), preloaded with either the most recently completed acquisition’s stack or a user-chosen TIFF file, with system magnification/pixel size/Z-step passed in automatically. Exports beads FWHM statistics and publication-ready graphs. “Save average PSF as TIF…” exports a peak-normalised, bead-centred sub-volume averaged across all detected beads (skipping beads too close to the image boundary), plus an image-saturation warning.
💎 Acquisition Manager: group rows by illumination/laser, “Group selected rows” and “Delete selected rows” buttons, and save/load the acquisition table as CSV.
Snap: file name prefix dialog before saving, pixel size now written into snap TIFF metadata, and a check that the snap folder still exists before saving.
“Save config file” button on the Parameters tab, writing current sweep, camera, laser, galvo and ETL settings back to the active config file.
Optional descriptive metadata and objective parameters in config files, included in acquisition metadata.
Hardware Control & Support 🔧¶
ASI stages: increased command precision (0.X → 0.XXX), fixed sub-micron interpolation, and added thread-safety locking for serial communication.
Auto Left/Right illumination now uses the median tile X position as the midline, instead of edge-only margins.
Bugfixes 🐛¶
Fixed BigStitcher OME-ZARR Z-scale and channel naming, scale metadata at different resolutions, via
scripts/fix_bigstitcher_zarr_export.pyFixed image processors causing GUI lockouts by using non-blocking cleanup connections.
Removed galvo amplitude from saved state to prevent zero-amplitude settings on reload.
Fixed Acquisition/Total Progress bars stalling below 100% at the end of an acquisition: an off-by-one in the image counter caused the final progress update to be silently dropped by Qt (out-of-range values are ignored, not clamped).
Fixed errors when launching the “Open image contrast window” button; improved responsiveness and capped the contrast ROI grid at 8×8. Contrast calculation now uses 0.1/99.9 percentiles instead of 1/99 for less clipping-sensitive results.
Z-Step spinbox in the Acquisition Manager table now accepts decimal values instead of rounding to the nearest integer.
PSF analysis tool: fixed the axial/lateral FWHM maps being flipped vertically relative to the underlying bead image (bead Y-coordinates were plotted in the wrong orientation relative to
imshow’s default origin).
GUI Improvements 🖥️¶
All GUI windows now automatically resize to fit the available screen resolution and are repositioned so they stay fully visible on smaller monitors.
Tile Overview and Webcam windows are arranged in the right-most quarter of the screen (stacked vertically) on startup.
Camera Window opens narrower (1200 px wide) by default.
Camera Window: new “Line roi” overlay — a draggable two-endpoint line segment (green) selectable from the overlay combo box; the status bar shows live length in pixels and µm.
Progress bar labels and bars (Acquisition/Time Point/Total Progress) use a smaller, consistent 12pt font to reduce vertical space.
More Pythonic, higher-contrast syntax highlighting (distinct colors for builtins, decorators, comments vs. strings, etc.) in the Script Editor window.
Z-step and F-step up/down button icons now have a linear-perspective taper (narrow/wide ends) for a more 3D look, replacing the flat up/down arrow icons.
PSF analysis tool: figure now always fills the window on first draw and after resize; PNG export always uses a fixed 12×9 in (4:3) canvas at 300 DPI for consistent output regardless of window size.
Menu bar reorganized: new “Plugins” menu (Processor Chain moved here from the View menu, and its separate standalone toolbar button removed) and new “Utils” menu (PSF analysis launcher).
Release February 2026 [1.20.0]¶
🚀 Major performance optimizations, new OME-ZARR multi-scale output format, and improved ASI stage support.
New Features ✨¶
💎 OME-ZARR multi-scale writer: Full support for OME-ZARR 0.4 (zarr v2) and 0.5 (zarr v3) formats with automatic multi-scale pyramid generation. Configurable output with write cache options.
💎 BigStitcher XML generation: Automatic generation of BigStitcher-compatible metadata files for seamless downstream image stitching and processing.
💎 PSF analysis GUI tool: Built-in Point Spread Function analysis tool for optical characterization and optimization. Configurable system magnification, voxel size, FOV dimensions, and minimum bead distance (
MIN_BEAD_DISTANCE_UM). Exported PNG files now include a descriptive title.Stage coordinates now included in OME-ZARR coordinate transforms for precise spatial metadata.
Filter name inclusion in acquisition filenames for better data organization.
Baud rate and wheel speed configuration options for Sutter filter wheels.
Consolidated ASI Tiger and MS2000 stage classes with shared trigger support.
Experimental Sham Imagewriter for testing and validation workflows.
Axis discovery and validation system for configured ASI stages.
Performance 🚀¶
🔥 Reduced GUI-induced stuttering and lockups during acquisition through improved thread synchronization and data handling.
Improved memory and core utilization efficiency for OME-ZARR downsampling and writing operations.
Optimized thread priority management for ASI Tiger stages.
Addition of
@timeddecorator for performance profiling of critical functions.
Hardware Control & Support 🔧¶
cDAQ hardware integration: Added support for National Instruments cDAQ devices for synchronized I/O operations.
ASI Tiger and MS2000 stages: Unified stage controller with enhanced axis handling, TTL trigger support, and multi-axis motion validation.
Improved serial communication thread safety for ASI stage commands to prevent conflicts between GUI and Core threads.
Axis list discovery from StageControlASITiger for dynamic stage configuration.
Relative and absolute movement testing and validation for both stage types.
Multi-process OME-ZARR writer support (#91) with configurable write cache for fast SSD drives (#97).
Bugfixes 🐛¶
Resolved GUI freezing and stuttering issues due to camera window
autorangefunction issue inpyqtgraphlibrary (#101).Fixed ASI hiccups and freezing by removing pause signals and ensuring Move button commands execute in Main (GUI) thread.
Fixed sticky frozen galvo state with proper
update_gui_from_state()synchronization.Fixed unzeroing galvo amplitude getting stuck during interactive optimization.
Support for multi-part file extensions (e.g.,
.ome.zarr) and dots in filenames (e.g.,Mag7.5).Proper handling of special characters in metadata (% signs removal, underscore replacement).
Fixed empty description handling in file name generation.
OME-ZARR tile naming now compatible with BigStitcher requirements.
Improved dimension naming for OME-ZARR arrays for better downstream tool compatibility.
User Interface & Configuration 🍭¶
New and updated config examples for Benchtop, mesoSPIM-v6, other systems
New cDAQ config example (
config_benchtop-cDAQ.py) for NI cDAQ-based systems.New mandatory dictionaries
plugins={},H5_BDV_Writer={},OME_Zarr_Writer={},MP_OME_Zarr_Writer={}in config files. Seedemo_config.py.Experimental high-speed imaging config file examples (up to 6-8 FPS framerate).
Option for asynchronous OME-ZARR file closure.
Optional multiscale generation control in config file.
Galvo phase widgets enabled for interactive optimization.
System Changes & Architecture 📐¶
Plugin system for image writers: Modular architecture allowing custom image writer implementations (#91).
Updated dependencies for Python 3.12 compatibility.
Improved async finalization process for large file writes.
Enhanced logging and debugging capabilities with time-stamped function profiling.
Deprecated buffering option configuration fully removed in favor of improved core performance.
Release September 2025 [1.11.1]¶
🚀 Overhaul of internal bootlnecks that hampered performance on some systems and caused GUI freezing / high CPU loads.
Bugfixes 🐛¶
fixed excessive communication between threads causing high CPU load on some systems.
moved
serial_workerintocorethread to avoid conflicts of relative motion operations with GUI thread.added CPU core identifiers for different operations in
debugmode or logging, to pinpoint performance issues.fixed autofocus (AF) function in the GUI.
returned
'camera_display_live_subsampling': 2,,'camera_display_acquisition_subsampling': 2,and'camera_display_temporal_subsampling': 2,into the config file, to reduce camera display load on older computers.fixed light-sheet markers and box ROI markers in the Camera window, which were not displayed correctly after zoom change.
Release March 2025 [1.11.0].¶
Performance 🚀¶
implementation of time lapse function via script. See example script at
mesoSPIM/scripts/timelapse.pyfor details.images can now be displayed at full resolution during either live mode or acquisition, with no performance penalty. Deprecated config parameters:
'camera_display_live_subsampling': 2,
'camera_display_acquisition_subsampling': 2,
to enjoy full-resolution image in real time. The corresponding GUI elements for controlling the downsampling were removed.
Bugfixes 🐛¶
duplication of sub-stacks while writing large H5 files (>0.5 TB) and freezing at the end of acquisition. Fixed by replacing signal/slot mechanism for CameraWindow image update to deque mechanism. Boosted performance and stability.
MAXprojection is always on by default, if the dataset is asvaed in TIFF or RAW format. No need to check the box in the Image Processing Wizard. This generates maximum intensity projection as TIFF file for each stack in the acquisition list.explicit initialization of the first raw in Acquisition Manager, to avoid undefined GUI widget states.
Release December 2024 [1.10.2].¶
Performance 🚀¶
migration to Python 3.12 for better performance and compatibility with the latest libraries.
faster loading and response time of the GUI
subsampling of the camera image for less frequent rendering in the GUI (less CPU load) during acquisition, controlled by
'camera_display_temporal_subsampling': 2,parameter in the config file. Value1means no subsampling (show every image during acquisition).change recommended package manager to
mambato avoid Anaconda license issues.change the default timer for stage position update from 50 ms to 100 ms, to reduce communication and logging overhead. ASI stages updated every 200 ms, PI stages every 100 ms.
zoom dictionary can include multi-word names like
5x Mitutoyoinstead of5xfor better UI and meta-infomation.spinboxes are limited in scroll speed to allow hardware catch up with UI in the interactive mode
#82: uploading UCL-Bechtop config file
config/examples/config_benchtop_UCL_5laser.pyby @TchLenn and parsing of double-digit strings likeao21:22in config file.remove
Logtab from the GUI, as it was not used by the users and was causing unnecessary overhead, esp. in DEBUG mode.
User Interface 🍭¶
ETL config files (.csv) are automatically checked and updated with the
laser-zoomcombination selected in GUI, to avoid errors in the acquisition. User can even start with an empty ETL config file, it will be auto-filled with thelaser-zoomcombinations on the go.more tooltips added to the GUI elements for better user experience.
🔧 system changes¶
pip depenencies are frozen for staibilty
mesoSPIM_Stateis only nominally a singleton, but actually inherited by classes from their parent class to ensure unique state and thread safety.no signal from
mesoSPIM_Stateevery time the state is updated. The GUI is updated from state by a separate signal/slot from member classes, on demand.bugfix: serial communication with ASI stages is now thread-safe, with no conflicts between GUI (Main) and Core threads.
bugfix: parsing config file with either
'laser_task_line' : 'PXI6733/ao0:3'or'/PXI6733/ao0:3'notation (Alan Watson).
Release candidate August 2024 [1.10.0]. Cancelled due to performance issues on some setups.¶
Performance 🚀¶
improved acquisition speed from 2.5 to 5 FPS, by moving image writing to a separate thread and using
collections.dequemechanism for frame sharing between the camera and image writing threads, instead of less-performantQThreadsignal/slot mechanism.best writing speed and lowest CPU overhead is achieved with NVMe SSD disks, recommended.
the option
buffering = {...}in config file is deprecated from v.1.10.0 and will be ignored, due to improved program performance.dependencies are updated to the latest versions:
numpy,scipy,tifffile, etc.
Release July 2024 [1.9.0]¶
User Interface 🍭¶
💎 “Auto L/R illumination” button in the Acquisition manager to select tile illumination based on its x-position.
💎 A long awaited feature: Tile Overview window (View/Open Tile Overview), showing the entire acquisition area with tile positions, their overlap, and current FOV position relative to them.
Some setups need to flip x- and/or y-stage polarity for correct tile display: use
'flip_XYZFT_button_polarity': (True, False, False, False, False),in the config file.
💎 Center Button added in the Main Window GUI, for bringing the sample holder in the X- and Z- center relative to the light-sheet and detection objective.
during acqusition, the currently acquiring row is highlighted in Acquisition Manager and in Tile Overview windows. This has to be set up in the config file with
'x_center_position'and'z_center_position'parameters for stage motion.Buttons for movement in horizontal plane got shorter, for more intuitive navigation.
Current FPS shown in the progress bar.
Webcam window always opens at startup, empty if no camera is present in config file:
'usb_webcam_ID': 0, # open USB web-camera (if available): None, 0 (first cam), 1 (second cam), ...Tooltips were added to the navigation buttons.
Bugfixes 🐛¶
occasional glitch with ASI stages caused by updating stage positions between acquisitions, with serial communication going in two separate threads (mainWindow vs Core).
check motion limits for all tiles before starting the acquisition list, in absolute or relative coodinates (zeroed axes or not).
estimated remaining acquisition time is now calculated correctly, based on the current frame rate.
sample centering and objectiv exchange positions work also when in zeroed-stage regime (local coordinates, user-defined). No need to inactivate
Zero F-stagebutton for safe revolver operation.
Release February 2024 [1.8.3]¶
User Interface 🍭¶
💎 Light-sheet direction is shown in the camera window as an image overlay. It interactively changes depending on the Left/Right/Both arms illimination state.
Hardware control 🔧¶
Support of Mitutoyo 5-position objective turret (revolver, part #378-726D), for mesoSPIM v4-5 upgrade.
Safety movement of the focus stage backward to
f_objective_exchangeposition for motorized objective exchange. Thef_objective_exchangeparameter is defined in the config file.Optional buffering of images into RAM and flushing to disk when RAM is full or the stack is finished, PR#72 by @AlanMWatson. Controlled by adding
bufferingdictionary to the config file.support of ZWO 2” 7-position filterwheel support (PR#79 by Fabian Voigt)
checks and warnings for AO maximum voltage range (5V or 10V, which depends on hardware, but can be damaging if not set correctly).
Bugfixes 🐛¶
incorrect focus stage steps when interpolating between two focus positions in a stack. Reported and tested by Ivana Gantar and Laura Batti (Wyss Center Geneva). Affected small-amplitude focus interpolation, where required F-stage steps between planes were smaller than minimum feasible stage step. The minimum feasible stage step changed from 0.1 to 0.25 µm in function
get_focus_stepsize_generator(self, f_stage_min_step_um=0.25).no more dropped frames during long acquisitions with slow disks.
Release January 2023 [1.8.2]¶
Hardware control¶
New filter wheel ZWO EFWmini supported
added
'speed'config parameter for ASI Tiger controller that allows to change default speed settings.more config examples from various systems were uploaded.
User interface¶
official mesoSPIM logo is uploaded, also for use as desktop icon (mesoSPIM-logo.ico)
non-relevant ETL settings are grayed out depending on the left/right illumination to minimize confusion during ETL optimization (#71).
for slow stages the Move buttons can be set to sleep for N ms to limit the click frequency from the user (prevent stage runout): paremeter
'button_sleep_ms_xyzft' : (250, 0, 250, 0, 0),in the config file.file names now include magnification and rotation (if several rotations are present)
GUI allows to change
scale_galvo_amp_with_zoomflag interactively,developer-only GUI sections have smaller font and are marked as such,
STOP Stages button is big red.
Bug fixes¶
tile translation metadata in XML/H5 data were transposed in some configurations (x-y)
'etl_l_delay_%'config parameter was updated to avoid edge artifacts in ETL scanningin auto-focus optimization pipeline, the first image of the sequence was incorrect
Release November 2022 [1.8.1]¶
Hardware control¶
✨ Galvo amplitude can be automatically rescaled depending on selected zoom.
Add scale_galvo_amp_with_zoom = True to config file to enable this feature.
🔧 Galvo and ETL of non-active arm are held still to minimize unnecessary heating and stress.
💎 Optional webcam window can be opened (e.g. for sample overview)
Logging and data management¶
🔧 Logging can be defined in config file using logging_level = 'DEBUG' parameter (possible values INFO,DEBUG).
🔧 Log messages are printed in Log tab for quick review, in addition to the log file.
💎 BigTIFF file support
User interface¶
🔧 User is forced to select clearing-specific ETL parameters file (e.g. ETL-CLARITY-cuvette40x40.csv) at the startup, to avoid non-optimal default settings (often forgotten step).
💎 Acquisition Manager shows estimated dataset size (GB) before acquisition to help planning data management.
💎 Disk space check: if the disk has insufficient free space, acquisition does not start (shows error message).
✨ New icon for the desktop shortcut.
💎 Optional Image Contrast window can be opened from Alignment Tab (for calibration purposes)
🔧 Multi-tile wizard can have up to 4 channels (previously max: 3).
🔧 Version management can now be done using PyPi: pip install mesospim-control.
Control software can be launched in Anaconda prompt from any folder, by mesospim-control command.
Beware that installation path is determined by Anaconda and can be deep (inconvenient). Feature for developers.
💎 Stage position indicators turn red if stage is within 1 mm from software limits.
💎 Main Window > View > Cascade windows to bring all windows to screen center (for small screens).
🔧 Config file simplified, redundant blocks removed (galvo_etl_designation, laser_designation), warnings are issued if deprecated blocks are present.
🔧 Remove F-stage homing to startfocus position, since it added overhead (manual focusing) every time the software was restarted.
Bug fixes¶
🐛 laser lines were hard-coded 0:7, irrespective of config file settings.
🐛 PI stage did not send position updates properly due to missing signal/slot connection: stages were frequently stuck outside of allowed range.
🐛 Image and metadata files are closed properly if the acquisition is aborted.
🐛 npy2bdv was creating XML files unreadabla for Imaris, due to extra spaces between affine transofmration matrix values.
Fixed in npy2bdv==1.0.8, upgrade via pip install -U npy2bdv.
Benchtop hardware support¶
💎 All DAQ waveforms can be generated by a single NI-6733 card (up to 4 laser lines).
💎 ASI Tiger stage controller, with TTL triggering option.
💎 Photometrics Iris 15 camera
💎 Arm switching / shutter control by shutterswitch parameter in config file.
💎 DIY filter wheel, driven by Dynamixel servo (same model as V5 zoom servo)
🐛 fix: ASI Tiger communication issues resolved, multithreading simplified.
Release November 2021 [1.7.1]¶
✨ TIFF file name pattern for multi-tile/channel datasets is fully compatible with BigStitcher auto-loader, no renaming is needed.
🐛 fix: Files must always have extension (currently one of .tiff, .tif, .raw, .h5). Files without extension return an error.
⚠️ Default file format for data saving has changed to .h5 for streamlined import into BigStitcher.
💎 💎 💎 Autofocus has been added and works beautifully, outperforming expert human in focusing accuracy by 10x. Highly recommended!
🐛 fix: Going back to previously configured channel in the Tiling Manager appended a new channel to the acquisition list, rather than amending it.
✨ Laser intensity can be edited directly via spinbox, alternative to slider. In Acquisition manager, slider is replaced by a spinbox for convenience. ⚠️ This change makes old acq tables incompatible with the new software.
✨ Mark All button is added to the Acquisition Manager, per @raacampbell request.
♻️ Buttons Mark Rotation Position and Go To Rotation Position are removed from the main panel,
since they are redundant and rarely (if ever) used. Rotation position can be marked in the Acquisition Manager,
and one can go to rotation position by using increment buttons.
🐛 fixed: Image processing option generates MAX projections as TIFF files when output file format is either .raw or .tiff, #60.
✨ File name wizard auto-starts after Tiling Wizard.
💎 Image sharpness metric of user-defined ROI (by DCTS algorithm) is added to the Camera Window for easier adjustment of focus and ETL values.
💎 TIFF files can be opened for preview: Ctrl + O.
💎 Button Freeze galvos is added to ETL tab for quick adjustment of ETL parameters outside of sample, see video tutorial.
⚠️ Recommended Python upgrade to 3.7 because some libraries have limited support for 3.6 (e.g. tifffile).
💎 💎 Saving datasets as ImageJ TIFF files, including big ones (Fiji TIFF format that allows > 4 GB size). Voxel dimension saved in TIFF metadata.
Release July 2021 [1.6.0]¶
💎 Simplified installation and upgrading via pip install -r requirements-anaconda.txt. See installation instructions.
💎 Easy launching via double-clicking start_mesoSPIM.bat file (needs to be configured by the user).
💎 Support of multiple PI single-axis controllers, thanks to #52 by @drchrisch.
Note the changes in config file: single multi-axis controller (C-884) is initialized by 'PI_1controllerNstages',
while multiple single-axis controllers (C-663) by 'PI_NcontrollersNstages'.
🐛 Incorrect tiling count (off by -1 in some cases) is fixed.
[0.1.5]¶
💎 Improved Tiling Wizard:
buttons
x-start, x-end, y-start, y-endadded for easier navigation: no need to search for corners of imaginary box around the sample.left, then rightilluminations can be created automatically for each tile: no need for manual duplication and changing the illumination directions in the Acquisition Manager.
💎 Improved saving options in Fiji/BigStitcher H5 format:
laser,illumination,angleattributes are saved in the BigStitcher XML file.(optional) downsampling and compression are supported.
💎 Image window got
Adjust levelsbutton for automatic intensity adjustment.💎 Image window got optional
Box overlayto help measure sample dimensions.🔍 Tests for tiling and serial communication are created.
🐛 Bugfix: long-standing
permission deniedissues with serial communication to filter wheel and zoom servo are fixed. The fix opens serial ports once and keeps them open during the session. The root cause was due to laser control software polling serial ports regularly, thus blocking access to them.
[0.1.4]¶
⚠️ Config files need to be updated Please note: Updating to this version requires updating your microscope configuration file. Please copy the new configuration options from the
demo_config.pyfile into your config files.⚠️ 💎 New handling of config files - If there is a single config file (without a ‘demo’ prefix in the filename and apart from the
demo_config.py-file) in the config folder, the software will automatically load this file. Otherwise, the config selection GUI is opened. This is especially helpful when operating a mesoSPIM with multiple users. Thanks to @raacampbell for this feature!💎 New: Writing HDF5 - If all rows in the acquistion manager contain the same file name (ending in
.h5), the entire acquisition list will be saved in a single hdf5 file and a XML created automatically. Both can then be loaded into Bigstitcher for stitching & multiview fusion. This file format is also readable by Imaris. For this, thenpy2bdvpackage by @nvladimus needs to be installed via pip.💎 New: Dark mode - If the
dark_modeoption in the config file is set toTrue, the user interface appears in a dark mode. For this, theqdarkstylepackage needs to be installed viapython -m pip install qdarkstyle.💎 New: Camera and Acquisition Manager Windows can be reopened - A new menu allows the camera and acquisition manager windows to be reopened in case they get closed. The same menu bar allows exiting the program as well.
💎 New: Disabling arrow buttons - To allow mesoSPIM configurations with less than 5 motorized stages, the arrow buttons in the main window can now be disabled in the configuration file. Typical examples are a mesoSPIM without a rotation stage or a mesoSPIM using only a single motorized z-stage. This feature can also be useful if the serial connection to the stages is too slow and pressing the arrow buttons leads to incorrect movements.
💎 Interactive IPython console - If the software is launched via
python mesoSPIM-control.py -C, an interactive IPython console is launched for debugging. Feature by @raacampbell.💎 Command-line demo mode option - If the software is launched via
python mesoSPIM-control.py -D, it launches automatically into demo mode. Feature by @raacampbell.💎 New: Support for PCO cameras - PCO cameras with lightsheet mode are now supported. For this the
pcoPython package needs to be installed viapython -m pip install pco. Currently, the only tested camera is the PCO panda 4.2 bi with lightsheet firmware.💎 New: Support for Sutter Lambda 10B Filter Controller Thanks to Kevin Dean @AdvancedImagingUTSW, Sutter filter wheels are now supported.
💎 New: Support for Physik Instrumente stepper motor stages in a XYZ configuration Thanks to @drchrisch, a mesoSPIM configuration (‘PI_xyz’) using stepper motor stages for sample movement is now supported. Please note that this is currently not supporting focus movements or sample rotations.
💎 New: Support for Physik Instrumente C-863 controller in a single-stage config To allow setting up a simplified mesoSPIM using only a single motorized z-stage (all other stages need to be manually operated), the combination of the C-863 motor controller and L-509 stage is now supported (‘PI_z’)
✨ Improvement: Disabling movement buttons in the GUI By modifying the
ui_optionsdictionary in the configuration file, the X,Y,Z, focus, rotation, and load/unload buttons can be disabled. This allows modifing the UI for mesoSPIM setups which do not utilize the full set of 5 axes. Disabled buttons are greyed out.✨ Improvement: Updated multicolor tiling wizard The tiling wizard now displays the FOV size and calculates the X and Y FOV offsets using a percentage setting. For this, the pixel size settings in the configuration file need to be set correctly.
✨ Improvement: Physik Instrumente stages now report their referencing status after startup in the logfile This allows for easier diagnosis of unreferenced stages during startup. Feature by @raacampbell.
🐛 Bugfix: Binning was not working properly with all cameras.
🐛 Bugfix: Removed unnecessary imports.
🐛 Bugfix: Laser power setting
max_laser_voltagewas always 10V, ignoring the config file. This can damage some lasers that operate on lower command voltage.
Release March 13, 2020 [0.1.3]¶
⚠️ Depending on your microscope configuration, this release breaks backward compatibility with previous configuration files. If necessary, update your configuration file using
demo_config.pyas an example.⚠️ There are new startup parameters in the config file - make sure to update your config files accordingly. For example,
average_frame_ratehas been added.⚠️ This release removes unnecessary configuration files from the public repository - make sure to back up your mesoSPIM & ETL configuration files beforehand. In addition, old example acquisition tables (in
mesoSPIM-control\mesoSPIM\acquisitions\) are removed as well.💎 New: Support for more cameras: Photometrics cameras are now supported if
PyVCAMand the PVCAM-SDK are installed. Only the Iris 15 has been tested so far. In addition, the Hamamatsu Orca Fusion is now supported.💎 New: Multicolor tiling wizard: The Tiling wizard can now support up to 3 color channels with different ETL parameters and focus tracking settings.
💎 New: Full demo mode - addresses #16:
mesoSPIM-controlcan now be run without any microscope hardware by using thedemo_config.pyconfiguration file.💎 New: Snap function – Single pictures can now be taken by clicking the snap button. The filename is autogenerated from the current time. Files are saved as
.tifwhich requirestifffileas an additional library.💎 New: Acquisition time prediction –
mesoSPIM-controlnow measures the average framerate every 100 frames to predict the acquisition time. To have a correct initial estimate in theAcquisition Manager, please update theaverage_frame_ratewith the measured values from your microscope (are now logged in the metadata files after an acquisition).💎 New: Focus tracking – Different start and end focus positions can now be specified in the Acquisition Manager. When moving the sample to acquire the stack, the microscope changes focus according to a linear interpolation between these values. At z_start, the microscope moves the detection path to f_start and at z_end, the detection path focus is at z_end. This allows imaging a liquid-filled sample cuvette without an immersion cuvette. The
Mark current focusbutton changes both values at once.💎 New: Improved acquisition previews – An additional checkbox allows to switch off Z axis movements when previewing acquisitions. This way, the field-of-view does not move outside of the sample which is especially helpful when updating ETL value for individual tiles/stacks in large acquisition tables. ⚠️ When previewing an acquistion requires a rotation, z movements still occur for safety reasons.
💎 New: Image Processing Wizard:
mesoSPIM-controlnow has an Image Processing Wizard (accessible via a button in theAcquisition Manager). Currently, this allows maximum projections to be generated automatically after acquisitions.✨ Improvement:
Acquisition Manager: Naming of buttons has been improved, in addition, tooltips have been added to improve usability.✨ Improvement: Removed unnecessary microscope and ETL configuration files cluttering the repository. Changed
.gitignorecorrespondingly - future changes to configuration files. This addresses issue #16.✨ Improvement: The software now provides more verbose warnings when acquisitions cannot be started due to missing folders, duplicated filenames and already existing files.
✨ Improvement: Better warnings if no row is selected while clicking Mark buttons.
✨ New: Added a
CHANGELOG.mdfile🐛 Bugfix: Manually entering a value in a field in the Acquisition Manager table would change values in other rows as well if the row had been copied before.
🐛 Bugfix: Mark buttons and dropdown menus in the Acquisition Manager table slowed down the GUI when a lot of rows (>25) were present. As a fix, only the selected row shows the menu.
🐛 Bugfix #26: Fixed: First row is selected by mark buttons by default if only a single row exists in the Acquisition Manager Table
🐛 Bugfix #27: Fixed: Entering text into boxes is a bit buggy
🐛 Bugfix #30: Fixed: Zooming drop down menu often fails to update after a zoom
🐛 Bugfix #31: Fixed:
demo_config.pynow contains subsampling settings🐛 Bugfix #34: Fixed: Last frame in a stack is blank due to an off-by-one error
🐛 Bugfix #35: Fixed: Software crashes when one folder (to save data in) in the acquisition list does not exist
Release August 19th, 2019 [0.1.2]¶
New: Logging is now supported. Logfiles go in the
logfolder.New: Improved support for a specific mesoSPIM configuration using sample & focusing stages by Steinmayer Mechantronik and in combination with PI stages for sample rotation and z-movement.
Fix: Reduced the output to the command line
Fix: To decrease laggyness of the GUI in live mode and during acquisitions, display subsampling is now available. This way, less image data has to be rendered by the GUI.
Fix: Fixed a variety of multithreading bugs.
Fix: Galvo amplitude and frequency in the startup part of the configuration file are now used to set startup parameters properly