@@ -61,6 +61,7 @@ def test_modelgen_spm_concat():
61
61
filename2 = os .path .join (tempdir , 'test2.nii' )
62
62
Nifti1Image (np .random .rand (10 , 10 , 10 , 30 ), np .eye (4 )).to_filename (filename1 )
63
63
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.
64
65
s = SpecifySPMModel ()
65
66
s .inputs .input_units = 'secs'
66
67
s .inputs .concatenate_runs = True
@@ -78,23 +79,40 @@ def test_modelgen_spm_concat():
78
79
yield assert_equal , np .sum (res .outputs .session_info [0 ]['regress' ][0 ]['val' ]), 30
79
80
yield assert_equal , len (res .outputs .session_info [0 ]['cond' ]), 1
80
81
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
81
83
setattr (s .inputs , 'output_units' , 'scans' )
82
84
yield assert_equal , s .inputs .output_units , 'scans'
83
85
s .inputs .subject_info = deepcopy (info )
84
86
res = s .run ()
85
87
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
86
89
s .inputs .concatenate_runs = False
87
90
s .inputs .subject_info = deepcopy (info )
88
91
s .inputs .output_units = 'secs'
89
92
res = s .run ()
90
93
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 ]
91
98
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 ]])]
93
101
s .inputs .subject_info = deepcopy (info )
94
102
res = s .run ()
95
103
yield assert_almost_equal , np .array (res .outputs .session_info [0 ]['cond' ][0 ]['duration' ]), np .array ([1. , 1. ])
96
104
yield assert_almost_equal , np .array (res .outputs .session_info [0 ]['cond' ][1 ]['duration' ]), np .array ([1. ,])
97
105
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. ])
98
116
rmtree (tempdir )
99
117
100
118
0 commit comments