Skip to content

Commit d7fe007

Browse files
committed
Merge remote-tracking branch 'upstream/master' into fix/spmversion
* upstream/master: (39 commits) fixed support for different folder structures in dicom importer fix: check if plugin args is None sty: autogenerate fix fix: make changes for release fix: deploy only nipy/nipype master branch fix for identifying if one or multiple durations are employed to describe the condition corrected line of modelgen and added test for variable concatenated events fix test FIX: Joint Fusion multimodal Interface Fix fix parse_inputs for interfaces not defining gradients add FSL bvec/bval format explicit to all interfaces fix doctests add tck2vtk add nohash=True on nthreads option add auto tests, fix doctests fix errors and missing parts add tck2connectome interface add interface for fs_parc_replace_sgm_first fix default file finding ...
2 parents 5673457 + 09a5851 commit d7fe007

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

41 files changed

+2360
-45
lines changed

.travis.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,4 +45,5 @@ deploy:
4545
secure: ZaN6Y4hfybPMi1rW3Qe03irCe/3GU4J4BJsjG+tClVN5Fjc3FCJaYU0k4wNd9q2kMjuRDv1efA9BN/5QasJS32oqs6wHvxzIWA18ucel4BBnAAkuviC1vqi/8Hk/DGB6e1gnmZ1Nv58zVLfn0MwlOKmsGDtvGQWc+HbaV2fS5NA=
4646
on:
4747
tags: true
48+
repo: nipy/nipype
4849
branch: master

CHANGES

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
Next release
22
============
33

