PrevPrevious commit
Next Next commit
Update cifti.py
add the following nipype interfaces
[x] wb_command  -cifti-correlation
[x] wb_command -cifti-parcellate
[x] "wb_command  -cifti-separate
  • Loading branch information
@a3sha2
a3sha2 committedFeb 21, 2021
commit c2022c8b73e79b51f9fcfa18a4ca49380e037a88
Original file line numberDiff line numberDiff line change
Expand Up@@ -154,3 +154,275 @@ class CiftiSmooth(WBCommand):
input_spec = CiftiSmoothInputSpec
output_spec = CiftiSmoothOutputSpec
_cmd = "wb_command -cifti-smoothing"





class CiftiCorrelationInputSpec(CommandLineInputSpec):
in_file = File(
exists=True,
mandatory=True,
argstr="%s ",
position=0,
desc="The input ptseries or dense series",
)
out_file = File(
name_source=["in_file"],
name_template="correlation_matrix_%s.nii",
keep_extension=True,
argstr=" %s",
position=1,
desc="The output CIFTI",
)

roi_override = traits.Bool(
exists=True,
argstr="-roi-override %s ",
position=2,
desc=" perform correlation from a subset of rows to all rows",
)

left_roi = File(
exists=True,
position=3,
argstr="-left-roi %s",
desc="Specify the left roi metric to use",
)

right_roi = File(
exists=True,
position=5,
argstr="-right-roi %s",
desc="Specify the right roi metric to use",
)
cerebellum_roi = File(
exists=True,
position=6,
argstr="-cerebellum-roi %s",
desc="specify the cerebellum meytric to use",
)

vol_roi = File(
exists=True,
position=7,
argstr="-vol-roi %s",
desc="volume roi to use",
)

cifti_roi = File(
exists=True,
position=8,
argstr="-cifti-roi %s",
desc="cifti roi to use",
)
weights_file= File(
exists=True,
position=9,
argstr="-weights %s",
desc="specify the cerebellum surface metricto use",
)

fisher_ztrans = traits.Bool(
position=10,
argstr="-fisher-z",
desc=" fisherz transfrom",
)
no_demean = traits.Bool(
position=11,
argstr="-fisher-z",
desc=" fisherz transfrom",
)
compute_covariance = traits.Bool(
position=12,
argstr="-covariance ",
desc=" compute covariance instead of correlation",
)

class CiftiCorrelationOutputSpec(TraitedSpec):
out_file = File(exists=True, desc="output CIFTI file")

class CiftiCorrelation(WBCommand):
r"""
Compute correlation from CIFTI file
The input cifti file must have a brain models mapping on the chosen
dimension, columns for .ptseries or .dtseries,
>>> cifticorr = CiftiCorrelation()
>>> cifticorr.inputs.in_file = 'sub-01XX_task-rest.ptseries.nii'
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This file needs to exist (but should be empty) in https://.com/nipy/nipype/tree/master/nipype/testing/data to allow the doctests to work.

>>> cifticorr.inputs.out_file = 'sub_01XX_task-rest.pconn.nii'
>>> cifticorr.cmdline
wb_command -cifti-correlation sub-01XX_task-rest.ptseries.nii \
'sub_01XX_task-rest.pconn.nii'
"""

input_spec = CiftiCorrelationInputSpec
output_spec = CiftiCorrelationOutputSpec
_cmd = "wb_command -cifti-correlation"


class CiftiParcellateInputSpec(CommandLineInputSpec):
in_file = File(
exists=True,
mandatory=True,
argstr="%s ",
position=0,
desc="The input CIFTI file",
)
atlas_label = traits.File(
mandatory=True,
argstr="%s ",
position=1,
desc="atlas label, in mm",
)
direction = traits.Enum(
"ROW",
"COLUMN",
mandatory=True,
argstr="%s ",
position=2,
desc="which dimension to smooth along, ROW or COLUMN",
)
out_file = File(
name_source=["in_file"],
name_template="parcelated_%s.nii",
keep_extension=True,
argstr=" %s",
position=3,
desc="The output CIFTI",
)

spatial_weights = traits.Str(
argstr="-spatial-weights ",
position=4,
desc=" spatial weight file",
)

left_area_surf = File(
exists=True,
position=5,
argstr="-left-area-surface %s",
desc="Specify the left surface to use",
)

