diff --git a/documentation/ADBase.png b/documentation/ADBase.png deleted file mode 100755 index 8c492259b..000000000 Binary files a/documentation/ADBase.png and /dev/null differ diff --git a/documentation/ADEpicsShutter.png b/documentation/ADEpicsShutter.png deleted file mode 100755 index 6dabc096f..000000000 Binary files a/documentation/ADEpicsShutter.png and /dev/null differ diff --git a/documentation/ADTop.png b/documentation/ADTop.png deleted file mode 100755 index 53f17c3be..000000000 Binary files a/documentation/ADTop.png and /dev/null differ diff --git a/documentation/CSS-BOY_screens.html b/documentation/CSS-BOY_screens.html deleted file mode 100644 index 208dde37e..000000000 --- a/documentation/CSS-BOY_screens.html +++ /dev/null @@ -1,48 +0,0 @@ - - - - areaDetector: EPICS software for area detectors - - - -
-

- Screens for use in CSS-BOY

-

- August 9, 2011

-

- John Hammonds

-

- Argonne National Laboratory, UChicago Argonne LLC

-
-

- Introduction

-

- "Best OPI Yet" (BOY) is - an operator display builder created at Oak Ridge National - Laboratory as part of the - Control System Studio (CSS). A number of the - MEDM display files for area detector have been ported over, in part as - an evaliation of BOY. -

-

- Usage

-

- The package provided (source files located in ADApp/CSS-BOY) consist of an - Eclipse plugin named "gov.anl.aps.synApps.areaDetector". The plugin itself - contains a number of the base level screens intended to be used as templates combined - with implementation specific instances, much like the MEDM screens provided. -

-

- To use these screens, the plugin will be installed into the plugins directory in - CSS. Since Oak Ridge and DESY each have separate CSS implementations with different - operator interface programs, it is recommended that novice users download the latest version from Oak - Ridge.

-

- Screen Shots

-

-

- - diff --git a/documentation/EPICS_1-D_detectors.docx b/documentation/EPICS_1-D_detectors.docx deleted file mode 100755 index 237e75041..000000000 Binary files a/documentation/EPICS_1-D_detectors.docx and /dev/null differ diff --git a/documentation/FindingAreaComponents.html b/documentation/FindingAreaComponents.html deleted file mode 100644 index 7c56aa266..000000000 --- a/documentation/FindingAreaComponents.html +++ /dev/null @@ -1,138 +0,0 @@ - - - - Finding areaDetector Components - - - -
-

- Finding areaDetector Components

-

- August 9, 2011

-

- John Hammonds

-

- Argonne National Laboratory

-
-

- Overview

-

- Since areaDetector is composed mostly of plugin components that can be rearranged - in a number of different ways it can be difficult for a generic client application - to know everything there is to know about the system ahead of time. It is even difficult - to know ahead of time what components are installed on a particular IOC. A simple - method has been developed that will allow the user to find the prefix of the EPICS - records for all areaDetector compinents. -

-

- Typically each component (detectors and plugins) loads a series of database templates - that are provided with areaDetector. Among these templates one will normally load - ADBase.template for the detectors and NDPluginBase.template for plugins. Each of - these databases loads an asyn record that allows the user to interact with the asyn - nature of the plugin. This is generally used for changing the IP address of network - based cameras or changing debug levels used to print information messages to the - console. An info field has been added to these records to allow distinguishing it - from other asyn records. ADBase.template, for instance, defines -

-
-# Set ASYN_TRACEIO_HEX bit by default
-record(asyn,"$(P)$(R)AsynIO")
-{
-	field(PORT, $(PORT))
-	field(TIB2,"1")
-	info("ADType", "ADDriver")
-}
-

- The info field ADType can be used to parse the EPICS database and find the asyn - records that are associated with area detector. -

-

- Use

-

- An iocsh function parseAreaPrefixes has been added to areaDetector (located in ADApp/ADSrc) - that parses through the EPICS database on a running IOC. This function identifies - all of the asyn records that contain the ADType info field, parses the record name - down to the channel prefix (removes AsynIO from the record above) and concatenates - these prefixes into a space separated list which is then written to a waveform record. - The name of the waveform record is supplied as an argument to the function. -

-

- To add this feature to a running IOC all that is necessary is to load a waveform - record before iocInit and then run parseAreaPrefixes after iocInit. A database template - with a waveform record is included with areaDetector.

-

- An example of this is shown below. Before iocInit run: -

-
-
-# Load AreaPrefix record
-dbLoadRecords("$(AREA_DETECTOR)/ADApp/Db/ADPrefixes.template", "P=$(PREFIX),R=AD:,NELEMENTS=1024")
-
-

- After iocInit run

-
-
parseAreaPrefixes("simTest:AD:ChannelPrefixes.VAL")
-
-

- After this the command caget on a client will yield

-
-
hammonds@jphlaptop ~/epics/base-3.14.10/bin/cygwin-x86
-$ ./caget simTest:AD:ChannelPrefixes
-simTest:AD:ChannelPrefixes 1024 115 's' 105 'i' 109 'm' 84 'T' 101 'e' 115 's' 116 't' 58 ':' 67 'C' 67 'C' 49 '1' 58 ':' 32 ' ' 115
- 's' 105 'i' 109 'm' 84 'T' 101 'e' 115 's' 116 't' 58 ':' 67 'C' 67 'C' 50 '2' 58 ':' 32 ' ' 115 's' 105 'i' 109 'm' 84 'T' 101 'e'
- 115 's' 116 't' 58 ':' 74 'J' 80 'P' 69 'E' 71 'G' 49 '1' 58 ':' 32 ' ' 115 's' 105 'i' 109 'm' 84 'T' 101 'e' 115 's' 116 't' 58 '
-:' 78 'N' 101 'e' 120 'x' 117 'u' 115 's' 49 '1' 58 ':' 32 ' ' 115 's' 105 'i' 109 'm' 84 'T' 101 'e' 115 's' 116 't' 58 ':' 80 'P'
-114 'r' 111 'o' 99 'c' 49 '1' 58 ':' 32 ' ' 115 's' 105 'i' 109 'm' 84 'T' 101 'e' 115 's' 116 't' 58 ':' 82 'R' 79 'O' 73 'I' 49 '1
-' 58 ':' 32 ' ' 115 's' 105 'i' 109 'm' 84 'T' 101 'e' 115 's' 116 't' 58 ':' 82 'R' 79 'O' 73 'I' 50 '2' 58 ':' 32 ' ' 115 's' 105
-'i' 109 'm' 84 'T' 101 'e' 115 's' 116 't' 58 ':' 82 'R' 79 'O' 73 'I' 51 '3' 58 ':' 32 ' ' 115 's' 105 'i' 109 'm' 84 'T' 101 'e' 1
-15 's' 116 't' 58 ':' 82 'R' 79 'O' 73 'I' 52 '4' 58 ':' 32 ' ' 115 's' 105 'i' 109 'm' 84 'T' 101 'e' 115 's' 116 't' 58 ':' 83 'S'
- 116 't' 97 'a' 116 't' 115 's' 49 '1' 58 ':' 32 ' ' 115 's' 105 'i' 109 'm' 84 'T' 101 'e' 115 's' 116 't' 58 ':' 83 'S' 116 't' 97
- 'a' 116 't' 115 's' 50 '2' 58 ':' 32 ' ' 115 's' 105 'i' 109 'm' 84 'T' 101 'e' 115 's' 116 't' 58 ':' 83 'S' 116 't' 97 'a' 116 't
-' 115 's' 51 '3' 58 ':' 32 ' ' 115 's' 105 'i' 109 'm' 84 'T' 101 'e' 115 's' 116 't' 58 ':' 83 'S' 116 't' 97 'a' 116 't' 115 's' 5
-2 '4' 58 ':' 32 ' ' 115 's' 105 'i' 109 'm' 84 'T' 101 'e' 115 's' 116 't' 58 ':' 83 'S' 116 't' 97 'a' 116 't' 115 's' 53 '5' 58 ':
-' 32 ' ' 115 's' 105 'i' 109 'm' 84 'T' 101 'e' 115 's' 116 't' 58 ':' 84 'T' 73 'I' 70 'F' 70 'F' 49 '1' 58 ':' 32 ' ' 115 's' 105
-'i' 109 'm' 84 'T' 101 'e' 115 's' 116 't' 58 ':' 84 'T' 114 'r' 97 'a' 110 'n' 115 's' 49 '1' 58 ':' 32 ' ' 115 's' 105 'i' 109 'm'
- 84 'T' 101 'e' 115 's' 116 't' 58 ':' 99 'c' 97 'a' 109 'm' 49 '1' 58 ':' 32 ' ' 115 's' 105 'i' 109 'm' 84 'T' 101 'e' 115 's' 116
- 't' 58 ':' 105 'i' 109 'm' 97 'a' 103 'g' 101 'e' 49 '1' 58 ':' 32 ' ' 115 's' 105 'i' 109 'm' 84 'T' 101 'e' 115 's' 116 't' 58 ':
-' 110 'n' 101 'e' 116 't' 67 'C' 68 'D' 70 'F' 49 '1' 58 ':' 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
- 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0	
-
-

- since this is a waveform of char values this is equivalent to the string -

-
-
simTest:CC1: simTest:CC2: simTest:JPEG1: simTest:Nexus1: simTest:Proc1: simTest:ROI1: simTest:ROI2: simTest:ROI3: simTest:ROI4: simTest:Stats1: simTest:Stats2: simTest:Stats3: simTest:Stats4: simTest:Stats5: simTest:TIFF1: simTest:Trans1: simTest:cam1: simTest:image1: simTest:netCDF1: 
-
-

- Knowing a little about the conventions used in the system, we now know that there - are:

- -

- Armed with this information, a client application can now construct an interface - to deal with these components.

- - diff --git a/documentation/HDFView-screenshot.png b/documentation/HDFView-screenshot.png deleted file mode 100644 index 1cf052ba8..000000000 Binary files a/documentation/HDFView-screenshot.png and /dev/null differ diff --git a/documentation/HDFmultiple-dimensions.png b/documentation/HDFmultiple-dimensions.png deleted file mode 100644 index f111eda0f..000000000 Binary files a/documentation/HDFmultiple-dimensions.png and /dev/null differ diff --git a/documentation/ImageJImage.jpg b/documentation/ImageJImage.jpg deleted file mode 100755 index e42a7bfe8..000000000 Binary files a/documentation/ImageJImage.jpg and /dev/null differ diff --git a/documentation/ImageJ_EPICS_AD_Viewer_display.jpg b/documentation/ImageJ_EPICS_AD_Viewer_display.jpg deleted file mode 100755 index cc4a8e922..000000000 Binary files a/documentation/ImageJ_EPICS_AD_Viewer_display.jpg and /dev/null differ diff --git a/documentation/ImageJ_URLDriver.jpg b/documentation/ImageJ_URLDriver.jpg deleted file mode 100755 index 52a544012..000000000 Binary files a/documentation/ImageJ_URLDriver.jpg and /dev/null differ diff --git a/documentation/NDCircularBuff.png b/documentation/NDCircularBuff.png deleted file mode 100755 index df48ff2d4..000000000 Binary files a/documentation/NDCircularBuff.png and /dev/null differ diff --git a/documentation/NDCodec.png b/documentation/NDCodec.png deleted file mode 100755 index eef5e5f53..000000000 Binary files a/documentation/NDCodec.png and /dev/null differ diff --git a/documentation/NDCodec_Performance.png b/documentation/NDCodec_Performance.png deleted file mode 100755 index 114a4eb81..000000000 Binary files a/documentation/NDCodec_Performance.png and /dev/null differ diff --git a/documentation/NDCodec_Performance_More.png b/documentation/NDCodec_Performance_More.png deleted file mode 100755 index 52123c3a4..000000000 Binary files a/documentation/NDCodec_Performance_More.png and /dev/null differ diff --git a/documentation/NDColorConvert.png b/documentation/NDColorConvert.png deleted file mode 100755 index 5cd7ce5bf..000000000 Binary files a/documentation/NDColorConvert.png and /dev/null differ diff --git a/documentation/NDFFT16.png b/documentation/NDFFT16.png deleted file mode 100755 index 3b0d63449..000000000 Binary files a/documentation/NDFFT16.png and /dev/null differ diff --git a/documentation/NDFFTPeaksAbsVal.png b/documentation/NDFFTPeaksAbsVal.png deleted file mode 100755 index 2ad25e998..000000000 Binary files a/documentation/NDFFTPeaksAbsVal.png and /dev/null differ diff --git a/documentation/NDFFTPeaksImage.png b/documentation/NDFFTPeaksImage.png deleted file mode 100755 index edd4cce71..000000000 Binary files a/documentation/NDFFTPeaksImage.png and /dev/null differ diff --git a/documentation/NDFFTPlotAbsValue.png b/documentation/NDFFTPlotAbsValue.png deleted file mode 100755 index 5a3956de4..000000000 Binary files a/documentation/NDFFTPlotAbsValue.png and /dev/null differ diff --git a/documentation/NDFFTPlotAll.png b/documentation/NDFFTPlotAll.png deleted file mode 100755 index d4c08c2df..000000000 Binary files a/documentation/NDFFTPlotAll.png and /dev/null differ diff --git a/documentation/NDFFTSimDetectorSetup.png b/documentation/NDFFTSimDetectorSetup.png deleted file mode 100755 index a26ee5449..000000000 Binary files a/documentation/NDFFTSimDetectorSetup.png and /dev/null differ diff --git a/documentation/NDFFTSineAbsVal.png b/documentation/NDFFTSineAbsVal.png deleted file mode 100755 index 36b00f121..000000000 Binary files a/documentation/NDFFTSineAbsVal.png and /dev/null differ diff --git a/documentation/NDFFTSineImage.png b/documentation/NDFFTSineImage.png deleted file mode 100755 index 9a0209b30..000000000 Binary files a/documentation/NDFFTSineImage.png and /dev/null differ diff --git a/documentation/NDFFTTimeSeriesPlot.png b/documentation/NDFFTTimeSeriesPlot.png deleted file mode 100755 index 901d6f9f5..000000000 Binary files a/documentation/NDFFTTimeSeriesPlot.png and /dev/null differ diff --git a/documentation/NDFFTTimeSeriesPlotFFTAbsValue.png b/documentation/NDFFTTimeSeriesPlotFFTAbsValue.png deleted file mode 100755 index a4bd1d7f1..000000000 Binary files a/documentation/NDFFTTimeSeriesPlotFFTAbsValue.png and /dev/null differ diff --git a/documentation/NDFFTTimeSeriesPlotFFTAbsValueNoisyAvg1.png b/documentation/NDFFTTimeSeriesPlotFFTAbsValueNoisyAvg1.png deleted file mode 100755 index 14d440106..000000000 Binary files a/documentation/NDFFTTimeSeriesPlotFFTAbsValueNoisyAvg1.png and /dev/null differ diff --git a/documentation/NDFFTTimeSeriesPlotFFTAbsValueNoisyAvg100.png b/documentation/NDFFTTimeSeriesPlotFFTAbsValueNoisyAvg100.png deleted file mode 100755 index 273c8b716..000000000 Binary files a/documentation/NDFFTTimeSeriesPlotFFTAbsValueNoisyAvg100.png and /dev/null differ diff --git a/documentation/NDFFTTimeSeriesPlotNoisy.png b/documentation/NDFFTTimeSeriesPlotNoisy.png deleted file mode 100755 index d2fce5135..000000000 Binary files a/documentation/NDFFTTimeSeriesPlotNoisy.png and /dev/null differ diff --git a/documentation/NDFile.png b/documentation/NDFile.png deleted file mode 100755 index 57c0deceb..000000000 Binary files a/documentation/NDFile.png and /dev/null differ diff --git a/documentation/NDFileHDF5.html b/documentation/NDFileHDF5.html deleted file mode 100644 index 8f1524af3..000000000 --- a/documentation/NDFileHDF5.html +++ /dev/null @@ -1,1750 +0,0 @@ - - - - areaDetector Plugin NDFileHDF5 - - - -
-

- areaDetector Plugin NDFileHDF5

-

- March 16, 2015

-

- Ulrik Pedersen (Diamond Light Source), Arthur Glowacki (Argonne National Laboratory), - Alan Greer (Observatory Sciences), Mark Rivers (University of Chicago)

-
-

- 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 - hdfgroup. -

-

- 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 gets appended to an extra dimension. -

-

- NDArray attributes are stored in the HDF5 file. In case of multi-frame files the - attributes are stored in 1D datasets (arrays). -

-

- The NDFileHDF5 plugin is created with the NDFileHDF5Configure command, either from - C/C++ or from the EPICS IOC shell.

-
NDFileHDF5Configure (const char *portName, int queueSize, int blockingCallbacks, 
-                     const char *NDArrayPort, int NDArrayAddr, size_t maxMemory, 
-                     int priority, int stackSize)
-  
-

- For details on the meaning of the parameters to this function refer to the detailed - documentation on the NDFileHDF5Configure function in the - NDFileHDF5.cpp documentation and in the documentation for the constructor - for the NDFileHDF5 class.

-

- File Structure Layout -

-

- The HDF5 files comprises a hierachial data structure, similar to a file system structure - with directories (groups) and files (datasets) [ref] -

-

- XML Defined File Structure Layout

-

- It is possible to define the layout of the data structures in an XML definition - file. The XML file allow defining the location of HDF5 Groups, Datasets and Attributes - based on detector data (NDArrays), metadata (NDAttributes) and constants (for instance - NeXus tags). -

-

- The XML definition contains the following 4 main elements: group, dataset, attribute, - and hardlink. The terms refer to the HDF5 elements of the same names. -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- XML attribute - Required - Description - Value
- XML "attribute" element attributes
- name - yes - Name (key) of the HDF attribute (key, value) pair - string
- source - yes - Definition of where the attribute gets its value from - Enum string: "constant", "ndattribute"
- when - optional - Event when the attribute data is updated - Enum string: "OnFileOpen", "OnFileClose", "OnFileWrite"
- value - Required only if source="constant" - The constant value to give the attribute - string (possibly containing an int or float)
- type - optional - use if source="constant" - The constant datatype - Enum string: "int", "float", "string"
- ndattribute - Required only if source="ndattribute" - Name of the areaDetector NDAttribute which is the source of this HDF5 attribute's - data value - string containing the name of an NDAttribute
- XML "group" element attributes
- name - yes - The (relative) name of the HDF5 group - string
- ndattr_default - optional - This attribute flags a group as being a 'default' container for NDAttributes which - have not been defined to be stored elsewhere. If there is no group defined with - ndaddr_default=true, and if the root group does not have auto_ndattr_default=false, - then the 'default' container will be the root group. - boolean (default=false)
- auto_ndattr_default - optional - If this attribute is present for the root group and is set to false then NDAttributes - which have not been defined to be stored elsewhere will not be stored at all - boolean (default=false)
- XML "dataset" element attributes
- name - yes - Name of the HDF5 dataset - string
- source - yes - Definition of where the dataset gets its data values from - string enum: "detector", "ndattribute", "constant"
- value - Required only if source="constant" - Constant value to write directly into the HDF5 dataset - String - possibly containing int or float values. Arrays of int and float values - can also be represented in a comma-separated string
- ndattribute - Required only if source="ndattribute" - The name of the areaDetector NDAttribute to use as a data source for this HDF5 dataset - - string containing the name of the NDAttribute
- det_default - optional - Flag to indicate that this HDF5 dataset is the default dataset for the detector - to write NDArrays into. Only sensible to set true if source="detector" - boolean (default=false)
- XML "global" element attributes
- name - yes - Name of the global functionality or parameter to set - enum string: "detector_data_destination" -
- (currently only one supported parameter)
- ndattribute - Required when name="detector_data_destination" - Name of the NDAttribute which defines the name of the dataset where incoming NDArrays - are to be stored - string containing the name of an NDAttribute
- XML "hardlink" element attributes
- name - yes - Name of the link - string: string containing the name of the hardlink being created
- target - yes - Name of the existing target object in the HDF5 file being linked to. - string containing the name of the target object being linked to
-

- An example XML layout file is provided in "ADExample/iocs/simDetectorIOC/iocBoot/iocSimDetector/hdf5_layout_demo.xml".

-

- An XML schema is provided in "ADCore/iocBoot/hdf5_xml_layout_schema.xsd". The schema - defines the syntax that is allowed in the user's XML definition. It can also be - used with the 'xmllint' command to validate a user's XML definition: -

-
xmllint --noout --schema ADCore/iocBoot/hdf5_xml_layout_schema.xsd /path/to/users/layout.xml
-

- Default File Structure Layout

-

- If no XML Layout Definition file is loaded, the plugin will revert to using its - default file structure layout. The default layout is compatible with the plugin's - original, hard-code layout. This layout is actually defined by an XML layout string - defined in the source code file NDFileHDF5LayoutXML.cpp. -

-

- This default layout is 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 hierachy with certain "NX_class=nnn" 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 GDA application. Hardlinks - in the HDF5 file can be used to make the same dataset appear in more than one location. - This can be useful for defining a layout that is Nexus compatible, as well as conforming - to some other desired layout. -

-
- NDArray attributes -
-

- 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 while - writing a file in stream mode. -

-

- If the dataset is defined in the XML layout file then the user-specified name is - used for the dataset. If the dataset is not defined in the XML layout file then - the dataset name will be the the NDArray attribute name. The NDArray attribute datasets - automatically have 4 HDF "attributes") to indicate their source type and origin. - These are:

- -

- NDArray attributes will be stored as 1D datasets. If the location of an NDArray - attribute dataset is not defined in the XML layout file then the dataset will appear - in the group that has the property ndattr_default="true". If there is no group with - that property then the dataset will appear in the root group. If the root group - has the property auto_ndattr_default="false" then datasets that are not explicitly - defined in the XML layout file will not appear in the HDF5 file at all. -

-

- There are 4 "virtual" attributes that are automatically created. These are:

- -

- These properties are added to the property list and will be written to the HDF5 - file following the same rules as the actual NDArray ndAttributes described above. -

-

- It is possible to validate the syntax of an NDArray attributes XML file. For example, - the command (starting from the iocBoot directory) to validate the syntax - of the iocBoot/iocSimDetector/simDetectorAttributes.xml file is:

-
xmllint --noout --schema ./attributes.xsd iocSimDetector/simDetectorAttributes.xml
-
- Default tree structure
-

- The group/dataset structure of the HDF5 files, generated by this plugin:

-
entry                   <-- NX_class=NXentry
-|
-+--instrument           <-- NX_class=NXinstrument
-   |
-   +--detector          <-- NX_class=NXdetector
-   |  |
-   |  +--data           <-- NX_class=SDS, signal=1
-   |  |
-   |  +--NDAttributes
-   |     |
-   |     +--ColorMode
-   |
-   +--NDAttributes      <-- NX_class=NXCollection, ndattr_default="true"
-   |  |
-   |  +---              <-- Any number of NDAttributes from the NDArrays as individual 1D datasets
-   |
-   +--performance       <-- Performance of the file writing
-      |
-      +--timestamp      <-- A 2D dataset of different timing measurements taking during file writing
-+--data                 <-- NX_class=NDdata
-   |  |
-   |  +--data           <-- Hardlink to /entry/instrument/detector/data
-
-

- HDF5 File Viewers -

-

- Note that if the Single Writer Multiple Reader (SWMR) feature is disabled then it - is not possible to do a live "monitoring" of a file which is being written by another - process. The file writers mentioned in this section can only be used to open, browse - and read the HDF5 files after the NDFileHDF5 plugin has completed writing - and closed the file. It is possible to view files while they are being written if - the following are all true: -

- -

- HDFView 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. -

-

- The HDF5 libraries - also ships with a number of command-line tools for browsing and dumping data. -

-

- 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:

- -
- ==== HDFView-screenshot.png ====
-

- Multiple Dimensions -

-

- 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. -

-

- In addition to the dimensions of the NDArray it is also possible to specify up to - 9 extra "virtual" dimensions to store datasets in the file. This is to support applications - where a sample is scanned in up to nine dimensions. For two extra dimensions, say - X and Y each scan point contains a dataset comprising of multiple frames which can - be stored. The length of (i.e. number of points in) each of the 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. -

-

- 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. -

-

- The figure below illustrate the use of the two extra "virtual" dimensions in a 2D - (X,Y) raster scan with N frames per point:

-
- HDFmultiple-dimensions.png
-

- Prior to starting a scan like this the user will need to configure the number of - virtual dimensions to use (from 0 up to 9); 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. -

-

- For 2D image (greyscale) formats the dimensions in the multiframe HDF5 file are - organised as follows. Note that for backwards compatibility (previously only 2 extra - dimensions were available) when extra dimensions are specified they are in reverse - order 9th,8th,7th,6th,5th,4th,3rd,Yth,Xth and dimensions 2 and 1 are named Y and - X:

- -

- Chunking -

-

- This plugin uses HDF5 chunking to store the raw image data. The chunk size (the - size of each I/O block) can be configured for the frame X and Y dimensions as well - as the N'th image (which essentially implies memory caching before writing to disk). - Configuring chunking correctly for a given application is a complex matter where - both the write performance and the read performance for a given post processing - application will have to be evaluated. As a basic starting point, setting the nColChunks - and nRowChunks parameters to the X and Y frame size respectively, should give a - decent result. In fact if these parameters are configured by the user to the special - value 0, they will default to the dimensions of the incoming frames. Further explanations - and documentation of the HDF5 chunking feature is available in the HDF5 documentation:

- -

- Compression -

-

- 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. -

-

- The following compression filters are supported in the NDFileHDF5 plugin:

- -

- Single Writer Multiple Reader (SWMR) -

-

- From version 1-10 of the HDF5 library, reader applications shall be able to access - the file whilst it is being written. The plugin has been updated to support the - additional SWMR feature when writing a file. The plugin will know if SWMR mode is - supported depending on the version of the HDF5 library that the plugin has been - compiled against, and SWMR mode can be enabled or disabled by setting the appropriate - parameter (disabled by default). Once placed into SWMR mode the plugin accepts parameters - to control how often frames are flushed, how often NDAttributes are flushed and - the current SWMR status and number of flushes that have taken place are reported - for an acquisition. The SWMR active status parameter can be used to signify that - it is safe for readers to open the file (the file has been placed into SWMR mode). Data - can be flush to disk on demand using the Flush Now command. -

-

- Storing Attributes with Dataset Dimensions -

-

- The plugin has the option of storing all NDAttribute datasets as a single array - of data values, or else these NDAttribute datasets can be stored with the same dimensionality - as the main dataset.
- As an example, consider a multi-dimensional dataset of images width=800 and height=600. -

- -

- Selective Positional Placement of Individual Frames -

-

- The plugin can now store frames at specified positions within a dataset. Each individual - dimension index can be specified with NDAttributes that are attached to the frame. - The names of the NDAttributes that will be used as the index values for each dimension - are specified using parameters (see parameter table below). The NDAttribute values - themselves must be integer type zero based index values; if values are specified - that are outside the maximum size of the dataset in any dimension then the acquisition - will fail. A named attribute must be specified for each additional dimension if - position placement mode is to be used, if attributes are not specified or not named - correctly then the acquisition will fail. -

-

- The position placement mode of operation is enabled by setting the PositionMode - parameter to "On" and can be used with or without SWMR mode enabled. -

-

- Writing Index Datasets -

-

- The plugin will write out an index dataset for an extra dimension multidimensional - dataset if requested. This writing out of index values can only take place when - running in selective positional placement mode and when storing attributes with - dataset dimensions (see above). The index parameters take the name of the NDAttribute - that contains the index values for the particular dimensions that you are interested - in. -

-

- For example, extra X and Y dimensions specified along with positional placement - mode looking for NDAttributes called "x" and "y". If the index dataset for the X - dimension is set to "x" also then an additional dataset will be written that contains - only the index values for the X dimension. The dataset will be a 1 dimensional dataset. - Consider the following index values -

-

- x=0, y=0 -

-

- x=1, y=0 -

-

- x=0, y=1 -

-

- x=1, y=1 -

-

- x=0, y=2 -

-

- x=1, y=2 -

-

- If the X index parameter is set to x then a 1D dataset will be produced containing - the values (0, 1). If the Y index parameter is set to y then a 1D dataset will be - produced containing the values (0, 1, 2). -

-

- Parameters and Records -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Parameter Definitions and EPICS Record Definitions in NDFileHDF5.template -
- Parameter index variable - asyn interface - Access - Description - drvInfo string - EPICS record name - EPICS record type
- HDF5 XML Layout Definition
- XMLFileName - asynOctet - r/w - XML filename, pointing to an XML HDF5 Layout Definition
- This waveform also supports loading raw XML code directly; up to a maximum of 1MB - long (NELM=1MB)
- HDF5_layoutFilename - $(P)$(R)XMLFileName
- $(P)$(R)XMLFileName_RBV
- waveform
- layoutValid - asynInt32 - r/o - Flag to report the validity (xml syntax only) of the loaded XML. Updated when the - XMLFileName is updated with a new filename and when the XML file is read at HDF5 - file creation - HDF5_layoutValid - $(P)$(R)XMLValid_RBV - bi
- layoutErrorMsg - asynOctet - r/o - XML parser error message - HDF5_layoutErrorMsg - $(P)$(R)XMLErrorMsg_RBV - waveform
- HDF5 Chunk Configuration
- nRowChunks - asynInt32 - r/w - Configure HDF5 "chunking" to approriate size for the filesystem: sets number of - rows to use per chunk - HDF5_nRowChunks - $(P)$(R)NumRowChunks
- $(P)$(R)NumRowChunks_RBV
- longout
- longin
- nColChunks - asynInt32 - r/w - Configure HDF5 "chunking" to approriate size for the filesystem: sets number of - columns to use per chunk - HDF5_nColChunks - $(P)$(R)NumColChunks
- $(P)$(R)NumColChunks_RBV
- longout
- longin
- nFramesChunks - asynInt32 - r/w - Configure HDF5 "chunking" to approriate size for the filesystem: sets number of - frames to use per chunk. For a 2D image, setting this parameter > 1 essentially - implies using in-memory cache as HDF5 only writes full chunks to disk. - HDF5_nFramesChunks - $(P)$(R)NumFramesChunks
- $(P)$(R)NumFramesChunks_RBV
- longout
- longin
- Disk Boundary Alignment
- chunkBoundaryAlign - asynInt32 - r/w - Set the disk boundary alignment in bytes. This parameter can be used to optimise - file I/O performance on some file systems. For instance on the Lustre file system - where the it is optimal to align data to the 'stripe size' (default 1MB). -
- This parameter applies to all datasets in the file. -
- Setting this parameter to 0 disables use of disk boundary alignment. -
- Warning: setting this parameter to a larger size than the size of a single chunk - will cause datafiles to grow larger than the actual contained data.
- HDF5_chunkBoundaryAlign - $(P)$(R)BoundaryAlign
- $(P)$(R)BoundaryAlign_RBV
- longout
- longin
- chunkBoundaryThreshold - asynInt32 - r/w - Set a minimum size (bytes) of chunk or dataset where boundary alignment is to be - applied. This can be used to filter out small datasets like NDAttributes from the - boundary alignment as it could blow up the file size. -
- Setting this parameter to 0 will disable the use of boundary alignment
- HDF5_chunkBoundaryThreshold - $(P)$(R)BoundaryThreshold
- $(P)$(R)BoundaryThreshold_RBV
- longout
- longin
- Metadata
- storeAttributes - asynInt32 - r/w - Enable or disable support for storing NDArray attributes in file - HDF5_storeAttributes - $(P)$(R)StoreAttr
- $(P)$(R)StoreAttr_RBV
- bo
- bi
- storePerformance - asynInt32 - r/w - Enable or disable support for storing file IO timing measurements in file - HDF5_storePerformance - $(P)$(R)StorePerform
- $(P)$(R)StorePerform_RBV
- bo
- bi
- dimAttDatasets - asynInt32 - r/w - Turn on or off NDAttribute dataset dimensions (1 = On, 0 = Off). When switched on - NDAttribute datasets are forced to have the same dimensionality as the main dataset. - - HDF5_dimAttDatasets - $(P)$(R)DimAttDatasets
- $(P)$(R)DimAttDatasets_RBV
- bo
- bi
- SWMR
- SWMRSupported - asynInt32 - r/o - Does the HDF5 library version support SWMR mode of operation (1 = Supported, 0 = - Not Supported). - HDF5_SWMRSupported - $(P)$(R)SWMRSupported_RBV - bi
- SWMRMode - asynInt32 - r/w - Turn on or off SWMR mode for the next acquisition (1 = On, 0 = Off). Turning on - will only work if SWMR mode is supported. - HDF5_SWMRMode - $(P)$(R)SWMRMode
- $(P)$(R)SMWRMode_RBV
- bo
- bi
- SWMRRunning - asynInt32 - r/o - This value is set to 1 once a file has been opened and placed into SWMR mode. It - returns to 0 once the acquisition has completed. - HDF5_SWMRRunning - $(P)$(R)SWMRActive_RBV - bi
- flushNthFrame - asynInt32 - r/w - Flush the image to disk every N'th frame. - HDF5_flushNthFrame - $(P)$(R)NumFramesFlush
- $(P)$(R)NumFramesFlush_RBV
- longout
- longin
- NDAttributeChunk - asynInt32 - r/w - This value is used to determine when to flush NDAttribute datasets to disk, and - the corresponding datasets chunk size. A value of zero will default where possible - to the size of the dataset for a one dimensional dataset. - HDF5_NDAttributeChunk - $(P)$(R)NDAttributeChunk
- $(P)$(R)NDAttributeChunk_RBV
- longout
- longin
- SWMRCbCounter - asynInt32 - r/o - The number of flushes that have taken place for the current acquisition. In the - case where flushing occurs for every frame and no flushing is set for NDAttribute - datasets then this value will increment by one for each frame, and once the acquisition - has completed it will jump by the number of flushes required for the NDAttribute - datasets, one flush for each dataset. - HDF5_SWMRCbCounter - $(P)$(R)SWMRCbCounter_RBV - longin
- SWMRFlushNow - asynInt32 - r/w - Forces an immediate HDF5 flush. - HDF5_SWMRFlushNow - $(P)$(R)FlushNow - busy
- Additional Virtual Dimensions
- nExtraDims - asynInt32 - r/w - Number of extra dimensions [0..9] - HDF5_nExtraDims - $(P)$(R)NumExtraDims
- $(P)$(R)NumExtraDims
- mbbo
- mbbi
- extraDimSizeN - asynInt32 - r/w - Size of extra dimension N (no. of frames per point) - HDF5_extraDimSizeN - $(P)$(R)ExtraDimSizeN
- $(P)$(R)ExtraDimSizeN_RBV
-
- extraDimSizeX - asynInt32 - r/w - Size of extra dimension X - HDF5_extraDimSizeX - $(P)$(R)ExtraDimSizeX
- $(P)$(R)ExtraDimSizeX_RBV
- longout
- longin
- extraDimSizeY - asynInt32 - r/w - Size of extra dimension Y - HDF5_extraDimSizeY - $(P)$(R)ExtraDimSizeY
- $(P)$(R)ExtraDimSizeY_RBV
- longout
- longin
- extraDimSize3 - asynInt32 - r/w - Size of extra dimension 3 - HDF5_extraDimSize3 - $(P)$(R)ExtraDimSize3
- $(P)$(R)ExtraDimSize3_RBV
- longout
- longin
- extraDimSize4 - asynInt32 - r/w - Size of extra dimension 4 - HDF5_extraDimSize4 - $(P)$(R)ExtraDimSize4
- $(P)$(R)ExtraDimSize4_RBV
- longout
- longin
- extraDimSize5 - asynInt32 - r/w - Size of extra dimension 5 - HDF5_extraDimSize5 - $(P)$(R)ExtraDimSize5
- $(P)$(R)ExtraDimSize5_RBV
- longout
- longin
- extraDimSize6 - asynInt32 - r/w - Size of extra dimension 6 - HDF5_extraDimSize6 - $(P)$(R)ExtraDimSize6
- $(P)$(R)ExtraDimSize6_RBV
- longout
- longin
- extraDimSize7 - asynInt32 - r/w - Size of extra dimension 7 - HDF5_extraDimSize7 - $(P)$(R)ExtraDimSize7
- $(P)$(R)ExtraDimSize7_RBV
- longout
- longin
- extraDimSize8 - asynInt32 - r/w - Size of extra dimension 8 - HDF5_extraDimSize8 - $(P)$(R)ExtraDimSize8
- $(P)$(R)ExtraDimSize8_RBV
- longout
- longin
- extraDimSize9 - asynInt32 - r/w - Size of extra dimension 9 - HDF5_extraDimSize9 - $(P)$(R)ExtraDimSize9
- $(P)$(R)ExtraDimSize9_RBV
- longout
- longin
- Positional Placement
- posRunning - asynInt32 - r/w - Turn on/off positional placement mode - HDF5_posRunning - $(P)$(R)PositionMode
- $(P)$(R)PositionMode_RBV
- bo
- bi
- posName[0] - asynOctet - r/w - Specify the NDAttribute name for the N index - HDF5_posNameDimN - $(P)$(R)PosNameDimN
- $(P)$(R)PosNameDimN_RBV
- stringout
- stringin
- posName[1] - asynOctet - r/w - Specify the NDAttribute name for the X index - HDF5_posNameDimX - $(P)$(R)PosNameDimX
- $(P)$(R)PosNameDimX_RBV
- stringout
- stringin
- posName[2] - asynOctet - r/w - Specify the NDAttribute name for the Y index - HDF5_posNameDimY - $(P)$(R)PosNameDimY
- $(P)$(R)PosNameDimY_RBV
- stringout
- stringin
- posName[3] - asynOctet - r/w - Specify the NDAttribute name for the 3rd index - HDF5_posNameDim3 - $(P)$(R)PosNameDim3
- $(P)$(R)PosNameDim3_RBV
- stringout
- stringin
- posName[4] - asynOctet - r/w - Specify the NDAttribute name for the 4th index - HDF5_posNameDim4 - $(P)$(R)PosNameDim4
- $(P)$(R)PosNameDim4_RBV
- stringout
- stringin
- posName[5] - asynOctet - r/w - Specify the NDAttribute name for the 5th index - HDF5_posNameDim5 - $(P)$(R)PosNameDim5
- $(P)$(R)PosNameDim5_RBV
- stringout
- stringin
- posName[6] - asynOctet - r/w - Specify the NDAttribute name for the 6th index - HDF5_posNameDim6 - $(P)$(R)PosNameDim6
- $(P)$(R)PosNameDim6_RBV
- stringout
- stringin
- posName[7] - asynOctet - r/w - Specify the NDAttribute name for the 7th index - HDF5_posNameDim7 - $(P)$(R)PosNameDim7
- $(P)$(R)PosNameDim7_RBV
- stringout
- stringin
- posName[8] - asynOctet - r/w - Specify the NDAttribute name for the 8th index - HDF5_posNameDim8 - $(P)$(R)PosNameDim8
- $(P)$(R)PosNameDim8_RBV
- stringout
- stringin
- posName[9] - asynOctet - r/w - Specify the NDAttribute name for the 9th index - HDF5_posNameDim9 - $(P)$(R)PosNameDim9
- $(P)$(R)PosNameDim9_RBV
- stringout
- stringin
- Index Datasets
- posIndex[0] - asynOctet - r/w - Specify the NDAttribute index for the N dimension - HDF5_posIndexDimN - $(P)$(R)PosIndexDimN
- $(P)$(R)PosIndexDimN_RBV
- stringout
- stringin
- posIndex[1] - asynOctet - r/w - Specify the NDAttribute index for the X dimension - HDF5_posIndexDimX - $(P)$(R)posIndexDimX
- $(P)$(R)posIndexDimX_RBV
- stringout
- stringin
- posIndex[2] - asynOctet - r/w - Specify the NDAttribute index for the Y dimension - HDF5_posIndexDimY - $(P)$(R)posIndexDimY
- $(P)$(R)posIndexDimY_RBV
- stringout
- stringin
- posIndex[3] - asynOctet - r/w - Specify the NDAttribute index for the 3rd dimension - HDF5_posIndexDim3 - $(P)$(R)posIndexDim3
- $(P)$(R)posIndexDim3_RBV
- stringout
- stringin
- posIndex[4] - asynOctet - r/w - Specify the NDAttribute index for the 4th dimension - HDF5_posIndexDim4 - $(P)$(R)posIndexDim4
- $(P)$(R)posIndexDim4_RBV
- stringout
- stringin
- posIndex[5] - asynOctet - r/w - Specify the NDAttribute index for the 5th dimension - HDF5_posIndexDim5 - $(P)$(R)posIndexDim5
- $(P)$(R)posIndexDim5_RBV
- stringout
- stringin
- posIndex[6] - asynOctet - r/w - Specify the NDAttribute index for the 6th dimension - HDF5_posIndexDim6 - $(P)$(R)posIndexDim6
- $(P)$(R)posIndexDim6_RBV
- stringout
- stringin
- posIndex[7] - asynOctet - r/w - Specify the NDAttribute index for the 7th dimension - HDF5_posIndexDim7 - $(P)$(R)posIndexDim7
- $(P)$(R)posIndexDim7_RBV
- stringout
- stringin
- posIndex[8] - asynOctet - r/w - Specify the NDAttribute index for the 8th dimension - HDF5_posIndexDim8 - $(P)$(R)posIndexDim8
- $(P)$(R)posIndexDim8_RBV
- stringout
- stringin
- posIndex[9] - asynOctet - r/w - Specify the NDAttribute index for the 9th dimension - HDF5_posIndexDim9 - $(P)$(R)posIndexDim9
- $(P)$(R)posIndexDim9_RBV
- stringout
- stringin
- Runtime Statistics
- totalRuntime - asynFloat64 - r/o - Total runtime in seconds from first frame to file closed - HDF5_totalRuntime - $(P)$(R)Runtime - ai
- totalIoSpeed - asynFloat64 - r/o - Overall IO write speed in megabit per second from first frame to file closed - HDF5_totalIoSpeed - $(P)$(R)IOSpeed - ai
- Compression Filters
- compressionType - asynInt32 - r/w - Select or switch off compression filter - HDF5_compressionType - $(P)$(R)Compression
- $(P)$(R)Compression_RBV
- mbbo
- mbbi
- nbitsPrecision - asynInt32 - r/w - N-bit compression filter: number of data bits per pixel - HDF5_nbitsPrecision - $(P)$(R)NumDataBits
- $(P)$(R)NumDataBits_RBV
- longout
- longin
- nbitsOffset - asynInt32 - r/w - N-bit compression filter: dataword bit-offset in pixel - HDF5_nbitsOffset - $(P)$(R)DataBitsOffset
- $(P)$(R)DataBitsOffset_RBV
- longout
- longin
- szipNumPixels - asynInt32 - r/w - szip compression filter: number of pixels in filter [1..32] - HDF5_szipNumPixels - $(P)$(R)SZipNumPixels
- $(P)$(R)SZipNumPixels_RBV
- longout
- longin
- zCompressLevel - asynInt32 - r/w - zlib compression filter: compression level [1..9] - HDF5_zCompressLevel - $(P)$(R)ZLevel
- $(P)$(R)ZLevel_RBV
- longout
- longin
-
-

- NDFileHDF5.adl

-

- NDFileHDF5.png

-
- - diff --git a/documentation/NDFileHDF5.png b/documentation/NDFileHDF5.png deleted file mode 100755 index 414a9277f..000000000 Binary files a/documentation/NDFileHDF5.png and /dev/null differ diff --git a/documentation/NDFileJPEG.html b/documentation/NDFileJPEG.html deleted file mode 100644 index c6328eef7..000000000 --- a/documentation/NDFileJPEG.html +++ /dev/null @@ -1,60 +0,0 @@ - - - - areaDetector Plugin NDFileJPEG - - - -
-

- areaDetector Plugin NDFileJPEG

-

- October 7, 2014

-

- Mark Rivers

-

- University of Chicago

-
-

- NDFileJPEG inherits from NDPluginFile. This plugin saves data in the - JPEG file format, which is a compressed file format for storing images. There - is JPEG support for almost all languages and programs such as IDL and Matlab. -

-

- The JPEG plugin is limited to 8-bit arrays. It supports all color modes (Mono, RGB1, - RGB2, and RGB3). It is limited to a single array per file, but capture and stream - mode are supported by writing multiple JPEG files. -

-

- The JPEG plugin supports the Int32 parameter NDFileJPEGQuality to control the amount - of compression in the file. This parameter varies from 0 (maximum compression, lowest - quality) to 100 (least compression, best quality). NDFileJPEG.template defines 2 - records to support this: $(P)$(R)JPEGQuality (longout) and $(P)$(R)JPEGQuality_RBV - (longin). -

-

- The NDFileJPEG class - documentation describes this class in detail. -

-

- The NDFileJPEG plugin is created with the NDFileJPEGConfigure command, either from - C/C++ or from the EPICS IOC shell.

-
NDFileJPEGConfigure (const char *portName, int queueSize, int blockingCallbacks, 
-                     const char *NDArrayPort, int NDArrayAddr, size_t maxMemory, 
-                     int priority, int stackSize)
-  
-

- For details on the meaning of the parameters to this function refer to the detailed - documentation on the NDFileJPEGConfigure function in the - NDFileJPEG.cpp documentation and in the documentation for the constructor - for the NDFileJPEG class. -

-
-

- NDFileJPEG.adl

-

- NDFileJPEG.png

-
- - diff --git a/documentation/NDFileJPEG.png b/documentation/NDFileJPEG.png deleted file mode 100755 index d7746bcba..000000000 Binary files a/documentation/NDFileJPEG.png and /dev/null differ diff --git a/documentation/NDFileMagick.html b/documentation/NDFileMagick.html deleted file mode 100644 index aa664c203..000000000 --- a/documentation/NDFileMagick.html +++ /dev/null @@ -1,160 +0,0 @@ - - - - areaDetector Plugin NDFileMagick - - - -
-

- areaDetector Plugin NDFileMagick

-

- July 3, 2017

-

- Mark Rivers

-

- University of Chicago

-
-

- NDFileMagick inherits from NDPluginFile. This plugin saves data in any of the formats - supported by the GraphicsMagick package. - GraphicsMagick supports dozens of file formats, including TIFF, JPEG, PNG, PDF, - 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 - list of GraphicsMagick supported file formats that has a "W" or - "RW" in the Mode column. -

-

- The GraphicsMagick library can either come from ADSupport or from a package installation. - The maximum bit-depth of images in GraphicsMagick is configured at compile time - using a parameter called QuantumDepth. The GraphicsMagick library in ADSupport is - built with QuantumDepth=32, so it can handle 8, 16, and 32-bit images. Package installations - may only support 8 or 16-bit images. This plugin supports color modes Mono and RGB1. - NDFileMagick is limited to a single array per file, but capture and stream mode - are supported by writing multiple files. -

-

- 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)CompressType (longout) and $(P)$(R)CompressType_RBV (longin). - The following are the supported compression types:

- -

- No formats support all of these compression types. Many support only one, or have - an implicit compression mode and so ignore the CompressType parameter.

-

- The GraphicsMagick plugin supports two additional Int32 parameters. NDFileMagickQuality - is used to control the image quality in some formats, for example JPEG. It can have - values from 0 to 100%. NDFileMagickBitDepth controls the bit depth in some file - formats. The choices are 1, 8, 16, and 32.

-

- The following table lists the formats that I have tested to work on Linux, and comments - on compression and quality they appear to support. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- File format - Notes
- JPEG - Compression is implicit, CompressType has no effect. Quality is supported.
- BMP - Compression and quality are not supported.
- EPS - Compression and quality are not supported.
- FITS - Color, compression and quality are not supported.
- GIF - Selecting any CompresType except None results in a compressed image. Quality is - not supported.
- HTML - Produces .shtml, .html, and .gif files.
- JBIG, JB2 - BZIP, RLE, and ZIP compression are supported.
- PDF - BZIP, FAX, GROUP4, JPEG, LZW, RLE, and ZIP compression are supported.
- PNG - Compression is implicit, CompressType has no effect.
- TIFF - JPEG, LZW and ZIP compression supported. ImageJ cannot open JPEG compressed images. - ZIP compressed images open in ImageJ but data are incorrect.
- The NDFileMagick class - documentation describes this class in detail. -

-

- The NDFileMagick plugin is created with the NDFileMagickConfigure command, either - from C/C++ or from the EPICS IOC shell.

-
NDFileMagickConfigure(const char *portName, int queueSize, int blockingCallbacks, 
-                      const char *NDArrayPort, int NDArrayAddr, size_t maxMemory, 
-                      int priority, int stackSize)
-  
-

- For details on the meaning of the parameters to this function refer to the detailed - documentation on the NDFileMagickConfigure function in the - NDFileMagick.cpp documentation and in the documentation for the constructor - for the NDFileMagick - class. -

-
-

- NDFileMagick.adl

-

- NDFileMagick.png

-
- - diff --git a/documentation/NDFileMagick.png b/documentation/NDFileMagick.png deleted file mode 100755 index 2f1efe0bf..000000000 Binary files a/documentation/NDFileMagick.png and /dev/null differ diff --git a/documentation/NDFileNetCDF.html b/documentation/NDFileNetCDF.html deleted file mode 100644 index c1510d51c..000000000 --- a/documentation/NDFileNetCDF.html +++ /dev/null @@ -1,190 +0,0 @@ - - - - areaDetector Plugin NDFileNetCDF - - - -
-

- areaDetector Plugin NDFileNetCDF

-

- October 7, 2014

-

- Mark Rivers

-

- University of Chicago

-
-

- NDFileNetCDF inherits from NDPluginFile. This plugin saves data in the - netCDF file format, which is a portable self-describing binary file format - supported by UniData at - UCAR (University Corporation for Atmospheric Research). There are netCDF libraries - for C, C++, Fortran, and Java. Other languages, including Matlab and IDL have built-in - support for netCDF. There are also add-on interfaces available for Python, Ruby - and other languages. -

-

- The netCDF plugin supports all NDArray data types and any number of array dimensions. - It also has full support for NDArray attributes. It will write all attributes associated - with the NDArray to the file. If multiple arrays are written to a single netCDF - file (stream or capture mode) then each attribute will be an array, with the attribute - value for each NDArray in the file being stored. Note that the number and data types - of attributes must not be changed while file capture or file streaming are in progress - because that would change the structure of the attribute array. Also the colorMode - attribute must not be changed while capture or streaming is in progress, because - that would change the structure of the NDArray data.

-

- The NDFileNetCDF class - documentation describes this class in detail. -

-

- The NDFileNetCDF plugin is created with the NDFileNetCDFConfigure command, either - from C/C++ or from the EPICS IOC shell.

-
NDFileNetCDFConfigure (const char *portName, int queueSize, int blockingCallbacks, 
-                       const char *NDArrayPort, int NDArrayAddr, size_t maxMemory, 
-                       int priority, int stackSize)
-  
-

- For details on the meaning of the parameters to this function refer to the detailed - documentation on the NDFileNetCDFConfigure function in the - NDFileNetCDF.cpp documentation and in the documentation for the constructor - for the NDFileNetCDF - class. -

-

- The following is the header contents of a netCDF file produced by this plugin. This - information was produced with the following command:

-
ncdump -h test_netCDF_68.nc
-
-netcdf test_netCDF_68 {
-dimensions:
-	numArrays = UNLIMITED ; // (10 currently)
-	dim0 = 240 ;
-	dim1 = 320 ;
-	dim2 = 1 ;
-	attrStringSize = 256 ;
-variables:
-	int uniqueId(numArrays) ;
-	double timeStamp(numArrays) ;
-	float array_data(numArrays, dim0, dim1, dim2) ;
-	int Attr_colorMode(numArrays) ;
-	double Attr_AcquireTime(numArrays) ;
-	double Attr_RingCurrent(numArrays) ;
-	int Attr_ImageCounter(numArrays) ;
-	char Attr_CameraModel(numArrays, attrStringSize) ;
-	int Attr_BinX(numArrays) ;
-	int Attr_BinY(numArrays) ;
-	double Attr_AttrTimeStamp(numArrays) ;
-	double Attr_ROI0Mean(numArrays) ;
-	double Attr_ROI1Mean(numArrays) ;
-	char Attr_FilePath(numArrays, attrStringSize) ;
-	char Attr_FileName(numArrays, attrStringSize) ;
-
-// global attributes:
-		:dataType = 6 ;
-		:NDNetCDFFileVersion = 3. ;
-		:numArrayDims = 3 ;
-		:dimSize = 1, 320, 240 ;
-		:dimOffset = 0, 0, 0 ;
-		:dimBinning = 1, 2, 2 ;
-		:dimReverse = 0, 0, 0 ;
-		:Attr_colorMode_DataType = "Int32" ;
-		:Attr_colorMode_Description = "Color mode" ;
-		: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" ;
-}  
-

- ncdump is one of a number of very useful command line utilities that come with the - netCDF package. The -h option to ncdump means to dump only the header information, - not the variable data. This is an explanation of this output: -

- -

- There is an IDL function, - read_nd_netcdf that can be used to read the netCDF files created by this plugin. - This routine is contained in the - CARS IDL detector package. This function is also contained in the areaDetector - distribution in the Viewers/IDL directory. -

-

- There is a plugin for the popular ImageJ - program that can be used to read the netCDF files created by this plugin. This ImageJ - plugin can be downloaded - here. This plugin is also contained in the areaDetector distribution in the - Viewers/ImageJ/EPICS_areaDetector directory. -

-
-

- NDFileNetCDF.adl

-

- NDFileNetCDF.png

-
- - diff --git a/documentation/NDFileNetCDF.png b/documentation/NDFileNetCDF.png deleted file mode 100755 index 02ab3f39c..000000000 Binary files a/documentation/NDFileNetCDF.png and /dev/null differ diff --git a/documentation/NDFileNexus.html b/documentation/NDFileNexus.html deleted file mode 100644 index f1cd794ff..000000000 --- a/documentation/NDFileNexus.html +++ /dev/null @@ -1,132 +0,0 @@ - - - - areaDetector Plugin NDFileNexus - - - -
-

- areaDetector Plugin NDFileNexus

-

- October 7, 2014

-

- Mark Rivers

-

- University of Chicago

-
-

- A plugin to write NeXus files - was written by John Hammonds from the APS. NeXus is a standard format for x-ray - and neutron data based on HDF. This is a very - general file format, capable of storing any type of array data and meta-data.

-

- The NDFileNexus class - documentation describes this class in detail. -

-

- The NDFileNexus plugin is created with the NDFileNexusConfigure command, either - from C/C++ or from the EPICS IOC shell.

-
NDFileNexusConfigure (const char *portName, int queueSize, int blockingCallbacks, 
-                      const char *NDArrayPort, int NDArrayAddr, size_t maxMemory, 
-                      int priority, int stackSize)
-  
-

- For details on the meaning of the parameters to this function refer to the detailed - documentation on the NDFileNexusConfigure function in the - NDFileNexus.cpp documentation and in the documentation for the constructor - for the NDFileNexus class.

-

- NDFileNeXus uses 2 additional parameters to define the location of an XML file that - is read to determine the contents of the NeXus files written by this plugin. These - are described in the following table.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Parameter Definitions in NDFileNexus.h and EPICS Record Definitions in NDFileNexus.template -
- Parameter index variable - asyn interface - Access - Description - drvInfo string - EPICS record name - EPICS record type
- Location of XML file to configure NeXus file contents
- NDFileNexusTemplatePath - asynOctet - r/w - Path to XML template file - TEMPLATE_FILE_PATH - $(P)$(R)TemplateFilePath
- $(P)$(R)TemplateFilePath_RBV
- waveform
- waveform
- NDFileNexusTemplateFile - asynOctet - r/w - Name of XML template file - TEMPLATE_FILE_NAME - $(P)$(R)TemplateFileName
- $(P)$(R)TemplateFileName_RBV
- waveform
- waveform
-

- There is currently no documentation on the contents of the XML template file. However, - there are example XML template files in the iocSimDetector and iocPerkinElmer directories. - Documentation on the XML file contents will be written ASAP. - - It is possible to validate most of the syntax in a NeXus template XML file. For - example, the command (starting from the iocBoot directory) to validate - the syntax of the iocBoot/iocSimDetector/NexusTemplate.xml file is:

-
xmllint --noout --schematron ./template.sch iocSimDetector/NexusTemplate.xml
-

- The prebuilt Linux libraries libhdf5.a and libNeXus.a are built with HDF5 1.6.9. - When they are built with the latest version, 1.8.2, they require GLIBC version 2.7 - or higher, i.e. /lib/libc-2.7.so or higher. Since users may want to install areaDetector - 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.

-
-

- NDFileNexus.adl

-

- NDFileNexus.png

-
- - diff --git a/documentation/NDFileNexus.png b/documentation/NDFileNexus.png deleted file mode 100755 index 91ef0cf62..000000000 Binary files a/documentation/NDFileNexus.png and /dev/null differ diff --git a/documentation/NDFileTIFF.html b/documentation/NDFileTIFF.html deleted file mode 100644 index fbae06a2b..000000000 --- a/documentation/NDFileTIFF.html +++ /dev/null @@ -1,212 +0,0 @@ - - - - areaDetector Plugin NDFileTIFF - - - -
-

- areaDetector Plugin NDFileTIFF

-

- January 28, 2017

-

- Mark Rivers

-

- University of Chicago

-
-

- NDFileTIFF inherits from NDPluginFile. This plugin saves data in the - TIFF file format, which is a popular file format for storing images. There - is TIFF support for almost all languages and programs such as IDL and Matlab. -

-

- The TIFF plugin supports all 8 NDArray data types (signed and unsigned 8, 16, 32 - bit integers, 32 and 64 bit floating point. It supports all color modes (Mono, RGB1, - RGB2, and RGB3). Note that many TIFF readers do not support 16 or 32 bit integer - TIFF files, floating point TIFF files, and 16 or 32 bit color files. NDFileTIFF - is limited to a single array per file, but capture and stream mode are supported - by writing multiple TIFF files.

-

- Tests were done with IDL, ImageJ, and the Python Imaging Library (PIL) to read TIFF - files with all 8 data types. IDL can read all 8 types, although it does not support - signed 8-bit integers so it treats them as unsigned. ImageJ can read all types except - NDFloat64. PIL cannot read NDInt8, NDUInt32, or NDFloat64.

-

- The TIFF plugin writes all NDAttributes attached to the NDArray as TIFF ASCII file - tags, up to a maximum of 490 tags. These tags start with number 65000. For historical - reasons first 4 tags do not have labels. These are the following NDArray class members - converted to ASCII: -

- -

- Tags starting with 65004 are the NDAttributes in the NDArray converted to ASCII - with attribute name, followed by a colon and the attribute value. This information - can be displayed, for example, with the tiffinfo program:

-
-  >tiffinfo ~/scratch/test_001.tif
-  TIFF Directory at offset 0x400008 (4194312)
-  Image Width: 1024 Image Length: 1024
-  Bits/Sample: 32
-  Sample Format: IEEE floating point
-  Compression Scheme: None
-  Photometric Interpretation: min-is-black
-  Samples/Pixel: 1
-  Rows/Strip: 1024
-  Planar Configuration: single image plane
-  Make: Unknown
-  Model: Unknown
-  Software: EPICS areaDetector
-  Tag 65000: 854478417.972736
-  Tag 65001: 3059
-  Tag 65002: 854478418
-  Tag 65003: 1977554
-  Tag 65010: ColorMode:0
-  Tag 65011: RingCurrent:100.010157
-  Tag 65012: RingCurrent_EGU:mA
-  Tag 65013: ID_Energy:42.181675
-  Tag 65014: ID_Energy_EGU:keV
-  Tag 65015: ImageCounter:3059
-  Tag 65016: MaxSizeX:1024
-  Tag 65017: MaxSizeY:1024
-  Tag 65018: CameraModel:Basic simulator
-  Tag 65019: AttributesFileParam:simDetectorAttributes.xml
-  Tag 65020: AttributesFileNative:1139
-  Tag 65021: AttributesFileString:simDetectorAttributes.xml
-  Tag 65022: CameraManufacturer:Simulated detector
-  Tag 65023: Pi:3.141593
-  Tag 65024: E:2.718282
-  Tag 65025: Ten:10
-  Tag 65026: Gettysburg:Four score and seven years ago our fathers
-
-    
-

- If there is an NDAttribute of type NDAttrString named TIFFImageDescription then - this attribute is written to the TIFFTAG_IMAGEDESCRIPTION tag in the TIFF file. - This is the output of tiffinfo on a file written by the TIFF plugin. The data is - from a Pilatus detector. The areaDetector ADPilatus driver reads the TIFFTAG_IMAGEDESCRIPTION - data from the original TIFF file that camserver writes, and adds it to the NDArray - as the TIFFImageDescription attribute. Note that the ImageDescription data is present - twice, both in the standard TIFF ImageDesciption tag and in user tag 65010 in the - TIFF file with all other NDAttributes. This is OK because some data processing code - may expect to find the information in one location or the other. -

-
->tiffinfo ~/scratch/pilatus_test_000.tif
-TIFF Directory at offset 0x5cbdc (379868)
-  Image Width: 487 Image Length: 195
-  Bits/Sample: 32
-  Sample Format: signed integer
-  Compression Scheme: None
-  Photometric Interpretation: min-is-black
-  Samples/Pixel: 1
-  Rows/Strip: 195
-  Planar Configuration: single image plane
-  ImageDescription: # Pixel_size 172e-6 m x 172e-6 m
-# Silicon sensor, thickness 0.000320 m
-# Exposure_time 1.0000000 s
-# Exposure_period 1.0000000 s
-# Tau = 203.0e-09 s
-# Count_cutoff 1390572 counts
-# Threshold_setting: 7000 eV
-# Gain_setting: mid gain (vrf = -0.200)
-# N_excluded_pixels = 0
-# Excluded_pixels: (nil)
-# Flat_field: (nil)
-# Trim_file: p100k0118_E10000_T7000_vrf_m0p20.bin
-# Image_path: .../Data/gpd_user/data/idc/2017/run1/setup_603/setup/images/
-# Wavelength 1.54000 A
-# Energy_range (0, 0) eV
-# Detector_distance 1.00000 m
-# Detector_Voffset 0.00000 m
-# Beam_xy (0.00, 0.00) pixels
-# Flux 0.000000
-# Filter_transmission 1.0000
-# Start_angle 0.0000 deg.
-# Angle_increment 0.1000 deg.
-# Detector_2theta 0.0000 deg.
-# Polarization 0.990
-# Alpha 0.0000 deg.
-# Kappa 0.0000 deg.
-# Phi 0.0000 deg.
-# Phi_increment 0.1000 deg.
-# Omega 0.0000 deg.
-# Omega_increment 0.1000 deg.
-# Chi 0.0000 deg.
-# Chi_increment 0.1000 deg.
-# Oscillation_axis X, CW
-# N_oscillations 1
-
-  Make: Unknown
-  Model: Unknown
-  Software: EPICS areaDetector
-  Tag 65000: 854479056.813133
-  Tag 65001: 1
-  Tag 65002: 854479058
-  Tag 65003: 208583261
-  Tag 65010: TIFFImageDescription:# Pixel_size 172e-6 m x 172e-6 m
-# Silicon sensor, thickness 0.000320 m
-# Exposure_time 1.0000000 s
-# Exposure_period 1.0000000 s
-# Tau = 203.0e-09 s
-# Count_cutoff 1390572 counts
-# Threshold_setting: 7000 eV
-# Gain_setting: mid gain (vrf = -0.200)
-# N_excluded_pixels = 0
-# Excluded_pixels: (nil)
-# Flat_field: (nil)
-# Trim_file: p100k0118_E10000_T7000_vrf_m0p20.bin
-# Image_path: .../Data/gpd_user/data/idc/2017/run1/setup_603/setup/images/
-# Wavelength 1.54000 A
-# Energy_range (0, 0) eV
-# Detector_distance 1.00000 m
-# Detector_Voffset 0.00000 m
-# Beam_xy (0.00, 0.00) pixels
-# Flux 0.000000
-# Filter_transmission 1.0000
-# Start_angle 0.0000 deg.
-# Angle_increment 0.1000 deg.
-# Detector_2theta 0.0000 deg.
-# Polarization 0.990
-# Alpha 0.0000 deg.
-# Kappa 0.0000 deg.
-# Phi 0.0000 deg.
-# Phi_increment 0.1000 deg.
-# Omega 0.0000 deg.
-# Omega_increment 0.1000 deg.
-# Chi 0.0000 deg.
-# Chi_increment 0.1000 deg.
-# Oscillation_axis X, CW
-# N_oscillations 1
-  
-

- The NDFileNetTIFF class - documentation describes this class in detail. -

-

- The NDFileTIFF plugin is created with the NDFileTIFFConfigure command, either from - C/C++ or from the EPICS IOC shell.

-
NDFileTIFFConfigure (const char *portName, int queueSize, int blockingCallbacks, 
-                     const char *NDArrayPort, int NDArrayAddr, size_t maxMemory, 
-                     int priority, int stackSize)
-  
-

- For details on the meaning of the parameters to this function refer to the detailed - documentation on the NDFileTIFFConfigure function in the - NDFileTIFF.cpp documentation and in the documentation for the constructor - for the NDFileTIFF class. -

-
-

- NDFileTIFF.adl

-

- NDFileTIFF.png

-
- - diff --git a/documentation/NDFileTIFF.png b/documentation/NDFileTIFF.png deleted file mode 100755 index f1818c9de..000000000 Binary files a/documentation/NDFileTIFF.png and /dev/null differ diff --git a/documentation/NDGather.png b/documentation/NDGather.png deleted file mode 100755 index 2216b90b5..000000000 Binary files a/documentation/NDGather.png and /dev/null differ diff --git a/documentation/NDOverlay.png b/documentation/NDOverlay.png deleted file mode 100755 index d494cfe60..000000000 Binary files a/documentation/NDOverlay.png and /dev/null differ diff --git a/documentation/NDOverlay8.png b/documentation/NDOverlay8.png deleted file mode 100755 index 361e673c4..000000000 Binary files a/documentation/NDOverlay8.png and /dev/null differ diff --git a/documentation/NDOverlayN.png b/documentation/NDOverlayN.png deleted file mode 100755 index 074da4e7f..000000000 Binary files a/documentation/NDOverlayN.png and /dev/null differ diff --git a/documentation/NDOverlay_image.jpg b/documentation/NDOverlay_image.jpg deleted file mode 100755 index 757d19b9b..000000000 Binary files a/documentation/NDOverlay_image.jpg and /dev/null differ diff --git a/documentation/NDPluginAttrPlot-usecase.png b/documentation/NDPluginAttrPlot-usecase.png deleted file mode 100644 index cf1dd89b0..000000000 Binary files a/documentation/NDPluginAttrPlot-usecase.png and /dev/null differ diff --git a/documentation/NDPluginAttrPlot.html b/documentation/NDPluginAttrPlot.html deleted file mode 100644 index 39acb72a3..000000000 --- a/documentation/NDPluginAttrPlot.html +++ /dev/null @@ -1,277 +0,0 @@ - - - - areaDetector Plugin NDPluginAttrPlot - - - -
-

areaDetector Plugin NDPluginAttrPlot

-

May 5, 2017

-

Blaž Kranjc, Cosylab

-
-
-

Contents

- -
-

Overview

-

- This plugin is aimed for drivers that expose data as NDAttributes. - The main use case for the plugin is to retrieve NDAttribute values, cache them and expose them as a waveform. - This enables easy plotting of real-time values of the attributes in OPIs. - Graphical representation of the use case is depicted in Figure 1. -

-

- The plugin is similar to the NDPluginAttribute, the differences are described in the section Comparison to NDPluginAttribute. - All configuration options and instructions are contained in the Configuration section. - A real world example of the plugin usage and EDM GUI can be found in the Screenshots section. - Details of added parameters for this plugin and other development details can be found in the section Developer Notes. -

-
- -

Figure 1: Typical use case that can make use of the NDPluginAttrPlot.

-
-

- The plugin is initialized when the first NDArray is passed to it and reinitialized whenever the "$(P)$(R)Reset" is processed or the unique ID of the received NDArray has decreased. - The names of the attributes that are saved are not part of the plugin configuration but are extracted from the NDArray. - Unique ID of the NDArray is always tracked as if it was an attribute. - During initialization the list of NDAttributes in the NDAttributeList of the NDArray is traversed and a preconfigured number of NDAttribute names and their values are saved on the first come first served basis. - - Please note that only numerical attributes are supported by the plugin. - String attributes are skipped and all numerical attribute values are converted to double. - - The values are saved internally in the plugin in a circular buffer. - The length of this buffer is configured at the plugin load and cannot be configured during runtime. - Also all attributes use the same value for the circular buffer length. -

-

- The names of the NDAttributes that are saved by the plugin are exposed to the EPICS layer in "$(P)$(R)Attr$(ATTR_IND)" records. - To reduce the strain on the channel access interface not all circular buffers are exposed at all times, but only a preconfigured number of waveform records are available. The records are named "$(P)$(R)$(AXIS):Data$(DATA_IND)". - Additional macro AXIS is added to clearly name the plot's X or Y axis if required. - As the main purpose of the plugin is live plotting the data records are processed periodically with 1 Hz and is not tied to the acquisition period. - The data that is exposed to the waveforms is selected by writing the index (ATTR_IND) of desired attribute to the "$(P)$(R)$(AXIS):DataSelect$(DATA_IND)" record. - Magic numbers are used for selection of Unique ID field (value of -1) and a selection of "None" - array of all zeros (value of -2). The readback of index and the name of the attribute name are then exposed on "$(P)$(R)$(AXIS):DataSelect$(DATA_IND)_RBV" and "$(P)$(R)$(AXIS):DataLabel$(DATA_IND)" respectively. - Current length of the internal circular buffer is provided to the user via "$(P)$(R)NPts" record. -

-

- Additional notes about this plugin: -

-

-

Comparison to NDPluginAttribute

-

- NDPluginAttrPlot is different from NDPluginAttribute in the following ways: -

-

-
-

Configuration

-

- The NDPluginAttribute plugin is created with the NDAttrConfigure command, either from C/C++ or from the EPICS IOC shell. - The prototype of its constructor is -

-NDPluginAttrPlot(const char * portName, int n_attributes, - int cache_size, int n_data_blocks, const char * NDArrayPort, int NDArrayAddr, - int queueSize, int blockingCallbacks, int priority, int stackSize) - -

- Parameters NDArrayPort, NDArrayAddr, portName, queueSize, blockingCallbacks, priority and stackSize are arguments common to all plugins. -

-

- Configuration of the driver instance is tightly coupled to instantiation of EPICS dbs and macro substitution. Unfortunately this tight coupling must be managed manually -

-

-

- For further details please refer to the documentation in the source file NDPluginAttrPlot.cpp. -

-
-

Screenshots

- -

Figure 2: Main plugin screen of the NDPluginAttrPlot plugin

- -

Figure 3: Plot screen showing two parameters plotted against their Unique ID

- -

Figure 4: Attributes to plot are selected on the select screen

-
-

Developer Notes

-

- NDPluginAttrPlot inherits from NDPluginDriver. The NDPluginAttribute class documentation describes this class in detail. -

-

- NDPluginAttrPlot defines the following parameters. It also implements all of the - standard plugin parameters from NDPluginDriver. -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Parameter Definitions in NDPluginAttrPlot.h and EPICS Record Definitions in NDAttrPlot.template -
- drvInfo string - asyn interface - Access - Description - EPICS record name - EPICS record type
- AP_Reset - asynInt32 - w - Write to this record forces reinitialization of the plugin on the next callback. - $(P)$(R)Reset - ao
- AP_NPts - asynInt32 - r - Number of saved cached points. - $(P)$(R)NPts - ai
- Parameter Definitions in NDPluginAttrPlot.h and EPICS Record Definitions in NDAttrPlotAttr.template
- drvInfo string - asyn interface - Access - Description - EPICS record name - EPICS record type
- AP_Attribute - asynOctetRead - r - Attribute name. - $(P)$(R)Attr$(ATTR_IND) - stringin
- Parameter Definitions in NDPluginAttrPlot.h and EPICS Record Definitions in NDAttrPlotData.template
- drvInfo string - asyn interface - Access - Description - EPICS record name - EPICS record type
- AP_Data - asynFloat64ArrayIn - r - Exposed data for $(DATA_ADDR). - $(P)$(R)$(AXIS):Data$(DATA_IND) - waveform
- AP_DataSelect - asynInt32 - r/w - Index of selected attribute for $(DATA_ADDR). - $(P)$(R)$(AXIS):DataSelect$(DATA_IND)
$(P)$(R)$(AXIS):DataSelect$(DATA_IND)_RBV
- ao
ai
- AP_DataLabel - asynOctetRead - r - Attribute name for $(DATA_ADDR). - $(P)$(R)$(AXIS):DataLabel$(DATA_IND) - stringin
-

- If the array data contains more than 16K bytes then in order for EPICS clients to - the environment variable EPICS_CA_MAX_ARRAY_BYTES on both the EPICS IOC computer and EPICS client - computer must be set to a value at least as large as the array size in bytes.

-
- - diff --git a/documentation/NDPluginAttrPlot.png b/documentation/NDPluginAttrPlot.png deleted file mode 100644 index e92f47da8..000000000 Binary files a/documentation/NDPluginAttrPlot.png and /dev/null differ diff --git a/documentation/NDPluginAttrPlot_Plot.png b/documentation/NDPluginAttrPlot_Plot.png deleted file mode 100644 index 41c787a0f..000000000 Binary files a/documentation/NDPluginAttrPlot_Plot.png and /dev/null differ diff --git a/documentation/NDPluginAttrPlot_Select.png b/documentation/NDPluginAttrPlot_Select.png deleted file mode 100644 index c64ffa06a..000000000 Binary files a/documentation/NDPluginAttrPlot_Select.png and /dev/null differ diff --git a/documentation/NDPluginAttribute.html b/documentation/NDPluginAttribute.html deleted file mode 100644 index c3f323371..000000000 --- a/documentation/NDPluginAttribute.html +++ /dev/null @@ -1,312 +0,0 @@ - - - - areaDetector Plugin NDPluginAttribute - - - -
-

- areaDetector Plugin NDPluginAttribute

-

- March 8, 2014

-

- Matt Pearson, Oak Ridge National Lab

-

- Mark Rivers, University of Chicago

-
-

- Contents

- -

- Overview -

-

- This plugin provides the ability to extract an NDArray attributes and publish their - values over channel access. It also publishes arrays of the attribute values, and - the integrated values.

-

- Each NDPluginAttribute plugin supports any number of attributes, each publishing - the last attribute value, the sum of that attribute value since the last reset, - and a time-series array of the attribute value. The number of attributes is defined - when the NDPluginAttribute is created in the startup script. Each attribute is referenced - by its asyn "addr" address field.

-

- In addition to the actual NDAttributes attached to the NDArray this plugin supports - 4 virtual attributes. These correspond to properties of all NDArray objects. These - virtual attribute names can use used in the $(P)$(R)AttrName record to select that - NDArray property.

- - - - - - - - - - - - - - - - - - - - - - - -
- Virtual attribute name - NDArray property
- NDArrayUniqueId - NDArray.uniqueId
- NDArrayTimeStamp - NDArray.timeStamp
- NDArrayEpicsTSSec - NDArray.epicsTS.secPastEpoch
- NDArrayEpicsTSnSec - NDArray.epicsTS.nsec
-

- The time-series arrays use the same PVs to control acquisition as the NDPluginStats - plugin. Acquisition of arrays for all attributes are started an stopped at the same - time.

-

- NDPluginAttribute inherits from NDPluginDriver. The - NDPluginAttribute class documentation describes this class in detail. -

-

- NDPluginAttribute defines the following parameters. It also implements all of the - standard plugin parameters from NDPluginDriver. -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Parameter Definitions in NDPluginAttribute.h and EPICS Record Definitions in NDAttribute.template -
- Parameter index variable - asyn interface - Access - Description - drvInfo string - EPICS record name - EPICS record type
- NDPluginAttribute
- Reset
- asynInt32 - r/w - Reset the plugin data. This zeros the array, and resets the value sum and value - to zero. - ATTR_RESET - $(P)$(R)Reset - bo
- Time-Series data
-
- The time series is implemented by loading an instance of the - NDPluginTimeSeries for each NDPluginStats plugin, and the time series control - uses records in NDTimeSeries.template. That documentation should be consulted for - an explanation of these records. The prefix and record name macro for the time-series - plugin records from NDTimeSeries.template is $(P)$(R)TS:.
- NOTE: The time-series plugin is often used with drivers which sample at a - fixed well-defined time interval. This cannot be guaranteed with the statistics - plugin, so the averaging time records and time axis waveform record from NDPluginTimeSeries - are typically not used, and the statistics data are plotted against time point #, - rather than actual time. -
- The time-series waveform records for each statistic are defined in NDAttributeN.template. -
- NDPluginTimeSeries
- TSTimeSeries -
- asynFloat64Array - - r/o - - The time series data arrays of the basic statistics and centroid and sigma statistics - described above. - - TS_TIME_SERIES - - $(P)$(R)TSArrayValue - - waveform -
- Parameter Definitions in NDPluginAttribute.h and EPICS Record Definitions in NDAttributeN.template. - There is one of these records for each attribute in the plugin.
- Parameter index variable - asyn interface - Access - Description - drvInfo string - EPICS record name - EPICS record type
- NDPluginAttributeAttrName - asynOctet - r/w - The name of the NDAttribute parameter that we want to publish. This can be modified - at runtime. - ATTR_ATTRNAME - $(P)$(R)AttrName -
- $(P)$(R)AttrName_RBV
- waveform
- NDPluginAttributeVal - asynFloat64 - r/o - Attribute value - ATTR_VAL - $(P)$(R)Value_RBV - ai
- NDPluginAttributeValSum - asynFloat64 - r/o - Sum of the attribute value, since the last reset. - ATTR_VAL_SUM - $(P)$(R)ValueSum_RBV - ai
-

- If the array data contains more than 16K bytes then in order for EPICS clients to - receive this data they must be built with EPICS R3.14 (not R3.13), and the environment - variable EPICS_CA_MAX_ARRAY_BYTES on both the EPICS IOC computer and EPICS client - computer must be set to a value at least as large as the array size in bytes.

-

- Configuration

-

- The NDPluginAttribute plugin is created with the NDAttrConfigure command, either - from C/C++ or from the EPICS IOC shell.

-
NDAttrConfigure(const char *portName, int queueSize, int blockingCallbacks, 
-                      const char *NDArrayPort, int NDArrayAddr, int maxAttributes, 
-                      int maxBuffers, size_t maxMemory, int priority, int stackSize)
-  
-

- All arguments except maxAttributes are common to all plugins. maxAttributes defines - the maximum number of attributes that this plugin will support.

-

- For details on the meaning of the parameters to this function refer to the detailed - documentation on the NDAttrConfigure function in the - NDPluginAttribute.cpp documentation and in the documentation for the constructor - for the NDPluginAttribute - class. -

-

- Screen shots

-

- The following is the MEDM screen that provides access to the parameters in NDPluginDriver.h - and NDPluginAttribute.h through records in NDPluginBase.template and NDAttribute.template. -

-
-

- NDPluginAttribute.adl

- NDPluginAttribute.png -
-

- The following is the MEDM screen that provides control and display of the parameters - for 8 attributes. -

-
-

- NDPluginAttribute8.adl

- NDPluginAttribute8.png -
-

- The following is the MEDM screen that displays the time-series data for each attribute. - The first screen shows a plot of NDArrayUniqueID and the second shows NDArrayEpicsTSnSec. -

-
-

- NDTimeSeries.adl

- NDPluginAttributeTSUniqueID.png - NDPluginAttributeTSEpicsTSnSec.png -
-

- Notes

- - - diff --git a/documentation/NDPluginAttribute.png b/documentation/NDPluginAttribute.png deleted file mode 100755 index 1ebe11624..000000000 Binary files a/documentation/NDPluginAttribute.png and /dev/null differ diff --git a/documentation/NDPluginAttribute8.png b/documentation/NDPluginAttribute8.png deleted file mode 100644 index 8fec8789f..000000000 Binary files a/documentation/NDPluginAttribute8.png and /dev/null differ diff --git a/documentation/NDPluginAttributeTSEpicsTSnSec.png b/documentation/NDPluginAttributeTSEpicsTSnSec.png deleted file mode 100644 index d908cbdfc..000000000 Binary files a/documentation/NDPluginAttributeTSEpicsTSnSec.png and /dev/null differ diff --git a/documentation/NDPluginAttributeTSUniqueID.png b/documentation/NDPluginAttributeTSUniqueID.png deleted file mode 100644 index 615769f17..000000000 Binary files a/documentation/NDPluginAttributeTSUniqueID.png and /dev/null differ diff --git a/documentation/NDPluginBase.png b/documentation/NDPluginBase.png deleted file mode 100755 index 78fa823b2..000000000 Binary files a/documentation/NDPluginBase.png and /dev/null differ diff --git a/documentation/NDPluginBaseFull.png b/documentation/NDPluginBaseFull.png deleted file mode 100755 index acd3caf20..000000000 Binary files a/documentation/NDPluginBaseFull.png and /dev/null differ diff --git a/documentation/NDPluginCircularBuff.html b/documentation/NDPluginCircularBuff.html deleted file mode 100755 index 58d5404da..000000000 --- a/documentation/NDPluginCircularBuff.html +++ /dev/null @@ -1,521 +0,0 @@ - - - - areaDetector Plugin NDPluginCircularBuff - - - -
-

- areaDetector Plugin NDPluginCircularBuff

-

- March 9, 2015

-

- Edmund Warrick, Diamond Light Source

-

- Mark Rivers, University of Chicago

-
-

- Contents

- -

- Overview -

-

- NDPluginCircularBuff is a triggering plugin. It receives NDArrays from a plugin - or driver and checks whether a user-defined trigger condition has been met. The - trigger condition is based on the values of up to two NDAttributes attached to the - NDArray. The attribute values are used in a general calculation expression that - defines the trigger condition. Once the trigger condition is detected the plugin - outputs the triggering NDArray, along with a configurable number of pre- and post-trigger - NDArrays. Triggering can also be performed using a soft trigger, controlled from - the "Trigger" database record.

-

- Acquisition is started by setting the "NDCircBuffControl" parameter to non-zero - (via the "Capture" record in the associated database). The plugin then copies all - received NDArrays to its ring buffer, wrapping once the specified pre-count is reached.

-

- Once the trigger is detected, the plugin will immediately output all the NDArrays - stored in the ring buffer in order from oldest to newest (by calling doCallbacksGenericPointer). - After the trigger is set, new NDArrays will then be output as soon as they arrive, - until the post-count is reached. The plugin will then stop buffering or outputting - NDArrays until it is restarted via NDCircBuffControl. The plugin will also automatically - restart if the following condition is true:

-
-     (PresetTriggerCount == 0) || ((PresetTriggerCount > 0) && (ActualTriggerCount < PresetTriggerCount)))
-    
-

- NDPluginCircularBuff inherits from NDPluginDriver. The - NDPluginCircularBuff class documentation describes this class in detail. -

-

- NDPluginCircularBuff defines the following parameters. It also implements all of - the standard plugin parameters from NDPluginDriver - . The EPICS database NDCircularBuff.template provides access to these parameters, - listed in the following table. -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Parameter Definitions in NDPluginCircularBuff.h and EPICS Record Definitions in - NDCircularBuff.template
- Parameter index variable - - asyn interface - - Access - - Description - - drvInfo string - - EPICS record name - - EPICS record type -
- NDCircBuffControl - asynInt32 - r/w - Toggle triggering & buffering on/off - CIRC_BUFF_CONTROL - $(P)$(R)Capture -
- $(P)$(R)Capture_RBV
- busy -
- bi
- NDCircBuffStatus - asynOctet - r/o - Plugin status feedback string - CIRC_BUFF_STATUS - $(P)$(R)StatusMessage - stringin
- NDCircBuffPreTrigger - asynInt32 - r/w - Number of pre-trigger NDArrays to store - CIRC_BUFF_PRE_TRIGGER - $(P)$(R)PreCount -
- $(P)$(R)PreCount_RBV
- longout -
- longin
- NDCircBuffPostTrigger - asynInt32 - r/w - Number of post-trigger NDArrays to output - CIRC_BUFF_POST_TRIGGER - $(P)$(R)PostCount -
- $(P)$(R)PostCount_RBV
- longout -
- longin
- NDCircBuffTriggerA - asynOctet - r/w - Name of the NDAttribute for trigger A. - CIRC_BUFF_TRIGGER_A - $(P)$(R)TriggerA -
- $(P)$(R)TriggerA_RBV
- stringout -
- stringin
- NDCircBuffTriggerB - asynOctet - r/w - Name of the NDAttribute for trigger B - CIRC_BUFF_TRIGGER_B - $(P)$(R)TriggerB -
- $(P)$(R)TriggerB_RBV
- stringout -
- stringin
- NDCircBuffTriggerAVal - asynFloat64 - r/o - Value of the NDAttribute for trigger A. The attribute defined by TriggerA must have - a numeric datatype, not string. This value field only updates when the plugin is - capturing (Capture=1). - CIRC_BUFF_TRIGGER_A_VAL - $(P)$(R)TriggerAVal - ai
- NDCircBuffTriggerBVal - asynFloat64 - r/o - Value of the NDAttribute for trigger B. The attribute defined by TriggerB must have - a numeric datatype, not string. This value field only updates when the plugin is - capturing (Capture=1). - CIRC_BUFF_TRIGGER_B_VAL - $(P)$(R)TriggerBVal - ai
- NDCircBuffTriggerCalc - asynOctet - r/w - The calculation expression for the trigger. This can be any valid expression accepted - by the EPICS calc routines in libCom, and used for example in the EPICS calc record. - The maximum length of the expression is currently set to MAX_INFIX_SIZE (100) defined - in postfix.h in EPICS base. - CIRC_BUFF_TRIGGER_CALC - $(P)$(R)TriggerCalc
- $(P)$(R)TriggerCalc_RBV
- waveform -
- waveform
- NDCircBuffTriggerCalcVal - asynFloat64 - r/o - Value of the calculated expression. This value field only updates when the plugin - is capturing (Capture=1). - CIRC_BUFF_TRIGGER_CALC_VAL - $(P)$(R)TriggerCalcVal - ai
- NDCircBuffPresetTriggerCount - asynInt32 - r/w - Controls how many times the plugin can be triggered before capture stops. The default - is 1, so the plugin will only trigger once and then stop capturing. If this is 0 - then the plugin will continue to retrigger forever until it is stopped by setting - Capture=0. - CIRC_BUFF_PRESET_TRIGGER_COUNT - $(P)$(R)PresetTriggerCount
- $(P)$(R)PresetTriggerCount_RBV
- longout -
- longin
- NDCircBuffActualTriggerCount - asynInt32 - r/o - The number of triggers that have occurred since capture was last started. - CIRC_BUFF_ACTUAL_TRIGGER_COUNT - $(P)$(R)ActualTriggerCount_RBV - longin
- NDCircBuffCurrentImage - asynInt32 - r/o - Number of NDArrays currently stored in ring buffer - CIRC_BUFF_CURRENT_IMAGE - $(P)$(R)CurrentQty_RBV - longin
- NDCircBuffPostCount - asynInt32 - r/o - Number of post-trigger NDArrays emitted so far - CIRC_BUFF_POST_COUNT - $(P)$(R)PostTriggerQty_RBV - longin
- NDCircBuffSoftTrigger - asynInt32 - r/w - Set to non-zero to force a trigger on next NDArray - CIRC_BUFF_SOFT_TRIGGER - $(P)$(R)Trigger - busy
- NDCircBuffTriggered - asynInt32 - r/o - Current trigger status - CIRC_BUFF_TRIGGERED - $(P)$(R)Trigger_RBV - bi
- NDCircBuffFlushOnSoftTrig - asynInt32 - r/o - Defines behaviour of the flush functionality. Choices are: -
    -
  • "OnNewImage" (0, default) Flushes on new image.
  • -
  • "Immediately" (1) Flushes immediately on software trigger.
  • -
-
- CIRC_BUFF_FLUSH_ON_SOFTTRIGGER - $(P)$(R)FlushOnSoftTrg
- $(P)$(R)FlushOnSoftTrg_RBV
- bo -
- bi
-

- Triggering using NDArray attributes is quite powerful. Two NDArray attributes can - be used for triggering. The names of these attributes are defined with the TriggerA - and TriggerB records. The values of these attributes must be numeric, not string. - The TriggerCalc record defines a calculation expression that uses that same syntax - as the EPICS calc record. If the expression evaluates to a non-zero value then the - plugin will be triggered. The variables in the expression are defined as follows:

- -

- The following are some example expressions. They assume that the NDPluginCircularBuff - plugin is getting its data from the NDPluginStats plugin and that the NDPluginStats - plugin is using an attributes XML file containing the following lines:

-
-   <attribute name="MaxValue"  type="PARAM" source="MAX_VALUE"       datatype="DOUBLE" description="Maximum value" />
-   <attribute name="CentroidX" type="PARAM" source="CENTROIDX_VALUE" datatype="DOUBLE" description="Centroid X position" />
-  
-

- Assume that TriggerA is set to MaxValue and TriggerB is set to CentroidX.

-

- The following are examples of some expressions that can then be used for triggering:

- - - - - - - - - - - - - - - - - - - -
- Expression - - Description -
- A<200 - Intensity of brightest pixel is less than 200
- A>1.5*H && E>50;H:=A - Intensity of brightest pixel (A) is more than 150% of the value in the previous - image (H) and there are at least 50 images in the circular buffer. Set H to A after - evaluation.
- B<300 || A>100 - X centroid is less than pixel 300 or the maximum intensity is greater than 100. -
-

- If the TriggerA or TriggerB attrbutes do not exist, or if they are non-numeric datatype - then the TriggerAVal or TriggerBVal is set to NaN (Not a Number). If that value - is used in the calculation expression then in some cases the TriggerCalcVal will - also be NaN (for example A+B will be NaN). If TriggerCalcVal is NaN or Infinity - then the expression is treated as 0 and the trigger will not occur. However, some - expressions involving NaN arguments do not result in a NaN result and could result - in false triggers. For example (A&&B) evaluates as 1 when both A and B are NaN. - To avoid this problem the isnan() and isinf() functions can be used in the expression.

-

- It is possible to continuously output individual NDArrays that match the trigger - condition. To do this set PreCount=0, PostCount=1, and PresetTriggerCount=0. -

-

- Screen shots

-

- The following is the MEDM screen that provides access to the parameters in NDPluginDriver.h - and NDPluginCircularBuff.h through records in NDPluginBase.template and NDCircularBuff.template. -

-
-

- NDCircularBuff.adl

-

- NDCircularBuff.png

-
-

- Configuration

-

- The NDPluginCircularBuff plugin is created with the NDCircularBuffConfigure command, - either from C/C++ or from the EPICS IOC shell.

-
-NDCircularBuffConfigure(const char *portName, int queueSize, int blockingCallbacks,
-                        const char *NDArrayPort, int NDArrayAddr,
-                        int maxBuffers, size_t maxMemory)
-  
-

- For details on the meaning of the parameters to this function refer to the detailed - documentation on the NDCircularBuffConfigure function in the - NDPluginCircularBuff.cpp documentation and in the documentation for the constructor - for the NDPluginCircularBuff - class. -

-

- In particular, note that maxBuffers constrains the size of the ring buffer - the - plugin will discard any changes to the pre- or post count if this would result in - (pre-count + post-count) exceeding maxBuffers. -

- - diff --git a/documentation/NDPluginCodec.html b/documentation/NDPluginCodec.html deleted file mode 100755 index 185f1bbc2..000000000 --- a/documentation/NDPluginCodec.html +++ /dev/null @@ -1,429 +0,0 @@ - - - - areaDetector Plugin NDPluginCodec - - - -
-

- areaDetector Plugin NDPluginCodec

-

- December 1, 2018

-

- Bruno Martins

-

- Facility for Rare Isotope Beams

-

- Mark Rivers

-

- University of Chicago

-
-

- Contents

- -

- Overview

-

- NDPluginCodec is a tool for compressing and decomppressing NDArray data according - to a user selectable codec. Compression information is stored in the codec - and compressionSize fields of the NDArray. -

-

- Compressed NDArray Semantics

-

- The new NDArray field codec is used to indicate if an NDArray holds - compressed or uncompressed data. -

-

- Uncompressed NDArrays

- -

- Compressed NDArrays

- -

- Compression

-

- To compress the data, the Mode parameter must be set to Compress. Also, the parameter - Compressor must be set to something other than None. After the compression is done, - the CompFactor parameter will be updated with the compression factor achieved. CompFactor - is calculated according to the following formula: -

-

- dataSize/compressedSize -

-

- Currently, three choices are available for the Compressor parameter: -

- -

- Note that BloscNumThreads controls the number of threads created from a single NDPluginCodec - thread. The performance of both the JPEG and Blosc compressors can also be increased - by running multiple NDPluginCodec threads within a single plugin instance. This - is controlled with the NumThreads record, as for most other plugins.

-

- It is important to note that plugins downstream of NDCodec that are receiving compressed - NDArrays must have been constructed with NDPluginDriver's compressionAware=true, - otherwise compressed arrays will be dropped by them at runtime. Currently - only NDPluginCodec and NDPluginPva are able to handle compressed NDArrays. -

-

- Decompression

-

- If Mode is set to Decompress, decompression happens automatically and transparently - if the codec is supported. No other parameter needs to be set for the decompression - to work. -

-

- Parameters

-

- NDPluginCodec inherits from NDPluginDriver. The - NDPluginCodec class documentation describes this class in detail. -

-

- NDPluginCodec defines the following parameters. It also implements all of the standard - plugin parameters from NDPluginDriver. - The EPICS database NDCodec.template provides access to these parameters, listed - in the following table. -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Hi, - - -This is what I see with IOS 12.1. It is not working, I don't see Reply All, only Reply. - - -I don't know much about mail, but could the difference be that my Mail App is using a Microsoft Exchange Server? - - -Mark - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Parameter Definitions in NDPluginCodec.h and EPICS Record Definitions in NDCodec.template -
- Parameter index variable - - asyn interface - - Access - - Description - - drvInfo string - - EPICS record name - - EPICS record type -
- NDCodecMode - asynInt32 - r/w - The plugin mode (NDCodecMode_t). - MODE - $(P)$(R)Mode
- $(P)$(R)Mode_RBV
- mbbo
- mbbi
- NDCodecCompressor - asynInt32 - r/w - Which compressor to use (NDCodecCompressor_t). - COMPRESSOR - $(P)$(R)Compressor
- $(P)$(R)Compressor_RBV
- mbbo
- mbbi
- NDCodecCompFactor - asynFloat64 - r/w - Compression factor. - COMP_FACTOR - $(P)$(R)CompFactor - ai
- Parameters for the JPEG Compressor
- NDCodecJPEGQuality - asynInt32 - r/w - JPEG compression quality. - JPEG_QUALITY - $(P)$(R)JPEGQuality
- $(P)$(R)JPEGQuality_RBV
- longout
- longin
- Parameters for the Blosc Compressor
- NDCodecBloscCompressor - asynInt32 - r/w - Which Blosc compressor to use (NDCodecBloscComp_t). - BLOSC_COMPRESSOR - $(P)$(R)BloscCompressor
- $(P)$(R)BloscCompressor_RBV
- mbbo
- mbbi
- NDCodecBloscCLevel - asynInt32 - r/w - Blosc compression level. - BLOSC_CLEVEL - $(P)$(R)BloscCLevel
- $(P)$(R)BloscCLevel_RBV
- longout
- longin
- NDCodecBloscShuffle - asynInt32 - r/w - Blosc shuffle data before compression:
-
    -
  • None
  • -
  • Bit Shuffle
  • -
  • Byte Shuffle
  • -
-
- BLOSC_SHUFFLE - $(P)$(R)BloscShuffle
- $(P)$(R)BloscShuffle_RBV
- mbbo
- mbbi
- NDCodecBloscNumThreads - asynInt32 - r/w - Blosc number of threads for compression/decompression. - BLOSC_NUMTHREADS - $(P)$(R)BloscNumThreads
- $(P)$(R)BloscNumThreads_RBV
- longout
- longin
- Parameters for Diagnostics
- NDCodecCodecStatus - asynInt32 - r/o - Status of the compression/decompression. Values are "Success", "Warning", and "Error". - - CODEC_STATUS - $(P)$(R)CodecStatus - mbbi
- NDCodecCodecError - asynOctet - r/o - Error message if CodecStatus is "Warning" or "Error". - CODEC_ERROR - $(P)$(R)CodecError - waveform
-

- Configuration

-

- The NDPluginCodec plugin is created with the following command, either from C/C++ - or from the EPICS IOC shell. -

-
 int NDCodecConfigure(const char *portName, int queueSize, int blockingCallbacks,
-                             const char *NDArrayPort, int NDArrayAddr,
-                             int maxBuffers, size_t maxMemory,
-                             int priority, int stackSize)
-  
-

- For details on the meaning of the parameters to this function refer to the detailed - documentation on the NDCodecConfigure function in the - NDPluginCodec.cpp documentation and in the documentation for the constructor - for the NDPluginCodec - class. -

-

- Screen shots

-

- The following is the MEDM screen that provides access to the parameters in NDPluginDriver.h - and NDPluginCodec.h through records in NDPluginBase.template and NDCodec.template. -

-
-

- NDCodec.adl

-

- NDCodec.png

-
-

- Performance

-

- The following screens show the performance that can be achieved with NDPluginCodec. - For this test the simDetector driver was generating 1024x1024 UInt32 arrays at ~1280 - arrays/s. These were compressed using Blosc LZ4 compression with Bit shuffle and - 6 Blosc threads. The compression factor was ~42, so the output arrays were 98 KB, - compared to the input size of 4 MB. When running with a single plugin thread (NumThreads=1) - the plugin sometimes could not keep up. By increasing numThreads to 2 the plugin - could always process the full 1280 arrays/s without dropping any arrays. The test - was run on a 20-core Linux machine, and the simDetector IOC was using ~7 cores. - NDPluginCodec was using ~6 of these. Since each array is 4 MB, this is a compression - rate of ~5.0 GB/s, or about 5 times the capacity of 10 Gbit Ethernet. -

-
-

- NDCodec performance with ~1280 32-bit frames/s -

-

- NDCodec_Performance.png

-

- NDPluginBaseFull.adl showing that NumThreads was set to 2 -

-

- NDCodec_Performance_More.png

-
- - diff --git a/documentation/NDPluginColorConvert.html b/documentation/NDPluginColorConvert.html deleted file mode 100644 index 490b558de..000000000 --- a/documentation/NDPluginColorConvert.html +++ /dev/null @@ -1,167 +0,0 @@ - - - - areaDetector Plugin NDPluginColorConvert - - - -
-

- areaDetector Plugin NDPluginColorConvert

-

- October 1, 2012

-

- Mark Rivers

-

- University of Chicago

-
-

- Contents

- -

- Overview -

-

- NDPluginColorConvert is a tool for converting the color mode of NDArray data. It - receives an input NDArray with one color mode and outputs another NDArray with a - (potentially) different color mode. All other attributes of the array are preserved.

-

- NDPluginColorConvert inherits from NDPluginDriver. The - NDPluginColorConvert class documentation describes this class in detail. -

-

- NDPluginColorConvert defines the following parameters. It also implements all of - the standard plugin parameters from NDPluginDriver - . The EPICS database NDColorConvert.template provides access to these parameters, - listed in the following table. -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Parameter Definitions in NDPluginColorConvert.h and EPICS Record Definitions in - NDColorConvert.template
- Parameter index variable - asyn interface - Access - Description - drvInfo string - EPICS record name - EPICS record type
- NDPluginColorConvertColorModeOut - asynInt32 - r/w - The output color mode (NDColorMode_t). - COLOR_MODE_OUT - $(P)$(R)ColorModeOut -
- $(P)$(R)ColorModeOut_RBV
- mbbo -
- mbbi
- NDPluginColorConvertFalseColor - asynInt32 - r/w - The false color map index. There are currently 2 false color maps defined, Rainbow - and Iron. Additional color maps can easily be added in the future. - FALSE_COLOR - $(P)$(R)FalseColor -
- $(P)$(R)FalseColor_RBV
- mbbo -
- mbbi
-

- NDPluginColorConvert currently supports the following conversions:

- -

- When converting from 8-bit mono to RGB1, RGB2 or RGB3 a false-color map will be - applied if FalseColor is not zero.

-

- The Bayer color conversion supports the 4 Bayer formats (NDBayerRGGB, NDBayerGBRG, - NDBayerGRBG, NDBayerBGGR) defined in NDArray.h. If the input color mode and output - color mode are not one of these supported conversion combinations then the output - array is simply a copy of the input array and no conversion is performed.

-

- Configuration

-

- The NDPluginColorConvert plugin is created with the following command, either from - C/C++ or from the EPICS IOC shell. -

-
 int NDColorConvertConfigure(const char *portName, int queueSize, int blockingCallbacks, 
-                             const char *NDArrayPort, int NDArrayAddr, 
-                             int maxBuffers, size_t maxMemory,
-                             int priority, int stackSize)
-  
-

- For details on the meaning of the parameters to this function refer to the detailed - documentation on the NDColorConvertConfigure function in the - NDPluginColorConvert.cpp documentation and in the documentation for the constructor - for the NDPluginColorConvert - class. -

-

- Screen shots

-

- The following is the MEDM screen that provides access to the parameters in NDPluginDriver.h - and NDPluginColorConvert.h through records in NDPluginBase.template and NDColorConvert.template. -

-
-

- NDColorConvert.adl

-

- NDColorConvert.png

-
-

- Restrictions

- - - diff --git a/documentation/NDPluginDriverExample_NDStats.png b/documentation/NDPluginDriverExample_NDStats.png deleted file mode 100755 index c0fbb5864..000000000 Binary files a/documentation/NDPluginDriverExample_NDStats.png and /dev/null differ diff --git a/documentation/NDPluginDriverExample_StatsFull_1thread.png b/documentation/NDPluginDriverExample_StatsFull_1thread.png deleted file mode 100755 index b377a9e7c..000000000 Binary files a/documentation/NDPluginDriverExample_StatsFull_1thread.png and /dev/null differ diff --git a/documentation/NDPluginDriverExample_StatsFull_3thread.png b/documentation/NDPluginDriverExample_StatsFull_3thread.png deleted file mode 100755 index 6df7be7d1..000000000 Binary files a/documentation/NDPluginDriverExample_StatsFull_3thread.png and /dev/null differ diff --git a/documentation/NDPluginDriverExample_StatsFull_5thread.png b/documentation/NDPluginDriverExample_StatsFull_5thread.png deleted file mode 100755 index 1f56ea628..000000000 Binary files a/documentation/NDPluginDriverExample_StatsFull_5thread.png and /dev/null differ diff --git a/documentation/NDPluginDriverExample_StatsFull_5thread_unsorted.png b/documentation/NDPluginDriverExample_StatsFull_5thread_unsorted.png deleted file mode 100755 index 19f885651..000000000 Binary files a/documentation/NDPluginDriverExample_StatsFull_5thread_unsorted.png and /dev/null differ diff --git a/documentation/NDPluginDriverExample_simDetector.png b/documentation/NDPluginDriverExample_simDetector.png deleted file mode 100755 index 4112a71ad..000000000 Binary files a/documentation/NDPluginDriverExample_simDetector.png and /dev/null differ diff --git a/documentation/NDPluginDriverExample_simDetectorSetup.png b/documentation/NDPluginDriverExample_simDetectorSetup.png deleted file mode 100755 index 7fe001b69..000000000 Binary files a/documentation/NDPluginDriverExample_simDetectorSetup.png and /dev/null differ diff --git a/documentation/NDPluginDriverExample_top_1thread.png b/documentation/NDPluginDriverExample_top_1thread.png deleted file mode 100755 index cc1301d75..000000000 Binary files a/documentation/NDPluginDriverExample_top_1thread.png and /dev/null differ diff --git a/documentation/NDPluginDriverExample_top_3thread.png b/documentation/NDPluginDriverExample_top_3thread.png deleted file mode 100755 index 9f0ab4ed5..000000000 Binary files a/documentation/NDPluginDriverExample_top_3thread.png and /dev/null differ diff --git a/documentation/NDPluginDriverExample_top_5thread.png b/documentation/NDPluginDriverExample_top_5thread.png deleted file mode 100755 index 834515c61..000000000 Binary files a/documentation/NDPluginDriverExample_top_5thread.png and /dev/null differ diff --git a/documentation/NDPluginFFT.html b/documentation/NDPluginFFT.html deleted file mode 100644 index ea255366f..000000000 --- a/documentation/NDPluginFFT.html +++ /dev/null @@ -1,500 +0,0 @@ - - - - areaDetector Plugin NDPluginROIStat - - - -
-

- areaDetector Plugin NDPluginFFT

-

- April 10, 2016

-

- Mark Rivers

-

- University of Chicago

-
-

- Contents

- -

- Overview -

-

- This plugin computes 1-D or 2-D Fast Fourier Transforms (FFTs). It exports 1-D or - 2-D NDArrays containing the absolute value of the FFT. It creates 1-D waveform records - of the input, and the real, imaginary, and absolute values of the first row of the - FFT. It also creates 1-D waveform records of the time and frequency axes, which - are useful for plotting if the 1-D input represents a time-series. The plugin optionally - does recursive averaging of the computed FFTs to increase the signal to noise.

-

- The FFT algorithm used requires that the input array dimensions be a power of 2. - The plugin will pad the array to the next larger power of 2 if the input array does - not meet this requirement.

-

- The ADCSimDetector application simulates an - 8-channel ADC with different waveforms. This application is useful for testing and - demonstrating the NDPluginFFT plugin with 1-D NDArray input.

-

- The simDetector application has a Sine simulation - mode that generates images based on the sums and/or products of 4 sine waves. This - can be used to generate images with well-defined frequency components in X and Y - to test and demonstrate the NDPluginFFT plugin, as shown in the images below. The - Peaks simulation mode can also be used to generate interesting frequency patterns, - as shown in the images below. This application is thus useful for testing and demonstrating - the NDPluginFFT plugin with 2-D NDArray input.

-

- For 1-D FFTs the plugin exports a 1-D array containing the frequency values for - each point. In order to construct this the plugin requires knowing the time interval - between samples (TimePerPoint). This information normally comes from a database - link to a record in the detector driver, but it can be manually specified as well. -

-

- NDPluginFFT inherits from NDPluginDriver. The - NDPluginFFT class documentation describes this class in detail.

-

- NDPluginFFT defines the following parameters. It also implements all of the standard - plugin parameters from NDPluginDriver. - The template files listed above provide access to these parameters, listed in the - following tables. -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Parameters for entire plugin. -
- Parameter Definitions in NDPluginFFT.h and EPICS Record Definitions in NDFFT.template
-
- Parameter index variable - asyn interface - Access - Description - drvInfo string - EPICS record name - EPICS record type
- FFTTimePerPoint - asynFloat64 - r/w - The time interval between samples in the waveforms from the driver. This value is - normally updated automatically using the FFTTimePerPointLink record described below. - It can also be manually changed if there is no EPICS record available to provide - this value automatically. - FFT_TIME_PER_POINT - $(P)$(R)FFTTimePerPoint
- $(P)$(R)FFTTimePerPoint_RBV
- ao
- ai
- N.A. - N.A. - r/w - This record has OMSL="closed_loop" and DOL set to an record that contains the time - between points from the driver. The link will normally have the CP attribute, so - this record processes whenever the input record changes. The OUT field of this record - is FFTTimePerPoint. - N.A. - $(P)$(R)FFTTimePerPointLink - ao
- FFTTimeAxis - asynFloat64ArrayIn - r/o - A waveform record containing the time value of each point in the TimeSeries waveforms. - FFTTimeAxis[i] = FFTTimePerPoint * i. Note that this record is useful for 1-D FFTs - where the input array is a time-series and the TimePerPoint value is correctly set. - - FFT_TIME_AXIS - $(P)$(R)FFTTimeAxis - waveform
- FFTFreqAxis - asynFloat64ArrayIn - r/o - A waveform record containing the frequency value of each point in the FFT waveform - records. FFTFreqAxis[i] = FrequencyStep * i, where FrequencyStep is controlled by - TimePerPoint and the number of time points in the input array. Note that this record - is useful for 1-D FFTs where the input array is a time-series and the TimePerPoint - value is correctly set. - FFT_FREQ_AXIS - $(P)$(R)FFTFreqAxis - waveform
- FFTDirection - asynInt32 - r/w - The FFT direction. Choices are:
- 0: Time to frequency
- 1: Frequency to time
- NOTE: This is not yet implemented because frequency to time requires complex data, - and complex data is not yet supported in areaDetector. Currently only Time to frequency - is supported, and the frequency output consists of float64 arrays containing the - real part, imaginary part, and absolute value of the FFT.
- FFT_DIRECTION - $(P)$(R)FFTDirection
- $(P)$(R)FFTDirection_RBV
- bo
- bi
- FFTSuppressDC - asynInt32 - r/w - Option to set the zero frequency (DC) value in the output arrays to 0. Choices are:
- 0: Disable
- 1: Enable
- If the signal has a large DC offset then setting the zero frequency component to - 0 in the output arrays can make plots look better. This is because the DC component - can be much larger than all other frequency components.
- FFT_SUPPRESS_DC - $(P)$(R)FFTSuppressDC
- $(P)$(R)FFTSuppressDC_RBV
- bo
- bi
- FFTNumAverage - asynInt32 - r/w - The characteristic number of FFTs in the recursive average. The equations for the - FFT averaging are:
- Out = ((1-1/NumAveraged) * Old) + (1/NumAveraged * New)
- Old = Out -
- if (NumAveraged < NumAverage) NumAveraged = NumAveraged + 1 -
-
when Old is the previous output and New is the latest FFT calculation. If - NumAverage=1 then there is no averaging.
- FFT_NUM_AVERAGE - $(P)$(R)FFTNumAverage
- $(P)$(R)FFTNumAverage_RBV
- longout
- longin
- FFTNumAveraged - asynInt32 - r/o - The number of FFTs averaged in the current output. This value increases until it - reaches the value of NumAverage. See the equations for NumAverage above. - FFT_NUM_AVERAGED - $(P)$(R)FFTNumAveraged - longin
- FFTResetAverage - asynInt32 - r/o - Setting this record to 1 resets NumAveraged to 0, so the averaging process starts - over. - FFT_RESET_AVERAGE - $(P)$(R)FFTResetAverage - bo
- N.A. - N.A. - r/w - The name for this signal. - N.A. - $(P)$(R)SignalName - stringout
- FFTTimeSeries - asynFloat64ArrayIn - r/o - The time series data array. - FFT_TIME_SERIES - $(P)$(R)TimeSeries - waveform
- FFTReal - asynFloat64ArrayIn - r/o - The real part of the FFT. -
- NOTE: this value is only available as a 1-D waveform. It is not exported as an NDArray. - For 2-D FFTs it contains only the first row of the FFT.
- FFT_FFT_REAL - $(P)$(R)FFTReal - waveform
- FFTImaginary - asynFloat64ArrayIn - r/o - The imaginary part of the FFT. -
- NOTE: this value is only available as a 1-D waveform. It is not exported as an NDArray. - For 2-D FFTs it contains only the first row of the FFT.
- FFT_FFT_IMAGINARY - $(P)$(R)FFTImaginary - waveform
- FFTAbsValue - asynFloat64ArrayIn - r/o - The absolute value of the FFT. -
- NOTE: this is exported as an NDArray, either 1-D or 2-D depending on the rank of - the input NDArray. However, for 2-D arrays the waveform record contains only the - first row of the FFT.
- FFT_ABS_VALUE - $(P)$(R)FFTAbsValue - waveform
-

- Configuration

-

- The NDPluginFFT plugin is created with the NDFFTConfigure function, either from - C/C++ or from the EPICS IOC shell.

-
NDFFTConfigure(const char *portName, int queueSize, int blockingCallbacks, 
-                      const char *NDArrayPort, int NDArrayAddr,
-                      int maxBuffers,  size_t maxMemory, int priority, int stackSize)
-  
-

- All of theses parameters are from the NDPluginDriver base class.

-

- For example: -
- NDFFTConfigure("FFT1", 20, 0, "TS1", 0, 0, 0, 0, 0) -

-

- Screen shots

-

- The following MEDM screen provides access to the parameters in NDPluginDriver.h - and NDPluginFFT.h through records in NDPluginBase.template, and NDTimeSeries.template. -

-
-

- NDPluginFFT.adl

- NDPluginFFT.png -
-

- The following MEDM screen provides access to NDPluginFFT.adl and the plot screens - show below for up to 16 signals. -

-
-

- NDFFT16.adl

- NDFFT16.png -
-

- The following MEDM screens show the time series and FFT plots for arrays in NDFFT.template - and NDPluginTimeSeriesN.template. These 1-D time-series are produced using the ADCSimDetector - driver in ADExample. -

-
-

- Time-series plot. This is the Sawtooth waveform with 10 Hz frequency. -

- NDFFTTimeSeriesPlot.png -
-
-

- Absolute value of FFT. Note that the FFT of a sawtooth has the 10 Hz fundamental - frequency plus all even and odd harmonics.

- NDFFTPlotAbsValue.png -
-
-

- Time-series plot. This is the Sawtooth waveform with 10 Hz frequency with addition - of noise. -

- NDFFTTimeSeriesPlotNoisy.png -
-
-

- Absolute value of FFT of noisy waveform above with NumAverage=1 (no averaging). - Only the first peak in the power spectrum is clearly visible.

- NDFFTTimeSeriesPlotFFTAbsValueNoisyAvg1.png -
-
-

- Absolute value of FFT of noisy waveform above with NumAverage=100. The first 7 peaks - in the power spectrum are now clearly visible.

- NDFFTTimeSeriesPlotFFTAbsValueNoisyAvg100.png -
-
-

- Combined plot with time-series, FFT absolute value, FFT real, and FFT imaginary. - This is the sin(x)*cos(x) waveform, with the sine frequency=20 Hz and the cosine - frequency=1 Hz. -

- NDFFTPlotAll.png -
-

- The following MEDM screens show the real-space images and 2-D FFT plots for arrays - in NDFFT.template and NDPluginTimeSeriesN.template. These 2-D images are produced - using the simDetector driver in ADExample using the settings show in the screen - shot below. -

-
-

- Setup screen for the simDetector driver showing the values that were used to generate - the images and FFTs shown below. -

- NDFFTSimDetectorSetup.png -
-
-

- Real space image. This is generated using the Peaks mode in the simDetector driver. -

- NDFFTPeaksImage.png -
-
-

- 2-D FFT absolute value of the above image. -

- NDFFTPeaksAbsVal.png -
-
-

- Real space image. This is generated using the Sine mode in the simDetector driver. -

- NDFFTSineImage.png -
-
-

- 2-D FFT absolute value of the above image. -

- NDFFTSineAbsVal.png -
-

- Note in the above image that the two X freqencies are 2 and 50 Hz, which are the - values in the SimDetectorSetup screen shown above, because these two sine waves - are added together. Note, however, that the two Y frequencies, 1 Hz and 20 Hz do - not appear in the FFT because these two sine waves are multiplied together. The - frequencies in the FFT are the sum and difference of sine wave frequencies, 19 and - 21 Hz.

-

- The FFT images above were captured by setting the NDStdArrays plugin to get its - data from the NDPluginFFT plugin, which is port FFT1 in the simDetector example - IOC in the ADExample module. The ImageJ viewer was then used to view the EPICS waveform - record from the NDStdArrays plugin.

- - diff --git a/documentation/NDPluginFFT.png b/documentation/NDPluginFFT.png deleted file mode 100755 index 897f5735a..000000000 Binary files a/documentation/NDPluginFFT.png and /dev/null differ diff --git a/documentation/NDPluginFile.html b/documentation/NDPluginFile.html deleted file mode 100644 index 50c0cf680..000000000 --- a/documentation/NDPluginFile.html +++ /dev/null @@ -1,331 +0,0 @@ - - - - areaDetector Plugin NDPluginFile - - - -
-

- areaDetector Plugin NDPluginFile

-

- July 3, 2017

-

- Mark Rivers

-

- University of Chicago

-
-

- Contents

- -

- Overview -

-

- NDPluginFile is a base class from which actual file plugins are derived. There are - currently file plugins for JPEG, TIFF, netCDF, Nexus, HDF5, and GraphicsMagick. - The GraphicsMagick plugin can write a large number of formats, including JPEG, TIFF, - PNG, PDF and many others. -

-

- NDPluginFile inherits from NDPluginDriver. The - NDPluginFile class documentation describes this class in detail. This class - is designed to simplify the task of supporting a new file format. A derived class - to support a new file format will typically need to implement only the pure virtual - functions openFile(), readFile(), writeFile(), and closeFile(). Note that none of - the current file plugins actually support the readFile() function yet, but this - is planned for future releases. -

-

- The NDArray callback data can be written to disk in 1 of 3 modes: -

-
    -
  1. Single mode. In this mode each NDArray callback results in a separate disk file.
  2. -
  3. Capture mode. In this mode a memory buffer is allocated before saving begins. - Callback arrays are placed into this buffer, and when capture stops the file is - written to disk. This mode limits the number of frames that can be saved, because - they all must fit in a memory buffer. It is the fastest mode, with the least probability - of dropping arrays, because no disk I/O is required while capture is in progress.
  4. -
  5. Stream mode. In this mode the data are written to a single disk file for those - file formats that support multiple arrays per file (netCDF, NeXus and HDF5). Each - frame is appended to the file without closing it. It is intermediate in speed between - single mode and capture mode, but unlike capture mode it is not limited by available - memory in the number of arrays that can be saved. For file formats that do not support - multiple arrays per file (e.g. JPEG, TIFF) this mode is really the same as Single - mode, except that one can specify a total number of files to save before stopping.
  6. -
-

- The CreateDirectory record controls whether directories are created if they don't - exist. If it is zero (default), no directories are created. If it is negative, then - the absolute value is the maximum of directories that will be created (i.e. -1 will - create a maximum of one directory to complete the path, -2 will create a maximum - of 2 directories). If it is positive, then at least that many directories in the - path must exist (i.e. a value of 1 will create all directories below the root directory - and 2 will not create a directory in the root directory). -

-

- If value of the LazyOpen record is "No" (0) then at least one array with the same - datatype, array size, and attributes must have been collected by the driver (and/or - plugins) from which the file saving plugin is getting its data before capture - or stream mode file saving is started. This is required so that the openFile() function - can know the dimensions and datatype of the arrays. If LazyOpen is "Yes" and the - mode is Stream then the file open if deferred until the first array callback after - streaming is started. This will slow down the saving of the first file. -

-

- NDPluginFile supports all of the file saving parameters defined in - asynNDArrayDriver, e.g. NDFilePath, NDFileName, etc. Thus, the same interface - that is used for saving files directly in a driver is used for this plugin. -

-

- The base class will delete the "original" file that the driver created for that - array if the following are all true:

-
    -
  1. The DeleteDriverFile record is "Yes".
  2. -
  3. The file plugin has successfully written a new file.
  4. -
  5. The array contains an attribute called "DriverFileName" that contains the full - file name of the original file. The driver attributes XML file should contain a - line like the following:
    - <Attribute name="DriverFileName" type="PARAM" source="FULL_FILE_NAME" datatype="string" - description="Driver file name"/>
    -
  6. -
-

- The file saving plugins normally determine the name of the file from the FileName - and FileNumber records. However, it is possible to have these values come instead - from attributes in the array passed to the callback. The following 3 special attributes - are used:

-
    -
  1. FilePluginFileName: This attribute contains the file name.
  2. -
  3. FilePluginFileNumber - This attribute contains the file number.
  4. -
  5. FilePluginDestination - If this attribute contains the string "all" or the name - of the asyn port for this plugin (e.g. FileTIFF1) then the plugin will write the - array to a file. If this attribute has any other value then the plugin will ignore - this array, and not write a file.
  6. -
-

- Having the file information come from the array allows the driver to control which - plugin saves a particular array. For example, there may be two file writing plugins - active; the first saves the flat field files for a tomography experiment, and the - second saves the normal projections. These plugins each stream data to a separate - file. The driver knows which files are flat fields and which are normal projections, - and adds the appropriate attributes to control which plugin saves each array. This - would not be possible using a single plugin and EPICS PVs to switch the file, because - of the problem of frames being buffered in the plugin queue.

-

- Normally files in Stream and Capture mode are automatically closed when the requested - number of frames have been collected, or when the Capture record is set back to - 0. It is also possible to use an NDArray attribute to close the file. If the NDArray - contains an attribute named FilePluginClose and the attribute value is non-zero - then the current file will be closed.

-

- Null file plugin -

-

- NDFileNull inherits from NDPluginFile. This is a dummy file writer, which does not - actually write anything. Its main purpose is to delete original driver files (DeleteDriverFile - record) without writing the data to disk. For example, if the Pilatus is being used - simply for alignment or testing one might want to display the images but then immediately - delete the files that the Pilatus had created. This plugin allows one to do this, - since it always reports success in "writing" the file, so the NDPluginFile base - class will deleted the driver file if all the conditions outlined above are met. -

-

- The NDFileNull class documentation - describes this class in detail. -

-

- The NDFileNull plugin is created with the NDFileNullConfigure command, either from - C/C++ or from the EPICS IOC shell.

-
NDFileNullConfigure (const char *portName, int queueSize, int blockingCallbacks, 
-                     const char *NDArrayPort, int NDArrayAddr, size_t maxMemory, 
-                     int priority, int stackSize)
-  
-

- Performance -

-

- Performance measurements were made on the Linux and Windows systems shown in the - following table.

- - - - - - - - - - - - - - - - - - - - - - - - -
- Model - Operating system - CPU - RAM - Disk
- Dell Precision T7500 - Windows 7 64-bit - Two quad-core Xeon X5647, 2.93 GHz (8 cores total) - 96 GB - Two 500 GB 15K RPM SAS disks RAID 0
- Penguin Relion 1751 Server - Linux, Fedora Core 14 64-bit - Two quad-core Xeon E5630, 2.53 GHz (8 cores total) - 12 GB - Three 300 GB 15K RPM SAS disks No RAID
-

- The tests were performed under the following conditions:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- File plugin - Mode - Windows (frames/s = MB/s) - Linux (frames/s = MB/s)
- JPEG - Stream - 79.1 - 68.4
- TIFF - Stream - 259.9 - 186.4
- Magick, TIFF - Stream - 55.7 - 39.0
- netCDF - Stream - 204.3 - 185.0
- netCDF - Single - 133.7 - 179.1
- Nexus - Stream - 192.3 - 193.4
- Nexus - Single - 106.3 - 145.6
- HDF5 - Stream - 1113.5 - 192.0
- HDF5 - Single - 139.7 - 108.6
- - diff --git a/documentation/NDPluginGather.html b/documentation/NDPluginGather.html deleted file mode 100644 index 05c0514e0..000000000 --- a/documentation/NDPluginGather.html +++ /dev/null @@ -1,480 +0,0 @@ - - - - areaDetector Plugin NDPluginGather - - - -
-

- areaDetector Plugin NDPluginGather

-

- March 22, 2017

-

- Mark Rivers

-

- University of Chicago

-
-

- Contents

- -

- Overview -

-

- This plugin is used to gather NDArrays from multiple upstream plugins and merge - them into a single stream. When used together with - NDPluginScatter it allows multiple intances of a plugin to process NDArrays - in parallel, utilizing multiple cores to increase throughput. -

-

- This plugin works differently from other plugins that receive callbacks from upstream - plugins. Other plugins subscribe to NDArray callbacks from a single upstream plugin - or driver. NDPluginGather allows subscribing to callbacks from any number of upstream - plugins. It combines the NDArrays it receives into a single stream which it passes - to all downstream plugins. The example commonPlugins.cmd and medm files in ADCore - allow up to 8 upstream plugins, but this number can easily be changed by editing - the startup script and operator display file.

-

- NDPluginGather inherits from NDPluginDriver. NDPluginGather does not do any modification - to the NDArrays that it receives except for possibly adding new NDAttributes if - an attribute file is specified. The - NDPluginGather class documentation describes this class in detail.

-

- NDPluginGather.h defines the following parameters. It also implements all of the - standard plugin parameters from NDPluginDriver. - It extends the standard NDPluginDriverArrayPort and NDPluginDriverArrayAddr parameters - by supporting more than one asyn address field for each, i.e. there can be multiple - NDArrayPort and NDArrayAddr records, each specifying a different upstream plugin. - There are 2 EPICS databases for the NDPluginGather plugin. NDGather.template provides - access to global parameters that are not specific to each input source. There are - currently no such global parameters, so NDGather.template does not define any new - records. NDGatherN.template provides access to the parameters for each individual - NDArray input source. 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 NDPluginGatherSortMode. -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Parameter Definitions in NDPluginDriver.h and NDPluginGather.h and EPICS Record - Definitions in NDGather.template and NDGatherN.template
- Parameter index variable - asyn interface - Access - Description - drvInfo string - EPICS record name - EPICS record type
- NDPluginDriver
- ArrayPort
- asynOctet - r/w - asyn port name for NDArray driver that will make callbacks to this plugin. This - port can be changed at run time, connecting the plugin to a different NDArray driver. - There can be more than one such input port. The maximum is number is specified in - the NDGatherConfigure command in the startup script. - NDARRAY_PORT - $(P)$(R)NDArrayPort_[N]
- (P)$(R)NDArrayPort_[N]_RBV
- stringout
- stringin
- NDPluginDriver
- ArrayAddr
- asynInt32 - r/w - asyn port address for NDArray driver that will make callbacks to this plugin. This - address can be changed at run time, connecting the plugin to a different address - in the NDArray driver. There can be more than one such input port. The maximum is - number is specified in the NDGatherConfigure command in the startup script. - NDARRAY_ADDR - $(P)$(R)NDArrayAddress_[N]
- $(P)$(R)NDArrayAddress_[N]_RBV
- longout
- longin
-

- Configuration

-

- The NDPluginGather plugin is created with the NDGatherConfigure command, either - from C/C++ or from the EPICS IOC shell.

-
-NDGatherConfigure (const char *portName, int queueSize, int blockingCallbacks, 
-                   maxPorts, size_t maxMemory, 
-                   int priority, int stackSize)
-  
-

- For details on the meaning of the parameters to this function refer to the detailed - documentation on the NDGatherConfigure function in the - NDPluginGather.cpp documentation and in the documentation for the constructor - for the NDPluginGather - class. -

-

- Screen shots

-

- The following is the MEDM screen that provides control of the NDPluginGather plugin. -

-
-

- NDGather.adl

-

- NDGather.png

-
-

- Detailed example

-

- The following is a detailed example of using the NDPluginScatter and NDPluginGather - plugins. In this example the simDetector is generating 1024x1024 Float32 images - at about 535 frames/s. The simDetector output goes to the NDPluginScatter plugin.

-

- There are 5 NDPluginStats statistics plugins that all receive NDArrays from the - NDPluginScatter plugin. Each statistics plugin can only process about 115 frames/s - before it uses 100% of the CPU time on its core. Thus in order to be able to generate - statistics on all 535 frames/s it is necessary to run 5 statistics plugins in parallel.

-

- The NDPluginGather plugin is configured to get its input arrays from the 5 statistics - plugins. It is thus receiving about 535 frames/s. For this test the NDPluginGather - plugin was run in both Sorted and Unsorted modes. The SortTime was set to 0.1 second - which was found to be long enough to ensure that all of the arrays would arrive - in time to be correctly sorted. There should be 54 frames arriving in the 0.1 second - time interval between when the NDPluginGather plugin processes. The SortSize was - set to 100 to provide a safety margin that prevented dropped output arrays.

-

- The output of the NDPluginGather plugin was sent to the NDFileNetCDF plugin which - saved images to disk. For the files tests the simDetector was set to ImageMode=Multiple - with NumImages=1000 and the NDFileNetCDF plugin was set to StreamMode with NumCapture=1000. - Two files were saved, one with NDPluginGather set to Unsorted and the other with - NDPluginGather set to Sorted. The files were read into IDL and the value of UniqueId - for each array was printed to test that the sorting worked correctly.

-

- The following show the configuration of the simDetector driver. It is generating - 1024x1024 Float32 frames at about 535 frames/s, which is over 2 GB/s. It is running - in LinearRamp mode. -

-
-

- scatterGatherExample_simDetector.png

-

- scatterGatherExample_simDetectorSetup.png

-
-

- The following shows the setup of all of the plugins. Note that the NDScatter plugin - is running at the full frame rate of about 535 frames/s, while each of the 5 statistics - plugins is running at 1/5 of this speed, about 107 frames/s.

-
-

- scatterGatherExample_commonPlugins.png

-
-

- The following shows the setup of the NDPluginScatter plugin.

-
-

- scatterGatherExample_NDScatter.png

-
-

- The following shows the setup of the first NDPluginStats plugin, performing all - statistics calculations. All statistics plugins were configured identically.

-
-

- scatterGatherExample_NDStats.png

-
-

- The following shows the setup of the NDPluginGather plugin. Note that it is getting - its input from the 5 statistics plugins and is receiving frames at about 535 frames/s.

-
-

- scatterGatherExample_NDGather.png

-
-

- The following shows the full setup of the NDPluginGather plugin. It has a SortTime - of 0.1 seconds, a SortSize of 200, and SortMode is set to Sorted.

-
-

- scatterGatherExample_NDGatherFull.png

-
-

- The following shows the output of the Linux "top" command when the IOC was running - as shown above. The top program was running with the -H option which displays the - statistics for each thread, sorted by top CPU usage. Note that each of the 5 statistics - plugins is using about 98% of a core. The simDetector, NDPluginGather, and NDPluginScatter - are each using about 55% of a core. The total CPU usage on the machine is 40%, and - this is a 20-core machine, so there about 8 cores being fully utilized.

-
-

- scatterGatherExample_top_threads.png

-
-

- The following shows the setup of the NDFileNetCDF plugin. It is getting its input - from the NDPluginGather plugin and is running in Stream mode, saving 1000 arrays. - Note that it is only able to save about 116 frames/s, while it is receiving about - 535 frames/s, so it needs a large input queue to avoid losing frames. The input - queue is currently set to 1000 frames, which is large enough to save 1000 frames - without dropping any. -

-
-

- scatterGatherExample_NDFileNetCDF.png

-
-

- The following shows the output when reading the netCDF file that was written when - NDPluginGather was set to SortMode=Unsorted.

-

- attr[0].pvalue is the value of the UniqueId attribute for all 1000 NDArrays. Note - that the arrays are not in the correct UniqueId order. -

-
-IDL> t = read_nd_netcdf('gather_test_sorted_001.nc', attr=attr)
-IDL> u=*attr[0].pvalue
-IDL> print, u
-      155438      155440      155439      155441      155442      155445      155443      155446      155447      155444
-      155450      155451      155452      155449      155448      155455      155456      155457      155454      155460
-      155461      155453      155462      155465      155459      155466      155470      155467      155458      155471
-      155464      155475      155472      155476      155469      155463      155480      155477      155481      155474
-      155485      155468      155482      155486      155490      155479      155473      155487      155495      155491
-      155484      155478      155500      155492      155489      155496      155483      155505      155497      155494
-      155488      155501      155510      155502      155499      155493      155506      155515      155507      155504
-      155498      155511      155512      155509      155520      155516      155503      155517      155514      155521
-      155508      155525      155522      155519      155526      155513      155527      155524      155530      155531
-      155518      155532      155529      155536      155535      155523      155537      155534      155541      155542
-      155540      155528      155539      155546      155547      155545      155533      155544      155551      155552
-      155550      155549      155556      155538      155555      155557      155554      155561      155560      155562
-      155543      155559      155566      155565      155567      155571      155548      155570      155572      155564
-      155576      155575      155577      155553      155581      155569      155580      155582      155558      155586
-      155585      155587      155574      155563      155591      155590      155592      155579      155596      155568
-      155595      155597      155601      155600      155602      155584      155573      155606      155607      155605
-      155611      155578      155589      155612      155610      155616      155617      155583      155594      155615
-      155621      155622      155588      155620      155626      155627      155599      155593      155625      155631
-      155632      155598      155604      155636      155630      155603      155637      155641      155635      155609
-      155608      155642      155646      155640      155647      155613      155651      155614      155645      155652
-      155618      155656      155650      155657      155623      155661      155619      155662      155655      155628
-      155666      155667      155624      155633      155660      155671      155672      155638      155665      155676
-      155629      155677      155643      155670      155681      155682      155648      155634      155686      155675
-      155687      155653      155691      155639      155680      155658      155692      155696      155663      155685
-      155697      155644      155668      155701      155702      155690      155673      155649      155706      155707
-      155695      155678      155711      155712      155654      155700      155683      155716      155717      155688
-      155705      155659      155721      155722      155693      155710      155726      155727      155698      155664
-      155715      155731      155732      155703      155720      155669      155708      155736      155737      155725
-      155713      155741      155674      155742      155718      155730      155746      155747      155723      155679
-      155735      155751      155752      155728      155756      155740      155757      155684      155733      155761
-      155762      155745      155738      155689      155766      155767      155743      155750      155694      155771
-      155772      155748      155755      155776      155699      155777      155753      155760      155781      155704
-      155782      155758      155765      155786      155787      155709      155763      155770      155791      155792
-      155714      155768      155775      155796      155797      155719      155773      155780      155801      155724
-      155802      155778      155785      155806      155729      155783      155807      155790      155811      155734
-      155788      155795      155812      155816      155739      155793      155800      155817      155744      155798
-      155821      155805      155749      155822      155803      155826      155810      155754      155827      155831
-      155808      155815      155832      155759      155836      155820      155837      155813      155825      155841
-      155764      155842      155830      155818      155846      155847      155769      155835      155851      155852
-      155774      155823      155840      155856      155857      155779      155845      155861      155828      155862
-      155784      155850      155866      155867      155833      155789      155855      155871      155872      155794
-      155860      155838      155876      155877      155799      155865      155881      155882      155804      155843
-      155870      155886      155809      155887      155875      155848      155814      155891      155892      155880
-      155819      155896      155853      155885      155897      155824      155901      155890      155902      155829
-      155858      155906      155895      155907      155834      155863      155900      155911      155912      155839
-      155905      155916      155844      155868      155917      155910      155849      155921      155922      155915
-      155873      155854      155927      155926      155920      155932      155859      155931      155878      155925
-      155937      155936      155864      155930      155942      155883      155941      155869      155935      155947
-      155946      155874      155888      155940      155952      155951      155879      155957      155945      155956
-      155893      155884      155962      155950      155961      155889      155898      155967      155955      155966
-      155894      155972      155960      155971      155899      155903      155977      155965      155976      155904
-      155982      155908      155981      155970      155909      155987      155986      155975      155914      155913
-      155992      155991      155980      155919      155997      155996      155918      155985      155924      156002
-      156001      155923      155990      155929      156007      156006      155928      155934      156012      156011
-      155995      155933      155939      156017      156016      156000      155944      155938      156022      156021
-      156005      155949      156027      155943      156026      156010      156032      155954      156031      155948
-      156015      156037      155959      156036      156020      155953      156042      155964      156041      156025
-      155958      156047      155969      156046      156030      155963      155974      156052      156051      156035
-      155968      155979      156057      156056      156040      155984      155973      156062      156061      156045
-      155989      155978      156067      156066      156050      155994      155983      156072      156071      156055
-      155999      155988      156077      156076      156060      156004      155993      156082      156081      156065
-      156009      155998      156086      156087      156070      156014      156003      156092      156091      156019
-      156075      156097      156008      156096      156024      156080      156102      156013      156029      156101
-      156085      156107      156034      156018      156106      156090      156112      156023      156111      156039
-      156095      156117      156028      156116      156044      156122      156100      156033      156121      156049
-      156127      156105      156126      156038      156132      156054      156110      156131      156137      156043
-      156115      156136      156059      156142      156120      156048      156141      156147      156064      156125
-      156146      156152      156053      156130      156151      156069      156157      156058      156135      156156
-      156162      156074      156140      156161      156167      156063      156145      156166      156079      156172
-      156068      156171      156150      156177      156084      156176      156155      156073      156182      156181
-      156089      156160      156187      156186      156078      156165      156094      156192      156191      156083
-      156170      156197      156196      156099      156175      156202      156088      156201      156104      156180
-      156207      156206      156093      156185      156109      156212      156211      156190      156098      156114
-      156217      156216      156195      156103      156222      156221      156119      156200      156227      156108
-      156226      156205      156124      156232      156231      156113      156210      156237      156236      156129
-      156215      156118      156242      156241      156220      156134      156246      156247      156123      156225
-      156251      156139      156252      156230      156128      156256      156257      156144      156261      156235
-      156133      156262      156266      156240      156149      156267      156271      156138      156245      156154
-      156272      156276      156250      156143      156277      156281      156159      156255      156148      156282
-      156286      156260      156164      156287      156291      156153      156265      156292      156296      156169
-      156270      156158      156297      156301      156275      156174      156302      156306      156163      156307
-      156280      156311      156179      156168      156312      156285      156316      156317      156184      156290
-      156321      156173      156322      156295      156189      156327      156326      156178      156300      156194
-      156332      156331      156305      156183      156337      156336      156310      156199      156188      156341
-      156342      156315      156204      156346      156193      156347      156320      156351      156352      156209
-      156325      156198      156356      156357      156330      156361      156214      156362      156203      156335
-      156366      156367      156340      156219      156208      156371      156372      156345      156224      156213
-      156377      156376      156350      156218      156382      156229      156355      156381      156223      156387
-      156234      156360      156386      156228      156392      156365      156239      156391      156233      156397
-      156370      156244      156396      156238      156402      156375      156249      156401      156243      156407
-      156380      156254      156406      156248      156412      156385      156259      156411      156253      156417
-      156390      156264      156416      156258      156422      156395      156269      156421      156263      156427
-      156400      156274      156432      156268      156426      156405      156279      156437      156273      156431
-      156410      156284      156278      156436      156415      156289      156283      156420      156294      156288
-      156425      156299      156293      156304      156430      156298      156309      156435      156303      156314
-      156308      156319      156313      156324      156318      156329      156323      156334      156328      156339
-      156333      156344      156338      156349      156343      156354      156348      156359      156353      156358
-      156364      156363      156369      156368      156374      156373      156379      156378      156384      156383
-      156389      156388      156394      156393      156398      156399      156403      156404      156408      156409
-      156413      156414      156418      156419      156423      156424      156428      156429      156433      156434
-
-

- The following shows the output when reading the netCDF file that was written when - NDPluginGather was set to SortMode=Sorted.

-

- attr[0].pvalue is the value of the UniqueId attribute for all 1000 NDArrays. Note - that the arrays are now in the correct UniqueId order. -

-
-IDL> t = read_nd_netcdf('gather_test_sorted_001.nc', attr=attr) 
-IDL> u=*attr[0].pvalue
-IDL> print, u 
-      157438      157439      157440      157441      157442      157443      157444      157445      157446      157447
-      157448      157449      157450      157451      157452      157453      157454      157455      157456      157457
-      157458      157459      157460      157461      157462      157463      157464      157465      157466      157467
-      157468      157469      157470      157471      157472      157473      157474      157475      157476      157477
-      157478      157479      157480      157481      157482      157483      157484      157485      157486      157487
-      157488      157489      157490      157491      157492      157493      157494      157495      157496      157497
-      157498      157499      157500      157501      157502      157503      157504      157505      157506      157507
-      157508      157509      157510      157511      157512      157513      157514      157515      157516      157517
-      157518      157519      157520      157521      157522      157523      157524      157525      157526      157527
-      157528      157529      157530      157531      157532      157533      157534      157535      157536      157537
-      157538      157539      157540      157541      157542      157543      157544      157545      157546      157547
-      157548      157549      157550      157551      157552      157553      157554      157555      157556      157557
-      157558      157559      157560      157561      157562      157563      157564      157565      157566      157567
-      157568      157569      157570      157571      157572      157573      157574      157575      157576      157577
-      157578      157579      157580      157581      157582      157583      157584      157585      157586      157587
-      157588      157589      157590      157591      157592      157593      157594      157595      157596      157597
-      157598      157599      157600      157601      157602      157603      157604      157605      157606      157607
-      157608      157609      157610      157611      157612      157613      157614      157615      157616      157617
-      157618      157619      157620      157621      157622      157623      157624      157625      157626      157627
-      157628      157629      157630      157631      157632      157633      157634      157635      157636      157637
-      157638      157639      157640      157641      157642      157643      157644      157645      157646      157647
-      157648      157649      157650      157651      157652      157653      157654      157655      157656      157657
-      157658      157659      157660      157661      157662      157663      157664      157665      157666      157667
-      157668      157669      157670      157671      157672      157673      157674      157675      157676      157677
-      157678      157679      157680      157681      157682      157683      157684      157685      157686      157687
-      157688      157689      157690      157691      157692      157693      157694      157695      157696      157697
-      157698      157699      157700      157701      157702      157703      157704      157705      157706      157707
-      157708      157709      157710      157711      157712      157713      157714      157715      157716      157717
-      157718      157719      157720      157721      157722      157723      157724      157725      157726      157727
-      157728      157729      157730      157731      157732      157733      157734      157735      157736      157737
-      157738      157739      157740      157741      157742      157743      157744      157745      157746      157747
-      157748      157749      157750      157751      157752      157753      157754      157755      157756      157757
-      157758      157759      157760      157761      157762      157763      157764      157765      157766      157767
-      157768      157769      157770      157771      157772      157773      157774      157775      157776      157777
-      157778      157779      157780      157781      157782      157783      157784      157785      157786      157787
-      157788      157789      157790      157791      157792      157793      157794      157795      157796      157797
-      157798      157799      157800      157801      157802      157803      157804      157805      157806      157807
-      157808      157809      157810      157811      157812      157813      157814      157815      157816      157817
-      157818      157819      157820      157821      157822      157823      157824      157825      157826      157827
-      157828      157829      157830      157831      157832      157833      157834      157835      157836      157837
-      157838      157839      157840      157841      157842      157843      157844      157845      157846      157847
-      157848      157849      157850      157851      157852      157853      157854      157855      157856      157857
-      157858      157859      157860      157861      157862      157863      157864      157865      157866      157867
-      157868      157869      157870      157871      157872      157873      157874      157875      157876      157877
-      157878      157879      157880      157881      157882      157883      157884      157885      157886      157887
-      157888      157889      157890      157891      157892      157893      157894      157895      157896      157897
-      157898      157899      157900      157901      157902      157903      157904      157905      157906      157907
-      157908      157909      157910      157911      157912      157913      157914      157915      157916      157917
-      157918      157919      157920      157921      157922      157923      157924      157925      157926      157927
-      157928      157929      157930      157931      157932      157933      157934      157935      157936      157937
-      157938      157939      157940      157941      157942      157943      157944      157945      157946      157947
-      157948      157949      157950      157951      157952      157953      157954      157955      157956      157957
-      157958      157959      157960      157961      157962      157963      157964      157965      157966      157967
-      157968      157969      157970      157971      157972      157973      157974      157975      157976      157977
-      157978      157979      157980      157981      157982      157983      157984      157985      157986      157987
-      157988      157989      157990      157991      157992      157993      157994      157995      157996      157997
-      157998      157999      158000      158001      158002      158003      158004      158005      158006      158007
-      158008      158009      158010      158011      158012      158013      158014      158015      158016      158017
-      158018      158019      158020      158021      158022      158023      158024      158025      158026      158027
-      158028      158029      158030      158031      158032      158033      158034      158035      158036      158037
-      158038      158039      158040      158041      158042      158043      158044      158045      158046      158047
-      158048      158049      158050      158051      158052      158053      158054      158055      158056      158057
-      158058      158059      158060      158061      158062      158063      158064      158065      158066      158067
-      158068      158069      158070      158071      158072      158073      158074      158075      158076      158077
-      158078      158079      158080      158081      158082      158083      158084      158085      158086      158087
-      158088      158089      158090      158091      158092      158093      158094      158095      158096      158097
-      158098      158099      158100      158101      158102      158103      158104      158105      158106      158107
-      158108      158109      158110      158111      158112      158113      158114      158115      158116      158117
-      158118      158119      158120      158121      158122      158123      158124      158125      158126      158127
-      158128      158129      158130      158131      158132      158133      158134      158135      158136      158137
-      158138      158139      158140      158141      158142      158143      158144      158145      158146      158147
-      158148      158149      158150      158151      158152      158153      158154      158155      158156      158157
-      158158      158159      158160      158161      158162      158163      158164      158165      158166      158167
-      158168      158169      158170      158171      158172      158173      158174      158175      158176      158177
-      158178      158179      158180      158181      158182      158183      158184      158185      158186      158187
-      158188      158189      158190      158191      158192      158193      158194      158195      158196      158197
-      158198      158199      158200      158201      158202      158203      158204      158205      158206      158207
-      158208      158209      158210      158211      158212      158213      158214      158215      158216      158217
-      158218      158219      158220      158221      158222      158223      158224      158225      158226      158227
-      158228      158229      158230      158231      158232      158233      158234      158235      158236      158237
-      158238      158239      158240      158241      158242      158243      158244      158245      158246      158247
-      158248      158249      158250      158251      158252      158253      158254      158255      158256      158257
-      158258      158259      158260      158261      158262      158263      158264      158265      158266      158267
-      158268      158269      158270      158271      158272      158273      158274      158275      158276      158277
-      158278      158279      158280      158281      158282      158283      158284      158285      158286      158287
-      158288      158289      158290      158291      158292      158293      158294      158295      158296      158297
-      158298      158299      158300      158301      158302      158303      158304      158305      158306      158307
-      158308      158309      158310      158311      158312      158313      158314      158315      158316      158317
-      158318      158319      158320      158321      158322      158323      158324      158325      158326      158327
-      158328      158329      158330      158331      158332      158333      158334      158335      158336      158337
-      158338      158339      158340      158341      158342      158343      158344      158345      158346      158347
-      158348      158349      158350      158351      158352      158353      158354      158355      158356      158357
-      158358      158359      158360      158361      158362      158363      158364      158365      158366      158367
-      158368      158369      158370      158371      158372      158373      158374      158375      158376      158377
-      158378      158379      158380      158381      158382      158383      158384      158385      158386      158387
-      158388      158389      158390      158391      158392      158393      158394      158395      158396      158397
-      158398      158399      158400      158401      158402      158403      158404      158405      158406      158407
-      158408      158409      158410      158411      158412      158413      158414      158415      158416      158417
-      158418      158419      158420      158421      158422      158423      158424      158425      158426      158427
-      158428      158429      158430      158431      158432      158433      158434      158435      158436      158437
-
- - diff --git a/documentation/NDPluginOverlay.html b/documentation/NDPluginOverlay.html deleted file mode 100644 index 8fc5c0c97..000000000 --- a/documentation/NDPluginOverlay.html +++ /dev/null @@ -1,693 +0,0 @@ - - - - areaDetector Plugin NDPluginOverlay - - - -
-

- areaDetector Plugin NDPluginOverlay

-

- November 25, 2016

-

- Mark Rivers

-

- University of Chicago

-
-

- Contents

- -

- Overview -

-

- NDPluginOverlay adds graphics overlays to an NDArray image. It can be used to highlight - ROIs on an image, to implement cursors, add text annotation, and other similar operations. - It supports any number of overlay objects. For each object there is control of the - location, size, line width, color, and drawing mode. The size, line width and location - can be directly controlled, or links can be used to control the position and size - from other PVs. For example, links to the PVs definining an ROI in the NDPluginROI - plugin can be used to define a rectangular overlay in thus plugin. Similarly links - to the PVs defining the X and Y centroid and sigma of an image computed in the NDPluginStats - plugin can be used to control the location and size of a crosshair overlay in this - plugin. The cursor will then follow the location of a "beam" in the image. Putting - such graphics overlays into an areaDetector plugin allows the use of simple image - display clients, which don't need to compute the graphics themselves. -

-

- Each NDPluginOverlay plugin can contain any number of overlay objects, each with - a different shape, position, color, etc. The number of overlay objects is defined - when the NDPluginOverlay is created in the startup script. Each object is referenced - by its asyn "addr" address field. -

-

- NDPluginOverlay is both a recipient of callbacks and a source of NDArray - callbacks. This means that other plugins, such as the NDPluginStdArray plugin, can - be connected to an NDPluginOverlay plugin. In that case an image display client - will receive the arrays with the graphics overlays. -

-

- NDPluginOverlay can only be used for 2-D arrays or 3-D color arrays, it is not fully - N-dimensional. -

-

- NDPluginOverlay inherits from NDPluginDriver. The - NDPluginOverlay class documentation describes this class in detail. -

-

- NDPluginOverlay.h defines the following parameters. It also implements all of the - standard plugin parameters from NDPluginDriver. - There are 2 EPICS databases for the NDPluginOverlay plugin. NDOverlay.template provides - access to global parameters that are not specific to each overlay object. There - are currently no records in this database, because it currently needs nothing beyond - what is contained in NDPluginBase.template, but there may be records added to this - in the future. NDOverlayN.template provides access to the parameters for each individual - overlay object, described 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 NDPluginOverlayName. -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Parameter Definitions in NDPluginOverlay.h and EPICS Record Definitions in NDOverlayN.template -
- Parameter index variable - asyn interface - Access - Description - drvInfo string - EPICS record name - EPICS record type
- NDPluginOverlay
- Name
- asynOctet - r/w - Name for this overlay. - NAME - $(P)$(R)Name
- $(P)$(R)Name_RBV
- stringout
- stringin
- NDPluginOverlay
- Use
- asynInt32 - r/w - Flag indicating whether to use (enable) this overlay. 0=No, 1=Yes. - USE - $(P)$(R)Use
- $(P)$(R)Use_RBV
- bo
- bi
- NDPluginOverlay
- OverlayPositionX
- asynInt32 - r/w - The X position of this overlay. This is the left edge of the overlay. This will - automatically update if CenterX is changed. - OVERLAY_POSITION_X - $(P)$(R)PositionX
- $(P)$(R)PositionX_RBV
- longout
- longin
- N.A. - N.A. - r/w - Link to fetch the desired X position of this overlay. The .DOL field of this record - can be set to another record which will then change PositionX whenever the other - record updates. The link must have the "CP" attribute, so that this record - processes whenever the record it is linked to changes. For example, the link could - be set to "13PS1:Stats1:CentroidX_RBV CP NMS" to fetch its position from the X centroid - calculated by an NDPluginStats plugin, or to "13PS1:ROI1:MinX_RBV CP MS" to fetch - its position from the X position of an ROI. If this link field is blank or points - to a non-existent record then the X position of the overlay can be manually controlled. - Note that this linking is done entirely in the EPICS database, and not in the plugin - code. - N.A. - $(P)$(R)PositionXLink - longout
- NDPluginOverlay
- OverlayPositionY
- asynInt32 - r/w - The Y position of this overlay. This is the top edge of the overlay. This will automatically - update if CenterY is changed. - OVERLAY_POSITION_Y - $(P)$(R)PositionY
- $(P)$(R)PositionY_RBV
- longout
- longin
- N.A. - N.A. - r/w - Link to fetch the desired Y position of this overlay. See the notes for PositionXLink - above. - N.A. - $(P)$(R)PositionYLink - longout
- NDPluginOverlay
- OverlayCenterX
- asynInt32 - r/w - The X position of the center of this overlay. Sometimes it is more convenient to - specify the center of the overlay rather than the left edge. This will automatically - update if CenterX or SizeX is changed. - OVERLAY_CENTER_X - $(P)$(R)CenterX
- $(P)$(R)CenterX_RBV
- longout
- longin
- N.A. - N.A. - r/w - Link to fetch the desired X center of this overlay. See the notes for PositionXLink - above. - N.A. - $(P)$(R)CenterXLink - longout
- NDPluginOverlay
- OverlayCenterY
- asynInt32 - r/w - The Y position of the center of this overlay. Sometimes it is more convenient to - specify the center of the overlay rather than the top edge. This will automatically - update if CenterY or SizeY is changed. - OVERLAY_CENTER_Y - $(P)$(R)CenterY
- $(P)$(R)CenterY_RBV
- longout
- longin
- N.A. - N.A. - r/w - Link to fetch the desired Y center of this overlay. See the notes for PositionXLink - above. - N.A. - $(P)$(R)CenterYLink - longout
- NDPluginOverlay
- OverlaySizeX
- asynInt32 - r/w - The X size of this overlay. This does not apply to Text overlay shapes. - OVERLAY_SIZE_X - $(P)$(R)SizeX
- $(P)$(R)SizeX_RBV
- longout
- longin
- N.A. - N.A. - r/w - Link to fetch the desired X size of this overlay. See the notes for PositionXLink - above. - N.A. - $(P)$(R)SizeXLink - longout
- NDPluginOverlay
- OverlaySizeY
- asynInt32 - r/w - The Y size of this overlay. This does not apply to Text overlay shapes. - OVERLAY_SIZE_Y - $(P)$(R)SizeY
- $(P)$(R)SizeY_RBV
- longout
- longin
- N.A. - N.A. - r/w - Link to fetch the desired Y size of this overlay. See the notes for PositionXLink - above. - N.A. - $(P)$(R)SizeYLink - longout
- NDPluginOverlay
- OverlayWidthX
- asynInt32 - r/w - The X line width of this overlay. For the cross overlay this will increase the width - of the line on both sides at the same time, to maintain the central point of the - cross. For the rectangle and ellipse overlays the line thickness will grow inwards - to the center. For cross overlay shapes the widths >1 are restricted to even - numbers; odd widths >1 are decreased by 1. - OVERLAY_WIDTH_X - $(P)$(R)WidthX
- $(P)$(R)WidthX_RBV
- longout
- longin
- N.A. - N.A. - r/w - Link to fetch the desired X line width of this overlay. See the notes for PositionXLink - above. - N.A. - $(P)$(R)WidthXLink - longout
- NDPluginOverlay
- OverlayWidthY
- asynInt32 - r/w - The Y line width of this overlay. This behaves in the same way as the OverlayWidthX. - - OVERLAY_WIDTH_Y - $(P)$(R)WidthY
- $(P)$(R)WidthY_RBV
- longout
- longin
- N.A. - N.A. - r/w - Link to fetch the desired Y line width of this overlay. See the notes for PositionXLink - above. - N.A. - $(P)$(R)WidthYLink - longout
- NDPluginOverlay
- Shape
- asynInt32 - r/w - The shape of this overlay. Choices are: -
    -
  • 0="Cross"
  • -
  • 1="Rectangle"
  • -
  • 2="Text"
  • -
  • 3="Ellipse"
  • -
- Other shapes may be added in the future.
- OVERLAY_SHAPE - $(P)$(R)Shape
- $(P)$(R)Shape_RBV
- mbbo
- mbbi
- NDPluginOverlay
- DrawMode
- asynInt32 - r/w - The operation to use when drawing this overlay. Choices are: -
    -
  • 0="Set"
  • -
  • 1="XOR"
  • -
- In Set mode the Red, Green, and Blue values (Green for mono images) are written - directly into the pixel values. In XOR mode the value in the pixel is XOR'ed with - the Red, Green, and Blue values. XOR operation typically results in an overlay that - has better visibility no matter what the values of the surrounding pixels, while - Set mode with Green=255, for example, will show up well on dark areas of the image, - but will be hard to see in bright areas of the image. Note that XOR is not supported - for NDFloat32 or NDFloat64 data types directly, but they are cast to int if XOR - is selected for arrays with those data types.
- OVERLAY_DRAW_MODE - $(P)$(R)DrawMode
- $(P)$(R)DrawMode_RBV
- mbbo
- mbbi
- NDPluginOverlay
- Red
- asynInt32 - r/w - The red value to use when drawing the overlay. This is only used for color images. - - OVERLAY_RED - $(P)$(R)Red
- $(P)$(R)Red_RBV
- longout
- longin
- NDPluginOverlay
- Green
- asynInt32 - r/w - The green value to use when drawing the overlay. This is the value that is used - for monochrome images as well. - OVERLAY_GREEN - $(P)$(R)Green
- $(P)$(R)Green_RBV
- longout
- longin
- NDPluginOverlay
- Blue
- asynInt32 - r/w - The blue value to use when drawing the overlay. This is only used for color images. - - OVERLAY_BLUE - $(P)$(R)Blue
- $(P)$(R)Blue_RBV
- longout
- longin
- NDPluginOverlay
- DisplayText
- asynOctet - r/w - The text string to write for this overlay if Shape="Text". - OVERLAY_DISPLAY_TEXT - $(P)$(R)DisplayText
- $(P)$(R)DisplayText_RBV
- waveform
- waveform
- NDPluginOverlay
- TimeStampFormat
- asynOctet - r/w - The format string to use when outputting the EPICS time stamp (epicsTS) field of - the NDArray in the text overlay. Default="%Y-%m-%d %H:%M:%S.%03f". Any of the components - of the format can be omitted to suppress the display of that field. - OVERLAY_TIMESTAMP_FORMAT - $(P)$(R)TimeStampFormat
- $(P)$(R)TimeStampFormat_RBV
- stringout
- stringin
- NDPluginOverlay
- Font
- asynInt32 - r/w - The font to use for the text display. Choices are: -
    -
  • 0="6x13"
  • -
  • 1="6x13 Bold"
  • -
  • 2="9x15"
  • -
  • 3="9x15 Bold"
  • -
-
- OVERLAY_FONT - $(P)$(R)Font
- $(P)$(R)Font_RBV
- mbbo
- mbbi
-

- Display limits for Position and Size fields

-

- It is very convenient to have slider widgets to control the size and position of - user-defined overlays. For these to work correctly, the HOPR fields of the X and - Y position and size widgets must be set to the maximum allowed values. This is handled - in the NDOverlay.template database, where the HOPR fields are automatically set - to the actual size of the input array whenever that changes. Note that if HOPR changes, - then with medm it is necessary to close and reopen the display with the sliders, - because medm only retrieves the value the display limits when it first connects - to a channel. -

-

- Configuration

-

- The NDPluginOverlay plugin is created with the NDOverlayConfigure command, either - from C/C++ or from the EPICS IOC shell.

-
-NDOverlayConfigure(const char *portName, int queueSize, int blockingCallbacks,
-                   const char *NDArrayPort, int NDArrayAddr, int maxOverlays,
-                   int maxBuffers, size_t maxMemory,
-                   int priority, int stackSize)
-  
-

- For details on the meaning of the parameters to this function refer to the detailed - documentation on the NDOverlayConfigure function in the - NDPluginOverlay.cpp documentation and in the documentation for the constructor - for the NDPluginOverlay - class. -

-

- Screen shots

-

- The following is the MEDM screen that provides access to the parameters in NDPluginDriver.h - and NDPluginOverlay.h through records in NDPluginBase.template and NDOverlay.template. - This screen does not provide anything beyond the PVs in NDPluginBase.template except - for the menus to call up the related displays. -

-
-

- NDOverlay.adl

- NDOverlay.png -
-

- The following is the MEDM screen that provides access to the parameters in NDPluginOverlay.h - through records in NDOverlayN.template. This allows control of the parameters of - a single overlay object. -

-
- NDOverlayN.png -
-

- The following is the MEDM screen that provides control of most the parameters of - 8 overlay objects, and a link to the screen above for each one. -

-
- NDOverlay8.png -
-

- Image display from ImageJ where the cursor is set to track the centroid of a laser - pointer via its X and Y center input links from the NDPluginStats plugin.

-
- NDOverlay_image.jpg -
- - diff --git a/documentation/NDPluginProcess.html b/documentation/NDPluginProcess.html deleted file mode 100644 index d745bdb81..000000000 --- a/documentation/NDPluginProcess.html +++ /dev/null @@ -1,1443 +0,0 @@ - - - - areaDetector Plugin NDPluginProcess - - - -
-

- areaDetector Plugin NDPluginProcess

-

- April 16, 2018

-

- Mark Rivers

-

- University of Chicago

-
-

- Contents

- -

- Overview -

-

- NDPluginProcess performs arithmetic processing on NDArray data. It performs the - following operations in the order listed. Each of these operations can be individually - enabled and disabled. -

-
    -
  1. Subtracts a background array which has been previously acquired.
  2. -
  3. Divides by a flat field array which has been previously acquired, and then multiplies - by a flat field scale factor.
  4. -
  5. Multiplies by a scale factor and adds an offset.
  6. -
  7. Clips to a maximum specified value.
  8. -
  9. Clips to a minimum specified value.
  10. -
  11. Applies a recursive digital filter.
  12. -
  13. Converts to the specified output data type.
  14. -
  15. Exports the processed data as a new NDArray object.
  16. -
-

- If any of the above operations is enabled, then the array is first converted to - NDFloat64 data type, i.e. double-precision float. The operations are all performed - in double-precision, and then the array is converted to the specified output data - type. -

-

- NDPluginProcess is both a recipient of callbacks and a source of NDArray - callbacks. This means that other plugins, such the NDPluginStdArrays, NDPluginStats, - and NDPluginFile plugins can be connected to an NDPluginProcess plugin, in which - case they will use the processed data. -

-

- NDPluginProcess is fully N-dimensional. It can be used for 2-D images, 3-D (color) - images, or any type of N-dimensional data. -

-

- NDPluginProcess inherits from NDPluginDriver. The - NDPluginProcess class documentation describes this class in detail. -

-

- NDPluginProcess.h defines the following parameters. It also implements all of the - standard plugin parameters from NDPluginDriver. - The EPICS database NDProcess.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 NDPluginProcessSaveBackground. -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Parameter Definitions in NDPluginProcess.h and EPICS Record Definitions in NDProcess.template -
- Parameter index variable - - asyn interface - - Access - - Description - - drvInfo string - - EPICS record name - - EPICS record type -
- Background subtraction -
- NDPluginProcess
- SaveBackground -
- asynInt32 - - r/w - - Command to use the most recently acquired array as a background. Note that this - recently acquired array should have been acquired with EnableBackground=0, or else - that array will already have had the background subtracted, which is probably not - what was intended! - - SAVE_BACKGROUND - - $(P)$(R)SaveBackground
- $(P)$(R)SaveBackground_RBV -
- bo
- bi -
- NDPluginProcess
- ValidBackground -
- asynInt32 - - r/o - - Flag indicating whether there is a valid background array that has been acquired - for this array using SaveBackground. This flag will be Invalid (0) if no background - has been acquired, or if the size of the array has changed since the background - was last acquired. - - VALID_BACKGROUND - - $(P)$(R)ValidBackground_RBV - - bi -
- NDPluginProcess
- EnableBackground -
- asynInt32 - - r/w - - Flag indicating whether the background array acquired with SaveBackground should - be subtracted when processing the array. If ValidBackground=0 then no background - subtraction is done even if EnableBackground=Enable. - - ENABLE_BACKGROUND - - $(P)$(R)EnableBackground
- $(P)$(R)EnableBackground_RBV -
- bo
- bi -
- N.A. - - N.A. - - r/w - - This is a convenience sseq record to simplify reading the background array from - a TIFF file. Prior to processing this record the $(P)$(R)TIFF: plugin records must - be correctly configured to read the desired background TIFF file. Processing this - record does the following steps. -
    -
  1. Saves the current value of $(P)$(R)NDArrayPort in a temporary location.
  2. -
  3. Sets the NDArrayPort to $(P)$(R)TIFF:PortName_RBV, i.e. the TIFF plugin associated - with this plugin.
  4. -
  5. Enables ArrayCallbacks for the TIFF plugin in case they were not enabled.
  6. -
  7. Writes 1 to $(R)$(P)TIFF:ReadFile. This causes the TIFF plugin to read the selected - file, do callbacks to the Process plugin.
  8. -
  9. Writes 1 to $(P$(R)SaveBackground, saving the array read from the TIFF plugin - as the new background.
  10. -
  11. Restores $(P)$(R)NDArrayPort from the temporary location
  12. -
-
- N.A. - - $(P)$(R)ReadBackgroundTIFFSeq - - sseq -
- Flat field normalization -
- NDPluginProcess
- SaveFlatField -
- asynInt32 - - r/w - - Command to use the most recently acquired array as a flat field. Note that this - recently acquired array should have been acquired with EnableFlatField=0, or else - that array will already have been flat field normalized, which is probably not what - was intended! - - SAVE_FLAT_FIELD - - $(P)$(R)SaveFlatField
- $(P)$(R)SaveFlatField_RBV -
- bo
- bi -
- NDPluginProcess
- ValidFlatField -
- asynInt32 - - r/o - - Flag indicating whether there is a valid flat field array that has been acquired - for this array using SaveFlatField. This flag will be Invalid (0) if no flat field - has been acquired, or if the size of the array has changed since the flat field - was last acquired. - - VALID_FLAT_FIELD - - $(P)$(R)ValidFlatField_RBV - - bi -
- NDPluginProcess
- EnableFlatField -
- asynInt32 - - r/w - - Flag indicating whether the array should be divided by the flat field array (acquired - with SaveFlatField) when processing the array. If ValidFlatField=0 then no flat - field normalization is done even if EnableBackground=Enable. The processing step - consists of: -
- Array = Array / FlatField * ScaleFlatField -
- ENABLE_FLAT_FIELD - - $(P)$(R)EnableFlatField
- $(P)$(R)EnableFlatField_RBV -
- bo
- bi -
- NDPluginProcess
- ScaleFlatField -
- asynFloat64 - - r/w - - The scale factor to multiply by after dividing the array by the flat field array. - This scale factor is normally chosen so that the data after scaling fills the dynamic - range of the output data type. - - SCALE_FLAT_FIELD - - $(P)$(R)ScaleFlatField
- $(P)$(R)ScaleFlatField_RBV -
- ao
- ai -
- N.A. - - N.A. - - r/w - - This is a convenience sseq record to simplify reading the flatfield array from a - TIFF file. Prior to processing this record the $(P)$(R)TIFF: plugin records must - be correctly configured to read the desired flatfield TIFF file. Processing this - record does the following steps. -
    -
  1. Saves the current value of $(P)$(R)NDArrayPort in a temporary location.
  2. -
  3. Sets the NDArrayPort to $(P)$(R)TIFF:PortName_RBV, i.e. the TIFF plugin associated - with this plugin.
  4. -
  5. Enables ArrayCallbacks for the TIFF plugin in case they were not enabled.
  6. -
  7. Writes 1 to $(R)$(P)TIFF:ReadFile. This causes the TIFF plugin to read the selected - file, do callbacks to the Process plugin.
  8. -
  9. Writes 1 to $(P$(R)SaveFlatFeild, saving the array read from the TIFF plugin as - the new flatfield.
  10. -
  11. Restores $(P)$(R)NDArrayPort from the temporary location
  12. -
-
- N.A. - - $(P)$(R)ReadFlatFieldTIFFSeq - - sseq -
- Scaling and offset -
- NDPluginProcess
- EnableOffsetScale -
- asynInt32 - - r/w - - Flag indicating whether the array should be multiplied by Scale and then summed - with Offset when processing the array. The processing step consists of: -
- Array = Array * Scale + Offset -
- ENABLE_OFFSET_SCALE - - $(P)$(R)EnableOffsetScale
- $(P)$(R)EnableOffsetScale_RBV -
- bo
- bi -
- NDPluginProcess
- AutoOffsetScale -
- asynInt32 - - r/w - - Processing this record will enable Offset and Scale calculations, and set the Offset=-min(Array) - and Scale=MaxScale/(max(Array)-min(Array)), where MaxScale is the maximum value - of the output data type. The output array will thus be scaled to completely fill - the range of the output data type. Note that the calculation of the offset and scale - factors is only done once when this record is processed, and these values are used - for subsequent array callbacks, i.e. it does not autoscale on each array callback. - Thanks to Tom Cobb for this addition. - - AUTO_OFFSET_SCALE - - $(P)$(R)AutoOffsetScale - - busy -
- NDPluginProcess
- Scale -
- asynFloat64 - - r/w - - The scale factor to multiply by. - - SCALE - - $(P)$(R)Scale
- $(P)$(R)Scale_RBV -
- ao
- ai -
- NDPluginProcess
- Offset -
- asynFloat64 - - r/w - - The offset to add. - - OFFSET - - $(P)$(R)Offset
- $(P)$(R)Offset_RBV -
- ao
- ai -
- Low and high clipping -
- NDPluginProcess
- EnableLowClip -
- asynInt32 - - r/w - - Flag to control whether to clip values to the LowClip value for this array (0=Disable, - 1=Enable). - - ENABLE_LOW_CLIP - - $(P)$(R)EnableLowClip
- $(P)$(R)EnableLowClip_RBV -
- bo
- bi -
- NDPluginProcess
- LowClip -
- asynFloat64 - - r/w - - The minimum allowed value for this array. If EnableLowClip=1, then all values in - the array less than LowClip will be replaced by LowClip. - - LOW_CLIP - - $(P)$(R)LowClip
- $(P)$(R)LowClip_RBV -
- ao
- ai -
- NDPluginProcess
- EnableHighClip -
- asynInt32 - - r/w - - Flag to control whether to clip values to the HighClip value for this array (0=Disable, - 1=Enable). - - ENABLE_HIGH_CLIP - - $(P)$(R)EnableHighClip
- $(P)$(R)EnableHighClip_RBV -
- bo
- bi -
- NDPluginProcess
- HighClip -
- asynFloat64 - - r/w - - The maximum allowed value for this array. If EnableHighClip=1, then all values in - the array greater than HighClip will be replaced by HighClip. - - HIGH_CLIP - - $(P)$(R)HighClip
- $(P)$(R)HighClip_RBV -
- ao
- ai -
- NDPluginProcess
- DataType -
- asynInt32 - - r/w - - Data type of the output array (NDDataType_t). This can be different from the data - type of the NDArray callback data. - - PROCESS_DATA_TYPE - - $(P)$(R)DataTypeOut
- $(P)$(R)DataTypeOut_RBV -
- mbbo
- mbbi -
- Recursive filter -
- NDPluginProcess
- EnableFilter -
- asynInt32 - - r/w - - Flag indicating whether the array should be processed with a recursive filter. The - details of the filter operation are explained below.
-
- ENABLE_FILTER - - $(P)$(R)EnableFilter
- $(P)$(R)EnableFilter_RBV -
- bo
- bi -
- NDPluginProcess
- ResetFilter -
- asynInt32 - - r/w - - Command to reset the filter back to its initial state. - - RESET_FILTER - - $(P)$(R)ResetFilter
- $(P)$(R)ResetFilter_RBV -
- bo
- bi -
- NDPluginProcess
- AutoResetFilter -
- asynInt32 - - r/w - - If enabled then when NumFiltered=NumFilter the filter automatically resets. This - can be very useful when using the Average or Sum filter modes. As soon as N sums - or averages have been performed the filter resets, so the next sum or average is - computed. - - AUTO_RESET_FILTER - - $(P)$(R)AutoResetFilter
- $(P)$(R)AutoResetFilter_RBV -
- bo
- bi -
- NDPluginProcess
- FilterCallbacks -
- asynInt32 - - r/w - - Choices are "Every array" and "Array N only". If "Every array" is selected then - the plugin does callbacks for every incoming array it receives. If "Array N only" - is selected then the plugin only does callbacks when NumFiltered=NumFilter. This - can be very useful when using the Sum or Average filter modes. Callbacks are then - done only when N sums or averages have been performed. If used with AutoResetFilter - then as input arrays arrive the plugin will continually output one summed or averaged - array after every N incoming arrays. - - FILTER_CALLBACKS - - $(P)$(R)FilterCallbacks
- $(P)$(R)FilterCallbacks_RBV -
- bo
- bi -
- NDPluginProcess
- NumFilter -
- asynInt32 - - r/w - - The characteristic number of arrays to use when filtering. The value of NumFiltered - will increase as each array is processed, until it reaches the value of NumFilter, - when it will no longer increase. The value of NumFiltered is used in the filter - equations, as explained below. - - NUM_FILTER - - $(P)$(R)NumFilter
- $(P)$(R)NumFilter_RBV -
- longout
- longin -
- NDPluginProcess
- NumFiltered -
- asynInt32 - - r/o - - The number of arrays that have been processed by the filter since the filter was - last reset. The value of NumFiltered is incremented as each array is processed, - until it reaches the value of NumFilter, when it will cease incrementing. The value - of NumFiltered is used in the filter equations, as explained below. - - NUM_FILTERED - - $(P)$(R)NumFiltered_RBV - - longin -
- N.A. - - N.A. - - r/w - - The filter type, chosen from a predefined list, as described below. - - N.A. - - $(P)$(R)FilterType - - mbbo -
- NDPluginProcess
- OOffset -
- asynFloat64 - - r/w - - Output offset coefficient. - - FILTER_OOFFSET - - $(P)$(R)OOffset
- $(P)$(R)OOffset_RBV -
- ao
- ai -
- NDPluginProcess
- OScale -
- asynFloat64 - - r/w - - Output scale coefficient. - - FILTER_OSCALE - - $(P)$(R)OScale
- $(P)$(R)OScale_RBV -
- ao
- ai -
- NDPluginProcess
- OC1 -
- asynFloat64 - - r/w - - Output coefficient #1. - - FILTER_OC1 - - $(P)$(R)OC1
- $(P)$(R)OC1_RBV -
- ao
- ai -
- NDPluginProcess
- OC2 -
- asynFloat64 - - r/w - - Output coefficient #2. - - FILTER_OC2 - - $(P)$(R)OC2
- $(P)$(R)OC2_RBV -
- ao
- ai -
- NDPluginProcess
- OC3 -
- asynFloat64 - - r/w - - Output coefficient #3. - - FILTER_OC3 - - $(P)$(R)OC3
- $(P)$(R)OC3_RBV -
- ao
- ai -
- NDPluginProcess
- OC4 -
- asynFloat64 - - r/w - - Output coefficient #4. - - FILTER_OC4 - - $(P)$(R)OC4
- $(P)$(R)OC4_RBV -
- ao
- ai -
- NDPluginProcess
- FOffset -
- asynFloat64 - - r/w - - Filter offset coefficient. - - FILTER_FOFFSET - - $(P)$(R)FOffset
- $(P)$(R)FOffset_RBV -
- ao
- ai -
- NDPluginProcess
- FScale -
- asynFloat64 - - r/w - - Filter scale coefficient. - - FILTER_FSCALE - - $(P)$(R)FScale
- $(P)$(R)FScale_RBV -
- ao
- ai -
- NDPluginProcess
- FC1 -
- asynFloat64 - - r/w - - Filter coefficient #1. - - FILTER_FC1 - - $(P)$(R)FC1
- $(P)$(R)FC1_RBV -
- ao
- ai -
- NDPluginProcess
- FC2 -
- asynFloat64 - - r/w - - Filter coefficient #2. - - FILTER_FC2 - - $(P)$(R)FC2
- $(P)$(R)FC2_RBV -
- ao
- ai -
- NDPluginProcess
- FC3 -
- asynFloat64 - - r/w - - Filter coefficient #3. - - FILTER_FC3 - - $(P)$(R)FC3
- $(P)$(R)FC3_RBV -
- ao
- ai -
- NDPluginProcess
- FC4 -
- asynFloat64 - - r/w - - Filter coefficient #4. - - FILTER_FC4 - - $(P)$(R)FC4
- $(P)$(R)FC4_RBV -
- ao
- ai -
- NDPluginProcess
- ROffset -
- asynFloat64 - - r/w - - Reset offset coefficient. - - FILTER_ROFFSET - - $(P)$(R)ROffset
- $(P)$(R)ROffset_RBV -
- ao
- ai -
- NDPluginProcess
- RC1 -
- asynFloat64 - - r/w - - Filter coefficient #1. - - FILTER_RC1 - - $(P)$(R)RC1
- $(P)$(R)RC1_RBV -
- ao
- ai -
- NDPluginProcess
- RC2 -
- asynFloat64 - - r/w - - Filter coefficient #2. - - FILTER_RC2 - - $(P)$(R)RC2
- $(P)$(R)RC2_RBV -
- ao
- ai -
-

- Recursive filter implementation

-

- The recursive filter performs filtering in the time (not spatial) domain. It is - implemented in a fairly general manner, so that a variety of filters can be implemented. - These include integrating filters and differentiating filter types. The recursive - filter stores one "filter" array internally. Using this internal filter array, and - a new input array, it computes an output array, and a new version of the filter - array. The equations governing the output array and new filter array are: -

-
-O[n] = OOffset + OScale*((OC1 + OC2/N)*F[n-1] +
-                         (OC3 + OC4/N)*I[n])
-F[n] = FOffset + FScale*((FC1 + FC2/N)*F[n-1] +
-                         (FC3 + FC4/N)*I[n])
-On filter reset
-F[0] = ROffset + RC1*F[0] + RC2*I[0] 
-  
-where
-  I[n] = New input array from callback
-  I[0] = First input array after a filter reset
-F[n-1] = Stored filter array
-  F[n] = New filter array
-  F[0] = Current filter array when filter is reset.  
-         May be a copy of I[0] if there was no valid filter array.
-     N = Current value of NumFiltered
-  O[n] = Output array passed to clients
-
-

- Predefined filters

-

- The NDProcess.template database implements the following predefined filters using - the $(P)$(R)FilterType record. The implementation of these predefined filter types - is done entirely in the database, not in the plugin code. The database simply downloads - values of OC1-OC4, FC1-FC4, and RC1-RC2 that result in predefined filter behaviours. - The operation of the recursive filter is by no means limited to these fixed filter - types, they are simply provided as a convenience, and can be easily modified or - extended. Note that the database does not download values of OOffset, OScale, FOffset, - FScale, or ROffset, so these remain unchanged when a new filter is selected. The - equations below do not include these offset and scale values, but they are useful - in many circumstances.

-

- The NDProcess_settings.req file for save/restore saves the values of all of the - filter coefficients, and downloads them when EPICS initialized at iocInit. It also - saves the FilterType, but does not process this record at iocInit, so that any customized - filter coefficients will be preserved, and will not be replaced by the defaults - for that filter type. -

-

- Recursive Average

-

- The recursive average filter does input array averaging. It is defined as:

-
-O[n] = F[n] = (1-1/N)*F[n-1] + 1/N*I[n]
-
-

- N is the characteristic number of arrays in the average. For example, if N=100, - then each new array is weighted by 0.01 and the previous filter value is weighted - by 0.99. This is an infinite impulse response (IIR) filter, because the effect of - one array never complelely dissappears, but rather decays exponentially. When this - filter is reset the filter array is initialized with the first input array. This - filter can be used to decrease the noise and increase the dynamic range of a repetitive - input signal with a small signal. In that case it can be useful to use set EnableOffsetScale=Enable - and set Scale to a large enough number to more fully use the dynamic range of the - output data type. The averaged signal will then better use the dynamic range of - the output data type. -

-

- Average

-

- The average filter does input array averaging. It is defined as:

-
-O[n] = F[n] = F[n-1] + 1/N*I[n]
-
-

- N is the number of arrays in the average. For example, if N=100, then each new array - is weighted by 0.01. When this filter is reset the filter array is initialized to - 0. This filter typically cannot be run forever, because the output grows monotonically - and will lead to overflow. However, if AutoResetFilter is enabled then the filter - will be reset when NumFiltered=NumFilter. If ArrayCallbacks is "Array N only" then - callbacks will be done only with the final averaged value. -

-

- Sum

-

- The sum filter does input array summing. It is defined as:

-
-O[n] = F[n] = F[n-1] + I[n]
-
-

- This filter simply computes the sum of input arrays. When this filter is reset the - filter array is initialized to 0. It is often necessary to set the output data type - to one with a larger maximum value than the input array to prevent overflow. If - AutoResetFilter is enabled then the filter will be reset when NumFiltered=NumFilter. - If ArrayCallbacks is "Array N only" then callbacks will be done only with the final - summed value. -

-

- Difference

-

- The difference filter computes the difference between frame N and frame N-1. It - is defined as:

-
-O[n] = -F[n-1] + I[n]
-F[n] = I[n]
-
-

- Note that the difference will often be a small signed number. If the output datatype - is unsigned, or if a display client expects unsigned numbers, then it can be useful - to set OOffset to a non-zero value to add an offset to the result. For example, - if the output data type is UInt8 (unsigned 8-bit), then setting OOffset to 128 will - produce an unsigned image centered at 128. Similarly OScale can be used to increase - the range of the difference by multiplying by a factor greater than 1, although - this will not increase the dynamic range of the result, only the absolute range. -

-

- Recursive Average Difference

-

- This filter computes the difference between frame N and the recursive average of - previous frames. It is a combination of the Difference and Recursive Average filters - described above. The new filter is a recursive average, but the output is the difference - between the current frame and that recursive average. It is defined as:

-
-O[n] = -F[n-1] + I[n]
-F[n] = (1-1/N)*F[n-1] + 1/N*I[n]
-
-

- N is again the characteristic number of arrays in the average. -

-

- Copy to Filter

-

- This filter simply copies the input array to the filter array and the output array. - It is defined as:

-
-O[n] = F[n] = I[n]
-
-

- This filter can be used to load the filter (F) with a certain array, which is then - subsequently used for some other filter type.

-

- Configuration

-

- The NDPluginProcess plugin is created with the NDProcessConfigure command, either - from C/C++ or from the EPICS IOC shell.

-
-NDProcessConfigure(const char *portName, int queueSize, int blockingCallbacks,
-                   const char *NDArrayPort, int NDArrayAddr,
-                   int maxBuffers, size_t maxMemory,
-                   int priority, int stackSize)
-  
-

- For details on the meaning of the parameters to this function refer to the detailed - documentation on the NDProcessConfigure function in the - NDPluginProcess.cpp documentation and in the documentation for the constructor - for the NDPluginProcess - class. -

-

- Screen shots

-

- The following is the MEDM screen that provides access to the parameters in NDPluginDriver.h - and NDPluginProcess.h through records in NDPluginBase.template and NDProcess.template. - In this example the input image is first offset by -4 and scaled by 35. That result - is then clipped to a minimum of 0 and a maximum of 255. The image is then run through - a recursive averaging filter with N=100. -

-
-

- NDProcess.adl

- NDProcess.png -
-

- The following is the MEDM screen for reading a background image or flatfield image - from a TIFF file. It is a stripped-down version of the normal TIFF plugin screen, - and allows specifying the path and filename components to construct the full filename. -

-
-

- NDProcessTIFF.adl

- NDProcessTIFF.png -
-

- Image collected with 30 microsecond exposure time, so it is very noisy. This is - the image output from the NDPlugProcess plugin with Offset and Scale as shown above, - but with the recursive filter disabled.

-
- NDProcess_unfilted.jpg -
-

- NDPluginStats plugin connected to the NDPluginProcess filter for the noisy image - above. Note that there are only 6 non-zero intensities in the histogram, because - the brightest pixels are only 6 A/D units above background.

-
- NDStats_unfiltered.png -
-

- Same image collected with 30 microsecond exposure time. This is the image output - from the NDPlugProcess plugin with Offset and Scale as shown above, with the recursive - filter enabled. Note the dramatic improvement in signal to noise.

-
- NDProcess_filtered.jpg -
-

- NDPluginStats plugin connected to the NDPluginProcess filter for the filtered image - above. Note that there are many non-zero intensities in the histogram, because the - filtering is improving the dynamic range significantly.

-
- NDStats_filtered.png -
- - diff --git a/documentation/NDPluginPva.html b/documentation/NDPluginPva.html deleted file mode 100755 index 0d1c2dd8c..000000000 --- a/documentation/NDPluginPva.html +++ /dev/null @@ -1,335 +0,0 @@ - - - - areaDetector Plugin NDPluginPva - - - -
-

- areaDetector Plugin NDPluginPva

-

- March 25, 2015

-

- Bruno Martins

-

- Brookhaven National Laboratory

-
-

- Contents

- -

- Overview -

-

- This plugin converts NDArray data produced by asynNDArrayDrivers into the EPICSv4 - normative type NTNDArray. An embedded EPICSv4 server is created to serve the new - NTNDArray structure as an EPICSv4 PV. A - description of the structure of the NTNDArray normative type is available. -

-

- NDPluginPva defines the following parameters. -

- - - - - - - - - - - - - - - - - - - - - - - - -
- Parameter Definitions in NDPluginPva.h and EPICS Record Definitions in NDPva.template -
- Parameter index variable - - asyn interface - - Access - - Description - - drvInfo string - - EPICS record name - - EPICS record type -
- NDPluginPvaPvName - asynOctet - r/o - Name of the EPICSv4 PV being served - PV_NAME - $(P)$(R)PvName_RBV - waveform
-

- Configuration

-

- The NDPluginPva plugin is created with the NDPvaConfigure command, either from C/C++ - or from the EPICS IOC shell.

-
NDPvaConfigure (const char *portName, int queueSize, int blockingCallbacks,
-                      const char *NDArrayPort, int NDArrayAddr, const char *pvName,
-                      size_t maxMemory, int priority, int stackSize)
-  
-

- For details on the meaning of the parameters to this function refer to the detailed - documentation on the NDPvaConfigure function in the - NDPluginPva.cpp documentation and in the documentation for the constructor - for the NDPluginPva class. -

-

- The following MEDM screen for the NDPluginPva. The only item not in the base class - screen is the readback of the EPICS V4 PV name. -

-
- NDPva.png -
-

- Starting the pvAccess server

-

- In order to actually serve the EPICSv4 PV created by this plugin it is necessary - to call startPVAServer. -

-

- Anedoctal Performance Numbers

-

- A performance test was conducted at NSLS-II to evaluate the benefits of using NDPva - instead of NDStdArrays to transport images for visualization purposes. Eight AVT - cameras of four different models were used: -

- - - - - - - - - - - - - - - - - - - - - - - - - - -
- Model - - Resolution - - Frame Rate -
- Manta G125B (3 instances) - 1292x964x1 - 30 Hz
- GT2450 (3 instances) - 2448x2050x1 - 15 Hz
- GT3400C (1 instance) - 3384x2704x3 (binned to 1692x1352x3) - 17 Hz
- Mako G131C (1 instance) - 1280x1024x3 - 28 Hz
-

- All camera IOCs were concurrently running and acquiring on a HP ProLiant DL360 Gen9 - server with 32GB of memory and a 12-core Xeon E5-2620 @ 2.40 GHz CPU. No other resource - intensive process was running during the tests. This server was connected to a switch - via a 10Gbps fiber link, as was the client computer. All cameras were individually - connected via 1Gbps copper links to the switch. The client computer was a HP Z640 - Workstation with 32GB of memory and 12-core Xeon E5-1650 @ 3.5GHz CPU, running CS-Studio - version 4.3.3. Five tests were performed: -

    -
  1. Baseline: Cameras acquiring, no plugins enabled
  2. -
  3. NDPva, no CS-Studio: Cameras acquiring, only NDPva enabled, images not - being displayed in CS-Studio
  4. -
  5. NDPva + CS-Studio: Cameras acquiring, only NDPva enabled, images being - displayed in CS-Studio
  6. -
  7. NDStdArrays, no CS-Studio: Cameras acquiring, only NDStdArrays enabled, - images not being displayed in CS-Studio
  8. -
  9. NDStdArrays + CS-Studio: Cameras acquiring, only NDStdArrays enabled, images - being displayed in CS-Studio
  10. -
-

-

- The results of these tests are tabulated as follows: -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- CPU Usage
- Camera - - Baseline - - NDPva, no CS-Studio - - NDPva + CS-Studio - - NDStdArrays, no CS-Studio - - NDStdArrays + CS-Studio -
- Cam 1: Manta G125B - 10% - 11% - 13% - 15% - 35%
- Cam 2: Manta G125B - 10% - 11% - 13% - 15% - 35%
- Cam 3: GT2450 - 18% - 18% - 23% - 30% - 65%
- Cam 4: Manta G125B - 10% - 11% - 13% - 15% - 35%
- Cam 5: GT2450 - 18% - 18% - 23% - 30% - 65%
- Cam 6: GT2450 - 18% - 18% - 23% - 30% - 65%
- Cam 7: GT3400C - 20% - 25% - 30% - 40% - 65%
- Cam 8: Mako G131C - 19% - 21% - 28% - 40% - 65%
-

- And, in form of a graph: -

-
- NDPva_Performance.png -
- - diff --git a/documentation/NDPluginROI.html b/documentation/NDPluginROI.html deleted file mode 100644 index 4957b5cba..000000000 --- a/documentation/NDPluginROI.html +++ /dev/null @@ -1,704 +0,0 @@ - - - - areaDetector Plugin NDPluginROI - - - -
-

- areaDetector Plugin NDPluginROI

-

- October 1, 2012

-

- Mark Rivers

-

- University of Chicago

-
-

- Contents

- -

- Overview -

-

- NDPluginROI selects a rectangular "Region-Of-Interest" (ROI) from the NDArray callback - data. The ROI can be any size, from a single array element to the entire array. - NDPluginROI  does the following operations, in this order: -

-
    -
  1. Extracts the ROI as defined by its offset (starting array element) and size in - each dimension.
  2. -
  3. Optional binning in any dimension.
  4. -
  5. Optional orientation reversal (mirroring) in any dimension.
  6. -
  7. Optional scaling (dividing) by a scale factor.
  8. -
  9. Optional conversion to a new data type.
  10. -
  11. Optional collapsing (removing) of dimensions whose value is 1.
  12. -
  13. Export the ROI as a new NDArray object. The NDPluginROI is both a recipient - of callbacks and a source of NDArray callbacks, as a driver is. This means - that other plugins like NDPluginStdArrays and NDPluginFile can be connected to an - NDPluginROI plugin, in which case they will display or save the selected ROI rather - than the full detector driver data.
  14. -
-

- If scaling is enabled then the array is promoted to a double when it is extracted - and binned. The scaling is done on this double-precision array, and then the array - is converted back to the desired output data type. This makes scaling relatively - computationally intensive, but ensures that correct results are obtained, without - integer truncation problems. -

-

- Note that while the NDPluginROI should be N-dimensional, the EPICS interface to - the definition of the ROI is currently limited to a maximum of 3-D. This limitation - may be removed in a future release. -

-

- NDPluginROI inherits from NDPluginDriver. The - NDPluginROI class documentation describes this class in detail. -

-

- NDPluginROI.h defines the following parameters. It also implements all of the standard - plugin parameters from NDPluginDriver. - The EPICS database NDROI.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 NDPluginROIName. -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Parameter Definitions in NDPluginROI.h and EPICS Record Definitions in NDROI.template -
- Parameter index variable - asyn interface - Access - Description - drvInfo string - EPICS record name - EPICS record type
- NDPluginROI
- Name
- asynOctet - r/w - Name of this ROI - NAME - $(P)$(R)Name
- $(P)$(R)Name_RBV
- stringout
- stringin
- ROI definition
- NDPluginROI
- Dim0Enable
- asynInt32 - r/w - Enable ROI calculations in the X dimension. If not enabled then the start, size, - binning, and reverse operations are disabled in the X dimension, and the values - from the input array are used. - DIM0_ENABLE - $(P)$(R)EnableX
- $(P)$(R)EnableX_RBV
- bo
- bi
- NDPluginROI
- Dim1Enable
- asynInt32 - r/w - Enable ROI calculations in the Y dimension. If not enabled then the start, size, - binning, and reverse operations are disabled in the Y dimension, and the values - from the input array are used. - DIM1_ENABLE - $(P)$(R)EnableY
- $(P)$(R)EnableY_RBV
- bo
- bi
- NDPluginROI
- Dim2Enable
- asynInt32 - r/w - Enable ROI calculations in the Z dimension. If not enabled then the start, size, - binning, and reverse operations are disabled in the Z dimension, and the values - from the input array are used. - DIM2_ENABLE - $(P)$(R)EnableZ
- $(P)$(R)EnableZ_RBV
- bo
- bi
- NDPluginROI
- Dim0Bin
- asynInt32 - r/w - Binning in the X dimension - DIM0_BIN - $(P)$(R)BinX
- $(P)$(R)BinX_RBV
- longout
- longin
- NDPluginROI
- Dim1Bin
- asynInt32 - r/w - Binning in the Y dimension - DIM1_BIN - $(P)$(R)BinY
- $(P)$(R)BinY_RBV
- longout
- longin
- NDPluginROI
- Dim2Bin
- asynInt32 - r/w - Binning in the Z dimension - DIM2_BIN - $(P)$(R)BinZ
- $(P)$(R)BinZ_RBV
- longout
- longin
- NDPluginROI
- Dim0Min
- asynInt32 - r/w - First pixel in the ROI in the X dimension. 0 is the first pixel in the array. - DIM0_MIN - $(P)$(R)MinX
- $(P)$(R)MinX_RBV
- longout
- longin
- NDPluginROI
- Dim1Min
- asynInt32 - r/w - First pixel in the ROI in the Y dimension.
- 0 is the first pixel in the array.
- DIM1_MIN - $(P)$(R)MinY
- $(P)$(R)MinY_RBV
- longout
- longin
- NDPluginROI
- Dim2Min
- asynInt32 - r/w - First pixel in the ROI in the Z dimension.
- 0 is the first pixel in the array.
- DIM2_MIN - $(P)$(R)MinZ
- $(P)$(R)MinZ_RBV
- longout
- longin
- NDPluginROI
- Dim0Size
- asynInt32 - r/w - Size of the ROI in the X dimension - DIM0_SIZE - $(P)$(R)SizeX
- $(P)$(R)SizeX_RBV
- longout
- longin
- NDPluginROI
- Dim1Size
- asynInt32 - r/w - Size of the ROI in the Y dimension - DIM1_SIZE - $(P)$(R)SizeY
- $(P)$(R)SizeY_RBV
- longout
- longin
- NDPluginROI
- Dim2Size
- asynInt32 - r/w - Size of the ROI in the Z dimension - DIM2_SIZE - $(P)$(R)SizeZ
- $(P)$(R)SizeZ_RBV
- longout
- longin
- NDPluginROI
- Dim0AutoSize
- asynInt32 - r/w - Automatically set SizeX to the input array size minus MinX - DIM0_AUTO_SIZE - $(P)$(R)AutoSizeX
- $(P)$(R)AutoSizeX_RBV
- bo
- bi
- NDPluginROI
- Dim1AutoSize
- asynInt32 - r/w - Automatically set SizeY to the input array size minus MinY - DIM1_AUTO_SIZE - $(P)$(R)AutoSizeY
- $(P)$(R)AutoSizeY_RBV
- bo
- bi
- NDPluginROI
- Dim2AutoSize
- asynInt32 - r/w - Automatically set SizeZ to the input array size minus MinZ - DIM2_AUTO_SIZE - $(P)$(R)AutoSizeZ
- $(P)$(R)AutoSizeZ_RBV
- bo
- bi
- NDPluginROI
- Dim0MaxSize
- asynInt32 - r/o - Maximum size of the ROI in the X dimension - DIM0_MAX_SIZE - $(P)$(R)MaxSizeX_RBV - longin
- NDPluginROI
- Dim1MaxSize
- asynInt32 - r/o - Maximum size of the ROI in the Y dimension - DIM1_MAX_SIZE - $(P)$(R)MaxSizeY_RBV - longin
- NDPluginROI
- Dim2MaxSize
- asynInt32 - r/o - Maximum size of the ROI in the Z dimension - DIM2_MAX_SIZE - $(P)$(R)MaxSizeZ_RBV - longin
- NDPluginROI
- Dim0Reverse
- asynInt32 - r/w - Reverse ROI in the X dimension. (0=No, 1=Yes) - DIM0_REVERSE - $(P)$(R)ReverseX
- $(P)$(R)ReverseX_RBV
- longout
- longin
- NDPluginROI
- Dim1Reverse
- asynInt32 - r/w - Reverse ROI in the Y dimension. (0=No, 1=Yes) - DIM1_REVERSE - $(P)$(R)ReverseY
- $(P)$(R)ReverseY_RBV
- longout
- longin
- NDPluginROI
- Dim2Reverse
- asynInt32 - r/w - Reverse ROI in the Z dimension. (0=No, 1=Yes) - DIM2_REVERSE - $(P)$(R)ReverseZ
- $(P)$(R)ReverseZ_RBV
- longout
- longin
- NDPluginROI
- DataType
- asynInt32 - r/w - Data type of the ROI (NDDataType_t). This can be different from the data type of - the NDArray callback data. - ROI_DATA_TYPE - $(P)$(R)DataType
- $(P)$(R)DataType_RBV
- mbbo
- mbbi
- NDArraySizeX - asynInt32 - r/o - Size of the ROI data in the X dimension - ARRAY_SIZE_X - $(P)$(R)ArraySizeX_RBV - longin
- NDArraySizeY - asynInt32 - r/o - Size of the ROI data in the Y dimension - ARRAY_SIZE_Y - $(P)$(R)ArraySizeY_RBV - longin
- NDArraySizeZ - asynInt32 - r/o - Size of the ROI data in the Z dimension - ARRAY_SIZE_Z - $(P)$(R)ArraySizeZ_RBV - longin
- NDPluginROI
- EnableScale
- asynInt32 - r/w - Enable dividing by the Scale value. (0=Disable, 1=Enable). This is very useful when - binning or when converting from a higher precision data type to a lower precision - data type. For example when binning 2x2, then Scale=4 (dividing by 4) will prevent - integer overflow. Similarly, when converting from 16-bit to 8-bit integers one might - scale by 256, or perhaps a smaller number if the 16-bit data does not use the full - 16-bit range. - ENABLE_SCALE - $(P)$(R)EnableScale
- $(P)$(R)EnableScale_RBV
- bo
- bi
- NDPluginROI
- Scale
- asynFloat64 - r/w - The scale value to divide by if EnableScale is enabled. - SCALE_VALUE - $(P)$(R)Scale
- $(P)$(R)Scale_RBV
- ao
- ai
- NDPluginROI
- CollapseDims
- asynInt32 - r/w - Collapse (remove) output array dimensions whose value is 1. Consider the case when - the input array to the ROI plugin has dimensions [4, 256, 256] and the plugin is - configured with MinX=1, SizeX=1, MinY=0, SizeY=256, MinZ=0, SizeZ=256. If CollapseDims=Disable - then the output arrays will be of size [1, 256, 256]. If CollapseDims=Enable then - the output array will be [256, 256]. This is convenient for some purposes. For example - file plugins like JPEG or TIFF will not work with arrays of [1, 256, 256], nor will - the ImageJ display plugin. They all require that the array have only 2 dimensions - unless it is the special case of 3-D color arrays (RGB1, RGB2, RGB3) where one of - the dimensons is 3. - COLLAPSE_DIMS - $(P)$(R)CollapseDims
- $(P)$(R)CollapseDims_RBV
- bo
- bi
-

- A special case is made when the NDArray data has colorMode=NDColorModeRGB1 or NDColorModeRGB2. - In these cases the user interface to the array dimensions is changed so that the - Z PVs always refer to the color dimension (as for NDColorModeRGB3), the X dimension - refers to the horizontal dimension, and the Y dimension refers to the vertical dimension. - This is very convenient, because it means that the ROI does not need to redefined - if, for example, the color mode is changed from Mono to RGB1, which would be required - if the X, Y and Z dimensions were not automatically switched.

-

- Configuration

-

- The NDPluginROI plugin is created with the NDROIConfigure command, either from C/C++ - or from the EPICS IOC shell.

-
NDROIConfigure(const char *portName, int queueSize, int blockingCallbacks,
-               const char *NDArrayPort, int NDArrayAddr,
-               int maxBuffers, size_t maxMemory,
-               int priority, int stackSize, int maxThreads)
-  
-

- For details on the meaning of the parameters to this function refer to the detailed - documentation on the NDROIConfigure function in the - NDPluginROI.cpp documentation and in the documentation for the constructor - for the NDPluginROI - class. -

-

- Screen shots

-

- The following MEDM screen provides access to the parameters in NDPluginDriver.h - and NDPluginROI.h through records in NDPluginBase.template and NDROI.template. -

-
-

- NDROI.adl

- NDROI.png -
-

- The following MEDM screen provides access to 4 ROIs at once. -

-
-

- NDROI4.adl

- NDROI4.png -
- - diff --git a/documentation/NDPluginROIStat.html b/documentation/NDPluginROIStat.html deleted file mode 100644 index f6a737363..000000000 --- a/documentation/NDPluginROIStat.html +++ /dev/null @@ -1,615 +0,0 @@ - - - - areaDetector Plugin NDPluginROIStat - - - -
-

- areaDetector Plugin NDPluginROIStat

-

- July 23, 2015

-

- Matt Pearson, Mark Rivers

-

- Oak Ridge National Lab
- University of Chicago

-
-

- Contents

- -

- Overview -

-

- This plugin provides multiple regions-of-interest (ROIs) on 1-D and 2-D data and - calculates basic statistics (min, max, mean, total, and net counts). It also can - accumulate time-series arrays of these statistics. The asyn address parameter is - used to identify the ROIs, and so a large number of ROIs can be dealt with in a - single thread. The purpose of this plugin is to make it easy for IOC application - developers to do simple ROI calculations, without having to use multiple traditional - ROI and separate statistics plugins. The plugin can optionally do callbacks on an - NDArray object, appending an attribute list. This makes it possible to append the - ROI statistic data to the output NDArray. -

-

- Several database template files are provided: -

- - - - - - - - - - - - - - - - - - - -
- Template File Name - Description
- NDROIStat.template - This needs to be instantiated once for each instance of the plugin. It provides - records that apply to the whole plugin or to all ROIs.
- NDROIStatN.template - This needs to be instantiated once for each ROI in the plugin (the number must equal - the number of ROIs specified in the IOC shell function). The template provides records - that apply to each ROI.
- NDROIStat8.template - This is provided as a convenience. It instantiates 8 ROIs by including NDROIStat.template - once and NDROIStatN.template 8 times.
-

- NDPluginROIStat inherits from NDPluginDriver.

-

- NDPluginROIStat defines the following parameters. It also implements all of the - standard plugin parameters from NDPluginDriver. - The template files listed above provide access to these parameters, listed in the - following tables. -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Parameter Definitions in NDPluginROIStat.h and EPICS Record Definitions in NDROIStat.template -
- Parameter index variable - asyn interface - Access - Description - drvInfo string - EPICS record name - EPICS record type
- NDPluginROIStatResetAll - asynInt32 - r/w - Reset the statistics data for all the configured ROIs. - ROISTAT_RESETALL - $(P)$(R)ResetAll - bo
- Time-Series data
- NDPluginROIStat
- TSControl
- asynInt32 - r/w - Controls time-series data collection. The enum choices are: -
    -
  • Erase/Start: Clears all time-series arrays, sets ROISTAT_TS_CURRENT_POINT=0, and - starts time-series data collection.
  • -
  • Start: Starts time-series data collection without clearing arrays or modifying - ROISTAT_TS_CURRENT_POINT. Used to restart collection after a Stop operation.
  • -
  • Stop: Stops times-series data collection. Performs callbacks on all time-series - waveform records.
  • -
  • Read: Performs callbacks on all time-series waveform records, updating the values.
  • -
-
- ROISTAT_TS_CONTROL - $(P)$(R)TSControl - mbbo
- N.A. - N.A. - r/w - Sends the "Read" command to the TSControl record above. This record can be periodically - processed to update the time-series waveform records. It is scan disabled if TSAcquiring=Done, - so that updates are only performed when time-series acquisition is in progress. - - N.A. - $(P)$(R)TSRead - longout
- NDPluginROIStat
- TSNumPoints
- asynInt32 - r/w - Controls the number of time-series points to collect. There is no maximum value, - the time-series arrays in the plugin are freed and reallocated each time this value - is changed. However, the size of the waveform records is fixed when the IOC is started, - so NELM in those records must be large enough for the largest time-series needed. - - ROISTAT_TS_NUM_POINTS - $(P)$(R)TSNumPoints - longout
- NDPluginROIStat
- TSCurrentPoint
- asynInt32 - r/o - The current time-series point. If TSCurrentPoint reaches TSNumPoints then time-series - acquisition is automatically stopped, and callbacks are done on all time-series - waveform records, updating the values. This means that even if TSRead has SCAN=Passive - that the waveform records will update when time-series acquisition is complete. - - ROISTAT_TS_CURRENT_POINT - $(P)$(R)TSCurrentPoint - longin
- NDPluginROIStat
- TSAcquiring
- asynInt32 - r/o - Indicates status of time-series data acquisition. Values are 0=Done and 1=Acquiring. - - ROISTAT_TS_ACQUIRING - $(P)$(R)TSAcquiring - bi
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- ROI Specific Parameters. -
- Parameter Definitions in NDPluginROIStat.h and EPICS Record Definitions in NDROIStatN.template
-
- Parameter index variable - asyn interface - Access - Description - drvInfo string - EPICS record name - EPICS record type
- NDPluginROIStatName - asynOctet - r/w - The name of the plugin. - ROISTAT_NAME - $(P)$(R)Name
- $(P)$(R)Name_RBV
- stringout
- NDPluginROIStatUse - asynInt32 - r/w - Set this to 1 to use this ROI, which will mean the statistics will be calculated - for this ROI. - ROISTAT_USE - $(P)$(R)Use
- $(P)$(R)Use_RBV
- bo
- bi
- NDPluginROIStatReset - asynInt32 - r/w - Reset the statistics data for this ROI. - ROISTAT_RESET - $(P)$(R)Reset - bo
- NDPluginROIStatBgdWidth - asynInt32 - r/w - The background width for the net counts calculation. The average background counts - in a border of this width around the ROI are computed. The border begins at the - outer edge of the defined ROI and progresses inward by the BgdWidth. - ROISTAT_BGD_WIDTH - $(P)$(R)BgdWidth
- $(P)$(R)BgdWidth_RBV
- longout -
- longin
- NDPluginROIStatDim0Min - asynInt32 - r/w - Start element in the X dimension. - ROISTAT_DIM0_MIN - $(P)$(R)MinX
- $(P)$(R)MinX_RBV
- longout
- longin
- NDPluginROIStatDim0Size - asynInt32 - r/w - The ROI size in the X dimension. - ROISTAT_DIM0_SIZE - $(P)$(R)SizeX
- $(P)$(R)SizeX_RBV
- longout
- longin
- NDPluginROIStatDim0MaxSize - asynInt32 - r/o - Max size of the ROI in the X dimension. - ROISTAT_DIM0_MAX_SIZE - $(P)$(R)MaxSizeX
- $(P)$(R)MaxSizeX_RBV
- longin
- NDPluginROIStatDim1Min - asynInt32 - r/w - Start element in the Y dimension. - ROISTAT_DIM1_MIN - $(P)$(R)MinY
- $(P)$(R)MinY_RBV
- longout
- longin
- NDPluginROIStatDim1Size - asynInt32 - r/w - The ROI size in the Y dimension. - ROISTAT_DIM1_SIZE - $(P)$(R)SizeY
- $(P)$(R)SizeY_RBV
- longout
- longin
- NDPluginROIStatDim1MaxSize - asynInt32 - r/o - Max size of the ROI in the Y dimension. - ROISTAT_DIM1_MAX_SIZE - $(P)$(R)MaxSizeY
- $(P)$(R)MaxSizeY_RBV
- longin
- NDPluginROIStatMinValue - asynFloat64 - r/o - Minimum count value in the ROI. - ROISTAT_MIN_VALUE - $(P)$(R)MinValue_RBV - ai
- NDPluginROIStatMaxValue - asynFloat64 - r/o - Maximum count value in the ROI. - ROISTAT_MAX_VALUE - $(P)$(R)MaxValue_RBV - ai
- NDPluginROIStatMeanValue - asynFloat64 - r/o - Mean counts value in the ROI. - ROISTAT_MEAN_VALUE - $(P)$(R)MeanValue_RBV - ai
- NDPluginROIStatTotal - asynFloat64 - r/o - Total counts in the ROI. - ROISTAT_TOTAL - $(P)$(R)Total_RBV - ai
- NDPluginROIStatNet - asynFloat64 - r/o - Net (background subtracted) counts in the ROI. - ROISTAT_NET - $(P)$(R)Net_RBV - ai
- Time-Series data
- NDPluginROIStat
- TSXXX
- asynFloat64Array - r/o - The time series data arrays. XXX is one of the following, corresponding to each - of the basic statistics and centroid and sigma statistics described above: -
    -
  • MinValue
  • -
  • MaxValue
  • -
  • MeanValue
  • -
  • Total
  • -
  • Net
  • -
-
-
    -
  • ROISTAT_TS_MIN_VALUE
  • -
  • ROISTAT_TS_MAX_VALUE
  • -
  • ROISTAT_TS_MEAN_VALUE
  • -
  • ROISTAT_TS_TOTAL
  • -
  • ROISTAT_TS_NET
  • -
-
- $(P)$(R)TSXXX - waveform
-

- Configuration

-

- The NDPluginROIStat plugin is created with the NDROIStatConfigure function, either - from C/C++ or from the EPICS IOC shell.

-
NDROIStatConfigure(const char *portName, int queueSize, int blockingCallbacks, 
-                          const char *NDArrayPort, int NDArrayAddr, int maxROIs, int maxBuffers,  
-                          size_t maxMemory, int priority, int stackSize)
-  
-

- All but the maxROIs parameter are common to all plugins. This defines - how many ROIs this plugin will deal with. Usually this will match the number of - NDROIStatN templates have been instantiated. For example: -
- NDROIStatConfigure("DET1.ROI", 100, 0, "DET1", 0, 8, -1, -1, 0, 0) -

-

- Screen shots

-

- The following MEDM screen provides access to the parameters in NDPluginDriver.h - and NDPluginROIStat.h through records in NDPluginBase.template, and NDROIStat.template. -

-
-

- NDROIStat.adl

- NDROIStat.png -
-

- The following MEDM screen provides access to the parameters in NDPluginROIStat.h - through records in NDROIStatN.template. -

-
-

- NDROIStatN.adl

- NDROIStatN.png -
-

- The following MEDM screen provides access to 8 ROIs at once. -

-
-

- NDROIStat8.adl

- NDROIStat8.png -
-
-

- NDTimeSeries.adl

- NDROIStatTimeSeriesMean.png -
-

- Notes

-

- This plugin only supports 1-D and 2-D arrays. The NDPluginStats plugin can compute - statistics on N-dimensional arrays, but it is less efficient for these simple statistics - on 1-D and 2-D arrays.

- - diff --git a/documentation/NDPluginScatter.html b/documentation/NDPluginScatter.html deleted file mode 100644 index f04015873..000000000 --- a/documentation/NDPluginScatter.html +++ /dev/null @@ -1,90 +0,0 @@ - - - - areaDetector Plugin NDPluginScatter - - - -
-

- areaDetector Plugin NDPluginScatter

-

- March 4, 2017

-

- Mark Rivers

-

- University of Chicago

-
-

- Contents

- -

- Overview -

-

- This plugin is used to distribute (scatter) the processing of NDArrays to multiple - downstream plugins. It allows multiple intances of a plugin to process NDArrays - in parallel, utilizing multiple cores to increase throughput. It is commonly used - in together with NDPluginGather, which gathers - the outputs from multiple plugins back into a single stream. The - documentation for NDPluginGather provides a detailed example of using NDPluginScatter - and NDPluginGather to do parallel processing of 5 statistics plugins. -

-

- This plugin works differently from other plugins that do callbacks to downstream - plugins. Other plugins pass each NDArray that they generate of all downstream - plugins that have registered for callbacks. NDPluginScatter does not do this, rather - it passes each NDArray to only one downstream plugin. The mechanism for chosing - which plugin to pass the next NDArray to can be described as a modified round-robin. - The first NDArray is passed to the first registered callback client, the second - NDArray to the second client, etc. After the last client the next NDArray goes to - the first client, and so on. The modification to strict round-robin is that if client - N input queue is full then an attempt is made to send the NDArray to client N+1, - and if this would fail to client N+2, etc. If no clients are able to accept the - NDArray because their queues are full then the last client that is tried (N-1) will - drop the NDArray. Because the "last client" rotates according the round-robin schedule - the load of dropped arrays will be uniform if all clients are executing at the same - speed and if their queues are the same size.

-

- Their is an NDPluginScatterMethod parameter in the driver to allow future implementations - of other scheduling schemes, should this prove desireable.

-

- NDPluginScatter inherits from NDPluginDriver. NDPluginScatter does not do any modification - to the NDArrays that it receives except for possibly adding new NDAttributes if - an attribute file is specified. The - NDPluginScatter class documentation describes this class in detail.

-

- Configuration

-

- The NDPluginScatter plugin is created with the NDScatterConfigure command, either - from C/C++ or from the EPICS IOC shell.

-
NDScatterConfigure (const char *portName, int queueSize, int blockingCallbacks, 
-                      const char *NDArrayPort, int NDArrayAddr, size_t maxMemory, 
-                      int priority, int stackSize)
-  
-

- For details on the meaning of the parameters to this function refer to the detailed - documentation on the NDScatterConfigure function in the - NDPluginScatter.cpp documentation and in the documentation for the constructor - for the NDPluginScatter - class. -

-

- Screen shots

-

- The following is the MEDM screen that provides control of the NDNDPluginScatter - plugin. Note that it currently only contains the controls for the base class NDPluginDriver. -

-
-

- NDScatter.adl

-

- NDScatter.png

-
- - diff --git a/documentation/NDPluginStats.html b/documentation/NDPluginStats.html deleted file mode 100755 index 4577ffe7d..000000000 --- a/documentation/NDPluginStats.html +++ /dev/null @@ -1,1559 +0,0 @@ - - - - areaDetector Plugin NDPluginStats - - - -
-

- areaDetector Plugin NDPluginStats

-

- June 25, 2018

-

- Mark Rivers

-

- University of Chicago

-
-

- Contents

- -

- Overview -

-

- NDPluginStats computes the following. -

-
    -
  1. Basic statistics: minimum, maximum, mean, sigma, total, and net (background subtracted).
  2. -
  3. Centroid, sigma, skewness and kurtosis values in the X and Y dimensions.
  4. -
  5. Profiles of the array in the X and Y dimensions. A total of 8 profiles are calculated: - -
  6. -
  7. A histogram of the values (e.g. number of pixels versus intensity per pixel).
  8. -
-

- Each calculcation can be independently enabled and disabled. Calculations 1 and - 4 can be perfomed on arrays of any dimension. Calculations 2 and 3 are restricted - to 2-D arrays. -

-

- Time-series arrays of the basic statistics, centroid and sigma statistics can also - be collected. This is very useful for on-the-fly data acquisition, where the NDStats - plugin computes the net or total counts in the detector or an ROI. It can also be - used to quickly plot a time-history of beam position or width, etc. The time series - can also be used in a circular buffer mode where is continuously displays the last - N values of the statistic.

-

- NDPluginStats inherits from NDPluginDriver. The - NDPluginStats class documentation describes this class in detail. -

-

- NDPluginStats.h defines the following parameters. It also implements all of the - standard plugin parameters from NDPluginDriver. - 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 NDPluginStatsComputeStatistics. -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Parameter Definitions in NDPluginStats.h and EPICS Record Definitions in NDStats.template -
- Parameter index variable - - asyn interface - - Access - - Description - - drvInfo string - - EPICS record name - - EPICS record type -
- Basic statistics -
- NDPluginStats
- ComputeStatistics -
- asynInt32 - - r/w - - 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. - - COMPUTE_STATISTICS - - $(P)$(R)ComputeStatistics
- $(P)$(R)ComputeStatistics_RBV -
- bo
- bi -
- NDPluginStats
- BgdWidth -
- asynInt32 - - r/w - - 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. - - BGD_WIDTH - - $(P)$(R)BgdWidth
- $(P)$(R)BgdWidth_RBV -
- longout
- longin -
- NDPluginStats
- MinValue -
- asynFloat64 - - r/o - - Minimum value in any element in the array - - MIN_VALUE - - $(P)$(R)MinValue_RBV - - ai -
- NDPluginStats
- MinX -
- asynFloat64 - - r/o - - X pixel location of minimum value in the array. This is only valid for 2-D monochromatic - arrays. - - MIN_X - - $(P)$(R)MinX_RBV - - ai -
- NDPluginStats
- MinY -
- asynFloat64 - - r/o - - Y pixel location of minimum value in the array. This is only valid for 2-D monochromatic - arrays. - - MIN_Y - - $(P)$(R)MinY_RBV - - ai -
- NDPluginStats
- MaxValue -
- asynFloat64 - - r/o - - Maximum value in any element in the array - - MAX_VALUE - - $(P)$(R)MaxValue_RBV - - ai -
- NDPluginStats
- MaxX -
- asynFloat64 - - r/o - - X pixel location of maximum value in the array. This is only valid for 2-D monochromatic - arrays. - - MAX_X - - $(P)$(R)MaxX_RBV - - ai -
- NDPluginStats
- MaxY -
- asynFloat64 - - r/o - - Y pixel location of maximum value in the array. This is only valid for 2-D monochromatic - arrays. - - MAX_Y - - $(P)$(R)MaxY_RBV - - ai -
- NDPluginStats
- MeanValue -
- asynFloat64 - - r/o - - Mean value in the array - - MEAN_VALUE - - $(P)$(R)MeanValue_RBV - - ai -
- NDPluginStats
- Total -
- asynFloat64 - - r/o - - Sum (total) of all elements in the array. This is available as an ai record. The - total counts are also available as epicsInt32 values in an mca record via callbacks - to the drvFastSweep driver. The mca record is very useful for on-the-fly data acquisition - of the total counts in the detector or in an ROI. - - TOTAL - - $(P)$(R)Total_RBV
- $(P)$(R)TotalArray -
- ai
- mca -
- NDPluginStats
- Net -
- asynFloat64 - - r/o - - 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. The net counts is available as an ai record. - The net counts is also available as epicsInt32 values in an mca record via callbacks - to the drvFastSweep driver. The mca record is very useful for on-the-fly data acquisition - of the net counts in the detector or in an ROI. - - NET - - $(P)$(R)Net_RBV
- $(P)$(R)NetArray -
- ai
- mca -
- NDPluginStats
- SigmaValue -
- asynFloat64 - - r/o - - Sigma (standard deviation) of all elements in the array - - SIGMA_VALUE - - $(P)$(R)Sigma_RBV - - ai -
- Centroid statistics -
- NDPluginStats
- ComputeCentroid -
- asynInt32 - - r/w - - Flag to control whether to compute the centroid statistics (0=No, 1=Yes). The centroids - are computed from the average row and column profiles above the centroid threshold. - These calculations are also quite fast, since they just involve addition operations - for each array element. - - COMPUTE_CENTROID - - $(P)$(R)ComputeCentroid
- $(P)$(R)ComputeCentroid_RBV -
- bo
- bi -
- NDPluginStats
- CentroidThreshold -
- asynFloat64 - - r/w - - 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. - - CENTROID_THRESHOLD - - $(P)$(R)CentroidThreshold
- $(P)$(R)CentroidThreshold_RBV -
- ao
- ai -
- NDPluginStats
- CentroidTotal -
- asynFloat64 - - r/o - - Total mass, sum of all elements above the threshold. - - CENTROID_TOTAL - - $(P)$(R)CentroidTotal_RBV - - ai -
- NDPluginStats
- CentroidX -
- asynFloat64 - - r/o - - X centroid of the array above the centroid threshold. - - CENTROIDX_VALUE - - $(P)$(R)CentroidX_RBV - - ai -
- NDPluginStats
- CentroidY -
- asynFloat64 - - r/o - - Y centroid of the array above the centroid threshold. - - CENTROIDY_VALUE - - $(P)$(R)CentroidY_RBV - - ai -
- NDPluginStats
- SigmaX -
- asynFloat64 - - r/o - - Sigma X (width) of the distribution above the centroid threshold. - - SIGMAX_VALUE - - $(P)$(R)SigmaX_RBV - - ai -
- NDPluginStats
- SigmaY -
- asynFloat64 - - r/o - - Sigma Y (height) of the distribution above the centroid threshold. - - SIGMAY_VALUE - - $(P)$(R)SigmaY_RBV - - ai -
- NDPluginStats
- SigmaXY -
- asynFloat64 - - r/o - - This is the normalized value of sigmaXY, i.e. sigmaXY/(sigmaX * sigmaY). This is - often called the correlation coefficient, r. It is zero if the X and Y profiles - are not correlated, meaning that the distribution is not tilted with respect to - the X and Y axes. - - SIGMAXY_VALUE - - $(P)$(R)SigmaXY_RBV - - ai -
- NDPluginStats
- SkewX -
- asynFloat64 - - r/o - - Skewness X (symmetry) of the distribution above the centroid threshold, in relation - to the center of mass. -
    -
  • == 0, symmetric distribution
  • -
  • < 0, distribution assymetric to the left
  • -
  • > 0, distribution assymetric to the right
  • -
-
- SKEWX_VALUE - - $(P)$(R)SkewX_RBV - - ai -
- NDPluginStats
- SkewY -
- asynFloat64 - - r/o - - Skewness Y (symmetry) of the distribution above the centroid threshold, in relation - to the center of mass. -
    -
  • == 0, symmetric distribution
  • -
  • < 0, distribution assymetric to the top
  • -
  • > 0, distribution assymetric to the bottom
  • -
-
- SKEWY_VALUE - - $(P)$(R)SkewY_RBV - - ai -
- NDPluginStats
- KurtosisX -
- asynFloat64 - - r/o - - Excess Kurtosis X (flatness) of the distribution above the centroid threshold. -
    -
  • == 0, Gaussian (normal) distribution
  • -
  • < 0, distribution flatter than normal
  • -
  • > 0, distribution more peaky than normal
  • -
-
- KURTOSISX_VALUE - - $(P)$(R)KurtosisX_RBV - - ai -
- NDPluginStats
- KurtosisY -
- asynFloat64 - - r/o - - Excess Kurtosis Y (flatness) of the distribution above the centroid threshold. -
    -
  • == 0, Gaussian (normal) distribution
  • -
  • < 0, distribution flatter than normal
  • -
  • > 0, distribution more peaky than normal
  • -
-
- KURTOSISY_VALUE - - $(P)$(R)KurtosisY_RBV - - ai -
- NDPluginStats
- Eccentricity -
- asynFloat64 - - r/o - - Eccentricity, can take values from 0 to 1. 0 means a perfectly round object and - 1 mean a line shaped object. - - ECCENTRICITY_VALUE - - $(P)$(R)Eccentricity_RBV - - ai -
- NDPluginStats
- Orientation -
- asynFloat64 - - r/o - - Orientation of the object, orientation of the "long" direction with respect to horizontal - (x axis). - - ORIENTATION_VALUE - - $(P)$(R)Orientation_RBV - - ai -
- Time-Series data
-
- The time series is implemented by loading an instance of the - NDPluginTimeSeries for each NDPluginStats plugin, and the time series control - uses records in NDTimeSeries.template. That documentation should be consulted for - an explanation of these records. The prefix and record name macro for the time-series - plugin records from NDTimeSeries.template is $(P)$(R)TS:.
- NOTE: The time-series plugin is often used with drivers which sample at a - fixed well-defined time interval. This cannot be guaranteed with the statistics - plugin, so the averaging time records and time axis waveform record from NDPluginTimeSeries - are typically not used, and the statistics data are plotted against time point #, - rather than actual time. -
- The time-series waveform records for each statistic are defined in NDStats.template. -
- NDPluginTimeSeries
- TSTimeSeries -
- asynFloat64Array - - r/o - - The time series data arrays of the basic statistics and centroid and sigma statistics - described above. - - TS_TIME_SERIES - - $(P)$(R)XXX, where XXX is:
-
    -
  • TSMinValue
  • -
  • TSMinX
  • -
  • TSMinY
  • -
  • TSMaxValue
  • -
  • TSMaxX
  • -
  • TSMaxY
  • -
  • TSMeanValue
  • -
  • TSSigma
  • -
  • TSTotal
  • -
  • TSNet
  • -
  • TSCentroidX
  • -
  • TSCentroidY
  • -
  • TSSigmaX
  • -
  • TSSigmaY
  • -
  • TSSigmaXY
  • -
  • TSSkewX
  • -
  • TSSkewY
  • -
  • TSKurtosisX
  • -
  • TSKurtosisY
  • -
  • TSEccenticity
  • -
  • TSOrientation
  • -
  • TSTimestamp
  • -
-
- waveform -
- X and Y Profiles -
- NDPluginStats
- ComputeProfiles -
- asynInt32 - - r/w - - Flag to control whether to compute the profiles for this array (0=No, 1=Yes). - - COMPUTE_PROFILES - - $(P)$(R)ComputeProfiles
- $(P)$(R)ComputeProfiles_RBV -
- bo
- bi -
- NDPluginStats
- ProfileSizeX -
- asynInt32 - - r/w - - Number of array elements in the X profiles. - - PROFILE_SIZE_X - - $(P)$(R)ProfileSizeX_RBV - - longin -
- NDPluginStats
- ProfileSizeY -
- asynInt32 - - r/w - - Number of array elements in the Y profiles. - - PROFILE_SIZE_Y - - $(P)$(R)ProfileSizeY_RBV - - longin -
- NDPluginStats
- CursorX -
- asynInt32 - - r/w - - X position of a user-defined cursor for profiles. - - CURSOR_X - - $(P)$(R)CursorX
- $(P)$(R)CursorX_RBV -
- longout
- longin -
- NDPluginStats
- CursorY -
- asynInt32 - - r/w - - Y position of a user-defined cursor for profiles. - - CURSOR_Y - - $(P)$(R)CursorY
- $(P)$(R)CursorY_RBV -
- longout
- longin -
- NDPluginStats
- CursorVal -
- asynFloat64 - - r/o - - Image pixel value at cursor position. - - CURSOR_VAL - - $(P)$(R)CursorVal - - ai -
- NDPluginStats
- ProfileAverageX -
- asynFloat64Array - - r/o - - Profile of the average row in the array, i.e. the sum of all rows in the array divided - by the number of rows. - - PROFILE_AVERAGE_X - - $(P)$(R)ProfileAverageX_RBV - - waveform -
- NDPluginStats
- ProfileAverageY -
- asynFloat64Array - - r/o - - Profile of the average column in the array, i.e. the sum of all columns in the array - divided by the number of columns. - - PROFILE_AVERAGE_Y - - $(P)$(R)ProfileAverageY_RBV - - waveform -
- NDPluginStats
- ProfileThresholdX -
- asynFloat64Array - - r/o - - Same as ProfileAverageX except that all array elements less than CentroidThreshold - are set to zero when computing the average. - - PROFILE_THRESHOLD_X - - $(P)$(R)ProfileThresholdX_RBV - - waveform -
- NDPluginStats
- ProfileThresholdY -
- asynFloat64Array - - r/o - - Same as ProfileAverageY except that all array elements less than CentroidThreshold - are set to zero when computing the average. - - PROFILE_THRESHOLD_Y - - $(P)$(R)ProfileThresholdY_RBV - - waveform -
- NDPluginStats
- ProfileCentroidX -
- asynFloat64Array - - r/o - - X profile through the array in the row defined by CentroidY. - - PROFILE_CENTROID_X - - $(P)$(R)ProfileCentroidX_RBV - - waveform -
- NDPluginStats
- ProfileCentroidY -
- asynFloat64Array - - r/o - - Y profile through the array in the column defined by CentroidX. - - PROFILE_CENTROID_Y - - $(P)$(R)ProfileCentroidY_RBV - - waveform -
- NDPluginStats
- ProfileCursorX -
- asynFloat64Array - - r/o - - X profile through the array in the row defined by CursorY. - - PROFILE_CURSOR_X - - $(P)$(R)ProfileCursorX_RBV - - waveform -
- NDPluginStats
- ProfileCursorY -
- asynFloat64Array - - r/o - - Y profile through the array in the row defined by CursorX. - - PROFILE_CURSOR_Y - - $(P)$(R)ProfileCursorY_RBV - - waveform -
- Array histogram -
- NDPluginStats
- ComputeHistogram -
- asynInt32 - - r/w - - Flag to control whether to compute the histogram for this array (0=No, 1=Yes). Not - computing the histogram reduces CPU load. - - COMPUTE_HISTOGRAM - - $(P)$(R)ComputeHistogram
- $(P)$(R)ComputeHistogram_RBV -
- bo
- bi -
- NDPluginStats
- HistSize -
- asynInt32 - - r/w - - Number of elements (bins) in the histogram - - HIST_SIZE - - $(P)$(R)HistSize
- $(P)$(R)HistSize_RBV -
- longout
- longin -
- NDPluginStats
- HistMin -
- asynFloat64 - - r/w - - Minimum value for the histogram. All values less than this will be counted in HistBelow. - - HIST_MIN - - $(P)$(R)HistMin
- $(P)$(R)HistMin_RBV -
- ao
- ai -
- NDPluginStats
- HistMax -
- asynFloat64 - - r/w - - Maximum value for the histogram. All values greater than this will be counted in - HistAbove. - - HIST_MAX - - $(P)$(R)HistMax
- $(P)$(R)HistMax_RBV -
- ao
- ai -
- NDPluginStats
- HistBelow -
- asynInt32 - - r/o - - Count of all values less than HistMin. - - HIST_BELOW - - $(P)$(R)HistBelow_RBV - - longin -
- NDPluginStats
- HistAbove -
- asynInt32 - - r/o - - Count of all values greater than HistMax. - - HIST_ABOVE - - $(P)$(R)HistAbove_RBV - - longin -
- NDPluginStats
- HistEntropy -
- asynFloat64 - - r/o - - 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. - - HIST_ENTROPY - - $(P)$(R)HistEntropy_RBV - - ai -
- NDPluginStats
- HistArray -
- asynFloat64Array - - r/o - - Histogram array, i.e. counts in each histogram bin. - - HIST_ARRAY - - $(P)$(R)Histogram_RBV - - waveform -
- NDPluginStats
- HistXArray -
- asynFloat64Array - - r/o - - Histogram X-axis array, i.e. minimum intensity in each histogram bin. - - HIST_X_ARRAY - - $(P)$(R)HistogramX_RBV - - waveform -
-

- If the values of CentroidThreshold, CursorX, or CursorY are changed then the centroid - and profile calculations are performed again immediately on the last array collected. - Thus updated centroid statistics and profiles can be displayed even when new arrays - are not being acquired. These calculations are only performed when enabled by ComputeCentroid - and ComputeProfiles.

-

- Configuration

-

- The NDPluginStats plugin is created with the NDStatsConfigure command, either from - C/C++ or from the EPICS IOC shell.

-
NDStatsConfigure(const char *portName, int queueSize, int blockingCallbacks,
-               const char *NDArrayPort, int NDArrayAddr,
-               int maxBuffers, size_t maxMemory,
-               int priority, int stackSize)
-  
-

- For details on the meaning of the parameters to this function refer to the detailed - documentation on the NDStatsConfigure function in the - NDPluginStats.cpp documentation and in the documentation for the constructor - for the NDPluginStats - class. -

-

- Screen shots

-

- The following MEDM screen provides access to the parameters in NDPluginDriver.h - and NDPluginStats.h through records in NDPluginBase.template and NDStats.template. -

-
-

- NDStats.adl

- NDStats.png -
-

- The following MEDM screen shows the average profile of an image in the X direction. -

-
-

- NDPlot.adl

- NDStats_AverageX.png -
-

- The following MEDM screen shows the profile of an image in the Y direction at the - location of the user-defined cursor. -

-
-

- NDPlot.adl

- NDStats_CursorY.png -
-

- The following MEDM screen shows the histogram of intensities of an array. -

-
-

- NDPlotXY.adl

- NDStats_Histogram.png -
-

- The following MEDM screen combines many parameters for 5 NDPluginStats plugins on - a single screen. -

-
-

- NDStats5.adl

- NDStats5.png -
-

- The following MEDM screen shows the the total counts from the Stats1 plugin. This - is the total counts as a function of time. -

-
-

- NDTimeSeries.adl

- NDStatsTimeSeriesTotal.png -
-

- The following MEDM screen shows the Y centroid as a function of time from the Stats1 - plugin. -

-
-

- NDTimeSeries.adl

- NDStatsTimeSeriesCentroidY.png -
-

- The following MEDM screen shows all of the basic statistics as a function of time - from the Stats1 plugin. -

-
-

- NDStatsTimeSeriesBasicAll.adl

- NDStatsTimeSeriesBasicAll.png -
-

- The following MEDM screen shows all of the centroid statistics as a function of - time from the Stats1 plugin. -

-
-

- NDStatsTimeSeriesCentroidAll.adl

- NDStatsTimeSeriesCentroidAll.png -
- - diff --git a/documentation/NDPluginStdArrays.html b/documentation/NDPluginStdArrays.html deleted file mode 100644 index 8d7bd7c63..000000000 --- a/documentation/NDPluginStdArrays.html +++ /dev/null @@ -1,127 +0,0 @@ - - - - areaDetector Plugin NDPluginStdArrays - - - -
-

- areaDetector Plugin NDPluginStdArrays

-

- October 1, 2012

-

- Mark Rivers

-

- University of Chicago

-
-

- Contents

- -

- Overview -

-

- This plugin is the tool for converting the NDArray data produced by asynNDArrayDriver - drivers into a form that can be accessed by EPICS. -

-

- NDPluginStdArrays inherits from NDPluginDriver. NDPluginStdArrays converts the NDArray - data from a callback into the 1-dimensional arrays supported by the standard asyn - array interfaces, i.e. asyn[Int8, Int16, Int32, Float32, Float64]Array. These interfaces - are supported by the EPICS waveform record using standard asyn device support. Because - this plugin inherits from NDPluginDriver - it also provides additional information on the array data (e.g. number of dimensions - and dimension data) that are made available as EPICS PVs so that clients can correctly - interpret the array data. The - NDPluginStdArrays class documentation describes this class in detail.

-

- NDPluginStdArrays defines the following parameters. It also implements all of the - standard plugin parameters from NDPluginDriver - . The EPICS database NDStdArrays.template provides access to these parameters, listed - in the following table. -

- - - - - - - - - - - - - - - - - - - - - - - - -
- Parameter Definitions in NDPluginStdArrays.h and EPICS Record Definitions in NDStdArrays.template -
- Parameter index variable - asyn interface - Access - Description - drvInfo string - EPICS record name - EPICS record type
- NDPluginStdArraysData - asyn[Int8, Int16, Int32, Float32, Float64]Array - r/o - Array data as a 1-D array, possibly converted in data type from that in the NDArray - object to the specific asyn interface. - STD_ARRAY_DATA - $(P)$(R)ArrayData - waveform
-

- If the array data contains more than 16,000 bytes then in order for EPICS clients - to receive this data they must be built with EPICS R3.14 (not R3.13), and the environment - variable EPICS_CA_MAX_ARRAY_BYTES on both the EPICS IOC computer and EPICS client - computer must be set to a value at least as large as the array size in bytes.

-

- Configuration

-

- The NDPluginStdArrays plugin is created with the NDStdArraysConfigure command, either - from C/C++ or from the EPICS IOC shell.

-
NDStdArraysConfigure (const char *portName, int queueSize, int blockingCallbacks, 
-                      const char *NDArrayPort, int NDArrayAddr, size_t maxMemory, 
-                      int priority, int stackSize)
-  
-

- For details on the meaning of the parameters to this function refer to the detailed - documentation on the NDStdArraysConfigure function in the - NDPluginStdArrays.cpp documentation and in the documentation for the constructor - for the NDPluginStdArrays - class. -

-

- Screen shots

-

- The following is the MEDM screen that provides access to the parameters in NDPluginDriver.h - and NDPluginStdArrays.h through records in NDPluginBase.template and NDStdArrays.template. - This is the MEDM screen that is normally used to control the display of images via - EPICS channel access. -

-
-

- NDStdArrays.adl

-

- NDStdArrays.png

-
- - diff --git a/documentation/NDPluginTimeSeries.html b/documentation/NDPluginTimeSeries.html deleted file mode 100644 index 60bd8ec49..000000000 --- a/documentation/NDPluginTimeSeries.html +++ /dev/null @@ -1,471 +0,0 @@ - - - - areaDetector Plugin NDPluginROIStat - - - -
-

- areaDetector Plugin NDPluginTimeSeries

-

- March 18, 2016

-

- Mark Rivers

-

- University of Chicago

-
-

- Contents

- -

- Overview -

-

- This plugin accepts 1-D arrays of dimension [NumSignals] or 2-D arrays of dimension - [NumSignals, NewTimePoints]. The plugin creates NumSignals NDArrays of dimension - [NumTimePoints], each of which is the time-series for one signal. It also creates - an NDArray of dimension [NumTimePoints, NumSignals] containing the data for all - of the signals. It also exports waveform records containing the time-series data - for each signal, and a time-axis array containing the relative times of each point - in the time-series. These waveform records are useful for plotting in OPI screens.

-

- On each callback the new time points are appended to the existing time series arrays. - The plugin can operate either two modes. In fixed time mode the time-series arrays - are cleared when acquisition is started, and new time points are appended until - NumTimePoints points have been received, at which point acquisition stops and further - callbacks are ignored. In circular buffer mode once NumTimePoints samples are received - then acquisition continues with the new time points replacing the oldest ones in - the circular buffer.

-

- The plugin requires knowing the time interval between samples from the driver (TimePerPoint). - This information normally comes from a database link to a record in the detector - driver, but it can be manually specified as well. The plugin exports a 1-D waveform - record containing the relative time values of each sample, which can be used for - the horizontal axis in an OPI display. -

-

- The plugin optionally does time averaging of the input signal. It can average any - integer number of input samples(NumAverage), so that the time between points in - the output waveforms is NumAverage*TimePerPoint = AveragingTime.

-

- NDPluginTimeSeries inherits from NDPluginDriver. The - NDPluginTimeSeries class documentation describes this class in detail.

-

- Several database template files are provided: -

- - - - - - - - - - - - - - - -
- Template File Name - Description
- NDTimeSeries.template - This needs to be instantiated once for each instance of the plugin. It provides - records that apply to the entire plugin or to all signals.
- NDTimeSeriesN.template - This needs to be instantiated once for each signal in the plugin (the number must - equal the number of signals specified in the IOC shell function). The template provides - records that apply to each signal.
-

- NDPluginTimeSeries inherits from NDPluginDriver.

-

- NDPluginTimeSeries defines the following parameters. It also implements all of the - standard plugin parameters from NDPluginDriver. - The template files listed above provide access to these parameters, listed in the - following tables. -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Parameters for entire plugin. -
- Parameter Definitions in NDPluginTimeSeries.h and EPICS Record Definitions in NDTimeSeries.template
-
- Parameter index variable - asyn interface - Access - Description - drvInfo string - EPICS record name - EPICS record type
- TSAcquire - asynInt32 - r/w - Starts and stops time-series data collection. Value are: -
- 0: "Done": Stops times-series data collection. Performs callbacks on all time-series - waveform records. The record automatically goes to Done when acquisition completes - in Fixed Length acquire mode.
- 1: "Acquire": Clears all time-series arrays, sets TS_CURRENT_POINT=0, and starts - time-series data collection.
- TS_ACQUIRE - $(P)$(R)TSAcquire
- $(P)$(R)TSAcquiring
- busy
- bi
- TSRead - asynInt32 - r/w - Forces the plugin to do callbacks with the time series NDArrays and waveform records. - This record SCAN field can be set to periodically update the waveforms. The callbacks - are automatically done when TSAcquire goes to done at the end of acquisition in - Fixed Length mode. - TS_READ - $(P)$(R)TSRead - bo
- TSNumPoints - asynInt32 - r/w - Controls the number of time-series points to collect. There is no maximum value, - the time-series arrays in the plugin are freed and reallocated each time this value - is changed. However, the size of the waveform records is fixed when the IOC is started, - so NELM in those records must be large enough for the largest time-series needed. - - TS_NUM_POINTS - $(P)$(R)TSNumPoints - longout
- TSCurrentPoint - asynInt32 - r/o - The current time-series point. In Fixed Length mode when TSCurrentPoint reaches - TSNumPoints then time-series acquisition is automatically stopped, and callbacks - are done on all time-series NDArrays and waveform records, updating the values. - This means that even if TSRead.SCAN is Passive that the NDArrays and waveform records - will update when time-series acquisition is complete. - TS_CURRENT_POINT - $(P)$(R)TSCurrentPoint - longin
- TSAcquireMode - asynInt32 - r/w - The time series acquisition mode. Choices are:
- 0: "Fixed length" -
- 1: "Circ. buffer"
- TS_ACQUIRE_MODE - $(P)$(R)TSAcquireMode
- $(P)$(R)TSAcquireMode_RBV
- mbbo -
- mbbi
- TSTimePerPoint - asynFloat64 - r/w - The time interval between samples in the waveforms from the driver. This value is - normally updated automatically using the TSTimePerPointLink record described below. - It can also be manually changed if there is no EPICS record available to provide - this value automatically. This value is used to compute NumAverage, and to construct - the TSTimeAxis array. - TS_TIME_PER_POINT - $(P)$(R)TSTimePerPoint
- $(P)$(R)TSTimePerPoint_RBV
- ao
- ai
- N.A - N.A. - r/w - This record has OMSL="closed_loop" and DOL set to a record that contains the time - between points from the driver. The link will normally have the CP attribute, so - this record processes whenever the input record changes. The OUT field of this record - is TSTimePerPoint. - N.A. - $(P)$(R)TSTimePerPointLink - ao
- TSAveragingTime - asynFloat64 - r/w - The requested value of the time interval over which input time-series points are - averaged. If the TSAveragingTime is not an integer multiple of TSTimePerPoint then - TSAveragingTime_RBV will be different from TSAveragingTime and will be the actual - averaging time. - TS_AVERAGING_TIME - $(P)$(R)TSAveragingTime
- $(P)$(R)TSAveragingTime_RBV
- ao
- ai
- TSNumAverage - asynInt32 - r/o - The number of time points from the driver that will be averaged in the plugin. This - is computed from TSAveragingTime/TSTimePerPoint. It is constrained to be the nearest - positive integer to this ratio. - TS_NUM_AVERAGE - $(P)$(R)TSNumAverage - longin
- TSElapsedTime - asynFloat64 - r/w - The elapsed time since TSAcquire was set to 1. Stops updating when TSAcquire goes - to 0. - TS_ELAPSED_TIME - $(P)$(R)TSElapsedTime - ai
- TSTimeAxis - asynFloat64ArrayIn - r/o - A waveform record containing the time value of each point in the TimeSeries waveforms.
- When AcquireMode="Fixed length" then time=0 is the time when acquisition - started and -
- TSTimeAxis[i] = TSAveragingTime_RBV * i. -
- When AcquireMode="Circ. buffer" then time=0 is the most recent time and -
- TSTimeAxis[i] = -TSAveragingTime_RBV * (NumTimePoints-1-i)
- so the oldest time point is the most negative.
- TS_TIME_AXIS - $(P)$(R)TSTimeAxis - waveform
- TSTimeStamp - asynFloat64ArrayIn - r/o - A waveform record containing the NDArray timestamp for each sample from the input - NDArray. Note that since multiple time points can be contained in a single NDArray - there can be repeated values in this waveform. Assuming the driver provides a reliable - value for TSTimePerPoint described above, then the TSTimeAxis waveform provides - a more accurate relative time array to use in plotting. The values in this waveform - are absolute timestamps which can also be useful. - TS_TIMESTAMP - $(P)$(R)TSTimestamp - waveform
-

-
-

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Parameters for each signal N. -
- Parameter Definitions in NDPluginTimeSeries.h and EPICS Record Definitions in NDTimeSeriesN.template
-
- Parameter index variable - asyn interface - Access - Description - drvInfo string - EPICS record name - EPICS record type
- TSSignalName - N.A. - r/w - The name for this signal. - N.A. - $(P)$(R)SignalName - stringout
- TSTimeSeries - asynFloat64ArrayIn - r/o - The time series data arrays. - TS_TIME_SERIES - $(P)$(R)TimeSeries - waveform
-

- Configuration

-

- The NDPluginTimeSeries plugin is created with the NDTimeSeriesConfigure function, - either from C/C++ or from the EPICS IOC shell.

-
NDTimeSeriesConfigure(const char *portName, int queueSize, int blockingCallbacks, 
-                          const char *NDArrayPort, int NDArrayAddr, int maxSignals,
-                          int maxBuffers,  size_t maxMemory, int priority, int stackSize)
-  
-

- All but the maxSignals parameter are common to all plugins.

-

- maxSignals defines how many signals this plugin will deal with. Usually this will - match the number of NDTimeSeriesN templates have been loaded.

-

- For example: -
- NDTimeSeriesConfigure("TS1", 100, 0, "DET1", 0, 8, 0, 0, 0, 0) -

-

- Screen shots

-

- The following MEDM screen provides access to the parameters in NDPluginDriver.h - and NDPluginTimeSeries.h through records in NDPluginBase.template, and NDTimeSeries.template. -

-
-

- NDPluginTimeSeries.adl

- NDPluginTimeSeries.png -
-

- The following MEDM screen shows the time series plot for an array in NDPluginTimeSeriesN.template. -

-
-

- Time-series plot

- NDTimeSeriesPlot.png -
- - diff --git a/documentation/NDPluginTimeSeries.png b/documentation/NDPluginTimeSeries.png deleted file mode 100755 index 0312b0c13..000000000 Binary files a/documentation/NDPluginTimeSeries.png and /dev/null differ diff --git a/documentation/NDPluginTransform.html b/documentation/NDPluginTransform.html deleted file mode 100644 index a99db752b..000000000 --- a/documentation/NDPluginTransform.html +++ /dev/null @@ -1,247 +0,0 @@ - - - - areaDetector Plugin NDPluginTransform - - - -
-

- areaDetector Plugin NDPluginTransform

-

- August 30, 2014

-

- Christian Roehrig, Mark Rivers, John Hammonds

-

- Argonne National Laboratory

-
-

- Contents

- -

- Overview -

-

- This plugin provides 8 choices for image transforms that involve rotations by multiples - of 90 degrees and mirror reflections about the central vertical line of the image. - The plugin supports only 2-D monochrome and color images (RGB1, RGB2, and RGB3).

-

- NDPluginTransform inherits from NDPluginDriver. The - NDPluginTransform class documentation describes this class in detail. -

-

- NDPluginTransform.h defines the following parameters. It also implements all of - the standard plugin parameters from NDPluginDriver. - The EPICS database NDransform.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 NDPluginTransformType. -

- - - - - - - - - - - - - - - - - - - - - - - - -
- Parameter Definitions in NDPluginTransform.h and EPICS Record Definitions in NDTransform.template -
- Parameter index variable - asyn interface - Access - Description - drvInfo string - EPICS record name - EPICS record type
- NDPluginTransform
- Type
- asynInt32 - r/w - Type of transform - TRANSFORM_TYPE - $(P)$(R)Type. Choices are: -
    -
  • None: No transform, the output image is the same as the input image.
  • -
  • Rot90: Rotate clockwise 90 degrees.
  • -
  • Rot180: Rotate clockwise 180 degrees.
  • -
  • Rot270: Rotate clockwise 270 degrees; equivalent to counter-clockwise rotation - by 90 degrees.
  • -
  • Mirror: Mirror reflection about the central column in the image.
  • -
  • Rot90Mirror: Rot90 followed by Mirror. Equivalent to image transpose, swapping - rows and columns.
  • -
  • Rot180Mirror: Rot180 followed by Mirror. Equivalent to a mirror reflection about - the central row in the image.
  • -
  • Rot270Mirror: Rot270 followed by Mirror. Equivalent to image transpose followed - by mirror reflection about the central column in the image.
  • -
-
- mbbo
-

- Configuration

-

- The NDPluginTransform plugin is created with the NDTransformConfigure command, either - from C/C++ or from the EPICS IOC shell.

-
NDTransformConfigure(const char *portName, int queueSize, int blockingCallbacks,
-               const char *NDArrayPort, int NDArrayAddr,
-               int maxBuffers, size_t maxMemory,
-               int priority, int stackSize)
-  
-

- For details on the meaning of the parameters to this function refer to the detailed - documentation on the NDTransformConfigure function in the - NDPluginROI.cpp documentation and in the documentation for the constructor - for the NDPluginTransform - class. -

-

- Screen shots

-

- The following MEDM screen provides access to the parameters in NDPluginDriver.h - and NDPluginTransform.h through records in NDPluginBase.template and NDTransform.template. - The orientation of the letter F on the screen shows what each transform type does. -

-
-

- NDTransform.adl

- NDTransform.png -
-

- Performance -

-

- The following is a measurement of the performance of the NDPluginTransform plugin - in release R2-1. The measurements were done with the simDetector on an 8-core Linux - machine. All plugins except the NDPluginTransform plugin were disabled. The simDetector - was generating about 680 frames/s in mono mode and about 190 frames/s in RGB1 mode. - The plugin was thus always dropping frames except when the transformation was None - in mono and RGB1 mode, and when the transformation was Rot180Mirror in mono mode.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Performance (frames/s)
- Dimensions - Transformation - 8-bit Mono - 8-bit RGB1
- 1024 x 1024 - None - 680 - 190
- 1024 x 1024 - Rot90 - 115 - 40
- 1024 x 1024 - Rot180 - 145 - 52
- 1024 x 1024 - Rot270 - 105 - 41
- 1024 x 1024 - Mirror - 152 - 56
- 1024 x 1024 - Rot90Mirror - 116 - 40
- 1024 x 1024 - Rot180Mirror - 680 - 75
- 1024 x 1024 - Rot270Mirror - 111 - 41
-

- Note that this performance with ADCore R2-1 and later is dramatically improved from - R2-0 and earlier. For example, in R2-0 with 1024 x 1024 8-bit mono images the frame - rate for all transformations (including None) was only 8 frames/s. With 8-bit RGB1 - the frame rate for all transformations was only 3 frames/s. Thus, R2-1 improves - the performance by a factor of 13-85 compared to previous versions.

- - diff --git a/documentation/NDPosPlugin.html b/documentation/NDPosPlugin.html deleted file mode 100644 index 5d5a5afb6..000000000 --- a/documentation/NDPosPlugin.html +++ /dev/null @@ -1,439 +0,0 @@ - - - - areaDetector Plugin NDPosPlugin - - - -
-

- areaDetector Plugin NDPosPlugin

-

- July 8, 2015

-

- Alan Greer (Observatory Sciences)

-
-

- NDPosPlugin can be used to attach positional information to NDArrays in the form - of NDAttributes. This plugin accepts an XML description of the position data and - then attaches each position to NDArrays as they are passed through the plugin. Each - position can contain a set of index values and each index is attached as a separate - NDAttribute. The plugin operates using a FIFO and new positions can be added to - the queue while the plugin is actively attaching position data. When used in conjunction - with the HDF5 writer (NDFileHDF5) it is possible to - store NDArrays in an arbitrary pattern within a multi-dimensional dataset. -

-

- The NDPosPlugin plugin is created with the NDPosPluginConfigure command, either - from C/C++ or from the EPICS IOC shell.

-
NDPosPluginConfigure (const char *portName, int queueSize, int blockingCallbacks, 
-                     const char *NDArrayPort, int NDArrayAddr, size_t maxMemory, 
-                     int priority, int stackSize)
-  
-

- For details on the meaning of the parameters to this function refer to the detailed - documentation on the NDPosPluginConfigure function in the - NDPosPlugin.cpp documentation and in the documentation for the constructor - for the NDPosPlugin class.

-

- XML Defined Positions -

-

- The position data is supplied to the plugin as an XML description. The parameter - NDPos_Filename can either accept the full path to an XML file with the position - data description, or the XML can be injected directly into the parameter. There - is a 1,000,000 byte limit on the parameter, but multiple injections can take place - in sequence with each set of points appended to the FIFO. -

-

- The XML definition contains the following 4 main elements: dimensions, dimension, - positions, and position. -

- -

- The XML can contain any number of dimension elements (grouped within the dimensions - element), and each dimension must contain a single attribute name that names - the particular dimension. Once the dimensions have been defined, the position elements - are added. The XML can contain any number of position elements (grouped within the - positions element). Each position element should have an attribute for each of the - named dimensions with the value of the position for that dimension. An example of - a simple XML description is presented below:

-
      
-<pos_layout>
-    <dimensions>
-        <dimension name="x"></dimension>
-        <dimension name="y"></dimension>
-        <dimension name="z"></dimension>
-    </dimensions>
-    <positions>
-        <position x="0" y="0" z="0"></position>
-        <position x="0" y="0" z="1"></position>
-        <position x="0" y="1" z="0"></position>
-        <position x="0" y="1" z="1"></position>
-        <position x="1" y="0" z="0"></position>
-        <position x="1" y="0" z="1"></position>
-        <position x="1" y="1" z="0"></position>
-        <position x="1" y="1" z="1"></position>
-    </positions>
-</pos_layout>
-
-

- In the example above, three dimensions have been defined (x, y and z). The positions - are then defined with value for each dimension provided. This XML description will - result in three NDAttriubtes being attached to each NDArray, with the names x, y - and z respectively. The value of each of the NDAttributes will be set according - to the position that is currently at the front of the FIFO. -

-

- A complete example XML layout file is provided in "ADCore/iocBoot/pos_plugin_demo.xml".

-

- An XML schema is provided in "ADCore/iocBoot/pos_plugin_schema.xsd". The schema - defines the syntax that is allowed in the user's XML definition. It can also be - used with the 'xmllint' command to validate a user's XML definition: -

-
xmllint --noout --schema ADCore/iocBoot/pos_plugin_schema.xsd /path/to/users/layout.xml
-

- Using the plugin -

-

- The plugin offers two modes of operation: Discard and Keep. When executed - in discard mode the plugin will throw away a position every time it is attached - to an NDArray, and the FIFO will continue to decrease in size until it reaches zero. - When executed in Keep mode the positions will still be sent in order but they will - not be discarded. A parameter can be used to reset the current position to the start - and then the same set can be reused. The position attachment can be started and - stopped, and the FIFO can be cleared. A record of the number of positions in the - FIFO, the current index and a string representation of the last position sent are - provided through the parameter interface. -

-

- Frame Identification tracking -

-

- The plugin tracks frame information to ensure that the incoming frames are in the - correct order and there are no missing or duplicated frames. This is achieved using - three parameters, IDName, IDStart and IDDifference. The IDName - tells the plugin which incoming attribute to use as the ID to track, or if it is - left empty then the uniqueId member variable of the NDArray is used. The IDStart - value informs this plugin of the first expected ID when the acquisition is started, - and the IDDifference informs this plugin of the expected delta ID between each frame. - An IDStart of 5 and IDDifference of 10 would result in the plugin expecting the - following sequence of ID values attached to the incoming frames: 5,15,25,35... If - incoming frames contain IDs that are greater than the expected ID then the plugin - will print a warning and throw away any position information up until the expected - ID matches the frame ID; this is a case where the frames are assumed to have been - dropped. If incoming frames contain IDs that are less than the exptected ID then - the plugin will print an error and drop the frames until the incoming frame ID matches - the expected ID. This is a more serious case of the plugin dropping frames and this - is why the error is printed. In both of these error situations the plugin will record - the event into the corresponding counter and continue to process frames. -

-

- Parameters and Records -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Parameter Definitions and EPICS Record Definitions in NDPosPlugin.template -
- Parameter index variable - asyn interface - Access - Description - drvInfo string - EPICS record name - EPICS record type
- XML Position Definition
- NDPos_Filename - asynOctet - r/w - XML filename, pointing to an XML position set description
- This waveform also supports loading raw XML code directly; up to a maximum of 1,000,000 - Bytes long (NELM=1,000,000).
- NDPos_Filename - $(P)$(R)FileName
- $(P)$(R)FileName_RBV
- waveform
- NDPos_FileValid - asynInt32 - r/o - Flag to report the validity (xml syntax only) of the loaded XML. Updated when the - NDPos_Filename is updated with a new filename. - NDPos_FileValid - $(P)$(R)FileValid_RBV - bi
- Execution
- NDPos_Running - asynInt32 - r/w - Start or stop appending of position data to NDArrays. - NDPos_Running - $(P)$(R)Running
- $(P)$(R)Running_RBV
- busy
- bi
- NDPos_Restart - asynInt32 - r/w - Reset the current position index to zero (front of FIFO) when executing in Keep - mode. Has no effect if executing in Discard mode. - NDPos_Restart - $(P)$(R)Reset - bo
- NDPos_Delete - asynInt32 - r/w - Delete any position data in the FIFO. If the plugin is running then this will stop - the plugin. The size and current index will both be set to zero. - NDPos_Delete - $(P)$(R)Delete - bo
- NDPos_Mode - asynInt32 - r/w - Select the mode of operation, Discard or Keep. Discard mode throws - away each position once it has been attached to an NDArray, whereas Keep mode keeps - the value and traverses through the FIFO, reatining all position data. - NDPos_Mode - $(P)$(R)Mode
- $(P)$(R)Mode_RBV
- bo
- bi
- NDPos_IDName - asynOctet - r/w - Use this attribute name for the incoming frame IDs. If this parameter is left empty - then the incoming frame's uniqueId is used for the index count. - NDPos_IDName - $(P)$(R)IDName
- $(P)$(R)IDName_RBV
- stringout
- stringin
- NDPos_IDStart - asynInt32 - r/w - When a new acquisition is started this value is the expected ID for the first processed - frame. - NDPos_IDName - $(P)$(R)IDStart
- $(P)$(R)IDStart_RBV
- longout
- longin
- NDPos_IDDifference - asynInt32 - r/w - This value represents the delta ID between each processed frame, and is useful is - frames are processed by plugins before reaching this plugin (eg integration of several - frames into one). If the start ID is set to 1 and this parameter is set to 2 then - the expected IDs would be 1,3,5,7,9.... - NDPos_IDDifference - $(P)$(R)IDDifference
- $(P)$(R)IDDifference_RBV
- longout
- longin
- Information
- NDPos_CurrentQty - asynInt3264 - r/o - Current number of position points in the FIFO. - NDPos_CurrentQty - $(P)$(R)Qty_RBV - longin
- NDPos_CurrentIndex - asynInt32 - r/o - Current index of pointer to position within FIFO (0 for Discard mode). - NDPos_CurrentIndex - $(P)$(R)Index_RBV - longin
- NDPos_CurrentPos - asynOctet - r/o - String representation of the last position to be attached to an NDArray. - NDPos_CurrentPos - $(P)$(R)Position_RBV - stringin
- NDPos_MissingFrames - asynInt32 - r/w - Counter of the number of missed/dropped frames. Write a 0 to the parameter to reset. - - NDPos_MissingFrames - $(P)$(R)Missing
- $(P)$(R)Missing_RBV
- longout
- longin
- NDPos_DuplicateFrames - asynInt32 - r/w - Counter of the number of duplicated frames. Write a 0 to the parameter to reset. - - NDPos_DuplicateFrames - $(P)$(R)Duplicate
- $(P)$(R)Duplicate_RBV
- longout
- longin
-
-

- NDPosPlugin.edl

-

- NDPosPlugin.png

-
- - diff --git a/documentation/NDPosPlugin.png b/documentation/NDPosPlugin.png deleted file mode 100644 index 861490a82..000000000 Binary files a/documentation/NDPosPlugin.png and /dev/null differ diff --git a/documentation/NDProcess.png b/documentation/NDProcess.png deleted file mode 100755 index 574a3e83c..000000000 Binary files a/documentation/NDProcess.png and /dev/null differ diff --git a/documentation/NDProcessTIFF.png b/documentation/NDProcessTIFF.png deleted file mode 100755 index 21b79e231..000000000 Binary files a/documentation/NDProcessTIFF.png and /dev/null differ diff --git a/documentation/NDProcess_filtered.jpg b/documentation/NDProcess_filtered.jpg deleted file mode 100755 index 087143be9..000000000 Binary files a/documentation/NDProcess_filtered.jpg and /dev/null differ diff --git a/documentation/NDProcess_unfiltered.jpg b/documentation/NDProcess_unfiltered.jpg deleted file mode 100755 index 6fe83f829..000000000 Binary files a/documentation/NDProcess_unfiltered.jpg and /dev/null differ diff --git a/documentation/NDPva.png b/documentation/NDPva.png deleted file mode 100755 index 1f5ab1731..000000000 Binary files a/documentation/NDPva.png and /dev/null differ diff --git a/documentation/NDPva_Performance.png b/documentation/NDPva_Performance.png deleted file mode 100644 index 84be3e26e..000000000 Binary files a/documentation/NDPva_Performance.png and /dev/null differ diff --git a/documentation/NDROI.png b/documentation/NDROI.png deleted file mode 100755 index 2472d1ec0..000000000 Binary files a/documentation/NDROI.png and /dev/null differ diff --git a/documentation/NDROI4.png b/documentation/NDROI4.png deleted file mode 100755 index 2058666c0..000000000 Binary files a/documentation/NDROI4.png and /dev/null differ diff --git a/documentation/NDROIStat.png b/documentation/NDROIStat.png deleted file mode 100755 index 059ca4380..000000000 Binary files a/documentation/NDROIStat.png and /dev/null differ diff --git a/documentation/NDROIStat8.png b/documentation/NDROIStat8.png deleted file mode 100755 index f08991b90..000000000 Binary files a/documentation/NDROIStat8.png and /dev/null differ diff --git a/documentation/NDROIStatN.png b/documentation/NDROIStatN.png deleted file mode 100755 index 137346522..000000000 Binary files a/documentation/NDROIStatN.png and /dev/null differ diff --git a/documentation/NDROIStatTimeSeriesMean.png b/documentation/NDROIStatTimeSeriesMean.png deleted file mode 100755 index 8eb2be3fd..000000000 Binary files a/documentation/NDROIStatTimeSeriesMean.png and /dev/null differ diff --git a/documentation/NDScatter.png b/documentation/NDScatter.png deleted file mode 100755 index 9c43b2d1f..000000000 Binary files a/documentation/NDScatter.png and /dev/null differ diff --git a/documentation/NDStats.png b/documentation/NDStats.png deleted file mode 100755 index 38816d2ad..000000000 Binary files a/documentation/NDStats.png and /dev/null differ diff --git a/documentation/NDStats5.png b/documentation/NDStats5.png deleted file mode 100755 index 321efb8c8..000000000 Binary files a/documentation/NDStats5.png and /dev/null differ diff --git a/documentation/NDStatsTimeSeriesBasicAll.png b/documentation/NDStatsTimeSeriesBasicAll.png deleted file mode 100755 index 951b865b7..000000000 Binary files a/documentation/NDStatsTimeSeriesBasicAll.png and /dev/null differ diff --git a/documentation/NDStatsTimeSeriesCentroidAll.png b/documentation/NDStatsTimeSeriesCentroidAll.png deleted file mode 100755 index 7a5e6cf71..000000000 Binary files a/documentation/NDStatsTimeSeriesCentroidAll.png and /dev/null differ diff --git a/documentation/NDStatsTimeSeriesCentroidY.png b/documentation/NDStatsTimeSeriesCentroidY.png deleted file mode 100755 index 0bd42b821..000000000 Binary files a/documentation/NDStatsTimeSeriesCentroidY.png and /dev/null differ diff --git a/documentation/NDStatsTimeSeriesTotal.png b/documentation/NDStatsTimeSeriesTotal.png deleted file mode 100755 index 76631152e..000000000 Binary files a/documentation/NDStatsTimeSeriesTotal.png and /dev/null differ diff --git a/documentation/NDStats_AverageX.png b/documentation/NDStats_AverageX.png deleted file mode 100755 index cf32e7461..000000000 Binary files a/documentation/NDStats_AverageX.png and /dev/null differ diff --git a/documentation/NDStats_CursorY.png b/documentation/NDStats_CursorY.png deleted file mode 100755 index 04857610d..000000000 Binary files a/documentation/NDStats_CursorY.png and /dev/null differ diff --git a/documentation/NDStats_Histogram.png b/documentation/NDStats_Histogram.png deleted file mode 100755 index 695fa0ab7..000000000 Binary files a/documentation/NDStats_Histogram.png and /dev/null differ diff --git a/documentation/NDStats_filtered.png b/documentation/NDStats_filtered.png deleted file mode 100755 index c1e57e138..000000000 Binary files a/documentation/NDStats_filtered.png and /dev/null differ diff --git a/documentation/NDStats_unfiltered.png b/documentation/NDStats_unfiltered.png deleted file mode 100755 index a6dd93781..000000000 Binary files a/documentation/NDStats_unfiltered.png and /dev/null differ diff --git a/documentation/NDStdArrays.png b/documentation/NDStdArrays.png deleted file mode 100755 index 68c184afe..000000000 Binary files a/documentation/NDStdArrays.png and /dev/null differ diff --git a/documentation/NDTimeSeriesAll.png b/documentation/NDTimeSeriesAll.png deleted file mode 100755 index c8343e501..000000000 Binary files a/documentation/NDTimeSeriesAll.png and /dev/null differ diff --git a/documentation/NDTimeSeriesCentroidY.png b/documentation/NDTimeSeriesCentroidY.png deleted file mode 100644 index 115fffe80..000000000 Binary files a/documentation/NDTimeSeriesCentroidY.png and /dev/null differ diff --git a/documentation/NDTimeSeriesPlot.png b/documentation/NDTimeSeriesPlot.png deleted file mode 100755 index d091e53b0..000000000 Binary files a/documentation/NDTimeSeriesPlot.png and /dev/null differ diff --git a/documentation/NDTimeSeriesPlotFFTImaginary.png b/documentation/NDTimeSeriesPlotFFTImaginary.png deleted file mode 100755 index 719db6f97..000000000 Binary files a/documentation/NDTimeSeriesPlotFFTImaginary.png and /dev/null differ diff --git a/documentation/NDTimeSeriesPlotFFTReal.png b/documentation/NDTimeSeriesPlotFFTReal.png deleted file mode 100755 index 6a8b268df..000000000 Binary files a/documentation/NDTimeSeriesPlotFFTReal.png and /dev/null differ diff --git a/documentation/NDTimeSeriesTotal.png b/documentation/NDTimeSeriesTotal.png deleted file mode 100644 index cf3e2181a..000000000 Binary files a/documentation/NDTimeSeriesTotal.png and /dev/null differ diff --git a/documentation/NDTransform.png b/documentation/NDTransform.png deleted file mode 100755 index 4db27c024..000000000 Binary files a/documentation/NDTransform.png and /dev/null differ diff --git a/documentation/PluginPerformance.pdf b/documentation/PluginPerformance.pdf deleted file mode 100755 index d4abb0974..000000000 Binary files a/documentation/PluginPerformance.pdf and /dev/null differ diff --git a/documentation/ROI_outlines.png b/documentation/ROI_outlines.png deleted file mode 100755 index 61eca82ba..000000000 Binary files a/documentation/ROI_outlines.png and /dev/null differ diff --git a/documentation/ReleaseChecklist.txt b/documentation/ReleaseChecklist.txt deleted file mode 100644 index c1d488671..000000000 --- a/documentation/ReleaseChecklist.txt +++ /dev/null @@ -1,39 +0,0 @@ -Release checklist for ADCore - -- Look at Issues and Pull Requests on Github - -- Update release number in ADCoreVersion.h - -- Make new version of areaDetector, change areaDetector-RXXX directory name, -and change version number in areaDetector/configure/EXAMPLE_RELEASE_LIBS.local and EXAMPLE_RELEASE_PRODS.local. - -- Run areaDetector/configure/diffFromExample and see if EXAMPLE files should be updated - -- Update areaDetector/docs/Doxyfile with the new areaDetector version - -- Run "make" in the areaDetector/docs directory and fix any warnings for ADCore - -- Make sure that RELEASE.md has everything for this release, including the date. - -- Check in everything to git repository - -- Do "make clean uninstall", "make" on the following platforms: - win32-x86: rivers-mobile2 - win32-x86-static: rivers-mobile2 - windows-x64: rivers-mobile2 - windows-x64-static: rivers-mobile2 - linux-x86: corvette (this also builds for vxWorks 6.9) - linux-x86_64: corvette - linux-x86-rhel6: gse-pilatus3 - linux-x86_64-rhel6: gse-pilatus3 - linux-x86_64-gcc42: gse-pilatus1 - Optional: - darwin-x86: chemmatmac1 - -- Run the unit tests in ADCore/ADApp/pluginTests - -- Verify that the APS Jenkins build server built successfully on all architectures - -- Make the git repository tag with "git tag RX-Y", "git push --tags" - -- Build any standalone versions required diff --git a/documentation/ad_cam_image.png b/documentation/ad_cam_image.png deleted file mode 100644 index 60655404f..000000000 Binary files a/documentation/ad_cam_image.png and /dev/null differ diff --git a/documentation/areaDetector.html b/documentation/areaDetector.html deleted file mode 100755 index 956c7cfd7..000000000 --- a/documentation/areaDetector.html +++ /dev/null @@ -1,1927 +0,0 @@ - - - - areaDetector: EPICS software for area detectors - - - -

- areaDetector: EPICS software for area detectors

-

- Module Owner: Mark Rivers: University of Chicago

-

- This page is the home of areaDetector, an application for controlling area - (2-D) detectors, including CCDs, pixel array detectors, and online imaging plates. -

-

- NOTE: This module replaces the - ccd and pilatusROI - modules. These older modules will no longer be supported, and users are encouraged - to convert to this new areaDetector software.

-

- Devices supported in areaDetector include:

-

- From ADSC -

- -

- From Allied Vision Technologies (formerly - Prosilica) -

- -

- From Andor Technology -

- -

- From Axis Communications and many other manufacturers.

- -

- From Bruker

- -

- From Dectris -

- -

- From Marresearch GmbH

- -

- From Perkin Elmer

- -

- From Pixirad

- -

- From Photonic Science

- -

- From Point Grey Research - and many other manufacturers

- -

- From Point Grey Research/FLIR -

- -

- From Point Grey Research/FLIR -

- -

- From Rayonix (formely Mar-USA)

- -

- From Roper

- -

- Please email any comments and bug reports to - Mark Rivers who is responsible for coordinating development and releases.

-

- areaDetector camera drivers supplied by 3rd parties

-

- Some areaDetector support have been developed by others. These are not distributed - with the areaDetector releases (source or binary) and are not directly supported - by the areaDetector working group, but may be useful for users:

-

- From ImXPAD

- -

- Where to find it

-

- Beginning with release R2-0 (March 2014) the areaDetector module is in the - areaDetector project on Github. This project is organized as a - top level module and a set of submodules, e.g. - ADCore, ADProsilica, - ADPilatus, etc.

-

- The following table provides links to the github repository, the documentation, - and pre-built binaries. -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Github repository - - Description - - Documentation - - Release Notes - - Pre-built binaries -
- areaDetector - - Top-level module; ADCore, ADSupport, ADProsilica, etc. go under this - - areaDetectorDoc - - Release - Notes - - N.A. -
- ADCore - - Base classes, plugins, simulation detector - - areaDetectorDoc - - Release Notes - - Pre-built binaries -
- ADSupport - - Source code for support libraries (TIFF, JPEG, NETCDF, HDF5, etc.) - - N.A. - - Release - Notes - - N.A. -
- ADADSC - - Driver for ADSC detectors - - adscDoc - - Release Notes - - Pre-built binaries -
- ADAndor - - Driver for Andor CCD detectors - - andorDoc - - Release Notes - - Pre-built binaries -
- ADAndor3 - - Driver for Andor sCMOS detectors - - andor3Doc - - Release - Notes - - Pre-built binaries -
- ADBruker - - Driver for Bruker detectors using the Bruker Instrument Server (BIS) - - BrukerDoc - - Release - Notes - - Pre-built binaries -
- ADCameraLink - - Drivers for Silicon Software and Dalsa/Coreco frame grabbers - - ADCameraLinkDriver - - Release - Notes - - N.A. -
- ADCSimDetector - - Driver for ADC simulation - - ADCSimDetectorDoc - - Release - Notes - - Pre-built binaries -
- ADDexela - - Driver for Perkin Elmer Dexela detectors - - DexelaDoc - - Release - Notes - - Pre-built binaries -
- ADFastCCD - - Driver for APS/LBL Fast CCD detector - - N.A. - - Release - Notes - - N.A. -
- ADFireWireWin - - Driver for Firewire DCAM detectors on Windows using the Carnegie Mellon Firewire - driver - - FirewireWinDoc - - Release - Notes - - Pre-built binaries -
- ADLambda - - Driver for Lambda detectors - - N.A. - - Release - Notes - - N.A. -
- ADLightField - - Driver for Princeton Instruments detectors using their LightField application - - LightFieldDoc - - Release - Notes - - N.A. -
- ADmar345 - - Driver for the mar345 image plate detector - - Mar345Doc - - Release - Notes - - Pre-built binaries -
- ADmarCCD - - Driver for CCD detectors from Rayonix (formerly Mar-USA) - - MarCCDDoc - - Release - Notes - - Pre-built binaries -
- ADMerlin - - Driver for Merlin detectors from Quantum Detectors - - N.A. - - Release - Notes - - N.A. -
- ADMythen - - Driver for Mythen detectors from Dectris - - N.A. - - Release - Notes - - N.A. -
- ADnED - - Driver for neutron event data - - N.A. - - Release Notes - - N.A. -
- ADPCO - - Driver for PCO detectors - - PCODriver - - Release Notes - - N.A. -
- ADPerkinElmer - - Driver for Perkin Elmer flat-panel detectors - - PerkinElmerDoc - - Release - Notes - - Pre-built binaries -
- ADPICam - - Driver for Princeton Instruments detectors using the PICam library - - PICamDoc - - Release Notes - - N.A. -
- ADPilatus - - Driver for Pilatus pixel-array detectors - - PilatusDoc - - Release - Notes - - Pre-built binaries -
- ADPixirad - - Driver for Pixirad pixel-array detectors - - PixiradDoc - - Release - Notes - - Pre-built binaries -
- ADPointGrey - - Driver for Point Grey Research cameras - - PointGreyDoc - - Release - Notes - - Pre-built binaries -
- ADProsilica - - Driver for Allied Vision Technologies (formerly Prosilica) cameras - - prosilicaDoc - - Release - Notes - - Pre-built binaries -
- ADPSL - - Driver for Photonic Science detectors - - PSLDoc - - Release Notes - - Pre-built binaries -
- ADPvCam - - Driver for Photometics and Princeton Instruments detectors using the PvCam library - - pvcamDoc - - Release Notes - - Pre-built binaries -
- ADQImaging - - Driver for QImaging detectors - - QImagingDoc - - Release - Notes - - Pre-built binaries -
- ADRoper - - Driver for Princeton Instruments and Photometics detectors using the WinView/WinSpec - programs - - RoperDoc - - Release Notes - - Pre-built binaries -
- ADSimDetector - - Driver for simulation detector - - simDetectorDoc - - Release - Notes - - Pre-built binaries -
- ADURL - - Driver for reading images from any URL using the GraphicsMagick library - - URLDriverDoc - - Release Notes - - Pre-built binaries -
- aravisGigE - - Driver using the GNOME Aravis library for Genicam GigE cameras - - README - - Release Notes - - N.A. -
- ffmpegViewer - - A stand-alone Qt4 application to display a stream of ffmpeg compressed images - - README - - N.A - - N.A. -
- ffmpegServer - - Plugin that use the ffmpeg libraries to compress a stream of images to files or - via an html service - - ffmpegServer - - Release Notes - - N.A. -
- firewireDCAM - - Driver for Firewire DCAM detectors on Linux - - README - - - Release Notes - - N.A. -
- NDDriverStdArrays - - Driver that allows EPICS Channel Access clients to create NDArrays in an IOC - - NDDriverStdArraysDoc - - - Release Notes - - Pre-built binaries -
- pvaDriver - - Driver that receives EPICS V4 NTNDArrays and converts them to NDArrays in an IOC - - pvaDriverDoc - - Release - Notes - - Pre-built binaries -
-

- Prior to release R2-0 the areaDetector module is in the - synApps Subversion repository at the APS. The "trunk" directory contains the - most recent unreleased code, while the "tags" directory contains the released versions. -

-

- For releases prior to R2-0 the software can be downloaded from the links in the - table below. The software is available both in source code form, and in pre-built - form so that it can be used without an EPICS build system. There are separate pre-built - binary packages for linux-x86, linux-x86_64, win32-x86, windows-x64, and cygwin-x86.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Module Version - - Release Date - - Source Code Filename - - Pre-built Filename - - Documentation - - Release Notes - - Known Problems -
- 1-9-1 - - 11-March-2013 - - areaDetectorR1-9-1.tgz - - - areaDetectorPrebuilt_R1-9-1_linux-x86.tgz
- - areaDetectorPrebuilt_R1-9-1_linux-x86-gcc43.tgz
- - areaDetectorPrebuilt_R1-9-1_linux-x86_64.tgz
- - areaDetectorPrebuilt_R1-9-1_linux-x86_64-gcc42.tgz
- - areaDetectorPrebuilt_R1-9-1_win32-x86.tgz
- - areaDetectorPrebuilt_R1-9-1_windows_x64.tgz
- - areaDetectorPrebuilt_R1-9-1_cygwin-x86.tgz
- - areaDetectorPrebuilt_R1-9-1_darwin-x86.tgz -
- areaDetectorDoc - - Release notes - - See release notes -
- 1-9 - - 27-February-2013 - - areaDetectorR1-9.tgz - - - areaDetectorPrebuilt_R1-9_linux-x86.tgz
- - areaDetectorPrebuilt_R1-9_linux-x86-gcc43.tgz
- - areaDetectorPrebuilt_R1-9_linux-x86_64.tgz
- - areaDetectorPrebuilt_R1-9_linux-x86_64-gcc42.tgz
- - areaDetectorPrebuilt_R1-9_win32-x86.tgz
- - areaDetectorPrebuilt_R1-9_windows_x64.tgz
- - areaDetectorPrebuilt_R1-9_cygwin-x86.tgz
- - areaDetectorPrebuilt_R1-9_darwin-x86.tgz -
- areaDetectorDoc - - Release notes - - See release notes -
- 1-8 - - 6-October-2012 - - areaDetectorR1-8.tgz - - - areaDetectorPrebuilt_R1-8_linux-x86.tgz
- - areaDetectorPrebuilt_R1-8_linux-x86-gcc43.tgz
- - areaDetectorPrebuilt_R1-8_linux-x86_64.tgz
- - areaDetectorPrebuilt_R1-8_linux-x86_64-gcc42.tgz
- - areaDetectorPrebuilt_R1-8_win32-x86.tgz
- - areaDetectorPrebuilt_R1-8_windows_x64.tgz
- - areaDetectorPrebuilt_R1-8_cygwin-x86.tgz -
- areaDetectorDoc - - Release notes - - See release notes -
- 1-7 - - 9-Aug-2011 - - areaDetectorR1-7.tgz - - - areaDetectorPrebuilt_R1-7_linux-x86.tgz
- - areaDetectorPrebuilt_R1-7_linux-x86_64.tgz
- - areaDetectorPrebuilt_R1-7_win32-x86.tgz
- - areaDetectorPrebuilt_R1-7_windows_x64.tgz
- - areaDetectorPrebuilt_R1-7_cygwin-x86.tgz -
- areaDetectorDoc - - Release notes - - See release notes -
- 1-6 - - 20-May-2010 - - areaDetectorR1-6.tgz - - areaDetectorPrebuilt_R1-6.tgz - - areaDetectorDoc - - Release notes - - See release notes -
- 1-5 - - 23-August-2009 - - areaDetectorR1-5.tgz - - areaDetectorPrebuilt_R1-5.tgz - - areaDetectorDoc - - Release notes - - See release notes -
- 1-4 - - 30-Jan-2009 - - areaDetectorR1-4.tgz - - areaDetectorPrebuilt_R1-4.tgz - - areaDetectorDoc - - Release notes - - See release notes -
- 1-3 - - 24-Nov-2008 - - areaDetectorR1-3.tgz - - areaDetectorPrebuilt_R1-3.tgz - - areaDetectorDoc - - Release notes - - See release notes -
- 1-2 - - 24-Oct-2008 - - areaDetectorR1-2.tgz - - N.A. - - areaDetectorDoc - - Release notes - - See release notes -
- 1-1 - - 10-May-2008 - - areaDetectorR1-1.tgz - - N.A. - - areaDetectorDoc - - Release notes - - See release notes -
- 1-0 - - 11-Apr-2008 - - areaDetectorR1-0.tgz - - N.A. - - areaDetectorDoc - - Release notes - - See release notes -
-

- Required Modules

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Module Version - - Requires module - - Release needed - - Required for -
- 1-9, 1-9-1 - - EPICS base - - 3.14.12.3 - - Base support -
- asyn - - 4-21 - - Socket and interface support -
- busy - - 1-4 - - busy record -
- calc - - 3-0 - - scalcout and sseq records, needed by sscan database and useful for other databases -
- sscan - - 2-8-1 - - sscan record -
- autosave - - 5-0 - - Save/restore -
- 1-8 - - EPICS base - - 3.14.12.2 (with all current patches) - - Base support -
- asyn - - 4-20 - - Socket and interface support -
- busy - - 1-4 - - busy record. This was formerly included in sscan, but now has its own support module. -
- calc - - 3-0 - - scalcout and sseq records, needed by sscan database and useful for other databases -
- sscan - - 2-8-1 - - sscan record -
- autosave - - 5-0 - - Save/restore -
- 1-7 - - EPICS base - - 3.14.12.1 - - Base support -
- asyn - - 4-17 - - Socket and interface support -
- busy - - 1-3 - - busy record. This was formerly included in sscan, but now has its own support module. -
- calc - - 2-8 - - scalcout record, needed by sscan database and useful for other databases -
- sscan - - 2-6-6 - - sscan record -
- mca - - 7-0 - - mca record for getting time sequence of Total or Net counts from statistics plugin -
- autosave - - 4-7 - - Save/restore -
- 1-6 - - EPICS base - - 3.14.11 - - Base support -
- asyn - - 4-13-1 - - Socket and interface support -
- busy - - 1-3 - - busy record. This was formerly included in sscan, but now has its own support module. -
- calc - - 2-8 - - scalcout record, needed by sscan database and useful for other databases -
- sscan - - 2-6-6 - - sscan record -
- mca - - 6-12-1 - - mca record for getting time sequence of Total or Net counts from statistics plugin -
- autosave - - 4-7 - - Save/restore -
- 1-5 - - EPICS base - - 3.14.10 - - Base support -
- asyn - - 4-12 - - Socket and interface support -
- busy - - 1-2 - - busy record. This was formerly included in sscan, but now has its own support module. -
- calc - - 2-7 - - scalcout record, needed by sscan database and useful for other databases -
- sscan - - 2-6-3 - - sscan record -
- mca - - 6-11 - - mca record for getting time sequence of ROI counts -
- autosave - - 4-5 - - Save/restore -
- 1-4 - - EPICS base - - 3.14.10 - - Base support -
- asyn - - 4-10 - - Socket and interface support -
- busy - - 1-1 - - busy record. This was formerly included in sscan, but now has its own support module. -
- calc - - 2-7 - - scalcout record, needed by sscan database and useful for other databases -
- sscan - - 2-6-3 - - sscan record -
- mca - - 6-10 - - mca record for getting time sequence of ROI counts -
- autosave - - 4-5 - - Save/restore -
- 1-3 - - EPICS base - - 3.14.10 - - Base support. 3.14.8.2 also works, but the bug in epicsRingPointer can be a problem - on multi-processor Linux systems. -
- asyn - - 4-10 - - Socket and interface support -
- calc - - 2-6-7 - - scalcout record, needed by sscan database and useful for other databases -
- sscan - - 2-6-2 - - sscan and busy records -
- mca - - 6-10 - - mca record for getting time sequence of ROI counts -
- autosave - - 4-4 - - Save/restore -
- 1-2 - - EPICS base - - 3.14.10 - - Base support. 3.14.8.2 also works, but the bug in epicsRingPointer can be a problem - on multi-processor Linux systems. -
- asyn - - 4-10 - - Socket and interface support -
- calc - - 2-6-5 - - scalcout record, needed by sscan database and useful for other databases -
- sscan - - 2-5-6 - - Busy record -
- mca - - 6-10 - - mca record for getting time sequence of ROI counts -
- autosave - - 4-3 - - Save/restore -
- 1-1 - - EPICS base - - 3.14.8.2 - - Base support -
- asyn - - 4-10 - - Socket and interface support -
- sscan - - 2-5-6 - - Busy record -
- autosave - - 4-3 - - Save/restore -
- 1-0 - - EPICS base - - 3.14.8.2 - - Base support -
- asyn - - 4-10 - - Socket and interface support -
- sscan - - 2-5-6 - - Busy record -
- autosave - - 4-3 - - Save/restore -
-

- Installation and Building

-

- For R2-0 and later this is described in the - INSTALL_GUIDE.md on Github. -

-

- For releases prior to R2-0 this is described in detail in the - installation section of the areaDetector documentation for that particular - release.

-

- Please email  Mark Rivers  - so that a record can be kept of which sites are using this software.

-

- In Use

-

- This software was originally developed by Mark Rivers.

- - - diff --git a/documentation/areaDetectorArchitecture.png b/documentation/areaDetectorArchitecture.png deleted file mode 100755 index d9bf710d6..000000000 Binary files a/documentation/areaDetectorArchitecture.png and /dev/null differ diff --git a/documentation/areaDetectorArchitecture.ppt b/documentation/areaDetectorArchitecture.ppt deleted file mode 100755 index 58c16ce5c..000000000 Binary files a/documentation/areaDetectorArchitecture.ppt and /dev/null differ diff --git a/documentation/areaDetectorArchitecture_README.txt b/documentation/areaDetectorArchitecture_README.txt deleted file mode 100755 index 770da75f9..000000000 --- a/documentation/areaDetectorArchitecture_README.txt +++ /dev/null @@ -1,8 +0,0 @@ -In current version of office: -Convert to PDF, then save PDF as PNG in Acrobat. File/Save As/Image/PNG/Settings to change to 600 DPI. - -In older version of office: - -To make the PNG file from the PPT file, select the entire page (^A), right click, Save as Picture, select PNG. - -Saving the slide as PNG with Save As works, but it is lower resolution so the text is ugly. diff --git a/documentation/areaDetectorDoc.html b/documentation/areaDetectorDoc.html deleted file mode 100755 index 7bca458ed..000000000 --- a/documentation/areaDetectorDoc.html +++ /dev/null @@ -1,2561 +0,0 @@ - - - - areaDetector: EPICS software for area detectors - - - - -
-

- areaDetector: EPICS Area Detector Support

-

- Release 3-4-0

-

- December 3, 2018

-

- Mark Rivers

-

- University of Chicago

-
-

- Contents

- -

-  

-

- Overview

-

- The areaDetector module provides a general-purpose interface for area (2-D) detectors - in EPICS. It is intended to be used - with a wide variety of detectors and cameras, ranging from high frame rate CCD and - CMOS cameras, pixel-array detectors such as the Pilatus, and large format detectors - like the Perkin Elmer flat panels.

-

- The goals of this module are: -

- -

-  

-

- Architecture

-

- The architecture of the areaDetector module is shown below.

-

- areaDetectorArchitecture.png

-

- From the bottom to the top this architecture consists of the following:

- -

- The code in Layers 1-3 is essentially independent of EPICS. In principle there are - only 2 EPICS dependencies in this code. -

-
    -
  1. libCom. - libCom from EPICS base provides operating-system independent functions for threads, - mutexes, etc.
  2. -
  3. asyn. asyn is a - module that provides interthread messaging services, including queueing and callbacks.
  4. -
-

- In particular it is possible to eliminate layers 4-6 in the architecture shown in - Figure 1. This means that it is not necessary to run an EPICS IOC or to use EPICS - Channel Access when using the drivers and plugins at Layers 2 and 3. This is demonstrated - in the simDetectorNoIOC application in ADSimDetector and in the unit tests in ADCore/ADApp/pluginTests. -

-

- The plugin architecture is very powerful, because new plugins can be written for - application-specific purposes. For example, a plugin could be written to analyze - images and do some application specific functions, and such a plugin would then - work with any detector driver. Plugins are also powerful because they can be reconfigured - at run-time. For example the NDPluginStdArrays can switch from getting its array - data from a detector driver to an NDPluginROI plugin. That way it will switch from - displaying the entire detector to whatever sub-region the ROI driver has selected. - Any Channel Access clients connected to the NDPluginStdArrays driver will automatically - switch to displaying this subregion. Similarly, the NDPluginFile plugin can be switched - at run-time from saving the entire image to saving a selected ROI, just by changing - its input source. Plugins can be used to form an image processing pipeline, for - example with a detector providing data to a color convert plugin, which feeds an - ROI plugin, which feeds a file saving plugin. Each plugin can run in its own thread, - and hence in its own cores on a modern multi-core CPU. -

-

- The use of plugins is optional, and it is only plugins that require the driver to - make callbacks with image data. If there are no plugins being used then EPICS can - be used simply to control the detector, without accessing the data itself. This - is most useful when the vendor provides an API has the ability to save the data - to a file and an application to display the images. -

-

- What follows is a detailed description of the software, working from the bottom - up. Most of the code is object oriented, and written in C++. -

-

- Implementation details

-

- The areaDetector module depends heavily on - asyn. It is the software that is used for interthread communication, using - the standard asyn interfaces (e.g. asynInt32, asynOctet, etc.), and callbacks. In - order to minimize the amount of redundant code in drivers, areaDetector has been - implemented using C++ classes. The base classes, from which drivers and plugins - are derived, take care of many of the details of asyn and other common code. -

-

- asynPortDriver

-

- Detector drivers and plugins are asyn port drivers, meaning that they implement - one or more of the standard asyn interfaces. They register themselves as interrupt - sources, so that they do callbacks to registered asyn clients when values change. - They inherit from the - asynPortDriver base C++ class that is provided in the asyn module. That base - class handles all of the details of registering the port driver, registering the - supported interfaces, and registering the required interrupt sources. It also provides - a parameter library for int, double, and string parameters indexed by the integer - index values defined in the driver. The parameter library provides methods to write - and read the parameter values, and to perform callbacks to registered clients when - a parameter value has changed. The - asynPortDriver class documentation describes this class in detail. -

-

- NDArray

-

- The NDArray (N-Dimensional array) is the class that is used for passing detector - data from drivers to plugins. An NDArray is a general purpose class for handling - array data. An NDArray object is self-describing, meaning it contains enough information - to describe the data itself. It can optionally contain "attributes" (class NDAttribute) - which contain meta-data describing how the data was collected, etc. -

-

- An NDArray can have up to ND_ARRAY_MAX_DIMS dimensions, currently 10. A fixed maximum - number of dimensions is used to significantly simplify the code compared to unlimited - number of dimensions. Each dimension of the array is described by an - NDDimension structure. The - NDArray class documentation describes this class in detail. -

-

- NDArrayPool

-

- The NDArrayPool class manages a free list (pool) of NDArray objects. Drivers allocate - NDArray objects from the pool, and pass these objects to plugins. Plugins increase - the reference count on the object when they place the object on their queue, and - decrease the reference count when they are done processing the array. When the reference - count reaches 0 again the NDArray object is placed back on the free list. This mechanism - minimizes the copying of array data in plugins. The - NDArrayPool class documentation describes this class in detail. -

-

- NDAttribute

-

- The NDAttribute is a class for linking metadata to an NDArray. An NDattribute has - a name, description, data type, value, source type and source information. Attributes - are identified by their names, which are case-sensitive. There are methods to set - and get the information for an attribute.

-

- It is useful to define some conventions for attribute names, so that plugins or - data analysis programs can look for a specific attribute. The following are the - attribute conventions used in current plugins:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Conventions for standard attribute names
- Attribute name - - Description - - Data type -
- ColorMode - Color mode of the NDArray. Used by many plugins to determine how to process the - array. - NDAttrInt32 (NDColorMode_t)
- BayerPattern - Bayer patter of an image collect by a color camera with a Bayer mask. Could be used - to convert to a an RGB color image. This capability may be added to NDPluginColorConvert. - - NDAttrInt32 (NDBayerPattern_t)
- DriverFilename - The name of the file originally collected by the driver. This is used by NDPluginFile - to delete the original driver file if the DeleteDriverFile flag is set and the NDArray - has been successfully saved in another file. - NDAttrString
- FilePluginDestination - This is used by NDPluginFile to determine whether to process this NDArray. If this - attribute is present and is "all" or the name of this plugin then the NDArray is - processed, otherwise it is ignored. - NDAttrString
- FilePluginFileName - This is used by NDPluginFile to set the file name when saving this NDArray. - NDAttrString
- FilePluginFileNumber - This is used by NDPluginFile to set the file number when saving this NDArray. - - NDAttrInt32
- FilePluginFileClose - This is used by NDPluginFile to close the file after processing this NDArray. - - NDAttrInt32
- [HDF dataset name] - This is used by NDFileHDF5 to determine which dataset in the file this NDArray should - be written to. The attribute name is the name of the HDF5 dataset. - NDAttrString
- [posName] - This is used by NDFileHDF5 to determine which position in the dataset this NDArray - should be written to. The attribute name is contained in a *PosName* record defined - in NDFileHDF5.template. This is designed to allow, for example, "snake scan" data - to be placed in the correct order in an HDF5 file. - NDAttrInt32
-

- Attribute names are case-sensitive. For attributes not in this table a good convention - would be to use the corresponding driver parameter without the leading ND or AD, - and with the first character of every "word" of the name starting with upper case. - For example, the standard attribute name for ADManufacturer should be "Manufacturer", - ADNumExposures should be "NumExposures", etc.

-

- The NDAttribute class documentation - describes this class in detail. -

-

- NDAttributeList

-

- The NDAttributeList implements a linked list of NDAttribute objects. NDArray objects - contain an NDAttributeList which is how attributes are associated with an NDArray. - There are methods to add, delete and search for NDAttribute objects in an NDAttributeList. - Each attribute in the list must have a unique name, which is case-sensitive. -

-

- When NDArrays are copied with the NDArrayPool methods the attribute list is also - copied. -

-

- IMPORTANT NOTE: When a new NDArray is allocated using NDArrayPool::alloc() the behavior - of any existing attribute list on the NDArray taken from the pool is determined - by the value of the global variable eraseNDAttributes. By default the - value of this variable is 0. This means that when a new NDArray is allocated from - the pool its attribute list is not cleared. This greatly improves - efficiency in the normal case where attributes for a given driver are defined once - at initialization and never deleted. (The attribute values may - of course be changing.) It eliminates allocating and deallocating attribute memory - each time an array is obtained from the pool. It is still possible to add new attributes - to the array, but any existing attributes will continue to exist even if they are - ostensibly cleared e.g. asynNDArrayDriver::readNDAttributesFile() is called again. - If it is desired to eliminate all existing attributes from NDArrays each time a - new one is allocated then the global variable eraseNDAttributes should - be set to 1. This can be done at the iocsh prompt with the command:

-
    var eraseNDAttributes 1
-    
-

- The NDAttributeList - class documentation describes this class in detail. -

-

- PVAttribute

-

- The PVAttribute class is derived from NDAttribute. It obtains its value by monitor - callbacks from an EPICS PV, and is thus used to associate current the value of any - EPICS PV with an NDArray. The - PVAttribute class documentation describes this class in detail. -

-

- paramAttribute

-

- The paramAttribute class is derived from NDAttribute. It obtains its value from - the current value of a driver or plugin parameter. The paramAttribute class is typically - used when it is important to have the current value of the parameter and the value - of a corresponding PVAttribute might not be current because the EPICS PV has not - yet updated. The paramAttribute - class documentation describes this class in detail. -

-

- functAttribute

-

- The functAttribute class is derived from NDAttribute. It obtains its value from - a user-written C++ function. The functAttribute class is thus very general, and - can be used to add almost any information to an NDArray. ADCore contains example - code, myAttributeFunctions.cpp that demonstates how to write such functions. The - functAttribute class documentation - describes this class in detail. -

-

- asynNDArrayDriver

-

- asynNDArrayDriver inherits from asynPortDriver. It implements the asynGenericPointer - functions for NDArray objects. This is the class from which both plugins and area - detector drivers are indirectly derived. The - asynNDArrayDriver class documentation describes this class in detail. -

-

- The file asynNDArrayDriver.h - defines a number of parameters that all NDArray drivers and plugins should implement - if possible. These parameters are defined by strings (drvInfo strings in asyn) with - an associated asyn interface, and access (read-only or read-write). There is also - an integer index to the parameter which is assigned by asynPortDriver when the parameter - is created in the parameter library. The EPICS database NDArrayBase.template provides - access to these standard driver parameters. The following table lists the standard - driver parameters. The columns are defined as follows: -

- -

- Note that for parameters whose values are defined by enum values (e.g NDDataType, - NDColorMode, etc.), drivers can use a different set of enum values for these parameters. - They can override the enum menu in ADBase.template with driver-specific choices - by loading a driver-specific template file that redefines that record field after - loading ADBase.template. -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Parameter Definitions in asynNDArrayDriver.h and EPICS Record Definitions in NDArrayBase.template - (file-related records are in NDFile.template)
- Parameter index variable - - asyn interface - - Access - - Description - - drvInfo string - - EPICS record name - - EPICS record type -
- Information about the version of ADCore and the plugin or driver
- NDADCoreVersion - asynOctet - r/o - ADCore version number. This can be used by Channel Access clients to alter their - behavior depending on the version of ADCore that was used to build this driver or - plugin. - ADCORE_VERSION - $(P)$(R)ADCoreVersion_RBV - stringin
- NDDriverVersion - asynOctet - r/o - Driver or plugin version number. This can be used by Channel Access clients to alter - their behavior depending on the version of the plugin or driver. - DRIVER_VERSION - $(P)$(R)DriverVersion_RBV - stringin
- Information about the asyn port
- NDPortNameSelf - asynOctet - r/o - asyn port name - PORT_NAME_SELF - $(P)$(R)PortName_RBV - stringin
- Data type
- NDDataType - asynInt32 - r/w - Data type (NDDataType_t). - DATA_TYPE - $(P)$(R)DataType
- $(P)$(R)DataType_RBV
- mbbo
- mbbi
- Color mode
- NDColorMode - asynInt32 - r/w - Color mode (NDColorMode_t). - COLOR_MODE - $(P)$(R)ColorMode
- $(P)$(R)ColorMode_RBV
- mbbo
- mbbi
- NDBayerPattern - asynInt32 - r/o - Bayer pattern (NDBayerPattern_t) of NDArray data. - BAYER_PATTERN - $(P)$(R)BayerPattern_RBV - mbbi
- Actual dimensions of array data
- NDNDimensions - asynInt32 - r/w - Number of dimensions in the array - ARRAY_NDIMENSIONS - $(P)$(R)NDimensions
- $(P)$(R)NDimensions_RBV
- longout -
- longin
- NDDimensions - asynInt32Array - r/w - Size of each dimension in the array - ARRAY_DIMENSIONS - $(P)$(R)Dimensions
- $(P)$(R)Dimensions_RBV
- waveform (out)
- waveform (in)
- N.A. - N.A - r/o - Size of each array dimension, extracted from the $(P)$(R)Dimensions and $(P)$(R)Dimensions_RBV - waveform records. Note that these are both longin record, i.e. readonly values using - subarray records. In the future longout records may be added to write to the individual - values in $(P)$(R)Dimensions. - N.A. - $(P)$(R)ArraySize[N] N=0-9 -
- (P)$(R)ArraySize[N]_RBV
- longin -
- longin
- NDArraySizeX - asynInt32 - r/o - Size of the array data in the X direction - ARRAY_SIZE_X - $(P)$(R)ArraySizeX_RBV - longin
- NDArraySizeY - asynInt32 - r/o - Size of the array data in the Y direction - ARRAY_SIZE_Y - $(P)$(R)ArraySizeY_RBV - longin
- NDArraySizeZ - asynInt32 - r/o - Size of the array data in the Z direction - ARRAY_SIZE_Z - $(P)$(R)ArraySizeZ_RBV - longin
- NDArraySize - asynInt32 - r/o - Total size of the array data in bytes - ARRAY_SIZE - $(P)$(R)ArraySize_RBV - longin
- NDCodec - asynOctet - r/o - The codec used to compress this array - CODEC - $(P)$(R)Codec_RBV - stringin
- NDCompressedSize - asynInt32 - r/o - Compressed size of the array data in bytes. Only meaningful if NDCodec is not empty - string. - COMPRESSED_SIZE - $(P)$(R)Compressed_RBV - longin
- Array data
- NDArrayCallbacks - asynInt32 - r/w - Controls whether the driver or plugin does callbacks with the array data to registered - plugins. 0=No, 1=Yes. Setting this to 0 in a driver can reduce overhead in the case - that the driver is being used only to control the device, and not to make the data - available to plugins or to EPICS clients. Setting this to 0 in a plugin can reduce - overhead by eliminating the need to copy the NDArray if that plugin is not being - used as a source of NDArrays to other plugins. - ARRAY_CALLBACKS - $(P)$(R)ArrayCallbacks
- $(P)$(R)ArrayCallbacks_RBV
- bo
- bi
- NDArrayData - asynGenericPointer - r/w - The array data as an NDArray object - NDARRAY_DATA - N/A. EPICS access to array data is through NDStdArrays plugin. - N/A
- NDArrayCounter - asynInt32 - r/w - Counter that increments by 1 each time an array is acquired. Can be reset by writing - a value to it. - ARRAY_COUNTER - $(P)$(R)ArrayCounter
- $(P)$(R)ArrayCounter_RBV
- longout
- longin
- N/A - N/A - r/o - Rate at which arrays are being acquired. Computed in the ADBase.template database. - - N/A - $(P)$(R)ArrayRate_RBV - calc
- Array attributes
- NDAttributesFile - asynOctet - r/w - The name of an XML file defining the NDAttributes to be added to each NDArray by - this driver or plugin. The format of the XML file is described in the documentation - for asynNDArrayDriver::readNDAttributesFile(). - - ND_ATTRIBUTES_FILE - $(P)$(R)NDAttributesFile - waveform
- NDAttributesMacros - asynOctet - r/w - A macro definition string that can be used to do macro substitution in the XML file. - For example if this string is "CAMERA=13SIM1:cam1:,ID=ID13us:" then all $(CAMERA) - and $(ID) strings in the XML file will be replaced with 13SIM1:cam1: and ID13us: - respectively. - ND_ATTRIBUTES_MACROS - $(P)$(R)NDAttributesMacros - waveform
- NDAttributesStatus - asynInt32 - r/o - The status of reading and parsing the XML attributes file. This is used to indicate - if the file cannot be found, if there is an XML syntax error, or if there is a macro - substitutions error. - ND_ATTRIBUTES_STATUS - $(P)$(R)NDAttributesStatus - mbbi
- Array pool status
- NDPoolMaxMemory - asynFloat64 - r/o - The maximum number of NDArrayPool memory bytes that can be allocated. 0=unlimited. - - POOL_MAX_MEMORY - $(P)$(R)PoolMaxMem - ai
- NDPoolUsedMemory - asynFloat64 - r/o - The number of NDArrayPool memory bytes currently allocated. The SCAN rate of this - record controls the scanning of all of the dynamic NDArrayPool status records. - - POOL_USED_MEMORY - $(P)$(R)PoolUsedMem - ai
- NDPoolAllocBuffers - asynInt32 - r/o - The number of NDArrayPool buffers currently allocated. - POOL_ALLOC_BUFFERS - $(P)$(R)PoolAllocBuffers - longin
- NDPoolFreeBuffers - asynInt32 - r/o - The number of NDArrayPool buffers currently allocated but free. - POOL_FREE_BUFFERS - $(P)$(R)PoolFreeBuffers - longin
- N.A. - N.A. - r/o - The number of NDArrayPool buffers currently in use. This is calculated as NDPoolAllocBuffers - - NDPoolFreeBuffers. - N.A. - $(P)$(R)PoolUsedBuffers - calc
- NDPoolEmptyFreeList - asynInt32 - r/w - Processing this record deletes all of the NDArrays on the freelist and sets the - freelist size to 0. This provides a mechanism to free large amounts of memory and - return it to the operating system, for example after a rapid acquisition with large - plugin queues. On Windows the memory is returned to the operating system immediately. - On Linux the freed memory may not actually be returned to the operating system even - though it has been freed in the areaDetector process. On Centos7 (and presumably - many other versions of Linux) setting the value of the environment variable MALLOC_TRIM_THRESHOLD_ - to a small value will allow the memory to actually be returned to the operating - system. - POOL_EMPTY_FREELIST - $(P)$(R)EmptyFreeList - bo
- NDNumQueuedArrays - asynInt32 - r/o - The number of NDArrays from this driver's NDArrayPool that are currently queued - for processing by plugins. When this number goes to 0 the plugins have all completed - processing. - NUM_QUEUED_ARRAYS - $(P)$(R)NumQueuedArrays - longin
- Debugging control
- N/A - N/A - N/A - asyn record to control debugging (asynTrace) - N/A - $(P)$(R)AsynIO - asyn
- File saving parameters (records are defined in NDFile.template)
- NDFilePath - asynOctet - r/w - File path - FILE_PATH - $(P)$(R)FilePath
- $(P)$(R)FilePath_RBV
- waveform
- waveform
- NDFilePathExists - asynInt32 - r/o - Flag indicating if file path exists - FILE_PATH_EXISTS - $(P)$(R)FilePathExists_RBV - bi
- NDFileName - asynOctet - r/w - File name - FILE_NAME - $(P)$(R)FileName
- $(P)$(R)FileName_RBV
- waveform
- waveform
- NDFileNumber - asynInt32 - r/w - File number - FILE_NUMBER - $(P)$(R)FileNumber
- $(P)$(R)FileNumber_RBV
- longout
- longin
- NDFileTemplate - asynOctet - r/w - Format string for constructing NDFullFileName from NDFilePath, NDFileName, and NDFileNumber. - The final file name (which is placed in NDFullFileName) is created with the following - code: -
epicsSnprintf(
-    FullFilename, 
-    sizeof(FullFilename), 
-    FileTemplate, FilePath, 
-    Filename, FileNumber);
-        
- FilePath, Filename, FileNumber are converted in that order with FileTemplate. An - example file format is "%s%s%4.4d.tif". The first %s converts the FilePath, - followed immediately by another %s for Filename. FileNumber is formatted with %4.4d, - which results in a fixed field with of 4 digits, with leading zeros as required. - Finally, the .tif extension is added to the file name. This mechanism for creating - file names is very flexible. Other characters, such as _ can be put in Filename - or FileTemplate as desired. If one does not want to have FileNumber in the file - name at all, then just omit the %d format specifier from FileTemplate. If the client - wishes to construct the complete file name itself, then it can just put that file - name into NDFileTemplate with no format specifiers at all, in which case NDFilePath, - NDFileName, and NDFileNumber will be ignored.
- FILE_TEMPLATE - $(P)$(R)FileTemplate
- $(P)$(R)FileTemplate_RBV
- waveform
- waveform
- NDFullFileName - asynOctet - r/o - Full file name constructed using the algorithm described in NDFileTemplate - FULL_FILE_NAME - $(P)$(R)FullFileName_RBV - waveform
- waveform
- NDAutoIncrement - asynInt32 - r/w - Auto-increment flag. Controls whether FileNumber is automatically incremented by - 1 each time a file is saved (0=No, 1=Yes) - AUTO_INCREMENT - $(P)$(R)AutoIncrement
- $(P)$(R)AutoIncrement_RBV
- bo
- bi
- NDAutoSave - asynInt32 - r/w - Auto-save flag (0=No, 1=Yes) controlling whether a file is automatically saved each - time acquisition completes. - AUTO_SAVE - $(P)$(R)AutoSave
- $(P)$(R)AutoSave_RBV
- bo
- bi
- NDFileFormat - asynInt32 - r/w - File format. The format to write/read data in (e.g. TIFF, netCDF, etc.) - FILE_FORMAT - $(P)$(R)FileFormat
- $(P)$(R)FileFormat_RBV
- mbbo
- mbbi
- NDWriteFile - asynInt32 - r/w - Manually save the most recent array to a file when value=1 - WRITE_FILE - $(P)$(R)WriteFile
- $(P)$(R)WriteFile_RBV
- busy
- bi
- NDReadFile - asynInt32 - r/w - Manually read a file when value=1 - READ_FILE - $(P)$(R)ReadFile
- $(P)$(R)ReadFile_RBV
- busy
- bi
- NDFileWriteMode - asynInt32 - r/w - File saving mode (Single, Capture, Stream)(NDFileMode_t) - WRITE_MODE - $(P)$(R)FileWriteMode
- $(P)$(R)FileWriteMode_RBV
- mbbo
- mbbi
- NDFileWriteStatus - asynInt32 - r/o - File write status. Gives status information on last file open or file write operation. - Values are WriteOK (0) and WriteError (1). - WRITE_STATUS - $(P)$(R)FileWriteStatus - mbbi
- NDFileWriteMessage - asynOctet - r/o - File write error message. An error message string if the previous file open or file - write operation resulted in an error. - WRITE_MESSAGE - $(P)$(R)FileWriteMessage - waveform
- NDFileCapture - asynInt32 - r/w - Start (1) or stop (0) file capture or streaming - CAPTURE - $(P)$(R)Capture
- $(P)$(R)Capture_RBV
- busy
- bi
- NDFileNumCapture - asynInt32 - r/w - Number of frames to acquire in capture or streaming mode - NUM_CAPTURE - $(P)$(R)NumCapture
- $(P)$(R)NumCapture_RBV
- longout
- longin
- NDFileNumCaptured - asynInt32 - r/o - Number of arrays currently acquired capture or streaming mode - NUM_CAPTURED - $(P)$(R)NumCaptured_RBV - longin
- NDFileDeleteDriverFile - asynInt32 - r/w - Flag to enable deleting original driver file after a plugin has re-written the file - in a different format. This can be useful for detectors that must write the data - to disk in order for the areaDetector driver to read it back. Once a file-writing - plugin has rewritten the data in another format it can be desireable to then delete - the original file. - DELETE_DRIVER_FILE - $(P)$(R)DeleteDriverFile
- $(P)$(R)DeleteDriverFile_RBV
- bo
- bi
- NDFileLazyOpen - asynInt32 - r/w - Flag to defer the creation of a new file until the first NDArray to write has been - received. This removes the need for passing an extra NDArray through the file writing - plugin to initialise dimensions and possibly NDAttribute list before opening the - file. The downside is that file creation can potentially be time-consuming so processing - the first NDArray may be slower than subsequent ones. -
- Only makes sense to use with file plugins which support multiple frames per file - and only in "Stream" mode.
- FILE_LAZY_OPEN - $(P)$(R)LazyOpen
- $(P)$(R)LazyOpen_RBV
- bo
- bi
- NDFileCreateDir - asynInt32 - r/w - This parameter is used to automatically create directories if they don't exist. - If it is zero (default), no directories are created. If it is negative, then the - absolute value is the maximum of directories that will be created (i.e. -1 will - create a maximum of one directory to complete the path, -2 will create a maximum - of 2 directories). If it is positive, then at least that many directories in the - path must exist (i.e. a value of 1 will create all directories below the root directory - and 2 will not create a directory in the root directory). - CREATE_DIR - $(P)$(R)CreateDirectory
- $(P)$(R)CreateDirectory_RBV
- longout
- longin
- NDFileTempSuffix - asynOctet - r/w - If this string is non-null, the file is opened with this suffix temporarily appended - to the file name. When the file is closed it is then renamed to the correct file - name without the suffix. This is useful for processing software watching for the - file to appear since the file appears as an atomic operation when it is ready to - be opened. - FILE_TEMP_SUFFIX - $(P)$(R)TempSuffix
- $(P)$(R)TempSuffix_RBV
- stringout
- stringin
-

- ADDriver

-

- ADDriver inherits from asynNDArrayDriver. This is the class from which area detector - drivers are directly derived. It provides parameters and methods that are specific - to area detectors, while asynNDArrayDriver is a general NDArray driver. The - ADDriver class documentation describes this class in detail. -

-

- The file ADDriver.h defines - the parameters that all areaDetector drivers should implement if possible. -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Parameter Definitions in ADDriver.h and EPICS Record Definitions in ADBase.template -
- Parameter index variable - - asyn interface - - Access - - Description - - drvInfo string - - EPICS record name - - EPICS record type -
- Information about the detector
- ADManufacturer - asynOctet - r/o - Detector manufacturer name - MANUFACTURER - $(P)$(R)Manufacturer_RBV - stringin
- ADModel - asynOctet - r/o - Detector model name - MODEL - $(P)$(R)Model_RBV - stringin
- ADSerialNumber - asynOctet - r/o - Detector serial number - SERIAL_NUMBER - $(P)$(R)SerialNumber_RBV - stringin
- ADFirmwareVersion - asynOctet - r/o - Detector firmware version - FIRMWARE_VERSION - $(P)$(R)FirmwareVersion_RBV - stringin
- ADSDKVersion - asynOctet - r/o - Detector vendor's Software Development Kit (SDK) version number. - SDK_VERSION - $(P)$(R)SDKVersion_RBV - stringin
- ADFirmwareVersion - asynOctet - r/o - Detector firmeare version number. - FIRMWARE_VERSION - $(P)$(R)FirmwareVersion_RBV - stringin
- ADMaxSizeX - asynInt32 - r/o - Maximum (sensor) size in the X direction - MAX_SIZE_X - $(P)$(R)MaxSizeX_RBV - longin
- ADMaxSizeY - asynInt32 - r/o - Maximum (sensor) size in the Y direction - MAX_SIZE_Y - $(P)$(R)MaxSizeY_RBV - longin
- ADTemperature - asynFloat64 - r/w - Detector temperature - TEMPERATURE - $(P)$(R)Temperature
- $(P)$(R)Temperature_RBV
-
- ao
- ai
- ADTemperatureActual - asynFloat64 - r/o - Actual detector temperature - TEMPERATURE_ACTUAL - $(P)$(R)Temperature_Actual - ai
- Detector readout control including gain, binning, region start and size, reversal -
- ADGain - asynFloat64 - r/w - Detector gain - GAIN - $(P)$(R)Gain
- $(P)$(R)Gain_RBV
- ao
- ai
- ADBinX - asynInt32 - r/w - Binning in the X direction - BIN_X - $(P)$(R)BinX
- $(P)$(R)BinX_RBV
- longout
- longin
- ADBinY - asynInt32 - r/w - Binning in the Y direction - BIN_Y - $(P)$(R)BinY
- $(P)$(R)BinY_RBV
- longout
- longin
- ADMinX - asynInt32 - r/w - First pixel to read in the X direction. -
- 0 is the first pixel on the detector.
- MIN_X - $(P)$(R)MinX
- $(P)$(R)MinX_RBV
- longout
- longin
- ADMinY - asynInt32 - r/w - First pixel to read in the Y direction.
- 0 is the first pixel on the detector.
- MIN_Y - $(P)$(R)MinY
- $(P)$(R)MinY_RBV
- longout
- longin
- ADSizeX - asynInt32 - r/w - Size of the region to read in the X direction - SIZE_X - $(P)$(R)SizeX
- $(P)$(R)SizeX_RBV
- longout
- longin
- ADSizeY - asynInt32 - r/w - Size of the region to read in the Y direction - SIZE_Y - $(P)$(R)SizeY
- $(P)$(R)SizeY_RBV
- longout
- longin
- ADReverseX - asynInt32 - r/w - Reverse array in the X direction
- (0=No, 1=Yes)
- REVERSE_X - $(P)$(R)ReverseX
- $(P)$(R)ReverseX_RBV
- longout
- longin
- ADReverseY - asynInt32 - r/w - Reverse array in the Y direction
- (0=No, 1=Yes)
- REVERSE_Y - $(P)$(R)ReverseY
- $(P)$(R)ReverseY_RBV
- longout
- longin
- Image and trigger modes
- ADImageMode - asynInt32 - r/w - Image mode (ADImageMode_t). - IMAGE_MODE - $(P)$(R)ImageMode
- $(P)$(R)ImageMode_RBV
- mbbo
- mbbi
- ADTriggerMode - asynInt32 - r/w - Trigger mode (ADTriggerMode_t). - TRIGGER_MODE - $(P)$(R)TriggerMode
- $(P)$(R)TriggerMode_RBV
- mbbo
- mbbi
- Frame type
- ADFrameType - asynInt32 - r/w - Frame type (ADFrameType_t). - FRAME_TYPE - $(P)$(R)FrameType
- $(P)$(R)FrameType_RBV
- mbbo
- mbbi
- Acquisition time and period
- ADAcquireTime - asynFloat64 - r/w - Acquisition time per image - ACQ_TIME - $(P)$(R)AcquireTime
- $(P)$(R)AcquireTime_RBV
- ao
- ai
- ADAcquirePeriod - asynFloat64 - r/w - Acquisition period between images - ACQ_PERIOD - $(P)$(R)AcquirePeriod
- $(P)$(R)AcquirePeriod_RBV
- ao
- ai
- Number of exposures and number of images
- ADNumExposures - asynInt32 - r/w - Number of exposures per image to acquire - NEXPOSURES - $(P)$(R)NumExposures
- $(P)$(R)NumExposures_RBV
- longout
- longin
- ADNumImages - asynInt32 - r/w - Number of images to acquire in one acquisition sequence - NIMAGES - $(P)$(R)NumImages
- $(P)$(R)NumImages_RBV
- longout
- longin
- Acquisition control
- ADAcquire - asynInt32 - r/w - Start (1) or stop (0) image acquisition. This record forward links to $(P)$(R)AcquireBusy - which is an EPICS busy record that does not process its forward link until acquisition - is complete. Clients should write 1 to the Acquire record to start acquisition, - and wait for AcquireBusy to go to 0 to know that acquisition is complete. This can - be done automatically with ca_put_callback. - ACQUIRE - $(P)$(R)Acquire
- $(P)$(R)Acquire_RBV
- bo
- bi
- N.A. - N.A. - r/o - This is an EPICS busy record that is set to 1 when Acquire is set to 1 and not process - its forward link until acquisition is complete. - N.A. - $(P)$(R)AcquireBusy - busy
- N.A. - N.A. - r/o - This record controls whether AcquireBusy goes to 0 when the detector is done (Acquire=0), - or whether it waits until $(P)$(R)NumQueuedArrays also goes to 0, i.e. that all - plugins are also done. Choices are No (0) and Yes(1). - N.A. - $(P)$(R)WaitForPlugins - bo
- Status information
- ADStatus - asynInt32 - r/o - Acquisition status (ADStatus_t) - STATUS - $(P)$(R)DetectorState_RBV - mbbi
- ADStatusMessage - asynOctet - r/o - Status message string - STATUS_MESSAGE - $(P)$(R)StatusMessage_RBV - waveform
- ADStringToServer - asynOctet - r/o - String from driver to string-based vendor server - STRING_TO_SERVER - $(P)$(R)StringToServer_RBV - waveform
- ADStringFromServer - asynOctet - r/o - String from string-based vendor server to driver - STRING_FROM_SERVER - $(P)$(R)StringFromServer_RBV - waveform
- ADNumExposuresCounter - asynInt32 - r/o - Counter that increments by 1 each time an exposure is acquired for the current image. - Driver resets to 0 when acquisition is started. - NUM_EXPOSURES_COUNTER - $(P)$(R)NumExposuresCounter_RBV - longin
- ADNumImagesCounter - asynInt32 - r/o - Counter that increments by 1 each time an image is acquired in the current acquisition - sequence. Driver resets to 0 when acquisition is started. Drivers can use this as - the loop counter when ADImageMode=ADImageMultiple. - NUM_IMAGES_COUNTER - $(P)$(R)NumImagesCounter_RBV - longin
- ADTimeRemaining - asynFloat64 - r/o - Time remaining for current image. Drivers should update this value if they are doing - the exposure timing internally, rather than in the detector hardware. - TIME_REMAINING - $(P)$(R)TimeRemaining_RBV - ai
- ADReadStatus - asynInt32 - r/w - Write a 1 to this parameter to force a read of the detector status. Detector drivers - normally read the status as required, so this is usually not necessary, but there - may be some circumstances under which forcing a status read may be needed. - READ_STATUS - $(P)$(R)ReadStatus - bo
- Shutter control
- ADShutterMode - asynInt32 - r/w - Shutter mode (None, detector-controlled or EPICS-controlled) (ADShutterMode_t) - - SHUTTER_MODE - $(P)$(R)ShutterMode
- $(P)$(R)ShutterMode_RBV
- mbbo
- mbbi
- ADShutterControl - asynInt32 - r/w - Shutter control for the selected (detector or EPICS) shutter (ADShutterStatus_t) - - SHUTTER_CONTROL - $(P)$(R)ShutterControl
- $(P)$(R)ShutterControl_RBV
- bo
- bi
- ADShutterControlEPICS - asynInt32 - r/w - This record processes when it receives a callback from the driver to open or close - the EPICS shutter. It triggers the records below to actually open or close the EPICS - shutter. - SHUTTER_CONTROL_EPICS - $(P)$(R)ShutterControlEPICS - bi
- N/A - N/A - r/w - This record writes its OVAL field to its OUT field when the EPICS shutter is told - to open. The OCAL (and hence OVAL) and OUT fields are user-configurable, so any - EPICS-controllable shutter can be used. - N/A - $(P)$(R)ShutterOpenEPICS - calcout
- N/A - N/A - r/w - This record writes its OVAL field to its OUT field when the EPICS shutter is told - to close. The OCAL (and hence OVAL) and OUT fields are user-configurable, so any - EPICS-controllable shutter can be used. - N/A - $(P)$(R)ShutterCloseEPICS - calcout
- ADShutterStatus - asynInt32 - r/o - Status of the detector-controlled shutter (ADShutterStatus_t) - SHUTTER_STATUS - $(P)$(R)ShutterStatus_RBV - bi
- N/A - N/A - r/o - Status of the EPICS-controlled shutter. This record should have its input link (INP) - set to a record that contains the open/close status information for the shutter. - The link should have the "CP" attribute, so this record processes when the input - changes. The ZRVL field should be set to the value of the input link when the shutter - is closed, and the ONVL field should be set to the value of the input link when - the shutter is open. - N/A - $(P)$(R)ShutterStatusEPICS_RBV - mbbi
- ADShutterOpenDelay - asynFloat64 - r/w - Time required for the shutter to actually open (ADShutterStatus_t) - SHUTTER_OPEN_DELAY - $(P)$(R)ShutterOpenDelay
- $(P)$(R)ShutterOpenDelay_RBV
- ao
- ai
- ADShutterCloseDelay - asynFloat64 - r/w - Time required for the shutter to actually close (ADShutterStatus_t) - SHUTTER_CLOSE_DELAY - $(P)$(R)ShutterCloseDelay
- $(P)$(R)ShutterCloseDelay_RBV
- ao
- ai
-

- Guidelines and rules for drivers

-

- The following are guidelines and rules for writing areaDetector drivers

- -

- MEDM screens

-

- The following is the top-level MEDM screen that provides links to the screens for - most of the detectors and plugins that areaDetector supports. This screen is useful - for testing, and as a source for copying related-display menus to be placed in application-specific - MEDM screens. -

-
-

- ADTop.adl

- ADTop.png
-

- The following is the MEDM screen that provides access to the parameters in asynNDArrayDriver.h - and ADDriver.h through records in ADBase.template. This is a top-level MEDM screen - that will work with any areaDetector driver. Note however that many drivers will - not implement all of these parameters, and there will usually be detector-specific - parameters not shown in this screen, so detector-specific MEDM screens should generally - be created that display the EPICS PVs for the features implemented for that detector. -

-
-

- ADBase.adl

- ADBase.png
-

- The following is the MEDM screen that provides access to the file-related parameters - in asynNDArrayDriver.h through records in NDFile.template. This screen is for use - with detector drivers that directly implement file I/O. -

-
-

- NDFile.adl

- NDFile.png
-

- The following is the MEDM screen that provides access to the EPICS shutter parameters - in ADDriver.h through records in ADBase.template. This screen allows one to define - the EPICS PVs to open the shutter, close the shutter, and determine the shutter - status. The values of these PVs for open and close drive and status can also be - defined. Note that in many cases the same PV will be used for open and close drive, - but in some cases (e.g. APS safety shutters) different PVs are used for open and - close. -

-
-

- ADEpicsShutter.adl

- ADEpicsShutter.png
-

- Installation, configuration, and running

-

- Installation instructions for release R2-0 and later can be found on - INSTALL_GUIDE.md on Github.

-

- For releases prior to R2-0 the version of this document contained in the source - code release contains the installation instructions.

-

- Acknowledgements and licenses

-

- "This software is based in part on the work of the Independent JPEG Group".

- - diff --git a/documentation/areaDetectorReleaseNotes.html b/documentation/areaDetectorReleaseNotes.html deleted file mode 100644 index e42a158fa..000000000 --- a/documentation/areaDetectorReleaseNotes.html +++ /dev/null @@ -1,1252 +0,0 @@ - - - - areaDetectorReleaseNotes.html - - - -

- areaDetector Release Notes

-

- Release 2-0 and later

-

- Starting with areaDetector R2-0 the release notes are no longer in this document, - but are in the following locations.

- -

- Release 1-9-1 (11-March-2013)

- -

- Release 1-9 (27-February-2013)

- -

- Release 1-8 (6-October-2012)

- -

- Release 1-7 (09-August-2011)

- -

- Release 1-6 (20-May-2010)

- -

- Release 1-5 (23-August-2009)

- -

- Release 1-4 (30-January-2009)

- -

- Release 1-3 (24-November-2008)

- -

- Release 1-2 (24-October-2008)

- -

- Release 1-1 (10-May-2008)

- -

- Release 1-0 (11-Apr-2008)

- -
- Suggestions and Comments to: -
- Mark Rivers : (rivers@cars.uchicago.edu) -
-
- - diff --git a/documentation/areaDetectorTimeStampSupport.html b/documentation/areaDetectorTimeStampSupport.html deleted file mode 100644 index 48726ca10..000000000 --- a/documentation/areaDetectorTimeStampSupport.html +++ /dev/null @@ -1,672 +0,0 @@ - - - - Support for EPICS Time Stamps in areaDetector R2-0 - - - -
-

- Support for EPICS Time Stamps in areaDetector R2-0

-

- March 3, 2014

-

- Mark Rivers

-

- University of Chicago

-
-

- Overview

-

- Several changes to support EPICS time stamps in areaDetector were made in areaDetector/ADCore - R2-0. These are used by setting the TSE field in the EPICS records to -2. The record - support then directly uses the TIME field in the record as the timestamp. Device - support must have properly set the TIME field in the record. -

-

- Setting the timestamp when the driver processes, rather than later on when the record - processes can be desirable because the timestamp then reflects more accurately the - actual time that the I/O operation was performed. It is also desirable to allow - for a user-defined function to provide the timestamp, rather than being restricted - to simply calling epicsTimeGetCurrent(). For example, the driver may be associated - with a particular EPICS event, and the user-defined function would then call epicsTimeGetEvent() - with that event ID. This can also return a site-specific time format. For example - at LCLS epicsTimeGetEvent() returns a timestamp where the low-order bits of the - nsec field encode the pulse ID. They want the areaDetector drivers to read that - timestamp as soon as possible after the I/O is complete. In areaDetector these timestamps - should also be written to data files by the standard file-writing plugins whenever - possible. -

-

- asyn R4-22 added new timestamp support functions to asynManager and asynPortDriver. - areaDetector R2-0 uses these new functions. now. -

-

- NDArray changes

-

- A new field has been added to the NDArray class. This is the definition of that - field.

-
-epicsTimeStamp epicsTS;  /**< The epicsTimeStamp; this is set with
-                           * pasynManager->updateTimeStamp(), 
-                           * and can come from a user-defined timestamp source. */
-
-

- asynNDArrayDriver changes

-

- Two new asynInt32 parameters have been added to the asynNDArrayDriver class.

- -

- 2 new records have been added to NDPluginBase.template.

- -

- Detector driver changes

-

- All detector drivers required a single-line addition of a call to updateTimeStamp, - like the following:

-
-         pImage->timeStamp = startTime.secPastEpoch + startTime.nsec / 1.e9;
-        updateTimeStamp(&pImage->epicsTS);
-
-

- The drivers were already setting the double NDArray.timeStamp field, typically with - the time from a call to epicsTimeGetCurrent. The call to asynPortDriver::updateTimeStamp - calls pasynManager->updateTimeStamp(), which gets the current time either from its - internal time stamp source function, or from a user-defined timestamp source function. - This line has been added to all detector drivers in areaDetector. Any detector drivers - that are not part of the areaDetector module will also need this line to be added. -

-

- NDPluginDriver changes

-

- NDPluginDriver, which is the base class from which all plugins derive has had the - following additions to the NDPluginDriver::processCallbacks() method:

-
-     setIntegerParam(NDColorMode, colorMode);
-     setIntegerParam(NDBayerPattern, bayerPattern);
-     setIntegerParam(NDUniqueId, pArray->uniqueId);
-+    setTimeStamp(&pArray->epicsTS);
-     setDoubleParam(NDTimeStamp, pArray->timeStamp);
-+    setIntegerParam(NDEpicsTSSec, pArray->epicsTS.secPastEpoch);
-+    setIntegerParam(NDEpicsTSNsec, pArray->epicsTS.nsec);
-     /* See if the array dimensions have changed.  If so then do callbacks on them. */
-
-

- It calls setTimeStamp with the epicsTimeStamp from NDArray that was passed to the - plugin. setTimeStamp sets the internal timestamp in pasynManager. This is the timestamp - that will be used for all callbacks to device support and read() operations in this - plugin asynPortDriver. Thus, the record timestamps will come from the NDArray passed - to the plugin if the record TSE field is -2. It also sets the new asynNDArrayDriver - NDEpicsTSSec and NDEpicsTSNsec parameters to the fields from the NDArray.epicsTS. - These records can then be used to monitor the EPICS timestamp in the NDArray even - if TSE is not -2. -

-

- NDPluginStdArrays changes

-

- The pasynUser->timestamp field is now set from the NDArray.epicsTS field for both - array callbacks and array read operations. The waveform records holding the NDArray - data thus have the timestamps from the NDArray if TSE=-2.

-

- NDFileNetCDF changes

-

- The netCDF file writing plugin was changed to write 2 new variables to every netCDF - file for each NDArray. epicsTSSec contains NDArray.epicsTS.secPastEpoch. epicsTSNsec - contains NDArray.epicsTS.nsec. Note that these variables are arrays of length numArrays, - where numArrays is the number of NDArrays (images) in the file. It was not possible - to write the timestamp as a single 64-bit value because the classic netCDF file - format does not support 64-bit integers. -

-

- NDFileTIFF changes

-

- The TIFF file writing plugin previously had one user-defined TIFF tag that contained - the double NDArray.timeStamp field.

-
-Tag=65000, field name=NDTimeStamp, field_type=TIFF_DOUBLE, value=NDArray.timeStamp. 
-
-

- 3 new TIFF tags have been added to each TIFF file:

-
-Tag=65001, field name=NDUniqueId, field_type=TIFF_LONG, value=NDArray.uniqueId.
-Tag=65002, field name=EPICSTSSec, field_type=TIFF_LONG, value=NDArray.epicsTS.secPastEpoch.
-Tag=65003, field name=EPICSTSNsec, field_type=TIFF_LONG, value=NDArray.epicsTS.nsec.
-
-

- It was not possible to write the timestamp as a single 64-bit value because TIFF - does not support 64-bit integer tags. It does have a type called TIFF_RATIONAL which - is a pair of 32-bit integers. However, when reading such a tag what is returned - is the quotient of the two numbers, which is not what is desired. -

-

- Testing

-

- ADApp/ADSrc/myTimeStampSource.cpp is a new file that contains an example of a user-defined - timestamp source. The timestamp source in that file simply calls epicsTimeGetCurrent(&timeStamp) - and then sets timeStamp.nsec=0, so the time stamp is always an integer number of - seconds. This makes it easy to tell that the user-defined timestamp source is being - used. That function is loaded and unloaded with the new commands that were recently - added to asyn:

-
-registerTimeStampSource("port", "myTimeStampSource")
-
-

- and -

-
-unregisterTimeStampSource("port")
-
-

- A new shell script for testing has been added in ADCore/iocs/simDetectorIOC/iocBoot/timeStampMonitor.sh. - This script takes 2 arguments: $1=PV prefix, $2=TSE value for records being monitored. - The script first sets the TSE field of all records being monitored to $2, and then - runs camonitor on all of the PVs. It monitors some PVs from the detector database - (ADBase.template), some PVs from the NDPluginStdArrays plugin (image1), some PVs - from the NDPluginROI plugin (ROI1), and some PVs from the NDPluginStats plugin (Stats1). - The plugins are arranged with Prosilica driver->ROI1->Stats1. Thus, monitoring timestamps - on the Stats1 plugin tests whether the timestamps are passed correctly through a - plugin chain. The timestamp tests were done with the Prosilica camera running at - a fixed rate of 2 frames/sec. Tests were done with TSE=0 (normal operation), TSE=-2 - with default timestamp source, and TSE=-2 with the user-defined timestamp source. -

-

- Timestamp test 1. TSE=0 -

-
-corvette:~/devel/areaDetector/iocBoot>./timeStampMonitor.sh 13PS1 0
-Old : 13PS1:cam1:ArrayCounter_RBV.TSE 0
-New : 13PS1:cam1:ArrayCounter_RBV.TSE 0
-Old : 13PS1:image1:ArrayCounter_RBV.TSE 0
-New : 13PS1:image1:ArrayCounter_RBV.TSE 0
-Old : 13PS1:image1:UniqueId_RBV.TSE  0
-New : 13PS1:image1:UniqueId_RBV.TSE  0
-Old : 13PS1:image1:ArrayData.TSE     0
-New : 13PS1:image1:ArrayData.TSE     0
-Old : 13PS1:image1:EpicsTSSec_RBV.TSE 0
-New : 13PS1:image1:EpicsTSSec_RBV.TSE 0
-Old : 13PS1:image1:EpicsTSNsec_RBV.TSE 0
-New : 13PS1:image1:EpicsTSNsec_RBV.TSE 0
-Old : 13PS1:ROI1:ArrayCounter_RBV.TSE 0
-New : 13PS1:ROI1:ArrayCounter_RBV.TSE 0
-Old : 13PS1:ROI1:UniqueId_RBV.TSE    0
-New : 13PS1:ROI1:UniqueId_RBV.TSE    0
-Old : 13PS1:Stats1:ArrayCounter_RBV.TSE 0
-New : 13PS1:Stats1:ArrayCounter_RBV.TSE 0
-Old : 13PS1:Stats1:UniqueId_RBV.TSE  0
-New : 13PS1:Stats1:UniqueId_RBV.TSE  0
-Old : 13PS1:Stats1:MeanValue_RBV.TSE 0
-New : 13PS1:Stats1:MeanValue_RBV.TSE 0
-13PS1:cam1:ArrayCounter_RBV    2013-09-15 12:00:19.230659 1 20529  
-13PS1:image1:ArrayCounter_RBV  2013-09-15 12:00:19.231246 1 20529  
-13PS1:image1:UniqueId_RBV      2013-09-15 12:00:19.231249 1 20529  
-13PS1:image1:ArrayData         2013-09-15 12:00:19.231243 1 33  
-13PS1:image1:EpicsTSSec_RBV    2013-09-15 12:00:19.231253 1 748112419  
-13PS1:image1:EpicsTSNsec_RBV   2013-09-15 12:00:19.231255 1 230464364  
-13PS1:ROI1:ArrayCounter_RBV    2013-09-15 12:00:19.230632 1 20455  
-13PS1:ROI1:UniqueId_RBV        2013-09-15 12:00:19.230635 1 20529  
-13PS1:Stats1:ArrayCounter_RBV  2013-09-15 12:00:19.237740 1 20455  
-13PS1:Stats1:UniqueId_RBV      2013-09-15 12:00:19.237743 1 20529  
-13PS1:Stats1:MeanValue_RBV     2013-09-15 12:00:19.237758 1 73.3657  
-13PS1:ROI1:ArrayCounter_RBV    2013-09-15 12:00:19.730675 1 20456  
-13PS1:ROI1:UniqueId_RBV        2013-09-15 12:00:19.730739 1 20530  
-13PS1:cam1:ArrayCounter_RBV    2013-09-15 12:00:19.730760 1 20530  
-13PS1:image1:ArrayData         2013-09-15 12:00:19.731286 1 33  
-13PS1:image1:ArrayCounter_RBV  2013-09-15 12:00:19.731348 1 20530  
-13PS1:image1:UniqueId_RBV      2013-09-15 12:00:19.731352 1 20530  
-13PS1:image1:EpicsTSNsec_RBV   2013-09-15 12:00:19.731357 1 730472829  
-13PS1:Stats1:ArrayCounter_RBV  2013-09-15 12:00:19.737856 1 20456  
-13PS1:Stats1:UniqueId_RBV      2013-09-15 12:00:19.737866 1 20530  
-13PS1:Stats1:MeanValue_RBV     2013-09-15 12:00:19.737889 1 73.6318  
-13PS1:ROI1:ArrayCounter_RBV    2013-09-15 12:00:20.230544 1 20457  
-13PS1:ROI1:UniqueId_RBV        2013-09-15 12:00:20.230604 1 20531  
-13PS1:cam1:ArrayCounter_RBV    2013-09-15 12:00:20.230650 1 20531  
-13PS1:image1:ArrayData         2013-09-15 12:00:20.231253 1 33  
-13PS1:image1:ArrayCounter_RBV  2013-09-15 12:00:20.231316 1 20531  
-13PS1:image1:UniqueId_RBV      2013-09-15 12:00:20.231320 1 20531  
-13PS1:image1:EpicsTSSec_RBV    2013-09-15 12:00:20.231327 1 748112420  
-13PS1:image1:EpicsTSNsec_RBV   2013-09-15 12:00:20.231332 1 230366264  
-13PS1:Stats1:ArrayCounter_RBV  2013-09-15 12:00:20.237810 1 20457  
-13PS1:Stats1:UniqueId_RBV      2013-09-15 12:00:20.237885 1 20531  
-13PS1:Stats1:MeanValue_RBV     2013-09-15 12:00:20.237911 1 74.2664  
-13PS1:ROI1:ArrayCounter_RBV    2013-09-15 12:00:20.730565 1 20458  
-13PS1:ROI1:UniqueId_RBV        2013-09-15 12:00:20.730625 1 20532  
-13PS1:cam1:ArrayCounter_RBV    2013-09-15 12:00:20.730644 1 20532  
-13PS1:image1:ArrayData         2013-09-15 12:00:20.731285 1 32  
-13PS1:image1:ArrayCounter_RBV  2013-09-15 12:00:20.731325 1 20532  
-13PS1:image1:UniqueId_RBV      2013-09-15 12:00:20.731330 1 20532  
-13PS1:image1:EpicsTSNsec_RBV   2013-09-15 12:00:20.731376 1 730415475  
-13PS1:Stats1:ArrayCounter_RBV  2013-09-15 12:00:20.738065 1 20458  
-13PS1:Stats1:UniqueId_RBV      2013-09-15 12:00:20.738103 1 20532  
-13PS1:Stats1:MeanValue_RBV     2013-09-15 12:00:20.738127 1 74.8682  
-13PS1:ROI1:ArrayCounter_RBV    2013-09-15 12:00:21.230629 1 20459  
-13PS1:ROI1:UniqueId_RBV        2013-09-15 12:00:21.230648 1 20533  
-13PS1:cam1:ArrayCounter_RBV    2013-09-15 12:00:21.230678 1 20533  
-13PS1:image1:ArrayData         2013-09-15 12:00:21.231301 1 32  
-13PS1:image1:ArrayCounter_RBV  2013-09-15 12:00:21.231341 1 20533  
-13PS1:image1:UniqueId_RBV      2013-09-15 12:00:21.231345 1 20533  
-13PS1:image1:EpicsTSSec_RBV    2013-09-15 12:00:21.231352 1 748112421  
-13PS1:image1:EpicsTSNsec_RBV   2013-09-15 12:00:21.231355 1 230466245  
-13PS1:Stats1:ArrayCounter_RBV  2013-09-15 12:00:21.237705 1 20459  
-13PS1:Stats1:UniqueId_RBV      2013-09-15 12:00:21.237716 1 20533  
-13PS1:Stats1:MeanValue_RBV     2013-09-15 12:00:21.237734 1 75.4404  
-
-

- This test shows the expected normal behavior. Each record is processing every 0.5 - seconds. The timestamps for each record in the group are slightly different because - the timestamp is generated when the record processes. -

-

- Timestamp test 2. TSE=-2, default timestamp source

-
-corvette:~/devel/areaDetector/iocBoot>./timeStampMonitor.sh 13PS1 -2
-Old : 13PS1:cam1:ArrayCounter_RBV.TSE -2
-New : 13PS1:cam1:ArrayCounter_RBV.TSE -2
-Old : 13PS1:image1:ArrayCounter_RBV.TSE -2
-New : 13PS1:image1:ArrayCounter_RBV.TSE -2
-Old : 13PS1:image1:UniqueId_RBV.TSE  -2
-New : 13PS1:image1:UniqueId_RBV.TSE  -2
-Old : 13PS1:image1:ArrayData.TSE     -2
-New : 13PS1:image1:ArrayData.TSE     -2
-Old : 13PS1:image1:EpicsTSSec_RBV.TSE -2
-New : 13PS1:image1:EpicsTSSec_RBV.TSE -2
-Old : 13PS1:image1:EpicsTSNsec_RBV.TSE -2
-New : 13PS1:image1:EpicsTSNsec_RBV.TSE -2
-Old : 13PS1:ROI1:ArrayCounter_RBV.TSE -2
-New : 13PS1:ROI1:ArrayCounter_RBV.TSE -2
-Old : 13PS1:ROI1:UniqueId_RBV.TSE    -2
-New : 13PS1:ROI1:UniqueId_RBV.TSE    -2
-Old : 13PS1:Stats1:ArrayCounter_RBV.TSE -2
-New : 13PS1:Stats1:ArrayCounter_RBV.TSE -2
-Old : 13PS1:Stats1:UniqueId_RBV.TSE  -2
-New : 13PS1:Stats1:UniqueId_RBV.TSE  -2
-Old : 13PS1:Stats1:MeanValue_RBV.TSE -2
-New : 13PS1:Stats1:MeanValue_RBV.TSE -2
-13PS1:cam1:ArrayCounter_RBV    2013-09-15 12:03:55.228895 1 20961  
-13PS1:image1:ArrayCounter_RBV  2013-09-15 12:03:55.228895 1 20961  
-13PS1:image1:UniqueId_RBV      2013-09-15 12:03:55.228895 1 20961  
-13PS1:image1:ArrayData         2013-09-15 12:03:55.228895 1 40  
-13PS1:image1:EpicsTSSec_RBV    2013-09-15 12:03:55.228895 1 748112635  
-13PS1:image1:EpicsTSNsec_RBV   2013-09-15 12:03:55.228895 1 228895370  
-13PS1:ROI1:ArrayCounter_RBV    2013-09-15 12:03:55.228895 1 20887  
-13PS1:ROI1:UniqueId_RBV        2013-09-15 12:03:55.228895 1 20961  
-13PS1:Stats1:ArrayCounter_RBV  2013-09-15 12:03:55.228895 1 20887  
-13PS1:Stats1:UniqueId_RBV      2013-09-15 12:03:55.228895 1 20961  
-13PS1:Stats1:MeanValue_RBV     2013-09-15 12:03:55.228895 1 85.0236  
-13PS1:ROI1:ArrayCounter_RBV    2013-09-15 12:03:55.728924 1 20888  
-13PS1:ROI1:UniqueId_RBV        2013-09-15 12:03:55.728924 1 20962  
-13PS1:cam1:ArrayCounter_RBV    2013-09-15 12:03:55.728924 1 20962  
-13PS1:image1:ArrayData         2013-09-15 12:03:55.728924 1 38  
-13PS1:image1:ArrayCounter_RBV  2013-09-15 12:03:55.728924 1 20962  
-13PS1:image1:UniqueId_RBV      2013-09-15 12:03:55.728924 1 20962  
-13PS1:image1:EpicsTSNsec_RBV   2013-09-15 12:03:55.728924 1 728923543  
-13PS1:Stats1:ArrayCounter_RBV  2013-09-15 12:03:55.728924 1 20888  
-13PS1:Stats1:UniqueId_RBV      2013-09-15 12:03:55.728924 1 20962  
-13PS1:Stats1:MeanValue_RBV     2013-09-15 12:03:55.728924 1 84.8537  
-13PS1:ROI1:ArrayCounter_RBV    2013-09-15 12:03:56.229066 1 20889  
-13PS1:ROI1:UniqueId_RBV        2013-09-15 12:03:56.229066 1 20963  
-13PS1:cam1:ArrayCounter_RBV    2013-09-15 12:03:56.229066 1 20963  
-13PS1:image1:ArrayData         2013-09-15 12:03:56.229066 1 39  
-13PS1:image1:ArrayCounter_RBV  2013-09-15 12:03:56.229066 1 20963  
-13PS1:image1:UniqueId_RBV      2013-09-15 12:03:56.229066 1 20963  
-13PS1:image1:EpicsTSSec_RBV    2013-09-15 12:03:56.229066 1 748112636  
-13PS1:image1:EpicsTSNsec_RBV   2013-09-15 12:03:56.229066 1 229065628  
-13PS1:Stats1:ArrayCounter_RBV  2013-09-15 12:03:56.229066 1 20889  
-13PS1:Stats1:UniqueId_RBV      2013-09-15 12:03:56.229066 1 20963  
-13PS1:Stats1:MeanValue_RBV     2013-09-15 12:03:56.229066 1 84.968  
-13PS1:ROI1:ArrayCounter_RBV    2013-09-15 12:03:56.728913 1 20890  
-13PS1:ROI1:UniqueId_RBV        2013-09-15 12:03:56.728913 1 20964  
-13PS1:cam1:ArrayCounter_RBV    2013-09-15 12:03:56.728913 1 20964  
-13PS1:image1:ArrayData         2013-09-15 12:03:56.728913 1 38  
-13PS1:image1:ArrayCounter_RBV  2013-09-15 12:03:56.728913 1 20964  
-13PS1:image1:UniqueId_RBV      2013-09-15 12:03:56.728913 1 20964  
-13PS1:image1:EpicsTSNsec_RBV   2013-09-15 12:03:56.728913 1 728913237  
-13PS1:Stats1:ArrayCounter_RBV  2013-09-15 12:03:56.728913 1 20890  
-13PS1:Stats1:UniqueId_RBV      2013-09-15 12:03:56.728913 1 20964  
-13PS1:Stats1:MeanValue_RBV     2013-09-15 12:03:56.728913 1 85.035  
-13PS1:ROI1:ArrayCounter_RBV    2013-09-15 12:03:57.228957 1 20891  
-13PS1:ROI1:UniqueId_RBV        2013-09-15 12:03:57.228957 1 20965  
-13PS1:cam1:ArrayCounter_RBV    2013-09-15 12:03:57.228957 1 20965  
-13PS1:image1:ArrayData         2013-09-15 12:03:57.228957 1 38  
-13PS1:image1:ArrayCounter_RBV  2013-09-15 12:03:57.228957 1 20965  
-13PS1:image1:UniqueId_RBV      2013-09-15 12:03:57.228957 1 20965  
-13PS1:image1:EpicsTSSec_RBV    2013-09-15 12:03:57.228957 1 748112637  
-13PS1:image1:EpicsTSNsec_RBV   2013-09-15 12:03:57.228957 1 228957340  
-13PS1:Stats1:ArrayCounter_RBV  2013-09-15 12:03:57.228957 1 20891  
-13PS1:Stats1:UniqueId_RBV      2013-09-15 12:03:57.228957 1 20965  
-13PS1:Stats1:MeanValue_RBV     2013-09-15 12:03:57.228957 1 84.9281
-
-

- This test shows the expected result. The timestamps within a single 0.5 second group - are identical, which is different from test 1. Timestamps for the Prosilica driver - records (13PS1:cam1:ArrayCounter_RBV) are coming from the most recent call by the - driver to updateTimeStamp(). Timestamps for all of the plugin records are coming - from the NDArray.epicsTS field, which is used in the call to setTimeStamp() in the - plugin driver. The default timestamp source is clearly being used because the fractional - seconds are non-zero. This has the desired result that all records associated with - a particular image have the timestamp at the time the Prosilica driver received - that image. -

-

- Timestamp test 3. TSE=-2, user timestamp source

-
-corvette:~/devel/areaDetector/iocBoot>./timeStampMonitor.sh 13PS1 -2
-Old : 13PS1:cam1:ArrayCounter_RBV.TSE -2
-New : 13PS1:cam1:ArrayCounter_RBV.TSE -2
-Old : 13PS1:image1:ArrayCounter_RBV.TSE -2
-New : 13PS1:image1:ArrayCounter_RBV.TSE -2
-Old : 13PS1:image1:UniqueId_RBV.TSE  -2
-New : 13PS1:image1:UniqueId_RBV.TSE  -2
-Old : 13PS1:image1:ArrayData.TSE     -2
-New : 13PS1:image1:ArrayData.TSE     -2
-Old : 13PS1:image1:EpicsTSSec_RBV.TSE -2
-New : 13PS1:image1:EpicsTSSec_RBV.TSE -2
-Old : 13PS1:image1:EpicsTSNsec_RBV.TSE -2
-New : 13PS1:image1:EpicsTSNsec_RBV.TSE -2
-Old : 13PS1:ROI1:ArrayCounter_RBV.TSE -2
-New : 13PS1:ROI1:ArrayCounter_RBV.TSE -2
-Old : 13PS1:ROI1:UniqueId_RBV.TSE    -2
-New : 13PS1:ROI1:UniqueId_RBV.TSE    -2
-Old : 13PS1:Stats1:ArrayCounter_RBV.TSE -2
-New : 13PS1:Stats1:ArrayCounter_RBV.TSE -2
-Old : 13PS1:Stats1:UniqueId_RBV.TSE  -2
-New : 13PS1:Stats1:UniqueId_RBV.TSE  -2
-Old : 13PS1:Stats1:MeanValue_RBV.TSE -2
-New : 13PS1:Stats1:MeanValue_RBV.TSE -2
-13PS1:cam1:ArrayCounter_RBV    2013-09-15 12:13:25.000000 1 22102  
-13PS1:image1:ArrayCounter_RBV  2013-09-15 12:13:25.000000 1 22102  
-13PS1:image1:UniqueId_RBV      2013-09-15 12:13:25.000000 1 22102  
-13PS1:image1:ArrayData         2013-09-15 12:13:25.000000 1 27  
-13PS1:image1:EpicsTSSec_RBV    2013-09-15 12:13:25.000000 1 748113205  
-13PS1:image1:EpicsTSNsec_RBV   2013-09-15 12:13:22.000000 1 0  
-13PS1:ROI1:ArrayCounter_RBV    2013-09-15 12:13:25.000000 1 22028  
-13PS1:ROI1:UniqueId_RBV        2013-09-15 12:13:25.000000 1 22102  
-13PS1:Stats1:ArrayCounter_RBV  2013-09-15 12:13:25.000000 1 22028  
-13PS1:Stats1:UniqueId_RBV      2013-09-15 12:13:25.000000 1 22102  
-13PS1:Stats1:MeanValue_RBV     2013-09-15 12:13:25.000000 1 59.7119  
-13PS1:ROI1:ArrayCounter_RBV    2013-09-15 12:13:26.000000 1 22029  
-13PS1:ROI1:UniqueId_RBV        2013-09-15 12:13:26.000000 1 22103  
-13PS1:cam1:ArrayCounter_RBV    2013-09-15 12:13:26.000000 1 22103  
-13PS1:image1:ArrayData         2013-09-15 12:13:26.000000 1 28  
-13PS1:image1:ArrayCounter_RBV  2013-09-15 12:13:26.000000 1 22103  
-13PS1:image1:UniqueId_RBV      2013-09-15 12:13:26.000000 1 22103  
-13PS1:image1:EpicsTSSec_RBV    2013-09-15 12:13:26.000000 1 748113206  
-13PS1:Stats1:ArrayCounter_RBV  2013-09-15 12:13:26.000000 1 22029  
-13PS1:Stats1:UniqueId_RBV      2013-09-15 12:13:26.000000 1 22103  
-13PS1:Stats1:MeanValue_RBV     2013-09-15 12:13:26.000000 1 60.5082  
-13PS1:ROI1:ArrayCounter_RBV    2013-09-15 12:13:26.000000 1 22030  
-13PS1:ROI1:UniqueId_RBV        2013-09-15 12:13:26.000000 1 22104  
-13PS1:cam1:ArrayCounter_RBV    2013-09-15 12:13:26.000000 1 22104  
-13PS1:image1:ArrayData         2013-09-15 12:13:26.000000 1 28  
-13PS1:image1:ArrayCounter_RBV  2013-09-15 12:13:26.000000 1 22104  
-13PS1:image1:UniqueId_RBV      2013-09-15 12:13:26.000000 1 22104  
-13PS1:Stats1:ArrayCounter_RBV  2013-09-15 12:13:26.000000 1 22030  
-13PS1:Stats1:UniqueId_RBV      2013-09-15 12:13:26.000000 1 22104  
-13PS1:Stats1:MeanValue_RBV     2013-09-15 12:13:26.000000 1 61.1341  
-13PS1:ROI1:ArrayCounter_RBV    2013-09-15 12:13:27.000000 1 22031  
-13PS1:ROI1:UniqueId_RBV        2013-09-15 12:13:27.000000 1 22105  
-13PS1:cam1:ArrayCounter_RBV    2013-09-15 12:13:27.000000 1 22105  
-13PS1:image1:ArrayData         2013-09-15 12:13:27.000000 1 29  
-13PS1:image1:ArrayCounter_RBV  2013-09-15 12:13:27.000000 1 22105  
-13PS1:image1:UniqueId_RBV      2013-09-15 12:13:27.000000 1 22105  
-13PS1:image1:EpicsTSSec_RBV    2013-09-15 12:13:27.000000 1 748113207  
-13PS1:Stats1:ArrayCounter_RBV  2013-09-15 12:13:27.000000 1 22031  
-13PS1:Stats1:UniqueId_RBV      2013-09-15 12:13:27.000000 1 22105  
-13PS1:Stats1:MeanValue_RBV     2013-09-15 12:13:27.000000 1 62.0059  
-13PS1:ROI1:ArrayCounter_RBV    2013-09-15 12:13:27.000000 1 22032  
-13PS1:ROI1:UniqueId_RBV        2013-09-15 12:13:27.000000 1 22106  
-13PS1:cam1:ArrayCounter_RBV    2013-09-15 12:13:27.000000 1 22106  
-13PS1:image1:ArrayData         2013-09-15 12:13:27.000000 1 30  
-13PS1:image1:ArrayCounter_RBV  2013-09-15 12:13:27.000000 1 22106  
-13PS1:image1:UniqueId_RBV      2013-09-15 12:13:27.000000 1 22106  
-13PS1:Stats1:ArrayCounter_RBV  2013-09-15 12:13:27.000000 1 22032  
-13PS1:Stats1:UniqueId_RBV      2013-09-15 12:13:27.000000 1 22106  
-13PS1:Stats1:MeanValue_RBV     2013-09-15 12:13:27.000000 1 62.6052  
-
-

- This test shows the expected result. The timestamps within a single 0.5 second group - are identical, the same as test 2. The user timestamp source is clearly being used - because the fractional seconds are all zero. This has the desired result that all - records associated with a particular image have the timestamp at the time the Prosilica - driver received that image, and the user-defined timestamp source is being used. -

-

- netCDF file test

-

- The netCDF files should now contain the NDArray.epicsTS data in two arrays. The - values do not depend on TSE, since that only affects the record timestamps. The - values do depend on whether the default timestamp source or the user-defined timestamp - source is being used. For these tests 10 images were collected in each netCDF file - in "stream" mode. -

-

- This is the output of the "ncdump" utility on a netCDF file collected with the default - timestamp source:

-
-corvette:~/scratch>ncdump -v uniqueId,timeStamp,epicsTSSec,epicsTSNsec ~/scratch/test_DefaultSource_001.nc
-netcdf test_DefaultSource_001 {
-dimensions:
-        numArrays = UNLIMITED ; // (10 currently)
-        dim0 = 512 ;
-        dim1 = 680 ;
-        attrStringSize = 256 ;
-variables:
-        int uniqueId(numArrays) ;
-        double timeStamp(numArrays) ;
-        int epicsTSSec(numArrays) ;
-        int epicsTSNsec(numArrays) ;
-        byte array_data(numArrays, dim0, dim1) ;
-        int Attr_BayerPattern(numArrays) ;
-        int Attr_ColorMode(numArrays) ;
-        double Attr_AcquireTime(numArrays) ;
-        char Attr_CameraModel(numArrays, attrStringSize) ;
-        int Attr_FramesDropped(numArrays) ;
-
-// global attributes:
-                :dataType = 1 ;
-                :NDNetCDFFileVersion = 3. ;
-                :numArrayDims = 2 ;
-                :dimSize = 680, 512 ;
-                :dimOffset = 0, 0 ;
-                :dimBinning = 2, 2 ;
-                :dimReverse = 0, 0 ;
-                :Attr_BayerPattern_DataType = "Int32" ;
-                :Attr_BayerPattern_Description = "Bayer Pattern" ;
-                :Attr_BayerPattern_Source =  ;
-                :Attr_BayerPattern_SourceType = "Driver" ;
-                :Attr_ColorMode_DataType = "Int32" ;
-                :Attr_ColorMode_Description = "Color Mode" ;
-                :Attr_ColorMode_Source =  ;
-                :Attr_ColorMode_SourceType = "Driver" ;
-                :Attr_AcquireTime_DataType = "Float64" ;
-                :Attr_AcquireTime_Description = "Camera acquire time" ;
-                :Attr_AcquireTime_Source = "13PS1:cam1:AcquireTime" ;
-                :Attr_AcquireTime_SourceType = "EPICS_PV" ;
-                :Attr_CameraModel_DataType = "String" ;
-                :Attr_CameraModel_Description = "CameraModel" ;
-                :Attr_CameraModel_Source = "MODEL" ;
-                :Attr_CameraModel_SourceType = "Param" ;
-                :Attr_FramesDropped_DataType = "Int32" ;
-                :Attr_FramesDropped_Description = "FramesDropped" ;
-                :Attr_FramesDropped_Source = "PS_FRAMES_DROPPED" ;
-                :Attr_FramesDropped_SourceType = "Param" ;
-data:
-
- uniqueId = 23569, 23570, 23571, 23572, 23573, 23574, 23575, 23576, 23577, 
-    23578 ;
-
- timeStamp = 748113951.240688, 748113951.740688, 748113952.240688, 
-    748113952.740688, 748113953.240688, 748113953.740688, 748113954.240688, 
-    748113954.740688, 748113955.240688, 748113955.740688 ;
-
- epicsTSSec = 748113951, 748113951, 748113952, 748113952, 748113953, 
-    748113953, 748113954, 748113954, 748113955, 748113955 ;
-
- epicsTSNsec = 259958854, 759958117, 259985340, 759984911, 259874142, 
-    760020860, 259933342, 759950117, 259764554, 759964413 ;
-}
-
-

- This shows the expected result. The epicsTSNsec values are non-zero, because the - default timestamp source is being used. The epicsTSSec values are the same as the - integer part of the timeStamp values. -

-

- This is the output of the "ncdump" utility on a netCDF file collected with the user-defined - timestamp source:

-
-corvette:~/scratch>ncdump -v uniqueId,timeStamp,epicsTSSec,epicsTSNsec ~/scratch/test_UserSource_001.nc 
-netcdf test_UserSource_001 {
-dimensions:
-        numArrays = UNLIMITED ; // (10 currently)
-        dim0 = 512 ;
-        dim1 = 680 ;
-        attrStringSize = 256 ;
-variables:
-        int uniqueId(numArrays) ;
-        double timeStamp(numArrays) ;
-        int epicsTSSec(numArrays) ;
-        int epicsTSNsec(numArrays) ;
-        byte array_data(numArrays, dim0, dim1) ;
-        int Attr_BayerPattern(numArrays) ;
-        int Attr_ColorMode(numArrays) ;
-        double Attr_AcquireTime(numArrays) ;
-        char Attr_CameraModel(numArrays, attrStringSize) ;
-        int Attr_FramesDropped(numArrays) ;
-
-// global attributes:
-                :dataType = 1 ;
-                :NDNetCDFFileVersion = 3. ;
-                :numArrayDims = 2 ;
-                :dimSize = 680, 512 ;
-                :dimOffset = 0, 0 ;
-                :dimBinning = 2, 2 ;
-                :dimReverse = 0, 0 ;
-                :Attr_BayerPattern_DataType = "Int32" ;
-                :Attr_BayerPattern_Description = "Bayer Pattern" ;
-                :Attr_BayerPattern_Source =  ;
-                :Attr_BayerPattern_SourceType = "Driver" ;
-                :Attr_ColorMode_DataType = "Int32" ;
-                :Attr_ColorMode_Description = "Color Mode" ;
-                :Attr_ColorMode_Source =  ;
-                :Attr_ColorMode_SourceType = "Driver" ;
-                :Attr_AcquireTime_DataType = "Float64" ;
-                :Attr_AcquireTime_Description = "Camera acquire time" ;
-                :Attr_AcquireTime_Source = "13PS1:cam1:AcquireTime" ;
-                :Attr_AcquireTime_SourceType = "EPICS_PV" ;
-                :Attr_CameraModel_DataType = "String" ;
-                :Attr_CameraModel_Description = "CameraModel" ;
-                :Attr_CameraModel_Source = "MODEL" ;
-                :Attr_CameraModel_SourceType = "Param" ;
-                :Attr_FramesDropped_DataType = "Int32" ;
-                :Attr_FramesDropped_Description = "FramesDropped" ;
-                :Attr_FramesDropped_Source = "PS_FRAMES_DROPPED" ;
-                :Attr_FramesDropped_SourceType = "Param" ;
-data:
-
- uniqueId = 24063, 24064, 24065, 24066, 24067, 24068, 24069, 24070, 24071, 
-    24072 ;
-
- timeStamp = 748114198.240688, 748114198.740688, 748114199.240688, 
-    748114199.740688, 748114200.240688, 748114200.740688, 748114201.240688, 
-    748114201.740688, 748114202.240688, 748114202.740688 ;
-
- epicsTSSec = 748114198, 748114198, 748114199, 748114199, 748114200, 
-    748114200, 748114201, 748114201, 748114202, 748114202 ;
-
- epicsTSNsec = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ;
-}
-
-

- This shows the expected result. The epicsTSNsec values are zero, because the user-defined - timestamp source is being used. The epicsTSSec values are the same as the integer - part of the timeStamp values. -

-

- TIFF file test

-

- The netCDF files should now contain the NDArray.epicsTS data in two tags, 65002 - and 65003. The values do not depend on TSE, since that only affects the record timestamps. - The values do depend on whether the default timestamp source or the user-defined - timestamp source is being used. -

-

- This is the output of the "tiffinfo" utility on a TIFF file collected with the default - timestamp source:

-
-corvette:~/scratch>tiffinfo tiff_DefaultTS_001.tif
-TIFFReadDirectory: Warning, tiff_DefaultTS_001.tif: unknown field with tag 65000 (0xfde8) encountered.
-TIFFReadDirectory: Warning, tiff_DefaultTS_001.tif: unknown field with tag 65001 (0xfde9) encountered.
-TIFFReadDirectory: Warning, tiff_DefaultTS_001.tif: unknown field with tag 65002 (0xfdea) encountered.
-TIFFReadDirectory: Warning, tiff_DefaultTS_001.tif: unknown field with tag 65003 (0xfdeb) encountered.
-TIFF Directory at offset 0x55008 (348168)
-  Image Width: 680 Image Length: 512
-  Bits/Sample: 8
-  Sample Format: unsigned integer
-  Compression Scheme: None
-  Photometric Interpretation: min-is-black
-  Samples/Pixel: 1
-  Rows/Strip: 512
-  Planar Configuration: single image plane
-  Make: Unknown
-  Model: Unknown
-  Tag 65000: 748114737.240688
-  Tag 65001: 25141
-  Tag 65002: 748114737
-  Tag 65003: 254905820
-
-

- This shows the expected result. The epicsTSNsec (tag 65003) values are non-zero, - because the default timestamp source is being used. The epicsTSSec values are the - same as the integer part of the timeStamp values. -

-

- This is the output of the "tiffinfo" utility on a TIFF file collected with the used-defined - timestamp source: -

-
-corvette:~/scratch>tiffinfo tiff_UserTS_001.tif 
-TIFFReadDirectory: Warning, tiff_UserTS_001.tif: unknown field with tag 65000 (0xfde8) encountered.
-TIFFReadDirectory: Warning, tiff_UserTS_001.tif: unknown field with tag 65001 (0xfde9) encountered.
-TIFFReadDirectory: Warning, tiff_UserTS_001.tif: unknown field with tag 65002 (0xfdea) encountered.
-TIFFReadDirectory: Warning, tiff_UserTS_001.tif: unknown field with tag 65003 (0xfdeb) encountered.
-TIFF Directory at offset 0x55008 (348168)
-  Image Width: 680 Image Length: 512
-  Bits/Sample: 8
-  Sample Format: unsigned integer
-  Compression Scheme: None
-  Photometric Interpretation: min-is-black
-  Samples/Pixel: 1
-  Rows/Strip: 512
-  Planar Configuration: single image plane
-  Make: Unknown
-  Model: Unknown
-  Tag 65000: 748114762.240688
-  Tag 65001: 25191
-  Tag 65002: 748114762
-  Tag 65003: 0
-
-

- This shows the expected result. The epicsTSNsec (tag 65003) values are zero, because - the user-defined timestamp source is being used. The epicsTSSec values are the same - as the integer part of the timeStamp values. -

-

- Future plans

-

- While making these changes I found that the NDFileNexus and NDFileHDF5 plugins, - which write Nexus-HDF5 and native HDF5 files respectively, do not currently store - the NDArray.timeStamp information at all in the files. This is an oversight that - should be fixed, and they should of course be extended to also store NDArray.epicsTS. - I did not write these plugins, so I am hoping that the original authors can make - these changes.

- - diff --git a/documentation/commonPlugins.png b/documentation/commonPlugins.png deleted file mode 100755 index c507724ce..000000000 Binary files a/documentation/commonPlugins.png and /dev/null differ diff --git a/documentation/pluginDoc.html b/documentation/pluginDoc.html deleted file mode 100755 index 8d2bfe9d6..000000000 --- a/documentation/pluginDoc.html +++ /dev/null @@ -1,921 +0,0 @@ - - - - areaDetector Plugins - - - -
-

- areaDetector Plugins

-

- April 13, 2016

-

- Mark Rivers

-

- University of Chicago

-
-

- Contents

- -

- Overview

-

- A powerful feature of the EPICS - areaDetector module is the concept of plugins. A plugin is code that is called - by a driver that passes NDArray data in a callback. Plugins can be used to process - array data in real time. Existing plugins do operations such as compute statistics - (NDPluginStats), convert data to standard asyn arrays (NDPluginStdArrays), save - data to disk (NDPluginFile), select regions-of-interest (NDPluginROI), as well as - many more. New plugins can be written to perform specialized functions. Once a plugin - is written it will work with any areaDetector driver. Plugins have the the following - properties: -

- -

- NDPluginDriver

-

- NDPluginDriver inherits from asynNDArrayDriver. - NDPluginDriver is the class from which actual plugins are directly derived. The - EPICS database NDArrayBase.template provides access to each of the parameters defined - in asynNDArrayDriver, and the asynNDArrayDriver - documentation describes that database. The NDPluginDriver class handles most of - the details of processing NDArray callbacks from the driver. Plugins derived from - this class typically need to implement the processCallbacks method, and one or more - of the write(Int32, Float64, Octet) methods. The - NDPluginDriver class documentation describes this class in detail. -

-

- NDPluginDriver defines parameters that all plugin drivers should implement if possible. - These parameters are defined by strings (drvInfo strings in asyn) with an associated - asyn interface, and access (read-only or read-write). The EPICS database NDPluginBase.template - provides access to these standard plugin 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 NDPluginDriverArrayPort. -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- Parameter Definitions in NDPluginDriver.h and EPICS Record Definitions in NDPluginBase.template -
- Parameter index variable - - asyn interface - - Access - - Description - - drvInfo string - - EPICS record name - - EPICS record type -
- Information about this plugin
- NDPluginDriver
- PluginType
- asynOctet - r/o - A string describing the plugin type. - PLUGIN_TYPE - $(P)$(R)PluginType_RBV - stringin
- asyn NDArray driver doing callbacks to this plugin
- NDPluginDriver
- ArrayPort
- asynOctet - r/w - asyn port name for NDArray driver that will make callbacks to this plugin. This - port can be changed at run time, connecting the plugin to a different NDArray driver. - - NDARRAY_PORT - $(P)$(R)NDArrayPort
- (P)$(R)NDArrayPort_RBV
- stringout
- stringin
- NDPluginDriver
- ArrayAddr
- asynInt32 - r/w - asyn port address for NDArray driver that will make callbacks to this plugin. This - address can be changed at run time, connecting the plugin to a different address - in the NDArray driver. - NDARRAY_ADDR - $(P)$(R)NDArrayAddress
- $(P)$(R)NDArrayAddress_RBV
- longout
- longin
- Queue size and status
- NDPluginDriver
- QueueSize
- asynInt32 - r/w - The total queue size for callbacks when BlockingCallbacks=0. This can be changed - at run time to increase or decrease the size of the queue and thus the buffering - in this plugin. This changes the memory requirements of the plugin. When the queue - size is changed the plugin temporarily stops the callbacks from the input driver - and waits for all NDArrays currently in the queue to process. - QUEUE_SIZE - $(P)$(R)QueueSize
- $(P)$(R)QueueSize_RBV
- longout
- longin
- NDPluginDriver
- QueueFree
- asynInt32 - r/o - The number of free queue elements. This record goes into minor alarm when the queue - is 75% full and major alarm when the queue is 100% full. - QUEUE_FREE - $(P)$(R)QueueFree - longin
- NDPluginDriver
- QueueUse
- N/A - r/o - The number of used queue elements. - N/A - $(P)$(R)QueueUse - calc
- Number of threads
- NDPluginDriver
- MaxThreads
- asynInt32 - r/o - The maximum number of threads that this plugin is allowed to use. This is defined - when the plugin is created, and cannot be changed at run-time. Note that some plugins - are not thread-safe for multiple threads running in the same plugin object, and - these must force MaxThreads=1. - MAX_THREADS - $(P)$(R)MaxThreads_RBV - longin
- NDPluginDriver
- NumThreads
- asynInt32 - r/w - The number of threads to use for this plugin. The value must be between 1 and MaxThreads. - - NUM_THREADS - $(P)$(R)NumThreads
- $(P)$(R)NumThreads_RBV
- longout
- longin
- Sorting of output NDArrays
- When using a plugin with multiple threads, or when the input plugin is NDPluginGather - it is likely that the NDArray output will be slightly out of order, i.e. NDArray::uniqueId - fields will not be monotonically increasing. This is because the threads are running - asynchronously and at slightly different speeds.  As a consequence a file plugin - downstream of this plugin would write NDArrays to the file in the "wrong" order. - Plugins have an option to sort the NDArrays by uniqueId to attempt to output them - in the correct order. This sorting option is enabled by setting SortMode=Sorted, - and works using the following algorithm: -
    -
  • An std::multiset object is created to store the NDArray output pointers as they - are received in NDArrayDriver::doNDArrayCallbacks. This is the method that all derived - classes must call to output NDArrays to downstream plugins. This std::multiset also - stores the time at which each NDArray was received by the NDArrayDriver::doNDArrayCallbacks - method. This multiset is automatically sorted by the uniqueId of each NDArray.
  • -
  • A worker thread is created which processes at the time interval specified by SortTime. - This thread outputs the next array (NDArray[N]) in the multiset if any of the following - are true: -
      -
    • NDArray[N].uniqueId = NDArray[N-1].uniqueId. This allows for the case where multiple - upstream plugins are processing the same NDArray. This may happen, for example, - if NDPluginGather is being used and not all of its inputs are getting their NDArrays - from from NDPluginScatter.
    • -
    • NDArray[N].uniqueId = NDArray[N-1].uniqueId + 1. This is the normal case.
    • -
    • NDArray[N] has been in the multiset for longer than SortTime. This will be the - case if the next array that should have been output has not arrived, perhaps - because it has been dropped by some upstream plugin and will never arrive. Increasing - the SortTime will allow longer for out of order arrays to arrive, at the expense - of more memory because the multiset will grow larger before outputting the arrays.
    • -
    -
  • -
- When NDArrays are added to the multiset they have their reference count increased, - and so will still be consuming memory. The multiset is limited in size to SortSize. - If the multiset would grow larger than this because arrays are arriving faster than - they are being removed with the specified SortTime, then they will be dropped in - the same manner as when NDArrays are dropped from the normal input queue. In this - case DroppedOutputArrays will be incremented. Note that because NDArrays can be - stored in both the normal input queue and the multiset the total memory potentially - used by the plugin is determined by both QueueSize and SortSize.
- If the plugin is receiving 500 NDArrays/s (2 ms period), and the maximum time the - plugin threads require to execute is 20 msec, then the minimum value of SortTime - should be 0.02 sec, and the minimum value of SortSize would be 10. It is a good - idea to add a safety margin to these values, so perhaps SortSize=50 and SortTime=0.04 - sec.
- NDPluginDriver
- SortMode
- asynInt32 - r/w - Selects whether the plugin outputs NDArrays in the order in which they arrive (Unsorted=1) - or sorted by UniqueId (Sorted=1). - SORT_MODE - $(P)$(R)SortMode
- $(P)$(R)SortMode_RBV
- mbbo
- mbbi
- NDPluginDriver
- SortTime
- asynFloat64 - r/w - Sets the minimum time that the plugin will wait for preceeding arrays to arrive - before outputting array N when SortMode=Sorted. - SORT_TIME - $(P)$(R)SortTime
- $(P)$(R)SortTime_RBV
- ao
- ai
- NDPluginDriver
- SortSize
- asynInt32 - r/w - The maximum allowed size of the std::multiset. This can be changed at run time to - increase or decrease the size of the queue and thus the buffering in this plugin. - This changes the memory requirements of the plugin. - SORT_SIZE - $(P)$(R)SortSize
- $(P)$(R)SortSize_RBV
- longout
- longin
- NDPluginDriver
- SortFree
- asynInt32 - r/o - The number of NDArrays remaining before the std::multiset will not be allowed to - grow larger and the plugin may begin to drop output frames. - SORT_FREE - $(P)$(R)SortFree - longin
- NDPluginDriver
- DisorderedArrays
- asynInt32 - r/w - The number of NDArrays that have been output in the "wrong" order. The definition - of the wrong order for NDArray[N] is that NDArray[N].uniqueId=NDArray[N-1].uniqueId - or NDArray[N].uniqueId=NDArray[N-1].uniqueId+1. The reason for the equality test - is explained above. - DISORDERED_ARRAYS - $(P)$(R)DisorderedArrays
- $(P)$(R)DisorderedArrays_RBV
- longout
- longin
- NDPluginDriver
- DroppedOutputArrays
- asynInt32 - r/w - Counter that increments by 1 each time an NDArray callback occurs when SortMode=1 - and the std::multiset is full (SortFree=0), so the NDArray cannot be added to the - std::multiset. - DROPPED_OUTPUT_ARRAYS - $(P)$(R)DroppedOutputArrays
- $(P)$(R)DroppedOutputArrays_RBV
- longout
- longin
- Callback enable, throttling, and statistics
- NDPluginDriver
- EnableCallbacks
- asynInt32 - r/w - Enable (1) or disable (0) callbacks from the driver to this plugin. If callbacks - are disabled then the plugin will normally be idle and consume no CPU resources. - When disabling the plugin it will continue to process any NDArrays that are already - in the queue. - ENABLE_CALLBACKS - $(P)$(R)EnableCallbacks
- $(P)$(R)EnableCallbacks_RBV
- bo
- bi
- NDPluginDriver
- BlockingCallbacks
- asynInt32 - r/w - 0 = callbacks from the driver do not block; the NDArray data is put on a queue and - the callback processes in one of the plugin threads. -
- 1 = callbacks from the driver block; the callback processes in the driver callback - thread.
- BLOCKING_CALLBACKS - $(P)$(R)BlockingCallbacks
- $(P)$(R)BlockingCallbacks_RBV
- bo
- bi
- NDPluginDriver
- ProcessPlugin
- asynInt32 - r/w - NDPluginDriver maintains a pointer to the last NDArray that the plugin received. - If the ProcessPlugin record is processed then the plugin runs again using this same - NDArray. This can be used to change the plugin parameters and observe the effects - on downstream plugins and image viewers without requiring the underlying detector - to collect another NDArray. When the plugin is disabled the cached NDArray is released - back to the NDArrayPool. - PROCESS_PLUGIN - $(P)$(R)ProcessPlugin - bo
- NDPluginDriver
- ExecutionTime
- asynFloat64 - r/o - The execution time when the plugin processes. This is useful for measuring the performance - of the plugin - EXECUTION_TIME - $(P)$(R)ExecutionTime_RBV - ai
- NDPluginDriver
- MinCallbackTime
- asynFloat64 - r/w - The minimum time in seconds between calls to processCallbacks. Any callbacks occuring - before this minimum time has elapsed will be ignored. 0 means no minimum time, i.e. - process all callbacks. - MIN_CALLBACK_TIME - $(P)$(R)MinCallbackTime
- $(P)$(R)MinCallbackTime_RBV
- ao
- ai
- NDPluginDriver
- MaxByteRate
- asynFloat64 - r/w - The maximum data output rate in bytes/s. If the output rate would exceed this then - the output array is dropped and DroppedOutputArrays is incremented. This can be - useful, for example, to limit the network bandwidth from a plugin. For most plugins - this logic is implemented in NDPluginDriver::endProcessCallbacks() when the plugin - is finishing its operation and is doing callbacks to any downstream plugins. However, - the NDPluginPva and NDPluginStdArrays plugins are treated differently because the - output we generally want to throttle is not the NDArray passed to downstream plugins, - but rather the size of the output for the pvaServer (NDPluginPva) or the size of - the arrays passed back to device support for waveform records (NDPluginStdArrays). - For these plugins the throttling logic is thus also implemented inside the plugin. - If these plugins are throttled then they really do no useful work, and so ArrayCounter - is not incremented. This makes the ArrayRate reflect the rate at which the plugin - is actually doing useful work. For NDPluginStdArrays this is also important because - clients (e.g. ImageJ) may monitor the ArrayCounter_RBV field to decide when to read - the array and update the display. - MAX_BYTE_RATE - $(P)$(R)MaxByteRate
- $(P)$(R)MaxByteRate_RBV
- ao
- ai
- NDPluginDriver
- DroppedArrays
- asynInt32 - r/w - Counter that increments by 1 each time an NDArray callback occurs when NDPluginDriverBlockingCallbacks=0 - and the plugin driver queue is full, so the callback cannot be processed. - DROPPED_ARRAYS - $(P)$(R)DroppedArrays
- $(P)$(R)DroppedArrays_RBV
- longout
- longin
- Debugging control
- N/A - N/A - N/A - N/A - $(P)$(R)AsynIO - asyn
-

- Guidelines and rules for plugins

-

- The following are guidelines and rules for writing plugins

- -

- Base class medm screens

-

- There are 2 medm screens for the NDPluginDriver. The first is NDPluginBase.adl. - This exposes a subset of the EPICS PVs for the NDPluginDriver base class. It is - normally included in the medm screen for every plugin. For example, the following - is the medm screen for the NDPluginStdArrays plugin. Because this plugin does not - have any additional records beyond those in the NDPluginDriver base class, this - medm screen consists only the NDPluginBase.adl file. -

-
-

- NDPluginBase.png

-
-

- NDPluginBase.adl displays only the PVs that are most commonly used, and does not - expose the PVs that are intended more for expert configuration. NDPluginBaseFull.adl - displays all of the PVs in NDPluginDriver base class, include those controlling - the queue size, number of threads, output array sorting, etc. This display can be - opened from the More related display menu in NDPluginBase.adl.

-
-

- NDPluginBaseFull.png

-
-

- commonPlugins.cmd

-

- The ADCore/iocBoot directory contains a file called EXAMPLE_commonPlugins.cmd. This - file should be copied to commonPlugins.cmd and edited for site-specific requirements. - commonPlugins.cmd is loaded by all of the example driver IOC startup scripts. It - loads a set of plugins which are typically useful for detectors IOCs. Each detector - medm screen has links to related displays for each of the common plugins. While - this set of plugins is often useful and sufficient, users are free to add or remove - plugins from this set for their own IOCs. New medm displays will typically need - to be created if that is done, to have the required links to related displays.

-

- The following medm screen shows the status of all of the common plugins at a glance, - with links to bring up the detailed screen for each.

-
-

- commonPlugins.adl

- commonPlugins.png
-

- Performance example

-

- The following example shows how increasing the number of threads from 1 to 5 in - the NDPluginStats statistics plugins allows it to keep up with the simDetector running - at about 485 frames/s. It also demonstrates the effect of changing SortMode=Sorted - and SortMode=Unsorted.

-

- The images were generated by simDetector generating 1024x1024 Float32 images at - about 485 frames/s as shown in the following 2 medm screens.

-
-

- NDPluginDriverExample_simDetector.png

-

- NDPluginDriverExample_simDetectorSetup.png

-
-

- The NDPluginStats plugin was configured to perform all of the statistics calculations - (centroid, histogram, etc.) to maximize the time required to process each array, - as shown in the following medm screen.

-
-

- NDPluginDriverExample_NDStats.png

-
-

- The statistics plugin was first run with just one thread, as shown in the NDPluginBaseFull.adl - screen. This screen can be opened with the More related display from the NDPluginBase.adl - screen, which is embedded on the left hand side of all plugin medm screens. Note - the following on this screen:

- -
-

- NDPluginDriverExample_StatsFull_1thread.png

-
-

- The following show the Linux "top" program when the plugin is running with 1 thread - as above. Note that the STATS5_Plugin_1 thread is using almost 100% of a core. The - simDetector is using about 58% of a core.

-
-

- NDPluginDriverExample_top_1thread.png

-
-

- The NumThreads PV in the statistics plugin was then changed from 1 to 3, as shown - in the following NDPluginBaseFull.adl screen. Note the following:

- -
-

- NDPluginDriverExample_StatsFull_3thread.png

-
-

- The following show the Linux "top" program when the plugin is running with 3 threads - as above. Note that there are now 3 STATS5_Plugin_N threads, each using almost 100% - of a core.

-
-

- NDPluginDriverExample_top_3thread.png

-
-

- The NumThreads PV in the statistics plugin was then changed from 3 to 5, as shown - in the following NDPluginBaseFull.adl screen. Note the following:

- -
-

- NDPluginDriverExample_StatsFull_5thread.png

-
-

- The following show the Linux "top" program when the plugin is running with 5 threads - as above. Note that there are now 5 STATS5_Plugin_N threads, each using about 87% - of a core.

-
-

- NDPluginDriverExample_top_5thread.png

-
-

- To test sorting of output NDArrays the simDetector was configured to generate 100 - arrays in Multiple mode, and the NDFileNetCDF plugin was configured to save 100 - arrays in Stream mode. The netCDF plugin received its NDArrays from the STATS5 plugin - running with 5 threads as shown above. The test was done 2 times, once with SortMode=Sorted, - and then with SortMode=Unsorted. The files are were then read into IDL, using the - read_nd_netcdf.pro file that can be found in ADCore/Viewers/IDL.

-

- The following shows the output when reading the file that was written when SortMode=Sorted. - attr[0].pvalue is the value of the UniqueId attribute for all 100 NDArrays. Note - that the arrays are all in the correct UniqueId order. -

-
-IDL> t = read_nd_netcdf('thread_test_5_sorted_001.nc', attr=attr) 
-IDL> u=*attr[0].pvalue
-IDL> print, u 
-      479298      479299      479300      479301      479302      479303      479304      479305      479306      479307
-      479308      479309      479310      479311      479312      479313      479314      479315      479316      479317
-      479318      479319      479320      479321      479322      479323      479324      479325      479326      479327
-      479328      479329      479330      479331      479332      479333      479334      479335      479336      479337
-      479338      479339      479340      479341      479342      479343      479344      479345      479346      479347
-      479348      479349      479350      479351      479352      479353      479354      479355      479356      479357
-      479358      479359      479360      479361      479362      479363      479364      479365      479366      479367
-      479368      479369      479370      479371      479372      479373      479374      479375      479376      479377
-      479378      479379      479380      479381      479382      479383      479384      479385      479386      479387
-      479388      479389      479390      479391      479392      479393      479394      479395      479396      479397
-
-

- The following shows the output when reading the file that was written when SortMode=Unsorted. - Note that the arrays are not in the correct UniqueId order.

-
-IDL> t = read_nd_netcdf('thread_test_5_unsorted_001.nc', attr=attr) 
-IDL> u=*attr[0].pvalue
-IDL> print, u 
-      479398      479399      479400      479401      479402      479403      479404      479405      479406      479407
-      479408      479409      479410      479411      479412      479414      479413      479415      479416      479417
-      479418      479419      479420      479421      479423      479422      479424      479425      479426      479427
-      479429      479428      479430      479432      479431      479435      479433      479434      479436      479437
-      479438      479440      479439      479441      479443      479442      479446      479445      479444      479447
-      479448      479449      479450      479452      479451      479453      479454      479456      479455      479457
-      479459      479458      479460      479461      479463      479462      479464      479465      479466      479467
-      479469      479468      479470      479471      479472      479473      479475      479474      479476      479477
-      479478      479479      479480      479481      479482      479483      479484      479485      479486      479487
-      479488      479489      479490      479491      479492      479493      479494      479495      479496      479497
-
- - diff --git a/documentation/scatterGatherExample_NDFileNetCDF.png b/documentation/scatterGatherExample_NDFileNetCDF.png deleted file mode 100755 index a9ee8ab3d..000000000 Binary files a/documentation/scatterGatherExample_NDFileNetCDF.png and /dev/null differ diff --git a/documentation/scatterGatherExample_NDGather.png b/documentation/scatterGatherExample_NDGather.png deleted file mode 100755 index 3b80d5f48..000000000 Binary files a/documentation/scatterGatherExample_NDGather.png and /dev/null differ diff --git a/documentation/scatterGatherExample_NDGatherFull.png b/documentation/scatterGatherExample_NDGatherFull.png deleted file mode 100755 index 6dd30c031..000000000 Binary files a/documentation/scatterGatherExample_NDGatherFull.png and /dev/null differ diff --git a/documentation/scatterGatherExample_NDGatherFullUnsorted.png b/documentation/scatterGatherExample_NDGatherFullUnsorted.png deleted file mode 100755 index 4756f3fd8..000000000 Binary files a/documentation/scatterGatherExample_NDGatherFullUnsorted.png and /dev/null differ diff --git a/documentation/scatterGatherExample_NDScatter.png b/documentation/scatterGatherExample_NDScatter.png deleted file mode 100755 index 87411c3b4..000000000 Binary files a/documentation/scatterGatherExample_NDScatter.png and /dev/null differ diff --git a/documentation/scatterGatherExample_NDStats.png b/documentation/scatterGatherExample_NDStats.png deleted file mode 100755 index 26007d9be..000000000 Binary files a/documentation/scatterGatherExample_NDStats.png and /dev/null differ diff --git a/documentation/scatterGatherExample_commonPlugins.png b/documentation/scatterGatherExample_commonPlugins.png deleted file mode 100755 index 055e0c561..000000000 Binary files a/documentation/scatterGatherExample_commonPlugins.png and /dev/null differ diff --git a/documentation/scatterGatherExample_simDetector.png b/documentation/scatterGatherExample_simDetector.png deleted file mode 100755 index 04b78c6bc..000000000 Binary files a/documentation/scatterGatherExample_simDetector.png and /dev/null differ diff --git a/documentation/scatterGatherExample_simDetectorSetup.png b/documentation/scatterGatherExample_simDetectorSetup.png deleted file mode 100755 index 0138c17b5..000000000 Binary files a/documentation/scatterGatherExample_simDetectorSetup.png and /dev/null differ diff --git a/documentation/scatterGatherExample_top_threads.png b/documentation/scatterGatherExample_top_threads.png deleted file mode 100755 index 07fe7480b..000000000 Binary files a/documentation/scatterGatherExample_top_threads.png and /dev/null differ