Skip to content

Commit f51b951

Browse files
committed
enh: replace realignment routine with newer Nipype interface for Nipy's newer class
1 parent 90608b0 commit f51b951

File tree

1 file changed

+28
-27
lines changed

1 file changed

+28
-27
lines changed

examples/rsfmri_preprocessing.py

Lines changed: 28 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,11 @@
1414
1515
For example:
1616
17-
python rsfmri_preprocessing.py -d /data/12345-34-1.dcm -f /data/Resting.nii -s subj001 -n 2 --despike -o output -p "plugin_args=dict(plugin='PBS', plugin_args=dict(qsub_args='-q many'))"
18-
17+
python rsfmri_preprocessing.py -d /data/12345-34-1.dcm -f /data/Resting.nii
18+
-s subj001 -n 2 --despike -o output
19+
-p "plugin_args=dict(plugin='PBS', plugin_args=dict(qsub_args='-q many'))"
1920
"""
21+
2022
import os
2123

2224
from nipype import (ants, afni, fsl, freesurfer, nipy, Function, DataSink)
@@ -43,6 +45,23 @@
4345
'from nipype.utils.filemanip import filename_to_list'
4446
]
4547

48+
49+
def get_info(dicom_files):
50+
"""Given a Siemens dicom file return metadata
51+
52+
Returns
53+
-------
54+
RepetitionTime
55+
Slice Acquisition Times
56+
Spacing between slices
57+
"""
58+
meta = default_extractor(read_file(filename_to_list(dicom_files)[0],
59+
stop_before_pixels=True,
60+
force=True))
61+
return (meta['RepetitionTime']/1000., meta['CsaImage.MosaicRefAcqTimes'],
62+
meta['SpacingBetweenSlices'])
63+
64+
4665
def median(in_files):
4766
"""Computes an average of the median of each realigned timeseries
4867
@@ -80,22 +99,6 @@ def get_aparc_aseg(files):
8099
raise ValueError('aparc+aseg.mgz not found')
81100

82101

83-
def get_info(dicom_files):
84-
"""Given a Siemens dicom file return metadata
85-
86-
Returns
87-
-------
88-
RepetitionTime
89-
Slice Acquisition Times
90-
Spacing between slices
91-
"""
92-
meta = default_extractor(read_file(filename_to_list(dicom_files)[0],
93-
stop_before_pixels=True,
94-
force=True))
95-
return (meta['RepetitionTime']/1000., meta['CsaImage.MosaicRefAcqTimes'],
96-
meta['SpacingBetweenSlices'])
97-
98-
99102
def motion_regressors(motion_params, order=2, derivatives=2):
100103
"""Compute motion regressors upto given order and derivative
101104
@@ -273,14 +276,11 @@ def create_workflow(files,
273276
wf.connect(remove_vol, 'roi_file', despiker, 'in_file')
274277

275278
# Run Nipy joint slice timing and realignment algorithm
276-
realign = Node(nipy.FmriRealign4d(), name='realign')
279+
realign = Node(nipy.SpaceTimeRealigner(), name='realign')
277280
realign.inputs.tr = TR
278-
realign.inputs.time_interp = True
279-
# FIX # dbg
280-
# This double argsort is necessary to convert slice order to space order
281-
# that's required by nipy realign currently. This will change in the next
282-
# release of Nipy.
283-
realign.inputs.slice_order = np.argsort(np.argsort(slice_times)).tolist()
281+
realign.inputs.slice_times = (np.array(slice_times)/1000.).tolist()
282+
realign.inputs.slice_info = 2
283+
284284
if despike:
285285
wf.connect(despiker, 'out_file', realign, 'in_file')
286286
else:
@@ -671,6 +671,7 @@ def create_workflow(files,
671671
Creates the full workflow including getting information from dicom files
672672
"""
673673

674+
674675
def create_resting_workflow(args):
675676
TR = args.TR
676677
slice_times = args.slice_times
@@ -683,8 +684,8 @@ def create_resting_workflow(args):
683684
img = load(args.files[0])
684685
slice_thickness = max(img.get_header().get_zooms()[:3])
685686

686-
kwargs = dict(files =[os.path.abspath(filename) for
687-
filename in args.files],
687+
kwargs = dict(files=[os.path.abspath(filename) for
688+
filename in args.files],
688689
subject_id=args.subject_id,
689690
n_vol=args.n_vol,
690691
despike=args.despike,

0 commit comments

Comments
 (0)