right_area_surf = File(
exists=True,
position=6,
argstr="-right-area-surface %s",
desc="Specify the right surface to use",
)
cerebellum_area_surf = File(
exists=True,
position=7,
argstr="-cerebellum-area-surf %s",
desc="specify the cerebellum surface to use",
)

left_area_metric = File(
exists=True,
position=8,
argstr="-left-area-metric %s",
desc="Specify the left surface metric to use",
)

right_area_metric = File(
exists=True,
position=9,
argstr="-right-area-metric %s",
desc="Specify the right surface metric to use",
)
cerebellum_area_metric = File(
exists=True,
position=10,
argstr="-cerebellum-area-metric %s",
desc="specify the cerebellum surface metricto use",
)

cifti_weights = File(
exists=True,
position=11,
argstr="-cifti-weights %s",
desc="cifti file containing weights",
)
cor_method = traits.Str(
position=12,
default='MEAN ',
argstr="-method %s",
desc=" correlation method, option inlcude MODE",
)

class CiftiParcellateOutputSpec(TraitedSpec):
out_file = File(exists=True, desc="output CIFTI file")


class CiftiParcellate(WBCommand):
r"""
Extract timeseries from CIFTI file
The input cifti file must have a brain models mapping on the chosen
dimension, columns for .dtseries,
>>> ciftiparcel = CiftiParcellate()
>>> ciftiparcel.inputs.in_file = 'sub-01XX_task-rest.dtseries.nii'
>>> ciftiparcel.inputs.out_file = 'sub_01XX_task-rest.ptseries.nii'
>>> ciftiparcel.inputs.atlas_label = 'schaefer_space-fsLR_den-32k_desc-400_atlas.dlabel.nii'
>>> ciftiparcel.inputs.direction = 'COLUMN'
>>> ciftiparcel.cmdline
wb_command -cifti-parcellate sub-01XX_task-rest.dtseries.nii \
schaefer_space-fsLR_den-32k_desc-400_atlas.dlabel.nii COLUMN \
sub_01XX_task-rest.ptseries.nii
"""
input_spec = CiftiParcellateInputSpec
output_spec = CiftiParcellateOutputSpec
_cmd = "wb_command -cifti-parcellate"

class CiftiSeparateMetricInputSpec(CommandLineInputSpec):
in_file = File(
exists=True,
mandatory=True,
argstr="%s ",
position=0,
desc="The input dense series",
)
direction = traits.Enum(
"ROW",
"COLUMN",
mandatory=True,
argstr="%s ",
position=1,
desc="which dimension to smooth along, ROW or COLUMN",
)
metric = traits.Str(
mandatory=True,
argstr=" -metric %s ",
position=2,
desc="which of the structure eg CORTEX_LEFT CORTEX_RIGHT" \
"check https://www.humanconnectome.org/software/workbench-command/-cifti-separate ",
)
out_file = File(
name_source=["in_file"],
name_template="correlation_matrix_%s.func.gii",
keep_extension=True,
argstr=" %s",
position=3,
desc="The gifti output, iether left and right",
)

class CiftiSeparateMetricOutputSpec(TraitedSpec):
out_file = File(exists=True, desc="output CIFTI file")

class CiftiSeparateMetric(WBCommand):
r"""
Extract left or right hemisphere surface from CIFTI file (.dtseries)
other structure can also be extracted
The input cifti file must have a brain models mapping on the chosen
dimension, columns for .dtseries,
>>> ciftiseparate = CiftiSeparateMetric()
>>> ciftiseparate.inputs.in_file = 'sub-01XX_task-rest.dtseries.nii'
>>> ciftiseparate.inputs.metric = "CORTEX_LEFT" # extract left hemisphere
>>> ciftiseparate.inputs.out_file = 'sub_01XX_task-rest_hemi-L.func.gii'
>>> ciftiseparate.inputs.direction = 'COLUMN'
>>> ciftiseparate.cmdline
wb_command -cifti-separate 'sub-01XX_task-rest.dtseries.nii' COLUMN \
-metric CORTEX_LEFT 'sub_01XX_task-rest_hemi-L.func.gii'
"""
input_spec = CiftiSeparateMetricInputSpec
output_spec = CiftiSeparateMetricOutputSpec
_cmd = "wb_command -cifti-separate "