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