Leverage the SciPy Ecosystem

Bluesky enables scientists to leverage the scientific Python ecosystem at every stage of the experiment from data acquistion through data analysis.

Credit: Jake vanderPlas, "The Unexpected Effectiveness of Python in Science", PyCon 2017

Individually Useful Components

The scientific Python ecosystem is built on protocols, such as Numpy's array protocol, that enable software to be combined and repurposed in ways not foreseen by the original authors.

Drawing inspiration from this, the software libraries in the Bluesky Project interoperate through carefully-defined software interfaces. Any given piece may be separately used, extended, or replaced.

Bluesky — Experiment Specification & Orchestration

Bluesky, a library that shares the name of the overall project, is an experiment specification and orchestration engine.

  • Specify the logic of an experiment in a high-level, hardware-abstracted way.
  • First-class support for adaptive feedback between analysis and acquisition.
  • Data is emitted in a streaming fashion in standard Python data structures.
  • Pause/resume, robust error handling, and rich metadata capture are built in.
Learn about Bluesky »

Ophyd — Hardware Abstraction Layer

Ophyd puts the control layer (e.g. EPICS, HTTP, some serial protocol) behind a high-level interface. It keeps device-specific details contained.

  • Put the control layer behind a high-level interface.
  • Group individual signals into logical "Devices" to be configured and used as one unit.
  • Assign signals and devices human-friendly names that propagate into metadata.
  • Categorize signals by "kind" (primary reading, configuration, engineering/debugging).
Learn about Ophyd »
from ophyd import Device, Component, EpicsSignal

# Here we group signals into a Device

class XYStage(Device):
    x = Component(EpicsSignal, 'Mtr-X')
    y = Component(EpicsSignal, 'Mtr-Y')

# and connect to multiple instances
# of that device.

left_stage  = XYStage('Left-', name='left_stage')
right_stage = XYStage('Right-', name='right_stage')

Bluesky Queue Server — Remote Control of Experiments

Bluesky Queue Server allows users to create and remotely manage the queue of Bluesky plans and the environment for plan execution.

  • Extensive set of API for full remote access to server functionality.
  • Autonomous execution of sequenced Bluesky plans.
  • Remote monitoring of the server.
  • Bluesky Queue Server API package for easy development of client applications in Python.
Learn about Bluesky Queue Server »

Suitcase — Export / Serialization

Bluesky is file format-agnostic. Individual "suitcase" packages encode data and metadata from bluesky's in-memory data model to existing file formats.

  • Export can be performed during acquisition or later.
  • It is easy to write new "suitcases" for desired formats.
  • The destination does not have to be a file on disk: it could be an in-memory buffer or a web client.
Learn about Suitcase »
Supported formats so far include:
  • CSV
  • TIFF
  • SPEC file
  • msgpack
  • and other, technique- and instrument-specific formats

Data Broker — Rich Search and Access to Saved Data

Keeping scientific logic and I/O code separate makes important scientific code easier to maintain and reuse. Data Broker supports this by providing a programmatic interface to data, giving the user standard Python data strctures directly.

  • The system is unopinionated about data formats.
  • Any file I/O happens transparently: the user never sees files, just gets data in memory (e.g. a numpy array).
  • Your detector writes in a special format? Register a custom reader at runtime.
Learn about Data Broker »

"Event Model" — Bluesky's Data Model

Bluesky organizes data and metadata into documents that adhere to a schema. This schema is formalized but minimal and may be composed with existing standards.

Learn about Bluesky's Data Model »


Daniel Allan, Thomas Caswell, Stuart Campbell & Maksim Rakitin (2019) Bluesky's Ahead: A Multi-Facility Collaboration for an a la Carte Software Project for Data Acquisition and Management, Synchrotron Radiation News, 32:3, 19-22, DOI: 10.1080/08940886.2019.1608121

  author    = {Allan, Daniel and Caswell, Thomas and Campbell, Stuart and Rakitin, Maksim},
  journal   = {Synchrotron Radiation News},
  title     = {{Bluesky's Ahead: A Multi-Facility Collaboration for an a la Carte Software Project for Data Acquisition and Management}},
  year      = {2019},
  number    = {3},
  pages     = {19--22},
  volume    = {32},
  doi       = {10.1080/08940886.2019.1608121},
  publisher = {Taylor \& Francis},
  url       = {https://doi.org/10.1080/08940886.2019.1608121},