Skip to content

Commit c6c949c

Browse files
committed
Merge pull request #1200 from MartinPerez/spm_model_fix
fix for SpecifySPMModel
2 parents 447e7f1 + 8d624a4 commit c6c949c

File tree

2 files changed

+20
-2
lines changed

2 files changed

+20
-2
lines changed

nipype/algorithms/modelgen.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -476,7 +476,7 @@ def _concatenate_info(self, infolist):
476476
sum(nscans[0:(i + 1)])
477477
infoout.onsets[j].extend(onsets.tolist())
478478
for j, val in enumerate(info.durations):
479-
if len(val) > 1:
479+
if len(val):
480480
infoout.durations[j].extend(info.durations[j])
481481
if hasattr(info, 'amplitudes') and info.amplitudes:
482482
for j, val in enumerate(info.amplitudes):

nipype/algorithms/tests/test_modelgen.py

Lines changed: 19 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,40 @@ 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+
# Test case of scans as output units instead of seconds
8183
setattr(s.inputs, 'output_units', 'scans')
8284
yield assert_equal, s.inputs.output_units, 'scans'
8385
s.inputs.subject_info = deepcopy(info)
8486
res = s.run()
8587
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
88+
# Test case for no concatenation with seconds as output units
8689
s.inputs.concatenate_runs = False
8790
s.inputs.subject_info = deepcopy(info)
8891
s.inputs.output_units = 'secs'
8992
res = s.run()
9093
yield assert_almost_equal, np.array(res.outputs.session_info[0]['cond'][0]['onset']), np.array([2.0, 50.0, 100.0, 170.0])
94+
# Test case for variable number of events in separate runs, sometimes unique.
95+
filename3 = os.path.join(tempdir, 'test3.nii')
96+
Nifti1Image(np.random.rand(10, 10, 10, 30), np.eye(4)).to_filename(filename3)
97+
s.inputs.functional_runs = [filename1, filename2, filename3]
9198
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]])]
99+
Bunch(conditions=['cond1', 'cond2'], onsets=[[2, 3], [2, 4]], durations=[[1, 1], [1, 1]]),
100+
Bunch(conditions=['cond1', 'cond2'], onsets=[[2, 3], [2]], durations=[[1, 1], [1]])]
93101
s.inputs.subject_info = deepcopy(info)
94102
res = s.run()
95103
yield assert_almost_equal, np.array(res.outputs.session_info[0]['cond'][0]['duration']), np.array([1., 1.])
96104
yield assert_almost_equal, np.array(res.outputs.session_info[0]['cond'][1]['duration']), np.array([1.,])
97105
yield assert_almost_equal, np.array(res.outputs.session_info[1]['cond'][1]['duration']), np.array([1., 1.])
106+
yield assert_almost_equal, np.array(res.outputs.session_info[2]['cond'][1]['duration']), np.array([1.,])
107+
# Test case for variable number of events in concatenated runs, sometimes unique.
108+
s.inputs.concatenate_runs = True
109+
info = [Bunch(conditions=['cond1', 'cond2'], onsets=[[2, 3], [2]], durations=[[1, 1], [1]]),
110+
Bunch(conditions=['cond1', 'cond2'], onsets=[[2, 3], [2, 4]], durations=[[1, 1], [1, 1]]),
111+
Bunch(conditions=['cond1', 'cond2'], onsets=[[2, 3], [2]], durations=[[1, 1], [1]])]
112+
s.inputs.subject_info = deepcopy(info)
113+
res = s.run()
114+
yield assert_almost_equal, np.array(res.outputs.session_info[0]['cond'][0]['duration']), np.array([1., 1., 1., 1., 1., 1.])
115+
yield assert_almost_equal, np.array(res.outputs.session_info[0]['cond'][1]['duration']), np.array([1., 1., 1., 1.])
98116
rmtree(tempdir)
99117

100118

0 commit comments

Comments
 (0)