4+
* ENH: New interfaces for MRTrix3 (https://github.com/nipy/nipype/pull/1126)
45
* ENH: New option in afni.3dRefit - zdel, ydel, zdel etc. (https://github.com/nipy/nipype/pull/1079)
56
* FIX: ants.Registration composite transform outputs are no longer returned as lists (https://github.com/nipy/nipype/pull/1183)
67
* BUG: ANTs Registration interface failed with multi-modal inputs

doc/_templates/sidebar_versions.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ <h3>{{ _('Versions') }}</h3>
1717
<td align="left">Release</td><td align="right">Devel</td>
1818
</tr>
1919
<tr>
20-
<td align="left">0.10.0</td><td align="right">{{ version }}</td>
20+
<td align="left">0.11.0-rc1</td><td align="right">{{ version }}</td>
2121
</tr>
2222
<tr>
2323
<td align="left"><a href="{{pathto('users/install')}}">Download</a></td>

doc/documentation.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ Documentation
99
:Release: |version|
1010
:Date: |today|
1111

12-
Previous versions: `0.9.2 <http://nipy.org/nipype/0.9.2>`_ `0.8 <http://nipy.org/nipype/0.8>`_
12+
Previous versions: `0.10.0 <http://nipy.org/nipype/0.10.0>`_ `0.9.2 <http://nipy.org/nipype/0.9.2>`_
1313

1414
.. container:: doc2
1515

nipype/algorithms/modelgen.py

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -462,6 +462,10 @@ def _concatenate_info(self, infolist):
462462
# names, onsets, durations, amplitudes, pmod, tmod, regressor_names,
463463
# regressors
464464
infoout = infolist[0]
465+
for j, val in enumerate(infolist[0].durations):
466+
if len(infolist[0].onsets[j]) > 1 and len(val) == 1:
467+
infoout.durations[j] = (infolist[0].durations[j] *
468+
len(infolist[0].onsets[j]))
465469
for i, info in enumerate(infolist[1:]):
466470
#info.[conditions, tmod] remain the same
467471
if info.onsets:
@@ -476,8 +480,15 @@ def _concatenate_info(self, infolist):
476480
sum(nscans[0:(i + 1)])
477481
infoout.onsets[j].extend(onsets.tolist())
478482
for j, val in enumerate(info.durations):
479-
if len(val) > 1:
483+
if len(info.onsets[j]) > 1 and len(val) == 1:
484+
infoout.durations[j].extend(info.durations[j] *
485+
len(info.onsets[j]))
486+
elif len(info.onsets[j]) == len(val):
480487
infoout.durations[j].extend(info.durations[j])
488+
else:
489+
raise ValueError('Mismatch in number of onsets and \
490+
durations for run {0}, condition \
491+
{1}'.format(i+2, j+1))
481492
if hasattr(info, 'amplitudes') and info.amplitudes:
482493
for j, val in enumerate(info.amplitudes):
483494
infoout.amplitudes[j].extend(info.amplitudes[j])

nipype/algorithms/tests/test_modelgen.py

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ def test_modelgen_spm_concat():
6161
filename2 = os.path.join(tempdir, 'test2.nii')
6262
Nifti1Image(np.random.rand(10, 10, 10, 30), np.eye(4)).to_filename(filename1)
6363
Nifti1Image(np.random.rand(10, 10, 10, 30), np.eye(4)).to_filename(filename2)
64+
# Test case when only one duration is passed, as being the same for all onsets.
6465
s = SpecifySPMModel()
6566
s.inputs.input_units = 'secs'
6667
s.inputs.concatenate_runs = True
@@ -78,23 +79,41 @@ def test_modelgen_spm_concat():
7879
yield assert_equal, np.sum(res.outputs.session_info[0]['regress'][0]['val']), 30
7980
yield assert_equal, len(res.outputs.session_info[0]['cond']), 1
8081
yield assert_almost_equal, np.array(res.outputs.session_info[0]['cond'][0]['onset']), np.array([2.0, 50.0, 100.0, 170.0, 210.0, 220.0, 280.0, 330.0])
82+
yield assert_almost_equal, np.array(res.outputs.session_info[0]['cond'][0]['duration']), np.array([1., 1., 1., 1., 1., 1., 1., 1.])
83+
# Test case of scans as output units instead of seconds
8184
setattr(s.inputs, 'output_units', 'scans')
8285
yield assert_equal, s.inputs.output_units, 'scans'
8386
s.inputs.subject_info = deepcopy(info)
8487
res = s.run()
8588
yield assert_almost_equal, np.array(res.outputs.session_info[0]['cond'][0]['onset']), np.array([2.0, 50.0, 100.0, 170.0, 210.0, 220.0, 280.0, 330.0])/6
89+
# Test case for no concatenation with seconds as output units
8690
s.inputs.concatenate_runs = False
8791
s.inputs.subject_info = deepcopy(info)
8892
s.inputs.output_units = 'secs'
8993
res = s.run()
9094
yield assert_almost_equal, np.array(res.outputs.session_info[0]['cond'][0]['onset']), np.array([2.0, 50.0, 100.0, 170.0])
95+
# Test case for variable number of events in separate runs, sometimes unique.
96+
filename3 = os.path.join(tempdir, 'test3.nii')
97+
Nifti1Image(np.random.rand(10, 10, 10, 30), np.eye(4)).to_filename(filename3)
98+
s.inputs.functional_runs = [filename1, filename2, filename3]
9199
info = [Bunch(conditions=['cond1', 'cond2'], onsets=[[2, 3], [2]], durations=[[1, 1], [1]]),
92-
Bunch(conditions=['cond1', 'cond2'], onsets=[[2, 3], [2, 4]], durations=[[1, 1], [1, 1]])]
100+
Bunch(conditions=['cond1', 'cond2'], onsets=[[2, 3], [2, 4]], durations=[[1, 1], [1, 1]]),
101+
Bunch(conditions=['cond1', 'cond2'], onsets=[[2, 3], [2]], durations=[[1, 1], [1]])]
93102
s.inputs.subject_info = deepcopy(info)
94103
res = s.run()
95104
yield assert_almost_equal, np.array(res.outputs.session_info[0]['cond'][0]['duration']), np.array([1., 1.])
96105
yield assert_almost_equal, np.array(res.outputs.session_info[0]['cond'][1]['duration']), np.array([1.,])
97106
yield assert_almost_equal, np.array(res.outputs.session_info[1]['cond'][1]['duration']), np.array([1., 1.])
107+
yield assert_almost_equal, np.array(res.outputs.session_info[2]['cond'][1]['duration']), np.array([1.,])
108+
# Test case for variable number of events in concatenated runs, sometimes unique.
109+
s.inputs.concatenate_runs = True
110+
info = [Bunch(conditions=['cond1', 'cond2'], onsets=[[2, 3], [2]], durations=[[1, 1], [1]]),
111+
Bunch(conditions=['cond1', 'cond2'], onsets=[[2, 3], [2, 4]], durations=[[1, 1], [1, 1]]),
112+
Bunch(conditions=['cond1', 'cond2'], onsets=[[2, 3], [2]], durations=[[1, 1], [1]])]
113+
s.inputs.subject_info = deepcopy(info)
114+
res = s.run()
115+
yield assert_almost_equal, np.array(res.outputs.session_info[0]['cond'][0]['duration']), np.array([1., 1., 1., 1., 1., 1.])
116+
yield assert_almost_equal, np.array(res.outputs.session_info[0]['cond'][1]['duration']), np.array([1., 1., 1., 1.])
98117
rmtree(tempdir)
99118

100119

nipype/info.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
_version_major = 0
1111
_version_minor = 11
1212
_version_micro = 0
13-
_version_extra = 'dev'
13+
_version_extra = 'rc1'
1414

1515
def get_nipype_gitversion():
1616
"""Nipype version as reported by the last commit in git

nipype/interfaces/ants/base.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,3 +83,8 @@ def set_default_num_threads(cls, num_threads):
8383
<instance>.inputs.num_threads
8484
"""
8585
cls._num_threads = num_threads
86+
87+
def _format_xarray(self, val):
88+
""" Convienence method for converting [1,2,3] -> 1x2x3 """
89+
val = 'x'.join([str(x) for x in val])
90+
return val

nipype/interfaces/ants/registration.py

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -284,13 +284,11 @@ class RegistrationInputSpec(ANTSCommandInputSpec):
284284
interpolation = traits.Enum(
285285
'Linear', 'NearestNeighbor', 'CosineWindowedSinc', 'WelchWindowedSinc',
286286
'HammingWindowedSinc', 'LanczosWindowedSinc', 'BSpline',
287-
# 'MultiLabel',
288-
# 'Gaussian',
289-
# 'BSpline',
290-
argstr='%s', usedefault=True)
291287
# MultiLabel[<sigma=imageSpacing>,<alpha=4.0>]
292288
# Gaussian[<sigma=imageSpacing>,<alpha=1.0>]
293289
# BSpline[<order=3>]
290+
argstr='%s', usedefault=True)
291+
294292
write_composite_transform = traits.Bool(
295293
argstr='--write-composite-transform %d',
296294
default=False, usedefault=True, desc='')
@@ -616,7 +614,7 @@ def _get_outputfilenames(self, inverse=False):
616614
output_filename = None
617615
if not inverse:
618616
if isdefined(self.inputs.output_warped_image) and \
619-
self.inputs.output_warped_image:
617+
self.inputs.output_warped_image:
620618
output_filename = self.inputs.output_warped_image
621619
if isinstance(output_filename, bool):
622620
output_filename = '%s_Warped.nii.gz' % self.inputs.output_transform_prefix
@@ -625,7 +623,7 @@ def _get_outputfilenames(self, inverse=False):
625623
return output_filename
626624
inv_output_filename = None
627625
if isdefined(self.inputs.output_inverse_warped_image) and \
628-
self.inputs.output_inverse_warped_image:
626+
self.inputs.output_inverse_warped_image:
629627
inv_output_filename = self.inputs.output_inverse_warped_image
630628
if isinstance(inv_output_filename, bool):
631629
inv_output_filename = '%s_InverseWarped.nii.gz' % self.inputs.output_transform_prefix

0 commit comments

Comments
 (0)