Many updates; converted to clean xhtml with nice formatting

git-svn-id: https://subversion.xor.aps.anl.gov/synApps/areaDetector/trunk@7637 dc6c5ff5-0b8b-c028-a01f-ffb33f00fc8b
This commit is contained in:
rivers
2008-09-18 20:20:18 +00:00
parent 7e5472c1f3
commit 46ef417dfb
5 changed files with 4682 additions and 3609 deletions

View File

@@ -1,349 +1,329 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html lang="en-us" xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>areaDetector ADSC driver</title>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
</head>
<body>
<center>
<h1>areaDetector ADSC driver</h1>
<h2> September 5, 2008</h2>
<h2> Lewis Muir</h2>
<h2> University of Chicago</h2>
</center>
<h2>Table of Contents</h2>
<ol>
<li><a href="#Introduction">Introduction</a></li>
<li><a href="#Dependencies">Dependencies</a></li>
<li><a href="#Building">Building</a></li>
<li><a href="#Configuring">Configuring</a></li>
<li><a href="#ImageModes">Image Modes</a></li>
<li><a href="#TriggerModes">Trigger Modes</a></li>
<li><a href="#DarkImages">Dark Images</a></li>
<li><a href="#ValuesAndSettings">Driver Specific Values and Settings</a></li>
<li><a href="#Screenshots">Screenshots</a></li>
<li><a href="#Unsupported">Unsupported <tt>areaDetector</tt> <q>base</q>
Features</a></li>
<li><a href="#Limitations">Limitations</a></li>
</ol>
<h2 id="Introduction">Introduction</h2>
<p>
This is a driver for <a href="http://www.adsc-xray.com/">ADSC</a> detectors.
It has been tested with the ADSC Q210. While not yet tested with other
models, it should work with the ADSC Q4 (with the upgrade to four computers),
Q4r, Q210, Q210r, Q270, Q315, and Q315r.
</p>
<h2 id="Dependencies">Dependencies</h2>
<p>
This driver controls the detector via the <tt>detcon_lib_th</tt> detector
control library provided by ADSC. The <tt>detcon_lib_th</tt> library must
date from 2008-06-30 or newer.
</p>
<h2 id="Building">Building</h2>
<ol>
<li>Build the ADSC control library</li>
<li>Copy and rename, or create a symlink to, the ADSC <tt>auxlib.a</tt>
library so that it has the name <tt>libauxlib.a</tt> to satisfy the EPICS
build facility's requirement that a library file name start with
<q><tt>lib</tt></q></li>
<li>Add <q><tt>DIRS += adscSrc</tt></q> to <tt>ADApp/Makefile</tt></li>
<li>Set <tt>ADSC_HOME</tt> in <tt>ADApp/adscSrc/Makefile</tt></li>
<li>Rebuild the <tt>areaDetector</tt> module</li>
</ol>
<h2 id="Configuring">Configuring</h2>
<p>
This driver is configured via the <tt>adscConfig()</tt> function. If this is
to be used in an IOC, it must be called before <tt>iocInit()</tt>. It has the
following signature:
</p>
<dl>
<dt><tt>int adscConfig(const char *portName, const char *modelName)</tt></dt>
<dd>
<dl>
<dt><tt>portName</tt></dt>
<dd>ASYN port name for the driver instance</dd>
<dt><tt>modelName</tt></dt>
<dd>ADSC detector model name; must be one of <tt>Q4</tt>, <tt>Q4r</tt>,
<tt>Q210</tt>, <tt>Q210r</tt>, <tt>Q270</tt>, <tt>Q315</tt>,
<tt>Q315r</tt></dd>
</dl>
</dd>
</dl>
<p>
The underlying ADSC control library obtains its configuration from the
environment. Therefore, the environment must be correctly configured (i.e.
ADSC environment variables set) for the ADSC control library before calling
<tt>adscConfig()</tt>.
</p>
<p>
If being used in an IOC, and an EPICS PV interface with the driver is desired,
the <tt>ADBase.template</tt> and <tt>adsc.template</tt> databases should also
be loaded for the driver instance.
</p>
<p>
An example IOC configuration for this driver is at
<tt>iocBoot/iocAdsc/st.cmd</tt>.
</p>
<h2 id="ImageModes">Image Modes</h2>
<h3><tt>Single</tt></h3>
<p>
The <tt>Single</tt> mode acquires just one image.
</p>
<h3><tt>Multiple</tt></h3>
<p>
The <tt>Multiple</tt> mode acquires the number of images specified in
<tt>$(P)$(R)NumImages_RBV</tt>.
</p>
<h3><tt>Continuous</tt></h3>
<p>
The <tt>Continuous</tt> mode acquires images indefinitely until <em>last
image</em> is set. In this mode, the last image of the acquisition must be
signaled before exposing the last image by setting
<tt>$(P)$(R)ADSCLastImage</tt> to <tt>1</tt>. This requirement is due to how
the underlying ADSC control library works.
</p>
<h2 id="TriggerModes">Trigger Modes</h2>
<h3><tt>Internal</tt></h3>
<p>
The <tt>Internal</tt> mode will make the driver expose images on its own once
the acquisition is started.
</p>
<h3><tt>External</tt></h3>
<p>
The <tt>External</tt> mode will make the driver expose images only when told
to once the acquisition is started. A special protocol must be followed to
trigger each image exposure. This would normally be very simple, but because
the ADSC control library can report that an exposure did not work and should
be retried after any exposure, a more complex protocol is required.
</p>
<p>
The protocol is described in terms of the EPICS PV driver interface, but the
same rules apply if controlling the driver directly through ASYN. The
protocol is as follows:
</p>
<ol>
<li>Wait for <tt>$(P)$(R)ADSCOkToExpose</tt> to be <tt>Yes</tt></li>
<li>Set <tt>$(P)$(R)ADSCExTrCtl</tt> to <tt>Start</tt> to start the
exposure</li>
<li>Set <tt>$(P)$(R)ADSCExTrCtl</tt> to <tt>Stop</tt> to stop the
exposure</li>
<li>Wait for <tt>$(P)$(R)ADSCExTrCtl_RBV</tt> to be <tt>OK</tt> or
<tt>Again</tt></li>
<li>If <tt>$(P)$(R)ADSCExTrCtl_RBV</tt> is <tt>Again</tt>, the exposure did
not work and should be tried again</li>
</ol>
<p>
Note that care must be taken when waiting for <tt>$(P)$(R)ADSCExTrCtl_RBV</tt>
to be <tt>OK</tt> or <tt>Again</tt> to ensure the PV value is not stale (i.e.
from the previous exposure). There are at least two methods to ensure this:
</p>
<ul>
<li>Use a CA monitor on <tt>$(P)$(R)ADSCExTrCtl_RBV</tt>; before waiting for
the <tt>OK</tt> or <tt>Again</tt> values, wait for the <tt>Stop</tt> value; a
CA monitor is used to receive the value changes since the PV will have the
<tt>Stop</tt> value for just a short time</li>
<li>After starting the exposure, wait for <tt>$(P)$(R)ADSCExTrCtl_RBV</tt> to
be <tt>Start</tt></li>
</ul>
<h2 id="DarkImages">Dark Images</h2>
<p>
Dark images are acquired automatically at the beginning of a data acquisition.
They are taken if any of the following conditions are true:
</p>
<ul>
<li><em>Reuse darks</em> is <tt>No</tt></li>
<li><em>Exposure time</em> is different from that of the previous
acquisition</li>
<li><em>ADC/binning</em> is different from that of the previous
acquisition</li>
<li><em>Binning</em> is different from that of the previous acquisition</li>
<li>The acquisition is the first after <em>stored darks</em> was changed from
<tt>Yes</tt> to <tt>No</tt></li>
</ul>
<h2 id="ValuesAndSettings">Driver Specific Values and Settings</h2>
<p>
This driver provides status values and settings in addition to what is
provided by <tt>areaDetector</tt> <q>base</q>. They are listed here according
to their label in the driver specific MEDM GUI and their EPICS PV name in the
EPICS PV driver interface. A screenshot of the driver specific MEDM GUI can
be seen in the <a href="#Screenshots">Screenshots</a> section.
</p>
<h3>Detector Condition</h3>
<dl>
<dt>State, <tt>$(P)$(R)ADSCState</tt></dt>
<dd>State of the detector reported by the ADSC control library.</dd>
<dt>Status, <tt>$(P)$(R)ADSCStatus</tt></dt>
<dd>Status message reported by the ADSC control library.</dd>
<dt>Last error, <tt>$(P)$(R)ADSCLastError</tt></dt>
<dd>Last error message reported by the ADSC control library.</dd>
<dt>Update rate for above properties,
<tt>$(P)$(R)ADSCReadConditn.SCAN</tt></dt>
<dd>How frequently to update the above properties.</dd>
</dl>
<h3>Detector Error Recovery</h3>
<dl>
<dt>Software Reset, <tt>$(P)$(R)ADSCSoftReset</tt></dt>
<dd>Performs a software reset. Aborts any current operation, clears status
and error messages, and sets <em>detector state</em> to <tt>Idle</tt>.</dd>
</dl>
<h3>Detector Continuous Image Mode</h3>
<dl>
<dt>Last Image, <tt>$(P)$(R)ADSCLastImage</tt></dt>
<dd>Signals that the next exposure is the last image when in
<tt>Continuous</tt> image mode.</dd>
</dl>
<h3>Detector External Trigger</h3>
<dl>
<dt>OK to expose, <tt>$(P)$(R)ADSCOkToExpose</tt></dt>
<dd>When in <tt>External</tt> trigger mode, indicates whether it is OK to
start an image exposure.</dd>
<dt>Start, Stop, <tt>$(P)$(R)ADSCExTrCtl</tt></dt>
<dd>When in <tt>External</tt> trigger mode, set to <tt>1</tt> to start an
exposure and <tt>0</tt> to stop it.</dd>
<dt><tt>$(P)$(R)ADSCExTrCtl_RBV</tt></dt>
<dd>When in <tt>External</tt> trigger mode, will be <tt>Start</tt>,
<tt>Stop</tt>, <tt>OK</tt>, or <tt>Again</tt>. See <a
href="#TriggerModes">Trigger Modes</a> section for more about how this
property will behave.</dd>
</dl>
<h3>Driver Parameters</h3>
<dl>
<dt>Reuse darks, <tt>$(P)$(R)ADSCReusDrk</tt></dt>
<dd>Reuse dark images when possible. This is useful to avoid wasting time
acquiring dark images when previously acquired dark images are available and
can be reused.</dd>
<dt>Dezinger, <tt>$(P)$(R)ADSCDezingr</tt></dt>
<dd>Acquire <q>dezingered</q> images.</dd>
</dl>
<h3>Detector Hardware Parameters</h3>
<dl>
<dt>ADC/Binning, <tt>$(P)$(R)ADSCAdc</tt></dt>
<dd>For Q4 and Q4r detectors, controls whether to use <tt>Fast</tt> or
<tt>Slow</tt> ADC. For all other detectors, controls whether to use
<tt>Hardware</tt> or <tt>Software</tt> binning.</dd>
<dt>Raw images, <tt>$(P)$(R)ADSCRaw</tt></dt>
<dd>Write raw images.</dd>
<dt>Image transforms, <tt>$(P)$(R)ADSCImXform</tt></dt>
<dd>Perform image transformations.</dd>
<dt>Stored darks, <tt>$(P)$(R)ADSCStrDrks</tt></dt>
<dd>Use stored dark images. If set to <tt>Yes</tt>, stored dark images are
assumed to have been installed by ADSC and should be used.</dd>
</dl>
<h3>Detector File Parameters</h3>
<dl>
<dt>Beam center X, <tt>$(P)$(R)ADSCBeamX</tt></dt>
<dd>Beam center in the X dimension.</dd>
<dt>Beam center Y, <tt>$(P)$(R)ADSCBeamY</tt></dt>
<dd>Beam center in the Y dimension.</dd>
<dt>Distance, <tt>$(P)$(R)ADSCDistnce</tt></dt>
<dd>Detector distance.</dd>
<dt>Two theta, <tt>$(P)$(R)ADSC2Theta</tt></dt>
<dd>Detector 2&theta; angle.</dd>
<dt>Axis, <tt>$(P)$(R)ADSCAxis</tt></dt>
<dd>Crystal rotation axis.</dd>
<dt>Wavelength, <tt>$(P)$(R)ADSCWavelen</tt></dt>
<dd>X-ray wavelength.</dd>
<dt>Image width, <tt>$(P)$(R)ADSCImWidth</tt></dt>
<dd>Crystal rotation during exposure.</dd>
<dt>Phi, <tt>$(P)$(R)ADSCPhi</tt></dt>
<dd>Phi position at start of exposure.</dd>
<dt>Omega, <tt>$(P)$(R)ADSCOmega</tt></dt>
<dd>Omega position at start of exposure.</dd>
<dt>Kappa, <tt>$(P)$(R)ADSCKappa</tt></dt>
<dd>Kappa position at start of exposure.</dd>
</dl>
<h2 id="Screenshots">Screenshots</h2>
<ul>
<li><a href="adsc-screenshot.png">ADSC Specific MEDM GUI</a></li>
</ul>
<h2 id="Unsupported">Unsupported <tt>areaDetector</tt> <q>base</q>
Features</h2>
<ul>
<li>Shutter control</li>
<li>Collect: number of exposures per image</li>
<li>File: save file</li>
<li>File: read file</li>
<li>File: format</li>
<li>File: auto save (always <tt>Yes</tt>)</li>
<li>Readout: image region of interest</li>
<li>Readout: reverse image</li>
<li>Readout: gain</li>
<li>Readout: data type (always <tt>UInt16</tt>)</li>
<li>Image frame callbacks</li>
</ul>
<h2 id="Limitations">Limitations</h2>
<ul>
<li>Only one ADSC detector may be controlled with this driver per OS process.
If this driver is being used in an IOC, this means only one ADSC detector may
be controlled with this driver per IOC. This is a limitation of the
underlying ADSC control library which does not support more than one detector
per OS process.</li>
<li>Acquiring <q>dezingered</q> images is not supported. This is a limitation
of the underlying ADSC control library which has a bug preventing it from
working correctly.</li>
<li><em>Software reset</em> does not work. This is a limitation of the
underlying ADSC control library which has a bug preventing it from working
correctly. It would be great if, after an error, performing a software reset
would allow a new acquisition to proceed normally. Currently, the recovery
solution often is to restart the control software.</li>
</ul>
</body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html lang="en-us" xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>areaDetector ADSC driver</title>
<meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type" />
</head>
<body>
<center>
<h1>
areaDetector ADSC driver</h1>
<h2>
September 17, 2008</h2>
<h2>
Lewis Muir</h2>
<h2>
University of Chicago</h2>
</center>
<h2>
Table of Contents</h2>
<ol>
<li><a href="#Introduction">Introduction</a></li>
<li><a href="#Dependencies">Dependencies</a></li>
<li><a href="#Building">Building</a></li>
<li><a href="#Configuring">Configuring</a></li>
<li><a href="#ImageModes">Image Modes</a></li>
<li><a href="#TriggerModes">Trigger Modes</a></li>
<li><a href="#DarkImages">Dark Images</a></li>
<li><a href="#ValuesAndSettings">Driver Specific Values and Settings</a></li>
<li><a href="#Screenshots">Screenshots</a></li>
<li><a href="#Unsupported">Unsupported <tt>areaDetector</tt> <q>base</q> Features</a></li>
<li><a href="#Limitations">Limitations</a></li>
</ol>
<h2 id="Introduction">
Introduction</h2>
<p>
This is a driver for <a href="http://www.adsc-xray.com/">ADSC</a> detectors. It
has been tested with the ADSC Q210. While not yet tested with other models, it should
work with the ADSC Q4 (with the upgrade to four computers), Q4r, Q210, Q210r, Q270,
Q315, and Q315r.
</p>
<h2 id="Dependencies">
Dependencies</h2>
<p>
This driver controls the detector via the <tt>detcon_lib_th</tt> detector control
library provided by ADSC. The <tt>detcon_lib_th</tt> library must date from 2008-06-30
or newer.
</p>
<h2 id="Building">
Building</h2>
<ol>
<li>Build the ADSC control library</li>
<li>Copy and rename, or create a symlink to, the ADSC <tt>auxlib.a</tt> library so
that it has the name <tt>libauxlib.a</tt> to satisfy the EPICS build facility's
requirement that a library file name start with <q><tt>lib</tt></q></li>
<li>Add <q><tt>DIRS += adscSrc</tt></q> to <tt>ADApp/Makefile</tt></li>
<li>Set <tt>ADSC_HOME</tt> in <tt>ADApp/adscSrc/Makefile</tt></li>
<li>Rebuild the <tt>areaDetector</tt> module</li>
</ol>
<h2 id="Configuring">
Configuring</h2>
<p>
This driver is configured via the <tt>adscConfig()</tt> function. If this is to
be used in an IOC, it must be called before <tt>iocInit()</tt>. It has the following
signature:
</p>
<dl>
<dt><tt>int adscConfig(const char *portName, const char *modelName)</tt></dt>
<dd>
<dl>
<dt><tt>portName</tt></dt>
<dd>
ASYN port name for the driver instance</dd>
<dt><tt>modelName</tt></dt>
<dd>
ADSC detector model name; must be one of <tt>Q4</tt>, <tt>Q4r</tt>, <tt>Q210</tt>,
<tt>Q210r</tt>, <tt>Q270</tt>, <tt>Q315</tt>, <tt>Q315r</tt></dd>
</dl>
</dd>
</dl>
<p>
The underlying ADSC control library obtains its configuration from the environment.
Therefore, the environment must be correctly configured (i.e. ADSC environment variables
set) for the ADSC control library before calling <tt>adscConfig()</tt>.
</p>
<p>
If being used in an IOC, and an EPICS PV interface with the driver is desired, the
<tt>ADBase.template</tt> and <tt>adsc.template</tt> databases should also be loaded
for the driver instance.
</p>
<p>
An example IOC configuration for this driver is at <tt>iocBoot/iocAdsc/st.cmd</tt>.
</p>
<h2 id="ImageModes">
Image Modes</h2>
<h3>
<tt>Single</tt></h3>
<p>
The <tt>Single</tt> mode acquires just one image.
</p>
<h3>
<tt>Multiple</tt></h3>
<p>
The <tt>Multiple</tt> mode acquires the number of images specified in <tt>$(P)$(R)NumImages_RBV</tt>.
</p>
<h3>
<tt>Continuous</tt></h3>
<p>
The <tt>Continuous</tt> mode acquires images indefinitely until <em>last image</em>
is set. In this mode, the last image of the acquisition must be signaled before
exposing the last image by setting <tt>$(P)$(R)ADSCLastImage</tt> to <tt>1</tt>.
This requirement is due to how the underlying ADSC control library works.
</p>
<h2 id="TriggerModes">
Trigger Modes</h2>
<h3>
<tt>Internal</tt></h3>
<p>
The <tt>Internal</tt> mode will make the driver expose images on its own once the
acquisition is started.
</p>
<h3>
<tt>External</tt></h3>
<p>
The <tt>External</tt> mode will make the driver expose images only when told to
once the acquisition is started. A special protocol must be followed to trigger
each image exposure. This would normally be very simple, but because the ADSC control
library can report that an exposure did not work and should be retried after any
exposure, a more complex protocol is required.
</p>
<p>
The protocol is described in terms of the EPICS PV driver interface, but the same
rules apply if controlling the driver directly through ASYN. The protocol is as
follows:
</p>
<ol>
<li>Wait for <tt>$(P)$(R)ADSCOkToExpose</tt> to be <tt>Yes</tt></li>
<li>Set <tt>$(P)$(R)ADSCExTrCtl</tt> to <tt>Start</tt> to start the exposure</li>
<li>Set <tt>$(P)$(R)ADSCExTrCtl</tt> to <tt>Stop</tt> to stop the exposure</li>
<li>Wait for <tt>$(P)$(R)ADSCExTrCtl_RBV</tt> to be <tt>OK</tt> or <tt>Again</tt></li>
<li>If <tt>$(P)$(R)ADSCExTrCtl_RBV</tt> is <tt>Again</tt>, the exposure did not work
and should be tried again</li>
</ol>
<p>
Note that care must be taken when waiting for <tt>$(P)$(R)ADSCExTrCtl_RBV</tt> to
be <tt>OK</tt> or <tt>Again</tt> to ensure the PV value is not stale (i.e. from
the previous exposure). There are at least two methods to ensure this:
</p>
<ul>
<li>Use a CA monitor on <tt>$(P)$(R)ADSCExTrCtl_RBV</tt>; before waiting for the <tt>
OK</tt> or <tt>Again</tt> values, wait for the <tt>Stop</tt> value; a CA monitor
is used to receive the value changes since the PV will have the <tt>Stop</tt> value
for just a short time</li>
<li>After starting the exposure, wait for <tt>$(P)$(R)ADSCExTrCtl_RBV</tt> to be <tt>
Start</tt></li>
</ul>
<h2 id="DarkImages">
Dark Images</h2>
<p>
Dark images are acquired automatically at the beginning of a data acquisition. They
are taken if any of the following conditions are true:
</p>
<ul>
<li><em>Reuse darks</em> is <tt>No</tt></li>
<li><em>Exposure time</em> is different from that of the previous acquisition</li>
<li><em>ADC/binning</em> is different from that of the previous acquisition</li>
<li><em>Binning</em> is different from that of the previous acquisition</li>
<li>The acquisition is the first after <em>stored darks</em> was changed from <tt>
Yes</tt> to <tt>No</tt></li>
</ul>
<h2 id="ValuesAndSettings">
Driver Specific Values and Settings</h2>
<p>
This driver provides status values and settings in addition to what is provided
by <tt>areaDetector</tt> <q>base</q>. They are listed here according to their label
in the driver specific MEDM GUI and their EPICS PV name in the EPICS PV driver interface.
A screenshot of the driver specific MEDM GUI can be seen in the <a href="#Screenshots">
Screenshots</a> section.
</p>
<h3>
Detector Condition</h3>
<dl>
<dt>State, <tt>$(P)$(R)ADSCState</tt></dt>
<dd>
State of the detector reported by the ADSC control library.</dd>
<dt>Status, <tt>$(P)$(R)ADSCStatus</tt></dt>
<dd>
Status message reported by the ADSC control library.</dd>
<dt>Last error, <tt>$(P)$(R)ADSCLastError</tt></dt>
<dd>
Last error message reported by the ADSC control library.</dd>
<dt>Update rate for above properties, <tt>$(P)$(R)ADSCReadConditn.SCAN</tt></dt>
<dd>
How frequently to update the above properties.</dd>
</dl>
<h3>
Detector Error Recovery</h3>
<dl>
<dt>Software Reset, <tt>$(P)$(R)ADSCSoftReset</tt></dt>
<dd>
Performs a software reset. Aborts any current operation, clears status and error
messages, and sets <em>detector state</em> to <tt>Idle</tt>.</dd>
</dl>
<h3>
Detector Continuous Image Mode</h3>
<dl>
<dt>Last Image, <tt>$(P)$(R)ADSCLastImage</tt></dt>
<dd>
Signals that the next exposure is the last image when in <tt>Continuous</tt> image
mode.</dd>
</dl>
<h3>
Detector External Trigger</h3>
<dl>
<dt>OK to expose, <tt>$(P)$(R)ADSCOkToExpose</tt></dt>
<dd>
When in <tt>External</tt> trigger mode, indicates whether it is OK to start an image
exposure.</dd>
<dt>Start, Stop, <tt>$(P)$(R)ADSCExTrCtl</tt></dt>
<dd>
When in <tt>External</tt> trigger mode, set to <tt>1</tt> to start an exposure and
<tt>0</tt> to stop it.</dd>
<dt><tt>$(P)$(R)ADSCExTrCtl_RBV</tt></dt>
<dd>
When in <tt>External</tt> trigger mode, will be <tt>Start</tt>, <tt>Stop</tt>, <tt>
OK</tt>, or <tt>Again</tt>. See <a href="#TriggerModes">Trigger Modes</a> section
for more about how this property will behave.</dd>
</dl>
<h3>
Driver Parameters</h3>
<dl>
<dt>Reuse darks, <tt>$(P)$(R)ADSCReusDrk</tt></dt>
<dd>
Reuse dark images when possible. This is useful to avoid wasting time acquiring
dark images when previously acquired dark images are available and can be reused.</dd>
<dt>Dezinger, <tt>$(P)$(R)ADSCDezingr</tt></dt>
<dd>
Acquire <q>dezingered</q> images.</dd>
</dl>
<h3>
Detector Hardware Parameters</h3>
<dl>
<dt>ADC/Binning, <tt>$(P)$(R)ADSCAdc</tt></dt>
<dd>
For Q4 and Q4r detectors, controls whether to use <tt>Fast</tt> or <tt>Slow</tt>
ADC. For all other detectors, controls whether to use <tt>Hardware</tt> or <tt>Software</tt>
binning.</dd>
<dt>Raw images, <tt>$(P)$(R)ADSCRaw</tt></dt>
<dd>
Write raw images.</dd>
<dt>Image transforms, <tt>$(P)$(R)ADSCImXform</tt></dt>
<dd>
Perform image transformations.</dd>
<dt>Stored darks, <tt>$(P)$(R)ADSCStrDrks</tt></dt>
<dd>
Use stored dark images. If set to <tt>Yes</tt>, stored dark images are assumed to
have been installed by ADSC and should be used.</dd>
</dl>
<h3>
Detector File Parameters</h3>
<dl>
<dt>Beam center X, <tt>$(P)$(R)ADSCBeamX</tt></dt>
<dd>
Beam center in the X dimension.</dd>
<dt>Beam center Y, <tt>$(P)$(R)ADSCBeamY</tt></dt>
<dd>
Beam center in the Y dimension.</dd>
<dt>Distance, <tt>$(P)$(R)ADSCDistnce</tt></dt>
<dd>
Detector distance.</dd>
<dt>Two theta, <tt>$(P)$(R)ADSC2Theta</tt></dt>
<dd>
Detector 2&theta; angle.</dd>
<dt>Axis, <tt>$(P)$(R)ADSCAxis</tt></dt>
<dd>
Crystal rotation axis.</dd>
<dt>Wavelength, <tt>$(P)$(R)ADSCWavelen</tt></dt>
<dd>
X-ray wavelength.</dd>
<dt>Image width, <tt>$(P)$(R)ADSCImWidth</tt></dt>
<dd>
Crystal rotation during exposure.</dd>
<dt>Phi, <tt>$(P)$(R)ADSCPhi</tt></dt>
<dd>
Phi position at start of exposure.</dd>
<dt>Omega, <tt>$(P)$(R)ADSCOmega</tt></dt>
<dd>
Omega position at start of exposure.</dd>
<dt>Kappa, <tt>$(P)$(R)ADSCKappa</tt></dt>
<dd>
Kappa position at start of exposure.</dd>
</dl>
<h2 id="Screenshots">
Screenshots</h2>
<ul>
<li><a href="adsc-screenshot.png">ADSC Specific MEDM GUI</a></li>
</ul>
<h2 id="Unsupported">
Unsupported <tt>areaDetector</tt> <q>base</q> Features</h2>
<ul>
<li>Shutter control</li>
<li>Collect: number of exposures per image</li>
<li>File: save file</li>
<li>File: read file</li>
<li>File: format</li>
<li>File: auto save (always <tt>Yes</tt>)</li>
<li>Readout: image region of interest</li>
<li>Readout: reverse image</li>
<li>Readout: gain</li>
<li>Readout: data type (always <tt>UInt16</tt>)</li>
<li>Image frame callbacks</li>
</ul>
<h2 id="Limitations">
Limitations</h2>
<ul>
<li>Only one ADSC detector may be controlled with this driver per OS process. If this
driver is being used in an IOC, this means only one ADSC detector may be controlled
with this driver per IOC. This is a limitation of the underlying ADSC control library
which does not support more than one detector per OS process.</li>
<li>Acquiring <q>dezingered</q> images is not supported. This is a limitation of the
underlying ADSC control library which has a bug preventing it from working correctly.</li>
<li><em>Software reset</em> does not work. This is a limitation of the underlying
ADSC control library which has a bug preventing it from working correctly. It would
be great if, after an error, performing a software reset would allow a new acquisition
to proceed normally. Currently, the recovery solution often is to restart the control
software.</li>
</ul>
</body>
</html>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1,205 +1,310 @@
<HTML>
<HEAD>
<TITLE>areaDetector Prosilica driver</TITLE>
</HEAD>
<BODY>
<CENTER>
<H1>areaDetector Prosilica driver</H1>
<H2> September 5, 2008</H2>
<H2> Mark Rivers</H2>
<H2> University of Chicago</H2>
</CENTER>
<P>&nbsp;</P>
<CENTER><H2>Contents</H2></CENTER>
<UL>
<LI><A href="#Overview">
Overview</A>
<LI><A href="#Performance measurements">
Performance measurements</A>
<LI><A href="#Hardware notes">
Hardware notes</A>
<LI><A href="#Restrictions">
Restrictions</A>
</UL>
<CENTER><H2><A name="Prosilica Driver">
Prosilica Driver</A></H2></CENTER>
This is a driver for Gigabit Ethernet and Firewire cameras from
<A HREF="http://www.prosilica.com">Prosilica</A>.
It inherits from ADDriver and implements nearly all of the parameters in ADStdDriverParams.h.
It also implements a number of parameters that are specific
to the Prosilica cameras. The driver is currently only supported under Windows (EPICS win32-x86 architecture)
because the vendor library is provided as a Windows DLL.
The vendor library provided by Prosilica does callbacks to a user-supplied
function each time there is a new frame. Thus, it is not necessary to create a thread for callbacks in this driver.
<P>
The vendor library supports saving individual frames as TIFF files, and this is implemented in the driver. The NDPluginFile
plugin can be used to capture or stream images much more rapidly in the netCDF file format.
<P>
The driver redefines the choices for 2 of the parameters defined in ADStdDriverParams.h. The ADTriggerMode choices for the
Prosilica are:
<UL>
<LI>Free Run (collects images as fast as allowed by the camera readout and the exposure time)
<LI>Sync In 1 (external trigger on line 1)
<LI>Sync In 2 (external trigger on line 2)
<LI>Sync In 3 (external trigger on line 3)
<LI>Sync In 4 (external trigger on line 4)
<LI>Fixed Rate (collects images at a fixed rate)
<LI>Software (single software trigger)
</UL>
<P>The Prosilica supports additional hardware timing signals that may be supported in a future release.
<P>
The ADFileFormat choices for the Prosilica are:
<UL>
<LI>TIFF (this is the only format supported)
<LI>Invalid
</UL>
The Prosilica driver implements the following parameters in addition to those in ADStdDriverParams.h:
<P>
<TABLE style="TEXT-ALIGN: left" cellSpacing=2 cellPadding=2 border=1>
<TBODY>
<TR>
<TD COLSPAN=7, ALIGN=CENTER><B>Parameter Definitions in prosilica.cpp and EPICS Record Definitions in prosilica.template</B></TD>
</TR>
<TR>
<TH>Enum name</TH>
<TH>asyn interface</TH>
<TH>Access</TH>
<TH>Description</TH>
<TH>drvUser string</TH>
<TH>EPICS record name</TH>
<TH>EPICS record type</TH>
</TR>
<TR>
<TD>PSReadStatistics</TD>
<TD>asynInt32</TD>
<TD>r/w</TD>
<TD>Read the Gigabit Ethernet statistics when 1</TD>
<TD>PS_READ_STATISTICS</TD>
<TD>$(P)$(R)PSReadStatistics</TD>
<TD>longout</TD>
</TR>
<TR>
<TD>PSStatDriverType</TD>
<TD>asynOctet</TD>
<TD>r/o</TD>
<TD>Driver type</TD>
<TD>PS_DRIVER_TYPE</TD>
<TD>$(P)$(R)PSDriverType_RBV</TD>
<TD>stringin</TD>
</TR>
<TR>
<TD>PSStatFilterVersion</TD>
<TD>asynOctet</TD>
<TD>r/o</TD>
<TD>Packet filter version</TD>
<TD>PS_FILTER_VERSION</TD>
<TD>$(P)$(R)PSFilterVersion_RBV</TD>
<TD>stringin</TD>
</TR>
<TR>
<TD>PSStatFrameRate</TD>
<TD>asynFloat64</TD>
<TD>r/o</TD>
<TD>Frame rate (Hz)</TD>
<TD>PS_FRAME_RATE</TD>
<TD>$(P)$(R)PSFrameRate_RBV</TD>
<TD>ai</TD>
</TR>
<TR>
<TD>PSStatFramesCompleted</TD>
<TD>asynInt32</TD>
<TD>r/o</TD>
<TD>Number of frames completed</TD>
<TD>PS_FRAMES_COMPLETED</TD>
<TD>$(P)$(R)PSFramesCompleted_RBV</TD>
<TD>longin</TD>
</TR>
<TR>
<TD>PSStatFramesDropped</TD>
<TD>asynInt32</TD>
<TD>r/o</TD>
<TD>Number of frames dropped</TD>
<TD>PS_FRAMES_DROPPED</TD>
<TD>$(P)$(R)PSFramesDropped_RBV</TD>
<TD>longin</TD>
</TR>
<TR>
<TD>PSStatPacketsErroneous</TD>
<TD>asynInt32</TD>
<TD>r/o</TD>
<TD>Number of erroneous packets</TD>
<TD>PS_PACKETS_ERRONEOUS</TD>
<TD>$(P)$(R)PSPacketsErroneous_RBV</TD>
<TD>longin</TD>
</TR>
<TR>
<TD>PSStatPacketsMissed</TD>
<TD>asynInt32</TD>
<TD>r/o</TD>
<TD>Number of missed packets</TD>
<TD>PS_PACKETS_MISSED</TD>
<TD>$(P)$(R)PSPacketsMissed_RBV</TD>
<TD>longin</TD>
</TR>
<TR>
<TD>PSStatPacketsReceived</TD>
<TD>asynInt32</TD>
<TD>r/o</TD>
<TD>Number of received packets</TD>
<TD>PS_PACKETS_RECEIVED</TD>
<TD>$(P)$(R)PSPacketsReceived_RBV</TD>
<TD>longin</TD>
</TR>
<TR>
<TD>PSStatPacketsRequested</TD>
<TD>asynInt32</TD>
<TD>r/o</TD>
<TD>Number of packets requested</TD>
<TD>PS_PACKETS_RESENT</TD>
<TD>$(P)$(R)PSPacketsRequested_RBV</TD>
<TD>longin</TD>
</TR>
<TR>
<TD>PSStatPacketsResent</TD>
<TD>asynInt32</TD>
<TD>r/o</TD>
<TD>Number of packets resent</TD>
<TD>PS_PACKETS_RESENT</TD>
<TD>$(P)$(R)PSPacketsResent_RBV</TD>
<TD>longin</TD>
</TR>
<TR>
<TD>PSBadFrameCounter</TD>
<TD>asynInt32</TD>
<TD>r/o</TD>
<TD>Number of bad frames</TD>
<TD>PS_BAD_FRAME_COUNTER</TD>
<TD>$(P)$(R)PSBadFrameCounter_RBV</TD>
<TD>longin</TD>
</TR>
</TBODY>
</TABLE>
<P>
The following is the MEDM screen ADBase.adl connected to a Prosilica camera.
<P>
<CENTER><IMG src="ADBase_prosilica.png"></CENTER>
<P>
The following is the MEDM screen that provides access to the specific parameters for the Prosilica detector.
<P>
<CENTER><IMG src="prosilica.png"></CENTER>
<P>
The following is an IDL epics_ad_display screen (discussed below) illustrating the Prosilica detector images.
<P>
<CENTER><IMG src="prosilica_tvscl.png"></CENTER>
<P>
</BODY>
</HTML>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>areaDetector Prosilica driver</title>
</head>
<body>
<center>
<h1>
areaDetector Prosilica driver</h1>
<h2>
September 17, 2008</h2>
<h2>
Mark Rivers</h2>
<h2>
University of Chicago</h2>
</center>
<p>
&nbsp;</p>
<center>
<h2>
Contents</h2>
</center>
<ul>
<li><a href="#Overview">Overview</a></li>
<li><a href="#Performance measurements">Performance measurements</a></li>
<li><a href="#Hardware notes">Hardware notes</a></li>
<li><a href="#Restrictions">Restrictions</a></li>
</ul>
<center>
<h2 id="Prosilica Driver">
Prosilica Driver</h2>
</center>
<p>
This is a driver for Gigabit Ethernet and Firewire cameras from <a href="http://www.prosilica.com">
Prosilica</a>. It inherits from ADDriver and implements nearly all of the parameters
in ADStdDriverParams.h. It also implements a number of parameters that are specific
to the Prosilica cameras. The driver is currently only supported under Windows (EPICS
win32-x86 architecture) because the vendor library is provided as a Windows DLL.
The vendor library provided by Prosilica does callbacks to a user-supplied function
each time there is a new frame. Thus, it is not necessary to create a thread for
callbacks in this driver.
</p>
<p>
The vendor library supports saving individual frames as TIFF files, and this is
implemented in the driver. The NDPluginFile plugin can be used to capture or stream
images much more rapidly in the netCDF file format.
</p>
<p>
The driver redefines the choices for 2 of the parameters defined in ADStdDriverParams.h.
The ADTriggerMode choices for the Prosilica are:
</p>
<ul>
<li>Free Run (collects images as fast as allowed by the camera readout and the exposure
time)</li>
<li>Sync In 1 (external trigger on line 1)</li>
<li>Sync In 2 (external trigger on line 2)</li>
<li>Sync In 3 (external trigger on line 3)</li>
<li>Sync In 4 (external trigger on line 4)</li>
<li>Fixed Rate (collects images at a fixed rate)</li>
<li>Software (single software trigger)</li>
</ul>
<p>
The Prosilica supports additional hardware timing signals that may be supported
in a future release.
</p>
<p>
The ADFileFormat choices for the Prosilica are:
</p>
<ul>
<li>TIFF (this is the only format supported)</li>
<li>Invalid (this menu item is defined only because MEDM will not display a menu widget
with only 1 choice)</li></ul>
<p>
The Prosilica driver implements the following parameters in addition to those in
ADStdDriverParams.h:
</p>
<table border="1" cellpadding="2" cellspacing="2" style="text-align: left">
<tbody>
<tr>
<td align="CENTER" colspan="7,">
<b>Parameter Definitions in prosilica.cpp and EPICS Record Definitions in prosilica.template</b></td>
</tr>
<tr>
<th>
Enum name</th>
<th>
asyn interface</th>
<th>
Access</th>
<th>
Description</th>
<th>
drvUser string</th>
<th>
EPICS record name</th>
<th>
EPICS record type</th>
</tr>
<tr>
<td>
PSReadStatistics</td>
<td>
asynInt32</td>
<td>
r/w</td>
<td>
Read the Gigabit Ethernet statistics when 1</td>
<td>
PS_READ_STATISTICS</td>
<td>
$(P)$(R)PSReadStatistics</td>
<td>
longout</td>
</tr>
<tr>
<td>
PSStatDriverType</td>
<td>
asynOctet</td>
<td>
r/o</td>
<td>
Driver type</td>
<td>
PS_DRIVER_TYPE</td>
<td>
$(P)$(R)PSDriverType_RBV</td>
<td>
stringin</td>
</tr>
<tr>
<td>
PSStatFilterVersion</td>
<td>
asynOctet</td>
<td>
r/o</td>
<td>
Packet filter version</td>
<td>
PS_FILTER_VERSION</td>
<td>
$(P)$(R)PSFilterVersion_RBV</td>
<td>
stringin</td>
</tr>
<tr>
<td>
PSStatFrameRate</td>
<td>
asynFloat64</td>
<td>
r/o</td>
<td>
Frame rate (Hz)</td>
<td>
PS_FRAME_RATE</td>
<td>
$(P)$(R)PSFrameRate_RBV</td>
<td>
ai</td>
</tr>
<tr>
<td>
PSStatFramesCompleted</td>
<td>
asynInt32</td>
<td>
r/o</td>
<td>
Number of frames completed</td>
<td>
PS_FRAMES_COMPLETED</td>
<td>
$(P)$(R)PSFramesCompleted_RBV</td>
<td>
longin</td>
</tr>
<tr>
<td>
PSStatFramesDropped</td>
<td>
asynInt32</td>
<td>
r/o</td>
<td>
Number of frames dropped</td>
<td>
PS_FRAMES_DROPPED</td>
<td>
$(P)$(R)PSFramesDropped_RBV</td>
<td>
longin</td>
</tr>
<tr>
<td>
PSStatPacketsErroneous</td>
<td>
asynInt32</td>
<td>
r/o</td>
<td>
Number of erroneous packets</td>
<td>
PS_PACKETS_ERRONEOUS</td>
<td>
$(P)$(R)PSPacketsErroneous_RBV</td>
<td>
longin</td>
</tr>
<tr>
<td>
PSStatPacketsMissed</td>
<td>
asynInt32</td>
<td>
r/o</td>
<td>
Number of missed packets</td>
<td>
PS_PACKETS_MISSED</td>
<td>
$(P)$(R)PSPacketsMissed_RBV</td>
<td>
longin</td>
</tr>
<tr>
<td>
PSStatPacketsReceived</td>
<td>
asynInt32</td>
<td>
r/o</td>
<td>
Number of received packets</td>
<td>
PS_PACKETS_RECEIVED</td>
<td>
$(P)$(R)PSPacketsReceived_RBV</td>
<td>
longin</td>
</tr>
<tr>
<td>
PSStatPacketsRequested</td>
<td>
asynInt32</td>
<td>
r/o</td>
<td>
Number of packets requested</td>
<td>
PS_PACKETS_RESENT</td>
<td>
$(P)$(R)PSPacketsRequested_RBV</td>
<td>
longin</td>
</tr>
<tr>
<td>
PSStatPacketsResent</td>
<td>
asynInt32</td>
<td>
r/o</td>
<td>
Number of packets resent</td>
<td>
PS_PACKETS_RESENT</td>
<td>
$(P)$(R)PSPacketsResent_RBV</td>
<td>
longin</td>
</tr>
<tr>
<td>
PSBadFrameCounter</td>
<td>
asynInt32</td>
<td>
r/o</td>
<td>
Number of bad frames</td>
<td>
PS_BAD_FRAME_COUNTER</td>
<td>
$(P)$(R)PSBadFrameCounter_RBV</td>
<td>
longin</td>
</tr>
</tbody>
</table>
<p>
The following is the MEDM screen ADBase.adl connected to a Prosilica camera.
</p>
<center>
<img alt="ADBase_prosilica.png" src="ADBase_prosilica.png" /></center>
<p>
The following is the MEDM screen that provides access to the specific parameters
for the Prosilica detector.
</p>
<center>
<img alt="prosilica.png" src="prosilica.png" /></center>
<p>
The following is an IDL epics_ad_display screen (discussed below) illustrating the
Prosilica detector images.
</p>
<center>
<img alt="prosilica_tvscl.png" src="prosilica_tvscl.png" /></center>
</body>
</html>