diff --git a/documentation/PixiradDoc.html b/documentation/PixiradDoc.html index 23b67ba..23f17f1 100755 --- a/documentation/PixiradDoc.html +++ b/documentation/PixiradDoc.html @@ -10,7 +10,7 @@

areaDetector Pixirad driver

- January 28, 2014

+ May 11, 2018

Mark Rivers

@@ -32,25 +32,28 @@

Introduction

This is an EPICS - areaDetector driver for the Pixirad detectors from - PiXirad. + areaDetector driver for the Pixirad detectors from + Pixirad.

The Pixirad detector is a pixel array detector with a cadmium teluride (CdTe) sensor, - so it has high efficiency at high energy. The base module is 476 x 512 pixels, which - is what this driver currently supports. Detectors with more than one base module - are available, and will be supported by this driver in the future.

+ so it has high efficiency at high energy. There are 2 versions of the ASIC, the + older PII, and the newer PIII. The PII base module is 476 x 512 pixels, while the + PIII is 402 x 512 pixels. The detector is available with a single module (Pixirad-1), + 2 modules (Pixirad-2), and 8 modules (Pixirad-8). +

The detector does photon counting of all photons above a programmable energy threshold. The detector hardware has 2 energy thresholds and two counters per pixel, so it - can collect 2 energy images simultaneously. The firmware supports 4 thresholds, + can collect 2 energy images simultaneously. The PII firmware supports 4 thresholds, by first collecting 2 energies, and then collecting another image with 2 additional energies. The detector can be operated in 1, 2, or 4 color mode. In addition it supports deadtime-free (DTF) counting modes where one image is being collected while the other is being read out. Both 1 and 2 color DTF modes are supported. The NDArrays - produced by this driver are unsigned 16-bit integers. They have dimensions [476, - 512] for 1 color images, [476, 512, 2] for 2 color images, and [476, 512, 4] for - 4 color images. + produced by this driver are unsigned 16-bit integers. They have dimensions [XSIZE, + YSIZE] for 1 color images, [XSIZE, YSIZE, 2] for 2 color images, and [XSIZE, YSIZE, + 4] for 4 color images. XSIZE=476 for PII and 402 for PIII. YSIZE=NumModules*512 + for both the PII and PIII.

The command interface to the detector is via a TCP/IP socket interface to the detector @@ -60,14 +63,14 @@

on port 2224. The status includes temperatures, humidity and high voltage.

The driver receives image data from the detector via UDP broadcast messages on port - 2223. This data is received by a "UDP listener thread" in the driver, which passes - the UDP buffers as they are received via a pointer on an epicsMessageQueue to a - "data unpacking thread". This second thread unscrambles the UDP buffers, converts - them to areaDetector NDArrays, and does the callbacks to registered plugins. The - size of the epicsMessageQueue is controlled by a parameter passed to the driver - constructor, and is set to 1500 in the example IOC. This provides a buffer in case - the UDP listener thread is receiving images faster than the data unpacking thread - can process them. + 2223 for the Pixirad-1, and port 9999 for the Pixirad-2 and Pixirad-8. This data + is received by a "UDP listener thread" in the driver, which passes the UDP buffers + as they are received via a pointer on an epicsMessageQueue to a "data unpacking + thread". This second thread unscrambles the UDP buffers, converts them to areaDetector + NDArrays, and does the callbacks to registered plugins. The size of the epicsMessageQueue + is controlled by a parameter passed to the driver constructor, and is set to 1500 + in the example IOC. This provides a buffer in case the UDP listener thread is receiving + images faster than the data unpacking thread can process them.

The detector can in principle be on a public network where it will receive its IP @@ -95,26 +98,36 @@

