diff --git a/src/toolbox_scs/detectors/hrixs.py b/src/toolbox_scs/detectors/hrixs.py index 74c717d05b2f8347e79836a5eadfc8a4897b57ac..3de1a47a5e6a18a1de5a5952ca84723b28240f94 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),