diff --git a/src/toolbox_scs/detectors/hrixs.py b/src/toolbox_scs/detectors/hrixs.py index 88aaeeca58c5cfaac81d07cdb85d37047f618774..28d3d88fd049fb6034194a55c2d26f08c551d5c4 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) @@ -354,12 +371,18 @@ class hRIXS: bins = self.BINS hit_x = [] hit_y = [] + hits = [] 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 +394,9 @@ 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]) + hits.append(rc) hy, hx = np.histogram( rc[:, 0], bins=bins, @@ -383,7 +407,9 @@ class hRIXS: energy=np.linspace(self.Y_RANGE.start, self.Y_RANGE.stop, bins) * self.ENERGY_SLOPE + self.ENERGY_INTERCEPT) if return_hits: - return data.assign(xhits=(("trainId"), hit_x), yhits=(("trainId"), hit_y)) + return data.assign(hits=(("trainId"), hits), + xhits=(("trainId"), hit_x), + yhits=(("trainId"), hit_y)) else: return data.assign(spectrum=(("trainId", "energy"), ret))