From f68b7f7528b7b97e61bd4215c9516ae87a66241d Mon Sep 17 00:00:00 2001 From: Hampus Wikmark Kreuger <hampus.wikmark@physics.uu.se> Date: Mon, 30 May 2022 17:19:22 +0200 Subject: [PATCH] Load_dark optionally generates a mask to filter bad pixels --- src/toolbox_scs/detectors/hrixs.py | 36 ++++++++++++++++++++++++------ 1 file changed, 29 insertions(+), 7 deletions(-) diff --git a/src/toolbox_scs/detectors/hrixs.py b/src/toolbox_scs/detectors/hrixs.py index 88aaeec..8af3c81 100644 --- a/src/toolbox_scs/detectors/hrixs.py +++ b/src/toolbox_scs/detectors/hrixs.py @@ -295,7 +295,13 @@ class hRIXS: BINS = abs(np.subtract(*RANGE)) * FACTOR METHOD = 'centroid' # ['centroid', 'integral'] + + # Dark image and mask treatment USE_DARK = False + USE_DARK_MASK = False + DARK_MASK_THRESHOLD = 100 + MASK_AVG_X = np.s_[1850:2000] + MASK_AVG_Y = np.s_[500:1500] ENERGY_INTERCEPT = 0 ENERGY_SLOPE = 1 @@ -322,7 +328,10 @@ class hRIXS: return data - def load_dark(self, runNB, proposal=None): + def load_dark(self, runNB, proposal=None, use_dark=True, mask=True, + mask_threshold=None): + if mask_threshold == None: + mask_threshold = self.DARK_MASK_THRESHOLD try: # Checks to see if runNB can be iterated over (is list-like) data_list = [] @@ -334,7 +343,15 @@ class hRIXS: data = self.from_run(runNB, proposal) self.dark_image = data['hRIXS_det'].mean(dim='trainId') self.dark_im_array = self.dark_image.to_numpy() - self.USE_DARK = True + if use_dark: + self.USE_DARK = True + if mask: + dark_avg = np.mean(self.dark_im_array[self.MASK_AVG_Y, + self.MASK_AVG_X], (0, 1)) + self.dark_mask = np.abs(self.dark_im_array - dark_avg) > mask_threshold + self.dark_im_array_m = np.array(self.dark_im_array) + self.dark_im_array_m[self.dark_mask] = dark_avg + self.USE_DARK_MASK = True def find_curvature(self, runNB, proposal=None, plot=True, args=None, **kwargs): data = self.from_run(runNB, proposal) @@ -356,10 +373,15 @@ class hRIXS: hit_y = [] ret = np.zeros((len(data["hRIXS_det"]), bins)) for image, r in zip(data["hRIXS_det"], ret): - if self.USE_DARK: - use_image = image.to_numpy() - self.dark_im_array + use_image = image.to_numpy() + if self.USE_DARK_MASK: + use_image[self.dark_mask] = np.mean(use_image[self.MASK_AVG_Y, + self.MASK_AVG_X], (0, 1)) + if self.USE_DARK: + use_image = use_image - self.dark_im_array_m else: - use_image = image.to_numpy() + if self.USE_DARK: + use_image = use_image - self.dark_im_array c = centroid( use_image[self.X_RANGE, self.Y_RANGE].T, threshold=self.THRESHOLD, @@ -371,8 +393,8 @@ class hRIXS: rc = np.array(c) if return_hits: - hit_x.append(rc[:,0]) - hit_y.append(rc[:,1]) + hit_x.append(rc[:, 0]) + hit_y.append(rc[:, 1]) hy, hx = np.histogram( rc[:, 0], bins=bins, -- GitLab