From a228027892e120e6bf47400b5c448936ddb64508 Mon Sep 17 00:00:00 2001 From: ahmedk <karim.ahmed@xfel.eu> Date: Fri, 30 Dec 2022 12:36:51 +0100 Subject: [PATCH] add module naming back in CalCatApi --- src/cal_tools/calcat_interface.py | 92 +++++++++++++++++-------------- 1 file changed, 50 insertions(+), 42 deletions(-) diff --git a/src/cal_tools/calcat_interface.py b/src/cal_tools/calcat_interface.py index 3fd06aecb..9049fae00 100644 --- a/src/cal_tools/calcat_interface.py +++ b/src/cal_tools/calcat_interface.py @@ -146,6 +146,7 @@ class CalCatApi(metaclass=ClientWrapper): self, detector_id, pdu_snapshot_at, + module_naming="da" ): """Physical detector unit metadata.""" @@ -156,11 +157,30 @@ class CalCatApi(metaclass=ClientWrapper): if not resp_pdus["success"]: raise CalCatError(resp_pdus) - return { - pdu['karabo_da']: { - k: pdu[k] for k in self.get_pdu_keys} - for pdu in resp_pdus['data'] - } + # Create dict based on requested keys: karabo_da, module number, + # or QxMx naming convention. + if module_naming == "da": + return { + pdu["karabo_da"]: {k: pdu[k] for k in self.get_pdu_keys} + for pdu in resp_pdus["data"] + } + elif module_naming == "modno": + return { + int(pdu["karabo_da"][-2:]): { + k: pdu[k] for k in self.get_pdu_keys + } + for pdu in resp_pdus["data"] + } + elif module_naming == "qm": + return { + module_index_to_qm(int(pdu["karabo_da"][-2:])): { + k: pdu[k] for k in self.get_pdu_keys + } + for pdu in resp_pdus["data"] + } + else: + raise ValueError(f"{module_naming} is unknown!") + @lru_cache() def calibration_id(self, calibration_name): @@ -251,15 +271,22 @@ class CalCatApi(metaclass=ClientWrapper): } calibration_ids = list(cal_id_map.keys()) + # Map aggregator to the selected module name. + da_to_modname = { + data['karabo_da']: mod_name for mod_name, data in + self.physical_detector_units( + self.detector(detector_name)['id'], + pdu_snapshot_at, + module_naming=module_naming + ).items() + if not modules or mod_name in modules + } # The API call supports a single module or all modules, as the # performance increase is only minor in between. Hence, all # modules are queried if more than one is selected and filtered # afterwards, if necessary. - karabo_da = ( - next(iter(modules)) - if modules is not None and len(modules) == 1 - else "", - ) # noqa + karabo_da = next(iter(da_to_modname)) if len(da_to_modname) == 1 else '', + resp_versions = CalibrationConstantVersion.get_closest_by_time_by_detector_conditions( # noqa self.client, detector_name, @@ -275,17 +302,8 @@ class CalCatApi(metaclass=ClientWrapper): for ccv in resp_versions["data"]: try: - if module_naming == "da": - mod = ccv["physical_detector_unit"]["karabo_da"] - # Can be used for AGIPD, LPD, and DSSC. - elif module_naming == "qm": - mod = module_index_to_qm( - int(ccv["physical_detector_unit"]["karabo_da"][-2:]) - ) - elif module_naming == "modno": - mod = int(ccv["physical_detector_unit"]["karabo_da"][-2:]) - else: - raise ValueError(f"{module_naming} is unknown!") + mod = da_to_modname[ccv['physical_detector_unit']['karabo_da']] + print(mod) except KeyError: # Not included in our modules continue @@ -506,24 +524,11 @@ class CalibrationData: @property def physical_detector_units(self): - pdu_dict = self._api.physical_detector_units( - self.detector["id"], self.pdu_snapshot_at) - # Create dict based on requested keys: karabo_da, module number, - # or QxMx naming convention. - if self.module_naming == "da": - return pdu_dict - elif self.module_naming == "modno": - return { - int(mod[-2:]): mod_v - for mod, mod_v in pdu_dict.items() - } - elif self.module_naming == "qm": - return { - module_index_to_qm(int(mod[-2:])): mod_v - for mod, mod_v in pdu_dict.items() - } - else: - raise ValueError(f"{self.module_naming} is unknown!") + return self._api.physical_detector_units( + self.detector["id"], self.pdu_snapshot_at, self.module_naming + ) + + @property def condition(self): @@ -1169,6 +1174,7 @@ class PNCCD_CalibrationData(CalibrationData): gain_setting, pixels_x=1024, pixels_y=1024, + modules=None, client=None, event_at=None, pdu_snapshot_at=None, @@ -1177,7 +1183,7 @@ class PNCCD_CalibrationData(CalibrationData): # Ignore modules for this detector. super().__init__( detector_name, - None, + modules, client, event_at, pdu_snapshot_at, @@ -1224,6 +1230,7 @@ class EPIX100_CalibrationData(SplitConditionCalibrationData): pixels_x=708, pixels_y=768, source_energy=9.2, + modules=None, client=None, event_at=None, pdu_snapshot_at=None, @@ -1232,7 +1239,7 @@ class EPIX100_CalibrationData(SplitConditionCalibrationData): # Ignore modules for this detector. super().__init__( detector_name, - None, + modules, client, event_at, pdu_snapshot_at, @@ -1273,6 +1280,7 @@ class GOTTHARD2_CalibrationData(CalibrationData): exposure_period, acquisition_rate, single_photon, + modules=None, client=None, event_at=None, pdu_snapshot_at=None, @@ -1281,7 +1289,7 @@ class GOTTHARD2_CalibrationData(CalibrationData): # Ignore modules for this detector. super().__init__( detector_name, - None, + modules, client, event_at, pdu_snapshot_at, -- GitLab