Should all hardware objects' init() method call their super's init()?
For example some abstract hardware objects do not, and I wonder if it is on purpose or if it was simply forgotten:
|
def init(self): |
|
"""Init properties: actuator_name, username, read_only and default_value.""" |
|
self.actuator_name = self.get_property("actuator_name") |
|
self.read_only = self.get_property("read_only") or False |
|
self.default_value = self.get_property("default_value") |
|
if self.default_value is not None: |
|
self.update_value(self.default_value) |
|
limits = self.get_property("default_limits") |
|
if limits: |
|
try: |
|
self._nominal_limits = tuple(literal_eval(limits)) |
|
except TypeError: |
|
print("Invalid limits") |
|
self.username = self.get_property("username") |
|
def init(self): |
|
try: |
|
self._diameter_size_list = eval(self.get_property("diameter_size_list")) |
|
except Exception: |
|
logging.getLogger("HWR").error("Aperture: no diameter size list defined") |
|
|
|
try: |
|
self._position_list = eval(self.get_property("position_list")) |
|
except Exception: |
|
logging.getLogger("HWR").error("Aperture: no position list defined") |
|
def init(self): |
|
self.ready_event = gevent.event.Event() |
|
|
|
undulators = [] |
|
try: |
|
for undulator in self.config.undulators: |
|
undulators.append(undulator) |
|
except Exception: |
|
pass |
|
|
|
beam_div_hor, beam_div_ver = HWR.beamline.beam.get_beam_divergence() |
|
|
|
self.set_beamline_configuration( |
|
synchrotron_name=HWR.beamline.session.synchrotron_name, |
|
directory_prefix=self.get_property("directory_prefix"), |
|
default_exposure_time=HWR.beamline.detector.get_property( |
|
"default_exposure_time" |
|
), |
|
minimum_exposure_time=HWR.beamline.detector.get_property( |
|
"minimum_exposure_time" |
|
), |
|
detector_fileext=HWR.beamline.detector.get_property("fileSuffix"), |
|
detector_type=HWR.beamline.detector.get_property("type"), |
|
detector_manufacturer=HWR.beamline.detector.get_property("manufacturer"), |
|
detector_model=HWR.beamline.detector.get_property("model"), |
|
detector_px=HWR.beamline.detector.get_property("px"), |
|
detector_py=HWR.beamline.detector.get_property("py"), |
|
detector_binning_mode=HWR.beamline.detector.get_binning_mode(), |
|
undulators=undulators, |
|
focusing_optic=self.get_property("focusing_optic"), |
|
monochromator_type=self.get_property("monochromator"), |
|
beam_divergence_vertical=beam_div_hor, |
|
beam_divergence_horizontal=beam_div_ver, |
|
polarisation=self.get_property("polarisation"), |
|
input_files_server=self.get_property("input_files_server"), |
|
) |
|
def init(self): |
|
"""Initialisation""" |
|
self.lims = HWR.beamline.lims |
|
if not self.lims: |
|
logging.getLogger().warning("EnergyScan: no lims set") |
|
def init(self): |
|
"""Get the attributes to be defined as keys in the _machine_info_dict""" |
|
attr = self.get_property("parameters") |
|
if attr: |
|
self._check_attributes(literal_eval(attr)) |
|
else: |
|
# at least current should be in the list |
|
self._check_attributes(["current"]) |
|
def init(self): |
|
self.done_event = gevent.event.Event() |
|
self.ssx_setup = self.get_object_by_role("ssx_setup") |
|
|
|
self.result_types = self.get_property("result_types", DEFAULT_RESULT_TYPES) |
|
self.start_command = str(self.get_property("processing_command")) |
|
self.kill_command = str(self.get_property("kill_command")) |
|
self.interpolate_results = self.get_property("interpolate_results") |
-
|
def init(self): |
|
""" |
|
HardwareObject init method |
|
""" |
|
use_update_timer = self.get_property("useUpdateTimer", True) |
|
|
|
msg = f"SampleChanger: Using update timer is {use_update_timer}" |
|
logging.getLogger("HWR").info(msg) |
|
|
|
if use_update_timer: |
|
task1s = self.__timer_1s_task(wait=False) |
|
task1s.link(self._on_timer_1s_exit) |
|
updateTask = self.__update_timer_task(wait=False) |
|
updateTask.link(self._on_timer_update_exit) |
|
|
|
self.use_update_timer = use_update_timer |
|
|
|
self.update_info() |
|
def init(self): |
|
"""Initialise the values from config and set default values, |
|
when appropriate |
|
""" |
|
self.cam_name = self.get_property("name", "camera") |
|
|
|
try: |
|
self.cam_mirror = eval(self.get_property("mirror")) |
|
except TypeError: |
|
self.cam_mirror = [False, False] |
|
|
|
try: |
|
self.cam_encoding = self.get_property("encoding").lower() |
|
except AttributeError: |
|
# apply default value |
|
self.cam_encoding = AbstractVideoDevice.default_cam_encoding |
|
|
|
scale = self.get_property("scale") |
|
try: |
|
self.cam_scale_factor = eval(scale) |
|
except TypeError: |
|
logging.getLogger().warning( |
|
"%s: failed to interpret scale factor for camera.\nUsing default.", |
|
self.id, |
|
) |
|
self.cam_scale_factor = self.default_scale_factor |
|
|
|
self.poll_interval = self.get_property("interval", self.default_poll_interval) |
|
|
|
try: |
|
self.cam_gain = float(self.get_property("gain")) |
|
except TypeError: |
|
pass |
|
|
|
try: |
|
self.cam_exposure = float(self.get_property("exposure")) |
|
except TypeError: |
|
# apply default value |
|
self.cam_exposure = self.poll_interval / 1000.0 |
|
|
|
self.scale = self.get_property("scale", 1.0) |
|
|
|
try: |
|
self.cam_type = self.get_property("type").lower() |
|
except AttributeError: |
|
# apply default value |
|
self.cam_type = self.default_cam_type |
|
|
|
# Apply values |
|
self.set_video_live(False) |
|
time.sleep(0.1) |
|
self.set_cam_encoding(self.cam_encoding) |
|
self.set_exposure_time(self.cam_exposure) |
|
|
|
if self.cam_gain is not None: |
|
self.set_gain(self.cam_gain) |
|
|
|
self.image_dimensions = self.get_image_dimensions() |
|
|
|
# Start polling greenlet |
|
if self.image_polling is None: |
|
self.set_video_live(True) |
|
self.change_owner() |
|
|
|
logging.getLogger("HWR").info("Starting polling for camera") |
|
self.image_polling = gevent.spawn( |
|
self.do_image_polling, self.poll_interval / 1000.0 |
|
) |
|
self.image_polling.link_exception(self.polling_ended_exc) |
|
self.image_polling.link(self.polling_ended) |
|
def init(self): |
|
"""Initialisation""" |
|
self.default_integration_time = self.get_property("default_integration_time", 3) |
|
self.file_suffix = self.get_property("file_suffix", "dat") |
|
self.lims = HWR.beamline.lims |
|
if not self.lims: |
|
logging.getLogger().warning("XRFSpectrum: no lims set") |
I am not sure that it makes a big difference either way, but that seems strange to me. But again, things seem to work fine like this, so I am confused.
Should all hardware objects'
init()method call their super'sinit()?For example some abstract hardware objects do not, and I wonder if it is on purpose or if it was simply forgotten:
mxcubecore/mxcubecore/HardwareObjects/abstract/AbstractActuator.py
Lines 84 to 97 in 4947e54
mxcubecore/mxcubecore/HardwareObjects/abstract/AbstractAperture.py
Lines 56 to 65 in 4947e54
mxcubecore/mxcubecore/HardwareObjects/abstract/AbstractCollect.py
Lines 101 to 136 in 4947e54
mxcubecore/mxcubecore/HardwareObjects/abstract/AbstractEnergyScan.py
Lines 26 to 30 in 4947e54
mxcubecore/mxcubecore/HardwareObjects/abstract/AbstractMachineInfo.py
Lines 54 to 61 in 4947e54
mxcubecore/mxcubecore/HardwareObjects/abstract/AbstractOnlineProcessing.py
Lines 90 to 97 in 4947e54
mxcubecore/mxcubecore/HardwareObjects/abstract/AbstractProcedure.py
Lines 105 to 106 in 4947e54
mxcubecore/mxcubecore/HardwareObjects/abstract/AbstractSampleChanger.py
Lines 233 to 250 in 4947e54
mxcubecore/mxcubecore/HardwareObjects/abstract/AbstractVideoDevice.py
Lines 91 to 160 in 4947e54
mxcubecore/mxcubecore/HardwareObjects/abstract/AbstractXRFSpectrum.py
Lines 66 to 72 in 4947e54
I am not sure that it makes a big difference either way, but that seems strange to me. But again, things seem to work fine like this, so I am confused.