areaDetector 1-8
|
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 int nBackgroundElements; 00131 NDArray *pFlatField; 00132 int nFlatFieldElements; 00133 NDArray *pFilter; 00134 int numFiltered; 00135 }; 00136 #define NUM_NDPLUGIN_PROCESS_PARAMS (&LAST_NDPLUGIN_PROCESS_PARAM - &FIRST_NDPLUGIN_PROCESS_PARAM + 1) 00137 00138 #endif