diff --git a/nipype/interfaces/freesurfer/model.py b/nipype/interfaces/freesurfer/model.py index 1ca0603144..a7e7e28868 100644 --- a/nipype/interfaces/freesurfer/model.py +++ b/nipype/interfaces/freesurfer/model.py @@ -420,6 +420,14 @@ class GLMFitInputSpec(FSTraitedSpec): argstr="--logan %s %s %f", desc="RefTac TimeSec tstar : perform Logan kinetic modeling", ) + bp_clip_neg = traits.Bool( + argstr="--bp-clip-neg", + desc="set negative BP voxels to zero", + ) + bp_clip_max = traits.Float( + argstr="--bp-clip-max %f", + desc="set BP voxels above max to max", + ) force_perm = traits.Bool( argstr="--perm-force", desc="force perumtation test, even when design matrix is not orthog", diff --git a/nipype/interfaces/freesurfer/petsurfer.py b/nipype/interfaces/freesurfer/petsurfer.py index 7536fac1a2..b6634a58c5 100644 --- a/nipype/interfaces/freesurfer/petsurfer.py +++ b/nipype/interfaces/freesurfer/petsurfer.py @@ -458,10 +458,25 @@ class GTMPVCOutputSpec(TraitedSpec): yhat_with_noise = File( desc="4D PET file with full FOV of signal estimate (yhat) with noise after PVC (smoothed with PSF)", ) + eres = File( + desc="4D PET file of residual error after PVC (smoothed with PSF)", + ) + tissue_fraction = File( + desc="4D PET file of tissue fraction before PVC", + ) + tissue_fraction_psf = File( + desc="4D PET file of tissue fraction after PVC (smoothed with PSF)", + ) + seg = File( + desc="Segmentation file of regions used for PVC", + ) + seg_ctab = File( + desc="Color table file for segmentation file", + ) class GTMPVC(FSCommand): - """create an anatomical segmentation for the geometric transfer matrix (GTM). + """Perform Partial Volume Correction (PVC) to PET Data. Examples -------- @@ -536,6 +551,15 @@ def _list_outputs(self): outputs["gtm_stats"] = os.path.join(pvcdir, "gtm.stats.dat") outputs["reg_pet2anat"] = os.path.join(pvcdir, "aux", "bbpet2anat.lta") outputs["reg_anat2pet"] = os.path.join(pvcdir, "aux", "anat2bbpet.lta") + outputs["eres"] = os.path.join(pvcdir, "eres.nii.gz") + outputs["tissue_fraction"] = os.path.join( + pvcdir, "aux", "tissue.fraction.nii.gz" + ) + outputs["tissue_fraction_psf"] = os.path.join( + pvcdir, "aux", "tissue.fraction.psf.nii.gz" + ) + outputs["seg"] = os.path.join(pvcdir, "aux", "seg.nii.gz") + outputs["seg_ctab"] = os.path.join(pvcdir, "aux", "seg.ctab") # Assign the conditional outputs if self.inputs.save_input: @@ -562,7 +586,7 @@ def _list_outputs(self): return outputs -class MRTMInputSpec(GLMFitInputSpec): +class MRTM1InputSpec(GLMFitInputSpec): mrtm1 = traits.Tuple( File(exists=True), File(exists=True), @@ -572,12 +596,12 @@ class MRTMInputSpec(GLMFitInputSpec): ) -class MRTM(GLMFit): +class MRTM1(GLMFit): """Perform MRTM1 kinetic modeling. Examples -------- - >>> mrtm = MRTM() + >>> mrtm = MRTM1() >>> mrtm.inputs.in_file = 'tac.nii' >>> mrtm.inputs.mrtm1 = ('ref_tac.dat', 'timing.dat') >>> mrtm.inputs.glm_dir = 'mrtm' @@ -585,7 +609,7 @@ class MRTM(GLMFit): 'mri_glmfit --glmdir mrtm --y tac.nii --mrtm1 ref_tac.dat timing.dat' """ - input_spec = MRTMInputSpec + input_spec = MRTM1InputSpec class MRTM2InputSpec(GLMFitInputSpec): @@ -614,7 +638,7 @@ class MRTM2(GLMFit): input_spec = MRTM2InputSpec -class LoganRefInputSpec(GLMFitInputSpec): +class LoganInputSpec(GLMFitInputSpec): logan = traits.Tuple( File(exists=True), File(exists=True), @@ -625,11 +649,11 @@ class LoganRefInputSpec(GLMFitInputSpec): ) -class LoganRef(GLMFit): - """Perform Logan reference kinetic modeling. +class Logan(GLMFit): + """Perform Logan kinetic modeling. Examples -------- - >>> logan = LoganRef() + >>> logan = Logan() >>> logan.inputs.in_file = 'tac.nii' >>> logan.inputs.logan = ('ref_tac.dat', 'timing.dat', 2600) >>> logan.inputs.glm_dir = 'logan' @@ -637,4 +661,4 @@ class LoganRef(GLMFit): 'mri_glmfit --glmdir logan --y tac.nii --logan ref_tac.dat timing.dat 2600' """ - input_spec = LoganRefInputSpec + input_spec = LoganInputSpec diff --git a/nipype/interfaces/freesurfer/tests/test_auto_GLMFit.py b/nipype/interfaces/freesurfer/tests/test_auto_GLMFit.py index a950caa7af..4d62a03be6 100644 --- a/nipype/interfaces/freesurfer/tests/test_auto_GLMFit.py +++ b/nipype/interfaces/freesurfer/tests/test_auto_GLMFit.py @@ -13,6 +13,12 @@ def test_GLMFit_inputs(): args=dict( argstr="%s", ), + bp_clip_max=dict( + argstr="--bp-clip-max %f", + ), + bp_clip_neg=dict( + argstr="--bp-clip-neg", + ), calc_AR1=dict( argstr="--tar1", ), diff --git a/nipype/interfaces/freesurfer/tests/test_auto_GTMPVC.py b/nipype/interfaces/freesurfer/tests/test_auto_GTMPVC.py index 7f7af1cdb4..99c0002be4 100644 --- a/nipype/interfaces/freesurfer/tests/test_auto_GTMPVC.py +++ b/nipype/interfaces/freesurfer/tests/test_auto_GTMPVC.py @@ -207,6 +207,9 @@ def test_GTMPVC_inputs(): def test_GTMPVC_outputs(): output_map = dict( + eres=dict( + extensions=None, + ), gtm_file=dict( extensions=None, ), @@ -256,6 +259,18 @@ def test_GTMPVC_outputs(): reg_rbvpet2anat=dict( extensions=None, ), + seg=dict( + extensions=None, + ), + seg_ctab=dict( + extensions=None, + ), + tissue_fraction=dict( + extensions=None, + ), + tissue_fraction_psf=dict( + extensions=None, + ), yhat=dict( extensions=None, ), diff --git a/nipype/interfaces/freesurfer/tests/test_auto_LoganRef.py b/nipype/interfaces/freesurfer/tests/test_auto_Logan.py similarity index 95% rename from nipype/interfaces/freesurfer/tests/test_auto_LoganRef.py rename to nipype/interfaces/freesurfer/tests/test_auto_Logan.py index c66f460533..34c6dfa6c7 100644 --- a/nipype/interfaces/freesurfer/tests/test_auto_LoganRef.py +++ b/nipype/interfaces/freesurfer/tests/test_auto_Logan.py @@ -1,8 +1,8 @@ # AUTO-GENERATED by tools/checkspecs.py - DO NOT EDIT -from ..petsurfer import LoganRef +from ..petsurfer import Logan -def test_LoganRef_inputs(): +def test_Logan_inputs(): input_map = dict( allow_ill_cond=dict( argstr="--illcond", @@ -13,6 +13,12 @@ def test_LoganRef_inputs(): args=dict( argstr="%s", ), + bp_clip_max=dict( + argstr="--bp-clip-max %f", + ), + bp_clip_neg=dict( + argstr="--bp-clip-neg", + ), calc_AR1=dict( argstr="--tar1", ), @@ -214,14 +220,14 @@ def test_LoganRef_inputs(): xor=("weight_file", "weight_inv", "weight_sqrt"), ), ) - inputs = LoganRef.input_spec() + inputs = Logan.input_spec() for key, metadata in list(input_map.items()): for metakey, value in list(metadata.items()): assert getattr(inputs.traits()[key], metakey) == value -def test_LoganRef_outputs(): +def test_Logan_outputs(): output_map = dict( beta_file=dict( extensions=None, @@ -271,7 +277,7 @@ def test_LoganRef_outputs(): extensions=None, ), ) - outputs = LoganRef.output_spec() + outputs = Logan.output_spec() for key, metadata in list(output_map.items()): for metakey, value in list(metadata.items()): diff --git a/nipype/interfaces/freesurfer/tests/test_auto_MRTM.py b/nipype/interfaces/freesurfer/tests/test_auto_MRTM1.py similarity index 95% rename from nipype/interfaces/freesurfer/tests/test_auto_MRTM.py rename to nipype/interfaces/freesurfer/tests/test_auto_MRTM1.py index 18e1dd6961..1637214b9e 100644 --- a/nipype/interfaces/freesurfer/tests/test_auto_MRTM.py +++ b/nipype/interfaces/freesurfer/tests/test_auto_MRTM1.py @@ -1,8 +1,8 @@ # AUTO-GENERATED by tools/checkspecs.py - DO NOT EDIT -from ..petsurfer import MRTM +from ..petsurfer import MRTM1 -def test_MRTM_inputs(): +def test_MRTM1_inputs(): input_map = dict( allow_ill_cond=dict( argstr="--illcond", @@ -13,6 +13,12 @@ def test_MRTM_inputs(): args=dict( argstr="%s", ), + bp_clip_max=dict( + argstr="--bp-clip-max %f", + ), + bp_clip_neg=dict( + argstr="--bp-clip-neg", + ), calc_AR1=dict( argstr="--tar1", ), @@ -214,14 +220,14 @@ def test_MRTM_inputs(): xor=("weight_file", "weight_inv", "weight_sqrt"), ), ) - inputs = MRTM.input_spec() + inputs = MRTM1.input_spec() for key, metadata in list(input_map.items()): for metakey, value in list(metadata.items()): assert getattr(inputs.traits()[key], metakey) == value -def test_MRTM_outputs(): +def test_MRTM1_outputs(): output_map = dict( beta_file=dict( extensions=None, @@ -271,7 +277,7 @@ def test_MRTM_outputs(): extensions=None, ), ) - outputs = MRTM.output_spec() + outputs = MRTM1.output_spec() for key, metadata in list(output_map.items()): for metakey, value in list(metadata.items()): diff --git a/nipype/interfaces/freesurfer/tests/test_auto_MRTM2.py b/nipype/interfaces/freesurfer/tests/test_auto_MRTM2.py index 71b200a600..dea4ca3a92 100644 --- a/nipype/interfaces/freesurfer/tests/test_auto_MRTM2.py +++ b/nipype/interfaces/freesurfer/tests/test_auto_MRTM2.py @@ -13,6 +13,12 @@ def test_MRTM2_inputs(): args=dict( argstr="%s", ), + bp_clip_max=dict( + argstr="--bp-clip-max %f", + ), + bp_clip_neg=dict( + argstr="--bp-clip-neg", + ), calc_AR1=dict( argstr="--tar1", ), diff --git a/nipype/interfaces/freesurfer/tests/test_auto_OneSampleTTest.py b/nipype/interfaces/freesurfer/tests/test_auto_OneSampleTTest.py index eb199ddc50..51b2f2cd0b 100644 --- a/nipype/interfaces/freesurfer/tests/test_auto_OneSampleTTest.py +++ b/nipype/interfaces/freesurfer/tests/test_auto_OneSampleTTest.py @@ -13,6 +13,12 @@ def test_OneSampleTTest_inputs(): args=dict( argstr="%s", ), + bp_clip_max=dict( + argstr="--bp-clip-max %f", + ), + bp_clip_neg=dict( + argstr="--bp-clip-neg", + ), calc_AR1=dict( argstr="--tar1", ),