Implementation of Parameters in asynNDArrayDriver.h and ADDriver.h, and EPICS Record - Definitions in ADBase.template and NDFile.template + Definitions in ADBase.template and NDFile.template + - Parameter index variable + Parameter index variable + - EPICS record name + EPICS record name + - Description + Description + - ADFrameType + ADFrameType + - $(P)$(R)FrameType + $(P)$(R)FrameType + The choices for the Pixirad are: Note that the dimensions of the NDArrays from the Pixirad driver depend on the value of FrameType.
- 1 color arrays are 2-D with dimensions [MaxSizeX, MaxSizeY].
- 2 color arrays are 3-D with dimensions [MaxSizeX, MaxSizeY, 2].
- 4 color arrays are 3-D with dimensions[MaxSizeX, MaxSizeY, 4].
+ 1 color arrays are 2-D with dimensions [SIZEX, SIZEY].
+ 2 color arrays are 3-D with dimensions [SIZEX, SIZEY, 2].
+ 4 color arrays are 3-D with dimensions[SIZEX, SIZEY, 4].
- ADTriggerMode + ADTriggerMode + - $(P)$(R)TriggerMode + $(P)$(R)TriggerMode + The choices for the Pixirad are: Note that the minimum time between external trigger pulses is determined by the FrameType record. This is discussed in the Performance - Measurements section below. + Measurements section below. + - ADTemperature + ADTemperature + - $(P)$(R)Temperature + $(P)$(R)Temperature + - The setpoint for the cold temperature of the detector. + The setpoint for the cold temperature of the detector. + - ADTemperatureActual + ADTemperatureActual + - $(P)$(R)TemperatureActual + $(P)$(R)TemperatureActual + - The readback of the temperature on the cold side of the Peltier cooler. + The readback of the temperature on the cold side of the Peltier cooler. + - ADNumImages + ADNumImages + - $(P)$(R)NumImages + $(P)$(R)NumImages + - Controls the number of images to acquire. + Controls the number of images to acquire. + - ADAcquirePeriod + ADAcquirePeriod + - $(P)$(R)AcquirePeriod + $(P)$(R)AcquirePeriod + Controls the period between images. If this is greater than the acquisition time then the detector will wait until the period has elapsed before collection the next - image. + image. + @@ -208,136 +236,258 @@

- Parameter index variable + Parameter index variable + - asyn interface + asyn interface + - Access + Access + - Description + Description + - drvInfo string + drvInfo string + - EPICS record name + EPICS record name + - EPICS record type + EPICS record type + - Cooling parameters + System information + Pixirad
- CoolingState + SystemInfo + - asynInt32 + asynOctet + - r/w + r/o + + + A string containing information about the detector, read directly from the detector. + - The state of the Peltier cooler. Choices are "Off" (0) and "On" (1). + SYSTEM_INFO + - COOLING_STATE + $(P)$(R)SystemInfo + + + waveform + + + + + Counting mode (PIII only) + + + + + Pixirad
+ CountMode + + + asynInt32 + + + r/w + + + Selects the counting mode. Choices are: +
+ 0: Normal +
+ 1: NPI This stands for Neighbor Pixel Inhibit. It prevents counting a photon more + than once when charge-sharing occurs.
+ 2: NPISUM This stands for Neighbor Pixel Inhibit with Summation. It sums the charge + from adjacent pixels when charge-sharing occurs.
+ + + COUNT_MODE + + + $(P)$(R)CountMode +
+ $(P)$(R)CountMode_RBV + + + mbbo +
+ mbbi + + + + + Cooling parameters + + + + + Pixirad
+ CoolingState + + + asynInt32 + + + r/w + + + The state of the Peltier cooler. Choices are "Off" (0) and "On" (1). + + + COOLING_STATE + $(P)$(R)CoolingState
- $(P)$(R)Cooling_RBV + $(P)$(R)Cooling_RBV + bo
- bi + bi + Pixirad
- HotTemperature + HotTemperature + - asynFloat64 + asynFloat64 + - r/o + r/o + - The readback of the temperature (C) on the hot side of the Peltier cooler. + The readback of the temperature (C) on the hot side of the Peltier cooler. + - HOT_TEMPERATURE + HOT_TEMPERATURE + - $(P)$(R)HotTemperature_RBV + $(P)$(R)HotTemperature_RBV + - ai + ai + Pixirad
- BoxTemperature + BoxTemperature + - asynFloat64 + asynFloat64 + - r/o + r/o + - The readback of the ambient temperature (C) in the detector box. + The readback of the ambient temperature (C) in the detector box. + - BOX_TEMPERATURE + BOX_TEMPERATURE + - $(P)$(R)BoxTemperature_RBV + $(P)$(R)BoxTemperature_RBV + - ai + ai + Pixirad
- BoxHumidity + BoxHumidity + - asynFloat64 + asynFloat64 + - r/o + r/o + - The readback of the ambient relative humidity (%) in the detector box. + The readback of the ambient relative humidity (%) in the detector box. + - BOX_HUMIDITY + BOX_HUMIDITY + - $(P)$(R)BoxHumidity_RBV + $(P)$(R)BoxHumidity_RBV + - ai + ai + Pixirad
- DewPoint + DewPoint + - asynFloat64 + asynFloat64 + - r/o + r/o + - The calculated dew point (C) based on the BoxHumidity. + The calculated dew point (C) based on the BoxHumidity. + - DEW_POINT + DEW_POINT + - $(P)$(R)DewPoint_RBV + $(P)$(R)DewPoint_RBV + - ai + ai + Pixirad
- PeltierPower + PeltierPower + - asynFloat64 + asynFloat64 + - r/o + r/o + - The power level of the Peltier cooler (%). + The power level of the Peltier cooler (%). + - PELTIER_POWER + PELTIER_POWER + - $(P)$(R)PeltierPower_RBV + $(P)$(R)PeltierPower_RBV + - ai + ai + Pixirad
- CoolingStatus + CoolingStatus + - asynInt32 + asynInt32 + - r/o + r/o + The status of the cooling system. Values are:
0 - "OK" @@ -352,26 +502,34 @@

