Merge branch 'master' into epics_shutter
This commit is contained in:
@@ -33,6 +33,8 @@ R2-5 (January XXX, 2017)
|
||||
* Fixed bug with AndorPreAmpGain; previously it was not actually calling SetPreAmpGain().
|
||||
* Added support for SerialNumber, FirmwareVersion, SDKVersion, DriverVersion, and ADCoreVersion which
|
||||
were added in ADCore R2-6.
|
||||
* Add support for Full Vertical Binning (FVB) readout mode.
|
||||
Thanks to Hinko Kocevar for this.
|
||||
|
||||
R2-4 (September 15, 2015)
|
||||
----
|
||||
|
||||
@@ -358,6 +358,29 @@ record(bi, "$(P)$(R)AndorEMGainAdvanced_RBV")
|
||||
field(SCAN, "I/O Intr")
|
||||
}
|
||||
|
||||
record(mbbo, "$(P)$(R)AndorReadOutMode")
|
||||
{
|
||||
field(PINI, "YES")
|
||||
field(DTYP, "asynInt32")
|
||||
field(OUT, "@asyn($(PORT),$(ADDR),$(TIMEOUT))ANDOR_READOUT_MODE")
|
||||
field(ZRST, "FVB")
|
||||
field(ZRVL, "0")
|
||||
field(ONST, "Image")
|
||||
field(ONVL, "4")
|
||||
field(VAL, "4")
|
||||
}
|
||||
|
||||
record(mbbi, "$(P)$(R)AndorReadOutMode_RBV")
|
||||
{
|
||||
field(DTYP, "asynInt32")
|
||||
field(INP, "@asyn($(PORT),$(ADDR),$(TIMEOUT))ANDOR_READOUT_MODE")
|
||||
field(ZRST, "FVB")
|
||||
field(ZRVL, "0")
|
||||
field(ONST, "Image")
|
||||
field(ONVL, "4")
|
||||
field(SCAN, "I/O Intr")
|
||||
}
|
||||
|
||||
#Records in ADBase that do not apply to Andor
|
||||
|
||||
record(mbbo, "$(P)$(R)ColorMode")
|
||||
|
||||
@@ -5,6 +5,7 @@ $(P)$(R)AndorShutterExTTL
|
||||
$(P)$(R)PALFilePath
|
||||
$(P)$(R)AndorPreAmpGain
|
||||
$(P)$(R)AndorADCSpeed
|
||||
$(P)$(R)AndorReadOutMode
|
||||
file "ADBase_settings.req", P=$(P), R=$(R)
|
||||
file "NDFile_settings.req", P=$(P), R=$(R)
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -152,6 +152,7 @@ AndorCCD::AndorCCD(const char *portName, const char *installPath, int shamrockID
|
||||
createParam(AndorEmGainAdvancedString, asynParamInt32, &AndorEmGainAdvanced);
|
||||
createParam(AndorAdcSpeedString, asynParamInt32, &AndorAdcSpeed);
|
||||
createParam(AndorBaselineClampString, asynParamInt32, &AndorBaselineClamp);
|
||||
createParam(AndorReadOutModeString, asynParamInt32, &AndorReadOutMode);
|
||||
|
||||
// Create the epicsEvent for signaling to the status task when parameters should have changed.
|
||||
// This will cause it to do a poll immediately, rather than wait for the poll time period.
|
||||
@@ -247,6 +248,7 @@ AndorCCD::AndorCCD(const char *portName, const char *installPath, int shamrockID
|
||||
status |= setIntegerParam(AndorShutterMode, AShutterAuto);
|
||||
status |= setDoubleParam(ADShutterOpenDelay, 0.);
|
||||
status |= setDoubleParam(ADShutterCloseDelay, 0.);
|
||||
status |= setIntegerParam(AndorReadOutMode, ARImage);
|
||||
|
||||
setupADCSpeeds();
|
||||
setupPreAmpGains();
|
||||
@@ -580,7 +582,8 @@ asynStatus AndorCCD::writeInt32(asynUser *pasynUser, epicsInt32 value)
|
||||
(function == ADReverseX) || (function == ADReverseY) ||
|
||||
(function == ADTriggerMode) || (function == AndorEmGain) ||
|
||||
(function == AndorEmGainMode)|| (function == AndorEmGainAdvanced) ||
|
||||
(function == AndorAdcSpeed) || (function == AndorPreAmpGain)) {
|
||||
(function == AndorAdcSpeed) || (function == AndorPreAmpGain) ||
|
||||
(function == AndorReadOutMode)) {
|
||||
status = setupAcquisition();
|
||||
if (function == AndorAdcSpeed) setupPreAmpGains();
|
||||
if (status != asynSuccess) setIntegerParam(function, oldValue);
|
||||
@@ -737,7 +740,6 @@ asynStatus AndorCCD::setupShutter(int command)
|
||||
int shutterExTTL;
|
||||
int adShutterMode;
|
||||
int shutterMode;
|
||||
AndorCapabilities capabilities;
|
||||
asynStatus status=asynSuccess;
|
||||
static const char *functionName = "setupShutter";
|
||||
|
||||
@@ -778,9 +780,7 @@ asynStatus AndorCCD::setupShutter(int command)
|
||||
}
|
||||
|
||||
try {
|
||||
capabilities.ulSize = sizeof(capabilities);
|
||||
checkStatus(GetCapabilities(&capabilities));
|
||||
if (capabilities.ulFeatures & AC_FEATURES_SHUTTER) {
|
||||
if (mCapabilities.ulFeatures & AC_FEATURES_SHUTTER) {
|
||||
asynPrint(this->pasynUserSelf, ASYN_TRACE_FLOW,
|
||||
"%s:%s:, SetShutter(%d,%d,%d,%d)\n",
|
||||
driverName, functionName, shutterExTTL, shutterMode, closeTime, openTime);
|
||||
@@ -1005,12 +1005,15 @@ asynStatus AndorCCD::setupAcquisition()
|
||||
int emGainAdvanced;
|
||||
int FKOffset;
|
||||
AndorADCSpeed_t *pSpeed;
|
||||
int readOutMode;
|
||||
static const char *functionName = "setupAcquisition";
|
||||
|
||||
if (!mInitOK) {
|
||||
return asynDisabled;
|
||||
}
|
||||
|
||||
// Get current readout mode
|
||||
getIntegerParam(AndorReadOutMode, &readOutMode);
|
||||
getIntegerParam(ADImageMode, &imageMode);
|
||||
getIntegerParam(ADNumExposures, &numExposures);
|
||||
if (numExposures <= 0) {
|
||||
@@ -1057,6 +1060,11 @@ asynStatus AndorCCD::setupAcquisition()
|
||||
getIntegerParam(ADReverseY, &reverseY);
|
||||
getIntegerParam(ADMaxSizeX, &maxSizeX);
|
||||
getIntegerParam(ADMaxSizeY, &maxSizeY);
|
||||
if (readOutMode == ARFullVerticalBinning) {
|
||||
// Set maximum binning but do not update parameter, this preserves ADBinY
|
||||
// when going back to Image readout mode.
|
||||
binY = maxSizeY;
|
||||
}
|
||||
if (minX > (maxSizeX - binX)) {
|
||||
minX = maxSizeX - binX;
|
||||
setIntegerParam(ADMinX, minX);
|
||||
@@ -1088,6 +1096,11 @@ asynStatus AndorCCD::setupAcquisition()
|
||||
setIntegerParam(NDArraySizeY, sizeY/binY);
|
||||
|
||||
try {
|
||||
asynPrint(this->pasynUserSelf, ASYN_TRACE_FLOW,
|
||||
"%s:%s:, SetReadMode(%d)\n",
|
||||
driverName, functionName, readOutMode);
|
||||
checkStatus(SetReadMode(readOutMode));
|
||||
|
||||
asynPrint(this->pasynUserSelf, ASYN_TRACE_FLOW,
|
||||
"%s:%s:, SetTriggerMode(%d)\n",
|
||||
driverName, functionName, triggerMode);
|
||||
@@ -1118,16 +1131,18 @@ asynStatus AndorCCD::setupAcquisition()
|
||||
driverName, functionName, reverseX, reverseY);
|
||||
checkStatus(SetImageFlip(reverseX, reverseY));
|
||||
|
||||
asynPrint(this->pasynUserSelf, ASYN_TRACE_FLOW,
|
||||
"%s:%s:, SetImage(%d,%d,%d,%d,%d,%d)\n",
|
||||
driverName, functionName, binX, binY, minX+1, minX+sizeX, minY+1, minY+sizeY);
|
||||
checkStatus(SetImage(binX, binY, minX+1, minX+sizeX, minY+1, minY+sizeY));
|
||||
if (readOutMode == ARImage) {
|
||||
asynPrint(this->pasynUserSelf, ASYN_TRACE_FLOW,
|
||||
"%s:%s:, SetImage(%d,%d,%d,%d,%d,%d)\n",
|
||||
driverName, functionName, binX, binY, minX+1, minX+sizeX, minY+1, minY+sizeY);
|
||||
checkStatus(SetImage(binX, binY, minX+1, minX+sizeX, minY+1, minY+sizeY));
|
||||
}
|
||||
|
||||
asynPrint(this->pasynUserSelf, ASYN_TRACE_FLOW,
|
||||
"%s:%s:, SetExposureTime(%f)\n",
|
||||
driverName, functionName, mAcquireTime);
|
||||
checkStatus(SetExposureTime(mAcquireTime));
|
||||
|
||||
|
||||
// Check if camera has EM gain capability before setting modes or EM gain
|
||||
if ((int)mCapabilities.ulEMGainCapability > 0) {
|
||||
asynPrint(this->pasynUserSelf, ASYN_TRACE_FLOW,
|
||||
@@ -1135,21 +1150,21 @@ asynStatus AndorCCD::setupAcquisition()
|
||||
driverName, functionName, emGainMode);
|
||||
checkStatus(SetEMGainMode(emGainMode));
|
||||
}
|
||||
|
||||
|
||||
if ((int)mCapabilities.ulEMGainCapability > 0) {
|
||||
asynPrint(this->pasynUserSelf, ASYN_TRACE_FLOW,
|
||||
"%s:%s:, SetEMGainAdvanced(%d)\n",
|
||||
driverName, functionName, emGainAdvanced);
|
||||
checkStatus(SetEMAdvanced(emGainAdvanced));
|
||||
}
|
||||
|
||||
|
||||
if ((int)mCapabilities.ulEMGainCapability > 0) {
|
||||
asynPrint(this->pasynUserSelf, ASYN_TRACE_FLOW,
|
||||
"%s:%s:, SetEMCCDGain(%d)\n",
|
||||
driverName, functionName, emGain);
|
||||
checkStatus(SetEMCCDGain(emGain));
|
||||
}
|
||||
|
||||
|
||||
switch (imageMode) {
|
||||
case ADImageSingle:
|
||||
if (numExposures == 1) {
|
||||
|
||||
@@ -33,6 +33,7 @@
|
||||
#define AndorEmGainAdvancedString "ANDOR_EM_GAIN_ADVANCED"
|
||||
#define AndorAdcSpeedString "ANDOR_ADC_SPEED"
|
||||
#define AndorBaselineClampString "ANDOR_BASELINE_CLAMP"
|
||||
#define AndorReadOutModeString "ANDOR_READOUT_MODE"
|
||||
|
||||
/**
|
||||
* Structure defining an ADC speed for the ADAndor driver.
|
||||
@@ -94,7 +95,8 @@ class AndorCCD : public ADDriver {
|
||||
int AndorEmGainAdvanced;
|
||||
int AndorAdcSpeed;
|
||||
int AndorBaselineClamp;
|
||||
#define LAST_ANDOR_PARAM AndorBaselineClamp
|
||||
int AndorReadOutMode;
|
||||
#define LAST_ANDOR_PARAM AndorReadOutMode
|
||||
|
||||
private:
|
||||
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
<h1>
|
||||
areaDetector Andor driver</h1>
|
||||
<h2>
|
||||
April 16, 2014</h2>
|
||||
July 13, 2016</h2>
|
||||
<h2>
|
||||
Matthew Pearson, Oak Ridge National Laboratory</h2>
|
||||
<h2>
|
||||
@@ -52,6 +52,7 @@
|
||||
<li>Set a region of interest (a smaller region can be read out faster)</li>
|
||||
<li>Set and monitor the CCD temperature</li>
|
||||
<li>Electron Multiplying (EM) Gain on supported detectors</li>
|
||||
<li>Support for selecting between Full Vertical Binning (FVB) and Image readout modes</li>
|
||||
</ul>
|
||||
<p>
|
||||
The Andor module includes a separate driver to control the Andor Shamrock spectrographs.
|
||||
@@ -613,7 +614,7 @@
|
||||
ANDOR_BASELINE_CLAMP</td>
|
||||
<td>
|
||||
AndorBaselineClamp<br />
|
||||
AndorBaselineClamp_RBV</td>
|
||||
AndorBaselineClamp_RBV</td>
|
||||
<td>
|
||||
bo<br />
|
||||
bi</td>
|
||||
@@ -690,6 +691,29 @@
|
||||
bo<br />
|
||||
bi</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>
|
||||
AndorReadOutMode</td>
|
||||
<td>
|
||||
asynInt32</td>
|
||||
<td>
|
||||
R/W</td>
|
||||
<td>
|
||||
Switch between the readout modes. Choices are:
|
||||
<ul>
|
||||
<li>Full Vertical Binning (FVB)</li>
|
||||
<li>Image</li>
|
||||
</ul>
|
||||
</td>
|
||||
<td>
|
||||
ANDOR_READOUT_MODE</td>
|
||||
<td>
|
||||
AndorReadOutMode<br />
|
||||
AndorReadOutMode_RBV</td>
|
||||
<td>
|
||||
mbbo<br />
|
||||
mbbi</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<h2 id="Unsupported" style="text-align: left">
|
||||
@@ -955,6 +979,7 @@
|
||||
file writers do not save the calibration, and it is not possible to pass the calibration
|
||||
to other file plugins as an attribute because array attributes are not currently
|
||||
supported in areaDetector.</li>
|
||||
<li>Single-Track, Multi-Track and Random-Track readout modes are not yet supported.</li>
|
||||
</ul>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
Reference in New Issue
Block a user