Original file line numberDiff line numberDiff line change
Expand Up@@ -3,4 +3,4 @@
# vi: set ft=python sts=4 ts=4 sw=4 et:
"""Connectome Workbench is a visualization for neuroimaging data, esp. derived from HCP data."""
from .metric import MetricResample
from .cifti import CiftiSmooth
from .cifti import CiftiSmooth, CiftiCorrelation, CiftiParcellate, CiftiSeparateMetric
Original file line numberDiff line numberDiff line change
Expand Up@@ -154,3 +154,278 @@ 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 "
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
# AUTO-GENERATED by tools/checkspecs.py - DO NOT EDIT
from ..cifti import CiftiCorrelation


def test_CiftiCorrelation_inputs():
input_map = dict(
args=dict(
argstr="%s",
),
cerebellum_roi=dict(
argstr="-cerebellum-roi %s",
extensions=None,
position=6,
),
cifti_roi=dict(
argstr="-cifti-roi %s",
extensions=None,
position=8,
),
compute_covariance=dict(
argstr="-covariance ",
position=12,
),
environ=dict(
nohash=True,
usedefault=True,
),
fisher_ztrans=dict(
argstr="-fisher-z",
position=10,
),
in_file=dict(
argstr="%s ",
extensions=None,
mandatory=True,
position=0,
),
left_roi=dict(
argstr="-left-roi %s",
extensions=None,
position=3,
),
no_demean=dict(
argstr="-fisher-z",
position=11,
),
out_file=dict(
argstr=" %s",
extensions=None,
keep_extension=True,
name_source=["in_file"],
name_template="correlation_matrix_%s.nii",
position=1,
),
right_roi=dict(
argstr="-right-roi %s",
extensions=None,
position=5,
),
roi_override=dict(
argstr="-roi-override %s ",
exists=True,
position=2,
),
vol_roi=dict(
argstr="-vol-roi %s",
extensions=None,
position=7,
),
weights_file=dict(
argstr="-weights %s",
extensions=None,
position=9,
),
)
inputs = CiftiCorrelation.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_CiftiCorrelation_outputs():
output_map = dict(
out_file=dict(
extensions=None,
),
)
outputs = CiftiCorrelation.output_spec()

for key, metadata in list(output_map.items()):
for metakey, value in list(metadata.items()):
assert getattr(outputs.traits()[key], metakey) == value
Loading