areaDetector 1-9
/home/epics/devel/areaDetector/ADApp/pluginSrc/NDPluginProcess.h
Go to the documentation of this file.
00001 #ifndef NDPluginProcess_H
00002 #define NDPluginProcess_H
00003 
00004 #include <epicsTypes.h>
00005 #include <asynStandardInterfaces.h>
00006 
00007 #include "NDPluginDriver.h"
00008 
00009 /* Background array subtraction */
00010 #define NDPluginProcessSaveBackgroundString     "SAVE_BACKGROUND"   /* (asynInt32,   r/w) Save the current frame as background */
00011 #define NDPluginProcessEnableBackgroundString   "ENABLE_BACKGROUND" /* (asynInt32,   r/w) Enable background subtraction? */
00012 #define NDPluginProcessValidBackgroundString    "VALID_BACKGROUND"  /* (asynInt32,   r/o) Is there a valid background */
00013 
00014 /* Flat field normalization */
00015 #define NDPluginProcessSaveFlatFieldString      "SAVE_FLAT_FIELD"   /* (asynInt32,   r/w) Save the current frame as flat field */
00016 #define NDPluginProcessEnableFlatFieldString    "ENABLE_FLAT_FIELD" /* (asynInt32,   r/w) Enable flat field normalization? */
00017 #define NDPluginProcessValidFlatFieldString     "VALID_FLAT_FIELD"  /* (asynInt32,   r/o) Is there a valid flat field */
00018 #define NDPluginProcessScaleFlatFieldString     "SCALE_FLAT_FIELD"  /* (asynInt32,   r/o) Scale factor after dividing by flat field */
00019 
00020 /* Offset and scaling */
00021 #define NDPluginProcessEnableOffsetScaleString  "ENABLE_OFFSET_SCALE" /* (asynInt32, r/w) Enable offset and scale? */
00022 #define NDPluginProcessAutoOffsetScaleString    "AUTO_OFFSET_SCALE" /* (asynInt32,   r/w) Oneshot calc of scale and offset value from min and max values */
00023 #define NDPluginProcessScaleString              "SCALE"             /* (asynFloat64, r/w) Scale value */
00024 #define NDPluginProcessOffsetString             "OFFSET"            /* (asynFloat64, r/w) Offset value */
00025 
00026 /* High and low clipping */
00027 #define NDPluginProcessLowClipString            "LOW_CLIP"          /* (asynFloat64, r/w) Low clip value */
00028 #define NDPluginProcessEnableLowClipString      "ENABLE_LOW_CLIP"   /* (asynInt32,   r/w) Enable low clipping? */
00029 #define NDPluginProcessHighClipString           "HIGH_CLIP"         /* (asynFloat64, r/w) High clip value */
00030 #define NDPluginProcessEnableHighClipString     "ENABLE_HIGH_CLIP"  /* (asynInt32,   r/w) Enable high clipping? */
00031     
00032 /* Recursive filter */
00033 #define NDPluginProcessEnableFilterString       "ENABLE_FILTER"     /* (asynInt32,   r/w) Enable frame filtering? */
00034 #define NDPluginProcessResetFilterString        "RESET_FILTER"      /* (asynInt32,   r/w) Reset frame filtering when 1 */
00035 #define NDPluginProcessAutoResetFilterString    "AUTO_RESET_FILTER" /* (asynInt32,   r/w) Auto-reset filter on N */
00036 #define NDPluginProcessFilterCallbacksString    "FILTER_CALLBACKS"  /* (asynInt32,   r/w) Only do callbacks on N */
00037 #define NDPluginProcessNumFilterString          "NUM_FILTER"        /* (asynInt32,   r/w) Number of frames to filter */
00038 #define NDPluginProcessNumFilteredString        "NUM_FILTERED"      /* (asynInt32,   r/o) Number of frames filtered */
00039 #define NDPluginProcessOOffsetString            "FILTER_OOFFSET"    /* (asynFloat64, r/w) Output offset */
00040 #define NDPluginProcessOScaleString             "FILTER_OSCALE"     /* (asynFloat64, r/w) Output scale */
00041 #define NDPluginProcessOC1String                "FILTER_OC1"        /* (asynFloat64, r/w) Output coefficient 1 */
00042 #define NDPluginProcessOC2String                "FILTER_OC2"        /* (asynFloat64, r/w) Output coefficient 2 */
00043 #define NDPluginProcessOC3String                "FILTER_OC3"        /* (asynFloat64, r/w) Output coefficient 3 */
00044 #define NDPluginProcessOC4String                "FILTER_OC4"        /* (asynFloat64, r/w) Output coefficient 4 */
00045 #define NDPluginProcessFOffsetString            "FILTER_FOFFSET"    /* (asynFloat64, r/w) Filter offset */
00046 #define NDPluginProcessFScaleString             "FILTER_FSCALE"     /* (asynFloat64, r/w) Filter scale */
00047 #define NDPluginProcessFC1String                "FILTER_FC1"        /* (asynFloat64, r/w) Filter coefficient 1 */
00048 #define NDPluginProcessFC2String                "FILTER_FC2"        /* (asynFloat64, r/w) Filter coefficient 2 */
00049 #define NDPluginProcessFC3String                "FILTER_FC3"        /* (asynFloat64, r/w) Filter coefficient 3 */
00050 #define NDPluginProcessFC4String                "FILTER_FC4"        /* (asynFloat64, r/w) Filter coefficient 4 */
00051 #define NDPluginProcessROffsetString            "FILTER_ROFFSET"    /* (asynFloat64, r/w) Reset offset */
00052 #define NDPluginProcessRC1String                "FILTER_RC1"        /* (asynFloat64, r/w) Reset coefficient 1 */
00053 #define NDPluginProcessRC2String                "FILTER_RC2"        /* (asynFloat64, r/w) Reset coefficient 2 */
00054 
00055 /* Output data type */
00056 #define NDPluginProcessDataTypeString           "PROCESS_DATA_TYPE" /* (asynInt32,   r/w) Output type.  -1 means automatic. */
00057    
00058 
00065 class NDPluginProcess : public NDPluginDriver {
00066 public:
00067     NDPluginProcess(const char *portName, int queueSize, int blockingCallbacks, 
00068                  const char *NDArrayPort, int NDArrayAddr,
00069                  int maxBuffers, size_t maxMemory,
00070                  int priority, int stackSize);
00071     /* These methods override the virtual methods in the base class */
00072     void processCallbacks(NDArray *pArray);
00073     asynStatus writeInt32(asynUser *pasynUser, epicsInt32 value);
00074     
00075 protected:
00076     /* Background array subtraction */
00077     int NDPluginProcessSaveBackground;
00078     #define FIRST_NDPLUGIN_PROCESS_PARAM NDPluginProcessSaveBackground
00079     int NDPluginProcessEnableBackground;
00080     int NDPluginProcessValidBackground;
00081 
00082     /* Flat field normalization */
00083     int NDPluginProcessSaveFlatField;
00084     int NDPluginProcessEnableFlatField;
00085     int NDPluginProcessValidFlatField;
00086     int NDPluginProcessScaleFlatField;
00087 
00088     /* Scale and offset */
00089     int NDPluginProcessEnableOffsetScale;
00090     int NDPluginProcessAutoOffsetScale;
00091     int NDPluginProcessScale;
00092     int NDPluginProcessOffset;
00093 
00094     /* High and low clipping */
00095     int NDPluginProcessLowClip;
00096     int NDPluginProcessEnableLowClip;
00097     int NDPluginProcessHighClip;
00098     int NDPluginProcessEnableHighClip;
00099 
00100     /* Frame filtering */
00101     int NDPluginProcessEnableFilter;
00102     int NDPluginProcessResetFilter;
00103     int NDPluginProcessAutoResetFilter;
00104     int NDPluginProcessFilterCallbacks;
00105     int NDPluginProcessNumFilter;
00106     int NDPluginProcessNumFiltered;
00107     int NDPluginProcessOOffset;
00108     int NDPluginProcessOScale;
00109     int NDPluginProcessOC1;
00110     int NDPluginProcessOC2;
00111     int NDPluginProcessOC3;
00112     int NDPluginProcessOC4;
00113     int NDPluginProcessFOffset;
00114     int NDPluginProcessFScale;
00115     int NDPluginProcessFC1;
00116     int NDPluginProcessFC2;
00117     int NDPluginProcessFC3;
00118     int NDPluginProcessFC4;
00119     int NDPluginProcessROffset;
00120     int NDPluginProcessRC1;
00121     int NDPluginProcessRC2;
00122     
00123     /* Output data type */
00124     int NDPluginProcessDataType;
00125 
00126     #define LAST_NDPLUGIN_PROCESS_PARAM NDPluginProcessDataType
00127                                 
00128 private:
00129     NDArray *pBackground;
00130     size_t  nBackgroundElements;
00131     NDArray *pFlatField;
00132     size_t  nFlatFieldElements;
00133     NDArray *pFilter;
00134     int  numFiltered;
00135 };
00136 #define NUM_NDPLUGIN_PROCESS_PARAMS ((int)(&LAST_NDPLUGIN_PROCESS_PARAM - &FIRST_NDPLUGIN_PROCESS_PARAM + 1))
00137     
00138 #endif