From c7fb9eed9fd74f43f07c51490635aaee842e99fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Le=20Guyader?= <loic.le.guyader@xfel.eu> Date: Thu, 7 Nov 2019 10:47:49 +0100 Subject: [PATCH] discard DSSC1module saturated shots --- DSSC1module.py | 36 +++++++++++++++++++++++++++++++----- 1 file changed, 31 insertions(+), 5 deletions(-) diff --git a/DSSC1module.py b/DSSC1module.py index 97ac5d8..380e0c9 100644 --- a/DSSC1module.py +++ b/DSSC1module.py @@ -55,6 +55,7 @@ class DSSC1module: self.max_fraction_memory = 0.8 self.Nworker = 10 self.rois = None + self.maxSaturatedPixel = 1 def open_run(self, run_nr, t0=0.0): """ Open a run with karabo-data and prepare the virtual dataset for multiprocessing @@ -98,7 +99,7 @@ class DSSC1module: print(f'Loading mono nrj data') self.nrj = self.run.get_array(tb.mnemonics['nrj']['source'], tb.mnemonics['nrj']['key']) - print(f'Loading daly line data') + print(f'Loading delay line data') try: self.delay_mm = self.run.get_array(tb.mnemonics['PP800_DelayLine']['source'], tb.mnemonics['PP800_DelayLine']['key']) @@ -157,7 +158,8 @@ class DSSC1module: Nworker=self.Nworker, dark_data=dark, rois=rois, - mask=mask + mask=mask, + maxSaturatedPixel=self.maxSaturatedPixel )) timestamp = strftime('%X') @@ -337,6 +339,7 @@ def process_one_module(job): rois = job['rois'] mask = job['mask'] h5fname = job['h5fname'] + maxSaturatedPixel = job['maxSaturatedPixel'] image_path = f"INSTRUMENT/SCS_DET_DSSC1M-1/DET/{module}CH0:xtdf/image/data" npulse_path = f"INDEX/SCS_DET_DSSC1M-1/DET/{module}CH0:xtdf/image/count" @@ -388,9 +391,32 @@ def process_one_module(job): if rois is not None: temp2 = temp.where(mask) for k,v in rois.items(): - val = temp2.isel({'x':slice(v['x'][0], v['x'][1]), - 'y':slice(v['y'][0], v['y'][1])}).sum(dim=['x','y']) - module_data[k] = val + bkg = dark_data.isel({'x':slice(v['x'][0], v['x'][1]), + 'y':slice(v['y'][0], v['y'][1])}) + + im = data.isel({'x':slice(v['x'][0], v['x'][1]), + 'y':slice(v['y'][0], v['y'][1])}) + + smask = mask.isel({'x':slice(v['x'][0], v['x'][1]), + 'y':slice(v['y'][0], v['y'][1])}) + + im = im.where(smask) + + + cim = im - bkg.where(smask) + + val = cim.sum(dim=['x','y']) + + tokeep = (im>254).sum(dim=['x', 'y']) < maxSaturatedPixel + tokeep = tokeep.assign_coords(pulseId = val.coords['pulseId'].values) + todrop = 1-tokeep + + Ndropped = todrop.sum().values + percent_dropped = 100*Ndropped/(n_trains * fpt) + + print(f'Dropped: {Ndropped}, i.e. {percent_dropped:.2f}%') + gval = val.where(tokeep, np.nan) + module_data[k] = gval module_data['dark_corrected_data'] += temp.sum(dim='trainId') module_data['std_data'] += (temp**2).sum(dim='trainId') -- GitLab