Skip to content

Commit

Permalink
Merge pull request #1321 from flatironinstitute/dev
Browse files Browse the repository at this point in the history
Dev->main for release
  • Loading branch information
pgunn authored Apr 3, 2024
2 parents 3cf859e + 269803b commit f6183bc
Showing 1 changed file with 70 additions and 76 deletions.
146 changes: 70 additions & 76 deletions caiman/tests/test_sbx.py
Original file line number Diff line number Diff line change
Expand Up @@ -91,81 +91,75 @@ def test_load_subind():


def test_sbx_to_tif():
try:
tif_file = os.path.join(caiman_datadir(), 'temp', 'sbxtest1.tif')
file_2d = os.path.join(TESTDATA_PATH, '2d_sbx.sbx')
data_2d_from_sbx = cm.load(file_2d)
sbx_utils.sbx_to_tif(file_2d, fileout=tif_file)
data_2d_from_tif = cm.load(tif_file)
npt.assert_array_almost_equal(data_2d_from_sbx, data_2d_from_tif,
err_msg='Data do not match when loaded from .sbx vs. .tif')

tif_file = os.path.join(caiman_datadir(), 'temp', 'sbxtest2.tif')
file_3d = os.path.join(TESTDATA_PATH, '3d_sbx_1.sbx')
data_3d_from_sbx = cm.load(file_3d, is3D=True)
sbx_utils.sbx_to_tif(file_3d, fileout=tif_file)
data_3d_from_tif = cm.load(tif_file, is3D=True)
npt.assert_array_almost_equal(data_3d_from_sbx, data_3d_from_tif,
err_msg='3D data do not match when loaded from .sbx vs. .tif')
# make sure individual planes are not saved as 3D (i.e. RGB)
Y = tifffile.TiffFile(tif_file).series[0]
assert Y.shape == SHAPE_3D, 'Shape of data in tif file is wrong'
if Y[0].shape != SHAPE_3D[2:]:
if Y[0].shape == SHAPE_3D[1:]:
assert False, 'Tif "plane" is 3-dimensional (i.e., has channel dimension)'
else:
assert False, 'Shape of tif plane is wrong'

# with subindices
tif_file = os.path.join(caiman_datadir(), 'temp', 'sbxtest3.tif')
subinds = (slice(0, None, 2), [0, 1, 3], slice(None))
sbx_utils.sbx_to_tif(file_2d, fileout=tif_file, subindices=subinds)
sub_data_from_tif = cm.load(tif_file)
npt.assert_array_almost_equal(data_2d_from_sbx[subinds_to_ix(subinds, data_2d_from_sbx.shape)], sub_data_from_tif)

# with plane
tif_file = os.path.join(caiman_datadir(), 'temp', 'sbxtest4.tif')
sbx_utils.sbx_to_tif(file_3d, fileout=tif_file, plane=0)
plane_data_from_tif = cm.load(tif_file)
npt.assert_array_almost_equal(data_3d_from_sbx[:, :, :, 0], plane_data_from_tif)
except:
assert False
tif_file = os.path.join(caiman_datadir(), 'temp', 'sbxtest1.tif')
file_2d = os.path.join(TESTDATA_PATH, '2d_sbx.sbx')
data_2d_from_sbx = cm.load(file_2d)
sbx_utils.sbx_to_tif(file_2d, fileout=tif_file)
data_2d_from_tif = cm.load(tif_file)
npt.assert_array_almost_equal(data_2d_from_sbx, data_2d_from_tif,
err_msg='Data do not match when loaded from .sbx vs. .tif')

tif_file = os.path.join(caiman_datadir(), 'temp', 'sbxtest2.tif')
file_3d = os.path.join(TESTDATA_PATH, '3d_sbx_1.sbx')
data_3d_from_sbx = cm.load(file_3d, is3D=True)
sbx_utils.sbx_to_tif(file_3d, fileout=tif_file)
data_3d_from_tif = cm.load(tif_file, is3D=True)
npt.assert_array_almost_equal(data_3d_from_sbx, data_3d_from_tif,
err_msg='3D data do not match when loaded from .sbx vs. .tif')
# make sure individual planes are not saved as 3D (i.e. RGB)
Y = tifffile.TiffFile(tif_file).series[0]
assert Y.shape == SHAPE_3D, 'Shape of data in tif file is wrong'
if Y[0].shape != SHAPE_3D[2:]:
if Y[0].shape == SHAPE_3D[1:]:
assert False, 'Tif "plane" is 3-dimensional (i.e., has channel dimension)'
else:
assert False, 'Shape of tif plane is wrong'

# with subindices
tif_file = os.path.join(caiman_datadir(), 'temp', 'sbxtest3.tif')
subinds = (slice(0, None, 2), [0, 1, 3], slice(None))
sbx_utils.sbx_to_tif(file_2d, fileout=tif_file, subindices=subinds)
sub_data_from_tif = cm.load(tif_file)
npt.assert_array_almost_equal(data_2d_from_sbx[subinds_to_ix(subinds, data_2d_from_sbx.shape)], sub_data_from_tif)

