areaDetector PerkinElmer driver

October 1, 2012

Mark Rivers, John Hammonds, Brian Tieman

University of Chicago and Argonne National Laboratory

Table of Contents

Introduction

This is an EPICS areaDetector driver for the flat-panel amorphous silicon detectors from PerkinElmer.

The driver is based upon the XISL library provided by PerkinElmer. It only runs on Microsoft Windows computers. It supports both 32-bit and 64-bit versions of Windows.

This driver has been tested with the following detectors

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 PerkinElmer detectors. The PerkinElmer class documentation describes this class in detail.

Implementation of standard driver parameters

The following table describes how the PerkinElmer 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 Multiple or Average
ADAcquireTime $(P)$(R)AcquireTime
$(P)$(R)AcquireTime_RBV
When using Internal Triggers, this parameter controls the period between trigger pulses which will also be equal to the exposure time.
ADTriggerMode $(P)$(R)TriggerMode
$(P)$(R)TriggerMode_RBV
Sets the trigger mode for the detector. Options are:
  • Internal
  • External
  • Free Running
  • Soft Trigger
ADImageMode $(P)$(R)ImageMode
$(P)$(R)ImageMode_RBV
Sets the trigger mode for the detector. Options are:
  • Single
  • Multiple
  • Continuous
  • Average. This mode is new for the Perkin Elmer. It averages NumImages frames in the hardware frame grabber. It is useful when the total acquisition time is longer than the 5 second maximum allowed in Internal trigger mode, etc.

PerkinElmer specific parameters

The PerkinElmer 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 PerkinElmerXXX.

Parameter Definitions in PerkinElmer.h and EPICS Record Definitions in PerkinElmer.template
Parameter index variable asyn interface Access Description drvInfo string EPICS record name EPICS record type
PE_NumFrameBuffers asynInt32 r/w Number of software frame buffers to use PE_NUM_FRAME_BUFFERS $(P)$(R)PENumFrameBuffers
$(P)$(R)PENumFrameBuffers_RBV
longout
longin
PE_Initialize asynInt32 w Initialize the detector PE_INITIALIZE $(P)$(R)PEInitialize longout
PE_StatusRBV asynInt32 r/w Status of PerkinElmer driver. SHOULD DELETE THIS AND JUST USE DETECTOR STATE. PE_STATUS $(P)$(R)PE_STATUS_RBV mbbi
PE_SystemID asynInt32 r/w PROM ID # used in communication with Perkin Elmer PE_SYSTEMID $(P)$(R)PESystemID longin
PE_Trigger asynInt32 w Trigger record for soft trigger mode PE_TRIGGER $(P)$(R)PETrigger longout
PE_FrameBufferIndex asynInt32 r Frame number from the hardware frame buffer for this image. Values go from 1 to 8. PE_FRAME_BUFFER_INDEX $(P)$(R)PEFrameBuffIndex longout
PE_ImageNumber asynInt32 r Image number for this image in the software frame buffer array. PE_IMAGE_NUMBER $(P)$(R)PEImageNumber longout
Offset corrections
PE_NumOffsetFrames asynInt32 r/w Number of frames to collect and average when collecting offset frames PE_NUM_OFFSET_FRAMES $(P)$(R)PENumOffsetFrames longout
PE_CurrentOffsetFrame asynInt32 r Current offset frame being collected when collecting offset frames PE_CURRENT_OFFSET_FRAMEs $(P)$(R)PECurrentOffsetFrame longin
PE_AcquireOffset asynInt32 r/w Acquire offset frames PE_ACQUIRE_OFFSET $(P)$(R)PEAcquireOffset busy
PE_UseOffset asynInt32 r/w Set whether offset image is to be used. Choices are "Disable" (0) and "Enable" (1). PE_USE_OFFSET $(P)$(R)PEUseOffset mbbo
PE_OffsetAvailable asynInt32 r Report whether offset image has been collected and is available for use. Choices are "Not available" (0) and "Available" (1). PE_OFFSET_AVAILABLE $(P)$(R)PEOffsetAvailable mbbi
Gain corrections
PE_NumGainFrames asynInt32 r/w Number of frames to collect and average when collecting gain frames PE_NUM_GAIN_FRAMES $(P)$(R)PENumGainFrames longout
PE_CurrentGainFrame asynInt32 r Current gain frame being collected when collecting gain frames PE_CURRENT_GAIN_FRAMEs $(P)$(R)PECurrentGainFrame longin
PE_AcquireGain asynInt32 w Acquire gain frames PE_ACQUIRE_GAIN $(P)$(R)PEAcquireGain busy
PE_UseGain asynInt32 w Set whether gain image is to be used. Choices are "Disable" (0) and "Enable" (1). PE_USE_GAIN $(P)$(R)PEUseGain mbbo
PE_GainAvailable asynInt32 r Report whether offset image has been collected and is available for use. Choices are "Not available" (0) and "Available" (1). PE_GAIN_AVAILABLE $(P)$(R)PEGainAvailable mbbi
Bad pixel corrections
PE_UsePixelCorrections asynInt32 w Set whether bad pixel correction is to be used PE_USE_PIXEL_CORRECTION $(P)$(R)PEUsePixelCorrection mbbo
PE_PixelCorrectionAvailable asynInt32 r Report whether pixel correction file has been set and is available for use PE_PIXEL_CORRECTION_AVAILABLE $(P)$(R)PEPixelCorrectionAvailable mbbi
PE_BadPixelFile PE_BadPixelFile_RBV asynOctetWrite
aynnOctetRead
w File name for bad pixel file PE_BAD_PIXEL_FILE $(P)$(R)PEBadPixelFile
$(P)$(R)PEBadPixelFile_RBV
waveform
Load/Save offset/gain corrections
PE_CorrectionsDirectory asynOctetWrite r/w Directory where corrections files should be stored PE_CORRECTIONS_DIRECTORY $(P)$(R)PECorrectionsDir waveform
PE_LoadCorrectionsFile asynInt32 w Load offset and gain corrections from a file for use PE_LOAD_CORRECTION_FILES $(P)$(R)PELoadCorrections longout
PE_SaveCorrectionsFile asynInt32 w Save offset and gain corrections to a file PE_SAVE_CORRECTION_FILES $(P)$(R)PESaveCorrections longout

Unsupported standard driver parameters

The PerkinElmer driver does not support the following standard driver parameters because they are not supported in the PerkinElmer library:

Configuration

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

int PerkinElmerConfig(const char *portName, int IDType, const char* IDValue,
                      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 the PerkinElmerConfig function in the PerkinElmer.cpp documentation and in the documentation for the constructor for the PerkinElmer class.

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

MEDM screens

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

PerkinElmer.adl is the main screen used to control the PerkinElmer driver.

PerkinElmer.adl

PerkinElmer.png

Performance measurements

The following measurements were done to demonstrate the performance that can be obtained with the areaDetector PerkinElmer driver.

Restrictions

The following are some current restrictions of the PerkinElmer driver: