The M25 acquisition engine is a C++ multithreaded program that controls the acquisition of the 25-plane camera array multifocus microscope (M25) for fast and simultaneous 3D imaging. The engine captures simultaneously from 25 machine vision cameras (FLIR or Basler Ace) to run at >160FPS without loss of frames to capture fast and live 3D dynamics of biological organisms.
Check out our journal_article and napari plugin to see the capabilities and applications of the engine.
The M25 acquisition engine is a multithreaded program that spawns individual read and write threads per camera to offload the data into a disk. This program uses the Windows OS Windows SDK File Handler
library for rapid storage into NVMe SSD Raid 0 arrays. Using this library we can bypass the default read and write functions by buffering with a pre-allocated RAM memory aligned to the file-system offsets. The NVMe drives are 512B sector aligned which allows us to do direct disk writing to known locations doing pointer arithmetic. We create individual acquisition threads for each camera and copy the sensor data into the sector-aligned buffer. The read-and-write process is done dynamically by implementing the RAM ping-pong buffer that allows the writing directly to RAM and then writing to disk into a binary file. Once the acquisition is done, the binary file is converted to desired file format (i.e .raw
or .tif
).
C++20
- 1.2.6.0 -Libusb: https://sourceforge.net/projects/libusb-win32/
- 1.78 - Boost: https://www.boost.org/users/history/version_1_78_0.html
- Disabling windows indexing for Hard Drives LINK
This engine can be used as CLI or Napari Plugin. Depending on what cameras the you have setup the scope use the following folders to compile the .exe
basler
- Basler camerasflir
- FLIR cameras
dev
- development (deprecated)
This project is licensed under BSD-3-clause License -- see the LICENSE for more details.