Beamline Startup: EPICS and Bluesky

Currently the beamline devices are all controlled via EPICS, and the data collection orchestrated via the Bluesky Ecosystem. Each of these systems must be started to render the beamline operational.

Note

This system is still under development at SSRL. Many tasks may seem tedious, but there is significant room for streamlining the process. Please view this list of startup items in that lens, and be patient.

To start up EPICS, the IOCs (Input-Output Controllers) must be started. Each set of devices has its own IOC

EPICS:

These IOCs will eventually be bundled into a single command, but for now each must be started individually. IOC’s are currently housed on blueepicslx.slac.stanford.edu. The patten is the same, navigate to the correct folder and run the st.cmd script file. IOC’s should be started with sudo access, via the specadm account.

IMS motors (stage px, py, pz)

[specadm@blueepicslx ~]$ cd /opt/EPICS/3.14/iocs/motor/iocBoot/ioc-ims/
[specadm@blueepicslx ~]$ ./st.cmd

PICO motors (stage vx, vy)

[specadm@blueepicslx ~]$ cd /opt/EPICS/3.14/iocs/motor/iocBoot/ioc-picoPMNC87xx/
[specadm@blueepicslx ~]$ ./st.cmd

Galil RIO (laser range finder, I0, I1, shutter)

[specadm@blueepicslx ~]$ cd /opt/EPICS/3.14/iocs/galil_rio/iocBoot/ioc-galil-rio/
[specadm@blueepicslx ~]$ ./st.cmd

XSPRESS3 (multi channel fluorescence detector)

Sometimes EPICS is misconfigured. Check to make sure the environment variable EPICS_CAS_INTF_ADDR_LIST is not set. You can unset this once ssh’d into the XSPRESS3 computer. It appears that this variable is reset when the xspress3 computer is restarted

This IOC is best started on the xspress3 computer directly:

[xspress3@xspress3 ~]$ env | grep CA
EPICS_CAS_INTF_ADDR_LIST=localhost
EPICS_CA_AUTO_ADDR_LIST=NO
EPICS_CA_ADDR_LIST=localhost
[xspress3@xspress3 ~]$ unset EPICS_CAS_INTF_ADDR_LIST

Starting the ioc can be done either from bluedev via the alias xspress3-2-ioc:

(collect) [b_spec@bluedevlx ~]$ xspress3-2-ioc

Or from the xspress3 box directly:

[xspress3@xspress3 ~]$ /usr/bin/xspress3-ioc.sh

Area Detector (MarCCD)

The IOC for the mar detector must be on and have access to the data directory (/home/data). At the moment this necessitates starting from BlueDevLX.

(collect) [b_spec@bluedevlx ~]$ cd iocs/marCCD/iocBoot/ioc-marCCD/
(collect) [b_spec@bluedevlx ioc-marCCD]$ ./st.cmd

Profile Configuration:

Detector Change

From Bluesky’s point of view, a device is initialized when its constructor is called. This is done when the device configuration file is imported. Thus, to activate a device, simply add it to the import list in <ipython_profile_dir>/instrument/devices/__init__.py. This is true for any device, not just detectors.

from .stages import *
from .xspress3 import *
from .dexela import *
# from .marCCD import *
# from .pilatus import *
from .misc_devices import *

Bluesky:

Bluesky runs in an interactive ipython console, which can be started with the alias bluesky on bluedevlx.slac.stanford.edu:

(collect) [b_spec@bluedevlx ~]$ bluesky

This will run a series of startup scripts which, among other things, start the RunEngine and connect to the database. If any modifications need to be made to these files, they are located in ~/ipystartup

Importantly, if any of the above IOC’s are not started, Bluesky will fail to start. Bluesky attempts to connect to each device, and if one is not available the startup process fails. Error messages should reveal which IOC’s are not running, if problems arise.

Before editing these files, please contact Robert Tang-Kong (roberttk at slac).

User Information

When a new user gets started at the beamline, the RunEngine needs to record that user’s information. The metadata associated with all runs is stored in the RunEngine itself, and can be changed with the following syntax:

RE.md['key'] = 'item'

This metadata is carried over between Bluesky Ipython sessions, so be wary of not updating this information. The convenience function show_md() has been provided to allow easy viewing of this information, though RE.md can be manipulated as a simple Python dictionary would.