From 75600342b011c9f60eeb5b2f352a2582ab3b27dd Mon Sep 17 00:00:00 2001 From: Egor Sobolev <egor.sobolev@xfel.eu> Date: Mon, 4 Mar 2024 17:16:31 +0100 Subject: [PATCH] Write data for any analysis addon in data_dict --- src/cal_tools/agipdlib.py | 31 ++++++++++--------------------- src/cal_tools/litpx_counter.py | 6 ++++++ 2 files changed, 16 insertions(+), 21 deletions(-) diff --git a/src/cal_tools/agipdlib.py b/src/cal_tools/agipdlib.py index 1783c0b81..7290f54f7 100644 --- a/src/cal_tools/agipdlib.py +++ b/src/cal_tools/agipdlib.py @@ -28,7 +28,7 @@ from cal_tools.agipdutils import ( melt_snowy_pixels, ) from cal_tools.enums import AgipdGainMode, BadPixels, SnowResolution -from cal_tools.litpx_counter import LitPixelCounter +from cal_tools.litpx_counter import AnalysisAddon, LitPixelCounter from logging import warning @@ -771,26 +771,19 @@ class AgipdCorrections: det_channel = det_channel.partition(":")[0] + ":output" agipd_corr_source = f"{karabo_id}/CORR/{det_channel}" - schema = { - agipd_corr_source: ["image"] - } - addons = { - "litpx_counter": f"{karabo_id}/LITPX/{det_channel}" - } - for addon_name, src_name in addons.items(): - addon = data_dict.get(addon_name) - if addon is not None: - src_channels = schema.setdefault(src_name, []) - src_channels.append(addon.channel) - - instrument_channels = [] - for src_name, src_channels in schema.items(): - instrument_channels += [f"{src_name}/{ch}" for ch in src_channels] + instrument_channels = [f"{agipd_corr_source}/image"] # backward compatibility BEGIN instrument_channels.append(f"{agipd_base}/image") # backward compatibility END + addons = [] + for name, elem in data_dict.items(): + if isinstance(elem, AnalysisAddon): + src_name = elem.source_name(karabo_id, det_channel) + addons.append((elem, src_name)) + instrument_channels.append(f"{src_name}/{elem.channel}") + with DataFile.from_details(out_folder, agg, runno, seqno) as outfile: outfile.create_metadata( like=dc, instrument_channels=instrument_channels) @@ -832,11 +825,7 @@ class AgipdCorrections: # create addon sources required_addon_data = [] - for addon_name, src_name in addons.items(): - addon = data_dict.get(addon_name) - if addon is None: - continue - + for addon, src_name in addons: src = outfile.create_instrument_source(src_name) addon.set_num_images(n_img) addon.create_schema(src, trains, count) diff --git a/src/cal_tools/litpx_counter.py b/src/cal_tools/litpx_counter.py index 660ddbf72..0a70097f0 100644 --- a/src/cal_tools/litpx_counter.py +++ b/src/cal_tools/litpx_counter.py @@ -25,6 +25,9 @@ class AnalysisAddon: def process(self, chunk): raise NotImplementedError + def source_name(self, karabo_id, channel): + return f"{karabo_id}/DANA/{channel}" + def create_schema(self, source, file_trains=None, count=None): if file_trains is None: file_trains = source.file["INDEX/trainId"][:] @@ -83,3 +86,6 @@ class LitPixelCounter(AnalysisAddon): self.num_lit_px[i] = np.sum( self.image[i] > self.threshold, initial=0, where=mask) self.num_good_px[i] = np.sum(mask) + + def source_name(self, karabo_id, channel): + return f"{karabo_id}/LITPX/{channel}" -- GitLab