git-svn-id: https://subversion.xor.aps.anl.gov/synApps/areaDetector/trunk@10305 dc6c5ff5-0b8b-c028-a01f-ffb33f00fc8b
492 lines
13 KiB
HTML
Executable File
492 lines
13 KiB
HTML
Executable File
<!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 Plugin NDPluginStats</title>
|
|
<meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type" />
|
|
</head>
|
|
<body>
|
|
<div style="text-align: center">
|
|
<h1>
|
|
areaDetector Plugin NDPluginStats</h1>
|
|
<h2>
|
|
March 20, 2010</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="#Configuration">Configuration</a></li>
|
|
<li><a href="#Screens">Screen shots</a></li>
|
|
</ul>
|
|
<h2 id="Overview">
|
|
Overview
|
|
</h2>
|
|
<p>
|
|
NDPluginStats computes array statistics, including minimum, maximum, mean, sigma,
|
|
total, net (background subtracted), and centroid values. It can also compute a histogram
|
|
of the values (e.g. number of pixels versus intensity per pixel). The basic statistics,
|
|
centroid, and histogram calculations can be enabled or disabled independently.
|
|
</p>
|
|
<p>
|
|
NDPluginStats inherits from NDPluginDriver. The <a href="areaDetectorDoxygenHTML/class_n_d_plugin_stats.html">
|
|
NDPluginStats class documentation</a> describes this class in detail.
|
|
</p>
|
|
<p>
|
|
NDPluginStats.h defines the following parameters. It also implements all of the
|
|
standard plugin parameters from <a href="pluginDoc.html#NDPluginDriver">NDPluginDriver</a>.
|
|
The EPICS database NDStats.template provide access to these parameters, listed in
|
|
the following table. 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>NDPluginStatsComputeStatistics</code>.
|
|
</p>
|
|
<table border="1" cellpadding="2" cellspacing="2" style="text-align: left">
|
|
<tbody>
|
|
<tr>
|
|
<td align="center" colspan="7,">
|
|
<b>Parameter Definitions in NDPluginStats.h and EPICS Record Definitions in NDStats.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>Basic statistics</b></td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
NDPluginStats<br />
|
|
ComputeStatistics</td>
|
|
<td>
|
|
asynInt32</td>
|
|
<td>
|
|
r/w</td>
|
|
<td>
|
|
Flag to control whether to compute statistics for this array (0=No, 1=Yes). Not
|
|
computing statistics reduces CPU load. Basic statistics computations are quite fast,
|
|
since they involve mostly double precision addition, with 1 multiply to compute
|
|
sigma, per array element. Setting this to No will disable both basic statistics
|
|
and centroid statistics, but will not disable histogram calculation.</td>
|
|
<td>
|
|
COMPUTE_STATISTICS</td>
|
|
<td>
|
|
$(P)$(R)ComputeStatistics<br />
|
|
$(P)$(R)ComputeStatistics_RBV</td>
|
|
<td>
|
|
bo<br />
|
|
bi</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
NDPluginStats<br />
|
|
BgdWidth</td>
|
|
<td>
|
|
asynInt32</td>
|
|
<td>
|
|
r/w</td>
|
|
<td>
|
|
Width of the background in pixels to use when computing net counts. 0=no background
|
|
subtraction, so the net counts is the same as the total counts.</td>
|
|
<td>
|
|
BGD_WIDTH</td>
|
|
<td>
|
|
$(P)$(R)BgdWidth<br />
|
|
$(P)$(R)BgdWidth_RBV</td>
|
|
<td>
|
|
longout<br />
|
|
longin</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
NDPluginStats<br />
|
|
MinValue</td>
|
|
<td>
|
|
asynFloat64</td>
|
|
<td>
|
|
r/o</td>
|
|
<td>
|
|
Minimum value in any element in the array</td>
|
|
<td>
|
|
MIN_VALUE</td>
|
|
<td>
|
|
$(P)$(R)MinValue_RBV</td>
|
|
<td>
|
|
ai</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
NDPluginStats<br />
|
|
MaxValue</td>
|
|
<td>
|
|
asynFloat64</td>
|
|
<td>
|
|
r/o</td>
|
|
<td>
|
|
Maximum value in any element in the array</td>
|
|
<td>
|
|
MAX_VALUE</td>
|
|
<td>
|
|
$(P)$(R)MaxValue_RBV</td>
|
|
<td>
|
|
ai</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
NDPluginStats<br />
|
|
MeanValue</td>
|
|
<td>
|
|
asynFloat64</td>
|
|
<td>
|
|
r/o</td>
|
|
<td>
|
|
Mean value in the array</td>
|
|
<td>
|
|
MEAN_VALUE</td>
|
|
<td>
|
|
$(P)$(R)MeanValue_RBV</td>
|
|
<td>
|
|
ai</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
NDPluginStats<br />
|
|
Total</td>
|
|
<td>
|
|
asynFloat64</td>
|
|
<td>
|
|
r/o</td>
|
|
<td>
|
|
Sum (total) of all elements in the array</td>
|
|
<td>
|
|
TOTAL</td>
|
|
<td>
|
|
$(P)$(R)Total_RBV</td>
|
|
<td>
|
|
ai</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
NDPluginStats<br />
|
|
Net</td>
|
|
<td>
|
|
asynFloat64</td>
|
|
<td>
|
|
r/o</td>
|
|
<td>
|
|
Net (background subtracted) total of all elements in the array. The background is
|
|
calculated by determining the average counts per array element in a border around
|
|
the array of width NDPluginStatsBgdWidth. This average background counts per element
|
|
is then subtracted from all elements inside the array. If NDPluginStatsBgdWidth
|
|
is ≤ 0 then no background is computed.
|
|
</td>
|
|
<td>
|
|
NET</td>
|
|
<td>
|
|
$(P)$(R)Net_RBV</td>
|
|
<td>
|
|
ai</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
NDPluginStats<br />
|
|
SigmaValue</td>
|
|
<td>
|
|
asynFloat64</td>
|
|
<td>
|
|
r/o</td>
|
|
<td>
|
|
Sigma (standard deviation) of all elements in the array</td>
|
|
<td>
|
|
SIGMA_VALUE</td>
|
|
<td>
|
|
$(P)$(R)Sigma_RBV</td>
|
|
<td>
|
|
ai</td>
|
|
</tr>
|
|
<tr>
|
|
<td align="center" colspan="7,">
|
|
<b>Centroid statistics</b></td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
NDPluginStats<br />
|
|
ComputeCentroid</td>
|
|
<td>
|
|
asynInt32</td>
|
|
<td>
|
|
r/w</td>
|
|
<td>
|
|
Flag to control whether to compute the centroid statistics (0=No, 1=Yes). Centroid
|
|
calculations require several double precision multiplications per array element,
|
|
so not computing these reduces CPU load. In order for centroid statistics to be
|
|
computed both ComputeStatistics and ComputeCentroid must be set to Yes.</td>
|
|
<td>
|
|
COMPUTE_CENTROID</td>
|
|
<td>
|
|
$(P)$(R)ComputeCentroid<br />
|
|
$(P)$(R)ComputeCentroid_RBV</td>
|
|
<td>
|
|
bo<br />
|
|
bi</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
NDPluginStats<br />
|
|
CentroidThreshold</td>
|
|
<td>
|
|
asynFloat64</td>
|
|
<td>
|
|
r/w</td>
|
|
<td>
|
|
Threshold used when computing the centroid statistics. All array elements less than
|
|
this value are set to 0 for computing the centroid statistics. It is important to
|
|
set this value to ignore the "background" when computing the position and size of
|
|
a "beam" image, for example.</td>
|
|
<td>
|
|
CENTROID_THRESHOLD</td>
|
|
<td>
|
|
$(P)$(R)CentroidThreshold<br />
|
|
$(P)$(R)CentroidThreshold_RBV</td>
|
|
<td>
|
|
ao<br />
|
|
ai</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
NDPluginStats<br />
|
|
CentroidX</td>
|
|
<td>
|
|
asynFloat64</td>
|
|
<td>
|
|
r/o</td>
|
|
<td>
|
|
X centroid of the array above the centroid threshold.</td>
|
|
<td>
|
|
CENTROIDX_VALUE</td>
|
|
<td>
|
|
$(P)$(R)CentroidX_RBV</td>
|
|
<td>
|
|
ai</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
NDPluginStats<br />
|
|
CentroidY</td>
|
|
<td>
|
|
asynFloat64</td>
|
|
<td>
|
|
r/o</td>
|
|
<td>
|
|
Y centroid of the array above the centroid threshold.</td>
|
|
<td>
|
|
CENTROIDY_VALUE</td>
|
|
<td>
|
|
$(P)$(R)CentroidY_RBV</td>
|
|
<td>
|
|
ai</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
NDPluginStats<br />
|
|
SigmaX</td>
|
|
<td>
|
|
asynFloat64</td>
|
|
<td>
|
|
r/o</td>
|
|
<td>
|
|
Sigma X (width) of the distribution above the centroid threshold.</td>
|
|
<td>
|
|
SIGMAX_VALUE</td>
|
|
<td>
|
|
$(P)$(R)SigmaX_RBV</td>
|
|
<td>
|
|
ai</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
NDPluginStats<br />
|
|
SigmaY</td>
|
|
<td>
|
|
asynFloat64</td>
|
|
<td>
|
|
r/o</td>
|
|
<td>
|
|
Sigma Y (height) of the distribution above the centroid threshold.</td>
|
|
<td>
|
|
SIGMAY_VALUE</td>
|
|
<td>
|
|
$(P)$(R)SigmaY_RBV</td>
|
|
<td>
|
|
ai</td>
|
|
</tr>
|
|
<tr>
|
|
<td align="center" colspan="7,">
|
|
<b>Array histogram</b></td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
NDPluginStats<br />
|
|
ComputeHistogram</td>
|
|
<td>
|
|
asynInt32</td>
|
|
<td>
|
|
r/w</td>
|
|
<td>
|
|
Flag to control whether to compute the histogram for this array (0=No, 1=Yes). Not
|
|
computing the histogram reduces CPU load.</td>
|
|
<td>
|
|
COMPUTE_HISTOGRAM</td>
|
|
<td>
|
|
$(P)$(R)ComputeHistogram<br />
|
|
$(P)$(R)ComputeHistogram_RBV</td>
|
|
<td>
|
|
bo<br />
|
|
bi</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
NDPluginStats<br />
|
|
HistSize</td>
|
|
<td>
|
|
asynInt32</td>
|
|
<td>
|
|
r/w</td>
|
|
<td>
|
|
Number of elements (bins) in the histogram</td>
|
|
<td>
|
|
HIST_SIZE</td>
|
|
<td>
|
|
$(P)$(R)HistSize<br />
|
|
$(P)$(R)HistSize_RBV</td>
|
|
<td>
|
|
longout<br />
|
|
longin</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
NDPluginStats<br />
|
|
HistMin</td>
|
|
<td>
|
|
asynFloat64</td>
|
|
<td>
|
|
r/w</td>
|
|
<td>
|
|
Minimum value for the histogram. All values less than or equal to this will be in
|
|
the first bin of the histogram.</td>
|
|
<td>
|
|
HIST_MIN</td>
|
|
<td>
|
|
$(P)$(R)HistMin<br />
|
|
$(P)$(R)HistMin_RBV</td>
|
|
<td>
|
|
ao<br />
|
|
ai</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
NDPluginStats<br />
|
|
HistMax</td>
|
|
<td>
|
|
asynFloat64</td>
|
|
<td>
|
|
r/w</td>
|
|
<td>
|
|
Maximum value for the histogram. All values greater than or equal to this will be
|
|
in the last bin of the histogram.</td>
|
|
<td>
|
|
HIST_MAX</td>
|
|
<td>
|
|
$(P)$(R)HistMax<br />
|
|
$(P)$(R)HistMax_RBV</td>
|
|
<td>
|
|
ao<br />
|
|
ai</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
NDPluginStats<br />
|
|
HistEntropy</td>
|
|
<td>
|
|
asynFloat64</td>
|
|
<td>
|
|
r/o</td>
|
|
<td>
|
|
Entropy of the image. This is a measure of the sharpness of the histogram, and is
|
|
often a useful figure of merit for determining sharpness of focus, etc. It is defined
|
|
as -SUM(BIN[i]*log(BIN[i]), where the sum is over the number of bins in the histogram
|
|
and BIN[i] is the number of elements in bin i.</td>
|
|
<td>
|
|
HIST_ENTROPY</td>
|
|
<td>
|
|
$(P)$(R)HistEntropy_RBV</td>
|
|
<td>
|
|
ai</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
NDPluginStats<br />
|
|
HistArray</td>
|
|
<td>
|
|
asynFloat64Array</td>
|
|
<td>
|
|
r/o</td>
|
|
<td>
|
|
Histogram array, i.e. counts in each histogram bin.</td>
|
|
<td>
|
|
HIST_ARRAY</td>
|
|
<td>
|
|
$(P)$(R)Histogram_RBV</td>
|
|
<td>
|
|
waveform</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<h2 id="Configuration">
|
|
Configuration</h2>
|
|
<p>
|
|
The NDPluginStats plugin is created with the NDStatsConfigure command, either from
|
|
C/C++ or from the EPICS IOC shell.</p>
|
|
<pre>
|
|
NDStatsConfigure(const char *portName, int queueSize, int blockingCallbacks,
|
|
const char *NDArrayPort, int NDArrayAddr,
|
|
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 NDStatsConfigure function in the <a href="areaDetectorDoxygenHTML/_n_d_plugin_stats_8cpp.html">
|
|
NDPluginStats.cpp documentation</a> and in the documentation for the constructor
|
|
for the <a href="areaDetectorDoxygenHTML/class_n_d_plugin_stats.html">NDPluginStats
|
|
class</a>.
|
|
</p>
|
|
<h2 id="Screens">
|
|
Screen shots</h2>
|
|
<p>
|
|
The following is the MEDM screen that provides access to the parameters in NDPluginDriver.h
|
|
and NDPluginStats.h through records in NDPluginBase.template and NDStats.template.
|
|
</p>
|
|
<div style="text-align: center">
|
|
<h3>
|
|
NDStats.adl</h3>
|
|
<img alt="NDStats.png" src="NDStats.png" />
|
|
</div>
|
|
</body>
|
|
</html>
|