From 468526812f4f2e2fc44d622638ed1c7af00a2617 Mon Sep 17 00:00:00 2001 From: NichtJens Date: Sat, 16 Nov 2024 19:36:57 +0100 Subject: [PATCH] added power_on/off_modules --- sf_daq_broker/broker_manager_slow.py | 38 ++++++++++++++++++++++++++++ sf_daq_broker/broker_slow.py | 2 ++ sf_daq_broker/detector/detector.py | 9 +++++++ sf_daq_broker/validate.py | 6 +++++ 4 files changed, 55 insertions(+) diff --git a/sf_daq_broker/broker_manager_slow.py b/sf_daq_broker/broker_manager_slow.py index 3b7132c..bf55b50 100644 --- a/sf_daq_broker/broker_manager_slow.py +++ b/sf_daq_broker/broker_manager_slow.py @@ -131,6 +131,44 @@ class DetectorManager: return res + def power_on_modules(self, request, remote_ip): + return self._set_power_modules("on", request, remote_ip) + + def power_off_modules(self, request, remote_ip): + return self._set_power_modules("off", request, remote_ip) + + def _set_power_modules(self, target_state, request, remote_ip): + validate.request_has(request, "detector_name", "modules") + + beamline = get_beamline(remote_ip) + allowed_detectors_beamline = get_configured_detectors(beamline) + + detector_name = request["detector_name"] + + validate.detector_name_in_allowed_detectors_beamline(detector_name, allowed_detectors_beamline, beamline) + + detector = Detector(detector_name) + + modules = request["modules"] + + number_modules = detector.cfg.get_number_modules() + + validate.allowed_detector_modules(detector_name, modules, number_modules) + + if target_state == "on": + detector.power_on_modules(modules) + elif target_state == "off": + detector.power_off_modules(modules) + else: + raise ValueError(f'detector modules power state can either be "on" or "off", but requested is: {target_state}') + + res = { + "status": "ok", + "message": f"successfully powered {target_state} modules {modules} of {detector_name}" + } + return res + + def copy_user_files(self, request, remote_ip): validate.request_has(request, "pgroup", "run_number") diff --git a/sf_daq_broker/broker_slow.py b/sf_daq_broker/broker_slow.py index 69ac6d2..3953135 100644 --- a/sf_daq_broker/broker_slow.py +++ b/sf_daq_broker/broker_slow.py @@ -14,6 +14,8 @@ _logger = logging.getLogger(__name__) ENDPOINTS_POST = [ "set_detector_settings", + "power_on_modules", + "power_off_modules", "copy_user_files", "set_dap_settings" ] diff --git a/sf_daq_broker/detector/detector.py b/sf_daq_broker/detector/detector.py index cdc1a7d..431a29d 100644 --- a/sf_daq_broker/detector/detector.py +++ b/sf_daq_broker/detector/detector.py @@ -154,6 +154,15 @@ class Detector: self.jf.pedestalmode = pp + def power_on_modules(self, modules): + self.jf.setPowerChip(True, modules) + self.jf.setHighVoltage(120, modules) + + def power_off_modules(self, modules): + self.jf.setHighVoltage(0, modules) + self.jf.setPowerChip(False, modules) + + def parse_param_list(seq): """ diff --git a/sf_daq_broker/validate.py b/sf_daq_broker/validate.py index a214506..b2e04f2 100644 --- a/sf_daq_broker/validate.py +++ b/sf_daq_broker/validate.py @@ -71,6 +71,12 @@ def all_detector_names_in_allowed_detectors_beamline(dns, adb, bl): for dn in dns: detector_name_in_allowed_detectors_beamline(dn, adb, bl) +def allowed_detector_modules(dn, mods, n_mods): + allowed = range(n_mods) + for i in mods: + if i not in allowed: + raise ValidationError(f"requested module {i} is not allowed for detector {dn} (number of modules: {n_mods})") + def allowed_pulseid_range(pid_start, pid_stop): delta = pid_stop - pid_start if delta > MAX_PULSEID_DELTA: