diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 473a7c37a..c815e7928 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -63,6 +63,7 @@ jobs: with: name: test-coverage-${{ github.run_id }} retention-days: 1 + include-hidden-files: true path: | .coverage .test_reports/ diff --git a/scilpy/tracking/seed.py b/scilpy/tracking/seed.py index 0d0c07002..7116960b6 100644 --- a/scilpy/tracking/seed.py +++ b/scilpy/tracking/seed.py @@ -336,7 +336,7 @@ def init_generator(self, rng_seed, numbers_to_skip): self.generator.random_sample(100000) numbers_to_skip -= 100000 self.generator.random_sample(numbers_to_skip) - sampling_rng_seed = self.generator.random_integers(0, 2**32-1) + sampling_rng_seed = self.generator.randint(0, 2**32-1) self.sampling_generator = np.random.default_rng(sampling_rng_seed) return self.sampling_generator, indices diff --git a/scripts/scil_fibertube_tracking.py b/scripts/scil_fibertube_tracking.py index c2414d2c4..f9a676fb7 100644 --- a/scripts/scil_fibertube_tracking.py +++ b/scripts/scil_fibertube_tracking.py @@ -224,11 +224,20 @@ def main(): our_origin) logging.debug("Instantiating tracker") + max_nbr_seeds = args.nb_seeds_per_fiber * len(centerlines) if args.nb_fibers: - nbr_seeds = args.nb_seeds_per_fiber * args.nb_fibers + if args.nb_fibers > len(centerlines): + raise ValueError("The provided number of seeded fibers exceeds" + + "the number of available fibertubes.") + else: + nbr_seeds = args.nb_seeds_per_fiber * args.nb_fibers else: - nbr_seeds = args.nb_seeds_per_fiber * len(centerlines) + nbr_seeds = max_nbr_seeds + if args.skip and nbr_seeds + args.skip > max_nbr_seeds: + raise ValueError("The number of seeds plus the number of skipped " + + "seeds requires more fibertubes than there are " + + "available.") tracker = Tracker(propagator, fake_mask, seed_generator, nbr_seeds, min_nbr_pts, max_nbr_pts, args.max_invalid_nb_points, 0, diff --git a/scripts/tests/test_fibertube_reconstruction_metrics.py b/scripts/tests/test_fibertube_score_tractogram.py similarity index 57% rename from scripts/tests/test_fibertube_reconstruction_metrics.py rename to scripts/tests/test_fibertube_score_tractogram.py index 36c33aab8..6cc4d9d9d 100644 --- a/scripts/tests/test_fibertube_reconstruction_metrics.py +++ b/scripts/tests/test_fibertube_score_tractogram.py @@ -3,5 +3,5 @@ def test_help_option(script_runner): - ret = script_runner.run('scil_fibertube_reconstruction_metrics.py', '--help') + ret = script_runner.run('scil_fibertube_score_tractogram.py', '--help') assert ret.success diff --git a/scripts/tests/test_fibertube_tracking.py b/scripts/tests/test_fibertube_tracking.py index a6380709c..2c5256503 100644 --- a/scripts/tests/test_fibertube_tracking.py +++ b/scripts/tests/test_fibertube_tracking.py @@ -3,118 +3,77 @@ import os import tempfile -import numpy as np +import nibabel as nib from scilpy import SCILPY_HOME from scilpy.io.fetcher import fetch_data, get_testing_files_dict +from scilpy.io.streamlines import save_tractogram +from dipy.io.stateful_tractogram import StatefulTractogram, Space, Origin # If they already exist, this only takes 5 seconds (check md5sum) fetch_data(get_testing_files_dict(), keys=['tractograms.zip']) tmp_dir = tempfile.TemporaryDirectory() +def init_data(): + streamlines = [[[4., 0., 4.], [4., 4., 8.], [6., 8., 8.], [12., 10., 8.], [4.,6., 6.]], + [[6., 6., 6.], [8., 8., 8.]]] -def test_help_option(script_runner): - ret = script_runner.run('scil_fibertube_tracking.py', '--help') - assert ret.success + in_mask = os.path.join(SCILPY_HOME, 'tracking', + 'seeding_mask.nii.gz') + mask_img = nib.load(in_mask) + sft = StatefulTractogram(streamlines, mask_img, Space.VOX, Origin.NIFTI) + sft.data_per_streamline = { + "diameters": [0.002, 0.001] + } -def test_execution_(script_runner, monkeypatch): - monkeypatch.chdir(os.path.expanduser(tmp_dir.name)) - in_tractogram = os.path.join(SCILPY_HOME, 'tracking', 'local.trk') - in_diameters = 'diameters.txt' - diameters = [0.0012, 0.0024, 0.0018, 0.0043, 0.0017, - 0.0013, 0.0011, 0.0028, 0.0016, 0.0036] * 100 - np.savetxt(in_diameters, diameters) - in_mask = os.path.join(SCILPY_HOME, 'tracking', 'seeding_mask.nii.gz') + save_tractogram(sft, 'tractogram.trk', True) - ret = script_runner.run('scil_fibertube_tracking.py', - in_tractogram, in_diameters, in_mask, - 'tracking.trk', '1', '1', '--nb_seeds_per_fiber', - '1', '--nb_fibers', '1', '-f') +def test_help_option(script_runner): + ret = script_runner.run('scil_fibertube_tracking.py', '--help', + '--min_length', '0') assert ret.success -def test_execution_single_diameter(script_runner, monkeypatch): +def test_execution(script_runner, monkeypatch): monkeypatch.chdir(os.path.expanduser(tmp_dir.name)) - in_tractogram = os.path.join(SCILPY_HOME, 'tracking', 'local.trk') - in_diameters = 'diameters.txt' - diameters = [0.0025] - np.savetxt(in_diameters, diameters) - in_mask = os.path.join(SCILPY_HOME, 'tracking', 'seeding_mask.nii.gz') - + init_data() ret = script_runner.run('scil_fibertube_tracking.py', - in_tractogram, in_diameters, in_mask, - 'tracking.trk', '1', '1', '--nb_seeds_per_fiber', - '1', '--nb_fibers', '1', '--single_diameter', '-f') + 'tractogram.trk', 'tracking.trk', '0.1', '0.3', + '--min_length', '0', '-f') assert ret.success -def test_execution_forward_only(script_runner, monkeypatch): +def test_execution_tracking_rk(script_runner, monkeypatch): monkeypatch.chdir(os.path.expanduser(tmp_dir.name)) - in_tractogram = os.path.join(SCILPY_HOME, 'tracking', 'local.trk') - in_diameters = 'diameters.txt' - diameters = [0.0012, 0.0024, 0.0018, 0.0043, 0.0017, - 0.0013, 0.0011, 0.0028, 0.0016, 0.0036] * 100 - np.savetxt(in_diameters, diameters) - in_mask = os.path.join(SCILPY_HOME, 'tracking', 'seeding_mask.nii.gz') - + init_data() ret = script_runner.run('scil_fibertube_tracking.py', - in_tractogram, in_diameters, in_mask, - 'tracking.trk', '1', '1', '--nb_seeds_per_fiber', - '1', '--nb_fibers', '1', '--forward_only', '-f') + 'tractogram.trk', 'tracking.trk', '0.1', '0.3', + '--rk_order', '2', '--min_length', '0', '-f') assert ret.success -def test_execution_no_compression(script_runner, monkeypatch): +def test_execution_config(script_runner, monkeypatch): monkeypatch.chdir(os.path.expanduser(tmp_dir.name)) - in_tractogram = os.path.join(SCILPY_HOME, 'tracking', 'local.trk') - in_diameters = 'diameters.txt' - diameters = [0.0012, 0.0024, 0.0018, 0.0043, 0.0017, - 0.0013, 0.0011, 0.0028, 0.0016, 0.0036] * 100 - np.savetxt(in_diameters, diameters) - in_mask = os.path.join(SCILPY_HOME, 'tracking', 'seeding_mask.nii.gz') - + init_data() ret = script_runner.run('scil_fibertube_tracking.py', - in_tractogram, in_diameters, in_mask, - 'tracking.trk', '1', '1', '--nb_seeds_per_fiber', - '1', '--nb_fibers', '1', '--do_not_compress', '-f') + 'tractogram.trk', 'tracking.trk', '0.1', '0.3', + '--out_config', 'config.txt', + '--min_length', '0', '-f') assert ret.success -def test_execution_saving(script_runner, monkeypatch): +def test_execution_seeding(script_runner, monkeypatch): monkeypatch.chdir(os.path.expanduser(tmp_dir.name)) - in_tractogram = os.path.join(SCILPY_HOME, 'tracking', 'local.trk') - in_diameters = 'diameters.txt' - diameters = [0.0012, 0.0024, 0.0018, 0.0043, 0.0017, - 0.0013, 0.0011, 0.0028, 0.0016, 0.0036] * 100 - np.savetxt(in_diameters, diameters) - in_mask = os.path.join(SCILPY_HOME, 'tracking', 'seeding_mask.nii.gz') - + init_data() ret = script_runner.run('scil_fibertube_tracking.py', - in_tractogram, in_diameters, in_mask, - 'tracking.trk', '1', '1', '--nb_seeds_per_fiber', - '1', '--nb_fibers', '1', '--save_seeds', - '--save_config', '-f') + 'tractogram.trk', 'tracking.trk', '0.1', '0.3', + '--nb_fibers', '1', '--nb_seeds_per_fiber', '3', + '--skip', '3', '--min_length', '0', '-f') assert ret.success - -def test_execution_shuffle(script_runner, monkeypatch): - monkeypatch.chdir(os.path.expanduser(tmp_dir.name)) - in_tractogram = os.path.join(SCILPY_HOME, 'tracking', 'local.trk') - in_diameters = 'diameters.txt' - diameters = [0.0012, 0.0024, 0.0018, 0.0043, 0.0017, - 0.0013, 0.0011, 0.0028, 0.0016, 0.0036] * 100 - np.savetxt(in_diameters, diameters) - in_mask = os.path.join(SCILPY_HOME, 'tracking', 'seeding_mask.nii.gz') - - ret = script_runner.run('scil_fibertube_tracking.py', - in_tractogram, in_diameters, in_mask, - 'tracking.trk', '1', '1', '--nb_seeds_per_fiber', - '1', '--nb_fibers', '1', '--shuffle', '-f') - - assert ret.success