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