# with plane
tif_file = os.path.join(caiman_datadir(), 'temp', 'sbxtest4.tif')
sbx_utils.sbx_to_tif(file_3d, fileout=tif_file, plane=0)
plane_data_from_tif = cm.load(tif_file)
npt.assert_array_almost_equal(data_3d_from_sbx[:, :, :, 0], plane_data_from_tif)

def test_sbx_chain_to_tif():
try:
tif_file = os.path.join(caiman_datadir(), 'temp', 'sbxtest5.tif')
file_3d_1 = os.path.join(TESTDATA_PATH, '3d_sbx_1.sbx')
data_3d_1 = sbx_utils.sbxread(file_3d_1)
file_3d_2 = os.path.join(TESTDATA_PATH, '3d_sbx_2.sbx')
data_3d_2 = sbx_utils.sbxread(file_3d_2)

# normal chain
tif_file = os.path.join(caiman_datadir(), 'temp', 'sbxtest6.tif')
sbx_utils.sbx_chain_to_tif([file_3d_1, file_3d_2], fileout=tif_file)
data_chain_tif = cm.load(tif_file, is3D=True)
data_chain_gt = np.concatenate([data_3d_1, data_3d_2], axis=0)
npt.assert_array_almost_equal(data_chain_tif, data_chain_gt,
err_msg='Tif from chain does not match expected')

# matching subindices
tif_file = os.path.join(caiman_datadir(), 'temp', 'sbxtest7.tif')
sbx_utils.sbx_chain_to_tif([file_3d_1, file_3d_2], fileout=tif_file,
subindices=(slice(None), slice(0, None, 2)))
data_chain_tif = cm.load(tif_file, is3D=True)
data_chain_gt = data_chain_gt[:, ::2]
npt.assert_array_almost_equal(data_chain_tif, data_chain_gt,
err_msg='Tif from chain with subindices does not match expected')

# non-matching subindices with compatible shapes
tif_file = os.path.join(caiman_datadir(), 'temp', 'sbxtest8.tif')
subinds_1 = (slice(None), [0, 1, 3], slice(0, None, 2), [0, 2])
subinds_2 = (slice(1, None), [-4, -2, -1], slice(1, None, 2), [1, 3])
sbx_utils.sbx_chain_to_tif([file_3d_1, file_3d_2], fileout=tif_file,
subindices=[subinds_1, subinds_2])
data_chain_tif = cm.load(tif_file, is3D=True)
data_chain_gt = np.concatenate([data_3d_1[subinds_to_ix(subinds_1, data_3d_1.shape)],
data_3d_2[subinds_to_ix(subinds_2, data_3d_2.shape)]], axis=0)
npt.assert_array_almost_equal(data_chain_tif, data_chain_gt,
err_msg='Tif from chain with non-matching subindices does not match expected')
except:
assert False
tif_file = os.path.join(caiman_datadir(), 'temp', 'sbxtest5.tif')
file_3d_1 = os.path.join(TESTDATA_PATH, '3d_sbx_1.sbx')
data_3d_1 = sbx_utils.sbxread(file_3d_1)
file_3d_2 = os.path.join(TESTDATA_PATH, '3d_sbx_2.sbx')
data_3d_2 = sbx_utils.sbxread(file_3d_2)

# normal chain
tif_file = os.path.join(caiman_datadir(), 'temp', 'sbxtest6.tif')
sbx_utils.sbx_chain_to_tif([file_3d_1, file_3d_2], fileout=tif_file)
data_chain_tif = cm.load(tif_file, is3D=True)
data_chain_gt = np.concatenate([data_3d_1, data_3d_2], axis=0)
npt.assert_array_almost_equal(data_chain_tif, data_chain_gt,
err_msg='Tif from chain does not match expected')

# matching subindices
tif_file = os.path.join(caiman_datadir(), 'temp', 'sbxtest7.tif')
sbx_utils.sbx_chain_to_tif([file_3d_1, file_3d_2], fileout=tif_file,
subindices=(slice(None), slice(0, None, 2)))
data_chain_tif = cm.load(tif_file, is3D=True)
data_chain_gt = data_chain_gt[:, ::2]
npt.assert_array_almost_equal(data_chain_tif, data_chain_gt,
err_msg='Tif from chain with subindices does not match expected')

# non-matching subindices with compatible shapes
tif_file = os.path.join(caiman_datadir(), 'temp', 'sbxtest8.tif')
subinds_1 = (slice(None), [0, 1, 3], slice(0, None, 2), [0, 2])
subinds_2 = (slice(1, None), [-4, -2, -1], slice(1, None, 2), [1, 3])
sbx_utils.sbx_chain_to_tif([file_3d_1, file_3d_2], fileout=tif_file,
subindices=[subinds_1, subinds_2])
data_chain_tif = cm.load(tif_file, is3D=True)
data_chain_gt = np.concatenate([data_3d_1[subinds_to_ix(subinds_1, data_3d_1.shape)],
data_3d_2[subinds_to_ix(subinds_2, data_3d_2.shape)]], axis=0)
npt.assert_array_almost_equal(data_chain_tif, data_chain_gt,
err_msg='Tif from chain with non-matching subindices does not match expected')

0 comments on commit f6183bc

Please sign in to comment.