Skip to content

Commit 4c8ec78

Browse files
committed
fix for identifying if one or multiple durations are employed to describe the condition
1 parent 8d624a4 commit 4c8ec78

File tree

2 files changed

+13
-1
lines changed

2 files changed

+13
-1
lines changed

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):
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: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ def test_modelgen_spm_concat():
7979
yield assert_equal, np.sum(res.outputs.session_info[0]['regress'][0]['val']), 30
8080
yield assert_equal, len(res.outputs.session_info[0]['cond']), 1
8181
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.])
8283
# Test case of scans as output units instead of seconds
8384
setattr(s.inputs, 'output_units', 'scans')
8485
yield assert_equal, s.inputs.output_units, 'scans'

0 commit comments

Comments
 (0)