From 1aded9dd7b8a871fc59f6194909fb2413388aa1b Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 11 Sep 2025 10:56:05 +0000 Subject: [PATCH 1/3] Initial plan From d0ced191c5be8ee3f31294c2be6897ab5951cc49 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 11 Sep 2025 11:02:40 +0000 Subject: [PATCH 2/3] Add input_spec declarations to first batch of dmri files Co-authored-by: markus-nilsson <17831339+markus-nilsson@users.noreply.github.com> --- dmri/dp_node_dmri_denoise.m | 2 ++ dmri/dp_node_dmri_disco_synb0.m | 3 +++ dmri/dp_node_dmri_divide.m | 3 +++ dmri/dp_node_dmri_dti.m | 5 +++++ dmri/dp_node_dmri_flirt.m | 5 +++++ dmri/dp_node_dmri_flirt_apply.m | 7 +++++++ dmri/dp_node_dmri_mec.m | 5 +++++ dmri/dp_node_dmri_qti.m | 4 ++++ dmri/dp_node_dmri_smooth.m | 3 +++ dmri/dp_node_dmri_subsample.m | 2 ++ dmri/dp_node_dmri_topup2_apply.m | 7 +++++++ dmri/dp_node_dmri_topup2_b0.m | 5 +++++ dmri/dp_node_dmri_xps_from_bval_bvec.m | 3 +++ 13 files changed, 54 insertions(+) diff --git a/dmri/dp_node_dmri_denoise.m b/dmri/dp_node_dmri_denoise.m index f7232d8..e28d0df 100755 --- a/dmri/dp_node_dmri_denoise.m +++ b/dmri/dp_node_dmri_denoise.m @@ -8,6 +8,8 @@ function obj = dp_node_dmri_denoise() obj.input_test = {'dmri_fn', 'xps_fn'}; obj.output_test = {'dmri_fn', 'xps_fn'}; + + obj.input_spec.add('dmri_fn', 'file', 1, 1, 'Diffusion MRI nifti file'); end function output = i2o(obj, input) %#ok diff --git a/dmri/dp_node_dmri_disco_synb0.m b/dmri/dp_node_dmri_disco_synb0.m index cb4687b..b1cbf79 100755 --- a/dmri/dp_node_dmri_disco_synb0.m +++ b/dmri/dp_node_dmri_disco_synb0.m @@ -17,6 +17,9 @@ obj.license_fn = license_fn; obj.input_test = {'dmri_fn', 't1_fn'}; obj.output_test = {'synb0_fn', 'topup_nii_fn'}; + + obj.input_spec.add('dmri_fn', 'file', 1, 1, 'Diffusion MRI nifti file'); + obj.input_spec.add('t1_fn', 'file', 1, 1, 'T1-weighted nifti file'); end % construct names of output files diff --git a/dmri/dp_node_dmri_divide.m b/dmri/dp_node_dmri_divide.m index 9b2dbcc..8ba6dbe 100644 --- a/dmri/dp_node_dmri_divide.m +++ b/dmri/dp_node_dmri_divide.m @@ -14,6 +14,9 @@ obj.suffix = suffix; if (suffix(1) ~= '_'), warning('probably want _suffix'); end + + obj.input_spec.add('dmri_fn', 'file', 1, 1, 'Diffusion MRI nifti file'); + obj.input_spec.add('divisor_fn', 'file', 1, 1, 'Divisor volume nifti file'); end function output = i2o(obj, input) diff --git a/dmri/dp_node_dmri_dti.m b/dmri/dp_node_dmri_dti.m index 5d66866..5c6afa7 100755 --- a/dmri/dp_node_dmri_dti.m +++ b/dmri/dp_node_dmri_dti.m @@ -13,6 +13,11 @@ obj.input_test = {'dmri_fn'}; obj.output_test = {'md_fn', 'fa_fn', 's0_fn', 'fa_col_fn'}; + obj.input_spec.add('dmri_fn', 'file', 1, 1, 'Diffusion MRI nifti file'); + obj.input_spec.add('xps_fn', 'file', 1, 1, 'Experimental parameter set file'); + obj.input_spec.add('mask_fn', 'file', 0, 1, 'Brain mask file (optional)'); + obj.input_spec.add('opt', 'struct', 0, 0, 'Options structure (optional)'); + if (nargin > 0) obj.filter_sigma = filter_sigma; end diff --git a/dmri/dp_node_dmri_flirt.m b/dmri/dp_node_dmri_flirt.m index cff2edb..bc172a9 100755 --- a/dmri/dp_node_dmri_flirt.m +++ b/dmri/dp_node_dmri_flirt.m @@ -8,6 +8,11 @@ function obj = dp_node_dmri_flirt() obj.input_test = {'nii_fn'}; obj.output_test = {'nii_fn'}; + + obj.input_spec.add('fa_fn', 'file', 1, 1, 'Fractional anisotropy map nifti file'); + obj.input_spec.add('target_fn', 'file', 0, 1, 'Target registration template file (optional)'); + obj.input_spec.add('dmri_fn', 'file', 0, 0, 'Diffusion MRI file (optional, passed through)'); + obj.input_spec.add('mask_fn', 'file', 0, 0, 'Brain mask file (optional, passed through)'); end function input = po2i(obj, po) diff --git a/dmri/dp_node_dmri_flirt_apply.m b/dmri/dp_node_dmri_flirt_apply.m index cd0e71b..f682508 100755 --- a/dmri/dp_node_dmri_flirt_apply.m +++ b/dmri/dp_node_dmri_flirt_apply.m @@ -10,6 +10,13 @@ % - mask_fn (optional) methods + + function obj = dp_node_dmri_flirt_apply() + obj.input_spec.add('dmri_fn', 'file', 1, 1, 'Diffusion MRI nifti file'); + obj.input_spec.add('matrix_fn', 'file', 1, 1, 'FLIRT transformation matrix file'); + obj.input_spec.add('xps_fn', 'file', 0, 1, 'Experimental parameter set file (optional)'); + obj.input_spec.add('mask_fn', 'file', 0, 1, 'Brain mask file (optional)'); + end function input = po2i(obj, po) input = po; diff --git a/dmri/dp_node_dmri_mec.m b/dmri/dp_node_dmri_mec.m index 18609af..69e8c94 100755 --- a/dmri/dp_node_dmri_mec.m +++ b/dmri/dp_node_dmri_mec.m @@ -4,6 +4,11 @@ % Corrects for subject motion and scanner-related distortions during diffusion acquisition. methods + + function obj = dp_node_dmri_mec() + obj.input_spec.add('dmri_fn', 'file', 1, 1, 'Diffusion MRI nifti file'); + obj.input_spec.add('elastix_p', 'struct', 0, 0, 'ELASTIX parameters structure (optional)'); + end function input = po2i(obj, po) input = po; diff --git a/dmri/dp_node_dmri_qti.m b/dmri/dp_node_dmri_qti.m index 3a50130..8bb7ff6 100755 --- a/dmri/dp_node_dmri_qti.m +++ b/dmri/dp_node_dmri_qti.m @@ -7,6 +7,10 @@ function obj = dp_node_dmri_qti() obj.output_test = {'mki_fn', 'mka_fn', 'md_fn'}; + + obj.input_spec.add('dmri_fn', 'file', 1, 1, 'Diffusion MRI nifti file'); + obj.input_spec.add('xps_fn', 'file', 1, 1, 'Experimental parameter set file'); + obj.input_spec.add('mask_fn', 'file', 0, 1, 'Brain mask file (optional)'); end diff --git a/dmri/dp_node_dmri_smooth.m b/dmri/dp_node_dmri_smooth.m index c943a6b..cff3efb 100755 --- a/dmri/dp_node_dmri_smooth.m +++ b/dmri/dp_node_dmri_smooth.m @@ -12,6 +12,9 @@ function obj = dp_node_dmri_smooth(filter_sigma) if (nargin > 0), obj.filter_sigma = filter_sigma; end obj.output_test = {'dmri_fn'}; + + obj.input_spec.add('dmri_fn', 'file', 1, 1, 'Diffusion MRI nifti file'); + obj.input_spec.add('mask_fn', 'file', 0, 1, 'Brain mask file (optional)'); end function output = i2o(obj, input) diff --git a/dmri/dp_node_dmri_subsample.m b/dmri/dp_node_dmri_subsample.m index 9a9cb7b..4a5c53e 100755 --- a/dmri/dp_node_dmri_subsample.m +++ b/dmri/dp_node_dmri_subsample.m @@ -15,6 +15,8 @@ obj.suffix = suffix; if (suffix(1) ~= '_'), warning('probably want _suffix'); end + + obj.input_spec.add('dmri_fn', 'file', 1, 1, 'Diffusion MRI nifti file'); end function output = i2o(obj, input) diff --git a/dmri/dp_node_dmri_topup2_apply.m b/dmri/dp_node_dmri_topup2_apply.m index 210a21b..e110a5b 100644 --- a/dmri/dp_node_dmri_topup2_apply.m +++ b/dmri/dp_node_dmri_topup2_apply.m @@ -5,6 +5,13 @@ methods + function obj = dp_node_dmri_topup2_apply() + obj.input_spec.add('ap_dmri_fn', 'file', 1, 1, 'Anterior-posterior diffusion MRI nifti file'); + obj.input_spec.add('pa_dmri_fn', 'file', 1, 1, 'Posterior-anterior diffusion MRI nifti file'); + obj.input_spec.add('topup_data_path', 'path', 1, 1, 'Path to TOPUP data files'); + obj.input_spec.add('topup_spec_fn', 'file', 1, 1, 'TOPUP specification file'); + end + % construct names of output files function output = i2o(obj, input) diff --git a/dmri/dp_node_dmri_topup2_b0.m b/dmri/dp_node_dmri_topup2_b0.m index 1025a6c..31cce34 100644 --- a/dmri/dp_node_dmri_topup2_b0.m +++ b/dmri/dp_node_dmri_topup2_b0.m @@ -7,6 +7,11 @@ function obj = dp_node_dmri_topup2_b0() obj.output_test = {'fieldmap_fn'}; + + obj.input_spec.add('topup_nii_fn', 'file', 1, 1, 'TOPUP input nifti file'); + obj.input_spec.add('topup_spec_fn', 'file', 1, 1, 'TOPUP specification file'); + obj.input_spec.add('topup_cnf', 'string', 0, 0, 'TOPUP configuration name (optional)'); + obj.input_spec.add('topup_opt', 'struct', 0, 0, 'TOPUP options structure (optional)'); end % construct names of output files diff --git a/dmri/dp_node_dmri_xps_from_bval_bvec.m b/dmri/dp_node_dmri_xps_from_bval_bvec.m index 91930a0..0321294 100644 --- a/dmri/dp_node_dmri_xps_from_bval_bvec.m +++ b/dmri/dp_node_dmri_xps_from_bval_bvec.m @@ -11,6 +11,9 @@ function obj = dp_node_dmri_xps_from_bval_bvec(b_delta) obj.b_delta = b_delta; + + obj.input_spec.add('bval_fn', 'file', 1, 1, 'B-value file'); + obj.input_spec.add('bvec_fn', 'file', 1, 1, 'B-vector file'); end function output = execute(obj, input, output) From 4e50953c4e1acc3b4ee1be2f9250a13ab4fab3b8 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Thu, 11 Sep 2025 11:09:26 +0000 Subject: [PATCH 3/3] Complete input_spec implementation for all applicable dmri files Co-authored-by: markus-nilsson <17831339+markus-nilsson@users.noreply.github.com> --- dmri/dp_node_dmri.m | 5 +++++ dmri/dp_node_dmri_md.m | 6 ++++++ dmri/dp_node_dmri_mec_eb.m | 6 ++++++ dmri/dp_node_dmri_merge.m | 5 +++++ dmri/dp_node_dmri_normalise_seq.m | 4 ++++ dmri/dp_node_dmri_powder_average.m | 4 ++++ dmri/dp_node_dmri_qti_pa.m | 4 ++++ dmri/dp_node_dmri_subsample_b0.m | 4 ++++ dmri/dp_node_dmri_topup2_io.m | 7 +++++++ dmri/dp_node_dmri_topup2_prep.m | 8 ++++++++ dmri/dp_node_dmri_topup_apply.m | 5 +++++ dmri/dp_node_dmri_topup_b0.m | 5 +++++ dmri/dp_node_dmri_topup_prep.m | 6 ++++++ dmri/dp_node_dmri_topup_prep_collect.m | 4 ++++ dmri/dp_node_dmri_topup_prep_one.m | 3 +++ dmri/dp_node_dmri_xps.m | 2 ++ dmri/dp_node_dmri_xps_force.m | 3 +++ dmri/dp_node_dmri_xps_from_gdir.m | 3 +++ dmri/dp_node_dmri_xps_from_json.m | 2 ++ dmri/dp_node_dmri_xps_make.m | 5 +++++ dmri/dp_node_make_xps.m | 6 ++++++ 21 files changed, 97 insertions(+) diff --git a/dmri/dp_node_dmri.m b/dmri/dp_node_dmri.m index 8c2eea8..473dbef 100755 --- a/dmri/dp_node_dmri.m +++ b/dmri/dp_node_dmri.m @@ -4,6 +4,11 @@ % and utilities for handling diffusion data, including automatic XPS file handling. methods + + function obj = dp_node_dmri() + obj.input_spec.add('dmri_fn', 'file', 1, 1, 'Diffusion MRI nifti file'); + obj.input_spec.add('xps_fn', 'file', 0, 1, 'Experimental parameter set file (auto-generated if not provided)'); + end function input = po2i(obj, po) input = po; diff --git a/dmri/dp_node_dmri_md.m b/dmri/dp_node_dmri_md.m index 41f0d3a..0927416 100755 --- a/dmri/dp_node_dmri_md.m +++ b/dmri/dp_node_dmri_md.m @@ -16,6 +16,12 @@ end methods + + function obj = dp_node_md() + obj.input_spec.add('nii_fn', 'file', 1, 1, 'Nifti file for MD calculation'); + obj.input_spec.add('bp', 'path', 1, 1, 'Base path'); + obj.input_spec.add('mask_fn', 'file', 0, 1, 'Brain mask file (optional)'); + end function output = i2o(obj, input) diff --git a/dmri/dp_node_dmri_mec_eb.m b/dmri/dp_node_dmri_mec_eb.m index 7575bc1..a488b10 100755 --- a/dmri/dp_node_dmri_mec_eb.m +++ b/dmri/dp_node_dmri_mec_eb.m @@ -5,6 +5,12 @@ % by extrapolating from low b-value data for improved motion correction performance. methods + + function obj = dp_node_dmri_mec_eb() + obj.input_spec.add('dmri_fn', 'file', 1, 1, 'Diffusion MRI nifti file'); + obj.input_spec.add('elastix_p', 'struct', 0, 0, 'ELASTIX parameters structure (optional)'); + obj.input_spec.add('mdm_opt', 'struct', 0, 0, 'MDM options structure (optional)'); + end function input = po2i(obj, po) input = po2i@dp_node_dmri(obj, po); diff --git a/dmri/dp_node_dmri_merge.m b/dmri/dp_node_dmri_merge.m index 06a800c..db0df1c 100755 --- a/dmri/dp_node_dmri_merge.m +++ b/dmri/dp_node_dmri_merge.m @@ -13,6 +13,11 @@ function obj = dp_node_dmri_merge(fields, output_fn) obj.merge_fields = fields; obj.output_fn = output_fn; + + % Add input_spec for the dynamic merge fields + for i = 1:length(fields) + obj.input_spec.add(fields{i}, 'file', 1, 1, sprintf('Input diffusion MRI file %d', i)); + end end function output = i2o(obj, input) diff --git a/dmri/dp_node_dmri_normalise_seq.m b/dmri/dp_node_dmri_normalise_seq.m index 248d2a3..5d67bd8 100644 --- a/dmri/dp_node_dmri_normalise_seq.m +++ b/dmri/dp_node_dmri_normalise_seq.m @@ -7,6 +7,10 @@ function obj = dp_node_dmri_normalise_seq() obj.output_test = {'dmri_fn', 'xps_fn'}; + + obj.input_spec.add('dmri_fn', 'file', 1, 1, 'Diffusion MRI nifti file'); + obj.input_spec.add('xps_fn', 'file', 1, 1, 'Experimental parameter set file'); + obj.input_spec.add('mask_fn', 'file', 1, 1, 'Brain mask file'); end function output = i2o(obj, input) diff --git a/dmri/dp_node_dmri_powder_average.m b/dmri/dp_node_dmri_powder_average.m index 1af3d9a..b221777 100755 --- a/dmri/dp_node_dmri_powder_average.m +++ b/dmri/dp_node_dmri_powder_average.m @@ -7,6 +7,10 @@ function obj = dp_node_dmri_powder_average() obj.output_test = {'dmri_fn'}; + + obj.input_spec.add('dmri_fn', 'file', 1, 1, 'Diffusion MRI nifti file'); + obj.input_spec.add('xps_fn', 'file', 1, 1, 'Experimental parameter set file'); + obj.input_spec.add('mask_fn', 'file', 0, 1, 'Brain mask file (optional)'); end diff --git a/dmri/dp_node_dmri_qti_pa.m b/dmri/dp_node_dmri_qti_pa.m index dd2b674..a4e843d 100755 --- a/dmri/dp_node_dmri_qti_pa.m +++ b/dmri/dp_node_dmri_qti_pa.m @@ -7,6 +7,10 @@ function obj = dp_node_dmri_qti_pa() obj.output_test = {'mki_fn', 'mka_fn', 'md_fn'}; + + obj.input_spec.add('dmri_fn', 'file', 1, 1, 'Diffusion MRI nifti file'); + obj.input_spec.add('xps_fn', 'file', 1, 1, 'Experimental parameter set file'); + obj.input_spec.add('mask_fn', 'file', 0, 1, 'Brain mask file (optional)'); end function output = i2o(obj, input) diff --git a/dmri/dp_node_dmri_subsample_b0.m b/dmri/dp_node_dmri_subsample_b0.m index fa0fc25..6a728d5 100755 --- a/dmri/dp_node_dmri_subsample_b0.m +++ b/dmri/dp_node_dmri_subsample_b0.m @@ -13,6 +13,10 @@ % nii_fn methods + + function obj = dp_node_dmri_subsample_b0() + obj.input_spec.add('dmri_fn', 'file', 1, 1, 'Diffusion MRI nifti file'); + end function output = i2o(obj, input) diff --git a/dmri/dp_node_dmri_topup2_io.m b/dmri/dp_node_dmri_topup2_io.m index 77163d1..491785f 100644 --- a/dmri/dp_node_dmri_topup2_io.m +++ b/dmri/dp_node_dmri_topup2_io.m @@ -13,6 +13,13 @@ 'ap_json_fn', 'pa_json_fn', ... 'ap_xps_fn', 'pa_xps_fn'}; + obj.input_spec.add('ap_dmri_fn', 'file', 1, 1, 'Anterior-posterior diffusion MRI nifti file'); + obj.input_spec.add('pa_dmri_fn', 'file', 1, 1, 'Posterior-anterior diffusion MRI nifti file'); + obj.input_spec.add('ap_json_fn', 'file', 1, 1, 'Anterior-posterior JSON parameter file'); + obj.input_spec.add('pa_json_fn', 'file', 1, 1, 'Posterior-anterior JSON parameter file'); + obj.input_spec.add('ap_xps_fn', 'file', 1, 1, 'AP experimental parameter set file'); + obj.input_spec.add('pa_xps_fn', 'file', 1, 1, 'PA experimental parameter set file'); + % disable the execution obj.get_dpm('execute').do_run_execute = 0; diff --git a/dmri/dp_node_dmri_topup2_prep.m b/dmri/dp_node_dmri_topup2_prep.m index faac3ba..21ca1e0 100644 --- a/dmri/dp_node_dmri_topup2_prep.m +++ b/dmri/dp_node_dmri_topup2_prep.m @@ -4,6 +4,14 @@ % handling. Formats AP/PA acquisitions for the improved TOPUP processing pipeline. methods + + function obj = dp_node_dmri_topup2_prep() + obj.input_spec.add('ap_dmri_fn', 'file', 1, 1, 'Anterior-posterior diffusion MRI nifti file'); + obj.input_spec.add('pa_dmri_fn', 'file', 1, 1, 'Posterior-anterior diffusion MRI nifti file'); + obj.input_spec.add('ap_json_fn', 'file', 1, 1, 'Anterior-posterior JSON parameter file'); + obj.input_spec.add('pa_json_fn', 'file', 1, 1, 'Posterior-anterior JSON parameter file'); + obj.input_spec.add('nii', 'struct', 0, 0, 'Nifti structure (optional)'); + end function output = i2o(~, input) diff --git a/dmri/dp_node_dmri_topup_apply.m b/dmri/dp_node_dmri_topup_apply.m index 55d0722..32eeb91 100755 --- a/dmri/dp_node_dmri_topup_apply.m +++ b/dmri/dp_node_dmri_topup_apply.m @@ -12,6 +12,11 @@ methods function obj = dp_node_dmri_topup_apply(name, suffix) + + obj.input_spec.add('nii_ap_fn', 'file', 0, 1, 'Anterior-posterior nifti file (optional)'); + obj.input_spec.add('nii_pa_fn', 'file', 0, 1, 'Posterior-anterior nifti file (optional)'); + obj.input_spec.add('topup_data_path', 'path', 1, 1, 'Path to TOPUP data files'); + obj.input_spec.add('topup_spec_fn', 'file', 1, 1, 'TOPUP specification file'); if (nargin > 0) diff --git a/dmri/dp_node_dmri_topup_b0.m b/dmri/dp_node_dmri_topup_b0.m index 2b54f2e..254c8fb 100755 --- a/dmri/dp_node_dmri_topup_b0.m +++ b/dmri/dp_node_dmri_topup_b0.m @@ -7,6 +7,11 @@ function obj = dp_node_dmri_topup_b0() obj.output_test = {'fieldmap_fn'}; + + obj.input_spec.add('topup_nii_fn', 'file', 1, 1, 'TOPUP input nifti file'); + obj.input_spec.add('topup_spec_fn', 'file', 1, 1, 'TOPUP specification file'); + obj.input_spec.add('topup_cnf', 'string', 0, 0, 'TOPUP configuration name (optional)'); + obj.input_spec.add('topup_opt', 'struct', 0, 0, 'TOPUP options structure (optional)'); end % construct names of output files diff --git a/dmri/dp_node_dmri_topup_prep.m b/dmri/dp_node_dmri_topup_prep.m index f9fadfe..4bee6fb 100755 --- a/dmri/dp_node_dmri_topup_prep.m +++ b/dmri/dp_node_dmri_topup_prep.m @@ -10,6 +10,12 @@ obj.input_test = {... 'nii_ap_fn', 'nii_pa_fn', ... 'xps_ap_fn', 'xps_pa_fn'}; + + obj.input_spec.add('nii_ap_fn', 'file', 1, 1, 'Anterior-posterior nifti file'); + obj.input_spec.add('nii_pa_fn', 'file', 1, 1, 'Posterior-anterior nifti file'); + obj.input_spec.add('xps_ap_fn', 'file', 0, 1, 'AP experimental parameter set file (auto-generated if not provided)'); + obj.input_spec.add('xps_pa_fn', 'file', 0, 1, 'PA experimental parameter set file (auto-generated if not provided)'); + obj.input_spec.add('nii', 'struct', 0, 0, 'Nifti structure (optional)'); end diff --git a/dmri/dp_node_dmri_topup_prep_collect.m b/dmri/dp_node_dmri_topup_prep_collect.m index d1cefad..dde5fda 100644 --- a/dmri/dp_node_dmri_topup_prep_collect.m +++ b/dmri/dp_node_dmri_topup_prep_collect.m @@ -5,6 +5,10 @@ methods + + function obj = dp_node_dmri_topup_prep_collect() + obj.input_spec.add('nii', 'struct', 0, 0, 'Nifti structure (optional)'); + end function output = i2o(~, input) output.topup_nii_fn = fullfile(input.op, 'topupinput.nii.gz'); diff --git a/dmri/dp_node_dmri_topup_prep_one.m b/dmri/dp_node_dmri_topup_prep_one.m index d3cbddf..b9fd83a 100644 --- a/dmri/dp_node_dmri_topup_prep_one.m +++ b/dmri/dp_node_dmri_topup_prep_one.m @@ -32,6 +32,9 @@ obj.epi_time = time; obj.input_test = {'nii_fn','xps_fn'}; + + obj.input_spec.add('nii_fn', 'file', 1, 1, 'Nifti file'); + obj.input_spec.add('xps_fn', 'file', 1, 1, 'Experimental parameter set file'); end diff --git a/dmri/dp_node_dmri_xps.m b/dmri/dp_node_dmri_xps.m index c856c5f..c24be6b 100755 --- a/dmri/dp_node_dmri_xps.m +++ b/dmri/dp_node_dmri_xps.m @@ -7,6 +7,8 @@ function obj = dp_node_dmri_xps() obj.output_test = {'dmri_fn', 'xps_fn'}; + + obj.input_spec.add('dmri_fn', 'file', 1, 1, 'Diffusion MRI nifti file'); end function output = i2o(obj, input) diff --git a/dmri/dp_node_dmri_xps_force.m b/dmri/dp_node_dmri_xps_force.m index aa6103b..02c64ac 100755 --- a/dmri/dp_node_dmri_xps_force.m +++ b/dmri/dp_node_dmri_xps_force.m @@ -11,6 +11,9 @@ function obj = dp_node_dmri_xps_force(xps) obj.xps = xps; + + % This node forces a specific XPS and doesn't use any input fields + % from the data, so no input_spec needed beyond the base path/op end function output = execute(obj, ~, output) diff --git a/dmri/dp_node_dmri_xps_from_gdir.m b/dmri/dp_node_dmri_xps_from_gdir.m index dd08b47..d0be9f7 100644 --- a/dmri/dp_node_dmri_xps_from_gdir.m +++ b/dmri/dp_node_dmri_xps_from_gdir.m @@ -7,6 +7,9 @@ function obj = dp_node_dmri_xps_from_gdir() obj.input_test = {'dmri_fn'}; + + obj.input_spec.add('dmri_fn', 'file', 1, 1, 'Diffusion MRI nifti file'); + obj.input_spec.add('gdir_fn', 'file', 0, 1, 'Gradient direction file (auto-detected if not provided)'); end function po = po2i(~, po) diff --git a/dmri/dp_node_dmri_xps_from_json.m b/dmri/dp_node_dmri_xps_from_json.m index cf31ccd..5245e15 100755 --- a/dmri/dp_node_dmri_xps_from_json.m +++ b/dmri/dp_node_dmri_xps_from_json.m @@ -15,6 +15,8 @@ function obj = dp_node_dmri_xps_from_json() obj.output_test = {'xps_fn', 'status_file_fn'}; + + obj.input_spec.add('dmri_fn', 'file', 1, 1, 'Diffusion MRI nifti file (with associated JSON file)'); end function output = i2o(obj, input) diff --git a/dmri/dp_node_dmri_xps_make.m b/dmri/dp_node_dmri_xps_make.m index c5bc771..88030dd 100755 --- a/dmri/dp_node_dmri_xps_make.m +++ b/dmri/dp_node_dmri_xps_make.m @@ -9,6 +9,11 @@ function obj = dp_node_dmri_xps_make() obj.input_test = {'dmri_fn'}; + + obj.input_spec.add('dmri_fn', 'file', 1, 1, 'Diffusion MRI nifti file'); + obj.input_spec.add('bval_fn', 'file', 0, 1, 'B-value file (auto-detected if not provided)'); + obj.input_spec.add('bvec_fn', 'file', 0, 1, 'B-vector file (auto-detected if not provided)'); + obj.input_spec.add('id', 'string', 0, 0, 'Subject/session identifier'); end function po = po2i(~, po) diff --git a/dmri/dp_node_make_xps.m b/dmri/dp_node_make_xps.m index ac9d172..d672ff9 100755 --- a/dmri/dp_node_make_xps.m +++ b/dmri/dp_node_make_xps.m @@ -5,6 +5,12 @@ % XXX: Will be removed in future releases methods + + function obj = dp_node_make_xps() + obj = obj@dp_node_dmri_xps_make(); + + obj.input_spec.add('nii_fn', 'file', 1, 1, 'Nifti file (legacy input)'); + end function input = po2i(obj, po) input = po;