Convert to Linux line terminators
git-svn-id: https://subversion.xor.aps.anl.gov/synApps/areaDetector/trunk@7710 dc6c5ff5-0b8b-c028-a01f-ffb33f00fc8b
This commit is contained in:
@@ -1,60 +1,60 @@
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<title>areaDetectorReleaseNotes.html</title>
|
||||
</head>
|
||||
<body>
|
||||
<h1 style="text-align: center">
|
||||
areaDetector Release Notes</h1>
|
||||
<h2 style="text-align: center">
|
||||
Release 1-2 (19-Sept-2008)</h2>
|
||||
<ul>
|
||||
<li>Major update to documentation</li>
|
||||
<li>Significant enhancement to ROI plugin. Added net counts, ROI highlighting.</li>
|
||||
<li>Added driver for Pilatus detectors</li>
|
||||
<li>Added driver for ADSC detectors (done by Lewis Muir, IMCA-CAT)</li>
|
||||
<li>Removed separate readback parameters in drivers and template files</li>
|
||||
<li>Changed from mbbi/mbbo records to bi/bo records where possible now that the asynInt32
|
||||
interface supports bi/bo records.</li>
|
||||
<li>Internals
|
||||
<ul>
|
||||
<li>Renamed asynParamBase to asynPortDriver.</li>
|
||||
<li>Renamed NDArrayBase to NDArrayDriver</li>
|
||||
<li>Renamed NDPluginBase to NDPluginDriver</li>
|
||||
<li>Renamed NDArrayBuff to NDArrayPool, now in NDArray.cpp.</li>
|
||||
<li>Renamed ADDriverBase to ADDriver</li>
|
||||
<li>Removed ADUtils</li>
|
||||
<li>The asynHandle interface in asyn was renamed to asynGenericPointer, many changes
|
||||
to incorporate this.</li>
|
||||
<li>Base class constructor no longer initializes all asyn interfaces, only the selected
|
||||
ones.</li>
|
||||
<li>NDArray pool is no longer global, each server creates its own pool if needed.</li>
|
||||
<li>Implemented real routines for writeInt32, writeFloat64, and writeOctet in asynPortDriver.cpp,
|
||||
removed them from ADDriver.cpp where they were not needed.</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<h2 style="text-align: center">
|
||||
Release 1-1 (10-May-2008)</h2>
|
||||
<ul>
|
||||
<li>Major rewrite. Converted device drivers and plugins from C to C++ with C++ base
|
||||
classes that handle many of the details of asyn and of callbacks and threading for
|
||||
plugins.</li>
|
||||
<li>Everything except device drivers and top-level EPICS databases and channel access
|
||||
clients are now fully N-dimensional, not restricted to 2-D.</li>
|
||||
<li>NDPluginFile now uses netCDF format, which is a portable self-describing binary
|
||||
file format.</li>
|
||||
<li>Added NDPluginROI which implements region-of-interest.</li>
|
||||
</ul>
|
||||
<h2 style="text-align: center">
|
||||
Release 1-0 (11-Apr-2008)</h2>
|
||||
<ul>
|
||||
<li>Initial release, still many things remaining to be done.</li>
|
||||
</ul>
|
||||
<address>
|
||||
Suggestions and Comments to:
|
||||
<br />
|
||||
<a href="mailto:rivers@cars.uchicago.edu">Mark Rivers </a>: (rivers@cars.uchicago.edu)
|
||||
<br />
|
||||
</address>
|
||||
</body>
|
||||
</html>
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<title>areaDetectorReleaseNotes.html</title>
|
||||
</head>
|
||||
<body>
|
||||
<h1 style="text-align: center">
|
||||
areaDetector Release Notes</h1>
|
||||
<h2 style="text-align: center">
|
||||
Release 1-2 (19-Sept-2008)</h2>
|
||||
<ul>
|
||||
<li>Major update to documentation</li>
|
||||
<li>Significant enhancement to ROI plugin. Added net counts, ROI highlighting.</li>
|
||||
<li>Added driver for Pilatus detectors</li>
|
||||
<li>Added driver for ADSC detectors (done by Lewis Muir, IMCA-CAT)</li>
|
||||
<li>Removed separate readback parameters in drivers and template files</li>
|
||||
<li>Changed from mbbi/mbbo records to bi/bo records where possible now that the asynInt32
|
||||
interface supports bi/bo records.</li>
|
||||
<li>Internals
|
||||
<ul>
|
||||
<li>Renamed asynParamBase to asynPortDriver.</li>
|
||||
<li>Renamed NDArrayBase to NDArrayDriver</li>
|
||||
<li>Renamed NDPluginBase to NDPluginDriver</li>
|
||||
<li>Renamed NDArrayBuff to NDArrayPool, now in NDArray.cpp.</li>
|
||||
<li>Renamed ADDriverBase to ADDriver</li>
|
||||
<li>Removed ADUtils</li>
|
||||
<li>The asynHandle interface in asyn was renamed to asynGenericPointer, many changes
|
||||
to incorporate this.</li>
|
||||
<li>Base class constructor no longer initializes all asyn interfaces, only the selected
|
||||
ones.</li>
|
||||
<li>NDArray pool is no longer global, each server creates its own pool if needed.</li>
|
||||
<li>Implemented real routines for writeInt32, writeFloat64, and writeOctet in asynPortDriver.cpp,
|
||||
removed them from ADDriver.cpp where they were not needed.</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
<h2 style="text-align: center">
|
||||
Release 1-1 (10-May-2008)</h2>
|
||||
<ul>
|
||||
<li>Major rewrite. Converted device drivers and plugins from C to C++ with C++ base
|
||||
classes that handle many of the details of asyn and of callbacks and threading for
|
||||
plugins.</li>
|
||||
<li>Everything except device drivers and top-level EPICS databases and channel access
|
||||
clients are now fully N-dimensional, not restricted to 2-D.</li>
|
||||
<li>NDPluginFile now uses netCDF format, which is a portable self-describing binary
|
||||
file format.</li>
|
||||
<li>Added NDPluginROI which implements region-of-interest.</li>
|
||||
</ul>
|
||||
<h2 style="text-align: center">
|
||||
Release 1-0 (11-Apr-2008)</h2>
|
||||
<ul>
|
||||
<li>Initial release, still many things remaining to be done.</li>
|
||||
</ul>
|
||||
<address>
|
||||
Suggestions and Comments to:
|
||||
<br />
|
||||
<a href="mailto:rivers@cars.uchicago.edu">Mark Rivers </a>: (rivers@cars.uchicago.edu)
|
||||
<br />
|
||||
</address>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+321
-321
@@ -1,321 +1,321 @@
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<title>areaDetector Prosilica driver</title>
|
||||
</head>
|
||||
<body>
|
||||
<div style="text-align: center">
|
||||
<h1>
|
||||
areaDetector Prosilica driver</h1>
|
||||
<h2>
|
||||
September 20, 2008</h2>
|
||||
<h2>
|
||||
Mark Rivers</h2>
|
||||
<h2>
|
||||
University of Chicago</h2>
|
||||
</div>
|
||||
<h2>
|
||||
Contents</h2>
|
||||
<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>
|
||||
<li><a href="#Future">Future enhancements</a></li>
|
||||
</ul>
|
||||
<h2 id="Prosilica Driver">
|
||||
Prosilica Driver</h2>
|
||||
<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, the driver does not need to create a thread
|
||||
itself for callbacks.
|
||||
</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_REQUESTED</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>
|
||||
<div style="text-align: center">
|
||||
<h3>
|
||||
ADBase.adl</h3>
|
||||
<img alt="ADBase_prosilica.png" src="ADBase_prosilica.png" /></div>
|
||||
<p>
|
||||
The following is the MEDM screen that provides access to the specific parameters
|
||||
for the Prosilica detector.
|
||||
</p>
|
||||
<div style="text-align: center">
|
||||
<h3>
|
||||
prosilica.adl</h3>
|
||||
<img alt="prosilica.png" src="prosilica.png" /></div>
|
||||
<p>
|
||||
The following is an IDL <a href="http://cars.uchicago.edu/software/idl/imaging_routines.html#epics_ad_display">
|
||||
epics_ad_display</a> screen displaying the Prosilica detector images.
|
||||
</p>
|
||||
<div style="text-align: center">
|
||||
<h3>
|
||||
epics_ad_display.pro</h3>
|
||||
<img alt="prosilica_tvscl.jpg" src="prosilica_tvscl.jpg" /></div>
|
||||
<h2 id="Future">
|
||||
Future enhancements</h2>
|
||||
<p>
|
||||
The driver does not currently support color. This will be added in the near future.
|
||||
</p>
|
||||
<p>
|
||||
Work is needed on connection management. If the camera is unplugged or powered off
|
||||
which the areaDetector driver is running it does not gracefully recover.
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<title>areaDetector Prosilica driver</title>
|
||||
</head>
|
||||
<body>
|
||||
<div style="text-align: center">
|
||||
<h1>
|
||||
areaDetector Prosilica driver</h1>
|
||||
<h2>
|
||||
September 20, 2008</h2>
|
||||
<h2>
|
||||
Mark Rivers</h2>
|
||||
<h2>
|
||||
University of Chicago</h2>
|
||||
</div>
|
||||
<h2>
|
||||
Contents</h2>
|
||||
<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>
|
||||
<li><a href="#Future">Future enhancements</a></li>
|
||||
</ul>
|
||||
<h2 id="Prosilica Driver">
|
||||
Prosilica Driver</h2>
|
||||
<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, the driver does not need to create a thread
|
||||
itself for callbacks.
|
||||
</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_REQUESTED</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>
|
||||
<div style="text-align: center">
|
||||
<h3>
|
||||
ADBase.adl</h3>
|
||||
<img alt="ADBase_prosilica.png" src="ADBase_prosilica.png" /></div>
|
||||
<p>
|
||||
The following is the MEDM screen that provides access to the specific parameters
|
||||
for the Prosilica detector.
|
||||
</p>
|
||||
<div style="text-align: center">
|
||||
<h3>
|
||||
prosilica.adl</h3>
|
||||
<img alt="prosilica.png" src="prosilica.png" /></div>
|
||||
<p>
|
||||
The following is an IDL <a href="http://cars.uchicago.edu/software/idl/imaging_routines.html#epics_ad_display">
|
||||
epics_ad_display</a> screen displaying the Prosilica detector images.
|
||||
</p>
|
||||
<div style="text-align: center">
|
||||
<h3>
|
||||
epics_ad_display.pro</h3>
|
||||
<img alt="prosilica_tvscl.jpg" src="prosilica_tvscl.jpg" /></div>
|
||||
<h2 id="Future">
|
||||
Future enhancements</h2>
|
||||
<p>
|
||||
The driver does not currently support color. This will be added in the near future.
|
||||
</p>
|
||||
<p>
|
||||
Work is needed on connection management. If the camera is unplugged or powered off
|
||||
which the areaDetector driver is running it does not gracefully recover.
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+299
-299
@@ -1,299 +1,299 @@
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<title>areaDetector Simulation driver</title>
|
||||
</head>
|
||||
<body>
|
||||
<center>
|
||||
<h1 style="text-align: center">
|
||||
areaDetector Simulation driver</h1>
|
||||
<h2>
|
||||
September 20, 2008</h2>
|
||||
<h2>
|
||||
Mark Rivers</h2>
|
||||
<h2>
|
||||
University of Chicago</h2>
|
||||
</center>
|
||||
<p>
|
||||
</p>
|
||||
<h2>
|
||||
Table of Contents</h2>
|
||||
<ul>
|
||||
<li><a href="#Introduction">Introduction</a></li>
|
||||
<li><a href="#Driver_parameters">Simulation driver specific parameters</a></li>
|
||||
<li><a href="#Unsupported">Unsupported standard driver parameters</a></li>
|
||||
<li><a href="#Screenshots">Screenshots</a></li>
|
||||
<li><a href="#Configuration">Configuration</a></li>
|
||||
</ul>
|
||||
<h2 id="Introduction">
|
||||
Introduction</h2>
|
||||
<p>
|
||||
simDetector is a driver for a simulated area detector. It inherits from ADDriver.
|
||||
The simulation detector implements nearly all of the parameters defined in ADStdDriverParams.h,
|
||||
with the exception of the file saving parameters, which it does not implement. It
|
||||
also implements a few parameters that are specific to the simulation detector. The
|
||||
simulation detector is useful as a model for writing real detector drivers. It is
|
||||
also very useful for testing plugins and channel access clients. This is part of
|
||||
the definition of the simDetector class:
|
||||
</p>
|
||||
<pre>
|
||||
class simDetector : public ADDriver {
|
||||
public:
|
||||
simDetector(const char *portName, int maxSizeX, int maxSizeY, NDDataType_t dataType,
|
||||
int maxBuffers, size_t maxMemory);
|
||||
|
||||
/* These are the methods that we override from ADDriver */
|
||||
virtual asynStatus writeInt32(asynUser *pasynUser, epicsInt32 value);
|
||||
virtual asynStatus writeFloat64(asynUser *pasynUser, epicsFloat64 value);
|
||||
virtual asynStatus drvUserCreate(asynUser *pasynUser, const char *drvInfo,
|
||||
const char **pptypeName, size_t *psize);
|
||||
void report(FILE *fp, int details);
|
||||
</pre>
|
||||
<p>
|
||||
In the constructor <code>simDetector</code> the portName, maxBuffers, and maxMemory
|
||||
arguments are passed to the ADDriver base class constructor. The maxSizeX, maxSizeY,
|
||||
and dataType arguments are specific to the simulation driver, controlling the maximum
|
||||
image size and initial data type of the computed images. The writeInt32 and writeFloat64
|
||||
methods override those in the base class. The driver takes action when new parameters
|
||||
are passed via those interfaces. For example, the ADAcquire parameter (on the asynInt32
|
||||
interface) is used to turn acquisition (i.e. computing new images) on and off.
|
||||
</p>
|
||||
<p>
|
||||
The simulation driver initially sets the image[i, j] = i*gainX + j*gainY * gain
|
||||
* exposureTime * 1000. Thus the image is a linear ramp in the X and Y directions,
|
||||
with the gains in each direction being detector-specific parameters. Each subsquent
|
||||
acquisition increments each pixel value by gain*exposureTime*1000. Thus if gain=1
|
||||
and exposureTime=.001 second then the pixels are incremented by 1. If the array
|
||||
is an unsigned 8 or 16 bit integer then the pixels will overflow and wrap around
|
||||
to 0 after some period of time. This gives the appearance of bands that appear to
|
||||
move with time. The slope of the bands and their periodicity can be adjusted by
|
||||
changing the gains and exposure times.
|
||||
</p>
|
||||
<p>
|
||||
The driver creates a thread that waits for a signal to start acquisition. When acquisition
|
||||
is started that thread computes new images and then calls back any registered plugins
|
||||
as follows:
|
||||
</p>
|
||||
<pre>
|
||||
/* Put the frame number and time stamp into the buffer */
|
||||
pImage->uniqueId = imageCounter;
|
||||
pImage->timeStamp = startTime.secPastEpoch + startTime.nsec / 1.e9;
|
||||
|
||||
/* Call the NDArray callback */
|
||||
/* Must release the lock here, or we can get into a deadlock, because we can
|
||||
* block on the plugin lock, and the plugin can be calling us */
|
||||
epicsMutexUnlock(this->mutexId);
|
||||
asynPrint(this->pasynUser, ASYN_TRACE_FLOW,
|
||||
"%s:%s: calling imageData callback\n", driverName, functionName);
|
||||
doCallbacksGenericPointer(pImage, NDArrayData, addr);
|
||||
epicsMutexLock(this->mutexId);
|
||||
</pre>
|
||||
<h2 id="Driver_parameters">
|
||||
Simulation driver specific parameters</h2>
|
||||
<p>
|
||||
The simulation driver-specific parameters are the following:
|
||||
</p>
|
||||
<table style="text-align: left" "cellSpacing=2 cellPadding=2 border=1">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td align="center" colspan="7">
|
||||
<b>Parameter Definitions in simDetector.cpp and EPICS Record Definitions in simDetector.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>
|
||||
SimGainX</td>
|
||||
<td>
|
||||
asynFloat64</td>
|
||||
<td>
|
||||
r/w</td>
|
||||
<td>
|
||||
Gain in the X direction</td>
|
||||
<td>
|
||||
SIM_GAINX</td>
|
||||
<td>
|
||||
$(P)$(R)GainX<br />
|
||||
$(P)$(R)GainX_RBV</td>
|
||||
<td>
|
||||
ao<br />
|
||||
ai</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
SimGainY</td>
|
||||
<td>
|
||||
asynFloat64</td>
|
||||
<td>
|
||||
r/w</td>
|
||||
<td>
|
||||
Gain in the Y direction</td>
|
||||
<td>
|
||||
SIM_GAINY</td>
|
||||
<td>
|
||||
$(P)$(R)GainY<br />
|
||||
$(P)$(R)GainY_RBV</td>
|
||||
<td>
|
||||
ao<br />
|
||||
ai</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
SimResetImage</td>
|
||||
<td>
|
||||
asynInt32</td>
|
||||
<td>
|
||||
r/w</td>
|
||||
<td>
|
||||
Reset image back to initial conditions when 1.</td>
|
||||
<td>
|
||||
RESET_IMAGE</td>
|
||||
<td>
|
||||
$(P)$(R)Reset<br />
|
||||
$(P)$(R)Reset_RBV</td>
|
||||
<td>
|
||||
longout<br />
|
||||
longin</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<h2 id="Unsupported">
|
||||
Unsupported standard driver parameters</h2>
|
||||
<ul>
|
||||
<li>Shutter control: No shutter control is supported</li>
|
||||
<li>Collect: Number of exposures per image (ADNumExposures)</li>
|
||||
<li>Collect: Trigger mode (ADTriggerMode)</li>
|
||||
<li>File control: No file I/O is supported</li>
|
||||
</ul>
|
||||
<h2 id="Screenshots">
|
||||
Screenshots</h2>
|
||||
<p>
|
||||
The following is the MEDM screen ADBase.adl connected to a simulation detector.
|
||||
</p>
|
||||
<div style="text-align: center">
|
||||
<h3>
|
||||
ADBase.adl</h3>
|
||||
<img alt="ADBase_sim.png" src="ADBase_sim.png" />
|
||||
</div>
|
||||
<p>
|
||||
The following is the MEDM screen that provides access to the specific parameters
|
||||
for the simulation detector.
|
||||
</p>
|
||||
<div style="text-align: center">
|
||||
<h3>
|
||||
simDetector.adl</h3>
|
||||
<img alt="simDetector.png" src="simDetector.png" />
|
||||
</div>
|
||||
<p>
|
||||
The following is an IDL <a href="http://cars.uchicago.edu/software/idl/imaging_routines.html#epics_ad_display">
|
||||
epics_ad_display</a> screen using <a href="http://cars.uchicago.edu/software/idl/imaging_routines.html#image_display">
|
||||
image_display</a> to display the simulation detector images.
|
||||
</p>
|
||||
<div style="text-align: center">
|
||||
<h3>
|
||||
epics_ad_display.pro</h3>
|
||||
<img alt="simDetector_image_display.png" src="simDetector_image_display.png" />
|
||||
</div>
|
||||
<h2 id="Configuration">
|
||||
Configuration</h2>
|
||||
<p>
|
||||
This driver is configured via the <tt>simDetectorConfig()</tt> function. If this
|
||||
is to be used in an IOC, it must be called before <tt>iocInit()</tt>. It has the
|
||||
following syntax:
|
||||
</p>
|
||||
<pre>
|
||||
simDetectorConfig(const char *portName, int maxSizeX, int maxSizeY,
|
||||
int dataType, int maxBuffers, size_t maxMemory)
|
||||
</pre>
|
||||
<table border="1" cellpadding="2" cellspacing="2" style="text-align: left">
|
||||
<tbody>
|
||||
<tr>
|
||||
<th>
|
||||
Argument</th>
|
||||
<th>
|
||||
Description</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<code>portName</code></td>
|
||||
<td>
|
||||
The name of the asyn port for this detector.
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<code>maxSizeX</code></td>
|
||||
<td>
|
||||
Maximum number of pixels in the X direction for the simulated detector.
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<code>maxSizeY</code></td>
|
||||
<td>
|
||||
Maximum number of pixels in the Y direction for the simulated detector.
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<code>dataType</code></td>
|
||||
<td>
|
||||
Initial data type of the detector data. These are the enum values for NDDataType_t,
|
||||
i.e.
|
||||
<ul>
|
||||
<li>0=NDInt8</li>
|
||||
<li>1=NDUInt8</li>
|
||||
<li>2=NDInt16</li>
|
||||
<li>3=NDUInt16</li>
|
||||
<li>4=NDInt32</li>
|
||||
<li>5=NDUInt32</li>
|
||||
<li>6=NDFloat32</li>
|
||||
<li>7=NDFloat64</li>
|
||||
</ul>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<code>maxBuffers</code></td>
|
||||
<td>
|
||||
Maxiumum number of NDArray objects (image buffers) this driver is allowed to allocate.
|
||||
The driver itself requires 2 buffers, and each queue element in a plugin can require
|
||||
one buffer. So, for example, if 3 plugins are connected to this driver, and each
|
||||
has a queue size of 10, then maxBuffers should be at least 32.
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<code>maxMemory</code></td>
|
||||
<td>
|
||||
Maxiumum number of bytes of memory for all NDArray objects (image buffers) allocated
|
||||
by this driver. If maxSizeX=maxSizeY=1024, and maxBuffers=32, then maxMemory should
|
||||
be at least 33554432 (32MB).
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p>
|
||||
If being used in an IOC, and an EPICS PV interface with the driver is desired, the
|
||||
<tt>ADBase.template</tt> and <tt>simDetector.template</tt> databases should also
|
||||
be loaded for the driver instance.
|
||||
</p>
|
||||
<p>
|
||||
The areaDetector software comes with an example IOC for the simulation driver, <tt>
|
||||
iocBoot/iocSimDetector</tt>.
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<title>areaDetector Simulation driver</title>
|
||||
</head>
|
||||
<body>
|
||||
<center>
|
||||
<h1 style="text-align: center">
|
||||
areaDetector Simulation driver</h1>
|
||||
<h2>
|
||||
September 20, 2008</h2>
|
||||
<h2>
|
||||
Mark Rivers</h2>
|
||||
<h2>
|
||||
University of Chicago</h2>
|
||||
</center>
|
||||
<p>
|
||||
</p>
|
||||
<h2>
|
||||
Table of Contents</h2>
|
||||
<ul>
|
||||
<li><a href="#Introduction">Introduction</a></li>
|
||||
<li><a href="#Driver_parameters">Simulation driver specific parameters</a></li>
|
||||
<li><a href="#Unsupported">Unsupported standard driver parameters</a></li>
|
||||
<li><a href="#Screenshots">Screenshots</a></li>
|
||||
<li><a href="#Configuration">Configuration</a></li>
|
||||
</ul>
|
||||
<h2 id="Introduction">
|
||||
Introduction</h2>
|
||||
<p>
|
||||
simDetector is a driver for a simulated area detector. It inherits from ADDriver.
|
||||
The simulation detector implements nearly all of the parameters defined in ADStdDriverParams.h,
|
||||
with the exception of the file saving parameters, which it does not implement. It
|
||||
also implements a few parameters that are specific to the simulation detector. The
|
||||
simulation detector is useful as a model for writing real detector drivers. It is
|
||||
also very useful for testing plugins and channel access clients. This is part of
|
||||
the definition of the simDetector class:
|
||||
</p>
|
||||
<pre>
|
||||
class simDetector : public ADDriver {
|
||||
public:
|
||||
simDetector(const char *portName, int maxSizeX, int maxSizeY, NDDataType_t dataType,
|
||||
int maxBuffers, size_t maxMemory);
|
||||
|
||||
/* These are the methods that we override from ADDriver */
|
||||
virtual asynStatus writeInt32(asynUser *pasynUser, epicsInt32 value);
|
||||
virtual asynStatus writeFloat64(asynUser *pasynUser, epicsFloat64 value);
|
||||
virtual asynStatus drvUserCreate(asynUser *pasynUser, const char *drvInfo,
|
||||
const char **pptypeName, size_t *psize);
|
||||
void report(FILE *fp, int details);
|
||||
</pre>
|
||||
<p>
|
||||
In the constructor <code>simDetector</code> the portName, maxBuffers, and maxMemory
|
||||
arguments are passed to the ADDriver base class constructor. The maxSizeX, maxSizeY,
|
||||
and dataType arguments are specific to the simulation driver, controlling the maximum
|
||||
image size and initial data type of the computed images. The writeInt32 and writeFloat64
|
||||
methods override those in the base class. The driver takes action when new parameters
|
||||
are passed via those interfaces. For example, the ADAcquire parameter (on the asynInt32
|
||||
interface) is used to turn acquisition (i.e. computing new images) on and off.
|
||||
</p>
|
||||
<p>
|
||||
The simulation driver initially sets the image[i, j] = i*gainX + j*gainY * gain
|
||||
* exposureTime * 1000. Thus the image is a linear ramp in the X and Y directions,
|
||||
with the gains in each direction being detector-specific parameters. Each subsquent
|
||||
acquisition increments each pixel value by gain*exposureTime*1000. Thus if gain=1
|
||||
and exposureTime=.001 second then the pixels are incremented by 1. If the array
|
||||
is an unsigned 8 or 16 bit integer then the pixels will overflow and wrap around
|
||||
to 0 after some period of time. This gives the appearance of bands that appear to
|
||||
move with time. The slope of the bands and their periodicity can be adjusted by
|
||||
changing the gains and exposure times.
|
||||
</p>
|
||||
<p>
|
||||
The driver creates a thread that waits for a signal to start acquisition. When acquisition
|
||||
is started that thread computes new images and then calls back any registered plugins
|
||||
as follows:
|
||||
</p>
|
||||
<pre>
|
||||
/* Put the frame number and time stamp into the buffer */
|
||||
pImage->uniqueId = imageCounter;
|
||||
pImage->timeStamp = startTime.secPastEpoch + startTime.nsec / 1.e9;
|
||||
|
||||
/* Call the NDArray callback */
|
||||
/* Must release the lock here, or we can get into a deadlock, because we can
|
||||
* block on the plugin lock, and the plugin can be calling us */
|
||||
epicsMutexUnlock(this->mutexId);
|
||||
asynPrint(this->pasynUser, ASYN_TRACE_FLOW,
|
||||
"%s:%s: calling imageData callback\n", driverName, functionName);
|
||||
doCallbacksGenericPointer(pImage, NDArrayData, addr);
|
||||
epicsMutexLock(this->mutexId);
|
||||
</pre>
|
||||
<h2 id="Driver_parameters">
|
||||
Simulation driver specific parameters</h2>
|
||||
<p>
|
||||
The simulation driver-specific parameters are the following:
|
||||
</p>
|
||||
<table style="text-align: left" "cellSpacing=2 cellPadding=2 border=1">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td align="center" colspan="7">
|
||||
<b>Parameter Definitions in simDetector.cpp and EPICS Record Definitions in simDetector.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>
|
||||
SimGainX</td>
|
||||
<td>
|
||||
asynFloat64</td>
|
||||
<td>
|
||||
r/w</td>
|
||||
<td>
|
||||
Gain in the X direction</td>
|
||||
<td>
|
||||
SIM_GAINX</td>
|
||||
<td>
|
||||
$(P)$(R)GainX<br />
|
||||
$(P)$(R)GainX_RBV</td>
|
||||
<td>
|
||||
ao<br />
|
||||
ai</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
SimGainY</td>
|
||||
<td>
|
||||
asynFloat64</td>
|
||||
<td>
|
||||
r/w</td>
|
||||
<td>
|
||||
Gain in the Y direction</td>
|
||||
<td>
|
||||
SIM_GAINY</td>
|
||||
<td>
|
||||
$(P)$(R)GainY<br />
|
||||
$(P)$(R)GainY_RBV</td>
|
||||
<td>
|
||||
ao<br />
|
||||
ai</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
SimResetImage</td>
|
||||
<td>
|
||||
asynInt32</td>
|
||||
<td>
|
||||
r/w</td>
|
||||
<td>
|
||||
Reset image back to initial conditions when 1.</td>
|
||||
<td>
|
||||
RESET_IMAGE</td>
|
||||
<td>
|
||||
$(P)$(R)Reset<br />
|
||||
$(P)$(R)Reset_RBV</td>
|
||||
<td>
|
||||
longout<br />
|
||||
longin</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<h2 id="Unsupported">
|
||||
Unsupported standard driver parameters</h2>
|
||||
<ul>
|
||||
<li>Shutter control: No shutter control is supported</li>
|
||||
<li>Collect: Number of exposures per image (ADNumExposures)</li>
|
||||
<li>Collect: Trigger mode (ADTriggerMode)</li>
|
||||
<li>File control: No file I/O is supported</li>
|
||||
</ul>
|
||||
<h2 id="Screenshots">
|
||||
Screenshots</h2>
|
||||
<p>
|
||||
The following is the MEDM screen ADBase.adl connected to a simulation detector.
|
||||
</p>
|
||||
<div style="text-align: center">
|
||||
<h3>
|
||||
ADBase.adl</h3>
|
||||
<img alt="ADBase_sim.png" src="ADBase_sim.png" />
|
||||
</div>
|
||||
<p>
|
||||
The following is the MEDM screen that provides access to the specific parameters
|
||||
for the simulation detector.
|
||||
</p>
|
||||
<div style="text-align: center">
|
||||
<h3>
|
||||
simDetector.adl</h3>
|
||||
<img alt="simDetector.png" src="simDetector.png" />
|
||||
</div>
|
||||
<p>
|
||||
The following is an IDL <a href="http://cars.uchicago.edu/software/idl/imaging_routines.html#epics_ad_display">
|
||||
epics_ad_display</a> screen using <a href="http://cars.uchicago.edu/software/idl/imaging_routines.html#image_display">
|
||||
image_display</a> to display the simulation detector images.
|
||||
</p>
|
||||
<div style="text-align: center">
|
||||
<h3>
|
||||
epics_ad_display.pro</h3>
|
||||
<img alt="simDetector_image_display.png" src="simDetector_image_display.png" />
|
||||
</div>
|
||||
<h2 id="Configuration">
|
||||
Configuration</h2>
|
||||
<p>
|
||||
This driver is configured via the <tt>simDetectorConfig()</tt> function. If this
|
||||
is to be used in an IOC, it must be called before <tt>iocInit()</tt>. It has the
|
||||
following syntax:
|
||||
</p>
|
||||
<pre>
|
||||
simDetectorConfig(const char *portName, int maxSizeX, int maxSizeY,
|
||||
int dataType, int maxBuffers, size_t maxMemory)
|
||||
</pre>
|
||||
<table border="1" cellpadding="2" cellspacing="2" style="text-align: left">
|
||||
<tbody>
|
||||
<tr>
|
||||
<th>
|
||||
Argument</th>
|
||||
<th>
|
||||
Description</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<code>portName</code></td>
|
||||
<td>
|
||||
The name of the asyn port for this detector.
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<code>maxSizeX</code></td>
|
||||
<td>
|
||||
Maximum number of pixels in the X direction for the simulated detector.
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<code>maxSizeY</code></td>
|
||||
<td>
|
||||
Maximum number of pixels in the Y direction for the simulated detector.
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<code>dataType</code></td>
|
||||
<td>
|
||||
Initial data type of the detector data. These are the enum values for NDDataType_t,
|
||||
i.e.
|
||||
<ul>
|
||||
<li>0=NDInt8</li>
|
||||
<li>1=NDUInt8</li>
|
||||
<li>2=NDInt16</li>
|
||||
<li>3=NDUInt16</li>
|
||||
<li>4=NDInt32</li>
|
||||
<li>5=NDUInt32</li>
|
||||
<li>6=NDFloat32</li>
|
||||
<li>7=NDFloat64</li>
|
||||
</ul>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<code>maxBuffers</code></td>
|
||||
<td>
|
||||
Maxiumum number of NDArray objects (image buffers) this driver is allowed to allocate.
|
||||
The driver itself requires 2 buffers, and each queue element in a plugin can require
|
||||
one buffer. So, for example, if 3 plugins are connected to this driver, and each
|
||||
has a queue size of 10, then maxBuffers should be at least 32.
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
<code>maxMemory</code></td>
|
||||
<td>
|
||||
Maxiumum number of bytes of memory for all NDArray objects (image buffers) allocated
|
||||
by this driver. If maxSizeX=maxSizeY=1024, and maxBuffers=32, then maxMemory should
|
||||
be at least 33554432 (32MB).
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<p>
|
||||
If being used in an IOC, and an EPICS PV interface with the driver is desired, the
|
||||
<tt>ADBase.template</tt> and <tt>simDetector.template</tt> databases should also
|
||||
be loaded for the driver instance.
|
||||
</p>
|
||||
<p>
|
||||
The areaDetector software comes with an example IOC for the simulation driver, <tt>
|
||||
iocBoot/iocSimDetector</tt>.
|
||||
</p>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
Reference in New Issue
Block a user