6 - "T Cold Error" This means that the cold temperature is greater than 40 C.

If the CoolingStatus_RBV is any of the Error states then the driver will automatically - turn off the Peltier cooler. + turn off the Peltier cooler. + - COOLING_STATUS + COOLING_STATUS + - $(P)$(R)CoolingStatus_RBV + $(P)$(R)CoolingStatus_RBV + - mbbi + mbbi + - High voltage parameters + High voltage parameters + Pixirad
- HVMode + HVMode + - asynInt32 + asynInt32 + - r/w + r/w + High voltage mode. Choices are:
0 - "Manual" @@ -383,26 +541,33 @@

when an acquisition is started and automatically turn off when the acquisition is complete. This can improve the image quality, because the detector is subject to charge trapping when used with high x-ray fluxes, and periodically turning off the - high voltage helps to clear the trapped charge. + high voltage helps to clear the trapped charge. + - HV_MODE + HV_MODE + $(P)$(R)HVMode
- $(P)$(R)HVMode_RBV + $(P)$(R)HVMode_RBV + bo
- bi + bi + Pixirad
- HVState + HVState + - asynInt32 + asynInt32 + - r/w + r/w + High voltage state. Choices are:
0 - "Off" @@ -410,87 +575,115 @@

1 - "On"
This record turns the high voltage off and on. If HVMode is Auto then the high voltage - will be turned on during an acquisition even if HVState is off. + will be turned on during an acquisition even if HVState is off. + - HV_STATE + HV_STATE + $(P)$(R)HVState
- $(P)$(R)HVState_RBV + $(P)$(R)HVState_RBV + bo
- bi + bi + Pixirad
- HVValue + HVValue + - asynFloat64 + asynFloat64 + - r/w + r/w + The high voltage value that will be applied to the detector when HVState=On or when HVMode=Auto and an acquisition is in progress. The allowed range is 0 to 400 volts. - HV_VALUE + HV_VALUE + $(P)$(R)HVValue
- $(P)$(R)HVValue_RBV + $(P)$(R)HVValue_RBV + ao
- ai + ai + Pixirad
- HVActual + HVActual + - asynFloat64 + asynFloat64 + - r/o + r/o + - The actual high voltage currently being applied to the detector. + The actual high voltage currently being applied to the detector. + - HV_ACTUAL + HV_ACTUAL + - $(P)$(R)HVActual_RBV + $(P)$(R)HVActual_RBV + - ai + ai + Pixirad
- HVCurrent + HVCurrent + - asynFloat64 + asynFloat64 + - r/o + r/o + - The actual high voltage current. + The actual high voltage current. + - HV_CURRENT + HV_CURRENT + - $(P)$(R)HVCurrent_RBV + $(P)$(R)HVCurrent_RBV + - ai + ai + - Threshold parameters + Threshold parameters + Pixirad
- ThresholdN (N=1-4) + ThresholdN (N=1-4) + - asynFloat64 + asynFloat64 + - r/w + r/w + Requested threshold energy in keV. There are 4 energy thresholds. The threshold energies are controlled by a single high-resolution register (VThMax) with values @@ -500,254 +693,389 @@

