diff --git a/qsiprep/interfaces/recon_scalars.py b/qsiprep/interfaces/recon_scalars.py index 07772bf7..c916292b 100644 --- a/qsiprep/interfaces/recon_scalars.py +++ b/qsiprep/interfaces/recon_scalars.py @@ -106,6 +106,7 @@ class _ReconScalarsDataSinkInputSpec(BaseInterfaceInputSpec): base_directory = File() resampled_files = InputMultiObject(File(exists=True)) recon_scalars = InputMultiObject(traits.Any()) + compress = traits.Bool(True, usedefault=True) class ReconScalarsDataSink(SimpleInterface): @@ -114,6 +115,14 @@ class ReconScalarsDataSink(SimpleInterface): def _run_interface(self, runtime): + force_compress = False + force_decompress = False + if isdefined(self.inputs.compress): + if self.inputs.compress: + force_compress = True + else: + force_decompress = True + for recon_scalar in self.inputs.recon_scalars: output_filename = get_recon_output_name( base_dir=self.inputs.base_directory, @@ -123,6 +132,13 @@ def _run_interface(self, runtime): output_bids_entities=recon_scalar["bids"], use_ext=True, ) + + if force_decompress and output_filename.endswith(".gz"): + output_filename = output_filename.rstrip(".gz") + + if force_compress and not output_filename.endswith(".gz"): + output_filename += ".gz" + output_dir = op.dirname(output_filename) os.makedirs(output_dir, exist_ok=True) _copy_any(recon_scalar["path"], output_filename) diff --git a/qsiprep/tests/data/autotrack_outputs.txt b/qsiprep/tests/data/autotrack_outputs.txt index 829043ca..5f5c6bd5 100644 --- a/qsiprep/tests/data/autotrack_outputs.txt +++ b/qsiprep/tests/data/autotrack_outputs.txt @@ -12,8 +12,8 @@ qsirecon qsirecon-DSIStudio qsirecon-DSIStudio/sub-ABCD qsirecon-DSIStudio/sub-ABCD/dwi -qsirecon-DSIStudio/sub-ABCD/dwi/sub-ABCD_acq-10per000_space-T1w_desc-preproc_bundle-Association_ArcuateFasciculusL_streamlines.tck -qsirecon-DSIStudio/sub-ABCD/dwi/sub-ABCD_acq-10per000_space-T1w_desc-preproc_bundle-Association_ArcuateFasciculusR_streamlines.tck +qsirecon-DSIStudio/sub-ABCD/dwi/sub-ABCD_acq-10per000_space-T1w_desc-preproc_bundle-Association_ArcuateFasciculusL_streamlines.tck.gz +qsirecon-DSIStudio/sub-ABCD/dwi/sub-ABCD_acq-10per000_space-T1w_desc-preproc_bundle-Association_ArcuateFasciculusR_streamlines.tck.gz qsirecon-DSIStudio/sub-ABCD/dwi/sub-ABCD_acq-10per000_space-T1w_desc-preproc_bundlestats.csv qsirecon-DSIStudio/sub-ABCD/dwi/sub-ABCD_acq-10per000_space-T1w_desc-preproc_dwimap.fib.gz qsirecon-DSIStudio/sub-ABCD/dwi/sub-ABCD_acq-10per000_space-T1w_desc-preproc_mapping.map.gz diff --git a/qsiprep/tests/data/scalar_mapper_outputs.txt b/qsiprep/tests/data/scalar_mapper_outputs.txt index 88812327..7a20b008 100644 --- a/qsiprep/tests/data/scalar_mapper_outputs.txt +++ b/qsiprep/tests/data/scalar_mapper_outputs.txt @@ -50,8 +50,8 @@ qsirecon-DSIStudio/sub-ABCD/dwi/sub-ABCD_acq-10per000_space-MNI152NLin2009cAsym_ qsirecon-DSIStudio/sub-ABCD/dwi/sub-ABCD_acq-10per000_space-MNI152NLin2009cAsym_desc-preproc_model-tensor_mfp-tyy_dwimap.nii.gz qsirecon-DSIStudio/sub-ABCD/dwi/sub-ABCD_acq-10per000_space-MNI152NLin2009cAsym_desc-preproc_model-tensor_mfp-tyz_dwimap.nii.gz qsirecon-DSIStudio/sub-ABCD/dwi/sub-ABCD_acq-10per000_space-MNI152NLin2009cAsym_desc-preproc_model-tensor_mfp-tzz_dwimap.nii.gz -qsirecon-DSIStudio/sub-ABCD/dwi/sub-ABCD_acq-10per000_space-T1w_desc-preproc_bundle-Association_ArcuateFasciculusL_streamlines.tck -qsirecon-DSIStudio/sub-ABCD/dwi/sub-ABCD_acq-10per000_space-T1w_desc-preproc_bundle-Association_ArcuateFasciculusR_streamlines.tck +qsirecon-DSIStudio/sub-ABCD/dwi/sub-ABCD_acq-10per000_space-T1w_desc-preproc_bundle-Association_ArcuateFasciculusL_streamlines.tck.gz +qsirecon-DSIStudio/sub-ABCD/dwi/sub-ABCD_acq-10per000_space-T1w_desc-preproc_bundle-Association_ArcuateFasciculusR_streamlines.tck.gz qsirecon-DSIStudio/sub-ABCD/dwi/sub-ABCD_acq-10per000_space-T1w_desc-preproc_bundles-DSIStudio_scalarstats.tsv qsirecon-DSIStudio/sub-ABCD/dwi/sub-ABCD_acq-10per000_space-T1w_desc-preproc_bundles-DSIStudio_tdistats.tsv qsirecon-DSIStudio/sub-ABCD/dwi/sub-ABCD_acq-10per000_space-T1w_desc-preproc_bundlestats.csv diff --git a/qsiprep/tests/data/tortoise_recon_outputs.txt b/qsiprep/tests/data/tortoise_recon_outputs.txt index 232a2364..161a3614 100644 --- a/qsiprep/tests/data/tortoise_recon_outputs.txt +++ b/qsiprep/tests/data/tortoise_recon_outputs.txt @@ -12,17 +12,17 @@ qsirecon qsirecon-TORTOISE qsirecon-TORTOISE/sub-ABCD qsirecon-TORTOISE/sub-ABCD/dwi -qsirecon-TORTOISE/sub-ABCD/dwi/sub-ABCD_acq-10per000_space-T1w_desc-preproc_model-mapmri_mdp-NG_dwimap.nii -qsirecon-TORTOISE/sub-ABCD/dwi/sub-ABCD_acq-10per000_space-T1w_desc-preproc_model-mapmri_mdp-NGpar_dwimap.nii -qsirecon-TORTOISE/sub-ABCD/dwi/sub-ABCD_acq-10per000_space-T1w_desc-preproc_model-mapmri_mdp-NGperp_dwimap.nii -qsirecon-TORTOISE/sub-ABCD/dwi/sub-ABCD_acq-10per000_space-T1w_desc-preproc_model-mapmri_mdp-PA_dwimap.nii -qsirecon-TORTOISE/sub-ABCD/dwi/sub-ABCD_acq-10per000_space-T1w_desc-preproc_model-mapmri_mdp-PAth_dwimap.nii -qsirecon-TORTOISE/sub-ABCD/dwi/sub-ABCD_acq-10per000_space-T1w_desc-preproc_model-mapmri_mdp-RTAP_dwimap.nii -qsirecon-TORTOISE/sub-ABCD/dwi/sub-ABCD_acq-10per000_space-T1w_desc-preproc_model-mapmri_mdp-RTOP_dwimap.nii -qsirecon-TORTOISE/sub-ABCD/dwi/sub-ABCD_acq-10per000_space-T1w_desc-preproc_model-mapmri_mdp-RTPP_dwimap.nii -qsirecon-TORTOISE/sub-ABCD/dwi/sub-ABCD_acq-10per000_space-T1w_desc-preproc_model-tensor_mdp-ad_dwimap.nii -qsirecon-TORTOISE/sub-ABCD/dwi/sub-ABCD_acq-10per000_space-T1w_desc-preproc_model-tensor_mdp-fa_dwimap.nii -qsirecon-TORTOISE/sub-ABCD/dwi/sub-ABCD_acq-10per000_space-T1w_desc-preproc_model-tensor_mdp-li_dwimap.nii -qsirecon-TORTOISE/sub-ABCD/dwi/sub-ABCD_acq-10per000_space-T1w_desc-preproc_model-tensor_mdp-rd_dwimap.nii -qsirecon-TORTOISE/sub-ABCD/dwi/sub-ABCD_acq-10per000_space-T1w_desc-preproc_model-tensor_mfp-AM_dwimap.nii +qsirecon-TORTOISE/sub-ABCD/dwi/sub-ABCD_acq-10per000_space-T1w_desc-preproc_model-mapmri_mdp-NG_dwimap.nii.gz +qsirecon-TORTOISE/sub-ABCD/dwi/sub-ABCD_acq-10per000_space-T1w_desc-preproc_model-mapmri_mdp-NGpar_dwimap.nii.gz +qsirecon-TORTOISE/sub-ABCD/dwi/sub-ABCD_acq-10per000_space-T1w_desc-preproc_model-mapmri_mdp-NGperp_dwimap.nii.gz +qsirecon-TORTOISE/sub-ABCD/dwi/sub-ABCD_acq-10per000_space-T1w_desc-preproc_model-mapmri_mdp-PA_dwimap.nii.gz +qsirecon-TORTOISE/sub-ABCD/dwi/sub-ABCD_acq-10per000_space-T1w_desc-preproc_model-mapmri_mdp-PAth_dwimap.nii.gz +qsirecon-TORTOISE/sub-ABCD/dwi/sub-ABCD_acq-10per000_space-T1w_desc-preproc_model-mapmri_mdp-RTAP_dwimap.nii.gz +qsirecon-TORTOISE/sub-ABCD/dwi/sub-ABCD_acq-10per000_space-T1w_desc-preproc_model-mapmri_mdp-RTOP_dwimap.nii.gz +qsirecon-TORTOISE/sub-ABCD/dwi/sub-ABCD_acq-10per000_space-T1w_desc-preproc_model-mapmri_mdp-RTPP_dwimap.nii.gz +qsirecon-TORTOISE/sub-ABCD/dwi/sub-ABCD_acq-10per000_space-T1w_desc-preproc_model-tensor_mdp-ad_dwimap.nii.gz +qsirecon-TORTOISE/sub-ABCD/dwi/sub-ABCD_acq-10per000_space-T1w_desc-preproc_model-tensor_mdp-fa_dwimap.nii.gz +qsirecon-TORTOISE/sub-ABCD/dwi/sub-ABCD_acq-10per000_space-T1w_desc-preproc_model-tensor_mdp-li_dwimap.nii.gz +qsirecon-TORTOISE/sub-ABCD/dwi/sub-ABCD_acq-10per000_space-T1w_desc-preproc_model-tensor_mdp-rd_dwimap.nii.gz +qsirecon-TORTOISE/sub-ABCD/dwi/sub-ABCD_acq-10per000_space-T1w_desc-preproc_model-tensor_mfp-AM_dwimap.nii.gz qsirecon/sub-ABCD diff --git a/qsiprep/workflows/recon/dsi_studio.py b/qsiprep/workflows/recon/dsi_studio.py index fd2b90a3..1f055c53 100644 --- a/qsiprep/workflows/recon/dsi_studio.py +++ b/qsiprep/workflows/recon/dsi_studio.py @@ -331,7 +331,9 @@ def init_dsi_studio_autotrack_wf( # Save tck files of the bundles into the outputs ds_tckfiles = pe.MapNode( - ReconDerivativesDataSink(suffix="streamlines", qsirecon_suffix=qsirecon_suffix), + ReconDerivativesDataSink( + suffix="streamlines", qsirecon_suffix=qsirecon_suffix, compress=True + ), iterfield=["in_file", "bundle"], name="ds_tckfiles", )