From 8636af78dd55b65b0804b60dcfbe215388e915ec Mon Sep 17 00:00:00 2001 From: ahmedk <karim.ahmed@xfel.eu> Date: Mon, 9 Oct 2023 15:22:29 +0200 Subject: [PATCH] put back to dataclass and avoid using a dict but sort lists directly --- src/cal_tools/agipdlib.py | 32 +++++++++++++------------------- 1 file changed, 13 insertions(+), 19 deletions(-) diff --git a/src/cal_tools/agipdlib.py b/src/cal_tools/agipdlib.py index 1be1ac8f4..61a8fac91 100644 --- a/src/cal_tools/agipdlib.py +++ b/src/cal_tools/agipdlib.py @@ -326,15 +326,6 @@ class AgipdCtrlRuns: ) for r in self.runs] self.gain_modes = self.get_gain_modes() - self.runs = [] - self.runs_dict = {} - for c in self.run_ctrls: - self.runs_dict[c.run] = { - "dc": c.run_dc, - "ctrl": c, - } - self.runs.append(c.run) - def _validate_same_value(self, name, values): if len(set(values)) != 1: # Should we raise an error and stop processing? @@ -346,21 +337,24 @@ class AgipdCtrlRuns: """Order dark runs based on PatternTypeIndex.""" assert len(self.run_ctrls) == 3, f"AGIPD dark runs are expected to be 3. {len(self.run_ctrls)} runs are given." # Expected patterns: XRay: 0, DarkHG: 1, DarkMG: 2, DarkLG: 3, - # SlopesPC: 4 # Gain runs??. Are there any more expected PatternTypeIndex? + # SlopesPC: 4 # Gain runs??. Any more expected PatternTypeIndexs? patterns = [] - for r, rdict in self.runs_dict.items(): - pattern = rdict["dc"][ - self.ctrl_src, "patternTypeIndex"].as_single_value() - self.runs_dict[r]["pattern"] = pattern - patterns.append(pattern) # needed in case of unsorted warning. - self.runs_dict = sorted(self.runs_dict.items(), key=lambda item: item[1]["pattern"]) - if list(self.runs_dict.keys()) != self.runs: + for c in self.run_ctrls: + patterns.append(c.run_dc[ + self.ctrl_src, "patternTypeIndex"].as_single_value()) + zipped_lists = zip(patterns, self.runs, self.run_ctrls) + + # Sort the lists based on the patterns + sorted_zipped_lists = sorted(zipped_lists, key=lambda item: item[0]) + _, sorted_runs, sorted_run_ctrls = zip(*sorted_zipped_lists) + + if sorted_runs != self.runs: Warning("Given dark runs are unsorted. Run will be sorted from" f" {self.runs} with patternTypeIndexs {patterns} to " f" {list(self.runs_dict.keys())}.") # Update run_ctrls and runs order - self.runs = list(self.runs_dict.keys()) - self.run_ctrls = [v["ctrl"] for v in self.runs_dict.values()] + self.runs = sorted_runs + self.run_ctrls = sorted_run_ctrls def validate_gain_modes(self): """Validate the runs' gain modes arrangement. -- GitLab