forked from JPHammonds/ADLambda
-
Notifications
You must be signed in to change notification settings - Fork 2
/
ADLambda.html
257 lines (240 loc) · 9.78 KB
/
ADLambda.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xml:lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>areaDetector Lambda driver</title>
<meta content="text/html; charset=ISO-8859-1" http-equiv="Content-Type" />
</head>
<body>
<div style="text-align: center">
<h1>areaDetector Lambda driver</h1>
<h2>May 3, 2021</h2>
<h2>Keenan Lang</h2>
<h2>Beamline Controls Group</h2>
<h2>
Advanced Photon Source</h2>
<h2>Argonne National Laboratory</h2>
</div>
<h2>Table Of Contents</h2>
<ul>
<li><a href="#Introduction">Introduction</a></li>
<li><a href="#StandardNotes">Implementation of standard
driver parameters</a></li>
<li><a href="#Driver_parameters">Lambda Driver Parameters</a></li>
<li><a href="#Configuration">Configuration</a></li>
<li><a href="#MEDM_screens">MEDM screens</a></li>
<li><a href="#Performance_Measurements">Performance
Measurements</a></li>
<li><a href="#Hardware_Notes">Hardware Notes</a></li>
<li><a href="#Restrictions">Restrictions</a></li>
</ul>
<h2 id="Introduction" style="text-align: left">Introduction</h2>
<p>
This is an <a href="https://www.aps.anl.gov/epics">EPICS</a> <a
href="https://cars.uchicago.edu/software/epics/areaDetector.html">
areaDetector</a> driver for the Lambda detector from <a
href="http://www.x-spectrum.de">X-spectrum</a>
</p>
<p>The interface to the detector is provided by a TCP/UDP/IP
socket interface to the detector. X-Spectrum provides a library to handle
communications and acquisition in the camera. This driver provides an
interface layer between the vendor library and EPICS areaDetector.</p>
<p>The hardware interface between the camera and the controlling computer
consists of </p>
<ul>
<li>A single 1GB copper network link used for command/control</li>
<li>A pair of 10GB Fiber network links for sending image data</li>
</ul>
<p>Some models of this detector are capable of acquiring up to 2000 images/sec. It
may be necessary, therefore, to adapt standard areaDetector plugins for
faster collection to ensure processing of all images.
</p>
<h2 id="StandardNotes" style="text-align: left">Implementation
of standard driver parameters</h2>
<p>The following table describes how the Lambda driver implements some of the
standard driver parameters.</p>
<table border="1" cellpadding="2" cellspacing="2"
style="text-align: left">
<tbody>
<tr>
<th>Parameter index variable</th>
<th>EPICS record name</th>
<th>Description</th>
</tr>
<tr>
<td>ADAcquireTime</td>
<td>$(P)$(R)AcquireTime</td>
<td>Controls the exposure time of the camera in seconds. </td>
<tr>
<td>ADAcquirePeriod</td>
<td>$(P$(R)AcquirePeriod</td>
<td>NOT YET IMPLEMENTED IN FIRMWARE. Controls the period
between exposures in internal trigger mode. Currently this
feature is not supported by the camera firmware but this
is a planned feature. Once the firmware supports this feature,
the software should support this.</td>
</tr>
<tr>
<td>ADTriggerMode</td>
<td>$(P)$(R)TriggerMode</td>
<td>Default descriptions are overloaded. Allows three modes:<p>
<ul>
<li>Internal</li>
<li>External_SequencePer - each external pulse runs an <b>image
sequence</b> per pulse</i>
<li>External_ImagePer - each external pulse runs an <b>image</b>
per pulse</i>
</ul>
</td>
</tr>
<tr>
<td>ADAcquire</td>
<td>$(P)$(R)Acquire</td>
<td>Controls starting and stopping camera images.</td>
</tr>
<tr>
<td>ADNumImages
<td>$(P)$(R)NumImages</td>
<td>In Multiple Image mode, this controls the number of images
to be collected.</td>
</tr>
<tr>
<td>ADImageMode</td>
<td>$(P)$(R)ImageMode</td>
<td>Sets selection of Single or multiple Images when acquire
button is pressed. Acquisition on the Lambda is controlled
by setting a defined number of images. "Continuous" has been
removed from the options.</td>
</tr>
</tbody>
</table>
<h2 id="Driver_parameters" style="text-align: left">Lambda
specific parameters</h2>
<table border="1" cellpadding="2" cellspacing="2"
style="text-align: left">
<tbody>
<tr>
<td colspan="7" align="center"><b>Parameter Definition in
ADLambda.cpp and record definitions in ADLambda.template</b>
</td>
</tr>
<tr>
<th>Parameter index variable</th>
<th>asyn interface</th>
<th>Access</th>
<th>Description</th>
<th>drvInfo string</th>
<th>EPICS record name</th>
<th>EPICS record type</th>
</tr>
<tr>
<td>DualMode</td>
<td>asynInt32</td>
<td>r/w</td>
<td>Switches between single and dual threshold modes.</td>
<td>LAMBDA_DUAL_MODE</td>
<td>DualMode</td>
<td>mbbo</td>
</tr>
<tr>
<td>LAMBDA_EnergyThreshold</td>
<td>asynFloat64</td>
<td>r/w</td>
<td>Sets the minimum energy that should register a valid event.</td>
<td>LAMBDA_ENERGY_THRESHOLD</td>
<td>EnergyThreshold</td>
<td>ao</td>
</tr>
<tr>
<td>LAMBDA_DualThreshold</td>
<td>asynFloat64</td>
<td>r/w</td>
<td>Sets the maximum energy that should register a valid event.</td>
<td>LAMBDA_DUAL_THRESHOLD</td>
<td>DualThreshold</td>
<td>ao</td>
</tr>
<tr>
<td>ChargeSumming</td>
<td>asynInt32</td>
<td>r/w</td>
<td>Switches on or off charge-summing mode.</td>
<td>LAMBDA_CHARGE_SUMMING</td>
<td>ChargeSumming</td>
<td>mbbo</td>
</tr>
<tr>
<td>GatingMode</td>
<td>asynInt32</td>
<td>r/w</td>
<td>Switches on or off gating mode.</td>
<td>LAMBDA_GATING_ENABLE</td>
<td>GatingMode</td>
<td>mbbo</td>
</tr>
<tr>
<td>LAMBDA_DecodedQueueDepth</td>
<td>asynInt32</td>
<td>r</td>
<td>Displays how far into the decoded queue we have reached. </td>
<td>LAMBDA_DECODED_QUEUE_DEPTH</td>
<td>DecodedQueueDepth</td>
<td>longin</td>
</tr>
<tr>
<td>LAMBDA_BadFrameCounter</td>
<td>asynInt32</td>
<td>r</td>
<td>Counts the number of bad frames detected during decoding.
images are sent as a number of packets, rotating over 4 network ports.
If the packets for the next image are received on all 4 ports, before
the finish of an image, then the frame is counted as a bad frame.
Each receiver module updates this field independently
</td>
<td>LAMBDA_BAD_FRAME_COUNTER</td>
<td>BadFrameCounter#</td>
<td>longin</td>
</tr>
<tr>
<td>LAMBDA_OperatingMode</td>
<td>asynInt32</td>
<td>r/w</td>
<td>Switches between 1, 6, 12, and 24 bit counting mode, this is referenced in pulldown as<p>
<ul>
<li> 1-Bit - Switches to 1-bit mode and sets image data type to UInt8.</li>
<li> 6-Bit - Switches to 6-bit mode and sets image data type to UInt8.</li>
<li> 12-Bit- Switches to 12-bit mode and sets image data type to UInt16.</li>
<li> 24-Bit - Switches to 24-bit mode also sets image data type to UInt32.</li>
</ul>
</td>
<td>LAMBDA_OPERATING_MODE</td>
<td>OperatingMode<p>
OperatingMode_RBV</td>
<td>mbbo<p>mbbi</td>
</tr>
</tbody>
</table>
<h2 id="Configuration">Configuration</h2>
<p>
The Lambda detector instance is created using the LambdaConfig command, either from C/C++
or from the EPICS IOC shell.
</p>
<pre> int LambdaConfig(const char *portName, const char* configPath, int numModules)</pre>
<p>
For details on the meaning of the parameters to this function refer to the documentation
on the LambdaConfig function in the <a href="areaDetectorDoxygenHTML/ADLambda_8cpp.html">Lambda.cpp documentation</a></p> and in
the documentation for the constructor in the <a href="areaDetectorDoxygenHTML/class_ADLambda.html">ADLambda class</a>)
<h2 id="MEDM_screens" style="text-align: left">MEDM screens</h2>
<h2 id="Performance_Measurements">Performance measurements</h2>
<p>The Lambda detector itself is rated at 2000 frames/sec. This rate has been achieved simply processing the
detector images into NDArrays. We have been able to save up to 2000 images/sec for a period of time using
a PipeWriterPlugin that writes to a Unix Pipe which feeds an external MPI program which compresses the
image data and writes to a binary file with occasional bad frame errors.
</p>
<h2 id="Hardware_Notes">Hardware Notes</h2>
<p>This detector is capable of supporting a number of features which are not currently available in the detector
driver & firmware. These features will be added as they are made available by the vendor.</p>
<h2 id="Restrictions">Restrictions</h2>
<p>To be added later...</p>
</body>
</html>