as possible to their requested values using only the low-resolution registers. - THRESHOLDN (N=1-4) + THRESHOLDN (N=1-4) + $(P)$(R)ThresholdN (N=1-4)
- $(P)$(R)ThresholdN_RBV (N=1-4) + $(P)$(R)ThresholdN_RBV (N=1-4) + ao
- ai + ai + Pixirad
- ThresholdActualN (N=1-4) + ThresholdActualN (N=1-4) + - asynFloat64 + asynFloat64 + - r/o + r/o + Actual threshold energy in keV. This will be as close as possible to the requested - value, subject to the constraints and algorithm explained above. + value, subject to the constraints and algorithm explained above. + - THRESHOLD_ACTUALN (N=1-4) + THRESHOLD_ACTUALN (N=1-4) + - $(P)$(R)ThresholdActualN_RBV (N=1-4) + $(P)$(R)ThresholdActualN_RBV (N=1-4) + - ai + ai + + + + + Pixirad
+ HitThreshold + + + asynFloat64 + + + r/w + + + This is only used on the PIII ASIC. It sets the threshold in keV where the PIII + will consider a photon "hit" to have ocurred. This threshold is mainly intended + for use when CountMode=NPI or NPISUM. However, even when CountMode=Normal it must + always be set to a value less than Threshold 1. + + + HIT_THRESHOLD + + + $(P)$(R)HitThreshold
+ $(P)$(R)HitThreshold_RBV + + + ao +
+ ai + + + + + Pixirad
+ HitThresholdActual + + + asynFloat64 + + + r/o + + + Actual hit threshold energy in keV. This will be as close as possible to the requested + value, subject to the constraints and algorithm explained above. + + + HIT_THRESHOLD_ACTUAL + + + $(P)$(R)HitThresholdActual_RBV + + + ai + - External sync parameters + External sync parameters + Pixirad
- SyncInPolarity + SyncInPolarity + - asynInt32 + asynInt32 + - r/w + r/w + Polarity of the Sync In signal. Choices are:
0 - "Pos."
- 1 - "Neg." + 1 - "Neg." + - SYNC_IN_POLARITY + SYNC_IN_POLARITY + $(P)$(R)SyncInPolarity
- $(P)$(R)SyncInPolarity_RBV + $(P)$(R)SyncInPolarity_RBV + bo
- bi + bi + Pixirad
- SyncOutPolarity + SyncOutPolarity + - asynInt32 + asynInt32 + - r/w + r/w + Polarity of the Sync Out signal. Choices are:
0 - "Pos."
- 1 - "Neg." + 1 - "Neg." + - SYNC_OUT_POLARITY + SYNC_OUT_POLARITY + $(P)$(R)SyncOutPolarity
- $(P)$(R)SyncOutPolarity_RBV + $(P)$(R)SyncOutPolarity_RBV + bo
- bi + bi + Pixirad
- SyncOutFunction + SyncOutFunction + - asynInt32 + asynInt32 + - r/w + r/w + Function of the Sync Out signal. Choices are:
0 - "Shutter" The Sync Out signal is high while the detector is collecting.
1 - "Read done" The Sync Out signal outputs a pulse when readout is complete.
- 2 - "Read" The Sync Out signal is high while the detector is reading out. + 2 - "Read" The Sync Out signal is high while the detector is reading out. + - SYNC_OUT_FUNCTION + SYNC_OUT_FUNCTION + $(P)$(R)SyncOutFunction
- $(P)$(R)SyncOutFunction_RBV + $(P)$(R)SyncOutFunction_RBV + mbbo
- mbbi + mbbi + - Data collection status parameters + Data collection status parameters + Pixirad
- ColorsCollected + ColorsCollected + - asynInt32 + asynInt32 + - r/o + r/o + - The number of colors collected so far for the current image. + The number of colors collected so far for the current image. + - COLORS_COLLECTED + COLORS_COLLECTED + - $(P)$(R)ColorsCollected_RBV + $(P)$(R)ColorsCollected_RBV + - longin + longin + Pixirad
- UDPBuffersRead + UDPBuffersRead + - asynInt32 + asynInt32 + - r/o + r/o + The number of UDP buffers (images) read by the UDP listener thread for the current - acquisition. + acquisition. + - UDP_BUFFERS_READ + UDP_BUFFERS_READ + - $(P)$(R)UDPBuffersRead_RBV + $(P)$(R)UDPBuffersRead_RBV + - longin + longin + Pixirad
- UDPBuffersMax + UDPBuffersMax + - asynInt32 + asynInt32 + - r/o + r/o + The maximum number of UDP buffers (images) for UDP listener thread. This is set - at startup. + at startup. + - UDP_BUFFERS_MAX + UDP_BUFFERS_MAX + - $(P)$(R)UDPBuffersMax_RBV + $(P)$(R)UDPBuffersMax_RBV + - longin + longin + Pixirad
- UDPBuffersFree + UDPBuffersFree + - asynInt32 + asynInt32 + - r/o + r/o + - The number of free UDP buffers (images). + The number of free UDP buffers (images). + - UDP_BUFFERS_FREE + UDP_BUFFERS_FREE + - $(P)$(R)UDPBuffersFree_RBV + $(P)$(R)UDPBuffersFree_RBV + - longin + longin + Pixirad
- UDPSpeed + UDPSpeed + - asynFloat64 + asynFloat64 + - r/o + r/o + - The speed with which the last UDP buffer was received (MB/s). + The speed with which the last UDP buffer was received (MB/s). + - UDP_SPEED + UDP_SPEED + - $(P)$(R)UDPSpeed_RBV + $(P)$(R)UDPSpeed_RBV + - ai + ai + - Calibration and reset parameters + Calibration and reset parameters + Pixirad
- AutoCalibrate + AutoCalibrate + - asynInt32 + asynInt32 + - r/w + r/w + Sends a command to the detector to perform an autocalibration. The detector makes adjustments to achieve uniform pixel response. This operation must be performed at least once after the detector is power-cycled, and whenever necessary as the chip temperature and/or supply voltages may drift with time and environmental conditions. If autocalibration has not been performed then there will be many "hot" (non-zero) - pixels in the image with no x-rays. When an autocalibration is performed the detector - sends 2 images, one collected before the calibration and one after the calibration. - These images always have a range of 0-31 counts and show the correction applied - to each pixel. + pixels in the image with no x-rays. + - AUTO_CALIBRATE + AUTO_CALIBRATE + $(P)$(R)AutoCalibrate
- $(P)$(R)AutoCalibrate_RBV + $(P)$(R)AutoCalibrate_RBV + bo
- bi + bi + Pixirad
- SystemReset + SystemReset + - asynInt32 + asynInt32 + - r/w + r/w + Writing 1 to this record sends a command to reset detector to its initial state. This causes the sockets to disconnect, and it takes about 30 seconds for the system to recover. Once it recovers the driver then sends commands to set all of the programmable parameters (thresholds, cooling, high voltage, etc.) to the current values in the EPICS output records. When the system is available again SystemReset record will - go back to 0. + go back to 0. + - SYSTEM_RESET + SYSTEM_RESET + $(P)$(R)SystemReset
- $(P)$(R)SystemReset_RBV + $(P)$(R)SystemReset_RBV + bo
- bi + bi + @@ -809,179 +1137,245 @@

