Commit 7c89bd33 authored by Emmanuel Papillon's avatar Emmanuel Papillon

added gate and trigger level (normal or inverted)

parent ab625de5
Pipeline #24348 failed with stages
in 1 minute and 31 seconds
......@@ -69,14 +69,16 @@ namespace lima
enum A3_ReadOutRate { MHz10 = 0, MHz100 = 1, MHz200 = 2, MHz280 = 3 };
// In the same order/index as 'BitDepth'
enum A3_BitDepth { b11 = 0, b16= 1 };
// The camera trigger mode (in the enum order) :
// enum A3_TriggerMode { Internal = 0, ExternalLevelTransition = 1, ExternalStart = 2, ExternalExposure = 3, Software = 4, Advanced = 5, External = 6 };
// Gain Mode for Marana detector
enum A3_GainMode { FastFrameRate=0, HighDynamicRange=1 };
// The binning system of andor3 :
enum A3_Binning { B1x1=0, B2x2=1, B3x3=2, B4x4=3, B8x8=4};
// The fan speed
enum A3_FanSpeed { Off=0, Low=1, On=2};
enum A3_PixelEncoding {Mono12=0, Mono12Packed = 1, Mono16=2, Mono32=3};
enum A3_SignalLevel { Normal=0, Inverted=1};
struct SdkFrameDim {
AT_64 width;
......@@ -157,6 +159,11 @@ namespace lima
void getAdcGain(A3_Gain &oGain) const;
void getAdcGainString(std::string &oGainString) const;
void setGateLevel(A3_SignalLevel iLevel);
void getGateLevel(A3_SignalLevel &iLevel);
void setTriggerLevel(A3_SignalLevel iLevel);
void getTriggerLevel(A3_SignalLevel &iLevel);
void setAdcRate(A3_ReadOutRate iRate); // à exporter (avec le get)
void getAdcRate(A3_ReadOutRate &oRate) const;
void getAdcRateString(std::string &oRateString) const;
......@@ -168,8 +175,6 @@ namespace lima
void getBitDepthString(std::string &oDepthString) const;
void getPxEncoding(A3_PixelEncoding &oPxEncoding) const;
void getPxEncodingString(std::string &oPxEncoding) const;
// void setTriggerMode(A3_TriggerMode iMode);
// void getTriggerMode(A3_TriggerMode &oMode) const;
void getTriggerModeString(std::string &oModeString) const;
void setTemperatureSP(double temp); // à exporter (avec le get)
void getTemperatureSP(double& temp) const;
......
......@@ -40,6 +40,7 @@ namespace Andor3
enum A3_Binning { B1x1=0, B2x2=1, B3x3=2, B4x4=3, B8x8=4};
enum A3_FanSpeed { Off=0, Low=1, On=2};
enum A3_PixelEncoding {Mono12=0, Mono12Packed = 1, Mono16=2, Mono32=3};
enum A3_SignalLevel {Normal=0, Inverted=1};
Camera(const std::string& bitflow_path, int camera_number=0);
~Camera();
......@@ -94,6 +95,11 @@ namespace Andor3
// -- andor3 specific, LIMA don't worry about it !
void initialiseController();
void setGateLevel(A3_SignalLevel iLevel /In/ );
void getGateLevel(A3_SignalLevel &iLevel /Out/ );
void setTriggerLevel(A3_SignalLevel iLevel /In/ );
void getTriggerLevel(A3_SignalLevel &iLevel /Out/ );
void setAdcGain(A3_Gain iGain /In/ );
void getAdcGain(A3_Gain &oGain /Out/ ) const;
void getAdcGainString(std::string &oGainString /Out/ ) const;
......
......@@ -92,6 +92,9 @@ namespace lima {
static const AT_WC* TriggerMode = L"TriggerMode";
static const AT_WC* FrameCount = L"FrameCount";
static const AT_WC* IOSelector = L"IOSelector";
static const AT_WC* IOInvert = L"IOInvert";
// For future !!
// static const AT_WC* AccumulateCount = L"AccumulateCount";
// static const AT_WC* BaselineLevel = L"BaselineLevel";
......@@ -299,9 +302,13 @@ m_maximage_size_cb_active(false)
// --- init trigger modes
initTrigMode();
// printInfoForProp(andor3::ElectronicShutteringMode, Enum);
// printInfoForProp(andor3::PixelReadoutRate, Enum);
// printInfoForProp(andor3::PixelEncoding, Enum);
// --- to investiagte cam features
// printInfoForProp(andor3::ElectronicShutteringMode, Enum);
// printInfoForProp(andor3::PixelReadoutRate, Enum);
// printInfoForProp(andor3::PixelEncoding, Enum);
// printInfoForProp(andor3::SimplePreAmpGainControl, Enum);
// printInfoForProp(andor3::FanSpeed, Enum);
// printInfoForProp(andor3::BitDepth, Enum);
// --- Initialise deeper parameters of the controller
initialiseController();
......@@ -1431,6 +1438,53 @@ lima::Andor3::Camera::getTriggerModeString(std::string &oModeString) const
}
}
void
lima::Andor3::Camera::setGateLevel(A3_SignalLevel iLevel)
{
DEB_MEMBER_FUNCT();
bool flag;
if (iLevel == Inverted) flag= true;
else flag= false;
setEnumString(andor3::IOSelector, L"External Exposure");
setBool(andor3::IOInvert, flag);
}
void
lima::Andor3::Camera::getGateLevel(A3_SignalLevel &iLevel)
{
DEB_MEMBER_FUNCT();
bool flag;
setEnumString(andor3::IOSelector, L"External Exposure");
getBool(andor3::IOInvert, &flag);
if (flag)
iLevel = Inverted;
else
iLevel = Normal;
}
void
lima::Andor3::Camera::setTriggerLevel(A3_SignalLevel iLevel)
{
DEB_MEMBER_FUNCT();
bool flag;
if (iLevel == Inverted) flag= true;
else flag= false;
setEnumString(andor3::IOSelector, L"External Trigger");
setBool(andor3::IOInvert, flag);
}
void
lima::Andor3::Camera::getTriggerLevel(A3_SignalLevel &iLevel)
{
DEB_MEMBER_FUNCT();
bool flag;
setEnumString(andor3::IOSelector, L"External Trigger");
getBool(andor3::IOInvert, &flag);
if (flag)
iLevel = Inverted;
else
iLevel = Normal;
}
//-----------------------------------------------------
// @brief set the temperature set-point // DONE
......@@ -1620,7 +1674,11 @@ lima::Andor3::Camera::setSimpleGain(A3_SimpleGain i_gain)
{
DEB_MEMBER_FUNCT();
if ( propImplemented(andor3::SimplePreAmpGainControl) ) {
setEnumIndex(andor3::SimplePreAmpGainControl, i_gain);
int the_err_code = setEnumIndex(andor3::SimplePreAmpGainControl, i_gain);
if ( AT_SUCCESS != the_err_code ) {
DEB_ERROR() << "Cannot set SimplePreAmpGainControl to " << i_gain
<< " - " << DEB_VAR1(error_code(the_err_code));
}
}
else {
DEB_TRACE() << "SimplePreAmpGainControl not implemented, emulating it in software";
......
......@@ -92,6 +92,13 @@ class Andor3(PyTango.Device_4Impl):
'OFF': False}
self.__SpuriousNoiseFilter = {'ON': True,
'OFF': False}
self.__GateLevel = { 'NORMAL': _Andor3Camera.Normal,
'INVERTED': _Andor3Camera.Inverted,
}
self.__TriggerLevel = { 'NORMAL': _Andor3Camera.Normal,
'INVERTED': _Andor3Camera.Inverted,
}
self.__Attribute2FunctionBase = {'adc_gain': 'SimpleGain',
'adc_rate': 'AdcRate',
'temperature': 'Temperature',
......@@ -106,6 +113,8 @@ class Andor3(PyTango.Device_4Impl):
'overlap': 'Overlap',
'spurious_noise_filter': 'SpuriousNoiseFilter',
'serial_number': 'SerialNumber',
'gate_level': 'GateLevel',
'trigger_level': 'TriggerLevel',
}
self.init_device()
......@@ -355,6 +364,26 @@ class Andor3Class(PyTango.DeviceClass):
'format': '',
'description': 'camera serial number',
}],
'trigger_level':
[[PyTango.DevString,
PyTango.SCALAR,
PyTango.READ_WRITE],
{
'label':'External trigger level',
'unit': 'N/A',
'format': '',
'description': 'NORMAl or INVERTED'
}],
'gate_level':
[[PyTango.DevString,
PyTango.SCALAR,
PyTango.READ_WRITE],
{
'label':'External gate level',
'unit': 'N/A',
'format': '',
'description': 'NORMAl or INVERTED'
}],
}
#------------------------------------------------------------------
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment