diff --git a/src/toolbox_scs/detectors/hrixs.py b/src/toolbox_scs/detectors/hrixs.py index d7621d5c5f813dcb7e584dddc5b81638c81ea2d2..6f1c23d3e1d0e548dc58981524571402ccd97592 100644 --- a/src/toolbox_scs/detectors/hrixs.py +++ b/src/toolbox_scs/detectors/hrixs.py @@ -471,33 +471,28 @@ class hRIXS: data.spectrum[0, :].plot() # plot the spectrum of the first image """ bins = self.Y_RANGE.stop - self.Y_RANGE.start - ret = np.zeros((len(data["hRIXS_det"]), bins - 20)) + margin = 10 + ret = np.zeros((len(data["hRIXS_det"]), bins - 2 * margin)) if self.USE_DARK: dark_image = self.dark_image[self.X_RANGE, self.Y_RANGE] images = data["hRIXS_det"].values[:, self.X_RANGE, self.Y_RANGE] x = np.arange(images.shape[1])[:, None] - y = np.arange(images.shape[2])[None, :] - ys = y - self.parabola(x) - ysf = np.floor(ys) - left = ys - ysf - ysfp1 = ysf + 1 - right = ysfp1 - ys - kwargs = dict(bins=bins, range=(0, bins)) + energy = np.arange(images.shape[2])[None, :] - self.parabola(x) + floor, left = divmod(energy, 1) + right = 1 - left + def histo(weight): + return np.histogram(floor.ravel(), weights=weight.ravel(), + bins=bins, range=(0, bins))[0] for image, r in zip(images, ret): if self.USE_DARK: image = image - dark_image - lhy, _ = np.histogram( - ysf.ravel(), weights=(left * image).ravel(), **kwargs) - rhy, _ = np.histogram( - ysfp1.ravel(), weights=(right * image).ravel(), **kwargs) - lvy, _ = np.histogram( - ysf.ravel(), weights=left.ravel(), **kwargs) - rvy, _ = np.histogram( - ysfp1.ravel(), weights=right.ravel(), **kwargs) - r[:] = ((lhy + rhy) / (lvy + rvy))[10:-10] - data.coords["energy"] = \ - np.arange(self.Y_RANGE.start + 10, self.Y_RANGE.stop - 10) \ - * self.ENERGY_SLOPE + self.ENERGY_INTERCEPT + r[:] = histo(left * image)[margin:-margin] + r[:] += histo(right * image)[margin-1 : -margin-1] + ret /= histo(left)[margin:-margin] \ + + histo(right)[margin-1 : -margin-1] + data.coords["energy"] = ( + np.arange(self.Y_RANGE.start + margin, self.Y_RANGE.stop - margin) + * self.ENERGY_SLOPE + self.ENERGY_INTERCEPT) data['spectrum'] = (("trainId", "energy"), ret) return data