- FrameType + FrameType + - AcquireTime + AcquireTime + - Frames/sec + Frames/sec + - 1 color low + 1 color low + - 0.02 + 0.02 + - 35.7 + 35.7 + - 1 color low + 1 color low + - 0.01 + 0.01 + - 57.4 + 57.4 + - 1 color low + 1 color low + - 0.01 + 0.01 + - 57.4 + 57.4 + - 1 color low + 1 color low + - 0.005 + 0.005 + - 83.3 + 83.3 + - 1 color low + 1 color low + - 0.001 + 0.001 + - 125.0 + 125.0 + - 1 color DTF + 1 color DTF + - 0.02 + 0.02 + - 47.3 + 47.3 + - 1 color DTF + 1 color DTF + - 0.01 + 0.01 + - 93.8 + 93.8 + - 1 color DTF + 1 color DTF + - 0.005 + 0.005 + - 143.0 + 143.0 + - 1 color DTF + 1 color DTF + - 0.001 + 0.001 + - 143.0 + 143.0 + - 2 color + 2 color + - 0.02 + 0.02 + - 28.5 + 28.5 + - 2 color + 2 color + - 0.01 + 0.01 + - 41 + 41 + - 2 color + 2 color + - 0.005 + 0.005 + - 52 + 52 + - 2 color + 2 color + - 0.001 + 0.001 + - 66 + 66 + - 2 color DTF + 2 color DTF + - 0.02 + 0.02 + - 23.4 + 23.4 + - 2 color DTF + 2 color DTF + - 0.01 + 0.01 + - 46 + 46 + - 2 color DTF + 2 color DTF + - 0.005 + 0.005 + - 71 + 71 + - 2 color DTF + 2 color DTF + - 0.001 + 0.001 + - 71 + 71 + - 4 color + 4 color + - 0.02 + 0.02 + - 14.3 + 14.3 + - 4 color + 4 color + - 0.01 + 0.01 + - 20 + 20 + - 4 color + 4 color + - 0.005 + 0.005 + - 26 + 26 + - 4 color + 4 color + - 0.001 + 0.001 + - 33 + 33 +