From 14018b9550d89afc81ae8294b29feda5110c25e5 Mon Sep 17 00:00:00 2001 From: ahmedk <karim.ahmed@xfel.eu> Date: Mon, 12 Dec 2022 20:18:36 +0100 Subject: [PATCH] update da_to to module_naming --- src/cal_tools/calcat_interface.py | 97 +++++++++++++++++++------------ 1 file changed, 61 insertions(+), 36 deletions(-) diff --git a/src/cal_tools/calcat_interface.py b/src/cal_tools/calcat_interface.py index d70e3e91c..b51df9aa6 100644 --- a/src/cal_tools/calcat_interface.py +++ b/src/cal_tools/calcat_interface.py @@ -142,7 +142,12 @@ class CalCatApi(metaclass=ClientWrapper): return {k: resp_detector["data"][k] for k in self.get_detector_keys} @lru_cache() - def physical_detector_units(self, detector_id, snapshot_at, da_to="da"): + def physical_detector_units( + self, + detector_id, + snapshot_at, + module_naming="da", + ): """Physical detector unit metadata.""" resp_pdus = PhysicalDetectorUnit.get_all_by_detector( @@ -154,19 +159,19 @@ class CalCatApi(metaclass=ClientWrapper): # Create dict based on requested keys: karabo_da, module number, # or QxMx naming convention. - if da_to == "da": + 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 da_to == "modno": + 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 da_to == "qm": + elif module_naming == "qm": return { module_index_to_qm(int(pdu["karabo_da"][-2:])): { k: pdu[k] for k in self.get_pdu_keys @@ -174,7 +179,7 @@ class CalCatApi(metaclass=ClientWrapper): for pdu in resp_pdus["data"] } else: - raise ValueError(f"{da_to} is unknown!") + raise ValueError(f"{module_naming} is unknown!") @lru_cache() def calibration_id(self, calibration_name): @@ -209,7 +214,7 @@ class CalCatApi(metaclass=ClientWrapper): event_at=None, snapshot_at=None, metadata=None, - da_to="da", + module_naming="da", ): """Query bulk CCV metadata from CalCat. @@ -232,6 +237,13 @@ class CalCatApi(metaclass=ClientWrapper): state to look at or None for now (default). metadata (dict or None): Mapping to fill for results or None for a new dictionary (default). + module_naming (str or None): Expected module name convention to be + used as metadata dict keys. Expected values are: + `da`: data aggregator name is used. Default. + `modno`: module index is used. Index is chosen based on last 2 + integers in karabo_da. + `qm`: QxMx naming convention is used. Virtual names for + AGIPD, DSSC, and LPD. Returns: (dict) Nested mapping of module number to calibrations to @@ -282,16 +294,17 @@ class CalCatApi(metaclass=ClientWrapper): for ccv in resp_versions["data"]: try: - if da_to == "da": + if module_naming == "da": mod = ccv["physical_detector_unit"]["karabo_da"] - elif da_to == "qm": # Can be used for AGIPD, LPD, and DSSC. + # 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 da_to == "modno": + elif module_naming == "modno": mod = int(ccv["physical_detector_unit"]["karabo_da"][-2:]) else: - raise ValueError(f"{da_to} is unknown!") + raise ValueError(f"{module_naming} is unknown!") except KeyError: # Not included in our modules continue @@ -364,7 +377,7 @@ class CalibrationData: client=None, event_at=None, snapshot_at=None, - da_to="da", + module_naming="da", ): """Initialize a new CalibrationData object. @@ -382,6 +395,13 @@ class CalibrationData: CCVs should have been valid, now if omitted snapshot_at (datetime, date, str or None): Default time of database state to look at, now if omitted. + module_naming (str or None): Expected module name convention to be + used as metadata dict keys. Expected values are: + `da`: data aggregator name is used. Default. + `modno`: module index is used. Index is chosen based on last 2 + integers in karabo_da. + `qm`: QxMx naming convention is used. Virtual names for + AGIPD, DSSC, and LPD. **condition_params: Operating condition parameters defined on an instance level. """ @@ -390,7 +410,7 @@ class CalibrationData: self.modules = modules self.event_at = event_at self.snapshot_at = snapshot_at - self.da_to = da_to + self.module_naming = module_naming if client is None: client = ( @@ -505,7 +525,7 @@ class CalibrationData: @property def physical_detector_units(self): return self._api.physical_detector_units( - self.detector["id"], self.snapshot_at, self.da_to + self.detector["id"], self.snapshot_at, self.module_naming ) @property @@ -559,7 +579,7 @@ class CalibrationData: event_at or self.event_at, snapshot_at or self.snapshot_at, metadata, - da_to=self.da_to, + module_naming=self.module_naming, ) return metadata @@ -744,9 +764,9 @@ class CalibrationData: try: creation_date = data.files[0].metadata()["creationDate"] except KeyError: - from warnings import warn + from warnings import warning - warn( + warning( "Last file modification time used as creation date for old " "DAQ file format may be unreliable" ) @@ -756,9 +776,9 @@ class CalibrationData: ) else: if not data.is_single_run: - from warnings import warn + from warnings import warning - warn( + warning( "Sample file used to determine creation date for multi " "run data" ) @@ -847,7 +867,10 @@ class SplitConditionCalibrationData(CalibrationData): metadata = CCVMetadata() - dark_calibrations = self.dark_calibrations & set(calibrations) + # Calibrations are sorted to ensure using exactly the same query + # for multiple configuration. e.g. This is essential for calparrot. + dark_calibrations = sorted( + self.dark_calibrations & set(calibrations)) if dark_calibrations: self._api.closest_ccv_by_time_by_condition( self.detector_name, @@ -857,10 +880,11 @@ class SplitConditionCalibrationData(CalibrationData): event_at or self.event_at, snapshot_at or self.snapshot_at, metadata, - da_to=self.da_to, + module_naming=self.module_naming, ) - illum_calibrations = self.illuminated_calibrations & set(calibrations) + illum_calibrations = sorted( + self.illuminated_calibrations & set(calibrations)) if illum_calibrations: self._api.closest_ccv_by_time_by_condition( self.detector_name, @@ -870,8 +894,9 @@ class SplitConditionCalibrationData(CalibrationData): event_at or self.event_at, snapshot_at or self.snapshot_at, metadata, - da_to=self.da_to, + module_naming=self.module_naming, ) + return metadata @@ -915,7 +940,7 @@ class AGIPD_CalibrationData(SplitConditionCalibrationData): snapshot_at=None, gain_setting=None, gain_mode=None, - da_to="da", + module_naming="da", integration_time=12, source_energy=9.2, pixels_x=512, @@ -927,7 +952,7 @@ class AGIPD_CalibrationData(SplitConditionCalibrationData): client, event_at, snapshot_at, - da_to, + module_naming, ) self.sensor_bias_voltage = sensor_bias_voltage @@ -991,7 +1016,7 @@ class LPD_CalibrationData(SplitConditionCalibrationData): client=None, event_at=None, snapshot_at=None, - da_to="da", + module_naming="da", ): super().__init__( detector_name, @@ -999,7 +1024,7 @@ class LPD_CalibrationData(SplitConditionCalibrationData): client, event_at, snapshot_at, - da_to, + module_naming, ) self.sensor_bias_voltage = sensor_bias_voltage @@ -1044,7 +1069,7 @@ class DSSC_CalibrationData(CalibrationData): client=None, event_at=None, snapshot_at=None, - da_to="da", + module_naming="da", ): super().__init__( detector_name, @@ -1052,7 +1077,7 @@ class DSSC_CalibrationData(CalibrationData): client, event_at, snapshot_at, - da_to, + module_naming, ) self.sensor_bias_voltage = sensor_bias_voltage @@ -1100,7 +1125,7 @@ class JUNGFRAU_CalibrationData(CalibrationData): client=None, event_at=None, snapshot_at=None, - da_to="da", + module_naming="da", ): super().__init__( detector_name, @@ -1108,7 +1133,7 @@ class JUNGFRAU_CalibrationData(CalibrationData): client, event_at, snapshot_at, - da_to, + module_naming, ) self.sensor_bias_voltage = sensor_bias_voltage @@ -1160,7 +1185,7 @@ class PNCCD_CalibrationData(CalibrationData): client=None, event_at=None, snapshot_at=None, - da_to="da", + module_naming="da", ): # Ignore modules for this detector. super().__init__( @@ -1169,7 +1194,7 @@ class PNCCD_CalibrationData(CalibrationData): client, event_at, snapshot_at, - da_to, + module_naming, ) self.sensor_bias_voltage = sensor_bias_voltage @@ -1215,7 +1240,7 @@ class EPIX100_CalibrationData(SplitConditionCalibrationData): client=None, event_at=None, snapshot_at=None, - da_to="da", + module_naming="da", ): # Ignore modules for this detector. super().__init__( @@ -1224,7 +1249,7 @@ class EPIX100_CalibrationData(SplitConditionCalibrationData): client, event_at, snapshot_at, - da_to, + module_naming, ) self.sensor_bias_voltage = sensor_bias_voltage @@ -1264,7 +1289,7 @@ class GOTTHARD2_CalibrationData(CalibrationData): client=None, event_at=None, snapshot_at=None, - da_to="da", + module_naming="da", ): # Ignore modules for this detector. super().__init__( @@ -1273,7 +1298,7 @@ class GOTTHARD2_CalibrationData(CalibrationData): client, event_at, snapshot_at, - da_to, + module_naming, ) self.sensor_bias_voltage = sensor_bias_voltage -- GitLab