New file
git-svn-id: https://subversion.xor.aps.anl.gov/synApps/areaDetector/trunk@17006 dc6c5ff5-0b8b-c028-a01f-ffb33f00fc8b
This commit is contained in:
BIN
documentation/LightField.png
Executable file
BIN
documentation/LightField.png
Executable file
Binary file not shown.
|
After Width: | Height: | Size: 138 KiB |
BIN
documentation/LightFieldApplication.png
Executable file
BIN
documentation/LightFieldApplication.png
Executable file
Binary file not shown.
|
After Width: | Height: | Size: 467 KiB |
606
documentation/LightFieldDoc.html
Executable file
606
documentation/LightFieldDoc.html
Executable file
@@ -0,0 +1,606 @@
|
||||
<!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 LightField driver</title>
|
||||
<meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type" />
|
||||
</head>
|
||||
<body>
|
||||
<div style="text-align: center">
|
||||
<h1>
|
||||
areaDetector LightField driver</h1>
|
||||
<h2>
|
||||
September 29, 2013</h2>
|
||||
<h2>
|
||||
Mark Rivers</h2>
|
||||
<h2>
|
||||
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">LightField 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 recent <a href="http://www.princetoninstruments.com/">
|
||||
Princeton Instruments</a> detectors including the ProEM, PIXIS, PI-MAX3, PI-MAX4, PyLoN,
|
||||
and Quad-RO. It also supports the Acton Series spectrographs.
|
||||
</p>
|
||||
<p>
|
||||
The interface to the detector is via a the MicroSoft Common Language Runtime (CLR)
|
||||
interface to the <b>LightField</b>
|
||||
program that Princeton Instruments sells. The areaDetector driver effectively "drives" LightField
|
||||
through the CLR interface, performing most of the same operations that can be performed
|
||||
using the LightField GUI. The advantage of this communication mechanism is that the
|
||||
user can continue to use LightField for viewing images and for configuration operations.
|
||||
LightField is automatically started when the areaDetector software is started.
|
||||
</p>
|
||||
<p>
|
||||
Because EPICS and the LightField GUI can control many of the same parameters the user
|
||||
must be aware of the interactions between the two control systems. The basic rule
|
||||
is that the value of a parameter will be determined by whichever control system
|
||||
last wrote to that parameter. The LightField widget will display the
|
||||
current value of a parameter no matter how it was last changed. EPICS will correctly display
|
||||
the current value of the parameter in the "readback" record, which typically ends in "_RBV",
|
||||
no matter how the value was last changed. However the EPICS output record does not currently
|
||||
update if the value is changed in LightField. This may change in a future version of asyn
|
||||
device support.
|
||||
</p>
|
||||
<p>
|
||||
This driver inherits from <a href="areaDetectorDoc.html#ADDriver">ADDriver</a>.
|
||||
It implements many of the parameters <a href="areaDetectorDoxygenHTML/asyn_n_d_array_driver_8h.html">
|
||||
asynNDArrayDriver.h</a> and in <a href="areaDetectorDoxygenHTML/_a_d_driver_8h.html">
|
||||
ADArrayDriver.h</a>. It also implements a number of parameters that are specific
|
||||
to the LightField application.The <a href="areaDetectorDoxygenHTML/class_light_field.html">LightField
|
||||
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 LightField driver implements some of the standard
|
||||
driver parameters. Note that there are 3 possible levels of nested acquisition looping
|
||||
when using the LightField driver. From the innermost to outermost loop these are as follows:</p>
|
||||
<ol>
|
||||
<li>ADNumExposures ($(P)$(R)NumExposures). This controls the number of exposures per
|
||||
image. This is called "accumulations" in LightField's terminology.</li>
|
||||
<li>ADNumImages ($(P)$(R)NumImages). This controls the number of images per acquisition.
|
||||
This is also called "number of images" in LightField's terminology. These images will
|
||||
all be acquired into a single 3-D array, and saved to a single SPE file in WinView.</li>
|
||||
<li>LightFieldNumAcquisitions ($(P)$(R)NumNumAcquisitions). This controls the number of
|
||||
times that the driver will repeat an acquisition sequence. This is has no equivalent
|
||||
in WinView, it is handled entirely by the areaDetector driver. It can be used to
|
||||
acquire multiple data sets, where each is controlled by the above parameters.</li>
|
||||
</ol>
|
||||
<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>
|
||||
ADImageMode</td>
|
||||
<td>
|
||||
$(P)$(R)ImageMode</td>
|
||||
<td>
|
||||
The driver redefines the choices for the ADImageMode parameter (record $(P)$(R)ImageMode)
|
||||
from ADDriver.h. The choices for the LightField are:
|
||||
<ul>
|
||||
<li>Normal: This is the same as pressing the Acquire button in WinView. It may collect
|
||||
more than 1 exposure per image if NumExposures>1, more than 1 image per acquisition
|
||||
if NumImages>1, and more than 1 aquisition if NumAcquisitions>1.</li>
|
||||
<li>Continuous: This will cause the driver to perform acquisitions indefinitely, i.e.
|
||||
it acts as if NumAcquisitions is infinite.</li>
|
||||
<li>Focus: This is the same as pressing the Focus button in WinView. It causes acquisition
|
||||
to proceed as quickly as possible. It does not save the data. It currently does
|
||||
not call the callbacks for each frame, so the images can only be seen in WinView
|
||||
and not in EPICS. This may be fixed in a future release. </li>
|
||||
</ul>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
ADAcquirePeriod</td>
|
||||
<td>
|
||||
$(P)$(R)AcquirePeriod</td>
|
||||
<td>
|
||||
Controls the period between images when ADImageMode is Continuous. If this is greater
|
||||
than the acquisition time plus readout overhead then the driver will wait until
|
||||
the period has elapsed before starting the next acquisition.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
ADNumExposures</td>
|
||||
<td>
|
||||
$(P)$(R)NumExposures</td>
|
||||
<td>
|
||||
Controls the number of exposures (accumulations) to acquire into a single image.
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
ADNumImages</td>
|
||||
<td>
|
||||
$(P)$(R)NumImages</td>
|
||||
<td>
|
||||
Controls the number of images to acquire into a single 3-D data set.</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
ADTriggerMode</td>
|
||||
<td>
|
||||
$(P)$(R)TriggerMode</td>
|
||||
<td>
|
||||
The driver redefines the choices for the ADTriggerMode parameter (record $(P)$(R)TriggerMode)
|
||||
from ADDriver.h. The choices for the LightField are:
|
||||
<ul>
|
||||
<li>Free run: This acquires images as quickly as possible given the exposure and readout
|
||||
times.</li>
|
||||
<li>Ext. sync: This acquires one image for each external trigger pulse.</li>
|
||||
<li>Bulb trig.: The exposure time is determined by the external trigger pulse width.
|
||||
</li>
|
||||
<li>Single trig.: A single external trigger pulse will acquire an entire sequence
|
||||
of images. </li>
|
||||
</ul>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
NDFileFormat</td>
|
||||
<td>
|
||||
$(P)$(R)FileFormat</td>
|
||||
<td>
|
||||
The driver redefines the choices for the NDFileFormat parameter (record $(P)$(R)FileFormat)
|
||||
from asynNDArrayDriver.h. The choices for the LightField are:
|
||||
<ul>
|
||||
<li>SPE: This is the default file format for WinView. It is a binary format with a
|
||||
header containing all of the acquisition and setup information.</li>
|
||||
<li>TIFF: TIFF files that contain the full resolution of the image data. The TIFF
|
||||
files do not contain any acquisition or setup information.</li>
|
||||
<li>8-bit TIFF: 8-bit TIFF files that contain limited resolution image data. The TIFF
|
||||
files do not contain any acquisition or setup information. </li>
|
||||
</ul>
|
||||
The driver does not automatically change the file extension (.SPE, .TIFF, etc.)
|
||||
when the FileFormat is changed, the user should do this using the FileTemplate record.
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
ADGain</td>
|
||||
<td>
|
||||
$(P)$(R)Gain</td>
|
||||
<td>
|
||||
The precision of the $(P)$(R)Gain record is changed to 0 because the gain in WinView
|
||||
is an integer. Allowed values are detector dependent, but 1 and 2 are typically
|
||||
supported. </td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<h2 id="Driver_parameters" style="text-align: left">
|
||||
LightField specific parameters</h2>
|
||||
<p>
|
||||
The LightField 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>marCCDState</code>.
|
||||
</p>
|
||||
<table border="1" cellpadding="2" cellspacing="2" style="text-align: left">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td align="center" colspan="7">
|
||||
<b>Parameter Definitions in LightField.cpp and EPICS Record Definitions in LightField.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 align="center" colspan="7">
|
||||
<b>Status parameters</b></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
LightField<br />
|
||||
NumAcquisitions</td>
|
||||
<td>
|
||||
asynInt32</td>
|
||||
<td>
|
||||
r/w</td>
|
||||
<td>
|
||||
The number of acquisitions to perform when acquisition is started. This controls
|
||||
the number of iterations in the outermost acquisition loop explained above. </td>
|
||||
<td>
|
||||
LightField_NACQUISITIONS</td>
|
||||
<td>
|
||||
$(P)$(R)NumAcquisitions<br />
|
||||
$(P)$(R)NumAcquisitions_RBV</td>
|
||||
<td>
|
||||
longout<br />
|
||||
longin</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
Roper<br />
|
||||
NumAcquisitionsCounter</td>
|
||||
<td>
|
||||
asynInt32</td>
|
||||
<td>
|
||||
r/o</td>
|
||||
<td>
|
||||
The number of acquisitions performed so far. </td>
|
||||
<td>
|
||||
ROPER_NACQUISITIONS_COUNTER</td>
|
||||
<td>
|
||||
$(P)$(R)NumAcquisitionsCounter_RBV</td>
|
||||
<td>
|
||||
longin</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
Roper<br />
|
||||
AutoDataType</td>
|
||||
<td>
|
||||
asynInt32</td>
|
||||
<td>
|
||||
r/w</td>
|
||||
<td>
|
||||
A flag controlling whether WinView will automatically chose the optimal data type
|
||||
for the image data. 0=No, 1=Yes. If this flag is 1 then the NDDataType parameter
|
||||
($(P)$(R)DataType record) is ignored. If this flag is 0 then the NDDataType parameter
|
||||
controls the data type of the images. </td>
|
||||
<td>
|
||||
AUTO_DATA_TYPE</td>
|
||||
<td>
|
||||
$(P)$(R)AutoDataType<br />
|
||||
$(P)$(R)AutoDataType_RBV</td>
|
||||
<td>
|
||||
bo<br />
|
||||
bi</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
Roper<br />
|
||||
ShutterMode</td>
|
||||
<td>
|
||||
asynInt32</td>
|
||||
<td>
|
||||
r/w</td>
|
||||
<td>
|
||||
The shutter operating mode for shutters controlled by WinView. Allowed values are:
|
||||
<ul>
|
||||
<li>Normal: The detector shutter will be opened and closed normally for each exposure.</li>
|
||||
<li>Disabled closed: The shutter will be forced closed. Useful for taking a dark current
|
||||
image.</li>
|
||||
<li>Disabled open: The shutter will be forced open.</li>
|
||||
</ul>
|
||||
</td>
|
||||
<td>
|
||||
ROPER_SHUTTER_MODE</td>
|
||||
<td>
|
||||
$(P)$(R)RoperShutterMode<br />
|
||||
$(P)$(R)RoperShutterMode_RBV</td>
|
||||
<td>
|
||||
mbbo<br />
|
||||
mbbi</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
Roper<br />
|
||||
Comment(1-5)</td>
|
||||
<td>
|
||||
asynOctet</td>
|
||||
<td>
|
||||
r/w</td>
|
||||
<td>
|
||||
User comments for the data file. 5 comment fields of 80 characters each are available
|
||||
in the header of WinView SPE files. These are waveform records with FTVL=UCHAR and
|
||||
NELM=80 so that they can be longer than the 40 character string limit in EPICS.
|
||||
</td>
|
||||
<td>
|
||||
COMMENT(1-5)</td>
|
||||
<td>
|
||||
$(P)$(R)Comment(1-5)<br />
|
||||
$(P)$(R)Comment(1-5)_RBV</td>
|
||||
<td>
|
||||
waveform<br />
|
||||
waveform</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<h2 id="Unsupported">
|
||||
Unsupported standard driver parameters</h2>
|
||||
<p>
|
||||
The LightField driver does not support the following standard driver parameters:</p>
|
||||
<ul>
|
||||
<li>Frame type (ADFrameType). This may be supported in a future release to control
|
||||
acquisition of flat field and dark current frames.</li>
|
||||
<li>Reading previous files (NDReadFile). This may be supported in a future release.</li>
|
||||
<li>Capture or stream file saving (NDFileWriteMode, NDFileCapture, NDNumCapture, NDNumCaptured)</li>
|
||||
</ul>
|
||||
<h2 id="Configuration">
|
||||
Configuration</h2>
|
||||
<p>
|
||||
The LightField driver is created with the LightFieldConfig command, either from C/C++ or from
|
||||
the EPICS IOC shell.</p>
|
||||
<pre>int LightFieldConfig(const char *portName,
|
||||
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 LightFieldConfig function in the <a href="areaDetectorDoxygenHTML/LightField_8cpp.html">
|
||||
LightField.cpp documentation</a> and in the documentation for the constructor for the
|
||||
<a href="areaDetectorDoxygenHTML/classLightField.html">LightField class</a>.
|
||||
</p>
|
||||
<p>
|
||||
There an example IOC boot directory and startup script (<a href="LightField_st_cmd.html">iocBoot/iocLightField/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 LightField detector.
|
||||
Note that the general purpose screen ADBase.adl can be used, but it exposes a few
|
||||
controls that are not applicable to the LightField, and lacks some fields that are important
|
||||
for the LightField.</p>
|
||||
<p>
|
||||
<code>LightField.adl</code> is the main screen used to control the LightField driver.
|
||||
</p>
|
||||
<div style="text-align: center">
|
||||
<h3 style="text-align: center">
|
||||
LightField.adl</h3>
|
||||
<img alt="LightField.png" src="LightField.png" /></div>
|
||||
<p>
|
||||
<code>LightFieldFile.adl</code> is the screen used to control WinView file I/O.
|
||||
</p>
|
||||
<div style="text-align: center">
|
||||
<h3 style="text-align: center">
|
||||
LightFieldFile.adl</h3>
|
||||
<img alt="LightFieldFile.png" src="LightFieldFile.png" /></div>
|
||||
<p>
|
||||
<code>WinView</code> is program that the LightField driver is controlling via Microsoft
|
||||
COM.
|
||||
</p>
|
||||
<div style="text-align: center">
|
||||
<h3 style="text-align: center">
|
||||
WinView program from LightField Scientific</h3>
|
||||
<img alt="WinView.png" src="WinView.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 LightField driver. These measurements were made with a
|
||||
CoolSnap-HQ2 detector which has 1392x1040 pixels. The acquisition time was 0.01
|
||||
second. The overhead per image in the table below is the total time to acquire the
|
||||
data set minus 1.00 seconds (the acquisition time) divided by 100. Acquisitions
|
||||
were done in 2 modes:</p>
|
||||
<ol>
|
||||
<li>In the first mode NumImages=100 and NumAcquisitions=1, i.e. the data were all
|
||||
collected into a single SPE file. In this mode the time per image is really controlled
|
||||
by the acquisition time and readout time. At the end of the acquisition there is
|
||||
then a delay, perhaps in copying the data from one buffer to another. The acquisition
|
||||
time in this mode is the time from when acquire was started until WinView reported
|
||||
acquisition was complete and the write to disk began. The additional time to write
|
||||
the file to disk is also listed.</li>
|
||||
<li>In the second mode NumImages=1 and NumAcquisitions=100, i.e. the data were collected
|
||||
into 100 SPE files. This is equivalent to pressing the Acquire button in WinView
|
||||
100 times. There is additional overhead per image that arises from downloading parameters
|
||||
to the camera and in creating a new display window in WinView. In this mode the
|
||||
test was done both with the EPICS AutoSave PV set to 1 (which effectively does a
|
||||
WinView "Save As" operation for each file), and with AutoSave set to 0, which does
|
||||
not write disk files at all. The acquisition time listed is with AutoSave on, i.e.
|
||||
saving 100 disk files. Interestingly it was generally <i>faster</i> to collect the
|
||||
data with AutoSave on than with it off! The time to save the 100 disk files is thus
|
||||
actually negative, i.e. it took that much longer to collect the data sets <i>without</i>
|
||||
saving the disk files. The reason for this is unclear, but it seems to be something
|
||||
internal to WinView.</li>
|
||||
</ol>
|
||||
<table border="1" cellpadding="2" cellspacing="2" style="text-align: left">
|
||||
<tbody>
|
||||
<tr>
|
||||
<th>
|
||||
Binning</th>
|
||||
<th>
|
||||
Image dimensions</th>
|
||||
<th>
|
||||
Image size</th>
|
||||
<th>
|
||||
Mode</th>
|
||||
<th>
|
||||
Acquisition time for 100 images</th>
|
||||
<th>
|
||||
Overhead per image</th>
|
||||
<th>
|
||||
File size</th>
|
||||
<th>
|
||||
File saving time</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
1x1 </td>
|
||||
<td>
|
||||
1392x1040 </td>
|
||||
<td>
|
||||
2827 KB </td>
|
||||
<td>
|
||||
1 SPE file </td>
|
||||
<td>
|
||||
29.49</td>
|
||||
<td>
|
||||
0.28 </td>
|
||||
<td>
|
||||
276 MB </td>
|
||||
<td>
|
||||
20.04</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
1x1 </td>
|
||||
<td>
|
||||
1392x1040 </td>
|
||||
<td>
|
||||
2827 KB </td>
|
||||
<td>
|
||||
100 SPE files </td>
|
||||
<td>
|
||||
80.67</td>
|
||||
<td>
|
||||
0.79</td>
|
||||
<td>
|
||||
2.76 MB </td>
|
||||
<td>
|
||||
-3.62</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
2x2</td>
|
||||
<td>
|
||||
696x520</td>
|
||||
<td>
|
||||
707 KB </td>
|
||||
<td>
|
||||
1 SPE file </td>
|
||||
<td>
|
||||
10.27</td>
|
||||
<td>
|
||||
0.09</td>
|
||||
<td>
|
||||
69 MB </td>
|
||||
<td>
|
||||
4.86</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
2x2</td>
|
||||
<td>
|
||||
696x520</td>
|
||||
<td>
|
||||
707 KB </td>
|
||||
<td>
|
||||
100 SPE files </td>
|
||||
<td>
|
||||
46.14</td>
|
||||
<td>
|
||||
0.45</td>
|
||||
<td>
|
||||
0.71 MB </td>
|
||||
<td>
|
||||
-.72</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
4x4</td>
|
||||
<td>
|
||||
348x260</td>
|
||||
<td>
|
||||
177 KB </td>
|
||||
<td>
|
||||
1 SPE file </td>
|
||||
<td>
|
||||
4.48</td>
|
||||
<td>
|
||||
0.03</td>
|
||||
<td>
|
||||
17 MB </td>
|
||||
<td>
|
||||
1.40</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
4x4</td>
|
||||
<td>
|
||||
348x260</td>
|
||||
<td>
|
||||
177 KB </td>
|
||||
<td>
|
||||
100 SPE files </td>
|
||||
<td>
|
||||
36.59</td>
|
||||
<td>
|
||||
0.35</td>
|
||||
<td>
|
||||
0.18 MB </td>
|
||||
<td>
|
||||
0.69</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<h2 id="Restrictions">
|
||||
Restrictions</h2>
|
||||
<p>
|
||||
The following are some current restrictions of the LightField driver:</p>
|
||||
<ul>
|
||||
<li>The are hundreds of parameters that can be controlled in WinView via the COM interface
|
||||
for acquiring, processing and displaying images. This driver does not attempt to
|
||||
support all of them, just the ones that are most commonly needed for EPICS data
|
||||
acquisition and control software. Additional features of WinView are very easy to
|
||||
add to the EPICS interface if needed in the future. Settings that EPICS does not
|
||||
control and which do not need to be frequently changed can simply be set via the
|
||||
WinView GUI.</li>
|
||||
<li>When NumImages is greater than one WinView collects a 3-D stack of images. The
|
||||
areaDetector driver can save that data to a file using WinView. However, the driver
|
||||
callbacks to plugins currently only passes the first image in that stack. It is
|
||||
not practical to pass all the images in the stack at once as a 3-d array, because
|
||||
this would require allocating a second 3-D array of the same size as the one in
|
||||
the WinView buffer. What would be possible is to pass each of the images in the
|
||||
stack on after the other. This will be implemented in a future release.</li>
|
||||
<li>Reading data files back into WinView is not currently supported. This may be added
|
||||
in a future release.</li>
|
||||
<li>The values of ADNumImagesCounter ($(P)$(R)NumImagesCounter_RBV) and ADNumExposuresCounter
|
||||
($(P)$(R)NumExposuresCounter_RBV) are not updated during acquisition. This is because
|
||||
WinView does not appear to be correctly returning the values of the EXP_CSEQUENTS
|
||||
and EXP_CACCUMS parameters. The reason for this is under investigation and hopefully
|
||||
will be fixed in a future release.</li>
|
||||
<li>The driver does not pass callbacks for images in WinView focus mode. I don't currently
|
||||
have the required information on how to know when new data is available in focus
|
||||
mode and how to read it. Hopefully this will be added in a future release.</li>
|
||||
<li>WinView/WinSpec must be version 2.5.22 or later, because the class names changed
|
||||
in that release.</li>
|
||||
<li>The following items are hardcoded in the driver. They can be changed by recompiling
|
||||
if necessary.
|
||||
<ul>
|
||||
<li>ERROR_MESSAGE_SIZE=256 The maximum size of error messages that can be retrieved
|
||||
from WinView.</li>
|
||||
<li>LightField_POLL_TIME=0.01 seconds. The time between polling WinView status to see when
|
||||
acquisition is complete.</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li>There is a bug in Windows XP SP2 that causes WinView to hang after about 1600
|
||||
acquisitions have been performed in a single WinView session. Acquisition means
|
||||
the equivalent of pressing the Acquire button, regardless of how many images were
|
||||
collected in a single acquisition. This would typically mean that 1600 SPE files
|
||||
had been saved. After 1600 acquisitions it is necessary to exit WinView and restart
|
||||
it. This problem is fixed in SP3 for Windows XP, and in Microsoft Vista.</li>
|
||||
</ul>
|
||||
</body>
|
||||
</html>
|
||||
BIN
documentation/LightFieldFile.png
Executable file
BIN
documentation/LightFieldFile.png
Executable file
Binary file not shown.
|
After Width: | Height: | Size: 43 KiB |
Reference in New Issue
Block a user