Skip to content
Snippets Groups Projects
Commit 3a16bc81 authored by David Hammer's avatar David Hammer
Browse files

Merge branch 'jungfrau-new-firmware-condition' into 'master'

JUNGFRAU: condition watcher to look for new firmware key names

See merge request karaboDevices/calng!27
parents a1043cb3 e4adddd6
No related branches found
No related tags found
1 merge request!27JUNGFRAU: condition watcher to look for new firmware key names
import collections
import operator
from karabo.middlelayer import AccessMode, Assignment, String from karabo.middlelayer import AccessMode, Assignment, String
from .. import base_condition from .. import base_condition
from ..corrections.JungfrauCorrection import JungfrauGainMode from ..corrections.JungfrauCorrection import JungfrauGainMode
def settings_to_gain_mode(setting): def old_settings_to_gain_mode(setting):
gain_mode = JungfrauGainMode(setting) gain_mode = JungfrauGainMode(setting)
if gain_mode in (JungfrauGainMode.FIX_GAIN_1, JungfrauGainMode.FIX_GAIN_2): if gain_mode in (JungfrauGainMode.FIX_GAIN_1, JungfrauGainMode.FIX_GAIN_2):
return 1 return 1
...@@ -11,7 +14,7 @@ def settings_to_gain_mode(setting): ...@@ -11,7 +14,7 @@ def settings_to_gain_mode(setting):
return 0 return 0
def settings_to_gain_setting(setting): def old_settings_to_gain_setting(setting):
gain_mode = JungfrauGainMode(setting) gain_mode = JungfrauGainMode(setting)
if gain_mode is JungfrauGainMode.DYNAMIC_GAIN_HG0: if gain_mode is JungfrauGainMode.DYNAMIC_GAIN_HG0:
return 1 return 1
...@@ -19,7 +22,32 @@ def settings_to_gain_setting(setting): ...@@ -19,7 +22,32 @@ def settings_to_gain_setting(setting):
return 0 return 0
def new_settings_to_gain_setting(setting):
if setting == "gain0":
return 0
elif setting == "highgain0":
return 1
else:
raise ValueError(f"Unknown gain setting {setting}")
def new_gain_mode_to_gain_mode(gain_mode):
if gain_mode in {"dynamic", "forceswitchg1", "forceswitchg2"}:
return 0
elif gain_mode in {"fixg1", "fixg2"}:
return 1
else:
raise ValueError(f"Unknown gain_mode {gain_mode}")
class JungfrauCondition(base_condition.ConditionBase): class JungfrauCondition(base_condition.ConditionBase):
detectorFirmwareVersion = String(
displayedName="Firmware version",
assignment=Assignment.OPTIONAL,
accessMode=AccessMode.INITONLY,
defaultValue="new",
options=["old", "new"],
)
controlDeviceId = String( controlDeviceId = String(
displayedName="Control device ID", displayedName="Control device ID",
assignment=Assignment.MANDATORY, assignment=Assignment.MANDATORY,
...@@ -28,32 +56,29 @@ class JungfrauCondition(base_condition.ConditionBase): ...@@ -28,32 +56,29 @@ class JungfrauCondition(base_condition.ConditionBase):
@property @property
def keys_to_get(self): def keys_to_get(self):
return { key_map = [
self.controlDeviceId.value: [ # cells: 1.0 or 16.0
# cells: 1.0 or 16.0 ("storageCells", "memoryCells", lambda n: n + 1),
("storageCells", "memoryCells", lambda n: n + 1), (
# observed voltages in parameter conditions: "exposureTime",
# 90.0 "integrationTime",
# 180.0 lambda n: n * 1e6,
# 200.0 ),
]
if self.detectorFirmwareVersion.value == "old":
key_map += [
# note: control device parameter is a vector # note: control device parameter is a vector
("vHighVoltage", "biasVoltage", lambda arr: round(arr[0], ndigits=0)), ("vHighVoltage", "biasVoltage", operator.itemgetter(0)),
# observed integration times:
# 9.999999747378752
# 12.999999853491317
# 49.99999873689376
# 300.0000142492354
# 349.9999875202775
# 399.99998989515007
# 500.00002374872565
(
"exposureTime",
"integrationTime",
lambda n: round(n * 1e6, ndigits=0),
),
# gain mode: omitted or 1.0 # gain mode: omitted or 1.0
("settings", "gainMode", settings_to_gain_mode), ("settings", "gainMode", old_settings_to_gain_mode),
# gain setting: 0.0 or 1.0 (derived from gain mode on device) # gain setting: 0.0 or 1.0 (derived from gain mode on device)
("settings", "gainSetting", settings_to_gain_setting), ("settings", "gainSetting", old_settings_to_gain_setting),
]
else:
key_map += [
("highVoltage", "biasVoltage", operator.itemgetter(0)),
("settings", "gainSetting", new_settings_to_gain_setting),
("gainMode", "gainMode", new_gain_mode_to_gain_mode),
] ]
}
return {self.controlDeviceId.value: key_map}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment