Ulrik Pedersen added HDF5 documentation; some fixes for Magick plugin

git-svn-id: https://subversion.xor.aps.anl.gov/synApps/areaDetector/trunk@12950 dc6c5ff5-0b8b-c028-a01f-ffb33f00fc8b
This commit is contained in:
rivers
2011-06-19 18:08:20 +00:00
parent 069e6a8198
commit 5d38050b15

View File

@@ -10,7 +10,7 @@
<h1>
areaDetector Plugin NDPluginFile</h1>
<h2>
December 5, 2010</h2>
June 19, 2011</h2>
<h2>
Mark Rivers</h2>
<h2>
@@ -24,6 +24,7 @@
<li><a href="#TIFF">TIFF file plugin</a></li>
<li><a href="#netCDF">netCDF file plugin</a></li>
<li><a href="#NeXus">NeXus (HDF) file plugin</a></li>
<li><a href="#HDF5">HDF5 file plugin</a></li>
<li><a href="#Magick">GraphicsMagick file plugin</a></li>
<li><a href="#Screens">Screen shots</a></li>
</ul>
@@ -156,8 +157,8 @@
and many others. GraphicsMagick automatically selects the output file format based
on the extension of the file (.jpg=JPEG, .tif=TIFF, etc. The GraphicsMagick plugin
should be able to write files in any format in the <a href="http://www.graphicsmagick.org/formats.html">
list of GraphicsMagick supported file formats"</a> that has a "W" or "RW" in the
Mode column.</a>.
list of GraphicsMagick supported file formats&quot;</a> that has a &quot;W&quot;
or &quot;RW&quot; in the Mode column.
</p>
<p>
The GraphicsMagick plugin is limited to 8 and 16-bit integer arrays. It supports
@@ -167,39 +168,39 @@
<p>
The GraphicsMagick plugin supports the Int32 parameter NDFileMagickCompressType
to control the compression mode of the file. NDFileMagick.template defines 2 records
to support this: $(P)$(R)CompressMode (longout) and $(P)$(R)CompressMode_RBV (longin).
The following are the supported compression modes:</p>
to support this: $(P)$(R)CompressType (longout) and $(P)$(R)CompressType_RBV (longin).
The following are the supported compression types:</p>
<ul>
<li>"None"</li>
<li>"BZip"</li>
<li>"FAX"</li>
<li>"Group 4"</li>
<li>"JPEG"</li>
<li>"LZW"</li>
<li>"RLE""</li>
<li>"Zip"</li>
<li>&quot;None&quot;</li>
<li>&quot;BZip&quot;</li>
<li>&quot;FAX&quot;</li>
<li>&quot;Group 4&quot;</li>
<li>&quot;JPEG&quot;</li>
<li>&quot;LZW&quot;</li>
<li>&quot;RLE&quot;&quot;</li>
<li>&quot;Zip&quot;</li>
</ul>
<p>
No formats support all of these compression modes. Many support only one, or have
an implicit compression mode and so ignore the CompressMode parameter. For example,
No formats support all of these compression types. Many support only one, or have
an implicit compression mode and so ignore the CompressType parameter. For example,
the JPEG format supports only the JPEG compression scheme, which is implicit. The
TIFF format supports "None", ...</p>
TIFF format supports &quot;None&quot;, (ADD DOCUMENTATION ON TIFF COMPRESSION AND OTHER FORMATS)</p>
<p>
The <a href="areaDetectorDoxygenHTML/class_n_d_file_t_i_f_f.html">NDFileNetTIFF class
The <a href="areaDetectorDoxygenHTML/class_n_d_file_magick.html">NDFileMagick class
documentation </a>describes this class in detail.
</p>
<p>
The NDFileTIFF plugin is created with the NDFileTIFFConfigure command, either from
The NDFileMagick plugin is created with the NDFileMagickConfigure command, either from
C/C++ or from the EPICS IOC shell.</p>
<pre>NDFileTIFFConfigure (const char *portName, int queueSize, int blockingCallbacks,
const char *NDArrayPort, int NDArrayAddr, size_t maxMemory,
int priority, int stackSize)
<pre>NDFileMagickConfigure(const char *portName, int queueSize, int blockingCallbacks,
const char *NDArrayPort, int NDArrayAddr, 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 NDFileTIFFConfigure function in the <a href="areaDetectorDoxygenHTML/_n_d_file_t_i_f_f_8cpp.html">
NDFileTIFF.cpp documentation</a> and in the documentation for the constructor
for the <a href="areaDetectorDoxygenHTML/class_n_d_file_t_i_f_f.html">NDFileTIFF class</a>.
documentation on the NDFileMagickConfigure function in the <a href="areaDetectorDoxygenHTML/_n_d_file_magick_8cpp.html">
NDFileMagick.cpp documentation</a> and in the documentation for the constructor
for the <a href="areaDetectorDoxygenHTML/class_n_d_file_magick.html">NDFileMagick class</a>.
</p>
<h2 id="netCDF">
netCDF file plugin
@@ -278,54 +279,54 @@ variables:
:dimOffset = 0, 0, 0 ;
:dimBinning = 1, 2, 2 ;
:dimReverse = 0, 0, 0 ;
:Attr_colorMode_DataType = "Int32" ;
:Attr_colorMode_Description = "Color mode" ;
:Attr_colorMode_DataType = &quot;Int32&quot; ;
:Attr_colorMode_Description = &quot;Color mode&quot; ;
:Attr_colorMode_Source = ;
:Attr_colorMode_SourceType = "Driver" ;
:Attr_AcquireTime_DataType = "Float64" ;
:Attr_AcquireTime_Description = "Camera acquire time" ;
:Attr_AcquireTime_Source = "13SIM1:cam1:AcquireTime" ;
:Attr_AcquireTime_SourceType = "EPICS_PV" ;
:Attr_RingCurrent_DataType = "Float64" ;
:Attr_RingCurrent_Description = "Storage ring current" ;
:Attr_RingCurrent_Source = "S:SRcurrentAI" ;
:Attr_RingCurrent_SourceType = "EPICS_PV" ;
:Attr_ImageCounter_DataType = "Int32" ;
:Attr_ImageCounter_Description = "Image counter" ;
:Attr_ImageCounter_Source = "ARRAY_COUNTER" ;
:Attr_ImageCounter_SourceType = "Param" ;
:Attr_CameraModel_DataType = "String" ;
:Attr_CameraModel_Description = "Camera model" ;
:Attr_CameraModel_Source = "MODEL" ;
:Attr_CameraModel_SourceType = "Param" ;
:Attr_BinX_DataType = "Int32" ;
:Attr_BinX_Description = "X binning" ;
:Attr_BinX_Source = "13SIM1:ROI1:0:BinX_RBV" ;
:Attr_BinX_SourceType = "EPICS_PV" ;
:Attr_BinY_DataType = "Int32" ;
:Attr_BinY_Description = "Y binning" ;
:Attr_BinY_Source = "13SIM1:ROI1:0:BinY_RBV" ;
:Attr_BinY_SourceType = "EPICS_PV" ;
:Attr_AttrTimeStamp_DataType = "Float64" ;
:Attr_AttrTimeStamp_Description = "Time stamp" ;
:Attr_AttrTimeStamp_Source = "TIME_STAMP" ;
:Attr_AttrTimeStamp_SourceType = "Param" ;
:Attr_ROI0Mean_DataType = "Float64" ;
:Attr_ROI0Mean_Description = "Mean value ROI 0" ;
:Attr_ROI0Mean_Source = "MEAN_VALUE" ;
:Attr_ROI0Mean_SourceType = "Param" ;
:Attr_ROI1Mean_DataType = "Float64" ;
:Attr_ROI1Mean_Description = "Mean value ROI 0" ;
:Attr_ROI1Mean_Source = "MEAN_VALUE" ;
:Attr_ROI1Mean_SourceType = "Param" ;
:Attr_FilePath_DataType = "String" ;
:Attr_FilePath_Description = "File path" ;
:Attr_FilePath_Source = "13SIM1:netCDF1:FilePath_RBV" ;
:Attr_FilePath_SourceType = "EPICS_PV" ;
:Attr_FileName_DataType = "String" ;
:Attr_FileName_Description = "File name" ;
:Attr_FileName_Source = "13SIM1:netCDF1:FileName_RBV" ;
:Attr_FileName_SourceType = "EPICS_PV" ;
:Attr_colorMode_SourceType = &quot;Driver&quot; ;
:Attr_AcquireTime_DataType = &quot;Float64&quot; ;
:Attr_AcquireTime_Description = &quot;Camera acquire time&quot; ;
:Attr_AcquireTime_Source = &quot;13SIM1:cam1:AcquireTime&quot; ;
:Attr_AcquireTime_SourceType = &quot;EPICS_PV&quot; ;
:Attr_RingCurrent_DataType = &quot;Float64&quot; ;
:Attr_RingCurrent_Description = &quot;Storage ring current&quot; ;
:Attr_RingCurrent_Source = &quot;S:SRcurrentAI&quot; ;
:Attr_RingCurrent_SourceType = &quot;EPICS_PV&quot; ;
:Attr_ImageCounter_DataType = &quot;Int32&quot; ;
:Attr_ImageCounter_Description = &quot;Image counter&quot; ;
:Attr_ImageCounter_Source = &quot;ARRAY_COUNTER&quot; ;
:Attr_ImageCounter_SourceType = &quot;Param&quot; ;
:Attr_CameraModel_DataType = &quot;String&quot; ;
:Attr_CameraModel_Description = &quot;Camera model&quot; ;
:Attr_CameraModel_Source = &quot;MODEL&quot; ;
:Attr_CameraModel_SourceType = &quot;Param&quot; ;
:Attr_BinX_DataType = &quot;Int32&quot; ;
:Attr_BinX_Description = &quot;X binning&quot; ;
:Attr_BinX_Source = &quot;13SIM1:ROI1:0:BinX_RBV&quot; ;
:Attr_BinX_SourceType = &quot;EPICS_PV&quot; ;
:Attr_BinY_DataType = &quot;Int32&quot; ;
:Attr_BinY_Description = &quot;Y binning&quot; ;
:Attr_BinY_Source = &quot;13SIM1:ROI1:0:BinY_RBV&quot; ;
:Attr_BinY_SourceType = &quot;EPICS_PV&quot; ;
:Attr_AttrTimeStamp_DataType = &quot;Float64&quot; ;
:Attr_AttrTimeStamp_Description = &quot;Time stamp&quot; ;
:Attr_AttrTimeStamp_Source = &quot;TIME_STAMP&quot; ;
:Attr_AttrTimeStamp_SourceType = &quot;Param&quot; ;
:Attr_ROI0Mean_DataType = &quot;Float64&quot; ;
:Attr_ROI0Mean_Description = &quot;Mean value ROI 0&quot; ;
:Attr_ROI0Mean_Source = &quot;MEAN_VALUE&quot; ;
:Attr_ROI0Mean_SourceType = &quot;Param&quot; ;
:Attr_ROI1Mean_DataType = &quot;Float64&quot; ;
:Attr_ROI1Mean_Description = &quot;Mean value ROI 0&quot; ;
:Attr_ROI1Mean_Source = &quot;MEAN_VALUE&quot; ;
:Attr_ROI1Mean_SourceType = &quot;Param&quot; ;
:Attr_FilePath_DataType = &quot;String&quot; ;
:Attr_FilePath_Description = &quot;File path&quot; ;
:Attr_FilePath_Source = &quot;13SIM1:netCDF1:FilePath_RBV&quot; ;
:Attr_FilePath_SourceType = &quot;EPICS_PV&quot; ;
:Attr_FileName_DataType = &quot;String&quot; ;
:Attr_FileName_Description = &quot;File name&quot; ;
:Attr_FileName_Source = &quot;13SIM1:netCDF1:FileName_RBV&quot; ;
:Attr_FileName_SourceType = &quot;EPICS_PV&quot; ;
} </pre>
<p>
ncdump is one of a number of very useful command line utilities that come with the
@@ -471,6 +472,486 @@ variables:
on older Linux systems (which predate Fedora Core 8 for example), it was decided
to use this older version of HDF5. Future releases of areaDetector may use HDF5
1.8.2 or later, and hence not work with older Linux systems.</p>
<h2 id="HDF5">
HDF5 file plugin
</h2>
<p>
NDFileHDF5 inherits from NDPluginFile. This plugin uses the HDF5 libraries to store
data. HDF5 file format is a self-describing binary format supported by the <a href="http://www.hdfgroup.org/HDF5">
hdfgroup</a>.
</p>
<p>
The plugin supports all NDArray datatypes and any number of NDArray dimensions (tested
up to 3). It supports storing multiple NDArrays in a single file (in stream or capture
modes) where each NDArray get appended to an extra dimension.
</p>
<p>
NDArray attributes are stored in the HDF5 file. In case of multi-frame files the
attributes are stored in 1D datasets (arrays).
</p>
<p>
The NDFileHDF5 plugin is created with the NDFileHDF5Configure command, either from
C/C++ or from the EPICS IOC shell.</p>
<pre>
NDFileHDF5Configure (const char *portName, int queueSize, int blockingCallbacks,
const char *NDArrayPort, int NDArrayAddr, 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 NDFileNexusConfigure function in the <a href="areaDetectorDoxygenHTML/_n_d_file_h_d_f5_8cpp.html">
NDFileHDF5.cpp documentation</a> and in the documentation for the constructor
for the <a href="areaDetectorDoxygenHTML/class_n_d_file_h_d_f5.html">NDFileHDF5 class</a>.</p>
<h3>
File structure
</h3>
<p>
The HDF5 files comprises a hierachial data structure, similar to a file system structure
with directories (groups) and files (datasets) [<a href="http://www.hdfgroup.org/HDF5/Tutor/fileorg.html">ref</a>]
</p>
<p>
This plugin writes HDF5 files that are compatible with the Nexus file format. This
is achieved by defining a specific hierachial structure of groups and datasets and
by tagging elements in the hierachi with certain &quot;NX_class=nnn&quot; attributes.
Although Nexus libraries are not used to write the data to disk, this file structure
allow Nexus-aware readers to open and read the content of these HDF5 files. This
has been tested with the Nexus reader in the <a href="http://opengda.org/">GDA application</a>.
</p>
<p>
The directory structure of the HDF5 files, generated by this plugin:</p>
<pre>
entry &lt;-- NX_class=NXentry
|
+--instrument &lt;-- NX_class=NXinstrument
|
+--NDAttributes
| |
| +--- &lt;-- Any number of EPICS PV based NDAttributes as individual 1D datasets
| +--- The PV attributes are in the 'instrument' group as they are expected
| to originate from the beamline/instrument rather than the detector itself
|
+--detector &lt;-- NX_class=NXdetector
| |
| +--data &lt;-- NX_class=SDS, signal=1
| |
| +--NDAttributes
| |
| +--- &lt;-- Any number of PARAM type NDAttributes as individual 1D datasets
| +--- These type of parameters are in the 'detector' group as they
| originate from the areaDetector system
|
+--performance &lt;-- Performance of the file writing
|
+--timestamp &lt;-- A 2D dataset of different timing measurements taking during file writing
</pre>
<h3>
HDF5 File Viewers
</h3>
<p>
<a href="http://www.hdfgroup.org/hdf-java-html/hdfview/index.html">HDFView</a> is
a simple GUI tool for viewing and browsing HDF files. It has some limited support
for viewing images, plotting graphs and displaying data tables.
</p>
<p>
The <a href="http://www.hdfgroup.org/HDF5/release/obtain5.html">HDF5 libraries</a>
also ships with a number of command-line tools for browsing and dumping data.
</p>
<p>
The screenshot below shows the hdfview application with a datafile open. The datafile
is generated by the plugin and a number of elements are visible:</p>
<ul>
<li>A number of NDAttributes sourced from EPICS PVs during detector acquisition appear
as 1D datasets in the group &quot;/entry/instrument/NDAttributes/&quot;</li>
<li>Several NDAttributes from the areaDetector show up as datasets in the group &quot;/entry/instrument/detector/NDAttributes/&quot;</li>
<li>The image data is in the dataset &quot;/entry/instrument/detector/data&quot;.
The metadata (in HDF known as &quot;attributes&quot;) for that dataset indicate
8bit unsigned char data, 10 frames of 60x40 pixels</li>
<li>Image and table view of the first frame data is open</li>
</ul>
<div style="text-align: center">
<img alt="==== HDFView-screenshot.png ====" src="HDFView-screenshot.png" /></div>
<h3>
Multiple Dimensions
</h3>
<p>
Both areaDetector and the HDF5 file format supports multidimensional datasets. The
dimensions from the NDArray are preserved when writing to the HDF5 file. In multi-frame
files (plugin in Stream or Capture mode) an additional dimension is added to the
dataset to hold the array of frames.
</p>
<p>
In addition to the dimensions of the NDArray it is also possible to specify up to
2 extra &quot;virtual&quot; dimensions to store datasets in the file. This is to
support applications where a sample is scanned in up to two dimensions, say X and
Y. For each scan point a dataset comprising of multiple frames can be stored. The
length of (i.e. number of points in) each of the two virtual dimensions have to
be specified before the plugin opens the file for writing. This feature is only
supported in the Stream and Capture modes.
</p>
<p>
This feature allow for creating very large sets of scan data which matches the dimensions
of the performed scan in one datafile. Depending on the application this can be
a benefit in post processing.
</p>
<p>
The figure below illustrate the use of the two extra &quot;virtual&quot; dimensions
in a 2D (X,Y) raster scan with N frames per point:</p>
<div style="text-align: center">
<img alt="HDFmultiple-dimensions.png" src="HDFmultiple-dimensions.png" /></div>
<p>
Prior to starting a scan like this the user will need to configure the number of
virtual dimensions to use (none, 1 or 2); the number of frames per point; and the
length of each of the virtual dimensions (4 x 2 in the example figure). It is not
possible to change the number or size of dimensions while the file is open.
</p>
<p>
For 2D image (greyscale) formats the dimensions in the multiframe HDF5 file are
organised as follows:</p>
<ul>
<li>For a multiframe file with no use of &quot;virtual&quot; dimension the order is:
{Nth frame, width, height}</li>
<li>For a multiframe file using 1 &quot;virtual&quot; dimension (X) the order is:
{X, Nth frame, width, height}</li>
<li>For a multiframe file using 2 &quot;virtual&quot; dimension (X,Y) the order is:
{Y, X, Nth frame, width, height}</li>
</ul>
<h3>
NDArray attributes
</h3>
<p>
The attributes from NDArrays are stored in the HDF5 files. The list of attributes
is loaded when a file is opened so XML attributes files should not be reloaded during
an acquisition run.
</p>
<p>
The type of attribute is used to determine where in the file structure the attribute
data will end up. All attribute datasets will be named by the NDArray attribute
name. They will also have metadata (known as HDF &quot;attributes&quot;) to indicate
their source type and origin.</p>
<ul>
<li>Attributes from EPICS PVs (type=&quot;EPICS_PV&quot;) will be stored as 1D datasets
in the group &quot;/entry/instrument/NDAttributes/&quot;
<ul>
<li>Special case is attributes of datatype string, which will be stored as HDF5 metadata
attributes to the same group.</li>
</ul>
</li>
<li>All other attributes (type=&quot;PARAM&quot;) will be stored as 1D datasets in
the group &quot;/entry/instrument/detector/NDAttributes/&quot;
<ul>
<li>Special case is attributes of datatype string, which will be stored as HDF5 metadata
attributes to the same group.</li>
</ul>
</li>
</ul>
<h3>
Compression
</h3>
<p>
The HDF5 library supports a number of compression algorithms. When using HDF5 libraries
to write and read files the compression is seemless: it only need to be switched
on when writing and HDF5 enabled applications can read the files without any additional
configuration. Only one compression filter can be applied at the time.
</p>
<p>
The following compression filters are supported in the NDFileHDF5 plugin:</p>
<ul>
<li>Lossless <a href="http://www.hdfgroup.org/doc_resource/SZIP/">SZIP</a> compression
is using a separate library from the hdfgroup</li>
<li>External libz -also lossless</li>
<li><a href="http://www.hdfgroup.org/HDF5/doc/RM/RM_H5P.html#Property-SetNbit">N-bit</a>
compression is a bit-packing scheme to be used when a detector provide fewer databits
than standard 8,16,32 bit words. Data width and offset in the word is user configurable</li>
</ul>
<h3>
Parameters and Records
</h3>
<table border="1" cellpadding="2" cellspacing="2" style="text-align: left">
<tbody>
<tr>
<td align="center" colspan="7,">
<b>Parameter Definitions and EPICS Record Definitions in NDFileHDF5.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>
nRowChunks</td>
<td>
asynInt32</td>
<td>
r/w</td>
<td>
Configure HDF5 &quot;chunking&quot; to approriate size for the filesystem: sets
number of rows to use per chunk</td>
<td>
HDF5_nRowChunks</td>
<td>
$(P)$(R)NumRowChunks<br />
$(P)$(R)NumRowChunks_RBV</td>
<td>
longout<br />
longin</td>
</tr>
<tr>
<td>
storeAttributes</td>
<td>
asynInt32</td>
<td>
r/w</td>
<td>
Enable or disable support for storing NDArray attributes in file</td>
<td>
HDF5_storeAttributes</td>
<td>
$(P)$(R)StoreAttr<br />
$(P)$(R)StoreAttr_RBV</td>
<td>
bo<br />
bi</td>
</tr>
<tr>
<td>
storePerformance</td>
<td>
asynInt32</td>
<td>
r/w</td>
<td>
Enable or disable support for storing file IO timing measurements in file</td>
<td>
HDF5_storePerformance</td>
<td>
$(P)$(R)StorePerform<br />
$(P)$(R)StorePerform_RBV</td>
<td>
bo<br />
bi</td>
</tr>
<tr>
<td align="center" colspan="7,">
<b>Additional Virtual Dimensions</b></td>
</tr>
<tr>
<td>
nExtraDims</td>
<td>
asynInt32</td>
<td>
r/w</td>
<td>
Number of extra dimensions [0..2]</td>
<td>
HDF5_nExtraDims</td>
<td>
$(P)$(R)NumExtraDims<br />
$(P)$(R)NumExtraDims</td>
<td>
mbbo<br />
mbbi</td>
</tr>
<tr>
<td>
extraDimSizeN</td>
<td>
asynInt32</td>
<td>
r/w</td>
<td>
Size of extra dimension N (no. of frames per point)</td>
<td>
HDF5_extraDimSizeN</td>
<td>
$(P)$(R)ExtraDimSizeN<br />
$(P)$(R)ExtraDimSizeN_RBV</td>
<td>
</td>
</tr>
<tr>
<td>
extraDimSizeX</td>
<td>
asynInt32</td>
<td>
r/w</td>
<td>
Size of extra dimension X</td>
<td>
HDF5_extraDimSizeX</td>
<td>
$(P)$(R)ExtraDimSizeX<br />
$(P)$(R)ExtraDimSizeX_RBV</td>
<td>
longout<br />
longin</td>
</tr>
<tr>
<td>
extraDimSizeY</td>
<td>
asynInt32</td>
<td>
r/w</td>
<td>
Size of extra dimension Y</td>
<td>
HDF5_extraDimSizeY</td>
<td>
$(P)$(R)ExtraDimSizeY<br />
$(P)$(R)ExtraDimSizeY_RBV</td>
<td>
longout<br />
longin</td>
</tr>
<tr>
<td align="center" colspan="7,">
<b>Runtime Statistics</b></td>
</tr>
<tr>
<td>
totalRuntime</td>
<td>
asynFloat64</td>
<td>
r/o</td>
<td>
Total runtime in seconds from first frame to file closed</td>
<td>
HDF5_totalRuntime</td>
<td>
$(P)$(R)Runtime</td>
<td>
ai</td>
</tr>
<tr>
<td>
totalIoSpeed</td>
<td>
asynFloat64</td>
<td>
r/o</td>
<td>
Overall IO write speed in megabit per second from first frame to file closed</td>
<td>
HDF5_totalIoSpeed</td>
<td>
$(P)$(R)IOSpeed</td>
<td>
ai</td>
</tr>
<tr>
<td align="center" colspan="7,">
<b>Compression Filters</b></td>
</tr>
<tr>
<td>
compressionType</td>
<td>
asynInt32</td>
<td>
r/w</td>
<td>
Select or switch off compression filter</td>
<td>
HDF5_compressionType</td>
<td>
$(P)$(R)Compression<br />
$(P)$(R)Compression_RBV</td>
<td>
mbbo<br />
mbbi</td>
</tr>
<tr>
<td>
nbitsPrecision</td>
<td>
asynInt32</td>
<td>
r/w</td>
<td>
N-bit compression filter: number of data bits per pixel</td>
<td>
HDF5_nbitsPrecision</td>
<td>
$(P)$(R)NumDataBits<br />
$(P)$(R)NumDataBits_RBV</td>
<td>
longout<br />
longin</td>
</tr>
<tr>
<td>
nbitsOffset</td>
<td>
asynInt32</td>
<td>
r/w</td>
<td>
N-bit compression filter: dataword bit-offset in pixel</td>
<td>
HDF5_nbitsOffset</td>
<td>
$(P)$(R)DataBitsOffset<br />
$(P)$(R)DataBitsOffset_RBV</td>
<td>
longout<br />
longin</td>
</tr>
<tr>
<td>
szipNumPixels</td>
<td>
asynInt32</td>
<td>
r/w</td>
<td>
szip compression filter: number of pixels in filter [1..32]</td>
<td>
HDF5_szipNumPixels</td>
<td>
$(P)$(R)SZipNumPixels<br />
$(P)$(R)SZipNumPixels_RBV</td>
<td>
longout<br />
longin</td>
</tr>
<tr>
<td>
zCompressLevel</td>
<td>
asynInt32</td>
<td>
r/w</td>
<td>
zlib compression filter: compression level [1..9]</td>
<td>
HDF5_zCompressLevel</td>
<td>
$(P)$(R)ZLevel<br />
$(P)$(R)ZLevel_RBV</td>
<td>
longout<br />
longin</td>
</tr>
</tbody>
</table>
<p>
<i>The NDFileHDF5 plugin was developed by Ulrik Kofoed Pedersen at Diamond Light Source.</i></p>
<h2 id="Screens">
Screen shots</h2>
<p>