def test_load_imgs_from_tree(): # test loading from within fov directories with tempfile.TemporaryDirectory() as temp_dir: fovs, chans, imgs = test_utils.gen_fov_chan_names(num_fovs=3, num_chans=3, return_imgs=True) filelocs, data_xr = test_utils.create_paired_xarray_fovs( temp_dir, fovs, chans, img_shape=(10, 10), delimiter='_', fills=True, sub_dir="TIFs", dtype="int16" ) # check default loading of all files loaded_xr = \ load_utils.load_imgs_from_tree(temp_dir, img_sub_folder="TIFs", dtype="int16") assert loaded_xr.equals(data_xr) # check loading of specific files some_fovs = fovs[:2] some_imgs = imgs[:2] some_chans = chans[:2] loaded_xr = \ load_utils.load_imgs_from_tree(temp_dir, img_sub_folder="TIFs", dtype="int16", fovs=some_fovs, channels=some_imgs) assert loaded_xr.equals(data_xr[:2, :, :, :2]) # check loading w/o file extension loaded_xr = \ load_utils.load_imgs_from_tree(temp_dir, img_sub_folder="TIFs", dtype="int16", channels=some_chans) assert loaded_xr.equals(data_xr[:, :, :, :2], ) # check mixed extension presence loaded_xr = \ load_utils.load_imgs_from_tree(temp_dir, img_sub_folder="TIFs", dtype="int16", channels=[chans[i] if i % 2 else imgs[i] for i in range(3)]) assert loaded_xr.equals(data_xr) with tempfile.TemporaryDirectory() as temp_dir: fovs, chans, imgs = test_utils.gen_fov_chan_names(num_fovs=1, num_chans=2, return_imgs=True) filelocs, data_xr = test_utils.create_paired_xarray_fovs( temp_dir, fovs, chans, img_shape=(10, 10), delimiter='_', fills=True, sub_dir="TIFs", dtype=np.float32 ) with pytest.warns(UserWarning): loaded_xr = \ load_utils.load_imgs_from_tree(temp_dir, img_sub_folder="TIFs", dtype="int16") assert loaded_xr.equals(data_xr) # test swap int16 -> float assert np.issubdtype(loaded_xr.dtype, np.floating)
def test_generate_cell_data_mibitiff_loading(): # is_mibitiff True case, load from mibitiff file structure with tempfile.TemporaryDirectory() as temp_dir: # define 3 fovs and 2 mibitiff_imgs fovs, channels = test_utils.gen_fov_chan_names(3, 2) # define a subset of fovs fovs_subset = fovs[:2] tiff_dir = os.path.join(temp_dir, "mibitiff_inputs") os.mkdir(tiff_dir) test_utils.create_paired_xarray_fovs(base_dir=tiff_dir, fov_names=fovs, channel_names=channels, img_shape=(40, 40), mode='mibitiff', dtype=np.float32) # generate a sample segmentation_mask cell_mask, _ = test_utils.create_test_extraction_data() cell_masks = np.zeros((3, 40, 40, 1), dtype="int16") cell_masks[0, :, :, 0] = cell_mask[0, :, :, 0] cell_masks[1, 5:, 5:, 0] = cell_mask[0, :-5, :-5, 0] cell_masks[2, 10:, 10:, 0] = cell_mask[0, :-10, :-10, 0] segmentation_masks = test_utils.make_labels_xarray( label_data=cell_masks, compartment_names=['whole_cell']) # generate sample norm and arcsinh data for all fovs norm_data, arcsinh_data = marker_quantification.generate_cell_data( segmentation_labels=segmentation_masks, tiff_dir=tiff_dir, img_sub_folder=tiff_dir, is_mibitiff=True, fovs=None, batch_size=2) assert norm_data.shape[0] > 0 and norm_data.shape[1] > 0 assert arcsinh_data.shape[0] > 0 and arcsinh_data.shape[1] > 0 # generate sample norm and arcsinh data for a subset of fovs norm_data, arcsinh_data = marker_quantification.generate_cell_data( segmentation_labels=segmentation_masks, tiff_dir=tiff_dir, img_sub_folder=tiff_dir, is_mibitiff=True, fovs=fovs_subset, batch_size=2) assert norm_data.shape[0] > 0 and norm_data.shape[1] > 0 assert arcsinh_data.shape[0] > 0 and arcsinh_data.shape[1] > 0
def test_split_img_stack(): with tempfile.TemporaryDirectory() as temp_dir: fovs = ['stack_sample'] _, chans, names = test_utils.gen_fov_chan_names(num_fovs=0, num_chans=10, return_imgs=True) stack_list = ["stack_sample.tiff"] stack_dir = os.path.join(temp_dir, fovs[0]) os.mkdir(stack_dir) output_dir = os.path.join(temp_dir, "output_sample") os.mkdir(output_dir) filelocs, data_xr = test_utils.create_paired_xarray_fovs(stack_dir, fovs, chans, img_shape=(128, 128), mode='multitiff') # first test channel_first=False data_utils.split_img_stack(stack_dir, output_dir, stack_list, [0, 1], names[0:2], channels_first=False) assert os.path.exists(os.path.join(output_dir, "stack_sample", "chan0.tiff")) assert os.path.exists(os.path.join(output_dir, "stack_sample", "chan1.tiff")) sample_chan_1 = io.imread(os.path.join(output_dir, "stack_sample", "chan0.tiff")) sample_chan_2 = io.imread(os.path.join(output_dir, "stack_sample", "chan1.tiff")) assert np.array_equal(sample_chan_1, data_xr[0, :, :, 0].values) assert np.array_equal(sample_chan_2, data_xr[0, :, :, 1].values) rmtree(os.path.join(output_dir, 'stack_sample')) # now overwrite old stack_sample.jpg file and test channel_first=True filelocs, data_xr = test_utils.create_paired_xarray_fovs(stack_dir, fovs, chans, img_shape=(128, 128), mode='reverse_multitiff') data_utils.split_img_stack(stack_dir, output_dir, stack_list, [0, 1], names[0:2], channels_first=True) assert os.path.exists(os.path.join(output_dir, "stack_sample", "chan0.tiff")) assert os.path.exists(os.path.join(output_dir, "stack_sample", "chan1.tiff")) sample_chan_1 = io.imread(os.path.join(output_dir, "stack_sample", "chan0.tiff")) sample_chan_2 = io.imread(os.path.join(output_dir, "stack_sample", "chan1.tiff")) assert np.array_equal(sample_chan_1, data_xr[0, :, :, 0].values) assert np.array_equal(sample_chan_2, data_xr[0, :, :, 1].values)
def test_load_imgs_from_mibitiff(): with tempfile.TemporaryDirectory() as temp_dir: # config test environment fovs, channels = test_utils.gen_fov_chan_names(num_fovs=2, num_chans=3, use_delimiter=True) filelocs, data_xr = test_utils.create_paired_xarray_fovs( temp_dir, fovs, channels, img_shape=(10, 10), mode='mibitiff', delimiter='_', fills=True, dtype=np.float32 ) # check unspecified fov loading loaded_xr = load_utils.load_imgs_from_mibitiff(temp_dir, channels=channels, delimiter='_') assert loaded_xr.equals(data_xr) fovnames = [f'{fov}.tiff' for fov in fovs] # check specified fov loading loaded_xr = load_utils.load_imgs_from_mibitiff(temp_dir, mibitiff_files=[fovnames[-1]], channels=channels, delimiter='_') assert loaded_xr.equals(data_xr.loc[[fovs[-1]], :, :, :]) # test automatic all channels loading loaded_xr = load_utils.load_imgs_from_mibitiff(temp_dir, delimiter='_', dtype=np.float32) assert loaded_xr.equals(data_xr) # test delimiter agnosticism loaded_xr = load_utils.load_imgs_from_mibitiff(temp_dir, mibitiff_files=fovnames, channels=channels, delimiter='_', dtype=np.float32) assert loaded_xr.equals(data_xr) assert np.issubdtype(loaded_xr.dtype, np.floating) # test float overwrite with pytest.warns(UserWarning): loaded_xr = load_utils.load_imgs_from_mibitiff(temp_dir, mibitiff_files=[fovnames[-1]], channels=channels, delimiter='_', dtype='int16') assert loaded_xr.equals(data_xr.loc[[fovs[-1]], :, :, :]) assert np.issubdtype(loaded_xr.dtype, np.floating)
def test_load_imgs_from_dir(): # test loading from 'free' directory with tempfile.TemporaryDirectory() as temp_dir: fovs, _ = test_utils.gen_fov_chan_names(num_fovs=3, num_chans=0, use_delimiter=True) filelocs, data_xr = test_utils.create_paired_xarray_fovs(temp_dir, fovs, ['img_data'], img_shape=(10, 10), mode='labels', delimiter='_', dtype=np.float32) # check default loading loaded_xr = \ load_utils.load_imgs_from_dir(temp_dir, delimiter='_', dtype=np.float32) assert loaded_xr.equals(data_xr) # test swap int16 -> float with pytest.warns(UserWarning): loaded_xr = \ load_utils.load_imgs_from_dir(temp_dir, delimiter='_', dtype="int16") assert loaded_xr.equals(data_xr) assert np.issubdtype(loaded_xr.dtype, np.floating)
def test_generate_cell_data_tree_loading(): # is_mibitiff False case, load from directory tree with tempfile.TemporaryDirectory() as temp_dir: # define 3 fovs and 3 imgs per fov fovs, chans = test_utils.gen_fov_chan_names(3, 3) tiff_dir = os.path.join(temp_dir, "single_channel_inputs") img_sub_folder = "TIFs" os.mkdir(tiff_dir) test_utils.create_paired_xarray_fovs(base_dir=tiff_dir, fov_names=fovs, channel_names=chans, img_shape=(40, 40), sub_dir=img_sub_folder, dtype="int16") # define a subset of fovs fovs_subset = fovs[:2] # generate a sample segmentation_mask cell_mask, _ = test_utils.create_test_extraction_data() cell_masks = np.zeros((3, 40, 40, 1), dtype="int16") cell_masks[0, :, :, 0] = cell_mask[0, :, :, 0] cell_masks[1, 5:, 5:, 0] = cell_mask[0, :-5, :-5, 0] cell_masks[2, 10:, 10:, 0] = cell_mask[0, :-10, :-10, 0] segmentation_masks = test_utils.make_labels_xarray( label_data=cell_masks, compartment_names=['whole_cell']) with pytest.raises(ValueError): # specifying fovs not in the original segmentation mask marker_quantification.generate_cell_data( segmentation_labels=segmentation_masks.loc[["fov1"]], tiff_dir=tiff_dir, img_sub_folder=img_sub_folder, is_mibitiff=False, fovs=["fov1", "fov2"], batch_size=5) # generate sample norm and arcsinh data for all fovs norm_data, arcsinh_data = marker_quantification.generate_cell_data( segmentation_labels=segmentation_masks, tiff_dir=tiff_dir, img_sub_folder=img_sub_folder, is_mibitiff=False, fovs=None, batch_size=2) assert norm_data.shape[0] > 0 and norm_data.shape[1] > 0 assert arcsinh_data.shape[0] > 0 and arcsinh_data.shape[1] > 0 # generate sample norm and arcsinh data for a subset of fovs norm_data, arcsinh_data = marker_quantification.generate_cell_data( segmentation_labels=segmentation_masks, tiff_dir=tiff_dir, img_sub_folder=img_sub_folder, is_mibitiff=False, fovs=fovs_subset, batch_size=2) assert norm_data.shape[0] > 0 and norm_data.shape[1] > 0 assert arcsinh_data.shape[0] > 0 and arcsinh_data.shape[1] > 0