def test_components_array_dup(agipd_file_tid_high): f = H5File(agipd_file_tid_high, inc_suspect_trains=False) agipd = AGIPD1M(f, modules=[0]) arr = agipd.get_array('image.data', pulses=np.s_[:1]) assert arr.shape == (1, 485, 1, 2, 512, 128) assert arr.dims == ('module', 'train', 'pulse', 'data_gain', 'slow_scan', 'fast_scan') assert list(arr.coords['train'].values[9:11]) == [10009, 10011]
def test_write_virtual_cxi(mock_spb_proc_run, tmpdir): run = RunDirectory(mock_spb_proc_run) det = AGIPD1M(run) test_file = osp.join(str(tmpdir), 'test.cxi') det.write_virtual_cxi(test_file) assert_isfile(test_file) with h5py.File(test_file, 'r') as f: det_grp = f['entry_1/instrument_1/detector_1'] ds = det_grp['data'] assert isinstance(ds, h5py.Dataset) assert ds.is_virtual assert ds.shape[1:] == (16, 512, 128) assert 'axes' in ds.attrs assert len(ds.virtual_sources()) == 16 # Check position of each source file in the modules dimension for src in ds.virtual_sources(): start, _, block, count = src.vspace.get_regular_hyperslab() assert block[1] == 1 assert count[1] == 1 expected_file = 'CORR-R0238-AGIPD{:0>2}-S00000.h5'.format(start[1]) assert osp.basename(src.file_name) == expected_file # Check presence of other datasets assert 'gain' in det_grp assert 'mask' in det_grp assert 'experiment_identifier' in det_grp
def test_write_virtual_cxi_dup(agipd_file_tid_high, tmp_path, caplog): f = H5File(agipd_file_tid_high, inc_suspect_trains=False) agipd = AGIPD1M(f, modules=[0]) cxi_path = tmp_path / 'exc_suspect.cxi' agipd.write_virtual_cxi(str(cxi_path)) assert_isfile(cxi_path) with h5py.File(cxi_path, 'r') as f: assert f['entry_1/data_1/data'].shape == (485 * 64, 16, 2, 512, 128)
def test_get_dask_array_reduced_data(mock_reduced_spb_proc_run): run = RunDirectory(mock_reduced_spb_proc_run) det = AGIPD1M(run) arr = det.get_dask_array('image.data') assert arr.shape[2:] == (512, 128) assert arr.dims == ('module', 'train_pulse', 'dim_0', 'dim_1') np.testing.assert_array_equal(arr.coords['module'], np.arange(16)) assert np.isin(arr.coords['trainId'], np.arange(10000, 10480)).all() assert np.isin(arr.coords['pulseId'], np.arange(0, 20)).all()
def test_write_virtual_cxi_reduced_data(mock_reduced_spb_proc_run, tmpdir): run = RunDirectory(mock_reduced_spb_proc_run) det = AGIPD1M(run) test_file = osp.join(str(tmpdir), 'test.cxi') det.write_virtual_cxi(test_file) assert_isfile(test_file) with h5py.File(test_file, 'r') as f: det_grp = f['entry_1/instrument_1/detector_1'] ds = det_grp['data'] assert ds.shape[1:] == (16, 512, 128)
def test_write_selected_frames_proc(mock_spb_proc_run, tmp_path): run = RunDirectory(mock_spb_proc_run) det = AGIPD1M(run) trains = np.repeat(np.arange(10000, 10010), 3) pulses = np.tile([0, 1, 5], 10) test_file = str(tmp_path / 'sel_frames.h5') det.write_frames(test_file, trains, pulses) assert_isfile(test_file) with H5File(test_file) as f: np.testing.assert_array_equal( f.get_array('SPB_DET_AGIPD1M-1/DET/0CH0:xtdf', 'image.pulseId'), pulses) assert f.instrument_sources == { f'SPB_DET_AGIPD1M-1/DET/{i}CH0:xtdf' for i in range(16) }
def test_get_array_pulse_id_reduced_data(mock_reduced_spb_proc_run): run = RunDirectory(mock_reduced_spb_proc_run) det = AGIPD1M(run.select_trains(by_index[:3])) arr = det.get_array('image.data', pulses=by_id[0]) assert arr.shape == (16, 3, 1, 512, 128) assert (arr.coords['pulse'] == 0).all() arr = det.get_array('image.data', pulses=by_id[:5]) assert (arr.coords['pulse'] < 5).all() # Empty selection arr = det.get_array('image.data', pulses=by_id[:0]) assert arr.shape == (16, 0, 0, 512, 128) arr = det.get_array('image.data', pulses=by_id[5:]) assert (arr.coords['pulse'] >= 5).all() arr = det.get_array('image.data', pulses=by_id[[1, 7, 15, 23]]) assert np.isin(arr.coords['pulse'], [1, 7, 15, 23]).all()
def test_write_selected_frames_proc(mock_spb_proc_run, tmp_path): run = RunDirectory(mock_spb_proc_run) det = AGIPD1M(run) trains = np.repeat(np.arange(10000, 10006), 2) pulses = np.tile([0, 7], 6) test_file = tmp_path / 'sel_frames.h5' det.write_frames(test_file, trains, pulses) assert_isfile(test_file) with H5File(test_file) as f: np.testing.assert_array_equal( f.get_array('SPB_DET_AGIPD1M-1/DET/0CH0:xtdf', 'image.pulseId'), pulses ) assert f.instrument_sources == { f'SPB_DET_AGIPD1M-1/DET/{i}CH0:xtdf' for i in range(16) } # pytest leaves temp files for inspection, but these files are big enough # to be inconvenient, so delete them if the assertions have passed. test_file.unlink()
def test_components_array(agipd_file_flag0): f = H5File(agipd_file_flag0, inc_suspect_trains=False) agipd = AGIPD1M(f, modules=[0]) arr = agipd.get_array('image.data', pulses=np.s_[:1]) assert arr.shape == (1, 485, 1, 2, 512, 128) assert arr.dims == ('module', 'train', 'pulse', 'data_gain', 'slow_scan', 'fast_scan')