Skip to content

[ENH] Add PETsurfer to nipype #3437

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 114 commits into from
Apr 21, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
114 commits
Select commit Hold shift + click to select a range
bd0a2f8
Add mri_gtmseg to freesurfer preprocess module
mnoergaard Aug 10, 2021
204ba98
Update mri_glmfit to include pharmacokinetic models
mnoergaard Aug 31, 2021
dbbe6dc
Add petsurfer module
mnoergaard Sep 8, 2021
0d06893
Add arguments to petsurfer.py
mnoergaard Sep 8, 2021
4df2bf6
Update petsurfer.py
mnoergaard Sep 8, 2021
552d6b9
Update petsurfer.py
mnoergaard Sep 8, 2021
7fc4887
Update petsurfer.py
mnoergaard Sep 8, 2021
bf37e28
Update petsurfer.py
mnoergaard Sep 8, 2021
f6e58ed
Update __init__.py
mnoergaard Sep 8, 2021
8c9b00e
Update petsurfer.py
mnoergaard Sep 8, 2021
32ce6ec
Update petsurfer.py
mnoergaard Sep 8, 2021
566c4c6
Update petsurfer.py
mnoergaard Sep 9, 2021
06d2279
Update petsurfer.py
mnoergaard Sep 9, 2021
0e16755
minor updates to petsurfer.py
mnoergaard Oct 4, 2021
4374348
Update docstring for mri_gtmpvc
mnoergaard Oct 4, 2021
2c56ae7
Add output specs for mri_gtmpvc
mnoergaard Oct 6, 2021
f046d55
Update logan function to correct output (bp)
mnoergaard Oct 6, 2021
cd0afae
Update petsurfer.py
mnoergaard Oct 11, 2021
d52ac5c
Update petsurfer.py
mnoergaard Oct 11, 2021
0755948
update petsurfer.py
avneetreen Oct 12, 2021
03656b3
update petsurfer.py
avneetreen Oct 12, 2021
08f9c7c
Merge pull request #1 from avneet14027/add_pet_freesurfer
mnoergaard Oct 25, 2021
5be8307
Add save-yhat flag to MRTM2 class
mnoergaard Oct 25, 2021
d8b90eb
Remove gtmseg part from preprocess.py
mnoergaard Oct 27, 2021
e957416
Update mrtm2 and logan spec
mnoergaard Oct 27, 2021
603c3ef
Add k2prime output to MRTM class
mnoergaard Oct 29, 2021
51fafbf
Add documentation for LoganRef class
mnoergaard Oct 29, 2021
ea8e89d
Update documentation LoganRef class
mnoergaard Oct 29, 2021
2c0e384
os.join --> os.path.join
Nov 19, 2021
b9039d6
Merge branch 'add_pet_freesurfer' into add_pet_freesurfer
mnoergaard Nov 22, 2021
e2a37fa
Merge pull request #2 from avneet14027/add_pet_freesurfer
mnoergaard Nov 22, 2021
c8dea59
[FIX[ syntax
pwighton Nov 28, 2021
ad75db2
Merge pull request #4 from pwighton/add_pet_freesurfer
mnoergaard Nov 29, 2021
2d30c25
Add input file and registration pet2anat in outputs
mnoergaard Dec 12, 2021
f3defbc
Merge branch 'add_pet_freesurfer' of https://github.com/mnoergaard/ni…
mnoergaard Dec 12, 2021
68f31f3
Add registration file to go from PET to anat
mnoergaard Dec 12, 2021
4fee855
Add muller gartner to GTMPVC
mnoergaard Dec 13, 2021
4b0b02f
Add RBV PVC to GTMPVC
mnoergaard Dec 13, 2021
2f8bd52
Add adaptive GTM to mri_gtmpvc class
mnoergaard Jan 13, 2022
0076996
Add output files for yhat and conditional arguments in the GTMPVC class
mnoergaard Mar 11, 2022
acb2a4a
Update params for adaptive GTM
mnoergaard Mar 22, 2022
85cc3de
FIX: Restore surf01.vtk, remove .surf01.vtk.icloud
effigies Mar 30, 2022
c527299
Merge remote-tracking branch 'upstream/master' into add_pet_freesurfer
effigies Mar 30, 2022
9db1d7a
Remove FSVersion = Info.looseversion().vstring from petsurfer.py
mnoergaard Mar 30, 2022
28cd5cc
Add empty ref_tac.dat, tac.nii and timing.dat to nipype/testing/data
mnoergaard Mar 30, 2022
1206659
Merge branch 'add_pet_freesurfer' of https://github.com/mnoergaard/ni…
mnoergaard Mar 30, 2022
79f48c5
Add empty files sub-01_ses-baseline_pet.nii.gz and gtmseg.nii for tes…
mnoergaard Mar 30, 2022
2569fe7
update mrtm command line argument in docstring
mnoergaard Mar 30, 2022
e594206
Update empty nifti files
mnoergaard Mar 30, 2022
e4924b7
Merge branch 'add_pet_freesurfer' of https://github.com/mnoergaard/ni…
mnoergaard Mar 30, 2022
2711bba
TEST: Truncate test file
effigies Apr 3, 2022
b7113ff
Merge remote-tracking branch 'upstream/master' into add_pet_freesurfer
effigies Apr 3, 2022
988c382
STY: black [ignore-rev]
effigies Apr 3, 2022
32446b8
TEST: make specs
effigies Apr 3, 2022
09256ef
TEST: Additional test data files
effigies Apr 3, 2022
e943cdc
FIX: Cleanup some doctests and input traits
effigies Apr 3, 2022
bedde9b
TEST: make specs
effigies Apr 3, 2022
ff36908
update bp to bp_file
mnoergaard Apr 8, 2022
a7f3eaa
remove duplicate of save_yhat_with_noise
mnoergaard Apr 8, 2022
c8e641b
update threads flag in mri_gtmpvc
mnoergaard Apr 8, 2022
ffc1a26
edit name: threads -> num_threads
mnoergaard Apr 8, 2022
d3b27df
update opt_tol
mnoergaard Apr 8, 2022
4fbd1f0
Add no-pvc flag
mnoergaard Apr 8, 2022
d3efa06
RF: Move most PET GLM logic to GLMFit
effigies Apr 8, 2022
ba8128d
FIX: typo regheader
mnoergaard Apr 8, 2022
bd2975e
add xor for reg_file and regheader
mnoergaard Apr 8, 2022
15a6c47
FIX: remove exists=true from output spec
mnoergaard Apr 8, 2022
e26b974
FIX: Additional minor fixes
effigies Apr 8, 2022
55340cf
FIX: Additional minor fixes
effigies Apr 8, 2022
3bbcbaa
minor fix
mnoergaard Apr 8, 2022
02d7e63
Merge branch 'add_pet_freesurfer' of https://github.com/mnoergaard/ni…
mnoergaard Apr 8, 2022
b08d003
update xor for gtmpvc
mnoergaard Apr 8, 2022
abc2cd7
TEST: make specs
effigies Apr 9, 2022
e3f56da
STY: black [ignore-rev]
effigies Apr 9, 2022
2c8e2cd
remove inputmultipath for mrtm1, mrtm2 and logan
mnoergaard Apr 9, 2022
d499679
FIX: Update traits in GLMFit subclasses
effigies Apr 9, 2022
a3675c3
TEST: make specs
effigies Apr 9, 2022
0fb99b2
STY: Cleanup imports
effigies Apr 9, 2022
43b01a4
FIX/TEST: Finish fixing traits
effigies Apr 9, 2022
de58f5f
FIX: Drop initial dot from extensions for generating output filenames
effigies Apr 9, 2022
0f349ca
remove exists=true from pvc_dir
mnoergaard Apr 14, 2022
8c649fe
FIX: update gtm_file to out_file
mnoergaard Apr 14, 2022
27f1eae
FIX: update error_file outputs to f string
mnoergaard Apr 14, 2022
712e0dd
FIX: update estimate_file outputs to f string
mnoergaard Apr 14, 2022
ece09f3
FIX: update path join for reg_pet2anat
mnoergaard Apr 14, 2022
17ecdf1
FIX: simplify expression for outputs and update --save-yhat-full-fov
mnoergaard Apr 14, 2022
8752355
Merge branch 'add_pet_freesurfer' of https://github.com/mnoergaard/ni…
mnoergaard Apr 14, 2022
df6f48b
FIX: fix --save-yhat-with-noise and --save-yhat0
mnoergaard Apr 14, 2022
5f147c1
FIX: rbv requires subject_dir to be specified
mnoergaard Apr 14, 2022
6a73726
FIX: add xor to save-yhat and save-yhat-with-noise
mnoergaard Apr 14, 2022
571f5c7
FIX: Add extra registrations outputs
mnoergaard Apr 14, 2022
f106760
FIX: remove def _format_art for GTMPVC
mnoergaard Apr 15, 2022
7eb046c
FIX: add default to true for subsegwm
mnoergaard Apr 15, 2022
2b8e960
FIX: update tests for gtmpvc
mnoergaard Apr 15, 2022
ff3390b
FIX: fix test iteration 2
mnoergaard Apr 15, 2022
eff6e70
FIX: fix test iteration 3
mnoergaard Apr 15, 2022
d223fbc
STY: black [ignore-rev]
effigies Apr 15, 2022
8dbc7d2
TEST: make specs
effigies Apr 15, 2022
2630b76
FIX: rename ctab to colortable
mnoergaard Apr 19, 2022
0aa1801
FIX: remove gca_color_table from _ctab_inputs
mnoergaard Apr 19, 2022
30a893e
FIX: rename segpvres to tissue_fraction_resolution
mnoergaard Apr 19, 2022
4f2f60b
FIX: update description for rbv to include region-based voxelwise PVC…
mnoergaard Apr 19, 2022
425469e
FIX: update gm flag to include correct input parameters
mnoergaard Apr 19, 2022
1f4e941
FIX: rename ss to steady_state_params
mnoergaard Apr 19, 2022
51e5a79
FIX: change name and trait for opt to enumeration
mnoergaard Apr 19, 2022
5ecbbec
FIX: update _format_arg to accommodate optimization string and output…
mnoergaard Apr 19, 2022
0c0157f
FIX: fix tests for GTMPVC
mnoergaard Apr 19, 2022
7fd8ade
FIX: fix spelling in mg trait GTMPVC
mnoergaard Apr 19, 2022
b9716eb
STY: black [ignore-rev]
effigies Apr 19, 2022
ce20aa7
FIX: Update mapped values for optimization_schema
effigies Apr 19, 2022
b91153f
TEST/FIX: Implement argstr handling for mri_gtmpvc --mg
effigies Apr 19, 2022
acea195
STY: Customary to mark all options in a mandatory mutex group as mand…
effigies Apr 19, 2022
26a5349
TEST: make specs
effigies Apr 19, 2022
06e1193
FIX: update opt_params path
mnoergaard Apr 19, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions nipype/interfaces/freesurfer/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -93,3 +93,7 @@
Paint,
MRICoreg,
)
from .petsurfer import (
GTMSeg,
GTMPVC,
)
64 changes: 50 additions & 14 deletions nipype/interfaces/freesurfer/model.py
Original file line number Diff line number Diff line change
Expand Up @@ -401,6 +401,26 @@ class GLMFitInputSpec(FSTraitedSpec):
synth = traits.Bool(argstr="--synth", desc="replace input with gaussian")
resynth_test = traits.Int(argstr="--resynthtest %d", desc="test GLM by resynthsis")
profile = traits.Int(argstr="--profile %d", desc="niters : test speed")
mrtm1 = traits.Tuple(
File(exists=True),
File(exists=True),
argstr="--mrtm1 %s %s",
desc="RefTac TimeSec : perform MRTM1 kinetic modeling",
)
mrtm2 = traits.Tuple(
File(exists=True),
File(exists=True),
traits.Float,
argstr="--mrtm2 %s %s %f",
desc="RefTac TimeSec k2prime : perform MRTM2 kinetic modeling",
)
logan = traits.Tuple(
File(exists=True),
File(exists=True),
traits.Float,
argstr="--logan %s %s %f",
desc="RefTac TimeSec tstar : perform Logan kinetic modeling",
)
force_perm = traits.Bool(
argstr="--perm-force",
desc="force perumtation test, even when design matrix is not orthog",
Expand All @@ -423,6 +443,9 @@ class GLMFitInputSpec(FSTraitedSpec):
sim_done_file = File(
argstr="--sim-done %s", desc="create file when simulation finished"
)
_ext_xor = ['nii', 'nii_gz']
nii = traits.Bool(argstr='--nii', desc='save outputs as nii', xor=_ext_xor)
nii_gz = traits.Bool(argstr='--nii.gz', desc='save outputs as nii.gz', xor=_ext_xor)


class GLMFitOutputSpec(TraitedSpec):
Expand All @@ -444,6 +467,8 @@ class GLMFitOutputSpec(TraitedSpec):
frame_eigenvectors = File(desc="matrix of frame eigenvectors from residual PCA")
singular_values = File(desc="matrix singular values from residual PCA")
svd_stats_file = File(desc="text file summarizing the residual PCA")
k2p_file = File(desc="estimate of k2p parameter")
bp_file = File(desc="Binding potential estimates")


class GLMFit(FSCommand):
Expand Down Expand Up @@ -478,22 +503,33 @@ def _list_outputs(self):
glmdir = os.path.abspath(self.inputs.glm_dir)
outputs["glm_dir"] = glmdir

if isdefined(self.inputs.nii_gz):
ext = 'nii.gz'
elif isdefined(self.inputs.nii):
ext = 'nii'
else:
ext = 'mgh'

# Assign the output files that always get created
outputs["beta_file"] = os.path.join(glmdir, "beta.mgh")
outputs["error_var_file"] = os.path.join(glmdir, "rvar.mgh")
outputs["error_stddev_file"] = os.path.join(glmdir, "rstd.mgh")
outputs["mask_file"] = os.path.join(glmdir, "mask.mgh")
outputs["beta_file"] = os.path.join(glmdir, f"beta.{ext}")
outputs["error_var_file"] = os.path.join(glmdir, f"rvar.{ext}")
outputs["error_stddev_file"] = os.path.join(glmdir, f"rstd.{ext}")
outputs["mask_file"] = os.path.join(glmdir, f"mask.{ext}")
outputs["fwhm_file"] = os.path.join(glmdir, "fwhm.dat")
outputs["dof_file"] = os.path.join(glmdir, "dof.dat")
# Assign the conditional outputs
if isdefined(self.inputs.save_residual) and self.inputs.save_residual:
outputs["error_file"] = os.path.join(glmdir, "eres.mgh")
if isdefined(self.inputs.save_estimate) and self.inputs.save_estimate:
outputs["estimate_file"] = os.path.join(glmdir, "yhat.mgh")
if self.inputs.save_residual:
outputs["error_file"] = os.path.join(glmdir, f"eres.{ext}")
if self.inputs.save_estimate:
outputs["estimate_file"] = os.path.join(glmdir, f"yhat.{ext}")
if any((self.inputs.mrtm1, self.inputs.mrtm2, self.inputs.logan)):
outputs["bp_file"] = os.path.join(glmdir, f"bp.{ext}")
if self.inputs.mrtm1:
outputs["k2p_file"] = os.path.join(glmdir, "k2prime.dat")

# Get the contrast directory name(s)
contrasts = []
if isdefined(self.inputs.contrast):
contrasts = []
for c in self.inputs.contrast:
if split_filename(c)[2] in [".mat", ".dat", ".mtx", ".con"]:
contrasts.append(split_filename(c)[1])
Expand All @@ -503,19 +539,19 @@ def _list_outputs(self):
contrasts = ["osgm"]

# Add in the contrast images
outputs["sig_file"] = [os.path.join(glmdir, c, "sig.mgh") for c in contrasts]
outputs["ftest_file"] = [os.path.join(glmdir, c, "F.mgh") for c in contrasts]
outputs["sig_file"] = [os.path.join(glmdir, c, f"sig.{ext}") for c in contrasts]
outputs["ftest_file"] = [os.path.join(glmdir, c, f"F.{ext}") for c in contrasts]
outputs["gamma_file"] = [
os.path.join(glmdir, c, "gamma.mgh") for c in contrasts
os.path.join(glmdir, c, f"gamma.{ext}") for c in contrasts
]
outputs["gamma_var_file"] = [
os.path.join(glmdir, c, "gammavar.mgh") for c in contrasts
os.path.join(glmdir, c, f"gammavar.{ext}") for c in contrasts
]

# Add in the PCA results, if relevant
if isdefined(self.inputs.pca) and self.inputs.pca:
pcadir = os.path.join(glmdir, "pca-eres")
outputs["spatial_eigenvectors"] = os.path.join(pcadir, "v.mgh")
outputs["spatial_eigenvectors"] = os.path.join(pcadir, f"v.{ext}")
outputs["frame_eigenvectors"] = os.path.join(pcadir, "u.mtx")
outputs["singluar_values"] = os.path.join(pcadir, "sdiag.mat")
outputs["svd_stats_file"] = os.path.join(pcadir, "stats.dat")
Expand Down
Loading