diff --git a/src/toolbox_scs/detectors/dssc_misc.py b/src/toolbox_scs/detectors/dssc_misc.py index 33ff3019522f62216c223d0a5b62556f1c58a043..cd7899438c7e1b7498fe22e40d4454c06e91b302 100644 --- a/src/toolbox_scs/detectors/dssc_misc.py +++ b/src/toolbox_scs/detectors/dssc_misc.py @@ -184,24 +184,33 @@ def load_mask(fname): return mask -def substract_dark(): - #for var in ['pumped', 'unpumped']: - # image[var] = (image[var] - dark[var].values) - pass - - -def normalize_binned_data(): - # XGM with darks - #im_pumped = (image.pumped - image.pumped_dark) / image.xgm_pumped - #im_unpumped = (image.unpumped - image.unpumped_dark) / image.xgm_unpumped - # TIM with darks - # im_pumped = (image.pumped - image.pumped_dark) / (-image.tim_pumped) - #im_unpumped = (image.unpumped - image.unpumped_dark) / \ - # (-image.tim_unpumped) - # No normalization - #im_pumped = (image.pumped - image.pumped_dark) - #im_unpumped = (image.unpumped - image.unpumped_dark) - # XGM no darks - # im_pumped = (image.pumped) / image.xgm_pumped - # im_unpumped = (image.unpumped) / image.xgm_unpumped - pass +def substract_dark(self, data, dark, keys=['pumped', 'pumped']): + """ + Substract dark image from binned processed images + + Parameters + ---------- + data: xarray.DataArray + processed data + dark: xarray.DataArray + processed dark run corresponding to data + key: str + name of the dataset to be accessed + """ + return (data[keys[0]] - dark[keys[1]].values) + + +def normalize_binned_data(self, data, norm, keys=['pumped', 'pumped']): + """ + Divide processed images + + Parameters + ---------- + data: xarray.DataArray + processed data + dark: xarray.DataArray + processed dark run corresponding to data + key: str + name of the dataset to be accessed + """ + return data[keys[0]] / norm[keys[1]] diff --git a/src/toolbox_scs/test/test_dssc_cls.py b/src/toolbox_scs/test/test_dssc_cls.py index 74c92c3e861a9cae3e741df483495cbd96571e1a..6bec4772b0607d52bf5b2357f28b263d8653b567 100644 --- a/src/toolbox_scs/test/test_dssc_cls.py +++ b/src/toolbox_scs/test/test_dssc_cls.py @@ -61,15 +61,15 @@ class TestDSSC(unittest.TestCase): 'framepattern': ['pumped', 'unpumped']} # normal - run235 = tbdet.DSSC(2212, 235) + run235 = tbdet.DSSCBinner(2212, 235) del(run235) - run235 = tbdet.DSSC(2212, 235, is_dark=False) - run235 = tbdet.DSSC(2212, 235, is_dark=False, **params) - self.assertEqual(run235.bin_variable.values[0], 7585.5) + run235 = tbdet.DSSCBinner(2212, 235, is_dark=False) + run235 = tbdet.DSSCBinner(2212, 235, is_dark=False, **params) + self.assertEqual(run235.bins.values[0], 7585.5) # expected fails with self.assertRaises(FileNotFoundError) as cm: - run235 = tbdet.DSSC(2212, 2354) + run235 = tbdet.DSSCBinner(2212, 2354) err_msg = "[Errno 2] No such file or directory: " \ "'/gpfs/exfel/exp/SCS/201901/p002212/raw/r2354'" self.assertEqual(str(cm.exception), err_msg) @@ -77,8 +77,9 @@ class TestDSSC(unittest.TestCase): def test_tmpfiles(self): params = {'bin_variable_name': 'PP800_PhaseShifter', 'framepattern': ['pumped', 'unpumped']} - run235 = tbdet.DSSC(2212, 235, is_dark=False, **params) - self.assertEqual(run235.scanfile, './tmp/scan.h5') + run235 = tbdet.DSSCBinner(2212, 235, + use_xgm=True, is_dark=False, **params) + self.assertEqual(run235.binfile, './tmp/scan.h5') self.assertTrue(os.path.isfile('./tmp/mask.h5')) def test_binning(self): @@ -86,11 +87,11 @@ class TestDSSC(unittest.TestCase): 'is_dark': True, 'framepattern': ['pumped', 'unpumped']} - testrun = tbdet.DSSC(2212, 232, **params) + testrun = tbdet.DSSCBinner(2212, 232, **params) mod_list = [0,1] - data = testrun.bin_data(use_joblib=False, process_modules=mod_list) + data = testrun.bin_data(use_joblib=False, modules=mod_list) self.assertEqual(data.run, 232) - data = testrun.bin_data(use_joblib=True, process_modules=mod_list) + data = testrun.bin_data(use_joblib=True, modules=mod_list) self.assertEqual(data.run, 232) diff --git a/src/toolbox_scs/test/test_dssc_methods.py b/src/toolbox_scs/test/test_dssc_methods.py index b5db1d8ba0a7c396349e7ce3791b9efe73ee5d5e..d7af27ed4943c06a9404ee4dc77560991303dca2 100644 --- a/src/toolbox_scs/test/test_dssc_methods.py +++ b/src/toolbox_scs/test/test_dssc_methods.py @@ -29,9 +29,6 @@ suites = {"metafunctions": ( ), "image-processing": ( "test_info", - "test_calcindices", - "test_createpulsemask", - "test_loadmergechunk", "test_processmodule", ), "intra-train-processing": ( @@ -81,7 +78,7 @@ class TestDSSC(unittest.TestCase): cls._run = tb.load_run(cls._proposal, cls._run_nr, include='*DA*') - cls._scan_variable = tb.load_binned_array(cls._run, + cls._scan_variable = tb.get_binned_array(cls._run, cls._scan_variable_name, cls._stepsize) cls._scan_variable.to_netcdf(cls._scanfile, @@ -181,10 +178,16 @@ class TestDSSC(unittest.TestCase): def test_processmodule(self): cls = self.__class__ max_GB = 300 - chunksize = int(max_GB * 128 // cls._fpt) + r_nb = 232 + info = tbdet.load_dssc_info(cls._proposal, r_nb) + fpt = info['frames_per_train'] + binfile = './tmp/scan.h5' + framepattern = ['pumped', 'unpumped'] + chunksize = int(max_GB * 128 // fpt) chunksize = min(512, chunksize) print('processing', chunksize, 'trains per chunk') + jobs = [] for m in range(2): jobs.append(dict( @@ -192,9 +195,8 @@ class TestDSSC(unittest.TestCase): run_nr=cls._run_nr, module=m, chunksize=chunksize, - binfile=cls._scanfile, - framepattern=cls._framepattern, - maskfile=None if cls._is_dark else cls._maskfile, + binfile=binfile, + framepattern=framepattern )) print(f'start processing modules:', strftime('%X')) @@ -229,12 +231,12 @@ class TestDSSC(unittest.TestCase): print(f'start processing modules:', strftime('%X')) with multiprocessing.Pool(16) as pool: - module_data = pool.map(tbdet.process_intra_train, jobs) + module_data = pool.map(tbdet.sum_trains_multipr, jobs) print('finished processing modules:', strftime('%X')) self.assertIsNotNone(module_data) - + def test_storage(self): cls = self.__class__ diff --git a/src/toolbox_scs/test/test_top_level.py b/src/toolbox_scs/test/test_top_level.py index e1b81d2948011f4434999b38d77fb95d94739673..76db5e98fac29513879bffe278fc2787f7bd15e7 100644 --- a/src/toolbox_scs/test/test_top_level.py +++ b/src/toolbox_scs/test/test_top_level.py @@ -21,7 +21,7 @@ suites = {"packaging": ( "test_load", "test_openrun", "test_openrunpath", - "test_loadscanvariable", + "test_loadbinnedarray", ) } @@ -83,18 +83,18 @@ class TestToolbox(unittest.TestCase): src = 'SCS_DET_DSSC1M-1/DET/0CH0:xtdf' self.assertTrue(src in run.all_sources) - def test_loadscanvariable(self): + def test_loadbinnedarray(self): cls = self.__class__ # Normal use mnemonic = 'PP800_PhaseShifter' - scan_variable = tb.load_scan_variable(cls._ed_run, mnemonic, 0.5) + scan_variable = tb.get_binned_array(cls._ed_run, mnemonic, 0.5) self.assertTrue = (scan_variable) # unknown mnemonic mnemonic = 'blabla' with self.assertRaises(ToolBoxValueError) as cm: - scan_variable = tb.load_scan_variable(cls._ed_run, mnemonic, 0.5) + scan_variable = tb.get_binned_array(cls._ed_run, mnemonic, 0.5) excp = cm.exception self.assertEqual(excp.value, mnemonic)