@@ -38,6 +38,20 @@ def test_modelgen1():
3838 yield assert_equal , len (res .outputs .session_info [0 ]['regress' ]), 0
3939 yield assert_equal , len (res .outputs .session_info [0 ]['cond' ]), 1
4040 yield assert_almost_equal , np .array (res .outputs .session_info [0 ]['cond' ][0 ]['onset' ]), np .array ([12 , 300 , 600 , 1080 ])
41+ info = [Bunch (conditions = ['cond1' ], onsets = [[2 ]], durations = [[1 ]]),
42+ Bunch (conditions = ['cond1' ], onsets = [[3 ]], durations = [[1 ]])]
43+ s .inputs .subject_info = deepcopy (info )
44+ res = s .run ()
45+ yield assert_almost_equal , np .array (res .outputs .session_info [0 ]['cond' ][0 ]['duration' ]), np .array ([6. ])
46+ yield assert_almost_equal , np .array (res .outputs .session_info [1 ]['cond' ][0 ]['duration' ]), np .array ([6. ])
47+ info = [Bunch (conditions = ['cond1' , 'cond2' ], onsets = [[2 , 3 ], [2 ]], durations = [[1 , 1 ], [1 ]]),
48+ Bunch (conditions = ['cond1' , 'cond2' ], onsets = [[2 , 3 ], [2 , 4 ]], durations = [[1 , 1 ], [1 , 1 ]])]
49+ s .inputs .subject_info = deepcopy (info )
50+ s .inputs .input_units = 'scans'
51+ res = s .run ()
52+ yield assert_almost_equal , np .array (res .outputs .session_info [0 ]['cond' ][0 ]['duration' ]), np .array ([6. , 6. ])
53+ yield assert_almost_equal , np .array (res .outputs .session_info [0 ]['cond' ][1 ]['duration' ]), np .array ([6. ,])
54+ yield assert_almost_equal , np .array (res .outputs .session_info [1 ]['cond' ][1 ]['duration' ]), np .array ([6. , 6. ])
4155 rmtree (tempdir )
4256
4357
@@ -47,6 +61,7 @@ def test_modelgen_spm_concat():
4761 filename2 = os .path .join (tempdir , 'test2.nii' )
4862 Nifti1Image (np .random .rand (10 , 10 , 10 , 30 ), np .eye (4 )).to_filename (filename1 )
4963 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.
5065 s = SpecifySPMModel ()
5166 s .inputs .input_units = 'secs'
5267 s .inputs .concatenate_runs = True
@@ -64,16 +79,41 @@ def test_modelgen_spm_concat():
6479 yield assert_equal , np .sum (res .outputs .session_info [0 ]['regress' ][0 ]['val' ]), 30
6580 yield assert_equal , len (res .outputs .session_info [0 ]['cond' ]), 1
6681 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
6784 setattr (s .inputs , 'output_units' , 'scans' )
6885 yield assert_equal , s .inputs .output_units , 'scans'
6986 s .inputs .subject_info = deepcopy (info )
7087 res = s .run ()
7188 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
7290 s .inputs .concatenate_runs = False
7391 s .inputs .subject_info = deepcopy (info )
7492 s .inputs .output_units = 'secs'
7593 res = s .run ()
7694 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 ]
99+ info = [Bunch (conditions = ['cond1' , 'cond2' ], onsets = [[2 , 3 ], [2 ]], durations = [[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 ]])]
102+ s .inputs .subject_info = deepcopy (info )
103+ res = s .run ()
104+ yield assert_almost_equal , np .array (res .outputs .session_info [0 ]['cond' ][0 ]['duration' ]), np .array ([1. , 1. ])
105+ yield assert_almost_equal , np .array (res .outputs .session_info [0 ]['cond' ][1 ]['duration' ]), np .array ([1. ,])
106+ 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. ])
77117 rmtree (tempdir )
78118
79119
0 commit comments