@@ -26,6 +26,7 @@ class TestSignalExtraction(unittest.TestCase):
26
26
'4d_label_file' : '4dlabels.nii' ,
27
27
'out_file' : 'signals.tsv'
28
28
}
29
+ labels = ['csf' , 'gray' , 'white' ]
29
30
30
31
def setUp (self ):
31
32
self .orig_dir = os .getcwd ()
@@ -37,44 +38,57 @@ def setUp(self):
37
38
38
39
@skipif (no_nilearn )
39
40
def test_signal_extraction (self ):
40
- # setup
41
- wanted = [[- 2.33333 , 2 , .5 ],
42
- [0 , - 2 , .5 ],
43
- [- .3333333 , - 1 , 2.5 ],
44
- [0 , - 2 , .5 ],
45
- [- 1.3333333 , - 5 , 1 ]]
46
- num_timepoints_wanted = self .fake_fmri_data .shape [3 ]
47
41
# run
48
-
49
- labels_wanted = ['csf' , 'gray' , 'white' ]
50
42
stats .SignalExtraction (in_file = self .filenames ['in_file' ],
51
43
label_file = self .filenames ['label_file' ],
52
- class_labels = labels_wanted ).run ()
44
+ class_labels = self . labels ).run ()
53
45
# assert
54
- with open (self .filenames ['out_file' ], 'r' ) as output :
55
- got = [line .split () for line in output ]
56
- labels_got = got .pop (0 ) # remove header
57
- assert_equal (labels_got , labels_wanted )
58
- assert_equal (len (got ), num_timepoints_wanted )
59
- # convert from string to float
60
- got = [[float (num ) for num in row ] for row in got ]
61
- for i , time in enumerate (got ):
62
- assert_equal (len (labels_wanted ), len (time ))
63
- for j , segment in enumerate (time ):
64
- assert_almost_equal (segment , wanted [i ][j ], decimal = 1 )
46
+ self .assert_expected_output (self .base_wanted )
65
47
66
48
@skipif (no_nilearn )
67
49
@raises (ValueError )
68
- def test_signal_extraction_bad_class_labels (self ):
50
+ def test_signal_extraction_bad_label_list (self ):
69
51
# run
70
52
stats .SignalExtraction (in_file = self .filenames ['in_file' ],
71
53
label_file = self .filenames ['label_file' ],
72
54
class_labels = ['bad' ]).run ()
73
55
74
56
@skipif (no_nilearn )
75
- def test_signal_extraction_4d_label (self ):
57
+ def test_signal_extraction_equiv_4d (self ):
58
+ self ._test_4d_label (self .base_wanted , self .fake_equiv_4d_label_data )
59
+
60
+ def test_signal_extraction_4d_ (self ):
61
+ self ._test_4d_label ([[- 5.0652173913 , - 5.44565217391 , 5.50543478261 ],
62
+ [0 , - 2 , .5 ],
63
+ [- .3333333 , - 1 , 2.5 ],
64
+ [0 , - 2 , .5 ],
65
+ [- 1.3333333 , - 5 , 1 ]], self .fake_4d_label_data )
66
+
67
+ def _test_4d_label (self , wanted , fake_labels ):
76
68
# setup
77
- utils .save_toy_nii (self .fake_4d_label_data , self .filenames ['4d_label_file' ])
69
+ utils .save_toy_nii (fake_labels , self .filenames ['4d_label_file' ])
70
+
71
+ # run
72
+ stats .SignalExtraction (in_file = self .filenames ['in_file' ],
73
+ label_file = self .filenames ['4d_label_file' ],
74
+ class_labels = self .labels ).run ()
75
+
76
+ self .assert_expected_output (wanted )
77
+
78
+ def assert_expected_output (self , wanted ):
79
+ with open (self .filenames ['out_file' ], 'r' ) as output :
80
+ got = [line .split () for line in output ]
81
+ labels_got = got .pop (0 ) # remove header
82
+ assert_equal (labels_got , self .labels )
83
+ assert_equal (len (got ), self .fake_fmri_data .shape [3 ],
84
+ 'num rows and num volumes' )
85
+ # convert from string to float
86
+ got = [[float (num ) for num in row ] for row in got ]
87
+ for i , time in enumerate (got ):
88
+ assert_equal (len (self .labels ), len (time ))
89
+ for j , segment in enumerate (time ):
90
+ assert_almost_equal (segment , wanted [i ][j ], decimal = 1 )
91
+
78
92
79
93
def tearDown (self ):
80
94
os .chdir (self .orig_dir )
@@ -99,13 +113,27 @@ def tearDown(self):
99
113
[[2 , 0 ],
100
114
[1 , 3 ]]])
101
115
116
+ fake_equiv_4d_label_data = np .array ([[[[1. , 0. , 0. ],
117
+ [0. , 0. , 0. ]],
118
+ [[0. , 0. , 1. ],
119
+ [1. , 0. , 0. ]]],
120
+ [[[0. , 1. , 0. ],
121
+ [0. , 0. , 0. ]],
122
+ [[1. , 0. , 0. ],
123
+ [0. , 0. , 1. ]]]])
124
+
125
+ base_wanted = [[- 2.33333 , 2 , .5 ],
126
+ [0 , - 2 , .5 ],
127
+ [- .3333333 , - 1 , 2.5 ],
128
+ [0 , - 2 , .5 ],
129
+ [- 1.3333333 , - 5 , 1 ]]
130
+
102
131
fake_4d_label_data = np .array ([[[[0.2 , 0.3 , 0.5 ],
103
132
[0.1 , 0.1 , 0.8 ]],
104
133
105
134
[[0.1 , 0.3 , 0.6 ],
106
135
[0.3 , 0.4 , 0.3 ]]],
107
136
108
-
109
137
[[[0.2 , 0.2 , 0.6 ],
110
138
[0. , 0.3 , 0.7 ]],
111
139
0 commit comments