Skip to content
Snippets Groups Projects
Commit 0c651870 authored by Martin Teichmann's avatar Martin Teichmann
Browse files

inline integrate into the hRIXS class

parent 829ba34e
No related branches found
No related tags found
1 merge request!231improve the integation code
...@@ -250,24 +250,6 @@ def parabola(x, a, b, c=0): ...@@ -250,24 +250,6 @@ def parabola(x, a, b, c=0):
return (a * x + b) * x + c 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: class hRIXS:
"""The hRIXS analysis, especially curvature correction """The hRIXS analysis, especially curvature correction
...@@ -489,14 +471,26 @@ class hRIXS: ...@@ -489,14 +471,26 @@ class hRIXS:
data = h.integrate(data) # create spectrum by summing pixels data = h.integrate(data) # create spectrum by summing pixels
data.spectrum[0, :].plot() # plot the spectrum of the first image data.spectrum[0, :].plot() # plot the spectrum of the first image
""" """
bins = self.Y_RANGE.stop - self.Y_RANGE.start bins = self.Y_RANGE.stop - self.Y_RANGE.start - 20
ret = np.zeros((len(data["hRIXS_det"]), bins - 20)) ret = np.zeros((len(data["hRIXS_det"]), bins))
for image, r in zip(data["hRIXS_det"], ret): for image, r in zip(data["hRIXS_det"], ret):
if self.USE_DARK: if self.USE_DARK:
image = image - self.dark_image image = image - self.dark_image
r[:] = integrate(image.values[self.X_RANGE, self.Y_RANGE].T, image = image.values[self.X_RANGE, self.Y_RANGE].T
factor=1, range=(10, bins - 10), x = np.arange(image.shape[1])[None, :]
curvature=(self.CURVE_A, self.CURVE_B)) 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( data = data.assign_coords(
energy=np.arange(self.Y_RANGE.start + 10, self.Y_RANGE.stop - 10) energy=np.arange(self.Y_RANGE.start + 10, self.Y_RANGE.stop - 10)
* self.ENERGY_SLOPE + self.ENERGY_INTERCEPT) * self.ENERGY_SLOPE + self.ENERGY_INTERCEPT)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment