Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

New MM::StorageDevice and addition to the MMCore API #535

Draft
wants to merge 62 commits into
base: main
Choose a base branch
from

Conversation

go2scope
Copy link

@go2scope go2scope commented Dec 11, 2024

Overview

Introducing the new MM::StorageDevice. There are two main changes to the micro-manger back end: a new device type (Storage) and the extension of the MMCoreAPI. Both changes are lateral because they extend capabilities without affecting existing functionality. There are no new dependencies for the code base. Any existing client code, including the Micro-manager front end, can safely ignore this extension.

The new feature enables MMCore to save datasets on the back end using a storage device adapter. Developers can add support for various formats by creating device adapters like they would add support for a new camera. There are two significant advantages in utilizing this architecture:

The most important one is that the interface between the microscopy application and the file storage is defined by the MMCore API and allows for designing generic, storage/format-independent acquisition engines and acquisition scripts. To change the file format, we only change the device configuration, but the acquisition code remains the same. Or mainly the same, except for some specific properties - pretty much as what happens when we change the camera. Adding support for new file formats or using better implementations does not involve changing the existing code in any significant way.

The second advantage is that by embedding the storage implementation in the MMCore, we can achieve a higher efficiency (data rate), as images do not have to cross the MMCore API boundary.

Status

We plan on adding more documentation and some examples over the coming days and weeks. This PR is work in progress and only a draft to get some early feedback. Implementation is currently functional, but incomplete. Also, the micro-manager build for the new version may not be completely compatible with the main branch. This will be corrected in the next update.

To go over the new API, you can see MMCore.h and MMDevice.h. There are currently two device adapters: BigTiff (with chunking) and Zarr (based on https://github.com/acquire-project/acquire-driver-zarr), both located in the "go2scope" device library. The bigTiff adapter is fully functional, while the Zarr currently supports only writing, not reading.

We are still working on integrating the now MMCore back-end storage into the Micro-manager application (Java). It works but is still not ready for the PR.

Credits

Nathan Clack and the Chan Zuckerberg Initiative team provided material, advisory, and moral support for this effort. Nico Stuurman and Talley Lambert provided early feedback and help. Milos Jovanovic built the fully functional and highly efficient BigTiff adapter based on the early specification of the interface.

nenada and others added 30 commits March 28, 2024 11:24
…he system level to a different interface number
nenada and others added 28 commits October 15, 2024 14:14
# Conflicts:
#	DeviceAdapters/ArduinoCounter/ArduinoCounter.vcxproj
#	micromanager.sln
# Conflicts:
#	micromanager.sln
@go2scope go2scope marked this pull request as draft December 11, 2024 03:03
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants