diff --git a/documentation/areaDetectorReleaseNotes.html b/documentation/areaDetectorReleaseNotes.html index 3f473f7..e63b61f 100755 --- a/documentation/areaDetectorReleaseNotes.html +++ b/documentation/areaDetectorReleaseNotes.html @@ -1,58 +1,56 @@ - - -
-- -
-simDetector is a driver for a simulated area detector. It inherits from ADDriver. The simulation detector implements -nearly all of the parameters defined in ADStdDriverParams.h, with the exception of the file saving parameters, -which it does not -implement. It also implements a few parameters that are specific -to the simulation detector. The simulation detector is useful as a model for writing real detector drivers. It is -also very useful for testing plugins and channel access clients. -This is part of the definition of the simDetector class: -
-+ + +areaDetector Simulation driver + + ++ ++ areaDetector Simulation driver
++ September 5, 2008
++ Mark Rivers
++ University of Chicago
++
++ Table of Contents
+
+ simDetector is a driver for a simulated area detector. It inherits from ADDriver. + The simulation detector implements nearly all of the parameters defined in ADStdDriverParams.h, + with the exception of the file saving parameters, which it does not implement. It + also implements a few parameters that are specific to the simulation detector. The + simulation detector is useful as a model for writing real detector drivers. It is + also very useful for testing plugins and channel access clients. This is part of + the definition of the simDetector class: +
+
class simDetector : public ADDriver {
public:
simDetector(const char *portName, int maxSizeX, int maxSizeY, NDDataType_t dataType,
@@ -45,26 +47,33 @@ public:
virtual asynStatus drvUserCreate(asynUser *pasynUser, const char *drvInfo,
const char **pptypeName, size_t *psize);
void report(FILE *fp, int details);
-
-The portName, maxBuffers, and maxMemory arguments are passed to the ADDriver base class constructor. The maxSizeX, maxSizeY, and -dataType arguments are specific to the simulation driver, controlling the maximum image size and initial data type of the -computed images. The writeInt32 and writeFloat64 methods override those in the base class. The driver takes action -when new parameters are passed via those interfaces. For example, the ADAcquire parameter (on the asynInt32 interface) is -used to turn acquisition (i.e. computing new images) on and off. -
--The simulation driver initially sets the image[i, j] = i*gainX + j*gainY * gain * exposureTime * 1000. Thus the -image is a linear ramp in the X and Y directions, with the gains in each direction being detector-specific parameters. -Each subsquent acquisition increments each pixel value by gain*exposureTime*1000. Thus if gain=1 and exposureTime=.001 -second then the pixels are incremented by 1. If the array is an unsigned 8 or 16 bit integer then the pixels -will overflow and wrap around to 0 after some period of time. This gives the appearance of bands that appear to move -with time. The slope of the bands and their periodicity can be adjusted by changing the gains and exposure times. -
--The driver creates a thread that waits for a signal to start acquisition. When acquisition is started that thread -computes new images and then calls back any registered plugins as follows: -
-++
+ The portName, maxBuffers, and maxMemory arguments are passed to the ADDriver base + class constructor. The maxSizeX, maxSizeY, and dataType arguments are specific to + the simulation driver, controlling the maximum image size and initial data type + of the computed images. The writeInt32 and writeFloat64 methods override those in + the base class. The driver takes action when new parameters are passed via those + interfaces. For example, the ADAcquire parameter (on the asynInt32 interface) is + used to turn acquisition (i.e. computing new images) on and off. +
++ The simulation driver initially sets the image[i, j] = i*gainX + j*gainY * gain + * exposureTime * 1000. Thus the image is a linear ramp in the X and Y directions, + with the gains in each direction being detector-specific parameters. Each subsquent + acquisition increments each pixel value by gain*exposureTime*1000. Thus if gain=1 + and exposureTime=.001 second then the pixels are incremented by 1. If the array + is an unsigned 8 or 16 bit integer then the pixels will overflow and wrap around + to 0 after some period of time. This gives the appearance of bands that appear to + move with time. The slope of the bands and their periodicity can be adjusted by + changing the gains and exposure times. +
++ The driver creates a thread that waits for a signal to start acquisition. When acquisition + is started that thread computes new images and then calls back any registered plugins + as follows: +
+
/* Put the frame number and time stamp into the buffer */
pImage->uniqueId = imageCounter;
pImage->timeStamp = startTime.secPastEpoch + startTime.nsec / 1.e9;
@@ -77,137 +86,178 @@ computes new images and then calls back any registered plugins as follows:
"%s:%s: calling imageData callback\n", driverName, functionName);
doCallbacksGenericPointer(pImage, NDArrayData, addr);
epicsMutexLock(this->mutexId);
-
--The simulation driver-specific parameters are the following: -
- -| Parameter Definitions in simDetector.cpp and EPICS Record Definitions in simDetector.template | -||||||
| Enum name | -asyn interface | -Access | -Description | -drvUser string | -EPICS record name | -EPICS record type | -
|---|---|---|---|---|---|---|
| SimGainX | -asynFloat64 | -r/w | -Gain in the X direction | -SIM_GAINX | -$(P)$(R)GainX $(P)$(R)GainX_RBV |
- ao ai |
-
| SimGainY | -asynFloat64 | -r/w | -Gain in the Y direction | -SIM_GAINY | -$(P)$(R)GainY $(P)$(R)GainY_RBV |
- ao ai |
-
| SimResetImage | -asynInt32 | -r/w | -Reset image back to initial conditions when 1. | -RESET_IMAGE | -$(P)$(R)Reset $(P)$(R)Reset_RBV |
- longout longin |
-
-The following is the MEDM screen ADBase.adl connected to a simulation detector. -
-
-
-
-The following is the MEDM screen that provides access to the specific parameters for the simulation detector. -
-
-
-
-The following is an IDL epics_ad_display screen using image_display (discussed below) illustrating the simulation detector images. - -
-
-
-
-This driver is configured via the simDetectorConfig() function. If this is -to be used in an IOC, it must be called before iocInit(). It has the -following syntax: -
- --If being used in an IOC, and an EPICS PV interface with the driver is desired, -the ADBase.template and simDetector.template databases should also -be loaded for the driver instance. -
--The areaDetector software comes with an example IOC for the simulation driver, iocBoot/iocSimDetector. -
- - + ++ The simulation driver-specific parameters are the following: +
+| + Parameter Definitions in simDetector.cpp and EPICS Record Definitions in simDetector.template | +||||||
| + Enum name | ++ asyn interface | ++ Access | ++ Description | ++ drvUser string | ++ EPICS record name | ++ EPICS record type | +
|---|---|---|---|---|---|---|
| + SimGainX | ++ asynFloat64 | ++ r/w | ++ Gain in the X direction | ++ SIM_GAINX | +
+ $(P)$(R)GainX + $(P)$(R)GainX_RBV |
+
+ ao + ai |
+
| + SimGainY | ++ asynFloat64 | ++ r/w | ++ Gain in the Y direction | ++ SIM_GAINY | +
+ $(P)$(R)GainY + $(P)$(R)GainY_RBV |
+
+ ao + ai |
+
| + SimResetImage | ++ asynInt32 | ++ r/w | ++ Reset image back to initial conditions when 1. | ++ RESET_IMAGE | +
+ $(P)$(R)Reset + $(P)$(R)Reset_RBV |
+
+ longout + longin |
+
+ The following is the MEDM screen ADBase.adl connected to a simulation detector. +
+
+
+
+ The following is the MEDM screen that provides access to the specific parameters + for the simulation detector. +
+
+
+
+ The following is an IDL epics_ad_display screen using image_display (discussed below) + illustrating the simulation detector images. +
+
+
+
+ This driver is configured via the simDetectorConfig() function. If this + is to be used in an IOC, it must be called before iocInit(). It has the + following syntax: +
++ If being used in an IOC, and an EPICS PV interface with the driver is desired, the + ADBase.template and simDetector.template databases should also + be loaded for the driver instance. +
++ The areaDetector software comes with an example IOC for the simulation driver, + iocBoot/iocSimDetector. +
+ +