From c7b10134969d5116d47a9156c9b911db737b26d2 Mon Sep 17 00:00:00 2001 From: Takanori Nakane Date: Tue, 20 Aug 2024 13:39:19 +0900 Subject: [PATCH 1/4] FullCBFWriter: repair the panel shuffling bug (#745) --- src/dxtbx/format/cbf_writer.py | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/dxtbx/format/cbf_writer.py b/src/dxtbx/format/cbf_writer.py index 595538ecd..62d72125f 100644 --- a/src/dxtbx/format/cbf_writer.py +++ b/src/dxtbx/format/cbf_writer.py @@ -215,6 +215,7 @@ def level_string(key): detector_axes_names = [] # save these for later panelkeys = [] panelnames = [] + panelindices = [] def recursive_setup_basis_dict(key, parent_name="", panel_id=0): # Set up CBF axis names, including equipment components and depends_on chains @@ -230,6 +231,8 @@ def recursive_setup_basis_dict(key, parent_name="", panel_id=0): panelname = "PANEL_%d" % panel_id panelkeys.append(key) panelnames.append(panelname) + dxtbx_panel_index = list(detector).index(node) + panelindices.append(dxtbx_panel_index) panel_id += 1 if len(key) == 1: @@ -253,6 +256,11 @@ def recursive_setup_basis_dict(key, parent_name="", panel_id=0): return panel_id recursive_setup_basis_dict((0,)) + # The order `recursive_setup_basis_dict` visits panels does not necessarily match + # the order returned by dxtbx's `get_detector` and `get_raw_data`. + # See https://github.com/cctbx/dxtbx/issues/745. + self.panelindices = panelindices # needed in add_data_to_cbf + sorted_panels = [detector[i] for i in panelindices] if index is None: cbf_root = self.imageset.paths()[0] @@ -327,7 +335,7 @@ def recursive_setup_basis_dict(key, parent_name="", panel_id=0): # defined as [min-trusted-value, max-trusted-value]. The CBF definition # of 'overload' is in fact saturation - i.e. the max-trusted-value, while # the undefined_value is below the min-trusted-value. - trusted_ranges = [panel.get_trusted_range() for panel in detector] + trusted_ranges = [panel.get_trusted_range() for panel in sorted_panels] try: add_frame_specific_cbf_tables( cbf, @@ -336,7 +344,7 @@ def recursive_setup_basis_dict(key, parent_name="", panel_id=0): trusted_ranges, diffrn_id, False, - gain=[panel.get_gain() for panel in detector], + gain=[panel.get_gain() for panel in sorted_panels], flux=beam.get_flux(), ) except TypeError: @@ -348,7 +356,7 @@ def recursive_setup_basis_dict(key, parent_name="", panel_id=0): trusted_ranges, diffrn_id, False, - gain=[panel.get_gain() for panel in detector], + gain=[panel.get_gain() for panel in sorted_panels], ) """Data items in the AXIS category record the information required @@ -596,6 +604,7 @@ def add_data_to_cbf(self, cbf, index=None, data=None, verbose=False): data = self.imageset.get_raw_data(index) if not isinstance(data, tuple): data = (data,) + data = tuple([data[i] for i in self.panelindices]) array_names = [] cbf.find_category(b"diffrn_data_frame") From 5d5397b6634ce062cf0fc119d1a1912d7c8b9d6a Mon Sep 17 00:00:00 2001 From: Takanori Nakane Date: Tue, 20 Aug 2024 14:00:06 +0900 Subject: [PATCH 2/4] Add newsfragment --- newsfragments/XXX.bugfix | 1 + 1 file changed, 1 insertion(+) create mode 100644 newsfragments/XXX.bugfix diff --git a/newsfragments/XXX.bugfix b/newsfragments/XXX.bugfix new file mode 100644 index 000000000..6dbd045e7 --- /dev/null +++ b/newsfragments/XXX.bugfix @@ -0,0 +1 @@ ++ repair the panel shuffling bug in FullCBFWriter From 5354de1e35b54329ce185d5d2bcd0483b7bca26e Mon Sep 17 00:00:00 2001 From: DiamondLightSource-build-server Date: Tue, 20 Aug 2024 12:41:04 +0000 Subject: [PATCH 3/4] Rename newsfragments/XXX.bugfix to newsfragments/752.bugfix --- newsfragments/{XXX.bugfix => 752.bugfix} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename newsfragments/{XXX.bugfix => 752.bugfix} (100%) diff --git a/newsfragments/XXX.bugfix b/newsfragments/752.bugfix similarity index 100% rename from newsfragments/XXX.bugfix rename to newsfragments/752.bugfix From 6d7d15d8d41fe1b642d40d485c32cafea100bea8 Mon Sep 17 00:00:00 2001 From: Nicholas Devenish Date: Wed, 21 Aug 2024 09:10:57 +0100 Subject: [PATCH 4/4] Reword news --- newsfragments/752.bugfix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/newsfragments/752.bugfix b/newsfragments/752.bugfix index 6dbd045e7..f01107525 100644 --- a/newsfragments/752.bugfix +++ b/newsfragments/752.bugfix @@ -1 +1 @@ -+ repair the panel shuffling bug in FullCBFWriter +Stop ``dxtbx.image_average`` shuffling panel positions for segmented detectors.