Files
ADAndor/documentation/NDPluginStats.html
rivers 5ba5589ea2 Minor fixes
git-svn-id: https://subversion.xor.aps.anl.gov/synApps/areaDetector/trunk@10305 dc6c5ff5-0b8b-c028-a01f-ffb33f00fc8b
2010-03-22 18:45:39 +00:00

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 &le; 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>