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