git-svn-id: https://subversion.xor.aps.anl.gov/synApps/areaDetector/trunk@10305 dc6c5ff5-0b8b-c028-a01f-ffb33f00fc8b
571 lines
16 KiB
HTML
571 lines
16 KiB
HTML
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
|
|
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
|
<html xml:lang="en" xmlns="http://www.w3.org/1999/xhtml">
|
|
<head>
|
|
<title>areaDetector PerkinElmer driver</title>
|
|
<meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type" />
|
|
</head>
|
|
<body>
|
|
<div style="text-align: center">
|
|
<h1>
|
|
areaDetector PerkinElmer driver</h1>
|
|
<h2>
|
|
August 17, 2009</h2>
|
|
<h2>
|
|
John Hammonds, Brian Tieman, Mark Rivers</h2>
|
|
<h2>
|
|
Argonne National Laboratory and University of Chicago</h2>
|
|
</div>
|
|
<h2>
|
|
Table of Contents</h2>
|
|
<ul>
|
|
<li><a href="#Introduction">Introduction</a></li>
|
|
<li><a href="#StandardNotes">Implementation of standard driver parameters</a></li>
|
|
<li><a href="#Driver_parameters">PerkinElmer specific parameters</a></li>
|
|
<li><a href="#Unsupported">Unsupported standard driver parameters</a></li>
|
|
<li><a href="#Configuration">Configuration</a></li>
|
|
<li><a href="#MEDM_screens">MEDM screens</a></li>
|
|
<li><a href="#Performance_measurements">Performance measurements</a> </li>
|
|
<li><a href="#Restrictions">Restrictions</a> </li>
|
|
</ul>
|
|
<h2 id="Introduction" style="text-align: left">
|
|
Introduction</h2>
|
|
<p>
|
|
This is a driver for the flat-panel amorphous silicon detectors from <a href="http://optoelectronics.perkinelmer.com/catalog/Category.aspx?CategoryName=X-Ray+Cameras">
|
|
PerkinElmer</a>.</p>
|
|
<p>
|
|
The driver is based upon the XISL library provided by PerkinElmer. It only runs
|
|
on Microsoft Windows computers.
|
|
</p>
|
|
<p>
|
|
This driver has been tested with the following detectors</p>
|
|
<ul>
|
|
<li>XRD0820 w/ XRD-FG PCI frame grabber</li>
|
|
<li>XRD1621 w/ XRD-FGX PCI frame grabber</li>
|
|
</ul>
|
|
<p>
|
|
ADD ADDTIONAL INTRODUCTORY TEXT HERE.</p>
|
|
<p>
|
|
This driver inherits from <a href="areaDetectorDoc.html#ADDriver">ADDriver</a>.
|
|
It implements many of the parameters in NDStdDriverParam_t (see <a href="areaDetectorDoxygenHTML/asyn_n_d_array_driver_8h.html">
|
|
asynNDArryDriver.h</a>) and in ADStdDriverParam_t (see <a href="areaDetectorDoxygenHTML/_a_d_driver_8h.html">
|
|
ADArrayDriver.h</a>). It also implements a number of parameters that are specific
|
|
to the PerkinElmer detectors. The <a href="areaDetectorDoxygenHTML/class_perkin_elmer.html">
|
|
PerkinElmer class documentation</a> describes this class in detail.</p>
|
|
<h2 id="StandardNotes" style="text-align: left">
|
|
Implementation of standard driver parameters</h2>
|
|
<p>
|
|
The following table describes how the PerkinElmer driver implements some of the
|
|
standard driver parameters.
|
|
</p>
|
|
<p>
|
|
DOCUMENT IMPLEMENTATION OF STANDARD DRIVER PARAMETERS IN THIS TABLE</p>
|
|
<table border="1" cellpadding="2" cellspacing="2" style="text-align: left">
|
|
<tbody>
|
|
<tr>
|
|
<td align="center" colspan="3">
|
|
<b>Implementation of Parameters in asynNDArrayDriver.h and ADDriver.h, and EPICS Record
|
|
Definitions in ADBase.template and NDFile.template</b></td>
|
|
</tr>
|
|
<tr>
|
|
<th>
|
|
Parameter index variable</th>
|
|
<th>
|
|
EPICS record name</th>
|
|
<th>
|
|
Description</th>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
ADNumImages</td>
|
|
<td>
|
|
$(P$(R)NumImages</td>
|
|
<td>
|
|
Controls the number of images to acquire when ADImageMode is ADImageMultiple.</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
ADAcquireTime</td>
|
|
<td>
|
|
$(P)$(R)AcquireTime<br />
|
|
$(P)$(R)AcquireTime_RBV</td>
|
|
<td>
|
|
When using Internal Triggers, this parameter controls the period between trigger
|
|
pulses which will also be equal to the exposure time. This parameter is only updated
|
|
when the detector is initialized</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
ADTriggerMode</td>
|
|
<td>
|
|
$(P)$(R)TriggerMode<br />
|
|
$(P)$(R)TriggerMode_RBV</td>
|
|
<td>
|
|
Sets the trigger mode for the detector. Options are:
|
|
<ul>
|
|
<li>Internal</li>
|
|
<li>External</li>
|
|
<li>Free Run</li>
|
|
<li>Soft Trigger</li>
|
|
</ul>
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<p>
|
|
It is useful to use NDPluginROI to define an ROI containing the entire PerkinElmer
|
|
detector. The MaxValue_RBV PV in this ROI can be monitored to make sure that the
|
|
16-bit limit of 65,535 is not being approached in any pixel.
|
|
</p>
|
|
<h2 id="Driver_parameters" style="text-align: left">
|
|
PerkinElmer specific parameters</h2>
|
|
<p>
|
|
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 <code>PerkinElmerXXX</code>.
|
|
</p>
|
|
<table border="1" cellpadding="2" cellspacing="2" style="text-align: left">
|
|
<tbody>
|
|
<tr>
|
|
<td align="center" colspan="7">
|
|
<b>Parameter Definitions in PerkinElmer.h and EPICS Record Definitions in PerkinElmer.template</b></td>
|
|
</tr>
|
|
<tr>
|
|
<th>
|
|
Parameter index variable</th>
|
|
<th>
|
|
asyn interface</th>
|
|
<th>
|
|
Access</th>
|
|
<th>
|
|
Description</th>
|
|
<th>
|
|
drvInfo string</th>
|
|
<th>
|
|
EPICS record name</th>
|
|
<th>
|
|
EPICS record type</th>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
PE_NumFrameBuffers</td>
|
|
<td>
|
|
asynInt32</td>
|
|
<td>
|
|
r/w</td>
|
|
<td>
|
|
Number of frame buffers to use</td>
|
|
<td>
|
|
PE_NUM_FRAME_BUFFERS</td>
|
|
<td>
|
|
$(P)$(R)PENumFrameBuffers<br />
|
|
$(P)$(R)PENumFrameBuffers_RBV</td>
|
|
<td>
|
|
longout<br />
|
|
longin</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
PE_Initialize</td>
|
|
<td>
|
|
asynInt32</td>
|
|
<td>
|
|
w</td>
|
|
<td>
|
|
Initialize the detector</td>
|
|
<td>
|
|
PE_INITIALIZE</td>
|
|
<td>
|
|
$(P)$(R)PEInitialize</td>
|
|
<td>
|
|
longout</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
PE_StatusRBV</td>
|
|
<td>
|
|
asynInt32</td>
|
|
<td>
|
|
r/w</td>
|
|
<td>
|
|
Status of PerkinElmer driver. Need to integrate this into DetectorState</td>
|
|
<td>
|
|
PE_STATUS</td>
|
|
<td>
|
|
$(P)$(R)PE_STATUS_RBV</td>
|
|
<td>
|
|
mbbi</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
PE_SystemID</td>
|
|
<td>
|
|
asynInt32</td>
|
|
<td>
|
|
r/w</td>
|
|
<td>
|
|
PROM ID # used in communication with Perkin Elmer</td>
|
|
<td>
|
|
PE_SYSTEMID</td>
|
|
<td>
|
|
$(P)$(R)PESystemID</td>
|
|
<td>
|
|
longin</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
PE_Trigger</td>
|
|
<td>
|
|
asynInt32</td>
|
|
<td>
|
|
w</td>
|
|
<td>
|
|
Trigger record for soft trigger mode</td>
|
|
<td>
|
|
PE_TRIGGER</td>
|
|
<td>
|
|
$(P)$(R)PETrigger</td>
|
|
<td>
|
|
longout</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
PE_FrameBufferIndex</td>
|
|
<td>
|
|
asynInt32</td>
|
|
<td>
|
|
r</td>
|
|
<td>
|
|
Frame number from frame buffer for this image</td>
|
|
<td>
|
|
PE_FRAME_BUFFER_INDEX</td>
|
|
<td>
|
|
$(P)$(R)PEFrameBuffIndex</td>
|
|
<td>
|
|
longout</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
PE_ImageNumber</td>
|
|
<td>
|
|
asynInt32</td>
|
|
<td>
|
|
r</td>
|
|
<td>
|
|
Image number for this image in the collections sequence</td>
|
|
<td>
|
|
PE_IMAGE_NUMBER</td>
|
|
<td>
|
|
$(P)$(R)PEImageNumber</td>
|
|
<td>
|
|
longout</td>
|
|
</tr>
|
|
<tr>
|
|
<td align="center" colspan="7">
|
|
<b>Offset corrections</b></td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
PE_NumOffsetFrames</td>
|
|
<td>
|
|
asynInt32</td>
|
|
<td>
|
|
r/w</td>
|
|
<td>
|
|
Number of frames to collect and average when collecting offset image</td>
|
|
<td>
|
|
PE_NUM_OFFSET_FRAMES</td>
|
|
<td>
|
|
$(P)$(R)PENumOffsetFrames</td>
|
|
<td>
|
|
longout</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
PE_AcquireOffset</td>
|
|
<td>
|
|
asynInt32</td>
|
|
<td>
|
|
w</td>
|
|
<td>
|
|
Acquire Offset Image</td>
|
|
<td>
|
|
PE_ACQUIRE_OFFSET</td>
|
|
<td>
|
|
$(P)$(R)PEAcquireOffset</td>
|
|
<td>
|
|
longout</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
PE_UseOffset</td>
|
|
<td>
|
|
asynInt32</td>
|
|
<td>
|
|
w</td>
|
|
<td>
|
|
Set wether offset image is to be used</td>
|
|
<td>
|
|
PE_USE_OFFSET</td>
|
|
<td>
|
|
$(P)$(R)PEUseOffset</td>
|
|
<td>
|
|
mbbo</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
PE_OffsetAvailable</td>
|
|
<td>
|
|
asynInt32</td>
|
|
<td>
|
|
r</td>
|
|
<td>
|
|
Report whether offset image has been collected</td>
|
|
<td>
|
|
PE_OFFSET_AVAILABLE</td>
|
|
<td>
|
|
$(P)$(R)PEOffsetAvailable</td>
|
|
<td>
|
|
mbbi</td>
|
|
</tr>
|
|
<tr>
|
|
<td align="center" colspan="7">
|
|
<b>Gain corrections</b></td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
PE_NumGainFrames</td>
|
|
<td>
|
|
asynInt32</td>
|
|
<td>
|
|
r/w</td>
|
|
<td>
|
|
Number of frames to collect and average when collecting gain image</td>
|
|
<td>
|
|
PE_NUM_GAIN_FRAMES</td>
|
|
<td>
|
|
$(P)$(R)PENumGainFrames</td>
|
|
<td>
|
|
longout</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
PE_AcquireGain</td>
|
|
<td>
|
|
asynInt32</td>
|
|
<td>
|
|
w</td>
|
|
<td>
|
|
Acquire Gain Image</td>
|
|
<td>
|
|
PE_ACQUIRE_GAIN</td>
|
|
<td>
|
|
$(P)$(R)PEAcquireGain</td>
|
|
<td>
|
|
longout</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
PE_UseGain</td>
|
|
<td>
|
|
asynInt32</td>
|
|
<td>
|
|
w</td>
|
|
<td>
|
|
Set wether gain image is to be used</td>
|
|
<td>
|
|
PE_USE_GAIN</td>
|
|
<td>
|
|
$(P)$(R)PEUseGain</td>
|
|
<td>
|
|
mbbo</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
PE_GainAvailable</td>
|
|
<td>
|
|
asynInt32</td>
|
|
<td>
|
|
r</td>
|
|
<td>
|
|
Report whether gain image has been collected</td>
|
|
<td>
|
|
PE_GAIN_AVAILABLE</td>
|
|
<td>
|
|
$(P)$(R)PEGainAvailable</td>
|
|
<td>
|
|
mbbi</td>
|
|
</tr>
|
|
<tr>
|
|
<td align="center" colspan="7">
|
|
<b>Bad pixel corrections</b></td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
PE_UsePixelCorrections</td>
|
|
<td>
|
|
asynInt32</td>
|
|
<td>
|
|
w</td>
|
|
<td>
|
|
Set wether pixel correction is to be used</td>
|
|
<td>
|
|
PE_USE_PIXEL_CORRECTION</td>
|
|
<td>
|
|
$(P)$(R)PEUsePixelCorrection</td>
|
|
<td>
|
|
mbbo</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
PE_PixelCorrectionAvailable</td>
|
|
<td>
|
|
asynInt32</td>
|
|
<td>
|
|
r</td>
|
|
<td>
|
|
Report whether pixel correction file has been set</td>
|
|
<td>
|
|
PE_PIXEL_CORRECTION_AVAILABLE</td>
|
|
<td>
|
|
$(P)$(R)PEPixelCorrectionAvailable</td>
|
|
<td>
|
|
mbbi</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
PE_BadPixelFile PE_BadPixelFile_RBV</td>
|
|
<td>
|
|
asynOctetWrite<br />
|
|
aynnOctetRead</td>
|
|
<td>
|
|
w</td>
|
|
<td>
|
|
File name for bad pixel file</td>
|
|
<td>
|
|
PE_BAD_PIXEL_FILE</td>
|
|
<td>
|
|
$(P)$(R)PEBadPixelFile<br />
|
|
$(P)$(R)PEBadPixelFile_RBV</td>
|
|
<td>
|
|
waveform</td>
|
|
</tr>
|
|
<tr>
|
|
<td align="center" colspan="7">
|
|
<b>Load/Save offset/gain corrections</b></td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
PE_CorrectionsDirectory</td>
|
|
<td>
|
|
asynOctetWrite</td>
|
|
<td>
|
|
r/w</td>
|
|
<td>
|
|
Directory where corrections files should be stored</td>
|
|
<td>
|
|
PE_CORRECTIONS_DIRECTORY</td>
|
|
<td>
|
|
$(P)$(R)PECorrectionsDir</td>
|
|
<td>
|
|
waveform</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
PE_LoadCorrectionsFile</td>
|
|
<td>
|
|
asynInt32</td>
|
|
<td>
|
|
w</td>
|
|
<td>
|
|
Load offset and gain corrections from a file for use</td>
|
|
<td>
|
|
PE_LOAD_CORRECTION_FILES</td>
|
|
<td>
|
|
$(P)$(R)PELoadCorrections</td>
|
|
<td>
|
|
longout</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
PE_SaveCorrectionsFile</td>
|
|
<td>
|
|
asynInt32</td>
|
|
<td>
|
|
w</td>
|
|
<td>
|
|
Save offset and gain corrections to a file</td>
|
|
<td>
|
|
PE_SAVE_CORRECTION_FILES</td>
|
|
<td>
|
|
$(P)$(R)PESaveCorrections</td>
|
|
<td>
|
|
longout</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<h2 id="Unsupported">
|
|
Unsupported standard driver parameters</h2>
|
|
<p>
|
|
The PerkinElmer driver does not support the following standard driver parameters
|
|
because they are not supported in the PerkinElmer library:</p>
|
|
<ul>
|
|
<li>Size (ADBinX, ADBinY, ADMinX, ADMinY, ADSizeX, ADSizeY)</li>
|
|
<li>Type/Color (NDDataType, NDColorMode)</li>
|
|
<li>File ( None of the file parameters in NDFile )</li>
|
|
<li>Binning (Not supported in software yet ) </li>
|
|
<li>No Hardware shutter control </li>
|
|
<li>List any unsupported parameters here (WORK NEEDED)</li>
|
|
</ul>
|
|
<h2 id="Configuration">
|
|
Configuration</h2>
|
|
<p>
|
|
The PerkinElmer driver is created with the perkinElmerConfig command, either from
|
|
C/C++ or from the EPICS IOC shell.</p>
|
|
<pre>int PerkinElmerConfig(const char *portName, int maxSizeX, int maxSizeY, int dataType,
|
|
int maxBuffers, size_t maxMemory,
|
|
int priority, int stackSize )
|
|
</pre>
|
|
<p>
|
|
For details on the meaning of the parameters to this function refer to the detailed
|
|
documentation on the PerkinElmerConfig function in the <a href="areaDetectorDoxygenHTML/_perkin_elmer_8cpp.html">
|
|
PerkinElmer.cpp documentation</a> and in the documentation for the constructor
|
|
for the <a href="areaDetectorDoxygenHTML/class_perkin_elmer.html">PerkinElmer class</a>.
|
|
</p>
|
|
<p>
|
|
There an example IOC boot directory and startup script (<a href="perkin_elmer_st_cmd.html">iocBoot/iocPerkinElmer/st.cmd)</a>
|
|
provided with areaDetector.
|
|
</p>
|
|
<h2 id="MEDM_screens" style="text-align: left">
|
|
MEDM screens</h2>
|
|
<p>
|
|
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.</p>
|
|
<p>
|
|
<code>PerkinElmer.adl</code> is the main screen used to control the PerkinElmer
|
|
driver.
|
|
</p>
|
|
<div style="text-align: center">
|
|
<h3 style="text-align: center">
|
|
PerkinElmer.adl</h3>
|
|
<img alt="PerkinElmer.png" src="PerkinElmer.png" /></div>
|
|
<h2 id="Performance_measurements">
|
|
Performance measurements</h2>
|
|
<p>
|
|
The following measurements were done to demonstrate the performance that can be
|
|
obtained with the areaDetector PerkinElmer driver.</p>
|
|
<p>
|
|
PUT A TABLE OF PERFORMANCE MEASUREMENTS HERE</p>
|
|
<h2 id="Restrictions">
|
|
Restrictions</h2>
|
|
<p>
|
|
The following are some current restrictions of the PerkinElmer driver:</p>
|
|
<ul>
|
|
<li>DOCUMENT ANY IMPORTANT RESTRICTIONS OF THE PERKIN ELMER DRIVER HERE</li>
|
|
</ul>
|
|
</body>
|
|
</html>
|