|
2 | 2 | # vi: set ft=python sts=4 ts=4 sw=4 et:
|
3 | 3 | """Interfaces for handling BIDS-like neuroimaging structures."""
|
4 | 4 |
|
| 5 | +from collections import defaultdict |
5 | 6 | from json import dumps
|
6 | 7 | from pathlib import Path
|
7 | 8 | from shutil import copytree, rmtree
|
|
27 | 28 | LOGGER = logging.getLogger('nipype.interface')
|
28 | 29 |
|
29 | 30 |
|
| 31 | +def _none(): |
| 32 | + return None |
| 33 | + |
| 34 | + |
| 35 | +# Automatically coerce certain suffixes (DerivativesDataSink) |
| 36 | +DEFAULT_DTYPES = defaultdict(_none, ( |
| 37 | + ("mask", "uint8"), |
| 38 | + ("dseg", "int16"), |
| 39 | + ("probseg", "float32")) |
| 40 | +) |
| 41 | + |
| 42 | + |
30 | 43 | class _BIDSBaseInputSpec(BaseInterfaceInputSpec):
|
31 | 44 | bids_dir = traits.Either(
|
32 | 45 | (None, Directory(exists=True)), usedefault=True,
|
@@ -467,7 +480,8 @@ def _run_interface(self, runtime):
|
467 | 480 | self._results['compression'].append(_copy_any(fname, out_file))
|
468 | 481 |
|
469 | 482 | is_nii = out_file.endswith(('.nii', '.nii.gz'))
|
470 |
| - if is_nii and any((self.inputs.check_hdr, self.inputs.data_dtype)): |
| 483 | + data_dtype = self.inputs.data_dtype or DEFAULT_DTYPES[self.inputs.suffix] |
| 484 | + if is_nii and any((self.inputs.check_hdr, data_dtype)): |
471 | 485 | # Do not use mmap; if we need to access the data at all, it will be to
|
472 | 486 | # rewrite, risking a BusError
|
473 | 487 | nii = nb.load(out_file, mmap=False)
|
@@ -497,11 +511,11 @@ def _run_interface(self, runtime):
|
497 | 511 | # Rewrite file with new header
|
498 | 512 | overwrite_header(nii, out_file)
|
499 | 513 |
|
500 |
| - if self.inputs.data_dtype: |
| 514 | + if data_dtype: |
501 | 515 | if self.inputs.check_hdr:
|
502 | 516 | # load updated NIfTI
|
503 | 517 | nii = nb.load(out_file, mmap=False)
|
504 |
| - data_dtype = np.dtype(self.inputs.data_dtype) |
| 518 | + data_dtype = np.dtype(data_dtype) |
505 | 519 | if nii.get_data_dtype() != data_dtype:
|
506 | 520 | nii.set_data_dtype(data_dtype)
|
507 | 521 | nii.to_filename(out_file)
|
|
0 commit comments