From 08cf565aa0391de8ec7aa6bd4b09eef3fa509b96 Mon Sep 17 00:00:00 2001
From: rivers
-
areaDetector ADSC driver
@@ -15,7 +15,7 @@
Lewis Muir
University of Chicago
-
+
Table of Contents
diff --git a/documentation/areaDetectorDoc.html b/documentation/areaDetectorDoc.html
index 06f943c..ab5d78d 100755
--- a/documentation/areaDetectorDoc.html
+++ b/documentation/areaDetectorDoc.html
@@ -13,8 +13,6 @@
University of Chicago
-
Contents
@@ -71,9 +69,8 @@
What follows is a detailed description of the software, working from the bottom @@ -168,8 +166,8 @@ 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.
-
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
@@ -432,8 +430,8 @@ public:
is a second version of callParamCallbacks that takes an argument specifying
the parameter list number, and the asyn address to match.
The NDArray (N-Dimensional array) is the class that is used for passing detector data from drivers to plugins. The NDArray class is defined as follows: @@ -513,7 +511,7 @@ public: first element of the detector in unbinned units. If a selected region of the detector is being read, then this value may be > 0. The offset value is cumulative, so if a plugin such as NDPluginROI further selects a subregion, the offset is relative - to the first element in the detector and not to the first element of the region + to the first element in the detector, and not to the first element of the region passed to NDPluginROI.
binning is the binning (sumation of elements) in this dimension.
The offset value is cumulative, so if a plugin such as NDPluginROI performs binning,
@@ -531,8 +529,9 @@ public:
as follows:
uniqueId This should be a number that uniquely identifies this array.
- Detector drivers should assign this number to the NDArray before calling the plugins.uniqueId This should be a number that uniquely identifies this array,
+ e.g. frame number. Detector drivers should assign this number to the NDArray before
+ calling the plugins.timeStamp This should be a timestamp value in seconds recording when
the frame was collected. The time=0 reference is driver-dependent because of differences
in vendor libraries. If there is a choice, it is recommended to use timeStamp=0
@@ -568,8 +567,8 @@ public:
release. This method calls NDArrayPool->release() for this object.
It decreases the reference count for this array.The NDArrayPool class manages a free list (pool) of NDArray objects (described above). Drivers allocate NDArray objects from the pool, and pass these objects to plugins. @@ -628,8 +627,8 @@ public:
report This method reports on the free list size and other properties
of the NDArrayPool object.asynNDArrayDriver inherits from asynPortDriver. It implements the asynGenericPointer functions, assuming that these reference NDArray objects. This is the class from @@ -665,8 +664,8 @@ public:
report This method calls the report function in the asynPortDriver
base class. It then calls the NDArrayPool->report() method if details > 5.ADDriver inherits from asynNDArrayDriver. This is the class from which area detector drivers are directly derived. Its public interface is defined as follows: @@ -701,8 +700,8 @@ public: file name in the ADFullFileName parameter from the ADFilePath, ADFileName, ADFileNumber, and ADFileTemplate parameters. -
The file ADStdDriverParams.h defines the following:
Note that for parameters whose values are defined by enum values (e.g ADImageMode, ADTriggerMode, ADFileFormat, ADStatus), drivers can use a different set of enum values for these parameters. They can override the enum menu in ADBase.template - with detector-specific choices by loading a detector-specific template file after - loading ADBase.template. + with detector-specific choices by loading a detector-specific template file that + redefines that record field after loading ADBase.template.
| r/o | - Full file name | + Full file name constructed using the algorithm described in ADFileTemplateFULL_FILE_NAME | @@ -1370,7 +1369,7 @@ typedef enum r/w | Auto-increment flag. Controls whether FileNumber is automatically incremented by - 1 each time an acquisition completes (0=No, 1=Yes) | + 1 each time a file is saved (0=No, 1=Yes)AUTO_INCREMENT | @@ -1388,7 +1387,8 @@ typedef enum | r/w | - Auto-save flag (0=No, 1=Yes) | + Auto-save flag (0=No, 1=Yes) controlling whether a file is automatically saved each + time acquisition completes.AUTO_SAVE |
@@ -1656,5 +1656,9 @@ typedef enum
+ In addition to these drivers, Brian Tieman is writing a driver for the Perkin-Elmer + flat-panel amorphous silicon detector. Drivers for the MAR-CCD, MAR-345 online image + plate, and the Roper Scientific CCD cameras will be written in the near future. diff --git a/documentation/pilatusDoc.html b/documentation/pilatusDoc.html index 813c435..a2a9966 100755 --- a/documentation/pilatusDoc.html +++ b/documentation/pilatusDoc.html @@ -7,7 +7,7 @@areaDetector Pilatus driver- September 17, 2008+ September 21, 2008Mark Rivers
@@ -115,8 +115,8 @@
|
@@ -159,17 +159,18 @@
The areaDetector Pilatus driver only supports TIFF files, so the extension should
be .tif. When saving multiple images (NImages>1) camserver has its own rules for
creating the names of the individual files. The rules are as follows. The name constructed
- using the algorithm described for ADFileTemplate in
- areaDetectorDoc.html is used as a basename. The following examples show the
- interpretation of the basename.
- Basename Files produced
+ using the algorithm described for ADFileTemplate under
+ File Saving Parameters in ADStdDriverParams is used as a basename. The following
+ examples show the interpretation of the basename.
+ |
It is useful to use NDPluginROI to define an ROI containing the entire Pilatus detector. - This ROI can be monitored to make sure that the 20-bit limit of 1,048,575 is not - being approached in any pixel. + The MaxValue_RBV PV in this ROI can be monitored to make sure that the 20-bit limit + of 1,048,575 is not being approached in any pixel.
badX1,badY1 replacementX1,replacementY1 - badX2,badY2 replacementX2,replacementY2 - ... -+
+badX1,badY1 replacementX1,replacementY1 +badX2,badY2 replacementX2,replacementY2 +... +The X and Y coordinates range from 0 to NXPixels-1 and NYPixels-1. Up to 100 bad pixels can be defined. The bad pixel mapping simply replaces the bad pixels with another pixel's value. It does not do any averaging. It is felt that this is sufficient - for the purpose for which pilatusROI was written, namely fast on-line viewing of - ROIs and ImageData. More sophisticated algorithms can be used for offline analysis + for the purpose for which this driver was written, namely fast on-line viewing of + ROIs and image data. More sophisticated algorithms can be used for offline analysis of the image files themselves. The following is an example bad pixel file for a GSECARS detector: -
263,3 262,3 - 264,3 266,3 - 263,3 266,3 - 300,85 299,85 - 300,86 299,86 - 471,129 472,129 -+
+263,3 262,3 +264,3 266,3 +263,3 266,3 +300,85 299,85 +300,86 299,86 +471,129 472,129 +
ImageData[i] = (averageFlatField * ImageData[i])/flatField[i]; -+
+ImageData[i] = (averageFlatField * ImageData[i])/flatField[i]; +
pilatusDetectorConfig(const char *portName, const char *camserverPort, - int maxSizeX, int maxSizeY, int maxBuffers, size_t maxMemory); ++pilatusDetectorConfig(const char *portName, const char *camserverPort, + int maxSizeX, int maxSizeY, int maxBuffers, size_t maxMemory);
| Number of packets requested | - PS_PACKETS_RESENT | + PS_PACKETS_REQUESTED$(P)$(R)PSPacketsRequested_RBV |
@@ -302,10 +301,21 @@
prosilica.adl
- The following is an IDL epics_ad_display screen (discussed below) illustrating the - Prosilica detector images. + The following is an IDL + epics_ad_display screen displaying the Prosilica detector images.
+
+ + epics_ad_display.pro![]() + Future enhancements++ The driver does not currently support color. This will be added in the near future. + ++ Work is needed on connection management. If the camera is unplugged or powered off + which the areaDetector driver is running it does not gracefully recover. + |