Hello,
I would like to introduce you to a new open source project for scanning hardware and completing scientific experiments. It has been donated
to the Eclipse Foundation as an incubation project and has number of interesting features. The original project proposal can be read here:
https://projects.eclipse.org/proposals/scanning
However, I would like to point out some of the things it can do to you, as a subscriber to this list or person who has expressed an interest
in the past with the project.

Scan Paths
The start of a scan is the scan path. It is a series of n-Dimensional motor/scalar positions provided by a generator pattern - we call them
scan point generators. The possible paths are created using a factory, with each path requiring a model. The generators may be nested, limited only by their ability to be addressed. The paths scale to hundreds of millions of points because not all points are
created in memory at the start of the scan, so really large scans are possible. The paths are defined in Python to make it easy for scientists to create custom generators on the fly, in the unlikely event that they cannot achieve the type of scan required.
Unlimited regions of interest are allowed so the user may for instance create a grid and then draw various shapes to filter the scan points. A simple example of a scan path is a snake scan running over a grid of 2D positions of a stage motors for x and y.
Runnable Devices and Scannable Devices
When it comes time to run the scan, the motors and detectors are represented in code by the simple interfaces IRunnableDevice and IScannable.
These classes are each managed by an OSGi service which allows devices to be added by a Spring layer or by creating and registering them with the server in Python. Once they are added, they provide the link to the hardware such as Area Detector or EPICS PVs,
you can then start to run scans.
Scanning Algorithms
The scanning algorithm is also part of a factory pattern and allows users to override or create their own. The default algorithm uses the
power of Java Executor Service. It splits up the devices by a concept known as level and uses a fully multi-threaded design to move motors in the most efficient way. Motors are moved while detectors are read out and the file is written. For those motors in
a 2D scan which have a fast and slow axis on the same EPICS IOC, the power of the scan path design means that the code can look forwards to figure out each fast path segment and run lines close to the theoretical maximum.
User Interface
The project comes with a complete user interface for creating and running scans written in Eclipse RCP. The bundles which contribute the
UI are modular and may be removed for those people without an RCP front end. The user interface interacts seamlessly with the python layer giving the user either the ability to submit without scripting or, for advanced users, the ability to copy the scan command
into Python. It is easy to create Java-Swing, Python-QT or any front end because the scanning system is driven externally by JSON.
Python and Malcolm
The Scanning project is partly written in Python and partly Java. Most of the C-python device layer is contributed in a separate project
called pymalcolm
and the project interacts with Malcolm devices (which are IRunnableDevice) using the EPICSv4 protocol,
http://epics-pvdata.sourceforge.net/.
Eclipse January, NeXus HDF5 -SWMR
Scanning includes the implementation of the January concept “ILazyWriteableDataset”. This means that if you are creating a device, you only
need depend on January and your control layer (EPICS for instance). The device layer is modular and multi-threaded so it allows the full speed of HDF5-SWMR to be utilised without the need to mix up HDF5 and device code.
Online Analysis
For the first time, online analysis has been considered and designed into a scanning system from the start. This means that online analysis
codes running on the cluster can run processing SWMR files on the data during the live data collection. The user interface allows the choose between different analysis or even create your own graphically using DAWN and then deploy the analysis with the scan.
This is done efficiently using the new Single Write Multiple Read (SWMR) HDF5 library.
Builds and Tests
Scanning does not skimp on tests, it has hundreds of tests executing different scanning scenarios and different device options. It checks
operation of the algorithms with machine topup and beam dump scenarios, it writes HDF5 SWMR files and checks the supported scan point generators. It gives the user interface composites a workover using SWTBot. For the first time this layer has be abstracted
into a separately built (travisCi+maven) and tested(travisCI+junit+sonarqube) project which enables anyone to participate and contribute.
Getting Started
If you want to check out ‘Scanning’ and run it, providing you are experienced with targets and products it is easy to run by following these
instructions:
https://github.com/eclipse/scanning/blob/master/GETTINGSTARTED.pdf
Sincerely,
Matthew Gerring
This e-mail and any attachments may contain confidential, copyright and or privileged material, and are for the use of the intended addressee only. If you are not the intended addressee or an authorised recipient of the addressee please notify us of receipt by returning the e-mail and do not use, copy, retain, distribute or disclose the information in or attached to the e-mail.
Any opinions expressed within this e-mail are those of the individual and not necessarily of Diamond Light Source Ltd.
Diamond Light Source Ltd. cannot guarantee that this e-mail or any attachments are free from viruses and we cannot accept liability for any damage which you may sustain as a result of software viruses which may be transmitted in or with the message.
Diamond Light Source Limited (company no. 4375679). Registered in England and Wales with its registered office at Diamond House, Harwell Science and Innovation Campus, Didcot, Oxfordshire, OX11 0DE, United Kingdom