Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
Lima-camera-andor3
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Jira
Jira
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
LimaGroup
Lima-camera-andor3
Commits
7c89bd33
Commit
7c89bd33
authored
Apr 09, 2020
by
Emmanuel Papillon
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
added gate and trigger level (normal or inverted)
parent
ab625de5
Pipeline
#24348
failed with stages
in 1 minute and 31 seconds
Changes
4
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
106 additions
and
8 deletions
+106
-8
include/Andor3Camera.h
include/Andor3Camera.h
+9
-4
sip/Andor3Camera.sip
sip/Andor3Camera.sip
+6
-0
src/Andor3Camera.cpp
src/Andor3Camera.cpp
+62
-4
tango/Andor3.py
tango/Andor3.py
+29
-0
No files found.
include/Andor3Camera.h
View file @
7c89bd33
...
...
@@ -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
;
...
...
sip/Andor3Camera.sip
View file @
7c89bd33
...
...
@@ -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;
...
...
src/Andor3Camera.cpp
View file @
7c89bd33
...
...
@@ -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"
;
...
...
tango/Andor3.py
View file @
7c89bd33
...
...
@@ -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'
}],
}
#------------------------------------------------------------------
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment