Architecture

At its core, Microscope is a Python library that provides a defined interface to microscope devices. Technically, Microscope aims to be:

  • Easy to use

  • Flexible

  • Fast

Python has become the de facto language for scientific computing. If most researchers are already familiar with it, it makes it easier to adopt since they don’t need to learn a new language. Python is also well know for being easy to learn.

In addition, Python has a terrific ecosystem for scientific computing, e.g., NumPy, SciPy and SciKits, or TensorFlow. One of the flexibility, is the ability to expand the control of individual to merge with the analysis. Having the whole Python scientific stack is great, makes it more flexible.

Flexibility also means ability to distribute devices. For this, Microscope was developed to support remote devices. This enables distribution of devices over multiple computers, an arbitrary number of devices, to provide any flexibility required.

Finally, despite common ideas that performance requires a compiled language such as C++, Python has been shown to be fast enough. Anyway, when push comes to shove, new microscopes have tight timing requirements, synchronization between multiple devices that can only be satisfied by real time software. Most devices have a mode of operation where they act on receive of a hardware trigger and many devices can act as source of triggers.