Skip to content

Commit

Permalink
rewrite some long lines in EigerDetector
Browse files Browse the repository at this point in the history
  • Loading branch information
jsouter committed Jun 12, 2024
1 parent 77b2ed5 commit 9820ac6
Showing 1 changed file with 85 additions and 36 deletions.
121 changes: 85 additions & 36 deletions python/src/eiger_detector/control/eiger_detector.py
Original file line number Diff line number Diff line change
Expand Up @@ -212,6 +212,7 @@ def __init__(self, endpoint, api_version):
}

# Initialise configuration parameters and populate the parameter tree
detector_config = param_tree[self.STR_DETECTOR][self.STR_API][self._api_version][self.STR_CONFIG]
for cfg in self.DETECTOR_CONFIG:
param = self.read_detector_config(cfg)
if param is not None:
Expand All @@ -223,16 +224,22 @@ def __init__(self, endpoint, api_version):
writeable = True

if writeable is True:
param_tree[self.STR_DETECTOR][self.STR_API][self._api_version][self.STR_CONFIG][cfg] = (lambda x=cfg: self.get_value(getattr(self, x)),
lambda value, x=cfg: self.set_value(x, value),
self.get_meta(getattr(self, cfg)))
detector_config[cfg] = (
lambda x=cfg: self.get_value(getattr(self, x)),
lambda value, x=cfg: self.set_value(x, value),
self.get_meta(getattr(self, cfg))
)
else:
param_tree[self.STR_DETECTOR][self.STR_API][self._api_version][self.STR_CONFIG][cfg] = (lambda x=cfg: self.get_value(getattr(self, x)), self.get_meta(getattr(self, cfg)))
detector_config[cfg] = (
lambda x=cfg: self.get_value(getattr(self, x)),
self.get_meta(getattr(self, cfg))
)
else:
logging.error("Parameter {} has not been implemented for API {}".format(cfg, self._api_version))
self.missing_parameters.append(cfg)

# Initialise status parameters and populate the parameter tree
detector_status = param_tree[self.STR_DETECTOR][self.STR_API][self._api_version][self.STR_STATUS]
for status in self.DETECTOR_STATUS:
try:
reply = self.read_detector_status(status)
Expand All @@ -241,19 +248,24 @@ def __init__(self, endpoint, api_version):
if 'link_' in status:
reply['allowed_values'] = ['down', 'up']
setattr(self, status, reply)
param_tree[self.STR_DETECTOR][self.STR_API][self._api_version][self.STR_STATUS][status] = (lambda x=getattr(self, status): self.get_value(x), self.get_meta(getattr(self, status)))
detector_status[status] = (
lambda x=getattr(self, status): self.get_value(x),
self.get_meta(getattr(self, status))
)
else:
logging.error("Status {} has not been implemented for API {}".format(status, self._api_version))
self.missing_parameters.append(status)
except:
# For a 500K link_2 and link_3 status will fail and return exceptions here, which is OK
if status == 'link_2' or status == 'link_3':
param_tree[self.STR_DETECTOR][self.STR_API][self._api_version][self.STR_STATUS][status] = (lambda: 'down', {'allowed_values': ['down', 'up']})
detector_status[status] = (
lambda: 'down', {'allowed_values': ['down', 'up']}
)
else:
raise

