From 0c6518707d66550ef7be2e8aa43f1082f2b0fd41 Mon Sep 17 00:00:00 2001 From: Martin Teichmann <martin.teichmann@xfel.eu> Date: Thu, 8 Dec 2022 11:45:59 +0100 Subject: [PATCH] inline integrate into the hRIXS class --- src/toolbox_scs/detectors/hrixs.py | 40 +++++++++++++----------------- 1 file changed, 17 insertions(+), 23 deletions(-) diff --git a/src/toolbox_scs/detectors/hrixs.py b/src/toolbox_scs/detectors/hrixs.py index cb8c8f2..c143833 100644 --- a/src/toolbox_scs/detectors/hrixs.py +++ b/src/toolbox_scs/detectors/hrixs.py @@ -250,24 +250,6 @@ def parabola(x, a, b, c=0): return (a * x + b) * x + c -def integrate(image, factor=FACTOR, range=RANGE, curvature=(CURVE_A, CURVE_B)): - x = np.arange(image.shape[1])[None, :] - y = np.arange(image.shape[0])[:, None] - ys = factor * (y - parabola(x, curvature[1], curvature[0])) - ysf = np.floor(ys) - rang = (factor * range[0], factor * range[1]) - bins = rang[1] - rang[0] - lhy, lhx = np.histogram(ysf.ravel(), bins=bins, range=rang, - weights=((ys - ysf) * image).ravel()) - rhy, rhx = np.histogram((ysf + 1).ravel(), bins=bins, range=rang, - weights=(((ysf + 1) - ys) * image).ravel()) - lvy, lvx = np.histogram(ysf.ravel(), bins=bins, range=rang, - weights=(ys - ysf).ravel()) - rvy, rvx = np.histogram((ysf + 1).ravel(), bins=bins, range=rang, - weights=((ysf + 1) - ys).ravel()) - return (lhy + rhy) / (lvy + rvy) - - class hRIXS: """The hRIXS analysis, especially curvature correction @@ -489,14 +471,26 @@ class hRIXS: data = h.integrate(data) # create spectrum by summing pixels 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)) + bins = self.Y_RANGE.stop - self.Y_RANGE.start - 20 + ret = np.zeros((len(data["hRIXS_det"]), bins)) for image, r in zip(data["hRIXS_det"], ret): if self.USE_DARK: image = image - self.dark_image - r[:] = integrate(image.values[self.X_RANGE, self.Y_RANGE].T, - factor=1, range=(10, bins - 10), - curvature=(self.CURVE_A, self.CURVE_B)) + image = image.values[self.X_RANGE, self.Y_RANGE].T + x = np.arange(image.shape[1])[None, :] + y = np.arange(image.shape[0])[:, None] + ys = (y - parabola(x, self.CURVE_B, self.CURVE_A)) + ysf = np.floor(ys) + rang = (10, bins + 10) + lhy, lhx = np.histogram(ysf.ravel(), bins=bins, range=rang, + weights=((ys - ysf) * image).ravel()) + rhy, rhx = np.histogram((ysf + 1).ravel(), bins=bins, range=rang, + weights=(((ysf + 1) - ys) * image).ravel()) + lvy, lvx = np.histogram(ysf.ravel(), bins=bins, range=rang, + weights=(ys - ysf).ravel()) + rvy, rvx = np.histogram((ysf + 1).ravel(), bins=bins, range=rang, + weights=((ysf + 1) - ys).ravel()) + r[:] = (lhy + rhy) / (lvy + rvy) data = data.assign_coords( energy=np.arange(self.Y_RANGE.start + 10, self.Y_RANGE.stop - 10) * self.ENERGY_SLOPE + self.ENERGY_INTERCEPT) -- GitLab