diff --git a/src/cal_tools/agipdlib.py b/src/cal_tools/agipdlib.py index d743044f16e7015e7382164d13806b5770d1d171..1be1ac8f431b9b1ee285a32c213fd9a7ee686ae6 100644 --- a/src/cal_tools/agipdlib.py +++ b/src/cal_tools/agipdlib.py @@ -326,6 +326,15 @@ 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? @@ -334,8 +343,24 @@ class AgipdCtrlRuns: f" with values of {values}, respectively.") def sort_dark_runs(self): - assert len(self.run_ctrls) == 3, f"AGIPD dark runs are expected to be 3. {len(self.run_ctrls)} runs are given." # noqa - # TODO: complete sorting + """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? + 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: + 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()] def validate_gain_modes(self): """Validate the runs' gain modes arrangement.