areaDetector Bruker Instrument Server (BIS) driver

October 1, 2012

Mark Rivers

University of Chicago

Table of Contents


This is an EPICS areaDetector driver for detectors from Bruker AXS using the Bruker Instrument Server (BIS).

The interface to the detector is via TCP/IP socket connections to the Bruker Instrument Server (BIS) program that Bruker provides. The BIS program must be started before the areaDetector software is started.

The Bruker Instrument Server saves the data to disk in Bruker's SRFM file format. The areaDetector driver reads these disk files in order to read the data, because BIS does not provide another mechanism to access the data.

This driver inherits from ADDriver. It implements many of the parameters in asynNDArrayDriver.h and in ADArrayDriver.h. It also implements a number of parameters that are specific to the Bruker detector. The BIS class documentation describes this class in detail.

Implementation of standard driver parameters

The following table describes how the BIS driver implements some of the standard driver parameters.

Implementation of Parameters in asynNDArrayDriver.h and ADDriver.h, and EPICS Record Definitions in ADBase.template and NDFile.template
Parameter index variable EPICS record name Description
ADNumImages $(P)$(R)NumImages Controls the number of images to acquire when ADImageMode is ADImageMultiple.
ADAcquirePeriod $(P)$(R)AcquirePeriod Controls the period between images when ADImageMode is ADImageMultiple or ADImageContinuous. If this is greater than the acquisition time plus readout overhead then the driver will wait until the period has elapsed before starting the next acquisition.
NDFilePath $(P)$(R)FilePath Controls the path for saving images. It must be a valid path for BIS and for the areaDetector driver, which is normally running in an EPICS IOC. Normally BIS and the EPICS IOC are run on the same machine so this is not an issue. Running the IOC on another machine is difficult because Windows does not support soft links that could be used to make the paths look identical.
The terminator at the end of FilePath must be a "\" character, it cannot be a "/" character, because BIS only recognizes the "\".
NDFileFormat $(P)$(R)FileFormat BIS only supports Bruker format SRFM files.
ADFrameType $(P)$(R)FrameType The driver redefines the choices for the ADFrameType parameter (record $(P)$(R)FrameType) from ADDriver.h. The choices for the BIS driver are:
  • Normal (corrected data frame without double correlation)
  • Dark (NumDarks background frames with same exposure time)
  • Raw (data frame without correction for background)
  • DblCorrelation (two images each collected for half the nominal acquisition time, zingers removed by double correlation)

BIS will automatically open and close the shutter when exposures are collected. It does this by changing the state of pin 3 of the parallel port DB-25 connector on the PC. This signal is connected to a shutter control box. Alternatively, if ADShutterMode is set to ADShutterModeEPICS, then any EPICS PV can be used to control a shutter.

Bruker specific parameters

The Bruker driver implements the following parameters in addition to those in asynNDArrayDriver.h and ADDriver.h. Note that to reduce the width of this table the parameter index variable names have been split into 2 lines, but these are just a single name, for example mar345ScanSize.

Parameter Definitions in mar345.cpp and EPICS Record Definitions in mar345.template
Parameter index variable asyn interface Access Description drvInfo string EPICS record name EPICS record type
Readout parameters
BISSFRMTimeout asynFloat64 r/w The timeout waiting for the SFRM file to appear. SRFMTimeout $(P)$(R)ReadSFRMTimeout ao
BISStatus asynOctet r/w The status string returned from BIS. BIS_STATUS $(P)$(R)BISStatus waveform
BISNumDarks asynInt32 r/w The number of dark fields to collect when ADFrameType=Dark. NUM_DARKS $(P)$(R)NumDarks

Unsupported standard driver parameters

The Bruker driver does not support the following standard driver parameters because they are not supported in the BIS server:

BIS supports binning, but the binning in the X and Y directions must be the same, so only ADBinX is supported.


The Bruker driver is created with the BISDetectorConfig command, either from C/C++ or from the EPICS IOC shell.

  BISDetectorConfig(const char *portName, const char *commandPort, const char *statusPort,
                    int maxBuffers, size_t maxMemory,
                    int priority, int stackSize)

For details on the meaning of the parameters to this function refer to the detailed documentation on theBISDetectorConfig function in the BIS.cpp documentation and in the documentation for the constructor for the BIS class.

There an example IOC boot directory and startup script (iocBoot/iocBruker/st.cmd) provided with areaDetector.

MEDM screens

The following show the MEDM screen that is used to control the Bruker detector. Note that the general purpose screen ADBase.adl can be used, but it exposes many controls that are not applicable to the Bruker, and lacks some fields that are important for the Bruker.

BIS.adl is the main screen used to control the Bruker driver.




The following are some current restrictions of the Bruker driver: