Skip to content
Snippets Groups Projects

JUNGFRAU: More user-friendly gain mode / gain setting parameters

Merged David Hammer requested to merge jungfrau-gainmode-enums into master
All threads resolved!
Files
2
import collections
import operator
from karabo.middlelayer import AccessMode, Assignment, String
from .. import base_condition
from ..corrections.JungfrauCorrection import GainModes
def old_settings_to_gain_mode(setting):
gain_mode = GainModes(setting)
if gain_mode in (GainModes.FIX_GAIN_1, GainModes.FIX_GAIN_2):
return 1
else:
return 0
def old_settings_to_gain_setting(setting):
gain_mode = GainModes(setting)
if gain_mode is GainModes.DYNAMIC_GAIN_HG0:
return 1
else:
return 0
def new_settings_to_gain_setting(setting):
def settings_to_gain_setting(setting):
if setting == "gain0":
return 0
return "LOW_CDS"
elif setting == "highgain0":
return 1
return "HIGH_CDS"
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):
detectorFirmwareVersion = String(
displayedName="Firmware version",
assignment=Assignment.OPTIONAL,
accessMode=AccessMode.INITONLY,
defaultValue="new",
+1
options=["old", "new"],
)
controlDeviceId = String(
displayedName="Control device ID",
@@ -56,7+29,7 @@
@property
def keys_to_get(self):
key_map = [
# cells: 1.0 or 16.0
("storageCells", "memoryCells", lambda n: n + 1),
(
"exposureTime",
"integrationTime",
lambda n: n * 1e6,
),
]
if self.detectorFirmwareVersion.value == "old":
key_map += [
# note: control device parameter is a vector
("vHighVoltage", "biasVoltage", operator.itemgetter(0)),
# gain mode: omitted or 1.0
("settings", "gainMode", old_settings_to_gain_mode),
# gain setting: 0.0 or 1.0 (derived from gain mode on device)
("settings", "gainSetting", old_settings_to_gain_setting),
]
else:
key_map += [
return {
self.controlDeviceId.value: [
# cells: 1.0 or 16.0
("storageCells", "memoryCells", lambda n: n + 1),
(
"exposureTime",
"integrationTime",
lambda n: n * 1e6,
),
("highVoltage", "biasVoltage", operator.itemgetter(0)),
("settings", "gainSetting", new_settings_to_gain_setting),
("gainMode", "gainMode", new_gain_mode_to_gain_mode),
("settings", "gainSetting", settings_to_gain_setting),
("gainMode", "gainMode", None),
]
return {self.controlDeviceId.value: key_map}
}
Loading