|
8 | 8 |
|
9 | 9 | import sys
|
10 | 10 | import os
|
| 11 | +import shutil |
11 | 12 | from os.path import (dirname, join as pjoin, abspath, splitext, basename,
|
12 | 13 | exists)
|
13 | 14 | import csv
|
14 | 15 | from glob import glob
|
15 | 16 |
|
16 | 17 | import numpy as np
|
17 | 18 |
|
| 19 | +import nibabel as nib |
18 | 20 | from ..tmpdirs import InTemporaryDirectory
|
19 | 21 | from ..loadsave import load
|
20 | 22 | from ..orientations import flip_axis, aff2axcodes, inv_ornt_aff
|
21 | 23 |
|
22 | 24 | from nose.tools import assert_true, assert_false, assert_equal
|
23 | 25 | from nose import SkipTest
|
24 | 26 |
|
25 |
| -from numpy.testing import assert_almost_equal |
| 27 | +from numpy.testing import assert_almost_equal, assert_array_equal |
26 | 28 |
|
27 | 29 | from .scriptrunner import ScriptRunner
|
28 | 30 | from .nibabel_data import needs_nibabel_data
|
@@ -357,3 +359,92 @@ def test_parrec2nii_with_data():
|
357 | 359 | assert_equal(sorted(csv_keys), ['diffusion b value number',
|
358 | 360 | 'gradient orientation number'])
|
359 | 361 | assert_equal(nlines, 8) # 8 volumes present in DTI.PAR
|
| 362 | + |
| 363 | + |
| 364 | +@script_test |
| 365 | +def test_nib_trk2tck(): |
| 366 | + simple_trk = pjoin(DATA_PATH, "simple.trk") |
| 367 | + standard_trk = pjoin(DATA_PATH, "standard.trk") |
| 368 | + |
| 369 | + with InTemporaryDirectory() as tmpdir: |
| 370 | + # Copy input files to convert. |
| 371 | + shutil.copy(simple_trk, tmpdir) |
| 372 | + shutil.copy(standard_trk, tmpdir) |
| 373 | + simple_trk = pjoin(tmpdir, "simple.trk") |
| 374 | + standard_trk = pjoin(tmpdir, "standard.trk") |
| 375 | + simple_tck = pjoin(tmpdir, "simple.tck") |
| 376 | + standard_tck = pjoin(tmpdir, "standard.tck") |
| 377 | + |
| 378 | + # Convert one file. |
| 379 | + cmd = ["nib-trk2tck", simple_trk] |
| 380 | + code, stdout, stderr = run_command(cmd) |
| 381 | + assert_equal(len(stdout), 0) |
| 382 | + assert_true(os.path.isfile(simple_tck)) |
| 383 | + trk = nib.streamlines.load(simple_trk) |
| 384 | + tck = nib.streamlines.load(simple_tck) |
| 385 | + assert_array_equal(tck.streamlines.data, trk.streamlines.data) |
| 386 | + assert_true(isinstance(tck, nib.streamlines.TckFile)) |
| 387 | + |
| 388 | + # Skip non TRK files. |
| 389 | + cmd = ["nib-trk2tck", simple_tck] |
| 390 | + code, stdout, stderr = run_command(cmd) |
| 391 | + assert_true("Skipping non TRK file" in stdout) |
| 392 | + |
| 393 | + # By default, refuse to overwrite existing output files. |
| 394 | + cmd = ["nib-trk2tck", simple_trk] |
| 395 | + code, stdout, stderr = run_command(cmd) |
| 396 | + assert_true("Skipping existing file" in stdout) |
| 397 | + |
| 398 | + # Convert multiple files and with --force. |
| 399 | + cmd = ["nib-trk2tck", "--force", simple_trk, standard_trk] |
| 400 | + code, stdout, stderr = run_command(cmd) |
| 401 | + assert_equal(len(stdout), 0) |
| 402 | + trk = nib.streamlines.load(standard_trk) |
| 403 | + tck = nib.streamlines.load(standard_tck) |
| 404 | + assert_array_equal(tck.streamlines.data, trk.streamlines.data) |
| 405 | + |
| 406 | + |
| 407 | +@script_test |
| 408 | +def test_nib_tck2trk(): |
| 409 | + anat = pjoin(DATA_PATH, "standard.nii.gz") |
| 410 | + standard_tck = pjoin(DATA_PATH, "standard.tck") |
| 411 | + |
| 412 | + with InTemporaryDirectory() as tmpdir: |
| 413 | + # Copy input file to convert. |
| 414 | + shutil.copy(standard_tck, tmpdir) |
| 415 | + standard_trk = pjoin(tmpdir, "standard.trk") |
| 416 | + standard_tck = pjoin(tmpdir, "standard.tck") |
| 417 | + |
| 418 | + # Anatomical image not found as first argument. |
| 419 | + cmd = ["nib-tck2trk", standard_tck, anat] |
| 420 | + code, stdout, stderr = run_command(cmd, check_code=False) |
| 421 | + assert_equal(code, 2) # Parser error. |
| 422 | + assert_true("Expecting anatomical image as first agument" in stderr) |
| 423 | + |
| 424 | + # Convert one file. |
| 425 | + cmd = ["nib-tck2trk", anat, standard_tck] |
| 426 | + code, stdout, stderr = run_command(cmd) |
| 427 | + assert_equal(len(stdout), 0) |
| 428 | + assert_true(os.path.isfile(standard_trk)) |
| 429 | + tck = nib.streamlines.load(standard_tck) |
| 430 | + trk = nib.streamlines.load(standard_trk) |
| 431 | + assert_array_equal(trk.streamlines.data, tck.streamlines.data) |
| 432 | + assert_true(isinstance(trk, nib.streamlines.TrkFile)) |
| 433 | + |
| 434 | + # Skip non TCK files. |
| 435 | + cmd = ["nib-tck2trk", anat, standard_trk] |
| 436 | + code, stdout, stderr = run_command(cmd) |
| 437 | + assert_true("Skipping non TCK file" in stdout) |
| 438 | + |
| 439 | + # By default, refuse to overwrite existing output files. |
| 440 | + cmd = ["nib-tck2trk", anat, standard_tck] |
| 441 | + code, stdout, stderr = run_command(cmd) |
| 442 | + assert_true("Skipping existing file" in stdout) |
| 443 | + |
| 444 | + # Convert multiple files and with --force. |
| 445 | + cmd = ["nib-tck2trk", "--force", anat, standard_tck, standard_tck] |
| 446 | + code, stdout, stderr = run_command(cmd) |
| 447 | + assert_equal(len(stdout), 0) |
| 448 | + tck = nib.streamlines.load(standard_tck) |
| 449 | + trk = nib.streamlines.load(standard_trk) |
| 450 | + assert_array_equal(tck.streamlines.data, trk.streamlines.data) |
0 commit comments