areaDetector 3-14
EPICS areaDetector framework
eigerDetector.h
Go to the documentation of this file.
1#ifndef EIGER_DETECTOR_H
2#define EIGER_DETECTOR_H
3
4#include <map>
5#include <vector>
6
7#include "restApi.h"
8#include "streamApi.h"
9#include "eigerParam.h"
10
16
17// areaDetector NDArray data source
18#define EigDataSourceStr "DATA_SOURCE"
19
20// FileWriter Parameters
21#define EigFWEnableStr "FW_ENABLE"
22#define EigFWClearStr "CLEAR"
23#define EigFWCompressionStr "COMPRESSION"
24#define EigFWNamePatternStr "NAME_PATTERN"
25#define EigFWNImgsPerFileStr "NIMAGES_PER_FILE"
26#define EigFWAutoRemoveStr "AUTO_REMOVE"
27#define EigFWFreeStr "FW_FREE"
28#define EigFWStateStr "FW_STATE"
29#define EigFWImgNumStartStr "FW_IMG_NUM_START"
30#define EigFWHD5FormatStr "FWHDF5_FORMAT"
31
32// Acquisition Metadata Parameters
33#define EigWavelengthStr "WAVELENGTH"
34#define EigAutoSummationStr "AUTO_SUMMATION"
35
36// Detector Metadata Parameters
37#define EigDescriptionStr "DESCRIPTION"
38
39// MX Parameters (firmware 1.6.2 onwards)
40#define EigOmegaStr "OMEGA"
41
42// Acquisition Parameters
43#define EigPhotonEnergyStr "PHOTON_ENERGY"
44#define EigThresholdStr "THRESHOLD"
45#define EigThreshold1EnableStr "THRESHOLD1_ENABLE"
46#define EigThreshold2Str "THRESHOLD2"
47#define EigThreshold2EnableStr "THRESHOLD2_ENABLE"
48#define EigThresholdDiffEnableStr "THRESHOLD_DIFF_ENABLE"
49#define EigTriggerStr "TRIGGER"
50#define EigTriggerExpStr "TRIGGER_EXPOSURE"
51#define EigNTriggersStr "NUM_TRIGGERS"
52#define EigManualTriggerStr "MANUAL_TRIGGER"
53#define EigTriggerStartDelayStr "TRIGGER_START_DELAY"
54#define EigExtGateModeStr "EXT_GATE_MODE"
55#define EigCompressionAlgoStr "COMPRESSION_ALGO"
56// ROI Mode is only available on Eiger 9M and 16M
57#define EigROIModeStr "ROI_MODE"
58
59// Pilatus4 Parameters
60#define EigThreshold3Str "THRESHOLD3"
61#define EigThreshold3EnableStr "THRESHOLD3_ENABLE"
62#define EigThreshold4Str "THRESHOLD4"
63#define EigThreshold4EnableStr "THRESHOLD4_ENABLE"
64
65// Detector Status Parameters
66#define EigStateStr "STATE"
67#define EigErrorStr "ERROR"
68#define EigInitializeStr "INITIALIZE"
69#define EigThTemp0Str "TH_TEMP_0"
70#define EigThHumid0Str "TH_HUMID_0"
71#define EigLink0Str "LINK_0"
72#define EigLink1Str "LINK_1"
73#define EigLink2Str "LINK_2"
74#define EigLink3Str "LINK_3"
75#define EigDCUBufFreeStr "DCU_BUF_FREE"
76
77// Other Parameters
78#define EigArmedStr "ARMED"
79#define EigSequenceIdStr "SEQ_ID"
80#define EigPendingFilesStr "PENDING_FILES"
81#define EigHVResetTimeStr "HV_RESET_TIME"
82#define EigHVResetStr "HV_RESET"
83#define EigHVStateStr "HV_STATE"
84#define EigSignedDataStr "SIGNED_DATA"
85
86// File Saving Parameters
87#define EigSaveFilesStr "SAVE_FILES"
88#define EigFileOwnerStr "FILE_OWNER"
89#define EigFileOwnerGroupStr "FILE_OWNER_GROUP"
90#define EigFilePermsStr "FILE_PERMISSIONS"
91
92// Monitor API Parameters
93#define EigMonitorEnableStr "MONITOR_ENABLE"
94#define EigMonitorTimeoutStr "MONITOR_TIMEOUT"
95#define EigMonitorStateStr "MONITOR_STATE"
96#define EigMonitorBufSizeStr "MONITOR_BUF_SIZE"
97
98// Stream API Parameters
99#define EigStreamEnableStr "STREAM_ENABLE"
100#define EigStreamDroppedStr "STREAM_DROPPED"
101#define EigStreamStateStr "STREAM_STATE"
102#define EigStreamDecompressStr "STREAM_DECOMPRESS"
103#define EigStreamVersionStr "STREAM_VERSION"
104#define EigStreamAsTsSourceStr "STREAM_AS_TIMESTAMP_SOURCE"
105
106// Epsilon Parameters (minimum amount of change allowed)
107#define EigWavelengthEpsilonStr "WAVELENGTH_EPSILON"
108#define EigEnergyEpsilonStr "ENERGY_EPSILON"
109
110// Driver for the Dectris' Eiger pixel array detector using their REST server
112{
113public:
114 eigerDetector(const char *portName, const char *serverHostname,
115 int maxBuffers, size_t maxMemory, int priority, int stackSize);
116
117 // These are the methods that we override from ADDriver
118 virtual asynStatus writeInt32 (asynUser *pasynUser, epicsInt32 value);
119 virtual asynStatus writeFloat64(asynUser *pasynUser, epicsFloat64 value);
120 virtual asynStatus writeOctet (asynUser *pasynUser, const char *value,
121 size_t nChars, size_t *nActual);
122 void report(FILE *fp, int details);
123 virtual asynStatus drvUserCreate(asynUser *pasynUser, const char *drvInfo,
124 const char **pptypeName, size_t *psize);
125
126 // These should be private but are called from C so must be public
127 void controlTask (void);
128 void pollTask (void);
129 void downloadTask (void);
130 void parseTask (void);
131 void saveTask (void);
132 void reapTask (void);
133 void monitorTask (void);
134 void streamTask (void);
135 void initializeTask();
136
142
148
158
164
165protected:
166 // Driver-only parameters
188
189 // Eiger parameters: metadata
191
192 // Eiger parameters: acquisition
205
206 //Pilatus4 parameters
211
212 // Eiger parameters: status
223
224 // Eiger parameters: filewriter interface
234
235 // Eiger parameters: monitor interface
239
240 // Eiger parameters: streaming interface
246
247 // Base class parameters
259
260private:
261 char mHostname[512];
262 RestAPI mApi;
263 StreamAPI *mStreamAPI;
264 Stream2API *mStream2API;
265 eigerModel_t mEigerModel;
266 eigerAPIVersion_t mAPIVersion;
267 epicsEvent mStartEvent, mStopEvent, mTriggerEvent, mStreamEvent, mStreamDoneEvent,
268 mPollDoneEvent, mInitializeEvent;
269 epicsMessageQueue mPollQueue, mDownloadQueue, mParseQueue, mSaveQueue,
270 mReapQueue;
271 bool mPollStop, mPollComplete, mStreamComplete;
272 unsigned int mFrameNumber;
273 uid_t mFsUid, mFsGid;
274 EigerParamSet mParams;
275 int mFirstParam;
276 std::map<std::string, sys_t> mSubSystemMap;
277
278 // Read all parameters from detector and set some default values
279 asynStatus initParams (void);
280
281 // File parsers
282 asynStatus parseH5File (char *buf, size_t len);
283 asynStatus parseTiffFile (char *buf, size_t len);
284
285 // Read some detector status parameters
286 asynStatus eigerStatus (void);
287
288 // Helper that returns ADStatus == ADStatusAcquire
289 bool acquiring (void);
290};
291
292#endif
Class from which areaDetector drivers are directly derived.
Definition ADDriver.h:132
Definition eigerParam.h:44
Definition eigerParam.h:131
Definition restApi.h:45
Definition streamApi.h:42
Definition streamApi.h:24
Definition eigerDetector.h:112
void monitorTask(void)
Definition eigerDetector.cpp:1320
EigerParam * mFileOwner
Definition eigerDetector.h:177
stream_version
Definition eigerDetector.h:160
@ STREAM_VERSION_STREAM2
Definition eigerDetector.h:162
@ STREAM_VERSION_STREAM
Definition eigerDetector.h:161
EigerParam * mArmed
Definition eigerDetector.h:173
roi_mode
Definition eigerDetector.h:138
@ ROI_MODE_DISABLED
Definition eigerDetector.h:139
@ ROI_MODE_4M
Definition eigerDetector.h:140
EigerParam * mTemperatureActual
Definition eigerDetector.h:256
EigerParam * mLink3
Definition eigerDetector.h:221
EigerParam * mMonitorBufSize
Definition eigerDetector.h:237
EigerParam * mSDKVersion
Definition eigerDetector.h:253
EigerParam * mState
Definition eigerDetector.h:213
void reapTask(void)
Definition eigerDetector.cpp:1286
EigerParam * mSerialNumber
Definition eigerDetector.h:255
EigerParam * mInitialize
Definition eigerDetector.h:182
EigerParam * mHVState
Definition eigerDetector.h:214
EigerParam * mFWState
Definition eigerDetector.h:230
EigerParam * mStreamDecompress
Definition eigerDetector.h:181
EigerParam * mDataSource
Definition eigerDetector.h:167
EigerParam * mThreshold4
Definition eigerDetector.h:209
EigerParam * mMonitorState
Definition eigerDetector.h:238
EigerParam * mFirmwareVersion
Definition eigerDetector.h:254
EigerParam * mDCUBufFree
Definition eigerDetector.h:222
EigerParam * mManualTrigger
Definition eigerDetector.h:171
void controlTask(void)
Definition eigerDetector.cpp:767
EigerParam * mSequenceId
Definition eigerDetector.h:174
EigerParam * mHVResetTime
Definition eigerDetector.h:183
EigerParam * mAutoSummation
Definition eigerDetector.h:204
void initializeTask()
Definition eigerDetector.cpp:1520
EigerParam * mFilePerms
Definition eigerDetector.h:179
EigerParam * mNDArraySizeY
Definition eigerDetector.h:258
EigerParam * mStreamVersion
Definition eigerDetector.h:244
EigerParam * mHVReset
Definition eigerDetector.h:184
EigerParam * mNumExposures
Definition eigerDetector.h:251
EigerParam * mTrigger
Definition eigerDetector.h:169
EigerParam * mSaveFiles
Definition eigerDetector.h:176
EigerParam * mFWClear
Definition eigerDetector.h:232
EigerParam * mFWEnable
Definition eigerDetector.h:225
void report(FILE *fp, int details)
Report status of the driver.
Definition eigerDetector.cpp:748
EigerParam * mMonitorTimeout
Definition eigerDetector.h:180
virtual asynStatus drvUserCreate(asynUser *pasynUser, const char *drvInfo, const char **pptypeName, size_t *psize)
Definition eigerDetector.cpp:1919
void saveTask(void)
Definition eigerDetector.cpp:1200
EigerParam * mWavelength
Definition eigerDetector.h:193
EigerParam * mFWAutoRemove
Definition eigerDetector.h:168
EigerParam * mThreshold2
Definition eigerDetector.h:197
EigerParam * mMonitorEnable
Definition eigerDetector.h:236
EigerParam * mTriggerExp
Definition eigerDetector.h:170
EigerParam * mDescription
Definition eigerDetector.h:190
void pollTask(void)
Definition eigerDetector.cpp:1055
EigerParam * mEnergyEpsilon
Definition eigerDetector.h:186
void parseTask(void)
Definition eigerDetector.cpp:1180
EigerParam * mFWNImgsPerFile
Definition eigerDetector.h:228
EigerParam * mAcquireTime
Definition eigerDetector.h:248
EigerParam * mLink0
Definition eigerDetector.h:218
virtual asynStatus writeInt32(asynUser *pasynUser, epicsInt32 value)
Sets an int32 parameter.
Definition eigerDetector.cpp:470
trigger_mode
Definition eigerDetector.h:150
@ TRIGGER_MODE_EXTG
Definition eigerDetector.h:156
@ TRIGGER_MODE_EXTS
Definition eigerDetector.h:153
@ TRIGGER_MODE_INTS
Definition eigerDetector.h:151
@ TRIGGER_MODE_EXTE
Definition eigerDetector.h:154
@ TRIGGER_MODE_INTE
Definition eigerDetector.h:152
@ TRIGGER_MODE_CONTINUOUS
Definition eigerDetector.h:155
EigerParam * mAcquirePeriod
Definition eigerDetector.h:249
EigerParam * mROIMode
Definition eigerDetector.h:203
EigerParam * mThHumid0
Definition eigerDetector.h:217
EigerParam * mCompressionAlgo
Definition eigerDetector.h:202
EigerParam * mStreamEnable
Definition eigerDetector.h:241
compression_algo
Definition eigerDetector.h:144
@ COMP_ALGO_BSLZ4
Definition eigerDetector.h:146
@ COMP_ALGO_LZ4
Definition eigerDetector.h:145
EigerParam * mTriggerMode
Definition eigerDetector.h:252
EigerParam * mError
Definition eigerDetector.h:215
EigerParam * mSignedData
Definition eigerDetector.h:187
EigerParam * mNTriggers
Definition eigerDetector.h:200
EigerParam * mThresholdDiffEnable
Definition eigerDetector.h:199
EigerParam * mFWCompression
Definition eigerDetector.h:226
EigerParam * mThreshold3Enable
Definition eigerDetector.h:208
EigerParam * mExtGateMode
Definition eigerDetector.h:201
EigerParam * mTriggerStartDelay
Definition eigerDetector.h:172
EigerParam * mFWFree
Definition eigerDetector.h:231
EigerParam * mThreshold3
Definition eigerDetector.h:207
EigerParam * mStreamAsTsSource
Definition eigerDetector.h:245
EigerParam * mThreshold4Enable
Definition eigerDetector.h:210
EigerParam * mFileOwnerGroup
Definition eigerDetector.h:178
virtual asynStatus writeOctet(asynUser *pasynUser, const char *value, size_t nChars, size_t *nActual)
Called when asyn clients call pasynOctet->write().
Definition eigerDetector.cpp:672
void downloadTask(void)
Definition eigerDetector.cpp:1150
EigerParam * mLink2
Definition eigerDetector.h:220
EigerParam * mThreshold
Definition eigerDetector.h:195
EigerParam * mThreshold2Enable
Definition eigerDetector.h:198
EigerParam * mNumImages
Definition eigerDetector.h:250
EigerParam * mLink1
Definition eigerDetector.h:219
EigerParam * mFWImgNumStart
Definition eigerDetector.h:229
EigerParam * mPendingFiles
Definition eigerDetector.h:175
EigerParam * mThTemp0
Definition eigerDetector.h:216
EigerParam * mFWHDF5Format
Definition eigerDetector.h:233
EigerParam * mWavelengthEpsilon
Definition eigerDetector.h:185
EigerParam * mStreamDropped
Definition eigerDetector.h:242
EigerParam * mFWNamePattern
Definition eigerDetector.h:227
void streamTask(void)
Definition eigerDetector.cpp:1352
EigerParam * mThreshold1Enable
Definition eigerDetector.h:196
EigerParam * mStreamState
Definition eigerDetector.h:243
EigerParam * mPhotonEnergy
Definition eigerDetector.h:194
virtual asynStatus writeFloat64(asynUser *pasynUser, epicsFloat64 value)
Definition eigerDetector.cpp:596
EigerParam * mNDArraySizeX
Definition eigerDetector.h:257
eigerModel_t
Definition eigerDetector.h:11
@ Pilatus4
Definition eigerDetector.h:14
@ Eiger1
Definition eigerDetector.h:12
@ Eiger2
Definition eigerDetector.h:13
eigerAPIVersion_t
Definition restApi.h:13