From b17f94e6e057ebb3478c03c4eb1fcb2bc4968c71 Mon Sep 17 00:00:00 2001 From: Martin Teichmann <martin.teichmann@xfel.eu> Date: Wed, 16 Mar 2022 19:56:58 +0100 Subject: [PATCH] add an integration function centroiding is not always fine --- src/toolbox_scs/detectors/hrixs.py | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/src/toolbox_scs/detectors/hrixs.py b/src/toolbox_scs/detectors/hrixs.py index 74c717d..3de1a47 100644 --- a/src/toolbox_scs/detectors/hrixs.py +++ b/src/toolbox_scs/detectors/hrixs.py @@ -293,6 +293,8 @@ class hRIXS: BINS = abs(np.subtract(*RANGE)) * FACTOR METHOD = 'centroid' # ['centroid', 'integral'] + USE_DARK = False + ENERGY_INTERCEPT = 0 ENERGY_SLOPE = 1 @@ -318,6 +320,11 @@ class hRIXS: return data + def load_dark(self, runNB, proposal=None): + data = self.from_run(runNB, proposal) + self.dark_image = data['hRIXS_det'].mean(dim='trainId') + self.USE_DARK = True + def find_curvature(self, runNB, proposal=None, plot=True, args=None, **kwargs): data = self.from_run(runNB, proposal) @@ -354,6 +361,20 @@ class hRIXS: * self.ENERGY_SLOPE + self.ENERGY_INTERCEPT) return data.assign(spectrum=(("trainId", "energy"), ret)) + def integrate(self, data): + bins = self.Y_RANGE.stop - self.Y_RANGE.start + ret = np.zeros((len(data["hRIXS_det"]), bins - 20)) + for image, r in zip(data["hRIXS_det"], ret): + if self.USE_DARK: + image = image - self.dark_image + r[:] = integrate(image.to_numpy()[self.X_RANGE, self.Y_RANGE].T, factor=1, + range=(10, bins - 10), + curvature=(self.CURVE_A, self.CURVE_B)) + data = data.assign_coords( + energy=np.arange(self.Y_RANGE.start + 10, self.Y_RANGE.stop - 10) + * self.ENERGY_SLOPE + self.ENERGY_INTERCEPT) + return data.assign(spectrum=(("trainId", "energy"), ret)) + aggregators = dict( hRIXS_det=lambda x, dim: x.sum(dim=dim), Delay=lambda x, dim: x.mean(dim=dim), -- GitLab