# Insert internal stale parameters flag into detector status parameters
param_tree[self.STR_DETECTOR][self.STR_API][self._api_version][self.STR_STATUS]['stale_parameters'] = (
detector_status['stale_parameters'] = (
self.has_stale_parameters,
{}
)
Expand All @@ -262,7 +274,10 @@ def __init__(self, endpoint, api_version):
reply = self.read_detector_status('{}/{}'.format(self.STR_BOARD_000, status))
if reply is not None:
setattr(self, status, reply)
param_tree[self.STR_DETECTOR][self.STR_API][self._api_version][self.STR_STATUS][self.STR_BOARD_000][status] = (lambda x=getattr(self, status): self.get_value(x), self.get_meta(getattr(self, status)))
detector_status[self.STR_BOARD_000][status] = (
lambda x=getattr(self, status): self.get_value(x),
self.get_meta(getattr(self, status))
)
else:
logging.error("Status {} has not been implemented for API {}".format(status, self._api_version))
self.missing_parameters.append(status)
Expand All @@ -271,67 +286,96 @@ def __init__(self, endpoint, api_version):
reply = self.read_detector_status('{}/{}'.format(self.STR_BUILDER, status))
if reply is not None:
setattr(self, status, reply)
param_tree[self.STR_DETECTOR][self.STR_API][self._api_version][self.STR_STATUS][self.STR_BUILDER][status] = (lambda x=getattr(self, status): self.get_value(x), self.get_meta(getattr(self, status)))
detector_status[self.STR_BUILDER][status] = (
lambda x=getattr(self, status): self.get_value(x),
self.get_meta(getattr(self, status))
)
else:
logging.error("Status {} has not been implemented for API {}".format(status, self._api_version))
logging.error("Status {} has not been implemented for API {}".format(
status, self._api_version)
)
self.missing_parameters.append(status)

stream_status = param_tree[self.STR_STREAM][self.STR_API][self._api_version][self.STR_STATUS]
for status in self.STREAM_STATUS:
reply = self.read_stream_status(status)
if reply is not None:
setattr(self, status, reply)
param_tree[self.STR_STREAM][self.STR_API][self._api_version][self.STR_STATUS][status] = (lambda x=getattr(self, status): self.get_value(x), self.get_meta(getattr(self, status)))
stream_status[status] = (
lambda x=getattr(self, status): self.get_value(x),
self.get_meta(getattr(self, status))
)
else:
logging.error("Status {} has not been implemented for API {}".format(status, self._api_version))
logging.error("Status {} has not been implemented for API {}".format(
status, self._api_version)
)
self.missing_parameters.append(status)

# Initialise stream config items
stream_config = param_tree[self.STR_STREAM][self.STR_API][self._api_version][self.STR_CONFIG]
for cfg in self.STREAM_CONFIG:
if cfg == 'mode':
self.stream_mode = self.read_stream_config('mode')
param_tree[self.STR_STREAM][self.STR_API][self._api_version][self.STR_CONFIG]['mode'] = (lambda x='stream_mode': self.get_value(getattr(self, x)),
lambda value: self.set_mode(self.STR_STREAM, value),
self.get_meta(self.stream_mode))
stream_config['mode'] = (
lambda x='stream_mode': self.get_value(getattr(self, x)),
lambda value: self.set_mode(self.STR_STREAM, value),
self.get_meta(self.stream_mode)
)

else:
setattr(self, cfg, self.read_stream_config(cfg))
param_tree[self.STR_STREAM][self.STR_API][self._api_version][self.STR_CONFIG][cfg] = (lambda x=cfg: self.get_value(getattr(self, x)),
lambda value, x=cfg: self.set_value(x, value),
self.get_meta(getattr(self, cfg)))

#param_tree[self.STR_DETECTOR][self.STR_API][self._api_version][self.STR_STATUS][status] = (lambda x=getattr(self, status): self.get_value(x), self.get_meta(getattr(self, status)))
stream_config[cfg] = (lambda x=cfg: self.get_value(getattr(self, x)),
lambda value, x=cfg: self.set_value(x, value),
self.get_meta(getattr(self, cfg))
)

# Initialise monitor mode
self.monitor_mode = self.read_monitor_config('mode')
param_tree[self.STR_MONITOR][self.STR_API][self._api_version][self.STR_CONFIG]['mode'] = (lambda x='monitor_mode': self.get_value(getattr(self, x)),
lambda value: self.set_mode(self.STR_MONITOR, value),
self.get_meta(self.monitor_mode))
param_tree[self.STR_MONITOR][self.STR_API][self._api_version][self.STR_CONFIG]['mode'] = (
lambda x='monitor_mode': self.get_value(getattr(self, x)),
lambda value: self.set_mode(self.STR_MONITOR, value),
self.get_meta(self.monitor_mode)
)

# Initialise filewriter config items
fw_config = param_tree[self.STR_FW][self.STR_API][self._api_version][self.STR_CONFIG]
for cfg in self.FW_CONFIG:
if cfg == 'mode':
# Initialise filewriter mode
self.fw_mode = self.read_filewriter_config('mode')
param_tree[self.STR_FW][self.STR_API][self._api_version][self.STR_CONFIG]['mode'] = (lambda x='fw_mode': self.get_value(getattr(self, x)),
lambda value: self.set_mode(self.STR_FW, value),
self.get_meta(self.fw_mode))
fw_config['mode'] = (
lambda x='fw_mode': self.get_value(getattr(self, x)),
lambda value: self.set_mode(self.STR_FW, value),
self.get_meta(self.fw_mode)
)
else:
setattr(self, cfg, self.read_filewriter_config(cfg))
param_tree[self.STR_FW][self.STR_API][self._api_version][self.STR_CONFIG][cfg] = (lambda x=cfg: self.get_value(getattr(self, x)),
lambda value, x=cfg: self.set_value(x, value),
self.get_meta(getattr(self, cfg)))
fw_config[cfg] = (
lambda x=cfg: self.get_value(getattr(self, x)),
lambda value, x=cfg: self.set_value(x, value),
self.get_meta(getattr(self, cfg))
)


# Initialise additional ADOdin configuration items
if self._api_version != '1.8.0':
param_tree[self.STR_DETECTOR][self.STR_API][self._api_version][self.STR_CONFIG]['ccc_cutoff'] = (lambda: self.get_value(self.countrate_correction_count_cutoff), self.get_meta(self.countrate_correction_count_cutoff))
detector_config['ccc_cutoff'] = (
lambda: self.get_value(self.countrate_correction_count_cutoff),
self.get_meta(self.countrate_correction_count_cutoff)
)
param_tree['status'] = {
'manufacturer': (lambda: 'Dectris', {}),
'model': (lambda: 'Odin [Eiger {}]'.format(self._api_version), {}),
'state': (self.get_state, {}),
'sensor': {
'width': (lambda: self.get_value(self.x_pixels_in_detector), self.get_meta(self.x_pixels_in_detector)),
'height': (lambda: self.get_value(self.y_pixels_in_detector), self.get_meta(self.y_pixels_in_detector)),
'width': (
lambda: self.get_value(self.x_pixels_in_detector),
self.get_meta(self.x_pixels_in_detector)
),
'height': (
lambda: self.get_value(self.y_pixels_in_detector),
self.get_meta(self.y_pixels_in_detector)
),
'bytes': (lambda: self.get_value(self.x_pixels_in_detector) *
self.get_value(self.y_pixels_in_detector) *
self.get_value(self.bit_depth_image) / 8, {})
Expand Down Expand Up @@ -659,8 +703,13 @@ def read_detector_live_image(self):
elif tag_id == self.TIFF_ID_STRIPOFFSETS:
image_strip_offset = tag_data_offset

if image_width > -1 and image_height > -1 and image_bitdepth > -1 and image_rows_per_strip == image_height and image_strip_offset > -1:
# We have a valid image so construct the required object and publish it
if (
image_width > -1
and image_height > -1
and image_bitdepth > -1
and image_rows_per_strip == image_height
and image_strip_offset > -1
): # We have a valid image so construct the required object and publish it
frame_header = {
'frame_num': self._live_view_frame_number,
'acquisition_id': '',
Expand Down Expand Up @@ -850,12 +899,12 @@ def do_check_status(self):
pass
for status in self.DETECTOR_BOARD_STATUS:
try:
setattr(self, status, self.read_detector_status('{}/{}'.format(self.STR_BOARD_000, status)))
setattr(self, status, self.read_detector_status(f"{self.STR_BOARD_000}/{status}"))
except:
pass
for status in self.DETECTOR_BUILD_STATUS:
try:
setattr(self, status, self.read_detector_status('{}/{}'.format(self.STR_BUILDER, status)))
setattr(self, status, self.read_detector_status(f"{self.STR_BUILDER}/{status}"))
except:
pass
time.sleep(.5)
Expand Down

0 comments on commit 9820ac6

Please sign in to comment.