presented by Matias Guijarro - BLISS team
Beamline Control Unit, Software Group
27th of November, 2018
of EBS beamlines
Spec is driving ESRF experiments since 26 years
Poor macro language
No continuous scan framework
Limited data management
No beamline-wide global configuration
Beamline Instrumentation Support Software
BLISS project goals
State-of-the-art beamline control
Continuous scans, Trajectories,
Command Line Interface, Configuration, Online data display
Ready for new challenges
Extensibility, user sequences
BLISS technical choices
Python library + set of tools
Configuration application, Command Line Interface, Online data visualisation application
online data analysis
Beacon: configuration, settings, broker
Beacon static configuration service
BLISS modular architecture
Support for Trajectories in Scans
Any trajectory can be described as discrete (Position, Velocity, Time) tuples
- default mode for many controllers
- BLISS Motor Controller framework allows to easily integrate trajectories
- currently implemented: PI E712, IcePAP
BLISS online data publishing
from bliss import * # imports generic scans, cleanup functions, etc from bliss.setup_globals import * # imports objects from session (setup) import numpy # I know you dreamt of it import gevent def set_detector_cover(in): wcidxx.set('detcover', in) # 5 seconds timeout waiting for detector cover to move with gevent.Timeout(5): while wcidxx.get('detcover_in') == in: time.sleep(0.1) def my_super_experiment(name): safety_shutter.open() old_att = attenuators.get() def restore_beamline(): set_detcover_open(False) attenuators.set(old_att) with cleanup(safety_shutter.close): with error_cleanup(restore_beamline): attenuators.set(50) set_detcover_open(True) SCAN_SAVING.name = name MEASUREMENT_GROUP.enable('diode') data_node = dscan(m0, -5, 5, 10, 0.1) for data in data_node.walk_data(): # do something useful with data...
with cleanup(safety_shutter.close): # cleanup is always called at the end with error_cleanup(restore_beamline): # only called in case of error ...
Use of Python context managers for cleanup
Normal Python functions
Easy timeouts with gevent.Timeout
# 5 seconds timeout waiting for detector cover to move with gevent.Timeout(5): while wcidxx.get('detcover_in') == in: time.sleep(0.1)
BLISS sequences (a.k.a "macros")
Current state of BLISS
... and developing at the same time...
Assessing the system on beamlines before the shutdown
Road to BLISS v1.0.0
Python 3.7: on-going (almost done !)
Documentation writing retreat: 6th of December, 2018
Feedback from users: 13th of December
3 new developers will join us in January
2019-2020: BLISS deployment during EBS shutdown
ID31, ID13, ID10, ID15A, ID21, ID19
ID11, ID16B, BM23, BM29, ID29, ID22, ID32
ID24, ID26, ID15B, ID16A, ID12, ID06, BM05
+ French CRG beamlines (1 engineer to be hired to help)
Diffractometers in BLISS
New development means lots of opportunities
New development means lots of questions
Diffractometers in BLISS
Calculations will be based on HKL library from F. Picca (SOLEIL), see next presentation
Still, many open questions
- how to define crystal and UB matrix ? command line vs GUI
- Saving, retrieving crystal lattice definition for reuse ?
- how to define reflection angles ?
- how to select mode ?
- how to add new geometries ?
- how to handle axes limits ?
- collisions check ? 3D modelling of diffractometer ?
- HKL trajectories scans
- how to handle multiple diffractometers ?
- metadata in HDF5 files: crystal info and what else ? In which form?
- which online data display ?
Not reinventing anything: inspiration to be taken from spec and experience from scientists
By Matias Guijarro